@datagrok/sequence-translator 1.0.5 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/detectors.js +10 -8
- package/dist/package-test.js +46 -31
- package/dist/package.js +116 -85
- package/package.json +8 -4
- package/src/__jest__/remote.test.ts +4 -4
- package/src/__jest__/test-node.ts +3 -2
- package/src/autostart/registration.ts +49 -37
- package/src/structures-works/converters.ts +3 -3
- package/src/structures-works/from-monomers.ts +1 -1
- package/src/structures-works/map.ts +6 -0
- package/src/structures-works/mol-transformations.ts +17 -15
- package/src/structures-works/save-sense-antisense.ts +24 -11
- package/src/structures-works/sequence-codes-tools.ts +12 -4
- package/test-SequenceTranslator-d3cbf13cf137-2cb8277f.html +276 -0
- package/test-SequenceTranslator-4f0c8bae6479-6545fe31.html +0 -276
package/dist/package-test.js
CHANGED
|
@@ -234,9 +234,9 @@ function gcrsToLcms(sequence) {
|
|
|
234
234
|
}
|
|
235
235
|
const regExp = new RegExp('(' + arr1.join('|') + ')', 'g');
|
|
236
236
|
let r1 = sequence.replace(regExp, function (code) { return obj[code]; });
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
return r1
|
|
237
|
+
while (r1.indexOf('//') != -1)
|
|
238
|
+
r1 = r1.replace('//', '/');
|
|
239
|
+
return r1;
|
|
240
240
|
}
|
|
241
241
|
//name: asoGapmersNucleotidesToBioSpring
|
|
242
242
|
//input: string nucleotides {semType: DNA nucleotides}
|
|
@@ -556,7 +556,7 @@ function sequenceToMolV3000(sequence, inverted = false, oclRender = false, forma
|
|
|
556
556
|
}
|
|
557
557
|
}
|
|
558
558
|
}
|
|
559
|
-
return (0,_mol_transformations__WEBPACK_IMPORTED_MODULE_2__.getNucleotidesMol)(smilesCodes
|
|
559
|
+
return (0,_mol_transformations__WEBPACK_IMPORTED_MODULE_2__.getNucleotidesMol)(smilesCodes);
|
|
560
560
|
}
|
|
561
561
|
function sequenceToSmiles(sequence, inverted = false, format) {
|
|
562
562
|
const obj = getObjectWithCodesAndSmiles(sequence, format);
|
|
@@ -989,6 +989,12 @@ const map = {
|
|
|
989
989
|
'normalized': '',
|
|
990
990
|
'SMILES': 'OP(=O)(S)O',
|
|
991
991
|
},
|
|
992
|
+
's': {
|
|
993
|
+
'name': 'ps linkage',
|
|
994
|
+
'weight': 16.07,
|
|
995
|
+
'normalized': '',
|
|
996
|
+
'SMILES': 'OP(=O)(S)O',
|
|
997
|
+
},
|
|
992
998
|
'A': {
|
|
993
999
|
'name': 'Adenine',
|
|
994
1000
|
'weight': 313.21,
|
|
@@ -1464,7 +1470,7 @@ M V30 MDLV30/STEABS ATOMS=(2 2 6)
|
|
|
1464
1470
|
M V30 END COLLECTION
|
|
1465
1471
|
M V30 END CTAB
|
|
1466
1472
|
M END`;
|
|
1467
|
-
function getNucleotidesMol(smilesCodes
|
|
1473
|
+
function getNucleotidesMol(smilesCodes) {
|
|
1468
1474
|
const molBlocks = [];
|
|
1469
1475
|
for (let i = 0; i < smilesCodes.length - 1; i++) {
|
|
1470
1476
|
smilesCodes[i] == 'OP(=O)(O)O' ? molBlocks.push(PHOSHATE) :
|
|
@@ -1472,9 +1478,9 @@ function getNucleotidesMol(smilesCodes, oclRender = false) {
|
|
|
1472
1478
|
smilesCodes[i] == 'O[C@@H]1C[C@@H]O[C@H]1CO' ? molBlocks.push(rotateNucleotidesV3000(INVABASIC)) :
|
|
1473
1479
|
molBlocks.push(rotateNucleotidesV3000(smilesCodes[i]));
|
|
1474
1480
|
}
|
|
1475
|
-
return linkV3000(molBlocks, false
|
|
1481
|
+
return linkV3000(molBlocks, false);
|
|
1476
1482
|
}
|
|
1477
|
-
function linkV3000(molBlocks, twoChains = false,
|
|
1483
|
+
function linkV3000(molBlocks, twoChains = false, useChirality = true) {
|
|
1478
1484
|
let macroMolBlock = '\nDatagrok macromolecule handler\n\n';
|
|
1479
1485
|
macroMolBlock += ' 0 0 0 0 0 0 999 V3000\n';
|
|
1480
1486
|
macroMolBlock += 'M V30 BEGIN CTAB\n';
|
|
@@ -1577,24 +1583,23 @@ function linkV3000(molBlocks, twoChains = false, oclRender = false) {
|
|
|
1577
1583
|
}
|
|
1578
1584
|
const entries = 4;
|
|
1579
1585
|
const collNumber = Math.ceil(collection.length / entries);
|
|
1580
|
-
if (oclRender) {
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
}
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
collection[entries * i + j] + ' ';
|
|
1595
|
-
}
|
|
1586
|
+
//if (oclRender) {
|
|
1587
|
+
// collectionBlock += 'M V30 MDLV30/STEABS ATOMS=(' + collection.length;
|
|
1588
|
+
// for (let j = 0; j < collection.length; j++)
|
|
1589
|
+
// collectionBlock += ' ' + collection[j];
|
|
1590
|
+
// collectionBlock += ')\n';
|
|
1591
|
+
//} else {
|
|
1592
|
+
collectionBlock += 'M V30 MDLV30/STEABS ATOMS=(' + collection.length + ' -\n';
|
|
1593
|
+
for (let i = 0; i < collNumber; i++) {
|
|
1594
|
+
collectionBlock += 'M V30 ';
|
|
1595
|
+
const entriesCurrent = i + 1 == collNumber ? collection.length - (collNumber - 1) * entries : entries;
|
|
1596
|
+
for (let j = 0; j < entriesCurrent; j++) {
|
|
1597
|
+
collectionBlock += (j + 1 == entriesCurrent) ?
|
|
1598
|
+
(i == collNumber - 1 ? collection[entries * i + j] + ')\n' : collection[entries * i + j] + ' -\n') :
|
|
1599
|
+
collection[entries * i + j] + ' ';
|
|
1596
1600
|
}
|
|
1597
1601
|
}
|
|
1602
|
+
//}
|
|
1598
1603
|
//generate file
|
|
1599
1604
|
twoChains ? natom : natom++;
|
|
1600
1605
|
macroMolBlock += 'M V30 COUNTS ' + natom + ' ' + nbond + ' 0 0 0\n';
|
|
@@ -1604,12 +1609,15 @@ function linkV3000(molBlocks, twoChains = false, oclRender = false) {
|
|
|
1604
1609
|
macroMolBlock += 'M V30 BEGIN BOND\n';
|
|
1605
1610
|
macroMolBlock += bondBlock;
|
|
1606
1611
|
macroMolBlock += 'M V30 END BOND\n';
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1612
|
+
if (useChirality) {
|
|
1613
|
+
macroMolBlock += 'M V30 BEGIN COLLECTION\n';
|
|
1614
|
+
macroMolBlock += collectionBlock;
|
|
1615
|
+
macroMolBlock += 'M V30 END COLLECTION\n';
|
|
1616
|
+
}
|
|
1617
|
+
else
|
|
1618
|
+
macroMolBlock = macroMolBlock.replace(/ CFG=\d/g, ' ');
|
|
1610
1619
|
macroMolBlock += 'M V30 END CTAB\n';
|
|
1611
1620
|
macroMolBlock += 'M END\n';
|
|
1612
|
-
macroMolBlock = macroMolBlock.replaceAll('CFG=1', '').replaceAll('CFG=2', '').replaceAll('CFG=3', '').replaceAll('CFG=4', '');
|
|
1613
1621
|
return macroMolBlock;
|
|
1614
1622
|
}
|
|
1615
1623
|
function rotateNucleotidesV3000(molecule) {
|
|
@@ -1844,6 +1852,9 @@ function getFormat(sequence) {
|
|
|
1844
1852
|
});
|
|
1845
1853
|
return possibleSynthesizers[0];
|
|
1846
1854
|
}
|
|
1855
|
+
function sortByStringLengthInDescendingOrder(array) {
|
|
1856
|
+
return array.sort(function (a, b) { return b.length - a.length; });
|
|
1857
|
+
}
|
|
1847
1858
|
function isValidSequence(sequence, format) {
|
|
1848
1859
|
const possibleSynthesizers = format == null ?
|
|
1849
1860
|
getListOfPossibleSynthesizersByFirstMatchedCode(sequence) :
|
|
@@ -1866,7 +1877,7 @@ function isValidSequence(sequence, format) {
|
|
|
1866
1877
|
const firstUniqueCharacters = ['r', 'd'];
|
|
1867
1878
|
const nucleotides = ['A', 'U', 'T', 'C', 'G'];
|
|
1868
1879
|
possibleSynthesizers.forEach((synthesizer) => {
|
|
1869
|
-
const codes = getAllCodesOfSynthesizer(synthesizer);
|
|
1880
|
+
const codes = sortByStringLengthInDescendingOrder(getAllCodesOfSynthesizer(synthesizer));
|
|
1870
1881
|
while (outputIndex < sequence.length) {
|
|
1871
1882
|
const matchedCode = codes.find((c) => c == sequence.slice(outputIndex, outputIndex + c.length));
|
|
1872
1883
|
if (matchedCode == null)
|
|
@@ -1943,9 +1954,11 @@ function getAllCodesOfSynthesizer(synthesizer) {
|
|
|
1943
1954
|
return codes.concat(Object.keys(_map__WEBPACK_IMPORTED_MODULE_0__.MODIFICATIONS)).concat(_map__WEBPACK_IMPORTED_MODULE_0__.delimiter);
|
|
1944
1955
|
}
|
|
1945
1956
|
function getListOfPossibleSynthesizersByFirstMatchedCode(sequence) {
|
|
1946
|
-
|
|
1957
|
+
let synthesizers = [];
|
|
1947
1958
|
Object.keys(_map__WEBPACK_IMPORTED_MODULE_0__.map).forEach((synthesizer) => {
|
|
1948
|
-
|
|
1959
|
+
let codes = sortByStringLengthInDescendingOrder(getAllCodesOfSynthesizer(synthesizer));
|
|
1960
|
+
if (synthesizer == 'Janssen GCRS Codes')
|
|
1961
|
+
codes = codes.concat(_map__WEBPACK_IMPORTED_MODULE_0__.gcrsCodesWithoutSmiles);
|
|
1949
1962
|
//TODO: get first non-dropdown code when there are two modifications
|
|
1950
1963
|
let start = 0;
|
|
1951
1964
|
for (let i = 0; i < sequence.length; i++) {
|
|
@@ -1954,6 +1967,8 @@ function getListOfPossibleSynthesizersByFirstMatchedCode(sequence) {
|
|
|
1954
1967
|
break;
|
|
1955
1968
|
}
|
|
1956
1969
|
}
|
|
1970
|
+
if (_map__WEBPACK_IMPORTED_MODULE_0__.gcrsCodesWithoutSmiles.some((s) => s == sequence.slice(start, start + s.length)))
|
|
1971
|
+
synthesizers = ['Janssen GCRS Codes'];
|
|
1957
1972
|
if (codes.some((s) => s == sequence.slice(start, start + s.length)))
|
|
1958
1973
|
synthesizers.push(synthesizer);
|
|
1959
1974
|
});
|
|
@@ -2637,4 +2652,4 @@ function test() {
|
|
|
2637
2652
|
sequencetranslator_test = __webpack_exports__;
|
|
2638
2653
|
/******/ })()
|
|
2639
2654
|
;
|
|
2640
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNULG9CQUFvQjtBQUNwQixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsK0VBQXdCO0FBQ2hELHFCQUFxQiw4REFBb0I7QUFDbEM7QUFDUDtBQUNBLDRDQUE0Qzs7Ozs7Ozs7Ozs7Ozs7OztBQ2p0QjVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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O0FBQ0EsUUFBUSwwRUFBTSxDQUFDLGlGQUFnQiw4REFBOEQsdUVBQW9CO0FBQ2pILEtBQUs7QUFDTCxDQUFDOzs7Ozs7Ozs7OztBQ3hhRDs7Ozs7Ozs7OztBQ0FBOzs7Ozs7VUNBQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7OztXQ3RCQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsaUNBQWlDLFdBQVc7V0FDNUM7V0FDQTs7Ozs7V0NQQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHlDQUF5Qyx3Q0FBd0M7V0FDakY7V0FDQTtXQUNBOzs7OztXQ1BBOzs7OztXQ0FBO1dBQ0E7V0FDQTtXQUNBLHVEQUF1RCxpQkFBaUI7V0FDeEU7V0FDQSxnREFBZ0QsYUFBYTtXQUM3RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNOQSxpQkFBaUIsU0FBSSxJQUFJLFNBQUk7QUFDN0IsNEJBQTRCLCtEQUErRCxpQkFBaUI7QUFDNUc7QUFDQSxvQ0FBb0MsTUFBTSwrQkFBK0IsWUFBWTtBQUNyRixtQ0FBbUMsTUFBTSxtQ0FBbUMsWUFBWTtBQUN4RixnQ0FBZ0M7QUFDaEM7QUFDQSxLQUFLO0FBQ0w7QUFDc0M7QUFDK0I7QUFDdkM7QUFDdkIscUJBQXFCLG9EQUFVO0FBQ3JCO0FBQ2pCO0FBQ0E7QUFDTztBQUNQO0FBQ0EsMkJBQTJCLDRFQUFRO0FBQ25DLGVBQWUsa0VBQXdCO0FBQ3ZDLEtBQUs7QUFDTCIsInNvdXJjZXMiOlsid2VicGFjazovL3NlcXVlbmNldHJhbnNsYXRvci8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90ZXN0LmpzIiwid2VicGFjazovL3NlcXVlbmNldHJhbnNsYXRvci8uL3NyYy9zdHJ1Y3R1cmVzLXdvcmtzL2NvbnZlcnRlcnMudHMiLCJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yLy4vc3JjL3N0cnVjdHVyZXMtd29ya3MvZnJvbS1tb25vbWVycy50cyIsIndlYnBhY2s6Ly9zZXF1ZW5jZXRyYW5zbGF0b3IvLi9zcmMvc3RydWN0dXJlcy13b3Jrcy9tYXAudHMiLCJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yLy4vc3JjL3N0cnVjdHVyZXMtd29ya3MvbW9sLXRyYW5zZm9ybWF0aW9ucy50cyIsIndlYnBhY2s6Ly9zZXF1ZW5jZXRyYW5zbGF0b3IvLi9zcmMvc3RydWN0dXJlcy13b3Jrcy9zZXF1ZW5jZS1jb2Rlcy10b29scy50cyIsIndlYnBhY2s6Ly9zZXF1ZW5jZXRyYW5zbGF0b3IvLi9zcmMvdGVzdHMvc21pbGVzLXRlc3RzLnRzIiwid2VicGFjazovL3NlcXVlbmNldHJhbnNsYXRvci9leHRlcm5hbCB2YXIgXCJER1wiIiwid2VicGFjazovL3NlcXVlbmNldHJhbnNsYXRvci9leHRlcm5hbCB2YXIgXCJncm9rXCIiLCJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3NlcXVlbmNldHJhbnNsYXRvci93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9zZXF1ZW5jZXRyYW5zbGF0b3Ivd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3NlcXVlbmNldHJhbnNsYXRvci93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3NlcXVlbmNldHJhbnNsYXRvci93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL3NlcXVlbmNldHJhbnNsYXRvci8uL3NyYy9wYWNrYWdlLXRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgKiBhcyBncm9rIGZyb20gXCJkYXRhZ3Jvay1hcGkvZ3Jva1wiO1xuZXhwb3J0IGxldCB0ZXN0cyA9IHt9O1xuZXhwb3J0IGxldCBjdXJyZW50Q2F0ZWdvcnk7XG5leHBvcnQgdmFyIGFzc3VyZTtcbihmdW5jdGlvbiAoYXNzdXJlKSB7XG4gICAgZnVuY3Rpb24gbm90TnVsbCh2YWx1ZSwgbmFtZSkge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IGAke25hbWUgPT0gbnVsbCA/ICdWYWx1ZScgOiBuYW1lfSBub3QgZGVmaW5lZGA7XG4gICAgfVxuICAgIGFzc3VyZS5ub3ROdWxsID0gbm90TnVsbDtcbn0pKGFzc3VyZSB8fCAoYXNzdXJlID0ge30pKTtcbmV4cG9ydCBjbGFzcyBUZXN0IHtcbiAgICBjb25zdHJ1Y3RvcihjYXRlZ29yeSwgbmFtZSwgdGVzdCwgb3B0aW9ucykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICB0aGlzLmNhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IChvcHRpb25zID0ge30pO1xuICAgICAgICAoX2EgPSBvcHRpb25zLnRpbWVvdXQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IChvcHRpb25zLnRpbWVvdXQgPSAzMDAwMCk7XG4gICAgICAgIChfYiA9IG9wdGlvbnMudW5oYW5kbGVkRXhjZXB0aW9uVGltZW91dCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogKG9wdGlvbnMudW5oYW5kbGVkRXhjZXB0aW9uVGltZW91dCA9IDIwMDApO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLnRlc3QgPSAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBncm9rLnNoZWxsLmxhc3RFcnJvciA9ICcnO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB5aWVsZCB0ZXN0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCEoeWllbGQgYXNzZXJ0Tm9FcnJvcihvcHRpb25zLnVuaGFuZGxlZEV4Y2VwdGlvblRpbWVvdXQpKSlcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGBVbmhhbmRsZWQgZXhjZXB0aW9uIGR1cmluZyB0ZXN0OiAke2dyb2suc2hlbGwubGFzdEVycm9yfWApO1xuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHRlc3QobmFtZSwgdGVzdCwgb3B0aW9ucykge1xuICAgIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICAgICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICAgIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzID09IHVuZGVmaW5lZClcbiAgICAgICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyA9IFtdO1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMucHVzaChuZXcgVGVzdChjdXJyZW50Q2F0ZWdvcnksIG5hbWUsIHRlc3QsIG9wdGlvbnMpKTtcbn1cbi8qKiBBd2FpdHMgZm9yIGEgd2hpbGUgY2hlY2tpbmcgdGhlIGVycm9yIHN0YXR1cyBvZiB0aGUgcGxhdGZvcm0gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnROb0Vycm9yKG1zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtcyAvIDUwMDsgKytpKSB7XG4gICAgICAgICAgICB5aWVsZCBkZWxheSg1MDApO1xuICAgICAgICAgICAgaWYgKGdyb2suc2hlbGwubGFzdEVycm9yLmxlbmd0aCAhPT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG59XG4vKiogVGVzdHMgdHdvIG9iamVjdHMgZm9yIGVxdWFsaXR5LCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZXkgYXJlIG5vdCBlcXVhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3QoYWN0dWFsLCBleHBlY3RlZCkge1xuICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKVxuICAgICAgICB0aHJvdyBgRXhwZWN0ZWQgXCIke2V4cGVjdGVkfVwiLCBnb3QgXCIke2FjdHVhbH1cImA7XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0RmxvYXQoYWN0dWFsLCBleHBlY3RlZCwgdG9sZXJhbmNlID0gMC4wMDEpIHtcbiAgICBjb25zdCBhcmVFcXVhbCA9IE1hdGguYWJzKGFjdHVhbCAtIGV4cGVjdGVkKSA8IDAuMDAxO1xuICAgIGlmICghYXJlRXF1YWwpXG4gICAgICAgIHRocm93IGBFeHBlY3RlZCAke2V4cGVjdGVkfSwgZ290ICR7YWN0dWFsfSAodG9sZXJhbmNlID0gJHt0b2xlcmFuY2V9KWA7XG59XG4vKiogRGVmaW5lcyBhIHRlc3Qgc3VpdGUuICovXG5leHBvcnQgZnVuY3Rpb24gY2F0ZWdvcnkoY2F0ZWdvcnksIHRlc3RzKSB7XG4gICAgY3VycmVudENhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGVzdHMoKTtcbn1cbi8qKiBEZWZpbmVzIGEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSB0ZXN0cyBpbiB0aGlzIGNhdGVnb3J5IGFyZSBleGVjdXRlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZWZvcmUoYmVmb3JlKSB7XG4gICAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgICAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5iZWZvcmUgPSBiZWZvcmU7XG59XG4vKiogRGVmaW5lcyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSB0ZXN0cyBpbiB0aGlzIGNhdGVnb3J5IGFyZSBleGVjdXRlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZnRlcihhZnRlcikge1xuICAgIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICAgICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uYWZ0ZXIgPSBhZnRlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBydW5UZXN0cyhvcHRpb25zKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByZXN1bHRzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRlc3RzKSkge1xuICAgICAgICAgICAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2F0ZWdvcnkpICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmICgha2V5LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2F0ZWdvcnkudG9Mb3dlckNhc2UoKSkpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuYmVmb3JlKVxuICAgICAgICAgICAgICAgICAgICB5aWVsZCB2YWx1ZS5iZWZvcmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoICh4KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuYmVmb3JlU3RhdHVzID0geC50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHQgPSAoX2EgPSB2YWx1ZS50ZXN0cykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgICAgICAgICBsZXQgcmVzID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaCh5aWVsZCBleGVjVGVzdCh0W2ldLCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMudGVzdCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGRhdGEgPSAoeWllbGQgUHJvbWlzZS5hbGwocmVzKSkuZmlsdGVyKChkKSA9PiBkLnJlc3VsdCAhPSAnc2tpcHBlZCcpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuYWZ0ZXIpXG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHZhbHVlLmFmdGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmFmdGVyU3RhdHVzID0geC50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlLmFmdGVyU3RhdHVzKVxuICAgICAgICAgICAgICAgIGRhdGEucHVzaCh7IGNhdGVnb3J5OiBrZXksIG5hbWU6ICdpbml0JywgcmVzdWx0OiB2YWx1ZS5hZnRlclN0YXR1cywgc3VjY2VzczogZmFsc2UgfSk7XG4gICAgICAgICAgICBpZiAodmFsdWUuYmVmb3JlU3RhdHVzKVxuICAgICAgICAgICAgICAgIGRhdGEucHVzaCh7IGNhdGVnb3J5OiBrZXksIG5hbWU6ICdpbml0JywgcmVzdWx0OiB2YWx1ZS5iZWZvcmVTdGF0dXMsIHN1Y2Nlc3M6IGZhbHNlIH0pO1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKC4uLmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZXhlY1Rlc3QodCwgcHJlZGljYXRlKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCByO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZSAhPSB1bmRlZmluZWQgJiYgKCF0Lm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHByZWRpY2F0ZS50b0xvd2VyQ2FzZSgpKSkpXG4gICAgICAgICAgICAgICAgciA9IHsgc3VjY2VzczogdHJ1ZSwgcmVzdWx0OiAnc2tpcHBlZCcgfTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByID0geyBzdWNjZXNzOiB0cnVlLCByZXN1bHQ6IChfYSA9IHlpZWxkIHQudGVzdCgpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnT0snIH07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgIHIgPSB7IHN1Y2Nlc3M6IGZhbHNlLCByZXN1bHQ6IHgudG9TdHJpbmcoKSB9O1xuICAgICAgICB9XG4gICAgICAgIHIuY2F0ZWdvcnkgPSB0LmNhdGVnb3J5O1xuICAgICAgICByLm5hbWUgPSB0Lm5hbWU7XG4gICAgICAgIHJldHVybiByO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRlbGF5KG1zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIG1zKSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkR1Z6ZEM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJblJsYzNRdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3pzN08wRkJRVUVzVDBGQlR5eExRVUZMTEVsQlFVa3NUVUZCVFN4dFFrRkJiVUlzUTBGQlF6dEJRVVV4UXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hMUVVGTExFZEJRVGhKTEVWQlFVVXNRMEZCUXp0QlFVVnFTeXhOUVVGTkxFTkJRVU1zU1VGQlNTeGxRVUYxUWl4RFFVRkRPMEZCUlc1RExFMUJRVTBzUzBGQlZ5eE5RVUZOTEVOQlRYUkNPMEZCVGtRc1YwRkJhVUlzVFVGQlRUdEpRVVZ5UWl4VFFVRm5RaXhQUVVGUExFTkJRVU1zUzBGQlZTeEZRVUZGTEVsQlFXRTdVVUZETDBNc1NVRkJTU3hMUVVGTExFbEJRVWtzU1VGQlNUdFpRVU5tTEUxQlFVMHNSMEZCUnl4SlFVRkpMRWxCUVVrc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1kwRkJZeXhEUVVGRE8wbEJRM3BFTEVOQlFVTTdTVUZJWlN4alFVRlBMRlZCUjNSQ0xFTkJRVUU3UVVGRFNDeERRVUZETEVWQlRtZENMRTFCUVUwc1MwRkJUaXhOUVVGTkxGRkJUWFJDTzBGQlQwUXNUVUZCVFN4UFFVRlBMRWxCUVVrN1NVRk5aaXhaUVVGWkxGRkJRV2RDTEVWQlFVVXNTVUZCV1N4RlFVRkZMRWxCUVhkQ0xFVkJRVVVzVDBGQmNVSTdPMUZCUTNwR0xFbEJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NVVUZCVVN4RFFVRkRPMUZCUTNwQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTJwQ0xFOUJRVThzWVVGQlVDeFBRVUZQTEdOQlFWQXNUMEZCVHl4SlFVRlFMRTlCUVU4c1IwRkJTeXhGUVVGRkxFVkJRVU03VVVGRFppeE5RVUZCTEU5QlFVOHNRMEZCUXl4UFFVRlBMRzlEUVVGbUxFOUJRVThzUTBGQlF5eFBRVUZQTEVkQlFVc3NTMEZCU3l4RlFVRkRPMUZCUXpGQ0xFMUJRVUVzVDBGQlR5eERRVUZETEhsQ1FVRjVRaXh2UTBGQmFrTXNUMEZCVHl4RFFVRkRMSGxDUVVGNVFpeEhRVUZMTEVsQlFVa3NSVUZCUXp0UlFVTXpReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEU5QlFVOHNRMEZCUXp0UlFVTjJRaXhKUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVkQlFYVkNMRVZCUVVVN1dVRkRia01zVDBGQlR5eEpRVUZKTEU5QlFVOHNRMEZCUXl4RFFVRlBMRTlCUVU4c1JVRkJSU3hOUVVGTkxFVkJRVVVzUlVGQlJUdG5Ra0ZETTBNc1NVRkJTU3hOUVVGTkxFZEJRVWNzUlVGQlJTeERRVUZETzJkQ1FVTm9RaXhKUVVGSk8yOUNRVU5HTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1UwRkJVeXhIUVVGSExFVkJRVVVzUTBGQlF6dHZRa0ZETVVJc1RVRkJUU3hIUVVGSExFMUJRVTBzU1VGQlNTeEZRVUZGTEVOQlFVTTdhVUpCUTNaQ08yZENRVUZETEU5QlFVOHNRMEZCVFN4RlFVRkZPMjlDUVVObUxFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0cFFrRkRXRHRuUWtGRFJDeEpRVUZKTEVOQlFVTXNRMEZCUXl4TlFVRk5MR0ZCUVdFc1EwRkJReXhQUVVGUkxFTkJRVU1zZVVKQlFUQkNMRU5CUVVNc1EwRkJRenR2UWtGRE4wUXNUVUZCVFN4RFFVRkRMRzlEUVVGdlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRExFTkJRVU03WjBKQlEzSkZMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFpRVU5zUWl4RFFVRkRMRU5CUVVFc1EwRkJReXhEUVVGRE8xRkJRMHdzUTBGQlF5eERRVUZCTEVOQlFVTTdTVUZEU2l4RFFVRkRPME5CUTBZN1FVRkZSQ3hOUVVGTkxGVkJRVlVzU1VGQlNTeERRVUZETEVsQlFWa3NSVUZCUlN4SlFVRjNRaXhGUVVGRkxFOUJRWEZDTzBsQlEyaEdMRWxCUVVrc1MwRkJTeXhEUVVGRExHVkJRV1VzUTBGQlF5eEpRVUZKTEZOQlFWTTdVVUZEY2tNc1MwRkJTeXhEUVVGRExHVkJRV1VzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTTVRaXhKUVVGSkxFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXl4TFFVRkxMRWxCUVVrc1UwRkJVenRSUVVNelF5eExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRU5CUVVNc1MwRkJTeXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU53UXl4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zUzBGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhsUVVGbExFVkJRVVVzU1VGQlNTeEZRVUZGTEVsQlFVa3NSVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRM0pHTEVOQlFVTTdRVUZGUkN4dFJVRkJiVVU3UVVGRGJrVXNUVUZCVFN4VlFVRm5RaXhoUVVGaExFTkJRVU1zUlVGQlZUczdVVUZETlVNc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhIUVVGSExFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVTdXVUZEYWtNc1RVRkJUU3hMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEYWtJc1NVRkJTU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZOQlFWTXNRMEZCUXl4TlFVRk5MRXRCUVVzc1EwRkJRenRuUWtGRGJrTXNUMEZCVHl4TFFVRkxMRU5CUVVNN1UwRkRhRUk3VVVGRFJDeFBRVUZQTEVsQlFVa3NRMEZCUXp0SlFVTmtMRU5CUVVNN1EwRkJRVHRCUVVWRUxHbEdRVUZwUmp0QlFVTnFSaXhOUVVGTkxGVkJRVlVzVFVGQlRTeERRVUZETEUxQlFWY3NSVUZCUlN4UlFVRmhPMGxCUXk5RExFbEJRVWtzVFVGQlRTeExRVUZMTEZGQlFWRTdVVUZEY2tJc1RVRkJUU3hoUVVGaExGRkJRVkVzVjBGQlZ5eE5RVUZOTEVkQlFVY3NRMEZCUXp0QlFVTndSQ3hEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEZkQlFWY3NRMEZCUXl4TlFVRmpMRVZCUVVVc1VVRkJaMElzUlVGQlJTeFRRVUZUTEVkQlFVY3NTMEZCU3p0SlFVTTNSU3hOUVVGTkxGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTFCUVUwc1IwRkJSeXhSUVVGUkxFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTTdTVUZEY2tRc1NVRkJTU3hEUVVGRExGRkJRVkU3VVVGRFdDeE5RVUZOTEZsQlFWa3NVVUZCVVN4VFFVRlRMRTFCUVUwc2FVSkJRV2xDTEZOQlFWTXNSMEZCUnl4RFFVRkRPMEZCUXpORkxFTkJRVU03UVVGRlJDdzBRa0ZCTkVJN1FVRkROVUlzVFVGQlRTeFZRVUZWTEZGQlFWRXNRMEZCUXl4UlFVRm5RaXhGUVVGRkxFdEJRV2xDTzBsQlF6RkVMR1ZCUVdVc1IwRkJSeXhSUVVGUkxFTkJRVU03U1VGRE0wSXNTMEZCU3l4RlFVRkZMRU5CUVVNN1FVRkRWaXhEUVVGRE8wRkJSVVFzZDBaQlFYZEdPMEZCUTNoR0xFMUJRVTBzVlVGQlZTeE5RVUZOTEVOQlFVTXNUVUZCTWtJN1NVRkRhRVFzU1VGQlNTeExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRWxCUVVrc1UwRkJVenRSUVVOeVF5eExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJRemxDTEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJReXhOUVVGTkxFZEJRVWNzVFVGQlRTeERRVUZETzBGQlEzcERMRU5CUVVNN1FVRkZSQ3gxUmtGQmRVWTdRVUZEZGtZc1RVRkJUU3hWUVVGVkxFdEJRVXNzUTBGQlF5eExRVUV3UWp0SlFVTTVReXhKUVVGSkxFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTXNTVUZCU1N4VFFVRlRPMUZCUTNKRExFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNN1NVRkRPVUlzUzBGQlN5eERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRMRXRCUVVzc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGRGRrTXNRMEZCUXp0QlFVZEVMRTFCUVUwc1ZVRkJaMElzVVVGQlVTeERRVUZETEU5QlFUUkRPenM3VVVGRGVrVXNTVUZCU1N4UFFVRlBMRWRCUVRSRkxFVkJRVVVzUTBGQlF6dFJRVVV4Uml4TFFVRkxMRTFCUVUwc1EwRkJReXhIUVVGSExFVkJRVVVzUzBGQlN5eERRVUZETEVsQlFVa3NUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJUdFpRVU5vUkN4SlFVRkpMRU5CUVVFc1QwRkJUeXhoUVVGUUxFOUJRVThzZFVKQlFWQXNUMEZCVHl4RFFVRkZMRkZCUVZFc1MwRkJTU3hUUVVGVExFVkJRVVU3WjBKQlEyeERMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRMRTlCUVU4c1lVRkJVQ3hQUVVGUExIVkNRVUZRTEU5QlFVOHNRMEZCUlN4UlFVRlJMRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU03YjBKQlEyaEZMRk5CUVZNN1lVRkRXanRaUVVORUxFbEJRVWs3WjBKQlEwWXNTVUZCU1N4TFFVRkxMRU5CUVVNc1RVRkJUVHR2UWtGRFpDeE5RVUZOTEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRoUVVONFFqdFpRVUZETEU5QlFVOHNRMEZCVFN4RlFVRkZPMmRDUVVObUxFdEJRVXNzUTBGQlF5eFpRVUZaTEVkQlFVY3NRMEZCUXl4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8yRkJRMjVETzFsQlEwUXNTVUZCU1N4RFFVRkRMRWRCUVVjc1RVRkJRU3hMUVVGTExFTkJRVU1zUzBGQlN5eHRRMEZCU1N4RlFVRkZMRU5CUVVNN1dVRkRNVUlzU1VGQlNTeEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkRPMWxCUTJJc1MwRkJTU3hKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdaMEpCUTJoRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEU5QlFVOHNZVUZCVUN4UFFVRlBMSFZDUVVGUUxFOUJRVThzUTBGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRPMkZCUXk5RE8xbEJSVVFzU1VGQlNTeEpRVUZKTEVkQlFVY3NRMEZCUXl4TlFVRk5MRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRWxCUVVrc1UwRkJVeXhEUVVGRExFTkJRVU03V1VGRGVrVXNTVUZCU1R0blFrRkRSaXhKUVVGSkxFdEJRVXNzUTBGQlF5eExRVUZMTzI5Q1FVTmlMRTFCUVUwc1MwRkJTeXhEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETzJGQlEzWkNPMWxCUVVNc1QwRkJUeXhEUVVGTkxFVkJRVVU3WjBKQlEyWXNTMEZCU3l4RFFVRkRMRmRCUVZjc1IwRkJSeXhEUVVGRExFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdZVUZEYkVNN1dVRkRSQ3hKUVVGSkxFdEJRVXNzUTBGQlF5eFhRVUZYTzJkQ1FVTnVRaXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVTXNVVUZCVVN4RlFVRkZMRWRCUVVjc1JVRkJSU3hKUVVGSkxFVkJRVVVzVFVGQlRTeEZRVUZGTEUxQlFVMHNSVUZCUlN4TFFVRkxMRU5CUVVNc1YwRkJWeXhGUVVGRkxFOUJRVThzUlVGQlJTeExRVUZMTEVWQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTNSR0xFbEJRVWtzUzBGQlN5eERRVUZETEZsQlFWazdaMEpCUTNCQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUXl4UlFVRlJMRVZCUVVVc1IwRkJSeXhGUVVGRkxFbEJRVWtzUlVGQlJTeE5RVUZOTEVWQlFVVXNUVUZCVFN4RlFVRkZMRXRCUVVzc1EwRkJReXhaUVVGWkxFVkJRVVVzVDBGQlR5eEZRVUZGTEV0QlFVc3NSVUZCUXl4RFFVRkRMRU5CUVVNN1dVRkRka1lzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8xTkJRM1pDTzFGQlJVUXNUMEZCVHl4UFFVRlBMRU5CUVVNN08wTkJRMmhDTzBGQlJVUXNVMEZCWlN4UlFVRlJMRU5CUVVNc1EwRkJUeXhGUVVGRkxGTkJRVFpDT3pzN1VVRkROVVFzU1VGQlNTeERRVUY1UlN4RFFVRkRPMUZCUXpsRkxFbEJRVWs3V1VGRFJpeEpRVUZKTEZOQlFWTXNTVUZCU1N4VFFVRlRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRExGTkJRVk1zUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXl4RFFVRkRPMmRDUVVOMlJpeERRVUZETEVkQlFVY3NSVUZCUXl4UFFVRlBMRVZCUVVVc1NVRkJTU3hGUVVGRkxFMUJRVTBzUlVGQlJTeFRRVUZUTEVWQlFVTXNRMEZCUXpzN1owSkJSWFpETEVOQlFVTXNSMEZCUnl4RlFVRkRMRTlCUVU4c1JVRkJSU3hKUVVGSkxFVkJRVVVzVFVGQlRTeEZRVUZGTEUxQlFVRXNUVUZCVFN4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRkxHMURRVUZKTEVsQlFVa3NSVUZCUXl4RFFVRkRPMU5CUTNaRU8xRkJRVU1zVDBGQlR5eERRVUZOTEVWQlFVVTdXVUZEWml4RFFVRkRMRWRCUVVjc1JVRkJReXhQUVVGUExFVkJRVVVzUzBGQlN5eEZRVUZGTEUxQlFVMHNSVUZCUlN4RFFVRkRMRU5CUVVNc1VVRkJVU3hGUVVGRkxFVkJRVU1zUTBGQlF6dFRRVU0xUXp0UlFVTkVMRU5CUVVNc1EwRkJReXhSUVVGUkxFZEJRVWNzUTBGQlF5eERRVUZETEZGQlFWRXNRMEZCUXp0UlFVTjRRaXhEUVVGRExFTkJRVU1zU1VGQlNTeEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNN1VVRkRhRUlzVDBGQlR5eERRVUZETEVOQlFVTTdPME5CUTFZN1FVRkZSQ3hOUVVGTkxGVkJRV2RDTEV0QlFVc3NRMEZCUXl4RlFVRlZPenRSUVVOd1F5eE5RVUZQTEVsQlFVa3NUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRemRETEVOQlFVTTdRMEZCUVNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENBcUlHRnpJR2R5YjJzZ1puSnZiU0JjSW1SaGRHRm5jbTlyTFdGd2FTOW5jbTlyWENJN1hHNWNibVY0Y0c5eWRDQnNaWFFnZEdWemRITTZJSHRiYTJWNU9pQnpkSEpwYm1kZE9pQjdkR1Z6ZEhNL09pQlVaWE4wVzEwc0lHSmxabTl5WlQ4NklDZ3BJRDArSUZCeWIyMXBjMlU4ZG05cFpENHNJR0ZtZEdWeVB6b2dLQ2tnUFQ0Z1VISnZiV2x6WlR4MmIybGtQaXdnWW1WbWIzSmxVM1JoZEhWelB6b2djM1J5YVc1bkxDQmhablJsY2xOMFlYUjFjejg2SUhOMGNtbHVaMzE5SUQwZ2UzMDdYRzVjYm1WNGNHOXlkQ0JzWlhRZ1kzVnljbVZ1ZEVOaGRHVm5iM0o1T2lCemRISnBibWM3WEc1Y2JtVjRjRzl5ZENCdVlXMWxjM0JoWTJVZ1lYTnpkWEpsSUh0Y2JseHVJQ0JsZUhCdmNuUWdablZ1WTNScGIyNGdibTkwVG5Wc2JDaDJZV3gxWlRvZ1lXNTVMQ0J1WVcxbFB6b2djM1J5YVc1bktTQjdYRzRnSUNBZ2FXWWdLSFpoYkhWbElEMDlJRzUxYkd3cFhHNGdJQ0FnSUNCMGFISnZkeUJnSkh0dVlXMWxJRDA5SUc1MWJHd2dQeUFuVm1Gc2RXVW5JRG9nYm1GdFpYMGdibTkwSUdSbFptbHVaV1JnTzF4dUlDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCcGJuUmxjbVpoWTJVZ1ZHVnpkRTl3ZEdsdmJuTWdlMXh1SUNCMGFXMWxiM1YwUHlBNklHNTFiV0psY2p0Y2JpQWdkVzVvWVc1a2JHVmtSWGhqWlhCMGFXOXVWR2x0Wlc5MWREOGdPaUJ1ZFcxaVpYSTdYRzU5WEc1Y2JtVjRjRzl5ZENCamJHRnpjeUJVWlhOMElIdGNiaUFnZEdWemREb2dLQ2tnUFQ0Z1VISnZiV2x6WlR4aGJuaytPMXh1SUNCdVlXMWxPaUJ6ZEhKcGJtYzdYRzRnSUdOaGRHVm5iM0o1T2lCemRISnBibWM3WEc0Z0lHOXdkR2x2Ym5NL09pQlVaWE4wVDNCMGFXOXVjenRjYmx4dUlDQmpiMjV6ZEhKMVkzUnZjaWhqWVhSbFoyOXllVG9nYzNSeWFXNW5MQ0J1WVcxbE9pQnpkSEpwYm1jc0lIUmxjM1E2SUNncElEMCtJRkJ5YjIxcGMyVThZVzU1UGl3Z2IzQjBhVzl1Y3o4NklGUmxjM1JQY0hScGIyNXpLU0I3WEc0Z0lDQWdkR2hwY3k1allYUmxaMjl5ZVNBOUlHTmhkR1ZuYjNKNU8xeHVJQ0FnSUhSb2FYTXVibUZ0WlNBOUlHNWhiV1U3WEc0Z0lDQWdiM0IwYVc5dWN5QS9QejBnZTMwN1hHNGdJQ0FnYjNCMGFXOXVjeTUwYVcxbGIzVjBJRDgvUFNBek1EQXdNRHRjYmlBZ0lDQnZjSFJwYjI1ekxuVnVhR0Z1Wkd4bFpFVjRZMlZ3ZEdsdmJsUnBiV1Z2ZFhRZ1B6ODlJREl3TURBN1hHNGdJQ0FnZEdocGN5NXZjSFJwYjI1eklEMGdiM0IwYVc5dWN6dGNiaUFnSUNCMGFHbHpMblJsYzNRZ1BTQmhjM2x1WXlBb0tUb2dVSEp2YldselpUeGhibmsrSUQwK0lIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCdVpYY2dVSEp2YldselpTaGhjM2x1WXlBb2NtVnpiMngyWlN3Z2NtVnFaV04wS1NBOVBpQjdYRzRnSUNBZ0lDQWdJR3hsZENCeVpYTjFiSFFnUFNBbkp6dGNiaUFnSUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ0lDQm5jbTlyTG5Ob1pXeHNMbXhoYzNSRmNuSnZjaUE5SUNjbk8xeHVJQ0FnSUNBZ0lDQWdJSEpsYzNWc2RDQTlJR0YzWVdsMElIUmxjM1FvS1R0Y2JpQWdJQ0FnSUNBZ2ZTQmpZWFJqYUNBb1pUb2dZVzU1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdjbVZxWldOMEtHVXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdsbUlDZ2hLR0YzWVdsMElHRnpjMlZ5ZEU1dlJYSnliM0lvYjNCMGFXOXVjeUV1ZFc1b1lXNWtiR1ZrUlhoalpYQjBhVzl1VkdsdFpXOTFkQ0VwS1NsY2JpQWdJQ0FnSUNBZ0lDQnlaV3BsWTNRb1lGVnVhR0Z1Wkd4bFpDQmxlR05sY0hScGIyNGdaSFZ5YVc1bklIUmxjM1E2SUNSN1ozSnZheTV6YUdWc2JDNXNZWE4wUlhKeWIzSjlZQ2s3WEc0Z0lDQWdJQ0FnSUhKbGMyOXNkbVVvY21WemRXeDBLVHRjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJSDA3WEc0Z0lIMWNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUhSbGMzUW9ibUZ0WlRvZ2MzUnlhVzVuTENCMFpYTjBPaUFvS1NBOVBpQlFjbTl0YVhObFBHRnVlVDRzSUc5d2RHbHZibk0vT2lCVVpYTjBUM0IwYVc5dWN5azZJSFp2YVdRZ2UxeHVJQ0JwWmlBb2RHVnpkSE5iWTNWeWNtVnVkRU5oZEdWbmIzSjVYU0E5UFNCMWJtUmxabWx1WldRcFhHNGdJQ0FnZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTQTlJSHQ5TzF4dUlDQnBaaUFvZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTNTBaWE4wY3lBOVBTQjFibVJsWm1sdVpXUXBYRzRnSUNBZ2RHVnpkSE5iWTNWeWNtVnVkRU5oZEdWbmIzSjVYUzUwWlhOMGN5QTlJRnRkTzF4dUlDQjBaWE4wYzF0amRYSnlaVzUwUTJGMFpXZHZjbmxkTG5SbGMzUnpJUzV3ZFhOb0tHNWxkeUJVWlhOMEtHTjFjbkpsYm5SRFlYUmxaMjl5ZVN3Z2JtRnRaU3dnZEdWemRDd2diM0IwYVc5dWN5a3BPMXh1ZlZ4dVhHNHZLaW9nUVhkaGFYUnpJR1p2Y2lCaElIZG9hV3hsSUdOb1pXTnJhVzVuSUhSb1pTQmxjbkp2Y2lCemRHRjBkWE1nYjJZZ2RHaGxJSEJzWVhSbWIzSnRJQ292WEc1bGVIQnZjblFnWVhONWJtTWdablZ1WTNScGIyNGdZWE56WlhKMFRtOUZjbkp2Y2lodGN6b2diblZ0WW1WeUtUb2dVSEp2YldselpUeGliMjlzWldGdVBpQjdYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2JYTWdMeUExTURBN0lDc3JhU2tnZTF4dUlDQWdJR0YzWVdsMElHUmxiR0Y1S0RVd01DazdYRzRnSUNBZ2FXWWdLR2R5YjJzdWMyaGxiR3d1YkdGemRFVnljbTl5TG14bGJtZDBhQ0FoUFQwZ01DbGNiaUFnSUNBZ0lISmxkSFZ5YmlCbVlXeHpaVHRjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdkSEoxWlR0Y2JuMWNibHh1THlvcUlGUmxjM1J6SUhSM2J5QnZZbXBsWTNSeklHWnZjaUJsY1hWaGJHbDBlU3dnZEdoeWIzZHpJR0Z1SUdWNFkyVndkR2x2YmlCcFppQjBhR1Y1SUdGeVpTQnViM1FnWlhGMVlXd3VJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWlhod1pXTjBLR0ZqZEhWaGJEb2dZVzU1TENCbGVIQmxZM1JsWkRvZ1lXNTVLVG9nZG05cFpDQjdYRzRnSUdsbUlDaGhZM1IxWVd3Z0lUMDlJR1Y0Y0dWamRHVmtLVnh1SUNBZ0lIUm9jbTkzSUdCRmVIQmxZM1JsWkNCY0lpUjdaWGh3WldOMFpXUjlYQ0lzSUdkdmRDQmNJaVI3WVdOMGRXRnNmVndpWUR0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR1Y0Y0dWamRFWnNiMkYwS0dGamRIVmhiRG9nYm5WdFltVnlMQ0JsZUhCbFkzUmxaRG9nYm5WdFltVnlMQ0IwYjJ4bGNtRnVZMlVnUFNBd0xqQXdNU2s2SUhadmFXUWdlMXh1SUNCamIyNXpkQ0JoY21WRmNYVmhiQ0E5SUUxaGRHZ3VZV0p6S0dGamRIVmhiQ0F0SUdWNGNHVmpkR1ZrS1NBOElEQXVNREF4TzF4dUlDQnBaaUFvSVdGeVpVVnhkV0ZzS1Z4dUlDQWdJSFJvY205M0lHQkZlSEJsWTNSbFpDQWtlMlY0Y0dWamRHVmtmU3dnWjI5MElDUjdZV04wZFdGc2ZTQW9kRzlzWlhKaGJtTmxJRDBnSkh0MGIyeGxjbUZ1WTJWOUtXQTdYRzU5WEc1Y2JpOHFLaUJFWldacGJtVnpJR0VnZEdWemRDQnpkV2wwWlM0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmpZWFJsWjI5eWVTaGpZWFJsWjI5eWVUb2djM1J5YVc1bkxDQjBaWE4wY3pvZ0tDa2dQVDRnZG05cFpDazZJSFp2YVdRZ2UxeHVJQ0JqZFhKeVpXNTBRMkYwWldkdmNua2dQU0JqWVhSbFoyOXllVHRjYmlBZ2RHVnpkSE1vS1R0Y2JuMWNibHh1THlvcUlFUmxabWx1WlhNZ1lTQm1kVzVqZEdsdmJpQjBieUJpWlNCbGVHVmpkWFJsWkNCaVpXWnZjbVVnZEdobElIUmxjM1J6SUdsdUlIUm9hWE1nWTJGMFpXZHZjbmtnWVhKbElHVjRaV04xZEdWa0xpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR0psWm05eVpTaGlaV1p2Y21VNklDZ3BJRDArSUZCeWIyMXBjMlU4ZG05cFpENHBPaUIyYjJsa0lIdGNiaUFnYVdZZ0tIUmxjM1J6VzJOMWNuSmxiblJEWVhSbFoyOXllVjBnUFQwZ2RXNWtaV1pwYm1Wa0tWeHVJQ0FnSUhSbGMzUnpXMk4xY25KbGJuUkRZWFJsWjI5eWVWMGdQU0I3ZlR0Y2JpQWdkR1Z6ZEhOYlkzVnljbVZ1ZEVOaGRHVm5iM0o1WFM1aVpXWnZjbVVnUFNCaVpXWnZjbVU3WEc1OVhHNWNiaThxS2lCRVpXWnBibVZ6SUdFZ1puVnVZM1JwYjI0Z2RHOGdZbVVnWlhobFkzVjBaV1FnWVdaMFpYSWdkR2hsSUhSbGMzUnpJR2x1SUhSb2FYTWdZMkYwWldkdmNua2dZWEpsSUdWNFpXTjFkR1ZrTGlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHRm1kR1Z5S0dGbWRHVnlPaUFvS1NBOVBpQlFjbTl0YVhObFBIWnZhV1ErS1RvZ2RtOXBaQ0I3WEc0Z0lHbG1JQ2gwWlhOMGMxdGpkWEp5Wlc1MFEyRjBaV2R2Y25sZElEMDlJSFZ1WkdWbWFXNWxaQ2xjYmlBZ0lDQjBaWE4wYzF0amRYSnlaVzUwUTJGMFpXZHZjbmxkSUQwZ2UzMDdYRzRnSUhSbGMzUnpXMk4xY25KbGJuUkRZWFJsWjI5eWVWMHVZV1owWlhJZ1BTQmhablJsY2p0Y2JuMWNibHh1WEc1bGVIQnZjblFnWVhONWJtTWdablZ1WTNScGIyNGdjblZ1VkdWemRITW9iM0IwYVc5dWN6ODZJSHRqWVhSbFoyOXllVDg2SUhOMGNtbHVaeXdnZEdWemREODZJSE4wY21sdVozMHBJSHRjYmlBZ2JHVjBJSEpsYzNWc2RITTZJSHNnWTJGMFpXZHZjbmsvT2lCemRISnBibWNzSUc1aGJXVS9PaUJ6ZEhKcGJtY3NJSE4xWTJObGMzTTZJR0p2YjJ4bFlXNHNJSEpsYzNWc2REb2djM1J5YVc1bmZWdGRJRDBnVzEwN1hHNWNiaUFnWm05eUlDaGpiMjV6ZENCYmEyVjVMQ0IyWVd4MVpWMGdiMllnVDJKcVpXTjBMbVZ1ZEhKcFpYTW9kR1Z6ZEhNcEtTQjdYRzRnSUNBZ2FXWWdLRzl3ZEdsdmJuTS9MbU5oZEdWbmIzSjVJQ0U5SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0FnSUNBZ2FXWWdLQ0ZyWlhrdWRHOU1iM2RsY2tOaGMyVW9LUzV6ZEdGeWRITlhhWFJvS0c5d2RHbHZibk0vTG1OaGRHVm5iM0o1TG5SdlRHOTNaWEpEWVhObEtDa3BLVnh1SUNBZ0lDQWdJQ0JqYjI1MGFXNTFaVHRjYmlBZ0lDQjlYRzRnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJR2xtSUNoMllXeDFaUzVpWldadmNtVXBYRzRnSUNBZ0lDQWdJR0YzWVdsMElIWmhiSFZsTG1KbFptOXlaU2dwTzF4dUlDQWdJSDBnWTJGMFkyZ2dLSGc2SUdGdWVTa2dlMXh1SUNBZ0lDQWdkbUZzZFdVdVltVm1iM0psVTNSaGRIVnpJRDBnZUM1MGIxTjBjbWx1WnlncE8xeHVJQ0FnSUgxY2JpQWdJQ0JzWlhRZ2RDQTlJSFpoYkhWbExuUmxjM1J6SUQ4L0lGdGRPMXh1SUNBZ0lHeGxkQ0J5WlhNZ1BTQmJYVHRjYmlBZ0lDQm1iM0lvYkdWMElHa2dQU0F3T3lCcElEd2dkQzVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ2NtVnpMbkIxYzJnb1lYZGhhWFFnWlhobFkxUmxjM1FvZEZ0cFhTd2diM0IwYVc5dWN6OHVkR1Z6ZENrcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUd4bGRDQmtZWFJoSUQwZ0tHRjNZV2wwSUZCeWIyMXBjMlV1WVd4c0tISmxjeWtwTG1acGJIUmxjaWdvWkNrZ1BUNGdaQzV5WlhOMWJIUWdJVDBnSjNOcmFYQndaV1FuS1R0Y2JpQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ2FXWWdLSFpoYkhWbExtRm1kR1Z5S1Z4dUlDQWdJQ0FnSUNCaGQyRnBkQ0IyWVd4MVpTNWhablJsY2lncE8xeHVJQ0FnSUgwZ1kyRjBZMmdnS0hnNklHRnVlU2tnZTF4dUlDQWdJQ0FnZG1Gc2RXVXVZV1owWlhKVGRHRjBkWE1nUFNCNExuUnZVM1J5YVc1bktDazdYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDaDJZV3gxWlM1aFpuUmxjbE4wWVhSMWN5bGNiaUFnSUNBZ0lHUmhkR0V1Y0hWemFDaDdZMkYwWldkdmNuazZJR3RsZVN3Z2JtRnRaVG9nSjJsdWFYUW5MQ0J5WlhOMWJIUTZJSFpoYkhWbExtRm1kR1Z5VTNSaGRIVnpMQ0J6ZFdOalpYTnpPaUJtWVd4elpYMHBPMXh1SUNBZ0lHbG1JQ2gyWVd4MVpTNWlaV1p2Y21WVGRHRjBkWE1wWEc0Z0lDQWdJQ0JrWVhSaExuQjFjMmdvZTJOaGRHVm5iM0o1T2lCclpYa3NJRzVoYldVNklDZHBibWwwSnl3Z2NtVnpkV3gwT2lCMllXeDFaUzVpWldadmNtVlRkR0YwZFhNc0lITjFZMk5sYzNNNklHWmhiSE5sZlNrN1hHNGdJQ0FnY21WemRXeDBjeTV3ZFhOb0tDNHVMbVJoZEdFcE8xeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlISmxjM1ZzZEhNN1hHNTlYRzVjYm1GemVXNWpJR1oxYm1OMGFXOXVJR1Y0WldOVVpYTjBLSFE2SUZSbGMzUXNJSEJ5WldScFkyRjBaVG9nYzNSeWFXNW5JSHdnZFc1a1pXWnBibVZrS1NCN1hHNGdJR3hsZENCeU9pQjdJR05oZEdWbmIzSjVQem9nYzNSeWFXNW5MQ0J1WVcxbFB6b2djM1J5YVc1bkxDQnpkV05qWlhOek9pQmliMjlzWldGdUxDQnlaWE4xYkhRNklITjBjbWx1WnlCOU8xeHVJQ0IwY25rZ2UxeHVJQ0FnSUdsbUlDaHdjbVZrYVdOaGRHVWdJVDBnZFc1a1pXWnBibVZrSUNZbUlDZ2hkQzV1WVcxbExuUnZURzkzWlhKRFlYTmxLQ2t1YzNSaGNuUnpWMmwwYUNod2NtVmthV05oZEdVdWRHOU1iM2RsY2tOaGMyVW9LU2twS1Z4dUlDQWdJQ0FnY2lBOUlIdHpkV05qWlhOek9pQjBjblZsTENCeVpYTjFiSFE2SUNkemEybHdjR1ZrSjMwN1hHNGdJQ0FnWld4elpWeHVJQ0FnSUNBZ2NpQTlJSHR6ZFdOalpYTnpPaUIwY25WbExDQnlaWE4xYkhRNklHRjNZV2wwSUhRdWRHVnpkQ2dwSUQ4L0lDZFBTeWQ5TzF4dUlDQjlJR05oZEdOb0lDaDRPaUJoYm5rcElIdGNiaUFnSUNCeUlEMGdlM04xWTJObGMzTTZJR1poYkhObExDQnlaWE4xYkhRNklIZ3VkRzlUZEhKcGJtY29LWDA3WEc0Z0lIMWNiaUFnY2k1allYUmxaMjl5ZVNBOUlIUXVZMkYwWldkdmNuazdYRzRnSUhJdWJtRnRaU0E5SUhRdWJtRnRaVHRjYmlBZ2NtVjBkWEp1SUhJN1hHNTlYRzVjYm1WNGNHOXlkQ0JoYzNsdVl5Qm1kVzVqZEdsdmJpQmtaV3hoZVNodGN6b2diblZ0WW1WeUtTQjdYRzRnSUdGM1lXbDBJQ0J1WlhjZ1VISnZiV2x6WlNoeUlEMCtJSE5sZEZScGJXVnZkWFFvY2l3Z2JYTXBLVHRjYm4xY2JpSmRmUT09IiwiaW1wb3J0IHsgbGNtc1RvR2NycyB9IGZyb20gJy4vbWFwJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG4vL25hbWU6IGdjcnNUb0xjbXNcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogR0NSU31cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBMQ01TfVxuZXhwb3J0IGZ1bmN0aW9uIGdjcnNUb0xjbXMoc2VxdWVuY2UpIHtcbiAgICBjb25zdCBkZiA9IERHLkRhdGFGcmFtZS5mcm9tQ3N2KGxjbXNUb0djcnMpO1xuICAgIGNvbnN0IGFycjEgPSBkZi5nZXRDb2woJ0dDUlMnKS50b0xpc3QoKTtcbiAgICBjb25zdCBhcnIyID0gZGYuZ2V0Q29sKCdMQ01TJykudG9MaXN0KCk7XG4gICAgY29uc3Qgb2JqID0ge307XG4gICAgYXJyMS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4gb2JqW2VsZW1lbnRdID0gYXJyMltpbmRleF0pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyMS5sZW5ndGg7IGkrKykge1xuICAgICAgICBhcnIxW2ldID0gYXJyMVtpXS5yZXBsYWNlKCcoJywgJ1xcXFwoJyk7XG4gICAgICAgIGFycjFbaV0gPSBhcnIxW2ldLnJlcGxhY2UoJyknLCAnXFxcXCknKTtcbiAgICB9XG4gICAgY29uc3QgcmVnRXhwID0gbmV3IFJlZ0V4cCgnKCcgKyBhcnIxLmpvaW4oJ3wnKSArICcpJywgJ2cnKTtcbiAgICBsZXQgcjEgPSBzZXF1ZW5jZS5yZXBsYWNlKHJlZ0V4cCwgZnVuY3Rpb24gKGNvZGUpIHsgcmV0dXJuIG9ialtjb2RlXTsgfSk7XG4gICAgcjEgPSByMS5yZXBsYWNlKCcvLycsICcvJyk7XG4gICAgcjEgPSByMS5yZXBsYWNlKCcvLycsICcvJyk7XG4gICAgcmV0dXJuIHIxLnJlcGxhY2UoJy8vJywgJy8nKTtcbn1cbi8vbmFtZTogYXNvR2FwbWVyc051Y2xlb3RpZGVzVG9CaW9TcHJpbmdcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogRE5BIG51Y2xlb3RpZGVzfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IEJpb1NwcmluZyAvIEdhcG1lcnN9XG5leHBvcnQgZnVuY3Rpb24gYXNvR2FwbWVyc051Y2xlb3RpZGVzVG9CaW9TcHJpbmcobnVjbGVvdGlkZXMpIHtcbiAgICBsZXQgY291bnQgPSAtMTtcbiAgICBjb25zdCBvYmpGb3JFZGdlcyA9IHtcbiAgICAgICAgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJywgJ1QnOiAnNSonLCAnQSc6ICc2KicsICdDJzogJzcqJywgJ0cnOiAnOConXG4gICAgfTtcbiAgICBjb25zdCBvYmpGb3JDZW50ZXIgPSB7XG4gICAgICAgICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsICdUJzogJ1QqJywgJ0EnOiAnQSonLCAnQyc6ICc5KicsICdHJzogJ0cqJ1xuICAgIH07XG4gICAgcmV0dXJuIG51Y2xlb3RpZGVzLnJlcGxhY2UoLyhcXChpbnZhYmFzaWNcXCl8XFwoR2FsTkFjLTItSk5KXFwpfEF8VHxDfEcpL2csIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIHJldHVybiAoY291bnQgPiA0ICYmIGNvdW50IDwgMTUpID8gb2JqRm9yQ2VudGVyW3hdIDogb2JqRm9yRWRnZXNbeF07XG4gICAgfSkuc2xpY2UoMCwgKG51Y2xlb3RpZGVzLmVuZHNXaXRoKCcoaW52YWJhc2ljKScpIHx8IG51Y2xlb3RpZGVzLmVuZHNXaXRoKCcoR2FsTkFjLTItSk5KKScpKSA/XG4gICAgICAgIG51Y2xlb3RpZGVzLmxlbmd0aCA6IDIgKiBjb3VudCArIDEpO1xufVxuLy9uYW1lOiBhc29HYXBtZXJzTnVjbGVvdGlkZXNUb0djcnNcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogRE5BIG51Y2xlb3RpZGVzfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IEdDUlMgLyBHYXBtZXJzfVxuZXhwb3J0IGZ1bmN0aW9uIGFzb0dhcG1lcnNOdWNsZW90aWRlc1RvR2NycyhudWNsZW90aWRlcykge1xuICAgIGxldCBjb3VudCA9IC0xO1xuICAgIGNvbnN0IG9iakZvckVkZ2VzID0ge1xuICAgICAgICAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLCAnVCc6ICdtb2VVbnBzJyxcbiAgICAgICAgJ0EnOiAnbW9lQW5wcycsICdDJzogJ21vZTVtQ25wcycsICdHJzogJ21vZUducHMnXG4gICAgfTtcbiAgICBjb25zdCBvYmpGb3JDZW50ZXIgPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICdDJzogJzVtQ3BzJywgJ0EnOiAnQXBzJywgJ1QnOiAnVHBzJywgJ0cnOiAnR3BzJyB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxBfFR8Q3xHKS9nLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgICBpZiAoY291bnQgPCA1KVxuICAgICAgICAgICAgcmV0dXJuIChjb3VudCA9PSA0KSA/IG9iakZvckVkZ2VzW3hdLnNsaWNlKDAsIC0zKSArICdwcycgOiBvYmpGb3JFZGdlc1t4XTtcbiAgICAgICAgaWYgKGNvdW50IDwgMTUpXG4gICAgICAgICAgICByZXR1cm4gKGNvdW50ID09IDE0KSA/IG9iakZvckNlbnRlclt4XS5zbGljZSgwLCAtMikgKyAnbnBzJyA6IG9iakZvckNlbnRlclt4XTtcbiAgICAgICAgcmV0dXJuIG9iakZvckVkZ2VzW3hdO1xuICAgIH0pLnNsaWNlKDAsIChudWNsZW90aWRlcy5lbmRzV2l0aCgnKGludmFiYXNpYyknKSB8fCBudWNsZW90aWRlcy5lbmRzV2l0aCgnKEdhbE5BYy0yLUpOSiknKSkgP1xuICAgICAgICBudWNsZW90aWRlcy5sZW5ndGggOiAtMyk7XG59XG4vL25hbWU6IGFzb0dhcG1lcnNCaW9TcHJpbmdUb051Y2xlb3RpZGVzXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IEJpb1NwcmluZyAvIEdhcG1lcnN9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogRE5BIG51Y2xlb3RpZGVzfVxuZXhwb3J0IGZ1bmN0aW9uIGFzb0dhcG1lcnNCaW9TcHJpbmdUb051Y2xlb3RpZGVzKG51Y2xlb3RpZGVzKSB7XG4gICAgY29uc3Qgb2JqID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnKic6ICcnLCAnNSc6ICdUJywgJzYnOiAnQScsICc3JzogJ0MnLCAnOCc6ICdHJywgJzknOiAnQycgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8XFwqfDV8Nnw3fDh8OSkvZywgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIG9ialt4XTsgfSk7XG59XG4vL25hbWU6IGFzb0dhcG1lcnNCaW9TcHJpbmdUb0djcnNcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogQmlvU3ByaW5nIC8gR2FwbWVyc31cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBHQ1JTIC8gR2FwbWVyc31cbmV4cG9ydCBmdW5jdGlvbiBhc29HYXBtZXJzQmlvU3ByaW5nVG9HY3JzKG51Y2xlb3RpZGVzKSB7XG4gICAgbGV0IGNvdW50ID0gLTE7XG4gICAgY29uc3Qgb2JqID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnNSonOiAnbW9lVW5wcycsICc2Kic6ICdtb2VBbnBzJywgJzcqJzogJ21vZTVtQ25wcycsICc4Kic6ICdtb2VHbnBzJywgJzkqJzogJzVtQ3BzJywgJ0EqJzogJ0FwcycsICdUKic6ICdUcHMnLFxuICAgICAgICAnRyonOiAnR3BzJywgJ0MqJzogJ0NwcycsICc1JzogJ21vZVUnLCAnNic6ICdtb2VBJywgJzcnOiAnbW9lNW1DJywgJzgnOiAnbW9lRycsXG4gICAgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8NVxcKnw2XFwqfDdcXCp8OFxcKnw5XFwqfEFcXCp8VFxcKnxHXFwqfENcXCp8NXw2fDd8OCkvZywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgcmV0dXJuIChjb3VudCA9PSA0KSA/IG9ialt4XS5zbGljZSgwLCAtMykgKyAncHMnIDogKGNvdW50ID09IDE0KSA/IG9ialt4XS5zbGljZSgwLCAtMikgKyAnbnBzJyA6IG9ialt4XTtcbiAgICB9KTtcbn1cbi8vbmFtZTogYXNvR2FwbWVyc0djcnNUb0Jpb1NwcmluZ1xuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBHQ1JTIC8gR2FwbWVyc31cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBCaW9TcHJpbmcgLyBHYXBtZXJzfVxuZXhwb3J0IGZ1bmN0aW9uIGFzb0dhcG1lcnNHY3JzVG9CaW9TcHJpbmcobnVjbGVvdGlkZXMpIHtcbiAgICBjb25zdCBvYmogPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICdtb2VUJzogJzUnLCAnbW9lQSc6ICc2JywgJ21vZTVtQyc6ICc3JywgJ21vZUcnOiAnOCcsICdtb2VVJzogJzUnLCAnNW1DJzogJzknLCAnbnBzJzogJyonLCAncHMnOiAnKicsICdVJzogJ1QnLFxuICAgIH07XG4gICAgcmV0dXJuIG51Y2xlb3RpZGVzLnJlcGxhY2UoLyhcXChpbnZhYmFzaWNcXCl8XFwoR2FsTkFjLTItSk5KXFwpfG1vZVR8bW9lQXxtb2U1bUN8bW9lR3xtb2VVfDVtQ3xucHN8cHN8VSkvZywgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIG9ialt4XTsgfSk7XG59XG4vL25hbWU6IGFzb0dhcG1lcnNHY3JzVG9OdWNsZW90aWRlc1xuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBHQ1JTIC8gR2FwbWVyc31cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBETkEgbnVjbGVvdGlkZXN9XG5leHBvcnQgZnVuY3Rpb24gYXNvR2FwbWVyc0djcnNUb051Y2xlb3RpZGVzKG51Y2xlb3RpZGVzKSB7XG4gICAgY29uc3Qgb2JqID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnbW9lJzogJycsICc1bSc6ICcnLCAnbic6ICcnLCAncHMnOiAnJywgJ1UnOiAnVCcgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8bW9lfDVtfG58cHN8VSkvZywgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIG9ialt4XTsgfSk7XG59XG4vL25hbWU6IHNpUm5hQmlvU3ByaW5nVG9OdWNsZW90aWRlc1xuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBCaW9TcHJpbmcgLyBzaVJOQX1cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBSTkEgbnVjbGVvdGlkZXN9XG5leHBvcnQgZnVuY3Rpb24gc2lSbmFCaW9TcHJpbmdUb051Y2xlb3RpZGVzKG51Y2xlb3RpZGVzKSB7XG4gICAgY29uc3Qgb2JqID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnMSc6ICdVJywgJzInOiAnQScsICczJzogJ0MnLCAnNCc6ICdHJywgJzUnOiAnVScsICc2JzogJ0EnLCAnNyc6ICdDJywgJzgnOiAnRycsICcqJzogJycgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8MXwyfDN8NHw1fDZ8N3w4fFxcKikvZywgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIG9ialt4XTsgfSk7XG59XG4vL25hbWU6IHNpUm5hQmlvU3ByaW5nVG9BeG9sYWJzXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IEJpb1NwcmluZyAvIHNpUk5BfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IEF4b2xhYnMgLyBzaVJOQX1cbmV4cG9ydCBmdW5jdGlvbiBzaVJuYUJpb1NwcmluZ1RvQXhvbGFicyhudWNsZW90aWRlcykge1xuICAgIGNvbnN0IG9iaiA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJzEnOiAnVWYnLCAnMic6ICdBZicsICczJzogJ0NmJywgJzQnOiAnR2YnLCAnNSc6ICd1JywgJzYnOiAnYScsICc3JzogJ2MnLCAnOCc6ICdnJywgJyonOiAncycgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8MXwyfDN8NHw1fDZ8N3w4fFxcKikvZywgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIG9ialt4XTsgfSk7XG59XG4vL25hbWU6IHNpUm5hQmlvU3ByaW5nVG9HY3JzXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IEJpb1NwcmluZyAvIHNpUk5BfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IEdDUlN9XG5leHBvcnQgZnVuY3Rpb24gc2lSbmFCaW9TcHJpbmdUb0djcnMobnVjbGVvdGlkZXMpIHtcbiAgICBjb25zdCBvYmogPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICcxJzogJ2ZVJywgJzInOiAnZkEnLCAnMyc6ICdmQycsICc0JzogJ2ZHJywgJzUnOiAnbVUnLCAnNic6ICdtQScsICc3JzogJ21DJywgJzgnOiAnbUcnLCAnKic6ICdwcycgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8MXwyfDN8NHw1fDZ8N3w4fFxcKikvZywgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIG9ialt4XTsgfSk7XG59XG4vL25hbWU6IHNpUm5hQXhvbGFic1RvR2Nyc1xuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBBeG9sYWJzIC8gc2lSTkF9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogR0NSU31cbmV4cG9ydCBmdW5jdGlvbiBzaVJuYUF4b2xhYnNUb0djcnMobnVjbGVvdGlkZXMpIHtcbiAgICBjb25zdCBvYmogPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICdVZic6ICdmVScsICdBZic6ICdmQScsICdDZic6ICdmQycsICdHZic6ICdmRycsICd1JzogJ21VJywgJ2EnOiAnbUEnLCAnYyc6ICdtQycsICdnJzogJ21HJywgJ3MnOiAncHMnLFxuICAgIH07XG4gICAgcmV0dXJuIG51Y2xlb3RpZGVzLnJlcGxhY2UoLyhcXChpbnZhYmFzaWNcXCl8XFwoR2FsTkFjLTItSk5KXFwpfFVmfEFmfENmfEdmfHV8YXxjfGd8cykvZywgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIG9ialt4XTsgfSk7XG59XG4vL25hbWU6IHNpUm5hQXhvbGFic1RvQmlvU3ByaW5nXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IEF4b2xhYnMgLyBzaVJOQX1cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBCaW9TcHJpbmcgLyBzaVJOQX1cbmV4cG9ydCBmdW5jdGlvbiBzaVJuYUF4b2xhYnNUb0Jpb1NwcmluZyhudWNsZW90aWRlcykge1xuICAgIGNvbnN0IG9iaiA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ1VmJzogJzEnLCAnQWYnOiAnMicsICdDZic6ICczJywgJ0dmJzogJzQnLCAndSc6ICc1JywgJ2EnOiAnNicsICdjJzogJzcnLCAnZyc6ICc4JywgJ3MnOiAnKicsXG4gICAgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8VWZ8QWZ8Q2Z8R2Z8dXxhfGN8Z3xzKS9nLCBmdW5jdGlvbiAoeCkgeyByZXR1cm4gb2JqW3hdOyB9KTtcbn1cbi8vbmFtZTogc2lSbmFBeG9sYWJzVG9OdWNsZW90aWRlc1xuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBBeG9sYWJzIC8gc2lSTkF9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogUk5BIG51Y2xlb3RpZGVzfVxuZXhwb3J0IGZ1bmN0aW9uIHNpUm5hQXhvbGFic1RvTnVjbGVvdGlkZXMobnVjbGVvdGlkZXMpIHtcbiAgICBjb25zdCBvYmogPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICdVZic6ICdVJywgJ0FmJzogJ0EnLCAnQ2YnOiAnQycsICdHZic6ICdHJywgJ3UnOiAnVScsICdhJzogJ0EnLCAnYyc6ICdDJywgJ2cnOiAnRycsICdzJzogJycsXG4gICAgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8VWZ8QWZ8Q2Z8R2Z8dXxhfGN8Z3xzKS9nLCBmdW5jdGlvbiAoeCkgeyByZXR1cm4gb2JqW3hdOyB9KTtcbn1cbi8vbmFtZTogc2lSbmFHY3JzVG9OdWNsZW90aWRlc1xuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBHQ1JTfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IFJOQSBudWNsZW90aWRlc31cbmV4cG9ydCBmdW5jdGlvbiBzaVJuYUdjcnNUb051Y2xlb3RpZGVzKG51Y2xlb3RpZGVzKSB7XG4gICAgY29uc3Qgb2JqID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnZlUnOiAnVScsICdmQSc6ICdBJywgJ2ZDJzogJ0MnLCAnZkcnOiAnRycsICdtVSc6ICdVJywgJ21BJzogJ0EnLCAnbUMnOiAnQycsICdtRyc6ICdHJywgJ3BzJzogJycsXG4gICAgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8ZlV8ZkF8ZkN8Zkd8bVV8bUF8bUN8bUd8cHMpL2csIGZ1bmN0aW9uICh4KSB7IHJldHVybiBvYmpbeF07IH0pO1xufVxuLy9uYW1lOiBzaVJuYUdjcnNUb0Jpb1NwcmluZ1xuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBHQ1JTfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IEJpb1NwcmluZyAvIHNpUk5BfVxuZXhwb3J0IGZ1bmN0aW9uIHNpUm5hR2Nyc1RvQmlvU3ByaW5nKG51Y2xlb3RpZGVzKSB7XG4gICAgY29uc3Qgb2JqID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnZlUnOiAnMScsICdmQSc6ICcyJywgJ2ZDJzogJzMnLCAnZkcnOiAnNCcsICdtVSc6ICc1JywgJ21BJzogJzYnLCAnbUMnOiAnNycsICdtRyc6ICc4JywgJ3BzJzogJyonLFxuICAgIH07XG4gICAgcmV0dXJuIG51Y2xlb3RpZGVzLnJlcGxhY2UoLyhcXChpbnZhYmFzaWNcXCl8XFwoR2FsTkFjLTItSk5KXFwpfGZVfGZBfGZDfGZHfG1VfG1BfG1DfG1HfHBzKS9nLCBmdW5jdGlvbiAoeCkgeyByZXR1cm4gb2JqW3hdOyB9KTtcbn1cbi8vbmFtZTogc2lSbmFHY3JzVG9BeG9sYWJzXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IEdDUlN9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogQXhvbGFicyAvIHNpUk5BfVxuZXhwb3J0IGZ1bmN0aW9uIHNpUm5hR2Nyc1RvQXhvbGFicyhudWNsZW90aWRlcykge1xuICAgIGNvbnN0IG9iaiA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ2ZVJzogJ1VmJywgJ2ZBJzogJ0FmJywgJ2ZDJzogJ0NmJywgJ2ZHJzogJ0dmJywgJ21VJzogJ3UnLCAnbUEnOiAnYScsICdtQyc6ICdjJywgJ21HJzogJ2cnLCAncHMnOiAncycsXG4gICAgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8ZlV8ZkF8ZkN8Zkd8bVV8bUF8bUN8bUd8cHMpL2csIGZ1bmN0aW9uICh4KSB7IHJldHVybiBvYmpbeF07IH0pO1xufVxuLy9uYW1lOiBzaVJuYU51Y2xlb3RpZGVUb0Jpb1NwcmluZ1NlbnNlU3RyYW5kXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IFJOQSBudWNsZW90aWRlc31cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBCaW9TcHJpbmcgLyBzaVJOQX1cbmV4cG9ydCBmdW5jdGlvbiBzaVJuYU51Y2xlb3RpZGVUb0Jpb1NwcmluZ1NlbnNlU3RyYW5kKG51Y2xlb3RpZGVzKSB7XG4gICAgbGV0IGNvdW50ID0gLTE7XG4gICAgY29uc3Qgb2JqRm9yTGVmdEVkZ2UgPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICdBJzogJzYqJywgJ1UnOiAnNSonLCAnRyc6ICc4KicsICdDJzogJzcqJyB9O1xuICAgIGNvbnN0IG9iakZvclJpZ2h0RWRnZSA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ0EnOiAnKjYnLCAnVSc6ICcqNScsICdHJzogJyo4JywgJ0MnOiAnKjcnIH07XG4gICAgY29uc3Qgb2JqRm9yT2RkSW5kaWNlcyA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ0EnOiAnNicsICdVJzogJzUnLCAnRyc6ICc4JywgJ0MnOiAnNycgfTtcbiAgICBjb25zdCBvYmpGb3JFdmVuSW5kaWNlcyA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJyxcbiAgICAgICAgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJywgJ0EnOiAnMicsICdVJzogJzEnLCAnRyc6ICc0JywgJ0MnOiAnMycgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8QXxVfEd8QykvZywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgaWYgKGNvdW50IDwgMilcbiAgICAgICAgICAgIHJldHVybiBvYmpGb3JMZWZ0RWRnZVt4XTtcbiAgICAgICAgaWYgKGNvdW50ID4gbnVjbGVvdGlkZXMubGVuZ3RoIC0gMylcbiAgICAgICAgICAgIHJldHVybiBvYmpGb3JSaWdodEVkZ2VbeF07XG4gICAgICAgIHJldHVybiAoY291bnQgJSAyID09IDApID8gb2JqRm9yRXZlbkluZGljZXNbeF0gOiBvYmpGb3JPZGRJbmRpY2VzW3hdO1xuICAgIH0pO1xufVxuLy9uYW1lOiBzaVJuYU51Y2xlb3RpZGVzVG9HY3JzXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IFJOQSBudWNsZW90aWRlc31cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBHQ1JTfVxuZXhwb3J0IGZ1bmN0aW9uIHNpUm5hTnVjbGVvdGlkZXNUb0djcnMobnVjbGVvdGlkZXMpIHtcbiAgICBsZXQgY291bnQgPSAtMTtcbiAgICBjb25zdCBvYmpGb3JMZWZ0RWRnZSA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ0EnOiAnbUFwcycsICdVJzogJ21VcHMnLCAnRyc6ICdtR3BzJywgJ0MnOiAnbUNwcycgfTtcbiAgICBjb25zdCBvYmpGb3JSaWdodEVkZ2UgPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICdBJzogJ3BzbUEnLCAnVSc6ICdwc21VJywgJ0cnOiAncHNtRycsICdDJzogJ3BzbUMnIH07XG4gICAgY29uc3Qgb2JqRm9yRXZlbkluZGljZXMgPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsXG4gICAgICAgICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsICdBJzogJ2ZBJywgJ1UnOiAnZlUnLCAnRyc6ICdmRycsICdDJzogJ2ZDJyB9O1xuICAgIGNvbnN0IG9iakZvck9kZEluZGljZXMgPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsXG4gICAgICAgICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsICdBJzogJ21BJywgJ1UnOiAnbVUnLCAnRyc6ICdtRycsICdDJzogJ21DJyB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxBfFV8R3xDKS9nLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgICBpZiAoY291bnQgPCAyKVxuICAgICAgICAgICAgcmV0dXJuIG9iakZvckxlZnRFZGdlW3hdO1xuICAgICAgICBpZiAoY291bnQgPiBudWNsZW90aWRlcy5sZW5ndGggLSAzKVxuICAgICAgICAgICAgcmV0dXJuIG9iakZvclJpZ2h0RWRnZVt4XTtcbiAgICAgICAgcmV0dXJuIChjb3VudCAlIDIgPT0gMCkgPyBvYmpGb3JFdmVuSW5kaWNlc1t4XSA6IG9iakZvck9kZEluZGljZXNbeF07XG4gICAgfSk7XG59XG4vL25hbWU6IHNpUm5hTnVjbGVvdGlkZVRvQXhvbGFic1NlbnNlU3RyYW5kXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IFJOQSBudWNsZW90aWRlc31cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBBeG9sYWJzfVxuZXhwb3J0IGZ1bmN0aW9uIHNpUm5hTnVjbGVvdGlkZVRvQXhvbGFic1NlbnNlU3RyYW5kKG51Y2xlb3RpZGVzKSB7XG4gICAgbGV0IGNvdW50ID0gLTE7XG4gICAgY29uc3Qgb2JqRm9yTGVmdEVkZ2UgPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICdBJzogJ2FzJywgJ1UnOiAndXMnLCAnRyc6ICdncycsICdDJzogJ2NzJyB9O1xuICAgIGNvbnN0IG9iakZvclNvbWVJbmRpY2VzID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLFxuICAgICAgICAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLCAnQSc6ICdBZicsICdVJzogJ1VmJywgJ0cnOiAnR2YnLCAnQyc6ICdDZicgfTtcbiAgICBjb25zdCBvYmogPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICdBJzogJ2EnLCAnVSc6ICd1JywgJ0cnOiAnZycsICdDJzogJ2MnIH07XG4gICAgcmV0dXJuIG51Y2xlb3RpZGVzLnJlcGxhY2UoLyhcXChpbnZhYmFzaWNcXCl8XFwoR2FsTkFjLTItSk5KXFwpfEF8VXxHfEMpL2csIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIGlmIChjb3VudCA8IDIpXG4gICAgICAgICAgICByZXR1cm4gb2JqRm9yTGVmdEVkZ2VbeF07XG4gICAgICAgIGlmIChjb3VudCA9PSA2IHx8IChjb3VudCA+IDcgJiYgY291bnQgPCAxMSkpXG4gICAgICAgICAgICByZXR1cm4gb2JqRm9yU29tZUluZGljZXNbeF07XG4gICAgICAgIGlmIChjb3VudCA9PSBudWNsZW90aWRlcy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgcmV0dXJuICdhJztcbiAgICAgICAgcmV0dXJuIG9ialt4XTtcbiAgICB9KTtcbn1cbi8vbmFtZTogc2lSbmFOdWNsZW90aWRlVG9BeG9sYWJzQW50aXNlbnNlU3RyYW5kXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IFJOQSBudWNsZW90aWRlc31cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBBeG9sYWJzfVxuZXhwb3J0IGZ1bmN0aW9uIHNpUm5hTnVjbGVvdGlkZVRvQXhvbGFic0FudGlzZW5zZVN0cmFuZChudWNsZW90aWRlcykge1xuICAgIGxldCBjb3VudCA9IC0xO1xuICAgIGNvbnN0IG9iakZvclNtYWxsTGlua2FnZXMgPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsXG4gICAgICAgICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsICdBJzogJ2FzJywgJ1UnOiAndXMnLCAnRyc6ICdncycsICdDJzogJ2NzJyB9O1xuICAgIGNvbnN0IG9iakZvckJpZ0xpbmthZ2VzID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLFxuICAgICAgICAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLCAnQSc6ICdBZnMnLCAnVSc6ICdVZnMnLCAnRyc6ICdHZnMnLCAnQyc6ICdDZnMnIH07XG4gICAgY29uc3Qgb2JqRm9yU29tZUluZGljZXMgPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsXG4gICAgICAgICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsICdBJzogJ0FmJywgJ1UnOiAnVWYnLCAnRyc6ICdHZicsICdDJzogJ0NmJyB9O1xuICAgIGNvbnN0IG9iaiA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJyxcbiAgICAgICAgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJywgJ0EnOiAnYScsICdVJzogJ3UnLCAnRyc6ICdnJywgJ0MnOiAnYycgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8QXxVfEd8QykvZywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgaWYgKGNvdW50ID4gMTkgJiYgY291bnQgPCAyMilcbiAgICAgICAgICAgIHJldHVybiBvYmpGb3JTbWFsbExpbmthZ2VzW3hdO1xuICAgICAgICBpZiAoY291bnQgPT0gMClcbiAgICAgICAgICAgIHJldHVybiAndXMnO1xuICAgICAgICBpZiAoY291bnQgPT0gMSlcbiAgICAgICAgICAgIHJldHVybiBvYmpGb3JCaWdMaW5rYWdlc1t4XTtcbiAgICAgICAgcmV0dXJuIChjb3VudCA9PSA1IHx8IGNvdW50ID09IDcgfHwgY291bnQgPT0gOCB8fCBjb3VudCA9PSAxMyB8fCBjb3VudCA9PSAxNSkgPyBvYmpGb3JTb21lSW5kaWNlc1t4XSA6IG9ialt4XTtcbiAgICB9KTtcbn1cbi8vbmFtZTogZ2Nyc1RvTnVjbGVvdGlkZXNcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogR0NSU31cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBSTkEgbnVjbGVvdGlkZXN9XG5leHBvcnQgZnVuY3Rpb24gZ2Nyc1RvTnVjbGVvdGlkZXMobnVjbGVvdGlkZXMpIHtcbiAgICBjb25zdCBvYmogPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICdtQXBzJzogJ0EnLCAnbVVwcyc6ICdVJywgJ21HcHMnOiAnRycsICdtQ3BzJzogJ0MnLCAnZkFwcyc6ICdBJywgJ2ZVcHMnOiAnVScsICdmR3BzJzogJ0cnLCAnZkNwcyc6ICdDJyxcbiAgICAgICAgJ2ZVJzogJ1UnLCAnZkEnOiAnQScsICdmQyc6ICdDJywgJ2ZHJzogJ0cnLCAnbVUnOiAnVScsICdtQSc6ICdBJywgJ21DJzogJ0MnLCAnbUcnOiAnRycsXG4gICAgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8bUFwc3xtVXBzfG1HcHN8bUNwc3xmQXBzfGZVcHN8Zkdwc3xmQ3BzfGZVfGZBfGZDfGZHfG1VfG1BfG1DfG1HKS9nLCBmdW5jdGlvbiAoeCkgeyByZXR1cm4gb2JqW3hdOyB9KTtcbn1cbi8vbmFtZTogZ2Nyc1RvTWVybWFkZTEyXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IEdDUlN9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogTWVybWFkZSAxMiAvIHNpUk5BfVxuZXhwb3J0IGZ1bmN0aW9uIGdjcnNUb01lcm1hZGUxMihudWNsZW90aWRlcykge1xuICAgIGNvbnN0IG9iaiA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ21BcHMnOiAnZScsICdtVXBzJzogJ2gnLCAnbUdwcyc6ICdnJywgJ21DcHMnOiAnZicsICdmQXBzJzogJ2knLCAnZlVwcyc6ICdsJywgJ2ZHcHMnOiAnaycsICdmQ3BzJzogJ2onLCAnZlUnOiAnTCcsXG4gICAgICAgICdmQSc6ICdJJywgJ2ZDJzogJ0onLCAnZkcnOiAnSycsICdtVSc6ICdIJywgJ21BJzogJ0UnLCAnbUMnOiAnRicsICdtRyc6ICdHJyxcbiAgICB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxtQXBzfG1VcHN8bUdwc3xtQ3BzfGZBcHN8ZlVwc3xmR3BzfGZDcHN8ZlV8ZkF8ZkN8Zkd8bVV8bUF8bUN8bUcpL2csIGZ1bmN0aW9uICh4KSB7IHJldHVybiBvYmpbeF07IH0pO1xufVxuIiwiaW1wb3J0IHsgbWFwLCBzdGFkYXJkUGhvc3BoYXRlTGlua1NtaWxlcywgU1lOVEhFU0laRVJTLCBURUNITk9MT0dJRVMsIE1PRElGSUNBVElPTlMsIGRlbGltaXRlciB9IGZyb20gJy4vbWFwJztcbmltcG9ydCB7IGlzVmFsaWRTZXF1ZW5jZSB9IGZyb20gJy4vc2VxdWVuY2UtY29kZXMtdG9vbHMnO1xuaW1wb3J0IHsgZ2V0TnVjbGVvdGlkZXNNb2wgfSBmcm9tICcuL21vbC10cmFuc2Zvcm1hdGlvbnMnO1xuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbmNlVG9Nb2xWMzAwMChzZXF1ZW5jZSwgaW52ZXJ0ZWQgPSBmYWxzZSwgb2NsUmVuZGVyID0gZmFsc2UsIGZvcm1hdCkge1xuICAgIGNvbnN0IG9iaiA9IGdldE9iamVjdFdpdGhDb2Rlc0FuZFNtaWxlcyhzZXF1ZW5jZSwgZm9ybWF0KTtcbiAgICBsZXQgY29kZXMgPSBzb3J0QnlTdHJpbmdMZW5ndGhJbkRlc2NlbmRpbmdPcmRlcihPYmplY3Qua2V5cyhvYmopKTtcbiAgICBsZXQgaSA9IDA7XG4gICAgY29uc3Qgc21pbGVzQ29kZXMgPSBbXTtcbiAgICBjb25zdCBjb2Rlc0xpc3QgPSBbXTtcbiAgICBjb25zdCBsaW5rcyA9IFsncycsICdwcycsICcqJ107XG4gICAgY29uc3QgaW5jbHVkZXNTdGFuZGFyZExpbmtBbHJlYWR5ID0gWydlJywgJ2gnLCAvKidnJywqLyAnZicsICdpJywgJ2wnLCAnaycsICdqJ107XG4gICAgY29uc3QgZHJvcGRvd25zID0gT2JqZWN0LmtleXMoTU9ESUZJQ0FUSU9OUyk7XG4gICAgY29kZXMgPSBjb2Rlcy5jb25jYXQoZHJvcGRvd25zKS5jb25jYXQoZGVsaW1pdGVyKTtcbiAgICB3aGlsZSAoaSA8IHNlcXVlbmNlLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjb2RlID0gY29kZXMuZmluZCgocykgPT4gcyA9PSBzZXF1ZW5jZS5zbGljZShpLCBpICsgcy5sZW5ndGgpKTtcbiAgICAgICAgaSArPSBjb2RlLmxlbmd0aDtcbiAgICAgICAgaW52ZXJ0ZWQgPyBjb2Rlc0xpc3QudW5zaGlmdChjb2RlKSA6IGNvZGVzTGlzdC5wdXNoKGNvZGUpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvZGVzTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZHJvcGRvd25zLmluY2x1ZGVzKGNvZGVzTGlzdFtpXSkpIHtcbiAgICAgICAgICAgIHNtaWxlc0NvZGVzLnB1c2goKGkgPj0gY29kZXNMaXN0Lmxlbmd0aCAvIDIpID9cbiAgICAgICAgICAgICAgICBNT0RJRklDQVRJT05TW2NvZGVzTGlzdFtpXV0ucmlnaHQgOiBNT0RJRklDQVRJT05TW2NvZGVzTGlzdFtpXV0ubGVmdCk7XG4gICAgICAgICAgICBzbWlsZXNDb2Rlcy5wdXNoKHN0YWRhcmRQaG9zcGhhdGVMaW5rU21pbGVzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChsaW5rcy5pbmNsdWRlcyhjb2Rlc0xpc3RbaV0pIHx8XG4gICAgICAgICAgICAgICAgaW5jbHVkZXNTdGFuZGFyZExpbmtBbHJlYWR5LmluY2x1ZGVzKGNvZGVzTGlzdFtpXSkgfHxcbiAgICAgICAgICAgICAgICAoaSA8IGNvZGVzTGlzdC5sZW5ndGggLSAxICYmIGxpbmtzLmluY2x1ZGVzKGNvZGVzTGlzdFtpICsgMV0pKSlcbiAgICAgICAgICAgICAgICBzbWlsZXNDb2Rlcy5wdXNoKG9ialtjb2Rlc0xpc3RbaV1dKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNtaWxlc0NvZGVzLnB1c2gob2JqW2NvZGVzTGlzdFtpXV0pO1xuICAgICAgICAgICAgICAgIHNtaWxlc0NvZGVzLnB1c2goc3RhZGFyZFBob3NwaGF0ZUxpbmtTbWlsZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBnZXROdWNsZW90aWRlc01vbChzbWlsZXNDb2Rlcywgb2NsUmVuZGVyKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW5jZVRvU21pbGVzKHNlcXVlbmNlLCBpbnZlcnRlZCA9IGZhbHNlLCBmb3JtYXQpIHtcbiAgICBjb25zdCBvYmogPSBnZXRPYmplY3RXaXRoQ29kZXNBbmRTbWlsZXMoc2VxdWVuY2UsIGZvcm1hdCk7XG4gICAgbGV0IGNvZGVzID0gc29ydEJ5U3RyaW5nTGVuZ3RoSW5EZXNjZW5kaW5nT3JkZXIoT2JqZWN0LmtleXMob2JqKSk7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBzbWlsZXMgPSAnJztcbiAgICBjb25zdCBjb2Rlc0xpc3QgPSBbXTtcbiAgICBjb25zdCBsaW5rcyA9IFsncycsICdwcycsICcqJ107XG4gICAgY29uc3QgaW5jbHVkZXNTdGFuZGFyZExpbmtBbHJlYWR5ID0gWydlJywgJ2gnLCAvKidnJywqLyAnZicsICdpJywgJ2wnLCAnaycsICdqJ107XG4gICAgY29uc3QgZHJvcGRvd25zID0gT2JqZWN0LmtleXMoTU9ESUZJQ0FUSU9OUyk7XG4gICAgY29kZXMgPSBjb2Rlcy5jb25jYXQoZHJvcGRvd25zKS5jb25jYXQoZGVsaW1pdGVyKTtcbiAgICB3aGlsZSAoaSA8IHNlcXVlbmNlLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjb2RlID0gY29kZXMuZmluZCgocykgPT4gcyA9PSBzZXF1ZW5jZS5zbGljZShpLCBpICsgcy5sZW5ndGgpKTtcbiAgICAgICAgaSArPSBjb2RlLmxlbmd0aDtcbiAgICAgICAgaW52ZXJ0ZWQgPyBjb2Rlc0xpc3QudW5zaGlmdChjb2RlKSA6IGNvZGVzTGlzdC5wdXNoKGNvZGUpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvZGVzTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZHJvcGRvd25zLmluY2x1ZGVzKGNvZGVzTGlzdFtpXSkpIHtcbiAgICAgICAgICAgIHNtaWxlcyArPSAoaSA+PSBjb2Rlc0xpc3QubGVuZ3RoIC8gMikgP1xuICAgICAgICAgICAgICAgIE1PRElGSUNBVElPTlNbY29kZXNMaXN0W2ldXS5yaWdodCArIHN0YWRhcmRQaG9zcGhhdGVMaW5rU21pbGVzIDpcbiAgICAgICAgICAgICAgICBNT0RJRklDQVRJT05TW2NvZGVzTGlzdFtpXV0ubGVmdCArIHN0YWRhcmRQaG9zcGhhdGVMaW5rU21pbGVzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGxpbmtzLmluY2x1ZGVzKGNvZGVzTGlzdFtpXSkgfHxcbiAgICAgICAgICAgICAgICBpbmNsdWRlc1N0YW5kYXJkTGlua0FscmVhZHkuaW5jbHVkZXMoY29kZXNMaXN0W2ldKSB8fFxuICAgICAgICAgICAgICAgIChpIDwgY29kZXNMaXN0Lmxlbmd0aCAtIDEgJiYgbGlua3MuaW5jbHVkZXMoY29kZXNMaXN0W2kgKyAxXSkpKVxuICAgICAgICAgICAgICAgIHNtaWxlcyArPSBvYmpbY29kZXNMaXN0W2ldXTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBzbWlsZXMgKz0gb2JqW2NvZGVzTGlzdFtpXV0gKyBzdGFkYXJkUGhvc3BoYXRlTGlua1NtaWxlcztcbiAgICAgICAgfVxuICAgIH1cbiAgICBzbWlsZXMgPSBzbWlsZXMucmVwbGFjZSgvT08vZywgJ08nKTtcbiAgICByZXR1cm4gKChsaW5rcy5pbmNsdWRlcyhjb2Rlc0xpc3RbY29kZXNMaXN0Lmxlbmd0aCAtIDFdKSAmJlxuICAgICAgICBjb2Rlc0xpc3QubGVuZ3RoID4gMSAmJlxuICAgICAgICAhaW5jbHVkZXNTdGFuZGFyZExpbmtBbHJlYWR5LmluY2x1ZGVzKGNvZGVzTGlzdFtjb2Rlc0xpc3QubGVuZ3RoIC0gMl0pKSB8fFxuICAgICAgICBkcm9wZG93bnMuaW5jbHVkZXMoY29kZXNMaXN0W2NvZGVzTGlzdC5sZW5ndGggLSAxXSkgfHxcbiAgICAgICAgaW5jbHVkZXNTdGFuZGFyZExpbmtBbHJlYWR5LmluY2x1ZGVzKGNvZGVzTGlzdFtjb2Rlc0xpc3QubGVuZ3RoIC0gMV0pKSA/XG4gICAgICAgIHNtaWxlcyA6XG4gICAgICAgIHNtaWxlcy5zbGljZSgwLCBzbWlsZXMubGVuZ3RoIC0gc3RhZGFyZFBob3NwaGF0ZUxpbmtTbWlsZXMubGVuZ3RoICsgMSk7XG59XG5mdW5jdGlvbiBnZXRPYmplY3RXaXRoQ29kZXNBbmRTbWlsZXMoc2VxdWVuY2UsIGZvcm1hdCkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgIGlmIChmb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICBmb3IgKGNvbnN0IHN5bnRoZXNpemVyIG9mIE9iamVjdC5rZXlzKG1hcCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGVjaG5vbG9neSBvZiBPYmplY3Qua2V5cyhtYXBbc3ludGhlc2l6ZXJdKSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29kZSBvZiBPYmplY3Qua2V5cyhtYXBbc3ludGhlc2l6ZXJdW3RlY2hub2xvZ3ldKSlcbiAgICAgICAgICAgICAgICAgICAgb2JqW2NvZGVdID0gbWFwW3N5bnRoZXNpemVyXVt0ZWNobm9sb2d5XVtjb2RlXS5TTUlMRVM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgdGVjaG5vbG9neSBvZiBPYmplY3Qua2V5cyhtYXBbZm9ybWF0XSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29kZSBvZiBPYmplY3Qua2V5cyhtYXBbZm9ybWF0XVt0ZWNobm9sb2d5XSkpXG4gICAgICAgICAgICAgICAgb2JqW2NvZGVdID0gbWFwW2Zvcm1hdF1bdGVjaG5vbG9neV1bY29kZV0uU01JTEVTO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9ialtkZWxpbWl0ZXJdID0gJyc7XG4gICAgLy8gVE9ETzogY3JlYXRlIG9iamVjdCBiYXNlZCBmcm9tIHN5bnRoZXNpemVyIHR5cGUgdG8gYXZvaWQga2V5KGNvZGVzKSBkdXBsaWNhdGVzXG4gICAgY29uc3Qgb3V0cHV0ID0gaXNWYWxpZFNlcXVlbmNlKHNlcXVlbmNlLCBmb3JtYXQpO1xuICAgIGlmIChvdXRwdXQuc3ludGhlc2l6ZXIuaW5jbHVkZXMoU1lOVEhFU0laRVJTLk1FUk1BREVfMTIpKVxuICAgICAgICBvYmpbJ2cnXSA9IG1hcFtTWU5USEVTSVpFUlMuTUVSTUFERV8xMl1bVEVDSE5PTE9HSUVTLlNJX1JOQV1bJ2cnXS5TTUlMRVM7XG4gICAgZWxzZSBpZiAob3V0cHV0LnN5bnRoZXNpemVyLmluY2x1ZGVzKFNZTlRIRVNJWkVSUy5BWE9MQUJTKSlcbiAgICAgICAgb2JqWydnJ10gPSBtYXBbU1lOVEhFU0laRVJTLkFYT0xBQlNdW1RFQ0hOT0xPR0lFUy5TSV9STkFdWydnJ10uU01JTEVTO1xuICAgIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBzb3J0QnlTdHJpbmdMZW5ndGhJbkRlc2NlbmRpbmdPcmRlcihhcnJheSkge1xuICAgIHJldHVybiBhcnJheS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoOyB9KTtcbn1cbiIsImltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBnZXRBbGxDb2Rlc09mU3ludGhlc2l6ZXIgfSBmcm9tICcuL3NlcXVlbmNlLWNvZGVzLXRvb2xzJztcbmV4cG9ydCBjb25zdCBkZWxpbWl0ZXIgPSAnOyc7XG5leHBvcnQgY29uc3QgU1lOVEhFU0laRVJTID0ge1xuICAgIFJBV19OVUNMRU9USURFUzogJ1JhdyBOdWNsZW90aWRlcycsXG4gICAgQklPU1BSSU5HOiAnQmlvU3ByaW5nIENvZGVzJyxcbiAgICBHQ1JTOiAnSmFuc3NlbiBHQ1JTIENvZGVzJyxcbiAgICBBWE9MQUJTOiAnQXhvbGFicyBDb2RlcycsXG4gICAgTUVSTUFERV8xMjogJ01lcm1hZGUgMTInLFxuICAgIExDTVM6ICdMQ01TJyxcbn07XG5leHBvcnQgY29uc3QgVEVDSE5PTE9HSUVTID0ge1xuICAgIEROQTogJ0ROQScsXG4gICAgUk5BOiAnUk5BJyxcbiAgICBBU09fR0FQTUVSUzogJ0ZvciBBU08gR2FwbWVycycsXG4gICAgU0lfUk5BOiAnRm9yIDJcXCctT01lIGFuZCAyXFwnLUYgbW9kaWZpZWQgc2lSTkEnLFxufTtcbmV4cG9ydCBjb25zdCBDT0xfTkFNRVMgPSB7XG4gICAgQ0hFTUlTVFJZOiAnQ2hlbWlzdHJ5JyxcbiAgICBOVU1CRVI6ICdOdW1iZXInLFxuICAgIFRZUEU6ICdUeXBlJyxcbiAgICBDSEVNSVNUUllfTkFNRTogJ0NoZW1pc3RyeSBOYW1lJyxcbiAgICBJTlRFUk5BTF9DT01QT1VORF9JRDogJ0ludGVybmFsIGNvbXBvdW5kIElEJyxcbiAgICBJRFA6ICdJRFAnLFxuICAgIFNFUVVFTkNFOiAnU2VxdWVuY2UnLFxuICAgIENPTVBPVU5EX05BTUU6ICdDb21wb3VuZCBOYW1lJyxcbiAgICBDT01QT1VORF9DT01NRU5UUzogJ0NvbXBvdW5kIENvbW1lbnRzJyxcbiAgICBTQUxUOiAnU2FsdCcsXG4gICAgRVFVSVZBTEVOVFM6ICdFcXVpdmFsZW50cycsXG4gICAgUFVSSVRZOiAnUHVyaXR5JyxcbiAgICBDUERfTVc6ICdDcGQgTVcnLFxuICAgIFNBTFRfTUFTUzogJ1NhbHQgbWFzcycsXG4gICAgQkFUQ0hfTVc6ICdCYXRjaCBNVycsXG4gICAgU09VUkNFOiAnU291cmNlJyxcbiAgICBJQ0Q6ICdJQ0QnLFxuICAgIE9XTkVSOiAnT3duZXInLFxufTtcbi8vIGludGVyZmFjZSBDT0RFUyB7XG4vLyB9XG5leHBvcnQgY29uc3QgTU9ESUZJQ0FUSU9OUyA9IHtcbiAgICAnKGludmFiYXNpYyknOiB7XG4gICAgICAgIG1vbGVjdWxhcldlaWdodDogMTE4LjEzLFxuICAgICAgICBsZWZ0OiAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPJyxcbiAgICAgICAgcmlnaHQ6ICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ08nLFxuICAgIH0sXG4gICAgJyhHYWxOQWMtMi1KTkopJzoge1xuICAgICAgICBtb2xlY3VsYXJXZWlnaHQ6IDEyNzMuMyxcbiAgICAgICAgbGVmdDogJ0MoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAgICAgICAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAgICAgICAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQylOQyg9TylDQ0NDKD1PKU5DQyhPKUNPJyxcbiAgICAgICAgcmlnaHQ6ICdPQ0MoTylDTkMoPU8pQ0NDQyg9TylOQyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScsXG4gICAgfSxcbn07XG5leHBvcnQgY29uc3Qgc3RhZGFyZFBob3NwaGF0ZUxpbmtTbWlsZXMgPSAnT1AoPU8pKE8pTyc7XG5leHBvcnQgY29uc3QgbWFwID0ge1xuICAgICdSYXcgTnVjbGVvdGlkZXMnOiB7XG4gICAgICAgICdETkEnOiB7XG4gICAgICAgICAgICAnQSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdBZGVuaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzEzLjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdUJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ1R5cm9zaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzA0LjIsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnZFQnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyg9TylOQzIoPU8pKUNbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ0cnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnR3VhbmluZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMyOS4yMSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnQyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdDeXRvc2luZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDI4OS4xOCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgICdSTkEnOiB7XG4gICAgICAgICAgICAnQSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdBZGVuaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzEzLjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdVJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ1VyYWNpbCcsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMwNi4xNyxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyVScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oTylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ0cnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnR3VhbmluZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMyOS4yMSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnQyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdDeXRvc2luZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDI4OS4xOCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnQmlvU3ByaW5nIENvZGVzJzoge1xuICAgICAgICAnRm9yIEFTTyBHYXBtZXJzJzoge1xuICAgICAgICAgICAgJzUnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ01PRS01TWUtclUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNzguMjcsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnclUnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyg9TylOQzIoPU8pKVtDQEhdKE9DQ09DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnNic6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnTU9FLXJBJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzg3LjI5LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQ0NPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzcnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ01PRS01TWUtckMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNzcuMjksXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyhOKT1OQzIoPU8pKVtDQEhdKE9DQ09DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnOCc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnTU9FLXJHJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogNDAzLjI4LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JHJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQ0NPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzknOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnNS1NZXRoeWwtZEMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDMuMjEsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnZEMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyhOKT1OQzIoPU8pKUNbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJyonOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAncHMgbGlua2FnZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDE2LjA3LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPUCg9TykoUylPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnQSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdBZGVuaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzEzLjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdDJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ0N5dG9zaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMjg5LjE4LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdHJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ0d1YW5pbmUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMjkuMjEsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnZEcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKUNbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1QnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnVHlyb3NpbmUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDQuMixcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkVCcsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUMoQylDKD1PKU5DMig9TykpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgICdGb3IgMlxcJy1PTWUgYW5kIDJcXCctRiBtb2RpZmllZCBzaVJOQSc6IHtcbiAgICAgICAgICAgICcxJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCctZmx1b3JvLVUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDguMTYsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnclUnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcyJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCctZmx1b3JvLUEnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMzEuMixcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oRilbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzMnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tQycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMwNy4xOCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzQnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tRycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM0Ny4xOSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oRilbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzUnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yVScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMyMC4yLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JVJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzYnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yQScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM0My4yNCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICc3Jzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtckMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMTkuMjEsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnOCc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJHJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzU5LjI0LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JHJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJyonOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAncHMgbGlua2FnZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDE2LjA3LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPUCg9TykoUylPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnQXhvbGFicyBDb2Rlcyc6IHtcbiAgICAgICAgJ0ZvciAyXFwnLU9NZSBhbmQgMlxcJy1GIG1vZGlmaWVkIHNpUk5BJzoge1xuICAgICAgICAgICAgJ1VmJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCctZmx1b3JvLVUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDguMTYsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnclUnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdBZic6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1BJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzMxLjIsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckEnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdDZic6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1DJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzA3LjE4LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnR2YnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tRycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM0Ny4xOSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oRilbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ3UnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yVScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMyMC4yLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JVJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2EnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yQScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM0My4yNCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdjJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtckMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMTkuMjEsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJHJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzU5LixcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdzJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ3BzIGxpbmthZ2UnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAxNi4wNyxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT1AoPU8pKFMpTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ0phbnNzZW4gR0NSUyBDb2Rlcyc6IHtcbiAgICAgICAgJ0ZvciBBU08gR2FwbWVycyc6IHtcbiAgICAgICAgICAgICdtb2VUJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdNT0UtNU1lLXJVJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzc4LjI3LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JVJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9QyhDKUMoPU8pTkMyKD1PKSlbQ0BIXShPQ0NPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ21vZUEnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ01PRS1yQScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM4Ny4yOSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0NDT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdtb2U1bUMnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ01PRS01TWUtckMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNzcuMjksXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyhOKT1OQzIoPU8pKVtDQEhdKE9DQ09DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnKDVtKW1vZUMnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ01PRS01TWUtckMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNzcuMjksXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyhOKT1OQzIoPU8pKVtDQEhdKE9DQ09DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnbW9lRyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnTU9FLXJHJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogNDAzLjI4LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JHJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQ0NPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzVtQyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICc1LU1ldGh5bC1kQycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMwMy4yOCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUMoQylDKE4pPU5DMig9TykpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnKDVtKUMnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnNS1NZXRoeWwtZEMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDMuMjgsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnZEMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyhOKT1OQzIoPU8pKUNbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ3BzJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ3BzIGxpbmthZ2UnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAxNi4wNyxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT1AoPU8pKFMpTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ0EnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnQWRlbmluZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMxMy4yMSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkQScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZEEnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnQWRlbmluZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMxMy4yMSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkQScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnQyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdDeXRvc2luZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDI4OS4xOCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZEMnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnQ3l0b3NpbmUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAyODkuMTgsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnZEMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKUNbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ0cnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnR3VhbmluZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMyOS4yMSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZEcnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnR3VhbmluZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMyOS4yMSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnVCc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdUeXJvc2luZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMwNC4yLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RUJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9QyhDKUMoPU8pTkMyKD1PKSlDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdkVCc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdUeXJvc2luZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMwNC4yLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RUJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9QyhDKUMoPU8pTkMyKD1PKSlDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdyQSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdBZGVuaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzI5LjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnckMnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnQ3l0b3NpbmUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDUuMTgsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE8pW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdyRyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdHdWFuaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzQ1LjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JHJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnclUnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnVXJhY2lsJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzA2LjE3LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JVJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgICdGb3IgMlxcJy1PTWUgYW5kIDJcXCctRiBtb2RpZmllZCBzaVJOQSc6IHtcbiAgICAgICAgICAgICdmVSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1VJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzA4LjE2LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JVJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZkEnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tQScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMzMS4yLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZkMnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tQycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMwNy4xOCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2ZHJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCctZmx1b3JvLUcnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNDcuMTksXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdtVSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJVJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzIwLjIsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnclUnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnbUEnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yQScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM0My4yNCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdtQyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJDJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzE5LjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ21HJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtckcnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNTkuMjQsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgICdPdGhlcnMnOiB7fSxcbiAgICB9LFxuICAgICdNZXJtYWRlIDEyJzoge1xuICAgICAgICAnRm9yIDJcXCctT01lIGFuZCAyXFwnLUYgbW9kaWZpZWQgc2lSTkEnOiB7XG4gICAgICAgICAgICAnZSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJBLXBzJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzU5LjMxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2gnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yVS1wcycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMzNi4yNyxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyVScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdnJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtckctcHMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNzUuMzEsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUylPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZic6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJDLXBzJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzM1LjI4LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2knOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tQS1wcycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM0Ny4yNyxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKFMpTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2wnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tVS1wcycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMyNC4yMyxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyVScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKFMpTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2snOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tRy1wcycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM2My4yNixcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKFMpTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2onOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tQy1wcycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMyMy4yNSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKFMpTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ0wnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tVScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMwOC4xNixcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyVScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ0knOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tQScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMzMS4yLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnSic6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1DJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzA3LjE4LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnSyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1HJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzQ3LjE5LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JHJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnSCc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJVJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzIwLjIsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnclUnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnRSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJBJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzQzLjI0LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ0YnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yQycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMxOS4yMSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdHJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtckcnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNTkuMjQsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAvLyAnTENNUyc6IHtcbiAgICAvLyAgICdGb3IgMlxcJy1PTWUgYW5kIDJcXCctRiBtb2RpZmllZCBzaVJOQSc6IHtcbn07XG5leHBvcnQgY29uc3QgbGNtc1RvR2NycyA9IGBMQ01TLCBHQ1JTXG5BLCBBXG5DLCBDXG4vNW1DLywgKDVtKUNcbkcsIEdcblQsIFRcbnJBLCByQVxuckMsIHJDXG5yRywgckdcbnJVLCByVVxubUEsIG1BXG5tQywgbUNcbi81bW1DLywgKDVtKW1DXG5tRywgbUdcbm1VLCBtVVxuZkEsIGZBXG5mQywgZkNcbi81bWZDLywgKDVtKWZDXG5mRywgZkdcbmZVLCBmVVxuL2FmQS8sIGFmQVxuL2FmQy8sIGFmQ1xuL2FmRy8sIGFmR1xuL2FmVS8sIGFmVVxuK0EsIGxuYSBBXG4rQywgbG5hIENcbitHLCBsbmEgR1xuK1QsIGxuYSBUXG4vbW9lQS8sIG1vZUFcbi9tb2VDLywgbW9lQ1xuLzVtbW9lQy8sICg1bSltb2VDXG4vbW9lRy8sIG1vZUdcbi9tb2VULywgbW9lVFxuL21vZVUvLCBtb2VVXG4veEEvLCBBbnBcbi94Qy8sIENucFxuL3g1bUMvLCAoNW0pQ25wXG4veEcvLCBHbnBcbi94VC8sIFRucFxuL3hyQS8sIHJBbnBcbi94ckMvLCByQ25wXG4veHJHLywgckducFxuL3hyVS8sIHJVbnBcbi94bUEvLCBtQW5wXG4veG1DLywgbUNucFxuL3g1bW1DLywgKDVtKW1DbnBcbi94bUcvLCBtR25wXG4veG1VLywgbVVucFxuL3hmQS8sIGZBbnBcbi94ZkMvLCBmQ25wXG4veGZHLywgZkducFxuL3hmVC8sIGZUbnBcbi94ZlUvLCBmVW5wXG4veGFmQS8sIGFmQW5wXG4veGFmQy8sIGFmQ25wXG4veGFmRy8sIGFmR25wXG4veGFmVS8sIGFmVW5wXG4veGVBLywgZUFucFxuL3hlQy8sIGVDbnBcbi94ZUcvLCBlR25wXG4veGVVLywgZVVucFxuL3htb2VBLywgbW9lQW5wXG4veG1vZUMvLCBtb2VDbnBcbi94NW1tb2VDLywgKDVtKW1vZUNucFxuL3htb2VHLywgbW9lR25wXG4veG1vZVUvLCBtb2VVbnBcbi9VTkEtQS8sIChVTkEtQSlcbi9VTkEtQy8sIChVTkEtQylcbi9VTkEtRy8sIChVTkEtRylcbi9VTkEtVC8sIChVTkEtVClcbi9VTkEtVS8sIChVTkEtVSlcbi9HTkEtQS8sIChHTkEtQSlcbi9HTkEtQy8sIChHTkEtQylcbi9HTkEtRy8sIChHTkEtRylcbi9HTkEtVC8sIChHTkEtVClcbi9HTkEtVS8sIChHTkEtVSlcbi81Q2hvbFRFRy8sICg1LUNob2xURUcpXG4vM0Nob2xURUcvLCAoVEVHQ2hvbC0zKVxuL1RvY28vLCBUb2NvXG4vUGFsbS8sIFBhbG1cbi9HYWxOQWMvLCBHYWxOQWNcbi9HYWxOQWMyLywgR2FsTkFjMlxuL0dhbE5BYzMvLCBHYWxOQWMzXG4vR2FsTkFjNi8sIEdhbE5BYzZcbi9HYWxOQWM3LywgR2FsTkFjN1xuL0dhbE5BYzkvLCBHYWxOQWM5XG4vR2FsTkFjMTQvLCBHYWxOQWMxNFxuL05BRzM3LywgTkFHMzdcbi9IRUcvLCAoSEVHKVxuL1RFRy8sIChURUcpXG4vQW1tQzYvLCAoTkhDNilcbi9BbW1DNy8sIChOSEM3KVxuL0FtbUMxMi8sIChOSEMxMilcbi9pbnZBYi8sIChpbnZhYmFzaWMpXG4vaW52ZFQvLCAoaW52ZFQpXG4vVlBtVS8sICh2aW51KVxuKiwgcHNcbi8yLUMxNlUvLCAyLUMxNlUgXG4vMi1DMTh3OVUvLCAyLUMxOHc5VVxuL0pEaS1QYWxtLywgSkRpLVBhbG1cbi9KMi1DT05DMTZVLywgSjItQ09OQzE2VVxuL0oyLUMzTkMxNlUvLCBKMi1DM05DMTZVXG4vSi1DMTVBZGEvLCBKLUMxNUFkYVxuL0otMkMxNUFkYVUvLCBKLTJDMTVBZGFVXG4vSi1DMTZOQzYvLCBKLUMxNk5DNlxuL1IyLUM2TkgtVS8sIFIyLUM2TkgtVVxuL0otTTEvLCBKLU0xXG4vSi1CMS8sIEotQjFcbi9KLUIyLywgSi1CMlxuL0otTTIvLCBKLU0yXG4vMi1DMTZDLywgMi1DMTZDXG4vMi1DMTZBLywgMi1DMTZBXG4vMi1DMTZHLywgMi1DMTZHXG4vUjItQzZOSC1HLywgUjItQzZOSC1HXG4vUjItQzZOSC1DLywgUjItQzZOSC1DXG4vSjItQ09OQzE2QS8sIEoyLUNPTkMxNkFcbi9KMi1DT05DMTZDLywgSjItQ09OQzE2Q1xuL0oyLUNPTkMxNkcvLCBKMi1DT05DMTZHXG4vSjItQzE1QWRhQy8sIEoyLUMxNUFkYUNcbi9KMi1NMlUvLCBKMi1NMlVcbi9KMi1CMlUvLCBKMi1CMlVcbi9KMi1DM05DMTZDLywgSjItQzNOQzE2Q1xuL0oyLUMzTkMxNkcvLCBKMi1DM05DMTZHXG4vUjItQzZOSC1BLywgUjItQzZOSC1BXG4vSjItQzE1QWRhQS8sIEoyLUMxNUFkYUFcbi9KMi1DM05DMTZBLywgSjItQzNOQzE2QVxuL0otQzUtU0VSLTEvLCBKLUM1LVNFUi0xXG4vSi1DMTYtU0VSLTEvLCBKLUMxNi1TRVItMVxuL0otQTIvLCBKLUEyXG4vSi1BMS8sIEotQTFcbi9KMi1DMTVBZGFHLywgSjItQzE1QWRhR1xuL0otQzE2TkFzcC8sIEotQzE2TkFzcFxuL0oyLUMxNk5DNlUvLCBKMi1DMTZOQzZVXG4vSi1DNS1SRUJPLTEvLCBKLUM1LVJFQk8tMVxuL0otQzE2LVJFQk8tMS8sIEotQzE2LVJFQk8tMVxuL0otQzE2LUlORC0xLywgSi1DMTYtSU5ELTFcbi9KLUM1LUlORC0xLywgSi1DNS1JTkQtMVxuL0otMUMxNUFkYS0yTWFuLywgSi0xQzE1QWRhLTJNYW5cbi9KRy0xQzE1QWRhLTIzRGlNYW4vLCBKRy0xQzE1QWRhLTIsM0RpTWFuXG4vSi1UcmlNYW5QQy8sIEotVHJpTWFuUENcbi9KLXRyaU1hblBPLywgSi10cmlNYW5QT1xuL0otQTQvLCBKLUE0XG4vSi1BcmEtMS8sIEotQXJhLTFcbi9KLUFyYS0yLywgSi1BcmEtMlxuL0otQWNDUy8sIEotQWNDU1xuL0otQ2JDUy8sIEotQ2JDU1xuL0otTXRDRC8sIEotTXRDRGA7XG5mdW5jdGlvbiBkaWZmZXJlbmNlT2ZUd29BcnJheXMoYSwgYikge1xuICAgIHJldHVybiBhLmZpbHRlcigoeCkgPT4gIWIuaW5jbHVkZXMoeCkpO1xufVxuY29uc3QgY29kZXNXaXRoU21pbGVzID0gZ2V0QWxsQ29kZXNPZlN5bnRoZXNpemVyKFNZTlRIRVNJWkVSUy5HQ1JTKTtcbmNvbnN0IGFsbEdjcnNDb2RlcyA9IERHLkRhdGFGcmFtZS5mcm9tQ3N2KGxjbXNUb0djcnMpLmdldENvbCgnR0NSUycpLnRvTGlzdCgpO1xuZXhwb3J0IGNvbnN0IGdjcnNDb2Rlc1dpdGhvdXRTbWlsZXMgPSBkaWZmZXJlbmNlT2ZUd29BcnJheXMoYWxsR2Nyc0NvZGVzLCBjb2Rlc1dpdGhTbWlsZXMpO1xuZm9yIChjb25zdCBlIG9mIGdjcnNDb2Rlc1dpdGhvdXRTbWlsZXMpXG4gICAgbWFwW1NZTlRIRVNJWkVSUy5HQ1JTXVsnT3RoZXJzJ11bZV0gPSB7ICdTTUlMRVMnOiAnJyB9O1xuIiwiY29uc3QgUEhPU0hBVEUgPSBgXG5EYXRhZ3JvayBtb25vbWVyIGxpYnJhcnkgTnVjbGVvdGlkZXNcblxuICAwICAwICAwICAwICAwICAwICAgICAgICAgICAgICAwIFYzMDAwXG5NICBWMzAgQkVHSU4gQ1RBQlxuTSAgVjMwIENPVU5UUyA1IDQgMCAwIDBcbk0gIFYzMCBCRUdJTiBBVE9NXG5NICBWMzAgMSBPIC0xLjUgMCAwIDBcbk0gIFYzMCAyIFAgMCAwIDAgMFxuTSAgVjMwIDMgTyAwIDEgMCAwXG5NICBWMzAgNCBPIDAgLTEgMCAwXG5NICBWMzAgNSBPIDEuNSAwIDAgMFxuTSAgVjMwIEVORCBBVE9NXG5NICBWMzAgQkVHSU4gQk9ORFxuTSAgVjMwIDEgMSAxIDJcbk0gIFYzMCAyIDIgMiAzXG5NICBWMzAgMyAxIDIgNFxuTSAgVjMwIDQgMSAyIDVcbk0gIFYzMCBFTkQgQk9ORFxuTSAgVjMwIEVORCBDVEFCXG5NICBWMzAgQkVHSU4gQ09MTEVDVElPTlxuTSAgVjMwIEVORCBDT0xMRUNUSU9OXG5NICBFTkRgO1xuY29uc3QgVEhJT1BIT1NIQVRFID0gYFxuRGF0YWdyb2sgbW9ub21lciBsaWJyYXJ5IE51Y2xlb3RpZGVzXG5cbiAgMCAgMCAgMCAgMCAgMCAgMCAgICAgICAgICAgICAgMCBWMzAwMFxuTSAgVjMwIEJFR0lOIENUQUJcbk0gIFYzMCBDT1VOVFMgNSA0IDAgMCAwXG5NICBWMzAgQkVHSU4gQVRPTVxuTSAgVjMwIDEgTyAtMS41IDAgMCAwXG5NICBWMzAgMiBQIDAgMCAwIDBcbk0gIFYzMCAzIE8gMCAxIDAgMFxuTSAgVjMwIDQgUyAwIC0xIDAgMFxuTSAgVjMwIDUgTyAxLjUgMCAwIDBcbk0gIFYzMCBFTkQgQVRPTVxuTSAgVjMwIEJFR0lOIEJPTkRcbk0gIFYzMCAxIDEgMSAyXG5NICBWMzAgMiAyIDIgM1xuTSAgVjMwIDMgMSAyIDRcbk0gIFYzMCA0IDEgMiA1XG5NICBWMzAgRU5EIEJPTkRcbk0gIFYzMCBFTkQgQ1RBQlxuTSAgVjMwIEJFR0lOIENPTExFQ1RJT05cbk0gIFYzMCBFTkQgQ09MTEVDVElPTlxuTSAgRU5EYDtcbmNvbnN0IElOVkFCQVNJQyA9IGBcbkRhdGFncm9rIG1vbm9tZXIgbGlicmFyeSBOdWNsZW90aWRlc1xuXG4gIDAgIDAgIDAgIDAgIDAgIDAgICAgICAgICAgICAgIDAgVjMwMDBcbk0gIFYzMCBCRUdJTiBDVEFCXG5NICBWMzAgQ09VTlRTIDggOCAwIDAgMFxuTSAgVjMwIEJFR0lOIEFUT01cbk0gIFYzMCAxIE8gMS4wOTM0IC0yLjE2MzYgMCAwXG5NICBWMzAgMiBDIDEuODM2NSAtMS40OTQ1IDAgMCBDRkc9MlxuTSAgVjMwIDMgQyAyLjgxNDcgLTEuNzAyNCAwIDBcbk0gIFYzMCA0IEMgMy4zMTQ3IC0wLjgzNjQgMCAwIFZBTD0zXG5NICBWMzAgNSBPIDIuNjQ1NSAtMC4wOTMyIDAgMFxuTSAgVjMwIDYgQyAxLjczMiAtMC41IDAgMCBDRkc9MVxuTSAgVjMwIDcgQyAwLjg2NiAwIDAgMFxuTSAgVjMwIDggTyAwLjg2NiAxIDAgMFxuTSAgVjMwIEVORCBBVE9NXG5NICBWMzAgQkVHSU4gQk9ORFxuTSAgVjMwIDEgMSAyIDEgQ0ZHPTFcbk0gIFYzMCAyIDEgMiAzXG5NICBWMzAgMyAxIDMgNFxuTSAgVjMwIDQgMSA0IDVcbk0gIFYzMCA1IDEgNiA1XG5NICBWMzAgNiAxIDIgNlxuTSAgVjMwIDcgMSA2IDcgQ0ZHPTNcbk0gIFYzMCA4IDEgNyA4XG5NICBWMzAgRU5EIEJPTkRcbk0gIFYzMCBCRUdJTiBDT0xMRUNUSU9OXG5NICBWMzAgTURMVjMwL1NURUFCUyBBVE9NUz0oMiAyIDYpXG5NICBWMzAgRU5EIENPTExFQ1RJT05cbk0gIFYzMCBFTkQgQ1RBQlxuTSAgRU5EYDtcbmV4cG9ydCBmdW5jdGlvbiBnZXROdWNsZW90aWRlc01vbChzbWlsZXNDb2Rlcywgb2NsUmVuZGVyID0gZmFsc2UpIHtcbiAgICBjb25zdCBtb2xCbG9ja3MgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNtaWxlc0NvZGVzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBzbWlsZXNDb2Rlc1tpXSA9PSAnT1AoPU8pKE8pTycgPyBtb2xCbG9ja3MucHVzaChQSE9TSEFURSkgOlxuICAgICAgICAgICAgc21pbGVzQ29kZXNbaV0gPT0gJ09QKD1PKShTKU8nID8gbW9sQmxvY2tzLnB1c2goVEhJT1BIT1NIQVRFKSA6XG4gICAgICAgICAgICAgICAgc21pbGVzQ29kZXNbaV0gPT0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDTycgPyBtb2xCbG9ja3MucHVzaChyb3RhdGVOdWNsZW90aWRlc1YzMDAwKElOVkFCQVNJQykpIDpcbiAgICAgICAgICAgICAgICAgICAgbW9sQmxvY2tzLnB1c2gocm90YXRlTnVjbGVvdGlkZXNWMzAwMChzbWlsZXNDb2Rlc1tpXSkpO1xuICAgIH1cbiAgICByZXR1cm4gbGlua1YzMDAwKG1vbEJsb2NrcywgZmFsc2UsIG9jbFJlbmRlcik7XG59XG5leHBvcnQgZnVuY3Rpb24gbGlua1YzMDAwKG1vbEJsb2NrcywgdHdvQ2hhaW5zID0gZmFsc2UsIG9jbFJlbmRlciA9IGZhbHNlKSB7XG4gICAgbGV0IG1hY3JvTW9sQmxvY2sgPSAnXFxuRGF0YWdyb2sgbWFjcm9tb2xlY3VsZSBoYW5kbGVyXFxuXFxuJztcbiAgICBtYWNyb01vbEJsb2NrICs9ICcgIDAgIDAgIDAgIDAgIDAgIDAgICAgICAgICAgICA5OTkgVjMwMDBcXG4nO1xuICAgIG1hY3JvTW9sQmxvY2sgKz0gJ00gIFYzMCBCRUdJTiBDVEFCXFxuJztcbiAgICBsZXQgYXRvbUJsb2NrID0gJyc7XG4gICAgbGV0IGJvbmRCbG9jayA9ICcnO1xuICAgIGxldCBjb2xsZWN0aW9uQmxvY2sgPSAnJztcbiAgICBjb25zdCBjb2xsZWN0aW9uID0gW107XG4gICAgbGV0IG5hdG9tID0gMDtcbiAgICBsZXQgbmJvbmQgPSAwO1xuICAgIGxldCB4U2hpZnQgPSAwO1xuICAgIGlmICh0d29DaGFpbnMgJiYgbW9sQmxvY2tzLmxlbmd0aCA+IDEpXG4gICAgICAgIG1vbEJsb2Nrc1sxXSA9IGludmVydE51Y2xlb3RpZGVzVjMwMDAobW9sQmxvY2tzWzFdKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vbEJsb2Nrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBtb2xCbG9ja3NbaV0gPSBtb2xCbG9ja3NbaV0ucmVwbGFjZUFsbCgnKC1cXG5NICBWMzAgJywgJygnKVxuICAgICAgICAgICAgLnJlcGxhY2VBbGwoJy1cXG5NICBWMzAgJywgJycpLnJlcGxhY2VBbGwoJyApJywgJyknKTtcbiAgICAgICAgY29uc3QgbnVtYmVycyA9IGV4dHJhY3RBdG9tc0JvbmRzTnVtYmVyc1YzMDAwKG1vbEJsb2Nrc1tpXSk7XG4gICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gZXh0cmFjdEF0b21EYXRhVjMwMDAobW9sQmxvY2tzW2ldKTtcbiAgICAgICAgaWYgKHR3b0NoYWlucykge1xuICAgICAgICAgICAgY29uc3QgeFNoaWZ0UmlnaHQgPSBNYXRoLm1pbiguLi5jb29yZGluYXRlcy54KTtcbiAgICAgICAgICAgIGNvbnN0IHlTaGlmdCA9IGkgPT0gMCA/IE1hdGgubWluKC4uLmNvb3JkaW5hdGVzLnkpIC0gMSA6IE1hdGgubWF4KC4uLmNvb3JkaW5hdGVzLnkpICsgMTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29vcmRpbmF0ZXMueC5sZW5ndGg7IGorKylcbiAgICAgICAgICAgICAgICBjb29yZGluYXRlcy54W2pdIC09IHhTaGlmdFJpZ2h0O1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb29yZGluYXRlcy55Lmxlbmd0aDsgaisrKVxuICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzLnlbal0gLT0geVNoaWZ0O1xuICAgICAgICB9XG4gICAgICAgIGxldCBpbmRleEF0b21zID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJ00gIFYzMCBCRUdJTiBBVE9NJyk7IC8vIFYzMDAwIGluZGV4IGZvciBhdG9tcyBjb29yZGluYXRlc1xuICAgICAgICBpbmRleEF0b21zID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJ1xcbicsIGluZGV4QXRvbXMpO1xuICAgICAgICBsZXQgaW5kZXggPSBpbmRleEF0b21zO1xuICAgICAgICBsZXQgaW5kZXhFbmQgPSBpbmRleEF0b21zO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bWJlcnMubmF0b207IGorKykge1xuICAgICAgICAgICAgaWYgKGNvb3JkaW5hdGVzLmF0b21JbmRleFtqXSAhPSAxIHx8IGkgPT0gMCB8fCB0d29DaGFpbnMpIHtcbiAgICAgICAgICAgICAgICAvL3Jld3JpdGUgYXRvbSBudW1iZXJcbiAgICAgICAgICAgICAgICBpbmRleCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCdWMzAnLCBpbmRleCkgKyA0O1xuICAgICAgICAgICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJyAnLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXRvbU51bWJlciA9IHBhcnNlSW50KG1vbEJsb2Nrc1tpXS5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKSkgKyBuYXRvbTtcbiAgICAgICAgICAgICAgICBtb2xCbG9ja3NbaV0gPSBtb2xCbG9ja3NbaV0uc2xpY2UoMCwgaW5kZXgpICsgYXRvbU51bWJlciArIG1vbEJsb2Nrc1tpXS5zbGljZShpbmRleEVuZCk7XG4gICAgICAgICAgICAgICAgLy9yZXdyaXRlIGNvb3JkaW5hdGVzXG4gICAgICAgICAgICAgICAgaW5kZXggPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignICcsIGluZGV4KSArIDE7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignICcsIGluZGV4KSArIDE7XG4gICAgICAgICAgICAgICAgaW5kZXhFbmQgPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignICcsIGluZGV4KTtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3RhbFNoaWZ0ID0gdHdvQ2hhaW5zID8gMCA6IHhTaGlmdCAtIGNvb3JkaW5hdGVzLnhbMF07XG4gICAgICAgICAgICAgICAgbGV0IGNvb3JkaW5hdGUgPSB0d29DaGFpbnMgP1xuICAgICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKDEwMDAwICogY29vcmRpbmF0ZXMueFtqXSkgLyAxMDAwMCA6XG4gICAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQoMTAwMDAgKiAocGFyc2VGbG9hdChtb2xCbG9ja3NbaV0uc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCkpICsgdG90YWxTaGlmdCkpIC8gMTAwMDA7XG4gICAgICAgICAgICAgICAgbW9sQmxvY2tzW2ldID0gbW9sQmxvY2tzW2ldLnNsaWNlKDAsIGluZGV4KSArIGNvb3JkaW5hdGUgKyBtb2xCbG9ja3NbaV0uc2xpY2UoaW5kZXhFbmQpO1xuICAgICAgICAgICAgICAgIGluZGV4ID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICAgICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJyAnLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgY29vcmRpbmF0ZSA9IHR3b0NoYWlucyA/XG4gICAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQoMTAwMDAgKiBjb29yZGluYXRlcy55W2pdKSAvIDEwMDAwIDpcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZCgxMDAwMCAqIChwYXJzZUZsb2F0KG1vbEJsb2Nrc1tpXS5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKSkpKSAvIDEwMDAwO1xuICAgICAgICAgICAgICAgIG1vbEJsb2Nrc1tpXSA9IG1vbEJsb2Nrc1tpXS5zbGljZSgwLCBpbmRleCkgKyBjb29yZGluYXRlICsgbW9sQmxvY2tzW2ldLnNsaWNlKGluZGV4RW5kKTtcbiAgICAgICAgICAgICAgICBpbmRleCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCdcXG4nLCBpbmRleCkgKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignTSAgVjMwJywgaW5kZXgpIC0gMTtcbiAgICAgICAgICAgICAgICBpbmRleEVuZCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCdcXG4nLCBpbmRleCArIDEpO1xuICAgICAgICAgICAgICAgIG1vbEJsb2Nrc1tpXSA9IG1vbEJsb2Nrc1tpXS5zbGljZSgwLCBpbmRleCkgKyBtb2xCbG9ja3NbaV0uc2xpY2UoaW5kZXhFbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4QXRvbXNFbmQgPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignTSAgVjMwIEVORCBBVE9NJyk7XG4gICAgICAgIGF0b21CbG9jayArPSBtb2xCbG9ja3NbaV0uc3Vic3RyaW5nKGluZGV4QXRvbXMgKyAxLCBpbmRleEF0b21zRW5kKTtcbiAgICAgICAgbGV0IGluZGV4Qm9uZHMgPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignTSAgVjMwIEJFR0lOIEJPTkQnKTsgLy8gVjMwMDAgaW5kZXggZm9yIGJvbmRzXG4gICAgICAgIGluZGV4Qm9uZHMgPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignXFxuJywgaW5kZXhCb25kcyk7XG4gICAgICAgIGluZGV4ID0gaW5kZXhCb25kcztcbiAgICAgICAgaW5kZXhFbmQgPSBpbmRleEJvbmRzO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bWJlcnMubmJvbmQ7IGorKykge1xuICAgICAgICAgICAgLy9yZXdyaXRlIGJvbmQgbnVtYmVyXG4gICAgICAgICAgICBpbmRleCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCdWMzAnLCBpbmRleCkgKyA0O1xuICAgICAgICAgICAgaW5kZXhFbmQgPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignICcsIGluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IGJvbmROdW1iZXIgPSBwYXJzZUludChtb2xCbG9ja3NbaV0uc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCkpICsgbmJvbmQ7XG4gICAgICAgICAgICBtb2xCbG9ja3NbaV0gPSBtb2xCbG9ja3NbaV0uc2xpY2UoMCwgaW5kZXgpICsgYm9uZE51bWJlciArIG1vbEJsb2Nrc1tpXS5zbGljZShpbmRleEVuZCk7XG4gICAgICAgICAgICAvL3Jld3JpdGUgYXRvbSBwYWlyIGluIGJvbmRcbiAgICAgICAgICAgIGluZGV4ID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICAgICAgaW5kZXggPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignICcsIGluZGV4KSArIDE7XG4gICAgICAgICAgICBpbmRleEVuZCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCcgJywgaW5kZXgpO1xuICAgICAgICAgICAgbGV0IGF0b21OdW1iZXIgPSBwYXJzZUludChtb2xCbG9ja3NbaV0uc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCkpICsgbmF0b207XG4gICAgICAgICAgICBtb2xCbG9ja3NbaV0gPSBtb2xCbG9ja3NbaV0uc2xpY2UoMCwgaW5kZXgpICsgYXRvbU51bWJlciArIG1vbEJsb2Nrc1tpXS5zbGljZShpbmRleEVuZCk7XG4gICAgICAgICAgICBpbmRleCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCcgJywgaW5kZXgpICsgMTtcbiAgICAgICAgICAgIGluZGV4RW5kID0gTWF0aC5taW4obW9sQmxvY2tzW2ldLmluZGV4T2YoJ1xcbicsIGluZGV4KSwgbW9sQmxvY2tzW2ldLmluZGV4T2YoJyAnLCBpbmRleCkpO1xuICAgICAgICAgICAgYXRvbU51bWJlciA9IHBhcnNlSW50KG1vbEJsb2Nrc1tpXS5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKSkgKyBuYXRvbTtcbiAgICAgICAgICAgIG1vbEJsb2Nrc1tpXSA9IG1vbEJsb2Nrc1tpXS5zbGljZSgwLCBpbmRleCkgKyBhdG9tTnVtYmVyICsgbW9sQmxvY2tzW2ldLnNsaWNlKGluZGV4RW5kKTtcbiAgICAgICAgICAgIGluZGV4ID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJ1xcbicsIGluZGV4KSArIDE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXhCb25kRW5kID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJ00gIFYzMCBFTkQgQk9ORCcpO1xuICAgICAgICBib25kQmxvY2sgKz0gbW9sQmxvY2tzW2ldLnN1YnN0cmluZyhpbmRleEJvbmRzICsgMSwgaW5kZXhCb25kRW5kKTtcbiAgICAgICAgbGV0IGluZGV4Q29sbGVjdGlvbiA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCdNICBWMzAgTURMVjMwL1NURUFCUyBBVE9NUz0oJyk7IC8vIFYzMDAwIGluZGV4IGZvciBjb2xsZWN0aW9uc1xuICAgICAgICB3aGlsZSAoaW5kZXhDb2xsZWN0aW9uICE9IC0xKSB7XG4gICAgICAgICAgICBpbmRleENvbGxlY3Rpb24gKz0gMjg7XG4gICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uRW5kID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJyknLCBpbmRleENvbGxlY3Rpb24pO1xuICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbkVudHJpZXMgPSBtb2xCbG9ja3NbaV0uc3Vic3RyaW5nKGluZGV4Q29sbGVjdGlvbiwgY29sbGVjdGlvbkVuZCkuc3BsaXQoJyAnKS5zbGljZSgxKTtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25FbnRyaWVzLmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLnB1c2gocGFyc2VJbnQoZSkgKyBuYXRvbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGluZGV4Q29sbGVjdGlvbiA9IGNvbGxlY3Rpb25FbmQ7XG4gICAgICAgICAgICBpbmRleENvbGxlY3Rpb24gPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignTSAgVjMwIE1ETFYzMC9TVEVBQlMgQVRPTVM9KCcsIGluZGV4Q29sbGVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgbmF0b20gKz0gdHdvQ2hhaW5zID8gbnVtYmVycy5uYXRvbSA6IG51bWJlcnMubmF0b20gLSAxO1xuICAgICAgICBuYm9uZCArPSBudW1iZXJzLm5ib25kO1xuICAgICAgICB4U2hpZnQgKz0gdHdvQ2hhaW5zID8gMCA6IGNvb3JkaW5hdGVzLnhbbnVtYmVycy5uYXRvbSAtIDFdIC0gY29vcmRpbmF0ZXMueFswXTtcbiAgICB9XG4gICAgY29uc3QgZW50cmllcyA9IDQ7XG4gICAgY29uc3QgY29sbE51bWJlciA9IE1hdGguY2VpbChjb2xsZWN0aW9uLmxlbmd0aCAvIGVudHJpZXMpO1xuICAgIGlmIChvY2xSZW5kZXIpIHtcbiAgICAgICAgY29sbGVjdGlvbkJsb2NrICs9ICdNICBWMzAgTURMVjMwL1NURUFCUyBBVE9NUz0oJyArIGNvbGxlY3Rpb24ubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbGxlY3Rpb24ubGVuZ3RoOyBqKyspXG4gICAgICAgICAgICBjb2xsZWN0aW9uQmxvY2sgKz0gJyAnICsgY29sbGVjdGlvbltqXTtcbiAgICAgICAgY29sbGVjdGlvbkJsb2NrICs9ICcpXFxuJztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbGxlY3Rpb25CbG9jayArPSAnTSAgVjMwIE1ETFYzMC9TVEVBQlMgQVRPTVM9KCcgKyBjb2xsZWN0aW9uLmxlbmd0aCArICcgLVxcbic7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sbE51bWJlcjsgaSsrKSB7XG4gICAgICAgICAgICBjb2xsZWN0aW9uQmxvY2sgKz0gJ00gIFYzMCAnO1xuICAgICAgICAgICAgY29uc3QgZW50cmllc0N1cnJlbnQgPSBpICsgMSA9PSBjb2xsTnVtYmVyID8gY29sbGVjdGlvbi5sZW5ndGggLSAoY29sbE51bWJlciAtIDEpICogZW50cmllcyA6IGVudHJpZXM7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVudHJpZXNDdXJyZW50OyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uQmxvY2sgKz0gKGogKyAxID09IGVudHJpZXNDdXJyZW50KSA/XG4gICAgICAgICAgICAgICAgICAgIChpID09IGNvbGxOdW1iZXIgLSAxID8gY29sbGVjdGlvbltlbnRyaWVzICogaSArIGpdICsgJylcXG4nIDogY29sbGVjdGlvbltlbnRyaWVzICogaSArIGpdICsgJyAtXFxuJykgOlxuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uW2VudHJpZXMgKiBpICsgal0gKyAnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy9nZW5lcmF0ZSBmaWxlXG4gICAgdHdvQ2hhaW5zID8gbmF0b20gOiBuYXRvbSsrO1xuICAgIG1hY3JvTW9sQmxvY2sgKz0gJ00gIFYzMCBDT1VOVFMgJyArIG5hdG9tICsgJyAnICsgbmJvbmQgKyAnIDAgMCAwXFxuJztcbiAgICBtYWNyb01vbEJsb2NrICs9ICdNICBWMzAgQkVHSU4gQVRPTVxcbic7XG4gICAgbWFjcm9Nb2xCbG9jayArPSBhdG9tQmxvY2s7XG4gICAgbWFjcm9Nb2xCbG9jayArPSAnTSAgVjMwIEVORCBBVE9NXFxuJztcbiAgICBtYWNyb01vbEJsb2NrICs9ICdNICBWMzAgQkVHSU4gQk9ORFxcbic7XG4gICAgbWFjcm9Nb2xCbG9jayArPSBib25kQmxvY2s7XG4gICAgbWFjcm9Nb2xCbG9jayArPSAnTSAgVjMwIEVORCBCT05EXFxuJztcbiAgICAvL21hY3JvTW9sQmxvY2sgKz0gJ00gIFYzMCBCRUdJTiBDT0xMRUNUSU9OXFxuJztcbiAgICAvL21hY3JvTW9sQmxvY2sgKz0gY29sbGVjdGlvbkJsb2NrO1xuICAgIC8vbWFjcm9Nb2xCbG9jayArPSAnTSAgVjMwIEVORCBDT0xMRUNUSU9OXFxuJztcbiAgICBtYWNyb01vbEJsb2NrICs9ICdNICBWMzAgRU5EIENUQUJcXG4nO1xuICAgIG1hY3JvTW9sQmxvY2sgKz0gJ00gIEVORFxcbic7XG4gICAgbWFjcm9Nb2xCbG9jayA9IG1hY3JvTW9sQmxvY2sucmVwbGFjZUFsbCgnQ0ZHPTEnLCAnJykucmVwbGFjZUFsbCgnQ0ZHPTInLCAnJykucmVwbGFjZUFsbCgnQ0ZHPTMnLCAnJykucmVwbGFjZUFsbCgnQ0ZHPTQnLCAnJyk7XG4gICAgcmV0dXJuIG1hY3JvTW9sQmxvY2s7XG59XG5mdW5jdGlvbiByb3RhdGVOdWNsZW90aWRlc1YzMDAwKG1vbGVjdWxlKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGxldCBtb2xCbG9jayA9IG1vbGVjdWxlLmluY2x1ZGVzKCdNICBFTkQnKSA/IG1vbGVjdWxlIDogT0NMLk1vbGVjdWxlLmZyb21TbWlsZXMobW9sZWN1bGUpLnRvTW9sZmlsZVYzKCk7XG4gICAgY29uc3QgY29vcmRpbmF0ZXMgPSBleHRyYWN0QXRvbURhdGFWMzAwMChtb2xCbG9jayk7XG4gICAgY29uc3QgbmF0b20gPSBjb29yZGluYXRlcy5hdG9tSW5kZXgubGVuZ3RoO1xuICAgIGNvbnN0IGluZGV4Rml2ZVByaW1lID0gY29vcmRpbmF0ZXMuYXRvbUluZGV4LmluZGV4T2YoMSk7XG4gICAgY29uc3QgaW5kZXhUaHJlZVByaW1lID0gY29vcmRpbmF0ZXMuYXRvbUluZGV4LmluZGV4T2YobmF0b20pO1xuICAgIC8vZml4IDUgcHJpbWUgaWYgaW5hZGVxdWF0ZVxuICAgIGlmIChuYXRvbSA+IDgpXG4gICAgICAgIGZpeDVQcmltZShjb29yZGluYXRlcywgaW5kZXhGaXZlUHJpbWUsIGluZGV4VGhyZWVQcmltZSk7XG4gICAgY29uc3QgeENlbnRlciA9IChjb29yZGluYXRlcy54W2luZGV4VGhyZWVQcmltZV0gKyBjb29yZGluYXRlcy54W2luZGV4Rml2ZVByaW1lXSkgLyAyO1xuICAgIGNvbnN0IHlDZW50ZXIgPSAoY29vcmRpbmF0ZXMueVtpbmRleFRocmVlUHJpbWVdICsgY29vcmRpbmF0ZXMueVtpbmRleEZpdmVQcmltZV0pIC8gMjtcbiAgICAvL3BsYWNlIHRvIGNlbnRlclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmF0b207IGkrKykge1xuICAgICAgICBjb29yZGluYXRlcy54W2ldIC09IHhDZW50ZXI7XG4gICAgICAgIGNvb3JkaW5hdGVzLnlbaV0gLT0geUNlbnRlcjtcbiAgICB9XG4gICAgbGV0IGFuZ2xlID0gMDtcbiAgICBpZiAoY29vcmRpbmF0ZXMueFtpbmRleEZpdmVQcmltZV0gPT0gMClcbiAgICAgICAgYW5nbGUgPSBjb29yZGluYXRlcy55W2luZGV4Rml2ZVByaW1lXSA+IGNvb3JkaW5hdGVzLnlbaW5kZXhUaHJlZVByaW1lXSA/IE1hdGguUEkgLyAyIDogMyAqIE1hdGguUEkgLyAyO1xuICAgIGVsc2UgaWYgKGNvb3JkaW5hdGVzLnlbaW5kZXhGaXZlUHJpbWVdID09IDApXG4gICAgICAgIGFuZ2xlID0gY29vcmRpbmF0ZXMueFtpbmRleEZpdmVQcmltZV0gPiBjb29yZGluYXRlcy54W2luZGV4VGhyZWVQcmltZV0gPyBNYXRoLlBJIDogMDtcbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgZGVyaXZhdGl2ZSA9IGNvb3JkaW5hdGVzLnlbaW5kZXhGaXZlUHJpbWVdIC8gY29vcmRpbmF0ZXMueFtpbmRleEZpdmVQcmltZV07XG4gICAgICAgIGFuZ2xlID0gZGVyaXZhdGl2ZSA+IDAgPyBNYXRoLlBJIC0gTWF0aC5hdGFuKGRlcml2YXRpdmUpIDogTWF0aC5hdGFuKGRlcml2YXRpdmUpO1xuICAgIH1cbiAgICBjb25zdCBjb3MgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgY29uc3Qgc2luID0gTWF0aC5zaW4oYW5nbGUpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmF0b207IGkrKykge1xuICAgICAgICBjb25zdCB4QWRkID0gY29vcmRpbmF0ZXMueFtpXTtcbiAgICAgICAgY29vcmRpbmF0ZXMueFtpXSA9IHhBZGQgKiBjb3MgLSBjb29yZGluYXRlcy55W2ldICogc2luO1xuICAgICAgICBjb29yZGluYXRlcy55W2ldID0geEFkZCAqIHNpbiArIGNvb3JkaW5hdGVzLnlbaV0gKiBjb3M7XG4gICAgfVxuICAgIC8vcGxhY2UgdG8gcmlnaHRcbiAgICBjb25zdCB4U2hpZnQgPSBjb29yZGluYXRlcy54W2luZGV4Rml2ZVByaW1lXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdG9tOyBpKyspXG4gICAgICAgIGNvb3JkaW5hdGVzLnhbaV0gLT0geFNoaWZ0O1xuICAgIC8vcmV3cml0ZSBtb2xCbG9ja1xuICAgIGxldCBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJ00gIFYzMCBCRUdJTiBBVE9NJyk7IC8vIFYzMDAwIGluZGV4IGZvciBhdG9tcyBjb29yZGluYXRlc1xuICAgIGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignXFxuJywgaW5kZXgpO1xuICAgIGxldCBpbmRleEVuZCA9IGluZGV4O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmF0b207IGkrKykge1xuICAgICAgICBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJ1YzMCcsIGluZGV4KSArIDQ7XG4gICAgICAgIGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4KSArIDE7XG4gICAgICAgIGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4KSArIDE7XG4gICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4KSArIDE7XG4gICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4RW5kKTtcbiAgICAgICAgbW9sQmxvY2sgPSBtb2xCbG9jay5zbGljZSgwLCBpbmRleCkgK1xuICAgICAgICAgICAgY29vcmRpbmF0ZXMueFtpXSArICcgJyArIGNvb3JkaW5hdGVzLnlbaV0gK1xuICAgICAgICAgICAgbW9sQmxvY2suc2xpY2UoaW5kZXhFbmQpO1xuICAgICAgICBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJ1xcbicsIGluZGV4KSArIDE7XG4gICAgfVxuICAgIHJldHVybiBtb2xCbG9jaztcbn1cbmZ1bmN0aW9uIGludmVydE51Y2xlb3RpZGVzVjMwMDAobW9sZWN1bGUpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGV0IG1vbEJsb2NrID0gbW9sZWN1bGUuaW5jbHVkZXMoJ00gIEVORCcpID8gbW9sZWN1bGUgOiBPQ0wuTW9sZWN1bGUuZnJvbVNtaWxlcyhtb2xlY3VsZSkudG9Nb2xmaWxlVjMoKTtcbiAgICBjb25zdCBjb29yZGluYXRlcyA9IGV4dHJhY3RBdG9tRGF0YVYzMDAwKG1vbEJsb2NrKTtcbiAgICBjb25zdCBuYXRvbSA9IGNvb3JkaW5hdGVzLmF0b21JbmRleC5sZW5ndGg7XG4gICAgY29uc3QgeENlbnRlciA9IChNYXRoLm1heCguLi5jb29yZGluYXRlcy54KSArIE1hdGgubWluKC4uLmNvb3JkaW5hdGVzLngpKSAvIDI7XG4gICAgY29uc3QgeUNlbnRlciA9IChNYXRoLm1heCguLi5jb29yZGluYXRlcy55KSArIE1hdGgubWluKC4uLmNvb3JkaW5hdGVzLnkpKSAvIDI7XG4gICAgLy9wbGFjZSB0byBjZW50ZXJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdG9tOyBpKyspIHtcbiAgICAgICAgY29vcmRpbmF0ZXMueFtpXSAtPSB4Q2VudGVyO1xuICAgICAgICBjb29yZGluYXRlcy55W2ldIC09IHlDZW50ZXI7XG4gICAgfVxuICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5QSTtcbiAgICBjb25zdCBjb3MgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgY29uc3Qgc2luID0gTWF0aC5zaW4oYW5nbGUpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmF0b207IGkrKykge1xuICAgICAgICBjb25zdCB4QWRkID0gY29vcmRpbmF0ZXMueFtpXTtcbiAgICAgICAgY29vcmRpbmF0ZXMueFtpXSA9IHhBZGQgKiBjb3MgLSBjb29yZGluYXRlcy55W2ldICogc2luO1xuICAgICAgICBjb29yZGluYXRlcy55W2ldID0geEFkZCAqIHNpbiArIGNvb3JkaW5hdGVzLnlbaV0gKiBjb3M7XG4gICAgfVxuICAgIC8vcGxhY2UgYmFja1xuICAgIGNvbnN0IHlTaGlmdCA9IE1hdGgubWF4KC4uLmNvb3JkaW5hdGVzLnkpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmF0b207IGkrKykge1xuICAgICAgICBjb29yZGluYXRlcy54W2ldICs9IHhDZW50ZXI7XG4gICAgICAgIGNvb3JkaW5hdGVzLnlbaV0gLT0geVNoaWZ0O1xuICAgIH1cbiAgICAvL3Jld3JpdGUgbW9sQmxvY2tcbiAgICBsZXQgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCdNICBWMzAgQkVHSU4gQVRPTScpOyAvLyBWMzAwMCBpbmRleCBmb3IgYXRvbXMgY29vcmRpbmF0ZXNcbiAgICBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJ1xcbicsIGluZGV4KTtcbiAgICBsZXQgaW5kZXhFbmQgPSBpbmRleDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdG9tOyBpKyspIHtcbiAgICAgICAgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCdWMzAnLCBpbmRleCkgKyA0O1xuICAgICAgICBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICBpbmRleEVuZCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICBpbmRleEVuZCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleEVuZCk7XG4gICAgICAgIG1vbEJsb2NrID0gbW9sQmxvY2suc2xpY2UoMCwgaW5kZXgpICtcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzLnhbaV0gKyAnICcgKyBjb29yZGluYXRlcy55W2ldICtcbiAgICAgICAgICAgIG1vbEJsb2NrLnNsaWNlKGluZGV4RW5kKTtcbiAgICAgICAgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCdcXG4nLCBpbmRleCkgKyAxO1xuICAgIH1cbiAgICByZXR1cm4gbW9sQmxvY2s7XG59XG5mdW5jdGlvbiBmaXg1UHJpbWUoY29vcmRpbmF0ZXMsIGluZGV4Rml2ZVByaW1lLCBpbmRleFRocmVlUHJpbWUpIHtcbiAgICBjb25zdCBpbmRleEZpdmVQcmltZU5laWdoYm91ciA9IGluZGV4Rml2ZVByaW1lICsgMTtcbiAgICBjb25zdCB4U2hpZnQgPSBjb29yZGluYXRlcy54W2luZGV4Rml2ZVByaW1lTmVpZ2hib3VyXTtcbiAgICBjb25zdCB5U2hpZnQgPSBjb29yZGluYXRlcy55W2luZGV4Rml2ZVByaW1lTmVpZ2hib3VyXTtcbiAgICBjb25zdCBiYXNlM1ByaW1lWCA9IGNvb3JkaW5hdGVzLnhbaW5kZXhUaHJlZVByaW1lXSAtIHhTaGlmdDtcbiAgICBjb25zdCBiYXNlM1ByaW1lWSA9IGNvb3JkaW5hdGVzLnlbaW5kZXhUaHJlZVByaW1lXSAtIHlTaGlmdDtcbiAgICBjb25zdCBiYXNlNVByaW1lWCA9IGNvb3JkaW5hdGVzLnhbaW5kZXhGaXZlUHJpbWVdIC0geFNoaWZ0O1xuICAgIGNvbnN0IGJhc2U1UHJpbWVZID0gY29vcmRpbmF0ZXMueVtpbmRleEZpdmVQcmltZV0gLSB5U2hpZnQ7XG4gICAgY29uc3Qgcm90YXRlZDVQcmltZVggPSBiYXNlNVByaW1lWCAqIE1hdGguY29zKE1hdGguUEkgKiAyIC8gMykgLSBiYXNlNVByaW1lWSAqIE1hdGguc2luKE1hdGguUEkgKiAyIC8gMyk7XG4gICAgY29uc3Qgcm90YXRlZDVQcmltZVkgPSBiYXNlNVByaW1lWCAqIE1hdGguc2luKE1hdGguUEkgKiAyIC8gMykgKyBiYXNlNVByaW1lWSAqIE1hdGguY29zKE1hdGguUEkgKiAyIC8gMyk7XG4gICAgY29uc3QgZHggPSBiYXNlNVByaW1lWCAtIGJhc2UzUHJpbWVYO1xuICAgIGNvbnN0IGR5ID0gYmFzZTVQcmltZVkgLSBiYXNlM1ByaW1lWTtcbiAgICBjb25zdCBkeFJvdGF0ZWQgPSByb3RhdGVkNVByaW1lWCAtIGJhc2UzUHJpbWVYO1xuICAgIGNvbnN0IGR5Um90YXRlZCA9IHJvdGF0ZWQ1UHJpbWVZIC0gYmFzZTNQcmltZVk7XG4gICAgaWYgKE1hdGguc3FydChkeVJvdGF0ZWQgKiBkeVJvdGF0ZWQgKyBkeFJvdGF0ZWQgKiBkeFJvdGF0ZWQpID49IE1hdGguc3FydChkeSAqIGR5ICsgZHggKiBkeCkpIHtcbiAgICAgICAgY29vcmRpbmF0ZXMueFtpbmRleEZpdmVQcmltZV0gPSByb3RhdGVkNVByaW1lWCArIHhTaGlmdDtcbiAgICAgICAgY29vcmRpbmF0ZXMueVtpbmRleEZpdmVQcmltZV0gPSByb3RhdGVkNVByaW1lWSArIHlTaGlmdDtcbiAgICB9XG59XG5mdW5jdGlvbiBleHRyYWN0QXRvbXNCb25kc051bWJlcnNWMzAwMChtb2xCbG9jaykge1xuICAgIG1vbEJsb2NrID0gbW9sQmxvY2sucmVwbGFjZUFsbCgnXFxyJywgJycpOyAvL2VxdWFsaXplIG9sZCBhbmQgbmV3IHNkZiBzdGFuZGFyZHNcbiAgICBsZXQgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCdDT1VOVFMnKSArIDc7IC8vIFYzMDAwIGluZGV4IGZvciBhdG9tcyBhbmQgYm9uZHMgbnVtYmVyXG4gICAgbGV0IGluZGV4RW5kID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4KTtcbiAgICBjb25zdCBhdG9tc051bWJlciA9IHBhcnNlSW50KG1vbEJsb2NrLnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpKTtcbiAgICBpbmRleCA9IGluZGV4RW5kICsgMTtcbiAgICBpbmRleEVuZCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleCk7XG4gICAgY29uc3QgYm9uZHNOdW1iZXIgPSBwYXJzZUludChtb2xCbG9jay5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKSk7XG4gICAgcmV0dXJuIHsgbmF0b206IGF0b21zTnVtYmVyLCBuYm9uZDogYm9uZHNOdW1iZXIgfTtcbn1cbmZ1bmN0aW9uIGV4dHJhY3RBdG9tRGF0YVYzMDAwKG1vbEJsb2NrKSB7XG4gICAgY29uc3QgbnVtYmVycyA9IGV4dHJhY3RBdG9tc0JvbmRzTnVtYmVyc1YzMDAwKG1vbEJsb2NrKTtcbiAgICBsZXQgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCdNICBWMzAgQkVHSU4gQVRPTScpOyAvLyBWMzAwMCBpbmRleCBmb3IgYXRvbXMgY29vcmRpbmF0ZXNcbiAgICBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJ1xcbicsIGluZGV4KTtcbiAgICBsZXQgaW5kZXhFbmQgPSBpbmRleDtcbiAgICBjb25zdCBpbmRleGVzID0gQXJyYXkobnVtYmVycy5uYXRvbSk7XG4gICAgY29uc3QgdHlwZXMgPSBBcnJheShudW1iZXJzLm5hdG9tKTtcbiAgICBjb25zdCB4ID0gQXJyYXkobnVtYmVycy5uYXRvbSk7XG4gICAgY29uc3QgeSA9IEFycmF5KG51bWJlcnMubmF0b20pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVycy5uYXRvbTsgaSsrKSB7XG4gICAgICAgIGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignVjMwJywgaW5kZXgpICsgNDtcbiAgICAgICAgaW5kZXhFbmQgPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXgpO1xuICAgICAgICBpbmRleGVzW2ldID0gcGFyc2VJbnQobW9sQmxvY2suc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCkpO1xuICAgICAgICBpbmRleCA9IGluZGV4RW5kICsgMTtcbiAgICAgICAgaW5kZXhFbmQgPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXgpO1xuICAgICAgICB0eXBlc1tpXSA9IG1vbEJsb2NrLnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpO1xuICAgICAgICBpbmRleCA9IGluZGV4RW5kICsgMTtcbiAgICAgICAgaW5kZXhFbmQgPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXgpO1xuICAgICAgICB4W2ldID0gcGFyc2VGbG9hdChtb2xCbG9jay5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKSk7XG4gICAgICAgIGluZGV4ID0gaW5kZXhFbmQgKyAxO1xuICAgICAgICBpbmRleEVuZCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleCk7XG4gICAgICAgIHlbaV0gPSBwYXJzZUZsb2F0KG1vbEJsb2NrLnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpKTtcbiAgICAgICAgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCdcXG4nLCBpbmRleCkgKyAxO1xuICAgIH1cbiAgICByZXR1cm4geyBhdG9tSW5kZXg6IGluZGV4ZXMsIGF0b21UeXBlOiB0eXBlcywgeDogeCwgeTogeSB9O1xufVxuIiwiaW1wb3J0IHsgbWFwLCBTWU5USEVTSVpFUlMsIFRFQ0hOT0xPR0lFUywgTU9ESUZJQ0FUSU9OUywgZGVsaW1pdGVyIH0gZnJvbSAnLi9tYXAnO1xuaW1wb3J0IHsgYXNvR2FwbWVyc051Y2xlb3RpZGVzVG9CaW9TcHJpbmcsIGFzb0dhcG1lcnNOdWNsZW90aWRlc1RvR2NycywgYXNvR2FwbWVyc0Jpb1NwcmluZ1RvTnVjbGVvdGlkZXMsIGFzb0dhcG1lcnNCaW9TcHJpbmdUb0djcnMsIGFzb0dhcG1lcnNHY3JzVG9OdWNsZW90aWRlcywgYXNvR2FwbWVyc0djcnNUb0Jpb1NwcmluZywgZ2Nyc1RvTWVybWFkZTEyLCBzaVJuYU51Y2xlb3RpZGVUb0Jpb1NwcmluZ1NlbnNlU3RyYW5kLCBzaVJuYU51Y2xlb3RpZGVUb0F4b2xhYnNTZW5zZVN0cmFuZCwgc2lSbmFOdWNsZW90aWRlc1RvR2Nycywgc2lSbmFCaW9TcHJpbmdUb051Y2xlb3RpZGVzLCBzaVJuYUJpb1NwcmluZ1RvQXhvbGFicywgc2lSbmFCaW9TcHJpbmdUb0djcnMsIHNpUm5hQXhvbGFic1RvTnVjbGVvdGlkZXMsIHNpUm5hQXhvbGFic1RvQmlvU3ByaW5nLCBzaVJuYUF4b2xhYnNUb0djcnMsIHNpUm5hR2Nyc1RvTnVjbGVvdGlkZXMsIHNpUm5hR2Nyc1RvQmlvU3ByaW5nLCBzaVJuYUdjcnNUb0F4b2xhYnMsIGdjcnNUb051Y2xlb3RpZGVzLCBnY3JzVG9MY21zIH0gZnJvbSAnLi9jb252ZXJ0ZXJzJztcbmNvbnN0IG5vVHJhbnNsYXRpb25UYWJsZUF2YWlsYWJsZSA9ICdObyB0cmFuc2xhdGlvbiB0YWJsZSBhdmFpbGFibGUnO1xuZXhwb3J0IGNvbnN0IHVuZGVmaW5lZElucHV0U2VxdWVuY2UgPSAnVHlwZSBvZiBpbnB1dCBzZXF1ZW5jZSBpcyB1bmRlZmluZWQnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1hdChzZXF1ZW5jZSkge1xuICAgIGNvbnN0IHBvc3NpYmxlU3ludGhlc2l6ZXJzID0gZ2V0TGlzdE9mUG9zc2libGVTeW50aGVzaXplcnNCeUZpcnN0TWF0Y2hlZENvZGUoc2VxdWVuY2UpO1xuICAgIGlmIChwb3NzaWJsZVN5bnRoZXNpemVycy5sZW5ndGggPT0gMClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgbGV0IG91dHB1dEluZGV4ID0gMDtcbiAgICBjb25zdCBmaXJzdFVuaXF1ZUNoYXJhY3RlcnMgPSBbJ3InLCAnZCddO1xuICAgIGNvbnN0IG51Y2xlb3RpZGVzID0gWydBJywgJ1UnLCAnVCcsICdDJywgJ0cnXTtcbiAgICBwb3NzaWJsZVN5bnRoZXNpemVycy5mb3JFYWNoKChzeW50aGVzaXplcikgPT4ge1xuICAgICAgICBjb25zdCBjb2RlcyA9IGdldEFsbENvZGVzT2ZTeW50aGVzaXplcihzeW50aGVzaXplcik7XG4gICAgICAgIHdoaWxlIChvdXRwdXRJbmRleCA8IHNlcXVlbmNlLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZENvZGUgPSBjb2Rlcy5maW5kKChjKSA9PiBjID09IHNlcXVlbmNlLnNsaWNlKG91dHB1dEluZGV4LCBvdXRwdXRJbmRleCArIGMubGVuZ3RoKSk7XG4gICAgICAgICAgICBpZiAobWF0Y2hlZENvZGUgPT0gbnVsbClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGlmICggLy8gZm9yIG1pc3Rha2UgcGF0dGVybiAnckFBJ1xuICAgICAgICAgICAgb3V0cHV0SW5kZXggPiAxICYmXG4gICAgICAgICAgICAgICAgbnVjbGVvdGlkZXMuaW5jbHVkZXMoc2VxdWVuY2Vbb3V0cHV0SW5kZXhdKSAmJlxuICAgICAgICAgICAgICAgIGZpcnN0VW5pcXVlQ2hhcmFjdGVycy5pbmNsdWRlcyhzZXF1ZW5jZVtvdXRwdXRJbmRleCAtIDJdKSlcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGlmICggLy8gZm9yIG1pc3Rha2UgcGF0dGVybiAnQXJBJ1xuICAgICAgICAgICAgZmlyc3RVbmlxdWVDaGFyYWN0ZXJzLmluY2x1ZGVzKHNlcXVlbmNlW291dHB1dEluZGV4ICsgMV0pICYmXG4gICAgICAgICAgICAgICAgbnVjbGVvdGlkZXMuaW5jbHVkZXMoc2VxdWVuY2Vbb3V0cHV0SW5kZXhdKSkge1xuICAgICAgICAgICAgICAgIG91dHB1dEluZGV4Kys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXRwdXRJbmRleCArPSBtYXRjaGVkQ29kZS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBpbmRleE9mRmlyc3ROb3RWYWxpZENoYXIgPSAob3V0cHV0SW5kZXggPT0gc2VxdWVuY2UubGVuZ3RoKSA/IC0xIDogb3V0cHV0SW5kZXg7XG4gICAgaWYgKGluZGV4T2ZGaXJzdE5vdFZhbGlkQ2hhciAhPSAtMSlcbiAgICAgICAgcmV0dXJuIHBvc3NpYmxlU3ludGhlc2l6ZXJzWzBdO1xuICAgIGNvbnN0IHBvc3NpYmxlVGVjaG5vbG9naWVzID0gZ2V0TGlzdE9mUG9zc2libGVUZWNobm9sb2dpZXNCeUZpcnN0TWF0Y2hlZENvZGUoc2VxdWVuY2UsIHBvc3NpYmxlU3ludGhlc2l6ZXJzWzBdKTtcbiAgICBpZiAocG9zc2libGVUZWNobm9sb2dpZXMubGVuZ3RoID09IDApXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIG91dHB1dEluZGV4ID0gMDtcbiAgICBwb3NzaWJsZVRlY2hub2xvZ2llcy5mb3JFYWNoKCh0ZWNobm9sb2d5KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvZGVzID0gT2JqZWN0LmtleXMobWFwW3Bvc3NpYmxlU3ludGhlc2l6ZXJzWzBdXVt0ZWNobm9sb2d5XSk7XG4gICAgICAgIHdoaWxlIChvdXRwdXRJbmRleCA8IHNlcXVlbmNlLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZENvZGUgPSBjb2Rlcy5maW5kKChjKSA9PiBjID09IHNlcXVlbmNlLnNsaWNlKG91dHB1dEluZGV4LCBvdXRwdXRJbmRleCArIGMubGVuZ3RoKSk7XG4gICAgICAgICAgICBpZiAobWF0Y2hlZENvZGUgPT0gbnVsbClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGlmICggLy8gZm9yIG1pc3Rha2UgcGF0dGVybiAnckFBJ1xuICAgICAgICAgICAgb3V0cHV0SW5kZXggPiAxICYmXG4gICAgICAgICAgICAgICAgbnVjbGVvdGlkZXMuaW5jbHVkZXMoc2VxdWVuY2Vbb3V0cHV0SW5kZXhdKSAmJlxuICAgICAgICAgICAgICAgIGZpcnN0VW5pcXVlQ2hhcmFjdGVycy5pbmNsdWRlcyhzZXF1ZW5jZVtvdXRwdXRJbmRleCAtIDJdKSlcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGlmICggLy8gZm9yIG1pc3Rha2UgcGF0dGVybiAnQXJBJ1xuICAgICAgICAgICAgZmlyc3RVbmlxdWVDaGFyYWN0ZXJzLmluY2x1ZGVzKHNlcXVlbmNlW291dHB1dEluZGV4ICsgMV0pICYmXG4gICAgICAgICAgICAgICAgbnVjbGVvdGlkZXMuaW5jbHVkZXMoc2VxdWVuY2Vbb3V0cHV0SW5kZXhdKSkge1xuICAgICAgICAgICAgICAgIG91dHB1dEluZGV4Kys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXRwdXRJbmRleCArPSBtYXRjaGVkQ29kZS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcG9zc2libGVTeW50aGVzaXplcnNbMF07XG59XG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFNlcXVlbmNlKHNlcXVlbmNlLCBmb3JtYXQpIHtcbiAgICBjb25zdCBwb3NzaWJsZVN5bnRoZXNpemVycyA9IGZvcm1hdCA9PSBudWxsID9cbiAgICAgICAgZ2V0TGlzdE9mUG9zc2libGVTeW50aGVzaXplcnNCeUZpcnN0TWF0Y2hlZENvZGUoc2VxdWVuY2UpIDpcbiAgICAgICAgW2Zvcm1hdF07XG4gICAgLy8gaWYgKHBvc3NpYmxlU3ludGhlc2l6ZXJzLmxlbmd0aCA+IDEpIHtcbiAgICAvLyAgIGNvbnN0IHN5bnRoZXNpemVyID0gdWkuY2hvaWNlSW5wdXQoJ0Nob29zZSBzeW50aGVzaXplciBmcm9tIGxpc3Q6ICcsIHBvc3NpYmxlU3ludGhlc2l6ZXJzWzBdLFxuICAgIC8vICBwb3NzaWJsZVN5bnRoZXNpemVycyk7XG4gICAgLy8gICB1aS5kaWFsb2coJ0Nob29zZSBTeW50aGVzaXplcicpXG4gICAgLy8gICAgIC5hZGQodWkucGFuZWwoW3N5bnRoZXNpemVyLnJvb3RdLCB7c3R5bGU6IHtmb250V2VpZ2h0OiAnYm9sZCd9fSkpXG4gICAgLy8gICAgIC5vbk9LKCgpID0+IHBvc3NpYmxlU3ludGhlc2l6ZXJzID0gW3N5bnRoZXNpemVyLnZhbHVlXSlcbiAgICAvLyAgICAgLm9uQ2FuY2VsKCgpID0+IHtcbiAgICAvLyAgICAgICBwb3NzaWJsZVN5bnRoZXNpemVycyA9IFtwb3NzaWJsZVN5bnRoZXNpemVyc1swXV07XG4gICAgLy8gICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKCdJbnB1dCBzZXF1ZW5jZSBpcyBleHBlY3RlZCB0byBiZSBpbiBmb3JtYXQgJyArIHBvc3NpYmxlU3ludGhlc2l6ZXJzWzBdKTtcbiAgICAvLyAgICAgfSlcbiAgICAvLyAgICAgLnNob3coKTtcbiAgICAvLyB9IGVsc2UgaWYgKHBvc3NpYmxlU3ludGhlc2l6ZXJzLmxlbmd0aCA9PSAwKVxuICAgIGlmIChwb3NzaWJsZVN5bnRoZXNpemVycy5sZW5ndGggPT0gMClcbiAgICAgICAgcmV0dXJuIHsgaW5kZXhPZkZpcnN0Tm90VmFsaWRDaGFyOiAwLCBzeW50aGVzaXplcjogbnVsbCwgdGVjaG5vbG9neTogbnVsbCB9O1xuICAgIGxldCBvdXRwdXRJbmRleCA9IDA7XG4gICAgY29uc3QgZmlyc3RVbmlxdWVDaGFyYWN0ZXJzID0gWydyJywgJ2QnXTtcbiAgICBjb25zdCBudWNsZW90aWRlcyA9IFsnQScsICdVJywgJ1QnLCAnQycsICdHJ107XG4gICAgcG9zc2libGVTeW50aGVzaXplcnMuZm9yRWFjaCgoc3ludGhlc2l6ZXIpID0+IHtcbiAgICAgICAgY29uc3QgY29kZXMgPSBnZXRBbGxDb2Rlc09mU3ludGhlc2l6ZXIoc3ludGhlc2l6ZXIpO1xuICAgICAgICB3aGlsZSAob3V0cHV0SW5kZXggPCBzZXF1ZW5jZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRDb2RlID0gY29kZXMuZmluZCgoYykgPT4gYyA9PSBzZXF1ZW5jZS5zbGljZShvdXRwdXRJbmRleCwgb3V0cHV0SW5kZXggKyBjLmxlbmd0aCkpO1xuICAgICAgICAgICAgaWYgKG1hdGNoZWRDb2RlID09IG51bGwpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBpZiAoIC8vIGZvciBtaXN0YWtlIHBhdHRlcm4gJ3JBQSdcbiAgICAgICAgICAgIG91dHB1dEluZGV4ID4gMSAmJlxuICAgICAgICAgICAgICAgIG51Y2xlb3RpZGVzLmluY2x1ZGVzKHNlcXVlbmNlW291dHB1dEluZGV4XSkgJiZcbiAgICAgICAgICAgICAgICBmaXJzdFVuaXF1ZUNoYXJhY3RlcnMuaW5jbHVkZXMoc2VxdWVuY2Vbb3V0cHV0SW5kZXggLSAyXSkpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBpZiAoIC8vIGZvciBtaXN0YWtlIHBhdHRlcm4gJ0FyQSdcbiAgICAgICAgICAgIGZpcnN0VW5pcXVlQ2hhcmFjdGVycy5pbmNsdWRlcyhzZXF1ZW5jZVtvdXRwdXRJbmRleCArIDFdKSAmJlxuICAgICAgICAgICAgICAgIG51Y2xlb3RpZGVzLmluY2x1ZGVzKHNlcXVlbmNlW291dHB1dEluZGV4XSkpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRJbmRleCsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0cHV0SW5kZXggKz0gbWF0Y2hlZENvZGUubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgaW5kZXhPZkZpcnN0Tm90VmFsaWRDaGFyID0gKG91dHB1dEluZGV4ID09IHNlcXVlbmNlLmxlbmd0aCkgPyAtMSA6IG91dHB1dEluZGV4O1xuICAgIGlmIChpbmRleE9mRmlyc3ROb3RWYWxpZENoYXIgIT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluZGV4T2ZGaXJzdE5vdFZhbGlkQ2hhcjogaW5kZXhPZkZpcnN0Tm90VmFsaWRDaGFyLFxuICAgICAgICAgICAgc3ludGhlc2l6ZXI6IHBvc3NpYmxlU3ludGhlc2l6ZXJzLFxuICAgICAgICAgICAgdGVjaG5vbG9neTogbnVsbCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgcG9zc2libGVUZWNobm9sb2dpZXMgPSBnZXRMaXN0T2ZQb3NzaWJsZVRlY2hub2xvZ2llc0J5Rmlyc3RNYXRjaGVkQ29kZShzZXF1ZW5jZSwgcG9zc2libGVTeW50aGVzaXplcnNbMF0pO1xuICAgIC8vIGlmIChwb3NzaWJsZVRlY2hub2xvZ2llcy5sZW5ndGggPiAxKSB7XG4gICAgLy8gICBjb25zdCB0ZWNobm9sb2d5ID0gdWkuY2hvaWNlSW5wdXQoJ0Nob29zZSB0ZWNobm9sb2d5IGZyb20gbGlzdDogJywgcG9zc2libGVUZWNobm9sb2dpZXNbMF0sXG4gICAgLy8gcG9zc2libGVUZWNobm9sb2dpZXMpO1xuICAgIC8vICAgdWkuZGlhbG9nKCdDaG9vc2UgVGVjaG5vbG9neScpXG4gICAgLy8gICAgIC5hZGQodWkucGFuZWwoW3RlY2hub2xvZ3kucm9vdF0sIHtzdHlsZToge2ZvbnRXZWlnaHQ6ICdib2xkJ319KSlcbiAgICAvLyAgICAgLm9uT0soKCkgPT4gcG9zc2libGVUZWNobm9sb2dpZXMgPSBbdGVjaG5vbG9neS52YWx1ZV0pXG4gICAgLy8gICAgIC5vbkNhbmNlbCgoKSA9PiB7XG4gICAgLy8gICAgICAgcG9zc2libGVUZWNobm9sb2dpZXMgPSBbcG9zc2libGVUZWNobm9sb2dpZXNbMF1dO1xuICAgIC8vICAgICAgIGdyb2suc2hlbGwud2FybmluZygnSW5wdXQgc2VxdWVuY2UgaXMgZXhwZWN0ZWQgdG8gYmUgaW4gZm9ybWF0ICcgKyBwb3NzaWJsZVRlY2hub2xvZ2llc1swXSk7XG4gICAgLy8gICAgIH0pXG4gICAgLy8gICAgIC5zaG93KCk7XG4gICAgLy8gfSBlbHNlIGlmIChwb3NzaWJsZVRlY2hub2xvZ2llcy5sZW5ndGggPT0gMClcbiAgICBpZiAocG9zc2libGVUZWNobm9sb2dpZXMubGVuZ3RoID09IDApXG4gICAgICAgIHJldHVybiB7IGluZGV4T2ZGaXJzdE5vdFZhbGlkQ2hhcjogMCwgc3ludGhlc2l6ZXI6IFtwb3NzaWJsZVN5bnRoZXNpemVyc1szXV0sIHRlY2hub2xvZ3k6IG51bGwgfTtcbiAgICBvdXRwdXRJbmRleCA9IDA7XG4gICAgLy8gcG9zc2libGVUZWNobm9sb2dpZXMuZm9yRWFjaCgodGVjaG5vbG9neTogc3RyaW5nKSA9PiB7XG4gICAgLy8gICBjb25zdCBjb2RlcyA9IE9iamVjdC5rZXlzKG1hcFtwb3NzaWJsZVN5bnRoZXNpemVyc1swXV1bdGVjaG5vbG9neV0pO1xuICAgIC8vICAgd2hpbGUgKG91dHB1dEluZGV4IDwgc2VxdWVuY2UubGVuZ3RoKSB7XG4gICAgLy8gICAgIGNvbnN0IG1hdGNoZWRDb2RlID0gY29kZXMuZmluZCgoYykgPT4gYyA9PSBzZXF1ZW5jZS5zbGljZShvdXRwdXRJbmRleCwgb3V0cHV0SW5kZXggKyBjLmxlbmd0aCkpO1xuICAgIC8vICAgICBpZiAobWF0Y2hlZENvZGUgPT0gbnVsbClcbiAgICAvLyAgICAgICBicmVhaztcbiAgICAvLyAgICAgaWYgKCAvLyBmb3IgbWlzdGFrZSBwYXR0ZXJuICdyQUEnXG4gICAgLy8gICAgICAgb3V0cHV0SW5kZXggPiAxICYmXG4gICAgLy8gICAgICAgbnVjbGVvdGlkZXMuaW5jbHVkZXMoc2VxdWVuY2Vbb3V0cHV0SW5kZXhdKSAmJlxuICAgIC8vICAgICAgIGZpcnN0VW5pcXVlQ2hhcmFjdGVycy5pbmNsdWRlcyhzZXF1ZW5jZVtvdXRwdXRJbmRleCAtIDJdKVxuICAgIC8vICAgICApIGJyZWFrO1xuICAgIC8vICAgICBpZiAoIC8vIGZvciBtaXN0YWtlIHBhdHRlcm4gJ0FyQSdcbiAgICAvLyAgICAgICBmaXJzdFVuaXF1ZUNoYXJhY3RlcnMuaW5jbHVkZXMoc2VxdWVuY2Vbb3V0cHV0SW5kZXggKyAxXSkgJiZcbiAgICAvLyAgICAgICBudWNsZW90aWRlcy5pbmNsdWRlcyhzZXF1ZW5jZVtvdXRwdXRJbmRleF0pXG4gICAgLy8gICAgICkge1xuICAgIC8vICAgICAgIG91dHB1dEluZGV4Kys7XG4gICAgLy8gICAgICAgYnJlYWs7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgb3V0cHV0SW5kZXggKz0gbWF0Y2hlZENvZGUubGVuZ3RoO1xuICAgIC8vICAgfVxuICAgIC8vIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIGluZGV4T2ZGaXJzdE5vdFZhbGlkQ2hhcjogaW5kZXhPZkZpcnN0Tm90VmFsaWRDaGFyLFxuICAgICAgICBzeW50aGVzaXplcjogcG9zc2libGVTeW50aGVzaXplcnMsXG4gICAgICAgIHRlY2hub2xvZ3k6IFtwb3NzaWJsZVRlY2hub2xvZ2llc1tvdXRwdXRJbmRleF1dLFxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsQ29kZXNPZlN5bnRoZXNpemVyKHN5bnRoZXNpemVyKSB7XG4gICAgbGV0IGNvZGVzID0gW107XG4gICAgZm9yIChjb25zdCB0ZWNobm9sb2d5IG9mIE9iamVjdC5rZXlzKG1hcFtzeW50aGVzaXplcl0pKVxuICAgICAgICBjb2RlcyA9IGNvZGVzLmNvbmNhdChPYmplY3Qua2V5cyhtYXBbc3ludGhlc2l6ZXJdW3RlY2hub2xvZ3ldKSk7XG4gICAgcmV0dXJuIGNvZGVzLmNvbmNhdChPYmplY3Qua2V5cyhNT0RJRklDQVRJT05TKSkuY29uY2F0KGRlbGltaXRlcik7XG59XG5mdW5jdGlvbiBnZXRMaXN0T2ZQb3NzaWJsZVN5bnRoZXNpemVyc0J5Rmlyc3RNYXRjaGVkQ29kZShzZXF1ZW5jZSkge1xuICAgIGNvbnN0IHN5bnRoZXNpemVycyA9IFtdO1xuICAgIE9iamVjdC5rZXlzKG1hcCkuZm9yRWFjaCgoc3ludGhlc2l6ZXIpID0+IHtcbiAgICAgICAgY29uc3QgY29kZXMgPSBnZXRBbGxDb2Rlc09mU3ludGhlc2l6ZXIoc3ludGhlc2l6ZXIpO1xuICAgICAgICAvL1RPRE86IGdldCBmaXJzdCBub24tZHJvcGRvd24gY29kZSB3aGVuIHRoZXJlIGFyZSB0d28gbW9kaWZpY2F0aW9uc1xuICAgICAgICBsZXQgc3RhcnQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlcXVlbmNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoc2VxdWVuY2VbaV0gPT0gJyknICYmIGkgIT0gc2VxdWVuY2UubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIHN0YXJ0ID0gaSArIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvZGVzLnNvbWUoKHMpID0+IHMgPT0gc2VxdWVuY2Uuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgcy5sZW5ndGgpKSlcbiAgICAgICAgICAgIHN5bnRoZXNpemVycy5wdXNoKHN5bnRoZXNpemVyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc3ludGhlc2l6ZXJzO1xufVxuZnVuY3Rpb24gZ2V0TGlzdE9mUG9zc2libGVUZWNobm9sb2dpZXNCeUZpcnN0TWF0Y2hlZENvZGUoc2VxdWVuY2UsIHN5bnRoZXNpemVyKSB7XG4gICAgY29uc3QgdGVjaG5vbG9naWVzID0gW107XG4gICAgT2JqZWN0LmtleXMobWFwW3N5bnRoZXNpemVyXSkuZm9yRWFjaCgodGVjaG5vbG9neSkgPT4ge1xuICAgICAgICBjb25zdCBjb2RlcyA9IE9iamVjdC5rZXlzKG1hcFtzeW50aGVzaXplcl1bdGVjaG5vbG9neV0pLmNvbmNhdChPYmplY3Qua2V5cyhNT0RJRklDQVRJT05TKSk7XG4gICAgICAgIGlmIChjb2Rlcy5zb21lKChzKSA9PiBzID09IHNlcXVlbmNlLnNsaWNlKDAsIHMubGVuZ3RoKSkpXG4gICAgICAgICAgICB0ZWNobm9sb2dpZXMucHVzaCh0ZWNobm9sb2d5KTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGVjaG5vbG9naWVzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRTZXF1ZW5jZShzZXF1ZW5jZSwgb3V0cHV0KSB7XG4gICAgaWYgKG91dHB1dC5pbmRleE9mRmlyc3ROb3RWYWxpZENoYXIgIT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8vIHR5cGU6ICcnLFxuICAgICAgICAgICAgaW5kZXhPZkZpcnN0Tm90VmFsaWRDaGFyOiBKU09OLnN0cmluZ2lmeShvdXRwdXQpLFxuICAgICAgICAgICAgRXJyb3I6IHVuZGVmaW5lZElucHV0U2VxdWVuY2UsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChvdXRwdXQuc3ludGhlc2l6ZXIuaW5jbHVkZXMoU1lOVEhFU0laRVJTLlJBV19OVUNMRU9USURFUykpIHsgLy8mJiBvdXRwdXQudGVjaG5vbG9neSEuaW5jbHVkZXMoVEVDSE5PTE9HSUVTLkROQSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFNZTlRIRVNJWkVSUy5SQVdfTlVDTEVPVElERVMsXG4gICAgICAgICAgICBOdWNsZW90aWRlczogc2VxdWVuY2UsXG4gICAgICAgICAgICBCaW9TcHJpbmc6IGFzb0dhcG1lcnNOdWNsZW90aWRlc1RvQmlvU3ByaW5nKHNlcXVlbmNlKSxcbiAgICAgICAgICAgIEdDUlM6IGFzb0dhcG1lcnNOdWNsZW90aWRlc1RvR2NycyhzZXF1ZW5jZSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChvdXRwdXQuc3ludGhlc2l6ZXIuaW5jbHVkZXMoU1lOVEhFU0laRVJTLkJJT1NQUklORykgJiYgb3V0cHV0LnRlY2hub2xvZ3kuaW5jbHVkZXMoVEVDSE5PTE9HSUVTLkFTT19HQVBNRVJTKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU1lOVEhFU0laRVJTLkJJT1NQUklORyArICcgJyArIFRFQ0hOT0xPR0lFUy5BU09fR0FQTUVSUyxcbiAgICAgICAgICAgIE51Y2xlb3RpZGVzOiBhc29HYXBtZXJzQmlvU3ByaW5nVG9OdWNsZW90aWRlcyhzZXF1ZW5jZSksXG4gICAgICAgICAgICBCaW9TcHJpbmc6IHNlcXVlbmNlLFxuICAgICAgICAgICAgR0NSUzogYXNvR2FwbWVyc0Jpb1NwcmluZ1RvR2NycyhzZXF1ZW5jZSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChvdXRwdXQuc3ludGhlc2l6ZXIuaW5jbHVkZXMoU1lOVEhFU0laRVJTLkdDUlMpICYmIG91dHB1dC50ZWNobm9sb2d5LmluY2x1ZGVzKFRFQ0hOT0xPR0lFUy5BU09fR0FQTUVSUykpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFNZTlRIRVNJWkVSUy5HQ1JTICsgJyAnICsgVEVDSE5PTE9HSUVTLkFTT19HQVBNRVJTLFxuICAgICAgICAgICAgTnVjbGVvdGlkZXM6IGFzb0dhcG1lcnNHY3JzVG9OdWNsZW90aWRlcyhzZXF1ZW5jZSksXG4gICAgICAgICAgICBCaW9TcHJpbmc6IGFzb0dhcG1lcnNHY3JzVG9CaW9TcHJpbmcoc2VxdWVuY2UpLFxuICAgICAgICAgICAgTWVybWFkZTEyOiBnY3JzVG9NZXJtYWRlMTIoc2VxdWVuY2UpLFxuICAgICAgICAgICAgR0NSUzogc2VxdWVuY2UsXG4gICAgICAgICAgICBMQ01TOiBnY3JzVG9MY21zKHNlcXVlbmNlKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5zeW50aGVzaXplci5pbmNsdWRlcyhTWU5USEVTSVpFUlMuUkFXX05VQ0xFT1RJREVTKSAmJiBvdXRwdXQudGVjaG5vbG9neS5pbmNsdWRlcyhURUNITk9MT0dJRVMuUk5BKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU1lOVEhFU0laRVJTLlJBV19OVUNMRU9USURFUyArICcgJyArIFRFQ0hOT0xPR0lFUy5STkEsXG4gICAgICAgICAgICBOdWNsZW90aWRlczogc2VxdWVuY2UsXG4gICAgICAgICAgICBCaW9TcHJpbmc6IHNpUm5hTnVjbGVvdGlkZVRvQmlvU3ByaW5nU2Vuc2VTdHJhbmQoc2VxdWVuY2UpLFxuICAgICAgICAgICAgQXhvbGFiczogc2lSbmFOdWNsZW90aWRlVG9BeG9sYWJzU2Vuc2VTdHJhbmQoc2VxdWVuY2UpLFxuICAgICAgICAgICAgR0NSUzogc2lSbmFOdWNsZW90aWRlc1RvR2NycyhzZXF1ZW5jZSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChvdXRwdXQuc3ludGhlc2l6ZXIuaW5jbHVkZXMoU1lOVEhFU0laRVJTLkJJT1NQUklORykgJiYgb3V0cHV0LnRlY2hub2xvZ3kuaW5jbHVkZXMoVEVDSE5PTE9HSUVTLlNJX1JOQSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFNZTlRIRVNJWkVSUy5CSU9TUFJJTkcgKyAnICcgKyBURUNITk9MT0dJRVMuU0lfUk5BLFxuICAgICAgICAgICAgTnVjbGVvdGlkZXM6IHNpUm5hQmlvU3ByaW5nVG9OdWNsZW90aWRlcyhzZXF1ZW5jZSksXG4gICAgICAgICAgICBCaW9TcHJpbmc6IHNlcXVlbmNlLFxuICAgICAgICAgICAgQXhvbGFiczogc2lSbmFCaW9TcHJpbmdUb0F4b2xhYnMoc2VxdWVuY2UpLFxuICAgICAgICAgICAgR0NSUzogc2lSbmFCaW9TcHJpbmdUb0djcnMoc2VxdWVuY2UpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAob3V0cHV0LnN5bnRoZXNpemVyLmluY2x1ZGVzKFNZTlRIRVNJWkVSUy5BWE9MQUJTKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU1lOVEhFU0laRVJTLkFYT0xBQlMgKyAnICcgKyBURUNITk9MT0dJRVMuU0lfUk5BLFxuICAgICAgICAgICAgTnVjbGVvdGlkZXM6IHNpUm5hQXhvbGFic1RvTnVjbGVvdGlkZXMoc2VxdWVuY2UpLFxuICAgICAgICAgICAgQmlvU3ByaW5nOiBzaVJuYUF4b2xhYnNUb0Jpb1NwcmluZyhzZXF1ZW5jZSksXG4gICAgICAgICAgICBBeG9sYWJzOiBzZXF1ZW5jZSxcbiAgICAgICAgICAgIEdDUlM6IHNpUm5hQXhvbGFic1RvR2NycyhzZXF1ZW5jZSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChvdXRwdXQuc3ludGhlc2l6ZXIuaW5jbHVkZXMoU1lOVEhFU0laRVJTLkdDUlMpICYmIG91dHB1dC50ZWNobm9sb2d5LmluY2x1ZGVzKFRFQ0hOT0xPR0lFUy5TSV9STkEpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBTWU5USEVTSVpFUlMuR0NSUyArICcgJyArIFRFQ0hOT0xPR0lFUy5TSV9STkEsXG4gICAgICAgICAgICBOdWNsZW90aWRlczogc2lSbmFHY3JzVG9OdWNsZW90aWRlcyhzZXF1ZW5jZSksXG4gICAgICAgICAgICBCaW9TcHJpbmc6IHNpUm5hR2Nyc1RvQmlvU3ByaW5nKHNlcXVlbmNlKSxcbiAgICAgICAgICAgIEF4b2xhYnM6IHNpUm5hR2Nyc1RvQXhvbGFicyhzZXF1ZW5jZSksXG4gICAgICAgICAgICBNTTEyOiBnY3JzVG9NZXJtYWRlMTIoc2VxdWVuY2UpLFxuICAgICAgICAgICAgR0NSUzogc2VxdWVuY2UsXG4gICAgICAgICAgICBMQ01TOiBnY3JzVG9MY21zKHNlcXVlbmNlKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5zeW50aGVzaXplci5pbmNsdWRlcyhTWU5USEVTSVpFUlMuR0NSUykpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFNZTlRIRVNJWkVSUy5HQ1JTLFxuICAgICAgICAgICAgTnVjbGVvdGlkZXM6IGdjcnNUb051Y2xlb3RpZGVzKHNlcXVlbmNlKSxcbiAgICAgICAgICAgIEdDUlM6IHNlcXVlbmNlLFxuICAgICAgICAgICAgTWVybWFkZTEyOiBnY3JzVG9NZXJtYWRlMTIoc2VxdWVuY2UpLFxuICAgICAgICAgICAgTENNUzogZ2Nyc1RvTGNtcyhzZXF1ZW5jZSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChvdXRwdXQuc3ludGhlc2l6ZXIuaW5jbHVkZXMoU1lOVEhFU0laRVJTLk1FUk1BREVfMTIpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBTWU5USEVTSVpFUlMuTUVSTUFERV8xMixcbiAgICAgICAgICAgIE51Y2xlb3RpZGVzOiBub1RyYW5zbGF0aW9uVGFibGVBdmFpbGFibGUsXG4gICAgICAgICAgICBHQ1JTOiBub1RyYW5zbGF0aW9uVGFibGVBdmFpbGFibGUsXG4gICAgICAgICAgICBNZXJtYWRlMTI6IHNlcXVlbmNlLFxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiB1bmRlZmluZWRJbnB1dFNlcXVlbmNlLFxuICAgICAgICBOdWNsZW90aWRlczogdW5kZWZpbmVkSW5wdXRTZXF1ZW5jZSxcbiAgICB9O1xufVxuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBjYXRlZ29yeSwgZXhwZWN0LCB0ZXN0IH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdGVzdCc7XG5pbXBvcnQgeyBzZXF1ZW5jZVRvU21pbGVzIH0gZnJvbSAnLi4vc3RydWN0dXJlcy13b3Jrcy9mcm9tLW1vbm9tZXJzJztcbmltcG9ydCB7IFNZTlRIRVNJWkVSUyB9IGZyb20gJy4uL3N0cnVjdHVyZXMtd29ya3MvbWFwJztcbmNhdGVnb3J5KCdzZXF1ZW5jZS10cmFuc2xhdG9yJywgKCkgPT4ge1xuICAgIHRlc3QoJ0FHR1RDQ1RDVFRHQUNUVEFHR0NDJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilDW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUMoQylDKD1PKU5DMig9TykpQ1tDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpQ1tDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpQ1tDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUMoQylDKD1PKU5DMig9TykpQ1tDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpQ1tDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUMoQylDKD1PKU5DMig9TykpQ1tDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUMoQylDKD1PKU5DMig9TykpQ1tDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilDW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlDW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9QyhDKUMoPU8pTkMyKD1PKSlDW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9QyhDKUMoPU8pTkMyKD1PKSlDW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilDW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpQ1tDQEBIXTFPUCg9TykoTylPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpQ1tDQEBIXTFPJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJ0FHR1RDQ1RDVFRHQUNUVEFHR0NDJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5SQVdfTlVDTEVPVElERVMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ2ludmFiYXNpYy9nYWxuYWMxJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NDKE8pQ05DKD1PKUNDQ0MoPU8pTkMoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAgICAgICAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAgICAgICAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnKGludmFiYXNpYylzZ2coaW52YWJhc2ljKShHYWxOQWMtMi1KTkopJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdpbnZhYmFzaWMvZ2FsbmFjMicsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9ICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ09QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ09QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DQyhPKUNOQyg9TylDQ0NDKD1PKU5DKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJyhpbnZhYmFzaWMpc2dzZyhpbnZhYmFzaWMpKEdhbE5BYy0yLUpOSiknLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ2ludmFiYXNpYy9nYWxuYWMzJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NDKE8pQ05DKD1PKUNDQ0MoPU8pTkMoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAgICAgICAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAgICAgICAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnKGludmFiYXNpYylzZ2dzKGludmFiYXNpYykoR2FsTkFjLTItSk5KKScsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnaW52YWJhc2ljL2dhbG5hYzQnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ0MoTylDTkMoPU8pQ0NDQyg9TylOQyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKSc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKXNnZyhpbnZhYmFzaWMpcyhHYWxOQWMtMi1KTkopJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCd1c0NmQ2ZVZkdmQWYnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU8nO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygndXNDZkNmVWZHZkFmJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCd1c0Fmc3VzZ3Nnc2cnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJ3VzQWZzdXNnc2dzZycsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnVWZVZlVmc0Nmc3VhY2cnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xTyc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCdVZlVmVWZzQ2ZzdWFjZycsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnc3VzdXN1c2F1YXN1JywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09QKD1PKShTKU9DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xTyc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCdzdXN1c3VzYXVhc3UnLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ0NmR2ZDZnNHZnNDZicsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU8nO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnQ2ZHZkNmc0dmc0NmJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdhY2FjYWNzYWNzYWMnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJ2FjYWNhY3NhY3NhYycsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnY2NjZ2dndXN1ZycsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJ2NjY2dnZ3VzdWcnLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ1VmQWZDZkdmR2ZDZkFmVWYnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJ1VmQWZDZkdmR2ZDZkFmVWYnLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJyhpbnZhYmFzaWMpc3VjdUNmdVVmJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU8nO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnKGludmFiYXNpYylzdWN1Q2Z1VWYnLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJyhpbnZhYmFzaWMpc0FmZ2N1Z1VmJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU8nO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnKGludmFiYXNpYylzQWZnY3VnVWYnLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJyhpbnZhYmFzaWMpY3VDZnVVZnNjJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU8nO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnKGludmFiYXNpYyljdUNmdVVmc2MnLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJyhpbnZhYmFzaWMpc2N1c3VzdShHYWxOQWMtMi1KTkopJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ0MoTylDTkMoPU8pQ0NDQyg9TylOQyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKSc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKXNjdXN1c3UoR2FsTkFjLTItSk5KKScsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnKGludmFiYXNpYyl1c0Fmc3VjdUNmdVVmQWZnY3VnVWZnQ2ZhY3VzdXN1JywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xTyc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKXVzQWZzdWN1Q2Z1VWZBZmdjdWdVZmdDZmFjdXN1c3UnLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJyhpbnZhYmFzaWMpYXNhY2dHZnVHZkNmQWZhY3VjdWF1dWNhJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnKGludmFiYXNpYylhc2FjZ0dmdUdmQ2ZBZmFjdWN1YXV1Y2EnLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJyhpbnZhYmFzaWMpc2NzZ2d1R2ZjQWZBZkNmdWN1YXV1Y3VnYScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9ICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ09QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJyhpbnZhYmFzaWMpc2NzZ2d1R2ZjQWZBZkNmdWN1YXV1Y3VnYScsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnKGludmFiYXNpYylzY3NhYWNVZmNVZkFmVWZ1Y3VnZ2FjdXVhJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnKGludmFiYXNpYylzY3NhYWNVZmNVZkFmVWZ1Y3VnZ2FjdXVhJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCcoaW52YWJhc2ljKXNhc2FjdUNmdUFmVWZVZmN1Z2dhY3V1dWEnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xTyc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKXNhc2FjdUNmdUFmVWZVZmN1Z2dhY3V1dWEnLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJyhpbnZhYmFzaWMpdXNBZnNjdWcoaW52YWJhc2ljKShHYWxOQWMtMi1KTkopJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ0MoTylDTkMoPU8pQ0NDQyg9TylOQyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKSc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKXVzQWZzY3VnKGludmFiYXNpYykoR2FsTkFjLTItSk5KKScsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnKGludmFiYXNpYylzYXN1YWFDZmNVZihHYWxOQWMtMi1KTkopJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NDKE8pQ05DKD1PKUNDQ0MoPU8pTkMoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAgICAgICAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAgICAgICAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnKGludmFiYXNpYylzYXN1YWFDZmNVZihHYWxOQWMtMi1KTkopJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCcoaW52YWJhc2ljKXNhc3VhYUNmY1VmQ2ZVZnVndWFndXVhdWEoR2FsTkFjLTItSk5KKScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9ICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ09QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ0MoTylDTkMoPU8pQ0NDQyg9TylOQyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKSc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKXNhc3VhYUNmY1VmQ2ZVZnVndWFndXVhdWEoR2FsTkFjLTItSk5KKScsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnKGludmFiYXNpYylzY3NhdWNhY2d1VWZHZkNmYWdjY2d1Y3V1YShpbnZhYmFzaWMpKEdhbE5BYy0yLUpOSiknLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ09QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DQyhPKUNOQyg9TylDQ0NDKD1PKU5DKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJyhpbnZhYmFzaWMpc2NzYXVjYWNndVVmR2ZDZmFnY2NndWN1dWEoaW52YWJhc2ljKShHYWxOQWMtMi1KTkopJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCcoaW52YWJhc2ljKXN1c2d1dVVmZ0NmQ2ZVZmFjYXVjdWFjdWEoR2FsTkFjLTItSk5KKScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9ICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ09QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ0MoTylDTkMoPU8pQ0NDQyg9TylOQyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKSc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKXN1c2d1dVVmZ0NmQ2ZVZmFjYXVjdWFjdWEoR2FsTkFjLTItSk5KKScsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gREc7IiwibW9kdWxlLmV4cG9ydHMgPSBncm9rOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBydW5UZXN0cywgdGVzdHMgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90ZXN0JztcbmltcG9ydCAnLi90ZXN0cy9zbWlsZXMtdGVzdHMnO1xuZXhwb3J0IGNvbnN0IF9wYWNrYWdlID0gbmV3IERHLlBhY2thZ2UoKTtcbmV4cG9ydCB7IHRlc3RzIH07XG4vL25hbWU6IHRlc3Rcbi8vb3V0cHV0OiBkYXRhZnJhbWUgcmVzdWx0XG5leHBvcnQgZnVuY3Rpb24gdGVzdCgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBkYXRhID0geWllbGQgcnVuVGVzdHMoKTtcbiAgICAgICAgcmV0dXJuIERHLkRhdGFGcmFtZS5mcm9tT2JqZWN0cyhkYXRhKTtcbiAgICB9KTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==
|
|
2655
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS10ZXN0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaUJBQWlCLFNBQUksSUFBSSxTQUFJO0FBQzdCLDRCQUE0QiwrREFBK0QsaUJBQWlCO0FBQzVHO0FBQ0Esb0NBQW9DLE1BQU0sK0JBQStCLFlBQVk7QUFDckYsbUNBQW1DLE1BQU0sbUNBQW1DLFlBQVk7QUFDeEYsZ0NBQWdDO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQzBDO0FBQ25DO0FBQ0E7QUFDQTtBQUNQO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiwrQkFBK0I7QUFDcEQ7QUFDQTtBQUNBLENBQUMsd0JBQXdCO0FBQ2xCO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RUFBd0U7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsOERBQW9CO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRCw4REFBb0IsQ0FBQztBQUNwRjtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0Esd0JBQXdCLGNBQWM7QUFDdEM7QUFDQSxnQkFBZ0IscUVBQTJCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBLDJCQUEyQixTQUFTLFVBQVUsT0FBTztBQUNyRDtBQUNPO0FBQ1A7QUFDQTtBQUNBLDBCQUEwQixTQUFTLFFBQVEsUUFBUSxlQUFlLFVBQVU7QUFDNUU7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLGNBQWM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qix3RUFBd0U7QUFDcEc7QUFDQSw0QkFBNEIseUVBQXlFO0FBQ3JHO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ087QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsMkNBQTJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3hKUjtBQUNHO0FBQ3RDO0FBQ0EsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUNsQjtBQUNQLGVBQWUsOERBQW9CLENBQUMsNENBQVU7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0RBQXdELG1CQUFtQjtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUNsQjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDbEI7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUNsQjtBQUNQLGtCQUFrQjtBQUNsQjtBQUNBLGdHQUFnRyxnQkFBZ0I7QUFDaEg7QUFDQTtBQUNBLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDbEI7QUFDUDtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDbEI7QUFDUCxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLDJIQUEySCxnQkFBZ0I7QUFDM0k7QUFDQTtBQUNBLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDbEI7QUFDUCxrQkFBa0I7QUFDbEI7QUFDQSxpR0FBaUcsZ0JBQWdCO0FBQ2pIO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ2xCO0FBQ1Asa0JBQWtCO0FBQ2xCO0FBQ0Esc0dBQXNHLGdCQUFnQjtBQUN0SDtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUNsQjtBQUNQLGtCQUFrQjtBQUNsQjtBQUNBLHNHQUFzRyxnQkFBZ0I7QUFDdEg7QUFDQTtBQUNBLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDbEI7QUFDUCxrQkFBa0I7QUFDbEI7QUFDQSxzR0FBc0csZ0JBQWdCO0FBQ3RIO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ2xCO0FBQ1Asa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSx5R0FBeUcsZ0JBQWdCO0FBQ3pIO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ2xCO0FBQ1Asa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSx5R0FBeUcsZ0JBQWdCO0FBQ3pIO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ2xCO0FBQ1Asa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSx5R0FBeUcsZ0JBQWdCO0FBQ3pIO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ2xCO0FBQ1Asa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSw4R0FBOEcsZ0JBQWdCO0FBQzlIO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ2xCO0FBQ1Asa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSw4R0FBOEcsZ0JBQWdCO0FBQzlIO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ2xCO0FBQ1Asa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSw4R0FBOEcsZ0JBQWdCO0FBQzlIO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ2xCO0FBQ1A7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUNsQjtBQUNQO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDbEI7QUFDUDtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBLGdDQUFnQztBQUNoQztBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUNsQjtBQUNQO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ2xCO0FBQ1Asa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLG1KQUFtSixnQkFBZ0I7QUFDbks7QUFDQTtBQUNBLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDbEI7QUFDUCxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0EsbUpBQW1KLGdCQUFnQjtBQUNuSzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzdSOEc7QUFDckQ7QUFDQztBQUNuRDtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLCtDQUFhO0FBQy9DLDJDQUEyQywyQ0FBUztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHNCQUFzQjtBQUMxQztBQUNBO0FBQ0EsZ0JBQWdCLCtDQUFhLHVCQUF1QiwrQ0FBYTtBQUNqRSw2QkFBNkIsNERBQTBCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsNERBQTBCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdUVBQWlCO0FBQzVCO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQywrQ0FBYTtBQUMvQywyQ0FBMkMsMkNBQVM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixzQkFBc0I7QUFDMUM7QUFDQTtBQUNBLGdCQUFnQiwrQ0FBYSx1QkFBdUIsNERBQTBCO0FBQzlFLGdCQUFnQiwrQ0FBYSxzQkFBc0IsNERBQTBCO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLDREQUEwQjtBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsbUVBQWlDO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLHFDQUFHO0FBQ2pELGlEQUFpRCxxQ0FBRztBQUNwRCwrQ0FBK0MscUNBQUc7QUFDbEQsZ0NBQWdDLHFDQUFHO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLHFDQUFHO0FBQ2hELDJDQUEyQyxxQ0FBRztBQUM5Qyw0QkFBNEIscUNBQUc7QUFDL0I7QUFDQTtBQUNBLFFBQVEsMkNBQVM7QUFDakI7QUFDQSxtQkFBbUIsc0VBQWU7QUFDbEMsb0NBQW9DLHlEQUF1QjtBQUMzRCxtQkFBbUIscUNBQUcsQ0FBQyx5REFBdUIsRUFBRSxxREFBbUI7QUFDbkUseUNBQXlDLHNEQUFvQjtBQUM3RCxtQkFBbUIscUNBQUcsQ0FBQyxzREFBb0IsRUFBRSxxREFBbUI7QUFDaEU7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLDZCQUE2QjtBQUNyRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2R3NDO0FBQzRCO0FBQzNELG9CQUFvQjtBQUNwQjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDTztBQUNBO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Qsb0JBQW9CO0FBQ3BCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwrRUFBd0I7QUFDaEQscUJBQXFCLDhEQUFvQjtBQUNsQztBQUNQO0FBQ0EsNENBQTRDOzs7Ozs7Ozs7Ozs7Ozs7O0FDdnRCNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQSxvQkFBb0IsNEJBQTRCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isc0JBQXNCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLDBCQUEwQjtBQUN0RDtBQUNBLDRCQUE0QiwwQkFBMEI7QUFDdEQ7QUFDQTtBQUNBLG9FQUFvRTtBQUNwRTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsbUJBQW1CO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0VBQW9FO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixtQkFBbUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvRkFBb0Y7QUFDcEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsdUJBQXVCO0FBQzlDO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxvQkFBb0IsZ0JBQWdCO0FBQ3BDO0FBQ0E7QUFDQSx3QkFBd0Isb0JBQW9CO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixXQUFXO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsV0FBVztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsV0FBVztBQUMvQjtBQUNBO0FBQ0EsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQSxvQkFBb0IsV0FBVztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFdBQVc7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFdBQVc7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFdBQVc7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBLG9CQUFvQixXQUFXO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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Q0wsSUFBSSx3RUFBSTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDBFQUFNLENBQUMsaUZBQWdCLDhEQUE4RCx1RUFBb0I7QUFDakgsS0FBSztBQUNMLENBQUM7Ozs7Ozs7Ozs7O0FDeGFEOzs7Ozs7Ozs7O0FDQUE7Ozs7OztVQ0FBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7Ozs7O1dDdEJBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxpQ0FBaUMsV0FBVztXQUM1QztXQUNBOzs7OztXQ1BBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EseUNBQXlDLHdDQUF3QztXQUNqRjtXQUNBO1dBQ0E7Ozs7O1dDUEE7Ozs7O1dDQUE7V0FDQTtXQUNBO1dBQ0EsdURBQXVELGlCQUFpQjtXQUN4RTtXQUNBLGdEQUFnRCxhQUFhO1dBQzdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ05BLGlCQUFpQixTQUFJLElBQUksU0FBSTtBQUM3Qiw0QkFBNEIsK0RBQStELGlCQUFpQjtBQUM1RztBQUNBLG9DQUFvQyxNQUFNLCtCQUErQixZQUFZO0FBQ3JGLG1DQUFtQyxNQUFNLG1DQUFtQyxZQUFZO0FBQ3hGLGdDQUFnQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNzQztBQUMrQjtBQUN2QztBQUN2QixxQkFBcUIsb0RBQVU7QUFDckI7QUFDakI7QUFDQTtBQUNPO0FBQ1A7QUFDQSwyQkFBMkIsNEVBQVE7QUFDbkMsZUFBZSxrRUFBd0I7QUFDdkMsS0FBSztBQUNMIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3Rlc3QuanMiLCJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yLy4vc3JjL3N0cnVjdHVyZXMtd29ya3MvY29udmVydGVycy50cyIsIndlYnBhY2s6Ly9zZXF1ZW5jZXRyYW5zbGF0b3IvLi9zcmMvc3RydWN0dXJlcy13b3Jrcy9mcm9tLW1vbm9tZXJzLnRzIiwid2VicGFjazovL3NlcXVlbmNldHJhbnNsYXRvci8uL3NyYy9zdHJ1Y3R1cmVzLXdvcmtzL21hcC50cyIsIndlYnBhY2s6Ly9zZXF1ZW5jZXRyYW5zbGF0b3IvLi9zcmMvc3RydWN0dXJlcy13b3Jrcy9tb2wtdHJhbnNmb3JtYXRpb25zLnRzIiwid2VicGFjazovL3NlcXVlbmNldHJhbnNsYXRvci8uL3NyYy9zdHJ1Y3R1cmVzLXdvcmtzL3NlcXVlbmNlLWNvZGVzLXRvb2xzLnRzIiwid2VicGFjazovL3NlcXVlbmNldHJhbnNsYXRvci8uL3NyYy90ZXN0cy9zbWlsZXMtdGVzdHMudHMiLCJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yL2V4dGVybmFsIHZhciBcIkRHXCIiLCJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yL2V4dGVybmFsIHZhciBcImdyb2tcIiIsIndlYnBhY2s6Ly9zZXF1ZW5jZXRyYW5zbGF0b3Ivd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL3NlcXVlbmNldHJhbnNsYXRvci93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vc2VxdWVuY2V0cmFuc2xhdG9yLy4vc3JjL3BhY2thZ2UtdGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSBcImRhdGFncm9rLWFwaS9ncm9rXCI7XG5leHBvcnQgbGV0IHRlc3RzID0ge307XG5leHBvcnQgbGV0IGN1cnJlbnRDYXRlZ29yeTtcbmV4cG9ydCB2YXIgYXNzdXJlO1xuKGZ1bmN0aW9uIChhc3N1cmUpIHtcbiAgICBmdW5jdGlvbiBub3ROdWxsKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgYCR7bmFtZSA9PSBudWxsID8gJ1ZhbHVlJyA6IG5hbWV9IG5vdCBkZWZpbmVkYDtcbiAgICB9XG4gICAgYXNzdXJlLm5vdE51bGwgPSBub3ROdWxsO1xufSkoYXNzdXJlIHx8IChhc3N1cmUgPSB7fSkpO1xuZXhwb3J0IGNsYXNzIFRlc3Qge1xuICAgIGNvbnN0cnVjdG9yKGNhdGVnb3J5LCBuYW1lLCB0ZXN0LCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDogKG9wdGlvbnMgPSB7fSk7XG4gICAgICAgIChfYSA9IG9wdGlvbnMudGltZW91dCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKG9wdGlvbnMudGltZW91dCA9IDMwMDAwKTtcbiAgICAgICAgKF9iID0gb3B0aW9ucy51bmhhbmRsZWRFeGNlcHRpb25UaW1lb3V0KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAob3B0aW9ucy51bmhhbmRsZWRFeGNlcHRpb25UaW1lb3V0ID0gMjAwMCk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMudGVzdCA9ICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb2suc2hlbGwubGFzdEVycm9yID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHlpZWxkIHRlc3QoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoISh5aWVsZCBhc3NlcnROb0Vycm9yKG9wdGlvbnMudW5oYW5kbGVkRXhjZXB0aW9uVGltZW91dCkpKVxuICAgICAgICAgICAgICAgICAgICByZWplY3QoYFVuaGFuZGxlZCBleGNlcHRpb24gZHVyaW5nIHRlc3Q6ICR7Z3Jvay5zaGVsbC5sYXN0RXJyb3J9YCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gdGVzdChuYW1lLCB0ZXN0LCBvcHRpb25zKSB7XG4gICAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgICAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gICAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPT0gdW5kZWZpbmVkKVxuICAgICAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzID0gW107XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cy5wdXNoKG5ldyBUZXN0KGN1cnJlbnRDYXRlZ29yeSwgbmFtZSwgdGVzdCwgb3B0aW9ucykpO1xufVxuLyoqIEF3YWl0cyBmb3IgYSB3aGlsZSBjaGVja2luZyB0aGUgZXJyb3Igc3RhdHVzIG9mIHRoZSBwbGF0Zm9ybSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydE5vRXJyb3IobXMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1zIC8gNTAwOyArK2kpIHtcbiAgICAgICAgICAgIHlpZWxkIGRlbGF5KDUwMCk7XG4gICAgICAgICAgICBpZiAoZ3Jvay5zaGVsbC5sYXN0RXJyb3IubGVuZ3RoICE9PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbn1cbi8qKiBUZXN0cyB0d28gb2JqZWN0cyBmb3IgZXF1YWxpdHksIHRocm93cyBhbiBleGNlcHRpb24gaWYgdGhleSBhcmUgbm90IGVxdWFsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdChhY3R1YWwsIGV4cGVjdGVkKSB7XG4gICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpXG4gICAgICAgIHRocm93IGBFeHBlY3RlZCBcIiR7ZXhwZWN0ZWR9XCIsIGdvdCBcIiR7YWN0dWFsfVwiYDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RGbG9hdChhY3R1YWwsIGV4cGVjdGVkLCB0b2xlcmFuY2UgPSAwLjAwMSkge1xuICAgIGNvbnN0IGFyZUVxdWFsID0gTWF0aC5hYnMoYWN0dWFsIC0gZXhwZWN0ZWQpIDwgMC4wMDE7XG4gICAgaWYgKCFhcmVFcXVhbClcbiAgICAgICAgdGhyb3cgYEV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBnb3QgJHthY3R1YWx9ICh0b2xlcmFuY2UgPSAke3RvbGVyYW5jZX0pYDtcbn1cbi8qKiBEZWZpbmVzIGEgdGVzdCBzdWl0ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXRlZ29yeShjYXRlZ29yeSwgdGVzdHMpIHtcbiAgICBjdXJyZW50Q2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0ZXN0cygpO1xufVxuLyoqIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZShiZWZvcmUpIHtcbiAgICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmJlZm9yZSA9IGJlZm9yZTtcbn1cbi8qKiBEZWZpbmVzIGEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFmdGVyKGFmdGVyKSB7XG4gICAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgICAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5hZnRlciA9IGFmdGVyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJ1blRlc3RzKG9wdGlvbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGVzdHMpKSB7XG4gICAgICAgICAgICBpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXRlZ29yeSkgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZXkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXRlZ29yeS50b0xvd2VyQ2FzZSgpKSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5iZWZvcmUpXG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHZhbHVlLmJlZm9yZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5iZWZvcmVTdGF0dXMgPSB4LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdCA9IChfYSA9IHZhbHVlLnRlc3RzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICAgICAgICAgIGxldCByZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKHlpZWxkIGV4ZWNUZXN0KHRbaV0sIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy50ZXN0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZGF0YSA9ICh5aWVsZCBQcm9taXNlLmFsbChyZXMpKS5maWx0ZXIoKGQpID0+IGQucmVzdWx0ICE9ICdza2lwcGVkJyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5hZnRlcilcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgdmFsdWUuYWZ0ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoICh4KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuYWZ0ZXJTdGF0dXMgPSB4LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWUuYWZ0ZXJTdGF0dXMpXG4gICAgICAgICAgICAgICAgZGF0YS5wdXNoKHsgY2F0ZWdvcnk6IGtleSwgbmFtZTogJ2luaXQnLCByZXN1bHQ6IHZhbHVlLmFmdGVyU3RhdHVzLCBzdWNjZXNzOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5iZWZvcmVTdGF0dXMpXG4gICAgICAgICAgICAgICAgZGF0YS5wdXNoKHsgY2F0ZWdvcnk6IGtleSwgbmFtZTogJ2luaXQnLCByZXN1bHQ6IHZhbHVlLmJlZm9yZVN0YXR1cywgc3VjY2VzczogZmFsc2UgfSk7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goLi4uZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBleGVjVGVzdCh0LCBwcmVkaWNhdGUpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAocHJlZGljYXRlICE9IHVuZGVmaW5lZCAmJiAoIXQubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocHJlZGljYXRlLnRvTG93ZXJDYXNlKCkpKSlcbiAgICAgICAgICAgICAgICByID0geyBzdWNjZXNzOiB0cnVlLCByZXN1bHQ6ICdza2lwcGVkJyB9O1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHIgPSB7IHN1Y2Nlc3M6IHRydWUsIHJlc3VsdDogKF9hID0geWllbGQgdC50ZXN0KCkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdPSycgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoeCkge1xuICAgICAgICAgICAgciA9IHsgc3VjY2VzczogZmFsc2UsIHJlc3VsdDogeC50b1N0cmluZygpIH07XG4gICAgICAgIH1cbiAgICAgICAgci5jYXRlZ29yeSA9IHQuY2F0ZWdvcnk7XG4gICAgICAgIHIubmFtZSA9IHQubmFtZTtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZGVsYXkobXMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgbXMpKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRHVnpkQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkluUmxjM1F1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPenM3TzBGQlFVRXNUMEZCVHl4TFFVRkxMRWxCUVVrc1RVRkJUU3h0UWtGQmJVSXNRMEZCUXp0QlFVVXhReXhOUVVGTkxFTkJRVU1zU1VGQlNTeExRVUZMTEVkQlFUaEpMRVZCUVVVc1EwRkJRenRCUVVWcVN5eE5RVUZOTEVOQlFVTXNTVUZCU1N4bFFVRjFRaXhEUVVGRE8wRkJSVzVETEUxQlFVMHNTMEZCVnl4TlFVRk5MRU5CVFhSQ08wRkJUa1FzVjBGQmFVSXNUVUZCVFR0SlFVVnlRaXhUUVVGblFpeFBRVUZQTEVOQlFVTXNTMEZCVlN4RlFVRkZMRWxCUVdFN1VVRkRMME1zU1VGQlNTeExRVUZMTEVsQlFVa3NTVUZCU1R0WlFVTm1MRTFCUVUwc1IwRkJSeXhKUVVGSkxFbEJRVWtzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzWTBGQll5eERRVUZETzBsQlEzcEVMRU5CUVVNN1NVRklaU3hqUVVGUExGVkJSM1JDTEVOQlFVRTdRVUZEU0N4RFFVRkRMRVZCVG1kQ0xFMUJRVTBzUzBGQlRpeE5RVUZOTEZGQlRYUkNPMEZCVDBRc1RVRkJUU3hQUVVGUExFbEJRVWs3U1VGTlppeFpRVUZaTEZGQlFXZENMRVZCUVVVc1NVRkJXU3hGUVVGRkxFbEJRWGRDTEVWQlFVVXNUMEZCY1VJN08xRkJRM3BHTEVsQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1VVRkJVU3hEUVVGRE8xRkJRM3BDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRMnBDTEU5QlFVOHNZVUZCVUN4UFFVRlBMR05CUVZBc1QwRkJUeXhKUVVGUUxFOUJRVThzUjBGQlN5eEZRVUZGTEVWQlFVTTdVVUZEWml4TlFVRkJMRTlCUVU4c1EwRkJReXhQUVVGUExHOURRVUZtTEU5QlFVOHNRMEZCUXl4UFFVRlBMRWRCUVVzc1MwRkJTeXhGUVVGRE8xRkJRekZDTEUxQlFVRXNUMEZCVHl4RFFVRkRMSGxDUVVGNVFpeHZRMEZCYWtNc1QwRkJUeXhEUVVGRExIbENRVUY1UWl4SFFVRkxMRWxCUVVrc1JVRkJRenRSUVVNelF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRTlCUVU4c1EwRkJRenRSUVVOMlFpeEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRWRCUVhWQ0xFVkJRVVU3V1VGRGJrTXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhEUVVGUExFOUJRVThzUlVGQlJTeE5RVUZOTEVWQlFVVXNSVUZCUlR0blFrRkRNME1zU1VGQlNTeE5RVUZOTEVkQlFVY3NSVUZCUlN4RFFVRkRPMmRDUVVOb1FpeEpRVUZKTzI5Q1FVTkdMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVTBGQlV5eEhRVUZITEVWQlFVVXNRMEZCUXp0dlFrRkRNVUlzVFVGQlRTeEhRVUZITEUxQlFVMHNTVUZCU1N4RlFVRkZMRU5CUVVNN2FVSkJRM1pDTzJkQ1FVRkRMRTlCUVU4c1EwRkJUU3hGUVVGRk8yOUNRVU5tTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRwUWtGRFdEdG5Ra0ZEUkN4SlFVRkpMRU5CUVVNc1EwRkJReXhOUVVGTkxHRkJRV0VzUTBGQlF5eFBRVUZSTEVOQlFVTXNlVUpCUVRCQ0xFTkJRVU1zUTBGQlF6dHZRa0ZETjBRc1RVRkJUU3hEUVVGRExHOURRVUZ2UXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZETEVOQlFVTTdaMEpCUTNKRkxFOUJRVThzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0WlFVTnNRaXhEUVVGRExFTkJRVUVzUTBGQlF5eERRVUZETzFGQlEwd3NRMEZCUXl4RFFVRkJMRU5CUVVNN1NVRkRTaXhEUVVGRE8wTkJRMFk3UVVGRlJDeE5RVUZOTEZWQlFWVXNTVUZCU1N4RFFVRkRMRWxCUVZrc1JVRkJSU3hKUVVGM1FpeEZRVUZGTEU5QlFYRkNPMGxCUTJoR0xFbEJRVWtzUzBGQlN5eERRVUZETEdWQlFXVXNRMEZCUXl4SlFVRkpMRk5CUVZNN1VVRkRja01zUzBGQlN5eERRVUZETEdWQlFXVXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVVNNVFpeEpRVUZKTEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJReXhMUVVGTExFbEJRVWtzVTBGQlV6dFJRVU16UXl4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zUzBGQlN5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTndReXhMUVVGTExFTkJRVU1zWlVGQlpTeERRVUZETEVOQlFVTXNTMEZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFbEJRVWtzUTBGQlF5eGxRVUZsTEVWQlFVVXNTVUZCU1N4RlFVRkZMRWxCUVVrc1JVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEzSkdMRU5CUVVNN1FVRkZSQ3h0UlVGQmJVVTdRVUZEYmtVc1RVRkJUU3hWUVVGblFpeGhRVUZoTEVOQlFVTXNSVUZCVlRzN1VVRkROVU1zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eEhRVUZITEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVN1dVRkRha01zVFVGQlRTeExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRha0lzU1VGQlNTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFdEJRVXNzUTBGQlF6dG5Ra0ZEYmtNc1QwRkJUeXhMUVVGTExFTkJRVU03VTBGRGFFSTdVVUZEUkN4UFFVRlBMRWxCUVVrc1EwRkJRenRKUVVOa0xFTkJRVU03UTBGQlFUdEJRVVZFTEdsR1FVRnBSanRCUVVOcVJpeE5RVUZOTEZWQlFWVXNUVUZCVFN4RFFVRkRMRTFCUVZjc1JVRkJSU3hSUVVGaE8wbEJReTlETEVsQlFVa3NUVUZCVFN4TFFVRkxMRkZCUVZFN1VVRkRja0lzVFVGQlRTeGhRVUZoTEZGQlFWRXNWMEZCVnl4TlFVRk5MRWRCUVVjc1EwRkJRenRCUVVOd1JDeERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMRmRCUVZjc1EwRkJReXhOUVVGakxFVkJRVVVzVVVGQlowSXNSVUZCUlN4VFFVRlRMRWRCUVVjc1MwRkJTenRKUVVNM1JTeE5RVUZOTEZGQlFWRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUjBGQlJ5eFJRVUZSTEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNN1NVRkRja1FzU1VGQlNTeERRVUZETEZGQlFWRTdVVUZEV0N4TlFVRk5MRmxCUVZrc1VVRkJVU3hUUVVGVExFMUJRVTBzYVVKQlFXbENMRk5CUVZNc1IwRkJSeXhEUVVGRE8wRkJRek5GTEVOQlFVTTdRVUZGUkN3MFFrRkJORUk3UVVGRE5VSXNUVUZCVFN4VlFVRlZMRkZCUVZFc1EwRkJReXhSUVVGblFpeEZRVUZGTEV0QlFXbENPMGxCUXpGRUxHVkJRV1VzUjBGQlJ5eFJRVUZSTEVOQlFVTTdTVUZETTBJc1MwRkJTeXhGUVVGRkxFTkJRVU03UVVGRFZpeERRVUZETzBGQlJVUXNkMFpCUVhkR08wRkJRM2hHTEUxQlFVMHNWVUZCVlN4TlFVRk5MRU5CUVVNc1RVRkJNa0k3U1VGRGFFUXNTVUZCU1N4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFbEJRVWtzVTBGQlV6dFJRVU55UXl4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETzBsQlF6bENMRXRCUVVzc1EwRkJReXhsUVVGbExFTkJRVU1zUTBGQlF5eE5RVUZOTEVkQlFVY3NUVUZCVFN4RFFVRkRPMEZCUTNwRExFTkJRVU03UVVGRlJDeDFSa0ZCZFVZN1FVRkRka1lzVFVGQlRTeFZRVUZWTEV0QlFVc3NRMEZCUXl4TFFVRXdRanRKUVVNNVF5eEpRVUZKTEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1NVRkJTU3hUUVVGVE8xRkJRM0pETEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU03U1VGRE9VSXNTMEZCU3l4RFFVRkRMR1ZCUVdVc1EwRkJReXhEUVVGRExFdEJRVXNzUjBGQlJ5eExRVUZMTEVOQlFVTTdRVUZEZGtNc1EwRkJRenRCUVVkRUxFMUJRVTBzVlVGQlowSXNVVUZCVVN4RFFVRkRMRTlCUVRSRE96czdVVUZEZWtVc1NVRkJTU3hQUVVGUExFZEJRVFJGTEVWQlFVVXNRMEZCUXp0UlFVVXhSaXhMUVVGTExFMUJRVTBzUTBGQlF5eEhRVUZITEVWQlFVVXNTMEZCU3l4RFFVRkRMRWxCUVVrc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUlR0WlFVTm9SQ3hKUVVGSkxFTkJRVUVzVDBGQlR5eGhRVUZRTEU5QlFVOHNkVUpCUVZBc1QwRkJUeXhEUVVGRkxGRkJRVkVzUzBGQlNTeFRRVUZUTEVWQlFVVTdaMEpCUTJ4RExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRExFOUJRVThzWVVGQlVDeFBRVUZQTEhWQ1FVRlFMRTlCUVU4c1EwRkJSU3hSUVVGUkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTTdiMEpCUTJoRkxGTkJRVk03WVVGRFdqdFpRVU5FTEVsQlFVazdaMEpCUTBZc1NVRkJTU3hMUVVGTExFTkJRVU1zVFVGQlRUdHZRa0ZEWkN4TlFVRk5MRXRCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dGhRVU40UWp0WlFVRkRMRTlCUVU4c1EwRkJUU3hGUVVGRk8yZENRVU5tTEV0QlFVc3NRMEZCUXl4WlFVRlpMRWRCUVVjc1EwRkJReXhEUVVGRExGRkJRVkVzUlVGQlJTeERRVUZETzJGQlEyNURPMWxCUTBRc1NVRkJTU3hEUVVGRExFZEJRVWNzVFVGQlFTeExRVUZMTEVOQlFVTXNTMEZCU3l4dFEwRkJTU3hGUVVGRkxFTkJRVU03V1VGRE1VSXNTVUZCU1N4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRE8xbEJRMklzUzBGQlNTeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1owSkJRMmhETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRTlCUVU4c1lVRkJVQ3hQUVVGUExIVkNRVUZRTEU5QlFVOHNRMEZCUlN4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRE8yRkJReTlETzFsQlJVUXNTVUZCU1N4SlFVRkpMRWRCUVVjc1EwRkJReXhOUVVGTkxFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFbEJRVWtzVTBGQlV5eERRVUZETEVOQlFVTTdXVUZEZWtVc1NVRkJTVHRuUWtGRFJpeEpRVUZKTEV0QlFVc3NRMEZCUXl4TFFVRkxPMjlDUVVOaUxFMUJRVTBzUzBGQlN5eERRVUZETEV0QlFVc3NSVUZCUlN4RFFVRkRPMkZCUTNaQ08xbEJRVU1zVDBGQlR5eERRVUZOTEVWQlFVVTdaMEpCUTJZc1MwRkJTeXhEUVVGRExGZEJRVmNzUjBGQlJ5eERRVUZETEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNN1lVRkRiRU03V1VGRFJDeEpRVUZKTEV0QlFVc3NRMEZCUXl4WFFVRlhPMmRDUVVOdVFpeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVNc1VVRkJVU3hGUVVGRkxFZEJRVWNzUlVGQlJTeEpRVUZKTEVWQlFVVXNUVUZCVFN4RlFVRkZMRTFCUVUwc1JVRkJSU3hMUVVGTExFTkJRVU1zVjBGQlZ5eEZRVUZGTEU5QlFVOHNSVUZCUlN4TFFVRkxMRVZCUVVNc1EwRkJReXhEUVVGRE8xbEJRM1JHTEVsQlFVa3NTMEZCU3l4RFFVRkRMRmxCUVZrN1owSkJRM0JDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJReXhSUVVGUkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEVsQlFVa3NSVUZCUlN4TlFVRk5MRVZCUVVVc1RVRkJUU3hGUVVGRkxFdEJRVXNzUTBGQlF5eFpRVUZaTEVWQlFVVXNUMEZCVHl4RlFVRkZMRXRCUVVzc1JVRkJReXhEUVVGRExFTkJRVU03V1VGRGRrWXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzFOQlEzWkNPMUZCUlVRc1QwRkJUeXhQUVVGUExFTkJRVU03TzBOQlEyaENPMEZCUlVRc1UwRkJaU3hSUVVGUkxFTkJRVU1zUTBGQlR5eEZRVUZGTEZOQlFUWkNPenM3VVVGRE5VUXNTVUZCU1N4RFFVRjVSU3hEUVVGRE8xRkJRemxGTEVsQlFVazdXVUZEUml4SlFVRkpMRk5CUVZNc1NVRkJTU3hUUVVGVExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETEZOQlFWTXNRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJReXhEUVVGRE8yZENRVU4yUml4RFFVRkRMRWRCUVVjc1JVRkJReXhQUVVGUExFVkJRVVVzU1VGQlNTeEZRVUZGTEUxQlFVMHNSVUZCUlN4VFFVRlRMRVZCUVVNc1EwRkJRenM3WjBKQlJYWkRMRU5CUVVNc1IwRkJSeXhGUVVGRExFOUJRVThzUlVGQlJTeEpRVUZKTEVWQlFVVXNUVUZCVFN4RlFVRkZMRTFCUVVFc1RVRkJUU3hEUVVGRExFTkJRVU1zU1VGQlNTeEZRVUZGTEcxRFFVRkpMRWxCUVVrc1JVRkJReXhEUVVGRE8xTkJRM1pFTzFGQlFVTXNUMEZCVHl4RFFVRk5MRVZCUVVVN1dVRkRaaXhEUVVGRExFZEJRVWNzUlVGQlF5eFBRVUZQTEVWQlFVVXNTMEZCU3l4RlFVRkZMRTFCUVUwc1JVRkJSU3hEUVVGRExFTkJRVU1zVVVGQlVTeEZRVUZGTEVWQlFVTXNRMEZCUXp0VFFVTTFRenRSUVVORUxFTkJRVU1zUTBGQlF5eFJRVUZSTEVkQlFVY3NRMEZCUXl4RFFVRkRMRkZCUVZFc1EwRkJRenRSUVVONFFpeERRVUZETEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03VVVGRGFFSXNUMEZCVHl4RFFVRkRMRU5CUVVNN08wTkJRMVk3UVVGRlJDeE5RVUZOTEZWQlFXZENMRXRCUVVzc1EwRkJReXhGUVVGVk96dFJRVU53UXl4TlFVRlBMRWxCUVVrc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6ZERMRU5CUVVNN1EwRkJRU0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0FxSUdGeklHZHliMnNnWm5KdmJTQmNJbVJoZEdGbmNtOXJMV0Z3YVM5bmNtOXJYQ0k3WEc1Y2JtVjRjRzl5ZENCc1pYUWdkR1Z6ZEhNNklIdGJhMlY1T2lCemRISnBibWRkT2lCN2RHVnpkSE0vT2lCVVpYTjBXMTBzSUdKbFptOXlaVDg2SUNncElEMCtJRkJ5YjIxcGMyVThkbTlwWkQ0c0lHRm1kR1Z5UHpvZ0tDa2dQVDRnVUhKdmJXbHpaVHgyYjJsa1Bpd2dZbVZtYjNKbFUzUmhkSFZ6UHpvZ2MzUnlhVzVuTENCaFpuUmxjbE4wWVhSMWN6ODZJSE4wY21sdVozMTlJRDBnZTMwN1hHNWNibVY0Y0c5eWRDQnNaWFFnWTNWeWNtVnVkRU5oZEdWbmIzSjVPaUJ6ZEhKcGJtYzdYRzVjYm1WNGNHOXlkQ0J1WVcxbGMzQmhZMlVnWVhOemRYSmxJSHRjYmx4dUlDQmxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2JtOTBUblZzYkNoMllXeDFaVG9nWVc1NUxDQnVZVzFsUHpvZ2MzUnlhVzVuS1NCN1hHNGdJQ0FnYVdZZ0tIWmhiSFZsSUQwOUlHNTFiR3dwWEc0Z0lDQWdJQ0IwYUhKdmR5QmdKSHR1WVcxbElEMDlJRzUxYkd3Z1B5QW5WbUZzZFdVbklEb2dibUZ0WlgwZ2JtOTBJR1JsWm1sdVpXUmdPMXh1SUNCOVhHNTlYRzVjYm1WNGNHOXlkQ0JwYm5SbGNtWmhZMlVnVkdWemRFOXdkR2x2Ym5NZ2UxeHVJQ0IwYVcxbGIzVjBQeUE2SUc1MWJXSmxjanRjYmlBZ2RXNW9ZVzVrYkdWa1JYaGpaWEIwYVc5dVZHbHRaVzkxZEQ4Z09pQnVkVzFpWlhJN1hHNTlYRzVjYm1WNGNHOXlkQ0JqYkdGemN5QlVaWE4wSUh0Y2JpQWdkR1Z6ZERvZ0tDa2dQVDRnVUhKdmJXbHpaVHhoYm5rK08xeHVJQ0J1WVcxbE9pQnpkSEpwYm1jN1hHNGdJR05oZEdWbmIzSjVPaUJ6ZEhKcGJtYzdYRzRnSUc5d2RHbHZibk0vT2lCVVpYTjBUM0IwYVc5dWN6dGNibHh1SUNCamIyNXpkSEoxWTNSdmNpaGpZWFJsWjI5eWVUb2djM1J5YVc1bkxDQnVZVzFsT2lCemRISnBibWNzSUhSbGMzUTZJQ2dwSUQwK0lGQnliMjFwYzJVOFlXNTVQaXdnYjNCMGFXOXVjejg2SUZSbGMzUlBjSFJwYjI1ektTQjdYRzRnSUNBZ2RHaHBjeTVqWVhSbFoyOXllU0E5SUdOaGRHVm5iM0o1TzF4dUlDQWdJSFJvYVhNdWJtRnRaU0E5SUc1aGJXVTdYRzRnSUNBZ2IzQjBhVzl1Y3lBL1B6MGdlMzA3WEc0Z0lDQWdiM0IwYVc5dWN5NTBhVzFsYjNWMElEOC9QU0F6TURBd01EdGNiaUFnSUNCdmNIUnBiMjV6TG5WdWFHRnVaR3hsWkVWNFkyVndkR2x2YmxScGJXVnZkWFFnUHo4OUlESXdNREE3WEc0Z0lDQWdkR2hwY3k1dmNIUnBiMjV6SUQwZ2IzQjBhVzl1Y3p0Y2JpQWdJQ0IwYUdsekxuUmxjM1FnUFNCaGMzbHVZeUFvS1RvZ1VISnZiV2x6WlR4aGJuaytJRDArSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ1WlhjZ1VISnZiV2x6WlNoaGMzbHVZeUFvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lHeGxkQ0J5WlhOMWJIUWdQU0FuSnp0Y2JpQWdJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnSUNCbmNtOXJMbk5vWld4c0xteGhjM1JGY25KdmNpQTlJQ2NuTzF4dUlDQWdJQ0FnSUNBZ0lISmxjM1ZzZENBOUlHRjNZV2wwSUhSbGMzUW9LVHRjYmlBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlRvZ1lXNTVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtVnFaV04wS0dVcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR2xtSUNnaEtHRjNZV2wwSUdGemMyVnlkRTV2UlhKeWIzSW9iM0IwYVc5dWN5RXVkVzVvWVc1a2JHVmtSWGhqWlhCMGFXOXVWR2x0Wlc5MWRDRXBLU2xjYmlBZ0lDQWdJQ0FnSUNCeVpXcGxZM1FvWUZWdWFHRnVaR3hsWkNCbGVHTmxjSFJwYjI0Z1pIVnlhVzVuSUhSbGMzUTZJQ1I3WjNKdmF5NXphR1ZzYkM1c1lYTjBSWEp5YjNKOVlDazdYRzRnSUNBZ0lDQWdJSEpsYzI5c2RtVW9jbVZ6ZFd4MEtUdGNiaUFnSUNBZ0lIMHBPMXh1SUNBZ0lIMDdYRzRnSUgxY2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSFJsYzNRb2JtRnRaVG9nYzNSeWFXNW5MQ0IwWlhOME9pQW9LU0E5UGlCUWNtOXRhWE5sUEdGdWVUNHNJRzl3ZEdsdmJuTS9PaUJVWlhOMFQzQjBhVzl1Y3lrNklIWnZhV1FnZTF4dUlDQnBaaUFvZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTQTlQU0IxYm1SbFptbHVaV1FwWEc0Z0lDQWdkR1Z6ZEhOYlkzVnljbVZ1ZEVOaGRHVm5iM0o1WFNBOUlIdDlPMXh1SUNCcFppQW9kR1Z6ZEhOYlkzVnljbVZ1ZEVOaGRHVm5iM0o1WFM1MFpYTjBjeUE5UFNCMWJtUmxabWx1WldRcFhHNGdJQ0FnZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTNTBaWE4wY3lBOUlGdGRPMXh1SUNCMFpYTjBjMXRqZFhKeVpXNTBRMkYwWldkdmNubGRMblJsYzNSeklTNXdkWE5vS0c1bGR5QlVaWE4wS0dOMWNuSmxiblJEWVhSbFoyOXllU3dnYm1GdFpTd2dkR1Z6ZEN3Z2IzQjBhVzl1Y3lrcE8xeHVmVnh1WEc0dktpb2dRWGRoYVhSeklHWnZjaUJoSUhkb2FXeGxJR05vWldOcmFXNW5JSFJvWlNCbGNuSnZjaUJ6ZEdGMGRYTWdiMllnZEdobElIQnNZWFJtYjNKdElDb3ZYRzVsZUhCdmNuUWdZWE41Ym1NZ1puVnVZM1JwYjI0Z1lYTnpaWEowVG05RmNuSnZjaWh0Y3pvZ2JuVnRZbVZ5S1RvZ1VISnZiV2x6WlR4aWIyOXNaV0Z1UGlCN1hHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnYlhNZ0x5QTFNREE3SUNzcmFTa2dlMXh1SUNBZ0lHRjNZV2wwSUdSbGJHRjVLRFV3TUNrN1hHNGdJQ0FnYVdZZ0tHZHliMnN1YzJobGJHd3ViR0Z6ZEVWeWNtOXlMbXhsYm1kMGFDQWhQVDBnTUNsY2JpQWdJQ0FnSUhKbGRIVnliaUJtWVd4elpUdGNiaUFnZlZ4dUlDQnlaWFIxY200Z2RISjFaVHRjYm4xY2JseHVMeW9xSUZSbGMzUnpJSFIzYnlCdlltcGxZM1J6SUdadmNpQmxjWFZoYkdsMGVTd2dkR2h5YjNkeklHRnVJR1Y0WTJWd2RHbHZiaUJwWmlCMGFHVjVJR0Z5WlNCdWIzUWdaWEYxWVd3dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdaWGh3WldOMEtHRmpkSFZoYkRvZ1lXNTVMQ0JsZUhCbFkzUmxaRG9nWVc1NUtUb2dkbTlwWkNCN1hHNGdJR2xtSUNoaFkzUjFZV3dnSVQwOUlHVjRjR1ZqZEdWa0tWeHVJQ0FnSUhSb2NtOTNJR0JGZUhCbFkzUmxaQ0JjSWlSN1pYaHdaV04wWldSOVhDSXNJR2R2ZENCY0lpUjdZV04wZFdGc2ZWd2lZRHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHVjRjR1ZqZEVac2IyRjBLR0ZqZEhWaGJEb2diblZ0WW1WeUxDQmxlSEJsWTNSbFpEb2diblZ0WW1WeUxDQjBiMnhsY21GdVkyVWdQU0F3TGpBd01TazZJSFp2YVdRZ2UxeHVJQ0JqYjI1emRDQmhjbVZGY1hWaGJDQTlJRTFoZEdndVlXSnpLR0ZqZEhWaGJDQXRJR1Y0Y0dWamRHVmtLU0E4SURBdU1EQXhPMXh1SUNCcFppQW9JV0Z5WlVWeGRXRnNLVnh1SUNBZ0lIUm9jbTkzSUdCRmVIQmxZM1JsWkNBa2UyVjRjR1ZqZEdWa2ZTd2daMjkwSUNSN1lXTjBkV0ZzZlNBb2RHOXNaWEpoYm1ObElEMGdKSHQwYjJ4bGNtRnVZMlY5S1dBN1hHNTlYRzVjYmk4cUtpQkVaV1pwYm1WeklHRWdkR1Z6ZENCemRXbDBaUzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCallYUmxaMjl5ZVNoallYUmxaMjl5ZVRvZ2MzUnlhVzVuTENCMFpYTjBjem9nS0NrZ1BUNGdkbTlwWkNrNklIWnZhV1FnZTF4dUlDQmpkWEp5Wlc1MFEyRjBaV2R2Y25rZ1BTQmpZWFJsWjI5eWVUdGNiaUFnZEdWemRITW9LVHRjYm4xY2JseHVMeW9xSUVSbFptbHVaWE1nWVNCbWRXNWpkR2x2YmlCMGJ5QmlaU0JsZUdWamRYUmxaQ0JpWldadmNtVWdkR2hsSUhSbGMzUnpJR2x1SUhSb2FYTWdZMkYwWldkdmNua2dZWEpsSUdWNFpXTjFkR1ZrTGlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHSmxabTl5WlNoaVpXWnZjbVU2SUNncElEMCtJRkJ5YjIxcGMyVThkbTlwWkQ0cE9pQjJiMmxrSUh0Y2JpQWdhV1lnS0hSbGMzUnpXMk4xY25KbGJuUkRZWFJsWjI5eWVWMGdQVDBnZFc1a1pXWnBibVZrS1Z4dUlDQWdJSFJsYzNSelcyTjFjbkpsYm5SRFlYUmxaMjl5ZVYwZ1BTQjdmVHRjYmlBZ2RHVnpkSE5iWTNWeWNtVnVkRU5oZEdWbmIzSjVYUzVpWldadmNtVWdQU0JpWldadmNtVTdYRzU5WEc1Y2JpOHFLaUJFWldacGJtVnpJR0VnWm5WdVkzUnBiMjRnZEc4Z1ltVWdaWGhsWTNWMFpXUWdZV1owWlhJZ2RHaGxJSFJsYzNSeklHbHVJSFJvYVhNZ1kyRjBaV2R2Y25rZ1lYSmxJR1Y0WldOMWRHVmtMaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdGbWRHVnlLR0ZtZEdWeU9pQW9LU0E5UGlCUWNtOXRhWE5sUEhadmFXUStLVG9nZG05cFpDQjdYRzRnSUdsbUlDaDBaWE4wYzF0amRYSnlaVzUwUTJGMFpXZHZjbmxkSUQwOUlIVnVaR1ZtYVc1bFpDbGNiaUFnSUNCMFpYTjBjMXRqZFhKeVpXNTBRMkYwWldkdmNubGRJRDBnZTMwN1hHNGdJSFJsYzNSelcyTjFjbkpsYm5SRFlYUmxaMjl5ZVYwdVlXWjBaWElnUFNCaFpuUmxjanRjYm4xY2JseHVYRzVsZUhCdmNuUWdZWE41Ym1NZ1puVnVZM1JwYjI0Z2NuVnVWR1Z6ZEhNb2IzQjBhVzl1Y3o4NklIdGpZWFJsWjI5eWVUODZJSE4wY21sdVp5d2dkR1Z6ZEQ4NklITjBjbWx1WjMwcElIdGNiaUFnYkdWMElISmxjM1ZzZEhNNklIc2dZMkYwWldkdmNuay9PaUJ6ZEhKcGJtY3NJRzVoYldVL09pQnpkSEpwYm1jc0lITjFZMk5sYzNNNklHSnZiMnhsWVc0c0lISmxjM1ZzZERvZ2MzUnlhVzVuZlZ0ZElEMGdXMTA3WEc1Y2JpQWdabTl5SUNoamIyNXpkQ0JiYTJWNUxDQjJZV3gxWlYwZ2IyWWdUMkpxWldOMExtVnVkSEpwWlhNb2RHVnpkSE1wS1NCN1hHNGdJQ0FnYVdZZ0tHOXdkR2x2Ym5NL0xtTmhkR1ZuYjNKNUlDRTlJSFZ1WkdWbWFXNWxaQ2tnZTF4dUlDQWdJQ0FnYVdZZ0tDRnJaWGt1ZEc5TWIzZGxja05oYzJVb0tTNXpkR0Z5ZEhOWGFYUm9LRzl3ZEdsdmJuTS9MbU5oZEdWbmIzSjVMblJ2VEc5M1pYSkRZWE5sS0NrcEtWeHVJQ0FnSUNBZ0lDQmpiMjUwYVc1MVpUdGNiaUFnSUNCOVhHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lHbG1JQ2gyWVd4MVpTNWlaV1p2Y21VcFhHNGdJQ0FnSUNBZ0lHRjNZV2wwSUhaaGJIVmxMbUpsWm05eVpTZ3BPMXh1SUNBZ0lIMGdZMkYwWTJnZ0tIZzZJR0Z1ZVNrZ2UxeHVJQ0FnSUNBZ2RtRnNkV1V1WW1WbWIzSmxVM1JoZEhWeklEMGdlQzUwYjFOMGNtbHVaeWdwTzF4dUlDQWdJSDFjYmlBZ0lDQnNaWFFnZENBOUlIWmhiSFZsTG5SbGMzUnpJRDgvSUZ0ZE8xeHVJQ0FnSUd4bGRDQnlaWE1nUFNCYlhUdGNiaUFnSUNCbWIzSW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2RDNXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnY21WekxuQjFjMmdvWVhkaGFYUWdaWGhsWTFSbGMzUW9kRnRwWFN3Z2IzQjBhVzl1Y3o4dWRHVnpkQ2twTzF4dUlDQWdJSDFjYmx4dUlDQWdJR3hsZENCa1lYUmhJRDBnS0dGM1lXbDBJRkJ5YjIxcGMyVXVZV3hzS0hKbGN5a3BMbVpwYkhSbGNpZ29aQ2tnUFQ0Z1pDNXlaWE4xYkhRZ0lUMGdKM05yYVhCd1pXUW5LVHRjYmlBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnYVdZZ0tIWmhiSFZsTG1GbWRHVnlLVnh1SUNBZ0lDQWdJQ0JoZDJGcGRDQjJZV3gxWlM1aFpuUmxjaWdwTzF4dUlDQWdJSDBnWTJGMFkyZ2dLSGc2SUdGdWVTa2dlMXh1SUNBZ0lDQWdkbUZzZFdVdVlXWjBaWEpUZEdGMGRYTWdQU0I0TG5SdlUzUnlhVzVuS0NrN1hHNGdJQ0FnZlZ4dUlDQWdJR2xtSUNoMllXeDFaUzVoWm5SbGNsTjBZWFIxY3lsY2JpQWdJQ0FnSUdSaGRHRXVjSFZ6YUNoN1kyRjBaV2R2Y25rNklHdGxlU3dnYm1GdFpUb2dKMmx1YVhRbkxDQnlaWE4xYkhRNklIWmhiSFZsTG1GbWRHVnlVM1JoZEhWekxDQnpkV05qWlhOek9pQm1ZV3h6WlgwcE8xeHVJQ0FnSUdsbUlDaDJZV3gxWlM1aVpXWnZjbVZUZEdGMGRYTXBYRzRnSUNBZ0lDQmtZWFJoTG5CMWMyZ29lMk5oZEdWbmIzSjVPaUJyWlhrc0lHNWhiV1U2SUNkcGJtbDBKeXdnY21WemRXeDBPaUIyWVd4MVpTNWlaV1p2Y21WVGRHRjBkWE1zSUhOMVkyTmxjM002SUdaaGJITmxmU2s3WEc0Z0lDQWdjbVZ6ZFd4MGN5NXdkWE5vS0M0dUxtUmhkR0VwTzF4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUhKbGMzVnNkSE03WEc1OVhHNWNibUZ6ZVc1aklHWjFibU4wYVc5dUlHVjRaV05VWlhOMEtIUTZJRlJsYzNRc0lIQnlaV1JwWTJGMFpUb2djM1J5YVc1bklId2dkVzVrWldacGJtVmtLU0I3WEc0Z0lHeGxkQ0J5T2lCN0lHTmhkR1ZuYjNKNVB6b2djM1J5YVc1bkxDQnVZVzFsUHpvZ2MzUnlhVzVuTENCemRXTmpaWE56T2lCaWIyOXNaV0Z1TENCeVpYTjFiSFE2SUhOMGNtbHVaeUI5TzF4dUlDQjBjbmtnZTF4dUlDQWdJR2xtSUNod2NtVmthV05oZEdVZ0lUMGdkVzVrWldacGJtVmtJQ1ltSUNnaGRDNXVZVzFsTG5SdlRHOTNaWEpEWVhObEtDa3VjM1JoY25SelYybDBhQ2h3Y21Wa2FXTmhkR1V1ZEc5TWIzZGxja05oYzJVb0tTa3BLVnh1SUNBZ0lDQWdjaUE5SUh0emRXTmpaWE56T2lCMGNuVmxMQ0J5WlhOMWJIUTZJQ2R6YTJsd2NHVmtKMzA3WEc0Z0lDQWdaV3h6WlZ4dUlDQWdJQ0FnY2lBOUlIdHpkV05qWlhOek9pQjBjblZsTENCeVpYTjFiSFE2SUdGM1lXbDBJSFF1ZEdWemRDZ3BJRDgvSUNkUFN5ZDlPMXh1SUNCOUlHTmhkR05vSUNoNE9pQmhibmtwSUh0Y2JpQWdJQ0J5SUQwZ2UzTjFZMk5sYzNNNklHWmhiSE5sTENCeVpYTjFiSFE2SUhndWRHOVRkSEpwYm1jb0tYMDdYRzRnSUgxY2JpQWdjaTVqWVhSbFoyOXllU0E5SUhRdVkyRjBaV2R2Y25rN1hHNGdJSEl1Ym1GdFpTQTlJSFF1Ym1GdFpUdGNiaUFnY21WMGRYSnVJSEk3WEc1OVhHNWNibVY0Y0c5eWRDQmhjM2x1WXlCbWRXNWpkR2x2YmlCa1pXeGhlU2h0Y3pvZ2JuVnRZbVZ5S1NCN1hHNGdJR0YzWVdsMElDQnVaWGNnVUhKdmJXbHpaU2h5SUQwK0lITmxkRlJwYldWdmRYUW9jaXdnYlhNcEtUdGNibjFjYmlKZGZRPT0iLCJpbXBvcnQgeyBsY21zVG9HY3JzIH0gZnJvbSAnLi9tYXAnO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbi8vbmFtZTogZ2Nyc1RvTGNtc1xuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBHQ1JTfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IExDTVN9XG5leHBvcnQgZnVuY3Rpb24gZ2Nyc1RvTGNtcyhzZXF1ZW5jZSkge1xuICAgIGNvbnN0IGRmID0gREcuRGF0YUZyYW1lLmZyb21Dc3YobGNtc1RvR2Nycyk7XG4gICAgY29uc3QgYXJyMSA9IGRmLmdldENvbCgnR0NSUycpLnRvTGlzdCgpO1xuICAgIGNvbnN0IGFycjIgPSBkZi5nZXRDb2woJ0xDTVMnKS50b0xpc3QoKTtcbiAgICBjb25zdCBvYmogPSB7fTtcbiAgICBhcnIxLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiBvYmpbZWxlbWVudF0gPSBhcnIyW2luZGV4XSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIxLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFycjFbaV0gPSBhcnIxW2ldLnJlcGxhY2UoJygnLCAnXFxcXCgnKTtcbiAgICAgICAgYXJyMVtpXSA9IGFycjFbaV0ucmVwbGFjZSgnKScsICdcXFxcKScpO1xuICAgIH1cbiAgICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKCcoJyArIGFycjEuam9pbignfCcpICsgJyknLCAnZycpO1xuICAgIGxldCByMSA9IHNlcXVlbmNlLnJlcGxhY2UocmVnRXhwLCBmdW5jdGlvbiAoY29kZSkgeyByZXR1cm4gb2JqW2NvZGVdOyB9KTtcbiAgICB3aGlsZSAocjEuaW5kZXhPZignLy8nKSAhPSAtMSlcbiAgICAgICAgcjEgPSByMS5yZXBsYWNlKCcvLycsICcvJyk7XG4gICAgcmV0dXJuIHIxO1xufVxuLy9uYW1lOiBhc29HYXBtZXJzTnVjbGVvdGlkZXNUb0Jpb1NwcmluZ1xuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBETkEgbnVjbGVvdGlkZXN9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogQmlvU3ByaW5nIC8gR2FwbWVyc31cbmV4cG9ydCBmdW5jdGlvbiBhc29HYXBtZXJzTnVjbGVvdGlkZXNUb0Jpb1NwcmluZyhudWNsZW90aWRlcykge1xuICAgIGxldCBjb3VudCA9IC0xO1xuICAgIGNvbnN0IG9iakZvckVkZ2VzID0ge1xuICAgICAgICAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLCAnVCc6ICc1KicsICdBJzogJzYqJywgJ0MnOiAnNyonLCAnRyc6ICc4KidcbiAgICB9O1xuICAgIGNvbnN0IG9iakZvckNlbnRlciA9IHtcbiAgICAgICAgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJywgJ1QnOiAnVConLCAnQSc6ICdBKicsICdDJzogJzkqJywgJ0cnOiAnRyonXG4gICAgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8QXxUfEN8RykvZywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgcmV0dXJuIChjb3VudCA+IDQgJiYgY291bnQgPCAxNSkgPyBvYmpGb3JDZW50ZXJbeF0gOiBvYmpGb3JFZGdlc1t4XTtcbiAgICB9KS5zbGljZSgwLCAobnVjbGVvdGlkZXMuZW5kc1dpdGgoJyhpbnZhYmFzaWMpJykgfHwgbnVjbGVvdGlkZXMuZW5kc1dpdGgoJyhHYWxOQWMtMi1KTkopJykpID9cbiAgICAgICAgbnVjbGVvdGlkZXMubGVuZ3RoIDogMiAqIGNvdW50ICsgMSk7XG59XG4vL25hbWU6IGFzb0dhcG1lcnNOdWNsZW90aWRlc1RvR2Nyc1xuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBETkEgbnVjbGVvdGlkZXN9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogR0NSUyAvIEdhcG1lcnN9XG5leHBvcnQgZnVuY3Rpb24gYXNvR2FwbWVyc051Y2xlb3RpZGVzVG9HY3JzKG51Y2xlb3RpZGVzKSB7XG4gICAgbGV0IGNvdW50ID0gLTE7XG4gICAgY29uc3Qgb2JqRm9yRWRnZXMgPSB7XG4gICAgICAgICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsICdUJzogJ21vZVVucHMnLFxuICAgICAgICAnQSc6ICdtb2VBbnBzJywgJ0MnOiAnbW9lNW1DbnBzJywgJ0cnOiAnbW9lR25wcydcbiAgICB9O1xuICAgIGNvbnN0IG9iakZvckNlbnRlciA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ0MnOiAnNW1DcHMnLCAnQSc6ICdBcHMnLCAnVCc6ICdUcHMnLCAnRyc6ICdHcHMnIH07XG4gICAgcmV0dXJuIG51Y2xlb3RpZGVzLnJlcGxhY2UoLyhcXChpbnZhYmFzaWNcXCl8XFwoR2FsTkFjLTItSk5KXFwpfEF8VHxDfEcpL2csIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIGlmIChjb3VudCA8IDUpXG4gICAgICAgICAgICByZXR1cm4gKGNvdW50ID09IDQpID8gb2JqRm9yRWRnZXNbeF0uc2xpY2UoMCwgLTMpICsgJ3BzJyA6IG9iakZvckVkZ2VzW3hdO1xuICAgICAgICBpZiAoY291bnQgPCAxNSlcbiAgICAgICAgICAgIHJldHVybiAoY291bnQgPT0gMTQpID8gb2JqRm9yQ2VudGVyW3hdLnNsaWNlKDAsIC0yKSArICducHMnIDogb2JqRm9yQ2VudGVyW3hdO1xuICAgICAgICByZXR1cm4gb2JqRm9yRWRnZXNbeF07XG4gICAgfSkuc2xpY2UoMCwgKG51Y2xlb3RpZGVzLmVuZHNXaXRoKCcoaW52YWJhc2ljKScpIHx8IG51Y2xlb3RpZGVzLmVuZHNXaXRoKCcoR2FsTkFjLTItSk5KKScpKSA/XG4gICAgICAgIG51Y2xlb3RpZGVzLmxlbmd0aCA6IC0zKTtcbn1cbi8vbmFtZTogYXNvR2FwbWVyc0Jpb1NwcmluZ1RvTnVjbGVvdGlkZXNcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogQmlvU3ByaW5nIC8gR2FwbWVyc31cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBETkEgbnVjbGVvdGlkZXN9XG5leHBvcnQgZnVuY3Rpb24gYXNvR2FwbWVyc0Jpb1NwcmluZ1RvTnVjbGVvdGlkZXMobnVjbGVvdGlkZXMpIHtcbiAgICBjb25zdCBvYmogPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICcqJzogJycsICc1JzogJ1QnLCAnNic6ICdBJywgJzcnOiAnQycsICc4JzogJ0cnLCAnOSc6ICdDJyB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxcXCp8NXw2fDd8OHw5KS9nLCBmdW5jdGlvbiAoeCkgeyByZXR1cm4gb2JqW3hdOyB9KTtcbn1cbi8vbmFtZTogYXNvR2FwbWVyc0Jpb1NwcmluZ1RvR2Nyc1xuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBCaW9TcHJpbmcgLyBHYXBtZXJzfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IEdDUlMgLyBHYXBtZXJzfVxuZXhwb3J0IGZ1bmN0aW9uIGFzb0dhcG1lcnNCaW9TcHJpbmdUb0djcnMobnVjbGVvdGlkZXMpIHtcbiAgICBsZXQgY291bnQgPSAtMTtcbiAgICBjb25zdCBvYmogPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICc1Kic6ICdtb2VVbnBzJywgJzYqJzogJ21vZUFucHMnLCAnNyonOiAnbW9lNW1DbnBzJywgJzgqJzogJ21vZUducHMnLCAnOSonOiAnNW1DcHMnLCAnQSonOiAnQXBzJywgJ1QqJzogJ1RwcycsXG4gICAgICAgICdHKic6ICdHcHMnLCAnQyonOiAnQ3BzJywgJzUnOiAnbW9lVScsICc2JzogJ21vZUEnLCAnNyc6ICdtb2U1bUMnLCAnOCc6ICdtb2VHJyxcbiAgICB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXw1XFwqfDZcXCp8N1xcKnw4XFwqfDlcXCp8QVxcKnxUXFwqfEdcXCp8Q1xcKnw1fDZ8N3w4KS9nLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgICByZXR1cm4gKGNvdW50ID09IDQpID8gb2JqW3hdLnNsaWNlKDAsIC0zKSArICdwcycgOiAoY291bnQgPT0gMTQpID8gb2JqW3hdLnNsaWNlKDAsIC0yKSArICducHMnIDogb2JqW3hdO1xuICAgIH0pO1xufVxuLy9uYW1lOiBhc29HYXBtZXJzR2Nyc1RvQmlvU3ByaW5nXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IEdDUlMgLyBHYXBtZXJzfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IEJpb1NwcmluZyAvIEdhcG1lcnN9XG5leHBvcnQgZnVuY3Rpb24gYXNvR2FwbWVyc0djcnNUb0Jpb1NwcmluZyhudWNsZW90aWRlcykge1xuICAgIGNvbnN0IG9iaiA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ21vZVQnOiAnNScsICdtb2VBJzogJzYnLCAnbW9lNW1DJzogJzcnLCAnbW9lRyc6ICc4JywgJ21vZVUnOiAnNScsICc1bUMnOiAnOScsICducHMnOiAnKicsICdwcyc6ICcqJywgJ1UnOiAnVCcsXG4gICAgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8bW9lVHxtb2VBfG1vZTVtQ3xtb2VHfG1vZVV8NW1DfG5wc3xwc3xVKS9nLCBmdW5jdGlvbiAoeCkgeyByZXR1cm4gb2JqW3hdOyB9KTtcbn1cbi8vbmFtZTogYXNvR2FwbWVyc0djcnNUb051Y2xlb3RpZGVzXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IEdDUlMgLyBHYXBtZXJzfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IEROQSBudWNsZW90aWRlc31cbmV4cG9ydCBmdW5jdGlvbiBhc29HYXBtZXJzR2Nyc1RvTnVjbGVvdGlkZXMobnVjbGVvdGlkZXMpIHtcbiAgICBjb25zdCBvYmogPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICdtb2UnOiAnJywgJzVtJzogJycsICduJzogJycsICdwcyc6ICcnLCAnVSc6ICdUJyB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxtb2V8NW18bnxwc3xVKS9nLCBmdW5jdGlvbiAoeCkgeyByZXR1cm4gb2JqW3hdOyB9KTtcbn1cbi8vbmFtZTogc2lSbmFCaW9TcHJpbmdUb051Y2xlb3RpZGVzXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IEJpb1NwcmluZyAvIHNpUk5BfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IFJOQSBudWNsZW90aWRlc31cbmV4cG9ydCBmdW5jdGlvbiBzaVJuYUJpb1NwcmluZ1RvTnVjbGVvdGlkZXMobnVjbGVvdGlkZXMpIHtcbiAgICBjb25zdCBvYmogPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICcxJzogJ1UnLCAnMic6ICdBJywgJzMnOiAnQycsICc0JzogJ0cnLCAnNSc6ICdVJywgJzYnOiAnQScsICc3JzogJ0MnLCAnOCc6ICdHJywgJyonOiAnJyB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXwxfDJ8M3w0fDV8Nnw3fDh8XFwqKS9nLCBmdW5jdGlvbiAoeCkgeyByZXR1cm4gb2JqW3hdOyB9KTtcbn1cbi8vbmFtZTogc2lSbmFCaW9TcHJpbmdUb0F4b2xhYnNcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogQmlvU3ByaW5nIC8gc2lSTkF9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogQXhvbGFicyAvIHNpUk5BfVxuZXhwb3J0IGZ1bmN0aW9uIHNpUm5hQmlvU3ByaW5nVG9BeG9sYWJzKG51Y2xlb3RpZGVzKSB7XG4gICAgY29uc3Qgb2JqID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnMSc6ICdVZicsICcyJzogJ0FmJywgJzMnOiAnQ2YnLCAnNCc6ICdHZicsICc1JzogJ3UnLCAnNic6ICdhJywgJzcnOiAnYycsICc4JzogJ2cnLCAnKic6ICdzJyB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXwxfDJ8M3w0fDV8Nnw3fDh8XFwqKS9nLCBmdW5jdGlvbiAoeCkgeyByZXR1cm4gb2JqW3hdOyB9KTtcbn1cbi8vbmFtZTogc2lSbmFCaW9TcHJpbmdUb0djcnNcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogQmlvU3ByaW5nIC8gc2lSTkF9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogR0NSU31cbmV4cG9ydCBmdW5jdGlvbiBzaVJuYUJpb1NwcmluZ1RvR2NycyhudWNsZW90aWRlcykge1xuICAgIGNvbnN0IG9iaiA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJzEnOiAnZlUnLCAnMic6ICdmQScsICczJzogJ2ZDJywgJzQnOiAnZkcnLCAnNSc6ICdtVScsICc2JzogJ21BJywgJzcnOiAnbUMnLCAnOCc6ICdtRycsICcqJzogJ3BzJyB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXwxfDJ8M3w0fDV8Nnw3fDh8XFwqKS9nLCBmdW5jdGlvbiAoeCkgeyByZXR1cm4gb2JqW3hdOyB9KTtcbn1cbi8vbmFtZTogc2lSbmFBeG9sYWJzVG9HY3JzXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IEF4b2xhYnMgLyBzaVJOQX1cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBHQ1JTfVxuZXhwb3J0IGZ1bmN0aW9uIHNpUm5hQXhvbGFic1RvR2NycyhudWNsZW90aWRlcykge1xuICAgIGNvbnN0IG9iaiA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ1VmJzogJ2ZVJywgJ0FmJzogJ2ZBJywgJ0NmJzogJ2ZDJywgJ0dmJzogJ2ZHJywgJ3UnOiAnbVUnLCAnYSc6ICdtQScsICdjJzogJ21DJywgJ2cnOiAnbUcnLCAncyc6ICdwcycsXG4gICAgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8VWZ8QWZ8Q2Z8R2Z8dXxhfGN8Z3xzKS9nLCBmdW5jdGlvbiAoeCkgeyByZXR1cm4gb2JqW3hdOyB9KTtcbn1cbi8vbmFtZTogc2lSbmFBeG9sYWJzVG9CaW9TcHJpbmdcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogQXhvbGFicyAvIHNpUk5BfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IEJpb1NwcmluZyAvIHNpUk5BfVxuZXhwb3J0IGZ1bmN0aW9uIHNpUm5hQXhvbGFic1RvQmlvU3ByaW5nKG51Y2xlb3RpZGVzKSB7XG4gICAgY29uc3Qgb2JqID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnVWYnOiAnMScsICdBZic6ICcyJywgJ0NmJzogJzMnLCAnR2YnOiAnNCcsICd1JzogJzUnLCAnYSc6ICc2JywgJ2MnOiAnNycsICdnJzogJzgnLCAncyc6ICcqJyxcbiAgICB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxVZnxBZnxDZnxHZnx1fGF8Y3xnfHMpL2csIGZ1bmN0aW9uICh4KSB7IHJldHVybiBvYmpbeF07IH0pO1xufVxuLy9uYW1lOiBzaVJuYUF4b2xhYnNUb051Y2xlb3RpZGVzXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IEF4b2xhYnMgLyBzaVJOQX1cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBSTkEgbnVjbGVvdGlkZXN9XG5leHBvcnQgZnVuY3Rpb24gc2lSbmFBeG9sYWJzVG9OdWNsZW90aWRlcyhudWNsZW90aWRlcykge1xuICAgIGNvbnN0IG9iaiA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ1VmJzogJ1UnLCAnQWYnOiAnQScsICdDZic6ICdDJywgJ0dmJzogJ0cnLCAndSc6ICdVJywgJ2EnOiAnQScsICdjJzogJ0MnLCAnZyc6ICdHJywgJ3MnOiAnJyxcbiAgICB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxVZnxBZnxDZnxHZnx1fGF8Y3xnfHMpL2csIGZ1bmN0aW9uICh4KSB7IHJldHVybiBvYmpbeF07IH0pO1xufVxuLy9uYW1lOiBzaVJuYUdjcnNUb051Y2xlb3RpZGVzXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IEdDUlN9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogUk5BIG51Y2xlb3RpZGVzfVxuZXhwb3J0IGZ1bmN0aW9uIHNpUm5hR2Nyc1RvTnVjbGVvdGlkZXMobnVjbGVvdGlkZXMpIHtcbiAgICBjb25zdCBvYmogPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICdmVSc6ICdVJywgJ2ZBJzogJ0EnLCAnZkMnOiAnQycsICdmRyc6ICdHJywgJ21VJzogJ1UnLCAnbUEnOiAnQScsICdtQyc6ICdDJywgJ21HJzogJ0cnLCAncHMnOiAnJyxcbiAgICB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxmVXxmQXxmQ3xmR3xtVXxtQXxtQ3xtR3xwcykvZywgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIG9ialt4XTsgfSk7XG59XG4vL25hbWU6IHNpUm5hR2Nyc1RvQmlvU3ByaW5nXG4vL2lucHV0OiBzdHJpbmcgbnVjbGVvdGlkZXMge3NlbVR5cGU6IEdDUlN9XG4vL291dHB1dDogc3RyaW5nIHJlc3VsdCB7c2VtVHlwZTogQmlvU3ByaW5nIC8gc2lSTkF9XG5leHBvcnQgZnVuY3Rpb24gc2lSbmFHY3JzVG9CaW9TcHJpbmcobnVjbGVvdGlkZXMpIHtcbiAgICBjb25zdCBvYmogPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsXG4gICAgICAgICdmVSc6ICcxJywgJ2ZBJzogJzInLCAnZkMnOiAnMycsICdmRyc6ICc0JywgJ21VJzogJzUnLCAnbUEnOiAnNicsICdtQyc6ICc3JywgJ21HJzogJzgnLCAncHMnOiAnKicsXG4gICAgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8ZlV8ZkF8ZkN8Zkd8bVV8bUF8bUN8bUd8cHMpL2csIGZ1bmN0aW9uICh4KSB7IHJldHVybiBvYmpbeF07IH0pO1xufVxuLy9uYW1lOiBzaVJuYUdjcnNUb0F4b2xhYnNcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogR0NSU31cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBBeG9sYWJzIC8gc2lSTkF9XG5leHBvcnQgZnVuY3Rpb24gc2lSbmFHY3JzVG9BeG9sYWJzKG51Y2xlb3RpZGVzKSB7XG4gICAgY29uc3Qgb2JqID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnZlUnOiAnVWYnLCAnZkEnOiAnQWYnLCAnZkMnOiAnQ2YnLCAnZkcnOiAnR2YnLCAnbVUnOiAndScsICdtQSc6ICdhJywgJ21DJzogJ2MnLCAnbUcnOiAnZycsICdwcyc6ICdzJyxcbiAgICB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxmVXxmQXxmQ3xmR3xtVXxtQXxtQ3xtR3xwcykvZywgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIG9ialt4XTsgfSk7XG59XG4vL25hbWU6IHNpUm5hTnVjbGVvdGlkZVRvQmlvU3ByaW5nU2Vuc2VTdHJhbmRcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogUk5BIG51Y2xlb3RpZGVzfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IEJpb1NwcmluZyAvIHNpUk5BfVxuZXhwb3J0IGZ1bmN0aW9uIHNpUm5hTnVjbGVvdGlkZVRvQmlvU3ByaW5nU2Vuc2VTdHJhbmQobnVjbGVvdGlkZXMpIHtcbiAgICBsZXQgY291bnQgPSAtMTtcbiAgICBjb25zdCBvYmpGb3JMZWZ0RWRnZSA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ0EnOiAnNionLCAnVSc6ICc1KicsICdHJzogJzgqJywgJ0MnOiAnNyonIH07XG4gICAgY29uc3Qgb2JqRm9yUmlnaHRFZGdlID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnQSc6ICcqNicsICdVJzogJyo1JywgJ0cnOiAnKjgnLCAnQyc6ICcqNycgfTtcbiAgICBjb25zdCBvYmpGb3JPZGRJbmRpY2VzID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnQSc6ICc2JywgJ1UnOiAnNScsICdHJzogJzgnLCAnQyc6ICc3JyB9O1xuICAgIGNvbnN0IG9iakZvckV2ZW5JbmRpY2VzID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLFxuICAgICAgICAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLCAnQSc6ICcyJywgJ1UnOiAnMScsICdHJzogJzQnLCAnQyc6ICczJyB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxBfFV8R3xDKS9nLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgICBpZiAoY291bnQgPCAyKVxuICAgICAgICAgICAgcmV0dXJuIG9iakZvckxlZnRFZGdlW3hdO1xuICAgICAgICBpZiAoY291bnQgPiBudWNsZW90aWRlcy5sZW5ndGggLSAzKVxuICAgICAgICAgICAgcmV0dXJuIG9iakZvclJpZ2h0RWRnZVt4XTtcbiAgICAgICAgcmV0dXJuIChjb3VudCAlIDIgPT0gMCkgPyBvYmpGb3JFdmVuSW5kaWNlc1t4XSA6IG9iakZvck9kZEluZGljZXNbeF07XG4gICAgfSk7XG59XG4vL25hbWU6IHNpUm5hTnVjbGVvdGlkZXNUb0djcnNcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogUk5BIG51Y2xlb3RpZGVzfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IEdDUlN9XG5leHBvcnQgZnVuY3Rpb24gc2lSbmFOdWNsZW90aWRlc1RvR2NycyhudWNsZW90aWRlcykge1xuICAgIGxldCBjb3VudCA9IC0xO1xuICAgIGNvbnN0IG9iakZvckxlZnRFZGdlID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnQSc6ICdtQXBzJywgJ1UnOiAnbVVwcycsICdHJzogJ21HcHMnLCAnQyc6ICdtQ3BzJyB9O1xuICAgIGNvbnN0IG9iakZvclJpZ2h0RWRnZSA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ0EnOiAncHNtQScsICdVJzogJ3BzbVUnLCAnRyc6ICdwc21HJywgJ0MnOiAncHNtQycgfTtcbiAgICBjb25zdCBvYmpGb3JFdmVuSW5kaWNlcyA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJyxcbiAgICAgICAgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJywgJ0EnOiAnZkEnLCAnVSc6ICdmVScsICdHJzogJ2ZHJywgJ0MnOiAnZkMnIH07XG4gICAgY29uc3Qgb2JqRm9yT2RkSW5kaWNlcyA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJyxcbiAgICAgICAgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJywgJ0EnOiAnbUEnLCAnVSc6ICdtVScsICdHJzogJ21HJywgJ0MnOiAnbUMnIH07XG4gICAgcmV0dXJuIG51Y2xlb3RpZGVzLnJlcGxhY2UoLyhcXChpbnZhYmFzaWNcXCl8XFwoR2FsTkFjLTItSk5KXFwpfEF8VXxHfEMpL2csIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIGlmIChjb3VudCA8IDIpXG4gICAgICAgICAgICByZXR1cm4gb2JqRm9yTGVmdEVkZ2VbeF07XG4gICAgICAgIGlmIChjb3VudCA+IG51Y2xlb3RpZGVzLmxlbmd0aCAtIDMpXG4gICAgICAgICAgICByZXR1cm4gb2JqRm9yUmlnaHRFZGdlW3hdO1xuICAgICAgICByZXR1cm4gKGNvdW50ICUgMiA9PSAwKSA/IG9iakZvckV2ZW5JbmRpY2VzW3hdIDogb2JqRm9yT2RkSW5kaWNlc1t4XTtcbiAgICB9KTtcbn1cbi8vbmFtZTogc2lSbmFOdWNsZW90aWRlVG9BeG9sYWJzU2Vuc2VTdHJhbmRcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogUk5BIG51Y2xlb3RpZGVzfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IEF4b2xhYnN9XG5leHBvcnQgZnVuY3Rpb24gc2lSbmFOdWNsZW90aWRlVG9BeG9sYWJzU2Vuc2VTdHJhbmQobnVjbGVvdGlkZXMpIHtcbiAgICBsZXQgY291bnQgPSAtMTtcbiAgICBjb25zdCBvYmpGb3JMZWZ0RWRnZSA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ0EnOiAnYXMnLCAnVSc6ICd1cycsICdHJzogJ2dzJywgJ0MnOiAnY3MnIH07XG4gICAgY29uc3Qgb2JqRm9yU29tZUluZGljZXMgPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsXG4gICAgICAgICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsICdBJzogJ0FmJywgJ1UnOiAnVWYnLCAnRyc6ICdHZicsICdDJzogJ0NmJyB9O1xuICAgIGNvbnN0IG9iaiA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ0EnOiAnYScsICdVJzogJ3UnLCAnRyc6ICdnJywgJ0MnOiAnYycgfTtcbiAgICByZXR1cm4gbnVjbGVvdGlkZXMucmVwbGFjZSgvKFxcKGludmFiYXNpY1xcKXxcXChHYWxOQWMtMi1KTkpcXCl8QXxVfEd8QykvZywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgaWYgKGNvdW50IDwgMilcbiAgICAgICAgICAgIHJldHVybiBvYmpGb3JMZWZ0RWRnZVt4XTtcbiAgICAgICAgaWYgKGNvdW50ID09IDYgfHwgKGNvdW50ID4gNyAmJiBjb3VudCA8IDExKSlcbiAgICAgICAgICAgIHJldHVybiBvYmpGb3JTb21lSW5kaWNlc1t4XTtcbiAgICAgICAgaWYgKGNvdW50ID09IG51Y2xlb3RpZGVzLmxlbmd0aCAtIDEpXG4gICAgICAgICAgICByZXR1cm4gJ2EnO1xuICAgICAgICByZXR1cm4gb2JqW3hdO1xuICAgIH0pO1xufVxuLy9uYW1lOiBzaVJuYU51Y2xlb3RpZGVUb0F4b2xhYnNBbnRpc2Vuc2VTdHJhbmRcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogUk5BIG51Y2xlb3RpZGVzfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IEF4b2xhYnN9XG5leHBvcnQgZnVuY3Rpb24gc2lSbmFOdWNsZW90aWRlVG9BeG9sYWJzQW50aXNlbnNlU3RyYW5kKG51Y2xlb3RpZGVzKSB7XG4gICAgbGV0IGNvdW50ID0gLTE7XG4gICAgY29uc3Qgb2JqRm9yU21hbGxMaW5rYWdlcyA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJyxcbiAgICAgICAgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJywgJ0EnOiAnYXMnLCAnVSc6ICd1cycsICdHJzogJ2dzJywgJ0MnOiAnY3MnIH07XG4gICAgY29uc3Qgb2JqRm9yQmlnTGlua2FnZXMgPSB7ICcoaW52YWJhc2ljKSc6ICcoaW52YWJhc2ljKScsXG4gICAgICAgICcoR2FsTkFjLTItSk5KKSc6ICcoR2FsTkFjLTItSk5KKScsICdBJzogJ0FmcycsICdVJzogJ1VmcycsICdHJzogJ0dmcycsICdDJzogJ0NmcycgfTtcbiAgICBjb25zdCBvYmpGb3JTb21lSW5kaWNlcyA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJyxcbiAgICAgICAgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJywgJ0EnOiAnQWYnLCAnVSc6ICdVZicsICdHJzogJ0dmJywgJ0MnOiAnQ2YnIH07XG4gICAgY29uc3Qgb2JqID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLFxuICAgICAgICAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLCAnQSc6ICdhJywgJ1UnOiAndScsICdHJzogJ2cnLCAnQyc6ICdjJyB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxBfFV8R3xDKS9nLCBmdW5jdGlvbiAoeCkge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgICBpZiAoY291bnQgPiAxOSAmJiBjb3VudCA8IDIyKVxuICAgICAgICAgICAgcmV0dXJuIG9iakZvclNtYWxsTGlua2FnZXNbeF07XG4gICAgICAgIGlmIChjb3VudCA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuICd1cyc7XG4gICAgICAgIGlmIChjb3VudCA9PSAxKVxuICAgICAgICAgICAgcmV0dXJuIG9iakZvckJpZ0xpbmthZ2VzW3hdO1xuICAgICAgICByZXR1cm4gKGNvdW50ID09IDUgfHwgY291bnQgPT0gNyB8fCBjb3VudCA9PSA4IHx8IGNvdW50ID09IDEzIHx8IGNvdW50ID09IDE1KSA/IG9iakZvclNvbWVJbmRpY2VzW3hdIDogb2JqW3hdO1xuICAgIH0pO1xufVxuLy9uYW1lOiBnY3JzVG9OdWNsZW90aWRlc1xuLy9pbnB1dDogc3RyaW5nIG51Y2xlb3RpZGVzIHtzZW1UeXBlOiBHQ1JTfVxuLy9vdXRwdXQ6IHN0cmluZyByZXN1bHQge3NlbVR5cGU6IFJOQSBudWNsZW90aWRlc31cbmV4cG9ydCBmdW5jdGlvbiBnY3JzVG9OdWNsZW90aWRlcyhudWNsZW90aWRlcykge1xuICAgIGNvbnN0IG9iaiA9IHsgJyhpbnZhYmFzaWMpJzogJyhpbnZhYmFzaWMpJywgJyhHYWxOQWMtMi1KTkopJzogJyhHYWxOQWMtMi1KTkopJyxcbiAgICAgICAgJ21BcHMnOiAnQScsICdtVXBzJzogJ1UnLCAnbUdwcyc6ICdHJywgJ21DcHMnOiAnQycsICdmQXBzJzogJ0EnLCAnZlVwcyc6ICdVJywgJ2ZHcHMnOiAnRycsICdmQ3BzJzogJ0MnLFxuICAgICAgICAnZlUnOiAnVScsICdmQSc6ICdBJywgJ2ZDJzogJ0MnLCAnZkcnOiAnRycsICdtVSc6ICdVJywgJ21BJzogJ0EnLCAnbUMnOiAnQycsICdtRyc6ICdHJyxcbiAgICB9O1xuICAgIHJldHVybiBudWNsZW90aWRlcy5yZXBsYWNlKC8oXFwoaW52YWJhc2ljXFwpfFxcKEdhbE5BYy0yLUpOSlxcKXxtQXBzfG1VcHN8bUdwc3xtQ3BzfGZBcHN8ZlVwc3xmR3BzfGZDcHN8ZlV8ZkF8ZkN8Zkd8bVV8bUF8bUN8bUcpL2csIGZ1bmN0aW9uICh4KSB7IHJldHVybiBvYmpbeF07IH0pO1xufVxuLy9uYW1lOiBnY3JzVG9NZXJtYWRlMTJcbi8vaW5wdXQ6IHN0cmluZyBudWNsZW90aWRlcyB7c2VtVHlwZTogR0NSU31cbi8vb3V0cHV0OiBzdHJpbmcgcmVzdWx0IHtzZW1UeXBlOiBNZXJtYWRlIDEyIC8gc2lSTkF9XG5leHBvcnQgZnVuY3Rpb24gZ2Nyc1RvTWVybWFkZTEyKG51Y2xlb3RpZGVzKSB7XG4gICAgY29uc3Qgb2JqID0geyAnKGludmFiYXNpYyknOiAnKGludmFiYXNpYyknLCAnKEdhbE5BYy0yLUpOSiknOiAnKEdhbE5BYy0yLUpOSiknLFxuICAgICAgICAnbUFwcyc6ICdlJywgJ21VcHMnOiAnaCcsICdtR3BzJzogJ2cnLCAnbUNwcyc6ICdmJywgJ2ZBcHMnOiAnaScsICdmVXBzJzogJ2wnLCAnZkdwcyc6ICdrJywgJ2ZDcHMnOiAnaicsICdmVSc6ICdMJyxcbiAgICAgICAgJ2ZBJzogJ0knLCAnZkMnOiAnSicsICdmRyc6ICdLJywgJ21VJzogJ0gnLCAnbUEnOiAnRScsICdtQyc6ICdGJywgJ21HJzogJ0cnLFxuICAgIH07XG4gICAgcmV0dXJuIG51Y2xlb3RpZGVzLnJlcGxhY2UoLyhcXChpbnZhYmFzaWNcXCl8XFwoR2FsTkFjLTItSk5KXFwpfG1BcHN8bVVwc3xtR3BzfG1DcHN8ZkFwc3xmVXBzfGZHcHN8ZkNwc3xmVXxmQXxmQ3xmR3xtVXxtQXxtQ3xtRykvZywgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIG9ialt4XTsgfSk7XG59XG4iLCJpbXBvcnQgeyBtYXAsIHN0YWRhcmRQaG9zcGhhdGVMaW5rU21pbGVzLCBTWU5USEVTSVpFUlMsIFRFQ0hOT0xPR0lFUywgTU9ESUZJQ0FUSU9OUywgZGVsaW1pdGVyIH0gZnJvbSAnLi9tYXAnO1xuaW1wb3J0IHsgaXNWYWxpZFNlcXVlbmNlIH0gZnJvbSAnLi9zZXF1ZW5jZS1jb2Rlcy10b29scyc7XG5pbXBvcnQgeyBnZXROdWNsZW90aWRlc01vbCB9IGZyb20gJy4vbW9sLXRyYW5zZm9ybWF0aW9ucyc7XG5leHBvcnQgZnVuY3Rpb24gc2VxdWVuY2VUb01vbFYzMDAwKHNlcXVlbmNlLCBpbnZlcnRlZCA9IGZhbHNlLCBvY2xSZW5kZXIgPSBmYWxzZSwgZm9ybWF0KSB7XG4gICAgY29uc3Qgb2JqID0gZ2V0T2JqZWN0V2l0aENvZGVzQW5kU21pbGVzKHNlcXVlbmNlLCBmb3JtYXQpO1xuICAgIGxldCBjb2RlcyA9IHNvcnRCeVN0cmluZ0xlbmd0aEluRGVzY2VuZGluZ09yZGVyKE9iamVjdC5rZXlzKG9iaikpO1xuICAgIGxldCBpID0gMDtcbiAgICBjb25zdCBzbWlsZXNDb2RlcyA9IFtdO1xuICAgIGNvbnN0IGNvZGVzTGlzdCA9IFtdO1xuICAgIGNvbnN0IGxpbmtzID0gWydzJywgJ3BzJywgJyonXTtcbiAgICBjb25zdCBpbmNsdWRlc1N0YW5kYXJkTGlua0FscmVhZHkgPSBbJ2UnLCAnaCcsIC8qJ2cnLCovICdmJywgJ2knLCAnbCcsICdrJywgJ2onXTtcbiAgICBjb25zdCBkcm9wZG93bnMgPSBPYmplY3Qua2V5cyhNT0RJRklDQVRJT05TKTtcbiAgICBjb2RlcyA9IGNvZGVzLmNvbmNhdChkcm9wZG93bnMpLmNvbmNhdChkZWxpbWl0ZXIpO1xuICAgIHdoaWxlIChpIDwgc2VxdWVuY2UubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGNvZGUgPSBjb2Rlcy5maW5kKChzKSA9PiBzID09IHNlcXVlbmNlLnNsaWNlKGksIGkgKyBzLmxlbmd0aCkpO1xuICAgICAgICBpICs9IGNvZGUubGVuZ3RoO1xuICAgICAgICBpbnZlcnRlZCA/IGNvZGVzTGlzdC51bnNoaWZ0KGNvZGUpIDogY29kZXNMaXN0LnB1c2goY29kZSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29kZXNMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChkcm9wZG93bnMuaW5jbHVkZXMoY29kZXNMaXN0W2ldKSkge1xuICAgICAgICAgICAgc21pbGVzQ29kZXMucHVzaCgoaSA+PSBjb2Rlc0xpc3QubGVuZ3RoIC8gMikgP1xuICAgICAgICAgICAgICAgIE1PRElGSUNBVElPTlNbY29kZXNMaXN0W2ldXS5yaWdodCA6IE1PRElGSUNBVElPTlNbY29kZXNMaXN0W2ldXS5sZWZ0KTtcbiAgICAgICAgICAgIHNtaWxlc0NvZGVzLnB1c2goc3RhZGFyZFBob3NwaGF0ZUxpbmtTbWlsZXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGxpbmtzLmluY2x1ZGVzKGNvZGVzTGlzdFtpXSkgfHxcbiAgICAgICAgICAgICAgICBpbmNsdWRlc1N0YW5kYXJkTGlua0FscmVhZHkuaW5jbHVkZXMoY29kZXNMaXN0W2ldKSB8fFxuICAgICAgICAgICAgICAgIChpIDwgY29kZXNMaXN0Lmxlbmd0aCAtIDEgJiYgbGlua3MuaW5jbHVkZXMoY29kZXNMaXN0W2kgKyAxXSkpKVxuICAgICAgICAgICAgICAgIHNtaWxlc0NvZGVzLnB1c2gob2JqW2NvZGVzTGlzdFtpXV0pO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc21pbGVzQ29kZXMucHVzaChvYmpbY29kZXNMaXN0W2ldXSk7XG4gICAgICAgICAgICAgICAgc21pbGVzQ29kZXMucHVzaChzdGFkYXJkUGhvc3BoYXRlTGlua1NtaWxlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGdldE51Y2xlb3RpZGVzTW9sKHNtaWxlc0NvZGVzKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW5jZVRvU21pbGVzKHNlcXVlbmNlLCBpbnZlcnRlZCA9IGZhbHNlLCBmb3JtYXQpIHtcbiAgICBjb25zdCBvYmogPSBnZXRPYmplY3RXaXRoQ29kZXNBbmRTbWlsZXMoc2VxdWVuY2UsIGZvcm1hdCk7XG4gICAgbGV0IGNvZGVzID0gc29ydEJ5U3RyaW5nTGVuZ3RoSW5EZXNjZW5kaW5nT3JkZXIoT2JqZWN0LmtleXMob2JqKSk7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBzbWlsZXMgPSAnJztcbiAgICBjb25zdCBjb2Rlc0xpc3QgPSBbXTtcbiAgICBjb25zdCBsaW5rcyA9IFsncycsICdwcycsICcqJ107XG4gICAgY29uc3QgaW5jbHVkZXNTdGFuZGFyZExpbmtBbHJlYWR5ID0gWydlJywgJ2gnLCAvKidnJywqLyAnZicsICdpJywgJ2wnLCAnaycsICdqJ107XG4gICAgY29uc3QgZHJvcGRvd25zID0gT2JqZWN0LmtleXMoTU9ESUZJQ0FUSU9OUyk7XG4gICAgY29kZXMgPSBjb2Rlcy5jb25jYXQoZHJvcGRvd25zKS5jb25jYXQoZGVsaW1pdGVyKTtcbiAgICB3aGlsZSAoaSA8IHNlcXVlbmNlLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjb2RlID0gY29kZXMuZmluZCgocykgPT4gcyA9PSBzZXF1ZW5jZS5zbGljZShpLCBpICsgcy5sZW5ndGgpKTtcbiAgICAgICAgaSArPSBjb2RlLmxlbmd0aDtcbiAgICAgICAgaW52ZXJ0ZWQgPyBjb2Rlc0xpc3QudW5zaGlmdChjb2RlKSA6IGNvZGVzTGlzdC5wdXNoKGNvZGUpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvZGVzTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZHJvcGRvd25zLmluY2x1ZGVzKGNvZGVzTGlzdFtpXSkpIHtcbiAgICAgICAgICAgIHNtaWxlcyArPSAoaSA+PSBjb2Rlc0xpc3QubGVuZ3RoIC8gMikgP1xuICAgICAgICAgICAgICAgIE1PRElGSUNBVElPTlNbY29kZXNMaXN0W2ldXS5yaWdodCArIHN0YWRhcmRQaG9zcGhhdGVMaW5rU21pbGVzIDpcbiAgICAgICAgICAgICAgICBNT0RJRklDQVRJT05TW2NvZGVzTGlzdFtpXV0ubGVmdCArIHN0YWRhcmRQaG9zcGhhdGVMaW5rU21pbGVzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGxpbmtzLmluY2x1ZGVzKGNvZGVzTGlzdFtpXSkgfHxcbiAgICAgICAgICAgICAgICBpbmNsdWRlc1N0YW5kYXJkTGlua0FscmVhZHkuaW5jbHVkZXMoY29kZXNMaXN0W2ldKSB8fFxuICAgICAgICAgICAgICAgIChpIDwgY29kZXNMaXN0Lmxlbmd0aCAtIDEgJiYgbGlua3MuaW5jbHVkZXMoY29kZXNMaXN0W2kgKyAxXSkpKVxuICAgICAgICAgICAgICAgIHNtaWxlcyArPSBvYmpbY29kZXNMaXN0W2ldXTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBzbWlsZXMgKz0gb2JqW2NvZGVzTGlzdFtpXV0gKyBzdGFkYXJkUGhvc3BoYXRlTGlua1NtaWxlcztcbiAgICAgICAgfVxuICAgIH1cbiAgICBzbWlsZXMgPSBzbWlsZXMucmVwbGFjZSgvT08vZywgJ08nKTtcbiAgICByZXR1cm4gKChsaW5rcy5pbmNsdWRlcyhjb2Rlc0xpc3RbY29kZXNMaXN0Lmxlbmd0aCAtIDFdKSAmJlxuICAgICAgICBjb2Rlc0xpc3QubGVuZ3RoID4gMSAmJlxuICAgICAgICAhaW5jbHVkZXNTdGFuZGFyZExpbmtBbHJlYWR5LmluY2x1ZGVzKGNvZGVzTGlzdFtjb2Rlc0xpc3QubGVuZ3RoIC0gMl0pKSB8fFxuICAgICAgICBkcm9wZG93bnMuaW5jbHVkZXMoY29kZXNMaXN0W2NvZGVzTGlzdC5sZW5ndGggLSAxXSkgfHxcbiAgICAgICAgaW5jbHVkZXNTdGFuZGFyZExpbmtBbHJlYWR5LmluY2x1ZGVzKGNvZGVzTGlzdFtjb2Rlc0xpc3QubGVuZ3RoIC0gMV0pKSA/XG4gICAgICAgIHNtaWxlcyA6XG4gICAgICAgIHNtaWxlcy5zbGljZSgwLCBzbWlsZXMubGVuZ3RoIC0gc3RhZGFyZFBob3NwaGF0ZUxpbmtTbWlsZXMubGVuZ3RoICsgMSk7XG59XG5mdW5jdGlvbiBnZXRPYmplY3RXaXRoQ29kZXNBbmRTbWlsZXMoc2VxdWVuY2UsIGZvcm1hdCkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgIGlmIChmb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICBmb3IgKGNvbnN0IHN5bnRoZXNpemVyIG9mIE9iamVjdC5rZXlzKG1hcCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGVjaG5vbG9neSBvZiBPYmplY3Qua2V5cyhtYXBbc3ludGhlc2l6ZXJdKSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29kZSBvZiBPYmplY3Qua2V5cyhtYXBbc3ludGhlc2l6ZXJdW3RlY2hub2xvZ3ldKSlcbiAgICAgICAgICAgICAgICAgICAgb2JqW2NvZGVdID0gbWFwW3N5bnRoZXNpemVyXVt0ZWNobm9sb2d5XVtjb2RlXS5TTUlMRVM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgdGVjaG5vbG9neSBvZiBPYmplY3Qua2V5cyhtYXBbZm9ybWF0XSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29kZSBvZiBPYmplY3Qua2V5cyhtYXBbZm9ybWF0XVt0ZWNobm9sb2d5XSkpXG4gICAgICAgICAgICAgICAgb2JqW2NvZGVdID0gbWFwW2Zvcm1hdF1bdGVjaG5vbG9neV1bY29kZV0uU01JTEVTO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9ialtkZWxpbWl0ZXJdID0gJyc7XG4gICAgLy8gVE9ETzogY3JlYXRlIG9iamVjdCBiYXNlZCBmcm9tIHN5bnRoZXNpemVyIHR5cGUgdG8gYXZvaWQga2V5KGNvZGVzKSBkdXBsaWNhdGVzXG4gICAgY29uc3Qgb3V0cHV0ID0gaXNWYWxpZFNlcXVlbmNlKHNlcXVlbmNlLCBmb3JtYXQpO1xuICAgIGlmIChvdXRwdXQuc3ludGhlc2l6ZXIuaW5jbHVkZXMoU1lOVEhFU0laRVJTLk1FUk1BREVfMTIpKVxuICAgICAgICBvYmpbJ2cnXSA9IG1hcFtTWU5USEVTSVpFUlMuTUVSTUFERV8xMl1bVEVDSE5PTE9HSUVTLlNJX1JOQV1bJ2cnXS5TTUlMRVM7XG4gICAgZWxzZSBpZiAob3V0cHV0LnN5bnRoZXNpemVyLmluY2x1ZGVzKFNZTlRIRVNJWkVSUy5BWE9MQUJTKSlcbiAgICAgICAgb2JqWydnJ10gPSBtYXBbU1lOVEhFU0laRVJTLkFYT0xBQlNdW1RFQ0hOT0xPR0lFUy5TSV9STkFdWydnJ10uU01JTEVTO1xuICAgIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBzb3J0QnlTdHJpbmdMZW5ndGhJbkRlc2NlbmRpbmdPcmRlcihhcnJheSkge1xuICAgIHJldHVybiBhcnJheS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoOyB9KTtcbn1cbiIsImltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBnZXRBbGxDb2Rlc09mU3ludGhlc2l6ZXIgfSBmcm9tICcuL3NlcXVlbmNlLWNvZGVzLXRvb2xzJztcbmV4cG9ydCBjb25zdCBkZWxpbWl0ZXIgPSAnOyc7XG5leHBvcnQgY29uc3QgU1lOVEhFU0laRVJTID0ge1xuICAgIFJBV19OVUNMRU9USURFUzogJ1JhdyBOdWNsZW90aWRlcycsXG4gICAgQklPU1BSSU5HOiAnQmlvU3ByaW5nIENvZGVzJyxcbiAgICBHQ1JTOiAnSmFuc3NlbiBHQ1JTIENvZGVzJyxcbiAgICBBWE9MQUJTOiAnQXhvbGFicyBDb2RlcycsXG4gICAgTUVSTUFERV8xMjogJ01lcm1hZGUgMTInLFxuICAgIExDTVM6ICdMQ01TJyxcbn07XG5leHBvcnQgY29uc3QgVEVDSE5PTE9HSUVTID0ge1xuICAgIEROQTogJ0ROQScsXG4gICAgUk5BOiAnUk5BJyxcbiAgICBBU09fR0FQTUVSUzogJ0ZvciBBU08gR2FwbWVycycsXG4gICAgU0lfUk5BOiAnRm9yIDJcXCctT01lIGFuZCAyXFwnLUYgbW9kaWZpZWQgc2lSTkEnLFxufTtcbmV4cG9ydCBjb25zdCBDT0xfTkFNRVMgPSB7XG4gICAgQ0hFTUlTVFJZOiAnQ2hlbWlzdHJ5JyxcbiAgICBOVU1CRVI6ICdOdW1iZXInLFxuICAgIFRZUEU6ICdUeXBlJyxcbiAgICBDSEVNSVNUUllfTkFNRTogJ0NoZW1pc3RyeSBOYW1lJyxcbiAgICBJTlRFUk5BTF9DT01QT1VORF9JRDogJ0ludGVybmFsIGNvbXBvdW5kIElEJyxcbiAgICBJRFA6ICdJRFAnLFxuICAgIFNFUVVFTkNFOiAnU2VxdWVuY2UnLFxuICAgIENPTVBPVU5EX05BTUU6ICdDb21wb3VuZCBOYW1lJyxcbiAgICBDT01QT1VORF9DT01NRU5UUzogJ0NvbXBvdW5kIENvbW1lbnRzJyxcbiAgICBTQUxUOiAnU2FsdCcsXG4gICAgRVFVSVZBTEVOVFM6ICdFcXVpdmFsZW50cycsXG4gICAgUFVSSVRZOiAnUHVyaXR5JyxcbiAgICBDUERfTVc6ICdDcGQgTVcnLFxuICAgIFNBTFRfTUFTUzogJ1NhbHQgbWFzcycsXG4gICAgQkFUQ0hfTVc6ICdCYXRjaCBNVycsXG4gICAgU09VUkNFOiAnU291cmNlJyxcbiAgICBJQ0Q6ICdJQ0QnLFxuICAgIE9XTkVSOiAnT3duZXInLFxufTtcbi8vIGludGVyZmFjZSBDT0RFUyB7XG4vLyB9XG5leHBvcnQgY29uc3QgTU9ESUZJQ0FUSU9OUyA9IHtcbiAgICAnKGludmFiYXNpYyknOiB7XG4gICAgICAgIG1vbGVjdWxhcldlaWdodDogMTE4LjEzLFxuICAgICAgICBsZWZ0OiAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPJyxcbiAgICAgICAgcmlnaHQ6ICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ08nLFxuICAgIH0sXG4gICAgJyhHYWxOQWMtMi1KTkopJzoge1xuICAgICAgICBtb2xlY3VsYXJXZWlnaHQ6IDEyNzMuMyxcbiAgICAgICAgbGVmdDogJ0MoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAgICAgICAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAgICAgICAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQylOQyg9TylDQ0NDKD1PKU5DQyhPKUNPJyxcbiAgICAgICAgcmlnaHQ6ICdPQ0MoTylDTkMoPU8pQ0NDQyg9TylOQyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScsXG4gICAgfSxcbn07XG5leHBvcnQgY29uc3Qgc3RhZGFyZFBob3NwaGF0ZUxpbmtTbWlsZXMgPSAnT1AoPU8pKE8pTyc7XG5leHBvcnQgY29uc3QgbWFwID0ge1xuICAgICdSYXcgTnVjbGVvdGlkZXMnOiB7XG4gICAgICAgICdETkEnOiB7XG4gICAgICAgICAgICAnQSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdBZGVuaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzEzLjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdUJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ1R5cm9zaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzA0LjIsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnZFQnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyg9TylOQzIoPU8pKUNbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ0cnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnR3VhbmluZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMyOS4yMSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnQyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdDeXRvc2luZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDI4OS4xOCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgICdSTkEnOiB7XG4gICAgICAgICAgICAnQSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdBZGVuaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzEzLjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdVJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ1VyYWNpbCcsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMwNi4xNyxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyVScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oTylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ0cnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnR3VhbmluZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMyOS4yMSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnQyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdDeXRvc2luZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDI4OS4xOCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnQmlvU3ByaW5nIENvZGVzJzoge1xuICAgICAgICAnRm9yIEFTTyBHYXBtZXJzJzoge1xuICAgICAgICAgICAgJzUnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ01PRS01TWUtclUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNzguMjcsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnclUnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyg9TylOQzIoPU8pKVtDQEhdKE9DQ09DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnNic6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnTU9FLXJBJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzg3LjI5LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQ0NPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzcnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ01PRS01TWUtckMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNzcuMjksXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyhOKT1OQzIoPU8pKVtDQEhdKE9DQ09DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnOCc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnTU9FLXJHJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogNDAzLjI4LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JHJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQ0NPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzknOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnNS1NZXRoeWwtZEMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDMuMjEsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnZEMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyhOKT1OQzIoPU8pKUNbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJyonOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAncHMgbGlua2FnZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDE2LjA3LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPUCg9TykoUylPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnQSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdBZGVuaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzEzLjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdDJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ0N5dG9zaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMjg5LjE4LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdHJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ0d1YW5pbmUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMjkuMjEsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnZEcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKUNbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1QnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnVHlyb3NpbmUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDQuMixcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkVCcsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUMoQylDKD1PKU5DMig9TykpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgICdGb3IgMlxcJy1PTWUgYW5kIDJcXCctRiBtb2RpZmllZCBzaVJOQSc6IHtcbiAgICAgICAgICAgICcxJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCctZmx1b3JvLVUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDguMTYsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnclUnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcyJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCctZmx1b3JvLUEnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMzEuMixcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oRilbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzMnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tQycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMwNy4xOCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzQnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tRycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM0Ny4xOSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oRilbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzUnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yVScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMyMC4yLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JVJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzYnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yQScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM0My4yNCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICc3Jzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtckMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMTkuMjEsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnOCc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJHJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzU5LjI0LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JHJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJyonOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAncHMgbGlua2FnZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDE2LjA3LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPUCg9TykoUylPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICAnQXhvbGFicyBDb2Rlcyc6IHtcbiAgICAgICAgJ0ZvciAyXFwnLU9NZSBhbmQgMlxcJy1GIG1vZGlmaWVkIHNpUk5BJzoge1xuICAgICAgICAgICAgJ1VmJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCctZmx1b3JvLVUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDguMTYsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnclUnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdBZic6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1BJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzMxLjIsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckEnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdDZic6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1DJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzA3LjE4LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnR2YnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tRycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM0Ny4xOSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oRilbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ3UnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yVScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMyMC4yLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JVJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2EnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yQScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM0My4yNCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdjJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtckMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMTkuMjEsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJHJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzU5LixcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdzJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ3BzIGxpbmthZ2UnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAxNi4wNyxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT1AoPU8pKFMpTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgJ0phbnNzZW4gR0NSUyBDb2Rlcyc6IHtcbiAgICAgICAgJ0ZvciBBU08gR2FwbWVycyc6IHtcbiAgICAgICAgICAgICdtb2VUJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdNT0UtNU1lLXJVJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzc4LjI3LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JVJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9QyhDKUMoPU8pTkMyKD1PKSlbQ0BIXShPQ0NPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ21vZUEnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ01PRS1yQScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM4Ny4yOSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0NDT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdtb2U1bUMnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ01PRS01TWUtckMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNzcuMjksXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyhOKT1OQzIoPU8pKVtDQEhdKE9DQ09DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnKDVtKW1vZUMnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ01PRS01TWUtckMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNzcuMjksXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyhOKT1OQzIoPU8pKVtDQEhdKE9DQ09DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnbW9lRyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnTU9FLXJHJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogNDAzLjI4LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JHJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQ0NPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzVtQyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICc1LU1ldGh5bC1kQycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMwMy4yOCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUMoQylDKE4pPU5DMig9TykpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnKDVtKUMnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnNS1NZXRoeWwtZEMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDMuMjgsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnZEMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyhOKT1OQzIoPU8pKUNbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ3BzJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ3BzIGxpbmthZ2UnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAxNi4wNyxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT1AoPU8pKFMpTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ3MnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAncHMgbGlua2FnZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDE2LjA3LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPUCg9TykoUylPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnQSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdBZGVuaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzEzLjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdkQSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdBZGVuaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzEzLjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdDJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ0N5dG9zaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMjg5LjE4LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdkQyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdDeXRvc2luZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDI4OS4xOCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdkQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpQ1tDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnRyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdHdWFuaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzI5LjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RHJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdkRyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdHdWFuaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzI5LjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ2RHJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilDW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdUJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ1R5cm9zaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzA0LjIsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnZFQnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyg9TylOQzIoPU8pKUNbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2RUJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ1R5cm9zaW5lJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzA0LjIsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnZFQnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyg9TylOQzIoPU8pKUNbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ3JBJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ0FkZW5pbmUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMjkuMjEsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckEnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE8pW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdyQyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdDeXRvc2luZScsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDMwNS4xOCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyQycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oTylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ3JHJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJ0d1YW5pbmUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNDUuMjEsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE8pW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdyVSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICdVcmFjaWwnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDYuMTcsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnclUnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE8pW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgJ0ZvciAyXFwnLU9NZSBhbmQgMlxcJy1GIG1vZGlmaWVkIHNpUk5BJzoge1xuICAgICAgICAgICAgJ2ZVJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCctZmx1b3JvLVUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDguMTYsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnclUnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdmQSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1BJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzMxLjIsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckEnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdmQyc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1DJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzA3LjE4LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZkcnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJy1mbHVvcm8tRycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM0Ny4xOSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oRilbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ21VJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtclUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMjAuMixcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyVScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdtQSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJBJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzQzLjI0LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ21DJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtckMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMTkuMjEsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnbUcnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yRycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM1OS4yNCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgJ090aGVycyc6IHt9LFxuICAgIH0sXG4gICAgJ01lcm1hZGUgMTInOiB7XG4gICAgICAgICdGb3IgMlxcJy1PTWUgYW5kIDJcXCctRiBtb2RpZmllZCBzaVJOQSc6IHtcbiAgICAgICAgICAgICdlJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtckEtcHMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNTkuMzEsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckEnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUylPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnaCc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJVLXBzJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzM2LjI3LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JVJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2cnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yRy1wcycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM3NS4zMSxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdmJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtckMtcHMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMzUuMjgsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUylPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnaSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1BLXBzJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzQ3LjI3LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JBJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoUylPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnbCc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1VLXBzJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzI0LjIzLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JVJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoUylPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnayc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1HLXBzJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzYzLjI2LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JHJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoUylPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnaic6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1DLXBzJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzIzLjI1LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoUylPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnTCc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1VJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzA4LjE2LFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JVJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnSSc6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnLWZsdW9yby1BJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzMxLjIsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckEnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdKJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCctZmx1b3JvLUMnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMDcuMTgsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckMnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdLJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCctZmx1b3JvLUcnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNDcuMTksXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckcnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdIJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtclUnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzMjAuMixcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyVScsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdFJzoge1xuICAgICAgICAgICAgICAgICduYW1lJzogJzJcXCdPTWUtckEnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiAzNDMuMjQsXG4gICAgICAgICAgICAgICAgJ25vcm1hbGl6ZWQnOiAnckEnLFxuICAgICAgICAgICAgICAgICdTTUlMRVMnOiAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnRic6IHtcbiAgICAgICAgICAgICAgICAnbmFtZSc6ICcyXFwnT01lLXJDJyxcbiAgICAgICAgICAgICAgICAnd2VpZ2h0JzogMzE5LjIxLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJzogJ3JDJyxcbiAgICAgICAgICAgICAgICAnU01JTEVTJzogJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xTycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ0cnOiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiAnMlxcJ09NZS1yRycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDM1OS4yNCxcbiAgICAgICAgICAgICAgICAnbm9ybWFsaXplZCc6ICdyRycsXG4gICAgICAgICAgICAgICAgJ1NNSUxFUyc6ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIC8vICdMQ01TJzoge1xuICAgIC8vICAgJ0ZvciAyXFwnLU9NZSBhbmQgMlxcJy1GIG1vZGlmaWVkIHNpUk5BJzoge1xufTtcbmV4cG9ydCBjb25zdCBsY21zVG9HY3JzID0gYExDTVMsIEdDUlNcbkEsIEFcbkMsIENcbi81bUMvLCAoNW0pQ1xuRywgR1xuVCwgVFxuckEsIHJBXG5yQywgckNcbnJHLCByR1xuclUsIHJVXG5tQSwgbUFcbm1DLCBtQ1xuLzVtbUMvLCAoNW0pbUNcbm1HLCBtR1xubVUsIG1VXG5mQSwgZkFcbmZDLCBmQ1xuLzVtZkMvLCAoNW0pZkNcbmZHLCBmR1xuZlUsIGZVXG4vYWZBLywgYWZBXG4vYWZDLywgYWZDXG4vYWZHLywgYWZHXG4vYWZVLywgYWZVXG4rQSwgbG5hIEFcbitDLCBsbmEgQ1xuK0csIGxuYSBHXG4rVCwgbG5hIFRcbi9tb2VBLywgbW9lQVxuL21vZUMvLCBtb2VDXG4vNW1tb2VDLywgKDVtKW1vZUNcbi9tb2VHLywgbW9lR1xuL21vZVQvLCBtb2VUXG4vbW9lVS8sIG1vZVVcbi94QS8sIEFucFxuL3hDLywgQ25wXG4veDVtQy8sICg1bSlDbnBcbi94Ry8sIEducFxuL3hULywgVG5wXG4veHJBLywgckFucFxuL3hyQy8sIHJDbnBcbi94ckcvLCByR25wXG4veHJVLywgclVucFxuL3htQS8sIG1BbnBcbi94bUMvLCBtQ25wXG4veDVtbUMvLCAoNW0pbUNucFxuL3htRy8sIG1HbnBcbi94bVUvLCBtVW5wXG4veGZBLywgZkFucFxuL3hmQy8sIGZDbnBcbi94ZkcvLCBmR25wXG4veGZULywgZlRucFxuL3hmVS8sIGZVbnBcbi94YWZBLywgYWZBbnBcbi94YWZDLywgYWZDbnBcbi94YWZHLywgYWZHbnBcbi94YWZVLywgYWZVbnBcbi94ZUEvLCBlQW5wXG4veGVDLywgZUNucFxuL3hlRy8sIGVHbnBcbi94ZVUvLCBlVW5wXG4veG1vZUEvLCBtb2VBbnBcbi94bW9lQy8sIG1vZUNucFxuL3g1bW1vZUMvLCAoNW0pbW9lQ25wXG4veG1vZUcvLCBtb2VHbnBcbi94bW9lVS8sIG1vZVVucFxuL1VOQS1BLywgKFVOQS1BKVxuL1VOQS1DLywgKFVOQS1DKVxuL1VOQS1HLywgKFVOQS1HKVxuL1VOQS1ULywgKFVOQS1UKVxuL1VOQS1VLywgKFVOQS1VKVxuL0dOQS1BLywgKEdOQS1BKVxuL0dOQS1DLywgKEdOQS1DKVxuL0dOQS1HLywgKEdOQS1HKVxuL0dOQS1ULywgKEdOQS1UKVxuL0dOQS1VLywgKEdOQS1VKVxuLzVDaG9sVEVHLywgKDUtQ2hvbFRFRylcbi8zQ2hvbFRFRy8sIChURUdDaG9sLTMpXG4vVG9jby8sIFRvY29cbi9QYWxtLywgUGFsbVxuL0dhbE5BYy8sIEdhbE5BY1xuL0dhbE5BYzIvLCBHYWxOQWMyXG4vR2FsTkFjMy8sIEdhbE5BYzNcbi9HYWxOQWM2LywgR2FsTkFjNlxuL0dhbE5BYzcvLCBHYWxOQWM3XG4vR2FsTkFjOS8sIEdhbE5BYzlcbi9HYWxOQWMxNC8sIEdhbE5BYzE0XG4vTkFHMzcvLCBOQUczN1xuL0hFRy8sIChIRUcpXG4vVEVHLywgKFRFRylcbi9BbW1DNi8sIChOSEM2KVxuL0FtbUM3LywgKE5IQzcpXG4vQW1tQzEyLywgKE5IQzEyKVxuL2ludkFiLywgKGludmFiYXNpYylcbi9pbnZkVC8sIChpbnZkVClcbi9WUG1VLywgKHZpbnUpXG4qLCBwc1xuLzItQzE2VS8sIDItQzE2VSBcbi8yLUMxOHc5VS8sIDItQzE4dzlVXG4vSkRpLVBhbG0vLCBKRGktUGFsbVxuL0oyLUNPTkMxNlUvLCBKMi1DT05DMTZVXG4vSjItQzNOQzE2VS8sIEoyLUMzTkMxNlVcbi9KLUMxNUFkYS8sIEotQzE1QWRhXG4vSi0yQzE1QWRhVS8sIEotMkMxNUFkYVVcbi9KLUMxNk5DNi8sIEotQzE2TkM2XG4vUjItQzZOSC1VLywgUjItQzZOSC1VXG4vSi1NMS8sIEotTTFcbi9KLUIxLywgSi1CMVxuL0otQjIvLCBKLUIyXG4vSi1NMi8sIEotTTJcbi8yLUMxNkMvLCAyLUMxNkNcbi8yLUMxNkEvLCAyLUMxNkFcbi8yLUMxNkcvLCAyLUMxNkdcbi9SMi1DNk5ILUcvLCBSMi1DNk5ILUdcbi9SMi1DNk5ILUMvLCBSMi1DNk5ILUNcbi9KMi1DT05DMTZBLywgSjItQ09OQzE2QVxuL0oyLUNPTkMxNkMvLCBKMi1DT05DMTZDXG4vSjItQ09OQzE2Ry8sIEoyLUNPTkMxNkdcbi9KMi1DMTVBZGFDLywgSjItQzE1QWRhQ1xuL0oyLU0yVS8sIEoyLU0yVVxuL0oyLUIyVS8sIEoyLUIyVVxuL0oyLUMzTkMxNkMvLCBKMi1DM05DMTZDXG4vSjItQzNOQzE2Ry8sIEoyLUMzTkMxNkdcbi9SMi1DNk5ILUEvLCBSMi1DNk5ILUFcbi9KMi1DMTVBZGFBLywgSjItQzE1QWRhQVxuL0oyLUMzTkMxNkEvLCBKMi1DM05DMTZBXG4vSi1DNS1TRVItMS8sIEotQzUtU0VSLTFcbi9KLUMxNi1TRVItMS8sIEotQzE2LVNFUi0xXG4vSi1BMi8sIEotQTJcbi9KLUExLywgSi1BMVxuL0oyLUMxNUFkYUcvLCBKMi1DMTVBZGFHXG4vSi1DMTZOQXNwLywgSi1DMTZOQXNwXG4vSjItQzE2TkM2VS8sIEoyLUMxNk5DNlVcbi9KLUM1LVJFQk8tMS8sIEotQzUtUkVCTy0xXG4vSi1DMTYtUkVCTy0xLywgSi1DMTYtUkVCTy0xXG4vSi1DMTYtSU5ELTEvLCBKLUMxNi1JTkQtMVxuL0otQzUtSU5ELTEvLCBKLUM1LUlORC0xXG4vSi0xQzE1QWRhLTJNYW4vLCBKLTFDMTVBZGEtMk1hblxuL0pHLTFDMTVBZGEtMjNEaU1hbi8sIEpHLTFDMTVBZGEtMiwzRGlNYW5cbi9KLVRyaU1hblBDLywgSi1UcmlNYW5QQ1xuL0otdHJpTWFuUE8vLCBKLXRyaU1hblBPXG4vSi1BNC8sIEotQTRcbi9KLUFyYS0xLywgSi1BcmEtMVxuL0otQXJhLTIvLCBKLUFyYS0yXG4vSi1BY0NTLywgSi1BY0NTXG4vSi1DYkNTLywgSi1DYkNTXG4vSi1NdENELywgSi1NdENEYDtcbmZ1bmN0aW9uIGRpZmZlcmVuY2VPZlR3b0FycmF5cyhhLCBiKSB7XG4gICAgcmV0dXJuIGEuZmlsdGVyKCh4KSA9PiAhYi5pbmNsdWRlcyh4KSk7XG59XG5jb25zdCBjb2Rlc1dpdGhTbWlsZXMgPSBnZXRBbGxDb2Rlc09mU3ludGhlc2l6ZXIoU1lOVEhFU0laRVJTLkdDUlMpO1xuY29uc3QgYWxsR2Nyc0NvZGVzID0gREcuRGF0YUZyYW1lLmZyb21Dc3YobGNtc1RvR2NycykuZ2V0Q29sKCdHQ1JTJykudG9MaXN0KCk7XG5leHBvcnQgY29uc3QgZ2Nyc0NvZGVzV2l0aG91dFNtaWxlcyA9IGRpZmZlcmVuY2VPZlR3b0FycmF5cyhhbGxHY3JzQ29kZXMsIGNvZGVzV2l0aFNtaWxlcyk7XG5mb3IgKGNvbnN0IGUgb2YgZ2Nyc0NvZGVzV2l0aG91dFNtaWxlcylcbiAgICBtYXBbU1lOVEhFU0laRVJTLkdDUlNdWydPdGhlcnMnXVtlXSA9IHsgJ1NNSUxFUyc6ICcnIH07XG4iLCJjb25zdCBQSE9TSEFURSA9IGBcbkRhdGFncm9rIG1vbm9tZXIgbGlicmFyeSBOdWNsZW90aWRlc1xuXG4gIDAgIDAgIDAgIDAgIDAgIDAgICAgICAgICAgICAgIDAgVjMwMDBcbk0gIFYzMCBCRUdJTiBDVEFCXG5NICBWMzAgQ09VTlRTIDUgNCAwIDAgMFxuTSAgVjMwIEJFR0lOIEFUT01cbk0gIFYzMCAxIE8gLTEuNSAwIDAgMFxuTSAgVjMwIDIgUCAwIDAgMCAwXG5NICBWMzAgMyBPIDAgMSAwIDBcbk0gIFYzMCA0IE8gMCAtMSAwIDBcbk0gIFYzMCA1IE8gMS41IDAgMCAwXG5NICBWMzAgRU5EIEFUT01cbk0gIFYzMCBCRUdJTiBCT05EXG5NICBWMzAgMSAxIDEgMlxuTSAgVjMwIDIgMiAyIDNcbk0gIFYzMCAzIDEgMiA0XG5NICBWMzAgNCAxIDIgNVxuTSAgVjMwIEVORCBCT05EXG5NICBWMzAgRU5EIENUQUJcbk0gIFYzMCBCRUdJTiBDT0xMRUNUSU9OXG5NICBWMzAgRU5EIENPTExFQ1RJT05cbk0gIEVORGA7XG5jb25zdCBUSElPUEhPU0hBVEUgPSBgXG5EYXRhZ3JvayBtb25vbWVyIGxpYnJhcnkgTnVjbGVvdGlkZXNcblxuICAwICAwICAwICAwICAwICAwICAgICAgICAgICAgICAwIFYzMDAwXG5NICBWMzAgQkVHSU4gQ1RBQlxuTSAgVjMwIENPVU5UUyA1IDQgMCAwIDBcbk0gIFYzMCBCRUdJTiBBVE9NXG5NICBWMzAgMSBPIC0xLjUgMCAwIDBcbk0gIFYzMCAyIFAgMCAwIDAgMFxuTSAgVjMwIDMgTyAwIDEgMCAwXG5NICBWMzAgNCBTIDAgLTEgMCAwXG5NICBWMzAgNSBPIDEuNSAwIDAgMFxuTSAgVjMwIEVORCBBVE9NXG5NICBWMzAgQkVHSU4gQk9ORFxuTSAgVjMwIDEgMSAxIDJcbk0gIFYzMCAyIDIgMiAzXG5NICBWMzAgMyAxIDIgNFxuTSAgVjMwIDQgMSAyIDVcbk0gIFYzMCBFTkQgQk9ORFxuTSAgVjMwIEVORCBDVEFCXG5NICBWMzAgQkVHSU4gQ09MTEVDVElPTlxuTSAgVjMwIEVORCBDT0xMRUNUSU9OXG5NICBFTkRgO1xuY29uc3QgSU5WQUJBU0lDID0gYFxuRGF0YWdyb2sgbW9ub21lciBsaWJyYXJ5IE51Y2xlb3RpZGVzXG5cbiAgMCAgMCAgMCAgMCAgMCAgMCAgICAgICAgICAgICAgMCBWMzAwMFxuTSAgVjMwIEJFR0lOIENUQUJcbk0gIFYzMCBDT1VOVFMgOCA4IDAgMCAwXG5NICBWMzAgQkVHSU4gQVRPTVxuTSAgVjMwIDEgTyAxLjA5MzQgLTIuMTYzNiAwIDBcbk0gIFYzMCAyIEMgMS44MzY1IC0xLjQ5NDUgMCAwIENGRz0yXG5NICBWMzAgMyBDIDIuODE0NyAtMS43MDI0IDAgMFxuTSAgVjMwIDQgQyAzLjMxNDcgLTAuODM2NCAwIDAgVkFMPTNcbk0gIFYzMCA1IE8gMi42NDU1IC0wLjA5MzIgMCAwXG5NICBWMzAgNiBDIDEuNzMyIC0wLjUgMCAwIENGRz0xXG5NICBWMzAgNyBDIDAuODY2IDAgMCAwXG5NICBWMzAgOCBPIDAuODY2IDEgMCAwXG5NICBWMzAgRU5EIEFUT01cbk0gIFYzMCBCRUdJTiBCT05EXG5NICBWMzAgMSAxIDIgMSBDRkc9MVxuTSAgVjMwIDIgMSAyIDNcbk0gIFYzMCAzIDEgMyA0XG5NICBWMzAgNCAxIDQgNVxuTSAgVjMwIDUgMSA2IDVcbk0gIFYzMCA2IDEgMiA2XG5NICBWMzAgNyAxIDYgNyBDRkc9M1xuTSAgVjMwIDggMSA3IDhcbk0gIFYzMCBFTkQgQk9ORFxuTSAgVjMwIEJFR0lOIENPTExFQ1RJT05cbk0gIFYzMCBNRExWMzAvU1RFQUJTIEFUT01TPSgyIDIgNilcbk0gIFYzMCBFTkQgQ09MTEVDVElPTlxuTSAgVjMwIEVORCBDVEFCXG5NICBFTkRgO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE51Y2xlb3RpZGVzTW9sKHNtaWxlc0NvZGVzKSB7XG4gICAgY29uc3QgbW9sQmxvY2tzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbWlsZXNDb2Rlcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgc21pbGVzQ29kZXNbaV0gPT0gJ09QKD1PKShPKU8nID8gbW9sQmxvY2tzLnB1c2goUEhPU0hBVEUpIDpcbiAgICAgICAgICAgIHNtaWxlc0NvZGVzW2ldID09ICdPUCg9TykoUylPJyA/IG1vbEJsb2Nrcy5wdXNoKFRISU9QSE9TSEFURSkgOlxuICAgICAgICAgICAgICAgIHNtaWxlc0NvZGVzW2ldID09ICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ08nID8gbW9sQmxvY2tzLnB1c2gocm90YXRlTnVjbGVvdGlkZXNWMzAwMChJTlZBQkFTSUMpKSA6XG4gICAgICAgICAgICAgICAgICAgIG1vbEJsb2Nrcy5wdXNoKHJvdGF0ZU51Y2xlb3RpZGVzVjMwMDAoc21pbGVzQ29kZXNbaV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpbmtWMzAwMChtb2xCbG9ja3MsIGZhbHNlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBsaW5rVjMwMDAobW9sQmxvY2tzLCB0d29DaGFpbnMgPSBmYWxzZSwgdXNlQ2hpcmFsaXR5ID0gdHJ1ZSkge1xuICAgIGxldCBtYWNyb01vbEJsb2NrID0gJ1xcbkRhdGFncm9rIG1hY3JvbW9sZWN1bGUgaGFuZGxlclxcblxcbic7XG4gICAgbWFjcm9Nb2xCbG9jayArPSAnICAwICAwICAwICAwICAwICAwICAgICAgICAgICAgOTk5IFYzMDAwXFxuJztcbiAgICBtYWNyb01vbEJsb2NrICs9ICdNICBWMzAgQkVHSU4gQ1RBQlxcbic7XG4gICAgbGV0IGF0b21CbG9jayA9ICcnO1xuICAgIGxldCBib25kQmxvY2sgPSAnJztcbiAgICBsZXQgY29sbGVjdGlvbkJsb2NrID0gJyc7XG4gICAgY29uc3QgY29sbGVjdGlvbiA9IFtdO1xuICAgIGxldCBuYXRvbSA9IDA7XG4gICAgbGV0IG5ib25kID0gMDtcbiAgICBsZXQgeFNoaWZ0ID0gMDtcbiAgICBpZiAodHdvQ2hhaW5zICYmIG1vbEJsb2Nrcy5sZW5ndGggPiAxKVxuICAgICAgICBtb2xCbG9ja3NbMV0gPSBpbnZlcnROdWNsZW90aWRlc1YzMDAwKG1vbEJsb2Nrc1sxXSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2xCbG9ja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbW9sQmxvY2tzW2ldID0gbW9sQmxvY2tzW2ldLnJlcGxhY2VBbGwoJygtXFxuTSAgVjMwICcsICcoJylcbiAgICAgICAgICAgIC5yZXBsYWNlQWxsKCctXFxuTSAgVjMwICcsICcnKS5yZXBsYWNlQWxsKCcgKScsICcpJyk7XG4gICAgICAgIGNvbnN0IG51bWJlcnMgPSBleHRyYWN0QXRvbXNCb25kc051bWJlcnNWMzAwMChtb2xCbG9ja3NbaV0pO1xuICAgICAgICBjb25zdCBjb29yZGluYXRlcyA9IGV4dHJhY3RBdG9tRGF0YVYzMDAwKG1vbEJsb2Nrc1tpXSk7XG4gICAgICAgIGlmICh0d29DaGFpbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHhTaGlmdFJpZ2h0ID0gTWF0aC5taW4oLi4uY29vcmRpbmF0ZXMueCk7XG4gICAgICAgICAgICBjb25zdCB5U2hpZnQgPSBpID09IDAgPyBNYXRoLm1pbiguLi5jb29yZGluYXRlcy55KSAtIDEgOiBNYXRoLm1heCguLi5jb29yZGluYXRlcy55KSArIDE7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvb3JkaW5hdGVzLngubGVuZ3RoOyBqKyspXG4gICAgICAgICAgICAgICAgY29vcmRpbmF0ZXMueFtqXSAtPSB4U2hpZnRSaWdodDtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29vcmRpbmF0ZXMueS5sZW5ndGg7IGorKylcbiAgICAgICAgICAgICAgICBjb29yZGluYXRlcy55W2pdIC09IHlTaGlmdDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaW5kZXhBdG9tcyA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCdNICBWMzAgQkVHSU4gQVRPTScpOyAvLyBWMzAwMCBpbmRleCBmb3IgYXRvbXMgY29vcmRpbmF0ZXNcbiAgICAgICAgaW5kZXhBdG9tcyA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCdcXG4nLCBpbmRleEF0b21zKTtcbiAgICAgICAgbGV0IGluZGV4ID0gaW5kZXhBdG9tcztcbiAgICAgICAgbGV0IGluZGV4RW5kID0gaW5kZXhBdG9tcztcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1iZXJzLm5hdG9tOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChjb29yZGluYXRlcy5hdG9tSW5kZXhbal0gIT0gMSB8fCBpID09IDAgfHwgdHdvQ2hhaW5zKSB7XG4gICAgICAgICAgICAgICAgLy9yZXdyaXRlIGF0b20gbnVtYmVyXG4gICAgICAgICAgICAgICAgaW5kZXggPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignVjMwJywgaW5kZXgpICsgNDtcbiAgICAgICAgICAgICAgICBpbmRleEVuZCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCcgJywgaW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0b21OdW1iZXIgPSBwYXJzZUludChtb2xCbG9ja3NbaV0uc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCkpICsgbmF0b207XG4gICAgICAgICAgICAgICAgbW9sQmxvY2tzW2ldID0gbW9sQmxvY2tzW2ldLnNsaWNlKDAsIGluZGV4KSArIGF0b21OdW1iZXIgKyBtb2xCbG9ja3NbaV0uc2xpY2UoaW5kZXhFbmQpO1xuICAgICAgICAgICAgICAgIC8vcmV3cml0ZSBjb29yZGluYXRlc1xuICAgICAgICAgICAgICAgIGluZGV4ID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICAgICAgICAgIGluZGV4ID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICAgICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJyAnLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdG90YWxTaGlmdCA9IHR3b0NoYWlucyA/IDAgOiB4U2hpZnQgLSBjb29yZGluYXRlcy54WzBdO1xuICAgICAgICAgICAgICAgIGxldCBjb29yZGluYXRlID0gdHdvQ2hhaW5zID9cbiAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZCgxMDAwMCAqIGNvb3JkaW5hdGVzLnhbal0pIC8gMTAwMDAgOlxuICAgICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKDEwMDAwICogKHBhcnNlRmxvYXQobW9sQmxvY2tzW2ldLnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpKSArIHRvdGFsU2hpZnQpKSAvIDEwMDAwO1xuICAgICAgICAgICAgICAgIG1vbEJsb2Nrc1tpXSA9IG1vbEJsb2Nrc1tpXS5zbGljZSgwLCBpbmRleCkgKyBjb29yZGluYXRlICsgbW9sQmxvY2tzW2ldLnNsaWNlKGluZGV4RW5kKTtcbiAgICAgICAgICAgICAgICBpbmRleCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCcgJywgaW5kZXgpICsgMTtcbiAgICAgICAgICAgICAgICBpbmRleEVuZCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCcgJywgaW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvb3JkaW5hdGUgPSB0d29DaGFpbnMgP1xuICAgICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKDEwMDAwICogY29vcmRpbmF0ZXMueVtqXSkgLyAxMDAwMCA6XG4gICAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQoMTAwMDAgKiAocGFyc2VGbG9hdChtb2xCbG9ja3NbaV0uc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCkpKSkgLyAxMDAwMDtcbiAgICAgICAgICAgICAgICBtb2xCbG9ja3NbaV0gPSBtb2xCbG9ja3NbaV0uc2xpY2UoMCwgaW5kZXgpICsgY29vcmRpbmF0ZSArIG1vbEJsb2Nrc1tpXS5zbGljZShpbmRleEVuZCk7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignXFxuJywgaW5kZXgpICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJ00gIFYzMCcsIGluZGV4KSAtIDE7XG4gICAgICAgICAgICAgICAgaW5kZXhFbmQgPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignXFxuJywgaW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICBtb2xCbG9ja3NbaV0gPSBtb2xCbG9ja3NbaV0uc2xpY2UoMCwgaW5kZXgpICsgbW9sQmxvY2tzW2ldLnNsaWNlKGluZGV4RW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleEF0b21zRW5kID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJ00gIFYzMCBFTkQgQVRPTScpO1xuICAgICAgICBhdG9tQmxvY2sgKz0gbW9sQmxvY2tzW2ldLnN1YnN0cmluZyhpbmRleEF0b21zICsgMSwgaW5kZXhBdG9tc0VuZCk7XG4gICAgICAgIGxldCBpbmRleEJvbmRzID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJ00gIFYzMCBCRUdJTiBCT05EJyk7IC8vIFYzMDAwIGluZGV4IGZvciBib25kc1xuICAgICAgICBpbmRleEJvbmRzID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJ1xcbicsIGluZGV4Qm9uZHMpO1xuICAgICAgICBpbmRleCA9IGluZGV4Qm9uZHM7XG4gICAgICAgIGluZGV4RW5kID0gaW5kZXhCb25kcztcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1iZXJzLm5ib25kOyBqKyspIHtcbiAgICAgICAgICAgIC8vcmV3cml0ZSBib25kIG51bWJlclxuICAgICAgICAgICAgaW5kZXggPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignVjMwJywgaW5kZXgpICsgNDtcbiAgICAgICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJyAnLCBpbmRleCk7XG4gICAgICAgICAgICBjb25zdCBib25kTnVtYmVyID0gcGFyc2VJbnQobW9sQmxvY2tzW2ldLnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpKSArIG5ib25kO1xuICAgICAgICAgICAgbW9sQmxvY2tzW2ldID0gbW9sQmxvY2tzW2ldLnNsaWNlKDAsIGluZGV4KSArIGJvbmROdW1iZXIgKyBtb2xCbG9ja3NbaV0uc2xpY2UoaW5kZXhFbmQpO1xuICAgICAgICAgICAgLy9yZXdyaXRlIGF0b20gcGFpciBpbiBib25kXG4gICAgICAgICAgICBpbmRleCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCcgJywgaW5kZXgpICsgMTtcbiAgICAgICAgICAgIGluZGV4ID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICAgICAgaW5kZXhFbmQgPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignICcsIGluZGV4KTtcbiAgICAgICAgICAgIGxldCBhdG9tTnVtYmVyID0gcGFyc2VJbnQobW9sQmxvY2tzW2ldLnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpKSArIG5hdG9tO1xuICAgICAgICAgICAgbW9sQmxvY2tzW2ldID0gbW9sQmxvY2tzW2ldLnNsaWNlKDAsIGluZGV4KSArIGF0b21OdW1iZXIgKyBtb2xCbG9ja3NbaV0uc2xpY2UoaW5kZXhFbmQpO1xuICAgICAgICAgICAgaW5kZXggPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignICcsIGluZGV4KSArIDE7XG4gICAgICAgICAgICBpbmRleEVuZCA9IE1hdGgubWluKG1vbEJsb2Nrc1tpXS5pbmRleE9mKCdcXG4nLCBpbmRleCksIG1vbEJsb2Nrc1tpXS5pbmRleE9mKCcgJywgaW5kZXgpKTtcbiAgICAgICAgICAgIGF0b21OdW1iZXIgPSBwYXJzZUludChtb2xCbG9ja3NbaV0uc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCkpICsgbmF0b207XG4gICAgICAgICAgICBtb2xCbG9ja3NbaV0gPSBtb2xCbG9ja3NbaV0uc2xpY2UoMCwgaW5kZXgpICsgYXRvbU51bWJlciArIG1vbEJsb2Nrc1tpXS5zbGljZShpbmRleEVuZCk7XG4gICAgICAgICAgICBpbmRleCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCdcXG4nLCBpbmRleCkgKyAxO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4Qm9uZEVuZCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCdNICBWMzAgRU5EIEJPTkQnKTtcbiAgICAgICAgYm9uZEJsb2NrICs9IG1vbEJsb2Nrc1tpXS5zdWJzdHJpbmcoaW5kZXhCb25kcyArIDEsIGluZGV4Qm9uZEVuZCk7XG4gICAgICAgIGxldCBpbmRleENvbGxlY3Rpb24gPSBtb2xCbG9ja3NbaV0uaW5kZXhPZignTSAgVjMwIE1ETFYzMC9TVEVBQlMgQVRPTVM9KCcpOyAvLyBWMzAwMCBpbmRleCBmb3IgY29sbGVjdGlvbnNcbiAgICAgICAgd2hpbGUgKGluZGV4Q29sbGVjdGlvbiAhPSAtMSkge1xuICAgICAgICAgICAgaW5kZXhDb2xsZWN0aW9uICs9IDI4O1xuICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbkVuZCA9IG1vbEJsb2Nrc1tpXS5pbmRleE9mKCcpJywgaW5kZXhDb2xsZWN0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb25FbnRyaWVzID0gbW9sQmxvY2tzW2ldLnN1YnN0cmluZyhpbmRleENvbGxlY3Rpb24sIGNvbGxlY3Rpb25FbmQpLnNwbGl0KCcgJykuc2xpY2UoMSk7XG4gICAgICAgICAgICBjb2xsZWN0aW9uRW50cmllcy5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbi5wdXNoKHBhcnNlSW50KGUpICsgbmF0b20pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpbmRleENvbGxlY3Rpb24gPSBjb2xsZWN0aW9uRW5kO1xuICAgICAgICAgICAgaW5kZXhDb2xsZWN0aW9uID0gbW9sQmxvY2tzW2ldLmluZGV4T2YoJ00gIFYzMCBNRExWMzAvU1RFQUJTIEFUT01TPSgnLCBpbmRleENvbGxlY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIG5hdG9tICs9IHR3b0NoYWlucyA/IG51bWJlcnMubmF0b20gOiBudW1iZXJzLm5hdG9tIC0gMTtcbiAgICAgICAgbmJvbmQgKz0gbnVtYmVycy5uYm9uZDtcbiAgICAgICAgeFNoaWZ0ICs9IHR3b0NoYWlucyA/IDAgOiBjb29yZGluYXRlcy54W251bWJlcnMubmF0b20gLSAxXSAtIGNvb3JkaW5hdGVzLnhbMF07XG4gICAgfVxuICAgIGNvbnN0IGVudHJpZXMgPSA0O1xuICAgIGNvbnN0IGNvbGxOdW1iZXIgPSBNYXRoLmNlaWwoY29sbGVjdGlvbi5sZW5ndGggLyBlbnRyaWVzKTtcbiAgICAvL2lmIChvY2xSZW5kZXIpIHtcbiAgICAvLyBjb2xsZWN0aW9uQmxvY2sgKz0gJ00gIFYzMCBNRExWMzAvU1RFQUJTIEFUT01TPSgnICsgY29sbGVjdGlvbi5sZW5ndGg7XG4gICAgLy8gZm9yIChsZXQgaiA9IDA7IGogPCBjb2xsZWN0aW9uLmxlbmd0aDsgaisrKVxuICAgIC8vICAgY29sbGVjdGlvbkJsb2NrICs9ICcgJyArIGNvbGxlY3Rpb25bal07XG4gICAgLy8gY29sbGVjdGlvbkJsb2NrICs9ICcpXFxuJztcbiAgICAvL30gZWxzZSB7XG4gICAgY29sbGVjdGlvbkJsb2NrICs9ICdNICBWMzAgTURMVjMwL1NURUFCUyBBVE9NUz0oJyArIGNvbGxlY3Rpb24ubGVuZ3RoICsgJyAtXFxuJztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbGxOdW1iZXI7IGkrKykge1xuICAgICAgICBjb2xsZWN0aW9uQmxvY2sgKz0gJ00gIFYzMCAnO1xuICAgICAgICBjb25zdCBlbnRyaWVzQ3VycmVudCA9IGkgKyAxID09IGNvbGxOdW1iZXIgPyBjb2xsZWN0aW9uLmxlbmd0aCAtIChjb2xsTnVtYmVyIC0gMSkgKiBlbnRyaWVzIDogZW50cmllcztcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBlbnRyaWVzQ3VycmVudDsgaisrKSB7XG4gICAgICAgICAgICBjb2xsZWN0aW9uQmxvY2sgKz0gKGogKyAxID09IGVudHJpZXNDdXJyZW50KSA/XG4gICAgICAgICAgICAgICAgKGkgPT0gY29sbE51bWJlciAtIDEgPyBjb2xsZWN0aW9uW2VudHJpZXMgKiBpICsgal0gKyAnKVxcbicgOiBjb2xsZWN0aW9uW2VudHJpZXMgKiBpICsgal0gKyAnIC1cXG4nKSA6XG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbltlbnRyaWVzICogaSArIGpdICsgJyAnO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vfVxuICAgIC8vZ2VuZXJhdGUgZmlsZVxuICAgIHR3b0NoYWlucyA/IG5hdG9tIDogbmF0b20rKztcbiAgICBtYWNyb01vbEJsb2NrICs9ICdNICBWMzAgQ09VTlRTICcgKyBuYXRvbSArICcgJyArIG5ib25kICsgJyAwIDAgMFxcbic7XG4gICAgbWFjcm9Nb2xCbG9jayArPSAnTSAgVjMwIEJFR0lOIEFUT01cXG4nO1xuICAgIG1hY3JvTW9sQmxvY2sgKz0gYXRvbUJsb2NrO1xuICAgIG1hY3JvTW9sQmxvY2sgKz0gJ00gIFYzMCBFTkQgQVRPTVxcbic7XG4gICAgbWFjcm9Nb2xCbG9jayArPSAnTSAgVjMwIEJFR0lOIEJPTkRcXG4nO1xuICAgIG1hY3JvTW9sQmxvY2sgKz0gYm9uZEJsb2NrO1xuICAgIG1hY3JvTW9sQmxvY2sgKz0gJ00gIFYzMCBFTkQgQk9ORFxcbic7XG4gICAgaWYgKHVzZUNoaXJhbGl0eSkge1xuICAgICAgICBtYWNyb01vbEJsb2NrICs9ICdNICBWMzAgQkVHSU4gQ09MTEVDVElPTlxcbic7XG4gICAgICAgIG1hY3JvTW9sQmxvY2sgKz0gY29sbGVjdGlvbkJsb2NrO1xuICAgICAgICBtYWNyb01vbEJsb2NrICs9ICdNICBWMzAgRU5EIENPTExFQ1RJT05cXG4nO1xuICAgIH1cbiAgICBlbHNlXG4gICAgICAgIG1hY3JvTW9sQmxvY2sgPSBtYWNyb01vbEJsb2NrLnJlcGxhY2UoLyBDRkc9XFxkL2csICcgJyk7XG4gICAgbWFjcm9Nb2xCbG9jayArPSAnTSAgVjMwIEVORCBDVEFCXFxuJztcbiAgICBtYWNyb01vbEJsb2NrICs9ICdNICBFTkRcXG4nO1xuICAgIHJldHVybiBtYWNyb01vbEJsb2NrO1xufVxuZnVuY3Rpb24gcm90YXRlTnVjbGVvdGlkZXNWMzAwMChtb2xlY3VsZSkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsZXQgbW9sQmxvY2sgPSBtb2xlY3VsZS5pbmNsdWRlcygnTSAgRU5EJykgPyBtb2xlY3VsZSA6IE9DTC5Nb2xlY3VsZS5mcm9tU21pbGVzKG1vbGVjdWxlKS50b01vbGZpbGVWMygpO1xuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gZXh0cmFjdEF0b21EYXRhVjMwMDAobW9sQmxvY2spO1xuICAgIGNvbnN0IG5hdG9tID0gY29vcmRpbmF0ZXMuYXRvbUluZGV4Lmxlbmd0aDtcbiAgICBjb25zdCBpbmRleEZpdmVQcmltZSA9IGNvb3JkaW5hdGVzLmF0b21JbmRleC5pbmRleE9mKDEpO1xuICAgIGNvbnN0IGluZGV4VGhyZWVQcmltZSA9IGNvb3JkaW5hdGVzLmF0b21JbmRleC5pbmRleE9mKG5hdG9tKTtcbiAgICAvL2ZpeCA1IHByaW1lIGlmIGluYWRlcXVhdGVcbiAgICBpZiAobmF0b20gPiA4KVxuICAgICAgICBmaXg1UHJpbWUoY29vcmRpbmF0ZXMsIGluZGV4Rml2ZVByaW1lLCBpbmRleFRocmVlUHJpbWUpO1xuICAgIGNvbnN0IHhDZW50ZXIgPSAoY29vcmRpbmF0ZXMueFtpbmRleFRocmVlUHJpbWVdICsgY29vcmRpbmF0ZXMueFtpbmRleEZpdmVQcmltZV0pIC8gMjtcbiAgICBjb25zdCB5Q2VudGVyID0gKGNvb3JkaW5hdGVzLnlbaW5kZXhUaHJlZVByaW1lXSArIGNvb3JkaW5hdGVzLnlbaW5kZXhGaXZlUHJpbWVdKSAvIDI7XG4gICAgLy9wbGFjZSB0byBjZW50ZXJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdG9tOyBpKyspIHtcbiAgICAgICAgY29vcmRpbmF0ZXMueFtpXSAtPSB4Q2VudGVyO1xuICAgICAgICBjb29yZGluYXRlcy55W2ldIC09IHlDZW50ZXI7XG4gICAgfVxuICAgIGxldCBhbmdsZSA9IDA7XG4gICAgaWYgKGNvb3JkaW5hdGVzLnhbaW5kZXhGaXZlUHJpbWVdID09IDApXG4gICAgICAgIGFuZ2xlID0gY29vcmRpbmF0ZXMueVtpbmRleEZpdmVQcmltZV0gPiBjb29yZGluYXRlcy55W2luZGV4VGhyZWVQcmltZV0gPyBNYXRoLlBJIC8gMiA6IDMgKiBNYXRoLlBJIC8gMjtcbiAgICBlbHNlIGlmIChjb29yZGluYXRlcy55W2luZGV4Rml2ZVByaW1lXSA9PSAwKVxuICAgICAgICBhbmdsZSA9IGNvb3JkaW5hdGVzLnhbaW5kZXhGaXZlUHJpbWVdID4gY29vcmRpbmF0ZXMueFtpbmRleFRocmVlUHJpbWVdID8gTWF0aC5QSSA6IDA7XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGRlcml2YXRpdmUgPSBjb29yZGluYXRlcy55W2luZGV4Rml2ZVByaW1lXSAvIGNvb3JkaW5hdGVzLnhbaW5kZXhGaXZlUHJpbWVdO1xuICAgICAgICBhbmdsZSA9IGRlcml2YXRpdmUgPiAwID8gTWF0aC5QSSAtIE1hdGguYXRhbihkZXJpdmF0aXZlKSA6IE1hdGguYXRhbihkZXJpdmF0aXZlKTtcbiAgICB9XG4gICAgY29uc3QgY29zID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgIGNvbnN0IHNpbiA9IE1hdGguc2luKGFuZ2xlKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdG9tOyBpKyspIHtcbiAgICAgICAgY29uc3QgeEFkZCA9IGNvb3JkaW5hdGVzLnhbaV07XG4gICAgICAgIGNvb3JkaW5hdGVzLnhbaV0gPSB4QWRkICogY29zIC0gY29vcmRpbmF0ZXMueVtpXSAqIHNpbjtcbiAgICAgICAgY29vcmRpbmF0ZXMueVtpXSA9IHhBZGQgKiBzaW4gKyBjb29yZGluYXRlcy55W2ldICogY29zO1xuICAgIH1cbiAgICAvL3BsYWNlIHRvIHJpZ2h0XG4gICAgY29uc3QgeFNoaWZ0ID0gY29vcmRpbmF0ZXMueFtpbmRleEZpdmVQcmltZV07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYXRvbTsgaSsrKVxuICAgICAgICBjb29yZGluYXRlcy54W2ldIC09IHhTaGlmdDtcbiAgICAvL3Jld3JpdGUgbW9sQmxvY2tcbiAgICBsZXQgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCdNICBWMzAgQkVHSU4gQVRPTScpOyAvLyBWMzAwMCBpbmRleCBmb3IgYXRvbXMgY29vcmRpbmF0ZXNcbiAgICBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJ1xcbicsIGluZGV4KTtcbiAgICBsZXQgaW5kZXhFbmQgPSBpbmRleDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdG9tOyBpKyspIHtcbiAgICAgICAgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCdWMzAnLCBpbmRleCkgKyA0O1xuICAgICAgICBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICBpbmRleEVuZCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICBpbmRleEVuZCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleEVuZCk7XG4gICAgICAgIG1vbEJsb2NrID0gbW9sQmxvY2suc2xpY2UoMCwgaW5kZXgpICtcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzLnhbaV0gKyAnICcgKyBjb29yZGluYXRlcy55W2ldICtcbiAgICAgICAgICAgIG1vbEJsb2NrLnNsaWNlKGluZGV4RW5kKTtcbiAgICAgICAgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCdcXG4nLCBpbmRleCkgKyAxO1xuICAgIH1cbiAgICByZXR1cm4gbW9sQmxvY2s7XG59XG5mdW5jdGlvbiBpbnZlcnROdWNsZW90aWRlc1YzMDAwKG1vbGVjdWxlKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGxldCBtb2xCbG9jayA9IG1vbGVjdWxlLmluY2x1ZGVzKCdNICBFTkQnKSA/IG1vbGVjdWxlIDogT0NMLk1vbGVjdWxlLmZyb21TbWlsZXMobW9sZWN1bGUpLnRvTW9sZmlsZVYzKCk7XG4gICAgY29uc3QgY29vcmRpbmF0ZXMgPSBleHRyYWN0QXRvbURhdGFWMzAwMChtb2xCbG9jayk7XG4gICAgY29uc3QgbmF0b20gPSBjb29yZGluYXRlcy5hdG9tSW5kZXgubGVuZ3RoO1xuICAgIGNvbnN0IHhDZW50ZXIgPSAoTWF0aC5tYXgoLi4uY29vcmRpbmF0ZXMueCkgKyBNYXRoLm1pbiguLi5jb29yZGluYXRlcy54KSkgLyAyO1xuICAgIGNvbnN0IHlDZW50ZXIgPSAoTWF0aC5tYXgoLi4uY29vcmRpbmF0ZXMueSkgKyBNYXRoLm1pbiguLi5jb29yZGluYXRlcy55KSkgLyAyO1xuICAgIC8vcGxhY2UgdG8gY2VudGVyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYXRvbTsgaSsrKSB7XG4gICAgICAgIGNvb3JkaW5hdGVzLnhbaV0gLT0geENlbnRlcjtcbiAgICAgICAgY29vcmRpbmF0ZXMueVtpXSAtPSB5Q2VudGVyO1xuICAgIH1cbiAgICBjb25zdCBhbmdsZSA9IE1hdGguUEk7XG4gICAgY29uc3QgY29zID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgIGNvbnN0IHNpbiA9IE1hdGguc2luKGFuZ2xlKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdG9tOyBpKyspIHtcbiAgICAgICAgY29uc3QgeEFkZCA9IGNvb3JkaW5hdGVzLnhbaV07XG4gICAgICAgIGNvb3JkaW5hdGVzLnhbaV0gPSB4QWRkICogY29zIC0gY29vcmRpbmF0ZXMueVtpXSAqIHNpbjtcbiAgICAgICAgY29vcmRpbmF0ZXMueVtpXSA9IHhBZGQgKiBzaW4gKyBjb29yZGluYXRlcy55W2ldICogY29zO1xuICAgIH1cbiAgICAvL3BsYWNlIGJhY2tcbiAgICBjb25zdCB5U2hpZnQgPSBNYXRoLm1heCguLi5jb29yZGluYXRlcy55KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdG9tOyBpKyspIHtcbiAgICAgICAgY29vcmRpbmF0ZXMueFtpXSArPSB4Q2VudGVyO1xuICAgICAgICBjb29yZGluYXRlcy55W2ldIC09IHlTaGlmdDtcbiAgICB9XG4gICAgLy9yZXdyaXRlIG1vbEJsb2NrXG4gICAgbGV0IGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignTSAgVjMwIEJFR0lOIEFUT00nKTsgLy8gVjMwMDAgaW5kZXggZm9yIGF0b21zIGNvb3JkaW5hdGVzXG4gICAgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCdcXG4nLCBpbmRleCk7XG4gICAgbGV0IGluZGV4RW5kID0gaW5kZXg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYXRvbTsgaSsrKSB7XG4gICAgICAgIGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignVjMwJywgaW5kZXgpICsgNDtcbiAgICAgICAgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXgpICsgMTtcbiAgICAgICAgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXgpICsgMTtcbiAgICAgICAgaW5kZXhFbmQgPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXgpICsgMTtcbiAgICAgICAgaW5kZXhFbmQgPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXhFbmQpO1xuICAgICAgICBtb2xCbG9jayA9IG1vbEJsb2NrLnNsaWNlKDAsIGluZGV4KSArXG4gICAgICAgICAgICBjb29yZGluYXRlcy54W2ldICsgJyAnICsgY29vcmRpbmF0ZXMueVtpXSArXG4gICAgICAgICAgICBtb2xCbG9jay5zbGljZShpbmRleEVuZCk7XG4gICAgICAgIGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignXFxuJywgaW5kZXgpICsgMTtcbiAgICB9XG4gICAgcmV0dXJuIG1vbEJsb2NrO1xufVxuZnVuY3Rpb24gZml4NVByaW1lKGNvb3JkaW5hdGVzLCBpbmRleEZpdmVQcmltZSwgaW5kZXhUaHJlZVByaW1lKSB7XG4gICAgY29uc3QgaW5kZXhGaXZlUHJpbWVOZWlnaGJvdXIgPSBpbmRleEZpdmVQcmltZSArIDE7XG4gICAgY29uc3QgeFNoaWZ0ID0gY29vcmRpbmF0ZXMueFtpbmRleEZpdmVQcmltZU5laWdoYm91cl07XG4gICAgY29uc3QgeVNoaWZ0ID0gY29vcmRpbmF0ZXMueVtpbmRleEZpdmVQcmltZU5laWdoYm91cl07XG4gICAgY29uc3QgYmFzZTNQcmltZVggPSBjb29yZGluYXRlcy54W2luZGV4VGhyZWVQcmltZV0gLSB4U2hpZnQ7XG4gICAgY29uc3QgYmFzZTNQcmltZVkgPSBjb29yZGluYXRlcy55W2luZGV4VGhyZWVQcmltZV0gLSB5U2hpZnQ7XG4gICAgY29uc3QgYmFzZTVQcmltZVggPSBjb29yZGluYXRlcy54W2luZGV4Rml2ZVByaW1lXSAtIHhTaGlmdDtcbiAgICBjb25zdCBiYXNlNVByaW1lWSA9IGNvb3JkaW5hdGVzLnlbaW5kZXhGaXZlUHJpbWVdIC0geVNoaWZ0O1xuICAgIGNvbnN0IHJvdGF0ZWQ1UHJpbWVYID0gYmFzZTVQcmltZVggKiBNYXRoLmNvcyhNYXRoLlBJICogMiAvIDMpIC0gYmFzZTVQcmltZVkgKiBNYXRoLnNpbihNYXRoLlBJICogMiAvIDMpO1xuICAgIGNvbnN0IHJvdGF0ZWQ1UHJpbWVZID0gYmFzZTVQcmltZVggKiBNYXRoLnNpbihNYXRoLlBJICogMiAvIDMpICsgYmFzZTVQcmltZVkgKiBNYXRoLmNvcyhNYXRoLlBJICogMiAvIDMpO1xuICAgIGNvbnN0IGR4ID0gYmFzZTVQcmltZVggLSBiYXNlM1ByaW1lWDtcbiAgICBjb25zdCBkeSA9IGJhc2U1UHJpbWVZIC0gYmFzZTNQcmltZVk7XG4gICAgY29uc3QgZHhSb3RhdGVkID0gcm90YXRlZDVQcmltZVggLSBiYXNlM1ByaW1lWDtcbiAgICBjb25zdCBkeVJvdGF0ZWQgPSByb3RhdGVkNVByaW1lWSAtIGJhc2UzUHJpbWVZO1xuICAgIGlmIChNYXRoLnNxcnQoZHlSb3RhdGVkICogZHlSb3RhdGVkICsgZHhSb3RhdGVkICogZHhSb3RhdGVkKSA+PSBNYXRoLnNxcnQoZHkgKiBkeSArIGR4ICogZHgpKSB7XG4gICAgICAgIGNvb3JkaW5hdGVzLnhbaW5kZXhGaXZlUHJpbWVdID0gcm90YXRlZDVQcmltZVggKyB4U2hpZnQ7XG4gICAgICAgIGNvb3JkaW5hdGVzLnlbaW5kZXhGaXZlUHJpbWVdID0gcm90YXRlZDVQcmltZVkgKyB5U2hpZnQ7XG4gICAgfVxufVxuZnVuY3Rpb24gZXh0cmFjdEF0b21zQm9uZHNOdW1iZXJzVjMwMDAobW9sQmxvY2spIHtcbiAgICBtb2xCbG9jayA9IG1vbEJsb2NrLnJlcGxhY2VBbGwoJ1xccicsICcnKTsgLy9lcXVhbGl6ZSBvbGQgYW5kIG5ldyBzZGYgc3RhbmRhcmRzXG4gICAgbGV0IGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignQ09VTlRTJykgKyA3OyAvLyBWMzAwMCBpbmRleCBmb3IgYXRvbXMgYW5kIGJvbmRzIG51bWJlclxuICAgIGxldCBpbmRleEVuZCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleCk7XG4gICAgY29uc3QgYXRvbXNOdW1iZXIgPSBwYXJzZUludChtb2xCbG9jay5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKSk7XG4gICAgaW5kZXggPSBpbmRleEVuZCArIDE7XG4gICAgaW5kZXhFbmQgPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXgpO1xuICAgIGNvbnN0IGJvbmRzTnVtYmVyID0gcGFyc2VJbnQobW9sQmxvY2suc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCkpO1xuICAgIHJldHVybiB7IG5hdG9tOiBhdG9tc051bWJlciwgbmJvbmQ6IGJvbmRzTnVtYmVyIH07XG59XG5mdW5jdGlvbiBleHRyYWN0QXRvbURhdGFWMzAwMChtb2xCbG9jaykge1xuICAgIGNvbnN0IG51bWJlcnMgPSBleHRyYWN0QXRvbXNCb25kc051bWJlcnNWMzAwMChtb2xCbG9jayk7XG4gICAgbGV0IGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignTSAgVjMwIEJFR0lOIEFUT00nKTsgLy8gVjMwMDAgaW5kZXggZm9yIGF0b21zIGNvb3JkaW5hdGVzXG4gICAgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCdcXG4nLCBpbmRleCk7XG4gICAgbGV0IGluZGV4RW5kID0gaW5kZXg7XG4gICAgY29uc3QgaW5kZXhlcyA9IEFycmF5KG51bWJlcnMubmF0b20pO1xuICAgIGNvbnN0IHR5cGVzID0gQXJyYXkobnVtYmVycy5uYXRvbSk7XG4gICAgY29uc3QgeCA9IEFycmF5KG51bWJlcnMubmF0b20pO1xuICAgIGNvbnN0IHkgPSBBcnJheShudW1iZXJzLm5hdG9tKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlcnMubmF0b207IGkrKykge1xuICAgICAgICBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJ1YzMCcsIGluZGV4KSArIDQ7XG4gICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4KTtcbiAgICAgICAgaW5kZXhlc1tpXSA9IHBhcnNlSW50KG1vbEJsb2NrLnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpKTtcbiAgICAgICAgaW5kZXggPSBpbmRleEVuZCArIDE7XG4gICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4KTtcbiAgICAgICAgdHlwZXNbaV0gPSBtb2xCbG9jay5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKTtcbiAgICAgICAgaW5kZXggPSBpbmRleEVuZCArIDE7XG4gICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4KTtcbiAgICAgICAgeFtpXSA9IHBhcnNlRmxvYXQobW9sQmxvY2suc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCkpO1xuICAgICAgICBpbmRleCA9IGluZGV4RW5kICsgMTtcbiAgICAgICAgaW5kZXhFbmQgPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXgpO1xuICAgICAgICB5W2ldID0gcGFyc2VGbG9hdChtb2xCbG9jay5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKSk7XG4gICAgICAgIGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignXFxuJywgaW5kZXgpICsgMTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYXRvbUluZGV4OiBpbmRleGVzLCBhdG9tVHlwZTogdHlwZXMsIHg6IHgsIHk6IHkgfTtcbn1cbiIsImltcG9ydCB7IG1hcCwgU1lOVEhFU0laRVJTLCBURUNITk9MT0dJRVMsIE1PRElGSUNBVElPTlMsIGRlbGltaXRlciwgZ2Nyc0NvZGVzV2l0aG91dFNtaWxlcyB9IGZyb20gJy4vbWFwJztcbmltcG9ydCB7IGFzb0dhcG1lcnNOdWNsZW90aWRlc1RvQmlvU3ByaW5nLCBhc29HYXBtZXJzTnVjbGVvdGlkZXNUb0djcnMsIGFzb0dhcG1lcnNCaW9TcHJpbmdUb051Y2xlb3RpZGVzLCBhc29HYXBtZXJzQmlvU3ByaW5nVG9HY3JzLCBhc29HYXBtZXJzR2Nyc1RvTnVjbGVvdGlkZXMsIGFzb0dhcG1lcnNHY3JzVG9CaW9TcHJpbmcsIGdjcnNUb01lcm1hZGUxMiwgc2lSbmFOdWNsZW90aWRlVG9CaW9TcHJpbmdTZW5zZVN0cmFuZCwgc2lSbmFOdWNsZW90aWRlVG9BeG9sYWJzU2Vuc2VTdHJhbmQsIHNpUm5hTnVjbGVvdGlkZXNUb0djcnMsIHNpUm5hQmlvU3ByaW5nVG9OdWNsZW90aWRlcywgc2lSbmFCaW9TcHJpbmdUb0F4b2xhYnMsIHNpUm5hQmlvU3ByaW5nVG9HY3JzLCBzaVJuYUF4b2xhYnNUb051Y2xlb3RpZGVzLCBzaVJuYUF4b2xhYnNUb0Jpb1NwcmluZywgc2lSbmFBeG9sYWJzVG9HY3JzLCBzaVJuYUdjcnNUb051Y2xlb3RpZGVzLCBzaVJuYUdjcnNUb0Jpb1NwcmluZywgc2lSbmFHY3JzVG9BeG9sYWJzLCBnY3JzVG9OdWNsZW90aWRlcywgZ2Nyc1RvTGNtcyB9IGZyb20gJy4vY29udmVydGVycyc7XG5jb25zdCBub1RyYW5zbGF0aW9uVGFibGVBdmFpbGFibGUgPSAnTm8gdHJhbnNsYXRpb24gdGFibGUgYXZhaWxhYmxlJztcbmV4cG9ydCBjb25zdCB1bmRlZmluZWRJbnB1dFNlcXVlbmNlID0gJ1R5cGUgb2YgaW5wdXQgc2VxdWVuY2UgaXMgdW5kZWZpbmVkJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtYXQoc2VxdWVuY2UpIHtcbiAgICBjb25zdCBwb3NzaWJsZVN5bnRoZXNpemVycyA9IGdldExpc3RPZlBvc3NpYmxlU3ludGhlc2l6ZXJzQnlGaXJzdE1hdGNoZWRDb2RlKHNlcXVlbmNlKTtcbiAgICBpZiAocG9zc2libGVTeW50aGVzaXplcnMubGVuZ3RoID09IDApXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIGxldCBvdXRwdXRJbmRleCA9IDA7XG4gICAgY29uc3QgZmlyc3RVbmlxdWVDaGFyYWN0ZXJzID0gWydyJywgJ2QnXTtcbiAgICBjb25zdCBudWNsZW90aWRlcyA9IFsnQScsICdVJywgJ1QnLCAnQycsICdHJ107XG4gICAgcG9zc2libGVTeW50aGVzaXplcnMuZm9yRWFjaCgoc3ludGhlc2l6ZXIpID0+IHtcbiAgICAgICAgY29uc3QgY29kZXMgPSBnZXRBbGxDb2Rlc09mU3ludGhlc2l6ZXIoc3ludGhlc2l6ZXIpO1xuICAgICAgICB3aGlsZSAob3V0cHV0SW5kZXggPCBzZXF1ZW5jZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRDb2RlID0gY29kZXMuZmluZCgoYykgPT4gYyA9PSBzZXF1ZW5jZS5zbGljZShvdXRwdXRJbmRleCwgb3V0cHV0SW5kZXggKyBjLmxlbmd0aCkpO1xuICAgICAgICAgICAgaWYgKG1hdGNoZWRDb2RlID09IG51bGwpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBpZiAoIC8vIGZvciBtaXN0YWtlIHBhdHRlcm4gJ3JBQSdcbiAgICAgICAgICAgIG91dHB1dEluZGV4ID4gMSAmJlxuICAgICAgICAgICAgICAgIG51Y2xlb3RpZGVzLmluY2x1ZGVzKHNlcXVlbmNlW291dHB1dEluZGV4XSkgJiZcbiAgICAgICAgICAgICAgICBmaXJzdFVuaXF1ZUNoYXJhY3RlcnMuaW5jbHVkZXMoc2VxdWVuY2Vbb3V0cHV0SW5kZXggLSAyXSkpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBpZiAoIC8vIGZvciBtaXN0YWtlIHBhdHRlcm4gJ0FyQSdcbiAgICAgICAgICAgIGZpcnN0VW5pcXVlQ2hhcmFjdGVycy5pbmNsdWRlcyhzZXF1ZW5jZVtvdXRwdXRJbmRleCArIDFdKSAmJlxuICAgICAgICAgICAgICAgIG51Y2xlb3RpZGVzLmluY2x1ZGVzKHNlcXVlbmNlW291dHB1dEluZGV4XSkpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRJbmRleCsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0cHV0SW5kZXggKz0gbWF0Y2hlZENvZGUubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgaW5kZXhPZkZpcnN0Tm90VmFsaWRDaGFyID0gKG91dHB1dEluZGV4ID09IHNlcXVlbmNlLmxlbmd0aCkgPyAtMSA6IG91dHB1dEluZGV4O1xuICAgIGlmIChpbmRleE9mRmlyc3ROb3RWYWxpZENoYXIgIT0gLTEpXG4gICAgICAgIHJldHVybiBwb3NzaWJsZVN5bnRoZXNpemVyc1swXTtcbiAgICBjb25zdCBwb3NzaWJsZVRlY2hub2xvZ2llcyA9IGdldExpc3RPZlBvc3NpYmxlVGVjaG5vbG9naWVzQnlGaXJzdE1hdGNoZWRDb2RlKHNlcXVlbmNlLCBwb3NzaWJsZVN5bnRoZXNpemVyc1swXSk7XG4gICAgaWYgKHBvc3NpYmxlVGVjaG5vbG9naWVzLmxlbmd0aCA9PSAwKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBvdXRwdXRJbmRleCA9IDA7XG4gICAgcG9zc2libGVUZWNobm9sb2dpZXMuZm9yRWFjaCgodGVjaG5vbG9neSkgPT4ge1xuICAgICAgICBjb25zdCBjb2RlcyA9IE9iamVjdC5rZXlzKG1hcFtwb3NzaWJsZVN5bnRoZXNpemVyc1swXV1bdGVjaG5vbG9neV0pO1xuICAgICAgICB3aGlsZSAob3V0cHV0SW5kZXggPCBzZXF1ZW5jZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRDb2RlID0gY29kZXMuZmluZCgoYykgPT4gYyA9PSBzZXF1ZW5jZS5zbGljZShvdXRwdXRJbmRleCwgb3V0cHV0SW5kZXggKyBjLmxlbmd0aCkpO1xuICAgICAgICAgICAgaWYgKG1hdGNoZWRDb2RlID09IG51bGwpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBpZiAoIC8vIGZvciBtaXN0YWtlIHBhdHRlcm4gJ3JBQSdcbiAgICAgICAgICAgIG91dHB1dEluZGV4ID4gMSAmJlxuICAgICAgICAgICAgICAgIG51Y2xlb3RpZGVzLmluY2x1ZGVzKHNlcXVlbmNlW291dHB1dEluZGV4XSkgJiZcbiAgICAgICAgICAgICAgICBmaXJzdFVuaXF1ZUNoYXJhY3RlcnMuaW5jbHVkZXMoc2VxdWVuY2Vbb3V0cHV0SW5kZXggLSAyXSkpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBpZiAoIC8vIGZvciBtaXN0YWtlIHBhdHRlcm4gJ0FyQSdcbiAgICAgICAgICAgIGZpcnN0VW5pcXVlQ2hhcmFjdGVycy5pbmNsdWRlcyhzZXF1ZW5jZVtvdXRwdXRJbmRleCArIDFdKSAmJlxuICAgICAgICAgICAgICAgIG51Y2xlb3RpZGVzLmluY2x1ZGVzKHNlcXVlbmNlW291dHB1dEluZGV4XSkpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRJbmRleCsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0cHV0SW5kZXggKz0gbWF0Y2hlZENvZGUubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHBvc3NpYmxlU3ludGhlc2l6ZXJzWzBdO1xufVxuZnVuY3Rpb24gc29ydEJ5U3RyaW5nTGVuZ3RoSW5EZXNjZW5kaW5nT3JkZXIoYXJyYXkpIHtcbiAgICByZXR1cm4gYXJyYXkuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDsgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFNlcXVlbmNlKHNlcXVlbmNlLCBmb3JtYXQpIHtcbiAgICBjb25zdCBwb3NzaWJsZVN5bnRoZXNpemVycyA9IGZvcm1hdCA9PSBudWxsID9cbiAgICAgICAgZ2V0TGlzdE9mUG9zc2libGVTeW50aGVzaXplcnNCeUZpcnN0TWF0Y2hlZENvZGUoc2VxdWVuY2UpIDpcbiAgICAgICAgW2Zvcm1hdF07XG4gICAgLy8gaWYgKHBvc3NpYmxlU3ludGhlc2l6ZXJzLmxlbmd0aCA+IDEpIHtcbiAgICAvLyAgIGNvbnN0IHN5bnRoZXNpemVyID0gdWkuY2hvaWNlSW5wdXQoJ0Nob29zZSBzeW50aGVzaXplciBmcm9tIGxpc3Q6ICcsIHBvc3NpYmxlU3ludGhlc2l6ZXJzWzBdLFxuICAgIC8vICBwb3NzaWJsZVN5bnRoZXNpemVycyk7XG4gICAgLy8gICB1aS5kaWFsb2coJ0Nob29zZSBTeW50aGVzaXplcicpXG4gICAgLy8gICAgIC5hZGQodWkucGFuZWwoW3N5bnRoZXNpemVyLnJvb3RdLCB7c3R5bGU6IHtmb250V2VpZ2h0OiAnYm9sZCd9fSkpXG4gICAgLy8gICAgIC5vbk9LKCgpID0+IHBvc3NpYmxlU3ludGhlc2l6ZXJzID0gW3N5bnRoZXNpemVyLnZhbHVlXSlcbiAgICAvLyAgICAgLm9uQ2FuY2VsKCgpID0+IHtcbiAgICAvLyAgICAgICBwb3NzaWJsZVN5bnRoZXNpemVycyA9IFtwb3NzaWJsZVN5bnRoZXNpemVyc1swXV07XG4gICAgLy8gICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKCdJbnB1dCBzZXF1ZW5jZSBpcyBleHBlY3RlZCB0byBiZSBpbiBmb3JtYXQgJyArIHBvc3NpYmxlU3ludGhlc2l6ZXJzWzBdKTtcbiAgICAvLyAgICAgfSlcbiAgICAvLyAgICAgLnNob3coKTtcbiAgICAvLyB9IGVsc2UgaWYgKHBvc3NpYmxlU3ludGhlc2l6ZXJzLmxlbmd0aCA9PSAwKVxuICAgIGlmIChwb3NzaWJsZVN5bnRoZXNpemVycy5sZW5ndGggPT0gMClcbiAgICAgICAgcmV0dXJuIHsgaW5kZXhPZkZpcnN0Tm90VmFsaWRDaGFyOiAwLCBzeW50aGVzaXplcjogbnVsbCwgdGVjaG5vbG9neTogbnVsbCB9O1xuICAgIGxldCBvdXRwdXRJbmRleCA9IDA7XG4gICAgY29uc3QgZmlyc3RVbmlxdWVDaGFyYWN0ZXJzID0gWydyJywgJ2QnXTtcbiAgICBjb25zdCBudWNsZW90aWRlcyA9IFsnQScsICdVJywgJ1QnLCAnQycsICdHJ107XG4gICAgcG9zc2libGVTeW50aGVzaXplcnMuZm9yRWFjaCgoc3ludGhlc2l6ZXIpID0+IHtcbiAgICAgICAgY29uc3QgY29kZXMgPSBzb3J0QnlTdHJpbmdMZW5ndGhJbkRlc2NlbmRpbmdPcmRlcihnZXRBbGxDb2Rlc09mU3ludGhlc2l6ZXIoc3ludGhlc2l6ZXIpKTtcbiAgICAgICAgd2hpbGUgKG91dHB1dEluZGV4IDwgc2VxdWVuY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkQ29kZSA9IGNvZGVzLmZpbmQoKGMpID0+IGMgPT0gc2VxdWVuY2Uuc2xpY2Uob3V0cHV0SW5kZXgsIG91dHB1dEluZGV4ICsgYy5sZW5ndGgpKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVkQ29kZSA9PSBudWxsKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgaWYgKCAvLyBmb3IgbWlzdGFrZSBwYXR0ZXJuICdyQUEnXG4gICAgICAgICAgICBvdXRwdXRJbmRleCA+IDEgJiZcbiAgICAgICAgICAgICAgICBudWNsZW90aWRlcy5pbmNsdWRlcyhzZXF1ZW5jZVtvdXRwdXRJbmRleF0pICYmXG4gICAgICAgICAgICAgICAgZmlyc3RVbmlxdWVDaGFyYWN0ZXJzLmluY2x1ZGVzKHNlcXVlbmNlW291dHB1dEluZGV4IC0gMl0pKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgaWYgKCAvLyBmb3IgbWlzdGFrZSBwYXR0ZXJuICdBckEnXG4gICAgICAgICAgICBmaXJzdFVuaXF1ZUNoYXJhY3RlcnMuaW5jbHVkZXMoc2VxdWVuY2Vbb3V0cHV0SW5kZXggKyAxXSkgJiZcbiAgICAgICAgICAgICAgICBudWNsZW90aWRlcy5pbmNsdWRlcyhzZXF1ZW5jZVtvdXRwdXRJbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0SW5kZXgrKztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dHB1dEluZGV4ICs9IG1hdGNoZWRDb2RlLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGluZGV4T2ZGaXJzdE5vdFZhbGlkQ2hhciA9IChvdXRwdXRJbmRleCA9PSBzZXF1ZW5jZS5sZW5ndGgpID8gLTEgOiBvdXRwdXRJbmRleDtcbiAgICBpZiAoaW5kZXhPZkZpcnN0Tm90VmFsaWRDaGFyICE9IC0xKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbmRleE9mRmlyc3ROb3RWYWxpZENoYXI6IGluZGV4T2ZGaXJzdE5vdFZhbGlkQ2hhcixcbiAgICAgICAgICAgIHN5bnRoZXNpemVyOiBwb3NzaWJsZVN5bnRoZXNpemVycyxcbiAgICAgICAgICAgIHRlY2hub2xvZ3k6IG51bGwsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHBvc3NpYmxlVGVjaG5vbG9naWVzID0gZ2V0TGlzdE9mUG9zc2libGVUZWNobm9sb2dpZXNCeUZpcnN0TWF0Y2hlZENvZGUoc2VxdWVuY2UsIHBvc3NpYmxlU3ludGhlc2l6ZXJzWzBdKTtcbiAgICAvLyBpZiAocG9zc2libGVUZWNobm9sb2dpZXMubGVuZ3RoID4gMSkge1xuICAgIC8vICAgY29uc3QgdGVjaG5vbG9neSA9IHVpLmNob2ljZUlucHV0KCdDaG9vc2UgdGVjaG5vbG9neSBmcm9tIGxpc3Q6ICcsIHBvc3NpYmxlVGVjaG5vbG9naWVzWzBdLFxuICAgIC8vIHBvc3NpYmxlVGVjaG5vbG9naWVzKTtcbiAgICAvLyAgIHVpLmRpYWxvZygnQ2hvb3NlIFRlY2hub2xvZ3knKVxuICAgIC8vICAgICAuYWRkKHVpLnBhbmVsKFt0ZWNobm9sb2d5LnJvb3RdLCB7c3R5bGU6IHtmb250V2VpZ2h0OiAnYm9sZCd9fSkpXG4gICAgLy8gICAgIC5vbk9LKCgpID0+IHBvc3NpYmxlVGVjaG5vbG9naWVzID0gW3RlY2hub2xvZ3kudmFsdWVdKVxuICAgIC8vICAgICAub25DYW5jZWwoKCkgPT4ge1xuICAgIC8vICAgICAgIHBvc3NpYmxlVGVjaG5vbG9naWVzID0gW3Bvc3NpYmxlVGVjaG5vbG9naWVzWzBdXTtcbiAgICAvLyAgICAgICBncm9rLnNoZWxsLndhcm5pbmcoJ0lucHV0IHNlcXVlbmNlIGlzIGV4cGVjdGVkIHRvIGJlIGluIGZvcm1hdCAnICsgcG9zc2libGVUZWNobm9sb2dpZXNbMF0pO1xuICAgIC8vICAgICB9KVxuICAgIC8vICAgICAuc2hvdygpO1xuICAgIC8vIH0gZWxzZSBpZiAocG9zc2libGVUZWNobm9sb2dpZXMubGVuZ3RoID09IDApXG4gICAgaWYgKHBvc3NpYmxlVGVjaG5vbG9naWVzLmxlbmd0aCA9PSAwKVxuICAgICAgICByZXR1cm4geyBpbmRleE9mRmlyc3ROb3RWYWxpZENoYXI6IDAsIHN5bnRoZXNpemVyOiBbcG9zc2libGVTeW50aGVzaXplcnNbM11dLCB0ZWNobm9sb2d5OiBudWxsIH07XG4gICAgb3V0cHV0SW5kZXggPSAwO1xuICAgIC8vIHBvc3NpYmxlVGVjaG5vbG9naWVzLmZvckVhY2goKHRlY2hub2xvZ3k6IHN0cmluZykgPT4ge1xuICAgIC8vICAgY29uc3QgY29kZXMgPSBPYmplY3Qua2V5cyhtYXBbcG9zc2libGVTeW50aGVzaXplcnNbMF1dW3RlY2hub2xvZ3ldKTtcbiAgICAvLyAgIHdoaWxlIChvdXRwdXRJbmRleCA8IHNlcXVlbmNlLmxlbmd0aCkge1xuICAgIC8vICAgICBjb25zdCBtYXRjaGVkQ29kZSA9IGNvZGVzLmZpbmQoKGMpID0+IGMgPT0gc2VxdWVuY2Uuc2xpY2Uob3V0cHV0SW5kZXgsIG91dHB1dEluZGV4ICsgYy5sZW5ndGgpKTtcbiAgICAvLyAgICAgaWYgKG1hdGNoZWRDb2RlID09IG51bGwpXG4gICAgLy8gICAgICAgYnJlYWs7XG4gICAgLy8gICAgIGlmICggLy8gZm9yIG1pc3Rha2UgcGF0dGVybiAnckFBJ1xuICAgIC8vICAgICAgIG91dHB1dEluZGV4ID4gMSAmJlxuICAgIC8vICAgICAgIG51Y2xlb3RpZGVzLmluY2x1ZGVzKHNlcXVlbmNlW291dHB1dEluZGV4XSkgJiZcbiAgICAvLyAgICAgICBmaXJzdFVuaXF1ZUNoYXJhY3RlcnMuaW5jbHVkZXMoc2VxdWVuY2Vbb3V0cHV0SW5kZXggLSAyXSlcbiAgICAvLyAgICAgKSBicmVhaztcbiAgICAvLyAgICAgaWYgKCAvLyBmb3IgbWlzdGFrZSBwYXR0ZXJuICdBckEnXG4gICAgLy8gICAgICAgZmlyc3RVbmlxdWVDaGFyYWN0ZXJzLmluY2x1ZGVzKHNlcXVlbmNlW291dHB1dEluZGV4ICsgMV0pICYmXG4gICAgLy8gICAgICAgbnVjbGVvdGlkZXMuaW5jbHVkZXMoc2VxdWVuY2Vbb3V0cHV0SW5kZXhdKVxuICAgIC8vICAgICApIHtcbiAgICAvLyAgICAgICBvdXRwdXRJbmRleCsrO1xuICAgIC8vICAgICAgIGJyZWFrO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIG91dHB1dEluZGV4ICs9IG1hdGNoZWRDb2RlLmxlbmd0aDtcbiAgICAvLyAgIH1cbiAgICAvLyB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBpbmRleE9mRmlyc3ROb3RWYWxpZENoYXI6IGluZGV4T2ZGaXJzdE5vdFZhbGlkQ2hhcixcbiAgICAgICAgc3ludGhlc2l6ZXI6IHBvc3NpYmxlU3ludGhlc2l6ZXJzLFxuICAgICAgICB0ZWNobm9sb2d5OiBbcG9zc2libGVUZWNobm9sb2dpZXNbb3V0cHV0SW5kZXhdXSxcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbENvZGVzT2ZTeW50aGVzaXplcihzeW50aGVzaXplcikge1xuICAgIGxldCBjb2RlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgdGVjaG5vbG9neSBvZiBPYmplY3Qua2V5cyhtYXBbc3ludGhlc2l6ZXJdKSlcbiAgICAgICAgY29kZXMgPSBjb2Rlcy5jb25jYXQoT2JqZWN0LmtleXMobWFwW3N5bnRoZXNpemVyXVt0ZWNobm9sb2d5XSkpO1xuICAgIHJldHVybiBjb2Rlcy5jb25jYXQoT2JqZWN0LmtleXMoTU9ESUZJQ0FUSU9OUykpLmNvbmNhdChkZWxpbWl0ZXIpO1xufVxuZnVuY3Rpb24gZ2V0TGlzdE9mUG9zc2libGVTeW50aGVzaXplcnNCeUZpcnN0TWF0Y2hlZENvZGUoc2VxdWVuY2UpIHtcbiAgICBsZXQgc3ludGhlc2l6ZXJzID0gW107XG4gICAgT2JqZWN0LmtleXMobWFwKS5mb3JFYWNoKChzeW50aGVzaXplcikgPT4ge1xuICAgICAgICBsZXQgY29kZXMgPSBzb3J0QnlTdHJpbmdMZW5ndGhJbkRlc2NlbmRpbmdPcmRlcihnZXRBbGxDb2Rlc09mU3ludGhlc2l6ZXIoc3ludGhlc2l6ZXIpKTtcbiAgICAgICAgaWYgKHN5bnRoZXNpemVyID09ICdKYW5zc2VuIEdDUlMgQ29kZXMnKVxuICAgICAgICAgICAgY29kZXMgPSBjb2Rlcy5jb25jYXQoZ2Nyc0NvZGVzV2l0aG91dFNtaWxlcyk7XG4gICAgICAgIC8vVE9ETzogZ2V0IGZpcnN0IG5vbi1kcm9wZG93biBjb2RlIHdoZW4gdGhlcmUgYXJlIHR3byBtb2RpZmljYXRpb25zXG4gICAgICAgIGxldCBzdGFydCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VxdWVuY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChzZXF1ZW5jZVtpXSA9PSAnKScgJiYgaSAhPSBzZXF1ZW5jZS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgc3RhcnQgPSBpICsgMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2Nyc0NvZGVzV2l0aG91dFNtaWxlcy5zb21lKChzKSA9PiBzID09IHNlcXVlbmNlLnNsaWNlKHN0YXJ0LCBzdGFydCArIHMubGVuZ3RoKSkpXG4gICAgICAgICAgICBzeW50aGVzaXplcnMgPSBbJ0phbnNzZW4gR0NSUyBDb2RlcyddO1xuICAgICAgICBpZiAoY29kZXMuc29tZSgocykgPT4gcyA9PSBzZXF1ZW5jZS5zbGljZShzdGFydCwgc3RhcnQgKyBzLmxlbmd0aCkpKVxuICAgICAgICAgICAgc3ludGhlc2l6ZXJzLnB1c2goc3ludGhlc2l6ZXIpO1xuICAgIH0pO1xuICAgIHJldHVybiBzeW50aGVzaXplcnM7XG59XG5mdW5jdGlvbiBnZXRMaXN0T2ZQb3NzaWJsZVRlY2hub2xvZ2llc0J5Rmlyc3RNYXRjaGVkQ29kZShzZXF1ZW5jZSwgc3ludGhlc2l6ZXIpIHtcbiAgICBjb25zdCB0ZWNobm9sb2dpZXMgPSBbXTtcbiAgICBPYmplY3Qua2V5cyhtYXBbc3ludGhlc2l6ZXJdKS5mb3JFYWNoKCh0ZWNobm9sb2d5KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvZGVzID0gT2JqZWN0LmtleXMobWFwW3N5bnRoZXNpemVyXVt0ZWNobm9sb2d5XSkuY29uY2F0KE9iamVjdC5rZXlzKE1PRElGSUNBVElPTlMpKTtcbiAgICAgICAgaWYgKGNvZGVzLnNvbWUoKHMpID0+IHMgPT0gc2VxdWVuY2Uuc2xpY2UoMCwgcy5sZW5ndGgpKSlcbiAgICAgICAgICAgIHRlY2hub2xvZ2llcy5wdXNoKHRlY2hub2xvZ3kpO1xuICAgIH0pO1xuICAgIHJldHVybiB0ZWNobm9sb2dpZXM7XG59XG5leHBvcnQgZnVuY3Rpb24gY29udmVydFNlcXVlbmNlKHNlcXVlbmNlLCBvdXRwdXQpIHtcbiAgICBpZiAob3V0cHV0LmluZGV4T2ZGaXJzdE5vdFZhbGlkQ2hhciAhPSAtMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLy8gdHlwZTogJycsXG4gICAgICAgICAgICBpbmRleE9mRmlyc3ROb3RWYWxpZENoYXI6IEpTT04uc3RyaW5naWZ5KG91dHB1dCksXG4gICAgICAgICAgICBFcnJvcjogdW5kZWZpbmVkSW5wdXRTZXF1ZW5jZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5zeW50aGVzaXplci5pbmNsdWRlcyhTWU5USEVTSVpFUlMuUkFXX05VQ0xFT1RJREVTKSkgeyAvLyYmIG91dHB1dC50ZWNobm9sb2d5IS5pbmNsdWRlcyhURUNITk9MT0dJRVMuRE5BKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU1lOVEhFU0laRVJTLlJBV19OVUNMRU9USURFUyxcbiAgICAgICAgICAgIE51Y2xlb3RpZGVzOiBzZXF1ZW5jZSxcbiAgICAgICAgICAgIEJpb1NwcmluZzogYXNvR2FwbWVyc051Y2xlb3RpZGVzVG9CaW9TcHJpbmcoc2VxdWVuY2UpLFxuICAgICAgICAgICAgR0NSUzogYXNvR2FwbWVyc051Y2xlb3RpZGVzVG9HY3JzKHNlcXVlbmNlKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5zeW50aGVzaXplci5pbmNsdWRlcyhTWU5USEVTSVpFUlMuQklPU1BSSU5HKSAmJiBvdXRwdXQudGVjaG5vbG9neS5pbmNsdWRlcyhURUNITk9MT0dJRVMuQVNPX0dBUE1FUlMpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBTWU5USEVTSVpFUlMuQklPU1BSSU5HICsgJyAnICsgVEVDSE5PTE9HSUVTLkFTT19HQVBNRVJTLFxuICAgICAgICAgICAgTnVjbGVvdGlkZXM6IGFzb0dhcG1lcnNCaW9TcHJpbmdUb051Y2xlb3RpZGVzKHNlcXVlbmNlKSxcbiAgICAgICAgICAgIEJpb1NwcmluZzogc2VxdWVuY2UsXG4gICAgICAgICAgICBHQ1JTOiBhc29HYXBtZXJzQmlvU3ByaW5nVG9HY3JzKHNlcXVlbmNlKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5zeW50aGVzaXplci5pbmNsdWRlcyhTWU5USEVTSVpFUlMuR0NSUykgJiYgb3V0cHV0LnRlY2hub2xvZ3kuaW5jbHVkZXMoVEVDSE5PTE9HSUVTLkFTT19HQVBNRVJTKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU1lOVEhFU0laRVJTLkdDUlMgKyAnICcgKyBURUNITk9MT0dJRVMuQVNPX0dBUE1FUlMsXG4gICAgICAgICAgICBOdWNsZW90aWRlczogYXNvR2FwbWVyc0djcnNUb051Y2xlb3RpZGVzKHNlcXVlbmNlKSxcbiAgICAgICAgICAgIEJpb1NwcmluZzogYXNvR2FwbWVyc0djcnNUb0Jpb1NwcmluZyhzZXF1ZW5jZSksXG4gICAgICAgICAgICBNZXJtYWRlMTI6IGdjcnNUb01lcm1hZGUxMihzZXF1ZW5jZSksXG4gICAgICAgICAgICBHQ1JTOiBzZXF1ZW5jZSxcbiAgICAgICAgICAgIExDTVM6IGdjcnNUb0xjbXMoc2VxdWVuY2UpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAob3V0cHV0LnN5bnRoZXNpemVyLmluY2x1ZGVzKFNZTlRIRVNJWkVSUy5SQVdfTlVDTEVPVElERVMpICYmIG91dHB1dC50ZWNobm9sb2d5LmluY2x1ZGVzKFRFQ0hOT0xPR0lFUy5STkEpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBTWU5USEVTSVpFUlMuUkFXX05VQ0xFT1RJREVTICsgJyAnICsgVEVDSE5PTE9HSUVTLlJOQSxcbiAgICAgICAgICAgIE51Y2xlb3RpZGVzOiBzZXF1ZW5jZSxcbiAgICAgICAgICAgIEJpb1NwcmluZzogc2lSbmFOdWNsZW90aWRlVG9CaW9TcHJpbmdTZW5zZVN0cmFuZChzZXF1ZW5jZSksXG4gICAgICAgICAgICBBeG9sYWJzOiBzaVJuYU51Y2xlb3RpZGVUb0F4b2xhYnNTZW5zZVN0cmFuZChzZXF1ZW5jZSksXG4gICAgICAgICAgICBHQ1JTOiBzaVJuYU51Y2xlb3RpZGVzVG9HY3JzKHNlcXVlbmNlKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5zeW50aGVzaXplci5pbmNsdWRlcyhTWU5USEVTSVpFUlMuQklPU1BSSU5HKSAmJiBvdXRwdXQudGVjaG5vbG9neS5pbmNsdWRlcyhURUNITk9MT0dJRVMuU0lfUk5BKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU1lOVEhFU0laRVJTLkJJT1NQUklORyArICcgJyArIFRFQ0hOT0xPR0lFUy5TSV9STkEsXG4gICAgICAgICAgICBOdWNsZW90aWRlczogc2lSbmFCaW9TcHJpbmdUb051Y2xlb3RpZGVzKHNlcXVlbmNlKSxcbiAgICAgICAgICAgIEJpb1NwcmluZzogc2VxdWVuY2UsXG4gICAgICAgICAgICBBeG9sYWJzOiBzaVJuYUJpb1NwcmluZ1RvQXhvbGFicyhzZXF1ZW5jZSksXG4gICAgICAgICAgICBHQ1JTOiBzaVJuYUJpb1NwcmluZ1RvR2NycyhzZXF1ZW5jZSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChvdXRwdXQuc3ludGhlc2l6ZXIuaW5jbHVkZXMoU1lOVEhFU0laRVJTLkFYT0xBQlMpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBTWU5USEVTSVpFUlMuQVhPTEFCUyArICcgJyArIFRFQ0hOT0xPR0lFUy5TSV9STkEsXG4gICAgICAgICAgICBOdWNsZW90aWRlczogc2lSbmFBeG9sYWJzVG9OdWNsZW90aWRlcyhzZXF1ZW5jZSksXG4gICAgICAgICAgICBCaW9TcHJpbmc6IHNpUm5hQXhvbGFic1RvQmlvU3ByaW5nKHNlcXVlbmNlKSxcbiAgICAgICAgICAgIEF4b2xhYnM6IHNlcXVlbmNlLFxuICAgICAgICAgICAgR0NSUzogc2lSbmFBeG9sYWJzVG9HY3JzKHNlcXVlbmNlKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5zeW50aGVzaXplci5pbmNsdWRlcyhTWU5USEVTSVpFUlMuR0NSUykgJiYgb3V0cHV0LnRlY2hub2xvZ3kuaW5jbHVkZXMoVEVDSE5PTE9HSUVTLlNJX1JOQSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFNZTlRIRVNJWkVSUy5HQ1JTICsgJyAnICsgVEVDSE5PTE9HSUVTLlNJX1JOQSxcbiAgICAgICAgICAgIE51Y2xlb3RpZGVzOiBzaVJuYUdjcnNUb051Y2xlb3RpZGVzKHNlcXVlbmNlKSxcbiAgICAgICAgICAgIEJpb1NwcmluZzogc2lSbmFHY3JzVG9CaW9TcHJpbmcoc2VxdWVuY2UpLFxuICAgICAgICAgICAgQXhvbGFiczogc2lSbmFHY3JzVG9BeG9sYWJzKHNlcXVlbmNlKSxcbiAgICAgICAgICAgIE1NMTI6IGdjcnNUb01lcm1hZGUxMihzZXF1ZW5jZSksXG4gICAgICAgICAgICBHQ1JTOiBzZXF1ZW5jZSxcbiAgICAgICAgICAgIExDTVM6IGdjcnNUb0xjbXMoc2VxdWVuY2UpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAob3V0cHV0LnN5bnRoZXNpemVyLmluY2x1ZGVzKFNZTlRIRVNJWkVSUy5HQ1JTKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU1lOVEhFU0laRVJTLkdDUlMsXG4gICAgICAgICAgICBOdWNsZW90aWRlczogZ2Nyc1RvTnVjbGVvdGlkZXMoc2VxdWVuY2UpLFxuICAgICAgICAgICAgR0NSUzogc2VxdWVuY2UsXG4gICAgICAgICAgICBNZXJtYWRlMTI6IGdjcnNUb01lcm1hZGUxMihzZXF1ZW5jZSksXG4gICAgICAgICAgICBMQ01TOiBnY3JzVG9MY21zKHNlcXVlbmNlKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG91dHB1dC5zeW50aGVzaXplci5pbmNsdWRlcyhTWU5USEVTSVpFUlMuTUVSTUFERV8xMikpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFNZTlRIRVNJWkVSUy5NRVJNQURFXzEyLFxuICAgICAgICAgICAgTnVjbGVvdGlkZXM6IG5vVHJhbnNsYXRpb25UYWJsZUF2YWlsYWJsZSxcbiAgICAgICAgICAgIEdDUlM6IG5vVHJhbnNsYXRpb25UYWJsZUF2YWlsYWJsZSxcbiAgICAgICAgICAgIE1lcm1hZGUxMjogc2VxdWVuY2UsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IHVuZGVmaW5lZElucHV0U2VxdWVuY2UsXG4gICAgICAgIE51Y2xlb3RpZGVzOiB1bmRlZmluZWRJbnB1dFNlcXVlbmNlLFxuICAgIH07XG59XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCB7IGNhdGVnb3J5LCBleHBlY3QsIHRlc3QgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90ZXN0JztcbmltcG9ydCB7IHNlcXVlbmNlVG9TbWlsZXMgfSBmcm9tICcuLi9zdHJ1Y3R1cmVzLXdvcmtzL2Zyb20tbW9ub21lcnMnO1xuaW1wb3J0IHsgU1lOVEhFU0laRVJTIH0gZnJvbSAnLi4vc3RydWN0dXJlcy13b3Jrcy9tYXAnO1xuY2F0ZWdvcnkoJ3NlcXVlbmNlLXRyYW5zbGF0b3InLCAoKSA9PiB7XG4gICAgdGVzdCgnQUdHVENDVENUVEdBQ1RUQUdHQ0MnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKUNbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9QyhDKUMoPU8pTkMyKD1PKSlDW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlDW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlDW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9QyhDKUMoPU8pTkMyKD1PKSlDW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlDW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9QyhDKUMoPU8pTkMyKD1PKSlDW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9QyhDKUMoPU8pTkMyKD1PKSlDW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKUNbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKUNbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyg9TylOQzIoPU8pKUNbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DKEMpQyg9TylOQzIoPU8pKUNbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKUNbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlDW0NAQEhdMU9QKD1PKShPKU9DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlDW0NAQEhdMU8nO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnQUdHVENDVENUVEdBQ1RUQUdHQ0MnLCBmYWxzZSwgU1lOVEhFU0laRVJTLlJBV19OVUNMRU9USURFUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnaW52YWJhc2ljL2dhbG5hYzEnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ0MoTylDTkMoPU8pQ0NDQyg9TylOQyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKSc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKXNnZyhpbnZhYmFzaWMpKEdhbE5BYy0yLUpOSiknLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ2ludmFiYXNpYy9nYWxuYWMyJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NDKE8pQ05DKD1PKUNDQ0MoPU8pTkMoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAgICAgICAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAgICAgICAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnKGludmFiYXNpYylzZ3NnKGludmFiYXNpYykoR2FsTkFjLTItSk5KKScsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnaW52YWJhc2ljL2dhbG5hYzMnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ0MoTylDTkMoPU8pQ0NDQyg9TylOQyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKSc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKXNnZ3MoaW52YWJhc2ljKShHYWxOQWMtMi1KTkopJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdpbnZhYmFzaWMvZ2FsbmFjNCcsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9ICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ09QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ09QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DQyhPKUNOQyg9TylDQ0NDKD1PKU5DKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJyhpbnZhYmFzaWMpc2dnKGludmFiYXNpYylzKEdhbE5BYy0yLUpOSiknLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ3VzQ2ZDZlVmR2ZBZicsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oRilbQ0BASF0xTyc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCd1c0NmQ2ZVZkdmQWYnLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ3VzQWZzdXNnc2dzZycsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygndXNBZnN1c2dzZ3NnJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdVZlVmVWZzQ2ZzdWFjZycsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJ1VmVWZVZnNDZnN1YWNnJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdzdXN1c3VzYXVhc3UnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1AoPU8pKFMpT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJ3N1c3VzdXNhdWFzdScsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnQ2ZHZkNmc0dmc0NmJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xTyc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCdDZkdmQ2ZzR2ZzQ2YnLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ2FjYWNhY3NhY3NhYycsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9ICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU8nO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnYWNhY2Fjc2Fjc2FjJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdjY2NnZ2d1c3VnJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnY2NjZ2dndXN1ZycsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnVWZBZkNmR2ZHZkNmQWZVZicsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9ICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU8nO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnVWZBZkNmR2ZHZkNmQWZVZicsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnKGludmFiYXNpYylzdWN1Q2Z1VWYnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xTyc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKXN1Y3VDZnVVZicsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnKGludmFiYXNpYylzQWZnY3VnVWYnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xTyc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKXNBZmdjdWdVZicsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnKGludmFiYXNpYyljdUNmdVVmc2MnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xTyc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKWN1Q2Z1VWZzYycsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnKGludmFiYXNpYylzY3VzdXN1KEdhbE5BYy0yLUpOSiknLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DQyhPKUNOQyg9TylDQ0NDKD1PKU5DKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJyhpbnZhYmFzaWMpc2N1c3VzdShHYWxOQWMtMi1KTkopJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCcoaW52YWJhc2ljKXVzQWZzdWN1Q2Z1VWZBZmdjdWdVZmdDZmFjdXN1c3UnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJyhpbnZhYmFzaWMpdXNBZnN1Y3VDZnVVZkFmZ2N1Z1VmZ0NmYWN1c3VzdScsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnKGludmFiYXNpYylhc2FjZ0dmdUdmQ2ZBZmFjdWN1YXV1Y2EnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xTyc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKWFzYWNnR2Z1R2ZDZkFmYWN1Y3VhdXVjYScsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnKGludmFiYXNpYylzY3NnZ3VHZmNBZkFmQ2Z1Y3VhdXVjdWdhJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU8nO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnKGludmFiYXNpYylzY3NnZ3VHZmNBZkFmQ2Z1Y3VhdXVjdWdhJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCcoaW52YWJhc2ljKXNjc2FhY1VmY1VmQWZVZnVjdWdnYWN1dWEnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xTyc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKXNjc2FhY1VmY1VmQWZVZnVjdWdnYWN1dWEnLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJyhpbnZhYmFzaWMpc2FzYWN1Q2Z1QWZVZlVmY3VnZ2FjdXV1YScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9ICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ09QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJyhpbnZhYmFzaWMpc2FzYWN1Q2Z1QWZVZlVmY3VnZ2FjdXV1YScsIGZhbHNlLCBTWU5USEVTSVpFUlMuQVhPTEFCUyksIGV4cGVjdGVkKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnKGludmFiYXNpYyl1c0Fmc2N1ZyhpbnZhYmFzaWMpKEdhbE5BYy0yLUpOSiknLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShGKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ09QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DQyhPKUNOQyg9TylDQ0NDKD1PKU5DKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJyhpbnZhYmFzaWMpdXNBZnNjdWcoaW52YWJhc2ljKShHYWxOQWMtMi1KTkopJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCcoaW52YWJhc2ljKXNhc3VhYUNmY1VmKEdhbE5BYy0yLUpOSiknLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnT1tDQEBIXTFDW0NAQEhdT1tDQEhdMUNPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ0MoTylDTkMoPU8pQ0NDQyg9TylOQyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKScgK1xuICAgICAgICAgICAgJyhDT0NDQyg9TylOQ0NDTkMoPU8pQ0NDQ09DMk9DKENPKUMoTylDKE8pQzJOQyg9TylDKSc7XG4gICAgICAgIGV4cGVjdChzZXF1ZW5jZVRvU21pbGVzKCcoaW52YWJhc2ljKXNhc3VhYUNmY1VmKEdhbE5BYy0yLUpOSiknLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJyhpbnZhYmFzaWMpc2FzdWFhQ2ZjVWZDZlVmdWd1YWd1dWF1YShHYWxOQWMtMi1KTkopJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DTj1DKE4pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DQyhPKUNOQyg9TylDQ0NDKD1PKU5DKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJyhpbnZhYmFzaWMpc2FzdWFhQ2ZjVWZDZlVmdWd1YWd1dWF1YShHYWxOQWMtMi1KTkopJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCcoaW52YWJhc2ljKXNjc2F1Y2FjZ3VVZkdmQ2ZhZ2NjZ3VjdXVhKGludmFiYXNpYykoR2FsTkFjLTItSk5KKScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9ICdPW0NAQEhdMUNbQ0BASF1PW0NASF0xQ09QKD1PKShTKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkMzTj1DKE4pTkMoPU8pQz0zTj1DMilbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NDKE8pQ05DKD1PKUNDQ0MoPU8pTkMoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAgICAgICAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknICtcbiAgICAgICAgICAgICcoQ09DQ0MoPU8pTkNDQ05DKD1PKUNDQ0NPQzJPQyhDTylDKE8pQyhPKUMyTkMoPU8pQyknO1xuICAgICAgICBleHBlY3Qoc2VxdWVuY2VUb1NtaWxlcygnKGludmFiYXNpYylzY3NhdWNhY2d1VWZHZkNmYWdjY2d1Y3V1YShpbnZhYmFzaWMpKEdhbE5BYy0yLUpOSiknLCBmYWxzZSwgU1lOVEhFU0laRVJTLkFYT0xBQlMpLCBleHBlY3RlZCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJyhpbnZhYmFzaWMpc3VzZ3V1VWZnQ2ZDZlVmYWNhdWN1YWN1YShHYWxOQWMtMi1KTkopJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ09bQ0BASF0xQ1tDQEBIXU9bQ0BIXTFDT1AoPU8pKFMpJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoUyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049QyhOKU5DKD1PKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUMoTilOQyg9TylDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKE4pPU5DMig9TykpW0NASF0oRilbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyhOKT1OQzIoPU8pKVtDQEhdKEYpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoPU8pTkMyKD1PKSlbQ0BIXShGKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQzNOPUNOPUMoTilDPTNOPUMyKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDPUNDKD1PKU5DMig9TykpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DW0NASF0xT1tDQEBIXShOMkM9Q0MoTik9TkMyKD1PKSlbQ0BIXShPQylbQ0BASF0xT1AoPU8pKE8pJyArXG4gICAgICAgICAgICAnT0NbQ0BIXTFPW0NAQEhdKE4yQz1DQyg9TylOQzIoPU8pKVtDQEhdKE9DKVtDQEBIXTFPUCg9TykoTyknICtcbiAgICAgICAgICAgICdPQ1tDQEhdMU9bQ0BASF0oTjJDM049Q049QyhOKUM9M049QzIpW0NASF0oT0MpW0NAQEhdMU9QKD1PKShPKScgK1xuICAgICAgICAgICAgJ09DQyhPKUNOQyg9TylDQ0NDKD1PKU5DKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJyArXG4gICAgICAgICAgICAnKENPQ0NDKD1PKU5DQ0NOQyg9TylDQ0NDT0MyT0MoQ08pQyhPKUMoTylDMk5DKD1PKUMpJztcbiAgICAgICAgZXhwZWN0KHNlcXVlbmNlVG9TbWlsZXMoJyhpbnZhYmFzaWMpc3VzZ3V1VWZnQ2ZDZlVmYWNhdWN1YWN1YShHYWxOQWMtMi1KTkopJywgZmFsc2UsIFNZTlRIRVNJWkVSUy5BWE9MQUJTKSwgZXhwZWN0ZWQpO1xuICAgIH0pKTtcbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBERzsiLCJtb2R1bGUuZXhwb3J0cyA9IGdyb2s7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IHJ1blRlc3RzLCB0ZXN0cyB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3Rlc3QnO1xuaW1wb3J0ICcuL3Rlc3RzL3NtaWxlcy10ZXN0cyc7XG5leHBvcnQgY29uc3QgX3BhY2thZ2UgPSBuZXcgREcuUGFja2FnZSgpO1xuZXhwb3J0IHsgdGVzdHMgfTtcbi8vbmFtZTogdGVzdFxuLy9vdXRwdXQ6IGRhdGFmcmFtZSByZXN1bHRcbmV4cG9ydCBmdW5jdGlvbiB0ZXN0KCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB5aWVsZCBydW5UZXN0cygpO1xuICAgICAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21PYmplY3RzKGRhdGEpO1xuICAgIH0pO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9
|