diff --git a/build/js/gtex-viz.bundle.dev.js b/build/js/gtex-viz.bundle.dev.js index e2e1857a..159630a0 100644 --- a/build/js/gtex-viz.bundle.dev.js +++ b/build/js/gtex-viz.bundle.dev.js @@ -9053,7 +9053,8 @@ class IsoformTrackViewer { _renderModels(w, labelOn = 'left'){ this.isoforms.forEach((isoform) => { - const model = new GeneModel(isoform, this.modelExons, this.isoformExons[isoform.transcriptId], [], true); + let reference = (this.modelExons === undefined || this.modelExons === null)?this.isoformExons[isoform.transcriptId]:this.modelExons; + const model = new GeneModel(isoform, reference, this.isoformExons[isoform.transcriptId], [], true); const isoformG = select(`#${isoform.transcriptId.replace(".", "_")}`); model.render(isoformG, {w:w, h: this.yScale.bandwidth(), labelOn: labelOn}); }); @@ -9232,106 +9233,6 @@ const demoData = { ], transcriptTracks: { "exons": { - "ENST00000578419.1": [ - { - "chrom": "17", - "chromStart": 77071021, - "chromEnd": 77071172, - "strand": "+", - "exonNumber": "1", - "exonId": "ENSE00003502032.1" - - }, - { - "chrom": "17", - "chromEnd": 77073579, - "exonId": "ENSE00003672628.1", - "exonNumber": "2", - "chromStart": 77073512, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77073946, - "exonId": "ENSE00003475281.1", - "exonNumber": "3", - "chromStart": 77073745, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77076446, - "exonId": "ENSE00003679852.1", - "exonNumber": "4", - "chromStart": 77076289, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77077155, - "exonId": "ENSE00003583515.1", - "exonNumber": "5", - "chromStart": 77077007, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77078631, - "exonId": "ENSE00003589230.1", - "exonNumber": "6", - "chromStart": 77077980, - "strand": "+" - } - ], - "ENST00000539857.2": [ - { - "chrom": "17", - "chromEnd": 77071172, - "exonId": "ENSE00003512401.1", - "exonNumber": "1", - "chromStart": 77071021, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77073579, - "exonId": "ENSE00003623828.1", - "exonNumber": "2", - "chromStart": 77073512, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77073946, - "exonId": "ENSE00003638693.1", - "exonNumber": "3", - "chromStart": 77073745, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77076446, - "exonId": "ENSE00003651250.1", - "exonNumber": "4", - "chromStart": 77076289, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77077155, - "exonId": "ENSE00003607773.1", - "exonNumber": "5", - "chromStart": 77077007, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77078631, - "exonId": "ENSE00003488117.1", - "exonNumber": "6", - "chromStart": 77077980, - "strand": "+" - }], "ENST00000311595.9": [ { "chrom": "17", @@ -9392,25 +9293,6 @@ const demoData = { ] }, "transcripts": [ - { - - "chromosome": "17", - "end": 77078631, - "gencodeId": "ENSG00000167280.12", - "geneSymbol": "ENGASE", - "start": 77071021, - "strand": "+", - "transcriptId": "ENST00000578419.1" - }, - { - "chromosome": "17", - "end": 77078631, - "gencodeId": "ENSG00000167280.12", - "geneSymbol": "ENGASE", - "start": 77071021, - "strand": "+", - "transcriptId": "ENST00000539857.2" - }, { "chromosome": "17", "end": 77078612, @@ -9464,7 +9346,7 @@ function transcriptTracks(par=transcriptTracksConfig){ h: inHeight, labelOn: par.labelPos }; - let viewer = new IsoformTrackViewer(par.data.transcripts, par.data.exons, par.data.exons["ENST00000578419.1"], config); + let viewer = new IsoformTrackViewer(par.data.transcripts, par.data.exons, undefined, config); viewer.render(false, svg, par.labelPos); } @@ -9628,4 +9510,4 @@ exports.groupedViolinPlot = groupedViolinPlot; return exports; }({})); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3RleC12aXouYnVuZGxlLmRldi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbmFtZXNwYWNlcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NyZWF0b3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3RvckFsbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3RBbGwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9tYXRjaGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2ZpbHRlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zcGFyc2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZW50ZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jb25zdGFudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9kYXRhLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2V4aXQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbWVyZ2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb3JkZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc29ydC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9jYWxsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL25vZGVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL25vZGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2l6ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lbXB0eS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lYWNoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2F0dHIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy93aW5kb3cuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc3R5bGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcHJvcGVydHkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xhc3NlZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi90ZXh0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2h0bWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcmFpc2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbG93ZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vYXBwZW5kLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luc2VydC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9yZW1vdmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xvbmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGF0dW0uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGlzcGF0Y2guanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zb3VyY2VFdmVudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3BvaW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbW91c2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3RBbGwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FzY2VuZGluZy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0b3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Jpc2VjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbnVtYmVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy92YXJpYW5jZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvZGV2aWF0aW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9leHRlbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3JhbmdlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aWNrcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcXVhbnRpbGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21heC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWVhbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWVkaWFuLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9taW4uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3N1bS5qcyIsIi4uLy4uL3NyYy9tb2R1bGVzL3V0aWxzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvZGVmYXVsdFNvdXJjZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL25vcm1hbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1jb2xsZWN0aW9uL3NyYy9tYXAuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvbmVzdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvYXJyYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL29yZGluYWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2JhbmQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2RlZmluZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY29sb3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL21hdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2xhYi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY3ViZWhlbGl4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9iYXNpcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYmFzaXNDbG9zZWQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2NvbnN0YW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb2xvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcmdiLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9hcnJheS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvZGF0ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvbnVtYmVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9vYmplY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3N0cmluZy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdmFsdWUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JvdW5kLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vZGVjb21wb3NlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vcGFyc2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY3ViZWhlbGl4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jb25zdGFudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbnVtYmVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jb250aW51b3VzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0RGVjaW1hbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2V4cG9uZW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0R3JvdXAuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXROdW1lcmFscy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFNwZWNpZmllci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFRyaW0uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRQcmVmaXhBdXRvLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0Um91bmRlZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFR5cGVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvaWRlbnRpdHkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9sb2NhbGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9kZWZhdWx0TG9jYWxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uRml4ZWQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25QcmVmaXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25Sb3VuZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdGlja0Zvcm1hdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbGluZWFyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2ludGVydmFsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21pbGxpc2Vjb25kLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2R1cmF0aW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3NlY29uZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9taW51dGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaG91ci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9kYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvd2Vlay5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9tb250aC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy95ZWFyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y01pbnV0ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNIb3VyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y0RheS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNXZWVrLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y01vbnRoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y1llYXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2xvY2FsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvZGVmYXVsdExvY2FsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvaXNvRm9ybWF0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9pc29QYXJzZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvc2VxdWVudGlhbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1kaXNwYXRjaC9zcmMvZGlzcGF0Y2guanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL3RpbWVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lb3V0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2NoZWR1bGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvaW50ZXJydXB0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi9pbnRlcnJ1cHQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90d2Vlbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2ludGVycG9sYXRlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vYXR0ci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2F0dHJUd2Vlbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2RlbGF5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZHVyYXRpb24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lYXNlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZmlsdGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vbWVyZ2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9vbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3JlbW92ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdEFsbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdGlvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3N0eWxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGVUd2Vlbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RleHQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90cmFuc2l0aW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvY3ViaWMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL3RyYW5zaXRpb24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY29sb3JzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvY2F0ZWdvcnkxMC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL0FjY2VudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL0RhcmsyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvUGFpcmVkLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvUGFzdGVsMS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL1Bhc3RlbDIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9TZXQxLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvU2V0Mi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL1NldDMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9yYW1wLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL0JyQkcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvUFJHbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9QaVlHLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1B1T3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvUmRCdS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9SZEd5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1JkWWxCdS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9SZFlsR24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvU3BlY3RyYWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL0J1R24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL0J1UHUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL0duQnUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL09yUmQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL1B1QnVHbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvUHVCdS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvUHVSZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvUmRQdS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvWWxHbkJ1LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9ZbEduLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9ZbE9yQnIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL1lsT3JSZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtc2luZ2xlL0JsdWVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvR3JlZW5zLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvR3JleXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLXNpbmdsZS9QdXJwbGVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvUmVkcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtc2luZ2xlL09yYW5nZXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL2N1YmVoZWxpeC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvcmFpbmJvdy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvc2luZWJvdy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvdmlyaWRpcy5qcyIsIi4uLy4uL3NyYy9tb2R1bGVzL2NvbG9ycy5qcyIsIi4uLy4uL3NyYy9tb2R1bGVzL1Rvb2xiYXIuanMiLCIuLi8uLi9zcmMvbW9kdWxlcy9Ub29sdGlwLmpzIiwiLi4vLi4vc3JjL21vZHVsZXMvSGVhdG1hcC5qcyIsIi4uLy4uL3NyYy9tb2R1bGVzL0RlbmRyb0hlYXRtYXBDb25maWcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvY291bnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvZWFjaC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9lYWNoQmVmb3JlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2VhY2hBZnRlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9zdW0uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvc29ydC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9wYXRoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2FuY2VzdG9ycy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9kZXNjZW5kYW50cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9sZWF2ZXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvbGlua3MuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXhpcy9zcmMvYXJyYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXhpcy9zcmMvaWRlbnRpdHkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXhpcy9zcmMvYXhpcy5qcyIsIi4uLy4uL3NyYy9tb2R1bGVzL25ld2ljay5qcyIsIi4uLy4uL3NyYy9tb2R1bGVzL0RlbmRyb2dyYW0uanMiLCIuLi8uLi9zcmMvbW9kdWxlcy9EZW5kcm9IZWF0bWFwLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXBhdGgvc3JjL3BhdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2NvbnN0YW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9saW5lYXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BvaW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9saW5lLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcmVhLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXJkaW5hbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvbW9ub3RvbmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZHJhZy9zcmMvbm9ldmVudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9ub2RyYWcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZHJhZy9zcmMvZXZlbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYnJ1c2gvc3JjL2NvbnN0YW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9ldmVudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1icnVzaC9zcmMvbm9ldmVudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1icnVzaC9zcmMvYnJ1c2guanMiLCIuLi8uLi9zcmMvbW9kdWxlcy9rZGUuanMiLCIuLi8uLi9zcmMvbW9kdWxlcy9Hcm91cGVkVmlvbGluLmpzIiwiLi4vLi4vc3JjL21vZHVsZXMvR2VuZU1vZGVsLmpzIiwiLi4vLi4vc3JjL21vZHVsZXMvSXNvZm9ybVRyYWNrVmlld2VyLmpzIiwiLi4vLi4vc3JjL0dURXhWaXouanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHZhciB4aHRtbCA9IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHN2ZzogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB4aHRtbDogeGh0bWwsXG4gIHhsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgeG1sOiBcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wiXG59O1xuIiwiaW1wb3J0IG5hbWVzcGFjZXMgZnJvbSBcIi4vbmFtZXNwYWNlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBwcmVmaXggPSBuYW1lICs9IFwiXCIsIGkgPSBwcmVmaXguaW5kZXhPZihcIjpcIik7XG4gIGlmIChpID49IDAgJiYgKHByZWZpeCA9IG5hbWUuc2xpY2UoMCwgaSkpICE9PSBcInhtbG5zXCIpIG5hbWUgPSBuYW1lLnNsaWNlKGkgKyAxKTtcbiAgcmV0dXJuIG5hbWVzcGFjZXMuaGFzT3duUHJvcGVydHkocHJlZml4KSA/IHtzcGFjZTogbmFtZXNwYWNlc1twcmVmaXhdLCBsb2NhbDogbmFtZX0gOiBuYW1lO1xufVxuIiwiaW1wb3J0IG5hbWVzcGFjZSBmcm9tIFwiLi9uYW1lc3BhY2VcIjtcbmltcG9ydCB7eGh0bWx9IGZyb20gXCIuL25hbWVzcGFjZXNcIjtcblxuZnVuY3Rpb24gY3JlYXRvckluaGVyaXQobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRvY3VtZW50ID0gdGhpcy5vd25lckRvY3VtZW50LFxuICAgICAgICB1cmkgPSB0aGlzLm5hbWVzcGFjZVVSSTtcbiAgICByZXR1cm4gdXJpID09PSB4aHRtbCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJID09PSB4aHRtbFxuICAgICAgICA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSlcbiAgICAgICAgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlModXJpLCBuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRvckZpeGVkKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcbiAgcmV0dXJuIChmdWxsbmFtZS5sb2NhbFxuICAgICAgPyBjcmVhdG9yRml4ZWRcbiAgICAgIDogY3JlYXRvckluaGVyaXQpKGZ1bGxuYW1lKTtcbn1cbiIsImZ1bmN0aW9uIG5vbmUoKSB7fVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IG5vbmUgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuaW1wb3J0IHNlbGVjdG9yIGZyb20gXCIuLi9zZWxlY3RvclwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3Ioc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBzdWJub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChzdWJub2RlID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSkge1xuICAgICAgICBpZiAoXCJfX2RhdGFfX1wiIGluIG5vZGUpIHN1Ym5vZGUuX19kYXRhX18gPSBub2RlLl9fZGF0YV9fO1xuICAgICAgICBzdWJncm91cFtpXSA9IHN1Ym5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImZ1bmN0aW9uIGVtcHR5KCkge1xuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiBzZWxlY3RvciA9PSBudWxsID8gZW1wdHkgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuaW1wb3J0IHNlbGVjdG9yQWxsIGZyb20gXCIuLi9zZWxlY3RvckFsbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3JBbGwoc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBbXSwgcGFyZW50cyA9IFtdLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzdWJncm91cHMucHVzaChzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpO1xuICAgICAgICBwYXJlbnRzLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCBwYXJlbnRzKTtcbn1cbiIsInZhciBtYXRjaGVyID0gZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm1hdGNoZXMoc2VsZWN0b3IpO1xuICB9O1xufTtcblxuaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgaWYgKCFlbGVtZW50Lm1hdGNoZXMpIHtcbiAgICB2YXIgdmVuZG9yTWF0Y2hlcyA9IGVsZW1lbnQud2Via2l0TWF0Y2hlc1NlbGVjdG9yXG4gICAgICAgIHx8IGVsZW1lbnQubXNNYXRjaGVzU2VsZWN0b3JcbiAgICAgICAgfHwgZWxlbWVudC5tb3pNYXRjaGVzU2VsZWN0b3JcbiAgICAgICAgfHwgZWxlbWVudC5vTWF0Y2hlc1NlbGVjdG9yO1xuICAgIG1hdGNoZXIgPSBmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdmVuZG9yTWF0Y2hlcy5jYWxsKHRoaXMsIHNlbGVjdG9yKTtcbiAgICAgIH07XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBtYXRjaGVyO1xuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQgbWF0Y2hlciBmcm9tIFwiLi4vbWF0Y2hlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlcihtYXRjaCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIG1hdGNoLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSB7XG4gICAgICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHVwZGF0ZSkge1xuICByZXR1cm4gbmV3IEFycmF5KHVwZGF0ZS5sZW5ndGgpO1xufVxuIiwiaW1wb3J0IHNwYXJzZSBmcm9tIFwiLi9zcGFyc2VcIjtcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZW50ZXIgfHwgdGhpcy5fZ3JvdXBzLm1hcChzcGFyc2UpLCB0aGlzLl9wYXJlbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVudGVyTm9kZShwYXJlbnQsIGRhdHVtKSB7XG4gIHRoaXMub3duZXJEb2N1bWVudCA9IHBhcmVudC5vd25lckRvY3VtZW50O1xuICB0aGlzLm5hbWVzcGFjZVVSSSA9IHBhcmVudC5uYW1lc3BhY2VVUkk7XG4gIHRoaXMuX25leHQgPSBudWxsO1xuICB0aGlzLl9wYXJlbnQgPSBwYXJlbnQ7XG4gIHRoaXMuX19kYXRhX18gPSBkYXR1bTtcbn1cblxuRW50ZXJOb2RlLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IEVudGVyTm9kZSxcbiAgYXBwZW5kQ2hpbGQ6IGZ1bmN0aW9uKGNoaWxkKSB7IHJldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaWxkLCB0aGlzLl9uZXh0KTsgfSxcbiAgaW5zZXJ0QmVmb3JlOiBmdW5jdGlvbihjaGlsZCwgbmV4dCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgbmV4dCk7IH0sXG4gIHF1ZXJ5U2VsZWN0b3I6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7IHJldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7IH0sXG4gIHF1ZXJ5U2VsZWN0b3JBbGw6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7IHJldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7IH1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuaW1wb3J0IHtFbnRlck5vZGV9IGZyb20gXCIuL2VudGVyXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4uL2NvbnN0YW50XCI7XG5cbnZhciBrZXlQcmVmaXggPSBcIiRcIjsgLy8gUHJvdGVjdCBhZ2FpbnN0IGtleXMgbGlrZSDigJxfX3Byb3RvX1/igJ0uXG5cbmZ1bmN0aW9uIGJpbmRJbmRleChwYXJlbnQsIGdyb3VwLCBlbnRlciwgdXBkYXRlLCBleGl0LCBkYXRhKSB7XG4gIHZhciBpID0gMCxcbiAgICAgIG5vZGUsXG4gICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aDtcblxuICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZml0IGludG8gdXBkYXRlLlxuICAvLyBQdXQgYW55IG51bGwgbm9kZXMgaW50byBlbnRlci5cbiAgLy8gUHV0IGFueSByZW1haW5pbmcgZGF0YSBpbnRvIGVudGVyLlxuICBmb3IgKDsgaSA8IGRhdGFMZW5ndGg7ICsraSkge1xuICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgIG5vZGUuX19kYXRhX18gPSBkYXRhW2ldO1xuICAgICAgdXBkYXRlW2ldID0gbm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW50ZXJbaV0gPSBuZXcgRW50ZXJOb2RlKHBhcmVudCwgZGF0YVtpXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUHV0IGFueSBub24tbnVsbCBub2RlcyB0aGF0IGRvbuKAmXQgZml0IGludG8gZXhpdC5cbiAgZm9yICg7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGJpbmRLZXkocGFyZW50LCBncm91cCwgZW50ZXIsIHVwZGF0ZSwgZXhpdCwgZGF0YSwga2V5KSB7XG4gIHZhciBpLFxuICAgICAgbm9kZSxcbiAgICAgIG5vZGVCeUtleVZhbHVlID0ge30sXG4gICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aCxcbiAgICAgIGtleVZhbHVlcyA9IG5ldyBBcnJheShncm91cExlbmd0aCksXG4gICAgICBrZXlWYWx1ZTtcblxuICAvLyBDb21wdXRlIHRoZSBrZXkgZm9yIGVhY2ggbm9kZS5cbiAgLy8gSWYgbXVsdGlwbGUgbm9kZXMgaGF2ZSB0aGUgc2FtZSBrZXksIHRoZSBkdXBsaWNhdGVzIGFyZSBhZGRlZCB0byBleGl0LlxuICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBMZW5ndGg7ICsraSkge1xuICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgIGtleVZhbHVlc1tpXSA9IGtleVZhbHVlID0ga2V5UHJlZml4ICsga2V5LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApO1xuICAgICAgaWYgKGtleVZhbHVlIGluIG5vZGVCeUtleVZhbHVlKSB7XG4gICAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZUJ5S2V5VmFsdWVba2V5VmFsdWVdID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSBrZXkgZm9yIGVhY2ggZGF0dW0uXG4gIC8vIElmIHRoZXJlIGEgbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBrZXksIGpvaW4gYW5kIGFkZCBpdCB0byB1cGRhdGUuXG4gIC8vIElmIHRoZXJlIGlzIG5vdCAob3IgdGhlIGtleSBpcyBhIGR1cGxpY2F0ZSksIGFkZCBpdCB0byBlbnRlci5cbiAgZm9yIChpID0gMDsgaSA8IGRhdGFMZW5ndGg7ICsraSkge1xuICAgIGtleVZhbHVlID0ga2V5UHJlZml4ICsga2V5LmNhbGwocGFyZW50LCBkYXRhW2ldLCBpLCBkYXRhKTtcbiAgICBpZiAobm9kZSA9IG5vZGVCeUtleVZhbHVlW2tleVZhbHVlXSkge1xuICAgICAgdXBkYXRlW2ldID0gbm9kZTtcbiAgICAgIG5vZGUuX19kYXRhX18gPSBkYXRhW2ldO1xuICAgICAgbm9kZUJ5S2V5VmFsdWVba2V5VmFsdWVdID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgZW50ZXJbaV0gPSBuZXcgRW50ZXJOb2RlKHBhcmVudCwgZGF0YVtpXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGFueSByZW1haW5pbmcgbm9kZXMgdGhhdCB3ZXJlIG5vdCBib3VuZCB0byBkYXRhIHRvIGV4aXQuXG4gIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChub2RlQnlLZXlWYWx1ZVtrZXlWYWx1ZXNbaV1dID09PSBub2RlKSkge1xuICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIGRhdGEgPSBuZXcgQXJyYXkodGhpcy5zaXplKCkpLCBqID0gLTE7XG4gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKGQpIHsgZGF0YVsrK2pdID0gZDsgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICB2YXIgYmluZCA9IGtleSA/IGJpbmRLZXkgOiBiaW5kSW5kZXgsXG4gICAgICBwYXJlbnRzID0gdGhpcy5fcGFyZW50cyxcbiAgICAgIGdyb3VwcyA9IHRoaXMuX2dyb3VwcztcblxuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHZhbHVlID0gY29uc3RhbnQodmFsdWUpO1xuXG4gIGZvciAodmFyIG0gPSBncm91cHMubGVuZ3RoLCB1cGRhdGUgPSBuZXcgQXJyYXkobSksIGVudGVyID0gbmV3IEFycmF5KG0pLCBleGl0ID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIHZhciBwYXJlbnQgPSBwYXJlbnRzW2pdLFxuICAgICAgICBncm91cCA9IGdyb3Vwc1tqXSxcbiAgICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICAgIGRhdGEgPSB2YWx1ZS5jYWxsKHBhcmVudCwgcGFyZW50ICYmIHBhcmVudC5fX2RhdGFfXywgaiwgcGFyZW50cyksXG4gICAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aCxcbiAgICAgICAgZW50ZXJHcm91cCA9IGVudGVyW2pdID0gbmV3IEFycmF5KGRhdGFMZW5ndGgpLFxuICAgICAgICB1cGRhdGVHcm91cCA9IHVwZGF0ZVtqXSA9IG5ldyBBcnJheShkYXRhTGVuZ3RoKSxcbiAgICAgICAgZXhpdEdyb3VwID0gZXhpdFtqXSA9IG5ldyBBcnJheShncm91cExlbmd0aCk7XG5cbiAgICBiaW5kKHBhcmVudCwgZ3JvdXAsIGVudGVyR3JvdXAsIHVwZGF0ZUdyb3VwLCBleGl0R3JvdXAsIGRhdGEsIGtleSk7XG5cbiAgICAvLyBOb3cgY29ubmVjdCB0aGUgZW50ZXIgbm9kZXMgdG8gdGhlaXIgZm9sbG93aW5nIHVwZGF0ZSBub2RlLCBzdWNoIHRoYXRcbiAgICAvLyBhcHBlbmRDaGlsZCBjYW4gaW5zZXJ0IHRoZSBtYXRlcmlhbGl6ZWQgZW50ZXIgbm9kZSBiZWZvcmUgdGhpcyBub2RlLFxuICAgIC8vIHJhdGhlciB0aGFuIGF0IHRoZSBlbmQgb2YgdGhlIHBhcmVudCBub2RlLlxuICAgIGZvciAodmFyIGkwID0gMCwgaTEgPSAwLCBwcmV2aW91cywgbmV4dDsgaTAgPCBkYXRhTGVuZ3RoOyArK2kwKSB7XG4gICAgICBpZiAocHJldmlvdXMgPSBlbnRlckdyb3VwW2kwXSkge1xuICAgICAgICBpZiAoaTAgPj0gaTEpIGkxID0gaTAgKyAxO1xuICAgICAgICB3aGlsZSAoIShuZXh0ID0gdXBkYXRlR3JvdXBbaTFdKSAmJiArK2kxIDwgZGF0YUxlbmd0aCk7XG4gICAgICAgIHByZXZpb3VzLl9uZXh0ID0gbmV4dCB8fCBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZSA9IG5ldyBTZWxlY3Rpb24odXBkYXRlLCBwYXJlbnRzKTtcbiAgdXBkYXRlLl9lbnRlciA9IGVudGVyO1xuICB1cGRhdGUuX2V4aXQgPSBleGl0O1xuICByZXR1cm4gdXBkYXRlO1xufVxuIiwiaW1wb3J0IHNwYXJzZSBmcm9tIFwiLi9zcGFyc2VcIjtcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZXhpdCB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdGlvbikge1xuXG4gIGZvciAodmFyIGdyb3VwczAgPSB0aGlzLl9ncm91cHMsIGdyb3VwczEgPSBzZWxlY3Rpb24uX2dyb3VwcywgbTAgPSBncm91cHMwLmxlbmd0aCwgbTEgPSBncm91cHMxLmxlbmd0aCwgbSA9IE1hdGgubWluKG0wLCBtMSksIG1lcmdlcyA9IG5ldyBBcnJheShtMCksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAwID0gZ3JvdXBzMFtqXSwgZ3JvdXAxID0gZ3JvdXBzMVtqXSwgbiA9IGdyb3VwMC5sZW5ndGgsIG1lcmdlID0gbWVyZ2VzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cDBbaV0gfHwgZ3JvdXAxW2ldKSB7XG4gICAgICAgIG1lcmdlW2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKDsgaiA8IG0wOyArK2opIHtcbiAgICBtZXJnZXNbal0gPSBncm91cHMwW2pdO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24obWVyZ2VzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IC0xLCBtID0gZ3JvdXBzLmxlbmd0aDsgKytqIDwgbTspIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IGdyb3VwLmxlbmd0aCAtIDEsIG5leHQgPSBncm91cFtpXSwgbm9kZTsgLS1pID49IDA7KSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIGlmIChuZXh0ICYmIG5leHQgIT09IG5vZGUubmV4dFNpYmxpbmcpIG5leHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgbmV4dCk7XG4gICAgICAgIG5leHQgPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBhcmUpIHtcbiAgaWYgKCFjb21wYXJlKSBjb21wYXJlID0gYXNjZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGNvbXBhcmVOb2RlKGEsIGIpIHtcbiAgICByZXR1cm4gYSAmJiBiID8gY29tcGFyZShhLl9fZGF0YV9fLCBiLl9fZGF0YV9fKSA6ICFhIC0gIWI7XG4gIH1cblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzb3J0Z3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzb3J0Z3JvdXAgPSBzb3J0Z3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzb3J0Z3JvdXBbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3J0Z3JvdXAuc29ydChjb21wYXJlTm9kZSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzb3J0Z3JvdXBzLCB0aGlzLl9wYXJlbnRzKS5vcmRlcigpO1xufVxuXG5mdW5jdGlvbiBhc2NlbmRpbmcoYSwgYikge1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzWzBdO1xuICBhcmd1bWVudHNbMF0gPSB0aGlzO1xuICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbm9kZXMgPSBuZXcgQXJyYXkodGhpcy5zaXplKCkpLCBpID0gLTE7XG4gIHRoaXMuZWFjaChmdW5jdGlvbigpIHsgbm9kZXNbKytpXSA9IHRoaXM7IH0pO1xuICByZXR1cm4gbm9kZXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgdmFyIG5vZGUgPSBncm91cFtpXTtcbiAgICAgIGlmIChub2RlKSByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgc2l6ZSA9IDA7XG4gIHRoaXMuZWFjaChmdW5jdGlvbigpIHsgKytzaXplOyB9KTtcbiAgcmV0dXJuIHNpemU7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICF0aGlzLm5vZGUoKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGgsIG5vZGU7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIGNhbGxiYWNrLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IG5hbWVzcGFjZSBmcm9tIFwiLi4vbmFtZXNwYWNlXCI7XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmVOUyhmdWxsbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnQobmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50TlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgdmFsdWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHYpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb25OUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgZWxzZSB0aGlzLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgdik7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMubm9kZSgpO1xuICAgIHJldHVybiBmdWxsbmFtZS5sb2NhbFxuICAgICAgICA/IG5vZGUuZ2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKVxuICAgICAgICA6IG5vZGUuZ2V0QXR0cmlidXRlKGZ1bGxuYW1lKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0clJlbW92ZU5TIDogYXR0clJlbW92ZSkgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckZ1bmN0aW9uTlMgOiBhdHRyRnVuY3Rpb24pXG4gICAgICA6IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJDb25zdGFudE5TIDogYXR0ckNvbnN0YW50KSkpKGZ1bGxuYW1lLCB2YWx1ZSkpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSkge1xuICByZXR1cm4gKG5vZGUub3duZXJEb2N1bWVudCAmJiBub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpIC8vIG5vZGUgaXMgYSBOb2RlXG4gICAgICB8fCAobm9kZS5kb2N1bWVudCAmJiBub2RlKSAvLyBub2RlIGlzIGEgV2luZG93XG4gICAgICB8fCBub2RlLmRlZmF1bHRWaWV3OyAvLyBub2RlIGlzIGEgRG9jdW1lbnRcbn1cbiIsImltcG9ydCBkZWZhdWx0VmlldyBmcm9tIFwiLi4vd2luZG93XCI7XG5cbmZ1bmN0aW9uIHN0eWxlUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlQ29uc3RhbnQobmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbHVlLCBwcmlvcml0eSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlRnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgICBlbHNlIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdiwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICA/IHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgPyBzdHlsZVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IHN0eWxlRnVuY3Rpb25cbiAgICAgICAgICAgIDogc3R5bGVDb25zdGFudCkobmFtZSwgdmFsdWUsIHByaW9yaXR5ID09IG51bGwgPyBcIlwiIDogcHJpb3JpdHkpKVxuICAgICAgOiBzdHlsZVZhbHVlKHRoaXMubm9kZSgpLCBuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0eWxlVmFsdWUobm9kZSwgbmFtZSkge1xuICByZXR1cm4gbm9kZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpXG4gICAgICB8fCBkZWZhdWx0Vmlldyhub2RlKS5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpLmdldFByb3BlcnR5VmFsdWUobmFtZSk7XG59XG4iLCJmdW5jdGlvbiBwcm9wZXJ0eVJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBkZWxldGUgdGhpc1tuYW1lXTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvcGVydHlDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpc1tuYW1lXSA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgZGVsZXRlIHRoaXNbbmFtZV07XG4gICAgZWxzZSB0aGlzW25hbWVdID0gdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICA/IHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgICAgID8gcHJvcGVydHlSZW1vdmUgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gcHJvcGVydHlGdW5jdGlvblxuICAgICAgICAgIDogcHJvcGVydHlDb25zdGFudCkobmFtZSwgdmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKVtuYW1lXTtcbn1cbiIsImZ1bmN0aW9uIGNsYXNzQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcudHJpbSgpLnNwbGl0KC9efFxccysvKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NMaXN0KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuY2xhc3NMaXN0IHx8IG5ldyBDbGFzc0xpc3Qobm9kZSk7XG59XG5cbmZ1bmN0aW9uIENsYXNzTGlzdChub2RlKSB7XG4gIHRoaXMuX25vZGUgPSBub2RlO1xuICB0aGlzLl9uYW1lcyA9IGNsYXNzQXJyYXkobm9kZS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSB8fCBcIlwiKTtcbn1cblxuQ2xhc3NMaXN0LnByb3RvdHlwZSA9IHtcbiAgYWRkOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIGkgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgIGlmIChpIDwgMCkge1xuICAgICAgdGhpcy5fbmFtZXMucHVzaChuYW1lKTtcbiAgICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdGhpcy5fbmFtZXMuam9pbihcIiBcIikpO1xuICAgIH1cbiAgfSxcbiAgcmVtb3ZlOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIGkgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgIGlmIChpID49IDApIHtcbiAgICAgIHRoaXMuX25hbWVzLnNwbGljZShpLCAxKTtcbiAgICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdGhpcy5fbmFtZXMuam9pbihcIiBcIikpO1xuICAgIH1cbiAgfSxcbiAgY29udGFpbnM6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKSA+PSAwO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjbGFzc2VkQWRkKG5vZGUsIG5hbWVzKSB7XG4gIHZhciBsaXN0ID0gY2xhc3NMaXN0KG5vZGUpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gIHdoaWxlICgrK2kgPCBuKSBsaXN0LmFkZChuYW1lc1tpXSk7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRSZW1vdmUobm9kZSwgbmFtZXMpIHtcbiAgdmFyIGxpc3QgPSBjbGFzc0xpc3Qobm9kZSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIGxpc3QucmVtb3ZlKG5hbWVzW2ldKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZFRydWUobmFtZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGNsYXNzZWRBZGQodGhpcywgbmFtZXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkRmFsc2UobmFtZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGNsYXNzZWRSZW1vdmUodGhpcywgbmFtZXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkRnVuY3Rpb24obmFtZXMsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAodmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKSA/IGNsYXNzZWRBZGQgOiBjbGFzc2VkUmVtb3ZlKSh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBuYW1lcyA9IGNsYXNzQXJyYXkobmFtZSArIFwiXCIpO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBsaXN0ID0gY2xhc3NMaXN0KHRoaXMubm9kZSgpKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoIWxpc3QuY29udGFpbnMobmFtZXNbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBjbGFzc2VkRnVuY3Rpb24gOiB2YWx1ZVxuICAgICAgPyBjbGFzc2VkVHJ1ZVxuICAgICAgOiBjbGFzc2VkRmFsc2UpKG5hbWVzLCB2YWx1ZSkpO1xufVxuIiwiZnVuY3Rpb24gdGV4dFJlbW92ZSgpIHtcbiAgdGhpcy50ZXh0Q29udGVudCA9IFwiXCI7XG59XG5cbmZ1bmN0aW9uIHRleHRDb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0RnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyB0ZXh0UmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyB0ZXh0RnVuY3Rpb25cbiAgICAgICAgICA6IHRleHRDb25zdGFudCkodmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKS50ZXh0Q29udGVudDtcbn1cbiIsImZ1bmN0aW9uIGh0bWxSZW1vdmUoKSB7XG4gIHRoaXMuaW5uZXJIVE1MID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gaHRtbENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlubmVySFRNTCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBodG1sRnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLmlubmVySFRNTCA9IHYgPT0gbnVsbCA/IFwiXCIgOiB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2godmFsdWUgPT0gbnVsbFxuICAgICAgICAgID8gaHRtbFJlbW92ZSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gaHRtbEZ1bmN0aW9uXG4gICAgICAgICAgOiBodG1sQ29uc3RhbnQpKHZhbHVlKSlcbiAgICAgIDogdGhpcy5ub2RlKCkuaW5uZXJIVE1MO1xufVxuIiwiZnVuY3Rpb24gcmFpc2UoKSB7XG4gIGlmICh0aGlzLm5leHRTaWJsaW5nKSB0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKHJhaXNlKTtcbn1cbiIsImZ1bmN0aW9uIGxvd2VyKCkge1xuICBpZiAodGhpcy5wcmV2aW91c1NpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcywgdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChsb3dlcik7XG59XG4iLCJpbXBvcnQgY3JlYXRvciBmcm9tIFwiLi4vY3JlYXRvclwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSk7XG4gIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChjcmVhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IGNyZWF0b3IgZnJvbSBcIi4uL2NyZWF0b3JcIjtcbmltcG9ydCBzZWxlY3RvciBmcm9tIFwiLi4vc2VsZWN0b3JcIjtcblxuZnVuY3Rpb24gY29uc3RhbnROdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgYmVmb3JlKSB7XG4gIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSksXG4gICAgICBzZWxlY3QgPSBiZWZvcmUgPT0gbnVsbCA/IGNvbnN0YW50TnVsbCA6IHR5cGVvZiBiZWZvcmUgPT09IFwiZnVuY3Rpb25cIiA/IGJlZm9yZSA6IHNlbGVjdG9yKGJlZm9yZSk7XG4gIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoY3JlYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHNlbGVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IG51bGwpO1xuICB9KTtcbn1cbiIsImZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChyZW1vdmUpO1xufVxuIiwiZnVuY3Rpb24gc2VsZWN0aW9uX2Nsb25lU2hhbGxvdygpIHtcbiAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5jbG9uZU5vZGUoZmFsc2UpLCB0aGlzLm5leHRTaWJsaW5nKTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0aW9uX2Nsb25lRGVlcCgpIHtcbiAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5jbG9uZU5vZGUodHJ1ZSksIHRoaXMubmV4dFNpYmxpbmcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkZWVwKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdChkZWVwID8gc2VsZWN0aW9uX2Nsb25lRGVlcCA6IHNlbGVjdGlvbl9jbG9uZVNoYWxsb3cpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5wcm9wZXJ0eShcIl9fZGF0YV9fXCIsIHZhbHVlKVxuICAgICAgOiB0aGlzLm5vZGUoKS5fX2RhdGFfXztcbn1cbiIsInZhciBmaWx0ZXJFdmVudHMgPSB7fTtcblxuZXhwb3J0IHZhciBldmVudCA9IG51bGw7XG5cbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIGlmICghKFwib25tb3VzZWVudGVyXCIgaW4gZWxlbWVudCkpIHtcbiAgICBmaWx0ZXJFdmVudHMgPSB7bW91c2VlbnRlcjogXCJtb3VzZW92ZXJcIiwgbW91c2VsZWF2ZTogXCJtb3VzZW91dFwifTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaWx0ZXJDb250ZXh0TGlzdGVuZXIobGlzdGVuZXIsIGluZGV4LCBncm91cCkge1xuICBsaXN0ZW5lciA9IGNvbnRleHRMaXN0ZW5lcihsaXN0ZW5lciwgaW5kZXgsIGdyb3VwKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgIGlmICghcmVsYXRlZCB8fCAocmVsYXRlZCAhPT0gdGhpcyAmJiAhKHJlbGF0ZWQuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykgJiA4KSkpIHtcbiAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgZXZlbnQpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY29udGV4dExpc3RlbmVyKGxpc3RlbmVyLCBpbmRleCwgZ3JvdXApIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50MSkge1xuICAgIHZhciBldmVudDAgPSBldmVudDsgLy8gRXZlbnRzIGNhbiBiZSByZWVudHJhbnQgKGUuZy4sIGZvY3VzKS5cbiAgICBldmVudCA9IGV2ZW50MTtcbiAgICB0cnkge1xuICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCB0aGlzLl9fZGF0YV9fLCBpbmRleCwgZ3JvdXApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBldmVudCA9IGV2ZW50MDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lcykge1xuICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uUmVtb3ZlKHR5cGVuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgb24gPSB0aGlzLl9fb247XG4gICAgaWYgKCFvbikgcmV0dXJuO1xuICAgIGZvciAodmFyIGogPSAwLCBpID0gLTEsIG0gPSBvbi5sZW5ndGgsIG87IGogPCBtOyArK2opIHtcbiAgICAgIGlmIChvID0gb25bal0sICghdHlwZW5hbWUudHlwZSB8fCBvLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUpICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLmNhcHR1cmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25bKytpXSA9IG87XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgrK2kpIG9uLmxlbmd0aCA9IGk7XG4gICAgZWxzZSBkZWxldGUgdGhpcy5fX29uO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbkFkZCh0eXBlbmFtZSwgdmFsdWUsIGNhcHR1cmUpIHtcbiAgdmFyIHdyYXAgPSBmaWx0ZXJFdmVudHMuaGFzT3duUHJvcGVydHkodHlwZW5hbWUudHlwZSkgPyBmaWx0ZXJDb250ZXh0TGlzdGVuZXIgOiBjb250ZXh0TGlzdGVuZXI7XG4gIHJldHVybiBmdW5jdGlvbihkLCBpLCBncm91cCkge1xuICAgIHZhciBvbiA9IHRoaXMuX19vbiwgbywgbGlzdGVuZXIgPSB3cmFwKHZhbHVlLCBpLCBncm91cCk7XG4gICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgICAgaWYgKChvID0gb25bal0pLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUgJiYgby5uYW1lID09PSB0eXBlbmFtZS5uYW1lKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIsIG8uY2FwdHVyZSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIgPSBsaXN0ZW5lciwgby5jYXB0dXJlID0gY2FwdHVyZSk7XG4gICAgICAgIG8udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIodHlwZW5hbWUudHlwZSwgbGlzdGVuZXIsIGNhcHR1cmUpO1xuICAgIG8gPSB7dHlwZTogdHlwZW5hbWUudHlwZSwgbmFtZTogdHlwZW5hbWUubmFtZSwgdmFsdWU6IHZhbHVlLCBsaXN0ZW5lcjogbGlzdGVuZXIsIGNhcHR1cmU6IGNhcHR1cmV9O1xuICAgIGlmICghb24pIHRoaXMuX19vbiA9IFtvXTtcbiAgICBlbHNlIG9uLnB1c2gobyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHR5cGVuYW1lLCB2YWx1ZSwgY2FwdHVyZSkge1xuICB2YXIgdHlwZW5hbWVzID0gcGFyc2VUeXBlbmFtZXModHlwZW5hbWUgKyBcIlwiKSwgaSwgbiA9IHR5cGVuYW1lcy5sZW5ndGgsIHQ7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIG9uID0gdGhpcy5ub2RlKCkuX19vbjtcbiAgICBpZiAob24pIGZvciAodmFyIGogPSAwLCBtID0gb24ubGVuZ3RoLCBvOyBqIDwgbTsgKytqKSB7XG4gICAgICBmb3IgKGkgPSAwLCBvID0gb25bal07IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKCh0ID0gdHlwZW5hbWVzW2ldKS50eXBlID09PSBvLnR5cGUgJiYgdC5uYW1lID09PSBvLm5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gby52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBvbiA9IHZhbHVlID8gb25BZGQgOiBvblJlbW92ZTtcbiAgaWYgKGNhcHR1cmUgPT0gbnVsbCkgY2FwdHVyZSA9IGZhbHNlO1xuICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB0aGlzLmVhY2gob24odHlwZW5hbWVzW2ldLCB2YWx1ZSwgY2FwdHVyZSkpO1xuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1c3RvbUV2ZW50KGV2ZW50MSwgbGlzdGVuZXIsIHRoYXQsIGFyZ3MpIHtcbiAgdmFyIGV2ZW50MCA9IGV2ZW50O1xuICBldmVudDEuc291cmNlRXZlbnQgPSBldmVudDtcbiAgZXZlbnQgPSBldmVudDE7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9IGZpbmFsbHkge1xuICAgIGV2ZW50ID0gZXZlbnQwO1xuICB9XG59XG4iLCJpbXBvcnQgZGVmYXVsdFZpZXcgZnJvbSBcIi4uL3dpbmRvd1wiO1xuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50KG5vZGUsIHR5cGUsIHBhcmFtcykge1xuICB2YXIgd2luZG93ID0gZGVmYXVsdFZpZXcobm9kZSksXG4gICAgICBldmVudCA9IHdpbmRvdy5DdXN0b21FdmVudDtcblxuICBpZiAodHlwZW9mIGV2ZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBldmVudCA9IG5ldyBldmVudCh0eXBlLCBwYXJhbXMpO1xuICB9IGVsc2Uge1xuICAgIGV2ZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gICAgaWYgKHBhcmFtcykgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIHBhcmFtcy5idWJibGVzLCBwYXJhbXMuY2FuY2VsYWJsZSksIGV2ZW50LmRldGFpbCA9IHBhcmFtcy5kZXRhaWw7XG4gICAgZWxzZSBldmVudC5pbml0RXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQ29uc3RhbnQodHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2hFdmVudCh0aGlzLCB0eXBlLCBwYXJhbXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEZ1bmN0aW9uKHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHBhcmFtcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGRpc3BhdGNoRnVuY3Rpb25cbiAgICAgIDogZGlzcGF0Y2hDb25zdGFudCkodHlwZSwgcGFyYW1zKSk7XG59XG4iLCJpbXBvcnQgc2VsZWN0aW9uX3NlbGVjdCBmcm9tIFwiLi9zZWxlY3RcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2VsZWN0QWxsIGZyb20gXCIuL3NlbGVjdEFsbFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9maWx0ZXIgZnJvbSBcIi4vZmlsdGVyXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2RhdGEgZnJvbSBcIi4vZGF0YVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9lbnRlciBmcm9tIFwiLi9lbnRlclwiO1xuaW1wb3J0IHNlbGVjdGlvbl9leGl0IGZyb20gXCIuL2V4aXRcIjtcbmltcG9ydCBzZWxlY3Rpb25fbWVyZ2UgZnJvbSBcIi4vbWVyZ2VcIjtcbmltcG9ydCBzZWxlY3Rpb25fb3JkZXIgZnJvbSBcIi4vb3JkZXJcIjtcbmltcG9ydCBzZWxlY3Rpb25fc29ydCBmcm9tIFwiLi9zb3J0XCI7XG5pbXBvcnQgc2VsZWN0aW9uX2NhbGwgZnJvbSBcIi4vY2FsbFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9ub2RlcyBmcm9tIFwiLi9ub2Rlc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9ub2RlIGZyb20gXCIuL25vZGVcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2l6ZSBmcm9tIFwiLi9zaXplXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VtcHR5IGZyb20gXCIuL2VtcHR5XCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VhY2ggZnJvbSBcIi4vZWFjaFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9hdHRyIGZyb20gXCIuL2F0dHJcIjtcbmltcG9ydCBzZWxlY3Rpb25fc3R5bGUgZnJvbSBcIi4vc3R5bGVcIjtcbmltcG9ydCBzZWxlY3Rpb25fcHJvcGVydHkgZnJvbSBcIi4vcHJvcGVydHlcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2xhc3NlZCBmcm9tIFwiLi9jbGFzc2VkXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3RleHQgZnJvbSBcIi4vdGV4dFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9odG1sIGZyb20gXCIuL2h0bWxcIjtcbmltcG9ydCBzZWxlY3Rpb25fcmFpc2UgZnJvbSBcIi4vcmFpc2VcIjtcbmltcG9ydCBzZWxlY3Rpb25fbG93ZXIgZnJvbSBcIi4vbG93ZXJcIjtcbmltcG9ydCBzZWxlY3Rpb25fYXBwZW5kIGZyb20gXCIuL2FwcGVuZFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9pbnNlcnQgZnJvbSBcIi4vaW5zZXJ0XCI7XG5pbXBvcnQgc2VsZWN0aW9uX3JlbW92ZSBmcm9tIFwiLi9yZW1vdmVcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2xvbmUgZnJvbSBcIi4vY2xvbmVcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGF0dW0gZnJvbSBcIi4vZGF0dW1cIjtcbmltcG9ydCBzZWxlY3Rpb25fb24gZnJvbSBcIi4vb25cIjtcbmltcG9ydCBzZWxlY3Rpb25fZGlzcGF0Y2ggZnJvbSBcIi4vZGlzcGF0Y2hcIjtcblxuZXhwb3J0IHZhciByb290ID0gW251bGxdO1xuXG5leHBvcnQgZnVuY3Rpb24gU2VsZWN0aW9uKGdyb3VwcywgcGFyZW50cykge1xuICB0aGlzLl9ncm91cHMgPSBncm91cHM7XG4gIHRoaXMuX3BhcmVudHMgPSBwYXJlbnRzO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sIHJvb3QpO1xufVxuXG5TZWxlY3Rpb24ucHJvdG90eXBlID0gc2VsZWN0aW9uLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFNlbGVjdGlvbixcbiAgc2VsZWN0OiBzZWxlY3Rpb25fc2VsZWN0LFxuICBzZWxlY3RBbGw6IHNlbGVjdGlvbl9zZWxlY3RBbGwsXG4gIGZpbHRlcjogc2VsZWN0aW9uX2ZpbHRlcixcbiAgZGF0YTogc2VsZWN0aW9uX2RhdGEsXG4gIGVudGVyOiBzZWxlY3Rpb25fZW50ZXIsXG4gIGV4aXQ6IHNlbGVjdGlvbl9leGl0LFxuICBtZXJnZTogc2VsZWN0aW9uX21lcmdlLFxuICBvcmRlcjogc2VsZWN0aW9uX29yZGVyLFxuICBzb3J0OiBzZWxlY3Rpb25fc29ydCxcbiAgY2FsbDogc2VsZWN0aW9uX2NhbGwsXG4gIG5vZGVzOiBzZWxlY3Rpb25fbm9kZXMsXG4gIG5vZGU6IHNlbGVjdGlvbl9ub2RlLFxuICBzaXplOiBzZWxlY3Rpb25fc2l6ZSxcbiAgZW1wdHk6IHNlbGVjdGlvbl9lbXB0eSxcbiAgZWFjaDogc2VsZWN0aW9uX2VhY2gsXG4gIGF0dHI6IHNlbGVjdGlvbl9hdHRyLFxuICBzdHlsZTogc2VsZWN0aW9uX3N0eWxlLFxuICBwcm9wZXJ0eTogc2VsZWN0aW9uX3Byb3BlcnR5LFxuICBjbGFzc2VkOiBzZWxlY3Rpb25fY2xhc3NlZCxcbiAgdGV4dDogc2VsZWN0aW9uX3RleHQsXG4gIGh0bWw6IHNlbGVjdGlvbl9odG1sLFxuICByYWlzZTogc2VsZWN0aW9uX3JhaXNlLFxuICBsb3dlcjogc2VsZWN0aW9uX2xvd2VyLFxuICBhcHBlbmQ6IHNlbGVjdGlvbl9hcHBlbmQsXG4gIGluc2VydDogc2VsZWN0aW9uX2luc2VydCxcbiAgcmVtb3ZlOiBzZWxlY3Rpb25fcmVtb3ZlLFxuICBjbG9uZTogc2VsZWN0aW9uX2Nsb25lLFxuICBkYXR1bTogc2VsZWN0aW9uX2RhdHVtLFxuICBvbjogc2VsZWN0aW9uX29uLFxuICBkaXNwYXRjaDogc2VsZWN0aW9uX2Rpc3BhdGNoXG59O1xuXG5leHBvcnQgZGVmYXVsdCBzZWxlY3Rpb247XG4iLCJpbXBvcnQge1NlbGVjdGlvbiwgcm9vdH0gZnJvbSBcIi4vc2VsZWN0aW9uL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCJcbiAgICAgID8gbmV3IFNlbGVjdGlvbihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpXV0sIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKVxuICAgICAgOiBuZXcgU2VsZWN0aW9uKFtbc2VsZWN0b3JdXSwgcm9vdCk7XG59XG4iLCJpbXBvcnQge2V2ZW50fSBmcm9tIFwiLi9zZWxlY3Rpb24vb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBjdXJyZW50ID0gZXZlbnQsIHNvdXJjZTtcbiAgd2hpbGUgKHNvdXJjZSA9IGN1cnJlbnQuc291cmNlRXZlbnQpIGN1cnJlbnQgPSBzb3VyY2U7XG4gIHJldHVybiBjdXJyZW50O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSwgZXZlbnQpIHtcbiAgdmFyIHN2ZyA9IG5vZGUub3duZXJTVkdFbGVtZW50IHx8IG5vZGU7XG5cbiAgaWYgKHN2Zy5jcmVhdGVTVkdQb2ludCkge1xuICAgIHZhciBwb2ludCA9IHN2Zy5jcmVhdGVTVkdQb2ludCgpO1xuICAgIHBvaW50LnggPSBldmVudC5jbGllbnRYLCBwb2ludC55ID0gZXZlbnQuY2xpZW50WTtcbiAgICBwb2ludCA9IHBvaW50Lm1hdHJpeFRyYW5zZm9ybShub2RlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSk7XG4gICAgcmV0dXJuIFtwb2ludC54LCBwb2ludC55XTtcbiAgfVxuXG4gIHZhciByZWN0ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgcmV0dXJuIFtldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0IC0gbm9kZS5jbGllbnRMZWZ0LCBldmVudC5jbGllbnRZIC0gcmVjdC50b3AgLSBub2RlLmNsaWVudFRvcF07XG59XG4iLCJpbXBvcnQgc291cmNlRXZlbnQgZnJvbSBcIi4vc291cmNlRXZlbnRcIjtcbmltcG9ydCBwb2ludCBmcm9tIFwiLi9wb2ludFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlKSB7XG4gIHZhciBldmVudCA9IHNvdXJjZUV2ZW50KCk7XG4gIGlmIChldmVudC5jaGFuZ2VkVG91Y2hlcykgZXZlbnQgPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXTtcbiAgcmV0dXJuIHBvaW50KG5vZGUsIGV2ZW50KTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9uLCByb290fSBmcm9tIFwiLi9zZWxlY3Rpb24vaW5kZXhcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBuZXcgU2VsZWN0aW9uKFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKV0sIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKVxuICAgICAgOiBuZXcgU2VsZWN0aW9uKFtzZWxlY3RvciA9PSBudWxsID8gW10gOiBzZWxlY3Rvcl0sIHJvb3QpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZ1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb21wYXJlKSB7XG4gIGlmIChjb21wYXJlLmxlbmd0aCA9PT0gMSkgY29tcGFyZSA9IGFzY2VuZGluZ0NvbXBhcmF0b3IoY29tcGFyZSk7XG4gIHJldHVybiB7XG4gICAgbGVmdDogZnVuY3Rpb24oYSwgeCwgbG8sIGhpKSB7XG4gICAgICBpZiAobG8gPT0gbnVsbCkgbG8gPSAwO1xuICAgICAgaWYgKGhpID09IG51bGwpIGhpID0gYS5sZW5ndGg7XG4gICAgICB3aGlsZSAobG8gPCBoaSkge1xuICAgICAgICB2YXIgbWlkID0gbG8gKyBoaSA+Pj4gMTtcbiAgICAgICAgaWYgKGNvbXBhcmUoYVttaWRdLCB4KSA8IDApIGxvID0gbWlkICsgMTtcbiAgICAgICAgZWxzZSBoaSA9IG1pZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsbztcbiAgICB9LFxuICAgIHJpZ2h0OiBmdW5jdGlvbihhLCB4LCBsbywgaGkpIHtcbiAgICAgIGlmIChsbyA9PSBudWxsKSBsbyA9IDA7XG4gICAgICBpZiAoaGkgPT0gbnVsbCkgaGkgPSBhLmxlbmd0aDtcbiAgICAgIHdoaWxlIChsbyA8IGhpKSB7XG4gICAgICAgIHZhciBtaWQgPSBsbyArIGhpID4+PiAxO1xuICAgICAgICBpZiAoY29tcGFyZShhW21pZF0sIHgpID4gMCkgaGkgPSBtaWQ7XG4gICAgICAgIGVsc2UgbG8gPSBtaWQgKyAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxvO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gYXNjZW5kaW5nQ29tcGFyYXRvcihmKSB7XG4gIHJldHVybiBmdW5jdGlvbihkLCB4KSB7XG4gICAgcmV0dXJuIGFzY2VuZGluZyhmKGQpLCB4KTtcbiAgfTtcbn1cbiIsImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nXCI7XG5pbXBvcnQgYmlzZWN0b3IgZnJvbSBcIi4vYmlzZWN0b3JcIjtcblxudmFyIGFzY2VuZGluZ0Jpc2VjdCA9IGJpc2VjdG9yKGFzY2VuZGluZyk7XG5leHBvcnQgdmFyIGJpc2VjdFJpZ2h0ID0gYXNjZW5kaW5nQmlzZWN0LnJpZ2h0O1xuZXhwb3J0IHZhciBiaXNlY3RMZWZ0ID0gYXNjZW5kaW5nQmlzZWN0LmxlZnQ7XG5leHBvcnQgZGVmYXVsdCBiaXNlY3RSaWdodDtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHggPT09IG51bGwgPyBOYU4gOiAreDtcbn1cbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBtID0gMCxcbiAgICAgIGkgPSAtMSxcbiAgICAgIG1lYW4gPSAwLFxuICAgICAgdmFsdWUsXG4gICAgICBkZWx0YSxcbiAgICAgIHN1bSA9IDA7XG5cbiAgaWYgKHZhbHVlb2YgPT0gbnVsbCkge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAoIWlzTmFOKHZhbHVlID0gbnVtYmVyKHZhbHVlc1tpXSkpKSB7XG4gICAgICAgIGRlbHRhID0gdmFsdWUgLSBtZWFuO1xuICAgICAgICBtZWFuICs9IGRlbHRhIC8gKyttO1xuICAgICAgICBzdW0gKz0gZGVsdGEgKiAodmFsdWUgLSBtZWFuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKCFpc05hTih2YWx1ZSA9IG51bWJlcih2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkpKSB7XG4gICAgICAgIGRlbHRhID0gdmFsdWUgLSBtZWFuO1xuICAgICAgICBtZWFuICs9IGRlbHRhIC8gKyttO1xuICAgICAgICBzdW0gKz0gZGVsdGEgKiAodmFsdWUgLSBtZWFuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAobSA+IDEpIHJldHVybiBzdW0gLyAobSAtIDEpO1xufVxuIiwiaW1wb3J0IHZhcmlhbmNlIGZyb20gXCIuL3ZhcmlhbmNlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGFycmF5LCBmKSB7XG4gIHZhciB2ID0gdmFyaWFuY2UoYXJyYXksIGYpO1xuICByZXR1cm4gdiA/IE1hdGguc3FydCh2KSA6IHY7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgaSA9IC0xLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXg7XG5cbiAgaWYgKHZhbHVlb2YgPT0gbnVsbCkge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIEZpbmQgdGhlIGZpcnN0IGNvbXBhcmFibGUgdmFsdWUuXG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVzW2ldKSAhPSBudWxsICYmIHZhbHVlID49IHZhbHVlKSB7XG4gICAgICAgIG1pbiA9IG1heCA9IHZhbHVlO1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBDb21wYXJlIHRoZSByZW1haW5pbmcgdmFsdWVzLlxuICAgICAgICAgIGlmICgodmFsdWUgPSB2YWx1ZXNbaV0pICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChtaW4gPiB2YWx1ZSkgbWluID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAobWF4IDwgdmFsdWUpIG1heCA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVsc2Uge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIEZpbmQgdGhlIGZpcnN0IGNvbXBhcmFibGUgdmFsdWUuXG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZXNbaV0sIGksIHZhbHVlcykpICE9IG51bGwgJiYgdmFsdWUgPj0gdmFsdWUpIHtcbiAgICAgICAgbWluID0gbWF4ID0gdmFsdWU7XG4gICAgICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIENvbXBhcmUgdGhlIHJlbWFpbmluZyB2YWx1ZXMuXG4gICAgICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAobWluID4gdmFsdWUpIG1pbiA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKG1heCA8IHZhbHVlKSBtYXggPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gW21pbiwgbWF4XTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gIHN0YXJ0ID0gK3N0YXJ0LCBzdG9wID0gK3N0b3AsIHN0ZXAgPSAobiA9IGFyZ3VtZW50cy5sZW5ndGgpIDwgMiA/IChzdG9wID0gc3RhcnQsIHN0YXJ0ID0gMCwgMSkgOiBuIDwgMyA/IDEgOiArc3RlcDtcblxuICB2YXIgaSA9IC0xLFxuICAgICAgbiA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApKSB8IDAsXG4gICAgICByYW5nZSA9IG5ldyBBcnJheShuKTtcblxuICB3aGlsZSAoKytpIDwgbikge1xuICAgIHJhbmdlW2ldID0gc3RhcnQgKyBpICogc3RlcDtcbiAgfVxuXG4gIHJldHVybiByYW5nZTtcbn1cbiIsInZhciBlMTAgPSBNYXRoLnNxcnQoNTApLFxuICAgIGU1ID0gTWF0aC5zcXJ0KDEwKSxcbiAgICBlMiA9IE1hdGguc3FydCgyKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHZhciByZXZlcnNlLFxuICAgICAgaSA9IC0xLFxuICAgICAgbixcbiAgICAgIHRpY2tzLFxuICAgICAgc3RlcDtcblxuICBzdG9wID0gK3N0b3AsIHN0YXJ0ID0gK3N0YXJ0LCBjb3VudCA9ICtjb3VudDtcbiAgaWYgKHN0YXJ0ID09PSBzdG9wICYmIGNvdW50ID4gMCkgcmV0dXJuIFtzdGFydF07XG4gIGlmIChyZXZlcnNlID0gc3RvcCA8IHN0YXJ0KSBuID0gc3RhcnQsIHN0YXJ0ID0gc3RvcCwgc3RvcCA9IG47XG4gIGlmICgoc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KSkgPT09IDAgfHwgIWlzRmluaXRlKHN0ZXApKSByZXR1cm4gW107XG5cbiAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgc3RhcnQgPSBNYXRoLmNlaWwoc3RhcnQgLyBzdGVwKTtcbiAgICBzdG9wID0gTWF0aC5mbG9vcihzdG9wIC8gc3RlcCk7XG4gICAgdGlja3MgPSBuZXcgQXJyYXkobiA9IE1hdGguY2VpbChzdG9wIC0gc3RhcnQgKyAxKSk7XG4gICAgd2hpbGUgKCsraSA8IG4pIHRpY2tzW2ldID0gKHN0YXJ0ICsgaSkgKiBzdGVwO1xuICB9IGVsc2Uge1xuICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAqIHN0ZXApO1xuICAgIHN0b3AgPSBNYXRoLmNlaWwoc3RvcCAqIHN0ZXApO1xuICAgIHRpY2tzID0gbmV3IEFycmF5KG4gPSBNYXRoLmNlaWwoc3RhcnQgLSBzdG9wICsgMSkpO1xuICAgIHdoaWxlICgrK2kgPCBuKSB0aWNrc1tpXSA9IChzdGFydCAtIGkpIC8gc3RlcDtcbiAgfVxuXG4gIGlmIChyZXZlcnNlKSB0aWNrcy5yZXZlcnNlKCk7XG5cbiAgcmV0dXJuIHRpY2tzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgdmFyIHN0ZXAgPSAoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSxcbiAgICAgIHBvd2VyID0gTWF0aC5mbG9vcihNYXRoLmxvZyhzdGVwKSAvIE1hdGguTE4xMCksXG4gICAgICBlcnJvciA9IHN0ZXAgLyBNYXRoLnBvdygxMCwgcG93ZXIpO1xuICByZXR1cm4gcG93ZXIgPj0gMFxuICAgICAgPyAoZXJyb3IgPj0gZTEwID8gMTAgOiBlcnJvciA+PSBlNSA/IDUgOiBlcnJvciA+PSBlMiA/IDIgOiAxKSAqIE1hdGgucG93KDEwLCBwb3dlcilcbiAgICAgIDogLU1hdGgucG93KDEwLCAtcG93ZXIpIC8gKGVycm9yID49IGUxMCA/IDEwIDogZXJyb3IgPj0gZTUgPyA1IDogZXJyb3IgPj0gZTIgPyAyIDogMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgdmFyIHN0ZXAwID0gTWF0aC5hYnMoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSxcbiAgICAgIHN0ZXAxID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2coc3RlcDApIC8gTWF0aC5MTjEwKSksXG4gICAgICBlcnJvciA9IHN0ZXAwIC8gc3RlcDE7XG4gIGlmIChlcnJvciA+PSBlMTApIHN0ZXAxICo9IDEwO1xuICBlbHNlIGlmIChlcnJvciA+PSBlNSkgc3RlcDEgKj0gNTtcbiAgZWxzZSBpZiAoZXJyb3IgPj0gZTIpIHN0ZXAxICo9IDI7XG4gIHJldHVybiBzdG9wIDwgc3RhcnQgPyAtc3RlcDEgOiBzdGVwMTtcbn1cbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgcCwgdmFsdWVvZikge1xuICBpZiAodmFsdWVvZiA9PSBudWxsKSB2YWx1ZW9mID0gbnVtYmVyO1xuICBpZiAoIShuID0gdmFsdWVzLmxlbmd0aCkpIHJldHVybjtcbiAgaWYgKChwID0gK3ApIDw9IDAgfHwgbiA8IDIpIHJldHVybiArdmFsdWVvZih2YWx1ZXNbMF0sIDAsIHZhbHVlcyk7XG4gIGlmIChwID49IDEpIHJldHVybiArdmFsdWVvZih2YWx1ZXNbbiAtIDFdLCBuIC0gMSwgdmFsdWVzKTtcbiAgdmFyIG4sXG4gICAgICBpID0gKG4gLSAxKSAqIHAsXG4gICAgICBpMCA9IE1hdGguZmxvb3IoaSksXG4gICAgICB2YWx1ZTAgPSArdmFsdWVvZih2YWx1ZXNbaTBdLCBpMCwgdmFsdWVzKSxcbiAgICAgIHZhbHVlMSA9ICt2YWx1ZW9mKHZhbHVlc1tpMCArIDFdLCBpMCArIDEsIHZhbHVlcyk7XG4gIHJldHVybiB2YWx1ZTAgKyAodmFsdWUxIC0gdmFsdWUwKSAqIChpIC0gaTApO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIGkgPSAtMSxcbiAgICAgIHZhbHVlLFxuICAgICAgbWF4O1xuXG4gIGlmICh2YWx1ZW9mID09IG51bGwpIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlc1tpXSkgIT0gbnVsbCAmJiB2YWx1ZSA+PSB2YWx1ZSkge1xuICAgICAgICBtYXggPSB2YWx1ZTtcbiAgICAgICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gQ29tcGFyZSB0aGUgcmVtYWluaW5nIHZhbHVlcy5cbiAgICAgICAgICBpZiAoKHZhbHVlID0gdmFsdWVzW2ldKSAhPSBudWxsICYmIHZhbHVlID4gbWF4KSB7XG4gICAgICAgICAgICBtYXggPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSAhPSBudWxsICYmIHZhbHVlID49IHZhbHVlKSB7XG4gICAgICAgIG1heCA9IHZhbHVlO1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBDb21wYXJlIHRoZSByZW1haW5pbmcgdmFsdWVzLlxuICAgICAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgIT0gbnVsbCAmJiB2YWx1ZSA+IG1heCkge1xuICAgICAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1heDtcbn1cbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBtID0gbixcbiAgICAgIGkgPSAtMSxcbiAgICAgIHZhbHVlLFxuICAgICAgc3VtID0gMDtcblxuICBpZiAodmFsdWVvZiA9PSBudWxsKSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICghaXNOYU4odmFsdWUgPSBudW1iZXIodmFsdWVzW2ldKSkpIHN1bSArPSB2YWx1ZTtcbiAgICAgIGVsc2UgLS1tO1xuICAgIH1cbiAgfVxuXG4gIGVsc2Uge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAoIWlzTmFOKHZhbHVlID0gbnVtYmVyKHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSkpIHN1bSArPSB2YWx1ZTtcbiAgICAgIGVsc2UgLS1tO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtKSByZXR1cm4gc3VtIC8gbTtcbn1cbiIsImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nXCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlclwiO1xuaW1wb3J0IHF1YW50aWxlIGZyb20gXCIuL3F1YW50aWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBpID0gLTEsXG4gICAgICB2YWx1ZSxcbiAgICAgIG51bWJlcnMgPSBbXTtcblxuICBpZiAodmFsdWVvZiA9PSBudWxsKSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICghaXNOYU4odmFsdWUgPSBudW1iZXIodmFsdWVzW2ldKSkpIHtcbiAgICAgICAgbnVtYmVycy5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKCFpc05hTih2YWx1ZSA9IG51bWJlcih2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkpKSB7XG4gICAgICAgIG51bWJlcnMucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHF1YW50aWxlKG51bWJlcnMuc29ydChhc2NlbmRpbmcpLCAwLjUpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIGkgPSAtMSxcbiAgICAgIHZhbHVlLFxuICAgICAgbWluO1xuXG4gIGlmICh2YWx1ZW9mID09IG51bGwpIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlc1tpXSkgIT0gbnVsbCAmJiB2YWx1ZSA+PSB2YWx1ZSkge1xuICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gQ29tcGFyZSB0aGUgcmVtYWluaW5nIHZhbHVlcy5cbiAgICAgICAgICBpZiAoKHZhbHVlID0gdmFsdWVzW2ldKSAhPSBudWxsICYmIG1pbiA+IHZhbHVlKSB7XG4gICAgICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSAhPSBudWxsICYmIHZhbHVlID49IHZhbHVlKSB7XG4gICAgICAgIG1pbiA9IHZhbHVlO1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBDb21wYXJlIHRoZSByZW1haW5pbmcgdmFsdWVzLlxuICAgICAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgIT0gbnVsbCAmJiBtaW4gPiB2YWx1ZSkge1xuICAgICAgICAgICAgbWluID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1pbjtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBpID0gLTEsXG4gICAgICB2YWx1ZSxcbiAgICAgIHN1bSA9IDA7XG5cbiAgaWYgKHZhbHVlb2YgPT0gbnVsbCkge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAodmFsdWUgPSArdmFsdWVzW2ldKSBzdW0gKz0gdmFsdWU7IC8vIE5vdGU6IHplcm8gYW5kIG51bGwgYXJlIGVxdWl2YWxlbnQuXG4gICAgfVxuICB9XG5cbiAgZWxzZSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICh2YWx1ZSA9ICt2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgc3VtICs9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdW07XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCDCqSAyMDE1IC0gMjAxOCBUaGUgQnJvYWQgSW5zdGl0dXRlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgKGh0dHBzOi8vZ2l0aHViLmNvbS9icm9hZGluc3RpdHV0ZS9ndGV4LXZpei9ibG9iL21hc3Rlci9MSUNFTlNFLm1kKVxuICovXG4vKipcbiAqIENyZWF0ZXMgYW4gU1ZHXG4gKiBAcGFyYW0gaWQge1N0cmluZ30gYSBET00gZWxlbWVudCBJRCB0aGF0IHN0YXJ0cyB3aXRoIGEgXCIjXCJcbiAqIEBwYXJhbSB3aWR0aCB7TnVtZXJpY31cbiAqIEBwYXJhbSBoZWlnaHQge051bWVyaWN9XG4gKiBAcGFyYW0gbWFyZ2luIHtPYmplY3R9IHdpdGggdHdvIGF0dHJpYnV0ZXM6IHdpZHRoIGFuZCBoZWlnaHRcbiAqIEByZXR1cm4ge1NlbGVjdGlvbn0gdGhlIGQzIHNlbGVjdGlvbiBvYmplY3Qgb2YgdGhlIFNWR1xuICovXG5cbmltcG9ydCB7c2VsZWN0fSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge3JhbmdlfSBmcm9tIFwiZDMtYXJyYXlcIjtcblxuLyoqXG4gKlxuICogQHBhcmFtIGlkIHtTdHJpbmd9IHRoZSBwYXJlbnQgZG9tIElEXG4gKiBAcGFyYW0gd2lkdGgge051bWVyaWN9OiB0aGUgb3V0ZXIgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge051bWVyaWN9OiB0aGUgb3V0ZXIgaGVpZ2h0XG4gKiBAcGFyYW0gbWFyZ2luIHtPYmplY3R9IHdpdGggYXR0cjogbGVmdCwgdG9wXG4gKiBAcGFyYW0gc3ZnSWQge1N0cmluZ31cbiAqIEByZXR1cm5zIHsqfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3ZnKGlkLCB3aWR0aCwgaGVpZ2h0LCBtYXJnaW4sIHN2Z0lkPXVuZGVmaW5lZCl7XG4gICAgaWYgKHN2Z0lkPT09dW5kZWZpbmVkKSBzdmdJZD1gJHtpZH0tc3ZnYDtcbiAgICByZXR1cm4gc2VsZWN0KFwiI1wiK2lkKS5hcHBlbmQoXCJzdmdcIilcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aClcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgaGVpZ2h0KVxuICAgICAgICAuYXR0cihcImlkXCIsIHN2Z0lkKVxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7bWFyZ2luLmxlZnR9LCAke21hcmdpbi50b3B9KWApXG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBzdmdPYmpcbiAqIEBwYXJhbSBkb3dubG9hZEZpbGVOYW1lIHtTdHJpbmd9XG4gKiBAcGFyYW0gdGVtcERvd25sb2FkRGl2SWQge1N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvd25sb2FkU3ZnKHN2Z09iaiwgZG93bmxvYWRGaWxlTmFtZSwgdGVtcERvd25sb2FkRGl2SWQpe1xuICAgIGNvbnNvbGUubG9nKHN2Z09iaik7XG4gICAgdmFyICRzdmdDb3B5ID0gc3ZnT2JqLmNsb25lKClcbiAgICAuYXR0cihcInZlcnNpb25cIiwgXCIxLjFcIilcbiAgICAuYXR0cihcInhtbG5zXCIsIFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIik7XG5cbiAgICAvLyBwYXJzZSBhbmQgYWRkIHRoZSBDU1Mgc3R5bGluZyB1c2VkIGJ5IHRoZSBTVkdcbiAgICB2YXIgc3R5bGVzID0gcGFyc2VDc3NTdHlsZXMoc3ZnT2JqLmdldCgpKTtcbiAgICAkc3ZnQ29weS5wcmVwZW5kKHN0eWxlcyk7XG5cbiAgICAkKFwiI1wiICsgdGVtcERvd25sb2FkRGl2SWQpLmh0bWwoJycpLmhpZGUoKTtcbiAgICB2YXIgc3ZnSHRtbCA9ICQoXCIjXCIgKyB0ZW1wRG93bmxvYWREaXZJZCkuYXBwZW5kKCRzdmdDb3B5KS5odG1sKCk7XG5cbiAgICB2YXIgc3ZnQmxvYiA9IG5ldyBCbG9iKFtzdmdIdG1sXSwge3R5cGU6IFwiaW1hZ2Uvc3ZnK3htbFwifSk7XG4gICAgc2F2ZUFzKHN2Z0Jsb2IsIGRvd25sb2FkRmlsZU5hbWUpO1xuXG4gICAgLy8gY2xlYXIgdGhlIHRlbXAgZG93bmxvYWQgZGl2XG4gICAgJChcIiNcIiArIHRlbXBEb3dubG9hZERpdklkKS5odG1sKCcnKS5oaWRlKCk7XG59XG4vKipcbiAqIEEgZnVuY3Rpb24gZm9yIHBhcnNpbmcgdGhlIENTUyBzdHlsZSBzaGVldCBhbmQgaW5jbHVkaW5nIHRoZSBzdHlsZSBwcm9wZXJ0aWVzIGluIHRoZSBkb3dubG9hZGFibGUgU1ZHLlxuICogQHBhcmFtIGRvbVxuICogQHJldHVybnMge0VsZW1lbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNzc1N0eWxlcyAoZG9tKSB7XG4gICAgdmFyIHVzZWQgPSBcIlwiO1xuICAgIHZhciBzaGVldHMgPSBkb2N1bWVudC5zdHlsZVNoZWV0cztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2hlZXRzLmxlbmd0aDsgaSsrKSB7IC8vIFRPRE86IHdhbGsgdGhyb3VnaCB0aGlzIGJsb2NrIG9mIGNvZGVcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHNoZWV0c1tpXS5jc3NSdWxlcyA9PSBudWxsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHZhciBydWxlcyA9IHNoZWV0c1tpXS5jc3NSdWxlcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBydWxlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBydWxlID0gcnVsZXNbal07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihydWxlLnN0eWxlKSAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbGVtcztcbiAgICAgICAgICAgICAgICAgICAgLy9Tb21lIHNlbGVjdG9ycyB3b24ndCB3b3JrLCBhbmQgbW9zdCBvZiB0aGVzZSBkb24ndCBtYXR0ZXIuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtcyA9ICQoZG9tKS5maW5kKHJ1bGUuc2VsZWN0b3JUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VkICs9IHJ1bGUuc2VsZWN0b3JUZXh0ICsgXCIgeyBcIiArIHJ1bGUuc3R5bGUuY3NzVGV4dCArIFwiIH1cXG5cIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gSW4gRmlyZWZveCwgaWYgc3R5bGVzaGVldCBvcmlnaW5hdGVzIGZyb20gYSBkaWZmIGRvbWFpbixcbiAgICAgICAgICAgIC8vIHRyeWluZyB0byBhY2Nlc3MgdGhlIGNzc1J1bGVzIHdpbGwgdGhyb3cgYSBTZWN1cml0eUVycm9yLlxuICAgICAgICAgICAgLy8gSGVuY2UsIHdlIG11c3QgdXNlIGEgdHJ5L2NhdGNoIHRvIGhhbmRsZSB0aGlzIGluIEZpcmVmb3hcbiAgICAgICAgICAgIGlmIChlLm5hbWUgIT09ICdTZWN1cml0eUVycm9yJykgdGhyb3cgZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHMuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvY3NzJyk7XG4gICAgcy5pbm5lckhUTUwgPSBcIjwhW0NEQVRBW1xcblwiICsgdXNlZCArIFwiXFxuXV0+XCI7XG5cbiAgICByZXR1cm4gcztcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIGxpc3Qgb2YgeCp5IGRhdGEgb2JqZWN0cyB3aXRoIHJhbmRvbSB2YWx1ZXNcbiAqIFRoZSBkYXRhIG9iamVjdCBoYXMgdGhpcyBzdHJ1Y3R1cmU6IHt4OiB4bGFiZWwsIHk6IHlsYWJlbCwgdmFsdWU6IHNvbWUgdmFsdWUsIGRpc3BsYXlWYWx1ZTogc29tZSB2YWx1ZX1cbiAqIEBwYXJhbSBwYXJcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tTWF0cml4KHBhcj17eDoyMCwgeToyMCwgc2NhbGVGYWN0b3I6MX0pe1xuICAgIGxldCBYID0gcmFuZ2UoMSwgcGFyLngrMSk7IC8vIGdlbmVyYXRlcyBhIDEtYmFzZWQgbGlzdC5cbiAgICBsZXQgWSA9IHJhbmdlKDEsIHBhci55KzEpO1xuICAgIGxldCBkYXRhID0gW107XG4gICAgWC5mb3JFYWNoKCh4KT0+e1xuICAgICAgICB4ID0gJ3gnICsgeC50b1N0cmluZygpO1xuICAgICAgICBZLmZvckVhY2goKHkpPT57XG4gICAgICAgICAgICB5ID0gJ3knICsgeS50b1N0cmluZygpO1xuICAgICAgICAgICAgbGV0IHYgPSBNYXRoLnJhbmRvbSgpKnBhci5zY2FsZUZhY3RvcjtcbiAgICAgICAgICAgIGRhdGEucHVzaCh7XG4gICAgICAgICAgICAgICAgeDogeCxcbiAgICAgICAgICAgICAgICB5OiB5LFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2LFxuICAgICAgICAgICAgICAgIGRpc3BsYXlWYWx1ZTogcGFyc2VGbG9hdCh2LnRvRXhwb25lbnRpYWwoKSkudG9QcmVjaXNpb24oMylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH0pO1xuICAgIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgbGlzdCBvZiByYW5kb20gdmFsdWVzXG4gKiBAcGFyYW0gcGFyXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVJhbmRvbUxpc3QocGFyPXtuOjEwMCwgc2NhbGVGYWN0b3I6MX0pIHtcbiAgICBsZXQgWCA9IHJhbmdlKDAsIHBhci5uKTsgLy8gZ2VuZXJhdGVzIGEgMS1iYXNlZCBsaXN0LlxuICAgIGxldCBkYXRhID0gW107XG4gICAgcmV0dXJuIFgubWFwKCh4KSA9PiBNYXRoLnJhbmRvbSgpICogcGFyLnNjYWxlRmFjdG9yKTtcblxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKTtcbn1cbiIsImltcG9ydCBkZWZhdWx0U291cmNlIGZyb20gXCIuL2RlZmF1bHRTb3VyY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHNvdXJjZVJhbmRvbU5vcm1hbChzb3VyY2UpIHtcbiAgZnVuY3Rpb24gcmFuZG9tTm9ybWFsKG11LCBzaWdtYSkge1xuICAgIHZhciB4LCByO1xuICAgIG11ID0gbXUgPT0gbnVsbCA/IDAgOiArbXU7XG4gICAgc2lnbWEgPSBzaWdtYSA9PSBudWxsID8gMSA6ICtzaWdtYTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgeTtcblxuICAgICAgLy8gSWYgYXZhaWxhYmxlLCB1c2UgdGhlIHNlY29uZCBwcmV2aW91c2x5LWdlbmVyYXRlZCB1bmlmb3JtIHJhbmRvbS5cbiAgICAgIGlmICh4ICE9IG51bGwpIHkgPSB4LCB4ID0gbnVsbDtcblxuICAgICAgLy8gT3RoZXJ3aXNlLCBnZW5lcmF0ZSBhIG5ldyB4IGFuZCB5LlxuICAgICAgZWxzZSBkbyB7XG4gICAgICAgIHggPSBzb3VyY2UoKSAqIDIgLSAxO1xuICAgICAgICB5ID0gc291cmNlKCkgKiAyIC0gMTtcbiAgICAgICAgciA9IHggKiB4ICsgeSAqIHk7XG4gICAgICB9IHdoaWxlICghciB8fCByID4gMSk7XG5cbiAgICAgIHJldHVybiBtdSArIHNpZ21hICogeSAqIE1hdGguc3FydCgtMiAqIE1hdGgubG9nKHIpIC8gcik7XG4gICAgfTtcbiAgfVxuXG4gIHJhbmRvbU5vcm1hbC5zb3VyY2UgPSBzb3VyY2VSYW5kb21Ob3JtYWw7XG5cbiAgcmV0dXJuIHJhbmRvbU5vcm1hbDtcbn0pKGRlZmF1bHRTb3VyY2UpO1xuIiwiZXhwb3J0IHZhciBwcmVmaXggPSBcIiRcIjtcblxuZnVuY3Rpb24gTWFwKCkge31cblxuTWFwLnByb3RvdHlwZSA9IG1hcC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBNYXAsXG4gIGhhczogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIChwcmVmaXggKyBrZXkpIGluIHRoaXM7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIHRoaXNbcHJlZml4ICsga2V5XTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAgdGhpc1twcmVmaXggKyBrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHJlbW92ZTogZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIHByb3BlcnR5ID0gcHJlZml4ICsga2V5O1xuICAgIHJldHVybiBwcm9wZXJ0eSBpbiB0aGlzICYmIGRlbGV0ZSB0aGlzW3Byb3BlcnR5XTtcbiAgfSxcbiAgY2xlYXI6IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSBkZWxldGUgdGhpc1twcm9wZXJ0eV07XG4gIH0sXG4gIGtleXM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIGtleXMucHVzaChwcm9wZXJ0eS5zbGljZSgxKSk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH0sXG4gIHZhbHVlczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSB2YWx1ZXMucHVzaCh0aGlzW3Byb3BlcnR5XSk7XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfSxcbiAgZW50cmllczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGVudHJpZXMgPSBbXTtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgZW50cmllcy5wdXNoKHtrZXk6IHByb3BlcnR5LnNsaWNlKDEpLCB2YWx1ZTogdGhpc1twcm9wZXJ0eV19KTtcbiAgICByZXR1cm4gZW50cmllcztcbiAgfSxcbiAgc2l6ZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNpemUgPSAwO1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSArK3NpemU7XG4gICAgcmV0dXJuIHNpemU7XG4gIH0sXG4gIGVtcHR5OiBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBlYWNoOiBmdW5jdGlvbihmKSB7XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIGYodGhpc1twcm9wZXJ0eV0sIHByb3BlcnR5LnNsaWNlKDEpLCB0aGlzKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gbWFwKG9iamVjdCwgZikge1xuICB2YXIgbWFwID0gbmV3IE1hcDtcblxuICAvLyBDb3B5IGNvbnN0cnVjdG9yLlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTWFwKSBvYmplY3QuZWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7IG1hcC5zZXQoa2V5LCB2YWx1ZSk7IH0pO1xuXG4gIC8vIEluZGV4IGFycmF5IGJ5IG51bWVyaWMgaW5kZXggb3Igc3BlY2lmaWVkIGtleSBmdW5jdGlvbi5cbiAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgdmFyIGkgPSAtMSxcbiAgICAgICAgbiA9IG9iamVjdC5sZW5ndGgsXG4gICAgICAgIG87XG5cbiAgICBpZiAoZiA9PSBudWxsKSB3aGlsZSAoKytpIDwgbikgbWFwLnNldChpLCBvYmplY3RbaV0pO1xuICAgIGVsc2Ugd2hpbGUgKCsraSA8IG4pIG1hcC5zZXQoZihvID0gb2JqZWN0W2ldLCBpLCBvYmplY3QpLCBvKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgb2JqZWN0IHRvIG1hcC5cbiAgZWxzZSBpZiAob2JqZWN0KSBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBtYXAuc2V0KGtleSwgb2JqZWN0W2tleV0pO1xuXG4gIHJldHVybiBtYXA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcDtcbiIsImltcG9ydCBtYXAgZnJvbSBcIi4vbWFwXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIga2V5cyA9IFtdLFxuICAgICAgc29ydEtleXMgPSBbXSxcbiAgICAgIHNvcnRWYWx1ZXMsXG4gICAgICByb2xsdXAsXG4gICAgICBuZXN0O1xuXG4gIGZ1bmN0aW9uIGFwcGx5KGFycmF5LCBkZXB0aCwgY3JlYXRlUmVzdWx0LCBzZXRSZXN1bHQpIHtcbiAgICBpZiAoZGVwdGggPj0ga2V5cy5sZW5ndGgpIHtcbiAgICAgIGlmIChzb3J0VmFsdWVzICE9IG51bGwpIGFycmF5LnNvcnQoc29ydFZhbHVlcyk7XG4gICAgICByZXR1cm4gcm9sbHVwICE9IG51bGwgPyByb2xsdXAoYXJyYXkpIDogYXJyYXk7XG4gICAgfVxuXG4gICAgdmFyIGkgPSAtMSxcbiAgICAgICAgbiA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAga2V5ID0ga2V5c1tkZXB0aCsrXSxcbiAgICAgICAga2V5VmFsdWUsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZXNCeUtleSA9IG1hcCgpLFxuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIHJlc3VsdCA9IGNyZWF0ZVJlc3VsdCgpO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICh2YWx1ZXMgPSB2YWx1ZXNCeUtleS5nZXQoa2V5VmFsdWUgPSBrZXkodmFsdWUgPSBhcnJheVtpXSkgKyBcIlwiKSkge1xuICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZXNCeUtleS5zZXQoa2V5VmFsdWUsIFt2YWx1ZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhbHVlc0J5S2V5LmVhY2goZnVuY3Rpb24odmFsdWVzLCBrZXkpIHtcbiAgICAgIHNldFJlc3VsdChyZXN1bHQsIGtleSwgYXBwbHkodmFsdWVzLCBkZXB0aCwgY3JlYXRlUmVzdWx0LCBzZXRSZXN1bHQpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBlbnRyaWVzKG1hcCwgZGVwdGgpIHtcbiAgICBpZiAoKytkZXB0aCA+IGtleXMubGVuZ3RoKSByZXR1cm4gbWFwO1xuICAgIHZhciBhcnJheSwgc29ydEtleSA9IHNvcnRLZXlzW2RlcHRoIC0gMV07XG4gICAgaWYgKHJvbGx1cCAhPSBudWxsICYmIGRlcHRoID49IGtleXMubGVuZ3RoKSBhcnJheSA9IG1hcC5lbnRyaWVzKCk7XG4gICAgZWxzZSBhcnJheSA9IFtdLCBtYXAuZWFjaChmdW5jdGlvbih2LCBrKSB7IGFycmF5LnB1c2goe2tleTogaywgdmFsdWVzOiBlbnRyaWVzKHYsIGRlcHRoKX0pOyB9KTtcbiAgICByZXR1cm4gc29ydEtleSAhPSBudWxsID8gYXJyYXkuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBzb3J0S2V5KGEua2V5LCBiLmtleSk7IH0pIDogYXJyYXk7XG4gIH1cblxuICByZXR1cm4gbmVzdCA9IHtcbiAgICBvYmplY3Q6IGZ1bmN0aW9uKGFycmF5KSB7IHJldHVybiBhcHBseShhcnJheSwgMCwgY3JlYXRlT2JqZWN0LCBzZXRPYmplY3QpOyB9LFxuICAgIG1hcDogZnVuY3Rpb24oYXJyYXkpIHsgcmV0dXJuIGFwcGx5KGFycmF5LCAwLCBjcmVhdGVNYXAsIHNldE1hcCk7IH0sXG4gICAgZW50cmllczogZnVuY3Rpb24oYXJyYXkpIHsgcmV0dXJuIGVudHJpZXMoYXBwbHkoYXJyYXksIDAsIGNyZWF0ZU1hcCwgc2V0TWFwKSwgMCk7IH0sXG4gICAga2V5OiBmdW5jdGlvbihkKSB7IGtleXMucHVzaChkKTsgcmV0dXJuIG5lc3Q7IH0sXG4gICAgc29ydEtleXM6IGZ1bmN0aW9uKG9yZGVyKSB7IHNvcnRLZXlzW2tleXMubGVuZ3RoIC0gMV0gPSBvcmRlcjsgcmV0dXJuIG5lc3Q7IH0sXG4gICAgc29ydFZhbHVlczogZnVuY3Rpb24ob3JkZXIpIHsgc29ydFZhbHVlcyA9IG9yZGVyOyByZXR1cm4gbmVzdDsgfSxcbiAgICByb2xsdXA6IGZ1bmN0aW9uKGYpIHsgcm9sbHVwID0gZjsgcmV0dXJuIG5lc3Q7IH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT2JqZWN0KCkge1xuICByZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIHNldE9iamVjdChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTWFwKCkge1xuICByZXR1cm4gbWFwKCk7XG59XG5cbmZ1bmN0aW9uIHNldE1hcChtYXAsIGtleSwgdmFsdWUpIHtcbiAgbWFwLnNldChrZXksIHZhbHVlKTtcbn1cbiIsInZhciBhcnJheSA9IEFycmF5LnByb3RvdHlwZTtcblxuZXhwb3J0IHZhciBtYXAgPSBhcnJheS5tYXA7XG5leHBvcnQgdmFyIHNsaWNlID0gYXJyYXkuc2xpY2U7XG4iLCJpbXBvcnQge21hcH0gZnJvbSBcImQzLWNvbGxlY3Rpb25cIjtcbmltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5XCI7XG5cbmV4cG9ydCB2YXIgaW1wbGljaXQgPSB7bmFtZTogXCJpbXBsaWNpdFwifTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JkaW5hbChyYW5nZSkge1xuICB2YXIgaW5kZXggPSBtYXAoKSxcbiAgICAgIGRvbWFpbiA9IFtdLFxuICAgICAgdW5rbm93biA9IGltcGxpY2l0O1xuXG4gIHJhbmdlID0gcmFuZ2UgPT0gbnVsbCA/IFtdIDogc2xpY2UuY2FsbChyYW5nZSk7XG5cbiAgZnVuY3Rpb24gc2NhbGUoZCkge1xuICAgIHZhciBrZXkgPSBkICsgXCJcIiwgaSA9IGluZGV4LmdldChrZXkpO1xuICAgIGlmICghaSkge1xuICAgICAgaWYgKHVua25vd24gIT09IGltcGxpY2l0KSByZXR1cm4gdW5rbm93bjtcbiAgICAgIGluZGV4LnNldChrZXksIGkgPSBkb21haW4ucHVzaChkKSk7XG4gICAgfVxuICAgIHJldHVybiByYW5nZVsoaSAtIDEpICUgcmFuZ2UubGVuZ3RoXTtcbiAgfVxuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBkb21haW4uc2xpY2UoKTtcbiAgICBkb21haW4gPSBbXSwgaW5kZXggPSBtYXAoKTtcbiAgICB2YXIgaSA9IC0xLCBuID0gXy5sZW5ndGgsIGQsIGtleTtcbiAgICB3aGlsZSAoKytpIDwgbikgaWYgKCFpbmRleC5oYXMoa2V5ID0gKGQgPSBfW2ldKSArIFwiXCIpKSBpbmRleC5zZXQoa2V5LCBkb21haW4ucHVzaChkKSk7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gc2xpY2UuY2FsbChfKSwgc2NhbGUpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gb3JkaW5hbCgpXG4gICAgICAgIC5kb21haW4oZG9tYWluKVxuICAgICAgICAucmFuZ2UocmFuZ2UpXG4gICAgICAgIC51bmtub3duKHVua25vd24pO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cbiIsImltcG9ydCB7cmFuZ2UgYXMgc2VxdWVuY2V9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IG9yZGluYWwgZnJvbSBcIi4vb3JkaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiYW5kKCkge1xuICB2YXIgc2NhbGUgPSBvcmRpbmFsKCkudW5rbm93bih1bmRlZmluZWQpLFxuICAgICAgZG9tYWluID0gc2NhbGUuZG9tYWluLFxuICAgICAgb3JkaW5hbFJhbmdlID0gc2NhbGUucmFuZ2UsXG4gICAgICByYW5nZSA9IFswLCAxXSxcbiAgICAgIHN0ZXAsXG4gICAgICBiYW5kd2lkdGgsXG4gICAgICByb3VuZCA9IGZhbHNlLFxuICAgICAgcGFkZGluZ0lubmVyID0gMCxcbiAgICAgIHBhZGRpbmdPdXRlciA9IDAsXG4gICAgICBhbGlnbiA9IDAuNTtcblxuICBkZWxldGUgc2NhbGUudW5rbm93bjtcblxuICBmdW5jdGlvbiByZXNjYWxlKCkge1xuICAgIHZhciBuID0gZG9tYWluKCkubGVuZ3RoLFxuICAgICAgICByZXZlcnNlID0gcmFuZ2VbMV0gPCByYW5nZVswXSxcbiAgICAgICAgc3RhcnQgPSByYW5nZVtyZXZlcnNlIC0gMF0sXG4gICAgICAgIHN0b3AgPSByYW5nZVsxIC0gcmV2ZXJzZV07XG4gICAgc3RlcCA9IChzdG9wIC0gc3RhcnQpIC8gTWF0aC5tYXgoMSwgbiAtIHBhZGRpbmdJbm5lciArIHBhZGRpbmdPdXRlciAqIDIpO1xuICAgIGlmIChyb3VuZCkgc3RlcCA9IE1hdGguZmxvb3Ioc3RlcCk7XG4gICAgc3RhcnQgKz0gKHN0b3AgLSBzdGFydCAtIHN0ZXAgKiAobiAtIHBhZGRpbmdJbm5lcikpICogYWxpZ247XG4gICAgYmFuZHdpZHRoID0gc3RlcCAqICgxIC0gcGFkZGluZ0lubmVyKTtcbiAgICBpZiAocm91bmQpIHN0YXJ0ID0gTWF0aC5yb3VuZChzdGFydCksIGJhbmR3aWR0aCA9IE1hdGgucm91bmQoYmFuZHdpZHRoKTtcbiAgICB2YXIgdmFsdWVzID0gc2VxdWVuY2UobikubWFwKGZ1bmN0aW9uKGkpIHsgcmV0dXJuIHN0YXJ0ICsgc3RlcCAqIGk7IH0pO1xuICAgIHJldHVybiBvcmRpbmFsUmFuZ2UocmV2ZXJzZSA/IHZhbHVlcy5yZXZlcnNlKCkgOiB2YWx1ZXMpO1xuICB9XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRvbWFpbihfKSwgcmVzY2FsZSgpKSA6IGRvbWFpbigpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gWytfWzBdLCArX1sxXV0sIHJlc2NhbGUoKSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlUm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIHJhbmdlID0gWytfWzBdLCArX1sxXV0sIHJvdW5kID0gdHJ1ZSwgcmVzY2FsZSgpO1xuICB9O1xuXG4gIHNjYWxlLmJhbmR3aWR0aCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiYW5kd2lkdGg7XG4gIH07XG5cbiAgc2NhbGUuc3RlcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBzdGVwO1xuICB9O1xuXG4gIHNjYWxlLnJvdW5kID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJvdW5kID0gISFfLCByZXNjYWxlKCkpIDogcm91bmQ7XG4gIH07XG5cbiAgc2NhbGUucGFkZGluZyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRkaW5nSW5uZXIgPSBwYWRkaW5nT3V0ZXIgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBfKSksIHJlc2NhbGUoKSkgOiBwYWRkaW5nSW5uZXI7XG4gIH07XG5cbiAgc2NhbGUucGFkZGluZ0lubmVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmdJbm5lciA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIF8pKSwgcmVzY2FsZSgpKSA6IHBhZGRpbmdJbm5lcjtcbiAgfTtcblxuICBzY2FsZS5wYWRkaW5nT3V0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ091dGVyID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgXykpLCByZXNjYWxlKCkpIDogcGFkZGluZ091dGVyO1xuICB9O1xuXG4gIHNjYWxlLmFsaWduID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFsaWduID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgXykpLCByZXNjYWxlKCkpIDogYWxpZ247XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiYW5kKClcbiAgICAgICAgLmRvbWFpbihkb21haW4oKSlcbiAgICAgICAgLnJhbmdlKHJhbmdlKVxuICAgICAgICAucm91bmQocm91bmQpXG4gICAgICAgIC5wYWRkaW5nSW5uZXIocGFkZGluZ0lubmVyKVxuICAgICAgICAucGFkZGluZ091dGVyKHBhZGRpbmdPdXRlcilcbiAgICAgICAgLmFsaWduKGFsaWduKTtcbiAgfTtcblxuICByZXR1cm4gcmVzY2FsZSgpO1xufVxuXG5mdW5jdGlvbiBwb2ludGlzaChzY2FsZSkge1xuICB2YXIgY29weSA9IHNjYWxlLmNvcHk7XG5cbiAgc2NhbGUucGFkZGluZyA9IHNjYWxlLnBhZGRpbmdPdXRlcjtcbiAgZGVsZXRlIHNjYWxlLnBhZGRpbmdJbm5lcjtcbiAgZGVsZXRlIHNjYWxlLnBhZGRpbmdPdXRlcjtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHBvaW50aXNoKGNvcHkoKSk7XG4gIH07XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9pbnQoKSB7XG4gIHJldHVybiBwb2ludGlzaChiYW5kKCkucGFkZGluZ0lubmVyKDEpKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnN0cnVjdG9yLCBmYWN0b3J5LCBwcm90b3R5cGUpIHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gZmFjdG9yeS5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gIHByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kKHBhcmVudCwgZGVmaW5pdGlvbikge1xuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShwYXJlbnQucHJvdG90eXBlKTtcbiAgZm9yICh2YXIga2V5IGluIGRlZmluaXRpb24pIHByb3RvdHlwZVtrZXldID0gZGVmaW5pdGlvbltrZXldO1xuICByZXR1cm4gcHJvdG90eXBlO1xufVxuIiwiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBDb2xvcigpIHt9XG5cbmV4cG9ydCB2YXIgZGFya2VyID0gMC43O1xuZXhwb3J0IHZhciBicmlnaHRlciA9IDEgLyBkYXJrZXI7XG5cbnZhciByZUkgPSBcIlxcXFxzKihbKy1dP1xcXFxkKylcXFxccypcIixcbiAgICByZU4gPSBcIlxcXFxzKihbKy1dP1xcXFxkKlxcXFwuP1xcXFxkKyg/OltlRV1bKy1dP1xcXFxkKyk/KVxcXFxzKlwiLFxuICAgIHJlUCA9IFwiXFxcXHMqKFsrLV0/XFxcXGQqXFxcXC4/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pJVxcXFxzKlwiLFxuICAgIHJlSGV4MyA9IC9eIyhbMC05YS1mXXszfSkkLyxcbiAgICByZUhleDYgPSAvXiMoWzAtOWEtZl17Nn0pJC8sXG4gICAgcmVSZ2JJbnRlZ2VyID0gbmV3IFJlZ0V4cChcIl5yZ2JcXFxcKFwiICsgW3JlSSwgcmVJLCByZUldICsgXCJcXFxcKSRcIiksXG4gICAgcmVSZ2JQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5yZ2JcXFxcKFwiICsgW3JlUCwgcmVQLCByZVBdICsgXCJcXFxcKSRcIiksXG4gICAgcmVSZ2JhSW50ZWdlciA9IG5ldyBSZWdFeHAoXCJecmdiYVxcXFwoXCIgKyBbcmVJLCByZUksIHJlSSwgcmVOXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlUmdiYVBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXnJnYmFcXFxcKFwiICsgW3JlUCwgcmVQLCByZVAsIHJlTl0gKyBcIlxcXFwpJFwiKSxcbiAgICByZUhzbFBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXmhzbFxcXFwoXCIgKyBbcmVOLCByZVAsIHJlUF0gKyBcIlxcXFwpJFwiKSxcbiAgICByZUhzbGFQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5oc2xhXFxcXChcIiArIFtyZU4sIHJlUCwgcmVQLCByZU5dICsgXCJcXFxcKSRcIik7XG5cbnZhciBuYW1lZCA9IHtcbiAgYWxpY2VibHVlOiAweGYwZjhmZixcbiAgYW50aXF1ZXdoaXRlOiAweGZhZWJkNyxcbiAgYXF1YTogMHgwMGZmZmYsXG4gIGFxdWFtYXJpbmU6IDB4N2ZmZmQ0LFxuICBhenVyZTogMHhmMGZmZmYsXG4gIGJlaWdlOiAweGY1ZjVkYyxcbiAgYmlzcXVlOiAweGZmZTRjNCxcbiAgYmxhY2s6IDB4MDAwMDAwLFxuICBibGFuY2hlZGFsbW9uZDogMHhmZmViY2QsXG4gIGJsdWU6IDB4MDAwMGZmLFxuICBibHVldmlvbGV0OiAweDhhMmJlMixcbiAgYnJvd246IDB4YTUyYTJhLFxuICBidXJseXdvb2Q6IDB4ZGViODg3LFxuICBjYWRldGJsdWU6IDB4NWY5ZWEwLFxuICBjaGFydHJldXNlOiAweDdmZmYwMCxcbiAgY2hvY29sYXRlOiAweGQyNjkxZSxcbiAgY29yYWw6IDB4ZmY3ZjUwLFxuICBjb3JuZmxvd2VyYmx1ZTogMHg2NDk1ZWQsXG4gIGNvcm5zaWxrOiAweGZmZjhkYyxcbiAgY3JpbXNvbjogMHhkYzE0M2MsXG4gIGN5YW46IDB4MDBmZmZmLFxuICBkYXJrYmx1ZTogMHgwMDAwOGIsXG4gIGRhcmtjeWFuOiAweDAwOGI4YixcbiAgZGFya2dvbGRlbnJvZDogMHhiODg2MGIsXG4gIGRhcmtncmF5OiAweGE5YTlhOSxcbiAgZGFya2dyZWVuOiAweDAwNjQwMCxcbiAgZGFya2dyZXk6IDB4YTlhOWE5LFxuICBkYXJra2hha2k6IDB4YmRiNzZiLFxuICBkYXJrbWFnZW50YTogMHg4YjAwOGIsXG4gIGRhcmtvbGl2ZWdyZWVuOiAweDU1NmIyZixcbiAgZGFya29yYW5nZTogMHhmZjhjMDAsXG4gIGRhcmtvcmNoaWQ6IDB4OTkzMmNjLFxuICBkYXJrcmVkOiAweDhiMDAwMCxcbiAgZGFya3NhbG1vbjogMHhlOTk2N2EsXG4gIGRhcmtzZWFncmVlbjogMHg4ZmJjOGYsXG4gIGRhcmtzbGF0ZWJsdWU6IDB4NDgzZDhiLFxuICBkYXJrc2xhdGVncmF5OiAweDJmNGY0ZixcbiAgZGFya3NsYXRlZ3JleTogMHgyZjRmNGYsXG4gIGRhcmt0dXJxdW9pc2U6IDB4MDBjZWQxLFxuICBkYXJrdmlvbGV0OiAweDk0MDBkMyxcbiAgZGVlcHBpbms6IDB4ZmYxNDkzLFxuICBkZWVwc2t5Ymx1ZTogMHgwMGJmZmYsXG4gIGRpbWdyYXk6IDB4Njk2OTY5LFxuICBkaW1ncmV5OiAweDY5Njk2OSxcbiAgZG9kZ2VyYmx1ZTogMHgxZTkwZmYsXG4gIGZpcmVicmljazogMHhiMjIyMjIsXG4gIGZsb3JhbHdoaXRlOiAweGZmZmFmMCxcbiAgZm9yZXN0Z3JlZW46IDB4MjI4YjIyLFxuICBmdWNoc2lhOiAweGZmMDBmZixcbiAgZ2FpbnNib3JvOiAweGRjZGNkYyxcbiAgZ2hvc3R3aGl0ZTogMHhmOGY4ZmYsXG4gIGdvbGQ6IDB4ZmZkNzAwLFxuICBnb2xkZW5yb2Q6IDB4ZGFhNTIwLFxuICBncmF5OiAweDgwODA4MCxcbiAgZ3JlZW46IDB4MDA4MDAwLFxuICBncmVlbnllbGxvdzogMHhhZGZmMmYsXG4gIGdyZXk6IDB4ODA4MDgwLFxuICBob25leWRldzogMHhmMGZmZjAsXG4gIGhvdHBpbms6IDB4ZmY2OWI0LFxuICBpbmRpYW5yZWQ6IDB4Y2Q1YzVjLFxuICBpbmRpZ286IDB4NGIwMDgyLFxuICBpdm9yeTogMHhmZmZmZjAsXG4gIGtoYWtpOiAweGYwZTY4YyxcbiAgbGF2ZW5kZXI6IDB4ZTZlNmZhLFxuICBsYXZlbmRlcmJsdXNoOiAweGZmZjBmNSxcbiAgbGF3bmdyZWVuOiAweDdjZmMwMCxcbiAgbGVtb25jaGlmZm9uOiAweGZmZmFjZCxcbiAgbGlnaHRibHVlOiAweGFkZDhlNixcbiAgbGlnaHRjb3JhbDogMHhmMDgwODAsXG4gIGxpZ2h0Y3lhbjogMHhlMGZmZmYsXG4gIGxpZ2h0Z29sZGVucm9keWVsbG93OiAweGZhZmFkMixcbiAgbGlnaHRncmF5OiAweGQzZDNkMyxcbiAgbGlnaHRncmVlbjogMHg5MGVlOTAsXG4gIGxpZ2h0Z3JleTogMHhkM2QzZDMsXG4gIGxpZ2h0cGluazogMHhmZmI2YzEsXG4gIGxpZ2h0c2FsbW9uOiAweGZmYTA3YSxcbiAgbGlnaHRzZWFncmVlbjogMHgyMGIyYWEsXG4gIGxpZ2h0c2t5Ymx1ZTogMHg4N2NlZmEsXG4gIGxpZ2h0c2xhdGVncmF5OiAweDc3ODg5OSxcbiAgbGlnaHRzbGF0ZWdyZXk6IDB4Nzc4ODk5LFxuICBsaWdodHN0ZWVsYmx1ZTogMHhiMGM0ZGUsXG4gIGxpZ2h0eWVsbG93OiAweGZmZmZlMCxcbiAgbGltZTogMHgwMGZmMDAsXG4gIGxpbWVncmVlbjogMHgzMmNkMzIsXG4gIGxpbmVuOiAweGZhZjBlNixcbiAgbWFnZW50YTogMHhmZjAwZmYsXG4gIG1hcm9vbjogMHg4MDAwMDAsXG4gIG1lZGl1bWFxdWFtYXJpbmU6IDB4NjZjZGFhLFxuICBtZWRpdW1ibHVlOiAweDAwMDBjZCxcbiAgbWVkaXVtb3JjaGlkOiAweGJhNTVkMyxcbiAgbWVkaXVtcHVycGxlOiAweDkzNzBkYixcbiAgbWVkaXVtc2VhZ3JlZW46IDB4M2NiMzcxLFxuICBtZWRpdW1zbGF0ZWJsdWU6IDB4N2I2OGVlLFxuICBtZWRpdW1zcHJpbmdncmVlbjogMHgwMGZhOWEsXG4gIG1lZGl1bXR1cnF1b2lzZTogMHg0OGQxY2MsXG4gIG1lZGl1bXZpb2xldHJlZDogMHhjNzE1ODUsXG4gIG1pZG5pZ2h0Ymx1ZTogMHgxOTE5NzAsXG4gIG1pbnRjcmVhbTogMHhmNWZmZmEsXG4gIG1pc3R5cm9zZTogMHhmZmU0ZTEsXG4gIG1vY2Nhc2luOiAweGZmZTRiNSxcbiAgbmF2YWpvd2hpdGU6IDB4ZmZkZWFkLFxuICBuYXZ5OiAweDAwMDA4MCxcbiAgb2xkbGFjZTogMHhmZGY1ZTYsXG4gIG9saXZlOiAweDgwODAwMCxcbiAgb2xpdmVkcmFiOiAweDZiOGUyMyxcbiAgb3JhbmdlOiAweGZmYTUwMCxcbiAgb3JhbmdlcmVkOiAweGZmNDUwMCxcbiAgb3JjaGlkOiAweGRhNzBkNixcbiAgcGFsZWdvbGRlbnJvZDogMHhlZWU4YWEsXG4gIHBhbGVncmVlbjogMHg5OGZiOTgsXG4gIHBhbGV0dXJxdW9pc2U6IDB4YWZlZWVlLFxuICBwYWxldmlvbGV0cmVkOiAweGRiNzA5MyxcbiAgcGFwYXlhd2hpcDogMHhmZmVmZDUsXG4gIHBlYWNocHVmZjogMHhmZmRhYjksXG4gIHBlcnU6IDB4Y2Q4NTNmLFxuICBwaW5rOiAweGZmYzBjYixcbiAgcGx1bTogMHhkZGEwZGQsXG4gIHBvd2RlcmJsdWU6IDB4YjBlMGU2LFxuICBwdXJwbGU6IDB4ODAwMDgwLFxuICByZWJlY2NhcHVycGxlOiAweDY2MzM5OSxcbiAgcmVkOiAweGZmMDAwMCxcbiAgcm9zeWJyb3duOiAweGJjOGY4ZixcbiAgcm95YWxibHVlOiAweDQxNjllMSxcbiAgc2FkZGxlYnJvd246IDB4OGI0NTEzLFxuICBzYWxtb246IDB4ZmE4MDcyLFxuICBzYW5keWJyb3duOiAweGY0YTQ2MCxcbiAgc2VhZ3JlZW46IDB4MmU4YjU3LFxuICBzZWFzaGVsbDogMHhmZmY1ZWUsXG4gIHNpZW5uYTogMHhhMDUyMmQsXG4gIHNpbHZlcjogMHhjMGMwYzAsXG4gIHNreWJsdWU6IDB4ODdjZWViLFxuICBzbGF0ZWJsdWU6IDB4NmE1YWNkLFxuICBzbGF0ZWdyYXk6IDB4NzA4MDkwLFxuICBzbGF0ZWdyZXk6IDB4NzA4MDkwLFxuICBzbm93OiAweGZmZmFmYSxcbiAgc3ByaW5nZ3JlZW46IDB4MDBmZjdmLFxuICBzdGVlbGJsdWU6IDB4NDY4MmI0LFxuICB0YW46IDB4ZDJiNDhjLFxuICB0ZWFsOiAweDAwODA4MCxcbiAgdGhpc3RsZTogMHhkOGJmZDgsXG4gIHRvbWF0bzogMHhmZjYzNDcsXG4gIHR1cnF1b2lzZTogMHg0MGUwZDAsXG4gIHZpb2xldDogMHhlZTgyZWUsXG4gIHdoZWF0OiAweGY1ZGViMyxcbiAgd2hpdGU6IDB4ZmZmZmZmLFxuICB3aGl0ZXNtb2tlOiAweGY1ZjVmNSxcbiAgeWVsbG93OiAweGZmZmYwMCxcbiAgeWVsbG93Z3JlZW46IDB4OWFjZDMyXG59O1xuXG5kZWZpbmUoQ29sb3IsIGNvbG9yLCB7XG4gIGRpc3BsYXlhYmxlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpO1xuICB9LFxuICBoZXg6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnJnYigpLmhleCgpO1xuICB9LFxuICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucmdiKCkgKyBcIlwiO1xuICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29sb3IoZm9ybWF0KSB7XG4gIHZhciBtO1xuICBmb3JtYXQgPSAoZm9ybWF0ICsgXCJcIikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAobSA9IHJlSGV4My5leGVjKGZvcm1hdCkpID8gKG0gPSBwYXJzZUludChtWzFdLCAxNiksIG5ldyBSZ2IoKG0gPj4gOCAmIDB4ZikgfCAobSA+PiA0ICYgMHgwZjApLCAobSA+PiA0ICYgMHhmKSB8IChtICYgMHhmMCksICgobSAmIDB4ZikgPDwgNCkgfCAobSAmIDB4ZiksIDEpKSAvLyAjZjAwXG4gICAgICA6IChtID0gcmVIZXg2LmV4ZWMoZm9ybWF0KSkgPyByZ2JuKHBhcnNlSW50KG1bMV0sIDE2KSkgLy8gI2ZmMDAwMFxuICAgICAgOiAobSA9IHJlUmdiSW50ZWdlci5leGVjKGZvcm1hdCkpID8gbmV3IFJnYihtWzFdLCBtWzJdLCBtWzNdLCAxKSAvLyByZ2IoMjU1LCAwLCAwKVxuICAgICAgOiAobSA9IHJlUmdiUGVyY2VudC5leGVjKGZvcm1hdCkpID8gbmV3IFJnYihtWzFdICogMjU1IC8gMTAwLCBtWzJdICogMjU1IC8gMTAwLCBtWzNdICogMjU1IC8gMTAwLCAxKSAvLyByZ2IoMTAwJSwgMCUsIDAlKVxuICAgICAgOiAobSA9IHJlUmdiYUludGVnZXIuZXhlYyhmb3JtYXQpKSA/IHJnYmEobVsxXSwgbVsyXSwgbVszXSwgbVs0XSkgLy8gcmdiYSgyNTUsIDAsIDAsIDEpXG4gICAgICA6IChtID0gcmVSZ2JhUGVyY2VudC5leGVjKGZvcm1hdCkpID8gcmdiYShtWzFdICogMjU1IC8gMTAwLCBtWzJdICogMjU1IC8gMTAwLCBtWzNdICogMjU1IC8gMTAwLCBtWzRdKSAvLyByZ2IoMTAwJSwgMCUsIDAlLCAxKVxuICAgICAgOiAobSA9IHJlSHNsUGVyY2VudC5leGVjKGZvcm1hdCkpID8gaHNsYShtWzFdLCBtWzJdIC8gMTAwLCBtWzNdIC8gMTAwLCAxKSAvLyBoc2woMTIwLCA1MCUsIDUwJSlcbiAgICAgIDogKG0gPSByZUhzbGFQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBoc2xhKG1bMV0sIG1bMl0gLyAxMDAsIG1bM10gLyAxMDAsIG1bNF0pIC8vIGhzbGEoMTIwLCA1MCUsIDUwJSwgMSlcbiAgICAgIDogbmFtZWQuaGFzT3duUHJvcGVydHkoZm9ybWF0KSA/IHJnYm4obmFtZWRbZm9ybWF0XSlcbiAgICAgIDogZm9ybWF0ID09PSBcInRyYW5zcGFyZW50XCIgPyBuZXcgUmdiKE5hTiwgTmFOLCBOYU4sIDApXG4gICAgICA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHJnYm4obikge1xuICByZXR1cm4gbmV3IFJnYihuID4+IDE2ICYgMHhmZiwgbiA+PiA4ICYgMHhmZiwgbiAmIDB4ZmYsIDEpO1xufVxuXG5mdW5jdGlvbiByZ2JhKHIsIGcsIGIsIGEpIHtcbiAgaWYgKGEgPD0gMCkgciA9IGcgPSBiID0gTmFOO1xuICByZXR1cm4gbmV3IFJnYihyLCBnLCBiLCBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJnYkNvbnZlcnQobykge1xuICBpZiAoIShvIGluc3RhbmNlb2YgQ29sb3IpKSBvID0gY29sb3Iobyk7XG4gIGlmICghbykgcmV0dXJuIG5ldyBSZ2I7XG4gIG8gPSBvLnJnYigpO1xuICByZXR1cm4gbmV3IFJnYihvLnIsIG8uZywgby5iLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmdiKHIsIGcsIGIsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyByZ2JDb252ZXJ0KHIpIDogbmV3IFJnYihyLCBnLCBiLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZ2IociwgZywgYiwgb3BhY2l0eSkge1xuICB0aGlzLnIgPSArcjtcbiAgdGhpcy5nID0gK2c7XG4gIHRoaXMuYiA9ICtiO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKFJnYiwgcmdiLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XG4gICAgcmV0dXJuIG5ldyBSZ2IodGhpcy5yICogaywgdGhpcy5nICogaywgdGhpcy5iICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgcmV0dXJuIG5ldyBSZ2IodGhpcy5yICogaywgdGhpcy5nICogaywgdGhpcy5iICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgZGlzcGxheWFibGU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAoMCA8PSB0aGlzLnIgJiYgdGhpcy5yIDw9IDI1NSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5nICYmIHRoaXMuZyA8PSAyNTUpXG4gICAgICAgICYmICgwIDw9IHRoaXMuYiAmJiB0aGlzLmIgPD0gMjU1KVxuICAgICAgICAmJiAoMCA8PSB0aGlzLm9wYWNpdHkgJiYgdGhpcy5vcGFjaXR5IDw9IDEpO1xuICB9LFxuICBoZXg6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIiNcIiArIGhleCh0aGlzLnIpICsgaGV4KHRoaXMuZykgKyBoZXgodGhpcy5iKTtcbiAgfSxcbiAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhID0gdGhpcy5vcGFjaXR5OyBhID0gaXNOYU4oYSkgPyAxIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgYSkpO1xuICAgIHJldHVybiAoYSA9PT0gMSA/IFwicmdiKFwiIDogXCJyZ2JhKFwiKVxuICAgICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLnIpIHx8IDApKSArIFwiLCBcIlxuICAgICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLmcpIHx8IDApKSArIFwiLCBcIlxuICAgICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLmIpIHx8IDApKVxuICAgICAgICArIChhID09PSAxID8gXCIpXCIgOiBcIiwgXCIgKyBhICsgXCIpXCIpO1xuICB9XG59KSk7XG5cbmZ1bmN0aW9uIGhleCh2YWx1ZSkge1xuICB2YWx1ZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh2YWx1ZSkgfHwgMCkpO1xuICByZXR1cm4gKHZhbHVlIDwgMTYgPyBcIjBcIiA6IFwiXCIpICsgdmFsdWUudG9TdHJpbmcoMTYpO1xufVxuXG5mdW5jdGlvbiBoc2xhKGgsIHMsIGwsIGEpIHtcbiAgaWYgKGEgPD0gMCkgaCA9IHMgPSBsID0gTmFOO1xuICBlbHNlIGlmIChsIDw9IDAgfHwgbCA+PSAxKSBoID0gcyA9IE5hTjtcbiAgZWxzZSBpZiAocyA8PSAwKSBoID0gTmFOO1xuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhzbENvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG5ldyBIc2woby5oLCBvLnMsIG8ubCwgby5vcGFjaXR5KTtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIENvbG9yKSkgbyA9IGNvbG9yKG8pO1xuICBpZiAoIW8pIHJldHVybiBuZXcgSHNsO1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG87XG4gIG8gPSBvLnJnYigpO1xuICB2YXIgciA9IG8uciAvIDI1NSxcbiAgICAgIGcgPSBvLmcgLyAyNTUsXG4gICAgICBiID0gby5iIC8gMjU1LFxuICAgICAgbWluID0gTWF0aC5taW4ociwgZywgYiksXG4gICAgICBtYXggPSBNYXRoLm1heChyLCBnLCBiKSxcbiAgICAgIGggPSBOYU4sXG4gICAgICBzID0gbWF4IC0gbWluLFxuICAgICAgbCA9IChtYXggKyBtaW4pIC8gMjtcbiAgaWYgKHMpIHtcbiAgICBpZiAociA9PT0gbWF4KSBoID0gKGcgLSBiKSAvIHMgKyAoZyA8IGIpICogNjtcbiAgICBlbHNlIGlmIChnID09PSBtYXgpIGggPSAoYiAtIHIpIC8gcyArIDI7XG4gICAgZWxzZSBoID0gKHIgLSBnKSAvIHMgKyA0O1xuICAgIHMgLz0gbCA8IDAuNSA/IG1heCArIG1pbiA6IDIgLSBtYXggLSBtaW47XG4gICAgaCAqPSA2MDtcbiAgfSBlbHNlIHtcbiAgICBzID0gbCA+IDAgJiYgbCA8IDEgPyAwIDogaDtcbiAgfVxuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHNsKGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoc2xDb252ZXJ0KGgpIDogbmV3IEhzbChoLCBzLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmZ1bmN0aW9uIEhzbChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLnMgPSArcztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoSHNsLCBoc2wsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IEhzbCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgcmV0dXJuIG5ldyBIc2wodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGggPSB0aGlzLmggJSAzNjAgKyAodGhpcy5oIDwgMCkgKiAzNjAsXG4gICAgICAgIHMgPSBpc05hTihoKSB8fCBpc05hTih0aGlzLnMpID8gMCA6IHRoaXMucyxcbiAgICAgICAgbCA9IHRoaXMubCxcbiAgICAgICAgbTIgPSBsICsgKGwgPCAwLjUgPyBsIDogMSAtIGwpICogcyxcbiAgICAgICAgbTEgPSAyICogbCAtIG0yO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgaHNsMnJnYihoID49IDI0MCA/IGggLSAyNDAgOiBoICsgMTIwLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoIDwgMTIwID8gaCArIDI0MCA6IGggLSAxMjAsIG0xLCBtMiksXG4gICAgICB0aGlzLm9wYWNpdHlcbiAgICApO1xuICB9LFxuICBkaXNwbGF5YWJsZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICgwIDw9IHRoaXMucyAmJiB0aGlzLnMgPD0gMSB8fCBpc05hTih0aGlzLnMpKVxuICAgICAgICAmJiAoMCA8PSB0aGlzLmwgJiYgdGhpcy5sIDw9IDEpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH1cbn0pKTtcblxuLyogRnJvbSBGdkQgMTMuMzcsIENTUyBDb2xvciBNb2R1bGUgTGV2ZWwgMyAqL1xuZnVuY3Rpb24gaHNsMnJnYihoLCBtMSwgbTIpIHtcbiAgcmV0dXJuIChoIDwgNjAgPyBtMSArIChtMiAtIG0xKSAqIGggLyA2MFxuICAgICAgOiBoIDwgMTgwID8gbTJcbiAgICAgIDogaCA8IDI0MCA/IG0xICsgKG0yIC0gbTEpICogKDI0MCAtIGgpIC8gNjBcbiAgICAgIDogbTEpICogMjU1O1xufVxuIiwiZXhwb3J0IHZhciBkZWcycmFkID0gTWF0aC5QSSAvIDE4MDtcbmV4cG9ydCB2YXIgcmFkMmRlZyA9IDE4MCAvIE1hdGguUEk7XG4iLCJpbXBvcnQgZGVmaW5lLCB7ZXh0ZW5kfSBmcm9tIFwiLi9kZWZpbmVcIjtcbmltcG9ydCB7Q29sb3IsIHJnYkNvbnZlcnQsIFJnYn0gZnJvbSBcIi4vY29sb3JcIjtcbmltcG9ydCB7ZGVnMnJhZCwgcmFkMmRlZ30gZnJvbSBcIi4vbWF0aFwiO1xuXG4vLyBodHRwczovL2JldGEub2JzZXJ2YWJsZWhxLmNvbS9AbWJvc3RvY2svbGFiLWFuZC1yZ2JcbnZhciBLID0gMTgsXG4gICAgWG4gPSAwLjk2NDIyLFxuICAgIFluID0gMSxcbiAgICBabiA9IDAuODI1MjEsXG4gICAgdDAgPSA0IC8gMjksXG4gICAgdDEgPSA2IC8gMjksXG4gICAgdDIgPSAzICogdDEgKiB0MSxcbiAgICB0MyA9IHQxICogdDEgKiB0MTtcblxuZnVuY3Rpb24gbGFiQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgTGFiKSByZXR1cm4gbmV3IExhYihvLmwsIG8uYSwgby5iLCBvLm9wYWNpdHkpO1xuICBpZiAobyBpbnN0YW5jZW9mIEhjbCkge1xuICAgIGlmIChpc05hTihvLmgpKSByZXR1cm4gbmV3IExhYihvLmwsIDAsIDAsIG8ub3BhY2l0eSk7XG4gICAgdmFyIGggPSBvLmggKiBkZWcycmFkO1xuICAgIHJldHVybiBuZXcgTGFiKG8ubCwgTWF0aC5jb3MoaCkgKiBvLmMsIE1hdGguc2luKGgpICogby5jLCBvLm9wYWNpdHkpO1xuICB9XG4gIGlmICghKG8gaW5zdGFuY2VvZiBSZ2IpKSBvID0gcmdiQ29udmVydChvKTtcbiAgdmFyIHIgPSByZ2IybHJnYihvLnIpLFxuICAgICAgZyA9IHJnYjJscmdiKG8uZyksXG4gICAgICBiID0gcmdiMmxyZ2Ioby5iKSxcbiAgICAgIHkgPSB4eXoybGFiKCgwLjIyMjUwNDUgKiByICsgMC43MTY4Nzg2ICogZyArIDAuMDYwNjE2OSAqIGIpIC8gWW4pLCB4LCB6O1xuICBpZiAociA9PT0gZyAmJiBnID09PSBiKSB4ID0geiA9IHk7IGVsc2Uge1xuICAgIHggPSB4eXoybGFiKCgwLjQzNjA3NDcgKiByICsgMC4zODUwNjQ5ICogZyArIDAuMTQzMDgwNCAqIGIpIC8gWG4pO1xuICAgIHogPSB4eXoybGFiKCgwLjAxMzkzMjIgKiByICsgMC4wOTcxMDQ1ICogZyArIDAuNzE0MTczMyAqIGIpIC8gWm4pO1xuICB9XG4gIHJldHVybiBuZXcgTGFiKDExNiAqIHkgLSAxNiwgNTAwICogKHggLSB5KSwgMjAwICogKHkgLSB6KSwgby5vcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdyYXkobCwgb3BhY2l0eSkge1xuICByZXR1cm4gbmV3IExhYihsLCAwLCAwLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxhYihsLCBhLCBiLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gbGFiQ29udmVydChsKSA6IG5ldyBMYWIobCwgYSwgYiwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTGFiKGwsIGEsIGIsIG9wYWNpdHkpIHtcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMuYSA9ICthO1xuICB0aGlzLmIgPSArYjtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShMYWIsIGxhYiwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIG5ldyBMYWIodGhpcy5sICsgSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMuYSwgdGhpcy5iLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IExhYih0aGlzLmwgLSBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5hLCB0aGlzLmIsIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHkgPSAodGhpcy5sICsgMTYpIC8gMTE2LFxuICAgICAgICB4ID0gaXNOYU4odGhpcy5hKSA/IHkgOiB5ICsgdGhpcy5hIC8gNTAwLFxuICAgICAgICB6ID0gaXNOYU4odGhpcy5iKSA/IHkgOiB5IC0gdGhpcy5iIC8gMjAwO1xuICAgIHggPSBYbiAqIGxhYjJ4eXooeCk7XG4gICAgeSA9IFluICogbGFiMnh5eih5KTtcbiAgICB6ID0gWm4gKiBsYWIyeHl6KHopO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgbHJnYjJyZ2IoIDMuMTMzODU2MSAqIHggLSAxLjYxNjg2NjcgKiB5IC0gMC40OTA2MTQ2ICogeiksXG4gICAgICBscmdiMnJnYigtMC45Nzg3Njg0ICogeCArIDEuOTE2MTQxNSAqIHkgKyAwLjAzMzQ1NDAgKiB6KSxcbiAgICAgIGxyZ2IycmdiKCAwLjA3MTk0NTMgKiB4IC0gMC4yMjg5OTE0ICogeSArIDEuNDA1MjQyNyAqIHopLFxuICAgICAgdGhpcy5vcGFjaXR5XG4gICAgKTtcbiAgfVxufSkpO1xuXG5mdW5jdGlvbiB4eXoybGFiKHQpIHtcbiAgcmV0dXJuIHQgPiB0MyA/IE1hdGgucG93KHQsIDEgLyAzKSA6IHQgLyB0MiArIHQwO1xufVxuXG5mdW5jdGlvbiBsYWIyeHl6KHQpIHtcbiAgcmV0dXJuIHQgPiB0MSA/IHQgKiB0ICogdCA6IHQyICogKHQgLSB0MCk7XG59XG5cbmZ1bmN0aW9uIGxyZ2IycmdiKHgpIHtcbiAgcmV0dXJuIDI1NSAqICh4IDw9IDAuMDAzMTMwOCA/IDEyLjkyICogeCA6IDEuMDU1ICogTWF0aC5wb3coeCwgMSAvIDIuNCkgLSAwLjA1NSk7XG59XG5cbmZ1bmN0aW9uIHJnYjJscmdiKHgpIHtcbiAgcmV0dXJuICh4IC89IDI1NSkgPD0gMC4wNDA0NSA/IHggLyAxMi45MiA6IE1hdGgucG93KCh4ICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG59XG5cbmZ1bmN0aW9uIGhjbENvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIEhjbCkgcmV0dXJuIG5ldyBIY2woby5oLCBvLmMsIG8ubCwgby5vcGFjaXR5KTtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIExhYikpIG8gPSBsYWJDb252ZXJ0KG8pO1xuICBpZiAoby5hID09PSAwICYmIG8uYiA9PT0gMCkgcmV0dXJuIG5ldyBIY2woTmFOLCAwLCBvLmwsIG8ub3BhY2l0eSk7XG4gIHZhciBoID0gTWF0aC5hdGFuMihvLmIsIG8uYSkgKiByYWQyZGVnO1xuICByZXR1cm4gbmV3IEhjbChoIDwgMCA/IGggKyAzNjAgOiBoLCBNYXRoLnNxcnQoby5hICogby5hICsgby5iICogby5iKSwgby5sLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGNoKGwsIGMsIGgsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoY2xDb252ZXJ0KGwpIDogbmV3IEhjbChoLCBjLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoY2woaCwgYywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhjbENvbnZlcnQoaCkgOiBuZXcgSGNsKGgsIGMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhjbChoLCBjLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLmMgPSArYztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoSGNsLCBoY2wsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIHJldHVybiBuZXcgSGNsKHRoaXMuaCwgdGhpcy5jLCB0aGlzLmwgKyBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIG5ldyBIY2wodGhpcy5oLCB0aGlzLmMsIHRoaXMubCAtIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBsYWJDb252ZXJ0KHRoaXMpLnJnYigpO1xuICB9XG59KSk7XG4iLCJpbXBvcnQgZGVmaW5lLCB7ZXh0ZW5kfSBmcm9tIFwiLi9kZWZpbmVcIjtcbmltcG9ydCB7Q29sb3IsIHJnYkNvbnZlcnQsIFJnYiwgZGFya2VyLCBicmlnaHRlcn0gZnJvbSBcIi4vY29sb3JcIjtcbmltcG9ydCB7ZGVnMnJhZCwgcmFkMmRlZ30gZnJvbSBcIi4vbWF0aFwiO1xuXG52YXIgQSA9IC0wLjE0ODYxLFxuICAgIEIgPSArMS43ODI3NyxcbiAgICBDID0gLTAuMjkyMjcsXG4gICAgRCA9IC0wLjkwNjQ5LFxuICAgIEUgPSArMS45NzI5NCxcbiAgICBFRCA9IEUgKiBELFxuICAgIEVCID0gRSAqIEIsXG4gICAgQkNfREEgPSBCICogQyAtIEQgKiBBO1xuXG5mdW5jdGlvbiBjdWJlaGVsaXhDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBDdWJlaGVsaXgpIHJldHVybiBuZXcgQ3ViZWhlbGl4KG8uaCwgby5zLCBvLmwsIG8ub3BhY2l0eSk7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBSZ2IpKSBvID0gcmdiQ29udmVydChvKTtcbiAgdmFyIHIgPSBvLnIgLyAyNTUsXG4gICAgICBnID0gby5nIC8gMjU1LFxuICAgICAgYiA9IG8uYiAvIDI1NSxcbiAgICAgIGwgPSAoQkNfREEgKiBiICsgRUQgKiByIC0gRUIgKiBnKSAvIChCQ19EQSArIEVEIC0gRUIpLFxuICAgICAgYmwgPSBiIC0gbCxcbiAgICAgIGsgPSAoRSAqIChnIC0gbCkgLSBDICogYmwpIC8gRCxcbiAgICAgIHMgPSBNYXRoLnNxcnQoayAqIGsgKyBibCAqIGJsKSAvIChFICogbCAqICgxIC0gbCkpLCAvLyBOYU4gaWYgbD0wIG9yIGw9MVxuICAgICAgaCA9IHMgPyBNYXRoLmF0YW4yKGssIGJsKSAqIHJhZDJkZWcgLSAxMjAgOiBOYU47XG4gIHJldHVybiBuZXcgQ3ViZWhlbGl4KGggPCAwID8gaCArIDM2MCA6IGgsIHMsIGwsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGN1YmVoZWxpeChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gY3ViZWhlbGl4Q29udmVydChoKSA6IG5ldyBDdWJlaGVsaXgoaCwgcywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ3ViZWhlbGl4KGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgdGhpcy5oID0gK2g7XG4gIHRoaXMucyA9ICtzO1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShDdWJlaGVsaXgsIGN1YmVoZWxpeCwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGJyaWdodGVyIDogTWF0aC5wb3coYnJpZ2h0ZXIsIGspO1xuICAgIHJldHVybiBuZXcgQ3ViZWhlbGl4KHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IEN1YmVoZWxpeCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaCA9IGlzTmFOKHRoaXMuaCkgPyAwIDogKHRoaXMuaCArIDEyMCkgKiBkZWcycmFkLFxuICAgICAgICBsID0gK3RoaXMubCxcbiAgICAgICAgYSA9IGlzTmFOKHRoaXMucykgPyAwIDogdGhpcy5zICogbCAqICgxIC0gbCksXG4gICAgICAgIGNvc2ggPSBNYXRoLmNvcyhoKSxcbiAgICAgICAgc2luaCA9IE1hdGguc2luKGgpO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgMjU1ICogKGwgKyBhICogKEEgKiBjb3NoICsgQiAqIHNpbmgpKSxcbiAgICAgIDI1NSAqIChsICsgYSAqIChDICogY29zaCArIEQgKiBzaW5oKSksXG4gICAgICAyNTUgKiAobCArIGEgKiAoRSAqIGNvc2gpKSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH1cbn0pKTtcbiIsImV4cG9ydCBmdW5jdGlvbiBiYXNpcyh0MSwgdjAsIHYxLCB2MiwgdjMpIHtcbiAgdmFyIHQyID0gdDEgKiB0MSwgdDMgPSB0MiAqIHQxO1xuICByZXR1cm4gKCgxIC0gMyAqIHQxICsgMyAqIHQyIC0gdDMpICogdjBcbiAgICAgICsgKDQgLSA2ICogdDIgKyAzICogdDMpICogdjFcbiAgICAgICsgKDEgKyAzICogdDEgKyAzICogdDIgLSAzICogdDMpICogdjJcbiAgICAgICsgdDMgKiB2MykgLyA2O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoIC0gMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IHQgPD0gMCA/ICh0ID0gMCkgOiB0ID49IDEgPyAodCA9IDEsIG4gLSAxKSA6IE1hdGguZmxvb3IodCAqIG4pLFxuICAgICAgICB2MSA9IHZhbHVlc1tpXSxcbiAgICAgICAgdjIgPSB2YWx1ZXNbaSArIDFdLFxuICAgICAgICB2MCA9IGkgPiAwID8gdmFsdWVzW2kgLSAxXSA6IDIgKiB2MSAtIHYyLFxuICAgICAgICB2MyA9IGkgPCBuIC0gMSA/IHZhbHVlc1tpICsgMl0gOiAyICogdjIgLSB2MTtcbiAgICByZXR1cm4gYmFzaXMoKHQgLSBpIC8gbikgKiBuLCB2MCwgdjEsIHYyLCB2Myk7XG4gIH07XG59XG4iLCJpbXBvcnQge2Jhc2lzfSBmcm9tIFwiLi9iYXNpc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gTWF0aC5mbG9vcigoKHQgJT0gMSkgPCAwID8gKyt0IDogdCkgKiBuKSxcbiAgICAgICAgdjAgPSB2YWx1ZXNbKGkgKyBuIC0gMSkgJSBuXSxcbiAgICAgICAgdjEgPSB2YWx1ZXNbaSAlIG5dLFxuICAgICAgICB2MiA9IHZhbHVlc1soaSArIDEpICUgbl0sXG4gICAgICAgIHYzID0gdmFsdWVzWyhpICsgMikgJSBuXTtcbiAgICByZXR1cm4gYmFzaXMoKHQgLSBpIC8gbikgKiBuLCB2MCwgdjEsIHYyLCB2Myk7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuXG5mdW5jdGlvbiBsaW5lYXIoYSwgZCkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBhICsgdCAqIGQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGV4cG9uZW50aWFsKGEsIGIsIHkpIHtcbiAgcmV0dXJuIGEgPSBNYXRoLnBvdyhhLCB5KSwgYiA9IE1hdGgucG93KGIsIHkpIC0gYSwgeSA9IDEgLyB5LCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucG93KGEgKyB0ICogYiwgeSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBodWUoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkID4gMTgwIHx8IGQgPCAtMTgwID8gZCAtIDM2MCAqIE1hdGgucm91bmQoZCAvIDM2MCkgOiBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2FtbWEoeSkge1xuICByZXR1cm4gKHkgPSAreSkgPT09IDEgPyBub2dhbW1hIDogZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBiIC0gYSA/IGV4cG9uZW50aWFsKGEsIGIsIHkpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vZ2FtbWEoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuIiwiaW1wb3J0IHtyZ2IgYXMgY29sb3JSZ2J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGJhc2lzIGZyb20gXCIuL2Jhc2lzXCI7XG5pbXBvcnQgYmFzaXNDbG9zZWQgZnJvbSBcIi4vYmFzaXNDbG9zZWRcIjtcbmltcG9ydCBub2dhbW1hLCB7Z2FtbWF9IGZyb20gXCIuL2NvbG9yXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiByZ2JHYW1tYSh5KSB7XG4gIHZhciBjb2xvciA9IGdhbW1hKHkpO1xuXG4gIGZ1bmN0aW9uIHJnYihzdGFydCwgZW5kKSB7XG4gICAgdmFyIHIgPSBjb2xvcigoc3RhcnQgPSBjb2xvclJnYihzdGFydCkpLnIsIChlbmQgPSBjb2xvclJnYihlbmQpKS5yKSxcbiAgICAgICAgZyA9IGNvbG9yKHN0YXJ0LmcsIGVuZC5nKSxcbiAgICAgICAgYiA9IGNvbG9yKHN0YXJ0LmIsIGVuZC5iKSxcbiAgICAgICAgb3BhY2l0eSA9IG5vZ2FtbWEoc3RhcnQub3BhY2l0eSwgZW5kLm9wYWNpdHkpO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBzdGFydC5yID0gcih0KTtcbiAgICAgIHN0YXJ0LmcgPSBnKHQpO1xuICAgICAgc3RhcnQuYiA9IGIodCk7XG4gICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICAgIHJldHVybiBzdGFydCArIFwiXCI7XG4gICAgfTtcbiAgfVxuXG4gIHJnYi5nYW1tYSA9IHJnYkdhbW1hO1xuXG4gIHJldHVybiByZ2I7XG59KSgxKTtcblxuZnVuY3Rpb24gcmdiU3BsaW5lKHNwbGluZSkge1xuICByZXR1cm4gZnVuY3Rpb24oY29sb3JzKSB7XG4gICAgdmFyIG4gPSBjb2xvcnMubGVuZ3RoLFxuICAgICAgICByID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBnID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBiID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBpLCBjb2xvcjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBjb2xvciA9IGNvbG9yUmdiKGNvbG9yc1tpXSk7XG4gICAgICByW2ldID0gY29sb3IuciB8fCAwO1xuICAgICAgZ1tpXSA9IGNvbG9yLmcgfHwgMDtcbiAgICAgIGJbaV0gPSBjb2xvci5iIHx8IDA7XG4gICAgfVxuICAgIHIgPSBzcGxpbmUocik7XG4gICAgZyA9IHNwbGluZShnKTtcbiAgICBiID0gc3BsaW5lKGIpO1xuICAgIGNvbG9yLm9wYWNpdHkgPSAxO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBjb2xvci5yID0gcih0KTtcbiAgICAgIGNvbG9yLmcgPSBnKHQpO1xuICAgICAgY29sb3IuYiA9IGIodCk7XG4gICAgICByZXR1cm4gY29sb3IgKyBcIlwiO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCB2YXIgcmdiQmFzaXMgPSByZ2JTcGxpbmUoYmFzaXMpO1xuZXhwb3J0IHZhciByZ2JCYXNpc0Nsb3NlZCA9IHJnYlNwbGluZShiYXNpc0Nsb3NlZCk7XG4iLCJpbXBvcnQgdmFsdWUgZnJvbSBcIi4vdmFsdWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgbmIgPSBiID8gYi5sZW5ndGggOiAwLFxuICAgICAgbmEgPSBhID8gTWF0aC5taW4obmIsIGEubGVuZ3RoKSA6IDAsXG4gICAgICB4ID0gbmV3IEFycmF5KG5hKSxcbiAgICAgIGMgPSBuZXcgQXJyYXkobmIpLFxuICAgICAgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgbmE7ICsraSkgeFtpXSA9IHZhbHVlKGFbaV0sIGJbaV0pO1xuICBmb3IgKDsgaSA8IG5iOyArK2kpIGNbaV0gPSBiW2ldO1xuXG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG5hOyArK2kpIGNbaV0gPSB4W2ldKHQpO1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgZCA9IG5ldyBEYXRlO1xuICByZXR1cm4gYSA9ICthLCBiIC09IGEsIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gZC5zZXRUaW1lKGEgKyBiICogdCksIGQ7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhID0gK2EsIGIgLT0gYSwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBhICsgYiAqIHQ7XG4gIH07XG59XG4iLCJpbXBvcnQgdmFsdWUgZnJvbSBcIi4vdmFsdWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgaSA9IHt9LFxuICAgICAgYyA9IHt9LFxuICAgICAgaztcblxuICBpZiAoYSA9PT0gbnVsbCB8fCB0eXBlb2YgYSAhPT0gXCJvYmplY3RcIikgYSA9IHt9O1xuICBpZiAoYiA9PT0gbnVsbCB8fCB0eXBlb2YgYiAhPT0gXCJvYmplY3RcIikgYiA9IHt9O1xuXG4gIGZvciAoayBpbiBiKSB7XG4gICAgaWYgKGsgaW4gYSkge1xuICAgICAgaVtrXSA9IHZhbHVlKGFba10sIGJba10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjW2tdID0gYltrXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGZvciAoayBpbiBpKSBjW2tdID0gaVtrXSh0KTtcbiAgICByZXR1cm4gYztcbiAgfTtcbn1cbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyXCI7XG5cbnZhciByZUEgPSAvWy0rXT8oPzpcXGQrXFwuP1xcZCp8XFwuP1xcZCspKD86W2VFXVstK10/XFxkKyk/L2csXG4gICAgcmVCID0gbmV3IFJlZ0V4cChyZUEuc291cmNlLCBcImdcIik7XG5cbmZ1bmN0aW9uIHplcm8oYikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGI7XG4gIH07XG59XG5cbmZ1bmN0aW9uIG9uZShiKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGIodCkgKyBcIlwiO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBiaSA9IHJlQS5sYXN0SW5kZXggPSByZUIubGFzdEluZGV4ID0gMCwgLy8gc2NhbiBpbmRleCBmb3IgbmV4dCBudW1iZXIgaW4gYlxuICAgICAgYW0sIC8vIGN1cnJlbnQgbWF0Y2ggaW4gYVxuICAgICAgYm0sIC8vIGN1cnJlbnQgbWF0Y2ggaW4gYlxuICAgICAgYnMsIC8vIHN0cmluZyBwcmVjZWRpbmcgY3VycmVudCBudW1iZXIgaW4gYiwgaWYgYW55XG4gICAgICBpID0gLTEsIC8vIGluZGV4IGluIHNcbiAgICAgIHMgPSBbXSwgLy8gc3RyaW5nIGNvbnN0YW50cyBhbmQgcGxhY2Vob2xkZXJzXG4gICAgICBxID0gW107IC8vIG51bWJlciBpbnRlcnBvbGF0b3JzXG5cbiAgLy8gQ29lcmNlIGlucHV0cyB0byBzdHJpbmdzLlxuICBhID0gYSArIFwiXCIsIGIgPSBiICsgXCJcIjtcblxuICAvLyBJbnRlcnBvbGF0ZSBwYWlycyBvZiBudW1iZXJzIGluIGEgJiBiLlxuICB3aGlsZSAoKGFtID0gcmVBLmV4ZWMoYSkpXG4gICAgICAmJiAoYm0gPSByZUIuZXhlYyhiKSkpIHtcbiAgICBpZiAoKGJzID0gYm0uaW5kZXgpID4gYmkpIHsgLy8gYSBzdHJpbmcgcHJlY2VkZXMgdGhlIG5leHQgbnVtYmVyIGluIGJcbiAgICAgIGJzID0gYi5zbGljZShiaSwgYnMpO1xuICAgICAgaWYgKHNbaV0pIHNbaV0gKz0gYnM7IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgICBlbHNlIHNbKytpXSA9IGJzO1xuICAgIH1cbiAgICBpZiAoKGFtID0gYW1bMF0pID09PSAoYm0gPSBibVswXSkpIHsgLy8gbnVtYmVycyBpbiBhICYgYiBtYXRjaFxuICAgICAgaWYgKHNbaV0pIHNbaV0gKz0gYm07IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgICBlbHNlIHNbKytpXSA9IGJtO1xuICAgIH0gZWxzZSB7IC8vIGludGVycG9sYXRlIG5vbi1tYXRjaGluZyBudW1iZXJzXG4gICAgICBzWysraV0gPSBudWxsO1xuICAgICAgcS5wdXNoKHtpOiBpLCB4OiBudW1iZXIoYW0sIGJtKX0pO1xuICAgIH1cbiAgICBiaSA9IHJlQi5sYXN0SW5kZXg7XG4gIH1cblxuICAvLyBBZGQgcmVtYWlucyBvZiBiLlxuICBpZiAoYmkgPCBiLmxlbmd0aCkge1xuICAgIGJzID0gYi5zbGljZShiaSk7XG4gICAgaWYgKHNbaV0pIHNbaV0gKz0gYnM7IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgZWxzZSBzWysraV0gPSBicztcbiAgfVxuXG4gIC8vIFNwZWNpYWwgb3B0aW1pemF0aW9uIGZvciBvbmx5IGEgc2luZ2xlIG1hdGNoLlxuICAvLyBPdGhlcndpc2UsIGludGVycG9sYXRlIGVhY2ggb2YgdGhlIG51bWJlcnMgYW5kIHJlam9pbiB0aGUgc3RyaW5nLlxuICByZXR1cm4gcy5sZW5ndGggPCAyID8gKHFbMF1cbiAgICAgID8gb25lKHFbMF0ueClcbiAgICAgIDogemVybyhiKSlcbiAgICAgIDogKGIgPSBxLmxlbmd0aCwgZnVuY3Rpb24odCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBvOyBpIDwgYjsgKytpKSBzWyhvID0gcVtpXSkuaV0gPSBvLngodCk7XG4gICAgICAgICAgcmV0dXJuIHMuam9pbihcIlwiKTtcbiAgICAgICAgfSk7XG59XG4iLCJpbXBvcnQge2NvbG9yfSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCByZ2IgZnJvbSBcIi4vcmdiXCI7XG5pbXBvcnQgYXJyYXkgZnJvbSBcIi4vYXJyYXlcIjtcbmltcG9ydCBkYXRlIGZyb20gXCIuL2RhdGVcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyXCI7XG5pbXBvcnQgb2JqZWN0IGZyb20gXCIuL29iamVjdFwiO1xuaW1wb3J0IHN0cmluZyBmcm9tIFwiLi9zdHJpbmdcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciB0ID0gdHlwZW9mIGIsIGM7XG4gIHJldHVybiBiID09IG51bGwgfHwgdCA9PT0gXCJib29sZWFuXCIgPyBjb25zdGFudChiKVxuICAgICAgOiAodCA9PT0gXCJudW1iZXJcIiA/IG51bWJlclxuICAgICAgOiB0ID09PSBcInN0cmluZ1wiID8gKChjID0gY29sb3IoYikpID8gKGIgPSBjLCByZ2IpIDogc3RyaW5nKVxuICAgICAgOiBiIGluc3RhbmNlb2YgY29sb3IgPyByZ2JcbiAgICAgIDogYiBpbnN0YW5jZW9mIERhdGUgPyBkYXRlXG4gICAgICA6IEFycmF5LmlzQXJyYXkoYikgPyBhcnJheVxuICAgICAgOiB0eXBlb2YgYi52YWx1ZU9mICE9PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIGIudG9TdHJpbmcgIT09IFwiZnVuY3Rpb25cIiB8fCBpc05hTihiKSA/IG9iamVjdFxuICAgICAgOiBudW1iZXIpKGEsIGIpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSA9ICthLCBiIC09IGEsIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChhICsgYiAqIHQpO1xuICB9O1xufVxuIiwidmFyIGRlZ3JlZXMgPSAxODAgLyBNYXRoLlBJO1xuXG5leHBvcnQgdmFyIGlkZW50aXR5ID0ge1xuICB0cmFuc2xhdGVYOiAwLFxuICB0cmFuc2xhdGVZOiAwLFxuICByb3RhdGU6IDAsXG4gIHNrZXdYOiAwLFxuICBzY2FsZVg6IDEsXG4gIHNjYWxlWTogMVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYiwgYywgZCwgZSwgZikge1xuICB2YXIgc2NhbGVYLCBzY2FsZVksIHNrZXdYO1xuICBpZiAoc2NhbGVYID0gTWF0aC5zcXJ0KGEgKiBhICsgYiAqIGIpKSBhIC89IHNjYWxlWCwgYiAvPSBzY2FsZVg7XG4gIGlmIChza2V3WCA9IGEgKiBjICsgYiAqIGQpIGMgLT0gYSAqIHNrZXdYLCBkIC09IGIgKiBza2V3WDtcbiAgaWYgKHNjYWxlWSA9IE1hdGguc3FydChjICogYyArIGQgKiBkKSkgYyAvPSBzY2FsZVksIGQgLz0gc2NhbGVZLCBza2V3WCAvPSBzY2FsZVk7XG4gIGlmIChhICogZCA8IGIgKiBjKSBhID0gLWEsIGIgPSAtYiwgc2tld1ggPSAtc2tld1gsIHNjYWxlWCA9IC1zY2FsZVg7XG4gIHJldHVybiB7XG4gICAgdHJhbnNsYXRlWDogZSxcbiAgICB0cmFuc2xhdGVZOiBmLFxuICAgIHJvdGF0ZTogTWF0aC5hdGFuMihiLCBhKSAqIGRlZ3JlZXMsXG4gICAgc2tld1g6IE1hdGguYXRhbihza2V3WCkgKiBkZWdyZWVzLFxuICAgIHNjYWxlWDogc2NhbGVYLFxuICAgIHNjYWxlWTogc2NhbGVZXG4gIH07XG59XG4iLCJpbXBvcnQgZGVjb21wb3NlLCB7aWRlbnRpdHl9IGZyb20gXCIuL2RlY29tcG9zZVwiO1xuXG52YXIgY3NzTm9kZSxcbiAgICBjc3NSb290LFxuICAgIGNzc1ZpZXcsXG4gICAgc3ZnTm9kZTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ3NzKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gXCJub25lXCIpIHJldHVybiBpZGVudGl0eTtcbiAgaWYgKCFjc3NOb2RlKSBjc3NOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIkRJVlwiKSwgY3NzUm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgY3NzVmlldyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3O1xuICBjc3NOb2RlLnN0eWxlLnRyYW5zZm9ybSA9IHZhbHVlO1xuICB2YWx1ZSA9IGNzc1ZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShjc3NSb290LmFwcGVuZENoaWxkKGNzc05vZGUpLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKFwidHJhbnNmb3JtXCIpO1xuICBjc3NSb290LnJlbW92ZUNoaWxkKGNzc05vZGUpO1xuICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDcsIC0xKS5zcGxpdChcIixcIik7XG4gIHJldHVybiBkZWNvbXBvc2UoK3ZhbHVlWzBdLCArdmFsdWVbMV0sICt2YWx1ZVsyXSwgK3ZhbHVlWzNdLCArdmFsdWVbNF0sICt2YWx1ZVs1XSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN2Zyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGlkZW50aXR5O1xuICBpZiAoIXN2Z05vZGUpIHN2Z05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImdcIik7XG4gIHN2Z05vZGUuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsIHZhbHVlKTtcbiAgaWYgKCEodmFsdWUgPSBzdmdOb2RlLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpKSByZXR1cm4gaWRlbnRpdHk7XG4gIHZhbHVlID0gdmFsdWUubWF0cml4O1xuICByZXR1cm4gZGVjb21wb3NlKHZhbHVlLmEsIHZhbHVlLmIsIHZhbHVlLmMsIHZhbHVlLmQsIHZhbHVlLmUsIHZhbHVlLmYpO1xufVxuIiwiaW1wb3J0IG51bWJlciBmcm9tIFwiLi4vbnVtYmVyXCI7XG5pbXBvcnQge3BhcnNlQ3NzLCBwYXJzZVN2Z30gZnJvbSBcIi4vcGFyc2VcIjtcblxuZnVuY3Rpb24gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2UsIHB4Q29tbWEsIHB4UGFyZW4sIGRlZ1BhcmVuKSB7XG5cbiAgZnVuY3Rpb24gcG9wKHMpIHtcbiAgICByZXR1cm4gcy5sZW5ndGggPyBzLnBvcCgpICsgXCIgXCIgOiBcIlwiO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNsYXRlKHhhLCB5YSwgeGIsIHliLCBzLCBxKSB7XG4gICAgaWYgKHhhICE9PSB4YiB8fCB5YSAhPT0geWIpIHtcbiAgICAgIHZhciBpID0gcy5wdXNoKFwidHJhbnNsYXRlKFwiLCBudWxsLCBweENvbW1hLCBudWxsLCBweFBhcmVuKTtcbiAgICAgIHEucHVzaCh7aTogaSAtIDQsIHg6IG51bWJlcih4YSwgeGIpfSwge2k6IGkgLSAyLCB4OiBudW1iZXIoeWEsIHliKX0pO1xuICAgIH0gZWxzZSBpZiAoeGIgfHwgeWIpIHtcbiAgICAgIHMucHVzaChcInRyYW5zbGF0ZShcIiArIHhiICsgcHhDb21tYSArIHliICsgcHhQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcm90YXRlKGEsIGIsIHMsIHEpIHtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgaWYgKGEgLSBiID4gMTgwKSBiICs9IDM2MDsgZWxzZSBpZiAoYiAtIGEgPiAxODApIGEgKz0gMzYwOyAvLyBzaG9ydGVzdCBwYXRoXG4gICAgICBxLnB1c2goe2k6IHMucHVzaChwb3AocykgKyBcInJvdGF0ZShcIiwgbnVsbCwgZGVnUGFyZW4pIC0gMiwgeDogbnVtYmVyKGEsIGIpfSk7XG4gICAgfSBlbHNlIGlmIChiKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJyb3RhdGUoXCIgKyBiICsgZGVnUGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNrZXdYKGEsIGIsIHMsIHEpIHtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgcS5wdXNoKHtpOiBzLnB1c2gocG9wKHMpICsgXCJza2V3WChcIiwgbnVsbCwgZGVnUGFyZW4pIC0gMiwgeDogbnVtYmVyKGEsIGIpfSk7XG4gICAgfSBlbHNlIGlmIChiKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJza2V3WChcIiArIGIgKyBkZWdQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeGEsIHlhLCB4YiwgeWIsIHMsIHEpIHtcbiAgICBpZiAoeGEgIT09IHhiIHx8IHlhICE9PSB5Yikge1xuICAgICAgdmFyIGkgPSBzLnB1c2gocG9wKHMpICsgXCJzY2FsZShcIiwgbnVsbCwgXCIsXCIsIG51bGwsIFwiKVwiKTtcbiAgICAgIHEucHVzaCh7aTogaSAtIDQsIHg6IG51bWJlcih4YSwgeGIpfSwge2k6IGkgLSAyLCB4OiBudW1iZXIoeWEsIHliKX0pO1xuICAgIH0gZWxzZSBpZiAoeGIgIT09IDEgfHwgeWIgIT09IDEpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInNjYWxlKFwiICsgeGIgKyBcIixcIiArIHliICsgXCIpXCIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbihhLCBiKSB7XG4gICAgdmFyIHMgPSBbXSwgLy8gc3RyaW5nIGNvbnN0YW50cyBhbmQgcGxhY2Vob2xkZXJzXG4gICAgICAgIHEgPSBbXTsgLy8gbnVtYmVyIGludGVycG9sYXRvcnNcbiAgICBhID0gcGFyc2UoYSksIGIgPSBwYXJzZShiKTtcbiAgICB0cmFuc2xhdGUoYS50cmFuc2xhdGVYLCBhLnRyYW5zbGF0ZVksIGIudHJhbnNsYXRlWCwgYi50cmFuc2xhdGVZLCBzLCBxKTtcbiAgICByb3RhdGUoYS5yb3RhdGUsIGIucm90YXRlLCBzLCBxKTtcbiAgICBza2V3WChhLnNrZXdYLCBiLnNrZXdYLCBzLCBxKTtcbiAgICBzY2FsZShhLnNjYWxlWCwgYS5zY2FsZVksIGIuc2NhbGVYLCBiLnNjYWxlWSwgcywgcSk7XG4gICAgYSA9IGIgPSBudWxsOyAvLyBnY1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgaSA9IC0xLCBuID0gcS5sZW5ndGgsIG87XG4gICAgICB3aGlsZSAoKytpIDwgbikgc1sobyA9IHFbaV0pLmldID0gby54KHQpO1xuICAgICAgcmV0dXJuIHMuam9pbihcIlwiKTtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgdmFyIGludGVycG9sYXRlVHJhbnNmb3JtQ3NzID0gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2VDc3MsIFwicHgsIFwiLCBcInB4KVwiLCBcImRlZylcIik7XG5leHBvcnQgdmFyIGludGVycG9sYXRlVHJhbnNmb3JtU3ZnID0gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2VTdmcsIFwiLCBcIiwgXCIpXCIsIFwiKVwiKTtcbiIsImltcG9ydCB7Y3ViZWhlbGl4IGFzIGNvbG9yQ3ViZWhlbGl4fSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCBjb2xvciwge2h1ZX0gZnJvbSBcIi4vY29sb3JcIjtcblxuZnVuY3Rpb24gY3ViZWhlbGl4KGh1ZSkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGN1YmVoZWxpeEdhbW1hKHkpIHtcbiAgICB5ID0gK3k7XG5cbiAgICBmdW5jdGlvbiBjdWJlaGVsaXgoc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIGggPSBodWUoKHN0YXJ0ID0gY29sb3JDdWJlaGVsaXgoc3RhcnQpKS5oLCAoZW5kID0gY29sb3JDdWJlaGVsaXgoZW5kKSkuaCksXG4gICAgICAgICAgcyA9IGNvbG9yKHN0YXJ0LnMsIGVuZC5zKSxcbiAgICAgICAgICBsID0gY29sb3Ioc3RhcnQubCwgZW5kLmwpLFxuICAgICAgICAgIG9wYWNpdHkgPSBjb2xvcihzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgICBzdGFydC5oID0gaCh0KTtcbiAgICAgICAgc3RhcnQucyA9IHModCk7XG4gICAgICAgIHN0YXJ0LmwgPSBsKE1hdGgucG93KHQsIHkpKTtcbiAgICAgICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgICAgIHJldHVybiBzdGFydCArIFwiXCI7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGN1YmVoZWxpeC5nYW1tYSA9IGN1YmVoZWxpeEdhbW1hO1xuXG4gICAgcmV0dXJuIGN1YmVoZWxpeDtcbiAgfSkoMSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGN1YmVoZWxpeChodWUpO1xuZXhwb3J0IHZhciBjdWJlaGVsaXhMb25nID0gY3ViZWhlbGl4KGNvbG9yKTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gK3g7XG59XG4iLCJpbXBvcnQge2Jpc2VjdH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2ludGVycG9sYXRlIGFzIGludGVycG9sYXRlVmFsdWUsIGludGVycG9sYXRlUm91bmR9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHttYXAsIHNsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlclwiO1xuXG52YXIgdW5pdCA9IFswLCAxXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlaW50ZXJwb2xhdGVMaW5lYXIoYSwgYikge1xuICByZXR1cm4gKGIgLT0gKGEgPSArYSkpXG4gICAgICA/IGZ1bmN0aW9uKHgpIHsgcmV0dXJuICh4IC0gYSkgLyBiOyB9XG4gICAgICA6IGNvbnN0YW50KGIpO1xufVxuXG5mdW5jdGlvbiBkZWludGVycG9sYXRlQ2xhbXAoZGVpbnRlcnBvbGF0ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oYSwgYikge1xuICAgIHZhciBkID0gZGVpbnRlcnBvbGF0ZShhID0gK2EsIGIgPSArYik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHggPD0gYSA/IDAgOiB4ID49IGIgPyAxIDogZCh4KTsgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVpbnRlcnBvbGF0ZUNsYW1wKHJlaW50ZXJwb2xhdGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGEsIGIpIHtcbiAgICB2YXIgciA9IHJlaW50ZXJwb2xhdGUoYSA9ICthLCBiID0gK2IpO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7IHJldHVybiB0IDw9IDAgPyBhIDogdCA+PSAxID8gYiA6IHIodCk7IH07XG4gIH07XG59XG5cbmZ1bmN0aW9uIGJpbWFwKGRvbWFpbiwgcmFuZ2UsIGRlaW50ZXJwb2xhdGUsIHJlaW50ZXJwb2xhdGUpIHtcbiAgdmFyIGQwID0gZG9tYWluWzBdLCBkMSA9IGRvbWFpblsxXSwgcjAgPSByYW5nZVswXSwgcjEgPSByYW5nZVsxXTtcbiAgaWYgKGQxIDwgZDApIGQwID0gZGVpbnRlcnBvbGF0ZShkMSwgZDApLCByMCA9IHJlaW50ZXJwb2xhdGUocjEsIHIwKTtcbiAgZWxzZSBkMCA9IGRlaW50ZXJwb2xhdGUoZDAsIGQxKSwgcjAgPSByZWludGVycG9sYXRlKHIwLCByMSk7XG4gIHJldHVybiBmdW5jdGlvbih4KSB7IHJldHVybiByMChkMCh4KSk7IH07XG59XG5cbmZ1bmN0aW9uIHBvbHltYXAoZG9tYWluLCByYW5nZSwgZGVpbnRlcnBvbGF0ZSwgcmVpbnRlcnBvbGF0ZSkge1xuICB2YXIgaiA9IE1hdGgubWluKGRvbWFpbi5sZW5ndGgsIHJhbmdlLmxlbmd0aCkgLSAxLFxuICAgICAgZCA9IG5ldyBBcnJheShqKSxcbiAgICAgIHIgPSBuZXcgQXJyYXkoaiksXG4gICAgICBpID0gLTE7XG5cbiAgLy8gUmV2ZXJzZSBkZXNjZW5kaW5nIGRvbWFpbnMuXG4gIGlmIChkb21haW5bal0gPCBkb21haW5bMF0pIHtcbiAgICBkb21haW4gPSBkb21haW4uc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgcmFuZ2UgPSByYW5nZS5zbGljZSgpLnJldmVyc2UoKTtcbiAgfVxuXG4gIHdoaWxlICgrK2kgPCBqKSB7XG4gICAgZFtpXSA9IGRlaW50ZXJwb2xhdGUoZG9tYWluW2ldLCBkb21haW5baSArIDFdKTtcbiAgICByW2ldID0gcmVpbnRlcnBvbGF0ZShyYW5nZVtpXSwgcmFuZ2VbaSArIDFdKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbih4KSB7XG4gICAgdmFyIGkgPSBiaXNlY3QoZG9tYWluLCB4LCAxLCBqKSAtIDE7XG4gICAgcmV0dXJuIHJbaV0oZFtpXSh4KSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KHNvdXJjZSwgdGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXRcbiAgICAgIC5kb21haW4oc291cmNlLmRvbWFpbigpKVxuICAgICAgLnJhbmdlKHNvdXJjZS5yYW5nZSgpKVxuICAgICAgLmludGVycG9sYXRlKHNvdXJjZS5pbnRlcnBvbGF0ZSgpKVxuICAgICAgLmNsYW1wKHNvdXJjZS5jbGFtcCgpKTtcbn1cblxuLy8gZGVpbnRlcnBvbGF0ZShhLCBiKSh4KSB0YWtlcyBhIGRvbWFpbiB2YWx1ZSB4IGluIFthLGJdIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciB0IGluIFswLDFdLlxuLy8gcmVpbnRlcnBvbGF0ZShhLCBiKSh0KSB0YWtlcyBhIHBhcmFtZXRlciB0IGluIFswLDFdIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGRvbWFpbiB2YWx1ZSB4IGluIFthLGJdLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGludW91cyhkZWludGVycG9sYXRlLCByZWludGVycG9sYXRlKSB7XG4gIHZhciBkb21haW4gPSB1bml0LFxuICAgICAgcmFuZ2UgPSB1bml0LFxuICAgICAgaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZVZhbHVlLFxuICAgICAgY2xhbXAgPSBmYWxzZSxcbiAgICAgIHBpZWNld2lzZSxcbiAgICAgIG91dHB1dCxcbiAgICAgIGlucHV0O1xuXG4gIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgcGllY2V3aXNlID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKSA+IDIgPyBwb2x5bWFwIDogYmltYXA7XG4gICAgb3V0cHV0ID0gaW5wdXQgPSBudWxsO1xuICAgIHJldHVybiBzY2FsZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICByZXR1cm4gKG91dHB1dCB8fCAob3V0cHV0ID0gcGllY2V3aXNlKGRvbWFpbiwgcmFuZ2UsIGNsYW1wID8gZGVpbnRlcnBvbGF0ZUNsYW1wKGRlaW50ZXJwb2xhdGUpIDogZGVpbnRlcnBvbGF0ZSwgaW50ZXJwb2xhdGUpKSkoK3gpO1xuICB9XG5cbiAgc2NhbGUuaW52ZXJ0ID0gZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiAoaW5wdXQgfHwgKGlucHV0ID0gcGllY2V3aXNlKHJhbmdlLCBkb21haW4sIGRlaW50ZXJwb2xhdGVMaW5lYXIsIGNsYW1wID8gcmVpbnRlcnBvbGF0ZUNsYW1wKHJlaW50ZXJwb2xhdGUpIDogcmVpbnRlcnBvbGF0ZSkpKSgreSk7XG4gIH07XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRvbWFpbiA9IG1hcC5jYWxsKF8sIG51bWJlciksIHJlc2NhbGUoKSkgOiBkb21haW4uc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IHNsaWNlLmNhbGwoXyksIHJlc2NhbGUoKSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlUm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIHJhbmdlID0gc2xpY2UuY2FsbChfKSwgaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZVJvdW5kLCByZXNjYWxlKCk7XG4gIH07XG5cbiAgc2NhbGUuY2xhbXAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2xhbXAgPSAhIV8sIHJlc2NhbGUoKSkgOiBjbGFtcDtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0ZSA9IF8sIHJlc2NhbGUoKSkgOiBpbnRlcnBvbGF0ZTtcbiAgfTtcblxuICByZXR1cm4gcmVzY2FsZSgpO1xufVxuIiwiLy8gQ29tcHV0ZXMgdGhlIGRlY2ltYWwgY29lZmZpY2llbnQgYW5kIGV4cG9uZW50IG9mIHRoZSBzcGVjaWZpZWQgbnVtYmVyIHggd2l0aFxuLy8gc2lnbmlmaWNhbnQgZGlnaXRzIHAsIHdoZXJlIHggaXMgcG9zaXRpdmUgYW5kIHAgaXMgaW4gWzEsIDIxXSBvciB1bmRlZmluZWQuXG4vLyBGb3IgZXhhbXBsZSwgZm9ybWF0RGVjaW1hbCgxLjIzKSByZXR1cm5zIFtcIjEyM1wiLCAwXS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHApIHtcbiAgaWYgKChpID0gKHggPSBwID8geC50b0V4cG9uZW50aWFsKHAgLSAxKSA6IHgudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKFwiZVwiKSkgPCAwKSByZXR1cm4gbnVsbDsgLy8gTmFOLCDCsUluZmluaXR5XG4gIHZhciBpLCBjb2VmZmljaWVudCA9IHguc2xpY2UoMCwgaSk7XG5cbiAgLy8gVGhlIHN0cmluZyByZXR1cm5lZCBieSB0b0V4cG9uZW50aWFsIGVpdGhlciBoYXMgdGhlIGZvcm0gXFxkXFwuXFxkK2VbLStdXFxkK1xuICAvLyAoZS5nLiwgMS4yZSszKSBvciB0aGUgZm9ybSBcXGRlWy0rXVxcZCsgKGUuZy4sIDFlKzMpLlxuICByZXR1cm4gW1xuICAgIGNvZWZmaWNpZW50Lmxlbmd0aCA+IDEgPyBjb2VmZmljaWVudFswXSArIGNvZWZmaWNpZW50LnNsaWNlKDIpIDogY29lZmZpY2llbnQsXG4gICAgK3guc2xpY2UoaSArIDEpXG4gIF07XG59XG4iLCJpbXBvcnQgZm9ybWF0RGVjaW1hbCBmcm9tIFwiLi9mb3JtYXREZWNpbWFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHggPSBmb3JtYXREZWNpbWFsKE1hdGguYWJzKHgpKSwgeCA/IHhbMV0gOiBOYU47XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihncm91cGluZywgdGhvdXNhbmRzKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgd2lkdGgpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmxlbmd0aCxcbiAgICAgICAgdCA9IFtdLFxuICAgICAgICBqID0gMCxcbiAgICAgICAgZyA9IGdyb3VwaW5nWzBdLFxuICAgICAgICBsZW5ndGggPSAwO1xuXG4gICAgd2hpbGUgKGkgPiAwICYmIGcgPiAwKSB7XG4gICAgICBpZiAobGVuZ3RoICsgZyArIDEgPiB3aWR0aCkgZyA9IE1hdGgubWF4KDEsIHdpZHRoIC0gbGVuZ3RoKTtcbiAgICAgIHQucHVzaCh2YWx1ZS5zdWJzdHJpbmcoaSAtPSBnLCBpICsgZykpO1xuICAgICAgaWYgKChsZW5ndGggKz0gZyArIDEpID4gd2lkdGgpIGJyZWFrO1xuICAgICAgZyA9IGdyb3VwaW5nW2ogPSAoaiArIDEpICUgZ3JvdXBpbmcubGVuZ3RoXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdC5yZXZlcnNlKCkuam9pbih0aG91c2FuZHMpO1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obnVtZXJhbHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1swLTldL2csIGZ1bmN0aW9uKGkpIHtcbiAgICAgIHJldHVybiBudW1lcmFsc1sraV07XG4gICAgfSk7XG4gIH07XG59XG4iLCIvLyBbW2ZpbGxdYWxpZ25dW3NpZ25dW3N5bWJvbF1bMF1bd2lkdGhdWyxdWy5wcmVjaXNpb25dW35dW3R5cGVdXG52YXIgcmUgPSAvXig/OiguKT8oWzw+PV5dKSk/KFsrXFwtKCBdKT8oWyQjXSk/KDApPyhcXGQrKT8oLCk/KFxcLlxcZCspPyh+KT8oW2EteiVdKT8kL2k7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpIHtcbiAgcmV0dXJuIG5ldyBGb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKTtcbn1cblxuZm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZSA9IEZvcm1hdFNwZWNpZmllci5wcm90b3R5cGU7IC8vIGluc3RhbmNlb2ZcblxuZnVuY3Rpb24gRm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcikge1xuICBpZiAoIShtYXRjaCA9IHJlLmV4ZWMoc3BlY2lmaWVyKSkpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZm9ybWF0OiBcIiArIHNwZWNpZmllcik7XG4gIHZhciBtYXRjaDtcbiAgdGhpcy5maWxsID0gbWF0Y2hbMV0gfHwgXCIgXCI7XG4gIHRoaXMuYWxpZ24gPSBtYXRjaFsyXSB8fCBcIj5cIjtcbiAgdGhpcy5zaWduID0gbWF0Y2hbM10gfHwgXCItXCI7XG4gIHRoaXMuc3ltYm9sID0gbWF0Y2hbNF0gfHwgXCJcIjtcbiAgdGhpcy56ZXJvID0gISFtYXRjaFs1XTtcbiAgdGhpcy53aWR0aCA9IG1hdGNoWzZdICYmICttYXRjaFs2XTtcbiAgdGhpcy5jb21tYSA9ICEhbWF0Y2hbN107XG4gIHRoaXMucHJlY2lzaW9uID0gbWF0Y2hbOF0gJiYgK21hdGNoWzhdLnNsaWNlKDEpO1xuICB0aGlzLnRyaW0gPSAhIW1hdGNoWzldO1xuICB0aGlzLnR5cGUgPSBtYXRjaFsxMF0gfHwgXCJcIjtcbn1cblxuRm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5maWxsXG4gICAgICArIHRoaXMuYWxpZ25cbiAgICAgICsgdGhpcy5zaWduXG4gICAgICArIHRoaXMuc3ltYm9sXG4gICAgICArICh0aGlzLnplcm8gPyBcIjBcIiA6IFwiXCIpXG4gICAgICArICh0aGlzLndpZHRoID09IG51bGwgPyBcIlwiIDogTWF0aC5tYXgoMSwgdGhpcy53aWR0aCB8IDApKVxuICAgICAgKyAodGhpcy5jb21tYSA/IFwiLFwiIDogXCJcIilcbiAgICAgICsgKHRoaXMucHJlY2lzaW9uID09IG51bGwgPyBcIlwiIDogXCIuXCIgKyBNYXRoLm1heCgwLCB0aGlzLnByZWNpc2lvbiB8IDApKVxuICAgICAgKyAodGhpcy50cmltID8gXCJ+XCIgOiBcIlwiKVxuICAgICAgKyB0aGlzLnR5cGU7XG59O1xuIiwiLy8gVHJpbXMgaW5zaWduaWZpY2FudCB6ZXJvcywgZS5nLiwgcmVwbGFjZXMgMS4yMDAwayB3aXRoIDEuMmsuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzKSB7XG4gIG91dDogZm9yICh2YXIgbiA9IHMubGVuZ3RoLCBpID0gMSwgaTAgPSAtMSwgaTE7IGkgPCBuOyArK2kpIHtcbiAgICBzd2l0Y2ggKHNbaV0pIHtcbiAgICAgIGNhc2UgXCIuXCI6IGkwID0gaTEgPSBpOyBicmVhaztcbiAgICAgIGNhc2UgXCIwXCI6IGlmIChpMCA9PT0gMCkgaTAgPSBpOyBpMSA9IGk7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogaWYgKGkwID4gMCkgeyBpZiAoIStzW2ldKSBicmVhayBvdXQ7IGkwID0gMDsgfSBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGkwID4gMCA/IHMuc2xpY2UoMCwgaTApICsgcy5zbGljZShpMSArIDEpIDogcztcbn1cbiIsImltcG9ydCBmb3JtYXREZWNpbWFsIGZyb20gXCIuL2Zvcm1hdERlY2ltYWxcIjtcblxuZXhwb3J0IHZhciBwcmVmaXhFeHBvbmVudDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWwoeCwgcCk7XG4gIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICB2YXIgY29lZmZpY2llbnQgPSBkWzBdLFxuICAgICAgZXhwb25lbnQgPSBkWzFdLFxuICAgICAgaSA9IGV4cG9uZW50IC0gKHByZWZpeEV4cG9uZW50ID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQgLyAzKSkpICogMykgKyAxLFxuICAgICAgbiA9IGNvZWZmaWNpZW50Lmxlbmd0aDtcbiAgcmV0dXJuIGkgPT09IG4gPyBjb2VmZmljaWVudFxuICAgICAgOiBpID4gbiA/IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGkgLSBuICsgMSkuam9pbihcIjBcIilcbiAgICAgIDogaSA+IDAgPyBjb2VmZmljaWVudC5zbGljZSgwLCBpKSArIFwiLlwiICsgY29lZmZpY2llbnQuc2xpY2UoaSlcbiAgICAgIDogXCIwLlwiICsgbmV3IEFycmF5KDEgLSBpKS5qb2luKFwiMFwiKSArIGZvcm1hdERlY2ltYWwoeCwgTWF0aC5tYXgoMCwgcCArIGkgLSAxKSlbMF07IC8vIGxlc3MgdGhhbiAxeSFcbn1cbiIsImltcG9ydCBmb3JtYXREZWNpbWFsIGZyb20gXCIuL2Zvcm1hdERlY2ltYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWwoeCwgcCk7XG4gIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICB2YXIgY29lZmZpY2llbnQgPSBkWzBdLFxuICAgICAgZXhwb25lbnQgPSBkWzFdO1xuICByZXR1cm4gZXhwb25lbnQgPCAwID8gXCIwLlwiICsgbmV3IEFycmF5KC1leHBvbmVudCkuam9pbihcIjBcIikgKyBjb2VmZmljaWVudFxuICAgICAgOiBjb2VmZmljaWVudC5sZW5ndGggPiBleHBvbmVudCArIDEgPyBjb2VmZmljaWVudC5zbGljZSgwLCBleHBvbmVudCArIDEpICsgXCIuXCIgKyBjb2VmZmljaWVudC5zbGljZShleHBvbmVudCArIDEpXG4gICAgICA6IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGV4cG9uZW50IC0gY29lZmZpY2llbnQubGVuZ3RoICsgMikuam9pbihcIjBcIik7XG59XG4iLCJpbXBvcnQgZm9ybWF0UHJlZml4QXV0byBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvXCI7XG5pbXBvcnQgZm9ybWF0Um91bmRlZCBmcm9tIFwiLi9mb3JtYXRSb3VuZGVkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXCIlXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuICh4ICogMTAwKS50b0ZpeGVkKHApOyB9LFxuICBcImJcIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygyKTsgfSxcbiAgXCJjXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHggKyBcIlwiOyB9LFxuICBcImRcIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygxMCk7IH0sXG4gIFwiZVwiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiB4LnRvRXhwb25lbnRpYWwocCk7IH0sXG4gIFwiZlwiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiB4LnRvRml4ZWQocCk7IH0sXG4gIFwiZ1wiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiB4LnRvUHJlY2lzaW9uKHApOyB9LFxuICBcIm9cIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZyg4KTsgfSxcbiAgXCJwXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIGZvcm1hdFJvdW5kZWQoeCAqIDEwMCwgcCk7IH0sXG4gIFwiclwiOiBmb3JtYXRSb3VuZGVkLFxuICBcInNcIjogZm9ybWF0UHJlZml4QXV0byxcbiAgXCJYXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7IH0sXG4gIFwieFwiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDE2KTsgfVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHg7XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnRcIjtcbmltcG9ydCBmb3JtYXRHcm91cCBmcm9tIFwiLi9mb3JtYXRHcm91cFwiO1xuaW1wb3J0IGZvcm1hdE51bWVyYWxzIGZyb20gXCIuL2Zvcm1hdE51bWVyYWxzXCI7XG5pbXBvcnQgZm9ybWF0U3BlY2lmaWVyIGZyb20gXCIuL2Zvcm1hdFNwZWNpZmllclwiO1xuaW1wb3J0IGZvcm1hdFRyaW0gZnJvbSBcIi4vZm9ybWF0VHJpbVwiO1xuaW1wb3J0IGZvcm1hdFR5cGVzIGZyb20gXCIuL2Zvcm1hdFR5cGVzXCI7XG5pbXBvcnQge3ByZWZpeEV4cG9uZW50fSBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvXCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHlcIjtcblxudmFyIHByZWZpeGVzID0gW1wieVwiLFwielwiLFwiYVwiLFwiZlwiLFwicFwiLFwiblwiLFwiwrVcIixcIm1cIixcIlwiLFwia1wiLFwiTVwiLFwiR1wiLFwiVFwiLFwiUFwiLFwiRVwiLFwiWlwiLFwiWVwiXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obG9jYWxlKSB7XG4gIHZhciBncm91cCA9IGxvY2FsZS5ncm91cGluZyAmJiBsb2NhbGUudGhvdXNhbmRzID8gZm9ybWF0R3JvdXAobG9jYWxlLmdyb3VwaW5nLCBsb2NhbGUudGhvdXNhbmRzKSA6IGlkZW50aXR5LFxuICAgICAgY3VycmVuY3kgPSBsb2NhbGUuY3VycmVuY3ksXG4gICAgICBkZWNpbWFsID0gbG9jYWxlLmRlY2ltYWwsXG4gICAgICBudW1lcmFscyA9IGxvY2FsZS5udW1lcmFscyA/IGZvcm1hdE51bWVyYWxzKGxvY2FsZS5udW1lcmFscykgOiBpZGVudGl0eSxcbiAgICAgIHBlcmNlbnQgPSBsb2NhbGUucGVyY2VudCB8fCBcIiVcIjtcblxuICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyKSB7XG4gICAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcik7XG5cbiAgICB2YXIgZmlsbCA9IHNwZWNpZmllci5maWxsLFxuICAgICAgICBhbGlnbiA9IHNwZWNpZmllci5hbGlnbixcbiAgICAgICAgc2lnbiA9IHNwZWNpZmllci5zaWduLFxuICAgICAgICBzeW1ib2wgPSBzcGVjaWZpZXIuc3ltYm9sLFxuICAgICAgICB6ZXJvID0gc3BlY2lmaWVyLnplcm8sXG4gICAgICAgIHdpZHRoID0gc3BlY2lmaWVyLndpZHRoLFxuICAgICAgICBjb21tYSA9IHNwZWNpZmllci5jb21tYSxcbiAgICAgICAgcHJlY2lzaW9uID0gc3BlY2lmaWVyLnByZWNpc2lvbixcbiAgICAgICAgdHJpbSA9IHNwZWNpZmllci50cmltLFxuICAgICAgICB0eXBlID0gc3BlY2lmaWVyLnR5cGU7XG5cbiAgICAvLyBUaGUgXCJuXCIgdHlwZSBpcyBhbiBhbGlhcyBmb3IgXCIsZ1wiLlxuICAgIGlmICh0eXBlID09PSBcIm5cIikgY29tbWEgPSB0cnVlLCB0eXBlID0gXCJnXCI7XG5cbiAgICAvLyBUaGUgXCJcIiB0eXBlLCBhbmQgYW55IGludmFsaWQgdHlwZSwgaXMgYW4gYWxpYXMgZm9yIFwiLjEyfmdcIi5cbiAgICBlbHNlIGlmICghZm9ybWF0VHlwZXNbdHlwZV0pIHByZWNpc2lvbiA9PSBudWxsICYmIChwcmVjaXNpb24gPSAxMiksIHRyaW0gPSB0cnVlLCB0eXBlID0gXCJnXCI7XG5cbiAgICAvLyBJZiB6ZXJvIGZpbGwgaXMgc3BlY2lmaWVkLCBwYWRkaW5nIGdvZXMgYWZ0ZXIgc2lnbiBhbmQgYmVmb3JlIGRpZ2l0cy5cbiAgICBpZiAoemVybyB8fCAoZmlsbCA9PT0gXCIwXCIgJiYgYWxpZ24gPT09IFwiPVwiKSkgemVybyA9IHRydWUsIGZpbGwgPSBcIjBcIiwgYWxpZ24gPSBcIj1cIjtcblxuICAgIC8vIENvbXB1dGUgdGhlIHByZWZpeCBhbmQgc3VmZml4LlxuICAgIC8vIEZvciBTSS1wcmVmaXgsIHRoZSBzdWZmaXggaXMgbGF6aWx5IGNvbXB1dGVkLlxuICAgIHZhciBwcmVmaXggPSBzeW1ib2wgPT09IFwiJFwiID8gY3VycmVuY3lbMF0gOiBzeW1ib2wgPT09IFwiI1wiICYmIC9bYm94WF0vLnRlc3QodHlwZSkgPyBcIjBcIiArIHR5cGUudG9Mb3dlckNhc2UoKSA6IFwiXCIsXG4gICAgICAgIHN1ZmZpeCA9IHN5bWJvbCA9PT0gXCIkXCIgPyBjdXJyZW5jeVsxXSA6IC9bJXBdLy50ZXN0KHR5cGUpID8gcGVyY2VudCA6IFwiXCI7XG5cbiAgICAvLyBXaGF0IGZvcm1hdCBmdW5jdGlvbiBzaG91bGQgd2UgdXNlP1xuICAgIC8vIElzIHRoaXMgYW4gaW50ZWdlciB0eXBlP1xuICAgIC8vIENhbiB0aGlzIHR5cGUgZ2VuZXJhdGUgZXhwb25lbnRpYWwgbm90YXRpb24/XG4gICAgdmFyIGZvcm1hdFR5cGUgPSBmb3JtYXRUeXBlc1t0eXBlXSxcbiAgICAgICAgbWF5YmVTdWZmaXggPSAvW2RlZmdwcnMlXS8udGVzdCh0eXBlKTtcblxuICAgIC8vIFNldCB0aGUgZGVmYXVsdCBwcmVjaXNpb24gaWYgbm90IHNwZWNpZmllZCxcbiAgICAvLyBvciBjbGFtcCB0aGUgc3BlY2lmaWVkIHByZWNpc2lvbiB0byB0aGUgc3VwcG9ydGVkIHJhbmdlLlxuICAgIC8vIEZvciBzaWduaWZpY2FudCBwcmVjaXNpb24sIGl0IG11c3QgYmUgaW4gWzEsIDIxXS5cbiAgICAvLyBGb3IgZml4ZWQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFswLCAyMF0uXG4gICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uID09IG51bGwgPyA2XG4gICAgICAgIDogL1tncHJzXS8udGVzdCh0eXBlKSA/IE1hdGgubWF4KDEsIE1hdGgubWluKDIxLCBwcmVjaXNpb24pKVxuICAgICAgICA6IE1hdGgubWF4KDAsIE1hdGgubWluKDIwLCBwcmVjaXNpb24pKTtcblxuICAgIGZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSkge1xuICAgICAgdmFyIHZhbHVlUHJlZml4ID0gcHJlZml4LFxuICAgICAgICAgIHZhbHVlU3VmZml4ID0gc3VmZml4LFxuICAgICAgICAgIGksIG4sIGM7XG5cbiAgICAgIGlmICh0eXBlID09PSBcImNcIikge1xuICAgICAgICB2YWx1ZVN1ZmZpeCA9IGZvcm1hdFR5cGUodmFsdWUpICsgdmFsdWVTdWZmaXg7XG4gICAgICAgIHZhbHVlID0gXCJcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gK3ZhbHVlO1xuXG4gICAgICAgIC8vIFBlcmZvcm0gdGhlIGluaXRpYWwgZm9ybWF0dGluZy5cbiAgICAgICAgdmFyIHZhbHVlTmVnYXRpdmUgPSB2YWx1ZSA8IDA7XG4gICAgICAgIHZhbHVlID0gZm9ybWF0VHlwZShNYXRoLmFicyh2YWx1ZSksIHByZWNpc2lvbik7XG5cbiAgICAgICAgLy8gVHJpbSBpbnNpZ25pZmljYW50IHplcm9zLlxuICAgICAgICBpZiAodHJpbSkgdmFsdWUgPSBmb3JtYXRUcmltKHZhbHVlKTtcblxuICAgICAgICAvLyBJZiBhIG5lZ2F0aXZlIHZhbHVlIHJvdW5kcyB0byB6ZXJvIGR1cmluZyBmb3JtYXR0aW5nLCB0cmVhdCBhcyBwb3NpdGl2ZS5cbiAgICAgICAgaWYgKHZhbHVlTmVnYXRpdmUgJiYgK3ZhbHVlID09PSAwKSB2YWx1ZU5lZ2F0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguXG4gICAgICAgIHZhbHVlUHJlZml4ID0gKHZhbHVlTmVnYXRpdmUgPyAoc2lnbiA9PT0gXCIoXCIgPyBzaWduIDogXCItXCIpIDogc2lnbiA9PT0gXCItXCIgfHwgc2lnbiA9PT0gXCIoXCIgPyBcIlwiIDogc2lnbikgKyB2YWx1ZVByZWZpeDtcbiAgICAgICAgdmFsdWVTdWZmaXggPSAodHlwZSA9PT0gXCJzXCIgPyBwcmVmaXhlc1s4ICsgcHJlZml4RXhwb25lbnQgLyAzXSA6IFwiXCIpICsgdmFsdWVTdWZmaXggKyAodmFsdWVOZWdhdGl2ZSAmJiBzaWduID09PSBcIihcIiA/IFwiKVwiIDogXCJcIik7XG5cbiAgICAgICAgLy8gQnJlYWsgdGhlIGZvcm1hdHRlZCB2YWx1ZSBpbnRvIHRoZSBpbnRlZ2VyIOKAnHZhbHVl4oCdIHBhcnQgdGhhdCBjYW4gYmVcbiAgICAgICAgLy8gZ3JvdXBlZCwgYW5kIGZyYWN0aW9uYWwgb3IgZXhwb25lbnRpYWwg4oCcc3VmZml44oCdIHBhcnQgdGhhdCBpcyBub3QuXG4gICAgICAgIGlmIChtYXliZVN1ZmZpeCkge1xuICAgICAgICAgIGkgPSAtMSwgbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgICAgICAgaWYgKGMgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpLCA0OCA+IGMgfHwgYyA+IDU3KSB7XG4gICAgICAgICAgICAgIHZhbHVlU3VmZml4ID0gKGMgPT09IDQ2ID8gZGVjaW1hbCArIHZhbHVlLnNsaWNlKGkgKyAxKSA6IHZhbHVlLnNsaWNlKGkpKSArIHZhbHVlU3VmZml4O1xuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIG5vdCBcIjBcIiwgZ3JvdXBpbmcgaXMgYXBwbGllZCBiZWZvcmUgcGFkZGluZy5cbiAgICAgIGlmIChjb21tYSAmJiAhemVybykgdmFsdWUgPSBncm91cCh2YWx1ZSwgSW5maW5pdHkpO1xuXG4gICAgICAvLyBDb21wdXRlIHRoZSBwYWRkaW5nLlxuICAgICAgdmFyIGxlbmd0aCA9IHZhbHVlUHJlZml4Lmxlbmd0aCArIHZhbHVlLmxlbmd0aCArIHZhbHVlU3VmZml4Lmxlbmd0aCxcbiAgICAgICAgICBwYWRkaW5nID0gbGVuZ3RoIDwgd2lkdGggPyBuZXcgQXJyYXkod2lkdGggLSBsZW5ndGggKyAxKS5qb2luKGZpbGwpIDogXCJcIjtcblxuICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGFmdGVyIHBhZGRpbmcuXG4gICAgICBpZiAoY29tbWEgJiYgemVybykgdmFsdWUgPSBncm91cChwYWRkaW5nICsgdmFsdWUsIHBhZGRpbmcubGVuZ3RoID8gd2lkdGggLSB2YWx1ZVN1ZmZpeC5sZW5ndGggOiBJbmZpbml0eSksIHBhZGRpbmcgPSBcIlwiO1xuXG4gICAgICAvLyBSZWNvbnN0cnVjdCB0aGUgZmluYWwgb3V0cHV0IGJhc2VkIG9uIHRoZSBkZXNpcmVkIGFsaWdubWVudC5cbiAgICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgICAgY2FzZSBcIjxcIjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXggKyBwYWRkaW5nOyBicmVhaztcbiAgICAgICAgY2FzZSBcIj1cIjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHBhZGRpbmcgKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhaztcbiAgICAgICAgY2FzZSBcIl5cIjogdmFsdWUgPSBwYWRkaW5nLnNsaWNlKDAsIGxlbmd0aCA9IHBhZGRpbmcubGVuZ3RoID4+IDEpICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4ICsgcGFkZGluZy5zbGljZShsZW5ndGgpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDogdmFsdWUgPSBwYWRkaW5nICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bWVyYWxzKHZhbHVlKTtcbiAgICB9XG5cbiAgICBmb3JtYXQudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBzcGVjaWZpZXIgKyBcIlwiO1xuICAgIH07XG5cbiAgICByZXR1cm4gZm9ybWF0O1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UHJlZml4KHNwZWNpZmllciwgdmFsdWUpIHtcbiAgICB2YXIgZiA9IG5ld0Zvcm1hdCgoc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciksIHNwZWNpZmllci50eXBlID0gXCJmXCIsIHNwZWNpZmllcikpLFxuICAgICAgICBlID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMsXG4gICAgICAgIGsgPSBNYXRoLnBvdygxMCwgLWUpLFxuICAgICAgICBwcmVmaXggPSBwcmVmaXhlc1s4ICsgZSAvIDNdO1xuICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGYoayAqIHZhbHVlKSArIHByZWZpeDtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtYXQ6IG5ld0Zvcm1hdCxcbiAgICBmb3JtYXRQcmVmaXg6IGZvcm1hdFByZWZpeFxuICB9O1xufVxuIiwiaW1wb3J0IGZvcm1hdExvY2FsZSBmcm9tIFwiLi9sb2NhbGVcIjtcblxudmFyIGxvY2FsZTtcbmV4cG9ydCB2YXIgZm9ybWF0O1xuZXhwb3J0IHZhciBmb3JtYXRQcmVmaXg7XG5cbmRlZmF1bHRMb2NhbGUoe1xuICBkZWNpbWFsOiBcIi5cIixcbiAgdGhvdXNhbmRzOiBcIixcIixcbiAgZ3JvdXBpbmc6IFszXSxcbiAgY3VycmVuY3k6IFtcIiRcIiwgXCJcIl1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWZhdWx0TG9jYWxlKGRlZmluaXRpb24pIHtcbiAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKGRlZmluaXRpb24pO1xuICBmb3JtYXQgPSBsb2NhbGUuZm9ybWF0O1xuICBmb3JtYXRQcmVmaXggPSBsb2NhbGUuZm9ybWF0UHJlZml4O1xuICByZXR1cm4gbG9jYWxlO1xufVxuIiwiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXApIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIC1leHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xufVxuIiwiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXAsIHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCh2YWx1ZSkgLyAzKSkpICogMyAtIGV4cG9uZW50KE1hdGguYWJzKHN0ZXApKSk7XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RlcCwgbWF4KSB7XG4gIHN0ZXAgPSBNYXRoLmFicyhzdGVwKSwgbWF4ID0gTWF0aC5hYnMobWF4KSAtIHN0ZXA7XG4gIHJldHVybiBNYXRoLm1heCgwLCBleHBvbmVudChtYXgpIC0gZXhwb25lbnQoc3RlcCkpICsgMTtcbn1cbiIsImltcG9ydCB7dGlja1N0ZXB9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtmb3JtYXQsIGZvcm1hdFByZWZpeCwgZm9ybWF0U3BlY2lmaWVyLCBwcmVjaXNpb25GaXhlZCwgcHJlY2lzaW9uUHJlZml4LCBwcmVjaXNpb25Sb3VuZH0gZnJvbSBcImQzLWZvcm1hdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkb21haW4sIGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgdmFyIHN0YXJ0ID0gZG9tYWluWzBdLFxuICAgICAgc3RvcCA9IGRvbWFpbltkb21haW4ubGVuZ3RoIC0gMV0sXG4gICAgICBzdGVwID0gdGlja1N0ZXAoc3RhcnQsIHN0b3AsIGNvdW50ID09IG51bGwgPyAxMCA6IGNvdW50KSxcbiAgICAgIHByZWNpc2lvbjtcbiAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciA9PSBudWxsID8gXCIsZlwiIDogc3BlY2lmaWVyKTtcbiAgc3dpdGNoIChzcGVjaWZpZXIudHlwZSkge1xuICAgIGNhc2UgXCJzXCI6IHtcbiAgICAgIHZhciB2YWx1ZSA9IE1hdGgubWF4KE1hdGguYWJzKHN0YXJ0KSwgTWF0aC5hYnMoc3RvcCkpO1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uUHJlZml4KHN0ZXAsIHZhbHVlKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb247XG4gICAgICByZXR1cm4gZm9ybWF0UHJlZml4KHNwZWNpZmllciwgdmFsdWUpO1xuICAgIH1cbiAgICBjYXNlIFwiXCI6XG4gICAgY2FzZSBcImVcIjpcbiAgICBjYXNlIFwiZ1wiOlxuICAgIGNhc2UgXCJwXCI6XG4gICAgY2FzZSBcInJcIjoge1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uUm91bmQoc3RlcCwgTWF0aC5tYXgoTWF0aC5hYnMoc3RhcnQpLCBNYXRoLmFicyhzdG9wKSkpKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbiAtIChzcGVjaWZpZXIudHlwZSA9PT0gXCJlXCIpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgXCJmXCI6XG4gICAgY2FzZSBcIiVcIjoge1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uRml4ZWQoc3RlcCkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uIC0gKHNwZWNpZmllci50eXBlID09PSBcIiVcIikgKiAyO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBmb3JtYXQoc3BlY2lmaWVyKTtcbn1cbiIsImltcG9ydCB7dGlja3MsIHRpY2tJbmNyZW1lbnR9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZU51bWJlciBhcyByZWludGVycG9sYXRlfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7ZGVmYXVsdCBhcyBjb250aW51b3VzLCBjb3B5LCBkZWludGVycG9sYXRlTGluZWFyIGFzIGRlaW50ZXJwb2xhdGV9IGZyb20gXCIuL2NvbnRpbnVvdXNcIjtcbmltcG9ydCB0aWNrRm9ybWF0IGZyb20gXCIuL3RpY2tGb3JtYXRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmVhcmlzaChzY2FsZSkge1xuICB2YXIgZG9tYWluID0gc2NhbGUuZG9tYWluO1xuXG4gIHNjYWxlLnRpY2tzID0gZnVuY3Rpb24oY291bnQpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHJldHVybiB0aWNrcyhkWzBdLCBkW2QubGVuZ3RoIC0gMV0sIGNvdW50ID09IG51bGwgPyAxMCA6IGNvdW50KTtcbiAgfTtcblxuICBzY2FsZS50aWNrRm9ybWF0ID0gZnVuY3Rpb24oY291bnQsIHNwZWNpZmllcikge1xuICAgIHJldHVybiB0aWNrRm9ybWF0KGRvbWFpbigpLCBjb3VudCwgc3BlY2lmaWVyKTtcbiAgfTtcblxuICBzY2FsZS5uaWNlID0gZnVuY3Rpb24oY291bnQpIHtcbiAgICBpZiAoY291bnQgPT0gbnVsbCkgY291bnQgPSAxMDtcblxuICAgIHZhciBkID0gZG9tYWluKCksXG4gICAgICAgIGkwID0gMCxcbiAgICAgICAgaTEgPSBkLmxlbmd0aCAtIDEsXG4gICAgICAgIHN0YXJ0ID0gZFtpMF0sXG4gICAgICAgIHN0b3AgPSBkW2kxXSxcbiAgICAgICAgc3RlcDtcblxuICAgIGlmIChzdG9wIDwgc3RhcnQpIHtcbiAgICAgIHN0ZXAgPSBzdGFydCwgc3RhcnQgPSBzdG9wLCBzdG9wID0gc3RlcDtcbiAgICAgIHN0ZXAgPSBpMCwgaTAgPSBpMSwgaTEgPSBzdGVwO1xuICAgIH1cblxuICAgIHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCk7XG5cbiAgICBpZiAoc3RlcCA+IDApIHtcbiAgICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAvIHN0ZXApICogc3RlcDtcbiAgICAgIHN0b3AgPSBNYXRoLmNlaWwoc3RvcCAvIHN0ZXApICogc3RlcDtcbiAgICAgIHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCk7XG4gICAgfSBlbHNlIGlmIChzdGVwIDwgMCkge1xuICAgICAgc3RhcnQgPSBNYXRoLmNlaWwoc3RhcnQgKiBzdGVwKSAvIHN0ZXA7XG4gICAgICBzdG9wID0gTWF0aC5mbG9vcihzdG9wICogc3RlcCkgLyBzdGVwO1xuICAgICAgc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KTtcbiAgICB9XG5cbiAgICBpZiAoc3RlcCA+IDApIHtcbiAgICAgIGRbaTBdID0gTWF0aC5mbG9vcihzdGFydCAvIHN0ZXApICogc3RlcDtcbiAgICAgIGRbaTFdID0gTWF0aC5jZWlsKHN0b3AgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICBkb21haW4oZCk7XG4gICAgfSBlbHNlIGlmIChzdGVwIDwgMCkge1xuICAgICAgZFtpMF0gPSBNYXRoLmNlaWwoc3RhcnQgKiBzdGVwKSAvIHN0ZXA7XG4gICAgICBkW2kxXSA9IE1hdGguZmxvb3Ioc3RvcCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgIGRvbWFpbihkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2NhbGU7XG4gIH07XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaW5lYXIoKSB7XG4gIHZhciBzY2FsZSA9IGNvbnRpbnVvdXMoZGVpbnRlcnBvbGF0ZSwgcmVpbnRlcnBvbGF0ZSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBsaW5lYXIoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGxpbmVhcmlzaChzY2FsZSk7XG59XG4iLCJ2YXIgdDAgPSBuZXcgRGF0ZSxcbiAgICB0MSA9IG5ldyBEYXRlO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBuZXdJbnRlcnZhbChmbG9vcmksIG9mZnNldGksIGNvdW50LCBmaWVsZCkge1xuXG4gIGZ1bmN0aW9uIGludGVydmFsKGRhdGUpIHtcbiAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSkpLCBkYXRlO1xuICB9XG5cbiAgaW50ZXJ2YWwuZmxvb3IgPSBpbnRlcnZhbDtcblxuICBpbnRlcnZhbC5jZWlsID0gZnVuY3Rpb24oZGF0ZSkge1xuICAgIHJldHVybiBmbG9vcmkoZGF0ZSA9IG5ldyBEYXRlKGRhdGUgLSAxKSksIG9mZnNldGkoZGF0ZSwgMSksIGZsb29yaShkYXRlKSwgZGF0ZTtcbiAgfTtcblxuICBpbnRlcnZhbC5yb3VuZCA9IGZ1bmN0aW9uKGRhdGUpIHtcbiAgICB2YXIgZDAgPSBpbnRlcnZhbChkYXRlKSxcbiAgICAgICAgZDEgPSBpbnRlcnZhbC5jZWlsKGRhdGUpO1xuICAgIHJldHVybiBkYXRlIC0gZDAgPCBkMSAtIGRhdGUgPyBkMCA6IGQxO1xuICB9O1xuXG4gIGludGVydmFsLm9mZnNldCA9IGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICByZXR1cm4gb2Zmc2V0aShkYXRlID0gbmV3IERhdGUoK2RhdGUpLCBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKSksIGRhdGU7XG4gIH07XG5cbiAgaW50ZXJ2YWwucmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIHZhciByYW5nZSA9IFtdLCBwcmV2aW91cztcbiAgICBzdGFydCA9IGludGVydmFsLmNlaWwoc3RhcnQpO1xuICAgIHN0ZXAgPSBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKTtcbiAgICBpZiAoIShzdGFydCA8IHN0b3ApIHx8ICEoc3RlcCA+IDApKSByZXR1cm4gcmFuZ2U7IC8vIGFsc28gaGFuZGxlcyBJbnZhbGlkIERhdGVcbiAgICBkbyByYW5nZS5wdXNoKHByZXZpb3VzID0gbmV3IERhdGUoK3N0YXJ0KSksIG9mZnNldGkoc3RhcnQsIHN0ZXApLCBmbG9vcmkoc3RhcnQpO1xuICAgIHdoaWxlIChwcmV2aW91cyA8IHN0YXJ0ICYmIHN0YXJ0IDwgc3RvcCk7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIGludGVydmFsLmZpbHRlciA9IGZ1bmN0aW9uKHRlc3QpIHtcbiAgICByZXR1cm4gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgICAgaWYgKGRhdGUgPj0gZGF0ZSkgd2hpbGUgKGZsb29yaShkYXRlKSwgIXRlc3QoZGF0ZSkpIGRhdGUuc2V0VGltZShkYXRlIC0gMSk7XG4gICAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgICAgaWYgKGRhdGUgPj0gZGF0ZSkge1xuICAgICAgICBpZiAoc3RlcCA8IDApIHdoaWxlICgrK3N0ZXAgPD0gMCkge1xuICAgICAgICAgIHdoaWxlIChvZmZzZXRpKGRhdGUsIC0xKSwgIXRlc3QoZGF0ZSkpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbiAgICAgICAgfSBlbHNlIHdoaWxlICgtLXN0ZXAgPj0gMCkge1xuICAgICAgICAgIHdoaWxlIChvZmZzZXRpKGRhdGUsICsxKSwgIXRlc3QoZGF0ZSkpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGlmIChjb3VudCkge1xuICAgIGludGVydmFsLmNvdW50ID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgICAgdDAuc2V0VGltZSgrc3RhcnQpLCB0MS5zZXRUaW1lKCtlbmQpO1xuICAgICAgZmxvb3JpKHQwKSwgZmxvb3JpKHQxKTtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKGNvdW50KHQwLCB0MSkpO1xuICAgIH07XG5cbiAgICBpbnRlcnZhbC5ldmVyeSA9IGZ1bmN0aW9uKHN0ZXApIHtcbiAgICAgIHN0ZXAgPSBNYXRoLmZsb29yKHN0ZXApO1xuICAgICAgcmV0dXJuICFpc0Zpbml0ZShzdGVwKSB8fCAhKHN0ZXAgPiAwKSA/IG51bGxcbiAgICAgICAgICA6ICEoc3RlcCA+IDEpID8gaW50ZXJ2YWxcbiAgICAgICAgICA6IGludGVydmFsLmZpbHRlcihmaWVsZFxuICAgICAgICAgICAgICA/IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGZpZWxkKGQpICUgc3RlcCA9PT0gMDsgfVxuICAgICAgICAgICAgICA6IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGludGVydmFsLmNvdW50KDAsIGQpICUgc3RlcCA9PT0gMDsgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBpbnRlcnZhbDtcbn1cbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbFwiO1xuXG52YXIgbWlsbGlzZWNvbmQgPSBpbnRlcnZhbChmdW5jdGlvbigpIHtcbiAgLy8gbm9vcFxufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGVuZCAtIHN0YXJ0O1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbm1pbGxpc2Vjb25kLmV2ZXJ5ID0gZnVuY3Rpb24oaykge1xuICBrID0gTWF0aC5mbG9vcihrKTtcbiAgaWYgKCFpc0Zpbml0ZShrKSB8fCAhKGsgPiAwKSkgcmV0dXJuIG51bGw7XG4gIGlmICghKGsgPiAxKSkgcmV0dXJuIG1pbGxpc2Vjb25kO1xuICByZXR1cm4gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0VGltZShNYXRoLmZsb29yKGRhdGUgLyBrKSAqIGspO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGspO1xuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBrO1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1pbGxpc2Vjb25kO1xuZXhwb3J0IHZhciBtaWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZC5yYW5nZTtcbiIsImV4cG9ydCB2YXIgZHVyYXRpb25TZWNvbmQgPSAxZTM7XG5leHBvcnQgdmFyIGR1cmF0aW9uTWludXRlID0gNmU0O1xuZXhwb3J0IHZhciBkdXJhdGlvbkhvdXIgPSAzNmU1O1xuZXhwb3J0IHZhciBkdXJhdGlvbkRheSA9IDg2NGU1O1xuZXhwb3J0IHZhciBkdXJhdGlvbldlZWsgPSA2MDQ4ZTU7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25TZWNvbmR9IGZyb20gXCIuL2R1cmF0aW9uXCI7XG5cbnZhciBzZWNvbmQgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VGltZShNYXRoLmZsb29yKGRhdGUgLyBkdXJhdGlvblNlY29uZCkgKiBkdXJhdGlvblNlY29uZCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvblNlY29uZCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25TZWNvbmQ7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ1NlY29uZHMoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBzZWNvbmQ7XG5leHBvcnQgdmFyIHNlY29uZHMgPSBzZWNvbmQucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25NaW51dGV9IGZyb20gXCIuL2R1cmF0aW9uXCI7XG5cbnZhciBtaW51dGUgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VGltZShNYXRoLmZsb29yKGRhdGUgLyBkdXJhdGlvbk1pbnV0ZSkgKiBkdXJhdGlvbk1pbnV0ZSk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbk1pbnV0ZSk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25NaW51dGU7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldE1pbnV0ZXMoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBtaW51dGU7XG5leHBvcnQgdmFyIG1pbnV0ZXMgPSBtaW51dGUucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25Ib3VyLCBkdXJhdGlvbk1pbnV0ZX0gZnJvbSBcIi4vZHVyYXRpb25cIjtcblxudmFyIGhvdXIgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIHZhciBvZmZzZXQgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiBkdXJhdGlvbk1pbnV0ZSAlIGR1cmF0aW9uSG91cjtcbiAgaWYgKG9mZnNldCA8IDApIG9mZnNldCArPSBkdXJhdGlvbkhvdXI7XG4gIGRhdGUuc2V0VGltZShNYXRoLmZsb29yKCgrZGF0ZSAtIG9mZnNldCkgLyBkdXJhdGlvbkhvdXIpICogZHVyYXRpb25Ib3VyICsgb2Zmc2V0KTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uSG91cik7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25Ib3VyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRIb3VycygpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGhvdXI7XG5leHBvcnQgdmFyIGhvdXJzID0gaG91ci5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbFwiO1xuaW1wb3J0IHtkdXJhdGlvbkRheSwgZHVyYXRpb25NaW51dGV9IGZyb20gXCIuL2R1cmF0aW9uXCI7XG5cbnZhciBkYXkgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0IC0gKGVuZC5nZXRUaW1lem9uZU9mZnNldCgpIC0gc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiBkdXJhdGlvbk1pbnV0ZSkgLyBkdXJhdGlvbkRheTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0RGF0ZSgpIC0gMTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBkYXk7XG5leHBvcnQgdmFyIGRheXMgPSBkYXkucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25NaW51dGUsIGR1cmF0aW9uV2Vla30gZnJvbSBcIi4vZHVyYXRpb25cIjtcblxuZnVuY3Rpb24gd2Vla2RheShpKSB7XG4gIHJldHVybiBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gKGRhdGUuZ2V0RGF5KCkgKyA3IC0gaSkgJSA3KTtcbiAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgc3RlcCAqIDcpO1xuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCAtIChlbmQuZ2V0VGltZXpvbmVPZmZzZXQoKSAtIHN0YXJ0LmdldFRpbWV6b25lT2Zmc2V0KCkpICogZHVyYXRpb25NaW51dGUpIC8gZHVyYXRpb25XZWVrO1xuICB9KTtcbn1cblxuZXhwb3J0IHZhciBzdW5kYXkgPSB3ZWVrZGF5KDApO1xuZXhwb3J0IHZhciBtb25kYXkgPSB3ZWVrZGF5KDEpO1xuZXhwb3J0IHZhciB0dWVzZGF5ID0gd2Vla2RheSgyKTtcbmV4cG9ydCB2YXIgd2VkbmVzZGF5ID0gd2Vla2RheSgzKTtcbmV4cG9ydCB2YXIgdGh1cnNkYXkgPSB3ZWVrZGF5KDQpO1xuZXhwb3J0IHZhciBmcmlkYXkgPSB3ZWVrZGF5KDUpO1xuZXhwb3J0IHZhciBzYXR1cmRheSA9IHdlZWtkYXkoNik7XG5cbmV4cG9ydCB2YXIgc3VuZGF5cyA9IHN1bmRheS5yYW5nZTtcbmV4cG9ydCB2YXIgbW9uZGF5cyA9IG1vbmRheS5yYW5nZTtcbmV4cG9ydCB2YXIgdHVlc2RheXMgPSB0dWVzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB3ZWRuZXNkYXlzID0gd2VkbmVzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB0aHVyc2RheXMgPSB0aHVyc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgZnJpZGF5cyA9IGZyaWRheS5yYW5nZTtcbmV4cG9ydCB2YXIgc2F0dXJkYXlzID0gc2F0dXJkYXkucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcblxudmFyIG1vbnRoID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldERhdGUoMSk7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0TW9udGgoZGF0ZS5nZXRNb250aCgpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0TW9udGgoKSAtIHN0YXJ0LmdldE1vbnRoKCkgKyAoZW5kLmdldEZ1bGxZZWFyKCkgLSBzdGFydC5nZXRGdWxsWWVhcigpKSAqIDEyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRNb250aCgpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbnRoO1xuZXhwb3J0IHZhciBtb250aHMgPSBtb250aC5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbFwiO1xuXG52YXIgeWVhciA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRNb250aCgwLCAxKTtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGVuZC5nZXRGdWxsWWVhcigpIC0gc3RhcnQuZ2V0RnVsbFllYXIoKTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKTtcbn0pO1xuXG4vLyBBbiBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gZm9yIHRoaXMgc2ltcGxlIGNhc2UuXG55ZWFyLmV2ZXJ5ID0gZnVuY3Rpb24oaykge1xuICByZXR1cm4gIWlzRmluaXRlKGsgPSBNYXRoLmZsb29yKGspKSB8fCAhKGsgPiAwKSA/IG51bGwgOiBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gICAgZGF0ZS5zZXRGdWxsWWVhcihNYXRoLmZsb29yKGRhdGUuZ2V0RnVsbFllYXIoKSAvIGspICogayk7XG4gICAgZGF0ZS5zZXRNb250aCgwLCAxKTtcbiAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkgKyBzdGVwICogayk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgeWVhcjtcbmV4cG9ydCB2YXIgeWVhcnMgPSB5ZWFyLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uTWludXRlfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgdXRjTWludXRlID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ1NlY29uZHMoMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbk1pbnV0ZSk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25NaW51dGU7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ01pbnV0ZXMoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB1dGNNaW51dGU7XG5leHBvcnQgdmFyIHV0Y01pbnV0ZXMgPSB1dGNNaW51dGUucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25Ib3VyfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgdXRjSG91ciA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRVVENNaW51dGVzKDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25Ib3VyKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkhvdXI7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0hvdXJzKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgdXRjSG91cjtcbmV4cG9ydCB2YXIgdXRjSG91cnMgPSB1dGNIb3VyLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uRGF5fSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgdXRjRGF5ID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkRheTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDRGF0ZSgpIC0gMTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB1dGNEYXk7XG5leHBvcnQgdmFyIHV0Y0RheXMgPSB1dGNEYXkucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25XZWVrfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG5mdW5jdGlvbiB1dGNXZWVrZGF5KGkpIHtcbiAgcmV0dXJuIGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSAoZGF0ZS5nZXRVVENEYXkoKSArIDcgLSBpKSAlIDcpO1xuICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBzdGVwICogNyk7XG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uV2VlaztcbiAgfSk7XG59XG5cbmV4cG9ydCB2YXIgdXRjU3VuZGF5ID0gdXRjV2Vla2RheSgwKTtcbmV4cG9ydCB2YXIgdXRjTW9uZGF5ID0gdXRjV2Vla2RheSgxKTtcbmV4cG9ydCB2YXIgdXRjVHVlc2RheSA9IHV0Y1dlZWtkYXkoMik7XG5leHBvcnQgdmFyIHV0Y1dlZG5lc2RheSA9IHV0Y1dlZWtkYXkoMyk7XG5leHBvcnQgdmFyIHV0Y1RodXJzZGF5ID0gdXRjV2Vla2RheSg0KTtcbmV4cG9ydCB2YXIgdXRjRnJpZGF5ID0gdXRjV2Vla2RheSg1KTtcbmV4cG9ydCB2YXIgdXRjU2F0dXJkYXkgPSB1dGNXZWVrZGF5KDYpO1xuXG5leHBvcnQgdmFyIHV0Y1N1bmRheXMgPSB1dGNTdW5kYXkucmFuZ2U7XG5leHBvcnQgdmFyIHV0Y01vbmRheXMgPSB1dGNNb25kYXkucmFuZ2U7XG5leHBvcnQgdmFyIHV0Y1R1ZXNkYXlzID0gdXRjVHVlc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjV2VkbmVzZGF5cyA9IHV0Y1dlZG5lc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjVGh1cnNkYXlzID0gdXRjVGh1cnNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHV0Y0ZyaWRheXMgPSB1dGNGcmlkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHV0Y1NhdHVyZGF5cyA9IHV0Y1NhdHVyZGF5LnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5cbnZhciB1dGNNb250aCA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRVVENEYXRlKDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFVUQ01vbnRoKGRhdGUuZ2V0VVRDTW9udGgoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZW5kLmdldFVUQ01vbnRoKCkgLSBzdGFydC5nZXRVVENNb250aCgpICsgKGVuZC5nZXRVVENGdWxsWWVhcigpIC0gc3RhcnQuZ2V0VVRDRnVsbFllYXIoKSkgKiAxMjtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDTW9udGgoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB1dGNNb250aDtcbmV4cG9ydCB2YXIgdXRjTW9udGhzID0gdXRjTW9udGgucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcblxudmFyIHV0Y1llYXIgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0VVRDRnVsbFllYXIoKSAtIHN0YXJ0LmdldFVUQ0Z1bGxZZWFyKCk7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG59KTtcblxuLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxudXRjWWVhci5ldmVyeSA9IGZ1bmN0aW9uKGspIHtcbiAgcmV0dXJuICFpc0Zpbml0ZShrID0gTWF0aC5mbG9vcihrKSkgfHwgIShrID4gMCkgPyBudWxsIDogaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgLyBrKSAqIGspO1xuICAgIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpICsgc3RlcCAqIGspO1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHV0Y1llYXI7XG5leHBvcnQgdmFyIHV0Y1llYXJzID0gdXRjWWVhci5yYW5nZTtcbiIsImltcG9ydCB7XG4gIHRpbWVEYXksXG4gIHRpbWVTdW5kYXksXG4gIHRpbWVNb25kYXksXG4gIHRpbWVUaHVyc2RheSxcbiAgdGltZVllYXIsXG4gIHV0Y0RheSxcbiAgdXRjU3VuZGF5LFxuICB1dGNNb25kYXksXG4gIHV0Y1RodXJzZGF5LFxuICB1dGNZZWFyXG59IGZyb20gXCJkMy10aW1lXCI7XG5cbmZ1bmN0aW9uIGxvY2FsRGF0ZShkKSB7XG4gIGlmICgwIDw9IGQueSAmJiBkLnkgPCAxMDApIHtcbiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKC0xLCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKTtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKGQueSk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKGQueSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCk7XG59XG5cbmZ1bmN0aW9uIHV0Y0RhdGUoZCkge1xuICBpZiAoMCA8PSBkLnkgJiYgZC55IDwgMTAwKSB7XG4gICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQygtMSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCkpO1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoZC55KTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoZC55LCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKSk7XG59XG5cbmZ1bmN0aW9uIG5ld1llYXIoeSkge1xuICByZXR1cm4ge3k6IHksIG06IDAsIGQ6IDEsIEg6IDAsIE06IDAsIFM6IDAsIEw6IDB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXRMb2NhbGUobG9jYWxlKSB7XG4gIHZhciBsb2NhbGVfZGF0ZVRpbWUgPSBsb2NhbGUuZGF0ZVRpbWUsXG4gICAgICBsb2NhbGVfZGF0ZSA9IGxvY2FsZS5kYXRlLFxuICAgICAgbG9jYWxlX3RpbWUgPSBsb2NhbGUudGltZSxcbiAgICAgIGxvY2FsZV9wZXJpb2RzID0gbG9jYWxlLnBlcmlvZHMsXG4gICAgICBsb2NhbGVfd2Vla2RheXMgPSBsb2NhbGUuZGF5cyxcbiAgICAgIGxvY2FsZV9zaG9ydFdlZWtkYXlzID0gbG9jYWxlLnNob3J0RGF5cyxcbiAgICAgIGxvY2FsZV9tb250aHMgPSBsb2NhbGUubW9udGhzLFxuICAgICAgbG9jYWxlX3Nob3J0TW9udGhzID0gbG9jYWxlLnNob3J0TW9udGhzO1xuXG4gIHZhciBwZXJpb2RSZSA9IGZvcm1hdFJlKGxvY2FsZV9wZXJpb2RzKSxcbiAgICAgIHBlcmlvZExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfcGVyaW9kcyksXG4gICAgICB3ZWVrZGF5UmUgPSBmb3JtYXRSZShsb2NhbGVfd2Vla2RheXMpLFxuICAgICAgd2Vla2RheUxvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfd2Vla2RheXMpLFxuICAgICAgc2hvcnRXZWVrZGF5UmUgPSBmb3JtYXRSZShsb2NhbGVfc2hvcnRXZWVrZGF5cyksXG4gICAgICBzaG9ydFdlZWtkYXlMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3Nob3J0V2Vla2RheXMpLFxuICAgICAgbW9udGhSZSA9IGZvcm1hdFJlKGxvY2FsZV9tb250aHMpLFxuICAgICAgbW9udGhMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX21vbnRocyksXG4gICAgICBzaG9ydE1vbnRoUmUgPSBmb3JtYXRSZShsb2NhbGVfc2hvcnRNb250aHMpLFxuICAgICAgc2hvcnRNb250aExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfc2hvcnRNb250aHMpO1xuXG4gIHZhciBmb3JtYXRzID0ge1xuICAgIFwiYVwiOiBmb3JtYXRTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IGZvcm1hdFdlZWtkYXksXG4gICAgXCJiXCI6IGZvcm1hdFNob3J0TW9udGgsXG4gICAgXCJCXCI6IGZvcm1hdE1vbnRoLFxuICAgIFwiY1wiOiBudWxsLFxuICAgIFwiZFwiOiBmb3JtYXREYXlPZk1vbnRoLFxuICAgIFwiZVwiOiBmb3JtYXREYXlPZk1vbnRoLFxuICAgIFwiZlwiOiBmb3JtYXRNaWNyb3NlY29uZHMsXG4gICAgXCJIXCI6IGZvcm1hdEhvdXIyNCxcbiAgICBcIklcIjogZm9ybWF0SG91cjEyLFxuICAgIFwialwiOiBmb3JtYXREYXlPZlllYXIsXG4gICAgXCJMXCI6IGZvcm1hdE1pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogZm9ybWF0TW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IGZvcm1hdE1pbnV0ZXMsXG4gICAgXCJwXCI6IGZvcm1hdFBlcmlvZCxcbiAgICBcIlFcIjogZm9ybWF0VW5peFRpbWVzdGFtcCxcbiAgICBcInNcIjogZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMsXG4gICAgXCJTXCI6IGZvcm1hdFNlY29uZHMsXG4gICAgXCJ1XCI6IGZvcm1hdFdlZWtkYXlOdW1iZXJNb25kYXksXG4gICAgXCJVXCI6IGZvcm1hdFdlZWtOdW1iZXJTdW5kYXksXG4gICAgXCJWXCI6IGZvcm1hdFdlZWtOdW1iZXJJU08sXG4gICAgXCJ3XCI6IGZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXksXG4gICAgXCJXXCI6IGZvcm1hdFdlZWtOdW1iZXJNb25kYXksXG4gICAgXCJ4XCI6IG51bGwsXG4gICAgXCJYXCI6IG51bGwsXG4gICAgXCJ5XCI6IGZvcm1hdFllYXIsXG4gICAgXCJZXCI6IGZvcm1hdEZ1bGxZZWFyLFxuICAgIFwiWlwiOiBmb3JtYXRab25lLFxuICAgIFwiJVwiOiBmb3JtYXRMaXRlcmFsUGVyY2VudFxuICB9O1xuXG4gIHZhciB1dGNGb3JtYXRzID0ge1xuICAgIFwiYVwiOiBmb3JtYXRVVENTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IGZvcm1hdFVUQ1dlZWtkYXksXG4gICAgXCJiXCI6IGZvcm1hdFVUQ1Nob3J0TW9udGgsXG4gICAgXCJCXCI6IGZvcm1hdFVUQ01vbnRoLFxuICAgIFwiY1wiOiBudWxsLFxuICAgIFwiZFwiOiBmb3JtYXRVVENEYXlPZk1vbnRoLFxuICAgIFwiZVwiOiBmb3JtYXRVVENEYXlPZk1vbnRoLFxuICAgIFwiZlwiOiBmb3JtYXRVVENNaWNyb3NlY29uZHMsXG4gICAgXCJIXCI6IGZvcm1hdFVUQ0hvdXIyNCxcbiAgICBcIklcIjogZm9ybWF0VVRDSG91cjEyLFxuICAgIFwialwiOiBmb3JtYXRVVENEYXlPZlllYXIsXG4gICAgXCJMXCI6IGZvcm1hdFVUQ01pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogZm9ybWF0VVRDTW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IGZvcm1hdFVUQ01pbnV0ZXMsXG4gICAgXCJwXCI6IGZvcm1hdFVUQ1BlcmlvZCxcbiAgICBcIlFcIjogZm9ybWF0VW5peFRpbWVzdGFtcCxcbiAgICBcInNcIjogZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMsXG4gICAgXCJTXCI6IGZvcm1hdFVUQ1NlY29uZHMsXG4gICAgXCJ1XCI6IGZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJNb25kYXksXG4gICAgXCJVXCI6IGZvcm1hdFVUQ1dlZWtOdW1iZXJTdW5kYXksXG4gICAgXCJWXCI6IGZvcm1hdFVUQ1dlZWtOdW1iZXJJU08sXG4gICAgXCJ3XCI6IGZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJTdW5kYXksXG4gICAgXCJXXCI6IGZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXksXG4gICAgXCJ4XCI6IG51bGwsXG4gICAgXCJYXCI6IG51bGwsXG4gICAgXCJ5XCI6IGZvcm1hdFVUQ1llYXIsXG4gICAgXCJZXCI6IGZvcm1hdFVUQ0Z1bGxZZWFyLFxuICAgIFwiWlwiOiBmb3JtYXRVVENab25lLFxuICAgIFwiJVwiOiBmb3JtYXRMaXRlcmFsUGVyY2VudFxuICB9O1xuXG4gIHZhciBwYXJzZXMgPSB7XG4gICAgXCJhXCI6IHBhcnNlU2hvcnRXZWVrZGF5LFxuICAgIFwiQVwiOiBwYXJzZVdlZWtkYXksXG4gICAgXCJiXCI6IHBhcnNlU2hvcnRNb250aCxcbiAgICBcIkJcIjogcGFyc2VNb250aCxcbiAgICBcImNcIjogcGFyc2VMb2NhbGVEYXRlVGltZSxcbiAgICBcImRcIjogcGFyc2VEYXlPZk1vbnRoLFxuICAgIFwiZVwiOiBwYXJzZURheU9mTW9udGgsXG4gICAgXCJmXCI6IHBhcnNlTWljcm9zZWNvbmRzLFxuICAgIFwiSFwiOiBwYXJzZUhvdXIyNCxcbiAgICBcIklcIjogcGFyc2VIb3VyMjQsXG4gICAgXCJqXCI6IHBhcnNlRGF5T2ZZZWFyLFxuICAgIFwiTFwiOiBwYXJzZU1pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogcGFyc2VNb250aE51bWJlcixcbiAgICBcIk1cIjogcGFyc2VNaW51dGVzLFxuICAgIFwicFwiOiBwYXJzZVBlcmlvZCxcbiAgICBcIlFcIjogcGFyc2VVbml4VGltZXN0YW1wLFxuICAgIFwic1wiOiBwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzLFxuICAgIFwiU1wiOiBwYXJzZVNlY29uZHMsXG4gICAgXCJ1XCI6IHBhcnNlV2Vla2RheU51bWJlck1vbmRheSxcbiAgICBcIlVcIjogcGFyc2VXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwiVlwiOiBwYXJzZVdlZWtOdW1iZXJJU08sXG4gICAgXCJ3XCI6IHBhcnNlV2Vla2RheU51bWJlclN1bmRheSxcbiAgICBcIldcIjogcGFyc2VXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBwYXJzZUxvY2FsZURhdGUsXG4gICAgXCJYXCI6IHBhcnNlTG9jYWxlVGltZSxcbiAgICBcInlcIjogcGFyc2VZZWFyLFxuICAgIFwiWVwiOiBwYXJzZUZ1bGxZZWFyLFxuICAgIFwiWlwiOiBwYXJzZVpvbmUsXG4gICAgXCIlXCI6IHBhcnNlTGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICAvLyBUaGVzZSByZWN1cnNpdmUgZGlyZWN0aXZlIGRlZmluaXRpb25zIG11c3QgYmUgZGVmZXJyZWQuXG4gIGZvcm1hdHMueCA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZSwgZm9ybWF0cyk7XG4gIGZvcm1hdHMuWCA9IG5ld0Zvcm1hdChsb2NhbGVfdGltZSwgZm9ybWF0cyk7XG4gIGZvcm1hdHMuYyA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZVRpbWUsIGZvcm1hdHMpO1xuICB1dGNGb3JtYXRzLnggPSBuZXdGb3JtYXQobG9jYWxlX2RhdGUsIHV0Y0Zvcm1hdHMpO1xuICB1dGNGb3JtYXRzLlggPSBuZXdGb3JtYXQobG9jYWxlX3RpbWUsIHV0Y0Zvcm1hdHMpO1xuICB1dGNGb3JtYXRzLmMgPSBuZXdGb3JtYXQobG9jYWxlX2RhdGVUaW1lLCB1dGNGb3JtYXRzKTtcblxuICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyLCBmb3JtYXRzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBbXSxcbiAgICAgICAgICBpID0gLTEsXG4gICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgbiA9IHNwZWNpZmllci5sZW5ndGgsXG4gICAgICAgICAgYyxcbiAgICAgICAgICBwYWQsXG4gICAgICAgICAgZm9ybWF0O1xuXG4gICAgICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSk7XG5cbiAgICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICAgIGlmIChzcGVjaWZpZXIuY2hhckNvZGVBdChpKSA9PT0gMzcpIHtcbiAgICAgICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgICAgIGlmICgocGFkID0gcGFkc1tjID0gc3BlY2lmaWVyLmNoYXJBdCgrK2kpXSkgIT0gbnVsbCkgYyA9IHNwZWNpZmllci5jaGFyQXQoKytpKTtcbiAgICAgICAgICBlbHNlIHBhZCA9IGMgPT09IFwiZVwiID8gXCIgXCIgOiBcIjBcIjtcbiAgICAgICAgICBpZiAoZm9ybWF0ID0gZm9ybWF0c1tjXSkgYyA9IGZvcm1hdChkYXRlLCBwYWQpO1xuICAgICAgICAgIHN0cmluZy5wdXNoKGMpO1xuICAgICAgICAgIGogPSBpICsgMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgcmV0dXJuIHN0cmluZy5qb2luKFwiXCIpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBuZXdQYXJzZShzcGVjaWZpZXIsIG5ld0RhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICB2YXIgZCA9IG5ld1llYXIoMTkwMCksXG4gICAgICAgICAgaSA9IHBhcnNlU3BlY2lmaWVyKGQsIHNwZWNpZmllciwgc3RyaW5nICs9IFwiXCIsIDApLFxuICAgICAgICAgIHdlZWssIGRheTtcbiAgICAgIGlmIChpICE9IHN0cmluZy5sZW5ndGgpIHJldHVybiBudWxsO1xuXG4gICAgICAvLyBJZiBhIFVOSVggdGltZXN0YW1wIGlzIHNwZWNpZmllZCwgcmV0dXJuIGl0LlxuICAgICAgaWYgKFwiUVwiIGluIGQpIHJldHVybiBuZXcgRGF0ZShkLlEpO1xuXG4gICAgICAvLyBUaGUgYW0tcG0gZmxhZyBpcyAwIGZvciBBTSwgYW5kIDEgZm9yIFBNLlxuICAgICAgaWYgKFwicFwiIGluIGQpIGQuSCA9IGQuSCAlIDEyICsgZC5wICogMTI7XG5cbiAgICAgIC8vIENvbnZlcnQgZGF5LW9mLXdlZWsgYW5kIHdlZWstb2YteWVhciB0byBkYXktb2YteWVhci5cbiAgICAgIGlmIChcIlZcIiBpbiBkKSB7XG4gICAgICAgIGlmIChkLlYgPCAxIHx8IGQuViA+IDUzKSByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKCEoXCJ3XCIgaW4gZCkpIGQudyA9IDE7XG4gICAgICAgIGlmIChcIlpcIiBpbiBkKSB7XG4gICAgICAgICAgd2VlayA9IHV0Y0RhdGUobmV3WWVhcihkLnkpKSwgZGF5ID0gd2Vlay5nZXRVVENEYXkoKTtcbiAgICAgICAgICB3ZWVrID0gZGF5ID4gNCB8fCBkYXkgPT09IDAgPyB1dGNNb25kYXkuY2VpbCh3ZWVrKSA6IHV0Y01vbmRheSh3ZWVrKTtcbiAgICAgICAgICB3ZWVrID0gdXRjRGF5Lm9mZnNldCh3ZWVrLCAoZC5WIC0gMSkgKiA3KTtcbiAgICAgICAgICBkLnkgPSB3ZWVrLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgICAgICAgZC5tID0gd2Vlay5nZXRVVENNb250aCgpO1xuICAgICAgICAgIGQuZCA9IHdlZWsuZ2V0VVRDRGF0ZSgpICsgKGQudyArIDYpICUgNztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3ZWVrID0gbmV3RGF0ZShuZXdZZWFyKGQueSkpLCBkYXkgPSB3ZWVrLmdldERheSgpO1xuICAgICAgICAgIHdlZWsgPSBkYXkgPiA0IHx8IGRheSA9PT0gMCA/IHRpbWVNb25kYXkuY2VpbCh3ZWVrKSA6IHRpbWVNb25kYXkod2Vlayk7XG4gICAgICAgICAgd2VlayA9IHRpbWVEYXkub2Zmc2V0KHdlZWssIChkLlYgLSAxKSAqIDcpO1xuICAgICAgICAgIGQueSA9IHdlZWsuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICBkLm0gPSB3ZWVrLmdldE1vbnRoKCk7XG4gICAgICAgICAgZC5kID0gd2Vlay5nZXREYXRlKCkgKyAoZC53ICsgNikgJSA3O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFwiV1wiIGluIGQgfHwgXCJVXCIgaW4gZCkge1xuICAgICAgICBpZiAoIShcIndcIiBpbiBkKSkgZC53ID0gXCJ1XCIgaW4gZCA/IGQudSAlIDcgOiBcIldcIiBpbiBkID8gMSA6IDA7XG4gICAgICAgIGRheSA9IFwiWlwiIGluIGQgPyB1dGNEYXRlKG5ld1llYXIoZC55KSkuZ2V0VVRDRGF5KCkgOiBuZXdEYXRlKG5ld1llYXIoZC55KSkuZ2V0RGF5KCk7XG4gICAgICAgIGQubSA9IDA7XG4gICAgICAgIGQuZCA9IFwiV1wiIGluIGQgPyAoZC53ICsgNikgJSA3ICsgZC5XICogNyAtIChkYXkgKyA1KSAlIDcgOiBkLncgKyBkLlUgKiA3IC0gKGRheSArIDYpICUgNztcbiAgICAgIH1cblxuICAgICAgLy8gSWYgYSB0aW1lIHpvbmUgaXMgc3BlY2lmaWVkLCBhbGwgZmllbGRzIGFyZSBpbnRlcnByZXRlZCBhcyBVVEMgYW5kIHRoZW5cbiAgICAgIC8vIG9mZnNldCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCB0aW1lIHpvbmUuXG4gICAgICBpZiAoXCJaXCIgaW4gZCkge1xuICAgICAgICBkLkggKz0gZC5aIC8gMTAwIHwgMDtcbiAgICAgICAgZC5NICs9IGQuWiAlIDEwMDtcbiAgICAgICAgcmV0dXJuIHV0Y0RhdGUoZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIE90aGVyd2lzZSwgYWxsIGZpZWxkcyBhcmUgaW4gbG9jYWwgdGltZS5cbiAgICAgIHJldHVybiBuZXdEYXRlKGQpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVNwZWNpZmllcihkLCBzcGVjaWZpZXIsIHN0cmluZywgaikge1xuICAgIHZhciBpID0gMCxcbiAgICAgICAgbiA9IHNwZWNpZmllci5sZW5ndGgsXG4gICAgICAgIG0gPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICBjLFxuICAgICAgICBwYXJzZTtcblxuICAgIHdoaWxlIChpIDwgbikge1xuICAgICAgaWYgKGogPj0gbSkgcmV0dXJuIC0xO1xuICAgICAgYyA9IHNwZWNpZmllci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICBpZiAoYyA9PT0gMzcpIHtcbiAgICAgICAgYyA9IHNwZWNpZmllci5jaGFyQXQoaSsrKTtcbiAgICAgICAgcGFyc2UgPSBwYXJzZXNbYyBpbiBwYWRzID8gc3BlY2lmaWVyLmNoYXJBdChpKyspIDogY107XG4gICAgICAgIGlmICghcGFyc2UgfHwgKChqID0gcGFyc2UoZCwgc3RyaW5nLCBqKSkgPCAwKSkgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIGlmIChjICE9IHN0cmluZy5jaGFyQ29kZUF0KGorKykpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBqO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VQZXJpb2QoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBwZXJpb2RSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5wID0gcGVyaW9kTG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU2hvcnRXZWVrZGF5KGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gc2hvcnRXZWVrZGF5UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQudyA9IHNob3J0V2Vla2RheUxvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSB3ZWVrZGF5UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQudyA9IHdlZWtkYXlMb29rdXBbblswXS50b0xvd2VyQ2FzZSgpXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTaG9ydE1vbnRoKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gc2hvcnRNb250aFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLm0gPSBzaG9ydE1vbnRoTG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBtb250aFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLm0gPSBtb250aExvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGVUaW1lKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfZGF0ZVRpbWUsIHN0cmluZywgaSk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGUoZCwgc3RyaW5nLCBpKSB7XG4gICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV9kYXRlLCBzdHJpbmcsIGkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VMb2NhbGVUaW1lKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfdGltZSwgc3RyaW5nLCBpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFNob3J0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydFdlZWtkYXlzW2QuZ2V0RGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV93ZWVrZGF5c1tkLmdldERheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFNob3J0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRNb250aHNbZC5nZXRNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdE1vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldE1vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UGVyaW9kKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3BlcmlvZHNbKyhkLmdldEhvdXJzKCkgPj0gMTIpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1Nob3J0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydFdlZWtkYXlzW2QuZ2V0VVRDRGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV93ZWVrZGF5c1tkLmdldFVUQ0RheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1Nob3J0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRNb250aHNbZC5nZXRVVENNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ01vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldFVUQ01vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDUGVyaW9kKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3BlcmlvZHNbKyhkLmdldFVUQ0hvdXJzKCkgPj0gMTIpXTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZm9ybWF0OiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBmID0gbmV3Rm9ybWF0KHNwZWNpZmllciArPSBcIlwiLCBmb3JtYXRzKTtcbiAgICAgIGYudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBmO1xuICAgIH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIHAgPSBuZXdQYXJzZShzcGVjaWZpZXIgKz0gXCJcIiwgbG9jYWxEYXRlKTtcbiAgICAgIHAudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBwO1xuICAgIH0sXG4gICAgdXRjRm9ybWF0OiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBmID0gbmV3Rm9ybWF0KHNwZWNpZmllciArPSBcIlwiLCB1dGNGb3JtYXRzKTtcbiAgICAgIGYudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBmO1xuICAgIH0sXG4gICAgdXRjUGFyc2U6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIHAgPSBuZXdQYXJzZShzcGVjaWZpZXIsIHV0Y0RhdGUpO1xuICAgICAgcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICB9O1xufVxuXG52YXIgcGFkcyA9IHtcIi1cIjogXCJcIiwgXCJfXCI6IFwiIFwiLCBcIjBcIjogXCIwXCJ9LFxuICAgIG51bWJlclJlID0gL15cXHMqXFxkKy8sIC8vIG5vdGU6IGlnbm9yZXMgbmV4dCBkaXJlY3RpdmVcbiAgICBwZXJjZW50UmUgPSAvXiUvLFxuICAgIHJlcXVvdGVSZSA9IC9bXFxcXF4kKis/fFtcXF0oKS57fV0vZztcblxuZnVuY3Rpb24gcGFkKHZhbHVlLCBmaWxsLCB3aWR0aCkge1xuICB2YXIgc2lnbiA9IHZhbHVlIDwgMCA/IFwiLVwiIDogXCJcIixcbiAgICAgIHN0cmluZyA9IChzaWduID8gLXZhbHVlIDogdmFsdWUpICsgXCJcIixcbiAgICAgIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIHJldHVybiBzaWduICsgKGxlbmd0aCA8IHdpZHRoID8gbmV3IEFycmF5KHdpZHRoIC0gbGVuZ3RoICsgMSkuam9pbihmaWxsKSArIHN0cmluZyA6IHN0cmluZyk7XG59XG5cbmZ1bmN0aW9uIHJlcXVvdGUocykge1xuICByZXR1cm4gcy5yZXBsYWNlKHJlcXVvdGVSZSwgXCJcXFxcJCZcIik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFJlKG5hbWVzKSB7XG4gIHJldHVybiBuZXcgUmVnRXhwKFwiXig/OlwiICsgbmFtZXMubWFwKHJlcXVvdGUpLmpvaW4oXCJ8XCIpICsgXCIpXCIsIFwiaVwiKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TG9va3VwKG5hbWVzKSB7XG4gIHZhciBtYXAgPSB7fSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbikgbWFwW25hbWVzW2ldLnRvTG93ZXJDYXNlKCldID0gaTtcbiAgcmV0dXJuIG1hcDtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrZGF5TnVtYmVyU3VuZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gKGQudyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla2RheU51bWJlck1vbmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IChkLnUgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtOdW1iZXJTdW5kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5VID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrTnVtYmVySVNPKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuViA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla051bWJlck1vbmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlcgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUZ1bGxZZWFyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA0KSk7XG4gIHJldHVybiBuID8gKGQueSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLnkgPSArblswXSArICgrblswXSA+IDY4ID8gMTkwMCA6IDIwMDApLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWm9uZShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSAvXihaKXwoWystXVxcZFxcZCkoPzo6PyhcXGRcXGQpKT8vLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA2KSk7XG4gIHJldHVybiBuID8gKGQuWiA9IG5bMV0gPyAwIDogLShuWzJdICsgKG5bM10gfHwgXCIwMFwiKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNb250aE51bWJlcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLm0gPSBuWzBdIC0gMSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZURheU9mTW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5kID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VEYXlPZlllYXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDMpKTtcbiAgcmV0dXJuIG4gPyAoZC5tID0gMCwgZC5kID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VIb3VyMjQoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5IID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNaW51dGVzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuTSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlMgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pbGxpc2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMykpO1xuICByZXR1cm4gbiA/IChkLkwgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pY3Jvc2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgNikpO1xuICByZXR1cm4gbiA/IChkLkwgPSBNYXRoLmZsb29yKG5bMF0gLyAxMDAwKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUxpdGVyYWxQZXJjZW50KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IHBlcmNlbnRSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IGkgKyBuWzBdLmxlbmd0aCA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVVuaXhUaW1lc3RhbXAoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICByZXR1cm4gbiA/IChkLlEgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgcmV0dXJuIG4gPyAoZC5RID0gKCtuWzBdKSAqIDEwMDAsIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGF5T2ZNb250aChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXREYXRlKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRIb3VyMjQoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0SG91cnMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhvdXIxMihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRIb3VycygpICUgMTIgfHwgMTIsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXlPZlllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKDEgKyB0aW1lRGF5LmNvdW50KHRpbWVZZWFyKGQpLCBkKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pbGxpc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNaWxsaXNlY29uZHMoKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pY3Jvc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBmb3JtYXRNaWxsaXNlY29uZHMoZCwgcCkgKyBcIjAwMFwiO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNb250aE51bWJlcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNb250aCgpICsgMSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pbnV0ZXMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0TWludXRlcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0U2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRTZWNvbmRzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrZGF5TnVtYmVyTW9uZGF5KGQpIHtcbiAgdmFyIGRheSA9IGQuZ2V0RGF5KCk7XG4gIHJldHVybiBkYXkgPT09IDAgPyA3IDogZGF5O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrTnVtYmVyU3VuZGF5KGQsIHApIHtcbiAgcmV0dXJuIHBhZCh0aW1lU3VuZGF5LmNvdW50KHRpbWVZZWFyKGQpLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJJU08oZCwgcCkge1xuICB2YXIgZGF5ID0gZC5nZXREYXkoKTtcbiAgZCA9IChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdGltZVRodXJzZGF5KGQpIDogdGltZVRodXJzZGF5LmNlaWwoZCk7XG4gIHJldHVybiBwYWQodGltZVRodXJzZGF5LmNvdW50KHRpbWVZZWFyKGQpLCBkKSArICh0aW1lWWVhcihkKS5nZXREYXkoKSA9PT0gNCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrZGF5TnVtYmVyU3VuZGF5KGQpIHtcbiAgcmV0dXJuIGQuZ2V0RGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHRpbWVNb25kYXkuY291bnQodGltZVllYXIoZCksIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0WWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RnVsbFllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0Wm9uZShkKSB7XG4gIHZhciB6ID0gZC5nZXRUaW1lem9uZU9mZnNldCgpO1xuICByZXR1cm4gKHogPiAwID8gXCItXCIgOiAoeiAqPSAtMSwgXCIrXCIpKVxuICAgICAgKyBwYWQoeiAvIDYwIHwgMCwgXCIwXCIsIDIpXG4gICAgICArIHBhZCh6ICUgNjAsIFwiMFwiLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRGF5T2ZNb250aChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENEYXRlKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENIb3VyMjQoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDSG91cnMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0hvdXIxMihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENIb3VycygpICUgMTIgfHwgMTIsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENEYXlPZlllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKDEgKyB1dGNEYXkuY291bnQodXRjWWVhcihkKSwgZCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaWxsaXNlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaWNyb3NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gZm9ybWF0VVRDTWlsbGlzZWNvbmRzKGQsIHApICsgXCIwMDBcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTW9udGhOdW1iZXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTW9udGgoKSArIDEsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaW51dGVzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ01pbnV0ZXMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDU2Vjb25kcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheShkKSB7XG4gIHZhciBkb3cgPSBkLmdldFVUQ0RheSgpO1xuICByZXR1cm4gZG93ID09PSAwID8gNyA6IGRvdztcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlclN1bmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodXRjU3VuZGF5LmNvdW50KHV0Y1llYXIoZCksIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlcklTTyhkLCBwKSB7XG4gIHZhciBkYXkgPSBkLmdldFVUQ0RheSgpO1xuICBkID0gKGRheSA+PSA0IHx8IGRheSA9PT0gMCkgPyB1dGNUaHVyc2RheShkKSA6IHV0Y1RodXJzZGF5LmNlaWwoZCk7XG4gIHJldHVybiBwYWQodXRjVGh1cnNkYXkuY291bnQodXRjWWVhcihkKSwgZCkgKyAodXRjWWVhcihkKS5nZXRVVENEYXkoKSA9PT0gNCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyU3VuZGF5KGQpIHtcbiAgcmV0dXJuIGQuZ2V0VVRDRGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHV0Y01vbmRheS5jb3VudCh1dGNZZWFyKGQpLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1llYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMCwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0Z1bGxZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDAwMCwgcCwgNCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1pvbmUoKSB7XG4gIHJldHVybiBcIiswMDAwXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExpdGVyYWxQZXJjZW50KCkge1xuICByZXR1cm4gXCIlXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVuaXhUaW1lc3RhbXAoZCkge1xuICByZXR1cm4gK2Q7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzKGQpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoK2QgLyAxMDAwKTtcbn1cbiIsImltcG9ydCBmb3JtYXRMb2NhbGUgZnJvbSBcIi4vbG9jYWxlXCI7XG5cbnZhciBsb2NhbGU7XG5leHBvcnQgdmFyIHRpbWVGb3JtYXQ7XG5leHBvcnQgdmFyIHRpbWVQYXJzZTtcbmV4cG9ydCB2YXIgdXRjRm9ybWF0O1xuZXhwb3J0IHZhciB1dGNQYXJzZTtcblxuZGVmYXVsdExvY2FsZSh7XG4gIGRhdGVUaW1lOiBcIiV4LCAlWFwiLFxuICBkYXRlOiBcIiUtbS8lLWQvJVlcIixcbiAgdGltZTogXCIlLUk6JU06JVMgJXBcIixcbiAgcGVyaW9kczogW1wiQU1cIiwgXCJQTVwiXSxcbiAgZGF5czogW1wiU3VuZGF5XCIsIFwiTW9uZGF5XCIsIFwiVHVlc2RheVwiLCBcIldlZG5lc2RheVwiLCBcIlRodXJzZGF5XCIsIFwiRnJpZGF5XCIsIFwiU2F0dXJkYXlcIl0sXG4gIHNob3J0RGF5czogW1wiU3VuXCIsIFwiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCJdLFxuICBtb250aHM6IFtcIkphbnVhcnlcIiwgXCJGZWJydWFyeVwiLCBcIk1hcmNoXCIsIFwiQXByaWxcIiwgXCJNYXlcIiwgXCJKdW5lXCIsIFwiSnVseVwiLCBcIkF1Z3VzdFwiLCBcIlNlcHRlbWJlclwiLCBcIk9jdG9iZXJcIiwgXCJOb3ZlbWJlclwiLCBcIkRlY2VtYmVyXCJdLFxuICBzaG9ydE1vbnRoczogW1wiSmFuXCIsIFwiRmViXCIsIFwiTWFyXCIsIFwiQXByXCIsIFwiTWF5XCIsIFwiSnVuXCIsIFwiSnVsXCIsIFwiQXVnXCIsIFwiU2VwXCIsIFwiT2N0XCIsIFwiTm92XCIsIFwiRGVjXCJdXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVmYXVsdExvY2FsZShkZWZpbml0aW9uKSB7XG4gIGxvY2FsZSA9IGZvcm1hdExvY2FsZShkZWZpbml0aW9uKTtcbiAgdGltZUZvcm1hdCA9IGxvY2FsZS5mb3JtYXQ7XG4gIHRpbWVQYXJzZSA9IGxvY2FsZS5wYXJzZTtcbiAgdXRjRm9ybWF0ID0gbG9jYWxlLnV0Y0Zvcm1hdDtcbiAgdXRjUGFyc2UgPSBsb2NhbGUudXRjUGFyc2U7XG4gIHJldHVybiBsb2NhbGU7XG59XG4iLCJpbXBvcnQge3V0Y0Zvcm1hdH0gZnJvbSBcIi4vZGVmYXVsdExvY2FsZVwiO1xuXG5leHBvcnQgdmFyIGlzb1NwZWNpZmllciA9IFwiJVktJW0tJWRUJUg6JU06JVMuJUxaXCI7XG5cbmZ1bmN0aW9uIGZvcm1hdElzb05hdGl2ZShkYXRlKSB7XG4gIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKCk7XG59XG5cbnZhciBmb3JtYXRJc28gPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZ1xuICAgID8gZm9ybWF0SXNvTmF0aXZlXG4gICAgOiB1dGNGb3JtYXQoaXNvU3BlY2lmaWVyKTtcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0SXNvO1xuIiwiaW1wb3J0IHtpc29TcGVjaWZpZXJ9IGZyb20gXCIuL2lzb0Zvcm1hdFwiO1xuaW1wb3J0IHt1dGNQYXJzZX0gZnJvbSBcIi4vZGVmYXVsdExvY2FsZVwiO1xuXG5mdW5jdGlvbiBwYXJzZUlzb05hdGl2ZShzdHJpbmcpIHtcbiAgdmFyIGRhdGUgPSBuZXcgRGF0ZShzdHJpbmcpO1xuICByZXR1cm4gaXNOYU4oZGF0ZSkgPyBudWxsIDogZGF0ZTtcbn1cblxudmFyIHBhcnNlSXNvID0gK25ldyBEYXRlKFwiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaXCIpXG4gICAgPyBwYXJzZUlzb05hdGl2ZVxuICAgIDogdXRjUGFyc2UoaXNvU3BlY2lmaWVyKTtcblxuZXhwb3J0IGRlZmF1bHQgcGFyc2VJc287XG4iLCJpbXBvcnQge2xpbmVhcmlzaH0gZnJvbSBcIi4vbGluZWFyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNlcXVlbnRpYWwoaW50ZXJwb2xhdG9yKSB7XG4gIHZhciB4MCA9IDAsXG4gICAgICB4MSA9IDEsXG4gICAgICBrMTAgPSAxLFxuICAgICAgY2xhbXAgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgdmFyIHQgPSAoeCAtIHgwKSAqIGsxMDtcbiAgICByZXR1cm4gaW50ZXJwb2xhdG9yKGNsYW1wID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdCkpIDogdCk7XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeDAgPSArX1swXSwgeDEgPSArX1sxXSwgazEwID0geDAgPT09IHgxID8gMCA6IDEgLyAoeDEgLSB4MCksIHNjYWxlKSA6IFt4MCwgeDFdO1xuICB9O1xuXG4gIHNjYWxlLmNsYW1wID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsYW1wID0gISFfLCBzY2FsZSkgOiBjbGFtcDtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0b3IgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaW50ZXJwb2xhdG9yID0gXywgc2NhbGUpIDogaW50ZXJwb2xhdG9yO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gc2VxdWVudGlhbChpbnRlcnBvbGF0b3IpLmRvbWFpbihbeDAsIHgxXSkuY2xhbXAoY2xhbXApO1xuICB9O1xuXG4gIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xufVxuIiwidmFyIG5vb3AgPSB7dmFsdWU6IGZ1bmN0aW9uKCkge319O1xuXG5mdW5jdGlvbiBkaXNwYXRjaCgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSBhcmd1bWVudHMubGVuZ3RoLCBfID0ge30sIHQ7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAoISh0ID0gYXJndW1lbnRzW2ldICsgXCJcIikgfHwgKHQgaW4gXykpIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgdHlwZTogXCIgKyB0KTtcbiAgICBfW3RdID0gW107XG4gIH1cbiAgcmV0dXJuIG5ldyBEaXNwYXRjaChfKTtcbn1cblxuZnVuY3Rpb24gRGlzcGF0Y2goXykge1xuICB0aGlzLl8gPSBfO1xufVxuXG5mdW5jdGlvbiBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZXMsIHR5cGVzKSB7XG4gIHJldHVybiB0eXBlbmFtZXMudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCkge1xuICAgIHZhciBuYW1lID0gXCJcIiwgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGkgPj0gMCkgbmFtZSA9IHQuc2xpY2UoaSArIDEpLCB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICBpZiAodCAmJiAhdHlwZXMuaGFzT3duUHJvcGVydHkodCkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0KTtcbiAgICByZXR1cm4ge3R5cGU6IHQsIG5hbWU6IG5hbWV9O1xuICB9KTtcbn1cblxuRGlzcGF0Y2gucHJvdG90eXBlID0gZGlzcGF0Y2gucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogRGlzcGF0Y2gsXG4gIG9uOiBmdW5jdGlvbih0eXBlbmFtZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgXyA9IHRoaXMuXyxcbiAgICAgICAgVCA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiwgXyksXG4gICAgICAgIHQsXG4gICAgICAgIGkgPSAtMSxcbiAgICAgICAgbiA9IFQubGVuZ3RoO1xuXG4gICAgLy8gSWYgbm8gY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmV0dXJuIHRoZSBjYWxsYmFjayBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSAmJiAodCA9IGdldChfW3RdLCB0eXBlbmFtZS5uYW1lKSkpIHJldHVybiB0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIGEgdHlwZSB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGNhbGxiYWNrIGZvciB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICAvLyBPdGhlcndpc2UsIGlmIGEgbnVsbCBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCByZW1vdmUgY2FsbGJhY2tzIG9mIHRoZSBnaXZlbiBuYW1lLlxuICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNhbGxiYWNrOiBcIiArIGNhbGxiYWNrKTtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIGVsc2UgaWYgKGNhbGxiYWNrID09IG51bGwpIGZvciAodCBpbiBfKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBjb3B5OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgY29weSA9IHt9LCBfID0gdGhpcy5fO1xuICAgIGZvciAodmFyIHQgaW4gXykgY29weVt0XSA9IF9bdF0uc2xpY2UoKTtcbiAgICByZXR1cm4gbmV3IERpc3BhdGNoKGNvcHkpO1xuICB9LFxuICBjYWxsOiBmdW5jdGlvbih0eXBlLCB0aGF0KSB7XG4gICAgaWYgKChuID0gYXJndW1lbnRzLmxlbmd0aCAtIDIpID4gMCkgZm9yICh2YXIgYXJncyA9IG5ldyBBcnJheShuKSwgaSA9IDAsIG4sIHQ7IGkgPCBuOyArK2kpIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh0ID0gdGhpcy5fW3R5cGVdLCBpID0gMCwgbiA9IHQubGVuZ3RoOyBpIDwgbjsgKytpKSB0W2ldLnZhbHVlLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9LFxuICBhcHBseTogZnVuY3Rpb24odHlwZSwgdGhhdCwgYXJncykge1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh2YXIgdCA9IHRoaXMuX1t0eXBlXSwgaSA9IDAsIG4gPSB0Lmxlbmd0aDsgaSA8IG47ICsraSkgdFtpXS52YWx1ZS5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2V0KHR5cGUsIG5hbWUpIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aCwgYzsgaSA8IG47ICsraSkge1xuICAgIGlmICgoYyA9IHR5cGVbaV0pLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHJldHVybiBjLnZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXQodHlwZSwgbmFtZSwgY2FsbGJhY2spIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIGlmICh0eXBlW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHR5cGVbaV0gPSBub29wLCB0eXBlID0gdHlwZS5zbGljZSgwLCBpKS5jb25jYXQodHlwZS5zbGljZShpICsgMSkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChjYWxsYmFjayAhPSBudWxsKSB0eXBlLnB1c2goe25hbWU6IG5hbWUsIHZhbHVlOiBjYWxsYmFja30pO1xuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGlzcGF0Y2g7XG4iLCJ2YXIgZnJhbWUgPSAwLCAvLyBpcyBhbiBhbmltYXRpb24gZnJhbWUgcGVuZGluZz9cbiAgICB0aW1lb3V0ID0gMCwgLy8gaXMgYSB0aW1lb3V0IHBlbmRpbmc/XG4gICAgaW50ZXJ2YWwgPSAwLCAvLyBhcmUgYW55IHRpbWVycyBhY3RpdmU/XG4gICAgcG9rZURlbGF5ID0gMTAwMCwgLy8gaG93IGZyZXF1ZW50bHkgd2UgY2hlY2sgZm9yIGNsb2NrIHNrZXdcbiAgICB0YXNrSGVhZCxcbiAgICB0YXNrVGFpbCxcbiAgICBjbG9ja0xhc3QgPSAwLFxuICAgIGNsb2NrTm93ID0gMCxcbiAgICBjbG9ja1NrZXcgPSAwLFxuICAgIGNsb2NrID0gdHlwZW9mIHBlcmZvcm1hbmNlID09PSBcIm9iamVjdFwiICYmIHBlcmZvcm1hbmNlLm5vdyA/IHBlcmZvcm1hbmNlIDogRGF0ZSxcbiAgICBzZXRGcmFtZSA9IHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpIDogZnVuY3Rpb24oZikgeyBzZXRUaW1lb3V0KGYsIDE3KTsgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vdygpIHtcbiAgcmV0dXJuIGNsb2NrTm93IHx8IChzZXRGcmFtZShjbGVhck5vdyksIGNsb2NrTm93ID0gY2xvY2subm93KCkgKyBjbG9ja1NrZXcpO1xufVxuXG5mdW5jdGlvbiBjbGVhck5vdygpIHtcbiAgY2xvY2tOb3cgPSAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVGltZXIoKSB7XG4gIHRoaXMuX2NhbGwgPVxuICB0aGlzLl90aW1lID1cbiAgdGhpcy5fbmV4dCA9IG51bGw7XG59XG5cblRpbWVyLnByb3RvdHlwZSA9IHRpbWVyLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFRpbWVyLFxuICByZXN0YXJ0OiBmdW5jdGlvbihjYWxsYmFjaywgZGVsYXksIHRpbWUpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgICB0aW1lID0gKHRpbWUgPT0gbnVsbCA/IG5vdygpIDogK3RpbWUpICsgKGRlbGF5ID09IG51bGwgPyAwIDogK2RlbGF5KTtcbiAgICBpZiAoIXRoaXMuX25leHQgJiYgdGFza1RhaWwgIT09IHRoaXMpIHtcbiAgICAgIGlmICh0YXNrVGFpbCkgdGFza1RhaWwuX25leHQgPSB0aGlzO1xuICAgICAgZWxzZSB0YXNrSGVhZCA9IHRoaXM7XG4gICAgICB0YXNrVGFpbCA9IHRoaXM7XG4gICAgfVxuICAgIHRoaXMuX2NhbGwgPSBjYWxsYmFjaztcbiAgICB0aGlzLl90aW1lID0gdGltZTtcbiAgICBzbGVlcCgpO1xuICB9LFxuICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fY2FsbCkge1xuICAgICAgdGhpcy5fY2FsbCA9IG51bGw7XG4gICAgICB0aGlzLl90aW1lID0gSW5maW5pdHk7XG4gICAgICBzbGVlcCgpO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVyKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICB2YXIgdCA9IG5ldyBUaW1lcjtcbiAgdC5yZXN0YXJ0KGNhbGxiYWNrLCBkZWxheSwgdGltZSk7XG4gIHJldHVybiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGltZXJGbHVzaCgpIHtcbiAgbm93KCk7IC8vIEdldCB0aGUgY3VycmVudCB0aW1lLCBpZiBub3QgYWxyZWFkeSBzZXQuXG4gICsrZnJhbWU7IC8vIFByZXRlbmQgd2XigJl2ZSBzZXQgYW4gYWxhcm0sIGlmIHdlIGhhdmVu4oCZdCBhbHJlYWR5LlxuICB2YXIgdCA9IHRhc2tIZWFkLCBlO1xuICB3aGlsZSAodCkge1xuICAgIGlmICgoZSA9IGNsb2NrTm93IC0gdC5fdGltZSkgPj0gMCkgdC5fY2FsbC5jYWxsKG51bGwsIGUpO1xuICAgIHQgPSB0Ll9uZXh0O1xuICB9XG4gIC0tZnJhbWU7XG59XG5cbmZ1bmN0aW9uIHdha2UoKSB7XG4gIGNsb2NrTm93ID0gKGNsb2NrTGFzdCA9IGNsb2NrLm5vdygpKSArIGNsb2NrU2tldztcbiAgZnJhbWUgPSB0aW1lb3V0ID0gMDtcbiAgdHJ5IHtcbiAgICB0aW1lckZsdXNoKCk7XG4gIH0gZmluYWxseSB7XG4gICAgZnJhbWUgPSAwO1xuICAgIG5hcCgpO1xuICAgIGNsb2NrTm93ID0gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb2tlKCkge1xuICB2YXIgbm93ID0gY2xvY2subm93KCksIGRlbGF5ID0gbm93IC0gY2xvY2tMYXN0O1xuICBpZiAoZGVsYXkgPiBwb2tlRGVsYXkpIGNsb2NrU2tldyAtPSBkZWxheSwgY2xvY2tMYXN0ID0gbm93O1xufVxuXG5mdW5jdGlvbiBuYXAoKSB7XG4gIHZhciB0MCwgdDEgPSB0YXNrSGVhZCwgdDIsIHRpbWUgPSBJbmZpbml0eTtcbiAgd2hpbGUgKHQxKSB7XG4gICAgaWYgKHQxLl9jYWxsKSB7XG4gICAgICBpZiAodGltZSA+IHQxLl90aW1lKSB0aW1lID0gdDEuX3RpbWU7XG4gICAgICB0MCA9IHQxLCB0MSA9IHQxLl9uZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0MiA9IHQxLl9uZXh0LCB0MS5fbmV4dCA9IG51bGw7XG4gICAgICB0MSA9IHQwID8gdDAuX25leHQgPSB0MiA6IHRhc2tIZWFkID0gdDI7XG4gICAgfVxuICB9XG4gIHRhc2tUYWlsID0gdDA7XG4gIHNsZWVwKHRpbWUpO1xufVxuXG5mdW5jdGlvbiBzbGVlcCh0aW1lKSB7XG4gIGlmIChmcmFtZSkgcmV0dXJuOyAvLyBTb29uZXN0IGFsYXJtIGFscmVhZHkgc2V0LCBvciB3aWxsIGJlLlxuICBpZiAodGltZW91dCkgdGltZW91dCA9IGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgdmFyIGRlbGF5ID0gdGltZSAtIGNsb2NrTm93OyAvLyBTdHJpY3RseSBsZXNzIHRoYW4gaWYgd2UgcmVjb21wdXRlZCBjbG9ja05vdy5cbiAgaWYgKGRlbGF5ID4gMjQpIHtcbiAgICBpZiAodGltZSA8IEluZmluaXR5KSB0aW1lb3V0ID0gc2V0VGltZW91dCh3YWtlLCB0aW1lIC0gY2xvY2subm93KCkgLSBjbG9ja1NrZXcpO1xuICAgIGlmIChpbnRlcnZhbCkgaW50ZXJ2YWwgPSBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWludGVydmFsKSBjbG9ja0xhc3QgPSBjbG9jay5ub3coKSwgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChwb2tlLCBwb2tlRGVsYXkpO1xuICAgIGZyYW1lID0gMSwgc2V0RnJhbWUod2FrZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7VGltZXJ9IGZyb20gXCIuL3RpbWVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICB2YXIgdCA9IG5ldyBUaW1lcjtcbiAgZGVsYXkgPSBkZWxheSA9PSBudWxsID8gMCA6ICtkZWxheTtcbiAgdC5yZXN0YXJ0KGZ1bmN0aW9uKGVsYXBzZWQpIHtcbiAgICB0LnN0b3AoKTtcbiAgICBjYWxsYmFjayhlbGFwc2VkICsgZGVsYXkpO1xuICB9LCBkZWxheSwgdGltZSk7XG4gIHJldHVybiB0O1xufVxuIiwiaW1wb3J0IHtkaXNwYXRjaH0gZnJvbSBcImQzLWRpc3BhdGNoXCI7XG5pbXBvcnQge3RpbWVyLCB0aW1lb3V0fSBmcm9tIFwiZDMtdGltZXJcIjtcblxudmFyIGVtcHR5T24gPSBkaXNwYXRjaChcInN0YXJ0XCIsIFwiZW5kXCIsIFwiaW50ZXJydXB0XCIpO1xudmFyIGVtcHR5VHdlZW4gPSBbXTtcblxuZXhwb3J0IHZhciBDUkVBVEVEID0gMDtcbmV4cG9ydCB2YXIgU0NIRURVTEVEID0gMTtcbmV4cG9ydCB2YXIgU1RBUlRJTkcgPSAyO1xuZXhwb3J0IHZhciBTVEFSVEVEID0gMztcbmV4cG9ydCB2YXIgUlVOTklORyA9IDQ7XG5leHBvcnQgdmFyIEVORElORyA9IDU7XG5leHBvcnQgdmFyIEVOREVEID0gNjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSwgbmFtZSwgaWQsIGluZGV4LCBncm91cCwgdGltaW5nKSB7XG4gIHZhciBzY2hlZHVsZXMgPSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgaWYgKCFzY2hlZHVsZXMpIG5vZGUuX190cmFuc2l0aW9uID0ge307XG4gIGVsc2UgaWYgKGlkIGluIHNjaGVkdWxlcykgcmV0dXJuO1xuICBjcmVhdGUobm9kZSwgaWQsIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIGluZGV4OiBpbmRleCwgLy8gRm9yIGNvbnRleHQgZHVyaW5nIGNhbGxiYWNrLlxuICAgIGdyb3VwOiBncm91cCwgLy8gRm9yIGNvbnRleHQgZHVyaW5nIGNhbGxiYWNrLlxuICAgIG9uOiBlbXB0eU9uLFxuICAgIHR3ZWVuOiBlbXB0eVR3ZWVuLFxuICAgIHRpbWU6IHRpbWluZy50aW1lLFxuICAgIGRlbGF5OiB0aW1pbmcuZGVsYXksXG4gICAgZHVyYXRpb246IHRpbWluZy5kdXJhdGlvbixcbiAgICBlYXNlOiB0aW1pbmcuZWFzZSxcbiAgICB0aW1lcjogbnVsbCxcbiAgICBzdGF0ZTogQ1JFQVRFRFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXQobm9kZSwgaWQpIHtcbiAgdmFyIHNjaGVkdWxlID0gZ2V0KG5vZGUsIGlkKTtcbiAgaWYgKHNjaGVkdWxlLnN0YXRlID4gQ1JFQVRFRCkgdGhyb3cgbmV3IEVycm9yKFwidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkXCIpO1xuICByZXR1cm4gc2NoZWR1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQobm9kZSwgaWQpIHtcbiAgdmFyIHNjaGVkdWxlID0gZ2V0KG5vZGUsIGlkKTtcbiAgaWYgKHNjaGVkdWxlLnN0YXRlID4gU1RBUlRJTkcpIHRocm93IG5ldyBFcnJvcihcInRvbyBsYXRlOyBhbHJlYWR5IHN0YXJ0ZWRcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgaWYgKCFzY2hlZHVsZSB8fCAhKHNjaGVkdWxlID0gc2NoZWR1bGVbaWRdKSkgdGhyb3cgbmV3IEVycm9yKFwidHJhbnNpdGlvbiBub3QgZm91bmRcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlKG5vZGUsIGlkLCBzZWxmKSB7XG4gIHZhciBzY2hlZHVsZXMgPSBub2RlLl9fdHJhbnNpdGlvbixcbiAgICAgIHR3ZWVuO1xuXG4gIC8vIEluaXRpYWxpemUgdGhlIHNlbGYgdGltZXIgd2hlbiB0aGUgdHJhbnNpdGlvbiBpcyBjcmVhdGVkLlxuICAvLyBOb3RlIHRoZSBhY3R1YWwgZGVsYXkgaXMgbm90IGtub3duIHVudGlsIHRoZSBmaXJzdCBjYWxsYmFjayFcbiAgc2NoZWR1bGVzW2lkXSA9IHNlbGY7XG4gIHNlbGYudGltZXIgPSB0aW1lcihzY2hlZHVsZSwgMCwgc2VsZi50aW1lKTtcblxuICBmdW5jdGlvbiBzY2hlZHVsZShlbGFwc2VkKSB7XG4gICAgc2VsZi5zdGF0ZSA9IFNDSEVEVUxFRDtcbiAgICBzZWxmLnRpbWVyLnJlc3RhcnQoc3RhcnQsIHNlbGYuZGVsYXksIHNlbGYudGltZSk7XG5cbiAgICAvLyBJZiB0aGUgZWxhcHNlZCBkZWxheSBpcyBsZXNzIHRoYW4gb3VyIGZpcnN0IHNsZWVwLCBzdGFydCBpbW1lZGlhdGVseS5cbiAgICBpZiAoc2VsZi5kZWxheSA8PSBlbGFwc2VkKSBzdGFydChlbGFwc2VkIC0gc2VsZi5kZWxheSk7XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydChlbGFwc2VkKSB7XG4gICAgdmFyIGksIGosIG4sIG87XG5cbiAgICAvLyBJZiB0aGUgc3RhdGUgaXMgbm90IFNDSEVEVUxFRCwgdGhlbiB3ZSBwcmV2aW91c2x5IGVycm9yZWQgb24gc3RhcnQuXG4gICAgaWYgKHNlbGYuc3RhdGUgIT09IFNDSEVEVUxFRCkgcmV0dXJuIHN0b3AoKTtcblxuICAgIGZvciAoaSBpbiBzY2hlZHVsZXMpIHtcbiAgICAgIG8gPSBzY2hlZHVsZXNbaV07XG4gICAgICBpZiAoby5uYW1lICE9PSBzZWxmLm5hbWUpIGNvbnRpbnVlO1xuXG4gICAgICAvLyBXaGlsZSB0aGlzIGVsZW1lbnQgYWxyZWFkeSBoYXMgYSBzdGFydGluZyB0cmFuc2l0aW9uIGR1cmluZyB0aGlzIGZyYW1lLFxuICAgICAgLy8gZGVmZXIgc3RhcnRpbmcgYW4gaW50ZXJydXB0aW5nIHRyYW5zaXRpb24gdW50aWwgdGhhdCB0cmFuc2l0aW9uIGhhcyBhXG4gICAgICAvLyBjaGFuY2UgdG8gdGljayAoYW5kIHBvc3NpYmx5IGVuZCk7IHNlZSBkMy9kMy10cmFuc2l0aW9uIzU0IVxuICAgICAgaWYgKG8uc3RhdGUgPT09IFNUQVJURUQpIHJldHVybiB0aW1lb3V0KHN0YXJ0KTtcblxuICAgICAgLy8gSW50ZXJydXB0IHRoZSBhY3RpdmUgdHJhbnNpdGlvbiwgaWYgYW55LlxuICAgICAgLy8gRGlzcGF0Y2ggdGhlIGludGVycnVwdCBldmVudC5cbiAgICAgIGlmIChvLnN0YXRlID09PSBSVU5OSU5HKSB7XG4gICAgICAgIG8uc3RhdGUgPSBFTkRFRDtcbiAgICAgICAgby50aW1lci5zdG9wKCk7XG4gICAgICAgIG8ub24uY2FsbChcImludGVycnVwdFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBvLmluZGV4LCBvLmdyb3VwKTtcbiAgICAgICAgZGVsZXRlIHNjaGVkdWxlc1tpXTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2FuY2VsIGFueSBwcmUtZW1wdGVkIHRyYW5zaXRpb25zLiBObyBpbnRlcnJ1cHQgZXZlbnQgaXMgZGlzcGF0Y2hlZFxuICAgICAgLy8gYmVjYXVzZSB0aGUgY2FuY2VsbGVkIHRyYW5zaXRpb25zIG5ldmVyIHN0YXJ0ZWQuIE5vdGUgdGhhdCB0aGlzIGFsc29cbiAgICAgIC8vIHJlbW92ZXMgdGhpcyB0cmFuc2l0aW9uIGZyb20gdGhlIHBlbmRpbmcgbGlzdCFcbiAgICAgIGVsc2UgaWYgKCtpIDwgaWQpIHtcbiAgICAgICAgby5zdGF0ZSA9IEVOREVEO1xuICAgICAgICBvLnRpbWVyLnN0b3AoKTtcbiAgICAgICAgZGVsZXRlIHNjaGVkdWxlc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZWZlciB0aGUgZmlyc3QgdGljayB0byBlbmQgb2YgdGhlIGN1cnJlbnQgZnJhbWU7IHNlZSBkMy9kMyMxNTc2LlxuICAgIC8vIE5vdGUgdGhlIHRyYW5zaXRpb24gbWF5IGJlIGNhbmNlbGVkIGFmdGVyIHN0YXJ0IGFuZCBiZWZvcmUgdGhlIGZpcnN0IHRpY2shXG4gICAgLy8gTm90ZSB0aGlzIG11c3QgYmUgc2NoZWR1bGVkIGJlZm9yZSB0aGUgc3RhcnQgZXZlbnQ7IHNlZSBkMy9kMy10cmFuc2l0aW9uIzE2IVxuICAgIC8vIEFzc3VtaW5nIHRoaXMgaXMgc3VjY2Vzc2Z1bCwgc3Vic2VxdWVudCBjYWxsYmFja3MgZ28gc3RyYWlnaHQgdG8gdGljay5cbiAgICB0aW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHNlbGYuc3RhdGUgPT09IFNUQVJURUQpIHtcbiAgICAgICAgc2VsZi5zdGF0ZSA9IFJVTk5JTkc7XG4gICAgICAgIHNlbGYudGltZXIucmVzdGFydCh0aWNrLCBzZWxmLmRlbGF5LCBzZWxmLnRpbWUpO1xuICAgICAgICB0aWNrKGVsYXBzZWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gRGlzcGF0Y2ggdGhlIHN0YXJ0IGV2ZW50LlxuICAgIC8vIE5vdGUgdGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSB0d2VlbiBhcmUgaW5pdGlhbGl6ZWQuXG4gICAgc2VsZi5zdGF0ZSA9IFNUQVJUSU5HO1xuICAgIHNlbGYub24uY2FsbChcInN0YXJ0XCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApO1xuICAgIGlmIChzZWxmLnN0YXRlICE9PSBTVEFSVElORykgcmV0dXJuOyAvLyBpbnRlcnJ1cHRlZFxuICAgIHNlbGYuc3RhdGUgPSBTVEFSVEVEO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgdHdlZW4sIGRlbGV0aW5nIG51bGwgdHdlZW4uXG4gICAgdHdlZW4gPSBuZXcgQXJyYXkobiA9IHNlbGYudHdlZW4ubGVuZ3RoKTtcbiAgICBmb3IgKGkgPSAwLCBqID0gLTE7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChvID0gc2VsZi50d2VlbltpXS52YWx1ZS5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApKSB7XG4gICAgICAgIHR3ZWVuWysral0gPSBvO1xuICAgICAgfVxuICAgIH1cbiAgICB0d2Vlbi5sZW5ndGggPSBqICsgMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpY2soZWxhcHNlZCkge1xuICAgIHZhciB0ID0gZWxhcHNlZCA8IHNlbGYuZHVyYXRpb24gPyBzZWxmLmVhc2UuY2FsbChudWxsLCBlbGFwc2VkIC8gc2VsZi5kdXJhdGlvbikgOiAoc2VsZi50aW1lci5yZXN0YXJ0KHN0b3ApLCBzZWxmLnN0YXRlID0gRU5ESU5HLCAxKSxcbiAgICAgICAgaSA9IC0xLFxuICAgICAgICBuID0gdHdlZW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIHR3ZWVuW2ldLmNhbGwobnVsbCwgdCk7XG4gICAgfVxuXG4gICAgLy8gRGlzcGF0Y2ggdGhlIGVuZCBldmVudC5cbiAgICBpZiAoc2VsZi5zdGF0ZSA9PT0gRU5ESU5HKSB7XG4gICAgICBzZWxmLm9uLmNhbGwoXCJlbmRcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2VsZi5pbmRleCwgc2VsZi5ncm91cCk7XG4gICAgICBzdG9wKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RvcCgpIHtcbiAgICBzZWxmLnN0YXRlID0gRU5ERUQ7XG4gICAgc2VsZi50aW1lci5zdG9wKCk7XG4gICAgZGVsZXRlIHNjaGVkdWxlc1tpZF07XG4gICAgZm9yICh2YXIgaSBpbiBzY2hlZHVsZXMpIHJldHVybjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIGRlbGV0ZSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgfVxufVxuIiwiaW1wb3J0IHtTVEFSVElORywgRU5ESU5HLCBFTkRFRH0gZnJvbSBcIi4vdHJhbnNpdGlvbi9zY2hlZHVsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlLCBuYW1lKSB7XG4gIHZhciBzY2hlZHVsZXMgPSBub2RlLl9fdHJhbnNpdGlvbixcbiAgICAgIHNjaGVkdWxlLFxuICAgICAgYWN0aXZlLFxuICAgICAgZW1wdHkgPSB0cnVlLFxuICAgICAgaTtcblxuICBpZiAoIXNjaGVkdWxlcykgcmV0dXJuO1xuXG4gIG5hbWUgPSBuYW1lID09IG51bGwgPyBudWxsIDogbmFtZSArIFwiXCI7XG5cbiAgZm9yIChpIGluIHNjaGVkdWxlcykge1xuICAgIGlmICgoc2NoZWR1bGUgPSBzY2hlZHVsZXNbaV0pLm5hbWUgIT09IG5hbWUpIHsgZW1wdHkgPSBmYWxzZTsgY29udGludWU7IH1cbiAgICBhY3RpdmUgPSBzY2hlZHVsZS5zdGF0ZSA+IFNUQVJUSU5HICYmIHNjaGVkdWxlLnN0YXRlIDwgRU5ESU5HO1xuICAgIHNjaGVkdWxlLnN0YXRlID0gRU5ERUQ7XG4gICAgc2NoZWR1bGUudGltZXIuc3RvcCgpO1xuICAgIGlmIChhY3RpdmUpIHNjaGVkdWxlLm9uLmNhbGwoXCJpbnRlcnJ1cHRcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2NoZWR1bGUuaW5kZXgsIHNjaGVkdWxlLmdyb3VwKTtcbiAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICB9XG5cbiAgaWYgKGVtcHR5KSBkZWxldGUgbm9kZS5fX3RyYW5zaXRpb247XG59XG4iLCJpbXBvcnQgaW50ZXJydXB0IGZyb20gXCIuLi9pbnRlcnJ1cHRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgIGludGVycnVwdCh0aGlzLCBuYW1lKTtcbiAgfSk7XG59XG4iLCJpbXBvcnQge2dldCwgc2V0fSBmcm9tIFwiLi9zY2hlZHVsZVwiO1xuXG5mdW5jdGlvbiB0d2VlblJlbW92ZShpZCwgbmFtZSkge1xuICB2YXIgdHdlZW4wLCB0d2VlbjE7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICB0d2VlbiA9IHNjaGVkdWxlLnR3ZWVuO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCB0d2VlbiB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCB0d2VlbiBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAodHdlZW4gIT09IHR3ZWVuMCkge1xuICAgICAgdHdlZW4xID0gdHdlZW4wID0gdHdlZW47XG4gICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHR3ZWVuMS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKHR3ZWVuMVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgdHdlZW4xID0gdHdlZW4xLnNsaWNlKCk7XG4gICAgICAgICAgdHdlZW4xLnNwbGljZShpLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHNjaGVkdWxlLnR3ZWVuID0gdHdlZW4xO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0d2VlbkZ1bmN0aW9uKGlkLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgdHdlZW4wLCB0d2VlbjE7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgdHdlZW4gPSBzY2hlZHVsZS50d2VlbjtcblxuICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgdHdlZW4gd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAvLyBqdXN0IGFzc2lnbiB0aGUgdXBkYXRlZCBzaGFyZWQgdHdlZW4gYW5kIHdl4oCZcmUgZG9uZSFcbiAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgaWYgKHR3ZWVuICE9PSB0d2VlbjApIHtcbiAgICAgIHR3ZWVuMSA9ICh0d2VlbjAgPSB0d2Vlbikuc2xpY2UoKTtcbiAgICAgIGZvciAodmFyIHQgPSB7bmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlfSwgaSA9IDAsIG4gPSB0d2VlbjEubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICh0d2VlbjFbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgIHR3ZWVuMVtpXSA9IHQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpID09PSBuKSB0d2VlbjEucHVzaCh0KTtcbiAgICB9XG5cbiAgICBzY2hlZHVsZS50d2VlbiA9IHR3ZWVuMTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGlkID0gdGhpcy5faWQ7XG5cbiAgbmFtZSArPSBcIlwiO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciB0d2VlbiA9IGdldCh0aGlzLm5vZGUoKSwgaWQpLnR3ZWVuO1xuICAgIGZvciAodmFyIGkgPSAwLCBuID0gdHdlZW4ubGVuZ3RoLCB0OyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKHQgPSB0d2VlbltpXSkubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICByZXR1cm4gdC52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsID8gdHdlZW5SZW1vdmUgOiB0d2VlbkZ1bmN0aW9uKShpZCwgbmFtZSwgdmFsdWUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR3ZWVuVmFsdWUodHJhbnNpdGlvbiwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIGlkID0gdHJhbnNpdGlvbi5faWQ7XG5cbiAgdHJhbnNpdGlvbi5lYWNoKGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCk7XG4gICAgKHNjaGVkdWxlLnZhbHVlIHx8IChzY2hlZHVsZS52YWx1ZSA9IHt9KSlbbmFtZV0gPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9KTtcblxuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBnZXQobm9kZSwgaWQpLnZhbHVlW25hbWVdO1xuICB9O1xufVxuIiwiaW1wb3J0IHtjb2xvcn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQge2ludGVycG9sYXRlTnVtYmVyLCBpbnRlcnBvbGF0ZVJnYiwgaW50ZXJwb2xhdGVTdHJpbmd9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBjO1xuICByZXR1cm4gKHR5cGVvZiBiID09PSBcIm51bWJlclwiID8gaW50ZXJwb2xhdGVOdW1iZXJcbiAgICAgIDogYiBpbnN0YW5jZW9mIGNvbG9yID8gaW50ZXJwb2xhdGVSZ2JcbiAgICAgIDogKGMgPSBjb2xvcihiKSkgPyAoYiA9IGMsIGludGVycG9sYXRlUmdiKVxuICAgICAgOiBpbnRlcnBvbGF0ZVN0cmluZykoYSwgYik7XG59XG4iLCJpbXBvcnQge2ludGVycG9sYXRlVHJhbnNmb3JtU3ZnIGFzIGludGVycG9sYXRlVHJhbnNmb3JtfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7bmFtZXNwYWNlfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge3R3ZWVuVmFsdWV9IGZyb20gXCIuL3R3ZWVuXCI7XG5pbXBvcnQgaW50ZXJwb2xhdGUgZnJvbSBcIi4vaW50ZXJwb2xhdGVcIjtcblxuZnVuY3Rpb24gYXR0clJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0clJlbW92ZU5TKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudChuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUxKSB7XG4gIHZhciB2YWx1ZTAwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlMCA9IHRoaXMuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIHJldHVybiB2YWx1ZTAgPT09IHZhbHVlMSA/IG51bGxcbiAgICAgICAgOiB2YWx1ZTAgPT09IHZhbHVlMDAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZSh2YWx1ZTAwID0gdmFsdWUwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgdmFsdWUwMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTAgPSB0aGlzLmdldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgcmV0dXJuIHZhbHVlMCA9PT0gdmFsdWUxID8gbnVsbFxuICAgICAgICA6IHZhbHVlMCA9PT0gdmFsdWUwMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHZhbHVlMDAgPSB2YWx1ZTAsIHZhbHVlMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbihuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUpIHtcbiAgdmFyIHZhbHVlMDAsXG4gICAgICB2YWx1ZTEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlMCwgdmFsdWUxID0gdmFsdWUodGhpcyk7XG4gICAgaWYgKHZhbHVlMSA9PSBudWxsKSByZXR1cm4gdm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICB2YWx1ZTAgPSB0aGlzLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgICByZXR1cm4gdmFsdWUwID09PSB2YWx1ZTEgPyBudWxsXG4gICAgICAgIDogdmFsdWUwID09PSB2YWx1ZTAwICYmIHZhbHVlMSA9PT0gdmFsdWUxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHZhbHVlMDAgPSB2YWx1ZTAsIHZhbHVlMTAgPSB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb25OUyhmdWxsbmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciB2YWx1ZTAwLFxuICAgICAgdmFsdWUxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTAsIHZhbHVlMSA9IHZhbHVlKHRoaXMpO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgcmV0dXJuIHZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHZhbHVlMCA9IHRoaXMuZ2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICByZXR1cm4gdmFsdWUwID09PSB2YWx1ZTEgPyBudWxsXG4gICAgICAgIDogdmFsdWUwID09PSB2YWx1ZTAwICYmIHZhbHVlMSA9PT0gdmFsdWUxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHZhbHVlMDAgPSB2YWx1ZTAsIHZhbHVlMTAgPSB2YWx1ZTEpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSksIGkgPSBmdWxsbmFtZSA9PT0gXCJ0cmFuc2Zvcm1cIiA/IGludGVycG9sYXRlVHJhbnNmb3JtIDogaW50ZXJwb2xhdGU7XG4gIHJldHVybiB0aGlzLmF0dHJUd2VlbihuYW1lLCB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyRnVuY3Rpb25OUyA6IGF0dHJGdW5jdGlvbikoZnVsbG5hbWUsIGksIHR3ZWVuVmFsdWUodGhpcywgXCJhdHRyLlwiICsgbmFtZSwgdmFsdWUpKVxuICAgICAgOiB2YWx1ZSA9PSBudWxsID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0clJlbW92ZU5TIDogYXR0clJlbW92ZSkoZnVsbG5hbWUpXG4gICAgICA6IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJDb25zdGFudE5TIDogYXR0ckNvbnN0YW50KShmdWxsbmFtZSwgaSwgdmFsdWUgKyBcIlwiKSk7XG59XG4iLCJpbXBvcnQge25hbWVzcGFjZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG5mdW5jdGlvbiBhdHRyVHdlZW5OUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLCBpID0gdmFsdWUuYXBwbHkobm9kZSwgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gaSAmJiBmdW5jdGlvbih0KSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgaSh0KSk7XG4gICAgfTtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5mdW5jdGlvbiBhdHRyVHdlZW4obmFtZSwgdmFsdWUpIHtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLCBpID0gdmFsdWUuYXBwbHkobm9kZSwgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gaSAmJiBmdW5jdGlvbih0KSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShuYW1lLCBpKHQpKTtcbiAgICB9O1xuICB9XG4gIHR3ZWVuLl92YWx1ZSA9IHZhbHVlO1xuICByZXR1cm4gdHdlZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBrZXkgPSBcImF0dHIuXCIgKyBuYW1lO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHJldHVybiAoa2V5ID0gdGhpcy50d2VlbihrZXkpKSAmJiBrZXkuX3ZhbHVlO1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBudWxsKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcbiAgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCAoZnVsbG5hbWUubG9jYWwgPyBhdHRyVHdlZW5OUyA6IGF0dHJUd2VlbikoZnVsbG5hbWUsIHZhbHVlKSk7XG59XG4iLCJpbXBvcnQge2dldCwgaW5pdH0gZnJvbSBcIi4vc2NoZWR1bGVcIjtcblxuZnVuY3Rpb24gZGVsYXlGdW5jdGlvbihpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGluaXQodGhpcywgaWQpLmRlbGF5ID0gK3ZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRlbGF5Q29uc3RhbnQoaWQsIHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9ICt2YWx1ZSwgZnVuY3Rpb24oKSB7XG4gICAgaW5pdCh0aGlzLCBpZCkuZGVsYXkgPSB2YWx1ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIGlkID0gdGhpcy5faWQ7XG5cbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKCh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gZGVsYXlGdW5jdGlvblxuICAgICAgICAgIDogZGVsYXlDb25zdGFudCkoaWQsIHZhbHVlKSlcbiAgICAgIDogZ2V0KHRoaXMubm9kZSgpLCBpZCkuZGVsYXk7XG59XG4iLCJpbXBvcnQge2dldCwgc2V0fSBmcm9tIFwiLi9zY2hlZHVsZVwiO1xuXG5mdW5jdGlvbiBkdXJhdGlvbkZ1bmN0aW9uKGlkLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgc2V0KHRoaXMsIGlkKS5kdXJhdGlvbiA9ICt2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkdXJhdGlvbkNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPSArdmFsdWUsIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZHVyYXRpb24gPSB2YWx1ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIGlkID0gdGhpcy5faWQ7XG5cbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKCh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gZHVyYXRpb25GdW5jdGlvblxuICAgICAgICAgIDogZHVyYXRpb25Db25zdGFudCkoaWQsIHZhbHVlKSlcbiAgICAgIDogZ2V0KHRoaXMubm9kZSgpLCBpZCkuZHVyYXRpb247XG59XG4iLCJpbXBvcnQge2dldCwgc2V0fSBmcm9tIFwiLi9zY2hlZHVsZVwiO1xuXG5mdW5jdGlvbiBlYXNlQ29uc3RhbnQoaWQsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgc2V0KHRoaXMsIGlkKS5lYXNlID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaChlYXNlQ29uc3RhbnQoaWQsIHZhbHVlKSlcbiAgICAgIDogZ2V0KHRoaXMubm9kZSgpLCBpZCkuZWFzZTtcbn1cbiIsImltcG9ydCB7bWF0Y2hlcn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlcihtYXRjaCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIG1hdGNoLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSB7XG4gICAgICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cywgdGhpcy5fbmFtZSwgdGhpcy5faWQpO1xufVxuIiwiaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0cmFuc2l0aW9uKSB7XG4gIGlmICh0cmFuc2l0aW9uLl9pZCAhPT0gdGhpcy5faWQpIHRocm93IG5ldyBFcnJvcjtcblxuICBmb3IgKHZhciBncm91cHMwID0gdGhpcy5fZ3JvdXBzLCBncm91cHMxID0gdHJhbnNpdGlvbi5fZ3JvdXBzLCBtMCA9IGdyb3VwczAubGVuZ3RoLCBtMSA9IGdyb3VwczEubGVuZ3RoLCBtID0gTWF0aC5taW4obTAsIG0xKSwgbWVyZ2VzID0gbmV3IEFycmF5KG0wKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cDAgPSBncm91cHMwW2pdLCBncm91cDEgPSBncm91cHMxW2pdLCBuID0gZ3JvdXAwLmxlbmd0aCwgbWVyZ2UgPSBtZXJnZXNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcbiAgICAgICAgbWVyZ2VbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBqIDwgbTA7ICsraikge1xuICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24obWVyZ2VzLCB0aGlzLl9wYXJlbnRzLCB0aGlzLl9uYW1lLCB0aGlzLl9pZCk7XG59XG4iLCJpbXBvcnQge2dldCwgc2V0LCBpbml0fSBmcm9tIFwiLi9zY2hlZHVsZVwiO1xuXG5mdW5jdGlvbiBzdGFydChuYW1lKSB7XG4gIHJldHVybiAobmFtZSArIFwiXCIpLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykuZXZlcnkoZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICByZXR1cm4gIXQgfHwgdCA9PT0gXCJzdGFydFwiO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb25GdW5jdGlvbihpZCwgbmFtZSwgbGlzdGVuZXIpIHtcbiAgdmFyIG9uMCwgb24xLCBzaXQgPSBzdGFydChuYW1lKSA/IGluaXQgOiBzZXQ7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzaXQodGhpcywgaWQpLFxuICAgICAgICBvbiA9IHNjaGVkdWxlLm9uO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCBhIGRpc3BhdGNoIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmIChvbiAhPT0gb24wKSAob24xID0gKG9uMCA9IG9uKS5jb3B5KCkpLm9uKG5hbWUsIGxpc3RlbmVyKTtcblxuICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCBsaXN0ZW5lcikge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDJcbiAgICAgID8gZ2V0KHRoaXMubm9kZSgpLCBpZCkub24ub24obmFtZSlcbiAgICAgIDogdGhpcy5lYWNoKG9uRnVuY3Rpb24oaWQsIG5hbWUsIGxpc3RlbmVyKSk7XG59XG4iLCJmdW5jdGlvbiByZW1vdmVGdW5jdGlvbihpZCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgICBmb3IgKHZhciBpIGluIHRoaXMuX190cmFuc2l0aW9uKSBpZiAoK2kgIT09IGlkKSByZXR1cm47XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMub24oXCJlbmQucmVtb3ZlXCIsIHJlbW92ZUZ1bmN0aW9uKHRoaXMuX2lkKSk7XG59XG4iLCJpbXBvcnQge3NlbGVjdG9yfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZCA9IHRoaXMuX2lkO1xuXG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgc3Vibm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiAoc3Vibm9kZSA9IHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkpIHtcbiAgICAgICAgaWYgKFwiX19kYXRhX19cIiBpbiBub2RlKSBzdWJub2RlLl9fZGF0YV9fID0gbm9kZS5fX2RhdGFfXztcbiAgICAgICAgc3ViZ3JvdXBbaV0gPSBzdWJub2RlO1xuICAgICAgICBzY2hlZHVsZShzdWJncm91cFtpXSwgbmFtZSwgaWQsIGksIHN1Ymdyb3VwLCBnZXQobm9kZSwgaWQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iLCJpbXBvcnQge3NlbGVjdG9yQWxsfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZCA9IHRoaXMuX2lkO1xuXG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yQWxsKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gW10sIHBhcmVudHMgPSBbXSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgZm9yICh2YXIgY2hpbGRyZW4gPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCksIGNoaWxkLCBpbmhlcml0ID0gZ2V0KG5vZGUsIGlkKSwgayA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGsgPCBsOyArK2spIHtcbiAgICAgICAgICBpZiAoY2hpbGQgPSBjaGlsZHJlbltrXSkge1xuICAgICAgICAgICAgc2NoZWR1bGUoY2hpbGQsIG5hbWUsIGlkLCBrLCBjaGlsZHJlbiwgaW5oZXJpdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN1Ymdyb3Vwcy5wdXNoKGNoaWxkcmVuKTtcbiAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihzdWJncm91cHMsIHBhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbnZhciBTZWxlY3Rpb24gPSBzZWxlY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImltcG9ydCB7aW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MgYXMgaW50ZXJwb2xhdGVUcmFuc2Zvcm19IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHtzdHlsZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHt0d2VlblZhbHVlfSBmcm9tIFwiLi90d2VlblwiO1xuaW1wb3J0IGludGVycG9sYXRlIGZyb20gXCIuL2ludGVycG9sYXRlXCI7XG5cbmZ1bmN0aW9uIHN0eWxlUmVtb3ZlKG5hbWUsIGludGVycG9sYXRlKSB7XG4gIHZhciB2YWx1ZTAwLFxuICAgICAgdmFsdWUxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTAgPSBzdHlsZSh0aGlzLCBuYW1lKSxcbiAgICAgICAgdmFsdWUxID0gKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSksIHN0eWxlKHRoaXMsIG5hbWUpKTtcbiAgICByZXR1cm4gdmFsdWUwID09PSB2YWx1ZTEgPyBudWxsXG4gICAgICAgIDogdmFsdWUwID09PSB2YWx1ZTAwICYmIHZhbHVlMSA9PT0gdmFsdWUxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHZhbHVlMDAgPSB2YWx1ZTAsIHZhbHVlMTAgPSB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZVJlbW92ZUVuZChuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUNvbnN0YW50KG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZTEpIHtcbiAgdmFyIHZhbHVlMDAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUwID0gc3R5bGUodGhpcywgbmFtZSk7XG4gICAgcmV0dXJuIHZhbHVlMCA9PT0gdmFsdWUxID8gbnVsbFxuICAgICAgICA6IHZhbHVlMCA9PT0gdmFsdWUwMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHZhbHVlMDAgPSB2YWx1ZTAsIHZhbHVlMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlRnVuY3Rpb24obmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciB2YWx1ZTAwLFxuICAgICAgdmFsdWUxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTAgPSBzdHlsZSh0aGlzLCBuYW1lKSxcbiAgICAgICAgdmFsdWUxID0gdmFsdWUodGhpcyk7XG4gICAgaWYgKHZhbHVlMSA9PSBudWxsKSB2YWx1ZTEgPSAodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKSwgc3R5bGUodGhpcywgbmFtZSkpO1xuICAgIHJldHVybiB2YWx1ZTAgPT09IHZhbHVlMSA/IG51bGxcbiAgICAgICAgOiB2YWx1ZTAgPT09IHZhbHVlMDAgJiYgdmFsdWUxID09PSB2YWx1ZTEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUodmFsdWUwMCA9IHZhbHVlMCwgdmFsdWUxMCA9IHZhbHVlMSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICB2YXIgaSA9IChuYW1lICs9IFwiXCIpID09PSBcInRyYW5zZm9ybVwiID8gaW50ZXJwb2xhdGVUcmFuc2Zvcm0gOiBpbnRlcnBvbGF0ZTtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyB0aGlzXG4gICAgICAgICAgLnN0eWxlVHdlZW4obmFtZSwgc3R5bGVSZW1vdmUobmFtZSwgaSkpXG4gICAgICAgICAgLm9uKFwiZW5kLnN0eWxlLlwiICsgbmFtZSwgc3R5bGVSZW1vdmVFbmQobmFtZSkpXG4gICAgICA6IHRoaXMuc3R5bGVUd2VlbihuYW1lLCB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gc3R5bGVGdW5jdGlvbihuYW1lLCBpLCB0d2VlblZhbHVlKHRoaXMsIFwic3R5bGUuXCIgKyBuYW1lLCB2YWx1ZSkpXG4gICAgICAgICAgOiBzdHlsZUNvbnN0YW50KG5hbWUsIGksIHZhbHVlICsgXCJcIiksIHByaW9yaXR5KTtcbn1cbiIsImZ1bmN0aW9uIHN0eWxlVHdlZW4obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBub2RlID0gdGhpcywgaSA9IHZhbHVlLmFwcGx5KG5vZGUsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIGkgJiYgZnVuY3Rpb24odCkge1xuICAgICAgbm9kZS5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCBpKHQpLCBwcmlvcml0eSk7XG4gICAgfTtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgdmFyIGtleSA9IFwic3R5bGUuXCIgKyAobmFtZSArPSBcIlwiKTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gdGhpcy50d2VlbihrZXksIHN0eWxlVHdlZW4obmFtZSwgdmFsdWUsIHByaW9yaXR5ID09IG51bGwgPyBcIlwiIDogcHJpb3JpdHkpKTtcbn1cbiIsImltcG9ydCB7dHdlZW5WYWx1ZX0gZnJvbSBcIi4vdHdlZW5cIjtcblxuZnVuY3Rpb24gdGV4dENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRleHRGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlMSA9IHZhbHVlKHRoaXMpO1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTEgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTE7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLnR3ZWVuKFwidGV4dFwiLCB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyB0ZXh0RnVuY3Rpb24odHdlZW5WYWx1ZSh0aGlzLCBcInRleHRcIiwgdmFsdWUpKVxuICAgICAgOiB0ZXh0Q29uc3RhbnQodmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSArIFwiXCIpKTtcbn1cbiIsImltcG9ydCB7VHJhbnNpdGlvbiwgbmV3SWR9IGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZDAgPSB0aGlzLl9pZCxcbiAgICAgIGlkMSA9IG5ld0lkKCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgdmFyIGluaGVyaXQgPSBnZXQobm9kZSwgaWQwKTtcbiAgICAgICAgc2NoZWR1bGUobm9kZSwgbmFtZSwgaWQxLCBpLCBncm91cCwge1xuICAgICAgICAgIHRpbWU6IGluaGVyaXQudGltZSArIGluaGVyaXQuZGVsYXkgKyBpbmhlcml0LmR1cmF0aW9uLFxuICAgICAgICAgIGRlbGF5OiAwLFxuICAgICAgICAgIGR1cmF0aW9uOiBpbmhlcml0LmR1cmF0aW9uLFxuICAgICAgICAgIGVhc2U6IGluaGVyaXQuZWFzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCBuYW1lLCBpZDEpO1xufVxuIiwiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB0cmFuc2l0aW9uX2F0dHIgZnJvbSBcIi4vYXR0clwiO1xuaW1wb3J0IHRyYW5zaXRpb25fYXR0clR3ZWVuIGZyb20gXCIuL2F0dHJUd2VlblwiO1xuaW1wb3J0IHRyYW5zaXRpb25fZGVsYXkgZnJvbSBcIi4vZGVsYXlcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2R1cmF0aW9uIGZyb20gXCIuL2R1cmF0aW9uXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9lYXNlIGZyb20gXCIuL2Vhc2VcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2ZpbHRlciBmcm9tIFwiLi9maWx0ZXJcIjtcbmltcG9ydCB0cmFuc2l0aW9uX21lcmdlIGZyb20gXCIuL21lcmdlXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9vbiBmcm9tIFwiLi9vblwiO1xuaW1wb3J0IHRyYW5zaXRpb25fcmVtb3ZlIGZyb20gXCIuL3JlbW92ZVwiO1xuaW1wb3J0IHRyYW5zaXRpb25fc2VsZWN0IGZyb20gXCIuL3NlbGVjdFwiO1xuaW1wb3J0IHRyYW5zaXRpb25fc2VsZWN0QWxsIGZyb20gXCIuL3NlbGVjdEFsbFwiO1xuaW1wb3J0IHRyYW5zaXRpb25fc2VsZWN0aW9uIGZyb20gXCIuL3NlbGVjdGlvblwiO1xuaW1wb3J0IHRyYW5zaXRpb25fc3R5bGUgZnJvbSBcIi4vc3R5bGVcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3N0eWxlVHdlZW4gZnJvbSBcIi4vc3R5bGVUd2VlblwiO1xuaW1wb3J0IHRyYW5zaXRpb25fdGV4dCBmcm9tIFwiLi90ZXh0XCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90cmFuc2l0aW9uIGZyb20gXCIuL3RyYW5zaXRpb25cIjtcbmltcG9ydCB0cmFuc2l0aW9uX3R3ZWVuIGZyb20gXCIuL3R3ZWVuXCI7XG5cbnZhciBpZCA9IDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBUcmFuc2l0aW9uKGdyb3VwcywgcGFyZW50cywgbmFtZSwgaWQpIHtcbiAgdGhpcy5fZ3JvdXBzID0gZ3JvdXBzO1xuICB0aGlzLl9wYXJlbnRzID0gcGFyZW50cztcbiAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gIHRoaXMuX2lkID0gaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zaXRpb24obmFtZSkge1xuICByZXR1cm4gc2VsZWN0aW9uKCkudHJhbnNpdGlvbihuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5ld0lkKCkge1xuICByZXR1cm4gKytpZDtcbn1cblxudmFyIHNlbGVjdGlvbl9wcm90b3R5cGUgPSBzZWxlY3Rpb24ucHJvdG90eXBlO1xuXG5UcmFuc2l0aW9uLnByb3RvdHlwZSA9IHRyYW5zaXRpb24ucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogVHJhbnNpdGlvbixcbiAgc2VsZWN0OiB0cmFuc2l0aW9uX3NlbGVjdCxcbiAgc2VsZWN0QWxsOiB0cmFuc2l0aW9uX3NlbGVjdEFsbCxcbiAgZmlsdGVyOiB0cmFuc2l0aW9uX2ZpbHRlcixcbiAgbWVyZ2U6IHRyYW5zaXRpb25fbWVyZ2UsXG4gIHNlbGVjdGlvbjogdHJhbnNpdGlvbl9zZWxlY3Rpb24sXG4gIHRyYW5zaXRpb246IHRyYW5zaXRpb25fdHJhbnNpdGlvbixcbiAgY2FsbDogc2VsZWN0aW9uX3Byb3RvdHlwZS5jYWxsLFxuICBub2Rlczogc2VsZWN0aW9uX3Byb3RvdHlwZS5ub2RlcyxcbiAgbm9kZTogc2VsZWN0aW9uX3Byb3RvdHlwZS5ub2RlLFxuICBzaXplOiBzZWxlY3Rpb25fcHJvdG90eXBlLnNpemUsXG4gIGVtcHR5OiBzZWxlY3Rpb25fcHJvdG90eXBlLmVtcHR5LFxuICBlYWNoOiBzZWxlY3Rpb25fcHJvdG90eXBlLmVhY2gsXG4gIG9uOiB0cmFuc2l0aW9uX29uLFxuICBhdHRyOiB0cmFuc2l0aW9uX2F0dHIsXG4gIGF0dHJUd2VlbjogdHJhbnNpdGlvbl9hdHRyVHdlZW4sXG4gIHN0eWxlOiB0cmFuc2l0aW9uX3N0eWxlLFxuICBzdHlsZVR3ZWVuOiB0cmFuc2l0aW9uX3N0eWxlVHdlZW4sXG4gIHRleHQ6IHRyYW5zaXRpb25fdGV4dCxcbiAgcmVtb3ZlOiB0cmFuc2l0aW9uX3JlbW92ZSxcbiAgdHdlZW46IHRyYW5zaXRpb25fdHdlZW4sXG4gIGRlbGF5OiB0cmFuc2l0aW9uX2RlbGF5LFxuICBkdXJhdGlvbjogdHJhbnNpdGlvbl9kdXJhdGlvbixcbiAgZWFzZTogdHJhbnNpdGlvbl9lYXNlXG59O1xuIiwiZXhwb3J0IGZ1bmN0aW9uIGN1YmljSW4odCkge1xuICByZXR1cm4gdCAqIHQgKiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3ViaWNPdXQodCkge1xuICByZXR1cm4gLS10ICogdCAqIHQgKyAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3ViaWNJbk91dCh0KSB7XG4gIHJldHVybiAoKHQgKj0gMikgPD0gMSA/IHQgKiB0ICogdCA6ICh0IC09IDIpICogdCAqIHQgKyAyKSAvIDI7XG59XG4iLCJpbXBvcnQge1RyYW5zaXRpb24sIG5ld0lkfSBmcm9tIFwiLi4vdHJhbnNpdGlvbi9pbmRleFwiO1xuaW1wb3J0IHNjaGVkdWxlIGZyb20gXCIuLi90cmFuc2l0aW9uL3NjaGVkdWxlXCI7XG5pbXBvcnQge2Vhc2VDdWJpY0luT3V0fSBmcm9tIFwiZDMtZWFzZVwiO1xuaW1wb3J0IHtub3d9IGZyb20gXCJkMy10aW1lclwiO1xuXG52YXIgZGVmYXVsdFRpbWluZyA9IHtcbiAgdGltZTogbnVsbCwgLy8gU2V0IG9uIHVzZS5cbiAgZGVsYXk6IDAsXG4gIGR1cmF0aW9uOiAyNTAsXG4gIGVhc2U6IGVhc2VDdWJpY0luT3V0XG59O1xuXG5mdW5jdGlvbiBpbmhlcml0KG5vZGUsIGlkKSB7XG4gIHZhciB0aW1pbmc7XG4gIHdoaWxlICghKHRpbWluZyA9IG5vZGUuX190cmFuc2l0aW9uKSB8fCAhKHRpbWluZyA9IHRpbWluZ1tpZF0pKSB7XG4gICAgaWYgKCEobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VGltaW5nLnRpbWUgPSBub3coKSwgZGVmYXVsdFRpbWluZztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRpbWluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgaWQsXG4gICAgICB0aW1pbmc7XG5cbiAgaWYgKG5hbWUgaW5zdGFuY2VvZiBUcmFuc2l0aW9uKSB7XG4gICAgaWQgPSBuYW1lLl9pZCwgbmFtZSA9IG5hbWUuX25hbWU7XG4gIH0gZWxzZSB7XG4gICAgaWQgPSBuZXdJZCgpLCAodGltaW5nID0gZGVmYXVsdFRpbWluZykudGltZSA9IG5vdygpLCBuYW1lID0gbmFtZSA9PSBudWxsID8gbnVsbCA6IG5hbWUgKyBcIlwiO1xuICB9XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc2NoZWR1bGUobm9kZSwgbmFtZSwgaWQsIGksIGdyb3VwLCB0aW1pbmcgfHwgaW5oZXJpdChub2RlLCBpZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2ludGVycnVwdCBmcm9tIFwiLi9pbnRlcnJ1cHRcIjtcbmltcG9ydCBzZWxlY3Rpb25fdHJhbnNpdGlvbiBmcm9tIFwiLi90cmFuc2l0aW9uXCI7XG5cbnNlbGVjdGlvbi5wcm90b3R5cGUuaW50ZXJydXB0ID0gc2VsZWN0aW9uX2ludGVycnVwdDtcbnNlbGVjdGlvbi5wcm90b3R5cGUudHJhbnNpdGlvbiA9IHNlbGVjdGlvbl90cmFuc2l0aW9uO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gIHZhciBuID0gc3BlY2lmaWVyLmxlbmd0aCAvIDYgfCAwLCBjb2xvcnMgPSBuZXcgQXJyYXkobiksIGkgPSAwO1xuICB3aGlsZSAoaSA8IG4pIGNvbG9yc1tpXSA9IFwiI1wiICsgc3BlY2lmaWVyLnNsaWNlKGkgKiA2LCArK2kgKiA2KTtcbiAgcmV0dXJuIGNvbG9ycztcbn1cbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2ZcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2XCIpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcIjFiOWU3N2Q5NWYwMjc1NzBiM2U3Mjk4YTY2YTYxZWU2YWIwMmE2NzYxZDY2NjY2NlwiKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCJhNmNlZTMxZjc4YjRiMmRmOGEzM2EwMmNmYjlhOTllMzFhMWNmZGJmNmZmZjdmMDBjYWIyZDY2YTNkOWFmZmZmOTliMTU5MjhcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyXCIpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcImIzZTJjZGZkY2RhY2NiZDVlOGY0Y2FlNGU2ZjVjOWZmZjJhZWYxZTJjY2NjY2NjY1wiKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCJlNDFhMWMzNzdlYjg0ZGFmNGE5ODRlYTNmZjdmMDBmZmZmMzNhNjU2MjhmNzgxYmY5OTk5OTlcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzXCIpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcIjhkZDNjN2ZmZmZiM2JlYmFkYWZiODA3MjgwYjFkM2ZkYjQ2MmIzZGU2OWZjY2RlNWQ5ZDlkOWJjODBiZGNjZWJjNWZmZWQ2ZlwiKTtcbiIsImltcG9ydCB7aW50ZXJwb2xhdGVSZ2JCYXNpc30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNjaGVtZSkge1xuICByZXR1cm4gaW50ZXJwb2xhdGVSZ2JCYXNpcyhzY2hlbWVbc2NoZW1lLmxlbmd0aCAtIDFdKTtcbn1cbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImQ4YjM2NWY1ZjVmNTVhYjRhY1wiLFxuICBcImE2NjExYWRmYzI3ZDgwY2RjMTAxODU3MVwiLFxuICBcImE2NjExYWRmYzI3ZGY1ZjVmNTgwY2RjMTAxODU3MVwiLFxuICBcIjhjNTEwYWQ4YjM2NWY2ZThjM2M3ZWFlNTVhYjRhYzAxNjY1ZVwiLFxuICBcIjhjNTEwYWQ4YjM2NWY2ZThjM2Y1ZjVmNWM3ZWFlNTVhYjRhYzAxNjY1ZVwiLFxuICBcIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZVwiLFxuICBcIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZVwiLFxuICBcIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMFwiLFxuICBcIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMFwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJhZjhkYzNmN2Y3Zjc3ZmJmN2JcIixcbiAgXCI3YjMyOTRjMmE1Y2ZhNmRiYTAwMDg4MzdcIixcbiAgXCI3YjMyOTRjMmE1Y2ZmN2Y3ZjdhNmRiYTAwMDg4MzdcIixcbiAgXCI3NjJhODNhZjhkYzNlN2Q0ZThkOWYwZDM3ZmJmN2IxYjc4MzdcIixcbiAgXCI3NjJhODNhZjhkYzNlN2Q0ZThmN2Y3ZjdkOWYwZDM3ZmJmN2IxYjc4MzdcIixcbiAgXCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzdcIixcbiAgXCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzdcIixcbiAgXCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWJcIixcbiAgXCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWJcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZTlhM2M5ZjdmN2Y3YTFkNzZhXCIsXG4gIFwiZDAxYzhiZjFiNmRhYjhlMTg2NGRhYzI2XCIsXG4gIFwiZDAxYzhiZjFiNmRhZjdmN2Y3YjhlMTg2NGRhYzI2XCIsXG4gIFwiYzUxYjdkZTlhM2M5ZmRlMGVmZTZmNWQwYTFkNzZhNGQ5MjIxXCIsXG4gIFwiYzUxYjdkZTlhM2M5ZmRlMGVmZjdmN2Y3ZTZmNWQwYTFkNzZhNGQ5MjIxXCIsXG4gIFwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxXCIsXG4gIFwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxXCIsXG4gIFwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5XCIsXG4gIFwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcIjk5OGVjM2Y3ZjdmN2YxYTM0MFwiLFxuICBcIjVlM2M5OWIyYWJkMmZkYjg2M2U2NjEwMVwiLFxuICBcIjVlM2M5OWIyYWJkMmY3ZjdmN2ZkYjg2M2U2NjEwMVwiLFxuICBcIjU0Mjc4ODk5OGVjM2Q4ZGFlYmZlZTBiNmYxYTM0MGIzNTgwNlwiLFxuICBcIjU0Mjc4ODk5OGVjM2Q4ZGFlYmY3ZjdmN2ZlZTBiNmYxYTM0MGIzNTgwNlwiLFxuICBcIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNlwiLFxuICBcIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNlwiLFxuICBcIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOFwiLFxuICBcIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOFwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlZjhhNjJmN2Y3Zjc2N2E5Y2ZcIixcbiAgXCJjYTAwMjBmNGE1ODI5MmM1ZGUwNTcxYjBcIixcbiAgXCJjYTAwMjBmNGE1ODJmN2Y3Zjc5MmM1ZGUwNTcxYjBcIixcbiAgXCJiMjE4MmJlZjhhNjJmZGRiYzdkMWU1ZjA2N2E5Y2YyMTY2YWNcIixcbiAgXCJiMjE4MmJlZjhhNjJmZGRiYzdmN2Y3ZjdkMWU1ZjA2N2E5Y2YyMTY2YWNcIixcbiAgXCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWNcIixcbiAgXCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWNcIixcbiAgXCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjFcIixcbiAgXCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjFcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZWY4YTYyZmZmZmZmOTk5OTk5XCIsXG4gIFwiY2EwMDIwZjRhNTgyYmFiYWJhNDA0MDQwXCIsXG4gIFwiY2EwMDIwZjRhNTgyZmZmZmZmYmFiYWJhNDA0MDQwXCIsXG4gIFwiYjIxODJiZWY4YTYyZmRkYmM3ZTBlMGUwOTk5OTk5NGQ0ZDRkXCIsXG4gIFwiYjIxODJiZWY4YTYyZmRkYmM3ZmZmZmZmZTBlMGUwOTk5OTk5NGQ0ZDRkXCIsXG4gIFwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkXCIsXG4gIFwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkXCIsXG4gIFwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhXCIsXG4gIFwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImZjOGQ1OWZmZmZiZjkxYmZkYlwiLFxuICBcImQ3MTkxY2ZkYWU2MWFiZDllOTJjN2JiNlwiLFxuICBcImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZDllOTJjN2JiNlwiLFxuICBcImQ3MzAyN2ZjOGQ1OWZlZTA5MGUwZjNmODkxYmZkYjQ1NzViNFwiLFxuICBcImQ3MzAyN2ZjOGQ1OWZlZTA5MGZmZmZiZmUwZjNmODkxYmZkYjQ1NzViNFwiLFxuICBcImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNFwiLFxuICBcImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNFwiLFxuICBcImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NVwiLFxuICBcImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NVwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmYzhkNTlmZmZmYmY5MWNmNjBcIixcbiAgXCJkNzE5MWNmZGFlNjFhNmQ5NmExYTk2NDFcIixcbiAgXCJkNzE5MWNmZGFlNjFmZmZmYmZhNmQ5NmExYTk2NDFcIixcbiAgXCJkNzMwMjdmYzhkNTlmZWUwOGJkOWVmOGI5MWNmNjAxYTk4NTBcIixcbiAgXCJkNzMwMjdmYzhkNTlmZWUwOGJmZmZmYmZkOWVmOGI5MWNmNjAxYTk4NTBcIixcbiAgXCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTBcIixcbiAgXCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTBcIixcbiAgXCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzdcIixcbiAgXCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzdcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmM4ZDU5ZmZmZmJmOTlkNTk0XCIsXG4gIFwiZDcxOTFjZmRhZTYxYWJkZGE0MmI4M2JhXCIsXG4gIFwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkZGE0MmI4M2JhXCIsXG4gIFwiZDUzZTRmZmM4ZDU5ZmVlMDhiZTZmNTk4OTlkNTk0MzI4OGJkXCIsXG4gIFwiZDUzZTRmZmM4ZDU5ZmVlMDhiZmZmZmJmZTZmNTk4OTlkNTk0MzI4OGJkXCIsXG4gIFwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkXCIsXG4gIFwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkXCIsXG4gIFwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyXCIsXG4gIFwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImU1ZjVmOTk5ZDhjOTJjYTI1ZlwiLFxuICBcImVkZjhmYmIyZTJlMjY2YzJhNDIzOGI0NVwiLFxuICBcImVkZjhmYmIyZTJlMjY2YzJhNDJjYTI1ZjAwNmQyY1wiLFxuICBcImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDJjYTI1ZjAwNmQyY1wiLFxuICBcImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNFwiLFxuICBcImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNFwiLFxuICBcImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNmQyYzAwNDQxYlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlMGVjZjQ5ZWJjZGE4ODU2YTdcIixcbiAgXCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODQxOWRcIixcbiAgXCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODU2YTc4MTBmN2NcIixcbiAgXCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4ODU2YTc4MTBmN2NcIixcbiAgXCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmJcIixcbiAgXCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmJcIixcbiAgXCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ4MTBmN2M0ZDAwNGJcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZTBmM2RiYThkZGI1NDNhMmNhXCIsXG4gIFwiZjBmOWU4YmFlNGJjN2JjY2M0MmI4Y2JlXCIsXG4gIFwiZjBmOWU4YmFlNGJjN2JjY2M0NDNhMmNhMDg2OGFjXCIsXG4gIFwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NDNhMmNhMDg2OGFjXCIsXG4gIFwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllXCIsXG4gIFwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllXCIsXG4gIFwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg2OGFjMDg0MDgxXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImZlZThjOGZkYmI4NGUzNGEzM1wiLFxuICBcImZlZjBkOWZkY2M4YWZjOGQ1OWQ3MzAxZlwiLFxuICBcImZlZjBkOWZkY2M4YWZjOGQ1OWUzNGEzM2IzMDAwMFwiLFxuICBcImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWUzNGEzM2IzMDAwMFwiLFxuICBcImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMFwiLFxuICBcImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMFwiLFxuICBcImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZmIzMDAwMDdmMDAwMFwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlY2UyZjBhNmJkZGIxYzkwOTlcIixcbiAgXCJmNmVmZjdiZGM5ZTE2N2E5Y2YwMjgxOGFcIixcbiAgXCJmNmVmZjdiZGM5ZTE2N2E5Y2YxYzkwOTkwMTZjNTlcIixcbiAgXCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YxYzkwOTkwMTZjNTlcIixcbiAgXCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTBcIixcbiAgXCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTBcIixcbiAgXCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTZjNTkwMTQ2MzZcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZWNlN2YyYTZiZGRiMmI4Y2JlXCIsXG4gIFwiZjFlZWY2YmRjOWUxNzRhOWNmMDU3MGIwXCIsXG4gIFwiZjFlZWY2YmRjOWUxNzRhOWNmMmI4Y2JlMDQ1YThkXCIsXG4gIFwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMmI4Y2JlMDQ1YThkXCIsXG4gIFwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiXCIsXG4gIFwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiXCIsXG4gIFwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDQ1YThkMDIzODU4XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImU3ZTFlZmM5OTRjN2RkMWM3N1wiLFxuICBcImYxZWVmNmQ3YjVkOGRmNjViMGNlMTI1NlwiLFxuICBcImYxZWVmNmQ3YjVkOGRmNjViMGRkMWM3Nzk4MDA0M1wiLFxuICBcImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGRkMWM3Nzk4MDA0M1wiLFxuICBcImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZlwiLFxuICBcImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZlwiLFxuICBcImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1Njk4MDA0MzY3MDAxZlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmZGUwZGRmYTlmYjVjNTFiOGFcIixcbiAgXCJmZWViZTJmYmI0YjlmNzY4YTFhZTAxN2VcIixcbiAgXCJmZWViZTJmYmI0YjlmNzY4YTFjNTFiOGE3YTAxNzdcIixcbiAgXCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFjNTFiOGE3YTAxNzdcIixcbiAgXCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzdcIixcbiAgXCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzdcIixcbiAgXCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzc0OTAwNmFcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZWRmOGIxN2ZjZGJiMmM3ZmI4XCIsXG4gIFwiZmZmZmNjYTFkYWI0NDFiNmM0MjI1ZWE4XCIsXG4gIFwiZmZmZmNjYTFkYWI0NDFiNmM0MmM3ZmI4MjUzNDk0XCIsXG4gIFwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MmM3ZmI4MjUzNDk0XCIsXG4gIFwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0XCIsXG4gIFwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0XCIsXG4gIFwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MjUzNDk0MDgxZDU4XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImY3ZmNiOWFkZGQ4ZTMxYTM1NFwiLFxuICBcImZmZmZjY2MyZTY5OTc4YzY3OTIzODQ0M1wiLFxuICBcImZmZmZjY2MyZTY5OTc4YzY3OTMxYTM1NDAwNjgzN1wiLFxuICBcImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTMxYTM1NDAwNjgzN1wiLFxuICBcImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMlwiLFxuICBcImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMlwiLFxuICBcImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNjgzNzAwNDUyOVwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmZmY3YmNmZWM0NGZkOTVmMGVcIixcbiAgXCJmZmZmZDRmZWQ5OGVmZTk5MjljYzRjMDJcIixcbiAgXCJmZmZmZDRmZWQ5OGVmZTk5MjlkOTVmMGU5OTM0MDRcIixcbiAgXCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjlkOTVmMGU5OTM0MDRcIixcbiAgXCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDRcIixcbiAgXCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDRcIixcbiAgXCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI5OTM0MDQ2NjI1MDZcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmZlZGEwZmViMjRjZjAzYjIwXCIsXG4gIFwiZmZmZmIyZmVjYzVjZmQ4ZDNjZTMxYTFjXCIsXG4gIFwiZmZmZmIyZmVjYzVjZmQ4ZDNjZjAzYjIwYmQwMDI2XCIsXG4gIFwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZjAzYjIwYmQwMDI2XCIsXG4gIFwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2XCIsXG4gIFwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2XCIsXG4gIFwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYmQwMDI2ODAwMDI2XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImRlZWJmNzllY2FlMTMxODJiZFwiLFxuICBcImVmZjNmZmJkZDdlNzZiYWVkNjIxNzFiNVwiLFxuICBcImVmZjNmZmJkZDdlNzZiYWVkNjMxODJiZDA4NTE5Y1wiLFxuICBcImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjMxODJiZDA4NTE5Y1wiLFxuICBcImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NFwiLFxuICBcImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NFwiLFxuICBcImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NTE5YzA4MzA2YlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlNWY1ZTBhMWQ5OWIzMWEzNTRcIixcbiAgXCJlZGY4ZTliYWU0YjM3NGM0NzYyMzhiNDVcIixcbiAgXCJlZGY4ZTliYWU0YjM3NGM0NzYzMWEzNTQwMDZkMmNcIixcbiAgXCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzYzMWEzNTQwMDZkMmNcIixcbiAgXCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzJcIixcbiAgXCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzJcIixcbiAgXCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDZkMmMwMDQ0MWJcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZjBmMGYwYmRiZGJkNjM2MzYzXCIsXG4gIFwiZjdmN2Y3Y2NjY2NjOTY5Njk2NTI1MjUyXCIsXG4gIFwiZjdmN2Y3Y2NjY2NjOTY5Njk2NjM2MzYzMjUyNTI1XCIsXG4gIFwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NjM2MzYzMjUyNTI1XCIsXG4gIFwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1XCIsXG4gIFwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1XCIsXG4gIFwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1MDAwMDAwXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImVmZWRmNWJjYmRkYzc1NmJiMVwiLFxuICBcImYyZjBmN2NiYzllMjllOWFjODZhNTFhM1wiLFxuICBcImYyZjBmN2NiYzllMjllOWFjODc1NmJiMTU0Mjc4ZlwiLFxuICBcImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODc1NmJiMTU0Mjc4ZlwiLFxuICBcImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NlwiLFxuICBcImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NlwiLFxuICBcImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzU0Mjc4ZjNmMDA3ZFwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmZWUwZDJmYzkyNzJkZTJkMjZcIixcbiAgXCJmZWU1ZDlmY2FlOTFmYjZhNGFjYjE4MWRcIixcbiAgXCJmZWU1ZDlmY2FlOTFmYjZhNGFkZTJkMjZhNTBmMTVcIixcbiAgXCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFkZTJkMjZhNTBmMTVcIixcbiAgXCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGRcIixcbiAgXCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGRcIixcbiAgXCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWRhNTBmMTU2NzAwMGRcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmVlNmNlZmRhZTZiZTY1NTBkXCIsXG4gIFwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZDk0NzAxXCIsXG4gIFwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZTY1NTBkYTYzNjAzXCIsXG4gIFwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZTY1NTBkYTYzNjAzXCIsXG4gIFwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0XCIsXG4gIFwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0XCIsXG4gIFwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxYTYzNjAzN2YyNzA0XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCB7Y3ViZWhlbGl4fSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nKGN1YmVoZWxpeCgzMDAsIDAuNSwgMC4wKSwgY3ViZWhlbGl4KC0yNDAsIDAuNSwgMS4wKSk7XG4iLCJpbXBvcnQge2N1YmVoZWxpeH0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQge2ludGVycG9sYXRlQ3ViZWhlbGl4TG9uZ30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCB2YXIgd2FybSA9IGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZyhjdWJlaGVsaXgoLTEwMCwgMC43NSwgMC4zNSksIGN1YmVoZWxpeCg4MCwgMS41MCwgMC44KSk7XG5cbmV4cG9ydCB2YXIgY29vbCA9IGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZyhjdWJlaGVsaXgoMjYwLCAwLjc1LCAwLjM1KSwgY3ViZWhlbGl4KDgwLCAxLjUwLCAwLjgpKTtcblxudmFyIGMgPSBjdWJlaGVsaXgoKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odCkge1xuICBpZiAodCA8IDAgfHwgdCA+IDEpIHQgLT0gTWF0aC5mbG9vcih0KTtcbiAgdmFyIHRzID0gTWF0aC5hYnModCAtIDAuNSk7XG4gIGMuaCA9IDM2MCAqIHQgLSAxMDA7XG4gIGMucyA9IDEuNSAtIDEuNSAqIHRzO1xuICBjLmwgPSAwLjggLSAwLjkgKiB0cztcbiAgcmV0dXJuIGMgKyBcIlwiO1xufVxuIiwiaW1wb3J0IHtyZ2J9IGZyb20gXCJkMy1jb2xvclwiO1xuXG52YXIgYyA9IHJnYigpLFxuICAgIHBpXzFfMyA9IE1hdGguUEkgLyAzLFxuICAgIHBpXzJfMyA9IE1hdGguUEkgKiAyIC8gMztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odCkge1xuICB2YXIgeDtcbiAgdCA9ICgwLjUgLSB0KSAqIE1hdGguUEk7XG4gIGMuciA9IDI1NSAqICh4ID0gTWF0aC5zaW4odCkpICogeDtcbiAgYy5nID0gMjU1ICogKHggPSBNYXRoLnNpbih0ICsgcGlfMV8zKSkgKiB4O1xuICBjLmIgPSAyNTUgKiAoeCA9IE1hdGguc2luKHQgKyBwaV8yXzMpKSAqIHg7XG4gIHJldHVybiBjICsgXCJcIjtcbn1cbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuXG5mdW5jdGlvbiByYW1wKHJhbmdlKSB7XG4gIHZhciBuID0gcmFuZ2UubGVuZ3RoO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiByYW5nZVtNYXRoLm1heCgwLCBNYXRoLm1pbihuIC0gMSwgTWF0aC5mbG9vcih0ICogbikpKV07XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoY29sb3JzKFwiNDQwMTU0NDQwMjU2NDUwNDU3NDUwNTU5NDYwNzVhNDYwODVjNDYwYTVkNDYwYjVlNDcwZDYwNDcwZTYxNDcxMDYzNDcxMTY0NDcxMzY1NDgxNDY3NDgxNjY4NDgxNzY5NDgxODZhNDgxYTZjNDgxYjZkNDgxYzZlNDgxZDZmNDgxZjcwNDgyMDcxNDgyMTczNDgyMzc0NDgyNDc1NDgyNTc2NDgyNjc3NDgyODc4NDgyOTc5NDcyYTdhNDcyYzdhNDcyZDdiNDcyZTdjNDcyZjdkNDYzMDdlNDYzMjdlNDYzMzdmNDYzNDgwNDUzNTgxNDUzNzgxNDUzODgyNDQzOTgzNDQzYTgzNDQzYjg0NDMzZDg0NDMzZTg1NDIzZjg1NDI0MDg2NDI0MTg2NDE0Mjg3NDE0NDg3NDA0NTg4NDA0Njg4M2Y0Nzg4M2Y0ODg5M2U0OTg5M2U0YTg5M2U0YzhhM2Q0ZDhhM2Q0ZThhM2M0ZjhhM2M1MDhiM2I1MThiM2I1MjhiM2E1MzhiM2E1NDhjMzk1NThjMzk1NjhjMzg1ODhjMzg1OThjMzc1YThjMzc1YjhkMzY1YzhkMzY1ZDhkMzU1ZThkMzU1ZjhkMzQ2MDhkMzQ2MThkMzM2MjhkMzM2MzhkMzI2NDhlMzI2NThlMzE2NjhlMzE2NzhlMzE2ODhlMzA2OThlMzA2YThlMmY2YjhlMmY2YzhlMmU2ZDhlMmU2ZThlMmU2ZjhlMmQ3MDhlMmQ3MThlMmM3MThlMmM3MjhlMmM3MzhlMmI3NDhlMmI3NThlMmE3NjhlMmE3NzhlMmE3ODhlMjk3OThlMjk3YThlMjk3YjhlMjg3YzhlMjg3ZDhlMjc3ZThlMjc3ZjhlMjc4MDhlMjY4MThlMjY4MjhlMjY4MjhlMjU4MzhlMjU4NDhlMjU4NThlMjQ4NjhlMjQ4NzhlMjM4ODhlMjM4OThlMjM4YThkMjI4YjhkMjI4YzhkMjI4ZDhkMjE4ZThkMjE4ZjhkMjE5MDhkMjE5MThjMjA5MjhjMjA5MjhjMjA5MzhjMWY5NDhjMWY5NThiMWY5NjhiMWY5NzhiMWY5ODhiMWY5OThhMWY5YThhMWU5YjhhMWU5Yzg5MWU5ZDg5MWY5ZTg5MWY5Zjg4MWZhMDg4MWZhMTg4MWZhMTg3MWZhMjg3MjBhMzg2MjBhNDg2MjFhNTg1MjFhNjg1MjJhNzg1MjJhODg0MjNhOTgzMjRhYTgzMjVhYjgyMjVhYzgyMjZhZDgxMjdhZDgxMjhhZTgwMjlhZjdmMmFiMDdmMmNiMTdlMmRiMjdkMmViMzdjMmZiNDdjMzFiNTdiMzJiNjdhMzRiNjc5MzViNzc5MzdiODc4MzhiOTc3M2FiYTc2M2JiYjc1M2RiYzc0M2ZiYzczNDBiZDcyNDJiZTcxNDRiZjcwNDZjMDZmNDhjMTZlNGFjMTZkNGNjMjZjNGVjMzZiNTBjNDZhNTJjNTY5NTRjNTY4NTZjNjY3NThjNzY1NWFjODY0NWNjODYzNWVjOTYyNjBjYTYwNjNjYjVmNjVjYjVlNjdjYzVjNjljZDViNmNjZDVhNmVjZTU4NzBjZjU3NzNkMDU2NzVkMDU0NzdkMTUzN2FkMTUxN2NkMjUwN2ZkMzRlODFkMzRkODRkNDRiODZkNTQ5ODlkNTQ4OGJkNjQ2OGVkNjQ1OTBkNzQzOTNkNzQxOTVkODQwOThkODNlOWJkOTNjOWRkOTNiYTBkYTM5YTJkYTM3YTVkYjM2YThkYjM0YWFkYzMyYWRkYzMwYjBkZDJmYjJkZDJkYjVkZTJiYjhkZTI5YmFkZTI4YmRkZjI2YzBkZjI1YzJkZjIzYzVlMDIxYzhlMDIwY2FlMTFmY2RlMTFkZDBlMTFjZDJlMjFiZDVlMjFhZDhlMjE5ZGFlMzE5ZGRlMzE4ZGZlMzE4ZTJlNDE4ZTVlNDE5ZTdlNDE5ZWFlNTFhZWNlNTFiZWZlNTFjZjFlNTFkZjRlNjFlZjZlNjIwZjhlNjIxZmJlNzIzZmRlNzI1XCIpKTtcblxuZXhwb3J0IHZhciBtYWdtYSA9IHJhbXAoY29sb3JzKFwiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTA5MDIwMjBiMDIwMjBkMDMwMzBmMDMwMzEyMDQwNDE0MDUwNDE2MDYwNTE4MDYwNTFhMDcwNjFjMDgwNzFlMDkwNzIwMGEwODIyMGIwOTI0MGMwOTI2MGQwYTI5MGUwYjJiMTAwYjJkMTEwYzJmMTIwZDMxMTMwZDM0MTQwZTM2MTUwZTM4MTYwZjNiMTgwZjNkMTkxMDNmMWExMDQyMWMxMDQ0MWQxMTQ3MWUxMTQ5MjAxMTRiMjExMTRlMjIxMTUwMjQxMjUzMjUxMjU1MjcxMjU4MjkxMTVhMmExMTVjMmMxMTVmMmQxMTYxMmYxMTYzMzExMTY1MzMxMDY3MzQxMDY5MzYxMDZiMzgxMDZjMzkwZjZlM2IwZjcwM2QwZjcxM2YwZjcyNDAwZjc0NDIwZjc1NDQwZjc2NDUxMDc3NDcxMDc4NDkxMDc4NGExMDc5NGMxMTdhNGUxMTdiNGYxMjdiNTExMjdjNTIxMzdjNTQxMzdkNTYxNDdkNTcxNTdlNTkxNTdlNWExNjdlNWMxNjdmNWQxNzdmNWYxODdmNjAxODgwNjIxOTgwNjQxYTgwNjUxYTgwNjcxYjgwNjgxYzgxNmExYzgxNmIxZDgxNmQxZDgxNmUxZTgxNzAxZjgxNzIxZjgxNzMyMDgxNzUyMTgxNzYyMTgxNzgyMjgxNzkyMjgyN2IyMzgyN2MyMzgyN2UyNDgyODAyNTgyODEyNTgxODMyNjgxODQyNjgxODYyNzgxODgyNzgxODkyODgxOGIyOTgxOGMyOTgxOGUyYTgxOTAyYTgxOTEyYjgxOTMyYjgwOTQyYzgwOTYyYzgwOTgyZDgwOTkyZDgwOWIyZTdmOWMyZTdmOWUyZjdmYTAyZjdmYTEzMDdlYTMzMDdlYTUzMTdlYTYzMTdkYTgzMjdkYWEzMzdkYWIzMzdjYWQzNDdjYWUzNDdiYjAzNTdiYjIzNTdiYjMzNjdhYjUzNjdhYjczNzc5YjgzNzc5YmEzODc4YmMzOTc4YmQzOTc3YmYzYTc3YzAzYTc2YzIzYjc1YzQzYzc1YzUzYzc0YzczZDczYzgzZTczY2EzZTcyY2MzZjcxY2Q0MDcxY2Y0MDcwZDA0MTZmZDI0MjZmZDM0MzZlZDU0NDZkZDY0NTZjZDg0NTZjZDk0NjZiZGI0NzZhZGM0ODY5ZGU0OTY4ZGY0YTY4ZTA0YzY3ZTI0ZDY2ZTM0ZTY1ZTQ0ZjY0ZTU1MDY0ZTc1MjYzZTg1MzYyZTk1NDYyZWE1NjYxZWI1NzYwZWM1ODYwZWQ1YTVmZWU1YjVlZWY1ZDVlZjA1ZjVlZjE2MDVkZjI2MjVkZjI2NDVjZjM2NTVjZjQ2NzVjZjQ2OTVjZjU2YjVjZjY2YzVjZjY2ZTVjZjc3MDVjZjc3MjVjZjg3NDVjZjg3NjVjZjk3ODVkZjk3OTVkZjk3YjVkZmE3ZDVlZmE3ZjVlZmE4MTVmZmI4MzVmZmI4NTYwZmI4NzYxZmM4OTYxZmM4YTYyZmM4YzYzZmM4ZTY0ZmM5MDY1ZmQ5MjY2ZmQ5NDY3ZmQ5NjY4ZmQ5ODY5ZmQ5YTZhZmQ5YjZiZmU5ZDZjZmU5ZjZkZmVhMTZlZmVhMzZmZmVhNTcxZmVhNzcyZmVhOTczZmVhYTc0ZmVhYzc2ZmVhZTc3ZmViMDc4ZmViMjdhZmViNDdiZmViNjdjZmViNzdlZmViOTdmZmViYjgxZmViZDgyZmViZjg0ZmVjMTg1ZmVjMjg3ZmVjNDg4ZmVjNjhhZmVjODhjZmVjYThkZmVjYzhmZmVjZDkwZmVjZjkyZmVkMTk0ZmVkMzk1ZmVkNTk3ZmVkNzk5ZmVkODlhZmRkYTljZmRkYzllZmRkZWEwZmRlMGExZmRlMmEzZmRlM2E1ZmRlNWE3ZmRlN2E5ZmRlOWFhZmRlYmFjZmNlY2FlZmNlZWIwZmNmMGIyZmNmMmI0ZmNmNGI2ZmNmNmI4ZmNmN2I5ZmNmOWJiZmNmYmJkZmNmZGJmXCIpKTtcblxuZXhwb3J0IHZhciBpbmZlcm5vID0gcmFtcChjb2xvcnMoXCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTRcIikpO1xuXG5leHBvcnQgdmFyIHBsYXNtYSA9IHJhbXAoY29sb3JzKFwiMGQwODg3MTAwNzg4MTMwNzg5MTYwNzhhMTkwNjhjMWIwNjhkMWQwNjhlMjAwNjhmMjIwNjkwMjQwNjkxMjYwNTkxMjgwNTkyMmEwNTkzMmMwNTk0MmUwNTk1MmYwNTk2MzEwNTk3MzMwNTk3MzUwNDk4MzcwNDk5MzgwNDlhM2EwNDlhM2MwNDliM2UwNDljM2YwNDljNDEwNDlkNDMwMzllNDQwMzllNDYwMzlmNDgwMzlmNDkwM2EwNGIwM2ExNGMwMmExNGUwMmEyNTAwMmEyNTEwMmEzNTMwMmEzNTUwMmE0NTYwMWE0NTgwMWE0NTkwMWE1NWIwMWE1NWMwMWE2NWUwMWE2NjAwMWE2NjEwMGE3NjMwMGE3NjQwMGE3NjYwMGE3NjcwMGE4NjkwMGE4NmEwMGE4NmMwMGE4NmUwMGE4NmYwMGE4NzEwMGE4NzIwMWE4NzQwMWE4NzUwMWE4NzcwMWE4NzgwMWE4N2EwMmE4N2IwMmE4N2QwM2E4N2UwM2E4ODAwNGE4ODEwNGE3ODMwNWE3ODQwNWE3ODYwNmE2ODcwN2E2ODgwOGE2OGEwOWE1OGIwYWE1OGQwYmE1OGUwY2E0OGYwZGE0OTEwZWEzOTIwZmEzOTQxMGEyOTUxMWExOTYxM2ExOTgxNGEwOTkxNTlmOWExNjlmOWMxNzllOWQxODlkOWUxOTlkYTAxYTljYTExYjliYTIxZDlhYTMxZTlhYTUxZjk5YTYyMDk4YTcyMTk3YTgyMjk2YWEyMzk1YWIyNDk0YWMyNjk0YWQyNzkzYWUyODkyYjAyOTkxYjEyYTkwYjIyYjhmYjMyYzhlYjQyZThkYjUyZjhjYjYzMDhiYjczMThhYjgzMjg5YmEzMzg4YmIzNDg4YmMzNTg3YmQzNzg2YmUzODg1YmYzOTg0YzAzYTgzYzEzYjgyYzIzYzgxYzMzZDgwYzQzZTdmYzU0MDdlYzY0MTdkYzc0MjdjYzg0MzdiYzk0NDdhY2E0NTdhY2I0Njc5Y2M0Nzc4Y2M0OTc3Y2Q0YTc2Y2U0Yjc1Y2Y0Yzc0ZDA0ZDczZDE0ZTcyZDI0ZjcxZDM1MTcxZDQ1MjcwZDU1MzZmZDU1NDZlZDY1NTZkZDc1NjZjZDg1NzZiZDk1ODZhZGE1YTZhZGE1YjY5ZGI1YzY4ZGM1ZDY3ZGQ1ZTY2ZGU1ZjY1ZGU2MTY0ZGY2MjYzZTA2MzYzZTE2NDYyZTI2NTYxZTI2NjYwZTM2ODVmZTQ2OTVlZTU2YTVkZTU2YjVkZTY2YzVjZTc2ZTViZTc2ZjVhZTg3MDU5ZTk3MTU4ZTk3MjU3ZWE3NDU3ZWI3NTU2ZWI3NjU1ZWM3NzU0ZWQ3OTUzZWQ3YTUyZWU3YjUxZWY3YzUxZWY3ZTUwZjA3ZjRmZjA4MDRlZjE4MTRkZjE4MzRjZjI4NDRiZjM4NTRiZjM4NzRhZjQ4ODQ5ZjQ4OTQ4ZjU4YjQ3ZjU4YzQ2ZjY4ZDQ1ZjY4ZjQ0Zjc5MDQ0Zjc5MTQzZjc5MzQyZjg5NDQxZjg5NTQwZjk5NzNmZjk5ODNlZjk5YTNlZmE5YjNkZmE5YzNjZmE5ZTNiZmI5ZjNhZmJhMTM5ZmJhMjM4ZmNhMzM4ZmNhNTM3ZmNhNjM2ZmNhODM1ZmNhOTM0ZmRhYjMzZmRhYzMzZmRhZTMyZmRhZjMxZmRiMTMwZmRiMjJmZmRiNDJmZmRiNTJlZmViNzJkZmViODJjZmViYTJjZmViYjJiZmViZDJhZmViZTJhZmVjMDI5ZmRjMjI5ZmRjMzI4ZmRjNTI3ZmRjNjI3ZmRjODI3ZmRjYTI2ZmRjYjI2ZmNjZDI1ZmNjZTI1ZmNkMDI1ZmNkMjI1ZmJkMzI0ZmJkNTI0ZmJkNzI0ZmFkODI0ZmFkYTI0ZjlkYzI0ZjlkZDI1ZjhkZjI1ZjhlMTI1ZjdlMjI1ZjdlNDI1ZjZlNjI2ZjZlODI2ZjVlOTI2ZjVlYjI3ZjRlZDI3ZjNlZTI3ZjNmMDI3ZjJmMjI3ZjFmNDI2ZjFmNTI1ZjBmNzI0ZjBmOTIxXCIpKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IMKpIDIwMTUgLSAyMDE4IFRoZSBCcm9hZCBJbnN0aXR1dGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSAoaHR0cHM6Ly9naXRodWIuY29tL2Jyb2FkaW5zdGl0dXRlL2d0ZXgtdml6L2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQpXG4gKi9cbmltcG9ydCB7bWF4fSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7c2NhbGVTZXF1ZW50aWFsfSBmcm9tIFwiZDMtc2NhbGVcIjtcbmltcG9ydCAqIGFzIGQzQ2hyb21hdGljIGZyb20gXCJkMy1zY2FsZS1jaHJvbWF0aWNcIjtcblwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY29sb3JDaGFydChzaHVmZmxlPXRydWUpe1xuICAgIC8vIHJlZiBpbGx1c3RyYXRvciBjb2xvciB0aGVtZXNcbiAgICBjb25zdCBjb2xvcnMgPSBbXG4gICAgICAgIFwicmdiKDEwMCwxMTgsMTIwKVwiLFxuICAgICAgICBcInJnYigxMDEsMTQxLDE0NSlcIixcbiAgICAgICAgXCJyZ2IoMTAzLDEyNiw4MilcIixcbiAgICAgICAgXCJyZ2IoMTAzLDE4NCwyMjIpXCIsXG4gICAgICAgIFwicmdiKDEwOCwxMTAsODgpXCIsXG5cbiAgICAgICAgXCJyZ2IoMTA4LDE0NywxMjgpXCIsXG4gICAgICAgIFwicmdiKDExOSwxNDQsMTgyKVwiLFxuICAgICAgICBcInJnYigxMjYsMTMwLDEyMilcIixcbiAgICAgICAgXCJyZ2IoMTMzLDE3MywxODYpXCIsXG4gICAgICAgIFwicmdiKDEzNywxMTQsOTEpXCIsXG4gICAgICAgIFwicmdiKDE0NSwxNzAsMTU3KVwiLFxuXG4gICAgICAgIFwicmdiKDE0NSwyMDEsMjMyKVwiLFxuICAgICAgICBcInJnYigxNDcsMTA1LDY2KVwiLFxuICAgICAgICBcInJnYigxNTksMTE0LDExNilcIixcbiAgICAgICAgXCJyZ2IoMTU5LDE4OCwxOTEpXCIsXG4gICAgICAgIFwicmdiKDE1OSwyMjksMTk0KVwiLFxuICAgICAgICBcInJnYigxNjMsMTYzLDE3MSlcIixcblxuICAgICAgICBcInJnYigxNjQsMjA3LDE5MClcIixcbiAgICAgICAgXCJyZ2IoMTcyLDEwOCwxMzApXCIsXG4gICAgICAgIFwicmdiKDE3Myw4NCwxMTQpXCIsXG4gICAgICAgIFwicmdiKDE3NCwxOTUsMjIyKVwiLFxuICAgICAgICBcInJnYigxNzYsMjA0LDE1MylcIixcblxuICAgICAgICBcInJnYigxNzksMTgwLDE1MClcIixcbiAgICAgICAgXCJyZ2IoMTgwLDIyMCwyMzcpXCIsXG4gICAgICAgIFwicmdiKDE4MywyMDIsMTIxKVwiLFxuICAgICAgICBcInJnYigxOTIsMjAyLDg1KVwiLFxuICAgICAgICBcInJnYigxOTMsMTkxLDE5M1wiLFxuICAgICAgICBcInJnYigxOTUsOTcsMTM2KVwiLFxuXG4gICAgICAgIFwicmdiKDE5OSwxMjEsMTAyKVwiLFxuICAgICAgICBcInJnYigyMDcsMjAyLDc2KVwiLFxuICAgICAgICBcInJnYigyMDksMjE5LDE4OSlcIixcbiAgICAgICAgXCJyZ2IoMjEzLDI1MSwyNTUpXCIsXG4gICAgICAgIFwicmdiKDIxNSw5NCw1NilcIixcblxuICAgICAgICBcInJnYigyMTgsMTE0LDEyNilcIixcbiAgICAgICAgXCJyZ2IoMjIzLDkwLDczKVwiLFxuICAgICAgICBcInJnYigyMjQsMjQ3LDIxNylcIixcbiAgICAgICAgXCJyZ2IoMjI3LDIwNSwxNjQpXCIsXG4gICAgICAgIFwicmdiKDIyOCwxNjgsMTg1KVwiLFxuXG4gICAgICAgIFwicmdiKDIzMCwxNzYsMTUyKVwiLFxuICAgICAgICBcInJnYigyMzIsMjEyLDE3NSlcIixcbiAgICAgICAgXCJyZ2IoMjM5LDIwMSw3NilcIixcbiAgICAgICAgXCJyZ2IoMjQwLDEyNCwxMDgpXCIsXG4gICAgICAgIFwicmdiKDI0NiwyMzIsMTc3KVwiLFxuXG4gICAgICAgIFwicmdiKDI0OSwyMjgsMTczKVwiLFxuICAgICAgICBcInJnYigyNTIsMjQ1LDE5MSlcIixcbiAgICAgICAgXCJyZ2IoMjU1LDE4OCwxMDMpXCIsXG4gICAgICAgIFwicmdiKDQ1LDk0LDExMClcIixcbiAgICAgICAgXCJyZ2IoNTEsMTUzLDIwNClcIixcblxuICAgICAgICBcInJnYig2MCwxMjQsMTQ1KVwiLFxuICAgICAgICBcInJnYig2Miw4NywxNDUpXCIsXG4gICAgICAgIFwicmdiKDY1LDExNSwxMjApXCIsXG4gICAgICAgIFwicmdiKDg5LDIxNiwyMjkpXCIsXG4gICAgICAgIFwicmdiKDk0LDE3OCwxNTMpXCIsXG4gICAgICAgIFwicmdiKDk1LDEyNCwxMzQpXCJcbiAgICBdO1xuXG4gICAgaWYgKHNodWZmbGUpIHJldHVybiBzaHVmZmxlQ29sb3JzKGNvbG9ycyk7XG4gICAgcmV0dXJuIGNvbG9ycztcbn1cblxuZnVuY3Rpb24gc2h1ZmZsZUNvbG9ycyhhcnJheSkge1xuICAgIC8vIEZpc2hlci1ZYXRlcyBzaHVmZmxlXG4gICAgbGV0IGNvdW50ZXIgPSBhcnJheS5sZW5ndGg7XG5cbiAgICAvLyBXaGlsZSB0aGVyZSBhcmUgZWxlbWVudHMgaW4gdGhlIGFycmF5XG4gICAgd2hpbGUgKGNvdW50ZXIgPiAwKSB7XG4gICAgICAgIC8vIFBpY2sgYSByYW5kb20gaW5kZXhcbiAgICAgICAgbGV0IGluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY291bnRlcik7XG5cbiAgICAgICAgLy8gRGVjcmVhc2UgY291bnRlciBieSAxXG4gICAgICAgIGNvdW50ZXItLTtcblxuICAgICAgICAvLyBBbmQgc3dhcCB0aGUgbGFzdCBlbGVtZW50IHdpdGggaXRcbiAgICAgICAgbGV0IHRlbXAgPSBhcnJheVtjb3VudGVyXTtcbiAgICAgICAgYXJyYXlbY291bnRlcl0gPSBhcnJheVtpbmRleF07XG4gICAgICAgIGFycmF5W2luZGV4XSA9IHRlbXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG4vKipcbiAqIGdldCBhIGNvbG9yIGludGVycG9sYXRvclxuICogQHBhcmFtIG5hbWUge2VudW19OiBCdUduLCBPclJkLi4uLlxuICogQHJldHVybnMgeyp9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2xvckludGVycG9sYXRvcihuYW1lKXtcbiAgICAvLyByZWZlcmVuY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9kMy9kMy1zY2FsZS1jaHJvbWF0aWMvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI3NlcXVlbnRpYWwtbXVsdGktaHVlXG4gICAgY29uc3QgaW50ZXJwb2xhdG9ycyA9IHtcbiAgICAgICAgQnVHbjogZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVCdUduLFxuICAgICAgICBPclJkOiBkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZU9yUmQsXG4gICAgICAgIFB1QnU6IGQzQ2hyb21hdGljLmludGVycG9sYXRlUHVCdSxcbiAgICAgICAgWWxHbkJ1OiBkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZVlsR25CdSxcbiAgICAgICAgQmx1ZXM6IGQzQ2hyb21hdGljLmludGVycG9sYXRlQmx1ZXMsXG4gICAgICAgIE9yYW5nZXM6IGQzQ2hyb21hdGljLmludGVycG9sYXRlT3JhbmdlcyxcbiAgICAgICAgR3JlZW5zOiBkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZUdyZWVucyxcbiAgICAgICAgUHVycGxlczogZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVQdXJwbGVzLFxuICAgICAgICBSZWRzOiBkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZVJlZHMsXG4gICAgICAgIEdyZXlzOiBkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZUdyZXlzLFxuICAgICAgICBHcmF5czogZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVHcmV5c1xuICAgIH07XG4gICAgaWYgKCFpbnRlcnBvbGF0b3JzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIGNvbnN0IGVyciA9IFwiVW5yZWNvZ25pemVkIGNvbG9yOiBcIiArIG5hbWU7XG4gICAgICAgIGFsZXJ0KGVycik7XG4gICAgICAgIHRocm93KGVycik7XG4gICAgfVxuICAgIHJldHVybiBpbnRlcnBvbGF0b3JzW25hbWVdO1xufVxuXG4vKipcbiAqIHJlZmVyZW5jZTogaHR0cHM6Ly9naXRodWIuY29tL2QzL2QzLXNjYWxlXG4gKiByZWZlcmVuY2U6IGh0dHA6Ly9ibC5vY2tzLm9yZy9jdXJyYW4vMzA5NGIzN2U2M2I5MThiYWIwYTA2Nzg3ZTE2MTYwN2JcbiAqIHNjYWxlU2VxdWVudGlhbCBtYXBzIHRoZSBjb250aW51b3VzIGRvbWFpbiB0byBhIGNvbnRpbnVvdXMgY29sb3Igc2NhbGVcbiAqIEBwYXJhbSBkYXRhIHtMaXN0fSBvZiBudW1lcmljYWwgZGF0YVxuICogQHBhcmFtIGNvbG9ycyB7U3RyaW5nfSBhIGNvbG9yIG5hbWUgdGhhdCBpcyBhdmFpbGFibGUgaW4gZ2V0Q29sb3JJbnRlcnBvbGF0b3IoKVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29sb3JTY2FsZShkYXRhLCBjb2xvcnM9XCJZbEduQnVcIiwgZG1pbiA9IDApIHtcbiAgICAvLyBsZXQgZG1heCA9IE1hdGgucm91bmQobWF4KGRhdGEpKTtcbiAgICBsZXQgZG1heCA9IG1heChkYXRhKTtcbiAgICBjb25zdCBzY2FsZSA9IHNjYWxlU2VxdWVudGlhbChnZXRDb2xvckludGVycG9sYXRvcihjb2xvcnMpKTtcbiAgICBzY2FsZS5kb21haW4oW2RtaW4sIGRtYXhdKTtcbiAgICByZXR1cm4gc2NhbGU7XG59XG5cbi8qKlxuICogRHJhdyBhIGNvbG9yIGxlZ2VuZCBiYXIuXG4gKiBEZXBlbmRlbmNpZXM6IGV4cHJlc3Npb25NYXAuY3NzXG4gKiBAcGFyYW0gdGl0bGUge1N0cmluZ31cbiAqIEBwYXJhbSBkb20ge29iamVjdH0gRDMgZG9tIG9iamVjdFxuICogQHBhcmFtIHNjYWxlIHtPYmplY3R9IEQzIHNjYWxlIG9mIHRoZSBjb2xvclxuICogQHBhcmFtIGNvbmZpZyB7T2JqZWN0fSB3aXRoIGF0dHI6IHgsIHlcbiAqIEBwYXJhbSB1c2VMb2cge0Jvb2xlYW59XG4gKiBAcGFyYW0gb3JpZW50YXRpb24ge2VudW19IGggb3IgdiwgaS5lLiBob3Jpem9udGFsIG9yIHZlcnRpY2FsXG4gKiBAcGFyYW0gY2VsbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd0NvbG9yTGVnZW5kKHRpdGxlLCBkb20sIHNjYWxlLCBjb25maWcsIHVzZUxvZywgdGlja3M9MTAsIGJhc2U9MTAsIGNlbGw9e2g6MTAsIHc6NDB9LCBvcmllbnRhdGlvbj1cImhcIil7XG4gICAgbGV0IHJhbmdlID0gWy4uLkFycmF5KHRpY2tzKzEpLmtleXMoKV07XG4gICAgbGV0IGludGVydmFsID0gc2NhbGUuZG9tYWluKClbMV0vdGlja3M7XG4gICAgY29uc3QgZGF0YSA9IHJhbmdlLm1hcCgoZCk9PmQqaW50ZXJ2YWwpO1xuXG4gICAgLy8gbGVnZW5kIGdyb3Vwc1xuICAgIGNvbnN0IGxlZ2VuZHMgPSBkb20uYXBwZW5kKFwiZ1wiKS5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHtjb25maWcueH0sICR7Y29uZmlnLnl9KWApXG4gICAgICAgICAgICAgICAgICAgIC5zZWxlY3RBbGwoXCIubGVnZW5kXCIpLmRhdGEoZGF0YSk7XG5cbiAgICBjb25zdCBnID0gbGVnZW5kcy5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcImxlZ2VuZFwiLCB0cnVlKTtcblxuICAgIGlmIChvcmllbnRhdGlvbiA9PSAnaCcpe1xuICAgICAgICAgLy8gbGVnZW5kIHRpdGxlXG4gICAgICAgIGRvbS5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiY29sb3ItbGVnZW5kXCIpXG4gICAgICAgICAgICAudGV4dCh0aXRsZSlcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCAtMTApXG4gICAgICAgICAgICAuYXR0cihcInRleHQtYW5jaG9yXCIsIFwiZW5kXCIpXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgY2VsbC5oKVxuICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke2NvbmZpZy54fSwgJHtjb25maWcueX0pYCk7XG5cbiAgICAgICAgLy8gdGhlIGNvbG9yIGxlZ2VuZFxuICAgICAgICBnLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCAoZCwgaSkgPT4gY2VsbC53KmkpXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgNSlcbiAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgY2VsbC53KVxuICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgY2VsbC5oKVxuICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBzY2FsZSk7XG5cbiAgICAgICAgZy5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiY29sb3ItbGVnZW5kXCIpXG4gICAgICAgICAgICAudGV4dCgoZCkgPT4gdXNlTG9nPyhNYXRoLnBvdyhiYXNlLCBkKSkudG9QcmVjaXNpb24oMik6ZC50b1ByZWNpc2lvbigyKSlcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCAoZCwgaSkgPT4gY2VsbC53ICogaSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAgLy8gbGVnZW5kIHRpdGxlXG4gICAgICAgIGRvbS5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiY29sb3ItbGVnZW5kXCIpXG4gICAgICAgICAgICAudGV4dCh0aXRsZSlcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCA1KVxuICAgICAgICAgICAgLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcInN0YXJ0XCIpXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgMClcbiAgICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHtjb25maWcueH0sICR7Y29uZmlnLnkgKyBjZWxsLmggKiBkYXRhLmxlbmd0aH0pcm90YXRlKDkwKWApO1xuXG4gICAgICAgIGcuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIDApXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgKGQsIGkpID0+IGNlbGwuaCppKVxuICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBjZWxsLncpXG4gICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBjZWxsLmgpXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIHNjYWxlKTtcblxuICAgICAgICBnLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJjb2xvci1sZWdlbmRcIilcbiAgICAgICAgICAgIC50ZXh0KChkKSA9PiB1c2VMb2c/KE1hdGgucG93KGJhc2UsIGQpLTEpLnRvUHJlY2lzaW9uKDIpOmQudG9QcmVjaXNpb24oMikpXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgMTUpXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgKGQsIGkpID0+IGNlbGwuaCAqIGkgKyAoY2VsbC5oLzIpKTtcbiAgICB9XG5cblxuXG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuLyoqXG4gKiBDcmVhdGUgYSB0b29sYmFyXG4gKiBUaGlzIGNsYXNzIHVzZXMgYSBsb3Qgb2YgalF1ZXJ5IGZvciBkb20gZWxlbWVudCBtYW5pcHVsYXRpb25cbiAqL1xuXG5pbXBvcnQge3NlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtwYXJzZUNzc1N0eWxlc30gZnJvbSBcIi4vdXRpbHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9vbGJhciB7XG4gICAgY29uc3RydWN0b3IoZG9tSWQsIHRvb2x0aXA9dW5kZWZpbmVkLCB2ZXJ0aWNhbD1mYWxzZSl7XG4gICAgICAgICQoYCMke2RvbUlkfWApLnNob3coKTsgLy8gaWYgaGlkZGVuXG5cbiAgICAgICAgLy8gYWRkIGEgbmV3IGJhcmdyb3VwIGRpdiB0byBkb21JRCB3aXRoIGJvb3RzdHJhcCBidXR0b24gY2xhc3Nlc1xuICAgICAgICBjb25zdCBidG5DbGFzc2VzID0gdmVydGljYWw/J2J0bi1ncm91cC12ZXJ0aWNhbCBidG4tZ3JvdXAtc20nOiAnYnRuLWdyb3VwIGJ0bi1ncm91cC1zbSc7XG4gICAgICAgIHRoaXMuYmFyID0gJCgnPGRpdi8+JykuYWRkQ2xhc3MoYnRuQ2xhc3NlcykuYXBwZW5kVG8oYCMke2RvbUlkfWApO1xuICAgICAgICB0aGlzLmJ1dHRvbnMgPSB7fTtcbiAgICAgICAgdGhpcy50b29sdGlwID0gdG9vbHRpcDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBkb3dubG9hZCBidXR0b24gZm9yIFNWR1xuICAgICAqIEBwYXJhbSBpZCB7U3RyaW5nfSB0aGUgYnV0dG9uIGRvbSBJRFxuICAgICAqIEBwYXJhbSBzdmdJZCB7U3RyaW5nfSB0aGUgU1ZHIGRvbSBJRCB0byBncmFiIGFuZCBkb3dubG9hZFxuICAgICAqIEBwYXJhbSBvdXRmaWxlTmFtZSB7U3RyaW5nfSB0aGUgZG93bmxvYWQgZmlsZSBuYW1lXG4gICAgICogQHBhcmFtIGNsb25lSWQge1N0cmluZ30gdGhlIGNsb25lZCBTVkcgZG9tIElEXG4gICAgICogQHBhcmFtIGljb24ge1N0cmluZ30gYSBmb250YXdlc29tZSdzIGljb24gY2xhc3MgbmFtZVxuICAgICAqL1xuICAgIGNyZWF0ZURvd25sb2FkU3ZnQnV0dG9uKGlkLCBzdmdJZCwgb3V0ZmlsZU5hbWUsIGNsb25lSWQsIGljb249J2ZhLWRvd25sb2FkJyl7XG4gICAgICAgIGNvbnN0ICRidXR0b24gPSB0aGlzLmNyZWF0ZUJ1dHRvbihpZCwgaWNvbik7XG4gICAgICAgIHNlbGVjdChgIyR7aWR9YClcbiAgICAgICAgICAgIC5vbignY2xpY2snLCAoKT0+e1xuICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRTdmcoc3ZnSWQsIG91dGZpbGVOYW1lLCBjbG9uZUlkKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAub24oJ21vdXNlb3ZlcicsICgpPT57XG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwLnNob3coXCJEb3dubG9hZFwiKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAub24oJ21vdXNlb3V0JywgKCk9PntcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAuaGlkZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVzZXRCdXR0b24oaWQsIGNhbGxiYWNrLCBpY29uPSdmYS1leHBhbmQtYXJyb3dzLWFsdCcpe1xuICAgICAgICBjb25zdCAkYnV0dG9uID0gdGhpcy5jcmVhdGVCdXR0b24oaWQsIGljb24pO1xuICAgICAgICBzZWxlY3QoYCMke2lkfWApXG4gICAgICAgICAgICAub24oJ2NsaWNrJywgY2FsbGJhY2spXG4gICAgICAgICAgICAub24oJ21vdXNlb3ZlcicsICgpPT57XG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwLnNob3coXCJSZXNldCB0aGUgc2NhbGVzXCIpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5vbignbW91c2VvdXQnLCAoKT0+e1xuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcC5oaWRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjcmVhdGUgYSBidXR0b24gdG8gdGhlIHRvb2xiYXJcbiAgICAgKiBAcGFyYW0gaWQge1N0cmluZ30gdGhlIGJ1dHRvbidzIGlkXG4gICAgICogQHBhcmFtIGljb24ge1N0cmluZ30gYSBmb250YXdlc29tZSBpY29uIGNsYXNzXG4gICAgICogRGVwZW5kZW5jaWVzOiBCb290c3RyYXAsIGpRdWVyeSwgRm9udGF3ZXNvbWVcbiAgICAgKi9cbiAgICBjcmVhdGVCdXR0b24oaWQsIGljb249J2ZhLWRvd25sb2FkJyl7XG4gICAgICAgIGNvbnN0ICRidXR0b24gPSAkKCc8YS8+JykuYXR0cignaWQnLCBpZClcbiAgICAgICAgICAgIC5hZGRDbGFzcygnYnRuIGJ0bi1kZWZhdWx0JykuYXBwZW5kVG8odGhpcy5iYXIpO1xuICAgICAgICAkKCc8aS8+JykuYWRkQ2xhc3MoYGZhICR7aWNvbn1gKS5hcHBlbmRUbygkYnV0dG9uKTtcbiAgICAgICAgdGhpcy5idXR0b25zW2lkXSA9ICRidXR0b247XG4gICAgICAgIHJldHVybiAkYnV0dG9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGF0dGFjaCBhIHRvb2x0aXAgZG9tIHdpdGggdGhlIHRvb2xiYXJcbiAgICAgKiBAcGFyYW0gdG9vbHRpcCB7VG9vbHRpcH1cbiAgICAgKi9cbiAgICBhdHRhY2hUb29sdGlwKHRvb2x0aXApe1xuICAgICAgICB0aGlzLnRvb2x0aXAgPSB0b29sdGlwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERvd25sb2FkIFNWRyBvYmpcbiAgICAgKiBAcGFyYW0gc3ZnSWQge1N0cmluZ30gdGhlIFNWRyBkb20gSURcbiAgICAgKiBAcGFyYW0gZmlsZU5hbWUge1N0cmluZ30gdGhlIG91dHB1dCBmaWxlIG5hbWVcbiAgICAgKiBAcGFyYW0gY2xvbmVJZCB7U3RyaW5nfSB0aGUgdGVtcG9yYXJ5IGRvbSBJRCB0byBjb3B5IHRoZSBTVkcgdG9cbiAgICAgKiBEZXBlbmRlbmNpZXM6IEZpbGVTYXZlclxuICAgICAqL1xuICAgIGRvd25sb2FkU3ZnKHN2Z0lkLCBmaWxlTmFtZSwgY2xvbmVJZCl7XG4gICAgICAgIC8vIGxldCBzdmdPYmogPSAkKCQoJChgJHtcIiNcIiArc3ZnSWR9IHN2Z2ApKVswXSk7IC8vIGNvbXBsaWNhdGVkIGpRdWVyeSB0byBnZXQgdG8gdGhlIFNWRyBvYmplY3RcbiAgICAgICAgbGV0IHN2Z09iaiA9ICQoJCgkKGAke1wiI1wiICtzdmdJZH1gKSlbMF0pO1xuICAgICAgICBsZXQgJHN2Z0NvcHkgPSBzdmdPYmouY2xvbmUoKVxuICAgICAgICAuYXR0cihcInZlcnNpb25cIiwgXCIxLjFcIilcbiAgICAgICAgLmF0dHIoXCJ4bWxuc1wiLCBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIpO1xuXG4gICAgICAgIC8vIHBhcnNlIGFuZCBhZGQgYWxsIHRoZSBDU1Mgc3R5bGluZyB1c2VkIGJ5IHRoZSBTVkdcbiAgICAgICAgbGV0IHN0eWxlcyA9IHBhcnNlQ3NzU3R5bGVzKHN2Z09iai5nZXQoKSk7XG4gICAgICAgICRzdmdDb3B5LnByZXBlbmQoc3R5bGVzKTtcblxuICAgICAgICAkKFwiI1wiICsgY2xvbmVJZCkuaHRtbCgnJykuaGlkZSgpOyAvLyBtYWtlIHN1cmUgdGhlIGNvcHlJRCBpcyBpbnZpc2libGVcbiAgICAgICAgbGV0IHN2Z0h0bWwgPSAkKGAjJHtjbG9uZUlkfWApLmFwcGVuZCgkc3ZnQ29weSkuaHRtbCgpO1xuXG4gICAgICAgIGxldCBzdmdCbG9iID0gbmV3IEJsb2IoW3N2Z0h0bWxdLCB7dHlwZTogXCJpbWFnZS9zdmcreG1sXCJ9KTtcbiAgICAgICAgc2F2ZUFzKHN2Z0Jsb2IsIGZpbGVOYW1lKTsgLy8gdGhpcyBpcyBhIEZpbGVTYXZlciBmdW5jdGlvbi4uLi5cblxuICAgICAgICAvLyBjbGVhciB0aGUgdGVtcCBkb3dubG9hZCBkaXZcbiAgICAgICAgJChgIyR7Y2xvbmVJZH1gKS5odG1sKCcnKS5oaWRlKCk7XG4gICAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IMKpIDIwMTUgLSAyMDE4IFRoZSBCcm9hZCBJbnN0aXR1dGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSAoaHR0cHM6Ly9naXRodWIuY29tL2Jyb2FkaW5zdGl0dXRlL2d0ZXgtdml6L2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQpXG4gKi9cbmltcG9ydCB7c2VsZWN0LCBldmVudH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb29sdGlwIHtcbiAgICBjb25zdHJ1Y3RvcihpZCwgdmVyYm9zZT1mYWxzZSwgb2Zmc2V0WD0zMCwgb2Zmc2V0WT0tNDAsIGR1cmF0aW9uPTEwMCl7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgdGhpcy52ZXJib3NlID0gdmVyYm9zZTtcbiAgICAgICAgdGhpcy5vZmZzZXRYID0gb2Zmc2V0WDtcbiAgICAgICAgdGhpcy5vZmZzZXRZID0gb2Zmc2V0WTtcbiAgICAgICAgdGhpcy5kdXJhdGlvbiA9IGR1cmF0aW9uO1xuICAgIH1cblxuICAgIHNob3coaW5mbykge1xuICAgICAgICBpZih0aGlzLnZlcmJvc2UpIGNvbnNvbGUubG9nKGluZm8pO1xuICAgICAgICB0aGlzLmVkaXQoaW5mbyk7XG4gICAgICAgIHRoaXMubW92ZSgpO1xuICAgICAgICBzZWxlY3QoXCIjXCIgKyB0aGlzLmlkKVxuICAgICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBcImlubGluZVwiKVxuICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLmR1cmF0aW9uKHRoaXMuZHVyYXRpb24pXG4gICAgICAgICAgICAuc3R5bGUoXCJvcGFjaXR5XCIsIDEuMClcblxuICAgIH1cblxuICAgIGhpZGUoKSB7XG4gICAgICAgIHNlbGVjdChcIiNcIiArIHRoaXMuaWQpXG4gICAgICAgICAgICAudHJhbnNpdGlvbigpXG4gICAgICAgICAgICAuZHVyYXRpb24odGhpcy5kdXJhdGlvbilcbiAgICAgICAgICAgIC5zdHlsZShcIm9wYWNpdHlcIiwgMC4wKTtcbiAgICAgICAgdGhpcy5lZGl0KFwiXCIpO1xuICAgIH1cblxuICAgIG1vdmUoeCA9IGV2ZW50LnBhZ2VYLCB5ID0gZXZlbnQucGFnZVkpIHtcbiAgICAgICAgaWYgKHRoaXMudmVyYm9zZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coeCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh5KTtcbiAgICAgICAgfVxuICAgICAgICB4ID0geCArIHRoaXMub2Zmc2V0WDsgLy8gVE9ETzogZ2V0IHJpZCBvZiB0aGUgaGFyZC1jb2RlZCBhZGp1c3RtZW50XG4gICAgICAgIHkgPSAoeSArIHRoaXMub2Zmc2V0WSk8MD8xMDp5K3RoaXMub2Zmc2V0WTtcbiAgICAgICAgY29uc3QgdCA9IHNlbGVjdCgnIycrdGhpcy5pZClcbiAgICAgICAgICAgIC5zdHlsZShcImxlZnRcIiwgYCR7eH1weGApXG4gICAgICAgICAgICAuc3R5bGUoXCJ0b3BcIiwgYCR7eX1weGApXG4gICAgfVxuXG4gICAgZWRpdChpbmZvKSB7XG4gICAgICAgIHNlbGVjdChcIiNcIiArIHRoaXMuaWQpXG4gICAgICAgICAgICAuaHRtbChpbmZvKVxuICAgIH1cbn1cblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuaW1wb3J0IHtzZWxlY3QsIHNlbGVjdEFsbH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtzY2FsZUJhbmR9IGZyb20gXCJkMy1zY2FsZVwiO1xuaW1wb3J0IHtuZXN0fSBmcm9tIFwiZDMtY29sbGVjdGlvblwiO1xuaW1wb3J0IHt0cmFuc2l0aW9ufSBmcm9tIFwiZDMtdHJhbnNpdGlvblwiO1xuXG5pbXBvcnQge3NldENvbG9yU2NhbGUsIGRyYXdDb2xvckxlZ2VuZH0gZnJvbSBcIi4vY29sb3JzXCI7XG5pbXBvcnQgVG9vbGJhciBmcm9tIFwiLi9Ub29sYmFyXCI7XG5pbXBvcnQgVG9vbHRpcCBmcm9tIFwiLi9Ub29sdGlwXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhlYXRtYXAge1xuICAgIC8qKlxuICAgICAqIGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIGRhdGEge0xpc3R9LCBhIGxpc3Qgb2Ygb2JqZWN0cyB3aXRoIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczogeDogdGhlIHggbGFiZWwsIHk6IHRoZSB5IGxhYmVsXG4gICAgICAgIHZhbHVlOiB0aGUgcmVuZGVyZWQgbnVtZXJpY2FsIHZhbHVlICh0cmFuc2Zvcm1lZClcbiAgICAgICAgZGlzcGxheVZhbHVlOiBkaXNwbGF5IG51bWVyaWNhbCB2YWx1ZVxuICAgICAqIEBwYXJhbSB1c2VMb2cge0Jvb2xlYW59IHBlcmZvcm1zIGxvZyB0cmFuc2Zvcm1hdGlvblxuICAgICAqIEBwYXJhbSBjb2xvclNjaGVtZSB7U3RyaW5nfTogcmVjb2duaXplZCB0ZXJtcyBpbiBDb2xvcnM6Z2V0Q29sb3JJbnRlcnBvbGF0b3JcbiAgICAgKiBAcGFyYW0gciB7SW50ZWdlcn06IGNlbGwgY29ybmVyIHJhZGl1c1xuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGRhdGEsIHVzZUxvZz10cnVlLCBsb2dCYXNlPTEwLCBjb2xvclNjaGVtZT1cIllsR25CdVwiLCByPTIsIHRvb2x0aXBJZD1cImhlYXRtYXBUb29sdGlwXCIpe1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLnVzZUxvZyA9IHVzZUxvZztcbiAgICAgICAgdGhpcy5sb2dCYXNlID0gbG9nQmFzZTtcbiAgICAgICAgdGhpcy5udWxsQ29sb3IgPSBcIiNlNmU2ZTZcIjtcbiAgICAgICAgdGhpcy5jb2xvclNjYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnhMaXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnlMaXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnhTY2FsZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy55U2NhbGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuciA9IHI7XG4gICAgICAgIHRoaXMuY29sb3JTY2hlbWUgPSBjb2xvclNjaGVtZTtcblxuICAgICAgICAvLyBwZXJpcGhlcmFsIGZlYXR1cmVzXG4gICAgICAgIC8vLyBUb29sdGlwXG4gICAgICAgIC8vLyBjcmVhdGUgdGhlIHRvb2x0aXAgRElWXG4gICAgICAgIGlmICgkKGAjJHt0b29sdGlwSWR9YCkubGVuZ3RoID09IDApICQoJzxkaXYvPicpLmF0dHIoJ2lkJywgdG9vbHRpcElkKS5hcHBlbmRUbygkKCdib2R5JykpO1xuICAgICAgICB0aGlzLnRvb2x0aXAgPSBuZXcgVG9vbHRpcCh0b29sdGlwSWQpO1xuICAgICAgICBzZWxlY3QoYCMke3Rvb2x0aXBJZH1gKS5jbGFzc2VkKCdoZWF0bWFwLXRvb2x0aXAnLCB0cnVlKTtcblxuICAgICAgICB0aGlzLnRvb2xiYXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIHRoZSB0b29sYmFyIHBhbmVsXG4gICAgICogQHBhcmFtIGRvbUlkIHtTdHJpbmd9IHRoZSB0b29sYmFyJ3MgZG9tIElEXG4gICAgICogQHBhcmFtIHRvb2x0aXAge1Rvb2x0aXB9XG4gICAgICogQHJldHVybnMge1Rvb2xiYXJ9XG4gICAgICovXG5cbiAgICBjcmVhdGVUb29sYmFyKGRvbUlkLCB0b29sdGlwKXtcbiAgICAgICAgdGhpcy50b29sYmFyID0gbmV3IFRvb2xiYXIoZG9tSWQsIHRvb2x0aXApO1xuICAgICAgICByZXR1cm4gdGhpcy50b29sYmFyO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogZHJhdyBjb2xvciBsZWdlbmQgZm9yIHRoZSBoZWF0IG1hcFxuICAgICAqIEBwYXJhbSBkb20ge1NlbGVjdGlvbn0gYSBkMyBzZWxlY3Rpb24gb2JqZWN0XG4gICAgICogQHBhcmFtIGxlZ2VuZENvbmZpZyB7T2JqZWN0fSB3aXRoIGF0dHI6IHgsIHlcbiAgICAgKi9cblxuICAgIGRyYXdDb2xvckxlZ2VuZChkb20sIGxlZ2VuZENvbmZpZz17eDowLCB5OjB9LCB0aWNrcz01KXtcbiAgICAgICAgZHJhd0NvbG9yTGVnZW5kKHRoaXMuZGF0YVswXS51bml0fHxcIlZhbHVlXCIsIGRvbSwgdGhpcy5jb2xvclNjYWxlLCBsZWdlbmRDb25maWcsIHRoaXMudXNlTG9nLCB0aWNrcywgdGhpcy5sb2dCYXNlKTtcbiAgICB9XG5cbiAgICAgLyoqXG4gICAgICogcmVkcmF3cyB0aGUgaGVhdG1hcDogd2hlbiB0aGUgeGxpc3QgYW5kIHlsaXN0IGFyZSBjaGFuZ2VkLCByZWRyYXcgdGhlIGhlYXRtYXBcbiAgICAgKiBAcGFyYW0gZG9tIHtTZWxlY3Rpb259IGEgZDMgc2VsZWN0aW9uIG9iamVjdFxuICAgICAqIEBwYXJhbSB4TGlzdCB7TGlzdH0gYSBsaXN0IG9mIHggbGFiZWxzXG4gICAgICogQHBhcmFtIHlMaXN0IHtMaXN0fSBhIGxpc3Qgb2YgeSBsYWJlbHNcbiAgICAgKiBAcGFyYW0gZGltZW5zaW9ucyB7RGljdGlvbmFyeX0ge3c6SW50ZWdlciwgaDppbnRlZ2VyfSB3aXRoIHR3byBhdHRyaWJ1dGVzOiB3IGFuZCBoXG4gICAgICogQHBhcmFtIGFuZ2xlIHtJbnRlZ2VyfSBmb3IgdGhlIHkgdGV4dCBsYWJlbHNcbiAgICAgKi9cbiAgICByZWRyYXcoZG9tLCB4TGlzdCwgeUxpc3QsIGRpbWVuc2lvbnM9e3c6MTAwMCwgaDoxMDAwfSwgYW5nbGU9MzApe1xuICAgICAgICB0aGlzLl9zZXRYTGlzdChkaW1lbnNpb25zLncsIHhMaXN0KTtcbiAgICAgICAgdGhpcy5fc2V0WUxpc3QoZGltZW5zaW9ucy5oLCB5TGlzdCk7XG4gICAgICAgIHRoaXMuZHJhdyhkb20sIGRpbWVuc2lvbnMsIGFuZ2xlKTtcbiAgICB9XG5cbiAgICBsb2codil7XG4gICAgICAgIGNvbnN0IGFkanVzdCA9IDE7XG4gICAgICAgIHJldHVybiB0aGlzLmxvZ0Jhc2UgPT0gMj8gTWF0aC5sb2cyKE51bWJlcih2K2FkanVzdCkpOk1hdGgubG9nMTAoTnVtYmVyKHYrYWRqdXN0KSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkcmF3cyB0aGUgaGVhdG1hcFxuICAgICAqIEBwYXJhbSBkb20ge1NlbGVjdGlvbn1cbiAgICAgKiBAcGFyYW0gZGltZW5zaW9ucyB7RGljdGlvbmFyeX0ge3c6SW50ZWdlciwgaDppbnRlZ2VyfSBvZiB0aGUgaGVhdG1hcFxuICAgICAqIEBwYXJhbSBhbmdsZSB7SW50ZWdlcn0gZm9yIHRoZSB5IHRleHQgbGFiZWxzXG4gICAgICogQHBhcmFtIHVzZU51bGxDb2xvciB7Qm9vbGVhbn0gd2hldGhlciB0byByZW5kZXIgbnVsbCB2YWx1ZXMgd2l0aCB0aGUgcHJlLWRlZmluZWQgbnVsbCBjb2xvclxuICAgICAqL1xuXG4gICAgZHJhdyhkb20sIGRpbWVuc2lvbnM9e3c6MTAwMCwgaDo2MDB9LCBhbmdsZT0zMCwgdXNlTnVsbENvbG9yPXRydWUsIGNvbHVtbkxhYmVsUG9zQWRqdXN0PW51bGwpe1xuXG4gICAgICAgIGlmICh0aGlzLnhMaXN0ID09PSB1bmRlZmluZWQpIHRoaXMuX3NldFhMaXN0KGRpbWVuc2lvbnMudyk7XG4gICAgICAgIGlmICh0aGlzLnlMaXN0ID09PSB1bmRlZmluZWQpIHRoaXMuX3NldFlMaXN0KGRpbWVuc2lvbnMuaCk7XG4gICAgICAgIGlmICh0aGlzLmNvbG9yU2NhbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGV0IHVzZUxvZyA9IHRoaXMudXNlTG9nO1xuICAgICAgICAgICAgbGV0IGRhdGEgPSB0aGlzLmRhdGEubWFwKChkKT0+dXNlTG9nP3RoaXMubG9nKGQudmFsdWUpOmQudmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5jb2xvclNjYWxlID0gc2V0Q29sb3JTY2FsZShkYXRhLCB0aGlzLmNvbG9yU2NoZW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRleHQgbGFiZWxzXG4gICAgICAgIC8vIGRhdGEgam9pblxuICAgICAgICBjb25zdCB4TGFiZWxzID0gZG9tLnNlbGVjdEFsbChcIi5leHAtbWFwLXhsYWJlbFwiKVxuICAgICAgICAgICAgLmRhdGEodGhpcy54TGlzdCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIG9sZCBlbGVtZW50c1xuICAgICAgICBjb25zdCBZID0gY29sdW1uTGFiZWxQb3NBZGp1c3Q9PW51bGw/dGhpcy55U2NhbGUucmFuZ2UoKVsxXSArICh0aGlzLnlTY2FsZS5iYW5kd2lkdGgoKSAqIDIpOnRoaXMueVNjYWxlLnJhbmdlKClbMV0rY29sdW1uTGFiZWxQb3NBZGp1c3Q7XG4gICAgICAgIGNvbnN0IGFkanVzdCA9IDU7XG4gICAgICAgIHhMYWJlbHMuYXR0cihcInRyYW5zZm9ybVwiLCAoZCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCB4ID0gdGhpcy54U2NhbGUoZCkgKyBhZGp1c3Q7XG4gICAgICAgICAgICAgICAgbGV0IHkgPSBZO1xuICAgICAgICAgICAgICAgIHJldHVybiBgdHJhbnNsYXRlKCR7eH0sICR7eX0pIHJvdGF0ZSgke2FuZ2xlfSlgO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyAuYXR0cihcImNsYXNzXCIsIChkLCBpKSA9PiBgZXhwLW1hcC14bGFiZWwgeCR7aX1gKTtcblxuXG4gICAgICAgIC8vIGVudGVycyBuZXcgZWxlbWVudHNcbiAgICAgICAgeExhYmVscy5lbnRlcigpLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgKGQsIGkpID0+IGBleHAtbWFwLXhsYWJlbCB4JHtpfWApXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgMClcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAwKVxuICAgICAgICAgICAgLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJzdGFydFwiKVxuICAgICAgICAgICAgLnN0eWxlKFwiY3Vyc29yXCIsIFwiZGVmYXVsdFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgKGQpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgeCA9IHRoaXMueFNjYWxlKGQpICsgYWRqdXN0O1xuICAgICAgICAgICAgICAgIGxldCB5ID0gWTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYHRyYW5zbGF0ZSgke3h9LCAke3l9KSByb3RhdGUoJHthbmdsZX0pYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAubWVyZ2UoeExhYmVscylcbiAgICAgICAgICAgIC50ZXh0KChkKSA9PiBkKTtcblxuICAgICAgICAvLyBleGl0IC0tIHJlbW92ZXMgb2xkIGVsZW1lbnRzIGFzIG5lZWRlZFxuICAgICAgICB4TGFiZWxzLmV4aXQoKS5yZW1vdmUoKTtcblxuICAgICAgICBjb25zdCB5TGFiZWxzID0gZG9tLnNlbGVjdEFsbChcIi5leHAtbWFwLXlsYWJlbFwiKVxuICAgICAgICAgICAgLmRhdGEodGhpcy55TGlzdClcbiAgICAgICAgICAgIC5lbnRlcigpLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC50ZXh0KChkKSA9PiBkKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIHRoaXMueFNjYWxlLnJhbmdlKClbMV0gKyA1KVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIChkKSA9PiB0aGlzLnlTY2FsZShkKSArIDEwKVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCAoZCwgaSkgPT4gYGV4cC1tYXAteWxhYmVsIHkke2l9YClcbiAgICAgICAgICAgIC5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwic3RhcnRcIilcbiAgICAgICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIilcbiAgICAgICAgICAgIC5vbignY2xpY2snLCAoZCkgPT4ge1xuICAgICAgICAgICAgICAgIGFsZXJ0KGAke2R9IGlzIGNsaWNrZWQuIFRvIGJlIGltcGxlbWVudGVkYClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAub24oJ21vdXNlb3ZlcicsIGZ1bmN0aW9uKGQpe1xuICAgICAgICAgICAgICAgIHNlbGVjdCh0aGlzKVxuICAgICAgICAgICAgICAgICAgICAuY2xhc3NlZCgnbm9ybWFsJywgZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5jbGFzc2VkKCdoaWdobGlnaHRlZCcsIHRydWUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5vbignbW91c2VvdXQnLCBmdW5jdGlvbihkKXtcbiAgICAgICAgICAgICAgICBzZWxlY3QodGhpcylcbiAgICAgICAgICAgICAgICAgICAgLmNsYXNzZWQoJ25vcm1hbCcsIHRydWUpXG4gICAgICAgICAgICAgICAgICAgIC5jbGFzc2VkKCdoaWdobGlnaHRlZCcsIGZhbHNlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHJlbmRlcnMgdGhlIGhlYXRtYXAgY2VsbHNcblxuICAgICAgICAvLyBkYXRhIGpvaW5cbiAgICAgICAgY29uc3QgY2VsbHMgPSBkb20uc2VsZWN0QWxsKFwiLmV4cC1tYXAtY2VsbFwiKVxuICAgICAgICAgICAgLmRhdGEodGhpcy5kYXRhLCAoZCkgPT4gZC52YWx1ZSk7XG5cbiAgICAgICAgLy8gdXBkYXRlIG9sZCBlbGVtZW50c1xuICAgICAgICBjZWxscy5hdHRyKFwieFwiLCAoZCkgPT4gdGhpcy54U2NhbGUoZC54KSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAoZCkgPT4gdGhpcy55U2NhbGUoZC55KSlcbiAgICAgICAgICAgIC5hdHRyKFwicm93XCIsIChkKSA9PiBgeCR7dGhpcy54TGlzdC5pbmRleE9mKGQueCl9YClcbiAgICAgICAgICAgIC5hdHRyKFwiY29sXCIsIChkKSA9PiBgeSR7dGhpcy55TGlzdC5pbmRleE9mKGQueSl9YCk7XG5cbiAgICAgICAgLy8gZW50ZXIgbmV3IGVsZW1lbnRzXG4gICAgICAgIGNvbnN0IG51bGxDb2xvciA9IFwiI0RERERERFwiO1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY2VsbHMuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgICAgICAuYXR0cihcInJvd1wiLCAoZCkgPT4gYHgke3RoaXMueExpc3QuaW5kZXhPZihkLngpfWApXG4gICAgICAgICAgICAuYXR0cihcImNvbFwiLCAoZCkgPT4gYHkke3RoaXMueUxpc3QuaW5kZXhPZihkLnkpfWApXG5cbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCAoZCkgPT4gdGhpcy54U2NhbGUoZC54KSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAoZCkgPT4gdGhpcy55U2NhbGUoZC55KSlcbiAgICAgICAgICAgIC5hdHRyKFwicnhcIiwgdGhpcy5yKVxuICAgICAgICAgICAgLmF0dHIoJ3J5JywgdGhpcy5yKVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCAoZCkgPT4gYGV4cC1tYXAtY2VsbGApXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMueFNjYWxlLmJhbmR3aWR0aCgpKVxuICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy55U2NhbGUuYmFuZHdpZHRoKCkpXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIChkKSA9PiBcIiNlZWVlZWVcIilcbiAgICAgICAgICAgIC5vbihcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbihkKXtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdCh0aGlzKTsgLy8gTm90ZTogXCJ0aGlzXCIgaGVyZSByZWZlcnMgdG8gdGhlIGRvbSBlbGVtZW50IG5vdCB0aGUgb2JqZWN0XG4gICAgICAgICAgICAgICAgc2VsZi5jZWxsTW91c2VvdmVyKGQsIGRvbSwgc2VsZWN0ZWQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5vbihcIm1vdXNlb3V0XCIsIGZ1bmN0aW9uKGQpe1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0KHRoaXMpOyAvLyBOb3RlOiBcInRoaXNcIiBoZXJlIHJlZmVycyB0byB0aGUgZG9tIGVsZW1lbnQgbm90IHRoZSBvYmplY3RcbiAgICAgICAgICAgICAgICBzZWxmLmNlbGxNb3VzZW91dCgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1lcmdlKGNlbGxzKVxuICAgICAgICAgICAgLy8gLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLy8gLmR1cmF0aW9uKDIwMDApXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIChkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVzZU51bGxDb2xvciYmZC52YWx1ZT09MD9udWxsQ29sb3I6dGhpcy51c2VMb2c/dGhpcy5jb2xvclNjYWxlKHRoaXMubG9nKGQudmFsdWUpKTp0aGlzLmNvbG9yU2NhbGUoZC52YWx1ZSlcbiAgICAgICAgICAgIH0pOyAvLyBUT0RPOiB3aGF0IGlmIG51bGwgdmFsdWUgaXNuJ3QgMD9cblxuICAgICAgICAvLyBleGl0IGFuZCByZW1vdmVcbiAgICAgICAgY2VsbHMuZXhpdCgpLnJlbW92ZSgpO1xuICAgIH1cblxuXG4gICAgY2VsbE1vdXNlb3V0KGQpe1xuICAgICAgICBzZWxlY3RBbGwoXCIqXCIpLmNsYXNzZWQoJ2hpZ2hsaWdodGVkJywgZmFsc2UpO1xuICAgICAgICB0aGlzLnRvb2x0aXAuaGlkZSgpO1xuICAgIH1cblxuICAgIGNlbGxNb3VzZW92ZXIgKGQsIGRvbSwgc2VsZWN0ZWQpIHtcbiAgICAgICAgY29uc3Qgcm93Q2xhc3MgPSBzZWxlY3RlZC5hdHRyKFwicm93XCIpO1xuICAgICAgICBjb25zdCBjb2xDbGFzcyA9IHNlbGVjdGVkLmF0dHIoXCJjb2xcIik7XG4gICAgICAgIGRvbS5zZWxlY3RBbGwoXCIuZXhwLW1hcC14bGFiZWxcIikuZmlsdGVyKGAuJHtyb3dDbGFzc31gKVxuICAgICAgICAgICAgLmNsYXNzZWQoJ2hpZ2hsaWdodGVkJywgdHJ1ZSk7XG4gICAgICAgIGRvbS5zZWxlY3RBbGwoXCIuZXhwLW1hcC15bGFiZWxcIikuZmlsdGVyKGAuJHtjb2xDbGFzc31gKVxuICAgICAgICAgICAgLmNsYXNzZWQoJ2hpZ2hsaWdodGVkJywgdHJ1ZSk7XG4gICAgICAgIHNlbGVjdGVkLmNsYXNzZWQoJ2hpZ2hsaWdodGVkJywgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlWYWx1ZSA9IGQuZGlzcGxheVZhbHVlID09PSB1bmRlZmluZWQ/cGFyc2VGbG9hdChkLnZhbHVlLnRvRXhwb25lbnRpYWwoKSkudG9QcmVjaXNpb24oNCk6ZC5kaXNwbGF5VmFsdWU7XG4gICAgICAgIHRoaXMudG9vbHRpcC5zaG93KGBDb2x1bW46ICR7ZC54fSA8YnIvPiBSb3c6ICR7ZC55fTxici8+IFZhbHVlOiAke2Rpc3BsYXlWYWx1ZX1gKTtcbiAgICB9XG5cbiAgICBfc2V0WExpc3Qod2lkdGgsIG5ld0xpc3QpIHtcbiAgICAgICAgaWYobmV3TGlzdCAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIHRoaXMueExpc3QgPSBuZXdMaXN0XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnhMaXN0ID0gbmVzdCgpXG4gICAgICAgICAgICAgICAgLmtleSgoZCkgPT4gZC54KVxuICAgICAgICAgICAgICAgIC5lbnRyaWVzKHRoaXMuZGF0YSlcbiAgICAgICAgICAgICAgICAubWFwKChkKSA9PiBkLmtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy54U2NhbGUgPSBzY2FsZUJhbmQoKVxuICAgICAgICAgICAgLmRvbWFpbih0aGlzLnhMaXN0KVxuICAgICAgICAgICAgLnJhbmdlKFswLCB3aWR0aF0pXG4gICAgICAgICAgICAucGFkZGluZyguMDUpOyAvLyBUT0RPOiBlbGltaW5hdGUgaGFyZC1jb2RlZCB2YWx1ZVxuICAgIH1cblxuICAgIF9zZXRZTGlzdChoZWlnaHQsIG5ld0xpc3QpIHtcbiAgICAgICAgaWYobmV3TGlzdCAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIHRoaXMueUxpc3QgPSBuZXdMaXN0XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgIHRoaXMueUxpc3QgPSBuZXN0KClcbiAgICAgICAgICAgIC5rZXkoKGQpID0+IGQueSlcbiAgICAgICAgICAgIC5lbnRyaWVzKHRoaXMuZGF0YSlcbiAgICAgICAgICAgIC5tYXAoKGQpID0+IGQua2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnlTY2FsZSA9IHNjYWxlQmFuZCgpXG4gICAgICAgICAgICAgICAgLmRvbWFpbih0aGlzLnlMaXN0KVxuICAgICAgICAgICAgICAgIC5yYW5nZShbMCwgaGVpZ2h0XSlcbiAgICAgICAgICAgICAgICAucGFkZGluZyguMDUpOyAvLyBUT0RPOiBlbGltaW5hdGUgaGFyZC1jb2RlZCB2YWx1ZVxuICAgIH1cblxuXG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuLyoqXG4gKiBUT0RPOiBjb2RlIHJldmlldyBvZiBob3cgdG8gcHJlc2V0IHBhcmFtZXRlciB2YWx1ZXNcbiAqIHJldmlldyBhbGwgdGhlIHBvc2l0aW9uIGNhbGN1bGF0aW9uc1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZW5kcm9IZWF0bWFwQ29uZmlnIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcm9vdFcge051bWJlcn0sIHRoaXMgd2lkdGggaW5jbHVkZXMgbWFyZ2luIGxlZnQgYW5kIHJpZ2h0LCByb3dUcmVlUGFuZWwgd2lkdGggYW5kIGhlYXRtYXAgd2lkdGguXG4gICAgICogQHBhcmFtIGxlZnRQYW5lbFcge0ludGVnZXJ9LCBzZXQgdG8gMCBpZiB0aGVyZSdzIG5vIGxlZnQgcGFuZWxcbiAgICAgKiBAcGFyYW0gdG9wUGFuZWxIIHtJbnRlZ2VyfSwgc2V0IHRvIDAgaWYgdGhlcmUncyBubyB0b3AgcGFuZWxcbiAgICAgKiBAcGFyYW0gbWFyZ2luIHtPYmplY3R9IHdpdGggYXR0cjogdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBzbWFsbGVyIHZhbHVlcyB0aGFuIHRoZSBkZWZhdWx0IGFyZSBub3QgcmVjb21tZW5kZWQgZm9yIHRoZSBoZWF0bWFwLCB0b3AgbWFyZ2luIHNob3VsZCBiZSBhdCBsZWFzdCA1MFxuICAgICAqIEBwYXJhbSBjZWxsSCB7SW50ZWdlcn1cbiAgICAgKiBAcGFyYW0gYWRqdXN0IHtJbnRlZ2VyfSwgYWRqdXN0ZWQgc3BhY2luZyBiZXR3ZWVuIHRoZSBoZWF0bWFwIGFuZCB0aGUgZGVuZHJvZ3JhbVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHJvb3RXPXdpbmRvdy5pbm5lcldpZHRoLCBsZWZ0UGFuZWxXPTEwMCwgdG9wUGFuZWxIPTEwMCwgbWFyZ2luPXt0b3A6NTAsIHJpZ2h0OjI1MCwgYm90dG9tOjE3MCwgbGVmdDoxMH0sIGNlbGxIPTEyLCBhZGp1c3Q9MTApIHtcbiAgICAgICAgdGhpcy5tYXJnaW4gPSBtYXJnaW47XG4gICAgICAgIHRoaXMucm9vdFcgPSByb290VztcblxuICAgICAgICB0aGlzLmxlZnRUcmVlUGFuZWwgPSB7IC8vIHRoZSByb3cgZGVuZHJvZ3JhbSBwYW5lbFxuICAgICAgICAgICAgeDogbWFyZ2luLmxlZnQsXG4gICAgICAgICAgICB5OiBtYXJnaW4udG9wICsgdG9wUGFuZWxILFxuICAgICAgICAgICAgaDogdW5kZWZpbmVkLCAvLyB1bmRlZmluZWQgaW5pdGlhbGx5LCBiZWNhdXNlIGl0J3MgZGF0YS1kZXBlbmRlbnRcbiAgICAgICAgICAgIHc6IGxlZnRQYW5lbFcgLSBhZGp1c3QsXG4gICAgICAgICAgICBpZDogXCJsZWZ0VHJlZVwiXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jZWxsID0ge1xuICAgICAgICAgICAgdzogdW5kZWZpbmVkLCAvLyB0byBiZSBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBkYXRhIGFuZCByb290V1xuICAgICAgICAgICAgaDogY2VsbEhcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnRvcFRyZWVQYW5lbCA9IHsgLy8gdGhlIGNvbHVtbiBkZW5kcm9ncmFtIHBhbmVsXG4gICAgICAgICAgICB4OiBtYXJnaW4ubGVmdCArIGxlZnRQYW5lbFcsXG4gICAgICAgICAgICB5OiBtYXJnaW4udG9wLFxuICAgICAgICAgICAgaDogdG9wUGFuZWxIIC0gYWRqdXN0LFxuICAgICAgICAgICAgdzogdGhpcy5yb290VyAtIChtYXJnaW4ubGVmdCArIGxlZnRQYW5lbFcgKyBtYXJnaW4ucmlnaHQpLCAvLyBoYXJkLWNvZGVkIHZhbHVlcz9cbiAgICAgICAgICAgIGlkOiBcInRvcFRyZWVcIlxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGVhdG1hcFBhbmVsID0ge1xuICAgICAgICAgICAgeDogbWFyZ2luLmxlZnQgKyBsZWZ0UGFuZWxXLFxuICAgICAgICAgICAgeTogbWFyZ2luLnRvcCArIHRvcFBhbmVsSCxcbiAgICAgICAgICAgIGg6IHRoaXMubGVmdFRyZWVQYW5lbC5oLFxuICAgICAgICAgICAgdzogdGhpcy50b3BUcmVlUGFuZWwudyxcbiAgICAgICAgICAgIGlkOiBcImhlYXRtYXBcIlxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMubGVnZW5kUGFuZWwgPSB7IC8vIHRoZSBjb2xvciBsZWdlbmQgcGFuZWxcbiAgICAgICAgICAgIHg6IG1hcmdpbi5sZWZ0ICsgbGVmdFBhbmVsVyxcbiAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICBoOiBtYXJnaW4udG9wLzIsXG4gICAgICAgICAgICB3OiB0aGlzLnRvcFRyZWVQYW5lbC53LFxuICAgICAgICAgICAgY2VsbDoge3c6IDYwfSxcbiAgICAgICAgICAgIGlkOiBcImxlZ2VuZFwiXG4gICAgICAgIH07XG5cblxuICAgIH1cblxuICAgIGdldCgpe1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWFyZ2luOiB0aGlzLm1hcmdpbixcbiAgICAgICAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgICAgICAgIHc6IHRoaXMucm9vdFcsXG4gICAgICAgICAgICBoOiB0aGlzLm1hcmdpbi50b3AgKyB0aGlzLnRvcFRyZWVQYW5lbC5oICsgdGhpcy5sZWdlbmRQYW5lbC5oICsgdGhpcy5tYXJnaW4uYm90dG9tLCAvLyBpbml0aWFsIGhlaWdodFxuICAgICAgICAgICAgcGFuZWxzOiB7XG4gICAgICAgICAgICAgICAgdG9wOiB0aGlzLnRvcFRyZWVQYW5lbCxcbiAgICAgICAgICAgICAgICBsZWZ0OiB0aGlzLmxlZnRUcmVlUGFuZWwsXG4gICAgICAgICAgICAgICAgbWFpbjogdGhpcy5oZWF0bWFwUGFuZWwsXG4gICAgICAgICAgICAgICAgbGVnZW5kOiB0aGlzLmxlZ2VuZFBhbmVsXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuXG4iLCJmdW5jdGlvbiBjb3VudChub2RlKSB7XG4gIHZhciBzdW0gPSAwLFxuICAgICAgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLFxuICAgICAgaSA9IGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aDtcbiAgaWYgKCFpKSBzdW0gPSAxO1xuICBlbHNlIHdoaWxlICgtLWkgPj0gMCkgc3VtICs9IGNoaWxkcmVuW2ldLnZhbHVlO1xuICBub2RlLnZhbHVlID0gc3VtO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaEFmdGVyKGNvdW50KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHZhciBub2RlID0gdGhpcywgY3VycmVudCwgbmV4dCA9IFtub2RlXSwgY2hpbGRyZW4sIGksIG47XG4gIGRvIHtcbiAgICBjdXJyZW50ID0gbmV4dC5yZXZlcnNlKCksIG5leHQgPSBbXTtcbiAgICB3aGlsZSAobm9kZSA9IGN1cnJlbnQucG9wKCkpIHtcbiAgICAgIGNhbGxiYWNrKG5vZGUpLCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47XG4gICAgICBpZiAoY2hpbGRyZW4pIGZvciAoaSA9IDAsIG4gPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgbmV4dC5wdXNoKGNoaWxkcmVuW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gd2hpbGUgKG5leHQubGVuZ3RoKTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaykge1xuICB2YXIgbm9kZSA9IHRoaXMsIG5vZGVzID0gW25vZGVdLCBjaGlsZHJlbiwgaTtcbiAgd2hpbGUgKG5vZGUgPSBub2Rlcy5wb3AoKSkge1xuICAgIGNhbGxiYWNrKG5vZGUpLCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47XG4gICAgaWYgKGNoaWxkcmVuKSBmb3IgKGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgbm9kZXMucHVzaChjaGlsZHJlbltpXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyIG5vZGUgPSB0aGlzLCBub2RlcyA9IFtub2RlXSwgbmV4dCA9IFtdLCBjaGlsZHJlbiwgaSwgbjtcbiAgd2hpbGUgKG5vZGUgPSBub2Rlcy5wb3AoKSkge1xuICAgIG5leHQucHVzaChub2RlKSwgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuICAgIGlmIChjaGlsZHJlbikgZm9yIChpID0gMCwgbiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgbm9kZXMucHVzaChjaGlsZHJlbltpXSk7XG4gICAgfVxuICB9XG4gIHdoaWxlIChub2RlID0gbmV4dC5wb3AoKSkge1xuICAgIGNhbGxiYWNrKG5vZGUpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaEFmdGVyKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICB2YXIgc3VtID0gK3ZhbHVlKG5vZGUuZGF0YSkgfHwgMCxcbiAgICAgICAgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLFxuICAgICAgICBpID0gY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoO1xuICAgIHdoaWxlICgtLWkgPj0gMCkgc3VtICs9IGNoaWxkcmVuW2ldLnZhbHVlO1xuICAgIG5vZGUudmFsdWUgPSBzdW07XG4gIH0pO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29tcGFyZSkge1xuICByZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgbm9kZS5jaGlsZHJlbi5zb3J0KGNvbXBhcmUpO1xuICAgIH1cbiAgfSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihlbmQpIHtcbiAgdmFyIHN0YXJ0ID0gdGhpcyxcbiAgICAgIGFuY2VzdG9yID0gbGVhc3RDb21tb25BbmNlc3RvcihzdGFydCwgZW5kKSxcbiAgICAgIG5vZGVzID0gW3N0YXJ0XTtcbiAgd2hpbGUgKHN0YXJ0ICE9PSBhbmNlc3Rvcikge1xuICAgIHN0YXJ0ID0gc3RhcnQucGFyZW50O1xuICAgIG5vZGVzLnB1c2goc3RhcnQpO1xuICB9XG4gIHZhciBrID0gbm9kZXMubGVuZ3RoO1xuICB3aGlsZSAoZW5kICE9PSBhbmNlc3Rvcikge1xuICAgIG5vZGVzLnNwbGljZShrLCAwLCBlbmQpO1xuICAgIGVuZCA9IGVuZC5wYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5mdW5jdGlvbiBsZWFzdENvbW1vbkFuY2VzdG9yKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiBhO1xuICB2YXIgYU5vZGVzID0gYS5hbmNlc3RvcnMoKSxcbiAgICAgIGJOb2RlcyA9IGIuYW5jZXN0b3JzKCksXG4gICAgICBjID0gbnVsbDtcbiAgYSA9IGFOb2Rlcy5wb3AoKTtcbiAgYiA9IGJOb2Rlcy5wb3AoKTtcbiAgd2hpbGUgKGEgPT09IGIpIHtcbiAgICBjID0gYTtcbiAgICBhID0gYU5vZGVzLnBvcCgpO1xuICAgIGIgPSBiTm9kZXMucG9wKCk7XG4gIH1cbiAgcmV0dXJuIGM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLCBub2RlcyA9IFtub2RlXTtcbiAgd2hpbGUgKG5vZGUgPSBub2RlLnBhcmVudCkge1xuICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gIH1cbiAgcmV0dXJuIG5vZGVzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBub2RlcyA9IFtdO1xuICB0aGlzLmVhY2goZnVuY3Rpb24obm9kZSkge1xuICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gIH0pO1xuICByZXR1cm4gbm9kZXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGxlYXZlcyA9IFtdO1xuICB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICghbm9kZS5jaGlsZHJlbikge1xuICAgICAgbGVhdmVzLnB1c2gobm9kZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGxlYXZlcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgcm9vdCA9IHRoaXMsIGxpbmtzID0gW107XG4gIHJvb3QuZWFjaChmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKG5vZGUgIT09IHJvb3QpIHsgLy8gRG9u4oCZdCBpbmNsdWRlIHRoZSByb2904oCZcyBwYXJlbnQsIGlmIGFueS5cbiAgICAgIGxpbmtzLnB1c2goe3NvdXJjZTogbm9kZS5wYXJlbnQsIHRhcmdldDogbm9kZX0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsaW5rcztcbn1cbiIsImltcG9ydCBub2RlX2NvdW50IGZyb20gXCIuL2NvdW50XCI7XG5pbXBvcnQgbm9kZV9lYWNoIGZyb20gXCIuL2VhY2hcIjtcbmltcG9ydCBub2RlX2VhY2hCZWZvcmUgZnJvbSBcIi4vZWFjaEJlZm9yZVwiO1xuaW1wb3J0IG5vZGVfZWFjaEFmdGVyIGZyb20gXCIuL2VhY2hBZnRlclwiO1xuaW1wb3J0IG5vZGVfc3VtIGZyb20gXCIuL3N1bVwiO1xuaW1wb3J0IG5vZGVfc29ydCBmcm9tIFwiLi9zb3J0XCI7XG5pbXBvcnQgbm9kZV9wYXRoIGZyb20gXCIuL3BhdGhcIjtcbmltcG9ydCBub2RlX2FuY2VzdG9ycyBmcm9tIFwiLi9hbmNlc3RvcnNcIjtcbmltcG9ydCBub2RlX2Rlc2NlbmRhbnRzIGZyb20gXCIuL2Rlc2NlbmRhbnRzXCI7XG5pbXBvcnQgbm9kZV9sZWF2ZXMgZnJvbSBcIi4vbGVhdmVzXCI7XG5pbXBvcnQgbm9kZV9saW5rcyBmcm9tIFwiLi9saW5rc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoaWVyYXJjaHkoZGF0YSwgY2hpbGRyZW4pIHtcbiAgdmFyIHJvb3QgPSBuZXcgTm9kZShkYXRhKSxcbiAgICAgIHZhbHVlZCA9ICtkYXRhLnZhbHVlICYmIChyb290LnZhbHVlID0gZGF0YS52YWx1ZSksXG4gICAgICBub2RlLFxuICAgICAgbm9kZXMgPSBbcm9vdF0sXG4gICAgICBjaGlsZCxcbiAgICAgIGNoaWxkcyxcbiAgICAgIGksXG4gICAgICBuO1xuXG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSBjaGlsZHJlbiA9IGRlZmF1bHRDaGlsZHJlbjtcblxuICB3aGlsZSAobm9kZSA9IG5vZGVzLnBvcCgpKSB7XG4gICAgaWYgKHZhbHVlZCkgbm9kZS52YWx1ZSA9ICtub2RlLmRhdGEudmFsdWU7XG4gICAgaWYgKChjaGlsZHMgPSBjaGlsZHJlbihub2RlLmRhdGEpKSAmJiAobiA9IGNoaWxkcy5sZW5ndGgpKSB7XG4gICAgICBub2RlLmNoaWxkcmVuID0gbmV3IEFycmF5KG4pO1xuICAgICAgZm9yIChpID0gbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIG5vZGVzLnB1c2goY2hpbGQgPSBub2RlLmNoaWxkcmVuW2ldID0gbmV3IE5vZGUoY2hpbGRzW2ldKSk7XG4gICAgICAgIGNoaWxkLnBhcmVudCA9IG5vZGU7XG4gICAgICAgIGNoaWxkLmRlcHRoID0gbm9kZS5kZXB0aCArIDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJvb3QuZWFjaEJlZm9yZShjb21wdXRlSGVpZ2h0KTtcbn1cblxuZnVuY3Rpb24gbm9kZV9jb3B5KCkge1xuICByZXR1cm4gaGllcmFyY2h5KHRoaXMpLmVhY2hCZWZvcmUoY29weURhdGEpO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0Q2hpbGRyZW4oZCkge1xuICByZXR1cm4gZC5jaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gY29weURhdGEobm9kZSkge1xuICBub2RlLmRhdGEgPSBub2RlLmRhdGEuZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVIZWlnaHQobm9kZSkge1xuICB2YXIgaGVpZ2h0ID0gMDtcbiAgZG8gbm9kZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIHdoaWxlICgobm9kZSA9IG5vZGUucGFyZW50KSAmJiAobm9kZS5oZWlnaHQgPCArK2hlaWdodCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTm9kZShkYXRhKSB7XG4gIHRoaXMuZGF0YSA9IGRhdGE7XG4gIHRoaXMuZGVwdGggPVxuICB0aGlzLmhlaWdodCA9IDA7XG4gIHRoaXMucGFyZW50ID0gbnVsbDtcbn1cblxuTm9kZS5wcm90b3R5cGUgPSBoaWVyYXJjaHkucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogTm9kZSxcbiAgY291bnQ6IG5vZGVfY291bnQsXG4gIGVhY2g6IG5vZGVfZWFjaCxcbiAgZWFjaEFmdGVyOiBub2RlX2VhY2hBZnRlcixcbiAgZWFjaEJlZm9yZTogbm9kZV9lYWNoQmVmb3JlLFxuICBzdW06IG5vZGVfc3VtLFxuICBzb3J0OiBub2RlX3NvcnQsXG4gIHBhdGg6IG5vZGVfcGF0aCxcbiAgYW5jZXN0b3JzOiBub2RlX2FuY2VzdG9ycyxcbiAgZGVzY2VuZGFudHM6IG5vZGVfZGVzY2VuZGFudHMsXG4gIGxlYXZlczogbm9kZV9sZWF2ZXMsXG4gIGxpbmtzOiBub2RlX2xpbmtzLFxuICBjb3B5OiBub2RlX2NvcHlcbn07XG4iLCJleHBvcnQgdmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geDtcbn1cbiIsImltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5XCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHlcIjtcblxudmFyIHRvcCA9IDEsXG4gICAgcmlnaHQgPSAyLFxuICAgIGJvdHRvbSA9IDMsXG4gICAgbGVmdCA9IDQsXG4gICAgZXBzaWxvbiA9IDFlLTY7XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZVgoeCkge1xuICByZXR1cm4gXCJ0cmFuc2xhdGUoXCIgKyAoeCArIDAuNSkgKyBcIiwwKVwiO1xufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVZKHkpIHtcbiAgcmV0dXJuIFwidHJhbnNsYXRlKDAsXCIgKyAoeSArIDAuNSkgKyBcIilcIjtcbn1cblxuZnVuY3Rpb24gbnVtYmVyKHNjYWxlKSB7XG4gIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgcmV0dXJuICtzY2FsZShkKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2VudGVyKHNjYWxlKSB7XG4gIHZhciBvZmZzZXQgPSBNYXRoLm1heCgwLCBzY2FsZS5iYW5kd2lkdGgoKSAtIDEpIC8gMjsgLy8gQWRqdXN0IGZvciAwLjVweCBvZmZzZXQuXG4gIGlmIChzY2FsZS5yb3VuZCgpKSBvZmZzZXQgPSBNYXRoLnJvdW5kKG9mZnNldCk7XG4gIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgcmV0dXJuICtzY2FsZShkKSArIG9mZnNldDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZW50ZXJpbmcoKSB7XG4gIHJldHVybiAhdGhpcy5fX2F4aXM7XG59XG5cbmZ1bmN0aW9uIGF4aXMob3JpZW50LCBzY2FsZSkge1xuICB2YXIgdGlja0FyZ3VtZW50cyA9IFtdLFxuICAgICAgdGlja1ZhbHVlcyA9IG51bGwsXG4gICAgICB0aWNrRm9ybWF0ID0gbnVsbCxcbiAgICAgIHRpY2tTaXplSW5uZXIgPSA2LFxuICAgICAgdGlja1NpemVPdXRlciA9IDYsXG4gICAgICB0aWNrUGFkZGluZyA9IDMsXG4gICAgICBrID0gb3JpZW50ID09PSB0b3AgfHwgb3JpZW50ID09PSBsZWZ0ID8gLTEgOiAxLFxuICAgICAgeCA9IG9yaWVudCA9PT0gbGVmdCB8fCBvcmllbnQgPT09IHJpZ2h0ID8gXCJ4XCIgOiBcInlcIixcbiAgICAgIHRyYW5zZm9ybSA9IG9yaWVudCA9PT0gdG9wIHx8IG9yaWVudCA9PT0gYm90dG9tID8gdHJhbnNsYXRlWCA6IHRyYW5zbGF0ZVk7XG5cbiAgZnVuY3Rpb24gYXhpcyhjb250ZXh0KSB7XG4gICAgdmFyIHZhbHVlcyA9IHRpY2tWYWx1ZXMgPT0gbnVsbCA/IChzY2FsZS50aWNrcyA/IHNjYWxlLnRpY2tzLmFwcGx5KHNjYWxlLCB0aWNrQXJndW1lbnRzKSA6IHNjYWxlLmRvbWFpbigpKSA6IHRpY2tWYWx1ZXMsXG4gICAgICAgIGZvcm1hdCA9IHRpY2tGb3JtYXQgPT0gbnVsbCA/IChzY2FsZS50aWNrRm9ybWF0ID8gc2NhbGUudGlja0Zvcm1hdC5hcHBseShzY2FsZSwgdGlja0FyZ3VtZW50cykgOiBpZGVudGl0eSkgOiB0aWNrRm9ybWF0LFxuICAgICAgICBzcGFjaW5nID0gTWF0aC5tYXgodGlja1NpemVJbm5lciwgMCkgKyB0aWNrUGFkZGluZyxcbiAgICAgICAgcmFuZ2UgPSBzY2FsZS5yYW5nZSgpLFxuICAgICAgICByYW5nZTAgPSArcmFuZ2VbMF0gKyAwLjUsXG4gICAgICAgIHJhbmdlMSA9ICtyYW5nZVtyYW5nZS5sZW5ndGggLSAxXSArIDAuNSxcbiAgICAgICAgcG9zaXRpb24gPSAoc2NhbGUuYmFuZHdpZHRoID8gY2VudGVyIDogbnVtYmVyKShzY2FsZS5jb3B5KCkpLFxuICAgICAgICBzZWxlY3Rpb24gPSBjb250ZXh0LnNlbGVjdGlvbiA/IGNvbnRleHQuc2VsZWN0aW9uKCkgOiBjb250ZXh0LFxuICAgICAgICBwYXRoID0gc2VsZWN0aW9uLnNlbGVjdEFsbChcIi5kb21haW5cIikuZGF0YShbbnVsbF0pLFxuICAgICAgICB0aWNrID0gc2VsZWN0aW9uLnNlbGVjdEFsbChcIi50aWNrXCIpLmRhdGEodmFsdWVzLCBzY2FsZSkub3JkZXIoKSxcbiAgICAgICAgdGlja0V4aXQgPSB0aWNrLmV4aXQoKSxcbiAgICAgICAgdGlja0VudGVyID0gdGljay5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwidGlja1wiKSxcbiAgICAgICAgbGluZSA9IHRpY2suc2VsZWN0KFwibGluZVwiKSxcbiAgICAgICAgdGV4dCA9IHRpY2suc2VsZWN0KFwidGV4dFwiKTtcblxuICAgIHBhdGggPSBwYXRoLm1lcmdlKHBhdGguZW50ZXIoKS5pbnNlcnQoXCJwYXRoXCIsIFwiLnRpY2tcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImRvbWFpblwiKVxuICAgICAgICAuYXR0cihcInN0cm9rZVwiLCBcImN1cnJlbnRDb2xvclwiKSk7XG5cbiAgICB0aWNrID0gdGljay5tZXJnZSh0aWNrRW50ZXIpO1xuXG4gICAgbGluZSA9IGxpbmUubWVyZ2UodGlja0VudGVyLmFwcGVuZChcImxpbmVcIilcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJjdXJyZW50Q29sb3JcIilcbiAgICAgICAgLmF0dHIoeCArIFwiMlwiLCBrICogdGlja1NpemVJbm5lcikpO1xuXG4gICAgdGV4dCA9IHRleHQubWVyZ2UodGlja0VudGVyLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwiY3VycmVudENvbG9yXCIpXG4gICAgICAgIC5hdHRyKHgsIGsgKiBzcGFjaW5nKVxuICAgICAgICAuYXR0cihcImR5XCIsIG9yaWVudCA9PT0gdG9wID8gXCIwZW1cIiA6IG9yaWVudCA9PT0gYm90dG9tID8gXCIwLjcxZW1cIiA6IFwiMC4zMmVtXCIpKTtcblxuICAgIGlmIChjb250ZXh0ICE9PSBzZWxlY3Rpb24pIHtcbiAgICAgIHBhdGggPSBwYXRoLnRyYW5zaXRpb24oY29udGV4dCk7XG4gICAgICB0aWNrID0gdGljay50cmFuc2l0aW9uKGNvbnRleHQpO1xuICAgICAgbGluZSA9IGxpbmUudHJhbnNpdGlvbihjb250ZXh0KTtcbiAgICAgIHRleHQgPSB0ZXh0LnRyYW5zaXRpb24oY29udGV4dCk7XG5cbiAgICAgIHRpY2tFeGl0ID0gdGlja0V4aXQudHJhbnNpdGlvbihjb250ZXh0KVxuICAgICAgICAgIC5hdHRyKFwib3BhY2l0eVwiLCBlcHNpbG9uKVxuICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGlzRmluaXRlKGQgPSBwb3NpdGlvbihkKSkgPyB0cmFuc2Zvcm0oZCkgOiB0aGlzLmdldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiKTsgfSk7XG5cbiAgICAgIHRpY2tFbnRlclxuICAgICAgICAgIC5hdHRyKFwib3BhY2l0eVwiLCBlcHNpbG9uKVxuICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uKGQpIHsgdmFyIHAgPSB0aGlzLnBhcmVudE5vZGUuX19heGlzOyByZXR1cm4gdHJhbnNmb3JtKHAgJiYgaXNGaW5pdGUocCA9IHAoZCkpID8gcCA6IHBvc2l0aW9uKGQpKTsgfSk7XG4gICAgfVxuXG4gICAgdGlja0V4aXQucmVtb3ZlKCk7XG5cbiAgICBwYXRoXG4gICAgICAgIC5hdHRyKFwiZFwiLCBvcmllbnQgPT09IGxlZnQgfHwgb3JpZW50ID09IHJpZ2h0XG4gICAgICAgICAgICA/ICh0aWNrU2l6ZU91dGVyID8gXCJNXCIgKyBrICogdGlja1NpemVPdXRlciArIFwiLFwiICsgcmFuZ2UwICsgXCJIMC41VlwiICsgcmFuZ2UxICsgXCJIXCIgKyBrICogdGlja1NpemVPdXRlciA6IFwiTTAuNSxcIiArIHJhbmdlMCArIFwiVlwiICsgcmFuZ2UxKVxuICAgICAgICAgICAgOiAodGlja1NpemVPdXRlciA/IFwiTVwiICsgcmFuZ2UwICsgXCIsXCIgKyBrICogdGlja1NpemVPdXRlciArIFwiVjAuNUhcIiArIHJhbmdlMSArIFwiVlwiICsgayAqIHRpY2tTaXplT3V0ZXIgOiBcIk1cIiArIHJhbmdlMCArIFwiLDAuNUhcIiArIHJhbmdlMSkpO1xuXG4gICAgdGlja1xuICAgICAgICAuYXR0cihcIm9wYWNpdHlcIiwgMSlcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gdHJhbnNmb3JtKHBvc2l0aW9uKGQpKTsgfSk7XG5cbiAgICBsaW5lXG4gICAgICAgIC5hdHRyKHggKyBcIjJcIiwgayAqIHRpY2tTaXplSW5uZXIpO1xuXG4gICAgdGV4dFxuICAgICAgICAuYXR0cih4LCBrICogc3BhY2luZylcbiAgICAgICAgLnRleHQoZm9ybWF0KTtcblxuICAgIHNlbGVjdGlvbi5maWx0ZXIoZW50ZXJpbmcpXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIilcbiAgICAgICAgLmF0dHIoXCJmb250LXNpemVcIiwgMTApXG4gICAgICAgIC5hdHRyKFwiZm9udC1mYW1pbHlcIiwgXCJzYW5zLXNlcmlmXCIpXG4gICAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgb3JpZW50ID09PSByaWdodCA/IFwic3RhcnRcIiA6IG9yaWVudCA9PT0gbGVmdCA/IFwiZW5kXCIgOiBcIm1pZGRsZVwiKTtcblxuICAgIHNlbGVjdGlvblxuICAgICAgICAuZWFjaChmdW5jdGlvbigpIHsgdGhpcy5fX2F4aXMgPSBwb3NpdGlvbjsgfSk7XG4gIH1cblxuICBheGlzLnNjYWxlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNjYWxlID0gXywgYXhpcykgOiBzY2FsZTtcbiAgfTtcblxuICBheGlzLnRpY2tzID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRpY2tBcmd1bWVudHMgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyksIGF4aXM7XG4gIH07XG5cbiAgYXhpcy50aWNrQXJndW1lbnRzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tBcmd1bWVudHMgPSBfID09IG51bGwgPyBbXSA6IHNsaWNlLmNhbGwoXyksIGF4aXMpIDogdGlja0FyZ3VtZW50cy5zbGljZSgpO1xuICB9O1xuXG4gIGF4aXMudGlja1ZhbHVlcyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrVmFsdWVzID0gXyA9PSBudWxsID8gbnVsbCA6IHNsaWNlLmNhbGwoXyksIGF4aXMpIDogdGlja1ZhbHVlcyAmJiB0aWNrVmFsdWVzLnNsaWNlKCk7XG4gIH07XG5cbiAgYXhpcy50aWNrRm9ybWF0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tGb3JtYXQgPSBfLCBheGlzKSA6IHRpY2tGb3JtYXQ7XG4gIH07XG5cbiAgYXhpcy50aWNrU2l6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrU2l6ZUlubmVyID0gdGlja1NpemVPdXRlciA9ICtfLCBheGlzKSA6IHRpY2tTaXplSW5uZXI7XG4gIH07XG5cbiAgYXhpcy50aWNrU2l6ZUlubmVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tTaXplSW5uZXIgPSArXywgYXhpcykgOiB0aWNrU2l6ZUlubmVyO1xuICB9O1xuXG4gIGF4aXMudGlja1NpemVPdXRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrU2l6ZU91dGVyID0gK18sIGF4aXMpIDogdGlja1NpemVPdXRlcjtcbiAgfTtcblxuICBheGlzLnRpY2tQYWRkaW5nID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tQYWRkaW5nID0gK18sIGF4aXMpIDogdGlja1BhZGRpbmc7XG4gIH07XG5cbiAgcmV0dXJuIGF4aXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlzVG9wKHNjYWxlKSB7XG4gIHJldHVybiBheGlzKHRvcCwgc2NhbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc1JpZ2h0KHNjYWxlKSB7XG4gIHJldHVybiBheGlzKHJpZ2h0LCBzY2FsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlzQm90dG9tKHNjYWxlKSB7XG4gIHJldHVybiBheGlzKGJvdHRvbSwgc2NhbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc0xlZnQoc2NhbGUpIHtcbiAgcmV0dXJuIGF4aXMobGVmdCwgc2NhbGUpO1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMTEgSmFzb24gRGF2aWVzIGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNvbmRhdmllcy9uZXdpY2suanNcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTmV3aWNrKHMpIHtcbiAgICB2YXIgYW5jZXN0b3JzID0gW107XG4gICAgdmFyIHRyZWUgPSB7fTtcbiAgICB2YXIgdG9rZW5zID0gcy5zcGxpdCgvXFxzKig7fFxcKHxcXCl8LHw6KVxccyovKTtcbiAgICBmb3IgKHZhciBpPTA7IGk8dG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07XG4gICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgIGNhc2UgJygnOiAvLyBuZXcgYnJhbmNoc2V0XG4gICAgICAgICAgdmFyIHN1YnRyZWUgPSB7fTtcbiAgICAgICAgICB0cmVlLmJyYW5jaHNldCA9IFtzdWJ0cmVlXTtcbiAgICAgICAgICBhbmNlc3RvcnMucHVzaCh0cmVlKTtcbiAgICAgICAgICB0cmVlID0gc3VidHJlZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnLCc6IC8vIGFub3RoZXIgYnJhbmNoXG4gICAgICAgICAgdmFyIHN1YnRyZWUgPSB7fTtcbiAgICAgICAgICBhbmNlc3RvcnNbYW5jZXN0b3JzLmxlbmd0aC0xXS5icmFuY2hzZXQucHVzaChzdWJ0cmVlKTtcbiAgICAgICAgICB0cmVlID0gc3VidHJlZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnKSc6IC8vIG9wdGlvbmFsIG5hbWUgbmV4dFxuICAgICAgICAgIHRyZWUgPSBhbmNlc3RvcnMucG9wKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJzonOiAvLyBvcHRpb25hbCBsZW5ndGggbmV4dFxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHZhciB4ID0gdG9rZW5zW2ktMV07XG4gICAgICAgICAgaWYgKHggPT0gJyknIHx8IHggPT0gJygnIHx8IHggPT0gJywnKSB7XG4gICAgICAgICAgICB0cmVlLm5hbWUgPSB0b2tlbjtcbiAgICAgICAgICB9IGVsc2UgaWYgKHggPT0gJzonKSB7XG4gICAgICAgICAgICB0cmVlLmxlbmd0aCA9IHBhcnNlRmxvYXQodG9rZW4pO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRyZWU7XG59XG5cbiIsIi8qKlxuICogQ29weXJpZ2h0IMKpIDIwMTUgLSAyMDE4IFRoZSBCcm9hZCBJbnN0aXR1dGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSAoaHR0cHM6Ly9naXRodWIuY29tL2Jyb2FkaW5zdGl0dXRlL2d0ZXgtdml6L2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQpXG4gKi9cbi8qXG4gICAgRGVuZHJvZ3JhbSB2aXN1YWxpemVzIGEgdGV4dC1iYXNlZCBOZXdpY2sgdHJlZSB1c2luZyBEMyBWNS5cblxuICAgIGRlcGVuZGVuY2llczpcbiAgICBkMyB2NVxuICAgIHRoZSBuZXdpY2sgcGFyc2VyOiBuZXdpY2suanNcblxuICAgIHJlZmVyZW5jZXM6XG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2QzL2QzLWhpZXJhcmNoeVxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNvbmRhdmllcy9uZXdpY2suanMvXG5cbiAgICBub3RlcyBvbiB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXM6XG4gICAgLSBpdCB1c2VzIHBhcnNlTmV3aWNrKCkgdG8gY29udmVydCB0aGUgbmV3aWNrIHRyZWUgaW50byB0aGUgZm9sbG93aW5nIGpzb246XG4gICAgICAgIHtcbiAgICAgICAgICAgIGJyYW5jaHNldDpbY2hpbGQgbm9kZSBqc29uIG9iamVjdHNdLFxuICAgICAgICAgICAgbmFtZTogXCJcIiAvLyBpbnRlcm5hbCBub2RlcyB3b3VsZCBoYXZlIG5vIHJlYWwgbGFiZWxzXG4gICAgICAgIH1cbiAgICAgICBUaGlzIGpzb24gc3RydWN0dXJlIGlzIHRoZSBpbnB1dCBkYXRhIG9mIGQzLmhpZXJhcmNoeSgpXG5cbiAgICAtIEluIHRoZSBkMy5oaWVyYXJjaHkoKSwgdGhlIHJvb3Qgbm9kZSBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOlxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbjogW2NvLCBjb10sXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgYnJhbmNoc2V0OiBBcnJheSgyKSxcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm5vZGUgbmFtZVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVwdGg6IDAsXG4gICAgICAgICAgICBoZWlnaHQ6IGludGVnZXIsXG4gICAgICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgICAgICB2YWx1ZTogOVxuICAgICAgICB9XG4gKi9cblxuLy8gVE9ETzogZWxpbWluYXRlIGhhcmQtY29kZWQgdmFsdWVzXG5cbmltcG9ydCB7aGllcmFyY2h5fSBmcm9tIFwiZDMtaGllcmFyY2h5XCI7XG5pbXBvcnQge2FzY2VuZGluZ30gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2F4aXNCb3R0b20sIGF4aXNMZWZ0fSBmcm9tIFwiZDMtYXhpc1wiO1xuaW1wb3J0IHtzY2FsZUxpbmVhciwgc2NhbGVCYW5kfSBmcm9tIFwiZDMtc2NhbGVcIjtcbmltcG9ydCB7cGFyc2VOZXdpY2t9IGZyb20gXCIuL25ld2lja1wiO1xuY29uc3QgdmVyYm9zZSA9IGZhbHNlO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVuZHJvZ3JhbSB7XG4gICAgY29uc3RydWN0b3IobmV3aWNrLCBvcmllbnRhdGlvbj0naCcpe1xuICAgICAgICB0aGlzLm5ld2ljayA9IG5ld2ljaztcbiAgICAgICAgdGhpcy5vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uO1xuICAgICAgICB0aGlzLnBvc3RvcmRlciA9IFtdO1xuICAgICAgICB0aGlzLnJvb3QgPSBoaWVyYXJjaHkocGFyc2VOZXdpY2sobmV3aWNrKSwgKGQpID0+IGQuYnJhbmNoc2V0KVxuICAgICAgICAgICAgLnN1bSgoZCk9PmQuYnJhbmNoc2V0PzA6MSlcbiAgICAgICAgICAgIC5zb3J0KChhLGIpPT5hLnZhbHVlLWIudmFsdWV8fGEuZGF0YS5sZW5ndGgtYi5kYXRhLmxlbmd0aCk7XG4gICAgICAgIHRoaXMubGVhdmVzID0gdGhpcy5yb290LmxlYXZlcygpLnNvcnQoKGEsIGIpID0+IChhLnZhbHVlIC0gYi52YWx1ZSkgfHwgYXNjZW5kaW5nKGEuZGF0YS5sZW5ndGgsIGIuZGF0YS5sZW5ndGgpKTtcbiAgICAgICAgdGhpcy53aWR0aCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMueFNjYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnlTY2FsZSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBkcmF3KGRvbSwgd2lkdGgsIGhlaWdodCl7XG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIHRoaXMuX3NldFhTY2FsZSgpO1xuICAgICAgICB0aGlzLl9zZXRZU2NhbGUoKTtcbiAgICAgICAgaWYgKCdoJyA9PSB0aGlzLm9yaWVudGF0aW9uKSB0aGlzLl9kcmF3SFRyZWUoZG9tKTtcbiAgICAgICAgZWxzZSB0aGlzLl9kcmF3VlRyZWUoZG9tKTtcbiAgICB9XG5cbiAgICAvLy8vLy8vIHByaXZhdGUgbWV0aG9kcyAvLy8vLy8vXG5cbiAgICBfZHJhd0hUcmVlKGRvbSl7XG4gICAgICAgIGNvbnN0IHNldFkgPSAobm9kZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIGEgbGVhZiBub2RlXG4gICAgICAgICAgICAgICAgbm9kZS55ID0gdGhpcy55U2NhbGUobm9kZS5kYXRhLm5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBhbiBpbnRlcm5hbCBub2RlXG4gICAgICAgICAgICAgICAgLy8gdGhlIHkgY29vcmRpbmF0ZSBvZiBhbiBpbnRlcm5hbCBub2RlIGlzIHRoZSBhdmVyYWdlIHkgZnJvbSBpdHMgY2hpbGRyZW5cbiAgICAgICAgICAgICAgICBub2RlLnkgPSBub2RlLmNoaWxkcmVuLnJlZHVjZSgoc3VtLCBkKT0+c3VtK2QueSwgMCkvbm9kZS5jaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNldFggPSAobm9kZSkgPT4ge1xuICAgICAgICAgICAgbm9kZS54ID0gdGhpcy54U2NhbGUodGhpcy5fZ2V0QnJhbmNoTGVuZ3RoVG9Sb290KG5vZGUpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBmcm9tIHRoZSBsZWFmIGxldmVsIC0+IHJvb3RcbiAgICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLl9zb3J0Tm9kZXNCeUxldmVsKCk7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIHNldFgobm9kZSk7XG4gICAgICAgICAgICBzZXRZKG5vZGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBkb20uc2VsZWN0QWxsKCcuYnJhbmNoJylcbiAgICAgICAgICAgIC5kYXRhKG5vZGVzKVxuICAgICAgICAgICAgLmVudGVyKCkuYXBwZW5kKFwibGluZVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4MVwiLCAoZCkgPT4gZC54KVxuICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCAoZCkgPT4gZC5kYXRhLmxlbmd0aD9kLnggLSB0aGlzLnhTY2FsZShkLmRhdGEubGVuZ3RoKTpkLngpXG4gICAgICAgICAgICAuYXR0cihcInkxXCIsIChkKSA9PiBkLnkgKyB0aGlzLnlTY2FsZS5iYW5kd2lkdGgoKS8yKVxuICAgICAgICAgICAgLmF0dHIoXCJ5MlwiLCAoZCkgPT4gZC55ICsgdGhpcy55U2NhbGUuYmFuZHdpZHRoKCkvMilcbiAgICAgICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiZ3JheVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgMSk7XG5cbiAgICAgICAgLy8gZm9yIGFsbCBpbnRlcm5hbCBub2Rlc1xuICAgICAgICBjb25zdCBpbm9kZXMgPSB0aGlzLnJvb3QuZGVzY2VuZGFudHMoKS5maWx0ZXIoKGQpPT5kLmhlaWdodCkuc29ydCgoYSxiKT0+Yi5oZWlnaHQtYS5oZWlnaHQpO1xuICAgICAgICBkb20uc2VsZWN0QWxsKCcuYXJtJylcbiAgICAgICAgICAgIC5kYXRhKGlub2RlcylcbiAgICAgICAgICAgIC5lbnRlcigpLmFwcGVuZChcImxpbmVcIilcbiAgICAgICAgICAgIC5hdHRyKFwieDFcIiwgKGQpID0+IGQueClcbiAgICAgICAgICAgIC5hdHRyKFwieDJcIiwgKGQpID0+IGQueClcbiAgICAgICAgICAgIC5hdHRyKFwieTFcIiwgKGQpID0+IGQuY2hpbGRyZW5bMF0ueSArIHRoaXMueVNjYWxlLmJhbmR3aWR0aCgpLzIpXG4gICAgICAgICAgICAuYXR0cihcInkyXCIsIChkKSA9PiBkLmNoaWxkcmVuWzFdLnkgKyB0aGlzLnlTY2FsZS5iYW5kd2lkdGgoKS8yKVxuICAgICAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJncmF5XCIpXG4gICAgICAgICAgICAuYXR0cihcInN0cm9rZS13aWR0aFwiLCAxKTtcblxuICAgICAgICBkb20uc2VsZWN0QWxsKCcubm9kZScpXG4gICAgICAgICAgICAuZGF0YShpbm9kZXMpXG4gICAgICAgICAgICAuZW50ZXIoKS5hcHBlbmQoXCJjaXJjbGVcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY3hcIiwgKGQpID0+IGQueClcbiAgICAgICAgICAgIC5hdHRyKFwiY3lcIiwgKGQpID0+IGQueSArIHRoaXMueVNjYWxlLmJhbmR3aWR0aCgpLzIpXG4gICAgICAgICAgICAuYXR0cihcInJcIiwgMilcbiAgICAgICAgICAgIC5hdHRyKCdmaWxsJywgJyMzMzMnKVxuICAgICAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIDAuNSlcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJkZW5kcm9ncmFtLW5vZGVcIilcbiAgICAgICAgICAgIC5vbihcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbihkKXtcbiAgICAgICAgICAgICAgICBkMy5zZWxlY3QodGhpcykuYXR0cihcInJcIiwgMyk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZC5sZWF2ZXMoKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm9uKFwibW91c2VvdXRcIiwgZnVuY3Rpb24oZCl7XG4gICAgICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLmF0dHIoXCJyXCIsIDIpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBheGlzXG4gICAgICAgIC8vIEFkZCB0aGUgeCBBeGlzXG4gICAgICAgIGRvbS5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiZGVuZHJvZ3JhbS1heGlzXCIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZSgwLFwiICsgdGhpcy5oZWlnaHQgKyBcIilcIilcbiAgICAgICAgICAgIC5jYWxsKFxuICAgICAgICAgICAgICAgIGF4aXNCb3R0b20odGhpcy54U2NhbGUpXG4gICAgICAgICAgICAgICAgICAgIC50aWNrcygzKVxuICAgICAgICAgICAgICAgIC8vIC50aWNrVmFsdWVzKFtNYXRoLmZsb29yKHRoaXMuX2dldE1heEJyYW5jaExlbmd0aCgpLzIpLCBNYXRoLmZsb29yKHRoaXMuX2dldE1heEJyYW5jaExlbmd0aCgpKV0pXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIF9zb3J0Tm9kZXNCeUxldmVsKCl7XG4gICAgICAgIC8vIHJldHVybnMgYSBsaXN0IG9mIG5vZGVzIG9yZGVyZWQgYnkgYW5jZXN0cmFsIGxldmVsLCB0aGVuIGJ5IGJyYW5jaCBsZW5ndGhcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdC5kZXNjZW5kYW50cygpLnNvcnQoKGEsIGIpID0+IChhLmhlaWdodCAtIGIuaGVpZ2h0KSB8fCBhc2NlbmRpbmcoYS5kYXRhLmxlbmd0aCwgYi5kYXRhLmxlbmd0aCkpO1xuICAgIH1cblxuICAgIF9kcmF3VlRyZWUoZG9tKXtcbiAgICAgICAgY29uc3Qgc2V0WCA9IChub2RlKSA9PiB7XG4gICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gYSBsZWFmIG5vZGVcbiAgICAgICAgICAgICAgICBub2RlLnggPSB0aGlzLnhTY2FsZShub2RlLmRhdGEubmFtZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGFuIGludGVybmFsIG5vZGVcbiAgICAgICAgICAgICAgICAvLyB0aGUgeSBjb29yZGluYXRlIG9mIGFuIGludGVybmFsIG5vZGUgaXMgdGhlIGF2ZXJhZ2UgeSBmcm9tIGl0cyBjaGlsZHJlblxuICAgICAgICAgICAgICAgIG5vZGUueCA9IG5vZGUuY2hpbGRyZW4ucmVkdWNlKChzdW0sIGQpPT5zdW0rZC54LCAwKS9ub2RlLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2V0WSA9IChub2RlKSA9PiB7XG4gICAgICAgICAgICBub2RlLnkgPSB0aGlzLnlTY2FsZSh0aGlzLl9nZXRCcmFuY2hMZW5ndGhUb1Jvb3Qobm9kZSkpO1xuICAgICAgICB9O1xuICAgICAgICAvLyBmcm9tIHRoZSBsZWFmIGxldmVsIC0+IHJvb3RcbiAgICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLl9zb3J0Tm9kZXNCeUxldmVsKCk7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIHNldFgobm9kZSk7XG4gICAgICAgICAgICBzZXRZKG5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgZG9tLnNlbGVjdEFsbCgnLmJyYW5jaCcpXG4gICAgICAgICAgICAuZGF0YShub2RlcylcbiAgICAgICAgICAgIC5lbnRlcigpLmFwcGVuZChcImxpbmVcIilcbiAgICAgICAgICAgIC5hdHRyKFwieTFcIiwgKGQpID0+IGQueSlcbiAgICAgICAgICAgIC5hdHRyKFwieTJcIiwgKGQpID0+IGQuZGF0YS5sZW5ndGg/ZC55IC0gdGhpcy55U2NhbGUoZC5kYXRhLmxlbmd0aCk6ZC55KVxuICAgICAgICAgICAgLmF0dHIoXCJ4MVwiLCAoZCkgPT4gZC54ICsgdGhpcy54U2NhbGUuYmFuZHdpZHRoKCkvMilcbiAgICAgICAgICAgIC5hdHRyKFwieDJcIiwgKGQpID0+IGQueCArIHRoaXMueFNjYWxlLmJhbmR3aWR0aCgpLzIpXG4gICAgICAgICAgICAuYXR0cihcInN0cm9rZVwiLCBcImdyYXlcIilcbiAgICAgICAgICAgIC5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDEpO1xuXG4gICAgICAgIC8vIGZvciBhbGwgaW50ZXJuYWwgbm9kZXNcbiAgICAgICAgY29uc3QgaW5vZGVzID0gdGhpcy5yb290LmRlc2NlbmRhbnRzKCkuZmlsdGVyKChkKT0+ZC5oZWlnaHQpLnNvcnQoKGEsYik9PmIuaGVpZ2h0LWEuaGVpZ2h0KTtcbiAgICAgICAgZG9tLnNlbGVjdEFsbCgnLmFybScpXG4gICAgICAgICAgICAuZGF0YShpbm9kZXMpXG4gICAgICAgICAgICAuZW50ZXIoKS5hcHBlbmQoXCJsaW5lXCIpXG4gICAgICAgICAgICAuYXR0cihcInkxXCIsIChkKSA9PiBkLnkpXG4gICAgICAgICAgICAuYXR0cihcInkyXCIsIChkKSA9PiBkLnkpXG4gICAgICAgICAgICAuYXR0cihcIngxXCIsIChkKSA9PiBkLmNoaWxkcmVuWzBdLnggKyB0aGlzLnhTY2FsZS5iYW5kd2lkdGgoKS8yKVxuICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCAoZCkgPT4gZC5jaGlsZHJlblsxXS54ICsgdGhpcy54U2NhbGUuYmFuZHdpZHRoKCkvMilcbiAgICAgICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiZ3JheVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgMSk7XG5cbiAgICAgICAgZG9tLnNlbGVjdEFsbCgnLm5vZGUnKVxuICAgICAgICAgICAgLmRhdGEoaW5vZGVzKVxuICAgICAgICAgICAgLmVudGVyKCkuYXBwZW5kKFwiY2lyY2xlXCIpXG4gICAgICAgICAgICAuYXR0cihcImN4XCIsIChkKSA9PiBkLnggKyB0aGlzLnhTY2FsZS5iYW5kd2lkdGgoKS8yKVxuICAgICAgICAgICAgLmF0dHIoXCJjeVwiLCAoZCkgPT4gZC55KVxuICAgICAgICAgICAgLmF0dHIoXCJyXCIsIDIpXG4gICAgICAgICAgICAuYXR0cignZmlsbCcsICcjMzMzJylcbiAgICAgICAgICAgIC5hdHRyKFwib3BhY2l0eVwiLCAwLjUpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiZGVuZHJvZ3JhbS1ub2RlXCIpXG4gICAgICAgICAgICAub24oXCJtb3VzZW92ZXJcIiwgZnVuY3Rpb24oZCl7XG4gICAgICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLmF0dHIoXCJyXCIsIDMpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGQubGVhdmVzKCkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5vbihcIm1vdXNlb3V0XCIsIGZ1bmN0aW9uKGQpe1xuICAgICAgICAgICAgICAgIGQzLnNlbGVjdCh0aGlzKS5hdHRyKFwiclwiLCAyKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gYXhpc1xuICAgICAgICAvLyBBZGQgdGhlIHggQXhpc1xuICAgICAgICBkb20uYXBwZW5kKFwiZ1wiKVxuICAgICAgICAgICAgLy8gLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke3RoaXMud2lkdGh9LCAwKWApXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiZGVuZHJvZ3JhbS1heGlzXCIpXG4gICAgICAgICAgICAuY2FsbChcbiAgICAgICAgICAgICAgICBheGlzTGVmdCh0aGlzLnlTY2FsZSlcbiAgICAgICAgICAgICAgICAgICAgLnRpY2tzKDMpXG4gICAgICAgICAgICAgICAgLy8gLnRpY2tWYWx1ZXMoW01hdGguZmxvb3IodGhpcy5fZ2V0TWF4QnJhbmNoTGVuZ3RoKCkvMiksIE1hdGguZmxvb3IodGhpcy5fZ2V0TWF4QnJhbmNoTGVuZ3RoKCkpXSlcbiAgICAgICAgICAgICk7XG5cbiAgICB9XG5cbiAgICBfZ2V0QnJhbmNoTGVuZ3RoVG9Sb290KG5vZGUpIHtcbiAgICAgICAgLy8gbm9kZTogYSBkMy5oaWVyYXJjaHkgbm9kZVxuICAgICAgICByZXR1cm4gbm9kZS5wYXRoKHRoaXMucm9vdClcbiAgICAgICAgICAgIC5yZWR1Y2UoKHN1bSwgZCkgPT4gZC5kYXRhLmxlbmd0aD9zdW0rZC5kYXRhLmxlbmd0aDpzdW0sIDApO1xuICAgIH1cblxuICAgIF9nZXRNYXhCcmFuY2hMZW5ndGgoKSB7XG4gICAgICAgIC8vIHRoZSBhc3N1bXB0aW9uIGhlcmUgaXMgdGhhdCBhbGwgbGVhZiBub2RlcyBoYXZlIHRoZSBzYW1lIGRpc3RhbmNlIHRvIHRoZSByb290LlxuICAgICAgICBsZXQgbm9kZSA9IHRoaXMubGVhdmVzWzBdOyAvLyByYW5kb21seSBwaWNrcyBhIGxlYWYgbm9kZVxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0QnJhbmNoTGVuZ3RoVG9Sb290KG5vZGUpO1xuICAgIH1cblxuICAgIF9hc3NpZ25Qb3N0b3JkZXIobm9kZSl7XG4gICAgICAgIC8vIGFzc2lnbnMgcG9zdC1vcmRlciBvZiBhbGwgbGVhZiBub2Rlc1xuICAgICAgICBpZihub2RlLmNoaWxkcmVuID09PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgLy8gYmFzZSBjYXNlXG4gICAgICAgICAgICB0aGlzLnBvc3RvcmRlci5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fYXNzaWduUG9zdG9yZGVyKG5vZGUuY2hpbGRyZW5bMF0pO1xuICAgICAgICAgICAgdGhpcy5fYXNzaWduUG9zdG9yZGVyKG5vZGUuY2hpbGRyZW5bMV0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3NldFhTY2FsZSgpe1xuICAgICAgICBpZiAoJ2gnID09IHRoaXMub3JpZW50YXRpb24pe1xuICAgICAgICAgICAgdGhpcy54U2NhbGUgPSBzY2FsZUxpbmVhcigpXG4gICAgICAgICAgICAgICAgLmRvbWFpbihbMCwgdGhpcy5fZ2V0TWF4QnJhbmNoTGVuZ3RoKCldKVxuICAgICAgICAgICAgICAgIC5yYW5nZShbMCwgdGhpcy53aWR0aF0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9hc3NpZ25Qb3N0b3JkZXIodGhpcy5yb290KTtcbiAgICAgICAgICAgIGlmICh2ZXJib3NlKSBjb25zb2xlLmxvZyh0aGlzLnBvc3RvcmRlcik7XG4gICAgICAgICAgICB0aGlzLnhTY2FsZSA9IHNjYWxlQmFuZCgpXG4gICAgICAgICAgICAgICAgLmRvbWFpbih0aGlzLnBvc3RvcmRlci5tYXAoKGQpID0+IGQuZGF0YS5uYW1lKSlcbiAgICAgICAgICAgICAgICAucmFuZ2UoWzAsIHRoaXMud2lkdGhdKVxuICAgICAgICAgICAgICAgIC5wYWRkaW5nKC4wNSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfc2V0WVNjYWxlKCl7XG4gICAgICAgIGlmICgnaCcgPT0gdGhpcy5vcmllbnRhdGlvbil7XG4gICAgICAgICAgICB0aGlzLl9hc3NpZ25Qb3N0b3JkZXIodGhpcy5yb290KTtcbiAgICAgICAgICAgIGlmICh2ZXJib3NlKSBjb25zb2xlLmxvZyh0aGlzLnBvc3RvcmRlcik7XG4gICAgICAgICAgICB0aGlzLnlTY2FsZSA9IHNjYWxlQmFuZCgpXG4gICAgICAgICAgICAgICAgLmRvbWFpbih0aGlzLnBvc3RvcmRlci5tYXAoKGQpID0+IGQuZGF0YS5uYW1lKSlcbiAgICAgICAgICAgICAgICAucmFuZ2UoWzAsIHRoaXMuaGVpZ2h0XSlcbiAgICAgICAgICAgICAgICAucGFkZGluZyguMDUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy55U2NhbGUgPSBzY2FsZUxpbmVhcigpXG4gICAgICAgICAgICAgICAgLmRvbWFpbihbMCwgdGhpcy5fZ2V0TWF4QnJhbmNoTGVuZ3RoKCldKVxuICAgICAgICAgICAgICAgIC5yYW5nZShbMCwgdGhpcy5oZWlnaHRdKVxuICAgICAgICB9XG4gICAgfVxuXG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuaW1wb3J0IHtjcmVhdGVTdmd9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge3NlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG5pbXBvcnQgRGVuZHJvSGVhdG1hcENvbmZpZyBmcm9tIFwiLi9EZW5kcm9IZWF0bWFwQ29uZmlnXCI7XG5pbXBvcnQgRGVuZHJvZ3JhbSBmcm9tIFwiLi9EZW5kcm9ncmFtXCI7XG5pbXBvcnQgSGVhdG1hcCBmcm9tIFwiLi9IZWF0bWFwXCI7XG5pbXBvcnQgVG9vbHRpcCBmcm9tIFwiLi9Ub29sdGlwXCI7XG5pbXBvcnQgVG9vbGJhciBmcm9tIFwiLi9Ub29sYmFyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlbmRyb0hlYXRtYXAge1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0gY29sdW1uVHJlZSB7U3RyaW5nfSBhIG5ld2ljayB0cmVlXG4gICAgICogQHBhcmFtIHJvd1RyZWUge1N0cmluZ30gYSBuZXdpY2sgdHJlZVxuICAgICAqIEBwYXJhbSBoZWF0bWFwRGF0YSB7TGlzdH0gb2Ygb2JqZWN0cyB3aXRoIGF0dHJpYnV0ZXM6IHg6IFN0cmluZywgeTpTdHJpbmcsIHZhbHVlOkZsb2F0LCBkaXNwbGF5VmFsdWU6RmxvYXRcbiAgICAgKiBAcGFyYW0gY29sb3Ige1N0cmluZ30gYSBjb2xvciBuYW1lIHRoYXQncyBhdmFpbGFibGUgaW4gQ29sb3JzLmdldENvbG9ySW50ZXJwb2xhdG9yXG4gICAgICogQHBhcmFtIHIge0ludGVnZXJ9IHRoZSBkZWdyZWVzIG9mIHJvdW5kZWQtY29ybmVycyBvZiB0aGUgaGVhdG1hcCBjZWxsc1xuICAgICAqIEBwYXJhbSBjb25maWcge0RlbmRyb0hlYXRtYXBDb25maWd9XG4gICAgICogQHBhcmFtIHVzZUxvZyB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihjb2x1bW5UcmVlLCByb3dUcmVlLCBoZWF0bWFwRGF0YSwgY29sb3I9XCJZbEduQnVcIiwgcj0yLCBjb25maWc9bmV3IERlbmRyb0hlYXRtYXBDb25maWcoKSwgdG9vbHRpcElkPVwiZG1hcFRvb2x0aXBcIiwgdXNlTG9nPXRydWUsIGJhc2U9MTAsIHRpdGxlID0gJycpe1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZy5nZXQoKTtcbiAgICAgICAgLy9pbnB1dCBldmFsdWF0aW9uc1xuICAgICAgICBjb2x1bW5UcmVlID0gY29sdW1uVHJlZT09PXVuZGVmaW5lZHx8Y29sdW1uVHJlZS5zdGFydHNXaXRoKFwiTm90IGVub3VnaCBkYXRhXCIpP3VuZGVmaW5lZDpjb2x1bW5UcmVlO1xuICAgICAgICByb3dUcmVlID0gcm93VHJlZT09PXVuZGVmaW5lZHx8cm93VHJlZS5zdGFydHNXaXRoKFwiTm90IGVub3VnaCBkYXRhXCIpP3VuZGVmaW5lZDpyb3dUcmVlO1xuICAgICAgICAvLyBhc3NpZ24gYXR0cmlidXRlIHZhbHVlcyBiYXNlZCBvbiBpbnB1dCBhcmd1bWVudHNcbiAgICAgICAgdGhpcy5kYXRhID0ge1xuICAgICAgICAgICAgY29sdW1uVHJlZTogY29sdW1uVHJlZSxcbiAgICAgICAgICAgIHJvd1RyZWU6IHJvd1RyZWUsXG4gICAgICAgICAgICBoZWF0bWFwOiBoZWF0bWFwRGF0YSxcbiAgICAgICAgICAgIGV4dGVybmFsOiB1bmRlZmluZWRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vYmplY3RzID0ge1xuICAgICAgICAgICAgY29sdW1uVHJlZTogdGhpcy5kYXRhLmNvbHVtblRyZWU9PT11bmRlZmluZWQ/IHVuZGVmaW5lZDpuZXcgRGVuZHJvZ3JhbSh0aGlzLmRhdGEuY29sdW1uVHJlZSwgXCJ2XCIpLFxuICAgICAgICAgICAgcm93VHJlZTogdGhpcy5kYXRhLnJvd1RyZWU9PT11bmRlZmluZWQ/dW5kZWZpbmVkOm5ldyBEZW5kcm9ncmFtKHRoaXMuZGF0YS5yb3dUcmVlLCBcImhcIiksXG4gICAgICAgICAgICBoZWF0bWFwOiBuZXcgSGVhdG1hcCh0aGlzLmRhdGEuaGVhdG1hcCwgdXNlTG9nLCBiYXNlLCBjb2xvciwgciwgdG9vbHRpcElkKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnZpc3VhbENvbXBvbmVudHMgPSB7XG4gICAgICAgICAgICBzdmc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbHVtblRyZWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHJvd1RyZWU6IHVuZGVmaW5lZFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMudGl0bGUgPSB0aXRsZTtcbiAgICAgICAgdGhpcy50b29sYmFyID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnRvb2x0aXAgPSB0aGlzLm9iamVjdHMuaGVhdG1hcC50b29sdGlwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSB0aGUgdG9vbGJhciBwYW5lbFxuICAgICAqIEBwYXJhbSBkb21JZCB7U3RyaW5nfSB0aGUgdG9vbGJhcidzIGRvbSBJRFxuICAgICAqIEBwYXJhbSB0b29sdGlwIHtUb29sdGlwfVxuICAgICAqIEByZXR1cm5zIHtUb29sYmFyfVxuICAgICAqL1xuXG4gICAgY3JlYXRlVG9vbGJhcihkb21JZCwgdG9vbHRpcCl7XG4gICAgICAgIHRoaXMudG9vbGJhciA9IG5ldyBUb29sYmFyKGRvbUlkLCB0b29sdGlwKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbGJhcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW5kZXIgdGhlIGRlbmRyb2dyYW1zIGFuZCBjb3JyZXNwb25kaW5nIGhlYXRtYXBcbiAgICAgKiBAcGFyYW0gZG9tSWQge1N0cmluZ30gdGhlIHBhcmVudCBET00gaWQgb2YgdGhlIFNWR1xuICAgICAqIEBwYXJhbSBzdmdJZCB7U3RyaW5nfSBvZiB0aGUgU1ZHXG4gICAgICogQHBhcmFtIHNob3dDb2x1bW5UcmVlIHtCb29sZWFufSByZW5kZXIgdGhlIGNvbHVtbiBkZW5kcm9ncmFtXG4gICAgICogQHBhcmFtIHNob3dSb3dUcmVlIHtCb29sZWFufSByZW5kZXIgdGhlIHJvdyBkZW5kcm9ncmFtXG4gICAgICogQHBhcmFtIGxlZ2VuZFBvcyB7RW51bX0gd2hlcmUgdG8gcGxhY2UgdGhlIGNvbG9yIGxlZ2VuZDogYm90dG9tLCB0b3BcbiAgICAgKiBAcGFyYW0gdGlja3Mge0ludGVnZXJ9IG51bWJlciBvZiBiaW5zIG9mIHRoZSBjb2xvciBsZWdlbmRcbiAgICAgKi9cbiAgICByZW5kZXIoZG9tSWQsIHN2Z0lkLCBzaG93Q29sdW1uVHJlZT10cnVlLCBzaG93Um93VHJlZT10cnVlLCBsZWdlbmRQb3M9XCJ0b3BcIiwgdGlja3M9NSl7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUNvbmZpZyhsZWdlbmRQb3MpO1xuICAgICAgICB0aGlzLnZpc3VhbENvbXBvbmVudHMuc3ZnID0gY3JlYXRlU3ZnKGRvbUlkLCB0aGlzLmNvbmZpZy53LCB0aGlzLmNvbmZpZy5oLCB0aGlzLmNvbmZpZy5tYXJnaW4sIHN2Z0lkKTtcblxuICAgICAgICBsZXQgeGxpc3QgPSB1bmRlZmluZWQsXG4gICAgICAgICAgICB5bGlzdCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoc2hvd0NvbHVtblRyZWUgJiYgdGhpcy5vYmplY3RzLmNvbHVtblRyZWUhPT11bmRlZmluZWQpe1xuICAgICAgICAgICAgdGhpcy52aXN1YWxDb21wb25lbnRzLmNvbHVtblRyZWUgPSB0aGlzLl9yZW5kZXJUcmVlKFwiY29sdW1uXCIsIHRoaXMub2JqZWN0cy5jb2x1bW5UcmVlLCB0aGlzLmNvbmZpZy5wYW5lbHMudG9wKTtcbiAgICAgICAgICAgIHhsaXN0ID0gdGhpcy5vYmplY3RzLmNvbHVtblRyZWUueFNjYWxlLmRvbWFpbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaG93Um93VHJlZSAmJiB0aGlzLm9iamVjdHMucm93VHJlZSAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIHRoaXMudmlzdWFsQ29tcG9uZW50cy5yb3dUcmVlID0gdGhpcy5fcmVuZGVyVHJlZShcInJvd1wiLCB0aGlzLm9iamVjdHMucm93VHJlZSwgdGhpcy5jb25maWcucGFuZWxzLmxlZnQpO1xuICAgICAgICAgICAgeWxpc3QgPSB0aGlzLm9iamVjdHMucm93VHJlZS55U2NhbGUuZG9tYWluKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50aXRsZSAhPSAnJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy50aXRsZSk7XG4gICAgICAgICAgICBzZWxlY3QoYCMke2RvbUlkfS1zdmdgKS5hcHBlbmQoJ3RleHQnKVxuICAgICAgICAgICAgICAgIC5hdHRyKCd4JywgMClcbiAgICAgICAgICAgICAgICAuYXR0cigneScsIDIwKVxuICAgICAgICAgICAgICAgIC50ZXh0KHRoaXMudGl0bGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmVuZGVySGVhdG1hcCh0aGlzLm9iamVjdHMuaGVhdG1hcCwgeGxpc3QsIHlsaXN0LCB0aWNrcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVuZGVyIGEgbmV3aWNrIHRyZWVcbiAgICAgKiBAcGFyYW0gZGlyZWN0aW9uIHtlbnVtfSBjb2x1bW4gb3Igcm93XG4gICAgICogQHBhcmFtIHRyZWUge0RlbmRyb2dyYW19IGEgRGVuZHJvZ3JhbSBvYmplY3RcbiAgICAgKiBAcGFyYW0gY29uZmlnIHtPYmplY3R9IGEgcGFuZWwgY29uZmlnIHdpdGggYXR0cmlidXRlczogeCwgeSwgd2lkdGggYW5kIGhlaWdodFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3JlbmRlclRyZWUoZGlyZWN0aW9uLCB0cmVlLCBjb25maWcpe1xuICAgICAgICBsZXQgc3ZnID0gdGhpcy52aXN1YWxDb21wb25lbnRzLnN2ZztcbiAgICAgICAgY29uc3QgbGFiZWxDbGFzcyA9IGRpcmVjdGlvbj09XCJyb3dcIj9cIi5leHAtbWFwLXlsYWJlbFwiOlwiLmV4cC1tYXAteGxhYmVsXCI7XG5cbiAgICAgICAgY29uc3QgdG9vbHRpcCA9IHRoaXMudmlzdWFsQ29tcG9uZW50cy50b29sdGlwO1xuICAgICAgICBjb25zdCBnID0gc3ZnLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgIC5hdHRyKFwiaWRcIiwgY29uZmlnLmlkKVxuICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke2NvbmZpZy54fSwgJHtjb25maWcueX0pYCk7XG4gICAgICAgIHRyZWUuZHJhdyhnLCBjb25maWcudywgY29uZmlnLmgpO1xuXG4gICAgICAgIGNvbnN0IG1vdXNlb3V0ID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHNlbGVjdCh0aGlzKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiclwiLCAyKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcIiMzMzNcIik7XG4gICAgICAgICAgICBzdmcuc2VsZWN0QWxsKGxhYmVsQ2xhc3MpLmNsYXNzZWQoXCJoaWdobGlnaHRlZFwiLCBmYWxzZSk7XG4gICAgICAgICAgICBzdmcuc2VsZWN0QWxsKFwiLmxlYWYtY29sb3JcIikuY2xhc3NlZChcImhpZ2hsaWdodGVkXCIsIGZhbHNlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBtb3VzZW92ZXIgPSBmdW5jdGlvbihkKXtcbiAgICAgICAgICAgIHNlbGVjdCh0aGlzKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiclwiLCA2KVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcInJlZFwiKTtcbiAgICAgICAgICAgIGxldCBpZHMgPSBkLmxlYXZlcygpLm1hcCgobm9kZSk9Pm5vZGUuZGF0YS5uYW1lKTtcbiAgICAgICAgICAgIHN2Zy5zZWxlY3RBbGwobGFiZWxDbGFzcylcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChsYWJlbCk9Pmlkcy5pbmNsdWRlcyhsYWJlbCkpXG4gICAgICAgICAgICAgICAgLmNsYXNzZWQoXCJoaWdobGlnaHRlZFwiLCB0cnVlKTtcbiAgICAgICAgICAgIHN2Zy5zZWxlY3RBbGwoXCIubGVhZi1jb2xvclwiKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGxhYmVsKT0+aWRzLmluY2x1ZGVzKGxhYmVsKSlcbiAgICAgICAgICAgICAgICAuY2xhc3NlZChcImhpZ2hsaWdodGVkXCIsIHRydWUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGcuc2VsZWN0QWxsKFwiLmRlbmRyb2dyYW0tbm9kZVwiKVxuICAgICAgICAgICAgLm9uKFwibW91c2VvdmVyXCIsIG1vdXNlb3ZlcilcbiAgICAgICAgICAgIC5vbihcIm1vdXNlb3V0XCIsIG1vdXNlb3V0KTtcbiAgICAgICAgcmV0dXJuIGc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVuZGVyIHRoZSBoZWF0bWFwIGFuZCBjb2xvciBsZWdlbmRcbiAgICAgKiBAcGFyYW0gaGVhdG1hcCB7SGVhdG1hcH0gYSBIZWF0bWFwIG9iamVjdFxuICAgICAqIEBwYXJhbSB4TGlzdCB7TGlzdH0gYSBsaXN0IG9mIHggbGFiZWxzXG4gICAgICogQHBhcmFtIHlMaXN0IHtMaXN0fSBhIGxpc3Qgb2YgeSBsYWJlbHNcbiAgICAgKiBAcGFyYW0gdGlja3Mge0ludGVnZXJ9IHRoZSBudW1iZXIgb2YgYmlucyBpbiB0aGUgY29sb3IgbGVnZW5kXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfcmVuZGVySGVhdG1hcChoZWF0bWFwLCB4TGlzdCwgeUxpc3QsIHRpY2tzPTUpe1xuICAgICAgICBsZXQgZG9tID0gdGhpcy52aXN1YWxDb21wb25lbnRzLnN2ZztcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWcucGFuZWxzLm1haW47XG4gICAgICAgIGNvbnN0IGcgPSBkb20uYXBwZW5kKFwiZ1wiKVxuICAgICAgICAgICAgLmF0dHIoXCJpZFwiLCBjb25maWcuaWQpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7Y29uZmlnLnh9LCAke2NvbmZpZy55fSlgKTtcbiAgICAgICAgaGVhdG1hcC5yZWRyYXcoZywgeExpc3QsIHlMaXN0LCB7dzogY29uZmlnLncsIGg6IGNvbmZpZy5ofSk7XG4gICAgICAgIGhlYXRtYXAuZHJhd0NvbG9yTGVnZW5kKGRvbSwgdGhpcy5jb25maWcucGFuZWxzLmxlZ2VuZCwgdGlja3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkanVzdCB0aGUgbGF5b3V0IGRpbWVuc2lvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCBkYXRhXG4gICAgICogQHBhcmFtIGxlZ2VuZFBvcyB7U3RyaW5nfSBib3R0b20gb3IgdG9wXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfdXBkYXRlQ29uZmlnKGxlZ2VuZFBvcyl7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLm9iamVjdHMucm93VHJlZT09PXVuZGVmaW5lZD8xOnRoaXMub2JqZWN0cy5yb3dUcmVlLmxlYXZlcy5sZW5ndGg7XG5cbiAgICAgICAgLy8gdXBkYXRlcyB0aGUgbGVmdCBwYW5lbCdzIGhlaWdodCBiYXNlZCBvbiB0aGUgZGF0YVxuICAgICAgICB0aGlzLmNvbmZpZy5wYW5lbHMubGVmdC5oID0gdGhpcy5jb25maWcuY2VsbC5oICogcm93czwyMD8yMDp0aGlzLmNvbmZpZy5jZWxsLmggKiByb3dzO1xuICAgICAgICB0aGlzLmNvbmZpZy5oICs9IHRoaXMuY29uZmlnLnBhbmVscy5sZWZ0Lmg7XG4gICAgICAgIHRoaXMuY29uZmlnLnBhbmVscy5tYWluLmggPSB0aGlzLmNvbmZpZy5wYW5lbHMubGVmdC5oO1xuICAgICAgICBpZihsZWdlbmRQb3M9PVwiYm90dG9tXCIpIHRoaXMuY29uZmlnLnBhbmVscy5sZWdlbmQueSArPSB0aGlzLmNvbmZpZy5wYW5lbHMubWFpbi5oICsgdGhpcy5jb25maWcucGFuZWxzLm1haW4ueCArIDUwO1xuXG5cbiAgICB9XG59IiwidmFyIHBpID0gTWF0aC5QSSxcbiAgICB0YXUgPSAyICogcGksXG4gICAgZXBzaWxvbiA9IDFlLTYsXG4gICAgdGF1RXBzaWxvbiA9IHRhdSAtIGVwc2lsb247XG5cbmZ1bmN0aW9uIFBhdGgoKSB7XG4gIHRoaXMuX3gwID0gdGhpcy5feTAgPSAvLyBzdGFydCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgdGhpcy5feDEgPSB0aGlzLl95MSA9IG51bGw7IC8vIGVuZCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgdGhpcy5fID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gcGF0aCgpIHtcbiAgcmV0dXJuIG5ldyBQYXRoO1xufVxuXG5QYXRoLnByb3RvdHlwZSA9IHBhdGgucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogUGF0aCxcbiAgbW92ZVRvOiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gwID0gdGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MCA9IHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBjbG9zZVBhdGg6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl94MSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5feDEgPSB0aGlzLl94MCwgdGhpcy5feTEgPSB0aGlzLl95MDtcbiAgICAgIHRoaXMuXyArPSBcIlpcIjtcbiAgICB9XG4gIH0sXG4gIGxpbmVUbzogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIkxcIiArICh0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBxdWFkcmF0aWNDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJRXCIgKyAoK3gxKSArIFwiLFwiICsgKCt5MSkgKyBcIixcIiArICh0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBiZXppZXJDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIkNcIiArICgreDEpICsgXCIsXCIgKyAoK3kxKSArIFwiLFwiICsgKCt4MikgKyBcIixcIiArICgreTIpICsgXCIsXCIgKyAodGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgYXJjVG86IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCByKSB7XG4gICAgeDEgPSAreDEsIHkxID0gK3kxLCB4MiA9ICt4MiwgeTIgPSAreTIsIHIgPSArcjtcbiAgICB2YXIgeDAgPSB0aGlzLl94MSxcbiAgICAgICAgeTAgPSB0aGlzLl95MSxcbiAgICAgICAgeDIxID0geDIgLSB4MSxcbiAgICAgICAgeTIxID0geTIgLSB5MSxcbiAgICAgICAgeDAxID0geDAgLSB4MSxcbiAgICAgICAgeTAxID0geTAgLSB5MSxcbiAgICAgICAgbDAxXzIgPSB4MDEgKiB4MDEgKyB5MDEgKiB5MDE7XG5cbiAgICAvLyBJcyB0aGUgcmFkaXVzIG5lZ2F0aXZlPyBFcnJvci5cbiAgICBpZiAociA8IDApIHRocm93IG5ldyBFcnJvcihcIm5lZ2F0aXZlIHJhZGl1czogXCIgKyByKTtcblxuICAgIC8vIElzIHRoaXMgcGF0aCBlbXB0eT8gTW92ZSB0byAoeDEseTEpLlxuICAgIGlmICh0aGlzLl94MSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gxID0geDEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSk7XG4gICAgfVxuXG4gICAgLy8gT3IsIGlzICh4MSx5MSkgY29pbmNpZGVudCB3aXRoICh4MCx5MCk/IERvIG5vdGhpbmcuXG4gICAgZWxzZSBpZiAoIShsMDFfMiA+IGVwc2lsb24pKTtcblxuICAgIC8vIE9yLCBhcmUgKHgwLHkwKSwgKHgxLHkxKSBhbmQgKHgyLHkyKSBjb2xsaW5lYXI/XG4gICAgLy8gRXF1aXZhbGVudGx5LCBpcyAoeDEseTEpIGNvaW5jaWRlbnQgd2l0aCAoeDIseTIpP1xuICAgIC8vIE9yLCBpcyB0aGUgcmFkaXVzIHplcm8/IExpbmUgdG8gKHgxLHkxKS5cbiAgICBlbHNlIGlmICghKE1hdGguYWJzKHkwMSAqIHgyMSAtIHkyMSAqIHgwMSkgPiBlcHNpbG9uKSB8fCAhcikge1xuICAgICAgdGhpcy5fICs9IFwiTFwiICsgKHRoaXMuX3gxID0geDEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSk7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlLCBkcmF3IGFuIGFyYyFcbiAgICBlbHNlIHtcbiAgICAgIHZhciB4MjAgPSB4MiAtIHgwLFxuICAgICAgICAgIHkyMCA9IHkyIC0geTAsXG4gICAgICAgICAgbDIxXzIgPSB4MjEgKiB4MjEgKyB5MjEgKiB5MjEsXG4gICAgICAgICAgbDIwXzIgPSB4MjAgKiB4MjAgKyB5MjAgKiB5MjAsXG4gICAgICAgICAgbDIxID0gTWF0aC5zcXJ0KGwyMV8yKSxcbiAgICAgICAgICBsMDEgPSBNYXRoLnNxcnQobDAxXzIpLFxuICAgICAgICAgIGwgPSByICogTWF0aC50YW4oKHBpIC0gTWF0aC5hY29zKChsMjFfMiArIGwwMV8yIC0gbDIwXzIpIC8gKDIgKiBsMjEgKiBsMDEpKSkgLyAyKSxcbiAgICAgICAgICB0MDEgPSBsIC8gbDAxLFxuICAgICAgICAgIHQyMSA9IGwgLyBsMjE7XG5cbiAgICAgIC8vIElmIHRoZSBzdGFydCB0YW5nZW50IGlzIG5vdCBjb2luY2lkZW50IHdpdGggKHgwLHkwKSwgbGluZSB0by5cbiAgICAgIGlmIChNYXRoLmFicyh0MDEgLSAxKSA+IGVwc2lsb24pIHtcbiAgICAgICAgdGhpcy5fICs9IFwiTFwiICsgKHgxICsgdDAxICogeDAxKSArIFwiLFwiICsgKHkxICsgdDAxICogeTAxKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fICs9IFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsMCxcIiArICgrKHkwMSAqIHgyMCA+IHgwMSAqIHkyMCkpICsgXCIsXCIgKyAodGhpcy5feDEgPSB4MSArIHQyMSAqIHgyMSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkxICsgdDIxICogeTIxKTtcbiAgICB9XG4gIH0sXG4gIGFyYzogZnVuY3Rpb24oeCwgeSwgciwgYTAsIGExLCBjY3cpIHtcbiAgICB4ID0gK3gsIHkgPSAreSwgciA9ICtyO1xuICAgIHZhciBkeCA9IHIgKiBNYXRoLmNvcyhhMCksXG4gICAgICAgIGR5ID0gciAqIE1hdGguc2luKGEwKSxcbiAgICAgICAgeDAgPSB4ICsgZHgsXG4gICAgICAgIHkwID0geSArIGR5LFxuICAgICAgICBjdyA9IDEgXiBjY3csXG4gICAgICAgIGRhID0gY2N3ID8gYTAgLSBhMSA6IGExIC0gYTA7XG5cbiAgICAvLyBJcyB0aGUgcmFkaXVzIG5lZ2F0aXZlPyBFcnJvci5cbiAgICBpZiAociA8IDApIHRocm93IG5ldyBFcnJvcihcIm5lZ2F0aXZlIHJhZGl1czogXCIgKyByKTtcblxuICAgIC8vIElzIHRoaXMgcGF0aCBlbXB0eT8gTW92ZSB0byAoeDAseTApLlxuICAgIGlmICh0aGlzLl94MSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fICs9IFwiTVwiICsgeDAgKyBcIixcIiArIHkwO1xuICAgIH1cblxuICAgIC8vIE9yLCBpcyAoeDAseTApIG5vdCBjb2luY2lkZW50IHdpdGggdGhlIHByZXZpb3VzIHBvaW50PyBMaW5lIHRvICh4MCx5MCkuXG4gICAgZWxzZSBpZiAoTWF0aC5hYnModGhpcy5feDEgLSB4MCkgPiBlcHNpbG9uIHx8IE1hdGguYWJzKHRoaXMuX3kxIC0geTApID4gZXBzaWxvbikge1xuICAgICAgdGhpcy5fICs9IFwiTFwiICsgeDAgKyBcIixcIiArIHkwO1xuICAgIH1cblxuICAgIC8vIElzIHRoaXMgYXJjIGVtcHR5PyBXZeKAmXJlIGRvbmUuXG4gICAgaWYgKCFyKSByZXR1cm47XG5cbiAgICAvLyBEb2VzIHRoZSBhbmdsZSBnbyB0aGUgd3Jvbmcgd2F5PyBGbGlwIHRoZSBkaXJlY3Rpb24uXG4gICAgaWYgKGRhIDwgMCkgZGEgPSBkYSAlIHRhdSArIHRhdTtcblxuICAgIC8vIElzIHRoaXMgYSBjb21wbGV0ZSBjaXJjbGU/IERyYXcgdHdvIGFyY3MgdG8gY29tcGxldGUgdGhlIGNpcmNsZS5cbiAgICBpZiAoZGEgPiB0YXVFcHNpbG9uKSB7XG4gICAgICB0aGlzLl8gKz0gXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCwxLFwiICsgY3cgKyBcIixcIiArICh4IC0gZHgpICsgXCIsXCIgKyAoeSAtIGR5KSArIFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsMSxcIiArIGN3ICsgXCIsXCIgKyAodGhpcy5feDEgPSB4MCkgKyBcIixcIiArICh0aGlzLl95MSA9IHkwKTtcbiAgICB9XG5cbiAgICAvLyBJcyB0aGlzIGFyYyBub24tZW1wdHk/IERyYXcgYW4gYXJjIVxuICAgIGVsc2UgaWYgKGRhID4gZXBzaWxvbikge1xuICAgICAgdGhpcy5fICs9IFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsXCIgKyAoKyhkYSA+PSBwaSkpICsgXCIsXCIgKyBjdyArIFwiLFwiICsgKHRoaXMuX3gxID0geCArIHIgKiBNYXRoLmNvcyhhMSkpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5ICsgciAqIE1hdGguc2luKGExKSk7XG4gICAgfVxuICB9LFxuICByZWN0OiBmdW5jdGlvbih4LCB5LCB3LCBoKSB7XG4gICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gwID0gdGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MCA9IHRoaXMuX3kxID0gK3kpICsgXCJoXCIgKyAoK3cpICsgXCJ2XCIgKyAoK2gpICsgXCJoXCIgKyAoLXcpICsgXCJaXCI7XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBwYXRoO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24gY29uc3RhbnQoKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJmdW5jdGlvbiBMaW5lYXIoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuTGluZWFyLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHgsIHkpOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyAvLyBwcm9jZWVkXG4gICAgICBkZWZhdWx0OiB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgTGluZWFyKGNvbnRleHQpO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHgocCkge1xuICByZXR1cm4gcFswXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHkocCkge1xuICByZXR1cm4gcFsxXTtcbn1cbiIsImltcG9ydCB7cGF0aH0gZnJvbSBcImQzLXBhdGhcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuaW1wb3J0IGN1cnZlTGluZWFyIGZyb20gXCIuL2N1cnZlL2xpbmVhclwiO1xuaW1wb3J0IHt4IGFzIHBvaW50WCwgeSBhcyBwb2ludFl9IGZyb20gXCIuL3BvaW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgeCA9IHBvaW50WCxcbiAgICAgIHkgPSBwb2ludFksXG4gICAgICBkZWZpbmVkID0gY29uc3RhbnQodHJ1ZSksXG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIGN1cnZlID0gY3VydmVMaW5lYXIsXG4gICAgICBvdXRwdXQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGxpbmUoZGF0YSkge1xuICAgIHZhciBpLFxuICAgICAgICBuID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIGQsXG4gICAgICAgIGRlZmluZWQwID0gZmFsc2UsXG4gICAgICAgIGJ1ZmZlcjtcblxuICAgIGlmIChjb250ZXh0ID09IG51bGwpIG91dHB1dCA9IGN1cnZlKGJ1ZmZlciA9IHBhdGgoKSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IG47ICsraSkge1xuICAgICAgaWYgKCEoaSA8IG4gJiYgZGVmaW5lZChkID0gZGF0YVtpXSwgaSwgZGF0YSkpID09PSBkZWZpbmVkMCkge1xuICAgICAgICBpZiAoZGVmaW5lZDAgPSAhZGVmaW5lZDApIG91dHB1dC5saW5lU3RhcnQoKTtcbiAgICAgICAgZWxzZSBvdXRwdXQubGluZUVuZCgpO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmluZWQwKSBvdXRwdXQucG9pbnQoK3goZCwgaSwgZGF0YSksICt5KGQsIGksIGRhdGEpKTtcbiAgICB9XG5cbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gb3V0cHV0ID0gbnVsbCwgYnVmZmVyICsgXCJcIiB8fCBudWxsO1xuICB9XG5cbiAgbGluZS54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgbGluZSkgOiB4O1xuICB9O1xuXG4gIGxpbmUueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGxpbmUpIDogeTtcbiAgfTtcblxuICBsaW5lLmRlZmluZWQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZGVmaW5lZCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgbGluZSkgOiBkZWZpbmVkO1xuICB9O1xuXG4gIGxpbmUuY3VydmUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY3VydmUgPSBfLCBjb250ZXh0ICE9IG51bGwgJiYgKG91dHB1dCA9IGN1cnZlKGNvbnRleHQpKSwgbGluZSkgOiBjdXJ2ZTtcbiAgfTtcblxuICBsaW5lLmNvbnRleHQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoXyA9PSBudWxsID8gY29udGV4dCA9IG91dHB1dCA9IG51bGwgOiBvdXRwdXQgPSBjdXJ2ZShjb250ZXh0ID0gXyksIGxpbmUpIDogY29udGV4dDtcbiAgfTtcblxuICByZXR1cm4gbGluZTtcbn1cbiIsImltcG9ydCB7cGF0aH0gZnJvbSBcImQzLXBhdGhcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuaW1wb3J0IGN1cnZlTGluZWFyIGZyb20gXCIuL2N1cnZlL2xpbmVhclwiO1xuaW1wb3J0IGxpbmUgZnJvbSBcIi4vbGluZVwiO1xuaW1wb3J0IHt4IGFzIHBvaW50WCwgeSBhcyBwb2ludFl9IGZyb20gXCIuL3BvaW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgeDAgPSBwb2ludFgsXG4gICAgICB4MSA9IG51bGwsXG4gICAgICB5MCA9IGNvbnN0YW50KDApLFxuICAgICAgeTEgPSBwb2ludFksXG4gICAgICBkZWZpbmVkID0gY29uc3RhbnQodHJ1ZSksXG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIGN1cnZlID0gY3VydmVMaW5lYXIsXG4gICAgICBvdXRwdXQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGFyZWEoZGF0YSkge1xuICAgIHZhciBpLFxuICAgICAgICBqLFxuICAgICAgICBrLFxuICAgICAgICBuID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIGQsXG4gICAgICAgIGRlZmluZWQwID0gZmFsc2UsXG4gICAgICAgIGJ1ZmZlcixcbiAgICAgICAgeDB6ID0gbmV3IEFycmF5KG4pLFxuICAgICAgICB5MHogPSBuZXcgQXJyYXkobik7XG5cbiAgICBpZiAoY29udGV4dCA9PSBudWxsKSBvdXRwdXQgPSBjdXJ2ZShidWZmZXIgPSBwYXRoKCkpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8PSBuOyArK2kpIHtcbiAgICAgIGlmICghKGkgPCBuICYmIGRlZmluZWQoZCA9IGRhdGFbaV0sIGksIGRhdGEpKSA9PT0gZGVmaW5lZDApIHtcbiAgICAgICAgaWYgKGRlZmluZWQwID0gIWRlZmluZWQwKSB7XG4gICAgICAgICAgaiA9IGk7XG4gICAgICAgICAgb3V0cHV0LmFyZWFTdGFydCgpO1xuICAgICAgICAgIG91dHB1dC5saW5lU3RhcnQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRwdXQubGluZUVuZCgpO1xuICAgICAgICAgIG91dHB1dC5saW5lU3RhcnQoKTtcbiAgICAgICAgICBmb3IgKGsgPSBpIC0gMTsgayA+PSBqOyAtLWspIHtcbiAgICAgICAgICAgIG91dHB1dC5wb2ludCh4MHpba10sIHkweltrXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dHB1dC5saW5lRW5kKCk7XG4gICAgICAgICAgb3V0cHV0LmFyZWFFbmQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRlZmluZWQwKSB7XG4gICAgICAgIHgweltpXSA9ICt4MChkLCBpLCBkYXRhKSwgeTB6W2ldID0gK3kwKGQsIGksIGRhdGEpO1xuICAgICAgICBvdXRwdXQucG9pbnQoeDEgPyAreDEoZCwgaSwgZGF0YSkgOiB4MHpbaV0sIHkxID8gK3kxKGQsIGksIGRhdGEpIDogeTB6W2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gb3V0cHV0ID0gbnVsbCwgYnVmZmVyICsgXCJcIiB8fCBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gYXJlYWxpbmUoKSB7XG4gICAgcmV0dXJuIGxpbmUoKS5kZWZpbmVkKGRlZmluZWQpLmN1cnZlKGN1cnZlKS5jb250ZXh0KGNvbnRleHQpO1xuICB9XG5cbiAgYXJlYS54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHgwID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHgxID0gbnVsbCwgYXJlYSkgOiB4MDtcbiAgfTtcblxuICBhcmVhLngwID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHgwID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyZWEpIDogeDA7XG4gIH07XG5cbiAgYXJlYS54MSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4MSA9IF8gPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJlYSkgOiB4MTtcbiAgfTtcblxuICBhcmVhLnkgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeTAgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgeTEgPSBudWxsLCBhcmVhKSA6IHkwO1xuICB9O1xuXG4gIGFyZWEueTAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeTAgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJlYSkgOiB5MDtcbiAgfTtcblxuICBhcmVhLnkxID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHkxID0gXyA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmVhKSA6IHkxO1xuICB9O1xuXG4gIGFyZWEubGluZVgwID1cbiAgYXJlYS5saW5lWTAgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYXJlYWxpbmUoKS54KHgwKS55KHkwKTtcbiAgfTtcblxuICBhcmVhLmxpbmVZMSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBhcmVhbGluZSgpLngoeDApLnkoeTEpO1xuICB9O1xuXG4gIGFyZWEubGluZVgxID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGFyZWFsaW5lKCkueCh4MSkueSh5MCk7XG4gIH07XG5cbiAgYXJlYS5kZWZpbmVkID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRlZmluZWQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIGFyZWEpIDogZGVmaW5lZDtcbiAgfTtcblxuICBhcmVhLmN1cnZlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGN1cnZlID0gXywgY29udGV4dCAhPSBudWxsICYmIChvdXRwdXQgPSBjdXJ2ZShjb250ZXh0KSksIGFyZWEpIDogY3VydmU7XG4gIH07XG5cbiAgYXJlYS5jb250ZXh0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKF8gPT0gbnVsbCA/IGNvbnRleHQgPSBvdXRwdXQgPSBudWxsIDogb3V0cHV0ID0gY3VydmUoY29udGV4dCA9IF8pLCBhcmVhKSA6IGNvbnRleHQ7XG4gIH07XG5cbiAgcmV0dXJuIGFyZWE7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gcG9pbnQodGhhdCwgeCwgeSkge1xuICB0aGF0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oXG4gICAgdGhhdC5feDEgKyB0aGF0Ll9rICogKHRoYXQuX3gyIC0gdGhhdC5feDApLFxuICAgIHRoYXQuX3kxICsgdGhhdC5fayAqICh0aGF0Ll95MiAtIHRoYXQuX3kwKSxcbiAgICB0aGF0Ll94MiArIHRoYXQuX2sgKiAodGhhdC5feDEgLSB4KSxcbiAgICB0aGF0Ll95MiArIHRoYXQuX2sgKiAodGhhdC5feTEgLSB5KSxcbiAgICB0aGF0Ll94MixcbiAgICB0aGF0Ll95MlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2FyZGluYWwoY29udGV4dCwgdGVuc2lvbikge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5fayA9ICgxIC0gdGVuc2lvbikgLyA2O1xufVxuXG5DYXJkaW5hbC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gdGhpcy5feTIgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDI6IHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLCB0aGlzLl95Mik7IGJyZWFrO1xuICAgICAgY2FzZSAzOiBwb2ludCh0aGlzLCB0aGlzLl94MSwgdGhpcy5feTEpOyBicmVhaztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDEpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IHRoaXMuX3gxID0geCwgdGhpcy5feTEgPSB5OyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyAvLyBwcm9jZWVkXG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0gdGhpcy5feDIsIHRoaXMuX3gyID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHRoaXMuX3kyLCB0aGlzLl95MiA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20odGVuc2lvbikge1xuXG4gIGZ1bmN0aW9uIGNhcmRpbmFsKGNvbnRleHQpIHtcbiAgICByZXR1cm4gbmV3IENhcmRpbmFsKGNvbnRleHQsIHRlbnNpb24pO1xuICB9XG5cbiAgY2FyZGluYWwudGVuc2lvbiA9IGZ1bmN0aW9uKHRlbnNpb24pIHtcbiAgICByZXR1cm4gY3VzdG9tKCt0ZW5zaW9uKTtcbiAgfTtcblxuICByZXR1cm4gY2FyZGluYWw7XG59KSgwKTtcbiIsImZ1bmN0aW9uIHNpZ24oeCkge1xuICByZXR1cm4geCA8IDAgPyAtMSA6IDE7XG59XG5cbi8vIENhbGN1bGF0ZSB0aGUgc2xvcGVzIG9mIHRoZSB0YW5nZW50cyAoSGVybWl0ZS10eXBlIGludGVycG9sYXRpb24pIGJhc2VkIG9uXG4vLyB0aGUgZm9sbG93aW5nIHBhcGVyOiBTdGVmZmVuLCBNLiAxOTkwLiBBIFNpbXBsZSBNZXRob2QgZm9yIE1vbm90b25pY1xuLy8gSW50ZXJwb2xhdGlvbiBpbiBPbmUgRGltZW5zaW9uLiBBc3Ryb25vbXkgYW5kIEFzdHJvcGh5c2ljcywgVm9sLiAyMzksIE5PLlxuLy8gTk9WKElJKSwgUC4gNDQzLCAxOTkwLlxuZnVuY3Rpb24gc2xvcGUzKHRoYXQsIHgyLCB5Mikge1xuICB2YXIgaDAgPSB0aGF0Ll94MSAtIHRoYXQuX3gwLFxuICAgICAgaDEgPSB4MiAtIHRoYXQuX3gxLFxuICAgICAgczAgPSAodGhhdC5feTEgLSB0aGF0Ll95MCkgLyAoaDAgfHwgaDEgPCAwICYmIC0wKSxcbiAgICAgIHMxID0gKHkyIC0gdGhhdC5feTEpIC8gKGgxIHx8IGgwIDwgMCAmJiAtMCksXG4gICAgICBwID0gKHMwICogaDEgKyBzMSAqIGgwKSAvIChoMCArIGgxKTtcbiAgcmV0dXJuIChzaWduKHMwKSArIHNpZ24oczEpKSAqIE1hdGgubWluKE1hdGguYWJzKHMwKSwgTWF0aC5hYnMoczEpLCAwLjUgKiBNYXRoLmFicyhwKSkgfHwgMDtcbn1cblxuLy8gQ2FsY3VsYXRlIGEgb25lLXNpZGVkIHNsb3BlLlxuZnVuY3Rpb24gc2xvcGUyKHRoYXQsIHQpIHtcbiAgdmFyIGggPSB0aGF0Ll94MSAtIHRoYXQuX3gwO1xuICByZXR1cm4gaCA/ICgzICogKHRoYXQuX3kxIC0gdGhhdC5feTApIC8gaCAtIHQpIC8gMiA6IHQ7XG59XG5cbi8vIEFjY29yZGluZyB0byBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DdWJpY19IZXJtaXRlX3NwbGluZSNSZXByZXNlbnRhdGlvbnNcbi8vIFwieW91IGNhbiBleHByZXNzIGN1YmljIEhlcm1pdGUgaW50ZXJwb2xhdGlvbiBpbiB0ZXJtcyBvZiBjdWJpYyBCw6l6aWVyIGN1cnZlc1xuLy8gd2l0aCByZXNwZWN0IHRvIHRoZSBmb3VyIHZhbHVlcyBwMCwgcDAgKyBtMCAvIDMsIHAxIC0gbTEgLyAzLCBwMVwiLlxuZnVuY3Rpb24gcG9pbnQodGhhdCwgdDAsIHQxKSB7XG4gIHZhciB4MCA9IHRoYXQuX3gwLFxuICAgICAgeTAgPSB0aGF0Ll95MCxcbiAgICAgIHgxID0gdGhhdC5feDEsXG4gICAgICB5MSA9IHRoYXQuX3kxLFxuICAgICAgZHggPSAoeDEgLSB4MCkgLyAzO1xuICB0aGF0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oeDAgKyBkeCwgeTAgKyBkeCAqIHQwLCB4MSAtIGR4LCB5MSAtIGR4ICogdDEsIHgxLCB5MSk7XG59XG5cbmZ1bmN0aW9uIE1vbm90b25lWChjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5Nb25vdG9uZVgucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPVxuICAgIHRoaXMuX3QwID0gTmFOO1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAyOiB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSwgdGhpcy5feTEpOyBicmVhaztcbiAgICAgIGNhc2UgMzogcG9pbnQodGhpcywgdGhpcy5fdDAsIHNsb3BlMih0aGlzLCB0aGlzLl90MCkpOyBicmVhaztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDEpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB2YXIgdDEgPSBOYU47XG5cbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBpZiAoeCA9PT0gdGhpcy5feDEgJiYgeSA9PT0gdGhpcy5feTEpIHJldHVybjsgLy8gSWdub3JlIGNvaW5jaWRlbnQgcG9pbnRzLlxuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgYnJlYWs7XG4gICAgICBjYXNlIDI6IHRoaXMuX3BvaW50ID0gMzsgcG9pbnQodGhpcywgc2xvcGUyKHRoaXMsIHQxID0gc2xvcGUzKHRoaXMsIHgsIHkpKSwgdDEpOyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHRoaXMuX3QwLCB0MSA9IHNsb3BlMyh0aGlzLCB4LCB5KSk7IGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHk7XG4gICAgdGhpcy5fdDAgPSB0MTtcbiAgfVxufVxuXG5mdW5jdGlvbiBNb25vdG9uZVkoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gbmV3IFJlZmxlY3RDb250ZXh0KGNvbnRleHQpO1xufVxuXG4oTW9ub3RvbmVZLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTW9ub3RvbmVYLnByb3RvdHlwZSkpLnBvaW50ID0gZnVuY3Rpb24oeCwgeSkge1xuICBNb25vdG9uZVgucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcywgeSwgeCk7XG59O1xuXG5mdW5jdGlvbiBSZWZsZWN0Q29udGV4dChjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5SZWZsZWN0Q29udGV4dC5wcm90b3R5cGUgPSB7XG4gIG1vdmVUbzogZnVuY3Rpb24oeCwgeSkgeyB0aGlzLl9jb250ZXh0Lm1vdmVUbyh5LCB4KTsgfSxcbiAgY2xvc2VQYXRoOiBmdW5jdGlvbigpIHsgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTsgfSxcbiAgbGluZVRvOiBmdW5jdGlvbih4LCB5KSB7IHRoaXMuX2NvbnRleHQubGluZVRvKHksIHgpOyB9LFxuICBiZXppZXJDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgeCwgeSkgeyB0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oeTEsIHgxLCB5MiwgeDIsIHksIHgpOyB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gbW9ub3RvbmVYKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBNb25vdG9uZVgoY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb25vdG9uZVkoY29udGV4dCkge1xuICByZXR1cm4gbmV3IE1vbm90b25lWShjb250ZXh0KTtcbn1cbiIsImltcG9ydCB7ZXZlbnR9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcHJvcGFnYXRpb24oKSB7XG4gIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59XG4iLCJpbXBvcnQge3NlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IG5vZXZlbnQgZnJvbSBcIi4vbm9ldmVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2aWV3KSB7XG4gIHZhciByb290ID0gdmlldy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4gICAgICBzZWxlY3Rpb24gPSBzZWxlY3Qodmlldykub24oXCJkcmFnc3RhcnQuZHJhZ1wiLCBub2V2ZW50LCB0cnVlKTtcbiAgaWYgKFwib25zZWxlY3RzdGFydFwiIGluIHJvb3QpIHtcbiAgICBzZWxlY3Rpb24ub24oXCJzZWxlY3RzdGFydC5kcmFnXCIsIG5vZXZlbnQsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIHJvb3QuX19ub3NlbGVjdCA9IHJvb3Quc3R5bGUuTW96VXNlclNlbGVjdDtcbiAgICByb290LnN0eWxlLk1velVzZXJTZWxlY3QgPSBcIm5vbmVcIjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24geWVzZHJhZyh2aWV3LCBub2NsaWNrKSB7XG4gIHZhciByb290ID0gdmlldy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4gICAgICBzZWxlY3Rpb24gPSBzZWxlY3Qodmlldykub24oXCJkcmFnc3RhcnQuZHJhZ1wiLCBudWxsKTtcbiAgaWYgKG5vY2xpY2spIHtcbiAgICBzZWxlY3Rpb24ub24oXCJjbGljay5kcmFnXCIsIG5vZXZlbnQsIHRydWUpO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHNlbGVjdGlvbi5vbihcImNsaWNrLmRyYWdcIiwgbnVsbCk7IH0sIDApO1xuICB9XG4gIGlmIChcIm9uc2VsZWN0c3RhcnRcIiBpbiByb290KSB7XG4gICAgc2VsZWN0aW9uLm9uKFwic2VsZWN0c3RhcnQuZHJhZ1wiLCBudWxsKTtcbiAgfSBlbHNlIHtcbiAgICByb290LnN0eWxlLk1velVzZXJTZWxlY3QgPSByb290Ll9fbm9zZWxlY3Q7XG4gICAgZGVsZXRlIHJvb3QuX19ub3NlbGVjdDtcbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRHJhZ0V2ZW50KHRhcmdldCwgdHlwZSwgc3ViamVjdCwgaWQsIGFjdGl2ZSwgeCwgeSwgZHgsIGR5LCBkaXNwYXRjaCkge1xuICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy5zdWJqZWN0ID0gc3ViamVjdDtcbiAgdGhpcy5pZGVudGlmaWVyID0gaWQ7XG4gIHRoaXMuYWN0aXZlID0gYWN0aXZlO1xuICB0aGlzLnggPSB4O1xuICB0aGlzLnkgPSB5O1xuICB0aGlzLmR4ID0gZHg7XG4gIHRoaXMuZHkgPSBkeTtcbiAgdGhpcy5fID0gZGlzcGF0Y2g7XG59XG5cbkRyYWdFdmVudC5wcm90b3R5cGUub24gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHZhbHVlID0gdGhpcy5fLm9uLmFwcGx5KHRoaXMuXywgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHZhbHVlID09PSB0aGlzLl8gPyB0aGlzIDogdmFsdWU7XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0YXJnZXQsIHR5cGUsIHNlbGVjdGlvbikge1xuICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247XG59XG4iLCJpbXBvcnQge2V2ZW50fSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBub3Byb3BhZ2F0aW9uKCkge1xuICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufVxuIiwiaW1wb3J0IHtkaXNwYXRjaH0gZnJvbSBcImQzLWRpc3BhdGNoXCI7XG5pbXBvcnQge2RyYWdEaXNhYmxlLCBkcmFnRW5hYmxlfSBmcm9tIFwiZDMtZHJhZ1wiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge2N1c3RvbUV2ZW50LCBldmVudCwgbW91c2UsIHNlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtpbnRlcnJ1cHR9IGZyb20gXCJkMy10cmFuc2l0aW9uXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcbmltcG9ydCBCcnVzaEV2ZW50IGZyb20gXCIuL2V2ZW50XCI7XG5pbXBvcnQgbm9ldmVudCwge25vcHJvcGFnYXRpb259IGZyb20gXCIuL25vZXZlbnRcIjtcblxudmFyIE1PREVfRFJBRyA9IHtuYW1lOiBcImRyYWdcIn0sXG4gICAgTU9ERV9TUEFDRSA9IHtuYW1lOiBcInNwYWNlXCJ9LFxuICAgIE1PREVfSEFORExFID0ge25hbWU6IFwiaGFuZGxlXCJ9LFxuICAgIE1PREVfQ0VOVEVSID0ge25hbWU6IFwiY2VudGVyXCJ9O1xuXG52YXIgWCA9IHtcbiAgbmFtZTogXCJ4XCIsXG4gIGhhbmRsZXM6IFtcImVcIiwgXCJ3XCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHgsIGUpIHsgcmV0dXJuIHggJiYgW1t4WzBdLCBlWzBdWzFdXSwgW3hbMV0sIGVbMV1bMV1dXTsgfSxcbiAgb3V0cHV0OiBmdW5jdGlvbih4eSkgeyByZXR1cm4geHkgJiYgW3h5WzBdWzBdLCB4eVsxXVswXV07IH1cbn07XG5cbnZhciBZID0ge1xuICBuYW1lOiBcInlcIixcbiAgaGFuZGxlczogW1wiblwiLCBcInNcIl0ubWFwKHR5cGUpLFxuICBpbnB1dDogZnVuY3Rpb24oeSwgZSkgeyByZXR1cm4geSAmJiBbW2VbMF1bMF0sIHlbMF1dLCBbZVsxXVswXSwgeVsxXV1dOyB9LFxuICBvdXRwdXQ6IGZ1bmN0aW9uKHh5KSB7IHJldHVybiB4eSAmJiBbeHlbMF1bMV0sIHh5WzFdWzFdXTsgfVxufTtcblxudmFyIFhZID0ge1xuICBuYW1lOiBcInh5XCIsXG4gIGhhbmRsZXM6IFtcIm5cIiwgXCJlXCIsIFwic1wiLCBcIndcIiwgXCJud1wiLCBcIm5lXCIsIFwic2VcIiwgXCJzd1wiXS5tYXAodHlwZSksXG4gIGlucHV0OiBmdW5jdGlvbih4eSkgeyByZXR1cm4geHk7IH0sXG4gIG91dHB1dDogZnVuY3Rpb24oeHkpIHsgcmV0dXJuIHh5OyB9XG59O1xuXG52YXIgY3Vyc29ycyA9IHtcbiAgb3ZlcmxheTogXCJjcm9zc2hhaXJcIixcbiAgc2VsZWN0aW9uOiBcIm1vdmVcIixcbiAgbjogXCJucy1yZXNpemVcIixcbiAgZTogXCJldy1yZXNpemVcIixcbiAgczogXCJucy1yZXNpemVcIixcbiAgdzogXCJldy1yZXNpemVcIixcbiAgbnc6IFwibndzZS1yZXNpemVcIixcbiAgbmU6IFwibmVzdy1yZXNpemVcIixcbiAgc2U6IFwibndzZS1yZXNpemVcIixcbiAgc3c6IFwibmVzdy1yZXNpemVcIlxufTtcblxudmFyIGZsaXBYID0ge1xuICBlOiBcIndcIixcbiAgdzogXCJlXCIsXG4gIG53OiBcIm5lXCIsXG4gIG5lOiBcIm53XCIsXG4gIHNlOiBcInN3XCIsXG4gIHN3OiBcInNlXCJcbn07XG5cbnZhciBmbGlwWSA9IHtcbiAgbjogXCJzXCIsXG4gIHM6IFwiblwiLFxuICBudzogXCJzd1wiLFxuICBuZTogXCJzZVwiLFxuICBzZTogXCJuZVwiLFxuICBzdzogXCJud1wiXG59O1xuXG52YXIgc2lnbnNYID0ge1xuICBvdmVybGF5OiArMSxcbiAgc2VsZWN0aW9uOiArMSxcbiAgbjogbnVsbCxcbiAgZTogKzEsXG4gIHM6IG51bGwsXG4gIHc6IC0xLFxuICBudzogLTEsXG4gIG5lOiArMSxcbiAgc2U6ICsxLFxuICBzdzogLTFcbn07XG5cbnZhciBzaWduc1kgPSB7XG4gIG92ZXJsYXk6ICsxLFxuICBzZWxlY3Rpb246ICsxLFxuICBuOiAtMSxcbiAgZTogbnVsbCxcbiAgczogKzEsXG4gIHc6IG51bGwsXG4gIG53OiAtMSxcbiAgbmU6IC0xLFxuICBzZTogKzEsXG4gIHN3OiArMVxufTtcblxuZnVuY3Rpb24gdHlwZSh0KSB7XG4gIHJldHVybiB7dHlwZTogdH07XG59XG5cbi8vIElnbm9yZSByaWdodC1jbGljaywgc2luY2UgdGhhdCBzaG91bGQgb3BlbiB0aGUgY29udGV4dCBtZW51LlxuZnVuY3Rpb24gZGVmYXVsdEZpbHRlcigpIHtcbiAgcmV0dXJuICFldmVudC5idXR0b247XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRFeHRlbnQoKSB7XG4gIHZhciBzdmcgPSB0aGlzLm93bmVyU1ZHRWxlbWVudCB8fCB0aGlzO1xuICByZXR1cm4gW1swLCAwXSwgW3N2Zy53aWR0aC5iYXNlVmFsLnZhbHVlLCBzdmcuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXTtcbn1cblxuLy8gTGlrZSBkMy5sb2NhbCwgYnV0IHdpdGggdGhlIG5hbWUg4oCcX19icnVzaOKAnSByYXRoZXIgdGhhbiBhdXRvLWdlbmVyYXRlZC5cbmZ1bmN0aW9uIGxvY2FsKG5vZGUpIHtcbiAgd2hpbGUgKCFub2RlLl9fYnJ1c2gpIGlmICghKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSByZXR1cm47XG4gIHJldHVybiBub2RlLl9fYnJ1c2g7XG59XG5cbmZ1bmN0aW9uIGVtcHR5KGV4dGVudCkge1xuICByZXR1cm4gZXh0ZW50WzBdWzBdID09PSBleHRlbnRbMV1bMF1cbiAgICAgIHx8IGV4dGVudFswXVsxXSA9PT0gZXh0ZW50WzFdWzFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJ1c2hTZWxlY3Rpb24obm9kZSkge1xuICB2YXIgc3RhdGUgPSBub2RlLl9fYnJ1c2g7XG4gIHJldHVybiBzdGF0ZSA/IHN0YXRlLmRpbS5vdXRwdXQoc3RhdGUuc2VsZWN0aW9uKSA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicnVzaFgoKSB7XG4gIHJldHVybiBicnVzaChYKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJydXNoWSgpIHtcbiAgcmV0dXJuIGJydXNoKFkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGJydXNoKFhZKTtcbn1cblxuZnVuY3Rpb24gYnJ1c2goZGltKSB7XG4gIHZhciBleHRlbnQgPSBkZWZhdWx0RXh0ZW50LFxuICAgICAgZmlsdGVyID0gZGVmYXVsdEZpbHRlcixcbiAgICAgIGxpc3RlbmVycyA9IGRpc3BhdGNoKGJydXNoLCBcInN0YXJ0XCIsIFwiYnJ1c2hcIiwgXCJlbmRcIiksXG4gICAgICBoYW5kbGVTaXplID0gNixcbiAgICAgIHRvdWNoZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGJydXNoKGdyb3VwKSB7XG4gICAgdmFyIG92ZXJsYXkgPSBncm91cFxuICAgICAgICAucHJvcGVydHkoXCJfX2JydXNoXCIsIGluaXRpYWxpemUpXG4gICAgICAuc2VsZWN0QWxsKFwiLm92ZXJsYXlcIilcbiAgICAgIC5kYXRhKFt0eXBlKFwib3ZlcmxheVwiKV0pO1xuXG4gICAgb3ZlcmxheS5lbnRlcigpLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcIm92ZXJsYXlcIilcbiAgICAgICAgLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcImFsbFwiKVxuICAgICAgICAuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLm92ZXJsYXkpXG4gICAgICAubWVyZ2Uob3ZlcmxheSlcbiAgICAgICAgLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGV4dGVudCA9IGxvY2FsKHRoaXMpLmV4dGVudDtcbiAgICAgICAgICBzZWxlY3QodGhpcylcbiAgICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGV4dGVudFswXVswXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGV4dGVudFswXVsxXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBleHRlbnRbMV1bMF0gLSBleHRlbnRbMF1bMF0pXG4gICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGV4dGVudFsxXVsxXSAtIGV4dGVudFswXVsxXSk7XG4gICAgICAgIH0pO1xuXG4gICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvblwiKVxuICAgICAgLmRhdGEoW3R5cGUoXCJzZWxlY3Rpb25cIildKVxuICAgICAgLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwic2VsZWN0aW9uXCIpXG4gICAgICAgIC5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnMuc2VsZWN0aW9uKVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCIjNzc3XCIpXG4gICAgICAgIC5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsIDAuMylcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCIjZmZmXCIpXG4gICAgICAgIC5hdHRyKFwic2hhcGUtcmVuZGVyaW5nXCIsIFwiY3Jpc3BFZGdlc1wiKTtcblxuICAgIHZhciBoYW5kbGUgPSBncm91cC5zZWxlY3RBbGwoXCIuaGFuZGxlXCIpXG4gICAgICAuZGF0YShkaW0uaGFuZGxlcywgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlOyB9KTtcblxuICAgIGhhbmRsZS5leGl0KCkucmVtb3ZlKCk7XG5cbiAgICBoYW5kbGUuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gXCJoYW5kbGUgaGFuZGxlLS1cIiArIGQudHlwZTsgfSlcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gY3Vyc29yc1tkLnR5cGVdOyB9KTtcblxuICAgIGdyb3VwXG4gICAgICAgIC5lYWNoKHJlZHJhdylcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKVxuICAgICAgICAuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsIFwiYWxsXCIpXG4gICAgICAgIC5zdHlsZShcIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvclwiLCBcInJnYmEoMCwwLDAsMClcIilcbiAgICAgICAgLm9uKFwibW91c2Vkb3duLmJydXNoIHRvdWNoc3RhcnQuYnJ1c2hcIiwgc3RhcnRlZCk7XG4gIH1cblxuICBicnVzaC5tb3ZlID0gZnVuY3Rpb24oZ3JvdXAsIHNlbGVjdGlvbikge1xuICAgIGlmIChncm91cC5zZWxlY3Rpb24pIHtcbiAgICAgIGdyb3VwXG4gICAgICAgICAgLm9uKFwic3RhcnQuYnJ1c2hcIiwgZnVuY3Rpb24oKSB7IGVtaXR0ZXIodGhpcywgYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCk7IH0pXG4gICAgICAgICAgLm9uKFwiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaFwiLCBmdW5jdGlvbigpIHsgZW1pdHRlcih0aGlzLCBhcmd1bWVudHMpLmVuZCgpOyB9KVxuICAgICAgICAgIC50d2VlbihcImJydXNoXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIHN0YXRlID0gdGhhdC5fX2JydXNoLFxuICAgICAgICAgICAgICAgIGVtaXQgPSBlbWl0dGVyKHRoYXQsIGFyZ3VtZW50cyksXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMCA9IHN0YXRlLnNlbGVjdGlvbixcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24xID0gZGltLmlucHV0KHR5cGVvZiBzZWxlY3Rpb24gPT09IFwiZnVuY3Rpb25cIiA/IHNlbGVjdGlvbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogc2VsZWN0aW9uLCBzdGF0ZS5leHRlbnQpLFxuICAgICAgICAgICAgICAgIGkgPSBpbnRlcnBvbGF0ZShzZWxlY3Rpb24wLCBzZWxlY3Rpb24xKTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gdHdlZW4odCkge1xuICAgICAgICAgICAgICBzdGF0ZS5zZWxlY3Rpb24gPSB0ID09PSAxICYmIGVtcHR5KHNlbGVjdGlvbjEpID8gbnVsbCA6IGkodCk7XG4gICAgICAgICAgICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgICAgICAgICAgICBlbWl0LmJydXNoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb24wICYmIHNlbGVjdGlvbjEgPyB0d2VlbiA6IHR3ZWVuKDEpO1xuICAgICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cFxuICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgICAgICAgc3RhdGUgPSB0aGF0Ll9fYnJ1c2gsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMSA9IGRpbS5pbnB1dCh0eXBlb2Ygc2VsZWN0aW9uID09PSBcImZ1bmN0aW9uXCIgPyBzZWxlY3Rpb24uYXBwbHkodGhhdCwgYXJncykgOiBzZWxlY3Rpb24sIHN0YXRlLmV4dGVudCksXG4gICAgICAgICAgICAgICAgZW1pdCA9IGVtaXR0ZXIodGhhdCwgYXJncykuYmVmb3Jlc3RhcnQoKTtcblxuICAgICAgICAgICAgaW50ZXJydXB0KHRoYXQpO1xuICAgICAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gc2VsZWN0aW9uMSA9PSBudWxsIHx8IGVtcHR5KHNlbGVjdGlvbjEpID8gbnVsbCA6IHNlbGVjdGlvbjE7XG4gICAgICAgICAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgICAgICAgIGVtaXQuc3RhcnQoKS5icnVzaCgpLmVuZCgpO1xuICAgICAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiByZWRyYXcoKSB7XG4gICAgdmFyIGdyb3VwID0gc2VsZWN0KHRoaXMpLFxuICAgICAgICBzZWxlY3Rpb24gPSBsb2NhbCh0aGlzKS5zZWxlY3Rpb247XG5cbiAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICBncm91cC5zZWxlY3RBbGwoXCIuc2VsZWN0aW9uXCIpXG4gICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwieFwiLCBzZWxlY3Rpb25bMF1bMF0pXG4gICAgICAgICAgLmF0dHIoXCJ5XCIsIHNlbGVjdGlvblswXVsxXSlcbiAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIHNlbGVjdGlvblsxXVswXSAtIHNlbGVjdGlvblswXVswXSlcbiAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBzZWxlY3Rpb25bMV1bMV0gLSBzZWxlY3Rpb25bMF1bMV0pO1xuXG4gICAgICBncm91cC5zZWxlY3RBbGwoXCIuaGFuZGxlXCIpXG4gICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwieFwiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnR5cGVbZC50eXBlLmxlbmd0aCAtIDFdID09PSBcImVcIiA/IHNlbGVjdGlvblsxXVswXSAtIGhhbmRsZVNpemUgLyAyIDogc2VsZWN0aW9uWzBdWzBdIC0gaGFuZGxlU2l6ZSAvIDI7IH0pXG4gICAgICAgICAgLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZVswXSA9PT0gXCJzXCIgPyBzZWxlY3Rpb25bMV1bMV0gLSBoYW5kbGVTaXplIC8gMiA6IHNlbGVjdGlvblswXVsxXSAtIGhhbmRsZVNpemUgLyAyOyB9KVxuICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlID09PSBcIm5cIiB8fCBkLnR5cGUgPT09IFwic1wiID8gc2VsZWN0aW9uWzFdWzBdIC0gc2VsZWN0aW9uWzBdWzBdICsgaGFuZGxlU2l6ZSA6IGhhbmRsZVNpemU7IH0pXG4gICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlID09PSBcImVcIiB8fCBkLnR5cGUgPT09IFwid1wiID8gc2VsZWN0aW9uWzFdWzFdIC0gc2VsZWN0aW9uWzBdWzFdICsgaGFuZGxlU2l6ZSA6IGhhbmRsZVNpemU7IH0pO1xuICAgIH1cblxuICAgIGVsc2Uge1xuICAgICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvbiwuaGFuZGxlXCIpXG4gICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBcIm5vbmVcIilcbiAgICAgICAgICAuYXR0cihcInhcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcInlcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZW1pdHRlcih0aGF0LCBhcmdzKSB7XG4gICAgcmV0dXJuIHRoYXQuX19icnVzaC5lbWl0dGVyIHx8IG5ldyBFbWl0dGVyKHRoYXQsIGFyZ3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gRW1pdHRlcih0aGF0LCBhcmdzKSB7XG4gICAgdGhpcy50aGF0ID0gdGhhdDtcbiAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgIHRoaXMuc3RhdGUgPSB0aGF0Ll9fYnJ1c2g7XG4gICAgdGhpcy5hY3RpdmUgPSAwO1xuICB9XG5cbiAgRW1pdHRlci5wcm90b3R5cGUgPSB7XG4gICAgYmVmb3Jlc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCsrdGhpcy5hY3RpdmUgPT09IDEpIHRoaXMuc3RhdGUuZW1pdHRlciA9IHRoaXMsIHRoaXMuc3RhcnRpbmcgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBzdGFydDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5zdGFydGluZykgdGhpcy5zdGFydGluZyA9IGZhbHNlLCB0aGlzLmVtaXQoXCJzdGFydFwiKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgYnJ1c2g6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5lbWl0KFwiYnJ1c2hcIik7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVuZDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aGlzLmFjdGl2ZSA9PT0gMCkgZGVsZXRlIHRoaXMuc3RhdGUuZW1pdHRlciwgdGhpcy5lbWl0KFwiZW5kXCIpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBlbWl0OiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICBjdXN0b21FdmVudChuZXcgQnJ1c2hFdmVudChicnVzaCwgdHlwZSwgZGltLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLCBsaXN0ZW5lcnMuYXBwbHksIGxpc3RlbmVycywgW3R5cGUsIHRoaXMudGhhdCwgdGhpcy5hcmdzXSk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHN0YXJ0ZWQoKSB7XG4gICAgaWYgKGV2ZW50LnRvdWNoZXMpIHsgaWYgKGV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aCA8IGV2ZW50LnRvdWNoZXMubGVuZ3RoKSByZXR1cm4gbm9ldmVudCgpOyB9XG4gICAgZWxzZSBpZiAodG91Y2hlbmRpbmcpIHJldHVybjtcbiAgICBpZiAoIWZpbHRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSByZXR1cm47XG5cbiAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHR5cGUgPSBldmVudC50YXJnZXQuX19kYXRhX18udHlwZSxcbiAgICAgICAgbW9kZSA9IChldmVudC5tZXRhS2V5ID8gdHlwZSA9IFwib3ZlcmxheVwiIDogdHlwZSkgPT09IFwic2VsZWN0aW9uXCIgPyBNT0RFX0RSQUcgOiAoZXZlbnQuYWx0S2V5ID8gTU9ERV9DRU5URVIgOiBNT0RFX0hBTkRMRSksXG4gICAgICAgIHNpZ25YID0gZGltID09PSBZID8gbnVsbCA6IHNpZ25zWFt0eXBlXSxcbiAgICAgICAgc2lnblkgPSBkaW0gPT09IFggPyBudWxsIDogc2lnbnNZW3R5cGVdLFxuICAgICAgICBzdGF0ZSA9IGxvY2FsKHRoYXQpLFxuICAgICAgICBleHRlbnQgPSBzdGF0ZS5leHRlbnQsXG4gICAgICAgIHNlbGVjdGlvbiA9IHN0YXRlLnNlbGVjdGlvbixcbiAgICAgICAgVyA9IGV4dGVudFswXVswXSwgdzAsIHcxLFxuICAgICAgICBOID0gZXh0ZW50WzBdWzFdLCBuMCwgbjEsXG4gICAgICAgIEUgPSBleHRlbnRbMV1bMF0sIGUwLCBlMSxcbiAgICAgICAgUyA9IGV4dGVudFsxXVsxXSwgczAsIHMxLFxuICAgICAgICBkeCxcbiAgICAgICAgZHksXG4gICAgICAgIG1vdmluZyxcbiAgICAgICAgc2hpZnRpbmcgPSBzaWduWCAmJiBzaWduWSAmJiBldmVudC5zaGlmdEtleSxcbiAgICAgICAgbG9ja1gsXG4gICAgICAgIGxvY2tZLFxuICAgICAgICBwb2ludDAgPSBtb3VzZSh0aGF0KSxcbiAgICAgICAgcG9pbnQgPSBwb2ludDAsXG4gICAgICAgIGVtaXQgPSBlbWl0dGVyKHRoYXQsIGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKTtcblxuICAgIGlmICh0eXBlID09PSBcIm92ZXJsYXlcIikge1xuICAgICAgc3RhdGUuc2VsZWN0aW9uID0gc2VsZWN0aW9uID0gW1xuICAgICAgICBbdzAgPSBkaW0gPT09IFkgPyBXIDogcG9pbnQwWzBdLCBuMCA9IGRpbSA9PT0gWCA/IE4gOiBwb2ludDBbMV1dLFxuICAgICAgICBbZTAgPSBkaW0gPT09IFkgPyBFIDogdzAsIHMwID0gZGltID09PSBYID8gUyA6IG4wXVxuICAgICAgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdzAgPSBzZWxlY3Rpb25bMF1bMF07XG4gICAgICBuMCA9IHNlbGVjdGlvblswXVsxXTtcbiAgICAgIGUwID0gc2VsZWN0aW9uWzFdWzBdO1xuICAgICAgczAgPSBzZWxlY3Rpb25bMV1bMV07XG4gICAgfVxuXG4gICAgdzEgPSB3MDtcbiAgICBuMSA9IG4wO1xuICAgIGUxID0gZTA7XG4gICAgczEgPSBzMDtcblxuICAgIHZhciBncm91cCA9IHNlbGVjdCh0aGF0KVxuICAgICAgICAuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcblxuICAgIHZhciBvdmVybGF5ID0gZ3JvdXAuc2VsZWN0QWxsKFwiLm92ZXJsYXlcIilcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlXSk7XG5cbiAgICBpZiAoZXZlbnQudG91Y2hlcykge1xuICAgICAgZ3JvdXBcbiAgICAgICAgICAub24oXCJ0b3VjaG1vdmUuYnJ1c2hcIiwgbW92ZWQsIHRydWUpXG4gICAgICAgICAgLm9uKFwidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2hcIiwgZW5kZWQsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdmlldyA9IHNlbGVjdChldmVudC52aWV3KVxuICAgICAgICAgIC5vbihcImtleWRvd24uYnJ1c2hcIiwga2V5ZG93bmVkLCB0cnVlKVxuICAgICAgICAgIC5vbihcImtleXVwLmJydXNoXCIsIGtleXVwcGVkLCB0cnVlKVxuICAgICAgICAgIC5vbihcIm1vdXNlbW92ZS5icnVzaFwiLCBtb3ZlZCwgdHJ1ZSlcbiAgICAgICAgICAub24oXCJtb3VzZXVwLmJydXNoXCIsIGVuZGVkLCB0cnVlKTtcblxuICAgICAgZHJhZ0Rpc2FibGUoZXZlbnQudmlldyk7XG4gICAgfVxuXG4gICAgbm9wcm9wYWdhdGlvbigpO1xuICAgIGludGVycnVwdCh0aGF0KTtcbiAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICBlbWl0LnN0YXJ0KCk7XG5cbiAgICBmdW5jdGlvbiBtb3ZlZCgpIHtcbiAgICAgIHZhciBwb2ludDEgPSBtb3VzZSh0aGF0KTtcbiAgICAgIGlmIChzaGlmdGluZyAmJiAhbG9ja1ggJiYgIWxvY2tZKSB7XG4gICAgICAgIGlmIChNYXRoLmFicyhwb2ludDFbMF0gLSBwb2ludFswXSkgPiBNYXRoLmFicyhwb2ludDFbMV0gLSBwb2ludFsxXSkpIGxvY2tZID0gdHJ1ZTtcbiAgICAgICAgZWxzZSBsb2NrWCA9IHRydWU7XG4gICAgICB9XG4gICAgICBwb2ludCA9IHBvaW50MTtcbiAgICAgIG1vdmluZyA9IHRydWU7XG4gICAgICBub2V2ZW50KCk7XG4gICAgICBtb3ZlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW92ZSgpIHtcbiAgICAgIHZhciB0O1xuXG4gICAgICBkeCA9IHBvaW50WzBdIC0gcG9pbnQwWzBdO1xuICAgICAgZHkgPSBwb2ludFsxXSAtIHBvaW50MFsxXTtcblxuICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgIGNhc2UgTU9ERV9TUEFDRTpcbiAgICAgICAgY2FzZSBNT0RFX0RSQUc6IHtcbiAgICAgICAgICBpZiAoc2lnblgpIGR4ID0gTWF0aC5tYXgoVyAtIHcwLCBNYXRoLm1pbihFIC0gZTAsIGR4KSksIHcxID0gdzAgKyBkeCwgZTEgPSBlMCArIGR4O1xuICAgICAgICAgIGlmIChzaWduWSkgZHkgPSBNYXRoLm1heChOIC0gbjAsIE1hdGgubWluKFMgLSBzMCwgZHkpKSwgbjEgPSBuMCArIGR5LCBzMSA9IHMwICsgZHk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBNT0RFX0hBTkRMRToge1xuICAgICAgICAgIGlmIChzaWduWCA8IDApIGR4ID0gTWF0aC5tYXgoVyAtIHcwLCBNYXRoLm1pbihFIC0gdzAsIGR4KSksIHcxID0gdzAgKyBkeCwgZTEgPSBlMDtcbiAgICAgICAgICBlbHNlIGlmIChzaWduWCA+IDApIGR4ID0gTWF0aC5tYXgoVyAtIGUwLCBNYXRoLm1pbihFIC0gZTAsIGR4KSksIHcxID0gdzAsIGUxID0gZTAgKyBkeDtcbiAgICAgICAgICBpZiAoc2lnblkgPCAwKSBkeSA9IE1hdGgubWF4KE4gLSBuMCwgTWF0aC5taW4oUyAtIG4wLCBkeSkpLCBuMSA9IG4wICsgZHksIHMxID0gczA7XG4gICAgICAgICAgZWxzZSBpZiAoc2lnblkgPiAwKSBkeSA9IE1hdGgubWF4KE4gLSBzMCwgTWF0aC5taW4oUyAtIHMwLCBkeSkpLCBuMSA9IG4wLCBzMSA9IHMwICsgZHk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBNT0RFX0NFTlRFUjoge1xuICAgICAgICAgIGlmIChzaWduWCkgdzEgPSBNYXRoLm1heChXLCBNYXRoLm1pbihFLCB3MCAtIGR4ICogc2lnblgpKSwgZTEgPSBNYXRoLm1heChXLCBNYXRoLm1pbihFLCBlMCArIGR4ICogc2lnblgpKTtcbiAgICAgICAgICBpZiAoc2lnblkpIG4xID0gTWF0aC5tYXgoTiwgTWF0aC5taW4oUywgbjAgLSBkeSAqIHNpZ25ZKSksIHMxID0gTWF0aC5tYXgoTiwgTWF0aC5taW4oUywgczAgKyBkeSAqIHNpZ25ZKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGUxIDwgdzEpIHtcbiAgICAgICAgc2lnblggKj0gLTE7XG4gICAgICAgIHQgPSB3MCwgdzAgPSBlMCwgZTAgPSB0O1xuICAgICAgICB0ID0gdzEsIHcxID0gZTEsIGUxID0gdDtcbiAgICAgICAgaWYgKHR5cGUgaW4gZmxpcFgpIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGUgPSBmbGlwWFt0eXBlXV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoczEgPCBuMSkge1xuICAgICAgICBzaWduWSAqPSAtMTtcbiAgICAgICAgdCA9IG4wLCBuMCA9IHMwLCBzMCA9IHQ7XG4gICAgICAgIHQgPSBuMSwgbjEgPSBzMSwgczEgPSB0O1xuICAgICAgICBpZiAodHlwZSBpbiBmbGlwWSkgb3ZlcmxheS5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnNbdHlwZSA9IGZsaXBZW3R5cGVdXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZS5zZWxlY3Rpb24pIHNlbGVjdGlvbiA9IHN0YXRlLnNlbGVjdGlvbjsgLy8gTWF5IGJlIHNldCBieSBicnVzaC5tb3ZlIVxuICAgICAgaWYgKGxvY2tYKSB3MSA9IHNlbGVjdGlvblswXVswXSwgZTEgPSBzZWxlY3Rpb25bMV1bMF07XG4gICAgICBpZiAobG9ja1kpIG4xID0gc2VsZWN0aW9uWzBdWzFdLCBzMSA9IHNlbGVjdGlvblsxXVsxXTtcblxuICAgICAgaWYgKHNlbGVjdGlvblswXVswXSAhPT0gdzFcbiAgICAgICAgICB8fCBzZWxlY3Rpb25bMF1bMV0gIT09IG4xXG4gICAgICAgICAgfHwgc2VsZWN0aW9uWzFdWzBdICE9PSBlMVxuICAgICAgICAgIHx8IHNlbGVjdGlvblsxXVsxXSAhPT0gczEpIHtcbiAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gW1t3MSwgbjFdLCBbZTEsIHMxXV07XG4gICAgICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgICAgICBlbWl0LmJydXNoKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5kZWQoKSB7XG4gICAgICBub3Byb3BhZ2F0aW9uKCk7XG4gICAgICBpZiAoZXZlbnQudG91Y2hlcykge1xuICAgICAgICBpZiAoZXZlbnQudG91Y2hlcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgaWYgKHRvdWNoZW5kaW5nKSBjbGVhclRpbWVvdXQodG91Y2hlbmRpbmcpO1xuICAgICAgICB0b3VjaGVuZGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRvdWNoZW5kaW5nID0gbnVsbDsgfSwgNTAwKTsgLy8gR2hvc3QgY2xpY2tzIGFyZSBkZWxheWVkIVxuICAgICAgICBncm91cC5vbihcInRvdWNobW92ZS5icnVzaCB0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaFwiLCBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRyYWdFbmFibGUoZXZlbnQudmlldywgbW92aW5nKTtcbiAgICAgICAgdmlldy5vbihcImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2hcIiwgbnVsbCk7XG4gICAgICB9XG4gICAgICBncm91cC5hdHRyKFwicG9pbnRlci1ldmVudHNcIiwgXCJhbGxcIik7XG4gICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29ycy5vdmVybGF5KTtcbiAgICAgIGlmIChzdGF0ZS5zZWxlY3Rpb24pIHNlbGVjdGlvbiA9IHN0YXRlLnNlbGVjdGlvbjsgLy8gTWF5IGJlIHNldCBieSBicnVzaC5tb3ZlIChvbiBzdGFydCkhXG4gICAgICBpZiAoZW1wdHkoc2VsZWN0aW9uKSkgc3RhdGUuc2VsZWN0aW9uID0gbnVsbCwgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgICBlbWl0LmVuZCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtleWRvd25lZCgpIHtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgICBjYXNlIDE2OiB7IC8vIFNISUZUXG4gICAgICAgICAgc2hpZnRpbmcgPSBzaWduWCAmJiBzaWduWTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDE4OiB7IC8vIEFMVFxuICAgICAgICAgIGlmIChtb2RlID09PSBNT0RFX0hBTkRMRSkge1xuICAgICAgICAgICAgaWYgKHNpZ25YKSBlMCA9IGUxIC0gZHggKiBzaWduWCwgdzAgPSB3MSArIGR4ICogc2lnblg7XG4gICAgICAgICAgICBpZiAoc2lnblkpIHMwID0gczEgLSBkeSAqIHNpZ25ZLCBuMCA9IG4xICsgZHkgKiBzaWduWTtcbiAgICAgICAgICAgIG1vZGUgPSBNT0RFX0NFTlRFUjtcbiAgICAgICAgICAgIG1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAzMjogeyAvLyBTUEFDRTsgdGFrZXMgcHJpb3JpdHkgb3ZlciBBTFRcbiAgICAgICAgICBpZiAobW9kZSA9PT0gTU9ERV9IQU5ETEUgfHwgbW9kZSA9PT0gTU9ERV9DRU5URVIpIHtcbiAgICAgICAgICAgIGlmIChzaWduWCA8IDApIGUwID0gZTEgLSBkeDsgZWxzZSBpZiAoc2lnblggPiAwKSB3MCA9IHcxIC0gZHg7XG4gICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxIC0gZHk7IGVsc2UgaWYgKHNpZ25ZID4gMCkgbjAgPSBuMSAtIGR5O1xuICAgICAgICAgICAgbW9kZSA9IE1PREVfU1BBQ0U7XG4gICAgICAgICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29ycy5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgbW92ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiByZXR1cm47XG4gICAgICB9XG4gICAgICBub2V2ZW50KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24ga2V5dXBwZWQoKSB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcbiAgICAgICAgY2FzZSAxNjogeyAvLyBTSElGVFxuICAgICAgICAgIGlmIChzaGlmdGluZykge1xuICAgICAgICAgICAgbG9ja1ggPSBsb2NrWSA9IHNoaWZ0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMTg6IHsgLy8gQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfQ0VOVEVSKSB7XG4gICAgICAgICAgICBpZiAoc2lnblggPCAwKSBlMCA9IGUxOyBlbHNlIGlmIChzaWduWCA+IDApIHcwID0gdzE7XG4gICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxOyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjE7XG4gICAgICAgICAgICBtb2RlID0gTU9ERV9IQU5ETEU7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMzI6IHsgLy8gU1BBQ0VcbiAgICAgICAgICBpZiAobW9kZSA9PT0gTU9ERV9TUEFDRSkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgICBpZiAoc2lnblgpIGUwID0gZTEgLSBkeCAqIHNpZ25YLCB3MCA9IHcxICsgZHggKiBzaWduWDtcbiAgICAgICAgICAgICAgaWYgKHNpZ25ZKSBzMCA9IHMxIC0gZHkgKiBzaWduWSwgbjAgPSBuMSArIGR5ICogc2lnblk7XG4gICAgICAgICAgICAgIG1vZGUgPSBNT0RFX0NFTlRFUjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChzaWduWCA8IDApIGUwID0gZTE7IGVsc2UgaWYgKHNpZ25YID4gMCkgdzAgPSB3MTtcbiAgICAgICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgczAgPSBzMTsgZWxzZSBpZiAoc2lnblkgPiAwKSBuMCA9IG4xO1xuICAgICAgICAgICAgICBtb2RlID0gTU9ERV9IQU5ETEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlXSk7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5vZXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplKCkge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuX19icnVzaCB8fCB7c2VsZWN0aW9uOiBudWxsfTtcbiAgICBzdGF0ZS5leHRlbnQgPSBleHRlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBzdGF0ZS5kaW0gPSBkaW07XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgYnJ1c2guZXh0ZW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGV4dGVudCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoW1srX1swXVswXSwgK19bMF1bMV1dLCBbK19bMV1bMF0sICtfWzFdWzFdXV0pLCBicnVzaCkgOiBleHRlbnQ7XG4gIH07XG5cbiAgYnJ1c2guZmlsdGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGZpbHRlciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgYnJ1c2gpIDogZmlsdGVyO1xuICB9O1xuXG4gIGJydXNoLmhhbmRsZVNpemUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaGFuZGxlU2l6ZSA9ICtfLCBicnVzaCkgOiBoYW5kbGVTaXplO1xuICB9O1xuXG4gIGJydXNoLm9uID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlID0gbGlzdGVuZXJzLm9uLmFwcGx5KGxpc3RlbmVycywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IGxpc3RlbmVycyA/IGJydXNoIDogdmFsdWU7XG4gIH07XG5cbiAgcmV0dXJuIGJydXNoO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuaW1wb3J0IHttZWFuLCBxdWFudGlsZSwgZGV2aWF0aW9ufSBmcm9tIFwiZDMtYXJyYXlcIjtcblxuXG4vLyByZWZlcmVuY2U6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0tlcm5lbF8oc3RhdGlzdGljcylcbi8vIHJlZmVyZW5jZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvS2VybmVsX2RlbnNpdHlfZXN0aW1hdGlvblxuZXhwb3J0IGNvbnN0IGtlcm5lbCA9IHtcbiAgICBlcGFuZWNobmlrb3Y6IGZ1bmN0aW9uKHUpe3JldHVybiBNYXRoLmFicyh1KSA8PSAxPyAoMy80KSooMS11KnUpOjB9LFxuICAgIGdhdXNzaWFuOiBmdW5jdGlvbih1KXtyZXR1cm4gMS9NYXRoLnNxcnQoMipNYXRoLlBJKSpNYXRoLmV4cCgtLjUqdSp1KX1cbn07XG5cbi8vIHJlZmVyZW5jZTogaHR0cHM6Ly9naXRodWIuY29tL2phc29uZGF2aWVzL3NjaWVuY2UuanMvYmxvYi9tYXN0ZXIvc3JjL3N0YXRzL2JhbmR3aWR0aC5qc1xuZXhwb3J0IGNvbnN0IGtlcm5lbEJhbmR3aWR0aCA9IHtcbiAgICAvLyBCYW5kd2lkdGggc2VsZWN0b3JzIGZvciBHYXVzc2lhbiBrZXJuZWxzLlxuICAgIG5yZDogZnVuY3Rpb24oeCkge1xuICAgICAgICBsZXQgaXFyID0gcXVhbnRpbGUoeCwgMC43NSkgLSBxdWFudGlsZSh4LCAwLjI1KTtcbiAgICAgICAgbGV0IGggPSBpcXIgLyAxLjM0O1xuICAgICAgICByZXR1cm4gMS4wNiAqIE1hdGgubWluKGRldmlhdGlvbih4KSwgaCkgKiBNYXRoLnBvdyh4Lmxlbmd0aCwgLTEvNSk7XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGtlcm5lbDogdGhlIGtlcm5lbCBmdW5jdGlvbiwgc3VjaCBhcyBnYXVzc2lhblxuICogQHBhcmFtIFg6IGxpc3Qgb2YgYmluc1xuICogQHBhcmFtIGg6IHRoZSBiYW5kd2lkdGgsIGVpdGhlciBhIG51bWVyaWNhbCB2YWx1ZSBnaXZlbiBieSB0aGUgdXNlciBvciBjYWxjdWxhdGVkIHVzaW5nIHRoZSBmdW5jdGlvbiBrZXJuZWxCYW5kd2lkdGhcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn06IHRoZSBrZXJuZWwgZGVuc2l0eSBlc3RpbWF0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtlcm5lbERlbnNpdHlFc3RpbWF0b3Ioa2VybmVsLCBYLCBoKXtcbiAgICByZXR1cm4gZnVuY3Rpb24oVikge1xuICAgICAgICAvLyBYIGlzIHRoZSBiaW5zXG4gICAgICAgIHJldHVybiBYLm1hcCgoeCkgPT4gW3gsIG1lYW4oViwgKHYpID0+IGtlcm5lbCgoeC12KS9oKSkvaF0pO1xuICAgIH1cbn1cblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuLypcbklucHV0IGRhdGEgc3RydWN0dXJlOiBhIGxpc3Qgb2YgZGF0YSBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZTpcbltcbiAgICB7XG4gICAgICAgIGdyb3VwOiBcImdyb3VwMVwiXG4gICAgICAgIGxhYmVsOiBcImRhdGFzZXQgMVwiLFxuICAgICAgICB2YWx1ZXM6IFthIGxpc3Qgb2YgbnVtZXJpY2FsIHZhbHVlc11cbiAgICAgfSxcbiAgICAge1xuICAgICAgICBncm91cDogXCJncm91cDFcIlxuICAgICAgICBsYWJlbDogXCJkYXRhc2V0IDJcIixcbiAgICAgICAgdmFsdWVzOiBbYSBsaXN0IG9mIG51bWVyaWNhbCB2YWx1ZXNdXG4gICAgIH0sXG4gICAgIHtcbiAgICAgICAgZ3JvdXA6IFwiZ3JvdXAyXCJcbiAgICAgICAgbGFiZWw6IFwiZGF0YXNldCAzXCIsXG4gICAgICAgIHZhbHVlczogW2EgbGlzdCBvZiBudW1lcmljYWwgdmFsdWVzXVxuICAgICB9XG5dXG4qL1xuXG5pbXBvcnQge2V4dGVudCwgbWVkaWFuLCBhc2NlbmRpbmcsIHF1YW50aWxlLCBtYXgsIG1pbn0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge25lc3R9IGZyb20gXCJkMy1jb2xsZWN0aW9uXCI7XG5pbXBvcnQge3NjYWxlQmFuZCwgc2NhbGVMaW5lYXJ9IGZyb20gXCJkMy1zY2FsZVwiO1xuaW1wb3J0IHthcmVhfSBmcm9tIFwiZDMtc2hhcGVcIjtcbmltcG9ydCB7YXhpc1RvcCwgYXhpc0JvdHRvbSwgYXhpc0xlZnR9IGZyb20gXCJkMy1heGlzXCI7XG5pbXBvcnQge3NlbGVjdCwgc2VsZWN0QWxsLCBldmVudH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHticnVzaH0gZnJvbSBcImQzLWJydXNoXCI7XG5cbmltcG9ydCB7a2VybmVsRGVuc2l0eUVzdGltYXRvciwga2VybmVsLCBrZXJuZWxCYW5kd2lkdGh9IGZyb20gXCIuL2tkZVwiO1xuaW1wb3J0IFRvb2x0aXAgZnJvbSBcIi4vVG9vbHRpcFwiO1xuaW1wb3J0IFRvb2xiYXIgZnJvbSBcIi4vVG9vbGJhclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHcm91cGVkVmlvbGluIHtcbiAgICAvKipcbiAgICAgKiBjb25zdHJ1Y3RvciBmb3IgR3JvdXBlZFZpb2xpblxuICAgICAqIEBwYXJhbSBkYXRhIHtMaXN0fTogYSBsaXN0IG9mIG9iamVjdHMgd2l0aCBhdHRyaWJ1dGVzOiBncm91cDoge1N0cmluZ30sIGxhYmVsOiB7U3RyaW5nfSwgdmFsdWVzOiB7TGlzdH0gb2YgbnVtZXJpY2FsIHZhbHVlcywgc2l6ZTogaW50ZWdlciwgb3B0aW9uYWxcbiAgICAgKiBAcGFyYW0gZ3JvdXBJbmZvIHtEaWN0aW9uYXJ5fTogbWV0YWRhdGEgb2YgdGhlIGdyb3VwLCBpbmRleGVkIGJ5IGdyb3VwIElEXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoZGF0YSwgZ3JvdXBJbmZvID0ge30pe1xuICAgICAgICB0aGlzLl9zYW5pdHlDaGVjayhkYXRhKTtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5ncm91cEluZm8gPSBncm91cEluZm87XG4gICAgICAgIHRoaXMudG9vbGJhciA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy50b29sdGlwID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIGRvbSB7RE9NfSB0aGUgU1ZHIGRvbSBvYmplY3QgdG8gYXBwZW5kIHRoZSB2aW9saW4gcGxvdCB0b1xuICAgICAqIEBwYXJhbSB3aWR0aCB7RmxvYXR9XG4gICAgICogQHBhcmFtIGhlaWdodCB7RmxvYXR9XG4gICAgICogQHBhcmFtIHhQYWRkaW5nIHtGbG9hdH0gcGFkZGluZyBvZiB0aGUgeCBheGlzXG4gICAgICogQHBhcmFtIHhEb21haW4ge0xpc3R9IHRoZSBvcmRlciBvZiBYIGdyb3Vwc1xuICAgICAqIEBwYXJhbSB5RG9tYWluICB7TGlzdH0gdGhlIG1pbiBhbmQgbWF4IHZhbHVlcyBvZiB0aGUgeSBkb21haW5cbiAgICAgKiBAcGFyYW0geUxhYmVsIHtTdHJpbmd9XG4gICAgICogQHBhcmFtIHNob3dYXG4gICAgICogQHBhcmFtIHNob3dTdWJYXG4gICAgICogQHBhcmFtIHN1YlhBbmdsZVxuICAgICAqIEBwYXJhbSBzaG93V2hpc2tlclxuICAgICAqIEBwYXJhbSBzaG93RGl2aWRlclxuICAgICAqIEBwYXJhbSBzaG93TGVnZW5kXG4gICAgICogQHBhcmFtIHNob3dTaXplXG4gICAgICovXG5cbiAgICByZW5kZXIoZG9tLCB3aWR0aD01MDAsIGhlaWdodD0zNTcsIHhQYWRkaW5nPTAuMDUsIHhEb21haW49dW5kZWZpbmVkLCB5RG9tYWluPVstMywzXSwgeUxhYmVsPVwiWSBheGlzXCIsXG4gICAgICAgICAgIHNob3dYPXRydWUsIHNob3dTdWJYPXRydWUsIHN1YlhBbmdsZT0wLFxuICAgICAgICAgICBzaG93V2hpc2tlcj1mYWxzZSwgc2hvd0RpdmlkZXI9ZmFsc2UsIHNob3dMZWdlbmQ9ZmFsc2UsIHNob3dTaXplPWZhbHNlKXtcblxuICAgICAgICAvLyBkZWZpbmUgdGhlIHJlc2V0IGZvciB0aGlzIHBsb3RcbiAgICAgICAgdGhpcy5yZXNldCA9ICgpID0+IHtcbiAgICAgICAgICAgIGRvbS5zZWxlY3RBbGwoXCIqXCIpLnJlbW92ZSgpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXIoZG9tLCB3aWR0aCwgaGVpZ2h0LCB4UGFkZGluZywgeERvbWFpbiwgeURvbWFpbiwgeUxhYmVsLCBzaG93WCwgc2hvd1N1YlgsIHN1YlhBbmdsZSwgc2hvd1doaXNrZXIsIHNob3dEaXZpZGVyLCBzaG93TGVnZW5kKTtcbiAgICAgICAgfTtcblxuXG4gICAgICAgIC8vIGRlZmluZXMgdGhlIFgsIHN1YlgsIFksIFogc2NhbGVzXG4gICAgICAgIGlmICh5RG9tYWluPT09dW5kZWZpbmVkIHx8IDAgPT0geURvbWFpbi5sZW5ndGgpe1xuICAgICAgICAgICAgbGV0IGFsbFYgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKChkKSA9PiBhbGxWID0gYWxsVi5jb25jYXQoZC52YWx1ZXMpKTtcbiAgICAgICAgICAgIHlEb21haW4gPSBleHRlbnQoYWxsVik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZS1vcmdhbml6ZWQgdGhpcy5kYXRhIGluZGV4ZWQgYnkgZ3JvdXBzXG4gICAgICAgIHRoaXMuZ3JvdXBzID0gbmVzdCgpXG4gICAgICAgICAgICAua2V5KChkKSA9PiBkLmdyb3VwKVxuICAgICAgICAgICAgLmVudHJpZXModGhpcy5kYXRhKTtcblxuICAgICAgICB0aGlzLnNjYWxlID0ge1xuICAgICAgICAgICAgeDogc2NhbGVCYW5kKClcbiAgICAgICAgICAgICAgICAucmFuZ2VSb3VuZChbMCwgd2lkdGhdKVxuICAgICAgICAgICAgICAgIC5kb21haW4oeERvbWFpbnx8dGhpcy5ncm91cHMubWFwKChkKSA9PiBkLmtleSkpXG4gICAgICAgICAgICAgICAgLnBhZGRpbmdJbm5lcih4UGFkZGluZyksXG4gICAgICAgICAgICBzdWJ4OiBzY2FsZUJhbmQoKSxcbiAgICAgICAgICAgIHk6IHNjYWxlTGluZWFyKClcbiAgICAgICAgICAgICAgICAucmFuZ2VSb3VuZChbaGVpZ2h0LCAwXSlcbiAgICAgICAgICAgICAgICAuZG9tYWluKHlEb21haW4pLFxuICAgICAgICAgICAgejogc2NhbGVMaW5lYXIoKSAvLyB0aGlzIGlzIHRoZSB2aW9saW4gd2lkdGgsIHRoZSBkb21haW4gYW5kIHJhbmdlIGFyZSBkZXRlcm1pbmVkIGxhdGVyIGluZGl2aWR1YWxseSBmb3IgZWFjaCB2aW9saW5cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBmb3IgZWFjaCBncm91cFxuICAgICAgICB0aGlzLmdyb3Vwcy5mb3JFYWNoKChnKSA9PiB7XG4gICAgICAgICAgICBsZXQgZ3JvdXAgPSBnLmtleTtcbiAgICAgICAgICAgIGxldCBlbnRyaWVzID0gZy52YWx1ZXM7XG4gICAgICAgICAgICBsZXQgaW5mbyA9IHRoaXMuZ3JvdXBJbmZvW2dyb3VwXTsgLy8gb3B0aW9uYWxcbiAgICAgICAgICAgIGcuaW5kZXggPSB0aGlzLnNjYWxlLnguZG9tYWluKCkuaW5kZXhPZihncm91cCk7XG5cbiAgICAgICAgICAgIGlmIChpbmZvICE9PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgICAvLyByZW5kZXJzIGdyb3VwIGluZm8gc3VjaCBhcyBwLXZhbHVlLCBncm91cCBuYW1lXG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBJbmZvRG9tID0gZG9tLmFwcGVuZChcImdcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBMYWJlbHMgPSBncm91cEluZm9Eb20uc2VsZWN0QWxsKFwiLnZpb2xpbi1ncm91cC1sYWJlbFwiKVxuICAgICAgICAgICAgICAgICAgICAuZGF0YShbJ3B2YWx1ZSddKTtcbiAgICAgICAgICAgICAgICBncm91cExhYmVscy5lbnRlcigpLmFwcGVuZChcInRleHRcIikgLy8gQ29kZSByZXZpZXc6IGNvbnNpZGVyIG1vdmluZyB0aGlzIHBhcnQgdG8gdGhlIGVRVEwgZGFzaGJvYXJkXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKFwieFwiLCAwKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgMClcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInZpb2xpbi1ncm91cC1sYWJlbFwiKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcImZpbGxcIiwgKGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGluZm9bJ3B2YWx1ZVRocmVzaG9sZCddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkPT0ncHZhbHVlJyYmcGFyc2VGbG9hdChpbmZvW2RdKTw9cGFyc2VGbG9hdChpbmZvWydwdmFsdWVUaHJlc2hvbGQnXSk/XCJvcmFuZ2VyZWRcIjpcIlNsYXRlR3JheVwiXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIChkLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgeCA9IHRoaXMuc2NhbGUueChncm91cCkgKyB0aGlzLnNjYWxlLnguYmFuZHdpZHRoKCkvMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB5ID0gdGhpcy5zY2FsZS55KHlEb21haW5bMF0pICsgNTA7IC8vIHRvZG86IGF2b2lkIGhhcmQtY29kZWQgdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYHRyYW5zbGF0ZSgke3h9LCAke3l9KWBcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLnRleHQoKGQpID0+IGAke2R9OiAke3BhcnNlRmxvYXQocGFyc2VGbG9hdChpbmZvW2RdKS50b1ByZWNpc2lvbigzKSkudG9FeHBvbmVudGlhbCgpfWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSB0aGlzLnNjYWxlLnN1YnggYmFzZWQgb24gdGhpcy5zY2FsZS54XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnN1YnhcbiAgICAgICAgICAgICAgICAuZG9tYWluKGVudHJpZXMubWFwKChkKSA9PiBkLmxhYmVsKSlcbiAgICAgICAgICAgICAgICAucmFuZ2VSb3VuZChbdGhpcy5zY2FsZS54KGdyb3VwKSwgdGhpcy5zY2FsZS54KGdyb3VwKSArIHRoaXMuc2NhbGUueC5iYW5kd2lkdGgoKV0pO1xuXG4gICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG5cbiAgICAgICAgICAgICAgICBpZiAoMCA9PSBlbnRyeS52YWx1ZXMubGVuZ3RoKSByZXR1cm47IC8vIG5vIGZ1cnRoZXIgcmVuZGVyaW5nIGlmIHRoaXMgZ3JvdXAgaGFzIG5vIGVudHJpZXNcbiAgICAgICAgICAgICAgICBlbnRyeS52YWx1ZXMgPSBlbnRyeS52YWx1ZXMuc29ydChhc2NlbmRpbmcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RyYXdWaW9saW4oZG9tLCBlbnRyeSwgc2hvd1doaXNrZXIsIGcuaW5kZXgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGFkZHMgdGhlIHN1Yi14IGF4aXMgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgZW50cmllc1xuICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IDE1O1xuICAgICAgICAgICAgaWYgKHNob3dTaXplKXtcbiAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZVNjYWxlID0gc2NhbGVCYW5kKClcbiAgICAgICAgICAgICAgICAgICAgLmRvbWFpbihlbnRyaWVzLm1hcCgoZCkgPT4ge3JldHVybiBkLnNpemU9PXVuZGVmaW5lZD8nKDApJzpgKCR7ZC5zaXplfHwwfSlgfSkpXG4gICAgICAgICAgICAgICAgICAgIC5yYW5nZVJvdW5kKFt0aGlzLnNjYWxlLngoZ3JvdXApLCB0aGlzLnNjYWxlLngoZ3JvdXApICsgdGhpcy5zY2FsZS54LmJhbmR3aWR0aCgpXSk7XG4gICAgICAgICAgICAgICAgIGNvbnN0IHNpemV4RyA9IGRvbS5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidmlvbGluLXNpemUtYXhpc1wiKVxuICAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgwLCAke2hlaWdodCArIGJ1ZmZlcn0pYClcbiAgICAgICAgICAgICAgICAgICAgIC5jYWxsKGF4aXNCb3R0b20oc2l6ZVNjYWxlKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaG93U3ViWCkge1xuICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSA1O1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1YnhHID0gZG9tLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInZpb2xpbi1zdWItYXhpc1wiKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKDAsICR7aGVpZ2h0ICsgYnVmZmVyfSlgKVxuICAgICAgICAgICAgICAgICAgICAuY2FsbChheGlzQm90dG9tKHRoaXMuc2NhbGUuc3VieCkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN1YlhBbmdsZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc3VieEcuc2VsZWN0QWxsKFwidGV4dFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJzdGFydFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHJvdGF0ZSgke3N1YlhBbmdsZX0sIDIsIDEwKWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHJlbmRlcnMgdGhlIHggYXhpc1xuICAgICAgICBsZXQgYnVmZmVyID0gc2hvd1N1Ylg/NTU6MDsgLy8gQ29kZSByZXZpZXc6IGhhcmQtY29kZWQgdmFsdWVzXG4gICAgICAgIHRoaXMueEF4aXMgPSBzaG93WD9heGlzQm90dG9tKHRoaXMuc2NhbGUueCk6YXhpc0JvdHRvbSh0aGlzLnNjYWxlLngpLnRpY2tGb3JtYXQoXCJcIik7XG4gICAgICAgIGRvbS5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidmlvbGluLXgtYXhpcyBheGlzLS14XCIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKDAsICR7aGVpZ2h0ICsgYnVmZmVyfSlgKVxuICAgICAgICAgICAgLmNhbGwodGhpcy54QXhpcykgLy8gc2V0IHRpY2tGb3JtYXQoXCJcIikgdG8gc2hvdyB0aWNrIG1hcmtzIHdpdGhvdXQgdGV4dCBsYWJlbHNcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcInN0YXJ0XCIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInJvdGF0ZSgzMCwgLTEwLCAxMClcIik7XG5cbiAgICAgICAgLy8gYWRkcyB0aGUgeSBBeGlzXG4gICAgICAgIGJ1ZmZlciA9IDU7XG4gICAgICAgIHRoaXMueUF4aXMgPSBheGlzTGVmdCh0aGlzLnNjYWxlLnkpXG4gICAgICAgICAgICAgICAgICAgIC50aWNrVmFsdWVzKHRoaXMuc2NhbGUueS50aWNrcyg1KSk7XG4gICAgICAgIGRvbS5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidmlvbGluLXktYXhpcyBheGlzLS15XCIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKC0ke2J1ZmZlcn0sIDApYClcbiAgICAgICAgICAgIC5jYWxsKHRoaXMueUF4aXMpO1xuXG4gICAgICAgIC8vIGFkZHMgdGhlIHRleHQgbGFiZWwgZm9yIHRoZSB5IGF4aXNcbiAgICAgICAgZG9tLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAtNDApIC8vIHRvZG86IGF2b2lkIGhhcmQtY29kZWQgdmFsdWVcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCAtNDApXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidmlvbGluLWF4aXMtbGFiZWxcIilcbiAgICAgICAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgXCJzdGFydFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJyb3RhdGUoLTkwKVwiKVxuICAgICAgICAgICAgLnRleHQoeUxhYmVsKTtcblxuICAgICAgICAvLyBwbG90IG1vdXNlIGV2ZW50c1xuICAgICAgICBkb20ub24oXCJtb3VzZW91dFwiLCAoKT0+e1xuICAgICAgICAgICAgaWYodGhpcy50b29sdGlwICE9PSB1bmRlZmluZWQpIHRoaXMudG9vbHRpcC5oaWRlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGFkZCBncm91cCBkaXZpZGVyc1xuICAgICAgICBpZihzaG93RGl2aWRlcil7XG4gICAgICAgICAgICB0aGlzLl9hZGRHcm91cERpdmlkZXIoZG9tKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCBjb2xvciBsZWdlbmRcbiAgICAgICAgaWYgKHNob3dMZWdlbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxlZ2VuZEcgPSBkb20uYXBwZW5kKFwiZ1wiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaWRcIiwgXCJ2aW9saW5MZWdlbmRcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKDAsIDApYCk7XG5cbiAgICAgICAgICAgIGxlZ2VuZEcuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieFwiLCB0aGlzLnNjYWxlLngucmFuZ2UoKVswXSlcbiAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgLTM1KVxuICAgICAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgNjAqKHRoaXMuZ3JvdXBzWzBdLnZhbHVlcy5sZW5ndGgpICsgMTApXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgMjQpXG4gICAgICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBcIm5vbmVcIilcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJzdHJva2VcIiwgXCJzaWx2ZXJcIik7XG5cbiAgICAgICAgICAgIGNvbnN0IGxlZ2VuZHMgPSBsZWdlbmRHLnNlbGVjdEFsbChcIi52aW9saW4tbGVnZW5kXCIpLmRhdGEodGhpcy5ncm91cHNbMF0udmFsdWVzKTtcblxuXG4gICAgICAgICAgICBjb25zdCBnID0gbGVnZW5kcy5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcInZpb2xpbi1sZWdlbmRcIiwgdHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCB3ID0gMTA7XG4gICAgICAgICAgICBnLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcInhcIiwgKGQsIGkpID0+IDUgKyA2MCooaSkgICsgdGhpcy5zY2FsZS54LnJhbmdlKClbMF0pXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIC0yOClcbiAgICAgICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIHcpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdylcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIChkKSA9PiBkLmNvbG9yKTtcblxuICAgICAgICAgICAgZy5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInZpb2xpbi1sZWdlbmQtdGV4dFwiKVxuICAgICAgICAgICAgICAgIC50ZXh0KChkKSA9PiBkLmxhYmVsKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieFwiLCAoZCwgaSkgPT4gMTcgKyA2MCooaSkgKyB0aGlzLnNjYWxlLngucmFuZ2UoKVswXSlcbiAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgLTIwKTtcbiAgICAgICAgfVxuXG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgdGhlIHRvb2x0aXAgb2JqZWN0XG4gICAgICogQHBhcmFtIGRvbUlkIHtTdHJpbmd9IHRoZSB0b29sdGlwJ3MgZG9tIElEXG4gICAgICogQHJldHVybnMge1Rvb2x0aXB9XG4gICAgICovXG4gICAgY3JlYXRlVG9vbHRpcChkb21JZCl7XG4gICAgICAgIGlmICgkKGAjJHtkb21JZH1gKS5sZW5ndGggPT0gMCkgJCgnPGRpdi8+JykuYXR0cignaWQnLCBkb21JZCkuYXBwZW5kVG8oJCgnYm9keScpKTtcbiAgICAgICAgdGhpcy50b29sdGlwID0gbmV3IFRvb2x0aXAoZG9tSWQpO1xuICAgICAgICBzZWxlY3QoYCMke2RvbUlkfWApLmNsYXNzZWQoJ3Zpb2xpbi10b29sdGlwJywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnRvb2x0aXA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIHRoZSB0b29sYmFyIHBhbmVsXG4gICAgICogQHBhcmFtIGRvbUlkIHtTdHJpbmd9IHRoZSB0b29sYmFyJ3MgZG9tIElEXG4gICAgICogQHBhcmFtIHRvb2x0aXAge1Rvb2x0aXB9XG4gICAgICogQHJldHVybnMge1Rvb2xiYXJ9XG4gICAgICovXG5cbiAgICBjcmVhdGVUb29sYmFyKGRvbUlkLCB0b29sdGlwKXtcbiAgICAgICAgLy8gaWYgKHRvb2x0aXAgPT09IHVuZGVmaW5lZCkgdG9vbHRpcCA9IHRoaXMuY3JlYXRlVG9vbHRpcChkb21JZCk7XG4gICAgICAgIHRoaXMudG9vbGJhciA9IG5ldyBUb29sYmFyKGRvbUlkLCB0b29sdGlwKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbGJhcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYSBicnVzaCB0byB0aGUgcGxvdFxuICAgICAqIEBwYXJhbSBkb20ge0QzfSBEb20gZWxlbWVudFxuICAgICAqL1xuICAgIGFkZEJydXNoKGRvbSl7XG4gICAgICAgIGNvbnN0IHRoZUJydXNoID0gYnJ1c2goKTtcbiAgICAgICAgdGhlQnJ1c2gub24oXCJlbmRcIiwgKCk9Pnt0aGlzLnpvb20oZG9tLCB0aGVCcnVzaCl9KTtcbiAgICAgICAgZG9tLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJicnVzaFwiKVxuICAgICAgICAgICAgLmNhbGwodGhlQnJ1c2gpO1xuICAgIH1cblxuICAgIHpvb20oZG9tLCB0aGVCcnVzaCl7XG4gICAgICAgIGxldCBzID0gZXZlbnQuc2VsZWN0aW9uLFxuICAgICAgICAgICAgaWRlbFRpbWVvdXQsXG4gICAgICAgICAgICBpZGVsRGVsYXkgPSAzNTA7XG4gICAgICAgIGlmICh0aGVCcnVzaCA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghcykge1xuICAgICAgICAgICAgaWYgKCFpZGVsVGltZW91dCkgcmV0dXJuIGlkZWxUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWRlbFRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgfSwgaWRlbERlbGF5KTtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gcmVzZXQgdGhlIGN1cnJlbnQgc2NhbGVzJyBkb21haW5zIGJhc2VkIG9uIHRoZSBicnVzaGVkIHdpbmRvd1xuICAgICAgICAgICAgdGhpcy5zY2FsZS54LmRvbWFpbih0aGlzLnNjYWxlLnguZG9tYWluKCkuZmlsdGVyKChkLCBpKT0+e1xuICAgICAgICAgICAgICAgICAgY29uc3QgbG93Qm91bmQgPSBNYXRoLmZsb29yKHNbMF1bMF0vdGhpcy5zY2FsZS54LmJhbmR3aWR0aCgpKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHVwcGVyQm91bmQgPSBNYXRoLmZsb29yKHNbMV1bMF0vdGhpcy5zY2FsZS54LmJhbmR3aWR0aCgpKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpID49IGxvd0JvdW5kICYmIGkgPD11cHBlckJvdW5kO1xuICAgICAgICAgICAgfSkpOyAvLyBUT0RPOiBhZGQgY29tbWVudHNcblxuICAgICAgICAgICAgY29uc3QgbWluID0gTWF0aC5mbG9vcih0aGlzLnNjYWxlLnkuaW52ZXJ0KHNbMV1bMV0pKTtcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IE1hdGguZmxvb3IodGhpcy5zY2FsZS55LmludmVydChzWzBdWzFdKSk7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnkuZG9tYWluKFttaW4sIG1heF0pOyAvLyB0b2RvOiBkZWJ1Z1xuXG4gICAgICAgICAgICBkb20uc2VsZWN0KFwiLmJydXNoXCIpLmNhbGwodGhlQnJ1c2gubW92ZSwgbnVsbCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgICAvLyB6b29tXG4gICAgICAgIGxldCB0ID0gZG9tLnRyYW5zaXRpb24oKS5kdXJhdGlvbig3NTApO1xuICAgICAgICBkb20uc2VsZWN0KFwiLmF4aXMtLXhcIikudHJhbnNpdGlvbih0KS5jYWxsKHRoaXMueEF4aXMpO1xuICAgICAgICBkb20uc2VsZWN0KFwiLmF4aXMtLXlcIikudHJhbnNpdGlvbih0KS5jYWxsKHRoaXMueUF4aXMpO1xuXG4gICAgICAgIHRoaXMuZ3JvdXBzLmZvckVhY2goKGdnLCBpKT0+IHtcbiAgICAgICAgICAgIGxldCBncm91cCA9IGdnLmtleTtcbiAgICAgICAgICAgIGxldCBlbnRyaWVzID0gZ2cudmFsdWVzO1xuXG4gICAgICAgICAgICAvLyByZS1kZWZpbmUgdGhlIHN1YngncyByYW5nZVxuICAgICAgICAgICAgdGhpcy5zY2FsZS5zdWJ4XG4gICAgICAgICAgICAgICAgLnJhbmdlUm91bmQoW3RoaXMuc2NhbGUueChncm91cCksIHRoaXMuc2NhbGUueChncm91cCkgKyB0aGlzLnNjYWxlLnguYmFuZHdpZHRoKCldKTtcblxuICAgICAgICAgICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgwID09IGVudHJ5LnZhbHVlcy5sZW5ndGgpIHJldHVybjsgLy8gbm8gZnVydGhlciByZW5kZXJpbmcgaWYgdGhpcyBncm91cCBoYXMgbm8gZW50cmllc1xuICAgICAgICAgICAgICAgIGNvbnN0IGdJbmRleCA9IHRoaXMuc2NhbGUueC5kb21haW4oKS5pbmRleE9mKGdyb3VwKTtcblxuXG4gICAgICAgICAgICAgICAgLy8gcmUtZGVmaW5lIHRoZSBzY2FsZS56J3MgcmFuZ2VcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnpcbiAgICAgICAgICAgICAgICAgICAgLnJhbmdlKFt0aGlzLnNjYWxlLnN1YngoZW50cnkubGFiZWwpLCB0aGlzLnNjYWxlLnN1YngoZW50cnkubGFiZWwpICsgdGhpcy5zY2FsZS5zdWJ4LmJhbmR3aWR0aCgpXSk7XG5cbiAgICAgICAgICAgICAgICAvLyByZS1yZW5kZXIgdGhlIHZpb2xpblxuICAgICAgICAgICAgICAgIGNvbnN0IGcgPSBkb20uc2VsZWN0KGAjdmlvbGluJHtnZy5pbmRleH0tJHtlbnRyeS5sYWJlbH1gKTtcbiAgICAgICAgICAgICAgICBnLnNlbGVjdChcIi52aW9saW5cIilcbiAgICAgICAgICAgICAgICAgICAgLnRyYW5zaXRpb24odClcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJkXCIsIGFyZWEoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLngwKChkKSA9PiB0aGlzLnNjYWxlLnooZFsxXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAueDEoKGQpID0+IHRoaXMuc2NhbGUueigtZFsxXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAueSgoZCkgPT4gdGhpcy5zY2FsZS55KGRbMF0pKVxuICAgICAgICAgICAgICAgICAgICApO1xuXG5cbiAgICAgICAgICAgICAgICAvLyByZS1yZW5kZXIgdGhlIGJveCBwbG90XG4gICAgICAgICAgICAgICAgLy8gaW50ZXJxdWFydGlsZSByYW5nZVxuICAgICAgICAgICAgICAgIGNvbnN0IHExID0gcXVhbnRpbGUoZW50cnkudmFsdWVzLCAwLjI1KTtcbiAgICAgICAgICAgICAgICBjb25zdCBxMyA9IHF1YW50aWxlKGVudHJ5LnZhbHVlcywgMC43NSk7XG4gICAgICAgICAgICAgICAgY29uc3QgeiA9IDAuMTtcbiAgICAgICAgICAgICAgICBnLnNlbGVjdChcIi52aW9saW4taXJcIilcbiAgICAgICAgICAgICAgICAgICAgLnRyYW5zaXRpb24odClcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIHRoaXMuc2NhbGUueigteikpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKFwieVwiLCB0aGlzLnNjYWxlLnkocTMpKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIE1hdGguYWJzKHRoaXMuc2NhbGUueigteikgLSB0aGlzLnNjYWxlLnooeikpKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBNYXRoLmFicyh0aGlzLnNjYWxlLnkocTMpIC0gdGhpcy5zY2FsZS55KHExKSkpO1xuXG4gICAgICAgICAgICAgICAgLy8gdGhlIG1lZGlhbiBsaW5lXG4gICAgICAgICAgICAgICAgY29uc3QgbWVkID0gbWVkaWFuKGVudHJ5LnZhbHVlcyk7XG4gICAgICAgICAgICAgICAgZy5zZWxlY3QoXCIudmlvbGluLW1lZGlhblwiKVxuICAgICAgICAgICAgICAgICAgICAudHJhbnNpdGlvbih0KVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcIngxXCIsIHRoaXMuc2NhbGUueigteikpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKFwieDJcIiwgdGhpcy5zY2FsZS56KHopKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcInkxXCIsIHRoaXMuc2NhbGUueShtZWQpKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcInkyXCIsIHRoaXMuc2NhbGUueShtZWQpKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVuZGVyIHRoZSB2aW9saW4gYW5kIGJveCBwbG90c1xuICAgICAqIEBwYXJhbSBkb20ge0QzIERPTX1cbiAgICAgKiBAcGFyYW0gZW50cnkge09iamVjdH0gd2l0aCBhdHRyczogdmFsdWVzLCBsYWJlbFxuICAgICAqIEBwYXJhbSBzaG93V2hpc2tlciB7Qm9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9kcmF3VmlvbGluKGRvbSwgZW50cnksIHNob3dXaGlza2VyLCBnSW5kZXgpe1xuXG4gICAgICAgIC8vIGdlbmVyYXRlIHRoZSB2ZXJ0aWNlcyBmb3IgdGhlIHZpb2xpbiBwYXRoIHVzZSBhIGtkZVxuICAgICAgICBsZXQga2RlID0ga2VybmVsRGVuc2l0eUVzdGltYXRvcihcbiAgICAgICAgICAgIGtlcm5lbC5nYXVzc2lhbixcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueS50aWNrcygxMDApLCAvLyB1c2UgdXAgdG8gMTAwIHZlcnRpY2VzIGFsb25nIHRoZSBZIGF4aXMgKHRvIGNyZWF0ZSB0aGUgdmlvbGluIHBhdGgpXG4gICAgICAgICAgICBrZXJuZWxCYW5kd2lkdGgubnJkKGVudHJ5LnZhbHVlcykgLy8gZXN0aW1hdGUgdGhlIGJhbmR3aWR0aCBiYXNlZCBvbiB0aGUgZGF0YVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBlRG9tYWluID0gZXh0ZW50KGVudHJ5LnZhbHVlcyk7IC8vIGdldCB0aGUgbWF4IGFuZCBtaW4gaW4gZW50cnkudmFsdWVzXG4gICAgICAgIGNvbnN0IHZlcnRpY2VzID0ga2RlKGVudHJ5LnZhbHVlcykuZmlsdGVyKChkKT0+ZFswXT5lRG9tYWluWzBdJiZkWzBdPGVEb21haW5bMV0pOyAvLyBmaWx0ZXIgdGhlIHZlcnRpY2VzIHRoYXQgYXJlbid0IGluIHRoZSBlbnRyeS52YWx1ZXNcblxuICAgICAgICAvLyBkZWZpbmUgdGhlIHogc2NhbGUgLS0gdGhlIHZpb2xpbiB3aWR0aFxuICAgICAgICBsZXQgek1heCA9IG1heCh2ZXJ0aWNlcywgKGQpPT5NYXRoLmFicyhkWzFdKSk7IC8vIGZpbmQgdGhlIGFicyh2YWx1ZSkgaW4gZW50cnkudmFsdWVzXG4gICAgICAgIHRoaXMuc2NhbGUuelxuICAgICAgICAgICAgLmRvbWFpbihbLXpNYXgsIHpNYXhdKVxuICAgICAgICAgICAgLnJhbmdlKFt0aGlzLnNjYWxlLnN1YngoZW50cnkubGFiZWwpLCB0aGlzLnNjYWxlLnN1YngoZW50cnkubGFiZWwpICsgdGhpcy5zY2FsZS5zdWJ4LmJhbmR3aWR0aCgpXSk7XG5cbiAgICAgICAgLy8gdmlzdWFsIHJlbmRlcmluZ1xuICAgICAgICBjb25zdCB2aW9saW5HID0gZG9tLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgIC5hdHRyKCdpZCcsIGB2aW9saW4ke2dJbmRleH0tJHtlbnRyeS5sYWJlbH1gKTtcblxuICAgICAgICBsZXQgdmlvbGluID0gYXJlYSgpXG4gICAgICAgICAgICAueDAoKGQpID0+IHRoaXMuc2NhbGUueihkWzFdKSlcbiAgICAgICAgICAgIC54MSgoZCkgPT4gdGhpcy5zY2FsZS56KC1kWzFdKSlcbiAgICAgICAgICAgIC55KChkKSA9PiB0aGlzLnNjYWxlLnkoZFswXSkpO1xuXG4gICAgICAgIGNvbnN0IHZQYXRoID0gdmlvbGluRy5hcHBlbmQoXCJwYXRoXCIpXG4gICAgICAgICAgICAuZGF0dW0odmVydGljZXMpXG4gICAgICAgICAgICAuYXR0cihcImRcIiwgdmlvbGluKVxuICAgICAgICAgICAgLmNsYXNzZWQoXCJ2aW9saW5cIiwgdHJ1ZSlcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgKCk9PntcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkuY29sb3IgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGVudHJ5LmNvbG9yO1xuICAgICAgICAgICAgICAgIC8vIGFsdGVybmF0ZSB0aGUgb2RkIGFuZCBldmVuIGNvbG9ycywgbWF5YmUgd2UgZG9uJ3Qgd2FudCB0aGlzIGZlYXR1cmVcbiAgICAgICAgICAgICAgICBpZihnSW5kZXglMiA9PSAwKSByZXR1cm4gXCIjOTBjMWMxXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiIzk0YThiOFwiO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gYm94cGxvdFxuICAgICAgICBjb25zdCBxMSA9IHF1YW50aWxlKGVudHJ5LnZhbHVlcywgMC4yNSk7XG4gICAgICAgIGNvbnN0IHEzID0gcXVhbnRpbGUoZW50cnkudmFsdWVzLCAwLjc1KTtcbiAgICAgICAgY29uc3QgeiA9IHRoaXMuc2NhbGUuei5kb21haW4oKVsxXS8zO1xuXG4gICAgICAgIGlmKHNob3dXaGlza2VyKXtcbiAgICAgICAgICAgIC8vIHRoZSB1cHBlciBhbmQgbG93ZXIgbGltaXRzIG9mIGVudHJ5LnZhbHVlc1xuICAgICAgICAgICAgY29uc3QgaXFyID0gTWF0aC5hYnMocTMtcTEpO1xuICAgICAgICAgICAgY29uc3QgdXBwZXIgPSBtYXgoZW50cnkudmFsdWVzLmZpbHRlcigoZCk9PmQ8cTMrKGlxcioxLjUpKSk7XG4gICAgICAgICAgICBjb25zdCBsb3dlciA9IG1pbihlbnRyeS52YWx1ZXMuZmlsdGVyKChkKT0+ZD5xMS0oaXFyKjEuNSkpKTtcbiAgICAgICAgICAgIGRvbS5hcHBlbmQoXCJsaW5lXCIpXG4gICAgICAgICAgICAgICAgLmNsYXNzZWQoXCJ3aGlza2VyXCIsIHRydWUpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4MVwiLCB0aGlzLnNjYWxlLnooMCkpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCB0aGlzLnNjYWxlLnooMCkpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5MVwiLCB0aGlzLnNjYWxlLnkodXBwZXIpKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieTJcIiwgdGhpcy5zY2FsZS55KGxvd2VyKSlcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJzdHJva2VcIiwgXCIjZmZmXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaW50ZXJxdWFydGlsZSByYW5nZVxuICAgICAgICB2aW9saW5HLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCB0aGlzLnNjYWxlLnooLXopKVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIHRoaXMuc2NhbGUueShxMykpXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIE1hdGguYWJzKHRoaXMuc2NhbGUueigteiktdGhpcy5zY2FsZS56KHopKSlcbiAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIE1hdGguYWJzKHRoaXMuc2NhbGUueShxMykgLSB0aGlzLnNjYWxlLnkocTEpKSlcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ2aW9saW4taXJcIik7XG5cbiAgICAgICAgLy8gbWVkaWFuXG4gICAgICAgIGNvbnN0IG1lZCA9IG1lZGlhbihlbnRyeS52YWx1ZXMpO1xuICAgICAgICB2aW9saW5HLmFwcGVuZChcImxpbmVcIikgLy8gdGhlIG1lZGlhbiBsaW5lXG4gICAgICAgICAgICAuYXR0cihcIngxXCIsIHRoaXMuc2NhbGUueigteikpXG4gICAgICAgICAgICAuYXR0cihcIngyXCIsIHRoaXMuc2NhbGUueih6KSlcbiAgICAgICAgICAgIC5hdHRyKFwieTFcIiwgdGhpcy5zY2FsZS55KG1lZCkpXG4gICAgICAgICAgICAuYXR0cihcInkyXCIsIHRoaXMuc2NhbGUueShtZWQpKVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInZpb2xpbi1tZWRpYW5cIik7XG5cbiAgICAgICAgLy8gbW91c2UgZXZlbnRzXG4gICAgICAgIHZpb2xpbkcub24oXCJtb3VzZW92ZXJcIiwgKCk9PntcbiAgICAgICAgICAgIHZQYXRoLmNsYXNzZWQoXCJoaWdobGlnaHRlZFwiLCB0cnVlKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGVudHJ5KTtcbiAgICAgICAgICAgIGlmKHRoaXMudG9vbHRpcCA9PT0gdW5kZWZpbmVkKSBjb25zb2xlLndhcm4oXCJHcm91cFZpb2xpbiBXYXJuaW5nOiB0b29sdGlwIG5vdCBkZWZpbmVkXCIpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwLnNob3coXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5Lmdyb3VwICsgXCI8YnIvPlwiICtcbiAgICAgICAgICAgICAgICAgICAgZW50cnkubGFiZWwgKyBcIjxici8+XCIgK1xuICAgICAgICAgICAgICAgICAgICBcIk1lZGlhbjogXCIgKyBtZWQudG9QcmVjaXNpb24oNCkgKyBcIjxici8+XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdmlvbGluRy5vbihcIm1vdXNlb3V0XCIsICgpPT57XG4gICAgICAgICAgICB2UGF0aC5jbGFzc2VkKFwiaGlnaGxpZ2h0ZWRcIiwgZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfc2FuaXR5Q2hlY2soZGF0YSl7XG4gICAgICAgIGNvbnN0IGF0dHIgPSBbXCJncm91cFwiLCBcImxhYmVsXCIsIFwidmFsdWVzXCJdO1xuXG4gICAgICAgIGRhdGEuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgICAgICAgYXR0ci5mb3JFYWNoKChhKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRbYV0gPT09IHVuZGVmaW5lZCkgdGhyb3cgXCJHcm91cGVkVmlvbGluOiBpbnB1dCBkYXRhIGVycm9yLlwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIGlmICgwID09IGQudmFsdWVzLmxlbmd0aCkgdGhyb3cgXCJWaW9saW46IElucHV0IGRhdGEgZXJyb3JcIjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX2FkZEdyb3VwRGl2aWRlcihkb20pe1xuICAgICAgICBjb25zdCBncm91cHMgPSB0aGlzLnNjYWxlLnguZG9tYWluKCk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSBNYXRoLmFicyh0aGlzLnNjYWxlLngodGhpcy5zY2FsZS54LmRvbWFpbigpWzFdKSAtIHRoaXMuc2NhbGUueCh0aGlzLnNjYWxlLnguZG9tYWluKClbMF0pIC0gdGhpcy5zY2FsZS54LmJhbmR3aWR0aCgpKTtcblxuICAgICAgICBjb25zdCBnZXRYID0gKGcsIGkpPT4ge1xuICAgICAgICAgICAgaWYgKGkgIT09IGdyb3Vwcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueChnKSArICt0aGlzLnNjYWxlLnguYmFuZHdpZHRoKCkgKyAocGFkZGluZy8yKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZG9tLnNlbGVjdEFsbChcIi52bGluZVwiKS5kYXRhKGdyb3VwcylcbiAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAuYXBwZW5kKFwibGluZVwiKVxuICAgICAgICAgICAgLmNsYXNzZWQoXCJ2bGluZVwiLCB0cnVlKVxuICAgICAgICAgICAgLmF0dHIoXCJ4MVwiLCBnZXRYKVxuICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCBnZXRYKVxuICAgICAgICAgICAgLmF0dHIoXCJ5MVwiLCB0aGlzLnNjYWxlLnkucmFuZ2UoKVswXSlcbiAgICAgICAgICAgIC5hdHRyKFwieTJcIiwgdGhpcy5zY2FsZS55LnJhbmdlKClbMV0pXG4gICAgICAgICAgICAuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwgKGcsIGkpPT5pIT1ncm91cHMubGVuZ3RoLTE/MTowKVxuICAgICAgICAgICAgLnN0eWxlKFwic3Ryb2tlXCIsIFwicmdiKDg2LDk4LDEwNylcIilcbiAgICAgICAgICAgIC5zdHlsZShcIm9wYWNpdHlcIiwgMC41KVxuXG4gICAgfVxuXG5cbn0iLCIvKipcbiAqIENvcHlyaWdodCDCqSAyMDE1IC0gMjAxOCBUaGUgQnJvYWQgSW5zdGl0dXRlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgKGh0dHBzOi8vZ2l0aHViLmNvbS9icm9hZGluc3RpdHV0ZS9ndGV4LXZpei9ibG9iL21hc3Rlci9MSUNFTlNFLm1kKVxuICovXG4vKlxuVGhpcyBjbGFzcyBkZWZpbmVzIGEgZ2VuZSBtb2RlbCAob3IgaXNvZm9ybSksIHJlbmRlcmluZyB0aGUgZXhvbnMgYW5kIGp1bmN0aW9ucyBvZiBhIGdpdmVuIGdlbmUuIFRoZSBtb2RlbCBpcyByZW5kZXJlZCBiYXNlZCBvblxuZ2Vub21pYyBwb3NpdGlvbnMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN0cmFuZCBhbmQgdHJhbnNjcmlwdGlvbmFsIGRpcmVjdGlvbi5cblxuVE9ETzogc2ltcGxpZnkgaXNvZm9ybSBzdHJ1Y3R1cmUgcmVuZGVyaW5nP1xuICovXG5cbmltcG9ydCB7Y3VydmVDYXJkaW5hbCwgbGluZX0gZnJvbSBcImQzLXNoYXBlXCI7XG5pbXBvcnQge21heCwgc3VtfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7c2NhbGVMaW5lYXJ9IGZyb20gXCJkMy1zY2FsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHZW5lTW9kZWwge1xuICAgIC8qKlxuICAgICAqIGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIGdlbmUge09iamVjdH0gd2l0aCBhdHRyaWJ1dGVzOiBzdHJhbmQsIHRyYW5zY3JpcHRJZCwgZ2VuZVN5bWJvbFxuICAgICAqIEBwYXJhbSBleG9ucyB7TGlzdH0gb2YgZXhvbiBvYmplY3RzIHdpdGggYXR0cmlidXRlczogY2hyb20sIGNocm9tU3RhcnQsIGNocm9tRW5kLCBsZW5ndGgsIGV4b25OdW1iZXIsIGV4b25JZFxuICAgICAqIEBwYXJhbSBleG9uc0N1cmF0ZWQge0xpc3R9IG9mIGV4b24gb2JqZWN0cyBpbiB0aGUgZmluYWwgZ2VuZSBtb2RlbC4gVGhpcyBpcyBwcmV0dHkgc3BlY2lmaWMgdG8gR1RFeC4gSWYgdGhpcyBsaXN0IGlzbid0IGF2YWlsYWJsZSBmb3IgeW91ciBkYXRhLCB0aGVuIGp1c3QgcGFzcyBpbiB0aGUgc2FtZSBleG9uIGxpc3QgYWdhaW4uXG4gICAgICogQHBhcmFtIGp1bmN0aW9ucyB7TGlzdH0gb2YganVuY3Rpb24gb2JqZWN0cyB3aXRoIGF0dHJpYnV0ZXM6IGNocm9tLCBjaHJvbVN0YXJ0LCBjaHJvbUVuZCwganVuY3Rpb25JZFxuICAgICAqIEBwYXJhbSBpc0lzb2Zvcm0ge0Jvb2xlYW59XG4gICAgICogQHBhcmFtIG1heEludHJvbkxlbmd0aCB7SW50ZWdlcn0gdGhlIG1heGltdW0gbGVuZ3RoIG9mIGludHJvbi4gSW50cm9uIHJlbmRlcmluZyBpcyBjYXBwZWQgYXQgdGhpcyB2YWx1ZVxuICAgICAqIEBwYXJhbSBtaW5FeG9uV2lkdGgge0ludGVnZXJ9IHRoZSBtaW5pbXVtIHdpZHRoIChwaXhlbHMpIG9mIHRoZSBleG9uIHJlY3RhbmdsZS5cbiAgICAgKi9cblxuICAgIC8qKiBOT1RFOiB0aGUgZXhvbk51bWJlciBpbiBleG9ucyAmIGV4b25zQ3VyYXRlZCBkb24ndCByZWZlciB0byB0aGUgc2FtZSBleG9ucyAoYXQgbGVhc3QgdGhpcyBpcyB0aGUgY2FzZSBpbiBHVEV4KVxuICAgICAqICBUbyBlbnN1cmUgY29ycmVjdCBleG9uIG1hcHBpbmcgb2YgdGhlIGN1cmF0ZWQgZ2VuZSBtb2RlbCB0byB0aGUgb3JpZ2luYWwgbW9kZWwsIGhlcmUgd2UgdXNlIGdlbm9taWMgcG9zaXRpb24uXG4gICAgICovXG4gICAgY29uc3RydWN0b3IgKGdlbmUsIGV4b25zLCBleG9uc0N1cmF0ZWQsIGp1bmN0aW9ucywgaXNJc29mb3JtPWZhbHNlLCBtYXhJbnRyb25MZW5ndGg9MTAwMCwgbWluRXhvbldpZHRoPTApe1xuICAgICAgICB0aGlzLmdlbmUgPSBnZW5lO1xuICAgICAgICB0aGlzLmV4b25zID0gZXhvbnM7XG4gICAgICAgIGlmICh0aGlzLmdlbmUuc3RyYW5kID09IFwiK1wiKSB0aGlzLmV4b25zLnNvcnQoKGEsIGIpPT57cmV0dXJuIE51bWJlcihhLmV4b25OdW1iZXIpLU51bWJlcihiLmV4b25OdW1iZXIpfSk7XG4gICAgICAgIGVsc2UgdGhpcy5leG9ucy5zb3J0KChhLCBiKT0+e3JldHVybiBOdW1iZXIoYi5leG9uTnVtYmVyKS1OdW1iZXIoYS5leG9uTnVtYmVyKX0pO1xuICAgICAgICB0aGlzLmV4b25zQ3VyYXRlZCA9IGV4b25zQ3VyYXRlZC5zb3J0KChhLCBiKT0+e3JldHVybiBOdW1iZXIoYS5leG9uTnVtYmVyKS1OdW1iZXIoYi5leG9uTnVtYmVyKX0pO1xuICAgICAgICB0aGlzLmp1bmN0aW9ucyA9IGp1bmN0aW9ucy5zb3J0KChhLGIpID0+IHtcbiAgICAgICAgICAgIGlmIChhLmp1bmN0aW9uSWQgPCBiLmp1bmN0aW9uSWQpIHJldHVybiAtMTtcbiAgICAgICAgICAgIGlmIChhLmp1bmN0aW9uSWQgPiBiLmp1bmN0aW9uSWQpIHJldHVybiAxO1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0pOyAvLyBzb3J0ZWQgYnkganVuY3Rpb24gSURcbiAgICAgICAgdGhpcy5pc0lzb2Zvcm0gPSBpc0lzb2Zvcm07XG4gICAgICAgIHRoaXMubWF4SW50cm9uTGVuZ3RoID0gbWF4SW50cm9uTGVuZ3RoO1xuXG4gICAgICAgIC8vIGhhcmQtY29kZWQgZm9yIG5vd1xuICAgICAgICB0aGlzLmludHJvbkxlbmd0aCA9IDA7IC8vIGZpeGVkIGZha2UgaW50cm9uIGxlbmd0aCBpbiBiYXNlIHBhaXJzLCBvYnNvbGV0ZT9cbiAgICAgICAgdGhpcy5taW5FeG9uV2lkdGggPSBtaW5FeG9uV2lkdGg7IC8vIG1pbmltdW0gZXhvbiB3aWR0aCBpbiBwaXhlbHNcbiAgICAgICAgdGhpcy5udWxsQ29sb3IgPSAnI0RERERERCc7XG4gICAgfVxuXG4gICAgY2hhbmdlVGV4dGxhYmVsKGRvbSwgbGFiZWwpe1xuICAgICAgICBkb20uc2VsZWN0QWxsKFwiI21vZGVsSW5mb1wiKS50ZXh0KGxhYmVsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBkb20ge09iamVjdH0gb2YgRDNcbiAgICAgKiBAcGFyYW0gamRhdGEge0xpc3R9IG9mIGp1bmN0aW9uIGV4cHJlc3Npb24gb2JqZWN0c1xuICAgICAqIEBwYXJhbSBlZGF0YSB7TGlzdH0gb2YgZXhvbiBleHByZXNzaW9uIG9iamVjdHNcbiAgICAgKiBAcGFyYW0ganNjYWxlIHtEMyBzY2FsZX0gb2YgY29sb3JzIG9mIGp1bmN0aW9uIGRhdGFcbiAgICAgKiBAcGFyYW0gZXNjYWxlIHtEMyBzY2FsZX0gb2YgY29sb3JzIG9mIGV4b24gZGF0YVxuICAgICAqL1xuICAgIGFkZERhdGEoZG9tLCBqZGF0YSwgZWRhdGEsIGpzY2FsZSwgZXNjYWxlKXtcbiAgICAgICAgaWYgKGpkYXRhICE9PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgZG9tLnNlbGVjdEFsbChcIi5qdW5jXCIpLnN0eWxlKFwiZmlsbFwiLCAoZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBqZGF0YS5maWx0ZXIoKHopPT56Lmp1bmN0aW9uSWQ9PWQuanVuY3Rpb25JZClbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgamNvbG9yID0gdi52YWx1ZT09MD90aGlzLm51bGxDb2xvcjpqc2NhbGUodi52YWx1ZSk7XG4gICAgICAgICAgICAgICAgZG9tLnNlbGVjdEFsbChcIi5qdW5jLWN1cnZlXCIpLmZpbHRlcigoYC5qdW5jJHtkLmp1bmN0aW9uSWR9YCkpLnN0eWxlKFwic3Ryb2tlXCIsIGpjb2xvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGpjb2xvcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZG9tLnNlbGVjdEFsbChcIi5leG9uLWN1cmF0ZWRcIikuc3R5bGUoXCJmaWxsXCIsIChkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ID0gZWRhdGEuZmlsdGVyKCh6KT0+ei5leG9uSWQ9PWQuZXhvbklkKVswXTtcbiAgICAgICAgICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHRocm93IGAke2QuZXhvbklkfSBoYXMgbm8gZGF0YWA7XG4gICAgICAgICAgICBjb25zdCBlY29sb3IgPSB2LnZhbHVlID09IDA/dGhpcy5udWxsQ29sb3I6ZXNjYWxlKHYudmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGVjb2xvcjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVuZGVyIHRoZSBTVkcgb2YgdGhlIGdlbmUgbW9kZWxcbiAgICAgKiBAcGFyYW0gZG9tOiBhbiBTVkcgZG9tIG9iamVjdFxuICAgICAqIEBwYXJhbSBjb25maWdcblxuICAgICAqL1xuICAgIHJlbmRlcihkb20sIGNvbmZpZykge1xuICAgICAgICB0aGlzLnNldFhzY2FsZShjb25maWcudyk7XG5cbiAgICAgICAgLyogTm90ZTogZXhvbi54LCBleG9uLncgYXJlIGluIHBpeGVscyBmb3IgdmlzdWFsIHJlbmRlcmluZyAqL1xuICAgICAgICAvKiBOb3RlOiBleG9uLmxlbmd0aCBpcyBpbiBiYXNlIHBhaXJzICovXG4gICAgICAgIC8vIGNhbGN1bGF0aW5nIHggYW5kIHcgZm9yIGVhY2ggZXhvblxuICAgICAgICBjb25zdCBleG9uWSA9IGNvbmZpZy5oLzI7IC8vIFRPRE86IHJlbW92ZSBoYXJkLWNvZGVkIHZhbHVlc1xuICAgICAgICB0aGlzLmV4b25zLmZvckVhY2goKGQsIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChpID09IDApIHtcbiAgICAgICAgICAgICAgICBkLnggPSAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkLnggPSB0aGlzLmV4b25zW2ktMV0ueCArIHRoaXMuZXhvbnNbaS0xXS53ICsgdGhpcy54U2NhbGUoZC5pbnRyb25MZW5ndGg+dGhpcy5tYXhJbnRyb25MZW5ndGg/dGhpcy5tYXhJbnRyb25MZW5ndGg6ZC5pbnRyb25MZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZC53ID0gdGhpcy54U2NhbGUoZC5sZW5ndGgpPHRoaXMubWluRXhvbldpZHRoP3RoaXMubWluRXhvbldpZHRoOnRoaXMueFNjYWxlKGQubGVuZ3RoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gY2FsY3VsYWluZyB4IGFuZCB3IG9mIHRoZSByZWN0YW5nbGUgZm9yIGVhY2ggY3VyYXRlZCBleG9uIG9uIHRoZSBmaW5hbCBnZW5lIG1vZGVsXG4gICAgICAgIHRoaXMuZXhvbnNDdXJhdGVkLmZvckVhY2goKGQsIGkpID0+IHtcbiAgICAgICAgICAgIC8vIGZpcnN0LCBtYXAgZWFjaCBmaW5hbCBjdXJhdGVkIGV4b24gdG8gdGhlIG9yaWdpbmFsIGZ1bGwgZ2VuZSBtb2RlbC0tZmluZCB0aGUgb3JpZ2luYWwgZXhvblxuICAgICAgICAgICAgLy8gZmluZCB0aGUgb3JpZ2luYWwgZXhvblxuICAgICAgICAgICAgZC5vcmlFeG9uID0gdGhpcy5fZmluZEV4b24oZC5jaHJvbVN0YXJ0KXx8dGhpcy5fZmluZEV4b24oZC5jaHJvbUVuZCk7XG4gICAgICAgICAgICBpZiAoZC5vcmlFeG9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBub3QgZm91bmRcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYCR7dGhpcy5nZW5lLnRyYW5zY3JpcHRJZH0tJHtkLmV4b25JZH0gY2FuJ3QgbWFwIHRvIGZ1bGwgZ2VuZSBtb2RlbGApO1xuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaWdub3JlIHVubWFwcGFibGUgZXhvbnMsIHRoaXMgaGFwcGVucyBhdCB0aW1lcyAod2h5PylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2FsY3VsYXRlIGZvciB4XG4gICAgICAgICAgICBpZiAoTnVtYmVyKGQub3JpRXhvbi5jaHJvbVN0YXJ0KSA9PSBOdW1iZXIoZC5jaHJvbVN0YXJ0KSkgZC54ID0gZC5vcmlFeG9uLng7XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgZXhvbiBkb2Vzbid0IHN0YXJ0IGZyb20gdGhlIG9yaUV4b24gc3RhcnQgcG9zXG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdCA9IE51bWJlcihkLmNocm9tU3RhcnQpIC0gTnVtYmVyKGQub3JpRXhvbi5jaHJvbVN0YXJ0KSArIDE7XG4gICAgICAgICAgICAgICAgZC54ID0gZC5vcmlFeG9uLnggKyB0aGlzLnhTY2FsZShkaXN0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2FsY3VsYXRlIGZvciB3XG4gICAgICAgICAgICBpZiAoZC5sZW5ndGggPT09IHVuZGVmaW5lZCkgZC5sZW5ndGggPSBOdW1iZXIoZC5jaHJvbUVuZCkgLSBOdW1iZXIoZC5jaHJvbVN0YXJ0KSArIDE7XG4gICAgICAgICAgICBkLncgPSB0aGlzLnhTY2FsZShkLmxlbmd0aCk8dGhpcy5taW5FeG9uV2lkdGg/dGhpcy5taW5FeG9uV2lkdGg6dGhpcy54U2NhbGUoZC5sZW5ndGgpO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmKCF0aGlzLmlzSXNvZm9ybSl7XG4gICAgICAgICAgICAvLyBOT1RFOiBkbyBub3QgYWx0ZXIgdGhlIHJlbmRlcmluZyBvcmRlciBvZiB2aXN1YWwgY29tcG9uZW50cy5cbiAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYSBnZW5lIG1vZGVsLCBub3QgYW4gaXNvZm9ybVxuICAgICAgICAgICAgLy8gY2FsY3VsYXRpbmcgcG9zaXRpb25zIGZvciBlYWNoIGp1bmN0aW9uXG4gICAgICAgICAgICB0aGlzLmp1bmN0aW9ucyA9IHRoaXMuanVuY3Rpb25zLmZpbHRlcigoZCk9PntcbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBmaWx0ZXIgdW5tYXBwZWQganVuY3Rpb25zXG4gICAgICAgICAgICAgICAgZC5zdGFydEV4b24gPSB0aGlzLl9maW5kRXhvbihkLmNocm9tU3RhcnQpO1xuICAgICAgICAgICAgICAgIGQuZW5kRXhvbiA9IHRoaXMuX2ZpbmRFeG9uKGQuY2hyb21FbmQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkLnN0YXJ0RXhvbiAhPT0gdW5kZWZpbmVkICYmIGQuZW5kRXhvbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuanVuY3Rpb25zLnNvcnQoKGEsYik9PntcbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBzb3J0IGJ5IGNocm9tU3RhcnRcbiAgICAgICAgICAgICAgICBpZiAoK2EuY2hyb21TdGFydCA8ICtiLmNocm9tU3RhcnQpIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICBpZiAoK2EuY2hyb21TdGFydCA+ICtiLmNocm9tU3RhcnQpIHJldHVybiAxO1xuXG4gICAgICAgICAgICAgICAgLy8gdGhlbiBzb3J0IGJ5IGNocm9tRW5kOlxuICAgICAgICAgICAgICAgIGlmICgrYS5jaHJvbUVuZCA8ICtiLmNocm9tRW5kKSByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgaWYgKCthLmNocm9tRW5kID4gK2IuY2hyb21FbmQpIHJldHVybiAxO1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmp1bmN0aW9ucy5mb3JFYWNoKChkLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZC5zdGFydEV4b24gPSB0aGlzLl9maW5kRXhvbihkLmNocm9tU3RhcnQpO1xuICAgICAgICAgICAgICAgIC8vIGQuZW5kRXhvbiA9IHRoaXMuX2ZpbmRFeG9uKGQuY2hyb21FbmQpO1xuICAgICAgICAgICAgICAgIGQuZGlzcGxheU5hbWUgPSBgSnVuY3Rpb24gJHtpKzF9YDtcblxuXG4gICAgICAgICAgICAgICAgLy8gZC5kaXNwbGF5TmFtZSA9IGBFeG9uICR7ZC5zdGFydEV4b24uZXhvbk51bWJlcn0gLSAke2QuZW5kRXhvbi5leG9uTnVtYmVyfWA7XG4gICAgICAgICAgICAgICAgLy8gaWYgKGQuc3RhcnRFeG9uLmV4b25OdW1iZXIgPT0gZC5lbmRFeG9uLmV4b25OdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgY29uc29sZS53YXJuKGQuanVuY3Rpb25JZCArIFwiIGlzIGluIEV4b246IFwiICtkLnN0YXJ0RXhvbi5jaHJvbVN0YXJ0ICsgXCIgLSBcIiArIGQuc3RhcnRFeG9uLmNocm9tRW5kICk7XG4gICAgICAgICAgICAgICAgLy8gfSAvLyB3aGF0IGlzIGhhcHBlbmluZ1xuXG4gICAgICAgICAgICAgICAgLy8gZC5maWx0ZXJlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2FsY3VsYXRlIGZvciBwb3NpdGlvbnNcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0ID0gTnVtYmVyKGQuY2hyb21TdGFydCkgLSBOdW1iZXIoZC5zdGFydEV4b24uY2hyb21TdGFydCkgKyAxO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3QyID0gTnVtYmVyKGQuY2hyb21FbmQpIC0gTnVtYmVyKGQuZW5kRXhvbi5jaHJvbVN0YXJ0KSArIDE7XG5cbiAgICAgICAgICAgICAgICBkLnN0YXJ0WCA9IGQuc3RhcnRFeG9uLnggKyB0aGlzLnhTY2FsZShkaXN0KTtcbiAgICAgICAgICAgICAgICBkLmVuZFggPSBkLmVuZEV4b24ueCArIHRoaXMueFNjYWxlKGRpc3QyKTtcbiAgICAgICAgICAgICAgICBkLmN4ID0gZC5zdGFydFggKyAoZC5lbmRYIC0gZC5zdGFydFggKyAxKS8yOyAvLyBqdW5jdGlvbiBpcyByZW5kZXJlZCBhdCB0aGUgbWlkcG9pbnQgYmV0d2VlbiBzdGFydFggYW5kIGVuZFhcbiAgICAgICAgICAgICAgICBkLmN5ID0gZXhvblkgLSAxNSAqICggTWF0aC5hYnMoTnVtYmVyKGQuZW5kRXhvbi5leG9uTnVtYmVyKSAtIE51bWJlcihkLnN0YXJ0RXhvbi5leG9uTnVtYmVyKSkgKyAwLjUgKTtcbiAgICAgICAgICAgICAgICBpZiAoZC5jeSA8IDApIGQuY3kgPSAwO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gaGFuZGxpbmcgZWRnZSBjYXNlOiBvdmVybGFwcGluZyBqdW5jdGlvbnMsIGFkZCBqaXR0ZXJcbiAgICAgICAgICAgIC8vIGEucmVkdWNlKChyLGspPT57cltrXT0xK3Jba118fDE7cmV0dXJuIHJ9LHt9KVxuICAgICAgICAgICAgY29uc3QgY291bnRzID0gdGhpcy5qdW5jdGlvbnMucmVkdWNlKChyLGQpPT57cltkLmRpc3BsYXlOYW1lXT0xK3JbZC5kaXNwbGF5TmFtZV18fDE7cmV0dXJuIHJ9LHt9KTtcbiAgICAgICAgICAgIHRoaXMuanVuY3Rpb25zLmZvckVhY2goKGQpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBqaXR0ZXJcbiAgICAgICAgICAgICAgICBpZihjb3VudHNbZC5kaXNwbGF5TmFtZV0gPiAxKXsgLy8gb3ZlcmxhcHBpbmcganVuY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIC8vIGQuY3ggKz0gTWF0aC5yYW5kb20oKSoyMDtcbiAgICAgICAgICAgICAgICAgICAgZC5jeSAtPSBNYXRoLnJhbmRvbSgpKjE1O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvKioqKiogcmVuZGVyIGp1bmN0aW9ucyAqL1xuICAgICAgICAgICAgY29uc3QgY3VydmUgPSBsaW5lKClcbiAgICAgICAgICAgICAgICAueCgoZCkgPT4gZC54KVxuICAgICAgICAgICAgICAgIC55KChkKSA9PiBkLnkpXG4gICAgICAgICAgICAgICAgLmN1cnZlKGN1cnZlQ2FyZGluYWwpO1xuXG4gICAgICAgICAgICB0aGlzLmp1bmN0aW9ucy5mb3JFYWNoKChkLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb20uYXBwZW5kKFwicGF0aFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmRhdHVtKFt7eDpkLnN0YXJ0WCwgeTpleG9uWX0sIHt4OmQuY3gsIHk6ZC5jeX0sIHt4OmQuZW5kWCwgeTpleG9uWX1dKSAvLyB0aGUgaW5wdXQgcG9pbnRzIHRvIGRyYXcgdGhlIGN1cnZlXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIGBqdW5jLWN1cnZlIGp1bmMke2QuanVuY3Rpb25JZH1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJkXCIsIGN1cnZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN0eWxlKFwic3Ryb2tlXCIsIFwiIzkyYmNjOVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgY29uc3QganVuY0RvdHMgPSBkb20uc2VsZWN0QWxsKFwiLmp1bmNcIilcbiAgICAgICAgICAgICAgICAuZGF0YSh0aGlzLmp1bmN0aW9ucyk7XG5cbiAgICAgICAgICAgIC8vIHVwZGF0aW5nIGVsZW1lbnRzXG4gICAgICAgICAgICBqdW5jRG90cy5hdHRyKFwiY3hcIiwgKGQpID0+IGQuY3gpO1xuICAgICAgICAgICAganVuY0RvdHMuYXR0cihcImN5XCIsIChkKSA9PiBkLmN5KTsgLy8gVE9ETzogcmVtb3ZlIGhhcmQtY29kZWQgdmFsdWVzXG5cbiAgICAgICAgICAgIC8vIGVudGVyaW5nIG5ldyBlbGVtZW50c1xuICAgICAgICAgICAganVuY0RvdHMuZW50ZXIoKS5hcHBlbmQoXCJjaXJjbGVcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIChkKSA9PiBganVuYyBqdW5jJHtkLmp1bmN0aW9uSWR9YClcbiAgICAgICAgICAgICAgICAuYXR0cihcImN4XCIsIChkKSA9PiBkLmN4KVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY3lcIiwgKGQpID0+IGQuY3kpXG4gICAgICAgICAgICAgICAgLm1lcmdlKGp1bmNEb3RzKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiclwiLCA0KVxuICAgICAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgXCJyZ2IoODYsIDk4LCAxMDcpXCIpO1xuXG4gICAgICAgICAgICAvKioqKiogcmVuZGVyaW5nIGZ1bGwgZ2VuZSBtb2RlbCBleG9ucyAqL1xuICAgICAgICAgICAgY29uc3QgZXhvblJlY3RzID0gZG9tLnNlbGVjdEFsbChcIi5leG9uXCIpXG4gICAgICAgICAgICAuZGF0YSh0aGlzLmV4b25zKTtcblxuICAgICAgICAgICAgLy8gdXBkYXRpbmcgZWxlbWVudHNcbiAgICAgICAgICAgIGV4b25SZWN0cy5hdHRyKFwieFwiLCAoZCkgPT4gZC54KTtcbiAgICAgICAgICAgIGV4b25SZWN0cy5hdHRyKFwieVwiLCBleG9uWSk7XG5cbiAgICAgICAgICAgIC8vIGVudGVyaW5nIG5ldyBlbGVtZW50c1xuICAgICAgICAgICAgZXhvblJlY3RzLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgKGQpPT5gZXhvbiBleG9uJHtkLmV4b25OdW1iZXJ9YClcbiAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgZXhvblkpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJyeFwiLCAyKVxuICAgICAgICAgICAgICAgIC5hdHRyKCdyeScsIDIpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCAoZCkgPT4gZC53KVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIDE1KSAvLyBUT0RPOiByZW1vdmUgaGFyZC1jb2RlZCB2YWx1ZXNcbiAgICAgICAgICAgICAgICAuYXR0cihcInhcIiwgKGQpID0+IGQueClcbiAgICAgICAgICAgICAgICAubWVyZ2UoZXhvblJlY3RzKVxuICAgICAgICAgICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIik7XG5cbiAgICAgICAgICAgIC8vIG1vZGVsIGluZm8gdGV4dCBsYWJlbFxuICAgICAgICAgICAgZG9tLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcImlkXCIsIFwibW9kZWxJbmZvXCIpIC8vIFRPRE86IG5vIGhhcmQtY29kZWQgdmFsdWVcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcImVuZFwiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieFwiLCB0aGlzLnhTY2FsZSgwKSlcbiAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgZXhvblktMTApXG4gICAgICAgICAgICAgICAgLnN0eWxlKFwiZm9udC1zaXplXCIsIDEyKVxuICAgICAgICAgICAgICAgIC50ZXh0KFwiR2VuZSBNb2RlbFwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhbiBpc29mb3JtLCByZW5kZXIgdGhlIGludHJvbiBsaW5lXG4gICAgICAgICAgICBjb25zdCBpbnRyb25MaW5lID0gZG9tLmFwcGVuZChcImxpbmVcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcIngxXCIsIHRoaXMuZXhvbnNDdXJhdGVkWzBdLngpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCB0aGlzLmV4b25zQ3VyYXRlZFt0aGlzLmV4b25zQ3VyYXRlZC5sZW5ndGgtMV0ueClcbiAgICAgICAgICAgICAgICAuYXR0cihcInkxXCIsIGV4b25ZICsgKDE1LzIpKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieTJcIiwgZXhvblkgKyAoMTUvMikpXG4gICAgICAgICAgICAgICAgLmNsYXNzZWQoXCJpbnRyb25cIiwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvKioqKiogcmVuZGVyaW5nIGN1cmF0ZWQgZXhvbnMgb24gdGhlIGZpbmFsIGdlbmUgbW9kZWwgb3IgaXNvZm9ybSBleG9ucyAqL1xuICAgICAgICBjb25zdCBleG9uUmVjdHMyID0gZG9tLnNlbGVjdEFsbChcIi5leG9uLWN1cmF0ZWRcIilcbiAgICAgICAgICAgIC5kYXRhKHRoaXMuZXhvbnNDdXJhdGVkKTtcblxuICAgICAgICAvLyB1cGRhdGluZyBlbGVtZW50c1xuICAgICAgICBleG9uUmVjdHMyLmF0dHIoXCJ4XCIsIChkKSA9PiBkLngpO1xuICAgICAgICBleG9uUmVjdHMyLmF0dHIoXCJ5XCIsIGV4b25ZKTtcblxuICAgICAgICAvLyBlbnRlcmluZyBuZXcgZWxlbWVudHNcbiAgICAgICAgZXhvblJlY3RzMi5lbnRlcigpLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgKGQpPT50aGlzLmlzSXNvZm9ybT8nZXhvbi1jdXJhdGVkJzpgZXhvbi1jdXJhdGVkIGV4b24tY3VyYXRlZCR7ZC5leG9uTnVtYmVyfWApXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgZXhvblkpXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIChkKSA9PiBkLncpXG4gICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCAxNSkgLy8gVE9ETzogcmVtb3ZlIGhhcmQtY29kZWQgdmFsdWVzXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgKGQpID0+IGQueClcbiAgICAgICAgICAgIC5tZXJnZShleG9uUmVjdHMyKVxuICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBcIiNlZWVcIilcbiAgICAgICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIik7XG5cblxuICAgICAgICAvKioqKiogcmVuZGVyaW5nIHRleHQgbGFiZWxzICovXG4gICAgICAgIGlmIChjb25maWcubGFiZWxPbiA9PSAnbGVmdCcgfHwgY29uZmlnLmxhYmVsT24gPT0gJ2JvdGgnKXtcbiAgICAgICAgICAgIGRvbS5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuYXR0cihcImlkXCIsIFwibW9kZWxMYWJlbFwiKSAvLyBUT0RPOiBubyBoYXJkLWNvZGVkIHZhbHVlXG4gICAgICAgICAgICAuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcImVuZFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIHRoaXMueFNjYWxlLnJhbmdlKClbMF0gLSA1KVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGV4b25ZICsgNy41KVxuICAgICAgICAgICAgLnN0eWxlKFwiZm9udC1zaXplXCIsIFwiOXB4XCIpXG4gICAgICAgICAgICAudGV4dCh0aGlzLmdlbmUudHJhbnNjcmlwdElkPT09dW5kZWZpbmVkP2Ake3RoaXMuZ2VuZS5nZW5lU3ltYm9sfWA6dGhpcy5nZW5lLnRyYW5zY3JpcHRJZCk7XG5cblxuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcubGFiZWxPbiA9PSAncmlnaHQnIHx8IGNvbmZpZy5sYWJlbE9uID09ICdib3RoJyl7XG4gICAgICAgICAgICBkb20uYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJpZFwiLCBcIm1vZGVsTGFiZWxSaWdodFwiKSAvLyBUT0RPOiBubyBoYXJkLWNvZGVkIHZhbHVlXG4gICAgICAgICAgICAuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcInN0YXJ0XCIpXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgdGhpcy54U2NhbGUucmFuZ2UoKVsxXSArIDUwKVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGV4b25ZICsgNy41KVxuICAgICAgICAgICAgLnN0eWxlKFwiZm9udC1zaXplXCIsIFwiOXB4XCIpXG4gICAgICAgICAgICAudGV4dCh0aGlzLmdlbmUudHJhbnNjcmlwdElkPT09dW5kZWZpbmVkP2Ake3RoaXMuZ2VuZS5nZW5lU3ltYm9sfWA6dGhpcy5nZW5lLnRyYW5zY3JpcHRJZCk7XG5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFhzY2FsZSh3KXtcbiAgICAgICAgLy8gY29uY2VwdCBleHBsYWluZWQ6XG4gICAgICAgIC8vIGFzc3VtaW5nIHRoZSBjYW52YXMgd2lkdGggaXMgZml4ZWRcbiAgICAgICAgLy8gdGhlIHRhc2sgaXMgaG93IHRvIHJlbmRlciBhbGwgZXhvbnMgKyBmaXhlZC13aWR0aCBpbnRyb25zIHdpdGhpbiB0aGUgY2FudmFzXG4gICAgICAgIC8vIGZpcnN0IGZpbmQgdGhlIGxhcmdlc3QgZXhvbixcbiAgICAgICAgLy8gdGhlbiBzZXQgdGhlIHggc2NhbGUgb2YgdGhlIGNhbnZhcyB0byBhY2NvbW1vZGF0ZSBtYXgoZXhvbiBsZW5ndGgpKmV4b24gY291bnRzLFxuICAgICAgICAvLyB0aGlzIGVuc3VyZXMgdGhhdCB0aGVyZSdzIGFsd2F5cyBzcGFjZSBmb3IgcmVuZGVyaW5nIGludHJvbnNcbiAgICAgICAgLy8gdGhlIGZpeGVkIGludHJvbiB3aWR0aCBpcyBjYWxjdWxhdGVkIGFzIHN1Y2g6XG4gICAgICAgIC8vICgobWF4KGV4b24gbGVuZ3RoKSAqIGV4b24gY291bnRzKSAtIHRvdGFsIGV4b24gbGVuZ3RoKS8oZXhvbiBjb3VudHMgLSAxKVxuXG4gICAgICAgIHRoaXMuZXhvbnMuc29ydCgoYSxiKT0+e1xuICAgICAgICAgICAgaWYgKE51bWJlcihhLmNocm9tU3RhcnQpIDwgTnVtYmVyKGIuY2hyb21TdGFydCkpIHJldHVybiAtMTtcbiAgICAgICAgICAgIGlmIChOdW1iZXIoYS5jaHJvbVN0YXJ0KSA+IE51bWJlcihiLmNocm9tU3RhcnQpKSByZXR1cm4gMTtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgdGhpcy5leG9ucy5mb3JFYWNoKChkLCBpKT0+e1xuICAgICAgICAgICAgZC5sZW5ndGggPSBOdW1iZXIoZC5jaHJvbUVuZCkgLSBOdW1iZXIoZC5jaHJvbVN0YXJ0KSArIDE7XG4gICAgICAgICAgICBpZiAoaSA9PSAwKXtcbiAgICAgICAgICAgICAgICAvLyB0aGUgZmlyc3QgZXhvblxuICAgICAgICAgICAgICAgIHN1bSArPSBkLmxlbmd0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IG5iID0gdGhpcy5leG9uc1tpLTFdOyAvLyB0aGUgdXBzdHJlYW0gbmVpZ2hib3IgZXhvblxuICAgICAgICAgICAgICAgIGQuaW50cm9uTGVuZ3RoID0gTnVtYmVyKGQuY2hyb21TdGFydCkgLSBOdW1iZXIobmIuY2hyb21FbmQpICsgMTtcbiAgICAgICAgICAgICAgICBzdW0gKz0gZC5sZW5ndGggKyAoZC5pbnRyb25MZW5ndGg+dGhpcy5tYXhJbnRyb25MZW5ndGg/dGhpcy5tYXhJbnRyb25MZW5ndGg6ZC5pbnRyb25MZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBkb21haW4gPSBbMCwgc3VtXTtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBbMCwgd107XG4gICAgICAgIHRoaXMueFNjYWxlID0gc2NhbGVMaW5lYXIoKVxuICAgICAgICAgICAgLmRvbWFpbihkb21haW4pXG4gICAgICAgICAgICAucmFuZ2UocmFuZ2UpO1xuICAgIH1cblxuICAgIHNldFhzY2FsZUZpeEludHJvbih3KXtcbiAgICAgICAgLy8gY29uY2VwdCBleHBsYWluZWQ6XG4gICAgICAgIC8vIGFzc3VtaW5nIHRoZSBjYW52YXMgd2lkdGggaXMgZml4ZWRcbiAgICAgICAgLy8gdGhlIHRhc2sgaXMgaG93IHRvIHJlbmRlciBhbGwgZXhvbnMgKyBmaXhlZC13aWR0aCBpbnRyb25zIHdpdGhpbiB0aGUgY2FudmFzXG4gICAgICAgIC8vIGZpcnN0IGZpbmQgdGhlIGxhcmdlc3QgZXhvbixcbiAgICAgICAgLy8gdGhlbiBzZXQgdGhlIHggc2NhbGUgb2YgdGhlIGNhbnZhcyB0byBhY2NvbW1vZGF0ZSBtYXgoZXhvbiBsZW5ndGgpKmV4b24gY291bnRzLFxuICAgICAgICAvLyB0aGlzIGVuc3VyZXMgdGhhdCB0aGVyZSdzIGFsd2F5cyBzcGFjZSBmb3IgcmVuZGVyaW5nIGludHJvbnNcbiAgICAgICAgLy8gdGhlIGZpeGVkIGludHJvbiB3aWR0aCBpcyBjYWxjdWxhdGVkIGFzIHN1Y2g6XG4gICAgICAgIC8vICgobWF4KGV4b24gbGVuZ3RoKSAqIGV4b24gY291bnRzKSAtIHRvdGFsIGV4b24gbGVuZ3RoKS8oZXhvbiBjb3VudHMgLSAxKVxuXG4gICAgICAgIHRoaXMuZXhvbnMuZm9yRWFjaCgoZCkgPT4ge2QubGVuZ3RoID0gTnVtYmVyKGQuY2hyb21FbmQpIC0gTnVtYmVyKGQuY2hyb21TdGFydCkgKyAxfSk7XG4gICAgICAgIGNvbnN0IG1heEV4b25MZW5ndGggPSBtYXgodGhpcy5leG9ucywgKGQpPT5kLmxlbmd0aCk7XG5cbiAgICAgICAgY29uc3QgZG9tYWluID0gWzAsIG1heEV4b25MZW5ndGgqdGhpcy5leG9ucy5sZW5ndGhdO1xuICAgICAgICBjb25zdCByYW5nZSA9IFswLCB3XTtcbiAgICAgICAgdGhpcy54U2NhbGUgPSBzY2FsZUxpbmVhcigpXG4gICAgICAgICAgICAuZG9tYWluKGRvbWFpbilcbiAgICAgICAgICAgIC5yYW5nZShyYW5nZSk7XG5cbiAgICAgICAgLy8gZml4ZWQgaW50cm9uIHdpZHRoXG4gICAgICAgIGNvbnN0IG1pbkxlbmd0aCA9IHRoaXMueFNjYWxlLmludmVydCh0aGlzLm1pbkV4b25XaWR0aCk7IC8vIHRoZSBtaW5pbXVtIGV4b24gbGVuZ3RoIHRoYXQgbWFwcyB0byBtaW5pbXVtIGV4b24gd2lkdGggKHBpeGVscykgdXNpbmcgeFNjYWxlXG4gICAgICAgIGNvbnN0IHRvdGFsRXhvbkxlbmd0aCA9IHN1bSh0aGlzLmV4b25zLCAoZCk9PmQubGVuZ3RoPm1pbkxlbmd0aD9kLmxlbmd0aDptaW5MZW5ndGgpOyAvLyBpZiBhbiBleG9uIGlzIHNob3J0ZXIgdGhhbiBtaW4gbGVuZ3RoLCB1c2UgbWluIGxlbmd0aFxuICAgICAgICB0aGlzLmludHJvbkxlbmd0aCA9IChtYXhFeG9uTGVuZ3RoICogdGhpcy5leG9ucy5sZW5ndGggLSB0b3RhbEV4b25MZW5ndGgpLyh0aGlzLmV4b25zLmxlbmd0aC0xKTsgLy8gY2FsdWNsYXRlIHRoZSBmaXhlZCBpbnRyb24gbGVuZ3RoXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9yIGEgZ2l2ZW4gcG9zaXRpb24sIGZpbmQgdGhlIGV4b25cbiAgICAgKiBAcGFyYW0gcG9zIHtJbnRlZ2VyfTogYSBnZW5vbWljIHBvc2l0aW9uXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfZmluZEV4b24ocG9zKXtcbiAgICAgICAgcG9zID0gTnVtYmVyKHBvcyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmV4b25zLmZpbHRlcigoZCkgPT4ge3JldHVybiBOdW1iZXIoZC5jaHJvbVN0YXJ0KSAtIDEgPD0gcG9zICYmIE51bWJlcihkLmNocm9tRW5kKSArIDEgPj0gcG9zfSk7XG4gICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PSAxKSByZXR1cm4gcmVzdWx0c1swXTtcbiAgICAgICAgZWxzZSBpZihyZXN1bHRzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJObyBleG9uIGZvdW5kIGZvcjogXCIgKyBwb3MpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIk1vcmUgdGhhbiBvbmUgZXhvbnMgZm91bmQgZm9yOiBcIiArIHBvcyk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICB9XG5cbn0iLCIvKipcbiAqIENvcHlyaWdodCDCqSAyMDE1IC0gMjAxOCBUaGUgQnJvYWQgSW5zdGl0dXRlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgKGh0dHBzOi8vZ2l0aHViLmNvbS9icm9hZGluc3RpdHV0ZS9ndGV4LXZpei9ibG9iL21hc3Rlci9MSUNFTlNFLm1kKVxuICovXG4vKlxuVGhpcyBjbGFzcyBpcyBhIHZpZXdlciBvZiB0cmFuc2NyaXB0aW9uYWwgaXNvZm9ybXMsIGVhY2ggaXMgcmVuZGVyIGFzIGEgdHJhY2tcbiAqL1xuXG5pbXBvcnQgR2VuZU1vZGVsIGZyb20gXCIuL0dlbmVNb2RlbFwiO1xuaW1wb3J0IHtzZWxlY3QsIHNlbGVjdEFsbH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtzY2FsZUJhbmR9IGZyb20gXCJkMy1zY2FsZVwiO1xuaW1wb3J0IHtheGlzVG9wLCBheGlzUmlnaHR9IGZyb20gXCJkMy1heGlzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElzb2Zvcm1UcmFja1ZpZXdlciB7XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXNvZm9ybXMge0xpc3R9IG9mIGlzb2Zvcm0gb2JqZWN0cyB3aXRoIGF0dHI6IHRyYW5zY3JpcHRJZCwgc3RhcnQsIGVuZFxuICAgICAqIEBwYXJhbSBpc29mb3JtRXhvbnMge0RpY3Rpb25hcnl9IG9mIGxpc3RzIG9mIGlzb2Zvcm0gZXhvbnMgaW5kZXhlZCBieSBpc29mb3JtIElEICh0cmFuc2NyaXB0SWQpXG4gICAgICogQHBhcmFtIG1vZGVsRXhvbnMge0xpc3R9IG9mIHJlZmVyZW5jZSBleG9ucy4uLlxuICAgICAqIEBwYXJhbSBjb25maWdcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihpc29mb3JtcywgaXNvZm9ybUV4b25zLCBtb2RlbEV4b25zLCBjb25maWcpe1xuICAgICAgICB0aGlzLmlzb2Zvcm1zID0gaXNvZm9ybXM7XG4gICAgICAgIHRoaXMuaXNvZm9ybUV4b25zID0gaXNvZm9ybUV4b25zO1xuICAgICAgICB0aGlzLm1vZGVsRXhvbnMgPSBtb2RlbEV4b25zO1xuICAgICAgICB0aGlzLnZpc3VhbERvbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgICAgIHRoaXMubnVsbENvbG9yID0gXCIjREREREREXCI7XG4gICAgfVxuXG4gICAgc2hvd0RhdGEoZGF0YSwgY29sb3JTY2FsZSwgYmFyU2NhbGUsIGRhdGFMYWJlbCwgc29ydD10cnVlKXtcbiAgICAgICAgaWYgKHNvcnQpe1xuICAgICAgICAgICAgZGF0YS5zb3J0KChhLGIpPT57cmV0dXJuIC0oYS5kaXNwbGF5VmFsdWUgLSBiLmRpc3BsYXlWYWx1ZSl9KTsgLy8gZmlyc3Qgc29ydCB0aGUgZXhwcmVzc2lvbiBkYXRhXG4gICAgICAgICAgICBjb25zdCBpZHMgPSBkYXRhLm1hcCgoZCk9PmQudHJhbnNjcmlwdElkKTtcbiAgICAgICAgICAgIHRoaXMuc29ydFRyYWNrcyhpZHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YS5mb3JFYWNoKChkKT0+e1xuICAgICAgICAgICAgY29uc3QgaXNvZm9ybSA9IHRoaXMudmlzdWFsRG9tLnNlbGVjdChgIyR7ZC50cmFuc2NyaXB0SWQucmVwbGFjZShcIi5cIiwgXCJfXCIpfWApO1xuICAgICAgICAgICAgaXNvZm9ybS5zZWxlY3RBbGwoXCIuZXhvbi1jdXJhdGVkXCIpXG4gICAgICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBkLnZhbHVlPT0wP3RoaXMubnVsbENvbG9yOmNvbG9yU2NhbGUoZC52YWx1ZSkpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHJlbmRlciB0aGUgbG9sbGlwb3AgZ3JhcGhcbiAgICAgICAgdGhpcy52aXN1YWxEb20uc2VsZWN0KFwiLmxvbGxpcG9wR3JhcGhcIikucmVtb3ZlKCk7XG4gICAgICAgIGNvbnN0IGxvbGxpcG9wR3JhcGggPSB0aGlzLnZpc3VhbERvbS5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuY2xhc3NlZChcImxvbGxpcG9wR3JhcGhcIiwgdHJ1ZSlcbiAgICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoLTEwMCwgMTMpYCk7IC8vIFRPRE86IHJlbW92ZSBoYXJkLWNvZGVkIHZhbHVlc1xuXG4gICAgICAgIGNvbnN0IGxvbGxpcG9wcyA9IGxvbGxpcG9wR3JhcGguc2VsZWN0QWxsKFwiLmxvbGxpcG9wXCIpXG4gICAgICAgICAgICAuZGF0YShkYXRhKTtcblxuICAgICAgICBjb25zdCBnID0gbG9sbGlwb3BzLmVudGVyKClcbiAgICAgICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuY2xhc3NlZChcImxvbGxpcG9wXCIsIHRydWUpO1xuXG4gICAgICAgIGcuYXBwZW5kKFwibGluZVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4MVwiLCAwKVxuICAgICAgICAgICAgLmF0dHIoXCJ5MVwiLCAoZCk9PnRoaXMueVNjYWxlKGQudHJhbnNjcmlwdElkKSlcbiAgICAgICAgICAgIC5hdHRyKFwieTJcIiwgKGQpPT50aGlzLnlTY2FsZShkLnRyYW5zY3JpcHRJZCkpXG4gICAgICAgICAgICAuc3R5bGUoXCJzdHJva2VcIiwgKGQpPT5kLnZhbHVlPT0wP3RoaXMubnVsbENvbG9yOmNvbG9yU2NhbGUoZC52YWx1ZSkpXG4gICAgICAgICAgICAuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwgMilcbiAgICAgICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgICAgIC5kdXJhdGlvbigxMDAwKVxuICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCAoZCk9PmQudmFsdWU9PTA/MDpiYXJTY2FsZShkLnZhbHVlKSk7XG5cbiAgICAgICAgZy5hcHBlbmQoXCJjaXJjbGVcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY3hcIiwgMClcbiAgICAgICAgICAgIC5hdHRyKFwiY3lcIiwgKGQpPT50aGlzLnlTY2FsZShkLnRyYW5zY3JpcHRJZCkgKVxuICAgICAgICAgICAgLmF0dHIoXCJyXCIsIDUpXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIChkKT0+ZC52YWx1ZT09MD90aGlzLm51bGxDb2xvcjpjb2xvclNjYWxlKGQudmFsdWUpKVxuICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLmR1cmF0aW9uKDEwMDApXG4gICAgICAgICAgICAuYXR0cihcImN4XCIsIChkKT0+YmFyU2NhbGUoZC52YWx1ZSkpO1xuXG4gICAgICAgIC8vIGFkZCB0aGUgYXhlc1xuICAgICAgICBsb2xsaXBvcEdyYXBoLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJsb2xsaXBvcC1heGlzXCIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKDAsLSR7dGhpcy55U2NhbGUuYmFuZHdpZHRoKCkvMn0pYClcbiAgICAgICAgICAgIC5jYWxsKFxuICAgICAgICAgICAgICAgIGF4aXNUb3AoYmFyU2NhbGUpXG4gICAgICAgICAgICAgICAgICAgIC50aWNrcygzKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICBsb2xsaXBvcEdyYXBoLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwiaWRcIiwgXCJsb2xsaUxhYmVsXCIpXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgMClcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAtNDApXG4gICAgICAgICAgICAuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcImVuZFwiKVxuICAgICAgICAgICAgLnN0eWxlKFwiZm9udC1zaXplXCIsIDkpXG4gICAgICAgICAgICAudGV4dChcImxvZzEwKFRQTSlcIik7IC8vIFRPRE86IHRoaXMgc2hvdWxkIGJlIGEgdXNlci1kZWZpbmVkIHRleHRcblxuICAgICAgICBsb2xsaXBvcEdyYXBoLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJsb2xsaXBvcC1heGlzXCIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKDAsLSR7dGhpcy55U2NhbGUuYmFuZHdpZHRoKCkvMn0pYClcbiAgICAgICAgICAgIC5jYWxsKFxuICAgICAgICAgICAgICAgIGF4aXNSaWdodCh0aGlzLnlTY2FsZSlcbiAgICAgICAgICAgICAgICAgIC50aWNrVmFsdWVzKFtdKSAvLyBzaG93IG5vIHRpY2tzXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIC8vIGRhdGEgbGFiZWxcbiAgICAgICAgbG9sbGlwb3BHcmFwaC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuYXR0cihcImlkXCIsIFwibG9sbGlMYWJlbFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIDEwKVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIC0yMClcblxuICAgICAgICAgICAgLnRleHQoYFRyYW5zY3JpcHQgRXhwcmVzc2lvbiBpbiAke2RhdGFMYWJlbH1gKVxuICAgICAgICAgICAgLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJzdGFydFwiKVxuICAgICAgICAgICAgLnN0eWxlKFwiZm9udC1zaXplXCIsIFwiMTJweFwiKTtcblxuXG4gICAgfVxuXG4gICAgc29ydFRyYWNrcyh5bGlzdCl7XG4gICAgICAgIHRoaXMuc2V0WXNjYWxlKHRoaXMuY29uZmlnLmgsIHlsaXN0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIodHJ1ZSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKHJlZHJhdz1mYWxzZSwgZG9tPXVuZGVmaW5lZCwgbGFiZWxPbj0nbGVmdCcsIGR1cmF0aW9uPTEwMDApe1xuICAgICAgICBpZiAoZG9tID09PSB1bmRlZmluZWQgJiYgdGhpcy52aXN1YWxEb20gPT09IHVuZGVmaW5lZCkgdGhyb3cgXCJGYXRhbCBFcnJvcjogbXVzdCBwcm92aWRlIGEgZG9tIGVsZW1lbnRcIjtcbiAgICAgICAgaWYgKGRvbSA9PT0gdW5kZWZpbmVkKSBkb20gPSB0aGlzLnZpc3VhbERvbTtcbiAgICAgICAgZWxzZSB0aGlzLnZpc3VhbERvbSA9IGRvbTtcblxuICAgICAgICBpZih0aGlzLnlTY2FsZT09PXVuZGVmaW5lZCkgdGhpcy5zZXRZc2NhbGUodGhpcy5jb25maWcuaCk7XG5cbiAgICAgICAgY29uc3QgaXNvVHJhY2tzID0gZG9tLnNlbGVjdEFsbChcIi5pc290cmFja1wiKVxuICAgICAgICAgICAgLmRhdGEodGhpcy5pc29mb3Jtcy5tYXAoKGQpPT5kLnRyYW5zY3JpcHRJZCkpO1xuXG4gICAgICAgIC8vIHVwZGF0ZSBvbGQgaXNvZm9ybSB0cmFja3MsIGlmIGFueVxuICAgICAgICBpc29UcmFja3MudHJhbnNpdGlvbigpXG4gICAgICAgICAgICAuZHVyYXRpb24oZHVyYXRpb24pXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCAoZCk9PnsgcmV0dXJuIGB0cmFuc2xhdGUoMCwgJHt0aGlzLnlTY2FsZShkKX0pYH0pO1xuXG4gICAgICAgIC8vIHVwZGF0ZSBuZXcgdHJhY2tzXG4gICAgICAgIGlzb1RyYWNrcy5lbnRlcigpXG4gICAgICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAgICAgLmF0dHIoXCJpZFwiLCAoZCk9PihkLnJlcGxhY2UoXCIuXCIsIFwiX1wiKSkpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiaXNvdHJhY2tcIilcbiAgICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIChkKT0+eyByZXR1cm4gYHRyYW5zbGF0ZSgwLCAwKWB9KVxuXG4gICAgICAgICAgICAvLyAubWVyZ2UoaXNvVHJhY2tzKVxuICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLmR1cmF0aW9uKGR1cmF0aW9uLzIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCAoZCk9PnsgcmV0dXJuIGB0cmFuc2xhdGUoMCwgJHt0aGlzLnlTY2FsZShkKX0pYH0pO1xuXG4gICAgICAgIGlmIChyZWRyYXcpIHJldHVybjtcblxuICAgICAgICB0aGlzLl9yZW5kZXJNb2RlbHModGhpcy5jb25maWcudywgbGFiZWxPbik7XG5cbiAgICB9XG5cbiAgICBfcmVuZGVyTW9kZWxzKHcsIGxhYmVsT24gPSAnbGVmdCcpe1xuICAgICAgICB0aGlzLmlzb2Zvcm1zLmZvckVhY2goKGlzb2Zvcm0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gbmV3IEdlbmVNb2RlbChpc29mb3JtLCB0aGlzLm1vZGVsRXhvbnMsIHRoaXMuaXNvZm9ybUV4b25zW2lzb2Zvcm0udHJhbnNjcmlwdElkXSwgW10sIHRydWUpO1xuICAgICAgICAgICAgY29uc3QgaXNvZm9ybUcgPSBzZWxlY3QoYCMke2lzb2Zvcm0udHJhbnNjcmlwdElkLnJlcGxhY2UoXCIuXCIsIFwiX1wiKX1gKTtcbiAgICAgICAgICAgIG1vZGVsLnJlbmRlcihpc29mb3JtRywge3c6dywgaDogdGhpcy55U2NhbGUuYmFuZHdpZHRoKCksIGxhYmVsT246IGxhYmVsT259KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0WXNjYWxlKGgsIHlsaXN0PXVuZGVmaW5lZCl7XG4gICAgICAgIGlmICh5bGlzdCA9PT0gdW5kZWZpbmVkKSB5bGlzdCA9IHRoaXMuaXNvZm9ybXMubWFwKChkKT0+ZC50cmFuc2NyaXB0SWQpO1xuICAgICAgICB0aGlzLnlTY2FsZSA9IHNjYWxlQmFuZCgpXG4gICAgICAgICAgICAuZG9tYWluKHlsaXN0KVxuICAgICAgICAgICAgLnJhbmdlKFswLCBoXSlcbiAgICAgICAgICAgIC5wYWRkaW5nKC4wNSk7XG4gICAgfVxuXG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuXG4vKlxuVE9ET1xuMS4gcmVmYWN0b3JpbmdcbiAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHtjcmVhdGVTdmcsIGdlbmVyYXRlUmFuZG9tTWF0cml4LCBnZW5lcmF0ZVJhbmRvbUxpc3R9IGZyb20gXCIuL21vZHVsZXMvdXRpbHNcIjtcbmltcG9ydCB7cmFuZ2V9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtyYW5kb21Ob3JtYWx9IGZyb20gXCJkMy1yYW5kb21cIjtcbmltcG9ydCBIZWF0bWFwIGZyb20gXCIuL21vZHVsZXMvSGVhdG1hcFwiO1xuaW1wb3J0IERlbmRyb0hlYXRtYXBDb25maWcgZnJvbSBcIi4vbW9kdWxlcy9EZW5kcm9IZWF0bWFwQ29uZmlnXCI7XG5pbXBvcnQgRGVuZHJvSGVhdG1hcCBmcm9tIFwiLi9tb2R1bGVzL0RlbmRyb0hlYXRtYXBcIjtcbmltcG9ydCBHcm91cGVkVmlvbGluIGZyb20gXCIuL21vZHVsZXMvR3JvdXBlZFZpb2xpblwiO1xuaW1wb3J0IElzb2Zvcm1UcmFja1ZpZXdlciBmcm9tIFwiLi9tb2R1bGVzL0lzb2Zvcm1UcmFja1ZpZXdlclwiO1xuXG5leHBvcnQgY29uc3QgZGVtb0RhdGEgPSB7XG4gICAgaGVhdG1hcDpnZW5lcmF0ZVJhbmRvbU1hdHJpeCh7eDo1MCwgeToxMCwgc2NhbGVGYWN0b3I6MTAwMH0pLFxuICAgIGRlbmRyb0hlYXRtYXA6IHtcbiAgICAgICAgcm93VHJlZTogXCIoKChUUDUzOjAuMTcsU0xLOjAuMTcpOjEuMTgsTkRSRzQ6MS4zNCk6MS4zMyxBQ1ROMzoyLjY3KTtcIixcbiAgICAgICAgY29sVHJlZTogXCIoKChBZGlwb3NlIFZpc2NlcmFsIE9tZW50dW06MC4wNixBZGlwb3NlIFN1YmN1dGFuZW91czowLjA2KTowLjAwLEJsYWRkZXI6MC4wNik6MC4xNixBZHJlbmFsIEdsYW5kOjAuMjIpO1wiLFxuICAgICAgICBoZWF0bWFwOiBbXG4gICAge1xuICAgICAgXCJ5XCI6IFwiU0xLXCIsXG4gICAgICBcInZhbHVlXCI6IDM1LjUwNSxcbiAgICAgIFwieFwiOiBcIkFkaXBvc2UgU3ViY3V0YW5lb3VzXCIsXG4gICAgICBcInVuaXRcIjogXCJUUE1cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJ5XCI6IFwiU0xLXCIsXG4gICAgICBcInZhbHVlXCI6IDI5LjI4LFxuICAgICAgXCJ4XCI6IFwiQWRpcG9zZSBWaXNjZXJhbCBPbWVudHVtXCIsXG4gICAgICBcInVuaXRcIjogXCJUUE1cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJ5XCI6IFwiU0xLXCIsXG4gICAgICBcInZhbHVlXCI6IDE3LjQwNSxcbiAgICAgIFwieFwiOiBcIkFkcmVuYWwgR2xhbmRcIixcbiAgICAgIFwidW5pdFwiOiBcIlRQTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcInlcIjogXCJTTEtcIixcbiAgICAgIFwidmFsdWVcIjogNTMuMjksXG4gICAgICBcInhcIjogXCJCbGFkZGVyXCIsXG4gICAgICBcInVuaXRcIjogXCJUUE1cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJ5XCI6IFwiTkRSRzRcIixcbiAgICAgIFwidmFsdWVcIjogMTIuMDM1LFxuICAgICAgXCJ4XCI6IFwiQWRpcG9zZSBTdWJjdXRhbmVvdXNcIixcbiAgICAgIFwidW5pdFwiOiBcIlRQTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcInlcIjogXCJORFJHNFwiLFxuICAgICAgXCJ2YWx1ZVwiOiA2LjUzMTAwMDAwMDAwMDAwMSxcbiAgICAgIFwieFwiOiBcIkFkaXBvc2UgVmlzY2VyYWwgT21lbnR1bVwiLFxuICAgICAgXCJ1bml0XCI6IFwiVFBNXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwieVwiOiBcIk5EUkc0XCIsXG4gICAgICBcInZhbHVlXCI6IDEzNC44LFxuICAgICAgXCJ4XCI6IFwiQWRyZW5hbCBHbGFuZFwiLFxuICAgICAgXCJ1bml0XCI6IFwiVFBNXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwieVwiOiBcIk5EUkc0XCIsXG4gICAgICBcInZhbHVlXCI6IDcuMTE2MDAwMDAwMDAwMDAwNSxcbiAgICAgIFwieFwiOiBcIkJsYWRkZXJcIixcbiAgICAgIFwidW5pdFwiOiBcIlRQTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcInlcIjogXCJUUDUzXCIsXG4gICAgICBcInZhbHVlXCI6IDI5LjkzNSxcbiAgICAgIFwieFwiOiBcIkFkaXBvc2UgU3ViY3V0YW5lb3VzXCIsXG4gICAgICBcInVuaXRcIjogXCJUUE1cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJ5XCI6IFwiVFA1M1wiLFxuICAgICAgXCJ2YWx1ZVwiOiAyMy41NSxcbiAgICAgIFwieFwiOiBcIkFkaXBvc2UgVmlzY2VyYWwgT21lbnR1bVwiLFxuICAgICAgXCJ1bml0XCI6IFwiVFBNXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwieVwiOiBcIlRQNTNcIixcbiAgICAgIFwidmFsdWVcIjogMTguNTE1LFxuICAgICAgXCJ4XCI6IFwiQWRyZW5hbCBHbGFuZFwiLFxuICAgICAgXCJ1bml0XCI6IFwiVFBNXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwieVwiOiBcIlRQNTNcIixcbiAgICAgIFwidmFsdWVcIjogNDAuNTEsXG4gICAgICBcInhcIjogXCJCbGFkZGVyXCIsXG4gICAgICBcInVuaXRcIjogXCJUUE1cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJ5XCI6IFwiQUNUTjNcIixcbiAgICAgIFwidmFsdWVcIjogMC4zMzE0NSxcbiAgICAgIFwieFwiOiBcIkFkaXBvc2UgU3ViY3V0YW5lb3VzXCIsXG4gICAgICBcInVuaXRcIjogXCJUUE1cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJ5XCI6IFwiQUNUTjNcIixcbiAgICAgIFwidmFsdWVcIjogMC4zMzE3LFxuICAgICAgXCJ4XCI6IFwiQWRpcG9zZSBWaXNjZXJhbCBPbWVudHVtXCIsXG4gICAgICBcInVuaXRcIjogXCJUUE1cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJ5XCI6IFwiQUNUTjNcIixcbiAgICAgIFwidmFsdWVcIjogMC4xMDAwMDUsXG4gICAgICBcInhcIjogXCJBZHJlbmFsIEdsYW5kXCIsXG4gICAgICBcInVuaXRcIjogXCJUUE1cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJ5XCI6IFwiQUNUTjNcIixcbiAgICAgIFwidmFsdWVcIjogMC40ODEwMDAwMDAwMDAwMDAwNCxcbiAgICAgIFwieFwiOiBcIkJsYWRkZXJcIixcbiAgICAgIFwidW5pdFwiOiBcIlRQTVwiXG4gICAgfVxuICBdXG4gICAgfSxcbiAgICBncm91cGVkVmlvbGluUGxvdDogW1xuICAgICAgICB7XG4gICAgICAgICAgIGdyb3VwOiBcIkdyb3VwIDFcIixcbiAgICAgICAgICAgbGFiZWw6IFwiR2VuZSAxXCIsXG4gICAgICAgICAgIHZhbHVlczogcmFuZ2UoMCwgMjAwMCkubWFwKHJhbmRvbU5vcm1hbCgyLCAxKSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JvdXA6IFwiR3JvdXAgMVwiLFxuICAgICAgICAgICAgbGFiZWw6IFwiR2VuZSAyXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHJhbmdlKDAsIDIwMDApLm1hcChyYW5kb21Ob3JtYWwoNSwgMSkpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyb3VwOiBcIkdyb3VwIDFcIixcbiAgICAgICAgICAgIGxhYmVsOiBcIkdlbmUgM1wiLFxuICAgICAgICAgICAgdmFsdWVzOiByYW5nZSgwLCAyMDAwKS5tYXAocmFuZG9tTm9ybWFsKDEwLCAxKSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICBncm91cDogXCJHcm91cCAyXCIsXG4gICAgICAgICAgIGxhYmVsOiBcIkdlbmUgMVwiLFxuICAgICAgICAgICB2YWx1ZXM6IHJhbmdlKDAsIDIwMDApLm1hcChyYW5kb21Ob3JtYWwoNSwgMSkpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyb3VwOiBcIkdyb3VwIDJcIixcbiAgICAgICAgICAgIGxhYmVsOiBcIkdlbmUgMlwiLFxuICAgICAgICAgICAgdmFsdWVzOiByYW5nZSgwLCAyMDAwKS5tYXAocmFuZG9tTm9ybWFsKDMsIDEpKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBncm91cDogXCJHcm91cCAyXCIsXG4gICAgICAgICAgICBsYWJlbDogXCJHZW5lIDNcIixcbiAgICAgICAgICAgIHZhbHVlczogcmFuZ2UoMCwgMjAwMCkubWFwKHJhbmRvbU5vcm1hbCgxLCAxKSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICBncm91cDogXCJHcm91cCAzXCIsXG4gICAgICAgICAgIGxhYmVsOiBcIkdlbmUgMVwiLFxuICAgICAgICAgICB2YWx1ZXM6IHJhbmdlKDAsIDIwMDApLm1hcChyYW5kb21Ob3JtYWwoMiwgMSkpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyb3VwOiBcIkdyb3VwIDNcIixcbiAgICAgICAgICAgIGxhYmVsOiBcIkdlbmUgMlwiLFxuICAgICAgICAgICAgdmFsdWVzOiByYW5nZSgwLCAyMDAwKS5tYXAocmFuZG9tTm9ybWFsKDMsIDEpKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBncm91cDogXCJHcm91cCAzXCIsXG4gICAgICAgICAgICBsYWJlbDogXCJHZW5lIDNcIixcbiAgICAgICAgICAgIHZhbHVlczogcmFuZ2UoMCwgMjAwMCkubWFwKHJhbmRvbU5vcm1hbCg1LCAxKSlcbiAgICAgICAgfVxuICAgIF0sXG4gICAgdHJhbnNjcmlwdFRyYWNrczoge1xuICAgICAgICBcImV4b25zXCI6IHtcbiAgICAgICAgICAgIFwiRU5TVDAwMDAwNTc4NDE5LjFcIjogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVwiOiBcIjE3XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21TdGFydFwiOiA3NzA3MTAyMSxcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbUVuZFwiOiA3NzA3MTE3MixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJhbmRcIjogXCIrXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbk51bWJlclwiOiBcIjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uSWRcIjogXCJFTlNFMDAwMDM1MDIwMzIuMVwiXG5cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVwiOiBcIjE3XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21FbmRcIjogNzcwNzM1NzksXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbklkXCI6IFwiRU5TRTAwMDAzNjcyNjI4LjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uTnVtYmVyXCI6IFwiMlwiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tU3RhcnRcIjogNzcwNzM1MTIsXG4gICAgICAgICAgICAgICAgICAgIFwic3RyYW5kXCI6IFwiK1wiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21cIjogXCIxN1wiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tRW5kXCI6IDc3MDczOTQ2LFxuICAgICAgICAgICAgICAgICAgICBcImV4b25JZFwiOiBcIkVOU0UwMDAwMzQ3NTI4MS4xXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbk51bWJlclwiOiBcIjNcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVN0YXJ0XCI6IDc3MDczNzQ1LFxuICAgICAgICAgICAgICAgICAgICBcInN0cmFuZFwiOiBcIitcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImNocm9tXCI6IFwiMTdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbUVuZFwiOiA3NzA3NjQ0NixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uSWRcIjogXCJFTlNFMDAwMDM2Nzk4NTIuMVwiLFxuICAgICAgICAgICAgICAgICAgICBcImV4b25OdW1iZXJcIjogXCI0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21TdGFydFwiOiA3NzA3NjI4OSxcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJhbmRcIjogXCIrXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVwiOiBcIjE3XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21FbmRcIjogNzcwNzcxNTUsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbklkXCI6IFwiRU5TRTAwMDAzNTgzNTE1LjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uTnVtYmVyXCI6IFwiNVwiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tU3RhcnRcIjogNzcwNzcwMDcsXG4gICAgICAgICAgICAgICAgICAgIFwic3RyYW5kXCI6IFwiK1wiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21cIjogXCIxN1wiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tRW5kXCI6IDc3MDc4NjMxLFxuICAgICAgICAgICAgICAgICAgICBcImV4b25JZFwiOiBcIkVOU0UwMDAwMzU4OTIzMC4xXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbk51bWJlclwiOiBcIjZcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVN0YXJ0XCI6IDc3MDc3OTgwLFxuICAgICAgICAgICAgICAgICAgICBcInN0cmFuZFwiOiBcIitcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcIkVOU1QwMDAwMDUzOTg1Ny4yXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21cIjogXCIxN1wiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tRW5kXCI6IDc3MDcxMTcyLFxuICAgICAgICAgICAgICAgICAgICBcImV4b25JZFwiOiBcIkVOU0UwMDAwMzUxMjQwMS4xXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbk51bWJlclwiOiBcIjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVN0YXJ0XCI6IDc3MDcxMDIxLFxuICAgICAgICAgICAgICAgICAgICBcInN0cmFuZFwiOiBcIitcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImNocm9tXCI6IFwiMTdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbUVuZFwiOiA3NzA3MzU3OSxcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uSWRcIjogXCJFTlNFMDAwMDM2MjM4MjguMVwiLFxuICAgICAgICAgICAgICAgICAgICBcImV4b25OdW1iZXJcIjogXCIyXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21TdGFydFwiOiA3NzA3MzUxMixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJhbmRcIjogXCIrXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVwiOiBcIjE3XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21FbmRcIjogNzcwNzM5NDYsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbklkXCI6IFwiRU5TRTAwMDAzNjM4NjkzLjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uTnVtYmVyXCI6IFwiM1wiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tU3RhcnRcIjogNzcwNzM3NDUsXG4gICAgICAgICAgICAgICAgICAgIFwic3RyYW5kXCI6IFwiK1wiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21cIjogXCIxN1wiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tRW5kXCI6IDc3MDc2NDQ2LFxuICAgICAgICAgICAgICAgICAgICBcImV4b25JZFwiOiBcIkVOU0UwMDAwMzY1MTI1MC4xXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbk51bWJlclwiOiBcIjRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVN0YXJ0XCI6IDc3MDc2Mjg5LFxuICAgICAgICAgICAgICAgICAgICBcInN0cmFuZFwiOiBcIitcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImNocm9tXCI6IFwiMTdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbUVuZFwiOiA3NzA3NzE1NSxcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uSWRcIjogXCJFTlNFMDAwMDM2MDc3NzMuMVwiLFxuICAgICAgICAgICAgICAgICAgICBcImV4b25OdW1iZXJcIjogXCI1XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21TdGFydFwiOiA3NzA3NzAwNyxcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJhbmRcIjogXCIrXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVwiOiBcIjE3XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21FbmRcIjogNzcwNzg2MzEsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbklkXCI6IFwiRU5TRTAwMDAzNDg4MTE3LjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uTnVtYmVyXCI6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tU3RhcnRcIjogNzcwNzc5ODAsXG4gICAgICAgICAgICAgICAgICAgIFwic3RyYW5kXCI6IFwiK1wiXG4gICAgICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICBcIkVOU1QwMDAwMDMxMTU5NS45XCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21cIjogXCIxN1wiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tRW5kXCI6IDc3MDcxMTcyLFxuICAgICAgICAgICAgICAgICAgICBcImV4b25JZFwiOiBcIkVOU0UwMDAwMjcxMzkzMy4xXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbk51bWJlclwiOiBcIjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVN0YXJ0XCI6IDc3MDcxMTUxLFxuICAgICAgICAgICAgICAgICAgICBcInN0cmFuZFwiOiBcIitcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImNocm9tXCI6IFwiMTdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbUVuZFwiOiA3NzA3MzU3OSxcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uSWRcIjogXCJFTlNFMDAwMDM2NzI2MjguMVwiLFxuICAgICAgICAgICAgICAgICAgICBcImV4b25OdW1iZXJcIjogXCIyXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21TdGFydFwiOiA3NzA3MzUxMixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJhbmRcIjogXCIrXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVwiOiBcIjE3XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21FbmRcIjogNzcwNzM5NDYsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbklkXCI6IFwiRU5TRTAwMDAzNDc1MjgxLjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uTnVtYmVyXCI6IFwiM1wiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tU3RhcnRcIjogNzcwNzM3NDUsXG4gICAgICAgICAgICAgICAgICAgIFwic3RyYW5kXCI6IFwiK1wiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21cIjogXCIxN1wiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tRW5kXCI6IDc3MDc1NzE5LFxuICAgICAgICAgICAgICAgICAgICBcImV4b25JZFwiOiBcIkVOU0UwMDAwMTExMTcxMy4xXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbk51bWJlclwiOiBcIjRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVN0YXJ0XCI6IDc3MDc1NTcxLFxuICAgICAgICAgICAgICAgICAgICBcInN0cmFuZFwiOiBcIitcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImNocm9tXCI6IFwiMTdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbUVuZFwiOiA3NzA3NjQ0NixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uSWRcIjogXCJFTlNFMDAwMDM2NTEyNTAuMVwiLFxuICAgICAgICAgICAgICAgICAgICBcImV4b25OdW1iZXJcIjogXCI1XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21TdGFydFwiOiA3NzA3NjI4OSxcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJhbmRcIjogXCIrXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVwiOiBcIjE3XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21FbmRcIjogNzcwNzcxNTUsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbklkXCI6IFwiRU5TRTAwMDAzNjA3NzczLjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uTnVtYmVyXCI6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tU3RhcnRcIjogNzcwNzcwMDcsXG4gICAgICAgICAgICAgICAgICAgIFwic3RyYW5kXCI6IFwiK1wiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21cIjogXCIxN1wiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tRW5kXCI6IDc3MDc4NjEyLFxuICAgICAgICAgICAgICAgICAgICBcImV4b25JZFwiOiBcIkVOU0UwMDAwMjcyMDkyNC4xXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbk51bWJlclwiOiBcIjdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVN0YXJ0XCI6IDc3MDc3OTgwLFxuICAgICAgICAgICAgICAgICAgICBcInN0cmFuZFwiOiBcIitcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJ0cmFuc2NyaXB0c1wiOiBbXG4gICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICAgICBcImNocm9tb3NvbWVcIjogXCIxN1wiLFxuICAgICAgICAgICAgICAgIFwiZW5kXCI6IDc3MDc4NjMxLFxuICAgICAgICAgICAgICAgIFwiZ2VuY29kZUlkXCI6IFwiRU5TRzAwMDAwMTY3MjgwLjEyXCIsXG4gICAgICAgICAgICAgICAgXCJnZW5lU3ltYm9sXCI6IFwiRU5HQVNFXCIsXG4gICAgICAgICAgICAgICAgXCJzdGFydFwiOiA3NzA3MTAyMSxcbiAgICAgICAgICAgICAgICBcInN0cmFuZFwiOiBcIitcIixcbiAgICAgICAgICAgICAgICBcInRyYW5zY3JpcHRJZFwiOiBcIkVOU1QwMDAwMDU3ODQxOS4xXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJjaHJvbW9zb21lXCI6IFwiMTdcIixcbiAgICAgICAgICAgICAgICBcImVuZFwiOiA3NzA3ODYzMSxcbiAgICAgICAgICAgICAgICBcImdlbmNvZGVJZFwiOiBcIkVOU0cwMDAwMDE2NzI4MC4xMlwiLFxuICAgICAgICAgICAgICAgIFwiZ2VuZVN5bWJvbFwiOiBcIkVOR0FTRVwiLFxuICAgICAgICAgICAgICAgIFwic3RhcnRcIjogNzcwNzEwMjEsXG4gICAgICAgICAgICAgICAgXCJzdHJhbmRcIjogXCIrXCIsXG4gICAgICAgICAgICAgICAgXCJ0cmFuc2NyaXB0SWRcIjogXCJFTlNUMDAwMDA1Mzk4NTcuMlwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwiY2hyb21vc29tZVwiOiBcIjE3XCIsXG4gICAgICAgICAgICAgICAgXCJlbmRcIjogNzcwNzg2MTIsXG4gICAgICAgICAgICAgICAgXCJnZW5jb2RlSWRcIjogXCJFTlNHMDAwMDAxNjcyODAuMTJcIixcbiAgICAgICAgICAgICAgICBcImdlbmVTeW1ib2xcIjogXCJFTkdBU0VcIixcbiAgICAgICAgICAgICAgICBcInN0YXJ0XCI6IDc3MDcxMTUxLFxuICAgICAgICAgICAgICAgIFwic3RyYW5kXCI6IFwiK1wiLFxuICAgICAgICAgICAgICAgIFwidHJhbnNjcmlwdElkXCI6IFwiRU5TVDAwMDAwMzExNTk1LjlcIlxuICAgICAgICAgICAgfVxuICAgICAgICBdXG4gICAgfVxufTtcblxuY29uc3QgdHJhbnNjcmlwdFRyYWNrc0NvbmZpZyA9IHtcbiAgICBpZDogJ2d0ZXhUcmFuc2NyaXB0VHJhY2tzJyxcbiAgICBkYXRhOiBkZW1vRGF0YS50cmFuc2NyaXB0VHJhY2tzLFxuICAgIHdpZHRoOiAxMjAwLFxuICAgIGhlaWdodDogODAsXG4gICAgbWFyZ2luTGVmdDogMTAwLFxuICAgIG1hcmdpblJpZ2h0OiAyMCxcbiAgICBtYXJnaW5Ub3A6IDAsXG4gICAgbWFyZ2luQm90dG9tOiAyMCxcbiAgICBsYWJlbFBvczogJ2xlZnQnXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNjcmlwdFRyYWNrcyhwYXI9dHJhbnNjcmlwdFRyYWNrc0NvbmZpZyl7XG4gICAgbGV0IG1hcmdpbiA9IHtcbiAgICAgICAgdG9wOiBwYXIubWFyZ2luVG9wLFxuICAgICAgICByaWdodDogcGFyLm1hcmdpblJpZ2h0LFxuICAgICAgICBib3R0b206IHBhci5tYXJnaW5Cb3R0b20sXG4gICAgICAgIGxlZnQ6IHBhci5tYXJnaW5MZWZ0XG4gICAgfTtcbiAgICBsZXQgaW5XaWR0aCA9IHBhci53aWR0aCAtIChwYXIubWFyZ2luTGVmdCArIHBhci5tYXJnaW5SaWdodCk7XG4gICAgbGV0IGluSGVpZ2h0ID0gcGFyLmhlaWdodCAtIChwYXIubWFyZ2luVG9wICsgcGFyLm1hcmdpbkJvdHRvbSk7XG5cbiAgICAvLyB0ZXN0IGlucHV0IHBhcmFtc1xuICAgIGlmICgkKGAjJHtwYXIuaWR9YCkubGVuZ3RoID09IDApIHtcbiAgICAgICAgbGV0IGVycm9yID0gYElucHV0IEVycm9yOiBET00gSUQgJHtwYXIuaWR9IGlzIG5vdCBmb3VuZC5gO1xuICAgICAgICBhbGVydChlcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIC8vIGNyZWF0ZSB0aGUgU1ZHXG4gICAgICAgIGxldCBzdmcgPSBjcmVhdGVTdmcocGFyLmlkLCBwYXIud2lkdGgsIHBhci5oZWlnaHQsIG1hcmdpbik7XG5cbiAgICAvLyByZW5kZXIgdGhlIHRyYW5zY3JpcHRzXG4gICAgbGV0IHRvb2x0aXBJZCA9IGAke3Bhci5pZH1Ub29sdGlwYDtcbiAgICBsZXQgY29uZmlnID0ge1xuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAwLFxuICAgICAgICB3OiBpbldpZHRoLFxuICAgICAgICBoOiBpbkhlaWdodCxcbiAgICAgICAgbGFiZWxPbjogcGFyLmxhYmVsUG9zXG4gICAgfTtcbiAgICBsZXQgdmlld2VyID0gbmV3IElzb2Zvcm1UcmFja1ZpZXdlcihwYXIuZGF0YS50cmFuc2NyaXB0cywgcGFyLmRhdGEuZXhvbnMsIHBhci5kYXRhLmV4b25zW1wiRU5TVDAwMDAwNTc4NDE5LjFcIl0sIGNvbmZpZyk7XG4gICAgdmlld2VyLnJlbmRlcihmYWxzZSwgc3ZnLCBwYXIubGFiZWxQb3MpO1xuXG59XG5cbmNvbnN0IGhlYXRtYXBEZW1vQ29uZmlnID0ge1xuICAgIGlkOiAnZ3RleFZpekhlYXRtYXAnLFxuICAgIGRhdGE6IGRlbW9EYXRhLmhlYXRtYXAsXG4gICAgd2lkdGg6IDEyMDAsIC8vIG91dGVyIHdpZHRoXG4gICAgaGVpZ2h0OiAzMDAsIC8vIG91dGVyIGhlaWdodFxuICAgIG1hcmdpbkxlZnQ6IDIwLFxuICAgIG1hcmdpblJpZ2h0OiA0MCxcbiAgICBtYXJnaW5Ub3A6IDUwLFxuICAgIG1hcmdpbkJvdHRvbTogNTAsXG4gICAgY29sb3JTY2hlbWU6IFwiWWxHbkJ1XCIsXG4gICAgY29ybmVyUmFkaXVzOiAyLFxuICAgIGNvbHVtbkxhYmVsSGVpZ2h0OiAyMCxcbiAgICBjb2x1bW5MYWJlbEFuZ2xlOiA2MCxcbiAgICBjb2x1bW5MYWJlbFBvc0FkanVzdDogMTAsXG4gICAgcm93TGFiZWxXaWR0aDogMTAwLFxuICAgIGxlZ2VuZFNwYWNlOiA1MCxcbiAgICB1c2VMb2c6IHRydWUsXG4gICAgbG9nQmFzZTogMTBcbn07XG5cbi8qKlxuICogUmVuZGVyIGEgMkQgSGVhdG1hcFxuICogQHBhcmFtIHBhcmFtc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaGVhdG1hcChwYXI9aGVhdG1hcERlbW9Db25maWcpe1xuICAgIGxldCBtYXJnaW4gPSB7XG4gICAgICAgIHRvcDogcGFyLm1hcmdpblRvcCxcbiAgICAgICAgcmlnaHQ6IHBhci5tYXJnaW5SaWdodCxcbiAgICAgICAgYm90dG9tOiBwYXIubWFyZ2luQm90dG9tLFxuICAgICAgICBsZWZ0OiBwYXIubWFyZ2luTGVmdFxuICAgIH07XG4gICAgbGV0IGluV2lkdGggPSBwYXIud2lkdGggLSAocGFyLm1hcmdpbkxlZnQgKyBwYXIubWFyZ2luUmlnaHQgKyBwYXIucm93TGFiZWxXaWR0aCk7XG4gICAgbGV0IGluSGVpZ2h0ID0gcGFyLmhlaWdodCAtIChwYXIubWFyZ2luVG9wICsgcGFyLm1hcmdpbkJvdHRvbSArIHBhci5jb2x1bW5MYWJlbEhlaWdodCk7XG5cbiAgICAvLyB0ZXN0IGlucHV0IHBhcmFtc1xuICAgIGlmICgkKGAjJHtwYXIuaWR9YCkubGVuZ3RoID09IDApIHtcbiAgICAgICAgbGV0IGVycm9yID0gYElucHV0IEVycm9yOiBET00gSUQgJHtwYXIuaWR9IGlzIG5vdCBmb3VuZC5gO1xuICAgICAgICBhbGVydChlcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIC8vIGNyZWF0ZSB0aGUgU1ZHXG4gICAgbGV0IHN2ZyA9IGNyZWF0ZVN2ZyhwYXIuaWQsIHBhci53aWR0aCwgcGFyLmhlaWdodCwgbWFyZ2luKTtcblxuICAgIC8vIHJlbmRlciB0aGUgaGVhdG1hcFxuICAgIGxldCB0b29sdGlwSWQgPSBgJHtwYXIuaWR9VG9vbHRpcGA7XG4gICAgbGV0IGggPSBuZXcgSGVhdG1hcChwYXIuZGF0YSwgcGFyLnVzZUxvZywgcGFyLmxvZ0Jhc2UsIHBhci5jb2xvclNjaGVtZSwgcGFyLmNvcm5lclJhZGl1cywgdG9vbHRpcElkKTtcbiAgICBoLmRyYXcoc3ZnLCB7dzppbldpZHRoLCBoOmluSGVpZ2h0fSwgcGFyLmNvbHVtbkxhYmVsQW5nbGUsIGZhbHNlLCBwYXIuY29sdW1uTGFiZWxQb3NBZGp1c3QpO1xuICAgIGguZHJhd0NvbG9yTGVnZW5kKHN2Zywge3g6MjAsIHk6IC0yMH0sIDEwKTtcbn1cblxuY29uc3QgZGVuZHJvSGVhdG1hcERlbW9Db25maWcgPSB7XG4gICAgaWQ6ICdndGV4Vml6RGVuZHJvSGVhdG1hcCcsXG4gICAgZGF0YTogZGVtb0RhdGEuZGVuZHJvSGVhdG1hcCxcbiAgICB1c2VMb2c6IHRydWUsXG4gICAgbG9nQmFzZTogMTAsXG4gICAgd2lkdGg6IDYwMCwgLy8gb3V0ZXIgd2lkdGhcbiAgICBoZWlnaHQ6IDMwMCwgLy8gb3V0ZXIgaGVpZ2h0XG4gICAgbWFyZ2luTGVmdDogMjAsXG4gICAgbWFyZ2luUmlnaHQ6IDQwLFxuICAgIG1hcmdpblRvcDogNTAsXG4gICAgbWFyZ2luQm90dG9tOiA1MCxcbiAgICByb3dUcmVlUGFuZWxXaWR0aDogMTAwLFxuICAgIGNvbFRyZWVQYW5lbEhlaWdodDogMTAwLFxuICAgIGNvbG9yU2NoZW1lOiBcIkJsdWVzXCIsXG4gICAgY29ybmVyUmFkaXVzOiAyLFxuICAgIGNvbHVtbkxhYmVsSGVpZ2h0OiAyMDAsXG4gICAgY29sdW1uTGFiZWxBbmdsZTogNjAsXG4gICAgY29sdW1uTGFiZWxQb3NBZGp1c3Q6IDEwLFxuICAgIHJvd0xhYmVsV2lkdGg6IDIwMCxcbiAgICBsZWdlbmRTcGFjZTogNTBcbn07XG5cbi8qKlxuICogUmVuZGVyIGEgRGVuZHJvSGVhdG1hcFxuICogQHBhcmFtIHBhclxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVuZHJvSGVhdG1hcChwYXI9ZGVuZHJvSGVhdG1hcERlbW9Db25maWcpe1xuICAgIGxldCBtYXJnaW4gPSB7XG4gICAgICAgIHRvcDogcGFyLm1hcmdpblRvcCxcbiAgICAgICAgcmlnaHQ6IHBhci5tYXJnaW5SaWdodCArIHBhci5yb3dMYWJlbFdpZHRoLFxuICAgICAgICBib3R0b206IHBhci5tYXJnaW5Cb3R0b20gKyBwYXIuY29sdW1uTGFiZWxIZWlnaHQsXG4gICAgICAgIGxlZnQ6IHBhci5tYXJnaW5MZWZ0XG4gICAgfTtcblxuICAgIC8vIHRlc3QgaW5wdXQgcGFyYW1zXG4gICAgaWYgKCQoYCMke3Bhci5pZH1gKS5sZW5ndGggPT0gMCkge1xuICAgICAgICBsZXQgZXJyb3IgPSBgSW5wdXQgRXJyb3I6IERPTSBJRCAke3Bhci5pZH0gaXMgbm90IGZvdW5kLmA7XG4gICAgICAgIGFsZXJ0KGVycm9yKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgbGV0IGluV2lkdGggPSBwYXIud2lkdGggLSAocGFyLm1hcmdpbkxlZnQgKyBwYXIubWFyZ2luUmlnaHQgKyBwYXIucm93TGFiZWxXaWR0aCk7XG4gICAgbGV0IGluSGVpZ2h0ID0gcGFyLmhlaWdodCAtIChwYXIubWFyZ2luVG9wICsgcGFyLm1hcmdpbkJvdHRvbSArIHBhci5jb2x1bW5MYWJlbEhlaWdodCk7XG5cbiAgICBsZXQgc3ZnSWQgPSBgJHtwYXIuaWR9U3ZnYDtcbiAgICBsZXQgdG9vbHRpcElkID0gYCR7cGFyLmlkfVRvb2x0aXBgO1xuICAgIGxldCBkbWFwQ29uZmlnID0gbmV3IERlbmRyb0hlYXRtYXBDb25maWcocGFyLndpZHRoLCBwYXIucm93VHJlZVBhbmVsV2lkdGgsIHBhci5jb2xUcmVlUGFuZWxIZWlnaHQsIG1hcmdpbik7XG4gICAgbGV0IGRtYXAgPSBuZXcgRGVuZHJvSGVhdG1hcChwYXIuZGF0YS5jb2xUcmVlLCBwYXIuZGF0YS5yb3dUcmVlLCBwYXIuZGF0YS5oZWF0bWFwLCBwYXIuY29sb3JTY2hlbWUsIHBhci5jb3JuZXJSYWRpdXMsIGRtYXBDb25maWcsIHRvb2x0aXBJZCwgcGFyLnVzZUxvZywgcGFyLmxvZ0Jhc2UpXG4gICAgbGV0IHNob3dDb2xUcmVlID0gcGFyLmRhdGEuY29sVHJlZSAhPT0gdW5kZWZpbmVkO1xuICAgIGxldCBzaG93Um93VHJlZSA9IHBhci5kYXRhLnJvd1RyZWUgIT09IHVuZGVmaW5lZDtcbiAgICBkbWFwLnJlbmRlcihwYXIuaWQsIHN2Z0lkLCBzaG93Q29sVHJlZSwgc2hvd1Jvd1RyZWUsIFwidG9wXCIsIDgpO1xufVxuXG5jb25zdCB2aW9saW5EZW1vQ29uZmlnID0ge1xuICAgIGlkOiAnZ3RleEdyb3VwZWRWaW9saW5QbG90JyxcbiAgICBkYXRhOiBkZW1vRGF0YS5ncm91cGVkVmlvbGluUGxvdCxcbiAgICB3aWR0aDogNTAwLFxuICAgIGhlaWdodDogMzAwLFxuICAgIG1hcmdpbkxlZnQ6IDEwMCxcbiAgICBtYXJnaW5SaWdodDogMjAsXG4gICAgbWFyZ2luVG9wOiA1MCxcbiAgICBtYXJnaW5Cb3R0b206IDEwMCxcbiAgICBzaG93RGl2aWRlcjogdHJ1ZSxcbiAgICB4UGFkZGluZzogMC4zLFxuICAgIHlMYWJlbDogXCJSYW5kb20gVmFsdWVcIixcbiAgICBzaG93R3JvdXBYOiB0cnVlLFxuICAgIHNob3dYOiB0cnVlLFxuICAgIHhBbmdsZTogMCxcbiAgICBzaG93V2hpc2tlcjogZmFsc2UsXG4gICAgc2hvd0xlZ2VuZDogZmFsc2UsXG4gICAgc2hvd1NhbXBsZVNpemU6IHRydWVcbn07XG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBlZFZpb2xpblBsb3QocGFyPXZpb2xpbkRlbW9Db25maWcpe1xuICAgIGNvbnNvbGUubG9nKHBhci5kYXRhKTtcbiAgICBsZXQgbWFyZ2luID0ge1xuICAgICAgICB0b3A6IHBhci5tYXJnaW5Ub3AsXG4gICAgICAgIHJpZ2h0OiBwYXIubWFyZ2luUmlnaHQsXG4gICAgICAgIGJvdHRvbTogcGFyLm1hcmdpbkJvdHRvbSxcbiAgICAgICAgbGVmdDogcGFyLm1hcmdpbkxlZnRcbiAgICB9O1xuICAgIC8vIHRlc3QgaW5wdXQgcGFyYW1zXG4gICAgaWYgKCQoYCMke3Bhci5pZH1gKS5sZW5ndGggPT0gMCkge1xuICAgICAgICBsZXQgZXJyb3IgPSBgSW5wdXQgRXJyb3I6IERPTSBJRCAke3Bhci5pZH0gaXMgbm90IGZvdW5kLmA7XG4gICAgICAgIGFsZXJ0KGVycm9yKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgbGV0IGluV2lkdGggPSBwYXIud2lkdGggLSAocGFyLm1hcmdpbkxlZnQgKyBwYXIubWFyZ2luUmlnaHQpO1xuICAgIGxldCBpbkhlaWdodCA9IHBhci5oZWlnaHQgLSAocGFyLm1hcmdpblRvcCArIHBhci5tYXJnaW5Cb3R0b20pO1xuXG4gICAgbGV0IHN2Z0lkID0gYCR7cGFyLmlkfVN2Z2A7XG4gICAgbGV0IHRvb2x0aXBJZCA9IGAke3Bhci5pZH1Ub29sdGlwYDtcblxuICAgIC8vIGNyZWF0ZSB0aGUgU1ZHXG4gICAgbGV0IHN2ZyA9IGNyZWF0ZVN2ZyhwYXIuaWQsIHBhci53aWR0aCwgcGFyLmhlaWdodCwgbWFyZ2luKTtcblxuICAgIGNvbnN0IGdWaW9saW4gPSBuZXcgR3JvdXBlZFZpb2xpbihwYXIuZGF0YSk7XG4gICAgZ1Zpb2xpbi5yZW5kZXIoc3ZnLCBpbldpZHRoLCBpbkhlaWdodCwgcGFyLnhQYWRkaW5nLCB1bmRlZmluZWQsIFtdLCBwYXIueUxhYmVsLCBwYXIuc2hvd0dyb3VwWCwgcGFyLlNob3dYLCBwYXIueEFuZ2xlLCBwYXIuc2hvd1doaXNrZXIsIHBhci5zaG93RGl2aWRlciwgcGFyLnNob3dMZWdlbmQpO1xuICAgIGNvbnN0IHRvb2x0aXAgPSBnVmlvbGluLmNyZWF0ZVRvb2x0aXAodG9vbHRpcElkKTtcblxuXG59XG5cbiJdLCJuYW1lcyI6WyJtYXRjaGVyIiwic2VsZWN0aW9uIiwiZWxlbWVudCIsImFzY2VuZGluZyIsInJhbmdlIiwibWFwIiwiYXJyYXkiLCJzbGljZSIsImxpbmVhciIsImV4cG9uZW50aWFsIiwiY29uc3RhbnQiLCJjb2xvciIsInJnYiIsImNvbG9yUmdiIiwiYmFzaXMiLCJ2YWx1ZSIsIm51bWJlciIsInN0cmluZyIsImlkZW50aXR5IiwiY3ViZWhlbGl4IiwiaHVlIiwiY29sb3JDdWJlaGVsaXgiLCJiaXNlY3QiLCJpbnRlcnBvbGF0ZSIsImludGVycG9sYXRlVmFsdWUiLCJkZWludGVycG9sYXRlIiwicmVpbnRlcnBvbGF0ZSIsInQwIiwidDEiLCJpbnRlcnZhbCIsImR1cmF0aW9uU2Vjb25kIiwiZHVyYXRpb25NaW51dGUiLCJkdXJhdGlvbkhvdXIiLCJkdXJhdGlvbkRheSIsImR1cmF0aW9uV2VlayIsImZvcm1hdExvY2FsZSIsImRheSIsInRpbWVNb25kYXkiLCJ0aW1lRGF5IiwidGltZVllYXIiLCJ0aW1lU3VuZGF5IiwidGltZVRodXJzZGF5IiwibG9jYWxlIiwiZGVmYXVsdExvY2FsZSIsInBhcnNlVHlwZW5hbWVzIiwiZ2V0Iiwic2V0IiwiY3JlYXRlIiwidGltZW91dCIsInNjaGVkdWxlIiwiYXR0clJlbW92ZSIsImF0dHJSZW1vdmVOUyIsImF0dHJDb25zdGFudCIsImF0dHJDb25zdGFudE5TIiwiYXR0ckZ1bmN0aW9uIiwiYXR0ckZ1bmN0aW9uTlMiLCJpbnRlcnBvbGF0ZVRyYW5zZm9ybSIsInRyYW5zaXRpb24iLCJTZWxlY3Rpb24iLCJzdHlsZVJlbW92ZSIsInN0eWxlIiwic3R5bGVDb25zdGFudCIsInN0eWxlRnVuY3Rpb24iLCJ0ZXh0Q29uc3RhbnQiLCJ0ZXh0RnVuY3Rpb24iLCJlYXNlQ3ViaWNJbk91dCIsImludGVycG9sYXRlUmdiQmFzaXMiLCJzY2hlbWUiLCJpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmciLCJjIiwicmFtcCIsImQzQ2hyb21hdGljLmludGVycG9sYXRlQnVHbiIsImQzQ2hyb21hdGljLmludGVycG9sYXRlT3JSZCIsImQzQ2hyb21hdGljLmludGVycG9sYXRlUHVCdSIsImQzQ2hyb21hdGljLmludGVycG9sYXRlWWxHbkJ1IiwiZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVCbHVlcyIsImQzQ2hyb21hdGljLmludGVycG9sYXRlT3JhbmdlcyIsImQzQ2hyb21hdGljLmludGVycG9sYXRlR3JlZW5zIiwiZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVQdXJwbGVzIiwiZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVSZWRzIiwiZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVHcmV5cyIsInNjYWxlU2VxdWVudGlhbCIsInNjYWxlQmFuZCIsInNjYWxlTGluZWFyIiwicGkiLCJ0YXUiLCJlcHNpbG9uIiwieCIsInBvaW50WCIsInkiLCJwb2ludFkiLCJwb2ludCIsIm5vcHJvcGFnYXRpb24iLCJsb2NhbCIsImVtcHR5IiwiYnJ1c2giLCJub2V2ZW50IiwiZHJhZ0Rpc2FibGUiLCJkcmFnRW5hYmxlIiwicmFuZG9tTm9ybWFsIl0sIm1hcHBpbmdzIjoiOzs7QUFBTyxJQUFJLEtBQUssR0FBRyw4QkFBOEIsQ0FBQzs7QUFFbEQsaUJBQWU7RUFDYixHQUFHLEVBQUUsNEJBQTRCO0VBQ2pDLEtBQUssRUFBRSxLQUFLO0VBQ1osS0FBSyxFQUFFLDhCQUE4QjtFQUNyQyxHQUFHLEVBQUUsc0NBQXNDO0VBQzNDLEtBQUssRUFBRSwrQkFBK0I7Q0FDdkMsQ0FBQzs7QUNORixnQkFBZSxTQUFTLElBQUksRUFBRTtFQUM1QixJQUFJLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxPQUFPLEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ2hGLE9BQU8sVUFBVSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztDQUM1Rjs7QUNIRCxTQUFTLGNBQWMsQ0FBQyxJQUFJLEVBQUU7RUFDNUIsT0FBTyxXQUFXO0lBQ2hCLElB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QUFRO0VBQ2QsUUFBUSxFQUFFLFFBQVE7RUFDbEIsUUFBUSxFQUFFLFFBQVE7RUFDbEIsYUFBYSxFQUFFLFFBQVE7RUFDdkIsUUFBUSxFQUFFLFFBQVE7RUFDbEIsU0FBUyxFQUFFLFFBQVE7RUFDbkIsUUFBUSxFQUFFLFFBQVE7RUFDbEIsU0FBUyxFQUFFLFFBQVE7RUFDbkIsV0FBVyxFQUFFLFFBQVE7RUFDckIsY0FBYyxFQUFFLFFBQVE7RUFDeEIsVUFBVSxFQUFFLFFBQVE7RUFDcEIsVUFBVSxFQUFFLFFBQVE7RUFDcEIsT0FBTyxFQUFFLFFBQVE7RUFDakIsVUFBVSxFQUFFLFFBQVE7RUFDcEIsWUFBWSxFQUFFLFFBQVE7RUFDdEIsYUFBYSxFQUFFLFFBQVE7RUFDdkIsYUFBYSxFQUFFLFFBQVE7RUFDdkIsYUFBYSxFQUFFLFFBQVE7RUFDdkIsYUFBYSxFQUFFLFFBQVE7RUFDdkIsVUFBVSxFQUFFLFFBQVE7RUFDcEIsUUFBUSxFQUFFLFFBQVE7RUFDbEIsV0FBVyxFQUFFLFFBQVE7RUFDckIsT0FBTyxFQUFFLFFBQVE7RUFDakIsT0FBTyxFQUFFLFFBQVE7RUFDakIsVUFBVSxFQUFFLFFBQVE7RUFDcEIsU0FBUyxFQUFFLFFBQVE7RUFDbkIsV0FBVyxFQUFFLFFBQVE7RUFDckIsV0FBVyxFQUFFLFFBQVE7RUFDckIsT0FBTyxFQUFFLFFBQVE7RUFDakIsU0FBUyxFQUFFLFFBQVE7RUFDbkIsVUFBVSxFQUFFLFFBQVE7RUFDcEIsSUFBSSxFQUFFLFFBQVE7RUFDZCxTQUFTLEVBQUUsUUFBUTtFQUNuQixJQUFJLEVBQUUsUUFBUTtFQUNkLEtBQUssRUFBRSxRQUFRO0VBQ2YsV0FBVyxFQUFFLFFBQVE7RUFDckIsSUFBSSxFQUFFLFFBQVE7RUFDZCxRQUFRLEVBQUUsUUFBUTtFQUNsQixPQUFPLEVBQUUsUUFBUTtFQUNqQixTQUFTLEVBQUUsUUFBUTtFQUNuQixNQUFNLEVBQUUsUUFBUTtFQUNoQixLQUFLLEVBQUUsUUFBUTtFQUNmLEtBQUssRUFBRSxRQUFRO0VBQ2YsUUFBUSxFQUFFLFFBQVE7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Q0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2xHLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkcsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLElBQUks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SUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRSxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLEdBQUcsT0FBTztVQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUk7VUFDMUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJO1VBQzFELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1dBQ2xELENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7R0FDeEM7Q0FDRixDQUFDLENBQUMsQ0FBQzs7QUFFSixTQUFTLEdBQUcsQ0FBQyxLQUFLLEVBQUU7RUFDbEIsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMzRCxPQUFPLENBQUMsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDckQ7O0FBRUQsU0FBUyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFD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QUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0lBQ3RCLE9BQU8sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztHQUN0RTtFQUNELElBQUksRUFBRSxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMzQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNqQixDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDakIsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2pCLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzVFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU07SUFDdEMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztHQUNuRTtFQUNELE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUN2RTs7QUFFRCxBQUVDOztBQUVELEFBQWUsU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFO0VBQzVDLE9BQU8sU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0NBQ2pHOztBQUVELEFBQU8sU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFO0VBQ3BDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDWixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ1osSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNaLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUM7Q0FDekI7O0FBRUQsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRTtFQUM3QixRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUU7SUFDcEIsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0dBQ2hGO0VBQ0QsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO0lBQ2xCLE9BQU8sSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztHQUNoRjtFQUNELEdBQUcsRUFBRSxXQUFXO0lBQ2QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxHQUFHO1FBQ3ZCLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHO1FBQ3hDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDN0MsQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsT0FBTyxJQUFJLEdBQUc7TUFDWixRQUFRLEVBQUUsU0FBUyxHQUFHLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUM7TUFDeEQsUUFBUSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUM7TUFDeEQsUUFBUSxFQUFFLFNBQVMsR0FBRyxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO01BQ3hELElBQUksQ0FBQyxPQUFPO0tBQ2IsQ0FBQztHQUNIO0NBQ0YsQ0FBQyxDQUFDLENBQUM7O0FBRUosU0FBUyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQ2xCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDbEQ7O0FBRUQsU0FBUyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQ2xCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0NBQzNDOztBQUVELFNBQVMsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUNuQixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksU0FBUyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztDQUNsRjs7QUFFRCxTQUFTLFFBQVEsQ0FBQyxDQUFDLEVBQUU7RUFDbkIsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssT0FBTyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLElBQUksS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQy9FOztBQUVELFNBQVMsVUFBVSxDQUFDLENBQUMsRUFBRTtFQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsT0FBTyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7RUFDL0QsSUFBSSxFQUFFLENBQUMsWUFBWSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0VBQ25FLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0VBQ3ZDLE9BQU8sSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUN2Rjs7QUFFRCxBQUVDOztBQUVELEFBQU8sU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFO0VBQ3BDLE9BQU8sU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0NBQ2pHOztBQUVELEFBQU8sU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFO0VBQ3BDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDWixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ1osSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNaLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUM7Q0FDekI7O0FBRUQsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRTtFQUM3QixRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUU7SUFDcEIsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0dBQ2hGO0VBQ0QsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO0lBQ2xCLE9BQU8sSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztHQUNoRjtFQUNELEdBQUcsRUFBRSxXQUFXO0lBQ2QsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7R0FDL0I7Q0FDRixDQUFDLENBQUMsQ0FBQzs7QUNwSEosSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPO0lBQ1osQ0FBQyxHQUFHLENBQUMsT0FBTztJQUNaLENBQUMsR0FBRyxDQUFDLE9BQU87SUFDWixDQUFDLEdBQUcsQ0FBQyxPQUFPO0lBQ1osQ0FBQyxHQUFHLENBQUMsT0FBTztJQUNaLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUNWLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRTFCLFNBQVMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFO0VBQzNCLElBQUksQ0FBQyxZQUFZLFNBQVMsRUFBRSxPQUFPLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztFQUMzRSxJQUFJLEVBQUUsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDM0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHO01BQ2IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRztNQUNiLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7TUFDYixDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxLQUFLLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztNQUNyRCxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7TUFDVixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztNQUM5QixDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUNsRCxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0VBQ3BELE9BQU8sSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENB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O0FBRUQsU0FBU0MsYUFBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzVCLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUU7SUFDeEUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0dBQy9CLENBQUM7Q0FDSDs7QUFFRCxBQUFPLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNkLE9BQU8sQ0FBQyxHQUFHRCxRQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUdFLFVBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQzVHOztBQUVELEFBQU8sU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFO0VBQ3ZCLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDL0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHRCxhQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBR0MsVUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7R0FDbEUsQ0FBQztDQUNIOztBQUVELEFBQWUsU0FBUyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxDQUFDLEdBQUdGLFFBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUdFLFVBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQ3REOztBQ3ZCRCxxQkFBZSxDQUFDLFNBQVMsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUNuQyxJQUFJQyxRQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDOztFQUVyQixTQUFTQyxNQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtJQUN2QixJQUFJLENBQUMsR0FBR0QsUUFBSyxDQUFDLENBQUMsS0FBSyxHQUFHRSxHQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHQSxHQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELENBQUMsR0FBR0YsUUFBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6QixDQUFDLEdBQUdBLFFBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRCxPQUFPLFNBQVMsQ0FBQyxFQUFFO01BQ2pCLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2YsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDZixLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNmLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQzNCLE9BQU8sS0FBSyxHQUFHLEVBQUUsQ0FBQztLQUNuQixDQUFDO0dBQ0g7O0VBRURDLE1BQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDOztFQUVyQixPQUFPQSxNQUFHLENBQUM7Q0FDWixFQUFFLENBQUMsQ0FBQyxDQUFDOztBQUVOLFNBQVMsU0FBUyxDQUFDLE1BQU0sRUFBRTtFQUN6QixPQUFPLFNBQVMsTUFBTSxFQUFFO0lBQ3RCLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNO1FBQ2pCLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDaEIsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNoQixDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLENBQUMsRUFBRUQsUUFBSyxDQUFDO0lBQ2IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7TUFDdEJBLFFBQUssR0FBR0UsR0FBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQzVCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0YsUUFBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDcEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxRQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNwQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLFFBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCO0lBQ0QsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2RBLFFBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLE9BQU8sU0FBUyxDQUFDLEVBQUU7TUFDakJBLFFBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2ZBLFFBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2ZBLFFBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2YsT0FBT0EsUUFBSyxHQUFHLEVBQUUsQ0FBQztLQUNuQixDQUFDO0dBQ0gsQ0FBQztDQUNIOztBQUVELEFBQU8sSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDRyxPQUFLLENBQUMsQ0FBQztBQUN2QyxBQUFPLElBQUksY0FBYyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUM7O0FDcERsRCxjQUFlLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM1QixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO01BQ3JCLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7TUFDbkMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztNQUNqQixDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO01BQ2pCLENBQUMsQ0FBQzs7RUFFTixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdDLFdBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbEQsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0VBRWhDLE9BQU8sU0FBUyxDQUFDLEVBQUU7SUFDakIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxPQUFPLENBQUMsQ0FBQztHQUNWLENBQUM7Q0FDSDs7QUNoQkQsV0FBZSxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDNUIsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUM7RUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRTtJQUNqQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7R0FDaEMsQ0FBQztDQUNIOztBQ0xELHdCQUFlLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFO0lBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7R0FDbEIsQ0FBQztDQUNIOztBQ0ZELGFBQWUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzVCLElBQUksQ0FBQyxHQUFHLEVBQUU7TUFDTixDQUFDLEdBQUcsRUFBRTtNQUNOLENBQUMsQ0FBQzs7RUFFTixJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDaEQsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDOztFQUVoRCxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7SUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7TUFDVixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLFdBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDMUIsTUFBTTtNQUNMLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDYjtHQUNGOztFQUVELE9BQU8sU0FBUyxDQUFDLEVBQUU7SUFDakIsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsT0FBTyxDQUFDLENBQUM7R0FDVixDQUFDO0NBQ0g7O0FDcEJELElBQUksR0FBRyxHQUFHLDZDQUE2QztJQUNuRCxHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQzs7QUFFdEMsU0FBUyxJQUFJLENBQUMsQ0FBQyxFQUFFO0VBQ2YsT0FBTyxXQUFXO0lBQ2hCLE9BQU8sQ0FBQyxDQUFDO0dBQ1YsQ0FBQztDQUNIOztBQUVELFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRTtFQUNkLE9BQU8sU0FBUyxDQUFDLEVBQUU7SUFDakIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0dBQ2xCLENBQUM7Q0FDSDs7QUFFRCx3QkFBZSxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDNUIsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUM7TUFDdEMsRUFBRTtNQUNGLEVBQUU7TUFDRixFQUFFO01BQ0YsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNOLENBQUMsR0FBRyxFQUFFO01BQ04sQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7O0VBR1gsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7OztFQUd2QixPQUFPLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1VBQ2hCLEVBQUUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDekIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRTtNQUN4QixFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDckIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztXQUNoQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDbEI7SUFDRCxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7TUFDakMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztXQUNoQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDbEIsTUFBTTtNQUNMLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztNQUNkLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRUMsaUJBQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25DO0lBQ0QsRUFBRSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUM7R0FDcEI7OztFQUdELElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDakIsRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNoQixDQUFDLENBQUMsRUFBRSxDQUFD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LEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUM7TUFDMUQsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUVBLGlCQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM5RSxNQUFNLElBQUksQ0FBQyxFQUFFO01BQ1osQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztLQUMzQztHQUNGOztFQUVELFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7TUFDWCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRUEsaUJBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzdFLE1BQU0sSUFBSSxDQUFDLEVBQUU7TUFDWixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO0tBQzFDO0dBQ0Y7O0VBRUQsU0FBUyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDbkMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7TUFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO01BQ3hELENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUVBLGlCQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUVBLGlCQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN0RSxNQUFNLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFO01BQy9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztLQUNqRDtHQUNGOztFQUVELE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3BCLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDTixDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1gsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4RSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENB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Q0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7SUFDMUQsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1YsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNO01BQzdCLEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU07TUFDOUMsU0FBUyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNO0tBQy9EO0dBQ0Y7RUFDRCxPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3REOztBQ1JNLElBQUksY0FBYyxDQUFDOztBQUUxQix1QkFBZSxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDNUIsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUM1QixJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUN0QixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2xCLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2YsQ0FBQyxHQUFHLFFBQVEsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENB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SSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNwRDs7QUFFRCxTQUFTLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRTtJQUN6QixJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixPQUFPLElBQUksQ0FBQztHQUNiO0VBQ0QsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzlEOztBQUVELFNBQVMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUNsQixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ25EOztBQUVELEFBQWUsU0FBU00sY0FBWSxDQUFDLE1BQU0sRUFBRTtFQUMzQyxJQUFJLGVBQWUsR0FBRyxNQUFNLENBQUMsUUFBUTtNQUNqQyxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUk7TUFDekIsV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJO01BQ3pCLGNBQWMsR0FBRyxNQUFNLENBQUMsT0FBTztNQUMvQixlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUk7TUFDN0Isb0JBQW9CLEdBQUcsTUFBTSxDQUFDLFNBQVM7TUFDdkMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNO01BQzdCLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7O0VBRTVDLElBQUksUUFBUSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUM7TUFDbkMsWUFBWSxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUM7TUFDM0MsU0FBUyxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUM7TUFDckMsYUFBYSxHQUFHLFlBQVksQ0FBQyxlQUFlLENBQUM7TUFDN0MsY0FBYyxHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztNQUMvQyxrQkFBa0IsR0FBRyxZQUFZLENBQUMsb0JBQW9CLENBQUM7TUFDdkQsT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7TUFDakMsV0FBVyxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUM7TUFDekMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztNQUMzQyxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQzs7RUFFeEQsSUFBSSxPQUFPLEdBQUc7SUFDWixHQUFHLEVBQUUsa0JBQWtCO0lBQ3ZCLEdBQUcsRUFBRSxhQUFhO0lBQ2xCLEdBQUcsRUFBRSxnQkFBZ0I7SUFDckIsR0FBRyxFQUFFLFdBQVc7SUFDaEIsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsZ0JBQWdCO0lBQ3JCLEdBQUcsRUFBRSxnQkFBZ0I7SUFDckIsR0FBRyxFQUFFLGtCQUFrQjtJQUN2QixHQUFHLEVBQUUsWUFBWTtJQUNqQixHQUFHLEVBQUUsWUFBWTtJQUNqQixHQUFHLEVBQUUsZUFBZTtJQUNwQixHQUFHLEVBQUUsa0JBQWtCO0lBQ3ZCLEdBQUcsRUFBRSxpQkFBaUI7SUFDdEIsR0FBRyxFQUFFLGFBQWE7SUFDbEIsR0FBRyxFQUFFLFlBQVk7SUFDakIsR0FBRyxFQUFFLG1CQUFtQjtJQUN4QixHQUFHLEVBQUUsMEJBQTBCO0lBQy9CLEdBQUcsRUFBRSxhQUFhO0lBQ2xCLEdBQUcsRUFBRSx5QkFBeUI7SUFDOUIsR0FBRyxFQUFFLHNCQUFzQjtJQUMzQixHQUFHLEVBQUUsbUJBQW1CO0lBQ3hCLEdBQUcsRUFBRSx5QkFBeUI7SUFDOUIsR0FBRyxFQUFFLHNCQUFzQjtJQUMzQixHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLFVBQVU7SUFDZixHQUFHLEVBQUUsY0FBYztJQUNuQixHQUFHLEVBQUUsVUFBVTtJQUNmLEdBQUcsRUFBRSxvQkFBb0I7R0FDMUIsQ0FBQzs7RUFFRixJQUFJLFVBQVUsR0FBRztJQUNmLEdBQUcsRUFBRSxxQkFBcUI7SUFDMUIsR0FBRyxFQUFFLGdCQUFnQjtJQUNyQixHQUFHLEVBQUUsbUJBQW1CO0lBQ3hCLEdBQUcsRUFBRSxjQUFjO0lBQ25CLEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLG1CQUFtQjtJQUN4QixHQUFHLEVBQUUsbUJBQW1CO0lBQ3hCLEdBQUcsRUFBRSxxQkFBcUI7SUFDMUIsR0FBRyxFQUFFLGVBQWU7SUFDcEIsR0FBRyxFQUFFLGVBQWU7SUFDcEIsR0FBRyxFQUFFLGtCQUFrQjtJQUN2QixHQUFHLEVBQUUscUJBQXFCO0lBQzFCLEdBQUcsRUFBRSxvQkFBb0I7SUFDekIsR0FBRyxFQUFFLGdCQUFnQjtJQUNyQixHQUFHLEVBQUUsZUFBZTtJQUNwQixHQUFHLEVBQUUsbUJBQW1CO0lBQ3hCLEdBQUcsRUFBRSwwQkFBMEI7SUFDL0IsR0FBRyxFQUFFLGdCQUFnQjtJQUNyQixHQUFHLEVBQUUsNEJBQTRCO0lBQ2pDLEdBQUcsRUFBRSx5QkFBeUI7SUFDOUIsR0FBRyxFQUFFLHNCQUFzQjtJQUMzQixHQUFHLEVBQUUsNEJBQTRCO0lBQ2pDLEdBQUcsRUFBRSx5QkFBeUI7SUFDOUIsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxhQUFhO0lBQ2xCLEdBQUcsRUFBRSxpQkFBaUI7SUFDdEIsR0FBRyxFQUFFLGFBQWE7SUFDbEIsR0FBRyxFQUFFLG9CQUFvQjtHQUMxQixDQUFDOztFQUVGLElBQUksTUFBTSxHQUFHO0lBQ1gsR0FBRyxFQUFFLGlCQUFpQjtJQUN0QixHQUFHLEVBQUUsWUFBWTtJQUNqQixHQUFHLEVBQUUsZUFBZTtJQUNwQixHQUFHLEVBQUUsVUFBVTtJQUNmLEdBQUcsRUFBRSxtQkFBbUI7SUFDeEIsR0FBRyxFQUFFLGVBQWU7SUFDcEIsR0FBRyxFQUFFLGVBQWU7SUFDcEIsR0FBRyxFQUFFLGlCQUFpQjtJQUN0QixHQUFHLEVBQUUsV0FBVztJQUNoQixHQUFHLEVBQUUsV0FBVztJQUNoQixHQUFHLEVBQUUsY0FBYztJQUNuQixHQUFHLEVBQUUsaUJBQWlCO0lBQ3RCLEdBQUcsRUFBRSxnQkFBZ0I7SUFDckIsR0FBRyxFQUFFLFlBQVk7SUFDakIsR0FBRyxFQUFFLFdBQVc7SUFDaEIsR0FBRyxFQUFFLGtCQUFrQjtJQUN2QixHQUFHLEVBQUUseUJBQXlCO0lBQzlCLEdBQUcsRUFBRSxZQUFZO0lBQ2pCLEdBQUcsRUFBRSx3QkFBd0I7SUFDN0IsR0FBRyxFQUFFLHFCQUFxQjtJQUMxQixHQUFHLEVBQUUsa0JBQWtCO0lBQ3ZCLEdBQUcsRUFBRSx3QkFBd0I7SUFDN0IsR0FBRyxFQUFFLHFCQUFxQjtJQUMxQixHQUFHLEVBQUUsZUFBZTtJQUNwQixHQUFHLEVBQUUsZUFBZTtJQUNwQixHQUFHLEVBQUUsU0FBUztJQUNkLEdBQUcsRUFBRSxhQUFhO0lBQ2xCLEdBQUcsRUFBRSxTQUFTO0lBQ2QsR0FBRyxFQUFFLG1CQUFtQjtHQUN6QixDQUFDOzs7RUFHRixPQUFPLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7RUFDNUMsT0FBTyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0VBQzVDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztFQUNoRCxVQUFVLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7RUFDbEQsVUFBVSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0VBQ2xELFVBQVUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQzs7RUFFdEQsU0FBUyxTQUFTLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRTtJQUNyQyxPQUFPLFNBQVMsSUFBSSxFQUFFO01BQ3BCLElBQUksTUFBTSxHQUFHLEVBQUU7VUFDWCxDQUFDLEdBQUcsQ0FBQyxDQUFDO1VBQ04sQ0FBQyxHQUFHLENBQUM7VUFDTCxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU07VUFDcEIsQ0FBQztVQUNELEdBQUc7VUFDSCxNQUFNLENBQUM7O01BRVgsSUFBSSxFQUFFLElBQUksWUFBWSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7TUFFcEQsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDZCxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1VBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUNuQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7ZUFDMUUsR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztVQUNqQyxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7VUFDL0MsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUNmLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ1g7T0FDRjs7TUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDbkMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ3hCLENBQUM7R0FDSDs7RUFFRCxTQUFTLFFBQVEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFO0lBQ3BDLE9BQU8sU0FBUyxNQUFNLEVBQUU7TUFDdEIsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztVQUNqQixDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7VUFDakQsSUFBSSxFQUFFQyxNQUFHLENBQUM7TUFDZCxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxDQUFDOzs7TUFHcEMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7TUFHbkMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7OztNQUd4QyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUU7UUFDWixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3JDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFO1VBQ1osSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVBLE1BQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7VUFDckQsSUFBSSxHQUFHQSxNQUFHLEdBQUcsQ0FBQyxJQUFJQSxNQUFHLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQ3JFLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1VBQzFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1VBQzVCLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1VBQ3pCLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pDLE1BQU07VUFDTCxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRUEsTUFBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztVQUNsRCxJQUFJLEdBQUdBLE1BQUcsR0FBRyxDQUFDLElBQUlBLE1BQUcsS0FBSyxDQUFDLEdBQUdDLE1BQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUdBLE1BQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztVQUN2RSxJQUFJLEdBQUdDLEdBQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7VUFDM0MsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7VUFDekIsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7VUFDdEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEM7T0FDRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFO1FBQy9CLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3REYsTUFBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BGLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMs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Q0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNyRTs7QUFFRCxTQUFTLFlBQVksQ0FBQyxLQUFLLEVBQUU7RUFDM0IsSUFBSSxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztFQUN2QyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2hELE9BQU8sR0FBRyxDQUFDO0NBQ1o7O0FBRUQsU0FBUyx3QkFBd0IsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTtFQUM5QyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDaEQ7O0FBRUQsU0FBUyx3QkFBd0IsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTtFQUM5QyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDaEQ7O0FBRUQsU0FBUyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTtFQUMzQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDaEQ7O0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTtFQUN4QyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDaEQ7O0FBRUQsU0FBUyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTtFQUMzQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDaEQ7O0FBRUQsU0FBUyxhQUFhLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUU7RUFDbkMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ2hEOztBQUVELFNBQVMsU0FBUyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFO0VBQy9CLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQzdFOztBQUVELFNBQVMsU0FBUyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFO0VBQy9CLElBQUksQ0FBQyxHQUFHLDhCQUE4QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENB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QUFJLENBQUMsS0FBSztNQUNqQixFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQzs7RUFFbEIsSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUUsTUFBTSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7RUFFL0QsS0FBSyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsR0FBRyxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7SUFDbEcsS0FBSyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtNQUNyRSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDbkIsS0FBSyxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1VBQ3RJLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN2QixRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztXQUNqRDtTQUNGO1FBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMs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O2FBQ3RCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDbEQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ2xELElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO2FBQ3RCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7OztRQUc3QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RixHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQzthQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDO2FBQ1osS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQzthQUN0QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3RCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxD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QUNyQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztHQUN6RDtFQUNELGdCQUFnQixFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3ZDLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0dBQ3JGO0VBQ0QsYUFBYSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDNUMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7R0FDakg7RUFDRCxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0MsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUc7UUFDYixFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUc7UUFDYixHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUU7UUFDYixHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUU7UUFDYixHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUU7UUFDYixHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUU7UUFDYixLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOzs7SUFHbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLENBQUM7OztJQUdwRCxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFO01BQ3JCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7S0FDekQ7OztTQUdJLElBQUksRUFBRSxLQUFLLEdBQUdBLFNBQU8sQ0FBQyxDQUFDLENBQUM7Ozs7O1NBS3hCLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHQSxTQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtNQUMzRCxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0tBQ3pEOzs7U0FHSTtNQUNILElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFO1VBQ2IsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFO1VBQ2IsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7VUFDN0IsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7VUFDN0IsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1VBQ3RCLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztVQUN0QixDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQ0YsSUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQ2pGLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRztVQUNiLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDOzs7TUFHbEIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBR0UsU0FBTyxFQUFFO1FBQy9CLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7T0FDM0Q7O01BRUQsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsT0FBTyxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7S0FDNUk7R0FDRjtFQUNELEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFF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QUFHLEdBQUcsSUFBSSxDQUFDLEdBQUc7TUFDeEIsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRztNQUNsQixFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDakQsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDM0MsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztFQUN4QyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUM3Rjs7O0FBR0QsU0FBUyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRTtFQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3hEOzs7OztBQUtELFNBQVNBLE9BQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtFQUMzQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRztNQUNiLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRztNQUNiLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRztNQUNiLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRztNQUNiLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDbkY7O0FBRUQsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFO0VBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0NBQ3pCOztBQUVELFNBQVMsQ0FBQyxTQUFTLEdBQUc7RUFDcEIsU0FBUyxFQUFFLFdBQVc7SUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7R0FDaEI7RUFDRCxPQUFPLEVBQUUsV0FBVztJQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztHQUNsQjtFQUNELFNBQVMsRUFBRSxXQUFXO0lBQ3BCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUc7SUFDbkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRztJQUNuQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0dBQ2pCO0VBQ0QsT0FBTyxFQUFFLFdBQVc7SUFDbEIsUUFBUSxJQUFJLENBQUMsTUFBTTtNQUNqQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU07TUFDeEQsS0FBSyxDQUFDLEVBQUVBLE9BQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtLQUM5RDtJQUNELElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDckYsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztHQUM3QjtFQUNELEtBQUssRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDcEIsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDOztJQUViLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDZixJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU87SUFDN0MsUUFBUSxJQUFJLENBQUMsTUFBTTtNQUNqQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07TUFDckcsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNO01BQy9CLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUNBLE9BQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUs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QyxJQUFJLENBQUM7RUFDN0IsS0FBSyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0VBQ3pFLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Q0FDNUQsQ0FBQzs7QUFFRixJQUFJLENBQUMsR0FBRztFQUNOLElBQUksRUFBRSxHQUFHO0VBQ1QsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7RUFDN0IsS0FBSyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0VBQ3pFLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Q0FDNUQsQ0FBQzs7QUFFRixJQUFJLEVBQUUs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QVMsQ0FBQyxTQUFTLENBQUM7V0FDckIsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUM7V0FDdEIsSUFBSSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1dBQzFJLElBQUksQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztXQUMxSCxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDO1dBQ3JJLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUM3STs7U0FFSTtNQUNILEtBQUssQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUM7V0FDaEMsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUM7V0FDeEIsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7V0FDZixJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztXQUNmLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDO1dBQ25CLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDM0I7R0FDRjs7RUFFRCxTQUFTLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO0lBQzNCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0dBQ3hEOztFQUVELFNBQVMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7SUFDM0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0dBQ2pCOztFQUVELE9BQU8sQ0FBQyxTQUFTLEdBQUc7SUFDbEIsV0FBVyxFQUFFLFdBQVc7TUFDdEIsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztNQUN6RSxPQUFPLElBQUksQ0FBQztLQUNiO0lBQ0QsS0FBSyxFQUFFLFdBQVc7TUFDaEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDN0QsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUNELEtBQUssRUFBRSxXQUFXO01BQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUNELEdBQUcsRUFBRSxXQUFXO01BQ2QsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUNyRSxPQUFPLElBQUksQ0FBQztLQUNiO0lBQ0QsSUFBSSxFQUFFLFNBQVMsSUFBSSxFQUFFO01BQ25CLFdBQVcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7S0FDdEk7R0FDRixDQUFDOztFQUVGLFNBQVMsT0FBTyxHQUFHO0lBQ2pCLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBT0csU0FBTyxFQUFFLENBQUMsRUFBRTtTQUMzRixJQUFJLFdBQVcsRUFBRSxPQUFPO0lBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsRUFBRSxPQUFPOztJQUUzQyxJQUFJLElBQUksR0FBRyxJQUFJO1FBQ1gsSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUk7UUFDakMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsU0FBUyxHQUFHLElBQUksTUFBTSxXQUFXLEdBQUcsU0FBUyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUN6SCxLQUFLLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUN2QyxLQUFLLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUN2QyxLQUFLLEdBQUdILE9BQUssQ0FBQyxJQUFJLENBQUM7UUFDbkIsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNO1FBQ3JCLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUztRQUMzQixDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO1FBQ3hCLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7UUFDeEIsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRTtRQUN4QixDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO1FBQ3hCLEVBQUU7UUFDRixFQUFFO1FBQ0YsTUFBTTtRQUNOLFFBQVEsR0FBRyxLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxRQUFRO1FBQzNDLEtBQUs7UUFDTCxLQUFLO1FBQ0wsTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDcEIsS0FBSyxHQUFHLE1BQU07UUFDZCxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQzs7SUFFbEQsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO01BQ3RCLEtBQUssQ0FBQyxTQUFTLEdBQUcsU0FBUyxHQUFHO1FBQzVCLENBQUMsRUFBRSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsRUFBRSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO09BQ25ELENBQUM7S0FDSCxNQUFNO01BQ0wsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNyQixFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3JCLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDckIsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN0Qjs7SUFFRCxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ1IsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNSLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDUixFQUFFLEdBQUcsRUFBRSxDQUFDOztJQUVSLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7U0FDbkIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDOztJQUVwQyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQztTQUNwQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOztJQUVuQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7TUFDakIsS0FBSztXQUNBLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDO1dBQ2xDLEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDMUQsTUFBTTtNQUNMLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1dBQ3hCLEVBQUUsQ0FBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQztXQUNwQyxFQUFFLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUM7V0FDakMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLEtBQUssRUFBRSxJQUFJLENBQUM7V0FDbEMsRUFBRSxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7O01BRXRDSSxNQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3pCOztJQUVETCxlQUFhLEVBQUUsQ0FBQztJQUNoQixTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7O0lBRWIsU0FBUyxLQUFLLEdBQUc7TUFDZixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDekIsSUFBSSxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDaEMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDO2FBQzdFLEtBQUssR0FBRyxJQUFJLENBQUM7T0FDbkI7TUFDRCxLQUFLLEdBQUcsTUFBTSxDQUFDO01BQ2YsTUFBTSxHQUFHLElBQUksQ0FBQztNQUNkSSxTQUFPLEVBQUUsQ0FBQztNQUNWLElBQUksRUFBRSxDQUFDO0tBQ1I7O0lBRUQsU0FBUyxJQUFJLEdBQUc7TUFDZCxJQUFJLENBQUMsQ0FBQzs7TUFFTixFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUMxQixFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7TUFFMUIsUUFBUSxJQUFJO1FBQ1YsS0FBSyxVQUFVLENBQUM7UUFDaEIsS0FBSyxTQUFTLEVBQUU7VUFDZCxJQUFJLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1VBQ25GLElBQUksS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7VUFDbkYsTUFBTTtTQUNQO1FBQ0QsS0FBSyxXQUFXLEVBQUU7VUFDaEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztlQUM3RSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1VBQ3ZGLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7ZUFDN0UsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztVQUN2RixNQUFNO1NBQ1A7UUFDRCxLQUFLLFdBQVcsRUFBRTtVQUNoQixJQUFJLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7VUFDMUcsSUFBSSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMs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Q0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7a0JBQzlELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7a0JBQ2hFLE9BQU8sQ0FBQyxJQUFJLFFBQVEsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDO2FBQzVDLENBQUMsQ0FBQyxDQUFDOztZQUVKLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQzs7WUFFaEMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNsRDs7OztRQUlELElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUks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QUksR0FBRyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDN0QsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQzs7SUFFL0QsQUFDQSxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQzs7O0lBR25DLElBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQzs7SUFFM0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6SyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDOzs7Q0FHcEQ7Ozs7Ozs7Ozs7Ozs7OyJ9 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3RleC12aXouYnVuZGxlLmRldi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbmFtZXNwYWNlcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NyZWF0b3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3RvckFsbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3RBbGwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9tYXRjaGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2ZpbHRlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zcGFyc2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZW50ZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jb25zdGFudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9kYXRhLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2V4aXQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbWVyZ2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb3JkZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc29ydC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9jYWxsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL25vZGVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL25vZGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2l6ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lbXB0eS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lYWNoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2F0dHIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy93aW5kb3cuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc3R5bGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcHJvcGVydHkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xhc3NlZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi90ZXh0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2h0bWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcmFpc2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbG93ZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vYXBwZW5kLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luc2VydC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9yZW1vdmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xvbmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGF0dW0uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGlzcGF0Y2guanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zb3VyY2VFdmVudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3BvaW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbW91c2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3RBbGwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FzY2VuZGluZy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0b3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Jpc2VjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbnVtYmVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy92YXJpYW5jZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvZGV2aWF0aW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9leHRlbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3JhbmdlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aWNrcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcXVhbnRpbGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21heC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWVhbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWVkaWFuLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9taW4uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3N1bS5qcyIsIi4uLy4uL3NyYy9tb2R1bGVzL3V0aWxzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvZGVmYXVsdFNvdXJjZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL25vcm1hbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1jb2xsZWN0aW9uL3NyYy9tYXAuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvbmVzdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvYXJyYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL29yZGluYWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2JhbmQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2RlZmluZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY29sb3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL21hdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2xhYi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY3ViZWhlbGl4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9iYXNpcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYmFzaXNDbG9zZWQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2NvbnN0YW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb2xvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcmdiLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9hcnJheS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvZGF0ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvbnVtYmVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9vYmplY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3N0cmluZy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdmFsdWUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JvdW5kLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vZGVjb21wb3NlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vcGFyc2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY3ViZWhlbGl4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jb25zdGFudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbnVtYmVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jb250aW51b3VzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0RGVjaW1hbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2V4cG9uZW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0R3JvdXAuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXROdW1lcmFscy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFNwZWNpZmllci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFRyaW0uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRQcmVmaXhBdXRvLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0Um91bmRlZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFR5cGVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvaWRlbnRpdHkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9sb2NhbGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9kZWZhdWx0TG9jYWxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uRml4ZWQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25QcmVmaXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25Sb3VuZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdGlja0Zvcm1hdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbGluZWFyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2ludGVydmFsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21pbGxpc2Vjb25kLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2R1cmF0aW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3NlY29uZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9taW51dGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaG91ci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9kYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvd2Vlay5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9tb250aC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy95ZWFyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y01pbnV0ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNIb3VyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y0RheS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNXZWVrLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y01vbnRoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y1llYXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2xvY2FsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvZGVmYXVsdExvY2FsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvaXNvRm9ybWF0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9pc29QYXJzZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvc2VxdWVudGlhbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1kaXNwYXRjaC9zcmMvZGlzcGF0Y2guanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL3RpbWVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lb3V0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2NoZWR1bGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvaW50ZXJydXB0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi9pbnRlcnJ1cHQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90d2Vlbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2ludGVycG9sYXRlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vYXR0ci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2F0dHJUd2Vlbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2RlbGF5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZHVyYXRpb24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lYXNlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZmlsdGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vbWVyZ2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9vbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3JlbW92ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdEFsbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdGlvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3N0eWxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGVUd2Vlbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RleHQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90cmFuc2l0aW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvY3ViaWMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL3RyYW5zaXRpb24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY29sb3JzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvY2F0ZWdvcnkxMC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL0FjY2VudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL0RhcmsyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvUGFpcmVkLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvUGFzdGVsMS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL1Bhc3RlbDIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9TZXQxLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvU2V0Mi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL1NldDMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9yYW1wLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL0JyQkcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvUFJHbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9QaVlHLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1B1T3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvUmRCdS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9SZEd5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1JkWWxCdS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9SZFlsR24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvU3BlY3RyYWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL0J1R24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL0J1UHUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL0duQnUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL09yUmQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL1B1QnVHbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvUHVCdS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvUHVSZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvUmRQdS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvWWxHbkJ1LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9ZbEduLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9ZbE9yQnIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL1lsT3JSZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtc2luZ2xlL0JsdWVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvR3JlZW5zLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvR3JleXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLXNpbmdsZS9QdXJwbGVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvUmVkcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtc2luZ2xlL09yYW5nZXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL2N1YmVoZWxpeC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvcmFpbmJvdy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvc2luZWJvdy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvdmlyaWRpcy5qcyIsIi4uLy4uL3NyYy9tb2R1bGVzL2NvbG9ycy5qcyIsIi4uLy4uL3NyYy9tb2R1bGVzL1Rvb2xiYXIuanMiLCIuLi8uLi9zcmMvbW9kdWxlcy9Ub29sdGlwLmpzIiwiLi4vLi4vc3JjL21vZHVsZXMvSGVhdG1hcC5qcyIsIi4uLy4uL3NyYy9tb2R1bGVzL0RlbmRyb0hlYXRtYXBDb25maWcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvY291bnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvZWFjaC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9lYWNoQmVmb3JlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2VhY2hBZnRlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9zdW0uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvc29ydC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9wYXRoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2FuY2VzdG9ycy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9kZXNjZW5kYW50cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9sZWF2ZXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvbGlua3MuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXhpcy9zcmMvYXJyYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXhpcy9zcmMvaWRlbnRpdHkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXhpcy9zcmMvYXhpcy5qcyIsIi4uLy4uL3NyYy9tb2R1bGVzL25ld2ljay5qcyIsIi4uLy4uL3NyYy9tb2R1bGVzL0RlbmRyb2dyYW0uanMiLCIuLi8uLi9zcmMvbW9kdWxlcy9EZW5kcm9IZWF0bWFwLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXBhdGgvc3JjL3BhdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2NvbnN0YW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9saW5lYXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BvaW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9saW5lLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcmVhLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXJkaW5hbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvbW9ub3RvbmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZHJhZy9zcmMvbm9ldmVudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9ub2RyYWcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZHJhZy9zcmMvZXZlbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYnJ1c2gvc3JjL2NvbnN0YW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9ldmVudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1icnVzaC9zcmMvbm9ldmVudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1icnVzaC9zcmMvYnJ1c2guanMiLCIuLi8uLi9zcmMvbW9kdWxlcy9rZGUuanMiLCIuLi8uLi9zcmMvbW9kdWxlcy9Hcm91cGVkVmlvbGluLmpzIiwiLi4vLi4vc3JjL21vZHVsZXMvR2VuZU1vZGVsLmpzIiwiLi4vLi4vc3JjL21vZHVsZXMvSXNvZm9ybVRyYWNrVmlld2VyLmpzIiwiLi4vLi4vc3JjL0dURXhWaXouanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHZhciB4aHRtbCA9IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHN2ZzogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB4aHRtbDogeGh0bWwsXG4gIHhsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgeG1sOiBcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wiXG59O1xuIiwiaW1wb3J0IG5hbWVzcGFjZXMgZnJvbSBcIi4vbmFtZXNwYWNlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBwcmVmaXggPSBuYW1lICs9IFwiXCIsIGkgPSBwcmVmaXguaW5kZXhPZihcIjpcIik7XG4gIGlmIChpID49IDAgJiYgKHByZWZpeCA9IG5hbWUuc2xpY2UoMCwgaSkpICE9PSBcInhtbG5zXCIpIG5hbWUgPSBuYW1lLnNsaWNlKGkgKyAxKTtcbiAgcmV0dXJuIG5hbWVzcGFjZXMuaGFzT3duUHJvcGVydHkocHJlZml4KSA/IHtzcGFjZTogbmFtZXNwYWNlc1twcmVmaXhdLCBsb2NhbDogbmFtZX0gOiBuYW1lO1xufVxuIiwiaW1wb3J0IG5hbWVzcGFjZSBmcm9tIFwiLi9uYW1lc3BhY2VcIjtcbmltcG9ydCB7eGh0bWx9IGZyb20gXCIuL25hbWVzcGFjZXNcIjtcblxuZnVuY3Rpb24gY3JlYXRvckluaGVyaXQobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRvY3VtZW50ID0gdGhpcy5vd25lckRvY3VtZW50LFxuICAgICAgICB1cmkgPSB0aGlzLm5hbWVzcGFjZVVSSTtcbiAgICByZXR1cm4gdXJpID09PSB4aHRtbCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJID09PSB4aHRtbFxuICAgICAgICA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSlcbiAgICAgICAgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlModXJpLCBuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRvckZpeGVkKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcbiAgcmV0dXJuIChmdWxsbmFtZS5sb2NhbFxuICAgICAgPyBjcmVhdG9yRml4ZWRcbiAgICAgIDogY3JlYXRvckluaGVyaXQpKGZ1bGxuYW1lKTtcbn1cbiIsImZ1bmN0aW9uIG5vbmUoKSB7fVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IG5vbmUgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuaW1wb3J0IHNlbGVjdG9yIGZyb20gXCIuLi9zZWxlY3RvclwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3Ioc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBzdWJub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChzdWJub2RlID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSkge1xuICAgICAgICBpZiAoXCJfX2RhdGFfX1wiIGluIG5vZGUpIHN1Ym5vZGUuX19kYXRhX18gPSBub2RlLl9fZGF0YV9fO1xuICAgICAgICBzdWJncm91cFtpXSA9IHN1Ym5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImZ1bmN0aW9uIGVtcHR5KCkge1xuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiBzZWxlY3RvciA9PSBudWxsID8gZW1wdHkgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuaW1wb3J0IHNlbGVjdG9yQWxsIGZyb20gXCIuLi9zZWxlY3RvckFsbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3JBbGwoc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBbXSwgcGFyZW50cyA9IFtdLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzdWJncm91cHMucHVzaChzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpO1xuICAgICAgICBwYXJlbnRzLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCBwYXJlbnRzKTtcbn1cbiIsInZhciBtYXRjaGVyID0gZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm1hdGNoZXMoc2VsZWN0b3IpO1xuICB9O1xufTtcblxuaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgaWYgKCFlbGVtZW50Lm1hdGNoZXMpIHtcbiAgICB2YXIgdmVuZG9yTWF0Y2hlcyA9IGVsZW1lbnQud2Via2l0TWF0Y2hlc1NlbGVjdG9yXG4gICAgICAgIHx8IGVsZW1lbnQubXNNYXRjaGVzU2VsZWN0b3JcbiAgICAgICAgfHwgZWxlbWVudC5tb3pNYXRjaGVzU2VsZWN0b3JcbiAgICAgICAgfHwgZWxlbWVudC5vTWF0Y2hlc1NlbGVjdG9yO1xuICAgIG1hdGNoZXIgPSBmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdmVuZG9yTWF0Y2hlcy5jYWxsKHRoaXMsIHNlbGVjdG9yKTtcbiAgICAgIH07XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBtYXRjaGVyO1xuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQgbWF0Y2hlciBmcm9tIFwiLi4vbWF0Y2hlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlcihtYXRjaCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIG1hdGNoLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSB7XG4gICAgICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHVwZGF0ZSkge1xuICByZXR1cm4gbmV3IEFycmF5KHVwZGF0ZS5sZW5ndGgpO1xufVxuIiwiaW1wb3J0IHNwYXJzZSBmcm9tIFwiLi9zcGFyc2VcIjtcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZW50ZXIgfHwgdGhpcy5fZ3JvdXBzLm1hcChzcGFyc2UpLCB0aGlzLl9wYXJlbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVudGVyTm9kZShwYXJlbnQsIGRhdHVtKSB7XG4gIHRoaXMub3duZXJEb2N1bWVudCA9IHBhcmVudC5vd25lckRvY3VtZW50O1xuICB0aGlzLm5hbWVzcGFjZVVSSSA9IHBhcmVudC5uYW1lc3BhY2VVUkk7XG4gIHRoaXMuX25leHQgPSBudWxsO1xuICB0aGlzLl9wYXJlbnQgPSBwYXJlbnQ7XG4gIHRoaXMuX19kYXRhX18gPSBkYXR1bTtcbn1cblxuRW50ZXJOb2RlLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IEVudGVyTm9kZSxcbiAgYXBwZW5kQ2hpbGQ6IGZ1bmN0aW9uKGNoaWxkKSB7IHJldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaWxkLCB0aGlzLl9uZXh0KTsgfSxcbiAgaW5zZXJ0QmVmb3JlOiBmdW5jdGlvbihjaGlsZCwgbmV4dCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgbmV4dCk7IH0sXG4gIHF1ZXJ5U2VsZWN0b3I6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7IHJldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7IH0sXG4gIHF1ZXJ5U2VsZWN0b3JBbGw6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7IHJldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7IH1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuaW1wb3J0IHtFbnRlck5vZGV9IGZyb20gXCIuL2VudGVyXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4uL2NvbnN0YW50XCI7XG5cbnZhciBrZXlQcmVmaXggPSBcIiRcIjsgLy8gUHJvdGVjdCBhZ2FpbnN0IGtleXMgbGlrZSDigJxfX3Byb3RvX1/igJ0uXG5cbmZ1bmN0aW9uIGJpbmRJbmRleChwYXJlbnQsIGdyb3VwLCBlbnRlciwgdXBkYXRlLCBleGl0LCBkYXRhKSB7XG4gIHZhciBpID0gMCxcbiAgICAgIG5vZGUsXG4gICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aDtcblxuICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZml0IGludG8gdXBkYXRlLlxuICAvLyBQdXQgYW55IG51bGwgbm9kZXMgaW50byBlbnRlci5cbiAgLy8gUHV0IGFueSByZW1haW5pbmcgZGF0YSBpbnRvIGVudGVyLlxuICBmb3IgKDsgaSA8IGRhdGFMZW5ndGg7ICsraSkge1xuICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgIG5vZGUuX19kYXRhX18gPSBkYXRhW2ldO1xuICAgICAgdXBkYXRlW2ldID0gbm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW50ZXJbaV0gPSBuZXcgRW50ZXJOb2RlKHBhcmVudCwgZGF0YVtpXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUHV0IGFueSBub24tbnVsbCBub2RlcyB0aGF0IGRvbuKAmXQgZml0IGludG8gZXhpdC5cbiAgZm9yICg7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGJpbmRLZXkocGFyZW50LCBncm91cCwgZW50ZXIsIHVwZGF0ZSwgZXhpdCwgZGF0YSwga2V5KSB7XG4gIHZhciBpLFxuICAgICAgbm9kZSxcbiAgICAgIG5vZGVCeUtleVZhbHVlID0ge30sXG4gICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aCxcbiAgICAgIGtleVZhbHVlcyA9IG5ldyBBcnJheShncm91cExlbmd0aCksXG4gICAgICBrZXlWYWx1ZTtcblxuICAvLyBDb21wdXRlIHRoZSBrZXkgZm9yIGVhY2ggbm9kZS5cbiAgLy8gSWYgbXVsdGlwbGUgbm9kZXMgaGF2ZSB0aGUgc2FtZSBrZXksIHRoZSBkdXBsaWNhdGVzIGFyZSBhZGRlZCB0byBleGl0LlxuICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBMZW5ndGg7ICsraSkge1xuICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgIGtleVZhbHVlc1tpXSA9IGtleVZhbHVlID0ga2V5UHJlZml4ICsga2V5LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApO1xuICAgICAgaWYgKGtleVZhbHVlIGluIG5vZGVCeUtleVZhbHVlKSB7XG4gICAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZUJ5S2V5VmFsdWVba2V5VmFsdWVdID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSBrZXkgZm9yIGVhY2ggZGF0dW0uXG4gIC8vIElmIHRoZXJlIGEgbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBrZXksIGpvaW4gYW5kIGFkZCBpdCB0byB1cGRhdGUuXG4gIC8vIElmIHRoZXJlIGlzIG5vdCAob3IgdGhlIGtleSBpcyBhIGR1cGxpY2F0ZSksIGFkZCBpdCB0byBlbnRlci5cbiAgZm9yIChpID0gMDsgaSA8IGRhdGFMZW5ndGg7ICsraSkge1xuICAgIGtleVZhbHVlID0ga2V5UHJlZml4ICsga2V5LmNhbGwocGFyZW50LCBkYXRhW2ldLCBpLCBkYXRhKTtcbiAgICBpZiAobm9kZSA9IG5vZGVCeUtleVZhbHVlW2tleVZhbHVlXSkge1xuICAgICAgdXBkYXRlW2ldID0gbm9kZTtcbiAgICAgIG5vZGUuX19kYXRhX18gPSBkYXRhW2ldO1xuICAgICAgbm9kZUJ5S2V5VmFsdWVba2V5VmFsdWVdID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgZW50ZXJbaV0gPSBuZXcgRW50ZXJOb2RlKHBhcmVudCwgZGF0YVtpXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGFueSByZW1haW5pbmcgbm9kZXMgdGhhdCB3ZXJlIG5vdCBib3VuZCB0byBkYXRhIHRvIGV4aXQuXG4gIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChub2RlQnlLZXlWYWx1ZVtrZXlWYWx1ZXNbaV1dID09PSBub2RlKSkge1xuICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIGRhdGEgPSBuZXcgQXJyYXkodGhpcy5zaXplKCkpLCBqID0gLTE7XG4gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKGQpIHsgZGF0YVsrK2pdID0gZDsgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICB2YXIgYmluZCA9IGtleSA/IGJpbmRLZXkgOiBiaW5kSW5kZXgsXG4gICAgICBwYXJlbnRzID0gdGhpcy5fcGFyZW50cyxcbiAgICAgIGdyb3VwcyA9IHRoaXMuX2dyb3VwcztcblxuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHZhbHVlID0gY29uc3RhbnQodmFsdWUpO1xuXG4gIGZvciAodmFyIG0gPSBncm91cHMubGVuZ3RoLCB1cGRhdGUgPSBuZXcgQXJyYXkobSksIGVudGVyID0gbmV3IEFycmF5KG0pLCBleGl0ID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIHZhciBwYXJlbnQgPSBwYXJlbnRzW2pdLFxuICAgICAgICBncm91cCA9IGdyb3Vwc1tqXSxcbiAgICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICAgIGRhdGEgPSB2YWx1ZS5jYWxsKHBhcmVudCwgcGFyZW50ICYmIHBhcmVudC5fX2RhdGFfXywgaiwgcGFyZW50cyksXG4gICAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aCxcbiAgICAgICAgZW50ZXJHcm91cCA9IGVudGVyW2pdID0gbmV3IEFycmF5KGRhdGFMZW5ndGgpLFxuICAgICAgICB1cGRhdGVHcm91cCA9IHVwZGF0ZVtqXSA9IG5ldyBBcnJheShkYXRhTGVuZ3RoKSxcbiAgICAgICAgZXhpdEdyb3VwID0gZXhpdFtqXSA9IG5ldyBBcnJheShncm91cExlbmd0aCk7XG5cbiAgICBiaW5kKHBhcmVudCwgZ3JvdXAsIGVudGVyR3JvdXAsIHVwZGF0ZUdyb3VwLCBleGl0R3JvdXAsIGRhdGEsIGtleSk7XG5cbiAgICAvLyBOb3cgY29ubmVjdCB0aGUgZW50ZXIgbm9kZXMgdG8gdGhlaXIgZm9sbG93aW5nIHVwZGF0ZSBub2RlLCBzdWNoIHRoYXRcbiAgICAvLyBhcHBlbmRDaGlsZCBjYW4gaW5zZXJ0IHRoZSBtYXRlcmlhbGl6ZWQgZW50ZXIgbm9kZSBiZWZvcmUgdGhpcyBub2RlLFxuICAgIC8vIHJhdGhlciB0aGFuIGF0IHRoZSBlbmQgb2YgdGhlIHBhcmVudCBub2RlLlxuICAgIGZvciAodmFyIGkwID0gMCwgaTEgPSAwLCBwcmV2aW91cywgbmV4dDsgaTAgPCBkYXRhTGVuZ3RoOyArK2kwKSB7XG4gICAgICBpZiAocHJldmlvdXMgPSBlbnRlckdyb3VwW2kwXSkge1xuICAgICAgICBpZiAoaTAgPj0gaTEpIGkxID0gaTAgKyAxO1xuICAgICAgICB3aGlsZSAoIShuZXh0ID0gdXBkYXRlR3JvdXBbaTFdKSAmJiArK2kxIDwgZGF0YUxlbmd0aCk7XG4gICAgICAgIHByZXZpb3VzLl9uZXh0ID0gbmV4dCB8fCBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZSA9IG5ldyBTZWxlY3Rpb24odXBkYXRlLCBwYXJlbnRzKTtcbiAgdXBkYXRlLl9lbnRlciA9IGVudGVyO1xuICB1cGRhdGUuX2V4aXQgPSBleGl0O1xuICByZXR1cm4gdXBkYXRlO1xufVxuIiwiaW1wb3J0IHNwYXJzZSBmcm9tIFwiLi9zcGFyc2VcIjtcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZXhpdCB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdGlvbikge1xuXG4gIGZvciAodmFyIGdyb3VwczAgPSB0aGlzLl9ncm91cHMsIGdyb3VwczEgPSBzZWxlY3Rpb24uX2dyb3VwcywgbTAgPSBncm91cHMwLmxlbmd0aCwgbTEgPSBncm91cHMxLmxlbmd0aCwgbSA9IE1hdGgubWluKG0wLCBtMSksIG1lcmdlcyA9IG5ldyBBcnJheShtMCksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAwID0gZ3JvdXBzMFtqXSwgZ3JvdXAxID0gZ3JvdXBzMVtqXSwgbiA9IGdyb3VwMC5sZW5ndGgsIG1lcmdlID0gbWVyZ2VzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cDBbaV0gfHwgZ3JvdXAxW2ldKSB7XG4gICAgICAgIG1lcmdlW2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKDsgaiA8IG0wOyArK2opIHtcbiAgICBtZXJnZXNbal0gPSBncm91cHMwW2pdO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24obWVyZ2VzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IC0xLCBtID0gZ3JvdXBzLmxlbmd0aDsgKytqIDwgbTspIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IGdyb3VwLmxlbmd0aCAtIDEsIG5leHQgPSBncm91cFtpXSwgbm9kZTsgLS1pID49IDA7KSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIGlmIChuZXh0ICYmIG5leHQgIT09IG5vZGUubmV4dFNpYmxpbmcpIG5leHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgbmV4dCk7XG4gICAgICAgIG5leHQgPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBhcmUpIHtcbiAgaWYgKCFjb21wYXJlKSBjb21wYXJlID0gYXNjZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGNvbXBhcmVOb2RlKGEsIGIpIHtcbiAgICByZXR1cm4gYSAmJiBiID8gY29tcGFyZShhLl9fZGF0YV9fLCBiLl9fZGF0YV9fKSA6ICFhIC0gIWI7XG4gIH1cblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzb3J0Z3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzb3J0Z3JvdXAgPSBzb3J0Z3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzb3J0Z3JvdXBbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3J0Z3JvdXAuc29ydChjb21wYXJlTm9kZSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzb3J0Z3JvdXBzLCB0aGlzLl9wYXJlbnRzKS5vcmRlcigpO1xufVxuXG5mdW5jdGlvbiBhc2NlbmRpbmcoYSwgYikge1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzWzBdO1xuICBhcmd1bWVudHNbMF0gPSB0aGlzO1xuICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbm9kZXMgPSBuZXcgQXJyYXkodGhpcy5zaXplKCkpLCBpID0gLTE7XG4gIHRoaXMuZWFjaChmdW5jdGlvbigpIHsgbm9kZXNbKytpXSA9IHRoaXM7IH0pO1xuICByZXR1cm4gbm9kZXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgdmFyIG5vZGUgPSBncm91cFtpXTtcbiAgICAgIGlmIChub2RlKSByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgc2l6ZSA9IDA7XG4gIHRoaXMuZWFjaChmdW5jdGlvbigpIHsgKytzaXplOyB9KTtcbiAgcmV0dXJuIHNpemU7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICF0aGlzLm5vZGUoKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGgsIG5vZGU7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIGNhbGxiYWNrLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IG5hbWVzcGFjZSBmcm9tIFwiLi4vbmFtZXNwYWNlXCI7XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmVOUyhmdWxsbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnQobmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50TlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgdmFsdWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHYpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb25OUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgZWxzZSB0aGlzLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgdik7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMubm9kZSgpO1xuICAgIHJldHVybiBmdWxsbmFtZS5sb2NhbFxuICAgICAgICA/IG5vZGUuZ2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKVxuICAgICAgICA6IG5vZGUuZ2V0QXR0cmlidXRlKGZ1bGxuYW1lKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0clJlbW92ZU5TIDogYXR0clJlbW92ZSkgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckZ1bmN0aW9uTlMgOiBhdHRyRnVuY3Rpb24pXG4gICAgICA6IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJDb25zdGFudE5TIDogYXR0ckNvbnN0YW50KSkpKGZ1bGxuYW1lLCB2YWx1ZSkpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSkge1xuICByZXR1cm4gKG5vZGUub3duZXJEb2N1bWVudCAmJiBub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpIC8vIG5vZGUgaXMgYSBOb2RlXG4gICAgICB8fCAobm9kZS5kb2N1bWVudCAmJiBub2RlKSAvLyBub2RlIGlzIGEgV2luZG93XG4gICAgICB8fCBub2RlLmRlZmF1bHRWaWV3OyAvLyBub2RlIGlzIGEgRG9jdW1lbnRcbn1cbiIsImltcG9ydCBkZWZhdWx0VmlldyBmcm9tIFwiLi4vd2luZG93XCI7XG5cbmZ1bmN0aW9uIHN0eWxlUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlQ29uc3RhbnQobmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbHVlLCBwcmlvcml0eSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlRnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgICBlbHNlIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdiwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICA/IHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgPyBzdHlsZVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IHN0eWxlRnVuY3Rpb25cbiAgICAgICAgICAgIDogc3R5bGVDb25zdGFudCkobmFtZSwgdmFsdWUsIHByaW9yaXR5ID09IG51bGwgPyBcIlwiIDogcHJpb3JpdHkpKVxuICAgICAgOiBzdHlsZVZhbHVlKHRoaXMubm9kZSgpLCBuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0eWxlVmFsdWUobm9kZSwgbmFtZSkge1xuICByZXR1cm4gbm9kZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpXG4gICAgICB8fCBkZWZhdWx0Vmlldyhub2RlKS5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpLmdldFByb3BlcnR5VmFsdWUobmFtZSk7XG59XG4iLCJmdW5jdGlvbiBwcm9wZXJ0eVJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBkZWxldGUgdGhpc1tuYW1lXTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvcGVydHlDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpc1tuYW1lXSA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgZGVsZXRlIHRoaXNbbmFtZV07XG4gICAgZWxzZSB0aGlzW25hbWVdID0gdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICA/IHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgICAgID8gcHJvcGVydHlSZW1vdmUgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gcHJvcGVydHlGdW5jdGlvblxuICAgICAgICAgIDogcHJvcGVydHlDb25zdGFudCkobmFtZSwgdmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKVtuYW1lXTtcbn1cbiIsImZ1bmN0aW9uIGNsYXNzQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcudHJpbSgpLnNwbGl0KC9efFxccysvKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NMaXN0KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuY2xhc3NMaXN0IHx8IG5ldyBDbGFzc0xpc3Qobm9kZSk7XG59XG5cbmZ1bmN0aW9uIENsYXNzTGlzdChub2RlKSB7XG4gIHRoaXMuX25vZGUgPSBub2RlO1xuICB0aGlzLl9uYW1lcyA9IGNsYXNzQXJyYXkobm9kZS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSB8fCBcIlwiKTtcbn1cblxuQ2xhc3NMaXN0LnByb3RvdHlwZSA9IHtcbiAgYWRkOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIGkgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgIGlmIChpIDwgMCkge1xuICAgICAgdGhpcy5fbmFtZXMucHVzaChuYW1lKTtcbiAgICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdGhpcy5fbmFtZXMuam9pbihcIiBcIikpO1xuICAgIH1cbiAgfSxcbiAgcmVtb3ZlOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIGkgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgIGlmIChpID49IDApIHtcbiAgICAgIHRoaXMuX25hbWVzLnNwbGljZShpLCAxKTtcbiAgICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdGhpcy5fbmFtZXMuam9pbihcIiBcIikpO1xuICAgIH1cbiAgfSxcbiAgY29udGFpbnM6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKSA+PSAwO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjbGFzc2VkQWRkKG5vZGUsIG5hbWVzKSB7XG4gIHZhciBsaXN0ID0gY2xhc3NMaXN0KG5vZGUpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gIHdoaWxlICgrK2kgPCBuKSBsaXN0LmFkZChuYW1lc1tpXSk7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRSZW1vdmUobm9kZSwgbmFtZXMpIHtcbiAgdmFyIGxpc3QgPSBjbGFzc0xpc3Qobm9kZSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIGxpc3QucmVtb3ZlKG5hbWVzW2ldKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZFRydWUobmFtZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGNsYXNzZWRBZGQodGhpcywgbmFtZXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkRmFsc2UobmFtZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGNsYXNzZWRSZW1vdmUodGhpcywgbmFtZXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkRnVuY3Rpb24obmFtZXMsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAodmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKSA/IGNsYXNzZWRBZGQgOiBjbGFzc2VkUmVtb3ZlKSh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBuYW1lcyA9IGNsYXNzQXJyYXkobmFtZSArIFwiXCIpO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBsaXN0ID0gY2xhc3NMaXN0KHRoaXMubm9kZSgpKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoIWxpc3QuY29udGFpbnMobmFtZXNbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBjbGFzc2VkRnVuY3Rpb24gOiB2YWx1ZVxuICAgICAgPyBjbGFzc2VkVHJ1ZVxuICAgICAgOiBjbGFzc2VkRmFsc2UpKG5hbWVzLCB2YWx1ZSkpO1xufVxuIiwiZnVuY3Rpb24gdGV4dFJlbW92ZSgpIHtcbiAgdGhpcy50ZXh0Q29udGVudCA9IFwiXCI7XG59XG5cbmZ1bmN0aW9uIHRleHRDb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0RnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyB0ZXh0UmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyB0ZXh0RnVuY3Rpb25cbiAgICAgICAgICA6IHRleHRDb25zdGFudCkodmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKS50ZXh0Q29udGVudDtcbn1cbiIsImZ1bmN0aW9uIGh0bWxSZW1vdmUoKSB7XG4gIHRoaXMuaW5uZXJIVE1MID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gaHRtbENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlubmVySFRNTCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBodG1sRnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLmlubmVySFRNTCA9IHYgPT0gbnVsbCA/IFwiXCIgOiB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2godmFsdWUgPT0gbnVsbFxuICAgICAgICAgID8gaHRtbFJlbW92ZSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gaHRtbEZ1bmN0aW9uXG4gICAgICAgICAgOiBodG1sQ29uc3RhbnQpKHZhbHVlKSlcbiAgICAgIDogdGhpcy5ub2RlKCkuaW5uZXJIVE1MO1xufVxuIiwiZnVuY3Rpb24gcmFpc2UoKSB7XG4gIGlmICh0aGlzLm5leHRTaWJsaW5nKSB0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKHJhaXNlKTtcbn1cbiIsImZ1bmN0aW9uIGxvd2VyKCkge1xuICBpZiAodGhpcy5wcmV2aW91c1NpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcywgdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChsb3dlcik7XG59XG4iLCJpbXBvcnQgY3JlYXRvciBmcm9tIFwiLi4vY3JlYXRvclwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSk7XG4gIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChjcmVhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IGNyZWF0b3IgZnJvbSBcIi4uL2NyZWF0b3JcIjtcbmltcG9ydCBzZWxlY3RvciBmcm9tIFwiLi4vc2VsZWN0b3JcIjtcblxuZnVuY3Rpb24gY29uc3RhbnROdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgYmVmb3JlKSB7XG4gIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSksXG4gICAgICBzZWxlY3QgPSBiZWZvcmUgPT0gbnVsbCA/IGNvbnN0YW50TnVsbCA6IHR5cGVvZiBiZWZvcmUgPT09IFwiZnVuY3Rpb25cIiA/IGJlZm9yZSA6IHNlbGVjdG9yKGJlZm9yZSk7XG4gIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoY3JlYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHNlbGVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IG51bGwpO1xuICB9KTtcbn1cbiIsImZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChyZW1vdmUpO1xufVxuIiwiZnVuY3Rpb24gc2VsZWN0aW9uX2Nsb25lU2hhbGxvdygpIHtcbiAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5jbG9uZU5vZGUoZmFsc2UpLCB0aGlzLm5leHRTaWJsaW5nKTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0aW9uX2Nsb25lRGVlcCgpIHtcbiAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5jbG9uZU5vZGUodHJ1ZSksIHRoaXMubmV4dFNpYmxpbmcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkZWVwKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdChkZWVwID8gc2VsZWN0aW9uX2Nsb25lRGVlcCA6IHNlbGVjdGlvbl9jbG9uZVNoYWxsb3cpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5wcm9wZXJ0eShcIl9fZGF0YV9fXCIsIHZhbHVlKVxuICAgICAgOiB0aGlzLm5vZGUoKS5fX2RhdGFfXztcbn1cbiIsInZhciBmaWx0ZXJFdmVudHMgPSB7fTtcblxuZXhwb3J0IHZhciBldmVudCA9IG51bGw7XG5cbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIGlmICghKFwib25tb3VzZWVudGVyXCIgaW4gZWxlbWVudCkpIHtcbiAgICBmaWx0ZXJFdmVudHMgPSB7bW91c2VlbnRlcjogXCJtb3VzZW92ZXJcIiwgbW91c2VsZWF2ZTogXCJtb3VzZW91dFwifTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaWx0ZXJDb250ZXh0TGlzdGVuZXIobGlzdGVuZXIsIGluZGV4LCBncm91cCkge1xuICBsaXN0ZW5lciA9IGNvbnRleHRMaXN0ZW5lcihsaXN0ZW5lciwgaW5kZXgsIGdyb3VwKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgIGlmICghcmVsYXRlZCB8fCAocmVsYXRlZCAhPT0gdGhpcyAmJiAhKHJlbGF0ZWQuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykgJiA4KSkpIHtcbiAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgZXZlbnQpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY29udGV4dExpc3RlbmVyKGxpc3RlbmVyLCBpbmRleCwgZ3JvdXApIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50MSkge1xuICAgIHZhciBldmVudDAgPSBldmVudDsgLy8gRXZlbnRzIGNhbiBiZSByZWVudHJhbnQgKGUuZy4sIGZvY3VzKS5cbiAgICBldmVudCA9IGV2ZW50MTtcbiAgICB0cnkge1xuICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCB0aGlzLl9fZGF0YV9fLCBpbmRleCwgZ3JvdXApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBldmVudCA9IGV2ZW50MDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lcykge1xuICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uUmVtb3ZlKHR5cGVuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgb24gPSB0aGlzLl9fb247XG4gICAgaWYgKCFvbikgcmV0dXJuO1xuICAgIGZvciAodmFyIGogPSAwLCBpID0gLTEsIG0gPSBvbi5sZW5ndGgsIG87IGogPCBtOyArK2opIHtcbiAgICAgIGlmIChvID0gb25bal0sICghdHlwZW5hbWUudHlwZSB8fCBvLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUpICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLmNhcHR1cmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25bKytpXSA9IG87XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgrK2kpIG9uLmxlbmd0aCA9IGk7XG4gICAgZWxzZSBkZWxldGUgdGhpcy5fX29uO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbkFkZCh0eXBlbmFtZSwgdmFsdWUsIGNhcHR1cmUpIHtcbiAgdmFyIHdyYXAgPSBmaWx0ZXJFdmVudHMuaGFzT3duUHJvcGVydHkodHlwZW5hbWUudHlwZSkgPyBmaWx0ZXJDb250ZXh0TGlzdGVuZXIgOiBjb250ZXh0TGlzdGVuZXI7XG4gIHJldHVybiBmdW5jdGlvbihkLCBpLCBncm91cCkge1xuICAgIHZhciBvbiA9IHRoaXMuX19vbiwgbywgbGlzdGVuZXIgPSB3cmFwKHZhbHVlLCBpLCBncm91cCk7XG4gICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgICAgaWYgKChvID0gb25bal0pLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUgJiYgby5uYW1lID09PSB0eXBlbmFtZS5uYW1lKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIsIG8uY2FwdHVyZSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIgPSBsaXN0ZW5lciwgby5jYXB0dXJlID0gY2FwdHVyZSk7XG4gICAgICAgIG8udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIodHlwZW5hbWUudHlwZSwgbGlzdGVuZXIsIGNhcHR1cmUpO1xuICAgIG8gPSB7dHlwZTogdHlwZW5hbWUudHlwZSwgbmFtZTogdHlwZW5hbWUubmFtZSwgdmFsdWU6IHZhbHVlLCBsaXN0ZW5lcjogbGlzdGVuZXIsIGNhcHR1cmU6IGNhcHR1cmV9O1xuICAgIGlmICghb24pIHRoaXMuX19vbiA9IFtvXTtcbiAgICBlbHNlIG9uLnB1c2gobyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHR5cGVuYW1lLCB2YWx1ZSwgY2FwdHVyZSkge1xuICB2YXIgdHlwZW5hbWVzID0gcGFyc2VUeXBlbmFtZXModHlwZW5hbWUgKyBcIlwiKSwgaSwgbiA9IHR5cGVuYW1lcy5sZW5ndGgsIHQ7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIG9uID0gdGhpcy5ub2RlKCkuX19vbjtcbiAgICBpZiAob24pIGZvciAodmFyIGogPSAwLCBtID0gb24ubGVuZ3RoLCBvOyBqIDwgbTsgKytqKSB7XG4gICAgICBmb3IgKGkgPSAwLCBvID0gb25bal07IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKCh0ID0gdHlwZW5hbWVzW2ldKS50eXBlID09PSBvLnR5cGUgJiYgdC5uYW1lID09PSBvLm5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gby52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBvbiA9IHZhbHVlID8gb25BZGQgOiBvblJlbW92ZTtcbiAgaWYgKGNhcHR1cmUgPT0gbnVsbCkgY2FwdHVyZSA9IGZhbHNlO1xuICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB0aGlzLmVhY2gob24odHlwZW5hbWVzW2ldLCB2YWx1ZSwgY2FwdHVyZSkpO1xuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1c3RvbUV2ZW50KGV2ZW50MSwgbGlzdGVuZXIsIHRoYXQsIGFyZ3MpIHtcbiAgdmFyIGV2ZW50MCA9IGV2ZW50O1xuICBldmVudDEuc291cmNlRXZlbnQgPSBldmVudDtcbiAgZXZlbnQgPSBldmVudDE7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9IGZpbmFsbHkge1xuICAgIGV2ZW50ID0gZXZlbnQwO1xuICB9XG59XG4iLCJpbXBvcnQgZGVmYXVsdFZpZXcgZnJvbSBcIi4uL3dpbmRvd1wiO1xuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50KG5vZGUsIHR5cGUsIHBhcmFtcykge1xuICB2YXIgd2luZG93ID0gZGVmYXVsdFZpZXcobm9kZSksXG4gICAgICBldmVudCA9IHdpbmRvdy5DdXN0b21FdmVudDtcblxuICBpZiAodHlwZW9mIGV2ZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBldmVudCA9IG5ldyBldmVudCh0eXBlLCBwYXJhbXMpO1xuICB9IGVsc2Uge1xuICAgIGV2ZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gICAgaWYgKHBhcmFtcykgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIHBhcmFtcy5idWJibGVzLCBwYXJhbXMuY2FuY2VsYWJsZSksIGV2ZW50LmRldGFpbCA9IHBhcmFtcy5kZXRhaWw7XG4gICAgZWxzZSBldmVudC5pbml0RXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQ29uc3RhbnQodHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2hFdmVudCh0aGlzLCB0eXBlLCBwYXJhbXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEZ1bmN0aW9uKHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHBhcmFtcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGRpc3BhdGNoRnVuY3Rpb25cbiAgICAgIDogZGlzcGF0Y2hDb25zdGFudCkodHlwZSwgcGFyYW1zKSk7XG59XG4iLCJpbXBvcnQgc2VsZWN0aW9uX3NlbGVjdCBmcm9tIFwiLi9zZWxlY3RcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2VsZWN0QWxsIGZyb20gXCIuL3NlbGVjdEFsbFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9maWx0ZXIgZnJvbSBcIi4vZmlsdGVyXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2RhdGEgZnJvbSBcIi4vZGF0YVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9lbnRlciBmcm9tIFwiLi9lbnRlclwiO1xuaW1wb3J0IHNlbGVjdGlvbl9leGl0IGZyb20gXCIuL2V4aXRcIjtcbmltcG9ydCBzZWxlY3Rpb25fbWVyZ2UgZnJvbSBcIi4vbWVyZ2VcIjtcbmltcG9ydCBzZWxlY3Rpb25fb3JkZXIgZnJvbSBcIi4vb3JkZXJcIjtcbmltcG9ydCBzZWxlY3Rpb25fc29ydCBmcm9tIFwiLi9zb3J0XCI7XG5pbXBvcnQgc2VsZWN0aW9uX2NhbGwgZnJvbSBcIi4vY2FsbFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9ub2RlcyBmcm9tIFwiLi9ub2Rlc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9ub2RlIGZyb20gXCIuL25vZGVcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2l6ZSBmcm9tIFwiLi9zaXplXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VtcHR5IGZyb20gXCIuL2VtcHR5XCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VhY2ggZnJvbSBcIi4vZWFjaFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9hdHRyIGZyb20gXCIuL2F0dHJcIjtcbmltcG9ydCBzZWxlY3Rpb25fc3R5bGUgZnJvbSBcIi4vc3R5bGVcIjtcbmltcG9ydCBzZWxlY3Rpb25fcHJvcGVydHkgZnJvbSBcIi4vcHJvcGVydHlcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2xhc3NlZCBmcm9tIFwiLi9jbGFzc2VkXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3RleHQgZnJvbSBcIi4vdGV4dFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9odG1sIGZyb20gXCIuL2h0bWxcIjtcbmltcG9ydCBzZWxlY3Rpb25fcmFpc2UgZnJvbSBcIi4vcmFpc2VcIjtcbmltcG9ydCBzZWxlY3Rpb25fbG93ZXIgZnJvbSBcIi4vbG93ZXJcIjtcbmltcG9ydCBzZWxlY3Rpb25fYXBwZW5kIGZyb20gXCIuL2FwcGVuZFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9pbnNlcnQgZnJvbSBcIi4vaW5zZXJ0XCI7XG5pbXBvcnQgc2VsZWN0aW9uX3JlbW92ZSBmcm9tIFwiLi9yZW1vdmVcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2xvbmUgZnJvbSBcIi4vY2xvbmVcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGF0dW0gZnJvbSBcIi4vZGF0dW1cIjtcbmltcG9ydCBzZWxlY3Rpb25fb24gZnJvbSBcIi4vb25cIjtcbmltcG9ydCBzZWxlY3Rpb25fZGlzcGF0Y2ggZnJvbSBcIi4vZGlzcGF0Y2hcIjtcblxuZXhwb3J0IHZhciByb290ID0gW251bGxdO1xuXG5leHBvcnQgZnVuY3Rpb24gU2VsZWN0aW9uKGdyb3VwcywgcGFyZW50cykge1xuICB0aGlzLl9ncm91cHMgPSBncm91cHM7XG4gIHRoaXMuX3BhcmVudHMgPSBwYXJlbnRzO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sIHJvb3QpO1xufVxuXG5TZWxlY3Rpb24ucHJvdG90eXBlID0gc2VsZWN0aW9uLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFNlbGVjdGlvbixcbiAgc2VsZWN0OiBzZWxlY3Rpb25fc2VsZWN0LFxuICBzZWxlY3RBbGw6IHNlbGVjdGlvbl9zZWxlY3RBbGwsXG4gIGZpbHRlcjogc2VsZWN0aW9uX2ZpbHRlcixcbiAgZGF0YTogc2VsZWN0aW9uX2RhdGEsXG4gIGVudGVyOiBzZWxlY3Rpb25fZW50ZXIsXG4gIGV4aXQ6IHNlbGVjdGlvbl9leGl0LFxuICBtZXJnZTogc2VsZWN0aW9uX21lcmdlLFxuICBvcmRlcjogc2VsZWN0aW9uX29yZGVyLFxuICBzb3J0OiBzZWxlY3Rpb25fc29ydCxcbiAgY2FsbDogc2VsZWN0aW9uX2NhbGwsXG4gIG5vZGVzOiBzZWxlY3Rpb25fbm9kZXMsXG4gIG5vZGU6IHNlbGVjdGlvbl9ub2RlLFxuICBzaXplOiBzZWxlY3Rpb25fc2l6ZSxcbiAgZW1wdHk6IHNlbGVjdGlvbl9lbXB0eSxcbiAgZWFjaDogc2VsZWN0aW9uX2VhY2gsXG4gIGF0dHI6IHNlbGVjdGlvbl9hdHRyLFxuICBzdHlsZTogc2VsZWN0aW9uX3N0eWxlLFxuICBwcm9wZXJ0eTogc2VsZWN0aW9uX3Byb3BlcnR5LFxuICBjbGFzc2VkOiBzZWxlY3Rpb25fY2xhc3NlZCxcbiAgdGV4dDogc2VsZWN0aW9uX3RleHQsXG4gIGh0bWw6IHNlbGVjdGlvbl9odG1sLFxuICByYWlzZTogc2VsZWN0aW9uX3JhaXNlLFxuICBsb3dlcjogc2VsZWN0aW9uX2xvd2VyLFxuICBhcHBlbmQ6IHNlbGVjdGlvbl9hcHBlbmQsXG4gIGluc2VydDogc2VsZWN0aW9uX2luc2VydCxcbiAgcmVtb3ZlOiBzZWxlY3Rpb25fcmVtb3ZlLFxuICBjbG9uZTogc2VsZWN0aW9uX2Nsb25lLFxuICBkYXR1bTogc2VsZWN0aW9uX2RhdHVtLFxuICBvbjogc2VsZWN0aW9uX29uLFxuICBkaXNwYXRjaDogc2VsZWN0aW9uX2Rpc3BhdGNoXG59O1xuXG5leHBvcnQgZGVmYXVsdCBzZWxlY3Rpb247XG4iLCJpbXBvcnQge1NlbGVjdGlvbiwgcm9vdH0gZnJvbSBcIi4vc2VsZWN0aW9uL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCJcbiAgICAgID8gbmV3IFNlbGVjdGlvbihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpXV0sIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKVxuICAgICAgOiBuZXcgU2VsZWN0aW9uKFtbc2VsZWN0b3JdXSwgcm9vdCk7XG59XG4iLCJpbXBvcnQge2V2ZW50fSBmcm9tIFwiLi9zZWxlY3Rpb24vb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBjdXJyZW50ID0gZXZlbnQsIHNvdXJjZTtcbiAgd2hpbGUgKHNvdXJjZSA9IGN1cnJlbnQuc291cmNlRXZlbnQpIGN1cnJlbnQgPSBzb3VyY2U7XG4gIHJldHVybiBjdXJyZW50O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSwgZXZlbnQpIHtcbiAgdmFyIHN2ZyA9IG5vZGUub3duZXJTVkdFbGVtZW50IHx8IG5vZGU7XG5cbiAgaWYgKHN2Zy5jcmVhdGVTVkdQb2ludCkge1xuICAgIHZhciBwb2ludCA9IHN2Zy5jcmVhdGVTVkdQb2ludCgpO1xuICAgIHBvaW50LnggPSBldmVudC5jbGllbnRYLCBwb2ludC55ID0gZXZlbnQuY2xpZW50WTtcbiAgICBwb2ludCA9IHBvaW50Lm1hdHJpeFRyYW5zZm9ybShub2RlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSk7XG4gICAgcmV0dXJuIFtwb2ludC54LCBwb2ludC55XTtcbiAgfVxuXG4gIHZhciByZWN0ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgcmV0dXJuIFtldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0IC0gbm9kZS5jbGllbnRMZWZ0LCBldmVudC5jbGllbnRZIC0gcmVjdC50b3AgLSBub2RlLmNsaWVudFRvcF07XG59XG4iLCJpbXBvcnQgc291cmNlRXZlbnQgZnJvbSBcIi4vc291cmNlRXZlbnRcIjtcbmltcG9ydCBwb2ludCBmcm9tIFwiLi9wb2ludFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlKSB7XG4gIHZhciBldmVudCA9IHNvdXJjZUV2ZW50KCk7XG4gIGlmIChldmVudC5jaGFuZ2VkVG91Y2hlcykgZXZlbnQgPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXTtcbiAgcmV0dXJuIHBvaW50KG5vZGUsIGV2ZW50KTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9uLCByb290fSBmcm9tIFwiLi9zZWxlY3Rpb24vaW5kZXhcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBuZXcgU2VsZWN0aW9uKFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKV0sIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKVxuICAgICAgOiBuZXcgU2VsZWN0aW9uKFtzZWxlY3RvciA9PSBudWxsID8gW10gOiBzZWxlY3Rvcl0sIHJvb3QpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZ1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb21wYXJlKSB7XG4gIGlmIChjb21wYXJlLmxlbmd0aCA9PT0gMSkgY29tcGFyZSA9IGFzY2VuZGluZ0NvbXBhcmF0b3IoY29tcGFyZSk7XG4gIHJldHVybiB7XG4gICAgbGVmdDogZnVuY3Rpb24oYSwgeCwgbG8sIGhpKSB7XG4gICAgICBpZiAobG8gPT0gbnVsbCkgbG8gPSAwO1xuICAgICAgaWYgKGhpID09IG51bGwpIGhpID0gYS5sZW5ndGg7XG4gICAgICB3aGlsZSAobG8gPCBoaSkge1xuICAgICAgICB2YXIgbWlkID0gbG8gKyBoaSA+Pj4gMTtcbiAgICAgICAgaWYgKGNvbXBhcmUoYVttaWRdLCB4KSA8IDApIGxvID0gbWlkICsgMTtcbiAgICAgICAgZWxzZSBoaSA9IG1pZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsbztcbiAgICB9LFxuICAgIHJpZ2h0OiBmdW5jdGlvbihhLCB4LCBsbywgaGkpIHtcbiAgICAgIGlmIChsbyA9PSBudWxsKSBsbyA9IDA7XG4gICAgICBpZiAoaGkgPT0gbnVsbCkgaGkgPSBhLmxlbmd0aDtcbiAgICAgIHdoaWxlIChsbyA8IGhpKSB7XG4gICAgICAgIHZhciBtaWQgPSBsbyArIGhpID4+PiAxO1xuICAgICAgICBpZiAoY29tcGFyZShhW21pZF0sIHgpID4gMCkgaGkgPSBtaWQ7XG4gICAgICAgIGVsc2UgbG8gPSBtaWQgKyAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxvO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gYXNjZW5kaW5nQ29tcGFyYXRvcihmKSB7XG4gIHJldHVybiBmdW5jdGlvbihkLCB4KSB7XG4gICAgcmV0dXJuIGFzY2VuZGluZyhmKGQpLCB4KTtcbiAgfTtcbn1cbiIsImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nXCI7XG5pbXBvcnQgYmlzZWN0b3IgZnJvbSBcIi4vYmlzZWN0b3JcIjtcblxudmFyIGFzY2VuZGluZ0Jpc2VjdCA9IGJpc2VjdG9yKGFzY2VuZGluZyk7XG5leHBvcnQgdmFyIGJpc2VjdFJpZ2h0ID0gYXNjZW5kaW5nQmlzZWN0LnJpZ2h0O1xuZXhwb3J0IHZhciBiaXNlY3RMZWZ0ID0gYXNjZW5kaW5nQmlzZWN0LmxlZnQ7XG5leHBvcnQgZGVmYXVsdCBiaXNlY3RSaWdodDtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHggPT09IG51bGwgPyBOYU4gOiAreDtcbn1cbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBtID0gMCxcbiAgICAgIGkgPSAtMSxcbiAgICAgIG1lYW4gPSAwLFxuICAgICAgdmFsdWUsXG4gICAgICBkZWx0YSxcbiAgICAgIHN1bSA9IDA7XG5cbiAgaWYgKHZhbHVlb2YgPT0gbnVsbCkge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAoIWlzTmFOKHZhbHVlID0gbnVtYmVyKHZhbHVlc1tpXSkpKSB7XG4gICAgICAgIGRlbHRhID0gdmFsdWUgLSBtZWFuO1xuICAgICAgICBtZWFuICs9IGRlbHRhIC8gKyttO1xuICAgICAgICBzdW0gKz0gZGVsdGEgKiAodmFsdWUgLSBtZWFuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKCFpc05hTih2YWx1ZSA9IG51bWJlcih2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkpKSB7XG4gICAgICAgIGRlbHRhID0gdmFsdWUgLSBtZWFuO1xuICAgICAgICBtZWFuICs9IGRlbHRhIC8gKyttO1xuICAgICAgICBzdW0gKz0gZGVsdGEgKiAodmFsdWUgLSBtZWFuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAobSA+IDEpIHJldHVybiBzdW0gLyAobSAtIDEpO1xufVxuIiwiaW1wb3J0IHZhcmlhbmNlIGZyb20gXCIuL3ZhcmlhbmNlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGFycmF5LCBmKSB7XG4gIHZhciB2ID0gdmFyaWFuY2UoYXJyYXksIGYpO1xuICByZXR1cm4gdiA/IE1hdGguc3FydCh2KSA6IHY7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgaSA9IC0xLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXg7XG5cbiAgaWYgKHZhbHVlb2YgPT0gbnVsbCkge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIEZpbmQgdGhlIGZpcnN0IGNvbXBhcmFibGUgdmFsdWUuXG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVzW2ldKSAhPSBudWxsICYmIHZhbHVlID49IHZhbHVlKSB7XG4gICAgICAgIG1pbiA9IG1heCA9IHZhbHVlO1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBDb21wYXJlIHRoZSByZW1haW5pbmcgdmFsdWVzLlxuICAgICAgICAgIGlmICgodmFsdWUgPSB2YWx1ZXNbaV0pICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChtaW4gPiB2YWx1ZSkgbWluID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAobWF4IDwgdmFsdWUpIG1heCA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVsc2Uge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIEZpbmQgdGhlIGZpcnN0IGNvbXBhcmFibGUgdmFsdWUuXG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZXNbaV0sIGksIHZhbHVlcykpICE9IG51bGwgJiYgdmFsdWUgPj0gdmFsdWUpIHtcbiAgICAgICAgbWluID0gbWF4ID0gdmFsdWU7XG4gICAgICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIENvbXBhcmUgdGhlIHJlbWFpbmluZyB2YWx1ZXMuXG4gICAgICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAobWluID4gdmFsdWUpIG1pbiA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKG1heCA8IHZhbHVlKSBtYXggPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gW21pbiwgbWF4XTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gIHN0YXJ0ID0gK3N0YXJ0LCBzdG9wID0gK3N0b3AsIHN0ZXAgPSAobiA9IGFyZ3VtZW50cy5sZW5ndGgpIDwgMiA/IChzdG9wID0gc3RhcnQsIHN0YXJ0ID0gMCwgMSkgOiBuIDwgMyA/IDEgOiArc3RlcDtcblxuICB2YXIgaSA9IC0xLFxuICAgICAgbiA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApKSB8IDAsXG4gICAgICByYW5nZSA9IG5ldyBBcnJheShuKTtcblxuICB3aGlsZSAoKytpIDwgbikge1xuICAgIHJhbmdlW2ldID0gc3RhcnQgKyBpICogc3RlcDtcbiAgfVxuXG4gIHJldHVybiByYW5nZTtcbn1cbiIsInZhciBlMTAgPSBNYXRoLnNxcnQoNTApLFxuICAgIGU1ID0gTWF0aC5zcXJ0KDEwKSxcbiAgICBlMiA9IE1hdGguc3FydCgyKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHZhciByZXZlcnNlLFxuICAgICAgaSA9IC0xLFxuICAgICAgbixcbiAgICAgIHRpY2tzLFxuICAgICAgc3RlcDtcblxuICBzdG9wID0gK3N0b3AsIHN0YXJ0ID0gK3N0YXJ0LCBjb3VudCA9ICtjb3VudDtcbiAgaWYgKHN0YXJ0ID09PSBzdG9wICYmIGNvdW50ID4gMCkgcmV0dXJuIFtzdGFydF07XG4gIGlmIChyZXZlcnNlID0gc3RvcCA8IHN0YXJ0KSBuID0gc3RhcnQsIHN0YXJ0ID0gc3RvcCwgc3RvcCA9IG47XG4gIGlmICgoc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KSkgPT09IDAgfHwgIWlzRmluaXRlKHN0ZXApKSByZXR1cm4gW107XG5cbiAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgc3RhcnQgPSBNYXRoLmNlaWwoc3RhcnQgLyBzdGVwKTtcbiAgICBzdG9wID0gTWF0aC5mbG9vcihzdG9wIC8gc3RlcCk7XG4gICAgdGlja3MgPSBuZXcgQXJyYXkobiA9IE1hdGguY2VpbChzdG9wIC0gc3RhcnQgKyAxKSk7XG4gICAgd2hpbGUgKCsraSA8IG4pIHRpY2tzW2ldID0gKHN0YXJ0ICsgaSkgKiBzdGVwO1xuICB9IGVsc2Uge1xuICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAqIHN0ZXApO1xuICAgIHN0b3AgPSBNYXRoLmNlaWwoc3RvcCAqIHN0ZXApO1xuICAgIHRpY2tzID0gbmV3IEFycmF5KG4gPSBNYXRoLmNlaWwoc3RhcnQgLSBzdG9wICsgMSkpO1xuICAgIHdoaWxlICgrK2kgPCBuKSB0aWNrc1tpXSA9IChzdGFydCAtIGkpIC8gc3RlcDtcbiAgfVxuXG4gIGlmIChyZXZlcnNlKSB0aWNrcy5yZXZlcnNlKCk7XG5cbiAgcmV0dXJuIHRpY2tzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgdmFyIHN0ZXAgPSAoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSxcbiAgICAgIHBvd2VyID0gTWF0aC5mbG9vcihNYXRoLmxvZyhzdGVwKSAvIE1hdGguTE4xMCksXG4gICAgICBlcnJvciA9IHN0ZXAgLyBNYXRoLnBvdygxMCwgcG93ZXIpO1xuICByZXR1cm4gcG93ZXIgPj0gMFxuICAgICAgPyAoZXJyb3IgPj0gZTEwID8gMTAgOiBlcnJvciA+PSBlNSA/IDUgOiBlcnJvciA+PSBlMiA/IDIgOiAxKSAqIE1hdGgucG93KDEwLCBwb3dlcilcbiAgICAgIDogLU1hdGgucG93KDEwLCAtcG93ZXIpIC8gKGVycm9yID49IGUxMCA/IDEwIDogZXJyb3IgPj0gZTUgPyA1IDogZXJyb3IgPj0gZTIgPyAyIDogMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgdmFyIHN0ZXAwID0gTWF0aC5hYnMoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSxcbiAgICAgIHN0ZXAxID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2coc3RlcDApIC8gTWF0aC5MTjEwKSksXG4gICAgICBlcnJvciA9IHN0ZXAwIC8gc3RlcDE7XG4gIGlmIChlcnJvciA+PSBlMTApIHN0ZXAxICo9IDEwO1xuICBlbHNlIGlmIChlcnJvciA+PSBlNSkgc3RlcDEgKj0gNTtcbiAgZWxzZSBpZiAoZXJyb3IgPj0gZTIpIHN0ZXAxICo9IDI7XG4gIHJldHVybiBzdG9wIDwgc3RhcnQgPyAtc3RlcDEgOiBzdGVwMTtcbn1cbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgcCwgdmFsdWVvZikge1xuICBpZiAodmFsdWVvZiA9PSBudWxsKSB2YWx1ZW9mID0gbnVtYmVyO1xuICBpZiAoIShuID0gdmFsdWVzLmxlbmd0aCkpIHJldHVybjtcbiAgaWYgKChwID0gK3ApIDw9IDAgfHwgbiA8IDIpIHJldHVybiArdmFsdWVvZih2YWx1ZXNbMF0sIDAsIHZhbHVlcyk7XG4gIGlmIChwID49IDEpIHJldHVybiArdmFsdWVvZih2YWx1ZXNbbiAtIDFdLCBuIC0gMSwgdmFsdWVzKTtcbiAgdmFyIG4sXG4gICAgICBpID0gKG4gLSAxKSAqIHAsXG4gICAgICBpMCA9IE1hdGguZmxvb3IoaSksXG4gICAgICB2YWx1ZTAgPSArdmFsdWVvZih2YWx1ZXNbaTBdLCBpMCwgdmFsdWVzKSxcbiAgICAgIHZhbHVlMSA9ICt2YWx1ZW9mKHZhbHVlc1tpMCArIDFdLCBpMCArIDEsIHZhbHVlcyk7XG4gIHJldHVybiB2YWx1ZTAgKyAodmFsdWUxIC0gdmFsdWUwKSAqIChpIC0gaTApO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIGkgPSAtMSxcbiAgICAgIHZhbHVlLFxuICAgICAgbWF4O1xuXG4gIGlmICh2YWx1ZW9mID09IG51bGwpIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlc1tpXSkgIT0gbnVsbCAmJiB2YWx1ZSA+PSB2YWx1ZSkge1xuICAgICAgICBtYXggPSB2YWx1ZTtcbiAgICAgICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gQ29tcGFyZSB0aGUgcmVtYWluaW5nIHZhbHVlcy5cbiAgICAgICAgICBpZiAoKHZhbHVlID0gdmFsdWVzW2ldKSAhPSBudWxsICYmIHZhbHVlID4gbWF4KSB7XG4gICAgICAgICAgICBtYXggPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSAhPSBudWxsICYmIHZhbHVlID49IHZhbHVlKSB7XG4gICAgICAgIG1heCA9IHZhbHVlO1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBDb21wYXJlIHRoZSByZW1haW5pbmcgdmFsdWVzLlxuICAgICAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgIT0gbnVsbCAmJiB2YWx1ZSA+IG1heCkge1xuICAgICAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1heDtcbn1cbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBtID0gbixcbiAgICAgIGkgPSAtMSxcbiAgICAgIHZhbHVlLFxuICAgICAgc3VtID0gMDtcblxuICBpZiAodmFsdWVvZiA9PSBudWxsKSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICghaXNOYU4odmFsdWUgPSBudW1iZXIodmFsdWVzW2ldKSkpIHN1bSArPSB2YWx1ZTtcbiAgICAgIGVsc2UgLS1tO1xuICAgIH1cbiAgfVxuXG4gIGVsc2Uge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAoIWlzTmFOKHZhbHVlID0gbnVtYmVyKHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSkpIHN1bSArPSB2YWx1ZTtcbiAgICAgIGVsc2UgLS1tO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtKSByZXR1cm4gc3VtIC8gbTtcbn1cbiIsImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nXCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlclwiO1xuaW1wb3J0IHF1YW50aWxlIGZyb20gXCIuL3F1YW50aWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBpID0gLTEsXG4gICAgICB2YWx1ZSxcbiAgICAgIG51bWJlcnMgPSBbXTtcblxuICBpZiAodmFsdWVvZiA9PSBudWxsKSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICghaXNOYU4odmFsdWUgPSBudW1iZXIodmFsdWVzW2ldKSkpIHtcbiAgICAgICAgbnVtYmVycy5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKCFpc05hTih2YWx1ZSA9IG51bWJlcih2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkpKSB7XG4gICAgICAgIG51bWJlcnMucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHF1YW50aWxlKG51bWJlcnMuc29ydChhc2NlbmRpbmcpLCAwLjUpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIGkgPSAtMSxcbiAgICAgIHZhbHVlLFxuICAgICAgbWluO1xuXG4gIGlmICh2YWx1ZW9mID09IG51bGwpIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlc1tpXSkgIT0gbnVsbCAmJiB2YWx1ZSA+PSB2YWx1ZSkge1xuICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gQ29tcGFyZSB0aGUgcmVtYWluaW5nIHZhbHVlcy5cbiAgICAgICAgICBpZiAoKHZhbHVlID0gdmFsdWVzW2ldKSAhPSBudWxsICYmIG1pbiA+IHZhbHVlKSB7XG4gICAgICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSAhPSBudWxsICYmIHZhbHVlID49IHZhbHVlKSB7XG4gICAgICAgIG1pbiA9IHZhbHVlO1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBDb21wYXJlIHRoZSByZW1haW5pbmcgdmFsdWVzLlxuICAgICAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgIT0gbnVsbCAmJiBtaW4gPiB2YWx1ZSkge1xuICAgICAgICAgICAgbWluID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1pbjtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBpID0gLTEsXG4gICAgICB2YWx1ZSxcbiAgICAgIHN1bSA9IDA7XG5cbiAgaWYgKHZhbHVlb2YgPT0gbnVsbCkge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAodmFsdWUgPSArdmFsdWVzW2ldKSBzdW0gKz0gdmFsdWU7IC8vIE5vdGU6IHplcm8gYW5kIG51bGwgYXJlIGVxdWl2YWxlbnQuXG4gICAgfVxuICB9XG5cbiAgZWxzZSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICh2YWx1ZSA9ICt2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgc3VtICs9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdW07XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCDCqSAyMDE1IC0gMjAxOCBUaGUgQnJvYWQgSW5zdGl0dXRlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgKGh0dHBzOi8vZ2l0aHViLmNvbS9icm9hZGluc3RpdHV0ZS9ndGV4LXZpei9ibG9iL21hc3Rlci9MSUNFTlNFLm1kKVxuICovXG4vKipcbiAqIENyZWF0ZXMgYW4gU1ZHXG4gKiBAcGFyYW0gaWQge1N0cmluZ30gYSBET00gZWxlbWVudCBJRCB0aGF0IHN0YXJ0cyB3aXRoIGEgXCIjXCJcbiAqIEBwYXJhbSB3aWR0aCB7TnVtZXJpY31cbiAqIEBwYXJhbSBoZWlnaHQge051bWVyaWN9XG4gKiBAcGFyYW0gbWFyZ2luIHtPYmplY3R9IHdpdGggdHdvIGF0dHJpYnV0ZXM6IHdpZHRoIGFuZCBoZWlnaHRcbiAqIEByZXR1cm4ge1NlbGVjdGlvbn0gdGhlIGQzIHNlbGVjdGlvbiBvYmplY3Qgb2YgdGhlIFNWR1xuICovXG5cbmltcG9ydCB7c2VsZWN0fSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge3JhbmdlfSBmcm9tIFwiZDMtYXJyYXlcIjtcblxuLyoqXG4gKlxuICogQHBhcmFtIGlkIHtTdHJpbmd9IHRoZSBwYXJlbnQgZG9tIElEXG4gKiBAcGFyYW0gd2lkdGgge051bWVyaWN9OiB0aGUgb3V0ZXIgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge051bWVyaWN9OiB0aGUgb3V0ZXIgaGVpZ2h0XG4gKiBAcGFyYW0gbWFyZ2luIHtPYmplY3R9IHdpdGggYXR0cjogbGVmdCwgdG9wXG4gKiBAcGFyYW0gc3ZnSWQge1N0cmluZ31cbiAqIEByZXR1cm5zIHsqfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3ZnKGlkLCB3aWR0aCwgaGVpZ2h0LCBtYXJnaW4sIHN2Z0lkPXVuZGVmaW5lZCl7XG4gICAgaWYgKHN2Z0lkPT09dW5kZWZpbmVkKSBzdmdJZD1gJHtpZH0tc3ZnYDtcbiAgICByZXR1cm4gc2VsZWN0KFwiI1wiK2lkKS5hcHBlbmQoXCJzdmdcIilcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aClcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgaGVpZ2h0KVxuICAgICAgICAuYXR0cihcImlkXCIsIHN2Z0lkKVxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7bWFyZ2luLmxlZnR9LCAke21hcmdpbi50b3B9KWApXG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBzdmdPYmpcbiAqIEBwYXJhbSBkb3dubG9hZEZpbGVOYW1lIHtTdHJpbmd9XG4gKiBAcGFyYW0gdGVtcERvd25sb2FkRGl2SWQge1N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvd25sb2FkU3ZnKHN2Z09iaiwgZG93bmxvYWRGaWxlTmFtZSwgdGVtcERvd25sb2FkRGl2SWQpe1xuICAgIGNvbnNvbGUubG9nKHN2Z09iaik7XG4gICAgdmFyICRzdmdDb3B5ID0gc3ZnT2JqLmNsb25lKClcbiAgICAuYXR0cihcInZlcnNpb25cIiwgXCIxLjFcIilcbiAgICAuYXR0cihcInhtbG5zXCIsIFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIik7XG5cbiAgICAvLyBwYXJzZSBhbmQgYWRkIHRoZSBDU1Mgc3R5bGluZyB1c2VkIGJ5IHRoZSBTVkdcbiAgICB2YXIgc3R5bGVzID0gcGFyc2VDc3NTdHlsZXMoc3ZnT2JqLmdldCgpKTtcbiAgICAkc3ZnQ29weS5wcmVwZW5kKHN0eWxlcyk7XG5cbiAgICAkKFwiI1wiICsgdGVtcERvd25sb2FkRGl2SWQpLmh0bWwoJycpLmhpZGUoKTtcbiAgICB2YXIgc3ZnSHRtbCA9ICQoXCIjXCIgKyB0ZW1wRG93bmxvYWREaXZJZCkuYXBwZW5kKCRzdmdDb3B5KS5odG1sKCk7XG5cbiAgICB2YXIgc3ZnQmxvYiA9IG5ldyBCbG9iKFtzdmdIdG1sXSwge3R5cGU6IFwiaW1hZ2Uvc3ZnK3htbFwifSk7XG4gICAgc2F2ZUFzKHN2Z0Jsb2IsIGRvd25sb2FkRmlsZU5hbWUpO1xuXG4gICAgLy8gY2xlYXIgdGhlIHRlbXAgZG93bmxvYWQgZGl2XG4gICAgJChcIiNcIiArIHRlbXBEb3dubG9hZERpdklkKS5odG1sKCcnKS5oaWRlKCk7XG59XG4vKipcbiAqIEEgZnVuY3Rpb24gZm9yIHBhcnNpbmcgdGhlIENTUyBzdHlsZSBzaGVldCBhbmQgaW5jbHVkaW5nIHRoZSBzdHlsZSBwcm9wZXJ0aWVzIGluIHRoZSBkb3dubG9hZGFibGUgU1ZHLlxuICogQHBhcmFtIGRvbVxuICogQHJldHVybnMge0VsZW1lbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNzc1N0eWxlcyAoZG9tKSB7XG4gICAgdmFyIHVzZWQgPSBcIlwiO1xuICAgIHZhciBzaGVldHMgPSBkb2N1bWVudC5zdHlsZVNoZWV0cztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2hlZXRzLmxlbmd0aDsgaSsrKSB7IC8vIFRPRE86IHdhbGsgdGhyb3VnaCB0aGlzIGJsb2NrIG9mIGNvZGVcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHNoZWV0c1tpXS5jc3NSdWxlcyA9PSBudWxsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHZhciBydWxlcyA9IHNoZWV0c1tpXS5jc3NSdWxlcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBydWxlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBydWxlID0gcnVsZXNbal07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihydWxlLnN0eWxlKSAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbGVtcztcbiAgICAgICAgICAgICAgICAgICAgLy9Tb21lIHNlbGVjdG9ycyB3b24ndCB3b3JrLCBhbmQgbW9zdCBvZiB0aGVzZSBkb24ndCBtYXR0ZXIuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtcyA9ICQoZG9tKS5maW5kKHJ1bGUuc2VsZWN0b3JUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VkICs9IHJ1bGUuc2VsZWN0b3JUZXh0ICsgXCIgeyBcIiArIHJ1bGUuc3R5bGUuY3NzVGV4dCArIFwiIH1cXG5cIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gSW4gRmlyZWZveCwgaWYgc3R5bGVzaGVldCBvcmlnaW5hdGVzIGZyb20gYSBkaWZmIGRvbWFpbixcbiAgICAgICAgICAgIC8vIHRyeWluZyB0byBhY2Nlc3MgdGhlIGNzc1J1bGVzIHdpbGwgdGhyb3cgYSBTZWN1cml0eUVycm9yLlxuICAgICAgICAgICAgLy8gSGVuY2UsIHdlIG11c3QgdXNlIGEgdHJ5L2NhdGNoIHRvIGhhbmRsZSB0aGlzIGluIEZpcmVmb3hcbiAgICAgICAgICAgIGlmIChlLm5hbWUgIT09ICdTZWN1cml0eUVycm9yJykgdGhyb3cgZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHMuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvY3NzJyk7XG4gICAgcy5pbm5lckhUTUwgPSBcIjwhW0NEQVRBW1xcblwiICsgdXNlZCArIFwiXFxuXV0+XCI7XG5cbiAgICByZXR1cm4gcztcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIGxpc3Qgb2YgeCp5IGRhdGEgb2JqZWN0cyB3aXRoIHJhbmRvbSB2YWx1ZXNcbiAqIFRoZSBkYXRhIG9iamVjdCBoYXMgdGhpcyBzdHJ1Y3R1cmU6IHt4OiB4bGFiZWwsIHk6IHlsYWJlbCwgdmFsdWU6IHNvbWUgdmFsdWUsIGRpc3BsYXlWYWx1ZTogc29tZSB2YWx1ZX1cbiAqIEBwYXJhbSBwYXJcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tTWF0cml4KHBhcj17eDoyMCwgeToyMCwgc2NhbGVGYWN0b3I6MX0pe1xuICAgIGxldCBYID0gcmFuZ2UoMSwgcGFyLngrMSk7IC8vIGdlbmVyYXRlcyBhIDEtYmFzZWQgbGlzdC5cbiAgICBsZXQgWSA9IHJhbmdlKDEsIHBhci55KzEpO1xuICAgIGxldCBkYXRhID0gW107XG4gICAgWC5mb3JFYWNoKCh4KT0+e1xuICAgICAgICB4ID0gJ3gnICsgeC50b1N0cmluZygpO1xuICAgICAgICBZLmZvckVhY2goKHkpPT57XG4gICAgICAgICAgICB5ID0gJ3knICsgeS50b1N0cmluZygpO1xuICAgICAgICAgICAgbGV0IHYgPSBNYXRoLnJhbmRvbSgpKnBhci5zY2FsZUZhY3RvcjtcbiAgICAgICAgICAgIGRhdGEucHVzaCh7XG4gICAgICAgICAgICAgICAgeDogeCxcbiAgICAgICAgICAgICAgICB5OiB5LFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2LFxuICAgICAgICAgICAgICAgIGRpc3BsYXlWYWx1ZTogcGFyc2VGbG9hdCh2LnRvRXhwb25lbnRpYWwoKSkudG9QcmVjaXNpb24oMylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH0pO1xuICAgIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgbGlzdCBvZiByYW5kb20gdmFsdWVzXG4gKiBAcGFyYW0gcGFyXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVJhbmRvbUxpc3QocGFyPXtuOjEwMCwgc2NhbGVGYWN0b3I6MX0pIHtcbiAgICBsZXQgWCA9IHJhbmdlKDAsIHBhci5uKTsgLy8gZ2VuZXJhdGVzIGEgMS1iYXNlZCBsaXN0LlxuICAgIGxldCBkYXRhID0gW107XG4gICAgcmV0dXJuIFgubWFwKCh4KSA9PiBNYXRoLnJhbmRvbSgpICogcGFyLnNjYWxlRmFjdG9yKTtcblxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKTtcbn1cbiIsImltcG9ydCBkZWZhdWx0U291cmNlIGZyb20gXCIuL2RlZmF1bHRTb3VyY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHNvdXJjZVJhbmRvbU5vcm1hbChzb3VyY2UpIHtcbiAgZnVuY3Rpb24gcmFuZG9tTm9ybWFsKG11LCBzaWdtYSkge1xuICAgIHZhciB4LCByO1xuICAgIG11ID0gbXUgPT0gbnVsbCA/IDAgOiArbXU7XG4gICAgc2lnbWEgPSBzaWdtYSA9PSBudWxsID8gMSA6ICtzaWdtYTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgeTtcblxuICAgICAgLy8gSWYgYXZhaWxhYmxlLCB1c2UgdGhlIHNlY29uZCBwcmV2aW91c2x5LWdlbmVyYXRlZCB1bmlmb3JtIHJhbmRvbS5cbiAgICAgIGlmICh4ICE9IG51bGwpIHkgPSB4LCB4ID0gbnVsbDtcblxuICAgICAgLy8gT3RoZXJ3aXNlLCBnZW5lcmF0ZSBhIG5ldyB4IGFuZCB5LlxuICAgICAgZWxzZSBkbyB7XG4gICAgICAgIHggPSBzb3VyY2UoKSAqIDIgLSAxO1xuICAgICAgICB5ID0gc291cmNlKCkgKiAyIC0gMTtcbiAgICAgICAgciA9IHggKiB4ICsgeSAqIHk7XG4gICAgICB9IHdoaWxlICghciB8fCByID4gMSk7XG5cbiAgICAgIHJldHVybiBtdSArIHNpZ21hICogeSAqIE1hdGguc3FydCgtMiAqIE1hdGgubG9nKHIpIC8gcik7XG4gICAgfTtcbiAgfVxuXG4gIHJhbmRvbU5vcm1hbC5zb3VyY2UgPSBzb3VyY2VSYW5kb21Ob3JtYWw7XG5cbiAgcmV0dXJuIHJhbmRvbU5vcm1hbDtcbn0pKGRlZmF1bHRTb3VyY2UpO1xuIiwiZXhwb3J0IHZhciBwcmVmaXggPSBcIiRcIjtcblxuZnVuY3Rpb24gTWFwKCkge31cblxuTWFwLnByb3RvdHlwZSA9IG1hcC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBNYXAsXG4gIGhhczogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIChwcmVmaXggKyBrZXkpIGluIHRoaXM7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIHRoaXNbcHJlZml4ICsga2V5XTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAgdGhpc1twcmVmaXggKyBrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHJlbW92ZTogZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIHByb3BlcnR5ID0gcHJlZml4ICsga2V5O1xuICAgIHJldHVybiBwcm9wZXJ0eSBpbiB0aGlzICYmIGRlbGV0ZSB0aGlzW3Byb3BlcnR5XTtcbiAgfSxcbiAgY2xlYXI6IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSBkZWxldGUgdGhpc1twcm9wZXJ0eV07XG4gIH0sXG4gIGtleXM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIGtleXMucHVzaChwcm9wZXJ0eS5zbGljZSgxKSk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH0sXG4gIHZhbHVlczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSB2YWx1ZXMucHVzaCh0aGlzW3Byb3BlcnR5XSk7XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfSxcbiAgZW50cmllczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGVudHJpZXMgPSBbXTtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgZW50cmllcy5wdXNoKHtrZXk6IHByb3BlcnR5LnNsaWNlKDEpLCB2YWx1ZTogdGhpc1twcm9wZXJ0eV19KTtcbiAgICByZXR1cm4gZW50cmllcztcbiAgfSxcbiAgc2l6ZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNpemUgPSAwO1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSArK3NpemU7XG4gICAgcmV0dXJuIHNpemU7XG4gIH0sXG4gIGVtcHR5OiBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBlYWNoOiBmdW5jdGlvbihmKSB7XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIGYodGhpc1twcm9wZXJ0eV0sIHByb3BlcnR5LnNsaWNlKDEpLCB0aGlzKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gbWFwKG9iamVjdCwgZikge1xuICB2YXIgbWFwID0gbmV3IE1hcDtcblxuICAvLyBDb3B5IGNvbnN0cnVjdG9yLlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTWFwKSBvYmplY3QuZWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7IG1hcC5zZXQoa2V5LCB2YWx1ZSk7IH0pO1xuXG4gIC8vIEluZGV4IGFycmF5IGJ5IG51bWVyaWMgaW5kZXggb3Igc3BlY2lmaWVkIGtleSBmdW5jdGlvbi5cbiAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgdmFyIGkgPSAtMSxcbiAgICAgICAgbiA9IG9iamVjdC5sZW5ndGgsXG4gICAgICAgIG87XG5cbiAgICBpZiAoZiA9PSBudWxsKSB3aGlsZSAoKytpIDwgbikgbWFwLnNldChpLCBvYmplY3RbaV0pO1xuICAgIGVsc2Ugd2hpbGUgKCsraSA8IG4pIG1hcC5zZXQoZihvID0gb2JqZWN0W2ldLCBpLCBvYmplY3QpLCBvKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgb2JqZWN0IHRvIG1hcC5cbiAgZWxzZSBpZiAob2JqZWN0KSBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBtYXAuc2V0KGtleSwgb2JqZWN0W2tleV0pO1xuXG4gIHJldHVybiBtYXA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcDtcbiIsImltcG9ydCBtYXAgZnJvbSBcIi4vbWFwXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIga2V5cyA9IFtdLFxuICAgICAgc29ydEtleXMgPSBbXSxcbiAgICAgIHNvcnRWYWx1ZXMsXG4gICAgICByb2xsdXAsXG4gICAgICBuZXN0O1xuXG4gIGZ1bmN0aW9uIGFwcGx5KGFycmF5LCBkZXB0aCwgY3JlYXRlUmVzdWx0LCBzZXRSZXN1bHQpIHtcbiAgICBpZiAoZGVwdGggPj0ga2V5cy5sZW5ndGgpIHtcbiAgICAgIGlmIChzb3J0VmFsdWVzICE9IG51bGwpIGFycmF5LnNvcnQoc29ydFZhbHVlcyk7XG4gICAgICByZXR1cm4gcm9sbHVwICE9IG51bGwgPyByb2xsdXAoYXJyYXkpIDogYXJyYXk7XG4gICAgfVxuXG4gICAgdmFyIGkgPSAtMSxcbiAgICAgICAgbiA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAga2V5ID0ga2V5c1tkZXB0aCsrXSxcbiAgICAgICAga2V5VmFsdWUsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZXNCeUtleSA9IG1hcCgpLFxuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIHJlc3VsdCA9IGNyZWF0ZVJlc3VsdCgpO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICh2YWx1ZXMgPSB2YWx1ZXNCeUtleS5nZXQoa2V5VmFsdWUgPSBrZXkodmFsdWUgPSBhcnJheVtpXSkgKyBcIlwiKSkge1xuICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZXNCeUtleS5zZXQoa2V5VmFsdWUsIFt2YWx1ZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhbHVlc0J5S2V5LmVhY2goZnVuY3Rpb24odmFsdWVzLCBrZXkpIHtcbiAgICAgIHNldFJlc3VsdChyZXN1bHQsIGtleSwgYXBwbHkodmFsdWVzLCBkZXB0aCwgY3JlYXRlUmVzdWx0LCBzZXRSZXN1bHQpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBlbnRyaWVzKG1hcCwgZGVwdGgpIHtcbiAgICBpZiAoKytkZXB0aCA+IGtleXMubGVuZ3RoKSByZXR1cm4gbWFwO1xuICAgIHZhciBhcnJheSwgc29ydEtleSA9IHNvcnRLZXlzW2RlcHRoIC0gMV07XG4gICAgaWYgKHJvbGx1cCAhPSBudWxsICYmIGRlcHRoID49IGtleXMubGVuZ3RoKSBhcnJheSA9IG1hcC5lbnRyaWVzKCk7XG4gICAgZWxzZSBhcnJheSA9IFtdLCBtYXAuZWFjaChmdW5jdGlvbih2LCBrKSB7IGFycmF5LnB1c2goe2tleTogaywgdmFsdWVzOiBlbnRyaWVzKHYsIGRlcHRoKX0pOyB9KTtcbiAgICByZXR1cm4gc29ydEtleSAhPSBudWxsID8gYXJyYXkuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBzb3J0S2V5KGEua2V5LCBiLmtleSk7IH0pIDogYXJyYXk7XG4gIH1cblxuICByZXR1cm4gbmVzdCA9IHtcbiAgICBvYmplY3Q6IGZ1bmN0aW9uKGFycmF5KSB7IHJldHVybiBhcHBseShhcnJheSwgMCwgY3JlYXRlT2JqZWN0LCBzZXRPYmplY3QpOyB9LFxuICAgIG1hcDogZnVuY3Rpb24oYXJyYXkpIHsgcmV0dXJuIGFwcGx5KGFycmF5LCAwLCBjcmVhdGVNYXAsIHNldE1hcCk7IH0sXG4gICAgZW50cmllczogZnVuY3Rpb24oYXJyYXkpIHsgcmV0dXJuIGVudHJpZXMoYXBwbHkoYXJyYXksIDAsIGNyZWF0ZU1hcCwgc2V0TWFwKSwgMCk7IH0sXG4gICAga2V5OiBmdW5jdGlvbihkKSB7IGtleXMucHVzaChkKTsgcmV0dXJuIG5lc3Q7IH0sXG4gICAgc29ydEtleXM6IGZ1bmN0aW9uKG9yZGVyKSB7IHNvcnRLZXlzW2tleXMubGVuZ3RoIC0gMV0gPSBvcmRlcjsgcmV0dXJuIG5lc3Q7IH0sXG4gICAgc29ydFZhbHVlczogZnVuY3Rpb24ob3JkZXIpIHsgc29ydFZhbHVlcyA9IG9yZGVyOyByZXR1cm4gbmVzdDsgfSxcbiAgICByb2xsdXA6IGZ1bmN0aW9uKGYpIHsgcm9sbHVwID0gZjsgcmV0dXJuIG5lc3Q7IH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT2JqZWN0KCkge1xuICByZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIHNldE9iamVjdChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTWFwKCkge1xuICByZXR1cm4gbWFwKCk7XG59XG5cbmZ1bmN0aW9uIHNldE1hcChtYXAsIGtleSwgdmFsdWUpIHtcbiAgbWFwLnNldChrZXksIHZhbHVlKTtcbn1cbiIsInZhciBhcnJheSA9IEFycmF5LnByb3RvdHlwZTtcblxuZXhwb3J0IHZhciBtYXAgPSBhcnJheS5tYXA7XG5leHBvcnQgdmFyIHNsaWNlID0gYXJyYXkuc2xpY2U7XG4iLCJpbXBvcnQge21hcH0gZnJvbSBcImQzLWNvbGxlY3Rpb25cIjtcbmltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5XCI7XG5cbmV4cG9ydCB2YXIgaW1wbGljaXQgPSB7bmFtZTogXCJpbXBsaWNpdFwifTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JkaW5hbChyYW5nZSkge1xuICB2YXIgaW5kZXggPSBtYXAoKSxcbiAgICAgIGRvbWFpbiA9IFtdLFxuICAgICAgdW5rbm93biA9IGltcGxpY2l0O1xuXG4gIHJhbmdlID0gcmFuZ2UgPT0gbnVsbCA/IFtdIDogc2xpY2UuY2FsbChyYW5nZSk7XG5cbiAgZnVuY3Rpb24gc2NhbGUoZCkge1xuICAgIHZhciBrZXkgPSBkICsgXCJcIiwgaSA9IGluZGV4LmdldChrZXkpO1xuICAgIGlmICghaSkge1xuICAgICAgaWYgKHVua25vd24gIT09IGltcGxpY2l0KSByZXR1cm4gdW5rbm93bjtcbiAgICAgIGluZGV4LnNldChrZXksIGkgPSBkb21haW4ucHVzaChkKSk7XG4gICAgfVxuICAgIHJldHVybiByYW5nZVsoaSAtIDEpICUgcmFuZ2UubGVuZ3RoXTtcbiAgfVxuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBkb21haW4uc2xpY2UoKTtcbiAgICBkb21haW4gPSBbXSwgaW5kZXggPSBtYXAoKTtcbiAgICB2YXIgaSA9IC0xLCBuID0gXy5sZW5ndGgsIGQsIGtleTtcbiAgICB3aGlsZSAoKytpIDwgbikgaWYgKCFpbmRleC5oYXMoa2V5ID0gKGQgPSBfW2ldKSArIFwiXCIpKSBpbmRleC5zZXQoa2V5LCBkb21haW4ucHVzaChkKSk7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gc2xpY2UuY2FsbChfKSwgc2NhbGUpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gb3JkaW5hbCgpXG4gICAgICAgIC5kb21haW4oZG9tYWluKVxuICAgICAgICAucmFuZ2UocmFuZ2UpXG4gICAgICAgIC51bmtub3duKHVua25vd24pO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cbiIsImltcG9ydCB7cmFuZ2UgYXMgc2VxdWVuY2V9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IG9yZGluYWwgZnJvbSBcIi4vb3JkaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiYW5kKCkge1xuICB2YXIgc2NhbGUgPSBvcmRpbmFsKCkudW5rbm93bih1bmRlZmluZWQpLFxuICAgICAgZG9tYWluID0gc2NhbGUuZG9tYWluLFxuICAgICAgb3JkaW5hbFJhbmdlID0gc2NhbGUucmFuZ2UsXG4gICAgICByYW5nZSA9IFswLCAxXSxcbiAgICAgIHN0ZXAsXG4gICAgICBiYW5kd2lkdGgsXG4gICAgICByb3VuZCA9IGZhbHNlLFxuICAgICAgcGFkZGluZ0lubmVyID0gMCxcbiAgICAgIHBhZGRpbmdPdXRlciA9IDAsXG4gICAgICBhbGlnbiA9IDAuNTtcblxuICBkZWxldGUgc2NhbGUudW5rbm93bjtcblxuICBmdW5jdGlvbiByZXNjYWxlKCkge1xuICAgIHZhciBuID0gZG9tYWluKCkubGVuZ3RoLFxuICAgICAgICByZXZlcnNlID0gcmFuZ2VbMV0gPCByYW5nZVswXSxcbiAgICAgICAgc3RhcnQgPSByYW5nZVtyZXZlcnNlIC0gMF0sXG4gICAgICAgIHN0b3AgPSByYW5nZVsxIC0gcmV2ZXJzZV07XG4gICAgc3RlcCA9IChzdG9wIC0gc3RhcnQpIC8gTWF0aC5tYXgoMSwgbiAtIHBhZGRpbmdJbm5lciArIHBhZGRpbmdPdXRlciAqIDIpO1xuICAgIGlmIChyb3VuZCkgc3RlcCA9IE1hdGguZmxvb3Ioc3RlcCk7XG4gICAgc3RhcnQgKz0gKHN0b3AgLSBzdGFydCAtIHN0ZXAgKiAobiAtIHBhZGRpbmdJbm5lcikpICogYWxpZ247XG4gICAgYmFuZHdpZHRoID0gc3RlcCAqICgxIC0gcGFkZGluZ0lubmVyKTtcbiAgICBpZiAocm91bmQpIHN0YXJ0ID0gTWF0aC5yb3VuZChzdGFydCksIGJhbmR3aWR0aCA9IE1hdGgucm91bmQoYmFuZHdpZHRoKTtcbiAgICB2YXIgdmFsdWVzID0gc2VxdWVuY2UobikubWFwKGZ1bmN0aW9uKGkpIHsgcmV0dXJuIHN0YXJ0ICsgc3RlcCAqIGk7IH0pO1xuICAgIHJldHVybiBvcmRpbmFsUmFuZ2UocmV2ZXJzZSA/IHZhbHVlcy5yZXZlcnNlKCkgOiB2YWx1ZXMpO1xuICB9XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRvbWFpbihfKSwgcmVzY2FsZSgpKSA6IGRvbWFpbigpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gWytfWzBdLCArX1sxXV0sIHJlc2NhbGUoKSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlUm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIHJhbmdlID0gWytfWzBdLCArX1sxXV0sIHJvdW5kID0gdHJ1ZSwgcmVzY2FsZSgpO1xuICB9O1xuXG4gIHNjYWxlLmJhbmR3aWR0aCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiYW5kd2lkdGg7XG4gIH07XG5cbiAgc2NhbGUuc3RlcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBzdGVwO1xuICB9O1xuXG4gIHNjYWxlLnJvdW5kID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJvdW5kID0gISFfLCByZXNjYWxlKCkpIDogcm91bmQ7XG4gIH07XG5cbiAgc2NhbGUucGFkZGluZyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRkaW5nSW5uZXIgPSBwYWRkaW5nT3V0ZXIgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBfKSksIHJlc2NhbGUoKSkgOiBwYWRkaW5nSW5uZXI7XG4gIH07XG5cbiAgc2NhbGUucGFkZGluZ0lubmVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmdJbm5lciA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIF8pKSwgcmVzY2FsZSgpKSA6IHBhZGRpbmdJbm5lcjtcbiAgfTtcblxuICBzY2FsZS5wYWRkaW5nT3V0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ091dGVyID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgXykpLCByZXNjYWxlKCkpIDogcGFkZGluZ091dGVyO1xuICB9O1xuXG4gIHNjYWxlLmFsaWduID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFsaWduID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgXykpLCByZXNjYWxlKCkpIDogYWxpZ247XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiYW5kKClcbiAgICAgICAgLmRvbWFpbihkb21haW4oKSlcbiAgICAgICAgLnJhbmdlKHJhbmdlKVxuICAgICAgICAucm91bmQocm91bmQpXG4gICAgICAgIC5wYWRkaW5nSW5uZXIocGFkZGluZ0lubmVyKVxuICAgICAgICAucGFkZGluZ091dGVyKHBhZGRpbmdPdXRlcilcbiAgICAgICAgLmFsaWduKGFsaWduKTtcbiAgfTtcblxuICByZXR1cm4gcmVzY2FsZSgpO1xufVxuXG5mdW5jdGlvbiBwb2ludGlzaChzY2FsZSkge1xuICB2YXIgY29weSA9IHNjYWxlLmNvcHk7XG5cbiAgc2NhbGUucGFkZGluZyA9IHNjYWxlLnBhZGRpbmdPdXRlcjtcbiAgZGVsZXRlIHNjYWxlLnBhZGRpbmdJbm5lcjtcbiAgZGVsZXRlIHNjYWxlLnBhZGRpbmdPdXRlcjtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHBvaW50aXNoKGNvcHkoKSk7XG4gIH07XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9pbnQoKSB7XG4gIHJldHVybiBwb2ludGlzaChiYW5kKCkucGFkZGluZ0lubmVyKDEpKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnN0cnVjdG9yLCBmYWN0b3J5LCBwcm90b3R5cGUpIHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gZmFjdG9yeS5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gIHByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kKHBhcmVudCwgZGVmaW5pdGlvbikge1xuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShwYXJlbnQucHJvdG90eXBlKTtcbiAgZm9yICh2YXIga2V5IGluIGRlZmluaXRpb24pIHByb3RvdHlwZVtrZXldID0gZGVmaW5pdGlvbltrZXldO1xuICByZXR1cm4gcHJvdG90eXBlO1xufVxuIiwiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBDb2xvcigpIHt9XG5cbmV4cG9ydCB2YXIgZGFya2VyID0gMC43O1xuZXhwb3J0IHZhciBicmlnaHRlciA9IDEgLyBkYXJrZXI7XG5cbnZhciByZUkgPSBcIlxcXFxzKihbKy1dP1xcXFxkKylcXFxccypcIixcbiAgICByZU4gPSBcIlxcXFxzKihbKy1dP1xcXFxkKlxcXFwuP1xcXFxkKyg/OltlRV1bKy1dP1xcXFxkKyk/KVxcXFxzKlwiLFxuICAgIHJlUCA9IFwiXFxcXHMqKFsrLV0/XFxcXGQqXFxcXC4/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pJVxcXFxzKlwiLFxuICAgIHJlSGV4MyA9IC9eIyhbMC05YS1mXXszfSkkLyxcbiAgICByZUhleDYgPSAvXiMoWzAtOWEtZl17Nn0pJC8sXG4gICAgcmVSZ2JJbnRlZ2VyID0gbmV3IFJlZ0V4cChcIl5yZ2JcXFxcKFwiICsgW3JlSSwgcmVJLCByZUldICsgXCJcXFxcKSRcIiksXG4gICAgcmVSZ2JQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5yZ2JcXFxcKFwiICsgW3JlUCwgcmVQLCByZVBdICsgXCJcXFxcKSRcIiksXG4gICAgcmVSZ2JhSW50ZWdlciA9IG5ldyBSZWdFeHAoXCJecmdiYVxcXFwoXCIgKyBbcmVJLCByZUksIHJlSSwgcmVOXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlUmdiYVBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXnJnYmFcXFxcKFwiICsgW3JlUCwgcmVQLCByZVAsIHJlTl0gKyBcIlxcXFwpJFwiKSxcbiAgICByZUhzbFBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXmhzbFxcXFwoXCIgKyBbcmVOLCByZVAsIHJlUF0gKyBcIlxcXFwpJFwiKSxcbiAgICByZUhzbGFQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5oc2xhXFxcXChcIiArIFtyZU4sIHJlUCwgcmVQLCByZU5dICsgXCJcXFxcKSRcIik7XG5cbnZhciBuYW1lZCA9IHtcbiAgYWxpY2VibHVlOiAweGYwZjhmZixcbiAgYW50aXF1ZXdoaXRlOiAweGZhZWJkNyxcbiAgYXF1YTogMHgwMGZmZmYsXG4gIGFxdWFtYXJpbmU6IDB4N2ZmZmQ0LFxuICBhenVyZTogMHhmMGZmZmYsXG4gIGJlaWdlOiAweGY1ZjVkYyxcbiAgYmlzcXVlOiAweGZmZTRjNCxcbiAgYmxhY2s6IDB4MDAwMDAwLFxuICBibGFuY2hlZGFsbW9uZDogMHhmZmViY2QsXG4gIGJsdWU6IDB4MDAwMGZmLFxuICBibHVldmlvbGV0OiAweDhhMmJlMixcbiAgYnJvd246IDB4YTUyYTJhLFxuICBidXJseXdvb2Q6IDB4ZGViODg3LFxuICBjYWRldGJsdWU6IDB4NWY5ZWEwLFxuICBjaGFydHJldXNlOiAweDdmZmYwMCxcbiAgY2hvY29sYXRlOiAweGQyNjkxZSxcbiAgY29yYWw6IDB4ZmY3ZjUwLFxuICBjb3JuZmxvd2VyYmx1ZTogMHg2NDk1ZWQsXG4gIGNvcm5zaWxrOiAweGZmZjhkYyxcbiAgY3JpbXNvbjogMHhkYzE0M2MsXG4gIGN5YW46IDB4MDBmZmZmLFxuICBkYXJrYmx1ZTogMHgwMDAwOGIsXG4gIGRhcmtjeWFuOiAweDAwOGI4YixcbiAgZGFya2dvbGRlbnJvZDogMHhiODg2MGIsXG4gIGRhcmtncmF5OiAweGE5YTlhOSxcbiAgZGFya2dyZWVuOiAweDAwNjQwMCxcbiAgZGFya2dyZXk6IDB4YTlhOWE5LFxuICBkYXJra2hha2k6IDB4YmRiNzZiLFxuICBkYXJrbWFnZW50YTogMHg4YjAwOGIsXG4gIGRhcmtvbGl2ZWdyZWVuOiAweDU1NmIyZixcbiAgZGFya29yYW5nZTogMHhmZjhjMDAsXG4gIGRhcmtvcmNoaWQ6IDB4OTkzMmNjLFxuICBkYXJrcmVkOiAweDhiMDAwMCxcbiAgZGFya3NhbG1vbjogMHhlOTk2N2EsXG4gIGRhcmtzZWFncmVlbjogMHg4ZmJjOGYsXG4gIGRhcmtzbGF0ZWJsdWU6IDB4NDgzZDhiLFxuICBkYXJrc2xhdGVncmF5OiAweDJmNGY0ZixcbiAgZGFya3NsYXRlZ3JleTogMHgyZjRmNGYsXG4gIGRhcmt0dXJxdW9pc2U6IDB4MDBjZWQxLFxuICBkYXJrdmlvbGV0OiAweDk0MDBkMyxcbiAgZGVlcHBpbms6IDB4ZmYxNDkzLFxuICBkZWVwc2t5Ymx1ZTogMHgwMGJmZmYsXG4gIGRpbWdyYXk6IDB4Njk2OTY5LFxuICBkaW1ncmV5OiAweDY5Njk2OSxcbiAgZG9kZ2VyYmx1ZTogMHgxZTkwZmYsXG4gIGZpcmVicmljazogMHhiMjIyMjIsXG4gIGZsb3JhbHdoaXRlOiAweGZmZmFmMCxcbiAgZm9yZXN0Z3JlZW46IDB4MjI4YjIyLFxuICBmdWNoc2lhOiAweGZmMDBmZixcbiAgZ2FpbnNib3JvOiAweGRjZGNkYyxcbiAgZ2hvc3R3aGl0ZTogMHhmOGY4ZmYsXG4gIGdvbGQ6IDB4ZmZkNzAwLFxuICBnb2xkZW5yb2Q6IDB4ZGFhNTIwLFxuICBncmF5OiAweDgwODA4MCxcbiAgZ3JlZW46IDB4MDA4MDAwLFxuICBncmVlbnllbGxvdzogMHhhZGZmMmYsXG4gIGdyZXk6IDB4ODA4MDgwLFxuICBob25leWRldzogMHhmMGZmZjAsXG4gIGhvdHBpbms6IDB4ZmY2OWI0LFxuICBpbmRpYW5yZWQ6IDB4Y2Q1YzVjLFxuICBpbmRpZ286IDB4NGIwMDgyLFxuICBpdm9yeTogMHhmZmZmZjAsXG4gIGtoYWtpOiAweGYwZTY4YyxcbiAgbGF2ZW5kZXI6IDB4ZTZlNmZhLFxuICBsYXZlbmRlcmJsdXNoOiAweGZmZjBmNSxcbiAgbGF3bmdyZWVuOiAweDdjZmMwMCxcbiAgbGVtb25jaGlmZm9uOiAweGZmZmFjZCxcbiAgbGlnaHRibHVlOiAweGFkZDhlNixcbiAgbGlnaHRjb3JhbDogMHhmMDgwODAsXG4gIGxpZ2h0Y3lhbjogMHhlMGZmZmYsXG4gIGxpZ2h0Z29sZGVucm9keWVsbG93OiAweGZhZmFkMixcbiAgbGlnaHRncmF5OiAweGQzZDNkMyxcbiAgbGlnaHRncmVlbjogMHg5MGVlOTAsXG4gIGxpZ2h0Z3JleTogMHhkM2QzZDMsXG4gIGxpZ2h0cGluazogMHhmZmI2YzEsXG4gIGxpZ2h0c2FsbW9uOiAweGZmYTA3YSxcbiAgbGlnaHRzZWFncmVlbjogMHgyMGIyYWEsXG4gIGxpZ2h0c2t5Ymx1ZTogMHg4N2NlZmEsXG4gIGxpZ2h0c2xhdGVncmF5OiAweDc3ODg5OSxcbiAgbGlnaHRzbGF0ZWdyZXk6IDB4Nzc4ODk5LFxuICBsaWdodHN0ZWVsYmx1ZTogMHhiMGM0ZGUsXG4gIGxpZ2h0eWVsbG93OiAweGZmZmZlMCxcbiAgbGltZTogMHgwMGZmMDAsXG4gIGxpbWVncmVlbjogMHgzMmNkMzIsXG4gIGxpbmVuOiAweGZhZjBlNixcbiAgbWFnZW50YTogMHhmZjAwZmYsXG4gIG1hcm9vbjogMHg4MDAwMDAsXG4gIG1lZGl1bWFxdWFtYXJpbmU6IDB4NjZjZGFhLFxuICBtZWRpdW1ibHVlOiAweDAwMDBjZCxcbiAgbWVkaXVtb3JjaGlkOiAweGJhNTVkMyxcbiAgbWVkaXVtcHVycGxlOiAweDkzNzBkYixcbiAgbWVkaXVtc2VhZ3JlZW46IDB4M2NiMzcxLFxuICBtZWRpdW1zbGF0ZWJsdWU6IDB4N2I2OGVlLFxuICBtZWRpdW1zcHJpbmdncmVlbjogMHgwMGZhOWEsXG4gIG1lZGl1bXR1cnF1b2lzZTogMHg0OGQxY2MsXG4gIG1lZGl1bXZpb2xldHJlZDogMHhjNzE1ODUsXG4gIG1pZG5pZ2h0Ymx1ZTogMHgxOTE5NzAsXG4gIG1pbnRjcmVhbTogMHhmNWZmZmEsXG4gIG1pc3R5cm9zZTogMHhmZmU0ZTEsXG4gIG1vY2Nhc2luOiAweGZmZTRiNSxcbiAgbmF2YWpvd2hpdGU6IDB4ZmZkZWFkLFxuICBuYXZ5OiAweDAwMDA4MCxcbiAgb2xkbGFjZTogMHhmZGY1ZTYsXG4gIG9saXZlOiAweDgwODAwMCxcbiAgb2xpdmVkcmFiOiAweDZiOGUyMyxcbiAgb3JhbmdlOiAweGZmYTUwMCxcbiAgb3JhbmdlcmVkOiAweGZmNDUwMCxcbiAgb3JjaGlkOiAweGRhNzBkNixcbiAgcGFsZWdvbGRlbnJvZDogMHhlZWU4YWEsXG4gIHBhbGVncmVlbjogMHg5OGZiOTgsXG4gIHBhbGV0dXJxdW9pc2U6IDB4YWZlZWVlLFxuICBwYWxldmlvbGV0cmVkOiAweGRiNzA5MyxcbiAgcGFwYXlhd2hpcDogMHhmZmVmZDUsXG4gIHBlYWNocHVmZjogMHhmZmRhYjksXG4gIHBlcnU6IDB4Y2Q4NTNmLFxuICBwaW5rOiAweGZmYzBjYixcbiAgcGx1bTogMHhkZGEwZGQsXG4gIHBvd2RlcmJsdWU6IDB4YjBlMGU2LFxuICBwdXJwbGU6IDB4ODAwMDgwLFxuICByZWJlY2NhcHVycGxlOiAweDY2MzM5OSxcbiAgcmVkOiAweGZmMDAwMCxcbiAgcm9zeWJyb3duOiAweGJjOGY4ZixcbiAgcm95YWxibHVlOiAweDQxNjllMSxcbiAgc2FkZGxlYnJvd246IDB4OGI0NTEzLFxuICBzYWxtb246IDB4ZmE4MDcyLFxuICBzYW5keWJyb3duOiAweGY0YTQ2MCxcbiAgc2VhZ3JlZW46IDB4MmU4YjU3LFxuICBzZWFzaGVsbDogMHhmZmY1ZWUsXG4gIHNpZW5uYTogMHhhMDUyMmQsXG4gIHNpbHZlcjogMHhjMGMwYzAsXG4gIHNreWJsdWU6IDB4ODdjZWViLFxuICBzbGF0ZWJsdWU6IDB4NmE1YWNkLFxuICBzbGF0ZWdyYXk6IDB4NzA4MDkwLFxuICBzbGF0ZWdyZXk6IDB4NzA4MDkwLFxuICBzbm93OiAweGZmZmFmYSxcbiAgc3ByaW5nZ3JlZW46IDB4MDBmZjdmLFxuICBzdGVlbGJsdWU6IDB4NDY4MmI0LFxuICB0YW46IDB4ZDJiNDhjLFxuICB0ZWFsOiAweDAwODA4MCxcbiAgdGhpc3RsZTogMHhkOGJmZDgsXG4gIHRvbWF0bzogMHhmZjYzNDcsXG4gIHR1cnF1b2lzZTogMHg0MGUwZDAsXG4gIHZpb2xldDogMHhlZTgyZWUsXG4gIHdoZWF0OiAweGY1ZGViMyxcbiAgd2hpdGU6IDB4ZmZmZmZmLFxuICB3aGl0ZXNtb2tlOiAweGY1ZjVmNSxcbiAgeWVsbG93OiAweGZmZmYwMCxcbiAgeWVsbG93Z3JlZW46IDB4OWFjZDMyXG59O1xuXG5kZWZpbmUoQ29sb3IsIGNvbG9yLCB7XG4gIGRpc3BsYXlhYmxlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpO1xuICB9LFxuICBoZXg6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnJnYigpLmhleCgpO1xuICB9LFxuICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucmdiKCkgKyBcIlwiO1xuICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29sb3IoZm9ybWF0KSB7XG4gIHZhciBtO1xuICBmb3JtYXQgPSAoZm9ybWF0ICsgXCJcIikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAobSA9IHJlSGV4My5leGVjKGZvcm1hdCkpID8gKG0gPSBwYXJzZUludChtWzFdLCAxNiksIG5ldyBSZ2IoKG0gPj4gOCAmIDB4ZikgfCAobSA+PiA0ICYgMHgwZjApLCAobSA+PiA0ICYgMHhmKSB8IChtICYgMHhmMCksICgobSAmIDB4ZikgPDwgNCkgfCAobSAmIDB4ZiksIDEpKSAvLyAjZjAwXG4gICAgICA6IChtID0gcmVIZXg2LmV4ZWMoZm9ybWF0KSkgPyByZ2JuKHBhcnNlSW50KG1bMV0sIDE2KSkgLy8gI2ZmMDAwMFxuICAgICAgOiAobSA9IHJlUmdiSW50ZWdlci5leGVjKGZvcm1hdCkpID8gbmV3IFJnYihtWzFdLCBtWzJdLCBtWzNdLCAxKSAvLyByZ2IoMjU1LCAwLCAwKVxuICAgICAgOiAobSA9IHJlUmdiUGVyY2VudC5leGVjKGZvcm1hdCkpID8gbmV3IFJnYihtWzFdICogMjU1IC8gMTAwLCBtWzJdICogMjU1IC8gMTAwLCBtWzNdICogMjU1IC8gMTAwLCAxKSAvLyByZ2IoMTAwJSwgMCUsIDAlKVxuICAgICAgOiAobSA9IHJlUmdiYUludGVnZXIuZXhlYyhmb3JtYXQpKSA/IHJnYmEobVsxXSwgbVsyXSwgbVszXSwgbVs0XSkgLy8gcmdiYSgyNTUsIDAsIDAsIDEpXG4gICAgICA6IChtID0gcmVSZ2JhUGVyY2VudC5leGVjKGZvcm1hdCkpID8gcmdiYShtWzFdICogMjU1IC8gMTAwLCBtWzJdICogMjU1IC8gMTAwLCBtWzNdICogMjU1IC8gMTAwLCBtWzRdKSAvLyByZ2IoMTAwJSwgMCUsIDAlLCAxKVxuICAgICAgOiAobSA9IHJlSHNsUGVyY2VudC5leGVjKGZvcm1hdCkpID8gaHNsYShtWzFdLCBtWzJdIC8gMTAwLCBtWzNdIC8gMTAwLCAxKSAvLyBoc2woMTIwLCA1MCUsIDUwJSlcbiAgICAgIDogKG0gPSByZUhzbGFQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBoc2xhKG1bMV0sIG1bMl0gLyAxMDAsIG1bM10gLyAxMDAsIG1bNF0pIC8vIGhzbGEoMTIwLCA1MCUsIDUwJSwgMSlcbiAgICAgIDogbmFtZWQuaGFzT3duUHJvcGVydHkoZm9ybWF0KSA/IHJnYm4obmFtZWRbZm9ybWF0XSlcbiAgICAgIDogZm9ybWF0ID09PSBcInRyYW5zcGFyZW50XCIgPyBuZXcgUmdiKE5hTiwgTmFOLCBOYU4sIDApXG4gICAgICA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHJnYm4obikge1xuICByZXR1cm4gbmV3IFJnYihuID4+IDE2ICYgMHhmZiwgbiA+PiA4ICYgMHhmZiwgbiAmIDB4ZmYsIDEpO1xufVxuXG5mdW5jdGlvbiByZ2JhKHIsIGcsIGIsIGEpIHtcbiAgaWYgKGEgPD0gMCkgciA9IGcgPSBiID0gTmFOO1xuICByZXR1cm4gbmV3IFJnYihyLCBnLCBiLCBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJnYkNvbnZlcnQobykge1xuICBpZiAoIShvIGluc3RhbmNlb2YgQ29sb3IpKSBvID0gY29sb3Iobyk7XG4gIGlmICghbykgcmV0dXJuIG5ldyBSZ2I7XG4gIG8gPSBvLnJnYigpO1xuICByZXR1cm4gbmV3IFJnYihvLnIsIG8uZywgby5iLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmdiKHIsIGcsIGIsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyByZ2JDb252ZXJ0KHIpIDogbmV3IFJnYihyLCBnLCBiLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZ2IociwgZywgYiwgb3BhY2l0eSkge1xuICB0aGlzLnIgPSArcjtcbiAgdGhpcy5nID0gK2c7XG4gIHRoaXMuYiA9ICtiO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKFJnYiwgcmdiLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XG4gICAgcmV0dXJuIG5ldyBSZ2IodGhpcy5yICogaywgdGhpcy5nICogaywgdGhpcy5iICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgcmV0dXJuIG5ldyBSZ2IodGhpcy5yICogaywgdGhpcy5nICogaywgdGhpcy5iICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgZGlzcGxheWFibGU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAoMCA8PSB0aGlzLnIgJiYgdGhpcy5yIDw9IDI1NSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5nICYmIHRoaXMuZyA8PSAyNTUpXG4gICAgICAgICYmICgwIDw9IHRoaXMuYiAmJiB0aGlzLmIgPD0gMjU1KVxuICAgICAgICAmJiAoMCA8PSB0aGlzLm9wYWNpdHkgJiYgdGhpcy5vcGFjaXR5IDw9IDEpO1xuICB9LFxuICBoZXg6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIiNcIiArIGhleCh0aGlzLnIpICsgaGV4KHRoaXMuZykgKyBoZXgodGhpcy5iKTtcbiAgfSxcbiAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhID0gdGhpcy5vcGFjaXR5OyBhID0gaXNOYU4oYSkgPyAxIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgYSkpO1xuICAgIHJldHVybiAoYSA9PT0gMSA/IFwicmdiKFwiIDogXCJyZ2JhKFwiKVxuICAgICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLnIpIHx8IDApKSArIFwiLCBcIlxuICAgICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLmcpIHx8IDApKSArIFwiLCBcIlxuICAgICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLmIpIHx8IDApKVxuICAgICAgICArIChhID09PSAxID8gXCIpXCIgOiBcIiwgXCIgKyBhICsgXCIpXCIpO1xuICB9XG59KSk7XG5cbmZ1bmN0aW9uIGhleCh2YWx1ZSkge1xuICB2YWx1ZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh2YWx1ZSkgfHwgMCkpO1xuICByZXR1cm4gKHZhbHVlIDwgMTYgPyBcIjBcIiA6IFwiXCIpICsgdmFsdWUudG9TdHJpbmcoMTYpO1xufVxuXG5mdW5jdGlvbiBoc2xhKGgsIHMsIGwsIGEpIHtcbiAgaWYgKGEgPD0gMCkgaCA9IHMgPSBsID0gTmFOO1xuICBlbHNlIGlmIChsIDw9IDAgfHwgbCA+PSAxKSBoID0gcyA9IE5hTjtcbiAgZWxzZSBpZiAocyA8PSAwKSBoID0gTmFOO1xuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhzbENvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG5ldyBIc2woby5oLCBvLnMsIG8ubCwgby5vcGFjaXR5KTtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIENvbG9yKSkgbyA9IGNvbG9yKG8pO1xuICBpZiAoIW8pIHJldHVybiBuZXcgSHNsO1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG87XG4gIG8gPSBvLnJnYigpO1xuICB2YXIgciA9IG8uciAvIDI1NSxcbiAgICAgIGcgPSBvLmcgLyAyNTUsXG4gICAgICBiID0gby5iIC8gMjU1LFxuICAgICAgbWluID0gTWF0aC5taW4ociwgZywgYiksXG4gICAgICBtYXggPSBNYXRoLm1heChyLCBnLCBiKSxcbiAgICAgIGggPSBOYU4sXG4gICAgICBzID0gbWF4IC0gbWluLFxuICAgICAgbCA9IChtYXggKyBtaW4pIC8gMjtcbiAgaWYgKHMpIHtcbiAgICBpZiAociA9PT0gbWF4KSBoID0gKGcgLSBiKSAvIHMgKyAoZyA8IGIpICogNjtcbiAgICBlbHNlIGlmIChnID09PSBtYXgpIGggPSAoYiAtIHIpIC8gcyArIDI7XG4gICAgZWxzZSBoID0gKHIgLSBnKSAvIHMgKyA0O1xuICAgIHMgLz0gbCA8IDAuNSA/IG1heCArIG1pbiA6IDIgLSBtYXggLSBtaW47XG4gICAgaCAqPSA2MDtcbiAgfSBlbHNlIHtcbiAgICBzID0gbCA+IDAgJiYgbCA8IDEgPyAwIDogaDtcbiAgfVxuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHNsKGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoc2xDb252ZXJ0KGgpIDogbmV3IEhzbChoLCBzLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmZ1bmN0aW9uIEhzbChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLnMgPSArcztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoSHNsLCBoc2wsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IEhzbCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgcmV0dXJuIG5ldyBIc2wodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGggPSB0aGlzLmggJSAzNjAgKyAodGhpcy5oIDwgMCkgKiAzNjAsXG4gICAgICAgIHMgPSBpc05hTihoKSB8fCBpc05hTih0aGlzLnMpID8gMCA6IHRoaXMucyxcbiAgICAgICAgbCA9IHRoaXMubCxcbiAgICAgICAgbTIgPSBsICsgKGwgPCAwLjUgPyBsIDogMSAtIGwpICogcyxcbiAgICAgICAgbTEgPSAyICogbCAtIG0yO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgaHNsMnJnYihoID49IDI0MCA/IGggLSAyNDAgOiBoICsgMTIwLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoIDwgMTIwID8gaCArIDI0MCA6IGggLSAxMjAsIG0xLCBtMiksXG4gICAgICB0aGlzLm9wYWNpdHlcbiAgICApO1xuICB9LFxuICBkaXNwbGF5YWJsZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICgwIDw9IHRoaXMucyAmJiB0aGlzLnMgPD0gMSB8fCBpc05hTih0aGlzLnMpKVxuICAgICAgICAmJiAoMCA8PSB0aGlzLmwgJiYgdGhpcy5sIDw9IDEpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH1cbn0pKTtcblxuLyogRnJvbSBGdkQgMTMuMzcsIENTUyBDb2xvciBNb2R1bGUgTGV2ZWwgMyAqL1xuZnVuY3Rpb24gaHNsMnJnYihoLCBtMSwgbTIpIHtcbiAgcmV0dXJuIChoIDwgNjAgPyBtMSArIChtMiAtIG0xKSAqIGggLyA2MFxuICAgICAgOiBoIDwgMTgwID8gbTJcbiAgICAgIDogaCA8IDI0MCA/IG0xICsgKG0yIC0gbTEpICogKDI0MCAtIGgpIC8gNjBcbiAgICAgIDogbTEpICogMjU1O1xufVxuIiwiZXhwb3J0IHZhciBkZWcycmFkID0gTWF0aC5QSSAvIDE4MDtcbmV4cG9ydCB2YXIgcmFkMmRlZyA9IDE4MCAvIE1hdGguUEk7XG4iLCJpbXBvcnQgZGVmaW5lLCB7ZXh0ZW5kfSBmcm9tIFwiLi9kZWZpbmVcIjtcbmltcG9ydCB7Q29sb3IsIHJnYkNvbnZlcnQsIFJnYn0gZnJvbSBcIi4vY29sb3JcIjtcbmltcG9ydCB7ZGVnMnJhZCwgcmFkMmRlZ30gZnJvbSBcIi4vbWF0aFwiO1xuXG4vLyBodHRwczovL2JldGEub2JzZXJ2YWJsZWhxLmNvbS9AbWJvc3RvY2svbGFiLWFuZC1yZ2JcbnZhciBLID0gMTgsXG4gICAgWG4gPSAwLjk2NDIyLFxuICAgIFluID0gMSxcbiAgICBabiA9IDAuODI1MjEsXG4gICAgdDAgPSA0IC8gMjksXG4gICAgdDEgPSA2IC8gMjksXG4gICAgdDIgPSAzICogdDEgKiB0MSxcbiAgICB0MyA9IHQxICogdDEgKiB0MTtcblxuZnVuY3Rpb24gbGFiQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgTGFiKSByZXR1cm4gbmV3IExhYihvLmwsIG8uYSwgby5iLCBvLm9wYWNpdHkpO1xuICBpZiAobyBpbnN0YW5jZW9mIEhjbCkge1xuICAgIGlmIChpc05hTihvLmgpKSByZXR1cm4gbmV3IExhYihvLmwsIDAsIDAsIG8ub3BhY2l0eSk7XG4gICAgdmFyIGggPSBvLmggKiBkZWcycmFkO1xuICAgIHJldHVybiBuZXcgTGFiKG8ubCwgTWF0aC5jb3MoaCkgKiBvLmMsIE1hdGguc2luKGgpICogby5jLCBvLm9wYWNpdHkpO1xuICB9XG4gIGlmICghKG8gaW5zdGFuY2VvZiBSZ2IpKSBvID0gcmdiQ29udmVydChvKTtcbiAgdmFyIHIgPSByZ2IybHJnYihvLnIpLFxuICAgICAgZyA9IHJnYjJscmdiKG8uZyksXG4gICAgICBiID0gcmdiMmxyZ2Ioby5iKSxcbiAgICAgIHkgPSB4eXoybGFiKCgwLjIyMjUwNDUgKiByICsgMC43MTY4Nzg2ICogZyArIDAuMDYwNjE2OSAqIGIpIC8gWW4pLCB4LCB6O1xuICBpZiAociA9PT0gZyAmJiBnID09PSBiKSB4ID0geiA9IHk7IGVsc2Uge1xuICAgIHggPSB4eXoybGFiKCgwLjQzNjA3NDcgKiByICsgMC4zODUwNjQ5ICogZyArIDAuMTQzMDgwNCAqIGIpIC8gWG4pO1xuICAgIHogPSB4eXoybGFiKCgwLjAxMzkzMjIgKiByICsgMC4wOTcxMDQ1ICogZyArIDAuNzE0MTczMyAqIGIpIC8gWm4pO1xuICB9XG4gIHJldHVybiBuZXcgTGFiKDExNiAqIHkgLSAxNiwgNTAwICogKHggLSB5KSwgMjAwICogKHkgLSB6KSwgby5vcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdyYXkobCwgb3BhY2l0eSkge1xuICByZXR1cm4gbmV3IExhYihsLCAwLCAwLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxhYihsLCBhLCBiLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gbGFiQ29udmVydChsKSA6IG5ldyBMYWIobCwgYSwgYiwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTGFiKGwsIGEsIGIsIG9wYWNpdHkpIHtcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMuYSA9ICthO1xuICB0aGlzLmIgPSArYjtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShMYWIsIGxhYiwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIG5ldyBMYWIodGhpcy5sICsgSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMuYSwgdGhpcy5iLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IExhYih0aGlzLmwgLSBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5hLCB0aGlzLmIsIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHkgPSAodGhpcy5sICsgMTYpIC8gMTE2LFxuICAgICAgICB4ID0gaXNOYU4odGhpcy5hKSA/IHkgOiB5ICsgdGhpcy5hIC8gNTAwLFxuICAgICAgICB6ID0gaXNOYU4odGhpcy5iKSA/IHkgOiB5IC0gdGhpcy5iIC8gMjAwO1xuICAgIHggPSBYbiAqIGxhYjJ4eXooeCk7XG4gICAgeSA9IFluICogbGFiMnh5eih5KTtcbiAgICB6ID0gWm4gKiBsYWIyeHl6KHopO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgbHJnYjJyZ2IoIDMuMTMzODU2MSAqIHggLSAxLjYxNjg2NjcgKiB5IC0gMC40OTA2MTQ2ICogeiksXG4gICAgICBscmdiMnJnYigtMC45Nzg3Njg0ICogeCArIDEuOTE2MTQxNSAqIHkgKyAwLjAzMzQ1NDAgKiB6KSxcbiAgICAgIGxyZ2IycmdiKCAwLjA3MTk0NTMgKiB4IC0gMC4yMjg5OTE0ICogeSArIDEuNDA1MjQyNyAqIHopLFxuICAgICAgdGhpcy5vcGFjaXR5XG4gICAgKTtcbiAgfVxufSkpO1xuXG5mdW5jdGlvbiB4eXoybGFiKHQpIHtcbiAgcmV0dXJuIHQgPiB0MyA/IE1hdGgucG93KHQsIDEgLyAzKSA6IHQgLyB0MiArIHQwO1xufVxuXG5mdW5jdGlvbiBsYWIyeHl6KHQpIHtcbiAgcmV0dXJuIHQgPiB0MSA/IHQgKiB0ICogdCA6IHQyICogKHQgLSB0MCk7XG59XG5cbmZ1bmN0aW9uIGxyZ2IycmdiKHgpIHtcbiAgcmV0dXJuIDI1NSAqICh4IDw9IDAuMDAzMTMwOCA/IDEyLjkyICogeCA6IDEuMDU1ICogTWF0aC5wb3coeCwgMSAvIDIuNCkgLSAwLjA1NSk7XG59XG5cbmZ1bmN0aW9uIHJnYjJscmdiKHgpIHtcbiAgcmV0dXJuICh4IC89IDI1NSkgPD0gMC4wNDA0NSA/IHggLyAxMi45MiA6IE1hdGgucG93KCh4ICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG59XG5cbmZ1bmN0aW9uIGhjbENvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIEhjbCkgcmV0dXJuIG5ldyBIY2woby5oLCBvLmMsIG8ubCwgby5vcGFjaXR5KTtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIExhYikpIG8gPSBsYWJDb252ZXJ0KG8pO1xuICBpZiAoby5hID09PSAwICYmIG8uYiA9PT0gMCkgcmV0dXJuIG5ldyBIY2woTmFOLCAwLCBvLmwsIG8ub3BhY2l0eSk7XG4gIHZhciBoID0gTWF0aC5hdGFuMihvLmIsIG8uYSkgKiByYWQyZGVnO1xuICByZXR1cm4gbmV3IEhjbChoIDwgMCA/IGggKyAzNjAgOiBoLCBNYXRoLnNxcnQoby5hICogby5hICsgby5iICogby5iKSwgby5sLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGNoKGwsIGMsIGgsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoY2xDb252ZXJ0KGwpIDogbmV3IEhjbChoLCBjLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoY2woaCwgYywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhjbENvbnZlcnQoaCkgOiBuZXcgSGNsKGgsIGMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhjbChoLCBjLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLmMgPSArYztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoSGNsLCBoY2wsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIHJldHVybiBuZXcgSGNsKHRoaXMuaCwgdGhpcy5jLCB0aGlzLmwgKyBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIG5ldyBIY2wodGhpcy5oLCB0aGlzLmMsIHRoaXMubCAtIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBsYWJDb252ZXJ0KHRoaXMpLnJnYigpO1xuICB9XG59KSk7XG4iLCJpbXBvcnQgZGVmaW5lLCB7ZXh0ZW5kfSBmcm9tIFwiLi9kZWZpbmVcIjtcbmltcG9ydCB7Q29sb3IsIHJnYkNvbnZlcnQsIFJnYiwgZGFya2VyLCBicmlnaHRlcn0gZnJvbSBcIi4vY29sb3JcIjtcbmltcG9ydCB7ZGVnMnJhZCwgcmFkMmRlZ30gZnJvbSBcIi4vbWF0aFwiO1xuXG52YXIgQSA9IC0wLjE0ODYxLFxuICAgIEIgPSArMS43ODI3NyxcbiAgICBDID0gLTAuMjkyMjcsXG4gICAgRCA9IC0wLjkwNjQ5LFxuICAgIEUgPSArMS45NzI5NCxcbiAgICBFRCA9IEUgKiBELFxuICAgIEVCID0gRSAqIEIsXG4gICAgQkNfREEgPSBCICogQyAtIEQgKiBBO1xuXG5mdW5jdGlvbiBjdWJlaGVsaXhDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBDdWJlaGVsaXgpIHJldHVybiBuZXcgQ3ViZWhlbGl4KG8uaCwgby5zLCBvLmwsIG8ub3BhY2l0eSk7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBSZ2IpKSBvID0gcmdiQ29udmVydChvKTtcbiAgdmFyIHIgPSBvLnIgLyAyNTUsXG4gICAgICBnID0gby5nIC8gMjU1LFxuICAgICAgYiA9IG8uYiAvIDI1NSxcbiAgICAgIGwgPSAoQkNfREEgKiBiICsgRUQgKiByIC0gRUIgKiBnKSAvIChCQ19EQSArIEVEIC0gRUIpLFxuICAgICAgYmwgPSBiIC0gbCxcbiAgICAgIGsgPSAoRSAqIChnIC0gbCkgLSBDICogYmwpIC8gRCxcbiAgICAgIHMgPSBNYXRoLnNxcnQoayAqIGsgKyBibCAqIGJsKSAvIChFICogbCAqICgxIC0gbCkpLCAvLyBOYU4gaWYgbD0wIG9yIGw9MVxuICAgICAgaCA9IHMgPyBNYXRoLmF0YW4yKGssIGJsKSAqIHJhZDJkZWcgLSAxMjAgOiBOYU47XG4gIHJldHVybiBuZXcgQ3ViZWhlbGl4KGggPCAwID8gaCArIDM2MCA6IGgsIHMsIGwsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGN1YmVoZWxpeChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gY3ViZWhlbGl4Q29udmVydChoKSA6IG5ldyBDdWJlaGVsaXgoaCwgcywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ3ViZWhlbGl4KGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgdGhpcy5oID0gK2g7XG4gIHRoaXMucyA9ICtzO1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShDdWJlaGVsaXgsIGN1YmVoZWxpeCwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGJyaWdodGVyIDogTWF0aC5wb3coYnJpZ2h0ZXIsIGspO1xuICAgIHJldHVybiBuZXcgQ3ViZWhlbGl4KHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IEN1YmVoZWxpeCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaCA9IGlzTmFOKHRoaXMuaCkgPyAwIDogKHRoaXMuaCArIDEyMCkgKiBkZWcycmFkLFxuICAgICAgICBsID0gK3RoaXMubCxcbiAgICAgICAgYSA9IGlzTmFOKHRoaXMucykgPyAwIDogdGhpcy5zICogbCAqICgxIC0gbCksXG4gICAgICAgIGNvc2ggPSBNYXRoLmNvcyhoKSxcbiAgICAgICAgc2luaCA9IE1hdGguc2luKGgpO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgMjU1ICogKGwgKyBhICogKEEgKiBjb3NoICsgQiAqIHNpbmgpKSxcbiAgICAgIDI1NSAqIChsICsgYSAqIChDICogY29zaCArIEQgKiBzaW5oKSksXG4gICAgICAyNTUgKiAobCArIGEgKiAoRSAqIGNvc2gpKSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH1cbn0pKTtcbiIsImV4cG9ydCBmdW5jdGlvbiBiYXNpcyh0MSwgdjAsIHYxLCB2MiwgdjMpIHtcbiAgdmFyIHQyID0gdDEgKiB0MSwgdDMgPSB0MiAqIHQxO1xuICByZXR1cm4gKCgxIC0gMyAqIHQxICsgMyAqIHQyIC0gdDMpICogdjBcbiAgICAgICsgKDQgLSA2ICogdDIgKyAzICogdDMpICogdjFcbiAgICAgICsgKDEgKyAzICogdDEgKyAzICogdDIgLSAzICogdDMpICogdjJcbiAgICAgICsgdDMgKiB2MykgLyA2O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoIC0gMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IHQgPD0gMCA/ICh0ID0gMCkgOiB0ID49IDEgPyAodCA9IDEsIG4gLSAxKSA6IE1hdGguZmxvb3IodCAqIG4pLFxuICAgICAgICB2MSA9IHZhbHVlc1tpXSxcbiAgICAgICAgdjIgPSB2YWx1ZXNbaSArIDFdLFxuICAgICAgICB2MCA9IGkgPiAwID8gdmFsdWVzW2kgLSAxXSA6IDIgKiB2MSAtIHYyLFxuICAgICAgICB2MyA9IGkgPCBuIC0gMSA/IHZhbHVlc1tpICsgMl0gOiAyICogdjIgLSB2MTtcbiAgICByZXR1cm4gYmFzaXMoKHQgLSBpIC8gbikgKiBuLCB2MCwgdjEsIHYyLCB2Myk7XG4gIH07XG59XG4iLCJpbXBvcnQge2Jhc2lzfSBmcm9tIFwiLi9iYXNpc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gTWF0aC5mbG9vcigoKHQgJT0gMSkgPCAwID8gKyt0IDogdCkgKiBuKSxcbiAgICAgICAgdjAgPSB2YWx1ZXNbKGkgKyBuIC0gMSkgJSBuXSxcbiAgICAgICAgdjEgPSB2YWx1ZXNbaSAlIG5dLFxuICAgICAgICB2MiA9IHZhbHVlc1soaSArIDEpICUgbl0sXG4gICAgICAgIHYzID0gdmFsdWVzWyhpICsgMikgJSBuXTtcbiAgICByZXR1cm4gYmFzaXMoKHQgLSBpIC8gbikgKiBuLCB2MCwgdjEsIHYyLCB2Myk7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuXG5mdW5jdGlvbiBsaW5lYXIoYSwgZCkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBhICsgdCAqIGQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGV4cG9uZW50aWFsKGEsIGIsIHkpIHtcbiAgcmV0dXJuIGEgPSBNYXRoLnBvdyhhLCB5KSwgYiA9IE1hdGgucG93KGIsIHkpIC0gYSwgeSA9IDEgLyB5LCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucG93KGEgKyB0ICogYiwgeSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBodWUoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkID4gMTgwIHx8IGQgPCAtMTgwID8gZCAtIDM2MCAqIE1hdGgucm91bmQoZCAvIDM2MCkgOiBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2FtbWEoeSkge1xuICByZXR1cm4gKHkgPSAreSkgPT09IDEgPyBub2dhbW1hIDogZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBiIC0gYSA/IGV4cG9uZW50aWFsKGEsIGIsIHkpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vZ2FtbWEoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuIiwiaW1wb3J0IHtyZ2IgYXMgY29sb3JSZ2J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGJhc2lzIGZyb20gXCIuL2Jhc2lzXCI7XG5pbXBvcnQgYmFzaXNDbG9zZWQgZnJvbSBcIi4vYmFzaXNDbG9zZWRcIjtcbmltcG9ydCBub2dhbW1hLCB7Z2FtbWF9IGZyb20gXCIuL2NvbG9yXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiByZ2JHYW1tYSh5KSB7XG4gIHZhciBjb2xvciA9IGdhbW1hKHkpO1xuXG4gIGZ1bmN0aW9uIHJnYihzdGFydCwgZW5kKSB7XG4gICAgdmFyIHIgPSBjb2xvcigoc3RhcnQgPSBjb2xvclJnYihzdGFydCkpLnIsIChlbmQgPSBjb2xvclJnYihlbmQpKS5yKSxcbiAgICAgICAgZyA9IGNvbG9yKHN0YXJ0LmcsIGVuZC5nKSxcbiAgICAgICAgYiA9IGNvbG9yKHN0YXJ0LmIsIGVuZC5iKSxcbiAgICAgICAgb3BhY2l0eSA9IG5vZ2FtbWEoc3RhcnQub3BhY2l0eSwgZW5kLm9wYWNpdHkpO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBzdGFydC5yID0gcih0KTtcbiAgICAgIHN0YXJ0LmcgPSBnKHQpO1xuICAgICAgc3RhcnQuYiA9IGIodCk7XG4gICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICAgIHJldHVybiBzdGFydCArIFwiXCI7XG4gICAgfTtcbiAgfVxuXG4gIHJnYi5nYW1tYSA9IHJnYkdhbW1hO1xuXG4gIHJldHVybiByZ2I7XG59KSgxKTtcblxuZnVuY3Rpb24gcmdiU3BsaW5lKHNwbGluZSkge1xuICByZXR1cm4gZnVuY3Rpb24oY29sb3JzKSB7XG4gICAgdmFyIG4gPSBjb2xvcnMubGVuZ3RoLFxuICAgICAgICByID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBnID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBiID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBpLCBjb2xvcjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBjb2xvciA9IGNvbG9yUmdiKGNvbG9yc1tpXSk7XG4gICAgICByW2ldID0gY29sb3IuciB8fCAwO1xuICAgICAgZ1tpXSA9IGNvbG9yLmcgfHwgMDtcbiAgICAgIGJbaV0gPSBjb2xvci5iIHx8IDA7XG4gICAgfVxuICAgIHIgPSBzcGxpbmUocik7XG4gICAgZyA9IHNwbGluZShnKTtcbiAgICBiID0gc3BsaW5lKGIpO1xuICAgIGNvbG9yLm9wYWNpdHkgPSAxO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBjb2xvci5yID0gcih0KTtcbiAgICAgIGNvbG9yLmcgPSBnKHQpO1xuICAgICAgY29sb3IuYiA9IGIodCk7XG4gICAgICByZXR1cm4gY29sb3IgKyBcIlwiO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCB2YXIgcmdiQmFzaXMgPSByZ2JTcGxpbmUoYmFzaXMpO1xuZXhwb3J0IHZhciByZ2JCYXNpc0Nsb3NlZCA9IHJnYlNwbGluZShiYXNpc0Nsb3NlZCk7XG4iLCJpbXBvcnQgdmFsdWUgZnJvbSBcIi4vdmFsdWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgbmIgPSBiID8gYi5sZW5ndGggOiAwLFxuICAgICAgbmEgPSBhID8gTWF0aC5taW4obmIsIGEubGVuZ3RoKSA6IDAsXG4gICAgICB4ID0gbmV3IEFycmF5KG5hKSxcbiAgICAgIGMgPSBuZXcgQXJyYXkobmIpLFxuICAgICAgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgbmE7ICsraSkgeFtpXSA9IHZhbHVlKGFbaV0sIGJbaV0pO1xuICBmb3IgKDsgaSA8IG5iOyArK2kpIGNbaV0gPSBiW2ldO1xuXG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG5hOyArK2kpIGNbaV0gPSB4W2ldKHQpO1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgZCA9IG5ldyBEYXRlO1xuICByZXR1cm4gYSA9ICthLCBiIC09IGEsIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gZC5zZXRUaW1lKGEgKyBiICogdCksIGQ7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhID0gK2EsIGIgLT0gYSwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBhICsgYiAqIHQ7XG4gIH07XG59XG4iLCJpbXBvcnQgdmFsdWUgZnJvbSBcIi4vdmFsdWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgaSA9IHt9LFxuICAgICAgYyA9IHt9LFxuICAgICAgaztcblxuICBpZiAoYSA9PT0gbnVsbCB8fCB0eXBlb2YgYSAhPT0gXCJvYmplY3RcIikgYSA9IHt9O1xuICBpZiAoYiA9PT0gbnVsbCB8fCB0eXBlb2YgYiAhPT0gXCJvYmplY3RcIikgYiA9IHt9O1xuXG4gIGZvciAoayBpbiBiKSB7XG4gICAgaWYgKGsgaW4gYSkge1xuICAgICAgaVtrXSA9IHZhbHVlKGFba10sIGJba10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjW2tdID0gYltrXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGZvciAoayBpbiBpKSBjW2tdID0gaVtrXSh0KTtcbiAgICByZXR1cm4gYztcbiAgfTtcbn1cbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyXCI7XG5cbnZhciByZUEgPSAvWy0rXT8oPzpcXGQrXFwuP1xcZCp8XFwuP1xcZCspKD86W2VFXVstK10/XFxkKyk/L2csXG4gICAgcmVCID0gbmV3IFJlZ0V4cChyZUEuc291cmNlLCBcImdcIik7XG5cbmZ1bmN0aW9uIHplcm8oYikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGI7XG4gIH07XG59XG5cbmZ1bmN0aW9uIG9uZShiKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGIodCkgKyBcIlwiO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBiaSA9IHJlQS5sYXN0SW5kZXggPSByZUIubGFzdEluZGV4ID0gMCwgLy8gc2NhbiBpbmRleCBmb3IgbmV4dCBudW1iZXIgaW4gYlxuICAgICAgYW0sIC8vIGN1cnJlbnQgbWF0Y2ggaW4gYVxuICAgICAgYm0sIC8vIGN1cnJlbnQgbWF0Y2ggaW4gYlxuICAgICAgYnMsIC8vIHN0cmluZyBwcmVjZWRpbmcgY3VycmVudCBudW1iZXIgaW4gYiwgaWYgYW55XG4gICAgICBpID0gLTEsIC8vIGluZGV4IGluIHNcbiAgICAgIHMgPSBbXSwgLy8gc3RyaW5nIGNvbnN0YW50cyBhbmQgcGxhY2Vob2xkZXJzXG4gICAgICBxID0gW107IC8vIG51bWJlciBpbnRlcnBvbGF0b3JzXG5cbiAgLy8gQ29lcmNlIGlucHV0cyB0byBzdHJpbmdzLlxuICBhID0gYSArIFwiXCIsIGIgPSBiICsgXCJcIjtcblxuICAvLyBJbnRlcnBvbGF0ZSBwYWlycyBvZiBudW1iZXJzIGluIGEgJiBiLlxuICB3aGlsZSAoKGFtID0gcmVBLmV4ZWMoYSkpXG4gICAgICAmJiAoYm0gPSByZUIuZXhlYyhiKSkpIHtcbiAgICBpZiAoKGJzID0gYm0uaW5kZXgpID4gYmkpIHsgLy8gYSBzdHJpbmcgcHJlY2VkZXMgdGhlIG5leHQgbnVtYmVyIGluIGJcbiAgICAgIGJzID0gYi5zbGljZShiaSwgYnMpO1xuICAgICAgaWYgKHNbaV0pIHNbaV0gKz0gYnM7IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgICBlbHNlIHNbKytpXSA9IGJzO1xuICAgIH1cbiAgICBpZiAoKGFtID0gYW1bMF0pID09PSAoYm0gPSBibVswXSkpIHsgLy8gbnVtYmVycyBpbiBhICYgYiBtYXRjaFxuICAgICAgaWYgKHNbaV0pIHNbaV0gKz0gYm07IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgICBlbHNlIHNbKytpXSA9IGJtO1xuICAgIH0gZWxzZSB7IC8vIGludGVycG9sYXRlIG5vbi1tYXRjaGluZyBudW1iZXJzXG4gICAgICBzWysraV0gPSBudWxsO1xuICAgICAgcS5wdXNoKHtpOiBpLCB4OiBudW1iZXIoYW0sIGJtKX0pO1xuICAgIH1cbiAgICBiaSA9IHJlQi5sYXN0SW5kZXg7XG4gIH1cblxuICAvLyBBZGQgcmVtYWlucyBvZiBiLlxuICBpZiAoYmkgPCBiLmxlbmd0aCkge1xuICAgIGJzID0gYi5zbGljZShiaSk7XG4gICAgaWYgKHNbaV0pIHNbaV0gKz0gYnM7IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgZWxzZSBzWysraV0gPSBicztcbiAgfVxuXG4gIC8vIFNwZWNpYWwgb3B0aW1pemF0aW9uIGZvciBvbmx5IGEgc2luZ2xlIG1hdGNoLlxuICAvLyBPdGhlcndpc2UsIGludGVycG9sYXRlIGVhY2ggb2YgdGhlIG51bWJlcnMgYW5kIHJlam9pbiB0aGUgc3RyaW5nLlxuICByZXR1cm4gcy5sZW5ndGggPCAyID8gKHFbMF1cbiAgICAgID8gb25lKHFbMF0ueClcbiAgICAgIDogemVybyhiKSlcbiAgICAgIDogKGIgPSBxLmxlbmd0aCwgZnVuY3Rpb24odCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBvOyBpIDwgYjsgKytpKSBzWyhvID0gcVtpXSkuaV0gPSBvLngodCk7XG4gICAgICAgICAgcmV0dXJuIHMuam9pbihcIlwiKTtcbiAgICAgICAgfSk7XG59XG4iLCJpbXBvcnQge2NvbG9yfSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCByZ2IgZnJvbSBcIi4vcmdiXCI7XG5pbXBvcnQgYXJyYXkgZnJvbSBcIi4vYXJyYXlcIjtcbmltcG9ydCBkYXRlIGZyb20gXCIuL2RhdGVcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyXCI7XG5pbXBvcnQgb2JqZWN0IGZyb20gXCIuL29iamVjdFwiO1xuaW1wb3J0IHN0cmluZyBmcm9tIFwiLi9zdHJpbmdcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciB0ID0gdHlwZW9mIGIsIGM7XG4gIHJldHVybiBiID09IG51bGwgfHwgdCA9PT0gXCJib29sZWFuXCIgPyBjb25zdGFudChiKVxuICAgICAgOiAodCA9PT0gXCJudW1iZXJcIiA/IG51bWJlclxuICAgICAgOiB0ID09PSBcInN0cmluZ1wiID8gKChjID0gY29sb3IoYikpID8gKGIgPSBjLCByZ2IpIDogc3RyaW5nKVxuICAgICAgOiBiIGluc3RhbmNlb2YgY29sb3IgPyByZ2JcbiAgICAgIDogYiBpbnN0YW5jZW9mIERhdGUgPyBkYXRlXG4gICAgICA6IEFycmF5LmlzQXJyYXkoYikgPyBhcnJheVxuICAgICAgOiB0eXBlb2YgYi52YWx1ZU9mICE9PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIGIudG9TdHJpbmcgIT09IFwiZnVuY3Rpb25cIiB8fCBpc05hTihiKSA/IG9iamVjdFxuICAgICAgOiBudW1iZXIpKGEsIGIpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSA9ICthLCBiIC09IGEsIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChhICsgYiAqIHQpO1xuICB9O1xufVxuIiwidmFyIGRlZ3JlZXMgPSAxODAgLyBNYXRoLlBJO1xuXG5leHBvcnQgdmFyIGlkZW50aXR5ID0ge1xuICB0cmFuc2xhdGVYOiAwLFxuICB0cmFuc2xhdGVZOiAwLFxuICByb3RhdGU6IDAsXG4gIHNrZXdYOiAwLFxuICBzY2FsZVg6IDEsXG4gIHNjYWxlWTogMVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYiwgYywgZCwgZSwgZikge1xuICB2YXIgc2NhbGVYLCBzY2FsZVksIHNrZXdYO1xuICBpZiAoc2NhbGVYID0gTWF0aC5zcXJ0KGEgKiBhICsgYiAqIGIpKSBhIC89IHNjYWxlWCwgYiAvPSBzY2FsZVg7XG4gIGlmIChza2V3WCA9IGEgKiBjICsgYiAqIGQpIGMgLT0gYSAqIHNrZXdYLCBkIC09IGIgKiBza2V3WDtcbiAgaWYgKHNjYWxlWSA9IE1hdGguc3FydChjICogYyArIGQgKiBkKSkgYyAvPSBzY2FsZVksIGQgLz0gc2NhbGVZLCBza2V3WCAvPSBzY2FsZVk7XG4gIGlmIChhICogZCA8IGIgKiBjKSBhID0gLWEsIGIgPSAtYiwgc2tld1ggPSAtc2tld1gsIHNjYWxlWCA9IC1zY2FsZVg7XG4gIHJldHVybiB7XG4gICAgdHJhbnNsYXRlWDogZSxcbiAgICB0cmFuc2xhdGVZOiBmLFxuICAgIHJvdGF0ZTogTWF0aC5hdGFuMihiLCBhKSAqIGRlZ3JlZXMsXG4gICAgc2tld1g6IE1hdGguYXRhbihza2V3WCkgKiBkZWdyZWVzLFxuICAgIHNjYWxlWDogc2NhbGVYLFxuICAgIHNjYWxlWTogc2NhbGVZXG4gIH07XG59XG4iLCJpbXBvcnQgZGVjb21wb3NlLCB7aWRlbnRpdHl9IGZyb20gXCIuL2RlY29tcG9zZVwiO1xuXG52YXIgY3NzTm9kZSxcbiAgICBjc3NSb290LFxuICAgIGNzc1ZpZXcsXG4gICAgc3ZnTm9kZTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ3NzKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gXCJub25lXCIpIHJldHVybiBpZGVudGl0eTtcbiAgaWYgKCFjc3NOb2RlKSBjc3NOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIkRJVlwiKSwgY3NzUm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgY3NzVmlldyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3O1xuICBjc3NOb2RlLnN0eWxlLnRyYW5zZm9ybSA9IHZhbHVlO1xuICB2YWx1ZSA9IGNzc1ZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShjc3NSb290LmFwcGVuZENoaWxkKGNzc05vZGUpLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKFwidHJhbnNmb3JtXCIpO1xuICBjc3NSb290LnJlbW92ZUNoaWxkKGNzc05vZGUpO1xuICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDcsIC0xKS5zcGxpdChcIixcIik7XG4gIHJldHVybiBkZWNvbXBvc2UoK3ZhbHVlWzBdLCArdmFsdWVbMV0sICt2YWx1ZVsyXSwgK3ZhbHVlWzNdLCArdmFsdWVbNF0sICt2YWx1ZVs1XSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN2Zyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGlkZW50aXR5O1xuICBpZiAoIXN2Z05vZGUpIHN2Z05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImdcIik7XG4gIHN2Z05vZGUuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsIHZhbHVlKTtcbiAgaWYgKCEodmFsdWUgPSBzdmdOb2RlLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpKSByZXR1cm4gaWRlbnRpdHk7XG4gIHZhbHVlID0gdmFsdWUubWF0cml4O1xuICByZXR1cm4gZGVjb21wb3NlKHZhbHVlLmEsIHZhbHVlLmIsIHZhbHVlLmMsIHZhbHVlLmQsIHZhbHVlLmUsIHZhbHVlLmYpO1xufVxuIiwiaW1wb3J0IG51bWJlciBmcm9tIFwiLi4vbnVtYmVyXCI7XG5pbXBvcnQge3BhcnNlQ3NzLCBwYXJzZVN2Z30gZnJvbSBcIi4vcGFyc2VcIjtcblxuZnVuY3Rpb24gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2UsIHB4Q29tbWEsIHB4UGFyZW4sIGRlZ1BhcmVuKSB7XG5cbiAgZnVuY3Rpb24gcG9wKHMpIHtcbiAgICByZXR1cm4gcy5sZW5ndGggPyBzLnBvcCgpICsgXCIgXCIgOiBcIlwiO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNsYXRlKHhhLCB5YSwgeGIsIHliLCBzLCBxKSB7XG4gICAgaWYgKHhhICE9PSB4YiB8fCB5YSAhPT0geWIpIHtcbiAgICAgIHZhciBpID0gcy5wdXNoKFwidHJhbnNsYXRlKFwiLCBudWxsLCBweENvbW1hLCBudWxsLCBweFBhcmVuKTtcbiAgICAgIHEucHVzaCh7aTogaSAtIDQsIHg6IG51bWJlcih4YSwgeGIpfSwge2k6IGkgLSAyLCB4OiBudW1iZXIoeWEsIHliKX0pO1xuICAgIH0gZWxzZSBpZiAoeGIgfHwgeWIpIHtcbiAgICAgIHMucHVzaChcInRyYW5zbGF0ZShcIiArIHhiICsgcHhDb21tYSArIHliICsgcHhQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcm90YXRlKGEsIGIsIHMsIHEpIHtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgaWYgKGEgLSBiID4gMTgwKSBiICs9IDM2MDsgZWxzZSBpZiAoYiAtIGEgPiAxODApIGEgKz0gMzYwOyAvLyBzaG9ydGVzdCBwYXRoXG4gICAgICBxLnB1c2goe2k6IHMucHVzaChwb3AocykgKyBcInJvdGF0ZShcIiwgbnVsbCwgZGVnUGFyZW4pIC0gMiwgeDogbnVtYmVyKGEsIGIpfSk7XG4gICAgfSBlbHNlIGlmIChiKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJyb3RhdGUoXCIgKyBiICsgZGVnUGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNrZXdYKGEsIGIsIHMsIHEpIHtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgcS5wdXNoKHtpOiBzLnB1c2gocG9wKHMpICsgXCJza2V3WChcIiwgbnVsbCwgZGVnUGFyZW4pIC0gMiwgeDogbnVtYmVyKGEsIGIpfSk7XG4gICAgfSBlbHNlIGlmIChiKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJza2V3WChcIiArIGIgKyBkZWdQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeGEsIHlhLCB4YiwgeWIsIHMsIHEpIHtcbiAgICBpZiAoeGEgIT09IHhiIHx8IHlhICE9PSB5Yikge1xuICAgICAgdmFyIGkgPSBzLnB1c2gocG9wKHMpICsgXCJzY2FsZShcIiwgbnVsbCwgXCIsXCIsIG51bGwsIFwiKVwiKTtcbiAgICAgIHEucHVzaCh7aTogaSAtIDQsIHg6IG51bWJlcih4YSwgeGIpfSwge2k6IGkgLSAyLCB4OiBudW1iZXIoeWEsIHliKX0pO1xuICAgIH0gZWxzZSBpZiAoeGIgIT09IDEgfHwgeWIgIT09IDEpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInNjYWxlKFwiICsgeGIgKyBcIixcIiArIHliICsgXCIpXCIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbihhLCBiKSB7XG4gICAgdmFyIHMgPSBbXSwgLy8gc3RyaW5nIGNvbnN0YW50cyBhbmQgcGxhY2Vob2xkZXJzXG4gICAgICAgIHEgPSBbXTsgLy8gbnVtYmVyIGludGVycG9sYXRvcnNcbiAgICBhID0gcGFyc2UoYSksIGIgPSBwYXJzZShiKTtcbiAgICB0cmFuc2xhdGUoYS50cmFuc2xhdGVYLCBhLnRyYW5zbGF0ZVksIGIudHJhbnNsYXRlWCwgYi50cmFuc2xhdGVZLCBzLCBxKTtcbiAgICByb3RhdGUoYS5yb3RhdGUsIGIucm90YXRlLCBzLCBxKTtcbiAgICBza2V3WChhLnNrZXdYLCBiLnNrZXdYLCBzLCBxKTtcbiAgICBzY2FsZShhLnNjYWxlWCwgYS5zY2FsZVksIGIuc2NhbGVYLCBiLnNjYWxlWSwgcywgcSk7XG4gICAgYSA9IGIgPSBudWxsOyAvLyBnY1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgaSA9IC0xLCBuID0gcS5sZW5ndGgsIG87XG4gICAgICB3aGlsZSAoKytpIDwgbikgc1sobyA9IHFbaV0pLmldID0gby54KHQpO1xuICAgICAgcmV0dXJuIHMuam9pbihcIlwiKTtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgdmFyIGludGVycG9sYXRlVHJhbnNmb3JtQ3NzID0gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2VDc3MsIFwicHgsIFwiLCBcInB4KVwiLCBcImRlZylcIik7XG5leHBvcnQgdmFyIGludGVycG9sYXRlVHJhbnNmb3JtU3ZnID0gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2VTdmcsIFwiLCBcIiwgXCIpXCIsIFwiKVwiKTtcbiIsImltcG9ydCB7Y3ViZWhlbGl4IGFzIGNvbG9yQ3ViZWhlbGl4fSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCBjb2xvciwge2h1ZX0gZnJvbSBcIi4vY29sb3JcIjtcblxuZnVuY3Rpb24gY3ViZWhlbGl4KGh1ZSkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGN1YmVoZWxpeEdhbW1hKHkpIHtcbiAgICB5ID0gK3k7XG5cbiAgICBmdW5jdGlvbiBjdWJlaGVsaXgoc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIGggPSBodWUoKHN0YXJ0ID0gY29sb3JDdWJlaGVsaXgoc3RhcnQpKS5oLCAoZW5kID0gY29sb3JDdWJlaGVsaXgoZW5kKSkuaCksXG4gICAgICAgICAgcyA9IGNvbG9yKHN0YXJ0LnMsIGVuZC5zKSxcbiAgICAgICAgICBsID0gY29sb3Ioc3RhcnQubCwgZW5kLmwpLFxuICAgICAgICAgIG9wYWNpdHkgPSBjb2xvcihzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgICBzdGFydC5oID0gaCh0KTtcbiAgICAgICAgc3RhcnQucyA9IHModCk7XG4gICAgICAgIHN0YXJ0LmwgPSBsKE1hdGgucG93KHQsIHkpKTtcbiAgICAgICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgICAgIHJldHVybiBzdGFydCArIFwiXCI7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGN1YmVoZWxpeC5nYW1tYSA9IGN1YmVoZWxpeEdhbW1hO1xuXG4gICAgcmV0dXJuIGN1YmVoZWxpeDtcbiAgfSkoMSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGN1YmVoZWxpeChodWUpO1xuZXhwb3J0IHZhciBjdWJlaGVsaXhMb25nID0gY3ViZWhlbGl4KGNvbG9yKTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gK3g7XG59XG4iLCJpbXBvcnQge2Jpc2VjdH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2ludGVycG9sYXRlIGFzIGludGVycG9sYXRlVmFsdWUsIGludGVycG9sYXRlUm91bmR9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHttYXAsIHNsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlclwiO1xuXG52YXIgdW5pdCA9IFswLCAxXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlaW50ZXJwb2xhdGVMaW5lYXIoYSwgYikge1xuICByZXR1cm4gKGIgLT0gKGEgPSArYSkpXG4gICAgICA/IGZ1bmN0aW9uKHgpIHsgcmV0dXJuICh4IC0gYSkgLyBiOyB9XG4gICAgICA6IGNvbnN0YW50KGIpO1xufVxuXG5mdW5jdGlvbiBkZWludGVycG9sYXRlQ2xhbXAoZGVpbnRlcnBvbGF0ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oYSwgYikge1xuICAgIHZhciBkID0gZGVpbnRlcnBvbGF0ZShhID0gK2EsIGIgPSArYik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHggPD0gYSA/IDAgOiB4ID49IGIgPyAxIDogZCh4KTsgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVpbnRlcnBvbGF0ZUNsYW1wKHJlaW50ZXJwb2xhdGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGEsIGIpIHtcbiAgICB2YXIgciA9IHJlaW50ZXJwb2xhdGUoYSA9ICthLCBiID0gK2IpO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7IHJldHVybiB0IDw9IDAgPyBhIDogdCA+PSAxID8gYiA6IHIodCk7IH07XG4gIH07XG59XG5cbmZ1bmN0aW9uIGJpbWFwKGRvbWFpbiwgcmFuZ2UsIGRlaW50ZXJwb2xhdGUsIHJlaW50ZXJwb2xhdGUpIHtcbiAgdmFyIGQwID0gZG9tYWluWzBdLCBkMSA9IGRvbWFpblsxXSwgcjAgPSByYW5nZVswXSwgcjEgPSByYW5nZVsxXTtcbiAgaWYgKGQxIDwgZDApIGQwID0gZGVpbnRlcnBvbGF0ZShkMSwgZDApLCByMCA9IHJlaW50ZXJwb2xhdGUocjEsIHIwKTtcbiAgZWxzZSBkMCA9IGRlaW50ZXJwb2xhdGUoZDAsIGQxKSwgcjAgPSByZWludGVycG9sYXRlKHIwLCByMSk7XG4gIHJldHVybiBmdW5jdGlvbih4KSB7IHJldHVybiByMChkMCh4KSk7IH07XG59XG5cbmZ1bmN0aW9uIHBvbHltYXAoZG9tYWluLCByYW5nZSwgZGVpbnRlcnBvbGF0ZSwgcmVpbnRlcnBvbGF0ZSkge1xuICB2YXIgaiA9IE1hdGgubWluKGRvbWFpbi5sZW5ndGgsIHJhbmdlLmxlbmd0aCkgLSAxLFxuICAgICAgZCA9IG5ldyBBcnJheShqKSxcbiAgICAgIHIgPSBuZXcgQXJyYXkoaiksXG4gICAgICBpID0gLTE7XG5cbiAgLy8gUmV2ZXJzZSBkZXNjZW5kaW5nIGRvbWFpbnMuXG4gIGlmIChkb21haW5bal0gPCBkb21haW5bMF0pIHtcbiAgICBkb21haW4gPSBkb21haW4uc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgcmFuZ2UgPSByYW5nZS5zbGljZSgpLnJldmVyc2UoKTtcbiAgfVxuXG4gIHdoaWxlICgrK2kgPCBqKSB7XG4gICAgZFtpXSA9IGRlaW50ZXJwb2xhdGUoZG9tYWluW2ldLCBkb21haW5baSArIDFdKTtcbiAgICByW2ldID0gcmVpbnRlcnBvbGF0ZShyYW5nZVtpXSwgcmFuZ2VbaSArIDFdKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbih4KSB7XG4gICAgdmFyIGkgPSBiaXNlY3QoZG9tYWluLCB4LCAxLCBqKSAtIDE7XG4gICAgcmV0dXJuIHJbaV0oZFtpXSh4KSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KHNvdXJjZSwgdGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXRcbiAgICAgIC5kb21haW4oc291cmNlLmRvbWFpbigpKVxuICAgICAgLnJhbmdlKHNvdXJjZS5yYW5nZSgpKVxuICAgICAgLmludGVycG9sYXRlKHNvdXJjZS5pbnRlcnBvbGF0ZSgpKVxuICAgICAgLmNsYW1wKHNvdXJjZS5jbGFtcCgpKTtcbn1cblxuLy8gZGVpbnRlcnBvbGF0ZShhLCBiKSh4KSB0YWtlcyBhIGRvbWFpbiB2YWx1ZSB4IGluIFthLGJdIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciB0IGluIFswLDFdLlxuLy8gcmVpbnRlcnBvbGF0ZShhLCBiKSh0KSB0YWtlcyBhIHBhcmFtZXRlciB0IGluIFswLDFdIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGRvbWFpbiB2YWx1ZSB4IGluIFthLGJdLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGludW91cyhkZWludGVycG9sYXRlLCByZWludGVycG9sYXRlKSB7XG4gIHZhciBkb21haW4gPSB1bml0LFxuICAgICAgcmFuZ2UgPSB1bml0LFxuICAgICAgaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZVZhbHVlLFxuICAgICAgY2xhbXAgPSBmYWxzZSxcbiAgICAgIHBpZWNld2lzZSxcbiAgICAgIG91dHB1dCxcbiAgICAgIGlucHV0O1xuXG4gIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgcGllY2V3aXNlID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKSA+IDIgPyBwb2x5bWFwIDogYmltYXA7XG4gICAgb3V0cHV0ID0gaW5wdXQgPSBudWxsO1xuICAgIHJldHVybiBzY2FsZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICByZXR1cm4gKG91dHB1dCB8fCAob3V0cHV0ID0gcGllY2V3aXNlKGRvbWFpbiwgcmFuZ2UsIGNsYW1wID8gZGVpbnRlcnBvbGF0ZUNsYW1wKGRlaW50ZXJwb2xhdGUpIDogZGVpbnRlcnBvbGF0ZSwgaW50ZXJwb2xhdGUpKSkoK3gpO1xuICB9XG5cbiAgc2NhbGUuaW52ZXJ0ID0gZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiAoaW5wdXQgfHwgKGlucHV0ID0gcGllY2V3aXNlKHJhbmdlLCBkb21haW4sIGRlaW50ZXJwb2xhdGVMaW5lYXIsIGNsYW1wID8gcmVpbnRlcnBvbGF0ZUNsYW1wKHJlaW50ZXJwb2xhdGUpIDogcmVpbnRlcnBvbGF0ZSkpKSgreSk7XG4gIH07XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRvbWFpbiA9IG1hcC5jYWxsKF8sIG51bWJlciksIHJlc2NhbGUoKSkgOiBkb21haW4uc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IHNsaWNlLmNhbGwoXyksIHJlc2NhbGUoKSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlUm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIHJhbmdlID0gc2xpY2UuY2FsbChfKSwgaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZVJvdW5kLCByZXNjYWxlKCk7XG4gIH07XG5cbiAgc2NhbGUuY2xhbXAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2xhbXAgPSAhIV8sIHJlc2NhbGUoKSkgOiBjbGFtcDtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0ZSA9IF8sIHJlc2NhbGUoKSkgOiBpbnRlcnBvbGF0ZTtcbiAgfTtcblxuICByZXR1cm4gcmVzY2FsZSgpO1xufVxuIiwiLy8gQ29tcHV0ZXMgdGhlIGRlY2ltYWwgY29lZmZpY2llbnQgYW5kIGV4cG9uZW50IG9mIHRoZSBzcGVjaWZpZWQgbnVtYmVyIHggd2l0aFxuLy8gc2lnbmlmaWNhbnQgZGlnaXRzIHAsIHdoZXJlIHggaXMgcG9zaXRpdmUgYW5kIHAgaXMgaW4gWzEsIDIxXSBvciB1bmRlZmluZWQuXG4vLyBGb3IgZXhhbXBsZSwgZm9ybWF0RGVjaW1hbCgxLjIzKSByZXR1cm5zIFtcIjEyM1wiLCAwXS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHApIHtcbiAgaWYgKChpID0gKHggPSBwID8geC50b0V4cG9uZW50aWFsKHAgLSAxKSA6IHgudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKFwiZVwiKSkgPCAwKSByZXR1cm4gbnVsbDsgLy8gTmFOLCDCsUluZmluaXR5XG4gIHZhciBpLCBjb2VmZmljaWVudCA9IHguc2xpY2UoMCwgaSk7XG5cbiAgLy8gVGhlIHN0cmluZyByZXR1cm5lZCBieSB0b0V4cG9uZW50aWFsIGVpdGhlciBoYXMgdGhlIGZvcm0gXFxkXFwuXFxkK2VbLStdXFxkK1xuICAvLyAoZS5nLiwgMS4yZSszKSBvciB0aGUgZm9ybSBcXGRlWy0rXVxcZCsgKGUuZy4sIDFlKzMpLlxuICByZXR1cm4gW1xuICAgIGNvZWZmaWNpZW50Lmxlbmd0aCA+IDEgPyBjb2VmZmljaWVudFswXSArIGNvZWZmaWNpZW50LnNsaWNlKDIpIDogY29lZmZpY2llbnQsXG4gICAgK3guc2xpY2UoaSArIDEpXG4gIF07XG59XG4iLCJpbXBvcnQgZm9ybWF0RGVjaW1hbCBmcm9tIFwiLi9mb3JtYXREZWNpbWFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHggPSBmb3JtYXREZWNpbWFsKE1hdGguYWJzKHgpKSwgeCA/IHhbMV0gOiBOYU47XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihncm91cGluZywgdGhvdXNhbmRzKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgd2lkdGgpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmxlbmd0aCxcbiAgICAgICAgdCA9IFtdLFxuICAgICAgICBqID0gMCxcbiAgICAgICAgZyA9IGdyb3VwaW5nWzBdLFxuICAgICAgICBsZW5ndGggPSAwO1xuXG4gICAgd2hpbGUgKGkgPiAwICYmIGcgPiAwKSB7XG4gICAgICBpZiAobGVuZ3RoICsgZyArIDEgPiB3aWR0aCkgZyA9IE1hdGgubWF4KDEsIHdpZHRoIC0gbGVuZ3RoKTtcbiAgICAgIHQucHVzaCh2YWx1ZS5zdWJzdHJpbmcoaSAtPSBnLCBpICsgZykpO1xuICAgICAgaWYgKChsZW5ndGggKz0gZyArIDEpID4gd2lkdGgpIGJyZWFrO1xuICAgICAgZyA9IGdyb3VwaW5nW2ogPSAoaiArIDEpICUgZ3JvdXBpbmcubGVuZ3RoXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdC5yZXZlcnNlKCkuam9pbih0aG91c2FuZHMpO1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obnVtZXJhbHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1swLTldL2csIGZ1bmN0aW9uKGkpIHtcbiAgICAgIHJldHVybiBudW1lcmFsc1sraV07XG4gICAgfSk7XG4gIH07XG59XG4iLCIvLyBbW2ZpbGxdYWxpZ25dW3NpZ25dW3N5bWJvbF1bMF1bd2lkdGhdWyxdWy5wcmVjaXNpb25dW35dW3R5cGVdXG52YXIgcmUgPSAvXig/OiguKT8oWzw+PV5dKSk/KFsrXFwtKCBdKT8oWyQjXSk/KDApPyhcXGQrKT8oLCk/KFxcLlxcZCspPyh+KT8oW2EteiVdKT8kL2k7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpIHtcbiAgcmV0dXJuIG5ldyBGb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKTtcbn1cblxuZm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZSA9IEZvcm1hdFNwZWNpZmllci5wcm90b3R5cGU7IC8vIGluc3RhbmNlb2ZcblxuZnVuY3Rpb24gRm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcikge1xuICBpZiAoIShtYXRjaCA9IHJlLmV4ZWMoc3BlY2lmaWVyKSkpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZm9ybWF0OiBcIiArIHNwZWNpZmllcik7XG4gIHZhciBtYXRjaDtcbiAgdGhpcy5maWxsID0gbWF0Y2hbMV0gfHwgXCIgXCI7XG4gIHRoaXMuYWxpZ24gPSBtYXRjaFsyXSB8fCBcIj5cIjtcbiAgdGhpcy5zaWduID0gbWF0Y2hbM10gfHwgXCItXCI7XG4gIHRoaXMuc3ltYm9sID0gbWF0Y2hbNF0gfHwgXCJcIjtcbiAgdGhpcy56ZXJvID0gISFtYXRjaFs1XTtcbiAgdGhpcy53aWR0aCA9IG1hdGNoWzZdICYmICttYXRjaFs2XTtcbiAgdGhpcy5jb21tYSA9ICEhbWF0Y2hbN107XG4gIHRoaXMucHJlY2lzaW9uID0gbWF0Y2hbOF0gJiYgK21hdGNoWzhdLnNsaWNlKDEpO1xuICB0aGlzLnRyaW0gPSAhIW1hdGNoWzldO1xuICB0aGlzLnR5cGUgPSBtYXRjaFsxMF0gfHwgXCJcIjtcbn1cblxuRm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5maWxsXG4gICAgICArIHRoaXMuYWxpZ25cbiAgICAgICsgdGhpcy5zaWduXG4gICAgICArIHRoaXMuc3ltYm9sXG4gICAgICArICh0aGlzLnplcm8gPyBcIjBcIiA6IFwiXCIpXG4gICAgICArICh0aGlzLndpZHRoID09IG51bGwgPyBcIlwiIDogTWF0aC5tYXgoMSwgdGhpcy53aWR0aCB8IDApKVxuICAgICAgKyAodGhpcy5jb21tYSA/IFwiLFwiIDogXCJcIilcbiAgICAgICsgKHRoaXMucHJlY2lzaW9uID09IG51bGwgPyBcIlwiIDogXCIuXCIgKyBNYXRoLm1heCgwLCB0aGlzLnByZWNpc2lvbiB8IDApKVxuICAgICAgKyAodGhpcy50cmltID8gXCJ+XCIgOiBcIlwiKVxuICAgICAgKyB0aGlzLnR5cGU7XG59O1xuIiwiLy8gVHJpbXMgaW5zaWduaWZpY2FudCB6ZXJvcywgZS5nLiwgcmVwbGFjZXMgMS4yMDAwayB3aXRoIDEuMmsuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzKSB7XG4gIG91dDogZm9yICh2YXIgbiA9IHMubGVuZ3RoLCBpID0gMSwgaTAgPSAtMSwgaTE7IGkgPCBuOyArK2kpIHtcbiAgICBzd2l0Y2ggKHNbaV0pIHtcbiAgICAgIGNhc2UgXCIuXCI6IGkwID0gaTEgPSBpOyBicmVhaztcbiAgICAgIGNhc2UgXCIwXCI6IGlmIChpMCA9PT0gMCkgaTAgPSBpOyBpMSA9IGk7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogaWYgKGkwID4gMCkgeyBpZiAoIStzW2ldKSBicmVhayBvdXQ7IGkwID0gMDsgfSBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGkwID4gMCA/IHMuc2xpY2UoMCwgaTApICsgcy5zbGljZShpMSArIDEpIDogcztcbn1cbiIsImltcG9ydCBmb3JtYXREZWNpbWFsIGZyb20gXCIuL2Zvcm1hdERlY2ltYWxcIjtcblxuZXhwb3J0IHZhciBwcmVmaXhFeHBvbmVudDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWwoeCwgcCk7XG4gIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICB2YXIgY29lZmZpY2llbnQgPSBkWzBdLFxuICAgICAgZXhwb25lbnQgPSBkWzFdLFxuICAgICAgaSA9IGV4cG9uZW50IC0gKHByZWZpeEV4cG9uZW50ID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQgLyAzKSkpICogMykgKyAxLFxuICAgICAgbiA9IGNvZWZmaWNpZW50Lmxlbmd0aDtcbiAgcmV0dXJuIGkgPT09IG4gPyBjb2VmZmljaWVudFxuICAgICAgOiBpID4gbiA/IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGkgLSBuICsgMSkuam9pbihcIjBcIilcbiAgICAgIDogaSA+IDAgPyBjb2VmZmljaWVudC5zbGljZSgwLCBpKSArIFwiLlwiICsgY29lZmZpY2llbnQuc2xpY2UoaSlcbiAgICAgIDogXCIwLlwiICsgbmV3IEFycmF5KDEgLSBpKS5qb2luKFwiMFwiKSArIGZvcm1hdERlY2ltYWwoeCwgTWF0aC5tYXgoMCwgcCArIGkgLSAxKSlbMF07IC8vIGxlc3MgdGhhbiAxeSFcbn1cbiIsImltcG9ydCBmb3JtYXREZWNpbWFsIGZyb20gXCIuL2Zvcm1hdERlY2ltYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWwoeCwgcCk7XG4gIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICB2YXIgY29lZmZpY2llbnQgPSBkWzBdLFxuICAgICAgZXhwb25lbnQgPSBkWzFdO1xuICByZXR1cm4gZXhwb25lbnQgPCAwID8gXCIwLlwiICsgbmV3IEFycmF5KC1leHBvbmVudCkuam9pbihcIjBcIikgKyBjb2VmZmljaWVudFxuICAgICAgOiBjb2VmZmljaWVudC5sZW5ndGggPiBleHBvbmVudCArIDEgPyBjb2VmZmljaWVudC5zbGljZSgwLCBleHBvbmVudCArIDEpICsgXCIuXCIgKyBjb2VmZmljaWVudC5zbGljZShleHBvbmVudCArIDEpXG4gICAgICA6IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGV4cG9uZW50IC0gY29lZmZpY2llbnQubGVuZ3RoICsgMikuam9pbihcIjBcIik7XG59XG4iLCJpbXBvcnQgZm9ybWF0UHJlZml4QXV0byBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvXCI7XG5pbXBvcnQgZm9ybWF0Um91bmRlZCBmcm9tIFwiLi9mb3JtYXRSb3VuZGVkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXCIlXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuICh4ICogMTAwKS50b0ZpeGVkKHApOyB9LFxuICBcImJcIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygyKTsgfSxcbiAgXCJjXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHggKyBcIlwiOyB9LFxuICBcImRcIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygxMCk7IH0sXG4gIFwiZVwiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiB4LnRvRXhwb25lbnRpYWwocCk7IH0sXG4gIFwiZlwiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiB4LnRvRml4ZWQocCk7IH0sXG4gIFwiZ1wiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiB4LnRvUHJlY2lzaW9uKHApOyB9LFxuICBcIm9cIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZyg4KTsgfSxcbiAgXCJwXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIGZvcm1hdFJvdW5kZWQoeCAqIDEwMCwgcCk7IH0sXG4gIFwiclwiOiBmb3JtYXRSb3VuZGVkLFxuICBcInNcIjogZm9ybWF0UHJlZml4QXV0byxcbiAgXCJYXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7IH0sXG4gIFwieFwiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDE2KTsgfVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHg7XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnRcIjtcbmltcG9ydCBmb3JtYXRHcm91cCBmcm9tIFwiLi9mb3JtYXRHcm91cFwiO1xuaW1wb3J0IGZvcm1hdE51bWVyYWxzIGZyb20gXCIuL2Zvcm1hdE51bWVyYWxzXCI7XG5pbXBvcnQgZm9ybWF0U3BlY2lmaWVyIGZyb20gXCIuL2Zvcm1hdFNwZWNpZmllclwiO1xuaW1wb3J0IGZvcm1hdFRyaW0gZnJvbSBcIi4vZm9ybWF0VHJpbVwiO1xuaW1wb3J0IGZvcm1hdFR5cGVzIGZyb20gXCIuL2Zvcm1hdFR5cGVzXCI7XG5pbXBvcnQge3ByZWZpeEV4cG9uZW50fSBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvXCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHlcIjtcblxudmFyIHByZWZpeGVzID0gW1wieVwiLFwielwiLFwiYVwiLFwiZlwiLFwicFwiLFwiblwiLFwiwrVcIixcIm1cIixcIlwiLFwia1wiLFwiTVwiLFwiR1wiLFwiVFwiLFwiUFwiLFwiRVwiLFwiWlwiLFwiWVwiXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obG9jYWxlKSB7XG4gIHZhciBncm91cCA9IGxvY2FsZS5ncm91cGluZyAmJiBsb2NhbGUudGhvdXNhbmRzID8gZm9ybWF0R3JvdXAobG9jYWxlLmdyb3VwaW5nLCBsb2NhbGUudGhvdXNhbmRzKSA6IGlkZW50aXR5LFxuICAgICAgY3VycmVuY3kgPSBsb2NhbGUuY3VycmVuY3ksXG4gICAgICBkZWNpbWFsID0gbG9jYWxlLmRlY2ltYWwsXG4gICAgICBudW1lcmFscyA9IGxvY2FsZS5udW1lcmFscyA/IGZvcm1hdE51bWVyYWxzKGxvY2FsZS5udW1lcmFscykgOiBpZGVudGl0eSxcbiAgICAgIHBlcmNlbnQgPSBsb2NhbGUucGVyY2VudCB8fCBcIiVcIjtcblxuICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyKSB7XG4gICAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcik7XG5cbiAgICB2YXIgZmlsbCA9IHNwZWNpZmllci5maWxsLFxuICAgICAgICBhbGlnbiA9IHNwZWNpZmllci5hbGlnbixcbiAgICAgICAgc2lnbiA9IHNwZWNpZmllci5zaWduLFxuICAgICAgICBzeW1ib2wgPSBzcGVjaWZpZXIuc3ltYm9sLFxuICAgICAgICB6ZXJvID0gc3BlY2lmaWVyLnplcm8sXG4gICAgICAgIHdpZHRoID0gc3BlY2lmaWVyLndpZHRoLFxuICAgICAgICBjb21tYSA9IHNwZWNpZmllci5jb21tYSxcbiAgICAgICAgcHJlY2lzaW9uID0gc3BlY2lmaWVyLnByZWNpc2lvbixcbiAgICAgICAgdHJpbSA9IHNwZWNpZmllci50cmltLFxuICAgICAgICB0eXBlID0gc3BlY2lmaWVyLnR5cGU7XG5cbiAgICAvLyBUaGUgXCJuXCIgdHlwZSBpcyBhbiBhbGlhcyBmb3IgXCIsZ1wiLlxuICAgIGlmICh0eXBlID09PSBcIm5cIikgY29tbWEgPSB0cnVlLCB0eXBlID0gXCJnXCI7XG5cbiAgICAvLyBUaGUgXCJcIiB0eXBlLCBhbmQgYW55IGludmFsaWQgdHlwZSwgaXMgYW4gYWxpYXMgZm9yIFwiLjEyfmdcIi5cbiAgICBlbHNlIGlmICghZm9ybWF0VHlwZXNbdHlwZV0pIHByZWNpc2lvbiA9PSBudWxsICYmIChwcmVjaXNpb24gPSAxMiksIHRyaW0gPSB0cnVlLCB0eXBlID0gXCJnXCI7XG5cbiAgICAvLyBJZiB6ZXJvIGZpbGwgaXMgc3BlY2lmaWVkLCBwYWRkaW5nIGdvZXMgYWZ0ZXIgc2lnbiBhbmQgYmVmb3JlIGRpZ2l0cy5cbiAgICBpZiAoemVybyB8fCAoZmlsbCA9PT0gXCIwXCIgJiYgYWxpZ24gPT09IFwiPVwiKSkgemVybyA9IHRydWUsIGZpbGwgPSBcIjBcIiwgYWxpZ24gPSBcIj1cIjtcblxuICAgIC8vIENvbXB1dGUgdGhlIHByZWZpeCBhbmQgc3VmZml4LlxuICAgIC8vIEZvciBTSS1wcmVmaXgsIHRoZSBzdWZmaXggaXMgbGF6aWx5IGNvbXB1dGVkLlxuICAgIHZhciBwcmVmaXggPSBzeW1ib2wgPT09IFwiJFwiID8gY3VycmVuY3lbMF0gOiBzeW1ib2wgPT09IFwiI1wiICYmIC9bYm94WF0vLnRlc3QodHlwZSkgPyBcIjBcIiArIHR5cGUudG9Mb3dlckNhc2UoKSA6IFwiXCIsXG4gICAgICAgIHN1ZmZpeCA9IHN5bWJvbCA9PT0gXCIkXCIgPyBjdXJyZW5jeVsxXSA6IC9bJXBdLy50ZXN0KHR5cGUpID8gcGVyY2VudCA6IFwiXCI7XG5cbiAgICAvLyBXaGF0IGZvcm1hdCBmdW5jdGlvbiBzaG91bGQgd2UgdXNlP1xuICAgIC8vIElzIHRoaXMgYW4gaW50ZWdlciB0eXBlP1xuICAgIC8vIENhbiB0aGlzIHR5cGUgZ2VuZXJhdGUgZXhwb25lbnRpYWwgbm90YXRpb24/XG4gICAgdmFyIGZvcm1hdFR5cGUgPSBmb3JtYXRUeXBlc1t0eXBlXSxcbiAgICAgICAgbWF5YmVTdWZmaXggPSAvW2RlZmdwcnMlXS8udGVzdCh0eXBlKTtcblxuICAgIC8vIFNldCB0aGUgZGVmYXVsdCBwcmVjaXNpb24gaWYgbm90IHNwZWNpZmllZCxcbiAgICAvLyBvciBjbGFtcCB0aGUgc3BlY2lmaWVkIHByZWNpc2lvbiB0byB0aGUgc3VwcG9ydGVkIHJhbmdlLlxuICAgIC8vIEZvciBzaWduaWZpY2FudCBwcmVjaXNpb24sIGl0IG11c3QgYmUgaW4gWzEsIDIxXS5cbiAgICAvLyBGb3IgZml4ZWQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFswLCAyMF0uXG4gICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uID09IG51bGwgPyA2XG4gICAgICAgIDogL1tncHJzXS8udGVzdCh0eXBlKSA/IE1hdGgubWF4KDEsIE1hdGgubWluKDIxLCBwcmVjaXNpb24pKVxuICAgICAgICA6IE1hdGgubWF4KDAsIE1hdGgubWluKDIwLCBwcmVjaXNpb24pKTtcblxuICAgIGZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSkge1xuICAgICAgdmFyIHZhbHVlUHJlZml4ID0gcHJlZml4LFxuICAgICAgICAgIHZhbHVlU3VmZml4ID0gc3VmZml4LFxuICAgICAgICAgIGksIG4sIGM7XG5cbiAgICAgIGlmICh0eXBlID09PSBcImNcIikge1xuICAgICAgICB2YWx1ZVN1ZmZpeCA9IGZvcm1hdFR5cGUodmFsdWUpICsgdmFsdWVTdWZmaXg7XG4gICAgICAgIHZhbHVlID0gXCJcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gK3ZhbHVlO1xuXG4gICAgICAgIC8vIFBlcmZvcm0gdGhlIGluaXRpYWwgZm9ybWF0dGluZy5cbiAgICAgICAgdmFyIHZhbHVlTmVnYXRpdmUgPSB2YWx1ZSA8IDA7XG4gICAgICAgIHZhbHVlID0gZm9ybWF0VHlwZShNYXRoLmFicyh2YWx1ZSksIHByZWNpc2lvbik7XG5cbiAgICAgICAgLy8gVHJpbSBpbnNpZ25pZmljYW50IHplcm9zLlxuICAgICAgICBpZiAodHJpbSkgdmFsdWUgPSBmb3JtYXRUcmltKHZhbHVlKTtcblxuICAgICAgICAvLyBJZiBhIG5lZ2F0aXZlIHZhbHVlIHJvdW5kcyB0byB6ZXJvIGR1cmluZyBmb3JtYXR0aW5nLCB0cmVhdCBhcyBwb3NpdGl2ZS5cbiAgICAgICAgaWYgKHZhbHVlTmVnYXRpdmUgJiYgK3ZhbHVlID09PSAwKSB2YWx1ZU5lZ2F0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguXG4gICAgICAgIHZhbHVlUHJlZml4ID0gKHZhbHVlTmVnYXRpdmUgPyAoc2lnbiA9PT0gXCIoXCIgPyBzaWduIDogXCItXCIpIDogc2lnbiA9PT0gXCItXCIgfHwgc2lnbiA9PT0gXCIoXCIgPyBcIlwiIDogc2lnbikgKyB2YWx1ZVByZWZpeDtcbiAgICAgICAgdmFsdWVTdWZmaXggPSAodHlwZSA9PT0gXCJzXCIgPyBwcmVmaXhlc1s4ICsgcHJlZml4RXhwb25lbnQgLyAzXSA6IFwiXCIpICsgdmFsdWVTdWZmaXggKyAodmFsdWVOZWdhdGl2ZSAmJiBzaWduID09PSBcIihcIiA/IFwiKVwiIDogXCJcIik7XG5cbiAgICAgICAgLy8gQnJlYWsgdGhlIGZvcm1hdHRlZCB2YWx1ZSBpbnRvIHRoZSBpbnRlZ2VyIOKAnHZhbHVl4oCdIHBhcnQgdGhhdCBjYW4gYmVcbiAgICAgICAgLy8gZ3JvdXBlZCwgYW5kIGZyYWN0aW9uYWwgb3IgZXhwb25lbnRpYWwg4oCcc3VmZml44oCdIHBhcnQgdGhhdCBpcyBub3QuXG4gICAgICAgIGlmIChtYXliZVN1ZmZpeCkge1xuICAgICAgICAgIGkgPSAtMSwgbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgICAgICAgaWYgKGMgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpLCA0OCA+IGMgfHwgYyA+IDU3KSB7XG4gICAgICAgICAgICAgIHZhbHVlU3VmZml4ID0gKGMgPT09IDQ2ID8gZGVjaW1hbCArIHZhbHVlLnNsaWNlKGkgKyAxKSA6IHZhbHVlLnNsaWNlKGkpKSArIHZhbHVlU3VmZml4O1xuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIG5vdCBcIjBcIiwgZ3JvdXBpbmcgaXMgYXBwbGllZCBiZWZvcmUgcGFkZGluZy5cbiAgICAgIGlmIChjb21tYSAmJiAhemVybykgdmFsdWUgPSBncm91cCh2YWx1ZSwgSW5maW5pdHkpO1xuXG4gICAgICAvLyBDb21wdXRlIHRoZSBwYWRkaW5nLlxuICAgICAgdmFyIGxlbmd0aCA9IHZhbHVlUHJlZml4Lmxlbmd0aCArIHZhbHVlLmxlbmd0aCArIHZhbHVlU3VmZml4Lmxlbmd0aCxcbiAgICAgICAgICBwYWRkaW5nID0gbGVuZ3RoIDwgd2lkdGggPyBuZXcgQXJyYXkod2lkdGggLSBsZW5ndGggKyAxKS5qb2luKGZpbGwpIDogXCJcIjtcblxuICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGFmdGVyIHBhZGRpbmcuXG4gICAgICBpZiAoY29tbWEgJiYgemVybykgdmFsdWUgPSBncm91cChwYWRkaW5nICsgdmFsdWUsIHBhZGRpbmcubGVuZ3RoID8gd2lkdGggLSB2YWx1ZVN1ZmZpeC5sZW5ndGggOiBJbmZpbml0eSksIHBhZGRpbmcgPSBcIlwiO1xuXG4gICAgICAvLyBSZWNvbnN0cnVjdCB0aGUgZmluYWwgb3V0cHV0IGJhc2VkIG9uIHRoZSBkZXNpcmVkIGFsaWdubWVudC5cbiAgICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgICAgY2FzZSBcIjxcIjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXggKyBwYWRkaW5nOyBicmVhaztcbiAgICAgICAgY2FzZSBcIj1cIjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHBhZGRpbmcgKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhaztcbiAgICAgICAgY2FzZSBcIl5cIjogdmFsdWUgPSBwYWRkaW5nLnNsaWNlKDAsIGxlbmd0aCA9IHBhZGRpbmcubGVuZ3RoID4+IDEpICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4ICsgcGFkZGluZy5zbGljZShsZW5ndGgpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDogdmFsdWUgPSBwYWRkaW5nICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bWVyYWxzKHZhbHVlKTtcbiAgICB9XG5cbiAgICBmb3JtYXQudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBzcGVjaWZpZXIgKyBcIlwiO1xuICAgIH07XG5cbiAgICByZXR1cm4gZm9ybWF0O1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UHJlZml4KHNwZWNpZmllciwgdmFsdWUpIHtcbiAgICB2YXIgZiA9IG5ld0Zvcm1hdCgoc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciksIHNwZWNpZmllci50eXBlID0gXCJmXCIsIHNwZWNpZmllcikpLFxuICAgICAgICBlID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMsXG4gICAgICAgIGsgPSBNYXRoLnBvdygxMCwgLWUpLFxuICAgICAgICBwcmVmaXggPSBwcmVmaXhlc1s4ICsgZSAvIDNdO1xuICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGYoayAqIHZhbHVlKSArIHByZWZpeDtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtYXQ6IG5ld0Zvcm1hdCxcbiAgICBmb3JtYXRQcmVmaXg6IGZvcm1hdFByZWZpeFxuICB9O1xufVxuIiwiaW1wb3J0IGZvcm1hdExvY2FsZSBmcm9tIFwiLi9sb2NhbGVcIjtcblxudmFyIGxvY2FsZTtcbmV4cG9ydCB2YXIgZm9ybWF0O1xuZXhwb3J0IHZhciBmb3JtYXRQcmVmaXg7XG5cbmRlZmF1bHRMb2NhbGUoe1xuICBkZWNpbWFsOiBcIi5cIixcbiAgdGhvdXNhbmRzOiBcIixcIixcbiAgZ3JvdXBpbmc6IFszXSxcbiAgY3VycmVuY3k6IFtcIiRcIiwgXCJcIl1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWZhdWx0TG9jYWxlKGRlZmluaXRpb24pIHtcbiAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKGRlZmluaXRpb24pO1xuICBmb3JtYXQgPSBsb2NhbGUuZm9ybWF0O1xuICBmb3JtYXRQcmVmaXggPSBsb2NhbGUuZm9ybWF0UHJlZml4O1xuICByZXR1cm4gbG9jYWxlO1xufVxuIiwiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXApIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIC1leHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xufVxuIiwiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXAsIHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCh2YWx1ZSkgLyAzKSkpICogMyAtIGV4cG9uZW50KE1hdGguYWJzKHN0ZXApKSk7XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RlcCwgbWF4KSB7XG4gIHN0ZXAgPSBNYXRoLmFicyhzdGVwKSwgbWF4ID0gTWF0aC5hYnMobWF4KSAtIHN0ZXA7XG4gIHJldHVybiBNYXRoLm1heCgwLCBleHBvbmVudChtYXgpIC0gZXhwb25lbnQoc3RlcCkpICsgMTtcbn1cbiIsImltcG9ydCB7dGlja1N0ZXB9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtmb3JtYXQsIGZvcm1hdFByZWZpeCwgZm9ybWF0U3BlY2lmaWVyLCBwcmVjaXNpb25GaXhlZCwgcHJlY2lzaW9uUHJlZml4LCBwcmVjaXNpb25Sb3VuZH0gZnJvbSBcImQzLWZvcm1hdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkb21haW4sIGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgdmFyIHN0YXJ0ID0gZG9tYWluWzBdLFxuICAgICAgc3RvcCA9IGRvbWFpbltkb21haW4ubGVuZ3RoIC0gMV0sXG4gICAgICBzdGVwID0gdGlja1N0ZXAoc3RhcnQsIHN0b3AsIGNvdW50ID09IG51bGwgPyAxMCA6IGNvdW50KSxcbiAgICAgIHByZWNpc2lvbjtcbiAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciA9PSBudWxsID8gXCIsZlwiIDogc3BlY2lmaWVyKTtcbiAgc3dpdGNoIChzcGVjaWZpZXIudHlwZSkge1xuICAgIGNhc2UgXCJzXCI6IHtcbiAgICAgIHZhciB2YWx1ZSA9IE1hdGgubWF4KE1hdGguYWJzKHN0YXJ0KSwgTWF0aC5hYnMoc3RvcCkpO1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uUHJlZml4KHN0ZXAsIHZhbHVlKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb247XG4gICAgICByZXR1cm4gZm9ybWF0UHJlZml4KHNwZWNpZmllciwgdmFsdWUpO1xuICAgIH1cbiAgICBjYXNlIFwiXCI6XG4gICAgY2FzZSBcImVcIjpcbiAgICBjYXNlIFwiZ1wiOlxuICAgIGNhc2UgXCJwXCI6XG4gICAgY2FzZSBcInJcIjoge1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uUm91bmQoc3RlcCwgTWF0aC5tYXgoTWF0aC5hYnMoc3RhcnQpLCBNYXRoLmFicyhzdG9wKSkpKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbiAtIChzcGVjaWZpZXIudHlwZSA9PT0gXCJlXCIpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgXCJmXCI6XG4gICAgY2FzZSBcIiVcIjoge1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uRml4ZWQoc3RlcCkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uIC0gKHNwZWNpZmllci50eXBlID09PSBcIiVcIikgKiAyO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBmb3JtYXQoc3BlY2lmaWVyKTtcbn1cbiIsImltcG9ydCB7dGlja3MsIHRpY2tJbmNyZW1lbnR9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZU51bWJlciBhcyByZWludGVycG9sYXRlfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7ZGVmYXVsdCBhcyBjb250aW51b3VzLCBjb3B5LCBkZWludGVycG9sYXRlTGluZWFyIGFzIGRlaW50ZXJwb2xhdGV9IGZyb20gXCIuL2NvbnRpbnVvdXNcIjtcbmltcG9ydCB0aWNrRm9ybWF0IGZyb20gXCIuL3RpY2tGb3JtYXRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmVhcmlzaChzY2FsZSkge1xuICB2YXIgZG9tYWluID0gc2NhbGUuZG9tYWluO1xuXG4gIHNjYWxlLnRpY2tzID0gZnVuY3Rpb24oY291bnQpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHJldHVybiB0aWNrcyhkWzBdLCBkW2QubGVuZ3RoIC0gMV0sIGNvdW50ID09IG51bGwgPyAxMCA6IGNvdW50KTtcbiAgfTtcblxuICBzY2FsZS50aWNrRm9ybWF0ID0gZnVuY3Rpb24oY291bnQsIHNwZWNpZmllcikge1xuICAgIHJldHVybiB0aWNrRm9ybWF0KGRvbWFpbigpLCBjb3VudCwgc3BlY2lmaWVyKTtcbiAgfTtcblxuICBzY2FsZS5uaWNlID0gZnVuY3Rpb24oY291bnQpIHtcbiAgICBpZiAoY291bnQgPT0gbnVsbCkgY291bnQgPSAxMDtcblxuICAgIHZhciBkID0gZG9tYWluKCksXG4gICAgICAgIGkwID0gMCxcbiAgICAgICAgaTEgPSBkLmxlbmd0aCAtIDEsXG4gICAgICAgIHN0YXJ0ID0gZFtpMF0sXG4gICAgICAgIHN0b3AgPSBkW2kxXSxcbiAgICAgICAgc3RlcDtcblxuICAgIGlmIChzdG9wIDwgc3RhcnQpIHtcbiAgICAgIHN0ZXAgPSBzdGFydCwgc3RhcnQgPSBzdG9wLCBzdG9wID0gc3RlcDtcbiAgICAgIHN0ZXAgPSBpMCwgaTAgPSBpMSwgaTEgPSBzdGVwO1xuICAgIH1cblxuICAgIHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCk7XG5cbiAgICBpZiAoc3RlcCA+IDApIHtcbiAgICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAvIHN0ZXApICogc3RlcDtcbiAgICAgIHN0b3AgPSBNYXRoLmNlaWwoc3RvcCAvIHN0ZXApICogc3RlcDtcbiAgICAgIHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCk7XG4gICAgfSBlbHNlIGlmIChzdGVwIDwgMCkge1xuICAgICAgc3RhcnQgPSBNYXRoLmNlaWwoc3RhcnQgKiBzdGVwKSAvIHN0ZXA7XG4gICAgICBzdG9wID0gTWF0aC5mbG9vcihzdG9wICogc3RlcCkgLyBzdGVwO1xuICAgICAgc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KTtcbiAgICB9XG5cbiAgICBpZiAoc3RlcCA+IDApIHtcbiAgICAgIGRbaTBdID0gTWF0aC5mbG9vcihzdGFydCAvIHN0ZXApICogc3RlcDtcbiAgICAgIGRbaTFdID0gTWF0aC5jZWlsKHN0b3AgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICBkb21haW4oZCk7XG4gICAgfSBlbHNlIGlmIChzdGVwIDwgMCkge1xuICAgICAgZFtpMF0gPSBNYXRoLmNlaWwoc3RhcnQgKiBzdGVwKSAvIHN0ZXA7XG4gICAgICBkW2kxXSA9IE1hdGguZmxvb3Ioc3RvcCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgIGRvbWFpbihkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2NhbGU7XG4gIH07XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaW5lYXIoKSB7XG4gIHZhciBzY2FsZSA9IGNvbnRpbnVvdXMoZGVpbnRlcnBvbGF0ZSwgcmVpbnRlcnBvbGF0ZSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBsaW5lYXIoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGxpbmVhcmlzaChzY2FsZSk7XG59XG4iLCJ2YXIgdDAgPSBuZXcgRGF0ZSxcbiAgICB0MSA9IG5ldyBEYXRlO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBuZXdJbnRlcnZhbChmbG9vcmksIG9mZnNldGksIGNvdW50LCBmaWVsZCkge1xuXG4gIGZ1bmN0aW9uIGludGVydmFsKGRhdGUpIHtcbiAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSkpLCBkYXRlO1xuICB9XG5cbiAgaW50ZXJ2YWwuZmxvb3IgPSBpbnRlcnZhbDtcblxuICBpbnRlcnZhbC5jZWlsID0gZnVuY3Rpb24oZGF0ZSkge1xuICAgIHJldHVybiBmbG9vcmkoZGF0ZSA9IG5ldyBEYXRlKGRhdGUgLSAxKSksIG9mZnNldGkoZGF0ZSwgMSksIGZsb29yaShkYXRlKSwgZGF0ZTtcbiAgfTtcblxuICBpbnRlcnZhbC5yb3VuZCA9IGZ1bmN0aW9uKGRhdGUpIHtcbiAgICB2YXIgZDAgPSBpbnRlcnZhbChkYXRlKSxcbiAgICAgICAgZDEgPSBpbnRlcnZhbC5jZWlsKGRhdGUpO1xuICAgIHJldHVybiBkYXRlIC0gZDAgPCBkMSAtIGRhdGUgPyBkMCA6IGQxO1xuICB9O1xuXG4gIGludGVydmFsLm9mZnNldCA9IGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICByZXR1cm4gb2Zmc2V0aShkYXRlID0gbmV3IERhdGUoK2RhdGUpLCBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKSksIGRhdGU7XG4gIH07XG5cbiAgaW50ZXJ2YWwucmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIHZhciByYW5nZSA9IFtdLCBwcmV2aW91cztcbiAgICBzdGFydCA9IGludGVydmFsLmNlaWwoc3RhcnQpO1xuICAgIHN0ZXAgPSBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKTtcbiAgICBpZiAoIShzdGFydCA8IHN0b3ApIHx8ICEoc3RlcCA+IDApKSByZXR1cm4gcmFuZ2U7IC8vIGFsc28gaGFuZGxlcyBJbnZhbGlkIERhdGVcbiAgICBkbyByYW5nZS5wdXNoKHByZXZpb3VzID0gbmV3IERhdGUoK3N0YXJ0KSksIG9mZnNldGkoc3RhcnQsIHN0ZXApLCBmbG9vcmkoc3RhcnQpO1xuICAgIHdoaWxlIChwcmV2aW91cyA8IHN0YXJ0ICYmIHN0YXJ0IDwgc3RvcCk7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIGludGVydmFsLmZpbHRlciA9IGZ1bmN0aW9uKHRlc3QpIHtcbiAgICByZXR1cm4gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgICAgaWYgKGRhdGUgPj0gZGF0ZSkgd2hpbGUgKGZsb29yaShkYXRlKSwgIXRlc3QoZGF0ZSkpIGRhdGUuc2V0VGltZShkYXRlIC0gMSk7XG4gICAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgICAgaWYgKGRhdGUgPj0gZGF0ZSkge1xuICAgICAgICBpZiAoc3RlcCA8IDApIHdoaWxlICgrK3N0ZXAgPD0gMCkge1xuICAgICAgICAgIHdoaWxlIChvZmZzZXRpKGRhdGUsIC0xKSwgIXRlc3QoZGF0ZSkpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbiAgICAgICAgfSBlbHNlIHdoaWxlICgtLXN0ZXAgPj0gMCkge1xuICAgICAgICAgIHdoaWxlIChvZmZzZXRpKGRhdGUsICsxKSwgIXRlc3QoZGF0ZSkpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGlmIChjb3VudCkge1xuICAgIGludGVydmFsLmNvdW50ID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgICAgdDAuc2V0VGltZSgrc3RhcnQpLCB0MS5zZXRUaW1lKCtlbmQpO1xuICAgICAgZmxvb3JpKHQwKSwgZmxvb3JpKHQxKTtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKGNvdW50KHQwLCB0MSkpO1xuICAgIH07XG5cbiAgICBpbnRlcnZhbC5ldmVyeSA9IGZ1bmN0aW9uKHN0ZXApIHtcbiAgICAgIHN0ZXAgPSBNYXRoLmZsb29yKHN0ZXApO1xuICAgICAgcmV0dXJuICFpc0Zpbml0ZShzdGVwKSB8fCAhKHN0ZXAgPiAwKSA/IG51bGxcbiAgICAgICAgICA6ICEoc3RlcCA+IDEpID8gaW50ZXJ2YWxcbiAgICAgICAgICA6IGludGVydmFsLmZpbHRlcihmaWVsZFxuICAgICAgICAgICAgICA/IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGZpZWxkKGQpICUgc3RlcCA9PT0gMDsgfVxuICAgICAgICAgICAgICA6IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGludGVydmFsLmNvdW50KDAsIGQpICUgc3RlcCA9PT0gMDsgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBpbnRlcnZhbDtcbn1cbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbFwiO1xuXG52YXIgbWlsbGlzZWNvbmQgPSBpbnRlcnZhbChmdW5jdGlvbigpIHtcbiAgLy8gbm9vcFxufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGVuZCAtIHN0YXJ0O1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbm1pbGxpc2Vjb25kLmV2ZXJ5ID0gZnVuY3Rpb24oaykge1xuICBrID0gTWF0aC5mbG9vcihrKTtcbiAgaWYgKCFpc0Zpbml0ZShrKSB8fCAhKGsgPiAwKSkgcmV0dXJuIG51bGw7XG4gIGlmICghKGsgPiAxKSkgcmV0dXJuIG1pbGxpc2Vjb25kO1xuICByZXR1cm4gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0VGltZShNYXRoLmZsb29yKGRhdGUgLyBrKSAqIGspO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGspO1xuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBrO1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1pbGxpc2Vjb25kO1xuZXhwb3J0IHZhciBtaWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZC5yYW5nZTtcbiIsImV4cG9ydCB2YXIgZHVyYXRpb25TZWNvbmQgPSAxZTM7XG5leHBvcnQgdmFyIGR1cmF0aW9uTWludXRlID0gNmU0O1xuZXhwb3J0IHZhciBkdXJhdGlvbkhvdXIgPSAzNmU1O1xuZXhwb3J0IHZhciBkdXJhdGlvbkRheSA9IDg2NGU1O1xuZXhwb3J0IHZhciBkdXJhdGlvbldlZWsgPSA2MDQ4ZTU7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25TZWNvbmR9IGZyb20gXCIuL2R1cmF0aW9uXCI7XG5cbnZhciBzZWNvbmQgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VGltZShNYXRoLmZsb29yKGRhdGUgLyBkdXJhdGlvblNlY29uZCkgKiBkdXJhdGlvblNlY29uZCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvblNlY29uZCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25TZWNvbmQ7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ1NlY29uZHMoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBzZWNvbmQ7XG5leHBvcnQgdmFyIHNlY29uZHMgPSBzZWNvbmQucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25NaW51dGV9IGZyb20gXCIuL2R1cmF0aW9uXCI7XG5cbnZhciBtaW51dGUgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VGltZShNYXRoLmZsb29yKGRhdGUgLyBkdXJhdGlvbk1pbnV0ZSkgKiBkdXJhdGlvbk1pbnV0ZSk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbk1pbnV0ZSk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25NaW51dGU7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldE1pbnV0ZXMoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBtaW51dGU7XG5leHBvcnQgdmFyIG1pbnV0ZXMgPSBtaW51dGUucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25Ib3VyLCBkdXJhdGlvbk1pbnV0ZX0gZnJvbSBcIi4vZHVyYXRpb25cIjtcblxudmFyIGhvdXIgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIHZhciBvZmZzZXQgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiBkdXJhdGlvbk1pbnV0ZSAlIGR1cmF0aW9uSG91cjtcbiAgaWYgKG9mZnNldCA8IDApIG9mZnNldCArPSBkdXJhdGlvbkhvdXI7XG4gIGRhdGUuc2V0VGltZShNYXRoLmZsb29yKCgrZGF0ZSAtIG9mZnNldCkgLyBkdXJhdGlvbkhvdXIpICogZHVyYXRpb25Ib3VyICsgb2Zmc2V0KTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uSG91cik7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25Ib3VyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRIb3VycygpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGhvdXI7XG5leHBvcnQgdmFyIGhvdXJzID0gaG91ci5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbFwiO1xuaW1wb3J0IHtkdXJhdGlvbkRheSwgZHVyYXRpb25NaW51dGV9IGZyb20gXCIuL2R1cmF0aW9uXCI7XG5cbnZhciBkYXkgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0IC0gKGVuZC5nZXRUaW1lem9uZU9mZnNldCgpIC0gc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiBkdXJhdGlvbk1pbnV0ZSkgLyBkdXJhdGlvbkRheTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0RGF0ZSgpIC0gMTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBkYXk7XG5leHBvcnQgdmFyIGRheXMgPSBkYXkucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25NaW51dGUsIGR1cmF0aW9uV2Vla30gZnJvbSBcIi4vZHVyYXRpb25cIjtcblxuZnVuY3Rpb24gd2Vla2RheShpKSB7XG4gIHJldHVybiBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gKGRhdGUuZ2V0RGF5KCkgKyA3IC0gaSkgJSA3KTtcbiAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgc3RlcCAqIDcpO1xuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCAtIChlbmQuZ2V0VGltZXpvbmVPZmZzZXQoKSAtIHN0YXJ0LmdldFRpbWV6b25lT2Zmc2V0KCkpICogZHVyYXRpb25NaW51dGUpIC8gZHVyYXRpb25XZWVrO1xuICB9KTtcbn1cblxuZXhwb3J0IHZhciBzdW5kYXkgPSB3ZWVrZGF5KDApO1xuZXhwb3J0IHZhciBtb25kYXkgPSB3ZWVrZGF5KDEpO1xuZXhwb3J0IHZhciB0dWVzZGF5ID0gd2Vla2RheSgyKTtcbmV4cG9ydCB2YXIgd2VkbmVzZGF5ID0gd2Vla2RheSgzKTtcbmV4cG9ydCB2YXIgdGh1cnNkYXkgPSB3ZWVrZGF5KDQpO1xuZXhwb3J0IHZhciBmcmlkYXkgPSB3ZWVrZGF5KDUpO1xuZXhwb3J0IHZhciBzYXR1cmRheSA9IHdlZWtkYXkoNik7XG5cbmV4cG9ydCB2YXIgc3VuZGF5cyA9IHN1bmRheS5yYW5nZTtcbmV4cG9ydCB2YXIgbW9uZGF5cyA9IG1vbmRheS5yYW5nZTtcbmV4cG9ydCB2YXIgdHVlc2RheXMgPSB0dWVzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB3ZWRuZXNkYXlzID0gd2VkbmVzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB0aHVyc2RheXMgPSB0aHVyc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgZnJpZGF5cyA9IGZyaWRheS5yYW5nZTtcbmV4cG9ydCB2YXIgc2F0dXJkYXlzID0gc2F0dXJkYXkucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcblxudmFyIG1vbnRoID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldERhdGUoMSk7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0TW9udGgoZGF0ZS5nZXRNb250aCgpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0TW9udGgoKSAtIHN0YXJ0LmdldE1vbnRoKCkgKyAoZW5kLmdldEZ1bGxZZWFyKCkgLSBzdGFydC5nZXRGdWxsWWVhcigpKSAqIDEyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRNb250aCgpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbnRoO1xuZXhwb3J0IHZhciBtb250aHMgPSBtb250aC5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbFwiO1xuXG52YXIgeWVhciA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRNb250aCgwLCAxKTtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGVuZC5nZXRGdWxsWWVhcigpIC0gc3RhcnQuZ2V0RnVsbFllYXIoKTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKTtcbn0pO1xuXG4vLyBBbiBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gZm9yIHRoaXMgc2ltcGxlIGNhc2UuXG55ZWFyLmV2ZXJ5ID0gZnVuY3Rpb24oaykge1xuICByZXR1cm4gIWlzRmluaXRlKGsgPSBNYXRoLmZsb29yKGspKSB8fCAhKGsgPiAwKSA/IG51bGwgOiBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gICAgZGF0ZS5zZXRGdWxsWWVhcihNYXRoLmZsb29yKGRhdGUuZ2V0RnVsbFllYXIoKSAvIGspICogayk7XG4gICAgZGF0ZS5zZXRNb250aCgwLCAxKTtcbiAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkgKyBzdGVwICogayk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgeWVhcjtcbmV4cG9ydCB2YXIgeWVhcnMgPSB5ZWFyLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uTWludXRlfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgdXRjTWludXRlID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ1NlY29uZHMoMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbk1pbnV0ZSk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25NaW51dGU7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ01pbnV0ZXMoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB1dGNNaW51dGU7XG5leHBvcnQgdmFyIHV0Y01pbnV0ZXMgPSB1dGNNaW51dGUucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25Ib3VyfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgdXRjSG91ciA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRVVENNaW51dGVzKDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25Ib3VyKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkhvdXI7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0hvdXJzKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgdXRjSG91cjtcbmV4cG9ydCB2YXIgdXRjSG91cnMgPSB1dGNIb3VyLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uRGF5fSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgdXRjRGF5ID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkRheTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDRGF0ZSgpIC0gMTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB1dGNEYXk7XG5leHBvcnQgdmFyIHV0Y0RheXMgPSB1dGNEYXkucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25XZWVrfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG5mdW5jdGlvbiB1dGNXZWVrZGF5KGkpIHtcbiAgcmV0dXJuIGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSAoZGF0ZS5nZXRVVENEYXkoKSArIDcgLSBpKSAlIDcpO1xuICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBzdGVwICogNyk7XG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uV2VlaztcbiAgfSk7XG59XG5cbmV4cG9ydCB2YXIgdXRjU3VuZGF5ID0gdXRjV2Vla2RheSgwKTtcbmV4cG9ydCB2YXIgdXRjTW9uZGF5ID0gdXRjV2Vla2RheSgxKTtcbmV4cG9ydCB2YXIgdXRjVHVlc2RheSA9IHV0Y1dlZWtkYXkoMik7XG5leHBvcnQgdmFyIHV0Y1dlZG5lc2RheSA9IHV0Y1dlZWtkYXkoMyk7XG5leHBvcnQgdmFyIHV0Y1RodXJzZGF5ID0gdXRjV2Vla2RheSg0KTtcbmV4cG9ydCB2YXIgdXRjRnJpZGF5ID0gdXRjV2Vla2RheSg1KTtcbmV4cG9ydCB2YXIgdXRjU2F0dXJkYXkgPSB1dGNXZWVrZGF5KDYpO1xuXG5leHBvcnQgdmFyIHV0Y1N1bmRheXMgPSB1dGNTdW5kYXkucmFuZ2U7XG5leHBvcnQgdmFyIHV0Y01vbmRheXMgPSB1dGNNb25kYXkucmFuZ2U7XG5leHBvcnQgdmFyIHV0Y1R1ZXNkYXlzID0gdXRjVHVlc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjV2VkbmVzZGF5cyA9IHV0Y1dlZG5lc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjVGh1cnNkYXlzID0gdXRjVGh1cnNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHV0Y0ZyaWRheXMgPSB1dGNGcmlkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHV0Y1NhdHVyZGF5cyA9IHV0Y1NhdHVyZGF5LnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5cbnZhciB1dGNNb250aCA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRVVENEYXRlKDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFVUQ01vbnRoKGRhdGUuZ2V0VVRDTW9udGgoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZW5kLmdldFVUQ01vbnRoKCkgLSBzdGFydC5nZXRVVENNb250aCgpICsgKGVuZC5nZXRVVENGdWxsWWVhcigpIC0gc3RhcnQuZ2V0VVRDRnVsbFllYXIoKSkgKiAxMjtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDTW9udGgoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB1dGNNb250aDtcbmV4cG9ydCB2YXIgdXRjTW9udGhzID0gdXRjTW9udGgucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcblxudmFyIHV0Y1llYXIgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0VVRDRnVsbFllYXIoKSAtIHN0YXJ0LmdldFVUQ0Z1bGxZZWFyKCk7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG59KTtcblxuLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxudXRjWWVhci5ldmVyeSA9IGZ1bmN0aW9uKGspIHtcbiAgcmV0dXJuICFpc0Zpbml0ZShrID0gTWF0aC5mbG9vcihrKSkgfHwgIShrID4gMCkgPyBudWxsIDogaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgLyBrKSAqIGspO1xuICAgIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpICsgc3RlcCAqIGspO1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHV0Y1llYXI7XG5leHBvcnQgdmFyIHV0Y1llYXJzID0gdXRjWWVhci5yYW5nZTtcbiIsImltcG9ydCB7XG4gIHRpbWVEYXksXG4gIHRpbWVTdW5kYXksXG4gIHRpbWVNb25kYXksXG4gIHRpbWVUaHVyc2RheSxcbiAgdGltZVllYXIsXG4gIHV0Y0RheSxcbiAgdXRjU3VuZGF5LFxuICB1dGNNb25kYXksXG4gIHV0Y1RodXJzZGF5LFxuICB1dGNZZWFyXG59IGZyb20gXCJkMy10aW1lXCI7XG5cbmZ1bmN0aW9uIGxvY2FsRGF0ZShkKSB7XG4gIGlmICgwIDw9IGQueSAmJiBkLnkgPCAxMDApIHtcbiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKC0xLCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKTtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKGQueSk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKGQueSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCk7XG59XG5cbmZ1bmN0aW9uIHV0Y0RhdGUoZCkge1xuICBpZiAoMCA8PSBkLnkgJiYgZC55IDwgMTAwKSB7XG4gICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQygtMSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCkpO1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoZC55KTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoZC55LCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKSk7XG59XG5cbmZ1bmN0aW9uIG5ld1llYXIoeSkge1xuICByZXR1cm4ge3k6IHksIG06IDAsIGQ6IDEsIEg6IDAsIE06IDAsIFM6IDAsIEw6IDB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXRMb2NhbGUobG9jYWxlKSB7XG4gIHZhciBsb2NhbGVfZGF0ZVRpbWUgPSBsb2NhbGUuZGF0ZVRpbWUsXG4gICAgICBsb2NhbGVfZGF0ZSA9IGxvY2FsZS5kYXRlLFxuICAgICAgbG9jYWxlX3RpbWUgPSBsb2NhbGUudGltZSxcbiAgICAgIGxvY2FsZV9wZXJpb2RzID0gbG9jYWxlLnBlcmlvZHMsXG4gICAgICBsb2NhbGVfd2Vla2RheXMgPSBsb2NhbGUuZGF5cyxcbiAgICAgIGxvY2FsZV9zaG9ydFdlZWtkYXlzID0gbG9jYWxlLnNob3J0RGF5cyxcbiAgICAgIGxvY2FsZV9tb250aHMgPSBsb2NhbGUubW9udGhzLFxuICAgICAgbG9jYWxlX3Nob3J0TW9udGhzID0gbG9jYWxlLnNob3J0TW9udGhzO1xuXG4gIHZhciBwZXJpb2RSZSA9IGZvcm1hdFJlKGxvY2FsZV9wZXJpb2RzKSxcbiAgICAgIHBlcmlvZExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfcGVyaW9kcyksXG4gICAgICB3ZWVrZGF5UmUgPSBmb3JtYXRSZShsb2NhbGVfd2Vla2RheXMpLFxuICAgICAgd2Vla2RheUxvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfd2Vla2RheXMpLFxuICAgICAgc2hvcnRXZWVrZGF5UmUgPSBmb3JtYXRSZShsb2NhbGVfc2hvcnRXZWVrZGF5cyksXG4gICAgICBzaG9ydFdlZWtkYXlMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3Nob3J0V2Vla2RheXMpLFxuICAgICAgbW9udGhSZSA9IGZvcm1hdFJlKGxvY2FsZV9tb250aHMpLFxuICAgICAgbW9udGhMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX21vbnRocyksXG4gICAgICBzaG9ydE1vbnRoUmUgPSBmb3JtYXRSZShsb2NhbGVfc2hvcnRNb250aHMpLFxuICAgICAgc2hvcnRNb250aExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfc2hvcnRNb250aHMpO1xuXG4gIHZhciBmb3JtYXRzID0ge1xuICAgIFwiYVwiOiBmb3JtYXRTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IGZvcm1hdFdlZWtkYXksXG4gICAgXCJiXCI6IGZvcm1hdFNob3J0TW9udGgsXG4gICAgXCJCXCI6IGZvcm1hdE1vbnRoLFxuICAgIFwiY1wiOiBudWxsLFxuICAgIFwiZFwiOiBmb3JtYXREYXlPZk1vbnRoLFxuICAgIFwiZVwiOiBmb3JtYXREYXlPZk1vbnRoLFxuICAgIFwiZlwiOiBmb3JtYXRNaWNyb3NlY29uZHMsXG4gICAgXCJIXCI6IGZvcm1hdEhvdXIyNCxcbiAgICBcIklcIjogZm9ybWF0SG91cjEyLFxuICAgIFwialwiOiBmb3JtYXREYXlPZlllYXIsXG4gICAgXCJMXCI6IGZvcm1hdE1pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogZm9ybWF0TW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IGZvcm1hdE1pbnV0ZXMsXG4gICAgXCJwXCI6IGZvcm1hdFBlcmlvZCxcbiAgICBcIlFcIjogZm9ybWF0VW5peFRpbWVzdGFtcCxcbiAgICBcInNcIjogZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMsXG4gICAgXCJTXCI6IGZvcm1hdFNlY29uZHMsXG4gICAgXCJ1XCI6IGZvcm1hdFdlZWtkYXlOdW1iZXJNb25kYXksXG4gICAgXCJVXCI6IGZvcm1hdFdlZWtOdW1iZXJTdW5kYXksXG4gICAgXCJWXCI6IGZvcm1hdFdlZWtOdW1iZXJJU08sXG4gICAgXCJ3XCI6IGZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXksXG4gICAgXCJXXCI6IGZvcm1hdFdlZWtOdW1iZXJNb25kYXksXG4gICAgXCJ4XCI6IG51bGwsXG4gICAgXCJYXCI6IG51bGwsXG4gICAgXCJ5XCI6IGZvcm1hdFllYXIsXG4gICAgXCJZXCI6IGZvcm1hdEZ1bGxZZWFyLFxuICAgIFwiWlwiOiBmb3JtYXRab25lLFxuICAgIFwiJVwiOiBmb3JtYXRMaXRlcmFsUGVyY2VudFxuICB9O1xuXG4gIHZhciB1dGNGb3JtYXRzID0ge1xuICAgIFwiYVwiOiBmb3JtYXRVVENTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IGZvcm1hdFVUQ1dlZWtkYXksXG4gICAgXCJiXCI6IGZvcm1hdFVUQ1Nob3J0TW9udGgsXG4gICAgXCJCXCI6IGZvcm1hdFVUQ01vbnRoLFxuICAgIFwiY1wiOiBudWxsLFxuICAgIFwiZFwiOiBmb3JtYXRVVENEYXlPZk1vbnRoLFxuICAgIFwiZVwiOiBmb3JtYXRVVENEYXlPZk1vbnRoLFxuICAgIFwiZlwiOiBmb3JtYXRVVENNaWNyb3NlY29uZHMsXG4gICAgXCJIXCI6IGZvcm1hdFVUQ0hvdXIyNCxcbiAgICBcIklcIjogZm9ybWF0VVRDSG91cjEyLFxuICAgIFwialwiOiBmb3JtYXRVVENEYXlPZlllYXIsXG4gICAgXCJMXCI6IGZvcm1hdFVUQ01pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogZm9ybWF0VVRDTW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IGZvcm1hdFVUQ01pbnV0ZXMsXG4gICAgXCJwXCI6IGZvcm1hdFVUQ1BlcmlvZCxcbiAgICBcIlFcIjogZm9ybWF0VW5peFRpbWVzdGFtcCxcbiAgICBcInNcIjogZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMsXG4gICAgXCJTXCI6IGZvcm1hdFVUQ1NlY29uZHMsXG4gICAgXCJ1XCI6IGZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJNb25kYXksXG4gICAgXCJVXCI6IGZvcm1hdFVUQ1dlZWtOdW1iZXJTdW5kYXksXG4gICAgXCJWXCI6IGZvcm1hdFVUQ1dlZWtOdW1iZXJJU08sXG4gICAgXCJ3XCI6IGZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJTdW5kYXksXG4gICAgXCJXXCI6IGZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXksXG4gICAgXCJ4XCI6IG51bGwsXG4gICAgXCJYXCI6IG51bGwsXG4gICAgXCJ5XCI6IGZvcm1hdFVUQ1llYXIsXG4gICAgXCJZXCI6IGZvcm1hdFVUQ0Z1bGxZZWFyLFxuICAgIFwiWlwiOiBmb3JtYXRVVENab25lLFxuICAgIFwiJVwiOiBmb3JtYXRMaXRlcmFsUGVyY2VudFxuICB9O1xuXG4gIHZhciBwYXJzZXMgPSB7XG4gICAgXCJhXCI6IHBhcnNlU2hvcnRXZWVrZGF5LFxuICAgIFwiQVwiOiBwYXJzZVdlZWtkYXksXG4gICAgXCJiXCI6IHBhcnNlU2hvcnRNb250aCxcbiAgICBcIkJcIjogcGFyc2VNb250aCxcbiAgICBcImNcIjogcGFyc2VMb2NhbGVEYXRlVGltZSxcbiAgICBcImRcIjogcGFyc2VEYXlPZk1vbnRoLFxuICAgIFwiZVwiOiBwYXJzZURheU9mTW9udGgsXG4gICAgXCJmXCI6IHBhcnNlTWljcm9zZWNvbmRzLFxuICAgIFwiSFwiOiBwYXJzZUhvdXIyNCxcbiAgICBcIklcIjogcGFyc2VIb3VyMjQsXG4gICAgXCJqXCI6IHBhcnNlRGF5T2ZZZWFyLFxuICAgIFwiTFwiOiBwYXJzZU1pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogcGFyc2VNb250aE51bWJlcixcbiAgICBcIk1cIjogcGFyc2VNaW51dGVzLFxuICAgIFwicFwiOiBwYXJzZVBlcmlvZCxcbiAgICBcIlFcIjogcGFyc2VVbml4VGltZXN0YW1wLFxuICAgIFwic1wiOiBwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzLFxuICAgIFwiU1wiOiBwYXJzZVNlY29uZHMsXG4gICAgXCJ1XCI6IHBhcnNlV2Vla2RheU51bWJlck1vbmRheSxcbiAgICBcIlVcIjogcGFyc2VXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwiVlwiOiBwYXJzZVdlZWtOdW1iZXJJU08sXG4gICAgXCJ3XCI6IHBhcnNlV2Vla2RheU51bWJlclN1bmRheSxcbiAgICBcIldcIjogcGFyc2VXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBwYXJzZUxvY2FsZURhdGUsXG4gICAgXCJYXCI6IHBhcnNlTG9jYWxlVGltZSxcbiAgICBcInlcIjogcGFyc2VZZWFyLFxuICAgIFwiWVwiOiBwYXJzZUZ1bGxZZWFyLFxuICAgIFwiWlwiOiBwYXJzZVpvbmUsXG4gICAgXCIlXCI6IHBhcnNlTGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICAvLyBUaGVzZSByZWN1cnNpdmUgZGlyZWN0aXZlIGRlZmluaXRpb25zIG11c3QgYmUgZGVmZXJyZWQuXG4gIGZvcm1hdHMueCA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZSwgZm9ybWF0cyk7XG4gIGZvcm1hdHMuWCA9IG5ld0Zvcm1hdChsb2NhbGVfdGltZSwgZm9ybWF0cyk7XG4gIGZvcm1hdHMuYyA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZVRpbWUsIGZvcm1hdHMpO1xuICB1dGNGb3JtYXRzLnggPSBuZXdGb3JtYXQobG9jYWxlX2RhdGUsIHV0Y0Zvcm1hdHMpO1xuICB1dGNGb3JtYXRzLlggPSBuZXdGb3JtYXQobG9jYWxlX3RpbWUsIHV0Y0Zvcm1hdHMpO1xuICB1dGNGb3JtYXRzLmMgPSBuZXdGb3JtYXQobG9jYWxlX2RhdGVUaW1lLCB1dGNGb3JtYXRzKTtcblxuICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyLCBmb3JtYXRzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBbXSxcbiAgICAgICAgICBpID0gLTEsXG4gICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgbiA9IHNwZWNpZmllci5sZW5ndGgsXG4gICAgICAgICAgYyxcbiAgICAgICAgICBwYWQsXG4gICAgICAgICAgZm9ybWF0O1xuXG4gICAgICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSk7XG5cbiAgICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICAgIGlmIChzcGVjaWZpZXIuY2hhckNvZGVBdChpKSA9PT0gMzcpIHtcbiAgICAgICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgICAgIGlmICgocGFkID0gcGFkc1tjID0gc3BlY2lmaWVyLmNoYXJBdCgrK2kpXSkgIT0gbnVsbCkgYyA9IHNwZWNpZmllci5jaGFyQXQoKytpKTtcbiAgICAgICAgICBlbHNlIHBhZCA9IGMgPT09IFwiZVwiID8gXCIgXCIgOiBcIjBcIjtcbiAgICAgICAgICBpZiAoZm9ybWF0ID0gZm9ybWF0c1tjXSkgYyA9IGZvcm1hdChkYXRlLCBwYWQpO1xuICAgICAgICAgIHN0cmluZy5wdXNoKGMpO1xuICAgICAgICAgIGogPSBpICsgMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgcmV0dXJuIHN0cmluZy5qb2luKFwiXCIpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBuZXdQYXJzZShzcGVjaWZpZXIsIG5ld0RhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICB2YXIgZCA9IG5ld1llYXIoMTkwMCksXG4gICAgICAgICAgaSA9IHBhcnNlU3BlY2lmaWVyKGQsIHNwZWNpZmllciwgc3RyaW5nICs9IFwiXCIsIDApLFxuICAgICAgICAgIHdlZWssIGRheTtcbiAgICAgIGlmIChpICE9IHN0cmluZy5sZW5ndGgpIHJldHVybiBudWxsO1xuXG4gICAgICAvLyBJZiBhIFVOSVggdGltZXN0YW1wIGlzIHNwZWNpZmllZCwgcmV0dXJuIGl0LlxuICAgICAgaWYgKFwiUVwiIGluIGQpIHJldHVybiBuZXcgRGF0ZShkLlEpO1xuXG4gICAgICAvLyBUaGUgYW0tcG0gZmxhZyBpcyAwIGZvciBBTSwgYW5kIDEgZm9yIFBNLlxuICAgICAgaWYgKFwicFwiIGluIGQpIGQuSCA9IGQuSCAlIDEyICsgZC5wICogMTI7XG5cbiAgICAgIC8vIENvbnZlcnQgZGF5LW9mLXdlZWsgYW5kIHdlZWstb2YteWVhciB0byBkYXktb2YteWVhci5cbiAgICAgIGlmIChcIlZcIiBpbiBkKSB7XG4gICAgICAgIGlmIChkLlYgPCAxIHx8IGQuViA+IDUzKSByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKCEoXCJ3XCIgaW4gZCkpIGQudyA9IDE7XG4gICAgICAgIGlmIChcIlpcIiBpbiBkKSB7XG4gICAgICAgICAgd2VlayA9IHV0Y0RhdGUobmV3WWVhcihkLnkpKSwgZGF5ID0gd2Vlay5nZXRVVENEYXkoKTtcbiAgICAgICAgICB3ZWVrID0gZGF5ID4gNCB8fCBkYXkgPT09IDAgPyB1dGNNb25kYXkuY2VpbCh3ZWVrKSA6IHV0Y01vbmRheSh3ZWVrKTtcbiAgICAgICAgICB3ZWVrID0gdXRjRGF5Lm9mZnNldCh3ZWVrLCAoZC5WIC0gMSkgKiA3KTtcbiAgICAgICAgICBkLnkgPSB3ZWVrLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgICAgICAgZC5tID0gd2Vlay5nZXRVVENNb250aCgpO1xuICAgICAgICAgIGQuZCA9IHdlZWsuZ2V0VVRDRGF0ZSgpICsgKGQudyArIDYpICUgNztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3ZWVrID0gbmV3RGF0ZShuZXdZZWFyKGQueSkpLCBkYXkgPSB3ZWVrLmdldERheSgpO1xuICAgICAgICAgIHdlZWsgPSBkYXkgPiA0IHx8IGRheSA9PT0gMCA/IHRpbWVNb25kYXkuY2VpbCh3ZWVrKSA6IHRpbWVNb25kYXkod2Vlayk7XG4gICAgICAgICAgd2VlayA9IHRpbWVEYXkub2Zmc2V0KHdlZWssIChkLlYgLSAxKSAqIDcpO1xuICAgICAgICAgIGQueSA9IHdlZWsuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICBkLm0gPSB3ZWVrLmdldE1vbnRoKCk7XG4gICAgICAgICAgZC5kID0gd2Vlay5nZXREYXRlKCkgKyAoZC53ICsgNikgJSA3O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFwiV1wiIGluIGQgfHwgXCJVXCIgaW4gZCkge1xuICAgICAgICBpZiAoIShcIndcIiBpbiBkKSkgZC53ID0gXCJ1XCIgaW4gZCA/IGQudSAlIDcgOiBcIldcIiBpbiBkID8gMSA6IDA7XG4gICAgICAgIGRheSA9IFwiWlwiIGluIGQgPyB1dGNEYXRlKG5ld1llYXIoZC55KSkuZ2V0VVRDRGF5KCkgOiBuZXdEYXRlKG5ld1llYXIoZC55KSkuZ2V0RGF5KCk7XG4gICAgICAgIGQubSA9IDA7XG4gICAgICAgIGQuZCA9IFwiV1wiIGluIGQgPyAoZC53ICsgNikgJSA3ICsgZC5XICogNyAtIChkYXkgKyA1KSAlIDcgOiBkLncgKyBkLlUgKiA3IC0gKGRheSArIDYpICUgNztcbiAgICAgIH1cblxuICAgICAgLy8gSWYgYSB0aW1lIHpvbmUgaXMgc3BlY2lmaWVkLCBhbGwgZmllbGRzIGFyZSBpbnRlcnByZXRlZCBhcyBVVEMgYW5kIHRoZW5cbiAgICAgIC8vIG9mZnNldCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCB0aW1lIHpvbmUuXG4gICAgICBpZiAoXCJaXCIgaW4gZCkge1xuICAgICAgICBkLkggKz0gZC5aIC8gMTAwIHwgMDtcbiAgICAgICAgZC5NICs9IGQuWiAlIDEwMDtcbiAgICAgICAgcmV0dXJuIHV0Y0RhdGUoZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIE90aGVyd2lzZSwgYWxsIGZpZWxkcyBhcmUgaW4gbG9jYWwgdGltZS5cbiAgICAgIHJldHVybiBuZXdEYXRlKGQpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVNwZWNpZmllcihkLCBzcGVjaWZpZXIsIHN0cmluZywgaikge1xuICAgIHZhciBpID0gMCxcbiAgICAgICAgbiA9IHNwZWNpZmllci5sZW5ndGgsXG4gICAgICAgIG0gPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICBjLFxuICAgICAgICBwYXJzZTtcblxuICAgIHdoaWxlIChpIDwgbikge1xuICAgICAgaWYgKGogPj0gbSkgcmV0dXJuIC0xO1xuICAgICAgYyA9IHNwZWNpZmllci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICBpZiAoYyA9PT0gMzcpIHtcbiAgICAgICAgYyA9IHNwZWNpZmllci5jaGFyQXQoaSsrKTtcbiAgICAgICAgcGFyc2UgPSBwYXJzZXNbYyBpbiBwYWRzID8gc3BlY2lmaWVyLmNoYXJBdChpKyspIDogY107XG4gICAgICAgIGlmICghcGFyc2UgfHwgKChqID0gcGFyc2UoZCwgc3RyaW5nLCBqKSkgPCAwKSkgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIGlmIChjICE9IHN0cmluZy5jaGFyQ29kZUF0KGorKykpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBqO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VQZXJpb2QoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBwZXJpb2RSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5wID0gcGVyaW9kTG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU2hvcnRXZWVrZGF5KGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gc2hvcnRXZWVrZGF5UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQudyA9IHNob3J0V2Vla2RheUxvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSB3ZWVrZGF5UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQudyA9IHdlZWtkYXlMb29rdXBbblswXS50b0xvd2VyQ2FzZSgpXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTaG9ydE1vbnRoKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gc2hvcnRNb250aFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLm0gPSBzaG9ydE1vbnRoTG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBtb250aFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLm0gPSBtb250aExvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGVUaW1lKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfZGF0ZVRpbWUsIHN0cmluZywgaSk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGUoZCwgc3RyaW5nLCBpKSB7XG4gICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV9kYXRlLCBzdHJpbmcsIGkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VMb2NhbGVUaW1lKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfdGltZSwgc3RyaW5nLCBpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFNob3J0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydFdlZWtkYXlzW2QuZ2V0RGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV93ZWVrZGF5c1tkLmdldERheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFNob3J0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRNb250aHNbZC5nZXRNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdE1vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldE1vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UGVyaW9kKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3BlcmlvZHNbKyhkLmdldEhvdXJzKCkgPj0gMTIpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1Nob3J0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydFdlZWtkYXlzW2QuZ2V0VVRDRGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV93ZWVrZGF5c1tkLmdldFVUQ0RheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1Nob3J0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRNb250aHNbZC5nZXRVVENNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ01vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldFVUQ01vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDUGVyaW9kKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3BlcmlvZHNbKyhkLmdldFVUQ0hvdXJzKCkgPj0gMTIpXTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZm9ybWF0OiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBmID0gbmV3Rm9ybWF0KHNwZWNpZmllciArPSBcIlwiLCBmb3JtYXRzKTtcbiAgICAgIGYudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBmO1xuICAgIH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIHAgPSBuZXdQYXJzZShzcGVjaWZpZXIgKz0gXCJcIiwgbG9jYWxEYXRlKTtcbiAgICAgIHAudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBwO1xuICAgIH0sXG4gICAgdXRjRm9ybWF0OiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBmID0gbmV3Rm9ybWF0KHNwZWNpZmllciArPSBcIlwiLCB1dGNGb3JtYXRzKTtcbiAgICAgIGYudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBmO1xuICAgIH0sXG4gICAgdXRjUGFyc2U6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIHAgPSBuZXdQYXJzZShzcGVjaWZpZXIsIHV0Y0RhdGUpO1xuICAgICAgcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICB9O1xufVxuXG52YXIgcGFkcyA9IHtcIi1cIjogXCJcIiwgXCJfXCI6IFwiIFwiLCBcIjBcIjogXCIwXCJ9LFxuICAgIG51bWJlclJlID0gL15cXHMqXFxkKy8sIC8vIG5vdGU6IGlnbm9yZXMgbmV4dCBkaXJlY3RpdmVcbiAgICBwZXJjZW50UmUgPSAvXiUvLFxuICAgIHJlcXVvdGVSZSA9IC9bXFxcXF4kKis/fFtcXF0oKS57fV0vZztcblxuZnVuY3Rpb24gcGFkKHZhbHVlLCBmaWxsLCB3aWR0aCkge1xuICB2YXIgc2lnbiA9IHZhbHVlIDwgMCA/IFwiLVwiIDogXCJcIixcbiAgICAgIHN0cmluZyA9IChzaWduID8gLXZhbHVlIDogdmFsdWUpICsgXCJcIixcbiAgICAgIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIHJldHVybiBzaWduICsgKGxlbmd0aCA8IHdpZHRoID8gbmV3IEFycmF5KHdpZHRoIC0gbGVuZ3RoICsgMSkuam9pbihmaWxsKSArIHN0cmluZyA6IHN0cmluZyk7XG59XG5cbmZ1bmN0aW9uIHJlcXVvdGUocykge1xuICByZXR1cm4gcy5yZXBsYWNlKHJlcXVvdGVSZSwgXCJcXFxcJCZcIik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFJlKG5hbWVzKSB7XG4gIHJldHVybiBuZXcgUmVnRXhwKFwiXig/OlwiICsgbmFtZXMubWFwKHJlcXVvdGUpLmpvaW4oXCJ8XCIpICsgXCIpXCIsIFwiaVwiKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TG9va3VwKG5hbWVzKSB7XG4gIHZhciBtYXAgPSB7fSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbikgbWFwW25hbWVzW2ldLnRvTG93ZXJDYXNlKCldID0gaTtcbiAgcmV0dXJuIG1hcDtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrZGF5TnVtYmVyU3VuZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gKGQudyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla2RheU51bWJlck1vbmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IChkLnUgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtOdW1iZXJTdW5kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5VID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrTnVtYmVySVNPKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuViA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla051bWJlck1vbmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlcgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUZ1bGxZZWFyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA0KSk7XG4gIHJldHVybiBuID8gKGQueSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLnkgPSArblswXSArICgrblswXSA+IDY4ID8gMTkwMCA6IDIwMDApLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWm9uZShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSAvXihaKXwoWystXVxcZFxcZCkoPzo6PyhcXGRcXGQpKT8vLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA2KSk7XG4gIHJldHVybiBuID8gKGQuWiA9IG5bMV0gPyAwIDogLShuWzJdICsgKG5bM10gfHwgXCIwMFwiKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNb250aE51bWJlcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLm0gPSBuWzBdIC0gMSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZURheU9mTW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5kID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VEYXlPZlllYXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDMpKTtcbiAgcmV0dXJuIG4gPyAoZC5tID0gMCwgZC5kID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VIb3VyMjQoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5IID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNaW51dGVzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuTSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlMgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pbGxpc2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMykpO1xuICByZXR1cm4gbiA/IChkLkwgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pY3Jvc2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgNikpO1xuICByZXR1cm4gbiA/IChkLkwgPSBNYXRoLmZsb29yKG5bMF0gLyAxMDAwKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUxpdGVyYWxQZXJjZW50KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IHBlcmNlbnRSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IGkgKyBuWzBdLmxlbmd0aCA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVVuaXhUaW1lc3RhbXAoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICByZXR1cm4gbiA/IChkLlEgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgcmV0dXJuIG4gPyAoZC5RID0gKCtuWzBdKSAqIDEwMDAsIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGF5T2ZNb250aChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXREYXRlKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRIb3VyMjQoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0SG91cnMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhvdXIxMihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRIb3VycygpICUgMTIgfHwgMTIsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXlPZlllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKDEgKyB0aW1lRGF5LmNvdW50KHRpbWVZZWFyKGQpLCBkKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pbGxpc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNaWxsaXNlY29uZHMoKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pY3Jvc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBmb3JtYXRNaWxsaXNlY29uZHMoZCwgcCkgKyBcIjAwMFwiO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNb250aE51bWJlcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNb250aCgpICsgMSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pbnV0ZXMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0TWludXRlcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0U2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRTZWNvbmRzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrZGF5TnVtYmVyTW9uZGF5KGQpIHtcbiAgdmFyIGRheSA9IGQuZ2V0RGF5KCk7XG4gIHJldHVybiBkYXkgPT09IDAgPyA3IDogZGF5O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrTnVtYmVyU3VuZGF5KGQsIHApIHtcbiAgcmV0dXJuIHBhZCh0aW1lU3VuZGF5LmNvdW50KHRpbWVZZWFyKGQpLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJJU08oZCwgcCkge1xuICB2YXIgZGF5ID0gZC5nZXREYXkoKTtcbiAgZCA9IChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdGltZVRodXJzZGF5KGQpIDogdGltZVRodXJzZGF5LmNlaWwoZCk7XG4gIHJldHVybiBwYWQodGltZVRodXJzZGF5LmNvdW50KHRpbWVZZWFyKGQpLCBkKSArICh0aW1lWWVhcihkKS5nZXREYXkoKSA9PT0gNCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrZGF5TnVtYmVyU3VuZGF5KGQpIHtcbiAgcmV0dXJuIGQuZ2V0RGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHRpbWVNb25kYXkuY291bnQodGltZVllYXIoZCksIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0WWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RnVsbFllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0Wm9uZShkKSB7XG4gIHZhciB6ID0gZC5nZXRUaW1lem9uZU9mZnNldCgpO1xuICByZXR1cm4gKHogPiAwID8gXCItXCIgOiAoeiAqPSAtMSwgXCIrXCIpKVxuICAgICAgKyBwYWQoeiAvIDYwIHwgMCwgXCIwXCIsIDIpXG4gICAgICArIHBhZCh6ICUgNjAsIFwiMFwiLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRGF5T2ZNb250aChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENEYXRlKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENIb3VyMjQoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDSG91cnMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0hvdXIxMihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENIb3VycygpICUgMTIgfHwgMTIsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENEYXlPZlllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKDEgKyB1dGNEYXkuY291bnQodXRjWWVhcihkKSwgZCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaWxsaXNlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaWNyb3NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gZm9ybWF0VVRDTWlsbGlzZWNvbmRzKGQsIHApICsgXCIwMDBcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTW9udGhOdW1iZXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTW9udGgoKSArIDEsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaW51dGVzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ01pbnV0ZXMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDU2Vjb25kcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheShkKSB7XG4gIHZhciBkb3cgPSBkLmdldFVUQ0RheSgpO1xuICByZXR1cm4gZG93ID09PSAwID8gNyA6IGRvdztcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlclN1bmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodXRjU3VuZGF5LmNvdW50KHV0Y1llYXIoZCksIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlcklTTyhkLCBwKSB7XG4gIHZhciBkYXkgPSBkLmdldFVUQ0RheSgpO1xuICBkID0gKGRheSA+PSA0IHx8IGRheSA9PT0gMCkgPyB1dGNUaHVyc2RheShkKSA6IHV0Y1RodXJzZGF5LmNlaWwoZCk7XG4gIHJldHVybiBwYWQodXRjVGh1cnNkYXkuY291bnQodXRjWWVhcihkKSwgZCkgKyAodXRjWWVhcihkKS5nZXRVVENEYXkoKSA9PT0gNCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyU3VuZGF5KGQpIHtcbiAgcmV0dXJuIGQuZ2V0VVRDRGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHV0Y01vbmRheS5jb3VudCh1dGNZZWFyKGQpLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1llYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMCwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0Z1bGxZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDAwMCwgcCwgNCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1pvbmUoKSB7XG4gIHJldHVybiBcIiswMDAwXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExpdGVyYWxQZXJjZW50KCkge1xuICByZXR1cm4gXCIlXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVuaXhUaW1lc3RhbXAoZCkge1xuICByZXR1cm4gK2Q7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzKGQpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoK2QgLyAxMDAwKTtcbn1cbiIsImltcG9ydCBmb3JtYXRMb2NhbGUgZnJvbSBcIi4vbG9jYWxlXCI7XG5cbnZhciBsb2NhbGU7XG5leHBvcnQgdmFyIHRpbWVGb3JtYXQ7XG5leHBvcnQgdmFyIHRpbWVQYXJzZTtcbmV4cG9ydCB2YXIgdXRjRm9ybWF0O1xuZXhwb3J0IHZhciB1dGNQYXJzZTtcblxuZGVmYXVsdExvY2FsZSh7XG4gIGRhdGVUaW1lOiBcIiV4LCAlWFwiLFxuICBkYXRlOiBcIiUtbS8lLWQvJVlcIixcbiAgdGltZTogXCIlLUk6JU06JVMgJXBcIixcbiAgcGVyaW9kczogW1wiQU1cIiwgXCJQTVwiXSxcbiAgZGF5czogW1wiU3VuZGF5XCIsIFwiTW9uZGF5XCIsIFwiVHVlc2RheVwiLCBcIldlZG5lc2RheVwiLCBcIlRodXJzZGF5XCIsIFwiRnJpZGF5XCIsIFwiU2F0dXJkYXlcIl0sXG4gIHNob3J0RGF5czogW1wiU3VuXCIsIFwiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCJdLFxuICBtb250aHM6IFtcIkphbnVhcnlcIiwgXCJGZWJydWFyeVwiLCBcIk1hcmNoXCIsIFwiQXByaWxcIiwgXCJNYXlcIiwgXCJKdW5lXCIsIFwiSnVseVwiLCBcIkF1Z3VzdFwiLCBcIlNlcHRlbWJlclwiLCBcIk9jdG9iZXJcIiwgXCJOb3ZlbWJlclwiLCBcIkRlY2VtYmVyXCJdLFxuICBzaG9ydE1vbnRoczogW1wiSmFuXCIsIFwiRmViXCIsIFwiTWFyXCIsIFwiQXByXCIsIFwiTWF5XCIsIFwiSnVuXCIsIFwiSnVsXCIsIFwiQXVnXCIsIFwiU2VwXCIsIFwiT2N0XCIsIFwiTm92XCIsIFwiRGVjXCJdXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVmYXVsdExvY2FsZShkZWZpbml0aW9uKSB7XG4gIGxvY2FsZSA9IGZvcm1hdExvY2FsZShkZWZpbml0aW9uKTtcbiAgdGltZUZvcm1hdCA9IGxvY2FsZS5mb3JtYXQ7XG4gIHRpbWVQYXJzZSA9IGxvY2FsZS5wYXJzZTtcbiAgdXRjRm9ybWF0ID0gbG9jYWxlLnV0Y0Zvcm1hdDtcbiAgdXRjUGFyc2UgPSBsb2NhbGUudXRjUGFyc2U7XG4gIHJldHVybiBsb2NhbGU7XG59XG4iLCJpbXBvcnQge3V0Y0Zvcm1hdH0gZnJvbSBcIi4vZGVmYXVsdExvY2FsZVwiO1xuXG5leHBvcnQgdmFyIGlzb1NwZWNpZmllciA9IFwiJVktJW0tJWRUJUg6JU06JVMuJUxaXCI7XG5cbmZ1bmN0aW9uIGZvcm1hdElzb05hdGl2ZShkYXRlKSB7XG4gIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKCk7XG59XG5cbnZhciBmb3JtYXRJc28gPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZ1xuICAgID8gZm9ybWF0SXNvTmF0aXZlXG4gICAgOiB1dGNGb3JtYXQoaXNvU3BlY2lmaWVyKTtcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0SXNvO1xuIiwiaW1wb3J0IHtpc29TcGVjaWZpZXJ9IGZyb20gXCIuL2lzb0Zvcm1hdFwiO1xuaW1wb3J0IHt1dGNQYXJzZX0gZnJvbSBcIi4vZGVmYXVsdExvY2FsZVwiO1xuXG5mdW5jdGlvbiBwYXJzZUlzb05hdGl2ZShzdHJpbmcpIHtcbiAgdmFyIGRhdGUgPSBuZXcgRGF0ZShzdHJpbmcpO1xuICByZXR1cm4gaXNOYU4oZGF0ZSkgPyBudWxsIDogZGF0ZTtcbn1cblxudmFyIHBhcnNlSXNvID0gK25ldyBEYXRlKFwiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaXCIpXG4gICAgPyBwYXJzZUlzb05hdGl2ZVxuICAgIDogdXRjUGFyc2UoaXNvU3BlY2lmaWVyKTtcblxuZXhwb3J0IGRlZmF1bHQgcGFyc2VJc287XG4iLCJpbXBvcnQge2xpbmVhcmlzaH0gZnJvbSBcIi4vbGluZWFyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNlcXVlbnRpYWwoaW50ZXJwb2xhdG9yKSB7XG4gIHZhciB4MCA9IDAsXG4gICAgICB4MSA9IDEsXG4gICAgICBrMTAgPSAxLFxuICAgICAgY2xhbXAgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgdmFyIHQgPSAoeCAtIHgwKSAqIGsxMDtcbiAgICByZXR1cm4gaW50ZXJwb2xhdG9yKGNsYW1wID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdCkpIDogdCk7XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeDAgPSArX1swXSwgeDEgPSArX1sxXSwgazEwID0geDAgPT09IHgxID8gMCA6IDEgLyAoeDEgLSB4MCksIHNjYWxlKSA6IFt4MCwgeDFdO1xuICB9O1xuXG4gIHNjYWxlLmNsYW1wID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsYW1wID0gISFfLCBzY2FsZSkgOiBjbGFtcDtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0b3IgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaW50ZXJwb2xhdG9yID0gXywgc2NhbGUpIDogaW50ZXJwb2xhdG9yO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gc2VxdWVudGlhbChpbnRlcnBvbGF0b3IpLmRvbWFpbihbeDAsIHgxXSkuY2xhbXAoY2xhbXApO1xuICB9O1xuXG4gIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xufVxuIiwidmFyIG5vb3AgPSB7dmFsdWU6IGZ1bmN0aW9uKCkge319O1xuXG5mdW5jdGlvbiBkaXNwYXRjaCgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSBhcmd1bWVudHMubGVuZ3RoLCBfID0ge30sIHQ7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAoISh0ID0gYXJndW1lbnRzW2ldICsgXCJcIikgfHwgKHQgaW4gXykpIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgdHlwZTogXCIgKyB0KTtcbiAgICBfW3RdID0gW107XG4gIH1cbiAgcmV0dXJuIG5ldyBEaXNwYXRjaChfKTtcbn1cblxuZnVuY3Rpb24gRGlzcGF0Y2goXykge1xuICB0aGlzLl8gPSBfO1xufVxuXG5mdW5jdGlvbiBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZXMsIHR5cGVzKSB7XG4gIHJldHVybiB0eXBlbmFtZXMudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCkge1xuICAgIHZhciBuYW1lID0gXCJcIiwgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGkgPj0gMCkgbmFtZSA9IHQuc2xpY2UoaSArIDEpLCB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICBpZiAodCAmJiAhdHlwZXMuaGFzT3duUHJvcGVydHkodCkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0KTtcbiAgICByZXR1cm4ge3R5cGU6IHQsIG5hbWU6IG5hbWV9O1xuICB9KTtcbn1cblxuRGlzcGF0Y2gucHJvdG90eXBlID0gZGlzcGF0Y2gucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogRGlzcGF0Y2gsXG4gIG9uOiBmdW5jdGlvbih0eXBlbmFtZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgXyA9IHRoaXMuXyxcbiAgICAgICAgVCA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiwgXyksXG4gICAgICAgIHQsXG4gICAgICAgIGkgPSAtMSxcbiAgICAgICAgbiA9IFQubGVuZ3RoO1xuXG4gICAgLy8gSWYgbm8gY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmV0dXJuIHRoZSBjYWxsYmFjayBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSAmJiAodCA9IGdldChfW3RdLCB0eXBlbmFtZS5uYW1lKSkpIHJldHVybiB0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIGEgdHlwZSB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGNhbGxiYWNrIGZvciB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICAvLyBPdGhlcndpc2UsIGlmIGEgbnVsbCBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCByZW1vdmUgY2FsbGJhY2tzIG9mIHRoZSBnaXZlbiBuYW1lLlxuICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNhbGxiYWNrOiBcIiArIGNhbGxiYWNrKTtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIGVsc2UgaWYgKGNhbGxiYWNrID09IG51bGwpIGZvciAodCBpbiBfKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBjb3B5OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgY29weSA9IHt9LCBfID0gdGhpcy5fO1xuICAgIGZvciAodmFyIHQgaW4gXykgY29weVt0XSA9IF9bdF0uc2xpY2UoKTtcbiAgICByZXR1cm4gbmV3IERpc3BhdGNoKGNvcHkpO1xuICB9LFxuICBjYWxsOiBmdW5jdGlvbih0eXBlLCB0aGF0KSB7XG4gICAgaWYgKChuID0gYXJndW1lbnRzLmxlbmd0aCAtIDIpID4gMCkgZm9yICh2YXIgYXJncyA9IG5ldyBBcnJheShuKSwgaSA9IDAsIG4sIHQ7IGkgPCBuOyArK2kpIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh0ID0gdGhpcy5fW3R5cGVdLCBpID0gMCwgbiA9IHQubGVuZ3RoOyBpIDwgbjsgKytpKSB0W2ldLnZhbHVlLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9LFxuICBhcHBseTogZnVuY3Rpb24odHlwZSwgdGhhdCwgYXJncykge1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh2YXIgdCA9IHRoaXMuX1t0eXBlXSwgaSA9IDAsIG4gPSB0Lmxlbmd0aDsgaSA8IG47ICsraSkgdFtpXS52YWx1ZS5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2V0KHR5cGUsIG5hbWUpIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aCwgYzsgaSA8IG47ICsraSkge1xuICAgIGlmICgoYyA9IHR5cGVbaV0pLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHJldHVybiBjLnZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXQodHlwZSwgbmFtZSwgY2FsbGJhY2spIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIGlmICh0eXBlW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHR5cGVbaV0gPSBub29wLCB0eXBlID0gdHlwZS5zbGljZSgwLCBpKS5jb25jYXQodHlwZS5zbGljZShpICsgMSkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChjYWxsYmFjayAhPSBudWxsKSB0eXBlLnB1c2goe25hbWU6IG5hbWUsIHZhbHVlOiBjYWxsYmFja30pO1xuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGlzcGF0Y2g7XG4iLCJ2YXIgZnJhbWUgPSAwLCAvLyBpcyBhbiBhbmltYXRpb24gZnJhbWUgcGVuZGluZz9cbiAgICB0aW1lb3V0ID0gMCwgLy8gaXMgYSB0aW1lb3V0IHBlbmRpbmc/XG4gICAgaW50ZXJ2YWwgPSAwLCAvLyBhcmUgYW55IHRpbWVycyBhY3RpdmU/XG4gICAgcG9rZURlbGF5ID0gMTAwMCwgLy8gaG93IGZyZXF1ZW50bHkgd2UgY2hlY2sgZm9yIGNsb2NrIHNrZXdcbiAgICB0YXNrSGVhZCxcbiAgICB0YXNrVGFpbCxcbiAgICBjbG9ja0xhc3QgPSAwLFxuICAgIGNsb2NrTm93ID0gMCxcbiAgICBjbG9ja1NrZXcgPSAwLFxuICAgIGNsb2NrID0gdHlwZW9mIHBlcmZvcm1hbmNlID09PSBcIm9iamVjdFwiICYmIHBlcmZvcm1hbmNlLm5vdyA/IHBlcmZvcm1hbmNlIDogRGF0ZSxcbiAgICBzZXRGcmFtZSA9IHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpIDogZnVuY3Rpb24oZikgeyBzZXRUaW1lb3V0KGYsIDE3KTsgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vdygpIHtcbiAgcmV0dXJuIGNsb2NrTm93IHx8IChzZXRGcmFtZShjbGVhck5vdyksIGNsb2NrTm93ID0gY2xvY2subm93KCkgKyBjbG9ja1NrZXcpO1xufVxuXG5mdW5jdGlvbiBjbGVhck5vdygpIHtcbiAgY2xvY2tOb3cgPSAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVGltZXIoKSB7XG4gIHRoaXMuX2NhbGwgPVxuICB0aGlzLl90aW1lID1cbiAgdGhpcy5fbmV4dCA9IG51bGw7XG59XG5cblRpbWVyLnByb3RvdHlwZSA9IHRpbWVyLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFRpbWVyLFxuICByZXN0YXJ0OiBmdW5jdGlvbihjYWxsYmFjaywgZGVsYXksIHRpbWUpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgICB0aW1lID0gKHRpbWUgPT0gbnVsbCA/IG5vdygpIDogK3RpbWUpICsgKGRlbGF5ID09IG51bGwgPyAwIDogK2RlbGF5KTtcbiAgICBpZiAoIXRoaXMuX25leHQgJiYgdGFza1RhaWwgIT09IHRoaXMpIHtcbiAgICAgIGlmICh0YXNrVGFpbCkgdGFza1RhaWwuX25leHQgPSB0aGlzO1xuICAgICAgZWxzZSB0YXNrSGVhZCA9IHRoaXM7XG4gICAgICB0YXNrVGFpbCA9IHRoaXM7XG4gICAgfVxuICAgIHRoaXMuX2NhbGwgPSBjYWxsYmFjaztcbiAgICB0aGlzLl90aW1lID0gdGltZTtcbiAgICBzbGVlcCgpO1xuICB9LFxuICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fY2FsbCkge1xuICAgICAgdGhpcy5fY2FsbCA9IG51bGw7XG4gICAgICB0aGlzLl90aW1lID0gSW5maW5pdHk7XG4gICAgICBzbGVlcCgpO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVyKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICB2YXIgdCA9IG5ldyBUaW1lcjtcbiAgdC5yZXN0YXJ0KGNhbGxiYWNrLCBkZWxheSwgdGltZSk7XG4gIHJldHVybiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGltZXJGbHVzaCgpIHtcbiAgbm93KCk7IC8vIEdldCB0aGUgY3VycmVudCB0aW1lLCBpZiBub3QgYWxyZWFkeSBzZXQuXG4gICsrZnJhbWU7IC8vIFByZXRlbmQgd2XigJl2ZSBzZXQgYW4gYWxhcm0sIGlmIHdlIGhhdmVu4oCZdCBhbHJlYWR5LlxuICB2YXIgdCA9IHRhc2tIZWFkLCBlO1xuICB3aGlsZSAodCkge1xuICAgIGlmICgoZSA9IGNsb2NrTm93IC0gdC5fdGltZSkgPj0gMCkgdC5fY2FsbC5jYWxsKG51bGwsIGUpO1xuICAgIHQgPSB0Ll9uZXh0O1xuICB9XG4gIC0tZnJhbWU7XG59XG5cbmZ1bmN0aW9uIHdha2UoKSB7XG4gIGNsb2NrTm93ID0gKGNsb2NrTGFzdCA9IGNsb2NrLm5vdygpKSArIGNsb2NrU2tldztcbiAgZnJhbWUgPSB0aW1lb3V0ID0gMDtcbiAgdHJ5IHtcbiAgICB0aW1lckZsdXNoKCk7XG4gIH0gZmluYWxseSB7XG4gICAgZnJhbWUgPSAwO1xuICAgIG5hcCgpO1xuICAgIGNsb2NrTm93ID0gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb2tlKCkge1xuICB2YXIgbm93ID0gY2xvY2subm93KCksIGRlbGF5ID0gbm93IC0gY2xvY2tMYXN0O1xuICBpZiAoZGVsYXkgPiBwb2tlRGVsYXkpIGNsb2NrU2tldyAtPSBkZWxheSwgY2xvY2tMYXN0ID0gbm93O1xufVxuXG5mdW5jdGlvbiBuYXAoKSB7XG4gIHZhciB0MCwgdDEgPSB0YXNrSGVhZCwgdDIsIHRpbWUgPSBJbmZpbml0eTtcbiAgd2hpbGUgKHQxKSB7XG4gICAgaWYgKHQxLl9jYWxsKSB7XG4gICAgICBpZiAodGltZSA+IHQxLl90aW1lKSB0aW1lID0gdDEuX3RpbWU7XG4gICAgICB0MCA9IHQxLCB0MSA9IHQxLl9uZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0MiA9IHQxLl9uZXh0LCB0MS5fbmV4dCA9IG51bGw7XG4gICAgICB0MSA9IHQwID8gdDAuX25leHQgPSB0MiA6IHRhc2tIZWFkID0gdDI7XG4gICAgfVxuICB9XG4gIHRhc2tUYWlsID0gdDA7XG4gIHNsZWVwKHRpbWUpO1xufVxuXG5mdW5jdGlvbiBzbGVlcCh0aW1lKSB7XG4gIGlmIChmcmFtZSkgcmV0dXJuOyAvLyBTb29uZXN0IGFsYXJtIGFscmVhZHkgc2V0LCBvciB3aWxsIGJlLlxuICBpZiAodGltZW91dCkgdGltZW91dCA9IGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgdmFyIGRlbGF5ID0gdGltZSAtIGNsb2NrTm93OyAvLyBTdHJpY3RseSBsZXNzIHRoYW4gaWYgd2UgcmVjb21wdXRlZCBjbG9ja05vdy5cbiAgaWYgKGRlbGF5ID4gMjQpIHtcbiAgICBpZiAodGltZSA8IEluZmluaXR5KSB0aW1lb3V0ID0gc2V0VGltZW91dCh3YWtlLCB0aW1lIC0gY2xvY2subm93KCkgLSBjbG9ja1NrZXcpO1xuICAgIGlmIChpbnRlcnZhbCkgaW50ZXJ2YWwgPSBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWludGVydmFsKSBjbG9ja0xhc3QgPSBjbG9jay5ub3coKSwgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChwb2tlLCBwb2tlRGVsYXkpO1xuICAgIGZyYW1lID0gMSwgc2V0RnJhbWUod2FrZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7VGltZXJ9IGZyb20gXCIuL3RpbWVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICB2YXIgdCA9IG5ldyBUaW1lcjtcbiAgZGVsYXkgPSBkZWxheSA9PSBudWxsID8gMCA6ICtkZWxheTtcbiAgdC5yZXN0YXJ0KGZ1bmN0aW9uKGVsYXBzZWQpIHtcbiAgICB0LnN0b3AoKTtcbiAgICBjYWxsYmFjayhlbGFwc2VkICsgZGVsYXkpO1xuICB9LCBkZWxheSwgdGltZSk7XG4gIHJldHVybiB0O1xufVxuIiwiaW1wb3J0IHtkaXNwYXRjaH0gZnJvbSBcImQzLWRpc3BhdGNoXCI7XG5pbXBvcnQge3RpbWVyLCB0aW1lb3V0fSBmcm9tIFwiZDMtdGltZXJcIjtcblxudmFyIGVtcHR5T24gPSBkaXNwYXRjaChcInN0YXJ0XCIsIFwiZW5kXCIsIFwiaW50ZXJydXB0XCIpO1xudmFyIGVtcHR5VHdlZW4gPSBbXTtcblxuZXhwb3J0IHZhciBDUkVBVEVEID0gMDtcbmV4cG9ydCB2YXIgU0NIRURVTEVEID0gMTtcbmV4cG9ydCB2YXIgU1RBUlRJTkcgPSAyO1xuZXhwb3J0IHZhciBTVEFSVEVEID0gMztcbmV4cG9ydCB2YXIgUlVOTklORyA9IDQ7XG5leHBvcnQgdmFyIEVORElORyA9IDU7XG5leHBvcnQgdmFyIEVOREVEID0gNjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSwgbmFtZSwgaWQsIGluZGV4LCBncm91cCwgdGltaW5nKSB7XG4gIHZhciBzY2hlZHVsZXMgPSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgaWYgKCFzY2hlZHVsZXMpIG5vZGUuX190cmFuc2l0aW9uID0ge307XG4gIGVsc2UgaWYgKGlkIGluIHNjaGVkdWxlcykgcmV0dXJuO1xuICBjcmVhdGUobm9kZSwgaWQsIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIGluZGV4OiBpbmRleCwgLy8gRm9yIGNvbnRleHQgZHVyaW5nIGNhbGxiYWNrLlxuICAgIGdyb3VwOiBncm91cCwgLy8gRm9yIGNvbnRleHQgZHVyaW5nIGNhbGxiYWNrLlxuICAgIG9uOiBlbXB0eU9uLFxuICAgIHR3ZWVuOiBlbXB0eVR3ZWVuLFxuICAgIHRpbWU6IHRpbWluZy50aW1lLFxuICAgIGRlbGF5OiB0aW1pbmcuZGVsYXksXG4gICAgZHVyYXRpb246IHRpbWluZy5kdXJhdGlvbixcbiAgICBlYXNlOiB0aW1pbmcuZWFzZSxcbiAgICB0aW1lcjogbnVsbCxcbiAgICBzdGF0ZTogQ1JFQVRFRFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXQobm9kZSwgaWQpIHtcbiAgdmFyIHNjaGVkdWxlID0gZ2V0KG5vZGUsIGlkKTtcbiAgaWYgKHNjaGVkdWxlLnN0YXRlID4gQ1JFQVRFRCkgdGhyb3cgbmV3IEVycm9yKFwidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkXCIpO1xuICByZXR1cm4gc2NoZWR1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQobm9kZSwgaWQpIHtcbiAgdmFyIHNjaGVkdWxlID0gZ2V0KG5vZGUsIGlkKTtcbiAgaWYgKHNjaGVkdWxlLnN0YXRlID4gU1RBUlRJTkcpIHRocm93IG5ldyBFcnJvcihcInRvbyBsYXRlOyBhbHJlYWR5IHN0YXJ0ZWRcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgaWYgKCFzY2hlZHVsZSB8fCAhKHNjaGVkdWxlID0gc2NoZWR1bGVbaWRdKSkgdGhyb3cgbmV3IEVycm9yKFwidHJhbnNpdGlvbiBub3QgZm91bmRcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlKG5vZGUsIGlkLCBzZWxmKSB7XG4gIHZhciBzY2hlZHVsZXMgPSBub2RlLl9fdHJhbnNpdGlvbixcbiAgICAgIHR3ZWVuO1xuXG4gIC8vIEluaXRpYWxpemUgdGhlIHNlbGYgdGltZXIgd2hlbiB0aGUgdHJhbnNpdGlvbiBpcyBjcmVhdGVkLlxuICAvLyBOb3RlIHRoZSBhY3R1YWwgZGVsYXkgaXMgbm90IGtub3duIHVudGlsIHRoZSBmaXJzdCBjYWxsYmFjayFcbiAgc2NoZWR1bGVzW2lkXSA9IHNlbGY7XG4gIHNlbGYudGltZXIgPSB0aW1lcihzY2hlZHVsZSwgMCwgc2VsZi50aW1lKTtcblxuICBmdW5jdGlvbiBzY2hlZHVsZShlbGFwc2VkKSB7XG4gICAgc2VsZi5zdGF0ZSA9IFNDSEVEVUxFRDtcbiAgICBzZWxmLnRpbWVyLnJlc3RhcnQoc3RhcnQsIHNlbGYuZGVsYXksIHNlbGYudGltZSk7XG5cbiAgICAvLyBJZiB0aGUgZWxhcHNlZCBkZWxheSBpcyBsZXNzIHRoYW4gb3VyIGZpcnN0IHNsZWVwLCBzdGFydCBpbW1lZGlhdGVseS5cbiAgICBpZiAoc2VsZi5kZWxheSA8PSBlbGFwc2VkKSBzdGFydChlbGFwc2VkIC0gc2VsZi5kZWxheSk7XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydChlbGFwc2VkKSB7XG4gICAgdmFyIGksIGosIG4sIG87XG5cbiAgICAvLyBJZiB0aGUgc3RhdGUgaXMgbm90IFNDSEVEVUxFRCwgdGhlbiB3ZSBwcmV2aW91c2x5IGVycm9yZWQgb24gc3RhcnQuXG4gICAgaWYgKHNlbGYuc3RhdGUgIT09IFNDSEVEVUxFRCkgcmV0dXJuIHN0b3AoKTtcblxuICAgIGZvciAoaSBpbiBzY2hlZHVsZXMpIHtcbiAgICAgIG8gPSBzY2hlZHVsZXNbaV07XG4gICAgICBpZiAoby5uYW1lICE9PSBzZWxmLm5hbWUpIGNvbnRpbnVlO1xuXG4gICAgICAvLyBXaGlsZSB0aGlzIGVsZW1lbnQgYWxyZWFkeSBoYXMgYSBzdGFydGluZyB0cmFuc2l0aW9uIGR1cmluZyB0aGlzIGZyYW1lLFxuICAgICAgLy8gZGVmZXIgc3RhcnRpbmcgYW4gaW50ZXJydXB0aW5nIHRyYW5zaXRpb24gdW50aWwgdGhhdCB0cmFuc2l0aW9uIGhhcyBhXG4gICAgICAvLyBjaGFuY2UgdG8gdGljayAoYW5kIHBvc3NpYmx5IGVuZCk7IHNlZSBkMy9kMy10cmFuc2l0aW9uIzU0IVxuICAgICAgaWYgKG8uc3RhdGUgPT09IFNUQVJURUQpIHJldHVybiB0aW1lb3V0KHN0YXJ0KTtcblxuICAgICAgLy8gSW50ZXJydXB0IHRoZSBhY3RpdmUgdHJhbnNpdGlvbiwgaWYgYW55LlxuICAgICAgLy8gRGlzcGF0Y2ggdGhlIGludGVycnVwdCBldmVudC5cbiAgICAgIGlmIChvLnN0YXRlID09PSBSVU5OSU5HKSB7XG4gICAgICAgIG8uc3RhdGUgPSBFTkRFRDtcbiAgICAgICAgby50aW1lci5zdG9wKCk7XG4gICAgICAgIG8ub24uY2FsbChcImludGVycnVwdFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBvLmluZGV4LCBvLmdyb3VwKTtcbiAgICAgICAgZGVsZXRlIHNjaGVkdWxlc1tpXTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2FuY2VsIGFueSBwcmUtZW1wdGVkIHRyYW5zaXRpb25zLiBObyBpbnRlcnJ1cHQgZXZlbnQgaXMgZGlzcGF0Y2hlZFxuICAgICAgLy8gYmVjYXVzZSB0aGUgY2FuY2VsbGVkIHRyYW5zaXRpb25zIG5ldmVyIHN0YXJ0ZWQuIE5vdGUgdGhhdCB0aGlzIGFsc29cbiAgICAgIC8vIHJlbW92ZXMgdGhpcyB0cmFuc2l0aW9uIGZyb20gdGhlIHBlbmRpbmcgbGlzdCFcbiAgICAgIGVsc2UgaWYgKCtpIDwgaWQpIHtcbiAgICAgICAgby5zdGF0ZSA9IEVOREVEO1xuICAgICAgICBvLnRpbWVyLnN0b3AoKTtcbiAgICAgICAgZGVsZXRlIHNjaGVkdWxlc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZWZlciB0aGUgZmlyc3QgdGljayB0byBlbmQgb2YgdGhlIGN1cnJlbnQgZnJhbWU7IHNlZSBkMy9kMyMxNTc2LlxuICAgIC8vIE5vdGUgdGhlIHRyYW5zaXRpb24gbWF5IGJlIGNhbmNlbGVkIGFmdGVyIHN0YXJ0IGFuZCBiZWZvcmUgdGhlIGZpcnN0IHRpY2shXG4gICAgLy8gTm90ZSB0aGlzIG11c3QgYmUgc2NoZWR1bGVkIGJlZm9yZSB0aGUgc3RhcnQgZXZlbnQ7IHNlZSBkMy9kMy10cmFuc2l0aW9uIzE2IVxuICAgIC8vIEFzc3VtaW5nIHRoaXMgaXMgc3VjY2Vzc2Z1bCwgc3Vic2VxdWVudCBjYWxsYmFja3MgZ28gc3RyYWlnaHQgdG8gdGljay5cbiAgICB0aW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHNlbGYuc3RhdGUgPT09IFNUQVJURUQpIHtcbiAgICAgICAgc2VsZi5zdGF0ZSA9IFJVTk5JTkc7XG4gICAgICAgIHNlbGYudGltZXIucmVzdGFydCh0aWNrLCBzZWxmLmRlbGF5LCBzZWxmLnRpbWUpO1xuICAgICAgICB0aWNrKGVsYXBzZWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gRGlzcGF0Y2ggdGhlIHN0YXJ0IGV2ZW50LlxuICAgIC8vIE5vdGUgdGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSB0d2VlbiBhcmUgaW5pdGlhbGl6ZWQuXG4gICAgc2VsZi5zdGF0ZSA9IFNUQVJUSU5HO1xuICAgIHNlbGYub24uY2FsbChcInN0YXJ0XCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApO1xuICAgIGlmIChzZWxmLnN0YXRlICE9PSBTVEFSVElORykgcmV0dXJuOyAvLyBpbnRlcnJ1cHRlZFxuICAgIHNlbGYuc3RhdGUgPSBTVEFSVEVEO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgdHdlZW4sIGRlbGV0aW5nIG51bGwgdHdlZW4uXG4gICAgdHdlZW4gPSBuZXcgQXJyYXkobiA9IHNlbGYudHdlZW4ubGVuZ3RoKTtcbiAgICBmb3IgKGkgPSAwLCBqID0gLTE7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChvID0gc2VsZi50d2VlbltpXS52YWx1ZS5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApKSB7XG4gICAgICAgIHR3ZWVuWysral0gPSBvO1xuICAgICAgfVxuICAgIH1cbiAgICB0d2Vlbi5sZW5ndGggPSBqICsgMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpY2soZWxhcHNlZCkge1xuICAgIHZhciB0ID0gZWxhcHNlZCA8IHNlbGYuZHVyYXRpb24gPyBzZWxmLmVhc2UuY2FsbChudWxsLCBlbGFwc2VkIC8gc2VsZi5kdXJhdGlvbikgOiAoc2VsZi50aW1lci5yZXN0YXJ0KHN0b3ApLCBzZWxmLnN0YXRlID0gRU5ESU5HLCAxKSxcbiAgICAgICAgaSA9IC0xLFxuICAgICAgICBuID0gdHdlZW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIHR3ZWVuW2ldLmNhbGwobnVsbCwgdCk7XG4gICAgfVxuXG4gICAgLy8gRGlzcGF0Y2ggdGhlIGVuZCBldmVudC5cbiAgICBpZiAoc2VsZi5zdGF0ZSA9PT0gRU5ESU5HKSB7XG4gICAgICBzZWxmLm9uLmNhbGwoXCJlbmRcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2VsZi5pbmRleCwgc2VsZi5ncm91cCk7XG4gICAgICBzdG9wKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RvcCgpIHtcbiAgICBzZWxmLnN0YXRlID0gRU5ERUQ7XG4gICAgc2VsZi50aW1lci5zdG9wKCk7XG4gICAgZGVsZXRlIHNjaGVkdWxlc1tpZF07XG4gICAgZm9yICh2YXIgaSBpbiBzY2hlZHVsZXMpIHJldHVybjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIGRlbGV0ZSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgfVxufVxuIiwiaW1wb3J0IHtTVEFSVElORywgRU5ESU5HLCBFTkRFRH0gZnJvbSBcIi4vdHJhbnNpdGlvbi9zY2hlZHVsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlLCBuYW1lKSB7XG4gIHZhciBzY2hlZHVsZXMgPSBub2RlLl9fdHJhbnNpdGlvbixcbiAgICAgIHNjaGVkdWxlLFxuICAgICAgYWN0aXZlLFxuICAgICAgZW1wdHkgPSB0cnVlLFxuICAgICAgaTtcblxuICBpZiAoIXNjaGVkdWxlcykgcmV0dXJuO1xuXG4gIG5hbWUgPSBuYW1lID09IG51bGwgPyBudWxsIDogbmFtZSArIFwiXCI7XG5cbiAgZm9yIChpIGluIHNjaGVkdWxlcykge1xuICAgIGlmICgoc2NoZWR1bGUgPSBzY2hlZHVsZXNbaV0pLm5hbWUgIT09IG5hbWUpIHsgZW1wdHkgPSBmYWxzZTsgY29udGludWU7IH1cbiAgICBhY3RpdmUgPSBzY2hlZHVsZS5zdGF0ZSA+IFNUQVJUSU5HICYmIHNjaGVkdWxlLnN0YXRlIDwgRU5ESU5HO1xuICAgIHNjaGVkdWxlLnN0YXRlID0gRU5ERUQ7XG4gICAgc2NoZWR1bGUudGltZXIuc3RvcCgpO1xuICAgIGlmIChhY3RpdmUpIHNjaGVkdWxlLm9uLmNhbGwoXCJpbnRlcnJ1cHRcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2NoZWR1bGUuaW5kZXgsIHNjaGVkdWxlLmdyb3VwKTtcbiAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICB9XG5cbiAgaWYgKGVtcHR5KSBkZWxldGUgbm9kZS5fX3RyYW5zaXRpb247XG59XG4iLCJpbXBvcnQgaW50ZXJydXB0IGZyb20gXCIuLi9pbnRlcnJ1cHRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgIGludGVycnVwdCh0aGlzLCBuYW1lKTtcbiAgfSk7XG59XG4iLCJpbXBvcnQge2dldCwgc2V0fSBmcm9tIFwiLi9zY2hlZHVsZVwiO1xuXG5mdW5jdGlvbiB0d2VlblJlbW92ZShpZCwgbmFtZSkge1xuICB2YXIgdHdlZW4wLCB0d2VlbjE7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICB0d2VlbiA9IHNjaGVkdWxlLnR3ZWVuO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCB0d2VlbiB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCB0d2VlbiBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAodHdlZW4gIT09IHR3ZWVuMCkge1xuICAgICAgdHdlZW4xID0gdHdlZW4wID0gdHdlZW47XG4gICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHR3ZWVuMS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKHR3ZWVuMVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgdHdlZW4xID0gdHdlZW4xLnNsaWNlKCk7XG4gICAgICAgICAgdHdlZW4xLnNwbGljZShpLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHNjaGVkdWxlLnR3ZWVuID0gdHdlZW4xO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0d2VlbkZ1bmN0aW9uKGlkLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgdHdlZW4wLCB0d2VlbjE7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgdHdlZW4gPSBzY2hlZHVsZS50d2VlbjtcblxuICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgdHdlZW4gd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAvLyBqdXN0IGFzc2lnbiB0aGUgdXBkYXRlZCBzaGFyZWQgdHdlZW4gYW5kIHdl4oCZcmUgZG9uZSFcbiAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgaWYgKHR3ZWVuICE9PSB0d2VlbjApIHtcbiAgICAgIHR3ZWVuMSA9ICh0d2VlbjAgPSB0d2Vlbikuc2xpY2UoKTtcbiAgICAgIGZvciAodmFyIHQgPSB7bmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlfSwgaSA9IDAsIG4gPSB0d2VlbjEubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICh0d2VlbjFbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgIHR3ZWVuMVtpXSA9IHQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpID09PSBuKSB0d2VlbjEucHVzaCh0KTtcbiAgICB9XG5cbiAgICBzY2hlZHVsZS50d2VlbiA9IHR3ZWVuMTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGlkID0gdGhpcy5faWQ7XG5cbiAgbmFtZSArPSBcIlwiO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciB0d2VlbiA9IGdldCh0aGlzLm5vZGUoKSwgaWQpLnR3ZWVuO1xuICAgIGZvciAodmFyIGkgPSAwLCBuID0gdHdlZW4ubGVuZ3RoLCB0OyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKHQgPSB0d2VlbltpXSkubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICByZXR1cm4gdC52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsID8gdHdlZW5SZW1vdmUgOiB0d2VlbkZ1bmN0aW9uKShpZCwgbmFtZSwgdmFsdWUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR3ZWVuVmFsdWUodHJhbnNpdGlvbiwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIGlkID0gdHJhbnNpdGlvbi5faWQ7XG5cbiAgdHJhbnNpdGlvbi5lYWNoKGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCk7XG4gICAgKHNjaGVkdWxlLnZhbHVlIHx8IChzY2hlZHVsZS52YWx1ZSA9IHt9KSlbbmFtZV0gPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9KTtcblxuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBnZXQobm9kZSwgaWQpLnZhbHVlW25hbWVdO1xuICB9O1xufVxuIiwiaW1wb3J0IHtjb2xvcn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQge2ludGVycG9sYXRlTnVtYmVyLCBpbnRlcnBvbGF0ZVJnYiwgaW50ZXJwb2xhdGVTdHJpbmd9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBjO1xuICByZXR1cm4gKHR5cGVvZiBiID09PSBcIm51bWJlclwiID8gaW50ZXJwb2xhdGVOdW1iZXJcbiAgICAgIDogYiBpbnN0YW5jZW9mIGNvbG9yID8gaW50ZXJwb2xhdGVSZ2JcbiAgICAgIDogKGMgPSBjb2xvcihiKSkgPyAoYiA9IGMsIGludGVycG9sYXRlUmdiKVxuICAgICAgOiBpbnRlcnBvbGF0ZVN0cmluZykoYSwgYik7XG59XG4iLCJpbXBvcnQge2ludGVycG9sYXRlVHJhbnNmb3JtU3ZnIGFzIGludGVycG9sYXRlVHJhbnNmb3JtfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7bmFtZXNwYWNlfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge3R3ZWVuVmFsdWV9IGZyb20gXCIuL3R3ZWVuXCI7XG5pbXBvcnQgaW50ZXJwb2xhdGUgZnJvbSBcIi4vaW50ZXJwb2xhdGVcIjtcblxuZnVuY3Rpb24gYXR0clJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0clJlbW92ZU5TKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudChuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUxKSB7XG4gIHZhciB2YWx1ZTAwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlMCA9IHRoaXMuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIHJldHVybiB2YWx1ZTAgPT09IHZhbHVlMSA/IG51bGxcbiAgICAgICAgOiB2YWx1ZTAgPT09IHZhbHVlMDAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZSh2YWx1ZTAwID0gdmFsdWUwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgdmFsdWUwMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTAgPSB0aGlzLmdldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgcmV0dXJuIHZhbHVlMCA9PT0gdmFsdWUxID8gbnVsbFxuICAgICAgICA6IHZhbHVlMCA9PT0gdmFsdWUwMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHZhbHVlMDAgPSB2YWx1ZTAsIHZhbHVlMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbihuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUpIHtcbiAgdmFyIHZhbHVlMDAsXG4gICAgICB2YWx1ZTEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlMCwgdmFsdWUxID0gdmFsdWUodGhpcyk7XG4gICAgaWYgKHZhbHVlMSA9PSBudWxsKSByZXR1cm4gdm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICB2YWx1ZTAgPSB0aGlzLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgICByZXR1cm4gdmFsdWUwID09PSB2YWx1ZTEgPyBudWxsXG4gICAgICAgIDogdmFsdWUwID09PSB2YWx1ZTAwICYmIHZhbHVlMSA9PT0gdmFsdWUxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHZhbHVlMDAgPSB2YWx1ZTAsIHZhbHVlMTAgPSB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb25OUyhmdWxsbmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciB2YWx1ZTAwLFxuICAgICAgdmFsdWUxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTAsIHZhbHVlMSA9IHZhbHVlKHRoaXMpO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgcmV0dXJuIHZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHZhbHVlMCA9IHRoaXMuZ2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICByZXR1cm4gdmFsdWUwID09PSB2YWx1ZTEgPyBudWxsXG4gICAgICAgIDogdmFsdWUwID09PSB2YWx1ZTAwICYmIHZhbHVlMSA9PT0gdmFsdWUxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHZhbHVlMDAgPSB2YWx1ZTAsIHZhbHVlMTAgPSB2YWx1ZTEpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSksIGkgPSBmdWxsbmFtZSA9PT0gXCJ0cmFuc2Zvcm1cIiA/IGludGVycG9sYXRlVHJhbnNmb3JtIDogaW50ZXJwb2xhdGU7XG4gIHJldHVybiB0aGlzLmF0dHJUd2VlbihuYW1lLCB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyRnVuY3Rpb25OUyA6IGF0dHJGdW5jdGlvbikoZnVsbG5hbWUsIGksIHR3ZWVuVmFsdWUodGhpcywgXCJhdHRyLlwiICsgbmFtZSwgdmFsdWUpKVxuICAgICAgOiB2YWx1ZSA9PSBudWxsID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0clJlbW92ZU5TIDogYXR0clJlbW92ZSkoZnVsbG5hbWUpXG4gICAgICA6IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJDb25zdGFudE5TIDogYXR0ckNvbnN0YW50KShmdWxsbmFtZSwgaSwgdmFsdWUgKyBcIlwiKSk7XG59XG4iLCJpbXBvcnQge25hbWVzcGFjZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG5mdW5jdGlvbiBhdHRyVHdlZW5OUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLCBpID0gdmFsdWUuYXBwbHkobm9kZSwgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gaSAmJiBmdW5jdGlvbih0KSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgaSh0KSk7XG4gICAgfTtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5mdW5jdGlvbiBhdHRyVHdlZW4obmFtZSwgdmFsdWUpIHtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLCBpID0gdmFsdWUuYXBwbHkobm9kZSwgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gaSAmJiBmdW5jdGlvbih0KSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShuYW1lLCBpKHQpKTtcbiAgICB9O1xuICB9XG4gIHR3ZWVuLl92YWx1ZSA9IHZhbHVlO1xuICByZXR1cm4gdHdlZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBrZXkgPSBcImF0dHIuXCIgKyBuYW1lO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHJldHVybiAoa2V5ID0gdGhpcy50d2VlbihrZXkpKSAmJiBrZXkuX3ZhbHVlO1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBudWxsKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcbiAgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCAoZnVsbG5hbWUubG9jYWwgPyBhdHRyVHdlZW5OUyA6IGF0dHJUd2VlbikoZnVsbG5hbWUsIHZhbHVlKSk7XG59XG4iLCJpbXBvcnQge2dldCwgaW5pdH0gZnJvbSBcIi4vc2NoZWR1bGVcIjtcblxuZnVuY3Rpb24gZGVsYXlGdW5jdGlvbihpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGluaXQodGhpcywgaWQpLmRlbGF5ID0gK3ZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRlbGF5Q29uc3RhbnQoaWQsIHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9ICt2YWx1ZSwgZnVuY3Rpb24oKSB7XG4gICAgaW5pdCh0aGlzLCBpZCkuZGVsYXkgPSB2YWx1ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIGlkID0gdGhpcy5faWQ7XG5cbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKCh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gZGVsYXlGdW5jdGlvblxuICAgICAgICAgIDogZGVsYXlDb25zdGFudCkoaWQsIHZhbHVlKSlcbiAgICAgIDogZ2V0KHRoaXMubm9kZSgpLCBpZCkuZGVsYXk7XG59XG4iLCJpbXBvcnQge2dldCwgc2V0fSBmcm9tIFwiLi9zY2hlZHVsZVwiO1xuXG5mdW5jdGlvbiBkdXJhdGlvbkZ1bmN0aW9uKGlkLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgc2V0KHRoaXMsIGlkKS5kdXJhdGlvbiA9ICt2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkdXJhdGlvbkNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPSArdmFsdWUsIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZHVyYXRpb24gPSB2YWx1ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIGlkID0gdGhpcy5faWQ7XG5cbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKCh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gZHVyYXRpb25GdW5jdGlvblxuICAgICAgICAgIDogZHVyYXRpb25Db25zdGFudCkoaWQsIHZhbHVlKSlcbiAgICAgIDogZ2V0KHRoaXMubm9kZSgpLCBpZCkuZHVyYXRpb247XG59XG4iLCJpbXBvcnQge2dldCwgc2V0fSBmcm9tIFwiLi9zY2hlZHVsZVwiO1xuXG5mdW5jdGlvbiBlYXNlQ29uc3RhbnQoaWQsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgc2V0KHRoaXMsIGlkKS5lYXNlID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaChlYXNlQ29uc3RhbnQoaWQsIHZhbHVlKSlcbiAgICAgIDogZ2V0KHRoaXMubm9kZSgpLCBpZCkuZWFzZTtcbn1cbiIsImltcG9ydCB7bWF0Y2hlcn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlcihtYXRjaCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIG1hdGNoLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSB7XG4gICAgICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cywgdGhpcy5fbmFtZSwgdGhpcy5faWQpO1xufVxuIiwiaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0cmFuc2l0aW9uKSB7XG4gIGlmICh0cmFuc2l0aW9uLl9pZCAhPT0gdGhpcy5faWQpIHRocm93IG5ldyBFcnJvcjtcblxuICBmb3IgKHZhciBncm91cHMwID0gdGhpcy5fZ3JvdXBzLCBncm91cHMxID0gdHJhbnNpdGlvbi5fZ3JvdXBzLCBtMCA9IGdyb3VwczAubGVuZ3RoLCBtMSA9IGdyb3VwczEubGVuZ3RoLCBtID0gTWF0aC5taW4obTAsIG0xKSwgbWVyZ2VzID0gbmV3IEFycmF5KG0wKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cDAgPSBncm91cHMwW2pdLCBncm91cDEgPSBncm91cHMxW2pdLCBuID0gZ3JvdXAwLmxlbmd0aCwgbWVyZ2UgPSBtZXJnZXNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcbiAgICAgICAgbWVyZ2VbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBqIDwgbTA7ICsraikge1xuICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24obWVyZ2VzLCB0aGlzLl9wYXJlbnRzLCB0aGlzLl9uYW1lLCB0aGlzLl9pZCk7XG59XG4iLCJpbXBvcnQge2dldCwgc2V0LCBpbml0fSBmcm9tIFwiLi9zY2hlZHVsZVwiO1xuXG5mdW5jdGlvbiBzdGFydChuYW1lKSB7XG4gIHJldHVybiAobmFtZSArIFwiXCIpLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykuZXZlcnkoZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICByZXR1cm4gIXQgfHwgdCA9PT0gXCJzdGFydFwiO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb25GdW5jdGlvbihpZCwgbmFtZSwgbGlzdGVuZXIpIHtcbiAgdmFyIG9uMCwgb24xLCBzaXQgPSBzdGFydChuYW1lKSA/IGluaXQgOiBzZXQ7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzaXQodGhpcywgaWQpLFxuICAgICAgICBvbiA9IHNjaGVkdWxlLm9uO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCBhIGRpc3BhdGNoIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmIChvbiAhPT0gb24wKSAob24xID0gKG9uMCA9IG9uKS5jb3B5KCkpLm9uKG5hbWUsIGxpc3RlbmVyKTtcblxuICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCBsaXN0ZW5lcikge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDJcbiAgICAgID8gZ2V0KHRoaXMubm9kZSgpLCBpZCkub24ub24obmFtZSlcbiAgICAgIDogdGhpcy5lYWNoKG9uRnVuY3Rpb24oaWQsIG5hbWUsIGxpc3RlbmVyKSk7XG59XG4iLCJmdW5jdGlvbiByZW1vdmVGdW5jdGlvbihpZCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgICBmb3IgKHZhciBpIGluIHRoaXMuX190cmFuc2l0aW9uKSBpZiAoK2kgIT09IGlkKSByZXR1cm47XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMub24oXCJlbmQucmVtb3ZlXCIsIHJlbW92ZUZ1bmN0aW9uKHRoaXMuX2lkKSk7XG59XG4iLCJpbXBvcnQge3NlbGVjdG9yfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZCA9IHRoaXMuX2lkO1xuXG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgc3Vibm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiAoc3Vibm9kZSA9IHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkpIHtcbiAgICAgICAgaWYgKFwiX19kYXRhX19cIiBpbiBub2RlKSBzdWJub2RlLl9fZGF0YV9fID0gbm9kZS5fX2RhdGFfXztcbiAgICAgICAgc3ViZ3JvdXBbaV0gPSBzdWJub2RlO1xuICAgICAgICBzY2hlZHVsZShzdWJncm91cFtpXSwgbmFtZSwgaWQsIGksIHN1Ymdyb3VwLCBnZXQobm9kZSwgaWQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iLCJpbXBvcnQge3NlbGVjdG9yQWxsfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZCA9IHRoaXMuX2lkO1xuXG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yQWxsKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gW10sIHBhcmVudHMgPSBbXSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgZm9yICh2YXIgY2hpbGRyZW4gPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCksIGNoaWxkLCBpbmhlcml0ID0gZ2V0KG5vZGUsIGlkKSwgayA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGsgPCBsOyArK2spIHtcbiAgICAgICAgICBpZiAoY2hpbGQgPSBjaGlsZHJlbltrXSkge1xuICAgICAgICAgICAgc2NoZWR1bGUoY2hpbGQsIG5hbWUsIGlkLCBrLCBjaGlsZHJlbiwgaW5oZXJpdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN1Ymdyb3Vwcy5wdXNoKGNoaWxkcmVuKTtcbiAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihzdWJncm91cHMsIHBhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbnZhciBTZWxlY3Rpb24gPSBzZWxlY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImltcG9ydCB7aW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MgYXMgaW50ZXJwb2xhdGVUcmFuc2Zvcm19IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHtzdHlsZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHt0d2VlblZhbHVlfSBmcm9tIFwiLi90d2VlblwiO1xuaW1wb3J0IGludGVycG9sYXRlIGZyb20gXCIuL2ludGVycG9sYXRlXCI7XG5cbmZ1bmN0aW9uIHN0eWxlUmVtb3ZlKG5hbWUsIGludGVycG9sYXRlKSB7XG4gIHZhciB2YWx1ZTAwLFxuICAgICAgdmFsdWUxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTAgPSBzdHlsZSh0aGlzLCBuYW1lKSxcbiAgICAgICAgdmFsdWUxID0gKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSksIHN0eWxlKHRoaXMsIG5hbWUpKTtcbiAgICByZXR1cm4gdmFsdWUwID09PSB2YWx1ZTEgPyBudWxsXG4gICAgICAgIDogdmFsdWUwID09PSB2YWx1ZTAwICYmIHZhbHVlMSA9PT0gdmFsdWUxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHZhbHVlMDAgPSB2YWx1ZTAsIHZhbHVlMTAgPSB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZVJlbW92ZUVuZChuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUNvbnN0YW50KG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZTEpIHtcbiAgdmFyIHZhbHVlMDAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUwID0gc3R5bGUodGhpcywgbmFtZSk7XG4gICAgcmV0dXJuIHZhbHVlMCA9PT0gdmFsdWUxID8gbnVsbFxuICAgICAgICA6IHZhbHVlMCA9PT0gdmFsdWUwMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHZhbHVlMDAgPSB2YWx1ZTAsIHZhbHVlMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlRnVuY3Rpb24obmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciB2YWx1ZTAwLFxuICAgICAgdmFsdWUxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTAgPSBzdHlsZSh0aGlzLCBuYW1lKSxcbiAgICAgICAgdmFsdWUxID0gdmFsdWUodGhpcyk7XG4gICAgaWYgKHZhbHVlMSA9PSBudWxsKSB2YWx1ZTEgPSAodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKSwgc3R5bGUodGhpcywgbmFtZSkpO1xuICAgIHJldHVybiB2YWx1ZTAgPT09IHZhbHVlMSA/IG51bGxcbiAgICAgICAgOiB2YWx1ZTAgPT09IHZhbHVlMDAgJiYgdmFsdWUxID09PSB2YWx1ZTEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUodmFsdWUwMCA9IHZhbHVlMCwgdmFsdWUxMCA9IHZhbHVlMSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICB2YXIgaSA9IChuYW1lICs9IFwiXCIpID09PSBcInRyYW5zZm9ybVwiID8gaW50ZXJwb2xhdGVUcmFuc2Zvcm0gOiBpbnRlcnBvbGF0ZTtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyB0aGlzXG4gICAgICAgICAgLnN0eWxlVHdlZW4obmFtZSwgc3R5bGVSZW1vdmUobmFtZSwgaSkpXG4gICAgICAgICAgLm9uKFwiZW5kLnN0eWxlLlwiICsgbmFtZSwgc3R5bGVSZW1vdmVFbmQobmFtZSkpXG4gICAgICA6IHRoaXMuc3R5bGVUd2VlbihuYW1lLCB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gc3R5bGVGdW5jdGlvbihuYW1lLCBpLCB0d2VlblZhbHVlKHRoaXMsIFwic3R5bGUuXCIgKyBuYW1lLCB2YWx1ZSkpXG4gICAgICAgICAgOiBzdHlsZUNvbnN0YW50KG5hbWUsIGksIHZhbHVlICsgXCJcIiksIHByaW9yaXR5KTtcbn1cbiIsImZ1bmN0aW9uIHN0eWxlVHdlZW4obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBub2RlID0gdGhpcywgaSA9IHZhbHVlLmFwcGx5KG5vZGUsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIGkgJiYgZnVuY3Rpb24odCkge1xuICAgICAgbm9kZS5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCBpKHQpLCBwcmlvcml0eSk7XG4gICAgfTtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgdmFyIGtleSA9IFwic3R5bGUuXCIgKyAobmFtZSArPSBcIlwiKTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gdGhpcy50d2VlbihrZXksIHN0eWxlVHdlZW4obmFtZSwgdmFsdWUsIHByaW9yaXR5ID09IG51bGwgPyBcIlwiIDogcHJpb3JpdHkpKTtcbn1cbiIsImltcG9ydCB7dHdlZW5WYWx1ZX0gZnJvbSBcIi4vdHdlZW5cIjtcblxuZnVuY3Rpb24gdGV4dENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRleHRGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlMSA9IHZhbHVlKHRoaXMpO1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTEgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTE7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLnR3ZWVuKFwidGV4dFwiLCB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyB0ZXh0RnVuY3Rpb24odHdlZW5WYWx1ZSh0aGlzLCBcInRleHRcIiwgdmFsdWUpKVxuICAgICAgOiB0ZXh0Q29uc3RhbnQodmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSArIFwiXCIpKTtcbn1cbiIsImltcG9ydCB7VHJhbnNpdGlvbiwgbmV3SWR9IGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZDAgPSB0aGlzLl9pZCxcbiAgICAgIGlkMSA9IG5ld0lkKCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgdmFyIGluaGVyaXQgPSBnZXQobm9kZSwgaWQwKTtcbiAgICAgICAgc2NoZWR1bGUobm9kZSwgbmFtZSwgaWQxLCBpLCBncm91cCwge1xuICAgICAgICAgIHRpbWU6IGluaGVyaXQudGltZSArIGluaGVyaXQuZGVsYXkgKyBpbmhlcml0LmR1cmF0aW9uLFxuICAgICAgICAgIGRlbGF5OiAwLFxuICAgICAgICAgIGR1cmF0aW9uOiBpbmhlcml0LmR1cmF0aW9uLFxuICAgICAgICAgIGVhc2U6IGluaGVyaXQuZWFzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCBuYW1lLCBpZDEpO1xufVxuIiwiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB0cmFuc2l0aW9uX2F0dHIgZnJvbSBcIi4vYXR0clwiO1xuaW1wb3J0IHRyYW5zaXRpb25fYXR0clR3ZWVuIGZyb20gXCIuL2F0dHJUd2VlblwiO1xuaW1wb3J0IHRyYW5zaXRpb25fZGVsYXkgZnJvbSBcIi4vZGVsYXlcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2R1cmF0aW9uIGZyb20gXCIuL2R1cmF0aW9uXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9lYXNlIGZyb20gXCIuL2Vhc2VcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2ZpbHRlciBmcm9tIFwiLi9maWx0ZXJcIjtcbmltcG9ydCB0cmFuc2l0aW9uX21lcmdlIGZyb20gXCIuL21lcmdlXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9vbiBmcm9tIFwiLi9vblwiO1xuaW1wb3J0IHRyYW5zaXRpb25fcmVtb3ZlIGZyb20gXCIuL3JlbW92ZVwiO1xuaW1wb3J0IHRyYW5zaXRpb25fc2VsZWN0IGZyb20gXCIuL3NlbGVjdFwiO1xuaW1wb3J0IHRyYW5zaXRpb25fc2VsZWN0QWxsIGZyb20gXCIuL3NlbGVjdEFsbFwiO1xuaW1wb3J0IHRyYW5zaXRpb25fc2VsZWN0aW9uIGZyb20gXCIuL3NlbGVjdGlvblwiO1xuaW1wb3J0IHRyYW5zaXRpb25fc3R5bGUgZnJvbSBcIi4vc3R5bGVcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3N0eWxlVHdlZW4gZnJvbSBcIi4vc3R5bGVUd2VlblwiO1xuaW1wb3J0IHRyYW5zaXRpb25fdGV4dCBmcm9tIFwiLi90ZXh0XCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90cmFuc2l0aW9uIGZyb20gXCIuL3RyYW5zaXRpb25cIjtcbmltcG9ydCB0cmFuc2l0aW9uX3R3ZWVuIGZyb20gXCIuL3R3ZWVuXCI7XG5cbnZhciBpZCA9IDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBUcmFuc2l0aW9uKGdyb3VwcywgcGFyZW50cywgbmFtZSwgaWQpIHtcbiAgdGhpcy5fZ3JvdXBzID0gZ3JvdXBzO1xuICB0aGlzLl9wYXJlbnRzID0gcGFyZW50cztcbiAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gIHRoaXMuX2lkID0gaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zaXRpb24obmFtZSkge1xuICByZXR1cm4gc2VsZWN0aW9uKCkudHJhbnNpdGlvbihuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5ld0lkKCkge1xuICByZXR1cm4gKytpZDtcbn1cblxudmFyIHNlbGVjdGlvbl9wcm90b3R5cGUgPSBzZWxlY3Rpb24ucHJvdG90eXBlO1xuXG5UcmFuc2l0aW9uLnByb3RvdHlwZSA9IHRyYW5zaXRpb24ucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogVHJhbnNpdGlvbixcbiAgc2VsZWN0OiB0cmFuc2l0aW9uX3NlbGVjdCxcbiAgc2VsZWN0QWxsOiB0cmFuc2l0aW9uX3NlbGVjdEFsbCxcbiAgZmlsdGVyOiB0cmFuc2l0aW9uX2ZpbHRlcixcbiAgbWVyZ2U6IHRyYW5zaXRpb25fbWVyZ2UsXG4gIHNlbGVjdGlvbjogdHJhbnNpdGlvbl9zZWxlY3Rpb24sXG4gIHRyYW5zaXRpb246IHRyYW5zaXRpb25fdHJhbnNpdGlvbixcbiAgY2FsbDogc2VsZWN0aW9uX3Byb3RvdHlwZS5jYWxsLFxuICBub2Rlczogc2VsZWN0aW9uX3Byb3RvdHlwZS5ub2RlcyxcbiAgbm9kZTogc2VsZWN0aW9uX3Byb3RvdHlwZS5ub2RlLFxuICBzaXplOiBzZWxlY3Rpb25fcHJvdG90eXBlLnNpemUsXG4gIGVtcHR5OiBzZWxlY3Rpb25fcHJvdG90eXBlLmVtcHR5LFxuICBlYWNoOiBzZWxlY3Rpb25fcHJvdG90eXBlLmVhY2gsXG4gIG9uOiB0cmFuc2l0aW9uX29uLFxuICBhdHRyOiB0cmFuc2l0aW9uX2F0dHIsXG4gIGF0dHJUd2VlbjogdHJhbnNpdGlvbl9hdHRyVHdlZW4sXG4gIHN0eWxlOiB0cmFuc2l0aW9uX3N0eWxlLFxuICBzdHlsZVR3ZWVuOiB0cmFuc2l0aW9uX3N0eWxlVHdlZW4sXG4gIHRleHQ6IHRyYW5zaXRpb25fdGV4dCxcbiAgcmVtb3ZlOiB0cmFuc2l0aW9uX3JlbW92ZSxcbiAgdHdlZW46IHRyYW5zaXRpb25fdHdlZW4sXG4gIGRlbGF5OiB0cmFuc2l0aW9uX2RlbGF5LFxuICBkdXJhdGlvbjogdHJhbnNpdGlvbl9kdXJhdGlvbixcbiAgZWFzZTogdHJhbnNpdGlvbl9lYXNlXG59O1xuIiwiZXhwb3J0IGZ1bmN0aW9uIGN1YmljSW4odCkge1xuICByZXR1cm4gdCAqIHQgKiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3ViaWNPdXQodCkge1xuICByZXR1cm4gLS10ICogdCAqIHQgKyAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3ViaWNJbk91dCh0KSB7XG4gIHJldHVybiAoKHQgKj0gMikgPD0gMSA/IHQgKiB0ICogdCA6ICh0IC09IDIpICogdCAqIHQgKyAyKSAvIDI7XG59XG4iLCJpbXBvcnQge1RyYW5zaXRpb24sIG5ld0lkfSBmcm9tIFwiLi4vdHJhbnNpdGlvbi9pbmRleFwiO1xuaW1wb3J0IHNjaGVkdWxlIGZyb20gXCIuLi90cmFuc2l0aW9uL3NjaGVkdWxlXCI7XG5pbXBvcnQge2Vhc2VDdWJpY0luT3V0fSBmcm9tIFwiZDMtZWFzZVwiO1xuaW1wb3J0IHtub3d9IGZyb20gXCJkMy10aW1lclwiO1xuXG52YXIgZGVmYXVsdFRpbWluZyA9IHtcbiAgdGltZTogbnVsbCwgLy8gU2V0IG9uIHVzZS5cbiAgZGVsYXk6IDAsXG4gIGR1cmF0aW9uOiAyNTAsXG4gIGVhc2U6IGVhc2VDdWJpY0luT3V0XG59O1xuXG5mdW5jdGlvbiBpbmhlcml0KG5vZGUsIGlkKSB7XG4gIHZhciB0aW1pbmc7XG4gIHdoaWxlICghKHRpbWluZyA9IG5vZGUuX190cmFuc2l0aW9uKSB8fCAhKHRpbWluZyA9IHRpbWluZ1tpZF0pKSB7XG4gICAgaWYgKCEobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VGltaW5nLnRpbWUgPSBub3coKSwgZGVmYXVsdFRpbWluZztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRpbWluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgaWQsXG4gICAgICB0aW1pbmc7XG5cbiAgaWYgKG5hbWUgaW5zdGFuY2VvZiBUcmFuc2l0aW9uKSB7XG4gICAgaWQgPSBuYW1lLl9pZCwgbmFtZSA9IG5hbWUuX25hbWU7XG4gIH0gZWxzZSB7XG4gICAgaWQgPSBuZXdJZCgpLCAodGltaW5nID0gZGVmYXVsdFRpbWluZykudGltZSA9IG5vdygpLCBuYW1lID0gbmFtZSA9PSBudWxsID8gbnVsbCA6IG5hbWUgKyBcIlwiO1xuICB9XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc2NoZWR1bGUobm9kZSwgbmFtZSwgaWQsIGksIGdyb3VwLCB0aW1pbmcgfHwgaW5oZXJpdChub2RlLCBpZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2ludGVycnVwdCBmcm9tIFwiLi9pbnRlcnJ1cHRcIjtcbmltcG9ydCBzZWxlY3Rpb25fdHJhbnNpdGlvbiBmcm9tIFwiLi90cmFuc2l0aW9uXCI7XG5cbnNlbGVjdGlvbi5wcm90b3R5cGUuaW50ZXJydXB0ID0gc2VsZWN0aW9uX2ludGVycnVwdDtcbnNlbGVjdGlvbi5wcm90b3R5cGUudHJhbnNpdGlvbiA9IHNlbGVjdGlvbl90cmFuc2l0aW9uO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gIHZhciBuID0gc3BlY2lmaWVyLmxlbmd0aCAvIDYgfCAwLCBjb2xvcnMgPSBuZXcgQXJyYXkobiksIGkgPSAwO1xuICB3aGlsZSAoaSA8IG4pIGNvbG9yc1tpXSA9IFwiI1wiICsgc3BlY2lmaWVyLnNsaWNlKGkgKiA2LCArK2kgKiA2KTtcbiAgcmV0dXJuIGNvbG9ycztcbn1cbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2ZcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2XCIpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcIjFiOWU3N2Q5NWYwMjc1NzBiM2U3Mjk4YTY2YTYxZWU2YWIwMmE2NzYxZDY2NjY2NlwiKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCJhNmNlZTMxZjc4YjRiMmRmOGEzM2EwMmNmYjlhOTllMzFhMWNmZGJmNmZmZjdmMDBjYWIyZDY2YTNkOWFmZmZmOTliMTU5MjhcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyXCIpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcImIzZTJjZGZkY2RhY2NiZDVlOGY0Y2FlNGU2ZjVjOWZmZjJhZWYxZTJjY2NjY2NjY1wiKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCJlNDFhMWMzNzdlYjg0ZGFmNGE5ODRlYTNmZjdmMDBmZmZmMzNhNjU2MjhmNzgxYmY5OTk5OTlcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzXCIpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcIjhkZDNjN2ZmZmZiM2JlYmFkYWZiODA3MjgwYjFkM2ZkYjQ2MmIzZGU2OWZjY2RlNWQ5ZDlkOWJjODBiZGNjZWJjNWZmZWQ2ZlwiKTtcbiIsImltcG9ydCB7aW50ZXJwb2xhdGVSZ2JCYXNpc30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNjaGVtZSkge1xuICByZXR1cm4gaW50ZXJwb2xhdGVSZ2JCYXNpcyhzY2hlbWVbc2NoZW1lLmxlbmd0aCAtIDFdKTtcbn1cbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImQ4YjM2NWY1ZjVmNTVhYjRhY1wiLFxuICBcImE2NjExYWRmYzI3ZDgwY2RjMTAxODU3MVwiLFxuICBcImE2NjExYWRmYzI3ZGY1ZjVmNTgwY2RjMTAxODU3MVwiLFxuICBcIjhjNTEwYWQ4YjM2NWY2ZThjM2M3ZWFlNTVhYjRhYzAxNjY1ZVwiLFxuICBcIjhjNTEwYWQ4YjM2NWY2ZThjM2Y1ZjVmNWM3ZWFlNTVhYjRhYzAxNjY1ZVwiLFxuICBcIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZVwiLFxuICBcIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZVwiLFxuICBcIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMFwiLFxuICBcIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMFwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJhZjhkYzNmN2Y3Zjc3ZmJmN2JcIixcbiAgXCI3YjMyOTRjMmE1Y2ZhNmRiYTAwMDg4MzdcIixcbiAgXCI3YjMyOTRjMmE1Y2ZmN2Y3ZjdhNmRiYTAwMDg4MzdcIixcbiAgXCI3NjJhODNhZjhkYzNlN2Q0ZThkOWYwZDM3ZmJmN2IxYjc4MzdcIixcbiAgXCI3NjJhODNhZjhkYzNlN2Q0ZThmN2Y3ZjdkOWYwZDM3ZmJmN2IxYjc4MzdcIixcbiAgXCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzdcIixcbiAgXCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzdcIixcbiAgXCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWJcIixcbiAgXCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWJcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZTlhM2M5ZjdmN2Y3YTFkNzZhXCIsXG4gIFwiZDAxYzhiZjFiNmRhYjhlMTg2NGRhYzI2XCIsXG4gIFwiZDAxYzhiZjFiNmRhZjdmN2Y3YjhlMTg2NGRhYzI2XCIsXG4gIFwiYzUxYjdkZTlhM2M5ZmRlMGVmZTZmNWQwYTFkNzZhNGQ5MjIxXCIsXG4gIFwiYzUxYjdkZTlhM2M5ZmRlMGVmZjdmN2Y3ZTZmNWQwYTFkNzZhNGQ5MjIxXCIsXG4gIFwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxXCIsXG4gIFwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxXCIsXG4gIFwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5XCIsXG4gIFwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcIjk5OGVjM2Y3ZjdmN2YxYTM0MFwiLFxuICBcIjVlM2M5OWIyYWJkMmZkYjg2M2U2NjEwMVwiLFxuICBcIjVlM2M5OWIyYWJkMmY3ZjdmN2ZkYjg2M2U2NjEwMVwiLFxuICBcIjU0Mjc4ODk5OGVjM2Q4ZGFlYmZlZTBiNmYxYTM0MGIzNTgwNlwiLFxuICBcIjU0Mjc4ODk5OGVjM2Q4ZGFlYmY3ZjdmN2ZlZTBiNmYxYTM0MGIzNTgwNlwiLFxuICBcIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNlwiLFxuICBcIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNlwiLFxuICBcIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOFwiLFxuICBcIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOFwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlZjhhNjJmN2Y3Zjc2N2E5Y2ZcIixcbiAgXCJjYTAwMjBmNGE1ODI5MmM1ZGUwNTcxYjBcIixcbiAgXCJjYTAwMjBmNGE1ODJmN2Y3Zjc5MmM1ZGUwNTcxYjBcIixcbiAgXCJiMjE4MmJlZjhhNjJmZGRiYzdkMWU1ZjA2N2E5Y2YyMTY2YWNcIixcbiAgXCJiMjE4MmJlZjhhNjJmZGRiYzdmN2Y3ZjdkMWU1ZjA2N2E5Y2YyMTY2YWNcIixcbiAgXCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWNcIixcbiAgXCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWNcIixcbiAgXCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjFcIixcbiAgXCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjFcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZWY4YTYyZmZmZmZmOTk5OTk5XCIsXG4gIFwiY2EwMDIwZjRhNTgyYmFiYWJhNDA0MDQwXCIsXG4gIFwiY2EwMDIwZjRhNTgyZmZmZmZmYmFiYWJhNDA0MDQwXCIsXG4gIFwiYjIxODJiZWY4YTYyZmRkYmM3ZTBlMGUwOTk5OTk5NGQ0ZDRkXCIsXG4gIFwiYjIxODJiZWY4YTYyZmRkYmM3ZmZmZmZmZTBlMGUwOTk5OTk5NGQ0ZDRkXCIsXG4gIFwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkXCIsXG4gIFwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkXCIsXG4gIFwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhXCIsXG4gIFwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImZjOGQ1OWZmZmZiZjkxYmZkYlwiLFxuICBcImQ3MTkxY2ZkYWU2MWFiZDllOTJjN2JiNlwiLFxuICBcImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZDllOTJjN2JiNlwiLFxuICBcImQ3MzAyN2ZjOGQ1OWZlZTA5MGUwZjNmODkxYmZkYjQ1NzViNFwiLFxuICBcImQ3MzAyN2ZjOGQ1OWZlZTA5MGZmZmZiZmUwZjNmODkxYmZkYjQ1NzViNFwiLFxuICBcImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNFwiLFxuICBcImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNFwiLFxuICBcImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NVwiLFxuICBcImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NVwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmYzhkNTlmZmZmYmY5MWNmNjBcIixcbiAgXCJkNzE5MWNmZGFlNjFhNmQ5NmExYTk2NDFcIixcbiAgXCJkNzE5MWNmZGFlNjFmZmZmYmZhNmQ5NmExYTk2NDFcIixcbiAgXCJkNzMwMjdmYzhkNTlmZWUwOGJkOWVmOGI5MWNmNjAxYTk4NTBcIixcbiAgXCJkNzMwMjdmYzhkNTlmZWUwOGJmZmZmYmZkOWVmOGI5MWNmNjAxYTk4NTBcIixcbiAgXCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTBcIixcbiAgXCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTBcIixcbiAgXCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzdcIixcbiAgXCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzdcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmM4ZDU5ZmZmZmJmOTlkNTk0XCIsXG4gIFwiZDcxOTFjZmRhZTYxYWJkZGE0MmI4M2JhXCIsXG4gIFwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkZGE0MmI4M2JhXCIsXG4gIFwiZDUzZTRmZmM4ZDU5ZmVlMDhiZTZmNTk4OTlkNTk0MzI4OGJkXCIsXG4gIFwiZDUzZTRmZmM4ZDU5ZmVlMDhiZmZmZmJmZTZmNTk4OTlkNTk0MzI4OGJkXCIsXG4gIFwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkXCIsXG4gIFwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkXCIsXG4gIFwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyXCIsXG4gIFwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImU1ZjVmOTk5ZDhjOTJjYTI1ZlwiLFxuICBcImVkZjhmYmIyZTJlMjY2YzJhNDIzOGI0NVwiLFxuICBcImVkZjhmYmIyZTJlMjY2YzJhNDJjYTI1ZjAwNmQyY1wiLFxuICBcImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDJjYTI1ZjAwNmQyY1wiLFxuICBcImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNFwiLFxuICBcImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNFwiLFxuICBcImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNmQyYzAwNDQxYlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlMGVjZjQ5ZWJjZGE4ODU2YTdcIixcbiAgXCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODQxOWRcIixcbiAgXCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODU2YTc4MTBmN2NcIixcbiAgXCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4ODU2YTc4MTBmN2NcIixcbiAgXCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmJcIixcbiAgXCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmJcIixcbiAgXCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ4MTBmN2M0ZDAwNGJcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZTBmM2RiYThkZGI1NDNhMmNhXCIsXG4gIFwiZjBmOWU4YmFlNGJjN2JjY2M0MmI4Y2JlXCIsXG4gIFwiZjBmOWU4YmFlNGJjN2JjY2M0NDNhMmNhMDg2OGFjXCIsXG4gIFwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NDNhMmNhMDg2OGFjXCIsXG4gIFwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllXCIsXG4gIFwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllXCIsXG4gIFwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg2OGFjMDg0MDgxXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImZlZThjOGZkYmI4NGUzNGEzM1wiLFxuICBcImZlZjBkOWZkY2M4YWZjOGQ1OWQ3MzAxZlwiLFxuICBcImZlZjBkOWZkY2M4YWZjOGQ1OWUzNGEzM2IzMDAwMFwiLFxuICBcImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWUzNGEzM2IzMDAwMFwiLFxuICBcImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMFwiLFxuICBcImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMFwiLFxuICBcImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZmIzMDAwMDdmMDAwMFwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlY2UyZjBhNmJkZGIxYzkwOTlcIixcbiAgXCJmNmVmZjdiZGM5ZTE2N2E5Y2YwMjgxOGFcIixcbiAgXCJmNmVmZjdiZGM5ZTE2N2E5Y2YxYzkwOTkwMTZjNTlcIixcbiAgXCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YxYzkwOTkwMTZjNTlcIixcbiAgXCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTBcIixcbiAgXCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTBcIixcbiAgXCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTZjNTkwMTQ2MzZcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZWNlN2YyYTZiZGRiMmI4Y2JlXCIsXG4gIFwiZjFlZWY2YmRjOWUxNzRhOWNmMDU3MGIwXCIsXG4gIFwiZjFlZWY2YmRjOWUxNzRhOWNmMmI4Y2JlMDQ1YThkXCIsXG4gIFwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMmI4Y2JlMDQ1YThkXCIsXG4gIFwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiXCIsXG4gIFwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiXCIsXG4gIFwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDQ1YThkMDIzODU4XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImU3ZTFlZmM5OTRjN2RkMWM3N1wiLFxuICBcImYxZWVmNmQ3YjVkOGRmNjViMGNlMTI1NlwiLFxuICBcImYxZWVmNmQ3YjVkOGRmNjViMGRkMWM3Nzk4MDA0M1wiLFxuICBcImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGRkMWM3Nzk4MDA0M1wiLFxuICBcImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZlwiLFxuICBcImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZlwiLFxuICBcImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1Njk4MDA0MzY3MDAxZlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmZGUwZGRmYTlmYjVjNTFiOGFcIixcbiAgXCJmZWViZTJmYmI0YjlmNzY4YTFhZTAxN2VcIixcbiAgXCJmZWViZTJmYmI0YjlmNzY4YTFjNTFiOGE3YTAxNzdcIixcbiAgXCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFjNTFiOGE3YTAxNzdcIixcbiAgXCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzdcIixcbiAgXCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzdcIixcbiAgXCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzc0OTAwNmFcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZWRmOGIxN2ZjZGJiMmM3ZmI4XCIsXG4gIFwiZmZmZmNjYTFkYWI0NDFiNmM0MjI1ZWE4XCIsXG4gIFwiZmZmZmNjYTFkYWI0NDFiNmM0MmM3ZmI4MjUzNDk0XCIsXG4gIFwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MmM3ZmI4MjUzNDk0XCIsXG4gIFwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0XCIsXG4gIFwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0XCIsXG4gIFwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MjUzNDk0MDgxZDU4XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImY3ZmNiOWFkZGQ4ZTMxYTM1NFwiLFxuICBcImZmZmZjY2MyZTY5OTc4YzY3OTIzODQ0M1wiLFxuICBcImZmZmZjY2MyZTY5OTc4YzY3OTMxYTM1NDAwNjgzN1wiLFxuICBcImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTMxYTM1NDAwNjgzN1wiLFxuICBcImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMlwiLFxuICBcImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMlwiLFxuICBcImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNjgzNzAwNDUyOVwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmZmY3YmNmZWM0NGZkOTVmMGVcIixcbiAgXCJmZmZmZDRmZWQ5OGVmZTk5MjljYzRjMDJcIixcbiAgXCJmZmZmZDRmZWQ5OGVmZTk5MjlkOTVmMGU5OTM0MDRcIixcbiAgXCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjlkOTVmMGU5OTM0MDRcIixcbiAgXCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDRcIixcbiAgXCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDRcIixcbiAgXCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI5OTM0MDQ2NjI1MDZcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmZlZGEwZmViMjRjZjAzYjIwXCIsXG4gIFwiZmZmZmIyZmVjYzVjZmQ4ZDNjZTMxYTFjXCIsXG4gIFwiZmZmZmIyZmVjYzVjZmQ4ZDNjZjAzYjIwYmQwMDI2XCIsXG4gIFwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZjAzYjIwYmQwMDI2XCIsXG4gIFwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2XCIsXG4gIFwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2XCIsXG4gIFwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYmQwMDI2ODAwMDI2XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImRlZWJmNzllY2FlMTMxODJiZFwiLFxuICBcImVmZjNmZmJkZDdlNzZiYWVkNjIxNzFiNVwiLFxuICBcImVmZjNmZmJkZDdlNzZiYWVkNjMxODJiZDA4NTE5Y1wiLFxuICBcImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjMxODJiZDA4NTE5Y1wiLFxuICBcImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NFwiLFxuICBcImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NFwiLFxuICBcImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NTE5YzA4MzA2YlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlNWY1ZTBhMWQ5OWIzMWEzNTRcIixcbiAgXCJlZGY4ZTliYWU0YjM3NGM0NzYyMzhiNDVcIixcbiAgXCJlZGY4ZTliYWU0YjM3NGM0NzYzMWEzNTQwMDZkMmNcIixcbiAgXCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzYzMWEzNTQwMDZkMmNcIixcbiAgXCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzJcIixcbiAgXCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzJcIixcbiAgXCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDZkMmMwMDQ0MWJcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZjBmMGYwYmRiZGJkNjM2MzYzXCIsXG4gIFwiZjdmN2Y3Y2NjY2NjOTY5Njk2NTI1MjUyXCIsXG4gIFwiZjdmN2Y3Y2NjY2NjOTY5Njk2NjM2MzYzMjUyNTI1XCIsXG4gIFwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NjM2MzYzMjUyNTI1XCIsXG4gIFwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1XCIsXG4gIFwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1XCIsXG4gIFwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1MDAwMDAwXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImVmZWRmNWJjYmRkYzc1NmJiMVwiLFxuICBcImYyZjBmN2NiYzllMjllOWFjODZhNTFhM1wiLFxuICBcImYyZjBmN2NiYzllMjllOWFjODc1NmJiMTU0Mjc4ZlwiLFxuICBcImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODc1NmJiMTU0Mjc4ZlwiLFxuICBcImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NlwiLFxuICBcImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NlwiLFxuICBcImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzU0Mjc4ZjNmMDA3ZFwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmZWUwZDJmYzkyNzJkZTJkMjZcIixcbiAgXCJmZWU1ZDlmY2FlOTFmYjZhNGFjYjE4MWRcIixcbiAgXCJmZWU1ZDlmY2FlOTFmYjZhNGFkZTJkMjZhNTBmMTVcIixcbiAgXCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFkZTJkMjZhNTBmMTVcIixcbiAgXCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGRcIixcbiAgXCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGRcIixcbiAgXCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWRhNTBmMTU2NzAwMGRcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmVlNmNlZmRhZTZiZTY1NTBkXCIsXG4gIFwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZDk0NzAxXCIsXG4gIFwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZTY1NTBkYTYzNjAzXCIsXG4gIFwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZTY1NTBkYTYzNjAzXCIsXG4gIFwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0XCIsXG4gIFwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0XCIsXG4gIFwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxYTYzNjAzN2YyNzA0XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCB7Y3ViZWhlbGl4fSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nKGN1YmVoZWxpeCgzMDAsIDAuNSwgMC4wKSwgY3ViZWhlbGl4KC0yNDAsIDAuNSwgMS4wKSk7XG4iLCJpbXBvcnQge2N1YmVoZWxpeH0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQge2ludGVycG9sYXRlQ3ViZWhlbGl4TG9uZ30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCB2YXIgd2FybSA9IGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZyhjdWJlaGVsaXgoLTEwMCwgMC43NSwgMC4zNSksIGN1YmVoZWxpeCg4MCwgMS41MCwgMC44KSk7XG5cbmV4cG9ydCB2YXIgY29vbCA9IGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZyhjdWJlaGVsaXgoMjYwLCAwLjc1LCAwLjM1KSwgY3ViZWhlbGl4KDgwLCAxLjUwLCAwLjgpKTtcblxudmFyIGMgPSBjdWJlaGVsaXgoKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odCkge1xuICBpZiAodCA8IDAgfHwgdCA+IDEpIHQgLT0gTWF0aC5mbG9vcih0KTtcbiAgdmFyIHRzID0gTWF0aC5hYnModCAtIDAuNSk7XG4gIGMuaCA9IDM2MCAqIHQgLSAxMDA7XG4gIGMucyA9IDEuNSAtIDEuNSAqIHRzO1xuICBjLmwgPSAwLjggLSAwLjkgKiB0cztcbiAgcmV0dXJuIGMgKyBcIlwiO1xufVxuIiwiaW1wb3J0IHtyZ2J9IGZyb20gXCJkMy1jb2xvclwiO1xuXG52YXIgYyA9IHJnYigpLFxuICAgIHBpXzFfMyA9IE1hdGguUEkgLyAzLFxuICAgIHBpXzJfMyA9IE1hdGguUEkgKiAyIC8gMztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odCkge1xuICB2YXIgeDtcbiAgdCA9ICgwLjUgLSB0KSAqIE1hdGguUEk7XG4gIGMuciA9IDI1NSAqICh4ID0gTWF0aC5zaW4odCkpICogeDtcbiAgYy5nID0gMjU1ICogKHggPSBNYXRoLnNpbih0ICsgcGlfMV8zKSkgKiB4O1xuICBjLmIgPSAyNTUgKiAoeCA9IE1hdGguc2luKHQgKyBwaV8yXzMpKSAqIHg7XG4gIHJldHVybiBjICsgXCJcIjtcbn1cbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuXG5mdW5jdGlvbiByYW1wKHJhbmdlKSB7XG4gIHZhciBuID0gcmFuZ2UubGVuZ3RoO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiByYW5nZVtNYXRoLm1heCgwLCBNYXRoLm1pbihuIC0gMSwgTWF0aC5mbG9vcih0ICogbikpKV07XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoY29sb3JzKFwiNDQwMTU0NDQwMjU2NDUwNDU3NDUwNTU5NDYwNzVhNDYwODVjNDYwYTVkNDYwYjVlNDcwZDYwNDcwZTYxNDcxMDYzNDcxMTY0NDcxMzY1NDgxNDY3NDgxNjY4NDgxNzY5NDgxODZhNDgxYTZjNDgxYjZkNDgxYzZlNDgxZDZmNDgxZjcwNDgyMDcxNDgyMTczNDgyMzc0NDgyNDc1NDgyNTc2NDgyNjc3NDgyODc4NDgyOTc5NDcyYTdhNDcyYzdhNDcyZDdiNDcyZTdjNDcyZjdkNDYzMDdlNDYzMjdlNDYzMzdmNDYzNDgwNDUzNTgxNDUzNzgxNDUzODgyNDQzOTgzNDQzYTgzNDQzYjg0NDMzZDg0NDMzZTg1NDIzZjg1NDI0MDg2NDI0MTg2NDE0Mjg3NDE0NDg3NDA0NTg4NDA0Njg4M2Y0Nzg4M2Y0ODg5M2U0OTg5M2U0YTg5M2U0YzhhM2Q0ZDhhM2Q0ZThhM2M0ZjhhM2M1MDhiM2I1MThiM2I1MjhiM2E1MzhiM2E1NDhjMzk1NThjMzk1NjhjMzg1ODhjMzg1OThjMzc1YThjMzc1YjhkMzY1YzhkMzY1ZDhkMzU1ZThkMzU1ZjhkMzQ2MDhkMzQ2MThkMzM2MjhkMzM2MzhkMzI2NDhlMzI2NThlMzE2NjhlMzE2NzhlMzE2ODhlMzA2OThlMzA2YThlMmY2YjhlMmY2YzhlMmU2ZDhlMmU2ZThlMmU2ZjhlMmQ3MDhlMmQ3MThlMmM3MThlMmM3MjhlMmM3MzhlMmI3NDhlMmI3NThlMmE3NjhlMmE3NzhlMmE3ODhlMjk3OThlMjk3YThlMjk3YjhlMjg3YzhlMjg3ZDhlMjc3ZThlMjc3ZjhlMjc4MDhlMjY4MThlMjY4MjhlMjY4MjhlMjU4MzhlMjU4NDhlMjU4NThlMjQ4NjhlMjQ4NzhlMjM4ODhlMjM4OThlMjM4YThkMjI4YjhkMjI4YzhkMjI4ZDhkMjE4ZThkMjE4ZjhkMjE5MDhkMjE5MThjMjA5MjhjMjA5MjhjMjA5MzhjMWY5NDhjMWY5NThiMWY5NjhiMWY5NzhiMWY5ODhiMWY5OThhMWY5YThhMWU5YjhhMWU5Yzg5MWU5ZDg5MWY5ZTg5MWY5Zjg4MWZhMDg4MWZhMTg4MWZhMTg3MWZhMjg3MjBhMzg2MjBhNDg2MjFhNTg1MjFhNjg1MjJhNzg1MjJhODg0MjNhOTgzMjRhYTgzMjVhYjgyMjVhYzgyMjZhZDgxMjdhZDgxMjhhZTgwMjlhZjdmMmFiMDdmMmNiMTdlMmRiMjdkMmViMzdjMmZiNDdjMzFiNTdiMzJiNjdhMzRiNjc5MzViNzc5MzdiODc4MzhiOTc3M2FiYTc2M2JiYjc1M2RiYzc0M2ZiYzczNDBiZDcyNDJiZTcxNDRiZjcwNDZjMDZmNDhjMTZlNGFjMTZkNGNjMjZjNGVjMzZiNTBjNDZhNTJjNTY5NTRjNTY4NTZjNjY3NThjNzY1NWFjODY0NWNjODYzNWVjOTYyNjBjYTYwNjNjYjVmNjVjYjVlNjdjYzVjNjljZDViNmNjZDVhNmVjZTU4NzBjZjU3NzNkMDU2NzVkMDU0NzdkMTUzN2FkMTUxN2NkMjUwN2ZkMzRlODFkMzRkODRkNDRiODZkNTQ5ODlkNTQ4OGJkNjQ2OGVkNjQ1OTBkNzQzOTNkNzQxOTVkODQwOThkODNlOWJkOTNjOWRkOTNiYTBkYTM5YTJkYTM3YTVkYjM2YThkYjM0YWFkYzMyYWRkYzMwYjBkZDJmYjJkZDJkYjVkZTJiYjhkZTI5YmFkZTI4YmRkZjI2YzBkZjI1YzJkZjIzYzVlMDIxYzhlMDIwY2FlMTFmY2RlMTFkZDBlMTFjZDJlMjFiZDVlMjFhZDhlMjE5ZGFlMzE5ZGRlMzE4ZGZlMzE4ZTJlNDE4ZTVlNDE5ZTdlNDE5ZWFlNTFhZWNlNTFiZWZlNTFjZjFlNTFkZjRlNjFlZjZlNjIwZjhlNjIxZmJlNzIzZmRlNzI1XCIpKTtcblxuZXhwb3J0IHZhciBtYWdtYSA9IHJhbXAoY29sb3JzKFwiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTA5MDIwMjBiMDIwMjBkMDMwMzBmMDMwMzEyMDQwNDE0MDUwNDE2MDYwNTE4MDYwNTFhMDcwNjFjMDgwNzFlMDkwNzIwMGEwODIyMGIwOTI0MGMwOTI2MGQwYTI5MGUwYjJiMTAwYjJkMTEwYzJmMTIwZDMxMTMwZDM0MTQwZTM2MTUwZTM4MTYwZjNiMTgwZjNkMTkxMDNmMWExMDQyMWMxMDQ0MWQxMTQ3MWUxMTQ5MjAxMTRiMjExMTRlMjIxMTUwMjQxMjUzMjUxMjU1MjcxMjU4MjkxMTVhMmExMTVjMmMxMTVmMmQxMTYxMmYxMTYzMzExMTY1MzMxMDY3MzQxMDY5MzYxMDZiMzgxMDZjMzkwZjZlM2IwZjcwM2QwZjcxM2YwZjcyNDAwZjc0NDIwZjc1NDQwZjc2NDUxMDc3NDcxMDc4NDkxMDc4NGExMDc5NGMxMTdhNGUxMTdiNGYxMjdiNTExMjdjNTIxMzdjNTQxMzdkNTYxNDdkNTcxNTdlNTkxNTdlNWExNjdlNWMxNjdmNWQxNzdmNWYxODdmNjAxODgwNjIxOTgwNjQxYTgwNjUxYTgwNjcxYjgwNjgxYzgxNmExYzgxNmIxZDgxNmQxZDgxNmUxZTgxNzAxZjgxNzIxZjgxNzMyMDgxNzUyMTgxNzYyMTgxNzgyMjgxNzkyMjgyN2IyMzgyN2MyMzgyN2UyNDgyODAyNTgyODEyNTgxODMyNjgxODQyNjgxODYyNzgxODgyNzgxODkyODgxOGIyOTgxOGMyOTgxOGUyYTgxOTAyYTgxOTEyYjgxOTMyYjgwOTQyYzgwOTYyYzgwOTgyZDgwOTkyZDgwOWIyZTdmOWMyZTdmOWUyZjdmYTAyZjdmYTEzMDdlYTMzMDdlYTUzMTdlYTYzMTdkYTgzMjdkYWEzMzdkYWIzMzdjYWQzNDdjYWUzNDdiYjAzNTdiYjIzNTdiYjMzNjdhYjUzNjdhYjczNzc5YjgzNzc5YmEzODc4YmMzOTc4YmQzOTc3YmYzYTc3YzAzYTc2YzIzYjc1YzQzYzc1YzUzYzc0YzczZDczYzgzZTczY2EzZTcyY2MzZjcxY2Q0MDcxY2Y0MDcwZDA0MTZmZDI0MjZmZDM0MzZlZDU0NDZkZDY0NTZjZDg0NTZjZDk0NjZiZGI0NzZhZGM0ODY5ZGU0OTY4ZGY0YTY4ZTA0YzY3ZTI0ZDY2ZTM0ZTY1ZTQ0ZjY0ZTU1MDY0ZTc1MjYzZTg1MzYyZTk1NDYyZWE1NjYxZWI1NzYwZWM1ODYwZWQ1YTVmZWU1YjVlZWY1ZDVlZjA1ZjVlZjE2MDVkZjI2MjVkZjI2NDVjZjM2NTVjZjQ2NzVjZjQ2OTVjZjU2YjVjZjY2YzVjZjY2ZTVjZjc3MDVjZjc3MjVjZjg3NDVjZjg3NjVjZjk3ODVkZjk3OTVkZjk3YjVkZmE3ZDVlZmE3ZjVlZmE4MTVmZmI4MzVmZmI4NTYwZmI4NzYxZmM4OTYxZmM4YTYyZmM4YzYzZmM4ZTY0ZmM5MDY1ZmQ5MjY2ZmQ5NDY3ZmQ5NjY4ZmQ5ODY5ZmQ5YTZhZmQ5YjZiZmU5ZDZjZmU5ZjZkZmVhMTZlZmVhMzZmZmVhNTcxZmVhNzcyZmVhOTczZmVhYTc0ZmVhYzc2ZmVhZTc3ZmViMDc4ZmViMjdhZmViNDdiZmViNjdjZmViNzdlZmViOTdmZmViYjgxZmViZDgyZmViZjg0ZmVjMTg1ZmVjMjg3ZmVjNDg4ZmVjNjhhZmVjODhjZmVjYThkZmVjYzhmZmVjZDkwZmVjZjkyZmVkMTk0ZmVkMzk1ZmVkNTk3ZmVkNzk5ZmVkODlhZmRkYTljZmRkYzllZmRkZWEwZmRlMGExZmRlMmEzZmRlM2E1ZmRlNWE3ZmRlN2E5ZmRlOWFhZmRlYmFjZmNlY2FlZmNlZWIwZmNmMGIyZmNmMmI0ZmNmNGI2ZmNmNmI4ZmNmN2I5ZmNmOWJiZmNmYmJkZmNmZGJmXCIpKTtcblxuZXhwb3J0IHZhciBpbmZlcm5vID0gcmFtcChjb2xvcnMoXCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTRcIikpO1xuXG5leHBvcnQgdmFyIHBsYXNtYSA9IHJhbXAoY29sb3JzKFwiMGQwODg3MTAwNzg4MTMwNzg5MTYwNzhhMTkwNjhjMWIwNjhkMWQwNjhlMjAwNjhmMjIwNjkwMjQwNjkxMjYwNTkxMjgwNTkyMmEwNTkzMmMwNTk0MmUwNTk1MmYwNTk2MzEwNTk3MzMwNTk3MzUwNDk4MzcwNDk5MzgwNDlhM2EwNDlhM2MwNDliM2UwNDljM2YwNDljNDEwNDlkNDMwMzllNDQwMzllNDYwMzlmNDgwMzlmNDkwM2EwNGIwM2ExNGMwMmExNGUwMmEyNTAwMmEyNTEwMmEzNTMwMmEzNTUwMmE0NTYwMWE0NTgwMWE0NTkwMWE1NWIwMWE1NWMwMWE2NWUwMWE2NjAwMWE2NjEwMGE3NjMwMGE3NjQwMGE3NjYwMGE3NjcwMGE4NjkwMGE4NmEwMGE4NmMwMGE4NmUwMGE4NmYwMGE4NzEwMGE4NzIwMWE4NzQwMWE4NzUwMWE4NzcwMWE4NzgwMWE4N2EwMmE4N2IwMmE4N2QwM2E4N2UwM2E4ODAwNGE4ODEwNGE3ODMwNWE3ODQwNWE3ODYwNmE2ODcwN2E2ODgwOGE2OGEwOWE1OGIwYWE1OGQwYmE1OGUwY2E0OGYwZGE0OTEwZWEzOTIwZmEzOTQxMGEyOTUxMWExOTYxM2ExOTgxNGEwOTkxNTlmOWExNjlmOWMxNzllOWQxODlkOWUxOTlkYTAxYTljYTExYjliYTIxZDlhYTMxZTlhYTUxZjk5YTYyMDk4YTcyMTk3YTgyMjk2YWEyMzk1YWIyNDk0YWMyNjk0YWQyNzkzYWUyODkyYjAyOTkxYjEyYTkwYjIyYjhmYjMyYzhlYjQyZThkYjUyZjhjYjYzMDhiYjczMThhYjgzMjg5YmEzMzg4YmIzNDg4YmMzNTg3YmQzNzg2YmUzODg1YmYzOTg0YzAzYTgzYzEzYjgyYzIzYzgxYzMzZDgwYzQzZTdmYzU0MDdlYzY0MTdkYzc0MjdjYzg0MzdiYzk0NDdhY2E0NTdhY2I0Njc5Y2M0Nzc4Y2M0OTc3Y2Q0YTc2Y2U0Yjc1Y2Y0Yzc0ZDA0ZDczZDE0ZTcyZDI0ZjcxZDM1MTcxZDQ1MjcwZDU1MzZmZDU1NDZlZDY1NTZkZDc1NjZjZDg1NzZiZDk1ODZhZGE1YTZhZGE1YjY5ZGI1YzY4ZGM1ZDY3ZGQ1ZTY2ZGU1ZjY1ZGU2MTY0ZGY2MjYzZTA2MzYzZTE2NDYyZTI2NTYxZTI2NjYwZTM2ODVmZTQ2OTVlZTU2YTVkZTU2YjVkZTY2YzVjZTc2ZTViZTc2ZjVhZTg3MDU5ZTk3MTU4ZTk3MjU3ZWE3NDU3ZWI3NTU2ZWI3NjU1ZWM3NzU0ZWQ3OTUzZWQ3YTUyZWU3YjUxZWY3YzUxZWY3ZTUwZjA3ZjRmZjA4MDRlZjE4MTRkZjE4MzRjZjI4NDRiZjM4NTRiZjM4NzRhZjQ4ODQ5ZjQ4OTQ4ZjU4YjQ3ZjU4YzQ2ZjY4ZDQ1ZjY4ZjQ0Zjc5MDQ0Zjc5MTQzZjc5MzQyZjg5NDQxZjg5NTQwZjk5NzNmZjk5ODNlZjk5YTNlZmE5YjNkZmE5YzNjZmE5ZTNiZmI5ZjNhZmJhMTM5ZmJhMjM4ZmNhMzM4ZmNhNTM3ZmNhNjM2ZmNhODM1ZmNhOTM0ZmRhYjMzZmRhYzMzZmRhZTMyZmRhZjMxZmRiMTMwZmRiMjJmZmRiNDJmZmRiNTJlZmViNzJkZmViODJjZmViYTJjZmViYjJiZmViZDJhZmViZTJhZmVjMDI5ZmRjMjI5ZmRjMzI4ZmRjNTI3ZmRjNjI3ZmRjODI3ZmRjYTI2ZmRjYjI2ZmNjZDI1ZmNjZTI1ZmNkMDI1ZmNkMjI1ZmJkMzI0ZmJkNTI0ZmJkNzI0ZmFkODI0ZmFkYTI0ZjlkYzI0ZjlkZDI1ZjhkZjI1ZjhlMTI1ZjdlMjI1ZjdlNDI1ZjZlNjI2ZjZlODI2ZjVlOTI2ZjVlYjI3ZjRlZDI3ZjNlZTI3ZjNmMDI3ZjJmMjI3ZjFmNDI2ZjFmNTI1ZjBmNzI0ZjBmOTIxXCIpKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IMKpIDIwMTUgLSAyMDE4IFRoZSBCcm9hZCBJbnN0aXR1dGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSAoaHR0cHM6Ly9naXRodWIuY29tL2Jyb2FkaW5zdGl0dXRlL2d0ZXgtdml6L2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQpXG4gKi9cbmltcG9ydCB7bWF4fSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7c2NhbGVTZXF1ZW50aWFsfSBmcm9tIFwiZDMtc2NhbGVcIjtcbmltcG9ydCAqIGFzIGQzQ2hyb21hdGljIGZyb20gXCJkMy1zY2FsZS1jaHJvbWF0aWNcIjtcblwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY29sb3JDaGFydChzaHVmZmxlPXRydWUpe1xuICAgIC8vIHJlZiBpbGx1c3RyYXRvciBjb2xvciB0aGVtZXNcbiAgICBjb25zdCBjb2xvcnMgPSBbXG4gICAgICAgIFwicmdiKDEwMCwxMTgsMTIwKVwiLFxuICAgICAgICBcInJnYigxMDEsMTQxLDE0NSlcIixcbiAgICAgICAgXCJyZ2IoMTAzLDEyNiw4MilcIixcbiAgICAgICAgXCJyZ2IoMTAzLDE4NCwyMjIpXCIsXG4gICAgICAgIFwicmdiKDEwOCwxMTAsODgpXCIsXG5cbiAgICAgICAgXCJyZ2IoMTA4LDE0NywxMjgpXCIsXG4gICAgICAgIFwicmdiKDExOSwxNDQsMTgyKVwiLFxuICAgICAgICBcInJnYigxMjYsMTMwLDEyMilcIixcbiAgICAgICAgXCJyZ2IoMTMzLDE3MywxODYpXCIsXG4gICAgICAgIFwicmdiKDEzNywxMTQsOTEpXCIsXG4gICAgICAgIFwicmdiKDE0NSwxNzAsMTU3KVwiLFxuXG4gICAgICAgIFwicmdiKDE0NSwyMDEsMjMyKVwiLFxuICAgICAgICBcInJnYigxNDcsMTA1LDY2KVwiLFxuICAgICAgICBcInJnYigxNTksMTE0LDExNilcIixcbiAgICAgICAgXCJyZ2IoMTU5LDE4OCwxOTEpXCIsXG4gICAgICAgIFwicmdiKDE1OSwyMjksMTk0KVwiLFxuICAgICAgICBcInJnYigxNjMsMTYzLDE3MSlcIixcblxuICAgICAgICBcInJnYigxNjQsMjA3LDE5MClcIixcbiAgICAgICAgXCJyZ2IoMTcyLDEwOCwxMzApXCIsXG4gICAgICAgIFwicmdiKDE3Myw4NCwxMTQpXCIsXG4gICAgICAgIFwicmdiKDE3NCwxOTUsMjIyKVwiLFxuICAgICAgICBcInJnYigxNzYsMjA0LDE1MylcIixcblxuICAgICAgICBcInJnYigxNzksMTgwLDE1MClcIixcbiAgICAgICAgXCJyZ2IoMTgwLDIyMCwyMzcpXCIsXG4gICAgICAgIFwicmdiKDE4MywyMDIsMTIxKVwiLFxuICAgICAgICBcInJnYigxOTIsMjAyLDg1KVwiLFxuICAgICAgICBcInJnYigxOTMsMTkxLDE5M1wiLFxuICAgICAgICBcInJnYigxOTUsOTcsMTM2KVwiLFxuXG4gICAgICAgIFwicmdiKDE5OSwxMjEsMTAyKVwiLFxuICAgICAgICBcInJnYigyMDcsMjAyLDc2KVwiLFxuICAgICAgICBcInJnYigyMDksMjE5LDE4OSlcIixcbiAgICAgICAgXCJyZ2IoMjEzLDI1MSwyNTUpXCIsXG4gICAgICAgIFwicmdiKDIxNSw5NCw1NilcIixcblxuICAgICAgICBcInJnYigyMTgsMTE0LDEyNilcIixcbiAgICAgICAgXCJyZ2IoMjIzLDkwLDczKVwiLFxuICAgICAgICBcInJnYigyMjQsMjQ3LDIxNylcIixcbiAgICAgICAgXCJyZ2IoMjI3LDIwNSwxNjQpXCIsXG4gICAgICAgIFwicmdiKDIyOCwxNjgsMTg1KVwiLFxuXG4gICAgICAgIFwicmdiKDIzMCwxNzYsMTUyKVwiLFxuICAgICAgICBcInJnYigyMzIsMjEyLDE3NSlcIixcbiAgICAgICAgXCJyZ2IoMjM5LDIwMSw3NilcIixcbiAgICAgICAgXCJyZ2IoMjQwLDEyNCwxMDgpXCIsXG4gICAgICAgIFwicmdiKDI0NiwyMzIsMTc3KVwiLFxuXG4gICAgICAgIFwicmdiKDI0OSwyMjgsMTczKVwiLFxuICAgICAgICBcInJnYigyNTIsMjQ1LDE5MSlcIixcbiAgICAgICAgXCJyZ2IoMjU1LDE4OCwxMDMpXCIsXG4gICAgICAgIFwicmdiKDQ1LDk0LDExMClcIixcbiAgICAgICAgXCJyZ2IoNTEsMTUzLDIwNClcIixcblxuICAgICAgICBcInJnYig2MCwxMjQsMTQ1KVwiLFxuICAgICAgICBcInJnYig2Miw4NywxNDUpXCIsXG4gICAgICAgIFwicmdiKDY1LDExNSwxMjApXCIsXG4gICAgICAgIFwicmdiKDg5LDIxNiwyMjkpXCIsXG4gICAgICAgIFwicmdiKDk0LDE3OCwxNTMpXCIsXG4gICAgICAgIFwicmdiKDk1LDEyNCwxMzQpXCJcbiAgICBdO1xuXG4gICAgaWYgKHNodWZmbGUpIHJldHVybiBzaHVmZmxlQ29sb3JzKGNvbG9ycyk7XG4gICAgcmV0dXJuIGNvbG9ycztcbn1cblxuZnVuY3Rpb24gc2h1ZmZsZUNvbG9ycyhhcnJheSkge1xuICAgIC8vIEZpc2hlci1ZYXRlcyBzaHVmZmxlXG4gICAgbGV0IGNvdW50ZXIgPSBhcnJheS5sZW5ndGg7XG5cbiAgICAvLyBXaGlsZSB0aGVyZSBhcmUgZWxlbWVudHMgaW4gdGhlIGFycmF5XG4gICAgd2hpbGUgKGNvdW50ZXIgPiAwKSB7XG4gICAgICAgIC8vIFBpY2sgYSByYW5kb20gaW5kZXhcbiAgICAgICAgbGV0IGluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY291bnRlcik7XG5cbiAgICAgICAgLy8gRGVjcmVhc2UgY291bnRlciBieSAxXG4gICAgICAgIGNvdW50ZXItLTtcblxuICAgICAgICAvLyBBbmQgc3dhcCB0aGUgbGFzdCBlbGVtZW50IHdpdGggaXRcbiAgICAgICAgbGV0IHRlbXAgPSBhcnJheVtjb3VudGVyXTtcbiAgICAgICAgYXJyYXlbY291bnRlcl0gPSBhcnJheVtpbmRleF07XG4gICAgICAgIGFycmF5W2luZGV4XSA9IHRlbXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG4vKipcbiAqIGdldCBhIGNvbG9yIGludGVycG9sYXRvclxuICogQHBhcmFtIG5hbWUge2VudW19OiBCdUduLCBPclJkLi4uLlxuICogQHJldHVybnMgeyp9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2xvckludGVycG9sYXRvcihuYW1lKXtcbiAgICAvLyByZWZlcmVuY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9kMy9kMy1zY2FsZS1jaHJvbWF0aWMvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI3NlcXVlbnRpYWwtbXVsdGktaHVlXG4gICAgY29uc3QgaW50ZXJwb2xhdG9ycyA9IHtcbiAgICAgICAgQnVHbjogZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVCdUduLFxuICAgICAgICBPclJkOiBkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZU9yUmQsXG4gICAgICAgIFB1QnU6IGQzQ2hyb21hdGljLmludGVycG9sYXRlUHVCdSxcbiAgICAgICAgWWxHbkJ1OiBkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZVlsR25CdSxcbiAgICAgICAgQmx1ZXM6IGQzQ2hyb21hdGljLmludGVycG9sYXRlQmx1ZXMsXG4gICAgICAgIE9yYW5nZXM6IGQzQ2hyb21hdGljLmludGVycG9sYXRlT3JhbmdlcyxcbiAgICAgICAgR3JlZW5zOiBkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZUdyZWVucyxcbiAgICAgICAgUHVycGxlczogZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVQdXJwbGVzLFxuICAgICAgICBSZWRzOiBkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZVJlZHMsXG4gICAgICAgIEdyZXlzOiBkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZUdyZXlzLFxuICAgICAgICBHcmF5czogZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVHcmV5c1xuICAgIH07XG4gICAgaWYgKCFpbnRlcnBvbGF0b3JzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIGNvbnN0IGVyciA9IFwiVW5yZWNvZ25pemVkIGNvbG9yOiBcIiArIG5hbWU7XG4gICAgICAgIGFsZXJ0KGVycik7XG4gICAgICAgIHRocm93KGVycik7XG4gICAgfVxuICAgIHJldHVybiBpbnRlcnBvbGF0b3JzW25hbWVdO1xufVxuXG4vKipcbiAqIHJlZmVyZW5jZTogaHR0cHM6Ly9naXRodWIuY29tL2QzL2QzLXNjYWxlXG4gKiByZWZlcmVuY2U6IGh0dHA6Ly9ibC5vY2tzLm9yZy9jdXJyYW4vMzA5NGIzN2U2M2I5MThiYWIwYTA2Nzg3ZTE2MTYwN2JcbiAqIHNjYWxlU2VxdWVudGlhbCBtYXBzIHRoZSBjb250aW51b3VzIGRvbWFpbiB0byBhIGNvbnRpbnVvdXMgY29sb3Igc2NhbGVcbiAqIEBwYXJhbSBkYXRhIHtMaXN0fSBvZiBudW1lcmljYWwgZGF0YVxuICogQHBhcmFtIGNvbG9ycyB7U3RyaW5nfSBhIGNvbG9yIG5hbWUgdGhhdCBpcyBhdmFpbGFibGUgaW4gZ2V0Q29sb3JJbnRlcnBvbGF0b3IoKVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29sb3JTY2FsZShkYXRhLCBjb2xvcnM9XCJZbEduQnVcIiwgZG1pbiA9IDApIHtcbiAgICAvLyBsZXQgZG1heCA9IE1hdGgucm91bmQobWF4KGRhdGEpKTtcbiAgICBsZXQgZG1heCA9IG1heChkYXRhKTtcbiAgICBjb25zdCBzY2FsZSA9IHNjYWxlU2VxdWVudGlhbChnZXRDb2xvckludGVycG9sYXRvcihjb2xvcnMpKTtcbiAgICBzY2FsZS5kb21haW4oW2RtaW4sIGRtYXhdKTtcbiAgICByZXR1cm4gc2NhbGU7XG59XG5cbi8qKlxuICogRHJhdyBhIGNvbG9yIGxlZ2VuZCBiYXIuXG4gKiBEZXBlbmRlbmNpZXM6IGV4cHJlc3Npb25NYXAuY3NzXG4gKiBAcGFyYW0gdGl0bGUge1N0cmluZ31cbiAqIEBwYXJhbSBkb20ge29iamVjdH0gRDMgZG9tIG9iamVjdFxuICogQHBhcmFtIHNjYWxlIHtPYmplY3R9IEQzIHNjYWxlIG9mIHRoZSBjb2xvclxuICogQHBhcmFtIGNvbmZpZyB7T2JqZWN0fSB3aXRoIGF0dHI6IHgsIHlcbiAqIEBwYXJhbSB1c2VMb2cge0Jvb2xlYW59XG4gKiBAcGFyYW0gb3JpZW50YXRpb24ge2VudW19IGggb3IgdiwgaS5lLiBob3Jpem9udGFsIG9yIHZlcnRpY2FsXG4gKiBAcGFyYW0gY2VsbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd0NvbG9yTGVnZW5kKHRpdGxlLCBkb20sIHNjYWxlLCBjb25maWcsIHVzZUxvZywgdGlja3M9MTAsIGJhc2U9MTAsIGNlbGw9e2g6MTAsIHc6NDB9LCBvcmllbnRhdGlvbj1cImhcIil7XG4gICAgbGV0IHJhbmdlID0gWy4uLkFycmF5KHRpY2tzKzEpLmtleXMoKV07XG4gICAgbGV0IGludGVydmFsID0gc2NhbGUuZG9tYWluKClbMV0vdGlja3M7XG4gICAgY29uc3QgZGF0YSA9IHJhbmdlLm1hcCgoZCk9PmQqaW50ZXJ2YWwpO1xuXG4gICAgLy8gbGVnZW5kIGdyb3Vwc1xuICAgIGNvbnN0IGxlZ2VuZHMgPSBkb20uYXBwZW5kKFwiZ1wiKS5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHtjb25maWcueH0sICR7Y29uZmlnLnl9KWApXG4gICAgICAgICAgICAgICAgICAgIC5zZWxlY3RBbGwoXCIubGVnZW5kXCIpLmRhdGEoZGF0YSk7XG5cbiAgICBjb25zdCBnID0gbGVnZW5kcy5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcImxlZ2VuZFwiLCB0cnVlKTtcblxuICAgIGlmIChvcmllbnRhdGlvbiA9PSAnaCcpe1xuICAgICAgICAgLy8gbGVnZW5kIHRpdGxlXG4gICAgICAgIGRvbS5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiY29sb3ItbGVnZW5kXCIpXG4gICAgICAgICAgICAudGV4dCh0aXRsZSlcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCAtMTApXG4gICAgICAgICAgICAuYXR0cihcInRleHQtYW5jaG9yXCIsIFwiZW5kXCIpXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgY2VsbC5oKVxuICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke2NvbmZpZy54fSwgJHtjb25maWcueX0pYCk7XG5cbiAgICAgICAgLy8gdGhlIGNvbG9yIGxlZ2VuZFxuICAgICAgICBnLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCAoZCwgaSkgPT4gY2VsbC53KmkpXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgNSlcbiAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgY2VsbC53KVxuICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgY2VsbC5oKVxuICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBzY2FsZSk7XG5cbiAgICAgICAgZy5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiY29sb3ItbGVnZW5kXCIpXG4gICAgICAgICAgICAudGV4dCgoZCkgPT4gdXNlTG9nPyhNYXRoLnBvdyhiYXNlLCBkKSkudG9QcmVjaXNpb24oMik6ZC50b1ByZWNpc2lvbigyKSlcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCAoZCwgaSkgPT4gY2VsbC53ICogaSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAgLy8gbGVnZW5kIHRpdGxlXG4gICAgICAgIGRvbS5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiY29sb3ItbGVnZW5kXCIpXG4gICAgICAgICAgICAudGV4dCh0aXRsZSlcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCA1KVxuICAgICAgICAgICAgLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcInN0YXJ0XCIpXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgMClcbiAgICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoJHtjb25maWcueH0sICR7Y29uZmlnLnkgKyBjZWxsLmggKiBkYXRhLmxlbmd0aH0pcm90YXRlKDkwKWApO1xuXG4gICAgICAgIGcuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIDApXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgKGQsIGkpID0+IGNlbGwuaCppKVxuICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBjZWxsLncpXG4gICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBjZWxsLmgpXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIHNjYWxlKTtcblxuICAgICAgICBnLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJjb2xvci1sZWdlbmRcIilcbiAgICAgICAgICAgIC50ZXh0KChkKSA9PiB1c2VMb2c/KE1hdGgucG93KGJhc2UsIGQpLTEpLnRvUHJlY2lzaW9uKDIpOmQudG9QcmVjaXNpb24oMikpXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgMTUpXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgKGQsIGkpID0+IGNlbGwuaCAqIGkgKyAoY2VsbC5oLzIpKTtcbiAgICB9XG5cblxuXG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuLyoqXG4gKiBDcmVhdGUgYSB0b29sYmFyXG4gKiBUaGlzIGNsYXNzIHVzZXMgYSBsb3Qgb2YgalF1ZXJ5IGZvciBkb20gZWxlbWVudCBtYW5pcHVsYXRpb25cbiAqL1xuXG5pbXBvcnQge3NlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtwYXJzZUNzc1N0eWxlc30gZnJvbSBcIi4vdXRpbHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9vbGJhciB7XG4gICAgY29uc3RydWN0b3IoZG9tSWQsIHRvb2x0aXA9dW5kZWZpbmVkLCB2ZXJ0aWNhbD1mYWxzZSl7XG4gICAgICAgICQoYCMke2RvbUlkfWApLnNob3coKTsgLy8gaWYgaGlkZGVuXG5cbiAgICAgICAgLy8gYWRkIGEgbmV3IGJhcmdyb3VwIGRpdiB0byBkb21JRCB3aXRoIGJvb3RzdHJhcCBidXR0b24gY2xhc3Nlc1xuICAgICAgICBjb25zdCBidG5DbGFzc2VzID0gdmVydGljYWw/J2J0bi1ncm91cC12ZXJ0aWNhbCBidG4tZ3JvdXAtc20nOiAnYnRuLWdyb3VwIGJ0bi1ncm91cC1zbSc7XG4gICAgICAgIHRoaXMuYmFyID0gJCgnPGRpdi8+JykuYWRkQ2xhc3MoYnRuQ2xhc3NlcykuYXBwZW5kVG8oYCMke2RvbUlkfWApO1xuICAgICAgICB0aGlzLmJ1dHRvbnMgPSB7fTtcbiAgICAgICAgdGhpcy50b29sdGlwID0gdG9vbHRpcDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBkb3dubG9hZCBidXR0b24gZm9yIFNWR1xuICAgICAqIEBwYXJhbSBpZCB7U3RyaW5nfSB0aGUgYnV0dG9uIGRvbSBJRFxuICAgICAqIEBwYXJhbSBzdmdJZCB7U3RyaW5nfSB0aGUgU1ZHIGRvbSBJRCB0byBncmFiIGFuZCBkb3dubG9hZFxuICAgICAqIEBwYXJhbSBvdXRmaWxlTmFtZSB7U3RyaW5nfSB0aGUgZG93bmxvYWQgZmlsZSBuYW1lXG4gICAgICogQHBhcmFtIGNsb25lSWQge1N0cmluZ30gdGhlIGNsb25lZCBTVkcgZG9tIElEXG4gICAgICogQHBhcmFtIGljb24ge1N0cmluZ30gYSBmb250YXdlc29tZSdzIGljb24gY2xhc3MgbmFtZVxuICAgICAqL1xuICAgIGNyZWF0ZURvd25sb2FkU3ZnQnV0dG9uKGlkLCBzdmdJZCwgb3V0ZmlsZU5hbWUsIGNsb25lSWQsIGljb249J2ZhLWRvd25sb2FkJyl7XG4gICAgICAgIGNvbnN0ICRidXR0b24gPSB0aGlzLmNyZWF0ZUJ1dHRvbihpZCwgaWNvbik7XG4gICAgICAgIHNlbGVjdChgIyR7aWR9YClcbiAgICAgICAgICAgIC5vbignY2xpY2snLCAoKT0+e1xuICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRTdmcoc3ZnSWQsIG91dGZpbGVOYW1lLCBjbG9uZUlkKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAub24oJ21vdXNlb3ZlcicsICgpPT57XG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwLnNob3coXCJEb3dubG9hZFwiKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAub24oJ21vdXNlb3V0JywgKCk9PntcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAuaGlkZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVzZXRCdXR0b24oaWQsIGNhbGxiYWNrLCBpY29uPSdmYS1leHBhbmQtYXJyb3dzLWFsdCcpe1xuICAgICAgICBjb25zdCAkYnV0dG9uID0gdGhpcy5jcmVhdGVCdXR0b24oaWQsIGljb24pO1xuICAgICAgICBzZWxlY3QoYCMke2lkfWApXG4gICAgICAgICAgICAub24oJ2NsaWNrJywgY2FsbGJhY2spXG4gICAgICAgICAgICAub24oJ21vdXNlb3ZlcicsICgpPT57XG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwLnNob3coXCJSZXNldCB0aGUgc2NhbGVzXCIpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5vbignbW91c2VvdXQnLCAoKT0+e1xuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcC5oaWRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjcmVhdGUgYSBidXR0b24gdG8gdGhlIHRvb2xiYXJcbiAgICAgKiBAcGFyYW0gaWQge1N0cmluZ30gdGhlIGJ1dHRvbidzIGlkXG4gICAgICogQHBhcmFtIGljb24ge1N0cmluZ30gYSBmb250YXdlc29tZSBpY29uIGNsYXNzXG4gICAgICogRGVwZW5kZW5jaWVzOiBCb290c3RyYXAsIGpRdWVyeSwgRm9udGF3ZXNvbWVcbiAgICAgKi9cbiAgICBjcmVhdGVCdXR0b24oaWQsIGljb249J2ZhLWRvd25sb2FkJyl7XG4gICAgICAgIGNvbnN0ICRidXR0b24gPSAkKCc8YS8+JykuYXR0cignaWQnLCBpZClcbiAgICAgICAgICAgIC5hZGRDbGFzcygnYnRuIGJ0bi1kZWZhdWx0JykuYXBwZW5kVG8odGhpcy5iYXIpO1xuICAgICAgICAkKCc8aS8+JykuYWRkQ2xhc3MoYGZhICR7aWNvbn1gKS5hcHBlbmRUbygkYnV0dG9uKTtcbiAgICAgICAgdGhpcy5idXR0b25zW2lkXSA9ICRidXR0b247XG4gICAgICAgIHJldHVybiAkYnV0dG9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGF0dGFjaCBhIHRvb2x0aXAgZG9tIHdpdGggdGhlIHRvb2xiYXJcbiAgICAgKiBAcGFyYW0gdG9vbHRpcCB7VG9vbHRpcH1cbiAgICAgKi9cbiAgICBhdHRhY2hUb29sdGlwKHRvb2x0aXApe1xuICAgICAgICB0aGlzLnRvb2x0aXAgPSB0b29sdGlwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERvd25sb2FkIFNWRyBvYmpcbiAgICAgKiBAcGFyYW0gc3ZnSWQge1N0cmluZ30gdGhlIFNWRyBkb20gSURcbiAgICAgKiBAcGFyYW0gZmlsZU5hbWUge1N0cmluZ30gdGhlIG91dHB1dCBmaWxlIG5hbWVcbiAgICAgKiBAcGFyYW0gY2xvbmVJZCB7U3RyaW5nfSB0aGUgdGVtcG9yYXJ5IGRvbSBJRCB0byBjb3B5IHRoZSBTVkcgdG9cbiAgICAgKiBEZXBlbmRlbmNpZXM6IEZpbGVTYXZlclxuICAgICAqL1xuICAgIGRvd25sb2FkU3ZnKHN2Z0lkLCBmaWxlTmFtZSwgY2xvbmVJZCl7XG4gICAgICAgIC8vIGxldCBzdmdPYmogPSAkKCQoJChgJHtcIiNcIiArc3ZnSWR9IHN2Z2ApKVswXSk7IC8vIGNvbXBsaWNhdGVkIGpRdWVyeSB0byBnZXQgdG8gdGhlIFNWRyBvYmplY3RcbiAgICAgICAgbGV0IHN2Z09iaiA9ICQoJCgkKGAke1wiI1wiICtzdmdJZH1gKSlbMF0pO1xuICAgICAgICBsZXQgJHN2Z0NvcHkgPSBzdmdPYmouY2xvbmUoKVxuICAgICAgICAuYXR0cihcInZlcnNpb25cIiwgXCIxLjFcIilcbiAgICAgICAgLmF0dHIoXCJ4bWxuc1wiLCBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIpO1xuXG4gICAgICAgIC8vIHBhcnNlIGFuZCBhZGQgYWxsIHRoZSBDU1Mgc3R5bGluZyB1c2VkIGJ5IHRoZSBTVkdcbiAgICAgICAgbGV0IHN0eWxlcyA9IHBhcnNlQ3NzU3R5bGVzKHN2Z09iai5nZXQoKSk7XG4gICAgICAgICRzdmdDb3B5LnByZXBlbmQoc3R5bGVzKTtcblxuICAgICAgICAkKFwiI1wiICsgY2xvbmVJZCkuaHRtbCgnJykuaGlkZSgpOyAvLyBtYWtlIHN1cmUgdGhlIGNvcHlJRCBpcyBpbnZpc2libGVcbiAgICAgICAgbGV0IHN2Z0h0bWwgPSAkKGAjJHtjbG9uZUlkfWApLmFwcGVuZCgkc3ZnQ29weSkuaHRtbCgpO1xuXG4gICAgICAgIGxldCBzdmdCbG9iID0gbmV3IEJsb2IoW3N2Z0h0bWxdLCB7dHlwZTogXCJpbWFnZS9zdmcreG1sXCJ9KTtcbiAgICAgICAgc2F2ZUFzKHN2Z0Jsb2IsIGZpbGVOYW1lKTsgLy8gdGhpcyBpcyBhIEZpbGVTYXZlciBmdW5jdGlvbi4uLi5cblxuICAgICAgICAvLyBjbGVhciB0aGUgdGVtcCBkb3dubG9hZCBkaXZcbiAgICAgICAgJChgIyR7Y2xvbmVJZH1gKS5odG1sKCcnKS5oaWRlKCk7XG4gICAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IMKpIDIwMTUgLSAyMDE4IFRoZSBCcm9hZCBJbnN0aXR1dGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSAoaHR0cHM6Ly9naXRodWIuY29tL2Jyb2FkaW5zdGl0dXRlL2d0ZXgtdml6L2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQpXG4gKi9cbmltcG9ydCB7c2VsZWN0LCBldmVudH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb29sdGlwIHtcbiAgICBjb25zdHJ1Y3RvcihpZCwgdmVyYm9zZT1mYWxzZSwgb2Zmc2V0WD0zMCwgb2Zmc2V0WT0tNDAsIGR1cmF0aW9uPTEwMCl7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgdGhpcy52ZXJib3NlID0gdmVyYm9zZTtcbiAgICAgICAgdGhpcy5vZmZzZXRYID0gb2Zmc2V0WDtcbiAgICAgICAgdGhpcy5vZmZzZXRZID0gb2Zmc2V0WTtcbiAgICAgICAgdGhpcy5kdXJhdGlvbiA9IGR1cmF0aW9uO1xuICAgIH1cblxuICAgIHNob3coaW5mbykge1xuICAgICAgICBpZih0aGlzLnZlcmJvc2UpIGNvbnNvbGUubG9nKGluZm8pO1xuICAgICAgICB0aGlzLmVkaXQoaW5mbyk7XG4gICAgICAgIHRoaXMubW92ZSgpO1xuICAgICAgICBzZWxlY3QoXCIjXCIgKyB0aGlzLmlkKVxuICAgICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBcImlubGluZVwiKVxuICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLmR1cmF0aW9uKHRoaXMuZHVyYXRpb24pXG4gICAgICAgICAgICAuc3R5bGUoXCJvcGFjaXR5XCIsIDEuMClcblxuICAgIH1cblxuICAgIGhpZGUoKSB7XG4gICAgICAgIHNlbGVjdChcIiNcIiArIHRoaXMuaWQpXG4gICAgICAgICAgICAudHJhbnNpdGlvbigpXG4gICAgICAgICAgICAuZHVyYXRpb24odGhpcy5kdXJhdGlvbilcbiAgICAgICAgICAgIC5zdHlsZShcIm9wYWNpdHlcIiwgMC4wKTtcbiAgICAgICAgdGhpcy5lZGl0KFwiXCIpO1xuICAgIH1cblxuICAgIG1vdmUoeCA9IGV2ZW50LnBhZ2VYLCB5ID0gZXZlbnQucGFnZVkpIHtcbiAgICAgICAgaWYgKHRoaXMudmVyYm9zZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coeCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh5KTtcbiAgICAgICAgfVxuICAgICAgICB4ID0geCArIHRoaXMub2Zmc2V0WDsgLy8gVE9ETzogZ2V0IHJpZCBvZiB0aGUgaGFyZC1jb2RlZCBhZGp1c3RtZW50XG4gICAgICAgIHkgPSAoeSArIHRoaXMub2Zmc2V0WSk8MD8xMDp5K3RoaXMub2Zmc2V0WTtcbiAgICAgICAgY29uc3QgdCA9IHNlbGVjdCgnIycrdGhpcy5pZClcbiAgICAgICAgICAgIC5zdHlsZShcImxlZnRcIiwgYCR7eH1weGApXG4gICAgICAgICAgICAuc3R5bGUoXCJ0b3BcIiwgYCR7eX1weGApXG4gICAgfVxuXG4gICAgZWRpdChpbmZvKSB7XG4gICAgICAgIHNlbGVjdChcIiNcIiArIHRoaXMuaWQpXG4gICAgICAgICAgICAuaHRtbChpbmZvKVxuICAgIH1cbn1cblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuaW1wb3J0IHtzZWxlY3QsIHNlbGVjdEFsbH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtzY2FsZUJhbmR9IGZyb20gXCJkMy1zY2FsZVwiO1xuaW1wb3J0IHtuZXN0fSBmcm9tIFwiZDMtY29sbGVjdGlvblwiO1xuaW1wb3J0IHt0cmFuc2l0aW9ufSBmcm9tIFwiZDMtdHJhbnNpdGlvblwiO1xuXG5pbXBvcnQge3NldENvbG9yU2NhbGUsIGRyYXdDb2xvckxlZ2VuZH0gZnJvbSBcIi4vY29sb3JzXCI7XG5pbXBvcnQgVG9vbGJhciBmcm9tIFwiLi9Ub29sYmFyXCI7XG5pbXBvcnQgVG9vbHRpcCBmcm9tIFwiLi9Ub29sdGlwXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhlYXRtYXAge1xuICAgIC8qKlxuICAgICAqIGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIGRhdGEge0xpc3R9LCBhIGxpc3Qgb2Ygb2JqZWN0cyB3aXRoIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczogeDogdGhlIHggbGFiZWwsIHk6IHRoZSB5IGxhYmVsXG4gICAgICAgIHZhbHVlOiB0aGUgcmVuZGVyZWQgbnVtZXJpY2FsIHZhbHVlICh0cmFuc2Zvcm1lZClcbiAgICAgICAgZGlzcGxheVZhbHVlOiBkaXNwbGF5IG51bWVyaWNhbCB2YWx1ZVxuICAgICAqIEBwYXJhbSB1c2VMb2cge0Jvb2xlYW59IHBlcmZvcm1zIGxvZyB0cmFuc2Zvcm1hdGlvblxuICAgICAqIEBwYXJhbSBjb2xvclNjaGVtZSB7U3RyaW5nfTogcmVjb2duaXplZCB0ZXJtcyBpbiBDb2xvcnM6Z2V0Q29sb3JJbnRlcnBvbGF0b3JcbiAgICAgKiBAcGFyYW0gciB7SW50ZWdlcn06IGNlbGwgY29ybmVyIHJhZGl1c1xuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGRhdGEsIHVzZUxvZz10cnVlLCBsb2dCYXNlPTEwLCBjb2xvclNjaGVtZT1cIllsR25CdVwiLCByPTIsIHRvb2x0aXBJZD1cImhlYXRtYXBUb29sdGlwXCIpe1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLnVzZUxvZyA9IHVzZUxvZztcbiAgICAgICAgdGhpcy5sb2dCYXNlID0gbG9nQmFzZTtcbiAgICAgICAgdGhpcy5udWxsQ29sb3IgPSBcIiNlNmU2ZTZcIjtcbiAgICAgICAgdGhpcy5jb2xvclNjYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnhMaXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnlMaXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnhTY2FsZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy55U2NhbGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuciA9IHI7XG4gICAgICAgIHRoaXMuY29sb3JTY2hlbWUgPSBjb2xvclNjaGVtZTtcblxuICAgICAgICAvLyBwZXJpcGhlcmFsIGZlYXR1cmVzXG4gICAgICAgIC8vLyBUb29sdGlwXG4gICAgICAgIC8vLyBjcmVhdGUgdGhlIHRvb2x0aXAgRElWXG4gICAgICAgIGlmICgkKGAjJHt0b29sdGlwSWR9YCkubGVuZ3RoID09IDApICQoJzxkaXYvPicpLmF0dHIoJ2lkJywgdG9vbHRpcElkKS5hcHBlbmRUbygkKCdib2R5JykpO1xuICAgICAgICB0aGlzLnRvb2x0aXAgPSBuZXcgVG9vbHRpcCh0b29sdGlwSWQpO1xuICAgICAgICBzZWxlY3QoYCMke3Rvb2x0aXBJZH1gKS5jbGFzc2VkKCdoZWF0bWFwLXRvb2x0aXAnLCB0cnVlKTtcblxuICAgICAgICB0aGlzLnRvb2xiYXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIHRoZSB0b29sYmFyIHBhbmVsXG4gICAgICogQHBhcmFtIGRvbUlkIHtTdHJpbmd9IHRoZSB0b29sYmFyJ3MgZG9tIElEXG4gICAgICogQHBhcmFtIHRvb2x0aXAge1Rvb2x0aXB9XG4gICAgICogQHJldHVybnMge1Rvb2xiYXJ9XG4gICAgICovXG5cbiAgICBjcmVhdGVUb29sYmFyKGRvbUlkLCB0b29sdGlwKXtcbiAgICAgICAgdGhpcy50b29sYmFyID0gbmV3IFRvb2xiYXIoZG9tSWQsIHRvb2x0aXApO1xuICAgICAgICByZXR1cm4gdGhpcy50b29sYmFyO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogZHJhdyBjb2xvciBsZWdlbmQgZm9yIHRoZSBoZWF0IG1hcFxuICAgICAqIEBwYXJhbSBkb20ge1NlbGVjdGlvbn0gYSBkMyBzZWxlY3Rpb24gb2JqZWN0XG4gICAgICogQHBhcmFtIGxlZ2VuZENvbmZpZyB7T2JqZWN0fSB3aXRoIGF0dHI6IHgsIHlcbiAgICAgKi9cblxuICAgIGRyYXdDb2xvckxlZ2VuZChkb20sIGxlZ2VuZENvbmZpZz17eDowLCB5OjB9LCB0aWNrcz01KXtcbiAgICAgICAgZHJhd0NvbG9yTGVnZW5kKHRoaXMuZGF0YVswXS51bml0fHxcIlZhbHVlXCIsIGRvbSwgdGhpcy5jb2xvclNjYWxlLCBsZWdlbmRDb25maWcsIHRoaXMudXNlTG9nLCB0aWNrcywgdGhpcy5sb2dCYXNlKTtcbiAgICB9XG5cbiAgICAgLyoqXG4gICAgICogcmVkcmF3cyB0aGUgaGVhdG1hcDogd2hlbiB0aGUgeGxpc3QgYW5kIHlsaXN0IGFyZSBjaGFuZ2VkLCByZWRyYXcgdGhlIGhlYXRtYXBcbiAgICAgKiBAcGFyYW0gZG9tIHtTZWxlY3Rpb259IGEgZDMgc2VsZWN0aW9uIG9iamVjdFxuICAgICAqIEBwYXJhbSB4TGlzdCB7TGlzdH0gYSBsaXN0IG9mIHggbGFiZWxzXG4gICAgICogQHBhcmFtIHlMaXN0IHtMaXN0fSBhIGxpc3Qgb2YgeSBsYWJlbHNcbiAgICAgKiBAcGFyYW0gZGltZW5zaW9ucyB7RGljdGlvbmFyeX0ge3c6SW50ZWdlciwgaDppbnRlZ2VyfSB3aXRoIHR3byBhdHRyaWJ1dGVzOiB3IGFuZCBoXG4gICAgICogQHBhcmFtIGFuZ2xlIHtJbnRlZ2VyfSBmb3IgdGhlIHkgdGV4dCBsYWJlbHNcbiAgICAgKi9cbiAgICByZWRyYXcoZG9tLCB4TGlzdCwgeUxpc3QsIGRpbWVuc2lvbnM9e3c6MTAwMCwgaDoxMDAwfSwgYW5nbGU9MzApe1xuICAgICAgICB0aGlzLl9zZXRYTGlzdChkaW1lbnNpb25zLncsIHhMaXN0KTtcbiAgICAgICAgdGhpcy5fc2V0WUxpc3QoZGltZW5zaW9ucy5oLCB5TGlzdCk7XG4gICAgICAgIHRoaXMuZHJhdyhkb20sIGRpbWVuc2lvbnMsIGFuZ2xlKTtcbiAgICB9XG5cbiAgICBsb2codil7XG4gICAgICAgIGNvbnN0IGFkanVzdCA9IDE7XG4gICAgICAgIHJldHVybiB0aGlzLmxvZ0Jhc2UgPT0gMj8gTWF0aC5sb2cyKE51bWJlcih2K2FkanVzdCkpOk1hdGgubG9nMTAoTnVtYmVyKHYrYWRqdXN0KSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkcmF3cyB0aGUgaGVhdG1hcFxuICAgICAqIEBwYXJhbSBkb20ge1NlbGVjdGlvbn1cbiAgICAgKiBAcGFyYW0gZGltZW5zaW9ucyB7RGljdGlvbmFyeX0ge3c6SW50ZWdlciwgaDppbnRlZ2VyfSBvZiB0aGUgaGVhdG1hcFxuICAgICAqIEBwYXJhbSBhbmdsZSB7SW50ZWdlcn0gZm9yIHRoZSB5IHRleHQgbGFiZWxzXG4gICAgICogQHBhcmFtIHVzZU51bGxDb2xvciB7Qm9vbGVhbn0gd2hldGhlciB0byByZW5kZXIgbnVsbCB2YWx1ZXMgd2l0aCB0aGUgcHJlLWRlZmluZWQgbnVsbCBjb2xvclxuICAgICAqL1xuXG4gICAgZHJhdyhkb20sIGRpbWVuc2lvbnM9e3c6MTAwMCwgaDo2MDB9LCBhbmdsZT0zMCwgdXNlTnVsbENvbG9yPXRydWUsIGNvbHVtbkxhYmVsUG9zQWRqdXN0PW51bGwpe1xuXG4gICAgICAgIGlmICh0aGlzLnhMaXN0ID09PSB1bmRlZmluZWQpIHRoaXMuX3NldFhMaXN0KGRpbWVuc2lvbnMudyk7XG4gICAgICAgIGlmICh0aGlzLnlMaXN0ID09PSB1bmRlZmluZWQpIHRoaXMuX3NldFlMaXN0KGRpbWVuc2lvbnMuaCk7XG4gICAgICAgIGlmICh0aGlzLmNvbG9yU2NhbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGV0IHVzZUxvZyA9IHRoaXMudXNlTG9nO1xuICAgICAgICAgICAgbGV0IGRhdGEgPSB0aGlzLmRhdGEubWFwKChkKT0+dXNlTG9nP3RoaXMubG9nKGQudmFsdWUpOmQudmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5jb2xvclNjYWxlID0gc2V0Q29sb3JTY2FsZShkYXRhLCB0aGlzLmNvbG9yU2NoZW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRleHQgbGFiZWxzXG4gICAgICAgIC8vIGRhdGEgam9pblxuICAgICAgICBjb25zdCB4TGFiZWxzID0gZG9tLnNlbGVjdEFsbChcIi5leHAtbWFwLXhsYWJlbFwiKVxuICAgICAgICAgICAgLmRhdGEodGhpcy54TGlzdCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIG9sZCBlbGVtZW50c1xuICAgICAgICBjb25zdCBZID0gY29sdW1uTGFiZWxQb3NBZGp1c3Q9PW51bGw/dGhpcy55U2NhbGUucmFuZ2UoKVsxXSArICh0aGlzLnlTY2FsZS5iYW5kd2lkdGgoKSAqIDIpOnRoaXMueVNjYWxlLnJhbmdlKClbMV0rY29sdW1uTGFiZWxQb3NBZGp1c3Q7XG4gICAgICAgIGNvbnN0IGFkanVzdCA9IDU7XG4gICAgICAgIHhMYWJlbHMuYXR0cihcInRyYW5zZm9ybVwiLCAoZCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCB4ID0gdGhpcy54U2NhbGUoZCkgKyBhZGp1c3Q7XG4gICAgICAgICAgICAgICAgbGV0IHkgPSBZO1xuICAgICAgICAgICAgICAgIHJldHVybiBgdHJhbnNsYXRlKCR7eH0sICR7eX0pIHJvdGF0ZSgke2FuZ2xlfSlgO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyAuYXR0cihcImNsYXNzXCIsIChkLCBpKSA9PiBgZXhwLW1hcC14bGFiZWwgeCR7aX1gKTtcblxuXG4gICAgICAgIC8vIGVudGVycyBuZXcgZWxlbWVudHNcbiAgICAgICAgeExhYmVscy5lbnRlcigpLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgKGQsIGkpID0+IGBleHAtbWFwLXhsYWJlbCB4JHtpfWApXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgMClcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAwKVxuICAgICAgICAgICAgLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJzdGFydFwiKVxuICAgICAgICAgICAgLnN0eWxlKFwiY3Vyc29yXCIsIFwiZGVmYXVsdFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgKGQpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgeCA9IHRoaXMueFNjYWxlKGQpICsgYWRqdXN0O1xuICAgICAgICAgICAgICAgIGxldCB5ID0gWTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYHRyYW5zbGF0ZSgke3h9LCAke3l9KSByb3RhdGUoJHthbmdsZX0pYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAubWVyZ2UoeExhYmVscylcbiAgICAgICAgICAgIC50ZXh0KChkKSA9PiBkKTtcblxuICAgICAgICAvLyBleGl0IC0tIHJlbW92ZXMgb2xkIGVsZW1lbnRzIGFzIG5lZWRlZFxuICAgICAgICB4TGFiZWxzLmV4aXQoKS5yZW1vdmUoKTtcblxuICAgICAgICBjb25zdCB5TGFiZWxzID0gZG9tLnNlbGVjdEFsbChcIi5leHAtbWFwLXlsYWJlbFwiKVxuICAgICAgICAgICAgLmRhdGEodGhpcy55TGlzdClcbiAgICAgICAgICAgIC5lbnRlcigpLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC50ZXh0KChkKSA9PiBkKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIHRoaXMueFNjYWxlLnJhbmdlKClbMV0gKyA1KVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIChkKSA9PiB0aGlzLnlTY2FsZShkKSArIDEwKVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCAoZCwgaSkgPT4gYGV4cC1tYXAteWxhYmVsIHkke2l9YClcbiAgICAgICAgICAgIC5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwic3RhcnRcIilcbiAgICAgICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIilcbiAgICAgICAgICAgIC5vbignY2xpY2snLCAoZCkgPT4ge1xuICAgICAgICAgICAgICAgIGFsZXJ0KGAke2R9IGlzIGNsaWNrZWQuIFRvIGJlIGltcGxlbWVudGVkYClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAub24oJ21vdXNlb3ZlcicsIGZ1bmN0aW9uKGQpe1xuICAgICAgICAgICAgICAgIHNlbGVjdCh0aGlzKVxuICAgICAgICAgICAgICAgICAgICAuY2xhc3NlZCgnbm9ybWFsJywgZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5jbGFzc2VkKCdoaWdobGlnaHRlZCcsIHRydWUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5vbignbW91c2VvdXQnLCBmdW5jdGlvbihkKXtcbiAgICAgICAgICAgICAgICBzZWxlY3QodGhpcylcbiAgICAgICAgICAgICAgICAgICAgLmNsYXNzZWQoJ25vcm1hbCcsIHRydWUpXG4gICAgICAgICAgICAgICAgICAgIC5jbGFzc2VkKCdoaWdobGlnaHRlZCcsIGZhbHNlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHJlbmRlcnMgdGhlIGhlYXRtYXAgY2VsbHNcblxuICAgICAgICAvLyBkYXRhIGpvaW5cbiAgICAgICAgY29uc3QgY2VsbHMgPSBkb20uc2VsZWN0QWxsKFwiLmV4cC1tYXAtY2VsbFwiKVxuICAgICAgICAgICAgLmRhdGEodGhpcy5kYXRhLCAoZCkgPT4gZC52YWx1ZSk7XG5cbiAgICAgICAgLy8gdXBkYXRlIG9sZCBlbGVtZW50c1xuICAgICAgICBjZWxscy5hdHRyKFwieFwiLCAoZCkgPT4gdGhpcy54U2NhbGUoZC54KSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAoZCkgPT4gdGhpcy55U2NhbGUoZC55KSlcbiAgICAgICAgICAgIC5hdHRyKFwicm93XCIsIChkKSA9PiBgeCR7dGhpcy54TGlzdC5pbmRleE9mKGQueCl9YClcbiAgICAgICAgICAgIC5hdHRyKFwiY29sXCIsIChkKSA9PiBgeSR7dGhpcy55TGlzdC5pbmRleE9mKGQueSl9YCk7XG5cbiAgICAgICAgLy8gZW50ZXIgbmV3IGVsZW1lbnRzXG4gICAgICAgIGNvbnN0IG51bGxDb2xvciA9IFwiI0RERERERFwiO1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY2VsbHMuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgICAgICAuYXR0cihcInJvd1wiLCAoZCkgPT4gYHgke3RoaXMueExpc3QuaW5kZXhPZihkLngpfWApXG4gICAgICAgICAgICAuYXR0cihcImNvbFwiLCAoZCkgPT4gYHkke3RoaXMueUxpc3QuaW5kZXhPZihkLnkpfWApXG5cbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCAoZCkgPT4gdGhpcy54U2NhbGUoZC54KSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAoZCkgPT4gdGhpcy55U2NhbGUoZC55KSlcbiAgICAgICAgICAgIC5hdHRyKFwicnhcIiwgdGhpcy5yKVxuICAgICAgICAgICAgLmF0dHIoJ3J5JywgdGhpcy5yKVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCAoZCkgPT4gYGV4cC1tYXAtY2VsbGApXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMueFNjYWxlLmJhbmR3aWR0aCgpKVxuICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy55U2NhbGUuYmFuZHdpZHRoKCkpXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIChkKSA9PiBcIiNlZWVlZWVcIilcbiAgICAgICAgICAgIC5vbihcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbihkKXtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdCh0aGlzKTsgLy8gTm90ZTogXCJ0aGlzXCIgaGVyZSByZWZlcnMgdG8gdGhlIGRvbSBlbGVtZW50IG5vdCB0aGUgb2JqZWN0XG4gICAgICAgICAgICAgICAgc2VsZi5jZWxsTW91c2VvdmVyKGQsIGRvbSwgc2VsZWN0ZWQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5vbihcIm1vdXNlb3V0XCIsIGZ1bmN0aW9uKGQpe1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0KHRoaXMpOyAvLyBOb3RlOiBcInRoaXNcIiBoZXJlIHJlZmVycyB0byB0aGUgZG9tIGVsZW1lbnQgbm90IHRoZSBvYmplY3RcbiAgICAgICAgICAgICAgICBzZWxmLmNlbGxNb3VzZW91dCgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1lcmdlKGNlbGxzKVxuICAgICAgICAgICAgLy8gLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLy8gLmR1cmF0aW9uKDIwMDApXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIChkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVzZU51bGxDb2xvciYmZC52YWx1ZT09MD9udWxsQ29sb3I6dGhpcy51c2VMb2c/dGhpcy5jb2xvclNjYWxlKHRoaXMubG9nKGQudmFsdWUpKTp0aGlzLmNvbG9yU2NhbGUoZC52YWx1ZSlcbiAgICAgICAgICAgIH0pOyAvLyBUT0RPOiB3aGF0IGlmIG51bGwgdmFsdWUgaXNuJ3QgMD9cblxuICAgICAgICAvLyBleGl0IGFuZCByZW1vdmVcbiAgICAgICAgY2VsbHMuZXhpdCgpLnJlbW92ZSgpO1xuICAgIH1cblxuXG4gICAgY2VsbE1vdXNlb3V0KGQpe1xuICAgICAgICBzZWxlY3RBbGwoXCIqXCIpLmNsYXNzZWQoJ2hpZ2hsaWdodGVkJywgZmFsc2UpO1xuICAgICAgICB0aGlzLnRvb2x0aXAuaGlkZSgpO1xuICAgIH1cblxuICAgIGNlbGxNb3VzZW92ZXIgKGQsIGRvbSwgc2VsZWN0ZWQpIHtcbiAgICAgICAgY29uc3Qgcm93Q2xhc3MgPSBzZWxlY3RlZC5hdHRyKFwicm93XCIpO1xuICAgICAgICBjb25zdCBjb2xDbGFzcyA9IHNlbGVjdGVkLmF0dHIoXCJjb2xcIik7XG4gICAgICAgIGRvbS5zZWxlY3RBbGwoXCIuZXhwLW1hcC14bGFiZWxcIikuZmlsdGVyKGAuJHtyb3dDbGFzc31gKVxuICAgICAgICAgICAgLmNsYXNzZWQoJ2hpZ2hsaWdodGVkJywgdHJ1ZSk7XG4gICAgICAgIGRvbS5zZWxlY3RBbGwoXCIuZXhwLW1hcC15bGFiZWxcIikuZmlsdGVyKGAuJHtjb2xDbGFzc31gKVxuICAgICAgICAgICAgLmNsYXNzZWQoJ2hpZ2hsaWdodGVkJywgdHJ1ZSk7XG4gICAgICAgIHNlbGVjdGVkLmNsYXNzZWQoJ2hpZ2hsaWdodGVkJywgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlWYWx1ZSA9IGQuZGlzcGxheVZhbHVlID09PSB1bmRlZmluZWQ/cGFyc2VGbG9hdChkLnZhbHVlLnRvRXhwb25lbnRpYWwoKSkudG9QcmVjaXNpb24oNCk6ZC5kaXNwbGF5VmFsdWU7XG4gICAgICAgIHRoaXMudG9vbHRpcC5zaG93KGBDb2x1bW46ICR7ZC54fSA8YnIvPiBSb3c6ICR7ZC55fTxici8+IFZhbHVlOiAke2Rpc3BsYXlWYWx1ZX1gKTtcbiAgICB9XG5cbiAgICBfc2V0WExpc3Qod2lkdGgsIG5ld0xpc3QpIHtcbiAgICAgICAgaWYobmV3TGlzdCAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIHRoaXMueExpc3QgPSBuZXdMaXN0XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnhMaXN0ID0gbmVzdCgpXG4gICAgICAgICAgICAgICAgLmtleSgoZCkgPT4gZC54KVxuICAgICAgICAgICAgICAgIC5lbnRyaWVzKHRoaXMuZGF0YSlcbiAgICAgICAgICAgICAgICAubWFwKChkKSA9PiBkLmtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy54U2NhbGUgPSBzY2FsZUJhbmQoKVxuICAgICAgICAgICAgLmRvbWFpbih0aGlzLnhMaXN0KVxuICAgICAgICAgICAgLnJhbmdlKFswLCB3aWR0aF0pXG4gICAgICAgICAgICAucGFkZGluZyguMDUpOyAvLyBUT0RPOiBlbGltaW5hdGUgaGFyZC1jb2RlZCB2YWx1ZVxuICAgIH1cblxuICAgIF9zZXRZTGlzdChoZWlnaHQsIG5ld0xpc3QpIHtcbiAgICAgICAgaWYobmV3TGlzdCAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIHRoaXMueUxpc3QgPSBuZXdMaXN0XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgIHRoaXMueUxpc3QgPSBuZXN0KClcbiAgICAgICAgICAgIC5rZXkoKGQpID0+IGQueSlcbiAgICAgICAgICAgIC5lbnRyaWVzKHRoaXMuZGF0YSlcbiAgICAgICAgICAgIC5tYXAoKGQpID0+IGQua2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnlTY2FsZSA9IHNjYWxlQmFuZCgpXG4gICAgICAgICAgICAgICAgLmRvbWFpbih0aGlzLnlMaXN0KVxuICAgICAgICAgICAgICAgIC5yYW5nZShbMCwgaGVpZ2h0XSlcbiAgICAgICAgICAgICAgICAucGFkZGluZyguMDUpOyAvLyBUT0RPOiBlbGltaW5hdGUgaGFyZC1jb2RlZCB2YWx1ZVxuICAgIH1cblxuXG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuLyoqXG4gKiBUT0RPOiBjb2RlIHJldmlldyBvZiBob3cgdG8gcHJlc2V0IHBhcmFtZXRlciB2YWx1ZXNcbiAqIHJldmlldyBhbGwgdGhlIHBvc2l0aW9uIGNhbGN1bGF0aW9uc1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZW5kcm9IZWF0bWFwQ29uZmlnIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcm9vdFcge051bWJlcn0sIHRoaXMgd2lkdGggaW5jbHVkZXMgbWFyZ2luIGxlZnQgYW5kIHJpZ2h0LCByb3dUcmVlUGFuZWwgd2lkdGggYW5kIGhlYXRtYXAgd2lkdGguXG4gICAgICogQHBhcmFtIGxlZnRQYW5lbFcge0ludGVnZXJ9LCBzZXQgdG8gMCBpZiB0aGVyZSdzIG5vIGxlZnQgcGFuZWxcbiAgICAgKiBAcGFyYW0gdG9wUGFuZWxIIHtJbnRlZ2VyfSwgc2V0IHRvIDAgaWYgdGhlcmUncyBubyB0b3AgcGFuZWxcbiAgICAgKiBAcGFyYW0gbWFyZ2luIHtPYmplY3R9IHdpdGggYXR0cjogdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBzbWFsbGVyIHZhbHVlcyB0aGFuIHRoZSBkZWZhdWx0IGFyZSBub3QgcmVjb21tZW5kZWQgZm9yIHRoZSBoZWF0bWFwLCB0b3AgbWFyZ2luIHNob3VsZCBiZSBhdCBsZWFzdCA1MFxuICAgICAqIEBwYXJhbSBjZWxsSCB7SW50ZWdlcn1cbiAgICAgKiBAcGFyYW0gYWRqdXN0IHtJbnRlZ2VyfSwgYWRqdXN0ZWQgc3BhY2luZyBiZXR3ZWVuIHRoZSBoZWF0bWFwIGFuZCB0aGUgZGVuZHJvZ3JhbVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHJvb3RXPXdpbmRvdy5pbm5lcldpZHRoLCBsZWZ0UGFuZWxXPTEwMCwgdG9wUGFuZWxIPTEwMCwgbWFyZ2luPXt0b3A6NTAsIHJpZ2h0OjI1MCwgYm90dG9tOjE3MCwgbGVmdDoxMH0sIGNlbGxIPTEyLCBhZGp1c3Q9MTApIHtcbiAgICAgICAgdGhpcy5tYXJnaW4gPSBtYXJnaW47XG4gICAgICAgIHRoaXMucm9vdFcgPSByb290VztcblxuICAgICAgICB0aGlzLmxlZnRUcmVlUGFuZWwgPSB7IC8vIHRoZSByb3cgZGVuZHJvZ3JhbSBwYW5lbFxuICAgICAgICAgICAgeDogbWFyZ2luLmxlZnQsXG4gICAgICAgICAgICB5OiBtYXJnaW4udG9wICsgdG9wUGFuZWxILFxuICAgICAgICAgICAgaDogdW5kZWZpbmVkLCAvLyB1bmRlZmluZWQgaW5pdGlhbGx5LCBiZWNhdXNlIGl0J3MgZGF0YS1kZXBlbmRlbnRcbiAgICAgICAgICAgIHc6IGxlZnRQYW5lbFcgLSBhZGp1c3QsXG4gICAgICAgICAgICBpZDogXCJsZWZ0VHJlZVwiXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jZWxsID0ge1xuICAgICAgICAgICAgdzogdW5kZWZpbmVkLCAvLyB0byBiZSBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBkYXRhIGFuZCByb290V1xuICAgICAgICAgICAgaDogY2VsbEhcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnRvcFRyZWVQYW5lbCA9IHsgLy8gdGhlIGNvbHVtbiBkZW5kcm9ncmFtIHBhbmVsXG4gICAgICAgICAgICB4OiBtYXJnaW4ubGVmdCArIGxlZnRQYW5lbFcsXG4gICAgICAgICAgICB5OiBtYXJnaW4udG9wLFxuICAgICAgICAgICAgaDogdG9wUGFuZWxIIC0gYWRqdXN0LFxuICAgICAgICAgICAgdzogdGhpcy5yb290VyAtIChtYXJnaW4ubGVmdCArIGxlZnRQYW5lbFcgKyBtYXJnaW4ucmlnaHQpLCAvLyBoYXJkLWNvZGVkIHZhbHVlcz9cbiAgICAgICAgICAgIGlkOiBcInRvcFRyZWVcIlxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGVhdG1hcFBhbmVsID0ge1xuICAgICAgICAgICAgeDogbWFyZ2luLmxlZnQgKyBsZWZ0UGFuZWxXLFxuICAgICAgICAgICAgeTogbWFyZ2luLnRvcCArIHRvcFBhbmVsSCxcbiAgICAgICAgICAgIGg6IHRoaXMubGVmdFRyZWVQYW5lbC5oLFxuICAgICAgICAgICAgdzogdGhpcy50b3BUcmVlUGFuZWwudyxcbiAgICAgICAgICAgIGlkOiBcImhlYXRtYXBcIlxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMubGVnZW5kUGFuZWwgPSB7IC8vIHRoZSBjb2xvciBsZWdlbmQgcGFuZWxcbiAgICAgICAgICAgIHg6IG1hcmdpbi5sZWZ0ICsgbGVmdFBhbmVsVyxcbiAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICBoOiBtYXJnaW4udG9wLzIsXG4gICAgICAgICAgICB3OiB0aGlzLnRvcFRyZWVQYW5lbC53LFxuICAgICAgICAgICAgY2VsbDoge3c6IDYwfSxcbiAgICAgICAgICAgIGlkOiBcImxlZ2VuZFwiXG4gICAgICAgIH07XG5cblxuICAgIH1cblxuICAgIGdldCgpe1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWFyZ2luOiB0aGlzLm1hcmdpbixcbiAgICAgICAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgICAgICAgIHc6IHRoaXMucm9vdFcsXG4gICAgICAgICAgICBoOiB0aGlzLm1hcmdpbi50b3AgKyB0aGlzLnRvcFRyZWVQYW5lbC5oICsgdGhpcy5sZWdlbmRQYW5lbC5oICsgdGhpcy5tYXJnaW4uYm90dG9tLCAvLyBpbml0aWFsIGhlaWdodFxuICAgICAgICAgICAgcGFuZWxzOiB7XG4gICAgICAgICAgICAgICAgdG9wOiB0aGlzLnRvcFRyZWVQYW5lbCxcbiAgICAgICAgICAgICAgICBsZWZ0OiB0aGlzLmxlZnRUcmVlUGFuZWwsXG4gICAgICAgICAgICAgICAgbWFpbjogdGhpcy5oZWF0bWFwUGFuZWwsXG4gICAgICAgICAgICAgICAgbGVnZW5kOiB0aGlzLmxlZ2VuZFBhbmVsXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuXG4iLCJmdW5jdGlvbiBjb3VudChub2RlKSB7XG4gIHZhciBzdW0gPSAwLFxuICAgICAgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLFxuICAgICAgaSA9IGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aDtcbiAgaWYgKCFpKSBzdW0gPSAxO1xuICBlbHNlIHdoaWxlICgtLWkgPj0gMCkgc3VtICs9IGNoaWxkcmVuW2ldLnZhbHVlO1xuICBub2RlLnZhbHVlID0gc3VtO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaEFmdGVyKGNvdW50KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHZhciBub2RlID0gdGhpcywgY3VycmVudCwgbmV4dCA9IFtub2RlXSwgY2hpbGRyZW4sIGksIG47XG4gIGRvIHtcbiAgICBjdXJyZW50ID0gbmV4dC5yZXZlcnNlKCksIG5leHQgPSBbXTtcbiAgICB3aGlsZSAobm9kZSA9IGN1cnJlbnQucG9wKCkpIHtcbiAgICAgIGNhbGxiYWNrKG5vZGUpLCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47XG4gICAgICBpZiAoY2hpbGRyZW4pIGZvciAoaSA9IDAsIG4gPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgbmV4dC5wdXNoKGNoaWxkcmVuW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gd2hpbGUgKG5leHQubGVuZ3RoKTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaykge1xuICB2YXIgbm9kZSA9IHRoaXMsIG5vZGVzID0gW25vZGVdLCBjaGlsZHJlbiwgaTtcbiAgd2hpbGUgKG5vZGUgPSBub2Rlcy5wb3AoKSkge1xuICAgIGNhbGxiYWNrKG5vZGUpLCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47XG4gICAgaWYgKGNoaWxkcmVuKSBmb3IgKGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgbm9kZXMucHVzaChjaGlsZHJlbltpXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyIG5vZGUgPSB0aGlzLCBub2RlcyA9IFtub2RlXSwgbmV4dCA9IFtdLCBjaGlsZHJlbiwgaSwgbjtcbiAgd2hpbGUgKG5vZGUgPSBub2Rlcy5wb3AoKSkge1xuICAgIG5leHQucHVzaChub2RlKSwgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuICAgIGlmIChjaGlsZHJlbikgZm9yIChpID0gMCwgbiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgbm9kZXMucHVzaChjaGlsZHJlbltpXSk7XG4gICAgfVxuICB9XG4gIHdoaWxlIChub2RlID0gbmV4dC5wb3AoKSkge1xuICAgIGNhbGxiYWNrKG5vZGUpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaEFmdGVyKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICB2YXIgc3VtID0gK3ZhbHVlKG5vZGUuZGF0YSkgfHwgMCxcbiAgICAgICAgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLFxuICAgICAgICBpID0gY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoO1xuICAgIHdoaWxlICgtLWkgPj0gMCkgc3VtICs9IGNoaWxkcmVuW2ldLnZhbHVlO1xuICAgIG5vZGUudmFsdWUgPSBzdW07XG4gIH0pO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29tcGFyZSkge1xuICByZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgbm9kZS5jaGlsZHJlbi5zb3J0KGNvbXBhcmUpO1xuICAgIH1cbiAgfSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihlbmQpIHtcbiAgdmFyIHN0YXJ0ID0gdGhpcyxcbiAgICAgIGFuY2VzdG9yID0gbGVhc3RDb21tb25BbmNlc3RvcihzdGFydCwgZW5kKSxcbiAgICAgIG5vZGVzID0gW3N0YXJ0XTtcbiAgd2hpbGUgKHN0YXJ0ICE9PSBhbmNlc3Rvcikge1xuICAgIHN0YXJ0ID0gc3RhcnQucGFyZW50O1xuICAgIG5vZGVzLnB1c2goc3RhcnQpO1xuICB9XG4gIHZhciBrID0gbm9kZXMubGVuZ3RoO1xuICB3aGlsZSAoZW5kICE9PSBhbmNlc3Rvcikge1xuICAgIG5vZGVzLnNwbGljZShrLCAwLCBlbmQpO1xuICAgIGVuZCA9IGVuZC5wYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5mdW5jdGlvbiBsZWFzdENvbW1vbkFuY2VzdG9yKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiBhO1xuICB2YXIgYU5vZGVzID0gYS5hbmNlc3RvcnMoKSxcbiAgICAgIGJOb2RlcyA9IGIuYW5jZXN0b3JzKCksXG4gICAgICBjID0gbnVsbDtcbiAgYSA9IGFOb2Rlcy5wb3AoKTtcbiAgYiA9IGJOb2Rlcy5wb3AoKTtcbiAgd2hpbGUgKGEgPT09IGIpIHtcbiAgICBjID0gYTtcbiAgICBhID0gYU5vZGVzLnBvcCgpO1xuICAgIGIgPSBiTm9kZXMucG9wKCk7XG4gIH1cbiAgcmV0dXJuIGM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLCBub2RlcyA9IFtub2RlXTtcbiAgd2hpbGUgKG5vZGUgPSBub2RlLnBhcmVudCkge1xuICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gIH1cbiAgcmV0dXJuIG5vZGVzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBub2RlcyA9IFtdO1xuICB0aGlzLmVhY2goZnVuY3Rpb24obm9kZSkge1xuICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gIH0pO1xuICByZXR1cm4gbm9kZXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGxlYXZlcyA9IFtdO1xuICB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICghbm9kZS5jaGlsZHJlbikge1xuICAgICAgbGVhdmVzLnB1c2gobm9kZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGxlYXZlcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgcm9vdCA9IHRoaXMsIGxpbmtzID0gW107XG4gIHJvb3QuZWFjaChmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKG5vZGUgIT09IHJvb3QpIHsgLy8gRG9u4oCZdCBpbmNsdWRlIHRoZSByb2904oCZcyBwYXJlbnQsIGlmIGFueS5cbiAgICAgIGxpbmtzLnB1c2goe3NvdXJjZTogbm9kZS5wYXJlbnQsIHRhcmdldDogbm9kZX0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsaW5rcztcbn1cbiIsImltcG9ydCBub2RlX2NvdW50IGZyb20gXCIuL2NvdW50XCI7XG5pbXBvcnQgbm9kZV9lYWNoIGZyb20gXCIuL2VhY2hcIjtcbmltcG9ydCBub2RlX2VhY2hCZWZvcmUgZnJvbSBcIi4vZWFjaEJlZm9yZVwiO1xuaW1wb3J0IG5vZGVfZWFjaEFmdGVyIGZyb20gXCIuL2VhY2hBZnRlclwiO1xuaW1wb3J0IG5vZGVfc3VtIGZyb20gXCIuL3N1bVwiO1xuaW1wb3J0IG5vZGVfc29ydCBmcm9tIFwiLi9zb3J0XCI7XG5pbXBvcnQgbm9kZV9wYXRoIGZyb20gXCIuL3BhdGhcIjtcbmltcG9ydCBub2RlX2FuY2VzdG9ycyBmcm9tIFwiLi9hbmNlc3RvcnNcIjtcbmltcG9ydCBub2RlX2Rlc2NlbmRhbnRzIGZyb20gXCIuL2Rlc2NlbmRhbnRzXCI7XG5pbXBvcnQgbm9kZV9sZWF2ZXMgZnJvbSBcIi4vbGVhdmVzXCI7XG5pbXBvcnQgbm9kZV9saW5rcyBmcm9tIFwiLi9saW5rc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoaWVyYXJjaHkoZGF0YSwgY2hpbGRyZW4pIHtcbiAgdmFyIHJvb3QgPSBuZXcgTm9kZShkYXRhKSxcbiAgICAgIHZhbHVlZCA9ICtkYXRhLnZhbHVlICYmIChyb290LnZhbHVlID0gZGF0YS52YWx1ZSksXG4gICAgICBub2RlLFxuICAgICAgbm9kZXMgPSBbcm9vdF0sXG4gICAgICBjaGlsZCxcbiAgICAgIGNoaWxkcyxcbiAgICAgIGksXG4gICAgICBuO1xuXG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSBjaGlsZHJlbiA9IGRlZmF1bHRDaGlsZHJlbjtcblxuICB3aGlsZSAobm9kZSA9IG5vZGVzLnBvcCgpKSB7XG4gICAgaWYgKHZhbHVlZCkgbm9kZS52YWx1ZSA9ICtub2RlLmRhdGEudmFsdWU7XG4gICAgaWYgKChjaGlsZHMgPSBjaGlsZHJlbihub2RlLmRhdGEpKSAmJiAobiA9IGNoaWxkcy5sZW5ndGgpKSB7XG4gICAgICBub2RlLmNoaWxkcmVuID0gbmV3IEFycmF5KG4pO1xuICAgICAgZm9yIChpID0gbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIG5vZGVzLnB1c2goY2hpbGQgPSBub2RlLmNoaWxkcmVuW2ldID0gbmV3IE5vZGUoY2hpbGRzW2ldKSk7XG4gICAgICAgIGNoaWxkLnBhcmVudCA9IG5vZGU7XG4gICAgICAgIGNoaWxkLmRlcHRoID0gbm9kZS5kZXB0aCArIDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJvb3QuZWFjaEJlZm9yZShjb21wdXRlSGVpZ2h0KTtcbn1cblxuZnVuY3Rpb24gbm9kZV9jb3B5KCkge1xuICByZXR1cm4gaGllcmFyY2h5KHRoaXMpLmVhY2hCZWZvcmUoY29weURhdGEpO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0Q2hpbGRyZW4oZCkge1xuICByZXR1cm4gZC5jaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gY29weURhdGEobm9kZSkge1xuICBub2RlLmRhdGEgPSBub2RlLmRhdGEuZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVIZWlnaHQobm9kZSkge1xuICB2YXIgaGVpZ2h0ID0gMDtcbiAgZG8gbm9kZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIHdoaWxlICgobm9kZSA9IG5vZGUucGFyZW50KSAmJiAobm9kZS5oZWlnaHQgPCArK2hlaWdodCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTm9kZShkYXRhKSB7XG4gIHRoaXMuZGF0YSA9IGRhdGE7XG4gIHRoaXMuZGVwdGggPVxuICB0aGlzLmhlaWdodCA9IDA7XG4gIHRoaXMucGFyZW50ID0gbnVsbDtcbn1cblxuTm9kZS5wcm90b3R5cGUgPSBoaWVyYXJjaHkucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogTm9kZSxcbiAgY291bnQ6IG5vZGVfY291bnQsXG4gIGVhY2g6IG5vZGVfZWFjaCxcbiAgZWFjaEFmdGVyOiBub2RlX2VhY2hBZnRlcixcbiAgZWFjaEJlZm9yZTogbm9kZV9lYWNoQmVmb3JlLFxuICBzdW06IG5vZGVfc3VtLFxuICBzb3J0OiBub2RlX3NvcnQsXG4gIHBhdGg6IG5vZGVfcGF0aCxcbiAgYW5jZXN0b3JzOiBub2RlX2FuY2VzdG9ycyxcbiAgZGVzY2VuZGFudHM6IG5vZGVfZGVzY2VuZGFudHMsXG4gIGxlYXZlczogbm9kZV9sZWF2ZXMsXG4gIGxpbmtzOiBub2RlX2xpbmtzLFxuICBjb3B5OiBub2RlX2NvcHlcbn07XG4iLCJleHBvcnQgdmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geDtcbn1cbiIsImltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5XCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHlcIjtcblxudmFyIHRvcCA9IDEsXG4gICAgcmlnaHQgPSAyLFxuICAgIGJvdHRvbSA9IDMsXG4gICAgbGVmdCA9IDQsXG4gICAgZXBzaWxvbiA9IDFlLTY7XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZVgoeCkge1xuICByZXR1cm4gXCJ0cmFuc2xhdGUoXCIgKyAoeCArIDAuNSkgKyBcIiwwKVwiO1xufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVZKHkpIHtcbiAgcmV0dXJuIFwidHJhbnNsYXRlKDAsXCIgKyAoeSArIDAuNSkgKyBcIilcIjtcbn1cblxuZnVuY3Rpb24gbnVtYmVyKHNjYWxlKSB7XG4gIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgcmV0dXJuICtzY2FsZShkKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2VudGVyKHNjYWxlKSB7XG4gIHZhciBvZmZzZXQgPSBNYXRoLm1heCgwLCBzY2FsZS5iYW5kd2lkdGgoKSAtIDEpIC8gMjsgLy8gQWRqdXN0IGZvciAwLjVweCBvZmZzZXQuXG4gIGlmIChzY2FsZS5yb3VuZCgpKSBvZmZzZXQgPSBNYXRoLnJvdW5kKG9mZnNldCk7XG4gIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgcmV0dXJuICtzY2FsZShkKSArIG9mZnNldDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZW50ZXJpbmcoKSB7XG4gIHJldHVybiAhdGhpcy5fX2F4aXM7XG59XG5cbmZ1bmN0aW9uIGF4aXMob3JpZW50LCBzY2FsZSkge1xuICB2YXIgdGlja0FyZ3VtZW50cyA9IFtdLFxuICAgICAgdGlja1ZhbHVlcyA9IG51bGwsXG4gICAgICB0aWNrRm9ybWF0ID0gbnVsbCxcbiAgICAgIHRpY2tTaXplSW5uZXIgPSA2LFxuICAgICAgdGlja1NpemVPdXRlciA9IDYsXG4gICAgICB0aWNrUGFkZGluZyA9IDMsXG4gICAgICBrID0gb3JpZW50ID09PSB0b3AgfHwgb3JpZW50ID09PSBsZWZ0ID8gLTEgOiAxLFxuICAgICAgeCA9IG9yaWVudCA9PT0gbGVmdCB8fCBvcmllbnQgPT09IHJpZ2h0ID8gXCJ4XCIgOiBcInlcIixcbiAgICAgIHRyYW5zZm9ybSA9IG9yaWVudCA9PT0gdG9wIHx8IG9yaWVudCA9PT0gYm90dG9tID8gdHJhbnNsYXRlWCA6IHRyYW5zbGF0ZVk7XG5cbiAgZnVuY3Rpb24gYXhpcyhjb250ZXh0KSB7XG4gICAgdmFyIHZhbHVlcyA9IHRpY2tWYWx1ZXMgPT0gbnVsbCA/IChzY2FsZS50aWNrcyA/IHNjYWxlLnRpY2tzLmFwcGx5KHNjYWxlLCB0aWNrQXJndW1lbnRzKSA6IHNjYWxlLmRvbWFpbigpKSA6IHRpY2tWYWx1ZXMsXG4gICAgICAgIGZvcm1hdCA9IHRpY2tGb3JtYXQgPT0gbnVsbCA/IChzY2FsZS50aWNrRm9ybWF0ID8gc2NhbGUudGlja0Zvcm1hdC5hcHBseShzY2FsZSwgdGlja0FyZ3VtZW50cykgOiBpZGVudGl0eSkgOiB0aWNrRm9ybWF0LFxuICAgICAgICBzcGFjaW5nID0gTWF0aC5tYXgodGlja1NpemVJbm5lciwgMCkgKyB0aWNrUGFkZGluZyxcbiAgICAgICAgcmFuZ2UgPSBzY2FsZS5yYW5nZSgpLFxuICAgICAgICByYW5nZTAgPSArcmFuZ2VbMF0gKyAwLjUsXG4gICAgICAgIHJhbmdlMSA9ICtyYW5nZVtyYW5nZS5sZW5ndGggLSAxXSArIDAuNSxcbiAgICAgICAgcG9zaXRpb24gPSAoc2NhbGUuYmFuZHdpZHRoID8gY2VudGVyIDogbnVtYmVyKShzY2FsZS5jb3B5KCkpLFxuICAgICAgICBzZWxlY3Rpb24gPSBjb250ZXh0LnNlbGVjdGlvbiA/IGNvbnRleHQuc2VsZWN0aW9uKCkgOiBjb250ZXh0LFxuICAgICAgICBwYXRoID0gc2VsZWN0aW9uLnNlbGVjdEFsbChcIi5kb21haW5cIikuZGF0YShbbnVsbF0pLFxuICAgICAgICB0aWNrID0gc2VsZWN0aW9uLnNlbGVjdEFsbChcIi50aWNrXCIpLmRhdGEodmFsdWVzLCBzY2FsZSkub3JkZXIoKSxcbiAgICAgICAgdGlja0V4aXQgPSB0aWNrLmV4aXQoKSxcbiAgICAgICAgdGlja0VudGVyID0gdGljay5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwidGlja1wiKSxcbiAgICAgICAgbGluZSA9IHRpY2suc2VsZWN0KFwibGluZVwiKSxcbiAgICAgICAgdGV4dCA9IHRpY2suc2VsZWN0KFwidGV4dFwiKTtcblxuICAgIHBhdGggPSBwYXRoLm1lcmdlKHBhdGguZW50ZXIoKS5pbnNlcnQoXCJwYXRoXCIsIFwiLnRpY2tcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImRvbWFpblwiKVxuICAgICAgICAuYXR0cihcInN0cm9rZVwiLCBcImN1cnJlbnRDb2xvclwiKSk7XG5cbiAgICB0aWNrID0gdGljay5tZXJnZSh0aWNrRW50ZXIpO1xuXG4gICAgbGluZSA9IGxpbmUubWVyZ2UodGlja0VudGVyLmFwcGVuZChcImxpbmVcIilcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJjdXJyZW50Q29sb3JcIilcbiAgICAgICAgLmF0dHIoeCArIFwiMlwiLCBrICogdGlja1NpemVJbm5lcikpO1xuXG4gICAgdGV4dCA9IHRleHQubWVyZ2UodGlja0VudGVyLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwiY3VycmVudENvbG9yXCIpXG4gICAgICAgIC5hdHRyKHgsIGsgKiBzcGFjaW5nKVxuICAgICAgICAuYXR0cihcImR5XCIsIG9yaWVudCA9PT0gdG9wID8gXCIwZW1cIiA6IG9yaWVudCA9PT0gYm90dG9tID8gXCIwLjcxZW1cIiA6IFwiMC4zMmVtXCIpKTtcblxuICAgIGlmIChjb250ZXh0ICE9PSBzZWxlY3Rpb24pIHtcbiAgICAgIHBhdGggPSBwYXRoLnRyYW5zaXRpb24oY29udGV4dCk7XG4gICAgICB0aWNrID0gdGljay50cmFuc2l0aW9uKGNvbnRleHQpO1xuICAgICAgbGluZSA9IGxpbmUudHJhbnNpdGlvbihjb250ZXh0KTtcbiAgICAgIHRleHQgPSB0ZXh0LnRyYW5zaXRpb24oY29udGV4dCk7XG5cbiAgICAgIHRpY2tFeGl0ID0gdGlja0V4aXQudHJhbnNpdGlvbihjb250ZXh0KVxuICAgICAgICAgIC5hdHRyKFwib3BhY2l0eVwiLCBlcHNpbG9uKVxuICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGlzRmluaXRlKGQgPSBwb3NpdGlvbihkKSkgPyB0cmFuc2Zvcm0oZCkgOiB0aGlzLmdldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiKTsgfSk7XG5cbiAgICAgIHRpY2tFbnRlclxuICAgICAgICAgIC5hdHRyKFwib3BhY2l0eVwiLCBlcHNpbG9uKVxuICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uKGQpIHsgdmFyIHAgPSB0aGlzLnBhcmVudE5vZGUuX19heGlzOyByZXR1cm4gdHJhbnNmb3JtKHAgJiYgaXNGaW5pdGUocCA9IHAoZCkpID8gcCA6IHBvc2l0aW9uKGQpKTsgfSk7XG4gICAgfVxuXG4gICAgdGlja0V4aXQucmVtb3ZlKCk7XG5cbiAgICBwYXRoXG4gICAgICAgIC5hdHRyKFwiZFwiLCBvcmllbnQgPT09IGxlZnQgfHwgb3JpZW50ID09IHJpZ2h0XG4gICAgICAgICAgICA/ICh0aWNrU2l6ZU91dGVyID8gXCJNXCIgKyBrICogdGlja1NpemVPdXRlciArIFwiLFwiICsgcmFuZ2UwICsgXCJIMC41VlwiICsgcmFuZ2UxICsgXCJIXCIgKyBrICogdGlja1NpemVPdXRlciA6IFwiTTAuNSxcIiArIHJhbmdlMCArIFwiVlwiICsgcmFuZ2UxKVxuICAgICAgICAgICAgOiAodGlja1NpemVPdXRlciA/IFwiTVwiICsgcmFuZ2UwICsgXCIsXCIgKyBrICogdGlja1NpemVPdXRlciArIFwiVjAuNUhcIiArIHJhbmdlMSArIFwiVlwiICsgayAqIHRpY2tTaXplT3V0ZXIgOiBcIk1cIiArIHJhbmdlMCArIFwiLDAuNUhcIiArIHJhbmdlMSkpO1xuXG4gICAgdGlja1xuICAgICAgICAuYXR0cihcIm9wYWNpdHlcIiwgMSlcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gdHJhbnNmb3JtKHBvc2l0aW9uKGQpKTsgfSk7XG5cbiAgICBsaW5lXG4gICAgICAgIC5hdHRyKHggKyBcIjJcIiwgayAqIHRpY2tTaXplSW5uZXIpO1xuXG4gICAgdGV4dFxuICAgICAgICAuYXR0cih4LCBrICogc3BhY2luZylcbiAgICAgICAgLnRleHQoZm9ybWF0KTtcblxuICAgIHNlbGVjdGlvbi5maWx0ZXIoZW50ZXJpbmcpXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIilcbiAgICAgICAgLmF0dHIoXCJmb250LXNpemVcIiwgMTApXG4gICAgICAgIC5hdHRyKFwiZm9udC1mYW1pbHlcIiwgXCJzYW5zLXNlcmlmXCIpXG4gICAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgb3JpZW50ID09PSByaWdodCA/IFwic3RhcnRcIiA6IG9yaWVudCA9PT0gbGVmdCA/IFwiZW5kXCIgOiBcIm1pZGRsZVwiKTtcblxuICAgIHNlbGVjdGlvblxuICAgICAgICAuZWFjaChmdW5jdGlvbigpIHsgdGhpcy5fX2F4aXMgPSBwb3NpdGlvbjsgfSk7XG4gIH1cblxuICBheGlzLnNjYWxlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNjYWxlID0gXywgYXhpcykgOiBzY2FsZTtcbiAgfTtcblxuICBheGlzLnRpY2tzID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRpY2tBcmd1bWVudHMgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyksIGF4aXM7XG4gIH07XG5cbiAgYXhpcy50aWNrQXJndW1lbnRzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tBcmd1bWVudHMgPSBfID09IG51bGwgPyBbXSA6IHNsaWNlLmNhbGwoXyksIGF4aXMpIDogdGlja0FyZ3VtZW50cy5zbGljZSgpO1xuICB9O1xuXG4gIGF4aXMudGlja1ZhbHVlcyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrVmFsdWVzID0gXyA9PSBudWxsID8gbnVsbCA6IHNsaWNlLmNhbGwoXyksIGF4aXMpIDogdGlja1ZhbHVlcyAmJiB0aWNrVmFsdWVzLnNsaWNlKCk7XG4gIH07XG5cbiAgYXhpcy50aWNrRm9ybWF0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tGb3JtYXQgPSBfLCBheGlzKSA6IHRpY2tGb3JtYXQ7XG4gIH07XG5cbiAgYXhpcy50aWNrU2l6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrU2l6ZUlubmVyID0gdGlja1NpemVPdXRlciA9ICtfLCBheGlzKSA6IHRpY2tTaXplSW5uZXI7XG4gIH07XG5cbiAgYXhpcy50aWNrU2l6ZUlubmVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tTaXplSW5uZXIgPSArXywgYXhpcykgOiB0aWNrU2l6ZUlubmVyO1xuICB9O1xuXG4gIGF4aXMudGlja1NpemVPdXRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrU2l6ZU91dGVyID0gK18sIGF4aXMpIDogdGlja1NpemVPdXRlcjtcbiAgfTtcblxuICBheGlzLnRpY2tQYWRkaW5nID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tQYWRkaW5nID0gK18sIGF4aXMpIDogdGlja1BhZGRpbmc7XG4gIH07XG5cbiAgcmV0dXJuIGF4aXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlzVG9wKHNjYWxlKSB7XG4gIHJldHVybiBheGlzKHRvcCwgc2NhbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc1JpZ2h0KHNjYWxlKSB7XG4gIHJldHVybiBheGlzKHJpZ2h0LCBzY2FsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlzQm90dG9tKHNjYWxlKSB7XG4gIHJldHVybiBheGlzKGJvdHRvbSwgc2NhbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc0xlZnQoc2NhbGUpIHtcbiAgcmV0dXJuIGF4aXMobGVmdCwgc2NhbGUpO1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMTEgSmFzb24gRGF2aWVzIGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNvbmRhdmllcy9uZXdpY2suanNcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTmV3aWNrKHMpIHtcbiAgICB2YXIgYW5jZXN0b3JzID0gW107XG4gICAgdmFyIHRyZWUgPSB7fTtcbiAgICB2YXIgdG9rZW5zID0gcy5zcGxpdCgvXFxzKig7fFxcKHxcXCl8LHw6KVxccyovKTtcbiAgICBmb3IgKHZhciBpPTA7IGk8dG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07XG4gICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgIGNhc2UgJygnOiAvLyBuZXcgYnJhbmNoc2V0XG4gICAgICAgICAgdmFyIHN1YnRyZWUgPSB7fTtcbiAgICAgICAgICB0cmVlLmJyYW5jaHNldCA9IFtzdWJ0cmVlXTtcbiAgICAgICAgICBhbmNlc3RvcnMucHVzaCh0cmVlKTtcbiAgICAgICAgICB0cmVlID0gc3VidHJlZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnLCc6IC8vIGFub3RoZXIgYnJhbmNoXG4gICAgICAgICAgdmFyIHN1YnRyZWUgPSB7fTtcbiAgICAgICAgICBhbmNlc3RvcnNbYW5jZXN0b3JzLmxlbmd0aC0xXS5icmFuY2hzZXQucHVzaChzdWJ0cmVlKTtcbiAgICAgICAgICB0cmVlID0gc3VidHJlZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnKSc6IC8vIG9wdGlvbmFsIG5hbWUgbmV4dFxuICAgICAgICAgIHRyZWUgPSBhbmNlc3RvcnMucG9wKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJzonOiAvLyBvcHRpb25hbCBsZW5ndGggbmV4dFxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHZhciB4ID0gdG9rZW5zW2ktMV07XG4gICAgICAgICAgaWYgKHggPT0gJyknIHx8IHggPT0gJygnIHx8IHggPT0gJywnKSB7XG4gICAgICAgICAgICB0cmVlLm5hbWUgPSB0b2tlbjtcbiAgICAgICAgICB9IGVsc2UgaWYgKHggPT0gJzonKSB7XG4gICAgICAgICAgICB0cmVlLmxlbmd0aCA9IHBhcnNlRmxvYXQodG9rZW4pO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRyZWU7XG59XG5cbiIsIi8qKlxuICogQ29weXJpZ2h0IMKpIDIwMTUgLSAyMDE4IFRoZSBCcm9hZCBJbnN0aXR1dGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSAoaHR0cHM6Ly9naXRodWIuY29tL2Jyb2FkaW5zdGl0dXRlL2d0ZXgtdml6L2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQpXG4gKi9cbi8qXG4gICAgRGVuZHJvZ3JhbSB2aXN1YWxpemVzIGEgdGV4dC1iYXNlZCBOZXdpY2sgdHJlZSB1c2luZyBEMyBWNS5cblxuICAgIGRlcGVuZGVuY2llczpcbiAgICBkMyB2NVxuICAgIHRoZSBuZXdpY2sgcGFyc2VyOiBuZXdpY2suanNcblxuICAgIHJlZmVyZW5jZXM6XG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2QzL2QzLWhpZXJhcmNoeVxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNvbmRhdmllcy9uZXdpY2suanMvXG5cbiAgICBub3RlcyBvbiB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXM6XG4gICAgLSBpdCB1c2VzIHBhcnNlTmV3aWNrKCkgdG8gY29udmVydCB0aGUgbmV3aWNrIHRyZWUgaW50byB0aGUgZm9sbG93aW5nIGpzb246XG4gICAgICAgIHtcbiAgICAgICAgICAgIGJyYW5jaHNldDpbY2hpbGQgbm9kZSBqc29uIG9iamVjdHNdLFxuICAgICAgICAgICAgbmFtZTogXCJcIiAvLyBpbnRlcm5hbCBub2RlcyB3b3VsZCBoYXZlIG5vIHJlYWwgbGFiZWxzXG4gICAgICAgIH1cbiAgICAgICBUaGlzIGpzb24gc3RydWN0dXJlIGlzIHRoZSBpbnB1dCBkYXRhIG9mIGQzLmhpZXJhcmNoeSgpXG5cbiAgICAtIEluIHRoZSBkMy5oaWVyYXJjaHkoKSwgdGhlIHJvb3Qgbm9kZSBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOlxuICAgICAgICB7XG4gICAgICAgICAgICBjaGlsZHJlbjogW2NvLCBjb10sXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgYnJhbmNoc2V0OiBBcnJheSgyKSxcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm5vZGUgbmFtZVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVwdGg6IDAsXG4gICAgICAgICAgICBoZWlnaHQ6IGludGVnZXIsXG4gICAgICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgICAgICB2YWx1ZTogOVxuICAgICAgICB9XG4gKi9cblxuLy8gVE9ETzogZWxpbWluYXRlIGhhcmQtY29kZWQgdmFsdWVzXG5cbmltcG9ydCB7aGllcmFyY2h5fSBmcm9tIFwiZDMtaGllcmFyY2h5XCI7XG5pbXBvcnQge2FzY2VuZGluZ30gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2F4aXNCb3R0b20sIGF4aXNMZWZ0fSBmcm9tIFwiZDMtYXhpc1wiO1xuaW1wb3J0IHtzY2FsZUxpbmVhciwgc2NhbGVCYW5kfSBmcm9tIFwiZDMtc2NhbGVcIjtcbmltcG9ydCB7cGFyc2VOZXdpY2t9IGZyb20gXCIuL25ld2lja1wiO1xuY29uc3QgdmVyYm9zZSA9IGZhbHNlO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVuZHJvZ3JhbSB7XG4gICAgY29uc3RydWN0b3IobmV3aWNrLCBvcmllbnRhdGlvbj0naCcpe1xuICAgICAgICB0aGlzLm5ld2ljayA9IG5ld2ljaztcbiAgICAgICAgdGhpcy5vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uO1xuICAgICAgICB0aGlzLnBvc3RvcmRlciA9IFtdO1xuICAgICAgICB0aGlzLnJvb3QgPSBoaWVyYXJjaHkocGFyc2VOZXdpY2sobmV3aWNrKSwgKGQpID0+IGQuYnJhbmNoc2V0KVxuICAgICAgICAgICAgLnN1bSgoZCk9PmQuYnJhbmNoc2V0PzA6MSlcbiAgICAgICAgICAgIC5zb3J0KChhLGIpPT5hLnZhbHVlLWIudmFsdWV8fGEuZGF0YS5sZW5ndGgtYi5kYXRhLmxlbmd0aCk7XG4gICAgICAgIHRoaXMubGVhdmVzID0gdGhpcy5yb290LmxlYXZlcygpLnNvcnQoKGEsIGIpID0+IChhLnZhbHVlIC0gYi52YWx1ZSkgfHwgYXNjZW5kaW5nKGEuZGF0YS5sZW5ndGgsIGIuZGF0YS5sZW5ndGgpKTtcbiAgICAgICAgdGhpcy53aWR0aCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMueFNjYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnlTY2FsZSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBkcmF3KGRvbSwgd2lkdGgsIGhlaWdodCl7XG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIHRoaXMuX3NldFhTY2FsZSgpO1xuICAgICAgICB0aGlzLl9zZXRZU2NhbGUoKTtcbiAgICAgICAgaWYgKCdoJyA9PSB0aGlzLm9yaWVudGF0aW9uKSB0aGlzLl9kcmF3SFRyZWUoZG9tKTtcbiAgICAgICAgZWxzZSB0aGlzLl9kcmF3VlRyZWUoZG9tKTtcbiAgICB9XG5cbiAgICAvLy8vLy8vIHByaXZhdGUgbWV0aG9kcyAvLy8vLy8vXG5cbiAgICBfZHJhd0hUcmVlKGRvbSl7XG4gICAgICAgIGNvbnN0IHNldFkgPSAobm9kZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIGEgbGVhZiBub2RlXG4gICAgICAgICAgICAgICAgbm9kZS55ID0gdGhpcy55U2NhbGUobm9kZS5kYXRhLm5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBhbiBpbnRlcm5hbCBub2RlXG4gICAgICAgICAgICAgICAgLy8gdGhlIHkgY29vcmRpbmF0ZSBvZiBhbiBpbnRlcm5hbCBub2RlIGlzIHRoZSBhdmVyYWdlIHkgZnJvbSBpdHMgY2hpbGRyZW5cbiAgICAgICAgICAgICAgICBub2RlLnkgPSBub2RlLmNoaWxkcmVuLnJlZHVjZSgoc3VtLCBkKT0+c3VtK2QueSwgMCkvbm9kZS5jaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNldFggPSAobm9kZSkgPT4ge1xuICAgICAgICAgICAgbm9kZS54ID0gdGhpcy54U2NhbGUodGhpcy5fZ2V0QnJhbmNoTGVuZ3RoVG9Sb290KG5vZGUpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBmcm9tIHRoZSBsZWFmIGxldmVsIC0+IHJvb3RcbiAgICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLl9zb3J0Tm9kZXNCeUxldmVsKCk7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIHNldFgobm9kZSk7XG4gICAgICAgICAgICBzZXRZKG5vZGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBkb20uc2VsZWN0QWxsKCcuYnJhbmNoJylcbiAgICAgICAgICAgIC5kYXRhKG5vZGVzKVxuICAgICAgICAgICAgLmVudGVyKCkuYXBwZW5kKFwibGluZVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4MVwiLCAoZCkgPT4gZC54KVxuICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCAoZCkgPT4gZC5kYXRhLmxlbmd0aD9kLnggLSB0aGlzLnhTY2FsZShkLmRhdGEubGVuZ3RoKTpkLngpXG4gICAgICAgICAgICAuYXR0cihcInkxXCIsIChkKSA9PiBkLnkgKyB0aGlzLnlTY2FsZS5iYW5kd2lkdGgoKS8yKVxuICAgICAgICAgICAgLmF0dHIoXCJ5MlwiLCAoZCkgPT4gZC55ICsgdGhpcy55U2NhbGUuYmFuZHdpZHRoKCkvMilcbiAgICAgICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiZ3JheVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgMSk7XG5cbiAgICAgICAgLy8gZm9yIGFsbCBpbnRlcm5hbCBub2Rlc1xuICAgICAgICBjb25zdCBpbm9kZXMgPSB0aGlzLnJvb3QuZGVzY2VuZGFudHMoKS5maWx0ZXIoKGQpPT5kLmhlaWdodCkuc29ydCgoYSxiKT0+Yi5oZWlnaHQtYS5oZWlnaHQpO1xuICAgICAgICBkb20uc2VsZWN0QWxsKCcuYXJtJylcbiAgICAgICAgICAgIC5kYXRhKGlub2RlcylcbiAgICAgICAgICAgIC5lbnRlcigpLmFwcGVuZChcImxpbmVcIilcbiAgICAgICAgICAgIC5hdHRyKFwieDFcIiwgKGQpID0+IGQueClcbiAgICAgICAgICAgIC5hdHRyKFwieDJcIiwgKGQpID0+IGQueClcbiAgICAgICAgICAgIC5hdHRyKFwieTFcIiwgKGQpID0+IGQuY2hpbGRyZW5bMF0ueSArIHRoaXMueVNjYWxlLmJhbmR3aWR0aCgpLzIpXG4gICAgICAgICAgICAuYXR0cihcInkyXCIsIChkKSA9PiBkLmNoaWxkcmVuWzFdLnkgKyB0aGlzLnlTY2FsZS5iYW5kd2lkdGgoKS8yKVxuICAgICAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJncmF5XCIpXG4gICAgICAgICAgICAuYXR0cihcInN0cm9rZS13aWR0aFwiLCAxKTtcblxuICAgICAgICBkb20uc2VsZWN0QWxsKCcubm9kZScpXG4gICAgICAgICAgICAuZGF0YShpbm9kZXMpXG4gICAgICAgICAgICAuZW50ZXIoKS5hcHBlbmQoXCJjaXJjbGVcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY3hcIiwgKGQpID0+IGQueClcbiAgICAgICAgICAgIC5hdHRyKFwiY3lcIiwgKGQpID0+IGQueSArIHRoaXMueVNjYWxlLmJhbmR3aWR0aCgpLzIpXG4gICAgICAgICAgICAuYXR0cihcInJcIiwgMilcbiAgICAgICAgICAgIC5hdHRyKCdmaWxsJywgJyMzMzMnKVxuICAgICAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIDAuNSlcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJkZW5kcm9ncmFtLW5vZGVcIilcbiAgICAgICAgICAgIC5vbihcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbihkKXtcbiAgICAgICAgICAgICAgICBkMy5zZWxlY3QodGhpcykuYXR0cihcInJcIiwgMyk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZC5sZWF2ZXMoKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm9uKFwibW91c2VvdXRcIiwgZnVuY3Rpb24oZCl7XG4gICAgICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLmF0dHIoXCJyXCIsIDIpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBheGlzXG4gICAgICAgIC8vIEFkZCB0aGUgeCBBeGlzXG4gICAgICAgIGRvbS5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiZGVuZHJvZ3JhbS1heGlzXCIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZSgwLFwiICsgdGhpcy5oZWlnaHQgKyBcIilcIilcbiAgICAgICAgICAgIC5jYWxsKFxuICAgICAgICAgICAgICAgIGF4aXNCb3R0b20odGhpcy54U2NhbGUpXG4gICAgICAgICAgICAgICAgICAgIC50aWNrcygzKVxuICAgICAgICAgICAgICAgIC8vIC50aWNrVmFsdWVzKFtNYXRoLmZsb29yKHRoaXMuX2dldE1heEJyYW5jaExlbmd0aCgpLzIpLCBNYXRoLmZsb29yKHRoaXMuX2dldE1heEJyYW5jaExlbmd0aCgpKV0pXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIF9zb3J0Tm9kZXNCeUxldmVsKCl7XG4gICAgICAgIC8vIHJldHVybnMgYSBsaXN0IG9mIG5vZGVzIG9yZGVyZWQgYnkgYW5jZXN0cmFsIGxldmVsLCB0aGVuIGJ5IGJyYW5jaCBsZW5ndGhcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdC5kZXNjZW5kYW50cygpLnNvcnQoKGEsIGIpID0+IChhLmhlaWdodCAtIGIuaGVpZ2h0KSB8fCBhc2NlbmRpbmcoYS5kYXRhLmxlbmd0aCwgYi5kYXRhLmxlbmd0aCkpO1xuICAgIH1cblxuICAgIF9kcmF3VlRyZWUoZG9tKXtcbiAgICAgICAgY29uc3Qgc2V0WCA9IChub2RlKSA9PiB7XG4gICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gYSBsZWFmIG5vZGVcbiAgICAgICAgICAgICAgICBub2RlLnggPSB0aGlzLnhTY2FsZShub2RlLmRhdGEubmFtZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGFuIGludGVybmFsIG5vZGVcbiAgICAgICAgICAgICAgICAvLyB0aGUgeSBjb29yZGluYXRlIG9mIGFuIGludGVybmFsIG5vZGUgaXMgdGhlIGF2ZXJhZ2UgeSBmcm9tIGl0cyBjaGlsZHJlblxuICAgICAgICAgICAgICAgIG5vZGUueCA9IG5vZGUuY2hpbGRyZW4ucmVkdWNlKChzdW0sIGQpPT5zdW0rZC54LCAwKS9ub2RlLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2V0WSA9IChub2RlKSA9PiB7XG4gICAgICAgICAgICBub2RlLnkgPSB0aGlzLnlTY2FsZSh0aGlzLl9nZXRCcmFuY2hMZW5ndGhUb1Jvb3Qobm9kZSkpO1xuICAgICAgICB9O1xuICAgICAgICAvLyBmcm9tIHRoZSBsZWFmIGxldmVsIC0+IHJvb3RcbiAgICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLl9zb3J0Tm9kZXNCeUxldmVsKCk7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIHNldFgobm9kZSk7XG4gICAgICAgICAgICBzZXRZKG5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgZG9tLnNlbGVjdEFsbCgnLmJyYW5jaCcpXG4gICAgICAgICAgICAuZGF0YShub2RlcylcbiAgICAgICAgICAgIC5lbnRlcigpLmFwcGVuZChcImxpbmVcIilcbiAgICAgICAgICAgIC5hdHRyKFwieTFcIiwgKGQpID0+IGQueSlcbiAgICAgICAgICAgIC5hdHRyKFwieTJcIiwgKGQpID0+IGQuZGF0YS5sZW5ndGg/ZC55IC0gdGhpcy55U2NhbGUoZC5kYXRhLmxlbmd0aCk6ZC55KVxuICAgICAgICAgICAgLmF0dHIoXCJ4MVwiLCAoZCkgPT4gZC54ICsgdGhpcy54U2NhbGUuYmFuZHdpZHRoKCkvMilcbiAgICAgICAgICAgIC5hdHRyKFwieDJcIiwgKGQpID0+IGQueCArIHRoaXMueFNjYWxlLmJhbmR3aWR0aCgpLzIpXG4gICAgICAgICAgICAuYXR0cihcInN0cm9rZVwiLCBcImdyYXlcIilcbiAgICAgICAgICAgIC5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDEpO1xuXG4gICAgICAgIC8vIGZvciBhbGwgaW50ZXJuYWwgbm9kZXNcbiAgICAgICAgY29uc3QgaW5vZGVzID0gdGhpcy5yb290LmRlc2NlbmRhbnRzKCkuZmlsdGVyKChkKT0+ZC5oZWlnaHQpLnNvcnQoKGEsYik9PmIuaGVpZ2h0LWEuaGVpZ2h0KTtcbiAgICAgICAgZG9tLnNlbGVjdEFsbCgnLmFybScpXG4gICAgICAgICAgICAuZGF0YShpbm9kZXMpXG4gICAgICAgICAgICAuZW50ZXIoKS5hcHBlbmQoXCJsaW5lXCIpXG4gICAgICAgICAgICAuYXR0cihcInkxXCIsIChkKSA9PiBkLnkpXG4gICAgICAgICAgICAuYXR0cihcInkyXCIsIChkKSA9PiBkLnkpXG4gICAgICAgICAgICAuYXR0cihcIngxXCIsIChkKSA9PiBkLmNoaWxkcmVuWzBdLnggKyB0aGlzLnhTY2FsZS5iYW5kd2lkdGgoKS8yKVxuICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCAoZCkgPT4gZC5jaGlsZHJlblsxXS54ICsgdGhpcy54U2NhbGUuYmFuZHdpZHRoKCkvMilcbiAgICAgICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiZ3JheVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgMSk7XG5cbiAgICAgICAgZG9tLnNlbGVjdEFsbCgnLm5vZGUnKVxuICAgICAgICAgICAgLmRhdGEoaW5vZGVzKVxuICAgICAgICAgICAgLmVudGVyKCkuYXBwZW5kKFwiY2lyY2xlXCIpXG4gICAgICAgICAgICAuYXR0cihcImN4XCIsIChkKSA9PiBkLnggKyB0aGlzLnhTY2FsZS5iYW5kd2lkdGgoKS8yKVxuICAgICAgICAgICAgLmF0dHIoXCJjeVwiLCAoZCkgPT4gZC55KVxuICAgICAgICAgICAgLmF0dHIoXCJyXCIsIDIpXG4gICAgICAgICAgICAuYXR0cignZmlsbCcsICcjMzMzJylcbiAgICAgICAgICAgIC5hdHRyKFwib3BhY2l0eVwiLCAwLjUpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiZGVuZHJvZ3JhbS1ub2RlXCIpXG4gICAgICAgICAgICAub24oXCJtb3VzZW92ZXJcIiwgZnVuY3Rpb24oZCl7XG4gICAgICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLmF0dHIoXCJyXCIsIDMpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGQubGVhdmVzKCkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5vbihcIm1vdXNlb3V0XCIsIGZ1bmN0aW9uKGQpe1xuICAgICAgICAgICAgICAgIGQzLnNlbGVjdCh0aGlzKS5hdHRyKFwiclwiLCAyKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gYXhpc1xuICAgICAgICAvLyBBZGQgdGhlIHggQXhpc1xuICAgICAgICBkb20uYXBwZW5kKFwiZ1wiKVxuICAgICAgICAgICAgLy8gLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke3RoaXMud2lkdGh9LCAwKWApXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiZGVuZHJvZ3JhbS1heGlzXCIpXG4gICAgICAgICAgICAuY2FsbChcbiAgICAgICAgICAgICAgICBheGlzTGVmdCh0aGlzLnlTY2FsZSlcbiAgICAgICAgICAgICAgICAgICAgLnRpY2tzKDMpXG4gICAgICAgICAgICAgICAgLy8gLnRpY2tWYWx1ZXMoW01hdGguZmxvb3IodGhpcy5fZ2V0TWF4QnJhbmNoTGVuZ3RoKCkvMiksIE1hdGguZmxvb3IodGhpcy5fZ2V0TWF4QnJhbmNoTGVuZ3RoKCkpXSlcbiAgICAgICAgICAgICk7XG5cbiAgICB9XG5cbiAgICBfZ2V0QnJhbmNoTGVuZ3RoVG9Sb290KG5vZGUpIHtcbiAgICAgICAgLy8gbm9kZTogYSBkMy5oaWVyYXJjaHkgbm9kZVxuICAgICAgICByZXR1cm4gbm9kZS5wYXRoKHRoaXMucm9vdClcbiAgICAgICAgICAgIC5yZWR1Y2UoKHN1bSwgZCkgPT4gZC5kYXRhLmxlbmd0aD9zdW0rZC5kYXRhLmxlbmd0aDpzdW0sIDApO1xuICAgIH1cblxuICAgIF9nZXRNYXhCcmFuY2hMZW5ndGgoKSB7XG4gICAgICAgIC8vIHRoZSBhc3N1bXB0aW9uIGhlcmUgaXMgdGhhdCBhbGwgbGVhZiBub2RlcyBoYXZlIHRoZSBzYW1lIGRpc3RhbmNlIHRvIHRoZSByb290LlxuICAgICAgICBsZXQgbm9kZSA9IHRoaXMubGVhdmVzWzBdOyAvLyByYW5kb21seSBwaWNrcyBhIGxlYWYgbm9kZVxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0QnJhbmNoTGVuZ3RoVG9Sb290KG5vZGUpO1xuICAgIH1cblxuICAgIF9hc3NpZ25Qb3N0b3JkZXIobm9kZSl7XG4gICAgICAgIC8vIGFzc2lnbnMgcG9zdC1vcmRlciBvZiBhbGwgbGVhZiBub2Rlc1xuICAgICAgICBpZihub2RlLmNoaWxkcmVuID09PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgLy8gYmFzZSBjYXNlXG4gICAgICAgICAgICB0aGlzLnBvc3RvcmRlci5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fYXNzaWduUG9zdG9yZGVyKG5vZGUuY2hpbGRyZW5bMF0pO1xuICAgICAgICAgICAgdGhpcy5fYXNzaWduUG9zdG9yZGVyKG5vZGUuY2hpbGRyZW5bMV0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3NldFhTY2FsZSgpe1xuICAgICAgICBpZiAoJ2gnID09IHRoaXMub3JpZW50YXRpb24pe1xuICAgICAgICAgICAgdGhpcy54U2NhbGUgPSBzY2FsZUxpbmVhcigpXG4gICAgICAgICAgICAgICAgLmRvbWFpbihbMCwgdGhpcy5fZ2V0TWF4QnJhbmNoTGVuZ3RoKCldKVxuICAgICAgICAgICAgICAgIC5yYW5nZShbMCwgdGhpcy53aWR0aF0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9hc3NpZ25Qb3N0b3JkZXIodGhpcy5yb290KTtcbiAgICAgICAgICAgIGlmICh2ZXJib3NlKSBjb25zb2xlLmxvZyh0aGlzLnBvc3RvcmRlcik7XG4gICAgICAgICAgICB0aGlzLnhTY2FsZSA9IHNjYWxlQmFuZCgpXG4gICAgICAgICAgICAgICAgLmRvbWFpbih0aGlzLnBvc3RvcmRlci5tYXAoKGQpID0+IGQuZGF0YS5uYW1lKSlcbiAgICAgICAgICAgICAgICAucmFuZ2UoWzAsIHRoaXMud2lkdGhdKVxuICAgICAgICAgICAgICAgIC5wYWRkaW5nKC4wNSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfc2V0WVNjYWxlKCl7XG4gICAgICAgIGlmICgnaCcgPT0gdGhpcy5vcmllbnRhdGlvbil7XG4gICAgICAgICAgICB0aGlzLl9hc3NpZ25Qb3N0b3JkZXIodGhpcy5yb290KTtcbiAgICAgICAgICAgIGlmICh2ZXJib3NlKSBjb25zb2xlLmxvZyh0aGlzLnBvc3RvcmRlcik7XG4gICAgICAgICAgICB0aGlzLnlTY2FsZSA9IHNjYWxlQmFuZCgpXG4gICAgICAgICAgICAgICAgLmRvbWFpbih0aGlzLnBvc3RvcmRlci5tYXAoKGQpID0+IGQuZGF0YS5uYW1lKSlcbiAgICAgICAgICAgICAgICAucmFuZ2UoWzAsIHRoaXMuaGVpZ2h0XSlcbiAgICAgICAgICAgICAgICAucGFkZGluZyguMDUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy55U2NhbGUgPSBzY2FsZUxpbmVhcigpXG4gICAgICAgICAgICAgICAgLmRvbWFpbihbMCwgdGhpcy5fZ2V0TWF4QnJhbmNoTGVuZ3RoKCldKVxuICAgICAgICAgICAgICAgIC5yYW5nZShbMCwgdGhpcy5oZWlnaHRdKVxuICAgICAgICB9XG4gICAgfVxuXG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuaW1wb3J0IHtjcmVhdGVTdmd9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge3NlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG5pbXBvcnQgRGVuZHJvSGVhdG1hcENvbmZpZyBmcm9tIFwiLi9EZW5kcm9IZWF0bWFwQ29uZmlnXCI7XG5pbXBvcnQgRGVuZHJvZ3JhbSBmcm9tIFwiLi9EZW5kcm9ncmFtXCI7XG5pbXBvcnQgSGVhdG1hcCBmcm9tIFwiLi9IZWF0bWFwXCI7XG5pbXBvcnQgVG9vbHRpcCBmcm9tIFwiLi9Ub29sdGlwXCI7XG5pbXBvcnQgVG9vbGJhciBmcm9tIFwiLi9Ub29sYmFyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlbmRyb0hlYXRtYXAge1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0gY29sdW1uVHJlZSB7U3RyaW5nfSBhIG5ld2ljayB0cmVlXG4gICAgICogQHBhcmFtIHJvd1RyZWUge1N0cmluZ30gYSBuZXdpY2sgdHJlZVxuICAgICAqIEBwYXJhbSBoZWF0bWFwRGF0YSB7TGlzdH0gb2Ygb2JqZWN0cyB3aXRoIGF0dHJpYnV0ZXM6IHg6IFN0cmluZywgeTpTdHJpbmcsIHZhbHVlOkZsb2F0LCBkaXNwbGF5VmFsdWU6RmxvYXRcbiAgICAgKiBAcGFyYW0gY29sb3Ige1N0cmluZ30gYSBjb2xvciBuYW1lIHRoYXQncyBhdmFpbGFibGUgaW4gQ29sb3JzLmdldENvbG9ySW50ZXJwb2xhdG9yXG4gICAgICogQHBhcmFtIHIge0ludGVnZXJ9IHRoZSBkZWdyZWVzIG9mIHJvdW5kZWQtY29ybmVycyBvZiB0aGUgaGVhdG1hcCBjZWxsc1xuICAgICAqIEBwYXJhbSBjb25maWcge0RlbmRyb0hlYXRtYXBDb25maWd9XG4gICAgICogQHBhcmFtIHVzZUxvZyB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihjb2x1bW5UcmVlLCByb3dUcmVlLCBoZWF0bWFwRGF0YSwgY29sb3I9XCJZbEduQnVcIiwgcj0yLCBjb25maWc9bmV3IERlbmRyb0hlYXRtYXBDb25maWcoKSwgdG9vbHRpcElkPVwiZG1hcFRvb2x0aXBcIiwgdXNlTG9nPXRydWUsIGJhc2U9MTAsIHRpdGxlID0gJycpe1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZy5nZXQoKTtcbiAgICAgICAgLy9pbnB1dCBldmFsdWF0aW9uc1xuICAgICAgICBjb2x1bW5UcmVlID0gY29sdW1uVHJlZT09PXVuZGVmaW5lZHx8Y29sdW1uVHJlZS5zdGFydHNXaXRoKFwiTm90IGVub3VnaCBkYXRhXCIpP3VuZGVmaW5lZDpjb2x1bW5UcmVlO1xuICAgICAgICByb3dUcmVlID0gcm93VHJlZT09PXVuZGVmaW5lZHx8cm93VHJlZS5zdGFydHNXaXRoKFwiTm90IGVub3VnaCBkYXRhXCIpP3VuZGVmaW5lZDpyb3dUcmVlO1xuICAgICAgICAvLyBhc3NpZ24gYXR0cmlidXRlIHZhbHVlcyBiYXNlZCBvbiBpbnB1dCBhcmd1bWVudHNcbiAgICAgICAgdGhpcy5kYXRhID0ge1xuICAgICAgICAgICAgY29sdW1uVHJlZTogY29sdW1uVHJlZSxcbiAgICAgICAgICAgIHJvd1RyZWU6IHJvd1RyZWUsXG4gICAgICAgICAgICBoZWF0bWFwOiBoZWF0bWFwRGF0YSxcbiAgICAgICAgICAgIGV4dGVybmFsOiB1bmRlZmluZWRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vYmplY3RzID0ge1xuICAgICAgICAgICAgY29sdW1uVHJlZTogdGhpcy5kYXRhLmNvbHVtblRyZWU9PT11bmRlZmluZWQ/IHVuZGVmaW5lZDpuZXcgRGVuZHJvZ3JhbSh0aGlzLmRhdGEuY29sdW1uVHJlZSwgXCJ2XCIpLFxuICAgICAgICAgICAgcm93VHJlZTogdGhpcy5kYXRhLnJvd1RyZWU9PT11bmRlZmluZWQ/dW5kZWZpbmVkOm5ldyBEZW5kcm9ncmFtKHRoaXMuZGF0YS5yb3dUcmVlLCBcImhcIiksXG4gICAgICAgICAgICBoZWF0bWFwOiBuZXcgSGVhdG1hcCh0aGlzLmRhdGEuaGVhdG1hcCwgdXNlTG9nLCBiYXNlLCBjb2xvciwgciwgdG9vbHRpcElkKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnZpc3VhbENvbXBvbmVudHMgPSB7XG4gICAgICAgICAgICBzdmc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbHVtblRyZWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHJvd1RyZWU6IHVuZGVmaW5lZFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMudGl0bGUgPSB0aXRsZTtcbiAgICAgICAgdGhpcy50b29sYmFyID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnRvb2x0aXAgPSB0aGlzLm9iamVjdHMuaGVhdG1hcC50b29sdGlwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSB0aGUgdG9vbGJhciBwYW5lbFxuICAgICAqIEBwYXJhbSBkb21JZCB7U3RyaW5nfSB0aGUgdG9vbGJhcidzIGRvbSBJRFxuICAgICAqIEBwYXJhbSB0b29sdGlwIHtUb29sdGlwfVxuICAgICAqIEByZXR1cm5zIHtUb29sYmFyfVxuICAgICAqL1xuXG4gICAgY3JlYXRlVG9vbGJhcihkb21JZCwgdG9vbHRpcCl7XG4gICAgICAgIHRoaXMudG9vbGJhciA9IG5ldyBUb29sYmFyKGRvbUlkLCB0b29sdGlwKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbGJhcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW5kZXIgdGhlIGRlbmRyb2dyYW1zIGFuZCBjb3JyZXNwb25kaW5nIGhlYXRtYXBcbiAgICAgKiBAcGFyYW0gZG9tSWQge1N0cmluZ30gdGhlIHBhcmVudCBET00gaWQgb2YgdGhlIFNWR1xuICAgICAqIEBwYXJhbSBzdmdJZCB7U3RyaW5nfSBvZiB0aGUgU1ZHXG4gICAgICogQHBhcmFtIHNob3dDb2x1bW5UcmVlIHtCb29sZWFufSByZW5kZXIgdGhlIGNvbHVtbiBkZW5kcm9ncmFtXG4gICAgICogQHBhcmFtIHNob3dSb3dUcmVlIHtCb29sZWFufSByZW5kZXIgdGhlIHJvdyBkZW5kcm9ncmFtXG4gICAgICogQHBhcmFtIGxlZ2VuZFBvcyB7RW51bX0gd2hlcmUgdG8gcGxhY2UgdGhlIGNvbG9yIGxlZ2VuZDogYm90dG9tLCB0b3BcbiAgICAgKiBAcGFyYW0gdGlja3Mge0ludGVnZXJ9IG51bWJlciBvZiBiaW5zIG9mIHRoZSBjb2xvciBsZWdlbmRcbiAgICAgKi9cbiAgICByZW5kZXIoZG9tSWQsIHN2Z0lkLCBzaG93Q29sdW1uVHJlZT10cnVlLCBzaG93Um93VHJlZT10cnVlLCBsZWdlbmRQb3M9XCJ0b3BcIiwgdGlja3M9NSl7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUNvbmZpZyhsZWdlbmRQb3MpO1xuICAgICAgICB0aGlzLnZpc3VhbENvbXBvbmVudHMuc3ZnID0gY3JlYXRlU3ZnKGRvbUlkLCB0aGlzLmNvbmZpZy53LCB0aGlzLmNvbmZpZy5oLCB0aGlzLmNvbmZpZy5tYXJnaW4sIHN2Z0lkKTtcblxuICAgICAgICBsZXQgeGxpc3QgPSB1bmRlZmluZWQsXG4gICAgICAgICAgICB5bGlzdCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoc2hvd0NvbHVtblRyZWUgJiYgdGhpcy5vYmplY3RzLmNvbHVtblRyZWUhPT11bmRlZmluZWQpe1xuICAgICAgICAgICAgdGhpcy52aXN1YWxDb21wb25lbnRzLmNvbHVtblRyZWUgPSB0aGlzLl9yZW5kZXJUcmVlKFwiY29sdW1uXCIsIHRoaXMub2JqZWN0cy5jb2x1bW5UcmVlLCB0aGlzLmNvbmZpZy5wYW5lbHMudG9wKTtcbiAgICAgICAgICAgIHhsaXN0ID0gdGhpcy5vYmplY3RzLmNvbHVtblRyZWUueFNjYWxlLmRvbWFpbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaG93Um93VHJlZSAmJiB0aGlzLm9iamVjdHMucm93VHJlZSAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIHRoaXMudmlzdWFsQ29tcG9uZW50cy5yb3dUcmVlID0gdGhpcy5fcmVuZGVyVHJlZShcInJvd1wiLCB0aGlzLm9iamVjdHMucm93VHJlZSwgdGhpcy5jb25maWcucGFuZWxzLmxlZnQpO1xuICAgICAgICAgICAgeWxpc3QgPSB0aGlzLm9iamVjdHMucm93VHJlZS55U2NhbGUuZG9tYWluKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50aXRsZSAhPSAnJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy50aXRsZSk7XG4gICAgICAgICAgICBzZWxlY3QoYCMke2RvbUlkfS1zdmdgKS5hcHBlbmQoJ3RleHQnKVxuICAgICAgICAgICAgICAgIC5hdHRyKCd4JywgMClcbiAgICAgICAgICAgICAgICAuYXR0cigneScsIDIwKVxuICAgICAgICAgICAgICAgIC50ZXh0KHRoaXMudGl0bGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmVuZGVySGVhdG1hcCh0aGlzLm9iamVjdHMuaGVhdG1hcCwgeGxpc3QsIHlsaXN0LCB0aWNrcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVuZGVyIGEgbmV3aWNrIHRyZWVcbiAgICAgKiBAcGFyYW0gZGlyZWN0aW9uIHtlbnVtfSBjb2x1bW4gb3Igcm93XG4gICAgICogQHBhcmFtIHRyZWUge0RlbmRyb2dyYW19IGEgRGVuZHJvZ3JhbSBvYmplY3RcbiAgICAgKiBAcGFyYW0gY29uZmlnIHtPYmplY3R9IGEgcGFuZWwgY29uZmlnIHdpdGggYXR0cmlidXRlczogeCwgeSwgd2lkdGggYW5kIGhlaWdodFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3JlbmRlclRyZWUoZGlyZWN0aW9uLCB0cmVlLCBjb25maWcpe1xuICAgICAgICBsZXQgc3ZnID0gdGhpcy52aXN1YWxDb21wb25lbnRzLnN2ZztcbiAgICAgICAgY29uc3QgbGFiZWxDbGFzcyA9IGRpcmVjdGlvbj09XCJyb3dcIj9cIi5leHAtbWFwLXlsYWJlbFwiOlwiLmV4cC1tYXAteGxhYmVsXCI7XG5cbiAgICAgICAgY29uc3QgdG9vbHRpcCA9IHRoaXMudmlzdWFsQ29tcG9uZW50cy50b29sdGlwO1xuICAgICAgICBjb25zdCBnID0gc3ZnLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgIC5hdHRyKFwiaWRcIiwgY29uZmlnLmlkKVxuICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke2NvbmZpZy54fSwgJHtjb25maWcueX0pYCk7XG4gICAgICAgIHRyZWUuZHJhdyhnLCBjb25maWcudywgY29uZmlnLmgpO1xuXG4gICAgICAgIGNvbnN0IG1vdXNlb3V0ID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHNlbGVjdCh0aGlzKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiclwiLCAyKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcIiMzMzNcIik7XG4gICAgICAgICAgICBzdmcuc2VsZWN0QWxsKGxhYmVsQ2xhc3MpLmNsYXNzZWQoXCJoaWdobGlnaHRlZFwiLCBmYWxzZSk7XG4gICAgICAgICAgICBzdmcuc2VsZWN0QWxsKFwiLmxlYWYtY29sb3JcIikuY2xhc3NlZChcImhpZ2hsaWdodGVkXCIsIGZhbHNlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBtb3VzZW92ZXIgPSBmdW5jdGlvbihkKXtcbiAgICAgICAgICAgIHNlbGVjdCh0aGlzKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiclwiLCA2KVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcInJlZFwiKTtcbiAgICAgICAgICAgIGxldCBpZHMgPSBkLmxlYXZlcygpLm1hcCgobm9kZSk9Pm5vZGUuZGF0YS5uYW1lKTtcbiAgICAgICAgICAgIHN2Zy5zZWxlY3RBbGwobGFiZWxDbGFzcylcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChsYWJlbCk9Pmlkcy5pbmNsdWRlcyhsYWJlbCkpXG4gICAgICAgICAgICAgICAgLmNsYXNzZWQoXCJoaWdobGlnaHRlZFwiLCB0cnVlKTtcbiAgICAgICAgICAgIHN2Zy5zZWxlY3RBbGwoXCIubGVhZi1jb2xvclwiKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGxhYmVsKT0+aWRzLmluY2x1ZGVzKGxhYmVsKSlcbiAgICAgICAgICAgICAgICAuY2xhc3NlZChcImhpZ2hsaWdodGVkXCIsIHRydWUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGcuc2VsZWN0QWxsKFwiLmRlbmRyb2dyYW0tbm9kZVwiKVxuICAgICAgICAgICAgLm9uKFwibW91c2VvdmVyXCIsIG1vdXNlb3ZlcilcbiAgICAgICAgICAgIC5vbihcIm1vdXNlb3V0XCIsIG1vdXNlb3V0KTtcbiAgICAgICAgcmV0dXJuIGc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVuZGVyIHRoZSBoZWF0bWFwIGFuZCBjb2xvciBsZWdlbmRcbiAgICAgKiBAcGFyYW0gaGVhdG1hcCB7SGVhdG1hcH0gYSBIZWF0bWFwIG9iamVjdFxuICAgICAqIEBwYXJhbSB4TGlzdCB7TGlzdH0gYSBsaXN0IG9mIHggbGFiZWxzXG4gICAgICogQHBhcmFtIHlMaXN0IHtMaXN0fSBhIGxpc3Qgb2YgeSBsYWJlbHNcbiAgICAgKiBAcGFyYW0gdGlja3Mge0ludGVnZXJ9IHRoZSBudW1iZXIgb2YgYmlucyBpbiB0aGUgY29sb3IgbGVnZW5kXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfcmVuZGVySGVhdG1hcChoZWF0bWFwLCB4TGlzdCwgeUxpc3QsIHRpY2tzPTUpe1xuICAgICAgICBsZXQgZG9tID0gdGhpcy52aXN1YWxDb21wb25lbnRzLnN2ZztcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWcucGFuZWxzLm1haW47XG4gICAgICAgIGNvbnN0IGcgPSBkb20uYXBwZW5kKFwiZ1wiKVxuICAgICAgICAgICAgLmF0dHIoXCJpZFwiLCBjb25maWcuaWQpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7Y29uZmlnLnh9LCAke2NvbmZpZy55fSlgKTtcbiAgICAgICAgaGVhdG1hcC5yZWRyYXcoZywgeExpc3QsIHlMaXN0LCB7dzogY29uZmlnLncsIGg6IGNvbmZpZy5ofSk7XG4gICAgICAgIGhlYXRtYXAuZHJhd0NvbG9yTGVnZW5kKGRvbSwgdGhpcy5jb25maWcucGFuZWxzLmxlZ2VuZCwgdGlja3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkanVzdCB0aGUgbGF5b3V0IGRpbWVuc2lvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCBkYXRhXG4gICAgICogQHBhcmFtIGxlZ2VuZFBvcyB7U3RyaW5nfSBib3R0b20gb3IgdG9wXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfdXBkYXRlQ29uZmlnKGxlZ2VuZFBvcyl7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLm9iamVjdHMucm93VHJlZT09PXVuZGVmaW5lZD8xOnRoaXMub2JqZWN0cy5yb3dUcmVlLmxlYXZlcy5sZW5ndGg7XG5cbiAgICAgICAgLy8gdXBkYXRlcyB0aGUgbGVmdCBwYW5lbCdzIGhlaWdodCBiYXNlZCBvbiB0aGUgZGF0YVxuICAgICAgICB0aGlzLmNvbmZpZy5wYW5lbHMubGVmdC5oID0gdGhpcy5jb25maWcuY2VsbC5oICogcm93czwyMD8yMDp0aGlzLmNvbmZpZy5jZWxsLmggKiByb3dzO1xuICAgICAgICB0aGlzLmNvbmZpZy5oICs9IHRoaXMuY29uZmlnLnBhbmVscy5sZWZ0Lmg7XG4gICAgICAgIHRoaXMuY29uZmlnLnBhbmVscy5tYWluLmggPSB0aGlzLmNvbmZpZy5wYW5lbHMubGVmdC5oO1xuICAgICAgICBpZihsZWdlbmRQb3M9PVwiYm90dG9tXCIpIHRoaXMuY29uZmlnLnBhbmVscy5sZWdlbmQueSArPSB0aGlzLmNvbmZpZy5wYW5lbHMubWFpbi5oICsgdGhpcy5jb25maWcucGFuZWxzLm1haW4ueCArIDUwO1xuXG5cbiAgICB9XG59IiwidmFyIHBpID0gTWF0aC5QSSxcbiAgICB0YXUgPSAyICogcGksXG4gICAgZXBzaWxvbiA9IDFlLTYsXG4gICAgdGF1RXBzaWxvbiA9IHRhdSAtIGVwc2lsb247XG5cbmZ1bmN0aW9uIFBhdGgoKSB7XG4gIHRoaXMuX3gwID0gdGhpcy5feTAgPSAvLyBzdGFydCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgdGhpcy5feDEgPSB0aGlzLl95MSA9IG51bGw7IC8vIGVuZCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgdGhpcy5fID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gcGF0aCgpIHtcbiAgcmV0dXJuIG5ldyBQYXRoO1xufVxuXG5QYXRoLnByb3RvdHlwZSA9IHBhdGgucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogUGF0aCxcbiAgbW92ZVRvOiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gwID0gdGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MCA9IHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBjbG9zZVBhdGg6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl94MSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5feDEgPSB0aGlzLl94MCwgdGhpcy5feTEgPSB0aGlzLl95MDtcbiAgICAgIHRoaXMuXyArPSBcIlpcIjtcbiAgICB9XG4gIH0sXG4gIGxpbmVUbzogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIkxcIiArICh0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBxdWFkcmF0aWNDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJRXCIgKyAoK3gxKSArIFwiLFwiICsgKCt5MSkgKyBcIixcIiArICh0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBiZXppZXJDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIkNcIiArICgreDEpICsgXCIsXCIgKyAoK3kxKSArIFwiLFwiICsgKCt4MikgKyBcIixcIiArICgreTIpICsgXCIsXCIgKyAodGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgYXJjVG86IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCByKSB7XG4gICAgeDEgPSAreDEsIHkxID0gK3kxLCB4MiA9ICt4MiwgeTIgPSAreTIsIHIgPSArcjtcbiAgICB2YXIgeDAgPSB0aGlzLl94MSxcbiAgICAgICAgeTAgPSB0aGlzLl95MSxcbiAgICAgICAgeDIxID0geDIgLSB4MSxcbiAgICAgICAgeTIxID0geTIgLSB5MSxcbiAgICAgICAgeDAxID0geDAgLSB4MSxcbiAgICAgICAgeTAxID0geTAgLSB5MSxcbiAgICAgICAgbDAxXzIgPSB4MDEgKiB4MDEgKyB5MDEgKiB5MDE7XG5cbiAgICAvLyBJcyB0aGUgcmFkaXVzIG5lZ2F0aXZlPyBFcnJvci5cbiAgICBpZiAociA8IDApIHRocm93IG5ldyBFcnJvcihcIm5lZ2F0aXZlIHJhZGl1czogXCIgKyByKTtcblxuICAgIC8vIElzIHRoaXMgcGF0aCBlbXB0eT8gTW92ZSB0byAoeDEseTEpLlxuICAgIGlmICh0aGlzLl94MSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gxID0geDEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSk7XG4gICAgfVxuXG4gICAgLy8gT3IsIGlzICh4MSx5MSkgY29pbmNpZGVudCB3aXRoICh4MCx5MCk/IERvIG5vdGhpbmcuXG4gICAgZWxzZSBpZiAoIShsMDFfMiA+IGVwc2lsb24pKTtcblxuICAgIC8vIE9yLCBhcmUgKHgwLHkwKSwgKHgxLHkxKSBhbmQgKHgyLHkyKSBjb2xsaW5lYXI/XG4gICAgLy8gRXF1aXZhbGVudGx5LCBpcyAoeDEseTEpIGNvaW5jaWRlbnQgd2l0aCAoeDIseTIpP1xuICAgIC8vIE9yLCBpcyB0aGUgcmFkaXVzIHplcm8/IExpbmUgdG8gKHgxLHkxKS5cbiAgICBlbHNlIGlmICghKE1hdGguYWJzKHkwMSAqIHgyMSAtIHkyMSAqIHgwMSkgPiBlcHNpbG9uKSB8fCAhcikge1xuICAgICAgdGhpcy5fICs9IFwiTFwiICsgKHRoaXMuX3gxID0geDEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSk7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlLCBkcmF3IGFuIGFyYyFcbiAgICBlbHNlIHtcbiAgICAgIHZhciB4MjAgPSB4MiAtIHgwLFxuICAgICAgICAgIHkyMCA9IHkyIC0geTAsXG4gICAgICAgICAgbDIxXzIgPSB4MjEgKiB4MjEgKyB5MjEgKiB5MjEsXG4gICAgICAgICAgbDIwXzIgPSB4MjAgKiB4MjAgKyB5MjAgKiB5MjAsXG4gICAgICAgICAgbDIxID0gTWF0aC5zcXJ0KGwyMV8yKSxcbiAgICAgICAgICBsMDEgPSBNYXRoLnNxcnQobDAxXzIpLFxuICAgICAgICAgIGwgPSByICogTWF0aC50YW4oKHBpIC0gTWF0aC5hY29zKChsMjFfMiArIGwwMV8yIC0gbDIwXzIpIC8gKDIgKiBsMjEgKiBsMDEpKSkgLyAyKSxcbiAgICAgICAgICB0MDEgPSBsIC8gbDAxLFxuICAgICAgICAgIHQyMSA9IGwgLyBsMjE7XG5cbiAgICAgIC8vIElmIHRoZSBzdGFydCB0YW5nZW50IGlzIG5vdCBjb2luY2lkZW50IHdpdGggKHgwLHkwKSwgbGluZSB0by5cbiAgICAgIGlmIChNYXRoLmFicyh0MDEgLSAxKSA+IGVwc2lsb24pIHtcbiAgICAgICAgdGhpcy5fICs9IFwiTFwiICsgKHgxICsgdDAxICogeDAxKSArIFwiLFwiICsgKHkxICsgdDAxICogeTAxKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fICs9IFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsMCxcIiArICgrKHkwMSAqIHgyMCA+IHgwMSAqIHkyMCkpICsgXCIsXCIgKyAodGhpcy5feDEgPSB4MSArIHQyMSAqIHgyMSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkxICsgdDIxICogeTIxKTtcbiAgICB9XG4gIH0sXG4gIGFyYzogZnVuY3Rpb24oeCwgeSwgciwgYTAsIGExLCBjY3cpIHtcbiAgICB4ID0gK3gsIHkgPSAreSwgciA9ICtyO1xuICAgIHZhciBkeCA9IHIgKiBNYXRoLmNvcyhhMCksXG4gICAgICAgIGR5ID0gciAqIE1hdGguc2luKGEwKSxcbiAgICAgICAgeDAgPSB4ICsgZHgsXG4gICAgICAgIHkwID0geSArIGR5LFxuICAgICAgICBjdyA9IDEgXiBjY3csXG4gICAgICAgIGRhID0gY2N3ID8gYTAgLSBhMSA6IGExIC0gYTA7XG5cbiAgICAvLyBJcyB0aGUgcmFkaXVzIG5lZ2F0aXZlPyBFcnJvci5cbiAgICBpZiAociA8IDApIHRocm93IG5ldyBFcnJvcihcIm5lZ2F0aXZlIHJhZGl1czogXCIgKyByKTtcblxuICAgIC8vIElzIHRoaXMgcGF0aCBlbXB0eT8gTW92ZSB0byAoeDAseTApLlxuICAgIGlmICh0aGlzLl94MSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fICs9IFwiTVwiICsgeDAgKyBcIixcIiArIHkwO1xuICAgIH1cblxuICAgIC8vIE9yLCBpcyAoeDAseTApIG5vdCBjb2luY2lkZW50IHdpdGggdGhlIHByZXZpb3VzIHBvaW50PyBMaW5lIHRvICh4MCx5MCkuXG4gICAgZWxzZSBpZiAoTWF0aC5hYnModGhpcy5feDEgLSB4MCkgPiBlcHNpbG9uIHx8IE1hdGguYWJzKHRoaXMuX3kxIC0geTApID4gZXBzaWxvbikge1xuICAgICAgdGhpcy5fICs9IFwiTFwiICsgeDAgKyBcIixcIiArIHkwO1xuICAgIH1cblxuICAgIC8vIElzIHRoaXMgYXJjIGVtcHR5PyBXZeKAmXJlIGRvbmUuXG4gICAgaWYgKCFyKSByZXR1cm47XG5cbiAgICAvLyBEb2VzIHRoZSBhbmdsZSBnbyB0aGUgd3Jvbmcgd2F5PyBGbGlwIHRoZSBkaXJlY3Rpb24uXG4gICAgaWYgKGRhIDwgMCkgZGEgPSBkYSAlIHRhdSArIHRhdTtcblxuICAgIC8vIElzIHRoaXMgYSBjb21wbGV0ZSBjaXJjbGU/IERyYXcgdHdvIGFyY3MgdG8gY29tcGxldGUgdGhlIGNpcmNsZS5cbiAgICBpZiAoZGEgPiB0YXVFcHNpbG9uKSB7XG4gICAgICB0aGlzLl8gKz0gXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCwxLFwiICsgY3cgKyBcIixcIiArICh4IC0gZHgpICsgXCIsXCIgKyAoeSAtIGR5KSArIFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsMSxcIiArIGN3ICsgXCIsXCIgKyAodGhpcy5feDEgPSB4MCkgKyBcIixcIiArICh0aGlzLl95MSA9IHkwKTtcbiAgICB9XG5cbiAgICAvLyBJcyB0aGlzIGFyYyBub24tZW1wdHk/IERyYXcgYW4gYXJjIVxuICAgIGVsc2UgaWYgKGRhID4gZXBzaWxvbikge1xuICAgICAgdGhpcy5fICs9IFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsXCIgKyAoKyhkYSA+PSBwaSkpICsgXCIsXCIgKyBjdyArIFwiLFwiICsgKHRoaXMuX3gxID0geCArIHIgKiBNYXRoLmNvcyhhMSkpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5ICsgciAqIE1hdGguc2luKGExKSk7XG4gICAgfVxuICB9LFxuICByZWN0OiBmdW5jdGlvbih4LCB5LCB3LCBoKSB7XG4gICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gwID0gdGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MCA9IHRoaXMuX3kxID0gK3kpICsgXCJoXCIgKyAoK3cpICsgXCJ2XCIgKyAoK2gpICsgXCJoXCIgKyAoLXcpICsgXCJaXCI7XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBwYXRoO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24gY29uc3RhbnQoKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJmdW5jdGlvbiBMaW5lYXIoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuTGluZWFyLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHgsIHkpOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyAvLyBwcm9jZWVkXG4gICAgICBkZWZhdWx0OiB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgTGluZWFyKGNvbnRleHQpO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHgocCkge1xuICByZXR1cm4gcFswXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHkocCkge1xuICByZXR1cm4gcFsxXTtcbn1cbiIsImltcG9ydCB7cGF0aH0gZnJvbSBcImQzLXBhdGhcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuaW1wb3J0IGN1cnZlTGluZWFyIGZyb20gXCIuL2N1cnZlL2xpbmVhclwiO1xuaW1wb3J0IHt4IGFzIHBvaW50WCwgeSBhcyBwb2ludFl9IGZyb20gXCIuL3BvaW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgeCA9IHBvaW50WCxcbiAgICAgIHkgPSBwb2ludFksXG4gICAgICBkZWZpbmVkID0gY29uc3RhbnQodHJ1ZSksXG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIGN1cnZlID0gY3VydmVMaW5lYXIsXG4gICAgICBvdXRwdXQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGxpbmUoZGF0YSkge1xuICAgIHZhciBpLFxuICAgICAgICBuID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIGQsXG4gICAgICAgIGRlZmluZWQwID0gZmFsc2UsXG4gICAgICAgIGJ1ZmZlcjtcblxuICAgIGlmIChjb250ZXh0ID09IG51bGwpIG91dHB1dCA9IGN1cnZlKGJ1ZmZlciA9IHBhdGgoKSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IG47ICsraSkge1xuICAgICAgaWYgKCEoaSA8IG4gJiYgZGVmaW5lZChkID0gZGF0YVtpXSwgaSwgZGF0YSkpID09PSBkZWZpbmVkMCkge1xuICAgICAgICBpZiAoZGVmaW5lZDAgPSAhZGVmaW5lZDApIG91dHB1dC5saW5lU3RhcnQoKTtcbiAgICAgICAgZWxzZSBvdXRwdXQubGluZUVuZCgpO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmluZWQwKSBvdXRwdXQucG9pbnQoK3goZCwgaSwgZGF0YSksICt5KGQsIGksIGRhdGEpKTtcbiAgICB9XG5cbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gb3V0cHV0ID0gbnVsbCwgYnVmZmVyICsgXCJcIiB8fCBudWxsO1xuICB9XG5cbiAgbGluZS54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgbGluZSkgOiB4O1xuICB9O1xuXG4gIGxpbmUueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGxpbmUpIDogeTtcbiAgfTtcblxuICBsaW5lLmRlZmluZWQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZGVmaW5lZCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgbGluZSkgOiBkZWZpbmVkO1xuICB9O1xuXG4gIGxpbmUuY3VydmUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY3VydmUgPSBfLCBjb250ZXh0ICE9IG51bGwgJiYgKG91dHB1dCA9IGN1cnZlKGNvbnRleHQpKSwgbGluZSkgOiBjdXJ2ZTtcbiAgfTtcblxuICBsaW5lLmNvbnRleHQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoXyA9PSBudWxsID8gY29udGV4dCA9IG91dHB1dCA9IG51bGwgOiBvdXRwdXQgPSBjdXJ2ZShjb250ZXh0ID0gXyksIGxpbmUpIDogY29udGV4dDtcbiAgfTtcblxuICByZXR1cm4gbGluZTtcbn1cbiIsImltcG9ydCB7cGF0aH0gZnJvbSBcImQzLXBhdGhcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuaW1wb3J0IGN1cnZlTGluZWFyIGZyb20gXCIuL2N1cnZlL2xpbmVhclwiO1xuaW1wb3J0IGxpbmUgZnJvbSBcIi4vbGluZVwiO1xuaW1wb3J0IHt4IGFzIHBvaW50WCwgeSBhcyBwb2ludFl9IGZyb20gXCIuL3BvaW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgeDAgPSBwb2ludFgsXG4gICAgICB4MSA9IG51bGwsXG4gICAgICB5MCA9IGNvbnN0YW50KDApLFxuICAgICAgeTEgPSBwb2ludFksXG4gICAgICBkZWZpbmVkID0gY29uc3RhbnQodHJ1ZSksXG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIGN1cnZlID0gY3VydmVMaW5lYXIsXG4gICAgICBvdXRwdXQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGFyZWEoZGF0YSkge1xuICAgIHZhciBpLFxuICAgICAgICBqLFxuICAgICAgICBrLFxuICAgICAgICBuID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIGQsXG4gICAgICAgIGRlZmluZWQwID0gZmFsc2UsXG4gICAgICAgIGJ1ZmZlcixcbiAgICAgICAgeDB6ID0gbmV3IEFycmF5KG4pLFxuICAgICAgICB5MHogPSBuZXcgQXJyYXkobik7XG5cbiAgICBpZiAoY29udGV4dCA9PSBudWxsKSBvdXRwdXQgPSBjdXJ2ZShidWZmZXIgPSBwYXRoKCkpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8PSBuOyArK2kpIHtcbiAgICAgIGlmICghKGkgPCBuICYmIGRlZmluZWQoZCA9IGRhdGFbaV0sIGksIGRhdGEpKSA9PT0gZGVmaW5lZDApIHtcbiAgICAgICAgaWYgKGRlZmluZWQwID0gIWRlZmluZWQwKSB7XG4gICAgICAgICAgaiA9IGk7XG4gICAgICAgICAgb3V0cHV0LmFyZWFTdGFydCgpO1xuICAgICAgICAgIG91dHB1dC5saW5lU3RhcnQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRwdXQubGluZUVuZCgpO1xuICAgICAgICAgIG91dHB1dC5saW5lU3RhcnQoKTtcbiAgICAgICAgICBmb3IgKGsgPSBpIC0gMTsgayA+PSBqOyAtLWspIHtcbiAgICAgICAgICAgIG91dHB1dC5wb2ludCh4MHpba10sIHkweltrXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dHB1dC5saW5lRW5kKCk7XG4gICAgICAgICAgb3V0cHV0LmFyZWFFbmQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRlZmluZWQwKSB7XG4gICAgICAgIHgweltpXSA9ICt4MChkLCBpLCBkYXRhKSwgeTB6W2ldID0gK3kwKGQsIGksIGRhdGEpO1xuICAgICAgICBvdXRwdXQucG9pbnQoeDEgPyAreDEoZCwgaSwgZGF0YSkgOiB4MHpbaV0sIHkxID8gK3kxKGQsIGksIGRhdGEpIDogeTB6W2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gb3V0cHV0ID0gbnVsbCwgYnVmZmVyICsgXCJcIiB8fCBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gYXJlYWxpbmUoKSB7XG4gICAgcmV0dXJuIGxpbmUoKS5kZWZpbmVkKGRlZmluZWQpLmN1cnZlKGN1cnZlKS5jb250ZXh0KGNvbnRleHQpO1xuICB9XG5cbiAgYXJlYS54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHgwID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHgxID0gbnVsbCwgYXJlYSkgOiB4MDtcbiAgfTtcblxuICBhcmVhLngwID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHgwID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyZWEpIDogeDA7XG4gIH07XG5cbiAgYXJlYS54MSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4MSA9IF8gPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJlYSkgOiB4MTtcbiAgfTtcblxuICBhcmVhLnkgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeTAgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgeTEgPSBudWxsLCBhcmVhKSA6IHkwO1xuICB9O1xuXG4gIGFyZWEueTAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeTAgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJlYSkgOiB5MDtcbiAgfTtcblxuICBhcmVhLnkxID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHkxID0gXyA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmVhKSA6IHkxO1xuICB9O1xuXG4gIGFyZWEubGluZVgwID1cbiAgYXJlYS5saW5lWTAgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYXJlYWxpbmUoKS54KHgwKS55KHkwKTtcbiAgfTtcblxuICBhcmVhLmxpbmVZMSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBhcmVhbGluZSgpLngoeDApLnkoeTEpO1xuICB9O1xuXG4gIGFyZWEubGluZVgxID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGFyZWFsaW5lKCkueCh4MSkueSh5MCk7XG4gIH07XG5cbiAgYXJlYS5kZWZpbmVkID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRlZmluZWQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIGFyZWEpIDogZGVmaW5lZDtcbiAgfTtcblxuICBhcmVhLmN1cnZlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGN1cnZlID0gXywgY29udGV4dCAhPSBudWxsICYmIChvdXRwdXQgPSBjdXJ2ZShjb250ZXh0KSksIGFyZWEpIDogY3VydmU7XG4gIH07XG5cbiAgYXJlYS5jb250ZXh0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKF8gPT0gbnVsbCA/IGNvbnRleHQgPSBvdXRwdXQgPSBudWxsIDogb3V0cHV0ID0gY3VydmUoY29udGV4dCA9IF8pLCBhcmVhKSA6IGNvbnRleHQ7XG4gIH07XG5cbiAgcmV0dXJuIGFyZWE7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gcG9pbnQodGhhdCwgeCwgeSkge1xuICB0aGF0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oXG4gICAgdGhhdC5feDEgKyB0aGF0Ll9rICogKHRoYXQuX3gyIC0gdGhhdC5feDApLFxuICAgIHRoYXQuX3kxICsgdGhhdC5fayAqICh0aGF0Ll95MiAtIHRoYXQuX3kwKSxcbiAgICB0aGF0Ll94MiArIHRoYXQuX2sgKiAodGhhdC5feDEgLSB4KSxcbiAgICB0aGF0Ll95MiArIHRoYXQuX2sgKiAodGhhdC5feTEgLSB5KSxcbiAgICB0aGF0Ll94MixcbiAgICB0aGF0Ll95MlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2FyZGluYWwoY29udGV4dCwgdGVuc2lvbikge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5fayA9ICgxIC0gdGVuc2lvbikgLyA2O1xufVxuXG5DYXJkaW5hbC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gdGhpcy5feTIgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDI6IHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLCB0aGlzLl95Mik7IGJyZWFrO1xuICAgICAgY2FzZSAzOiBwb2ludCh0aGlzLCB0aGlzLl94MSwgdGhpcy5feTEpOyBicmVhaztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDEpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IHRoaXMuX3gxID0geCwgdGhpcy5feTEgPSB5OyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyAvLyBwcm9jZWVkXG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0gdGhpcy5feDIsIHRoaXMuX3gyID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHRoaXMuX3kyLCB0aGlzLl95MiA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20odGVuc2lvbikge1xuXG4gIGZ1bmN0aW9uIGNhcmRpbmFsKGNvbnRleHQpIHtcbiAgICByZXR1cm4gbmV3IENhcmRpbmFsKGNvbnRleHQsIHRlbnNpb24pO1xuICB9XG5cbiAgY2FyZGluYWwudGVuc2lvbiA9IGZ1bmN0aW9uKHRlbnNpb24pIHtcbiAgICByZXR1cm4gY3VzdG9tKCt0ZW5zaW9uKTtcbiAgfTtcblxuICByZXR1cm4gY2FyZGluYWw7XG59KSgwKTtcbiIsImZ1bmN0aW9uIHNpZ24oeCkge1xuICByZXR1cm4geCA8IDAgPyAtMSA6IDE7XG59XG5cbi8vIENhbGN1bGF0ZSB0aGUgc2xvcGVzIG9mIHRoZSB0YW5nZW50cyAoSGVybWl0ZS10eXBlIGludGVycG9sYXRpb24pIGJhc2VkIG9uXG4vLyB0aGUgZm9sbG93aW5nIHBhcGVyOiBTdGVmZmVuLCBNLiAxOTkwLiBBIFNpbXBsZSBNZXRob2QgZm9yIE1vbm90b25pY1xuLy8gSW50ZXJwb2xhdGlvbiBpbiBPbmUgRGltZW5zaW9uLiBBc3Ryb25vbXkgYW5kIEFzdHJvcGh5c2ljcywgVm9sLiAyMzksIE5PLlxuLy8gTk9WKElJKSwgUC4gNDQzLCAxOTkwLlxuZnVuY3Rpb24gc2xvcGUzKHRoYXQsIHgyLCB5Mikge1xuICB2YXIgaDAgPSB0aGF0Ll94MSAtIHRoYXQuX3gwLFxuICAgICAgaDEgPSB4MiAtIHRoYXQuX3gxLFxuICAgICAgczAgPSAodGhhdC5feTEgLSB0aGF0Ll95MCkgLyAoaDAgfHwgaDEgPCAwICYmIC0wKSxcbiAgICAgIHMxID0gKHkyIC0gdGhhdC5feTEpIC8gKGgxIHx8IGgwIDwgMCAmJiAtMCksXG4gICAgICBwID0gKHMwICogaDEgKyBzMSAqIGgwKSAvIChoMCArIGgxKTtcbiAgcmV0dXJuIChzaWduKHMwKSArIHNpZ24oczEpKSAqIE1hdGgubWluKE1hdGguYWJzKHMwKSwgTWF0aC5hYnMoczEpLCAwLjUgKiBNYXRoLmFicyhwKSkgfHwgMDtcbn1cblxuLy8gQ2FsY3VsYXRlIGEgb25lLXNpZGVkIHNsb3BlLlxuZnVuY3Rpb24gc2xvcGUyKHRoYXQsIHQpIHtcbiAgdmFyIGggPSB0aGF0Ll94MSAtIHRoYXQuX3gwO1xuICByZXR1cm4gaCA/ICgzICogKHRoYXQuX3kxIC0gdGhhdC5feTApIC8gaCAtIHQpIC8gMiA6IHQ7XG59XG5cbi8vIEFjY29yZGluZyB0byBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DdWJpY19IZXJtaXRlX3NwbGluZSNSZXByZXNlbnRhdGlvbnNcbi8vIFwieW91IGNhbiBleHByZXNzIGN1YmljIEhlcm1pdGUgaW50ZXJwb2xhdGlvbiBpbiB0ZXJtcyBvZiBjdWJpYyBCw6l6aWVyIGN1cnZlc1xuLy8gd2l0aCByZXNwZWN0IHRvIHRoZSBmb3VyIHZhbHVlcyBwMCwgcDAgKyBtMCAvIDMsIHAxIC0gbTEgLyAzLCBwMVwiLlxuZnVuY3Rpb24gcG9pbnQodGhhdCwgdDAsIHQxKSB7XG4gIHZhciB4MCA9IHRoYXQuX3gwLFxuICAgICAgeTAgPSB0aGF0Ll95MCxcbiAgICAgIHgxID0gdGhhdC5feDEsXG4gICAgICB5MSA9IHRoYXQuX3kxLFxuICAgICAgZHggPSAoeDEgLSB4MCkgLyAzO1xuICB0aGF0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oeDAgKyBkeCwgeTAgKyBkeCAqIHQwLCB4MSAtIGR4LCB5MSAtIGR4ICogdDEsIHgxLCB5MSk7XG59XG5cbmZ1bmN0aW9uIE1vbm90b25lWChjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5Nb25vdG9uZVgucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPVxuICAgIHRoaXMuX3QwID0gTmFOO1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAyOiB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSwgdGhpcy5feTEpOyBicmVhaztcbiAgICAgIGNhc2UgMzogcG9pbnQodGhpcywgdGhpcy5fdDAsIHNsb3BlMih0aGlzLCB0aGlzLl90MCkpOyBicmVhaztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDEpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB2YXIgdDEgPSBOYU47XG5cbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBpZiAoeCA9PT0gdGhpcy5feDEgJiYgeSA9PT0gdGhpcy5feTEpIHJldHVybjsgLy8gSWdub3JlIGNvaW5jaWRlbnQgcG9pbnRzLlxuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgYnJlYWs7XG4gICAgICBjYXNlIDI6IHRoaXMuX3BvaW50ID0gMzsgcG9pbnQodGhpcywgc2xvcGUyKHRoaXMsIHQxID0gc2xvcGUzKHRoaXMsIHgsIHkpKSwgdDEpOyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHRoaXMuX3QwLCB0MSA9IHNsb3BlMyh0aGlzLCB4LCB5KSk7IGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHk7XG4gICAgdGhpcy5fdDAgPSB0MTtcbiAgfVxufVxuXG5mdW5jdGlvbiBNb25vdG9uZVkoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gbmV3IFJlZmxlY3RDb250ZXh0KGNvbnRleHQpO1xufVxuXG4oTW9ub3RvbmVZLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTW9ub3RvbmVYLnByb3RvdHlwZSkpLnBvaW50ID0gZnVuY3Rpb24oeCwgeSkge1xuICBNb25vdG9uZVgucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcywgeSwgeCk7XG59O1xuXG5mdW5jdGlvbiBSZWZsZWN0Q29udGV4dChjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5SZWZsZWN0Q29udGV4dC5wcm90b3R5cGUgPSB7XG4gIG1vdmVUbzogZnVuY3Rpb24oeCwgeSkgeyB0aGlzLl9jb250ZXh0Lm1vdmVUbyh5LCB4KTsgfSxcbiAgY2xvc2VQYXRoOiBmdW5jdGlvbigpIHsgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTsgfSxcbiAgbGluZVRvOiBmdW5jdGlvbih4LCB5KSB7IHRoaXMuX2NvbnRleHQubGluZVRvKHksIHgpOyB9LFxuICBiZXppZXJDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgeCwgeSkgeyB0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oeTEsIHgxLCB5MiwgeDIsIHksIHgpOyB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gbW9ub3RvbmVYKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBNb25vdG9uZVgoY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb25vdG9uZVkoY29udGV4dCkge1xuICByZXR1cm4gbmV3IE1vbm90b25lWShjb250ZXh0KTtcbn1cbiIsImltcG9ydCB7ZXZlbnR9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcHJvcGFnYXRpb24oKSB7XG4gIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59XG4iLCJpbXBvcnQge3NlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IG5vZXZlbnQgZnJvbSBcIi4vbm9ldmVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2aWV3KSB7XG4gIHZhciByb290ID0gdmlldy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4gICAgICBzZWxlY3Rpb24gPSBzZWxlY3Qodmlldykub24oXCJkcmFnc3RhcnQuZHJhZ1wiLCBub2V2ZW50LCB0cnVlKTtcbiAgaWYgKFwib25zZWxlY3RzdGFydFwiIGluIHJvb3QpIHtcbiAgICBzZWxlY3Rpb24ub24oXCJzZWxlY3RzdGFydC5kcmFnXCIsIG5vZXZlbnQsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIHJvb3QuX19ub3NlbGVjdCA9IHJvb3Quc3R5bGUuTW96VXNlclNlbGVjdDtcbiAgICByb290LnN0eWxlLk1velVzZXJTZWxlY3QgPSBcIm5vbmVcIjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24geWVzZHJhZyh2aWV3LCBub2NsaWNrKSB7XG4gIHZhciByb290ID0gdmlldy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4gICAgICBzZWxlY3Rpb24gPSBzZWxlY3Qodmlldykub24oXCJkcmFnc3RhcnQuZHJhZ1wiLCBudWxsKTtcbiAgaWYgKG5vY2xpY2spIHtcbiAgICBzZWxlY3Rpb24ub24oXCJjbGljay5kcmFnXCIsIG5vZXZlbnQsIHRydWUpO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHNlbGVjdGlvbi5vbihcImNsaWNrLmRyYWdcIiwgbnVsbCk7IH0sIDApO1xuICB9XG4gIGlmIChcIm9uc2VsZWN0c3RhcnRcIiBpbiByb290KSB7XG4gICAgc2VsZWN0aW9uLm9uKFwic2VsZWN0c3RhcnQuZHJhZ1wiLCBudWxsKTtcbiAgfSBlbHNlIHtcbiAgICByb290LnN0eWxlLk1velVzZXJTZWxlY3QgPSByb290Ll9fbm9zZWxlY3Q7XG4gICAgZGVsZXRlIHJvb3QuX19ub3NlbGVjdDtcbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRHJhZ0V2ZW50KHRhcmdldCwgdHlwZSwgc3ViamVjdCwgaWQsIGFjdGl2ZSwgeCwgeSwgZHgsIGR5LCBkaXNwYXRjaCkge1xuICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy5zdWJqZWN0ID0gc3ViamVjdDtcbiAgdGhpcy5pZGVudGlmaWVyID0gaWQ7XG4gIHRoaXMuYWN0aXZlID0gYWN0aXZlO1xuICB0aGlzLnggPSB4O1xuICB0aGlzLnkgPSB5O1xuICB0aGlzLmR4ID0gZHg7XG4gIHRoaXMuZHkgPSBkeTtcbiAgdGhpcy5fID0gZGlzcGF0Y2g7XG59XG5cbkRyYWdFdmVudC5wcm90b3R5cGUub24gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHZhbHVlID0gdGhpcy5fLm9uLmFwcGx5KHRoaXMuXywgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHZhbHVlID09PSB0aGlzLl8gPyB0aGlzIDogdmFsdWU7XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0YXJnZXQsIHR5cGUsIHNlbGVjdGlvbikge1xuICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247XG59XG4iLCJpbXBvcnQge2V2ZW50fSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBub3Byb3BhZ2F0aW9uKCkge1xuICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufVxuIiwiaW1wb3J0IHtkaXNwYXRjaH0gZnJvbSBcImQzLWRpc3BhdGNoXCI7XG5pbXBvcnQge2RyYWdEaXNhYmxlLCBkcmFnRW5hYmxlfSBmcm9tIFwiZDMtZHJhZ1wiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge2N1c3RvbUV2ZW50LCBldmVudCwgbW91c2UsIHNlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtpbnRlcnJ1cHR9IGZyb20gXCJkMy10cmFuc2l0aW9uXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcbmltcG9ydCBCcnVzaEV2ZW50IGZyb20gXCIuL2V2ZW50XCI7XG5pbXBvcnQgbm9ldmVudCwge25vcHJvcGFnYXRpb259IGZyb20gXCIuL25vZXZlbnRcIjtcblxudmFyIE1PREVfRFJBRyA9IHtuYW1lOiBcImRyYWdcIn0sXG4gICAgTU9ERV9TUEFDRSA9IHtuYW1lOiBcInNwYWNlXCJ9LFxuICAgIE1PREVfSEFORExFID0ge25hbWU6IFwiaGFuZGxlXCJ9LFxuICAgIE1PREVfQ0VOVEVSID0ge25hbWU6IFwiY2VudGVyXCJ9O1xuXG52YXIgWCA9IHtcbiAgbmFtZTogXCJ4XCIsXG4gIGhhbmRsZXM6IFtcImVcIiwgXCJ3XCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHgsIGUpIHsgcmV0dXJuIHggJiYgW1t4WzBdLCBlWzBdWzFdXSwgW3hbMV0sIGVbMV1bMV1dXTsgfSxcbiAgb3V0cHV0OiBmdW5jdGlvbih4eSkgeyByZXR1cm4geHkgJiYgW3h5WzBdWzBdLCB4eVsxXVswXV07IH1cbn07XG5cbnZhciBZID0ge1xuICBuYW1lOiBcInlcIixcbiAgaGFuZGxlczogW1wiblwiLCBcInNcIl0ubWFwKHR5cGUpLFxuICBpbnB1dDogZnVuY3Rpb24oeSwgZSkgeyByZXR1cm4geSAmJiBbW2VbMF1bMF0sIHlbMF1dLCBbZVsxXVswXSwgeVsxXV1dOyB9LFxuICBvdXRwdXQ6IGZ1bmN0aW9uKHh5KSB7IHJldHVybiB4eSAmJiBbeHlbMF1bMV0sIHh5WzFdWzFdXTsgfVxufTtcblxudmFyIFhZID0ge1xuICBuYW1lOiBcInh5XCIsXG4gIGhhbmRsZXM6IFtcIm5cIiwgXCJlXCIsIFwic1wiLCBcIndcIiwgXCJud1wiLCBcIm5lXCIsIFwic2VcIiwgXCJzd1wiXS5tYXAodHlwZSksXG4gIGlucHV0OiBmdW5jdGlvbih4eSkgeyByZXR1cm4geHk7IH0sXG4gIG91dHB1dDogZnVuY3Rpb24oeHkpIHsgcmV0dXJuIHh5OyB9XG59O1xuXG52YXIgY3Vyc29ycyA9IHtcbiAgb3ZlcmxheTogXCJjcm9zc2hhaXJcIixcbiAgc2VsZWN0aW9uOiBcIm1vdmVcIixcbiAgbjogXCJucy1yZXNpemVcIixcbiAgZTogXCJldy1yZXNpemVcIixcbiAgczogXCJucy1yZXNpemVcIixcbiAgdzogXCJldy1yZXNpemVcIixcbiAgbnc6IFwibndzZS1yZXNpemVcIixcbiAgbmU6IFwibmVzdy1yZXNpemVcIixcbiAgc2U6IFwibndzZS1yZXNpemVcIixcbiAgc3c6IFwibmVzdy1yZXNpemVcIlxufTtcblxudmFyIGZsaXBYID0ge1xuICBlOiBcIndcIixcbiAgdzogXCJlXCIsXG4gIG53OiBcIm5lXCIsXG4gIG5lOiBcIm53XCIsXG4gIHNlOiBcInN3XCIsXG4gIHN3OiBcInNlXCJcbn07XG5cbnZhciBmbGlwWSA9IHtcbiAgbjogXCJzXCIsXG4gIHM6IFwiblwiLFxuICBudzogXCJzd1wiLFxuICBuZTogXCJzZVwiLFxuICBzZTogXCJuZVwiLFxuICBzdzogXCJud1wiXG59O1xuXG52YXIgc2lnbnNYID0ge1xuICBvdmVybGF5OiArMSxcbiAgc2VsZWN0aW9uOiArMSxcbiAgbjogbnVsbCxcbiAgZTogKzEsXG4gIHM6IG51bGwsXG4gIHc6IC0xLFxuICBudzogLTEsXG4gIG5lOiArMSxcbiAgc2U6ICsxLFxuICBzdzogLTFcbn07XG5cbnZhciBzaWduc1kgPSB7XG4gIG92ZXJsYXk6ICsxLFxuICBzZWxlY3Rpb246ICsxLFxuICBuOiAtMSxcbiAgZTogbnVsbCxcbiAgczogKzEsXG4gIHc6IG51bGwsXG4gIG53OiAtMSxcbiAgbmU6IC0xLFxuICBzZTogKzEsXG4gIHN3OiArMVxufTtcblxuZnVuY3Rpb24gdHlwZSh0KSB7XG4gIHJldHVybiB7dHlwZTogdH07XG59XG5cbi8vIElnbm9yZSByaWdodC1jbGljaywgc2luY2UgdGhhdCBzaG91bGQgb3BlbiB0aGUgY29udGV4dCBtZW51LlxuZnVuY3Rpb24gZGVmYXVsdEZpbHRlcigpIHtcbiAgcmV0dXJuICFldmVudC5idXR0b247XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRFeHRlbnQoKSB7XG4gIHZhciBzdmcgPSB0aGlzLm93bmVyU1ZHRWxlbWVudCB8fCB0aGlzO1xuICByZXR1cm4gW1swLCAwXSwgW3N2Zy53aWR0aC5iYXNlVmFsLnZhbHVlLCBzdmcuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXTtcbn1cblxuLy8gTGlrZSBkMy5sb2NhbCwgYnV0IHdpdGggdGhlIG5hbWUg4oCcX19icnVzaOKAnSByYXRoZXIgdGhhbiBhdXRvLWdlbmVyYXRlZC5cbmZ1bmN0aW9uIGxvY2FsKG5vZGUpIHtcbiAgd2hpbGUgKCFub2RlLl9fYnJ1c2gpIGlmICghKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSByZXR1cm47XG4gIHJldHVybiBub2RlLl9fYnJ1c2g7XG59XG5cbmZ1bmN0aW9uIGVtcHR5KGV4dGVudCkge1xuICByZXR1cm4gZXh0ZW50WzBdWzBdID09PSBleHRlbnRbMV1bMF1cbiAgICAgIHx8IGV4dGVudFswXVsxXSA9PT0gZXh0ZW50WzFdWzFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJ1c2hTZWxlY3Rpb24obm9kZSkge1xuICB2YXIgc3RhdGUgPSBub2RlLl9fYnJ1c2g7XG4gIHJldHVybiBzdGF0ZSA/IHN0YXRlLmRpbS5vdXRwdXQoc3RhdGUuc2VsZWN0aW9uKSA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicnVzaFgoKSB7XG4gIHJldHVybiBicnVzaChYKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJydXNoWSgpIHtcbiAgcmV0dXJuIGJydXNoKFkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGJydXNoKFhZKTtcbn1cblxuZnVuY3Rpb24gYnJ1c2goZGltKSB7XG4gIHZhciBleHRlbnQgPSBkZWZhdWx0RXh0ZW50LFxuICAgICAgZmlsdGVyID0gZGVmYXVsdEZpbHRlcixcbiAgICAgIGxpc3RlbmVycyA9IGRpc3BhdGNoKGJydXNoLCBcInN0YXJ0XCIsIFwiYnJ1c2hcIiwgXCJlbmRcIiksXG4gICAgICBoYW5kbGVTaXplID0gNixcbiAgICAgIHRvdWNoZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGJydXNoKGdyb3VwKSB7XG4gICAgdmFyIG92ZXJsYXkgPSBncm91cFxuICAgICAgICAucHJvcGVydHkoXCJfX2JydXNoXCIsIGluaXRpYWxpemUpXG4gICAgICAuc2VsZWN0QWxsKFwiLm92ZXJsYXlcIilcbiAgICAgIC5kYXRhKFt0eXBlKFwib3ZlcmxheVwiKV0pO1xuXG4gICAgb3ZlcmxheS5lbnRlcigpLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcIm92ZXJsYXlcIilcbiAgICAgICAgLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcImFsbFwiKVxuICAgICAgICAuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLm92ZXJsYXkpXG4gICAgICAubWVyZ2Uob3ZlcmxheSlcbiAgICAgICAgLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGV4dGVudCA9IGxvY2FsKHRoaXMpLmV4dGVudDtcbiAgICAgICAgICBzZWxlY3QodGhpcylcbiAgICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGV4dGVudFswXVswXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGV4dGVudFswXVsxXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBleHRlbnRbMV1bMF0gLSBleHRlbnRbMF1bMF0pXG4gICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGV4dGVudFsxXVsxXSAtIGV4dGVudFswXVsxXSk7XG4gICAgICAgIH0pO1xuXG4gICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvblwiKVxuICAgICAgLmRhdGEoW3R5cGUoXCJzZWxlY3Rpb25cIildKVxuICAgICAgLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwic2VsZWN0aW9uXCIpXG4gICAgICAgIC5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnMuc2VsZWN0aW9uKVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCIjNzc3XCIpXG4gICAgICAgIC5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsIDAuMylcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCIjZmZmXCIpXG4gICAgICAgIC5hdHRyKFwic2hhcGUtcmVuZGVyaW5nXCIsIFwiY3Jpc3BFZGdlc1wiKTtcblxuICAgIHZhciBoYW5kbGUgPSBncm91cC5zZWxlY3RBbGwoXCIuaGFuZGxlXCIpXG4gICAgICAuZGF0YShkaW0uaGFuZGxlcywgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlOyB9KTtcblxuICAgIGhhbmRsZS5leGl0KCkucmVtb3ZlKCk7XG5cbiAgICBoYW5kbGUuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gXCJoYW5kbGUgaGFuZGxlLS1cIiArIGQudHlwZTsgfSlcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gY3Vyc29yc1tkLnR5cGVdOyB9KTtcblxuICAgIGdyb3VwXG4gICAgICAgIC5lYWNoKHJlZHJhdylcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKVxuICAgICAgICAuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsIFwiYWxsXCIpXG4gICAgICAgIC5zdHlsZShcIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvclwiLCBcInJnYmEoMCwwLDAsMClcIilcbiAgICAgICAgLm9uKFwibW91c2Vkb3duLmJydXNoIHRvdWNoc3RhcnQuYnJ1c2hcIiwgc3RhcnRlZCk7XG4gIH1cblxuICBicnVzaC5tb3ZlID0gZnVuY3Rpb24oZ3JvdXAsIHNlbGVjdGlvbikge1xuICAgIGlmIChncm91cC5zZWxlY3Rpb24pIHtcbiAgICAgIGdyb3VwXG4gICAgICAgICAgLm9uKFwic3RhcnQuYnJ1c2hcIiwgZnVuY3Rpb24oKSB7IGVtaXR0ZXIodGhpcywgYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCk7IH0pXG4gICAgICAgICAgLm9uKFwiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaFwiLCBmdW5jdGlvbigpIHsgZW1pdHRlcih0aGlzLCBhcmd1bWVudHMpLmVuZCgpOyB9KVxuICAgICAgICAgIC50d2VlbihcImJydXNoXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIHN0YXRlID0gdGhhdC5fX2JydXNoLFxuICAgICAgICAgICAgICAgIGVtaXQgPSBlbWl0dGVyKHRoYXQsIGFyZ3VtZW50cyksXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMCA9IHN0YXRlLnNlbGVjdGlvbixcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24xID0gZGltLmlucHV0KHR5cGVvZiBzZWxlY3Rpb24gPT09IFwiZnVuY3Rpb25cIiA/IHNlbGVjdGlvbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogc2VsZWN0aW9uLCBzdGF0ZS5leHRlbnQpLFxuICAgICAgICAgICAgICAgIGkgPSBpbnRlcnBvbGF0ZShzZWxlY3Rpb24wLCBzZWxlY3Rpb24xKTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gdHdlZW4odCkge1xuICAgICAgICAgICAgICBzdGF0ZS5zZWxlY3Rpb24gPSB0ID09PSAxICYmIGVtcHR5KHNlbGVjdGlvbjEpID8gbnVsbCA6IGkodCk7XG4gICAgICAgICAgICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgICAgICAgICAgICBlbWl0LmJydXNoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb24wICYmIHNlbGVjdGlvbjEgPyB0d2VlbiA6IHR3ZWVuKDEpO1xuICAgICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cFxuICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgICAgICAgc3RhdGUgPSB0aGF0Ll9fYnJ1c2gsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMSA9IGRpbS5pbnB1dCh0eXBlb2Ygc2VsZWN0aW9uID09PSBcImZ1bmN0aW9uXCIgPyBzZWxlY3Rpb24uYXBwbHkodGhhdCwgYXJncykgOiBzZWxlY3Rpb24sIHN0YXRlLmV4dGVudCksXG4gICAgICAgICAgICAgICAgZW1pdCA9IGVtaXR0ZXIodGhhdCwgYXJncykuYmVmb3Jlc3RhcnQoKTtcblxuICAgICAgICAgICAgaW50ZXJydXB0KHRoYXQpO1xuICAgICAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gc2VsZWN0aW9uMSA9PSBudWxsIHx8IGVtcHR5KHNlbGVjdGlvbjEpID8gbnVsbCA6IHNlbGVjdGlvbjE7XG4gICAgICAgICAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgICAgICAgIGVtaXQuc3RhcnQoKS5icnVzaCgpLmVuZCgpO1xuICAgICAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiByZWRyYXcoKSB7XG4gICAgdmFyIGdyb3VwID0gc2VsZWN0KHRoaXMpLFxuICAgICAgICBzZWxlY3Rpb24gPSBsb2NhbCh0aGlzKS5zZWxlY3Rpb247XG5cbiAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICBncm91cC5zZWxlY3RBbGwoXCIuc2VsZWN0aW9uXCIpXG4gICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwieFwiLCBzZWxlY3Rpb25bMF1bMF0pXG4gICAgICAgICAgLmF0dHIoXCJ5XCIsIHNlbGVjdGlvblswXVsxXSlcbiAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIHNlbGVjdGlvblsxXVswXSAtIHNlbGVjdGlvblswXVswXSlcbiAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBzZWxlY3Rpb25bMV1bMV0gLSBzZWxlY3Rpb25bMF1bMV0pO1xuXG4gICAgICBncm91cC5zZWxlY3RBbGwoXCIuaGFuZGxlXCIpXG4gICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwieFwiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnR5cGVbZC50eXBlLmxlbmd0aCAtIDFdID09PSBcImVcIiA/IHNlbGVjdGlvblsxXVswXSAtIGhhbmRsZVNpemUgLyAyIDogc2VsZWN0aW9uWzBdWzBdIC0gaGFuZGxlU2l6ZSAvIDI7IH0pXG4gICAgICAgICAgLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZVswXSA9PT0gXCJzXCIgPyBzZWxlY3Rpb25bMV1bMV0gLSBoYW5kbGVTaXplIC8gMiA6IHNlbGVjdGlvblswXVsxXSAtIGhhbmRsZVNpemUgLyAyOyB9KVxuICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlID09PSBcIm5cIiB8fCBkLnR5cGUgPT09IFwic1wiID8gc2VsZWN0aW9uWzFdWzBdIC0gc2VsZWN0aW9uWzBdWzBdICsgaGFuZGxlU2l6ZSA6IGhhbmRsZVNpemU7IH0pXG4gICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlID09PSBcImVcIiB8fCBkLnR5cGUgPT09IFwid1wiID8gc2VsZWN0aW9uWzFdWzFdIC0gc2VsZWN0aW9uWzBdWzFdICsgaGFuZGxlU2l6ZSA6IGhhbmRsZVNpemU7IH0pO1xuICAgIH1cblxuICAgIGVsc2Uge1xuICAgICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvbiwuaGFuZGxlXCIpXG4gICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBcIm5vbmVcIilcbiAgICAgICAgICAuYXR0cihcInhcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcInlcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZW1pdHRlcih0aGF0LCBhcmdzKSB7XG4gICAgcmV0dXJuIHRoYXQuX19icnVzaC5lbWl0dGVyIHx8IG5ldyBFbWl0dGVyKHRoYXQsIGFyZ3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gRW1pdHRlcih0aGF0LCBhcmdzKSB7XG4gICAgdGhpcy50aGF0ID0gdGhhdDtcbiAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgIHRoaXMuc3RhdGUgPSB0aGF0Ll9fYnJ1c2g7XG4gICAgdGhpcy5hY3RpdmUgPSAwO1xuICB9XG5cbiAgRW1pdHRlci5wcm90b3R5cGUgPSB7XG4gICAgYmVmb3Jlc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCsrdGhpcy5hY3RpdmUgPT09IDEpIHRoaXMuc3RhdGUuZW1pdHRlciA9IHRoaXMsIHRoaXMuc3RhcnRpbmcgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBzdGFydDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5zdGFydGluZykgdGhpcy5zdGFydGluZyA9IGZhbHNlLCB0aGlzLmVtaXQoXCJzdGFydFwiKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgYnJ1c2g6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5lbWl0KFwiYnJ1c2hcIik7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVuZDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aGlzLmFjdGl2ZSA9PT0gMCkgZGVsZXRlIHRoaXMuc3RhdGUuZW1pdHRlciwgdGhpcy5lbWl0KFwiZW5kXCIpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBlbWl0OiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICBjdXN0b21FdmVudChuZXcgQnJ1c2hFdmVudChicnVzaCwgdHlwZSwgZGltLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLCBsaXN0ZW5lcnMuYXBwbHksIGxpc3RlbmVycywgW3R5cGUsIHRoaXMudGhhdCwgdGhpcy5hcmdzXSk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHN0YXJ0ZWQoKSB7XG4gICAgaWYgKGV2ZW50LnRvdWNoZXMpIHsgaWYgKGV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aCA8IGV2ZW50LnRvdWNoZXMubGVuZ3RoKSByZXR1cm4gbm9ldmVudCgpOyB9XG4gICAgZWxzZSBpZiAodG91Y2hlbmRpbmcpIHJldHVybjtcbiAgICBpZiAoIWZpbHRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSByZXR1cm47XG5cbiAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHR5cGUgPSBldmVudC50YXJnZXQuX19kYXRhX18udHlwZSxcbiAgICAgICAgbW9kZSA9IChldmVudC5tZXRhS2V5ID8gdHlwZSA9IFwib3ZlcmxheVwiIDogdHlwZSkgPT09IFwic2VsZWN0aW9uXCIgPyBNT0RFX0RSQUcgOiAoZXZlbnQuYWx0S2V5ID8gTU9ERV9DRU5URVIgOiBNT0RFX0hBTkRMRSksXG4gICAgICAgIHNpZ25YID0gZGltID09PSBZID8gbnVsbCA6IHNpZ25zWFt0eXBlXSxcbiAgICAgICAgc2lnblkgPSBkaW0gPT09IFggPyBudWxsIDogc2lnbnNZW3R5cGVdLFxuICAgICAgICBzdGF0ZSA9IGxvY2FsKHRoYXQpLFxuICAgICAgICBleHRlbnQgPSBzdGF0ZS5leHRlbnQsXG4gICAgICAgIHNlbGVjdGlvbiA9IHN0YXRlLnNlbGVjdGlvbixcbiAgICAgICAgVyA9IGV4dGVudFswXVswXSwgdzAsIHcxLFxuICAgICAgICBOID0gZXh0ZW50WzBdWzFdLCBuMCwgbjEsXG4gICAgICAgIEUgPSBleHRlbnRbMV1bMF0sIGUwLCBlMSxcbiAgICAgICAgUyA9IGV4dGVudFsxXVsxXSwgczAsIHMxLFxuICAgICAgICBkeCxcbiAgICAgICAgZHksXG4gICAgICAgIG1vdmluZyxcbiAgICAgICAgc2hpZnRpbmcgPSBzaWduWCAmJiBzaWduWSAmJiBldmVudC5zaGlmdEtleSxcbiAgICAgICAgbG9ja1gsXG4gICAgICAgIGxvY2tZLFxuICAgICAgICBwb2ludDAgPSBtb3VzZSh0aGF0KSxcbiAgICAgICAgcG9pbnQgPSBwb2ludDAsXG4gICAgICAgIGVtaXQgPSBlbWl0dGVyKHRoYXQsIGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKTtcblxuICAgIGlmICh0eXBlID09PSBcIm92ZXJsYXlcIikge1xuICAgICAgc3RhdGUuc2VsZWN0aW9uID0gc2VsZWN0aW9uID0gW1xuICAgICAgICBbdzAgPSBkaW0gPT09IFkgPyBXIDogcG9pbnQwWzBdLCBuMCA9IGRpbSA9PT0gWCA/IE4gOiBwb2ludDBbMV1dLFxuICAgICAgICBbZTAgPSBkaW0gPT09IFkgPyBFIDogdzAsIHMwID0gZGltID09PSBYID8gUyA6IG4wXVxuICAgICAgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdzAgPSBzZWxlY3Rpb25bMF1bMF07XG4gICAgICBuMCA9IHNlbGVjdGlvblswXVsxXTtcbiAgICAgIGUwID0gc2VsZWN0aW9uWzFdWzBdO1xuICAgICAgczAgPSBzZWxlY3Rpb25bMV1bMV07XG4gICAgfVxuXG4gICAgdzEgPSB3MDtcbiAgICBuMSA9IG4wO1xuICAgIGUxID0gZTA7XG4gICAgczEgPSBzMDtcblxuICAgIHZhciBncm91cCA9IHNlbGVjdCh0aGF0KVxuICAgICAgICAuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcblxuICAgIHZhciBvdmVybGF5ID0gZ3JvdXAuc2VsZWN0QWxsKFwiLm92ZXJsYXlcIilcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlXSk7XG5cbiAgICBpZiAoZXZlbnQudG91Y2hlcykge1xuICAgICAgZ3JvdXBcbiAgICAgICAgICAub24oXCJ0b3VjaG1vdmUuYnJ1c2hcIiwgbW92ZWQsIHRydWUpXG4gICAgICAgICAgLm9uKFwidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2hcIiwgZW5kZWQsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdmlldyA9IHNlbGVjdChldmVudC52aWV3KVxuICAgICAgICAgIC5vbihcImtleWRvd24uYnJ1c2hcIiwga2V5ZG93bmVkLCB0cnVlKVxuICAgICAgICAgIC5vbihcImtleXVwLmJydXNoXCIsIGtleXVwcGVkLCB0cnVlKVxuICAgICAgICAgIC5vbihcIm1vdXNlbW92ZS5icnVzaFwiLCBtb3ZlZCwgdHJ1ZSlcbiAgICAgICAgICAub24oXCJtb3VzZXVwLmJydXNoXCIsIGVuZGVkLCB0cnVlKTtcblxuICAgICAgZHJhZ0Rpc2FibGUoZXZlbnQudmlldyk7XG4gICAgfVxuXG4gICAgbm9wcm9wYWdhdGlvbigpO1xuICAgIGludGVycnVwdCh0aGF0KTtcbiAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICBlbWl0LnN0YXJ0KCk7XG5cbiAgICBmdW5jdGlvbiBtb3ZlZCgpIHtcbiAgICAgIHZhciBwb2ludDEgPSBtb3VzZSh0aGF0KTtcbiAgICAgIGlmIChzaGlmdGluZyAmJiAhbG9ja1ggJiYgIWxvY2tZKSB7XG4gICAgICAgIGlmIChNYXRoLmFicyhwb2ludDFbMF0gLSBwb2ludFswXSkgPiBNYXRoLmFicyhwb2ludDFbMV0gLSBwb2ludFsxXSkpIGxvY2tZID0gdHJ1ZTtcbiAgICAgICAgZWxzZSBsb2NrWCA9IHRydWU7XG4gICAgICB9XG4gICAgICBwb2ludCA9IHBvaW50MTtcbiAgICAgIG1vdmluZyA9IHRydWU7XG4gICAgICBub2V2ZW50KCk7XG4gICAgICBtb3ZlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW92ZSgpIHtcbiAgICAgIHZhciB0O1xuXG4gICAgICBkeCA9IHBvaW50WzBdIC0gcG9pbnQwWzBdO1xuICAgICAgZHkgPSBwb2ludFsxXSAtIHBvaW50MFsxXTtcblxuICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgIGNhc2UgTU9ERV9TUEFDRTpcbiAgICAgICAgY2FzZSBNT0RFX0RSQUc6IHtcbiAgICAgICAgICBpZiAoc2lnblgpIGR4ID0gTWF0aC5tYXgoVyAtIHcwLCBNYXRoLm1pbihFIC0gZTAsIGR4KSksIHcxID0gdzAgKyBkeCwgZTEgPSBlMCArIGR4O1xuICAgICAgICAgIGlmIChzaWduWSkgZHkgPSBNYXRoLm1heChOIC0gbjAsIE1hdGgubWluKFMgLSBzMCwgZHkpKSwgbjEgPSBuMCArIGR5LCBzMSA9IHMwICsgZHk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBNT0RFX0hBTkRMRToge1xuICAgICAgICAgIGlmIChzaWduWCA8IDApIGR4ID0gTWF0aC5tYXgoVyAtIHcwLCBNYXRoLm1pbihFIC0gdzAsIGR4KSksIHcxID0gdzAgKyBkeCwgZTEgPSBlMDtcbiAgICAgICAgICBlbHNlIGlmIChzaWduWCA+IDApIGR4ID0gTWF0aC5tYXgoVyAtIGUwLCBNYXRoLm1pbihFIC0gZTAsIGR4KSksIHcxID0gdzAsIGUxID0gZTAgKyBkeDtcbiAgICAgICAgICBpZiAoc2lnblkgPCAwKSBkeSA9IE1hdGgubWF4KE4gLSBuMCwgTWF0aC5taW4oUyAtIG4wLCBkeSkpLCBuMSA9IG4wICsgZHksIHMxID0gczA7XG4gICAgICAgICAgZWxzZSBpZiAoc2lnblkgPiAwKSBkeSA9IE1hdGgubWF4KE4gLSBzMCwgTWF0aC5taW4oUyAtIHMwLCBkeSkpLCBuMSA9IG4wLCBzMSA9IHMwICsgZHk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBNT0RFX0NFTlRFUjoge1xuICAgICAgICAgIGlmIChzaWduWCkgdzEgPSBNYXRoLm1heChXLCBNYXRoLm1pbihFLCB3MCAtIGR4ICogc2lnblgpKSwgZTEgPSBNYXRoLm1heChXLCBNYXRoLm1pbihFLCBlMCArIGR4ICogc2lnblgpKTtcbiAgICAgICAgICBpZiAoc2lnblkpIG4xID0gTWF0aC5tYXgoTiwgTWF0aC5taW4oUywgbjAgLSBkeSAqIHNpZ25ZKSksIHMxID0gTWF0aC5tYXgoTiwgTWF0aC5taW4oUywgczAgKyBkeSAqIHNpZ25ZKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGUxIDwgdzEpIHtcbiAgICAgICAgc2lnblggKj0gLTE7XG4gICAgICAgIHQgPSB3MCwgdzAgPSBlMCwgZTAgPSB0O1xuICAgICAgICB0ID0gdzEsIHcxID0gZTEsIGUxID0gdDtcbiAgICAgICAgaWYgKHR5cGUgaW4gZmxpcFgpIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGUgPSBmbGlwWFt0eXBlXV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoczEgPCBuMSkge1xuICAgICAgICBzaWduWSAqPSAtMTtcbiAgICAgICAgdCA9IG4wLCBuMCA9IHMwLCBzMCA9IHQ7XG4gICAgICAgIHQgPSBuMSwgbjEgPSBzMSwgczEgPSB0O1xuICAgICAgICBpZiAodHlwZSBpbiBmbGlwWSkgb3ZlcmxheS5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnNbdHlwZSA9IGZsaXBZW3R5cGVdXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZS5zZWxlY3Rpb24pIHNlbGVjdGlvbiA9IHN0YXRlLnNlbGVjdGlvbjsgLy8gTWF5IGJlIHNldCBieSBicnVzaC5tb3ZlIVxuICAgICAgaWYgKGxvY2tYKSB3MSA9IHNlbGVjdGlvblswXVswXSwgZTEgPSBzZWxlY3Rpb25bMV1bMF07XG4gICAgICBpZiAobG9ja1kpIG4xID0gc2VsZWN0aW9uWzBdWzFdLCBzMSA9IHNlbGVjdGlvblsxXVsxXTtcblxuICAgICAgaWYgKHNlbGVjdGlvblswXVswXSAhPT0gdzFcbiAgICAgICAgICB8fCBzZWxlY3Rpb25bMF1bMV0gIT09IG4xXG4gICAgICAgICAgfHwgc2VsZWN0aW9uWzFdWzBdICE9PSBlMVxuICAgICAgICAgIHx8IHNlbGVjdGlvblsxXVsxXSAhPT0gczEpIHtcbiAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gW1t3MSwgbjFdLCBbZTEsIHMxXV07XG4gICAgICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgICAgICBlbWl0LmJydXNoKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5kZWQoKSB7XG4gICAgICBub3Byb3BhZ2F0aW9uKCk7XG4gICAgICBpZiAoZXZlbnQudG91Y2hlcykge1xuICAgICAgICBpZiAoZXZlbnQudG91Y2hlcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgaWYgKHRvdWNoZW5kaW5nKSBjbGVhclRpbWVvdXQodG91Y2hlbmRpbmcpO1xuICAgICAgICB0b3VjaGVuZGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRvdWNoZW5kaW5nID0gbnVsbDsgfSwgNTAwKTsgLy8gR2hvc3QgY2xpY2tzIGFyZSBkZWxheWVkIVxuICAgICAgICBncm91cC5vbihcInRvdWNobW92ZS5icnVzaCB0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaFwiLCBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRyYWdFbmFibGUoZXZlbnQudmlldywgbW92aW5nKTtcbiAgICAgICAgdmlldy5vbihcImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2hcIiwgbnVsbCk7XG4gICAgICB9XG4gICAgICBncm91cC5hdHRyKFwicG9pbnRlci1ldmVudHNcIiwgXCJhbGxcIik7XG4gICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29ycy5vdmVybGF5KTtcbiAgICAgIGlmIChzdGF0ZS5zZWxlY3Rpb24pIHNlbGVjdGlvbiA9IHN0YXRlLnNlbGVjdGlvbjsgLy8gTWF5IGJlIHNldCBieSBicnVzaC5tb3ZlIChvbiBzdGFydCkhXG4gICAgICBpZiAoZW1wdHkoc2VsZWN0aW9uKSkgc3RhdGUuc2VsZWN0aW9uID0gbnVsbCwgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgICBlbWl0LmVuZCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtleWRvd25lZCgpIHtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgICBjYXNlIDE2OiB7IC8vIFNISUZUXG4gICAgICAgICAgc2hpZnRpbmcgPSBzaWduWCAmJiBzaWduWTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDE4OiB7IC8vIEFMVFxuICAgICAgICAgIGlmIChtb2RlID09PSBNT0RFX0hBTkRMRSkge1xuICAgICAgICAgICAgaWYgKHNpZ25YKSBlMCA9IGUxIC0gZHggKiBzaWduWCwgdzAgPSB3MSArIGR4ICogc2lnblg7XG4gICAgICAgICAgICBpZiAoc2lnblkpIHMwID0gczEgLSBkeSAqIHNpZ25ZLCBuMCA9IG4xICsgZHkgKiBzaWduWTtcbiAgICAgICAgICAgIG1vZGUgPSBNT0RFX0NFTlRFUjtcbiAgICAgICAgICAgIG1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAzMjogeyAvLyBTUEFDRTsgdGFrZXMgcHJpb3JpdHkgb3ZlciBBTFRcbiAgICAgICAgICBpZiAobW9kZSA9PT0gTU9ERV9IQU5ETEUgfHwgbW9kZSA9PT0gTU9ERV9DRU5URVIpIHtcbiAgICAgICAgICAgIGlmIChzaWduWCA8IDApIGUwID0gZTEgLSBkeDsgZWxzZSBpZiAoc2lnblggPiAwKSB3MCA9IHcxIC0gZHg7XG4gICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxIC0gZHk7IGVsc2UgaWYgKHNpZ25ZID4gMCkgbjAgPSBuMSAtIGR5O1xuICAgICAgICAgICAgbW9kZSA9IE1PREVfU1BBQ0U7XG4gICAgICAgICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29ycy5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgbW92ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiByZXR1cm47XG4gICAgICB9XG4gICAgICBub2V2ZW50KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24ga2V5dXBwZWQoKSB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcbiAgICAgICAgY2FzZSAxNjogeyAvLyBTSElGVFxuICAgICAgICAgIGlmIChzaGlmdGluZykge1xuICAgICAgICAgICAgbG9ja1ggPSBsb2NrWSA9IHNoaWZ0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMTg6IHsgLy8gQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfQ0VOVEVSKSB7XG4gICAgICAgICAgICBpZiAoc2lnblggPCAwKSBlMCA9IGUxOyBlbHNlIGlmIChzaWduWCA+IDApIHcwID0gdzE7XG4gICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxOyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjE7XG4gICAgICAgICAgICBtb2RlID0gTU9ERV9IQU5ETEU7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMzI6IHsgLy8gU1BBQ0VcbiAgICAgICAgICBpZiAobW9kZSA9PT0gTU9ERV9TUEFDRSkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgICBpZiAoc2lnblgpIGUwID0gZTEgLSBkeCAqIHNpZ25YLCB3MCA9IHcxICsgZHggKiBzaWduWDtcbiAgICAgICAgICAgICAgaWYgKHNpZ25ZKSBzMCA9IHMxIC0gZHkgKiBzaWduWSwgbjAgPSBuMSArIGR5ICogc2lnblk7XG4gICAgICAgICAgICAgIG1vZGUgPSBNT0RFX0NFTlRFUjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChzaWduWCA8IDApIGUwID0gZTE7IGVsc2UgaWYgKHNpZ25YID4gMCkgdzAgPSB3MTtcbiAgICAgICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgczAgPSBzMTsgZWxzZSBpZiAoc2lnblkgPiAwKSBuMCA9IG4xO1xuICAgICAgICAgICAgICBtb2RlID0gTU9ERV9IQU5ETEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlXSk7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5vZXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplKCkge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuX19icnVzaCB8fCB7c2VsZWN0aW9uOiBudWxsfTtcbiAgICBzdGF0ZS5leHRlbnQgPSBleHRlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBzdGF0ZS5kaW0gPSBkaW07XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgYnJ1c2guZXh0ZW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGV4dGVudCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoW1srX1swXVswXSwgK19bMF1bMV1dLCBbK19bMV1bMF0sICtfWzFdWzFdXV0pLCBicnVzaCkgOiBleHRlbnQ7XG4gIH07XG5cbiAgYnJ1c2guZmlsdGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGZpbHRlciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgYnJ1c2gpIDogZmlsdGVyO1xuICB9O1xuXG4gIGJydXNoLmhhbmRsZVNpemUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaGFuZGxlU2l6ZSA9ICtfLCBicnVzaCkgOiBoYW5kbGVTaXplO1xuICB9O1xuXG4gIGJydXNoLm9uID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlID0gbGlzdGVuZXJzLm9uLmFwcGx5KGxpc3RlbmVycywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IGxpc3RlbmVycyA/IGJydXNoIDogdmFsdWU7XG4gIH07XG5cbiAgcmV0dXJuIGJydXNoO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuaW1wb3J0IHttZWFuLCBxdWFudGlsZSwgZGV2aWF0aW9ufSBmcm9tIFwiZDMtYXJyYXlcIjtcblxuXG4vLyByZWZlcmVuY2U6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0tlcm5lbF8oc3RhdGlzdGljcylcbi8vIHJlZmVyZW5jZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvS2VybmVsX2RlbnNpdHlfZXN0aW1hdGlvblxuZXhwb3J0IGNvbnN0IGtlcm5lbCA9IHtcbiAgICBlcGFuZWNobmlrb3Y6IGZ1bmN0aW9uKHUpe3JldHVybiBNYXRoLmFicyh1KSA8PSAxPyAoMy80KSooMS11KnUpOjB9LFxuICAgIGdhdXNzaWFuOiBmdW5jdGlvbih1KXtyZXR1cm4gMS9NYXRoLnNxcnQoMipNYXRoLlBJKSpNYXRoLmV4cCgtLjUqdSp1KX1cbn07XG5cbi8vIHJlZmVyZW5jZTogaHR0cHM6Ly9naXRodWIuY29tL2phc29uZGF2aWVzL3NjaWVuY2UuanMvYmxvYi9tYXN0ZXIvc3JjL3N0YXRzL2JhbmR3aWR0aC5qc1xuZXhwb3J0IGNvbnN0IGtlcm5lbEJhbmR3aWR0aCA9IHtcbiAgICAvLyBCYW5kd2lkdGggc2VsZWN0b3JzIGZvciBHYXVzc2lhbiBrZXJuZWxzLlxuICAgIG5yZDogZnVuY3Rpb24oeCkge1xuICAgICAgICBsZXQgaXFyID0gcXVhbnRpbGUoeCwgMC43NSkgLSBxdWFudGlsZSh4LCAwLjI1KTtcbiAgICAgICAgbGV0IGggPSBpcXIgLyAxLjM0O1xuICAgICAgICByZXR1cm4gMS4wNiAqIE1hdGgubWluKGRldmlhdGlvbih4KSwgaCkgKiBNYXRoLnBvdyh4Lmxlbmd0aCwgLTEvNSk7XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGtlcm5lbDogdGhlIGtlcm5lbCBmdW5jdGlvbiwgc3VjaCBhcyBnYXVzc2lhblxuICogQHBhcmFtIFg6IGxpc3Qgb2YgYmluc1xuICogQHBhcmFtIGg6IHRoZSBiYW5kd2lkdGgsIGVpdGhlciBhIG51bWVyaWNhbCB2YWx1ZSBnaXZlbiBieSB0aGUgdXNlciBvciBjYWxjdWxhdGVkIHVzaW5nIHRoZSBmdW5jdGlvbiBrZXJuZWxCYW5kd2lkdGhcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn06IHRoZSBrZXJuZWwgZGVuc2l0eSBlc3RpbWF0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtlcm5lbERlbnNpdHlFc3RpbWF0b3Ioa2VybmVsLCBYLCBoKXtcbiAgICByZXR1cm4gZnVuY3Rpb24oVikge1xuICAgICAgICAvLyBYIGlzIHRoZSBiaW5zXG4gICAgICAgIHJldHVybiBYLm1hcCgoeCkgPT4gW3gsIG1lYW4oViwgKHYpID0+IGtlcm5lbCgoeC12KS9oKSkvaF0pO1xuICAgIH1cbn1cblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuLypcbklucHV0IGRhdGEgc3RydWN0dXJlOiBhIGxpc3Qgb2YgZGF0YSBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZTpcbltcbiAgICB7XG4gICAgICAgIGdyb3VwOiBcImdyb3VwMVwiXG4gICAgICAgIGxhYmVsOiBcImRhdGFzZXQgMVwiLFxuICAgICAgICB2YWx1ZXM6IFthIGxpc3Qgb2YgbnVtZXJpY2FsIHZhbHVlc11cbiAgICAgfSxcbiAgICAge1xuICAgICAgICBncm91cDogXCJncm91cDFcIlxuICAgICAgICBsYWJlbDogXCJkYXRhc2V0IDJcIixcbiAgICAgICAgdmFsdWVzOiBbYSBsaXN0IG9mIG51bWVyaWNhbCB2YWx1ZXNdXG4gICAgIH0sXG4gICAgIHtcbiAgICAgICAgZ3JvdXA6IFwiZ3JvdXAyXCJcbiAgICAgICAgbGFiZWw6IFwiZGF0YXNldCAzXCIsXG4gICAgICAgIHZhbHVlczogW2EgbGlzdCBvZiBudW1lcmljYWwgdmFsdWVzXVxuICAgICB9XG5dXG4qL1xuXG5pbXBvcnQge2V4dGVudCwgbWVkaWFuLCBhc2NlbmRpbmcsIHF1YW50aWxlLCBtYXgsIG1pbn0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge25lc3R9IGZyb20gXCJkMy1jb2xsZWN0aW9uXCI7XG5pbXBvcnQge3NjYWxlQmFuZCwgc2NhbGVMaW5lYXJ9IGZyb20gXCJkMy1zY2FsZVwiO1xuaW1wb3J0IHthcmVhfSBmcm9tIFwiZDMtc2hhcGVcIjtcbmltcG9ydCB7YXhpc1RvcCwgYXhpc0JvdHRvbSwgYXhpc0xlZnR9IGZyb20gXCJkMy1heGlzXCI7XG5pbXBvcnQge3NlbGVjdCwgc2VsZWN0QWxsLCBldmVudH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHticnVzaH0gZnJvbSBcImQzLWJydXNoXCI7XG5cbmltcG9ydCB7a2VybmVsRGVuc2l0eUVzdGltYXRvciwga2VybmVsLCBrZXJuZWxCYW5kd2lkdGh9IGZyb20gXCIuL2tkZVwiO1xuaW1wb3J0IFRvb2x0aXAgZnJvbSBcIi4vVG9vbHRpcFwiO1xuaW1wb3J0IFRvb2xiYXIgZnJvbSBcIi4vVG9vbGJhclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHcm91cGVkVmlvbGluIHtcbiAgICAvKipcbiAgICAgKiBjb25zdHJ1Y3RvciBmb3IgR3JvdXBlZFZpb2xpblxuICAgICAqIEBwYXJhbSBkYXRhIHtMaXN0fTogYSBsaXN0IG9mIG9iamVjdHMgd2l0aCBhdHRyaWJ1dGVzOiBncm91cDoge1N0cmluZ30sIGxhYmVsOiB7U3RyaW5nfSwgdmFsdWVzOiB7TGlzdH0gb2YgbnVtZXJpY2FsIHZhbHVlcywgc2l6ZTogaW50ZWdlciwgb3B0aW9uYWxcbiAgICAgKiBAcGFyYW0gZ3JvdXBJbmZvIHtEaWN0aW9uYXJ5fTogbWV0YWRhdGEgb2YgdGhlIGdyb3VwLCBpbmRleGVkIGJ5IGdyb3VwIElEXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoZGF0YSwgZ3JvdXBJbmZvID0ge30pe1xuICAgICAgICB0aGlzLl9zYW5pdHlDaGVjayhkYXRhKTtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5ncm91cEluZm8gPSBncm91cEluZm87XG4gICAgICAgIHRoaXMudG9vbGJhciA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy50b29sdGlwID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIGRvbSB7RE9NfSB0aGUgU1ZHIGRvbSBvYmplY3QgdG8gYXBwZW5kIHRoZSB2aW9saW4gcGxvdCB0b1xuICAgICAqIEBwYXJhbSB3aWR0aCB7RmxvYXR9XG4gICAgICogQHBhcmFtIGhlaWdodCB7RmxvYXR9XG4gICAgICogQHBhcmFtIHhQYWRkaW5nIHtGbG9hdH0gcGFkZGluZyBvZiB0aGUgeCBheGlzXG4gICAgICogQHBhcmFtIHhEb21haW4ge0xpc3R9IHRoZSBvcmRlciBvZiBYIGdyb3Vwc1xuICAgICAqIEBwYXJhbSB5RG9tYWluICB7TGlzdH0gdGhlIG1pbiBhbmQgbWF4IHZhbHVlcyBvZiB0aGUgeSBkb21haW5cbiAgICAgKiBAcGFyYW0geUxhYmVsIHtTdHJpbmd9XG4gICAgICogQHBhcmFtIHNob3dYXG4gICAgICogQHBhcmFtIHNob3dTdWJYXG4gICAgICogQHBhcmFtIHN1YlhBbmdsZVxuICAgICAqIEBwYXJhbSBzaG93V2hpc2tlclxuICAgICAqIEBwYXJhbSBzaG93RGl2aWRlclxuICAgICAqIEBwYXJhbSBzaG93TGVnZW5kXG4gICAgICogQHBhcmFtIHNob3dTaXplXG4gICAgICovXG5cbiAgICByZW5kZXIoZG9tLCB3aWR0aD01MDAsIGhlaWdodD0zNTcsIHhQYWRkaW5nPTAuMDUsIHhEb21haW49dW5kZWZpbmVkLCB5RG9tYWluPVstMywzXSwgeUxhYmVsPVwiWSBheGlzXCIsXG4gICAgICAgICAgIHNob3dYPXRydWUsIHNob3dTdWJYPXRydWUsIHN1YlhBbmdsZT0wLFxuICAgICAgICAgICBzaG93V2hpc2tlcj1mYWxzZSwgc2hvd0RpdmlkZXI9ZmFsc2UsIHNob3dMZWdlbmQ9ZmFsc2UsIHNob3dTaXplPWZhbHNlKXtcblxuICAgICAgICAvLyBkZWZpbmUgdGhlIHJlc2V0IGZvciB0aGlzIHBsb3RcbiAgICAgICAgdGhpcy5yZXNldCA9ICgpID0+IHtcbiAgICAgICAgICAgIGRvbS5zZWxlY3RBbGwoXCIqXCIpLnJlbW92ZSgpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXIoZG9tLCB3aWR0aCwgaGVpZ2h0LCB4UGFkZGluZywgeERvbWFpbiwgeURvbWFpbiwgeUxhYmVsLCBzaG93WCwgc2hvd1N1YlgsIHN1YlhBbmdsZSwgc2hvd1doaXNrZXIsIHNob3dEaXZpZGVyLCBzaG93TGVnZW5kKTtcbiAgICAgICAgfTtcblxuXG4gICAgICAgIC8vIGRlZmluZXMgdGhlIFgsIHN1YlgsIFksIFogc2NhbGVzXG4gICAgICAgIGlmICh5RG9tYWluPT09dW5kZWZpbmVkIHx8IDAgPT0geURvbWFpbi5sZW5ndGgpe1xuICAgICAgICAgICAgbGV0IGFsbFYgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKChkKSA9PiBhbGxWID0gYWxsVi5jb25jYXQoZC52YWx1ZXMpKTtcbiAgICAgICAgICAgIHlEb21haW4gPSBleHRlbnQoYWxsVik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZS1vcmdhbml6ZWQgdGhpcy5kYXRhIGluZGV4ZWQgYnkgZ3JvdXBzXG4gICAgICAgIHRoaXMuZ3JvdXBzID0gbmVzdCgpXG4gICAgICAgICAgICAua2V5KChkKSA9PiBkLmdyb3VwKVxuICAgICAgICAgICAgLmVudHJpZXModGhpcy5kYXRhKTtcblxuICAgICAgICB0aGlzLnNjYWxlID0ge1xuICAgICAgICAgICAgeDogc2NhbGVCYW5kKClcbiAgICAgICAgICAgICAgICAucmFuZ2VSb3VuZChbMCwgd2lkdGhdKVxuICAgICAgICAgICAgICAgIC5kb21haW4oeERvbWFpbnx8dGhpcy5ncm91cHMubWFwKChkKSA9PiBkLmtleSkpXG4gICAgICAgICAgICAgICAgLnBhZGRpbmdJbm5lcih4UGFkZGluZyksXG4gICAgICAgICAgICBzdWJ4OiBzY2FsZUJhbmQoKSxcbiAgICAgICAgICAgIHk6IHNjYWxlTGluZWFyKClcbiAgICAgICAgICAgICAgICAucmFuZ2VSb3VuZChbaGVpZ2h0LCAwXSlcbiAgICAgICAgICAgICAgICAuZG9tYWluKHlEb21haW4pLFxuICAgICAgICAgICAgejogc2NhbGVMaW5lYXIoKSAvLyB0aGlzIGlzIHRoZSB2aW9saW4gd2lkdGgsIHRoZSBkb21haW4gYW5kIHJhbmdlIGFyZSBkZXRlcm1pbmVkIGxhdGVyIGluZGl2aWR1YWxseSBmb3IgZWFjaCB2aW9saW5cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBmb3IgZWFjaCBncm91cFxuICAgICAgICB0aGlzLmdyb3Vwcy5mb3JFYWNoKChnKSA9PiB7XG4gICAgICAgICAgICBsZXQgZ3JvdXAgPSBnLmtleTtcbiAgICAgICAgICAgIGxldCBlbnRyaWVzID0gZy52YWx1ZXM7XG4gICAgICAgICAgICBsZXQgaW5mbyA9IHRoaXMuZ3JvdXBJbmZvW2dyb3VwXTsgLy8gb3B0aW9uYWxcbiAgICAgICAgICAgIGcuaW5kZXggPSB0aGlzLnNjYWxlLnguZG9tYWluKCkuaW5kZXhPZihncm91cCk7XG5cbiAgICAgICAgICAgIGlmIChpbmZvICE9PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgICAvLyByZW5kZXJzIGdyb3VwIGluZm8gc3VjaCBhcyBwLXZhbHVlLCBncm91cCBuYW1lXG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBJbmZvRG9tID0gZG9tLmFwcGVuZChcImdcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBMYWJlbHMgPSBncm91cEluZm9Eb20uc2VsZWN0QWxsKFwiLnZpb2xpbi1ncm91cC1sYWJlbFwiKVxuICAgICAgICAgICAgICAgICAgICAuZGF0YShbJ3B2YWx1ZSddKTtcbiAgICAgICAgICAgICAgICBncm91cExhYmVscy5lbnRlcigpLmFwcGVuZChcInRleHRcIikgLy8gQ29kZSByZXZpZXc6IGNvbnNpZGVyIG1vdmluZyB0aGlzIHBhcnQgdG8gdGhlIGVRVEwgZGFzaGJvYXJkXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKFwieFwiLCAwKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgMClcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInZpb2xpbi1ncm91cC1sYWJlbFwiKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcImZpbGxcIiwgKGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGluZm9bJ3B2YWx1ZVRocmVzaG9sZCddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkPT0ncHZhbHVlJyYmcGFyc2VGbG9hdChpbmZvW2RdKTw9cGFyc2VGbG9hdChpbmZvWydwdmFsdWVUaHJlc2hvbGQnXSk/XCJvcmFuZ2VyZWRcIjpcIlNsYXRlR3JheVwiXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIChkLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgeCA9IHRoaXMuc2NhbGUueChncm91cCkgKyB0aGlzLnNjYWxlLnguYmFuZHdpZHRoKCkvMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB5ID0gdGhpcy5zY2FsZS55KHlEb21haW5bMF0pICsgNTA7IC8vIHRvZG86IGF2b2lkIGhhcmQtY29kZWQgdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYHRyYW5zbGF0ZSgke3h9LCAke3l9KWBcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLnRleHQoKGQpID0+IGAke2R9OiAke3BhcnNlRmxvYXQocGFyc2VGbG9hdChpbmZvW2RdKS50b1ByZWNpc2lvbigzKSkudG9FeHBvbmVudGlhbCgpfWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSB0aGlzLnNjYWxlLnN1YnggYmFzZWQgb24gdGhpcy5zY2FsZS54XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnN1YnhcbiAgICAgICAgICAgICAgICAuZG9tYWluKGVudHJpZXMubWFwKChkKSA9PiBkLmxhYmVsKSlcbiAgICAgICAgICAgICAgICAucmFuZ2VSb3VuZChbdGhpcy5zY2FsZS54KGdyb3VwKSwgdGhpcy5zY2FsZS54KGdyb3VwKSArIHRoaXMuc2NhbGUueC5iYW5kd2lkdGgoKV0pO1xuXG4gICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG5cbiAgICAgICAgICAgICAgICBpZiAoMCA9PSBlbnRyeS52YWx1ZXMubGVuZ3RoKSByZXR1cm47IC8vIG5vIGZ1cnRoZXIgcmVuZGVyaW5nIGlmIHRoaXMgZ3JvdXAgaGFzIG5vIGVudHJpZXNcbiAgICAgICAgICAgICAgICBlbnRyeS52YWx1ZXMgPSBlbnRyeS52YWx1ZXMuc29ydChhc2NlbmRpbmcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RyYXdWaW9saW4oZG9tLCBlbnRyeSwgc2hvd1doaXNrZXIsIGcuaW5kZXgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGFkZHMgdGhlIHN1Yi14IGF4aXMgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgZW50cmllc1xuICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IDE1O1xuICAgICAgICAgICAgaWYgKHNob3dTaXplKXtcbiAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZVNjYWxlID0gc2NhbGVCYW5kKClcbiAgICAgICAgICAgICAgICAgICAgLmRvbWFpbihlbnRyaWVzLm1hcCgoZCkgPT4ge3JldHVybiBkLnNpemU9PXVuZGVmaW5lZD8nKDApJzpgKCR7ZC5zaXplfHwwfSlgfSkpXG4gICAgICAgICAgICAgICAgICAgIC5yYW5nZVJvdW5kKFt0aGlzLnNjYWxlLngoZ3JvdXApLCB0aGlzLnNjYWxlLngoZ3JvdXApICsgdGhpcy5zY2FsZS54LmJhbmR3aWR0aCgpXSk7XG4gICAgICAgICAgICAgICAgIGNvbnN0IHNpemV4RyA9IGRvbS5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidmlvbGluLXNpemUtYXhpc1wiKVxuICAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgwLCAke2hlaWdodCArIGJ1ZmZlcn0pYClcbiAgICAgICAgICAgICAgICAgICAgIC5jYWxsKGF4aXNCb3R0b20oc2l6ZVNjYWxlKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaG93U3ViWCkge1xuICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSA1O1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1YnhHID0gZG9tLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInZpb2xpbi1zdWItYXhpc1wiKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKDAsICR7aGVpZ2h0ICsgYnVmZmVyfSlgKVxuICAgICAgICAgICAgICAgICAgICAuY2FsbChheGlzQm90dG9tKHRoaXMuc2NhbGUuc3VieCkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN1YlhBbmdsZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc3VieEcuc2VsZWN0QWxsKFwidGV4dFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJzdGFydFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHJvdGF0ZSgke3N1YlhBbmdsZX0sIDIsIDEwKWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHJlbmRlcnMgdGhlIHggYXhpc1xuICAgICAgICBsZXQgYnVmZmVyID0gc2hvd1N1Ylg/NTU6MDsgLy8gQ29kZSByZXZpZXc6IGhhcmQtY29kZWQgdmFsdWVzXG4gICAgICAgIHRoaXMueEF4aXMgPSBzaG93WD9heGlzQm90dG9tKHRoaXMuc2NhbGUueCk6YXhpc0JvdHRvbSh0aGlzLnNjYWxlLngpLnRpY2tGb3JtYXQoXCJcIik7XG4gICAgICAgIGRvbS5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidmlvbGluLXgtYXhpcyBheGlzLS14XCIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKDAsICR7aGVpZ2h0ICsgYnVmZmVyfSlgKVxuICAgICAgICAgICAgLmNhbGwodGhpcy54QXhpcykgLy8gc2V0IHRpY2tGb3JtYXQoXCJcIikgdG8gc2hvdyB0aWNrIG1hcmtzIHdpdGhvdXQgdGV4dCBsYWJlbHNcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcInN0YXJ0XCIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInJvdGF0ZSgzMCwgLTEwLCAxMClcIik7XG5cbiAgICAgICAgLy8gYWRkcyB0aGUgeSBBeGlzXG4gICAgICAgIGJ1ZmZlciA9IDU7XG4gICAgICAgIHRoaXMueUF4aXMgPSBheGlzTGVmdCh0aGlzLnNjYWxlLnkpXG4gICAgICAgICAgICAgICAgICAgIC50aWNrVmFsdWVzKHRoaXMuc2NhbGUueS50aWNrcyg1KSk7XG4gICAgICAgIGRvbS5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidmlvbGluLXktYXhpcyBheGlzLS15XCIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKC0ke2J1ZmZlcn0sIDApYClcbiAgICAgICAgICAgIC5jYWxsKHRoaXMueUF4aXMpO1xuXG4gICAgICAgIC8vIGFkZHMgdGhlIHRleHQgbGFiZWwgZm9yIHRoZSB5IGF4aXNcbiAgICAgICAgZG9tLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAtNDApIC8vIHRvZG86IGF2b2lkIGhhcmQtY29kZWQgdmFsdWVcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCAtNDApXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidmlvbGluLWF4aXMtbGFiZWxcIilcbiAgICAgICAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgXCJzdGFydFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJyb3RhdGUoLTkwKVwiKVxuICAgICAgICAgICAgLnRleHQoeUxhYmVsKTtcblxuICAgICAgICAvLyBwbG90IG1vdXNlIGV2ZW50c1xuICAgICAgICBkb20ub24oXCJtb3VzZW91dFwiLCAoKT0+e1xuICAgICAgICAgICAgaWYodGhpcy50b29sdGlwICE9PSB1bmRlZmluZWQpIHRoaXMudG9vbHRpcC5oaWRlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGFkZCBncm91cCBkaXZpZGVyc1xuICAgICAgICBpZihzaG93RGl2aWRlcil7XG4gICAgICAgICAgICB0aGlzLl9hZGRHcm91cERpdmlkZXIoZG9tKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCBjb2xvciBsZWdlbmRcbiAgICAgICAgaWYgKHNob3dMZWdlbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxlZ2VuZEcgPSBkb20uYXBwZW5kKFwiZ1wiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaWRcIiwgXCJ2aW9saW5MZWdlbmRcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKDAsIDApYCk7XG5cbiAgICAgICAgICAgIGxlZ2VuZEcuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieFwiLCB0aGlzLnNjYWxlLngucmFuZ2UoKVswXSlcbiAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgLTM1KVxuICAgICAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgNjAqKHRoaXMuZ3JvdXBzWzBdLnZhbHVlcy5sZW5ndGgpICsgMTApXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgMjQpXG4gICAgICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBcIm5vbmVcIilcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJzdHJva2VcIiwgXCJzaWx2ZXJcIik7XG5cbiAgICAgICAgICAgIGNvbnN0IGxlZ2VuZHMgPSBsZWdlbmRHLnNlbGVjdEFsbChcIi52aW9saW4tbGVnZW5kXCIpLmRhdGEodGhpcy5ncm91cHNbMF0udmFsdWVzKTtcblxuXG4gICAgICAgICAgICBjb25zdCBnID0gbGVnZW5kcy5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcInZpb2xpbi1sZWdlbmRcIiwgdHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCB3ID0gMTA7XG4gICAgICAgICAgICBnLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcInhcIiwgKGQsIGkpID0+IDUgKyA2MCooaSkgICsgdGhpcy5zY2FsZS54LnJhbmdlKClbMF0pXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIC0yOClcbiAgICAgICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIHcpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdylcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIChkKSA9PiBkLmNvbG9yKTtcblxuICAgICAgICAgICAgZy5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInZpb2xpbi1sZWdlbmQtdGV4dFwiKVxuICAgICAgICAgICAgICAgIC50ZXh0KChkKSA9PiBkLmxhYmVsKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieFwiLCAoZCwgaSkgPT4gMTcgKyA2MCooaSkgKyB0aGlzLnNjYWxlLngucmFuZ2UoKVswXSlcbiAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgLTIwKTtcbiAgICAgICAgfVxuXG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgdGhlIHRvb2x0aXAgb2JqZWN0XG4gICAgICogQHBhcmFtIGRvbUlkIHtTdHJpbmd9IHRoZSB0b29sdGlwJ3MgZG9tIElEXG4gICAgICogQHJldHVybnMge1Rvb2x0aXB9XG4gICAgICovXG4gICAgY3JlYXRlVG9vbHRpcChkb21JZCl7XG4gICAgICAgIGlmICgkKGAjJHtkb21JZH1gKS5sZW5ndGggPT0gMCkgJCgnPGRpdi8+JykuYXR0cignaWQnLCBkb21JZCkuYXBwZW5kVG8oJCgnYm9keScpKTtcbiAgICAgICAgdGhpcy50b29sdGlwID0gbmV3IFRvb2x0aXAoZG9tSWQpO1xuICAgICAgICBzZWxlY3QoYCMke2RvbUlkfWApLmNsYXNzZWQoJ3Zpb2xpbi10b29sdGlwJywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnRvb2x0aXA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIHRoZSB0b29sYmFyIHBhbmVsXG4gICAgICogQHBhcmFtIGRvbUlkIHtTdHJpbmd9IHRoZSB0b29sYmFyJ3MgZG9tIElEXG4gICAgICogQHBhcmFtIHRvb2x0aXAge1Rvb2x0aXB9XG4gICAgICogQHJldHVybnMge1Rvb2xiYXJ9XG4gICAgICovXG5cbiAgICBjcmVhdGVUb29sYmFyKGRvbUlkLCB0b29sdGlwKXtcbiAgICAgICAgLy8gaWYgKHRvb2x0aXAgPT09IHVuZGVmaW5lZCkgdG9vbHRpcCA9IHRoaXMuY3JlYXRlVG9vbHRpcChkb21JZCk7XG4gICAgICAgIHRoaXMudG9vbGJhciA9IG5ldyBUb29sYmFyKGRvbUlkLCB0b29sdGlwKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbGJhcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYSBicnVzaCB0byB0aGUgcGxvdFxuICAgICAqIEBwYXJhbSBkb20ge0QzfSBEb20gZWxlbWVudFxuICAgICAqL1xuICAgIGFkZEJydXNoKGRvbSl7XG4gICAgICAgIGNvbnN0IHRoZUJydXNoID0gYnJ1c2goKTtcbiAgICAgICAgdGhlQnJ1c2gub24oXCJlbmRcIiwgKCk9Pnt0aGlzLnpvb20oZG9tLCB0aGVCcnVzaCl9KTtcbiAgICAgICAgZG9tLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJicnVzaFwiKVxuICAgICAgICAgICAgLmNhbGwodGhlQnJ1c2gpO1xuICAgIH1cblxuICAgIHpvb20oZG9tLCB0aGVCcnVzaCl7XG4gICAgICAgIGxldCBzID0gZXZlbnQuc2VsZWN0aW9uLFxuICAgICAgICAgICAgaWRlbFRpbWVvdXQsXG4gICAgICAgICAgICBpZGVsRGVsYXkgPSAzNTA7XG4gICAgICAgIGlmICh0aGVCcnVzaCA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghcykge1xuICAgICAgICAgICAgaWYgKCFpZGVsVGltZW91dCkgcmV0dXJuIGlkZWxUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWRlbFRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgfSwgaWRlbERlbGF5KTtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gcmVzZXQgdGhlIGN1cnJlbnQgc2NhbGVzJyBkb21haW5zIGJhc2VkIG9uIHRoZSBicnVzaGVkIHdpbmRvd1xuICAgICAgICAgICAgdGhpcy5zY2FsZS54LmRvbWFpbih0aGlzLnNjYWxlLnguZG9tYWluKCkuZmlsdGVyKChkLCBpKT0+e1xuICAgICAgICAgICAgICAgICAgY29uc3QgbG93Qm91bmQgPSBNYXRoLmZsb29yKHNbMF1bMF0vdGhpcy5zY2FsZS54LmJhbmR3aWR0aCgpKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHVwcGVyQm91bmQgPSBNYXRoLmZsb29yKHNbMV1bMF0vdGhpcy5zY2FsZS54LmJhbmR3aWR0aCgpKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpID49IGxvd0JvdW5kICYmIGkgPD11cHBlckJvdW5kO1xuICAgICAgICAgICAgfSkpOyAvLyBUT0RPOiBhZGQgY29tbWVudHNcblxuICAgICAgICAgICAgY29uc3QgbWluID0gTWF0aC5mbG9vcih0aGlzLnNjYWxlLnkuaW52ZXJ0KHNbMV1bMV0pKTtcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IE1hdGguZmxvb3IodGhpcy5zY2FsZS55LmludmVydChzWzBdWzFdKSk7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnkuZG9tYWluKFttaW4sIG1heF0pOyAvLyB0b2RvOiBkZWJ1Z1xuXG4gICAgICAgICAgICBkb20uc2VsZWN0KFwiLmJydXNoXCIpLmNhbGwodGhlQnJ1c2gubW92ZSwgbnVsbCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgICAvLyB6b29tXG4gICAgICAgIGxldCB0ID0gZG9tLnRyYW5zaXRpb24oKS5kdXJhdGlvbig3NTApO1xuICAgICAgICBkb20uc2VsZWN0KFwiLmF4aXMtLXhcIikudHJhbnNpdGlvbih0KS5jYWxsKHRoaXMueEF4aXMpO1xuICAgICAgICBkb20uc2VsZWN0KFwiLmF4aXMtLXlcIikudHJhbnNpdGlvbih0KS5jYWxsKHRoaXMueUF4aXMpO1xuXG4gICAgICAgIHRoaXMuZ3JvdXBzLmZvckVhY2goKGdnLCBpKT0+IHtcbiAgICAgICAgICAgIGxldCBncm91cCA9IGdnLmtleTtcbiAgICAgICAgICAgIGxldCBlbnRyaWVzID0gZ2cudmFsdWVzO1xuXG4gICAgICAgICAgICAvLyByZS1kZWZpbmUgdGhlIHN1YngncyByYW5nZVxuICAgICAgICAgICAgdGhpcy5zY2FsZS5zdWJ4XG4gICAgICAgICAgICAgICAgLnJhbmdlUm91bmQoW3RoaXMuc2NhbGUueChncm91cCksIHRoaXMuc2NhbGUueChncm91cCkgKyB0aGlzLnNjYWxlLnguYmFuZHdpZHRoKCldKTtcblxuICAgICAgICAgICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgwID09IGVudHJ5LnZhbHVlcy5sZW5ndGgpIHJldHVybjsgLy8gbm8gZnVydGhlciByZW5kZXJpbmcgaWYgdGhpcyBncm91cCBoYXMgbm8gZW50cmllc1xuICAgICAgICAgICAgICAgIGNvbnN0IGdJbmRleCA9IHRoaXMuc2NhbGUueC5kb21haW4oKS5pbmRleE9mKGdyb3VwKTtcblxuXG4gICAgICAgICAgICAgICAgLy8gcmUtZGVmaW5lIHRoZSBzY2FsZS56J3MgcmFuZ2VcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnpcbiAgICAgICAgICAgICAgICAgICAgLnJhbmdlKFt0aGlzLnNjYWxlLnN1YngoZW50cnkubGFiZWwpLCB0aGlzLnNjYWxlLnN1YngoZW50cnkubGFiZWwpICsgdGhpcy5zY2FsZS5zdWJ4LmJhbmR3aWR0aCgpXSk7XG5cbiAgICAgICAgICAgICAgICAvLyByZS1yZW5kZXIgdGhlIHZpb2xpblxuICAgICAgICAgICAgICAgIGNvbnN0IGcgPSBkb20uc2VsZWN0KGAjdmlvbGluJHtnZy5pbmRleH0tJHtlbnRyeS5sYWJlbH1gKTtcbiAgICAgICAgICAgICAgICBnLnNlbGVjdChcIi52aW9saW5cIilcbiAgICAgICAgICAgICAgICAgICAgLnRyYW5zaXRpb24odClcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJkXCIsIGFyZWEoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLngwKChkKSA9PiB0aGlzLnNjYWxlLnooZFsxXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAueDEoKGQpID0+IHRoaXMuc2NhbGUueigtZFsxXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAueSgoZCkgPT4gdGhpcy5zY2FsZS55KGRbMF0pKVxuICAgICAgICAgICAgICAgICAgICApO1xuXG5cbiAgICAgICAgICAgICAgICAvLyByZS1yZW5kZXIgdGhlIGJveCBwbG90XG4gICAgICAgICAgICAgICAgLy8gaW50ZXJxdWFydGlsZSByYW5nZVxuICAgICAgICAgICAgICAgIGNvbnN0IHExID0gcXVhbnRpbGUoZW50cnkudmFsdWVzLCAwLjI1KTtcbiAgICAgICAgICAgICAgICBjb25zdCBxMyA9IHF1YW50aWxlKGVudHJ5LnZhbHVlcywgMC43NSk7XG4gICAgICAgICAgICAgICAgY29uc3QgeiA9IDAuMTtcbiAgICAgICAgICAgICAgICBnLnNlbGVjdChcIi52aW9saW4taXJcIilcbiAgICAgICAgICAgICAgICAgICAgLnRyYW5zaXRpb24odClcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIHRoaXMuc2NhbGUueigteikpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKFwieVwiLCB0aGlzLnNjYWxlLnkocTMpKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIE1hdGguYWJzKHRoaXMuc2NhbGUueigteikgLSB0aGlzLnNjYWxlLnooeikpKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBNYXRoLmFicyh0aGlzLnNjYWxlLnkocTMpIC0gdGhpcy5zY2FsZS55KHExKSkpO1xuXG4gICAgICAgICAgICAgICAgLy8gdGhlIG1lZGlhbiBsaW5lXG4gICAgICAgICAgICAgICAgY29uc3QgbWVkID0gbWVkaWFuKGVudHJ5LnZhbHVlcyk7XG4gICAgICAgICAgICAgICAgZy5zZWxlY3QoXCIudmlvbGluLW1lZGlhblwiKVxuICAgICAgICAgICAgICAgICAgICAudHJhbnNpdGlvbih0KVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcIngxXCIsIHRoaXMuc2NhbGUueigteikpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKFwieDJcIiwgdGhpcy5zY2FsZS56KHopKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcInkxXCIsIHRoaXMuc2NhbGUueShtZWQpKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcInkyXCIsIHRoaXMuc2NhbGUueShtZWQpKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVuZGVyIHRoZSB2aW9saW4gYW5kIGJveCBwbG90c1xuICAgICAqIEBwYXJhbSBkb20ge0QzIERPTX1cbiAgICAgKiBAcGFyYW0gZW50cnkge09iamVjdH0gd2l0aCBhdHRyczogdmFsdWVzLCBsYWJlbFxuICAgICAqIEBwYXJhbSBzaG93V2hpc2tlciB7Qm9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9kcmF3VmlvbGluKGRvbSwgZW50cnksIHNob3dXaGlza2VyLCBnSW5kZXgpe1xuXG4gICAgICAgIC8vIGdlbmVyYXRlIHRoZSB2ZXJ0aWNlcyBmb3IgdGhlIHZpb2xpbiBwYXRoIHVzZSBhIGtkZVxuICAgICAgICBsZXQga2RlID0ga2VybmVsRGVuc2l0eUVzdGltYXRvcihcbiAgICAgICAgICAgIGtlcm5lbC5nYXVzc2lhbixcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueS50aWNrcygxMDApLCAvLyB1c2UgdXAgdG8gMTAwIHZlcnRpY2VzIGFsb25nIHRoZSBZIGF4aXMgKHRvIGNyZWF0ZSB0aGUgdmlvbGluIHBhdGgpXG4gICAgICAgICAgICBrZXJuZWxCYW5kd2lkdGgubnJkKGVudHJ5LnZhbHVlcykgLy8gZXN0aW1hdGUgdGhlIGJhbmR3aWR0aCBiYXNlZCBvbiB0aGUgZGF0YVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBlRG9tYWluID0gZXh0ZW50KGVudHJ5LnZhbHVlcyk7IC8vIGdldCB0aGUgbWF4IGFuZCBtaW4gaW4gZW50cnkudmFsdWVzXG4gICAgICAgIGNvbnN0IHZlcnRpY2VzID0ga2RlKGVudHJ5LnZhbHVlcykuZmlsdGVyKChkKT0+ZFswXT5lRG9tYWluWzBdJiZkWzBdPGVEb21haW5bMV0pOyAvLyBmaWx0ZXIgdGhlIHZlcnRpY2VzIHRoYXQgYXJlbid0IGluIHRoZSBlbnRyeS52YWx1ZXNcblxuICAgICAgICAvLyBkZWZpbmUgdGhlIHogc2NhbGUgLS0gdGhlIHZpb2xpbiB3aWR0aFxuICAgICAgICBsZXQgek1heCA9IG1heCh2ZXJ0aWNlcywgKGQpPT5NYXRoLmFicyhkWzFdKSk7IC8vIGZpbmQgdGhlIGFicyh2YWx1ZSkgaW4gZW50cnkudmFsdWVzXG4gICAgICAgIHRoaXMuc2NhbGUuelxuICAgICAgICAgICAgLmRvbWFpbihbLXpNYXgsIHpNYXhdKVxuICAgICAgICAgICAgLnJhbmdlKFt0aGlzLnNjYWxlLnN1YngoZW50cnkubGFiZWwpLCB0aGlzLnNjYWxlLnN1YngoZW50cnkubGFiZWwpICsgdGhpcy5zY2FsZS5zdWJ4LmJhbmR3aWR0aCgpXSk7XG5cbiAgICAgICAgLy8gdmlzdWFsIHJlbmRlcmluZ1xuICAgICAgICBjb25zdCB2aW9saW5HID0gZG9tLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgIC5hdHRyKCdpZCcsIGB2aW9saW4ke2dJbmRleH0tJHtlbnRyeS5sYWJlbH1gKTtcblxuICAgICAgICBsZXQgdmlvbGluID0gYXJlYSgpXG4gICAgICAgICAgICAueDAoKGQpID0+IHRoaXMuc2NhbGUueihkWzFdKSlcbiAgICAgICAgICAgIC54MSgoZCkgPT4gdGhpcy5zY2FsZS56KC1kWzFdKSlcbiAgICAgICAgICAgIC55KChkKSA9PiB0aGlzLnNjYWxlLnkoZFswXSkpO1xuXG4gICAgICAgIGNvbnN0IHZQYXRoID0gdmlvbGluRy5hcHBlbmQoXCJwYXRoXCIpXG4gICAgICAgICAgICAuZGF0dW0odmVydGljZXMpXG4gICAgICAgICAgICAuYXR0cihcImRcIiwgdmlvbGluKVxuICAgICAgICAgICAgLmNsYXNzZWQoXCJ2aW9saW5cIiwgdHJ1ZSlcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgKCk9PntcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkuY29sb3IgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGVudHJ5LmNvbG9yO1xuICAgICAgICAgICAgICAgIC8vIGFsdGVybmF0ZSB0aGUgb2RkIGFuZCBldmVuIGNvbG9ycywgbWF5YmUgd2UgZG9uJ3Qgd2FudCB0aGlzIGZlYXR1cmVcbiAgICAgICAgICAgICAgICBpZihnSW5kZXglMiA9PSAwKSByZXR1cm4gXCIjOTBjMWMxXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiIzk0YThiOFwiO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gYm94cGxvdFxuICAgICAgICBjb25zdCBxMSA9IHF1YW50aWxlKGVudHJ5LnZhbHVlcywgMC4yNSk7XG4gICAgICAgIGNvbnN0IHEzID0gcXVhbnRpbGUoZW50cnkudmFsdWVzLCAwLjc1KTtcbiAgICAgICAgY29uc3QgeiA9IHRoaXMuc2NhbGUuei5kb21haW4oKVsxXS8zO1xuXG4gICAgICAgIGlmKHNob3dXaGlza2VyKXtcbiAgICAgICAgICAgIC8vIHRoZSB1cHBlciBhbmQgbG93ZXIgbGltaXRzIG9mIGVudHJ5LnZhbHVlc1xuICAgICAgICAgICAgY29uc3QgaXFyID0gTWF0aC5hYnMocTMtcTEpO1xuICAgICAgICAgICAgY29uc3QgdXBwZXIgPSBtYXgoZW50cnkudmFsdWVzLmZpbHRlcigoZCk9PmQ8cTMrKGlxcioxLjUpKSk7XG4gICAgICAgICAgICBjb25zdCBsb3dlciA9IG1pbihlbnRyeS52YWx1ZXMuZmlsdGVyKChkKT0+ZD5xMS0oaXFyKjEuNSkpKTtcbiAgICAgICAgICAgIGRvbS5hcHBlbmQoXCJsaW5lXCIpXG4gICAgICAgICAgICAgICAgLmNsYXNzZWQoXCJ3aGlza2VyXCIsIHRydWUpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4MVwiLCB0aGlzLnNjYWxlLnooMCkpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCB0aGlzLnNjYWxlLnooMCkpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5MVwiLCB0aGlzLnNjYWxlLnkodXBwZXIpKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieTJcIiwgdGhpcy5zY2FsZS55KGxvd2VyKSlcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJzdHJva2VcIiwgXCIjZmZmXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaW50ZXJxdWFydGlsZSByYW5nZVxuICAgICAgICB2aW9saW5HLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCB0aGlzLnNjYWxlLnooLXopKVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIHRoaXMuc2NhbGUueShxMykpXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIE1hdGguYWJzKHRoaXMuc2NhbGUueigteiktdGhpcy5zY2FsZS56KHopKSlcbiAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIE1hdGguYWJzKHRoaXMuc2NhbGUueShxMykgLSB0aGlzLnNjYWxlLnkocTEpKSlcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ2aW9saW4taXJcIik7XG5cbiAgICAgICAgLy8gbWVkaWFuXG4gICAgICAgIGNvbnN0IG1lZCA9IG1lZGlhbihlbnRyeS52YWx1ZXMpO1xuICAgICAgICB2aW9saW5HLmFwcGVuZChcImxpbmVcIikgLy8gdGhlIG1lZGlhbiBsaW5lXG4gICAgICAgICAgICAuYXR0cihcIngxXCIsIHRoaXMuc2NhbGUueigteikpXG4gICAgICAgICAgICAuYXR0cihcIngyXCIsIHRoaXMuc2NhbGUueih6KSlcbiAgICAgICAgICAgIC5hdHRyKFwieTFcIiwgdGhpcy5zY2FsZS55KG1lZCkpXG4gICAgICAgICAgICAuYXR0cihcInkyXCIsIHRoaXMuc2NhbGUueShtZWQpKVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInZpb2xpbi1tZWRpYW5cIik7XG5cbiAgICAgICAgLy8gbW91c2UgZXZlbnRzXG4gICAgICAgIHZpb2xpbkcub24oXCJtb3VzZW92ZXJcIiwgKCk9PntcbiAgICAgICAgICAgIHZQYXRoLmNsYXNzZWQoXCJoaWdobGlnaHRlZFwiLCB0cnVlKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGVudHJ5KTtcbiAgICAgICAgICAgIGlmKHRoaXMudG9vbHRpcCA9PT0gdW5kZWZpbmVkKSBjb25zb2xlLndhcm4oXCJHcm91cFZpb2xpbiBXYXJuaW5nOiB0b29sdGlwIG5vdCBkZWZpbmVkXCIpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwLnNob3coXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5Lmdyb3VwICsgXCI8YnIvPlwiICtcbiAgICAgICAgICAgICAgICAgICAgZW50cnkubGFiZWwgKyBcIjxici8+XCIgK1xuICAgICAgICAgICAgICAgICAgICBcIk1lZGlhbjogXCIgKyBtZWQudG9QcmVjaXNpb24oNCkgKyBcIjxici8+XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdmlvbGluRy5vbihcIm1vdXNlb3V0XCIsICgpPT57XG4gICAgICAgICAgICB2UGF0aC5jbGFzc2VkKFwiaGlnaGxpZ2h0ZWRcIiwgZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfc2FuaXR5Q2hlY2soZGF0YSl7XG4gICAgICAgIGNvbnN0IGF0dHIgPSBbXCJncm91cFwiLCBcImxhYmVsXCIsIFwidmFsdWVzXCJdO1xuXG4gICAgICAgIGRhdGEuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgICAgICAgYXR0ci5mb3JFYWNoKChhKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRbYV0gPT09IHVuZGVmaW5lZCkgdGhyb3cgXCJHcm91cGVkVmlvbGluOiBpbnB1dCBkYXRhIGVycm9yLlwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIGlmICgwID09IGQudmFsdWVzLmxlbmd0aCkgdGhyb3cgXCJWaW9saW46IElucHV0IGRhdGEgZXJyb3JcIjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX2FkZEdyb3VwRGl2aWRlcihkb20pe1xuICAgICAgICBjb25zdCBncm91cHMgPSB0aGlzLnNjYWxlLnguZG9tYWluKCk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSBNYXRoLmFicyh0aGlzLnNjYWxlLngodGhpcy5zY2FsZS54LmRvbWFpbigpWzFdKSAtIHRoaXMuc2NhbGUueCh0aGlzLnNjYWxlLnguZG9tYWluKClbMF0pIC0gdGhpcy5zY2FsZS54LmJhbmR3aWR0aCgpKTtcblxuICAgICAgICBjb25zdCBnZXRYID0gKGcsIGkpPT4ge1xuICAgICAgICAgICAgaWYgKGkgIT09IGdyb3Vwcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueChnKSArICt0aGlzLnNjYWxlLnguYmFuZHdpZHRoKCkgKyAocGFkZGluZy8yKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZG9tLnNlbGVjdEFsbChcIi52bGluZVwiKS5kYXRhKGdyb3VwcylcbiAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAuYXBwZW5kKFwibGluZVwiKVxuICAgICAgICAgICAgLmNsYXNzZWQoXCJ2bGluZVwiLCB0cnVlKVxuICAgICAgICAgICAgLmF0dHIoXCJ4MVwiLCBnZXRYKVxuICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCBnZXRYKVxuICAgICAgICAgICAgLmF0dHIoXCJ5MVwiLCB0aGlzLnNjYWxlLnkucmFuZ2UoKVswXSlcbiAgICAgICAgICAgIC5hdHRyKFwieTJcIiwgdGhpcy5zY2FsZS55LnJhbmdlKClbMV0pXG4gICAgICAgICAgICAuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwgKGcsIGkpPT5pIT1ncm91cHMubGVuZ3RoLTE/MTowKVxuICAgICAgICAgICAgLnN0eWxlKFwic3Ryb2tlXCIsIFwicmdiKDg2LDk4LDEwNylcIilcbiAgICAgICAgICAgIC5zdHlsZShcIm9wYWNpdHlcIiwgMC41KVxuXG4gICAgfVxuXG5cbn0iLCIvKipcbiAqIENvcHlyaWdodCDCqSAyMDE1IC0gMjAxOCBUaGUgQnJvYWQgSW5zdGl0dXRlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgKGh0dHBzOi8vZ2l0aHViLmNvbS9icm9hZGluc3RpdHV0ZS9ndGV4LXZpei9ibG9iL21hc3Rlci9MSUNFTlNFLm1kKVxuICovXG4vKlxuVGhpcyBjbGFzcyBkZWZpbmVzIGEgZ2VuZSBtb2RlbCAob3IgaXNvZm9ybSksIHJlbmRlcmluZyB0aGUgZXhvbnMgYW5kIGp1bmN0aW9ucyBvZiBhIGdpdmVuIGdlbmUuIFRoZSBtb2RlbCBpcyByZW5kZXJlZCBiYXNlZCBvblxuZ2Vub21pYyBwb3NpdGlvbnMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN0cmFuZCBhbmQgdHJhbnNjcmlwdGlvbmFsIGRpcmVjdGlvbi5cblxuVE9ETzogc2ltcGxpZnkgaXNvZm9ybSBzdHJ1Y3R1cmUgcmVuZGVyaW5nP1xuICovXG5cbmltcG9ydCB7Y3VydmVDYXJkaW5hbCwgbGluZX0gZnJvbSBcImQzLXNoYXBlXCI7XG5pbXBvcnQge21heCwgc3VtfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7c2NhbGVMaW5lYXJ9IGZyb20gXCJkMy1zY2FsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHZW5lTW9kZWwge1xuICAgIC8qKlxuICAgICAqIGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIGdlbmUge09iamVjdH0gd2l0aCBhdHRyaWJ1dGVzOiBzdHJhbmQsIHRyYW5zY3JpcHRJZCwgZ2VuZVN5bWJvbFxuICAgICAqIEBwYXJhbSBleG9ucyB7TGlzdH0gb2YgZXhvbiBvYmplY3RzIHdpdGggYXR0cmlidXRlczogY2hyb20sIGNocm9tU3RhcnQsIGNocm9tRW5kLCBsZW5ndGgsIGV4b25OdW1iZXIsIGV4b25JZFxuICAgICAqIEBwYXJhbSBleG9uc0N1cmF0ZWQge0xpc3R9IG9mIGV4b24gb2JqZWN0cyBpbiB0aGUgZmluYWwgZ2VuZSBtb2RlbC4gVGhpcyBpcyBwcmV0dHkgc3BlY2lmaWMgdG8gR1RFeC4gSWYgdGhpcyBsaXN0IGlzbid0IGF2YWlsYWJsZSBmb3IgeW91ciBkYXRhLCB0aGVuIGp1c3QgcGFzcyBpbiB0aGUgc2FtZSBleG9uIGxpc3QgYWdhaW4uXG4gICAgICogQHBhcmFtIGp1bmN0aW9ucyB7TGlzdH0gb2YganVuY3Rpb24gb2JqZWN0cyB3aXRoIGF0dHJpYnV0ZXM6IGNocm9tLCBjaHJvbVN0YXJ0LCBjaHJvbUVuZCwganVuY3Rpb25JZFxuICAgICAqIEBwYXJhbSBpc0lzb2Zvcm0ge0Jvb2xlYW59XG4gICAgICogQHBhcmFtIG1heEludHJvbkxlbmd0aCB7SW50ZWdlcn0gdGhlIG1heGltdW0gbGVuZ3RoIG9mIGludHJvbi4gSW50cm9uIHJlbmRlcmluZyBpcyBjYXBwZWQgYXQgdGhpcyB2YWx1ZVxuICAgICAqIEBwYXJhbSBtaW5FeG9uV2lkdGgge0ludGVnZXJ9IHRoZSBtaW5pbXVtIHdpZHRoIChwaXhlbHMpIG9mIHRoZSBleG9uIHJlY3RhbmdsZS5cbiAgICAgKi9cblxuICAgIC8qKiBOT1RFOiB0aGUgZXhvbk51bWJlciBpbiBleG9ucyAmIGV4b25zQ3VyYXRlZCBkb24ndCByZWZlciB0byB0aGUgc2FtZSBleG9ucyAoYXQgbGVhc3QgdGhpcyBpcyB0aGUgY2FzZSBpbiBHVEV4KVxuICAgICAqICBUbyBlbnN1cmUgY29ycmVjdCBleG9uIG1hcHBpbmcgb2YgdGhlIGN1cmF0ZWQgZ2VuZSBtb2RlbCB0byB0aGUgb3JpZ2luYWwgbW9kZWwsIGhlcmUgd2UgdXNlIGdlbm9taWMgcG9zaXRpb24uXG4gICAgICovXG4gICAgY29uc3RydWN0b3IgKGdlbmUsIGV4b25zLCBleG9uc0N1cmF0ZWQsIGp1bmN0aW9ucywgaXNJc29mb3JtPWZhbHNlLCBtYXhJbnRyb25MZW5ndGg9MTAwMCwgbWluRXhvbldpZHRoPTApe1xuICAgICAgICB0aGlzLmdlbmUgPSBnZW5lO1xuICAgICAgICB0aGlzLmV4b25zID0gZXhvbnM7XG4gICAgICAgIGlmICh0aGlzLmdlbmUuc3RyYW5kID09IFwiK1wiKSB0aGlzLmV4b25zLnNvcnQoKGEsIGIpPT57cmV0dXJuIE51bWJlcihhLmV4b25OdW1iZXIpLU51bWJlcihiLmV4b25OdW1iZXIpfSk7XG4gICAgICAgIGVsc2UgdGhpcy5leG9ucy5zb3J0KChhLCBiKT0+e3JldHVybiBOdW1iZXIoYi5leG9uTnVtYmVyKS1OdW1iZXIoYS5leG9uTnVtYmVyKX0pO1xuICAgICAgICB0aGlzLmV4b25zQ3VyYXRlZCA9IGV4b25zQ3VyYXRlZC5zb3J0KChhLCBiKT0+e3JldHVybiBOdW1iZXIoYS5leG9uTnVtYmVyKS1OdW1iZXIoYi5leG9uTnVtYmVyKX0pO1xuICAgICAgICB0aGlzLmp1bmN0aW9ucyA9IGp1bmN0aW9ucy5zb3J0KChhLGIpID0+IHtcbiAgICAgICAgICAgIGlmIChhLmp1bmN0aW9uSWQgPCBiLmp1bmN0aW9uSWQpIHJldHVybiAtMTtcbiAgICAgICAgICAgIGlmIChhLmp1bmN0aW9uSWQgPiBiLmp1bmN0aW9uSWQpIHJldHVybiAxO1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0pOyAvLyBzb3J0ZWQgYnkganVuY3Rpb24gSURcbiAgICAgICAgdGhpcy5pc0lzb2Zvcm0gPSBpc0lzb2Zvcm07XG4gICAgICAgIHRoaXMubWF4SW50cm9uTGVuZ3RoID0gbWF4SW50cm9uTGVuZ3RoO1xuXG4gICAgICAgIC8vIGhhcmQtY29kZWQgZm9yIG5vd1xuICAgICAgICB0aGlzLmludHJvbkxlbmd0aCA9IDA7IC8vIGZpeGVkIGZha2UgaW50cm9uIGxlbmd0aCBpbiBiYXNlIHBhaXJzLCBvYnNvbGV0ZT9cbiAgICAgICAgdGhpcy5taW5FeG9uV2lkdGggPSBtaW5FeG9uV2lkdGg7IC8vIG1pbmltdW0gZXhvbiB3aWR0aCBpbiBwaXhlbHNcbiAgICAgICAgdGhpcy5udWxsQ29sb3IgPSAnI0RERERERCc7XG4gICAgfVxuXG4gICAgY2hhbmdlVGV4dGxhYmVsKGRvbSwgbGFiZWwpe1xuICAgICAgICBkb20uc2VsZWN0QWxsKFwiI21vZGVsSW5mb1wiKS50ZXh0KGxhYmVsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBkb20ge09iamVjdH0gb2YgRDNcbiAgICAgKiBAcGFyYW0gamRhdGEge0xpc3R9IG9mIGp1bmN0aW9uIGV4cHJlc3Npb24gb2JqZWN0c1xuICAgICAqIEBwYXJhbSBlZGF0YSB7TGlzdH0gb2YgZXhvbiBleHByZXNzaW9uIG9iamVjdHNcbiAgICAgKiBAcGFyYW0ganNjYWxlIHtEMyBzY2FsZX0gb2YgY29sb3JzIG9mIGp1bmN0aW9uIGRhdGFcbiAgICAgKiBAcGFyYW0gZXNjYWxlIHtEMyBzY2FsZX0gb2YgY29sb3JzIG9mIGV4b24gZGF0YVxuICAgICAqL1xuICAgIGFkZERhdGEoZG9tLCBqZGF0YSwgZWRhdGEsIGpzY2FsZSwgZXNjYWxlKXtcbiAgICAgICAgaWYgKGpkYXRhICE9PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgZG9tLnNlbGVjdEFsbChcIi5qdW5jXCIpLnN0eWxlKFwiZmlsbFwiLCAoZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBqZGF0YS5maWx0ZXIoKHopPT56Lmp1bmN0aW9uSWQ9PWQuanVuY3Rpb25JZClbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgamNvbG9yID0gdi52YWx1ZT09MD90aGlzLm51bGxDb2xvcjpqc2NhbGUodi52YWx1ZSk7XG4gICAgICAgICAgICAgICAgZG9tLnNlbGVjdEFsbChcIi5qdW5jLWN1cnZlXCIpLmZpbHRlcigoYC5qdW5jJHtkLmp1bmN0aW9uSWR9YCkpLnN0eWxlKFwic3Ryb2tlXCIsIGpjb2xvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGpjb2xvcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZG9tLnNlbGVjdEFsbChcIi5leG9uLWN1cmF0ZWRcIikuc3R5bGUoXCJmaWxsXCIsIChkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ID0gZWRhdGEuZmlsdGVyKCh6KT0+ei5leG9uSWQ9PWQuZXhvbklkKVswXTtcbiAgICAgICAgICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHRocm93IGAke2QuZXhvbklkfSBoYXMgbm8gZGF0YWA7XG4gICAgICAgICAgICBjb25zdCBlY29sb3IgPSB2LnZhbHVlID09IDA/dGhpcy5udWxsQ29sb3I6ZXNjYWxlKHYudmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGVjb2xvcjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVuZGVyIHRoZSBTVkcgb2YgdGhlIGdlbmUgbW9kZWxcbiAgICAgKiBAcGFyYW0gZG9tOiBhbiBTVkcgZG9tIG9iamVjdFxuICAgICAqIEBwYXJhbSBjb25maWdcblxuICAgICAqL1xuICAgIHJlbmRlcihkb20sIGNvbmZpZykge1xuICAgICAgICB0aGlzLnNldFhzY2FsZShjb25maWcudyk7XG5cbiAgICAgICAgLyogTm90ZTogZXhvbi54LCBleG9uLncgYXJlIGluIHBpeGVscyBmb3IgdmlzdWFsIHJlbmRlcmluZyAqL1xuICAgICAgICAvKiBOb3RlOiBleG9uLmxlbmd0aCBpcyBpbiBiYXNlIHBhaXJzICovXG4gICAgICAgIC8vIGNhbGN1bGF0aW5nIHggYW5kIHcgZm9yIGVhY2ggZXhvblxuICAgICAgICBjb25zdCBleG9uWSA9IGNvbmZpZy5oLzI7IC8vIFRPRE86IHJlbW92ZSBoYXJkLWNvZGVkIHZhbHVlc1xuICAgICAgICB0aGlzLmV4b25zLmZvckVhY2goKGQsIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChpID09IDApIHtcbiAgICAgICAgICAgICAgICBkLnggPSAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkLnggPSB0aGlzLmV4b25zW2ktMV0ueCArIHRoaXMuZXhvbnNbaS0xXS53ICsgdGhpcy54U2NhbGUoZC5pbnRyb25MZW5ndGg+dGhpcy5tYXhJbnRyb25MZW5ndGg/dGhpcy5tYXhJbnRyb25MZW5ndGg6ZC5pbnRyb25MZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZC53ID0gdGhpcy54U2NhbGUoZC5sZW5ndGgpPHRoaXMubWluRXhvbldpZHRoP3RoaXMubWluRXhvbldpZHRoOnRoaXMueFNjYWxlKGQubGVuZ3RoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gY2FsY3VsYWluZyB4IGFuZCB3IG9mIHRoZSByZWN0YW5nbGUgZm9yIGVhY2ggY3VyYXRlZCBleG9uIG9uIHRoZSBmaW5hbCBnZW5lIG1vZGVsXG4gICAgICAgIHRoaXMuZXhvbnNDdXJhdGVkLmZvckVhY2goKGQsIGkpID0+IHtcbiAgICAgICAgICAgIC8vIGZpcnN0LCBtYXAgZWFjaCBmaW5hbCBjdXJhdGVkIGV4b24gdG8gdGhlIG9yaWdpbmFsIGZ1bGwgZ2VuZSBtb2RlbC0tZmluZCB0aGUgb3JpZ2luYWwgZXhvblxuICAgICAgICAgICAgLy8gZmluZCB0aGUgb3JpZ2luYWwgZXhvblxuICAgICAgICAgICAgZC5vcmlFeG9uID0gdGhpcy5fZmluZEV4b24oZC5jaHJvbVN0YXJ0KXx8dGhpcy5fZmluZEV4b24oZC5jaHJvbUVuZCk7XG4gICAgICAgICAgICBpZiAoZC5vcmlFeG9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBub3QgZm91bmRcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYCR7dGhpcy5nZW5lLnRyYW5zY3JpcHRJZH0tJHtkLmV4b25JZH0gY2FuJ3QgbWFwIHRvIGZ1bGwgZ2VuZSBtb2RlbGApO1xuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaWdub3JlIHVubWFwcGFibGUgZXhvbnMsIHRoaXMgaGFwcGVucyBhdCB0aW1lcyAod2h5PylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2FsY3VsYXRlIGZvciB4XG4gICAgICAgICAgICBpZiAoTnVtYmVyKGQub3JpRXhvbi5jaHJvbVN0YXJ0KSA9PSBOdW1iZXIoZC5jaHJvbVN0YXJ0KSkgZC54ID0gZC5vcmlFeG9uLng7XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgZXhvbiBkb2Vzbid0IHN0YXJ0IGZyb20gdGhlIG9yaUV4b24gc3RhcnQgcG9zXG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdCA9IE51bWJlcihkLmNocm9tU3RhcnQpIC0gTnVtYmVyKGQub3JpRXhvbi5jaHJvbVN0YXJ0KSArIDE7XG4gICAgICAgICAgICAgICAgZC54ID0gZC5vcmlFeG9uLnggKyB0aGlzLnhTY2FsZShkaXN0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2FsY3VsYXRlIGZvciB3XG4gICAgICAgICAgICBpZiAoZC5sZW5ndGggPT09IHVuZGVmaW5lZCkgZC5sZW5ndGggPSBOdW1iZXIoZC5jaHJvbUVuZCkgLSBOdW1iZXIoZC5jaHJvbVN0YXJ0KSArIDE7XG4gICAgICAgICAgICBkLncgPSB0aGlzLnhTY2FsZShkLmxlbmd0aCk8dGhpcy5taW5FeG9uV2lkdGg/dGhpcy5taW5FeG9uV2lkdGg6dGhpcy54U2NhbGUoZC5sZW5ndGgpO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmKCF0aGlzLmlzSXNvZm9ybSl7XG4gICAgICAgICAgICAvLyBOT1RFOiBkbyBub3QgYWx0ZXIgdGhlIHJlbmRlcmluZyBvcmRlciBvZiB2aXN1YWwgY29tcG9uZW50cy5cbiAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYSBnZW5lIG1vZGVsLCBub3QgYW4gaXNvZm9ybVxuICAgICAgICAgICAgLy8gY2FsY3VsYXRpbmcgcG9zaXRpb25zIGZvciBlYWNoIGp1bmN0aW9uXG4gICAgICAgICAgICB0aGlzLmp1bmN0aW9ucyA9IHRoaXMuanVuY3Rpb25zLmZpbHRlcigoZCk9PntcbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBmaWx0ZXIgdW5tYXBwZWQganVuY3Rpb25zXG4gICAgICAgICAgICAgICAgZC5zdGFydEV4b24gPSB0aGlzLl9maW5kRXhvbihkLmNocm9tU3RhcnQpO1xuICAgICAgICAgICAgICAgIGQuZW5kRXhvbiA9IHRoaXMuX2ZpbmRFeG9uKGQuY2hyb21FbmQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkLnN0YXJ0RXhvbiAhPT0gdW5kZWZpbmVkICYmIGQuZW5kRXhvbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuanVuY3Rpb25zLnNvcnQoKGEsYik9PntcbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBzb3J0IGJ5IGNocm9tU3RhcnRcbiAgICAgICAgICAgICAgICBpZiAoK2EuY2hyb21TdGFydCA8ICtiLmNocm9tU3RhcnQpIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICBpZiAoK2EuY2hyb21TdGFydCA+ICtiLmNocm9tU3RhcnQpIHJldHVybiAxO1xuXG4gICAgICAgICAgICAgICAgLy8gdGhlbiBzb3J0IGJ5IGNocm9tRW5kOlxuICAgICAgICAgICAgICAgIGlmICgrYS5jaHJvbUVuZCA8ICtiLmNocm9tRW5kKSByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgaWYgKCthLmNocm9tRW5kID4gK2IuY2hyb21FbmQpIHJldHVybiAxO1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmp1bmN0aW9ucy5mb3JFYWNoKChkLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZC5zdGFydEV4b24gPSB0aGlzLl9maW5kRXhvbihkLmNocm9tU3RhcnQpO1xuICAgICAgICAgICAgICAgIC8vIGQuZW5kRXhvbiA9IHRoaXMuX2ZpbmRFeG9uKGQuY2hyb21FbmQpO1xuICAgICAgICAgICAgICAgIGQuZGlzcGxheU5hbWUgPSBgSnVuY3Rpb24gJHtpKzF9YDtcblxuXG4gICAgICAgICAgICAgICAgLy8gZC5kaXNwbGF5TmFtZSA9IGBFeG9uICR7ZC5zdGFydEV4b24uZXhvbk51bWJlcn0gLSAke2QuZW5kRXhvbi5leG9uTnVtYmVyfWA7XG4gICAgICAgICAgICAgICAgLy8gaWYgKGQuc3RhcnRFeG9uLmV4b25OdW1iZXIgPT0gZC5lbmRFeG9uLmV4b25OdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgY29uc29sZS53YXJuKGQuanVuY3Rpb25JZCArIFwiIGlzIGluIEV4b246IFwiICtkLnN0YXJ0RXhvbi5jaHJvbVN0YXJ0ICsgXCIgLSBcIiArIGQuc3RhcnRFeG9uLmNocm9tRW5kICk7XG4gICAgICAgICAgICAgICAgLy8gfSAvLyB3aGF0IGlzIGhhcHBlbmluZ1xuXG4gICAgICAgICAgICAgICAgLy8gZC5maWx0ZXJlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2FsY3VsYXRlIGZvciBwb3NpdGlvbnNcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0ID0gTnVtYmVyKGQuY2hyb21TdGFydCkgLSBOdW1iZXIoZC5zdGFydEV4b24uY2hyb21TdGFydCkgKyAxO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3QyID0gTnVtYmVyKGQuY2hyb21FbmQpIC0gTnVtYmVyKGQuZW5kRXhvbi5jaHJvbVN0YXJ0KSArIDE7XG5cbiAgICAgICAgICAgICAgICBkLnN0YXJ0WCA9IGQuc3RhcnRFeG9uLnggKyB0aGlzLnhTY2FsZShkaXN0KTtcbiAgICAgICAgICAgICAgICBkLmVuZFggPSBkLmVuZEV4b24ueCArIHRoaXMueFNjYWxlKGRpc3QyKTtcbiAgICAgICAgICAgICAgICBkLmN4ID0gZC5zdGFydFggKyAoZC5lbmRYIC0gZC5zdGFydFggKyAxKS8yOyAvLyBqdW5jdGlvbiBpcyByZW5kZXJlZCBhdCB0aGUgbWlkcG9pbnQgYmV0d2VlbiBzdGFydFggYW5kIGVuZFhcbiAgICAgICAgICAgICAgICBkLmN5ID0gZXhvblkgLSAxNSAqICggTWF0aC5hYnMoTnVtYmVyKGQuZW5kRXhvbi5leG9uTnVtYmVyKSAtIE51bWJlcihkLnN0YXJ0RXhvbi5leG9uTnVtYmVyKSkgKyAwLjUgKTtcbiAgICAgICAgICAgICAgICBpZiAoZC5jeSA8IDApIGQuY3kgPSAwO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gaGFuZGxpbmcgZWRnZSBjYXNlOiBvdmVybGFwcGluZyBqdW5jdGlvbnMsIGFkZCBqaXR0ZXJcbiAgICAgICAgICAgIC8vIGEucmVkdWNlKChyLGspPT57cltrXT0xK3Jba118fDE7cmV0dXJuIHJ9LHt9KVxuICAgICAgICAgICAgY29uc3QgY291bnRzID0gdGhpcy5qdW5jdGlvbnMucmVkdWNlKChyLGQpPT57cltkLmRpc3BsYXlOYW1lXT0xK3JbZC5kaXNwbGF5TmFtZV18fDE7cmV0dXJuIHJ9LHt9KTtcbiAgICAgICAgICAgIHRoaXMuanVuY3Rpb25zLmZvckVhY2goKGQpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBqaXR0ZXJcbiAgICAgICAgICAgICAgICBpZihjb3VudHNbZC5kaXNwbGF5TmFtZV0gPiAxKXsgLy8gb3ZlcmxhcHBpbmcganVuY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIC8vIGQuY3ggKz0gTWF0aC5yYW5kb20oKSoyMDtcbiAgICAgICAgICAgICAgICAgICAgZC5jeSAtPSBNYXRoLnJhbmRvbSgpKjE1O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvKioqKiogcmVuZGVyIGp1bmN0aW9ucyAqL1xuICAgICAgICAgICAgY29uc3QgY3VydmUgPSBsaW5lKClcbiAgICAgICAgICAgICAgICAueCgoZCkgPT4gZC54KVxuICAgICAgICAgICAgICAgIC55KChkKSA9PiBkLnkpXG4gICAgICAgICAgICAgICAgLmN1cnZlKGN1cnZlQ2FyZGluYWwpO1xuXG4gICAgICAgICAgICB0aGlzLmp1bmN0aW9ucy5mb3JFYWNoKChkLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb20uYXBwZW5kKFwicGF0aFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmRhdHVtKFt7eDpkLnN0YXJ0WCwgeTpleG9uWX0sIHt4OmQuY3gsIHk6ZC5jeX0sIHt4OmQuZW5kWCwgeTpleG9uWX1dKSAvLyB0aGUgaW5wdXQgcG9pbnRzIHRvIGRyYXcgdGhlIGN1cnZlXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIGBqdW5jLWN1cnZlIGp1bmMke2QuanVuY3Rpb25JZH1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJkXCIsIGN1cnZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN0eWxlKFwic3Ryb2tlXCIsIFwiIzkyYmNjOVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgY29uc3QganVuY0RvdHMgPSBkb20uc2VsZWN0QWxsKFwiLmp1bmNcIilcbiAgICAgICAgICAgICAgICAuZGF0YSh0aGlzLmp1bmN0aW9ucyk7XG5cbiAgICAgICAgICAgIC8vIHVwZGF0aW5nIGVsZW1lbnRzXG4gICAgICAgICAgICBqdW5jRG90cy5hdHRyKFwiY3hcIiwgKGQpID0+IGQuY3gpO1xuICAgICAgICAgICAganVuY0RvdHMuYXR0cihcImN5XCIsIChkKSA9PiBkLmN5KTsgLy8gVE9ETzogcmVtb3ZlIGhhcmQtY29kZWQgdmFsdWVzXG5cbiAgICAgICAgICAgIC8vIGVudGVyaW5nIG5ldyBlbGVtZW50c1xuICAgICAgICAgICAganVuY0RvdHMuZW50ZXIoKS5hcHBlbmQoXCJjaXJjbGVcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIChkKSA9PiBganVuYyBqdW5jJHtkLmp1bmN0aW9uSWR9YClcbiAgICAgICAgICAgICAgICAuYXR0cihcImN4XCIsIChkKSA9PiBkLmN4KVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY3lcIiwgKGQpID0+IGQuY3kpXG4gICAgICAgICAgICAgICAgLm1lcmdlKGp1bmNEb3RzKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiclwiLCA0KVxuICAgICAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgXCJyZ2IoODYsIDk4LCAxMDcpXCIpO1xuXG4gICAgICAgICAgICAvKioqKiogcmVuZGVyaW5nIGZ1bGwgZ2VuZSBtb2RlbCBleG9ucyAqL1xuICAgICAgICAgICAgY29uc3QgZXhvblJlY3RzID0gZG9tLnNlbGVjdEFsbChcIi5leG9uXCIpXG4gICAgICAgICAgICAuZGF0YSh0aGlzLmV4b25zKTtcblxuICAgICAgICAgICAgLy8gdXBkYXRpbmcgZWxlbWVudHNcbiAgICAgICAgICAgIGV4b25SZWN0cy5hdHRyKFwieFwiLCAoZCkgPT4gZC54KTtcbiAgICAgICAgICAgIGV4b25SZWN0cy5hdHRyKFwieVwiLCBleG9uWSk7XG5cbiAgICAgICAgICAgIC8vIGVudGVyaW5nIG5ldyBlbGVtZW50c1xuICAgICAgICAgICAgZXhvblJlY3RzLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgKGQpPT5gZXhvbiBleG9uJHtkLmV4b25OdW1iZXJ9YClcbiAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgZXhvblkpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJyeFwiLCAyKVxuICAgICAgICAgICAgICAgIC5hdHRyKCdyeScsIDIpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCAoZCkgPT4gZC53KVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIDE1KSAvLyBUT0RPOiByZW1vdmUgaGFyZC1jb2RlZCB2YWx1ZXNcbiAgICAgICAgICAgICAgICAuYXR0cihcInhcIiwgKGQpID0+IGQueClcbiAgICAgICAgICAgICAgICAubWVyZ2UoZXhvblJlY3RzKVxuICAgICAgICAgICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIik7XG5cbiAgICAgICAgICAgIC8vIG1vZGVsIGluZm8gdGV4dCBsYWJlbFxuICAgICAgICAgICAgZG9tLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcImlkXCIsIFwibW9kZWxJbmZvXCIpIC8vIFRPRE86IG5vIGhhcmQtY29kZWQgdmFsdWVcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcImVuZFwiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieFwiLCB0aGlzLnhTY2FsZSgwKSlcbiAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgZXhvblktMTApXG4gICAgICAgICAgICAgICAgLnN0eWxlKFwiZm9udC1zaXplXCIsIDEyKVxuICAgICAgICAgICAgICAgIC50ZXh0KFwiR2VuZSBNb2RlbFwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhbiBpc29mb3JtLCByZW5kZXIgdGhlIGludHJvbiBsaW5lXG4gICAgICAgICAgICBjb25zdCBpbnRyb25MaW5lID0gZG9tLmFwcGVuZChcImxpbmVcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcIngxXCIsIHRoaXMuZXhvbnNDdXJhdGVkWzBdLngpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCB0aGlzLmV4b25zQ3VyYXRlZFt0aGlzLmV4b25zQ3VyYXRlZC5sZW5ndGgtMV0ueClcbiAgICAgICAgICAgICAgICAuYXR0cihcInkxXCIsIGV4b25ZICsgKDE1LzIpKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieTJcIiwgZXhvblkgKyAoMTUvMikpXG4gICAgICAgICAgICAgICAgLmNsYXNzZWQoXCJpbnRyb25cIiwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvKioqKiogcmVuZGVyaW5nIGN1cmF0ZWQgZXhvbnMgb24gdGhlIGZpbmFsIGdlbmUgbW9kZWwgb3IgaXNvZm9ybSBleG9ucyAqL1xuICAgICAgICBjb25zdCBleG9uUmVjdHMyID0gZG9tLnNlbGVjdEFsbChcIi5leG9uLWN1cmF0ZWRcIilcbiAgICAgICAgICAgIC5kYXRhKHRoaXMuZXhvbnNDdXJhdGVkKTtcblxuICAgICAgICAvLyB1cGRhdGluZyBlbGVtZW50c1xuICAgICAgICBleG9uUmVjdHMyLmF0dHIoXCJ4XCIsIChkKSA9PiBkLngpO1xuICAgICAgICBleG9uUmVjdHMyLmF0dHIoXCJ5XCIsIGV4b25ZKTtcblxuICAgICAgICAvLyBlbnRlcmluZyBuZXcgZWxlbWVudHNcbiAgICAgICAgZXhvblJlY3RzMi5lbnRlcigpLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgKGQpPT50aGlzLmlzSXNvZm9ybT8nZXhvbi1jdXJhdGVkJzpgZXhvbi1jdXJhdGVkIGV4b24tY3VyYXRlZCR7ZC5leG9uTnVtYmVyfWApXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgZXhvblkpXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIChkKSA9PiBkLncpXG4gICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCAxNSkgLy8gVE9ETzogcmVtb3ZlIGhhcmQtY29kZWQgdmFsdWVzXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgKGQpID0+IGQueClcbiAgICAgICAgICAgIC5tZXJnZShleG9uUmVjdHMyKVxuICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBcIiNlZWVcIilcbiAgICAgICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIik7XG5cblxuICAgICAgICAvKioqKiogcmVuZGVyaW5nIHRleHQgbGFiZWxzICovXG4gICAgICAgIGlmIChjb25maWcubGFiZWxPbiA9PSAnbGVmdCcgfHwgY29uZmlnLmxhYmVsT24gPT0gJ2JvdGgnKXtcbiAgICAgICAgICAgIGRvbS5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuYXR0cihcImlkXCIsIFwibW9kZWxMYWJlbFwiKSAvLyBUT0RPOiBubyBoYXJkLWNvZGVkIHZhbHVlXG4gICAgICAgICAgICAuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcImVuZFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIHRoaXMueFNjYWxlLnJhbmdlKClbMF0gLSA1KVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGV4b25ZICsgNy41KVxuICAgICAgICAgICAgLnN0eWxlKFwiZm9udC1zaXplXCIsIFwiOXB4XCIpXG4gICAgICAgICAgICAudGV4dCh0aGlzLmdlbmUudHJhbnNjcmlwdElkPT09dW5kZWZpbmVkP2Ake3RoaXMuZ2VuZS5nZW5lU3ltYm9sfWA6dGhpcy5nZW5lLnRyYW5zY3JpcHRJZCk7XG5cblxuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcubGFiZWxPbiA9PSAncmlnaHQnIHx8IGNvbmZpZy5sYWJlbE9uID09ICdib3RoJyl7XG4gICAgICAgICAgICBkb20uYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJpZFwiLCBcIm1vZGVsTGFiZWxSaWdodFwiKSAvLyBUT0RPOiBubyBoYXJkLWNvZGVkIHZhbHVlXG4gICAgICAgICAgICAuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcInN0YXJ0XCIpXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgdGhpcy54U2NhbGUucmFuZ2UoKVsxXSArIDUwKVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGV4b25ZICsgNy41KVxuICAgICAgICAgICAgLnN0eWxlKFwiZm9udC1zaXplXCIsIFwiOXB4XCIpXG4gICAgICAgICAgICAudGV4dCh0aGlzLmdlbmUudHJhbnNjcmlwdElkPT09dW5kZWZpbmVkP2Ake3RoaXMuZ2VuZS5nZW5lU3ltYm9sfWA6dGhpcy5nZW5lLnRyYW5zY3JpcHRJZCk7XG5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFhzY2FsZSh3KXtcbiAgICAgICAgLy8gY29uY2VwdCBleHBsYWluZWQ6XG4gICAgICAgIC8vIGFzc3VtaW5nIHRoZSBjYW52YXMgd2lkdGggaXMgZml4ZWRcbiAgICAgICAgLy8gdGhlIHRhc2sgaXMgaG93IHRvIHJlbmRlciBhbGwgZXhvbnMgKyBmaXhlZC13aWR0aCBpbnRyb25zIHdpdGhpbiB0aGUgY2FudmFzXG4gICAgICAgIC8vIGZpcnN0IGZpbmQgdGhlIGxhcmdlc3QgZXhvbixcbiAgICAgICAgLy8gdGhlbiBzZXQgdGhlIHggc2NhbGUgb2YgdGhlIGNhbnZhcyB0byBhY2NvbW1vZGF0ZSBtYXgoZXhvbiBsZW5ndGgpKmV4b24gY291bnRzLFxuICAgICAgICAvLyB0aGlzIGVuc3VyZXMgdGhhdCB0aGVyZSdzIGFsd2F5cyBzcGFjZSBmb3IgcmVuZGVyaW5nIGludHJvbnNcbiAgICAgICAgLy8gdGhlIGZpeGVkIGludHJvbiB3aWR0aCBpcyBjYWxjdWxhdGVkIGFzIHN1Y2g6XG4gICAgICAgIC8vICgobWF4KGV4b24gbGVuZ3RoKSAqIGV4b24gY291bnRzKSAtIHRvdGFsIGV4b24gbGVuZ3RoKS8oZXhvbiBjb3VudHMgLSAxKVxuXG4gICAgICAgIHRoaXMuZXhvbnMuc29ydCgoYSxiKT0+e1xuICAgICAgICAgICAgaWYgKE51bWJlcihhLmNocm9tU3RhcnQpIDwgTnVtYmVyKGIuY2hyb21TdGFydCkpIHJldHVybiAtMTtcbiAgICAgICAgICAgIGlmIChOdW1iZXIoYS5jaHJvbVN0YXJ0KSA+IE51bWJlcihiLmNocm9tU3RhcnQpKSByZXR1cm4gMTtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgdGhpcy5leG9ucy5mb3JFYWNoKChkLCBpKT0+e1xuICAgICAgICAgICAgZC5sZW5ndGggPSBOdW1iZXIoZC5jaHJvbUVuZCkgLSBOdW1iZXIoZC5jaHJvbVN0YXJ0KSArIDE7XG4gICAgICAgICAgICBpZiAoaSA9PSAwKXtcbiAgICAgICAgICAgICAgICAvLyB0aGUgZmlyc3QgZXhvblxuICAgICAgICAgICAgICAgIHN1bSArPSBkLmxlbmd0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IG5iID0gdGhpcy5leG9uc1tpLTFdOyAvLyB0aGUgdXBzdHJlYW0gbmVpZ2hib3IgZXhvblxuICAgICAgICAgICAgICAgIGQuaW50cm9uTGVuZ3RoID0gTnVtYmVyKGQuY2hyb21TdGFydCkgLSBOdW1iZXIobmIuY2hyb21FbmQpICsgMTtcbiAgICAgICAgICAgICAgICBzdW0gKz0gZC5sZW5ndGggKyAoZC5pbnRyb25MZW5ndGg+dGhpcy5tYXhJbnRyb25MZW5ndGg/dGhpcy5tYXhJbnRyb25MZW5ndGg6ZC5pbnRyb25MZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBkb21haW4gPSBbMCwgc3VtXTtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBbMCwgd107XG4gICAgICAgIHRoaXMueFNjYWxlID0gc2NhbGVMaW5lYXIoKVxuICAgICAgICAgICAgLmRvbWFpbihkb21haW4pXG4gICAgICAgICAgICAucmFuZ2UocmFuZ2UpO1xuICAgIH1cblxuICAgIHNldFhzY2FsZUZpeEludHJvbih3KXtcbiAgICAgICAgLy8gY29uY2VwdCBleHBsYWluZWQ6XG4gICAgICAgIC8vIGFzc3VtaW5nIHRoZSBjYW52YXMgd2lkdGggaXMgZml4ZWRcbiAgICAgICAgLy8gdGhlIHRhc2sgaXMgaG93IHRvIHJlbmRlciBhbGwgZXhvbnMgKyBmaXhlZC13aWR0aCBpbnRyb25zIHdpdGhpbiB0aGUgY2FudmFzXG4gICAgICAgIC8vIGZpcnN0IGZpbmQgdGhlIGxhcmdlc3QgZXhvbixcbiAgICAgICAgLy8gdGhlbiBzZXQgdGhlIHggc2NhbGUgb2YgdGhlIGNhbnZhcyB0byBhY2NvbW1vZGF0ZSBtYXgoZXhvbiBsZW5ndGgpKmV4b24gY291bnRzLFxuICAgICAgICAvLyB0aGlzIGVuc3VyZXMgdGhhdCB0aGVyZSdzIGFsd2F5cyBzcGFjZSBmb3IgcmVuZGVyaW5nIGludHJvbnNcbiAgICAgICAgLy8gdGhlIGZpeGVkIGludHJvbiB3aWR0aCBpcyBjYWxjdWxhdGVkIGFzIHN1Y2g6XG4gICAgICAgIC8vICgobWF4KGV4b24gbGVuZ3RoKSAqIGV4b24gY291bnRzKSAtIHRvdGFsIGV4b24gbGVuZ3RoKS8oZXhvbiBjb3VudHMgLSAxKVxuXG4gICAgICAgIHRoaXMuZXhvbnMuZm9yRWFjaCgoZCkgPT4ge2QubGVuZ3RoID0gTnVtYmVyKGQuY2hyb21FbmQpIC0gTnVtYmVyKGQuY2hyb21TdGFydCkgKyAxfSk7XG4gICAgICAgIGNvbnN0IG1heEV4b25MZW5ndGggPSBtYXgodGhpcy5leG9ucywgKGQpPT5kLmxlbmd0aCk7XG5cbiAgICAgICAgY29uc3QgZG9tYWluID0gWzAsIG1heEV4b25MZW5ndGgqdGhpcy5leG9ucy5sZW5ndGhdO1xuICAgICAgICBjb25zdCByYW5nZSA9IFswLCB3XTtcbiAgICAgICAgdGhpcy54U2NhbGUgPSBzY2FsZUxpbmVhcigpXG4gICAgICAgICAgICAuZG9tYWluKGRvbWFpbilcbiAgICAgICAgICAgIC5yYW5nZShyYW5nZSk7XG5cbiAgICAgICAgLy8gZml4ZWQgaW50cm9uIHdpZHRoXG4gICAgICAgIGNvbnN0IG1pbkxlbmd0aCA9IHRoaXMueFNjYWxlLmludmVydCh0aGlzLm1pbkV4b25XaWR0aCk7IC8vIHRoZSBtaW5pbXVtIGV4b24gbGVuZ3RoIHRoYXQgbWFwcyB0byBtaW5pbXVtIGV4b24gd2lkdGggKHBpeGVscykgdXNpbmcgeFNjYWxlXG4gICAgICAgIGNvbnN0IHRvdGFsRXhvbkxlbmd0aCA9IHN1bSh0aGlzLmV4b25zLCAoZCk9PmQubGVuZ3RoPm1pbkxlbmd0aD9kLmxlbmd0aDptaW5MZW5ndGgpOyAvLyBpZiBhbiBleG9uIGlzIHNob3J0ZXIgdGhhbiBtaW4gbGVuZ3RoLCB1c2UgbWluIGxlbmd0aFxuICAgICAgICB0aGlzLmludHJvbkxlbmd0aCA9IChtYXhFeG9uTGVuZ3RoICogdGhpcy5leG9ucy5sZW5ndGggLSB0b3RhbEV4b25MZW5ndGgpLyh0aGlzLmV4b25zLmxlbmd0aC0xKTsgLy8gY2FsdWNsYXRlIHRoZSBmaXhlZCBpbnRyb24gbGVuZ3RoXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9yIGEgZ2l2ZW4gcG9zaXRpb24sIGZpbmQgdGhlIGV4b25cbiAgICAgKiBAcGFyYW0gcG9zIHtJbnRlZ2VyfTogYSBnZW5vbWljIHBvc2l0aW9uXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfZmluZEV4b24ocG9zKXtcbiAgICAgICAgcG9zID0gTnVtYmVyKHBvcyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmV4b25zLmZpbHRlcigoZCkgPT4ge3JldHVybiBOdW1iZXIoZC5jaHJvbVN0YXJ0KSAtIDEgPD0gcG9zICYmIE51bWJlcihkLmNocm9tRW5kKSArIDEgPj0gcG9zfSk7XG4gICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PSAxKSByZXR1cm4gcmVzdWx0c1swXTtcbiAgICAgICAgZWxzZSBpZihyZXN1bHRzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJObyBleG9uIGZvdW5kIGZvcjogXCIgKyBwb3MpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIk1vcmUgdGhhbiBvbmUgZXhvbnMgZm91bmQgZm9yOiBcIiArIHBvcyk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICB9XG5cbn0iLCIvKipcbiAqIENvcHlyaWdodCDCqSAyMDE1IC0gMjAxOCBUaGUgQnJvYWQgSW5zdGl0dXRlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgKGh0dHBzOi8vZ2l0aHViLmNvbS9icm9hZGluc3RpdHV0ZS9ndGV4LXZpei9ibG9iL21hc3Rlci9MSUNFTlNFLm1kKVxuICovXG4vKlxuVGhpcyBjbGFzcyBpcyBhIHZpZXdlciBvZiB0cmFuc2NyaXB0aW9uYWwgaXNvZm9ybXMsIGVhY2ggaXMgcmVuZGVyIGFzIGEgdHJhY2tcbiAqL1xuXG5pbXBvcnQgR2VuZU1vZGVsIGZyb20gXCIuL0dlbmVNb2RlbFwiO1xuaW1wb3J0IHtzZWxlY3QsIHNlbGVjdEFsbH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtzY2FsZUJhbmR9IGZyb20gXCJkMy1zY2FsZVwiO1xuaW1wb3J0IHtheGlzVG9wLCBheGlzUmlnaHR9IGZyb20gXCJkMy1heGlzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElzb2Zvcm1UcmFja1ZpZXdlciB7XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXNvZm9ybXMge0xpc3R9IG9mIGlzb2Zvcm0gb2JqZWN0cyB3aXRoIGF0dHI6IHRyYW5zY3JpcHRJZCwgc3RhcnQsIGVuZFxuICAgICAqIEBwYXJhbSBpc29mb3JtRXhvbnMge0RpY3Rpb25hcnl9IG9mIGxpc3RzIG9mIGlzb2Zvcm0gZXhvbnMgaW5kZXhlZCBieSBpc29mb3JtIElEICh0cmFuc2NyaXB0SWQpXG4gICAgICogQHBhcmFtIG1vZGVsRXhvbnMge0xpc3R9IG9mIHJlZmVyZW5jZSBleG9ucy4uLlxuICAgICAqIEBwYXJhbSBjb25maWdcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihpc29mb3JtcywgaXNvZm9ybUV4b25zLCBtb2RlbEV4b25zLCBjb25maWcpe1xuICAgICAgICB0aGlzLmlzb2Zvcm1zID0gaXNvZm9ybXM7XG4gICAgICAgIHRoaXMuaXNvZm9ybUV4b25zID0gaXNvZm9ybUV4b25zO1xuICAgICAgICB0aGlzLm1vZGVsRXhvbnMgPSBtb2RlbEV4b25zO1xuICAgICAgICB0aGlzLnZpc3VhbERvbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgICAgIHRoaXMubnVsbENvbG9yID0gXCIjREREREREXCI7XG4gICAgfVxuXG4gICAgc2hvd0RhdGEoZGF0YSwgY29sb3JTY2FsZSwgYmFyU2NhbGUsIGRhdGFMYWJlbCwgc29ydD10cnVlKXtcbiAgICAgICAgaWYgKHNvcnQpe1xuICAgICAgICAgICAgZGF0YS5zb3J0KChhLGIpPT57cmV0dXJuIC0oYS5kaXNwbGF5VmFsdWUgLSBiLmRpc3BsYXlWYWx1ZSl9KTsgLy8gZmlyc3Qgc29ydCB0aGUgZXhwcmVzc2lvbiBkYXRhXG4gICAgICAgICAgICBjb25zdCBpZHMgPSBkYXRhLm1hcCgoZCk9PmQudHJhbnNjcmlwdElkKTtcbiAgICAgICAgICAgIHRoaXMuc29ydFRyYWNrcyhpZHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YS5mb3JFYWNoKChkKT0+e1xuICAgICAgICAgICAgY29uc3QgaXNvZm9ybSA9IHRoaXMudmlzdWFsRG9tLnNlbGVjdChgIyR7ZC50cmFuc2NyaXB0SWQucmVwbGFjZShcIi5cIiwgXCJfXCIpfWApO1xuICAgICAgICAgICAgaXNvZm9ybS5zZWxlY3RBbGwoXCIuZXhvbi1jdXJhdGVkXCIpXG4gICAgICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBkLnZhbHVlPT0wP3RoaXMubnVsbENvbG9yOmNvbG9yU2NhbGUoZC52YWx1ZSkpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHJlbmRlciB0aGUgbG9sbGlwb3AgZ3JhcGhcbiAgICAgICAgdGhpcy52aXN1YWxEb20uc2VsZWN0KFwiLmxvbGxpcG9wR3JhcGhcIikucmVtb3ZlKCk7XG4gICAgICAgIGNvbnN0IGxvbGxpcG9wR3JhcGggPSB0aGlzLnZpc3VhbERvbS5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuY2xhc3NlZChcImxvbGxpcG9wR3JhcGhcIiwgdHJ1ZSlcbiAgICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoLTEwMCwgMTMpYCk7IC8vIFRPRE86IHJlbW92ZSBoYXJkLWNvZGVkIHZhbHVlc1xuXG4gICAgICAgIGNvbnN0IGxvbGxpcG9wcyA9IGxvbGxpcG9wR3JhcGguc2VsZWN0QWxsKFwiLmxvbGxpcG9wXCIpXG4gICAgICAgICAgICAuZGF0YShkYXRhKTtcblxuICAgICAgICBjb25zdCBnID0gbG9sbGlwb3BzLmVudGVyKClcbiAgICAgICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuY2xhc3NlZChcImxvbGxpcG9wXCIsIHRydWUpO1xuXG4gICAgICAgIGcuYXBwZW5kKFwibGluZVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4MVwiLCAwKVxuICAgICAgICAgICAgLmF0dHIoXCJ5MVwiLCAoZCk9PnRoaXMueVNjYWxlKGQudHJhbnNjcmlwdElkKSlcbiAgICAgICAgICAgIC5hdHRyKFwieTJcIiwgKGQpPT50aGlzLnlTY2FsZShkLnRyYW5zY3JpcHRJZCkpXG4gICAgICAgICAgICAuc3R5bGUoXCJzdHJva2VcIiwgKGQpPT5kLnZhbHVlPT0wP3RoaXMubnVsbENvbG9yOmNvbG9yU2NhbGUoZC52YWx1ZSkpXG4gICAgICAgICAgICAuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwgMilcbiAgICAgICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgICAgIC5kdXJhdGlvbigxMDAwKVxuICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCAoZCk9PmQudmFsdWU9PTA/MDpiYXJTY2FsZShkLnZhbHVlKSk7XG5cbiAgICAgICAgZy5hcHBlbmQoXCJjaXJjbGVcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY3hcIiwgMClcbiAgICAgICAgICAgIC5hdHRyKFwiY3lcIiwgKGQpPT50aGlzLnlTY2FsZShkLnRyYW5zY3JpcHRJZCkgKVxuICAgICAgICAgICAgLmF0dHIoXCJyXCIsIDUpXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIChkKT0+ZC52YWx1ZT09MD90aGlzLm51bGxDb2xvcjpjb2xvclNjYWxlKGQudmFsdWUpKVxuICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLmR1cmF0aW9uKDEwMDApXG4gICAgICAgICAgICAuYXR0cihcImN4XCIsIChkKT0+YmFyU2NhbGUoZC52YWx1ZSkpO1xuXG4gICAgICAgIC8vIGFkZCB0aGUgYXhlc1xuICAgICAgICBsb2xsaXBvcEdyYXBoLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJsb2xsaXBvcC1heGlzXCIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKDAsLSR7dGhpcy55U2NhbGUuYmFuZHdpZHRoKCkvMn0pYClcbiAgICAgICAgICAgIC5jYWxsKFxuICAgICAgICAgICAgICAgIGF4aXNUb3AoYmFyU2NhbGUpXG4gICAgICAgICAgICAgICAgICAgIC50aWNrcygzKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICBsb2xsaXBvcEdyYXBoLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwiaWRcIiwgXCJsb2xsaUxhYmVsXCIpXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgMClcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAtNDApXG4gICAgICAgICAgICAuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcImVuZFwiKVxuICAgICAgICAgICAgLnN0eWxlKFwiZm9udC1zaXplXCIsIDkpXG4gICAgICAgICAgICAudGV4dChcImxvZzEwKFRQTSlcIik7IC8vIFRPRE86IHRoaXMgc2hvdWxkIGJlIGEgdXNlci1kZWZpbmVkIHRleHRcblxuICAgICAgICBsb2xsaXBvcEdyYXBoLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJsb2xsaXBvcC1heGlzXCIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKDAsLSR7dGhpcy55U2NhbGUuYmFuZHdpZHRoKCkvMn0pYClcbiAgICAgICAgICAgIC5jYWxsKFxuICAgICAgICAgICAgICAgIGF4aXNSaWdodCh0aGlzLnlTY2FsZSlcbiAgICAgICAgICAgICAgICAgIC50aWNrVmFsdWVzKFtdKSAvLyBzaG93IG5vIHRpY2tzXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIC8vIGRhdGEgbGFiZWxcbiAgICAgICAgbG9sbGlwb3BHcmFwaC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuYXR0cihcImlkXCIsIFwibG9sbGlMYWJlbFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIDEwKVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIC0yMClcblxuICAgICAgICAgICAgLnRleHQoYFRyYW5zY3JpcHQgRXhwcmVzc2lvbiBpbiAke2RhdGFMYWJlbH1gKVxuICAgICAgICAgICAgLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJzdGFydFwiKVxuICAgICAgICAgICAgLnN0eWxlKFwiZm9udC1zaXplXCIsIFwiMTJweFwiKTtcblxuXG4gICAgfVxuXG4gICAgc29ydFRyYWNrcyh5bGlzdCl7XG4gICAgICAgIHRoaXMuc2V0WXNjYWxlKHRoaXMuY29uZmlnLmgsIHlsaXN0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIodHJ1ZSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKHJlZHJhdz1mYWxzZSwgZG9tPXVuZGVmaW5lZCwgbGFiZWxPbj0nbGVmdCcsIGR1cmF0aW9uPTEwMDApe1xuICAgICAgICBpZiAoZG9tID09PSB1bmRlZmluZWQgJiYgdGhpcy52aXN1YWxEb20gPT09IHVuZGVmaW5lZCkgdGhyb3cgXCJGYXRhbCBFcnJvcjogbXVzdCBwcm92aWRlIGEgZG9tIGVsZW1lbnRcIjtcbiAgICAgICAgaWYgKGRvbSA9PT0gdW5kZWZpbmVkKSBkb20gPSB0aGlzLnZpc3VhbERvbTtcbiAgICAgICAgZWxzZSB0aGlzLnZpc3VhbERvbSA9IGRvbTtcblxuICAgICAgICBpZih0aGlzLnlTY2FsZT09PXVuZGVmaW5lZCkgdGhpcy5zZXRZc2NhbGUodGhpcy5jb25maWcuaCk7XG5cbiAgICAgICAgY29uc3QgaXNvVHJhY2tzID0gZG9tLnNlbGVjdEFsbChcIi5pc290cmFja1wiKVxuICAgICAgICAgICAgLmRhdGEodGhpcy5pc29mb3Jtcy5tYXAoKGQpPT5kLnRyYW5zY3JpcHRJZCkpO1xuXG4gICAgICAgIC8vIHVwZGF0ZSBvbGQgaXNvZm9ybSB0cmFja3MsIGlmIGFueVxuICAgICAgICBpc29UcmFja3MudHJhbnNpdGlvbigpXG4gICAgICAgICAgICAuZHVyYXRpb24oZHVyYXRpb24pXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCAoZCk9PnsgcmV0dXJuIGB0cmFuc2xhdGUoMCwgJHt0aGlzLnlTY2FsZShkKX0pYH0pO1xuXG4gICAgICAgIC8vIHVwZGF0ZSBuZXcgdHJhY2tzXG4gICAgICAgIGlzb1RyYWNrcy5lbnRlcigpXG4gICAgICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAgICAgLmF0dHIoXCJpZFwiLCAoZCk9PihkLnJlcGxhY2UoXCIuXCIsIFwiX1wiKSkpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiaXNvdHJhY2tcIilcbiAgICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIChkKT0+eyByZXR1cm4gYHRyYW5zbGF0ZSgwLCAwKWB9KVxuXG4gICAgICAgICAgICAvLyAubWVyZ2UoaXNvVHJhY2tzKVxuICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLmR1cmF0aW9uKGR1cmF0aW9uLzIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCAoZCk9PnsgcmV0dXJuIGB0cmFuc2xhdGUoMCwgJHt0aGlzLnlTY2FsZShkKX0pYH0pO1xuXG4gICAgICAgIGlmIChyZWRyYXcpIHJldHVybjtcblxuICAgICAgICB0aGlzLl9yZW5kZXJNb2RlbHModGhpcy5jb25maWcudywgbGFiZWxPbik7XG5cbiAgICB9XG5cbiAgICBfcmVuZGVyTW9kZWxzKHcsIGxhYmVsT24gPSAnbGVmdCcpe1xuICAgICAgICB0aGlzLmlzb2Zvcm1zLmZvckVhY2goKGlzb2Zvcm0pID0+IHtcbiAgICAgICAgICAgIGxldCByZWZlcmVuY2UgPSAodGhpcy5tb2RlbEV4b25zID09PSB1bmRlZmluZWQgfHwgdGhpcy5tb2RlbEV4b25zID09PSBudWxsKT90aGlzLmlzb2Zvcm1FeG9uc1tpc29mb3JtLnRyYW5zY3JpcHRJZF06dGhpcy5tb2RlbEV4b25zO1xuICAgICAgICAgICAgY29uc3QgbW9kZWwgPSBuZXcgR2VuZU1vZGVsKGlzb2Zvcm0sIHJlZmVyZW5jZSwgdGhpcy5pc29mb3JtRXhvbnNbaXNvZm9ybS50cmFuc2NyaXB0SWRdLCBbXSwgdHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCBpc29mb3JtRyA9IHNlbGVjdChgIyR7aXNvZm9ybS50cmFuc2NyaXB0SWQucmVwbGFjZShcIi5cIiwgXCJfXCIpfWApO1xuICAgICAgICAgICAgbW9kZWwucmVuZGVyKGlzb2Zvcm1HLCB7dzp3LCBoOiB0aGlzLnlTY2FsZS5iYW5kd2lkdGgoKSwgbGFiZWxPbjogbGFiZWxPbn0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRZc2NhbGUoaCwgeWxpc3Q9dW5kZWZpbmVkKXtcbiAgICAgICAgaWYgKHlsaXN0ID09PSB1bmRlZmluZWQpIHlsaXN0ID0gdGhpcy5pc29mb3Jtcy5tYXAoKGQpPT5kLnRyYW5zY3JpcHRJZCk7XG4gICAgICAgIHRoaXMueVNjYWxlID0gc2NhbGVCYW5kKClcbiAgICAgICAgICAgIC5kb21haW4oeWxpc3QpXG4gICAgICAgICAgICAucmFuZ2UoWzAsIGhdKVxuICAgICAgICAgICAgLnBhZGRpbmcoLjA1KTtcbiAgICB9XG5cbn0iLCIvKipcbiAqIENvcHlyaWdodCDCqSAyMDE1IC0gMjAxOCBUaGUgQnJvYWQgSW5zdGl0dXRlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgKGh0dHBzOi8vZ2l0aHViLmNvbS9icm9hZGluc3RpdHV0ZS9ndGV4LXZpei9ibG9iL21hc3Rlci9MSUNFTlNFLm1kKVxuICovXG5cbi8qXG5UT0RPXG4xLiByZWZhY3RvcmluZ1xuICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQge2NyZWF0ZVN2ZywgZ2VuZXJhdGVSYW5kb21NYXRyaXgsIGdlbmVyYXRlUmFuZG9tTGlzdH0gZnJvbSBcIi4vbW9kdWxlcy91dGlsc1wiO1xuaW1wb3J0IHtyYW5nZX0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge3JhbmRvbU5vcm1hbH0gZnJvbSBcImQzLXJhbmRvbVwiO1xuaW1wb3J0IEhlYXRtYXAgZnJvbSBcIi4vbW9kdWxlcy9IZWF0bWFwXCI7XG5pbXBvcnQgRGVuZHJvSGVhdG1hcENvbmZpZyBmcm9tIFwiLi9tb2R1bGVzL0RlbmRyb0hlYXRtYXBDb25maWdcIjtcbmltcG9ydCBEZW5kcm9IZWF0bWFwIGZyb20gXCIuL21vZHVsZXMvRGVuZHJvSGVhdG1hcFwiO1xuaW1wb3J0IEdyb3VwZWRWaW9saW4gZnJvbSBcIi4vbW9kdWxlcy9Hcm91cGVkVmlvbGluXCI7XG5pbXBvcnQgSXNvZm9ybVRyYWNrVmlld2VyIGZyb20gXCIuL21vZHVsZXMvSXNvZm9ybVRyYWNrVmlld2VyXCI7XG5cbmV4cG9ydCBjb25zdCBkZW1vRGF0YSA9IHtcbiAgICBoZWF0bWFwOmdlbmVyYXRlUmFuZG9tTWF0cml4KHt4OjUwLCB5OjEwLCBzY2FsZUZhY3RvcjoxMDAwfSksXG4gICAgZGVuZHJvSGVhdG1hcDoge1xuICAgICAgICByb3dUcmVlOiBcIigoKFRQNTM6MC4xNyxTTEs6MC4xNyk6MS4xOCxORFJHNDoxLjM0KToxLjMzLEFDVE4zOjIuNjcpO1wiLFxuICAgICAgICBjb2xUcmVlOiBcIigoKEFkaXBvc2UgVmlzY2VyYWwgT21lbnR1bTowLjA2LEFkaXBvc2UgU3ViY3V0YW5lb3VzOjAuMDYpOjAuMDAsQmxhZGRlcjowLjA2KTowLjE2LEFkcmVuYWwgR2xhbmQ6MC4yMik7XCIsXG4gICAgICAgIGhlYXRtYXA6IFtcbiAgICB7XG4gICAgICBcInlcIjogXCJTTEtcIixcbiAgICAgIFwidmFsdWVcIjogMzUuNTA1LFxuICAgICAgXCJ4XCI6IFwiQWRpcG9zZSBTdWJjdXRhbmVvdXNcIixcbiAgICAgIFwidW5pdFwiOiBcIlRQTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcInlcIjogXCJTTEtcIixcbiAgICAgIFwidmFsdWVcIjogMjkuMjgsXG4gICAgICBcInhcIjogXCJBZGlwb3NlIFZpc2NlcmFsIE9tZW50dW1cIixcbiAgICAgIFwidW5pdFwiOiBcIlRQTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcInlcIjogXCJTTEtcIixcbiAgICAgIFwidmFsdWVcIjogMTcuNDA1LFxuICAgICAgXCJ4XCI6IFwiQWRyZW5hbCBHbGFuZFwiLFxuICAgICAgXCJ1bml0XCI6IFwiVFBNXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwieVwiOiBcIlNMS1wiLFxuICAgICAgXCJ2YWx1ZVwiOiA1My4yOSxcbiAgICAgIFwieFwiOiBcIkJsYWRkZXJcIixcbiAgICAgIFwidW5pdFwiOiBcIlRQTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcInlcIjogXCJORFJHNFwiLFxuICAgICAgXCJ2YWx1ZVwiOiAxMi4wMzUsXG4gICAgICBcInhcIjogXCJBZGlwb3NlIFN1YmN1dGFuZW91c1wiLFxuICAgICAgXCJ1bml0XCI6IFwiVFBNXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwieVwiOiBcIk5EUkc0XCIsXG4gICAgICBcInZhbHVlXCI6IDYuNTMxMDAwMDAwMDAwMDAxLFxuICAgICAgXCJ4XCI6IFwiQWRpcG9zZSBWaXNjZXJhbCBPbWVudHVtXCIsXG4gICAgICBcInVuaXRcIjogXCJUUE1cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJ5XCI6IFwiTkRSRzRcIixcbiAgICAgIFwidmFsdWVcIjogMTM0LjgsXG4gICAgICBcInhcIjogXCJBZHJlbmFsIEdsYW5kXCIsXG4gICAgICBcInVuaXRcIjogXCJUUE1cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJ5XCI6IFwiTkRSRzRcIixcbiAgICAgIFwidmFsdWVcIjogNy4xMTYwMDAwMDAwMDAwMDA1LFxuICAgICAgXCJ4XCI6IFwiQmxhZGRlclwiLFxuICAgICAgXCJ1bml0XCI6IFwiVFBNXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwieVwiOiBcIlRQNTNcIixcbiAgICAgIFwidmFsdWVcIjogMjkuOTM1LFxuICAgICAgXCJ4XCI6IFwiQWRpcG9zZSBTdWJjdXRhbmVvdXNcIixcbiAgICAgIFwidW5pdFwiOiBcIlRQTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcInlcIjogXCJUUDUzXCIsXG4gICAgICBcInZhbHVlXCI6IDIzLjU1LFxuICAgICAgXCJ4XCI6IFwiQWRpcG9zZSBWaXNjZXJhbCBPbWVudHVtXCIsXG4gICAgICBcInVuaXRcIjogXCJUUE1cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJ5XCI6IFwiVFA1M1wiLFxuICAgICAgXCJ2YWx1ZVwiOiAxOC41MTUsXG4gICAgICBcInhcIjogXCJBZHJlbmFsIEdsYW5kXCIsXG4gICAgICBcInVuaXRcIjogXCJUUE1cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJ5XCI6IFwiVFA1M1wiLFxuICAgICAgXCJ2YWx1ZVwiOiA0MC41MSxcbiAgICAgIFwieFwiOiBcIkJsYWRkZXJcIixcbiAgICAgIFwidW5pdFwiOiBcIlRQTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcInlcIjogXCJBQ1ROM1wiLFxuICAgICAgXCJ2YWx1ZVwiOiAwLjMzMTQ1LFxuICAgICAgXCJ4XCI6IFwiQWRpcG9zZSBTdWJjdXRhbmVvdXNcIixcbiAgICAgIFwidW5pdFwiOiBcIlRQTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcInlcIjogXCJBQ1ROM1wiLFxuICAgICAgXCJ2YWx1ZVwiOiAwLjMzMTcsXG4gICAgICBcInhcIjogXCJBZGlwb3NlIFZpc2NlcmFsIE9tZW50dW1cIixcbiAgICAgIFwidW5pdFwiOiBcIlRQTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcInlcIjogXCJBQ1ROM1wiLFxuICAgICAgXCJ2YWx1ZVwiOiAwLjEwMDAwNSxcbiAgICAgIFwieFwiOiBcIkFkcmVuYWwgR2xhbmRcIixcbiAgICAgIFwidW5pdFwiOiBcIlRQTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcInlcIjogXCJBQ1ROM1wiLFxuICAgICAgXCJ2YWx1ZVwiOiAwLjQ4MTAwMDAwMDAwMDAwMDA0LFxuICAgICAgXCJ4XCI6IFwiQmxhZGRlclwiLFxuICAgICAgXCJ1bml0XCI6IFwiVFBNXCJcbiAgICB9XG4gIF1cbiAgICB9LFxuICAgIGdyb3VwZWRWaW9saW5QbG90OiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgZ3JvdXA6IFwiR3JvdXAgMVwiLFxuICAgICAgICAgICBsYWJlbDogXCJHZW5lIDFcIixcbiAgICAgICAgICAgdmFsdWVzOiByYW5nZSgwLCAyMDAwKS5tYXAocmFuZG9tTm9ybWFsKDIsIDEpKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBncm91cDogXCJHcm91cCAxXCIsXG4gICAgICAgICAgICBsYWJlbDogXCJHZW5lIDJcIixcbiAgICAgICAgICAgIHZhbHVlczogcmFuZ2UoMCwgMjAwMCkubWFwKHJhbmRvbU5vcm1hbCg1LCAxKSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JvdXA6IFwiR3JvdXAgMVwiLFxuICAgICAgICAgICAgbGFiZWw6IFwiR2VuZSAzXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHJhbmdlKDAsIDIwMDApLm1hcChyYW5kb21Ob3JtYWwoMTAsIDEpKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgIGdyb3VwOiBcIkdyb3VwIDJcIixcbiAgICAgICAgICAgbGFiZWw6IFwiR2VuZSAxXCIsXG4gICAgICAgICAgIHZhbHVlczogcmFuZ2UoMCwgMjAwMCkubWFwKHJhbmRvbU5vcm1hbCg1LCAxKSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JvdXA6IFwiR3JvdXAgMlwiLFxuICAgICAgICAgICAgbGFiZWw6IFwiR2VuZSAyXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHJhbmdlKDAsIDIwMDApLm1hcChyYW5kb21Ob3JtYWwoMywgMSkpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyb3VwOiBcIkdyb3VwIDJcIixcbiAgICAgICAgICAgIGxhYmVsOiBcIkdlbmUgM1wiLFxuICAgICAgICAgICAgdmFsdWVzOiByYW5nZSgwLCAyMDAwKS5tYXAocmFuZG9tTm9ybWFsKDEsIDEpKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgIGdyb3VwOiBcIkdyb3VwIDNcIixcbiAgICAgICAgICAgbGFiZWw6IFwiR2VuZSAxXCIsXG4gICAgICAgICAgIHZhbHVlczogcmFuZ2UoMCwgMjAwMCkubWFwKHJhbmRvbU5vcm1hbCgyLCAxKSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JvdXA6IFwiR3JvdXAgM1wiLFxuICAgICAgICAgICAgbGFiZWw6IFwiR2VuZSAyXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHJhbmdlKDAsIDIwMDApLm1hcChyYW5kb21Ob3JtYWwoMywgMSkpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyb3VwOiBcIkdyb3VwIDNcIixcbiAgICAgICAgICAgIGxhYmVsOiBcIkdlbmUgM1wiLFxuICAgICAgICAgICAgdmFsdWVzOiByYW5nZSgwLCAyMDAwKS5tYXAocmFuZG9tTm9ybWFsKDUsIDEpKVxuICAgICAgICB9XG4gICAgXSxcbiAgICB0cmFuc2NyaXB0VHJhY2tzOiB7XG4gICAgICAgIFwiZXhvbnNcIjoge1xuICAgICAgICAgICAgXCJFTlNUMDAwMDAzMTE1OTUuOVwiOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImNocm9tXCI6IFwiMTdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbUVuZFwiOiA3NzA3MTE3MixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uSWRcIjogXCJFTlNFMDAwMDI3MTM5MzMuMVwiLFxuICAgICAgICAgICAgICAgICAgICBcImV4b25OdW1iZXJcIjogXCIxXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21TdGFydFwiOiA3NzA3MTE1MSxcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJhbmRcIjogXCIrXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVwiOiBcIjE3XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21FbmRcIjogNzcwNzM1NzksXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbklkXCI6IFwiRU5TRTAwMDAzNjcyNjI4LjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uTnVtYmVyXCI6IFwiMlwiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tU3RhcnRcIjogNzcwNzM1MTIsXG4gICAgICAgICAgICAgICAgICAgIFwic3RyYW5kXCI6IFwiK1wiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21cIjogXCIxN1wiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tRW5kXCI6IDc3MDczOTQ2LFxuICAgICAgICAgICAgICAgICAgICBcImV4b25JZFwiOiBcIkVOU0UwMDAwMzQ3NTI4MS4xXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbk51bWJlclwiOiBcIjNcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVN0YXJ0XCI6IDc3MDczNzQ1LFxuICAgICAgICAgICAgICAgICAgICBcInN0cmFuZFwiOiBcIitcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImNocm9tXCI6IFwiMTdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbUVuZFwiOiA3NzA3NTcxOSxcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uSWRcIjogXCJFTlNFMDAwMDExMTE3MTMuMVwiLFxuICAgICAgICAgICAgICAgICAgICBcImV4b25OdW1iZXJcIjogXCI0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21TdGFydFwiOiA3NzA3NTU3MSxcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJhbmRcIjogXCIrXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVwiOiBcIjE3XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21FbmRcIjogNzcwNzY0NDYsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbklkXCI6IFwiRU5TRTAwMDAzNjUxMjUwLjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uTnVtYmVyXCI6IFwiNVwiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tU3RhcnRcIjogNzcwNzYyODksXG4gICAgICAgICAgICAgICAgICAgIFwic3RyYW5kXCI6IFwiK1wiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21cIjogXCIxN1wiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tRW5kXCI6IDc3MDc3MTU1LFxuICAgICAgICAgICAgICAgICAgICBcImV4b25JZFwiOiBcIkVOU0UwMDAwMzYwNzc3My4xXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbk51bWJlclwiOiBcIjZcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVN0YXJ0XCI6IDc3MDc3MDA3LFxuICAgICAgICAgICAgICAgICAgICBcInN0cmFuZFwiOiBcIitcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImNocm9tXCI6IFwiMTdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbUVuZFwiOiA3NzA3ODYxMixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uSWRcIjogXCJFTlNFMDAwMDI3MjA5MjQuMVwiLFxuICAgICAgICAgICAgICAgICAgICBcImV4b25OdW1iZXJcIjogXCI3XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21TdGFydFwiOiA3NzA3Nzk4MCxcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJhbmRcIjogXCIrXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwidHJhbnNjcmlwdHNcIjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwiY2hyb21vc29tZVwiOiBcIjE3XCIsXG4gICAgICAgICAgICAgICAgXCJlbmRcIjogNzcwNzg2MTIsXG4gICAgICAgICAgICAgICAgXCJnZW5jb2RlSWRcIjogXCJFTlNHMDAwMDAxNjcyODAuMTJcIixcbiAgICAgICAgICAgICAgICBcImdlbmVTeW1ib2xcIjogXCJFTkdBU0VcIixcbiAgICAgICAgICAgICAgICBcInN0YXJ0XCI6IDc3MDcxMTUxLFxuICAgICAgICAgICAgICAgIFwic3RyYW5kXCI6IFwiK1wiLFxuICAgICAgICAgICAgICAgIFwidHJhbnNjcmlwdElkXCI6IFwiRU5TVDAwMDAwMzExNTk1LjlcIlxuICAgICAgICAgICAgfVxuICAgICAgICBdXG4gICAgfVxufTtcblxuY29uc3QgdHJhbnNjcmlwdFRyYWNrc0NvbmZpZyA9IHtcbiAgICBpZDogJ2d0ZXhUcmFuc2NyaXB0VHJhY2tzJyxcbiAgICBkYXRhOiBkZW1vRGF0YS50cmFuc2NyaXB0VHJhY2tzLFxuICAgIHdpZHRoOiAxMjAwLFxuICAgIGhlaWdodDogODAsXG4gICAgbWFyZ2luTGVmdDogMTAwLFxuICAgIG1hcmdpblJpZ2h0OiAyMCxcbiAgICBtYXJnaW5Ub3A6IDAsXG4gICAgbWFyZ2luQm90dG9tOiAyMCxcbiAgICBsYWJlbFBvczogJ2xlZnQnXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNjcmlwdFRyYWNrcyhwYXI9dHJhbnNjcmlwdFRyYWNrc0NvbmZpZyl7XG4gICAgbGV0IG1hcmdpbiA9IHtcbiAgICAgICAgdG9wOiBwYXIubWFyZ2luVG9wLFxuICAgICAgICByaWdodDogcGFyLm1hcmdpblJpZ2h0LFxuICAgICAgICBib3R0b206IHBhci5tYXJnaW5Cb3R0b20sXG4gICAgICAgIGxlZnQ6IHBhci5tYXJnaW5MZWZ0XG4gICAgfTtcbiAgICBsZXQgaW5XaWR0aCA9IHBhci53aWR0aCAtIChwYXIubWFyZ2luTGVmdCArIHBhci5tYXJnaW5SaWdodCk7XG4gICAgbGV0IGluSGVpZ2h0ID0gcGFyLmhlaWdodCAtIChwYXIubWFyZ2luVG9wICsgcGFyLm1hcmdpbkJvdHRvbSk7XG5cbiAgICAvLyB0ZXN0IGlucHV0IHBhcmFtc1xuICAgIGlmICgkKGAjJHtwYXIuaWR9YCkubGVuZ3RoID09IDApIHtcbiAgICAgICAgbGV0IGVycm9yID0gYElucHV0IEVycm9yOiBET00gSUQgJHtwYXIuaWR9IGlzIG5vdCBmb3VuZC5gO1xuICAgICAgICBhbGVydChlcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIC8vIGNyZWF0ZSB0aGUgU1ZHXG4gICAgICAgIGxldCBzdmcgPSBjcmVhdGVTdmcocGFyLmlkLCBwYXIud2lkdGgsIHBhci5oZWlnaHQsIG1hcmdpbik7XG5cbiAgICAvLyByZW5kZXIgdGhlIHRyYW5zY3JpcHRzXG4gICAgbGV0IHRvb2x0aXBJZCA9IGAke3Bhci5pZH1Ub29sdGlwYDtcbiAgICBsZXQgY29uZmlnID0ge1xuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAwLFxuICAgICAgICB3OiBpbldpZHRoLFxuICAgICAgICBoOiBpbkhlaWdodCxcbiAgICAgICAgbGFiZWxPbjogcGFyLmxhYmVsUG9zXG4gICAgfTtcbiAgICBsZXQgdmlld2VyID0gbmV3IElzb2Zvcm1UcmFja1ZpZXdlcihwYXIuZGF0YS50cmFuc2NyaXB0cywgcGFyLmRhdGEuZXhvbnMsIHVuZGVmaW5lZCwgY29uZmlnKTtcbiAgICB2aWV3ZXIucmVuZGVyKGZhbHNlLCBzdmcsIHBhci5sYWJlbFBvcyk7XG5cbn1cblxuY29uc3QgaGVhdG1hcERlbW9Db25maWcgPSB7XG4gICAgaWQ6ICdndGV4Vml6SGVhdG1hcCcsXG4gICAgZGF0YTogZGVtb0RhdGEuaGVhdG1hcCxcbiAgICB3aWR0aDogMTIwMCwgLy8gb3V0ZXIgd2lkdGhcbiAgICBoZWlnaHQ6IDMwMCwgLy8gb3V0ZXIgaGVpZ2h0XG4gICAgbWFyZ2luTGVmdDogMjAsXG4gICAgbWFyZ2luUmlnaHQ6IDQwLFxuICAgIG1hcmdpblRvcDogNTAsXG4gICAgbWFyZ2luQm90dG9tOiA1MCxcbiAgICBjb2xvclNjaGVtZTogXCJZbEduQnVcIixcbiAgICBjb3JuZXJSYWRpdXM6IDIsXG4gICAgY29sdW1uTGFiZWxIZWlnaHQ6IDIwLFxuICAgIGNvbHVtbkxhYmVsQW5nbGU6IDYwLFxuICAgIGNvbHVtbkxhYmVsUG9zQWRqdXN0OiAxMCxcbiAgICByb3dMYWJlbFdpZHRoOiAxMDAsXG4gICAgbGVnZW5kU3BhY2U6IDUwLFxuICAgIHVzZUxvZzogdHJ1ZSxcbiAgICBsb2dCYXNlOiAxMFxufTtcblxuLyoqXG4gKiBSZW5kZXIgYSAyRCBIZWF0bWFwXG4gKiBAcGFyYW0gcGFyYW1zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoZWF0bWFwKHBhcj1oZWF0bWFwRGVtb0NvbmZpZyl7XG4gICAgbGV0IG1hcmdpbiA9IHtcbiAgICAgICAgdG9wOiBwYXIubWFyZ2luVG9wLFxuICAgICAgICByaWdodDogcGFyLm1hcmdpblJpZ2h0LFxuICAgICAgICBib3R0b206IHBhci5tYXJnaW5Cb3R0b20sXG4gICAgICAgIGxlZnQ6IHBhci5tYXJnaW5MZWZ0XG4gICAgfTtcbiAgICBsZXQgaW5XaWR0aCA9IHBhci53aWR0aCAtIChwYXIubWFyZ2luTGVmdCArIHBhci5tYXJnaW5SaWdodCArIHBhci5yb3dMYWJlbFdpZHRoKTtcbiAgICBsZXQgaW5IZWlnaHQgPSBwYXIuaGVpZ2h0IC0gKHBhci5tYXJnaW5Ub3AgKyBwYXIubWFyZ2luQm90dG9tICsgcGFyLmNvbHVtbkxhYmVsSGVpZ2h0KTtcblxuICAgIC8vIHRlc3QgaW5wdXQgcGFyYW1zXG4gICAgaWYgKCQoYCMke3Bhci5pZH1gKS5sZW5ndGggPT0gMCkge1xuICAgICAgICBsZXQgZXJyb3IgPSBgSW5wdXQgRXJyb3I6IERPTSBJRCAke3Bhci5pZH0gaXMgbm90IGZvdW5kLmA7XG4gICAgICAgIGFsZXJ0KGVycm9yKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIHRoZSBTVkdcbiAgICBsZXQgc3ZnID0gY3JlYXRlU3ZnKHBhci5pZCwgcGFyLndpZHRoLCBwYXIuaGVpZ2h0LCBtYXJnaW4pO1xuXG4gICAgLy8gcmVuZGVyIHRoZSBoZWF0bWFwXG4gICAgbGV0IHRvb2x0aXBJZCA9IGAke3Bhci5pZH1Ub29sdGlwYDtcbiAgICBsZXQgaCA9IG5ldyBIZWF0bWFwKHBhci5kYXRhLCBwYXIudXNlTG9nLCBwYXIubG9nQmFzZSwgcGFyLmNvbG9yU2NoZW1lLCBwYXIuY29ybmVyUmFkaXVzLCB0b29sdGlwSWQpO1xuICAgIGguZHJhdyhzdmcsIHt3OmluV2lkdGgsIGg6aW5IZWlnaHR9LCBwYXIuY29sdW1uTGFiZWxBbmdsZSwgZmFsc2UsIHBhci5jb2x1bW5MYWJlbFBvc0FkanVzdCk7XG4gICAgaC5kcmF3Q29sb3JMZWdlbmQoc3ZnLCB7eDoyMCwgeTogLTIwfSwgMTApO1xufVxuXG5jb25zdCBkZW5kcm9IZWF0bWFwRGVtb0NvbmZpZyA9IHtcbiAgICBpZDogJ2d0ZXhWaXpEZW5kcm9IZWF0bWFwJyxcbiAgICBkYXRhOiBkZW1vRGF0YS5kZW5kcm9IZWF0bWFwLFxuICAgIHVzZUxvZzogdHJ1ZSxcbiAgICBsb2dCYXNlOiAxMCxcbiAgICB3aWR0aDogNjAwLCAvLyBvdXRlciB3aWR0aFxuICAgIGhlaWdodDogMzAwLCAvLyBvdXRlciBoZWlnaHRcbiAgICBtYXJnaW5MZWZ0OiAyMCxcbiAgICBtYXJnaW5SaWdodDogNDAsXG4gICAgbWFyZ2luVG9wOiA1MCxcbiAgICBtYXJnaW5Cb3R0b206IDUwLFxuICAgIHJvd1RyZWVQYW5lbFdpZHRoOiAxMDAsXG4gICAgY29sVHJlZVBhbmVsSGVpZ2h0OiAxMDAsXG4gICAgY29sb3JTY2hlbWU6IFwiQmx1ZXNcIixcbiAgICBjb3JuZXJSYWRpdXM6IDIsXG4gICAgY29sdW1uTGFiZWxIZWlnaHQ6IDIwMCxcbiAgICBjb2x1bW5MYWJlbEFuZ2xlOiA2MCxcbiAgICBjb2x1bW5MYWJlbFBvc0FkanVzdDogMTAsXG4gICAgcm93TGFiZWxXaWR0aDogMjAwLFxuICAgIGxlZ2VuZFNwYWNlOiA1MFxufTtcblxuLyoqXG4gKiBSZW5kZXIgYSBEZW5kcm9IZWF0bWFwXG4gKiBAcGFyYW0gcGFyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZW5kcm9IZWF0bWFwKHBhcj1kZW5kcm9IZWF0bWFwRGVtb0NvbmZpZyl7XG4gICAgbGV0IG1hcmdpbiA9IHtcbiAgICAgICAgdG9wOiBwYXIubWFyZ2luVG9wLFxuICAgICAgICByaWdodDogcGFyLm1hcmdpblJpZ2h0ICsgcGFyLnJvd0xhYmVsV2lkdGgsXG4gICAgICAgIGJvdHRvbTogcGFyLm1hcmdpbkJvdHRvbSArIHBhci5jb2x1bW5MYWJlbEhlaWdodCxcbiAgICAgICAgbGVmdDogcGFyLm1hcmdpbkxlZnRcbiAgICB9O1xuXG4gICAgLy8gdGVzdCBpbnB1dCBwYXJhbXNcbiAgICBpZiAoJChgIyR7cGFyLmlkfWApLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIGxldCBlcnJvciA9IGBJbnB1dCBFcnJvcjogRE9NIElEICR7cGFyLmlkfSBpcyBub3QgZm91bmQuYDtcbiAgICAgICAgYWxlcnQoZXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICBsZXQgaW5XaWR0aCA9IHBhci53aWR0aCAtIChwYXIubWFyZ2luTGVmdCArIHBhci5tYXJnaW5SaWdodCArIHBhci5yb3dMYWJlbFdpZHRoKTtcbiAgICBsZXQgaW5IZWlnaHQgPSBwYXIuaGVpZ2h0IC0gKHBhci5tYXJnaW5Ub3AgKyBwYXIubWFyZ2luQm90dG9tICsgcGFyLmNvbHVtbkxhYmVsSGVpZ2h0KTtcblxuICAgIGxldCBzdmdJZCA9IGAke3Bhci5pZH1TdmdgO1xuICAgIGxldCB0b29sdGlwSWQgPSBgJHtwYXIuaWR9VG9vbHRpcGA7XG4gICAgbGV0IGRtYXBDb25maWcgPSBuZXcgRGVuZHJvSGVhdG1hcENvbmZpZyhwYXIud2lkdGgsIHBhci5yb3dUcmVlUGFuZWxXaWR0aCwgcGFyLmNvbFRyZWVQYW5lbEhlaWdodCwgbWFyZ2luKTtcbiAgICBsZXQgZG1hcCA9IG5ldyBEZW5kcm9IZWF0bWFwKHBhci5kYXRhLmNvbFRyZWUsIHBhci5kYXRhLnJvd1RyZWUsIHBhci5kYXRhLmhlYXRtYXAsIHBhci5jb2xvclNjaGVtZSwgcGFyLmNvcm5lclJhZGl1cywgZG1hcENvbmZpZywgdG9vbHRpcElkLCBwYXIudXNlTG9nLCBwYXIubG9nQmFzZSlcbiAgICBsZXQgc2hvd0NvbFRyZWUgPSBwYXIuZGF0YS5jb2xUcmVlICE9PSB1bmRlZmluZWQ7XG4gICAgbGV0IHNob3dSb3dUcmVlID0gcGFyLmRhdGEucm93VHJlZSAhPT0gdW5kZWZpbmVkO1xuICAgIGRtYXAucmVuZGVyKHBhci5pZCwgc3ZnSWQsIHNob3dDb2xUcmVlLCBzaG93Um93VHJlZSwgXCJ0b3BcIiwgOCk7XG59XG5cbmNvbnN0IHZpb2xpbkRlbW9Db25maWcgPSB7XG4gICAgaWQ6ICdndGV4R3JvdXBlZFZpb2xpblBsb3QnLFxuICAgIGRhdGE6IGRlbW9EYXRhLmdyb3VwZWRWaW9saW5QbG90LFxuICAgIHdpZHRoOiA1MDAsXG4gICAgaGVpZ2h0OiAzMDAsXG4gICAgbWFyZ2luTGVmdDogMTAwLFxuICAgIG1hcmdpblJpZ2h0OiAyMCxcbiAgICBtYXJnaW5Ub3A6IDUwLFxuICAgIG1hcmdpbkJvdHRvbTogMTAwLFxuICAgIHNob3dEaXZpZGVyOiB0cnVlLFxuICAgIHhQYWRkaW5nOiAwLjMsXG4gICAgeUxhYmVsOiBcIlJhbmRvbSBWYWx1ZVwiLFxuICAgIHNob3dHcm91cFg6IHRydWUsXG4gICAgc2hvd1g6IHRydWUsXG4gICAgeEFuZ2xlOiAwLFxuICAgIHNob3dXaGlza2VyOiBmYWxzZSxcbiAgICBzaG93TGVnZW5kOiBmYWxzZSxcbiAgICBzaG93U2FtcGxlU2l6ZTogdHJ1ZVxufTtcbmV4cG9ydCBmdW5jdGlvbiBncm91cGVkVmlvbGluUGxvdChwYXI9dmlvbGluRGVtb0NvbmZpZyl7XG4gICAgY29uc29sZS5sb2cocGFyLmRhdGEpO1xuICAgIGxldCBtYXJnaW4gPSB7XG4gICAgICAgIHRvcDogcGFyLm1hcmdpblRvcCxcbiAgICAgICAgcmlnaHQ6IHBhci5tYXJnaW5SaWdodCxcbiAgICAgICAgYm90dG9tOiBwYXIubWFyZ2luQm90dG9tLFxuICAgICAgICBsZWZ0OiBwYXIubWFyZ2luTGVmdFxuICAgIH07XG4gICAgLy8gdGVzdCBpbnB1dCBwYXJhbXNcbiAgICBpZiAoJChgIyR7cGFyLmlkfWApLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIGxldCBlcnJvciA9IGBJbnB1dCBFcnJvcjogRE9NIElEICR7cGFyLmlkfSBpcyBub3QgZm91bmQuYDtcbiAgICAgICAgYWxlcnQoZXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICBsZXQgaW5XaWR0aCA9IHBhci53aWR0aCAtIChwYXIubWFyZ2luTGVmdCArIHBhci5tYXJnaW5SaWdodCk7XG4gICAgbGV0IGluSGVpZ2h0ID0gcGFyLmhlaWdodCAtIChwYXIubWFyZ2luVG9wICsgcGFyLm1hcmdpbkJvdHRvbSk7XG5cbiAgICBsZXQgc3ZnSWQgPSBgJHtwYXIuaWR9U3ZnYDtcbiAgICBsZXQgdG9vbHRpcElkID0gYCR7cGFyLmlkfVRvb2x0aXBgO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBTVkdcbiAgICBsZXQgc3ZnID0gY3JlYXRlU3ZnKHBhci5pZCwgcGFyLndpZHRoLCBwYXIuaGVpZ2h0LCBtYXJnaW4pO1xuXG4gICAgY29uc3QgZ1Zpb2xpbiA9IG5ldyBHcm91cGVkVmlvbGluKHBhci5kYXRhKTtcbiAgICBnVmlvbGluLnJlbmRlcihzdmcsIGluV2lkdGgsIGluSGVpZ2h0LCBwYXIueFBhZGRpbmcsIHVuZGVmaW5lZCwgW10sIHBhci55TGFiZWwsIHBhci5zaG93R3JvdXBYLCBwYXIuU2hvd1gsIHBhci54QW5nbGUsIHBhci5zaG93V2hpc2tlciwgcGFyLnNob3dEaXZpZGVyLCBwYXIuc2hvd0xlZ2VuZCk7XG4gICAgY29uc3QgdG9vbHRpcCA9IGdWaW9saW4uY3JlYXRlVG9vbHRpcCh0b29sdGlwSWQpO1xuXG5cbn1cblxuIl0sIm5hbWVzIjpbIm1hdGNoZXIiLCJzZWxlY3Rpb24iLCJlbGVtZW50IiwiYXNjZW5kaW5nIiwicmFuZ2UiLCJtYXAiLCJhcnJheSIsInNsaWNlIiwibGluZWFyIiwiZXhwb25lbnRpYWwiLCJjb25zdGFudCIsImNvbG9yIiwicmdiIiwiY29sb3JSZ2IiLCJiYXNpcyIsInZhbHVlIiwibnVtYmVyIiwic3RyaW5nIiwiaWRlbnRpdHkiLCJjdWJlaGVsaXgiLCJodWUiLCJjb2xvckN1YmVoZWxpeCIsImJpc2VjdCIsImludGVycG9sYXRlIiwiaW50ZXJwb2xhdGVWYWx1ZSIsImRlaW50ZXJwb2xhdGUiLCJyZWludGVycG9sYXRlIiwidDAiLCJ0MSIsImludGVydmFsIiwiZHVyYXRpb25TZWNvbmQiLCJkdXJhdGlvbk1pbnV0ZSIsImR1cmF0aW9uSG91ciIsImR1cmF0aW9uRGF5IiwiZHVyYXRpb25XZWVrIiwiZm9ybWF0TG9jYWxlIiwiZGF5IiwidGltZU1vbmRheSIsInRpbWVEYXkiLCJ0aW1lWWVhciIsInRpbWVTdW5kYXkiLCJ0aW1lVGh1cnNkYXkiLCJsb2NhbGUiLCJkZWZhdWx0TG9jYWxlIiwicGFyc2VUeXBlbmFtZXMiLCJnZXQiLCJzZXQiLCJjcmVhdGUiLCJ0aW1lb3V0Iiwic2NoZWR1bGUiLCJhdHRyUmVtb3ZlIiwiYXR0clJlbW92ZU5TIiwiYXR0ckNvbnN0YW50IiwiYXR0ckNvbnN0YW50TlMiLCJhdHRyRnVuY3Rpb24iLCJhdHRyRnVuY3Rpb25OUyIsImludGVycG9sYXRlVHJhbnNmb3JtIiwidHJhbnNpdGlvbiIsIlNlbGVjdGlvbiIsInN0eWxlUmVtb3ZlIiwic3R5bGUiLCJzdHlsZUNvbnN0YW50Iiwic3R5bGVGdW5jdGlvbiIsInRleHRDb25zdGFudCIsInRleHRGdW5jdGlvbiIsImVhc2VDdWJpY0luT3V0IiwiaW50ZXJwb2xhdGVSZ2JCYXNpcyIsInNjaGVtZSIsImludGVycG9sYXRlQ3ViZWhlbGl4TG9uZyIsImMiLCJyYW1wIiwiZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVCdUduIiwiZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVPclJkIiwiZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVQdUJ1IiwiZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVZbEduQnUiLCJkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZUJsdWVzIiwiZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVPcmFuZ2VzIiwiZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVHcmVlbnMiLCJkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZVB1cnBsZXMiLCJkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZVJlZHMiLCJkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZUdyZXlzIiwic2NhbGVTZXF1ZW50aWFsIiwic2NhbGVCYW5kIiwic2NhbGVMaW5lYXIiLCJwaSIsInRhdSIsImVwc2lsb24iLCJ4IiwicG9pbnRYIiwieSIsInBvaW50WSIsInBvaW50Iiwibm9wcm9wYWdhdGlvbiIsImxvY2FsIiwiZW1wdHkiLCJicnVzaCIsIm5vZXZlbnQiLCJkcmFnRGlzYWJsZSIsImRyYWdFbmFibGUiLCJyYW5kb21Ob3JtYWwiXSwibWFwcGluZ3MiOiI7OztBQUFPLElBQUksS0FBSyxHQUFHLDhCQUE4QixDQUFDOztBQUVsRCxpQkFBZTtFQUNiLEdBQUcsRUFBRSw0QkFBNEI7RUFDakMsS0FBSyxFQUFFLEtBQUs7RUFDWixLQUFLLEVBQUUsOEJBQThCO0VBQ3JDLEdBQUcsRUFBRSxzQ0FBc0M7RUFDM0MsS0FBSyxFQUFFLCtCQUErQjtDQUN2QyxDQUFDOztBQ05GLGdCQUFlLFNBQVMsSUFBSSxFQUFFO0VBQzVCLElBQUksTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLE9BQU8sRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDaEYsT0FBTyxVQUFVLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFVBQVUs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QUFHLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUM7UUFDakYsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQzNGOztBQUVELEFBQU8sU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7RUFDM0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDO01BQ25ELEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQzdELEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO0VBQzFCLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO09BQ3pCLElBQUksS0FBSyxJQUFJLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO09BQzVCLElBQUksS0FBSyxJQUFJLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO0VBQ2pDLE9BQU8sSUFBSSxHQUFHLEtBQUssR0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Q0FDdEM7O0FDaERELGVBQWUsU0FBUyxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRTtFQUMxQyxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUUsT0FBTyxHQUFHLE1BQU0sQ0FBQztFQUN0QyxJQUFJLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPO0VBQ2pDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0VBQ2xFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztFQUMxRCxJQUFJLENBQUM7TUFDRCxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7TUFDZixFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7TUFDbEIsTUFBTSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDO01BQ3pDLE1BQU0sR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7RUFDdEQsT0FBTyxNQUFNLEdBQUcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztDQUM5Qzs7QUNiRCxVQUFlLFNBQVMsTUFBTSxFQUFFLE9BQU8sRUFBRTtFQUN2QyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTTtNQUNqQixDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ04sS0FBSztNQUNMLEdBQUcsQ0FBQzs7RUFFUixJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7SUFDbkIsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7TUFDZCxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksS0FBSyxJQUFJLEtBQUssRUFBRTtRQUNqRCxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ1osT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7VUFDZCxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksS0FBSyxHQUFHLEdBQUcsRUFBRTtZQUM5QyxHQUFHLEdBQUcsS0FBSyxDQUFDO1dBQ2I7U0FDRjtPQUNGO0tBQ0Y7R0FDRjs7T0FFSTtJQUNILE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFO01BQ2QsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksS0FBSyxJQUFJLEtBQUssRUFBRTtRQUNyRSxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ1osT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7VUFDZCxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFO1lBQ2xFLEdBQUcsR0FBRyxLQUFLLENBQUM7V0FDYjtTQUNGO09BQ0Y7S0FDRjtHQUNGOztFQUVELE9BQU8sR0FBRyxDQUFDO0NBQ1o7O0FDL0JELFdBQWUsU0FBUyxNQUFNLEVBQUUsT0FBTyxFQUFFO0VBQ3ZDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNO01BQ2pCLENBQUMsR0FBRyxDQUFDO01BQ0wsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNOLEtBQUs7TUFDTCxHQUFHLEdBQUcsQ0FBQyxDQUFDOztFQUVaLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtJQUNuQixPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRTtNQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxLQUFLLENBQUM7V0FDL0MsRUFBRSxDQUFDLENBQUM7S0FDVjtHQUNGOztPQUVJO0lBQ0gsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7TUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxLQUFLLENBQUM7V0FDbkUsRUFBRSxDQUFDLENBQUM7S0FDVjtHQUNGOztFQUVELElBQUksQ0FBQyxFQUFFLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN2Qjs7QUNwQkQsYUFBZSxTQUFTLE1BQU0sRUFBRSxPQUFPLEVBQUU7RUFDdkMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU07TUFDakIsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNOLEtBQUs7TUFDTCxPQUFPLEdBQUcsRUFBRSxDQUFDOztFQUVqQixJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7SUFDbkIsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7TUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO09BQ3JCO0tBQ0Y7R0FDRjs7T0FFSTtJQUNILE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFO01BQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUN6RCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO09BQ3JCO0tBQ0Y7R0FDRjs7RUFFRCxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDQSxXQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUMvQzs7QUMzQkQsVUFBZSxTQUFTLE1BQU0sRUFBRSxPQUFPLEVBQUU7RUFDdkMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU07TUFDakIsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNOLEtBQUs7TUFDTCxHQUFHLENBQUM7O0VBRVIsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFO0lBQ25CLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFO01BQ2QsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLEtBQUssSUFBSSxLQUFLLEVBQUU7UUFDakQsR0FBRyxHQUFHLEtBQUssQ0FBQztRQUNaLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1VBQ2QsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLEdBQUcsR0FBRyxLQUFLLEVBQUU7WUFDOUMsR0FBRyxHQUFHLEtBQUssQ0FBQztXQUNiO1NBQ0Y7T0FDRjtLQUNGO0dBQ0Y7O09BRUk7SUFDSCxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRTtNQUNkLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssSUFBSSxJQUFJLEtBQUssSUFBSSxLQUFLLEVBQUU7UUFDckUsR0FBRyxHQUFHLEtBQUssQ0FBQztRQUNaLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1VBQ2QsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksR0FBRyxHQUFHLEtBQUssRUFBRTtZQUNsRSxHQUFHLEdBQUcsS0FBSyxDQUFDO1dBQ2I7U0FDRjtPQUNGO0tBQ0Y7R0FDRjs7RUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNaOztBQ2pDRCxVQUFlLFNBQVMsTUFBTSxFQUFFLE9BQU8sRUFBRTtFQUN2QyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTTtNQUNqQixDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ04sS0FBSztNQUNMLEdBQUcsR0FBRyxDQUFDLENBQUM7O0VBRVosSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFO0lBQ25CLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFO01BQ2QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQztLQUN0QztHQUNGOztPQUVJO0lBQ0gsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7TUFDZCxJQUFJLEtBQUssR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxLQUFLLENBQUM7S0FDMUQ7R0FDRjs7RUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNaOztBQ25CRDs7Ozs7Ozs7Ozs7OztBQWFBLEFBR0E7Ozs7Ozs7OztBQVNBLEFBQU8sU0FBUyxTQUFTLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDakUsSUFBSSxLQUFLLEdBQUcsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQzlCLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO1NBQ3BCLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO1NBQ3RCLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO1NBQ2pCLE1BQU0sQ0FBQyxHQUFHLENBQUM7U0FDWCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckU7Ozs7Ozs7O0FBUUQsQUFrQkM7Ozs7OztBQU1ELEFBQU8sU0FBUyxjQUFjLEVBQUUsR0FBRyxFQUFFO0lBQ2pDLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNkLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7O0lBRWxDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFOztRQUVwQyxJQUFJO1lBQ0EsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRSxTQUFTO1lBQ3pDLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7O1lBRS9CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNuQyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksV0FBVyxFQUFFO29CQUNuQyxJQUFJLEtBQUssQ0FBQzs7b0JBRVYsSUFBSTt3QkFDQSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7cUJBQzFDLENBQUMsT0FBTyxDQUFDLEVBQUU7d0JBQ1IsS0FBSyxHQUFHLEVBQUUsQ0FBQztxQkFDZDs7b0JBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDbEIsSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztxQkFDbkU7aUJBQ0o7YUFDSjtTQUNKLENBQUMsT0FBTyxDQUFDLEVBQUU7Ozs7WUFJUixJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3hDLFNBQVM7U0FDWjtLQUNKOztJQUVELElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxhQUFhLEdBQUcsSUFBSSxHQUFHLE9BQU8sQ0FBQzs7SUFFN0MsT0FBTyxDQUFDLENBQUM7Q0FDWjs7Ozs7Ozs7QUFRRCxBQUFPLFNBQVMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRSxJQUFJLENBQUMsR0FBR0MsUUFBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFCLElBQUksQ0FBQyxHQUFHQSxRQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUIsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2QsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRztRQUNYLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUc7WUFDWCxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztZQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNOLENBQUMsRUFBRSxDQUFDO2dCQUNKLENBQUMsRUFBRSxDQUFDO2dCQUNKLEtBQUssRUFBRSxDQUFDO2dCQUNSLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzthQUM3RCxDQUFDLENBQUM7U0FDTixFQUFDO0tBQ0wsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxJQUFJLENBQUM7Q0FDZjs7Ozs7O0dBTUU7O0FDeklILG9CQUFlLFdBQVc7RUFDeEIsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDdEI7O0FDQUQsYUFBZSxDQUFDLFNBQVMsa0JBQWtCLENBQUMsTUFBTSxFQUFFO0VBQ2xELFNBQVMsWUFBWSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUU7SUFDL0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQzFCLEtBQUssR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztJQUNuQyxPQUFPLFdBQVc7TUFDaEIsSUFBSSxDQUFDLENBQUM7OztNQUdOLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7OztXQUcxQixHQUFHO1FBQ04sQ0FBQyxHQUFHLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckIsQ0FBQyxHQUFHLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUNuQixRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7O01BRXRCLE9BQU8sRUFBRSxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3pELENBQUM7R0FDSDs7RUFFRCxZQUFZLENBQUMsTUFBTSxHQUFHLGtCQUFrQixDQUFDOztFQUV6QyxPQUFPLFlBQVksQ0FBQztDQUNyQixFQUFFLGFBQWEsQ0FBQyxDQUFDOztBQzNCWCxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUM7O0FBRXhCLFNBQVMsR0FBRyxHQUFHLEVBQUU7O0FBRWpCLEdBQUcsQ0FBQyxTQUFTLEdBQUdDLEtBQUcsQ0FBQyxTQUFTLEdBQUc7RUFDOUIsV0FBVyxFQUFFLEdBQUc7RUFDaEIsR0FBRyxFQUFFLFNBQVMsR0FBRyxFQUFFO0lBQ2pCLE9BQU8sQ0FBQyxNQUFNLEdBQUcsR0FBRyxLQUFLLElBQUksQ0FBQztHQUMvQjtFQUNELEdBQUcsRUFBRSxTQUFTLEdBQUcsRUFBRTtJQUNqQixPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7R0FDM0I7RUFDRCxHQUFHLEVBQUUsU0FBUyxHQUFHLEVBQUUsS0FBSyxFQUFFO0lBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzNCLE9BQU8sSUFBSSxDQUFDO0dBQ2I7RUFDRCxNQUFNLEVBQUUsU0FBUyxHQUFHLEVBQUU7SUFDcEIsSUFBSSxRQUFRLEdBQUcsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUM1QixPQUFPLFFBQVEsSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7R0FDbEQ7RUFDRCxLQUFLLEVBQUUsV0FBVztJQUNoQixLQUFLLElBQUksUUFBUSxJQUFJLElBQUksRUFBRSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLEVBQUUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7R0FDOUU7RUFDRCxJQUFJLEVBQUUsV0FBVztJQUNmLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNkLEtBQUssSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRixPQUFPLElBQUksQ0FBQztHQUNiO0VBQ0QsTUFBTSxFQUFFLFdBQVc7SUFDakIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLEtBQUssSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ25GLE9BQU8sTUFBTSxDQUFDO0dBQ2Y7RUFDRCxPQUFPLEVBQUUsV0FBVztJQUNsQixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDakIsS0FBSyxJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUUsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNySCxPQUFPLE9BQU8sQ0FBQztHQUNoQjtFQUNELElBQUksRUFBRSxXQUFXO0lBQ2YsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsS0FBSyxJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUUsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDO0lBQzlELE9BQU8sSUFBSSxDQUFDO0dBQ2I7RUFDRCxLQUFLLEVBQUUsV0FBVztJQUNoQixLQUFLLElBQUksUUFBUSxJQUFJLElBQUksRUFBRSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLEVBQUUsT0FBTyxLQUFLLENBQUM7SUFDcEUsT0FBTyxJQUFJLENBQUM7R0FDYjtFQUNELElBQUksRUFBRSxTQUFTLENBQUMsRUFBRTtJQUNoQixLQUFLLElBQUksUUFBUSxJQUFJLElBQUksRUFBRSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0dBQ25HO0NBQ0YsQ0FBQzs7QUFFRixTQUFTQSxLQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtFQUN0QixJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQzs7O0VBR2xCLElBQUksTUFBTSxZQUFZLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOzs7T0FHakYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNOLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTTtRQUNqQixDQUFDLENBQUM7O0lBRU4sSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hELE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0dBQzlEOzs7T0FHSSxJQUFJLE1BQU0sRUFBRSxLQUFLLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzs7RUFFbkUsT0FBTyxHQUFHLENBQUM7Q0FDWjs7QUN0RUQsV0FBZSxXQUFXO0VBQ3hCLElBQUksSUFBSSxHQUFHLEVBQUU7TUFDVCxRQUFRLEdBQUcsRUFBRTtNQUNiLFVBQVU7TUFDVixNQUFNO01BQ04sSUFBSSxDQUFDOztFQUVULFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRTtJQUNwRCxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO01BQ3hCLElBQUksVUFBVSxJQUFJLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO01BQy9DLE9BQU8sTUFBTSxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO0tBQy9DOztJQUVELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNOLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTTtRQUNoQixHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25CLFFBQVE7UUFDUixLQUFLO1FBQ0wsV0FBVyxHQUFHQSxLQUFHLEVBQUU7UUFDbkIsTUFBTTtRQUNOLE1BQU0sR0FBRyxZQUFZLEVBQUUsQ0FBQzs7SUFFNUIsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7TUFDZCxJQUFJLE1BQU0sR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO1FBQ25FLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7T0FDcEIsTUFBTTtRQUNMLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztPQUNwQztLQUNGOztJQUVELFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxNQUFNLEVBQUUsR0FBRyxFQUFFO01BQ3JDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0tBQ3ZFLENBQUMsQ0FBQzs7SUFFSCxPQUFPLE1BQU0sQ0FBQztHQUNmOztFQUVELFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUU7SUFDM0IsSUFBSSxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sR0FBRyxDQUFDO0lBQ3RDLElBQUksS0FBSyxFQUFFLE9BQU8sR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQzdELEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0YsT0FBTyxPQUFPLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0dBQy9GOztFQUVELE9BQU8sSUFBSSxHQUFHO0lBQ1osTUFBTSxFQUFFLFNBQVMsS0FBSyxFQUFFLEVBQUUsT0FBTyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRTtJQUM1RSxHQUFHLEVBQUUsU0FBUyxLQUFLLEVBQUUsRUFBRSxPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0lBQ25FLE9BQU8sRUFBRSxTQUFTLEtBQUssRUFBRSxFQUFFLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ25GLEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUFFO0lBQy9DLFFBQVEsRUFBRSxTQUFTLEtBQUssRUFBRSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLEVBQUU7SUFDN0UsVUFBVSxFQUFFLFNBQVMsS0FBSyxFQUFFLEVBQUUsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLEVBQUU7SUFDaEUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLEVBQUU7R0FDakQsQ0FBQztFQUNIOztBQUVELFNBQVMsWUFBWSxHQUFHO0VBQ3RCLE9BQU8sRUFBRSxDQUFDO0NBQ1g7O0FBRUQsU0FBUyxTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUU7RUFDckMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztDQUNyQjs7QUFFRCxTQUFTLFNBQVMsR0FBRztFQUNuQixPQUFPQSxLQUFHLEVBQUUsQ0FBQztDQUNkOztBQUVELFNBQVMsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO0VBQy9CLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0NBQ3JCOztBQ3hFRCxJQUFJQyxPQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQzs7QUFFNUIsQUFBTyxJQUFJRCxLQUFHLEdBQUdDLE9BQUssQ0FBQyxHQUFHLENBQUM7QUFDM0IsQUFBTyxJQUFJQyxPQUFLLEdBQUdELE9BQUssQ0FBQyxLQUFLOztBQ0F2QixJQUFJLFFBQVEsR0FBRyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQzs7QUFFekMsQUFBZSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7RUFDckMsSUFBSSxLQUFLLEdBQUdELEtBQUcsRUFBRTtNQUNiLE1BQU0sR0FBRyxFQUFFO01BQ1gsT0FBTyxHQUFHLFFBQVEsQ0FBQzs7RUFFdkIsS0FBSyxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHRSxPQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDOztFQUUvQyxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUU7SUFDaEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxJQUFJLENBQUMsQ0FBQyxFQUFFO01BQ04sSUFBSSxPQUFPLEtBQUssUUFBUSxFQUFFLE9BQU8sT0FBTyxDQUFDO01BQ3pDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDcEM7SUFDRCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0dBQ3RDOztFQUVELEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0MsTUFBTSxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUdGLEtBQUcsRUFBRSxDQUFDO0lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDakMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEYsT0FBTyxLQUFLLENBQUM7R0FDZCxDQUFDOztFQUVGLEtBQUssQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDeEIsT0FBTyxTQUFTLENBQUMsTUFBTSxJQUFJLEtBQUssR0FBR0UsT0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0dBQzFFLENBQUM7O0VBRUYsS0FBSyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsRUFBRTtJQUMxQixPQUFPLFNBQVMsQ0FBQyxNQUFNLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxLQUFLLElBQUksT0FBTyxDQUFDO0dBQzFELENBQUM7O0VBRUYsS0FBSyxDQUFDLElBQUksR0FBRyxXQUFXO0lBQ3RCLE9BQU8sT0FBTyxFQUFFO1NBQ1gsTUFBTSxDQUFDLE1BQU0sQ0FBQztTQUNkLEtBQUssQ0FBQyxLQUFLLENBQUM7U0FDWixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7R0FDdkIsQ0FBQzs7RUFFRixPQUFPLEtBQUssQ0FBQztDQUNkOztBQzFDYyxTQUFTLElBQUksR0FBRztFQUM3QixJQUFJLEtBQUssR0FBRyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO01BQ3BDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTTtNQUNyQixZQUFZLEdBQUcsS0FBSyxDQUFDLEtBQUs7TUFDMUJILFFBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7TUFDZCxJQUFJO01BQ0osU0FBUztNQUNULEtBQUssR0FBRyxLQUFLO01BQ2IsWUFBWSxHQUFHLENBQUM7TUFDaEIsWUFBWSxHQUFHLENBQUM7TUFDaEIsS0FBSyxHQUFHLEdBQUcsQ0FBQzs7RUFFaEIsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDOztFQUVyQixTQUFTLE9BQU8sR0FBRztJQUNqQixJQUFJLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxNQUFNO1FBQ25CLE9BQU8sR0FBR0EsUUFBSyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxRQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzdCLEtBQUssR0FBR0EsUUFBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDMUIsSUFBSSxHQUFHQSxRQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDekUsSUFBSSxLQUFLLEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUM1RCxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQztJQUN0QyxJQUFJLEtBQUssRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4RSxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RSxPQUFPLFlBQVksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0dBQzFEOztFQUVELEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDekIsT0FBTyxTQUFTLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxNQUFNLEVBQUUsQ0FBQztHQUM3RCxDQUFDOztFQUVGLEtBQUssQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDeEIsT0FBTyxTQUFTLENBQUMsTUFBTSxJQUFJQSxRQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJQSxRQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7R0FDL0UsQ0FBQzs7RUFFRixLQUFLLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQzdCLE9BQU9BLFFBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztHQUN4RCxDQUFDOztFQUVGLEtBQUssQ0FBQyxTQUFTLEdBQUcsV0FBVztJQUMzQixPQUFPLFNBQVMsQ0FBQztHQUNsQixDQUFDOztFQUVGLEtBQUssQ0FBQyxJQUFJLEdBQUcsV0FBVztJQUN0QixPQUFPLElBQUksQ0FBQztHQUNiLENBQUM7O0VBRUYsS0FBSyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsRUFBRTtJQUN4QixPQUFPLFNBQVMsQ0FBQyxNQUFNLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksS0FBSyxDQUFDO0dBQzVELENBQUM7O0VBRUYsS0FBSyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsRUFBRTtJQUMxQixPQUFPLFNBQVMsQ0FBQyxNQUFNLElBQUksWUFBWSxHQUFHLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLFlBQVksQ0FBQztHQUNqSCxDQUFDOztFQUVGLEtBQUssQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDL0IsT0FBTyxTQUFTLENBQUMsTUFBTSxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLFlBQVksQ0FBQztHQUNsRyxDQUFDOztFQUVGLEtBQUssQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDL0IsT0FBTyxTQUFTLENBQUMsTUFBTSxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLFlBQVksQ0FBQztHQUNsRyxDQUFDOztFQUVGLEtBQUssQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDeEIsT0FBTyxTQUFTLENBQUMsTUFBTSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEtBQUssQ0FBQztHQUNwRixDQUFDOztFQUVGLEtBQUssQ0FBQyxJQUFJLEdBQUcsV0FBVztJQUN0QixPQUFPLElBQUksRUFBRTtTQUNSLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNoQixLQUFLLENBQUNBLFFBQUssQ0FBQztTQUNaLEtBQUssQ0FBQyxLQUFLLENBQUM7U0FDWixZQUFZLENBQUMsWUFBWSxDQUFDO1NBQzFCLFlBQVksQ0FBQyxZQUFZLENBQUM7U0FDMUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0dBQ25CLENBQUM7O0VBRUYsT0FBTyxPQUFPLEVBQUUsQ0FBQztDQUNsQjs7QUNsRkQsYUFBZSxTQUFTLFdBQVcsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFO0VBQ3ZELFdBQVcsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7RUFDdEQsU0FBUyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7RUFDckM7O0FBRUQsQUFBTyxTQUFTLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFO0VBQ3pDLElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0VBQ2hELEtBQUssSUFBSSxHQUFHLElBQUksVUFBVSxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDN0QsT0FBTyxTQUFTLENBQUM7Q0FDbEI7O0FDUE0sU0FBUyxLQUFLLEdBQUcsRUFBRTs7QUFFMUIsQUFBTyxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDeEIsQUFBTyxJQUFJLFFBQVEsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDOztBQUVqQyxJQUFJLEdBQUcsR0FBRyxxQkFBcUI7SUFDM0IsR0FBRyxHQUFHLCtDQUErQztJQUNyRCxHQUFHLEdBQUcsZ0RBQWdEO0lBQ3RELE1BQU0sR0FBRyxrQkFBa0I7SUFDM0IsTUFBTSxHQUFHLGtCQUFrQjtJQUMzQixZQUFZLEdBQUcsSUFBSSxNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDL0QsWUFBWSxHQUFHLElBQUksTUFBTSxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQy9ELGFBQWEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDdEUsYUFBYSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUN0RSxZQUFZLEdBQUcsSUFBSSxNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDL0QsYUFBYSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDOztBQUUzRSxJQUFJLEtBQUssR0FBRztFQUNWLFNBQVMsRUFBRSxRQUFRO0VBQ25CLFlBQVksRUFBRSxRQUFRO0VBQ3RCLElBQUksRUFBRSxRQUFRO0VBQ2QsVUFBVSxFQUFFLFFBQVE7RUFDcEIsS0FBSyxFQUFFLFFBQVE7RUFDZixLQUFLLEVBQUUsUUFBUTtFQUNmLE1BQU0sRUFBRSxRQUFRO0VBQ2hCLEtBQUssRUFBRSxRQUFRO0VBQ2YsY0FBYyxFQUFFLFFBQVE7RUFDeEIsSUFBSSxFQUFFLFFBQVE7RUFDZCxVQUFVLEVBQUUsUUFBUTtFQUNwQixLQUFLLEVBQUUsUUFBUTtFQUNmLFNBQVMsRUFBRSxRQUFRO0VBQ25CLFNBQVMsRUFBRSxRQUFRO0VBQ25CLFVBQVUsRUFBRSxRQUFRO0VBQ3BCLFNBQVMsRUFBRSxRQUFRO0VBQ25CLEtBQUssRUFBRSxRQUFRO0VBQ2YsY0FBYyxFQUFFLFFBQVE7RUFDeEIsUUFBUSxFQUFFLFFBQVE7RUFDbEIsT0FBTyxFQUFFLFFBQVE7RUFDakIsSUFBSSxFQUFFLFFBQVE7RUFDZCxRQUFRLEVBQUUsUUFBUTtFQUNsQixRQUFRLEVBQUUsUUFBUTtFQUNsQixhQUFhLEVBQUUsUUFBUTtFQUN2QixRQUFRLEVBQUUsUUFBUTtFQUNsQixTQUFTLEVBQUUsUUFBUTtFQUNuQixRQUFRLEVBQUUsUUFBUTtFQUNsQixTQUFTLEVBQUUsUUFBUTtFQUNuQixXQUFXLEVBQUUsUUFBUTtFQUNyQixjQUFjLEVBQUUsUUFBUTtFQUN4QixVQUFVLEVBQUUsUUFBUTtFQUNwQixVQUFVLEVBQUUsUUFBUTtFQUNwQixPQUFPLEVBQUUsUUFBUTtFQUNqQixVQUFVLEVBQUUsUUFBUTtFQUNwQixZQUFZLEVBQUUsUUFBUTtFQUN0QixhQUFhLEVBQUUsUUFBUTtFQUN2QixhQUFhLEVBQUUsUUFBUTtFQUN2QixhQUFhLEVBQUUsUUFBUTtFQUN2QixhQUFhLEVBQUUsUUFBUTtFQUN2QixVQUFVLEVBQUUsUUFBUTtFQUNwQixRQUFRLEVBQUUsUUFBUTtFQUNsQixXQUFXLEVBQUUsUUFBUTtFQUNyQixPQUFPLEVBQUUsUUFBUTtFQUNqQixPQUFPLEVBQUUsUUFBUTtFQUNqQixVQUFVLEVBQUUsUUFBUTtFQUNwQixTQUFTLEVBQUUsUUFBUTtFQUNuQixXQUFXLEVBQUUsUUFBUTtFQUNyQixXQUFXLEVBQUUsUUFBUTtFQUNyQixPQUFPLEVBQUUsUUFBUTtFQUNqQixTQUFTLEVBQUUsUUFBUTtFQUNuQixVQUFVLEVBQUUsUUFBUTtFQUNwQixJQUFJLEVBQUUsUUFBUTtFQUNkLFNBQVMsRUFBRSxRQUFRO0VBQ25CLElBQUksRUFBRSxRQUFRO0VBQ2QsS0FBSyxFQUFFLFFBQVE7RUFDZixXQUFXLEVBQUUsUUFBUTtFQUNyQixJQUFJLEVBQUUsUUFBUTtFQUNkLFFBQVEsRUFBRSxRQUFRO0VBQ2xCLE9BQU8sRUFBRSxRQUFRO0VBQ2pCLFNBQVMsRUFBRSxRQUFRO0VBQ25CLE1BQU0sRUFBRSxRQUFRO0VBQ2hCLEtBQUssRUFBRSxRQUFRO0VBQ2YsS0FBSyxFQUFFLFFBQVE7RUFDZixRQUFRLEVBQUUsUUFBUTtFQUNsQixhQUFhLEVBQUUsUUFBUTtFQUN2QixTQUFTLEVBQUUsUUFBUTtFQUNuQixZQUFZLEVBQUUsUUFBUTtFQUN0QixTQUFTLEVBQUUsUUFBUTtFQUNuQixVQUFVLEVBQUUsUUFBUTtFQUNwQixTQUFTLEVBQUUsUUFBUTtFQUNuQixvQkFBb0IsRUFBRSxRQUFRO0VBQzlCLFNBQVMsRUFBRSxRQUFRO0VBQ25CLFVBQVUsRUFBRSxRQUFRO0VBQ3BCLFNBQVMsRUFBRSxRQUFRO0VBQ25CLFNBQVMsRUFBRSxRQUFRO0VBQ25CLFdBQVcsRUFBRSxRQUFRO0VBQ3JCLGFBQWEsRUFBRSxRQUFRO0VBQ3ZCLFlBQVksRUFBRSxRQUFRO0VBQ3RCLGNBQWMsRUFBRSxRQUFRO0VBQ3hCLGNBQWMsRUFBRSxRQUFRO0VBQ3hCLGNBQWMsRUFBRSxRQUFRO0VBQ3hCLFdBQVcsRUFBRSxRQUFRO0VBQ3JCLElBQUksRUFBRSxRQUFRO0VBQ2QsU0FBUyxFQUFFLFFBQVE7RUFDbkIsS0FBSyxFQUFFLFFBQVE7RUFDZixPQUFPLEVBQUUsUUFBUTtFQUNqQixNQUFNLEVBQUUsUUFBUTtFQUNoQixnQkFBZ0IsRUFBRSxRQUFRO0VBQzFCLFVBQVUsRUFBRSxRQUFRO0VBQ3BCLFlBQVksRUFBRSxRQUFRO0VBQ3RCLFlBQVksRUFBRSxRQUFRO0VBQ3RCLGNBQWMsRUFBRSxRQUFRO0VBQ3hCLGVBQWUsRUFBRSxRQUFRO0VBQ3pCLGlCQUFpQixFQUFFLFFBQVE7RUFDM0IsZUFBZSxFQUFFLFFBQVE7RUFDekIsZUFBZSxFQUFFLFFBQVE7RUFDekIsWUFBWSxFQUFFLFFBQVE7RUFDdEIsU0FBUyxFQUFFLFFBQVE7RUFDbkIsU0FBUyxFQUFFLFFBQVE7RUFDbkIsUUFBUSxFQUFFLFFBQVE7RUFDbEIsV0FBVyxFQUFFLFFBQVE7RUFDckIsSUFBSSxFQUFFLFFBQVE7RUFDZCxPQUFPLEVBQUUsUUFBUTtFQUNqQixLQUFLLEVBQUUsUUFBUTtFQUNmLFNBQVMsRUFBRSxRQUFRO0VBQ25CLE1BQU0sRUFBRSxRQUFRO0VBQ2hCLFNBQVMsRUFBRSxRQUFRO0VBQ25CLE1BQU0sRUFBRSxRQUFRO0VBQ2hCLGFBQWEsRUFBRSxRQUFRO0VBQ3ZCLFNBQVMsRUFBRSxRQUFRO0VBQ25CLGFBQWEsRUFBRSxRQUFRO0VBQ3ZCLGFBQWEsRUFBRSxRQUFRO0VBQ3ZCLFVBQVUsRUFBRSxRQUFRO0VBQ3BCLFNBQVMsRUFBRSxRQUFRO0VBQ25CLElBQUksRUFBRSxRQUFRO0VBQ2QsSUFBSSxFQUFFLFFBQVE7RUFDZCxJQUFJLEVBQUUsUUFBUTtFQUNkLFVBQVUsRUFBRSxRQUFRO0VBQ3BCLE1BQU0sRUFBRSxRQUFRO0VBQ2hCLGFBQWEsRUFBRSxRQUFRO0VBQ3ZCLEdBQUcsRUFBRSxRQUFRO0VBQ2IsU0FBUyxFQUFFLFFBQVE7RUFDbkIsU0FBUyxFQUFFLFFBQVE7RUFDbkIsV0FBVyxFQUFFLFFBQVE7RUFDckIsTUFBTSxFQUFFLFFBQVE7RUFDaEIsVUFBVSxFQUFFLFFBQVE7RUFDcEIsUUFBUSxFQUFFLFFBQVE7RUFDbEIsUUFBUSxFQUFFLFFBQVE7RUFDbEIsTUFBTSxFQUFFLFFBQVE7RUFDaEIsTUFBTSxFQUFFLFFBQVE7RUFDaEIsT0FBTyxFQUFFLFFBQVE7RUFDakIsU0FBUyxFQUFFLFFBQVE7RUFDbkIsU0FBUyxFQUFFLFFBQVE7RUFDbkIsU0FBUyxFQUFFLFFBQVE7RUFDbkIsSUFBSSxFQUFFLFFBQVE7RUFDZCxXQUFXLEVBQUUsUUFBUTtFQUNyQixTQUFTLEVBQUUsUUFBUTtFQUNuQixHQUFHLEVBQUUsUUFBUTtFQUNiLElBQUksRUFBRSxRQUFRO0VBQ2QsT0FBTyxFQUFFLFFBQVE7RUFDakIsTUFBTSxFQUFFLFFBQVE7RUFDaEIsU0FBUyxFQUFFLFFBQVE7RUFDbkIsTUFBTSxFQUFFLFFBQVE7RUFDaEIsS0FBSyxFQUFFLFFBQVE7RUFDZixLQUFLLEVBQUUsUUFBUTtFQUNmLFVBQVUsRUFBRSxRQUFRO0VBQ3BCLE1BQU0sRUFBRSxRQUFRO0VBQ2hCLFdBQVcsRUFBRSxRQUFRO0NBQ3RCLENBQUM7O0FBRUYsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7RUFDbkIsV0FBVyxFQUFFLFdBQVc7SUFDdEIsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7R0FDakM7RUFDRCxHQUFHLEVBQUUsV0FBVztJQUNkLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0dBQ3pCO0VBQ0QsUUFBUSxFQUFFLFdBQVc7SUFDbkIsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0dBQ3hCO0NBQ0YsQ0FBQyxDQUFDOztBQUVILEFBQWUsU0FBUyxLQUFLLENBQUMsTUFBTSxFQUFFO0VBQ3BDLElBQUksQ0FBQyxDQUFDO0VBQ04sTUFBTSxHQUFHLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztFQUM1QyxPQUFPLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlKLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDbEcsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUs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LElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sR0FBRyxPQUFPO1VBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSTtVQUMxRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUk7VUFDMUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7V0FDbEQsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztHQUN4QztDQUNGLENBQUMsQ0FBQyxDQUFDOztBQUVKLFNBQVMsR0FBRyxDQUFDLEtBQUssRUFBRTtFQUNsQixLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNELE9BQU8sQ0FBQyxLQUFLLEdBQUcs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QyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztFQUMvRCxJQUFJLEVBQUUsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDM0MsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7RUFDbkUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7RUFDdkMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0NBQ3ZGOztBQUVELEFBRUM7O0FBRUQsQUFBTyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUU7RUFDcEMsT0FBTyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7Q0FDakc7O0FBRUQsQUFBTyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUU7RUFDcEMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNaLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDWixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ1osSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQztDQUN6Qjs7QUFFRCxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFO0VBQzdCLFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRTtJQUNwQixPQUFPLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7R0FDaEY7RUFDRCxNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUU7SUFDbEIsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0dBQ2hGO0VBQ0QsR0FBRyxFQUFFLFdBQVc7SUFDZCxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztHQUMvQjtDQUNGLENBQUMsQ0FBQyxDQUFDOztBQ3BISixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU87SUFDWixDQUFDLEdBQUcsQ0FBQyxPQUFPO0lBQ1osQ0FBQyxHQUFHLENBQUMsT0FBTztJQUNaLENBQUMsR0FBRyxDQUFDLE9BQU87SUFDWixDQUFDLEdBQUcsQ0FBQyxPQUFPO0lBQ1osRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQ1YsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQ1YsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7QUFFMUIsU0FBUyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUU7RUFDM0IsSUFBSSxDQUFDLFlBQVksU0FBUyxFQUFFLE9BQU8sSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0VBQzNFLElBQUksRUFBRSxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMzQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7TUFDYixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHO01BQ2IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRztNQUNiLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO01BQ3JELEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztNQUNWLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO01BQzlCLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQ2xELENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsT0FBTyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7RUFDcEQsT0FBTyxJQUFJLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0NBQzVEOztBQUVELEFBQWUsU0FBUyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFO0VBQ2xELE9BQU8sU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7Q0FDN0c7O0FBRUQsQUFBTyxTQUFTLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUU7RUFDMUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNaLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDWixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ1osSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQztDQUN6Qjs7QUFFRCxNQUFNLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFO0VBQ3pDLFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRTtJQUNwQixDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakQsT0FBTyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0dBQ2hFO0VBQ0QsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO0lBQ2xCLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3QyxPQUFPLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7R0FDaEU7RUFDRCxHQUFHLEVBQUUsV0FBVztJQUNkLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksT0FBTztRQUNoRCxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNYLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsQixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixPQUFPLElBQUksR0FBRztNQUNaLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO01BQ3JDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO01BQ3JDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztNQUMxQixJQUFJLENBQUMsT0FBTztLQUNiLENBQUM7R0FDSDtDQUNGLENBQUMsQ0FBQyxDQUFDOztBQzVERyxTQUFTLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0VBQ3hDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDL0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtRQUNqQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRTtRQUMxQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFO1FBQ25DLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQ3BCOztBQUVELGNBQWUsU0FBUyxNQUFNLEVBQUU7RUFDOUIsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDMUIsT0FBTyxTQUFTLENBQUMsRUFBRTtJQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xFLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2QsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO1FBQ3hDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pELE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0dBQy9DLENBQUM7Q0FDSDs7QUNoQkQsa0JBQWUsU0FBUyxNQUFNLEVBQUU7RUFDOUIsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztFQUN0QixPQUFPLFNBQVMsQ0FBQyxFQUFFO0lBQ2pCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEIsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdCLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0dBQy9DLENBQUM7Q0FDSDs7QUNaRCxpQkFBZSxTQUFTLENBQUMsRUFBRTtFQUN6QixPQUFPLFdBQVc7SUFDaEIsT0FBTyxDQUFDLENBQUM7R0FDVixDQUFDO0NBQ0g7O0FDRkQsU0FBU0ksUUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDcEIsT0FBTyxTQUFTLENBQUMsRUFBRTtJQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0dBQ2xCLENBQUM7Q0FDSDs7QUFFRCxTQUFTQyxhQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDNUIsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRTtJQUN4RSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7R0FDL0IsQ0FBQztDQUNIOztBQUVELEFBQU8sU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUN4QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ2QsT0FBTyxDQUFDLEdBQUdELFFBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBR0UsVUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDNUc7O0FBRUQsQUFBTyxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUU7RUFDdkIsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMvQyxPQUFPLENBQUMsR0FBRyxD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O0lBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtNQUNYLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQztNQUMxRCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRUEsaUJBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzlFLE1BQU0sSUFBSSxDQUFDLEVBQUU7TUFDWixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO0tBQzNDO0dBQ0Y7O0VBRUQsU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtNQUNYLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFQSxpQkFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDN0UsTUFBTSxJQUFJLENBQUMsRUFBRTtNQUNaLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7S0FDMUM7R0FDRjs7RUFFRCxTQUFTLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNuQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtNQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDeEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRUEsaUJBQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRUEsaUJBQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3RFLE1BQU0sSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUU7TUFDL0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0tBQ2pEO0dBQ0Y7O0VBRUQsT0FBTyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDcEIsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNOLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWCxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sQ0FBQyxDQUFDLENB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QUMsQ0FBQyxDQUFDLENBQUM7RUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNoRCxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0NBQzdCOztBQUVELGVBQWUsQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLFdBQVc7RUFDOUMsT0FBTyxJQUFJLENBQUMsSUFBSTtRQUNWLElBQUksQ0FBQyxLQUFLO1FBQ1YsSUFBSSxDQUFDLElBQUk7UUFDVCxJQUFJLENBQUMsTUFBTTtTQUNWLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztTQUNyQixJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN0RCxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7U0FDdEIsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3BFLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJ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RyxHQUFHLENBQUM7OztJQUc1RixJQUFJLElBQUksS0FBSyxJQUFJLEtBQUssR0FBRyxJQUFJLEtBQUssS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsSUFBSSxFQUFFLElBQUksR0FBRyxHQUFHLEVBQUUsS0FBSyxHQUFHLEdBQUcsQ0FBQzs7OztJQUlsRixJQUFJLE1BQU0sR0FBRyxNQUFNLEtBQUssR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEtBQUssR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO1FBQzdHLE1BQU0sR0FBRyxNQUFNLEtBQUssR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sR0FBRyxFQUFFLENBQUM7Ozs7O0lBSzdFLElBQUksVUFBVSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDOUIsV0FBVyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Ozs7OztJQU0xQyxTQUFTLEdBQUcsU0FBUyxJQUFJLElBQUksR0FBRyxDQUFDO1VBQzNCLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7VUFDMUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQzs7SUFFM0MsU0FBUyxNQUFNLENBQUMsS0FBSyxFQUFFO01BQ3JCLElBQUksV0FBVyxHQUFHLE1BQU07VUFDcEIsV0FBVyxHQUFHLE1BQU07VUFDcEIsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7O01BRVosSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFO1FBQ2hCLFdBQVcsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQzlDLEtBQUssR0FBRyxFQUFFLENBQUM7T0FDWixNQUFNO1FBQ0wsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDOzs7UUFHZixJQUFJLGFBQWEsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQzs7O1FBRy9DLElBQUksSUFBSSxFQUFFLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7OztRQUdwQyxJQUFJLGFBQWEsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsYUFBYSxHQUFHLEtBQUssQ0FBQzs7O1FBR3pELFdBQVcsR0FBRyxDQUFDLGFBQWEsSUFBSSxJQUFJLEtBQUssR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUUsR0FBRyxJQUFJLElBQUksV0FBVyxDQUFDO1FBQ3JILFdBQVcsR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLFdBQVcsSUFBSSxhQUFhLElBQUksSUFBSSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7Ozs7UUFJaEksSUFBSSxXQUFXLEVBQUU7VUFDZixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7VUFDekIsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZCxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRTtjQUM3QyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQztjQUN2RixLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Y0FDMUIsTUFBTTthQUNQO1dBQ0Y7U0FDRjtPQUNGOzs7TUFHRCxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQzs7O01BR25ELElBQUksTUFBTSxHQUFHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTTtVQUMvRCxPQUFPLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7OztNQUc3RSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLEVBQUUsT0FBTyxHQUFHLEVBQUUsQ0FBQzs7O01BR3hILFFBQVEsS0FBSztRQUNYLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxXQUFXLEdBQUcsS0FBSyxHQUFHLFdBQVcsR0FBRyxPQUFPLENBQUMsQ0FBQyxNQUFNO1FBQ3JFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxXQUFXLEdBQUcsT0FBTyxHQUFHLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxNQUFNO1FBQ3JFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxXQUFXLEdBQUcsS0FBSyxHQUFHLFdBQVcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUNwSSxTQUFTLEtBQUssR0FBRyxPQUFPLEdBQUcsV0FBVyxHQUFHLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxNQUFNO09BQ3JFOztNQUVELE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3hCOztJQUVELE1BQU0sQ0FBQyxRQUFRLEdBQUcsV0FBVztNQUMzQixPQUFPLFNBQVMsR0FBRyxFQUFFLENBQUM7S0FDdkIsQ0FBQzs7SUFFRixPQUFPLE1BQU0sQ0FBQztHQUNmOztFQUVELFNBQVMsWUFBWSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUU7SUFDdEMsSUFBSSxDQUFDLEdBQUcsU0FBUyxFQUFFLFNBQVMsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLEVBQUUsU0FBUyxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsU0FBUyxFQUFFO1FBQ3hGLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ2xFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwQixNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakMsT0FBTyxTQUFTLEtBQUssRUFBRTtNQUNyQixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0tBQzlCLENBQUM7R0FDSDs7RUFFRCxPQUFPO0lBQ0wsTUFBTSxFQUFFLFNBQVM7SUFDakIsWUFBWSxFQUFFLFlBQVk7R0FDM0IsQ0FBQztDQUNIOztBQzNJRCxJQUFJLE1BQU0sQ0FBQztBQUNYLEFBQU8sSUFBSSxNQUFNLENBQUM7QUFDbEIsQUFBTyxJQUFJLFlBQVksQ0FBQzs7QUFFeEIsYUFBYSxDQUFDO0VBQ1osT0FBTyxFQUFFLEdBQUc7RUFDWixTQUFTLEVBQUUsR0FBRztFQUNkLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNiLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7Q0FDcEIsQ0FBQyxDQUFDOztBQUVILEFBQWUsU0FBUyxhQUFhLENBQUMsVUFBVSxFQUFFO0VBQ2hELE1BQU0sR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7RUFDbEMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7RUFDdkIsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7RUFDbkMsT0FBTyxNQUFNLENBQUM7Q0FDZjs7QUNoQkQscUJBQWUsU0FBUyxJQUFJLEVBQUU7RUFDNUIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMvQzs7QUNGRCxzQkFBZSxTQUFTLElBQUksRUFBRSxLQUFLLEVBQUU7RUFDbkMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9HOztBQ0ZELHFCQUFlLFNBQVMsSUFBSSxFQUFFLEdBQUcsRUFBRTtFQUNqQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7RUFDbEQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3hEOztBQ0ZELGlCQUFlLFNBQVMsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7RUFDaEQsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUNqQixJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ2hDLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUM7TUFDeEQsU0FBUyxDQUFDO0VBQ2QsU0FBUyxHQUFHLGVBQWUsQ0FBQyxTQUFTLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQztFQUNsRSxRQUFRLFNBQVMsQ0FBQyxJQUFJO0lBQ3BCLEtBQUssR0FBRyxFQUFFO01BQ1IsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUN0RCxJQUFJLFNBQVMsQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7TUFDckgsT0FBTyxZQUFZLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ3ZDO0lBQ0QsS0FBSyxFQUFFLENBQUM7SUFDUixLQUFLLEdBQUcsQ0FBQztJQUNULEtBQUssR0FBRyxDQUFDO0lBQ1QsS0FBSyxHQUFHLENBQUM7SUFDVCxLQUFLLEdBQUcsRUFBRTtNQUNSLElBQUksU0FBUyxDQUFDLFNBQVMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLFNBQVMsR0FBRyxTQUFTLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztNQUNuTCxNQUFNO0tBQ1A7SUFDRCxLQUFLLEdBQUcsQ0FBQztJQUNULEtBQUssR0FBRyxFQUFFO01BQ1IsSUFBSSxTQUFTLENBQUMsU0FBUyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7TUFDNUksTUFBTTtLQUNQO0dBQ0Y7RUFDRCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztDQUMxQjs7QUN6Qk0sU0FBUyxTQUFTLENBQUMsS0FBSyxFQUFFO0VBQy9CLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7O0VBRTFCLEtBQUssQ0FBQyxLQUFLLEdBQUcsU0FBUyxLQUFLLEVBQUU7SUFDNUIsSUFBSSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUM7SUFDakIsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0dBQ2pFLENBQUM7O0VBRUYsS0FBSyxDQUFDLFVBQVUsR0FBRyxTQUFTLEtBQUssRUFBRSxTQUFTLEVBQUU7SUFDNUMsT0FBTyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQy9DLENBQUM7O0VBRUYsS0FBSyxDQUFDLElBQUksR0FBRyxTQUFTLEtBQUssRUFBRTtJQUMzQixJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQzs7SUFFOUIsSUFBSSxDQUFDLEdBQUcsTUFBTSxFQUFFO1FBQ1osRUFBRSxHQUFHLENBQUM7UUFDTixFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQ2pCLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2IsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDWixJQUFJLENBQUM7O0lBRVQsSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFO01BQ2hCLElBQUksR0FBRyxLQUFLLEVBQUUsS0FBSyxHQUFHLElBQUksRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDO01BQ3hDLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDO0tBQy9COztJQUVELElBQUksR0FBRyxhQUFhLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzs7SUFFekMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO01BQ1osS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztNQUN4QyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO01BQ3JDLElBQUksR0FBRyxhQUFhLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztLQUMxQyxNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtNQUNuQixLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO01BQ3ZDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7TUFDdEMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzFDOztJQUVELElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtNQUNaLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7TUFDeEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztNQUN0QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDWCxNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtNQUNuQixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO01BQ3ZDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7TUFDdkMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ1g7O0lBRUQsT0FBTyxLQUFLLENBQUM7R0FDZCxDQUFDOztFQUVGLE9BQU8sS0FBSyxDQUFDO0NBQ2Q7O0FBRUQsQUFBZSxTQUFTLE1BQU0sR0FBRztFQUMvQixJQUFJLEtBQUssR0FBRyxVQUFVLENBQUNPLG1CQUFhLEVBQUVDLGlCQUFhLENBQUMsQ0FBQzs7RUFFckQsS0FBSyxDQUFDLElBQUksR0FBRyxXQUFXO0lBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0dBQzlCLENBQUM7O0VBRUYsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDekI7O0FDcEVELElBQUlDLElBQUUsR0FBRyxJQUFJLElBQUk7SUFDYkMsSUFBRSxHQUFHLElBQUksSUFBSSxDQUFDOztBQUVsQixBQUFlLFNBQVMsV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRTs7RUFFakUsU0FBUyxRQUFRLENBQUMsSUFBSSxFQUFFO0lBQ3RCLE9BQU8sTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0dBQzdDOztFQUVELFFBQVEsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDOztFQUUxQixRQUFRLENBQUMsSUFBSSxHQUFHLFNBQVMsSUFBSSxFQUFFO0lBQzdCLE9BQU8sTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUM7R0FDaEYsQ0FBQzs7RUFFRixRQUFRLENBQUMsS0FBSyxHQUFHLFNBQVMsSUFBSSxFQUFFO0lBQzlCLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDbkIsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsT0FBTyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztHQUN4QyxDQUFDOztFQUVGLFFBQVEsQ0FBQyxNQUFNLEdBQUcsU0FBUyxJQUFJLEVBQUUsSUFBSSxFQUFFO0lBQ3JDLE9BQU8sT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7R0FDbkYsQ0FBQzs7RUFFRixRQUFRLENBQUMsS0FBSyxHQUFHLFNBQVMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7SUFDM0MsSUFBSSxLQUFLLEdBQUcsRUFBRSxFQUFFLFFBQVEsQ0FBQztJQUN6QixLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ2pELEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1dBQ3pFLFFBQVEsR0FBRyxLQUFLLElBQUksS0FBSyxHQUFHLElBQUksRUFBRTtJQUN6QyxPQUFPLEtBQUssQ0FBQztHQUNkLENBQUM7O0VBRUYsUUFBUSxDQUFDLE1BQU0sR0FBRyxTQUFTLElBQUksRUFBRTtJQUMvQixPQUFPLFdBQVcsQ0FBQyxTQUFTLElBQUksRUFBRTtNQUNoQyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDNUUsRUFBRSxTQUFTLElBQUksRUFBRSxJQUFJLEVBQUU7TUFDdEIsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO1FBQ2hCLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRTtVQUNoQyxPQUFPLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFO1NBQzFDLE1BQU0sT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUU7VUFDekIsT0FBTyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtTQUMxQztPQUNGO0tBQ0YsQ0FBQyxDQUFDO0dBQ0osQ0FBQzs7RUFFRixJQUFJLEtBQUssRUFBRTtJQUNULFFBQVEsQ0FBQyxLQUFLLEdBQUcsU0FBUyxLQUFLLEVBQUUsR0FBRyxFQUFFO01BQ3BDRCxJQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUVDLElBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNyQyxNQUFNLENBQUNELElBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQ0MsSUFBRSxDQUFDLENBQUM7TUFDdkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQ0QsSUFBRSxFQUFFQyxJQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ2xDLENBQUM7O0lBRUYsUUFBUSxDQUFDLEtBQUssR0FBRyxTQUFTLElBQUksRUFBRTtNQUM5QixJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUN4QixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUk7WUFDdEMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUTtZQUN0QixRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUs7Z0JBQ2pCLFNBQVMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUM3QyxTQUFTLENBQUMsRUFBRSxFQUFFLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUN0RSxDQUFDO0dBQ0g7O0VBRUQsT0FBTyxRQUFRLENBQUM7Q0FDakI7O0FDakVELElBQUksV0FBVyxHQUFHQyxXQUFRLENBQUMsV0FBVzs7Q0FFckMsRUFBRSxTQUFTLElBQUksRUFBRSxJQUFJLEVBQUU7RUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztDQUM1QixFQUFFLFNBQVMsS0FBSyxFQUFFLEdBQUcsRUFBRTtFQUN0QixPQUFPLEdBQUcsR0FBRyxLQUFLLENBQUM7Q0FDcEIsQ0FBQyxDQUFDOzs7QUFHSCxXQUFXLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxFQUFFO0VBQzlCLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUM7RUFDMUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLFdBQVcsQ0FBQztFQUNqQyxPQUFPQSxXQUFRLENBQUMsU0FBUyxJQUFJLEVBQUU7SUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztHQUN4QyxFQUFFLFNBQVMsSUFBSSxFQUFFLElBQUksRUFBRTtJQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztHQUNoQyxFQUFFLFNBQVMsS0FBSyxFQUFFLEdBQUcsRUFBRTtJQUN0QixPQUFPLENBQUMsR0FBRyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUM7R0FDMUIsQ0FBQyxDQUFDO0NBQ0osQ0FBQzs7QUN0QkssSUFBSUMsZ0JBQWMsR0FBRyxHQUFHLENBQUM7QUFDaEMsQUFBTyxJQUFJQyxnQkFBYyxHQUFHLEdBQUcsQ0FBQztBQUNoQyxBQUFPLElBQUlDLGNBQVksR0FBRyxJQUFJLENBQUM7QUFDL0IsQUFBTyxJQUFJQyxhQUFXLEdBQUcsS0FBSyxDQUFDO0FBQy9CLEFBQU8sSUFBSUMsY0FBWSxHQUFHLE1BQU07O0FDRGhDLElBQUksTUFBTSxHQUFHTCxXQUFRLENBQUMsU0FBUyxJQUFJLEVBQUU7RUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBR0MsZ0JBQWMsQ0FBQyxHQUFHQSxnQkFBYyxDQUFDLENBQUM7Q0FDbEUsRUFBRSxTQUFTLElBQUksRUFBRSxJQUFJLEVBQUU7RUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUdBLGdCQUFjLENBQUMsQ0FBQztDQUM3QyxFQUFFLFNBQVMsS0FBSyxFQUFFLEdBQUcsRUFBRTtFQUN0QixPQUFPLENBQUMsR0FBRyxHQUFHLEtBQUssSUFBSUEsZ0JBQWMsQ0FBQztDQUN2QyxFQUFFLFNBQVMsSUFBSSxFQUFFO0VBQ2hCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0NBQzdCLENBQUM7O0FDUkYsSUFBSSxNQUFNLEdBQUdELFdBQVEsQ0FBQyxTQUFTLElBQUksRUFBRTtFQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHRSxnQkFBYyxDQUFDLEdBQUdBLGdCQUFjLENBQUMsQ0FBQztDQUNsRSxFQUFFLFNBQVMsSUFBSSxFQUFFLElBQUksRUFBRTtFQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksR0FBR0EsZ0JBQWMsQ0FBQyxDQUFDO0NBQzdDLEVBQUUsU0FBUyxLQUFLLEVBQUUsR0FBRyxFQUFFO0VBQ3RCLE9BQU8sQ0FBQyxHQUFHLEdBQUcsS0FBSyxJQUFJQSxnQkFBYyxDQUFDO0NBQ3ZDLEVBQUUsU0FBUyxJQUFJLEVBQUU7RUFDaEIsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Q0FDMUIsQ0FBQzs7QUNSRixJQUFJLElBQUksR0FBR0YsV0FBUSxDQUFDLFNBQVMsSUFBSSxFQUFFO0VBQ2pDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxHQUFHRSxnQkFBYyxHQUFHQyxjQUFZLENBQUM7RUFDdEUsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFLE1BQU0sSUFBSUEsY0FBWSxDQUFDO0VBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sSUFBSUEsY0FBWSxDQUFDLEdBQUdBLGNBQVksR0FBRyxNQUFNLENBQUMsQ0FBQztDQUNuRixFQUFFLFNBQVMsSUFBSSxFQUFFLElBQUksRUFBRTtFQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksR0FBR0EsY0FBWSxDQUFDLENBQUM7Q0FDM0MsRUFBRSxTQUFTLEtBQUssRUFBRSxHQUFHLEVBQUU7RUFDdEIsT0FBTyxDQUFDLEdBQUcsR0FBRyxLQUFLLElBQUlBLGNBQVksQ0FBQztDQUNyQyxFQUFFLFNBQVMsSUFBSSxFQUFFO0VBQ2hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0NBQ3hCLENBQUM7O0FDVkYsSUFBSSxHQUFHLEdBQUdILFdBQVEsQ0FBQyxTQUFTLElBQUksRUFBRTtFQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzNCLEVBQUUsU0FBUyxJQUFJLEVBQUUsSUFBSSxFQUFFO0VBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0NBQ3JDLEVBQUUsU0FBUyxLQUFLLEVBQUUsR0FBRyxFQUFFO0VBQ3RCLE9BQU8sQ0FBQyxHQUFHLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixFQUFFLElBQUlFLGdCQUFjLElBQUlFLGFBQVcsQ0FBQztDQUM3RyxFQUFFLFNBQVMsSUFBSSxFQUFFO0VBQ2hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztDQUMzQixDQUFDOztBQ1JGLFNBQVMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUNsQixPQUFPSixXQUFRLENBQUMsU0FBUyxJQUFJLEVBQUU7SUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzRCxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0dBQzNCLEVBQUUsU0FBUyxJQUFJLEVBQUUsSUFBSSxFQUFFO0lBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztHQUN6QyxFQUFFLFNBQVMsS0FBSyxFQUFFLEdBQUcsRUFBRTtJQUN0QixPQUFPLENBQUMsR0FBRyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxJQUFJRSxnQkFBYyxJQUFJRyxjQUFZLENBQUM7R0FDOUcsQ0FBQyxDQUFDO0NBQ0o7O0FBRUQsQUFBTyxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsQUFBTyxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsQUFBTyxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsQUFBTyxJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsQUFBTyxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsQUFBTyxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsQUFBTyxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDOztBQ2xCaEMsSUFBSSxLQUFLLEdBQUdMLFdBQVEsQ0FBQyxTQUFTLElBQUksRUFBRTtFQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDM0IsRUFBRSxTQUFTLElBQUksRUFBRSxJQUFJLEVBQUU7RUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7Q0FDdkMsRUFBRSxTQUFTLEtBQUssRUFBRSxHQUFHLEVBQUU7RUFDdEIsT0FBTyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7Q0FDM0YsRUFBRSxTQUFTLElBQUksRUFBRTtFQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztDQUN4QixDQUFDOztBQ1RGLElBQUksSUFBSSxHQUFHQSxXQUFRLENBQUMsU0FBUyxJQUFJLEVBQUU7RUFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUMzQixFQUFFLFNBQVMsSUFBSSxFQUFFLElBQUksRUFBRTtFQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztDQUM3QyxFQUFFLFNBQVMsS0FBSyxFQUFFLEdBQUcsRUFBRTtFQUN0QixPQUFPLEdBQUcsQ0FBQyxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7Q0FDaEQsRUFBRSxTQUFTLElBQUksRUFBRTtFQUNoQixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztDQUMzQixDQUFDLENBQUM7OztBQUdILElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEVBQUU7RUFDdkIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBR0EsV0FBUSxDQUFDLFNBQVMsSUFBSSxFQUFFO0lBQy9FLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDekQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztHQUMzQixFQUFFLFNBQVMsSUFBSSxFQUFFLElBQUksRUFBRTtJQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7R0FDakQsQ0FBQyxDQUFDO0NBQ0osQ0FBQzs7QUNuQkYsSUFBSSxTQUFTLEdBQUdBLFdBQVEsQ0FBQyxTQUFTLElBQUksRUFBRTtFQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFB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LENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEIsT0FBTyxJQUFJLENBQUM7R0FDYjtFQUNELE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3BEOztBQUVELFNBQVMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFO0lBQ3pCLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLE9BQU8sSUFBSSxDQUFDO0dBQ2I7RUFDRCxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDOUQ7O0FBRUQsU0FBUyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQ2xCLE9BQU8sQ0FB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QyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztDQUNoRDs7QUFFRCxTQUFTLHFCQUFxQixDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFO0VBQzNDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztDQUNoRDs7QUFFRCxTQUFTLGtCQUFrQixDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFO0VBQ3hDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztDQUNoRDs7QUFFRCxTQUFTLHFCQUFxQixDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFO0VBQzNDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztDQUNoRDs7QUFFRCxTQUFTLGFBQWEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTtFQUNuQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDaEQ7O0FBRUQsU0FBUyxTQUFTLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUU7RUFDL0IsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDN0U7O0FBRUQsU0FBUyxTQUFTLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUU7RUFDL0IsSUFBSSxDQUFDLEdBQUcsOEJBQThCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3BFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztDQUM5RTs7QUFFRCxTQUFTLGdCQUFnQixDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFO0VBQ3RDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ25EOztBQUVELFNBQVMsZUFBZSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFO0VBQ3JDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztDQUNoRDs7QUFFRCxTQUFTLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTtFQUNwQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDekQ7O0FBRUQsU0FBUyxXQUFXLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUU7RUFDakMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM5QyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ2hEOztBQUVELFNBQVMsWUFBWSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFO0VBQ2xDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztDQUNoRDs7QUFFRCxTQUFTLFlBQVksQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTtFQUNsQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDaEQ7O0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTtFQUN2QyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDaEQ7O0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTtFQUN2QyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDbEU7O0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTtFQUN6QyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQy9DLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQ2pDOztBQUVELFNBQVMsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUU7RUFDeEMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztDQUNoRDs7QUFFRCxTQUFTLHlCQUF5QixDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFO0VBQy9DLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3ZDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDekQ7O0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzlCLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDL0I7O0FBRUQsU0FBUyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUMxQixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ2hDOztBQUVELFNBQVMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDMUIsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzNDOztBQUVELFNBQVMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDN0IsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHRSxHQUFPLENBQUMsS0FBSyxDQUFDQyxJQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3JEOztBQUVELFNBQVMsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNoQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3ZDOztBQUVELFNBQVMsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNoQyxPQUFPLGtCQUFrQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7Q0FDekM7O0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQy9CLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3BDOztBQUVELFNBQVMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDM0IsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNsQzs7QUFFRCxTQUFTLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzNCLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDbEM7O0FBRUQsU0FBUyx5QkFBeUIsQ0FBQyxDQUFDLEVBQUU7RUFDcEMsSUFBSUgsTUFBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztFQUNyQixPQUFPQSxNQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBR0EsTUFBRyxDQUFDO0NBQzVCOztBQUVELFNBQVMsc0JBQXNCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNwQyxPQUFPLEdBQUcsQ0FBQ0ksTUFBVSxDQUFDLEtBQUssQ0FBQ0QsSUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNwRDs7QUFFRCxTQUFTLG1CQUFtQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDakMsSUFBSUgsTUFBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztFQUNyQixDQUFDLEdBQUcsQ0FBQ0EsTUFBRyxJQUFJLENBQUMsSUFBSUEsTUFBRyxLQUFLLENBQUMsSUFBSUssUUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHQSxRQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JFLE9BQU8sR0FBRyxDQUFDQSxRQUFZLENBQUMsS0FBSyxDQUFDRixJQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUlBLElBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDckY7O0FBRUQsU0FBUyx5QkFBeUIsQ0FBQyxDQUFDLEVBQUU7RUFDcEMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDbkI7O0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ3BDLE9BQU8sR0FBRyxDQUFDRixNQUFVLENBQUMsS0FBSyxDQUFDRSxJQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3BEOztBQUVELFNBQVMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDeEIsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDekM7O0FBRUQsU0FBUyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM1QixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUMzQzs7QUFFRCxTQUFTLFVBQVUsQ0FBQyxDQUFDLEVBQUU7RUFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7RUFDOUIsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7UUFDOUIsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdkIsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzNCOztBQUVELFNBQVMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNqQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ2xDOztBQUVELFNBQVMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDN0IsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNuQzs7QUFFRCxTQUFTLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzdCLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUM5Qzs7QUFFRCxTQUFTLGtCQUFrQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDaEMsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNuRDs7QUFFRCxTQUFTLHFCQUFxQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDbkMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzFDOztBQUVELFNBQVMscUJBQXFCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNuQyxPQUFPLHFCQUFxQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7Q0FDNUM7O0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ2xDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3ZDOztBQUVELFNBQVMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM5QixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3JDOztBQUVELFNBQVMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM5QixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3JDOztBQUVELFNBQVMsNEJBQTRCLENBQUMsQ0FBQyxFQUFFO0VBQ3ZDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztFQUN4QixPQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUM1Qjs7QUFFRCxTQUFTLHlCQUF5QixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDdkMsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ2xEOztBQUVELFNBQVMsc0JBQXNCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUNwQyxJQUFJSCxNQUFHLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0VBQ3hCLENBQUMsR0FBRyxDQUFDQSxNQUFHLElBQUksQ0FBQyxJQUFJQSxNQUFHLEtBQUssQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ25FLE9BQU8sR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDckY7O0FBRUQsU0FBUyw0QkFBNEIsQ0FBQyxDQUFDLEVBQUU7RUFDdkMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7Q0FDdEI7O0FBRUQsU0FBUyx5QkFBeUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ3ZDLE9BQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNsRDs7QUFFRCxTQUFTLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzNCLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzVDOztBQUVELFNBQVMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUMvQixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUM5Qzs7QUFFRCxTQUFTLGFBQWEsR0FBRztFQUN2QixPQUFPLE9BQU8sQ0FBQztDQUNoQjs7QUFFRCxTQUFTLG9CQUFvQixHQUFHO0VBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ1o7O0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUU7RUFDOUIsT0FBTyxDQUFDLENBQUMsQ0FBQztDQUNYOztBQUVELFNBQVMsMEJBQTBCLENBQUMsQ0FBQyxFQUFFO0VBQ3JDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztDQUM5Qjs7QUM3bkJELElBQUlNLFFBQU0sQ0FBQztBQUNYLEFBQXNCO0FBQ3RCLEFBQXFCO0FBQ3JCLEFBQU8sSUFBSSxTQUFTLENBQUM7QUFDckIsQUFBTyxJQUFJLFFBQVEsQ0FBQzs7QUFFcEJDLGVBQWEsQ0FBQztFQUNaLFFBQVEsRUFBRSxRQUFRO0VBQ2xCLElBQUksRUFBRSxZQUFZO0VBQ2xCLElBQUksRUFBRSxjQUFjO0VBQ3BCLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7RUFDckIsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDO0VBQ3BGLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztFQUM1RCxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQztFQUNsSSxXQUFXLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztDQUNsRyxDQUFDLENBQUM7O0FBRUgsQUFBZSxTQUFTQSxlQUFhLENBQUMsVUFBVSxFQUFFO0VBQ2hERCxRQUFNLEdBQUdQLGNBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztFQUNsQyxBQUVBLFNBQVMsR0FBR08sUUFBTSxDQUFDLFNBQVMsQ0FBQztFQUM3QixRQUFRLEdBQUdBLFFBQU0sQ0FBQyxRQUFRLENBQUM7RUFDM0IsT0FBT0EsUUFBTSxDQUFDO0NBQ2Y7O0FDeEJNLElBQUksWUFBWSxHQUFHLHVCQUF1QixDQUFDOztBQUVsRCxTQUFTLGVBQWUsQ0FBQyxJQUFJLEVBQUU7RUFDN0IsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Q0FDM0I7O0FBRUQsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXO01BQ3BDLGVBQWU7TUFDZixTQUFTLENBQUMsWUFBWSxDQUFDOztBQ1A3QixTQUFTLGNBQWMsQ0FBQyxNQUFNLEVBQUU7RUFDOUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDNUIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztDQUNsQzs7QUFFRCxJQUFJLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLDBCQUEwQixDQUFDO01BQzlDLGNBQWM7TUFDZCxRQUFRLENBQUMsWUFBWSxDQUFDOztBQ1JiLFNBQVMsVUFBVSxDQUFDLFlBQVksRUFBRTtFQUMvQyxJQUFJLEVBQUUsR0FBRyxDQUFDO01BQ04sRUFBRSxHQUFHLENBQUM7TUFDTixHQUFHLEdBQUcsQ0FBQztNQUNQLEtBQUssR0FBRyxLQUFLLENBQUM7O0VBRWxCLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRTtJQUNoQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO0lBQ3ZCLE9BQU8sWUFBWSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzlEOztFQUVELEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDekIsT0FBTyxTQUFTLENBQUMsTUFBTSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0dBQzNHLENBQUM7O0VBRUYsS0FBSyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsRUFBRTtJQUN4QixPQUFPLFNBQVMsQ0FBQyxNQUFNLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLEtBQUssQ0FBQztHQUN4RCxDQUFDOztFQUVGLEtBQUssQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDL0IsT0FBTyxTQUFTLENBQUMsTUFBTSxJQUFJLFlBQVksR0FBRyxDQUFDLEVBQUUsS0FBSyxJQUFJLFlBQVksQ0FBQztHQUNwRSxDQUFDOztFQUVGLEtBQUssQ0FBQyxJQUFJLEdBQUcsV0FBVztJQUN0QixPQUFPLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7R0FDL0QsQ0FBQzs7RUFFRixPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUN6Qjs7QUM5QkQsSUFBSSxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQzs7QUFFbEMsU0FBUyxRQUFRLEdBQUc7RUFDbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtJQUMzRCxJQUFJLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0dBQ1g7RUFDRCxPQUFPLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3hCOztBQUVELFNBQVMsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUNuQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNaOztBQUVELFNBQVNFLGdCQUFjLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRTtFQUN4QyxPQUFPLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO0lBQ3JELElBQUksSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN6RSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7R0FDOUIsQ0FBQyxDQUFDO0NBQ0o7O0FBRUQsUUFBUSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxHQUFHO0VBQ3hDLFdBQVcsRUFBRSxRQUFRO0VBQ3JCLEVBQUUsRUFBRSxTQUFTLFFBQVEsRUFBRSxRQUFRLEVBQUU7SUFDL0IsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDVixDQUFDLEdBQUdBLGdCQUFjLENBQUMsUUFBUSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUNELENBQUMsR0FBRyxDQUFDLENBQUM7UUFDTixDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQzs7O0lBR2pCLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDeEIsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsR0FBR0MsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztNQUM3RixPQUFPO0tBQ1I7Ozs7SUFJRCxJQUFJLFFBQVEsSUFBSSxJQUFJLElBQUksT0FBTyxRQUFRLEtBQUssVUFBVSxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxDQUFDLENBQUM7SUFDekcsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7TUFDZCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0MsS0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1dBQ3JFLElBQUksUUFBUSxJQUFJLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDL0U7O0lBRUQsT0FBTyxJQUFJLENBQUM7R0FDYjtFQUNELElBQUksRUFBRSxXQUFXO0lBQ2YsSUFBSSxJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzFCLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDeEMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUMzQjtFQUNELElBQUksRUFBRSxTQUFTLElBQUksRUFBRSxJQUFJLEVBQUU7SUFDekIsSUFBSSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0SCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMzRSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7R0FDdEY7RUFDRCxLQUFLLEVBQUUsU0FBUyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtJQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMzRSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztHQUMxRjtDQUNGLENBQUM7O0FBRUYsU0FBU0QsS0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7RUFDdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7SUFDOUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxLQUFLLElB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QUFHLElBQUksQ0FBQyxHQUFHLENBQUM7O0VBRWxCLElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxFQUFFLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7O0VBRTVELEtBQUssSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0lBQzlGLEtBQUssSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7TUFDdEgsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDL0UsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN6RCxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQ3RCLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztPQUM3RDtLQUNGO0dBQ0Y7O0VBRUQsT0FBTyxJQUFJLFVBQVUs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LENBQUMsS0FBSyxDQUFDO2FBQ1gsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQzthQUN0QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3JFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNsRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDbEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDdEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7O1FBRzdCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVGLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO2FBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDWixLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO2FBQ3RCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtB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QUUsQ0FBQyxDQUFDLENBQUM7YUFDbEQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ2xELElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO2FBQ3RCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7OztRQUc3QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RixHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQzthQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDO2FBQ1osS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQzthQUN0QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3RCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDOUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUM5RCxJQUFJLENBQUMsUUFBUSxFQUFF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QUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztNQUN6QyxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQztLQUNmO0dBQ0Y7RUFDRCxNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3JCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0dBQ3pEO0VBQ0QsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDdkMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7R0FDckY7RUFDRCxhQUFhLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM1QyxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztHQUNqSDtFQUNELEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7SUFDakMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRztRQUNiLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRztRQUNiLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUNiLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUNiLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUNiLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUNiLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7OztJQUdsQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUMsQ0FBQzs7O0lBR3BELElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLEVBQUU7TUFDckIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztLQUN6RDs7O1NBR0ksSUFBSSxFQUFFLEtBQUssR0FBR0EsU0FBTyxDQUFDLENBQUMsQ0FBQzs7Ozs7U0FLeEIsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUdBLFNBQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO01BQzNELElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7S0FDekQ7OztTQUdJO01BQ0gsSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUU7VUFDYixHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUU7VUFDYixLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztVQUM3QixLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztVQUM3QixHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7VUFDdEIsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1VBQ3RCLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDRixJQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7VUFDakYsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHO1VBQ2IsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7OztNQUdsQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHRSxTQUFPLEVBQUU7UUFDL0IsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztPQUMzRDs7TUFFRCxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxPQUFPLElBQUksRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztLQUM1STtHQUNGO0VBQ0QsR0FBRyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7SUFDbEMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3JCLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDckIsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHO1FBQ1osRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7OztJQUdqQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUMsQ0FBQzs7O0lBR3BELElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLEVBQUU7TUFDckIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7S0FDL0I7OztTQUdJLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHQSxTQUFPLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHQSxTQUFPLEVBQUU7TUFDL0UsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFF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QUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTTtNQUN4RCxLQUFLLENBQUMsRUFBRUEsT0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0tBQzlEO0lBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyRixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0dBQzdCO0VBQ0QsS0FBSyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNwQixJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUM7O0lBRWIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNmLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTztJQUM3QyxRQUFRLElBQUksQ0FBQyxNQUFNO01BQ2pCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtNQUNyRyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU07TUFDL0IsS0FBSyxDQUFDLEVBQUUs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LEVBQUUsUUFBUSxDQUFDLENBQUM7O0FBRW5DLElBQUksQ0FBQyxHQUFHO0VBQ04sSUFBSSxFQUFFLEdBQUc7RUFDVCxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztFQUM3QixLQUFLLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7RUFDekUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtDQUM1RCxDQUFDOztBQUVGLElBQUksQ0FBQyxHQUFHO0VBQ04sSUFBSSxFQUFFLEdBQUc7RUFDVCxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztFQUM3QixLQUFLLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7RUFDekUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxF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QyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztNQUV2RCxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztXQUNyQixLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQztXQUN0QixJQUFJLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7V0FDMUksSUFBSSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1dBQzFILElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUM7V0FDckksSUFBSSxDQUFDLFFBQVEsRUFBRSxT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R0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO2VBQzdFLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7VUFDdkYsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQztlQUM3RSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1VBQ3ZGLE1BQU07U0FDUDtRQUNELEtBQUssV0FBVyxFQUFFO1VBQ2hCLElBQUksS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUs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QUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRztrQkFDbkQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztrQkFDOUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztrQkFDaEUsT0FBTyxDQUFDLElBQUksUUFBUSxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUM7YUFDNUMsQ0FBQyxDQUFDLENBQUM7O1lBRUosTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDOztZQUVoQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ2xEOzs7O1FBSUQsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7O1FBRXRELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSTtZQUMxQixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO1lBQ25CLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7OztZQUd4QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUk7aUJBQ1YsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDOztZQUV2RixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLO2dCQUN2QixJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPO2dCQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Ozs7Z0JBSXBELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDUCxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7O2dCQUd2RyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFELENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO3FCQUNkLFVBQVUsQ0FBQyxDQUFDLENBQUM7cUJBQ2IsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUU7eUJBQ1osRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3lCQUM3QixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt5QkFDOUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNoQyxDQUFDOzs7OztnQkFLTixNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDeEMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3hDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztnQkFDZCxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztxQkFDakIsVUFBVSxDQUFDLENBQUMsQ0FBQztxQkFDYixJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzNCLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQzNCLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzNELElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7OztnQkFHbkUsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDakMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztxQkFDckIsVUFBVSxDQUFDLENBQUMsQ0FBQztxQkFDYixJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzVCLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzNCLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQzdCLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUM7YUFDckMsQ0FBQyxDQUFDO1NBQ04sQ0FBQyxDQUFDOztLQUVOOzs7Ozs7Ozs7SUFTRCxXQUFXLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDOzs7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U0FBUyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQzs7SUFFL0QsQUFDQSxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQzs7O0lBR25DLElBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQzs7SUFFM0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6SyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDOzs7Q0FHcEQ7Ozs7Ozs7Ozs7Ozs7OyJ9 diff --git a/build/js/gtex-viz.bundle.min.js b/build/js/gtex-viz.bundle.min.js index 76083f30..63aa4f13 100644 --- a/build/js/gtex-viz.bundle.min.js +++ b/build/js/gtex-viz.bundle.min.js @@ -1,2 +1,2 @@ -var GTExViz=function(t){"use strict";var e="http://www.w3.org/1999/xhtml",n={svg:"http://www.w3.org/2000/svg",xhtml:e,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},r=function(t){var e=t+="",r=e.indexOf(":");return r>=0&&"xmlns"!==(e=t.slice(0,r))&&(t=t.slice(r+1)),n.hasOwnProperty(e)?{space:n[e],local:t}:t};var a=function(t){var n=r(t);return(n.local?function(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}:function(t){return function(){var n=this.ownerDocument,r=this.namespaceURI;return r===e&&n.documentElement.namespaceURI===e?n.createElement(t):n.createElementNS(r,t)}})(n)};function i(){}var o=function(t){return null==t?i:function(){return this.querySelector(t)}};function c(){return[]}var s=function(t){return null==t?c:function(){return this.querySelectorAll(t)}},f=function(t){return function(){return this.matches(t)}};if("undefined"!=typeof document){var l=document.documentElement;if(!l.matches){var u=l.webkitMatchesSelector||l.msMatchesSelector||l.mozMatchesSelector||l.oMatchesSelector;f=function(t){return function(){return u.call(this,t)}}}}var h=f,d=function(t){return new Array(t.length)};function b(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}b.prototype={constructor:b,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var p="$";function g(t,e,n,r,a,i){for(var o,c=0,s=e.length,f=i.length;ce?1:t>=e?0:NaN}var v=function(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView};function x(t,e){return t.style.getPropertyValue(e)||v(t).getComputedStyle(t,null).getPropertyValue(e)}function w(t){return t.trim().split(/^|\s+/)}function _(t){return t.classList||new M(t)}function M(t){this._node=t,this._names=w(t.getAttribute("class")||"")}function S(t,e){for(var n=_(t),r=-1,a=e.length;++r=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function N(){this.textContent=""}function E(){this.innerHTML=""}function A(){this.nextSibling&&this.parentNode.appendChild(this)}function k(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function C(){return null}function L(){var t=this.parentNode;t&&t.removeChild(this)}function D(){return this.parentNode.insertBefore(this.cloneNode(!1),this.nextSibling)}function P(){return this.parentNode.insertBefore(this.cloneNode(!0),this.nextSibling)}var I={},U=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(I={mouseenter:"mouseover",mouseleave:"mouseout"}));function z(t,e,n){return t=Y(t,e,n),function(e){var n=e.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||t.call(this,e)}}function Y(t,e,n){return function(r){var a=U;U=r;try{t.call(this,this.__data__,e,n)}finally{U=a}}}function B(t){return function(){var e=this.__on;if(e){for(var n,r=0,a=-1,i=e.length;r=M&&(M=_+1);!(w=v[M])&&++M=0;)(r=a[i])&&(o&&o!==r.nextSibling&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=y);for(var n=this._groups,r=n.length,a=new Array(r),i=0;i1?this.each((null==e?function(t){return function(){this.style.removeProperty(t)}}:"function"==typeof e?function(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}:function(t,e,n){return function(){this.style.setProperty(t,e,n)}})(t,e,null==n?"":n)):x(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?function(t){return function(){delete this[t]}}:"function"==typeof e?function(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}:function(t,e){return function(){this[t]=e}})(t,e)):this.node()[t]},classed:function(t,e){var n=w(t+"");if(arguments.length<2){for(var r=_(this.node()),a=-1,i=n.length;++a=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}})}(t+""),o=i.length;if(!(arguments.length<2)){for(c=e?j:B,null==n&&(n=!1),r=0;re?1:t>=e?0:NaN};var Z,K,Q=(1===(Z=W).length&&(K=Z,Z=function(t,e){return W(K(t),e)}),{left:function(t,e,n,r){for(null==n&&(n=0),null==r&&(r=t.length);n>>1;Z(t[a],e)<0?n=a+1:r=a}return n},right:function(t,e,n,r){for(null==n&&(n=0),null==r&&(r=t.length);n>>1;Z(t[a],e)>0?r=a:n=a+1}return n}}).right,J=function(t){return null===t?NaN:+t},tt=function(t,e){var n=function(t,e){var n,r,a=t.length,i=0,o=-1,c=0,s=0;if(null==e)for(;++o1)return s/(i-1)}(t,e);return n?Math.sqrt(n):n},et=function(t,e){var n,r,a,i=t.length,o=-1;if(null==e){for(;++o=n)for(r=a=n;++on&&(r=n),a=n)for(r=a=n;++on&&(r=n),a0)return[t];if((r=e0)for(t=Math.ceil(t/o),e=Math.floor(e/o),i=new Array(a=Math.ceil(e-t+1));++c=0?(i>=rt?10:i>=at?5:i>=it?2:1)*Math.pow(10,a):-Math.pow(10,-a)/(i>=rt?10:i>=at?5:i>=it?2:1)}var st=function(t,e,n){if(null==n&&(n=J),r=t.length){if((e=+e)<=0||r<2)return+n(t[0],0,t);if(e>=1)return+n(t[r-1],r-1,t);var r,a=(r-1)*e,i=Math.floor(a),o=+n(t[i],i,t);return o+(+n(t[i+1],i+1,t)-o)*(a-i)}},ft=function(t,e){var n,r,a=t.length,i=-1;if(null==e){for(;++i=n)for(r=n;++ir&&(r=n)}else for(;++i=n)for(r=n;++ir&&(r=n);return r},lt=function(t,e){var n,r=t.length,a=r,i=-1,o=0;if(null==e)for(;++i=n)for(r=n;++in&&(r=n)}else for(;++i=n)for(r=n;++in&&(r=n);return r},dt=function(t,e){var n,r=t.length,a=-1,i=0;if(null==e)for(;++a1);return t+n*i*Math.sqrt(-2*Math.log(a)/a)}}return n.source=t,n}(function(){return Math.random()});function gt(){}function mt(t,e){var n=new gt;if(t instanceof gt)t.each(function(t,e){n.set(e,t)});else if(Array.isArray(t)){var r,a=-1,i=t.length;if(null==e)for(;++a=r.length)return null!=t&&n.sort(t),null!=e?e(n):n;for(var s,f,l,u=-1,h=n.length,d=r[a++],b=mt(),p=o();++ur.length)return n;var o,c=a[i-1];return null!=e&&i>=r.length?o=n.entries():(o=[],n.each(function(e,n){o.push({key:n,values:t(e,i)})})),null!=c?o.sort(function(t,e){return c(t.key,e.key)}):o}(i(t,0,wt,_t),0)},key:function(t){return r.push(t),n},sortKeys:function(t){return a[r.length-1]=t,n},sortValues:function(e){return t=e,n},rollup:function(t){return e=t,n}}};function vt(){return{}}function xt(t,e,n){t[e]=n}function wt(){return mt()}function _t(t,e,n){t.set(e,n)}var Mt=Array.prototype,St=Mt.map,Tt=Mt.slice,Nt={name:"implicit"};function Et(){var t,e,n=function t(e){var n=mt(),r=[],a=Nt;function i(t){var i=t+"",o=n.get(i);if(!o){if(a!==Nt)return a;n.set(i,o=r.push(t))}return e[(o-1)%e.length]}return e=null==e?[]:Tt.call(e),i.domain=function(t){if(!arguments.length)return r.slice();r=[],n=mt();for(var e,a,o=-1,c=t.length;++o>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):(e=It.exec(t))?Ht(parseInt(e[1],16)):(e=Ut.exec(t))?new qt(e[1],e[2],e[3],1):(e=zt.exec(t))?new qt(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Yt.exec(t))?Ot(e[1],e[2],e[3],e[4]):(e=Bt.exec(t))?Ot(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=jt.exec(t))?Zt(e[1],e[2]/100,e[3]/100,1):(e=Ft.exec(t))?Zt(e[1],e[2]/100,e[3]/100,e[4]):Gt.hasOwnProperty(t)?Ht(Gt[t]):"transparent"===t?new qt(NaN,NaN,NaN,0):null}function Ht(t){return new qt(t>>16&255,t>>8&255,255&t,1)}function Ot(t,e,n,r){return r<=0&&(t=e=n=NaN),new qt(t,e,n,r)}function Rt(t){return t instanceof Ct||(t=Vt(t)),t?new qt((t=t.rgb()).r,t.g,t.b,t.opacity):new qt}function Xt(t,e,n,r){return 1===arguments.length?Rt(t):new qt(t,e,n,null==r?1:r)}function qt(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function Wt(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function Zt(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new Kt(t,e,n,r)}function Kt(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function Qt(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}At(Ct,Vt,{displayable:function(){return this.rgb().displayable()},hex:function(){return this.rgb().hex()},toString:function(){return this.rgb()+""}}),At(qt,Xt,kt(Ct,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new qt(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new qt(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},hex:function(){return"#"+Wt(this.r)+Wt(this.g)+Wt(this.b)},toString:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}})),At(Kt,function(t,e,n,r){return 1===arguments.length?function(t){if(t instanceof Kt)return new Kt(t.h,t.s,t.l,t.opacity);if(t instanceof Ct||(t=Vt(t)),!t)return new Kt;if(t instanceof Kt)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,a=Math.min(e,n,r),i=Math.max(e,n,r),o=NaN,c=i-a,s=(i+a)/2;return c?(o=e===i?(n-r)/c+6*(n0&&s<1?0:o,new Kt(o,c,s,t.opacity)}(t):new Kt(t,e,n,null==r?1:r)},kt(Ct,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Kt(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Kt(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,a=2*n-r;return new qt(Qt(t>=240?t-240:t+120,a,r),Qt(t,a,r),Qt(t<120?t+240:t-120,a,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var Jt=Math.PI/180,te=180/Math.PI,ee=.96422,ne=1,re=.82521,ae=4/29,ie=6/29,oe=3*ie*ie,ce=ie*ie*ie;function se(t){if(t instanceof fe)return new fe(t.l,t.a,t.b,t.opacity);if(t instanceof be){if(isNaN(t.h))return new fe(t.l,0,0,t.opacity);var e=t.h*Jt;return new fe(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}t instanceof qt||(t=Rt(t));var n,r,a=de(t.r),i=de(t.g),o=de(t.b),c=le((.2225045*a+.7168786*i+.0606169*o)/ne);return a===i&&i===o?n=r=c:(n=le((.4360747*a+.3850649*i+.1430804*o)/ee),r=le((.0139322*a+.0971045*i+.7141733*o)/re)),new fe(116*c-16,500*(n-c),200*(c-r),t.opacity)}function fe(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}function le(t){return t>ce?Math.pow(t,1/3):t/oe+ae}function ue(t){return t>ie?t*t*t:oe*(t-ae)}function he(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function de(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function be(t,e,n,r){this.h=+t,this.c=+e,this.l=+n,this.opacity=+r}At(fe,function(t,e,n,r){return 1===arguments.length?se(t):new fe(t,e,n,null==r?1:r)},kt(Ct,{brighter:function(t){return new fe(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new fe(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return new qt(he(3.1338561*(e=ee*ue(e))-1.6168667*(t=ne*ue(t))-.4906146*(n=re*ue(n))),he(-.9787684*e+1.9161415*t+.033454*n),he(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}})),At(be,function(t,e,n,r){return 1===arguments.length?function(t){if(t instanceof be)return new be(t.h,t.c,t.l,t.opacity);if(t instanceof fe||(t=se(t)),0===t.a&&0===t.b)return new be(NaN,0,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*te;return new be(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}(t):new be(t,e,n,null==r?1:r)},kt(Ct,{brighter:function(t){return new be(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker:function(t){return new be(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb:function(){return se(this).rgb()}}));var pe=-.14861,ge=1.78277,me=-.29227,ye=-.90649,ve=1.97294,xe=ve*ye,we=ve*ge,_e=ge*me-ye*pe;function Me(t,e,n,r){return 1===arguments.length?function(t){if(t instanceof Se)return new Se(t.h,t.s,t.l,t.opacity);t instanceof qt||(t=Rt(t));var e=t.r/255,n=t.g/255,r=t.b/255,a=(_e*r+xe*e-we*n)/(_e+xe-we),i=r-a,o=(ve*(n-a)-me*i)/ye,c=Math.sqrt(o*o+i*i)/(ve*a*(1-a)),s=c?Math.atan2(o,i)*te-120:NaN;return new Se(s<0?s+360:s,c,a,t.opacity)}(t):new Se(t,e,n,null==r?1:r)}function Se(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function Te(t,e,n,r,a){var i=t*t,o=i*t;return((1-3*t+3*i-o)*e+(4-6*i+3*o)*n+(1+3*t+3*i-3*o)*r+o*a)/6}At(Se,Me,kt(Ct,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Se(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Se(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*Jt,e=+this.l,n=isNaN(this.s)?0:this.s*e*(1-e),r=Math.cos(t),a=Math.sin(t);return new qt(255*(e+n*(pe*r+ge*a)),255*(e+n*(me*r+ye*a)),255*(e+n*(ve*r)),this.opacity)}}));var Ne=function(t){return function(){return t}};function Ee(t,e){return function(n){return t+n*e}}function Ae(t){return 1==(t=+t)?ke:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):Ne(isNaN(e)?n:e)}}function ke(t,e){var n=e-t;return n?Ee(t,n):Ne(isNaN(t)?e:t)}var Ce=function t(e){var n=Ae(e);function r(t,e){var r=n((t=Xt(t)).r,(e=Xt(e)).r),a=n(t.g,e.g),i=n(t.b,e.b),o=ke(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=a(e),t.b=i(e),t.opacity=o(e),t+""}}return r.gamma=t,r}(1);function $e(t){return function(e){var n,r,a=e.length,i=new Array(a),o=new Array(a),c=new Array(a);for(n=0;n=1?(n=1,e-1):Math.floor(n*e),a=t[r],i=t[r+1],o=r>0?t[r-1]:2*a-i,c=ri&&(a=e.slice(i,a),c[o]?c[o]+=a:c[++o]=a),(n=n[0])===(r=r[0])?c[o]?c[o]+=r:c[++o]=r:(c[++o]=null,s.push({i:o,x:De(n,r)})),i=Ie.lastIndex;return i180?e+=360:e-t>180&&(t+=360),i.push({i:n.push(a(n)+"rotate(",null,r)-2,x:De(t,e)})):e&&n.push(a(n)+"rotate("+e+r)}(i.rotate,o.rotate,c,s),function(t,e,n,i){t!==e?i.push({i:n.push(a(n)+"skewX(",null,r)-2,x:De(t,e)}):e&&n.push(a(n)+"skewX("+e+r)}(i.skewX,o.skewX,c,s),function(t,e,n,r,i,o){if(t!==n||e!==r){var c=i.push(a(i)+"scale(",null,",",null,")");o.push({i:c-4,x:De(t,n)},{i:c-2,x:De(e,r)})}else 1===n&&1===r||i.push(a(i)+"scale("+n+","+r+")")}(i.scaleX,i.scaleY,o.scaleX,o.scaleY,c,s),i=o=null,function(t){for(var e,n=-1,r=s.length;++n180||n<-180?n-360*Math.round(n/360):n):Ne(isNaN(t)?e:t)});var Ze=We(ke),Ke=function(t){return function(){return t}},Qe=function(t){return+t},Je=[0,1];function tn(t,e){return(e-=t=+t)?function(n){return(n-t)/e}:Ke(e)}function en(t,e,n,r){var a=t[0],i=t[1],o=e[0],c=e[1];return i1?r[0]+r.slice(2):r,+t.slice(n+1)]},an=function(t){return(t=rn(Math.abs(t)))?t[1]:NaN},on=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function cn(t){return new sn(t)}function sn(t){if(!(e=on.exec(t)))throw new Error("invalid format: "+t);var e;this.fill=e[1]||" ",this.align=e[2]||">",this.sign=e[3]||"-",this.symbol=e[4]||"",this.zero=!!e[5],this.width=e[6]&&+e[6],this.comma=!!e[7],this.precision=e[8]&&+e[8].slice(1),this.trim=!!e[9],this.type=e[10]||""}cn.prototype=sn.prototype,sn.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(null==this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(null==this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var fn,ln,un,hn,dn=function(t){t:for(var e,n=t.length,r=1,a=-1;r0){if(!+t[r])break t;a=0}}return a>0?t.slice(0,a)+t.slice(e+1):t},bn=function(t,e){var n=rn(t,e);if(!n)return t+"";var r=n[0],a=n[1];return a<0?"0."+new Array(-a).join("0")+r:r.length>a+1?r.slice(0,a+1)+"."+r.slice(a+1):r+new Array(a-r.length+2).join("0")},pn={"%":function(t,e){return(100*t).toFixed(e)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+""},d:function(t){return Math.round(t).toString(10)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},g:function(t,e){return t.toPrecision(e)},o:function(t){return Math.round(t).toString(8)},p:function(t,e){return bn(100*t,e)},r:bn,s:function(t,e){var n=rn(t,e);if(!n)return t+"";var r=n[0],a=n[1],i=a-(fn=3*Math.max(-8,Math.min(8,Math.floor(a/3))))+1,o=r.length;return i===o?r:i>o?r+new Array(i-o+1).join("0"):i>0?r.slice(0,i)+"."+r.slice(i):"0."+new Array(1-i).join("0")+rn(t,Math.max(0,e+i-1))[0]},X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}},gn=function(t){return t},mn=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];ln=function(t){var e,n,r=t.grouping&&t.thousands?(e=t.grouping,n=t.thousands,function(t,r){for(var a=t.length,i=[],o=0,c=e[0],s=0;a>0&&c>0&&(s+c+1>r&&(c=Math.max(1,r-s)),i.push(t.substring(a-=c,a+c)),!((s+=c+1)>r));)c=e[o=(o+1)%e.length];return i.reverse().join(n)}):gn,a=t.currency,i=t.decimal,o=t.numerals?function(t){return function(e){return e.replace(/[0-9]/g,function(e){return t[+e]})}}(t.numerals):gn,c=t.percent||"%";function s(t){var e=(t=cn(t)).fill,n=t.align,s=t.sign,f=t.symbol,l=t.zero,u=t.width,h=t.comma,d=t.precision,b=t.trim,p=t.type;"n"===p?(h=!0,p="g"):pn[p]||(null==d&&(d=12),b=!0,p="g"),(l||"0"===e&&"="===n)&&(l=!0,e="0",n="=");var g="$"===f?a[0]:"#"===f&&/[boxX]/.test(p)?"0"+p.toLowerCase():"",m="$"===f?a[1]:/[%p]/.test(p)?c:"",y=pn[p],v=/[defgprs%]/.test(p);function x(t){var a,c,f,x=g,w=m;if("c"===p)w=y(t)+w,t="";else{var _=(t=+t)<0;if(t=y(Math.abs(t),d),b&&(t=dn(t)),_&&0==+t&&(_=!1),x=(_?"("===s?s:"-":"-"===s||"("===s?"":s)+x,w=("s"===p?mn[8+fn/3]:"")+w+(_&&"("===s?")":""),v)for(a=-1,c=t.length;++a(f=t.charCodeAt(a))||f>57){w=(46===f?i+t.slice(a+1):t.slice(a))+w,t=t.slice(0,a);break}}h&&!l&&(t=r(t,1/0));var M=x.length+t.length+w.length,S=M>1)+x+t+w+S.slice(M);break;default:t=S+x+t+w}return o(t)}return d=null==d?6:/[gprs]/.test(p)?Math.max(1,Math.min(21,d)):Math.max(0,Math.min(20,d)),x.toString=function(){return t+""},x}return{format:s,formatPrefix:function(t,e){var n=s(((t=cn(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(an(e)/3))),a=Math.pow(10,-r),i=mn[8+r/3];return function(t){return n(a*t)+i}}}}({decimal:".",thousands:",",grouping:[3],currency:["$",""]}),un=ln.format,hn=ln.formatPrefix;var yn=function(t,e,n){var r,a=t[0],i=t[t.length-1],o=function(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),a=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),i=r/a;return i>=rt?a*=10:i>=at?a*=5:i>=it&&(a*=2),e0?r=ct(c=Math.floor(c/r)*r,s=Math.ceil(s/r)*r,n):r<0&&(r=ct(c=Math.ceil(c*r)/r,s=Math.floor(s*r)/r,n)),r>0?(a[i]=Math.floor(c/r)*r,a[o]=Math.ceil(s/r)*r,e(a)):r<0&&(a[i]=Math.ceil(c*r)/r,a[o]=Math.floor(s*r)/r,e(a)),t},t}function xn(){var t=function(t,e){var n,r,a,i=Je,o=Je,c=Fe,s=!1;function f(){return n=Math.min(i.length,o.length)>2?nn:en,r=a=null,l}function l(e){return(r||(r=n(i,o,s?function(t){return function(e,n){var r=t(e=+e,n=+n);return function(t){return t<=e?0:t>=n?1:r(t)}}}(t):t,c)))(+e)}return l.invert=function(t){return(a||(a=n(o,i,tn,s?function(t){return function(e,n){var r=t(e=+e,n=+n);return function(t){return t<=0?e:t>=1?n:r(t)}}}(e):e)))(+t)},l.domain=function(t){return arguments.length?(i=St.call(t,Qe),f()):i.slice()},l.range=function(t){return arguments.length?(o=Tt.call(t),f()):o.slice()},l.rangeRound=function(t){return o=Tt.call(t),c=Ge,f()},l.clamp=function(t){return arguments.length?(s=!!t,f()):s},l.interpolate=function(t){return arguments.length?(c=t,f()):c},f()}(tn,De);return t.copy=function(){return e=t,xn().domain(e.domain()).range(e.range()).interpolate(e.interpolate()).clamp(e.clamp());var e},vn(t)}var wn=new Date,_n=new Date;function Mn(t,e,n,r){function a(e){return t(e=new Date(+e)),e}return a.floor=a,a.ceil=function(n){return t(n=new Date(n-1)),e(n,1),t(n),n},a.round=function(t){var e=a(t),n=a.ceil(t);return t-e0))return c;do{c.push(o=new Date(+n)),e(n,i),t(n)}while(o=e)for(;t(e),!n(e);)e.setTime(e-1)},function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););})},n&&(a.count=function(e,r){return wn.setTime(+e),_n.setTime(+r),t(wn),t(_n),Math.floor(n(wn,_n))},a.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?a.filter(r?function(e){return r(e)%t==0}:function(e){return a.count(0,e)%t==0}):a:null}),a}var Sn=Mn(function(){},function(t,e){t.setTime(+t+e)},function(t,e){return e-t});Sn.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?Mn(function(e){e.setTime(Math.floor(e/t)*t)},function(e,n){e.setTime(+e+n*t)},function(e,n){return(n-e)/t}):Sn:null};var Tn=6e4,Nn=6048e5,En=(Mn(function(t){t.setTime(1e3*Math.floor(t/1e3))},function(t,e){t.setTime(+t+1e3*e)},function(t,e){return(e-t)/1e3},function(t){return t.getUTCSeconds()}),Mn(function(t){t.setTime(Math.floor(t/Tn)*Tn)},function(t,e){t.setTime(+t+e*Tn)},function(t,e){return(e-t)/Tn},function(t){return t.getMinutes()}),Mn(function(t){var e=t.getTimezoneOffset()*Tn%36e5;e<0&&(e+=36e5),t.setTime(36e5*Math.floor((+t-e)/36e5)+e)},function(t,e){t.setTime(+t+36e5*e)},function(t,e){return(e-t)/36e5},function(t){return t.getHours()}),Mn(function(t){t.setHours(0,0,0,0)},function(t,e){t.setDate(t.getDate()+e)},function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*Tn)/864e5},function(t){return t.getDate()-1}));function An(t){return Mn(function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},function(t,e){t.setDate(t.getDate()+7*e)},function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*Tn)/Nn})}var kn=An(0),Cn=An(1),$n=(An(2),An(3),An(4)),Ln=(An(5),An(6),Mn(function(t){t.setDate(1),t.setHours(0,0,0,0)},function(t,e){t.setMonth(t.getMonth()+e)},function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())},function(t){return t.getMonth()}),Mn(function(t){t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,e){t.setFullYear(t.getFullYear()+e)},function(t,e){return e.getFullYear()-t.getFullYear()},function(t){return t.getFullYear()}));Ln.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Mn(function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,n){e.setFullYear(e.getFullYear()+n*t)}):null};Mn(function(t){t.setUTCSeconds(0,0)},function(t,e){t.setTime(+t+e*Tn)},function(t,e){return(e-t)/Tn},function(t){return t.getUTCMinutes()}),Mn(function(t){t.setUTCMinutes(0,0,0)},function(t,e){t.setTime(+t+36e5*e)},function(t,e){return(e-t)/36e5},function(t){return t.getUTCHours()});var Dn=Mn(function(t){t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCDate(t.getUTCDate()+e)},function(t,e){return(e-t)/864e5},function(t){return t.getUTCDate()-1});function Pn(t){return Mn(function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},function(t,e){t.setUTCDate(t.getUTCDate()+7*e)},function(t,e){return(e-t)/Nn})}var In=Pn(0),Un=Pn(1),zn=(Pn(2),Pn(3),Pn(4)),Yn=(Pn(5),Pn(6),Mn(function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCMonth(t.getUTCMonth()+e)},function(t,e){return e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())},function(t){return t.getUTCMonth()}),Mn(function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)},function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()},function(t){return t.getUTCFullYear()}));function Bn(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function jn(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Fn(t){return{y:t,m:0,d:1,H:0,M:0,S:0,L:0}}Yn.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Mn(function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)}):null};var Gn,Vn,Hn,On={"-":"",_:" ",0:"0"},Rn=/^\s*\d+/,Xn=/^%/,qn=/[\\^$*+?|[\]().{}]/g;function Wn(t,e,n){var r=t<0?"-":"",a=(r?-t:t)+"",i=a.length;return r+(i68?1900:2e3),n+r[0].length):-1}function or(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function cr(t,e,n){var r=Rn.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function sr(t,e,n){var r=Rn.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function fr(t,e,n){var r=Rn.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function lr(t,e,n){var r=Rn.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function ur(t,e,n){var r=Rn.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function hr(t,e,n){var r=Rn.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function dr(t,e,n){var r=Rn.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function br(t,e,n){var r=Rn.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function pr(t,e,n){var r=Xn.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function gr(t,e,n){var r=Rn.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function mr(t,e,n){var r=Rn.exec(e.slice(n));return r?(t.Q=1e3*+r[0],n+r[0].length):-1}function yr(t,e){return Wn(t.getDate(),e,2)}function vr(t,e){return Wn(t.getHours(),e,2)}function xr(t,e){return Wn(t.getHours()%12||12,e,2)}function wr(t,e){return Wn(1+En.count(Ln(t),t),e,3)}function _r(t,e){return Wn(t.getMilliseconds(),e,3)}function Mr(t,e){return _r(t,e)+"000"}function Sr(t,e){return Wn(t.getMonth()+1,e,2)}function Tr(t,e){return Wn(t.getMinutes(),e,2)}function Nr(t,e){return Wn(t.getSeconds(),e,2)}function Er(t){var e=t.getDay();return 0===e?7:e}function Ar(t,e){return Wn(kn.count(Ln(t),t),e,2)}function kr(t,e){var n=t.getDay();return t=n>=4||0===n?$n(t):$n.ceil(t),Wn($n.count(Ln(t),t)+(4===Ln(t).getDay()),e,2)}function Cr(t){return t.getDay()}function $r(t,e){return Wn(Cn.count(Ln(t),t),e,2)}function Lr(t,e){return Wn(t.getFullYear()%100,e,2)}function Dr(t,e){return Wn(t.getFullYear()%1e4,e,4)}function Pr(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Wn(e/60|0,"0",2)+Wn(e%60,"0",2)}function Ir(t,e){return Wn(t.getUTCDate(),e,2)}function Ur(t,e){return Wn(t.getUTCHours(),e,2)}function zr(t,e){return Wn(t.getUTCHours()%12||12,e,2)}function Yr(t,e){return Wn(1+Dn.count(Yn(t),t),e,3)}function Br(t,e){return Wn(t.getUTCMilliseconds(),e,3)}function jr(t,e){return Br(t,e)+"000"}function Fr(t,e){return Wn(t.getUTCMonth()+1,e,2)}function Gr(t,e){return Wn(t.getUTCMinutes(),e,2)}function Vr(t,e){return Wn(t.getUTCSeconds(),e,2)}function Hr(t){var e=t.getUTCDay();return 0===e?7:e}function Or(t,e){return Wn(In.count(Yn(t),t),e,2)}function Rr(t,e){var n=t.getUTCDay();return t=n>=4||0===n?zn(t):zn.ceil(t),Wn(zn.count(Yn(t),t)+(4===Yn(t).getUTCDay()),e,2)}function Xr(t){return t.getUTCDay()}function qr(t,e){return Wn(Un.count(Yn(t),t),e,2)}function Wr(t,e){return Wn(t.getUTCFullYear()%100,e,2)}function Zr(t,e){return Wn(t.getUTCFullYear()%1e4,e,4)}function Kr(){return"+0000"}function Qr(){return"%"}function Jr(t){return+t}function ta(t){return Math.floor(+t/1e3)}!function(t){Gn=function(t){var e=t.dateTime,n=t.date,r=t.time,a=t.periods,i=t.days,o=t.shortDays,c=t.months,s=t.shortMonths,f=Kn(a),l=Qn(a),u=Kn(i),h=Qn(i),d=Kn(o),b=Qn(o),p=Kn(c),g=Qn(c),m=Kn(s),y=Qn(s),v={a:function(t){return o[t.getDay()]},A:function(t){return i[t.getDay()]},b:function(t){return s[t.getMonth()]},B:function(t){return c[t.getMonth()]},c:null,d:yr,e:yr,f:Mr,H:vr,I:xr,j:wr,L:_r,m:Sr,M:Tr,p:function(t){return a[+(t.getHours()>=12)]},Q:Jr,s:ta,S:Nr,u:Er,U:Ar,V:kr,w:Cr,W:$r,x:null,X:null,y:Lr,Y:Dr,Z:Pr,"%":Qr},x={a:function(t){return o[t.getUTCDay()]},A:function(t){return i[t.getUTCDay()]},b:function(t){return s[t.getUTCMonth()]},B:function(t){return c[t.getUTCMonth()]},c:null,d:Ir,e:Ir,f:jr,H:Ur,I:zr,j:Yr,L:Br,m:Fr,M:Gr,p:function(t){return a[+(t.getUTCHours()>=12)]},Q:Jr,s:ta,S:Vr,u:Hr,U:Or,V:Rr,w:Xr,W:qr,x:null,X:null,y:Wr,Y:Zr,Z:Kr,"%":Qr},w={a:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=b[r[0].toLowerCase()],n+r[0].length):-1},A:function(t,e,n){var r=u.exec(e.slice(n));return r?(t.w=h[r[0].toLowerCase()],n+r[0].length):-1},b:function(t,e,n){var r=m.exec(e.slice(n));return r?(t.m=y[r[0].toLowerCase()],n+r[0].length):-1},B:function(t,e,n){var r=p.exec(e.slice(n));return r?(t.m=g[r[0].toLowerCase()],n+r[0].length):-1},c:function(t,n,r){return S(t,e,n,r)},d:sr,e:sr,f:br,H:lr,I:lr,j:fr,L:dr,m:cr,M:ur,p:function(t,e,n){var r=f.exec(e.slice(n));return r?(t.p=l[r[0].toLowerCase()],n+r[0].length):-1},Q:gr,s:mr,S:hr,u:tr,U:er,V:nr,w:Jn,W:rr,x:function(t,e,r){return S(t,n,e,r)},X:function(t,e,n){return S(t,r,e,n)},y:ir,Y:ar,Z:or,"%":pr};function _(t,e){return function(n){var r,a,i,o=[],c=-1,s=0,f=t.length;for(n instanceof Date||(n=new Date(+n));++c53)return null;"w"in i||(i.w=1),"Z"in i?(r=(a=(r=jn(Fn(i.y))).getUTCDay())>4||0===a?Un.ceil(r):Un(r),r=Dn.offset(r,7*(i.V-1)),i.y=r.getUTCFullYear(),i.m=r.getUTCMonth(),i.d=r.getUTCDate()+(i.w+6)%7):(r=(a=(r=e(Fn(i.y))).getDay())>4||0===a?Cn.ceil(r):Cn(r),r=En.offset(r,7*(i.V-1)),i.y=r.getFullYear(),i.m=r.getMonth(),i.d=r.getDate()+(i.w+6)%7)}else("W"in i||"U"in i)&&("w"in i||(i.w="u"in i?i.u%7:"W"in i?1:0),a="Z"in i?jn(Fn(i.y)).getUTCDay():e(Fn(i.y)).getDay(),i.m=0,i.d="W"in i?(i.w+6)%7+7*i.W-(a+5)%7:i.w+7*i.U-(a+6)%7);return"Z"in i?(i.H+=i.Z/100|0,i.M+=i.Z%100,jn(i)):e(i)}}function S(t,e,n,r){for(var a,i,o=0,c=e.length,s=n.length;o=s)return-1;if(37===(a=e.charCodeAt(o++))){if(a=e.charAt(o++),!(i=w[a in On?e.charAt(o++):a])||(r=i(t,n,r))<0)return-1}else if(a!=n.charCodeAt(r++))return-1}return r}return v.x=_(n,v),v.X=_(r,v),v.c=_(e,v),x.x=_(n,x),x.X=_(r,x),x.c=_(e,x),{format:function(t){var e=_(t+="",v);return e.toString=function(){return t},e},parse:function(t){var e=M(t+="",Bn);return e.toString=function(){return t},e},utcFormat:function(t){var e=_(t+="",x);return e.toString=function(){return t},e},utcParse:function(t){var e=M(t,jn);return e.toString=function(){return t},e}}}(t),Vn=Gn.utcFormat,Hn=Gn.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});Date.prototype.toISOString||Vn("%Y-%m-%dT%H:%M:%S.%LZ");+new Date("2000-01-01T00:00:00.000Z")||Hn("%Y-%m-%dT%H:%M:%S.%LZ");var ea={value:function(){}};function na(){for(var t,e=0,n=arguments.length,r={};e=0&&(e=t.slice(n+1),t=t.slice(0,n)),t&&!r.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}})),o=-1,c=i.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++o0)for(var n,r,a=new Array(n),i=0;i=0&&e._call.call(null,t),e=e._next;--sa}()}finally{sa=0,function(){var t,e,n=oa,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:oa=e);ca=t,Ma(r)}(),da=0}}function _a(){var t=pa.now(),e=t-ha;e>ua&&(ba-=e,ha=t)}function Ma(t){sa||(fa&&(fa=clearTimeout(fa)),t-da>24?(t<1/0&&(fa=setTimeout(wa,t-pa.now()-ba)),la&&(la=clearInterval(la))):(la||(ha=pa.now(),la=setInterval(_a,ua)),sa=1,ga(wa)))}va.prototype=xa.prototype={constructor:va,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?ma():+n)+(null==e?0:+e),this._next||ca===this||(ca?ca._next=this:oa=this,ca=this),this._call=t,this._time=n,Ma()},stop:function(){this._call&&(this._call=null,this._time=1/0,Ma())}};var Sa=function(t,e,n){var r=new va;return e=null==e?0:+e,r.restart(function(n){r.stop(),t(n+e)},e,n),r},Ta=na("start","end","interrupt"),Na=[],Ea=0,Aa=1,ka=2,Ca=3,$a=4,La=5,Da=6,Pa=function(t,e,n,r,a,i){var o=t.__transition;if(o){if(n in o)return}else t.__transition={};!function(t,e,n){var r,a=t.__transition;function i(s){var f,l,u,h;if(n.state!==Aa)return c();for(f in a)if((h=a[f]).name===n.name){if(h.state===Ca)return Sa(i);h.state===$a?(h.state=Da,h.timer.stop(),h.on.call("interrupt",t,t.__data__,h.index,h.group),delete a[f]):+fEa)throw new Error("too late; already scheduled");return n}function Ua(t,e){var n=za(t,e);if(n.state>ka)throw new Error("too late; already started");return n}function za(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}var Ya=function(t,e){var n,r,a,i=t.__transition,o=!0;if(i){for(a in e=null==e?null:e+"",i)(n=i[a]).name===e?(r=n.state>ka&&n.state=0&&(t=t.slice(0,e)),!t||"start"===t})}(e)?Ia:Ua;return function(){var o=i(this,t),c=o.on;c!==r&&(a=(r=c).copy()).on(e,n),o.on=a}}(n,t,e))},attr:function(t,e){var n=r(t),a="transform"===n?qe:ja;return this.attrTween(t,"function"==typeof e?(n.local?function(t,e,n){var r,a,i;return function(){var o,c=n(this);if(null!=c)return(o=this.getAttributeNS(t.space,t.local))===c?null:o===r&&c===a?i:i=e(r=o,a=c);this.removeAttributeNS(t.space,t.local)}}:function(t,e,n){var r,a,i;return function(){var o,c=n(this);if(null!=c)return(o=this.getAttribute(t))===c?null:o===r&&c===a?i:i=e(r=o,a=c);this.removeAttribute(t)}})(n,a,Ba(this,"attr."+t,e)):null==e?(n.local?function(t){return function(){this.removeAttributeNS(t.space,t.local)}}:function(t){return function(){this.removeAttribute(t)}})(n):(n.local?function(t,e,n){var r,a;return function(){var i=this.getAttributeNS(t.space,t.local);return i===n?null:i===r?a:a=e(r=i,n)}}:function(t,e,n){var r,a;return function(){var i=this.getAttribute(t);return i===n?null:i===r?a:a=e(r=i,n)}})(n,a,e+""))},attrTween:function(t,e){var n="attr."+t;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==e)return this.tween(n,null);if("function"!=typeof e)throw new Error;var a=r(t);return this.tween(n,(a.local?function(t,e){function n(){var n=this,r=e.apply(n,arguments);return r&&function(e){n.setAttributeNS(t.space,t.local,r(e))}}return n._value=e,n}:function(t,e){function n(){var n=this,r=e.apply(n,arguments);return r&&function(e){n.setAttribute(t,r(e))}}return n._value=e,n})(a,e))},style:function(t,e,n){var r="transform"==(t+="")?Xe:ja;return null==e?this.styleTween(t,function(t,e){var n,r,a;return function(){var i=x(this,t),o=(this.style.removeProperty(t),x(this,t));return i===o?null:i===n&&o===r?a:a=e(n=i,r=o)}}(t,r)).on("end.style."+t,function(t){return function(){this.style.removeProperty(t)}}(t)):this.styleTween(t,"function"==typeof e?function(t,e,n){var r,a,i;return function(){var o=x(this,t),c=n(this);return null==c&&(this.style.removeProperty(t),c=x(this,t)),o===c?null:o===r&&c===a?i:i=e(r=o,a=c)}}(t,r,Ba(this,"style."+t,e)):function(t,e,n){var r,a;return function(){var i=x(this,t);return i===n?null:i===r?a:a=e(r=i,n)}}(t,r,e+""),n)},styleTween:function(t,e,n){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==e)return this.tween(r,null);if("function"!=typeof e)throw new Error;return this.tween(r,function(t,e,n){function r(){var r=this,a=e.apply(r,arguments);return a&&function(e){r.style.setProperty(t,a(e),n)}}return r._value=e,r}(t,e,null==n?"":n))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var e=t(this);this.textContent=null==e?"":e}}(Ba(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},remove:function(){return this.on("end.remove",(t=this._id,function(){var e=this.parentNode;for(var n in this.__transition)if(+n!==t)return;e&&e.removeChild(this)}));var t},tween:function(t,e){var n=this._id;if(t+="",arguments.length<2){for(var r,a=za(this.node(),n).tween,i=0,o=a.length;i").addClass(r).appendTo(`#${t}`),this.buttons={},this.tooltip=e}createDownloadSvgButton(t,e,n,r,a="fa-download"){this.createButton(t,a);O(`#${t}`).on("click",()=>{this.downloadSvg(e,n,r)}).on("mouseover",()=>{this.tooltip.show("Download")}).on("mouseout",()=>{this.tooltip.hide()})}createResetButton(t,e,n="fa-expand-arrows-alt"){this.createButton(t,n);O(`#${t}`).on("click",e).on("mouseover",()=>{this.tooltip.show("Reset the scales")}).on("mouseout",()=>{this.tooltip.hide()})}createButton(t,e="fa-download"){const n=$("").attr("id",t).addClass("btn btn-default").appendTo(this.bar);return $("").addClass(`fa ${e}`).appendTo(n),this.buttons[t]=n,n}attachTooltip(t){this.tooltip=t}downloadSvg(t,e,n){let r=$($($(`${"#"+t}`))[0]),a=r.clone().attr("version","1.1").attr("xmlns","http://www.w3.org/2000/svg"),i=function(t){for(var e="",n=document.styleSheets,r=0;r0&&(e+=o.selectorText+" { "+o.style.cssText+" }\n")}}}catch(t){if("SecurityError"!==t.name)throw t;continue}var s=document.createElement("style");return s.setAttribute("type","text/css"),s.innerHTML="",s}(r.get());a.prepend(i),$("#"+n).html("").hide();let o=$(`#${n}`).append(a).html(),c=new Blob([o],{type:"image/svg+xml"});saveAs(c,e),$(`#${n}`).html("").hide()}}class fi{constructor(t,e=!1,n=30,r=-40,a=100){this.id=t,this.verbose=e,this.offsetX=n,this.offsetY=r,this.duration=a}show(t){this.verbose&&console.log(t),this.edit(t),this.move(),O("#"+this.id).style("display","inline").transition().duration(this.duration).style("opacity",1)}hide(){O("#"+this.id).transition().duration(this.duration).style("opacity",0),this.edit("")}move(t=U.pageX,e=U.pageY){this.verbose&&(console.log(t),console.log(e)),t+=this.offsetX,e=e+this.offsetY<0?10:e+this.offsetY;O("#"+this.id).style("left",`${t}px`).style("top",`${e}px`)}edit(t){O("#"+this.id).html(t)}}class li{constructor(t,e=!0,n=10,r="YlGnBu",a=2,i="heatmapTooltip"){this.data=t,this.useLog=e,this.logBase=n,this.nullColor="#e6e6e6",this.colorScale=void 0,this.xList=void 0,this.yList=void 0,this.xScale=void 0,this.yScale=void 0,this.r=a,this.colorScheme=r,0==$(`#${i}`).length&&$("
").attr("id",i).appendTo($("body")),this.tooltip=new fi(i),O(`#${i}`).classed("heatmap-tooltip",!0),this.toolbar=void 0}createToolbar(t,e){return this.toolbar=new si(t,e),this.toolbar}drawColorLegend(t,e={x:0,y:0},n=5){!function(t,e,n,r,a,i=10,o=10,c={h:10,w:40},s="h"){let f=[...Array(i+1).keys()],l=n.domain()[1]/i;const u=f.map(t=>t*l),h=e.append("g").attr("transform",`translate(${r.x}, ${r.y})`).selectAll(".legend").data(u).enter().append("g").classed("legend",!0);"h"==s?(e.append("text").attr("class","color-legend").text(t).attr("x",-10).attr("text-anchor","end").attr("y",c.h).attr("transform",`translate(${r.x}, ${r.y})`),h.append("rect").attr("x",(t,e)=>c.w*e).attr("y",5).attr("width",c.w).attr("height",c.h).style("fill",n),h.append("text").attr("class","color-legend").text(t=>a?Math.pow(o,t).toPrecision(2):t.toPrecision(2)).attr("x",(t,e)=>c.w*e).attr("y",0)):(e.append("text").attr("class","color-legend").text(t).attr("x",5).attr("text-anchor","start").attr("y",0).attr("transform",`translate(${r.x}, ${r.y+c.h*u.length})rotate(90)`),h.append("rect").attr("x",0).attr("y",(t,e)=>c.h*e).attr("width",c.w).attr("height",c.h).style("fill",n),h.append("text").attr("class","color-legend").text(t=>a?(Math.pow(o,t)-1).toPrecision(2):t.toPrecision(2)).attr("x",15).attr("y",(t,e)=>c.h*e+c.h/2))}(this.data[0].unit||"Value",t,this.colorScale,e,this.useLog,n,this.logBase)}redraw(t,e,n,r={w:1e3,h:1e3},a=30){this._setXList(r.w,e),this._setYList(r.h,n),this.draw(t,r,a)}log(t){return 2==this.logBase?Math.log2(Number(t+1)):Math.log10(Number(t+1))}draw(t,e={w:1e3,h:600},n=30,r=!0,a=null){if(void 0===this.xList&&this._setXList(e.w),void 0===this.yList&&this._setYList(e.h),void 0===this.colorScale){let t=this.useLog,e=this.data.map(e=>t?this.log(e.value):e.value);this.colorScale=ci(e,this.colorScheme)}const i=t.selectAll(".exp-map-xlabel").data(this.xList),o=null==a?this.yScale.range()[1]+2*this.yScale.bandwidth():this.yScale.range()[1]+a;i.attr("transform",t=>{return`translate(${this.xScale(t)+5}, ${o}) rotate(${n})`}),i.enter().append("text").attr("class",(t,e)=>`exp-map-xlabel x${e}`).attr("x",0).attr("y",0).style("text-anchor","start").style("cursor","default").attr("transform",t=>{return`translate(${this.xScale(t)+5}, ${o}) rotate(${n})`}).merge(i).text(t=>t),i.exit().remove();t.selectAll(".exp-map-ylabel").data(this.yList).enter().append("text").text(t=>t).attr("x",this.xScale.range()[1]+5).attr("y",t=>this.yScale(t)+10).attr("class",(t,e)=>`exp-map-ylabel y${e}`).style("text-anchor","start").style("cursor","default").on("click",t=>{alert(`${t} is clicked. To be implemented`)}).on("mouseover",function(t){O(this).classed("normal",!1).classed("highlighted",!0)}).on("mouseout",function(t){O(this).classed("normal",!0).classed("highlighted",!1)});const c=t.selectAll(".exp-map-cell").data(this.data,t=>t.value);c.attr("x",t=>this.xScale(t.x)).attr("y",t=>this.yScale(t.y)).attr("row",t=>`x${this.xList.indexOf(t.x)}`).attr("col",t=>`y${this.yList.indexOf(t.y)}`);const s=this;c.enter().append("rect").attr("row",t=>`x${this.xList.indexOf(t.x)}`).attr("col",t=>`y${this.yList.indexOf(t.y)}`).attr("x",t=>this.xScale(t.x)).attr("y",t=>this.yScale(t.y)).attr("rx",this.r).attr("ry",this.r).attr("class",t=>"exp-map-cell").attr("width",this.xScale.bandwidth()).attr("height",this.yScale.bandwidth()).style("fill",t=>"#eeeeee").on("mouseover",function(e){const n=O(this);s.cellMouseover(e,t,n)}).on("mouseout",function(t){O(this);s.cellMouseout()}).merge(c).style("fill",t=>r&&0==t.value?"#DDDDDD":this.useLog?this.colorScale(this.log(t.value)):this.colorScale(t.value)),c.exit().remove()}cellMouseout(t){q("*").classed("highlighted",!1),this.tooltip.hide()}cellMouseover(t,e,n){const r=n.attr("row"),a=n.attr("col");e.selectAll(".exp-map-xlabel").filter(`.${r}`).classed("highlighted",!0),e.selectAll(".exp-map-ylabel").filter(`.${a}`).classed("highlighted",!0),n.classed("highlighted",!0);const i=void 0===t.displayValue?parseFloat(t.value.toExponential()).toPrecision(4):t.displayValue;this.tooltip.show(`Column: ${t.x}
Row: ${t.y}
Value: ${i}`)}_setXList(t,e){this.xList=void 0!==e?e:yt().key(t=>t.x).entries(this.data).map(t=>t.key),this.xScale=Et().domain(this.xList).range([0,t]).padding(.05)}_setYList(t,e){this.yList=void 0!==e?e:yt().key(t=>t.y).entries(this.data).map(t=>t.key),this.yScale=Et().domain(this.yList).range([0,t]).padding(.05)}}class ui{constructor(t=window.innerWidth,e=100,n=100,r={top:50,right:250,bottom:170,left:10},a=12,i=10){this.margin=r,this.rootW=t,this.leftTreePanel={x:r.left,y:r.top+n,h:void 0,w:e-i,id:"leftTree"},this.cell={w:void 0,h:a},this.topTreePanel={x:r.left+e,y:r.top,h:n-i,w:this.rootW-(r.left+e+r.right),id:"topTree"},this.heatmapPanel={x:r.left+e,y:r.top+n,h:this.leftTreePanel.h,w:this.topTreePanel.w,id:"heatmap"},this.legendPanel={x:r.left+e,y:0,h:r.top/2,w:this.topTreePanel.w,cell:{w:60},id:"legend"}}get(){return{margin:this.margin,cell:this.cell,w:this.rootW,h:this.margin.top+this.topTreePanel.h+this.legendPanel.h+this.margin.bottom,panels:{top:this.topTreePanel,left:this.leftTreePanel,main:this.heatmapPanel,legend:this.legendPanel}}}}function hi(t){var e=0,n=t.children,r=n&&n.length;if(r)for(;--r>=0;)e+=n[r].value;else e=1;t.value=e}function di(t,e){var n,r,a,i,o,c=new mi(t),s=+t.value&&(c.value=t.value),f=[c];for(null==e&&(e=bi);n=f.pop();)if(s&&(n.value=+n.data.value),(a=e(n.data))&&(o=a.length))for(n.children=new Array(o),i=o-1;i>=0;--i)f.push(r=n.children[i]=new mi(a[i])),r.parent=n,r.depth=n.depth+1;return c.eachBefore(gi)}function bi(t){return t.children}function pi(t){t.data=t.data.data}function gi(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function mi(t){this.data=t,this.depth=this.height=0,this.parent=null}mi.prototype=di.prototype={constructor:mi,count:function(){return this.eachAfter(hi)},each:function(t){var e,n,r,a,i=this,o=[i];do{for(e=o.reverse(),o=[];i=e.pop();)if(t(i),n=i.children)for(r=0,a=n.length;r=0;--n)a.push(e[n]);return this},sum:function(t){return this.eachAfter(function(e){for(var n=+t(e.data)||0,r=e.children,a=r&&r.length;--a>=0;)n+=r[a].value;e.value=n})},sort:function(t){return this.eachBefore(function(e){e.children&&e.children.sort(t)})},path:function(t){for(var e=this,n=function(t,e){if(t===e)return t;var n=t.ancestors(),r=e.ancestors(),a=null;for(t=n.pop(),e=r.pop();t===e;)a=t,t=n.pop(),e=r.pop();return a}(e,t),r=[e];e!==n;)e=e.parent,r.push(e);for(var a=r.length;t!==n;)r.splice(a,0,t),t=t.parent;return r},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){var t=[];return this.each(function(e){t.push(e)}),t},leaves:function(){var t=[];return this.eachBefore(function(e){e.children||t.push(e)}),t},links:function(){var t=this,e=[];return t.each(function(n){n!==t&&e.push({source:n.parent,target:n})}),e},copy:function(){return di(this).eachBefore(pi)}};var yi=Array.prototype.slice,vi=function(t){return t},xi=1,wi=2,_i=3,Mi=4,Si=1e-6;function Ti(t){return"translate("+(t+.5)+",0)"}function Ni(t){return"translate(0,"+(t+.5)+")"}function Ei(){return!this.__axis}function Ai(t,e){var n=[],r=null,a=null,i=6,o=6,c=3,s=t===xi||t===Mi?-1:1,f=t===Mi||t===wi?"x":"y",l=t===xi||t===_i?Ti:Ni;function u(u){var h=null==r?e.ticks?e.ticks.apply(e,n):e.domain():r,d=null==a?e.tickFormat?e.tickFormat.apply(e,n):vi:a,b=Math.max(i,0)+c,p=e.range(),g=+p[0]+.5,m=+p[p.length-1]+.5,y=(e.bandwidth?function(t){var e=Math.max(0,t.bandwidth()-1)/2;return t.round()&&(e=Math.round(e)),function(n){return+t(n)+e}}:function(t){return function(e){return+t(e)}})(e.copy()),v=u.selection?u.selection():u,x=v.selectAll(".domain").data([null]),w=v.selectAll(".tick").data(h,e).order(),_=w.exit(),M=w.enter().append("g").attr("class","tick"),S=w.select("line"),T=w.select("text");x=x.merge(x.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),w=w.merge(M),S=S.merge(M.append("line").attr("stroke","currentColor").attr(f+"2",s*i)),T=T.merge(M.append("text").attr("fill","currentColor").attr(f,s*b).attr("dy",t===xi?"0em":t===_i?"0.71em":"0.32em")),u!==v&&(x=x.transition(u),w=w.transition(u),S=S.transition(u),T=T.transition(u),_=_.transition(u).attr("opacity",Si).attr("transform",function(t){return isFinite(t=y(t))?l(t):this.getAttribute("transform")}),M.attr("opacity",Si).attr("transform",function(t){var e=this.parentNode.__axis;return l(e&&isFinite(e=e(t))?e:y(t))})),_.remove(),x.attr("d",t===Mi||t==wi?o?"M"+s*o+","+g+"H0.5V"+m+"H"+s*o:"M0.5,"+g+"V"+m:o?"M"+g+","+s*o+"V0.5H"+m+"V"+s*o:"M"+g+",0.5H"+m),w.attr("opacity",1).attr("transform",function(t){return l(y(t))}),S.attr(f+"2",s*i),T.attr(f,s*b).text(d),v.filter(Ei).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===wi?"start":t===Mi?"end":"middle"),v.each(function(){this.__axis=y})}return u.scale=function(t){return arguments.length?(e=t,u):e},u.ticks=function(){return n=yi.call(arguments),u},u.tickArguments=function(t){return arguments.length?(n=null==t?[]:yi.call(t),u):n.slice()},u.tickValues=function(t){return arguments.length?(r=null==t?null:yi.call(t),u):r&&r.slice()},u.tickFormat=function(t){return arguments.length?(a=t,u):a},u.tickSize=function(t){return arguments.length?(i=o=+t,u):i},u.tickSizeInner=function(t){return arguments.length?(i=+t,u):i},u.tickSizeOuter=function(t){return arguments.length?(o=+t,u):o},u.tickPadding=function(t){return arguments.length?(c=+t,u):c},u}function ki(t){return Ai(_i,t)}function Ci(t){return Ai(Mi,t)}const $i=!1;class Li{constructor(t,e="h"){this.newick=t,this.orientation=e,this.postorder=[],this.root=di(function(t){for(var e=[],n={},r=t.split(/\s*(;|\(|\)|,|:)\s*/),a=0;at.branchset).sum(t=>t.branchset?0:1).sort((t,e)=>t.value-e.value||t.data.length-e.data.length),this.leaves=this.root.leaves().sort((t,e)=>t.value-e.value||W(t.data.length,e.data.length)),this.width=void 0,this.height=void 0,this.xScale=void 0,this.yScale=void 0}draw(t,e,n){this.width=e,this.height=n,this._setXScale(),this._setYScale(),"h"==this.orientation?this._drawHTree(t):this._drawVTree(t)}_drawHTree(t){const e=t=>{void 0===t.children?t.y=this.yScale(t.data.name):t.y=t.children.reduce((t,e)=>t+e.y,0)/t.children.length},n=t=>{t.x=this.xScale(this._getBranchLengthToRoot(t))},r=this._sortNodesByLevel();r.forEach(t=>{n(t),e(t)}),t.selectAll(".branch").data(r).enter().append("line").attr("x1",t=>t.x).attr("x2",t=>t.data.length?t.x-this.xScale(t.data.length):t.x).attr("y1",t=>t.y+this.yScale.bandwidth()/2).attr("y2",t=>t.y+this.yScale.bandwidth()/2).attr("stroke","gray").attr("stroke-width",1);const a=this.root.descendants().filter(t=>t.height).sort((t,e)=>e.height-t.height);t.selectAll(".arm").data(a).enter().append("line").attr("x1",t=>t.x).attr("x2",t=>t.x).attr("y1",t=>t.children[0].y+this.yScale.bandwidth()/2).attr("y2",t=>t.children[1].y+this.yScale.bandwidth()/2).attr("stroke","gray").attr("stroke-width",1),t.selectAll(".node").data(a).enter().append("circle").attr("cx",t=>t.x).attr("cy",t=>t.y+this.yScale.bandwidth()/2).attr("r",2).attr("fill","#333").attr("opacity",.5).attr("class","dendrogram-node").on("mouseover",function(t){d3.select(this).attr("r",3),console.log(t.leaves())}).on("mouseout",function(t){d3.select(this).attr("r",2)}),t.append("g").attr("class","dendrogram-axis").attr("transform","translate(0,"+this.height+")").call(ki(this.xScale).ticks(3))}_sortNodesByLevel(){return this.root.descendants().sort((t,e)=>t.height-e.height||W(t.data.length,e.data.length))}_drawVTree(t){const e=t=>{void 0===t.children?t.x=this.xScale(t.data.name):t.x=t.children.reduce((t,e)=>t+e.x,0)/t.children.length},n=t=>{t.y=this.yScale(this._getBranchLengthToRoot(t))},r=this._sortNodesByLevel();r.forEach(t=>{e(t),n(t)}),t.selectAll(".branch").data(r).enter().append("line").attr("y1",t=>t.y).attr("y2",t=>t.data.length?t.y-this.yScale(t.data.length):t.y).attr("x1",t=>t.x+this.xScale.bandwidth()/2).attr("x2",t=>t.x+this.xScale.bandwidth()/2).attr("stroke","gray").attr("stroke-width",1);const a=this.root.descendants().filter(t=>t.height).sort((t,e)=>e.height-t.height);t.selectAll(".arm").data(a).enter().append("line").attr("y1",t=>t.y).attr("y2",t=>t.y).attr("x1",t=>t.children[0].x+this.xScale.bandwidth()/2).attr("x2",t=>t.children[1].x+this.xScale.bandwidth()/2).attr("stroke","gray").attr("stroke-width",1),t.selectAll(".node").data(a).enter().append("circle").attr("cx",t=>t.x+this.xScale.bandwidth()/2).attr("cy",t=>t.y).attr("r",2).attr("fill","#333").attr("opacity",.5).attr("class","dendrogram-node").on("mouseover",function(t){d3.select(this).attr("r",3),console.log(t.leaves())}).on("mouseout",function(t){d3.select(this).attr("r",2)}),t.append("g").attr("class","dendrogram-axis").call(Ci(this.yScale).ticks(3))}_getBranchLengthToRoot(t){return t.path(this.root).reduce((t,e)=>e.data.length?t+e.data.length:t,0)}_getMaxBranchLength(){let t=this.leaves[0];return this._getBranchLengthToRoot(t)}_assignPostorder(t){return void 0===t.children?void this.postorder.push(t):(this._assignPostorder(t.children[0]),void this._assignPostorder(t.children[1]))}_setXScale(){"h"==this.orientation?this.xScale=xn().domain([0,this._getMaxBranchLength()]).range([0,this.width]):(this._assignPostorder(this.root),$i&&console.log(this.postorder),this.xScale=Et().domain(this.postorder.map(t=>t.data.name)).range([0,this.width]).padding(.05))}_setYScale(){"h"==this.orientation?(this._assignPostorder(this.root),$i&&console.log(this.postorder),this.yScale=Et().domain(this.postorder.map(t=>t.data.name)).range([0,this.height]).padding(.05)):this.yScale=xn().domain([0,this._getMaxBranchLength()]).range([0,this.height])}}class Di{constructor(t,e,n,r="YlGnBu",a=2,i=new ui,o="dmapTooltip",c=!0,s=10,f=""){this.config=i.get(),t=void 0===t||t.startsWith("Not enough data")?void 0:t,e=void 0===e||e.startsWith("Not enough data")?void 0:e,this.data={columnTree:t,rowTree:e,heatmap:n,external:void 0},this.objects={columnTree:void 0===this.data.columnTree?void 0:new Li(this.data.columnTree,"v"),rowTree:void 0===this.data.rowTree?void 0:new Li(this.data.rowTree,"h"),heatmap:new li(this.data.heatmap,c,s,r,a,o)},this.visualComponents={svg:void 0,columnTree:void 0,rowTree:void 0},this.title=f,this.toolbar=void 0,this.tooltip=this.objects.heatmap.tooltip}createToolbar(t,e){return this.toolbar=new si(t,e),this.toolbar}render(t,e,n=!0,r=!0,a="top",i=5){this._updateConfig(a),this.visualComponents.svg=bt(t,this.config.w,this.config.h,this.config.margin,e);let o=void 0,c=void 0;n&&void 0!==this.objects.columnTree&&(this.visualComponents.columnTree=this._renderTree("column",this.objects.columnTree,this.config.panels.top),o=this.objects.columnTree.xScale.domain()),r&&void 0!==this.objects.rowTree&&(this.visualComponents.rowTree=this._renderTree("row",this.objects.rowTree,this.config.panels.left),c=this.objects.rowTree.yScale.domain()),""!=this.title&&(console.log(this.title),O(`#${t}-svg`).append("text").attr("x",0).attr("y",20).text(this.title)),this._renderHeatmap(this.objects.heatmap,o,c,i)}_renderTree(t,e,n){let r=this.visualComponents.svg;const a="row"==t?".exp-map-ylabel":".exp-map-xlabel",i=r.append("g").attr("id",n.id).attr("transform",`translate(${n.x}, ${n.y})`);e.draw(i,n.w,n.h);return i.selectAll(".dendrogram-node").on("mouseover",function(t){O(this).attr("r",6).attr("fill","red");let e=t.leaves().map(t=>t.data.name);r.selectAll(a).filter(t=>e.includes(t)).classed("highlighted",!0),r.selectAll(".leaf-color").filter(t=>e.includes(t)).classed("highlighted",!0)}).on("mouseout",function(){O(this).attr("r",2).attr("fill","#333"),r.selectAll(a).classed("highlighted",!1),r.selectAll(".leaf-color").classed("highlighted",!1)}),i}_renderHeatmap(t,e,n,r=5){let a=this.visualComponents.svg;const i=this.config.panels.main,o=a.append("g").attr("id",i.id).attr("transform",`translate(${i.x}, ${i.y})`);t.redraw(o,e,n,{w:i.w,h:i.h}),t.drawColorLegend(a,this.config.panels.legend,r)}_updateConfig(t){const e=void 0===this.objects.rowTree?1:this.objects.rowTree.leaves.length;this.config.panels.left.h=this.config.cell.h*e<20?20:this.config.cell.h*e,this.config.h+=this.config.panels.left.h,this.config.panels.main.h=this.config.panels.left.h,"bottom"==t&&(this.config.panels.legend.y+=this.config.panels.main.h+this.config.panels.main.x+50)}}var Pi=Math.PI,Ii=2*Pi,Ui=Ii-1e-6;function zi(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function Yi(){return new zi}zi.prototype=Yi.prototype={constructor:zi,moveTo:function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},quadraticCurveTo:function(t,e,n,r){this._+="Q"+ +t+","+ +e+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function(t,e,n,r,a,i){this._+="C"+ +t+","+ +e+","+ +n+","+ +r+","+(this._x1=+a)+","+(this._y1=+i)},arcTo:function(t,e,n,r,a){t=+t,e=+e,n=+n,r=+r,a=+a;var i=this._x1,o=this._y1,c=n-t,s=r-e,f=i-t,l=o-e,u=f*f+l*l;if(a<0)throw new Error("negative radius: "+a);if(null===this._x1)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(u>1e-6)if(Math.abs(l*c-s*f)>1e-6&&a){var h=n-i,d=r-o,b=c*c+s*s,p=h*h+d*d,g=Math.sqrt(b),m=Math.sqrt(u),y=a*Math.tan((Pi-Math.acos((b+u-p)/(2*g*m)))/2),v=y/m,x=y/g;Math.abs(v-1)>1e-6&&(this._+="L"+(t+v*f)+","+(e+v*l)),this._+="A"+a+","+a+",0,0,"+ +(l*h>f*d)+","+(this._x1=t+x*c)+","+(this._y1=e+x*s)}else this._+="L"+(this._x1=t)+","+(this._y1=e);else;},arc:function(t,e,n,r,a,i){t=+t,e=+e;var o=(n=+n)*Math.cos(r),c=n*Math.sin(r),s=t+o,f=e+c,l=1^i,u=i?r-a:a-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+s+","+f:(Math.abs(this._x1-s)>1e-6||Math.abs(this._y1-f)>1e-6)&&(this._+="L"+s+","+f),n&&(u<0&&(u=u%Ii+Ii),u>Ui?this._+="A"+n+","+n+",0,1,"+l+","+(t-o)+","+(e-c)+"A"+n+","+n+",0,1,"+l+","+(this._x1=s)+","+(this._y1=f):u>1e-6&&(this._+="A"+n+","+n+",0,"+ +(u>=Pi)+","+l+","+(this._x1=t+n*Math.cos(a))+","+(this._y1=e+n*Math.sin(a))))},rect:function(t,e,n,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}};var Bi=function(t){return function(){return t}};function ji(t){this._context=t}ji.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}};var Fi=function(t){return new ji(t)};function Gi(t){return t[0]}function Vi(t){return t[1]}var Hi=function(){var t=Gi,e=Vi,n=Bi(!0),r=null,a=Fi,i=null;function o(o){var c,s,f,l=o.length,u=!1;for(null==r&&(i=a(f=Yi())),c=0;c<=l;++c)!(c=l;--u)c.point(g[u],m[u]);c.lineEnd(),c.areaEnd()}p&&(g[f]=+t(h,f,s),m[f]=+n(h,f,s),c.point(e?+e(h,f,s):g[f],r?+r(h,f,s):m[f]))}if(d)return c=null,d+""||null}function f(){return Hi().defined(a).curve(o).context(i)}return s.x=function(n){return arguments.length?(t="function"==typeof n?n:Bi(+n),e=null,s):t},s.x0=function(e){return arguments.length?(t="function"==typeof e?e:Bi(+e),s):t},s.x1=function(t){return arguments.length?(e=null==t?null:"function"==typeof t?t:Bi(+t),s):e},s.y=function(t){return arguments.length?(n="function"==typeof t?t:Bi(+t),r=null,s):n},s.y0=function(t){return arguments.length?(n="function"==typeof t?t:Bi(+t),s):n},s.y1=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:Bi(+t),s):r},s.lineX0=s.lineY0=function(){return f().x(t).y(n)},s.lineY1=function(){return f().x(t).y(r)},s.lineX1=function(){return f().x(e).y(n)},s.defined=function(t){return arguments.length?(a="function"==typeof t?t:Bi(!!t),s):a},s.curve=function(t){return arguments.length?(o=t,null!=i&&(c=o(i)),s):o},s.context=function(t){return arguments.length?(null==t?i=c=null:c=o(i=t),s):i},s};function Ri(t,e,n){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-n),t._x2,t._y2)}function Xi(t,e){this._context=t,this._k=(1-e)/6}Xi.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Ri(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:Ri(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var qi=function t(e){function n(t){return new Xi(t,e)}return n.tension=function(e){return t(+e)},n}(0);function Wi(t){return t<0?-1:1}function Zi(t,e,n){var r=t._x1-t._x0,a=e-t._x1,i=(t._y1-t._y0)/(r||a<0&&-0),o=(n-t._y1)/(a||r<0&&-0),c=(i*a+o*r)/(r+a);return(Wi(i)+Wi(o))*Math.min(Math.abs(i),Math.abs(o),.5*Math.abs(c))||0}function Ki(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function Qi(t,e,n){var r=t._x0,a=t._y0,i=t._x1,o=t._y1,c=(i-r)/3;t._context.bezierCurveTo(r+c,a+c*e,i-c,o-c*n,i,o)}function Ji(t){this._context=t}function to(t){this._context=t}Ji.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Qi(this,this._t0,Ki(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var n=NaN;if(e=+e,(t=+t)!==this._x1||e!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,Qi(this,Ki(this,n=Zi(this,t,e)),n);break;default:Qi(this,this._t0,n=Zi(this,t,e))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=n}}},(function(t){this._context=new to(t)}.prototype=Object.create(Ji.prototype)).point=function(t,e){Ji.prototype.point.call(this,e,t)},to.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,n,r,a,i){this._context.bezierCurveTo(e,t,r,n,i,a)}};var eo=function(){U.preventDefault(),U.stopImmediatePropagation()},no=function(t){var e=t.document.documentElement,n=O(t).on("dragstart.drag",eo,!0);"onselectstart"in e?n.on("selectstart.drag",eo,!0):(e.__noselect=e.style.MozUserSelect,e.style.MozUserSelect="none")};var ro=function(t){return function(){return t}},ao=function(t,e,n){this.target=t,this.type=e,this.selection=n};function io(){U.stopImmediatePropagation()}var oo=function(){U.preventDefault(),U.stopImmediatePropagation()},co={name:"drag"},so={name:"space"},fo={name:"handle"},lo={name:"center"},uo={name:"x",handles:["e","w"].map(xo),input:function(t,e){return t&&[[t[0],e[0][1]],[t[1],e[1][1]]]},output:function(t){return t&&[t[0][0],t[1][0]]}},ho={name:"y",handles:["n","s"].map(xo),input:function(t,e){return t&&[[e[0][0],t[0]],[e[1][0],t[1]]]},output:function(t){return t&&[t[0][1],t[1][1]]}},bo={name:"xy",handles:["n","e","s","w","nw","ne","se","sw"].map(xo),input:function(t){return t},output:function(t){return t}},po={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},go={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},mo={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},yo={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},vo={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1};function xo(t){return{type:t}}function wo(){return!U.button}function _o(){var t=this.ownerSVGElement||this;return[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]}function Mo(t){for(;!t.__brush;)if(!(t=t.parentNode))return;return t.__brush}function So(t){return t[0][0]===t[1][0]||t[0][1]===t[1][1]}var To=function(){return function(t){var e,n=_o,r=wo,a=na(o,"start","brush","end"),i=6;function o(e){var n=e.property("__brush",u).selectAll(".overlay").data([xo("overlay")]);n.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",po.overlay).merge(n).each(function(){var t=Mo(this).extent;O(this).attr("x",t[0][0]).attr("y",t[0][1]).attr("width",t[1][0]-t[0][0]).attr("height",t[1][1]-t[0][1])}),e.selectAll(".selection").data([xo("selection")]).enter().append("rect").attr("class","selection").attr("cursor",po.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var r=e.selectAll(".handle").data(t.handles,function(t){return t.type});r.exit().remove(),r.enter().append("rect").attr("class",function(t){return"handle handle--"+t.type}).attr("cursor",function(t){return po[t.type]}),e.each(c).attr("fill","none").attr("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush touchstart.brush",l)}function c(){var t=O(this),e=Mo(this).selection;e?(t.selectAll(".selection").style("display",null).attr("x",e[0][0]).attr("y",e[0][1]).attr("width",e[1][0]-e[0][0]).attr("height",e[1][1]-e[0][1]),t.selectAll(".handle").style("display",null).attr("x",function(t){return"e"===t.type[t.type.length-1]?e[1][0]-i/2:e[0][0]-i/2}).attr("y",function(t){return"s"===t.type[0]?e[1][1]-i/2:e[0][1]-i/2}).attr("width",function(t){return"n"===t.type||"s"===t.type?e[1][0]-e[0][0]+i:i}).attr("height",function(t){return"e"===t.type||"w"===t.type?e[1][1]-e[0][1]+i:i})):t.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function s(t,e){return t.__brush.emitter||new f(t,e)}function f(t,e){this.that=t,this.args=e,this.state=t.__brush,this.active=0}function l(){if(U.touches){if(U.changedTouches.length0&&(n=a-d),_<0?u=h-b:_>0&&(i=o-b),x=so,I.attr("cursor",po.selection),B());break;default:return}oo()},!0).on("keyup.brush",function(){switch(U.keyCode){case 16:C&&(g=m=C=!1,B());break;case 18:x===lo&&(w<0?f=l:w>0&&(n=a),_<0?u=h:_>0&&(i=o),x=fo,B());break;case 32:x===so&&(U.altKey?(w&&(f=l-d*w,n=a+d*w),_&&(u=h-b*_,i=o+b*_),x=lo):(w<0?f=l:w>0&&(n=a),_<0?u=h:_>0&&(i=o),x=fo),I.attr("cursor",po[v]),B());break;default:return}oo()},!0).on("mousemove.brush",Y,!0).on("mouseup.brush",j,!0);no(U.view)}io(),Ya(y),c.call(y),D.start()}function Y(){var t=X(y);!C||g||m||(Math.abs(t[0]-L[0])>Math.abs(t[1]-L[1])?m=!0:g=!0),L=t,p=!0,oo(),B()}function B(){var t;switch(d=L[0]-$[0],b=L[1]-$[1],x){case so:case co:w&&(d=Math.max(N-n,Math.min(A-f,d)),a=n+d,l=f+d),_&&(b=Math.max(E-i,Math.min(k-u,b)),o=i+b,h=u+b);break;case fo:w<0?(d=Math.max(N-n,Math.min(A-n,d)),a=n+d,l=f):w>0&&(d=Math.max(N-f,Math.min(A-f,d)),a=n,l=f+d),_<0?(b=Math.max(E-i,Math.min(k-i,b)),o=i+b,h=u):_>0&&(b=Math.max(E-u,Math.min(k-u,b)),o=i,h=u+b);break;case lo:w&&(a=Math.max(N,Math.min(A,n-d*w)),l=Math.max(N,Math.min(A,f+d*w))),_&&(o=Math.max(E,Math.min(k,i-b*_)),h=Math.max(E,Math.min(k,u+b*_)))}l{t.selectAll("*").remove(),this.render(t,e,n,r,a,i,o,c,s,f,l,u,h)}),void 0===i||0==i.length){let t=[];this.data.forEach(e=>t=t.concat(e.values)),i=et(t)}this.groups=yt().key(t=>t.group).entries(this.data),this.scale={x:Et().rangeRound([0,e]).domain(a||this.groups.map(t=>t.key)).paddingInner(r),subx:Et(),y:xn().rangeRound([n,0]).domain(i),z:xn()},this.groups.forEach(e=>{let r=e.key,a=e.values,o=this.groupInfo[r];if(e.index=this.scale.x.domain().indexOf(r),void 0!==o){t.append("g").selectAll(".violin-group-label").data(["pvalue"]).enter().append("text").attr("x",0).attr("y",0).attr("class","violin-group-label").attr("fill",t=>"pvalue"==t&&parseFloat(o[t])<=parseFloat(o.pvalueThreshold)?"orangered":"SlateGray").attr("transform",(t,e)=>{return`translate(${this.scale.x(r)+this.scale.x.bandwidth()/2}, ${this.scale.y(i[0])+50})`}).text(t=>`${t}: ${parseFloat(parseFloat(o[t]).toPrecision(3)).toExponential()}`)}this.scale.subx.domain(a.map(t=>t.label)).rangeRound([this.scale.x(r),this.scale.x(r)+this.scale.x.bandwidth()]),a.forEach(n=>{0!=n.values.length&&(n.values=n.values.sort(W),this._drawViolin(t,n,l,e.index))});var c=15;if(d){const e=Et().domain(a.map(t=>void 0==t.size?"(0)":`(${t.size||0})`)).rangeRound([this.scale.x(r),this.scale.x(r)+this.scale.x.bandwidth()]);t.append("g").attr("class","violin-size-axis").attr("transform",`translate(0, ${n+c})`).call(ki(e))}if(s){c=5;const e=t.append("g").attr("class","violin-sub-axis").attr("transform",`translate(0, ${n+c})`).call(ki(this.scale.subx));f>0&&e.selectAll("text").style("text-anchor","start").attr("transform",`rotate(${f}, 2, 10)`)}});let b=s?55:0;if(this.xAxis=c?ki(this.scale.x):ki(this.scale.x).tickFormat(""),t.append("g").attr("class","violin-x-axis axis--x").attr("transform",`translate(0, ${n+b})`).call(this.xAxis).selectAll("text").style("text-anchor","start").attr("transform","rotate(30, -10, 10)"),b=5,this.yAxis=Ci(this.scale.y).tickValues(this.scale.y.ticks(5)),t.append("g").attr("class","violin-y-axis axis--y").attr("transform",`translate(-${b}, 0)`).call(this.yAxis),t.append("text").attr("y",-40).attr("x",-40).attr("class","violin-axis-label").attr("text-anchor","start").attr("transform","rotate(-90)").text(o),t.on("mouseout",()=>{void 0!==this.tooltip&&this.tooltip.hide()}),u&&this._addGroupDivider(t),h){const e=t.append("g").attr("id","violinLegend").attr("transform","translate(0, 0)");e.append("rect").attr("x",this.scale.x.range()[0]).attr("y",-35).attr("width",60*this.groups[0].values.length+10).attr("height",24).style("fill","none").style("stroke","silver");const n=e.selectAll(".violin-legend").data(this.groups[0].values).enter().append("g").classed("violin-legend",!0),r=10;n.append("rect").attr("x",(t,e)=>5+60*e+this.scale.x.range()[0]).attr("y",-28).attr("width",r).attr("height",r).style("fill",t=>t.color),n.append("text").attr("class","violin-legend-text").text(t=>t.label).attr("x",(t,e)=>17+60*e+this.scale.x.range()[0]).attr("y",-20)}}createTooltip(t){return 0==$(`#${t}`).length&&$("
").attr("id",t).appendTo($("body")),this.tooltip=new fi(t),O(`#${t}`).classed("violin-tooltip",!0),this.tooltip}createToolbar(t,e){return this.toolbar=new si(t,e),this.toolbar}addBrush(t){const e=To();e.on("end",()=>{this.zoom(t,e)}),t.append("g").attr("class","brush").call(e)}zoom(t,e){let n,r=U.selection;if(void 0===e)this.reset();else if(r){this.scale.x.domain(this.scale.x.domain().filter((t,e)=>{const n=Math.floor(r[0][0]/this.scale.x.bandwidth()),a=Math.floor(r[1][0]/this.scale.x.bandwidth());return e>=n&&e<=a}));const n=Math.floor(this.scale.y.invert(r[1][1])),a=Math.floor(this.scale.y.invert(r[0][1]));this.scale.y.domain([n,a]),t.select(".brush").call(e.move,null)}else{if(!n)return n=setTimeout(function(){n=null},350);this.reset()}let a=t.transition().duration(750);t.select(".axis--x").transition(a).call(this.xAxis),t.select(".axis--y").transition(a).call(this.yAxis),this.groups.forEach((e,n)=>{let r=e.key,i=e.values;this.scale.subx.rangeRound([this.scale.x(r),this.scale.x(r)+this.scale.x.bandwidth()]),i.forEach(n=>{if(0==n.values.length)return;this.scale.x.domain().indexOf(r);this.scale.z.range([this.scale.subx(n.label),this.scale.subx(n.label)+this.scale.subx.bandwidth()]);const i=t.select(`#violin${e.index}-${n.label}`);i.select(".violin").transition(a).attr("d",Oi().x0(t=>this.scale.z(t[1])).x1(t=>this.scale.z(-t[1])).y(t=>this.scale.y(t[0])));const o=st(n.values,.25),c=st(n.values,.75);i.select(".violin-ir").transition(a).attr("x",this.scale.z(-.1)).attr("y",this.scale.y(c)).attr("width",Math.abs(this.scale.z(-.1)-this.scale.z(.1))).attr("height",Math.abs(this.scale.y(c)-this.scale.y(o)));const s=ut(n.values);i.select(".violin-median").transition(a).attr("x1",this.scale.z(-.1)).attr("x2",this.scale.z(.1)).attr("y1",this.scale.y(s)).attr("y2",this.scale.y(s))})})}_drawViolin(t,e,n,r){let a=function(t,e,n){return function(r){return e.map(e=>[e,lt(r,r=>t((e-r)/n))/n])}}(No.gaussian,this.scale.y.ticks(100),Eo.nrd(e.values));const i=et(e.values),o=a(e.values).filter(t=>t[0]>i[0]&&t[0]Math.abs(t[1]));this.scale.z.domain([-c,c]).range([this.scale.subx(e.label),this.scale.subx(e.label)+this.scale.subx.bandwidth()]);const s=t.append("g").attr("id",`violin${r}-${e.label}`);let f=Oi().x0(t=>this.scale.z(t[1])).x1(t=>this.scale.z(-t[1])).y(t=>this.scale.y(t[0]));const l=s.append("path").datum(o).attr("d",f).classed("violin",!0).style("fill",()=>void 0!==e.color?e.color:r%2==0?"#90c1c1":"#94a8b8"),u=st(e.values,.25),h=st(e.values,.75),d=this.scale.z.domain()[1]/3;if(n){const n=Math.abs(h-u),r=ft(e.values.filter(t=>tt>u-1.5*n));t.append("line").classed("whisker",!0).attr("x1",this.scale.z(0)).attr("x2",this.scale.z(0)).attr("y1",this.scale.y(r)).attr("y2",this.scale.y(a)).style("stroke","#fff")}s.append("rect").attr("x",this.scale.z(-d)).attr("y",this.scale.y(h)).attr("width",Math.abs(this.scale.z(-d)-this.scale.z(d))).attr("height",Math.abs(this.scale.y(h)-this.scale.y(u))).attr("class","violin-ir");const b=ut(e.values);s.append("line").attr("x1",this.scale.z(-d)).attr("x2",this.scale.z(d)).attr("y1",this.scale.y(b)).attr("y2",this.scale.y(b)).attr("class","violin-median"),s.on("mouseover",()=>{l.classed("highlighted",!0),void 0===this.tooltip?console.warn("GroupViolin Warning: tooltip not defined"):this.tooltip.show(e.group+"
"+e.label+"
Median: "+b.toPrecision(4)+"
")}),s.on("mouseout",()=>{l.classed("highlighted",!1)})}_sanityCheck(t){const e=["group","label","values"];t.forEach(t=>{e.forEach(e=>{if(void 0===t[e])throw"GroupedViolin: input data error."})})}_addGroupDivider(t){const e=this.scale.x.domain(),n=Math.abs(this.scale.x(this.scale.x.domain()[1])-this.scale.x(this.scale.x.domain()[0])-this.scale.x.bandwidth()),r=(t,r)=>r!==e.length-1?this.scale.x(t)+ +this.scale.x.bandwidth()+n/2:0;t.selectAll(".vline").data(e).enter().append("line").classed("vline",!0).attr("x1",r).attr("x2",r).attr("y1",this.scale.y.range()[0]).attr("y2",this.scale.y.range()[1]).style("stroke-width",(t,n)=>n!=e.length-1?1:0).style("stroke","rgb(86,98,107)").style("opacity",.5)}}class ko{constructor(t,e,n,r,a=!1,i=1e3,o=0){this.gene=t,this.exons=e,"+"==this.gene.strand?this.exons.sort((t,e)=>Number(t.exonNumber)-Number(e.exonNumber)):this.exons.sort((t,e)=>Number(e.exonNumber)-Number(t.exonNumber)),this.exonsCurated=n.sort((t,e)=>Number(t.exonNumber)-Number(e.exonNumber)),this.junctions=r.sort((t,e)=>t.junctionIde.junctionId?1:0),this.isIsoform=a,this.maxIntronLength=i,this.intronLength=0,this.minExonWidth=o,this.nullColor="#DDDDDD"}changeTextlabel(t,e){t.selectAll("#modelInfo").text(e)}addData(t,e,n,r,a){void 0!==e&&t.selectAll(".junc").style("fill",n=>{const a=e.filter(t=>t.junctionId==n.junctionId)[0],i=0==a.value?this.nullColor:r(a.value);return t.selectAll(".junc-curve").filter(`.junc${n.junctionId}`).style("stroke",i),i}),t.selectAll(".exon-curated").style("fill",t=>{const e=n.filter(e=>e.exonId==t.exonId)[0];if(void 0===e)throw`${t.exonId} has no data`;return 0==e.value?this.nullColor:a(e.value)})}render(t,e){this.setXscale(e.w);const n=e.h/2;if(this.exons.forEach((t,e)=>{t.x=0==e?0:this.exons[e-1].x+this.exons[e-1].w+this.xScale(t.intronLength>this.maxIntronLength?this.maxIntronLength:t.intronLength),t.w=this.xScale(t.length){if(t.oriExon=this._findExon(t.chromStart)||this._findExon(t.chromEnd),void 0!==t.oriExon){if(Number(t.oriExon.chromStart)==Number(t.chromStart))t.x=t.oriExon.x;else{const e=Number(t.chromStart)-Number(t.oriExon.chromStart)+1;t.x=t.oriExon.x+this.xScale(e)}void 0===t.length&&(t.length=Number(t.chromEnd)-Number(t.chromStart)+1),t.w=this.xScale(t.length)(t.startExon=this._findExon(t.chromStart),t.endExon=this._findExon(t.chromEnd),void 0!==t.startExon&&void 0!==t.endExon)),this.junctions.sort((t,e)=>+t.chromStart<+e.chromStart?-1:+t.chromStart>+e.chromStart?1:+t.chromEnd<+e.chromEnd?-1:+t.chromEnd>+e.chromEnd?1:0),this.junctions.forEach((t,e)=>{t.displayName=`Junction ${e+1}`;const r=Number(t.chromStart)-Number(t.startExon.chromStart)+1,a=Number(t.chromEnd)-Number(t.endExon.chromStart)+1;t.startX=t.startExon.x+this.xScale(r),t.endX=t.endExon.x+this.xScale(a),t.cx=t.startX+(t.endX-t.startX+1)/2,t.cy=n-15*(Math.abs(Number(t.endExon.exonNumber)-Number(t.startExon.exonNumber))+.5),t.cy<0&&(t.cy=0)});const e=this.junctions.reduce((t,e)=>(t[e.displayName]=1+t[e.displayName]||1,t),{});this.junctions.forEach(t=>{e[t.displayName]>1&&(t.cy-=15*Math.random())});const r=Hi().x(t=>t.x).y(t=>t.y).curve(qi);this.junctions.forEach((e,a)=>{t.append("path").datum([{x:e.startX,y:n},{x:e.cx,y:e.cy},{x:e.endX,y:n}]).attr("class",`junc-curve junc${e.junctionId}`).attr("d",r).style("stroke","#92bcc9")});const a=t.selectAll(".junc").data(this.junctions);a.attr("cx",t=>t.cx),a.attr("cy",t=>t.cy),a.enter().append("circle").attr("class",t=>`junc junc${t.junctionId}`).attr("cx",t=>t.cx).attr("cy",t=>t.cy).merge(a).attr("r",4).style("fill","rgb(86, 98, 107)");const i=t.selectAll(".exon").data(this.exons);i.attr("x",t=>t.x),i.attr("y",n),i.enter().append("rect").attr("class",t=>`exon exon${t.exonNumber}`).attr("y",n).attr("rx",2).attr("ry",2).attr("width",t=>t.w).attr("height",15).attr("x",t=>t.x).merge(i).style("cursor","default"),t.append("text").attr("id","modelInfo").style("text-anchor","end").attr("x",this.xScale(0)).attr("y",n-10).style("font-size",12).text("Gene Model")}const r=t.selectAll(".exon-curated").data(this.exonsCurated);r.attr("x",t=>t.x),r.attr("y",n),r.enter().append("rect").attr("class",t=>this.isIsoform?"exon-curated":`exon-curated exon-curated${t.exonNumber}`).attr("y",n).attr("width",t=>t.w).attr("height",15).attr("x",t=>t.x).merge(r).style("fill","#eee").style("cursor","default"),"left"!=e.labelOn&&"both"!=e.labelOn||t.append("text").attr("id","modelLabel").style("text-anchor","end").attr("x",this.xScale.range()[0]-5).attr("y",n+7.5).style("font-size","9px").text(void 0===this.gene.transcriptId?`${this.gene.geneSymbol}`:this.gene.transcriptId),"right"!=e.labelOn&&"both"!=e.labelOn||t.append("text").attr("id","modelLabelRight").style("text-anchor","start").attr("x",this.xScale.range()[1]+50).attr("y",n+7.5).style("font-size","9px").text(void 0===this.gene.transcriptId?`${this.gene.geneSymbol}`:this.gene.transcriptId)}setXscale(t){this.exons.sort((t,e)=>Number(t.chromStart)Number(e.chromStart)?1:0);let e=0;this.exons.forEach((t,n)=>{if(t.length=Number(t.chromEnd)-Number(t.chromStart)+1,0==n)e+=t.length;else{let r=this.exons[n-1];t.intronLength=Number(t.chromStart)-Number(r.chromEnd)+1,e+=t.length+(t.intronLength>this.maxIntronLength?this.maxIntronLength:t.intronLength)}});const n=[0,e],r=[0,t];this.xScale=xn().domain(n).range(r)}setXscaleFixIntron(t){this.exons.forEach(t=>{t.length=Number(t.chromEnd)-Number(t.chromStart)+1});const e=ft(this.exons,t=>t.length),n=[0,e*this.exons.length],r=[0,t];this.xScale=xn().domain(n).range(r);const a=this.xScale.invert(this.minExonWidth),i=dt(this.exons,t=>t.length>a?t.length:a);this.intronLength=(e*this.exons.length-i)/(this.exons.length-1)}_findExon(t){t=Number(t);const e=this.exons.filter(e=>Number(e.chromStart)-1<=t&&Number(e.chromEnd)+1>=t);return 1==e.length?e[0]:0==e.length?void console.warn("No exon found for: "+t):void console.warn("More than one exons found for: "+t)}}class Co{constructor(t,e,n,r){this.isoforms=t,this.isoformExons=e,this.modelExons=n,this.visualDom=void 0,this.config=r,this.nullColor="#DDDDDD"}showData(t,e,n,r,a=!0){if(a){t.sort((t,e)=>-(t.displayValue-e.displayValue));const e=t.map(t=>t.transcriptId);this.sortTracks(e)}t.forEach(t=>{this.visualDom.select(`#${t.transcriptId.replace(".","_")}`).selectAll(".exon-curated").style("fill",0==t.value?this.nullColor:e(t.value))}),this.visualDom.select(".lollipopGraph").remove();const i=this.visualDom.append("g").classed("lollipopGraph",!0).attr("transform","translate(-100, 13)"),o=i.selectAll(".lollipop").data(t).enter().append("g").classed("lollipop",!0);var c;o.append("line").attr("x1",0).attr("y1",t=>this.yScale(t.transcriptId)).attr("y2",t=>this.yScale(t.transcriptId)).style("stroke",t=>0==t.value?this.nullColor:e(t.value)).style("stroke-width",2).transition().duration(1e3).attr("x2",t=>0==t.value?0:n(t.value)),o.append("circle").attr("cx",0).attr("cy",t=>this.yScale(t.transcriptId)).attr("r",5).style("fill",t=>0==t.value?this.nullColor:e(t.value)).transition().duration(1e3).attr("cx",t=>n(t.value)),i.append("g").attr("class","lollipop-axis").attr("transform",`translate(0,-${this.yScale.bandwidth()/2})`).call((c=n,Ai(xi,c)).ticks(3)),i.append("text").attr("id","lolliLabel").attr("x",0).attr("y",-40).style("text-anchor","end").style("font-size",9).text("log10(TPM)"),i.append("g").attr("class","lollipop-axis").attr("transform",`translate(0,-${this.yScale.bandwidth()/2})`).call(function(t){return Ai(wi,t)}(this.yScale).tickValues([])),i.append("text").attr("id","lolliLabel").attr("x",10).attr("y",-20).text(`Transcript Expression in ${r}`).style("text-anchor","start").style("font-size","12px")}sortTracks(t){this.setYscale(this.config.h,t),this.render(!0)}render(t=!1,e,n="left",r=1e3){if(void 0===e&&void 0===this.visualDom)throw"Fatal Error: must provide a dom element";void 0===e?e=this.visualDom:this.visualDom=e,void 0===this.yScale&&this.setYscale(this.config.h);const a=e.selectAll(".isotrack").data(this.isoforms.map(t=>t.transcriptId));a.transition().duration(r).attr("transform",t=>`translate(0, ${this.yScale(t)})`),a.enter().append("g").attr("id",t=>t.replace(".","_")).attr("class","isotrack").attr("transform",t=>"translate(0, 0)").transition().duration(r/2).attr("transform",t=>`translate(0, ${this.yScale(t)})`),t||this._renderModels(this.config.w,n)}_renderModels(t,e="left"){this.isoforms.forEach(n=>{const r=new ko(n,this.modelExons,this.isoformExons[n.transcriptId],[],!0),a=O(`#${n.transcriptId.replace(".","_")}`);r.render(a,{w:t,h:this.yScale.bandwidth(),labelOn:e})})}setYscale(t,e){void 0===e&&(e=this.isoforms.map(t=>t.transcriptId)),this.yScale=Et().domain(e).range([0,t]).padding(.05)}}const $o={heatmap:function(t={x:20,y:20,scaleFactor:1}){let e=nt(1,t.x+1),n=nt(1,t.y+1),r=[];return e.forEach(e=>{e="x"+e.toString(),n.forEach(n=>{n="y"+n.toString();let a=Math.random()*t.scaleFactor;r.push({x:e,y:n,value:a,displayValue:parseFloat(a.toExponential()).toPrecision(3)})})}),r}({x:50,y:10,scaleFactor:1e3}),dendroHeatmap:{rowTree:"(((TP53:0.17,SLK:0.17):1.18,NDRG4:1.34):1.33,ACTN3:2.67);",colTree:"(((Adipose Visceral Omentum:0.06,Adipose Subcutaneous:0.06):0.00,Bladder:0.06):0.16,Adrenal Gland:0.22);",heatmap:[{y:"SLK",value:35.505,x:"Adipose Subcutaneous",unit:"TPM"},{y:"SLK",value:29.28,x:"Adipose Visceral Omentum",unit:"TPM"},{y:"SLK",value:17.405,x:"Adrenal Gland",unit:"TPM"},{y:"SLK",value:53.29,x:"Bladder",unit:"TPM"},{y:"NDRG4",value:12.035,x:"Adipose Subcutaneous",unit:"TPM"},{y:"NDRG4",value:6.531000000000001,x:"Adipose Visceral Omentum",unit:"TPM"},{y:"NDRG4",value:134.8,x:"Adrenal Gland",unit:"TPM"},{y:"NDRG4",value:7.1160000000000005,x:"Bladder",unit:"TPM"},{y:"TP53",value:29.935,x:"Adipose Subcutaneous",unit:"TPM"},{y:"TP53",value:23.55,x:"Adipose Visceral Omentum",unit:"TPM"},{y:"TP53",value:18.515,x:"Adrenal Gland",unit:"TPM"},{y:"TP53",value:40.51,x:"Bladder",unit:"TPM"},{y:"ACTN3",value:.33145,x:"Adipose Subcutaneous",unit:"TPM"},{y:"ACTN3",value:.3317,x:"Adipose Visceral Omentum",unit:"TPM"},{y:"ACTN3",value:.100005,x:"Adrenal Gland",unit:"TPM"},{y:"ACTN3",value:.48100000000000004,x:"Bladder",unit:"TPM"}]},groupedViolinPlot:[{group:"Group 1",label:"Gene 1",values:nt(0,2e3).map(pt(2,1))},{group:"Group 1",label:"Gene 2",values:nt(0,2e3).map(pt(5,1))},{group:"Group 1",label:"Gene 3",values:nt(0,2e3).map(pt(10,1))},{group:"Group 2",label:"Gene 1",values:nt(0,2e3).map(pt(5,1))},{group:"Group 2",label:"Gene 2",values:nt(0,2e3).map(pt(3,1))},{group:"Group 2",label:"Gene 3",values:nt(0,2e3).map(pt(1,1))},{group:"Group 3",label:"Gene 1",values:nt(0,2e3).map(pt(2,1))},{group:"Group 3",label:"Gene 2",values:nt(0,2e3).map(pt(3,1))},{group:"Group 3",label:"Gene 3",values:nt(0,2e3).map(pt(5,1))}],transcriptTracks:{exons:{"ENST00000578419.1":[{chrom:"17",chromStart:77071021,chromEnd:77071172,strand:"+",exonNumber:"1",exonId:"ENSE00003502032.1"},{chrom:"17",chromEnd:77073579,exonId:"ENSE00003672628.1",exonNumber:"2",chromStart:77073512,strand:"+"},{chrom:"17",chromEnd:77073946,exonId:"ENSE00003475281.1",exonNumber:"3",chromStart:77073745,strand:"+"},{chrom:"17",chromEnd:77076446,exonId:"ENSE00003679852.1",exonNumber:"4",chromStart:77076289,strand:"+"},{chrom:"17",chromEnd:77077155,exonId:"ENSE00003583515.1",exonNumber:"5",chromStart:77077007,strand:"+"},{chrom:"17",chromEnd:77078631,exonId:"ENSE00003589230.1",exonNumber:"6",chromStart:77077980,strand:"+"}],"ENST00000539857.2":[{chrom:"17",chromEnd:77071172,exonId:"ENSE00003512401.1",exonNumber:"1",chromStart:77071021,strand:"+"},{chrom:"17",chromEnd:77073579,exonId:"ENSE00003623828.1",exonNumber:"2",chromStart:77073512,strand:"+"},{chrom:"17",chromEnd:77073946,exonId:"ENSE00003638693.1",exonNumber:"3",chromStart:77073745,strand:"+"},{chrom:"17",chromEnd:77076446,exonId:"ENSE00003651250.1",exonNumber:"4",chromStart:77076289,strand:"+"},{chrom:"17",chromEnd:77077155,exonId:"ENSE00003607773.1",exonNumber:"5",chromStart:77077007,strand:"+"},{chrom:"17",chromEnd:77078631,exonId:"ENSE00003488117.1",exonNumber:"6",chromStart:77077980,strand:"+"}],"ENST00000311595.9":[{chrom:"17",chromEnd:77071172,exonId:"ENSE00002713933.1",exonNumber:"1",chromStart:77071151,strand:"+"},{chrom:"17",chromEnd:77073579,exonId:"ENSE00003672628.1",exonNumber:"2",chromStart:77073512,strand:"+"},{chrom:"17",chromEnd:77073946,exonId:"ENSE00003475281.1",exonNumber:"3",chromStart:77073745,strand:"+"},{chrom:"17",chromEnd:77075719,exonId:"ENSE00001111713.1",exonNumber:"4",chromStart:77075571,strand:"+"},{chrom:"17",chromEnd:77076446,exonId:"ENSE00003651250.1",exonNumber:"5",chromStart:77076289,strand:"+"},{chrom:"17",chromEnd:77077155,exonId:"ENSE00003607773.1",exonNumber:"6",chromStart:77077007,strand:"+"},{chrom:"17",chromEnd:77078612,exonId:"ENSE00002720924.1",exonNumber:"7",chromStart:77077980,strand:"+"}]},transcripts:[{chromosome:"17",end:77078631,gencodeId:"ENSG00000167280.12",geneSymbol:"ENGASE",start:77071021,strand:"+",transcriptId:"ENST00000578419.1"},{chromosome:"17",end:77078631,gencodeId:"ENSG00000167280.12",geneSymbol:"ENGASE",start:77071021,strand:"+",transcriptId:"ENST00000539857.2"},{chromosome:"17",end:77078612,gencodeId:"ENSG00000167280.12",geneSymbol:"ENGASE",start:77071151,strand:"+",transcriptId:"ENST00000311595.9"}]}},Lo={id:"gtexTranscriptTracks",data:$o.transcriptTracks,width:1200,height:80,marginLeft:100,marginRight:20,marginTop:0,marginBottom:20,labelPos:"left"};const Do={id:"gtexVizHeatmap",data:$o.heatmap,width:1200,height:300,marginLeft:20,marginRight:40,marginTop:50,marginBottom:50,colorScheme:"YlGnBu",cornerRadius:2,columnLabelHeight:20,columnLabelAngle:60,columnLabelPosAdjust:10,rowLabelWidth:100,legendSpace:50,useLog:!0,logBase:10};const Po={id:"gtexVizDendroHeatmap",data:$o.dendroHeatmap,useLog:!0,logBase:10,width:600,height:300,marginLeft:20,marginRight:40,marginTop:50,marginBottom:50,rowTreePanelWidth:100,colTreePanelHeight:100,colorScheme:"Blues",cornerRadius:2,columnLabelHeight:200,columnLabelAngle:60,columnLabelPosAdjust:10,rowLabelWidth:200,legendSpace:50};const Io={id:"gtexGroupedViolinPlot",data:$o.groupedViolinPlot,width:500,height:300,marginLeft:100,marginRight:20,marginTop:50,marginBottom:100,showDivider:!0,xPadding:.3,yLabel:"Random Value",showGroupX:!0,showX:!0,xAngle:0,showWhisker:!1,showLegend:!1,showSampleSize:!0};return t.demoData=$o,t.transcriptTracks=function(t=Lo){let e={top:t.marginTop,right:t.marginRight,bottom:t.marginBottom,left:t.marginLeft},n=t.width-(t.marginLeft+t.marginRight),r=t.height-(t.marginTop+t.marginBottom);if(0==$(`#${t.id}`).length){let e=`Input Error: DOM ID ${t.id} is not found.`;throw alert(e),e}let a=bt(t.id,t.width,t.height,e),i={x:0,y:0,w:n,h:r,labelOn:t.labelPos};new Co(t.data.transcripts,t.data.exons,t.data.exons["ENST00000578419.1"],i).render(!1,a,t.labelPos)},t.heatmap=function(t=Do){let e={top:t.marginTop,right:t.marginRight,bottom:t.marginBottom,left:t.marginLeft},n=t.width-(t.marginLeft+t.marginRight+t.rowLabelWidth),r=t.height-(t.marginTop+t.marginBottom+t.columnLabelHeight);if(0==$(`#${t.id}`).length){let e=`Input Error: DOM ID ${t.id} is not found.`;throw alert(e),e}let a=bt(t.id,t.width,t.height,e),i=`${t.id}Tooltip`,o=new li(t.data,t.useLog,t.logBase,t.colorScheme,t.cornerRadius,i);o.draw(a,{w:n,h:r},t.columnLabelAngle,!1,t.columnLabelPosAdjust),o.drawColorLegend(a,{x:20,y:-20},10)},t.dendroHeatmap=function(t=Po){let e={top:t.marginTop,right:t.marginRight+t.rowLabelWidth,bottom:t.marginBottom+t.columnLabelHeight,left:t.marginLeft};if(0==$(`#${t.id}`).length){let e=`Input Error: DOM ID ${t.id} is not found.`;throw alert(e),e}let n=`${t.id}Svg`,r=`${t.id}Tooltip`,a=new ui(t.width,t.rowTreePanelWidth,t.colTreePanelHeight,e),i=new Di(t.data.colTree,t.data.rowTree,t.data.heatmap,t.colorScheme,t.cornerRadius,a,r,t.useLog,t.logBase),o=void 0!==t.data.colTree,c=void 0!==t.data.rowTree;i.render(t.id,n,o,c,"top",8)},t.groupedViolinPlot=function(t=Io){console.log(t.data);let e={top:t.marginTop,right:t.marginRight,bottom:t.marginBottom,left:t.marginLeft};if(0==$(`#${t.id}`).length){let e=`Input Error: DOM ID ${t.id} is not found.`;throw alert(e),e}let n=t.width-(t.marginLeft+t.marginRight),r=t.height-(t.marginTop+t.marginBottom),a=`${t.id}Tooltip`,i=bt(t.id,t.width,t.height,e);const o=new Ao(t.data);o.render(i,n,r,t.xPadding,void 0,[],t.yLabel,t.showGroupX,t.ShowX,t.xAngle,t.showWhisker,t.showDivider,t.showLegend),o.createTooltip(a)},t}({}); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3RleC12aXouYnVuZGxlLm1pbi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbmFtZXNwYWNlcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NyZWF0b3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdG9yQWxsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbWF0Y2hlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zcGFyc2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZW50ZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jb25zdGFudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9kYXRhLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NvcnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vYXR0ci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3dpbmRvdy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zdHlsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9jbGFzc2VkLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3RleHQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaHRtbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9yYWlzZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9sb3dlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9pbnNlcnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcmVtb3ZlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2Nsb25lLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL29uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2Rpc3BhdGNoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3RBbGwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZmlsdGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2V4aXQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbWVyZ2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb3JkZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2FsbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9ub2Rlcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9ub2RlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NpemUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZW1wdHkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZWFjaC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9wcm9wZXJ0eS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9hcHBlbmQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGF0dW0uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zb3VyY2VFdmVudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL21vdXNlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvcG9pbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3RBbGwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FzY2VuZGluZy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9iaXNlY3Rvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbnVtYmVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9kZXZpYXRpb24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3ZhcmlhbmNlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9leHRlbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3JhbmdlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aWNrcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcXVhbnRpbGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21heC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWVhbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWVkaWFuLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9taW4uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3N1bS5qcyIsIi4uLy4uL3NyYy9tb2R1bGVzL3V0aWxzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvZGVmYXVsdFNvdXJjZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL25vcm1hbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1jb2xsZWN0aW9uL3NyYy9tYXAuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvbmVzdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvYXJyYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL29yZGluYWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2JhbmQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2RlZmluZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY29sb3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL21hdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2xhYi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY3ViZWhlbGl4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9iYXNpcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY29uc3RhbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2NvbG9yLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9yZ2IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2Jhc2lzQ2xvc2VkLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9udW1iZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3N0cmluZy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL3BhcnNlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy92YWx1ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvZGF0ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYXJyYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL29iamVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcm91bmQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9kZWNvbXBvc2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY3ViZWhlbGl4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jb25zdGFudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbnVtYmVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jb250aW51b3VzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0RGVjaW1hbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2V4cG9uZW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0U3BlY2lmaWVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0VHJpbS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFByZWZpeEF1dG8uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9kZWZhdWx0TG9jYWxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0Um91bmRlZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFR5cGVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvaWRlbnRpdHkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9sb2NhbGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRHcm91cC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdE51bWVyYWxzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uRml4ZWQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3RpY2tGb3JtYXQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25QcmVmaXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25Sb3VuZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbGluZWFyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2ludGVydmFsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21pbGxpc2Vjb25kLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2R1cmF0aW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2RheS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9zZWNvbmQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbWludXRlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2hvdXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvd2Vlay5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy95ZWFyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21vbnRoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y01pbnV0ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNIb3VyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y0RheS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNXZWVrLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y1llYXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjTW9udGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2xvY2FsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvZGVmYXVsdExvY2FsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvaXNvRm9ybWF0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9pc29QYXJzZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1kaXNwYXRjaC9zcmMvZGlzcGF0Y2guanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL3RpbWVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lb3V0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2NoZWR1bGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvaW50ZXJydXB0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHdlZW4uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbnRlcnBvbGF0ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3JlbW92ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdGlvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RleHQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdEFsbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2ZpbHRlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL21lcmdlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHJhbnNpdGlvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL29uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vYXR0ci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2F0dHJUd2Vlbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3N0eWxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGVUd2Vlbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2RlbGF5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZHVyYXRpb24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lYXNlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi90cmFuc2l0aW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2N1YmljLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9zZWxlY3Rpb24vaW50ZXJydXB0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY29sb3JzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvY2F0ZWdvcnkxMC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL0FjY2VudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL0RhcmsyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvUGFpcmVkLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvUGFzdGVsMS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL1Bhc3RlbDIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9TZXQxLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvU2V0Mi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL1NldDMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9yYW1wLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL0JyQkcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvUFJHbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9QaVlHLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1B1T3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvUmRCdS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9SZEd5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1JkWWxCdS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9SZFlsR24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvU3BlY3RyYWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL0J1R24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL0J1UHUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL0duQnUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL09yUmQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL1B1QnVHbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvUHVCdS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvUHVSZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvUmRQdS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvWWxHbkJ1LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9ZbEduLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9ZbE9yQnIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL1lsT3JSZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtc2luZ2xlL0JsdWVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvR3JlZW5zLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvR3JleXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLXNpbmdsZS9QdXJwbGVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvUmVkcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtc2luZ2xlL09yYW5nZXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL2N1YmVoZWxpeC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvcmFpbmJvdy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvc2luZWJvdy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvdmlyaWRpcy5qcyIsIi4uLy4uL3NyYy9tb2R1bGVzL2NvbG9ycy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvc2VxdWVudGlhbC5qcyIsIi4uLy4uL3NyYy9tb2R1bGVzL1Rvb2xiYXIuanMiLCIuLi8uLi9zcmMvbW9kdWxlcy9Ub29sdGlwLmpzIiwiLi4vLi4vc3JjL21vZHVsZXMvSGVhdG1hcC5qcyIsIi4uLy4uL3NyYy9tb2R1bGVzL0RlbmRyb0hlYXRtYXBDb25maWcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvY291bnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvZWFjaC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9lYWNoQWZ0ZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvZWFjaEJlZm9yZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9zdW0uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvc29ydC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9wYXRoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2FuY2VzdG9ycy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9kZXNjZW5kYW50cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9sZWF2ZXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvbGlua3MuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXhpcy9zcmMvYXJyYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXhpcy9zcmMvaWRlbnRpdHkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXhpcy9zcmMvYXhpcy5qcyIsIi4uLy4uL3NyYy9tb2R1bGVzL0RlbmRyb2dyYW0uanMiLCIuLi8uLi9zcmMvbW9kdWxlcy9uZXdpY2suanMiLCIuLi8uLi9zcmMvbW9kdWxlcy9EZW5kcm9IZWF0bWFwLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXBhdGgvc3JjL3BhdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2NvbnN0YW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9saW5lYXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BvaW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9saW5lLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcmVhLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXJkaW5hbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvbW9ub3RvbmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZHJhZy9zcmMvbm9ldmVudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9ub2RyYWcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYnJ1c2gvc3JjL2NvbnN0YW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9ldmVudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1icnVzaC9zcmMvbm9ldmVudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1icnVzaC9zcmMvYnJ1c2guanMiLCIuLi8uLi9zcmMvbW9kdWxlcy9rZGUuanMiLCIuLi8uLi9zcmMvbW9kdWxlcy9Hcm91cGVkVmlvbGluLmpzIiwiLi4vLi4vc3JjL21vZHVsZXMvR2VuZU1vZGVsLmpzIiwiLi4vLi4vc3JjL21vZHVsZXMvSXNvZm9ybVRyYWNrVmlld2VyLmpzIiwiLi4vLi4vc3JjL0dURXhWaXouanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHZhciB4aHRtbCA9IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHN2ZzogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB4aHRtbDogeGh0bWwsXG4gIHhsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgeG1sOiBcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wiXG59O1xuIiwiaW1wb3J0IG5hbWVzcGFjZXMgZnJvbSBcIi4vbmFtZXNwYWNlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBwcmVmaXggPSBuYW1lICs9IFwiXCIsIGkgPSBwcmVmaXguaW5kZXhPZihcIjpcIik7XG4gIGlmIChpID49IDAgJiYgKHByZWZpeCA9IG5hbWUuc2xpY2UoMCwgaSkpICE9PSBcInhtbG5zXCIpIG5hbWUgPSBuYW1lLnNsaWNlKGkgKyAxKTtcbiAgcmV0dXJuIG5hbWVzcGFjZXMuaGFzT3duUHJvcGVydHkocHJlZml4KSA/IHtzcGFjZTogbmFtZXNwYWNlc1twcmVmaXhdLCBsb2NhbDogbmFtZX0gOiBuYW1lO1xufVxuIiwiaW1wb3J0IG5hbWVzcGFjZSBmcm9tIFwiLi9uYW1lc3BhY2VcIjtcbmltcG9ydCB7eGh0bWx9IGZyb20gXCIuL25hbWVzcGFjZXNcIjtcblxuZnVuY3Rpb24gY3JlYXRvckluaGVyaXQobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRvY3VtZW50ID0gdGhpcy5vd25lckRvY3VtZW50LFxuICAgICAgICB1cmkgPSB0aGlzLm5hbWVzcGFjZVVSSTtcbiAgICByZXR1cm4gdXJpID09PSB4aHRtbCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJID09PSB4aHRtbFxuICAgICAgICA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSlcbiAgICAgICAgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlModXJpLCBuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRvckZpeGVkKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcbiAgcmV0dXJuIChmdWxsbmFtZS5sb2NhbFxuICAgICAgPyBjcmVhdG9yRml4ZWRcbiAgICAgIDogY3JlYXRvckluaGVyaXQpKGZ1bGxuYW1lKTtcbn1cbiIsImZ1bmN0aW9uIG5vbmUoKSB7fVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IG5vbmUgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiIsImZ1bmN0aW9uIGVtcHR5KCkge1xuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiBzZWxlY3RvciA9PSBudWxsID8gZW1wdHkgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiIsInZhciBtYXRjaGVyID0gZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm1hdGNoZXMoc2VsZWN0b3IpO1xuICB9O1xufTtcblxuaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgaWYgKCFlbGVtZW50Lm1hdGNoZXMpIHtcbiAgICB2YXIgdmVuZG9yTWF0Y2hlcyA9IGVsZW1lbnQud2Via2l0TWF0Y2hlc1NlbGVjdG9yXG4gICAgICAgIHx8IGVsZW1lbnQubXNNYXRjaGVzU2VsZWN0b3JcbiAgICAgICAgfHwgZWxlbWVudC5tb3pNYXRjaGVzU2VsZWN0b3JcbiAgICAgICAgfHwgZWxlbWVudC5vTWF0Y2hlc1NlbGVjdG9yO1xuICAgIG1hdGNoZXIgPSBmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdmVuZG9yTWF0Y2hlcy5jYWxsKHRoaXMsIHNlbGVjdG9yKTtcbiAgICAgIH07XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBtYXRjaGVyO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odXBkYXRlKSB7XG4gIHJldHVybiBuZXcgQXJyYXkodXBkYXRlLmxlbmd0aCk7XG59XG4iLCJpbXBvcnQgc3BhcnNlIGZyb20gXCIuL3NwYXJzZVwiO1xuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbih0aGlzLl9lbnRlciB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRW50ZXJOb2RlKHBhcmVudCwgZGF0dW0pIHtcbiAgdGhpcy5vd25lckRvY3VtZW50ID0gcGFyZW50Lm93bmVyRG9jdW1lbnQ7XG4gIHRoaXMubmFtZXNwYWNlVVJJID0gcGFyZW50Lm5hbWVzcGFjZVVSSTtcbiAgdGhpcy5fbmV4dCA9IG51bGw7XG4gIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcbiAgdGhpcy5fX2RhdGFfXyA9IGRhdHVtO1xufVxuXG5FbnRlck5vZGUucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogRW50ZXJOb2RlLFxuICBhcHBlbmRDaGlsZDogZnVuY3Rpb24oY2hpbGQpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIHRoaXMuX25leHQpOyB9LFxuICBpbnNlcnRCZWZvcmU6IGZ1bmN0aW9uKGNoaWxkLCBuZXh0KSB7IHJldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaWxkLCBuZXh0KTsgfSxcbiAgcXVlcnlTZWxlY3RvcjogZnVuY3Rpb24oc2VsZWN0b3IpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsgfSxcbiAgcXVlcnlTZWxlY3RvckFsbDogZnVuY3Rpb24oc2VsZWN0b3IpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTsgfVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQge0VudGVyTm9kZX0gZnJvbSBcIi4vZW50ZXJcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi4vY29uc3RhbnRcIjtcblxudmFyIGtleVByZWZpeCA9IFwiJFwiOyAvLyBQcm90ZWN0IGFnYWluc3Qga2V5cyBsaWtlIOKAnF9fcHJvdG9fX+KAnS5cblxuZnVuY3Rpb24gYmluZEluZGV4KHBhcmVudCwgZ3JvdXAsIGVudGVyLCB1cGRhdGUsIGV4aXQsIGRhdGEpIHtcbiAgdmFyIGkgPSAwLFxuICAgICAgbm9kZSxcbiAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuXG4gIC8vIFB1dCBhbnkgbm9uLW51bGwgbm9kZXMgdGhhdCBmaXQgaW50byB1cGRhdGUuXG4gIC8vIFB1dCBhbnkgbnVsbCBub2RlcyBpbnRvIGVudGVyLlxuICAvLyBQdXQgYW55IHJlbWFpbmluZyBkYXRhIGludG8gZW50ZXIuXG4gIGZvciAoOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgbm9kZS5fX2RhdGFfXyA9IGRhdGFbaV07XG4gICAgICB1cGRhdGVbaV0gPSBub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnRlcltpXSA9IG5ldyBFbnRlck5vZGUocGFyZW50LCBkYXRhW2ldKTtcbiAgICB9XG4gIH1cblxuICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZG9u4oCZdCBmaXQgaW50byBleGl0LlxuICBmb3IgKDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBleGl0W2ldID0gbm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYmluZEtleShwYXJlbnQsIGdyb3VwLCBlbnRlciwgdXBkYXRlLCBleGl0LCBkYXRhLCBrZXkpIHtcbiAgdmFyIGksXG4gICAgICBub2RlLFxuICAgICAgbm9kZUJ5S2V5VmFsdWUgPSB7fSxcbiAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoLFxuICAgICAga2V5VmFsdWVzID0gbmV3IEFycmF5KGdyb3VwTGVuZ3RoKSxcbiAgICAgIGtleVZhbHVlO1xuXG4gIC8vIENvbXB1dGUgdGhlIGtleSBmb3IgZWFjaCBub2RlLlxuICAvLyBJZiBtdWx0aXBsZSBub2RlcyBoYXZlIHRoZSBzYW1lIGtleSwgdGhlIGR1cGxpY2F0ZXMgYXJlIGFkZGVkIHRvIGV4aXQuXG4gIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAga2V5VmFsdWVzW2ldID0ga2V5VmFsdWUgPSBrZXlQcmVmaXggKyBrZXkuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCk7XG4gICAgICBpZiAoa2V5VmFsdWUgaW4gbm9kZUJ5S2V5VmFsdWUpIHtcbiAgICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlQnlLZXlWYWx1ZVtrZXlWYWx1ZV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIGtleSBmb3IgZWFjaCBkYXR1bS5cbiAgLy8gSWYgdGhlcmUgYSBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGtleSwgam9pbiBhbmQgYWRkIGl0IHRvIHVwZGF0ZS5cbiAgLy8gSWYgdGhlcmUgaXMgbm90IChvciB0aGUga2V5IGlzIGEgZHVwbGljYXRlKSwgYWRkIGl0IHRvIGVudGVyLlxuICBmb3IgKGkgPSAwOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7XG4gICAga2V5VmFsdWUgPSBrZXlQcmVmaXggKyBrZXkuY2FsbChwYXJlbnQsIGRhdGFbaV0sIGksIGRhdGEpO1xuICAgIGlmIChub2RlID0gbm9kZUJ5S2V5VmFsdWVba2V5VmFsdWVdKSB7XG4gICAgICB1cGRhdGVbaV0gPSBub2RlO1xuICAgICAgbm9kZS5fX2RhdGFfXyA9IGRhdGFbaV07XG4gICAgICBub2RlQnlLZXlWYWx1ZVtrZXlWYWx1ZV0gPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnRlcltpXSA9IG5ldyBFbnRlck5vZGUocGFyZW50LCBkYXRhW2ldKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgYW55IHJlbWFpbmluZyBub2RlcyB0aGF0IHdlcmUgbm90IGJvdW5kIHRvIGRhdGEgdG8gZXhpdC5cbiAgZm9yIChpID0gMDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKG5vZGVCeUtleVZhbHVlW2tleVZhbHVlc1tpXV0gPT09IG5vZGUpKSB7XG4gICAgICBleGl0W2ldID0gbm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgZGF0YSA9IG5ldyBBcnJheSh0aGlzLnNpemUoKSksIGogPSAtMTtcbiAgICB0aGlzLmVhY2goZnVuY3Rpb24oZCkgeyBkYXRhWysral0gPSBkOyB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHZhciBiaW5kID0ga2V5ID8gYmluZEtleSA6IGJpbmRJbmRleCxcbiAgICAgIHBhcmVudHMgPSB0aGlzLl9wYXJlbnRzLFxuICAgICAgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzO1xuXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdmFsdWUgPSBjb25zdGFudCh2YWx1ZSk7XG5cbiAgZm9yICh2YXIgbSA9IGdyb3Vwcy5sZW5ndGgsIHVwZGF0ZSA9IG5ldyBBcnJheShtKSwgZW50ZXIgPSBuZXcgQXJyYXkobSksIGV4aXQgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgdmFyIHBhcmVudCA9IHBhcmVudHNbal0sXG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2pdLFxuICAgICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgICAgZGF0YSA9IHZhbHVlLmNhbGwocGFyZW50LCBwYXJlbnQgJiYgcGFyZW50Ll9fZGF0YV9fLCBqLCBwYXJlbnRzKSxcbiAgICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoLFxuICAgICAgICBlbnRlckdyb3VwID0gZW50ZXJbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXG4gICAgICAgIHVwZGF0ZUdyb3VwID0gdXBkYXRlW2pdID0gbmV3IEFycmF5KGRhdGFMZW5ndGgpLFxuICAgICAgICBleGl0R3JvdXAgPSBleGl0W2pdID0gbmV3IEFycmF5KGdyb3VwTGVuZ3RoKTtcblxuICAgIGJpbmQocGFyZW50LCBncm91cCwgZW50ZXJHcm91cCwgdXBkYXRlR3JvdXAsIGV4aXRHcm91cCwgZGF0YSwga2V5KTtcblxuICAgIC8vIE5vdyBjb25uZWN0IHRoZSBlbnRlciBub2RlcyB0byB0aGVpciBmb2xsb3dpbmcgdXBkYXRlIG5vZGUsIHN1Y2ggdGhhdFxuICAgIC8vIGFwcGVuZENoaWxkIGNhbiBpbnNlcnQgdGhlIG1hdGVyaWFsaXplZCBlbnRlciBub2RlIGJlZm9yZSB0aGlzIG5vZGUsXG4gICAgLy8gcmF0aGVyIHRoYW4gYXQgdGhlIGVuZCBvZiB0aGUgcGFyZW50IG5vZGUuXG4gICAgZm9yICh2YXIgaTAgPSAwLCBpMSA9IDAsIHByZXZpb3VzLCBuZXh0OyBpMCA8IGRhdGFMZW5ndGg7ICsraTApIHtcbiAgICAgIGlmIChwcmV2aW91cyA9IGVudGVyR3JvdXBbaTBdKSB7XG4gICAgICAgIGlmIChpMCA+PSBpMSkgaTEgPSBpMCArIDE7XG4gICAgICAgIHdoaWxlICghKG5leHQgPSB1cGRhdGVHcm91cFtpMV0pICYmICsraTEgPCBkYXRhTGVuZ3RoKTtcbiAgICAgICAgcHJldmlvdXMuX25leHQgPSBuZXh0IHx8IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlID0gbmV3IFNlbGVjdGlvbih1cGRhdGUsIHBhcmVudHMpO1xuICB1cGRhdGUuX2VudGVyID0gZW50ZXI7XG4gIHVwZGF0ZS5fZXhpdCA9IGV4aXQ7XG4gIHJldHVybiB1cGRhdGU7XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29tcGFyZSkge1xuICBpZiAoIWNvbXBhcmUpIGNvbXBhcmUgPSBhc2NlbmRpbmc7XG5cbiAgZnVuY3Rpb24gY29tcGFyZU5vZGUoYSwgYikge1xuICAgIHJldHVybiBhICYmIGIgPyBjb21wYXJlKGEuX19kYXRhX18sIGIuX19kYXRhX18pIDogIWEgLSAhYjtcbiAgfVxuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHNvcnRncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHNvcnRncm91cCA9IHNvcnRncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIHNvcnRncm91cFtpXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvcnRncm91cC5zb3J0KGNvbXBhcmVOb2RlKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHNvcnRncm91cHMsIHRoaXMuX3BhcmVudHMpLm9yZGVyKCk7XG59XG5cbmZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKSB7XG4gIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogYSA+PSBiID8gMCA6IE5hTjtcbn1cbiIsImltcG9ydCBuYW1lc3BhY2UgZnJvbSBcIi4uL25hbWVzcGFjZVwiO1xuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlTlMoZnVsbG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50KG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudE5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIHZhbHVlKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgZWxzZSB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uTlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIGVsc2UgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIHYpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLm5vZGUoKTtcbiAgICByZXR1cm4gZnVsbG5hbWUubG9jYWxcbiAgICAgICAgPyBub2RlLmdldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbClcbiAgICAgICAgOiBub2RlLmdldEF0dHJpYnV0ZShmdWxsbmFtZSk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJSZW1vdmVOUyA6IGF0dHJSZW1vdmUpIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJGdW5jdGlvbk5TIDogYXR0ckZ1bmN0aW9uKVxuICAgICAgOiAoZnVsbG5hbWUubG9jYWwgPyBhdHRyQ29uc3RhbnROUyA6IGF0dHJDb25zdGFudCkpKShmdWxsbmFtZSwgdmFsdWUpKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUpIHtcbiAgcmV0dXJuIChub2RlLm93bmVyRG9jdW1lbnQgJiYgbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSAvLyBub2RlIGlzIGEgTm9kZVxuICAgICAgfHwgKG5vZGUuZG9jdW1lbnQgJiYgbm9kZSkgLy8gbm9kZSBpcyBhIFdpbmRvd1xuICAgICAgfHwgbm9kZS5kZWZhdWx0VmlldzsgLy8gbm9kZSBpcyBhIERvY3VtZW50XG59XG4iLCJpbXBvcnQgZGVmYXVsdFZpZXcgZnJvbSBcIi4uL3dpbmRvd1wiO1xuXG5mdW5jdGlvbiBzdHlsZVJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUNvbnN0YW50KG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gICAgZWxzZSB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHYsIHByaW9yaXR5KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMVxuICAgICAgPyB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcbiAgICAgICAgICAgID8gc3R5bGVSZW1vdmUgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgPyBzdHlsZUZ1bmN0aW9uXG4gICAgICAgICAgICA6IHN0eWxlQ29uc3RhbnQpKG5hbWUsIHZhbHVlLCBwcmlvcml0eSA9PSBudWxsID8gXCJcIiA6IHByaW9yaXR5KSlcbiAgICAgIDogc3R5bGVWYWx1ZSh0aGlzLm5vZGUoKSwgbmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHlsZVZhbHVlKG5vZGUsIG5hbWUpIHtcbiAgcmV0dXJuIG5vZGUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKVxuICAgICAgfHwgZGVmYXVsdFZpZXcobm9kZSkuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpO1xufVxuIiwiZnVuY3Rpb24gY2xhc3NBcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy50cmltKCkuc3BsaXQoL158XFxzKy8pO1xufVxuXG5mdW5jdGlvbiBjbGFzc0xpc3Qobm9kZSkge1xuICByZXR1cm4gbm9kZS5jbGFzc0xpc3QgfHwgbmV3IENsYXNzTGlzdChub2RlKTtcbn1cblxuZnVuY3Rpb24gQ2xhc3NMaXN0KG5vZGUpIHtcbiAgdGhpcy5fbm9kZSA9IG5vZGU7XG4gIHRoaXMuX25hbWVzID0gY2xhc3NBcnJheShub2RlLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpIHx8IFwiXCIpO1xufVxuXG5DbGFzc0xpc3QucHJvdG90eXBlID0ge1xuICBhZGQ6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgaSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGkgPCAwKSB7XG4gICAgICB0aGlzLl9uYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLl9uYW1lcy5qb2luKFwiIFwiKSk7XG4gICAgfVxuICB9LFxuICByZW1vdmU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgaSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgdGhpcy5fbmFtZXMuc3BsaWNlKGksIDEpO1xuICAgICAgdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLl9uYW1lcy5qb2luKFwiIFwiKSk7XG4gICAgfVxuICB9LFxuICBjb250YWluczogZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpID49IDA7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNsYXNzZWRBZGQobm9kZSwgbmFtZXMpIHtcbiAgdmFyIGxpc3QgPSBjbGFzc0xpc3Qobm9kZSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIGxpc3QuYWRkKG5hbWVzW2ldKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZFJlbW92ZShub2RlLCBuYW1lcykge1xuICB2YXIgbGlzdCA9IGNsYXNzTGlzdChub2RlKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbikgbGlzdC5yZW1vdmUobmFtZXNbaV0pO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkVHJ1ZShuYW1lcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY2xhc3NlZEFkZCh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRGYWxzZShuYW1lcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY2xhc3NlZFJlbW92ZSh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRGdW5jdGlvbihuYW1lcywgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICh2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpID8gY2xhc3NlZEFkZCA6IGNsYXNzZWRSZW1vdmUpKHRoaXMsIG5hbWVzKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIG5hbWVzID0gY2xhc3NBcnJheShuYW1lICsgXCJcIik7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIGxpc3QgPSBjbGFzc0xpc3QodGhpcy5ub2RlKCkpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gICAgd2hpbGUgKCsraSA8IG4pIGlmICghbGlzdC5jb250YWlucyhuYW1lc1tpXSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGNsYXNzZWRGdW5jdGlvbiA6IHZhbHVlXG4gICAgICA/IGNsYXNzZWRUcnVlXG4gICAgICA6IGNsYXNzZWRGYWxzZSkobmFtZXMsIHZhbHVlKSk7XG59XG4iLCJmdW5jdGlvbiB0ZXh0UmVtb3ZlKCkge1xuICB0aGlzLnRleHRDb250ZW50ID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gdGV4dENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRleHRGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2ID09IG51bGwgPyBcIlwiIDogdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKHZhbHVlID09IG51bGxcbiAgICAgICAgICA/IHRleHRSZW1vdmUgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IHRleHRGdW5jdGlvblxuICAgICAgICAgIDogdGV4dENvbnN0YW50KSh2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpLnRleHRDb250ZW50O1xufVxuIiwiZnVuY3Rpb24gaHRtbFJlbW92ZSgpIHtcbiAgdGhpcy5pbm5lckhUTUwgPSBcIlwiO1xufVxuXG5mdW5jdGlvbiBodG1sQ29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGh0bWxGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBodG1sUmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBodG1sRnVuY3Rpb25cbiAgICAgICAgICA6IGh0bWxDb25zdGFudCkodmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKS5pbm5lckhUTUw7XG59XG4iLCJmdW5jdGlvbiByYWlzZSgpIHtcbiAgaWYgKHRoaXMubmV4dFNpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2gocmFpc2UpO1xufVxuIiwiZnVuY3Rpb24gbG93ZXIoKSB7XG4gIGlmICh0aGlzLnByZXZpb3VzU2libGluZykgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLCB0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKGxvd2VyKTtcbn1cbiIsImltcG9ydCBjcmVhdG9yIGZyb20gXCIuLi9jcmVhdG9yXCI7XG5pbXBvcnQgc2VsZWN0b3IgZnJvbSBcIi4uL3NlbGVjdG9yXCI7XG5cbmZ1bmN0aW9uIGNvbnN0YW50TnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIGJlZm9yZSkge1xuICB2YXIgY3JlYXRlID0gdHlwZW9mIG5hbWUgPT09IFwiZnVuY3Rpb25cIiA/IG5hbWUgOiBjcmVhdG9yKG5hbWUpLFxuICAgICAgc2VsZWN0ID0gYmVmb3JlID09IG51bGwgPyBjb25zdGFudE51bGwgOiB0eXBlb2YgYmVmb3JlID09PSBcImZ1bmN0aW9uXCIgPyBiZWZvcmUgOiBzZWxlY3RvcihiZWZvcmUpO1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGNyZWF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBzZWxlY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCBudWxsKTtcbiAgfSk7XG59XG4iLCJmdW5jdGlvbiByZW1vdmUoKSB7XG4gIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gIGlmIChwYXJlbnQpIHBhcmVudC5yZW1vdmVDaGlsZCh0aGlzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2gocmVtb3ZlKTtcbn1cbiIsImZ1bmN0aW9uIHNlbGVjdGlvbl9jbG9uZVNoYWxsb3coKSB7XG4gIHJldHVybiB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuY2xvbmVOb2RlKGZhbHNlKSwgdGhpcy5uZXh0U2libGluZyk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvbl9jbG9uZURlZXAoKSB7XG4gIHJldHVybiB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuY2xvbmVOb2RlKHRydWUpLCB0aGlzLm5leHRTaWJsaW5nKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZGVlcCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZGVlcCA/IHNlbGVjdGlvbl9jbG9uZURlZXAgOiBzZWxlY3Rpb25fY2xvbmVTaGFsbG93KTtcbn1cbiIsInZhciBmaWx0ZXJFdmVudHMgPSB7fTtcblxuZXhwb3J0IHZhciBldmVudCA9IG51bGw7XG5cbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIGlmICghKFwib25tb3VzZWVudGVyXCIgaW4gZWxlbWVudCkpIHtcbiAgICBmaWx0ZXJFdmVudHMgPSB7bW91c2VlbnRlcjogXCJtb3VzZW92ZXJcIiwgbW91c2VsZWF2ZTogXCJtb3VzZW91dFwifTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaWx0ZXJDb250ZXh0TGlzdGVuZXIobGlzdGVuZXIsIGluZGV4LCBncm91cCkge1xuICBsaXN0ZW5lciA9IGNvbnRleHRMaXN0ZW5lcihsaXN0ZW5lciwgaW5kZXgsIGdyb3VwKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgIGlmICghcmVsYXRlZCB8fCAocmVsYXRlZCAhPT0gdGhpcyAmJiAhKHJlbGF0ZWQuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykgJiA4KSkpIHtcbiAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgZXZlbnQpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY29udGV4dExpc3RlbmVyKGxpc3RlbmVyLCBpbmRleCwgZ3JvdXApIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50MSkge1xuICAgIHZhciBldmVudDAgPSBldmVudDsgLy8gRXZlbnRzIGNhbiBiZSByZWVudHJhbnQgKGUuZy4sIGZvY3VzKS5cbiAgICBldmVudCA9IGV2ZW50MTtcbiAgICB0cnkge1xuICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCB0aGlzLl9fZGF0YV9fLCBpbmRleCwgZ3JvdXApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBldmVudCA9IGV2ZW50MDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lcykge1xuICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uUmVtb3ZlKHR5cGVuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgb24gPSB0aGlzLl9fb247XG4gICAgaWYgKCFvbikgcmV0dXJuO1xuICAgIGZvciAodmFyIGogPSAwLCBpID0gLTEsIG0gPSBvbi5sZW5ndGgsIG87IGogPCBtOyArK2opIHtcbiAgICAgIGlmIChvID0gb25bal0sICghdHlwZW5hbWUudHlwZSB8fCBvLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUpICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLmNhcHR1cmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25bKytpXSA9IG87XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgrK2kpIG9uLmxlbmd0aCA9IGk7XG4gICAgZWxzZSBkZWxldGUgdGhpcy5fX29uO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbkFkZCh0eXBlbmFtZSwgdmFsdWUsIGNhcHR1cmUpIHtcbiAgdmFyIHdyYXAgPSBmaWx0ZXJFdmVudHMuaGFzT3duUHJvcGVydHkodHlwZW5hbWUudHlwZSkgPyBmaWx0ZXJDb250ZXh0TGlzdGVuZXIgOiBjb250ZXh0TGlzdGVuZXI7XG4gIHJldHVybiBmdW5jdGlvbihkLCBpLCBncm91cCkge1xuICAgIHZhciBvbiA9IHRoaXMuX19vbiwgbywgbGlzdGVuZXIgPSB3cmFwKHZhbHVlLCBpLCBncm91cCk7XG4gICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgICAgaWYgKChvID0gb25bal0pLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUgJiYgby5uYW1lID09PSB0eXBlbmFtZS5uYW1lKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIsIG8uY2FwdHVyZSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIgPSBsaXN0ZW5lciwgby5jYXB0dXJlID0gY2FwdHVyZSk7XG4gICAgICAgIG8udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIodHlwZW5hbWUudHlwZSwgbGlzdGVuZXIsIGNhcHR1cmUpO1xuICAgIG8gPSB7dHlwZTogdHlwZW5hbWUudHlwZSwgbmFtZTogdHlwZW5hbWUubmFtZSwgdmFsdWU6IHZhbHVlLCBsaXN0ZW5lcjogbGlzdGVuZXIsIGNhcHR1cmU6IGNhcHR1cmV9O1xuICAgIGlmICghb24pIHRoaXMuX19vbiA9IFtvXTtcbiAgICBlbHNlIG9uLnB1c2gobyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHR5cGVuYW1lLCB2YWx1ZSwgY2FwdHVyZSkge1xuICB2YXIgdHlwZW5hbWVzID0gcGFyc2VUeXBlbmFtZXModHlwZW5hbWUgKyBcIlwiKSwgaSwgbiA9IHR5cGVuYW1lcy5sZW5ndGgsIHQ7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIG9uID0gdGhpcy5ub2RlKCkuX19vbjtcbiAgICBpZiAob24pIGZvciAodmFyIGogPSAwLCBtID0gb24ubGVuZ3RoLCBvOyBqIDwgbTsgKytqKSB7XG4gICAgICBmb3IgKGkgPSAwLCBvID0gb25bal07IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKCh0ID0gdHlwZW5hbWVzW2ldKS50eXBlID09PSBvLnR5cGUgJiYgdC5uYW1lID09PSBvLm5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gby52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBvbiA9IHZhbHVlID8gb25BZGQgOiBvblJlbW92ZTtcbiAgaWYgKGNhcHR1cmUgPT0gbnVsbCkgY2FwdHVyZSA9IGZhbHNlO1xuICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB0aGlzLmVhY2gob24odHlwZW5hbWVzW2ldLCB2YWx1ZSwgY2FwdHVyZSkpO1xuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1c3RvbUV2ZW50KGV2ZW50MSwgbGlzdGVuZXIsIHRoYXQsIGFyZ3MpIHtcbiAgdmFyIGV2ZW50MCA9IGV2ZW50O1xuICBldmVudDEuc291cmNlRXZlbnQgPSBldmVudDtcbiAgZXZlbnQgPSBldmVudDE7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9IGZpbmFsbHkge1xuICAgIGV2ZW50ID0gZXZlbnQwO1xuICB9XG59XG4iLCJpbXBvcnQgZGVmYXVsdFZpZXcgZnJvbSBcIi4uL3dpbmRvd1wiO1xuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50KG5vZGUsIHR5cGUsIHBhcmFtcykge1xuICB2YXIgd2luZG93ID0gZGVmYXVsdFZpZXcobm9kZSksXG4gICAgICBldmVudCA9IHdpbmRvdy5DdXN0b21FdmVudDtcblxuICBpZiAodHlwZW9mIGV2ZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBldmVudCA9IG5ldyBldmVudCh0eXBlLCBwYXJhbXMpO1xuICB9IGVsc2Uge1xuICAgIGV2ZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gICAgaWYgKHBhcmFtcykgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIHBhcmFtcy5idWJibGVzLCBwYXJhbXMuY2FuY2VsYWJsZSksIGV2ZW50LmRldGFpbCA9IHBhcmFtcy5kZXRhaWw7XG4gICAgZWxzZSBldmVudC5pbml0RXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQ29uc3RhbnQodHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2hFdmVudCh0aGlzLCB0eXBlLCBwYXJhbXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEZ1bmN0aW9uKHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHBhcmFtcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGRpc3BhdGNoRnVuY3Rpb25cbiAgICAgIDogZGlzcGF0Y2hDb25zdGFudCkodHlwZSwgcGFyYW1zKSk7XG59XG4iLCJpbXBvcnQgc2VsZWN0aW9uX3NlbGVjdCBmcm9tIFwiLi9zZWxlY3RcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2VsZWN0QWxsIGZyb20gXCIuL3NlbGVjdEFsbFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9maWx0ZXIgZnJvbSBcIi4vZmlsdGVyXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2RhdGEgZnJvbSBcIi4vZGF0YVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9lbnRlciBmcm9tIFwiLi9lbnRlclwiO1xuaW1wb3J0IHNlbGVjdGlvbl9leGl0IGZyb20gXCIuL2V4aXRcIjtcbmltcG9ydCBzZWxlY3Rpb25fbWVyZ2UgZnJvbSBcIi4vbWVyZ2VcIjtcbmltcG9ydCBzZWxlY3Rpb25fb3JkZXIgZnJvbSBcIi4vb3JkZXJcIjtcbmltcG9ydCBzZWxlY3Rpb25fc29ydCBmcm9tIFwiLi9zb3J0XCI7XG5pbXBvcnQgc2VsZWN0aW9uX2NhbGwgZnJvbSBcIi4vY2FsbFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9ub2RlcyBmcm9tIFwiLi9ub2Rlc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9ub2RlIGZyb20gXCIuL25vZGVcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2l6ZSBmcm9tIFwiLi9zaXplXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VtcHR5IGZyb20gXCIuL2VtcHR5XCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VhY2ggZnJvbSBcIi4vZWFjaFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9hdHRyIGZyb20gXCIuL2F0dHJcIjtcbmltcG9ydCBzZWxlY3Rpb25fc3R5bGUgZnJvbSBcIi4vc3R5bGVcIjtcbmltcG9ydCBzZWxlY3Rpb25fcHJvcGVydHkgZnJvbSBcIi4vcHJvcGVydHlcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2xhc3NlZCBmcm9tIFwiLi9jbGFzc2VkXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3RleHQgZnJvbSBcIi4vdGV4dFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9odG1sIGZyb20gXCIuL2h0bWxcIjtcbmltcG9ydCBzZWxlY3Rpb25fcmFpc2UgZnJvbSBcIi4vcmFpc2VcIjtcbmltcG9ydCBzZWxlY3Rpb25fbG93ZXIgZnJvbSBcIi4vbG93ZXJcIjtcbmltcG9ydCBzZWxlY3Rpb25fYXBwZW5kIGZyb20gXCIuL2FwcGVuZFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9pbnNlcnQgZnJvbSBcIi4vaW5zZXJ0XCI7XG5pbXBvcnQgc2VsZWN0aW9uX3JlbW92ZSBmcm9tIFwiLi9yZW1vdmVcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2xvbmUgZnJvbSBcIi4vY2xvbmVcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGF0dW0gZnJvbSBcIi4vZGF0dW1cIjtcbmltcG9ydCBzZWxlY3Rpb25fb24gZnJvbSBcIi4vb25cIjtcbmltcG9ydCBzZWxlY3Rpb25fZGlzcGF0Y2ggZnJvbSBcIi4vZGlzcGF0Y2hcIjtcblxuZXhwb3J0IHZhciByb290ID0gW251bGxdO1xuXG5leHBvcnQgZnVuY3Rpb24gU2VsZWN0aW9uKGdyb3VwcywgcGFyZW50cykge1xuICB0aGlzLl9ncm91cHMgPSBncm91cHM7XG4gIHRoaXMuX3BhcmVudHMgPSBwYXJlbnRzO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sIHJvb3QpO1xufVxuXG5TZWxlY3Rpb24ucHJvdG90eXBlID0gc2VsZWN0aW9uLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFNlbGVjdGlvbixcbiAgc2VsZWN0OiBzZWxlY3Rpb25fc2VsZWN0LFxuICBzZWxlY3RBbGw6IHNlbGVjdGlvbl9zZWxlY3RBbGwsXG4gIGZpbHRlcjogc2VsZWN0aW9uX2ZpbHRlcixcbiAgZGF0YTogc2VsZWN0aW9uX2RhdGEsXG4gIGVudGVyOiBzZWxlY3Rpb25fZW50ZXIsXG4gIGV4aXQ6IHNlbGVjdGlvbl9leGl0LFxuICBtZXJnZTogc2VsZWN0aW9uX21lcmdlLFxuICBvcmRlcjogc2VsZWN0aW9uX29yZGVyLFxuICBzb3J0OiBzZWxlY3Rpb25fc29ydCxcbiAgY2FsbDogc2VsZWN0aW9uX2NhbGwsXG4gIG5vZGVzOiBzZWxlY3Rpb25fbm9kZXMsXG4gIG5vZGU6IHNlbGVjdGlvbl9ub2RlLFxuICBzaXplOiBzZWxlY3Rpb25fc2l6ZSxcbiAgZW1wdHk6IHNlbGVjdGlvbl9lbXB0eSxcbiAgZWFjaDogc2VsZWN0aW9uX2VhY2gsXG4gIGF0dHI6IHNlbGVjdGlvbl9hdHRyLFxuICBzdHlsZTogc2VsZWN0aW9uX3N0eWxlLFxuICBwcm9wZXJ0eTogc2VsZWN0aW9uX3Byb3BlcnR5LFxuICBjbGFzc2VkOiBzZWxlY3Rpb25fY2xhc3NlZCxcbiAgdGV4dDogc2VsZWN0aW9uX3RleHQsXG4gIGh0bWw6IHNlbGVjdGlvbl9odG1sLFxuICByYWlzZTogc2VsZWN0aW9uX3JhaXNlLFxuICBsb3dlcjogc2VsZWN0aW9uX2xvd2VyLFxuICBhcHBlbmQ6IHNlbGVjdGlvbl9hcHBlbmQsXG4gIGluc2VydDogc2VsZWN0aW9uX2luc2VydCxcbiAgcmVtb3ZlOiBzZWxlY3Rpb25fcmVtb3ZlLFxuICBjbG9uZTogc2VsZWN0aW9uX2Nsb25lLFxuICBkYXR1bTogc2VsZWN0aW9uX2RhdHVtLFxuICBvbjogc2VsZWN0aW9uX29uLFxuICBkaXNwYXRjaDogc2VsZWN0aW9uX2Rpc3BhdGNoXG59O1xuXG5leHBvcnQgZGVmYXVsdCBzZWxlY3Rpb247XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCBzZWxlY3RvciBmcm9tIFwiLi4vc2VsZWN0b3JcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0KSB7XG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgc3Vibm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiAoc3Vibm9kZSA9IHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkpIHtcbiAgICAgICAgaWYgKFwiX19kYXRhX19cIiBpbiBub2RlKSBzdWJub2RlLl9fZGF0YV9fID0gbm9kZS5fX2RhdGFfXztcbiAgICAgICAgc3ViZ3JvdXBbaV0gPSBzdWJub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cyk7XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCBzZWxlY3RvckFsbCBmcm9tIFwiLi4vc2VsZWN0b3JBbGxcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0KSB7XG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yQWxsKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gW10sIHBhcmVudHMgPSBbXSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc3ViZ3JvdXBzLnB1c2goc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKTtcbiAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgcGFyZW50cyk7XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCBtYXRjaGVyIGZyb20gXCIuLi9tYXRjaGVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hdGNoKSB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggIT09IFwiZnVuY3Rpb25cIikgbWF0Y2ggPSBtYXRjaGVyKG1hdGNoKTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gW10sIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgbWF0Y2guY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpIHtcbiAgICAgICAgc3ViZ3JvdXAucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiaW1wb3J0IHNwYXJzZSBmcm9tIFwiLi9zcGFyc2VcIjtcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZXhpdCB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdGlvbikge1xuXG4gIGZvciAodmFyIGdyb3VwczAgPSB0aGlzLl9ncm91cHMsIGdyb3VwczEgPSBzZWxlY3Rpb24uX2dyb3VwcywgbTAgPSBncm91cHMwLmxlbmd0aCwgbTEgPSBncm91cHMxLmxlbmd0aCwgbSA9IE1hdGgubWluKG0wLCBtMSksIG1lcmdlcyA9IG5ldyBBcnJheShtMCksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAwID0gZ3JvdXBzMFtqXSwgZ3JvdXAxID0gZ3JvdXBzMVtqXSwgbiA9IGdyb3VwMC5sZW5ndGgsIG1lcmdlID0gbWVyZ2VzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cDBbaV0gfHwgZ3JvdXAxW2ldKSB7XG4gICAgICAgIG1lcmdlW2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKDsgaiA8IG0wOyArK2opIHtcbiAgICBtZXJnZXNbal0gPSBncm91cHMwW2pdO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24obWVyZ2VzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IC0xLCBtID0gZ3JvdXBzLmxlbmd0aDsgKytqIDwgbTspIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IGdyb3VwLmxlbmd0aCAtIDEsIG5leHQgPSBncm91cFtpXSwgbm9kZTsgLS1pID49IDA7KSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIGlmIChuZXh0ICYmIG5leHQgIT09IG5vZGUubmV4dFNpYmxpbmcpIG5leHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgbmV4dCk7XG4gICAgICAgIG5leHQgPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1swXTtcbiAgYXJndW1lbnRzWzBdID0gdGhpcztcbiAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIG5vZGVzID0gbmV3IEFycmF5KHRoaXMuc2l6ZSgpKSwgaSA9IC0xO1xuICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7IG5vZGVzWysraV0gPSB0aGlzOyB9KTtcbiAgcmV0dXJuIG5vZGVzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIHZhciBub2RlID0gZ3JvdXBbaV07XG4gICAgICBpZiAobm9kZSkgcmV0dXJuIG5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHNpemUgPSAwO1xuICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7ICsrc2l6ZTsgfSk7XG4gIHJldHVybiBzaXplO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiAhdGhpcy5ub2RlKCk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaykge1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IDAsIG0gPSBncm91cHMubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSAwLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSBjYWxsYmFjay5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cbiIsImZ1bmN0aW9uIHByb3BlcnR5UmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGRlbGV0ZSB0aGlzW25hbWVdO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUNvbnN0YW50KG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzW25hbWVdID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5RnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSBkZWxldGUgdGhpc1tuYW1lXTtcbiAgICBlbHNlIHRoaXNbbmFtZV0gPSB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDFcbiAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBwcm9wZXJ0eVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBwcm9wZXJ0eUZ1bmN0aW9uXG4gICAgICAgICAgOiBwcm9wZXJ0eUNvbnN0YW50KShuYW1lLCB2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpW25hbWVdO1xufVxuIiwiaW1wb3J0IGNyZWF0b3IgZnJvbSBcIi4uL2NyZWF0b3JcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgY3JlYXRlID0gdHlwZW9mIG5hbWUgPT09IFwiZnVuY3Rpb25cIiA/IG5hbWUgOiBjcmVhdG9yKG5hbWUpO1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoY3JlYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMucHJvcGVydHkoXCJfX2RhdGFfX1wiLCB2YWx1ZSlcbiAgICAgIDogdGhpcy5ub2RlKCkuX19kYXRhX187XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbiwgcm9vdH0gZnJvbSBcIi4vc2VsZWN0aW9uL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCJcbiAgICAgID8gbmV3IFNlbGVjdGlvbihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpXV0sIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKVxuICAgICAgOiBuZXcgU2VsZWN0aW9uKFtbc2VsZWN0b3JdXSwgcm9vdCk7XG59XG4iLCJpbXBvcnQge2V2ZW50fSBmcm9tIFwiLi9zZWxlY3Rpb24vb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBjdXJyZW50ID0gZXZlbnQsIHNvdXJjZTtcbiAgd2hpbGUgKHNvdXJjZSA9IGN1cnJlbnQuc291cmNlRXZlbnQpIGN1cnJlbnQgPSBzb3VyY2U7XG4gIHJldHVybiBjdXJyZW50O1xufVxuIiwiaW1wb3J0IHNvdXJjZUV2ZW50IGZyb20gXCIuL3NvdXJjZUV2ZW50XCI7XG5pbXBvcnQgcG9pbnQgZnJvbSBcIi4vcG9pbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSkge1xuICB2YXIgZXZlbnQgPSBzb3VyY2VFdmVudCgpO1xuICBpZiAoZXZlbnQuY2hhbmdlZFRvdWNoZXMpIGV2ZW50ID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XG4gIHJldHVybiBwb2ludChub2RlLCBldmVudCk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlLCBldmVudCkge1xuICB2YXIgc3ZnID0gbm9kZS5vd25lclNWR0VsZW1lbnQgfHwgbm9kZTtcblxuICBpZiAoc3ZnLmNyZWF0ZVNWR1BvaW50KSB7XG4gICAgdmFyIHBvaW50ID0gc3ZnLmNyZWF0ZVNWR1BvaW50KCk7XG4gICAgcG9pbnQueCA9IGV2ZW50LmNsaWVudFgsIHBvaW50LnkgPSBldmVudC5jbGllbnRZO1xuICAgIHBvaW50ID0gcG9pbnQubWF0cml4VHJhbnNmb3JtKG5vZGUuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKTtcbiAgICByZXR1cm4gW3BvaW50LngsIHBvaW50LnldO1xuICB9XG5cbiAgdmFyIHJlY3QgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICByZXR1cm4gW2V2ZW50LmNsaWVudFggLSByZWN0LmxlZnQgLSBub2RlLmNsaWVudExlZnQsIGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcCAtIG5vZGUuY2xpZW50VG9wXTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9uLCByb290fSBmcm9tIFwiLi9zZWxlY3Rpb24vaW5kZXhcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBuZXcgU2VsZWN0aW9uKFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKV0sIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKVxuICAgICAgOiBuZXcgU2VsZWN0aW9uKFtzZWxlY3RvciA9PSBudWxsID8gW10gOiBzZWxlY3Rvcl0sIHJvb3QpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZ1wiO1xuaW1wb3J0IGJpc2VjdG9yIGZyb20gXCIuL2Jpc2VjdG9yXCI7XG5cbnZhciBhc2NlbmRpbmdCaXNlY3QgPSBiaXNlY3Rvcihhc2NlbmRpbmcpO1xuZXhwb3J0IHZhciBiaXNlY3RSaWdodCA9IGFzY2VuZGluZ0Jpc2VjdC5yaWdodDtcbmV4cG9ydCB2YXIgYmlzZWN0TGVmdCA9IGFzY2VuZGluZ0Jpc2VjdC5sZWZ0O1xuZXhwb3J0IGRlZmF1bHQgYmlzZWN0UmlnaHQ7XG4iLCJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZ1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb21wYXJlKSB7XG4gIGlmIChjb21wYXJlLmxlbmd0aCA9PT0gMSkgY29tcGFyZSA9IGFzY2VuZGluZ0NvbXBhcmF0b3IoY29tcGFyZSk7XG4gIHJldHVybiB7XG4gICAgbGVmdDogZnVuY3Rpb24oYSwgeCwgbG8sIGhpKSB7XG4gICAgICBpZiAobG8gPT0gbnVsbCkgbG8gPSAwO1xuICAgICAgaWYgKGhpID09IG51bGwpIGhpID0gYS5sZW5ndGg7XG4gICAgICB3aGlsZSAobG8gPCBoaSkge1xuICAgICAgICB2YXIgbWlkID0gbG8gKyBoaSA+Pj4gMTtcbiAgICAgICAgaWYgKGNvbXBhcmUoYVttaWRdLCB4KSA8IDApIGxvID0gbWlkICsgMTtcbiAgICAgICAgZWxzZSBoaSA9IG1pZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsbztcbiAgICB9LFxuICAgIHJpZ2h0OiBmdW5jdGlvbihhLCB4LCBsbywgaGkpIHtcbiAgICAgIGlmIChsbyA9PSBudWxsKSBsbyA9IDA7XG4gICAgICBpZiAoaGkgPT0gbnVsbCkgaGkgPSBhLmxlbmd0aDtcbiAgICAgIHdoaWxlIChsbyA8IGhpKSB7XG4gICAgICAgIHZhciBtaWQgPSBsbyArIGhpID4+PiAxO1xuICAgICAgICBpZiAoY29tcGFyZShhW21pZF0sIHgpID4gMCkgaGkgPSBtaWQ7XG4gICAgICAgIGVsc2UgbG8gPSBtaWQgKyAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxvO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gYXNjZW5kaW5nQ29tcGFyYXRvcihmKSB7XG4gIHJldHVybiBmdW5jdGlvbihkLCB4KSB7XG4gICAgcmV0dXJuIGFzY2VuZGluZyhmKGQpLCB4KTtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHggPT09IG51bGwgPyBOYU4gOiAreDtcbn1cbiIsImltcG9ydCB2YXJpYW5jZSBmcm9tIFwiLi92YXJpYW5jZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhcnJheSwgZikge1xuICB2YXIgdiA9IHZhcmlhbmNlKGFycmF5LCBmKTtcbiAgcmV0dXJuIHYgPyBNYXRoLnNxcnQodikgOiB2O1xufVxuIiwiaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG0gPSAwLFxuICAgICAgaSA9IC0xLFxuICAgICAgbWVhbiA9IDAsXG4gICAgICB2YWx1ZSxcbiAgICAgIGRlbHRhLFxuICAgICAgc3VtID0gMDtcblxuICBpZiAodmFsdWVvZiA9PSBudWxsKSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICghaXNOYU4odmFsdWUgPSBudW1iZXIodmFsdWVzW2ldKSkpIHtcbiAgICAgICAgZGVsdGEgPSB2YWx1ZSAtIG1lYW47XG4gICAgICAgIG1lYW4gKz0gZGVsdGEgLyArK207XG4gICAgICAgIHN1bSArPSBkZWx0YSAqICh2YWx1ZSAtIG1lYW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVsc2Uge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAoIWlzTmFOKHZhbHVlID0gbnVtYmVyKHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSkpIHtcbiAgICAgICAgZGVsdGEgPSB2YWx1ZSAtIG1lYW47XG4gICAgICAgIG1lYW4gKz0gZGVsdGEgLyArK207XG4gICAgICAgIHN1bSArPSBkZWx0YSAqICh2YWx1ZSAtIG1lYW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChtID4gMSkgcmV0dXJuIHN1bSAvIChtIC0gMSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgaSA9IC0xLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXg7XG5cbiAgaWYgKHZhbHVlb2YgPT0gbnVsbCkge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIEZpbmQgdGhlIGZpcnN0IGNvbXBhcmFibGUgdmFsdWUuXG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVzW2ldKSAhPSBudWxsICYmIHZhbHVlID49IHZhbHVlKSB7XG4gICAgICAgIG1pbiA9IG1heCA9IHZhbHVlO1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBDb21wYXJlIHRoZSByZW1haW5pbmcgdmFsdWVzLlxuICAgICAgICAgIGlmICgodmFsdWUgPSB2YWx1ZXNbaV0pICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChtaW4gPiB2YWx1ZSkgbWluID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAobWF4IDwgdmFsdWUpIG1heCA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVsc2Uge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIEZpbmQgdGhlIGZpcnN0IGNvbXBhcmFibGUgdmFsdWUuXG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZXNbaV0sIGksIHZhbHVlcykpICE9IG51bGwgJiYgdmFsdWUgPj0gdmFsdWUpIHtcbiAgICAgICAgbWluID0gbWF4ID0gdmFsdWU7XG4gICAgICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIENvbXBhcmUgdGhlIHJlbWFpbmluZyB2YWx1ZXMuXG4gICAgICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAobWluID4gdmFsdWUpIG1pbiA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKG1heCA8IHZhbHVlKSBtYXggPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gW21pbiwgbWF4XTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gIHN0YXJ0ID0gK3N0YXJ0LCBzdG9wID0gK3N0b3AsIHN0ZXAgPSAobiA9IGFyZ3VtZW50cy5sZW5ndGgpIDwgMiA/IChzdG9wID0gc3RhcnQsIHN0YXJ0ID0gMCwgMSkgOiBuIDwgMyA/IDEgOiArc3RlcDtcblxuICB2YXIgaSA9IC0xLFxuICAgICAgbiA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApKSB8IDAsXG4gICAgICByYW5nZSA9IG5ldyBBcnJheShuKTtcblxuICB3aGlsZSAoKytpIDwgbikge1xuICAgIHJhbmdlW2ldID0gc3RhcnQgKyBpICogc3RlcDtcbiAgfVxuXG4gIHJldHVybiByYW5nZTtcbn1cbiIsInZhciBlMTAgPSBNYXRoLnNxcnQoNTApLFxuICAgIGU1ID0gTWF0aC5zcXJ0KDEwKSxcbiAgICBlMiA9IE1hdGguc3FydCgyKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHZhciByZXZlcnNlLFxuICAgICAgaSA9IC0xLFxuICAgICAgbixcbiAgICAgIHRpY2tzLFxuICAgICAgc3RlcDtcblxuICBzdG9wID0gK3N0b3AsIHN0YXJ0ID0gK3N0YXJ0LCBjb3VudCA9ICtjb3VudDtcbiAgaWYgKHN0YXJ0ID09PSBzdG9wICYmIGNvdW50ID4gMCkgcmV0dXJuIFtzdGFydF07XG4gIGlmIChyZXZlcnNlID0gc3RvcCA8IHN0YXJ0KSBuID0gc3RhcnQsIHN0YXJ0ID0gc3RvcCwgc3RvcCA9IG47XG4gIGlmICgoc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KSkgPT09IDAgfHwgIWlzRmluaXRlKHN0ZXApKSByZXR1cm4gW107XG5cbiAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgc3RhcnQgPSBNYXRoLmNlaWwoc3RhcnQgLyBzdGVwKTtcbiAgICBzdG9wID0gTWF0aC5mbG9vcihzdG9wIC8gc3RlcCk7XG4gICAgdGlja3MgPSBuZXcgQXJyYXkobiA9IE1hdGguY2VpbChzdG9wIC0gc3RhcnQgKyAxKSk7XG4gICAgd2hpbGUgKCsraSA8IG4pIHRpY2tzW2ldID0gKHN0YXJ0ICsgaSkgKiBzdGVwO1xuICB9IGVsc2Uge1xuICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAqIHN0ZXApO1xuICAgIHN0b3AgPSBNYXRoLmNlaWwoc3RvcCAqIHN0ZXApO1xuICAgIHRpY2tzID0gbmV3IEFycmF5KG4gPSBNYXRoLmNlaWwoc3RhcnQgLSBzdG9wICsgMSkpO1xuICAgIHdoaWxlICgrK2kgPCBuKSB0aWNrc1tpXSA9IChzdGFydCAtIGkpIC8gc3RlcDtcbiAgfVxuXG4gIGlmIChyZXZlcnNlKSB0aWNrcy5yZXZlcnNlKCk7XG5cbiAgcmV0dXJuIHRpY2tzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgdmFyIHN0ZXAgPSAoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSxcbiAgICAgIHBvd2VyID0gTWF0aC5mbG9vcihNYXRoLmxvZyhzdGVwKSAvIE1hdGguTE4xMCksXG4gICAgICBlcnJvciA9IHN0ZXAgLyBNYXRoLnBvdygxMCwgcG93ZXIpO1xuICByZXR1cm4gcG93ZXIgPj0gMFxuICAgICAgPyAoZXJyb3IgPj0gZTEwID8gMTAgOiBlcnJvciA+PSBlNSA/IDUgOiBlcnJvciA+PSBlMiA/IDIgOiAxKSAqIE1hdGgucG93KDEwLCBwb3dlcilcbiAgICAgIDogLU1hdGgucG93KDEwLCAtcG93ZXIpIC8gKGVycm9yID49IGUxMCA/IDEwIDogZXJyb3IgPj0gZTUgPyA1IDogZXJyb3IgPj0gZTIgPyAyIDogMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgdmFyIHN0ZXAwID0gTWF0aC5hYnMoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSxcbiAgICAgIHN0ZXAxID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2coc3RlcDApIC8gTWF0aC5MTjEwKSksXG4gICAgICBlcnJvciA9IHN0ZXAwIC8gc3RlcDE7XG4gIGlmIChlcnJvciA+PSBlMTApIHN0ZXAxICo9IDEwO1xuICBlbHNlIGlmIChlcnJvciA+PSBlNSkgc3RlcDEgKj0gNTtcbiAgZWxzZSBpZiAoZXJyb3IgPj0gZTIpIHN0ZXAxICo9IDI7XG4gIHJldHVybiBzdG9wIDwgc3RhcnQgPyAtc3RlcDEgOiBzdGVwMTtcbn1cbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgcCwgdmFsdWVvZikge1xuICBpZiAodmFsdWVvZiA9PSBudWxsKSB2YWx1ZW9mID0gbnVtYmVyO1xuICBpZiAoIShuID0gdmFsdWVzLmxlbmd0aCkpIHJldHVybjtcbiAgaWYgKChwID0gK3ApIDw9IDAgfHwgbiA8IDIpIHJldHVybiArdmFsdWVvZih2YWx1ZXNbMF0sIDAsIHZhbHVlcyk7XG4gIGlmIChwID49IDEpIHJldHVybiArdmFsdWVvZih2YWx1ZXNbbiAtIDFdLCBuIC0gMSwgdmFsdWVzKTtcbiAgdmFyIG4sXG4gICAgICBpID0gKG4gLSAxKSAqIHAsXG4gICAgICBpMCA9IE1hdGguZmxvb3IoaSksXG4gICAgICB2YWx1ZTAgPSArdmFsdWVvZih2YWx1ZXNbaTBdLCBpMCwgdmFsdWVzKSxcbiAgICAgIHZhbHVlMSA9ICt2YWx1ZW9mKHZhbHVlc1tpMCArIDFdLCBpMCArIDEsIHZhbHVlcyk7XG4gIHJldHVybiB2YWx1ZTAgKyAodmFsdWUxIC0gdmFsdWUwKSAqIChpIC0gaTApO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIGkgPSAtMSxcbiAgICAgIHZhbHVlLFxuICAgICAgbWF4O1xuXG4gIGlmICh2YWx1ZW9mID09IG51bGwpIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlc1tpXSkgIT0gbnVsbCAmJiB2YWx1ZSA+PSB2YWx1ZSkge1xuICAgICAgICBtYXggPSB2YWx1ZTtcbiAgICAgICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gQ29tcGFyZSB0aGUgcmVtYWluaW5nIHZhbHVlcy5cbiAgICAgICAgICBpZiAoKHZhbHVlID0gdmFsdWVzW2ldKSAhPSBudWxsICYmIHZhbHVlID4gbWF4KSB7XG4gICAgICAgICAgICBtYXggPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSAhPSBudWxsICYmIHZhbHVlID49IHZhbHVlKSB7XG4gICAgICAgIG1heCA9IHZhbHVlO1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBDb21wYXJlIHRoZSByZW1haW5pbmcgdmFsdWVzLlxuICAgICAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgIT0gbnVsbCAmJiB2YWx1ZSA+IG1heCkge1xuICAgICAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1heDtcbn1cbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBtID0gbixcbiAgICAgIGkgPSAtMSxcbiAgICAgIHZhbHVlLFxuICAgICAgc3VtID0gMDtcblxuICBpZiAodmFsdWVvZiA9PSBudWxsKSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICghaXNOYU4odmFsdWUgPSBudW1iZXIodmFsdWVzW2ldKSkpIHN1bSArPSB2YWx1ZTtcbiAgICAgIGVsc2UgLS1tO1xuICAgIH1cbiAgfVxuXG4gIGVsc2Uge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAoIWlzTmFOKHZhbHVlID0gbnVtYmVyKHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSkpIHN1bSArPSB2YWx1ZTtcbiAgICAgIGVsc2UgLS1tO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtKSByZXR1cm4gc3VtIC8gbTtcbn1cbiIsImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nXCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlclwiO1xuaW1wb3J0IHF1YW50aWxlIGZyb20gXCIuL3F1YW50aWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBpID0gLTEsXG4gICAgICB2YWx1ZSxcbiAgICAgIG51bWJlcnMgPSBbXTtcblxuICBpZiAodmFsdWVvZiA9PSBudWxsKSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICghaXNOYU4odmFsdWUgPSBudW1iZXIodmFsdWVzW2ldKSkpIHtcbiAgICAgICAgbnVtYmVycy5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKCFpc05hTih2YWx1ZSA9IG51bWJlcih2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkpKSB7XG4gICAgICAgIG51bWJlcnMucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHF1YW50aWxlKG51bWJlcnMuc29ydChhc2NlbmRpbmcpLCAwLjUpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIGkgPSAtMSxcbiAgICAgIHZhbHVlLFxuICAgICAgbWluO1xuXG4gIGlmICh2YWx1ZW9mID09IG51bGwpIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlc1tpXSkgIT0gbnVsbCAmJiB2YWx1ZSA+PSB2YWx1ZSkge1xuICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gQ29tcGFyZSB0aGUgcmVtYWluaW5nIHZhbHVlcy5cbiAgICAgICAgICBpZiAoKHZhbHVlID0gdmFsdWVzW2ldKSAhPSBudWxsICYmIG1pbiA+IHZhbHVlKSB7XG4gICAgICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSAhPSBudWxsICYmIHZhbHVlID49IHZhbHVlKSB7XG4gICAgICAgIG1pbiA9IHZhbHVlO1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBDb21wYXJlIHRoZSByZW1haW5pbmcgdmFsdWVzLlxuICAgICAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgIT0gbnVsbCAmJiBtaW4gPiB2YWx1ZSkge1xuICAgICAgICAgICAgbWluID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1pbjtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBpID0gLTEsXG4gICAgICB2YWx1ZSxcbiAgICAgIHN1bSA9IDA7XG5cbiAgaWYgKHZhbHVlb2YgPT0gbnVsbCkge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAodmFsdWUgPSArdmFsdWVzW2ldKSBzdW0gKz0gdmFsdWU7IC8vIE5vdGU6IHplcm8gYW5kIG51bGwgYXJlIGVxdWl2YWxlbnQuXG4gICAgfVxuICB9XG5cbiAgZWxzZSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICh2YWx1ZSA9ICt2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgc3VtICs9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdW07XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCDCqSAyMDE1IC0gMjAxOCBUaGUgQnJvYWQgSW5zdGl0dXRlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgKGh0dHBzOi8vZ2l0aHViLmNvbS9icm9hZGluc3RpdHV0ZS9ndGV4LXZpei9ibG9iL21hc3Rlci9MSUNFTlNFLm1kKVxuICovXG4vKipcbiAqIENyZWF0ZXMgYW4gU1ZHXG4gKiBAcGFyYW0gaWQge1N0cmluZ30gYSBET00gZWxlbWVudCBJRCB0aGF0IHN0YXJ0cyB3aXRoIGEgXCIjXCJcbiAqIEBwYXJhbSB3aWR0aCB7TnVtZXJpY31cbiAqIEBwYXJhbSBoZWlnaHQge051bWVyaWN9XG4gKiBAcGFyYW0gbWFyZ2luIHtPYmplY3R9IHdpdGggdHdvIGF0dHJpYnV0ZXM6IHdpZHRoIGFuZCBoZWlnaHRcbiAqIEByZXR1cm4ge1NlbGVjdGlvbn0gdGhlIGQzIHNlbGVjdGlvbiBvYmplY3Qgb2YgdGhlIFNWR1xuICovXG5cbmltcG9ydCB7c2VsZWN0fSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge3JhbmdlfSBmcm9tIFwiZDMtYXJyYXlcIjtcblxuLyoqXG4gKlxuICogQHBhcmFtIGlkIHtTdHJpbmd9IHRoZSBwYXJlbnQgZG9tIElEXG4gKiBAcGFyYW0gd2lkdGgge051bWVyaWN9OiB0aGUgb3V0ZXIgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge051bWVyaWN9OiB0aGUgb3V0ZXIgaGVpZ2h0XG4gKiBAcGFyYW0gbWFyZ2luIHtPYmplY3R9IHdpdGggYXR0cjogbGVmdCwgdG9wXG4gKiBAcGFyYW0gc3ZnSWQge1N0cmluZ31cbiAqIEByZXR1cm5zIHsqfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3ZnKGlkLCB3aWR0aCwgaGVpZ2h0LCBtYXJnaW4sIHN2Z0lkPXVuZGVmaW5lZCl7XG4gICAgaWYgKHN2Z0lkPT09dW5kZWZpbmVkKSBzdmdJZD1gJHtpZH0tc3ZnYDtcbiAgICByZXR1cm4gc2VsZWN0KFwiI1wiK2lkKS5hcHBlbmQoXCJzdmdcIilcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aClcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgaGVpZ2h0KVxuICAgICAgICAuYXR0cihcImlkXCIsIHN2Z0lkKVxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7bWFyZ2luLmxlZnR9LCAke21hcmdpbi50b3B9KWApXG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBzdmdPYmpcbiAqIEBwYXJhbSBkb3dubG9hZEZpbGVOYW1lIHtTdHJpbmd9XG4gKiBAcGFyYW0gdGVtcERvd25sb2FkRGl2SWQge1N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvd25sb2FkU3ZnKHN2Z09iaiwgZG93bmxvYWRGaWxlTmFtZSwgdGVtcERvd25sb2FkRGl2SWQpe1xuICAgIGNvbnNvbGUubG9nKHN2Z09iaik7XG4gICAgdmFyICRzdmdDb3B5ID0gc3ZnT2JqLmNsb25lKClcbiAgICAuYXR0cihcInZlcnNpb25cIiwgXCIxLjFcIilcbiAgICAuYXR0cihcInhtbG5zXCIsIFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIik7XG5cbiAgICAvLyBwYXJzZSBhbmQgYWRkIHRoZSBDU1Mgc3R5bGluZyB1c2VkIGJ5IHRoZSBTVkdcbiAgICB2YXIgc3R5bGVzID0gcGFyc2VDc3NTdHlsZXMoc3ZnT2JqLmdldCgpKTtcbiAgICAkc3ZnQ29weS5wcmVwZW5kKHN0eWxlcyk7XG5cbiAgICAkKFwiI1wiICsgdGVtcERvd25sb2FkRGl2SWQpLmh0bWwoJycpLmhpZGUoKTtcbiAgICB2YXIgc3ZnSHRtbCA9ICQoXCIjXCIgKyB0ZW1wRG93bmxvYWREaXZJZCkuYXBwZW5kKCRzdmdDb3B5KS5odG1sKCk7XG5cbiAgICB2YXIgc3ZnQmxvYiA9IG5ldyBCbG9iKFtzdmdIdG1sXSwge3R5cGU6IFwiaW1hZ2Uvc3ZnK3htbFwifSk7XG4gICAgc2F2ZUFzKHN2Z0Jsb2IsIGRvd25sb2FkRmlsZU5hbWUpO1xuXG4gICAgLy8gY2xlYXIgdGhlIHRlbXAgZG93bmxvYWQgZGl2XG4gICAgJChcIiNcIiArIHRlbXBEb3dubG9hZERpdklkKS5odG1sKCcnKS5oaWRlKCk7XG59XG4vKipcbiAqIEEgZnVuY3Rpb24gZm9yIHBhcnNpbmcgdGhlIENTUyBzdHlsZSBzaGVldCBhbmQgaW5jbHVkaW5nIHRoZSBzdHlsZSBwcm9wZXJ0aWVzIGluIHRoZSBkb3dubG9hZGFibGUgU1ZHLlxuICogQHBhcmFtIGRvbVxuICogQHJldHVybnMge0VsZW1lbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNzc1N0eWxlcyAoZG9tKSB7XG4gICAgdmFyIHVzZWQgPSBcIlwiO1xuICAgIHZhciBzaGVldHMgPSBkb2N1bWVudC5zdHlsZVNoZWV0cztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2hlZXRzLmxlbmd0aDsgaSsrKSB7IC8vIFRPRE86IHdhbGsgdGhyb3VnaCB0aGlzIGJsb2NrIG9mIGNvZGVcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHNoZWV0c1tpXS5jc3NSdWxlcyA9PSBudWxsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHZhciBydWxlcyA9IHNoZWV0c1tpXS5jc3NSdWxlcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBydWxlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBydWxlID0gcnVsZXNbal07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihydWxlLnN0eWxlKSAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbGVtcztcbiAgICAgICAgICAgICAgICAgICAgLy9Tb21lIHNlbGVjdG9ycyB3b24ndCB3b3JrLCBhbmQgbW9zdCBvZiB0aGVzZSBkb24ndCBtYXR0ZXIuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtcyA9ICQoZG9tKS5maW5kKHJ1bGUuc2VsZWN0b3JUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VkICs9IHJ1bGUuc2VsZWN0b3JUZXh0ICsgXCIgeyBcIiArIHJ1bGUuc3R5bGUuY3NzVGV4dCArIFwiIH1cXG5cIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gSW4gRmlyZWZveCwgaWYgc3R5bGVzaGVldCBvcmlnaW5hdGVzIGZyb20gYSBkaWZmIGRvbWFpbixcbiAgICAgICAgICAgIC8vIHRyeWluZyB0byBhY2Nlc3MgdGhlIGNzc1J1bGVzIHdpbGwgdGhyb3cgYSBTZWN1cml0eUVycm9yLlxuICAgICAgICAgICAgLy8gSGVuY2UsIHdlIG11c3QgdXNlIGEgdHJ5L2NhdGNoIHRvIGhhbmRsZSB0aGlzIGluIEZpcmVmb3hcbiAgICAgICAgICAgIGlmIChlLm5hbWUgIT09ICdTZWN1cml0eUVycm9yJykgdGhyb3cgZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHMuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvY3NzJyk7XG4gICAgcy5pbm5lckhUTUwgPSBcIjwhW0NEQVRBW1xcblwiICsgdXNlZCArIFwiXFxuXV0+XCI7XG5cbiAgICByZXR1cm4gcztcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIGxpc3Qgb2YgeCp5IGRhdGEgb2JqZWN0cyB3aXRoIHJhbmRvbSB2YWx1ZXNcbiAqIFRoZSBkYXRhIG9iamVjdCBoYXMgdGhpcyBzdHJ1Y3R1cmU6IHt4OiB4bGFiZWwsIHk6IHlsYWJlbCwgdmFsdWU6IHNvbWUgdmFsdWUsIGRpc3BsYXlWYWx1ZTogc29tZSB2YWx1ZX1cbiAqIEBwYXJhbSBwYXJcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tTWF0cml4KHBhcj17eDoyMCwgeToyMCwgc2NhbGVGYWN0b3I6MX0pe1xuICAgIGxldCBYID0gcmFuZ2UoMSwgcGFyLngrMSk7IC8vIGdlbmVyYXRlcyBhIDEtYmFzZWQgbGlzdC5cbiAgICBsZXQgWSA9IHJhbmdlKDEsIHBhci55KzEpO1xuICAgIGxldCBkYXRhID0gW107XG4gICAgWC5mb3JFYWNoKCh4KT0+e1xuICAgICAgICB4ID0gJ3gnICsgeC50b1N0cmluZygpO1xuICAgICAgICBZLmZvckVhY2goKHkpPT57XG4gICAgICAgICAgICB5ID0gJ3knICsgeS50b1N0cmluZygpO1xuICAgICAgICAgICAgbGV0IHYgPSBNYXRoLnJhbmRvbSgpKnBhci5zY2FsZUZhY3RvcjtcbiAgICAgICAgICAgIGRhdGEucHVzaCh7XG4gICAgICAgICAgICAgICAgeDogeCxcbiAgICAgICAgICAgICAgICB5OiB5LFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2LFxuICAgICAgICAgICAgICAgIGRpc3BsYXlWYWx1ZTogcGFyc2VGbG9hdCh2LnRvRXhwb25lbnRpYWwoKSkudG9QcmVjaXNpb24oMylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH0pO1xuICAgIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgbGlzdCBvZiByYW5kb20gdmFsdWVzXG4gKiBAcGFyYW0gcGFyXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVJhbmRvbUxpc3QocGFyPXtuOjEwMCwgc2NhbGVGYWN0b3I6MX0pIHtcbiAgICBsZXQgWCA9IHJhbmdlKDAsIHBhci5uKTsgLy8gZ2VuZXJhdGVzIGEgMS1iYXNlZCBsaXN0LlxuICAgIGxldCBkYXRhID0gW107XG4gICAgcmV0dXJuIFgubWFwKCh4KSA9PiBNYXRoLnJhbmRvbSgpICogcGFyLnNjYWxlRmFjdG9yKTtcblxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKTtcbn1cbiIsImltcG9ydCBkZWZhdWx0U291cmNlIGZyb20gXCIuL2RlZmF1bHRTb3VyY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHNvdXJjZVJhbmRvbU5vcm1hbChzb3VyY2UpIHtcbiAgZnVuY3Rpb24gcmFuZG9tTm9ybWFsKG11LCBzaWdtYSkge1xuICAgIHZhciB4LCByO1xuICAgIG11ID0gbXUgPT0gbnVsbCA/IDAgOiArbXU7XG4gICAgc2lnbWEgPSBzaWdtYSA9PSBudWxsID8gMSA6ICtzaWdtYTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgeTtcblxuICAgICAgLy8gSWYgYXZhaWxhYmxlLCB1c2UgdGhlIHNlY29uZCBwcmV2aW91c2x5LWdlbmVyYXRlZCB1bmlmb3JtIHJhbmRvbS5cbiAgICAgIGlmICh4ICE9IG51bGwpIHkgPSB4LCB4ID0gbnVsbDtcblxuICAgICAgLy8gT3RoZXJ3aXNlLCBnZW5lcmF0ZSBhIG5ldyB4IGFuZCB5LlxuICAgICAgZWxzZSBkbyB7XG4gICAgICAgIHggPSBzb3VyY2UoKSAqIDIgLSAxO1xuICAgICAgICB5ID0gc291cmNlKCkgKiAyIC0gMTtcbiAgICAgICAgciA9IHggKiB4ICsgeSAqIHk7XG4gICAgICB9IHdoaWxlICghciB8fCByID4gMSk7XG5cbiAgICAgIHJldHVybiBtdSArIHNpZ21hICogeSAqIE1hdGguc3FydCgtMiAqIE1hdGgubG9nKHIpIC8gcik7XG4gICAgfTtcbiAgfVxuXG4gIHJhbmRvbU5vcm1hbC5zb3VyY2UgPSBzb3VyY2VSYW5kb21Ob3JtYWw7XG5cbiAgcmV0dXJuIHJhbmRvbU5vcm1hbDtcbn0pKGRlZmF1bHRTb3VyY2UpO1xuIiwiZXhwb3J0IHZhciBwcmVmaXggPSBcIiRcIjtcblxuZnVuY3Rpb24gTWFwKCkge31cblxuTWFwLnByb3RvdHlwZSA9IG1hcC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBNYXAsXG4gIGhhczogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIChwcmVmaXggKyBrZXkpIGluIHRoaXM7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIHRoaXNbcHJlZml4ICsga2V5XTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAgdGhpc1twcmVmaXggKyBrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHJlbW92ZTogZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIHByb3BlcnR5ID0gcHJlZml4ICsga2V5O1xuICAgIHJldHVybiBwcm9wZXJ0eSBpbiB0aGlzICYmIGRlbGV0ZSB0aGlzW3Byb3BlcnR5XTtcbiAgfSxcbiAgY2xlYXI6IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSBkZWxldGUgdGhpc1twcm9wZXJ0eV07XG4gIH0sXG4gIGtleXM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIGtleXMucHVzaChwcm9wZXJ0eS5zbGljZSgxKSk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH0sXG4gIHZhbHVlczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSB2YWx1ZXMucHVzaCh0aGlzW3Byb3BlcnR5XSk7XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfSxcbiAgZW50cmllczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGVudHJpZXMgPSBbXTtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgZW50cmllcy5wdXNoKHtrZXk6IHByb3BlcnR5LnNsaWNlKDEpLCB2YWx1ZTogdGhpc1twcm9wZXJ0eV19KTtcbiAgICByZXR1cm4gZW50cmllcztcbiAgfSxcbiAgc2l6ZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNpemUgPSAwO1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSArK3NpemU7XG4gICAgcmV0dXJuIHNpemU7XG4gIH0sXG4gIGVtcHR5OiBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBlYWNoOiBmdW5jdGlvbihmKSB7XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIGYodGhpc1twcm9wZXJ0eV0sIHByb3BlcnR5LnNsaWNlKDEpLCB0aGlzKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gbWFwKG9iamVjdCwgZikge1xuICB2YXIgbWFwID0gbmV3IE1hcDtcblxuICAvLyBDb3B5IGNvbnN0cnVjdG9yLlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTWFwKSBvYmplY3QuZWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7IG1hcC5zZXQoa2V5LCB2YWx1ZSk7IH0pO1xuXG4gIC8vIEluZGV4IGFycmF5IGJ5IG51bWVyaWMgaW5kZXggb3Igc3BlY2lmaWVkIGtleSBmdW5jdGlvbi5cbiAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgdmFyIGkgPSAtMSxcbiAgICAgICAgbiA9IG9iamVjdC5sZW5ndGgsXG4gICAgICAgIG87XG5cbiAgICBpZiAoZiA9PSBudWxsKSB3aGlsZSAoKytpIDwgbikgbWFwLnNldChpLCBvYmplY3RbaV0pO1xuICAgIGVsc2Ugd2hpbGUgKCsraSA8IG4pIG1hcC5zZXQoZihvID0gb2JqZWN0W2ldLCBpLCBvYmplY3QpLCBvKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgb2JqZWN0IHRvIG1hcC5cbiAgZWxzZSBpZiAob2JqZWN0KSBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBtYXAuc2V0KGtleSwgb2JqZWN0W2tleV0pO1xuXG4gIHJldHVybiBtYXA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcDtcbiIsImltcG9ydCBtYXAgZnJvbSBcIi4vbWFwXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIga2V5cyA9IFtdLFxuICAgICAgc29ydEtleXMgPSBbXSxcbiAgICAgIHNvcnRWYWx1ZXMsXG4gICAgICByb2xsdXAsXG4gICAgICBuZXN0O1xuXG4gIGZ1bmN0aW9uIGFwcGx5KGFycmF5LCBkZXB0aCwgY3JlYXRlUmVzdWx0LCBzZXRSZXN1bHQpIHtcbiAgICBpZiAoZGVwdGggPj0ga2V5cy5sZW5ndGgpIHtcbiAgICAgIGlmIChzb3J0VmFsdWVzICE9IG51bGwpIGFycmF5LnNvcnQoc29ydFZhbHVlcyk7XG4gICAgICByZXR1cm4gcm9sbHVwICE9IG51bGwgPyByb2xsdXAoYXJyYXkpIDogYXJyYXk7XG4gICAgfVxuXG4gICAgdmFyIGkgPSAtMSxcbiAgICAgICAgbiA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAga2V5ID0ga2V5c1tkZXB0aCsrXSxcbiAgICAgICAga2V5VmFsdWUsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZXNCeUtleSA9IG1hcCgpLFxuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIHJlc3VsdCA9IGNyZWF0ZVJlc3VsdCgpO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICh2YWx1ZXMgPSB2YWx1ZXNCeUtleS5nZXQoa2V5VmFsdWUgPSBrZXkodmFsdWUgPSBhcnJheVtpXSkgKyBcIlwiKSkge1xuICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZXNCeUtleS5zZXQoa2V5VmFsdWUsIFt2YWx1ZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhbHVlc0J5S2V5LmVhY2goZnVuY3Rpb24odmFsdWVzLCBrZXkpIHtcbiAgICAgIHNldFJlc3VsdChyZXN1bHQsIGtleSwgYXBwbHkodmFsdWVzLCBkZXB0aCwgY3JlYXRlUmVzdWx0LCBzZXRSZXN1bHQpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBlbnRyaWVzKG1hcCwgZGVwdGgpIHtcbiAgICBpZiAoKytkZXB0aCA+IGtleXMubGVuZ3RoKSByZXR1cm4gbWFwO1xuICAgIHZhciBhcnJheSwgc29ydEtleSA9IHNvcnRLZXlzW2RlcHRoIC0gMV07XG4gICAgaWYgKHJvbGx1cCAhPSBudWxsICYmIGRlcHRoID49IGtleXMubGVuZ3RoKSBhcnJheSA9IG1hcC5lbnRyaWVzKCk7XG4gICAgZWxzZSBhcnJheSA9IFtdLCBtYXAuZWFjaChmdW5jdGlvbih2LCBrKSB7IGFycmF5LnB1c2goe2tleTogaywgdmFsdWVzOiBlbnRyaWVzKHYsIGRlcHRoKX0pOyB9KTtcbiAgICByZXR1cm4gc29ydEtleSAhPSBudWxsID8gYXJyYXkuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBzb3J0S2V5KGEua2V5LCBiLmtleSk7IH0pIDogYXJyYXk7XG4gIH1cblxuICByZXR1cm4gbmVzdCA9IHtcbiAgICBvYmplY3Q6IGZ1bmN0aW9uKGFycmF5KSB7IHJldHVybiBhcHBseShhcnJheSwgMCwgY3JlYXRlT2JqZWN0LCBzZXRPYmplY3QpOyB9LFxuICAgIG1hcDogZnVuY3Rpb24oYXJyYXkpIHsgcmV0dXJuIGFwcGx5KGFycmF5LCAwLCBjcmVhdGVNYXAsIHNldE1hcCk7IH0sXG4gICAgZW50cmllczogZnVuY3Rpb24oYXJyYXkpIHsgcmV0dXJuIGVudHJpZXMoYXBwbHkoYXJyYXksIDAsIGNyZWF0ZU1hcCwgc2V0TWFwKSwgMCk7IH0sXG4gICAga2V5OiBmdW5jdGlvbihkKSB7IGtleXMucHVzaChkKTsgcmV0dXJuIG5lc3Q7IH0sXG4gICAgc29ydEtleXM6IGZ1bmN0aW9uKG9yZGVyKSB7IHNvcnRLZXlzW2tleXMubGVuZ3RoIC0gMV0gPSBvcmRlcjsgcmV0dXJuIG5lc3Q7IH0sXG4gICAgc29ydFZhbHVlczogZnVuY3Rpb24ob3JkZXIpIHsgc29ydFZhbHVlcyA9IG9yZGVyOyByZXR1cm4gbmVzdDsgfSxcbiAgICByb2xsdXA6IGZ1bmN0aW9uKGYpIHsgcm9sbHVwID0gZjsgcmV0dXJuIG5lc3Q7IH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT2JqZWN0KCkge1xuICByZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIHNldE9iamVjdChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTWFwKCkge1xuICByZXR1cm4gbWFwKCk7XG59XG5cbmZ1bmN0aW9uIHNldE1hcChtYXAsIGtleSwgdmFsdWUpIHtcbiAgbWFwLnNldChrZXksIHZhbHVlKTtcbn1cbiIsInZhciBhcnJheSA9IEFycmF5LnByb3RvdHlwZTtcblxuZXhwb3J0IHZhciBtYXAgPSBhcnJheS5tYXA7XG5leHBvcnQgdmFyIHNsaWNlID0gYXJyYXkuc2xpY2U7XG4iLCJpbXBvcnQge21hcH0gZnJvbSBcImQzLWNvbGxlY3Rpb25cIjtcbmltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5XCI7XG5cbmV4cG9ydCB2YXIgaW1wbGljaXQgPSB7bmFtZTogXCJpbXBsaWNpdFwifTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JkaW5hbChyYW5nZSkge1xuICB2YXIgaW5kZXggPSBtYXAoKSxcbiAgICAgIGRvbWFpbiA9IFtdLFxuICAgICAgdW5rbm93biA9IGltcGxpY2l0O1xuXG4gIHJhbmdlID0gcmFuZ2UgPT0gbnVsbCA/IFtdIDogc2xpY2UuY2FsbChyYW5nZSk7XG5cbiAgZnVuY3Rpb24gc2NhbGUoZCkge1xuICAgIHZhciBrZXkgPSBkICsgXCJcIiwgaSA9IGluZGV4LmdldChrZXkpO1xuICAgIGlmICghaSkge1xuICAgICAgaWYgKHVua25vd24gIT09IGltcGxpY2l0KSByZXR1cm4gdW5rbm93bjtcbiAgICAgIGluZGV4LnNldChrZXksIGkgPSBkb21haW4ucHVzaChkKSk7XG4gICAgfVxuICAgIHJldHVybiByYW5nZVsoaSAtIDEpICUgcmFuZ2UubGVuZ3RoXTtcbiAgfVxuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBkb21haW4uc2xpY2UoKTtcbiAgICBkb21haW4gPSBbXSwgaW5kZXggPSBtYXAoKTtcbiAgICB2YXIgaSA9IC0xLCBuID0gXy5sZW5ndGgsIGQsIGtleTtcbiAgICB3aGlsZSAoKytpIDwgbikgaWYgKCFpbmRleC5oYXMoa2V5ID0gKGQgPSBfW2ldKSArIFwiXCIpKSBpbmRleC5zZXQoa2V5LCBkb21haW4ucHVzaChkKSk7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gc2xpY2UuY2FsbChfKSwgc2NhbGUpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gb3JkaW5hbCgpXG4gICAgICAgIC5kb21haW4oZG9tYWluKVxuICAgICAgICAucmFuZ2UocmFuZ2UpXG4gICAgICAgIC51bmtub3duKHVua25vd24pO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cbiIsImltcG9ydCB7cmFuZ2UgYXMgc2VxdWVuY2V9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IG9yZGluYWwgZnJvbSBcIi4vb3JkaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiYW5kKCkge1xuICB2YXIgc2NhbGUgPSBvcmRpbmFsKCkudW5rbm93bih1bmRlZmluZWQpLFxuICAgICAgZG9tYWluID0gc2NhbGUuZG9tYWluLFxuICAgICAgb3JkaW5hbFJhbmdlID0gc2NhbGUucmFuZ2UsXG4gICAgICByYW5nZSA9IFswLCAxXSxcbiAgICAgIHN0ZXAsXG4gICAgICBiYW5kd2lkdGgsXG4gICAgICByb3VuZCA9IGZhbHNlLFxuICAgICAgcGFkZGluZ0lubmVyID0gMCxcbiAgICAgIHBhZGRpbmdPdXRlciA9IDAsXG4gICAgICBhbGlnbiA9IDAuNTtcblxuICBkZWxldGUgc2NhbGUudW5rbm93bjtcblxuICBmdW5jdGlvbiByZXNjYWxlKCkge1xuICAgIHZhciBuID0gZG9tYWluKCkubGVuZ3RoLFxuICAgICAgICByZXZlcnNlID0gcmFuZ2VbMV0gPCByYW5nZVswXSxcbiAgICAgICAgc3RhcnQgPSByYW5nZVtyZXZlcnNlIC0gMF0sXG4gICAgICAgIHN0b3AgPSByYW5nZVsxIC0gcmV2ZXJzZV07XG4gICAgc3RlcCA9IChzdG9wIC0gc3RhcnQpIC8gTWF0aC5tYXgoMSwgbiAtIHBhZGRpbmdJbm5lciArIHBhZGRpbmdPdXRlciAqIDIpO1xuICAgIGlmIChyb3VuZCkgc3RlcCA9IE1hdGguZmxvb3Ioc3RlcCk7XG4gICAgc3RhcnQgKz0gKHN0b3AgLSBzdGFydCAtIHN0ZXAgKiAobiAtIHBhZGRpbmdJbm5lcikpICogYWxpZ247XG4gICAgYmFuZHdpZHRoID0gc3RlcCAqICgxIC0gcGFkZGluZ0lubmVyKTtcbiAgICBpZiAocm91bmQpIHN0YXJ0ID0gTWF0aC5yb3VuZChzdGFydCksIGJhbmR3aWR0aCA9IE1hdGgucm91bmQoYmFuZHdpZHRoKTtcbiAgICB2YXIgdmFsdWVzID0gc2VxdWVuY2UobikubWFwKGZ1bmN0aW9uKGkpIHsgcmV0dXJuIHN0YXJ0ICsgc3RlcCAqIGk7IH0pO1xuICAgIHJldHVybiBvcmRpbmFsUmFuZ2UocmV2ZXJzZSA/IHZhbHVlcy5yZXZlcnNlKCkgOiB2YWx1ZXMpO1xuICB9XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRvbWFpbihfKSwgcmVzY2FsZSgpKSA6IGRvbWFpbigpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gWytfWzBdLCArX1sxXV0sIHJlc2NhbGUoKSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlUm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIHJhbmdlID0gWytfWzBdLCArX1sxXV0sIHJvdW5kID0gdHJ1ZSwgcmVzY2FsZSgpO1xuICB9O1xuXG4gIHNjYWxlLmJhbmR3aWR0aCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiYW5kd2lkdGg7XG4gIH07XG5cbiAgc2NhbGUuc3RlcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBzdGVwO1xuICB9O1xuXG4gIHNjYWxlLnJvdW5kID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJvdW5kID0gISFfLCByZXNjYWxlKCkpIDogcm91bmQ7XG4gIH07XG5cbiAgc2NhbGUucGFkZGluZyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRkaW5nSW5uZXIgPSBwYWRkaW5nT3V0ZXIgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBfKSksIHJlc2NhbGUoKSkgOiBwYWRkaW5nSW5uZXI7XG4gIH07XG5cbiAgc2NhbGUucGFkZGluZ0lubmVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmdJbm5lciA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIF8pKSwgcmVzY2FsZSgpKSA6IHBhZGRpbmdJbm5lcjtcbiAgfTtcblxuICBzY2FsZS5wYWRkaW5nT3V0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ091dGVyID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgXykpLCByZXNjYWxlKCkpIDogcGFkZGluZ091dGVyO1xuICB9O1xuXG4gIHNjYWxlLmFsaWduID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFsaWduID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgXykpLCByZXNjYWxlKCkpIDogYWxpZ247XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiYW5kKClcbiAgICAgICAgLmRvbWFpbihkb21haW4oKSlcbiAgICAgICAgLnJhbmdlKHJhbmdlKVxuICAgICAgICAucm91bmQocm91bmQpXG4gICAgICAgIC5wYWRkaW5nSW5uZXIocGFkZGluZ0lubmVyKVxuICAgICAgICAucGFkZGluZ091dGVyKHBhZGRpbmdPdXRlcilcbiAgICAgICAgLmFsaWduKGFsaWduKTtcbiAgfTtcblxuICByZXR1cm4gcmVzY2FsZSgpO1xufVxuXG5mdW5jdGlvbiBwb2ludGlzaChzY2FsZSkge1xuICB2YXIgY29weSA9IHNjYWxlLmNvcHk7XG5cbiAgc2NhbGUucGFkZGluZyA9IHNjYWxlLnBhZGRpbmdPdXRlcjtcbiAgZGVsZXRlIHNjYWxlLnBhZGRpbmdJbm5lcjtcbiAgZGVsZXRlIHNjYWxlLnBhZGRpbmdPdXRlcjtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHBvaW50aXNoKGNvcHkoKSk7XG4gIH07XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9pbnQoKSB7XG4gIHJldHVybiBwb2ludGlzaChiYW5kKCkucGFkZGluZ0lubmVyKDEpKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnN0cnVjdG9yLCBmYWN0b3J5LCBwcm90b3R5cGUpIHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gZmFjdG9yeS5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gIHByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kKHBhcmVudCwgZGVmaW5pdGlvbikge1xuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShwYXJlbnQucHJvdG90eXBlKTtcbiAgZm9yICh2YXIga2V5IGluIGRlZmluaXRpb24pIHByb3RvdHlwZVtrZXldID0gZGVmaW5pdGlvbltrZXldO1xuICByZXR1cm4gcHJvdG90eXBlO1xufVxuIiwiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBDb2xvcigpIHt9XG5cbmV4cG9ydCB2YXIgZGFya2VyID0gMC43O1xuZXhwb3J0IHZhciBicmlnaHRlciA9IDEgLyBkYXJrZXI7XG5cbnZhciByZUkgPSBcIlxcXFxzKihbKy1dP1xcXFxkKylcXFxccypcIixcbiAgICByZU4gPSBcIlxcXFxzKihbKy1dP1xcXFxkKlxcXFwuP1xcXFxkKyg/OltlRV1bKy1dP1xcXFxkKyk/KVxcXFxzKlwiLFxuICAgIHJlUCA9IFwiXFxcXHMqKFsrLV0/XFxcXGQqXFxcXC4/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pJVxcXFxzKlwiLFxuICAgIHJlSGV4MyA9IC9eIyhbMC05YS1mXXszfSkkLyxcbiAgICByZUhleDYgPSAvXiMoWzAtOWEtZl17Nn0pJC8sXG4gICAgcmVSZ2JJbnRlZ2VyID0gbmV3IFJlZ0V4cChcIl5yZ2JcXFxcKFwiICsgW3JlSSwgcmVJLCByZUldICsgXCJcXFxcKSRcIiksXG4gICAgcmVSZ2JQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5yZ2JcXFxcKFwiICsgW3JlUCwgcmVQLCByZVBdICsgXCJcXFxcKSRcIiksXG4gICAgcmVSZ2JhSW50ZWdlciA9IG5ldyBSZWdFeHAoXCJecmdiYVxcXFwoXCIgKyBbcmVJLCByZUksIHJlSSwgcmVOXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlUmdiYVBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXnJnYmFcXFxcKFwiICsgW3JlUCwgcmVQLCByZVAsIHJlTl0gKyBcIlxcXFwpJFwiKSxcbiAgICByZUhzbFBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXmhzbFxcXFwoXCIgKyBbcmVOLCByZVAsIHJlUF0gKyBcIlxcXFwpJFwiKSxcbiAgICByZUhzbGFQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5oc2xhXFxcXChcIiArIFtyZU4sIHJlUCwgcmVQLCByZU5dICsgXCJcXFxcKSRcIik7XG5cbnZhciBuYW1lZCA9IHtcbiAgYWxpY2VibHVlOiAweGYwZjhmZixcbiAgYW50aXF1ZXdoaXRlOiAweGZhZWJkNyxcbiAgYXF1YTogMHgwMGZmZmYsXG4gIGFxdWFtYXJpbmU6IDB4N2ZmZmQ0LFxuICBhenVyZTogMHhmMGZmZmYsXG4gIGJlaWdlOiAweGY1ZjVkYyxcbiAgYmlzcXVlOiAweGZmZTRjNCxcbiAgYmxhY2s6IDB4MDAwMDAwLFxuICBibGFuY2hlZGFsbW9uZDogMHhmZmViY2QsXG4gIGJsdWU6IDB4MDAwMGZmLFxuICBibHVldmlvbGV0OiAweDhhMmJlMixcbiAgYnJvd246IDB4YTUyYTJhLFxuICBidXJseXdvb2Q6IDB4ZGViODg3LFxuICBjYWRldGJsdWU6IDB4NWY5ZWEwLFxuICBjaGFydHJldXNlOiAweDdmZmYwMCxcbiAgY2hvY29sYXRlOiAweGQyNjkxZSxcbiAgY29yYWw6IDB4ZmY3ZjUwLFxuICBjb3JuZmxvd2VyYmx1ZTogMHg2NDk1ZWQsXG4gIGNvcm5zaWxrOiAweGZmZjhkYyxcbiAgY3JpbXNvbjogMHhkYzE0M2MsXG4gIGN5YW46IDB4MDBmZmZmLFxuICBkYXJrYmx1ZTogMHgwMDAwOGIsXG4gIGRhcmtjeWFuOiAweDAwOGI4YixcbiAgZGFya2dvbGRlbnJvZDogMHhiODg2MGIsXG4gIGRhcmtncmF5OiAweGE5YTlhOSxcbiAgZGFya2dyZWVuOiAweDAwNjQwMCxcbiAgZGFya2dyZXk6IDB4YTlhOWE5LFxuICBkYXJra2hha2k6IDB4YmRiNzZiLFxuICBkYXJrbWFnZW50YTogMHg4YjAwOGIsXG4gIGRhcmtvbGl2ZWdyZWVuOiAweDU1NmIyZixcbiAgZGFya29yYW5nZTogMHhmZjhjMDAsXG4gIGRhcmtvcmNoaWQ6IDB4OTkzMmNjLFxuICBkYXJrcmVkOiAweDhiMDAwMCxcbiAgZGFya3NhbG1vbjogMHhlOTk2N2EsXG4gIGRhcmtzZWFncmVlbjogMHg4ZmJjOGYsXG4gIGRhcmtzbGF0ZWJsdWU6IDB4NDgzZDhiLFxuICBkYXJrc2xhdGVncmF5OiAweDJmNGY0ZixcbiAgZGFya3NsYXRlZ3JleTogMHgyZjRmNGYsXG4gIGRhcmt0dXJxdW9pc2U6IDB4MDBjZWQxLFxuICBkYXJrdmlvbGV0OiAweDk0MDBkMyxcbiAgZGVlcHBpbms6IDB4ZmYxNDkzLFxuICBkZWVwc2t5Ymx1ZTogMHgwMGJmZmYsXG4gIGRpbWdyYXk6IDB4Njk2OTY5LFxuICBkaW1ncmV5OiAweDY5Njk2OSxcbiAgZG9kZ2VyYmx1ZTogMHgxZTkwZmYsXG4gIGZpcmVicmljazogMHhiMjIyMjIsXG4gIGZsb3JhbHdoaXRlOiAweGZmZmFmMCxcbiAgZm9yZXN0Z3JlZW46IDB4MjI4YjIyLFxuICBmdWNoc2lhOiAweGZmMDBmZixcbiAgZ2FpbnNib3JvOiAweGRjZGNkYyxcbiAgZ2hvc3R3aGl0ZTogMHhmOGY4ZmYsXG4gIGdvbGQ6IDB4ZmZkNzAwLFxuICBnb2xkZW5yb2Q6IDB4ZGFhNTIwLFxuICBncmF5OiAweDgwODA4MCxcbiAgZ3JlZW46IDB4MDA4MDAwLFxuICBncmVlbnllbGxvdzogMHhhZGZmMmYsXG4gIGdyZXk6IDB4ODA4MDgwLFxuICBob25leWRldzogMHhmMGZmZjAsXG4gIGhvdHBpbms6IDB4ZmY2OWI0LFxuICBpbmRpYW5yZWQ6IDB4Y2Q1YzVjLFxuICBpbmRpZ286IDB4NGIwMDgyLFxuICBpdm9yeTogMHhmZmZmZjAsXG4gIGtoYWtpOiAweGYwZTY4YyxcbiAgbGF2ZW5kZXI6IDB4ZTZlNmZhLFxuICBsYXZlbmRlcmJsdXNoOiAweGZmZjBmNSxcbiAgbGF3bmdyZWVuOiAweDdjZmMwMCxcbiAgbGVtb25jaGlmZm9uOiAweGZmZmFjZCxcbiAgbGlnaHRibHVlOiAweGFkZDhlNixcbiAgbGlnaHRjb3JhbDogMHhmMDgwODAsXG4gIGxpZ2h0Y3lhbjogMHhlMGZmZmYsXG4gIGxpZ2h0Z29sZGVucm9keWVsbG93OiAweGZhZmFkMixcbiAgbGlnaHRncmF5OiAweGQzZDNkMyxcbiAgbGlnaHRncmVlbjogMHg5MGVlOTAsXG4gIGxpZ2h0Z3JleTogMHhkM2QzZDMsXG4gIGxpZ2h0cGluazogMHhmZmI2YzEsXG4gIGxpZ2h0c2FsbW9uOiAweGZmYTA3YSxcbiAgbGlnaHRzZWFncmVlbjogMHgyMGIyYWEsXG4gIGxpZ2h0c2t5Ymx1ZTogMHg4N2NlZmEsXG4gIGxpZ2h0c2xhdGVncmF5OiAweDc3ODg5OSxcbiAgbGlnaHRzbGF0ZWdyZXk6IDB4Nzc4ODk5LFxuICBsaWdodHN0ZWVsYmx1ZTogMHhiMGM0ZGUsXG4gIGxpZ2h0eWVsbG93OiAweGZmZmZlMCxcbiAgbGltZTogMHgwMGZmMDAsXG4gIGxpbWVncmVlbjogMHgzMmNkMzIsXG4gIGxpbmVuOiAweGZhZjBlNixcbiAgbWFnZW50YTogMHhmZjAwZmYsXG4gIG1hcm9vbjogMHg4MDAwMDAsXG4gIG1lZGl1bWFxdWFtYXJpbmU6IDB4NjZjZGFhLFxuICBtZWRpdW1ibHVlOiAweDAwMDBjZCxcbiAgbWVkaXVtb3JjaGlkOiAweGJhNTVkMyxcbiAgbWVkaXVtcHVycGxlOiAweDkzNzBkYixcbiAgbWVkaXVtc2VhZ3JlZW46IDB4M2NiMzcxLFxuICBtZWRpdW1zbGF0ZWJsdWU6IDB4N2I2OGVlLFxuICBtZWRpdW1zcHJpbmdncmVlbjogMHgwMGZhOWEsXG4gIG1lZGl1bXR1cnF1b2lzZTogMHg0OGQxY2MsXG4gIG1lZGl1bXZpb2xldHJlZDogMHhjNzE1ODUsXG4gIG1pZG5pZ2h0Ymx1ZTogMHgxOTE5NzAsXG4gIG1pbnRjcmVhbTogMHhmNWZmZmEsXG4gIG1pc3R5cm9zZTogMHhmZmU0ZTEsXG4gIG1vY2Nhc2luOiAweGZmZTRiNSxcbiAgbmF2YWpvd2hpdGU6IDB4ZmZkZWFkLFxuICBuYXZ5OiAweDAwMDA4MCxcbiAgb2xkbGFjZTogMHhmZGY1ZTYsXG4gIG9saXZlOiAweDgwODAwMCxcbiAgb2xpdmVkcmFiOiAweDZiOGUyMyxcbiAgb3JhbmdlOiAweGZmYTUwMCxcbiAgb3JhbmdlcmVkOiAweGZmNDUwMCxcbiAgb3JjaGlkOiAweGRhNzBkNixcbiAgcGFsZWdvbGRlbnJvZDogMHhlZWU4YWEsXG4gIHBhbGVncmVlbjogMHg5OGZiOTgsXG4gIHBhbGV0dXJxdW9pc2U6IDB4YWZlZWVlLFxuICBwYWxldmlvbGV0cmVkOiAweGRiNzA5MyxcbiAgcGFwYXlhd2hpcDogMHhmZmVmZDUsXG4gIHBlYWNocHVmZjogMHhmZmRhYjksXG4gIHBlcnU6IDB4Y2Q4NTNmLFxuICBwaW5rOiAweGZmYzBjYixcbiAgcGx1bTogMHhkZGEwZGQsXG4gIHBvd2RlcmJsdWU6IDB4YjBlMGU2LFxuICBwdXJwbGU6IDB4ODAwMDgwLFxuICByZWJlY2NhcHVycGxlOiAweDY2MzM5OSxcbiAgcmVkOiAweGZmMDAwMCxcbiAgcm9zeWJyb3duOiAweGJjOGY4ZixcbiAgcm95YWxibHVlOiAweDQxNjllMSxcbiAgc2FkZGxlYnJvd246IDB4OGI0NTEzLFxuICBzYWxtb246IDB4ZmE4MDcyLFxuICBzYW5keWJyb3duOiAweGY0YTQ2MCxcbiAgc2VhZ3JlZW46IDB4MmU4YjU3LFxuICBzZWFzaGVsbDogMHhmZmY1ZWUsXG4gIHNpZW5uYTogMHhhMDUyMmQsXG4gIHNpbHZlcjogMHhjMGMwYzAsXG4gIHNreWJsdWU6IDB4ODdjZWViLFxuICBzbGF0ZWJsdWU6IDB4NmE1YWNkLFxuICBzbGF0ZWdyYXk6IDB4NzA4MDkwLFxuICBzbGF0ZWdyZXk6IDB4NzA4MDkwLFxuICBzbm93OiAweGZmZmFmYSxcbiAgc3ByaW5nZ3JlZW46IDB4MDBmZjdmLFxuICBzdGVlbGJsdWU6IDB4NDY4MmI0LFxuICB0YW46IDB4ZDJiNDhjLFxuICB0ZWFsOiAweDAwODA4MCxcbiAgdGhpc3RsZTogMHhkOGJmZDgsXG4gIHRvbWF0bzogMHhmZjYzNDcsXG4gIHR1cnF1b2lzZTogMHg0MGUwZDAsXG4gIHZpb2xldDogMHhlZTgyZWUsXG4gIHdoZWF0OiAweGY1ZGViMyxcbiAgd2hpdGU6IDB4ZmZmZmZmLFxuICB3aGl0ZXNtb2tlOiAweGY1ZjVmNSxcbiAgeWVsbG93OiAweGZmZmYwMCxcbiAgeWVsbG93Z3JlZW46IDB4OWFjZDMyXG59O1xuXG5kZWZpbmUoQ29sb3IsIGNvbG9yLCB7XG4gIGRpc3BsYXlhYmxlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpO1xuICB9LFxuICBoZXg6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnJnYigpLmhleCgpO1xuICB9LFxuICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucmdiKCkgKyBcIlwiO1xuICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29sb3IoZm9ybWF0KSB7XG4gIHZhciBtO1xuICBmb3JtYXQgPSAoZm9ybWF0ICsgXCJcIikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAobSA9IHJlSGV4My5leGVjKGZvcm1hdCkpID8gKG0gPSBwYXJzZUludChtWzFdLCAxNiksIG5ldyBSZ2IoKG0gPj4gOCAmIDB4ZikgfCAobSA+PiA0ICYgMHgwZjApLCAobSA+PiA0ICYgMHhmKSB8IChtICYgMHhmMCksICgobSAmIDB4ZikgPDwgNCkgfCAobSAmIDB4ZiksIDEpKSAvLyAjZjAwXG4gICAgICA6IChtID0gcmVIZXg2LmV4ZWMoZm9ybWF0KSkgPyByZ2JuKHBhcnNlSW50KG1bMV0sIDE2KSkgLy8gI2ZmMDAwMFxuICAgICAgOiAobSA9IHJlUmdiSW50ZWdlci5leGVjKGZvcm1hdCkpID8gbmV3IFJnYihtWzFdLCBtWzJdLCBtWzNdLCAxKSAvLyByZ2IoMjU1LCAwLCAwKVxuICAgICAgOiAobSA9IHJlUmdiUGVyY2VudC5leGVjKGZvcm1hdCkpID8gbmV3IFJnYihtWzFdICogMjU1IC8gMTAwLCBtWzJdICogMjU1IC8gMTAwLCBtWzNdICogMjU1IC8gMTAwLCAxKSAvLyByZ2IoMTAwJSwgMCUsIDAlKVxuICAgICAgOiAobSA9IHJlUmdiYUludGVnZXIuZXhlYyhmb3JtYXQpKSA/IHJnYmEobVsxXSwgbVsyXSwgbVszXSwgbVs0XSkgLy8gcmdiYSgyNTUsIDAsIDAsIDEpXG4gICAgICA6IChtID0gcmVSZ2JhUGVyY2VudC5leGVjKGZvcm1hdCkpID8gcmdiYShtWzFdICogMjU1IC8gMTAwLCBtWzJdICogMjU1IC8gMTAwLCBtWzNdICogMjU1IC8gMTAwLCBtWzRdKSAvLyByZ2IoMTAwJSwgMCUsIDAlLCAxKVxuICAgICAgOiAobSA9IHJlSHNsUGVyY2VudC5leGVjKGZvcm1hdCkpID8gaHNsYShtWzFdLCBtWzJdIC8gMTAwLCBtWzNdIC8gMTAwLCAxKSAvLyBoc2woMTIwLCA1MCUsIDUwJSlcbiAgICAgIDogKG0gPSByZUhzbGFQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBoc2xhKG1bMV0sIG1bMl0gLyAxMDAsIG1bM10gLyAxMDAsIG1bNF0pIC8vIGhzbGEoMTIwLCA1MCUsIDUwJSwgMSlcbiAgICAgIDogbmFtZWQuaGFzT3duUHJvcGVydHkoZm9ybWF0KSA/IHJnYm4obmFtZWRbZm9ybWF0XSlcbiAgICAgIDogZm9ybWF0ID09PSBcInRyYW5zcGFyZW50XCIgPyBuZXcgUmdiKE5hTiwgTmFOLCBOYU4sIDApXG4gICAgICA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHJnYm4obikge1xuICByZXR1cm4gbmV3IFJnYihuID4+IDE2ICYgMHhmZiwgbiA+PiA4ICYgMHhmZiwgbiAmIDB4ZmYsIDEpO1xufVxuXG5mdW5jdGlvbiByZ2JhKHIsIGcsIGIsIGEpIHtcbiAgaWYgKGEgPD0gMCkgciA9IGcgPSBiID0gTmFOO1xuICByZXR1cm4gbmV3IFJnYihyLCBnLCBiLCBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJnYkNvbnZlcnQobykge1xuICBpZiAoIShvIGluc3RhbmNlb2YgQ29sb3IpKSBvID0gY29sb3Iobyk7XG4gIGlmICghbykgcmV0dXJuIG5ldyBSZ2I7XG4gIG8gPSBvLnJnYigpO1xuICByZXR1cm4gbmV3IFJnYihvLnIsIG8uZywgby5iLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmdiKHIsIGcsIGIsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyByZ2JDb252ZXJ0KHIpIDogbmV3IFJnYihyLCBnLCBiLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZ2IociwgZywgYiwgb3BhY2l0eSkge1xuICB0aGlzLnIgPSArcjtcbiAgdGhpcy5nID0gK2c7XG4gIHRoaXMuYiA9ICtiO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKFJnYiwgcmdiLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XG4gICAgcmV0dXJuIG5ldyBSZ2IodGhpcy5yICogaywgdGhpcy5nICogaywgdGhpcy5iICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgcmV0dXJuIG5ldyBSZ2IodGhpcy5yICogaywgdGhpcy5nICogaywgdGhpcy5iICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgZGlzcGxheWFibGU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAoMCA8PSB0aGlzLnIgJiYgdGhpcy5yIDw9IDI1NSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5nICYmIHRoaXMuZyA8PSAyNTUpXG4gICAgICAgICYmICgwIDw9IHRoaXMuYiAmJiB0aGlzLmIgPD0gMjU1KVxuICAgICAgICAmJiAoMCA8PSB0aGlzLm9wYWNpdHkgJiYgdGhpcy5vcGFjaXR5IDw9IDEpO1xuICB9LFxuICBoZXg6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIiNcIiArIGhleCh0aGlzLnIpICsgaGV4KHRoaXMuZykgKyBoZXgodGhpcy5iKTtcbiAgfSxcbiAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhID0gdGhpcy5vcGFjaXR5OyBhID0gaXNOYU4oYSkgPyAxIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgYSkpO1xuICAgIHJldHVybiAoYSA9PT0gMSA/IFwicmdiKFwiIDogXCJyZ2JhKFwiKVxuICAgICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLnIpIHx8IDApKSArIFwiLCBcIlxuICAgICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLmcpIHx8IDApKSArIFwiLCBcIlxuICAgICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLmIpIHx8IDApKVxuICAgICAgICArIChhID09PSAxID8gXCIpXCIgOiBcIiwgXCIgKyBhICsgXCIpXCIpO1xuICB9XG59KSk7XG5cbmZ1bmN0aW9uIGhleCh2YWx1ZSkge1xuICB2YWx1ZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh2YWx1ZSkgfHwgMCkpO1xuICByZXR1cm4gKHZhbHVlIDwgMTYgPyBcIjBcIiA6IFwiXCIpICsgdmFsdWUudG9TdHJpbmcoMTYpO1xufVxuXG5mdW5jdGlvbiBoc2xhKGgsIHMsIGwsIGEpIHtcbiAgaWYgKGEgPD0gMCkgaCA9IHMgPSBsID0gTmFOO1xuICBlbHNlIGlmIChsIDw9IDAgfHwgbCA+PSAxKSBoID0gcyA9IE5hTjtcbiAgZWxzZSBpZiAocyA8PSAwKSBoID0gTmFOO1xuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhzbENvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG5ldyBIc2woby5oLCBvLnMsIG8ubCwgby5vcGFjaXR5KTtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIENvbG9yKSkgbyA9IGNvbG9yKG8pO1xuICBpZiAoIW8pIHJldHVybiBuZXcgSHNsO1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG87XG4gIG8gPSBvLnJnYigpO1xuICB2YXIgciA9IG8uciAvIDI1NSxcbiAgICAgIGcgPSBvLmcgLyAyNTUsXG4gICAgICBiID0gby5iIC8gMjU1LFxuICAgICAgbWluID0gTWF0aC5taW4ociwgZywgYiksXG4gICAgICBtYXggPSBNYXRoLm1heChyLCBnLCBiKSxcbiAgICAgIGggPSBOYU4sXG4gICAgICBzID0gbWF4IC0gbWluLFxuICAgICAgbCA9IChtYXggKyBtaW4pIC8gMjtcbiAgaWYgKHMpIHtcbiAgICBpZiAociA9PT0gbWF4KSBoID0gKGcgLSBiKSAvIHMgKyAoZyA8IGIpICogNjtcbiAgICBlbHNlIGlmIChnID09PSBtYXgpIGggPSAoYiAtIHIpIC8gcyArIDI7XG4gICAgZWxzZSBoID0gKHIgLSBnKSAvIHMgKyA0O1xuICAgIHMgLz0gbCA8IDAuNSA/IG1heCArIG1pbiA6IDIgLSBtYXggLSBtaW47XG4gICAgaCAqPSA2MDtcbiAgfSBlbHNlIHtcbiAgICBzID0gbCA+IDAgJiYgbCA8IDEgPyAwIDogaDtcbiAgfVxuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHNsKGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoc2xDb252ZXJ0KGgpIDogbmV3IEhzbChoLCBzLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmZ1bmN0aW9uIEhzbChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLnMgPSArcztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoSHNsLCBoc2wsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IEhzbCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgcmV0dXJuIG5ldyBIc2wodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGggPSB0aGlzLmggJSAzNjAgKyAodGhpcy5oIDwgMCkgKiAzNjAsXG4gICAgICAgIHMgPSBpc05hTihoKSB8fCBpc05hTih0aGlzLnMpID8gMCA6IHRoaXMucyxcbiAgICAgICAgbCA9IHRoaXMubCxcbiAgICAgICAgbTIgPSBsICsgKGwgPCAwLjUgPyBsIDogMSAtIGwpICogcyxcbiAgICAgICAgbTEgPSAyICogbCAtIG0yO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgaHNsMnJnYihoID49IDI0MCA/IGggLSAyNDAgOiBoICsgMTIwLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoIDwgMTIwID8gaCArIDI0MCA6IGggLSAxMjAsIG0xLCBtMiksXG4gICAgICB0aGlzLm9wYWNpdHlcbiAgICApO1xuICB9LFxuICBkaXNwbGF5YWJsZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICgwIDw9IHRoaXMucyAmJiB0aGlzLnMgPD0gMSB8fCBpc05hTih0aGlzLnMpKVxuICAgICAgICAmJiAoMCA8PSB0aGlzLmwgJiYgdGhpcy5sIDw9IDEpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH1cbn0pKTtcblxuLyogRnJvbSBGdkQgMTMuMzcsIENTUyBDb2xvciBNb2R1bGUgTGV2ZWwgMyAqL1xuZnVuY3Rpb24gaHNsMnJnYihoLCBtMSwgbTIpIHtcbiAgcmV0dXJuIChoIDwgNjAgPyBtMSArIChtMiAtIG0xKSAqIGggLyA2MFxuICAgICAgOiBoIDwgMTgwID8gbTJcbiAgICAgIDogaCA8IDI0MCA/IG0xICsgKG0yIC0gbTEpICogKDI0MCAtIGgpIC8gNjBcbiAgICAgIDogbTEpICogMjU1O1xufVxuIiwiZXhwb3J0IHZhciBkZWcycmFkID0gTWF0aC5QSSAvIDE4MDtcbmV4cG9ydCB2YXIgcmFkMmRlZyA9IDE4MCAvIE1hdGguUEk7XG4iLCJpbXBvcnQgZGVmaW5lLCB7ZXh0ZW5kfSBmcm9tIFwiLi9kZWZpbmVcIjtcbmltcG9ydCB7Q29sb3IsIHJnYkNvbnZlcnQsIFJnYn0gZnJvbSBcIi4vY29sb3JcIjtcbmltcG9ydCB7ZGVnMnJhZCwgcmFkMmRlZ30gZnJvbSBcIi4vbWF0aFwiO1xuXG4vLyBodHRwczovL2JldGEub2JzZXJ2YWJsZWhxLmNvbS9AbWJvc3RvY2svbGFiLWFuZC1yZ2JcbnZhciBLID0gMTgsXG4gICAgWG4gPSAwLjk2NDIyLFxuICAgIFluID0gMSxcbiAgICBabiA9IDAuODI1MjEsXG4gICAgdDAgPSA0IC8gMjksXG4gICAgdDEgPSA2IC8gMjksXG4gICAgdDIgPSAzICogdDEgKiB0MSxcbiAgICB0MyA9IHQxICogdDEgKiB0MTtcblxuZnVuY3Rpb24gbGFiQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgTGFiKSByZXR1cm4gbmV3IExhYihvLmwsIG8uYSwgby5iLCBvLm9wYWNpdHkpO1xuICBpZiAobyBpbnN0YW5jZW9mIEhjbCkge1xuICAgIGlmIChpc05hTihvLmgpKSByZXR1cm4gbmV3IExhYihvLmwsIDAsIDAsIG8ub3BhY2l0eSk7XG4gICAgdmFyIGggPSBvLmggKiBkZWcycmFkO1xuICAgIHJldHVybiBuZXcgTGFiKG8ubCwgTWF0aC5jb3MoaCkgKiBvLmMsIE1hdGguc2luKGgpICogby5jLCBvLm9wYWNpdHkpO1xuICB9XG4gIGlmICghKG8gaW5zdGFuY2VvZiBSZ2IpKSBvID0gcmdiQ29udmVydChvKTtcbiAgdmFyIHIgPSByZ2IybHJnYihvLnIpLFxuICAgICAgZyA9IHJnYjJscmdiKG8uZyksXG4gICAgICBiID0gcmdiMmxyZ2Ioby5iKSxcbiAgICAgIHkgPSB4eXoybGFiKCgwLjIyMjUwNDUgKiByICsgMC43MTY4Nzg2ICogZyArIDAuMDYwNjE2OSAqIGIpIC8gWW4pLCB4LCB6O1xuICBpZiAociA9PT0gZyAmJiBnID09PSBiKSB4ID0geiA9IHk7IGVsc2Uge1xuICAgIHggPSB4eXoybGFiKCgwLjQzNjA3NDcgKiByICsgMC4zODUwNjQ5ICogZyArIDAuMTQzMDgwNCAqIGIpIC8gWG4pO1xuICAgIHogPSB4eXoybGFiKCgwLjAxMzkzMjIgKiByICsgMC4wOTcxMDQ1ICogZyArIDAuNzE0MTczMyAqIGIpIC8gWm4pO1xuICB9XG4gIHJldHVybiBuZXcgTGFiKDExNiAqIHkgLSAxNiwgNTAwICogKHggLSB5KSwgMjAwICogKHkgLSB6KSwgby5vcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdyYXkobCwgb3BhY2l0eSkge1xuICByZXR1cm4gbmV3IExhYihsLCAwLCAwLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxhYihsLCBhLCBiLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gbGFiQ29udmVydChsKSA6IG5ldyBMYWIobCwgYSwgYiwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTGFiKGwsIGEsIGIsIG9wYWNpdHkpIHtcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMuYSA9ICthO1xuICB0aGlzLmIgPSArYjtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShMYWIsIGxhYiwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIG5ldyBMYWIodGhpcy5sICsgSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMuYSwgdGhpcy5iLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IExhYih0aGlzLmwgLSBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5hLCB0aGlzLmIsIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHkgPSAodGhpcy5sICsgMTYpIC8gMTE2LFxuICAgICAgICB4ID0gaXNOYU4odGhpcy5hKSA/IHkgOiB5ICsgdGhpcy5hIC8gNTAwLFxuICAgICAgICB6ID0gaXNOYU4odGhpcy5iKSA/IHkgOiB5IC0gdGhpcy5iIC8gMjAwO1xuICAgIHggPSBYbiAqIGxhYjJ4eXooeCk7XG4gICAgeSA9IFluICogbGFiMnh5eih5KTtcbiAgICB6ID0gWm4gKiBsYWIyeHl6KHopO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgbHJnYjJyZ2IoIDMuMTMzODU2MSAqIHggLSAxLjYxNjg2NjcgKiB5IC0gMC40OTA2MTQ2ICogeiksXG4gICAgICBscmdiMnJnYigtMC45Nzg3Njg0ICogeCArIDEuOTE2MTQxNSAqIHkgKyAwLjAzMzQ1NDAgKiB6KSxcbiAgICAgIGxyZ2IycmdiKCAwLjA3MTk0NTMgKiB4IC0gMC4yMjg5OTE0ICogeSArIDEuNDA1MjQyNyAqIHopLFxuICAgICAgdGhpcy5vcGFjaXR5XG4gICAgKTtcbiAgfVxufSkpO1xuXG5mdW5jdGlvbiB4eXoybGFiKHQpIHtcbiAgcmV0dXJuIHQgPiB0MyA/IE1hdGgucG93KHQsIDEgLyAzKSA6IHQgLyB0MiArIHQwO1xufVxuXG5mdW5jdGlvbiBsYWIyeHl6KHQpIHtcbiAgcmV0dXJuIHQgPiB0MSA/IHQgKiB0ICogdCA6IHQyICogKHQgLSB0MCk7XG59XG5cbmZ1bmN0aW9uIGxyZ2IycmdiKHgpIHtcbiAgcmV0dXJuIDI1NSAqICh4IDw9IDAuMDAzMTMwOCA/IDEyLjkyICogeCA6IDEuMDU1ICogTWF0aC5wb3coeCwgMSAvIDIuNCkgLSAwLjA1NSk7XG59XG5cbmZ1bmN0aW9uIHJnYjJscmdiKHgpIHtcbiAgcmV0dXJuICh4IC89IDI1NSkgPD0gMC4wNDA0NSA/IHggLyAxMi45MiA6IE1hdGgucG93KCh4ICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG59XG5cbmZ1bmN0aW9uIGhjbENvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIEhjbCkgcmV0dXJuIG5ldyBIY2woby5oLCBvLmMsIG8ubCwgby5vcGFjaXR5KTtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIExhYikpIG8gPSBsYWJDb252ZXJ0KG8pO1xuICBpZiAoby5hID09PSAwICYmIG8uYiA9PT0gMCkgcmV0dXJuIG5ldyBIY2woTmFOLCAwLCBvLmwsIG8ub3BhY2l0eSk7XG4gIHZhciBoID0gTWF0aC5hdGFuMihvLmIsIG8uYSkgKiByYWQyZGVnO1xuICByZXR1cm4gbmV3IEhjbChoIDwgMCA/IGggKyAzNjAgOiBoLCBNYXRoLnNxcnQoby5hICogby5hICsgby5iICogby5iKSwgby5sLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGNoKGwsIGMsIGgsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoY2xDb252ZXJ0KGwpIDogbmV3IEhjbChoLCBjLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoY2woaCwgYywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhjbENvbnZlcnQoaCkgOiBuZXcgSGNsKGgsIGMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhjbChoLCBjLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLmMgPSArYztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoSGNsLCBoY2wsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIHJldHVybiBuZXcgSGNsKHRoaXMuaCwgdGhpcy5jLCB0aGlzLmwgKyBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIG5ldyBIY2wodGhpcy5oLCB0aGlzLmMsIHRoaXMubCAtIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBsYWJDb252ZXJ0KHRoaXMpLnJnYigpO1xuICB9XG59KSk7XG4iLCJpbXBvcnQgZGVmaW5lLCB7ZXh0ZW5kfSBmcm9tIFwiLi9kZWZpbmVcIjtcbmltcG9ydCB7Q29sb3IsIHJnYkNvbnZlcnQsIFJnYiwgZGFya2VyLCBicmlnaHRlcn0gZnJvbSBcIi4vY29sb3JcIjtcbmltcG9ydCB7ZGVnMnJhZCwgcmFkMmRlZ30gZnJvbSBcIi4vbWF0aFwiO1xuXG52YXIgQSA9IC0wLjE0ODYxLFxuICAgIEIgPSArMS43ODI3NyxcbiAgICBDID0gLTAuMjkyMjcsXG4gICAgRCA9IC0wLjkwNjQ5LFxuICAgIEUgPSArMS45NzI5NCxcbiAgICBFRCA9IEUgKiBELFxuICAgIEVCID0gRSAqIEIsXG4gICAgQkNfREEgPSBCICogQyAtIEQgKiBBO1xuXG5mdW5jdGlvbiBjdWJlaGVsaXhDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBDdWJlaGVsaXgpIHJldHVybiBuZXcgQ3ViZWhlbGl4KG8uaCwgby5zLCBvLmwsIG8ub3BhY2l0eSk7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBSZ2IpKSBvID0gcmdiQ29udmVydChvKTtcbiAgdmFyIHIgPSBvLnIgLyAyNTUsXG4gICAgICBnID0gby5nIC8gMjU1LFxuICAgICAgYiA9IG8uYiAvIDI1NSxcbiAgICAgIGwgPSAoQkNfREEgKiBiICsgRUQgKiByIC0gRUIgKiBnKSAvIChCQ19EQSArIEVEIC0gRUIpLFxuICAgICAgYmwgPSBiIC0gbCxcbiAgICAgIGsgPSAoRSAqIChnIC0gbCkgLSBDICogYmwpIC8gRCxcbiAgICAgIHMgPSBNYXRoLnNxcnQoayAqIGsgKyBibCAqIGJsKSAvIChFICogbCAqICgxIC0gbCkpLCAvLyBOYU4gaWYgbD0wIG9yIGw9MVxuICAgICAgaCA9IHMgPyBNYXRoLmF0YW4yKGssIGJsKSAqIHJhZDJkZWcgLSAxMjAgOiBOYU47XG4gIHJldHVybiBuZXcgQ3ViZWhlbGl4KGggPCAwID8gaCArIDM2MCA6IGgsIHMsIGwsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGN1YmVoZWxpeChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gY3ViZWhlbGl4Q29udmVydChoKSA6IG5ldyBDdWJlaGVsaXgoaCwgcywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ3ViZWhlbGl4KGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgdGhpcy5oID0gK2g7XG4gIHRoaXMucyA9ICtzO1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShDdWJlaGVsaXgsIGN1YmVoZWxpeCwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGJyaWdodGVyIDogTWF0aC5wb3coYnJpZ2h0ZXIsIGspO1xuICAgIHJldHVybiBuZXcgQ3ViZWhlbGl4KHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IEN1YmVoZWxpeCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaCA9IGlzTmFOKHRoaXMuaCkgPyAwIDogKHRoaXMuaCArIDEyMCkgKiBkZWcycmFkLFxuICAgICAgICBsID0gK3RoaXMubCxcbiAgICAgICAgYSA9IGlzTmFOKHRoaXMucykgPyAwIDogdGhpcy5zICogbCAqICgxIC0gbCksXG4gICAgICAgIGNvc2ggPSBNYXRoLmNvcyhoKSxcbiAgICAgICAgc2luaCA9IE1hdGguc2luKGgpO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgMjU1ICogKGwgKyBhICogKEEgKiBjb3NoICsgQiAqIHNpbmgpKSxcbiAgICAgIDI1NSAqIChsICsgYSAqIChDICogY29zaCArIEQgKiBzaW5oKSksXG4gICAgICAyNTUgKiAobCArIGEgKiAoRSAqIGNvc2gpKSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH1cbn0pKTtcbiIsImV4cG9ydCBmdW5jdGlvbiBiYXNpcyh0MSwgdjAsIHYxLCB2MiwgdjMpIHtcbiAgdmFyIHQyID0gdDEgKiB0MSwgdDMgPSB0MiAqIHQxO1xuICByZXR1cm4gKCgxIC0gMyAqIHQxICsgMyAqIHQyIC0gdDMpICogdjBcbiAgICAgICsgKDQgLSA2ICogdDIgKyAzICogdDMpICogdjFcbiAgICAgICsgKDEgKyAzICogdDEgKyAzICogdDIgLSAzICogdDMpICogdjJcbiAgICAgICsgdDMgKiB2MykgLyA2O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoIC0gMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IHQgPD0gMCA/ICh0ID0gMCkgOiB0ID49IDEgPyAodCA9IDEsIG4gLSAxKSA6IE1hdGguZmxvb3IodCAqIG4pLFxuICAgICAgICB2MSA9IHZhbHVlc1tpXSxcbiAgICAgICAgdjIgPSB2YWx1ZXNbaSArIDFdLFxuICAgICAgICB2MCA9IGkgPiAwID8gdmFsdWVzW2kgLSAxXSA6IDIgKiB2MSAtIHYyLFxuICAgICAgICB2MyA9IGkgPCBuIC0gMSA/IHZhbHVlc1tpICsgMl0gOiAyICogdjIgLSB2MTtcbiAgICByZXR1cm4gYmFzaXMoKHQgLSBpIC8gbikgKiBuLCB2MCwgdjEsIHYyLCB2Myk7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuXG5mdW5jdGlvbiBsaW5lYXIoYSwgZCkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBhICsgdCAqIGQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGV4cG9uZW50aWFsKGEsIGIsIHkpIHtcbiAgcmV0dXJuIGEgPSBNYXRoLnBvdyhhLCB5KSwgYiA9IE1hdGgucG93KGIsIHkpIC0gYSwgeSA9IDEgLyB5LCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucG93KGEgKyB0ICogYiwgeSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBodWUoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkID4gMTgwIHx8IGQgPCAtMTgwID8gZCAtIDM2MCAqIE1hdGgucm91bmQoZCAvIDM2MCkgOiBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2FtbWEoeSkge1xuICByZXR1cm4gKHkgPSAreSkgPT09IDEgPyBub2dhbW1hIDogZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBiIC0gYSA/IGV4cG9uZW50aWFsKGEsIGIsIHkpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vZ2FtbWEoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuIiwiaW1wb3J0IHtyZ2IgYXMgY29sb3JSZ2J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGJhc2lzIGZyb20gXCIuL2Jhc2lzXCI7XG5pbXBvcnQgYmFzaXNDbG9zZWQgZnJvbSBcIi4vYmFzaXNDbG9zZWRcIjtcbmltcG9ydCBub2dhbW1hLCB7Z2FtbWF9IGZyb20gXCIuL2NvbG9yXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiByZ2JHYW1tYSh5KSB7XG4gIHZhciBjb2xvciA9IGdhbW1hKHkpO1xuXG4gIGZ1bmN0aW9uIHJnYihzdGFydCwgZW5kKSB7XG4gICAgdmFyIHIgPSBjb2xvcigoc3RhcnQgPSBjb2xvclJnYihzdGFydCkpLnIsIChlbmQgPSBjb2xvclJnYihlbmQpKS5yKSxcbiAgICAgICAgZyA9IGNvbG9yKHN0YXJ0LmcsIGVuZC5nKSxcbiAgICAgICAgYiA9IGNvbG9yKHN0YXJ0LmIsIGVuZC5iKSxcbiAgICAgICAgb3BhY2l0eSA9IG5vZ2FtbWEoc3RhcnQub3BhY2l0eSwgZW5kLm9wYWNpdHkpO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBzdGFydC5yID0gcih0KTtcbiAgICAgIHN0YXJ0LmcgPSBnKHQpO1xuICAgICAgc3RhcnQuYiA9IGIodCk7XG4gICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICAgIHJldHVybiBzdGFydCArIFwiXCI7XG4gICAgfTtcbiAgfVxuXG4gIHJnYi5nYW1tYSA9IHJnYkdhbW1hO1xuXG4gIHJldHVybiByZ2I7XG59KSgxKTtcblxuZnVuY3Rpb24gcmdiU3BsaW5lKHNwbGluZSkge1xuICByZXR1cm4gZnVuY3Rpb24oY29sb3JzKSB7XG4gICAgdmFyIG4gPSBjb2xvcnMubGVuZ3RoLFxuICAgICAgICByID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBnID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBiID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBpLCBjb2xvcjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBjb2xvciA9IGNvbG9yUmdiKGNvbG9yc1tpXSk7XG4gICAgICByW2ldID0gY29sb3IuciB8fCAwO1xuICAgICAgZ1tpXSA9IGNvbG9yLmcgfHwgMDtcbiAgICAgIGJbaV0gPSBjb2xvci5iIHx8IDA7XG4gICAgfVxuICAgIHIgPSBzcGxpbmUocik7XG4gICAgZyA9IHNwbGluZShnKTtcbiAgICBiID0gc3BsaW5lKGIpO1xuICAgIGNvbG9yLm9wYWNpdHkgPSAxO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBjb2xvci5yID0gcih0KTtcbiAgICAgIGNvbG9yLmcgPSBnKHQpO1xuICAgICAgY29sb3IuYiA9IGIodCk7XG4gICAgICByZXR1cm4gY29sb3IgKyBcIlwiO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCB2YXIgcmdiQmFzaXMgPSByZ2JTcGxpbmUoYmFzaXMpO1xuZXhwb3J0IHZhciByZ2JCYXNpc0Nsb3NlZCA9IHJnYlNwbGluZShiYXNpc0Nsb3NlZCk7XG4iLCJpbXBvcnQge2Jhc2lzfSBmcm9tIFwiLi9iYXNpc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gTWF0aC5mbG9vcigoKHQgJT0gMSkgPCAwID8gKyt0IDogdCkgKiBuKSxcbiAgICAgICAgdjAgPSB2YWx1ZXNbKGkgKyBuIC0gMSkgJSBuXSxcbiAgICAgICAgdjEgPSB2YWx1ZXNbaSAlIG5dLFxuICAgICAgICB2MiA9IHZhbHVlc1soaSArIDEpICUgbl0sXG4gICAgICAgIHYzID0gdmFsdWVzWyhpICsgMikgJSBuXTtcbiAgICByZXR1cm4gYmFzaXMoKHQgLSBpIC8gbikgKiBuLCB2MCwgdjEsIHYyLCB2Myk7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhID0gK2EsIGIgLT0gYSwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBhICsgYiAqIHQ7XG4gIH07XG59XG4iLCJpbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlclwiO1xuXG52YXIgcmVBID0gL1stK10/KD86XFxkK1xcLj9cXGQqfFxcLj9cXGQrKSg/OltlRV1bLStdP1xcZCspPy9nLFxuICAgIHJlQiA9IG5ldyBSZWdFeHAocmVBLnNvdXJjZSwgXCJnXCIpO1xuXG5mdW5jdGlvbiB6ZXJvKGIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbmUoYikge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBiKHQpICsgXCJcIjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgYmkgPSByZUEubGFzdEluZGV4ID0gcmVCLmxhc3RJbmRleCA9IDAsIC8vIHNjYW4gaW5kZXggZm9yIG5leHQgbnVtYmVyIGluIGJcbiAgICAgIGFtLCAvLyBjdXJyZW50IG1hdGNoIGluIGFcbiAgICAgIGJtLCAvLyBjdXJyZW50IG1hdGNoIGluIGJcbiAgICAgIGJzLCAvLyBzdHJpbmcgcHJlY2VkaW5nIGN1cnJlbnQgbnVtYmVyIGluIGIsIGlmIGFueVxuICAgICAgaSA9IC0xLCAvLyBpbmRleCBpbiBzXG4gICAgICBzID0gW10sIC8vIHN0cmluZyBjb25zdGFudHMgYW5kIHBsYWNlaG9sZGVyc1xuICAgICAgcSA9IFtdOyAvLyBudW1iZXIgaW50ZXJwb2xhdG9yc1xuXG4gIC8vIENvZXJjZSBpbnB1dHMgdG8gc3RyaW5ncy5cbiAgYSA9IGEgKyBcIlwiLCBiID0gYiArIFwiXCI7XG5cbiAgLy8gSW50ZXJwb2xhdGUgcGFpcnMgb2YgbnVtYmVycyBpbiBhICYgYi5cbiAgd2hpbGUgKChhbSA9IHJlQS5leGVjKGEpKVxuICAgICAgJiYgKGJtID0gcmVCLmV4ZWMoYikpKSB7XG4gICAgaWYgKChicyA9IGJtLmluZGV4KSA+IGJpKSB7IC8vIGEgc3RyaW5nIHByZWNlZGVzIHRoZSBuZXh0IG51bWJlciBpbiBiXG4gICAgICBicyA9IGIuc2xpY2UoYmksIGJzKTtcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBicztcbiAgICB9XG4gICAgaWYgKChhbSA9IGFtWzBdKSA9PT0gKGJtID0gYm1bMF0pKSB7IC8vIG51bWJlcnMgaW4gYSAmIGIgbWF0Y2hcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJtOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBibTtcbiAgICB9IGVsc2UgeyAvLyBpbnRlcnBvbGF0ZSBub24tbWF0Y2hpbmcgbnVtYmVyc1xuICAgICAgc1srK2ldID0gbnVsbDtcbiAgICAgIHEucHVzaCh7aTogaSwgeDogbnVtYmVyKGFtLCBibSl9KTtcbiAgICB9XG4gICAgYmkgPSByZUIubGFzdEluZGV4O1xuICB9XG5cbiAgLy8gQWRkIHJlbWFpbnMgb2YgYi5cbiAgaWYgKGJpIDwgYi5sZW5ndGgpIHtcbiAgICBicyA9IGIuc2xpY2UoYmkpO1xuICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgIGVsc2Ugc1srK2ldID0gYnM7XG4gIH1cblxuICAvLyBTcGVjaWFsIG9wdGltaXphdGlvbiBmb3Igb25seSBhIHNpbmdsZSBtYXRjaC5cbiAgLy8gT3RoZXJ3aXNlLCBpbnRlcnBvbGF0ZSBlYWNoIG9mIHRoZSBudW1iZXJzIGFuZCByZWpvaW4gdGhlIHN0cmluZy5cbiAgcmV0dXJuIHMubGVuZ3RoIDwgMiA/IChxWzBdXG4gICAgICA/IG9uZShxWzBdLngpXG4gICAgICA6IHplcm8oYikpXG4gICAgICA6IChiID0gcS5sZW5ndGgsIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbzsgaSA8IGI7ICsraSkgc1sobyA9IHFbaV0pLmldID0gby54KHQpO1xuICAgICAgICAgIHJldHVybiBzLmpvaW4oXCJcIik7XG4gICAgICAgIH0pO1xufVxuIiwiaW1wb3J0IGRlY29tcG9zZSwge2lkZW50aXR5fSBmcm9tIFwiLi9kZWNvbXBvc2VcIjtcblxudmFyIGNzc05vZGUsXG4gICAgY3NzUm9vdCxcbiAgICBjc3NWaWV3LFxuICAgIHN2Z05vZGU7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNzcyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IFwibm9uZVwiKSByZXR1cm4gaWRlbnRpdHk7XG4gIGlmICghY3NzTm9kZSkgY3NzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJESVZcIiksIGNzc1Jvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIGNzc1ZpZXcgPSBkb2N1bWVudC5kZWZhdWx0VmlldztcbiAgY3NzTm9kZS5zdHlsZS50cmFuc2Zvcm0gPSB2YWx1ZTtcbiAgdmFsdWUgPSBjc3NWaWV3LmdldENvbXB1dGVkU3R5bGUoY3NzUm9vdC5hcHBlbmRDaGlsZChjc3NOb2RlKSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShcInRyYW5zZm9ybVwiKTtcbiAgY3NzUm9vdC5yZW1vdmVDaGlsZChjc3NOb2RlKTtcbiAgdmFsdWUgPSB2YWx1ZS5zbGljZSg3LCAtMSkuc3BsaXQoXCIsXCIpO1xuICByZXR1cm4gZGVjb21wb3NlKCt2YWx1ZVswXSwgK3ZhbHVlWzFdLCArdmFsdWVbMl0sICt2YWx1ZVszXSwgK3ZhbHVlWzRdLCArdmFsdWVbNV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdmcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBpZGVudGl0eTtcbiAgaWYgKCFzdmdOb2RlKSBzdmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJnXCIpO1xuICBzdmdOb2RlLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLCB2YWx1ZSk7XG4gIGlmICghKHZhbHVlID0gc3ZnTm9kZS50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKSkgcmV0dXJuIGlkZW50aXR5O1xuICB2YWx1ZSA9IHZhbHVlLm1hdHJpeDtcbiAgcmV0dXJuIGRlY29tcG9zZSh2YWx1ZS5hLCB2YWx1ZS5iLCB2YWx1ZS5jLCB2YWx1ZS5kLCB2YWx1ZS5lLCB2YWx1ZS5mKTtcbn1cbiIsImltcG9ydCB7Y29sb3J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IHJnYiBmcm9tIFwiLi9yZ2JcIjtcbmltcG9ydCBhcnJheSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IGRhdGUgZnJvbSBcIi4vZGF0ZVwiO1xuaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXJcIjtcbmltcG9ydCBvYmplY3QgZnJvbSBcIi4vb2JqZWN0XCI7XG5pbXBvcnQgc3RyaW5nIGZyb20gXCIuL3N0cmluZ1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIHQgPSB0eXBlb2YgYiwgYztcbiAgcmV0dXJuIGIgPT0gbnVsbCB8fCB0ID09PSBcImJvb2xlYW5cIiA/IGNvbnN0YW50KGIpXG4gICAgICA6ICh0ID09PSBcIm51bWJlclwiID8gbnVtYmVyXG4gICAgICA6IHQgPT09IFwic3RyaW5nXCIgPyAoKGMgPSBjb2xvcihiKSkgPyAoYiA9IGMsIHJnYikgOiBzdHJpbmcpXG4gICAgICA6IGIgaW5zdGFuY2VvZiBjb2xvciA/IHJnYlxuICAgICAgOiBiIGluc3RhbmNlb2YgRGF0ZSA/IGRhdGVcbiAgICAgIDogQXJyYXkuaXNBcnJheShiKSA/IGFycmF5XG4gICAgICA6IHR5cGVvZiBiLnZhbHVlT2YgIT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgYi50b1N0cmluZyAhPT0gXCJmdW5jdGlvblwiIHx8IGlzTmFOKGIpID8gb2JqZWN0XG4gICAgICA6IG51bWJlcikoYSwgYik7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBkID0gbmV3IERhdGU7XG4gIHJldHVybiBhID0gK2EsIGIgLT0gYSwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBkLnNldFRpbWUoYSArIGIgKiB0KSwgZDtcbiAgfTtcbn1cbiIsImltcG9ydCB2YWx1ZSBmcm9tIFwiLi92YWx1ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBuYiA9IGIgPyBiLmxlbmd0aCA6IDAsXG4gICAgICBuYSA9IGEgPyBNYXRoLm1pbihuYiwgYS5sZW5ndGgpIDogMCxcbiAgICAgIHggPSBuZXcgQXJyYXkobmEpLFxuICAgICAgYyA9IG5ldyBBcnJheShuYiksXG4gICAgICBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBuYTsgKytpKSB4W2ldID0gdmFsdWUoYVtpXSwgYltpXSk7XG4gIGZvciAoOyBpIDwgbmI7ICsraSkgY1tpXSA9IGJbaV07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbmE7ICsraSkgY1tpXSA9IHhbaV0odCk7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG4iLCJpbXBvcnQgdmFsdWUgZnJvbSBcIi4vdmFsdWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgaSA9IHt9LFxuICAgICAgYyA9IHt9LFxuICAgICAgaztcblxuICBpZiAoYSA9PT0gbnVsbCB8fCB0eXBlb2YgYSAhPT0gXCJvYmplY3RcIikgYSA9IHt9O1xuICBpZiAoYiA9PT0gbnVsbCB8fCB0eXBlb2YgYiAhPT0gXCJvYmplY3RcIikgYiA9IHt9O1xuXG4gIGZvciAoayBpbiBiKSB7XG4gICAgaWYgKGsgaW4gYSkge1xuICAgICAgaVtrXSA9IHZhbHVlKGFba10sIGJba10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjW2tdID0gYltrXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGZvciAoayBpbiBpKSBjW2tdID0gaVtrXSh0KTtcbiAgICByZXR1cm4gYztcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEgPSArYSwgYiAtPSBhLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoYSArIGIgKiB0KTtcbiAgfTtcbn1cbiIsInZhciBkZWdyZWVzID0gMTgwIC8gTWF0aC5QSTtcblxuZXhwb3J0IHZhciBpZGVudGl0eSA9IHtcbiAgdHJhbnNsYXRlWDogMCxcbiAgdHJhbnNsYXRlWTogMCxcbiAgcm90YXRlOiAwLFxuICBza2V3WDogMCxcbiAgc2NhbGVYOiAxLFxuICBzY2FsZVk6IDFcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgdmFyIHNjYWxlWCwgc2NhbGVZLCBza2V3WDtcbiAgaWYgKHNjYWxlWCA9IE1hdGguc3FydChhICogYSArIGIgKiBiKSkgYSAvPSBzY2FsZVgsIGIgLz0gc2NhbGVYO1xuICBpZiAoc2tld1ggPSBhICogYyArIGIgKiBkKSBjIC09IGEgKiBza2V3WCwgZCAtPSBiICogc2tld1g7XG4gIGlmIChzY2FsZVkgPSBNYXRoLnNxcnQoYyAqIGMgKyBkICogZCkpIGMgLz0gc2NhbGVZLCBkIC89IHNjYWxlWSwgc2tld1ggLz0gc2NhbGVZO1xuICBpZiAoYSAqIGQgPCBiICogYykgYSA9IC1hLCBiID0gLWIsIHNrZXdYID0gLXNrZXdYLCBzY2FsZVggPSAtc2NhbGVYO1xuICByZXR1cm4ge1xuICAgIHRyYW5zbGF0ZVg6IGUsXG4gICAgdHJhbnNsYXRlWTogZixcbiAgICByb3RhdGU6IE1hdGguYXRhbjIoYiwgYSkgKiBkZWdyZWVzLFxuICAgIHNrZXdYOiBNYXRoLmF0YW4oc2tld1gpICogZGVncmVlcyxcbiAgICBzY2FsZVg6IHNjYWxlWCxcbiAgICBzY2FsZVk6IHNjYWxlWVxuICB9O1xufVxuIiwiaW1wb3J0IG51bWJlciBmcm9tIFwiLi4vbnVtYmVyXCI7XG5pbXBvcnQge3BhcnNlQ3NzLCBwYXJzZVN2Z30gZnJvbSBcIi4vcGFyc2VcIjtcblxuZnVuY3Rpb24gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2UsIHB4Q29tbWEsIHB4UGFyZW4sIGRlZ1BhcmVuKSB7XG5cbiAgZnVuY3Rpb24gcG9wKHMpIHtcbiAgICByZXR1cm4gcy5sZW5ndGggPyBzLnBvcCgpICsgXCIgXCIgOiBcIlwiO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNsYXRlKHhhLCB5YSwgeGIsIHliLCBzLCBxKSB7XG4gICAgaWYgKHhhICE9PSB4YiB8fCB5YSAhPT0geWIpIHtcbiAgICAgIHZhciBpID0gcy5wdXNoKFwidHJhbnNsYXRlKFwiLCBudWxsLCBweENvbW1hLCBudWxsLCBweFBhcmVuKTtcbiAgICAgIHEucHVzaCh7aTogaSAtIDQsIHg6IG51bWJlcih4YSwgeGIpfSwge2k6IGkgLSAyLCB4OiBudW1iZXIoeWEsIHliKX0pO1xuICAgIH0gZWxzZSBpZiAoeGIgfHwgeWIpIHtcbiAgICAgIHMucHVzaChcInRyYW5zbGF0ZShcIiArIHhiICsgcHhDb21tYSArIHliICsgcHhQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcm90YXRlKGEsIGIsIHMsIHEpIHtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgaWYgKGEgLSBiID4gMTgwKSBiICs9IDM2MDsgZWxzZSBpZiAoYiAtIGEgPiAxODApIGEgKz0gMzYwOyAvLyBzaG9ydGVzdCBwYXRoXG4gICAgICBxLnB1c2goe2k6IHMucHVzaChwb3AocykgKyBcInJvdGF0ZShcIiwgbnVsbCwgZGVnUGFyZW4pIC0gMiwgeDogbnVtYmVyKGEsIGIpfSk7XG4gICAgfSBlbHNlIGlmIChiKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJyb3RhdGUoXCIgKyBiICsgZGVnUGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNrZXdYKGEsIGIsIHMsIHEpIHtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgcS5wdXNoKHtpOiBzLnB1c2gocG9wKHMpICsgXCJza2V3WChcIiwgbnVsbCwgZGVnUGFyZW4pIC0gMiwgeDogbnVtYmVyKGEsIGIpfSk7XG4gICAgfSBlbHNlIGlmIChiKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJza2V3WChcIiArIGIgKyBkZWdQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeGEsIHlhLCB4YiwgeWIsIHMsIHEpIHtcbiAgICBpZiAoeGEgIT09IHhiIHx8IHlhICE9PSB5Yikge1xuICAgICAgdmFyIGkgPSBzLnB1c2gocG9wKHMpICsgXCJzY2FsZShcIiwgbnVsbCwgXCIsXCIsIG51bGwsIFwiKVwiKTtcbiAgICAgIHEucHVzaCh7aTogaSAtIDQsIHg6IG51bWJlcih4YSwgeGIpfSwge2k6IGkgLSAyLCB4OiBudW1iZXIoeWEsIHliKX0pO1xuICAgIH0gZWxzZSBpZiAoeGIgIT09IDEgfHwgeWIgIT09IDEpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInNjYWxlKFwiICsgeGIgKyBcIixcIiArIHliICsgXCIpXCIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbihhLCBiKSB7XG4gICAgdmFyIHMgPSBbXSwgLy8gc3RyaW5nIGNvbnN0YW50cyBhbmQgcGxhY2Vob2xkZXJzXG4gICAgICAgIHEgPSBbXTsgLy8gbnVtYmVyIGludGVycG9sYXRvcnNcbiAgICBhID0gcGFyc2UoYSksIGIgPSBwYXJzZShiKTtcbiAgICB0cmFuc2xhdGUoYS50cmFuc2xhdGVYLCBhLnRyYW5zbGF0ZVksIGIudHJhbnNsYXRlWCwgYi50cmFuc2xhdGVZLCBzLCBxKTtcbiAgICByb3RhdGUoYS5yb3RhdGUsIGIucm90YXRlLCBzLCBxKTtcbiAgICBza2V3WChhLnNrZXdYLCBiLnNrZXdYLCBzLCBxKTtcbiAgICBzY2FsZShhLnNjYWxlWCwgYS5zY2FsZVksIGIuc2NhbGVYLCBiLnNjYWxlWSwgcywgcSk7XG4gICAgYSA9IGIgPSBudWxsOyAvLyBnY1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgaSA9IC0xLCBuID0gcS5sZW5ndGgsIG87XG4gICAgICB3aGlsZSAoKytpIDwgbikgc1sobyA9IHFbaV0pLmldID0gby54KHQpO1xuICAgICAgcmV0dXJuIHMuam9pbihcIlwiKTtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgdmFyIGludGVycG9sYXRlVHJhbnNmb3JtQ3NzID0gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2VDc3MsIFwicHgsIFwiLCBcInB4KVwiLCBcImRlZylcIik7XG5leHBvcnQgdmFyIGludGVycG9sYXRlVHJhbnNmb3JtU3ZnID0gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2VTdmcsIFwiLCBcIiwgXCIpXCIsIFwiKVwiKTtcbiIsImltcG9ydCB7Y3ViZWhlbGl4IGFzIGNvbG9yQ3ViZWhlbGl4fSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCBjb2xvciwge2h1ZX0gZnJvbSBcIi4vY29sb3JcIjtcblxuZnVuY3Rpb24gY3ViZWhlbGl4KGh1ZSkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGN1YmVoZWxpeEdhbW1hKHkpIHtcbiAgICB5ID0gK3k7XG5cbiAgICBmdW5jdGlvbiBjdWJlaGVsaXgoc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIGggPSBodWUoKHN0YXJ0ID0gY29sb3JDdWJlaGVsaXgoc3RhcnQpKS5oLCAoZW5kID0gY29sb3JDdWJlaGVsaXgoZW5kKSkuaCksXG4gICAgICAgICAgcyA9IGNvbG9yKHN0YXJ0LnMsIGVuZC5zKSxcbiAgICAgICAgICBsID0gY29sb3Ioc3RhcnQubCwgZW5kLmwpLFxuICAgICAgICAgIG9wYWNpdHkgPSBjb2xvcihzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgICBzdGFydC5oID0gaCh0KTtcbiAgICAgICAgc3RhcnQucyA9IHModCk7XG4gICAgICAgIHN0YXJ0LmwgPSBsKE1hdGgucG93KHQsIHkpKTtcbiAgICAgICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgICAgIHJldHVybiBzdGFydCArIFwiXCI7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGN1YmVoZWxpeC5nYW1tYSA9IGN1YmVoZWxpeEdhbW1hO1xuXG4gICAgcmV0dXJuIGN1YmVoZWxpeDtcbiAgfSkoMSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGN1YmVoZWxpeChodWUpO1xuZXhwb3J0IHZhciBjdWJlaGVsaXhMb25nID0gY3ViZWhlbGl4KGNvbG9yKTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gK3g7XG59XG4iLCJpbXBvcnQge2Jpc2VjdH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2ludGVycG9sYXRlIGFzIGludGVycG9sYXRlVmFsdWUsIGludGVycG9sYXRlUm91bmR9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHttYXAsIHNsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlclwiO1xuXG52YXIgdW5pdCA9IFswLCAxXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlaW50ZXJwb2xhdGVMaW5lYXIoYSwgYikge1xuICByZXR1cm4gKGIgLT0gKGEgPSArYSkpXG4gICAgICA/IGZ1bmN0aW9uKHgpIHsgcmV0dXJuICh4IC0gYSkgLyBiOyB9XG4gICAgICA6IGNvbnN0YW50KGIpO1xufVxuXG5mdW5jdGlvbiBkZWludGVycG9sYXRlQ2xhbXAoZGVpbnRlcnBvbGF0ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oYSwgYikge1xuICAgIHZhciBkID0gZGVpbnRlcnBvbGF0ZShhID0gK2EsIGIgPSArYik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHggPD0gYSA/IDAgOiB4ID49IGIgPyAxIDogZCh4KTsgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVpbnRlcnBvbGF0ZUNsYW1wKHJlaW50ZXJwb2xhdGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGEsIGIpIHtcbiAgICB2YXIgciA9IHJlaW50ZXJwb2xhdGUoYSA9ICthLCBiID0gK2IpO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7IHJldHVybiB0IDw9IDAgPyBhIDogdCA+PSAxID8gYiA6IHIodCk7IH07XG4gIH07XG59XG5cbmZ1bmN0aW9uIGJpbWFwKGRvbWFpbiwgcmFuZ2UsIGRlaW50ZXJwb2xhdGUsIHJlaW50ZXJwb2xhdGUpIHtcbiAgdmFyIGQwID0gZG9tYWluWzBdLCBkMSA9IGRvbWFpblsxXSwgcjAgPSByYW5nZVswXSwgcjEgPSByYW5nZVsxXTtcbiAgaWYgKGQxIDwgZDApIGQwID0gZGVpbnRlcnBvbGF0ZShkMSwgZDApLCByMCA9IHJlaW50ZXJwb2xhdGUocjEsIHIwKTtcbiAgZWxzZSBkMCA9IGRlaW50ZXJwb2xhdGUoZDAsIGQxKSwgcjAgPSByZWludGVycG9sYXRlKHIwLCByMSk7XG4gIHJldHVybiBmdW5jdGlvbih4KSB7IHJldHVybiByMChkMCh4KSk7IH07XG59XG5cbmZ1bmN0aW9uIHBvbHltYXAoZG9tYWluLCByYW5nZSwgZGVpbnRlcnBvbGF0ZSwgcmVpbnRlcnBvbGF0ZSkge1xuICB2YXIgaiA9IE1hdGgubWluKGRvbWFpbi5sZW5ndGgsIHJhbmdlLmxlbmd0aCkgLSAxLFxuICAgICAgZCA9IG5ldyBBcnJheShqKSxcbiAgICAgIHIgPSBuZXcgQXJyYXkoaiksXG4gICAgICBpID0gLTE7XG5cbiAgLy8gUmV2ZXJzZSBkZXNjZW5kaW5nIGRvbWFpbnMuXG4gIGlmIChkb21haW5bal0gPCBkb21haW5bMF0pIHtcbiAgICBkb21haW4gPSBkb21haW4uc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgcmFuZ2UgPSByYW5nZS5zbGljZSgpLnJldmVyc2UoKTtcbiAgfVxuXG4gIHdoaWxlICgrK2kgPCBqKSB7XG4gICAgZFtpXSA9IGRlaW50ZXJwb2xhdGUoZG9tYWluW2ldLCBkb21haW5baSArIDFdKTtcbiAgICByW2ldID0gcmVpbnRlcnBvbGF0ZShyYW5nZVtpXSwgcmFuZ2VbaSArIDFdKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbih4KSB7XG4gICAgdmFyIGkgPSBiaXNlY3QoZG9tYWluLCB4LCAxLCBqKSAtIDE7XG4gICAgcmV0dXJuIHJbaV0oZFtpXSh4KSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KHNvdXJjZSwgdGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXRcbiAgICAgIC5kb21haW4oc291cmNlLmRvbWFpbigpKVxuICAgICAgLnJhbmdlKHNvdXJjZS5yYW5nZSgpKVxuICAgICAgLmludGVycG9sYXRlKHNvdXJjZS5pbnRlcnBvbGF0ZSgpKVxuICAgICAgLmNsYW1wKHNvdXJjZS5jbGFtcCgpKTtcbn1cblxuLy8gZGVpbnRlcnBvbGF0ZShhLCBiKSh4KSB0YWtlcyBhIGRvbWFpbiB2YWx1ZSB4IGluIFthLGJdIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciB0IGluIFswLDFdLlxuLy8gcmVpbnRlcnBvbGF0ZShhLCBiKSh0KSB0YWtlcyBhIHBhcmFtZXRlciB0IGluIFswLDFdIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGRvbWFpbiB2YWx1ZSB4IGluIFthLGJdLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGludW91cyhkZWludGVycG9sYXRlLCByZWludGVycG9sYXRlKSB7XG4gIHZhciBkb21haW4gPSB1bml0LFxuICAgICAgcmFuZ2UgPSB1bml0LFxuICAgICAgaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZVZhbHVlLFxuICAgICAgY2xhbXAgPSBmYWxzZSxcbiAgICAgIHBpZWNld2lzZSxcbiAgICAgIG91dHB1dCxcbiAgICAgIGlucHV0O1xuXG4gIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgcGllY2V3aXNlID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKSA+IDIgPyBwb2x5bWFwIDogYmltYXA7XG4gICAgb3V0cHV0ID0gaW5wdXQgPSBudWxsO1xuICAgIHJldHVybiBzY2FsZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICByZXR1cm4gKG91dHB1dCB8fCAob3V0cHV0ID0gcGllY2V3aXNlKGRvbWFpbiwgcmFuZ2UsIGNsYW1wID8gZGVpbnRlcnBvbGF0ZUNsYW1wKGRlaW50ZXJwb2xhdGUpIDogZGVpbnRlcnBvbGF0ZSwgaW50ZXJwb2xhdGUpKSkoK3gpO1xuICB9XG5cbiAgc2NhbGUuaW52ZXJ0ID0gZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiAoaW5wdXQgfHwgKGlucHV0ID0gcGllY2V3aXNlKHJhbmdlLCBkb21haW4sIGRlaW50ZXJwb2xhdGVMaW5lYXIsIGNsYW1wID8gcmVpbnRlcnBvbGF0ZUNsYW1wKHJlaW50ZXJwb2xhdGUpIDogcmVpbnRlcnBvbGF0ZSkpKSgreSk7XG4gIH07XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRvbWFpbiA9IG1hcC5jYWxsKF8sIG51bWJlciksIHJlc2NhbGUoKSkgOiBkb21haW4uc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IHNsaWNlLmNhbGwoXyksIHJlc2NhbGUoKSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlUm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIHJhbmdlID0gc2xpY2UuY2FsbChfKSwgaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZVJvdW5kLCByZXNjYWxlKCk7XG4gIH07XG5cbiAgc2NhbGUuY2xhbXAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2xhbXAgPSAhIV8sIHJlc2NhbGUoKSkgOiBjbGFtcDtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0ZSA9IF8sIHJlc2NhbGUoKSkgOiBpbnRlcnBvbGF0ZTtcbiAgfTtcblxuICByZXR1cm4gcmVzY2FsZSgpO1xufVxuIiwiLy8gQ29tcHV0ZXMgdGhlIGRlY2ltYWwgY29lZmZpY2llbnQgYW5kIGV4cG9uZW50IG9mIHRoZSBzcGVjaWZpZWQgbnVtYmVyIHggd2l0aFxuLy8gc2lnbmlmaWNhbnQgZGlnaXRzIHAsIHdoZXJlIHggaXMgcG9zaXRpdmUgYW5kIHAgaXMgaW4gWzEsIDIxXSBvciB1bmRlZmluZWQuXG4vLyBGb3IgZXhhbXBsZSwgZm9ybWF0RGVjaW1hbCgxLjIzKSByZXR1cm5zIFtcIjEyM1wiLCAwXS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHApIHtcbiAgaWYgKChpID0gKHggPSBwID8geC50b0V4cG9uZW50aWFsKHAgLSAxKSA6IHgudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKFwiZVwiKSkgPCAwKSByZXR1cm4gbnVsbDsgLy8gTmFOLCDCsUluZmluaXR5XG4gIHZhciBpLCBjb2VmZmljaWVudCA9IHguc2xpY2UoMCwgaSk7XG5cbiAgLy8gVGhlIHN0cmluZyByZXR1cm5lZCBieSB0b0V4cG9uZW50aWFsIGVpdGhlciBoYXMgdGhlIGZvcm0gXFxkXFwuXFxkK2VbLStdXFxkK1xuICAvLyAoZS5nLiwgMS4yZSszKSBvciB0aGUgZm9ybSBcXGRlWy0rXVxcZCsgKGUuZy4sIDFlKzMpLlxuICByZXR1cm4gW1xuICAgIGNvZWZmaWNpZW50Lmxlbmd0aCA+IDEgPyBjb2VmZmljaWVudFswXSArIGNvZWZmaWNpZW50LnNsaWNlKDIpIDogY29lZmZpY2llbnQsXG4gICAgK3guc2xpY2UoaSArIDEpXG4gIF07XG59XG4iLCJpbXBvcnQgZm9ybWF0RGVjaW1hbCBmcm9tIFwiLi9mb3JtYXREZWNpbWFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHggPSBmb3JtYXREZWNpbWFsKE1hdGguYWJzKHgpKSwgeCA/IHhbMV0gOiBOYU47XG59XG4iLCIvLyBbW2ZpbGxdYWxpZ25dW3NpZ25dW3N5bWJvbF1bMF1bd2lkdGhdWyxdWy5wcmVjaXNpb25dW35dW3R5cGVdXG52YXIgcmUgPSAvXig/OiguKT8oWzw+PV5dKSk/KFsrXFwtKCBdKT8oWyQjXSk/KDApPyhcXGQrKT8oLCk/KFxcLlxcZCspPyh+KT8oW2EteiVdKT8kL2k7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpIHtcbiAgcmV0dXJuIG5ldyBGb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKTtcbn1cblxuZm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZSA9IEZvcm1hdFNwZWNpZmllci5wcm90b3R5cGU7IC8vIGluc3RhbmNlb2ZcblxuZnVuY3Rpb24gRm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcikge1xuICBpZiAoIShtYXRjaCA9IHJlLmV4ZWMoc3BlY2lmaWVyKSkpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZm9ybWF0OiBcIiArIHNwZWNpZmllcik7XG4gIHZhciBtYXRjaDtcbiAgdGhpcy5maWxsID0gbWF0Y2hbMV0gfHwgXCIgXCI7XG4gIHRoaXMuYWxpZ24gPSBtYXRjaFsyXSB8fCBcIj5cIjtcbiAgdGhpcy5zaWduID0gbWF0Y2hbM10gfHwgXCItXCI7XG4gIHRoaXMuc3ltYm9sID0gbWF0Y2hbNF0gfHwgXCJcIjtcbiAgdGhpcy56ZXJvID0gISFtYXRjaFs1XTtcbiAgdGhpcy53aWR0aCA9IG1hdGNoWzZdICYmICttYXRjaFs2XTtcbiAgdGhpcy5jb21tYSA9ICEhbWF0Y2hbN107XG4gIHRoaXMucHJlY2lzaW9uID0gbWF0Y2hbOF0gJiYgK21hdGNoWzhdLnNsaWNlKDEpO1xuICB0aGlzLnRyaW0gPSAhIW1hdGNoWzldO1xuICB0aGlzLnR5cGUgPSBtYXRjaFsxMF0gfHwgXCJcIjtcbn1cblxuRm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5maWxsXG4gICAgICArIHRoaXMuYWxpZ25cbiAgICAgICsgdGhpcy5zaWduXG4gICAgICArIHRoaXMuc3ltYm9sXG4gICAgICArICh0aGlzLnplcm8gPyBcIjBcIiA6IFwiXCIpXG4gICAgICArICh0aGlzLndpZHRoID09IG51bGwgPyBcIlwiIDogTWF0aC5tYXgoMSwgdGhpcy53aWR0aCB8IDApKVxuICAgICAgKyAodGhpcy5jb21tYSA/IFwiLFwiIDogXCJcIilcbiAgICAgICsgKHRoaXMucHJlY2lzaW9uID09IG51bGwgPyBcIlwiIDogXCIuXCIgKyBNYXRoLm1heCgwLCB0aGlzLnByZWNpc2lvbiB8IDApKVxuICAgICAgKyAodGhpcy50cmltID8gXCJ+XCIgOiBcIlwiKVxuICAgICAgKyB0aGlzLnR5cGU7XG59O1xuIiwiLy8gVHJpbXMgaW5zaWduaWZpY2FudCB6ZXJvcywgZS5nLiwgcmVwbGFjZXMgMS4yMDAwayB3aXRoIDEuMmsuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzKSB7XG4gIG91dDogZm9yICh2YXIgbiA9IHMubGVuZ3RoLCBpID0gMSwgaTAgPSAtMSwgaTE7IGkgPCBuOyArK2kpIHtcbiAgICBzd2l0Y2ggKHNbaV0pIHtcbiAgICAgIGNhc2UgXCIuXCI6IGkwID0gaTEgPSBpOyBicmVhaztcbiAgICAgIGNhc2UgXCIwXCI6IGlmIChpMCA9PT0gMCkgaTAgPSBpOyBpMSA9IGk7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogaWYgKGkwID4gMCkgeyBpZiAoIStzW2ldKSBicmVhayBvdXQ7IGkwID0gMDsgfSBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGkwID4gMCA/IHMuc2xpY2UoMCwgaTApICsgcy5zbGljZShpMSArIDEpIDogcztcbn1cbiIsImltcG9ydCBmb3JtYXREZWNpbWFsIGZyb20gXCIuL2Zvcm1hdERlY2ltYWxcIjtcblxuZXhwb3J0IHZhciBwcmVmaXhFeHBvbmVudDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWwoeCwgcCk7XG4gIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICB2YXIgY29lZmZpY2llbnQgPSBkWzBdLFxuICAgICAgZXhwb25lbnQgPSBkWzFdLFxuICAgICAgaSA9IGV4cG9uZW50IC0gKHByZWZpeEV4cG9uZW50ID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQgLyAzKSkpICogMykgKyAxLFxuICAgICAgbiA9IGNvZWZmaWNpZW50Lmxlbmd0aDtcbiAgcmV0dXJuIGkgPT09IG4gPyBjb2VmZmljaWVudFxuICAgICAgOiBpID4gbiA/IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGkgLSBuICsgMSkuam9pbihcIjBcIilcbiAgICAgIDogaSA+IDAgPyBjb2VmZmljaWVudC5zbGljZSgwLCBpKSArIFwiLlwiICsgY29lZmZpY2llbnQuc2xpY2UoaSlcbiAgICAgIDogXCIwLlwiICsgbmV3IEFycmF5KDEgLSBpKS5qb2luKFwiMFwiKSArIGZvcm1hdERlY2ltYWwoeCwgTWF0aC5tYXgoMCwgcCArIGkgLSAxKSlbMF07IC8vIGxlc3MgdGhhbiAxeSFcbn1cbiIsImltcG9ydCBmb3JtYXRMb2NhbGUgZnJvbSBcIi4vbG9jYWxlXCI7XG5cbnZhciBsb2NhbGU7XG5leHBvcnQgdmFyIGZvcm1hdDtcbmV4cG9ydCB2YXIgZm9ybWF0UHJlZml4O1xuXG5kZWZhdWx0TG9jYWxlKHtcbiAgZGVjaW1hbDogXCIuXCIsXG4gIHRob3VzYW5kczogXCIsXCIsXG4gIGdyb3VwaW5nOiBbM10sXG4gIGN1cnJlbmN5OiBbXCIkXCIsIFwiXCJdXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVmYXVsdExvY2FsZShkZWZpbml0aW9uKSB7XG4gIGxvY2FsZSA9IGZvcm1hdExvY2FsZShkZWZpbml0aW9uKTtcbiAgZm9ybWF0ID0gbG9jYWxlLmZvcm1hdDtcbiAgZm9ybWF0UHJlZml4ID0gbG9jYWxlLmZvcm1hdFByZWZpeDtcbiAgcmV0dXJuIGxvY2FsZTtcbn1cbiIsImltcG9ydCBmb3JtYXREZWNpbWFsIGZyb20gXCIuL2Zvcm1hdERlY2ltYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWwoeCwgcCk7XG4gIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICB2YXIgY29lZmZpY2llbnQgPSBkWzBdLFxuICAgICAgZXhwb25lbnQgPSBkWzFdO1xuICByZXR1cm4gZXhwb25lbnQgPCAwID8gXCIwLlwiICsgbmV3IEFycmF5KC1leHBvbmVudCkuam9pbihcIjBcIikgKyBjb2VmZmljaWVudFxuICAgICAgOiBjb2VmZmljaWVudC5sZW5ndGggPiBleHBvbmVudCArIDEgPyBjb2VmZmljaWVudC5zbGljZSgwLCBleHBvbmVudCArIDEpICsgXCIuXCIgKyBjb2VmZmljaWVudC5zbGljZShleHBvbmVudCArIDEpXG4gICAgICA6IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGV4cG9uZW50IC0gY29lZmZpY2llbnQubGVuZ3RoICsgMikuam9pbihcIjBcIik7XG59XG4iLCJpbXBvcnQgZm9ybWF0UHJlZml4QXV0byBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvXCI7XG5pbXBvcnQgZm9ybWF0Um91bmRlZCBmcm9tIFwiLi9mb3JtYXRSb3VuZGVkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXCIlXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuICh4ICogMTAwKS50b0ZpeGVkKHApOyB9LFxuICBcImJcIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygyKTsgfSxcbiAgXCJjXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHggKyBcIlwiOyB9LFxuICBcImRcIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygxMCk7IH0sXG4gIFwiZVwiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiB4LnRvRXhwb25lbnRpYWwocCk7IH0sXG4gIFwiZlwiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiB4LnRvRml4ZWQocCk7IH0sXG4gIFwiZ1wiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiB4LnRvUHJlY2lzaW9uKHApOyB9LFxuICBcIm9cIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZyg4KTsgfSxcbiAgXCJwXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIGZvcm1hdFJvdW5kZWQoeCAqIDEwMCwgcCk7IH0sXG4gIFwiclwiOiBmb3JtYXRSb3VuZGVkLFxuICBcInNcIjogZm9ybWF0UHJlZml4QXV0byxcbiAgXCJYXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7IH0sXG4gIFwieFwiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDE2KTsgfVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHg7XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnRcIjtcbmltcG9ydCBmb3JtYXRHcm91cCBmcm9tIFwiLi9mb3JtYXRHcm91cFwiO1xuaW1wb3J0IGZvcm1hdE51bWVyYWxzIGZyb20gXCIuL2Zvcm1hdE51bWVyYWxzXCI7XG5pbXBvcnQgZm9ybWF0U3BlY2lmaWVyIGZyb20gXCIuL2Zvcm1hdFNwZWNpZmllclwiO1xuaW1wb3J0IGZvcm1hdFRyaW0gZnJvbSBcIi4vZm9ybWF0VHJpbVwiO1xuaW1wb3J0IGZvcm1hdFR5cGVzIGZyb20gXCIuL2Zvcm1hdFR5cGVzXCI7XG5pbXBvcnQge3ByZWZpeEV4cG9uZW50fSBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvXCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHlcIjtcblxudmFyIHByZWZpeGVzID0gW1wieVwiLFwielwiLFwiYVwiLFwiZlwiLFwicFwiLFwiblwiLFwiwrVcIixcIm1cIixcIlwiLFwia1wiLFwiTVwiLFwiR1wiLFwiVFwiLFwiUFwiLFwiRVwiLFwiWlwiLFwiWVwiXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obG9jYWxlKSB7XG4gIHZhciBncm91cCA9IGxvY2FsZS5ncm91cGluZyAmJiBsb2NhbGUudGhvdXNhbmRzID8gZm9ybWF0R3JvdXAobG9jYWxlLmdyb3VwaW5nLCBsb2NhbGUudGhvdXNhbmRzKSA6IGlkZW50aXR5LFxuICAgICAgY3VycmVuY3kgPSBsb2NhbGUuY3VycmVuY3ksXG4gICAgICBkZWNpbWFsID0gbG9jYWxlLmRlY2ltYWwsXG4gICAgICBudW1lcmFscyA9IGxvY2FsZS5udW1lcmFscyA/IGZvcm1hdE51bWVyYWxzKGxvY2FsZS5udW1lcmFscykgOiBpZGVudGl0eSxcbiAgICAgIHBlcmNlbnQgPSBsb2NhbGUucGVyY2VudCB8fCBcIiVcIjtcblxuICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyKSB7XG4gICAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcik7XG5cbiAgICB2YXIgZmlsbCA9IHNwZWNpZmllci5maWxsLFxuICAgICAgICBhbGlnbiA9IHNwZWNpZmllci5hbGlnbixcbiAgICAgICAgc2lnbiA9IHNwZWNpZmllci5zaWduLFxuICAgICAgICBzeW1ib2wgPSBzcGVjaWZpZXIuc3ltYm9sLFxuICAgICAgICB6ZXJvID0gc3BlY2lmaWVyLnplcm8sXG4gICAgICAgIHdpZHRoID0gc3BlY2lmaWVyLndpZHRoLFxuICAgICAgICBjb21tYSA9IHNwZWNpZmllci5jb21tYSxcbiAgICAgICAgcHJlY2lzaW9uID0gc3BlY2lmaWVyLnByZWNpc2lvbixcbiAgICAgICAgdHJpbSA9IHNwZWNpZmllci50cmltLFxuICAgICAgICB0eXBlID0gc3BlY2lmaWVyLnR5cGU7XG5cbiAgICAvLyBUaGUgXCJuXCIgdHlwZSBpcyBhbiBhbGlhcyBmb3IgXCIsZ1wiLlxuICAgIGlmICh0eXBlID09PSBcIm5cIikgY29tbWEgPSB0cnVlLCB0eXBlID0gXCJnXCI7XG5cbiAgICAvLyBUaGUgXCJcIiB0eXBlLCBhbmQgYW55IGludmFsaWQgdHlwZSwgaXMgYW4gYWxpYXMgZm9yIFwiLjEyfmdcIi5cbiAgICBlbHNlIGlmICghZm9ybWF0VHlwZXNbdHlwZV0pIHByZWNpc2lvbiA9PSBudWxsICYmIChwcmVjaXNpb24gPSAxMiksIHRyaW0gPSB0cnVlLCB0eXBlID0gXCJnXCI7XG5cbiAgICAvLyBJZiB6ZXJvIGZpbGwgaXMgc3BlY2lmaWVkLCBwYWRkaW5nIGdvZXMgYWZ0ZXIgc2lnbiBhbmQgYmVmb3JlIGRpZ2l0cy5cbiAgICBpZiAoemVybyB8fCAoZmlsbCA9PT0gXCIwXCIgJiYgYWxpZ24gPT09IFwiPVwiKSkgemVybyA9IHRydWUsIGZpbGwgPSBcIjBcIiwgYWxpZ24gPSBcIj1cIjtcblxuICAgIC8vIENvbXB1dGUgdGhlIHByZWZpeCBhbmQgc3VmZml4LlxuICAgIC8vIEZvciBTSS1wcmVmaXgsIHRoZSBzdWZmaXggaXMgbGF6aWx5IGNvbXB1dGVkLlxuICAgIHZhciBwcmVmaXggPSBzeW1ib2wgPT09IFwiJFwiID8gY3VycmVuY3lbMF0gOiBzeW1ib2wgPT09IFwiI1wiICYmIC9bYm94WF0vLnRlc3QodHlwZSkgPyBcIjBcIiArIHR5cGUudG9Mb3dlckNhc2UoKSA6IFwiXCIsXG4gICAgICAgIHN1ZmZpeCA9IHN5bWJvbCA9PT0gXCIkXCIgPyBjdXJyZW5jeVsxXSA6IC9bJXBdLy50ZXN0KHR5cGUpID8gcGVyY2VudCA6IFwiXCI7XG5cbiAgICAvLyBXaGF0IGZvcm1hdCBmdW5jdGlvbiBzaG91bGQgd2UgdXNlP1xuICAgIC8vIElzIHRoaXMgYW4gaW50ZWdlciB0eXBlP1xuICAgIC8vIENhbiB0aGlzIHR5cGUgZ2VuZXJhdGUgZXhwb25lbnRpYWwgbm90YXRpb24/XG4gICAgdmFyIGZvcm1hdFR5cGUgPSBmb3JtYXRUeXBlc1t0eXBlXSxcbiAgICAgICAgbWF5YmVTdWZmaXggPSAvW2RlZmdwcnMlXS8udGVzdCh0eXBlKTtcblxuICAgIC8vIFNldCB0aGUgZGVmYXVsdCBwcmVjaXNpb24gaWYgbm90IHNwZWNpZmllZCxcbiAgICAvLyBvciBjbGFtcCB0aGUgc3BlY2lmaWVkIHByZWNpc2lvbiB0byB0aGUgc3VwcG9ydGVkIHJhbmdlLlxuICAgIC8vIEZvciBzaWduaWZpY2FudCBwcmVjaXNpb24sIGl0IG11c3QgYmUgaW4gWzEsIDIxXS5cbiAgICAvLyBGb3IgZml4ZWQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFswLCAyMF0uXG4gICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uID09IG51bGwgPyA2XG4gICAgICAgIDogL1tncHJzXS8udGVzdCh0eXBlKSA/IE1hdGgubWF4KDEsIE1hdGgubWluKDIxLCBwcmVjaXNpb24pKVxuICAgICAgICA6IE1hdGgubWF4KDAsIE1hdGgubWluKDIwLCBwcmVjaXNpb24pKTtcblxuICAgIGZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSkge1xuICAgICAgdmFyIHZhbHVlUHJlZml4ID0gcHJlZml4LFxuICAgICAgICAgIHZhbHVlU3VmZml4ID0gc3VmZml4LFxuICAgICAgICAgIGksIG4sIGM7XG5cbiAgICAgIGlmICh0eXBlID09PSBcImNcIikge1xuICAgICAgICB2YWx1ZVN1ZmZpeCA9IGZvcm1hdFR5cGUodmFsdWUpICsgdmFsdWVTdWZmaXg7XG4gICAgICAgIHZhbHVlID0gXCJcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gK3ZhbHVlO1xuXG4gICAgICAgIC8vIFBlcmZvcm0gdGhlIGluaXRpYWwgZm9ybWF0dGluZy5cbiAgICAgICAgdmFyIHZhbHVlTmVnYXRpdmUgPSB2YWx1ZSA8IDA7XG4gICAgICAgIHZhbHVlID0gZm9ybWF0VHlwZShNYXRoLmFicyh2YWx1ZSksIHByZWNpc2lvbik7XG5cbiAgICAgICAgLy8gVHJpbSBpbnNpZ25pZmljYW50IHplcm9zLlxuICAgICAgICBpZiAodHJpbSkgdmFsdWUgPSBmb3JtYXRUcmltKHZhbHVlKTtcblxuICAgICAgICAvLyBJZiBhIG5lZ2F0aXZlIHZhbHVlIHJvdW5kcyB0byB6ZXJvIGR1cmluZyBmb3JtYXR0aW5nLCB0cmVhdCBhcyBwb3NpdGl2ZS5cbiAgICAgICAgaWYgKHZhbHVlTmVnYXRpdmUgJiYgK3ZhbHVlID09PSAwKSB2YWx1ZU5lZ2F0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguXG4gICAgICAgIHZhbHVlUHJlZml4ID0gKHZhbHVlTmVnYXRpdmUgPyAoc2lnbiA9PT0gXCIoXCIgPyBzaWduIDogXCItXCIpIDogc2lnbiA9PT0gXCItXCIgfHwgc2lnbiA9PT0gXCIoXCIgPyBcIlwiIDogc2lnbikgKyB2YWx1ZVByZWZpeDtcbiAgICAgICAgdmFsdWVTdWZmaXggPSAodHlwZSA9PT0gXCJzXCIgPyBwcmVmaXhlc1s4ICsgcHJlZml4RXhwb25lbnQgLyAzXSA6IFwiXCIpICsgdmFsdWVTdWZmaXggKyAodmFsdWVOZWdhdGl2ZSAmJiBzaWduID09PSBcIihcIiA/IFwiKVwiIDogXCJcIik7XG5cbiAgICAgICAgLy8gQnJlYWsgdGhlIGZvcm1hdHRlZCB2YWx1ZSBpbnRvIHRoZSBpbnRlZ2VyIOKAnHZhbHVl4oCdIHBhcnQgdGhhdCBjYW4gYmVcbiAgICAgICAgLy8gZ3JvdXBlZCwgYW5kIGZyYWN0aW9uYWwgb3IgZXhwb25lbnRpYWwg4oCcc3VmZml44oCdIHBhcnQgdGhhdCBpcyBub3QuXG4gICAgICAgIGlmIChtYXliZVN1ZmZpeCkge1xuICAgICAgICAgIGkgPSAtMSwgbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgICAgICAgaWYgKGMgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpLCA0OCA+IGMgfHwgYyA+IDU3KSB7XG4gICAgICAgICAgICAgIHZhbHVlU3VmZml4ID0gKGMgPT09IDQ2ID8gZGVjaW1hbCArIHZhbHVlLnNsaWNlKGkgKyAxKSA6IHZhbHVlLnNsaWNlKGkpKSArIHZhbHVlU3VmZml4O1xuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIG5vdCBcIjBcIiwgZ3JvdXBpbmcgaXMgYXBwbGllZCBiZWZvcmUgcGFkZGluZy5cbiAgICAgIGlmIChjb21tYSAmJiAhemVybykgdmFsdWUgPSBncm91cCh2YWx1ZSwgSW5maW5pdHkpO1xuXG4gICAgICAvLyBDb21wdXRlIHRoZSBwYWRkaW5nLlxuICAgICAgdmFyIGxlbmd0aCA9IHZhbHVlUHJlZml4Lmxlbmd0aCArIHZhbHVlLmxlbmd0aCArIHZhbHVlU3VmZml4Lmxlbmd0aCxcbiAgICAgICAgICBwYWRkaW5nID0gbGVuZ3RoIDwgd2lkdGggPyBuZXcgQXJyYXkod2lkdGggLSBsZW5ndGggKyAxKS5qb2luKGZpbGwpIDogXCJcIjtcblxuICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGFmdGVyIHBhZGRpbmcuXG4gICAgICBpZiAoY29tbWEgJiYgemVybykgdmFsdWUgPSBncm91cChwYWRkaW5nICsgdmFsdWUsIHBhZGRpbmcubGVuZ3RoID8gd2lkdGggLSB2YWx1ZVN1ZmZpeC5sZW5ndGggOiBJbmZpbml0eSksIHBhZGRpbmcgPSBcIlwiO1xuXG4gICAgICAvLyBSZWNvbnN0cnVjdCB0aGUgZmluYWwgb3V0cHV0IGJhc2VkIG9uIHRoZSBkZXNpcmVkIGFsaWdubWVudC5cbiAgICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgICAgY2FzZSBcIjxcIjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXggKyBwYWRkaW5nOyBicmVhaztcbiAgICAgICAgY2FzZSBcIj1cIjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHBhZGRpbmcgKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhaztcbiAgICAgICAgY2FzZSBcIl5cIjogdmFsdWUgPSBwYWRkaW5nLnNsaWNlKDAsIGxlbmd0aCA9IHBhZGRpbmcubGVuZ3RoID4+IDEpICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4ICsgcGFkZGluZy5zbGljZShsZW5ndGgpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDogdmFsdWUgPSBwYWRkaW5nICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bWVyYWxzKHZhbHVlKTtcbiAgICB9XG5cbiAgICBmb3JtYXQudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBzcGVjaWZpZXIgKyBcIlwiO1xuICAgIH07XG5cbiAgICByZXR1cm4gZm9ybWF0O1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UHJlZml4KHNwZWNpZmllciwgdmFsdWUpIHtcbiAgICB2YXIgZiA9IG5ld0Zvcm1hdCgoc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciksIHNwZWNpZmllci50eXBlID0gXCJmXCIsIHNwZWNpZmllcikpLFxuICAgICAgICBlID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMsXG4gICAgICAgIGsgPSBNYXRoLnBvdygxMCwgLWUpLFxuICAgICAgICBwcmVmaXggPSBwcmVmaXhlc1s4ICsgZSAvIDNdO1xuICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGYoayAqIHZhbHVlKSArIHByZWZpeDtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtYXQ6IG5ld0Zvcm1hdCxcbiAgICBmb3JtYXRQcmVmaXg6IGZvcm1hdFByZWZpeFxuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZ3JvdXBpbmcsIHRob3VzYW5kcykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIHdpZHRoKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5sZW5ndGgsXG4gICAgICAgIHQgPSBbXSxcbiAgICAgICAgaiA9IDAsXG4gICAgICAgIGcgPSBncm91cGluZ1swXSxcbiAgICAgICAgbGVuZ3RoID0gMDtcblxuICAgIHdoaWxlIChpID4gMCAmJiBnID4gMCkge1xuICAgICAgaWYgKGxlbmd0aCArIGcgKyAxID4gd2lkdGgpIGcgPSBNYXRoLm1heCgxLCB3aWR0aCAtIGxlbmd0aCk7XG4gICAgICB0LnB1c2godmFsdWUuc3Vic3RyaW5nKGkgLT0gZywgaSArIGcpKTtcbiAgICAgIGlmICgobGVuZ3RoICs9IGcgKyAxKSA+IHdpZHRoKSBicmVhaztcbiAgICAgIGcgPSBncm91cGluZ1tqID0gKGogKyAxKSAlIGdyb3VwaW5nLmxlbmd0aF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHQucmV2ZXJzZSgpLmpvaW4odGhvdXNhbmRzKTtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG51bWVyYWxzKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bMC05XS9nLCBmdW5jdGlvbihpKSB7XG4gICAgICByZXR1cm4gbnVtZXJhbHNbK2ldO1xuICAgIH0pO1xuICB9O1xufVxuIiwiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXApIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIC1leHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xufVxuIiwiaW1wb3J0IHt0aWNrU3RlcH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2Zvcm1hdCwgZm9ybWF0UHJlZml4LCBmb3JtYXRTcGVjaWZpZXIsIHByZWNpc2lvbkZpeGVkLCBwcmVjaXNpb25QcmVmaXgsIHByZWNpc2lvblJvdW5kfSBmcm9tIFwiZDMtZm9ybWF0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGRvbWFpbiwgY291bnQsIHNwZWNpZmllcikge1xuICB2YXIgc3RhcnQgPSBkb21haW5bMF0sXG4gICAgICBzdG9wID0gZG9tYWluW2RvbWFpbi5sZW5ndGggLSAxXSxcbiAgICAgIHN0ZXAgPSB0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQgPT0gbnVsbCA/IDEwIDogY291bnQpLFxuICAgICAgcHJlY2lzaW9uO1xuICBzcGVjaWZpZXIgPSBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyID09IG51bGwgPyBcIixmXCIgOiBzcGVjaWZpZXIpO1xuICBzd2l0Y2ggKHNwZWNpZmllci50eXBlKSB7XG4gICAgY2FzZSBcInNcIjoge1xuICAgICAgdmFyIHZhbHVlID0gTWF0aC5tYXgoTWF0aC5hYnMoc3RhcnQpLCBNYXRoLmFicyhzdG9wKSk7XG4gICAgICBpZiAoc3BlY2lmaWVyLnByZWNpc2lvbiA9PSBudWxsICYmICFpc05hTihwcmVjaXNpb24gPSBwcmVjaXNpb25QcmVmaXgoc3RlcCwgdmFsdWUpKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbjtcbiAgICAgIHJldHVybiBmb3JtYXRQcmVmaXgoc3BlY2lmaWVyLCB2YWx1ZSk7XG4gICAgfVxuICAgIGNhc2UgXCJcIjpcbiAgICBjYXNlIFwiZVwiOlxuICAgIGNhc2UgXCJnXCI6XG4gICAgY2FzZSBcInBcIjpcbiAgICBjYXNlIFwiclwiOiB7XG4gICAgICBpZiAoc3BlY2lmaWVyLnByZWNpc2lvbiA9PSBudWxsICYmICFpc05hTihwcmVjaXNpb24gPSBwcmVjaXNpb25Sb3VuZChzdGVwLCBNYXRoLm1heChNYXRoLmFicyhzdGFydCksIE1hdGguYWJzKHN0b3ApKSkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uIC0gKHNwZWNpZmllci50eXBlID09PSBcImVcIik7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBcImZcIjpcbiAgICBjYXNlIFwiJVwiOiB7XG4gICAgICBpZiAoc3BlY2lmaWVyLnByZWNpc2lvbiA9PSBudWxsICYmICFpc05hTihwcmVjaXNpb24gPSBwcmVjaXNpb25GaXhlZChzdGVwKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb24gLSAoc3BlY2lmaWVyLnR5cGUgPT09IFwiJVwiKSAqIDI7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZvcm1hdChzcGVjaWZpZXIpO1xufVxuIiwiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXAsIHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCh2YWx1ZSkgLyAzKSkpICogMyAtIGV4cG9uZW50KE1hdGguYWJzKHN0ZXApKSk7XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RlcCwgbWF4KSB7XG4gIHN0ZXAgPSBNYXRoLmFicyhzdGVwKSwgbWF4ID0gTWF0aC5hYnMobWF4KSAtIHN0ZXA7XG4gIHJldHVybiBNYXRoLm1heCgwLCBleHBvbmVudChtYXgpIC0gZXhwb25lbnQoc3RlcCkpICsgMTtcbn1cbiIsImltcG9ydCB7dGlja3MsIHRpY2tJbmNyZW1lbnR9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZU51bWJlciBhcyByZWludGVycG9sYXRlfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7ZGVmYXVsdCBhcyBjb250aW51b3VzLCBjb3B5LCBkZWludGVycG9sYXRlTGluZWFyIGFzIGRlaW50ZXJwb2xhdGV9IGZyb20gXCIuL2NvbnRpbnVvdXNcIjtcbmltcG9ydCB0aWNrRm9ybWF0IGZyb20gXCIuL3RpY2tGb3JtYXRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmVhcmlzaChzY2FsZSkge1xuICB2YXIgZG9tYWluID0gc2NhbGUuZG9tYWluO1xuXG4gIHNjYWxlLnRpY2tzID0gZnVuY3Rpb24oY291bnQpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHJldHVybiB0aWNrcyhkWzBdLCBkW2QubGVuZ3RoIC0gMV0sIGNvdW50ID09IG51bGwgPyAxMCA6IGNvdW50KTtcbiAgfTtcblxuICBzY2FsZS50aWNrRm9ybWF0ID0gZnVuY3Rpb24oY291bnQsIHNwZWNpZmllcikge1xuICAgIHJldHVybiB0aWNrRm9ybWF0KGRvbWFpbigpLCBjb3VudCwgc3BlY2lmaWVyKTtcbiAgfTtcblxuICBzY2FsZS5uaWNlID0gZnVuY3Rpb24oY291bnQpIHtcbiAgICBpZiAoY291bnQgPT0gbnVsbCkgY291bnQgPSAxMDtcblxuICAgIHZhciBkID0gZG9tYWluKCksXG4gICAgICAgIGkwID0gMCxcbiAgICAgICAgaTEgPSBkLmxlbmd0aCAtIDEsXG4gICAgICAgIHN0YXJ0ID0gZFtpMF0sXG4gICAgICAgIHN0b3AgPSBkW2kxXSxcbiAgICAgICAgc3RlcDtcblxuICAgIGlmIChzdG9wIDwgc3RhcnQpIHtcbiAgICAgIHN0ZXAgPSBzdGFydCwgc3RhcnQgPSBzdG9wLCBzdG9wID0gc3RlcDtcbiAgICAgIHN0ZXAgPSBpMCwgaTAgPSBpMSwgaTEgPSBzdGVwO1xuICAgIH1cblxuICAgIHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCk7XG5cbiAgICBpZiAoc3RlcCA+IDApIHtcbiAgICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAvIHN0ZXApICogc3RlcDtcbiAgICAgIHN0b3AgPSBNYXRoLmNlaWwoc3RvcCAvIHN0ZXApICogc3RlcDtcbiAgICAgIHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCk7XG4gICAgfSBlbHNlIGlmIChzdGVwIDwgMCkge1xuICAgICAgc3RhcnQgPSBNYXRoLmNlaWwoc3RhcnQgKiBzdGVwKSAvIHN0ZXA7XG4gICAgICBzdG9wID0gTWF0aC5mbG9vcihzdG9wICogc3RlcCkgLyBzdGVwO1xuICAgICAgc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KTtcbiAgICB9XG5cbiAgICBpZiAoc3RlcCA+IDApIHtcbiAgICAgIGRbaTBdID0gTWF0aC5mbG9vcihzdGFydCAvIHN0ZXApICogc3RlcDtcbiAgICAgIGRbaTFdID0gTWF0aC5jZWlsKHN0b3AgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICBkb21haW4oZCk7XG4gICAgfSBlbHNlIGlmIChzdGVwIDwgMCkge1xuICAgICAgZFtpMF0gPSBNYXRoLmNlaWwoc3RhcnQgKiBzdGVwKSAvIHN0ZXA7XG4gICAgICBkW2kxXSA9IE1hdGguZmxvb3Ioc3RvcCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgIGRvbWFpbihkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2NhbGU7XG4gIH07XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaW5lYXIoKSB7XG4gIHZhciBzY2FsZSA9IGNvbnRpbnVvdXMoZGVpbnRlcnBvbGF0ZSwgcmVpbnRlcnBvbGF0ZSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBsaW5lYXIoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGxpbmVhcmlzaChzY2FsZSk7XG59XG4iLCJ2YXIgdDAgPSBuZXcgRGF0ZSxcbiAgICB0MSA9IG5ldyBEYXRlO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBuZXdJbnRlcnZhbChmbG9vcmksIG9mZnNldGksIGNvdW50LCBmaWVsZCkge1xuXG4gIGZ1bmN0aW9uIGludGVydmFsKGRhdGUpIHtcbiAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSkpLCBkYXRlO1xuICB9XG5cbiAgaW50ZXJ2YWwuZmxvb3IgPSBpbnRlcnZhbDtcblxuICBpbnRlcnZhbC5jZWlsID0gZnVuY3Rpb24oZGF0ZSkge1xuICAgIHJldHVybiBmbG9vcmkoZGF0ZSA9IG5ldyBEYXRlKGRhdGUgLSAxKSksIG9mZnNldGkoZGF0ZSwgMSksIGZsb29yaShkYXRlKSwgZGF0ZTtcbiAgfTtcblxuICBpbnRlcnZhbC5yb3VuZCA9IGZ1bmN0aW9uKGRhdGUpIHtcbiAgICB2YXIgZDAgPSBpbnRlcnZhbChkYXRlKSxcbiAgICAgICAgZDEgPSBpbnRlcnZhbC5jZWlsKGRhdGUpO1xuICAgIHJldHVybiBkYXRlIC0gZDAgPCBkMSAtIGRhdGUgPyBkMCA6IGQxO1xuICB9O1xuXG4gIGludGVydmFsLm9mZnNldCA9IGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICByZXR1cm4gb2Zmc2V0aShkYXRlID0gbmV3IERhdGUoK2RhdGUpLCBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKSksIGRhdGU7XG4gIH07XG5cbiAgaW50ZXJ2YWwucmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIHZhciByYW5nZSA9IFtdLCBwcmV2aW91cztcbiAgICBzdGFydCA9IGludGVydmFsLmNlaWwoc3RhcnQpO1xuICAgIHN0ZXAgPSBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKTtcbiAgICBpZiAoIShzdGFydCA8IHN0b3ApIHx8ICEoc3RlcCA+IDApKSByZXR1cm4gcmFuZ2U7IC8vIGFsc28gaGFuZGxlcyBJbnZhbGlkIERhdGVcbiAgICBkbyByYW5nZS5wdXNoKHByZXZpb3VzID0gbmV3IERhdGUoK3N0YXJ0KSksIG9mZnNldGkoc3RhcnQsIHN0ZXApLCBmbG9vcmkoc3RhcnQpO1xuICAgIHdoaWxlIChwcmV2aW91cyA8IHN0YXJ0ICYmIHN0YXJ0IDwgc3RvcCk7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIGludGVydmFsLmZpbHRlciA9IGZ1bmN0aW9uKHRlc3QpIHtcbiAgICByZXR1cm4gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgICAgaWYgKGRhdGUgPj0gZGF0ZSkgd2hpbGUgKGZsb29yaShkYXRlKSwgIXRlc3QoZGF0ZSkpIGRhdGUuc2V0VGltZShkYXRlIC0gMSk7XG4gICAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgICAgaWYgKGRhdGUgPj0gZGF0ZSkge1xuICAgICAgICBpZiAoc3RlcCA8IDApIHdoaWxlICgrK3N0ZXAgPD0gMCkge1xuICAgICAgICAgIHdoaWxlIChvZmZzZXRpKGRhdGUsIC0xKSwgIXRlc3QoZGF0ZSkpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbiAgICAgICAgfSBlbHNlIHdoaWxlICgtLXN0ZXAgPj0gMCkge1xuICAgICAgICAgIHdoaWxlIChvZmZzZXRpKGRhdGUsICsxKSwgIXRlc3QoZGF0ZSkpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGlmIChjb3VudCkge1xuICAgIGludGVydmFsLmNvdW50ID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgICAgdDAuc2V0VGltZSgrc3RhcnQpLCB0MS5zZXRUaW1lKCtlbmQpO1xuICAgICAgZmxvb3JpKHQwKSwgZmxvb3JpKHQxKTtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKGNvdW50KHQwLCB0MSkpO1xuICAgIH07XG5cbiAgICBpbnRlcnZhbC5ldmVyeSA9IGZ1bmN0aW9uKHN0ZXApIHtcbiAgICAgIHN0ZXAgPSBNYXRoLmZsb29yKHN0ZXApO1xuICAgICAgcmV0dXJuICFpc0Zpbml0ZShzdGVwKSB8fCAhKHN0ZXAgPiAwKSA/IG51bGxcbiAgICAgICAgICA6ICEoc3RlcCA+IDEpID8gaW50ZXJ2YWxcbiAgICAgICAgICA6IGludGVydmFsLmZpbHRlcihmaWVsZFxuICAgICAgICAgICAgICA/IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGZpZWxkKGQpICUgc3RlcCA9PT0gMDsgfVxuICAgICAgICAgICAgICA6IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGludGVydmFsLmNvdW50KDAsIGQpICUgc3RlcCA9PT0gMDsgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBpbnRlcnZhbDtcbn1cbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbFwiO1xuXG52YXIgbWlsbGlzZWNvbmQgPSBpbnRlcnZhbChmdW5jdGlvbigpIHtcbiAgLy8gbm9vcFxufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGVuZCAtIHN0YXJ0O1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbm1pbGxpc2Vjb25kLmV2ZXJ5ID0gZnVuY3Rpb24oaykge1xuICBrID0gTWF0aC5mbG9vcihrKTtcbiAgaWYgKCFpc0Zpbml0ZShrKSB8fCAhKGsgPiAwKSkgcmV0dXJuIG51bGw7XG4gIGlmICghKGsgPiAxKSkgcmV0dXJuIG1pbGxpc2Vjb25kO1xuICByZXR1cm4gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0VGltZShNYXRoLmZsb29yKGRhdGUgLyBrKSAqIGspO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGspO1xuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBrO1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1pbGxpc2Vjb25kO1xuZXhwb3J0IHZhciBtaWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZC5yYW5nZTtcbiIsImV4cG9ydCB2YXIgZHVyYXRpb25TZWNvbmQgPSAxZTM7XG5leHBvcnQgdmFyIGR1cmF0aW9uTWludXRlID0gNmU0O1xuZXhwb3J0IHZhciBkdXJhdGlvbkhvdXIgPSAzNmU1O1xuZXhwb3J0IHZhciBkdXJhdGlvbkRheSA9IDg2NGU1O1xuZXhwb3J0IHZhciBkdXJhdGlvbldlZWsgPSA2MDQ4ZTU7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25EYXksIGR1cmF0aW9uTWludXRlfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgZGF5ID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCAtIChlbmQuZ2V0VGltZXpvbmVPZmZzZXQoKSAtIHN0YXJ0LmdldFRpbWV6b25lT2Zmc2V0KCkpICogZHVyYXRpb25NaW51dGUpIC8gZHVyYXRpb25EYXk7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldERhdGUoKSAtIDE7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGF5O1xuZXhwb3J0IHZhciBkYXlzID0gZGF5LnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uU2Vjb25kfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgc2Vjb25kID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFRpbWUoTWF0aC5mbG9vcihkYXRlIC8gZHVyYXRpb25TZWNvbmQpICogZHVyYXRpb25TZWNvbmQpO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25TZWNvbmQpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uU2Vjb25kO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENTZWNvbmRzKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgc2Vjb25kO1xuZXhwb3J0IHZhciBzZWNvbmRzID0gc2Vjb25kLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uTWludXRlfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgbWludXRlID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFRpbWUoTWF0aC5mbG9vcihkYXRlIC8gZHVyYXRpb25NaW51dGUpICogZHVyYXRpb25NaW51dGUpO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25NaW51dGUpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uTWludXRlO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRNaW51dGVzKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgbWludXRlO1xuZXhwb3J0IHZhciBtaW51dGVzID0gbWludXRlLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uSG91ciwgZHVyYXRpb25NaW51dGV9IGZyb20gXCIuL2R1cmF0aW9uXCI7XG5cbnZhciBob3VyID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICB2YXIgb2Zmc2V0ID0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpICogZHVyYXRpb25NaW51dGUgJSBkdXJhdGlvbkhvdXI7XG4gIGlmIChvZmZzZXQgPCAwKSBvZmZzZXQgKz0gZHVyYXRpb25Ib3VyO1xuICBkYXRlLnNldFRpbWUoTWF0aC5mbG9vcigoK2RhdGUgLSBvZmZzZXQpIC8gZHVyYXRpb25Ib3VyKSAqIGR1cmF0aW9uSG91ciArIG9mZnNldCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbkhvdXIpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uSG91cjtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0SG91cnMoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBob3VyO1xuZXhwb3J0IHZhciBob3VycyA9IGhvdXIucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25NaW51dGUsIGR1cmF0aW9uV2Vla30gZnJvbSBcIi4vZHVyYXRpb25cIjtcblxuZnVuY3Rpb24gd2Vla2RheShpKSB7XG4gIHJldHVybiBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gKGRhdGUuZ2V0RGF5KCkgKyA3IC0gaSkgJSA3KTtcbiAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgc3RlcCAqIDcpO1xuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCAtIChlbmQuZ2V0VGltZXpvbmVPZmZzZXQoKSAtIHN0YXJ0LmdldFRpbWV6b25lT2Zmc2V0KCkpICogZHVyYXRpb25NaW51dGUpIC8gZHVyYXRpb25XZWVrO1xuICB9KTtcbn1cblxuZXhwb3J0IHZhciBzdW5kYXkgPSB3ZWVrZGF5KDApO1xuZXhwb3J0IHZhciBtb25kYXkgPSB3ZWVrZGF5KDEpO1xuZXhwb3J0IHZhciB0dWVzZGF5ID0gd2Vla2RheSgyKTtcbmV4cG9ydCB2YXIgd2VkbmVzZGF5ID0gd2Vla2RheSgzKTtcbmV4cG9ydCB2YXIgdGh1cnNkYXkgPSB3ZWVrZGF5KDQpO1xuZXhwb3J0IHZhciBmcmlkYXkgPSB3ZWVrZGF5KDUpO1xuZXhwb3J0IHZhciBzYXR1cmRheSA9IHdlZWtkYXkoNik7XG5cbmV4cG9ydCB2YXIgc3VuZGF5cyA9IHN1bmRheS5yYW5nZTtcbmV4cG9ydCB2YXIgbW9uZGF5cyA9IG1vbmRheS5yYW5nZTtcbmV4cG9ydCB2YXIgdHVlc2RheXMgPSB0dWVzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB3ZWRuZXNkYXlzID0gd2VkbmVzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB0aHVyc2RheXMgPSB0aHVyc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgZnJpZGF5cyA9IGZyaWRheS5yYW5nZTtcbmV4cG9ydCB2YXIgc2F0dXJkYXlzID0gc2F0dXJkYXkucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcblxudmFyIHllYXIgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0TW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0RnVsbFllYXIoKSAtIHN0YXJ0LmdldEZ1bGxZZWFyKCk7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7XG59KTtcblxuLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxueWVhci5ldmVyeSA9IGZ1bmN0aW9uKGspIHtcbiAgcmV0dXJuICFpc0Zpbml0ZShrID0gTWF0aC5mbG9vcihrKSkgfHwgIShrID4gMCkgPyBudWxsIDogaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihkYXRlLmdldEZ1bGxZZWFyKCkgLyBrKSAqIGspO1xuICAgIGRhdGUuc2V0TW9udGgoMCwgMSk7XG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgc3RlcCAqIGspO1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHllYXI7XG5leHBvcnQgdmFyIHllYXJzID0geWVhci5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbFwiO1xuXG52YXIgbW9udGggPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0RGF0ZSgxKTtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRNb250aChkYXRlLmdldE1vbnRoKCkgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGVuZC5nZXRNb250aCgpIC0gc3RhcnQuZ2V0TW9udGgoKSArIChlbmQuZ2V0RnVsbFllYXIoKSAtIHN0YXJ0LmdldEZ1bGxZZWFyKCkpICogMTI7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldE1vbnRoKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgbW9udGg7XG5leHBvcnQgdmFyIG1vbnRocyA9IG1vbnRoLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uTWludXRlfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgdXRjTWludXRlID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ1NlY29uZHMoMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbk1pbnV0ZSk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25NaW51dGU7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ01pbnV0ZXMoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB1dGNNaW51dGU7XG5leHBvcnQgdmFyIHV0Y01pbnV0ZXMgPSB1dGNNaW51dGUucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25Ib3VyfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgdXRjSG91ciA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRVVENNaW51dGVzKDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25Ib3VyKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkhvdXI7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0hvdXJzKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgdXRjSG91cjtcbmV4cG9ydCB2YXIgdXRjSG91cnMgPSB1dGNIb3VyLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uRGF5fSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgdXRjRGF5ID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkRheTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDRGF0ZSgpIC0gMTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB1dGNEYXk7XG5leHBvcnQgdmFyIHV0Y0RheXMgPSB1dGNEYXkucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25XZWVrfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG5mdW5jdGlvbiB1dGNXZWVrZGF5KGkpIHtcbiAgcmV0dXJuIGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSAoZGF0ZS5nZXRVVENEYXkoKSArIDcgLSBpKSAlIDcpO1xuICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBzdGVwICogNyk7XG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uV2VlaztcbiAgfSk7XG59XG5cbmV4cG9ydCB2YXIgdXRjU3VuZGF5ID0gdXRjV2Vla2RheSgwKTtcbmV4cG9ydCB2YXIgdXRjTW9uZGF5ID0gdXRjV2Vla2RheSgxKTtcbmV4cG9ydCB2YXIgdXRjVHVlc2RheSA9IHV0Y1dlZWtkYXkoMik7XG5leHBvcnQgdmFyIHV0Y1dlZG5lc2RheSA9IHV0Y1dlZWtkYXkoMyk7XG5leHBvcnQgdmFyIHV0Y1RodXJzZGF5ID0gdXRjV2Vla2RheSg0KTtcbmV4cG9ydCB2YXIgdXRjRnJpZGF5ID0gdXRjV2Vla2RheSg1KTtcbmV4cG9ydCB2YXIgdXRjU2F0dXJkYXkgPSB1dGNXZWVrZGF5KDYpO1xuXG5leHBvcnQgdmFyIHV0Y1N1bmRheXMgPSB1dGNTdW5kYXkucmFuZ2U7XG5leHBvcnQgdmFyIHV0Y01vbmRheXMgPSB1dGNNb25kYXkucmFuZ2U7XG5leHBvcnQgdmFyIHV0Y1R1ZXNkYXlzID0gdXRjVHVlc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjV2VkbmVzZGF5cyA9IHV0Y1dlZG5lc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjVGh1cnNkYXlzID0gdXRjVGh1cnNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHV0Y0ZyaWRheXMgPSB1dGNGcmlkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHV0Y1NhdHVyZGF5cyA9IHV0Y1NhdHVyZGF5LnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5cbnZhciB1dGNZZWFyID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZW5kLmdldFVUQ0Z1bGxZZWFyKCkgLSBzdGFydC5nZXRVVENGdWxsWWVhcigpO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbnV0Y1llYXIuZXZlcnkgPSBmdW5jdGlvbihrKSB7XG4gIHJldHVybiAhaXNGaW5pdGUoayA9IE1hdGguZmxvb3IoaykpIHx8ICEoayA+IDApID8gbnVsbCA6IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZGF0ZS5nZXRVVENGdWxsWWVhcigpIC8gaykgKiBrKTtcbiAgICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSArIHN0ZXAgKiBrKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1dGNZZWFyO1xuZXhwb3J0IHZhciB1dGNZZWFycyA9IHV0Y1llYXIucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcblxudmFyIHV0Y01vbnRoID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ0RhdGUoMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VVRDTW9udGgoZGF0ZS5nZXRVVENNb250aCgpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0VVRDTW9udGgoKSAtIHN0YXJ0LmdldFVUQ01vbnRoKCkgKyAoZW5kLmdldFVUQ0Z1bGxZZWFyKCkgLSBzdGFydC5nZXRVVENGdWxsWWVhcigpKSAqIDEyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNb250aCgpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0Y01vbnRoO1xuZXhwb3J0IHZhciB1dGNNb250aHMgPSB1dGNNb250aC5yYW5nZTtcbiIsImltcG9ydCB7XG4gIHRpbWVEYXksXG4gIHRpbWVTdW5kYXksXG4gIHRpbWVNb25kYXksXG4gIHRpbWVUaHVyc2RheSxcbiAgdGltZVllYXIsXG4gIHV0Y0RheSxcbiAgdXRjU3VuZGF5LFxuICB1dGNNb25kYXksXG4gIHV0Y1RodXJzZGF5LFxuICB1dGNZZWFyXG59IGZyb20gXCJkMy10aW1lXCI7XG5cbmZ1bmN0aW9uIGxvY2FsRGF0ZShkKSB7XG4gIGlmICgwIDw9IGQueSAmJiBkLnkgPCAxMDApIHtcbiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKC0xLCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKTtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKGQueSk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKGQueSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCk7XG59XG5cbmZ1bmN0aW9uIHV0Y0RhdGUoZCkge1xuICBpZiAoMCA8PSBkLnkgJiYgZC55IDwgMTAwKSB7XG4gICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQygtMSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCkpO1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoZC55KTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoZC55LCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKSk7XG59XG5cbmZ1bmN0aW9uIG5ld1llYXIoeSkge1xuICByZXR1cm4ge3k6IHksIG06IDAsIGQ6IDEsIEg6IDAsIE06IDAsIFM6IDAsIEw6IDB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXRMb2NhbGUobG9jYWxlKSB7XG4gIHZhciBsb2NhbGVfZGF0ZVRpbWUgPSBsb2NhbGUuZGF0ZVRpbWUsXG4gICAgICBsb2NhbGVfZGF0ZSA9IGxvY2FsZS5kYXRlLFxuICAgICAgbG9jYWxlX3RpbWUgPSBsb2NhbGUudGltZSxcbiAgICAgIGxvY2FsZV9wZXJpb2RzID0gbG9jYWxlLnBlcmlvZHMsXG4gICAgICBsb2NhbGVfd2Vla2RheXMgPSBsb2NhbGUuZGF5cyxcbiAgICAgIGxvY2FsZV9zaG9ydFdlZWtkYXlzID0gbG9jYWxlLnNob3J0RGF5cyxcbiAgICAgIGxvY2FsZV9tb250aHMgPSBsb2NhbGUubW9udGhzLFxuICAgICAgbG9jYWxlX3Nob3J0TW9udGhzID0gbG9jYWxlLnNob3J0TW9udGhzO1xuXG4gIHZhciBwZXJpb2RSZSA9IGZvcm1hdFJlKGxvY2FsZV9wZXJpb2RzKSxcbiAgICAgIHBlcmlvZExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfcGVyaW9kcyksXG4gICAgICB3ZWVrZGF5UmUgPSBmb3JtYXRSZShsb2NhbGVfd2Vla2RheXMpLFxuICAgICAgd2Vla2RheUxvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfd2Vla2RheXMpLFxuICAgICAgc2hvcnRXZWVrZGF5UmUgPSBmb3JtYXRSZShsb2NhbGVfc2hvcnRXZWVrZGF5cyksXG4gICAgICBzaG9ydFdlZWtkYXlMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3Nob3J0V2Vla2RheXMpLFxuICAgICAgbW9udGhSZSA9IGZvcm1hdFJlKGxvY2FsZV9tb250aHMpLFxuICAgICAgbW9udGhMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX21vbnRocyksXG4gICAgICBzaG9ydE1vbnRoUmUgPSBmb3JtYXRSZShsb2NhbGVfc2hvcnRNb250aHMpLFxuICAgICAgc2hvcnRNb250aExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfc2hvcnRNb250aHMpO1xuXG4gIHZhciBmb3JtYXRzID0ge1xuICAgIFwiYVwiOiBmb3JtYXRTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IGZvcm1hdFdlZWtkYXksXG4gICAgXCJiXCI6IGZvcm1hdFNob3J0TW9udGgsXG4gICAgXCJCXCI6IGZvcm1hdE1vbnRoLFxuICAgIFwiY1wiOiBudWxsLFxuICAgIFwiZFwiOiBmb3JtYXREYXlPZk1vbnRoLFxuICAgIFwiZVwiOiBmb3JtYXREYXlPZk1vbnRoLFxuICAgIFwiZlwiOiBmb3JtYXRNaWNyb3NlY29uZHMsXG4gICAgXCJIXCI6IGZvcm1hdEhvdXIyNCxcbiAgICBcIklcIjogZm9ybWF0SG91cjEyLFxuICAgIFwialwiOiBmb3JtYXREYXlPZlllYXIsXG4gICAgXCJMXCI6IGZvcm1hdE1pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogZm9ybWF0TW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IGZvcm1hdE1pbnV0ZXMsXG4gICAgXCJwXCI6IGZvcm1hdFBlcmlvZCxcbiAgICBcIlFcIjogZm9ybWF0VW5peFRpbWVzdGFtcCxcbiAgICBcInNcIjogZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMsXG4gICAgXCJTXCI6IGZvcm1hdFNlY29uZHMsXG4gICAgXCJ1XCI6IGZvcm1hdFdlZWtkYXlOdW1iZXJNb25kYXksXG4gICAgXCJVXCI6IGZvcm1hdFdlZWtOdW1iZXJTdW5kYXksXG4gICAgXCJWXCI6IGZvcm1hdFdlZWtOdW1iZXJJU08sXG4gICAgXCJ3XCI6IGZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXksXG4gICAgXCJXXCI6IGZvcm1hdFdlZWtOdW1iZXJNb25kYXksXG4gICAgXCJ4XCI6IG51bGwsXG4gICAgXCJYXCI6IG51bGwsXG4gICAgXCJ5XCI6IGZvcm1hdFllYXIsXG4gICAgXCJZXCI6IGZvcm1hdEZ1bGxZZWFyLFxuICAgIFwiWlwiOiBmb3JtYXRab25lLFxuICAgIFwiJVwiOiBmb3JtYXRMaXRlcmFsUGVyY2VudFxuICB9O1xuXG4gIHZhciB1dGNGb3JtYXRzID0ge1xuICAgIFwiYVwiOiBmb3JtYXRVVENTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IGZvcm1hdFVUQ1dlZWtkYXksXG4gICAgXCJiXCI6IGZvcm1hdFVUQ1Nob3J0TW9udGgsXG4gICAgXCJCXCI6IGZvcm1hdFVUQ01vbnRoLFxuICAgIFwiY1wiOiBudWxsLFxuICAgIFwiZFwiOiBmb3JtYXRVVENEYXlPZk1vbnRoLFxuICAgIFwiZVwiOiBmb3JtYXRVVENEYXlPZk1vbnRoLFxuICAgIFwiZlwiOiBmb3JtYXRVVENNaWNyb3NlY29uZHMsXG4gICAgXCJIXCI6IGZvcm1hdFVUQ0hvdXIyNCxcbiAgICBcIklcIjogZm9ybWF0VVRDSG91cjEyLFxuICAgIFwialwiOiBmb3JtYXRVVENEYXlPZlllYXIsXG4gICAgXCJMXCI6IGZvcm1hdFVUQ01pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogZm9ybWF0VVRDTW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IGZvcm1hdFVUQ01pbnV0ZXMsXG4gICAgXCJwXCI6IGZvcm1hdFVUQ1BlcmlvZCxcbiAgICBcIlFcIjogZm9ybWF0VW5peFRpbWVzdGFtcCxcbiAgICBcInNcIjogZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMsXG4gICAgXCJTXCI6IGZvcm1hdFVUQ1NlY29uZHMsXG4gICAgXCJ1XCI6IGZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJNb25kYXksXG4gICAgXCJVXCI6IGZvcm1hdFVUQ1dlZWtOdW1iZXJTdW5kYXksXG4gICAgXCJWXCI6IGZvcm1hdFVUQ1dlZWtOdW1iZXJJU08sXG4gICAgXCJ3XCI6IGZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJTdW5kYXksXG4gICAgXCJXXCI6IGZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXksXG4gICAgXCJ4XCI6IG51bGwsXG4gICAgXCJYXCI6IG51bGwsXG4gICAgXCJ5XCI6IGZvcm1hdFVUQ1llYXIsXG4gICAgXCJZXCI6IGZvcm1hdFVUQ0Z1bGxZZWFyLFxuICAgIFwiWlwiOiBmb3JtYXRVVENab25lLFxuICAgIFwiJVwiOiBmb3JtYXRMaXRlcmFsUGVyY2VudFxuICB9O1xuXG4gIHZhciBwYXJzZXMgPSB7XG4gICAgXCJhXCI6IHBhcnNlU2hvcnRXZWVrZGF5LFxuICAgIFwiQVwiOiBwYXJzZVdlZWtkYXksXG4gICAgXCJiXCI6IHBhcnNlU2hvcnRNb250aCxcbiAgICBcIkJcIjogcGFyc2VNb250aCxcbiAgICBcImNcIjogcGFyc2VMb2NhbGVEYXRlVGltZSxcbiAgICBcImRcIjogcGFyc2VEYXlPZk1vbnRoLFxuICAgIFwiZVwiOiBwYXJzZURheU9mTW9udGgsXG4gICAgXCJmXCI6IHBhcnNlTWljcm9zZWNvbmRzLFxuICAgIFwiSFwiOiBwYXJzZUhvdXIyNCxcbiAgICBcIklcIjogcGFyc2VIb3VyMjQsXG4gICAgXCJqXCI6IHBhcnNlRGF5T2ZZZWFyLFxuICAgIFwiTFwiOiBwYXJzZU1pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogcGFyc2VNb250aE51bWJlcixcbiAgICBcIk1cIjogcGFyc2VNaW51dGVzLFxuICAgIFwicFwiOiBwYXJzZVBlcmlvZCxcbiAgICBcIlFcIjogcGFyc2VVbml4VGltZXN0YW1wLFxuICAgIFwic1wiOiBwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzLFxuICAgIFwiU1wiOiBwYXJzZVNlY29uZHMsXG4gICAgXCJ1XCI6IHBhcnNlV2Vla2RheU51bWJlck1vbmRheSxcbiAgICBcIlVcIjogcGFyc2VXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwiVlwiOiBwYXJzZVdlZWtOdW1iZXJJU08sXG4gICAgXCJ3XCI6IHBhcnNlV2Vla2RheU51bWJlclN1bmRheSxcbiAgICBcIldcIjogcGFyc2VXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBwYXJzZUxvY2FsZURhdGUsXG4gICAgXCJYXCI6IHBhcnNlTG9jYWxlVGltZSxcbiAgICBcInlcIjogcGFyc2VZZWFyLFxuICAgIFwiWVwiOiBwYXJzZUZ1bGxZZWFyLFxuICAgIFwiWlwiOiBwYXJzZVpvbmUsXG4gICAgXCIlXCI6IHBhcnNlTGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICAvLyBUaGVzZSByZWN1cnNpdmUgZGlyZWN0aXZlIGRlZmluaXRpb25zIG11c3QgYmUgZGVmZXJyZWQuXG4gIGZvcm1hdHMueCA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZSwgZm9ybWF0cyk7XG4gIGZvcm1hdHMuWCA9IG5ld0Zvcm1hdChsb2NhbGVfdGltZSwgZm9ybWF0cyk7XG4gIGZvcm1hdHMuYyA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZVRpbWUsIGZvcm1hdHMpO1xuICB1dGNGb3JtYXRzLnggPSBuZXdGb3JtYXQobG9jYWxlX2RhdGUsIHV0Y0Zvcm1hdHMpO1xuICB1dGNGb3JtYXRzLlggPSBuZXdGb3JtYXQobG9jYWxlX3RpbWUsIHV0Y0Zvcm1hdHMpO1xuICB1dGNGb3JtYXRzLmMgPSBuZXdGb3JtYXQobG9jYWxlX2RhdGVUaW1lLCB1dGNGb3JtYXRzKTtcblxuICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyLCBmb3JtYXRzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBbXSxcbiAgICAgICAgICBpID0gLTEsXG4gICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgbiA9IHNwZWNpZmllci5sZW5ndGgsXG4gICAgICAgICAgYyxcbiAgICAgICAgICBwYWQsXG4gICAgICAgICAgZm9ybWF0O1xuXG4gICAgICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSk7XG5cbiAgICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICAgIGlmIChzcGVjaWZpZXIuY2hhckNvZGVBdChpKSA9PT0gMzcpIHtcbiAgICAgICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgICAgIGlmICgocGFkID0gcGFkc1tjID0gc3BlY2lmaWVyLmNoYXJBdCgrK2kpXSkgIT0gbnVsbCkgYyA9IHNwZWNpZmllci5jaGFyQXQoKytpKTtcbiAgICAgICAgICBlbHNlIHBhZCA9IGMgPT09IFwiZVwiID8gXCIgXCIgOiBcIjBcIjtcbiAgICAgICAgICBpZiAoZm9ybWF0ID0gZm9ybWF0c1tjXSkgYyA9IGZvcm1hdChkYXRlLCBwYWQpO1xuICAgICAgICAgIHN0cmluZy5wdXNoKGMpO1xuICAgICAgICAgIGogPSBpICsgMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgcmV0dXJuIHN0cmluZy5qb2luKFwiXCIpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBuZXdQYXJzZShzcGVjaWZpZXIsIG5ld0RhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICB2YXIgZCA9IG5ld1llYXIoMTkwMCksXG4gICAgICAgICAgaSA9IHBhcnNlU3BlY2lmaWVyKGQsIHNwZWNpZmllciwgc3RyaW5nICs9IFwiXCIsIDApLFxuICAgICAgICAgIHdlZWssIGRheTtcbiAgICAgIGlmIChpICE9IHN0cmluZy5sZW5ndGgpIHJldHVybiBudWxsO1xuXG4gICAgICAvLyBJZiBhIFVOSVggdGltZXN0YW1wIGlzIHNwZWNpZmllZCwgcmV0dXJuIGl0LlxuICAgICAgaWYgKFwiUVwiIGluIGQpIHJldHVybiBuZXcgRGF0ZShkLlEpO1xuXG4gICAgICAvLyBUaGUgYW0tcG0gZmxhZyBpcyAwIGZvciBBTSwgYW5kIDEgZm9yIFBNLlxuICAgICAgaWYgKFwicFwiIGluIGQpIGQuSCA9IGQuSCAlIDEyICsgZC5wICogMTI7XG5cbiAgICAgIC8vIENvbnZlcnQgZGF5LW9mLXdlZWsgYW5kIHdlZWstb2YteWVhciB0byBkYXktb2YteWVhci5cbiAgICAgIGlmIChcIlZcIiBpbiBkKSB7XG4gICAgICAgIGlmIChkLlYgPCAxIHx8IGQuViA+IDUzKSByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKCEoXCJ3XCIgaW4gZCkpIGQudyA9IDE7XG4gICAgICAgIGlmIChcIlpcIiBpbiBkKSB7XG4gICAgICAgICAgd2VlayA9IHV0Y0RhdGUobmV3WWVhcihkLnkpKSwgZGF5ID0gd2Vlay5nZXRVVENEYXkoKTtcbiAgICAgICAgICB3ZWVrID0gZGF5ID4gNCB8fCBkYXkgPT09IDAgPyB1dGNNb25kYXkuY2VpbCh3ZWVrKSA6IHV0Y01vbmRheSh3ZWVrKTtcbiAgICAgICAgICB3ZWVrID0gdXRjRGF5Lm9mZnNldCh3ZWVrLCAoZC5WIC0gMSkgKiA3KTtcbiAgICAgICAgICBkLnkgPSB3ZWVrLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgICAgICAgZC5tID0gd2Vlay5nZXRVVENNb250aCgpO1xuICAgICAgICAgIGQuZCA9IHdlZWsuZ2V0VVRDRGF0ZSgpICsgKGQudyArIDYpICUgNztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3ZWVrID0gbmV3RGF0ZShuZXdZZWFyKGQueSkpLCBkYXkgPSB3ZWVrLmdldERheSgpO1xuICAgICAgICAgIHdlZWsgPSBkYXkgPiA0IHx8IGRheSA9PT0gMCA/IHRpbWVNb25kYXkuY2VpbCh3ZWVrKSA6IHRpbWVNb25kYXkod2Vlayk7XG4gICAgICAgICAgd2VlayA9IHRpbWVEYXkub2Zmc2V0KHdlZWssIChkLlYgLSAxKSAqIDcpO1xuICAgICAgICAgIGQueSA9IHdlZWsuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICBkLm0gPSB3ZWVrLmdldE1vbnRoKCk7XG4gICAgICAgICAgZC5kID0gd2Vlay5nZXREYXRlKCkgKyAoZC53ICsgNikgJSA3O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFwiV1wiIGluIGQgfHwgXCJVXCIgaW4gZCkge1xuICAgICAgICBpZiAoIShcIndcIiBpbiBkKSkgZC53ID0gXCJ1XCIgaW4gZCA/IGQudSAlIDcgOiBcIldcIiBpbiBkID8gMSA6IDA7XG4gICAgICAgIGRheSA9IFwiWlwiIGluIGQgPyB1dGNEYXRlKG5ld1llYXIoZC55KSkuZ2V0VVRDRGF5KCkgOiBuZXdEYXRlKG5ld1llYXIoZC55KSkuZ2V0RGF5KCk7XG4gICAgICAgIGQubSA9IDA7XG4gICAgICAgIGQuZCA9IFwiV1wiIGluIGQgPyAoZC53ICsgNikgJSA3ICsgZC5XICogNyAtIChkYXkgKyA1KSAlIDcgOiBkLncgKyBkLlUgKiA3IC0gKGRheSArIDYpICUgNztcbiAgICAgIH1cblxuICAgICAgLy8gSWYgYSB0aW1lIHpvbmUgaXMgc3BlY2lmaWVkLCBhbGwgZmllbGRzIGFyZSBpbnRlcnByZXRlZCBhcyBVVEMgYW5kIHRoZW5cbiAgICAgIC8vIG9mZnNldCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCB0aW1lIHpvbmUuXG4gICAgICBpZiAoXCJaXCIgaW4gZCkge1xuICAgICAgICBkLkggKz0gZC5aIC8gMTAwIHwgMDtcbiAgICAgICAgZC5NICs9IGQuWiAlIDEwMDtcbiAgICAgICAgcmV0dXJuIHV0Y0RhdGUoZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIE90aGVyd2lzZSwgYWxsIGZpZWxkcyBhcmUgaW4gbG9jYWwgdGltZS5cbiAgICAgIHJldHVybiBuZXdEYXRlKGQpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVNwZWNpZmllcihkLCBzcGVjaWZpZXIsIHN0cmluZywgaikge1xuICAgIHZhciBpID0gMCxcbiAgICAgICAgbiA9IHNwZWNpZmllci5sZW5ndGgsXG4gICAgICAgIG0gPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICBjLFxuICAgICAgICBwYXJzZTtcblxuICAgIHdoaWxlIChpIDwgbikge1xuICAgICAgaWYgKGogPj0gbSkgcmV0dXJuIC0xO1xuICAgICAgYyA9IHNwZWNpZmllci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICBpZiAoYyA9PT0gMzcpIHtcbiAgICAgICAgYyA9IHNwZWNpZmllci5jaGFyQXQoaSsrKTtcbiAgICAgICAgcGFyc2UgPSBwYXJzZXNbYyBpbiBwYWRzID8gc3BlY2lmaWVyLmNoYXJBdChpKyspIDogY107XG4gICAgICAgIGlmICghcGFyc2UgfHwgKChqID0gcGFyc2UoZCwgc3RyaW5nLCBqKSkgPCAwKSkgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIGlmIChjICE9IHN0cmluZy5jaGFyQ29kZUF0KGorKykpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBqO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VQZXJpb2QoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBwZXJpb2RSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5wID0gcGVyaW9kTG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU2hvcnRXZWVrZGF5KGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gc2hvcnRXZWVrZGF5UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQudyA9IHNob3J0V2Vla2RheUxvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSB3ZWVrZGF5UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQudyA9IHdlZWtkYXlMb29rdXBbblswXS50b0xvd2VyQ2FzZSgpXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTaG9ydE1vbnRoKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gc2hvcnRNb250aFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLm0gPSBzaG9ydE1vbnRoTG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBtb250aFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLm0gPSBtb250aExvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGVUaW1lKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfZGF0ZVRpbWUsIHN0cmluZywgaSk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGUoZCwgc3RyaW5nLCBpKSB7XG4gICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV9kYXRlLCBzdHJpbmcsIGkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VMb2NhbGVUaW1lKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfdGltZSwgc3RyaW5nLCBpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFNob3J0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydFdlZWtkYXlzW2QuZ2V0RGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV93ZWVrZGF5c1tkLmdldERheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFNob3J0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRNb250aHNbZC5nZXRNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdE1vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldE1vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UGVyaW9kKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3BlcmlvZHNbKyhkLmdldEhvdXJzKCkgPj0gMTIpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1Nob3J0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydFdlZWtkYXlzW2QuZ2V0VVRDRGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV93ZWVrZGF5c1tkLmdldFVUQ0RheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1Nob3J0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRNb250aHNbZC5nZXRVVENNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ01vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldFVUQ01vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDUGVyaW9kKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3BlcmlvZHNbKyhkLmdldFVUQ0hvdXJzKCkgPj0gMTIpXTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZm9ybWF0OiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBmID0gbmV3Rm9ybWF0KHNwZWNpZmllciArPSBcIlwiLCBmb3JtYXRzKTtcbiAgICAgIGYudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBmO1xuICAgIH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIHAgPSBuZXdQYXJzZShzcGVjaWZpZXIgKz0gXCJcIiwgbG9jYWxEYXRlKTtcbiAgICAgIHAudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBwO1xuICAgIH0sXG4gICAgdXRjRm9ybWF0OiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBmID0gbmV3Rm9ybWF0KHNwZWNpZmllciArPSBcIlwiLCB1dGNGb3JtYXRzKTtcbiAgICAgIGYudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBmO1xuICAgIH0sXG4gICAgdXRjUGFyc2U6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIHAgPSBuZXdQYXJzZShzcGVjaWZpZXIsIHV0Y0RhdGUpO1xuICAgICAgcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICB9O1xufVxuXG52YXIgcGFkcyA9IHtcIi1cIjogXCJcIiwgXCJfXCI6IFwiIFwiLCBcIjBcIjogXCIwXCJ9LFxuICAgIG51bWJlclJlID0gL15cXHMqXFxkKy8sIC8vIG5vdGU6IGlnbm9yZXMgbmV4dCBkaXJlY3RpdmVcbiAgICBwZXJjZW50UmUgPSAvXiUvLFxuICAgIHJlcXVvdGVSZSA9IC9bXFxcXF4kKis/fFtcXF0oKS57fV0vZztcblxuZnVuY3Rpb24gcGFkKHZhbHVlLCBmaWxsLCB3aWR0aCkge1xuICB2YXIgc2lnbiA9IHZhbHVlIDwgMCA/IFwiLVwiIDogXCJcIixcbiAgICAgIHN0cmluZyA9IChzaWduID8gLXZhbHVlIDogdmFsdWUpICsgXCJcIixcbiAgICAgIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIHJldHVybiBzaWduICsgKGxlbmd0aCA8IHdpZHRoID8gbmV3IEFycmF5KHdpZHRoIC0gbGVuZ3RoICsgMSkuam9pbihmaWxsKSArIHN0cmluZyA6IHN0cmluZyk7XG59XG5cbmZ1bmN0aW9uIHJlcXVvdGUocykge1xuICByZXR1cm4gcy5yZXBsYWNlKHJlcXVvdGVSZSwgXCJcXFxcJCZcIik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFJlKG5hbWVzKSB7XG4gIHJldHVybiBuZXcgUmVnRXhwKFwiXig/OlwiICsgbmFtZXMubWFwKHJlcXVvdGUpLmpvaW4oXCJ8XCIpICsgXCIpXCIsIFwiaVwiKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TG9va3VwKG5hbWVzKSB7XG4gIHZhciBtYXAgPSB7fSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbikgbWFwW25hbWVzW2ldLnRvTG93ZXJDYXNlKCldID0gaTtcbiAgcmV0dXJuIG1hcDtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrZGF5TnVtYmVyU3VuZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gKGQudyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla2RheU51bWJlck1vbmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IChkLnUgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtOdW1iZXJTdW5kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5VID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrTnVtYmVySVNPKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuViA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla051bWJlck1vbmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlcgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUZ1bGxZZWFyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA0KSk7XG4gIHJldHVybiBuID8gKGQueSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLnkgPSArblswXSArICgrblswXSA+IDY4ID8gMTkwMCA6IDIwMDApLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWm9uZShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSAvXihaKXwoWystXVxcZFxcZCkoPzo6PyhcXGRcXGQpKT8vLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA2KSk7XG4gIHJldHVybiBuID8gKGQuWiA9IG5bMV0gPyAwIDogLShuWzJdICsgKG5bM10gfHwgXCIwMFwiKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNb250aE51bWJlcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLm0gPSBuWzBdIC0gMSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZURheU9mTW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5kID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VEYXlPZlllYXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDMpKTtcbiAgcmV0dXJuIG4gPyAoZC5tID0gMCwgZC5kID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VIb3VyMjQoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5IID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNaW51dGVzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuTSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlMgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pbGxpc2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMykpO1xuICByZXR1cm4gbiA/IChkLkwgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pY3Jvc2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgNikpO1xuICByZXR1cm4gbiA/IChkLkwgPSBNYXRoLmZsb29yKG5bMF0gLyAxMDAwKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUxpdGVyYWxQZXJjZW50KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IHBlcmNlbnRSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IGkgKyBuWzBdLmxlbmd0aCA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVVuaXhUaW1lc3RhbXAoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICByZXR1cm4gbiA/IChkLlEgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgcmV0dXJuIG4gPyAoZC5RID0gKCtuWzBdKSAqIDEwMDAsIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGF5T2ZNb250aChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXREYXRlKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRIb3VyMjQoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0SG91cnMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhvdXIxMihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRIb3VycygpICUgMTIgfHwgMTIsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXlPZlllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKDEgKyB0aW1lRGF5LmNvdW50KHRpbWVZZWFyKGQpLCBkKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pbGxpc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNaWxsaXNlY29uZHMoKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pY3Jvc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBmb3JtYXRNaWxsaXNlY29uZHMoZCwgcCkgKyBcIjAwMFwiO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNb250aE51bWJlcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNb250aCgpICsgMSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pbnV0ZXMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0TWludXRlcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0U2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRTZWNvbmRzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrZGF5TnVtYmVyTW9uZGF5KGQpIHtcbiAgdmFyIGRheSA9IGQuZ2V0RGF5KCk7XG4gIHJldHVybiBkYXkgPT09IDAgPyA3IDogZGF5O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrTnVtYmVyU3VuZGF5KGQsIHApIHtcbiAgcmV0dXJuIHBhZCh0aW1lU3VuZGF5LmNvdW50KHRpbWVZZWFyKGQpLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJJU08oZCwgcCkge1xuICB2YXIgZGF5ID0gZC5nZXREYXkoKTtcbiAgZCA9IChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdGltZVRodXJzZGF5KGQpIDogdGltZVRodXJzZGF5LmNlaWwoZCk7XG4gIHJldHVybiBwYWQodGltZVRodXJzZGF5LmNvdW50KHRpbWVZZWFyKGQpLCBkKSArICh0aW1lWWVhcihkKS5nZXREYXkoKSA9PT0gNCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrZGF5TnVtYmVyU3VuZGF5KGQpIHtcbiAgcmV0dXJuIGQuZ2V0RGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHRpbWVNb25kYXkuY291bnQodGltZVllYXIoZCksIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0WWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RnVsbFllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0Wm9uZShkKSB7XG4gIHZhciB6ID0gZC5nZXRUaW1lem9uZU9mZnNldCgpO1xuICByZXR1cm4gKHogPiAwID8gXCItXCIgOiAoeiAqPSAtMSwgXCIrXCIpKVxuICAgICAgKyBwYWQoeiAvIDYwIHwgMCwgXCIwXCIsIDIpXG4gICAgICArIHBhZCh6ICUgNjAsIFwiMFwiLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRGF5T2ZNb250aChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENEYXRlKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENIb3VyMjQoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDSG91cnMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0hvdXIxMihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENIb3VycygpICUgMTIgfHwgMTIsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENEYXlPZlllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKDEgKyB1dGNEYXkuY291bnQodXRjWWVhcihkKSwgZCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaWxsaXNlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaWNyb3NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gZm9ybWF0VVRDTWlsbGlzZWNvbmRzKGQsIHApICsgXCIwMDBcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTW9udGhOdW1iZXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTW9udGgoKSArIDEsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaW51dGVzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ01pbnV0ZXMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDU2Vjb25kcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheShkKSB7XG4gIHZhciBkb3cgPSBkLmdldFVUQ0RheSgpO1xuICByZXR1cm4gZG93ID09PSAwID8gNyA6IGRvdztcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlclN1bmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodXRjU3VuZGF5LmNvdW50KHV0Y1llYXIoZCksIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlcklTTyhkLCBwKSB7XG4gIHZhciBkYXkgPSBkLmdldFVUQ0RheSgpO1xuICBkID0gKGRheSA+PSA0IHx8IGRheSA9PT0gMCkgPyB1dGNUaHVyc2RheShkKSA6IHV0Y1RodXJzZGF5LmNlaWwoZCk7XG4gIHJldHVybiBwYWQodXRjVGh1cnNkYXkuY291bnQodXRjWWVhcihkKSwgZCkgKyAodXRjWWVhcihkKS5nZXRVVENEYXkoKSA9PT0gNCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyU3VuZGF5KGQpIHtcbiAgcmV0dXJuIGQuZ2V0VVRDRGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHV0Y01vbmRheS5jb3VudCh1dGNZZWFyKGQpLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1llYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMCwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0Z1bGxZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDAwMCwgcCwgNCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1pvbmUoKSB7XG4gIHJldHVybiBcIiswMDAwXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExpdGVyYWxQZXJjZW50KCkge1xuICByZXR1cm4gXCIlXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVuaXhUaW1lc3RhbXAoZCkge1xuICByZXR1cm4gK2Q7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzKGQpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoK2QgLyAxMDAwKTtcbn1cbiIsImltcG9ydCBmb3JtYXRMb2NhbGUgZnJvbSBcIi4vbG9jYWxlXCI7XG5cbnZhciBsb2NhbGU7XG5leHBvcnQgdmFyIHRpbWVGb3JtYXQ7XG5leHBvcnQgdmFyIHRpbWVQYXJzZTtcbmV4cG9ydCB2YXIgdXRjRm9ybWF0O1xuZXhwb3J0IHZhciB1dGNQYXJzZTtcblxuZGVmYXVsdExvY2FsZSh7XG4gIGRhdGVUaW1lOiBcIiV4LCAlWFwiLFxuICBkYXRlOiBcIiUtbS8lLWQvJVlcIixcbiAgdGltZTogXCIlLUk6JU06JVMgJXBcIixcbiAgcGVyaW9kczogW1wiQU1cIiwgXCJQTVwiXSxcbiAgZGF5czogW1wiU3VuZGF5XCIsIFwiTW9uZGF5XCIsIFwiVHVlc2RheVwiLCBcIldlZG5lc2RheVwiLCBcIlRodXJzZGF5XCIsIFwiRnJpZGF5XCIsIFwiU2F0dXJkYXlcIl0sXG4gIHNob3J0RGF5czogW1wiU3VuXCIsIFwiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCJdLFxuICBtb250aHM6IFtcIkphbnVhcnlcIiwgXCJGZWJydWFyeVwiLCBcIk1hcmNoXCIsIFwiQXByaWxcIiwgXCJNYXlcIiwgXCJKdW5lXCIsIFwiSnVseVwiLCBcIkF1Z3VzdFwiLCBcIlNlcHRlbWJlclwiLCBcIk9jdG9iZXJcIiwgXCJOb3ZlbWJlclwiLCBcIkRlY2VtYmVyXCJdLFxuICBzaG9ydE1vbnRoczogW1wiSmFuXCIsIFwiRmViXCIsIFwiTWFyXCIsIFwiQXByXCIsIFwiTWF5XCIsIFwiSnVuXCIsIFwiSnVsXCIsIFwiQXVnXCIsIFwiU2VwXCIsIFwiT2N0XCIsIFwiTm92XCIsIFwiRGVjXCJdXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVmYXVsdExvY2FsZShkZWZpbml0aW9uKSB7XG4gIGxvY2FsZSA9IGZvcm1hdExvY2FsZShkZWZpbml0aW9uKTtcbiAgdGltZUZvcm1hdCA9IGxvY2FsZS5mb3JtYXQ7XG4gIHRpbWVQYXJzZSA9IGxvY2FsZS5wYXJzZTtcbiAgdXRjRm9ybWF0ID0gbG9jYWxlLnV0Y0Zvcm1hdDtcbiAgdXRjUGFyc2UgPSBsb2NhbGUudXRjUGFyc2U7XG4gIHJldHVybiBsb2NhbGU7XG59XG4iLCJpbXBvcnQge3V0Y0Zvcm1hdH0gZnJvbSBcIi4vZGVmYXVsdExvY2FsZVwiO1xuXG5leHBvcnQgdmFyIGlzb1NwZWNpZmllciA9IFwiJVktJW0tJWRUJUg6JU06JVMuJUxaXCI7XG5cbmZ1bmN0aW9uIGZvcm1hdElzb05hdGl2ZShkYXRlKSB7XG4gIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKCk7XG59XG5cbnZhciBmb3JtYXRJc28gPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZ1xuICAgID8gZm9ybWF0SXNvTmF0aXZlXG4gICAgOiB1dGNGb3JtYXQoaXNvU3BlY2lmaWVyKTtcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0SXNvO1xuIiwiaW1wb3J0IHtpc29TcGVjaWZpZXJ9IGZyb20gXCIuL2lzb0Zvcm1hdFwiO1xuaW1wb3J0IHt1dGNQYXJzZX0gZnJvbSBcIi4vZGVmYXVsdExvY2FsZVwiO1xuXG5mdW5jdGlvbiBwYXJzZUlzb05hdGl2ZShzdHJpbmcpIHtcbiAgdmFyIGRhdGUgPSBuZXcgRGF0ZShzdHJpbmcpO1xuICByZXR1cm4gaXNOYU4oZGF0ZSkgPyBudWxsIDogZGF0ZTtcbn1cblxudmFyIHBhcnNlSXNvID0gK25ldyBEYXRlKFwiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaXCIpXG4gICAgPyBwYXJzZUlzb05hdGl2ZVxuICAgIDogdXRjUGFyc2UoaXNvU3BlY2lmaWVyKTtcblxuZXhwb3J0IGRlZmF1bHQgcGFyc2VJc287XG4iLCJ2YXIgbm9vcCA9IHt2YWx1ZTogZnVuY3Rpb24oKSB7fX07XG5cbmZ1bmN0aW9uIGRpc3BhdGNoKCkge1xuICBmb3IgKHZhciBpID0gMCwgbiA9IGFyZ3VtZW50cy5sZW5ndGgsIF8gPSB7fSwgdDsgaSA8IG47ICsraSkge1xuICAgIGlmICghKHQgPSBhcmd1bWVudHNbaV0gKyBcIlwiKSB8fCAodCBpbiBfKSkgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCB0eXBlOiBcIiArIHQpO1xuICAgIF9bdF0gPSBbXTtcbiAgfVxuICByZXR1cm4gbmV3IERpc3BhdGNoKF8pO1xufVxuXG5mdW5jdGlvbiBEaXNwYXRjaChfKSB7XG4gIHRoaXMuXyA9IF87XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lcywgdHlwZXMpIHtcbiAgcmV0dXJuIHR5cGVuYW1lcy50cmltKCkuc3BsaXQoL158XFxzKy8pLm1hcChmdW5jdGlvbih0KSB7XG4gICAgdmFyIG5hbWUgPSBcIlwiLCBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSBuYW1lID0gdC5zbGljZShpICsgMSksIHQgPSB0LnNsaWNlKDAsIGkpO1xuICAgIGlmICh0ICYmICF0eXBlcy5oYXNPd25Qcm9wZXJ0eSh0KSkgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIiArIHQpO1xuICAgIHJldHVybiB7dHlwZTogdCwgbmFtZTogbmFtZX07XG4gIH0pO1xufVxuXG5EaXNwYXRjaC5wcm90b3R5cGUgPSBkaXNwYXRjaC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBEaXNwYXRjaCxcbiAgb246IGZ1bmN0aW9uKHR5cGVuYW1lLCBjYWxsYmFjaykge1xuICAgIHZhciBfID0gdGhpcy5fLFxuICAgICAgICBUID0gcGFyc2VUeXBlbmFtZXModHlwZW5hbWUgKyBcIlwiLCBfKSxcbiAgICAgICAgdCxcbiAgICAgICAgaSA9IC0xLFxuICAgICAgICBuID0gVC5sZW5ndGg7XG5cbiAgICAvLyBJZiBubyBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCByZXR1cm4gdGhlIGNhbGxiYWNrIG9mIHRoZSBnaXZlbiB0eXBlIGFuZCBuYW1lLlxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICgodCA9ICh0eXBlbmFtZSA9IFRbaV0pLnR5cGUpICYmICh0ID0gZ2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUpKSkgcmV0dXJuIHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgYSB0eXBlIHdhcyBzcGVjaWZpZWQsIHNldCB0aGUgY2FsbGJhY2sgZm9yIHRoZSBnaXZlbiB0eXBlIGFuZCBuYW1lLlxuICAgIC8vIE90aGVyd2lzZSwgaWYgYSBudWxsIGNhbGxiYWNrIHdhcyBzcGVjaWZpZWQsIHJlbW92ZSBjYWxsYmFja3Mgb2YgdGhlIGdpdmVuIG5hbWUuXG4gICAgaWYgKGNhbGxiYWNrICE9IG51bGwgJiYgdHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgY2FsbGJhY2s6IFwiICsgY2FsbGJhY2spO1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAodCA9ICh0eXBlbmFtZSA9IFRbaV0pLnR5cGUpIF9bdF0gPSBzZXQoX1t0XSwgdHlwZW5hbWUubmFtZSwgY2FsbGJhY2spO1xuICAgICAgZWxzZSBpZiAoY2FsbGJhY2sgPT0gbnVsbCkgZm9yICh0IGluIF8pIF9bdF0gPSBzZXQoX1t0XSwgdHlwZW5hbWUubmFtZSwgbnVsbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGNvcHk6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBjb3B5ID0ge30sIF8gPSB0aGlzLl87XG4gICAgZm9yICh2YXIgdCBpbiBfKSBjb3B5W3RdID0gX1t0XS5zbGljZSgpO1xuICAgIHJldHVybiBuZXcgRGlzcGF0Y2goY29weSk7XG4gIH0sXG4gIGNhbGw6IGZ1bmN0aW9uKHR5cGUsIHRoYXQpIHtcbiAgICBpZiAoKG4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMikgPiAwKSBmb3IgKHZhciBhcmdzID0gbmV3IEFycmF5KG4pLCBpID0gMCwgbiwgdDsgaSA8IG47ICsraSkgYXJnc1tpXSA9IGFyZ3VtZW50c1tpICsgMl07XG4gICAgaWYgKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodHlwZSkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0eXBlKTtcbiAgICBmb3IgKHQgPSB0aGlzLl9bdHlwZV0sIGkgPSAwLCBuID0gdC5sZW5ndGg7IGkgPCBuOyArK2kpIHRbaV0udmFsdWUuYXBwbHkodGhhdCwgYXJncyk7XG4gIH0sXG4gIGFwcGx5OiBmdW5jdGlvbih0eXBlLCB0aGF0LCBhcmdzKSB7XG4gICAgaWYgKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodHlwZSkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0eXBlKTtcbiAgICBmb3IgKHZhciB0ID0gdGhpcy5fW3R5cGVdLCBpID0gMCwgbiA9IHQubGVuZ3RoOyBpIDwgbjsgKytpKSB0W2ldLnZhbHVlLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBnZXQodHlwZSwgbmFtZSkge1xuICBmb3IgKHZhciBpID0gMCwgbiA9IHR5cGUubGVuZ3RoLCBjOyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKChjID0gdHlwZVtpXSkubmFtZSA9PT0gbmFtZSkge1xuICAgICAgcmV0dXJuIGMudmFsdWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNldCh0eXBlLCBuYW1lLCBjYWxsYmFjaykge1xuICBmb3IgKHZhciBpID0gMCwgbiA9IHR5cGUubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKHR5cGVbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgdHlwZVtpXSA9IG5vb3AsIHR5cGUgPSB0eXBlLnNsaWNlKDAsIGkpLmNvbmNhdCh0eXBlLnNsaWNlKGkgKyAxKSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGNhbGxiYWNrICE9IG51bGwpIHR5cGUucHVzaCh7bmFtZTogbmFtZSwgdmFsdWU6IGNhbGxiYWNrfSk7XG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBkaXNwYXRjaDtcbiIsInZhciBmcmFtZSA9IDAsIC8vIGlzIGFuIGFuaW1hdGlvbiBmcmFtZSBwZW5kaW5nP1xuICAgIHRpbWVvdXQgPSAwLCAvLyBpcyBhIHRpbWVvdXQgcGVuZGluZz9cbiAgICBpbnRlcnZhbCA9IDAsIC8vIGFyZSBhbnkgdGltZXJzIGFjdGl2ZT9cbiAgICBwb2tlRGVsYXkgPSAxMDAwLCAvLyBob3cgZnJlcXVlbnRseSB3ZSBjaGVjayBmb3IgY2xvY2sgc2tld1xuICAgIHRhc2tIZWFkLFxuICAgIHRhc2tUYWlsLFxuICAgIGNsb2NrTGFzdCA9IDAsXG4gICAgY2xvY2tOb3cgPSAwLFxuICAgIGNsb2NrU2tldyA9IDAsXG4gICAgY2xvY2sgPSB0eXBlb2YgcGVyZm9ybWFuY2UgPT09IFwib2JqZWN0XCIgJiYgcGVyZm9ybWFuY2Uubm93ID8gcGVyZm9ybWFuY2UgOiBEYXRlLFxuICAgIHNldEZyYW1lID0gdHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiAmJiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdykgOiBmdW5jdGlvbihmKSB7IHNldFRpbWVvdXQoZiwgMTcpOyB9O1xuXG5leHBvcnQgZnVuY3Rpb24gbm93KCkge1xuICByZXR1cm4gY2xvY2tOb3cgfHwgKHNldEZyYW1lKGNsZWFyTm93KSwgY2xvY2tOb3cgPSBjbG9jay5ub3coKSArIGNsb2NrU2tldyk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyTm93KCkge1xuICBjbG9ja05vdyA9IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUaW1lcigpIHtcbiAgdGhpcy5fY2FsbCA9XG4gIHRoaXMuX3RpbWUgPVxuICB0aGlzLl9uZXh0ID0gbnVsbDtcbn1cblxuVGltZXIucHJvdG90eXBlID0gdGltZXIucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogVGltZXIsXG4gIHJlc3RhcnQ6IGZ1bmN0aW9uKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuICAgIHRpbWUgPSAodGltZSA9PSBudWxsID8gbm93KCkgOiArdGltZSkgKyAoZGVsYXkgPT0gbnVsbCA/IDAgOiArZGVsYXkpO1xuICAgIGlmICghdGhpcy5fbmV4dCAmJiB0YXNrVGFpbCAhPT0gdGhpcykge1xuICAgICAgaWYgKHRhc2tUYWlsKSB0YXNrVGFpbC5fbmV4dCA9IHRoaXM7XG4gICAgICBlbHNlIHRhc2tIZWFkID0gdGhpcztcbiAgICAgIHRhc2tUYWlsID0gdGhpcztcbiAgICB9XG4gICAgdGhpcy5fY2FsbCA9IGNhbGxiYWNrO1xuICAgIHRoaXMuX3RpbWUgPSB0aW1lO1xuICAgIHNsZWVwKCk7XG4gIH0sXG4gIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9jYWxsKSB7XG4gICAgICB0aGlzLl9jYWxsID0gbnVsbDtcbiAgICAgIHRoaXMuX3RpbWUgPSBJbmZpbml0eTtcbiAgICAgIHNsZWVwKCk7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdGltZXIoY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gIHZhciB0ID0gbmV3IFRpbWVyO1xuICB0LnJlc3RhcnQoY2FsbGJhY2ssIGRlbGF5LCB0aW1lKTtcbiAgcmV0dXJuIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lckZsdXNoKCkge1xuICBub3coKTsgLy8gR2V0IHRoZSBjdXJyZW50IHRpbWUsIGlmIG5vdCBhbHJlYWR5IHNldC5cbiAgKytmcmFtZTsgLy8gUHJldGVuZCB3ZeKAmXZlIHNldCBhbiBhbGFybSwgaWYgd2UgaGF2ZW7igJl0IGFscmVhZHkuXG4gIHZhciB0ID0gdGFza0hlYWQsIGU7XG4gIHdoaWxlICh0KSB7XG4gICAgaWYgKChlID0gY2xvY2tOb3cgLSB0Ll90aW1lKSA+PSAwKSB0Ll9jYWxsLmNhbGwobnVsbCwgZSk7XG4gICAgdCA9IHQuX25leHQ7XG4gIH1cbiAgLS1mcmFtZTtcbn1cblxuZnVuY3Rpb24gd2FrZSgpIHtcbiAgY2xvY2tOb3cgPSAoY2xvY2tMYXN0ID0gY2xvY2subm93KCkpICsgY2xvY2tTa2V3O1xuICBmcmFtZSA9IHRpbWVvdXQgPSAwO1xuICB0cnkge1xuICAgIHRpbWVyRmx1c2goKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBmcmFtZSA9IDA7XG4gICAgbmFwKCk7XG4gICAgY2xvY2tOb3cgPSAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBva2UoKSB7XG4gIHZhciBub3cgPSBjbG9jay5ub3coKSwgZGVsYXkgPSBub3cgLSBjbG9ja0xhc3Q7XG4gIGlmIChkZWxheSA+IHBva2VEZWxheSkgY2xvY2tTa2V3IC09IGRlbGF5LCBjbG9ja0xhc3QgPSBub3c7XG59XG5cbmZ1bmN0aW9uIG5hcCgpIHtcbiAgdmFyIHQwLCB0MSA9IHRhc2tIZWFkLCB0MiwgdGltZSA9IEluZmluaXR5O1xuICB3aGlsZSAodDEpIHtcbiAgICBpZiAodDEuX2NhbGwpIHtcbiAgICAgIGlmICh0aW1lID4gdDEuX3RpbWUpIHRpbWUgPSB0MS5fdGltZTtcbiAgICAgIHQwID0gdDEsIHQxID0gdDEuX25leHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHQyID0gdDEuX25leHQsIHQxLl9uZXh0ID0gbnVsbDtcbiAgICAgIHQxID0gdDAgPyB0MC5fbmV4dCA9IHQyIDogdGFza0hlYWQgPSB0MjtcbiAgICB9XG4gIH1cbiAgdGFza1RhaWwgPSB0MDtcbiAgc2xlZXAodGltZSk7XG59XG5cbmZ1bmN0aW9uIHNsZWVwKHRpbWUpIHtcbiAgaWYgKGZyYW1lKSByZXR1cm47IC8vIFNvb25lc3QgYWxhcm0gYWxyZWFkeSBzZXQsIG9yIHdpbGwgYmUuXG4gIGlmICh0aW1lb3V0KSB0aW1lb3V0ID0gY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICB2YXIgZGVsYXkgPSB0aW1lIC0gY2xvY2tOb3c7IC8vIFN0cmljdGx5IGxlc3MgdGhhbiBpZiB3ZSByZWNvbXB1dGVkIGNsb2NrTm93LlxuICBpZiAoZGVsYXkgPiAyNCkge1xuICAgIGlmICh0aW1lIDwgSW5maW5pdHkpIHRpbWVvdXQgPSBzZXRUaW1lb3V0KHdha2UsIHRpbWUgLSBjbG9jay5ub3coKSAtIGNsb2NrU2tldyk7XG4gICAgaWYgKGludGVydmFsKSBpbnRlcnZhbCA9IGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICB9IGVsc2Uge1xuICAgIGlmICghaW50ZXJ2YWwpIGNsb2NrTGFzdCA9IGNsb2NrLm5vdygpLCBpbnRlcnZhbCA9IHNldEludGVydmFsKHBva2UsIHBva2VEZWxheSk7XG4gICAgZnJhbWUgPSAxLCBzZXRGcmFtZSh3YWtlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtUaW1lcn0gZnJvbSBcIi4vdGltZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gIHZhciB0ID0gbmV3IFRpbWVyO1xuICBkZWxheSA9IGRlbGF5ID09IG51bGwgPyAwIDogK2RlbGF5O1xuICB0LnJlc3RhcnQoZnVuY3Rpb24oZWxhcHNlZCkge1xuICAgIHQuc3RvcCgpO1xuICAgIGNhbGxiYWNrKGVsYXBzZWQgKyBkZWxheSk7XG4gIH0sIGRlbGF5LCB0aW1lKTtcbiAgcmV0dXJuIHQ7XG59XG4iLCJpbXBvcnQge2Rpc3BhdGNofSBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7dGltZXIsIHRpbWVvdXR9IGZyb20gXCJkMy10aW1lclwiO1xuXG52YXIgZW1wdHlPbiA9IGRpc3BhdGNoKFwic3RhcnRcIiwgXCJlbmRcIiwgXCJpbnRlcnJ1cHRcIik7XG52YXIgZW1wdHlUd2VlbiA9IFtdO1xuXG5leHBvcnQgdmFyIENSRUFURUQgPSAwO1xuZXhwb3J0IHZhciBTQ0hFRFVMRUQgPSAxO1xuZXhwb3J0IHZhciBTVEFSVElORyA9IDI7XG5leHBvcnQgdmFyIFNUQVJURUQgPSAzO1xuZXhwb3J0IHZhciBSVU5OSU5HID0gNDtcbmV4cG9ydCB2YXIgRU5ESU5HID0gNTtcbmV4cG9ydCB2YXIgRU5ERUQgPSA2O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlLCBuYW1lLCBpZCwgaW5kZXgsIGdyb3VwLCB0aW1pbmcpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uO1xuICBpZiAoIXNjaGVkdWxlcykgbm9kZS5fX3RyYW5zaXRpb24gPSB7fTtcbiAgZWxzZSBpZiAoaWQgaW4gc2NoZWR1bGVzKSByZXR1cm47XG4gIGNyZWF0ZShub2RlLCBpZCwge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgaW5kZXg6IGluZGV4LCAvLyBGb3IgY29udGV4dCBkdXJpbmcgY2FsbGJhY2suXG4gICAgZ3JvdXA6IGdyb3VwLCAvLyBGb3IgY29udGV4dCBkdXJpbmcgY2FsbGJhY2suXG4gICAgb246IGVtcHR5T24sXG4gICAgdHdlZW46IGVtcHR5VHdlZW4sXG4gICAgdGltZTogdGltaW5nLnRpbWUsXG4gICAgZGVsYXk6IHRpbWluZy5kZWxheSxcbiAgICBkdXJhdGlvbjogdGltaW5nLmR1cmF0aW9uLFxuICAgIGVhc2U6IHRpbWluZy5lYXNlLFxuICAgIHRpbWVyOiBudWxsLFxuICAgIHN0YXRlOiBDUkVBVEVEXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBnZXQobm9kZSwgaWQpO1xuICBpZiAoc2NoZWR1bGUuc3RhdGUgPiBDUkVBVEVEKSB0aHJvdyBuZXcgRXJyb3IoXCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWRcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBnZXQobm9kZSwgaWQpO1xuICBpZiAoc2NoZWR1bGUuc3RhdGUgPiBTVEFSVElORykgdGhyb3cgbmV3IEVycm9yKFwidG9vIGxhdGU7IGFscmVhZHkgc3RhcnRlZFwiKTtcbiAgcmV0dXJuIHNjaGVkdWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IG5vZGUuX190cmFuc2l0aW9uO1xuICBpZiAoIXNjaGVkdWxlIHx8ICEoc2NoZWR1bGUgPSBzY2hlZHVsZVtpZF0pKSB0aHJvdyBuZXcgRXJyb3IoXCJ0cmFuc2l0aW9uIG5vdCBmb3VuZFwiKTtcbiAgcmV0dXJuIHNjaGVkdWxlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGUobm9kZSwgaWQsIHNlbGYpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uLFxuICAgICAgdHdlZW47XG5cbiAgLy8gSW5pdGlhbGl6ZSB0aGUgc2VsZiB0aW1lciB3aGVuIHRoZSB0cmFuc2l0aW9uIGlzIGNyZWF0ZWQuXG4gIC8vIE5vdGUgdGhlIGFjdHVhbCBkZWxheSBpcyBub3Qga25vd24gdW50aWwgdGhlIGZpcnN0IGNhbGxiYWNrIVxuICBzY2hlZHVsZXNbaWRdID0gc2VsZjtcbiAgc2VsZi50aW1lciA9IHRpbWVyKHNjaGVkdWxlLCAwLCBzZWxmLnRpbWUpO1xuXG4gIGZ1bmN0aW9uIHNjaGVkdWxlKGVsYXBzZWQpIHtcbiAgICBzZWxmLnN0YXRlID0gU0NIRURVTEVEO1xuICAgIHNlbGYudGltZXIucmVzdGFydChzdGFydCwgc2VsZi5kZWxheSwgc2VsZi50aW1lKTtcblxuICAgIC8vIElmIHRoZSBlbGFwc2VkIGRlbGF5IGlzIGxlc3MgdGhhbiBvdXIgZmlyc3Qgc2xlZXAsIHN0YXJ0IGltbWVkaWF0ZWx5LlxuICAgIGlmIChzZWxmLmRlbGF5IDw9IGVsYXBzZWQpIHN0YXJ0KGVsYXBzZWQgLSBzZWxmLmRlbGF5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXJ0KGVsYXBzZWQpIHtcbiAgICB2YXIgaSwgaiwgbiwgbztcblxuICAgIC8vIElmIHRoZSBzdGF0ZSBpcyBub3QgU0NIRURVTEVELCB0aGVuIHdlIHByZXZpb3VzbHkgZXJyb3JlZCBvbiBzdGFydC5cbiAgICBpZiAoc2VsZi5zdGF0ZSAhPT0gU0NIRURVTEVEKSByZXR1cm4gc3RvcCgpO1xuXG4gICAgZm9yIChpIGluIHNjaGVkdWxlcykge1xuICAgICAgbyA9IHNjaGVkdWxlc1tpXTtcbiAgICAgIGlmIChvLm5hbWUgIT09IHNlbGYubmFtZSkgY29udGludWU7XG5cbiAgICAgIC8vIFdoaWxlIHRoaXMgZWxlbWVudCBhbHJlYWR5IGhhcyBhIHN0YXJ0aW5nIHRyYW5zaXRpb24gZHVyaW5nIHRoaXMgZnJhbWUsXG4gICAgICAvLyBkZWZlciBzdGFydGluZyBhbiBpbnRlcnJ1cHRpbmcgdHJhbnNpdGlvbiB1bnRpbCB0aGF0IHRyYW5zaXRpb24gaGFzIGFcbiAgICAgIC8vIGNoYW5jZSB0byB0aWNrIChhbmQgcG9zc2libHkgZW5kKTsgc2VlIGQzL2QzLXRyYW5zaXRpb24jNTQhXG4gICAgICBpZiAoby5zdGF0ZSA9PT0gU1RBUlRFRCkgcmV0dXJuIHRpbWVvdXQoc3RhcnQpO1xuXG4gICAgICAvLyBJbnRlcnJ1cHQgdGhlIGFjdGl2ZSB0cmFuc2l0aW9uLCBpZiBhbnkuXG4gICAgICAvLyBEaXNwYXRjaCB0aGUgaW50ZXJydXB0IGV2ZW50LlxuICAgICAgaWYgKG8uc3RhdGUgPT09IFJVTk5JTkcpIHtcbiAgICAgICAgby5zdGF0ZSA9IEVOREVEO1xuICAgICAgICBvLnRpbWVyLnN0b3AoKTtcbiAgICAgICAgby5vbi5jYWxsKFwiaW50ZXJydXB0XCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIG8uaW5kZXgsIG8uZ3JvdXApO1xuICAgICAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICAgICAgfVxuXG4gICAgICAvLyBDYW5jZWwgYW55IHByZS1lbXB0ZWQgdHJhbnNpdGlvbnMuIE5vIGludGVycnVwdCBldmVudCBpcyBkaXNwYXRjaGVkXG4gICAgICAvLyBiZWNhdXNlIHRoZSBjYW5jZWxsZWQgdHJhbnNpdGlvbnMgbmV2ZXIgc3RhcnRlZC4gTm90ZSB0aGF0IHRoaXMgYWxzb1xuICAgICAgLy8gcmVtb3ZlcyB0aGlzIHRyYW5zaXRpb24gZnJvbSB0aGUgcGVuZGluZyBsaXN0IVxuICAgICAgZWxzZSBpZiAoK2kgPCBpZCkge1xuICAgICAgICBvLnN0YXRlID0gRU5ERUQ7XG4gICAgICAgIG8udGltZXIuc3RvcCgpO1xuICAgICAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERlZmVyIHRoZSBmaXJzdCB0aWNrIHRvIGVuZCBvZiB0aGUgY3VycmVudCBmcmFtZTsgc2VlIGQzL2QzIzE1NzYuXG4gICAgLy8gTm90ZSB0aGUgdHJhbnNpdGlvbiBtYXkgYmUgY2FuY2VsZWQgYWZ0ZXIgc3RhcnQgYW5kIGJlZm9yZSB0aGUgZmlyc3QgdGljayFcbiAgICAvLyBOb3RlIHRoaXMgbXVzdCBiZSBzY2hlZHVsZWQgYmVmb3JlIHRoZSBzdGFydCBldmVudDsgc2VlIGQzL2QzLXRyYW5zaXRpb24jMTYhXG4gICAgLy8gQXNzdW1pbmcgdGhpcyBpcyBzdWNjZXNzZnVsLCBzdWJzZXF1ZW50IGNhbGxiYWNrcyBnbyBzdHJhaWdodCB0byB0aWNrLlxuICAgIHRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoc2VsZi5zdGF0ZSA9PT0gU1RBUlRFRCkge1xuICAgICAgICBzZWxmLnN0YXRlID0gUlVOTklORztcbiAgICAgICAgc2VsZi50aW1lci5yZXN0YXJ0KHRpY2ssIHNlbGYuZGVsYXksIHNlbGYudGltZSk7XG4gICAgICAgIHRpY2soZWxhcHNlZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBEaXNwYXRjaCB0aGUgc3RhcnQgZXZlbnQuXG4gICAgLy8gTm90ZSB0aGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgdGhlIHR3ZWVuIGFyZSBpbml0aWFsaXplZC5cbiAgICBzZWxmLnN0YXRlID0gU1RBUlRJTkc7XG4gICAgc2VsZi5vbi5jYWxsKFwic3RhcnRcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2VsZi5pbmRleCwgc2VsZi5ncm91cCk7XG4gICAgaWYgKHNlbGYuc3RhdGUgIT09IFNUQVJUSU5HKSByZXR1cm47IC8vIGludGVycnVwdGVkXG4gICAgc2VsZi5zdGF0ZSA9IFNUQVJURUQ7XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSB0d2VlbiwgZGVsZXRpbmcgbnVsbCB0d2Vlbi5cbiAgICB0d2VlbiA9IG5ldyBBcnJheShuID0gc2VsZi50d2Vlbi5sZW5ndGgpO1xuICAgIGZvciAoaSA9IDAsIGogPSAtMTsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG8gPSBzZWxmLnR3ZWVuW2ldLnZhbHVlLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgc2VsZi5pbmRleCwgc2VsZi5ncm91cCkpIHtcbiAgICAgICAgdHdlZW5bKytqXSA9IG87XG4gICAgICB9XG4gICAgfVxuICAgIHR3ZWVuLmxlbmd0aCA9IGogKyAxO1xuICB9XG5cbiAgZnVuY3Rpb24gdGljayhlbGFwc2VkKSB7XG4gICAgdmFyIHQgPSBlbGFwc2VkIDwgc2VsZi5kdXJhdGlvbiA/IHNlbGYuZWFzZS5jYWxsKG51bGwsIGVsYXBzZWQgLyBzZWxmLmR1cmF0aW9uKSA6IChzZWxmLnRpbWVyLnJlc3RhcnQoc3RvcCksIHNlbGYuc3RhdGUgPSBFTkRJTkcsIDEpLFxuICAgICAgICBpID0gLTEsXG4gICAgICAgIG4gPSB0d2Vlbi5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgdHdlZW5baV0uY2FsbChudWxsLCB0KTtcbiAgICB9XG5cbiAgICAvLyBEaXNwYXRjaCB0aGUgZW5kIGV2ZW50LlxuICAgIGlmIChzZWxmLnN0YXRlID09PSBFTkRJTkcpIHtcbiAgICAgIHNlbGYub24uY2FsbChcImVuZFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBzZWxmLmluZGV4LCBzZWxmLmdyb3VwKTtcbiAgICAgIHN0b3AoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdG9wKCkge1xuICAgIHNlbGYuc3RhdGUgPSBFTkRFRDtcbiAgICBzZWxmLnRpbWVyLnN0b3AoKTtcbiAgICBkZWxldGUgc2NoZWR1bGVzW2lkXTtcbiAgICBmb3IgKHZhciBpIGluIHNjaGVkdWxlcykgcmV0dXJuOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgZGVsZXRlIG5vZGUuX190cmFuc2l0aW9uO1xuICB9XG59XG4iLCJpbXBvcnQge1NUQVJUSU5HLCBFTkRJTkcsIEVOREVEfSBmcm9tIFwiLi90cmFuc2l0aW9uL3NjaGVkdWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uLFxuICAgICAgc2NoZWR1bGUsXG4gICAgICBhY3RpdmUsXG4gICAgICBlbXB0eSA9IHRydWUsXG4gICAgICBpO1xuXG4gIGlmICghc2NoZWR1bGVzKSByZXR1cm47XG5cbiAgbmFtZSA9IG5hbWUgPT0gbnVsbCA/IG51bGwgOiBuYW1lICsgXCJcIjtcblxuICBmb3IgKGkgaW4gc2NoZWR1bGVzKSB7XG4gICAgaWYgKChzY2hlZHVsZSA9IHNjaGVkdWxlc1tpXSkubmFtZSAhPT0gbmFtZSkgeyBlbXB0eSA9IGZhbHNlOyBjb250aW51ZTsgfVxuICAgIGFjdGl2ZSA9IHNjaGVkdWxlLnN0YXRlID4gU1RBUlRJTkcgJiYgc2NoZWR1bGUuc3RhdGUgPCBFTkRJTkc7XG4gICAgc2NoZWR1bGUuc3RhdGUgPSBFTkRFRDtcbiAgICBzY2hlZHVsZS50aW1lci5zdG9wKCk7XG4gICAgaWYgKGFjdGl2ZSkgc2NoZWR1bGUub24uY2FsbChcImludGVycnVwdFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBzY2hlZHVsZS5pbmRleCwgc2NoZWR1bGUuZ3JvdXApO1xuICAgIGRlbGV0ZSBzY2hlZHVsZXNbaV07XG4gIH1cblxuICBpZiAoZW1wdHkpIGRlbGV0ZSBub2RlLl9fdHJhbnNpdGlvbjtcbn1cbiIsImltcG9ydCB7Z2V0LCBzZXR9IGZyb20gXCIuL3NjaGVkdWxlXCI7XG5cbmZ1bmN0aW9uIHR3ZWVuUmVtb3ZlKGlkLCBuYW1lKSB7XG4gIHZhciB0d2VlbjAsIHR3ZWVuMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgIHR3ZWVuID0gc2NoZWR1bGUudHdlZW47XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIHR3ZWVuIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIHR3ZWVuIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmICh0d2VlbiAhPT0gdHdlZW4wKSB7XG4gICAgICB0d2VlbjEgPSB0d2VlbjAgPSB0d2VlbjtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdHdlZW4xLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAodHdlZW4xW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICB0d2VlbjEgPSB0d2VlbjEuc2xpY2UoKTtcbiAgICAgICAgICB0d2VlbjEuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2NoZWR1bGUudHdlZW4gPSB0d2VlbjE7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHR3ZWVuRnVuY3Rpb24oaWQsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0d2VlbjAsIHR3ZWVuMTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICB0d2VlbiA9IHNjaGVkdWxlLnR3ZWVuO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCB0d2VlbiB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCB0d2VlbiBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAodHdlZW4gIT09IHR3ZWVuMCkge1xuICAgICAgdHdlZW4xID0gKHR3ZWVuMCA9IHR3ZWVuKS5zbGljZSgpO1xuICAgICAgZm9yICh2YXIgdCA9IHtuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWV9LCBpID0gMCwgbiA9IHR3ZWVuMS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKHR3ZWVuMVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgdHdlZW4xW2ldID0gdDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGkgPT09IG4pIHR3ZWVuMS5wdXNoKHQpO1xuICAgIH1cblxuICAgIHNjaGVkdWxlLnR3ZWVuID0gdHdlZW4xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICBuYW1lICs9IFwiXCI7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIHR3ZWVuID0gZ2V0KHRoaXMubm9kZSgpLCBpZCkudHdlZW47XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0d2Vlbi5sZW5ndGgsIHQ7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgodCA9IHR3ZWVuW2ldKS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgIHJldHVybiB0LnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHZhbHVlID09IG51bGwgPyB0d2VlblJlbW92ZSA6IHR3ZWVuRnVuY3Rpb24pKGlkLCBuYW1lLCB2YWx1ZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHdlZW5WYWx1ZSh0cmFuc2l0aW9uLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgaWQgPSB0cmFuc2l0aW9uLl9pZDtcblxuICB0cmFuc2l0aW9uLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKTtcbiAgICAoc2NoZWR1bGUudmFsdWUgfHwgKHNjaGVkdWxlLnZhbHVlID0ge30pKVtuYW1lXSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIGdldChub2RlLCBpZCkudmFsdWVbbmFtZV07XG4gIH07XG59XG4iLCJpbXBvcnQge2NvbG9yfSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVOdW1iZXIsIGludGVycG9sYXRlUmdiLCBpbnRlcnBvbGF0ZVN0cmluZ30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGM7XG4gIHJldHVybiAodHlwZW9mIGIgPT09IFwibnVtYmVyXCIgPyBpbnRlcnBvbGF0ZU51bWJlclxuICAgICAgOiBiIGluc3RhbmNlb2YgY29sb3IgPyBpbnRlcnBvbGF0ZVJnYlxuICAgICAgOiAoYyA9IGNvbG9yKGIpKSA/IChiID0gYywgaW50ZXJwb2xhdGVSZ2IpXG4gICAgICA6IGludGVycG9sYXRlU3RyaW5nKShhLCBiKTtcbn1cbiIsImZ1bmN0aW9uIHJlbW92ZUZ1bmN0aW9uKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICAgIGZvciAodmFyIGkgaW4gdGhpcy5fX3RyYW5zaXRpb24pIGlmICgraSAhPT0gaWQpIHJldHVybjtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQucmVtb3ZlQ2hpbGQodGhpcyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5vbihcImVuZC5yZW1vdmVcIiwgcmVtb3ZlRnVuY3Rpb24odGhpcy5faWQpKTtcbn1cbiIsImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbnZhciBTZWxlY3Rpb24gPSBzZWxlY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImltcG9ydCB7dHdlZW5WYWx1ZX0gZnJvbSBcIi4vdHdlZW5cIjtcblxuZnVuY3Rpb24gdGV4dENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRleHRGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlMSA9IHZhbHVlKHRoaXMpO1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTEgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTE7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLnR3ZWVuKFwidGV4dFwiLCB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyB0ZXh0RnVuY3Rpb24odHdlZW5WYWx1ZSh0aGlzLCBcInRleHRcIiwgdmFsdWUpKVxuICAgICAgOiB0ZXh0Q29uc3RhbnQodmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSArIFwiXCIpKTtcbn1cbiIsImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9hdHRyIGZyb20gXCIuL2F0dHJcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2F0dHJUd2VlbiBmcm9tIFwiLi9hdHRyVHdlZW5cIjtcbmltcG9ydCB0cmFuc2l0aW9uX2RlbGF5IGZyb20gXCIuL2RlbGF5XCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9kdXJhdGlvbiBmcm9tIFwiLi9kdXJhdGlvblwiO1xuaW1wb3J0IHRyYW5zaXRpb25fZWFzZSBmcm9tIFwiLi9lYXNlXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9maWx0ZXIgZnJvbSBcIi4vZmlsdGVyXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9tZXJnZSBmcm9tIFwiLi9tZXJnZVwiO1xuaW1wb3J0IHRyYW5zaXRpb25fb24gZnJvbSBcIi4vb25cIjtcbmltcG9ydCB0cmFuc2l0aW9uX3JlbW92ZSBmcm9tIFwiLi9yZW1vdmVcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3NlbGVjdCBmcm9tIFwiLi9zZWxlY3RcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3NlbGVjdEFsbCBmcm9tIFwiLi9zZWxlY3RBbGxcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3NlbGVjdGlvbiBmcm9tIFwiLi9zZWxlY3Rpb25cIjtcbmltcG9ydCB0cmFuc2l0aW9uX3N0eWxlIGZyb20gXCIuL3N0eWxlXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zdHlsZVR3ZWVuIGZyb20gXCIuL3N0eWxlVHdlZW5cIjtcbmltcG9ydCB0cmFuc2l0aW9uX3RleHQgZnJvbSBcIi4vdGV4dFwiO1xuaW1wb3J0IHRyYW5zaXRpb25fdHJhbnNpdGlvbiBmcm9tIFwiLi90cmFuc2l0aW9uXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90d2VlbiBmcm9tIFwiLi90d2VlblwiO1xuXG52YXIgaWQgPSAwO1xuXG5leHBvcnQgZnVuY3Rpb24gVHJhbnNpdGlvbihncm91cHMsIHBhcmVudHMsIG5hbWUsIGlkKSB7XG4gIHRoaXMuX2dyb3VwcyA9IGdyb3VwcztcbiAgdGhpcy5fcGFyZW50cyA9IHBhcmVudHM7XG4gIHRoaXMuX25hbWUgPSBuYW1lO1xuICB0aGlzLl9pZCA9IGlkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2l0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHNlbGVjdGlvbigpLnRyYW5zaXRpb24obmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXdJZCgpIHtcbiAgcmV0dXJuICsraWQ7XG59XG5cbnZhciBzZWxlY3Rpb25fcHJvdG90eXBlID0gc2VsZWN0aW9uLnByb3RvdHlwZTtcblxuVHJhbnNpdGlvbi5wcm90b3R5cGUgPSB0cmFuc2l0aW9uLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFRyYW5zaXRpb24sXG4gIHNlbGVjdDogdHJhbnNpdGlvbl9zZWxlY3QsXG4gIHNlbGVjdEFsbDogdHJhbnNpdGlvbl9zZWxlY3RBbGwsXG4gIGZpbHRlcjogdHJhbnNpdGlvbl9maWx0ZXIsXG4gIG1lcmdlOiB0cmFuc2l0aW9uX21lcmdlLFxuICBzZWxlY3Rpb246IHRyYW5zaXRpb25fc2VsZWN0aW9uLFxuICB0cmFuc2l0aW9uOiB0cmFuc2l0aW9uX3RyYW5zaXRpb24sXG4gIGNhbGw6IHNlbGVjdGlvbl9wcm90b3R5cGUuY2FsbCxcbiAgbm9kZXM6IHNlbGVjdGlvbl9wcm90b3R5cGUubm9kZXMsXG4gIG5vZGU6IHNlbGVjdGlvbl9wcm90b3R5cGUubm9kZSxcbiAgc2l6ZTogc2VsZWN0aW9uX3Byb3RvdHlwZS5zaXplLFxuICBlbXB0eTogc2VsZWN0aW9uX3Byb3RvdHlwZS5lbXB0eSxcbiAgZWFjaDogc2VsZWN0aW9uX3Byb3RvdHlwZS5lYWNoLFxuICBvbjogdHJhbnNpdGlvbl9vbixcbiAgYXR0cjogdHJhbnNpdGlvbl9hdHRyLFxuICBhdHRyVHdlZW46IHRyYW5zaXRpb25fYXR0clR3ZWVuLFxuICBzdHlsZTogdHJhbnNpdGlvbl9zdHlsZSxcbiAgc3R5bGVUd2VlbjogdHJhbnNpdGlvbl9zdHlsZVR3ZWVuLFxuICB0ZXh0OiB0cmFuc2l0aW9uX3RleHQsXG4gIHJlbW92ZTogdHJhbnNpdGlvbl9yZW1vdmUsXG4gIHR3ZWVuOiB0cmFuc2l0aW9uX3R3ZWVuLFxuICBkZWxheTogdHJhbnNpdGlvbl9kZWxheSxcbiAgZHVyYXRpb246IHRyYW5zaXRpb25fZHVyYXRpb24sXG4gIGVhc2U6IHRyYW5zaXRpb25fZWFzZVxufTtcbiIsImltcG9ydCB7c2VsZWN0b3J9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCBzY2hlZHVsZSwge2dldH0gZnJvbSBcIi4vc2NoZWR1bGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0KSB7XG4gIHZhciBuYW1lID0gdGhpcy5fbmFtZSxcbiAgICAgIGlkID0gdGhpcy5faWQ7XG5cbiAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3Ioc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBzdWJub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChzdWJub2RlID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSkge1xuICAgICAgICBpZiAoXCJfX2RhdGFfX1wiIGluIG5vZGUpIHN1Ym5vZGUuX19kYXRhX18gPSBub2RlLl9fZGF0YV9fO1xuICAgICAgICBzdWJncm91cFtpXSA9IHN1Ym5vZGU7XG4gICAgICAgIHNjaGVkdWxlKHN1Ymdyb3VwW2ldLCBuYW1lLCBpZCwgaSwgc3ViZ3JvdXAsIGdldChub2RlLCBpZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsImltcG9ydCB7c2VsZWN0b3JBbGx9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCBzY2hlZHVsZSwge2dldH0gZnJvbSBcIi4vc2NoZWR1bGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0KSB7XG4gIHZhciBuYW1lID0gdGhpcy5fbmFtZSxcbiAgICAgIGlkID0gdGhpcy5faWQ7XG5cbiAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3JBbGwoc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBbXSwgcGFyZW50cyA9IFtdLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBmb3IgKHZhciBjaGlsZHJlbiA9IHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSwgY2hpbGQsIGluaGVyaXQgPSBnZXQobm9kZSwgaWQpLCBrID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgayA8IGw7ICsraykge1xuICAgICAgICAgIGlmIChjaGlsZCA9IGNoaWxkcmVuW2tdKSB7XG4gICAgICAgICAgICBzY2hlZHVsZShjaGlsZCwgbmFtZSwgaWQsIGssIGNoaWxkcmVuLCBpbmhlcml0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3ViZ3JvdXBzLnB1c2goY2hpbGRyZW4pO1xuICAgICAgICBwYXJlbnRzLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKHN1Ymdyb3VwcywgcGFyZW50cywgbmFtZSwgaWQpO1xufVxuIiwiaW1wb3J0IHttYXRjaGVyfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hdGNoKSB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggIT09IFwiZnVuY3Rpb25cIikgbWF0Y2ggPSBtYXRjaGVyKG1hdGNoKTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gW10sIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgbWF0Y2guY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpIHtcbiAgICAgICAgc3ViZ3JvdXAucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCB0aGlzLl9uYW1lLCB0aGlzLl9pZCk7XG59XG4iLCJpbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHRyYW5zaXRpb24pIHtcbiAgaWYgKHRyYW5zaXRpb24uX2lkICE9PSB0aGlzLl9pZCkgdGhyb3cgbmV3IEVycm9yO1xuXG4gIGZvciAodmFyIGdyb3VwczAgPSB0aGlzLl9ncm91cHMsIGdyb3VwczEgPSB0cmFuc2l0aW9uLl9ncm91cHMsIG0wID0gZ3JvdXBzMC5sZW5ndGgsIG0xID0gZ3JvdXBzMS5sZW5ndGgsIG0gPSBNYXRoLm1pbihtMCwgbTEpLCBtZXJnZXMgPSBuZXcgQXJyYXkobTApLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwMCA9IGdyb3VwczBbal0sIGdyb3VwMSA9IGdyb3VwczFbal0sIG4gPSBncm91cDAubGVuZ3RoLCBtZXJnZSA9IG1lcmdlc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXAwW2ldIHx8IGdyb3VwMVtpXSkge1xuICAgICAgICBtZXJnZVtpXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yICg7IGogPCBtMDsgKytqKSB7XG4gICAgbWVyZ2VzW2pdID0gZ3JvdXBzMFtqXTtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihtZXJnZXMsIHRoaXMuX3BhcmVudHMsIHRoaXMuX25hbWUsIHRoaXMuX2lkKTtcbn1cbiIsImltcG9ydCB7VHJhbnNpdGlvbiwgbmV3SWR9IGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZDAgPSB0aGlzLl9pZCxcbiAgICAgIGlkMSA9IG5ld0lkKCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgdmFyIGluaGVyaXQgPSBnZXQobm9kZSwgaWQwKTtcbiAgICAgICAgc2NoZWR1bGUobm9kZSwgbmFtZSwgaWQxLCBpLCBncm91cCwge1xuICAgICAgICAgIHRpbWU6IGluaGVyaXQudGltZSArIGluaGVyaXQuZGVsYXkgKyBpbmhlcml0LmR1cmF0aW9uLFxuICAgICAgICAgIGRlbGF5OiAwLFxuICAgICAgICAgIGR1cmF0aW9uOiBpbmhlcml0LmR1cmF0aW9uLFxuICAgICAgICAgIGVhc2U6IGluaGVyaXQuZWFzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCBuYW1lLCBpZDEpO1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldCwgaW5pdH0gZnJvbSBcIi4vc2NoZWR1bGVcIjtcblxuZnVuY3Rpb24gc3RhcnQobmFtZSkge1xuICByZXR1cm4gKG5hbWUgKyBcIlwiKS50cmltKCkuc3BsaXQoL158XFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGkgPj0gMCkgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgcmV0dXJuICF0IHx8IHQgPT09IFwic3RhcnRcIjtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uRnVuY3Rpb24oaWQsIG5hbWUsIGxpc3RlbmVyKSB7XG4gIHZhciBvbjAsIG9uMSwgc2l0ID0gc3RhcnQobmFtZSkgPyBpbml0IDogc2V0O1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2l0KHRoaXMsIGlkKSxcbiAgICAgICAgb24gPSBzY2hlZHVsZS5vbjtcblxuICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgYSBkaXNwYXRjaCB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCBkaXNwYXRjaCBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAob24gIT09IG9uMCkgKG9uMSA9IChvbjAgPSBvbikuY29weSgpKS5vbihuYW1lLCBsaXN0ZW5lcik7XG5cbiAgICBzY2hlZHVsZS5vbiA9IG9uMTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgbGlzdGVuZXIpIHtcbiAgdmFyIGlkID0gdGhpcy5faWQ7XG5cbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyXG4gICAgICA/IGdldCh0aGlzLm5vZGUoKSwgaWQpLm9uLm9uKG5hbWUpXG4gICAgICA6IHRoaXMuZWFjaChvbkZ1bmN0aW9uKGlkLCBuYW1lLCBsaXN0ZW5lcikpO1xufVxuIiwiaW1wb3J0IHtpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZyBhcyBpbnRlcnBvbGF0ZVRyYW5zZm9ybX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge25hbWVzcGFjZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHt0d2VlblZhbHVlfSBmcm9tIFwiLi90d2VlblwiO1xuaW1wb3J0IGludGVycG9sYXRlIGZyb20gXCIuL2ludGVycG9sYXRlXCI7XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmVOUyhmdWxsbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnQobmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgdmFsdWUwMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTAgPSB0aGlzLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgICByZXR1cm4gdmFsdWUwID09PSB2YWx1ZTEgPyBudWxsXG4gICAgICAgIDogdmFsdWUwID09PSB2YWx1ZTAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUodmFsdWUwMCA9IHZhbHVlMCwgdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50TlMoZnVsbG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZTEpIHtcbiAgdmFyIHZhbHVlMDAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUwID0gdGhpcy5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHJldHVybiB2YWx1ZTAgPT09IHZhbHVlMSA/IG51bGxcbiAgICAgICAgOiB2YWx1ZTAgPT09IHZhbHVlMDAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZSh2YWx1ZTAwID0gdmFsdWUwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb24obmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciB2YWx1ZTAwLFxuICAgICAgdmFsdWUxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTAsIHZhbHVlMSA9IHZhbHVlKHRoaXMpO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgcmV0dXJuIHZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgdmFsdWUwID0gdGhpcy5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gICAgcmV0dXJuIHZhbHVlMCA9PT0gdmFsdWUxID8gbnVsbFxuICAgICAgICA6IHZhbHVlMCA9PT0gdmFsdWUwMCAmJiB2YWx1ZTEgPT09IHZhbHVlMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZSh2YWx1ZTAwID0gdmFsdWUwLCB2YWx1ZTEwID0gdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uTlMoZnVsbG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZSkge1xuICB2YXIgdmFsdWUwMCxcbiAgICAgIHZhbHVlMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUwLCB2YWx1ZTEgPSB2YWx1ZSh0aGlzKTtcbiAgICBpZiAodmFsdWUxID09IG51bGwpIHJldHVybiB2b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICB2YWx1ZTAgPSB0aGlzLmdldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgcmV0dXJuIHZhbHVlMCA9PT0gdmFsdWUxID8gbnVsbFxuICAgICAgICA6IHZhbHVlMCA9PT0gdmFsdWUwMCAmJiB2YWx1ZTEgPT09IHZhbHVlMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZSh2YWx1ZTAwID0gdmFsdWUwLCB2YWx1ZTEwID0gdmFsdWUxKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpLCBpID0gZnVsbG5hbWUgPT09IFwidHJhbnNmb3JtXCIgPyBpbnRlcnBvbGF0ZVRyYW5zZm9ybSA6IGludGVycG9sYXRlO1xuICByZXR1cm4gdGhpcy5hdHRyVHdlZW4obmFtZSwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckZ1bmN0aW9uTlMgOiBhdHRyRnVuY3Rpb24pKGZ1bGxuYW1lLCBpLCB0d2VlblZhbHVlKHRoaXMsIFwiYXR0ci5cIiArIG5hbWUsIHZhbHVlKSlcbiAgICAgIDogdmFsdWUgPT0gbnVsbCA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJSZW1vdmVOUyA6IGF0dHJSZW1vdmUpKGZ1bGxuYW1lKVxuICAgICAgOiAoZnVsbG5hbWUubG9jYWwgPyBhdHRyQ29uc3RhbnROUyA6IGF0dHJDb25zdGFudCkoZnVsbG5hbWUsIGksIHZhbHVlICsgXCJcIikpO1xufVxuIiwiaW1wb3J0IHtuYW1lc3BhY2V9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcblxuZnVuY3Rpb24gYXR0clR3ZWVuTlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBub2RlID0gdGhpcywgaSA9IHZhbHVlLmFwcGx5KG5vZGUsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIGkgJiYgZnVuY3Rpb24odCkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIGkodCkpO1xuICAgIH07XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZnVuY3Rpb24gYXR0clR3ZWVuKG5hbWUsIHZhbHVlKSB7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBub2RlID0gdGhpcywgaSA9IHZhbHVlLmFwcGx5KG5vZGUsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIGkgJiYgZnVuY3Rpb24odCkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUobmFtZSwgaSh0KSk7XG4gICAgfTtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIga2V5ID0gXCJhdHRyLlwiICsgbmFtZTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgKGZ1bGxuYW1lLmxvY2FsID8gYXR0clR3ZWVuTlMgOiBhdHRyVHdlZW4pKGZ1bGxuYW1lLCB2YWx1ZSkpO1xufVxuIiwiaW1wb3J0IHtpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcyBhcyBpbnRlcnBvbGF0ZVRyYW5zZm9ybX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge3N0eWxlfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge3R3ZWVuVmFsdWV9IGZyb20gXCIuL3R3ZWVuXCI7XG5pbXBvcnQgaW50ZXJwb2xhdGUgZnJvbSBcIi4vaW50ZXJwb2xhdGVcIjtcblxuZnVuY3Rpb24gc3R5bGVSZW1vdmUobmFtZSwgaW50ZXJwb2xhdGUpIHtcbiAgdmFyIHZhbHVlMDAsXG4gICAgICB2YWx1ZTEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlMCA9IHN0eWxlKHRoaXMsIG5hbWUpLFxuICAgICAgICB2YWx1ZTEgPSAodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKSwgc3R5bGUodGhpcywgbmFtZSkpO1xuICAgIHJldHVybiB2YWx1ZTAgPT09IHZhbHVlMSA/IG51bGxcbiAgICAgICAgOiB2YWx1ZTAgPT09IHZhbHVlMDAgJiYgdmFsdWUxID09PSB2YWx1ZTEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUodmFsdWUwMCA9IHZhbHVlMCwgdmFsdWUxMCA9IHZhbHVlMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlUmVtb3ZlRW5kKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlQ29uc3RhbnQobmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgdmFsdWUwMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTAgPSBzdHlsZSh0aGlzLCBuYW1lKTtcbiAgICByZXR1cm4gdmFsdWUwID09PSB2YWx1ZTEgPyBudWxsXG4gICAgICAgIDogdmFsdWUwID09PSB2YWx1ZTAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUodmFsdWUwMCA9IHZhbHVlMCwgdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVGdW5jdGlvbihuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUpIHtcbiAgdmFyIHZhbHVlMDAsXG4gICAgICB2YWx1ZTEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlMCA9IHN0eWxlKHRoaXMsIG5hbWUpLFxuICAgICAgICB2YWx1ZTEgPSB2YWx1ZSh0aGlzKTtcbiAgICBpZiAodmFsdWUxID09IG51bGwpIHZhbHVlMSA9ICh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpLCBzdHlsZSh0aGlzLCBuYW1lKSk7XG4gICAgcmV0dXJuIHZhbHVlMCA9PT0gdmFsdWUxID8gbnVsbFxuICAgICAgICA6IHZhbHVlMCA9PT0gdmFsdWUwMCAmJiB2YWx1ZTEgPT09IHZhbHVlMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZSh2YWx1ZTAwID0gdmFsdWUwLCB2YWx1ZTEwID0gdmFsdWUxKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHZhciBpID0gKG5hbWUgKz0gXCJcIikgPT09IFwidHJhbnNmb3JtXCIgPyBpbnRlcnBvbGF0ZVRyYW5zZm9ybSA6IGludGVycG9sYXRlO1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/IHRoaXNcbiAgICAgICAgICAuc3R5bGVUd2VlbihuYW1lLCBzdHlsZVJlbW92ZShuYW1lLCBpKSlcbiAgICAgICAgICAub24oXCJlbmQuc3R5bGUuXCIgKyBuYW1lLCBzdHlsZVJlbW92ZUVuZChuYW1lKSlcbiAgICAgIDogdGhpcy5zdHlsZVR3ZWVuKG5hbWUsIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBzdHlsZUZ1bmN0aW9uKG5hbWUsIGksIHR3ZWVuVmFsdWUodGhpcywgXCJzdHlsZS5cIiArIG5hbWUsIHZhbHVlKSlcbiAgICAgICAgICA6IHN0eWxlQ29uc3RhbnQobmFtZSwgaSwgdmFsdWUgKyBcIlwiKSwgcHJpb3JpdHkpO1xufVxuIiwiZnVuY3Rpb24gc3R5bGVUd2VlbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLCBpID0gdmFsdWUuYXBwbHkobm9kZSwgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gaSAmJiBmdW5jdGlvbih0KSB7XG4gICAgICBub2RlLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIGkodCksIHByaW9yaXR5KTtcbiAgICB9O1xuICB9XG4gIHR3ZWVuLl92YWx1ZSA9IHZhbHVlO1xuICByZXR1cm4gdHdlZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICB2YXIga2V5ID0gXCJzdHlsZS5cIiArIChuYW1lICs9IFwiXCIpO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHJldHVybiAoa2V5ID0gdGhpcy50d2VlbihrZXkpKSAmJiBrZXkuX3ZhbHVlO1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBudWxsKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgc3R5bGVUd2VlbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkgPT0gbnVsbCA/IFwiXCIgOiBwcmlvcml0eSkpO1xufVxuIiwiaW1wb3J0IHtnZXQsIGluaXR9IGZyb20gXCIuL3NjaGVkdWxlXCI7XG5cbmZ1bmN0aW9uIGRlbGF5RnVuY3Rpb24oaWQsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpbml0KHRoaXMsIGlkKS5kZWxheSA9ICt2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkZWxheUNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPSArdmFsdWUsIGZ1bmN0aW9uKCkge1xuICAgIGluaXQodGhpcywgaWQpLmRlbGF5ID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGRlbGF5RnVuY3Rpb25cbiAgICAgICAgICA6IGRlbGF5Q29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmRlbGF5O1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGVcIjtcblxuZnVuY3Rpb24gZHVyYXRpb25GdW5jdGlvbihpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZHVyYXRpb24gPSArdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZHVyYXRpb25Db25zdGFudChpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID0gK3ZhbHVlLCBmdW5jdGlvbigpIHtcbiAgICBzZXQodGhpcywgaWQpLmR1cmF0aW9uID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGR1cmF0aW9uRnVuY3Rpb25cbiAgICAgICAgICA6IGR1cmF0aW9uQ29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmR1cmF0aW9uO1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGVcIjtcblxuZnVuY3Rpb24gZWFzZUNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZWFzZSA9IHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2goZWFzZUNvbnN0YW50KGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmVhc2U7XG59XG4iLCJpbXBvcnQge1RyYW5zaXRpb24sIG5ld0lkfSBmcm9tIFwiLi4vdHJhbnNpdGlvbi9pbmRleFwiO1xuaW1wb3J0IHNjaGVkdWxlIGZyb20gXCIuLi90cmFuc2l0aW9uL3NjaGVkdWxlXCI7XG5pbXBvcnQge2Vhc2VDdWJpY0luT3V0fSBmcm9tIFwiZDMtZWFzZVwiO1xuaW1wb3J0IHtub3d9IGZyb20gXCJkMy10aW1lclwiO1xuXG52YXIgZGVmYXVsdFRpbWluZyA9IHtcbiAgdGltZTogbnVsbCwgLy8gU2V0IG9uIHVzZS5cbiAgZGVsYXk6IDAsXG4gIGR1cmF0aW9uOiAyNTAsXG4gIGVhc2U6IGVhc2VDdWJpY0luT3V0XG59O1xuXG5mdW5jdGlvbiBpbmhlcml0KG5vZGUsIGlkKSB7XG4gIHZhciB0aW1pbmc7XG4gIHdoaWxlICghKHRpbWluZyA9IG5vZGUuX190cmFuc2l0aW9uKSB8fCAhKHRpbWluZyA9IHRpbWluZ1tpZF0pKSB7XG4gICAgaWYgKCEobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VGltaW5nLnRpbWUgPSBub3coKSwgZGVmYXVsdFRpbWluZztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRpbWluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgaWQsXG4gICAgICB0aW1pbmc7XG5cbiAgaWYgKG5hbWUgaW5zdGFuY2VvZiBUcmFuc2l0aW9uKSB7XG4gICAgaWQgPSBuYW1lLl9pZCwgbmFtZSA9IG5hbWUuX25hbWU7XG4gIH0gZWxzZSB7XG4gICAgaWQgPSBuZXdJZCgpLCAodGltaW5nID0gZGVmYXVsdFRpbWluZykudGltZSA9IG5vdygpLCBuYW1lID0gbmFtZSA9PSBudWxsID8gbnVsbCA6IG5hbWUgKyBcIlwiO1xuICB9XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc2NoZWR1bGUobm9kZSwgbmFtZSwgaWQsIGksIGdyb3VwLCB0aW1pbmcgfHwgaW5oZXJpdChub2RlLCBpZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBjdWJpY0luKHQpIHtcbiAgcmV0dXJuIHQgKiB0ICogdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1YmljT3V0KHQpIHtcbiAgcmV0dXJuIC0tdCAqIHQgKiB0ICsgMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1YmljSW5PdXQodCkge1xuICByZXR1cm4gKCh0ICo9IDIpIDw9IDEgPyB0ICogdCAqIHQgOiAodCAtPSAyKSAqIHQgKiB0ICsgMikgLyAyO1xufVxuIiwiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCBzZWxlY3Rpb25faW50ZXJydXB0IGZyb20gXCIuL2ludGVycnVwdFwiO1xuaW1wb3J0IHNlbGVjdGlvbl90cmFuc2l0aW9uIGZyb20gXCIuL3RyYW5zaXRpb25cIjtcblxuc2VsZWN0aW9uLnByb3RvdHlwZS5pbnRlcnJ1cHQgPSBzZWxlY3Rpb25faW50ZXJydXB0O1xuc2VsZWN0aW9uLnByb3RvdHlwZS50cmFuc2l0aW9uID0gc2VsZWN0aW9uX3RyYW5zaXRpb247XG4iLCJpbXBvcnQgaW50ZXJydXB0IGZyb20gXCIuLi9pbnRlcnJ1cHRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgIGludGVycnVwdCh0aGlzLCBuYW1lKTtcbiAgfSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgdmFyIG4gPSBzcGVjaWZpZXIubGVuZ3RoIC8gNiB8IDAsIGNvbG9ycyA9IG5ldyBBcnJheShuKSwgaSA9IDA7XG4gIHdoaWxlIChpIDwgbikgY29sb3JzW2ldID0gXCIjXCIgKyBzcGVjaWZpZXIuc2xpY2UoaSAqIDYsICsraSAqIDYpO1xuICByZXR1cm4gY29sb3JzO1xufVxuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcIjFmNzdiNGZmN2YwZTJjYTAyY2Q2MjcyODk0NjdiZDhjNTY0YmUzNzdjMjdmN2Y3ZmJjYmQyMjE3YmVjZlwiKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCI3ZmM5N2ZiZWFlZDRmZGMwODZmZmZmOTkzODZjYjBmMDAyN2ZiZjViMTc2NjY2NjZcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiMWI5ZTc3ZDk1ZjAyNzU3MGIzZTcyOThhNjZhNjFlZTZhYjAyYTY3NjFkNjY2NjY2XCIpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcImE2Y2VlMzFmNzhiNGIyZGY4YTMzYTAyY2ZiOWE5OWUzMWExY2ZkYmY2ZmZmN2YwMGNhYjJkNjZhM2Q5YWZmZmY5OWIxNTkyOFwiKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCJmYmI0YWViM2NkZTNjY2ViYzVkZWNiZTRmZWQ5YTZmZmZmY2NlNWQ4YmRmZGRhZWNmMmYyZjJcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiYjNlMmNkZmRjZGFjY2JkNWU4ZjRjYWU0ZTZmNWM5ZmZmMmFlZjFlMmNjY2NjY2NjXCIpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcImU0MWExYzM3N2ViODRkYWY0YTk4NGVhM2ZmN2YwMGZmZmYzM2E2NTYyOGY3ODFiZjk5OTk5OVwiKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCI2NmMyYTVmYzhkNjI4ZGEwY2JlNzhhYzNhNmQ4NTRmZmQ5MmZlNWM0OTRiM2IzYjNcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiOGRkM2M3ZmZmZmIzYmViYWRhZmI4MDcyODBiMWQzZmRiNDYyYjNkZTY5ZmNjZGU1ZDlkOWQ5YmM4MGJkY2NlYmM1ZmZlZDZmXCIpO1xuIiwiaW1wb3J0IHtpbnRlcnBvbGF0ZVJnYkJhc2lzfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2NoZW1lKSB7XG4gIHJldHVybiBpbnRlcnBvbGF0ZVJnYkJhc2lzKHNjaGVtZVtzY2hlbWUubGVuZ3RoIC0gMV0pO1xufVxuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZDhiMzY1ZjVmNWY1NWFiNGFjXCIsXG4gIFwiYTY2MTFhZGZjMjdkODBjZGMxMDE4NTcxXCIsXG4gIFwiYTY2MTFhZGZjMjdkZjVmNWY1ODBjZGMxMDE4NTcxXCIsXG4gIFwiOGM1MTBhZDhiMzY1ZjZlOGMzYzdlYWU1NWFiNGFjMDE2NjVlXCIsXG4gIFwiOGM1MTBhZDhiMzY1ZjZlOGMzZjVmNWY1YzdlYWU1NWFiNGFjMDE2NjVlXCIsXG4gIFwiOGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzYzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlXCIsXG4gIFwiOGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzZjVmNWY1YzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlXCIsXG4gIFwiNTQzMDA1OGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzYzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlMDAzYzMwXCIsXG4gIFwiNTQzMDA1OGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzZjVmNWY1YzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlMDAzYzMwXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImFmOGRjM2Y3ZjdmNzdmYmY3YlwiLFxuICBcIjdiMzI5NGMyYTVjZmE2ZGJhMDAwODgzN1wiLFxuICBcIjdiMzI5NGMyYTVjZmY3ZjdmN2E2ZGJhMDAwODgzN1wiLFxuICBcIjc2MmE4M2FmOGRjM2U3ZDRlOGQ5ZjBkMzdmYmY3YjFiNzgzN1wiLFxuICBcIjc2MmE4M2FmOGRjM2U3ZDRlOGY3ZjdmN2Q5ZjBkMzdmYmY3YjFiNzgzN1wiLFxuICBcIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzN1wiLFxuICBcIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzN1wiLFxuICBcIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYlwiLFxuICBcIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlOWEzYzlmN2Y3ZjdhMWQ3NmFcIixcbiAgXCJkMDFjOGJmMWI2ZGFiOGUxODY0ZGFjMjZcIixcbiAgXCJkMDFjOGJmMWI2ZGFmN2Y3ZjdiOGUxODY0ZGFjMjZcIixcbiAgXCJjNTFiN2RlOWEzYzlmZGUwZWZlNmY1ZDBhMWQ3NmE0ZDkyMjFcIixcbiAgXCJjNTFiN2RlOWEzYzlmZGUwZWZmN2Y3ZjdlNmY1ZDBhMWQ3NmE0ZDkyMjFcIixcbiAgXCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjFcIixcbiAgXCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjFcIixcbiAgXCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTlcIixcbiAgXCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTlcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiOTk4ZWMzZjdmN2Y3ZjFhMzQwXCIsXG4gIFwiNWUzYzk5YjJhYmQyZmRiODYzZTY2MTAxXCIsXG4gIFwiNWUzYzk5YjJhYmQyZjdmN2Y3ZmRiODYzZTY2MTAxXCIsXG4gIFwiNTQyNzg4OTk4ZWMzZDhkYWViZmVlMGI2ZjFhMzQwYjM1ODA2XCIsXG4gIFwiNTQyNzg4OTk4ZWMzZDhkYWViZjdmN2Y3ZmVlMGI2ZjFhMzQwYjM1ODA2XCIsXG4gIFwiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2XCIsXG4gIFwiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZjdmN2Y3ZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2XCIsXG4gIFwiMmQwMDRiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2N2YzYjA4XCIsXG4gIFwiMmQwMDRiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZjdmN2Y3ZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2N2YzYjA4XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImVmOGE2MmY3ZjdmNzY3YTljZlwiLFxuICBcImNhMDAyMGY0YTU4MjkyYzVkZTA1NzFiMFwiLFxuICBcImNhMDAyMGY0YTU4MmY3ZjdmNzkyYzVkZTA1NzFiMFwiLFxuICBcImIyMTgyYmVmOGE2MmZkZGJjN2QxZTVmMDY3YTljZjIxNjZhY1wiLFxuICBcImIyMTgyYmVmOGE2MmZkZGJjN2Y3ZjdmN2QxZTVmMDY3YTljZjIxNjZhY1wiLFxuICBcImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhY1wiLFxuICBcImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhY1wiLFxuICBcIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MVwiLFxuICBcIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MVwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlZjhhNjJmZmZmZmY5OTk5OTlcIixcbiAgXCJjYTAwMjBmNGE1ODJiYWJhYmE0MDQwNDBcIixcbiAgXCJjYTAwMjBmNGE1ODJmZmZmZmZiYWJhYmE0MDQwNDBcIixcbiAgXCJiMjE4MmJlZjhhNjJmZGRiYzdlMGUwZTA5OTk5OTk0ZDRkNGRcIixcbiAgXCJiMjE4MmJlZjhhNjJmZGRiYzdmZmZmZmZlMGUwZTA5OTk5OTk0ZDRkNGRcIixcbiAgXCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGRcIixcbiAgXCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGRcIixcbiAgXCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWFcIixcbiAgXCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWFcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmM4ZDU5ZmZmZmJmOTFiZmRiXCIsXG4gIFwiZDcxOTFjZmRhZTYxYWJkOWU5MmM3YmI2XCIsXG4gIFwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkOWU5MmM3YmI2XCIsXG4gIFwiZDczMDI3ZmM4ZDU5ZmVlMDkwZTBmM2Y4OTFiZmRiNDU3NWI0XCIsXG4gIFwiZDczMDI3ZmM4ZDU5ZmVlMDkwZmZmZmJmZTBmM2Y4OTFiZmRiNDU3NWI0XCIsXG4gIFwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0XCIsXG4gIFwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZmZmZmJmZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0XCIsXG4gIFwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0MzEzNjk1XCIsXG4gIFwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZmZmZmJmZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0MzEzNjk1XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImZjOGQ1OWZmZmZiZjkxY2Y2MFwiLFxuICBcImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MVwiLFxuICBcImQ3MTkxY2ZkYWU2MWZmZmZiZmE2ZDk2YTFhOTY0MVwiLFxuICBcImQ3MzAyN2ZjOGQ1OWZlZTA4YmQ5ZWY4YjkxY2Y2MDFhOTg1MFwiLFxuICBcImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MFwiLFxuICBcImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MFwiLFxuICBcImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MFwiLFxuICBcImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzN1wiLFxuICBcImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzN1wiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmYzhkNTlmZmZmYmY5OWQ1OTRcIixcbiAgXCJkNzE5MWNmZGFlNjFhYmRkYTQyYjgzYmFcIixcbiAgXCJkNzE5MWNmZGFlNjFmZmZmYmZhYmRkYTQyYjgzYmFcIixcbiAgXCJkNTNlNGZmYzhkNTlmZWUwOGJlNmY1OTg5OWQ1OTQzMjg4YmRcIixcbiAgXCJkNTNlNGZmYzhkNTlmZWUwOGJmZmZmYmZlNmY1OTg5OWQ1OTQzMjg4YmRcIixcbiAgXCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmRcIixcbiAgXCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmRcIixcbiAgXCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTJcIixcbiAgXCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTJcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZTVmNWY5OTlkOGM5MmNhMjVmXCIsXG4gIFwiZWRmOGZiYjJlMmUyNjZjMmE0MjM4YjQ1XCIsXG4gIFwiZWRmOGZiYjJlMmUyNjZjMmE0MmNhMjVmMDA2ZDJjXCIsXG4gIFwiZWRmOGZiY2NlY2U2OTlkOGM5NjZjMmE0MmNhMjVmMDA2ZDJjXCIsXG4gIFwiZWRmOGZiY2NlY2U2OTlkOGM5NjZjMmE0NDFhZTc2MjM4YjQ1MDA1ODI0XCIsXG4gIFwiZjdmY2ZkZTVmNWY5Y2NlY2U2OTlkOGM5NjZjMmE0NDFhZTc2MjM4YjQ1MDA1ODI0XCIsXG4gIFwiZjdmY2ZkZTVmNWY5Y2NlY2U2OTlkOGM5NjZjMmE0NDFhZTc2MjM4YjQ1MDA2ZDJjMDA0NDFiXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImUwZWNmNDllYmNkYTg4NTZhN1wiLFxuICBcImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZFwiLFxuICBcImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3Y1wiLFxuICBcImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3Y1wiLFxuICBcImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YlwiLFxuICBcImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YlwiLFxuICBcImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlMGYzZGJhOGRkYjU0M2EyY2FcIixcbiAgXCJmMGY5ZThiYWU0YmM3YmNjYzQyYjhjYmVcIixcbiAgXCJmMGY5ZThiYWU0YmM3YmNjYzQ0M2EyY2EwODY4YWNcIixcbiAgXCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0M2EyY2EwODY4YWNcIixcbiAgXCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWVcIixcbiAgXCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWVcIixcbiAgXCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODY4YWMwODQwODFcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmVlOGM4ZmRiYjg0ZTM0YTMzXCIsXG4gIFwiZmVmMGQ5ZmRjYzhhZmM4ZDU5ZDczMDFmXCIsXG4gIFwiZmVmMGQ5ZmRjYzhhZmM4ZDU5ZTM0YTMzYjMwMDAwXCIsXG4gIFwiZmVmMGQ5ZmRkNDllZmRiYjg0ZmM4ZDU5ZTM0YTMzYjMwMDAwXCIsXG4gIFwiZmVmMGQ5ZmRkNDllZmRiYjg0ZmM4ZDU5ZWY2NTQ4ZDczMDFmOTkwMDAwXCIsXG4gIFwiZmZmN2VjZmVlOGM4ZmRkNDllZmRiYjg0ZmM4ZDU5ZWY2NTQ4ZDczMDFmOTkwMDAwXCIsXG4gIFwiZmZmN2VjZmVlOGM4ZmRkNDllZmRiYjg0ZmM4ZDU5ZWY2NTQ4ZDczMDFmYjMwMDAwN2YwMDAwXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImVjZTJmMGE2YmRkYjFjOTA5OVwiLFxuICBcImY2ZWZmN2JkYzllMTY3YTljZjAyODE4YVwiLFxuICBcImY2ZWZmN2JkYzllMTY3YTljZjFjOTA5OTAxNmM1OVwiLFxuICBcImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjFjOTA5OTAxNmM1OVwiLFxuICBcImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MFwiLFxuICBcImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MFwiLFxuICBcImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNmM1OTAxNDYzNlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlY2U3ZjJhNmJkZGIyYjhjYmVcIixcbiAgXCJmMWVlZjZiZGM5ZTE3NGE5Y2YwNTcwYjBcIixcbiAgXCJmMWVlZjZiZGM5ZTE3NGE5Y2YyYjhjYmUwNDVhOGRcIixcbiAgXCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YyYjhjYmUwNDVhOGRcIixcbiAgXCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2JcIixcbiAgXCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2JcIixcbiAgXCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwNDVhOGQwMjM4NThcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZTdlMWVmYzk5NGM3ZGQxYzc3XCIsXG4gIFwiZjFlZWY2ZDdiNWQ4ZGY2NWIwY2UxMjU2XCIsXG4gIFwiZjFlZWY2ZDdiNWQ4ZGY2NWIwZGQxYzc3OTgwMDQzXCIsXG4gIFwiZjFlZWY2ZDRiOWRhYzk5NGM3ZGY2NWIwZGQxYzc3OTgwMDQzXCIsXG4gIFwiZjFlZWY2ZDRiOWRhYzk5NGM3ZGY2NWIwZTcyOThhY2UxMjU2OTEwMDNmXCIsXG4gIFwiZjdmNGY5ZTdlMWVmZDRiOWRhYzk5NGM3ZGY2NWIwZTcyOThhY2UxMjU2OTEwMDNmXCIsXG4gIFwiZjdmNGY5ZTdlMWVmZDRiOWRhYzk5NGM3ZGY2NWIwZTcyOThhY2UxMjU2OTgwMDQzNjcwMDFmXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImZkZTBkZGZhOWZiNWM1MWI4YVwiLFxuICBcImZlZWJlMmZiYjRiOWY3NjhhMWFlMDE3ZVwiLFxuICBcImZlZWJlMmZiYjRiOWY3NjhhMWM1MWI4YTdhMDE3N1wiLFxuICBcImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3N1wiLFxuICBcImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3N1wiLFxuICBcImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3N1wiLFxuICBcImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YVwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlZGY4YjE3ZmNkYmIyYzdmYjhcIixcbiAgXCJmZmZmY2NhMWRhYjQ0MWI2YzQyMjVlYThcIixcbiAgXCJmZmZmY2NhMWRhYjQ0MWI2YzQyYzdmYjgyNTM0OTRcIixcbiAgXCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQyYzdmYjgyNTM0OTRcIixcbiAgXCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODRcIixcbiAgXCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODRcIixcbiAgXCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgyNTM0OTQwODFkNThcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZjdmY2I5YWRkZDhlMzFhMzU0XCIsXG4gIFwiZmZmZmNjYzJlNjk5NzhjNjc5MjM4NDQzXCIsXG4gIFwiZmZmZmNjYzJlNjk5NzhjNjc5MzFhMzU0MDA2ODM3XCIsXG4gIFwiZmZmZmNjZDlmMGEzYWRkZDhlNzhjNjc5MzFhMzU0MDA2ODM3XCIsXG4gIFwiZmZmZmNjZDlmMGEzYWRkZDhlNzhjNjc5NDFhYjVkMjM4NDQzMDA1YTMyXCIsXG4gIFwiZmZmZmU1ZjdmY2I5ZDlmMGEzYWRkZDhlNzhjNjc5NDFhYjVkMjM4NDQzMDA1YTMyXCIsXG4gIFwiZmZmZmU1ZjdmY2I5ZDlmMGEzYWRkZDhlNzhjNjc5NDFhYjVkMjM4NDQzMDA2ODM3MDA0NTI5XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImZmZjdiY2ZlYzQ0ZmQ5NWYwZVwiLFxuICBcImZmZmZkNGZlZDk4ZWZlOTkyOWNjNGMwMlwiLFxuICBcImZmZmZkNGZlZDk4ZWZlOTkyOWQ5NWYwZTk5MzQwNFwiLFxuICBcImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNFwiLFxuICBcImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNFwiLFxuICBcImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNFwiLFxuICBcImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmZmVkYTBmZWIyNGNmMDNiMjBcIixcbiAgXCJmZmZmYjJmZWNjNWNmZDhkM2NlMzFhMWNcIixcbiAgXCJmZmZmYjJmZWNjNWNmZDhkM2NmMDNiMjBiZDAwMjZcIixcbiAgXCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmMDNiMjBiZDAwMjZcIixcbiAgXCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjZcIixcbiAgXCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjZcIixcbiAgXCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiZDAwMjY4MDAwMjZcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZGVlYmY3OWVjYWUxMzE4MmJkXCIsXG4gIFwiZWZmM2ZmYmRkN2U3NmJhZWQ2MjE3MWI1XCIsXG4gIFwiZWZmM2ZmYmRkN2U3NmJhZWQ2MzE4MmJkMDg1MTljXCIsXG4gIFwiZWZmM2ZmYzZkYmVmOWVjYWUxNmJhZWQ2MzE4MmJkMDg1MTljXCIsXG4gIFwiZWZmM2ZmYzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg0NTk0XCIsXG4gIFwiZjdmYmZmZGVlYmY3YzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg0NTk0XCIsXG4gIFwiZjdmYmZmZGVlYmY3YzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg1MTljMDgzMDZiXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImU1ZjVlMGExZDk5YjMxYTM1NFwiLFxuICBcImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NVwiLFxuICBcImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyY1wiLFxuICBcImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyY1wiLFxuICBcImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMlwiLFxuICBcImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMlwiLFxuICBcImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmMGYwZjBiZGJkYmQ2MzYzNjNcIixcbiAgXCJmN2Y3ZjdjY2NjY2M5Njk2OTY1MjUyNTJcIixcbiAgXCJmN2Y3ZjdjY2NjY2M5Njk2OTY2MzYzNjMyNTI1MjVcIixcbiAgXCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY2MzYzNjMyNTI1MjVcIixcbiAgXCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjVcIixcbiAgXCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjVcIixcbiAgXCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUwMDAwMDBcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZWZlZGY1YmNiZGRjNzU2YmIxXCIsXG4gIFwiZjJmMGY3Y2JjOWUyOWU5YWM4NmE1MWEzXCIsXG4gIFwiZjJmMGY3Y2JjOWUyOWU5YWM4NzU2YmIxNTQyNzhmXCIsXG4gIFwiZjJmMGY3ZGFkYWViYmNiZGRjOWU5YWM4NzU2YmIxNTQyNzhmXCIsXG4gIFwiZjJmMGY3ZGFkYWViYmNiZGRjOWU5YWM4ODA3ZGJhNmE1MWEzNGExNDg2XCIsXG4gIFwiZmNmYmZkZWZlZGY1ZGFkYWViYmNiZGRjOWU5YWM4ODA3ZGJhNmE1MWEzNGExNDg2XCIsXG4gIFwiZmNmYmZkZWZlZGY1ZGFkYWViYmNiZGRjOWU5YWM4ODA3ZGJhNmE1MWEzNTQyNzhmM2YwMDdkXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImZlZTBkMmZjOTI3MmRlMmQyNlwiLFxuICBcImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZFwiLFxuICBcImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNVwiLFxuICBcImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNVwiLFxuICBcImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZFwiLFxuICBcImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZFwiLFxuICBcImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZFwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmZWU2Y2VmZGFlNmJlNjU1MGRcIixcbiAgXCJmZWVkZGVmZGJlODVmZDhkM2NkOTQ3MDFcIixcbiAgXCJmZWVkZGVmZGJlODVmZDhkM2NlNjU1MGRhNjM2MDNcIixcbiAgXCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NlNjU1MGRhNjM2MDNcIixcbiAgXCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDRcIixcbiAgXCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDRcIixcbiAgXCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDFhNjM2MDM3ZjI3MDRcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IHtjdWJlaGVsaXh9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmd9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmcoY3ViZWhlbGl4KDMwMCwgMC41LCAwLjApLCBjdWJlaGVsaXgoLTI0MCwgMC41LCAxLjApKTtcbiIsImltcG9ydCB7Y3ViZWhlbGl4fSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcblxuZXhwb3J0IHZhciB3YXJtID0gaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nKGN1YmVoZWxpeCgtMTAwLCAwLjc1LCAwLjM1KSwgY3ViZWhlbGl4KDgwLCAxLjUwLCAwLjgpKTtcblxuZXhwb3J0IHZhciBjb29sID0gaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nKGN1YmVoZWxpeCgyNjAsIDAuNzUsIDAuMzUpLCBjdWJlaGVsaXgoODAsIDEuNTAsIDAuOCkpO1xuXG52YXIgYyA9IGN1YmVoZWxpeCgpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0KSB7XG4gIGlmICh0IDwgMCB8fCB0ID4gMSkgdCAtPSBNYXRoLmZsb29yKHQpO1xuICB2YXIgdHMgPSBNYXRoLmFicyh0IC0gMC41KTtcbiAgYy5oID0gMzYwICogdCAtIDEwMDtcbiAgYy5zID0gMS41IC0gMS41ICogdHM7XG4gIGMubCA9IDAuOCAtIDAuOSAqIHRzO1xuICByZXR1cm4gYyArIFwiXCI7XG59XG4iLCJpbXBvcnQge3JnYn0gZnJvbSBcImQzLWNvbG9yXCI7XG5cbnZhciBjID0gcmdiKCksXG4gICAgcGlfMV8zID0gTWF0aC5QSSAvIDMsXG4gICAgcGlfMl8zID0gTWF0aC5QSSAqIDIgLyAzO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0KSB7XG4gIHZhciB4O1xuICB0ID0gKDAuNSAtIHQpICogTWF0aC5QSTtcbiAgYy5yID0gMjU1ICogKHggPSBNYXRoLnNpbih0KSkgKiB4O1xuICBjLmcgPSAyNTUgKiAoeCA9IE1hdGguc2luKHQgKyBwaV8xXzMpKSAqIHg7XG4gIGMuYiA9IDI1NSAqICh4ID0gTWF0aC5zaW4odCArIHBpXzJfMykpICogeDtcbiAgcmV0dXJuIGMgKyBcIlwiO1xufVxuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5cbmZ1bmN0aW9uIHJhbXAocmFuZ2UpIHtcbiAgdmFyIG4gPSByYW5nZS5sZW5ndGg7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIHJhbmdlW01hdGgubWF4KDAsIE1hdGgubWluKG4gLSAxLCBNYXRoLmZsb29yKHQgKiBuKSkpXTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmFtcChjb2xvcnMoXCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjVcIikpO1xuXG5leHBvcnQgdmFyIG1hZ21hID0gcmFtcChjb2xvcnMoXCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmZcIikpO1xuXG5leHBvcnQgdmFyIGluZmVybm8gPSByYW1wKGNvbG9ycyhcIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNFwiKSk7XG5cbmV4cG9ydCB2YXIgcGxhc21hID0gcmFtcChjb2xvcnMoXCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjFcIikpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuaW1wb3J0IHttYXh9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtzY2FsZVNlcXVlbnRpYWx9IGZyb20gXCJkMy1zY2FsZVwiO1xuaW1wb3J0ICogYXMgZDNDaHJvbWF0aWMgZnJvbSBcImQzLXNjYWxlLWNocm9tYXRpY1wiO1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb2xvckNoYXJ0KHNodWZmbGU9dHJ1ZSl7XG4gICAgLy8gcmVmIGlsbHVzdHJhdG9yIGNvbG9yIHRoZW1lc1xuICAgIGNvbnN0IGNvbG9ycyA9IFtcbiAgICAgICAgXCJyZ2IoMTAwLDExOCwxMjApXCIsXG4gICAgICAgIFwicmdiKDEwMSwxNDEsMTQ1KVwiLFxuICAgICAgICBcInJnYigxMDMsMTI2LDgyKVwiLFxuICAgICAgICBcInJnYigxMDMsMTg0LDIyMilcIixcbiAgICAgICAgXCJyZ2IoMTA4LDExMCw4OClcIixcblxuICAgICAgICBcInJnYigxMDgsMTQ3LDEyOClcIixcbiAgICAgICAgXCJyZ2IoMTE5LDE0NCwxODIpXCIsXG4gICAgICAgIFwicmdiKDEyNiwxMzAsMTIyKVwiLFxuICAgICAgICBcInJnYigxMzMsMTczLDE4NilcIixcbiAgICAgICAgXCJyZ2IoMTM3LDExNCw5MSlcIixcbiAgICAgICAgXCJyZ2IoMTQ1LDE3MCwxNTcpXCIsXG5cbiAgICAgICAgXCJyZ2IoMTQ1LDIwMSwyMzIpXCIsXG4gICAgICAgIFwicmdiKDE0NywxMDUsNjYpXCIsXG4gICAgICAgIFwicmdiKDE1OSwxMTQsMTE2KVwiLFxuICAgICAgICBcInJnYigxNTksMTg4LDE5MSlcIixcbiAgICAgICAgXCJyZ2IoMTU5LDIyOSwxOTQpXCIsXG4gICAgICAgIFwicmdiKDE2MywxNjMsMTcxKVwiLFxuXG4gICAgICAgIFwicmdiKDE2NCwyMDcsMTkwKVwiLFxuICAgICAgICBcInJnYigxNzIsMTA4LDEzMClcIixcbiAgICAgICAgXCJyZ2IoMTczLDg0LDExNClcIixcbiAgICAgICAgXCJyZ2IoMTc0LDE5NSwyMjIpXCIsXG4gICAgICAgIFwicmdiKDE3NiwyMDQsMTUzKVwiLFxuXG4gICAgICAgIFwicmdiKDE3OSwxODAsMTUwKVwiLFxuICAgICAgICBcInJnYigxODAsMjIwLDIzNylcIixcbiAgICAgICAgXCJyZ2IoMTgzLDIwMiwxMjEpXCIsXG4gICAgICAgIFwicmdiKDE5MiwyMDIsODUpXCIsXG4gICAgICAgIFwicmdiKDE5MywxOTEsMTkzXCIsXG4gICAgICAgIFwicmdiKDE5NSw5NywxMzYpXCIsXG5cbiAgICAgICAgXCJyZ2IoMTk5LDEyMSwxMDIpXCIsXG4gICAgICAgIFwicmdiKDIwNywyMDIsNzYpXCIsXG4gICAgICAgIFwicmdiKDIwOSwyMTksMTg5KVwiLFxuICAgICAgICBcInJnYigyMTMsMjUxLDI1NSlcIixcbiAgICAgICAgXCJyZ2IoMjE1LDk0LDU2KVwiLFxuXG4gICAgICAgIFwicmdiKDIxOCwxMTQsMTI2KVwiLFxuICAgICAgICBcInJnYigyMjMsOTAsNzMpXCIsXG4gICAgICAgIFwicmdiKDIyNCwyNDcsMjE3KVwiLFxuICAgICAgICBcInJnYigyMjcsMjA1LDE2NClcIixcbiAgICAgICAgXCJyZ2IoMjI4LDE2OCwxODUpXCIsXG5cbiAgICAgICAgXCJyZ2IoMjMwLDE3NiwxNTIpXCIsXG4gICAgICAgIFwicmdiKDIzMiwyMTIsMTc1KVwiLFxuICAgICAgICBcInJnYigyMzksMjAxLDc2KVwiLFxuICAgICAgICBcInJnYigyNDAsMTI0LDEwOClcIixcbiAgICAgICAgXCJyZ2IoMjQ2LDIzMiwxNzcpXCIsXG5cbiAgICAgICAgXCJyZ2IoMjQ5LDIyOCwxNzMpXCIsXG4gICAgICAgIFwicmdiKDI1MiwyNDUsMTkxKVwiLFxuICAgICAgICBcInJnYigyNTUsMTg4LDEwMylcIixcbiAgICAgICAgXCJyZ2IoNDUsOTQsMTEwKVwiLFxuICAgICAgICBcInJnYig1MSwxNTMsMjA0KVwiLFxuXG4gICAgICAgIFwicmdiKDYwLDEyNCwxNDUpXCIsXG4gICAgICAgIFwicmdiKDYyLDg3LDE0NSlcIixcbiAgICAgICAgXCJyZ2IoNjUsMTE1LDEyMClcIixcbiAgICAgICAgXCJyZ2IoODksMjE2LDIyOSlcIixcbiAgICAgICAgXCJyZ2IoOTQsMTc4LDE1MylcIixcbiAgICAgICAgXCJyZ2IoOTUsMTI0LDEzNClcIlxuICAgIF07XG5cbiAgICBpZiAoc2h1ZmZsZSkgcmV0dXJuIHNodWZmbGVDb2xvcnMoY29sb3JzKTtcbiAgICByZXR1cm4gY29sb3JzO1xufVxuXG5mdW5jdGlvbiBzaHVmZmxlQ29sb3JzKGFycmF5KSB7XG4gICAgLy8gRmlzaGVyLVlhdGVzIHNodWZmbGVcbiAgICBsZXQgY291bnRlciA9IGFycmF5Lmxlbmd0aDtcblxuICAgIC8vIFdoaWxlIHRoZXJlIGFyZSBlbGVtZW50cyBpbiB0aGUgYXJyYXlcbiAgICB3aGlsZSAoY291bnRlciA+IDApIHtcbiAgICAgICAgLy8gUGljayBhIHJhbmRvbSBpbmRleFxuICAgICAgICBsZXQgaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjb3VudGVyKTtcblxuICAgICAgICAvLyBEZWNyZWFzZSBjb3VudGVyIGJ5IDFcbiAgICAgICAgY291bnRlci0tO1xuXG4gICAgICAgIC8vIEFuZCBzd2FwIHRoZSBsYXN0IGVsZW1lbnQgd2l0aCBpdFxuICAgICAgICBsZXQgdGVtcCA9IGFycmF5W2NvdW50ZXJdO1xuICAgICAgICBhcnJheVtjb3VudGVyXSA9IGFycmF5W2luZGV4XTtcbiAgICAgICAgYXJyYXlbaW5kZXhdID0gdGVtcDtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbi8qKlxuICogZ2V0IGEgY29sb3IgaW50ZXJwb2xhdG9yXG4gKiBAcGFyYW0gbmFtZSB7ZW51bX06IEJ1R24sIE9yUmQuLi4uXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbG9ySW50ZXJwb2xhdG9yKG5hbWUpe1xuICAgIC8vIHJlZmVyZW5jZTogaHR0cHM6Ly9naXRodWIuY29tL2QzL2QzLXNjYWxlLWNocm9tYXRpYy9ibG9iL21hc3Rlci9SRUFETUUubWQjc2VxdWVudGlhbC1tdWx0aS1odWVcbiAgICBjb25zdCBpbnRlcnBvbGF0b3JzID0ge1xuICAgICAgICBCdUduOiBkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZUJ1R24sXG4gICAgICAgIE9yUmQ6IGQzQ2hyb21hdGljLmludGVycG9sYXRlT3JSZCxcbiAgICAgICAgUHVCdTogZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVQdUJ1LFxuICAgICAgICBZbEduQnU6IGQzQ2hyb21hdGljLmludGVycG9sYXRlWWxHbkJ1LFxuICAgICAgICBCbHVlczogZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVCbHVlcyxcbiAgICAgICAgT3JhbmdlczogZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVPcmFuZ2VzLFxuICAgICAgICBHcmVlbnM6IGQzQ2hyb21hdGljLmludGVycG9sYXRlR3JlZW5zLFxuICAgICAgICBQdXJwbGVzOiBkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZVB1cnBsZXMsXG4gICAgICAgIFJlZHM6IGQzQ2hyb21hdGljLmludGVycG9sYXRlUmVkcyxcbiAgICAgICAgR3JleXM6IGQzQ2hyb21hdGljLmludGVycG9sYXRlR3JleXMsXG4gICAgICAgIEdyYXlzOiBkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZUdyZXlzXG4gICAgfTtcbiAgICBpZiAoIWludGVycG9sYXRvcnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgY29uc3QgZXJyID0gXCJVbnJlY29nbml6ZWQgY29sb3I6IFwiICsgbmFtZTtcbiAgICAgICAgYWxlcnQoZXJyKTtcbiAgICAgICAgdGhyb3coZXJyKTtcbiAgICB9XG4gICAgcmV0dXJuIGludGVycG9sYXRvcnNbbmFtZV07XG59XG5cbi8qKlxuICogcmVmZXJlbmNlOiBodHRwczovL2dpdGh1Yi5jb20vZDMvZDMtc2NhbGVcbiAqIHJlZmVyZW5jZTogaHR0cDovL2JsLm9ja3Mub3JnL2N1cnJhbi8zMDk0YjM3ZTYzYjkxOGJhYjBhMDY3ODdlMTYxNjA3YlxuICogc2NhbGVTZXF1ZW50aWFsIG1hcHMgdGhlIGNvbnRpbnVvdXMgZG9tYWluIHRvIGEgY29udGludW91cyBjb2xvciBzY2FsZVxuICogQHBhcmFtIGRhdGEge0xpc3R9IG9mIG51bWVyaWNhbCBkYXRhXG4gKiBAcGFyYW0gY29sb3JzIHtTdHJpbmd9IGEgY29sb3IgbmFtZSB0aGF0IGlzIGF2YWlsYWJsZSBpbiBnZXRDb2xvckludGVycG9sYXRvcigpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb2xvclNjYWxlKGRhdGEsIGNvbG9ycz1cIllsR25CdVwiLCBkbWluID0gMCkge1xuICAgIC8vIGxldCBkbWF4ID0gTWF0aC5yb3VuZChtYXgoZGF0YSkpO1xuICAgIGxldCBkbWF4ID0gbWF4KGRhdGEpO1xuICAgIGNvbnN0IHNjYWxlID0gc2NhbGVTZXF1ZW50aWFsKGdldENvbG9ySW50ZXJwb2xhdG9yKGNvbG9ycykpO1xuICAgIHNjYWxlLmRvbWFpbihbZG1pbiwgZG1heF0pO1xuICAgIHJldHVybiBzY2FsZTtcbn1cblxuLyoqXG4gKiBEcmF3IGEgY29sb3IgbGVnZW5kIGJhci5cbiAqIERlcGVuZGVuY2llczogZXhwcmVzc2lvbk1hcC5jc3NcbiAqIEBwYXJhbSB0aXRsZSB7U3RyaW5nfVxuICogQHBhcmFtIGRvbSB7b2JqZWN0fSBEMyBkb20gb2JqZWN0XG4gKiBAcGFyYW0gc2NhbGUge09iamVjdH0gRDMgc2NhbGUgb2YgdGhlIGNvbG9yXG4gKiBAcGFyYW0gY29uZmlnIHtPYmplY3R9IHdpdGggYXR0cjogeCwgeVxuICogQHBhcmFtIHVzZUxvZyB7Qm9vbGVhbn1cbiAqIEBwYXJhbSBvcmllbnRhdGlvbiB7ZW51bX0gaCBvciB2LCBpLmUuIGhvcml6b250YWwgb3IgdmVydGljYWxcbiAqIEBwYXJhbSBjZWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3Q29sb3JMZWdlbmQodGl0bGUsIGRvbSwgc2NhbGUsIGNvbmZpZywgdXNlTG9nLCB0aWNrcz0xMCwgYmFzZT0xMCwgY2VsbD17aDoxMCwgdzo0MH0sIG9yaWVudGF0aW9uPVwiaFwiKXtcbiAgICBsZXQgcmFuZ2UgPSBbLi4uQXJyYXkodGlja3MrMSkua2V5cygpXTtcbiAgICBsZXQgaW50ZXJ2YWwgPSBzY2FsZS5kb21haW4oKVsxXS90aWNrcztcbiAgICBjb25zdCBkYXRhID0gcmFuZ2UubWFwKChkKT0+ZCppbnRlcnZhbCk7XG5cbiAgICAvLyBsZWdlbmQgZ3JvdXBzXG4gICAgY29uc3QgbGVnZW5kcyA9IGRvbS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke2NvbmZpZy54fSwgJHtjb25maWcueX0pYClcbiAgICAgICAgICAgICAgICAgICAgLnNlbGVjdEFsbChcIi5sZWdlbmRcIikuZGF0YShkYXRhKTtcblxuICAgIGNvbnN0IGcgPSBsZWdlbmRzLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwibGVnZW5kXCIsIHRydWUpO1xuXG4gICAgaWYgKG9yaWVudGF0aW9uID09ICdoJyl7XG4gICAgICAgICAvLyBsZWdlbmQgdGl0bGVcbiAgICAgICAgZG9tLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJjb2xvci1sZWdlbmRcIilcbiAgICAgICAgICAgIC50ZXh0KHRpdGxlKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIC0xMClcbiAgICAgICAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgXCJlbmRcIilcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBjZWxsLmgpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7Y29uZmlnLnh9LCAke2NvbmZpZy55fSlgKTtcblxuICAgICAgICAvLyB0aGUgY29sb3IgbGVnZW5kXG4gICAgICAgIGcuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIChkLCBpKSA9PiBjZWxsLncqaSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCA1KVxuICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBjZWxsLncpXG4gICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBjZWxsLmgpXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIHNjYWxlKTtcblxuICAgICAgICBnLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJjb2xvci1sZWdlbmRcIilcbiAgICAgICAgICAgIC50ZXh0KChkKSA9PiB1c2VMb2c/KE1hdGgucG93KGJhc2UsIGQpKS50b1ByZWNpc2lvbigyKTpkLnRvUHJlY2lzaW9uKDIpKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIChkLCBpKSA9PiBjZWxsLncgKiBpKVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgICAvLyBsZWdlbmQgdGl0bGVcbiAgICAgICAgZG9tLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJjb2xvci1sZWdlbmRcIilcbiAgICAgICAgICAgIC50ZXh0KHRpdGxlKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIDUpXG4gICAgICAgICAgICAuYXR0cihcInRleHQtYW5jaG9yXCIsIFwic3RhcnRcIilcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAwKVxuICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke2NvbmZpZy54fSwgJHtjb25maWcueSArIGNlbGwuaCAqIGRhdGEubGVuZ3RofSlyb3RhdGUoOTApYCk7XG5cbiAgICAgICAgZy5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgMClcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAoZCwgaSkgPT4gY2VsbC5oKmkpXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIGNlbGwudylcbiAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGNlbGwuaClcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgc2NhbGUpO1xuXG4gICAgICAgIGcuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImNvbG9yLWxlZ2VuZFwiKVxuICAgICAgICAgICAgLnRleHQoKGQpID0+IHVzZUxvZz8oTWF0aC5wb3coYmFzZSwgZCktMSkudG9QcmVjaXNpb24oMik6ZC50b1ByZWNpc2lvbigyKSlcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCAxNSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAoZCwgaSkgPT4gY2VsbC5oICogaSArIChjZWxsLmgvMikpO1xuICAgIH1cblxuXG5cbn0iLCJpbXBvcnQge2xpbmVhcmlzaH0gZnJvbSBcIi4vbGluZWFyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNlcXVlbnRpYWwoaW50ZXJwb2xhdG9yKSB7XG4gIHZhciB4MCA9IDAsXG4gICAgICB4MSA9IDEsXG4gICAgICBrMTAgPSAxLFxuICAgICAgY2xhbXAgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgdmFyIHQgPSAoeCAtIHgwKSAqIGsxMDtcbiAgICByZXR1cm4gaW50ZXJwb2xhdG9yKGNsYW1wID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdCkpIDogdCk7XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeDAgPSArX1swXSwgeDEgPSArX1sxXSwgazEwID0geDAgPT09IHgxID8gMCA6IDEgLyAoeDEgLSB4MCksIHNjYWxlKSA6IFt4MCwgeDFdO1xuICB9O1xuXG4gIHNjYWxlLmNsYW1wID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsYW1wID0gISFfLCBzY2FsZSkgOiBjbGFtcDtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0b3IgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaW50ZXJwb2xhdG9yID0gXywgc2NhbGUpIDogaW50ZXJwb2xhdG9yO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gc2VxdWVudGlhbChpbnRlcnBvbGF0b3IpLmRvbWFpbihbeDAsIHgxXSkuY2xhbXAoY2xhbXApO1xuICB9O1xuXG4gIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuLyoqXG4gKiBDcmVhdGUgYSB0b29sYmFyXG4gKiBUaGlzIGNsYXNzIHVzZXMgYSBsb3Qgb2YgalF1ZXJ5IGZvciBkb20gZWxlbWVudCBtYW5pcHVsYXRpb25cbiAqL1xuXG5pbXBvcnQge3NlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtwYXJzZUNzc1N0eWxlc30gZnJvbSBcIi4vdXRpbHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9vbGJhciB7XG4gICAgY29uc3RydWN0b3IoZG9tSWQsIHRvb2x0aXA9dW5kZWZpbmVkLCB2ZXJ0aWNhbD1mYWxzZSl7XG4gICAgICAgICQoYCMke2RvbUlkfWApLnNob3coKTsgLy8gaWYgaGlkZGVuXG5cbiAgICAgICAgLy8gYWRkIGEgbmV3IGJhcmdyb3VwIGRpdiB0byBkb21JRCB3aXRoIGJvb3RzdHJhcCBidXR0b24gY2xhc3Nlc1xuICAgICAgICBjb25zdCBidG5DbGFzc2VzID0gdmVydGljYWw/J2J0bi1ncm91cC12ZXJ0aWNhbCBidG4tZ3JvdXAtc20nOiAnYnRuLWdyb3VwIGJ0bi1ncm91cC1zbSc7XG4gICAgICAgIHRoaXMuYmFyID0gJCgnPGRpdi8+JykuYWRkQ2xhc3MoYnRuQ2xhc3NlcykuYXBwZW5kVG8oYCMke2RvbUlkfWApO1xuICAgICAgICB0aGlzLmJ1dHRvbnMgPSB7fTtcbiAgICAgICAgdGhpcy50b29sdGlwID0gdG9vbHRpcDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBkb3dubG9hZCBidXR0b24gZm9yIFNWR1xuICAgICAqIEBwYXJhbSBpZCB7U3RyaW5nfSB0aGUgYnV0dG9uIGRvbSBJRFxuICAgICAqIEBwYXJhbSBzdmdJZCB7U3RyaW5nfSB0aGUgU1ZHIGRvbSBJRCB0byBncmFiIGFuZCBkb3dubG9hZFxuICAgICAqIEBwYXJhbSBvdXRmaWxlTmFtZSB7U3RyaW5nfSB0aGUgZG93bmxvYWQgZmlsZSBuYW1lXG4gICAgICogQHBhcmFtIGNsb25lSWQge1N0cmluZ30gdGhlIGNsb25lZCBTVkcgZG9tIElEXG4gICAgICogQHBhcmFtIGljb24ge1N0cmluZ30gYSBmb250YXdlc29tZSdzIGljb24gY2xhc3MgbmFtZVxuICAgICAqL1xuICAgIGNyZWF0ZURvd25sb2FkU3ZnQnV0dG9uKGlkLCBzdmdJZCwgb3V0ZmlsZU5hbWUsIGNsb25lSWQsIGljb249J2ZhLWRvd25sb2FkJyl7XG4gICAgICAgIGNvbnN0ICRidXR0b24gPSB0aGlzLmNyZWF0ZUJ1dHRvbihpZCwgaWNvbik7XG4gICAgICAgIHNlbGVjdChgIyR7aWR9YClcbiAgICAgICAgICAgIC5vbignY2xpY2snLCAoKT0+e1xuICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRTdmcoc3ZnSWQsIG91dGZpbGVOYW1lLCBjbG9uZUlkKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAub24oJ21vdXNlb3ZlcicsICgpPT57XG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwLnNob3coXCJEb3dubG9hZFwiKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAub24oJ21vdXNlb3V0JywgKCk9PntcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAuaGlkZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVzZXRCdXR0b24oaWQsIGNhbGxiYWNrLCBpY29uPSdmYS1leHBhbmQtYXJyb3dzLWFsdCcpe1xuICAgICAgICBjb25zdCAkYnV0dG9uID0gdGhpcy5jcmVhdGVCdXR0b24oaWQsIGljb24pO1xuICAgICAgICBzZWxlY3QoYCMke2lkfWApXG4gICAgICAgICAgICAub24oJ2NsaWNrJywgY2FsbGJhY2spXG4gICAgICAgICAgICAub24oJ21vdXNlb3ZlcicsICgpPT57XG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwLnNob3coXCJSZXNldCB0aGUgc2NhbGVzXCIpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5vbignbW91c2VvdXQnLCAoKT0+e1xuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcC5oaWRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjcmVhdGUgYSBidXR0b24gdG8gdGhlIHRvb2xiYXJcbiAgICAgKiBAcGFyYW0gaWQge1N0cmluZ30gdGhlIGJ1dHRvbidzIGlkXG4gICAgICogQHBhcmFtIGljb24ge1N0cmluZ30gYSBmb250YXdlc29tZSBpY29uIGNsYXNzXG4gICAgICogRGVwZW5kZW5jaWVzOiBCb290c3RyYXAsIGpRdWVyeSwgRm9udGF3ZXNvbWVcbiAgICAgKi9cbiAgICBjcmVhdGVCdXR0b24oaWQsIGljb249J2ZhLWRvd25sb2FkJyl7XG4gICAgICAgIGNvbnN0ICRidXR0b24gPSAkKCc8YS8+JykuYXR0cignaWQnLCBpZClcbiAgICAgICAgICAgIC5hZGRDbGFzcygnYnRuIGJ0bi1kZWZhdWx0JykuYXBwZW5kVG8odGhpcy5iYXIpO1xuICAgICAgICAkKCc8aS8+JykuYWRkQ2xhc3MoYGZhICR7aWNvbn1gKS5hcHBlbmRUbygkYnV0dG9uKTtcbiAgICAgICAgdGhpcy5idXR0b25zW2lkXSA9ICRidXR0b247XG4gICAgICAgIHJldHVybiAkYnV0dG9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGF0dGFjaCBhIHRvb2x0aXAgZG9tIHdpdGggdGhlIHRvb2xiYXJcbiAgICAgKiBAcGFyYW0gdG9vbHRpcCB7VG9vbHRpcH1cbiAgICAgKi9cbiAgICBhdHRhY2hUb29sdGlwKHRvb2x0aXApe1xuICAgICAgICB0aGlzLnRvb2x0aXAgPSB0b29sdGlwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERvd25sb2FkIFNWRyBvYmpcbiAgICAgKiBAcGFyYW0gc3ZnSWQge1N0cmluZ30gdGhlIFNWRyBkb20gSURcbiAgICAgKiBAcGFyYW0gZmlsZU5hbWUge1N0cmluZ30gdGhlIG91dHB1dCBmaWxlIG5hbWVcbiAgICAgKiBAcGFyYW0gY2xvbmVJZCB7U3RyaW5nfSB0aGUgdGVtcG9yYXJ5IGRvbSBJRCB0byBjb3B5IHRoZSBTVkcgdG9cbiAgICAgKiBEZXBlbmRlbmNpZXM6IEZpbGVTYXZlclxuICAgICAqL1xuICAgIGRvd25sb2FkU3ZnKHN2Z0lkLCBmaWxlTmFtZSwgY2xvbmVJZCl7XG4gICAgICAgIC8vIGxldCBzdmdPYmogPSAkKCQoJChgJHtcIiNcIiArc3ZnSWR9IHN2Z2ApKVswXSk7IC8vIGNvbXBsaWNhdGVkIGpRdWVyeSB0byBnZXQgdG8gdGhlIFNWRyBvYmplY3RcbiAgICAgICAgbGV0IHN2Z09iaiA9ICQoJCgkKGAke1wiI1wiICtzdmdJZH1gKSlbMF0pO1xuICAgICAgICBsZXQgJHN2Z0NvcHkgPSBzdmdPYmouY2xvbmUoKVxuICAgICAgICAuYXR0cihcInZlcnNpb25cIiwgXCIxLjFcIilcbiAgICAgICAgLmF0dHIoXCJ4bWxuc1wiLCBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIpO1xuXG4gICAgICAgIC8vIHBhcnNlIGFuZCBhZGQgYWxsIHRoZSBDU1Mgc3R5bGluZyB1c2VkIGJ5IHRoZSBTVkdcbiAgICAgICAgbGV0IHN0eWxlcyA9IHBhcnNlQ3NzU3R5bGVzKHN2Z09iai5nZXQoKSk7XG4gICAgICAgICRzdmdDb3B5LnByZXBlbmQoc3R5bGVzKTtcblxuICAgICAgICAkKFwiI1wiICsgY2xvbmVJZCkuaHRtbCgnJykuaGlkZSgpOyAvLyBtYWtlIHN1cmUgdGhlIGNvcHlJRCBpcyBpbnZpc2libGVcbiAgICAgICAgbGV0IHN2Z0h0bWwgPSAkKGAjJHtjbG9uZUlkfWApLmFwcGVuZCgkc3ZnQ29weSkuaHRtbCgpO1xuXG4gICAgICAgIGxldCBzdmdCbG9iID0gbmV3IEJsb2IoW3N2Z0h0bWxdLCB7dHlwZTogXCJpbWFnZS9zdmcreG1sXCJ9KTtcbiAgICAgICAgc2F2ZUFzKHN2Z0Jsb2IsIGZpbGVOYW1lKTsgLy8gdGhpcyBpcyBhIEZpbGVTYXZlciBmdW5jdGlvbi4uLi5cblxuICAgICAgICAvLyBjbGVhciB0aGUgdGVtcCBkb3dubG9hZCBkaXZcbiAgICAgICAgJChgIyR7Y2xvbmVJZH1gKS5odG1sKCcnKS5oaWRlKCk7XG4gICAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IMKpIDIwMTUgLSAyMDE4IFRoZSBCcm9hZCBJbnN0aXR1dGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSAoaHR0cHM6Ly9naXRodWIuY29tL2Jyb2FkaW5zdGl0dXRlL2d0ZXgtdml6L2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQpXG4gKi9cbmltcG9ydCB7c2VsZWN0LCBldmVudH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb29sdGlwIHtcbiAgICBjb25zdHJ1Y3RvcihpZCwgdmVyYm9zZT1mYWxzZSwgb2Zmc2V0WD0zMCwgb2Zmc2V0WT0tNDAsIGR1cmF0aW9uPTEwMCl7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgdGhpcy52ZXJib3NlID0gdmVyYm9zZTtcbiAgICAgICAgdGhpcy5vZmZzZXRYID0gb2Zmc2V0WDtcbiAgICAgICAgdGhpcy5vZmZzZXRZID0gb2Zmc2V0WTtcbiAgICAgICAgdGhpcy5kdXJhdGlvbiA9IGR1cmF0aW9uO1xuICAgIH1cblxuICAgIHNob3coaW5mbykge1xuICAgICAgICBpZih0aGlzLnZlcmJvc2UpIGNvbnNvbGUubG9nKGluZm8pO1xuICAgICAgICB0aGlzLmVkaXQoaW5mbyk7XG4gICAgICAgIHRoaXMubW92ZSgpO1xuICAgICAgICBzZWxlY3QoXCIjXCIgKyB0aGlzLmlkKVxuICAgICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBcImlubGluZVwiKVxuICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLmR1cmF0aW9uKHRoaXMuZHVyYXRpb24pXG4gICAgICAgICAgICAuc3R5bGUoXCJvcGFjaXR5XCIsIDEuMClcblxuICAgIH1cblxuICAgIGhpZGUoKSB7XG4gICAgICAgIHNlbGVjdChcIiNcIiArIHRoaXMuaWQpXG4gICAgICAgICAgICAudHJhbnNpdGlvbigpXG4gICAgICAgICAgICAuZHVyYXRpb24odGhpcy5kdXJhdGlvbilcbiAgICAgICAgICAgIC5zdHlsZShcIm9wYWNpdHlcIiwgMC4wKTtcbiAgICAgICAgdGhpcy5lZGl0KFwiXCIpO1xuICAgIH1cblxuICAgIG1vdmUoeCA9IGV2ZW50LnBhZ2VYLCB5ID0gZXZlbnQucGFnZVkpIHtcbiAgICAgICAgaWYgKHRoaXMudmVyYm9zZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coeCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh5KTtcbiAgICAgICAgfVxuICAgICAgICB4ID0geCArIHRoaXMub2Zmc2V0WDsgLy8gVE9ETzogZ2V0IHJpZCBvZiB0aGUgaGFyZC1jb2RlZCBhZGp1c3RtZW50XG4gICAgICAgIHkgPSAoeSArIHRoaXMub2Zmc2V0WSk8MD8xMDp5K3RoaXMub2Zmc2V0WTtcbiAgICAgICAgY29uc3QgdCA9IHNlbGVjdCgnIycrdGhpcy5pZClcbiAgICAgICAgICAgIC5zdHlsZShcImxlZnRcIiwgYCR7eH1weGApXG4gICAgICAgICAgICAuc3R5bGUoXCJ0b3BcIiwgYCR7eX1weGApXG4gICAgfVxuXG4gICAgZWRpdChpbmZvKSB7XG4gICAgICAgIHNlbGVjdChcIiNcIiArIHRoaXMuaWQpXG4gICAgICAgICAgICAuaHRtbChpbmZvKVxuICAgIH1cbn1cblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuaW1wb3J0IHtzZWxlY3QsIHNlbGVjdEFsbH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtzY2FsZUJhbmR9IGZyb20gXCJkMy1zY2FsZVwiO1xuaW1wb3J0IHtuZXN0fSBmcm9tIFwiZDMtY29sbGVjdGlvblwiO1xuaW1wb3J0IHt0cmFuc2l0aW9ufSBmcm9tIFwiZDMtdHJhbnNpdGlvblwiO1xuXG5pbXBvcnQge3NldENvbG9yU2NhbGUsIGRyYXdDb2xvckxlZ2VuZH0gZnJvbSBcIi4vY29sb3JzXCI7XG5pbXBvcnQgVG9vbGJhciBmcm9tIFwiLi9Ub29sYmFyXCI7XG5pbXBvcnQgVG9vbHRpcCBmcm9tIFwiLi9Ub29sdGlwXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhlYXRtYXAge1xuICAgIC8qKlxuICAgICAqIGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIGRhdGEge0xpc3R9LCBhIGxpc3Qgb2Ygb2JqZWN0cyB3aXRoIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczogeDogdGhlIHggbGFiZWwsIHk6IHRoZSB5IGxhYmVsXG4gICAgICAgIHZhbHVlOiB0aGUgcmVuZGVyZWQgbnVtZXJpY2FsIHZhbHVlICh0cmFuc2Zvcm1lZClcbiAgICAgICAgZGlzcGxheVZhbHVlOiBkaXNwbGF5IG51bWVyaWNhbCB2YWx1ZVxuICAgICAqIEBwYXJhbSB1c2VMb2cge0Jvb2xlYW59IHBlcmZvcm1zIGxvZyB0cmFuc2Zvcm1hdGlvblxuICAgICAqIEBwYXJhbSBjb2xvclNjaGVtZSB7U3RyaW5nfTogcmVjb2duaXplZCB0ZXJtcyBpbiBDb2xvcnM6Z2V0Q29sb3JJbnRlcnBvbGF0b3JcbiAgICAgKiBAcGFyYW0gciB7SW50ZWdlcn06IGNlbGwgY29ybmVyIHJhZGl1c1xuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGRhdGEsIHVzZUxvZz10cnVlLCBsb2dCYXNlPTEwLCBjb2xvclNjaGVtZT1cIllsR25CdVwiLCByPTIsIHRvb2x0aXBJZD1cImhlYXRtYXBUb29sdGlwXCIpe1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLnVzZUxvZyA9IHVzZUxvZztcbiAgICAgICAgdGhpcy5sb2dCYXNlID0gbG9nQmFzZTtcbiAgICAgICAgdGhpcy5udWxsQ29sb3IgPSBcIiNlNmU2ZTZcIjtcbiAgICAgICAgdGhpcy5jb2xvclNjYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnhMaXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnlMaXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnhTY2FsZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy55U2NhbGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuciA9IHI7XG4gICAgICAgIHRoaXMuY29sb3JTY2hlbWUgPSBjb2xvclNjaGVtZTtcblxuICAgICAgICAvLyBwZXJpcGhlcmFsIGZlYXR1cmVzXG4gICAgICAgIC8vLyBUb29sdGlwXG4gICAgICAgIC8vLyBjcmVhdGUgdGhlIHRvb2x0aXAgRElWXG4gICAgICAgIGlmICgkKGAjJHt0b29sdGlwSWR9YCkubGVuZ3RoID09IDApICQoJzxkaXYvPicpLmF0dHIoJ2lkJywgdG9vbHRpcElkKS5hcHBlbmRUbygkKCdib2R5JykpO1xuICAgICAgICB0aGlzLnRvb2x0aXAgPSBuZXcgVG9vbHRpcCh0b29sdGlwSWQpO1xuICAgICAgICBzZWxlY3QoYCMke3Rvb2x0aXBJZH1gKS5jbGFzc2VkKCdoZWF0bWFwLXRvb2x0aXAnLCB0cnVlKTtcblxuICAgICAgICB0aGlzLnRvb2xiYXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIHRoZSB0b29sYmFyIHBhbmVsXG4gICAgICogQHBhcmFtIGRvbUlkIHtTdHJpbmd9IHRoZSB0b29sYmFyJ3MgZG9tIElEXG4gICAgICogQHBhcmFtIHRvb2x0aXAge1Rvb2x0aXB9XG4gICAgICogQHJldHVybnMge1Rvb2xiYXJ9XG4gICAgICovXG5cbiAgICBjcmVhdGVUb29sYmFyKGRvbUlkLCB0b29sdGlwKXtcbiAgICAgICAgdGhpcy50b29sYmFyID0gbmV3IFRvb2xiYXIoZG9tSWQsIHRvb2x0aXApO1xuICAgICAgICByZXR1cm4gdGhpcy50b29sYmFyO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogZHJhdyBjb2xvciBsZWdlbmQgZm9yIHRoZSBoZWF0IG1hcFxuICAgICAqIEBwYXJhbSBkb20ge1NlbGVjdGlvbn0gYSBkMyBzZWxlY3Rpb24gb2JqZWN0XG4gICAgICogQHBhcmFtIGxlZ2VuZENvbmZpZyB7T2JqZWN0fSB3aXRoIGF0dHI6IHgsIHlcbiAgICAgKi9cblxuICAgIGRyYXdDb2xvckxlZ2VuZChkb20sIGxlZ2VuZENvbmZpZz17eDowLCB5OjB9LCB0aWNrcz01KXtcbiAgICAgICAgZHJhd0NvbG9yTGVnZW5kKHRoaXMuZGF0YVswXS51bml0fHxcIlZhbHVlXCIsIGRvbSwgdGhpcy5jb2xvclNjYWxlLCBsZWdlbmRDb25maWcsIHRoaXMudXNlTG9nLCB0aWNrcywgdGhpcy5sb2dCYXNlKTtcbiAgICB9XG5cbiAgICAgLyoqXG4gICAgICogcmVkcmF3cyB0aGUgaGVhdG1hcDogd2hlbiB0aGUgeGxpc3QgYW5kIHlsaXN0IGFyZSBjaGFuZ2VkLCByZWRyYXcgdGhlIGhlYXRtYXBcbiAgICAgKiBAcGFyYW0gZG9tIHtTZWxlY3Rpb259IGEgZDMgc2VsZWN0aW9uIG9iamVjdFxuICAgICAqIEBwYXJhbSB4TGlzdCB7TGlzdH0gYSBsaXN0IG9mIHggbGFiZWxzXG4gICAgICogQHBhcmFtIHlMaXN0IHtMaXN0fSBhIGxpc3Qgb2YgeSBsYWJlbHNcbiAgICAgKiBAcGFyYW0gZGltZW5zaW9ucyB7RGljdGlvbmFyeX0ge3c6SW50ZWdlciwgaDppbnRlZ2VyfSB3aXRoIHR3byBhdHRyaWJ1dGVzOiB3IGFuZCBoXG4gICAgICogQHBhcmFtIGFuZ2xlIHtJbnRlZ2VyfSBmb3IgdGhlIHkgdGV4dCBsYWJlbHNcbiAgICAgKi9cbiAgICByZWRyYXcoZG9tLCB4TGlzdCwgeUxpc3QsIGRpbWVuc2lvbnM9e3c6MTAwMCwgaDoxMDAwfSwgYW5nbGU9MzApe1xuICAgICAgICB0aGlzLl9zZXRYTGlzdChkaW1lbnNpb25zLncsIHhMaXN0KTtcbiAgICAgICAgdGhpcy5fc2V0WUxpc3QoZGltZW5zaW9ucy5oLCB5TGlzdCk7XG4gICAgICAgIHRoaXMuZHJhdyhkb20sIGRpbWVuc2lvbnMsIGFuZ2xlKTtcbiAgICB9XG5cbiAgICBsb2codil7XG4gICAgICAgIGNvbnN0IGFkanVzdCA9IDE7XG4gICAgICAgIHJldHVybiB0aGlzLmxvZ0Jhc2UgPT0gMj8gTWF0aC5sb2cyKE51bWJlcih2K2FkanVzdCkpOk1hdGgubG9nMTAoTnVtYmVyKHYrYWRqdXN0KSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkcmF3cyB0aGUgaGVhdG1hcFxuICAgICAqIEBwYXJhbSBkb20ge1NlbGVjdGlvbn1cbiAgICAgKiBAcGFyYW0gZGltZW5zaW9ucyB7RGljdGlvbmFyeX0ge3c6SW50ZWdlciwgaDppbnRlZ2VyfSBvZiB0aGUgaGVhdG1hcFxuICAgICAqIEBwYXJhbSBhbmdsZSB7SW50ZWdlcn0gZm9yIHRoZSB5IHRleHQgbGFiZWxzXG4gICAgICogQHBhcmFtIHVzZU51bGxDb2xvciB7Qm9vbGVhbn0gd2hldGhlciB0byByZW5kZXIgbnVsbCB2YWx1ZXMgd2l0aCB0aGUgcHJlLWRlZmluZWQgbnVsbCBjb2xvclxuICAgICAqL1xuXG4gICAgZHJhdyhkb20sIGRpbWVuc2lvbnM9e3c6MTAwMCwgaDo2MDB9LCBhbmdsZT0zMCwgdXNlTnVsbENvbG9yPXRydWUsIGNvbHVtbkxhYmVsUG9zQWRqdXN0PW51bGwpe1xuXG4gICAgICAgIGlmICh0aGlzLnhMaXN0ID09PSB1bmRlZmluZWQpIHRoaXMuX3NldFhMaXN0KGRpbWVuc2lvbnMudyk7XG4gICAgICAgIGlmICh0aGlzLnlMaXN0ID09PSB1bmRlZmluZWQpIHRoaXMuX3NldFlMaXN0KGRpbWVuc2lvbnMuaCk7XG4gICAgICAgIGlmICh0aGlzLmNvbG9yU2NhbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGV0IHVzZUxvZyA9IHRoaXMudXNlTG9nO1xuICAgICAgICAgICAgbGV0IGRhdGEgPSB0aGlzLmRhdGEubWFwKChkKT0+dXNlTG9nP3RoaXMubG9nKGQudmFsdWUpOmQudmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5jb2xvclNjYWxlID0gc2V0Q29sb3JTY2FsZShkYXRhLCB0aGlzLmNvbG9yU2NoZW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRleHQgbGFiZWxzXG4gICAgICAgIC8vIGRhdGEgam9pblxuICAgICAgICBjb25zdCB4TGFiZWxzID0gZG9tLnNlbGVjdEFsbChcIi5leHAtbWFwLXhsYWJlbFwiKVxuICAgICAgICAgICAgLmRhdGEodGhpcy54TGlzdCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIG9sZCBlbGVtZW50c1xuICAgICAgICBjb25zdCBZID0gY29sdW1uTGFiZWxQb3NBZGp1c3Q9PW51bGw/dGhpcy55U2NhbGUucmFuZ2UoKVsxXSArICh0aGlzLnlTY2FsZS5iYW5kd2lkdGgoKSAqIDIpOnRoaXMueVNjYWxlLnJhbmdlKClbMV0rY29sdW1uTGFiZWxQb3NBZGp1c3Q7XG4gICAgICAgIGNvbnN0IGFkanVzdCA9IDU7XG4gICAgICAgIHhMYWJlbHMuYXR0cihcInRyYW5zZm9ybVwiLCAoZCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCB4ID0gdGhpcy54U2NhbGUoZCkgKyBhZGp1c3Q7XG4gICAgICAgICAgICAgICAgbGV0IHkgPSBZO1xuICAgICAgICAgICAgICAgIHJldHVybiBgdHJhbnNsYXRlKCR7eH0sICR7eX0pIHJvdGF0ZSgke2FuZ2xlfSlgO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyAuYXR0cihcImNsYXNzXCIsIChkLCBpKSA9PiBgZXhwLW1hcC14bGFiZWwgeCR7aX1gKTtcblxuXG4gICAgICAgIC8vIGVudGVycyBuZXcgZWxlbWVudHNcbiAgICAgICAgeExhYmVscy5lbnRlcigpLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgKGQsIGkpID0+IGBleHAtbWFwLXhsYWJlbCB4JHtpfWApXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgMClcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAwKVxuICAgICAgICAgICAgLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJzdGFydFwiKVxuICAgICAgICAgICAgLnN0eWxlKFwiY3Vyc29yXCIsIFwiZGVmYXVsdFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgKGQpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgeCA9IHRoaXMueFNjYWxlKGQpICsgYWRqdXN0O1xuICAgICAgICAgICAgICAgIGxldCB5ID0gWTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYHRyYW5zbGF0ZSgke3h9LCAke3l9KSByb3RhdGUoJHthbmdsZX0pYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAubWVyZ2UoeExhYmVscylcbiAgICAgICAgICAgIC50ZXh0KChkKSA9PiBkKTtcblxuICAgICAgICAvLyBleGl0IC0tIHJlbW92ZXMgb2xkIGVsZW1lbnRzIGFzIG5lZWRlZFxuICAgICAgICB4TGFiZWxzLmV4aXQoKS5yZW1vdmUoKTtcblxuICAgICAgICBjb25zdCB5TGFiZWxzID0gZG9tLnNlbGVjdEFsbChcIi5leHAtbWFwLXlsYWJlbFwiKVxuICAgICAgICAgICAgLmRhdGEodGhpcy55TGlzdClcbiAgICAgICAgICAgIC5lbnRlcigpLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC50ZXh0KChkKSA9PiBkKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIHRoaXMueFNjYWxlLnJhbmdlKClbMV0gKyA1KVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIChkKSA9PiB0aGlzLnlTY2FsZShkKSArIDEwKVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCAoZCwgaSkgPT4gYGV4cC1tYXAteWxhYmVsIHkke2l9YClcbiAgICAgICAgICAgIC5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwic3RhcnRcIilcbiAgICAgICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIilcbiAgICAgICAgICAgIC5vbignY2xpY2snLCAoZCkgPT4ge1xuICAgICAgICAgICAgICAgIGFsZXJ0KGAke2R9IGlzIGNsaWNrZWQuIFRvIGJlIGltcGxlbWVudGVkYClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAub24oJ21vdXNlb3ZlcicsIGZ1bmN0aW9uKGQpe1xuICAgICAgICAgICAgICAgIHNlbGVjdCh0aGlzKVxuICAgICAgICAgICAgICAgICAgICAuY2xhc3NlZCgnbm9ybWFsJywgZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5jbGFzc2VkKCdoaWdobGlnaHRlZCcsIHRydWUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5vbignbW91c2VvdXQnLCBmdW5jdGlvbihkKXtcbiAgICAgICAgICAgICAgICBzZWxlY3QodGhpcylcbiAgICAgICAgICAgICAgICAgICAgLmNsYXNzZWQoJ25vcm1hbCcsIHRydWUpXG4gICAgICAgICAgICAgICAgICAgIC5jbGFzc2VkKCdoaWdobGlnaHRlZCcsIGZhbHNlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHJlbmRlcnMgdGhlIGhlYXRtYXAgY2VsbHNcblxuICAgICAgICAvLyBkYXRhIGpvaW5cbiAgICAgICAgY29uc3QgY2VsbHMgPSBkb20uc2VsZWN0QWxsKFwiLmV4cC1tYXAtY2VsbFwiKVxuICAgICAgICAgICAgLmRhdGEodGhpcy5kYXRhLCAoZCkgPT4gZC52YWx1ZSk7XG5cbiAgICAgICAgLy8gdXBkYXRlIG9sZCBlbGVtZW50c1xuICAgICAgICBjZWxscy5hdHRyKFwieFwiLCAoZCkgPT4gdGhpcy54U2NhbGUoZC54KSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAoZCkgPT4gdGhpcy55U2NhbGUoZC55KSlcbiAgICAgICAgICAgIC5hdHRyKFwicm93XCIsIChkKSA9PiBgeCR7dGhpcy54TGlzdC5pbmRleE9mKGQueCl9YClcbiAgICAgICAgICAgIC5hdHRyKFwiY29sXCIsIChkKSA9PiBgeSR7dGhpcy55TGlzdC5pbmRleE9mKGQueSl9YCk7XG5cbiAgICAgICAgLy8gZW50ZXIgbmV3IGVsZW1lbnRzXG4gICAgICAgIGNvbnN0IG51bGxDb2xvciA9IFwiI0RERERERFwiO1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY2VsbHMuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgICAgICAuYXR0cihcInJvd1wiLCAoZCkgPT4gYHgke3RoaXMueExpc3QuaW5kZXhPZihkLngpfWApXG4gICAgICAgICAgICAuYXR0cihcImNvbFwiLCAoZCkgPT4gYHkke3RoaXMueUxpc3QuaW5kZXhPZihkLnkpfWApXG5cbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCAoZCkgPT4gdGhpcy54U2NhbGUoZC54KSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAoZCkgPT4gdGhpcy55U2NhbGUoZC55KSlcbiAgICAgICAgICAgIC5hdHRyKFwicnhcIiwgdGhpcy5yKVxuICAgICAgICAgICAgLmF0dHIoJ3J5JywgdGhpcy5yKVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCAoZCkgPT4gYGV4cC1tYXAtY2VsbGApXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMueFNjYWxlLmJhbmR3aWR0aCgpKVxuICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy55U2NhbGUuYmFuZHdpZHRoKCkpXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIChkKSA9PiBcIiNlZWVlZWVcIilcbiAgICAgICAgICAgIC5vbihcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbihkKXtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdCh0aGlzKTsgLy8gTm90ZTogXCJ0aGlzXCIgaGVyZSByZWZlcnMgdG8gdGhlIGRvbSBlbGVtZW50IG5vdCB0aGUgb2JqZWN0XG4gICAgICAgICAgICAgICAgc2VsZi5jZWxsTW91c2VvdmVyKGQsIGRvbSwgc2VsZWN0ZWQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5vbihcIm1vdXNlb3V0XCIsIGZ1bmN0aW9uKGQpe1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0KHRoaXMpOyAvLyBOb3RlOiBcInRoaXNcIiBoZXJlIHJlZmVycyB0byB0aGUgZG9tIGVsZW1lbnQgbm90IHRoZSBvYmplY3RcbiAgICAgICAgICAgICAgICBzZWxmLmNlbGxNb3VzZW91dCgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1lcmdlKGNlbGxzKVxuICAgICAgICAgICAgLy8gLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLy8gLmR1cmF0aW9uKDIwMDApXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIChkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVzZU51bGxDb2xvciYmZC52YWx1ZT09MD9udWxsQ29sb3I6dGhpcy51c2VMb2c/dGhpcy5jb2xvclNjYWxlKHRoaXMubG9nKGQudmFsdWUpKTp0aGlzLmNvbG9yU2NhbGUoZC52YWx1ZSlcbiAgICAgICAgICAgIH0pOyAvLyBUT0RPOiB3aGF0IGlmIG51bGwgdmFsdWUgaXNuJ3QgMD9cblxuICAgICAgICAvLyBleGl0IGFuZCByZW1vdmVcbiAgICAgICAgY2VsbHMuZXhpdCgpLnJlbW92ZSgpO1xuICAgIH1cblxuXG4gICAgY2VsbE1vdXNlb3V0KGQpe1xuICAgICAgICBzZWxlY3RBbGwoXCIqXCIpLmNsYXNzZWQoJ2hpZ2hsaWdodGVkJywgZmFsc2UpO1xuICAgICAgICB0aGlzLnRvb2x0aXAuaGlkZSgpO1xuICAgIH1cblxuICAgIGNlbGxNb3VzZW92ZXIgKGQsIGRvbSwgc2VsZWN0ZWQpIHtcbiAgICAgICAgY29uc3Qgcm93Q2xhc3MgPSBzZWxlY3RlZC5hdHRyKFwicm93XCIpO1xuICAgICAgICBjb25zdCBjb2xDbGFzcyA9IHNlbGVjdGVkLmF0dHIoXCJjb2xcIik7XG4gICAgICAgIGRvbS5zZWxlY3RBbGwoXCIuZXhwLW1hcC14bGFiZWxcIikuZmlsdGVyKGAuJHtyb3dDbGFzc31gKVxuICAgICAgICAgICAgLmNsYXNzZWQoJ2hpZ2hsaWdodGVkJywgdHJ1ZSk7XG4gICAgICAgIGRvbS5zZWxlY3RBbGwoXCIuZXhwLW1hcC15bGFiZWxcIikuZmlsdGVyKGAuJHtjb2xDbGFzc31gKVxuICAgICAgICAgICAgLmNsYXNzZWQoJ2hpZ2hsaWdodGVkJywgdHJ1ZSk7XG4gICAgICAgIHNlbGVjdGVkLmNsYXNzZWQoJ2hpZ2hsaWdodGVkJywgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlWYWx1ZSA9IGQuZGlzcGxheVZhbHVlID09PSB1bmRlZmluZWQ/cGFyc2VGbG9hdChkLnZhbHVlLnRvRXhwb25lbnRpYWwoKSkudG9QcmVjaXNpb24oNCk6ZC5kaXNwbGF5VmFsdWU7XG4gICAgICAgIHRoaXMudG9vbHRpcC5zaG93KGBDb2x1bW46ICR7ZC54fSA8YnIvPiBSb3c6ICR7ZC55fTxici8+IFZhbHVlOiAke2Rpc3BsYXlWYWx1ZX1gKTtcbiAgICB9XG5cbiAgICBfc2V0WExpc3Qod2lkdGgsIG5ld0xpc3QpIHtcbiAgICAgICAgaWYobmV3TGlzdCAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIHRoaXMueExpc3QgPSBuZXdMaXN0XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnhMaXN0ID0gbmVzdCgpXG4gICAgICAgICAgICAgICAgLmtleSgoZCkgPT4gZC54KVxuICAgICAgICAgICAgICAgIC5lbnRyaWVzKHRoaXMuZGF0YSlcbiAgICAgICAgICAgICAgICAubWFwKChkKSA9PiBkLmtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy54U2NhbGUgPSBzY2FsZUJhbmQoKVxuICAgICAgICAgICAgLmRvbWFpbih0aGlzLnhMaXN0KVxuICAgICAgICAgICAgLnJhbmdlKFswLCB3aWR0aF0pXG4gICAgICAgICAgICAucGFkZGluZyguMDUpOyAvLyBUT0RPOiBlbGltaW5hdGUgaGFyZC1jb2RlZCB2YWx1ZVxuICAgIH1cblxuICAgIF9zZXRZTGlzdChoZWlnaHQsIG5ld0xpc3QpIHtcbiAgICAgICAgaWYobmV3TGlzdCAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIHRoaXMueUxpc3QgPSBuZXdMaXN0XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgIHRoaXMueUxpc3QgPSBuZXN0KClcbiAgICAgICAgICAgIC5rZXkoKGQpID0+IGQueSlcbiAgICAgICAgICAgIC5lbnRyaWVzKHRoaXMuZGF0YSlcbiAgICAgICAgICAgIC5tYXAoKGQpID0+IGQua2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnlTY2FsZSA9IHNjYWxlQmFuZCgpXG4gICAgICAgICAgICAgICAgLmRvbWFpbih0aGlzLnlMaXN0KVxuICAgICAgICAgICAgICAgIC5yYW5nZShbMCwgaGVpZ2h0XSlcbiAgICAgICAgICAgICAgICAucGFkZGluZyguMDUpOyAvLyBUT0RPOiBlbGltaW5hdGUgaGFyZC1jb2RlZCB2YWx1ZVxuICAgIH1cblxuXG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuLyoqXG4gKiBUT0RPOiBjb2RlIHJldmlldyBvZiBob3cgdG8gcHJlc2V0IHBhcmFtZXRlciB2YWx1ZXNcbiAqIHJldmlldyBhbGwgdGhlIHBvc2l0aW9uIGNhbGN1bGF0aW9uc1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZW5kcm9IZWF0bWFwQ29uZmlnIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcm9vdFcge051bWJlcn0sIHRoaXMgd2lkdGggaW5jbHVkZXMgbWFyZ2luIGxlZnQgYW5kIHJpZ2h0LCByb3dUcmVlUGFuZWwgd2lkdGggYW5kIGhlYXRtYXAgd2lkdGguXG4gICAgICogQHBhcmFtIGxlZnRQYW5lbFcge0ludGVnZXJ9LCBzZXQgdG8gMCBpZiB0aGVyZSdzIG5vIGxlZnQgcGFuZWxcbiAgICAgKiBAcGFyYW0gdG9wUGFuZWxIIHtJbnRlZ2VyfSwgc2V0IHRvIDAgaWYgdGhlcmUncyBubyB0b3AgcGFuZWxcbiAgICAgKiBAcGFyYW0gbWFyZ2luIHtPYmplY3R9IHdpdGggYXR0cjogdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBzbWFsbGVyIHZhbHVlcyB0aGFuIHRoZSBkZWZhdWx0IGFyZSBub3QgcmVjb21tZW5kZWQgZm9yIHRoZSBoZWF0bWFwLCB0b3AgbWFyZ2luIHNob3VsZCBiZSBhdCBsZWFzdCA1MFxuICAgICAqIEBwYXJhbSBjZWxsSCB7SW50ZWdlcn1cbiAgICAgKiBAcGFyYW0gYWRqdXN0IHtJbnRlZ2VyfSwgYWRqdXN0ZWQgc3BhY2luZyBiZXR3ZWVuIHRoZSBoZWF0bWFwIGFuZCB0aGUgZGVuZHJvZ3JhbVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHJvb3RXPXdpbmRvdy5pbm5lcldpZHRoLCBsZWZ0UGFuZWxXPTEwMCwgdG9wUGFuZWxIPTEwMCwgbWFyZ2luPXt0b3A6NTAsIHJpZ2h0OjI1MCwgYm90dG9tOjE3MCwgbGVmdDoxMH0sIGNlbGxIPTEyLCBhZGp1c3Q9MTApIHtcbiAgICAgICAgdGhpcy5tYXJnaW4gPSBtYXJnaW47XG4gICAgICAgIHRoaXMucm9vdFcgPSByb290VztcblxuICAgICAgICB0aGlzLmxlZnRUcmVlUGFuZWwgPSB7IC8vIHRoZSByb3cgZGVuZHJvZ3JhbSBwYW5lbFxuICAgICAgICAgICAgeDogbWFyZ2luLmxlZnQsXG4gICAgICAgICAgICB5OiBtYXJnaW4udG9wICsgdG9wUGFuZWxILFxuICAgICAgICAgICAgaDogdW5kZWZpbmVkLCAvLyB1bmRlZmluZWQgaW5pdGlhbGx5LCBiZWNhdXNlIGl0J3MgZGF0YS1kZXBlbmRlbnRcbiAgICAgICAgICAgIHc6IGxlZnRQYW5lbFcgLSBhZGp1c3QsXG4gICAgICAgICAgICBpZDogXCJsZWZ0VHJlZVwiXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jZWxsID0ge1xuICAgICAgICAgICAgdzogdW5kZWZpbmVkLCAvLyB0byBiZSBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBkYXRhIGFuZCByb290V1xuICAgICAgICAgICAgaDogY2VsbEhcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnRvcFRyZWVQYW5lbCA9IHsgLy8gdGhlIGNvbHVtbiBkZW5kcm9ncmFtIHBhbmVsXG4gICAgICAgICAgICB4OiBtYXJnaW4ubGVmdCArIGxlZnRQYW5lbFcsXG4gICAgICAgICAgICB5OiBtYXJnaW4udG9wLFxuICAgICAgICAgICAgaDogdG9wUGFuZWxIIC0gYWRqdXN0LFxuICAgICAgICAgICAgdzogdGhpcy5yb290VyAtIChtYXJnaW4ubGVmdCArIGxlZnRQYW5lbFcgKyBtYXJnaW4ucmlnaHQpLCAvLyBoYXJkLWNvZGVkIHZhbHVlcz9cbiAgICAgICAgICAgIGlkOiBcInRvcFRyZWVcIlxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGVhdG1hcFBhbmVsID0ge1xuICAgICAgICAgICAgeDogbWFyZ2luLmxlZnQgKyBsZWZ0UGFuZWxXLFxuICAgICAgICAgICAgeTogbWFyZ2luLnRvcCArIHRvcFBhbmVsSCxcbiAgICAgICAgICAgIGg6IHRoaXMubGVmdFRyZWVQYW5lbC5oLFxuICAgICAgICAgICAgdzogdGhpcy50b3BUcmVlUGFuZWwudyxcbiAgICAgICAgICAgIGlkOiBcImhlYXRtYXBcIlxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMubGVnZW5kUGFuZWwgPSB7IC8vIHRoZSBjb2xvciBsZWdlbmQgcGFuZWxcbiAgICAgICAgICAgIHg6IG1hcmdpbi5sZWZ0ICsgbGVmdFBhbmVsVyxcbiAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICBoOiBtYXJnaW4udG9wLzIsXG4gICAgICAgICAgICB3OiB0aGlzLnRvcFRyZWVQYW5lbC53LFxuICAgICAgICAgICAgY2VsbDoge3c6IDYwfSxcbiAgICAgICAgICAgIGlkOiBcImxlZ2VuZFwiXG4gICAgICAgIH07XG5cblxuICAgIH1cblxuICAgIGdldCgpe1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWFyZ2luOiB0aGlzLm1hcmdpbixcbiAgICAgICAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgICAgICAgIHc6IHRoaXMucm9vdFcsXG4gICAgICAgICAgICBoOiB0aGlzLm1hcmdpbi50b3AgKyB0aGlzLnRvcFRyZWVQYW5lbC5oICsgdGhpcy5sZWdlbmRQYW5lbC5oICsgdGhpcy5tYXJnaW4uYm90dG9tLCAvLyBpbml0aWFsIGhlaWdodFxuICAgICAgICAgICAgcGFuZWxzOiB7XG4gICAgICAgICAgICAgICAgdG9wOiB0aGlzLnRvcFRyZWVQYW5lbCxcbiAgICAgICAgICAgICAgICBsZWZ0OiB0aGlzLmxlZnRUcmVlUGFuZWwsXG4gICAgICAgICAgICAgICAgbWFpbjogdGhpcy5oZWF0bWFwUGFuZWwsXG4gICAgICAgICAgICAgICAgbGVnZW5kOiB0aGlzLmxlZ2VuZFBhbmVsXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuXG4iLCJmdW5jdGlvbiBjb3VudChub2RlKSB7XG4gIHZhciBzdW0gPSAwLFxuICAgICAgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLFxuICAgICAgaSA9IGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aDtcbiAgaWYgKCFpKSBzdW0gPSAxO1xuICBlbHNlIHdoaWxlICgtLWkgPj0gMCkgc3VtICs9IGNoaWxkcmVuW2ldLnZhbHVlO1xuICBub2RlLnZhbHVlID0gc3VtO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaEFmdGVyKGNvdW50KTtcbn1cbiIsImltcG9ydCBub2RlX2NvdW50IGZyb20gXCIuL2NvdW50XCI7XG5pbXBvcnQgbm9kZV9lYWNoIGZyb20gXCIuL2VhY2hcIjtcbmltcG9ydCBub2RlX2VhY2hCZWZvcmUgZnJvbSBcIi4vZWFjaEJlZm9yZVwiO1xuaW1wb3J0IG5vZGVfZWFjaEFmdGVyIGZyb20gXCIuL2VhY2hBZnRlclwiO1xuaW1wb3J0IG5vZGVfc3VtIGZyb20gXCIuL3N1bVwiO1xuaW1wb3J0IG5vZGVfc29ydCBmcm9tIFwiLi9zb3J0XCI7XG5pbXBvcnQgbm9kZV9wYXRoIGZyb20gXCIuL3BhdGhcIjtcbmltcG9ydCBub2RlX2FuY2VzdG9ycyBmcm9tIFwiLi9hbmNlc3RvcnNcIjtcbmltcG9ydCBub2RlX2Rlc2NlbmRhbnRzIGZyb20gXCIuL2Rlc2NlbmRhbnRzXCI7XG5pbXBvcnQgbm9kZV9sZWF2ZXMgZnJvbSBcIi4vbGVhdmVzXCI7XG5pbXBvcnQgbm9kZV9saW5rcyBmcm9tIFwiLi9saW5rc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoaWVyYXJjaHkoZGF0YSwgY2hpbGRyZW4pIHtcbiAgdmFyIHJvb3QgPSBuZXcgTm9kZShkYXRhKSxcbiAgICAgIHZhbHVlZCA9ICtkYXRhLnZhbHVlICYmIChyb290LnZhbHVlID0gZGF0YS52YWx1ZSksXG4gICAgICBub2RlLFxuICAgICAgbm9kZXMgPSBbcm9vdF0sXG4gICAgICBjaGlsZCxcbiAgICAgIGNoaWxkcyxcbiAgICAgIGksXG4gICAgICBuO1xuXG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSBjaGlsZHJlbiA9IGRlZmF1bHRDaGlsZHJlbjtcblxuICB3aGlsZSAobm9kZSA9IG5vZGVzLnBvcCgpKSB7XG4gICAgaWYgKHZhbHVlZCkgbm9kZS52YWx1ZSA9ICtub2RlLmRhdGEudmFsdWU7XG4gICAgaWYgKChjaGlsZHMgPSBjaGlsZHJlbihub2RlLmRhdGEpKSAmJiAobiA9IGNoaWxkcy5sZW5ndGgpKSB7XG4gICAgICBub2RlLmNoaWxkcmVuID0gbmV3IEFycmF5KG4pO1xuICAgICAgZm9yIChpID0gbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIG5vZGVzLnB1c2goY2hpbGQgPSBub2RlLmNoaWxkcmVuW2ldID0gbmV3IE5vZGUoY2hpbGRzW2ldKSk7XG4gICAgICAgIGNoaWxkLnBhcmVudCA9IG5vZGU7XG4gICAgICAgIGNoaWxkLmRlcHRoID0gbm9kZS5kZXB0aCArIDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJvb3QuZWFjaEJlZm9yZShjb21wdXRlSGVpZ2h0KTtcbn1cblxuZnVuY3Rpb24gbm9kZV9jb3B5KCkge1xuICByZXR1cm4gaGllcmFyY2h5KHRoaXMpLmVhY2hCZWZvcmUoY29weURhdGEpO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0Q2hpbGRyZW4oZCkge1xuICByZXR1cm4gZC5jaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gY29weURhdGEobm9kZSkge1xuICBub2RlLmRhdGEgPSBub2RlLmRhdGEuZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVIZWlnaHQobm9kZSkge1xuICB2YXIgaGVpZ2h0ID0gMDtcbiAgZG8gbm9kZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIHdoaWxlICgobm9kZSA9IG5vZGUucGFyZW50KSAmJiAobm9kZS5oZWlnaHQgPCArK2hlaWdodCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTm9kZShkYXRhKSB7XG4gIHRoaXMuZGF0YSA9IGRhdGE7XG4gIHRoaXMuZGVwdGggPVxuICB0aGlzLmhlaWdodCA9IDA7XG4gIHRoaXMucGFyZW50ID0gbnVsbDtcbn1cblxuTm9kZS5wcm90b3R5cGUgPSBoaWVyYXJjaHkucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogTm9kZSxcbiAgY291bnQ6IG5vZGVfY291bnQsXG4gIGVhY2g6IG5vZGVfZWFjaCxcbiAgZWFjaEFmdGVyOiBub2RlX2VhY2hBZnRlcixcbiAgZWFjaEJlZm9yZTogbm9kZV9lYWNoQmVmb3JlLFxuICBzdW06IG5vZGVfc3VtLFxuICBzb3J0OiBub2RlX3NvcnQsXG4gIHBhdGg6IG5vZGVfcGF0aCxcbiAgYW5jZXN0b3JzOiBub2RlX2FuY2VzdG9ycyxcbiAgZGVzY2VuZGFudHM6IG5vZGVfZGVzY2VuZGFudHMsXG4gIGxlYXZlczogbm9kZV9sZWF2ZXMsXG4gIGxpbmtzOiBub2RlX2xpbmtzLFxuICBjb3B5OiBub2RlX2NvcHlcbn07XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaykge1xuICB2YXIgbm9kZSA9IHRoaXMsIGN1cnJlbnQsIG5leHQgPSBbbm9kZV0sIGNoaWxkcmVuLCBpLCBuO1xuICBkbyB7XG4gICAgY3VycmVudCA9IG5leHQucmV2ZXJzZSgpLCBuZXh0ID0gW107XG4gICAgd2hpbGUgKG5vZGUgPSBjdXJyZW50LnBvcCgpKSB7XG4gICAgICBjYWxsYmFjayhub2RlKSwgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuICAgICAgaWYgKGNoaWxkcmVuKSBmb3IgKGkgPSAwLCBuID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIG5leHQucHVzaChjaGlsZHJlbltpXSk7XG4gICAgICB9XG4gICAgfVxuICB9IHdoaWxlIChuZXh0Lmxlbmd0aCk7XG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyIG5vZGUgPSB0aGlzLCBub2RlcyA9IFtub2RlXSwgbmV4dCA9IFtdLCBjaGlsZHJlbiwgaSwgbjtcbiAgd2hpbGUgKG5vZGUgPSBub2Rlcy5wb3AoKSkge1xuICAgIG5leHQucHVzaChub2RlKSwgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuICAgIGlmIChjaGlsZHJlbikgZm9yIChpID0gMCwgbiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgbm9kZXMucHVzaChjaGlsZHJlbltpXSk7XG4gICAgfVxuICB9XG4gIHdoaWxlIChub2RlID0gbmV4dC5wb3AoKSkge1xuICAgIGNhbGxiYWNrKG5vZGUpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyIG5vZGUgPSB0aGlzLCBub2RlcyA9IFtub2RlXSwgY2hpbGRyZW4sIGk7XG4gIHdoaWxlIChub2RlID0gbm9kZXMucG9wKCkpIHtcbiAgICBjYWxsYmFjayhub2RlKSwgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuICAgIGlmIChjaGlsZHJlbikgZm9yIChpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIG5vZGVzLnB1c2goY2hpbGRyZW5baV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbihub2RlKSB7XG4gICAgdmFyIHN1bSA9ICt2YWx1ZShub2RlLmRhdGEpIHx8IDAsXG4gICAgICAgIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbixcbiAgICAgICAgaSA9IGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aDtcbiAgICB3aGlsZSAoLS1pID49IDApIHN1bSArPSBjaGlsZHJlbltpXS52YWx1ZTtcbiAgICBub2RlLnZhbHVlID0gc3VtO1xuICB9KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBhcmUpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaEJlZm9yZShmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIG5vZGUuY2hpbGRyZW4uc29ydChjb21wYXJlKTtcbiAgICB9XG4gIH0pO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZW5kKSB7XG4gIHZhciBzdGFydCA9IHRoaXMsXG4gICAgICBhbmNlc3RvciA9IGxlYXN0Q29tbW9uQW5jZXN0b3Ioc3RhcnQsIGVuZCksXG4gICAgICBub2RlcyA9IFtzdGFydF07XG4gIHdoaWxlIChzdGFydCAhPT0gYW5jZXN0b3IpIHtcbiAgICBzdGFydCA9IHN0YXJ0LnBhcmVudDtcbiAgICBub2Rlcy5wdXNoKHN0YXJ0KTtcbiAgfVxuICB2YXIgayA9IG5vZGVzLmxlbmd0aDtcbiAgd2hpbGUgKGVuZCAhPT0gYW5jZXN0b3IpIHtcbiAgICBub2Rlcy5zcGxpY2UoaywgMCwgZW5kKTtcbiAgICBlbmQgPSBlbmQucGFyZW50O1xuICB9XG4gIHJldHVybiBub2Rlcztcbn1cblxuZnVuY3Rpb24gbGVhc3RDb21tb25BbmNlc3RvcihhLCBiKSB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gYTtcbiAgdmFyIGFOb2RlcyA9IGEuYW5jZXN0b3JzKCksXG4gICAgICBiTm9kZXMgPSBiLmFuY2VzdG9ycygpLFxuICAgICAgYyA9IG51bGw7XG4gIGEgPSBhTm9kZXMucG9wKCk7XG4gIGIgPSBiTm9kZXMucG9wKCk7XG4gIHdoaWxlIChhID09PSBiKSB7XG4gICAgYyA9IGE7XG4gICAgYSA9IGFOb2Rlcy5wb3AoKTtcbiAgICBiID0gYk5vZGVzLnBvcCgpO1xuICB9XG4gIHJldHVybiBjO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBub2RlID0gdGhpcywgbm9kZXMgPSBbbm9kZV07XG4gIHdoaWxlIChub2RlID0gbm9kZS5wYXJlbnQpIHtcbiAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICB9XG4gIHJldHVybiBub2Rlcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbm9kZXMgPSBbXTtcbiAgdGhpcy5lYWNoKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICB9KTtcbiAgcmV0dXJuIG5vZGVzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBsZWF2ZXMgPSBbXTtcbiAgdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGxlYXZlcy5wdXNoKG5vZGUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsZWF2ZXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHJvb3QgPSB0aGlzLCBsaW5rcyA9IFtdO1xuICByb290LmVhY2goZnVuY3Rpb24obm9kZSkge1xuICAgIGlmIChub2RlICE9PSByb290KSB7IC8vIERvbuKAmXQgaW5jbHVkZSB0aGUgcm9vdOKAmXMgcGFyZW50LCBpZiBhbnkuXG4gICAgICBsaW5rcy5wdXNoKHtzb3VyY2U6IG5vZGUucGFyZW50LCB0YXJnZXQ6IG5vZGV9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGlua3M7XG59XG4iLCJleHBvcnQgdmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geDtcbn1cbiIsImltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5XCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHlcIjtcblxudmFyIHRvcCA9IDEsXG4gICAgcmlnaHQgPSAyLFxuICAgIGJvdHRvbSA9IDMsXG4gICAgbGVmdCA9IDQsXG4gICAgZXBzaWxvbiA9IDFlLTY7XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZVgoeCkge1xuICByZXR1cm4gXCJ0cmFuc2xhdGUoXCIgKyAoeCArIDAuNSkgKyBcIiwwKVwiO1xufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVZKHkpIHtcbiAgcmV0dXJuIFwidHJhbnNsYXRlKDAsXCIgKyAoeSArIDAuNSkgKyBcIilcIjtcbn1cblxuZnVuY3Rpb24gbnVtYmVyKHNjYWxlKSB7XG4gIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgcmV0dXJuICtzY2FsZShkKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2VudGVyKHNjYWxlKSB7XG4gIHZhciBvZmZzZXQgPSBNYXRoLm1heCgwLCBzY2FsZS5iYW5kd2lkdGgoKSAtIDEpIC8gMjsgLy8gQWRqdXN0IGZvciAwLjVweCBvZmZzZXQuXG4gIGlmIChzY2FsZS5yb3VuZCgpKSBvZmZzZXQgPSBNYXRoLnJvdW5kKG9mZnNldCk7XG4gIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgcmV0dXJuICtzY2FsZShkKSArIG9mZnNldDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZW50ZXJpbmcoKSB7XG4gIHJldHVybiAhdGhpcy5fX2F4aXM7XG59XG5cbmZ1bmN0aW9uIGF4aXMob3JpZW50LCBzY2FsZSkge1xuICB2YXIgdGlja0FyZ3VtZW50cyA9IFtdLFxuICAgICAgdGlja1ZhbHVlcyA9IG51bGwsXG4gICAgICB0aWNrRm9ybWF0ID0gbnVsbCxcbiAgICAgIHRpY2tTaXplSW5uZXIgPSA2LFxuICAgICAgdGlja1NpemVPdXRlciA9IDYsXG4gICAgICB0aWNrUGFkZGluZyA9IDMsXG4gICAgICBrID0gb3JpZW50ID09PSB0b3AgfHwgb3JpZW50ID09PSBsZWZ0ID8gLTEgOiAxLFxuICAgICAgeCA9IG9yaWVudCA9PT0gbGVmdCB8fCBvcmllbnQgPT09IHJpZ2h0ID8gXCJ4XCIgOiBcInlcIixcbiAgICAgIHRyYW5zZm9ybSA9IG9yaWVudCA9PT0gdG9wIHx8IG9yaWVudCA9PT0gYm90dG9tID8gdHJhbnNsYXRlWCA6IHRyYW5zbGF0ZVk7XG5cbiAgZnVuY3Rpb24gYXhpcyhjb250ZXh0KSB7XG4gICAgdmFyIHZhbHVlcyA9IHRpY2tWYWx1ZXMgPT0gbnVsbCA/IChzY2FsZS50aWNrcyA/IHNjYWxlLnRpY2tzLmFwcGx5KHNjYWxlLCB0aWNrQXJndW1lbnRzKSA6IHNjYWxlLmRvbWFpbigpKSA6IHRpY2tWYWx1ZXMsXG4gICAgICAgIGZvcm1hdCA9IHRpY2tGb3JtYXQgPT0gbnVsbCA/IChzY2FsZS50aWNrRm9ybWF0ID8gc2NhbGUudGlja0Zvcm1hdC5hcHBseShzY2FsZSwgdGlja0FyZ3VtZW50cykgOiBpZGVudGl0eSkgOiB0aWNrRm9ybWF0LFxuICAgICAgICBzcGFjaW5nID0gTWF0aC5tYXgodGlja1NpemVJbm5lciwgMCkgKyB0aWNrUGFkZGluZyxcbiAgICAgICAgcmFuZ2UgPSBzY2FsZS5yYW5nZSgpLFxuICAgICAgICByYW5nZTAgPSArcmFuZ2VbMF0gKyAwLjUsXG4gICAgICAgIHJhbmdlMSA9ICtyYW5nZVtyYW5nZS5sZW5ndGggLSAxXSArIDAuNSxcbiAgICAgICAgcG9zaXRpb24gPSAoc2NhbGUuYmFuZHdpZHRoID8gY2VudGVyIDogbnVtYmVyKShzY2FsZS5jb3B5KCkpLFxuICAgICAgICBzZWxlY3Rpb24gPSBjb250ZXh0LnNlbGVjdGlvbiA/IGNvbnRleHQuc2VsZWN0aW9uKCkgOiBjb250ZXh0LFxuICAgICAgICBwYXRoID0gc2VsZWN0aW9uLnNlbGVjdEFsbChcIi5kb21haW5cIikuZGF0YShbbnVsbF0pLFxuICAgICAgICB0aWNrID0gc2VsZWN0aW9uLnNlbGVjdEFsbChcIi50aWNrXCIpLmRhdGEodmFsdWVzLCBzY2FsZSkub3JkZXIoKSxcbiAgICAgICAgdGlja0V4aXQgPSB0aWNrLmV4aXQoKSxcbiAgICAgICAgdGlja0VudGVyID0gdGljay5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwidGlja1wiKSxcbiAgICAgICAgbGluZSA9IHRpY2suc2VsZWN0KFwibGluZVwiKSxcbiAgICAgICAgdGV4dCA9IHRpY2suc2VsZWN0KFwidGV4dFwiKTtcblxuICAgIHBhdGggPSBwYXRoLm1lcmdlKHBhdGguZW50ZXIoKS5pbnNlcnQoXCJwYXRoXCIsIFwiLnRpY2tcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImRvbWFpblwiKVxuICAgICAgICAuYXR0cihcInN0cm9rZVwiLCBcImN1cnJlbnRDb2xvclwiKSk7XG5cbiAgICB0aWNrID0gdGljay5tZXJnZSh0aWNrRW50ZXIpO1xuXG4gICAgbGluZSA9IGxpbmUubWVyZ2UodGlja0VudGVyLmFwcGVuZChcImxpbmVcIilcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJjdXJyZW50Q29sb3JcIilcbiAgICAgICAgLmF0dHIoeCArIFwiMlwiLCBrICogdGlja1NpemVJbm5lcikpO1xuXG4gICAgdGV4dCA9IHRleHQubWVyZ2UodGlja0VudGVyLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwiY3VycmVudENvbG9yXCIpXG4gICAgICAgIC5hdHRyKHgsIGsgKiBzcGFjaW5nKVxuICAgICAgICAuYXR0cihcImR5XCIsIG9yaWVudCA9PT0gdG9wID8gXCIwZW1cIiA6IG9yaWVudCA9PT0gYm90dG9tID8gXCIwLjcxZW1cIiA6IFwiMC4zMmVtXCIpKTtcblxuICAgIGlmIChjb250ZXh0ICE9PSBzZWxlY3Rpb24pIHtcbiAgICAgIHBhdGggPSBwYXRoLnRyYW5zaXRpb24oY29udGV4dCk7XG4gICAgICB0aWNrID0gdGljay50cmFuc2l0aW9uKGNvbnRleHQpO1xuICAgICAgbGluZSA9IGxpbmUudHJhbnNpdGlvbihjb250ZXh0KTtcbiAgICAgIHRleHQgPSB0ZXh0LnRyYW5zaXRpb24oY29udGV4dCk7XG5cbiAgICAgIHRpY2tFeGl0ID0gdGlja0V4aXQudHJhbnNpdGlvbihjb250ZXh0KVxuICAgICAgICAgIC5hdHRyKFwib3BhY2l0eVwiLCBlcHNpbG9uKVxuICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGlzRmluaXRlKGQgPSBwb3NpdGlvbihkKSkgPyB0cmFuc2Zvcm0oZCkgOiB0aGlzLmdldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiKTsgfSk7XG5cbiAgICAgIHRpY2tFbnRlclxuICAgICAgICAgIC5hdHRyKFwib3BhY2l0eVwiLCBlcHNpbG9uKVxuICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uKGQpIHsgdmFyIHAgPSB0aGlzLnBhcmVudE5vZGUuX19heGlzOyByZXR1cm4gdHJhbnNmb3JtKHAgJiYgaXNGaW5pdGUocCA9IHAoZCkpID8gcCA6IHBvc2l0aW9uKGQpKTsgfSk7XG4gICAgfVxuXG4gICAgdGlja0V4aXQucmVtb3ZlKCk7XG5cbiAgICBwYXRoXG4gICAgICAgIC5hdHRyKFwiZFwiLCBvcmllbnQgPT09IGxlZnQgfHwgb3JpZW50ID09IHJpZ2h0XG4gICAgICAgICAgICA/ICh0aWNrU2l6ZU91dGVyID8gXCJNXCIgKyBrICogdGlja1NpemVPdXRlciArIFwiLFwiICsgcmFuZ2UwICsgXCJIMC41VlwiICsgcmFuZ2UxICsgXCJIXCIgKyBrICogdGlja1NpemVPdXRlciA6IFwiTTAuNSxcIiArIHJhbmdlMCArIFwiVlwiICsgcmFuZ2UxKVxuICAgICAgICAgICAgOiAodGlja1NpemVPdXRlciA/IFwiTVwiICsgcmFuZ2UwICsgXCIsXCIgKyBrICogdGlja1NpemVPdXRlciArIFwiVjAuNUhcIiArIHJhbmdlMSArIFwiVlwiICsgayAqIHRpY2tTaXplT3V0ZXIgOiBcIk1cIiArIHJhbmdlMCArIFwiLDAuNUhcIiArIHJhbmdlMSkpO1xuXG4gICAgdGlja1xuICAgICAgICAuYXR0cihcIm9wYWNpdHlcIiwgMSlcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gdHJhbnNmb3JtKHBvc2l0aW9uKGQpKTsgfSk7XG5cbiAgICBsaW5lXG4gICAgICAgIC5hdHRyKHggKyBcIjJcIiwgayAqIHRpY2tTaXplSW5uZXIpO1xuXG4gICAgdGV4dFxuICAgICAgICAuYXR0cih4LCBrICogc3BhY2luZylcbiAgICAgICAgLnRleHQoZm9ybWF0KTtcblxuICAgIHNlbGVjdGlvbi5maWx0ZXIoZW50ZXJpbmcpXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIilcbiAgICAgICAgLmF0dHIoXCJmb250LXNpemVcIiwgMTApXG4gICAgICAgIC5hdHRyKFwiZm9udC1mYW1pbHlcIiwgXCJzYW5zLXNlcmlmXCIpXG4gICAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgb3JpZW50ID09PSByaWdodCA/IFwic3RhcnRcIiA6IG9yaWVudCA9PT0gbGVmdCA/IFwiZW5kXCIgOiBcIm1pZGRsZVwiKTtcblxuICAgIHNlbGVjdGlvblxuICAgICAgICAuZWFjaChmdW5jdGlvbigpIHsgdGhpcy5fX2F4aXMgPSBwb3NpdGlvbjsgfSk7XG4gIH1cblxuICBheGlzLnNjYWxlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNjYWxlID0gXywgYXhpcykgOiBzY2FsZTtcbiAgfTtcblxuICBheGlzLnRpY2tzID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRpY2tBcmd1bWVudHMgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyksIGF4aXM7XG4gIH07XG5cbiAgYXhpcy50aWNrQXJndW1lbnRzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tBcmd1bWVudHMgPSBfID09IG51bGwgPyBbXSA6IHNsaWNlLmNhbGwoXyksIGF4aXMpIDogdGlja0FyZ3VtZW50cy5zbGljZSgpO1xuICB9O1xuXG4gIGF4aXMudGlja1ZhbHVlcyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrVmFsdWVzID0gXyA9PSBudWxsID8gbnVsbCA6IHNsaWNlLmNhbGwoXyksIGF4aXMpIDogdGlja1ZhbHVlcyAmJiB0aWNrVmFsdWVzLnNsaWNlKCk7XG4gIH07XG5cbiAgYXhpcy50aWNrRm9ybWF0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tGb3JtYXQgPSBfLCBheGlzKSA6IHRpY2tGb3JtYXQ7XG4gIH07XG5cbiAgYXhpcy50aWNrU2l6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrU2l6ZUlubmVyID0gdGlja1NpemVPdXRlciA9ICtfLCBheGlzKSA6IHRpY2tTaXplSW5uZXI7XG4gIH07XG5cbiAgYXhpcy50aWNrU2l6ZUlubmVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tTaXplSW5uZXIgPSArXywgYXhpcykgOiB0aWNrU2l6ZUlubmVyO1xuICB9O1xuXG4gIGF4aXMudGlja1NpemVPdXRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrU2l6ZU91dGVyID0gK18sIGF4aXMpIDogdGlja1NpemVPdXRlcjtcbiAgfTtcblxuICBheGlzLnRpY2tQYWRkaW5nID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tQYWRkaW5nID0gK18sIGF4aXMpIDogdGlja1BhZGRpbmc7XG4gIH07XG5cbiAgcmV0dXJuIGF4aXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlzVG9wKHNjYWxlKSB7XG4gIHJldHVybiBheGlzKHRvcCwgc2NhbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc1JpZ2h0KHNjYWxlKSB7XG4gIHJldHVybiBheGlzKHJpZ2h0LCBzY2FsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlzQm90dG9tKHNjYWxlKSB7XG4gIHJldHVybiBheGlzKGJvdHRvbSwgc2NhbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc0xlZnQoc2NhbGUpIHtcbiAgcmV0dXJuIGF4aXMobGVmdCwgc2NhbGUpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuLypcbiAgICBEZW5kcm9ncmFtIHZpc3VhbGl6ZXMgYSB0ZXh0LWJhc2VkIE5ld2ljayB0cmVlIHVzaW5nIEQzIFY1LlxuXG4gICAgZGVwZW5kZW5jaWVzOlxuICAgIGQzIHY1XG4gICAgdGhlIG5ld2ljayBwYXJzZXI6IG5ld2ljay5qc1xuXG4gICAgcmVmZXJlbmNlczpcbiAgICBodHRwczovL2dpdGh1Yi5jb20vZDMvZDMtaGllcmFyY2h5XG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2phc29uZGF2aWVzL25ld2ljay5qcy9cblxuICAgIG5vdGVzIG9uIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlczpcbiAgICAtIGl0IHVzZXMgcGFyc2VOZXdpY2soKSB0byBjb252ZXJ0IHRoZSBuZXdpY2sgdHJlZSBpbnRvIHRoZSBmb2xsb3dpbmcganNvbjpcbiAgICAgICAge1xuICAgICAgICAgICAgYnJhbmNoc2V0OltjaGlsZCBub2RlIGpzb24gb2JqZWN0c10sXG4gICAgICAgICAgICBuYW1lOiBcIlwiIC8vIGludGVybmFsIG5vZGVzIHdvdWxkIGhhdmUgbm8gcmVhbCBsYWJlbHNcbiAgICAgICAgfVxuICAgICAgIFRoaXMganNvbiBzdHJ1Y3R1cmUgaXMgdGhlIGlucHV0IGRhdGEgb2YgZDMuaGllcmFyY2h5KClcblxuICAgIC0gSW4gdGhlIGQzLmhpZXJhcmNoeSgpLCB0aGUgcm9vdCBub2RlIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6XG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbY28sIGNvXSxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBicmFuY2hzZXQ6IEFycmF5KDIpLFxuICAgICAgICAgICAgICAgIG5hbWU6IFwibm9kZSBuYW1lXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZXB0aDogMCxcbiAgICAgICAgICAgIGhlaWdodDogaW50ZWdlcixcbiAgICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICAgIHZhbHVlOiA5XG4gICAgICAgIH1cbiAqL1xuXG4vLyBUT0RPOiBlbGltaW5hdGUgaGFyZC1jb2RlZCB2YWx1ZXNcblxuaW1wb3J0IHtoaWVyYXJjaHl9IGZyb20gXCJkMy1oaWVyYXJjaHlcIjtcbmltcG9ydCB7YXNjZW5kaW5nfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7YXhpc0JvdHRvbSwgYXhpc0xlZnR9IGZyb20gXCJkMy1heGlzXCI7XG5pbXBvcnQge3NjYWxlTGluZWFyLCBzY2FsZUJhbmR9IGZyb20gXCJkMy1zY2FsZVwiO1xuaW1wb3J0IHtwYXJzZU5ld2lja30gZnJvbSBcIi4vbmV3aWNrXCI7XG5jb25zdCB2ZXJib3NlID0gZmFsc2U7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZW5kcm9ncmFtIHtcbiAgICBjb25zdHJ1Y3RvcihuZXdpY2ssIG9yaWVudGF0aW9uPSdoJyl7XG4gICAgICAgIHRoaXMubmV3aWNrID0gbmV3aWNrO1xuICAgICAgICB0aGlzLm9yaWVudGF0aW9uID0gb3JpZW50YXRpb247XG4gICAgICAgIHRoaXMucG9zdG9yZGVyID0gW107XG4gICAgICAgIHRoaXMucm9vdCA9IGhpZXJhcmNoeShwYXJzZU5ld2ljayhuZXdpY2spLCAoZCkgPT4gZC5icmFuY2hzZXQpXG4gICAgICAgICAgICAuc3VtKChkKT0+ZC5icmFuY2hzZXQ/MDoxKVxuICAgICAgICAgICAgLnNvcnQoKGEsYik9PmEudmFsdWUtYi52YWx1ZXx8YS5kYXRhLmxlbmd0aC1iLmRhdGEubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5sZWF2ZXMgPSB0aGlzLnJvb3QubGVhdmVzKCkuc29ydCgoYSwgYikgPT4gKGEudmFsdWUgLSBiLnZhbHVlKSB8fCBhc2NlbmRpbmcoYS5kYXRhLmxlbmd0aCwgYi5kYXRhLmxlbmd0aCkpO1xuICAgICAgICB0aGlzLndpZHRoID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy54U2NhbGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMueVNjYWxlID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGRyYXcoZG9tLCB3aWR0aCwgaGVpZ2h0KXtcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgdGhpcy5fc2V0WFNjYWxlKCk7XG4gICAgICAgIHRoaXMuX3NldFlTY2FsZSgpO1xuICAgICAgICBpZiAoJ2gnID09IHRoaXMub3JpZW50YXRpb24pIHRoaXMuX2RyYXdIVHJlZShkb20pO1xuICAgICAgICBlbHNlIHRoaXMuX2RyYXdWVHJlZShkb20pO1xuICAgIH1cblxuICAgIC8vLy8vLy8gcHJpdmF0ZSBtZXRob2RzIC8vLy8vLy9cblxuICAgIF9kcmF3SFRyZWUoZG9tKXtcbiAgICAgICAgY29uc3Qgc2V0WSA9IChub2RlKSA9PiB7XG4gICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gYSBsZWFmIG5vZGVcbiAgICAgICAgICAgICAgICBub2RlLnkgPSB0aGlzLnlTY2FsZShub2RlLmRhdGEubmFtZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGFuIGludGVybmFsIG5vZGVcbiAgICAgICAgICAgICAgICAvLyB0aGUgeSBjb29yZGluYXRlIG9mIGFuIGludGVybmFsIG5vZGUgaXMgdGhlIGF2ZXJhZ2UgeSBmcm9tIGl0cyBjaGlsZHJlblxuICAgICAgICAgICAgICAgIG5vZGUueSA9IG5vZGUuY2hpbGRyZW4ucmVkdWNlKChzdW0sIGQpPT5zdW0rZC55LCAwKS9ub2RlLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2V0WCA9IChub2RlKSA9PiB7XG4gICAgICAgICAgICBub2RlLnggPSB0aGlzLnhTY2FsZSh0aGlzLl9nZXRCcmFuY2hMZW5ndGhUb1Jvb3Qobm9kZSkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGZyb20gdGhlIGxlYWYgbGV2ZWwgLT4gcm9vdFxuICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMuX3NvcnROb2Rlc0J5TGV2ZWwoKTtcbiAgICAgICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgc2V0WChub2RlKTtcbiAgICAgICAgICAgIHNldFkobm9kZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRvbS5zZWxlY3RBbGwoJy5icmFuY2gnKVxuICAgICAgICAgICAgLmRhdGEobm9kZXMpXG4gICAgICAgICAgICAuZW50ZXIoKS5hcHBlbmQoXCJsaW5lXCIpXG4gICAgICAgICAgICAuYXR0cihcIngxXCIsIChkKSA9PiBkLngpXG4gICAgICAgICAgICAuYXR0cihcIngyXCIsIChkKSA9PiBkLmRhdGEubGVuZ3RoP2QueCAtIHRoaXMueFNjYWxlKGQuZGF0YS5sZW5ndGgpOmQueClcbiAgICAgICAgICAgIC5hdHRyKFwieTFcIiwgKGQpID0+IGQueSArIHRoaXMueVNjYWxlLmJhbmR3aWR0aCgpLzIpXG4gICAgICAgICAgICAuYXR0cihcInkyXCIsIChkKSA9PiBkLnkgKyB0aGlzLnlTY2FsZS5iYW5kd2lkdGgoKS8yKVxuICAgICAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJncmF5XCIpXG4gICAgICAgICAgICAuYXR0cihcInN0cm9rZS13aWR0aFwiLCAxKTtcblxuICAgICAgICAvLyBmb3IgYWxsIGludGVybmFsIG5vZGVzXG4gICAgICAgIGNvbnN0IGlub2RlcyA9IHRoaXMucm9vdC5kZXNjZW5kYW50cygpLmZpbHRlcigoZCk9PmQuaGVpZ2h0KS5zb3J0KChhLGIpPT5iLmhlaWdodC1hLmhlaWdodCk7XG4gICAgICAgIGRvbS5zZWxlY3RBbGwoJy5hcm0nKVxuICAgICAgICAgICAgLmRhdGEoaW5vZGVzKVxuICAgICAgICAgICAgLmVudGVyKCkuYXBwZW5kKFwibGluZVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4MVwiLCAoZCkgPT4gZC54KVxuICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCAoZCkgPT4gZC54KVxuICAgICAgICAgICAgLmF0dHIoXCJ5MVwiLCAoZCkgPT4gZC5jaGlsZHJlblswXS55ICsgdGhpcy55U2NhbGUuYmFuZHdpZHRoKCkvMilcbiAgICAgICAgICAgIC5hdHRyKFwieTJcIiwgKGQpID0+IGQuY2hpbGRyZW5bMV0ueSArIHRoaXMueVNjYWxlLmJhbmR3aWR0aCgpLzIpXG4gICAgICAgICAgICAuYXR0cihcInN0cm9rZVwiLCBcImdyYXlcIilcbiAgICAgICAgICAgIC5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDEpO1xuXG4gICAgICAgIGRvbS5zZWxlY3RBbGwoJy5ub2RlJylcbiAgICAgICAgICAgIC5kYXRhKGlub2RlcylcbiAgICAgICAgICAgIC5lbnRlcigpLmFwcGVuZChcImNpcmNsZVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJjeFwiLCAoZCkgPT4gZC54KVxuICAgICAgICAgICAgLmF0dHIoXCJjeVwiLCAoZCkgPT4gZC55ICsgdGhpcy55U2NhbGUuYmFuZHdpZHRoKCkvMilcbiAgICAgICAgICAgIC5hdHRyKFwiclwiLCAyKVxuICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnIzMzMycpXG4gICAgICAgICAgICAuYXR0cihcIm9wYWNpdHlcIiwgMC41KVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImRlbmRyb2dyYW0tbm9kZVwiKVxuICAgICAgICAgICAgLm9uKFwibW91c2VvdmVyXCIsIGZ1bmN0aW9uKGQpe1xuICAgICAgICAgICAgICAgIGQzLnNlbGVjdCh0aGlzKS5hdHRyKFwiclwiLCAzKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkLmxlYXZlcygpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAub24oXCJtb3VzZW91dFwiLCBmdW5jdGlvbihkKXtcbiAgICAgICAgICAgICAgICBkMy5zZWxlY3QodGhpcykuYXR0cihcInJcIiwgMilcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGF4aXNcbiAgICAgICAgLy8gQWRkIHRoZSB4IEF4aXNcbiAgICAgICAgZG9tLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJkZW5kcm9ncmFtLWF4aXNcIilcbiAgICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKDAsXCIgKyB0aGlzLmhlaWdodCArIFwiKVwiKVxuICAgICAgICAgICAgLmNhbGwoXG4gICAgICAgICAgICAgICAgYXhpc0JvdHRvbSh0aGlzLnhTY2FsZSlcbiAgICAgICAgICAgICAgICAgICAgLnRpY2tzKDMpXG4gICAgICAgICAgICAgICAgLy8gLnRpY2tWYWx1ZXMoW01hdGguZmxvb3IodGhpcy5fZ2V0TWF4QnJhbmNoTGVuZ3RoKCkvMiksIE1hdGguZmxvb3IodGhpcy5fZ2V0TWF4QnJhbmNoTGVuZ3RoKCkpXSlcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgX3NvcnROb2Rlc0J5TGV2ZWwoKXtcbiAgICAgICAgLy8gcmV0dXJucyBhIGxpc3Qgb2Ygbm9kZXMgb3JkZXJlZCBieSBhbmNlc3RyYWwgbGV2ZWwsIHRoZW4gYnkgYnJhbmNoIGxlbmd0aFxuICAgICAgICByZXR1cm4gdGhpcy5yb290LmRlc2NlbmRhbnRzKCkuc29ydCgoYSwgYikgPT4gKGEuaGVpZ2h0IC0gYi5oZWlnaHQpIHx8IGFzY2VuZGluZyhhLmRhdGEubGVuZ3RoLCBiLmRhdGEubGVuZ3RoKSk7XG4gICAgfVxuXG4gICAgX2RyYXdWVHJlZShkb20pe1xuICAgICAgICBjb25zdCBzZXRYID0gKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBhIGxlYWYgbm9kZVxuICAgICAgICAgICAgICAgIG5vZGUueCA9IHRoaXMueFNjYWxlKG5vZGUuZGF0YS5uYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gYW4gaW50ZXJuYWwgbm9kZVxuICAgICAgICAgICAgICAgIC8vIHRoZSB5IGNvb3JkaW5hdGUgb2YgYW4gaW50ZXJuYWwgbm9kZSBpcyB0aGUgYXZlcmFnZSB5IGZyb20gaXRzIGNoaWxkcmVuXG4gICAgICAgICAgICAgICAgbm9kZS54ID0gbm9kZS5jaGlsZHJlbi5yZWR1Y2UoKHN1bSwgZCk9PnN1bStkLngsIDApL25vZGUuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzZXRZID0gKG5vZGUpID0+IHtcbiAgICAgICAgICAgIG5vZGUueSA9IHRoaXMueVNjYWxlKHRoaXMuX2dldEJyYW5jaExlbmd0aFRvUm9vdChub2RlKSk7XG4gICAgICAgIH07XG4gICAgICAgIC8vIGZyb20gdGhlIGxlYWYgbGV2ZWwgLT4gcm9vdFxuICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMuX3NvcnROb2Rlc0J5TGV2ZWwoKTtcbiAgICAgICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgc2V0WChub2RlKTtcbiAgICAgICAgICAgIHNldFkobm9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBkb20uc2VsZWN0QWxsKCcuYnJhbmNoJylcbiAgICAgICAgICAgIC5kYXRhKG5vZGVzKVxuICAgICAgICAgICAgLmVudGVyKCkuYXBwZW5kKFwibGluZVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ5MVwiLCAoZCkgPT4gZC55KVxuICAgICAgICAgICAgLmF0dHIoXCJ5MlwiLCAoZCkgPT4gZC5kYXRhLmxlbmd0aD9kLnkgLSB0aGlzLnlTY2FsZShkLmRhdGEubGVuZ3RoKTpkLnkpXG4gICAgICAgICAgICAuYXR0cihcIngxXCIsIChkKSA9PiBkLnggKyB0aGlzLnhTY2FsZS5iYW5kd2lkdGgoKS8yKVxuICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCAoZCkgPT4gZC54ICsgdGhpcy54U2NhbGUuYmFuZHdpZHRoKCkvMilcbiAgICAgICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiZ3JheVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgMSk7XG5cbiAgICAgICAgLy8gZm9yIGFsbCBpbnRlcm5hbCBub2Rlc1xuICAgICAgICBjb25zdCBpbm9kZXMgPSB0aGlzLnJvb3QuZGVzY2VuZGFudHMoKS5maWx0ZXIoKGQpPT5kLmhlaWdodCkuc29ydCgoYSxiKT0+Yi5oZWlnaHQtYS5oZWlnaHQpO1xuICAgICAgICBkb20uc2VsZWN0QWxsKCcuYXJtJylcbiAgICAgICAgICAgIC5kYXRhKGlub2RlcylcbiAgICAgICAgICAgIC5lbnRlcigpLmFwcGVuZChcImxpbmVcIilcbiAgICAgICAgICAgIC5hdHRyKFwieTFcIiwgKGQpID0+IGQueSlcbiAgICAgICAgICAgIC5hdHRyKFwieTJcIiwgKGQpID0+IGQueSlcbiAgICAgICAgICAgIC5hdHRyKFwieDFcIiwgKGQpID0+IGQuY2hpbGRyZW5bMF0ueCArIHRoaXMueFNjYWxlLmJhbmR3aWR0aCgpLzIpXG4gICAgICAgICAgICAuYXR0cihcIngyXCIsIChkKSA9PiBkLmNoaWxkcmVuWzFdLnggKyB0aGlzLnhTY2FsZS5iYW5kd2lkdGgoKS8yKVxuICAgICAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJncmF5XCIpXG4gICAgICAgICAgICAuYXR0cihcInN0cm9rZS13aWR0aFwiLCAxKTtcblxuICAgICAgICBkb20uc2VsZWN0QWxsKCcubm9kZScpXG4gICAgICAgICAgICAuZGF0YShpbm9kZXMpXG4gICAgICAgICAgICAuZW50ZXIoKS5hcHBlbmQoXCJjaXJjbGVcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY3hcIiwgKGQpID0+IGQueCArIHRoaXMueFNjYWxlLmJhbmR3aWR0aCgpLzIpXG4gICAgICAgICAgICAuYXR0cihcImN5XCIsIChkKSA9PiBkLnkpXG4gICAgICAgICAgICAuYXR0cihcInJcIiwgMilcbiAgICAgICAgICAgIC5hdHRyKCdmaWxsJywgJyMzMzMnKVxuICAgICAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIDAuNSlcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJkZW5kcm9ncmFtLW5vZGVcIilcbiAgICAgICAgICAgIC5vbihcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbihkKXtcbiAgICAgICAgICAgICAgICBkMy5zZWxlY3QodGhpcykuYXR0cihcInJcIiwgMyk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZC5sZWF2ZXMoKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm9uKFwibW91c2VvdXRcIiwgZnVuY3Rpb24oZCl7XG4gICAgICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLmF0dHIoXCJyXCIsIDIpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBheGlzXG4gICAgICAgIC8vIEFkZCB0aGUgeCBBeGlzXG4gICAgICAgIGRvbS5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAvLyAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7dGhpcy53aWR0aH0sIDApYClcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJkZW5kcm9ncmFtLWF4aXNcIilcbiAgICAgICAgICAgIC5jYWxsKFxuICAgICAgICAgICAgICAgIGF4aXNMZWZ0KHRoaXMueVNjYWxlKVxuICAgICAgICAgICAgICAgICAgICAudGlja3MoMylcbiAgICAgICAgICAgICAgICAvLyAudGlja1ZhbHVlcyhbTWF0aC5mbG9vcih0aGlzLl9nZXRNYXhCcmFuY2hMZW5ndGgoKS8yKSwgTWF0aC5mbG9vcih0aGlzLl9nZXRNYXhCcmFuY2hMZW5ndGgoKSldKVxuICAgICAgICAgICAgKTtcblxuICAgIH1cblxuICAgIF9nZXRCcmFuY2hMZW5ndGhUb1Jvb3Qobm9kZSkge1xuICAgICAgICAvLyBub2RlOiBhIGQzLmhpZXJhcmNoeSBub2RlXG4gICAgICAgIHJldHVybiBub2RlLnBhdGgodGhpcy5yb290KVxuICAgICAgICAgICAgLnJlZHVjZSgoc3VtLCBkKSA9PiBkLmRhdGEubGVuZ3RoP3N1bStkLmRhdGEubGVuZ3RoOnN1bSwgMCk7XG4gICAgfVxuXG4gICAgX2dldE1heEJyYW5jaExlbmd0aCgpIHtcbiAgICAgICAgLy8gdGhlIGFzc3VtcHRpb24gaGVyZSBpcyB0aGF0IGFsbCBsZWFmIG5vZGVzIGhhdmUgdGhlIHNhbWUgZGlzdGFuY2UgdG8gdGhlIHJvb3QuXG4gICAgICAgIGxldCBub2RlID0gdGhpcy5sZWF2ZXNbMF07IC8vIHJhbmRvbWx5IHBpY2tzIGEgbGVhZiBub2RlXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRCcmFuY2hMZW5ndGhUb1Jvb3Qobm9kZSk7XG4gICAgfVxuXG4gICAgX2Fzc2lnblBvc3RvcmRlcihub2RlKXtcbiAgICAgICAgLy8gYXNzaWducyBwb3N0LW9yZGVyIG9mIGFsbCBsZWFmIG5vZGVzXG4gICAgICAgIGlmKG5vZGUuY2hpbGRyZW4gPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAvLyBiYXNlIGNhc2VcbiAgICAgICAgICAgIHRoaXMucG9zdG9yZGVyLnB1c2gobm9kZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9hc3NpZ25Qb3N0b3JkZXIobm9kZS5jaGlsZHJlblswXSk7XG4gICAgICAgICAgICB0aGlzLl9hc3NpZ25Qb3N0b3JkZXIobm9kZS5jaGlsZHJlblsxXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfc2V0WFNjYWxlKCl7XG4gICAgICAgIGlmICgnaCcgPT0gdGhpcy5vcmllbnRhdGlvbil7XG4gICAgICAgICAgICB0aGlzLnhTY2FsZSA9IHNjYWxlTGluZWFyKClcbiAgICAgICAgICAgICAgICAuZG9tYWluKFswLCB0aGlzLl9nZXRNYXhCcmFuY2hMZW5ndGgoKV0pXG4gICAgICAgICAgICAgICAgLnJhbmdlKFswLCB0aGlzLndpZHRoXSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2Fzc2lnblBvc3RvcmRlcih0aGlzLnJvb3QpO1xuICAgICAgICAgICAgaWYgKHZlcmJvc2UpIGNvbnNvbGUubG9nKHRoaXMucG9zdG9yZGVyKTtcbiAgICAgICAgICAgIHRoaXMueFNjYWxlID0gc2NhbGVCYW5kKClcbiAgICAgICAgICAgICAgICAuZG9tYWluKHRoaXMucG9zdG9yZGVyLm1hcCgoZCkgPT4gZC5kYXRhLm5hbWUpKVxuICAgICAgICAgICAgICAgIC5yYW5nZShbMCwgdGhpcy53aWR0aF0pXG4gICAgICAgICAgICAgICAgLnBhZGRpbmcoLjA1KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9zZXRZU2NhbGUoKXtcbiAgICAgICAgaWYgKCdoJyA9PSB0aGlzLm9yaWVudGF0aW9uKXtcbiAgICAgICAgICAgIHRoaXMuX2Fzc2lnblBvc3RvcmRlcih0aGlzLnJvb3QpO1xuICAgICAgICAgICAgaWYgKHZlcmJvc2UpIGNvbnNvbGUubG9nKHRoaXMucG9zdG9yZGVyKTtcbiAgICAgICAgICAgIHRoaXMueVNjYWxlID0gc2NhbGVCYW5kKClcbiAgICAgICAgICAgICAgICAuZG9tYWluKHRoaXMucG9zdG9yZGVyLm1hcCgoZCkgPT4gZC5kYXRhLm5hbWUpKVxuICAgICAgICAgICAgICAgIC5yYW5nZShbMCwgdGhpcy5oZWlnaHRdKVxuICAgICAgICAgICAgICAgIC5wYWRkaW5nKC4wNSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnlTY2FsZSA9IHNjYWxlTGluZWFyKClcbiAgICAgICAgICAgICAgICAuZG9tYWluKFswLCB0aGlzLl9nZXRNYXhCcmFuY2hMZW5ndGgoKV0pXG4gICAgICAgICAgICAgICAgLnJhbmdlKFswLCB0aGlzLmhlaWdodF0pXG4gICAgICAgIH1cbiAgICB9XG5cbn0iLCIvLyBDb3B5cmlnaHQgMjAxMSBKYXNvbiBEYXZpZXMgaHR0cHM6Ly9naXRodWIuY29tL2phc29uZGF2aWVzL25ld2ljay5qc1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOZXdpY2socykge1xuICAgIHZhciBhbmNlc3RvcnMgPSBbXTtcbiAgICB2YXIgdHJlZSA9IHt9O1xuICAgIHZhciB0b2tlbnMgPSBzLnNwbGl0KC9cXHMqKDt8XFwofFxcKXwsfDopXFxzKi8pO1xuICAgIGZvciAodmFyIGk9MDsgaTx0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgY2FzZSAnKCc6IC8vIG5ldyBicmFuY2hzZXRcbiAgICAgICAgICB2YXIgc3VidHJlZSA9IHt9O1xuICAgICAgICAgIHRyZWUuYnJhbmNoc2V0ID0gW3N1YnRyZWVdO1xuICAgICAgICAgIGFuY2VzdG9ycy5wdXNoKHRyZWUpO1xuICAgICAgICAgIHRyZWUgPSBzdWJ0cmVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICcsJzogLy8gYW5vdGhlciBicmFuY2hcbiAgICAgICAgICB2YXIgc3VidHJlZSA9IHt9O1xuICAgICAgICAgIGFuY2VzdG9yc1thbmNlc3RvcnMubGVuZ3RoLTFdLmJyYW5jaHNldC5wdXNoKHN1YnRyZWUpO1xuICAgICAgICAgIHRyZWUgPSBzdWJ0cmVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICcpJzogLy8gb3B0aW9uYWwgbmFtZSBuZXh0XG4gICAgICAgICAgdHJlZSA9IGFuY2VzdG9ycy5wb3AoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnOic6IC8vIG9wdGlvbmFsIGxlbmd0aCBuZXh0XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdmFyIHggPSB0b2tlbnNbaS0xXTtcbiAgICAgICAgICBpZiAoeCA9PSAnKScgfHwgeCA9PSAnKCcgfHwgeCA9PSAnLCcpIHtcbiAgICAgICAgICAgIHRyZWUubmFtZSA9IHRva2VuO1xuICAgICAgICAgIH0gZWxzZSBpZiAoeCA9PSAnOicpIHtcbiAgICAgICAgICAgIHRyZWUubGVuZ3RoID0gcGFyc2VGbG9hdCh0b2tlbik7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJlZTtcbn1cblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuaW1wb3J0IHtjcmVhdGVTdmd9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge3NlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG5pbXBvcnQgRGVuZHJvSGVhdG1hcENvbmZpZyBmcm9tIFwiLi9EZW5kcm9IZWF0bWFwQ29uZmlnXCI7XG5pbXBvcnQgRGVuZHJvZ3JhbSBmcm9tIFwiLi9EZW5kcm9ncmFtXCI7XG5pbXBvcnQgSGVhdG1hcCBmcm9tIFwiLi9IZWF0bWFwXCI7XG5pbXBvcnQgVG9vbHRpcCBmcm9tIFwiLi9Ub29sdGlwXCI7XG5pbXBvcnQgVG9vbGJhciBmcm9tIFwiLi9Ub29sYmFyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlbmRyb0hlYXRtYXAge1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0gY29sdW1uVHJlZSB7U3RyaW5nfSBhIG5ld2ljayB0cmVlXG4gICAgICogQHBhcmFtIHJvd1RyZWUge1N0cmluZ30gYSBuZXdpY2sgdHJlZVxuICAgICAqIEBwYXJhbSBoZWF0bWFwRGF0YSB7TGlzdH0gb2Ygb2JqZWN0cyB3aXRoIGF0dHJpYnV0ZXM6IHg6IFN0cmluZywgeTpTdHJpbmcsIHZhbHVlOkZsb2F0LCBkaXNwbGF5VmFsdWU6RmxvYXRcbiAgICAgKiBAcGFyYW0gY29sb3Ige1N0cmluZ30gYSBjb2xvciBuYW1lIHRoYXQncyBhdmFpbGFibGUgaW4gQ29sb3JzLmdldENvbG9ySW50ZXJwb2xhdG9yXG4gICAgICogQHBhcmFtIHIge0ludGVnZXJ9IHRoZSBkZWdyZWVzIG9mIHJvdW5kZWQtY29ybmVycyBvZiB0aGUgaGVhdG1hcCBjZWxsc1xuICAgICAqIEBwYXJhbSBjb25maWcge0RlbmRyb0hlYXRtYXBDb25maWd9XG4gICAgICogQHBhcmFtIHVzZUxvZyB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihjb2x1bW5UcmVlLCByb3dUcmVlLCBoZWF0bWFwRGF0YSwgY29sb3I9XCJZbEduQnVcIiwgcj0yLCBjb25maWc9bmV3IERlbmRyb0hlYXRtYXBDb25maWcoKSwgdG9vbHRpcElkPVwiZG1hcFRvb2x0aXBcIiwgdXNlTG9nPXRydWUsIGJhc2U9MTAsIHRpdGxlID0gJycpe1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZy5nZXQoKTtcbiAgICAgICAgLy9pbnB1dCBldmFsdWF0aW9uc1xuICAgICAgICBjb2x1bW5UcmVlID0gY29sdW1uVHJlZT09PXVuZGVmaW5lZHx8Y29sdW1uVHJlZS5zdGFydHNXaXRoKFwiTm90IGVub3VnaCBkYXRhXCIpP3VuZGVmaW5lZDpjb2x1bW5UcmVlO1xuICAgICAgICByb3dUcmVlID0gcm93VHJlZT09PXVuZGVmaW5lZHx8cm93VHJlZS5zdGFydHNXaXRoKFwiTm90IGVub3VnaCBkYXRhXCIpP3VuZGVmaW5lZDpyb3dUcmVlO1xuICAgICAgICAvLyBhc3NpZ24gYXR0cmlidXRlIHZhbHVlcyBiYXNlZCBvbiBpbnB1dCBhcmd1bWVudHNcbiAgICAgICAgdGhpcy5kYXRhID0ge1xuICAgICAgICAgICAgY29sdW1uVHJlZTogY29sdW1uVHJlZSxcbiAgICAgICAgICAgIHJvd1RyZWU6IHJvd1RyZWUsXG4gICAgICAgICAgICBoZWF0bWFwOiBoZWF0bWFwRGF0YSxcbiAgICAgICAgICAgIGV4dGVybmFsOiB1bmRlZmluZWRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vYmplY3RzID0ge1xuICAgICAgICAgICAgY29sdW1uVHJlZTogdGhpcy5kYXRhLmNvbHVtblRyZWU9PT11bmRlZmluZWQ/IHVuZGVmaW5lZDpuZXcgRGVuZHJvZ3JhbSh0aGlzLmRhdGEuY29sdW1uVHJlZSwgXCJ2XCIpLFxuICAgICAgICAgICAgcm93VHJlZTogdGhpcy5kYXRhLnJvd1RyZWU9PT11bmRlZmluZWQ/dW5kZWZpbmVkOm5ldyBEZW5kcm9ncmFtKHRoaXMuZGF0YS5yb3dUcmVlLCBcImhcIiksXG4gICAgICAgICAgICBoZWF0bWFwOiBuZXcgSGVhdG1hcCh0aGlzLmRhdGEuaGVhdG1hcCwgdXNlTG9nLCBiYXNlLCBjb2xvciwgciwgdG9vbHRpcElkKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnZpc3VhbENvbXBvbmVudHMgPSB7XG4gICAgICAgICAgICBzdmc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbHVtblRyZWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHJvd1RyZWU6IHVuZGVmaW5lZFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMudGl0bGUgPSB0aXRsZTtcbiAgICAgICAgdGhpcy50b29sYmFyID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnRvb2x0aXAgPSB0aGlzLm9iamVjdHMuaGVhdG1hcC50b29sdGlwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSB0aGUgdG9vbGJhciBwYW5lbFxuICAgICAqIEBwYXJhbSBkb21JZCB7U3RyaW5nfSB0aGUgdG9vbGJhcidzIGRvbSBJRFxuICAgICAqIEBwYXJhbSB0b29sdGlwIHtUb29sdGlwfVxuICAgICAqIEByZXR1cm5zIHtUb29sYmFyfVxuICAgICAqL1xuXG4gICAgY3JlYXRlVG9vbGJhcihkb21JZCwgdG9vbHRpcCl7XG4gICAgICAgIHRoaXMudG9vbGJhciA9IG5ldyBUb29sYmFyKGRvbUlkLCB0b29sdGlwKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbGJhcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW5kZXIgdGhlIGRlbmRyb2dyYW1zIGFuZCBjb3JyZXNwb25kaW5nIGhlYXRtYXBcbiAgICAgKiBAcGFyYW0gZG9tSWQge1N0cmluZ30gdGhlIHBhcmVudCBET00gaWQgb2YgdGhlIFNWR1xuICAgICAqIEBwYXJhbSBzdmdJZCB7U3RyaW5nfSBvZiB0aGUgU1ZHXG4gICAgICogQHBhcmFtIHNob3dDb2x1bW5UcmVlIHtCb29sZWFufSByZW5kZXIgdGhlIGNvbHVtbiBkZW5kcm9ncmFtXG4gICAgICogQHBhcmFtIHNob3dSb3dUcmVlIHtCb29sZWFufSByZW5kZXIgdGhlIHJvdyBkZW5kcm9ncmFtXG4gICAgICogQHBhcmFtIGxlZ2VuZFBvcyB7RW51bX0gd2hlcmUgdG8gcGxhY2UgdGhlIGNvbG9yIGxlZ2VuZDogYm90dG9tLCB0b3BcbiAgICAgKiBAcGFyYW0gdGlja3Mge0ludGVnZXJ9IG51bWJlciBvZiBiaW5zIG9mIHRoZSBjb2xvciBsZWdlbmRcbiAgICAgKi9cbiAgICByZW5kZXIoZG9tSWQsIHN2Z0lkLCBzaG93Q29sdW1uVHJlZT10cnVlLCBzaG93Um93VHJlZT10cnVlLCBsZWdlbmRQb3M9XCJ0b3BcIiwgdGlja3M9NSl7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUNvbmZpZyhsZWdlbmRQb3MpO1xuICAgICAgICB0aGlzLnZpc3VhbENvbXBvbmVudHMuc3ZnID0gY3JlYXRlU3ZnKGRvbUlkLCB0aGlzLmNvbmZpZy53LCB0aGlzLmNvbmZpZy5oLCB0aGlzLmNvbmZpZy5tYXJnaW4sIHN2Z0lkKTtcblxuICAgICAgICBsZXQgeGxpc3QgPSB1bmRlZmluZWQsXG4gICAgICAgICAgICB5bGlzdCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoc2hvd0NvbHVtblRyZWUgJiYgdGhpcy5vYmplY3RzLmNvbHVtblRyZWUhPT11bmRlZmluZWQpe1xuICAgICAgICAgICAgdGhpcy52aXN1YWxDb21wb25lbnRzLmNvbHVtblRyZWUgPSB0aGlzLl9yZW5kZXJUcmVlKFwiY29sdW1uXCIsIHRoaXMub2JqZWN0cy5jb2x1bW5UcmVlLCB0aGlzLmNvbmZpZy5wYW5lbHMudG9wKTtcbiAgICAgICAgICAgIHhsaXN0ID0gdGhpcy5vYmplY3RzLmNvbHVtblRyZWUueFNjYWxlLmRvbWFpbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaG93Um93VHJlZSAmJiB0aGlzLm9iamVjdHMucm93VHJlZSAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIHRoaXMudmlzdWFsQ29tcG9uZW50cy5yb3dUcmVlID0gdGhpcy5fcmVuZGVyVHJlZShcInJvd1wiLCB0aGlzLm9iamVjdHMucm93VHJlZSwgdGhpcy5jb25maWcucGFuZWxzLmxlZnQpO1xuICAgICAgICAgICAgeWxpc3QgPSB0aGlzLm9iamVjdHMucm93VHJlZS55U2NhbGUuZG9tYWluKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50aXRsZSAhPSAnJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy50aXRsZSk7XG4gICAgICAgICAgICBzZWxlY3QoYCMke2RvbUlkfS1zdmdgKS5hcHBlbmQoJ3RleHQnKVxuICAgICAgICAgICAgICAgIC5hdHRyKCd4JywgMClcbiAgICAgICAgICAgICAgICAuYXR0cigneScsIDIwKVxuICAgICAgICAgICAgICAgIC50ZXh0KHRoaXMudGl0bGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmVuZGVySGVhdG1hcCh0aGlzLm9iamVjdHMuaGVhdG1hcCwgeGxpc3QsIHlsaXN0LCB0aWNrcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVuZGVyIGEgbmV3aWNrIHRyZWVcbiAgICAgKiBAcGFyYW0gZGlyZWN0aW9uIHtlbnVtfSBjb2x1bW4gb3Igcm93XG4gICAgICogQHBhcmFtIHRyZWUge0RlbmRyb2dyYW19IGEgRGVuZHJvZ3JhbSBvYmplY3RcbiAgICAgKiBAcGFyYW0gY29uZmlnIHtPYmplY3R9IGEgcGFuZWwgY29uZmlnIHdpdGggYXR0cmlidXRlczogeCwgeSwgd2lkdGggYW5kIGhlaWdodFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3JlbmRlclRyZWUoZGlyZWN0aW9uLCB0cmVlLCBjb25maWcpe1xuICAgICAgICBsZXQgc3ZnID0gdGhpcy52aXN1YWxDb21wb25lbnRzLnN2ZztcbiAgICAgICAgY29uc3QgbGFiZWxDbGFzcyA9IGRpcmVjdGlvbj09XCJyb3dcIj9cIi5leHAtbWFwLXlsYWJlbFwiOlwiLmV4cC1tYXAteGxhYmVsXCI7XG5cbiAgICAgICAgY29uc3QgdG9vbHRpcCA9IHRoaXMudmlzdWFsQ29tcG9uZW50cy50b29sdGlwO1xuICAgICAgICBjb25zdCBnID0gc3ZnLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgIC5hdHRyKFwiaWRcIiwgY29uZmlnLmlkKVxuICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke2NvbmZpZy54fSwgJHtjb25maWcueX0pYCk7XG4gICAgICAgIHRyZWUuZHJhdyhnLCBjb25maWcudywgY29uZmlnLmgpO1xuXG4gICAgICAgIGNvbnN0IG1vdXNlb3V0ID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHNlbGVjdCh0aGlzKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiclwiLCAyKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcIiMzMzNcIik7XG4gICAgICAgICAgICBzdmcuc2VsZWN0QWxsKGxhYmVsQ2xhc3MpLmNsYXNzZWQoXCJoaWdobGlnaHRlZFwiLCBmYWxzZSk7XG4gICAgICAgICAgICBzdmcuc2VsZWN0QWxsKFwiLmxlYWYtY29sb3JcIikuY2xhc3NlZChcImhpZ2hsaWdodGVkXCIsIGZhbHNlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBtb3VzZW92ZXIgPSBmdW5jdGlvbihkKXtcbiAgICAgICAgICAgIHNlbGVjdCh0aGlzKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiclwiLCA2KVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcInJlZFwiKTtcbiAgICAgICAgICAgIGxldCBpZHMgPSBkLmxlYXZlcygpLm1hcCgobm9kZSk9Pm5vZGUuZGF0YS5uYW1lKTtcbiAgICAgICAgICAgIHN2Zy5zZWxlY3RBbGwobGFiZWxDbGFzcylcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChsYWJlbCk9Pmlkcy5pbmNsdWRlcyhsYWJlbCkpXG4gICAgICAgICAgICAgICAgLmNsYXNzZWQoXCJoaWdobGlnaHRlZFwiLCB0cnVlKTtcbiAgICAgICAgICAgIHN2Zy5zZWxlY3RBbGwoXCIubGVhZi1jb2xvclwiKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGxhYmVsKT0+aWRzLmluY2x1ZGVzKGxhYmVsKSlcbiAgICAgICAgICAgICAgICAuY2xhc3NlZChcImhpZ2hsaWdodGVkXCIsIHRydWUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGcuc2VsZWN0QWxsKFwiLmRlbmRyb2dyYW0tbm9kZVwiKVxuICAgICAgICAgICAgLm9uKFwibW91c2VvdmVyXCIsIG1vdXNlb3ZlcilcbiAgICAgICAgICAgIC5vbihcIm1vdXNlb3V0XCIsIG1vdXNlb3V0KTtcbiAgICAgICAgcmV0dXJuIGc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVuZGVyIHRoZSBoZWF0bWFwIGFuZCBjb2xvciBsZWdlbmRcbiAgICAgKiBAcGFyYW0gaGVhdG1hcCB7SGVhdG1hcH0gYSBIZWF0bWFwIG9iamVjdFxuICAgICAqIEBwYXJhbSB4TGlzdCB7TGlzdH0gYSBsaXN0IG9mIHggbGFiZWxzXG4gICAgICogQHBhcmFtIHlMaXN0IHtMaXN0fSBhIGxpc3Qgb2YgeSBsYWJlbHNcbiAgICAgKiBAcGFyYW0gdGlja3Mge0ludGVnZXJ9IHRoZSBudW1iZXIgb2YgYmlucyBpbiB0aGUgY29sb3IgbGVnZW5kXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfcmVuZGVySGVhdG1hcChoZWF0bWFwLCB4TGlzdCwgeUxpc3QsIHRpY2tzPTUpe1xuICAgICAgICBsZXQgZG9tID0gdGhpcy52aXN1YWxDb21wb25lbnRzLnN2ZztcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWcucGFuZWxzLm1haW47XG4gICAgICAgIGNvbnN0IGcgPSBkb20uYXBwZW5kKFwiZ1wiKVxuICAgICAgICAgICAgLmF0dHIoXCJpZFwiLCBjb25maWcuaWQpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7Y29uZmlnLnh9LCAke2NvbmZpZy55fSlgKTtcbiAgICAgICAgaGVhdG1hcC5yZWRyYXcoZywgeExpc3QsIHlMaXN0LCB7dzogY29uZmlnLncsIGg6IGNvbmZpZy5ofSk7XG4gICAgICAgIGhlYXRtYXAuZHJhd0NvbG9yTGVnZW5kKGRvbSwgdGhpcy5jb25maWcucGFuZWxzLmxlZ2VuZCwgdGlja3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkanVzdCB0aGUgbGF5b3V0IGRpbWVuc2lvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCBkYXRhXG4gICAgICogQHBhcmFtIGxlZ2VuZFBvcyB7U3RyaW5nfSBib3R0b20gb3IgdG9wXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfdXBkYXRlQ29uZmlnKGxlZ2VuZFBvcyl7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLm9iamVjdHMucm93VHJlZT09PXVuZGVmaW5lZD8xOnRoaXMub2JqZWN0cy5yb3dUcmVlLmxlYXZlcy5sZW5ndGg7XG5cbiAgICAgICAgLy8gdXBkYXRlcyB0aGUgbGVmdCBwYW5lbCdzIGhlaWdodCBiYXNlZCBvbiB0aGUgZGF0YVxuICAgICAgICB0aGlzLmNvbmZpZy5wYW5lbHMubGVmdC5oID0gdGhpcy5jb25maWcuY2VsbC5oICogcm93czwyMD8yMDp0aGlzLmNvbmZpZy5jZWxsLmggKiByb3dzO1xuICAgICAgICB0aGlzLmNvbmZpZy5oICs9IHRoaXMuY29uZmlnLnBhbmVscy5sZWZ0Lmg7XG4gICAgICAgIHRoaXMuY29uZmlnLnBhbmVscy5tYWluLmggPSB0aGlzLmNvbmZpZy5wYW5lbHMubGVmdC5oO1xuICAgICAgICBpZihsZWdlbmRQb3M9PVwiYm90dG9tXCIpIHRoaXMuY29uZmlnLnBhbmVscy5sZWdlbmQueSArPSB0aGlzLmNvbmZpZy5wYW5lbHMubWFpbi5oICsgdGhpcy5jb25maWcucGFuZWxzLm1haW4ueCArIDUwO1xuXG5cbiAgICB9XG59IiwidmFyIHBpID0gTWF0aC5QSSxcbiAgICB0YXUgPSAyICogcGksXG4gICAgZXBzaWxvbiA9IDFlLTYsXG4gICAgdGF1RXBzaWxvbiA9IHRhdSAtIGVwc2lsb247XG5cbmZ1bmN0aW9uIFBhdGgoKSB7XG4gIHRoaXMuX3gwID0gdGhpcy5feTAgPSAvLyBzdGFydCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgdGhpcy5feDEgPSB0aGlzLl95MSA9IG51bGw7IC8vIGVuZCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgdGhpcy5fID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gcGF0aCgpIHtcbiAgcmV0dXJuIG5ldyBQYXRoO1xufVxuXG5QYXRoLnByb3RvdHlwZSA9IHBhdGgucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogUGF0aCxcbiAgbW92ZVRvOiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gwID0gdGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MCA9IHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBjbG9zZVBhdGg6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl94MSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5feDEgPSB0aGlzLl94MCwgdGhpcy5feTEgPSB0aGlzLl95MDtcbiAgICAgIHRoaXMuXyArPSBcIlpcIjtcbiAgICB9XG4gIH0sXG4gIGxpbmVUbzogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIkxcIiArICh0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBxdWFkcmF0aWNDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJRXCIgKyAoK3gxKSArIFwiLFwiICsgKCt5MSkgKyBcIixcIiArICh0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBiZXppZXJDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIkNcIiArICgreDEpICsgXCIsXCIgKyAoK3kxKSArIFwiLFwiICsgKCt4MikgKyBcIixcIiArICgreTIpICsgXCIsXCIgKyAodGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgYXJjVG86IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCByKSB7XG4gICAgeDEgPSAreDEsIHkxID0gK3kxLCB4MiA9ICt4MiwgeTIgPSAreTIsIHIgPSArcjtcbiAgICB2YXIgeDAgPSB0aGlzLl94MSxcbiAgICAgICAgeTAgPSB0aGlzLl95MSxcbiAgICAgICAgeDIxID0geDIgLSB4MSxcbiAgICAgICAgeTIxID0geTIgLSB5MSxcbiAgICAgICAgeDAxID0geDAgLSB4MSxcbiAgICAgICAgeTAxID0geTAgLSB5MSxcbiAgICAgICAgbDAxXzIgPSB4MDEgKiB4MDEgKyB5MDEgKiB5MDE7XG5cbiAgICAvLyBJcyB0aGUgcmFkaXVzIG5lZ2F0aXZlPyBFcnJvci5cbiAgICBpZiAociA8IDApIHRocm93IG5ldyBFcnJvcihcIm5lZ2F0aXZlIHJhZGl1czogXCIgKyByKTtcblxuICAgIC8vIElzIHRoaXMgcGF0aCBlbXB0eT8gTW92ZSB0byAoeDEseTEpLlxuICAgIGlmICh0aGlzLl94MSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gxID0geDEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSk7XG4gICAgfVxuXG4gICAgLy8gT3IsIGlzICh4MSx5MSkgY29pbmNpZGVudCB3aXRoICh4MCx5MCk/IERvIG5vdGhpbmcuXG4gICAgZWxzZSBpZiAoIShsMDFfMiA+IGVwc2lsb24pKTtcblxuICAgIC8vIE9yLCBhcmUgKHgwLHkwKSwgKHgxLHkxKSBhbmQgKHgyLHkyKSBjb2xsaW5lYXI/XG4gICAgLy8gRXF1aXZhbGVudGx5LCBpcyAoeDEseTEpIGNvaW5jaWRlbnQgd2l0aCAoeDIseTIpP1xuICAgIC8vIE9yLCBpcyB0aGUgcmFkaXVzIHplcm8/IExpbmUgdG8gKHgxLHkxKS5cbiAgICBlbHNlIGlmICghKE1hdGguYWJzKHkwMSAqIHgyMSAtIHkyMSAqIHgwMSkgPiBlcHNpbG9uKSB8fCAhcikge1xuICAgICAgdGhpcy5fICs9IFwiTFwiICsgKHRoaXMuX3gxID0geDEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSk7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlLCBkcmF3IGFuIGFyYyFcbiAgICBlbHNlIHtcbiAgICAgIHZhciB4MjAgPSB4MiAtIHgwLFxuICAgICAgICAgIHkyMCA9IHkyIC0geTAsXG4gICAgICAgICAgbDIxXzIgPSB4MjEgKiB4MjEgKyB5MjEgKiB5MjEsXG4gICAgICAgICAgbDIwXzIgPSB4MjAgKiB4MjAgKyB5MjAgKiB5MjAsXG4gICAgICAgICAgbDIxID0gTWF0aC5zcXJ0KGwyMV8yKSxcbiAgICAgICAgICBsMDEgPSBNYXRoLnNxcnQobDAxXzIpLFxuICAgICAgICAgIGwgPSByICogTWF0aC50YW4oKHBpIC0gTWF0aC5hY29zKChsMjFfMiArIGwwMV8yIC0gbDIwXzIpIC8gKDIgKiBsMjEgKiBsMDEpKSkgLyAyKSxcbiAgICAgICAgICB0MDEgPSBsIC8gbDAxLFxuICAgICAgICAgIHQyMSA9IGwgLyBsMjE7XG5cbiAgICAgIC8vIElmIHRoZSBzdGFydCB0YW5nZW50IGlzIG5vdCBjb2luY2lkZW50IHdpdGggKHgwLHkwKSwgbGluZSB0by5cbiAgICAgIGlmIChNYXRoLmFicyh0MDEgLSAxKSA+IGVwc2lsb24pIHtcbiAgICAgICAgdGhpcy5fICs9IFwiTFwiICsgKHgxICsgdDAxICogeDAxKSArIFwiLFwiICsgKHkxICsgdDAxICogeTAxKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fICs9IFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsMCxcIiArICgrKHkwMSAqIHgyMCA+IHgwMSAqIHkyMCkpICsgXCIsXCIgKyAodGhpcy5feDEgPSB4MSArIHQyMSAqIHgyMSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkxICsgdDIxICogeTIxKTtcbiAgICB9XG4gIH0sXG4gIGFyYzogZnVuY3Rpb24oeCwgeSwgciwgYTAsIGExLCBjY3cpIHtcbiAgICB4ID0gK3gsIHkgPSAreSwgciA9ICtyO1xuICAgIHZhciBkeCA9IHIgKiBNYXRoLmNvcyhhMCksXG4gICAgICAgIGR5ID0gciAqIE1hdGguc2luKGEwKSxcbiAgICAgICAgeDAgPSB4ICsgZHgsXG4gICAgICAgIHkwID0geSArIGR5LFxuICAgICAgICBjdyA9IDEgXiBjY3csXG4gICAgICAgIGRhID0gY2N3ID8gYTAgLSBhMSA6IGExIC0gYTA7XG5cbiAgICAvLyBJcyB0aGUgcmFkaXVzIG5lZ2F0aXZlPyBFcnJvci5cbiAgICBpZiAociA8IDApIHRocm93IG5ldyBFcnJvcihcIm5lZ2F0aXZlIHJhZGl1czogXCIgKyByKTtcblxuICAgIC8vIElzIHRoaXMgcGF0aCBlbXB0eT8gTW92ZSB0byAoeDAseTApLlxuICAgIGlmICh0aGlzLl94MSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fICs9IFwiTVwiICsgeDAgKyBcIixcIiArIHkwO1xuICAgIH1cblxuICAgIC8vIE9yLCBpcyAoeDAseTApIG5vdCBjb2luY2lkZW50IHdpdGggdGhlIHByZXZpb3VzIHBvaW50PyBMaW5lIHRvICh4MCx5MCkuXG4gICAgZWxzZSBpZiAoTWF0aC5hYnModGhpcy5feDEgLSB4MCkgPiBlcHNpbG9uIHx8IE1hdGguYWJzKHRoaXMuX3kxIC0geTApID4gZXBzaWxvbikge1xuICAgICAgdGhpcy5fICs9IFwiTFwiICsgeDAgKyBcIixcIiArIHkwO1xuICAgIH1cblxuICAgIC8vIElzIHRoaXMgYXJjIGVtcHR5PyBXZeKAmXJlIGRvbmUuXG4gICAgaWYgKCFyKSByZXR1cm47XG5cbiAgICAvLyBEb2VzIHRoZSBhbmdsZSBnbyB0aGUgd3Jvbmcgd2F5PyBGbGlwIHRoZSBkaXJlY3Rpb24uXG4gICAgaWYgKGRhIDwgMCkgZGEgPSBkYSAlIHRhdSArIHRhdTtcblxuICAgIC8vIElzIHRoaXMgYSBjb21wbGV0ZSBjaXJjbGU/IERyYXcgdHdvIGFyY3MgdG8gY29tcGxldGUgdGhlIGNpcmNsZS5cbiAgICBpZiAoZGEgPiB0YXVFcHNpbG9uKSB7XG4gICAgICB0aGlzLl8gKz0gXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCwxLFwiICsgY3cgKyBcIixcIiArICh4IC0gZHgpICsgXCIsXCIgKyAoeSAtIGR5KSArIFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsMSxcIiArIGN3ICsgXCIsXCIgKyAodGhpcy5feDEgPSB4MCkgKyBcIixcIiArICh0aGlzLl95MSA9IHkwKTtcbiAgICB9XG5cbiAgICAvLyBJcyB0aGlzIGFyYyBub24tZW1wdHk/IERyYXcgYW4gYXJjIVxuICAgIGVsc2UgaWYgKGRhID4gZXBzaWxvbikge1xuICAgICAgdGhpcy5fICs9IFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsXCIgKyAoKyhkYSA+PSBwaSkpICsgXCIsXCIgKyBjdyArIFwiLFwiICsgKHRoaXMuX3gxID0geCArIHIgKiBNYXRoLmNvcyhhMSkpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5ICsgciAqIE1hdGguc2luKGExKSk7XG4gICAgfVxuICB9LFxuICByZWN0OiBmdW5jdGlvbih4LCB5LCB3LCBoKSB7XG4gICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gwID0gdGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MCA9IHRoaXMuX3kxID0gK3kpICsgXCJoXCIgKyAoK3cpICsgXCJ2XCIgKyAoK2gpICsgXCJoXCIgKyAoLXcpICsgXCJaXCI7XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBwYXRoO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24gY29uc3RhbnQoKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJmdW5jdGlvbiBMaW5lYXIoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuTGluZWFyLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHgsIHkpOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyAvLyBwcm9jZWVkXG4gICAgICBkZWZhdWx0OiB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgTGluZWFyKGNvbnRleHQpO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHgocCkge1xuICByZXR1cm4gcFswXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHkocCkge1xuICByZXR1cm4gcFsxXTtcbn1cbiIsImltcG9ydCB7cGF0aH0gZnJvbSBcImQzLXBhdGhcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuaW1wb3J0IGN1cnZlTGluZWFyIGZyb20gXCIuL2N1cnZlL2xpbmVhclwiO1xuaW1wb3J0IHt4IGFzIHBvaW50WCwgeSBhcyBwb2ludFl9IGZyb20gXCIuL3BvaW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgeCA9IHBvaW50WCxcbiAgICAgIHkgPSBwb2ludFksXG4gICAgICBkZWZpbmVkID0gY29uc3RhbnQodHJ1ZSksXG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIGN1cnZlID0gY3VydmVMaW5lYXIsXG4gICAgICBvdXRwdXQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGxpbmUoZGF0YSkge1xuICAgIHZhciBpLFxuICAgICAgICBuID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIGQsXG4gICAgICAgIGRlZmluZWQwID0gZmFsc2UsXG4gICAgICAgIGJ1ZmZlcjtcblxuICAgIGlmIChjb250ZXh0ID09IG51bGwpIG91dHB1dCA9IGN1cnZlKGJ1ZmZlciA9IHBhdGgoKSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IG47ICsraSkge1xuICAgICAgaWYgKCEoaSA8IG4gJiYgZGVmaW5lZChkID0gZGF0YVtpXSwgaSwgZGF0YSkpID09PSBkZWZpbmVkMCkge1xuICAgICAgICBpZiAoZGVmaW5lZDAgPSAhZGVmaW5lZDApIG91dHB1dC5saW5lU3RhcnQoKTtcbiAgICAgICAgZWxzZSBvdXRwdXQubGluZUVuZCgpO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmluZWQwKSBvdXRwdXQucG9pbnQoK3goZCwgaSwgZGF0YSksICt5KGQsIGksIGRhdGEpKTtcbiAgICB9XG5cbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gb3V0cHV0ID0gbnVsbCwgYnVmZmVyICsgXCJcIiB8fCBudWxsO1xuICB9XG5cbiAgbGluZS54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgbGluZSkgOiB4O1xuICB9O1xuXG4gIGxpbmUueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGxpbmUpIDogeTtcbiAgfTtcblxuICBsaW5lLmRlZmluZWQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZGVmaW5lZCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgbGluZSkgOiBkZWZpbmVkO1xuICB9O1xuXG4gIGxpbmUuY3VydmUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY3VydmUgPSBfLCBjb250ZXh0ICE9IG51bGwgJiYgKG91dHB1dCA9IGN1cnZlKGNvbnRleHQpKSwgbGluZSkgOiBjdXJ2ZTtcbiAgfTtcblxuICBsaW5lLmNvbnRleHQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoXyA9PSBudWxsID8gY29udGV4dCA9IG91dHB1dCA9IG51bGwgOiBvdXRwdXQgPSBjdXJ2ZShjb250ZXh0ID0gXyksIGxpbmUpIDogY29udGV4dDtcbiAgfTtcblxuICByZXR1cm4gbGluZTtcbn1cbiIsImltcG9ydCB7cGF0aH0gZnJvbSBcImQzLXBhdGhcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuaW1wb3J0IGN1cnZlTGluZWFyIGZyb20gXCIuL2N1cnZlL2xpbmVhclwiO1xuaW1wb3J0IGxpbmUgZnJvbSBcIi4vbGluZVwiO1xuaW1wb3J0IHt4IGFzIHBvaW50WCwgeSBhcyBwb2ludFl9IGZyb20gXCIuL3BvaW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgeDAgPSBwb2ludFgsXG4gICAgICB4MSA9IG51bGwsXG4gICAgICB5MCA9IGNvbnN0YW50KDApLFxuICAgICAgeTEgPSBwb2ludFksXG4gICAgICBkZWZpbmVkID0gY29uc3RhbnQodHJ1ZSksXG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIGN1cnZlID0gY3VydmVMaW5lYXIsXG4gICAgICBvdXRwdXQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGFyZWEoZGF0YSkge1xuICAgIHZhciBpLFxuICAgICAgICBqLFxuICAgICAgICBrLFxuICAgICAgICBuID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIGQsXG4gICAgICAgIGRlZmluZWQwID0gZmFsc2UsXG4gICAgICAgIGJ1ZmZlcixcbiAgICAgICAgeDB6ID0gbmV3IEFycmF5KG4pLFxuICAgICAgICB5MHogPSBuZXcgQXJyYXkobik7XG5cbiAgICBpZiAoY29udGV4dCA9PSBudWxsKSBvdXRwdXQgPSBjdXJ2ZShidWZmZXIgPSBwYXRoKCkpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8PSBuOyArK2kpIHtcbiAgICAgIGlmICghKGkgPCBuICYmIGRlZmluZWQoZCA9IGRhdGFbaV0sIGksIGRhdGEpKSA9PT0gZGVmaW5lZDApIHtcbiAgICAgICAgaWYgKGRlZmluZWQwID0gIWRlZmluZWQwKSB7XG4gICAgICAgICAgaiA9IGk7XG4gICAgICAgICAgb3V0cHV0LmFyZWFTdGFydCgpO1xuICAgICAgICAgIG91dHB1dC5saW5lU3RhcnQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRwdXQubGluZUVuZCgpO1xuICAgICAgICAgIG91dHB1dC5saW5lU3RhcnQoKTtcbiAgICAgICAgICBmb3IgKGsgPSBpIC0gMTsgayA+PSBqOyAtLWspIHtcbiAgICAgICAgICAgIG91dHB1dC5wb2ludCh4MHpba10sIHkweltrXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dHB1dC5saW5lRW5kKCk7XG4gICAgICAgICAgb3V0cHV0LmFyZWFFbmQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRlZmluZWQwKSB7XG4gICAgICAgIHgweltpXSA9ICt4MChkLCBpLCBkYXRhKSwgeTB6W2ldID0gK3kwKGQsIGksIGRhdGEpO1xuICAgICAgICBvdXRwdXQucG9pbnQoeDEgPyAreDEoZCwgaSwgZGF0YSkgOiB4MHpbaV0sIHkxID8gK3kxKGQsIGksIGRhdGEpIDogeTB6W2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gb3V0cHV0ID0gbnVsbCwgYnVmZmVyICsgXCJcIiB8fCBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gYXJlYWxpbmUoKSB7XG4gICAgcmV0dXJuIGxpbmUoKS5kZWZpbmVkKGRlZmluZWQpLmN1cnZlKGN1cnZlKS5jb250ZXh0KGNvbnRleHQpO1xuICB9XG5cbiAgYXJlYS54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHgwID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHgxID0gbnVsbCwgYXJlYSkgOiB4MDtcbiAgfTtcblxuICBhcmVhLngwID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHgwID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyZWEpIDogeDA7XG4gIH07XG5cbiAgYXJlYS54MSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4MSA9IF8gPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJlYSkgOiB4MTtcbiAgfTtcblxuICBhcmVhLnkgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeTAgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgeTEgPSBudWxsLCBhcmVhKSA6IHkwO1xuICB9O1xuXG4gIGFyZWEueTAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeTAgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJlYSkgOiB5MDtcbiAgfTtcblxuICBhcmVhLnkxID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHkxID0gXyA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmVhKSA6IHkxO1xuICB9O1xuXG4gIGFyZWEubGluZVgwID1cbiAgYXJlYS5saW5lWTAgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYXJlYWxpbmUoKS54KHgwKS55KHkwKTtcbiAgfTtcblxuICBhcmVhLmxpbmVZMSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBhcmVhbGluZSgpLngoeDApLnkoeTEpO1xuICB9O1xuXG4gIGFyZWEubGluZVgxID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGFyZWFsaW5lKCkueCh4MSkueSh5MCk7XG4gIH07XG5cbiAgYXJlYS5kZWZpbmVkID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRlZmluZWQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIGFyZWEpIDogZGVmaW5lZDtcbiAgfTtcblxuICBhcmVhLmN1cnZlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGN1cnZlID0gXywgY29udGV4dCAhPSBudWxsICYmIChvdXRwdXQgPSBjdXJ2ZShjb250ZXh0KSksIGFyZWEpIDogY3VydmU7XG4gIH07XG5cbiAgYXJlYS5jb250ZXh0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKF8gPT0gbnVsbCA/IGNvbnRleHQgPSBvdXRwdXQgPSBudWxsIDogb3V0cHV0ID0gY3VydmUoY29udGV4dCA9IF8pLCBhcmVhKSA6IGNvbnRleHQ7XG4gIH07XG5cbiAgcmV0dXJuIGFyZWE7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gcG9pbnQodGhhdCwgeCwgeSkge1xuICB0aGF0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oXG4gICAgdGhhdC5feDEgKyB0aGF0Ll9rICogKHRoYXQuX3gyIC0gdGhhdC5feDApLFxuICAgIHRoYXQuX3kxICsgdGhhdC5fayAqICh0aGF0Ll95MiAtIHRoYXQuX3kwKSxcbiAgICB0aGF0Ll94MiArIHRoYXQuX2sgKiAodGhhdC5feDEgLSB4KSxcbiAgICB0aGF0Ll95MiArIHRoYXQuX2sgKiAodGhhdC5feTEgLSB5KSxcbiAgICB0aGF0Ll94MixcbiAgICB0aGF0Ll95MlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2FyZGluYWwoY29udGV4dCwgdGVuc2lvbikge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5fayA9ICgxIC0gdGVuc2lvbikgLyA2O1xufVxuXG5DYXJkaW5hbC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gdGhpcy5feTIgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDI6IHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLCB0aGlzLl95Mik7IGJyZWFrO1xuICAgICAgY2FzZSAzOiBwb2ludCh0aGlzLCB0aGlzLl94MSwgdGhpcy5feTEpOyBicmVhaztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDEpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IHRoaXMuX3gxID0geCwgdGhpcy5feTEgPSB5OyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyAvLyBwcm9jZWVkXG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0gdGhpcy5feDIsIHRoaXMuX3gyID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHRoaXMuX3kyLCB0aGlzLl95MiA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20odGVuc2lvbikge1xuXG4gIGZ1bmN0aW9uIGNhcmRpbmFsKGNvbnRleHQpIHtcbiAgICByZXR1cm4gbmV3IENhcmRpbmFsKGNvbnRleHQsIHRlbnNpb24pO1xuICB9XG5cbiAgY2FyZGluYWwudGVuc2lvbiA9IGZ1bmN0aW9uKHRlbnNpb24pIHtcbiAgICByZXR1cm4gY3VzdG9tKCt0ZW5zaW9uKTtcbiAgfTtcblxuICByZXR1cm4gY2FyZGluYWw7XG59KSgwKTtcbiIsImZ1bmN0aW9uIHNpZ24oeCkge1xuICByZXR1cm4geCA8IDAgPyAtMSA6IDE7XG59XG5cbi8vIENhbGN1bGF0ZSB0aGUgc2xvcGVzIG9mIHRoZSB0YW5nZW50cyAoSGVybWl0ZS10eXBlIGludGVycG9sYXRpb24pIGJhc2VkIG9uXG4vLyB0aGUgZm9sbG93aW5nIHBhcGVyOiBTdGVmZmVuLCBNLiAxOTkwLiBBIFNpbXBsZSBNZXRob2QgZm9yIE1vbm90b25pY1xuLy8gSW50ZXJwb2xhdGlvbiBpbiBPbmUgRGltZW5zaW9uLiBBc3Ryb25vbXkgYW5kIEFzdHJvcGh5c2ljcywgVm9sLiAyMzksIE5PLlxuLy8gTk9WKElJKSwgUC4gNDQzLCAxOTkwLlxuZnVuY3Rpb24gc2xvcGUzKHRoYXQsIHgyLCB5Mikge1xuICB2YXIgaDAgPSB0aGF0Ll94MSAtIHRoYXQuX3gwLFxuICAgICAgaDEgPSB4MiAtIHRoYXQuX3gxLFxuICAgICAgczAgPSAodGhhdC5feTEgLSB0aGF0Ll95MCkgLyAoaDAgfHwgaDEgPCAwICYmIC0wKSxcbiAgICAgIHMxID0gKHkyIC0gdGhhdC5feTEpIC8gKGgxIHx8IGgwIDwgMCAmJiAtMCksXG4gICAgICBwID0gKHMwICogaDEgKyBzMSAqIGgwKSAvIChoMCArIGgxKTtcbiAgcmV0dXJuIChzaWduKHMwKSArIHNpZ24oczEpKSAqIE1hdGgubWluKE1hdGguYWJzKHMwKSwgTWF0aC5hYnMoczEpLCAwLjUgKiBNYXRoLmFicyhwKSkgfHwgMDtcbn1cblxuLy8gQ2FsY3VsYXRlIGEgb25lLXNpZGVkIHNsb3BlLlxuZnVuY3Rpb24gc2xvcGUyKHRoYXQsIHQpIHtcbiAgdmFyIGggPSB0aGF0Ll94MSAtIHRoYXQuX3gwO1xuICByZXR1cm4gaCA/ICgzICogKHRoYXQuX3kxIC0gdGhhdC5feTApIC8gaCAtIHQpIC8gMiA6IHQ7XG59XG5cbi8vIEFjY29yZGluZyB0byBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DdWJpY19IZXJtaXRlX3NwbGluZSNSZXByZXNlbnRhdGlvbnNcbi8vIFwieW91IGNhbiBleHByZXNzIGN1YmljIEhlcm1pdGUgaW50ZXJwb2xhdGlvbiBpbiB0ZXJtcyBvZiBjdWJpYyBCw6l6aWVyIGN1cnZlc1xuLy8gd2l0aCByZXNwZWN0IHRvIHRoZSBmb3VyIHZhbHVlcyBwMCwgcDAgKyBtMCAvIDMsIHAxIC0gbTEgLyAzLCBwMVwiLlxuZnVuY3Rpb24gcG9pbnQodGhhdCwgdDAsIHQxKSB7XG4gIHZhciB4MCA9IHRoYXQuX3gwLFxuICAgICAgeTAgPSB0aGF0Ll95MCxcbiAgICAgIHgxID0gdGhhdC5feDEsXG4gICAgICB5MSA9IHRoYXQuX3kxLFxuICAgICAgZHggPSAoeDEgLSB4MCkgLyAzO1xuICB0aGF0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oeDAgKyBkeCwgeTAgKyBkeCAqIHQwLCB4MSAtIGR4LCB5MSAtIGR4ICogdDEsIHgxLCB5MSk7XG59XG5cbmZ1bmN0aW9uIE1vbm90b25lWChjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5Nb25vdG9uZVgucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPVxuICAgIHRoaXMuX3QwID0gTmFOO1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAyOiB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSwgdGhpcy5feTEpOyBicmVhaztcbiAgICAgIGNhc2UgMzogcG9pbnQodGhpcywgdGhpcy5fdDAsIHNsb3BlMih0aGlzLCB0aGlzLl90MCkpOyBicmVhaztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDEpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB2YXIgdDEgPSBOYU47XG5cbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBpZiAoeCA9PT0gdGhpcy5feDEgJiYgeSA9PT0gdGhpcy5feTEpIHJldHVybjsgLy8gSWdub3JlIGNvaW5jaWRlbnQgcG9pbnRzLlxuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgYnJlYWs7XG4gICAgICBjYXNlIDI6IHRoaXMuX3BvaW50ID0gMzsgcG9pbnQodGhpcywgc2xvcGUyKHRoaXMsIHQxID0gc2xvcGUzKHRoaXMsIHgsIHkpKSwgdDEpOyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHRoaXMuX3QwLCB0MSA9IHNsb3BlMyh0aGlzLCB4LCB5KSk7IGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHk7XG4gICAgdGhpcy5fdDAgPSB0MTtcbiAgfVxufVxuXG5mdW5jdGlvbiBNb25vdG9uZVkoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gbmV3IFJlZmxlY3RDb250ZXh0KGNvbnRleHQpO1xufVxuXG4oTW9ub3RvbmVZLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTW9ub3RvbmVYLnByb3RvdHlwZSkpLnBvaW50ID0gZnVuY3Rpb24oeCwgeSkge1xuICBNb25vdG9uZVgucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcywgeSwgeCk7XG59O1xuXG5mdW5jdGlvbiBSZWZsZWN0Q29udGV4dChjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5SZWZsZWN0Q29udGV4dC5wcm90b3R5cGUgPSB7XG4gIG1vdmVUbzogZnVuY3Rpb24oeCwgeSkgeyB0aGlzLl9jb250ZXh0Lm1vdmVUbyh5LCB4KTsgfSxcbiAgY2xvc2VQYXRoOiBmdW5jdGlvbigpIHsgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTsgfSxcbiAgbGluZVRvOiBmdW5jdGlvbih4LCB5KSB7IHRoaXMuX2NvbnRleHQubGluZVRvKHksIHgpOyB9LFxuICBiZXppZXJDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgeCwgeSkgeyB0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oeTEsIHgxLCB5MiwgeDIsIHksIHgpOyB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gbW9ub3RvbmVYKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBNb25vdG9uZVgoY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb25vdG9uZVkoY29udGV4dCkge1xuICByZXR1cm4gbmV3IE1vbm90b25lWShjb250ZXh0KTtcbn1cbiIsImltcG9ydCB7ZXZlbnR9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcHJvcGFnYXRpb24oKSB7XG4gIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59XG4iLCJpbXBvcnQge3NlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IG5vZXZlbnQgZnJvbSBcIi4vbm9ldmVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2aWV3KSB7XG4gIHZhciByb290ID0gdmlldy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4gICAgICBzZWxlY3Rpb24gPSBzZWxlY3Qodmlldykub24oXCJkcmFnc3RhcnQuZHJhZ1wiLCBub2V2ZW50LCB0cnVlKTtcbiAgaWYgKFwib25zZWxlY3RzdGFydFwiIGluIHJvb3QpIHtcbiAgICBzZWxlY3Rpb24ub24oXCJzZWxlY3RzdGFydC5kcmFnXCIsIG5vZXZlbnQsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIHJvb3QuX19ub3NlbGVjdCA9IHJvb3Quc3R5bGUuTW96VXNlclNlbGVjdDtcbiAgICByb290LnN0eWxlLk1velVzZXJTZWxlY3QgPSBcIm5vbmVcIjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24geWVzZHJhZyh2aWV3LCBub2NsaWNrKSB7XG4gIHZhciByb290ID0gdmlldy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4gICAgICBzZWxlY3Rpb24gPSBzZWxlY3Qodmlldykub24oXCJkcmFnc3RhcnQuZHJhZ1wiLCBudWxsKTtcbiAgaWYgKG5vY2xpY2spIHtcbiAgICBzZWxlY3Rpb24ub24oXCJjbGljay5kcmFnXCIsIG5vZXZlbnQsIHRydWUpO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHNlbGVjdGlvbi5vbihcImNsaWNrLmRyYWdcIiwgbnVsbCk7IH0sIDApO1xuICB9XG4gIGlmIChcIm9uc2VsZWN0c3RhcnRcIiBpbiByb290KSB7XG4gICAgc2VsZWN0aW9uLm9uKFwic2VsZWN0c3RhcnQuZHJhZ1wiLCBudWxsKTtcbiAgfSBlbHNlIHtcbiAgICByb290LnN0eWxlLk1velVzZXJTZWxlY3QgPSByb290Ll9fbm9zZWxlY3Q7XG4gICAgZGVsZXRlIHJvb3QuX19ub3NlbGVjdDtcbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0YXJnZXQsIHR5cGUsIHNlbGVjdGlvbikge1xuICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247XG59XG4iLCJpbXBvcnQge2V2ZW50fSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBub3Byb3BhZ2F0aW9uKCkge1xuICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufVxuIiwiaW1wb3J0IHtkaXNwYXRjaH0gZnJvbSBcImQzLWRpc3BhdGNoXCI7XG5pbXBvcnQge2RyYWdEaXNhYmxlLCBkcmFnRW5hYmxlfSBmcm9tIFwiZDMtZHJhZ1wiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge2N1c3RvbUV2ZW50LCBldmVudCwgbW91c2UsIHNlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtpbnRlcnJ1cHR9IGZyb20gXCJkMy10cmFuc2l0aW9uXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcbmltcG9ydCBCcnVzaEV2ZW50IGZyb20gXCIuL2V2ZW50XCI7XG5pbXBvcnQgbm9ldmVudCwge25vcHJvcGFnYXRpb259IGZyb20gXCIuL25vZXZlbnRcIjtcblxudmFyIE1PREVfRFJBRyA9IHtuYW1lOiBcImRyYWdcIn0sXG4gICAgTU9ERV9TUEFDRSA9IHtuYW1lOiBcInNwYWNlXCJ9LFxuICAgIE1PREVfSEFORExFID0ge25hbWU6IFwiaGFuZGxlXCJ9LFxuICAgIE1PREVfQ0VOVEVSID0ge25hbWU6IFwiY2VudGVyXCJ9O1xuXG52YXIgWCA9IHtcbiAgbmFtZTogXCJ4XCIsXG4gIGhhbmRsZXM6IFtcImVcIiwgXCJ3XCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHgsIGUpIHsgcmV0dXJuIHggJiYgW1t4WzBdLCBlWzBdWzFdXSwgW3hbMV0sIGVbMV1bMV1dXTsgfSxcbiAgb3V0cHV0OiBmdW5jdGlvbih4eSkgeyByZXR1cm4geHkgJiYgW3h5WzBdWzBdLCB4eVsxXVswXV07IH1cbn07XG5cbnZhciBZID0ge1xuICBuYW1lOiBcInlcIixcbiAgaGFuZGxlczogW1wiblwiLCBcInNcIl0ubWFwKHR5cGUpLFxuICBpbnB1dDogZnVuY3Rpb24oeSwgZSkgeyByZXR1cm4geSAmJiBbW2VbMF1bMF0sIHlbMF1dLCBbZVsxXVswXSwgeVsxXV1dOyB9LFxuICBvdXRwdXQ6IGZ1bmN0aW9uKHh5KSB7IHJldHVybiB4eSAmJiBbeHlbMF1bMV0sIHh5WzFdWzFdXTsgfVxufTtcblxudmFyIFhZID0ge1xuICBuYW1lOiBcInh5XCIsXG4gIGhhbmRsZXM6IFtcIm5cIiwgXCJlXCIsIFwic1wiLCBcIndcIiwgXCJud1wiLCBcIm5lXCIsIFwic2VcIiwgXCJzd1wiXS5tYXAodHlwZSksXG4gIGlucHV0OiBmdW5jdGlvbih4eSkgeyByZXR1cm4geHk7IH0sXG4gIG91dHB1dDogZnVuY3Rpb24oeHkpIHsgcmV0dXJuIHh5OyB9XG59O1xuXG52YXIgY3Vyc29ycyA9IHtcbiAgb3ZlcmxheTogXCJjcm9zc2hhaXJcIixcbiAgc2VsZWN0aW9uOiBcIm1vdmVcIixcbiAgbjogXCJucy1yZXNpemVcIixcbiAgZTogXCJldy1yZXNpemVcIixcbiAgczogXCJucy1yZXNpemVcIixcbiAgdzogXCJldy1yZXNpemVcIixcbiAgbnc6IFwibndzZS1yZXNpemVcIixcbiAgbmU6IFwibmVzdy1yZXNpemVcIixcbiAgc2U6IFwibndzZS1yZXNpemVcIixcbiAgc3c6IFwibmVzdy1yZXNpemVcIlxufTtcblxudmFyIGZsaXBYID0ge1xuICBlOiBcIndcIixcbiAgdzogXCJlXCIsXG4gIG53OiBcIm5lXCIsXG4gIG5lOiBcIm53XCIsXG4gIHNlOiBcInN3XCIsXG4gIHN3OiBcInNlXCJcbn07XG5cbnZhciBmbGlwWSA9IHtcbiAgbjogXCJzXCIsXG4gIHM6IFwiblwiLFxuICBudzogXCJzd1wiLFxuICBuZTogXCJzZVwiLFxuICBzZTogXCJuZVwiLFxuICBzdzogXCJud1wiXG59O1xuXG52YXIgc2lnbnNYID0ge1xuICBvdmVybGF5OiArMSxcbiAgc2VsZWN0aW9uOiArMSxcbiAgbjogbnVsbCxcbiAgZTogKzEsXG4gIHM6IG51bGwsXG4gIHc6IC0xLFxuICBudzogLTEsXG4gIG5lOiArMSxcbiAgc2U6ICsxLFxuICBzdzogLTFcbn07XG5cbnZhciBzaWduc1kgPSB7XG4gIG92ZXJsYXk6ICsxLFxuICBzZWxlY3Rpb246ICsxLFxuICBuOiAtMSxcbiAgZTogbnVsbCxcbiAgczogKzEsXG4gIHc6IG51bGwsXG4gIG53OiAtMSxcbiAgbmU6IC0xLFxuICBzZTogKzEsXG4gIHN3OiArMVxufTtcblxuZnVuY3Rpb24gdHlwZSh0KSB7XG4gIHJldHVybiB7dHlwZTogdH07XG59XG5cbi8vIElnbm9yZSByaWdodC1jbGljaywgc2luY2UgdGhhdCBzaG91bGQgb3BlbiB0aGUgY29udGV4dCBtZW51LlxuZnVuY3Rpb24gZGVmYXVsdEZpbHRlcigpIHtcbiAgcmV0dXJuICFldmVudC5idXR0b247XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRFeHRlbnQoKSB7XG4gIHZhciBzdmcgPSB0aGlzLm93bmVyU1ZHRWxlbWVudCB8fCB0aGlzO1xuICByZXR1cm4gW1swLCAwXSwgW3N2Zy53aWR0aC5iYXNlVmFsLnZhbHVlLCBzdmcuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXTtcbn1cblxuLy8gTGlrZSBkMy5sb2NhbCwgYnV0IHdpdGggdGhlIG5hbWUg4oCcX19icnVzaOKAnSByYXRoZXIgdGhhbiBhdXRvLWdlbmVyYXRlZC5cbmZ1bmN0aW9uIGxvY2FsKG5vZGUpIHtcbiAgd2hpbGUgKCFub2RlLl9fYnJ1c2gpIGlmICghKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSByZXR1cm47XG4gIHJldHVybiBub2RlLl9fYnJ1c2g7XG59XG5cbmZ1bmN0aW9uIGVtcHR5KGV4dGVudCkge1xuICByZXR1cm4gZXh0ZW50WzBdWzBdID09PSBleHRlbnRbMV1bMF1cbiAgICAgIHx8IGV4dGVudFswXVsxXSA9PT0gZXh0ZW50WzFdWzFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJ1c2hTZWxlY3Rpb24obm9kZSkge1xuICB2YXIgc3RhdGUgPSBub2RlLl9fYnJ1c2g7XG4gIHJldHVybiBzdGF0ZSA/IHN0YXRlLmRpbS5vdXRwdXQoc3RhdGUuc2VsZWN0aW9uKSA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicnVzaFgoKSB7XG4gIHJldHVybiBicnVzaChYKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJydXNoWSgpIHtcbiAgcmV0dXJuIGJydXNoKFkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGJydXNoKFhZKTtcbn1cblxuZnVuY3Rpb24gYnJ1c2goZGltKSB7XG4gIHZhciBleHRlbnQgPSBkZWZhdWx0RXh0ZW50LFxuICAgICAgZmlsdGVyID0gZGVmYXVsdEZpbHRlcixcbiAgICAgIGxpc3RlbmVycyA9IGRpc3BhdGNoKGJydXNoLCBcInN0YXJ0XCIsIFwiYnJ1c2hcIiwgXCJlbmRcIiksXG4gICAgICBoYW5kbGVTaXplID0gNixcbiAgICAgIHRvdWNoZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGJydXNoKGdyb3VwKSB7XG4gICAgdmFyIG92ZXJsYXkgPSBncm91cFxuICAgICAgICAucHJvcGVydHkoXCJfX2JydXNoXCIsIGluaXRpYWxpemUpXG4gICAgICAuc2VsZWN0QWxsKFwiLm92ZXJsYXlcIilcbiAgICAgIC5kYXRhKFt0eXBlKFwib3ZlcmxheVwiKV0pO1xuXG4gICAgb3ZlcmxheS5lbnRlcigpLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcIm92ZXJsYXlcIilcbiAgICAgICAgLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcImFsbFwiKVxuICAgICAgICAuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLm92ZXJsYXkpXG4gICAgICAubWVyZ2Uob3ZlcmxheSlcbiAgICAgICAgLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGV4dGVudCA9IGxvY2FsKHRoaXMpLmV4dGVudDtcbiAgICAgICAgICBzZWxlY3QodGhpcylcbiAgICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGV4dGVudFswXVswXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGV4dGVudFswXVsxXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBleHRlbnRbMV1bMF0gLSBleHRlbnRbMF1bMF0pXG4gICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGV4dGVudFsxXVsxXSAtIGV4dGVudFswXVsxXSk7XG4gICAgICAgIH0pO1xuXG4gICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvblwiKVxuICAgICAgLmRhdGEoW3R5cGUoXCJzZWxlY3Rpb25cIildKVxuICAgICAgLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwic2VsZWN0aW9uXCIpXG4gICAgICAgIC5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnMuc2VsZWN0aW9uKVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCIjNzc3XCIpXG4gICAgICAgIC5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsIDAuMylcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCIjZmZmXCIpXG4gICAgICAgIC5hdHRyKFwic2hhcGUtcmVuZGVyaW5nXCIsIFwiY3Jpc3BFZGdlc1wiKTtcblxuICAgIHZhciBoYW5kbGUgPSBncm91cC5zZWxlY3RBbGwoXCIuaGFuZGxlXCIpXG4gICAgICAuZGF0YShkaW0uaGFuZGxlcywgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlOyB9KTtcblxuICAgIGhhbmRsZS5leGl0KCkucmVtb3ZlKCk7XG5cbiAgICBoYW5kbGUuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gXCJoYW5kbGUgaGFuZGxlLS1cIiArIGQudHlwZTsgfSlcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gY3Vyc29yc1tkLnR5cGVdOyB9KTtcblxuICAgIGdyb3VwXG4gICAgICAgIC5lYWNoKHJlZHJhdylcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKVxuICAgICAgICAuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsIFwiYWxsXCIpXG4gICAgICAgIC5zdHlsZShcIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvclwiLCBcInJnYmEoMCwwLDAsMClcIilcbiAgICAgICAgLm9uKFwibW91c2Vkb3duLmJydXNoIHRvdWNoc3RhcnQuYnJ1c2hcIiwgc3RhcnRlZCk7XG4gIH1cblxuICBicnVzaC5tb3ZlID0gZnVuY3Rpb24oZ3JvdXAsIHNlbGVjdGlvbikge1xuICAgIGlmIChncm91cC5zZWxlY3Rpb24pIHtcbiAgICAgIGdyb3VwXG4gICAgICAgICAgLm9uKFwic3RhcnQuYnJ1c2hcIiwgZnVuY3Rpb24oKSB7IGVtaXR0ZXIodGhpcywgYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCk7IH0pXG4gICAgICAgICAgLm9uKFwiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaFwiLCBmdW5jdGlvbigpIHsgZW1pdHRlcih0aGlzLCBhcmd1bWVudHMpLmVuZCgpOyB9KVxuICAgICAgICAgIC50d2VlbihcImJydXNoXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIHN0YXRlID0gdGhhdC5fX2JydXNoLFxuICAgICAgICAgICAgICAgIGVtaXQgPSBlbWl0dGVyKHRoYXQsIGFyZ3VtZW50cyksXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMCA9IHN0YXRlLnNlbGVjdGlvbixcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24xID0gZGltLmlucHV0KHR5cGVvZiBzZWxlY3Rpb24gPT09IFwiZnVuY3Rpb25cIiA/IHNlbGVjdGlvbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogc2VsZWN0aW9uLCBzdGF0ZS5leHRlbnQpLFxuICAgICAgICAgICAgICAgIGkgPSBpbnRlcnBvbGF0ZShzZWxlY3Rpb24wLCBzZWxlY3Rpb24xKTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gdHdlZW4odCkge1xuICAgICAgICAgICAgICBzdGF0ZS5zZWxlY3Rpb24gPSB0ID09PSAxICYmIGVtcHR5KHNlbGVjdGlvbjEpID8gbnVsbCA6IGkodCk7XG4gICAgICAgICAgICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgICAgICAgICAgICBlbWl0LmJydXNoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb24wICYmIHNlbGVjdGlvbjEgPyB0d2VlbiA6IHR3ZWVuKDEpO1xuICAgICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cFxuICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgICAgICAgc3RhdGUgPSB0aGF0Ll9fYnJ1c2gsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMSA9IGRpbS5pbnB1dCh0eXBlb2Ygc2VsZWN0aW9uID09PSBcImZ1bmN0aW9uXCIgPyBzZWxlY3Rpb24uYXBwbHkodGhhdCwgYXJncykgOiBzZWxlY3Rpb24sIHN0YXRlLmV4dGVudCksXG4gICAgICAgICAgICAgICAgZW1pdCA9IGVtaXR0ZXIodGhhdCwgYXJncykuYmVmb3Jlc3RhcnQoKTtcblxuICAgICAgICAgICAgaW50ZXJydXB0KHRoYXQpO1xuICAgICAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gc2VsZWN0aW9uMSA9PSBudWxsIHx8IGVtcHR5KHNlbGVjdGlvbjEpID8gbnVsbCA6IHNlbGVjdGlvbjE7XG4gICAgICAgICAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgICAgICAgIGVtaXQuc3RhcnQoKS5icnVzaCgpLmVuZCgpO1xuICAgICAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiByZWRyYXcoKSB7XG4gICAgdmFyIGdyb3VwID0gc2VsZWN0KHRoaXMpLFxuICAgICAgICBzZWxlY3Rpb24gPSBsb2NhbCh0aGlzKS5zZWxlY3Rpb247XG5cbiAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICBncm91cC5zZWxlY3RBbGwoXCIuc2VsZWN0aW9uXCIpXG4gICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwieFwiLCBzZWxlY3Rpb25bMF1bMF0pXG4gICAgICAgICAgLmF0dHIoXCJ5XCIsIHNlbGVjdGlvblswXVsxXSlcbiAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIHNlbGVjdGlvblsxXVswXSAtIHNlbGVjdGlvblswXVswXSlcbiAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBzZWxlY3Rpb25bMV1bMV0gLSBzZWxlY3Rpb25bMF1bMV0pO1xuXG4gICAgICBncm91cC5zZWxlY3RBbGwoXCIuaGFuZGxlXCIpXG4gICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwieFwiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnR5cGVbZC50eXBlLmxlbmd0aCAtIDFdID09PSBcImVcIiA/IHNlbGVjdGlvblsxXVswXSAtIGhhbmRsZVNpemUgLyAyIDogc2VsZWN0aW9uWzBdWzBdIC0gaGFuZGxlU2l6ZSAvIDI7IH0pXG4gICAgICAgICAgLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZVswXSA9PT0gXCJzXCIgPyBzZWxlY3Rpb25bMV1bMV0gLSBoYW5kbGVTaXplIC8gMiA6IHNlbGVjdGlvblswXVsxXSAtIGhhbmRsZVNpemUgLyAyOyB9KVxuICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlID09PSBcIm5cIiB8fCBkLnR5cGUgPT09IFwic1wiID8gc2VsZWN0aW9uWzFdWzBdIC0gc2VsZWN0aW9uWzBdWzBdICsgaGFuZGxlU2l6ZSA6IGhhbmRsZVNpemU7IH0pXG4gICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlID09PSBcImVcIiB8fCBkLnR5cGUgPT09IFwid1wiID8gc2VsZWN0aW9uWzFdWzFdIC0gc2VsZWN0aW9uWzBdWzFdICsgaGFuZGxlU2l6ZSA6IGhhbmRsZVNpemU7IH0pO1xuICAgIH1cblxuICAgIGVsc2Uge1xuICAgICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvbiwuaGFuZGxlXCIpXG4gICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBcIm5vbmVcIilcbiAgICAgICAgICAuYXR0cihcInhcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcInlcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZW1pdHRlcih0aGF0LCBhcmdzKSB7XG4gICAgcmV0dXJuIHRoYXQuX19icnVzaC5lbWl0dGVyIHx8IG5ldyBFbWl0dGVyKHRoYXQsIGFyZ3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gRW1pdHRlcih0aGF0LCBhcmdzKSB7XG4gICAgdGhpcy50aGF0ID0gdGhhdDtcbiAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgIHRoaXMuc3RhdGUgPSB0aGF0Ll9fYnJ1c2g7XG4gICAgdGhpcy5hY3RpdmUgPSAwO1xuICB9XG5cbiAgRW1pdHRlci5wcm90b3R5cGUgPSB7XG4gICAgYmVmb3Jlc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCsrdGhpcy5hY3RpdmUgPT09IDEpIHRoaXMuc3RhdGUuZW1pdHRlciA9IHRoaXMsIHRoaXMuc3RhcnRpbmcgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBzdGFydDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5zdGFydGluZykgdGhpcy5zdGFydGluZyA9IGZhbHNlLCB0aGlzLmVtaXQoXCJzdGFydFwiKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgYnJ1c2g6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5lbWl0KFwiYnJ1c2hcIik7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVuZDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aGlzLmFjdGl2ZSA9PT0gMCkgZGVsZXRlIHRoaXMuc3RhdGUuZW1pdHRlciwgdGhpcy5lbWl0KFwiZW5kXCIpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBlbWl0OiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICBjdXN0b21FdmVudChuZXcgQnJ1c2hFdmVudChicnVzaCwgdHlwZSwgZGltLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLCBsaXN0ZW5lcnMuYXBwbHksIGxpc3RlbmVycywgW3R5cGUsIHRoaXMudGhhdCwgdGhpcy5hcmdzXSk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHN0YXJ0ZWQoKSB7XG4gICAgaWYgKGV2ZW50LnRvdWNoZXMpIHsgaWYgKGV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aCA8IGV2ZW50LnRvdWNoZXMubGVuZ3RoKSByZXR1cm4gbm9ldmVudCgpOyB9XG4gICAgZWxzZSBpZiAodG91Y2hlbmRpbmcpIHJldHVybjtcbiAgICBpZiAoIWZpbHRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSByZXR1cm47XG5cbiAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHR5cGUgPSBldmVudC50YXJnZXQuX19kYXRhX18udHlwZSxcbiAgICAgICAgbW9kZSA9IChldmVudC5tZXRhS2V5ID8gdHlwZSA9IFwib3ZlcmxheVwiIDogdHlwZSkgPT09IFwic2VsZWN0aW9uXCIgPyBNT0RFX0RSQUcgOiAoZXZlbnQuYWx0S2V5ID8gTU9ERV9DRU5URVIgOiBNT0RFX0hBTkRMRSksXG4gICAgICAgIHNpZ25YID0gZGltID09PSBZID8gbnVsbCA6IHNpZ25zWFt0eXBlXSxcbiAgICAgICAgc2lnblkgPSBkaW0gPT09IFggPyBudWxsIDogc2lnbnNZW3R5cGVdLFxuICAgICAgICBzdGF0ZSA9IGxvY2FsKHRoYXQpLFxuICAgICAgICBleHRlbnQgPSBzdGF0ZS5leHRlbnQsXG4gICAgICAgIHNlbGVjdGlvbiA9IHN0YXRlLnNlbGVjdGlvbixcbiAgICAgICAgVyA9IGV4dGVudFswXVswXSwgdzAsIHcxLFxuICAgICAgICBOID0gZXh0ZW50WzBdWzFdLCBuMCwgbjEsXG4gICAgICAgIEUgPSBleHRlbnRbMV1bMF0sIGUwLCBlMSxcbiAgICAgICAgUyA9IGV4dGVudFsxXVsxXSwgczAsIHMxLFxuICAgICAgICBkeCxcbiAgICAgICAgZHksXG4gICAgICAgIG1vdmluZyxcbiAgICAgICAgc2hpZnRpbmcgPSBzaWduWCAmJiBzaWduWSAmJiBldmVudC5zaGlmdEtleSxcbiAgICAgICAgbG9ja1gsXG4gICAgICAgIGxvY2tZLFxuICAgICAgICBwb2ludDAgPSBtb3VzZSh0aGF0KSxcbiAgICAgICAgcG9pbnQgPSBwb2ludDAsXG4gICAgICAgIGVtaXQgPSBlbWl0dGVyKHRoYXQsIGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKTtcblxuICAgIGlmICh0eXBlID09PSBcIm92ZXJsYXlcIikge1xuICAgICAgc3RhdGUuc2VsZWN0aW9uID0gc2VsZWN0aW9uID0gW1xuICAgICAgICBbdzAgPSBkaW0gPT09IFkgPyBXIDogcG9pbnQwWzBdLCBuMCA9IGRpbSA9PT0gWCA/IE4gOiBwb2ludDBbMV1dLFxuICAgICAgICBbZTAgPSBkaW0gPT09IFkgPyBFIDogdzAsIHMwID0gZGltID09PSBYID8gUyA6IG4wXVxuICAgICAgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdzAgPSBzZWxlY3Rpb25bMF1bMF07XG4gICAgICBuMCA9IHNlbGVjdGlvblswXVsxXTtcbiAgICAgIGUwID0gc2VsZWN0aW9uWzFdWzBdO1xuICAgICAgczAgPSBzZWxlY3Rpb25bMV1bMV07XG4gICAgfVxuXG4gICAgdzEgPSB3MDtcbiAgICBuMSA9IG4wO1xuICAgIGUxID0gZTA7XG4gICAgczEgPSBzMDtcblxuICAgIHZhciBncm91cCA9IHNlbGVjdCh0aGF0KVxuICAgICAgICAuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcblxuICAgIHZhciBvdmVybGF5ID0gZ3JvdXAuc2VsZWN0QWxsKFwiLm92ZXJsYXlcIilcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlXSk7XG5cbiAgICBpZiAoZXZlbnQudG91Y2hlcykge1xuICAgICAgZ3JvdXBcbiAgICAgICAgICAub24oXCJ0b3VjaG1vdmUuYnJ1c2hcIiwgbW92ZWQsIHRydWUpXG4gICAgICAgICAgLm9uKFwidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2hcIiwgZW5kZWQsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdmlldyA9IHNlbGVjdChldmVudC52aWV3KVxuICAgICAgICAgIC5vbihcImtleWRvd24uYnJ1c2hcIiwga2V5ZG93bmVkLCB0cnVlKVxuICAgICAgICAgIC5vbihcImtleXVwLmJydXNoXCIsIGtleXVwcGVkLCB0cnVlKVxuICAgICAgICAgIC5vbihcIm1vdXNlbW92ZS5icnVzaFwiLCBtb3ZlZCwgdHJ1ZSlcbiAgICAgICAgICAub24oXCJtb3VzZXVwLmJydXNoXCIsIGVuZGVkLCB0cnVlKTtcblxuICAgICAgZHJhZ0Rpc2FibGUoZXZlbnQudmlldyk7XG4gICAgfVxuXG4gICAgbm9wcm9wYWdhdGlvbigpO1xuICAgIGludGVycnVwdCh0aGF0KTtcbiAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICBlbWl0LnN0YXJ0KCk7XG5cbiAgICBmdW5jdGlvbiBtb3ZlZCgpIHtcbiAgICAgIHZhciBwb2ludDEgPSBtb3VzZSh0aGF0KTtcbiAgICAgIGlmIChzaGlmdGluZyAmJiAhbG9ja1ggJiYgIWxvY2tZKSB7XG4gICAgICAgIGlmIChNYXRoLmFicyhwb2ludDFbMF0gLSBwb2ludFswXSkgPiBNYXRoLmFicyhwb2ludDFbMV0gLSBwb2ludFsxXSkpIGxvY2tZID0gdHJ1ZTtcbiAgICAgICAgZWxzZSBsb2NrWCA9IHRydWU7XG4gICAgICB9XG4gICAgICBwb2ludCA9IHBvaW50MTtcbiAgICAgIG1vdmluZyA9IHRydWU7XG4gICAgICBub2V2ZW50KCk7XG4gICAgICBtb3ZlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW92ZSgpIHtcbiAgICAgIHZhciB0O1xuXG4gICAgICBkeCA9IHBvaW50WzBdIC0gcG9pbnQwWzBdO1xuICAgICAgZHkgPSBwb2ludFsxXSAtIHBvaW50MFsxXTtcblxuICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgIGNhc2UgTU9ERV9TUEFDRTpcbiAgICAgICAgY2FzZSBNT0RFX0RSQUc6IHtcbiAgICAgICAgICBpZiAoc2lnblgpIGR4ID0gTWF0aC5tYXgoVyAtIHcwLCBNYXRoLm1pbihFIC0gZTAsIGR4KSksIHcxID0gdzAgKyBkeCwgZTEgPSBlMCArIGR4O1xuICAgICAgICAgIGlmIChzaWduWSkgZHkgPSBNYXRoLm1heChOIC0gbjAsIE1hdGgubWluKFMgLSBzMCwgZHkpKSwgbjEgPSBuMCArIGR5LCBzMSA9IHMwICsgZHk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBNT0RFX0hBTkRMRToge1xuICAgICAgICAgIGlmIChzaWduWCA8IDApIGR4ID0gTWF0aC5tYXgoVyAtIHcwLCBNYXRoLm1pbihFIC0gdzAsIGR4KSksIHcxID0gdzAgKyBkeCwgZTEgPSBlMDtcbiAgICAgICAgICBlbHNlIGlmIChzaWduWCA+IDApIGR4ID0gTWF0aC5tYXgoVyAtIGUwLCBNYXRoLm1pbihFIC0gZTAsIGR4KSksIHcxID0gdzAsIGUxID0gZTAgKyBkeDtcbiAgICAgICAgICBpZiAoc2lnblkgPCAwKSBkeSA9IE1hdGgubWF4KE4gLSBuMCwgTWF0aC5taW4oUyAtIG4wLCBkeSkpLCBuMSA9IG4wICsgZHksIHMxID0gczA7XG4gICAgICAgICAgZWxzZSBpZiAoc2lnblkgPiAwKSBkeSA9IE1hdGgubWF4KE4gLSBzMCwgTWF0aC5taW4oUyAtIHMwLCBkeSkpLCBuMSA9IG4wLCBzMSA9IHMwICsgZHk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBNT0RFX0NFTlRFUjoge1xuICAgICAgICAgIGlmIChzaWduWCkgdzEgPSBNYXRoLm1heChXLCBNYXRoLm1pbihFLCB3MCAtIGR4ICogc2lnblgpKSwgZTEgPSBNYXRoLm1heChXLCBNYXRoLm1pbihFLCBlMCArIGR4ICogc2lnblgpKTtcbiAgICAgICAgICBpZiAoc2lnblkpIG4xID0gTWF0aC5tYXgoTiwgTWF0aC5taW4oUywgbjAgLSBkeSAqIHNpZ25ZKSksIHMxID0gTWF0aC5tYXgoTiwgTWF0aC5taW4oUywgczAgKyBkeSAqIHNpZ25ZKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGUxIDwgdzEpIHtcbiAgICAgICAgc2lnblggKj0gLTE7XG4gICAgICAgIHQgPSB3MCwgdzAgPSBlMCwgZTAgPSB0O1xuICAgICAgICB0ID0gdzEsIHcxID0gZTEsIGUxID0gdDtcbiAgICAgICAgaWYgKHR5cGUgaW4gZmxpcFgpIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGUgPSBmbGlwWFt0eXBlXV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoczEgPCBuMSkge1xuICAgICAgICBzaWduWSAqPSAtMTtcbiAgICAgICAgdCA9IG4wLCBuMCA9IHMwLCBzMCA9IHQ7XG4gICAgICAgIHQgPSBuMSwgbjEgPSBzMSwgczEgPSB0O1xuICAgICAgICBpZiAodHlwZSBpbiBmbGlwWSkgb3ZlcmxheS5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnNbdHlwZSA9IGZsaXBZW3R5cGVdXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZS5zZWxlY3Rpb24pIHNlbGVjdGlvbiA9IHN0YXRlLnNlbGVjdGlvbjsgLy8gTWF5IGJlIHNldCBieSBicnVzaC5tb3ZlIVxuICAgICAgaWYgKGxvY2tYKSB3MSA9IHNlbGVjdGlvblswXVswXSwgZTEgPSBzZWxlY3Rpb25bMV1bMF07XG4gICAgICBpZiAobG9ja1kpIG4xID0gc2VsZWN0aW9uWzBdWzFdLCBzMSA9IHNlbGVjdGlvblsxXVsxXTtcblxuICAgICAgaWYgKHNlbGVjdGlvblswXVswXSAhPT0gdzFcbiAgICAgICAgICB8fCBzZWxlY3Rpb25bMF1bMV0gIT09IG4xXG4gICAgICAgICAgfHwgc2VsZWN0aW9uWzFdWzBdICE9PSBlMVxuICAgICAgICAgIHx8IHNlbGVjdGlvblsxXVsxXSAhPT0gczEpIHtcbiAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gW1t3MSwgbjFdLCBbZTEsIHMxXV07XG4gICAgICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgICAgICBlbWl0LmJydXNoKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5kZWQoKSB7XG4gICAgICBub3Byb3BhZ2F0aW9uKCk7XG4gICAgICBpZiAoZXZlbnQudG91Y2hlcykge1xuICAgICAgICBpZiAoZXZlbnQudG91Y2hlcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgaWYgKHRvdWNoZW5kaW5nKSBjbGVhclRpbWVvdXQodG91Y2hlbmRpbmcpO1xuICAgICAgICB0b3VjaGVuZGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRvdWNoZW5kaW5nID0gbnVsbDsgfSwgNTAwKTsgLy8gR2hvc3QgY2xpY2tzIGFyZSBkZWxheWVkIVxuICAgICAgICBncm91cC5vbihcInRvdWNobW92ZS5icnVzaCB0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaFwiLCBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRyYWdFbmFibGUoZXZlbnQudmlldywgbW92aW5nKTtcbiAgICAgICAgdmlldy5vbihcImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2hcIiwgbnVsbCk7XG4gICAgICB9XG4gICAgICBncm91cC5hdHRyKFwicG9pbnRlci1ldmVudHNcIiwgXCJhbGxcIik7XG4gICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29ycy5vdmVybGF5KTtcbiAgICAgIGlmIChzdGF0ZS5zZWxlY3Rpb24pIHNlbGVjdGlvbiA9IHN0YXRlLnNlbGVjdGlvbjsgLy8gTWF5IGJlIHNldCBieSBicnVzaC5tb3ZlIChvbiBzdGFydCkhXG4gICAgICBpZiAoZW1wdHkoc2VsZWN0aW9uKSkgc3RhdGUuc2VsZWN0aW9uID0gbnVsbCwgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgICBlbWl0LmVuZCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtleWRvd25lZCgpIHtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgICBjYXNlIDE2OiB7IC8vIFNISUZUXG4gICAgICAgICAgc2hpZnRpbmcgPSBzaWduWCAmJiBzaWduWTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDE4OiB7IC8vIEFMVFxuICAgICAgICAgIGlmIChtb2RlID09PSBNT0RFX0hBTkRMRSkge1xuICAgICAgICAgICAgaWYgKHNpZ25YKSBlMCA9IGUxIC0gZHggKiBzaWduWCwgdzAgPSB3MSArIGR4ICogc2lnblg7XG4gICAgICAgICAgICBpZiAoc2lnblkpIHMwID0gczEgLSBkeSAqIHNpZ25ZLCBuMCA9IG4xICsgZHkgKiBzaWduWTtcbiAgICAgICAgICAgIG1vZGUgPSBNT0RFX0NFTlRFUjtcbiAgICAgICAgICAgIG1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAzMjogeyAvLyBTUEFDRTsgdGFrZXMgcHJpb3JpdHkgb3ZlciBBTFRcbiAgICAgICAgICBpZiAobW9kZSA9PT0gTU9ERV9IQU5ETEUgfHwgbW9kZSA9PT0gTU9ERV9DRU5URVIpIHtcbiAgICAgICAgICAgIGlmIChzaWduWCA8IDApIGUwID0gZTEgLSBkeDsgZWxzZSBpZiAoc2lnblggPiAwKSB3MCA9IHcxIC0gZHg7XG4gICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxIC0gZHk7IGVsc2UgaWYgKHNpZ25ZID4gMCkgbjAgPSBuMSAtIGR5O1xuICAgICAgICAgICAgbW9kZSA9IE1PREVfU1BBQ0U7XG4gICAgICAgICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29ycy5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgbW92ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiByZXR1cm47XG4gICAgICB9XG4gICAgICBub2V2ZW50KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24ga2V5dXBwZWQoKSB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcbiAgICAgICAgY2FzZSAxNjogeyAvLyBTSElGVFxuICAgICAgICAgIGlmIChzaGlmdGluZykge1xuICAgICAgICAgICAgbG9ja1ggPSBsb2NrWSA9IHNoaWZ0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMTg6IHsgLy8gQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfQ0VOVEVSKSB7XG4gICAgICAgICAgICBpZiAoc2lnblggPCAwKSBlMCA9IGUxOyBlbHNlIGlmIChzaWduWCA+IDApIHcwID0gdzE7XG4gICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxOyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjE7XG4gICAgICAgICAgICBtb2RlID0gTU9ERV9IQU5ETEU7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMzI6IHsgLy8gU1BBQ0VcbiAgICAgICAgICBpZiAobW9kZSA9PT0gTU9ERV9TUEFDRSkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgICBpZiAoc2lnblgpIGUwID0gZTEgLSBkeCAqIHNpZ25YLCB3MCA9IHcxICsgZHggKiBzaWduWDtcbiAgICAgICAgICAgICAgaWYgKHNpZ25ZKSBzMCA9IHMxIC0gZHkgKiBzaWduWSwgbjAgPSBuMSArIGR5ICogc2lnblk7XG4gICAgICAgICAgICAgIG1vZGUgPSBNT0RFX0NFTlRFUjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChzaWduWCA8IDApIGUwID0gZTE7IGVsc2UgaWYgKHNpZ25YID4gMCkgdzAgPSB3MTtcbiAgICAgICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgczAgPSBzMTsgZWxzZSBpZiAoc2lnblkgPiAwKSBuMCA9IG4xO1xuICAgICAgICAgICAgICBtb2RlID0gTU9ERV9IQU5ETEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlXSk7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5vZXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplKCkge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuX19icnVzaCB8fCB7c2VsZWN0aW9uOiBudWxsfTtcbiAgICBzdGF0ZS5leHRlbnQgPSBleHRlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBzdGF0ZS5kaW0gPSBkaW07XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgYnJ1c2guZXh0ZW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGV4dGVudCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoW1srX1swXVswXSwgK19bMF1bMV1dLCBbK19bMV1bMF0sICtfWzFdWzFdXV0pLCBicnVzaCkgOiBleHRlbnQ7XG4gIH07XG5cbiAgYnJ1c2guZmlsdGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGZpbHRlciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgYnJ1c2gpIDogZmlsdGVyO1xuICB9O1xuXG4gIGJydXNoLmhhbmRsZVNpemUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaGFuZGxlU2l6ZSA9ICtfLCBicnVzaCkgOiBoYW5kbGVTaXplO1xuICB9O1xuXG4gIGJydXNoLm9uID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlID0gbGlzdGVuZXJzLm9uLmFwcGx5KGxpc3RlbmVycywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IGxpc3RlbmVycyA/IGJydXNoIDogdmFsdWU7XG4gIH07XG5cbiAgcmV0dXJuIGJydXNoO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuaW1wb3J0IHttZWFuLCBxdWFudGlsZSwgZGV2aWF0aW9ufSBmcm9tIFwiZDMtYXJyYXlcIjtcblxuXG4vLyByZWZlcmVuY2U6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0tlcm5lbF8oc3RhdGlzdGljcylcbi8vIHJlZmVyZW5jZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvS2VybmVsX2RlbnNpdHlfZXN0aW1hdGlvblxuZXhwb3J0IGNvbnN0IGtlcm5lbCA9IHtcbiAgICBlcGFuZWNobmlrb3Y6IGZ1bmN0aW9uKHUpe3JldHVybiBNYXRoLmFicyh1KSA8PSAxPyAoMy80KSooMS11KnUpOjB9LFxuICAgIGdhdXNzaWFuOiBmdW5jdGlvbih1KXtyZXR1cm4gMS9NYXRoLnNxcnQoMipNYXRoLlBJKSpNYXRoLmV4cCgtLjUqdSp1KX1cbn07XG5cbi8vIHJlZmVyZW5jZTogaHR0cHM6Ly9naXRodWIuY29tL2phc29uZGF2aWVzL3NjaWVuY2UuanMvYmxvYi9tYXN0ZXIvc3JjL3N0YXRzL2JhbmR3aWR0aC5qc1xuZXhwb3J0IGNvbnN0IGtlcm5lbEJhbmR3aWR0aCA9IHtcbiAgICAvLyBCYW5kd2lkdGggc2VsZWN0b3JzIGZvciBHYXVzc2lhbiBrZXJuZWxzLlxuICAgIG5yZDogZnVuY3Rpb24oeCkge1xuICAgICAgICBsZXQgaXFyID0gcXVhbnRpbGUoeCwgMC43NSkgLSBxdWFudGlsZSh4LCAwLjI1KTtcbiAgICAgICAgbGV0IGggPSBpcXIgLyAxLjM0O1xuICAgICAgICByZXR1cm4gMS4wNiAqIE1hdGgubWluKGRldmlhdGlvbih4KSwgaCkgKiBNYXRoLnBvdyh4Lmxlbmd0aCwgLTEvNSk7XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGtlcm5lbDogdGhlIGtlcm5lbCBmdW5jdGlvbiwgc3VjaCBhcyBnYXVzc2lhblxuICogQHBhcmFtIFg6IGxpc3Qgb2YgYmluc1xuICogQHBhcmFtIGg6IHRoZSBiYW5kd2lkdGgsIGVpdGhlciBhIG51bWVyaWNhbCB2YWx1ZSBnaXZlbiBieSB0aGUgdXNlciBvciBjYWxjdWxhdGVkIHVzaW5nIHRoZSBmdW5jdGlvbiBrZXJuZWxCYW5kd2lkdGhcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn06IHRoZSBrZXJuZWwgZGVuc2l0eSBlc3RpbWF0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtlcm5lbERlbnNpdHlFc3RpbWF0b3Ioa2VybmVsLCBYLCBoKXtcbiAgICByZXR1cm4gZnVuY3Rpb24oVikge1xuICAgICAgICAvLyBYIGlzIHRoZSBiaW5zXG4gICAgICAgIHJldHVybiBYLm1hcCgoeCkgPT4gW3gsIG1lYW4oViwgKHYpID0+IGtlcm5lbCgoeC12KS9oKSkvaF0pO1xuICAgIH1cbn1cblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuLypcbklucHV0IGRhdGEgc3RydWN0dXJlOiBhIGxpc3Qgb2YgZGF0YSBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZTpcbltcbiAgICB7XG4gICAgICAgIGdyb3VwOiBcImdyb3VwMVwiXG4gICAgICAgIGxhYmVsOiBcImRhdGFzZXQgMVwiLFxuICAgICAgICB2YWx1ZXM6IFthIGxpc3Qgb2YgbnVtZXJpY2FsIHZhbHVlc11cbiAgICAgfSxcbiAgICAge1xuICAgICAgICBncm91cDogXCJncm91cDFcIlxuICAgICAgICBsYWJlbDogXCJkYXRhc2V0IDJcIixcbiAgICAgICAgdmFsdWVzOiBbYSBsaXN0IG9mIG51bWVyaWNhbCB2YWx1ZXNdXG4gICAgIH0sXG4gICAgIHtcbiAgICAgICAgZ3JvdXA6IFwiZ3JvdXAyXCJcbiAgICAgICAgbGFiZWw6IFwiZGF0YXNldCAzXCIsXG4gICAgICAgIHZhbHVlczogW2EgbGlzdCBvZiBudW1lcmljYWwgdmFsdWVzXVxuICAgICB9XG5dXG4qL1xuXG5pbXBvcnQge2V4dGVudCwgbWVkaWFuLCBhc2NlbmRpbmcsIHF1YW50aWxlLCBtYXgsIG1pbn0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge25lc3R9IGZyb20gXCJkMy1jb2xsZWN0aW9uXCI7XG5pbXBvcnQge3NjYWxlQmFuZCwgc2NhbGVMaW5lYXJ9IGZyb20gXCJkMy1zY2FsZVwiO1xuaW1wb3J0IHthcmVhfSBmcm9tIFwiZDMtc2hhcGVcIjtcbmltcG9ydCB7YXhpc1RvcCwgYXhpc0JvdHRvbSwgYXhpc0xlZnR9IGZyb20gXCJkMy1heGlzXCI7XG5pbXBvcnQge3NlbGVjdCwgc2VsZWN0QWxsLCBldmVudH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHticnVzaH0gZnJvbSBcImQzLWJydXNoXCI7XG5cbmltcG9ydCB7a2VybmVsRGVuc2l0eUVzdGltYXRvciwga2VybmVsLCBrZXJuZWxCYW5kd2lkdGh9IGZyb20gXCIuL2tkZVwiO1xuaW1wb3J0IFRvb2x0aXAgZnJvbSBcIi4vVG9vbHRpcFwiO1xuaW1wb3J0IFRvb2xiYXIgZnJvbSBcIi4vVG9vbGJhclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHcm91cGVkVmlvbGluIHtcbiAgICAvKipcbiAgICAgKiBjb25zdHJ1Y3RvciBmb3IgR3JvdXBlZFZpb2xpblxuICAgICAqIEBwYXJhbSBkYXRhIHtMaXN0fTogYSBsaXN0IG9mIG9iamVjdHMgd2l0aCBhdHRyaWJ1dGVzOiBncm91cDoge1N0cmluZ30sIGxhYmVsOiB7U3RyaW5nfSwgdmFsdWVzOiB7TGlzdH0gb2YgbnVtZXJpY2FsIHZhbHVlcywgc2l6ZTogaW50ZWdlciwgb3B0aW9uYWxcbiAgICAgKiBAcGFyYW0gZ3JvdXBJbmZvIHtEaWN0aW9uYXJ5fTogbWV0YWRhdGEgb2YgdGhlIGdyb3VwLCBpbmRleGVkIGJ5IGdyb3VwIElEXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoZGF0YSwgZ3JvdXBJbmZvID0ge30pe1xuICAgICAgICB0aGlzLl9zYW5pdHlDaGVjayhkYXRhKTtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5ncm91cEluZm8gPSBncm91cEluZm87XG4gICAgICAgIHRoaXMudG9vbGJhciA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy50b29sdGlwID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIGRvbSB7RE9NfSB0aGUgU1ZHIGRvbSBvYmplY3QgdG8gYXBwZW5kIHRoZSB2aW9saW4gcGxvdCB0b1xuICAgICAqIEBwYXJhbSB3aWR0aCB7RmxvYXR9XG4gICAgICogQHBhcmFtIGhlaWdodCB7RmxvYXR9XG4gICAgICogQHBhcmFtIHhQYWRkaW5nIHtGbG9hdH0gcGFkZGluZyBvZiB0aGUgeCBheGlzXG4gICAgICogQHBhcmFtIHhEb21haW4ge0xpc3R9IHRoZSBvcmRlciBvZiBYIGdyb3Vwc1xuICAgICAqIEBwYXJhbSB5RG9tYWluICB7TGlzdH0gdGhlIG1pbiBhbmQgbWF4IHZhbHVlcyBvZiB0aGUgeSBkb21haW5cbiAgICAgKiBAcGFyYW0geUxhYmVsIHtTdHJpbmd9XG4gICAgICogQHBhcmFtIHNob3dYXG4gICAgICogQHBhcmFtIHNob3dTdWJYXG4gICAgICogQHBhcmFtIHN1YlhBbmdsZVxuICAgICAqIEBwYXJhbSBzaG93V2hpc2tlclxuICAgICAqIEBwYXJhbSBzaG93RGl2aWRlclxuICAgICAqIEBwYXJhbSBzaG93TGVnZW5kXG4gICAgICogQHBhcmFtIHNob3dTaXplXG4gICAgICovXG5cbiAgICByZW5kZXIoZG9tLCB3aWR0aD01MDAsIGhlaWdodD0zNTcsIHhQYWRkaW5nPTAuMDUsIHhEb21haW49dW5kZWZpbmVkLCB5RG9tYWluPVstMywzXSwgeUxhYmVsPVwiWSBheGlzXCIsXG4gICAgICAgICAgIHNob3dYPXRydWUsIHNob3dTdWJYPXRydWUsIHN1YlhBbmdsZT0wLFxuICAgICAgICAgICBzaG93V2hpc2tlcj1mYWxzZSwgc2hvd0RpdmlkZXI9ZmFsc2UsIHNob3dMZWdlbmQ9ZmFsc2UsIHNob3dTaXplPWZhbHNlKXtcblxuICAgICAgICAvLyBkZWZpbmUgdGhlIHJlc2V0IGZvciB0aGlzIHBsb3RcbiAgICAgICAgdGhpcy5yZXNldCA9ICgpID0+IHtcbiAgICAgICAgICAgIGRvbS5zZWxlY3RBbGwoXCIqXCIpLnJlbW92ZSgpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXIoZG9tLCB3aWR0aCwgaGVpZ2h0LCB4UGFkZGluZywgeERvbWFpbiwgeURvbWFpbiwgeUxhYmVsLCBzaG93WCwgc2hvd1N1YlgsIHN1YlhBbmdsZSwgc2hvd1doaXNrZXIsIHNob3dEaXZpZGVyLCBzaG93TGVnZW5kKTtcbiAgICAgICAgfTtcblxuXG4gICAgICAgIC8vIGRlZmluZXMgdGhlIFgsIHN1YlgsIFksIFogc2NhbGVzXG4gICAgICAgIGlmICh5RG9tYWluPT09dW5kZWZpbmVkIHx8IDAgPT0geURvbWFpbi5sZW5ndGgpe1xuICAgICAgICAgICAgbGV0IGFsbFYgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKChkKSA9PiBhbGxWID0gYWxsVi5jb25jYXQoZC52YWx1ZXMpKTtcbiAgICAgICAgICAgIHlEb21haW4gPSBleHRlbnQoYWxsVik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZS1vcmdhbml6ZWQgdGhpcy5kYXRhIGluZGV4ZWQgYnkgZ3JvdXBzXG4gICAgICAgIHRoaXMuZ3JvdXBzID0gbmVzdCgpXG4gICAgICAgICAgICAua2V5KChkKSA9PiBkLmdyb3VwKVxuICAgICAgICAgICAgLmVudHJpZXModGhpcy5kYXRhKTtcblxuICAgICAgICB0aGlzLnNjYWxlID0ge1xuICAgICAgICAgICAgeDogc2NhbGVCYW5kKClcbiAgICAgICAgICAgICAgICAucmFuZ2VSb3VuZChbMCwgd2lkdGhdKVxuICAgICAgICAgICAgICAgIC5kb21haW4oeERvbWFpbnx8dGhpcy5ncm91cHMubWFwKChkKSA9PiBkLmtleSkpXG4gICAgICAgICAgICAgICAgLnBhZGRpbmdJbm5lcih4UGFkZGluZyksXG4gICAgICAgICAgICBzdWJ4OiBzY2FsZUJhbmQoKSxcbiAgICAgICAgICAgIHk6IHNjYWxlTGluZWFyKClcbiAgICAgICAgICAgICAgICAucmFuZ2VSb3VuZChbaGVpZ2h0LCAwXSlcbiAgICAgICAgICAgICAgICAuZG9tYWluKHlEb21haW4pLFxuICAgICAgICAgICAgejogc2NhbGVMaW5lYXIoKSAvLyB0aGlzIGlzIHRoZSB2aW9saW4gd2lkdGgsIHRoZSBkb21haW4gYW5kIHJhbmdlIGFyZSBkZXRlcm1pbmVkIGxhdGVyIGluZGl2aWR1YWxseSBmb3IgZWFjaCB2aW9saW5cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBmb3IgZWFjaCBncm91cFxuICAgICAgICB0aGlzLmdyb3Vwcy5mb3JFYWNoKChnKSA9PiB7XG4gICAgICAgICAgICBsZXQgZ3JvdXAgPSBnLmtleTtcbiAgICAgICAgICAgIGxldCBlbnRyaWVzID0gZy52YWx1ZXM7XG4gICAgICAgICAgICBsZXQgaW5mbyA9IHRoaXMuZ3JvdXBJbmZvW2dyb3VwXTsgLy8gb3B0aW9uYWxcbiAgICAgICAgICAgIGcuaW5kZXggPSB0aGlzLnNjYWxlLnguZG9tYWluKCkuaW5kZXhPZihncm91cCk7XG5cbiAgICAgICAgICAgIGlmIChpbmZvICE9PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgICAvLyByZW5kZXJzIGdyb3VwIGluZm8gc3VjaCBhcyBwLXZhbHVlLCBncm91cCBuYW1lXG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBJbmZvRG9tID0gZG9tLmFwcGVuZChcImdcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBMYWJlbHMgPSBncm91cEluZm9Eb20uc2VsZWN0QWxsKFwiLnZpb2xpbi1ncm91cC1sYWJlbFwiKVxuICAgICAgICAgICAgICAgICAgICAuZGF0YShbJ3B2YWx1ZSddKTtcbiAgICAgICAgICAgICAgICBncm91cExhYmVscy5lbnRlcigpLmFwcGVuZChcInRleHRcIikgLy8gQ29kZSByZXZpZXc6IGNvbnNpZGVyIG1vdmluZyB0aGlzIHBhcnQgdG8gdGhlIGVRVEwgZGFzaGJvYXJkXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKFwieFwiLCAwKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgMClcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInZpb2xpbi1ncm91cC1sYWJlbFwiKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcImZpbGxcIiwgKGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGluZm9bJ3B2YWx1ZVRocmVzaG9sZCddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkPT0ncHZhbHVlJyYmcGFyc2VGbG9hdChpbmZvW2RdKTw9cGFyc2VGbG9hdChpbmZvWydwdmFsdWVUaHJlc2hvbGQnXSk/XCJvcmFuZ2VyZWRcIjpcIlNsYXRlR3JheVwiXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIChkLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgeCA9IHRoaXMuc2NhbGUueChncm91cCkgKyB0aGlzLnNjYWxlLnguYmFuZHdpZHRoKCkvMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB5ID0gdGhpcy5zY2FsZS55KHlEb21haW5bMF0pICsgNTA7IC8vIHRvZG86IGF2b2lkIGhhcmQtY29kZWQgdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYHRyYW5zbGF0ZSgke3h9LCAke3l9KWBcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLnRleHQoKGQpID0+IGAke2R9OiAke3BhcnNlRmxvYXQocGFyc2VGbG9hdChpbmZvW2RdKS50b1ByZWNpc2lvbigzKSkudG9FeHBvbmVudGlhbCgpfWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSB0aGlzLnNjYWxlLnN1YnggYmFzZWQgb24gdGhpcy5zY2FsZS54XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnN1YnhcbiAgICAgICAgICAgICAgICAuZG9tYWluKGVudHJpZXMubWFwKChkKSA9PiBkLmxhYmVsKSlcbiAgICAgICAgICAgICAgICAucmFuZ2VSb3VuZChbdGhpcy5zY2FsZS54KGdyb3VwKSwgdGhpcy5zY2FsZS54KGdyb3VwKSArIHRoaXMuc2NhbGUueC5iYW5kd2lkdGgoKV0pO1xuXG4gICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG5cbiAgICAgICAgICAgICAgICBpZiAoMCA9PSBlbnRyeS52YWx1ZXMubGVuZ3RoKSByZXR1cm47IC8vIG5vIGZ1cnRoZXIgcmVuZGVyaW5nIGlmIHRoaXMgZ3JvdXAgaGFzIG5vIGVudHJpZXNcbiAgICAgICAgICAgICAgICBlbnRyeS52YWx1ZXMgPSBlbnRyeS52YWx1ZXMuc29ydChhc2NlbmRpbmcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RyYXdWaW9saW4oZG9tLCBlbnRyeSwgc2hvd1doaXNrZXIsIGcuaW5kZXgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGFkZHMgdGhlIHN1Yi14IGF4aXMgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgZW50cmllc1xuICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IDE1O1xuICAgICAgICAgICAgaWYgKHNob3dTaXplKXtcbiAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZVNjYWxlID0gc2NhbGVCYW5kKClcbiAgICAgICAgICAgICAgICAgICAgLmRvbWFpbihlbnRyaWVzLm1hcCgoZCkgPT4ge3JldHVybiBkLnNpemU9PXVuZGVmaW5lZD8nKDApJzpgKCR7ZC5zaXplfHwwfSlgfSkpXG4gICAgICAgICAgICAgICAgICAgIC5yYW5nZVJvdW5kKFt0aGlzLnNjYWxlLngoZ3JvdXApLCB0aGlzLnNjYWxlLngoZ3JvdXApICsgdGhpcy5zY2FsZS54LmJhbmR3aWR0aCgpXSk7XG4gICAgICAgICAgICAgICAgIGNvbnN0IHNpemV4RyA9IGRvbS5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidmlvbGluLXNpemUtYXhpc1wiKVxuICAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgwLCAke2hlaWdodCArIGJ1ZmZlcn0pYClcbiAgICAgICAgICAgICAgICAgICAgIC5jYWxsKGF4aXNCb3R0b20oc2l6ZVNjYWxlKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaG93U3ViWCkge1xuICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSA1O1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1YnhHID0gZG9tLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInZpb2xpbi1zdWItYXhpc1wiKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKDAsICR7aGVpZ2h0ICsgYnVmZmVyfSlgKVxuICAgICAgICAgICAgICAgICAgICAuY2FsbChheGlzQm90dG9tKHRoaXMuc2NhbGUuc3VieCkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN1YlhBbmdsZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc3VieEcuc2VsZWN0QWxsKFwidGV4dFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJzdGFydFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHJvdGF0ZSgke3N1YlhBbmdsZX0sIDIsIDEwKWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHJlbmRlcnMgdGhlIHggYXhpc1xuICAgICAgICBsZXQgYnVmZmVyID0gc2hvd1N1Ylg/NTU6MDsgLy8gQ29kZSByZXZpZXc6IGhhcmQtY29kZWQgdmFsdWVzXG4gICAgICAgIHRoaXMueEF4aXMgPSBzaG93WD9heGlzQm90dG9tKHRoaXMuc2NhbGUueCk6YXhpc0JvdHRvbSh0aGlzLnNjYWxlLngpLnRpY2tGb3JtYXQoXCJcIik7XG4gICAgICAgIGRvbS5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidmlvbGluLXgtYXhpcyBheGlzLS14XCIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKDAsICR7aGVpZ2h0ICsgYnVmZmVyfSlgKVxuICAgICAgICAgICAgLmNhbGwodGhpcy54QXhpcykgLy8gc2V0IHRpY2tGb3JtYXQoXCJcIikgdG8gc2hvdyB0aWNrIG1hcmtzIHdpdGhvdXQgdGV4dCBsYWJlbHNcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcInN0YXJ0XCIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInJvdGF0ZSgzMCwgLTEwLCAxMClcIik7XG5cbiAgICAgICAgLy8gYWRkcyB0aGUgeSBBeGlzXG4gICAgICAgIGJ1ZmZlciA9IDU7XG4gICAgICAgIHRoaXMueUF4aXMgPSBheGlzTGVmdCh0aGlzLnNjYWxlLnkpXG4gICAgICAgICAgICAgICAgICAgIC50aWNrVmFsdWVzKHRoaXMuc2NhbGUueS50aWNrcyg1KSk7XG4gICAgICAgIGRvbS5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidmlvbGluLXktYXhpcyBheGlzLS15XCIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKC0ke2J1ZmZlcn0sIDApYClcbiAgICAgICAgICAgIC5jYWxsKHRoaXMueUF4aXMpO1xuXG4gICAgICAgIC8vIGFkZHMgdGhlIHRleHQgbGFiZWwgZm9yIHRoZSB5IGF4aXNcbiAgICAgICAgZG9tLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAtNDApIC8vIHRvZG86IGF2b2lkIGhhcmQtY29kZWQgdmFsdWVcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCAtNDApXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidmlvbGluLWF4aXMtbGFiZWxcIilcbiAgICAgICAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgXCJzdGFydFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJyb3RhdGUoLTkwKVwiKVxuICAgICAgICAgICAgLnRleHQoeUxhYmVsKTtcblxuICAgICAgICAvLyBwbG90IG1vdXNlIGV2ZW50c1xuICAgICAgICBkb20ub24oXCJtb3VzZW91dFwiLCAoKT0+e1xuICAgICAgICAgICAgaWYodGhpcy50b29sdGlwICE9PSB1bmRlZmluZWQpIHRoaXMudG9vbHRpcC5oaWRlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGFkZCBncm91cCBkaXZpZGVyc1xuICAgICAgICBpZihzaG93RGl2aWRlcil7XG4gICAgICAgICAgICB0aGlzLl9hZGRHcm91cERpdmlkZXIoZG9tKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCBjb2xvciBsZWdlbmRcbiAgICAgICAgaWYgKHNob3dMZWdlbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxlZ2VuZEcgPSBkb20uYXBwZW5kKFwiZ1wiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaWRcIiwgXCJ2aW9saW5MZWdlbmRcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKDAsIDApYCk7XG5cbiAgICAgICAgICAgIGxlZ2VuZEcuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieFwiLCB0aGlzLnNjYWxlLngucmFuZ2UoKVswXSlcbiAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgLTM1KVxuICAgICAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgNjAqKHRoaXMuZ3JvdXBzWzBdLnZhbHVlcy5sZW5ndGgpICsgMTApXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgMjQpXG4gICAgICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBcIm5vbmVcIilcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJzdHJva2VcIiwgXCJzaWx2ZXJcIik7XG5cbiAgICAgICAgICAgIGNvbnN0IGxlZ2VuZHMgPSBsZWdlbmRHLnNlbGVjdEFsbChcIi52aW9saW4tbGVnZW5kXCIpLmRhdGEodGhpcy5ncm91cHNbMF0udmFsdWVzKTtcblxuXG4gICAgICAgICAgICBjb25zdCBnID0gbGVnZW5kcy5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcInZpb2xpbi1sZWdlbmRcIiwgdHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCB3ID0gMTA7XG4gICAgICAgICAgICBnLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcInhcIiwgKGQsIGkpID0+IDUgKyA2MCooaSkgICsgdGhpcy5zY2FsZS54LnJhbmdlKClbMF0pXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIC0yOClcbiAgICAgICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIHcpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdylcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIChkKSA9PiBkLmNvbG9yKTtcblxuICAgICAgICAgICAgZy5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInZpb2xpbi1sZWdlbmQtdGV4dFwiKVxuICAgICAgICAgICAgICAgIC50ZXh0KChkKSA9PiBkLmxhYmVsKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieFwiLCAoZCwgaSkgPT4gMTcgKyA2MCooaSkgKyB0aGlzLnNjYWxlLngucmFuZ2UoKVswXSlcbiAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgLTIwKTtcbiAgICAgICAgfVxuXG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgdGhlIHRvb2x0aXAgb2JqZWN0XG4gICAgICogQHBhcmFtIGRvbUlkIHtTdHJpbmd9IHRoZSB0b29sdGlwJ3MgZG9tIElEXG4gICAgICogQHJldHVybnMge1Rvb2x0aXB9XG4gICAgICovXG4gICAgY3JlYXRlVG9vbHRpcChkb21JZCl7XG4gICAgICAgIGlmICgkKGAjJHtkb21JZH1gKS5sZW5ndGggPT0gMCkgJCgnPGRpdi8+JykuYXR0cignaWQnLCBkb21JZCkuYXBwZW5kVG8oJCgnYm9keScpKTtcbiAgICAgICAgdGhpcy50b29sdGlwID0gbmV3IFRvb2x0aXAoZG9tSWQpO1xuICAgICAgICBzZWxlY3QoYCMke2RvbUlkfWApLmNsYXNzZWQoJ3Zpb2xpbi10b29sdGlwJywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnRvb2x0aXA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIHRoZSB0b29sYmFyIHBhbmVsXG4gICAgICogQHBhcmFtIGRvbUlkIHtTdHJpbmd9IHRoZSB0b29sYmFyJ3MgZG9tIElEXG4gICAgICogQHBhcmFtIHRvb2x0aXAge1Rvb2x0aXB9XG4gICAgICogQHJldHVybnMge1Rvb2xiYXJ9XG4gICAgICovXG5cbiAgICBjcmVhdGVUb29sYmFyKGRvbUlkLCB0b29sdGlwKXtcbiAgICAgICAgLy8gaWYgKHRvb2x0aXAgPT09IHVuZGVmaW5lZCkgdG9vbHRpcCA9IHRoaXMuY3JlYXRlVG9vbHRpcChkb21JZCk7XG4gICAgICAgIHRoaXMudG9vbGJhciA9IG5ldyBUb29sYmFyKGRvbUlkLCB0b29sdGlwKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbGJhcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYSBicnVzaCB0byB0aGUgcGxvdFxuICAgICAqIEBwYXJhbSBkb20ge0QzfSBEb20gZWxlbWVudFxuICAgICAqL1xuICAgIGFkZEJydXNoKGRvbSl7XG4gICAgICAgIGNvbnN0IHRoZUJydXNoID0gYnJ1c2goKTtcbiAgICAgICAgdGhlQnJ1c2gub24oXCJlbmRcIiwgKCk9Pnt0aGlzLnpvb20oZG9tLCB0aGVCcnVzaCl9KTtcbiAgICAgICAgZG9tLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJicnVzaFwiKVxuICAgICAgICAgICAgLmNhbGwodGhlQnJ1c2gpO1xuICAgIH1cblxuICAgIHpvb20oZG9tLCB0aGVCcnVzaCl7XG4gICAgICAgIGxldCBzID0gZXZlbnQuc2VsZWN0aW9uLFxuICAgICAgICAgICAgaWRlbFRpbWVvdXQsXG4gICAgICAgICAgICBpZGVsRGVsYXkgPSAzNTA7XG4gICAgICAgIGlmICh0aGVCcnVzaCA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghcykge1xuICAgICAgICAgICAgaWYgKCFpZGVsVGltZW91dCkgcmV0dXJuIGlkZWxUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWRlbFRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgfSwgaWRlbERlbGF5KTtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gcmVzZXQgdGhlIGN1cnJlbnQgc2NhbGVzJyBkb21haW5zIGJhc2VkIG9uIHRoZSBicnVzaGVkIHdpbmRvd1xuICAgICAgICAgICAgdGhpcy5zY2FsZS54LmRvbWFpbih0aGlzLnNjYWxlLnguZG9tYWluKCkuZmlsdGVyKChkLCBpKT0+e1xuICAgICAgICAgICAgICAgICAgY29uc3QgbG93Qm91bmQgPSBNYXRoLmZsb29yKHNbMF1bMF0vdGhpcy5zY2FsZS54LmJhbmR3aWR0aCgpKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHVwcGVyQm91bmQgPSBNYXRoLmZsb29yKHNbMV1bMF0vdGhpcy5zY2FsZS54LmJhbmR3aWR0aCgpKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpID49IGxvd0JvdW5kICYmIGkgPD11cHBlckJvdW5kO1xuICAgICAgICAgICAgfSkpOyAvLyBUT0RPOiBhZGQgY29tbWVudHNcblxuICAgICAgICAgICAgY29uc3QgbWluID0gTWF0aC5mbG9vcih0aGlzLnNjYWxlLnkuaW52ZXJ0KHNbMV1bMV0pKTtcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IE1hdGguZmxvb3IodGhpcy5zY2FsZS55LmludmVydChzWzBdWzFdKSk7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnkuZG9tYWluKFttaW4sIG1heF0pOyAvLyB0b2RvOiBkZWJ1Z1xuXG4gICAgICAgICAgICBkb20uc2VsZWN0KFwiLmJydXNoXCIpLmNhbGwodGhlQnJ1c2gubW92ZSwgbnVsbCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgICAvLyB6b29tXG4gICAgICAgIGxldCB0ID0gZG9tLnRyYW5zaXRpb24oKS5kdXJhdGlvbig3NTApO1xuICAgICAgICBkb20uc2VsZWN0KFwiLmF4aXMtLXhcIikudHJhbnNpdGlvbih0KS5jYWxsKHRoaXMueEF4aXMpO1xuICAgICAgICBkb20uc2VsZWN0KFwiLmF4aXMtLXlcIikudHJhbnNpdGlvbih0KS5jYWxsKHRoaXMueUF4aXMpO1xuXG4gICAgICAgIHRoaXMuZ3JvdXBzLmZvckVhY2goKGdnLCBpKT0+IHtcbiAgICAgICAgICAgIGxldCBncm91cCA9IGdnLmtleTtcbiAgICAgICAgICAgIGxldCBlbnRyaWVzID0gZ2cudmFsdWVzO1xuXG4gICAgICAgICAgICAvLyByZS1kZWZpbmUgdGhlIHN1YngncyByYW5nZVxuICAgICAgICAgICAgdGhpcy5zY2FsZS5zdWJ4XG4gICAgICAgICAgICAgICAgLnJhbmdlUm91bmQoW3RoaXMuc2NhbGUueChncm91cCksIHRoaXMuc2NhbGUueChncm91cCkgKyB0aGlzLnNjYWxlLnguYmFuZHdpZHRoKCldKTtcblxuICAgICAgICAgICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgwID09IGVudHJ5LnZhbHVlcy5sZW5ndGgpIHJldHVybjsgLy8gbm8gZnVydGhlciByZW5kZXJpbmcgaWYgdGhpcyBncm91cCBoYXMgbm8gZW50cmllc1xuICAgICAgICAgICAgICAgIGNvbnN0IGdJbmRleCA9IHRoaXMuc2NhbGUueC5kb21haW4oKS5pbmRleE9mKGdyb3VwKTtcblxuXG4gICAgICAgICAgICAgICAgLy8gcmUtZGVmaW5lIHRoZSBzY2FsZS56J3MgcmFuZ2VcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnpcbiAgICAgICAgICAgICAgICAgICAgLnJhbmdlKFt0aGlzLnNjYWxlLnN1YngoZW50cnkubGFiZWwpLCB0aGlzLnNjYWxlLnN1YngoZW50cnkubGFiZWwpICsgdGhpcy5zY2FsZS5zdWJ4LmJhbmR3aWR0aCgpXSk7XG5cbiAgICAgICAgICAgICAgICAvLyByZS1yZW5kZXIgdGhlIHZpb2xpblxuICAgICAgICAgICAgICAgIGNvbnN0IGcgPSBkb20uc2VsZWN0KGAjdmlvbGluJHtnZy5pbmRleH0tJHtlbnRyeS5sYWJlbH1gKTtcbiAgICAgICAgICAgICAgICBnLnNlbGVjdChcIi52aW9saW5cIilcbiAgICAgICAgICAgICAgICAgICAgLnRyYW5zaXRpb24odClcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJkXCIsIGFyZWEoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLngwKChkKSA9PiB0aGlzLnNjYWxlLnooZFsxXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAueDEoKGQpID0+IHRoaXMuc2NhbGUueigtZFsxXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAueSgoZCkgPT4gdGhpcy5zY2FsZS55KGRbMF0pKVxuICAgICAgICAgICAgICAgICAgICApO1xuXG5cbiAgICAgICAgICAgICAgICAvLyByZS1yZW5kZXIgdGhlIGJveCBwbG90XG4gICAgICAgICAgICAgICAgLy8gaW50ZXJxdWFydGlsZSByYW5nZVxuICAgICAgICAgICAgICAgIGNvbnN0IHExID0gcXVhbnRpbGUoZW50cnkudmFsdWVzLCAwLjI1KTtcbiAgICAgICAgICAgICAgICBjb25zdCBxMyA9IHF1YW50aWxlKGVudHJ5LnZhbHVlcywgMC43NSk7XG4gICAgICAgICAgICAgICAgY29uc3QgeiA9IDAuMTtcbiAgICAgICAgICAgICAgICBnLnNlbGVjdChcIi52aW9saW4taXJcIilcbiAgICAgICAgICAgICAgICAgICAgLnRyYW5zaXRpb24odClcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIHRoaXMuc2NhbGUueigteikpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKFwieVwiLCB0aGlzLnNjYWxlLnkocTMpKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIE1hdGguYWJzKHRoaXMuc2NhbGUueigteikgLSB0aGlzLnNjYWxlLnooeikpKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBNYXRoLmFicyh0aGlzLnNjYWxlLnkocTMpIC0gdGhpcy5zY2FsZS55KHExKSkpO1xuXG4gICAgICAgICAgICAgICAgLy8gdGhlIG1lZGlhbiBsaW5lXG4gICAgICAgICAgICAgICAgY29uc3QgbWVkID0gbWVkaWFuKGVudHJ5LnZhbHVlcyk7XG4gICAgICAgICAgICAgICAgZy5zZWxlY3QoXCIudmlvbGluLW1lZGlhblwiKVxuICAgICAgICAgICAgICAgICAgICAudHJhbnNpdGlvbih0KVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcIngxXCIsIHRoaXMuc2NhbGUueigteikpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKFwieDJcIiwgdGhpcy5zY2FsZS56KHopKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcInkxXCIsIHRoaXMuc2NhbGUueShtZWQpKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcInkyXCIsIHRoaXMuc2NhbGUueShtZWQpKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVuZGVyIHRoZSB2aW9saW4gYW5kIGJveCBwbG90c1xuICAgICAqIEBwYXJhbSBkb20ge0QzIERPTX1cbiAgICAgKiBAcGFyYW0gZW50cnkge09iamVjdH0gd2l0aCBhdHRyczogdmFsdWVzLCBsYWJlbFxuICAgICAqIEBwYXJhbSBzaG93V2hpc2tlciB7Qm9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9kcmF3VmlvbGluKGRvbSwgZW50cnksIHNob3dXaGlza2VyLCBnSW5kZXgpe1xuXG4gICAgICAgIC8vIGdlbmVyYXRlIHRoZSB2ZXJ0aWNlcyBmb3IgdGhlIHZpb2xpbiBwYXRoIHVzZSBhIGtkZVxuICAgICAgICBsZXQga2RlID0ga2VybmVsRGVuc2l0eUVzdGltYXRvcihcbiAgICAgICAgICAgIGtlcm5lbC5nYXVzc2lhbixcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueS50aWNrcygxMDApLCAvLyB1c2UgdXAgdG8gMTAwIHZlcnRpY2VzIGFsb25nIHRoZSBZIGF4aXMgKHRvIGNyZWF0ZSB0aGUgdmlvbGluIHBhdGgpXG4gICAgICAgICAgICBrZXJuZWxCYW5kd2lkdGgubnJkKGVudHJ5LnZhbHVlcykgLy8gZXN0aW1hdGUgdGhlIGJhbmR3aWR0aCBiYXNlZCBvbiB0aGUgZGF0YVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBlRG9tYWluID0gZXh0ZW50KGVudHJ5LnZhbHVlcyk7IC8vIGdldCB0aGUgbWF4IGFuZCBtaW4gaW4gZW50cnkudmFsdWVzXG4gICAgICAgIGNvbnN0IHZlcnRpY2VzID0ga2RlKGVudHJ5LnZhbHVlcykuZmlsdGVyKChkKT0+ZFswXT5lRG9tYWluWzBdJiZkWzBdPGVEb21haW5bMV0pOyAvLyBmaWx0ZXIgdGhlIHZlcnRpY2VzIHRoYXQgYXJlbid0IGluIHRoZSBlbnRyeS52YWx1ZXNcblxuICAgICAgICAvLyBkZWZpbmUgdGhlIHogc2NhbGUgLS0gdGhlIHZpb2xpbiB3aWR0aFxuICAgICAgICBsZXQgek1heCA9IG1heCh2ZXJ0aWNlcywgKGQpPT5NYXRoLmFicyhkWzFdKSk7IC8vIGZpbmQgdGhlIGFicyh2YWx1ZSkgaW4gZW50cnkudmFsdWVzXG4gICAgICAgIHRoaXMuc2NhbGUuelxuICAgICAgICAgICAgLmRvbWFpbihbLXpNYXgsIHpNYXhdKVxuICAgICAgICAgICAgLnJhbmdlKFt0aGlzLnNjYWxlLnN1YngoZW50cnkubGFiZWwpLCB0aGlzLnNjYWxlLnN1YngoZW50cnkubGFiZWwpICsgdGhpcy5zY2FsZS5zdWJ4LmJhbmR3aWR0aCgpXSk7XG5cbiAgICAgICAgLy8gdmlzdWFsIHJlbmRlcmluZ1xuICAgICAgICBjb25zdCB2aW9saW5HID0gZG9tLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgIC5hdHRyKCdpZCcsIGB2aW9saW4ke2dJbmRleH0tJHtlbnRyeS5sYWJlbH1gKTtcblxuICAgICAgICBsZXQgdmlvbGluID0gYXJlYSgpXG4gICAgICAgICAgICAueDAoKGQpID0+IHRoaXMuc2NhbGUueihkWzFdKSlcbiAgICAgICAgICAgIC54MSgoZCkgPT4gdGhpcy5zY2FsZS56KC1kWzFdKSlcbiAgICAgICAgICAgIC55KChkKSA9PiB0aGlzLnNjYWxlLnkoZFswXSkpO1xuXG4gICAgICAgIGNvbnN0IHZQYXRoID0gdmlvbGluRy5hcHBlbmQoXCJwYXRoXCIpXG4gICAgICAgICAgICAuZGF0dW0odmVydGljZXMpXG4gICAgICAgICAgICAuYXR0cihcImRcIiwgdmlvbGluKVxuICAgICAgICAgICAgLmNsYXNzZWQoXCJ2aW9saW5cIiwgdHJ1ZSlcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgKCk9PntcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkuY29sb3IgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGVudHJ5LmNvbG9yO1xuICAgICAgICAgICAgICAgIC8vIGFsdGVybmF0ZSB0aGUgb2RkIGFuZCBldmVuIGNvbG9ycywgbWF5YmUgd2UgZG9uJ3Qgd2FudCB0aGlzIGZlYXR1cmVcbiAgICAgICAgICAgICAgICBpZihnSW5kZXglMiA9PSAwKSByZXR1cm4gXCIjOTBjMWMxXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiIzk0YThiOFwiO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gYm94cGxvdFxuICAgICAgICBjb25zdCBxMSA9IHF1YW50aWxlKGVudHJ5LnZhbHVlcywgMC4yNSk7XG4gICAgICAgIGNvbnN0IHEzID0gcXVhbnRpbGUoZW50cnkudmFsdWVzLCAwLjc1KTtcbiAgICAgICAgY29uc3QgeiA9IHRoaXMuc2NhbGUuei5kb21haW4oKVsxXS8zO1xuXG4gICAgICAgIGlmKHNob3dXaGlza2VyKXtcbiAgICAgICAgICAgIC8vIHRoZSB1cHBlciBhbmQgbG93ZXIgbGltaXRzIG9mIGVudHJ5LnZhbHVlc1xuICAgICAgICAgICAgY29uc3QgaXFyID0gTWF0aC5hYnMocTMtcTEpO1xuICAgICAgICAgICAgY29uc3QgdXBwZXIgPSBtYXgoZW50cnkudmFsdWVzLmZpbHRlcigoZCk9PmQ8cTMrKGlxcioxLjUpKSk7XG4gICAgICAgICAgICBjb25zdCBsb3dlciA9IG1pbihlbnRyeS52YWx1ZXMuZmlsdGVyKChkKT0+ZD5xMS0oaXFyKjEuNSkpKTtcbiAgICAgICAgICAgIGRvbS5hcHBlbmQoXCJsaW5lXCIpXG4gICAgICAgICAgICAgICAgLmNsYXNzZWQoXCJ3aGlza2VyXCIsIHRydWUpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4MVwiLCB0aGlzLnNjYWxlLnooMCkpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCB0aGlzLnNjYWxlLnooMCkpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5MVwiLCB0aGlzLnNjYWxlLnkodXBwZXIpKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieTJcIiwgdGhpcy5zY2FsZS55KGxvd2VyKSlcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJzdHJva2VcIiwgXCIjZmZmXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaW50ZXJxdWFydGlsZSByYW5nZVxuICAgICAgICB2aW9saW5HLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCB0aGlzLnNjYWxlLnooLXopKVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIHRoaXMuc2NhbGUueShxMykpXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIE1hdGguYWJzKHRoaXMuc2NhbGUueigteiktdGhpcy5zY2FsZS56KHopKSlcbiAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIE1hdGguYWJzKHRoaXMuc2NhbGUueShxMykgLSB0aGlzLnNjYWxlLnkocTEpKSlcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ2aW9saW4taXJcIik7XG5cbiAgICAgICAgLy8gbWVkaWFuXG4gICAgICAgIGNvbnN0IG1lZCA9IG1lZGlhbihlbnRyeS52YWx1ZXMpO1xuICAgICAgICB2aW9saW5HLmFwcGVuZChcImxpbmVcIikgLy8gdGhlIG1lZGlhbiBsaW5lXG4gICAgICAgICAgICAuYXR0cihcIngxXCIsIHRoaXMuc2NhbGUueigteikpXG4gICAgICAgICAgICAuYXR0cihcIngyXCIsIHRoaXMuc2NhbGUueih6KSlcbiAgICAgICAgICAgIC5hdHRyKFwieTFcIiwgdGhpcy5zY2FsZS55KG1lZCkpXG4gICAgICAgICAgICAuYXR0cihcInkyXCIsIHRoaXMuc2NhbGUueShtZWQpKVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInZpb2xpbi1tZWRpYW5cIik7XG5cbiAgICAgICAgLy8gbW91c2UgZXZlbnRzXG4gICAgICAgIHZpb2xpbkcub24oXCJtb3VzZW92ZXJcIiwgKCk9PntcbiAgICAgICAgICAgIHZQYXRoLmNsYXNzZWQoXCJoaWdobGlnaHRlZFwiLCB0cnVlKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGVudHJ5KTtcbiAgICAgICAgICAgIGlmKHRoaXMudG9vbHRpcCA9PT0gdW5kZWZpbmVkKSBjb25zb2xlLndhcm4oXCJHcm91cFZpb2xpbiBXYXJuaW5nOiB0b29sdGlwIG5vdCBkZWZpbmVkXCIpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwLnNob3coXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5Lmdyb3VwICsgXCI8YnIvPlwiICtcbiAgICAgICAgICAgICAgICAgICAgZW50cnkubGFiZWwgKyBcIjxici8+XCIgK1xuICAgICAgICAgICAgICAgICAgICBcIk1lZGlhbjogXCIgKyBtZWQudG9QcmVjaXNpb24oNCkgKyBcIjxici8+XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdmlvbGluRy5vbihcIm1vdXNlb3V0XCIsICgpPT57XG4gICAgICAgICAgICB2UGF0aC5jbGFzc2VkKFwiaGlnaGxpZ2h0ZWRcIiwgZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfc2FuaXR5Q2hlY2soZGF0YSl7XG4gICAgICAgIGNvbnN0IGF0dHIgPSBbXCJncm91cFwiLCBcImxhYmVsXCIsIFwidmFsdWVzXCJdO1xuXG4gICAgICAgIGRhdGEuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgICAgICAgYXR0ci5mb3JFYWNoKChhKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRbYV0gPT09IHVuZGVmaW5lZCkgdGhyb3cgXCJHcm91cGVkVmlvbGluOiBpbnB1dCBkYXRhIGVycm9yLlwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIGlmICgwID09IGQudmFsdWVzLmxlbmd0aCkgdGhyb3cgXCJWaW9saW46IElucHV0IGRhdGEgZXJyb3JcIjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX2FkZEdyb3VwRGl2aWRlcihkb20pe1xuICAgICAgICBjb25zdCBncm91cHMgPSB0aGlzLnNjYWxlLnguZG9tYWluKCk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSBNYXRoLmFicyh0aGlzLnNjYWxlLngodGhpcy5zY2FsZS54LmRvbWFpbigpWzFdKSAtIHRoaXMuc2NhbGUueCh0aGlzLnNjYWxlLnguZG9tYWluKClbMF0pIC0gdGhpcy5zY2FsZS54LmJhbmR3aWR0aCgpKTtcblxuICAgICAgICBjb25zdCBnZXRYID0gKGcsIGkpPT4ge1xuICAgICAgICAgICAgaWYgKGkgIT09IGdyb3Vwcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueChnKSArICt0aGlzLnNjYWxlLnguYmFuZHdpZHRoKCkgKyAocGFkZGluZy8yKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZG9tLnNlbGVjdEFsbChcIi52bGluZVwiKS5kYXRhKGdyb3VwcylcbiAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAuYXBwZW5kKFwibGluZVwiKVxuICAgICAgICAgICAgLmNsYXNzZWQoXCJ2bGluZVwiLCB0cnVlKVxuICAgICAgICAgICAgLmF0dHIoXCJ4MVwiLCBnZXRYKVxuICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCBnZXRYKVxuICAgICAgICAgICAgLmF0dHIoXCJ5MVwiLCB0aGlzLnNjYWxlLnkucmFuZ2UoKVswXSlcbiAgICAgICAgICAgIC5hdHRyKFwieTJcIiwgdGhpcy5zY2FsZS55LnJhbmdlKClbMV0pXG4gICAgICAgICAgICAuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwgKGcsIGkpPT5pIT1ncm91cHMubGVuZ3RoLTE/MTowKVxuICAgICAgICAgICAgLnN0eWxlKFwic3Ryb2tlXCIsIFwicmdiKDg2LDk4LDEwNylcIilcbiAgICAgICAgICAgIC5zdHlsZShcIm9wYWNpdHlcIiwgMC41KVxuXG4gICAgfVxuXG5cbn0iLCIvKipcbiAqIENvcHlyaWdodCDCqSAyMDE1IC0gMjAxOCBUaGUgQnJvYWQgSW5zdGl0dXRlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgKGh0dHBzOi8vZ2l0aHViLmNvbS9icm9hZGluc3RpdHV0ZS9ndGV4LXZpei9ibG9iL21hc3Rlci9MSUNFTlNFLm1kKVxuICovXG4vKlxuVGhpcyBjbGFzcyBkZWZpbmVzIGEgZ2VuZSBtb2RlbCAob3IgaXNvZm9ybSksIHJlbmRlcmluZyB0aGUgZXhvbnMgYW5kIGp1bmN0aW9ucyBvZiBhIGdpdmVuIGdlbmUuIFRoZSBtb2RlbCBpcyByZW5kZXJlZCBiYXNlZCBvblxuZ2Vub21pYyBwb3NpdGlvbnMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN0cmFuZCBhbmQgdHJhbnNjcmlwdGlvbmFsIGRpcmVjdGlvbi5cblxuVE9ETzogc2ltcGxpZnkgaXNvZm9ybSBzdHJ1Y3R1cmUgcmVuZGVyaW5nP1xuICovXG5cbmltcG9ydCB7Y3VydmVDYXJkaW5hbCwgbGluZX0gZnJvbSBcImQzLXNoYXBlXCI7XG5pbXBvcnQge21heCwgc3VtfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7c2NhbGVMaW5lYXJ9IGZyb20gXCJkMy1zY2FsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHZW5lTW9kZWwge1xuICAgIC8qKlxuICAgICAqIGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIGdlbmUge09iamVjdH0gd2l0aCBhdHRyaWJ1dGVzOiBzdHJhbmQsIHRyYW5zY3JpcHRJZCwgZ2VuZVN5bWJvbFxuICAgICAqIEBwYXJhbSBleG9ucyB7TGlzdH0gb2YgZXhvbiBvYmplY3RzIHdpdGggYXR0cmlidXRlczogY2hyb20sIGNocm9tU3RhcnQsIGNocm9tRW5kLCBsZW5ndGgsIGV4b25OdW1iZXIsIGV4b25JZFxuICAgICAqIEBwYXJhbSBleG9uc0N1cmF0ZWQge0xpc3R9IG9mIGV4b24gb2JqZWN0cyBpbiB0aGUgZmluYWwgZ2VuZSBtb2RlbC4gVGhpcyBpcyBwcmV0dHkgc3BlY2lmaWMgdG8gR1RFeC4gSWYgdGhpcyBsaXN0IGlzbid0IGF2YWlsYWJsZSBmb3IgeW91ciBkYXRhLCB0aGVuIGp1c3QgcGFzcyBpbiB0aGUgc2FtZSBleG9uIGxpc3QgYWdhaW4uXG4gICAgICogQHBhcmFtIGp1bmN0aW9ucyB7TGlzdH0gb2YganVuY3Rpb24gb2JqZWN0cyB3aXRoIGF0dHJpYnV0ZXM6IGNocm9tLCBjaHJvbVN0YXJ0LCBjaHJvbUVuZCwganVuY3Rpb25JZFxuICAgICAqIEBwYXJhbSBpc0lzb2Zvcm0ge0Jvb2xlYW59XG4gICAgICogQHBhcmFtIG1heEludHJvbkxlbmd0aCB7SW50ZWdlcn0gdGhlIG1heGltdW0gbGVuZ3RoIG9mIGludHJvbi4gSW50cm9uIHJlbmRlcmluZyBpcyBjYXBwZWQgYXQgdGhpcyB2YWx1ZVxuICAgICAqIEBwYXJhbSBtaW5FeG9uV2lkdGgge0ludGVnZXJ9IHRoZSBtaW5pbXVtIHdpZHRoIChwaXhlbHMpIG9mIHRoZSBleG9uIHJlY3RhbmdsZS5cbiAgICAgKi9cblxuICAgIC8qKiBOT1RFOiB0aGUgZXhvbk51bWJlciBpbiBleG9ucyAmIGV4b25zQ3VyYXRlZCBkb24ndCByZWZlciB0byB0aGUgc2FtZSBleG9ucyAoYXQgbGVhc3QgdGhpcyBpcyB0aGUgY2FzZSBpbiBHVEV4KVxuICAgICAqICBUbyBlbnN1cmUgY29ycmVjdCBleG9uIG1hcHBpbmcgb2YgdGhlIGN1cmF0ZWQgZ2VuZSBtb2RlbCB0byB0aGUgb3JpZ2luYWwgbW9kZWwsIGhlcmUgd2UgdXNlIGdlbm9taWMgcG9zaXRpb24uXG4gICAgICovXG4gICAgY29uc3RydWN0b3IgKGdlbmUsIGV4b25zLCBleG9uc0N1cmF0ZWQsIGp1bmN0aW9ucywgaXNJc29mb3JtPWZhbHNlLCBtYXhJbnRyb25MZW5ndGg9MTAwMCwgbWluRXhvbldpZHRoPTApe1xuICAgICAgICB0aGlzLmdlbmUgPSBnZW5lO1xuICAgICAgICB0aGlzLmV4b25zID0gZXhvbnM7XG4gICAgICAgIGlmICh0aGlzLmdlbmUuc3RyYW5kID09IFwiK1wiKSB0aGlzLmV4b25zLnNvcnQoKGEsIGIpPT57cmV0dXJuIE51bWJlcihhLmV4b25OdW1iZXIpLU51bWJlcihiLmV4b25OdW1iZXIpfSk7XG4gICAgICAgIGVsc2UgdGhpcy5leG9ucy5zb3J0KChhLCBiKT0+e3JldHVybiBOdW1iZXIoYi5leG9uTnVtYmVyKS1OdW1iZXIoYS5leG9uTnVtYmVyKX0pO1xuICAgICAgICB0aGlzLmV4b25zQ3VyYXRlZCA9IGV4b25zQ3VyYXRlZC5zb3J0KChhLCBiKT0+e3JldHVybiBOdW1iZXIoYS5leG9uTnVtYmVyKS1OdW1iZXIoYi5leG9uTnVtYmVyKX0pO1xuICAgICAgICB0aGlzLmp1bmN0aW9ucyA9IGp1bmN0aW9ucy5zb3J0KChhLGIpID0+IHtcbiAgICAgICAgICAgIGlmIChhLmp1bmN0aW9uSWQgPCBiLmp1bmN0aW9uSWQpIHJldHVybiAtMTtcbiAgICAgICAgICAgIGlmIChhLmp1bmN0aW9uSWQgPiBiLmp1bmN0aW9uSWQpIHJldHVybiAxO1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0pOyAvLyBzb3J0ZWQgYnkganVuY3Rpb24gSURcbiAgICAgICAgdGhpcy5pc0lzb2Zvcm0gPSBpc0lzb2Zvcm07XG4gICAgICAgIHRoaXMubWF4SW50cm9uTGVuZ3RoID0gbWF4SW50cm9uTGVuZ3RoO1xuXG4gICAgICAgIC8vIGhhcmQtY29kZWQgZm9yIG5vd1xuICAgICAgICB0aGlzLmludHJvbkxlbmd0aCA9IDA7IC8vIGZpeGVkIGZha2UgaW50cm9uIGxlbmd0aCBpbiBiYXNlIHBhaXJzLCBvYnNvbGV0ZT9cbiAgICAgICAgdGhpcy5taW5FeG9uV2lkdGggPSBtaW5FeG9uV2lkdGg7IC8vIG1pbmltdW0gZXhvbiB3aWR0aCBpbiBwaXhlbHNcbiAgICAgICAgdGhpcy5udWxsQ29sb3IgPSAnI0RERERERCc7XG4gICAgfVxuXG4gICAgY2hhbmdlVGV4dGxhYmVsKGRvbSwgbGFiZWwpe1xuICAgICAgICBkb20uc2VsZWN0QWxsKFwiI21vZGVsSW5mb1wiKS50ZXh0KGxhYmVsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBkb20ge09iamVjdH0gb2YgRDNcbiAgICAgKiBAcGFyYW0gamRhdGEge0xpc3R9IG9mIGp1bmN0aW9uIGV4cHJlc3Npb24gb2JqZWN0c1xuICAgICAqIEBwYXJhbSBlZGF0YSB7TGlzdH0gb2YgZXhvbiBleHByZXNzaW9uIG9iamVjdHNcbiAgICAgKiBAcGFyYW0ganNjYWxlIHtEMyBzY2FsZX0gb2YgY29sb3JzIG9mIGp1bmN0aW9uIGRhdGFcbiAgICAgKiBAcGFyYW0gZXNjYWxlIHtEMyBzY2FsZX0gb2YgY29sb3JzIG9mIGV4b24gZGF0YVxuICAgICAqL1xuICAgIGFkZERhdGEoZG9tLCBqZGF0YSwgZWRhdGEsIGpzY2FsZSwgZXNjYWxlKXtcbiAgICAgICAgaWYgKGpkYXRhICE9PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgZG9tLnNlbGVjdEFsbChcIi5qdW5jXCIpLnN0eWxlKFwiZmlsbFwiLCAoZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBqZGF0YS5maWx0ZXIoKHopPT56Lmp1bmN0aW9uSWQ9PWQuanVuY3Rpb25JZClbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgamNvbG9yID0gdi52YWx1ZT09MD90aGlzLm51bGxDb2xvcjpqc2NhbGUodi52YWx1ZSk7XG4gICAgICAgICAgICAgICAgZG9tLnNlbGVjdEFsbChcIi5qdW5jLWN1cnZlXCIpLmZpbHRlcigoYC5qdW5jJHtkLmp1bmN0aW9uSWR9YCkpLnN0eWxlKFwic3Ryb2tlXCIsIGpjb2xvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGpjb2xvcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZG9tLnNlbGVjdEFsbChcIi5leG9uLWN1cmF0ZWRcIikuc3R5bGUoXCJmaWxsXCIsIChkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ID0gZWRhdGEuZmlsdGVyKCh6KT0+ei5leG9uSWQ9PWQuZXhvbklkKVswXTtcbiAgICAgICAgICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHRocm93IGAke2QuZXhvbklkfSBoYXMgbm8gZGF0YWA7XG4gICAgICAgICAgICBjb25zdCBlY29sb3IgPSB2LnZhbHVlID09IDA/dGhpcy5udWxsQ29sb3I6ZXNjYWxlKHYudmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGVjb2xvcjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVuZGVyIHRoZSBTVkcgb2YgdGhlIGdlbmUgbW9kZWxcbiAgICAgKiBAcGFyYW0gZG9tOiBhbiBTVkcgZG9tIG9iamVjdFxuICAgICAqIEBwYXJhbSBjb25maWdcblxuICAgICAqL1xuICAgIHJlbmRlcihkb20sIGNvbmZpZykge1xuICAgICAgICB0aGlzLnNldFhzY2FsZShjb25maWcudyk7XG5cbiAgICAgICAgLyogTm90ZTogZXhvbi54LCBleG9uLncgYXJlIGluIHBpeGVscyBmb3IgdmlzdWFsIHJlbmRlcmluZyAqL1xuICAgICAgICAvKiBOb3RlOiBleG9uLmxlbmd0aCBpcyBpbiBiYXNlIHBhaXJzICovXG4gICAgICAgIC8vIGNhbGN1bGF0aW5nIHggYW5kIHcgZm9yIGVhY2ggZXhvblxuICAgICAgICBjb25zdCBleG9uWSA9IGNvbmZpZy5oLzI7IC8vIFRPRE86IHJlbW92ZSBoYXJkLWNvZGVkIHZhbHVlc1xuICAgICAgICB0aGlzLmV4b25zLmZvckVhY2goKGQsIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChpID09IDApIHtcbiAgICAgICAgICAgICAgICBkLnggPSAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkLnggPSB0aGlzLmV4b25zW2ktMV0ueCArIHRoaXMuZXhvbnNbaS0xXS53ICsgdGhpcy54U2NhbGUoZC5pbnRyb25MZW5ndGg+dGhpcy5tYXhJbnRyb25MZW5ndGg/dGhpcy5tYXhJbnRyb25MZW5ndGg6ZC5pbnRyb25MZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZC53ID0gdGhpcy54U2NhbGUoZC5sZW5ndGgpPHRoaXMubWluRXhvbldpZHRoP3RoaXMubWluRXhvbldpZHRoOnRoaXMueFNjYWxlKGQubGVuZ3RoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gY2FsY3VsYWluZyB4IGFuZCB3IG9mIHRoZSByZWN0YW5nbGUgZm9yIGVhY2ggY3VyYXRlZCBleG9uIG9uIHRoZSBmaW5hbCBnZW5lIG1vZGVsXG4gICAgICAgIHRoaXMuZXhvbnNDdXJhdGVkLmZvckVhY2goKGQsIGkpID0+IHtcbiAgICAgICAgICAgIC8vIGZpcnN0LCBtYXAgZWFjaCBmaW5hbCBjdXJhdGVkIGV4b24gdG8gdGhlIG9yaWdpbmFsIGZ1bGwgZ2VuZSBtb2RlbC0tZmluZCB0aGUgb3JpZ2luYWwgZXhvblxuICAgICAgICAgICAgLy8gZmluZCB0aGUgb3JpZ2luYWwgZXhvblxuICAgICAgICAgICAgZC5vcmlFeG9uID0gdGhpcy5fZmluZEV4b24oZC5jaHJvbVN0YXJ0KXx8dGhpcy5fZmluZEV4b24oZC5jaHJvbUVuZCk7XG4gICAgICAgICAgICBpZiAoZC5vcmlFeG9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBub3QgZm91bmRcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYCR7dGhpcy5nZW5lLnRyYW5zY3JpcHRJZH0tJHtkLmV4b25JZH0gY2FuJ3QgbWFwIHRvIGZ1bGwgZ2VuZSBtb2RlbGApO1xuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaWdub3JlIHVubWFwcGFibGUgZXhvbnMsIHRoaXMgaGFwcGVucyBhdCB0aW1lcyAod2h5PylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2FsY3VsYXRlIGZvciB4XG4gICAgICAgICAgICBpZiAoTnVtYmVyKGQub3JpRXhvbi5jaHJvbVN0YXJ0KSA9PSBOdW1iZXIoZC5jaHJvbVN0YXJ0KSkgZC54ID0gZC5vcmlFeG9uLng7XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgZXhvbiBkb2Vzbid0IHN0YXJ0IGZyb20gdGhlIG9yaUV4b24gc3RhcnQgcG9zXG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdCA9IE51bWJlcihkLmNocm9tU3RhcnQpIC0gTnVtYmVyKGQub3JpRXhvbi5jaHJvbVN0YXJ0KSArIDE7XG4gICAgICAgICAgICAgICAgZC54ID0gZC5vcmlFeG9uLnggKyB0aGlzLnhTY2FsZShkaXN0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2FsY3VsYXRlIGZvciB3XG4gICAgICAgICAgICBpZiAoZC5sZW5ndGggPT09IHVuZGVmaW5lZCkgZC5sZW5ndGggPSBOdW1iZXIoZC5jaHJvbUVuZCkgLSBOdW1iZXIoZC5jaHJvbVN0YXJ0KSArIDE7XG4gICAgICAgICAgICBkLncgPSB0aGlzLnhTY2FsZShkLmxlbmd0aCk8dGhpcy5taW5FeG9uV2lkdGg/dGhpcy5taW5FeG9uV2lkdGg6dGhpcy54U2NhbGUoZC5sZW5ndGgpO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmKCF0aGlzLmlzSXNvZm9ybSl7XG4gICAgICAgICAgICAvLyBOT1RFOiBkbyBub3QgYWx0ZXIgdGhlIHJlbmRlcmluZyBvcmRlciBvZiB2aXN1YWwgY29tcG9uZW50cy5cbiAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYSBnZW5lIG1vZGVsLCBub3QgYW4gaXNvZm9ybVxuICAgICAgICAgICAgLy8gY2FsY3VsYXRpbmcgcG9zaXRpb25zIGZvciBlYWNoIGp1bmN0aW9uXG4gICAgICAgICAgICB0aGlzLmp1bmN0aW9ucyA9IHRoaXMuanVuY3Rpb25zLmZpbHRlcigoZCk9PntcbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBmaWx0ZXIgdW5tYXBwZWQganVuY3Rpb25zXG4gICAgICAgICAgICAgICAgZC5zdGFydEV4b24gPSB0aGlzLl9maW5kRXhvbihkLmNocm9tU3RhcnQpO1xuICAgICAgICAgICAgICAgIGQuZW5kRXhvbiA9IHRoaXMuX2ZpbmRFeG9uKGQuY2hyb21FbmQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkLnN0YXJ0RXhvbiAhPT0gdW5kZWZpbmVkICYmIGQuZW5kRXhvbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuanVuY3Rpb25zLnNvcnQoKGEsYik9PntcbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBzb3J0IGJ5IGNocm9tU3RhcnRcbiAgICAgICAgICAgICAgICBpZiAoK2EuY2hyb21TdGFydCA8ICtiLmNocm9tU3RhcnQpIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICBpZiAoK2EuY2hyb21TdGFydCA+ICtiLmNocm9tU3RhcnQpIHJldHVybiAxO1xuXG4gICAgICAgICAgICAgICAgLy8gdGhlbiBzb3J0IGJ5IGNocm9tRW5kOlxuICAgICAgICAgICAgICAgIGlmICgrYS5jaHJvbUVuZCA8ICtiLmNocm9tRW5kKSByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgaWYgKCthLmNocm9tRW5kID4gK2IuY2hyb21FbmQpIHJldHVybiAxO1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmp1bmN0aW9ucy5mb3JFYWNoKChkLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZC5zdGFydEV4b24gPSB0aGlzLl9maW5kRXhvbihkLmNocm9tU3RhcnQpO1xuICAgICAgICAgICAgICAgIC8vIGQuZW5kRXhvbiA9IHRoaXMuX2ZpbmRFeG9uKGQuY2hyb21FbmQpO1xuICAgICAgICAgICAgICAgIGQuZGlzcGxheU5hbWUgPSBgSnVuY3Rpb24gJHtpKzF9YDtcblxuXG4gICAgICAgICAgICAgICAgLy8gZC5kaXNwbGF5TmFtZSA9IGBFeG9uICR7ZC5zdGFydEV4b24uZXhvbk51bWJlcn0gLSAke2QuZW5kRXhvbi5leG9uTnVtYmVyfWA7XG4gICAgICAgICAgICAgICAgLy8gaWYgKGQuc3RhcnRFeG9uLmV4b25OdW1iZXIgPT0gZC5lbmRFeG9uLmV4b25OdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgY29uc29sZS53YXJuKGQuanVuY3Rpb25JZCArIFwiIGlzIGluIEV4b246IFwiICtkLnN0YXJ0RXhvbi5jaHJvbVN0YXJ0ICsgXCIgLSBcIiArIGQuc3RhcnRFeG9uLmNocm9tRW5kICk7XG4gICAgICAgICAgICAgICAgLy8gfSAvLyB3aGF0IGlzIGhhcHBlbmluZ1xuXG4gICAgICAgICAgICAgICAgLy8gZC5maWx0ZXJlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2FsY3VsYXRlIGZvciBwb3NpdGlvbnNcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0ID0gTnVtYmVyKGQuY2hyb21TdGFydCkgLSBOdW1iZXIoZC5zdGFydEV4b24uY2hyb21TdGFydCkgKyAxO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3QyID0gTnVtYmVyKGQuY2hyb21FbmQpIC0gTnVtYmVyKGQuZW5kRXhvbi5jaHJvbVN0YXJ0KSArIDE7XG5cbiAgICAgICAgICAgICAgICBkLnN0YXJ0WCA9IGQuc3RhcnRFeG9uLnggKyB0aGlzLnhTY2FsZShkaXN0KTtcbiAgICAgICAgICAgICAgICBkLmVuZFggPSBkLmVuZEV4b24ueCArIHRoaXMueFNjYWxlKGRpc3QyKTtcbiAgICAgICAgICAgICAgICBkLmN4ID0gZC5zdGFydFggKyAoZC5lbmRYIC0gZC5zdGFydFggKyAxKS8yOyAvLyBqdW5jdGlvbiBpcyByZW5kZXJlZCBhdCB0aGUgbWlkcG9pbnQgYmV0d2VlbiBzdGFydFggYW5kIGVuZFhcbiAgICAgICAgICAgICAgICBkLmN5ID0gZXhvblkgLSAxNSAqICggTWF0aC5hYnMoTnVtYmVyKGQuZW5kRXhvbi5leG9uTnVtYmVyKSAtIE51bWJlcihkLnN0YXJ0RXhvbi5leG9uTnVtYmVyKSkgKyAwLjUgKTtcbiAgICAgICAgICAgICAgICBpZiAoZC5jeSA8IDApIGQuY3kgPSAwO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gaGFuZGxpbmcgZWRnZSBjYXNlOiBvdmVybGFwcGluZyBqdW5jdGlvbnMsIGFkZCBqaXR0ZXJcbiAgICAgICAgICAgIC8vIGEucmVkdWNlKChyLGspPT57cltrXT0xK3Jba118fDE7cmV0dXJuIHJ9LHt9KVxuICAgICAgICAgICAgY29uc3QgY291bnRzID0gdGhpcy5qdW5jdGlvbnMucmVkdWNlKChyLGQpPT57cltkLmRpc3BsYXlOYW1lXT0xK3JbZC5kaXNwbGF5TmFtZV18fDE7cmV0dXJuIHJ9LHt9KTtcbiAgICAgICAgICAgIHRoaXMuanVuY3Rpb25zLmZvckVhY2goKGQpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBqaXR0ZXJcbiAgICAgICAgICAgICAgICBpZihjb3VudHNbZC5kaXNwbGF5TmFtZV0gPiAxKXsgLy8gb3ZlcmxhcHBpbmcganVuY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIC8vIGQuY3ggKz0gTWF0aC5yYW5kb20oKSoyMDtcbiAgICAgICAgICAgICAgICAgICAgZC5jeSAtPSBNYXRoLnJhbmRvbSgpKjE1O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvKioqKiogcmVuZGVyIGp1bmN0aW9ucyAqL1xuICAgICAgICAgICAgY29uc3QgY3VydmUgPSBsaW5lKClcbiAgICAgICAgICAgICAgICAueCgoZCkgPT4gZC54KVxuICAgICAgICAgICAgICAgIC55KChkKSA9PiBkLnkpXG4gICAgICAgICAgICAgICAgLmN1cnZlKGN1cnZlQ2FyZGluYWwpO1xuXG4gICAgICAgICAgICB0aGlzLmp1bmN0aW9ucy5mb3JFYWNoKChkLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb20uYXBwZW5kKFwicGF0aFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmRhdHVtKFt7eDpkLnN0YXJ0WCwgeTpleG9uWX0sIHt4OmQuY3gsIHk6ZC5jeX0sIHt4OmQuZW5kWCwgeTpleG9uWX1dKSAvLyB0aGUgaW5wdXQgcG9pbnRzIHRvIGRyYXcgdGhlIGN1cnZlXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIGBqdW5jLWN1cnZlIGp1bmMke2QuanVuY3Rpb25JZH1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJkXCIsIGN1cnZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN0eWxlKFwic3Ryb2tlXCIsIFwiIzkyYmNjOVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgY29uc3QganVuY0RvdHMgPSBkb20uc2VsZWN0QWxsKFwiLmp1bmNcIilcbiAgICAgICAgICAgICAgICAuZGF0YSh0aGlzLmp1bmN0aW9ucyk7XG5cbiAgICAgICAgICAgIC8vIHVwZGF0aW5nIGVsZW1lbnRzXG4gICAgICAgICAgICBqdW5jRG90cy5hdHRyKFwiY3hcIiwgKGQpID0+IGQuY3gpO1xuICAgICAgICAgICAganVuY0RvdHMuYXR0cihcImN5XCIsIChkKSA9PiBkLmN5KTsgLy8gVE9ETzogcmVtb3ZlIGhhcmQtY29kZWQgdmFsdWVzXG5cbiAgICAgICAgICAgIC8vIGVudGVyaW5nIG5ldyBlbGVtZW50c1xuICAgICAgICAgICAganVuY0RvdHMuZW50ZXIoKS5hcHBlbmQoXCJjaXJjbGVcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIChkKSA9PiBganVuYyBqdW5jJHtkLmp1bmN0aW9uSWR9YClcbiAgICAgICAgICAgICAgICAuYXR0cihcImN4XCIsIChkKSA9PiBkLmN4KVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY3lcIiwgKGQpID0+IGQuY3kpXG4gICAgICAgICAgICAgICAgLm1lcmdlKGp1bmNEb3RzKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiclwiLCA0KVxuICAgICAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgXCJyZ2IoODYsIDk4LCAxMDcpXCIpO1xuXG4gICAgICAgICAgICAvKioqKiogcmVuZGVyaW5nIGZ1bGwgZ2VuZSBtb2RlbCBleG9ucyAqL1xuICAgICAgICAgICAgY29uc3QgZXhvblJlY3RzID0gZG9tLnNlbGVjdEFsbChcIi5leG9uXCIpXG4gICAgICAgICAgICAuZGF0YSh0aGlzLmV4b25zKTtcblxuICAgICAgICAgICAgLy8gdXBkYXRpbmcgZWxlbWVudHNcbiAgICAgICAgICAgIGV4b25SZWN0cy5hdHRyKFwieFwiLCAoZCkgPT4gZC54KTtcbiAgICAgICAgICAgIGV4b25SZWN0cy5hdHRyKFwieVwiLCBleG9uWSk7XG5cbiAgICAgICAgICAgIC8vIGVudGVyaW5nIG5ldyBlbGVtZW50c1xuICAgICAgICAgICAgZXhvblJlY3RzLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgKGQpPT5gZXhvbiBleG9uJHtkLmV4b25OdW1iZXJ9YClcbiAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgZXhvblkpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJyeFwiLCAyKVxuICAgICAgICAgICAgICAgIC5hdHRyKCdyeScsIDIpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCAoZCkgPT4gZC53KVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIDE1KSAvLyBUT0RPOiByZW1vdmUgaGFyZC1jb2RlZCB2YWx1ZXNcbiAgICAgICAgICAgICAgICAuYXR0cihcInhcIiwgKGQpID0+IGQueClcbiAgICAgICAgICAgICAgICAubWVyZ2UoZXhvblJlY3RzKVxuICAgICAgICAgICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIik7XG5cbiAgICAgICAgICAgIC8vIG1vZGVsIGluZm8gdGV4dCBsYWJlbFxuICAgICAgICAgICAgZG9tLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcImlkXCIsIFwibW9kZWxJbmZvXCIpIC8vIFRPRE86IG5vIGhhcmQtY29kZWQgdmFsdWVcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcImVuZFwiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieFwiLCB0aGlzLnhTY2FsZSgwKSlcbiAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgZXhvblktMTApXG4gICAgICAgICAgICAgICAgLnN0eWxlKFwiZm9udC1zaXplXCIsIDEyKVxuICAgICAgICAgICAgICAgIC50ZXh0KFwiR2VuZSBNb2RlbFwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhbiBpc29mb3JtLCByZW5kZXIgdGhlIGludHJvbiBsaW5lXG4gICAgICAgICAgICBjb25zdCBpbnRyb25MaW5lID0gZG9tLmFwcGVuZChcImxpbmVcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcIngxXCIsIHRoaXMuZXhvbnNDdXJhdGVkWzBdLngpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCB0aGlzLmV4b25zQ3VyYXRlZFt0aGlzLmV4b25zQ3VyYXRlZC5sZW5ndGgtMV0ueClcbiAgICAgICAgICAgICAgICAuYXR0cihcInkxXCIsIGV4b25ZICsgKDE1LzIpKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieTJcIiwgZXhvblkgKyAoMTUvMikpXG4gICAgICAgICAgICAgICAgLmNsYXNzZWQoXCJpbnRyb25cIiwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvKioqKiogcmVuZGVyaW5nIGN1cmF0ZWQgZXhvbnMgb24gdGhlIGZpbmFsIGdlbmUgbW9kZWwgb3IgaXNvZm9ybSBleG9ucyAqL1xuICAgICAgICBjb25zdCBleG9uUmVjdHMyID0gZG9tLnNlbGVjdEFsbChcIi5leG9uLWN1cmF0ZWRcIilcbiAgICAgICAgICAgIC5kYXRhKHRoaXMuZXhvbnNDdXJhdGVkKTtcblxuICAgICAgICAvLyB1cGRhdGluZyBlbGVtZW50c1xuICAgICAgICBleG9uUmVjdHMyLmF0dHIoXCJ4XCIsIChkKSA9PiBkLngpO1xuICAgICAgICBleG9uUmVjdHMyLmF0dHIoXCJ5XCIsIGV4b25ZKTtcblxuICAgICAgICAvLyBlbnRlcmluZyBuZXcgZWxlbWVudHNcbiAgICAgICAgZXhvblJlY3RzMi5lbnRlcigpLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgKGQpPT50aGlzLmlzSXNvZm9ybT8nZXhvbi1jdXJhdGVkJzpgZXhvbi1jdXJhdGVkIGV4b24tY3VyYXRlZCR7ZC5leG9uTnVtYmVyfWApXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgZXhvblkpXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIChkKSA9PiBkLncpXG4gICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCAxNSkgLy8gVE9ETzogcmVtb3ZlIGhhcmQtY29kZWQgdmFsdWVzXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgKGQpID0+IGQueClcbiAgICAgICAgICAgIC5tZXJnZShleG9uUmVjdHMyKVxuICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBcIiNlZWVcIilcbiAgICAgICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIik7XG5cblxuICAgICAgICAvKioqKiogcmVuZGVyaW5nIHRleHQgbGFiZWxzICovXG4gICAgICAgIGlmIChjb25maWcubGFiZWxPbiA9PSAnbGVmdCcgfHwgY29uZmlnLmxhYmVsT24gPT0gJ2JvdGgnKXtcbiAgICAgICAgICAgIGRvbS5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuYXR0cihcImlkXCIsIFwibW9kZWxMYWJlbFwiKSAvLyBUT0RPOiBubyBoYXJkLWNvZGVkIHZhbHVlXG4gICAgICAgICAgICAuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcImVuZFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIHRoaXMueFNjYWxlLnJhbmdlKClbMF0gLSA1KVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGV4b25ZICsgNy41KVxuICAgICAgICAgICAgLnN0eWxlKFwiZm9udC1zaXplXCIsIFwiOXB4XCIpXG4gICAgICAgICAgICAudGV4dCh0aGlzLmdlbmUudHJhbnNjcmlwdElkPT09dW5kZWZpbmVkP2Ake3RoaXMuZ2VuZS5nZW5lU3ltYm9sfWA6dGhpcy5nZW5lLnRyYW5zY3JpcHRJZCk7XG5cblxuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcubGFiZWxPbiA9PSAncmlnaHQnIHx8IGNvbmZpZy5sYWJlbE9uID09ICdib3RoJyl7XG4gICAgICAgICAgICBkb20uYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJpZFwiLCBcIm1vZGVsTGFiZWxSaWdodFwiKSAvLyBUT0RPOiBubyBoYXJkLWNvZGVkIHZhbHVlXG4gICAgICAgICAgICAuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcInN0YXJ0XCIpXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgdGhpcy54U2NhbGUucmFuZ2UoKVsxXSArIDUwKVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGV4b25ZICsgNy41KVxuICAgICAgICAgICAgLnN0eWxlKFwiZm9udC1zaXplXCIsIFwiOXB4XCIpXG4gICAgICAgICAgICAudGV4dCh0aGlzLmdlbmUudHJhbnNjcmlwdElkPT09dW5kZWZpbmVkP2Ake3RoaXMuZ2VuZS5nZW5lU3ltYm9sfWA6dGhpcy5nZW5lLnRyYW5zY3JpcHRJZCk7XG5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFhzY2FsZSh3KXtcbiAgICAgICAgLy8gY29uY2VwdCBleHBsYWluZWQ6XG4gICAgICAgIC8vIGFzc3VtaW5nIHRoZSBjYW52YXMgd2lkdGggaXMgZml4ZWRcbiAgICAgICAgLy8gdGhlIHRhc2sgaXMgaG93IHRvIHJlbmRlciBhbGwgZXhvbnMgKyBmaXhlZC13aWR0aCBpbnRyb25zIHdpdGhpbiB0aGUgY2FudmFzXG4gICAgICAgIC8vIGZpcnN0IGZpbmQgdGhlIGxhcmdlc3QgZXhvbixcbiAgICAgICAgLy8gdGhlbiBzZXQgdGhlIHggc2NhbGUgb2YgdGhlIGNhbnZhcyB0byBhY2NvbW1vZGF0ZSBtYXgoZXhvbiBsZW5ndGgpKmV4b24gY291bnRzLFxuICAgICAgICAvLyB0aGlzIGVuc3VyZXMgdGhhdCB0aGVyZSdzIGFsd2F5cyBzcGFjZSBmb3IgcmVuZGVyaW5nIGludHJvbnNcbiAgICAgICAgLy8gdGhlIGZpeGVkIGludHJvbiB3aWR0aCBpcyBjYWxjdWxhdGVkIGFzIHN1Y2g6XG4gICAgICAgIC8vICgobWF4KGV4b24gbGVuZ3RoKSAqIGV4b24gY291bnRzKSAtIHRvdGFsIGV4b24gbGVuZ3RoKS8oZXhvbiBjb3VudHMgLSAxKVxuXG4gICAgICAgIHRoaXMuZXhvbnMuc29ydCgoYSxiKT0+e1xuICAgICAgICAgICAgaWYgKE51bWJlcihhLmNocm9tU3RhcnQpIDwgTnVtYmVyKGIuY2hyb21TdGFydCkpIHJldHVybiAtMTtcbiAgICAgICAgICAgIGlmIChOdW1iZXIoYS5jaHJvbVN0YXJ0KSA+IE51bWJlcihiLmNocm9tU3RhcnQpKSByZXR1cm4gMTtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgdGhpcy5leG9ucy5mb3JFYWNoKChkLCBpKT0+e1xuICAgICAgICAgICAgZC5sZW5ndGggPSBOdW1iZXIoZC5jaHJvbUVuZCkgLSBOdW1iZXIoZC5jaHJvbVN0YXJ0KSArIDE7XG4gICAgICAgICAgICBpZiAoaSA9PSAwKXtcbiAgICAgICAgICAgICAgICAvLyB0aGUgZmlyc3QgZXhvblxuICAgICAgICAgICAgICAgIHN1bSArPSBkLmxlbmd0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IG5iID0gdGhpcy5leG9uc1tpLTFdOyAvLyB0aGUgdXBzdHJlYW0gbmVpZ2hib3IgZXhvblxuICAgICAgICAgICAgICAgIGQuaW50cm9uTGVuZ3RoID0gTnVtYmVyKGQuY2hyb21TdGFydCkgLSBOdW1iZXIobmIuY2hyb21FbmQpICsgMTtcbiAgICAgICAgICAgICAgICBzdW0gKz0gZC5sZW5ndGggKyAoZC5pbnRyb25MZW5ndGg+dGhpcy5tYXhJbnRyb25MZW5ndGg/dGhpcy5tYXhJbnRyb25MZW5ndGg6ZC5pbnRyb25MZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBkb21haW4gPSBbMCwgc3VtXTtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBbMCwgd107XG4gICAgICAgIHRoaXMueFNjYWxlID0gc2NhbGVMaW5lYXIoKVxuICAgICAgICAgICAgLmRvbWFpbihkb21haW4pXG4gICAgICAgICAgICAucmFuZ2UocmFuZ2UpO1xuICAgIH1cblxuICAgIHNldFhzY2FsZUZpeEludHJvbih3KXtcbiAgICAgICAgLy8gY29uY2VwdCBleHBsYWluZWQ6XG4gICAgICAgIC8vIGFzc3VtaW5nIHRoZSBjYW52YXMgd2lkdGggaXMgZml4ZWRcbiAgICAgICAgLy8gdGhlIHRhc2sgaXMgaG93IHRvIHJlbmRlciBhbGwgZXhvbnMgKyBmaXhlZC13aWR0aCBpbnRyb25zIHdpdGhpbiB0aGUgY2FudmFzXG4gICAgICAgIC8vIGZpcnN0IGZpbmQgdGhlIGxhcmdlc3QgZXhvbixcbiAgICAgICAgLy8gdGhlbiBzZXQgdGhlIHggc2NhbGUgb2YgdGhlIGNhbnZhcyB0byBhY2NvbW1vZGF0ZSBtYXgoZXhvbiBsZW5ndGgpKmV4b24gY291bnRzLFxuICAgICAgICAvLyB0aGlzIGVuc3VyZXMgdGhhdCB0aGVyZSdzIGFsd2F5cyBzcGFjZSBmb3IgcmVuZGVyaW5nIGludHJvbnNcbiAgICAgICAgLy8gdGhlIGZpeGVkIGludHJvbiB3aWR0aCBpcyBjYWxjdWxhdGVkIGFzIHN1Y2g6XG4gICAgICAgIC8vICgobWF4KGV4b24gbGVuZ3RoKSAqIGV4b24gY291bnRzKSAtIHRvdGFsIGV4b24gbGVuZ3RoKS8oZXhvbiBjb3VudHMgLSAxKVxuXG4gICAgICAgIHRoaXMuZXhvbnMuZm9yRWFjaCgoZCkgPT4ge2QubGVuZ3RoID0gTnVtYmVyKGQuY2hyb21FbmQpIC0gTnVtYmVyKGQuY2hyb21TdGFydCkgKyAxfSk7XG4gICAgICAgIGNvbnN0IG1heEV4b25MZW5ndGggPSBtYXgodGhpcy5leG9ucywgKGQpPT5kLmxlbmd0aCk7XG5cbiAgICAgICAgY29uc3QgZG9tYWluID0gWzAsIG1heEV4b25MZW5ndGgqdGhpcy5leG9ucy5sZW5ndGhdO1xuICAgICAgICBjb25zdCByYW5nZSA9IFswLCB3XTtcbiAgICAgICAgdGhpcy54U2NhbGUgPSBzY2FsZUxpbmVhcigpXG4gICAgICAgICAgICAuZG9tYWluKGRvbWFpbilcbiAgICAgICAgICAgIC5yYW5nZShyYW5nZSk7XG5cbiAgICAgICAgLy8gZml4ZWQgaW50cm9uIHdpZHRoXG4gICAgICAgIGNvbnN0IG1pbkxlbmd0aCA9IHRoaXMueFNjYWxlLmludmVydCh0aGlzLm1pbkV4b25XaWR0aCk7IC8vIHRoZSBtaW5pbXVtIGV4b24gbGVuZ3RoIHRoYXQgbWFwcyB0byBtaW5pbXVtIGV4b24gd2lkdGggKHBpeGVscykgdXNpbmcgeFNjYWxlXG4gICAgICAgIGNvbnN0IHRvdGFsRXhvbkxlbmd0aCA9IHN1bSh0aGlzLmV4b25zLCAoZCk9PmQubGVuZ3RoPm1pbkxlbmd0aD9kLmxlbmd0aDptaW5MZW5ndGgpOyAvLyBpZiBhbiBleG9uIGlzIHNob3J0ZXIgdGhhbiBtaW4gbGVuZ3RoLCB1c2UgbWluIGxlbmd0aFxuICAgICAgICB0aGlzLmludHJvbkxlbmd0aCA9IChtYXhFeG9uTGVuZ3RoICogdGhpcy5leG9ucy5sZW5ndGggLSB0b3RhbEV4b25MZW5ndGgpLyh0aGlzLmV4b25zLmxlbmd0aC0xKTsgLy8gY2FsdWNsYXRlIHRoZSBmaXhlZCBpbnRyb24gbGVuZ3RoXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9yIGEgZ2l2ZW4gcG9zaXRpb24sIGZpbmQgdGhlIGV4b25cbiAgICAgKiBAcGFyYW0gcG9zIHtJbnRlZ2VyfTogYSBnZW5vbWljIHBvc2l0aW9uXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfZmluZEV4b24ocG9zKXtcbiAgICAgICAgcG9zID0gTnVtYmVyKHBvcyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmV4b25zLmZpbHRlcigoZCkgPT4ge3JldHVybiBOdW1iZXIoZC5jaHJvbVN0YXJ0KSAtIDEgPD0gcG9zICYmIE51bWJlcihkLmNocm9tRW5kKSArIDEgPj0gcG9zfSk7XG4gICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PSAxKSByZXR1cm4gcmVzdWx0c1swXTtcbiAgICAgICAgZWxzZSBpZihyZXN1bHRzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJObyBleG9uIGZvdW5kIGZvcjogXCIgKyBwb3MpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIk1vcmUgdGhhbiBvbmUgZXhvbnMgZm91bmQgZm9yOiBcIiArIHBvcyk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICB9XG5cbn0iLCIvKipcbiAqIENvcHlyaWdodCDCqSAyMDE1IC0gMjAxOCBUaGUgQnJvYWQgSW5zdGl0dXRlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgKGh0dHBzOi8vZ2l0aHViLmNvbS9icm9hZGluc3RpdHV0ZS9ndGV4LXZpei9ibG9iL21hc3Rlci9MSUNFTlNFLm1kKVxuICovXG4vKlxuVGhpcyBjbGFzcyBpcyBhIHZpZXdlciBvZiB0cmFuc2NyaXB0aW9uYWwgaXNvZm9ybXMsIGVhY2ggaXMgcmVuZGVyIGFzIGEgdHJhY2tcbiAqL1xuXG5pbXBvcnQgR2VuZU1vZGVsIGZyb20gXCIuL0dlbmVNb2RlbFwiO1xuaW1wb3J0IHtzZWxlY3QsIHNlbGVjdEFsbH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtzY2FsZUJhbmR9IGZyb20gXCJkMy1zY2FsZVwiO1xuaW1wb3J0IHtheGlzVG9wLCBheGlzUmlnaHR9IGZyb20gXCJkMy1heGlzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElzb2Zvcm1UcmFja1ZpZXdlciB7XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXNvZm9ybXMge0xpc3R9IG9mIGlzb2Zvcm0gb2JqZWN0cyB3aXRoIGF0dHI6IHRyYW5zY3JpcHRJZCwgc3RhcnQsIGVuZFxuICAgICAqIEBwYXJhbSBpc29mb3JtRXhvbnMge0RpY3Rpb25hcnl9IG9mIGxpc3RzIG9mIGlzb2Zvcm0gZXhvbnMgaW5kZXhlZCBieSBpc29mb3JtIElEICh0cmFuc2NyaXB0SWQpXG4gICAgICogQHBhcmFtIG1vZGVsRXhvbnMge0xpc3R9IG9mIHJlZmVyZW5jZSBleG9ucy4uLlxuICAgICAqIEBwYXJhbSBjb25maWdcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihpc29mb3JtcywgaXNvZm9ybUV4b25zLCBtb2RlbEV4b25zLCBjb25maWcpe1xuICAgICAgICB0aGlzLmlzb2Zvcm1zID0gaXNvZm9ybXM7XG4gICAgICAgIHRoaXMuaXNvZm9ybUV4b25zID0gaXNvZm9ybUV4b25zO1xuICAgICAgICB0aGlzLm1vZGVsRXhvbnMgPSBtb2RlbEV4b25zO1xuICAgICAgICB0aGlzLnZpc3VhbERvbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgICAgIHRoaXMubnVsbENvbG9yID0gXCIjREREREREXCI7XG4gICAgfVxuXG4gICAgc2hvd0RhdGEoZGF0YSwgY29sb3JTY2FsZSwgYmFyU2NhbGUsIGRhdGFMYWJlbCwgc29ydD10cnVlKXtcbiAgICAgICAgaWYgKHNvcnQpe1xuICAgICAgICAgICAgZGF0YS5zb3J0KChhLGIpPT57cmV0dXJuIC0oYS5kaXNwbGF5VmFsdWUgLSBiLmRpc3BsYXlWYWx1ZSl9KTsgLy8gZmlyc3Qgc29ydCB0aGUgZXhwcmVzc2lvbiBkYXRhXG4gICAgICAgICAgICBjb25zdCBpZHMgPSBkYXRhLm1hcCgoZCk9PmQudHJhbnNjcmlwdElkKTtcbiAgICAgICAgICAgIHRoaXMuc29ydFRyYWNrcyhpZHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YS5mb3JFYWNoKChkKT0+e1xuICAgICAgICAgICAgY29uc3QgaXNvZm9ybSA9IHRoaXMudmlzdWFsRG9tLnNlbGVjdChgIyR7ZC50cmFuc2NyaXB0SWQucmVwbGFjZShcIi5cIiwgXCJfXCIpfWApO1xuICAgICAgICAgICAgaXNvZm9ybS5zZWxlY3RBbGwoXCIuZXhvbi1jdXJhdGVkXCIpXG4gICAgICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBkLnZhbHVlPT0wP3RoaXMubnVsbENvbG9yOmNvbG9yU2NhbGUoZC52YWx1ZSkpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHJlbmRlciB0aGUgbG9sbGlwb3AgZ3JhcGhcbiAgICAgICAgdGhpcy52aXN1YWxEb20uc2VsZWN0KFwiLmxvbGxpcG9wR3JhcGhcIikucmVtb3ZlKCk7XG4gICAgICAgIGNvbnN0IGxvbGxpcG9wR3JhcGggPSB0aGlzLnZpc3VhbERvbS5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuY2xhc3NlZChcImxvbGxpcG9wR3JhcGhcIiwgdHJ1ZSlcbiAgICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoLTEwMCwgMTMpYCk7IC8vIFRPRE86IHJlbW92ZSBoYXJkLWNvZGVkIHZhbHVlc1xuXG4gICAgICAgIGNvbnN0IGxvbGxpcG9wcyA9IGxvbGxpcG9wR3JhcGguc2VsZWN0QWxsKFwiLmxvbGxpcG9wXCIpXG4gICAgICAgICAgICAuZGF0YShkYXRhKTtcblxuICAgICAgICBjb25zdCBnID0gbG9sbGlwb3BzLmVudGVyKClcbiAgICAgICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuY2xhc3NlZChcImxvbGxpcG9wXCIsIHRydWUpO1xuXG4gICAgICAgIGcuYXBwZW5kKFwibGluZVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4MVwiLCAwKVxuICAgICAgICAgICAgLmF0dHIoXCJ5MVwiLCAoZCk9PnRoaXMueVNjYWxlKGQudHJhbnNjcmlwdElkKSlcbiAgICAgICAgICAgIC5hdHRyKFwieTJcIiwgKGQpPT50aGlzLnlTY2FsZShkLnRyYW5zY3JpcHRJZCkpXG4gICAgICAgICAgICAuc3R5bGUoXCJzdHJva2VcIiwgKGQpPT5kLnZhbHVlPT0wP3RoaXMubnVsbENvbG9yOmNvbG9yU2NhbGUoZC52YWx1ZSkpXG4gICAgICAgICAgICAuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwgMilcbiAgICAgICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgICAgIC5kdXJhdGlvbigxMDAwKVxuICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCAoZCk9PmQudmFsdWU9PTA/MDpiYXJTY2FsZShkLnZhbHVlKSk7XG5cbiAgICAgICAgZy5hcHBlbmQoXCJjaXJjbGVcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY3hcIiwgMClcbiAgICAgICAgICAgIC5hdHRyKFwiY3lcIiwgKGQpPT50aGlzLnlTY2FsZShkLnRyYW5zY3JpcHRJZCkgKVxuICAgICAgICAgICAgLmF0dHIoXCJyXCIsIDUpXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIChkKT0+ZC52YWx1ZT09MD90aGlzLm51bGxDb2xvcjpjb2xvclNjYWxlKGQudmFsdWUpKVxuICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLmR1cmF0aW9uKDEwMDApXG4gICAgICAgICAgICAuYXR0cihcImN4XCIsIChkKT0+YmFyU2NhbGUoZC52YWx1ZSkpO1xuXG4gICAgICAgIC8vIGFkZCB0aGUgYXhlc1xuICAgICAgICBsb2xsaXBvcEdyYXBoLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJsb2xsaXBvcC1heGlzXCIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKDAsLSR7dGhpcy55U2NhbGUuYmFuZHdpZHRoKCkvMn0pYClcbiAgICAgICAgICAgIC5jYWxsKFxuICAgICAgICAgICAgICAgIGF4aXNUb3AoYmFyU2NhbGUpXG4gICAgICAgICAgICAgICAgICAgIC50aWNrcygzKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICBsb2xsaXBvcEdyYXBoLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwiaWRcIiwgXCJsb2xsaUxhYmVsXCIpXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgMClcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAtNDApXG4gICAgICAgICAgICAuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcImVuZFwiKVxuICAgICAgICAgICAgLnN0eWxlKFwiZm9udC1zaXplXCIsIDkpXG4gICAgICAgICAgICAudGV4dChcImxvZzEwKFRQTSlcIik7IC8vIFRPRE86IHRoaXMgc2hvdWxkIGJlIGEgdXNlci1kZWZpbmVkIHRleHRcblxuICAgICAgICBsb2xsaXBvcEdyYXBoLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJsb2xsaXBvcC1heGlzXCIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKDAsLSR7dGhpcy55U2NhbGUuYmFuZHdpZHRoKCkvMn0pYClcbiAgICAgICAgICAgIC5jYWxsKFxuICAgICAgICAgICAgICAgIGF4aXNSaWdodCh0aGlzLnlTY2FsZSlcbiAgICAgICAgICAgICAgICAgIC50aWNrVmFsdWVzKFtdKSAvLyBzaG93IG5vIHRpY2tzXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIC8vIGRhdGEgbGFiZWxcbiAgICAgICAgbG9sbGlwb3BHcmFwaC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuYXR0cihcImlkXCIsIFwibG9sbGlMYWJlbFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIDEwKVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIC0yMClcblxuICAgICAgICAgICAgLnRleHQoYFRyYW5zY3JpcHQgRXhwcmVzc2lvbiBpbiAke2RhdGFMYWJlbH1gKVxuICAgICAgICAgICAgLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJzdGFydFwiKVxuICAgICAgICAgICAgLnN0eWxlKFwiZm9udC1zaXplXCIsIFwiMTJweFwiKTtcblxuXG4gICAgfVxuXG4gICAgc29ydFRyYWNrcyh5bGlzdCl7XG4gICAgICAgIHRoaXMuc2V0WXNjYWxlKHRoaXMuY29uZmlnLmgsIHlsaXN0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIodHJ1ZSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKHJlZHJhdz1mYWxzZSwgZG9tPXVuZGVmaW5lZCwgbGFiZWxPbj0nbGVmdCcsIGR1cmF0aW9uPTEwMDApe1xuICAgICAgICBpZiAoZG9tID09PSB1bmRlZmluZWQgJiYgdGhpcy52aXN1YWxEb20gPT09IHVuZGVmaW5lZCkgdGhyb3cgXCJGYXRhbCBFcnJvcjogbXVzdCBwcm92aWRlIGEgZG9tIGVsZW1lbnRcIjtcbiAgICAgICAgaWYgKGRvbSA9PT0gdW5kZWZpbmVkKSBkb20gPSB0aGlzLnZpc3VhbERvbTtcbiAgICAgICAgZWxzZSB0aGlzLnZpc3VhbERvbSA9IGRvbTtcblxuICAgICAgICBpZih0aGlzLnlTY2FsZT09PXVuZGVmaW5lZCkgdGhpcy5zZXRZc2NhbGUodGhpcy5jb25maWcuaCk7XG5cbiAgICAgICAgY29uc3QgaXNvVHJhY2tzID0gZG9tLnNlbGVjdEFsbChcIi5pc290cmFja1wiKVxuICAgICAgICAgICAgLmRhdGEodGhpcy5pc29mb3Jtcy5tYXAoKGQpPT5kLnRyYW5zY3JpcHRJZCkpO1xuXG4gICAgICAgIC8vIHVwZGF0ZSBvbGQgaXNvZm9ybSB0cmFja3MsIGlmIGFueVxuICAgICAgICBpc29UcmFja3MudHJhbnNpdGlvbigpXG4gICAgICAgICAgICAuZHVyYXRpb24oZHVyYXRpb24pXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCAoZCk9PnsgcmV0dXJuIGB0cmFuc2xhdGUoMCwgJHt0aGlzLnlTY2FsZShkKX0pYH0pO1xuXG4gICAgICAgIC8vIHVwZGF0ZSBuZXcgdHJhY2tzXG4gICAgICAgIGlzb1RyYWNrcy5lbnRlcigpXG4gICAgICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAgICAgLmF0dHIoXCJpZFwiLCAoZCk9PihkLnJlcGxhY2UoXCIuXCIsIFwiX1wiKSkpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiaXNvdHJhY2tcIilcbiAgICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIChkKT0+eyByZXR1cm4gYHRyYW5zbGF0ZSgwLCAwKWB9KVxuXG4gICAgICAgICAgICAvLyAubWVyZ2UoaXNvVHJhY2tzKVxuICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLmR1cmF0aW9uKGR1cmF0aW9uLzIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCAoZCk9PnsgcmV0dXJuIGB0cmFuc2xhdGUoMCwgJHt0aGlzLnlTY2FsZShkKX0pYH0pO1xuXG4gICAgICAgIGlmIChyZWRyYXcpIHJldHVybjtcblxuICAgICAgICB0aGlzLl9yZW5kZXJNb2RlbHModGhpcy5jb25maWcudywgbGFiZWxPbik7XG5cbiAgICB9XG5cbiAgICBfcmVuZGVyTW9kZWxzKHcsIGxhYmVsT24gPSAnbGVmdCcpe1xuICAgICAgICB0aGlzLmlzb2Zvcm1zLmZvckVhY2goKGlzb2Zvcm0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gbmV3IEdlbmVNb2RlbChpc29mb3JtLCB0aGlzLm1vZGVsRXhvbnMsIHRoaXMuaXNvZm9ybUV4b25zW2lzb2Zvcm0udHJhbnNjcmlwdElkXSwgW10sIHRydWUpO1xuICAgICAgICAgICAgY29uc3QgaXNvZm9ybUcgPSBzZWxlY3QoYCMke2lzb2Zvcm0udHJhbnNjcmlwdElkLnJlcGxhY2UoXCIuXCIsIFwiX1wiKX1gKTtcbiAgICAgICAgICAgIG1vZGVsLnJlbmRlcihpc29mb3JtRywge3c6dywgaDogdGhpcy55U2NhbGUuYmFuZHdpZHRoKCksIGxhYmVsT246IGxhYmVsT259KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0WXNjYWxlKGgsIHlsaXN0PXVuZGVmaW5lZCl7XG4gICAgICAgIGlmICh5bGlzdCA9PT0gdW5kZWZpbmVkKSB5bGlzdCA9IHRoaXMuaXNvZm9ybXMubWFwKChkKT0+ZC50cmFuc2NyaXB0SWQpO1xuICAgICAgICB0aGlzLnlTY2FsZSA9IHNjYWxlQmFuZCgpXG4gICAgICAgICAgICAuZG9tYWluKHlsaXN0KVxuICAgICAgICAgICAgLnJhbmdlKFswLCBoXSlcbiAgICAgICAgICAgIC5wYWRkaW5nKC4wNSk7XG4gICAgfVxuXG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuXG4vKlxuVE9ET1xuMS4gcmVmYWN0b3JpbmdcbiAqL1xuJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHtjcmVhdGVTdmcsIGdlbmVyYXRlUmFuZG9tTWF0cml4LCBnZW5lcmF0ZVJhbmRvbUxpc3R9IGZyb20gXCIuL21vZHVsZXMvdXRpbHNcIjtcbmltcG9ydCB7cmFuZ2V9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtyYW5kb21Ob3JtYWx9IGZyb20gXCJkMy1yYW5kb21cIjtcbmltcG9ydCBIZWF0bWFwIGZyb20gXCIuL21vZHVsZXMvSGVhdG1hcFwiO1xuaW1wb3J0IERlbmRyb0hlYXRtYXBDb25maWcgZnJvbSBcIi4vbW9kdWxlcy9EZW5kcm9IZWF0bWFwQ29uZmlnXCI7XG5pbXBvcnQgRGVuZHJvSGVhdG1hcCBmcm9tIFwiLi9tb2R1bGVzL0RlbmRyb0hlYXRtYXBcIjtcbmltcG9ydCBHcm91cGVkVmlvbGluIGZyb20gXCIuL21vZHVsZXMvR3JvdXBlZFZpb2xpblwiO1xuaW1wb3J0IElzb2Zvcm1UcmFja1ZpZXdlciBmcm9tIFwiLi9tb2R1bGVzL0lzb2Zvcm1UcmFja1ZpZXdlclwiO1xuXG5leHBvcnQgY29uc3QgZGVtb0RhdGEgPSB7XG4gICAgaGVhdG1hcDpnZW5lcmF0ZVJhbmRvbU1hdHJpeCh7eDo1MCwgeToxMCwgc2NhbGVGYWN0b3I6MTAwMH0pLFxuICAgIGRlbmRyb0hlYXRtYXA6IHtcbiAgICAgICAgcm93VHJlZTogXCIoKChUUDUzOjAuMTcsU0xLOjAuMTcpOjEuMTgsTkRSRzQ6MS4zNCk6MS4zMyxBQ1ROMzoyLjY3KTtcIixcbiAgICAgICAgY29sVHJlZTogXCIoKChBZGlwb3NlIFZpc2NlcmFsIE9tZW50dW06MC4wNixBZGlwb3NlIFN1YmN1dGFuZW91czowLjA2KTowLjAwLEJsYWRkZXI6MC4wNik6MC4xNixBZHJlbmFsIEdsYW5kOjAuMjIpO1wiLFxuICAgICAgICBoZWF0bWFwOiBbXG4gICAge1xuICAgICAgXCJ5XCI6IFwiU0xLXCIsXG4gICAgICBcInZhbHVlXCI6IDM1LjUwNSxcbiAgICAgIFwieFwiOiBcIkFkaXBvc2UgU3ViY3V0YW5lb3VzXCIsXG4gICAgICBcInVuaXRcIjogXCJUUE1cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJ5XCI6IFwiU0xLXCIsXG4gICAgICBcInZhbHVlXCI6IDI5LjI4LFxuICAgICAgXCJ4XCI6IFwiQWRpcG9zZSBWaXNjZXJhbCBPbWVudHVtXCIsXG4gICAgICBcInVuaXRcIjogXCJUUE1cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJ5XCI6IFwiU0xLXCIsXG4gICAgICBcInZhbHVlXCI6IDE3LjQwNSxcbiAgICAgIFwieFwiOiBcIkFkcmVuYWwgR2xhbmRcIixcbiAgICAgIFwidW5pdFwiOiBcIlRQTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcInlcIjogXCJTTEtcIixcbiAgICAgIFwidmFsdWVcIjogNTMuMjksXG4gICAgICBcInhcIjogXCJCbGFkZGVyXCIsXG4gICAgICBcInVuaXRcIjogXCJUUE1cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJ5XCI6IFwiTkRSRzRcIixcbiAgICAgIFwidmFsdWVcIjogMTIuMDM1LFxuICAgICAgXCJ4XCI6IFwiQWRpcG9zZSBTdWJjdXRhbmVvdXNcIixcbiAgICAgIFwidW5pdFwiOiBcIlRQTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcInlcIjogXCJORFJHNFwiLFxuICAgICAgXCJ2YWx1ZVwiOiA2LjUzMTAwMDAwMDAwMDAwMSxcbiAgICAgIFwieFwiOiBcIkFkaXBvc2UgVmlzY2VyYWwgT21lbnR1bVwiLFxuICAgICAgXCJ1bml0XCI6IFwiVFBNXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwieVwiOiBcIk5EUkc0XCIsXG4gICAgICBcInZhbHVlXCI6IDEzNC44LFxuICAgICAgXCJ4XCI6IFwiQWRyZW5hbCBHbGFuZFwiLFxuICAgICAgXCJ1bml0XCI6IFwiVFBNXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwieVwiOiBcIk5EUkc0XCIsXG4gICAgICBcInZhbHVlXCI6IDcuMTE2MDAwMDAwMDAwMDAwNSxcbiAgICAgIFwieFwiOiBcIkJsYWRkZXJcIixcbiAgICAgIFwidW5pdFwiOiBcIlRQTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcInlcIjogXCJUUDUzXCIsXG4gICAgICBcInZhbHVlXCI6IDI5LjkzNSxcbiAgICAgIFwieFwiOiBcIkFkaXBvc2UgU3ViY3V0YW5lb3VzXCIsXG4gICAgICBcInVuaXRcIjogXCJUUE1cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJ5XCI6IFwiVFA1M1wiLFxuICAgICAgXCJ2YWx1ZVwiOiAyMy41NSxcbiAgICAgIFwieFwiOiBcIkFkaXBvc2UgVmlzY2VyYWwgT21lbnR1bVwiLFxuICAgICAgXCJ1bml0XCI6IFwiVFBNXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwieVwiOiBcIlRQNTNcIixcbiAgICAgIFwidmFsdWVcIjogMTguNTE1LFxuICAgICAgXCJ4XCI6IFwiQWRyZW5hbCBHbGFuZFwiLFxuICAgICAgXCJ1bml0XCI6IFwiVFBNXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwieVwiOiBcIlRQNTNcIixcbiAgICAgIFwidmFsdWVcIjogNDAuNTEsXG4gICAgICBcInhcIjogXCJCbGFkZGVyXCIsXG4gICAgICBcInVuaXRcIjogXCJUUE1cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJ5XCI6IFwiQUNUTjNcIixcbiAgICAgIFwidmFsdWVcIjogMC4zMzE0NSxcbiAgICAgIFwieFwiOiBcIkFkaXBvc2UgU3ViY3V0YW5lb3VzXCIsXG4gICAgICBcInVuaXRcIjogXCJUUE1cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJ5XCI6IFwiQUNUTjNcIixcbiAgICAgIFwidmFsdWVcIjogMC4zMzE3LFxuICAgICAgXCJ4XCI6IFwiQWRpcG9zZSBWaXNjZXJhbCBPbWVudHVtXCIsXG4gICAgICBcInVuaXRcIjogXCJUUE1cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJ5XCI6IFwiQUNUTjNcIixcbiAgICAgIFwidmFsdWVcIjogMC4xMDAwMDUsXG4gICAgICBcInhcIjogXCJBZHJlbmFsIEdsYW5kXCIsXG4gICAgICBcInVuaXRcIjogXCJUUE1cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJ5XCI6IFwiQUNUTjNcIixcbiAgICAgIFwidmFsdWVcIjogMC40ODEwMDAwMDAwMDAwMDAwNCxcbiAgICAgIFwieFwiOiBcIkJsYWRkZXJcIixcbiAgICAgIFwidW5pdFwiOiBcIlRQTVwiXG4gICAgfVxuICBdXG4gICAgfSxcbiAgICBncm91cGVkVmlvbGluUGxvdDogW1xuICAgICAgICB7XG4gICAgICAgICAgIGdyb3VwOiBcIkdyb3VwIDFcIixcbiAgICAgICAgICAgbGFiZWw6IFwiR2VuZSAxXCIsXG4gICAgICAgICAgIHZhbHVlczogcmFuZ2UoMCwgMjAwMCkubWFwKHJhbmRvbU5vcm1hbCgyLCAxKSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JvdXA6IFwiR3JvdXAgMVwiLFxuICAgICAgICAgICAgbGFiZWw6IFwiR2VuZSAyXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHJhbmdlKDAsIDIwMDApLm1hcChyYW5kb21Ob3JtYWwoNSwgMSkpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyb3VwOiBcIkdyb3VwIDFcIixcbiAgICAgICAgICAgIGxhYmVsOiBcIkdlbmUgM1wiLFxuICAgICAgICAgICAgdmFsdWVzOiByYW5nZSgwLCAyMDAwKS5tYXAocmFuZG9tTm9ybWFsKDEwLCAxKSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICBncm91cDogXCJHcm91cCAyXCIsXG4gICAgICAgICAgIGxhYmVsOiBcIkdlbmUgMVwiLFxuICAgICAgICAgICB2YWx1ZXM6IHJhbmdlKDAsIDIwMDApLm1hcChyYW5kb21Ob3JtYWwoNSwgMSkpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyb3VwOiBcIkdyb3VwIDJcIixcbiAgICAgICAgICAgIGxhYmVsOiBcIkdlbmUgMlwiLFxuICAgICAgICAgICAgdmFsdWVzOiByYW5nZSgwLCAyMDAwKS5tYXAocmFuZG9tTm9ybWFsKDMsIDEpKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBncm91cDogXCJHcm91cCAyXCIsXG4gICAgICAgICAgICBsYWJlbDogXCJHZW5lIDNcIixcbiAgICAgICAgICAgIHZhbHVlczogcmFuZ2UoMCwgMjAwMCkubWFwKHJhbmRvbU5vcm1hbCgxLCAxKSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICBncm91cDogXCJHcm91cCAzXCIsXG4gICAgICAgICAgIGxhYmVsOiBcIkdlbmUgMVwiLFxuICAgICAgICAgICB2YWx1ZXM6IHJhbmdlKDAsIDIwMDApLm1hcChyYW5kb21Ob3JtYWwoMiwgMSkpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyb3VwOiBcIkdyb3VwIDNcIixcbiAgICAgICAgICAgIGxhYmVsOiBcIkdlbmUgMlwiLFxuICAgICAgICAgICAgdmFsdWVzOiByYW5nZSgwLCAyMDAwKS5tYXAocmFuZG9tTm9ybWFsKDMsIDEpKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBncm91cDogXCJHcm91cCAzXCIsXG4gICAgICAgICAgICBsYWJlbDogXCJHZW5lIDNcIixcbiAgICAgICAgICAgIHZhbHVlczogcmFuZ2UoMCwgMjAwMCkubWFwKHJhbmRvbU5vcm1hbCg1LCAxKSlcbiAgICAgICAgfVxuICAgIF0sXG4gICAgdHJhbnNjcmlwdFRyYWNrczoge1xuICAgICAgICBcImV4b25zXCI6IHtcbiAgICAgICAgICAgIFwiRU5TVDAwMDAwNTc4NDE5LjFcIjogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVwiOiBcIjE3XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21TdGFydFwiOiA3NzA3MTAyMSxcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbUVuZFwiOiA3NzA3MTE3MixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJhbmRcIjogXCIrXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbk51bWJlclwiOiBcIjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uSWRcIjogXCJFTlNFMDAwMDM1MDIwMzIuMVwiXG5cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVwiOiBcIjE3XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21FbmRcIjogNzcwNzM1NzksXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbklkXCI6IFwiRU5TRTAwMDAzNjcyNjI4LjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uTnVtYmVyXCI6IFwiMlwiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tU3RhcnRcIjogNzcwNzM1MTIsXG4gICAgICAgICAgICAgICAgICAgIFwic3RyYW5kXCI6IFwiK1wiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21cIjogXCIxN1wiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tRW5kXCI6IDc3MDczOTQ2LFxuICAgICAgICAgICAgICAgICAgICBcImV4b25JZFwiOiBcIkVOU0UwMDAwMzQ3NTI4MS4xXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbk51bWJlclwiOiBcIjNcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVN0YXJ0XCI6IDc3MDczNzQ1LFxuICAgICAgICAgICAgICAgICAgICBcInN0cmFuZFwiOiBcIitcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImNocm9tXCI6IFwiMTdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbUVuZFwiOiA3NzA3NjQ0NixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uSWRcIjogXCJFTlNFMDAwMDM2Nzk4NTIuMVwiLFxuICAgICAgICAgICAgICAgICAgICBcImV4b25OdW1iZXJcIjogXCI0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21TdGFydFwiOiA3NzA3NjI4OSxcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJhbmRcIjogXCIrXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVwiOiBcIjE3XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21FbmRcIjogNzcwNzcxNTUsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbklkXCI6IFwiRU5TRTAwMDAzNTgzNTE1LjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uTnVtYmVyXCI6IFwiNVwiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tU3RhcnRcIjogNzcwNzcwMDcsXG4gICAgICAgICAgICAgICAgICAgIFwic3RyYW5kXCI6IFwiK1wiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21cIjogXCIxN1wiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tRW5kXCI6IDc3MDc4NjMxLFxuICAgICAgICAgICAgICAgICAgICBcImV4b25JZFwiOiBcIkVOU0UwMDAwMzU4OTIzMC4xXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbk51bWJlclwiOiBcIjZcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVN0YXJ0XCI6IDc3MDc3OTgwLFxuICAgICAgICAgICAgICAgICAgICBcInN0cmFuZFwiOiBcIitcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcIkVOU1QwMDAwMDUzOTg1Ny4yXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21cIjogXCIxN1wiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tRW5kXCI6IDc3MDcxMTcyLFxuICAgICAgICAgICAgICAgICAgICBcImV4b25JZFwiOiBcIkVOU0UwMDAwMzUxMjQwMS4xXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbk51bWJlclwiOiBcIjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVN0YXJ0XCI6IDc3MDcxMDIxLFxuICAgICAgICAgICAgICAgICAgICBcInN0cmFuZFwiOiBcIitcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImNocm9tXCI6IFwiMTdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbUVuZFwiOiA3NzA3MzU3OSxcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uSWRcIjogXCJFTlNFMDAwMDM2MjM4MjguMVwiLFxuICAgICAgICAgICAgICAgICAgICBcImV4b25OdW1iZXJcIjogXCIyXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21TdGFydFwiOiA3NzA3MzUxMixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJhbmRcIjogXCIrXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVwiOiBcIjE3XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21FbmRcIjogNzcwNzM5NDYsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbklkXCI6IFwiRU5TRTAwMDAzNjM4NjkzLjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uTnVtYmVyXCI6IFwiM1wiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tU3RhcnRcIjogNzcwNzM3NDUsXG4gICAgICAgICAgICAgICAgICAgIFwic3RyYW5kXCI6IFwiK1wiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21cIjogXCIxN1wiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tRW5kXCI6IDc3MDc2NDQ2LFxuICAgICAgICAgICAgICAgICAgICBcImV4b25JZFwiOiBcIkVOU0UwMDAwMzY1MTI1MC4xXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbk51bWJlclwiOiBcIjRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVN0YXJ0XCI6IDc3MDc2Mjg5LFxuICAgICAgICAgICAgICAgICAgICBcInN0cmFuZFwiOiBcIitcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImNocm9tXCI6IFwiMTdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbUVuZFwiOiA3NzA3NzE1NSxcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uSWRcIjogXCJFTlNFMDAwMDM2MDc3NzMuMVwiLFxuICAgICAgICAgICAgICAgICAgICBcImV4b25OdW1iZXJcIjogXCI1XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21TdGFydFwiOiA3NzA3NzAwNyxcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJhbmRcIjogXCIrXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVwiOiBcIjE3XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21FbmRcIjogNzcwNzg2MzEsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbklkXCI6IFwiRU5TRTAwMDAzNDg4MTE3LjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uTnVtYmVyXCI6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tU3RhcnRcIjogNzcwNzc5ODAsXG4gICAgICAgICAgICAgICAgICAgIFwic3RyYW5kXCI6IFwiK1wiXG4gICAgICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICBcIkVOU1QwMDAwMDMxMTU5NS45XCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21cIjogXCIxN1wiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tRW5kXCI6IDc3MDcxMTcyLFxuICAgICAgICAgICAgICAgICAgICBcImV4b25JZFwiOiBcIkVOU0UwMDAwMjcxMzkzMy4xXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbk51bWJlclwiOiBcIjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVN0YXJ0XCI6IDc3MDcxMTUxLFxuICAgICAgICAgICAgICAgICAgICBcInN0cmFuZFwiOiBcIitcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImNocm9tXCI6IFwiMTdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbUVuZFwiOiA3NzA3MzU3OSxcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uSWRcIjogXCJFTlNFMDAwMDM2NzI2MjguMVwiLFxuICAgICAgICAgICAgICAgICAgICBcImV4b25OdW1iZXJcIjogXCIyXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21TdGFydFwiOiA3NzA3MzUxMixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJhbmRcIjogXCIrXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVwiOiBcIjE3XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21FbmRcIjogNzcwNzM5NDYsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbklkXCI6IFwiRU5TRTAwMDAzNDc1MjgxLjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uTnVtYmVyXCI6IFwiM1wiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tU3RhcnRcIjogNzcwNzM3NDUsXG4gICAgICAgICAgICAgICAgICAgIFwic3RyYW5kXCI6IFwiK1wiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21cIjogXCIxN1wiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tRW5kXCI6IDc3MDc1NzE5LFxuICAgICAgICAgICAgICAgICAgICBcImV4b25JZFwiOiBcIkVOU0UwMDAwMTExMTcxMy4xXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbk51bWJlclwiOiBcIjRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVN0YXJ0XCI6IDc3MDc1NTcxLFxuICAgICAgICAgICAgICAgICAgICBcInN0cmFuZFwiOiBcIitcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImNocm9tXCI6IFwiMTdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbUVuZFwiOiA3NzA3NjQ0NixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uSWRcIjogXCJFTlNFMDAwMDM2NTEyNTAuMVwiLFxuICAgICAgICAgICAgICAgICAgICBcImV4b25OdW1iZXJcIjogXCI1XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21TdGFydFwiOiA3NzA3NjI4OSxcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJhbmRcIjogXCIrXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVwiOiBcIjE3XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21FbmRcIjogNzcwNzcxNTUsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbklkXCI6IFwiRU5TRTAwMDAzNjA3NzczLjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uTnVtYmVyXCI6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tU3RhcnRcIjogNzcwNzcwMDcsXG4gICAgICAgICAgICAgICAgICAgIFwic3RyYW5kXCI6IFwiK1wiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21cIjogXCIxN1wiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tRW5kXCI6IDc3MDc4NjEyLFxuICAgICAgICAgICAgICAgICAgICBcImV4b25JZFwiOiBcIkVOU0UwMDAwMjcyMDkyNC4xXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbk51bWJlclwiOiBcIjdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVN0YXJ0XCI6IDc3MDc3OTgwLFxuICAgICAgICAgICAgICAgICAgICBcInN0cmFuZFwiOiBcIitcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJ0cmFuc2NyaXB0c1wiOiBbXG4gICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICAgICBcImNocm9tb3NvbWVcIjogXCIxN1wiLFxuICAgICAgICAgICAgICAgIFwiZW5kXCI6IDc3MDc4NjMxLFxuICAgICAgICAgICAgICAgIFwiZ2VuY29kZUlkXCI6IFwiRU5TRzAwMDAwMTY3MjgwLjEyXCIsXG4gICAgICAgICAgICAgICAgXCJnZW5lU3ltYm9sXCI6IFwiRU5HQVNFXCIsXG4gICAgICAgICAgICAgICAgXCJzdGFydFwiOiA3NzA3MTAyMSxcbiAgICAgICAgICAgICAgICBcInN0cmFuZFwiOiBcIitcIixcbiAgICAgICAgICAgICAgICBcInRyYW5zY3JpcHRJZFwiOiBcIkVOU1QwMDAwMDU3ODQxOS4xXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJjaHJvbW9zb21lXCI6IFwiMTdcIixcbiAgICAgICAgICAgICAgICBcImVuZFwiOiA3NzA3ODYzMSxcbiAgICAgICAgICAgICAgICBcImdlbmNvZGVJZFwiOiBcIkVOU0cwMDAwMDE2NzI4MC4xMlwiLFxuICAgICAgICAgICAgICAgIFwiZ2VuZVN5bWJvbFwiOiBcIkVOR0FTRVwiLFxuICAgICAgICAgICAgICAgIFwic3RhcnRcIjogNzcwNzEwMjEsXG4gICAgICAgICAgICAgICAgXCJzdHJhbmRcIjogXCIrXCIsXG4gICAgICAgICAgICAgICAgXCJ0cmFuc2NyaXB0SWRcIjogXCJFTlNUMDAwMDA1Mzk4NTcuMlwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwiY2hyb21vc29tZVwiOiBcIjE3XCIsXG4gICAgICAgICAgICAgICAgXCJlbmRcIjogNzcwNzg2MTIsXG4gICAgICAgICAgICAgICAgXCJnZW5jb2RlSWRcIjogXCJFTlNHMDAwMDAxNjcyODAuMTJcIixcbiAgICAgICAgICAgICAgICBcImdlbmVTeW1ib2xcIjogXCJFTkdBU0VcIixcbiAgICAgICAgICAgICAgICBcInN0YXJ0XCI6IDc3MDcxMTUxLFxuICAgICAgICAgICAgICAgIFwic3RyYW5kXCI6IFwiK1wiLFxuICAgICAgICAgICAgICAgIFwidHJhbnNjcmlwdElkXCI6IFwiRU5TVDAwMDAwMzExNTk1LjlcIlxuICAgICAgICAgICAgfVxuICAgICAgICBdXG4gICAgfVxufTtcblxuY29uc3QgdHJhbnNjcmlwdFRyYWNrc0NvbmZpZyA9IHtcbiAgICBpZDogJ2d0ZXhUcmFuc2NyaXB0VHJhY2tzJyxcbiAgICBkYXRhOiBkZW1vRGF0YS50cmFuc2NyaXB0VHJhY2tzLFxuICAgIHdpZHRoOiAxMjAwLFxuICAgIGhlaWdodDogODAsXG4gICAgbWFyZ2luTGVmdDogMTAwLFxuICAgIG1hcmdpblJpZ2h0OiAyMCxcbiAgICBtYXJnaW5Ub3A6IDAsXG4gICAgbWFyZ2luQm90dG9tOiAyMCxcbiAgICBsYWJlbFBvczogJ2xlZnQnXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNjcmlwdFRyYWNrcyhwYXI9dHJhbnNjcmlwdFRyYWNrc0NvbmZpZyl7XG4gICAgbGV0IG1hcmdpbiA9IHtcbiAgICAgICAgdG9wOiBwYXIubWFyZ2luVG9wLFxuICAgICAgICByaWdodDogcGFyLm1hcmdpblJpZ2h0LFxuICAgICAgICBib3R0b206IHBhci5tYXJnaW5Cb3R0b20sXG4gICAgICAgIGxlZnQ6IHBhci5tYXJnaW5MZWZ0XG4gICAgfTtcbiAgICBsZXQgaW5XaWR0aCA9IHBhci53aWR0aCAtIChwYXIubWFyZ2luTGVmdCArIHBhci5tYXJnaW5SaWdodCk7XG4gICAgbGV0IGluSGVpZ2h0ID0gcGFyLmhlaWdodCAtIChwYXIubWFyZ2luVG9wICsgcGFyLm1hcmdpbkJvdHRvbSk7XG5cbiAgICAvLyB0ZXN0IGlucHV0IHBhcmFtc1xuICAgIGlmICgkKGAjJHtwYXIuaWR9YCkubGVuZ3RoID09IDApIHtcbiAgICAgICAgbGV0IGVycm9yID0gYElucHV0IEVycm9yOiBET00gSUQgJHtwYXIuaWR9IGlzIG5vdCBmb3VuZC5gO1xuICAgICAgICBhbGVydChlcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIC8vIGNyZWF0ZSB0aGUgU1ZHXG4gICAgICAgIGxldCBzdmcgPSBjcmVhdGVTdmcocGFyLmlkLCBwYXIud2lkdGgsIHBhci5oZWlnaHQsIG1hcmdpbik7XG5cbiAgICAvLyByZW5kZXIgdGhlIHRyYW5zY3JpcHRzXG4gICAgbGV0IHRvb2x0aXBJZCA9IGAke3Bhci5pZH1Ub29sdGlwYDtcbiAgICBsZXQgY29uZmlnID0ge1xuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAwLFxuICAgICAgICB3OiBpbldpZHRoLFxuICAgICAgICBoOiBpbkhlaWdodCxcbiAgICAgICAgbGFiZWxPbjogcGFyLmxhYmVsUG9zXG4gICAgfTtcbiAgICBsZXQgdmlld2VyID0gbmV3IElzb2Zvcm1UcmFja1ZpZXdlcihwYXIuZGF0YS50cmFuc2NyaXB0cywgcGFyLmRhdGEuZXhvbnMsIHBhci5kYXRhLmV4b25zW1wiRU5TVDAwMDAwNTc4NDE5LjFcIl0sIGNvbmZpZyk7XG4gICAgdmlld2VyLnJlbmRlcihmYWxzZSwgc3ZnLCBwYXIubGFiZWxQb3MpO1xuXG59XG5cbmNvbnN0IGhlYXRtYXBEZW1vQ29uZmlnID0ge1xuICAgIGlkOiAnZ3RleFZpekhlYXRtYXAnLFxuICAgIGRhdGE6IGRlbW9EYXRhLmhlYXRtYXAsXG4gICAgd2lkdGg6IDEyMDAsIC8vIG91dGVyIHdpZHRoXG4gICAgaGVpZ2h0OiAzMDAsIC8vIG91dGVyIGhlaWdodFxuICAgIG1hcmdpbkxlZnQ6IDIwLFxuICAgIG1hcmdpblJpZ2h0OiA0MCxcbiAgICBtYXJnaW5Ub3A6IDUwLFxuICAgIG1hcmdpbkJvdHRvbTogNTAsXG4gICAgY29sb3JTY2hlbWU6IFwiWWxHbkJ1XCIsXG4gICAgY29ybmVyUmFkaXVzOiAyLFxuICAgIGNvbHVtbkxhYmVsSGVpZ2h0OiAyMCxcbiAgICBjb2x1bW5MYWJlbEFuZ2xlOiA2MCxcbiAgICBjb2x1bW5MYWJlbFBvc0FkanVzdDogMTAsXG4gICAgcm93TGFiZWxXaWR0aDogMTAwLFxuICAgIGxlZ2VuZFNwYWNlOiA1MCxcbiAgICB1c2VMb2c6IHRydWUsXG4gICAgbG9nQmFzZTogMTBcbn07XG5cbi8qKlxuICogUmVuZGVyIGEgMkQgSGVhdG1hcFxuICogQHBhcmFtIHBhcmFtc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaGVhdG1hcChwYXI9aGVhdG1hcERlbW9Db25maWcpe1xuICAgIGxldCBtYXJnaW4gPSB7XG4gICAgICAgIHRvcDogcGFyLm1hcmdpblRvcCxcbiAgICAgICAgcmlnaHQ6IHBhci5tYXJnaW5SaWdodCxcbiAgICAgICAgYm90dG9tOiBwYXIubWFyZ2luQm90dG9tLFxuICAgICAgICBsZWZ0OiBwYXIubWFyZ2luTGVmdFxuICAgIH07XG4gICAgbGV0IGluV2lkdGggPSBwYXIud2lkdGggLSAocGFyLm1hcmdpbkxlZnQgKyBwYXIubWFyZ2luUmlnaHQgKyBwYXIucm93TGFiZWxXaWR0aCk7XG4gICAgbGV0IGluSGVpZ2h0ID0gcGFyLmhlaWdodCAtIChwYXIubWFyZ2luVG9wICsgcGFyLm1hcmdpbkJvdHRvbSArIHBhci5jb2x1bW5MYWJlbEhlaWdodCk7XG5cbiAgICAvLyB0ZXN0IGlucHV0IHBhcmFtc1xuICAgIGlmICgkKGAjJHtwYXIuaWR9YCkubGVuZ3RoID09IDApIHtcbiAgICAgICAgbGV0IGVycm9yID0gYElucHV0IEVycm9yOiBET00gSUQgJHtwYXIuaWR9IGlzIG5vdCBmb3VuZC5gO1xuICAgICAgICBhbGVydChlcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIC8vIGNyZWF0ZSB0aGUgU1ZHXG4gICAgbGV0IHN2ZyA9IGNyZWF0ZVN2ZyhwYXIuaWQsIHBhci53aWR0aCwgcGFyLmhlaWdodCwgbWFyZ2luKTtcblxuICAgIC8vIHJlbmRlciB0aGUgaGVhdG1hcFxuICAgIGxldCB0b29sdGlwSWQgPSBgJHtwYXIuaWR9VG9vbHRpcGA7XG4gICAgbGV0IGggPSBuZXcgSGVhdG1hcChwYXIuZGF0YSwgcGFyLnVzZUxvZywgcGFyLmxvZ0Jhc2UsIHBhci5jb2xvclNjaGVtZSwgcGFyLmNvcm5lclJhZGl1cywgdG9vbHRpcElkKTtcbiAgICBoLmRyYXcoc3ZnLCB7dzppbldpZHRoLCBoOmluSGVpZ2h0fSwgcGFyLmNvbHVtbkxhYmVsQW5nbGUsIGZhbHNlLCBwYXIuY29sdW1uTGFiZWxQb3NBZGp1c3QpO1xuICAgIGguZHJhd0NvbG9yTGVnZW5kKHN2Zywge3g6MjAsIHk6IC0yMH0sIDEwKTtcbn1cblxuY29uc3QgZGVuZHJvSGVhdG1hcERlbW9Db25maWcgPSB7XG4gICAgaWQ6ICdndGV4Vml6RGVuZHJvSGVhdG1hcCcsXG4gICAgZGF0YTogZGVtb0RhdGEuZGVuZHJvSGVhdG1hcCxcbiAgICB1c2VMb2c6IHRydWUsXG4gICAgbG9nQmFzZTogMTAsXG4gICAgd2lkdGg6IDYwMCwgLy8gb3V0ZXIgd2lkdGhcbiAgICBoZWlnaHQ6IDMwMCwgLy8gb3V0ZXIgaGVpZ2h0XG4gICAgbWFyZ2luTGVmdDogMjAsXG4gICAgbWFyZ2luUmlnaHQ6IDQwLFxuICAgIG1hcmdpblRvcDogNTAsXG4gICAgbWFyZ2luQm90dG9tOiA1MCxcbiAgICByb3dUcmVlUGFuZWxXaWR0aDogMTAwLFxuICAgIGNvbFRyZWVQYW5lbEhlaWdodDogMTAwLFxuICAgIGNvbG9yU2NoZW1lOiBcIkJsdWVzXCIsXG4gICAgY29ybmVyUmFkaXVzOiAyLFxuICAgIGNvbHVtbkxhYmVsSGVpZ2h0OiAyMDAsXG4gICAgY29sdW1uTGFiZWxBbmdsZTogNjAsXG4gICAgY29sdW1uTGFiZWxQb3NBZGp1c3Q6IDEwLFxuICAgIHJvd0xhYmVsV2lkdGg6IDIwMCxcbiAgICBsZWdlbmRTcGFjZTogNTBcbn07XG5cbi8qKlxuICogUmVuZGVyIGEgRGVuZHJvSGVhdG1hcFxuICogQHBhcmFtIHBhclxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVuZHJvSGVhdG1hcChwYXI9ZGVuZHJvSGVhdG1hcERlbW9Db25maWcpe1xuICAgIGxldCBtYXJnaW4gPSB7XG4gICAgICAgIHRvcDogcGFyLm1hcmdpblRvcCxcbiAgICAgICAgcmlnaHQ6IHBhci5tYXJnaW5SaWdodCArIHBhci5yb3dMYWJlbFdpZHRoLFxuICAgICAgICBib3R0b206IHBhci5tYXJnaW5Cb3R0b20gKyBwYXIuY29sdW1uTGFiZWxIZWlnaHQsXG4gICAgICAgIGxlZnQ6IHBhci5tYXJnaW5MZWZ0XG4gICAgfTtcblxuICAgIC8vIHRlc3QgaW5wdXQgcGFyYW1zXG4gICAgaWYgKCQoYCMke3Bhci5pZH1gKS5sZW5ndGggPT0gMCkge1xuICAgICAgICBsZXQgZXJyb3IgPSBgSW5wdXQgRXJyb3I6IERPTSBJRCAke3Bhci5pZH0gaXMgbm90IGZvdW5kLmA7XG4gICAgICAgIGFsZXJ0KGVycm9yKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgbGV0IGluV2lkdGggPSBwYXIud2lkdGggLSAocGFyLm1hcmdpbkxlZnQgKyBwYXIubWFyZ2luUmlnaHQgKyBwYXIucm93TGFiZWxXaWR0aCk7XG4gICAgbGV0IGluSGVpZ2h0ID0gcGFyLmhlaWdodCAtIChwYXIubWFyZ2luVG9wICsgcGFyLm1hcmdpbkJvdHRvbSArIHBhci5jb2x1bW5MYWJlbEhlaWdodCk7XG5cbiAgICBsZXQgc3ZnSWQgPSBgJHtwYXIuaWR9U3ZnYDtcbiAgICBsZXQgdG9vbHRpcElkID0gYCR7cGFyLmlkfVRvb2x0aXBgO1xuICAgIGxldCBkbWFwQ29uZmlnID0gbmV3IERlbmRyb0hlYXRtYXBDb25maWcocGFyLndpZHRoLCBwYXIucm93VHJlZVBhbmVsV2lkdGgsIHBhci5jb2xUcmVlUGFuZWxIZWlnaHQsIG1hcmdpbik7XG4gICAgbGV0IGRtYXAgPSBuZXcgRGVuZHJvSGVhdG1hcChwYXIuZGF0YS5jb2xUcmVlLCBwYXIuZGF0YS5yb3dUcmVlLCBwYXIuZGF0YS5oZWF0bWFwLCBwYXIuY29sb3JTY2hlbWUsIHBhci5jb3JuZXJSYWRpdXMsIGRtYXBDb25maWcsIHRvb2x0aXBJZCwgcGFyLnVzZUxvZywgcGFyLmxvZ0Jhc2UpXG4gICAgbGV0IHNob3dDb2xUcmVlID0gcGFyLmRhdGEuY29sVHJlZSAhPT0gdW5kZWZpbmVkO1xuICAgIGxldCBzaG93Um93VHJlZSA9IHBhci5kYXRhLnJvd1RyZWUgIT09IHVuZGVmaW5lZDtcbiAgICBkbWFwLnJlbmRlcihwYXIuaWQsIHN2Z0lkLCBzaG93Q29sVHJlZSwgc2hvd1Jvd1RyZWUsIFwidG9wXCIsIDgpO1xufVxuXG5jb25zdCB2aW9saW5EZW1vQ29uZmlnID0ge1xuICAgIGlkOiAnZ3RleEdyb3VwZWRWaW9saW5QbG90JyxcbiAgICBkYXRhOiBkZW1vRGF0YS5ncm91cGVkVmlvbGluUGxvdCxcbiAgICB3aWR0aDogNTAwLFxuICAgIGhlaWdodDogMzAwLFxuICAgIG1hcmdpbkxlZnQ6IDEwMCxcbiAgICBtYXJnaW5SaWdodDogMjAsXG4gICAgbWFyZ2luVG9wOiA1MCxcbiAgICBtYXJnaW5Cb3R0b206IDEwMCxcbiAgICBzaG93RGl2aWRlcjogdHJ1ZSxcbiAgICB4UGFkZGluZzogMC4zLFxuICAgIHlMYWJlbDogXCJSYW5kb20gVmFsdWVcIixcbiAgICBzaG93R3JvdXBYOiB0cnVlLFxuICAgIHNob3dYOiB0cnVlLFxuICAgIHhBbmdsZTogMCxcbiAgICBzaG93V2hpc2tlcjogZmFsc2UsXG4gICAgc2hvd0xlZ2VuZDogZmFsc2UsXG4gICAgc2hvd1NhbXBsZVNpemU6IHRydWVcbn07XG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBlZFZpb2xpblBsb3QocGFyPXZpb2xpbkRlbW9Db25maWcpe1xuICAgIGNvbnNvbGUubG9nKHBhci5kYXRhKTtcbiAgICBsZXQgbWFyZ2luID0ge1xuICAgICAgICB0b3A6IHBhci5tYXJnaW5Ub3AsXG4gICAgICAgIHJpZ2h0OiBwYXIubWFyZ2luUmlnaHQsXG4gICAgICAgIGJvdHRvbTogcGFyLm1hcmdpbkJvdHRvbSxcbiAgICAgICAgbGVmdDogcGFyLm1hcmdpbkxlZnRcbiAgICB9O1xuICAgIC8vIHRlc3QgaW5wdXQgcGFyYW1zXG4gICAgaWYgKCQoYCMke3Bhci5pZH1gKS5sZW5ndGggPT0gMCkge1xuICAgICAgICBsZXQgZXJyb3IgPSBgSW5wdXQgRXJyb3I6IERPTSBJRCAke3Bhci5pZH0gaXMgbm90IGZvdW5kLmA7XG4gICAgICAgIGFsZXJ0KGVycm9yKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgbGV0IGluV2lkdGggPSBwYXIud2lkdGggLSAocGFyLm1hcmdpbkxlZnQgKyBwYXIubWFyZ2luUmlnaHQpO1xuICAgIGxldCBpbkhlaWdodCA9IHBhci5oZWlnaHQgLSAocGFyLm1hcmdpblRvcCArIHBhci5tYXJnaW5Cb3R0b20pO1xuXG4gICAgbGV0IHN2Z0lkID0gYCR7cGFyLmlkfVN2Z2A7XG4gICAgbGV0IHRvb2x0aXBJZCA9IGAke3Bhci5pZH1Ub29sdGlwYDtcblxuICAgIC8vIGNyZWF0ZSB0aGUgU1ZHXG4gICAgbGV0IHN2ZyA9IGNyZWF0ZVN2ZyhwYXIuaWQsIHBhci53aWR0aCwgcGFyLmhlaWdodCwgbWFyZ2luKTtcblxuICAgIGNvbnN0IGdWaW9saW4gPSBuZXcgR3JvdXBlZFZpb2xpbihwYXIuZGF0YSk7XG4gICAgZ1Zpb2xpbi5yZW5kZXIoc3ZnLCBpbldpZHRoLCBpbkhlaWdodCwgcGFyLnhQYWRkaW5nLCB1bmRlZmluZWQsIFtdLCBwYXIueUxhYmVsLCBwYXIuc2hvd0dyb3VwWCwgcGFyLlNob3dYLCBwYXIueEFuZ2xlLCBwYXIuc2hvd1doaXNrZXIsIHBhci5zaG93RGl2aWRlciwgcGFyLnNob3dMZWdlbmQpO1xuICAgIGNvbnN0IHRvb2x0aXAgPSBnVmlvbGluLmNyZWF0ZVRvb2x0aXAodG9vbHRpcElkKTtcblxuXG59XG5cbiJdLCJuYW1lcyI6WyJ4aHRtbCIsInN2ZyIsInhsaW5rIiwieG1sIiwieG1sbnMiLCJuYW1lIiwicHJlZml4IiwiaSIsImluZGV4T2YiLCJzbGljZSIsIm5hbWVzcGFjZXMiLCJoYXNPd25Qcm9wZXJ0eSIsInNwYWNlIiwibG9jYWwiLCJmdWxsbmFtZSIsIm5hbWVzcGFjZSIsInRoaXMiLCJvd25lckRvY3VtZW50IiwiY3JlYXRlRWxlbWVudE5TIiwiZG9jdW1lbnQiLCJ1cmkiLCJuYW1lc3BhY2VVUkkiLCJkb2N1bWVudEVsZW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwibm9uZSIsInNlbGVjdG9yIiwicXVlcnlTZWxlY3RvciIsImVtcHR5IiwicXVlcnlTZWxlY3RvckFsbCIsIm1hdGNoZXIiLCJtYXRjaGVzIiwiZWxlbWVudCIsInZlbmRvck1hdGNoZXMiLCJ3ZWJraXRNYXRjaGVzU2VsZWN0b3IiLCJtc01hdGNoZXNTZWxlY3RvciIsIm1vek1hdGNoZXNTZWxlY3RvciIsIm9NYXRjaGVzU2VsZWN0b3IiLCJjYWxsIiwidXBkYXRlIiwiQXJyYXkiLCJsZW5ndGgiLCJFbnRlck5vZGUiLCJwYXJlbnQiLCJkYXR1bSIsIl9uZXh0IiwiX3BhcmVudCIsIl9fZGF0YV9fIiwicHJvdG90eXBlIiwiY29uc3RydWN0b3IiLCJhcHBlbmRDaGlsZCIsImNoaWxkIiwiaW5zZXJ0QmVmb3JlIiwibmV4dCIsImtleVByZWZpeCIsImJpbmRJbmRleCIsImdyb3VwIiwiZW50ZXIiLCJleGl0IiwiZGF0YSIsIm5vZGUiLCJncm91cExlbmd0aCIsImRhdGFMZW5ndGgiLCJiaW5kS2V5Iiwia2V5Iiwia2V5VmFsdWUiLCJub2RlQnlLZXlWYWx1ZSIsImtleVZhbHVlcyIsImFzY2VuZGluZyIsImEiLCJiIiwiTmFOIiwiZGVmYXVsdFZpZXciLCJzdHlsZVZhbHVlIiwic3R5bGUiLCJnZXRQcm9wZXJ0eVZhbHVlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImNsYXNzQXJyYXkiLCJzdHJpbmciLCJ0cmltIiwic3BsaXQiLCJjbGFzc0xpc3QiLCJDbGFzc0xpc3QiLCJfbm9kZSIsIl9uYW1lcyIsImdldEF0dHJpYnV0ZSIsImNsYXNzZWRBZGQiLCJuYW1lcyIsImxpc3QiLCJuIiwiYWRkIiwiY2xhc3NlZFJlbW92ZSIsInJlbW92ZSIsInB1c2giLCJzZXRBdHRyaWJ1dGUiLCJqb2luIiwic3BsaWNlIiwiY29udGFpbnMiLCJ0ZXh0UmVtb3ZlIiwidGV4dENvbnRlbnQiLCJodG1sUmVtb3ZlIiwiaW5uZXJIVE1MIiwicmFpc2UiLCJuZXh0U2libGluZyIsInBhcmVudE5vZGUiLCJsb3dlciIsInByZXZpb3VzU2libGluZyIsImZpcnN0Q2hpbGQiLCJjb25zdGFudE51bGwiLCJyZW1vdmVDaGlsZCIsInNlbGVjdGlvbl9jbG9uZVNoYWxsb3ciLCJjbG9uZU5vZGUiLCJzZWxlY3Rpb25fY2xvbmVEZWVwIiwiZmlsdGVyRXZlbnRzIiwiZXZlbnQiLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsImZpbHRlckNvbnRleHRMaXN0ZW5lciIsImxpc3RlbmVyIiwiaW5kZXgiLCJjb250ZXh0TGlzdGVuZXIiLCJyZWxhdGVkIiwicmVsYXRlZFRhcmdldCIsImNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIiwiZXZlbnQxIiwiZXZlbnQwIiwib25SZW1vdmUiLCJ0eXBlbmFtZSIsIm9uIiwiX19vbiIsIm8iLCJqIiwibSIsInR5cGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY2FwdHVyZSIsIm9uQWRkIiwidmFsdWUiLCJ3cmFwIiwiZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJkaXNwYXRjaEV2ZW50IiwicGFyYW1zIiwid2luZG93IiwiQ3VzdG9tRXZlbnQiLCJjcmVhdGVFdmVudCIsImluaXRFdmVudCIsImJ1YmJsZXMiLCJjYW5jZWxhYmxlIiwiZGV0YWlsIiwicm9vdCIsIlNlbGVjdGlvbiIsImdyb3VwcyIsInBhcmVudHMiLCJfZ3JvdXBzIiwiX3BhcmVudHMiLCJzZWxlY3Rpb24iLCJzZWxlY3QiLCJzdWJncm91cHMiLCJzdWJub2RlIiwic3ViZ3JvdXAiLCJzZWxlY3RBbGwiLCJzZWxlY3RvckFsbCIsImZpbHRlciIsIm1hdGNoIiwic2l6ZSIsImVhY2giLCJ4IiwiYmluZCIsImVudGVyR3JvdXAiLCJ1cGRhdGVHcm91cCIsInByZXZpb3VzIiwiaTAiLCJpMSIsIl9lbnRlciIsIl9leGl0IiwibWFwIiwic3BhcnNlIiwibWVyZ2UiLCJncm91cHMwIiwiZ3JvdXBzMSIsIm0wIiwibTEiLCJNYXRoIiwibWluIiwibWVyZ2VzIiwiZ3JvdXAwIiwiZ3JvdXAxIiwib3JkZXIiLCJzb3J0IiwiY29tcGFyZSIsImNvbXBhcmVOb2RlIiwic29ydGdyb3VwcyIsInNvcnRncm91cCIsImNhbGxiYWNrIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJub2RlcyIsImF0dHIiLCJnZXRBdHRyaWJ1dGVOUyIsInJlbW92ZUF0dHJpYnV0ZU5TIiwicmVtb3ZlQXR0cmlidXRlIiwidiIsInNldEF0dHJpYnV0ZU5TIiwicHJpb3JpdHkiLCJyZW1vdmVQcm9wZXJ0eSIsInNldFByb3BlcnR5IiwicHJvcGVydHkiLCJjbGFzc2VkIiwidGV4dCIsImh0bWwiLCJhcHBlbmQiLCJjcmVhdGUiLCJjcmVhdG9yIiwiaW5zZXJ0IiwiYmVmb3JlIiwiY2xvbmUiLCJkZWVwIiwidCIsInR5cGVuYW1lcyIsInBhcnNlVHlwZW5hbWVzIiwiZGlzcGF0Y2giLCJzb3VyY2UiLCJjdXJyZW50Iiwic291cmNlRXZlbnQiLCJjaGFuZ2VkVG91Y2hlcyIsIm93bmVyU1ZHRWxlbWVudCIsImNyZWF0ZVNWR1BvaW50IiwicG9pbnQiLCJjbGllbnRYIiwieSIsImNsaWVudFkiLCJtYXRyaXhUcmFuc2Zvcm0iLCJnZXRTY3JlZW5DVE0iLCJpbnZlcnNlIiwicmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImxlZnQiLCJjbGllbnRMZWZ0IiwidG9wIiwiY2xpZW50VG9wIiwiZiIsImJpc2VjdFJpZ2h0IiwibG8iLCJoaSIsIm1pZCIsInJpZ2h0IiwiYXJyYXkiLCJ2YWx1ZXMiLCJ2YWx1ZW9mIiwiZGVsdGEiLCJtZWFuIiwic3VtIiwiaXNOYU4iLCJudW1iZXIiLCJ2YXJpYW5jZSIsInNxcnQiLCJtYXgiLCJzdGFydCIsInN0b3AiLCJzdGVwIiwiY2VpbCIsInJhbmdlIiwiZTEwIiwiZTUiLCJlMiIsImNvdW50IiwicmV2ZXJzZSIsInRpY2tzIiwidGlja0luY3JlbWVudCIsImlzRmluaXRlIiwiZmxvb3IiLCJwb3dlciIsImxvZyIsIkxOMTAiLCJlcnJvciIsInBvdyIsInAiLCJ2YWx1ZTAiLCJudW1iZXJzIiwicXVhbnRpbGUiLCJjcmVhdGVTdmciLCJpZCIsIndpZHRoIiwiaGVpZ2h0IiwibWFyZ2luIiwic3ZnSWQiLCJ1bmRlZmluZWQiLCJzb3VyY2VSYW5kb21Ob3JtYWwiLCJyYW5kb21Ob3JtYWwiLCJtdSIsInNpZ21hIiwiciIsInJhbmRvbSIsIk1hcCIsIm9iamVjdCIsInNldCIsImlzQXJyYXkiLCJoYXMiLCJnZXQiLCJjbGVhciIsImtleXMiLCJlbnRyaWVzIiwic29ydFZhbHVlcyIsInJvbGx1cCIsIm5lc3QiLCJzb3J0S2V5cyIsImRlcHRoIiwiY3JlYXRlUmVzdWx0Iiwic2V0UmVzdWx0IiwidmFsdWVzQnlLZXkiLCJyZXN1bHQiLCJjcmVhdGVPYmplY3QiLCJzZXRPYmplY3QiLCJjcmVhdGVNYXAiLCJzZXRNYXAiLCJzb3J0S2V5IiwiayIsImltcGxpY2l0IiwiYmFuZCIsImJhbmR3aWR0aCIsInNjYWxlIiwib3JkaW5hbCIsImRvbWFpbiIsInVua25vd24iLCJfIiwiY29weSIsIm9yZGluYWxSYW5nZSIsInJvdW5kIiwicGFkZGluZ0lubmVyIiwicGFkZGluZ091dGVyIiwiYWxpZ24iLCJyZXNjYWxlIiwic2VxdWVuY2UiLCJyYW5nZVJvdW5kIiwicGFkZGluZyIsImZhY3RvcnkiLCJleHRlbmQiLCJkZWZpbml0aW9uIiwiT2JqZWN0IiwiQ29sb3IiLCJyZUkiLCJyZU4iLCJyZVAiLCJyZUhleDMiLCJyZUhleDYiLCJyZVJnYkludGVnZXIiLCJSZWdFeHAiLCJyZVJnYlBlcmNlbnQiLCJyZVJnYmFJbnRlZ2VyIiwicmVSZ2JhUGVyY2VudCIsInJlSHNsUGVyY2VudCIsInJlSHNsYVBlcmNlbnQiLCJuYW1lZCIsImFsaWNlYmx1ZSIsImFudGlxdWV3aGl0ZSIsImFxdWEiLCJhcXVhbWFyaW5lIiwiYXp1cmUiLCJiZWlnZSIsImJpc3F1ZSIsImJsYWNrIiwiYmxhbmNoZWRhbG1vbmQiLCJibHVlIiwiYmx1ZXZpb2xldCIsImJyb3duIiwiYnVybHl3b29kIiwiY2FkZXRibHVlIiwiY2hhcnRyZXVzZSIsImNob2NvbGF0ZSIsImNvcmFsIiwiY29ybmZsb3dlcmJsdWUiLCJjb3Juc2lsayIsImNyaW1zb24iLCJjeWFuIiwiZGFya2JsdWUiLCJkYXJrY3lhbiIsImRhcmtnb2xkZW5yb2QiLCJkYXJrZ3JheSIsImRhcmtncmVlbiIsImRhcmtncmV5IiwiZGFya2toYWtpIiwiZGFya21hZ2VudGEiLCJkYXJrb2xpdmVncmVlbiIsImRhcmtvcmFuZ2UiLCJkYXJrb3JjaGlkIiwiZGFya3JlZCIsImRhcmtzYWxtb24iLCJkYXJrc2VhZ3JlZW4iLCJkYXJrc2xhdGVibHVlIiwiZGFya3NsYXRlZ3JheSIsImRhcmtzbGF0ZWdyZXkiLCJkYXJrdHVycXVvaXNlIiwiZGFya3Zpb2xldCIsImRlZXBwaW5rIiwiZGVlcHNreWJsdWUiLCJkaW1ncmF5IiwiZGltZ3JleSIsImRvZGdlcmJsdWUiLCJmaXJlYnJpY2siLCJmbG9yYWx3aGl0ZSIsImZvcmVzdGdyZWVuIiwiZnVjaHNpYSIsImdhaW5zYm9ybyIsImdob3N0d2hpdGUiLCJnb2xkIiwiZ29sZGVucm9kIiwiZ3JheSIsImdyZWVuIiwiZ3JlZW55ZWxsb3ciLCJncmV5IiwiaG9uZXlkZXciLCJob3RwaW5rIiwiaW5kaWFucmVkIiwiaW5kaWdvIiwiaXZvcnkiLCJraGFraSIsImxhdmVuZGVyIiwibGF2ZW5kZXJibHVzaCIsImxhd25ncmVlbiIsImxlbW9uY2hpZmZvbiIsImxpZ2h0Ymx1ZSIsImxpZ2h0Y29yYWwiLCJsaWdodGN5YW4iLCJsaWdodGdvbGRlbnJvZHllbGxvdyIsImxpZ2h0Z3JheSIsImxpZ2h0Z3JlZW4iLCJsaWdodGdyZXkiLCJsaWdodHBpbmsiLCJsaWdodHNhbG1vbiIsImxpZ2h0c2VhZ3JlZW4iLCJsaWdodHNreWJsdWUiLCJsaWdodHNsYXRlZ3JheSIsImxpZ2h0c2xhdGVncmV5IiwibGlnaHRzdGVlbGJsdWUiLCJsaWdodHllbGxvdyIsImxpbWUiLCJsaW1lZ3JlZW4iLCJsaW5lbiIsIm1hZ2VudGEiLCJtYXJvb24iLCJtZWRpdW1hcXVhbWFyaW5lIiwibWVkaXVtYmx1ZSIsIm1lZGl1bW9yY2hpZCIsIm1lZGl1bXB1cnBsZSIsIm1lZGl1bXNlYWdyZWVuIiwibWVkaXVtc2xhdGVibHVlIiwibWVkaXVtc3ByaW5nZ3JlZW4iLCJtZWRpdW10dXJxdW9pc2UiLCJtZWRpdW12aW9sZXRyZWQiLCJtaWRuaWdodGJsdWUiLCJtaW50Y3JlYW0iLCJtaXN0eXJvc2UiLCJtb2NjYXNpbiIsIm5hdmFqb3doaXRlIiwibmF2eSIsIm9sZGxhY2UiLCJvbGl2ZSIsIm9saXZlZHJhYiIsIm9yYW5nZSIsIm9yYW5nZXJlZCIsIm9yY2hpZCIsInBhbGVnb2xkZW5yb2QiLCJwYWxlZ3JlZW4iLCJwYWxldHVycXVvaXNlIiwicGFsZXZpb2xldHJlZCIsInBhcGF5YXdoaXAiLCJwZWFjaHB1ZmYiLCJwZXJ1IiwicGluayIsInBsdW0iLCJwb3dkZXJibHVlIiwicHVycGxlIiwicmViZWNjYXB1cnBsZSIsInJlZCIsInJvc3licm93biIsInJveWFsYmx1ZSIsInNhZGRsZWJyb3duIiwic2FsbW9uIiwic2FuZHlicm93biIsInNlYWdyZWVuIiwic2Vhc2hlbGwiLCJzaWVubmEiLCJzaWx2ZXIiLCJza3libHVlIiwic2xhdGVibHVlIiwic2xhdGVncmF5Iiwic2xhdGVncmV5Iiwic25vdyIsInNwcmluZ2dyZWVuIiwic3RlZWxibHVlIiwidGFuIiwidGVhbCIsInRoaXN0bGUiLCJ0b21hdG8iLCJ0dXJxdW9pc2UiLCJ2aW9sZXQiLCJ3aGVhdCIsIndoaXRlIiwid2hpdGVzbW9rZSIsInllbGxvdyIsInllbGxvd2dyZWVuIiwiY29sb3IiLCJmb3JtYXQiLCJ0b0xvd2VyQ2FzZSIsImV4ZWMiLCJSZ2IiLCJwYXJzZUludCIsInJnYm4iLCJyZ2JhIiwiaHNsYSIsImciLCJyZ2JDb252ZXJ0IiwicmdiIiwib3BhY2l0eSIsImhleCIsInRvU3RyaW5nIiwiaCIsInMiLCJsIiwiSHNsIiwiaHNsMnJnYiIsIm0yIiwiZGVmaW5lIiwiZGlzcGxheWFibGUiLCJicmlnaHRlciIsImRhcmtlciIsImhzbENvbnZlcnQiLCJkZWcycmFkIiwiUEkiLCJyYWQyZGVnIiwiWG4iLCJZbiIsIlpuIiwidDAiLCJ0MSIsInQyIiwidDMiLCJsYWJDb252ZXJ0IiwiTGFiIiwiSGNsIiwiY29zIiwiYyIsInNpbiIsInoiLCJyZ2IybHJnYiIsInh5ejJsYWIiLCJsYWIyeHl6IiwibHJnYjJyZ2IiLCJhdGFuMiIsImhjbENvbnZlcnQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkVEIiwiRUIiLCJCQ19EQSIsImN1YmVoZWxpeCIsIkN1YmVoZWxpeCIsImJsIiwiY3ViZWhlbGl4Q29udmVydCIsImJhc2lzIiwidjAiLCJ2MSIsInYyIiwidjMiLCJjb3NoIiwic2luaCIsImxpbmVhciIsImdhbW1hIiwibm9nYW1tYSIsImV4cG9uZW50aWFsIiwiY29uc3RhbnQiLCJyZ2JHYW1tYSIsImVuZCIsImNvbG9yUmdiIiwicmdiU3BsaW5lIiwic3BsaW5lIiwiY29sb3JzIiwicmdiQmFzaXMiLCJyZUEiLCJyZUIiLCJjc3NOb2RlIiwiY3NzUm9vdCIsImNzc1ZpZXciLCJzdmdOb2RlIiwiYW0iLCJibSIsImJzIiwiYmkiLCJsYXN0SW5kZXgiLCJxIiwib25lIiwiemVybyIsIkRhdGUiLCJzZXRUaW1lIiwibmIiLCJuYSIsInZhbHVlT2YiLCJkZWdyZWVzIiwiaWRlbnRpdHkiLCJ0cmFuc2xhdGVYIiwidHJhbnNsYXRlWSIsInJvdGF0ZSIsInNrZXdYIiwic2NhbGVYIiwic2NhbGVZIiwiZSIsImF0YW4iLCJpbnRlcnBvbGF0ZVRyYW5zZm9ybSIsInBhcnNlIiwicHhDb21tYSIsInB4UGFyZW4iLCJkZWdQYXJlbiIsInBvcCIsInhhIiwieWEiLCJ4YiIsInliIiwidHJhbnNsYXRlIiwiaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MiLCJ0cmFuc2Zvcm0iLCJkZWNvbXBvc2UiLCJpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZyIsImJhc2VWYWwiLCJjb25zb2xpZGF0ZSIsIm1hdHJpeCIsImh1ZSIsImN1YmVoZWxpeEdhbW1hIiwiY29sb3JDdWJlaGVsaXgiLCJjdWJlaGVsaXgkMSIsImN1YmVoZWxpeExvbmciLCJ1bml0IiwiZGVpbnRlcnBvbGF0ZUxpbmVhciIsImJpbWFwIiwiZGVpbnRlcnBvbGF0ZSIsInJlaW50ZXJwb2xhdGUiLCJkMCIsImQxIiwicjAiLCJyMSIsInBvbHltYXAiLCJiaXNlY3QiLCJ0b0V4cG9uZW50aWFsIiwiY29lZmZpY2llbnQiLCJmb3JtYXREZWNpbWFsIiwiYWJzIiwicmUiLCJmb3JtYXRTcGVjaWZpZXIiLCJzcGVjaWZpZXIiLCJGb3JtYXRTcGVjaWZpZXIiLCJFcnJvciIsImZpbGwiLCJzaWduIiwic3ltYm9sIiwiY29tbWEiLCJwcmVjaXNpb24iLCJwcmVmaXhFeHBvbmVudCIsImxvY2FsZSIsImZvcm1hdFByZWZpeCIsIm91dCIsImV4cG9uZW50IiwiJSIsInRvRml4ZWQiLCJ0b1ByZWNpc2lvbiIsImZvcm1hdFJvdW5kZWQiLCJYIiwidG9VcHBlckNhc2UiLCJwcmVmaXhlcyIsImdyb3VwaW5nIiwidGhvdXNhbmRzIiwic3Vic3RyaW5nIiwiY3VycmVuY3kiLCJkZWNpbWFsIiwibnVtZXJhbHMiLCJyZXBsYWNlIiwiZm9ybWF0TnVtZXJhbHMiLCJwZXJjZW50IiwibmV3Rm9ybWF0IiwiZm9ybWF0VHlwZXMiLCJ0ZXN0Iiwic3VmZml4IiwiZm9ybWF0VHlwZSIsIm1heWJlU3VmZml4IiwidmFsdWVQcmVmaXgiLCJ2YWx1ZVN1ZmZpeCIsInZhbHVlTmVnYXRpdmUiLCJmb3JtYXRUcmltIiwiY2hhckNvZGVBdCIsIkluZmluaXR5IiwiZm9ybWF0TG9jYWxlIiwic3RlcDAiLCJzdGVwMSIsInRpY2tTdGVwIiwicHJlY2lzaW9uUHJlZml4IiwicHJlY2lzaW9uUm91bmQiLCJwcmVjaXNpb25GaXhlZCIsImxpbmVhcmlzaCIsInRpY2tGb3JtYXQiLCJuaWNlIiwicGllY2V3aXNlIiwib3V0cHV0IiwiaW5wdXQiLCJpbnRlcnBvbGF0ZSIsImludGVycG9sYXRlVmFsdWUiLCJjbGFtcCIsImRlaW50ZXJwb2xhdGVDbGFtcCIsImludmVydCIsInJlaW50ZXJwb2xhdGVDbGFtcCIsImludGVycG9sYXRlUm91bmQiLCJjb250aW51b3VzIiwibmV3SW50ZXJ2YWwiLCJmbG9vcmkiLCJvZmZzZXRpIiwiZmllbGQiLCJpbnRlcnZhbCIsImRhdGUiLCJvZmZzZXQiLCJldmVyeSIsIm1pbGxpc2Vjb25kIiwiZHVyYXRpb25NaW51dGUiLCJkdXJhdGlvbldlZWsiLCJkYXkiLCJnZXRVVENTZWNvbmRzIiwiZ2V0TWludXRlcyIsImdldFRpbWV6b25lT2Zmc2V0IiwiZ2V0SG91cnMiLCJzZXRIb3VycyIsInNldERhdGUiLCJnZXREYXRlIiwid2Vla2RheSIsImdldERheSIsInN1bmRheSIsIm1vbmRheSIsInRodXJzZGF5IiwieWVhciIsInNldE1vbnRoIiwiZ2V0TW9udGgiLCJnZXRGdWxsWWVhciIsInNldEZ1bGxZZWFyIiwic2V0VVRDU2Vjb25kcyIsImdldFVUQ01pbnV0ZXMiLCJzZXRVVENNaW51dGVzIiwiZ2V0VVRDSG91cnMiLCJ1dGNEYXkiLCJzZXRVVENIb3VycyIsInNldFVUQ0RhdGUiLCJnZXRVVENEYXRlIiwidXRjV2Vla2RheSIsImdldFVUQ0RheSIsInV0Y1N1bmRheSIsInV0Y01vbmRheSIsInV0Y1RodXJzZGF5IiwidXRjWWVhciIsInNldFVUQ01vbnRoIiwiZ2V0VVRDTW9udGgiLCJnZXRVVENGdWxsWWVhciIsInNldFVUQ0Z1bGxZZWFyIiwibG9jYWxEYXRlIiwiSCIsIk0iLCJTIiwiTCIsInV0Y0RhdGUiLCJVVEMiLCJuZXdZZWFyIiwidXRjRm9ybWF0IiwidXRjUGFyc2UiLCJwYWRzIiwiLSIsIjAiLCJudW1iZXJSZSIsInBlcmNlbnRSZSIsInJlcXVvdGVSZSIsInBhZCIsInJlcXVvdGUiLCJmb3JtYXRSZSIsImZvcm1hdExvb2t1cCIsInBhcnNlV2Vla2RheU51bWJlclN1bmRheSIsInciLCJwYXJzZVdlZWtkYXlOdW1iZXJNb25kYXkiLCJ1IiwicGFyc2VXZWVrTnVtYmVyU3VuZGF5IiwiVSIsInBhcnNlV2Vla051bWJlcklTTyIsIlYiLCJwYXJzZVdlZWtOdW1iZXJNb25kYXkiLCJXIiwicGFyc2VGdWxsWWVhciIsInBhcnNlWWVhciIsInBhcnNlWm9uZSIsIloiLCJwYXJzZU1vbnRoTnVtYmVyIiwicGFyc2VEYXlPZk1vbnRoIiwicGFyc2VEYXlPZlllYXIiLCJwYXJzZUhvdXIyNCIsInBhcnNlTWludXRlcyIsInBhcnNlU2Vjb25kcyIsInBhcnNlTWlsbGlzZWNvbmRzIiwicGFyc2VNaWNyb3NlY29uZHMiLCJwYXJzZUxpdGVyYWxQZXJjZW50IiwicGFyc2VVbml4VGltZXN0YW1wIiwiUSIsInBhcnNlVW5peFRpbWVzdGFtcFNlY29uZHMiLCJmb3JtYXREYXlPZk1vbnRoIiwiZm9ybWF0SG91cjI0IiwiZm9ybWF0SG91cjEyIiwiZm9ybWF0RGF5T2ZZZWFyIiwidGltZURheSIsInRpbWVZZWFyIiwiZm9ybWF0TWlsbGlzZWNvbmRzIiwiZ2V0TWlsbGlzZWNvbmRzIiwiZm9ybWF0TWljcm9zZWNvbmRzIiwiZm9ybWF0TW9udGhOdW1iZXIiLCJmb3JtYXRNaW51dGVzIiwiZm9ybWF0U2Vjb25kcyIsImdldFNlY29uZHMiLCJmb3JtYXRXZWVrZGF5TnVtYmVyTW9uZGF5IiwiZm9ybWF0V2Vla051bWJlclN1bmRheSIsInRpbWVTdW5kYXkiLCJmb3JtYXRXZWVrTnVtYmVySVNPIiwidGltZVRodXJzZGF5IiwiZm9ybWF0V2Vla2RheU51bWJlclN1bmRheSIsImZvcm1hdFdlZWtOdW1iZXJNb25kYXkiLCJ0aW1lTW9uZGF5IiwiZm9ybWF0WWVhciIsImZvcm1hdEZ1bGxZZWFyIiwiZm9ybWF0Wm9uZSIsImZvcm1hdFVUQ0RheU9mTW9udGgiLCJmb3JtYXRVVENIb3VyMjQiLCJmb3JtYXRVVENIb3VyMTIiLCJmb3JtYXRVVENEYXlPZlllYXIiLCJmb3JtYXRVVENNaWxsaXNlY29uZHMiLCJnZXRVVENNaWxsaXNlY29uZHMiLCJmb3JtYXRVVENNaWNyb3NlY29uZHMiLCJmb3JtYXRVVENNb250aE51bWJlciIsImZvcm1hdFVUQ01pbnV0ZXMiLCJmb3JtYXRVVENTZWNvbmRzIiwiZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheSIsImRvdyIsImZvcm1hdFVUQ1dlZWtOdW1iZXJTdW5kYXkiLCJmb3JtYXRVVENXZWVrTnVtYmVySVNPIiwiZm9ybWF0VVRDV2Vla2RheU51bWJlclN1bmRheSIsImZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXkiLCJmb3JtYXRVVENZZWFyIiwiZm9ybWF0VVRDRnVsbFllYXIiLCJmb3JtYXRVVENab25lIiwiZm9ybWF0TGl0ZXJhbFBlcmNlbnQiLCJmb3JtYXRVbml4VGltZXN0YW1wIiwiZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMiLCJsb2NhbGVfZGF0ZVRpbWUiLCJkYXRlVGltZSIsImxvY2FsZV9kYXRlIiwibG9jYWxlX3RpbWUiLCJ0aW1lIiwibG9jYWxlX3BlcmlvZHMiLCJwZXJpb2RzIiwibG9jYWxlX3dlZWtkYXlzIiwiZGF5cyIsImxvY2FsZV9zaG9ydFdlZWtkYXlzIiwic2hvcnREYXlzIiwibG9jYWxlX21vbnRocyIsIm1vbnRocyIsImxvY2FsZV9zaG9ydE1vbnRocyIsInNob3J0TW9udGhzIiwicGVyaW9kUmUiLCJwZXJpb2RMb29rdXAiLCJ3ZWVrZGF5UmUiLCJ3ZWVrZGF5TG9va3VwIiwic2hvcnRXZWVrZGF5UmUiLCJzaG9ydFdlZWtkYXlMb29rdXAiLCJtb250aFJlIiwibW9udGhMb29rdXAiLCJzaG9ydE1vbnRoUmUiLCJzaG9ydE1vbnRoTG9va3VwIiwiZm9ybWF0cyIsIkkiLCJZIiwidXRjRm9ybWF0cyIsInBhcnNlcyIsInBhcnNlU3BlY2lmaWVyIiwiY2hhckF0IiwibmV3UGFyc2UiLCJuZXdEYXRlIiwid2VlayIsImRlZmF1bHRMb2NhbGUiLCJ0b0lTT1N0cmluZyIsIm5vb3AiLCJEaXNwYXRjaCIsImNvbmNhdCIsInR5cGVzIiwiVCIsInRoYXQiLCJhcmdzIiwidGFza0hlYWQiLCJ0YXNrVGFpbCIsImZyYW1lIiwidGltZW91dCIsInBva2VEZWxheSIsImNsb2NrTGFzdCIsImNsb2NrTm93IiwiY2xvY2tTa2V3IiwiY2xvY2siLCJwZXJmb3JtYW5jZSIsIm5vdyIsInNldEZyYW1lIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwic2V0VGltZW91dCIsImNsZWFyTm93IiwiVGltZXIiLCJfY2FsbCIsIl90aW1lIiwidGltZXIiLCJkZWxheSIsInJlc3RhcnQiLCJ3YWtlIiwidGltZXJGbHVzaCIsInNsZWVwIiwibmFwIiwicG9rZSIsImNsZWFyVGltZW91dCIsImNsZWFySW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsIlR5cGVFcnJvciIsImVsYXBzZWQiLCJlbXB0eU9uIiwiZW1wdHlUd2VlbiIsIkNSRUFURUQiLCJTQ0hFRFVMRUQiLCJTVEFSVElORyIsIlNUQVJURUQiLCJSVU5OSU5HIiwiRU5ESU5HIiwiRU5ERUQiLCJ0aW1pbmciLCJzY2hlZHVsZXMiLCJfX3RyYW5zaXRpb24iLCJzZWxmIiwidHdlZW4iLCJzdGF0ZSIsInRpY2siLCJkdXJhdGlvbiIsImVhc2UiLCJpbml0Iiwic2NoZWR1bGUiLCJhY3RpdmUiLCJ0d2VlblZhbHVlIiwidHJhbnNpdGlvbiIsIl9pZCIsImludGVycG9sYXRlTnVtYmVyIiwiaW50ZXJwb2xhdGVSZ2IiLCJpbnRlcnBvbGF0ZVN0cmluZyIsIlRyYW5zaXRpb24iLCJfbmFtZSIsIm5ld0lkIiwic2VsZWN0aW9uX3Byb3RvdHlwZSIsImNoaWxkcmVuIiwiaW5oZXJpdCIsImlkMCIsImlkMSIsIm9uMCIsIm9uMSIsInNpdCIsIm9uRnVuY3Rpb24iLCJhdHRyVHdlZW4iLCJ2YWx1ZTAwIiwidmFsdWUxMCIsImludGVycG9sYXRlMCIsInZhbHVlMSIsIl92YWx1ZSIsInN0eWxlVHdlZW4iLCJzdHlsZVJlbW92ZSIsInN0eWxlUmVtb3ZlRW5kIiwic3R5bGVGdW5jdGlvbiIsInN0eWxlQ29uc3RhbnQiLCJ0ZXh0RnVuY3Rpb24iLCJ0ZXh0Q29uc3RhbnQiLCJ0d2VlbjAiLCJ0d2VlbjEiLCJlYXNlQ29uc3RhbnQiLCJkZWZhdWx0VGltaW5nIiwiaW50ZXJydXB0Iiwic2NoZW1lIiwiaW50ZXJwb2xhdGVSZ2JCYXNpcyIsInJhbXAiLCJpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmciLCJyYW1wJDEiLCJzZXRDb2xvclNjYWxlIiwiZG1pbiIsImRtYXgiLCJzZXF1ZW50aWFsIiwiaW50ZXJwb2xhdG9yIiwieDAiLCJ4MSIsImsxMCIsInNjYWxlU2VxdWVudGlhbCIsImludGVycG9sYXRvcnMiLCJCdUduIiwiZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVCdUduIiwiT3JSZCIsImQzQ2hyb21hdGljLmludGVycG9sYXRlT3JSZCIsIlB1QnUiLCJkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZVB1QnUiLCJZbEduQnUiLCJkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZVlsR25CdSIsIkJsdWVzIiwiZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVCbHVlcyIsIk9yYW5nZXMiLCJkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZU9yYW5nZXMiLCJHcmVlbnMiLCJkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZUdyZWVucyIsIlB1cnBsZXMiLCJkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZVB1cnBsZXMiLCJSZWRzIiwiZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVSZWRzIiwiR3JleXMiLCJkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZUdyZXlzIiwiR3JheXMiLCJlcnIiLCJhbGVydCIsImdldENvbG9ySW50ZXJwb2xhdG9yIiwiVG9vbGJhciIsIltvYmplY3QgT2JqZWN0XSIsImRvbUlkIiwidG9vbHRpcCIsInZlcnRpY2FsIiwiJCIsInNob3ciLCJidG5DbGFzc2VzIiwiYmFyIiwiYWRkQ2xhc3MiLCJhcHBlbmRUbyIsImJ1dHRvbnMiLCJvdXRmaWxlTmFtZSIsImNsb25lSWQiLCJpY29uIiwiY3JlYXRlQnV0dG9uIiwiZG93bmxvYWRTdmciLCJoaWRlIiwiJGJ1dHRvbiIsImZpbGVOYW1lIiwic3ZnT2JqIiwiJHN2Z0NvcHkiLCJzdHlsZXMiLCJkb20iLCJ1c2VkIiwic2hlZXRzIiwic3R5bGVTaGVldHMiLCJjc3NSdWxlcyIsInJ1bGVzIiwicnVsZSIsImVsZW1zIiwiZmluZCIsInNlbGVjdG9yVGV4dCIsImNzc1RleHQiLCJwYXJzZUNzc1N0eWxlcyIsInByZXBlbmQiLCJzdmdIdG1sIiwic3ZnQmxvYiIsIkJsb2IiLCJzYXZlQXMiLCJUb29sdGlwIiwidmVyYm9zZSIsIm9mZnNldFgiLCJvZmZzZXRZIiwiaW5mbyIsImNvbnNvbGUiLCJlZGl0IiwibW92ZSIsInBhZ2VYIiwicGFnZVkiLCJIZWF0bWFwIiwidXNlTG9nIiwibG9nQmFzZSIsImNvbG9yU2NoZW1lIiwidG9vbHRpcElkIiwibnVsbENvbG9yIiwiY29sb3JTY2FsZSIsInhMaXN0IiwieUxpc3QiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ0b29sYmFyIiwibGVnZW5kQ29uZmlnIiwidGl0bGUiLCJjb25maWciLCJiYXNlIiwiY2VsbCIsIm9yaWVudGF0aW9uIiwiZHJhd0NvbG9yTGVnZW5kIiwiZGltZW5zaW9ucyIsImFuZ2xlIiwiX3NldFhMaXN0IiwiX3NldFlMaXN0IiwiZHJhdyIsImxvZzIiLCJOdW1iZXIiLCJsb2cxMCIsInVzZU51bGxDb2xvciIsImNvbHVtbkxhYmVsUG9zQWRqdXN0IiwieExhYmVscyIsImNlbGxzIiwic2VsZWN0ZWQiLCJjZWxsTW91c2VvdmVyIiwiY2VsbE1vdXNlb3V0Iiwicm93Q2xhc3MiLCJjb2xDbGFzcyIsImRpc3BsYXlWYWx1ZSIsInBhcnNlRmxvYXQiLCJuZXdMaXN0Iiwic2NhbGVCYW5kIiwiRGVuZHJvSGVhdG1hcENvbmZpZyIsInJvb3RXIiwiaW5uZXJXaWR0aCIsImxlZnRQYW5lbFciLCJ0b3BQYW5lbEgiLCJib3R0b20iLCJjZWxsSCIsImFkanVzdCIsImxlZnRUcmVlUGFuZWwiLCJ0b3BUcmVlUGFuZWwiLCJoZWF0bWFwUGFuZWwiLCJsZWdlbmRQYW5lbCIsInBhbmVscyIsIm1haW4iLCJsZWdlbmQiLCJoaWVyYXJjaHkiLCJjaGlsZHMiLCJOb2RlIiwidmFsdWVkIiwiZGVmYXVsdENoaWxkcmVuIiwiZWFjaEJlZm9yZSIsImNvbXB1dGVIZWlnaHQiLCJjb3B5RGF0YSIsImVhY2hBZnRlciIsInBhdGgiLCJhbmNlc3RvciIsImFOb2RlcyIsImFuY2VzdG9ycyIsImJOb2RlcyIsImxlYXN0Q29tbW9uQW5jZXN0b3IiLCJkZXNjZW5kYW50cyIsImxlYXZlcyIsImxpbmtzIiwidGFyZ2V0IiwiZXBzaWxvbiIsImVudGVyaW5nIiwiX19heGlzIiwiYXhpcyIsIm9yaWVudCIsInRpY2tBcmd1bWVudHMiLCJ0aWNrVmFsdWVzIiwidGlja1NpemVJbm5lciIsInRpY2tTaXplT3V0ZXIiLCJ0aWNrUGFkZGluZyIsImNvbnRleHQiLCJzcGFjaW5nIiwicmFuZ2UwIiwicmFuZ2UxIiwicG9zaXRpb24iLCJ0aWNrRXhpdCIsInRpY2tFbnRlciIsImxpbmUiLCJ0aWNrU2l6ZSIsImF4aXNCb3R0b20iLCJheGlzTGVmdCIsIkRlbmRyb2dyYW0iLCJuZXdpY2siLCJwb3N0b3JkZXIiLCJ0cmVlIiwidG9rZW5zIiwidG9rZW4iLCJzdWJ0cmVlIiwiYnJhbmNoc2V0IiwicGFyc2VOZXdpY2siLCJfc2V0WFNjYWxlIiwiX3NldFlTY2FsZSIsIl9kcmF3SFRyZWUiLCJfZHJhd1ZUcmVlIiwic2V0WSIsInJlZHVjZSIsInNldFgiLCJfZ2V0QnJhbmNoTGVuZ3RoVG9Sb290IiwiX3NvcnROb2Rlc0J5TGV2ZWwiLCJmb3JFYWNoIiwiaW5vZGVzIiwiZDMiLCJfYXNzaWduUG9zdG9yZGVyIiwic2NhbGVMaW5lYXIiLCJfZ2V0TWF4QnJhbmNoTGVuZ3RoIiwiRGVuZHJvSGVhdG1hcCIsImNvbHVtblRyZWUiLCJyb3dUcmVlIiwiaGVhdG1hcERhdGEiLCJzdGFydHNXaXRoIiwiaGVhdG1hcCIsImV4dGVybmFsIiwib2JqZWN0cyIsInZpc3VhbENvbXBvbmVudHMiLCJzaG93Q29sdW1uVHJlZSIsInNob3dSb3dUcmVlIiwibGVnZW5kUG9zIiwiX3VwZGF0ZUNvbmZpZyIsInhsaXN0IiwieWxpc3QiLCJfcmVuZGVyVHJlZSIsIl9yZW5kZXJIZWF0bWFwIiwiZGlyZWN0aW9uIiwibGFiZWxDbGFzcyIsImlkcyIsImxhYmVsIiwiaW5jbHVkZXMiLCJyZWRyYXciLCJyb3dzIiwicGkiLCJ0YXUiLCJ0YXVFcHNpbG9uIiwiUGF0aCIsIl94MCIsIl95MCIsIl94MSIsIl95MSIsIm1vdmVUbyIsImNsb3NlUGF0aCIsImxpbmVUbyIsInF1YWRyYXRpY0N1cnZlVG8iLCJ5MSIsImJlemllckN1cnZlVG8iLCJ4MiIsInkyIiwiYXJjVG8iLCJ5MCIsIngyMSIsInkyMSIsIngwMSIsInkwMSIsImwwMV8yIiwieDIwIiwieTIwIiwibDIxXzIiLCJsMjBfMiIsImwyMSIsImwwMSIsImFjb3MiLCJ0MDEiLCJ0MjEiLCJhcmMiLCJhMCIsImExIiwiY2N3IiwiZHgiLCJkeSIsImN3IiwiZGEiLCJMaW5lYXIiLCJfY29udGV4dCIsImFyZWFTdGFydCIsIl9saW5lIiwiYXJlYUVuZCIsImxpbmVTdGFydCIsIl9wb2ludCIsImxpbmVFbmQiLCJwb2ludFgiLCJwb2ludFkiLCJkZWZpbmVkIiwiY3VydmUiLCJjdXJ2ZUxpbmVhciIsImJ1ZmZlciIsImRlZmluZWQwIiwiYXJlYSIsIngweiIsInkweiIsImFyZWFsaW5lIiwibGluZVgwIiwibGluZVkwIiwibGluZVkxIiwibGluZVgxIiwiX2siLCJfeDIiLCJfeTIiLCJDYXJkaW5hbCIsInRlbnNpb24iLCJjdXN0b20iLCJjYXJkaW5hbCIsInNsb3BlMyIsImgwIiwiaDEiLCJzMCIsInMxIiwic2xvcGUyIiwiTW9ub3RvbmVYIiwiUmVmbGVjdENvbnRleHQiLCJfdDAiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsInZpZXciLCJub2V2ZW50IiwiX19ub3NlbGVjdCIsIk1velVzZXJTZWxlY3QiLCJub3Byb3BhZ2F0aW9uIiwiTU9ERV9EUkFHIiwiTU9ERV9TUEFDRSIsIk1PREVfSEFORExFIiwiTU9ERV9DRU5URVIiLCJoYW5kbGVzIiwieHkiLCJYWSIsImN1cnNvcnMiLCJvdmVybGF5IiwibnciLCJuZSIsInNlIiwic3ciLCJmbGlwWCIsImZsaXBZIiwic2lnbnNYIiwic2lnbnNZIiwiZGVmYXVsdEZpbHRlciIsImJ1dHRvbiIsImRlZmF1bHRFeHRlbnQiLCJfX2JydXNoIiwiZXh0ZW50IiwiZGltIiwidG91Y2hlbmRpbmciLCJsaXN0ZW5lcnMiLCJicnVzaCIsImhhbmRsZVNpemUiLCJpbml0aWFsaXplIiwiaGFuZGxlIiwic3RhcnRlZCIsImVtaXR0ZXIiLCJFbWl0dGVyIiwidG91Y2hlcyIsIncwIiwidzEiLCJuMCIsIm4xIiwiZTAiLCJlMSIsIm1vdmluZyIsImxvY2tYIiwibG9ja1kiLCJtb2RlIiwibWV0YUtleSIsImFsdEtleSIsInNpZ25YIiwic2lnblkiLCJOIiwic2hpZnRpbmciLCJzaGlmdEtleSIsInBvaW50MCIsIm1vdXNlIiwiZW1pdCIsImJlZm9yZXN0YXJ0IiwibW92ZWQiLCJlbmRlZCIsImtleUNvZGUiLCJkcmFnRGlzYWJsZSIsInBvaW50MSIsIm5vY2xpY2siLCJkcmFnRW5hYmxlIiwic2VsZWN0aW9uMCIsInNlbGVjdGlvbjEiLCJzdGFydGluZyIsImN1c3RvbUV2ZW50IiwiQnJ1c2hFdmVudCIsImtlcm5lbCIsImVwYW5lY2huaWtvdiIsImdhdXNzaWFuIiwiZXhwIiwia2VybmVsQmFuZHdpZHRoIiwibnJkIiwiZGV2aWF0aW9uIiwiR3JvdXBlZFZpb2xpbiIsImdyb3VwSW5mbyIsIl9zYW5pdHlDaGVjayIsInhQYWRkaW5nIiwieERvbWFpbiIsInlEb21haW4iLCJ5TGFiZWwiLCJzaG93WCIsInNob3dTdWJYIiwic3ViWEFuZ2xlIiwic2hvd1doaXNrZXIiLCJzaG93RGl2aWRlciIsInNob3dMZWdlbmQiLCJzaG93U2l6ZSIsInJlc2V0IiwicmVuZGVyIiwiYWxsViIsInN1YngiLCJlbnRyeSIsIl9kcmF3VmlvbGluIiwic2l6ZVNjYWxlIiwic3VieEciLCJ4QXhpcyIsInlBeGlzIiwiX2FkZEdyb3VwRGl2aWRlciIsImxlZ2VuZEciLCJ0aGVCcnVzaCIsInpvb20iLCJpZGVsVGltZW91dCIsImxvd0JvdW5kIiwidXBwZXJCb3VuZCIsImdnIiwicTEiLCJxMyIsIm1lZCIsIm1lZGlhbiIsImdJbmRleCIsImtkZSIsImtlcm5lbERlbnNpdHlFc3RpbWF0b3IiLCJlRG9tYWluIiwidmVydGljZXMiLCJ6TWF4IiwidmlvbGluRyIsInZpb2xpbiIsInZQYXRoIiwiaXFyIiwidXBwZXIiLCJ3YXJuIiwiZ2V0WCIsIkdlbmVNb2RlbCIsImdlbmUiLCJleG9ucyIsImV4b25zQ3VyYXRlZCIsImp1bmN0aW9ucyIsImlzSXNvZm9ybSIsIm1heEludHJvbkxlbmd0aCIsIm1pbkV4b25XaWR0aCIsInN0cmFuZCIsImV4b25OdW1iZXIiLCJqdW5jdGlvbklkIiwiaW50cm9uTGVuZ3RoIiwiamRhdGEiLCJlZGF0YSIsImpzY2FsZSIsImVzY2FsZSIsImpjb2xvciIsImV4b25JZCIsInNldFhzY2FsZSIsImV4b25ZIiwib3JpRXhvbiIsIl9maW5kRXhvbiIsImNocm9tU3RhcnQiLCJjaHJvbUVuZCIsImRpc3QiLCJ0cmFuc2NyaXB0SWQiLCJzdGFydEV4b24iLCJlbmRFeG9uIiwiZGlzcGxheU5hbWUiLCJkaXN0MiIsInN0YXJ0WCIsImVuZFgiLCJjeCIsImN5IiwiY291bnRzIiwiY3VydmVDYXJkaW5hbCIsImp1bmNEb3RzIiwiZXhvblJlY3RzIiwiZXhvblJlY3RzMiIsImxhYmVsT24iLCJnZW5lU3ltYm9sIiwibWF4RXhvbkxlbmd0aCIsIm1pbkxlbmd0aCIsInRvdGFsRXhvbkxlbmd0aCIsInBvcyIsInJlc3VsdHMiLCJJc29mb3JtVHJhY2tWaWV3ZXIiLCJpc29mb3JtcyIsImlzb2Zvcm1FeG9ucyIsIm1vZGVsRXhvbnMiLCJ2aXN1YWxEb20iLCJiYXJTY2FsZSIsImRhdGFMYWJlbCIsInNvcnRUcmFja3MiLCJsb2xsaXBvcEdyYXBoIiwiYXhpc1JpZ2h0Iiwic2V0WXNjYWxlIiwiaXNvVHJhY2tzIiwiX3JlbmRlck1vZGVscyIsImlzb2Zvcm0iLCJtb2RlbCIsImlzb2Zvcm1HIiwiZGVtb0RhdGEiLCJwYXIiLCJzY2FsZUZhY3RvciIsImdlbmVyYXRlUmFuZG9tTWF0cml4IiwiZGVuZHJvSGVhdG1hcCIsImNvbFRyZWUiLCJncm91cGVkVmlvbGluUGxvdCIsInRyYW5zY3JpcHRUcmFja3MiLCJFTlNUMDAwMDA1Nzg0MTkuMSIsImNocm9tIiwiRU5TVDAwMDAwNTM5ODU3LjIiLCJFTlNUMDAwMDAzMTE1OTUuOSIsInRyYW5zY3JpcHRzIiwiY2hyb21vc29tZSIsImdlbmNvZGVJZCIsInRyYW5zY3JpcHRUcmFja3NDb25maWciLCJtYXJnaW5MZWZ0IiwibWFyZ2luUmlnaHQiLCJtYXJnaW5Ub3AiLCJtYXJnaW5Cb3R0b20iLCJsYWJlbFBvcyIsImhlYXRtYXBEZW1vQ29uZmlnIiwiY29ybmVyUmFkaXVzIiwiY29sdW1uTGFiZWxIZWlnaHQiLCJjb2x1bW5MYWJlbEFuZ2xlIiwicm93TGFiZWxXaWR0aCIsImxlZ2VuZFNwYWNlIiwiZGVuZHJvSGVhdG1hcERlbW9Db25maWciLCJyb3dUcmVlUGFuZWxXaWR0aCIsImNvbFRyZWVQYW5lbEhlaWdodCIsInZpb2xpbkRlbW9Db25maWciLCJzaG93R3JvdXBYIiwieEFuZ2xlIiwic2hvd1NhbXBsZVNpemUiLCJpbldpZHRoIiwiaW5IZWlnaHQiLCJkbWFwQ29uZmlnIiwiZG1hcCIsInNob3dDb2xUcmVlIiwiZ1Zpb2xpbiIsIlNob3dYIiwiY3JlYXRlVG9vbHRpcCJdLCJtYXBwaW5ncyI6InFDQUFPLElBQUlBLEVBQVEsa0NBR2pCQyxJQUFLLDZCQUNMRCxNQUFPQSxFQUNQRSxNQUFPLCtCQUNQQyxJQUFLLHVDQUNMQyxNQUFPLG1DQ0xNLFNBQVNDLEdBQ3RCLElBQUlDLEVBQVNELEdBQVEsR0FBSUUsRUFBSUQsRUFBT0UsUUFBUSxLQUU1QyxPQURJRCxHQUFLLEdBQXFDLFdBQS9CRCxFQUFTRCxFQUFLSSxNQUFNLEVBQUdGLE1BQWlCRixFQUFPQSxFQUFLSSxNQUFNRixFQUFJLElBQ3RFRyxFQUFXQyxlQUFlTCxJQUFXTSxNQUFPRixFQUFXSixHQUFTTyxNQUFPUixHQUFRQSxHQ2N4RixNQUFlLFNBQVNBLEdBQ3RCLElBQUlTLEVBQVdDLEVBQVVWLEdBQ3pCLE9BQVFTLEVBQVNELE1BUm5CLFNBQXNCQyxHQUNwQixPQUFPLFdBQ0wsT0FBT0UsS0FBS0MsY0FBY0MsZ0JBQWdCSixFQUFTRixNQUFPRSxFQUFTRCxTQVp2RSxTQUF3QlIsR0FDdEIsT0FBTyxXQUNMLElBQUljLEVBQVdILEtBQUtDLGNBQ2hCRyxFQUFNSixLQUFLSyxhQUNmLE9BQU9ELElBQVFwQixHQUFTbUIsRUFBU0csZ0JBQWdCRCxlQUFpQnJCLEVBQzVEbUIsRUFBU0ksY0FBY2xCLEdBQ3ZCYyxFQUFTRCxnQkFBZ0JFLEVBQUtmLE1BY2hCUyxJQ3ZCeEIsU0FBU1UsS0FFVCxNQUFlLFNBQVNDLEdBQ3RCLE9BQW1CLE1BQVpBLEVBQW1CRCxFQUFPLFdBQy9CLE9BQU9SLEtBQUtVLGNBQWNELEtDSjlCLFNBQVNFLElBQ1AsU0FHRixNQUFlLFNB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 +var GTExViz=function(t){"use strict";var e="http://www.w3.org/1999/xhtml",n={svg:"http://www.w3.org/2000/svg",xhtml:e,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},r=function(t){var e=t+="",r=e.indexOf(":");return r>=0&&"xmlns"!==(e=t.slice(0,r))&&(t=t.slice(r+1)),n.hasOwnProperty(e)?{space:n[e],local:t}:t};var a=function(t){var n=r(t);return(n.local?function(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}:function(t){return function(){var n=this.ownerDocument,r=this.namespaceURI;return r===e&&n.documentElement.namespaceURI===e?n.createElement(t):n.createElementNS(r,t)}})(n)};function i(){}var o=function(t){return null==t?i:function(){return this.querySelector(t)}};function c(){return[]}var s=function(t){return null==t?c:function(){return this.querySelectorAll(t)}},f=function(t){return function(){return this.matches(t)}};if("undefined"!=typeof document){var l=document.documentElement;if(!l.matches){var u=l.webkitMatchesSelector||l.msMatchesSelector||l.mozMatchesSelector||l.oMatchesSelector;f=function(t){return function(){return u.call(this,t)}}}}var h=f,d=function(t){return new Array(t.length)};function b(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}b.prototype={constructor:b,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var p="$";function g(t,e,n,r,a,i){for(var o,c=0,s=e.length,f=i.length;ce?1:t>=e?0:NaN}var v=function(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView};function x(t,e){return t.style.getPropertyValue(e)||v(t).getComputedStyle(t,null).getPropertyValue(e)}function w(t){return t.trim().split(/^|\s+/)}function _(t){return t.classList||new M(t)}function M(t){this._node=t,this._names=w(t.getAttribute("class")||"")}function T(t,e){for(var n=_(t),r=-1,a=e.length;++r=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function A(){this.textContent=""}function N(){this.innerHTML=""}function k(){this.nextSibling&&this.parentNode.appendChild(this)}function E(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function C(){return null}function L(){var t=this.parentNode;t&&t.removeChild(this)}function D(){return this.parentNode.insertBefore(this.cloneNode(!1),this.nextSibling)}function P(){return this.parentNode.insertBefore(this.cloneNode(!0),this.nextSibling)}var I={},U=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(I={mouseenter:"mouseover",mouseleave:"mouseout"}));function z(t,e,n){return t=Y(t,e,n),function(e){var n=e.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||t.call(this,e)}}function Y(t,e,n){return function(r){var a=U;U=r;try{t.call(this,this.__data__,e,n)}finally{U=a}}}function B(t){return function(){var e=this.__on;if(e){for(var n,r=0,a=-1,i=e.length;r=M&&(M=_+1);!(w=v[M])&&++M=0;)(r=a[i])&&(o&&o!==r.nextSibling&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=y);for(var n=this._groups,r=n.length,a=new Array(r),i=0;i1?this.each((null==e?function(t){return function(){this.style.removeProperty(t)}}:"function"==typeof e?function(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}:function(t,e,n){return function(){this.style.setProperty(t,e,n)}})(t,e,null==n?"":n)):x(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?function(t){return function(){delete this[t]}}:"function"==typeof e?function(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}:function(t,e){return function(){this[t]=e}})(t,e)):this.node()[t]},classed:function(t,e){var n=w(t+"");if(arguments.length<2){for(var r=_(this.node()),a=-1,i=n.length;++a=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}})}(t+""),o=i.length;if(!(arguments.length<2)){for(c=e?j:B,null==n&&(n=!1),r=0;re?1:t>=e?0:NaN};var Z,K,Q=(1===(Z=W).length&&(K=Z,Z=function(t,e){return W(K(t),e)}),{left:function(t,e,n,r){for(null==n&&(n=0),null==r&&(r=t.length);n>>1;Z(t[a],e)<0?n=a+1:r=a}return n},right:function(t,e,n,r){for(null==n&&(n=0),null==r&&(r=t.length);n>>1;Z(t[a],e)>0?r=a:n=a+1}return n}}).right,J=function(t){return null===t?NaN:+t},tt=function(t,e){var n=function(t,e){var n,r,a=t.length,i=0,o=-1,c=0,s=0;if(null==e)for(;++o1)return s/(i-1)}(t,e);return n?Math.sqrt(n):n},et=function(t,e){var n,r,a,i=t.length,o=-1;if(null==e){for(;++o=n)for(r=a=n;++on&&(r=n),a=n)for(r=a=n;++on&&(r=n),a0)return[t];if((r=e0)for(t=Math.ceil(t/o),e=Math.floor(e/o),i=new Array(a=Math.ceil(e-t+1));++c=0?(i>=rt?10:i>=at?5:i>=it?2:1)*Math.pow(10,a):-Math.pow(10,-a)/(i>=rt?10:i>=at?5:i>=it?2:1)}var st=function(t,e,n){if(null==n&&(n=J),r=t.length){if((e=+e)<=0||r<2)return+n(t[0],0,t);if(e>=1)return+n(t[r-1],r-1,t);var r,a=(r-1)*e,i=Math.floor(a),o=+n(t[i],i,t);return o+(+n(t[i+1],i+1,t)-o)*(a-i)}},ft=function(t,e){var n,r,a=t.length,i=-1;if(null==e){for(;++i=n)for(r=n;++ir&&(r=n)}else for(;++i=n)for(r=n;++ir&&(r=n);return r},lt=function(t,e){var n,r=t.length,a=r,i=-1,o=0;if(null==e)for(;++i=n)for(r=n;++in&&(r=n)}else for(;++i=n)for(r=n;++in&&(r=n);return r},dt=function(t,e){var n,r=t.length,a=-1,i=0;if(null==e)for(;++a1);return t+n*i*Math.sqrt(-2*Math.log(a)/a)}}return n.source=t,n}(function(){return Math.random()});function gt(){}function mt(t,e){var n=new gt;if(t instanceof gt)t.each(function(t,e){n.set(e,t)});else if(Array.isArray(t)){var r,a=-1,i=t.length;if(null==e)for(;++a=r.length)return null!=t&&n.sort(t),null!=e?e(n):n;for(var s,f,l,u=-1,h=n.length,d=r[a++],b=mt(),p=o();++ur.length)return n;var o,c=a[i-1];return null!=e&&i>=r.length?o=n.entries():(o=[],n.each(function(e,n){o.push({key:n,values:t(e,i)})})),null!=c?o.sort(function(t,e){return c(t.key,e.key)}):o}(i(t,0,wt,_t),0)},key:function(t){return r.push(t),n},sortKeys:function(t){return a[r.length-1]=t,n},sortValues:function(e){return t=e,n},rollup:function(t){return e=t,n}}};function vt(){return{}}function xt(t,e,n){t[e]=n}function wt(){return mt()}function _t(t,e,n){t.set(e,n)}var Mt=Array.prototype,Tt=Mt.map,St=Mt.slice,At={name:"implicit"};function Nt(){var t,e,n=function t(e){var n=mt(),r=[],a=At;function i(t){var i=t+"",o=n.get(i);if(!o){if(a!==At)return a;n.set(i,o=r.push(t))}return e[(o-1)%e.length]}return e=null==e?[]:St.call(e),i.domain=function(t){if(!arguments.length)return r.slice();r=[],n=mt();for(var e,a,o=-1,c=t.length;++o>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):(e=It.exec(t))?Ht(parseInt(e[1],16)):(e=Ut.exec(t))?new qt(e[1],e[2],e[3],1):(e=zt.exec(t))?new qt(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Yt.exec(t))?Ot(e[1],e[2],e[3],e[4]):(e=Bt.exec(t))?Ot(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=jt.exec(t))?Zt(e[1],e[2]/100,e[3]/100,1):(e=Ft.exec(t))?Zt(e[1],e[2]/100,e[3]/100,e[4]):Vt.hasOwnProperty(t)?Ht(Vt[t]):"transparent"===t?new qt(NaN,NaN,NaN,0):null}function Ht(t){return new qt(t>>16&255,t>>8&255,255&t,1)}function Ot(t,e,n,r){return r<=0&&(t=e=n=NaN),new qt(t,e,n,r)}function Rt(t){return t instanceof Ct||(t=Gt(t)),t?new qt((t=t.rgb()).r,t.g,t.b,t.opacity):new qt}function Xt(t,e,n,r){return 1===arguments.length?Rt(t):new qt(t,e,n,null==r?1:r)}function qt(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function Wt(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function Zt(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new Kt(t,e,n,r)}function Kt(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function Qt(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}kt(Ct,Gt,{displayable:function(){return this.rgb().displayable()},hex:function(){return this.rgb().hex()},toString:function(){return this.rgb()+""}}),kt(qt,Xt,Et(Ct,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new qt(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new qt(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},hex:function(){return"#"+Wt(this.r)+Wt(this.g)+Wt(this.b)},toString:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}})),kt(Kt,function(t,e,n,r){return 1===arguments.length?function(t){if(t instanceof Kt)return new Kt(t.h,t.s,t.l,t.opacity);if(t instanceof Ct||(t=Gt(t)),!t)return new Kt;if(t instanceof Kt)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,a=Math.min(e,n,r),i=Math.max(e,n,r),o=NaN,c=i-a,s=(i+a)/2;return c?(o=e===i?(n-r)/c+6*(n0&&s<1?0:o,new Kt(o,c,s,t.opacity)}(t):new Kt(t,e,n,null==r?1:r)},Et(Ct,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Kt(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Kt(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,a=2*n-r;return new qt(Qt(t>=240?t-240:t+120,a,r),Qt(t,a,r),Qt(t<120?t+240:t-120,a,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var Jt=Math.PI/180,te=180/Math.PI,ee=.96422,ne=1,re=.82521,ae=4/29,ie=6/29,oe=3*ie*ie,ce=ie*ie*ie;function se(t){if(t instanceof fe)return new fe(t.l,t.a,t.b,t.opacity);if(t instanceof be){if(isNaN(t.h))return new fe(t.l,0,0,t.opacity);var e=t.h*Jt;return new fe(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}t instanceof qt||(t=Rt(t));var n,r,a=de(t.r),i=de(t.g),o=de(t.b),c=le((.2225045*a+.7168786*i+.0606169*o)/ne);return a===i&&i===o?n=r=c:(n=le((.4360747*a+.3850649*i+.1430804*o)/ee),r=le((.0139322*a+.0971045*i+.7141733*o)/re)),new fe(116*c-16,500*(n-c),200*(c-r),t.opacity)}function fe(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}function le(t){return t>ce?Math.pow(t,1/3):t/oe+ae}function ue(t){return t>ie?t*t*t:oe*(t-ae)}function he(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function de(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function be(t,e,n,r){this.h=+t,this.c=+e,this.l=+n,this.opacity=+r}kt(fe,function(t,e,n,r){return 1===arguments.length?se(t):new fe(t,e,n,null==r?1:r)},Et(Ct,{brighter:function(t){return new fe(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new fe(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return new qt(he(3.1338561*(e=ee*ue(e))-1.6168667*(t=ne*ue(t))-.4906146*(n=re*ue(n))),he(-.9787684*e+1.9161415*t+.033454*n),he(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}})),kt(be,function(t,e,n,r){return 1===arguments.length?function(t){if(t instanceof be)return new be(t.h,t.c,t.l,t.opacity);if(t instanceof fe||(t=se(t)),0===t.a&&0===t.b)return new be(NaN,0,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*te;return new be(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}(t):new be(t,e,n,null==r?1:r)},Et(Ct,{brighter:function(t){return new be(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker:function(t){return new be(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb:function(){return se(this).rgb()}}));var pe=-.14861,ge=1.78277,me=-.29227,ye=-.90649,ve=1.97294,xe=ve*ye,we=ve*ge,_e=ge*me-ye*pe;function Me(t,e,n,r){return 1===arguments.length?function(t){if(t instanceof Te)return new Te(t.h,t.s,t.l,t.opacity);t instanceof qt||(t=Rt(t));var e=t.r/255,n=t.g/255,r=t.b/255,a=(_e*r+xe*e-we*n)/(_e+xe-we),i=r-a,o=(ve*(n-a)-me*i)/ye,c=Math.sqrt(o*o+i*i)/(ve*a*(1-a)),s=c?Math.atan2(o,i)*te-120:NaN;return new Te(s<0?s+360:s,c,a,t.opacity)}(t):new Te(t,e,n,null==r?1:r)}function Te(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function Se(t,e,n,r,a){var i=t*t,o=i*t;return((1-3*t+3*i-o)*e+(4-6*i+3*o)*n+(1+3*t+3*i-3*o)*r+o*a)/6}kt(Te,Me,Et(Ct,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Te(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Te(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*Jt,e=+this.l,n=isNaN(this.s)?0:this.s*e*(1-e),r=Math.cos(t),a=Math.sin(t);return new qt(255*(e+n*(pe*r+ge*a)),255*(e+n*(me*r+ye*a)),255*(e+n*(ve*r)),this.opacity)}}));var Ae=function(t){return function(){return t}};function Ne(t,e){return function(n){return t+n*e}}function ke(t){return 1==(t=+t)?Ee:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):Ae(isNaN(e)?n:e)}}function Ee(t,e){var n=e-t;return n?Ne(t,n):Ae(isNaN(t)?e:t)}var Ce=function t(e){var n=ke(e);function r(t,e){var r=n((t=Xt(t)).r,(e=Xt(e)).r),a=n(t.g,e.g),i=n(t.b,e.b),o=Ee(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=a(e),t.b=i(e),t.opacity=o(e),t+""}}return r.gamma=t,r}(1);function $e(t){return function(e){var n,r,a=e.length,i=new Array(a),o=new Array(a),c=new Array(a);for(n=0;n=1?(n=1,e-1):Math.floor(n*e),a=t[r],i=t[r+1],o=r>0?t[r-1]:2*a-i,c=ri&&(a=e.slice(i,a),c[o]?c[o]+=a:c[++o]=a),(n=n[0])===(r=r[0])?c[o]?c[o]+=r:c[++o]=r:(c[++o]=null,s.push({i:o,x:De(n,r)})),i=Ie.lastIndex;return i180?e+=360:e-t>180&&(t+=360),i.push({i:n.push(a(n)+"rotate(",null,r)-2,x:De(t,e)})):e&&n.push(a(n)+"rotate("+e+r)}(i.rotate,o.rotate,c,s),function(t,e,n,i){t!==e?i.push({i:n.push(a(n)+"skewX(",null,r)-2,x:De(t,e)}):e&&n.push(a(n)+"skewX("+e+r)}(i.skewX,o.skewX,c,s),function(t,e,n,r,i,o){if(t!==n||e!==r){var c=i.push(a(i)+"scale(",null,",",null,")");o.push({i:c-4,x:De(t,n)},{i:c-2,x:De(e,r)})}else 1===n&&1===r||i.push(a(i)+"scale("+n+","+r+")")}(i.scaleX,i.scaleY,o.scaleX,o.scaleY,c,s),i=o=null,function(t){for(var e,n=-1,r=s.length;++n180||n<-180?n-360*Math.round(n/360):n):Ae(isNaN(t)?e:t)});var Ze=We(Ee),Ke=function(t){return function(){return t}},Qe=function(t){return+t},Je=[0,1];function tn(t,e){return(e-=t=+t)?function(n){return(n-t)/e}:Ke(e)}function en(t,e,n,r){var a=t[0],i=t[1],o=e[0],c=e[1];return i1?r[0]+r.slice(2):r,+t.slice(n+1)]},an=function(t){return(t=rn(Math.abs(t)))?t[1]:NaN},on=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function cn(t){return new sn(t)}function sn(t){if(!(e=on.exec(t)))throw new Error("invalid format: "+t);var e;this.fill=e[1]||" ",this.align=e[2]||">",this.sign=e[3]||"-",this.symbol=e[4]||"",this.zero=!!e[5],this.width=e[6]&&+e[6],this.comma=!!e[7],this.precision=e[8]&&+e[8].slice(1),this.trim=!!e[9],this.type=e[10]||""}cn.prototype=sn.prototype,sn.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(null==this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(null==this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var fn,ln,un,hn,dn=function(t){t:for(var e,n=t.length,r=1,a=-1;r0){if(!+t[r])break t;a=0}}return a>0?t.slice(0,a)+t.slice(e+1):t},bn=function(t,e){var n=rn(t,e);if(!n)return t+"";var r=n[0],a=n[1];return a<0?"0."+new Array(-a).join("0")+r:r.length>a+1?r.slice(0,a+1)+"."+r.slice(a+1):r+new Array(a-r.length+2).join("0")},pn={"%":function(t,e){return(100*t).toFixed(e)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+""},d:function(t){return Math.round(t).toString(10)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},g:function(t,e){return t.toPrecision(e)},o:function(t){return Math.round(t).toString(8)},p:function(t,e){return bn(100*t,e)},r:bn,s:function(t,e){var n=rn(t,e);if(!n)return t+"";var r=n[0],a=n[1],i=a-(fn=3*Math.max(-8,Math.min(8,Math.floor(a/3))))+1,o=r.length;return i===o?r:i>o?r+new Array(i-o+1).join("0"):i>0?r.slice(0,i)+"."+r.slice(i):"0."+new Array(1-i).join("0")+rn(t,Math.max(0,e+i-1))[0]},X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}},gn=function(t){return t},mn=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];ln=function(t){var e,n,r=t.grouping&&t.thousands?(e=t.grouping,n=t.thousands,function(t,r){for(var a=t.length,i=[],o=0,c=e[0],s=0;a>0&&c>0&&(s+c+1>r&&(c=Math.max(1,r-s)),i.push(t.substring(a-=c,a+c)),!((s+=c+1)>r));)c=e[o=(o+1)%e.length];return i.reverse().join(n)}):gn,a=t.currency,i=t.decimal,o=t.numerals?function(t){return function(e){return e.replace(/[0-9]/g,function(e){return t[+e]})}}(t.numerals):gn,c=t.percent||"%";function s(t){var e=(t=cn(t)).fill,n=t.align,s=t.sign,f=t.symbol,l=t.zero,u=t.width,h=t.comma,d=t.precision,b=t.trim,p=t.type;"n"===p?(h=!0,p="g"):pn[p]||(null==d&&(d=12),b=!0,p="g"),(l||"0"===e&&"="===n)&&(l=!0,e="0",n="=");var g="$"===f?a[0]:"#"===f&&/[boxX]/.test(p)?"0"+p.toLowerCase():"",m="$"===f?a[1]:/[%p]/.test(p)?c:"",y=pn[p],v=/[defgprs%]/.test(p);function x(t){var a,c,f,x=g,w=m;if("c"===p)w=y(t)+w,t="";else{var _=(t=+t)<0;if(t=y(Math.abs(t),d),b&&(t=dn(t)),_&&0==+t&&(_=!1),x=(_?"("===s?s:"-":"-"===s||"("===s?"":s)+x,w=("s"===p?mn[8+fn/3]:"")+w+(_&&"("===s?")":""),v)for(a=-1,c=t.length;++a(f=t.charCodeAt(a))||f>57){w=(46===f?i+t.slice(a+1):t.slice(a))+w,t=t.slice(0,a);break}}h&&!l&&(t=r(t,1/0));var M=x.length+t.length+w.length,T=M>1)+x+t+w+T.slice(M);break;default:t=T+x+t+w}return o(t)}return d=null==d?6:/[gprs]/.test(p)?Math.max(1,Math.min(21,d)):Math.max(0,Math.min(20,d)),x.toString=function(){return t+""},x}return{format:s,formatPrefix:function(t,e){var n=s(((t=cn(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(an(e)/3))),a=Math.pow(10,-r),i=mn[8+r/3];return function(t){return n(a*t)+i}}}}({decimal:".",thousands:",",grouping:[3],currency:["$",""]}),un=ln.format,hn=ln.formatPrefix;var yn=function(t,e,n){var r,a=t[0],i=t[t.length-1],o=function(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),a=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),i=r/a;return i>=rt?a*=10:i>=at?a*=5:i>=it&&(a*=2),e0?r=ct(c=Math.floor(c/r)*r,s=Math.ceil(s/r)*r,n):r<0&&(r=ct(c=Math.ceil(c*r)/r,s=Math.floor(s*r)/r,n)),r>0?(a[i]=Math.floor(c/r)*r,a[o]=Math.ceil(s/r)*r,e(a)):r<0&&(a[i]=Math.ceil(c*r)/r,a[o]=Math.floor(s*r)/r,e(a)),t},t}function xn(){var t=function(t,e){var n,r,a,i=Je,o=Je,c=Fe,s=!1;function f(){return n=Math.min(i.length,o.length)>2?nn:en,r=a=null,l}function l(e){return(r||(r=n(i,o,s?function(t){return function(e,n){var r=t(e=+e,n=+n);return function(t){return t<=e?0:t>=n?1:r(t)}}}(t):t,c)))(+e)}return l.invert=function(t){return(a||(a=n(o,i,tn,s?function(t){return function(e,n){var r=t(e=+e,n=+n);return function(t){return t<=0?e:t>=1?n:r(t)}}}(e):e)))(+t)},l.domain=function(t){return arguments.length?(i=Tt.call(t,Qe),f()):i.slice()},l.range=function(t){return arguments.length?(o=St.call(t),f()):o.slice()},l.rangeRound=function(t){return o=St.call(t),c=Ve,f()},l.clamp=function(t){return arguments.length?(s=!!t,f()):s},l.interpolate=function(t){return arguments.length?(c=t,f()):c},f()}(tn,De);return t.copy=function(){return e=t,xn().domain(e.domain()).range(e.range()).interpolate(e.interpolate()).clamp(e.clamp());var e},vn(t)}var wn=new Date,_n=new Date;function Mn(t,e,n,r){function a(e){return t(e=new Date(+e)),e}return a.floor=a,a.ceil=function(n){return t(n=new Date(n-1)),e(n,1),t(n),n},a.round=function(t){var e=a(t),n=a.ceil(t);return t-e0))return c;do{c.push(o=new Date(+n)),e(n,i),t(n)}while(o=e)for(;t(e),!n(e);)e.setTime(e-1)},function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););})},n&&(a.count=function(e,r){return wn.setTime(+e),_n.setTime(+r),t(wn),t(_n),Math.floor(n(wn,_n))},a.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?a.filter(r?function(e){return r(e)%t==0}:function(e){return a.count(0,e)%t==0}):a:null}),a}var Tn=Mn(function(){},function(t,e){t.setTime(+t+e)},function(t,e){return e-t});Tn.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?Mn(function(e){e.setTime(Math.floor(e/t)*t)},function(e,n){e.setTime(+e+n*t)},function(e,n){return(n-e)/t}):Tn:null};var Sn=6e4,An=6048e5,Nn=(Mn(function(t){t.setTime(1e3*Math.floor(t/1e3))},function(t,e){t.setTime(+t+1e3*e)},function(t,e){return(e-t)/1e3},function(t){return t.getUTCSeconds()}),Mn(function(t){t.setTime(Math.floor(t/Sn)*Sn)},function(t,e){t.setTime(+t+e*Sn)},function(t,e){return(e-t)/Sn},function(t){return t.getMinutes()}),Mn(function(t){var e=t.getTimezoneOffset()*Sn%36e5;e<0&&(e+=36e5),t.setTime(36e5*Math.floor((+t-e)/36e5)+e)},function(t,e){t.setTime(+t+36e5*e)},function(t,e){return(e-t)/36e5},function(t){return t.getHours()}),Mn(function(t){t.setHours(0,0,0,0)},function(t,e){t.setDate(t.getDate()+e)},function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*Sn)/864e5},function(t){return t.getDate()-1}));function kn(t){return Mn(function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},function(t,e){t.setDate(t.getDate()+7*e)},function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*Sn)/An})}var En=kn(0),Cn=kn(1),$n=(kn(2),kn(3),kn(4)),Ln=(kn(5),kn(6),Mn(function(t){t.setDate(1),t.setHours(0,0,0,0)},function(t,e){t.setMonth(t.getMonth()+e)},function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())},function(t){return t.getMonth()}),Mn(function(t){t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,e){t.setFullYear(t.getFullYear()+e)},function(t,e){return e.getFullYear()-t.getFullYear()},function(t){return t.getFullYear()}));Ln.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Mn(function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,n){e.setFullYear(e.getFullYear()+n*t)}):null};Mn(function(t){t.setUTCSeconds(0,0)},function(t,e){t.setTime(+t+e*Sn)},function(t,e){return(e-t)/Sn},function(t){return t.getUTCMinutes()}),Mn(function(t){t.setUTCMinutes(0,0,0)},function(t,e){t.setTime(+t+36e5*e)},function(t,e){return(e-t)/36e5},function(t){return t.getUTCHours()});var Dn=Mn(function(t){t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCDate(t.getUTCDate()+e)},function(t,e){return(e-t)/864e5},function(t){return t.getUTCDate()-1});function Pn(t){return Mn(function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},function(t,e){t.setUTCDate(t.getUTCDate()+7*e)},function(t,e){return(e-t)/An})}var In=Pn(0),Un=Pn(1),zn=(Pn(2),Pn(3),Pn(4)),Yn=(Pn(5),Pn(6),Mn(function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCMonth(t.getUTCMonth()+e)},function(t,e){return e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())},function(t){return t.getUTCMonth()}),Mn(function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)},function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()},function(t){return t.getUTCFullYear()}));function Bn(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function jn(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Fn(t){return{y:t,m:0,d:1,H:0,M:0,S:0,L:0}}Yn.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Mn(function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)}):null};var Vn,Gn,Hn,On={"-":"",_:" ",0:"0"},Rn=/^\s*\d+/,Xn=/^%/,qn=/[\\^$*+?|[\]().{}]/g;function Wn(t,e,n){var r=t<0?"-":"",a=(r?-t:t)+"",i=a.length;return r+(i68?1900:2e3),n+r[0].length):-1}function or(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function cr(t,e,n){var r=Rn.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function sr(t,e,n){var r=Rn.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function fr(t,e,n){var r=Rn.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function lr(t,e,n){var r=Rn.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function ur(t,e,n){var r=Rn.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function hr(t,e,n){var r=Rn.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function dr(t,e,n){var r=Rn.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function br(t,e,n){var r=Rn.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function pr(t,e,n){var r=Xn.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function gr(t,e,n){var r=Rn.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function mr(t,e,n){var r=Rn.exec(e.slice(n));return r?(t.Q=1e3*+r[0],n+r[0].length):-1}function yr(t,e){return Wn(t.getDate(),e,2)}function vr(t,e){return Wn(t.getHours(),e,2)}function xr(t,e){return Wn(t.getHours()%12||12,e,2)}function wr(t,e){return Wn(1+Nn.count(Ln(t),t),e,3)}function _r(t,e){return Wn(t.getMilliseconds(),e,3)}function Mr(t,e){return _r(t,e)+"000"}function Tr(t,e){return Wn(t.getMonth()+1,e,2)}function Sr(t,e){return Wn(t.getMinutes(),e,2)}function Ar(t,e){return Wn(t.getSeconds(),e,2)}function Nr(t){var e=t.getDay();return 0===e?7:e}function kr(t,e){return Wn(En.count(Ln(t),t),e,2)}function Er(t,e){var n=t.getDay();return t=n>=4||0===n?$n(t):$n.ceil(t),Wn($n.count(Ln(t),t)+(4===Ln(t).getDay()),e,2)}function Cr(t){return t.getDay()}function $r(t,e){return Wn(Cn.count(Ln(t),t),e,2)}function Lr(t,e){return Wn(t.getFullYear()%100,e,2)}function Dr(t,e){return Wn(t.getFullYear()%1e4,e,4)}function Pr(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Wn(e/60|0,"0",2)+Wn(e%60,"0",2)}function Ir(t,e){return Wn(t.getUTCDate(),e,2)}function Ur(t,e){return Wn(t.getUTCHours(),e,2)}function zr(t,e){return Wn(t.getUTCHours()%12||12,e,2)}function Yr(t,e){return Wn(1+Dn.count(Yn(t),t),e,3)}function Br(t,e){return Wn(t.getUTCMilliseconds(),e,3)}function jr(t,e){return Br(t,e)+"000"}function Fr(t,e){return Wn(t.getUTCMonth()+1,e,2)}function Vr(t,e){return Wn(t.getUTCMinutes(),e,2)}function Gr(t,e){return Wn(t.getUTCSeconds(),e,2)}function Hr(t){var e=t.getUTCDay();return 0===e?7:e}function Or(t,e){return Wn(In.count(Yn(t),t),e,2)}function Rr(t,e){var n=t.getUTCDay();return t=n>=4||0===n?zn(t):zn.ceil(t),Wn(zn.count(Yn(t),t)+(4===Yn(t).getUTCDay()),e,2)}function Xr(t){return t.getUTCDay()}function qr(t,e){return Wn(Un.count(Yn(t),t),e,2)}function Wr(t,e){return Wn(t.getUTCFullYear()%100,e,2)}function Zr(t,e){return Wn(t.getUTCFullYear()%1e4,e,4)}function Kr(){return"+0000"}function Qr(){return"%"}function Jr(t){return+t}function ta(t){return Math.floor(+t/1e3)}!function(t){Vn=function(t){var e=t.dateTime,n=t.date,r=t.time,a=t.periods,i=t.days,o=t.shortDays,c=t.months,s=t.shortMonths,f=Kn(a),l=Qn(a),u=Kn(i),h=Qn(i),d=Kn(o),b=Qn(o),p=Kn(c),g=Qn(c),m=Kn(s),y=Qn(s),v={a:function(t){return o[t.getDay()]},A:function(t){return i[t.getDay()]},b:function(t){return s[t.getMonth()]},B:function(t){return c[t.getMonth()]},c:null,d:yr,e:yr,f:Mr,H:vr,I:xr,j:wr,L:_r,m:Tr,M:Sr,p:function(t){return a[+(t.getHours()>=12)]},Q:Jr,s:ta,S:Ar,u:Nr,U:kr,V:Er,w:Cr,W:$r,x:null,X:null,y:Lr,Y:Dr,Z:Pr,"%":Qr},x={a:function(t){return o[t.getUTCDay()]},A:function(t){return i[t.getUTCDay()]},b:function(t){return s[t.getUTCMonth()]},B:function(t){return c[t.getUTCMonth()]},c:null,d:Ir,e:Ir,f:jr,H:Ur,I:zr,j:Yr,L:Br,m:Fr,M:Vr,p:function(t){return a[+(t.getUTCHours()>=12)]},Q:Jr,s:ta,S:Gr,u:Hr,U:Or,V:Rr,w:Xr,W:qr,x:null,X:null,y:Wr,Y:Zr,Z:Kr,"%":Qr},w={a:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=b[r[0].toLowerCase()],n+r[0].length):-1},A:function(t,e,n){var r=u.exec(e.slice(n));return r?(t.w=h[r[0].toLowerCase()],n+r[0].length):-1},b:function(t,e,n){var r=m.exec(e.slice(n));return r?(t.m=y[r[0].toLowerCase()],n+r[0].length):-1},B:function(t,e,n){var r=p.exec(e.slice(n));return r?(t.m=g[r[0].toLowerCase()],n+r[0].length):-1},c:function(t,n,r){return T(t,e,n,r)},d:sr,e:sr,f:br,H:lr,I:lr,j:fr,L:dr,m:cr,M:ur,p:function(t,e,n){var r=f.exec(e.slice(n));return r?(t.p=l[r[0].toLowerCase()],n+r[0].length):-1},Q:gr,s:mr,S:hr,u:tr,U:er,V:nr,w:Jn,W:rr,x:function(t,e,r){return T(t,n,e,r)},X:function(t,e,n){return T(t,r,e,n)},y:ir,Y:ar,Z:or,"%":pr};function _(t,e){return function(n){var r,a,i,o=[],c=-1,s=0,f=t.length;for(n instanceof Date||(n=new Date(+n));++c53)return null;"w"in i||(i.w=1),"Z"in i?(r=(a=(r=jn(Fn(i.y))).getUTCDay())>4||0===a?Un.ceil(r):Un(r),r=Dn.offset(r,7*(i.V-1)),i.y=r.getUTCFullYear(),i.m=r.getUTCMonth(),i.d=r.getUTCDate()+(i.w+6)%7):(r=(a=(r=e(Fn(i.y))).getDay())>4||0===a?Cn.ceil(r):Cn(r),r=Nn.offset(r,7*(i.V-1)),i.y=r.getFullYear(),i.m=r.getMonth(),i.d=r.getDate()+(i.w+6)%7)}else("W"in i||"U"in i)&&("w"in i||(i.w="u"in i?i.u%7:"W"in i?1:0),a="Z"in i?jn(Fn(i.y)).getUTCDay():e(Fn(i.y)).getDay(),i.m=0,i.d="W"in i?(i.w+6)%7+7*i.W-(a+5)%7:i.w+7*i.U-(a+6)%7);return"Z"in i?(i.H+=i.Z/100|0,i.M+=i.Z%100,jn(i)):e(i)}}function T(t,e,n,r){for(var a,i,o=0,c=e.length,s=n.length;o=s)return-1;if(37===(a=e.charCodeAt(o++))){if(a=e.charAt(o++),!(i=w[a in On?e.charAt(o++):a])||(r=i(t,n,r))<0)return-1}else if(a!=n.charCodeAt(r++))return-1}return r}return v.x=_(n,v),v.X=_(r,v),v.c=_(e,v),x.x=_(n,x),x.X=_(r,x),x.c=_(e,x),{format:function(t){var e=_(t+="",v);return e.toString=function(){return t},e},parse:function(t){var e=M(t+="",Bn);return e.toString=function(){return t},e},utcFormat:function(t){var e=_(t+="",x);return e.toString=function(){return t},e},utcParse:function(t){var e=M(t,jn);return e.toString=function(){return t},e}}}(t),Gn=Vn.utcFormat,Hn=Vn.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});Date.prototype.toISOString||Gn("%Y-%m-%dT%H:%M:%S.%LZ");+new Date("2000-01-01T00:00:00.000Z")||Hn("%Y-%m-%dT%H:%M:%S.%LZ");var ea={value:function(){}};function na(){for(var t,e=0,n=arguments.length,r={};e=0&&(e=t.slice(n+1),t=t.slice(0,n)),t&&!r.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}})),o=-1,c=i.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++o0)for(var n,r,a=new Array(n),i=0;i=0&&e._call.call(null,t),e=e._next;--sa}()}finally{sa=0,function(){var t,e,n=oa,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:oa=e);ca=t,Ma(r)}(),da=0}}function _a(){var t=pa.now(),e=t-ha;e>ua&&(ba-=e,ha=t)}function Ma(t){sa||(fa&&(fa=clearTimeout(fa)),t-da>24?(t<1/0&&(fa=setTimeout(wa,t-pa.now()-ba)),la&&(la=clearInterval(la))):(la||(ha=pa.now(),la=setInterval(_a,ua)),sa=1,ga(wa)))}va.prototype=xa.prototype={constructor:va,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?ma():+n)+(null==e?0:+e),this._next||ca===this||(ca?ca._next=this:oa=this,ca=this),this._call=t,this._time=n,Ma()},stop:function(){this._call&&(this._call=null,this._time=1/0,Ma())}};var Ta=function(t,e,n){var r=new va;return e=null==e?0:+e,r.restart(function(n){r.stop(),t(n+e)},e,n),r},Sa=na("start","end","interrupt"),Aa=[],Na=0,ka=1,Ea=2,Ca=3,$a=4,La=5,Da=6,Pa=function(t,e,n,r,a,i){var o=t.__transition;if(o){if(n in o)return}else t.__transition={};!function(t,e,n){var r,a=t.__transition;function i(s){var f,l,u,h;if(n.state!==ka)return c();for(f in a)if((h=a[f]).name===n.name){if(h.state===Ca)return Ta(i);h.state===$a?(h.state=Da,h.timer.stop(),h.on.call("interrupt",t,t.__data__,h.index,h.group),delete a[f]):+fNa)throw new Error("too late; already scheduled");return n}function Ua(t,e){var n=za(t,e);if(n.state>Ea)throw new Error("too late; already started");return n}function za(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}var Ya=function(t,e){var n,r,a,i=t.__transition,o=!0;if(i){for(a in e=null==e?null:e+"",i)(n=i[a]).name===e?(r=n.state>Ea&&n.state=0&&(t=t.slice(0,e)),!t||"start"===t})}(e)?Ia:Ua;return function(){var o=i(this,t),c=o.on;c!==r&&(a=(r=c).copy()).on(e,n),o.on=a}}(n,t,e))},attr:function(t,e){var n=r(t),a="transform"===n?qe:ja;return this.attrTween(t,"function"==typeof e?(n.local?function(t,e,n){var r,a,i;return function(){var o,c=n(this);if(null!=c)return(o=this.getAttributeNS(t.space,t.local))===c?null:o===r&&c===a?i:i=e(r=o,a=c);this.removeAttributeNS(t.space,t.local)}}:function(t,e,n){var r,a,i;return function(){var o,c=n(this);if(null!=c)return(o=this.getAttribute(t))===c?null:o===r&&c===a?i:i=e(r=o,a=c);this.removeAttribute(t)}})(n,a,Ba(this,"attr."+t,e)):null==e?(n.local?function(t){return function(){this.removeAttributeNS(t.space,t.local)}}:function(t){return function(){this.removeAttribute(t)}})(n):(n.local?function(t,e,n){var r,a;return function(){var i=this.getAttributeNS(t.space,t.local);return i===n?null:i===r?a:a=e(r=i,n)}}:function(t,e,n){var r,a;return function(){var i=this.getAttribute(t);return i===n?null:i===r?a:a=e(r=i,n)}})(n,a,e+""))},attrTween:function(t,e){var n="attr."+t;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==e)return this.tween(n,null);if("function"!=typeof e)throw new Error;var a=r(t);return this.tween(n,(a.local?function(t,e){function n(){var n=this,r=e.apply(n,arguments);return r&&function(e){n.setAttributeNS(t.space,t.local,r(e))}}return n._value=e,n}:function(t,e){function n(){var n=this,r=e.apply(n,arguments);return r&&function(e){n.setAttribute(t,r(e))}}return n._value=e,n})(a,e))},style:function(t,e,n){var r="transform"==(t+="")?Xe:ja;return null==e?this.styleTween(t,function(t,e){var n,r,a;return function(){var i=x(this,t),o=(this.style.removeProperty(t),x(this,t));return i===o?null:i===n&&o===r?a:a=e(n=i,r=o)}}(t,r)).on("end.style."+t,function(t){return function(){this.style.removeProperty(t)}}(t)):this.styleTween(t,"function"==typeof e?function(t,e,n){var r,a,i;return function(){var o=x(this,t),c=n(this);return null==c&&(this.style.removeProperty(t),c=x(this,t)),o===c?null:o===r&&c===a?i:i=e(r=o,a=c)}}(t,r,Ba(this,"style."+t,e)):function(t,e,n){var r,a;return function(){var i=x(this,t);return i===n?null:i===r?a:a=e(r=i,n)}}(t,r,e+""),n)},styleTween:function(t,e,n){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==e)return this.tween(r,null);if("function"!=typeof e)throw new Error;return this.tween(r,function(t,e,n){function r(){var r=this,a=e.apply(r,arguments);return a&&function(e){r.style.setProperty(t,a(e),n)}}return r._value=e,r}(t,e,null==n?"":n))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var e=t(this);this.textContent=null==e?"":e}}(Ba(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},remove:function(){return this.on("end.remove",(t=this._id,function(){var e=this.parentNode;for(var n in this.__transition)if(+n!==t)return;e&&e.removeChild(this)}));var t},tween:function(t,e){var n=this._id;if(t+="",arguments.length<2){for(var r,a=za(this.node(),n).tween,i=0,o=a.length;i").addClass(r).appendTo(`#${t}`),this.buttons={},this.tooltip=e}createDownloadSvgButton(t,e,n,r,a="fa-download"){this.createButton(t,a);O(`#${t}`).on("click",()=>{this.downloadSvg(e,n,r)}).on("mouseover",()=>{this.tooltip.show("Download")}).on("mouseout",()=>{this.tooltip.hide()})}createResetButton(t,e,n="fa-expand-arrows-alt"){this.createButton(t,n);O(`#${t}`).on("click",e).on("mouseover",()=>{this.tooltip.show("Reset the scales")}).on("mouseout",()=>{this.tooltip.hide()})}createButton(t,e="fa-download"){const n=$("
").attr("id",t).addClass("btn btn-default").appendTo(this.bar);return $("").addClass(`fa ${e}`).appendTo(n),this.buttons[t]=n,n}attachTooltip(t){this.tooltip=t}downloadSvg(t,e,n){let r=$($($(`${"#"+t}`))[0]),a=r.clone().attr("version","1.1").attr("xmlns","http://www.w3.org/2000/svg"),i=function(t){for(var e="",n=document.styleSheets,r=0;r0&&(e+=o.selectorText+" { "+o.style.cssText+" }\n")}}}catch(t){if("SecurityError"!==t.name)throw t;continue}var s=document.createElement("style");return s.setAttribute("type","text/css"),s.innerHTML="",s}(r.get());a.prepend(i),$("#"+n).html("").hide();let o=$(`#${n}`).append(a).html(),c=new Blob([o],{type:"image/svg+xml"});saveAs(c,e),$(`#${n}`).html("").hide()}}class fi{constructor(t,e=!1,n=30,r=-40,a=100){this.id=t,this.verbose=e,this.offsetX=n,this.offsetY=r,this.duration=a}show(t){this.verbose&&console.log(t),this.edit(t),this.move(),O("#"+this.id).style("display","inline").transition().duration(this.duration).style("opacity",1)}hide(){O("#"+this.id).transition().duration(this.duration).style("opacity",0),this.edit("")}move(t=U.pageX,e=U.pageY){this.verbose&&(console.log(t),console.log(e)),t+=this.offsetX,e=e+this.offsetY<0?10:e+this.offsetY;O("#"+this.id).style("left",`${t}px`).style("top",`${e}px`)}edit(t){O("#"+this.id).html(t)}}class li{constructor(t,e=!0,n=10,r="YlGnBu",a=2,i="heatmapTooltip"){this.data=t,this.useLog=e,this.logBase=n,this.nullColor="#e6e6e6",this.colorScale=void 0,this.xList=void 0,this.yList=void 0,this.xScale=void 0,this.yScale=void 0,this.r=a,this.colorScheme=r,0==$(`#${i}`).length&&$("
").attr("id",i).appendTo($("body")),this.tooltip=new fi(i),O(`#${i}`).classed("heatmap-tooltip",!0),this.toolbar=void 0}createToolbar(t,e){return this.toolbar=new si(t,e),this.toolbar}drawColorLegend(t,e={x:0,y:0},n=5){!function(t,e,n,r,a,i=10,o=10,c={h:10,w:40},s="h"){let f=[...Array(i+1).keys()],l=n.domain()[1]/i;const u=f.map(t=>t*l),h=e.append("g").attr("transform",`translate(${r.x}, ${r.y})`).selectAll(".legend").data(u).enter().append("g").classed("legend",!0);"h"==s?(e.append("text").attr("class","color-legend").text(t).attr("x",-10).attr("text-anchor","end").attr("y",c.h).attr("transform",`translate(${r.x}, ${r.y})`),h.append("rect").attr("x",(t,e)=>c.w*e).attr("y",5).attr("width",c.w).attr("height",c.h).style("fill",n),h.append("text").attr("class","color-legend").text(t=>a?Math.pow(o,t).toPrecision(2):t.toPrecision(2)).attr("x",(t,e)=>c.w*e).attr("y",0)):(e.append("text").attr("class","color-legend").text(t).attr("x",5).attr("text-anchor","start").attr("y",0).attr("transform",`translate(${r.x}, ${r.y+c.h*u.length})rotate(90)`),h.append("rect").attr("x",0).attr("y",(t,e)=>c.h*e).attr("width",c.w).attr("height",c.h).style("fill",n),h.append("text").attr("class","color-legend").text(t=>a?(Math.pow(o,t)-1).toPrecision(2):t.toPrecision(2)).attr("x",15).attr("y",(t,e)=>c.h*e+c.h/2))}(this.data[0].unit||"Value",t,this.colorScale,e,this.useLog,n,this.logBase)}redraw(t,e,n,r={w:1e3,h:1e3},a=30){this._setXList(r.w,e),this._setYList(r.h,n),this.draw(t,r,a)}log(t){return 2==this.logBase?Math.log2(Number(t+1)):Math.log10(Number(t+1))}draw(t,e={w:1e3,h:600},n=30,r=!0,a=null){if(void 0===this.xList&&this._setXList(e.w),void 0===this.yList&&this._setYList(e.h),void 0===this.colorScale){let t=this.useLog,e=this.data.map(e=>t?this.log(e.value):e.value);this.colorScale=ci(e,this.colorScheme)}const i=t.selectAll(".exp-map-xlabel").data(this.xList),o=null==a?this.yScale.range()[1]+2*this.yScale.bandwidth():this.yScale.range()[1]+a;i.attr("transform",t=>{return`translate(${this.xScale(t)+5}, ${o}) rotate(${n})`}),i.enter().append("text").attr("class",(t,e)=>`exp-map-xlabel x${e}`).attr("x",0).attr("y",0).style("text-anchor","start").style("cursor","default").attr("transform",t=>{return`translate(${this.xScale(t)+5}, ${o}) rotate(${n})`}).merge(i).text(t=>t),i.exit().remove();t.selectAll(".exp-map-ylabel").data(this.yList).enter().append("text").text(t=>t).attr("x",this.xScale.range()[1]+5).attr("y",t=>this.yScale(t)+10).attr("class",(t,e)=>`exp-map-ylabel y${e}`).style("text-anchor","start").style("cursor","default").on("click",t=>{alert(`${t} is clicked. To be implemented`)}).on("mouseover",function(t){O(this).classed("normal",!1).classed("highlighted",!0)}).on("mouseout",function(t){O(this).classed("normal",!0).classed("highlighted",!1)});const c=t.selectAll(".exp-map-cell").data(this.data,t=>t.value);c.attr("x",t=>this.xScale(t.x)).attr("y",t=>this.yScale(t.y)).attr("row",t=>`x${this.xList.indexOf(t.x)}`).attr("col",t=>`y${this.yList.indexOf(t.y)}`);const s=this;c.enter().append("rect").attr("row",t=>`x${this.xList.indexOf(t.x)}`).attr("col",t=>`y${this.yList.indexOf(t.y)}`).attr("x",t=>this.xScale(t.x)).attr("y",t=>this.yScale(t.y)).attr("rx",this.r).attr("ry",this.r).attr("class",t=>"exp-map-cell").attr("width",this.xScale.bandwidth()).attr("height",this.yScale.bandwidth()).style("fill",t=>"#eeeeee").on("mouseover",function(e){const n=O(this);s.cellMouseover(e,t,n)}).on("mouseout",function(t){O(this);s.cellMouseout()}).merge(c).style("fill",t=>r&&0==t.value?"#DDDDDD":this.useLog?this.colorScale(this.log(t.value)):this.colorScale(t.value)),c.exit().remove()}cellMouseout(t){q("*").classed("highlighted",!1),this.tooltip.hide()}cellMouseover(t,e,n){const r=n.attr("row"),a=n.attr("col");e.selectAll(".exp-map-xlabel").filter(`.${r}`).classed("highlighted",!0),e.selectAll(".exp-map-ylabel").filter(`.${a}`).classed("highlighted",!0),n.classed("highlighted",!0);const i=void 0===t.displayValue?parseFloat(t.value.toExponential()).toPrecision(4):t.displayValue;this.tooltip.show(`Column: ${t.x}
Row: ${t.y}
Value: ${i}`)}_setXList(t,e){this.xList=void 0!==e?e:yt().key(t=>t.x).entries(this.data).map(t=>t.key),this.xScale=Nt().domain(this.xList).range([0,t]).padding(.05)}_setYList(t,e){this.yList=void 0!==e?e:yt().key(t=>t.y).entries(this.data).map(t=>t.key),this.yScale=Nt().domain(this.yList).range([0,t]).padding(.05)}}class ui{constructor(t=window.innerWidth,e=100,n=100,r={top:50,right:250,bottom:170,left:10},a=12,i=10){this.margin=r,this.rootW=t,this.leftTreePanel={x:r.left,y:r.top+n,h:void 0,w:e-i,id:"leftTree"},this.cell={w:void 0,h:a},this.topTreePanel={x:r.left+e,y:r.top,h:n-i,w:this.rootW-(r.left+e+r.right),id:"topTree"},this.heatmapPanel={x:r.left+e,y:r.top+n,h:this.leftTreePanel.h,w:this.topTreePanel.w,id:"heatmap"},this.legendPanel={x:r.left+e,y:0,h:r.top/2,w:this.topTreePanel.w,cell:{w:60},id:"legend"}}get(){return{margin:this.margin,cell:this.cell,w:this.rootW,h:this.margin.top+this.topTreePanel.h+this.legendPanel.h+this.margin.bottom,panels:{top:this.topTreePanel,left:this.leftTreePanel,main:this.heatmapPanel,legend:this.legendPanel}}}}function hi(t){var e=0,n=t.children,r=n&&n.length;if(r)for(;--r>=0;)e+=n[r].value;else e=1;t.value=e}function di(t,e){var n,r,a,i,o,c=new mi(t),s=+t.value&&(c.value=t.value),f=[c];for(null==e&&(e=bi);n=f.pop();)if(s&&(n.value=+n.data.value),(a=e(n.data))&&(o=a.length))for(n.children=new Array(o),i=o-1;i>=0;--i)f.push(r=n.children[i]=new mi(a[i])),r.parent=n,r.depth=n.depth+1;return c.eachBefore(gi)}function bi(t){return t.children}function pi(t){t.data=t.data.data}function gi(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function mi(t){this.data=t,this.depth=this.height=0,this.parent=null}mi.prototype=di.prototype={constructor:mi,count:function(){return this.eachAfter(hi)},each:function(t){var e,n,r,a,i=this,o=[i];do{for(e=o.reverse(),o=[];i=e.pop();)if(t(i),n=i.children)for(r=0,a=n.length;r=0;--n)a.push(e[n]);return this},sum:function(t){return this.eachAfter(function(e){for(var n=+t(e.data)||0,r=e.children,a=r&&r.length;--a>=0;)n+=r[a].value;e.value=n})},sort:function(t){return this.eachBefore(function(e){e.children&&e.children.sort(t)})},path:function(t){for(var e=this,n=function(t,e){if(t===e)return t;var n=t.ancestors(),r=e.ancestors(),a=null;for(t=n.pop(),e=r.pop();t===e;)a=t,t=n.pop(),e=r.pop();return a}(e,t),r=[e];e!==n;)e=e.parent,r.push(e);for(var a=r.length;t!==n;)r.splice(a,0,t),t=t.parent;return r},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){var t=[];return this.each(function(e){t.push(e)}),t},leaves:function(){var t=[];return this.eachBefore(function(e){e.children||t.push(e)}),t},links:function(){var t=this,e=[];return t.each(function(n){n!==t&&e.push({source:n.parent,target:n})}),e},copy:function(){return di(this).eachBefore(pi)}};var yi=Array.prototype.slice,vi=function(t){return t},xi=1,wi=2,_i=3,Mi=4,Ti=1e-6;function Si(t){return"translate("+(t+.5)+",0)"}function Ai(t){return"translate(0,"+(t+.5)+")"}function Ni(){return!this.__axis}function ki(t,e){var n=[],r=null,a=null,i=6,o=6,c=3,s=t===xi||t===Mi?-1:1,f=t===Mi||t===wi?"x":"y",l=t===xi||t===_i?Si:Ai;function u(u){var h=null==r?e.ticks?e.ticks.apply(e,n):e.domain():r,d=null==a?e.tickFormat?e.tickFormat.apply(e,n):vi:a,b=Math.max(i,0)+c,p=e.range(),g=+p[0]+.5,m=+p[p.length-1]+.5,y=(e.bandwidth?function(t){var e=Math.max(0,t.bandwidth()-1)/2;return t.round()&&(e=Math.round(e)),function(n){return+t(n)+e}}:function(t){return function(e){return+t(e)}})(e.copy()),v=u.selection?u.selection():u,x=v.selectAll(".domain").data([null]),w=v.selectAll(".tick").data(h,e).order(),_=w.exit(),M=w.enter().append("g").attr("class","tick"),T=w.select("line"),S=w.select("text");x=x.merge(x.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),w=w.merge(M),T=T.merge(M.append("line").attr("stroke","currentColor").attr(f+"2",s*i)),S=S.merge(M.append("text").attr("fill","currentColor").attr(f,s*b).attr("dy",t===xi?"0em":t===_i?"0.71em":"0.32em")),u!==v&&(x=x.transition(u),w=w.transition(u),T=T.transition(u),S=S.transition(u),_=_.transition(u).attr("opacity",Ti).attr("transform",function(t){return isFinite(t=y(t))?l(t):this.getAttribute("transform")}),M.attr("opacity",Ti).attr("transform",function(t){var e=this.parentNode.__axis;return l(e&&isFinite(e=e(t))?e:y(t))})),_.remove(),x.attr("d",t===Mi||t==wi?o?"M"+s*o+","+g+"H0.5V"+m+"H"+s*o:"M0.5,"+g+"V"+m:o?"M"+g+","+s*o+"V0.5H"+m+"V"+s*o:"M"+g+",0.5H"+m),w.attr("opacity",1).attr("transform",function(t){return l(y(t))}),T.attr(f+"2",s*i),S.attr(f,s*b).text(d),v.filter(Ni).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===wi?"start":t===Mi?"end":"middle"),v.each(function(){this.__axis=y})}return u.scale=function(t){return arguments.length?(e=t,u):e},u.ticks=function(){return n=yi.call(arguments),u},u.tickArguments=function(t){return arguments.length?(n=null==t?[]:yi.call(t),u):n.slice()},u.tickValues=function(t){return arguments.length?(r=null==t?null:yi.call(t),u):r&&r.slice()},u.tickFormat=function(t){return arguments.length?(a=t,u):a},u.tickSize=function(t){return arguments.length?(i=o=+t,u):i},u.tickSizeInner=function(t){return arguments.length?(i=+t,u):i},u.tickSizeOuter=function(t){return arguments.length?(o=+t,u):o},u.tickPadding=function(t){return arguments.length?(c=+t,u):c},u}function Ei(t){return ki(_i,t)}function Ci(t){return ki(Mi,t)}const $i=!1;class Li{constructor(t,e="h"){this.newick=t,this.orientation=e,this.postorder=[],this.root=di(function(t){for(var e=[],n={},r=t.split(/\s*(;|\(|\)|,|:)\s*/),a=0;at.branchset).sum(t=>t.branchset?0:1).sort((t,e)=>t.value-e.value||t.data.length-e.data.length),this.leaves=this.root.leaves().sort((t,e)=>t.value-e.value||W(t.data.length,e.data.length)),this.width=void 0,this.height=void 0,this.xScale=void 0,this.yScale=void 0}draw(t,e,n){this.width=e,this.height=n,this._setXScale(),this._setYScale(),"h"==this.orientation?this._drawHTree(t):this._drawVTree(t)}_drawHTree(t){const e=t=>{void 0===t.children?t.y=this.yScale(t.data.name):t.y=t.children.reduce((t,e)=>t+e.y,0)/t.children.length},n=t=>{t.x=this.xScale(this._getBranchLengthToRoot(t))},r=this._sortNodesByLevel();r.forEach(t=>{n(t),e(t)}),t.selectAll(".branch").data(r).enter().append("line").attr("x1",t=>t.x).attr("x2",t=>t.data.length?t.x-this.xScale(t.data.length):t.x).attr("y1",t=>t.y+this.yScale.bandwidth()/2).attr("y2",t=>t.y+this.yScale.bandwidth()/2).attr("stroke","gray").attr("stroke-width",1);const a=this.root.descendants().filter(t=>t.height).sort((t,e)=>e.height-t.height);t.selectAll(".arm").data(a).enter().append("line").attr("x1",t=>t.x).attr("x2",t=>t.x).attr("y1",t=>t.children[0].y+this.yScale.bandwidth()/2).attr("y2",t=>t.children[1].y+this.yScale.bandwidth()/2).attr("stroke","gray").attr("stroke-width",1),t.selectAll(".node").data(a).enter().append("circle").attr("cx",t=>t.x).attr("cy",t=>t.y+this.yScale.bandwidth()/2).attr("r",2).attr("fill","#333").attr("opacity",.5).attr("class","dendrogram-node").on("mouseover",function(t){d3.select(this).attr("r",3),console.log(t.leaves())}).on("mouseout",function(t){d3.select(this).attr("r",2)}),t.append("g").attr("class","dendrogram-axis").attr("transform","translate(0,"+this.height+")").call(Ei(this.xScale).ticks(3))}_sortNodesByLevel(){return this.root.descendants().sort((t,e)=>t.height-e.height||W(t.data.length,e.data.length))}_drawVTree(t){const e=t=>{void 0===t.children?t.x=this.xScale(t.data.name):t.x=t.children.reduce((t,e)=>t+e.x,0)/t.children.length},n=t=>{t.y=this.yScale(this._getBranchLengthToRoot(t))},r=this._sortNodesByLevel();r.forEach(t=>{e(t),n(t)}),t.selectAll(".branch").data(r).enter().append("line").attr("y1",t=>t.y).attr("y2",t=>t.data.length?t.y-this.yScale(t.data.length):t.y).attr("x1",t=>t.x+this.xScale.bandwidth()/2).attr("x2",t=>t.x+this.xScale.bandwidth()/2).attr("stroke","gray").attr("stroke-width",1);const a=this.root.descendants().filter(t=>t.height).sort((t,e)=>e.height-t.height);t.selectAll(".arm").data(a).enter().append("line").attr("y1",t=>t.y).attr("y2",t=>t.y).attr("x1",t=>t.children[0].x+this.xScale.bandwidth()/2).attr("x2",t=>t.children[1].x+this.xScale.bandwidth()/2).attr("stroke","gray").attr("stroke-width",1),t.selectAll(".node").data(a).enter().append("circle").attr("cx",t=>t.x+this.xScale.bandwidth()/2).attr("cy",t=>t.y).attr("r",2).attr("fill","#333").attr("opacity",.5).attr("class","dendrogram-node").on("mouseover",function(t){d3.select(this).attr("r",3),console.log(t.leaves())}).on("mouseout",function(t){d3.select(this).attr("r",2)}),t.append("g").attr("class","dendrogram-axis").call(Ci(this.yScale).ticks(3))}_getBranchLengthToRoot(t){return t.path(this.root).reduce((t,e)=>e.data.length?t+e.data.length:t,0)}_getMaxBranchLength(){let t=this.leaves[0];return this._getBranchLengthToRoot(t)}_assignPostorder(t){return void 0===t.children?void this.postorder.push(t):(this._assignPostorder(t.children[0]),void this._assignPostorder(t.children[1]))}_setXScale(){"h"==this.orientation?this.xScale=xn().domain([0,this._getMaxBranchLength()]).range([0,this.width]):(this._assignPostorder(this.root),$i&&console.log(this.postorder),this.xScale=Nt().domain(this.postorder.map(t=>t.data.name)).range([0,this.width]).padding(.05))}_setYScale(){"h"==this.orientation?(this._assignPostorder(this.root),$i&&console.log(this.postorder),this.yScale=Nt().domain(this.postorder.map(t=>t.data.name)).range([0,this.height]).padding(.05)):this.yScale=xn().domain([0,this._getMaxBranchLength()]).range([0,this.height])}}class Di{constructor(t,e,n,r="YlGnBu",a=2,i=new ui,o="dmapTooltip",c=!0,s=10,f=""){this.config=i.get(),t=void 0===t||t.startsWith("Not enough data")?void 0:t,e=void 0===e||e.startsWith("Not enough data")?void 0:e,this.data={columnTree:t,rowTree:e,heatmap:n,external:void 0},this.objects={columnTree:void 0===this.data.columnTree?void 0:new Li(this.data.columnTree,"v"),rowTree:void 0===this.data.rowTree?void 0:new Li(this.data.rowTree,"h"),heatmap:new li(this.data.heatmap,c,s,r,a,o)},this.visualComponents={svg:void 0,columnTree:void 0,rowTree:void 0},this.title=f,this.toolbar=void 0,this.tooltip=this.objects.heatmap.tooltip}createToolbar(t,e){return this.toolbar=new si(t,e),this.toolbar}render(t,e,n=!0,r=!0,a="top",i=5){this._updateConfig(a),this.visualComponents.svg=bt(t,this.config.w,this.config.h,this.config.margin,e);let o=void 0,c=void 0;n&&void 0!==this.objects.columnTree&&(this.visualComponents.columnTree=this._renderTree("column",this.objects.columnTree,this.config.panels.top),o=this.objects.columnTree.xScale.domain()),r&&void 0!==this.objects.rowTree&&(this.visualComponents.rowTree=this._renderTree("row",this.objects.rowTree,this.config.panels.left),c=this.objects.rowTree.yScale.domain()),""!=this.title&&(console.log(this.title),O(`#${t}-svg`).append("text").attr("x",0).attr("y",20).text(this.title)),this._renderHeatmap(this.objects.heatmap,o,c,i)}_renderTree(t,e,n){let r=this.visualComponents.svg;const a="row"==t?".exp-map-ylabel":".exp-map-xlabel",i=r.append("g").attr("id",n.id).attr("transform",`translate(${n.x}, ${n.y})`);e.draw(i,n.w,n.h);return i.selectAll(".dendrogram-node").on("mouseover",function(t){O(this).attr("r",6).attr("fill","red");let e=t.leaves().map(t=>t.data.name);r.selectAll(a).filter(t=>e.includes(t)).classed("highlighted",!0),r.selectAll(".leaf-color").filter(t=>e.includes(t)).classed("highlighted",!0)}).on("mouseout",function(){O(this).attr("r",2).attr("fill","#333"),r.selectAll(a).classed("highlighted",!1),r.selectAll(".leaf-color").classed("highlighted",!1)}),i}_renderHeatmap(t,e,n,r=5){let a=this.visualComponents.svg;const i=this.config.panels.main,o=a.append("g").attr("id",i.id).attr("transform",`translate(${i.x}, ${i.y})`);t.redraw(o,e,n,{w:i.w,h:i.h}),t.drawColorLegend(a,this.config.panels.legend,r)}_updateConfig(t){const e=void 0===this.objects.rowTree?1:this.objects.rowTree.leaves.length;this.config.panels.left.h=this.config.cell.h*e<20?20:this.config.cell.h*e,this.config.h+=this.config.panels.left.h,this.config.panels.main.h=this.config.panels.left.h,"bottom"==t&&(this.config.panels.legend.y+=this.config.panels.main.h+this.config.panels.main.x+50)}}var Pi=Math.PI,Ii=2*Pi,Ui=Ii-1e-6;function zi(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function Yi(){return new zi}zi.prototype=Yi.prototype={constructor:zi,moveTo:function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},quadraticCurveTo:function(t,e,n,r){this._+="Q"+ +t+","+ +e+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function(t,e,n,r,a,i){this._+="C"+ +t+","+ +e+","+ +n+","+ +r+","+(this._x1=+a)+","+(this._y1=+i)},arcTo:function(t,e,n,r,a){t=+t,e=+e,n=+n,r=+r,a=+a;var i=this._x1,o=this._y1,c=n-t,s=r-e,f=i-t,l=o-e,u=f*f+l*l;if(a<0)throw new Error("negative radius: "+a);if(null===this._x1)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(u>1e-6)if(Math.abs(l*c-s*f)>1e-6&&a){var h=n-i,d=r-o,b=c*c+s*s,p=h*h+d*d,g=Math.sqrt(b),m=Math.sqrt(u),y=a*Math.tan((Pi-Math.acos((b+u-p)/(2*g*m)))/2),v=y/m,x=y/g;Math.abs(v-1)>1e-6&&(this._+="L"+(t+v*f)+","+(e+v*l)),this._+="A"+a+","+a+",0,0,"+ +(l*h>f*d)+","+(this._x1=t+x*c)+","+(this._y1=e+x*s)}else this._+="L"+(this._x1=t)+","+(this._y1=e);else;},arc:function(t,e,n,r,a,i){t=+t,e=+e;var o=(n=+n)*Math.cos(r),c=n*Math.sin(r),s=t+o,f=e+c,l=1^i,u=i?r-a:a-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+s+","+f:(Math.abs(this._x1-s)>1e-6||Math.abs(this._y1-f)>1e-6)&&(this._+="L"+s+","+f),n&&(u<0&&(u=u%Ii+Ii),u>Ui?this._+="A"+n+","+n+",0,1,"+l+","+(t-o)+","+(e-c)+"A"+n+","+n+",0,1,"+l+","+(this._x1=s)+","+(this._y1=f):u>1e-6&&(this._+="A"+n+","+n+",0,"+ +(u>=Pi)+","+l+","+(this._x1=t+n*Math.cos(a))+","+(this._y1=e+n*Math.sin(a))))},rect:function(t,e,n,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}};var Bi=function(t){return function(){return t}};function ji(t){this._context=t}ji.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}};var Fi=function(t){return new ji(t)};function Vi(t){return t[0]}function Gi(t){return t[1]}var Hi=function(){var t=Vi,e=Gi,n=Bi(!0),r=null,a=Fi,i=null;function o(o){var c,s,f,l=o.length,u=!1;for(null==r&&(i=a(f=Yi())),c=0;c<=l;++c)!(c=l;--u)c.point(g[u],m[u]);c.lineEnd(),c.areaEnd()}p&&(g[f]=+t(h,f,s),m[f]=+n(h,f,s),c.point(e?+e(h,f,s):g[f],r?+r(h,f,s):m[f]))}if(d)return c=null,d+""||null}function f(){return Hi().defined(a).curve(o).context(i)}return s.x=function(n){return arguments.length?(t="function"==typeof n?n:Bi(+n),e=null,s):t},s.x0=function(e){return arguments.length?(t="function"==typeof e?e:Bi(+e),s):t},s.x1=function(t){return arguments.length?(e=null==t?null:"function"==typeof t?t:Bi(+t),s):e},s.y=function(t){return arguments.length?(n="function"==typeof t?t:Bi(+t),r=null,s):n},s.y0=function(t){return arguments.length?(n="function"==typeof t?t:Bi(+t),s):n},s.y1=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:Bi(+t),s):r},s.lineX0=s.lineY0=function(){return f().x(t).y(n)},s.lineY1=function(){return f().x(t).y(r)},s.lineX1=function(){return f().x(e).y(n)},s.defined=function(t){return arguments.length?(a="function"==typeof t?t:Bi(!!t),s):a},s.curve=function(t){return arguments.length?(o=t,null!=i&&(c=o(i)),s):o},s.context=function(t){return arguments.length?(null==t?i=c=null:c=o(i=t),s):i},s};function Ri(t,e,n){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-n),t._x2,t._y2)}function Xi(t,e){this._context=t,this._k=(1-e)/6}Xi.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Ri(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:Ri(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var qi=function t(e){function n(t){return new Xi(t,e)}return n.tension=function(e){return t(+e)},n}(0);function Wi(t){return t<0?-1:1}function Zi(t,e,n){var r=t._x1-t._x0,a=e-t._x1,i=(t._y1-t._y0)/(r||a<0&&-0),o=(n-t._y1)/(a||r<0&&-0),c=(i*a+o*r)/(r+a);return(Wi(i)+Wi(o))*Math.min(Math.abs(i),Math.abs(o),.5*Math.abs(c))||0}function Ki(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function Qi(t,e,n){var r=t._x0,a=t._y0,i=t._x1,o=t._y1,c=(i-r)/3;t._context.bezierCurveTo(r+c,a+c*e,i-c,o-c*n,i,o)}function Ji(t){this._context=t}function to(t){this._context=t}Ji.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Qi(this,this._t0,Ki(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var n=NaN;if(e=+e,(t=+t)!==this._x1||e!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,Qi(this,Ki(this,n=Zi(this,t,e)),n);break;default:Qi(this,this._t0,n=Zi(this,t,e))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=n}}},(function(t){this._context=new to(t)}.prototype=Object.create(Ji.prototype)).point=function(t,e){Ji.prototype.point.call(this,e,t)},to.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,n,r,a,i){this._context.bezierCurveTo(e,t,r,n,i,a)}};var eo=function(){U.preventDefault(),U.stopImmediatePropagation()},no=function(t){var e=t.document.documentElement,n=O(t).on("dragstart.drag",eo,!0);"onselectstart"in e?n.on("selectstart.drag",eo,!0):(e.__noselect=e.style.MozUserSelect,e.style.MozUserSelect="none")};var ro=function(t){return function(){return t}},ao=function(t,e,n){this.target=t,this.type=e,this.selection=n};function io(){U.stopImmediatePropagation()}var oo=function(){U.preventDefault(),U.stopImmediatePropagation()},co={name:"drag"},so={name:"space"},fo={name:"handle"},lo={name:"center"},uo={name:"x",handles:["e","w"].map(xo),input:function(t,e){return t&&[[t[0],e[0][1]],[t[1],e[1][1]]]},output:function(t){return t&&[t[0][0],t[1][0]]}},ho={name:"y",handles:["n","s"].map(xo),input:function(t,e){return t&&[[e[0][0],t[0]],[e[1][0],t[1]]]},output:function(t){return t&&[t[0][1],t[1][1]]}},bo={name:"xy",handles:["n","e","s","w","nw","ne","se","sw"].map(xo),input:function(t){return t},output:function(t){return t}},po={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},go={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},mo={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},yo={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},vo={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1};function xo(t){return{type:t}}function wo(){return!U.button}function _o(){var t=this.ownerSVGElement||this;return[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]}function Mo(t){for(;!t.__brush;)if(!(t=t.parentNode))return;return t.__brush}function To(t){return t[0][0]===t[1][0]||t[0][1]===t[1][1]}var So=function(){return function(t){var e,n=_o,r=wo,a=na(o,"start","brush","end"),i=6;function o(e){var n=e.property("__brush",u).selectAll(".overlay").data([xo("overlay")]);n.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",po.overlay).merge(n).each(function(){var t=Mo(this).extent;O(this).attr("x",t[0][0]).attr("y",t[0][1]).attr("width",t[1][0]-t[0][0]).attr("height",t[1][1]-t[0][1])}),e.selectAll(".selection").data([xo("selection")]).enter().append("rect").attr("class","selection").attr("cursor",po.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var r=e.selectAll(".handle").data(t.handles,function(t){return t.type});r.exit().remove(),r.enter().append("rect").attr("class",function(t){return"handle handle--"+t.type}).attr("cursor",function(t){return po[t.type]}),e.each(c).attr("fill","none").attr("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush touchstart.brush",l)}function c(){var t=O(this),e=Mo(this).selection;e?(t.selectAll(".selection").style("display",null).attr("x",e[0][0]).attr("y",e[0][1]).attr("width",e[1][0]-e[0][0]).attr("height",e[1][1]-e[0][1]),t.selectAll(".handle").style("display",null).attr("x",function(t){return"e"===t.type[t.type.length-1]?e[1][0]-i/2:e[0][0]-i/2}).attr("y",function(t){return"s"===t.type[0]?e[1][1]-i/2:e[0][1]-i/2}).attr("width",function(t){return"n"===t.type||"s"===t.type?e[1][0]-e[0][0]+i:i}).attr("height",function(t){return"e"===t.type||"w"===t.type?e[1][1]-e[0][1]+i:i})):t.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function s(t,e){return t.__brush.emitter||new f(t,e)}function f(t,e){this.that=t,this.args=e,this.state=t.__brush,this.active=0}function l(){if(U.touches){if(U.changedTouches.length0&&(n=a-d),_<0?u=h-b:_>0&&(i=o-b),x=so,I.attr("cursor",po.selection),B());break;default:return}oo()},!0).on("keyup.brush",function(){switch(U.keyCode){case 16:C&&(g=m=C=!1,B());break;case 18:x===lo&&(w<0?f=l:w>0&&(n=a),_<0?u=h:_>0&&(i=o),x=fo,B());break;case 32:x===so&&(U.altKey?(w&&(f=l-d*w,n=a+d*w),_&&(u=h-b*_,i=o+b*_),x=lo):(w<0?f=l:w>0&&(n=a),_<0?u=h:_>0&&(i=o),x=fo),I.attr("cursor",po[v]),B());break;default:return}oo()},!0).on("mousemove.brush",Y,!0).on("mouseup.brush",j,!0);no(U.view)}io(),Ya(y),c.call(y),D.start()}function Y(){var t=X(y);!C||g||m||(Math.abs(t[0]-L[0])>Math.abs(t[1]-L[1])?m=!0:g=!0),L=t,p=!0,oo(),B()}function B(){var t;switch(d=L[0]-$[0],b=L[1]-$[1],x){case so:case co:w&&(d=Math.max(A-n,Math.min(k-f,d)),a=n+d,l=f+d),_&&(b=Math.max(N-i,Math.min(E-u,b)),o=i+b,h=u+b);break;case fo:w<0?(d=Math.max(A-n,Math.min(k-n,d)),a=n+d,l=f):w>0&&(d=Math.max(A-f,Math.min(k-f,d)),a=n,l=f+d),_<0?(b=Math.max(N-i,Math.min(E-i,b)),o=i+b,h=u):_>0&&(b=Math.max(N-u,Math.min(E-u,b)),o=i,h=u+b);break;case lo:w&&(a=Math.max(A,Math.min(k,n-d*w)),l=Math.max(A,Math.min(k,f+d*w))),_&&(o=Math.max(N,Math.min(E,i-b*_)),h=Math.max(N,Math.min(E,u+b*_)))}l{t.selectAll("*").remove(),this.render(t,e,n,r,a,i,o,c,s,f,l,u,h)}),void 0===i||0==i.length){let t=[];this.data.forEach(e=>t=t.concat(e.values)),i=et(t)}this.groups=yt().key(t=>t.group).entries(this.data),this.scale={x:Nt().rangeRound([0,e]).domain(a||this.groups.map(t=>t.key)).paddingInner(r),subx:Nt(),y:xn().rangeRound([n,0]).domain(i),z:xn()},this.groups.forEach(e=>{let r=e.key,a=e.values,o=this.groupInfo[r];if(e.index=this.scale.x.domain().indexOf(r),void 0!==o){t.append("g").selectAll(".violin-group-label").data(["pvalue"]).enter().append("text").attr("x",0).attr("y",0).attr("class","violin-group-label").attr("fill",t=>"pvalue"==t&&parseFloat(o[t])<=parseFloat(o.pvalueThreshold)?"orangered":"SlateGray").attr("transform",(t,e)=>{return`translate(${this.scale.x(r)+this.scale.x.bandwidth()/2}, ${this.scale.y(i[0])+50})`}).text(t=>`${t}: ${parseFloat(parseFloat(o[t]).toPrecision(3)).toExponential()}`)}this.scale.subx.domain(a.map(t=>t.label)).rangeRound([this.scale.x(r),this.scale.x(r)+this.scale.x.bandwidth()]),a.forEach(n=>{0!=n.values.length&&(n.values=n.values.sort(W),this._drawViolin(t,n,l,e.index))});var c=15;if(d){const e=Nt().domain(a.map(t=>void 0==t.size?"(0)":`(${t.size||0})`)).rangeRound([this.scale.x(r),this.scale.x(r)+this.scale.x.bandwidth()]);t.append("g").attr("class","violin-size-axis").attr("transform",`translate(0, ${n+c})`).call(Ei(e))}if(s){c=5;const e=t.append("g").attr("class","violin-sub-axis").attr("transform",`translate(0, ${n+c})`).call(Ei(this.scale.subx));f>0&&e.selectAll("text").style("text-anchor","start").attr("transform",`rotate(${f}, 2, 10)`)}});let b=s?55:0;if(this.xAxis=c?Ei(this.scale.x):Ei(this.scale.x).tickFormat(""),t.append("g").attr("class","violin-x-axis axis--x").attr("transform",`translate(0, ${n+b})`).call(this.xAxis).selectAll("text").style("text-anchor","start").attr("transform","rotate(30, -10, 10)"),b=5,this.yAxis=Ci(this.scale.y).tickValues(this.scale.y.ticks(5)),t.append("g").attr("class","violin-y-axis axis--y").attr("transform",`translate(-${b}, 0)`).call(this.yAxis),t.append("text").attr("y",-40).attr("x",-40).attr("class","violin-axis-label").attr("text-anchor","start").attr("transform","rotate(-90)").text(o),t.on("mouseout",()=>{void 0!==this.tooltip&&this.tooltip.hide()}),u&&this._addGroupDivider(t),h){const e=t.append("g").attr("id","violinLegend").attr("transform","translate(0, 0)");e.append("rect").attr("x",this.scale.x.range()[0]).attr("y",-35).attr("width",60*this.groups[0].values.length+10).attr("height",24).style("fill","none").style("stroke","silver");const n=e.selectAll(".violin-legend").data(this.groups[0].values).enter().append("g").classed("violin-legend",!0),r=10;n.append("rect").attr("x",(t,e)=>5+60*e+this.scale.x.range()[0]).attr("y",-28).attr("width",r).attr("height",r).style("fill",t=>t.color),n.append("text").attr("class","violin-legend-text").text(t=>t.label).attr("x",(t,e)=>17+60*e+this.scale.x.range()[0]).attr("y",-20)}}createTooltip(t){return 0==$(`#${t}`).length&&$("
").attr("id",t).appendTo($("body")),this.tooltip=new fi(t),O(`#${t}`).classed("violin-tooltip",!0),this.tooltip}createToolbar(t,e){return this.toolbar=new si(t,e),this.toolbar}addBrush(t){const e=So();e.on("end",()=>{this.zoom(t,e)}),t.append("g").attr("class","brush").call(e)}zoom(t,e){let n,r=U.selection;if(void 0===e)this.reset();else if(r){this.scale.x.domain(this.scale.x.domain().filter((t,e)=>{const n=Math.floor(r[0][0]/this.scale.x.bandwidth()),a=Math.floor(r[1][0]/this.scale.x.bandwidth());return e>=n&&e<=a}));const n=Math.floor(this.scale.y.invert(r[1][1])),a=Math.floor(this.scale.y.invert(r[0][1]));this.scale.y.domain([n,a]),t.select(".brush").call(e.move,null)}else{if(!n)return n=setTimeout(function(){n=null},350);this.reset()}let a=t.transition().duration(750);t.select(".axis--x").transition(a).call(this.xAxis),t.select(".axis--y").transition(a).call(this.yAxis),this.groups.forEach((e,n)=>{let r=e.key,i=e.values;this.scale.subx.rangeRound([this.scale.x(r),this.scale.x(r)+this.scale.x.bandwidth()]),i.forEach(n=>{if(0==n.values.length)return;this.scale.x.domain().indexOf(r);this.scale.z.range([this.scale.subx(n.label),this.scale.subx(n.label)+this.scale.subx.bandwidth()]);const i=t.select(`#violin${e.index}-${n.label}`);i.select(".violin").transition(a).attr("d",Oi().x0(t=>this.scale.z(t[1])).x1(t=>this.scale.z(-t[1])).y(t=>this.scale.y(t[0])));const o=st(n.values,.25),c=st(n.values,.75);i.select(".violin-ir").transition(a).attr("x",this.scale.z(-.1)).attr("y",this.scale.y(c)).attr("width",Math.abs(this.scale.z(-.1)-this.scale.z(.1))).attr("height",Math.abs(this.scale.y(c)-this.scale.y(o)));const s=ut(n.values);i.select(".violin-median").transition(a).attr("x1",this.scale.z(-.1)).attr("x2",this.scale.z(.1)).attr("y1",this.scale.y(s)).attr("y2",this.scale.y(s))})})}_drawViolin(t,e,n,r){let a=function(t,e,n){return function(r){return e.map(e=>[e,lt(r,r=>t((e-r)/n))/n])}}(Ao.gaussian,this.scale.y.ticks(100),No.nrd(e.values));const i=et(e.values),o=a(e.values).filter(t=>t[0]>i[0]&&t[0]Math.abs(t[1]));this.scale.z.domain([-c,c]).range([this.scale.subx(e.label),this.scale.subx(e.label)+this.scale.subx.bandwidth()]);const s=t.append("g").attr("id",`violin${r}-${e.label}`);let f=Oi().x0(t=>this.scale.z(t[1])).x1(t=>this.scale.z(-t[1])).y(t=>this.scale.y(t[0]));const l=s.append("path").datum(o).attr("d",f).classed("violin",!0).style("fill",()=>void 0!==e.color?e.color:r%2==0?"#90c1c1":"#94a8b8"),u=st(e.values,.25),h=st(e.values,.75),d=this.scale.z.domain()[1]/3;if(n){const n=Math.abs(h-u),r=ft(e.values.filter(t=>tt>u-1.5*n));t.append("line").classed("whisker",!0).attr("x1",this.scale.z(0)).attr("x2",this.scale.z(0)).attr("y1",this.scale.y(r)).attr("y2",this.scale.y(a)).style("stroke","#fff")}s.append("rect").attr("x",this.scale.z(-d)).attr("y",this.scale.y(h)).attr("width",Math.abs(this.scale.z(-d)-this.scale.z(d))).attr("height",Math.abs(this.scale.y(h)-this.scale.y(u))).attr("class","violin-ir");const b=ut(e.values);s.append("line").attr("x1",this.scale.z(-d)).attr("x2",this.scale.z(d)).attr("y1",this.scale.y(b)).attr("y2",this.scale.y(b)).attr("class","violin-median"),s.on("mouseover",()=>{l.classed("highlighted",!0),void 0===this.tooltip?console.warn("GroupViolin Warning: tooltip not defined"):this.tooltip.show(e.group+"
"+e.label+"
Median: "+b.toPrecision(4)+"
")}),s.on("mouseout",()=>{l.classed("highlighted",!1)})}_sanityCheck(t){const e=["group","label","values"];t.forEach(t=>{e.forEach(e=>{if(void 0===t[e])throw"GroupedViolin: input data error."})})}_addGroupDivider(t){const e=this.scale.x.domain(),n=Math.abs(this.scale.x(this.scale.x.domain()[1])-this.scale.x(this.scale.x.domain()[0])-this.scale.x.bandwidth()),r=(t,r)=>r!==e.length-1?this.scale.x(t)+ +this.scale.x.bandwidth()+n/2:0;t.selectAll(".vline").data(e).enter().append("line").classed("vline",!0).attr("x1",r).attr("x2",r).attr("y1",this.scale.y.range()[0]).attr("y2",this.scale.y.range()[1]).style("stroke-width",(t,n)=>n!=e.length-1?1:0).style("stroke","rgb(86,98,107)").style("opacity",.5)}}class Eo{constructor(t,e,n,r,a=!1,i=1e3,o=0){this.gene=t,this.exons=e,"+"==this.gene.strand?this.exons.sort((t,e)=>Number(t.exonNumber)-Number(e.exonNumber)):this.exons.sort((t,e)=>Number(e.exonNumber)-Number(t.exonNumber)),this.exonsCurated=n.sort((t,e)=>Number(t.exonNumber)-Number(e.exonNumber)),this.junctions=r.sort((t,e)=>t.junctionIde.junctionId?1:0),this.isIsoform=a,this.maxIntronLength=i,this.intronLength=0,this.minExonWidth=o,this.nullColor="#DDDDDD"}changeTextlabel(t,e){t.selectAll("#modelInfo").text(e)}addData(t,e,n,r,a){void 0!==e&&t.selectAll(".junc").style("fill",n=>{const a=e.filter(t=>t.junctionId==n.junctionId)[0],i=0==a.value?this.nullColor:r(a.value);return t.selectAll(".junc-curve").filter(`.junc${n.junctionId}`).style("stroke",i),i}),t.selectAll(".exon-curated").style("fill",t=>{const e=n.filter(e=>e.exonId==t.exonId)[0];if(void 0===e)throw`${t.exonId} has no data`;return 0==e.value?this.nullColor:a(e.value)})}render(t,e){this.setXscale(e.w);const n=e.h/2;if(this.exons.forEach((t,e)=>{t.x=0==e?0:this.exons[e-1].x+this.exons[e-1].w+this.xScale(t.intronLength>this.maxIntronLength?this.maxIntronLength:t.intronLength),t.w=this.xScale(t.length){if(t.oriExon=this._findExon(t.chromStart)||this._findExon(t.chromEnd),void 0!==t.oriExon){if(Number(t.oriExon.chromStart)==Number(t.chromStart))t.x=t.oriExon.x;else{const e=Number(t.chromStart)-Number(t.oriExon.chromStart)+1;t.x=t.oriExon.x+this.xScale(e)}void 0===t.length&&(t.length=Number(t.chromEnd)-Number(t.chromStart)+1),t.w=this.xScale(t.length)(t.startExon=this._findExon(t.chromStart),t.endExon=this._findExon(t.chromEnd),void 0!==t.startExon&&void 0!==t.endExon)),this.junctions.sort((t,e)=>+t.chromStart<+e.chromStart?-1:+t.chromStart>+e.chromStart?1:+t.chromEnd<+e.chromEnd?-1:+t.chromEnd>+e.chromEnd?1:0),this.junctions.forEach((t,e)=>{t.displayName=`Junction ${e+1}`;const r=Number(t.chromStart)-Number(t.startExon.chromStart)+1,a=Number(t.chromEnd)-Number(t.endExon.chromStart)+1;t.startX=t.startExon.x+this.xScale(r),t.endX=t.endExon.x+this.xScale(a),t.cx=t.startX+(t.endX-t.startX+1)/2,t.cy=n-15*(Math.abs(Number(t.endExon.exonNumber)-Number(t.startExon.exonNumber))+.5),t.cy<0&&(t.cy=0)});const e=this.junctions.reduce((t,e)=>(t[e.displayName]=1+t[e.displayName]||1,t),{});this.junctions.forEach(t=>{e[t.displayName]>1&&(t.cy-=15*Math.random())});const r=Hi().x(t=>t.x).y(t=>t.y).curve(qi);this.junctions.forEach((e,a)=>{t.append("path").datum([{x:e.startX,y:n},{x:e.cx,y:e.cy},{x:e.endX,y:n}]).attr("class",`junc-curve junc${e.junctionId}`).attr("d",r).style("stroke","#92bcc9")});const a=t.selectAll(".junc").data(this.junctions);a.attr("cx",t=>t.cx),a.attr("cy",t=>t.cy),a.enter().append("circle").attr("class",t=>`junc junc${t.junctionId}`).attr("cx",t=>t.cx).attr("cy",t=>t.cy).merge(a).attr("r",4).style("fill","rgb(86, 98, 107)");const i=t.selectAll(".exon").data(this.exons);i.attr("x",t=>t.x),i.attr("y",n),i.enter().append("rect").attr("class",t=>`exon exon${t.exonNumber}`).attr("y",n).attr("rx",2).attr("ry",2).attr("width",t=>t.w).attr("height",15).attr("x",t=>t.x).merge(i).style("cursor","default"),t.append("text").attr("id","modelInfo").style("text-anchor","end").attr("x",this.xScale(0)).attr("y",n-10).style("font-size",12).text("Gene Model")}const r=t.selectAll(".exon-curated").data(this.exonsCurated);r.attr("x",t=>t.x),r.attr("y",n),r.enter().append("rect").attr("class",t=>this.isIsoform?"exon-curated":`exon-curated exon-curated${t.exonNumber}`).attr("y",n).attr("width",t=>t.w).attr("height",15).attr("x",t=>t.x).merge(r).style("fill","#eee").style("cursor","default"),"left"!=e.labelOn&&"both"!=e.labelOn||t.append("text").attr("id","modelLabel").style("text-anchor","end").attr("x",this.xScale.range()[0]-5).attr("y",n+7.5).style("font-size","9px").text(void 0===this.gene.transcriptId?`${this.gene.geneSymbol}`:this.gene.transcriptId),"right"!=e.labelOn&&"both"!=e.labelOn||t.append("text").attr("id","modelLabelRight").style("text-anchor","start").attr("x",this.xScale.range()[1]+50).attr("y",n+7.5).style("font-size","9px").text(void 0===this.gene.transcriptId?`${this.gene.geneSymbol}`:this.gene.transcriptId)}setXscale(t){this.exons.sort((t,e)=>Number(t.chromStart)Number(e.chromStart)?1:0);let e=0;this.exons.forEach((t,n)=>{if(t.length=Number(t.chromEnd)-Number(t.chromStart)+1,0==n)e+=t.length;else{let r=this.exons[n-1];t.intronLength=Number(t.chromStart)-Number(r.chromEnd)+1,e+=t.length+(t.intronLength>this.maxIntronLength?this.maxIntronLength:t.intronLength)}});const n=[0,e],r=[0,t];this.xScale=xn().domain(n).range(r)}setXscaleFixIntron(t){this.exons.forEach(t=>{t.length=Number(t.chromEnd)-Number(t.chromStart)+1});const e=ft(this.exons,t=>t.length),n=[0,e*this.exons.length],r=[0,t];this.xScale=xn().domain(n).range(r);const a=this.xScale.invert(this.minExonWidth),i=dt(this.exons,t=>t.length>a?t.length:a);this.intronLength=(e*this.exons.length-i)/(this.exons.length-1)}_findExon(t){t=Number(t);const e=this.exons.filter(e=>Number(e.chromStart)-1<=t&&Number(e.chromEnd)+1>=t);return 1==e.length?e[0]:0==e.length?void console.warn("No exon found for: "+t):void console.warn("More than one exons found for: "+t)}}class Co{constructor(t,e,n,r){this.isoforms=t,this.isoformExons=e,this.modelExons=n,this.visualDom=void 0,this.config=r,this.nullColor="#DDDDDD"}showData(t,e,n,r,a=!0){if(a){t.sort((t,e)=>-(t.displayValue-e.displayValue));const e=t.map(t=>t.transcriptId);this.sortTracks(e)}t.forEach(t=>{this.visualDom.select(`#${t.transcriptId.replace(".","_")}`).selectAll(".exon-curated").style("fill",0==t.value?this.nullColor:e(t.value))}),this.visualDom.select(".lollipopGraph").remove();const i=this.visualDom.append("g").classed("lollipopGraph",!0).attr("transform","translate(-100, 13)"),o=i.selectAll(".lollipop").data(t).enter().append("g").classed("lollipop",!0);var c;o.append("line").attr("x1",0).attr("y1",t=>this.yScale(t.transcriptId)).attr("y2",t=>this.yScale(t.transcriptId)).style("stroke",t=>0==t.value?this.nullColor:e(t.value)).style("stroke-width",2).transition().duration(1e3).attr("x2",t=>0==t.value?0:n(t.value)),o.append("circle").attr("cx",0).attr("cy",t=>this.yScale(t.transcriptId)).attr("r",5).style("fill",t=>0==t.value?this.nullColor:e(t.value)).transition().duration(1e3).attr("cx",t=>n(t.value)),i.append("g").attr("class","lollipop-axis").attr("transform",`translate(0,-${this.yScale.bandwidth()/2})`).call((c=n,ki(xi,c)).ticks(3)),i.append("text").attr("id","lolliLabel").attr("x",0).attr("y",-40).style("text-anchor","end").style("font-size",9).text("log10(TPM)"),i.append("g").attr("class","lollipop-axis").attr("transform",`translate(0,-${this.yScale.bandwidth()/2})`).call(function(t){return ki(wi,t)}(this.yScale).tickValues([])),i.append("text").attr("id","lolliLabel").attr("x",10).attr("y",-20).text(`Transcript Expression in ${r}`).style("text-anchor","start").style("font-size","12px")}sortTracks(t){this.setYscale(this.config.h,t),this.render(!0)}render(t=!1,e,n="left",r=1e3){if(void 0===e&&void 0===this.visualDom)throw"Fatal Error: must provide a dom element";void 0===e?e=this.visualDom:this.visualDom=e,void 0===this.yScale&&this.setYscale(this.config.h);const a=e.selectAll(".isotrack").data(this.isoforms.map(t=>t.transcriptId));a.transition().duration(r).attr("transform",t=>`translate(0, ${this.yScale(t)})`),a.enter().append("g").attr("id",t=>t.replace(".","_")).attr("class","isotrack").attr("transform",t=>"translate(0, 0)").transition().duration(r/2).attr("transform",t=>`translate(0, ${this.yScale(t)})`),t||this._renderModels(this.config.w,n)}_renderModels(t,e="left"){this.isoforms.forEach(n=>{let r=void 0===this.modelExons||null===this.modelExons?this.isoformExons[n.transcriptId]:this.modelExons;const a=new Eo(n,r,this.isoformExons[n.transcriptId],[],!0),i=O(`#${n.transcriptId.replace(".","_")}`);a.render(i,{w:t,h:this.yScale.bandwidth(),labelOn:e})})}setYscale(t,e){void 0===e&&(e=this.isoforms.map(t=>t.transcriptId)),this.yScale=Nt().domain(e).range([0,t]).padding(.05)}}const $o={heatmap:function(t={x:20,y:20,scaleFactor:1}){let e=nt(1,t.x+1),n=nt(1,t.y+1),r=[];return e.forEach(e=>{e="x"+e.toString(),n.forEach(n=>{n="y"+n.toString();let a=Math.random()*t.scaleFactor;r.push({x:e,y:n,value:a,displayValue:parseFloat(a.toExponential()).toPrecision(3)})})}),r}({x:50,y:10,scaleFactor:1e3}),dendroHeatmap:{rowTree:"(((TP53:0.17,SLK:0.17):1.18,NDRG4:1.34):1.33,ACTN3:2.67);",colTree:"(((Adipose Visceral Omentum:0.06,Adipose Subcutaneous:0.06):0.00,Bladder:0.06):0.16,Adrenal Gland:0.22);",heatmap:[{y:"SLK",value:35.505,x:"Adipose Subcutaneous",unit:"TPM"},{y:"SLK",value:29.28,x:"Adipose Visceral Omentum",unit:"TPM"},{y:"SLK",value:17.405,x:"Adrenal Gland",unit:"TPM"},{y:"SLK",value:53.29,x:"Bladder",unit:"TPM"},{y:"NDRG4",value:12.035,x:"Adipose Subcutaneous",unit:"TPM"},{y:"NDRG4",value:6.531000000000001,x:"Adipose Visceral Omentum",unit:"TPM"},{y:"NDRG4",value:134.8,x:"Adrenal Gland",unit:"TPM"},{y:"NDRG4",value:7.1160000000000005,x:"Bladder",unit:"TPM"},{y:"TP53",value:29.935,x:"Adipose Subcutaneous",unit:"TPM"},{y:"TP53",value:23.55,x:"Adipose Visceral Omentum",unit:"TPM"},{y:"TP53",value:18.515,x:"Adrenal Gland",unit:"TPM"},{y:"TP53",value:40.51,x:"Bladder",unit:"TPM"},{y:"ACTN3",value:.33145,x:"Adipose Subcutaneous",unit:"TPM"},{y:"ACTN3",value:.3317,x:"Adipose Visceral Omentum",unit:"TPM"},{y:"ACTN3",value:.100005,x:"Adrenal Gland",unit:"TPM"},{y:"ACTN3",value:.48100000000000004,x:"Bladder",unit:"TPM"}]},groupedViolinPlot:[{group:"Group 1",label:"Gene 1",values:nt(0,2e3).map(pt(2,1))},{group:"Group 1",label:"Gene 2",values:nt(0,2e3).map(pt(5,1))},{group:"Group 1",label:"Gene 3",values:nt(0,2e3).map(pt(10,1))},{group:"Group 2",label:"Gene 1",values:nt(0,2e3).map(pt(5,1))},{group:"Group 2",label:"Gene 2",values:nt(0,2e3).map(pt(3,1))},{group:"Group 2",label:"Gene 3",values:nt(0,2e3).map(pt(1,1))},{group:"Group 3",label:"Gene 1",values:nt(0,2e3).map(pt(2,1))},{group:"Group 3",label:"Gene 2",values:nt(0,2e3).map(pt(3,1))},{group:"Group 3",label:"Gene 3",values:nt(0,2e3).map(pt(5,1))}],transcriptTracks:{exons:{"ENST00000311595.9":[{chrom:"17",chromEnd:77071172,exonId:"ENSE00002713933.1",exonNumber:"1",chromStart:77071151,strand:"+"},{chrom:"17",chromEnd:77073579,exonId:"ENSE00003672628.1",exonNumber:"2",chromStart:77073512,strand:"+"},{chrom:"17",chromEnd:77073946,exonId:"ENSE00003475281.1",exonNumber:"3",chromStart:77073745,strand:"+"},{chrom:"17",chromEnd:77075719,exonId:"ENSE00001111713.1",exonNumber:"4",chromStart:77075571,strand:"+"},{chrom:"17",chromEnd:77076446,exonId:"ENSE00003651250.1",exonNumber:"5",chromStart:77076289,strand:"+"},{chrom:"17",chromEnd:77077155,exonId:"ENSE00003607773.1",exonNumber:"6",chromStart:77077007,strand:"+"},{chrom:"17",chromEnd:77078612,exonId:"ENSE00002720924.1",exonNumber:"7",chromStart:77077980,strand:"+"}]},transcripts:[{chromosome:"17",end:77078612,gencodeId:"ENSG00000167280.12",geneSymbol:"ENGASE",start:77071151,strand:"+",transcriptId:"ENST00000311595.9"}]}},Lo={id:"gtexTranscriptTracks",data:$o.transcriptTracks,width:1200,height:80,marginLeft:100,marginRight:20,marginTop:0,marginBottom:20,labelPos:"left"};const Do={id:"gtexVizHeatmap",data:$o.heatmap,width:1200,height:300,marginLeft:20,marginRight:40,marginTop:50,marginBottom:50,colorScheme:"YlGnBu",cornerRadius:2,columnLabelHeight:20,columnLabelAngle:60,columnLabelPosAdjust:10,rowLabelWidth:100,legendSpace:50,useLog:!0,logBase:10};const Po={id:"gtexVizDendroHeatmap",data:$o.dendroHeatmap,useLog:!0,logBase:10,width:600,height:300,marginLeft:20,marginRight:40,marginTop:50,marginBottom:50,rowTreePanelWidth:100,colTreePanelHeight:100,colorScheme:"Blues",cornerRadius:2,columnLabelHeight:200,columnLabelAngle:60,columnLabelPosAdjust:10,rowLabelWidth:200,legendSpace:50};const Io={id:"gtexGroupedViolinPlot",data:$o.groupedViolinPlot,width:500,height:300,marginLeft:100,marginRight:20,marginTop:50,marginBottom:100,showDivider:!0,xPadding:.3,yLabel:"Random Value",showGroupX:!0,showX:!0,xAngle:0,showWhisker:!1,showLegend:!1,showSampleSize:!0};return t.demoData=$o,t.transcriptTracks=function(t=Lo){let e={top:t.marginTop,right:t.marginRight,bottom:t.marginBottom,left:t.marginLeft},n=t.width-(t.marginLeft+t.marginRight),r=t.height-(t.marginTop+t.marginBottom);if(0==$(`#${t.id}`).length){let e=`Input Error: DOM ID ${t.id} is not found.`;throw alert(e),e}let a=bt(t.id,t.width,t.height,e),i={x:0,y:0,w:n,h:r,labelOn:t.labelPos};new Co(t.data.transcripts,t.data.exons,void 0,i).render(!1,a,t.labelPos)},t.heatmap=function(t=Do){let e={top:t.marginTop,right:t.marginRight,bottom:t.marginBottom,left:t.marginLeft},n=t.width-(t.marginLeft+t.marginRight+t.rowLabelWidth),r=t.height-(t.marginTop+t.marginBottom+t.columnLabelHeight);if(0==$(`#${t.id}`).length){let e=`Input Error: DOM ID ${t.id} is not found.`;throw alert(e),e}let a=bt(t.id,t.width,t.height,e),i=`${t.id}Tooltip`,o=new li(t.data,t.useLog,t.logBase,t.colorScheme,t.cornerRadius,i);o.draw(a,{w:n,h:r},t.columnLabelAngle,!1,t.columnLabelPosAdjust),o.drawColorLegend(a,{x:20,y:-20},10)},t.dendroHeatmap=function(t=Po){let e={top:t.marginTop,right:t.marginRight+t.rowLabelWidth,bottom:t.marginBottom+t.columnLabelHeight,left:t.marginLeft};if(0==$(`#${t.id}`).length){let e=`Input Error: DOM ID ${t.id} is not found.`;throw alert(e),e}let n=`${t.id}Svg`,r=`${t.id}Tooltip`,a=new ui(t.width,t.rowTreePanelWidth,t.colTreePanelHeight,e),i=new Di(t.data.colTree,t.data.rowTree,t.data.heatmap,t.colorScheme,t.cornerRadius,a,r,t.useLog,t.logBase),o=void 0!==t.data.colTree,c=void 0!==t.data.rowTree;i.render(t.id,n,o,c,"top",8)},t.groupedViolinPlot=function(t=Io){console.log(t.data);let e={top:t.marginTop,right:t.marginRight,bottom:t.marginBottom,left:t.marginLeft};if(0==$(`#${t.id}`).length){let e=`Input Error: DOM ID ${t.id} is not found.`;throw alert(e),e}let n=t.width-(t.marginLeft+t.marginRight),r=t.height-(t.marginTop+t.marginBottom),a=`${t.id}Tooltip`,i=bt(t.id,t.width,t.height,e);const o=new ko(t.data);o.render(i,n,r,t.xPadding,void 0,[],t.yLabel,t.showGroupX,t.ShowX,t.xAngle,t.showWhisker,t.showDivider,t.showLegend),o.createTooltip(a)},t}({}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3RleC12aXouYnVuZGxlLm1pbi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbmFtZXNwYWNlcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NyZWF0b3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdG9yQWxsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbWF0Y2hlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zcGFyc2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZW50ZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jb25zdGFudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9kYXRhLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NvcnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vYXR0ci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3dpbmRvdy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zdHlsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9jbGFzc2VkLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3RleHQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaHRtbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9yYWlzZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9sb3dlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9pbnNlcnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcmVtb3ZlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2Nsb25lLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL29uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2Rpc3BhdGNoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3RBbGwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZmlsdGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2V4aXQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbWVyZ2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb3JkZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2FsbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9ub2Rlcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9ub2RlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NpemUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZW1wdHkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZWFjaC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9wcm9wZXJ0eS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9hcHBlbmQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGF0dW0uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zb3VyY2VFdmVudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL21vdXNlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvcG9pbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3RBbGwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FzY2VuZGluZy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9iaXNlY3Rvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbnVtYmVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9kZXZpYXRpb24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3ZhcmlhbmNlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9leHRlbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3JhbmdlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aWNrcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcXVhbnRpbGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21heC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWVhbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWVkaWFuLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9taW4uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3N1bS5qcyIsIi4uLy4uL3NyYy9tb2R1bGVzL3V0aWxzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvZGVmYXVsdFNvdXJjZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL25vcm1hbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1jb2xsZWN0aW9uL3NyYy9tYXAuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvbmVzdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvYXJyYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL29yZGluYWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2JhbmQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2RlZmluZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY29sb3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL21hdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2xhYi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY3ViZWhlbGl4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9iYXNpcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY29uc3RhbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2NvbG9yLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9yZ2IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2Jhc2lzQ2xvc2VkLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9udW1iZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3N0cmluZy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL3BhcnNlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy92YWx1ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvZGF0ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYXJyYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL29iamVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcm91bmQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9kZWNvbXBvc2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY3ViZWhlbGl4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jb25zdGFudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbnVtYmVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jb250aW51b3VzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0RGVjaW1hbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2V4cG9uZW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0U3BlY2lmaWVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0VHJpbS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFByZWZpeEF1dG8uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9kZWZhdWx0TG9jYWxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0Um91bmRlZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFR5cGVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvaWRlbnRpdHkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9sb2NhbGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRHcm91cC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdE51bWVyYWxzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uRml4ZWQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3RpY2tGb3JtYXQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25QcmVmaXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25Sb3VuZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbGluZWFyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2ludGVydmFsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21pbGxpc2Vjb25kLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2R1cmF0aW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2RheS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9zZWNvbmQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbWludXRlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2hvdXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvd2Vlay5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy95ZWFyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21vbnRoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y01pbnV0ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNIb3VyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y0RheS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNXZWVrLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y1llYXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjTW9udGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2xvY2FsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvZGVmYXVsdExvY2FsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvaXNvRm9ybWF0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9pc29QYXJzZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1kaXNwYXRjaC9zcmMvZGlzcGF0Y2guanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL3RpbWVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lb3V0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2NoZWR1bGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvaW50ZXJydXB0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHdlZW4uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbnRlcnBvbGF0ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3JlbW92ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdGlvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RleHQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdEFsbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2ZpbHRlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL21lcmdlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHJhbnNpdGlvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL29uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vYXR0ci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2F0dHJUd2Vlbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3N0eWxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGVUd2Vlbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2RlbGF5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZHVyYXRpb24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lYXNlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi90cmFuc2l0aW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2N1YmljLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9zZWxlY3Rpb24vaW50ZXJydXB0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY29sb3JzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvY2F0ZWdvcnkxMC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL0FjY2VudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL0RhcmsyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvUGFpcmVkLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvUGFzdGVsMS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL1Bhc3RlbDIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9TZXQxLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvU2V0Mi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL1NldDMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9yYW1wLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL0JyQkcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvUFJHbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9QaVlHLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1B1T3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvUmRCdS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9SZEd5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1JkWWxCdS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9SZFlsR24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvU3BlY3RyYWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL0J1R24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL0J1UHUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL0duQnUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL09yUmQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL1B1QnVHbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvUHVCdS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvUHVSZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvUmRQdS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvWWxHbkJ1LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9ZbEduLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9ZbE9yQnIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL1lsT3JSZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtc2luZ2xlL0JsdWVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvR3JlZW5zLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvR3JleXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLXNpbmdsZS9QdXJwbGVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvUmVkcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtc2luZ2xlL09yYW5nZXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL2N1YmVoZWxpeC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvcmFpbmJvdy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvc2luZWJvdy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvdmlyaWRpcy5qcyIsIi4uLy4uL3NyYy9tb2R1bGVzL2NvbG9ycy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvc2VxdWVudGlhbC5qcyIsIi4uLy4uL3NyYy9tb2R1bGVzL1Rvb2xiYXIuanMiLCIuLi8uLi9zcmMvbW9kdWxlcy9Ub29sdGlwLmpzIiwiLi4vLi4vc3JjL21vZHVsZXMvSGVhdG1hcC5qcyIsIi4uLy4uL3NyYy9tb2R1bGVzL0RlbmRyb0hlYXRtYXBDb25maWcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvY291bnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvZWFjaC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9lYWNoQWZ0ZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvZWFjaEJlZm9yZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9zdW0uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvc29ydC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9wYXRoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2FuY2VzdG9ycy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9kZXNjZW5kYW50cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9sZWF2ZXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvbGlua3MuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXhpcy9zcmMvYXJyYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXhpcy9zcmMvaWRlbnRpdHkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXhpcy9zcmMvYXhpcy5qcyIsIi4uLy4uL3NyYy9tb2R1bGVzL0RlbmRyb2dyYW0uanMiLCIuLi8uLi9zcmMvbW9kdWxlcy9uZXdpY2suanMiLCIuLi8uLi9zcmMvbW9kdWxlcy9EZW5kcm9IZWF0bWFwLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXBhdGgvc3JjL3BhdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2NvbnN0YW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9saW5lYXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BvaW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9saW5lLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcmVhLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXJkaW5hbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvbW9ub3RvbmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZHJhZy9zcmMvbm9ldmVudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9ub2RyYWcuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYnJ1c2gvc3JjL2NvbnN0YW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9ldmVudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1icnVzaC9zcmMvbm9ldmVudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1icnVzaC9zcmMvYnJ1c2guanMiLCIuLi8uLi9zcmMvbW9kdWxlcy9rZGUuanMiLCIuLi8uLi9zcmMvbW9kdWxlcy9Hcm91cGVkVmlvbGluLmpzIiwiLi4vLi4vc3JjL21vZHVsZXMvR2VuZU1vZGVsLmpzIiwiLi4vLi4vc3JjL21vZHVsZXMvSXNvZm9ybVRyYWNrVmlld2VyLmpzIiwiLi4vLi4vc3JjL0dURXhWaXouanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHZhciB4aHRtbCA9IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHN2ZzogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB4aHRtbDogeGh0bWwsXG4gIHhsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgeG1sOiBcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wiXG59O1xuIiwiaW1wb3J0IG5hbWVzcGFjZXMgZnJvbSBcIi4vbmFtZXNwYWNlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBwcmVmaXggPSBuYW1lICs9IFwiXCIsIGkgPSBwcmVmaXguaW5kZXhPZihcIjpcIik7XG4gIGlmIChpID49IDAgJiYgKHByZWZpeCA9IG5hbWUuc2xpY2UoMCwgaSkpICE9PSBcInhtbG5zXCIpIG5hbWUgPSBuYW1lLnNsaWNlKGkgKyAxKTtcbiAgcmV0dXJuIG5hbWVzcGFjZXMuaGFzT3duUHJvcGVydHkocHJlZml4KSA/IHtzcGFjZTogbmFtZXNwYWNlc1twcmVmaXhdLCBsb2NhbDogbmFtZX0gOiBuYW1lO1xufVxuIiwiaW1wb3J0IG5hbWVzcGFjZSBmcm9tIFwiLi9uYW1lc3BhY2VcIjtcbmltcG9ydCB7eGh0bWx9IGZyb20gXCIuL25hbWVzcGFjZXNcIjtcblxuZnVuY3Rpb24gY3JlYXRvckluaGVyaXQobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRvY3VtZW50ID0gdGhpcy5vd25lckRvY3VtZW50LFxuICAgICAgICB1cmkgPSB0aGlzLm5hbWVzcGFjZVVSSTtcbiAgICByZXR1cm4gdXJpID09PSB4aHRtbCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJID09PSB4aHRtbFxuICAgICAgICA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSlcbiAgICAgICAgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlModXJpLCBuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRvckZpeGVkKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcbiAgcmV0dXJuIChmdWxsbmFtZS5sb2NhbFxuICAgICAgPyBjcmVhdG9yRml4ZWRcbiAgICAgIDogY3JlYXRvckluaGVyaXQpKGZ1bGxuYW1lKTtcbn1cbiIsImZ1bmN0aW9uIG5vbmUoKSB7fVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IG5vbmUgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiIsImZ1bmN0aW9uIGVtcHR5KCkge1xuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiBzZWxlY3RvciA9PSBudWxsID8gZW1wdHkgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiIsInZhciBtYXRjaGVyID0gZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm1hdGNoZXMoc2VsZWN0b3IpO1xuICB9O1xufTtcblxuaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgaWYgKCFlbGVtZW50Lm1hdGNoZXMpIHtcbiAgICB2YXIgdmVuZG9yTWF0Y2hlcyA9IGVsZW1lbnQud2Via2l0TWF0Y2hlc1NlbGVjdG9yXG4gICAgICAgIHx8IGVsZW1lbnQubXNNYXRjaGVzU2VsZWN0b3JcbiAgICAgICAgfHwgZWxlbWVudC5tb3pNYXRjaGVzU2VsZWN0b3JcbiAgICAgICAgfHwgZWxlbWVudC5vTWF0Y2hlc1NlbGVjdG9yO1xuICAgIG1hdGNoZXIgPSBmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdmVuZG9yTWF0Y2hlcy5jYWxsKHRoaXMsIHNlbGVjdG9yKTtcbiAgICAgIH07XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBtYXRjaGVyO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odXBkYXRlKSB7XG4gIHJldHVybiBuZXcgQXJyYXkodXBkYXRlLmxlbmd0aCk7XG59XG4iLCJpbXBvcnQgc3BhcnNlIGZyb20gXCIuL3NwYXJzZVwiO1xuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbih0aGlzLl9lbnRlciB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRW50ZXJOb2RlKHBhcmVudCwgZGF0dW0pIHtcbiAgdGhpcy5vd25lckRvY3VtZW50ID0gcGFyZW50Lm93bmVyRG9jdW1lbnQ7XG4gIHRoaXMubmFtZXNwYWNlVVJJID0gcGFyZW50Lm5hbWVzcGFjZVVSSTtcbiAgdGhpcy5fbmV4dCA9IG51bGw7XG4gIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcbiAgdGhpcy5fX2RhdGFfXyA9IGRhdHVtO1xufVxuXG5FbnRlck5vZGUucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogRW50ZXJOb2RlLFxuICBhcHBlbmRDaGlsZDogZnVuY3Rpb24oY2hpbGQpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIHRoaXMuX25leHQpOyB9LFxuICBpbnNlcnRCZWZvcmU6IGZ1bmN0aW9uKGNoaWxkLCBuZXh0KSB7IHJldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaWxkLCBuZXh0KTsgfSxcbiAgcXVlcnlTZWxlY3RvcjogZnVuY3Rpb24oc2VsZWN0b3IpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsgfSxcbiAgcXVlcnlTZWxlY3RvckFsbDogZnVuY3Rpb24oc2VsZWN0b3IpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTsgfVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQge0VudGVyTm9kZX0gZnJvbSBcIi4vZW50ZXJcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi4vY29uc3RhbnRcIjtcblxudmFyIGtleVByZWZpeCA9IFwiJFwiOyAvLyBQcm90ZWN0IGFnYWluc3Qga2V5cyBsaWtlIOKAnF9fcHJvdG9fX+KAnS5cblxuZnVuY3Rpb24gYmluZEluZGV4KHBhcmVudCwgZ3JvdXAsIGVudGVyLCB1cGRhdGUsIGV4aXQsIGRhdGEpIHtcbiAgdmFyIGkgPSAwLFxuICAgICAgbm9kZSxcbiAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuXG4gIC8vIFB1dCBhbnkgbm9uLW51bGwgbm9kZXMgdGhhdCBmaXQgaW50byB1cGRhdGUuXG4gIC8vIFB1dCBhbnkgbnVsbCBub2RlcyBpbnRvIGVudGVyLlxuICAvLyBQdXQgYW55IHJlbWFpbmluZyBkYXRhIGludG8gZW50ZXIuXG4gIGZvciAoOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgbm9kZS5fX2RhdGFfXyA9IGRhdGFbaV07XG4gICAgICB1cGRhdGVbaV0gPSBub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnRlcltpXSA9IG5ldyBFbnRlck5vZGUocGFyZW50LCBkYXRhW2ldKTtcbiAgICB9XG4gIH1cblxuICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZG9u4oCZdCBmaXQgaW50byBleGl0LlxuICBmb3IgKDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBleGl0W2ldID0gbm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYmluZEtleShwYXJlbnQsIGdyb3VwLCBlbnRlciwgdXBkYXRlLCBleGl0LCBkYXRhLCBrZXkpIHtcbiAgdmFyIGksXG4gICAgICBub2RlLFxuICAgICAgbm9kZUJ5S2V5VmFsdWUgPSB7fSxcbiAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoLFxuICAgICAga2V5VmFsdWVzID0gbmV3IEFycmF5KGdyb3VwTGVuZ3RoKSxcbiAgICAgIGtleVZhbHVlO1xuXG4gIC8vIENvbXB1dGUgdGhlIGtleSBmb3IgZWFjaCBub2RlLlxuICAvLyBJZiBtdWx0aXBsZSBub2RlcyBoYXZlIHRoZSBzYW1lIGtleSwgdGhlIGR1cGxpY2F0ZXMgYXJlIGFkZGVkIHRvIGV4aXQuXG4gIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAga2V5VmFsdWVzW2ldID0ga2V5VmFsdWUgPSBrZXlQcmVmaXggKyBrZXkuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCk7XG4gICAgICBpZiAoa2V5VmFsdWUgaW4gbm9kZUJ5S2V5VmFsdWUpIHtcbiAgICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlQnlLZXlWYWx1ZVtrZXlWYWx1ZV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIGtleSBmb3IgZWFjaCBkYXR1bS5cbiAgLy8gSWYgdGhlcmUgYSBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGtleSwgam9pbiBhbmQgYWRkIGl0IHRvIHVwZGF0ZS5cbiAgLy8gSWYgdGhlcmUgaXMgbm90IChvciB0aGUga2V5IGlzIGEgZHVwbGljYXRlKSwgYWRkIGl0IHRvIGVudGVyLlxuICBmb3IgKGkgPSAwOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7XG4gICAga2V5VmFsdWUgPSBrZXlQcmVmaXggKyBrZXkuY2FsbChwYXJlbnQsIGRhdGFbaV0sIGksIGRhdGEpO1xuICAgIGlmIChub2RlID0gbm9kZUJ5S2V5VmFsdWVba2V5VmFsdWVdKSB7XG4gICAgICB1cGRhdGVbaV0gPSBub2RlO1xuICAgICAgbm9kZS5fX2RhdGFfXyA9IGRhdGFbaV07XG4gICAgICBub2RlQnlLZXlWYWx1ZVtrZXlWYWx1ZV0gPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnRlcltpXSA9IG5ldyBFbnRlck5vZGUocGFyZW50LCBkYXRhW2ldKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgYW55IHJlbWFpbmluZyBub2RlcyB0aGF0IHdlcmUgbm90IGJvdW5kIHRvIGRhdGEgdG8gZXhpdC5cbiAgZm9yIChpID0gMDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKG5vZGVCeUtleVZhbHVlW2tleVZhbHVlc1tpXV0gPT09IG5vZGUpKSB7XG4gICAgICBleGl0W2ldID0gbm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgZGF0YSA9IG5ldyBBcnJheSh0aGlzLnNpemUoKSksIGogPSAtMTtcbiAgICB0aGlzLmVhY2goZnVuY3Rpb24oZCkgeyBkYXRhWysral0gPSBkOyB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHZhciBiaW5kID0ga2V5ID8gYmluZEtleSA6IGJpbmRJbmRleCxcbiAgICAgIHBhcmVudHMgPSB0aGlzLl9wYXJlbnRzLFxuICAgICAgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzO1xuXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdmFsdWUgPSBjb25zdGFudCh2YWx1ZSk7XG5cbiAgZm9yICh2YXIgbSA9IGdyb3Vwcy5sZW5ndGgsIHVwZGF0ZSA9IG5ldyBBcnJheShtKSwgZW50ZXIgPSBuZXcgQXJyYXkobSksIGV4aXQgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgdmFyIHBhcmVudCA9IHBhcmVudHNbal0sXG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2pdLFxuICAgICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgICAgZGF0YSA9IHZhbHVlLmNhbGwocGFyZW50LCBwYXJlbnQgJiYgcGFyZW50Ll9fZGF0YV9fLCBqLCBwYXJlbnRzKSxcbiAgICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoLFxuICAgICAgICBlbnRlckdyb3VwID0gZW50ZXJbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXG4gICAgICAgIHVwZGF0ZUdyb3VwID0gdXBkYXRlW2pdID0gbmV3IEFycmF5KGRhdGFMZW5ndGgpLFxuICAgICAgICBleGl0R3JvdXAgPSBleGl0W2pdID0gbmV3IEFycmF5KGdyb3VwTGVuZ3RoKTtcblxuICAgIGJpbmQocGFyZW50LCBncm91cCwgZW50ZXJHcm91cCwgdXBkYXRlR3JvdXAsIGV4aXRHcm91cCwgZGF0YSwga2V5KTtcblxuICAgIC8vIE5vdyBjb25uZWN0IHRoZSBlbnRlciBub2RlcyB0byB0aGVpciBmb2xsb3dpbmcgdXBkYXRlIG5vZGUsIHN1Y2ggdGhhdFxuICAgIC8vIGFwcGVuZENoaWxkIGNhbiBpbnNlcnQgdGhlIG1hdGVyaWFsaXplZCBlbnRlciBub2RlIGJlZm9yZSB0aGlzIG5vZGUsXG4gICAgLy8gcmF0aGVyIHRoYW4gYXQgdGhlIGVuZCBvZiB0aGUgcGFyZW50IG5vZGUuXG4gICAgZm9yICh2YXIgaTAgPSAwLCBpMSA9IDAsIHByZXZpb3VzLCBuZXh0OyBpMCA8IGRhdGFMZW5ndGg7ICsraTApIHtcbiAgICAgIGlmIChwcmV2aW91cyA9IGVudGVyR3JvdXBbaTBdKSB7XG4gICAgICAgIGlmIChpMCA+PSBpMSkgaTEgPSBpMCArIDE7XG4gICAgICAgIHdoaWxlICghKG5leHQgPSB1cGRhdGVHcm91cFtpMV0pICYmICsraTEgPCBkYXRhTGVuZ3RoKTtcbiAgICAgICAgcHJldmlvdXMuX25leHQgPSBuZXh0IHx8IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlID0gbmV3IFNlbGVjdGlvbih1cGRhdGUsIHBhcmVudHMpO1xuICB1cGRhdGUuX2VudGVyID0gZW50ZXI7XG4gIHVwZGF0ZS5fZXhpdCA9IGV4aXQ7XG4gIHJldHVybiB1cGRhdGU7XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29tcGFyZSkge1xuICBpZiAoIWNvbXBhcmUpIGNvbXBhcmUgPSBhc2NlbmRpbmc7XG5cbiAgZnVuY3Rpb24gY29tcGFyZU5vZGUoYSwgYikge1xuICAgIHJldHVybiBhICYmIGIgPyBjb21wYXJlKGEuX19kYXRhX18sIGIuX19kYXRhX18pIDogIWEgLSAhYjtcbiAgfVxuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHNvcnRncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHNvcnRncm91cCA9IHNvcnRncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIHNvcnRncm91cFtpXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvcnRncm91cC5zb3J0KGNvbXBhcmVOb2RlKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHNvcnRncm91cHMsIHRoaXMuX3BhcmVudHMpLm9yZGVyKCk7XG59XG5cbmZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKSB7XG4gIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogYSA+PSBiID8gMCA6IE5hTjtcbn1cbiIsImltcG9ydCBuYW1lc3BhY2UgZnJvbSBcIi4uL25hbWVzcGFjZVwiO1xuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlTlMoZnVsbG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50KG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudE5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIHZhbHVlKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgZWxzZSB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uTlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIGVsc2UgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIHYpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLm5vZGUoKTtcbiAgICByZXR1cm4gZnVsbG5hbWUubG9jYWxcbiAgICAgICAgPyBub2RlLmdldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbClcbiAgICAgICAgOiBub2RlLmdldEF0dHJpYnV0ZShmdWxsbmFtZSk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJSZW1vdmVOUyA6IGF0dHJSZW1vdmUpIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJGdW5jdGlvbk5TIDogYXR0ckZ1bmN0aW9uKVxuICAgICAgOiAoZnVsbG5hbWUubG9jYWwgPyBhdHRyQ29uc3RhbnROUyA6IGF0dHJDb25zdGFudCkpKShmdWxsbmFtZSwgdmFsdWUpKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUpIHtcbiAgcmV0dXJuIChub2RlLm93bmVyRG9jdW1lbnQgJiYgbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSAvLyBub2RlIGlzIGEgTm9kZVxuICAgICAgfHwgKG5vZGUuZG9jdW1lbnQgJiYgbm9kZSkgLy8gbm9kZSBpcyBhIFdpbmRvd1xuICAgICAgfHwgbm9kZS5kZWZhdWx0VmlldzsgLy8gbm9kZSBpcyBhIERvY3VtZW50XG59XG4iLCJpbXBvcnQgZGVmYXVsdFZpZXcgZnJvbSBcIi4uL3dpbmRvd1wiO1xuXG5mdW5jdGlvbiBzdHlsZVJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUNvbnN0YW50KG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gICAgZWxzZSB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHYsIHByaW9yaXR5KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMVxuICAgICAgPyB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcbiAgICAgICAgICAgID8gc3R5bGVSZW1vdmUgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgPyBzdHlsZUZ1bmN0aW9uXG4gICAgICAgICAgICA6IHN0eWxlQ29uc3RhbnQpKG5hbWUsIHZhbHVlLCBwcmlvcml0eSA9PSBudWxsID8gXCJcIiA6IHByaW9yaXR5KSlcbiAgICAgIDogc3R5bGVWYWx1ZSh0aGlzLm5vZGUoKSwgbmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHlsZVZhbHVlKG5vZGUsIG5hbWUpIHtcbiAgcmV0dXJuIG5vZGUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKVxuICAgICAgfHwgZGVmYXVsdFZpZXcobm9kZSkuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpO1xufVxuIiwiZnVuY3Rpb24gY2xhc3NBcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy50cmltKCkuc3BsaXQoL158XFxzKy8pO1xufVxuXG5mdW5jdGlvbiBjbGFzc0xpc3Qobm9kZSkge1xuICByZXR1cm4gbm9kZS5jbGFzc0xpc3QgfHwgbmV3IENsYXNzTGlzdChub2RlKTtcbn1cblxuZnVuY3Rpb24gQ2xhc3NMaXN0KG5vZGUpIHtcbiAgdGhpcy5fbm9kZSA9IG5vZGU7XG4gIHRoaXMuX25hbWVzID0gY2xhc3NBcnJheShub2RlLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpIHx8IFwiXCIpO1xufVxuXG5DbGFzc0xpc3QucHJvdG90eXBlID0ge1xuICBhZGQ6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgaSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGkgPCAwKSB7XG4gICAgICB0aGlzLl9uYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLl9uYW1lcy5qb2luKFwiIFwiKSk7XG4gICAgfVxuICB9LFxuICByZW1vdmU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgaSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgdGhpcy5fbmFtZXMuc3BsaWNlKGksIDEpO1xuICAgICAgdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLl9uYW1lcy5qb2luKFwiIFwiKSk7XG4gICAgfVxuICB9LFxuICBjb250YWluczogZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpID49IDA7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNsYXNzZWRBZGQobm9kZSwgbmFtZXMpIHtcbiAgdmFyIGxpc3QgPSBjbGFzc0xpc3Qobm9kZSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIGxpc3QuYWRkKG5hbWVzW2ldKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZFJlbW92ZShub2RlLCBuYW1lcykge1xuICB2YXIgbGlzdCA9IGNsYXNzTGlzdChub2RlKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbikgbGlzdC5yZW1vdmUobmFtZXNbaV0pO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkVHJ1ZShuYW1lcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY2xhc3NlZEFkZCh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRGYWxzZShuYW1lcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY2xhc3NlZFJlbW92ZSh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRGdW5jdGlvbihuYW1lcywgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICh2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpID8gY2xhc3NlZEFkZCA6IGNsYXNzZWRSZW1vdmUpKHRoaXMsIG5hbWVzKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIG5hbWVzID0gY2xhc3NBcnJheShuYW1lICsgXCJcIik7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIGxpc3QgPSBjbGFzc0xpc3QodGhpcy5ub2RlKCkpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gICAgd2hpbGUgKCsraSA8IG4pIGlmICghbGlzdC5jb250YWlucyhuYW1lc1tpXSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGNsYXNzZWRGdW5jdGlvbiA6IHZhbHVlXG4gICAgICA/IGNsYXNzZWRUcnVlXG4gICAgICA6IGNsYXNzZWRGYWxzZSkobmFtZXMsIHZhbHVlKSk7XG59XG4iLCJmdW5jdGlvbiB0ZXh0UmVtb3ZlKCkge1xuICB0aGlzLnRleHRDb250ZW50ID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gdGV4dENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRleHRGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2ID09IG51bGwgPyBcIlwiIDogdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKHZhbHVlID09IG51bGxcbiAgICAgICAgICA/IHRleHRSZW1vdmUgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IHRleHRGdW5jdGlvblxuICAgICAgICAgIDogdGV4dENvbnN0YW50KSh2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpLnRleHRDb250ZW50O1xufVxuIiwiZnVuY3Rpb24gaHRtbFJlbW92ZSgpIHtcbiAgdGhpcy5pbm5lckhUTUwgPSBcIlwiO1xufVxuXG5mdW5jdGlvbiBodG1sQ29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGh0bWxGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBodG1sUmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBodG1sRnVuY3Rpb25cbiAgICAgICAgICA6IGh0bWxDb25zdGFudCkodmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKS5pbm5lckhUTUw7XG59XG4iLCJmdW5jdGlvbiByYWlzZSgpIHtcbiAgaWYgKHRoaXMubmV4dFNpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2gocmFpc2UpO1xufVxuIiwiZnVuY3Rpb24gbG93ZXIoKSB7XG4gIGlmICh0aGlzLnByZXZpb3VzU2libGluZykgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLCB0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKGxvd2VyKTtcbn1cbiIsImltcG9ydCBjcmVhdG9yIGZyb20gXCIuLi9jcmVhdG9yXCI7XG5pbXBvcnQgc2VsZWN0b3IgZnJvbSBcIi4uL3NlbGVjdG9yXCI7XG5cbmZ1bmN0aW9uIGNvbnN0YW50TnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIGJlZm9yZSkge1xuICB2YXIgY3JlYXRlID0gdHlwZW9mIG5hbWUgPT09IFwiZnVuY3Rpb25cIiA/IG5hbWUgOiBjcmVhdG9yKG5hbWUpLFxuICAgICAgc2VsZWN0ID0gYmVmb3JlID09IG51bGwgPyBjb25zdGFudE51bGwgOiB0eXBlb2YgYmVmb3JlID09PSBcImZ1bmN0aW9uXCIgPyBiZWZvcmUgOiBzZWxlY3RvcihiZWZvcmUpO1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGNyZWF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBzZWxlY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCBudWxsKTtcbiAgfSk7XG59XG4iLCJmdW5jdGlvbiByZW1vdmUoKSB7XG4gIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gIGlmIChwYXJlbnQpIHBhcmVudC5yZW1vdmVDaGlsZCh0aGlzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2gocmVtb3ZlKTtcbn1cbiIsImZ1bmN0aW9uIHNlbGVjdGlvbl9jbG9uZVNoYWxsb3coKSB7XG4gIHJldHVybiB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuY2xvbmVOb2RlKGZhbHNlKSwgdGhpcy5uZXh0U2libGluZyk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvbl9jbG9uZURlZXAoKSB7XG4gIHJldHVybiB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuY2xvbmVOb2RlKHRydWUpLCB0aGlzLm5leHRTaWJsaW5nKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZGVlcCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZGVlcCA/IHNlbGVjdGlvbl9jbG9uZURlZXAgOiBzZWxlY3Rpb25fY2xvbmVTaGFsbG93KTtcbn1cbiIsInZhciBmaWx0ZXJFdmVudHMgPSB7fTtcblxuZXhwb3J0IHZhciBldmVudCA9IG51bGw7XG5cbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIGlmICghKFwib25tb3VzZWVudGVyXCIgaW4gZWxlbWVudCkpIHtcbiAgICBmaWx0ZXJFdmVudHMgPSB7bW91c2VlbnRlcjogXCJtb3VzZW92ZXJcIiwgbW91c2VsZWF2ZTogXCJtb3VzZW91dFwifTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaWx0ZXJDb250ZXh0TGlzdGVuZXIobGlzdGVuZXIsIGluZGV4LCBncm91cCkge1xuICBsaXN0ZW5lciA9IGNvbnRleHRMaXN0ZW5lcihsaXN0ZW5lciwgaW5kZXgsIGdyb3VwKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgIGlmICghcmVsYXRlZCB8fCAocmVsYXRlZCAhPT0gdGhpcyAmJiAhKHJlbGF0ZWQuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykgJiA4KSkpIHtcbiAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgZXZlbnQpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY29udGV4dExpc3RlbmVyKGxpc3RlbmVyLCBpbmRleCwgZ3JvdXApIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50MSkge1xuICAgIHZhciBldmVudDAgPSBldmVudDsgLy8gRXZlbnRzIGNhbiBiZSByZWVudHJhbnQgKGUuZy4sIGZvY3VzKS5cbiAgICBldmVudCA9IGV2ZW50MTtcbiAgICB0cnkge1xuICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCB0aGlzLl9fZGF0YV9fLCBpbmRleCwgZ3JvdXApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBldmVudCA9IGV2ZW50MDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lcykge1xuICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uUmVtb3ZlKHR5cGVuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgb24gPSB0aGlzLl9fb247XG4gICAgaWYgKCFvbikgcmV0dXJuO1xuICAgIGZvciAodmFyIGogPSAwLCBpID0gLTEsIG0gPSBvbi5sZW5ndGgsIG87IGogPCBtOyArK2opIHtcbiAgICAgIGlmIChvID0gb25bal0sICghdHlwZW5hbWUudHlwZSB8fCBvLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUpICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLmNhcHR1cmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25bKytpXSA9IG87XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgrK2kpIG9uLmxlbmd0aCA9IGk7XG4gICAgZWxzZSBkZWxldGUgdGhpcy5fX29uO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbkFkZCh0eXBlbmFtZSwgdmFsdWUsIGNhcHR1cmUpIHtcbiAgdmFyIHdyYXAgPSBmaWx0ZXJFdmVudHMuaGFzT3duUHJvcGVydHkodHlwZW5hbWUudHlwZSkgPyBmaWx0ZXJDb250ZXh0TGlzdGVuZXIgOiBjb250ZXh0TGlzdGVuZXI7XG4gIHJldHVybiBmdW5jdGlvbihkLCBpLCBncm91cCkge1xuICAgIHZhciBvbiA9IHRoaXMuX19vbiwgbywgbGlzdGVuZXIgPSB3cmFwKHZhbHVlLCBpLCBncm91cCk7XG4gICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgICAgaWYgKChvID0gb25bal0pLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUgJiYgby5uYW1lID09PSB0eXBlbmFtZS5uYW1lKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIsIG8uY2FwdHVyZSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIgPSBsaXN0ZW5lciwgby5jYXB0dXJlID0gY2FwdHVyZSk7XG4gICAgICAgIG8udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIodHlwZW5hbWUudHlwZSwgbGlzdGVuZXIsIGNhcHR1cmUpO1xuICAgIG8gPSB7dHlwZTogdHlwZW5hbWUudHlwZSwgbmFtZTogdHlwZW5hbWUubmFtZSwgdmFsdWU6IHZhbHVlLCBsaXN0ZW5lcjogbGlzdGVuZXIsIGNhcHR1cmU6IGNhcHR1cmV9O1xuICAgIGlmICghb24pIHRoaXMuX19vbiA9IFtvXTtcbiAgICBlbHNlIG9uLnB1c2gobyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHR5cGVuYW1lLCB2YWx1ZSwgY2FwdHVyZSkge1xuICB2YXIgdHlwZW5hbWVzID0gcGFyc2VUeXBlbmFtZXModHlwZW5hbWUgKyBcIlwiKSwgaSwgbiA9IHR5cGVuYW1lcy5sZW5ndGgsIHQ7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIG9uID0gdGhpcy5ub2RlKCkuX19vbjtcbiAgICBpZiAob24pIGZvciAodmFyIGogPSAwLCBtID0gb24ubGVuZ3RoLCBvOyBqIDwgbTsgKytqKSB7XG4gICAgICBmb3IgKGkgPSAwLCBvID0gb25bal07IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKCh0ID0gdHlwZW5hbWVzW2ldKS50eXBlID09PSBvLnR5cGUgJiYgdC5uYW1lID09PSBvLm5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gby52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBvbiA9IHZhbHVlID8gb25BZGQgOiBvblJlbW92ZTtcbiAgaWYgKGNhcHR1cmUgPT0gbnVsbCkgY2FwdHVyZSA9IGZhbHNlO1xuICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB0aGlzLmVhY2gob24odHlwZW5hbWVzW2ldLCB2YWx1ZSwgY2FwdHVyZSkpO1xuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1c3RvbUV2ZW50KGV2ZW50MSwgbGlzdGVuZXIsIHRoYXQsIGFyZ3MpIHtcbiAgdmFyIGV2ZW50MCA9IGV2ZW50O1xuICBldmVudDEuc291cmNlRXZlbnQgPSBldmVudDtcbiAgZXZlbnQgPSBldmVudDE7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9IGZpbmFsbHkge1xuICAgIGV2ZW50ID0gZXZlbnQwO1xuICB9XG59XG4iLCJpbXBvcnQgZGVmYXVsdFZpZXcgZnJvbSBcIi4uL3dpbmRvd1wiO1xuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50KG5vZGUsIHR5cGUsIHBhcmFtcykge1xuICB2YXIgd2luZG93ID0gZGVmYXVsdFZpZXcobm9kZSksXG4gICAgICBldmVudCA9IHdpbmRvdy5DdXN0b21FdmVudDtcblxuICBpZiAodHlwZW9mIGV2ZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBldmVudCA9IG5ldyBldmVudCh0eXBlLCBwYXJhbXMpO1xuICB9IGVsc2Uge1xuICAgIGV2ZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gICAgaWYgKHBhcmFtcykgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIHBhcmFtcy5idWJibGVzLCBwYXJhbXMuY2FuY2VsYWJsZSksIGV2ZW50LmRldGFpbCA9IHBhcmFtcy5kZXRhaWw7XG4gICAgZWxzZSBldmVudC5pbml0RXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQ29uc3RhbnQodHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2hFdmVudCh0aGlzLCB0eXBlLCBwYXJhbXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEZ1bmN0aW9uKHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHBhcmFtcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGRpc3BhdGNoRnVuY3Rpb25cbiAgICAgIDogZGlzcGF0Y2hDb25zdGFudCkodHlwZSwgcGFyYW1zKSk7XG59XG4iLCJpbXBvcnQgc2VsZWN0aW9uX3NlbGVjdCBmcm9tIFwiLi9zZWxlY3RcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2VsZWN0QWxsIGZyb20gXCIuL3NlbGVjdEFsbFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9maWx0ZXIgZnJvbSBcIi4vZmlsdGVyXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2RhdGEgZnJvbSBcIi4vZGF0YVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9lbnRlciBmcm9tIFwiLi9lbnRlclwiO1xuaW1wb3J0IHNlbGVjdGlvbl9leGl0IGZyb20gXCIuL2V4aXRcIjtcbmltcG9ydCBzZWxlY3Rpb25fbWVyZ2UgZnJvbSBcIi4vbWVyZ2VcIjtcbmltcG9ydCBzZWxlY3Rpb25fb3JkZXIgZnJvbSBcIi4vb3JkZXJcIjtcbmltcG9ydCBzZWxlY3Rpb25fc29ydCBmcm9tIFwiLi9zb3J0XCI7XG5pbXBvcnQgc2VsZWN0aW9uX2NhbGwgZnJvbSBcIi4vY2FsbFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9ub2RlcyBmcm9tIFwiLi9ub2Rlc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9ub2RlIGZyb20gXCIuL25vZGVcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2l6ZSBmcm9tIFwiLi9zaXplXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VtcHR5IGZyb20gXCIuL2VtcHR5XCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VhY2ggZnJvbSBcIi4vZWFjaFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9hdHRyIGZyb20gXCIuL2F0dHJcIjtcbmltcG9ydCBzZWxlY3Rpb25fc3R5bGUgZnJvbSBcIi4vc3R5bGVcIjtcbmltcG9ydCBzZWxlY3Rpb25fcHJvcGVydHkgZnJvbSBcIi4vcHJvcGVydHlcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2xhc3NlZCBmcm9tIFwiLi9jbGFzc2VkXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3RleHQgZnJvbSBcIi4vdGV4dFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9odG1sIGZyb20gXCIuL2h0bWxcIjtcbmltcG9ydCBzZWxlY3Rpb25fcmFpc2UgZnJvbSBcIi4vcmFpc2VcIjtcbmltcG9ydCBzZWxlY3Rpb25fbG93ZXIgZnJvbSBcIi4vbG93ZXJcIjtcbmltcG9ydCBzZWxlY3Rpb25fYXBwZW5kIGZyb20gXCIuL2FwcGVuZFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9pbnNlcnQgZnJvbSBcIi4vaW5zZXJ0XCI7XG5pbXBvcnQgc2VsZWN0aW9uX3JlbW92ZSBmcm9tIFwiLi9yZW1vdmVcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2xvbmUgZnJvbSBcIi4vY2xvbmVcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGF0dW0gZnJvbSBcIi4vZGF0dW1cIjtcbmltcG9ydCBzZWxlY3Rpb25fb24gZnJvbSBcIi4vb25cIjtcbmltcG9ydCBzZWxlY3Rpb25fZGlzcGF0Y2ggZnJvbSBcIi4vZGlzcGF0Y2hcIjtcblxuZXhwb3J0IHZhciByb290ID0gW251bGxdO1xuXG5leHBvcnQgZnVuY3Rpb24gU2VsZWN0aW9uKGdyb3VwcywgcGFyZW50cykge1xuICB0aGlzLl9ncm91cHMgPSBncm91cHM7XG4gIHRoaXMuX3BhcmVudHMgPSBwYXJlbnRzO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sIHJvb3QpO1xufVxuXG5TZWxlY3Rpb24ucHJvdG90eXBlID0gc2VsZWN0aW9uLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFNlbGVjdGlvbixcbiAgc2VsZWN0OiBzZWxlY3Rpb25fc2VsZWN0LFxuICBzZWxlY3RBbGw6IHNlbGVjdGlvbl9zZWxlY3RBbGwsXG4gIGZpbHRlcjogc2VsZWN0aW9uX2ZpbHRlcixcbiAgZGF0YTogc2VsZWN0aW9uX2RhdGEsXG4gIGVudGVyOiBzZWxlY3Rpb25fZW50ZXIsXG4gIGV4aXQ6IHNlbGVjdGlvbl9leGl0LFxuICBtZXJnZTogc2VsZWN0aW9uX21lcmdlLFxuICBvcmRlcjogc2VsZWN0aW9uX29yZGVyLFxuICBzb3J0OiBzZWxlY3Rpb25fc29ydCxcbiAgY2FsbDogc2VsZWN0aW9uX2NhbGwsXG4gIG5vZGVzOiBzZWxlY3Rpb25fbm9kZXMsXG4gIG5vZGU6IHNlbGVjdGlvbl9ub2RlLFxuICBzaXplOiBzZWxlY3Rpb25fc2l6ZSxcbiAgZW1wdHk6IHNlbGVjdGlvbl9lbXB0eSxcbiAgZWFjaDogc2VsZWN0aW9uX2VhY2gsXG4gIGF0dHI6IHNlbGVjdGlvbl9hdHRyLFxuICBzdHlsZTogc2VsZWN0aW9uX3N0eWxlLFxuICBwcm9wZXJ0eTogc2VsZWN0aW9uX3Byb3BlcnR5LFxuICBjbGFzc2VkOiBzZWxlY3Rpb25fY2xhc3NlZCxcbiAgdGV4dDogc2VsZWN0aW9uX3RleHQsXG4gIGh0bWw6IHNlbGVjdGlvbl9odG1sLFxuICByYWlzZTogc2VsZWN0aW9uX3JhaXNlLFxuICBsb3dlcjogc2VsZWN0aW9uX2xvd2VyLFxuICBhcHBlbmQ6IHNlbGVjdGlvbl9hcHBlbmQsXG4gIGluc2VydDogc2VsZWN0aW9uX2luc2VydCxcbiAgcmVtb3ZlOiBzZWxlY3Rpb25fcmVtb3ZlLFxuICBjbG9uZTogc2VsZWN0aW9uX2Nsb25lLFxuICBkYXR1bTogc2VsZWN0aW9uX2RhdHVtLFxuICBvbjogc2VsZWN0aW9uX29uLFxuICBkaXNwYXRjaDogc2VsZWN0aW9uX2Rpc3BhdGNoXG59O1xuXG5leHBvcnQgZGVmYXVsdCBzZWxlY3Rpb247XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCBzZWxlY3RvciBmcm9tIFwiLi4vc2VsZWN0b3JcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0KSB7XG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgc3Vibm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiAoc3Vibm9kZSA9IHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkpIHtcbiAgICAgICAgaWYgKFwiX19kYXRhX19cIiBpbiBub2RlKSBzdWJub2RlLl9fZGF0YV9fID0gbm9kZS5fX2RhdGFfXztcbiAgICAgICAgc3ViZ3JvdXBbaV0gPSBzdWJub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cyk7XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCBzZWxlY3RvckFsbCBmcm9tIFwiLi4vc2VsZWN0b3JBbGxcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0KSB7XG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yQWxsKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gW10sIHBhcmVudHMgPSBbXSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc3ViZ3JvdXBzLnB1c2goc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKTtcbiAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgcGFyZW50cyk7XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCBtYXRjaGVyIGZyb20gXCIuLi9tYXRjaGVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hdGNoKSB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggIT09IFwiZnVuY3Rpb25cIikgbWF0Y2ggPSBtYXRjaGVyKG1hdGNoKTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gW10sIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgbWF0Y2guY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpIHtcbiAgICAgICAgc3ViZ3JvdXAucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiaW1wb3J0IHNwYXJzZSBmcm9tIFwiLi9zcGFyc2VcIjtcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZXhpdCB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdGlvbikge1xuXG4gIGZvciAodmFyIGdyb3VwczAgPSB0aGlzLl9ncm91cHMsIGdyb3VwczEgPSBzZWxlY3Rpb24uX2dyb3VwcywgbTAgPSBncm91cHMwLmxlbmd0aCwgbTEgPSBncm91cHMxLmxlbmd0aCwgbSA9IE1hdGgubWluKG0wLCBtMSksIG1lcmdlcyA9IG5ldyBBcnJheShtMCksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAwID0gZ3JvdXBzMFtqXSwgZ3JvdXAxID0gZ3JvdXBzMVtqXSwgbiA9IGdyb3VwMC5sZW5ndGgsIG1lcmdlID0gbWVyZ2VzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cDBbaV0gfHwgZ3JvdXAxW2ldKSB7XG4gICAgICAgIG1lcmdlW2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKDsgaiA8IG0wOyArK2opIHtcbiAgICBtZXJnZXNbal0gPSBncm91cHMwW2pdO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24obWVyZ2VzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IC0xLCBtID0gZ3JvdXBzLmxlbmd0aDsgKytqIDwgbTspIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IGdyb3VwLmxlbmd0aCAtIDEsIG5leHQgPSBncm91cFtpXSwgbm9kZTsgLS1pID49IDA7KSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIGlmIChuZXh0ICYmIG5leHQgIT09IG5vZGUubmV4dFNpYmxpbmcpIG5leHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgbmV4dCk7XG4gICAgICAgIG5leHQgPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1swXTtcbiAgYXJndW1lbnRzWzBdID0gdGhpcztcbiAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIG5vZGVzID0gbmV3IEFycmF5KHRoaXMuc2l6ZSgpKSwgaSA9IC0xO1xuICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7IG5vZGVzWysraV0gPSB0aGlzOyB9KTtcbiAgcmV0dXJuIG5vZGVzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIHZhciBub2RlID0gZ3JvdXBbaV07XG4gICAgICBpZiAobm9kZSkgcmV0dXJuIG5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHNpemUgPSAwO1xuICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7ICsrc2l6ZTsgfSk7XG4gIHJldHVybiBzaXplO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiAhdGhpcy5ub2RlKCk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaykge1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IDAsIG0gPSBncm91cHMubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSAwLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSBjYWxsYmFjay5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cbiIsImZ1bmN0aW9uIHByb3BlcnR5UmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGRlbGV0ZSB0aGlzW25hbWVdO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUNvbnN0YW50KG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzW25hbWVdID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5RnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSBkZWxldGUgdGhpc1tuYW1lXTtcbiAgICBlbHNlIHRoaXNbbmFtZV0gPSB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDFcbiAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBwcm9wZXJ0eVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBwcm9wZXJ0eUZ1bmN0aW9uXG4gICAgICAgICAgOiBwcm9wZXJ0eUNvbnN0YW50KShuYW1lLCB2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpW25hbWVdO1xufVxuIiwiaW1wb3J0IGNyZWF0b3IgZnJvbSBcIi4uL2NyZWF0b3JcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgY3JlYXRlID0gdHlwZW9mIG5hbWUgPT09IFwiZnVuY3Rpb25cIiA/IG5hbWUgOiBjcmVhdG9yKG5hbWUpO1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoY3JlYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMucHJvcGVydHkoXCJfX2RhdGFfX1wiLCB2YWx1ZSlcbiAgICAgIDogdGhpcy5ub2RlKCkuX19kYXRhX187XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbiwgcm9vdH0gZnJvbSBcIi4vc2VsZWN0aW9uL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCJcbiAgICAgID8gbmV3IFNlbGVjdGlvbihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpXV0sIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKVxuICAgICAgOiBuZXcgU2VsZWN0aW9uKFtbc2VsZWN0b3JdXSwgcm9vdCk7XG59XG4iLCJpbXBvcnQge2V2ZW50fSBmcm9tIFwiLi9zZWxlY3Rpb24vb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBjdXJyZW50ID0gZXZlbnQsIHNvdXJjZTtcbiAgd2hpbGUgKHNvdXJjZSA9IGN1cnJlbnQuc291cmNlRXZlbnQpIGN1cnJlbnQgPSBzb3VyY2U7XG4gIHJldHVybiBjdXJyZW50O1xufVxuIiwiaW1wb3J0IHNvdXJjZUV2ZW50IGZyb20gXCIuL3NvdXJjZUV2ZW50XCI7XG5pbXBvcnQgcG9pbnQgZnJvbSBcIi4vcG9pbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSkge1xuICB2YXIgZXZlbnQgPSBzb3VyY2VFdmVudCgpO1xuICBpZiAoZXZlbnQuY2hhbmdlZFRvdWNoZXMpIGV2ZW50ID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XG4gIHJldHVybiBwb2ludChub2RlLCBldmVudCk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlLCBldmVudCkge1xuICB2YXIgc3ZnID0gbm9kZS5vd25lclNWR0VsZW1lbnQgfHwgbm9kZTtcblxuICBpZiAoc3ZnLmNyZWF0ZVNWR1BvaW50KSB7XG4gICAgdmFyIHBvaW50ID0gc3ZnLmNyZWF0ZVNWR1BvaW50KCk7XG4gICAgcG9pbnQueCA9IGV2ZW50LmNsaWVudFgsIHBvaW50LnkgPSBldmVudC5jbGllbnRZO1xuICAgIHBvaW50ID0gcG9pbnQubWF0cml4VHJhbnNmb3JtKG5vZGUuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKTtcbiAgICByZXR1cm4gW3BvaW50LngsIHBvaW50LnldO1xuICB9XG5cbiAgdmFyIHJlY3QgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICByZXR1cm4gW2V2ZW50LmNsaWVudFggLSByZWN0LmxlZnQgLSBub2RlLmNsaWVudExlZnQsIGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcCAtIG5vZGUuY2xpZW50VG9wXTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9uLCByb290fSBmcm9tIFwiLi9zZWxlY3Rpb24vaW5kZXhcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBuZXcgU2VsZWN0aW9uKFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKV0sIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKVxuICAgICAgOiBuZXcgU2VsZWN0aW9uKFtzZWxlY3RvciA9PSBudWxsID8gW10gOiBzZWxlY3Rvcl0sIHJvb3QpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZ1wiO1xuaW1wb3J0IGJpc2VjdG9yIGZyb20gXCIuL2Jpc2VjdG9yXCI7XG5cbnZhciBhc2NlbmRpbmdCaXNlY3QgPSBiaXNlY3Rvcihhc2NlbmRpbmcpO1xuZXhwb3J0IHZhciBiaXNlY3RSaWdodCA9IGFzY2VuZGluZ0Jpc2VjdC5yaWdodDtcbmV4cG9ydCB2YXIgYmlzZWN0TGVmdCA9IGFzY2VuZGluZ0Jpc2VjdC5sZWZ0O1xuZXhwb3J0IGRlZmF1bHQgYmlzZWN0UmlnaHQ7XG4iLCJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZ1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb21wYXJlKSB7XG4gIGlmIChjb21wYXJlLmxlbmd0aCA9PT0gMSkgY29tcGFyZSA9IGFzY2VuZGluZ0NvbXBhcmF0b3IoY29tcGFyZSk7XG4gIHJldHVybiB7XG4gICAgbGVmdDogZnVuY3Rpb24oYSwgeCwgbG8sIGhpKSB7XG4gICAgICBpZiAobG8gPT0gbnVsbCkgbG8gPSAwO1xuICAgICAgaWYgKGhpID09IG51bGwpIGhpID0gYS5sZW5ndGg7XG4gICAgICB3aGlsZSAobG8gPCBoaSkge1xuICAgICAgICB2YXIgbWlkID0gbG8gKyBoaSA+Pj4gMTtcbiAgICAgICAgaWYgKGNvbXBhcmUoYVttaWRdLCB4KSA8IDApIGxvID0gbWlkICsgMTtcbiAgICAgICAgZWxzZSBoaSA9IG1pZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsbztcbiAgICB9LFxuICAgIHJpZ2h0OiBmdW5jdGlvbihhLCB4LCBsbywgaGkpIHtcbiAgICAgIGlmIChsbyA9PSBudWxsKSBsbyA9IDA7XG4gICAgICBpZiAoaGkgPT0gbnVsbCkgaGkgPSBhLmxlbmd0aDtcbiAgICAgIHdoaWxlIChsbyA8IGhpKSB7XG4gICAgICAgIHZhciBtaWQgPSBsbyArIGhpID4+PiAxO1xuICAgICAgICBpZiAoY29tcGFyZShhW21pZF0sIHgpID4gMCkgaGkgPSBtaWQ7XG4gICAgICAgIGVsc2UgbG8gPSBtaWQgKyAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxvO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gYXNjZW5kaW5nQ29tcGFyYXRvcihmKSB7XG4gIHJldHVybiBmdW5jdGlvbihkLCB4KSB7XG4gICAgcmV0dXJuIGFzY2VuZGluZyhmKGQpLCB4KTtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHggPT09IG51bGwgPyBOYU4gOiAreDtcbn1cbiIsImltcG9ydCB2YXJpYW5jZSBmcm9tIFwiLi92YXJpYW5jZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhcnJheSwgZikge1xuICB2YXIgdiA9IHZhcmlhbmNlKGFycmF5LCBmKTtcbiAgcmV0dXJuIHYgPyBNYXRoLnNxcnQodikgOiB2O1xufVxuIiwiaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG0gPSAwLFxuICAgICAgaSA9IC0xLFxuICAgICAgbWVhbiA9IDAsXG4gICAgICB2YWx1ZSxcbiAgICAgIGRlbHRhLFxuICAgICAgc3VtID0gMDtcblxuICBpZiAodmFsdWVvZiA9PSBudWxsKSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICghaXNOYU4odmFsdWUgPSBudW1iZXIodmFsdWVzW2ldKSkpIHtcbiAgICAgICAgZGVsdGEgPSB2YWx1ZSAtIG1lYW47XG4gICAgICAgIG1lYW4gKz0gZGVsdGEgLyArK207XG4gICAgICAgIHN1bSArPSBkZWx0YSAqICh2YWx1ZSAtIG1lYW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVsc2Uge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAoIWlzTmFOKHZhbHVlID0gbnVtYmVyKHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSkpIHtcbiAgICAgICAgZGVsdGEgPSB2YWx1ZSAtIG1lYW47XG4gICAgICAgIG1lYW4gKz0gZGVsdGEgLyArK207XG4gICAgICAgIHN1bSArPSBkZWx0YSAqICh2YWx1ZSAtIG1lYW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChtID4gMSkgcmV0dXJuIHN1bSAvIChtIC0gMSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgaSA9IC0xLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXg7XG5cbiAgaWYgKHZhbHVlb2YgPT0gbnVsbCkge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIEZpbmQgdGhlIGZpcnN0IGNvbXBhcmFibGUgdmFsdWUuXG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVzW2ldKSAhPSBudWxsICYmIHZhbHVlID49IHZhbHVlKSB7XG4gICAgICAgIG1pbiA9IG1heCA9IHZhbHVlO1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBDb21wYXJlIHRoZSByZW1haW5pbmcgdmFsdWVzLlxuICAgICAgICAgIGlmICgodmFsdWUgPSB2YWx1ZXNbaV0pICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChtaW4gPiB2YWx1ZSkgbWluID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAobWF4IDwgdmFsdWUpIG1heCA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVsc2Uge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIEZpbmQgdGhlIGZpcnN0IGNvbXBhcmFibGUgdmFsdWUuXG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZXNbaV0sIGksIHZhbHVlcykpICE9IG51bGwgJiYgdmFsdWUgPj0gdmFsdWUpIHtcbiAgICAgICAgbWluID0gbWF4ID0gdmFsdWU7XG4gICAgICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIENvbXBhcmUgdGhlIHJlbWFpbmluZyB2YWx1ZXMuXG4gICAgICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAobWluID4gdmFsdWUpIG1pbiA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKG1heCA8IHZhbHVlKSBtYXggPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gW21pbiwgbWF4XTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gIHN0YXJ0ID0gK3N0YXJ0LCBzdG9wID0gK3N0b3AsIHN0ZXAgPSAobiA9IGFyZ3VtZW50cy5sZW5ndGgpIDwgMiA/IChzdG9wID0gc3RhcnQsIHN0YXJ0ID0gMCwgMSkgOiBuIDwgMyA/IDEgOiArc3RlcDtcblxuICB2YXIgaSA9IC0xLFxuICAgICAgbiA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApKSB8IDAsXG4gICAgICByYW5nZSA9IG5ldyBBcnJheShuKTtcblxuICB3aGlsZSAoKytpIDwgbikge1xuICAgIHJhbmdlW2ldID0gc3RhcnQgKyBpICogc3RlcDtcbiAgfVxuXG4gIHJldHVybiByYW5nZTtcbn1cbiIsInZhciBlMTAgPSBNYXRoLnNxcnQoNTApLFxuICAgIGU1ID0gTWF0aC5zcXJ0KDEwKSxcbiAgICBlMiA9IE1hdGguc3FydCgyKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHZhciByZXZlcnNlLFxuICAgICAgaSA9IC0xLFxuICAgICAgbixcbiAgICAgIHRpY2tzLFxuICAgICAgc3RlcDtcblxuICBzdG9wID0gK3N0b3AsIHN0YXJ0ID0gK3N0YXJ0LCBjb3VudCA9ICtjb3VudDtcbiAgaWYgKHN0YXJ0ID09PSBzdG9wICYmIGNvdW50ID4gMCkgcmV0dXJuIFtzdGFydF07XG4gIGlmIChyZXZlcnNlID0gc3RvcCA8IHN0YXJ0KSBuID0gc3RhcnQsIHN0YXJ0ID0gc3RvcCwgc3RvcCA9IG47XG4gIGlmICgoc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KSkgPT09IDAgfHwgIWlzRmluaXRlKHN0ZXApKSByZXR1cm4gW107XG5cbiAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgc3RhcnQgPSBNYXRoLmNlaWwoc3RhcnQgLyBzdGVwKTtcbiAgICBzdG9wID0gTWF0aC5mbG9vcihzdG9wIC8gc3RlcCk7XG4gICAgdGlja3MgPSBuZXcgQXJyYXkobiA9IE1hdGguY2VpbChzdG9wIC0gc3RhcnQgKyAxKSk7XG4gICAgd2hpbGUgKCsraSA8IG4pIHRpY2tzW2ldID0gKHN0YXJ0ICsgaSkgKiBzdGVwO1xuICB9IGVsc2Uge1xuICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAqIHN0ZXApO1xuICAgIHN0b3AgPSBNYXRoLmNlaWwoc3RvcCAqIHN0ZXApO1xuICAgIHRpY2tzID0gbmV3IEFycmF5KG4gPSBNYXRoLmNlaWwoc3RhcnQgLSBzdG9wICsgMSkpO1xuICAgIHdoaWxlICgrK2kgPCBuKSB0aWNrc1tpXSA9IChzdGFydCAtIGkpIC8gc3RlcDtcbiAgfVxuXG4gIGlmIChyZXZlcnNlKSB0aWNrcy5yZXZlcnNlKCk7XG5cbiAgcmV0dXJuIHRpY2tzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgdmFyIHN0ZXAgPSAoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSxcbiAgICAgIHBvd2VyID0gTWF0aC5mbG9vcihNYXRoLmxvZyhzdGVwKSAvIE1hdGguTE4xMCksXG4gICAgICBlcnJvciA9IHN0ZXAgLyBNYXRoLnBvdygxMCwgcG93ZXIpO1xuICByZXR1cm4gcG93ZXIgPj0gMFxuICAgICAgPyAoZXJyb3IgPj0gZTEwID8gMTAgOiBlcnJvciA+PSBlNSA/IDUgOiBlcnJvciA+PSBlMiA/IDIgOiAxKSAqIE1hdGgucG93KDEwLCBwb3dlcilcbiAgICAgIDogLU1hdGgucG93KDEwLCAtcG93ZXIpIC8gKGVycm9yID49IGUxMCA/IDEwIDogZXJyb3IgPj0gZTUgPyA1IDogZXJyb3IgPj0gZTIgPyAyIDogMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgdmFyIHN0ZXAwID0gTWF0aC5hYnMoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSxcbiAgICAgIHN0ZXAxID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2coc3RlcDApIC8gTWF0aC5MTjEwKSksXG4gICAgICBlcnJvciA9IHN0ZXAwIC8gc3RlcDE7XG4gIGlmIChlcnJvciA+PSBlMTApIHN0ZXAxICo9IDEwO1xuICBlbHNlIGlmIChlcnJvciA+PSBlNSkgc3RlcDEgKj0gNTtcbiAgZWxzZSBpZiAoZXJyb3IgPj0gZTIpIHN0ZXAxICo9IDI7XG4gIHJldHVybiBzdG9wIDwgc3RhcnQgPyAtc3RlcDEgOiBzdGVwMTtcbn1cbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgcCwgdmFsdWVvZikge1xuICBpZiAodmFsdWVvZiA9PSBudWxsKSB2YWx1ZW9mID0gbnVtYmVyO1xuICBpZiAoIShuID0gdmFsdWVzLmxlbmd0aCkpIHJldHVybjtcbiAgaWYgKChwID0gK3ApIDw9IDAgfHwgbiA8IDIpIHJldHVybiArdmFsdWVvZih2YWx1ZXNbMF0sIDAsIHZhbHVlcyk7XG4gIGlmIChwID49IDEpIHJldHVybiArdmFsdWVvZih2YWx1ZXNbbiAtIDFdLCBuIC0gMSwgdmFsdWVzKTtcbiAgdmFyIG4sXG4gICAgICBpID0gKG4gLSAxKSAqIHAsXG4gICAgICBpMCA9IE1hdGguZmxvb3IoaSksXG4gICAgICB2YWx1ZTAgPSArdmFsdWVvZih2YWx1ZXNbaTBdLCBpMCwgdmFsdWVzKSxcbiAgICAgIHZhbHVlMSA9ICt2YWx1ZW9mKHZhbHVlc1tpMCArIDFdLCBpMCArIDEsIHZhbHVlcyk7XG4gIHJldHVybiB2YWx1ZTAgKyAodmFsdWUxIC0gdmFsdWUwKSAqIChpIC0gaTApO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIGkgPSAtMSxcbiAgICAgIHZhbHVlLFxuICAgICAgbWF4O1xuXG4gIGlmICh2YWx1ZW9mID09IG51bGwpIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlc1tpXSkgIT0gbnVsbCAmJiB2YWx1ZSA+PSB2YWx1ZSkge1xuICAgICAgICBtYXggPSB2YWx1ZTtcbiAgICAgICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gQ29tcGFyZSB0aGUgcmVtYWluaW5nIHZhbHVlcy5cbiAgICAgICAgICBpZiAoKHZhbHVlID0gdmFsdWVzW2ldKSAhPSBudWxsICYmIHZhbHVlID4gbWF4KSB7XG4gICAgICAgICAgICBtYXggPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSAhPSBudWxsICYmIHZhbHVlID49IHZhbHVlKSB7XG4gICAgICAgIG1heCA9IHZhbHVlO1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBDb21wYXJlIHRoZSByZW1haW5pbmcgdmFsdWVzLlxuICAgICAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgIT0gbnVsbCAmJiB2YWx1ZSA+IG1heCkge1xuICAgICAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1heDtcbn1cbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBtID0gbixcbiAgICAgIGkgPSAtMSxcbiAgICAgIHZhbHVlLFxuICAgICAgc3VtID0gMDtcblxuICBpZiAodmFsdWVvZiA9PSBudWxsKSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICghaXNOYU4odmFsdWUgPSBudW1iZXIodmFsdWVzW2ldKSkpIHN1bSArPSB2YWx1ZTtcbiAgICAgIGVsc2UgLS1tO1xuICAgIH1cbiAgfVxuXG4gIGVsc2Uge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAoIWlzTmFOKHZhbHVlID0gbnVtYmVyKHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSkpIHN1bSArPSB2YWx1ZTtcbiAgICAgIGVsc2UgLS1tO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtKSByZXR1cm4gc3VtIC8gbTtcbn1cbiIsImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nXCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlclwiO1xuaW1wb3J0IHF1YW50aWxlIGZyb20gXCIuL3F1YW50aWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBpID0gLTEsXG4gICAgICB2YWx1ZSxcbiAgICAgIG51bWJlcnMgPSBbXTtcblxuICBpZiAodmFsdWVvZiA9PSBudWxsKSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICghaXNOYU4odmFsdWUgPSBudW1iZXIodmFsdWVzW2ldKSkpIHtcbiAgICAgICAgbnVtYmVycy5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKCFpc05hTih2YWx1ZSA9IG51bWJlcih2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkpKSB7XG4gICAgICAgIG51bWJlcnMucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHF1YW50aWxlKG51bWJlcnMuc29ydChhc2NlbmRpbmcpLCAwLjUpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIGkgPSAtMSxcbiAgICAgIHZhbHVlLFxuICAgICAgbWluO1xuXG4gIGlmICh2YWx1ZW9mID09IG51bGwpIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlc1tpXSkgIT0gbnVsbCAmJiB2YWx1ZSA+PSB2YWx1ZSkge1xuICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gQ29tcGFyZSB0aGUgcmVtYWluaW5nIHZhbHVlcy5cbiAgICAgICAgICBpZiAoKHZhbHVlID0gdmFsdWVzW2ldKSAhPSBudWxsICYmIG1pbiA+IHZhbHVlKSB7XG4gICAgICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBGaW5kIHRoZSBmaXJzdCBjb21wYXJhYmxlIHZhbHVlLlxuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSAhPSBudWxsICYmIHZhbHVlID49IHZhbHVlKSB7XG4gICAgICAgIG1pbiA9IHZhbHVlO1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBDb21wYXJlIHRoZSByZW1haW5pbmcgdmFsdWVzLlxuICAgICAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgIT0gbnVsbCAmJiBtaW4gPiB2YWx1ZSkge1xuICAgICAgICAgICAgbWluID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1pbjtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBpID0gLTEsXG4gICAgICB2YWx1ZSxcbiAgICAgIHN1bSA9IDA7XG5cbiAgaWYgKHZhbHVlb2YgPT0gbnVsbCkge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAodmFsdWUgPSArdmFsdWVzW2ldKSBzdW0gKz0gdmFsdWU7IC8vIE5vdGU6IHplcm8gYW5kIG51bGwgYXJlIGVxdWl2YWxlbnQuXG4gICAgfVxuICB9XG5cbiAgZWxzZSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICh2YWx1ZSA9ICt2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgc3VtICs9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdW07XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCDCqSAyMDE1IC0gMjAxOCBUaGUgQnJvYWQgSW5zdGl0dXRlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgKGh0dHBzOi8vZ2l0aHViLmNvbS9icm9hZGluc3RpdHV0ZS9ndGV4LXZpei9ibG9iL21hc3Rlci9MSUNFTlNFLm1kKVxuICovXG4vKipcbiAqIENyZWF0ZXMgYW4gU1ZHXG4gKiBAcGFyYW0gaWQge1N0cmluZ30gYSBET00gZWxlbWVudCBJRCB0aGF0IHN0YXJ0cyB3aXRoIGEgXCIjXCJcbiAqIEBwYXJhbSB3aWR0aCB7TnVtZXJpY31cbiAqIEBwYXJhbSBoZWlnaHQge051bWVyaWN9XG4gKiBAcGFyYW0gbWFyZ2luIHtPYmplY3R9IHdpdGggdHdvIGF0dHJpYnV0ZXM6IHdpZHRoIGFuZCBoZWlnaHRcbiAqIEByZXR1cm4ge1NlbGVjdGlvbn0gdGhlIGQzIHNlbGVjdGlvbiBvYmplY3Qgb2YgdGhlIFNWR1xuICovXG5cbmltcG9ydCB7c2VsZWN0fSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge3JhbmdlfSBmcm9tIFwiZDMtYXJyYXlcIjtcblxuLyoqXG4gKlxuICogQHBhcmFtIGlkIHtTdHJpbmd9IHRoZSBwYXJlbnQgZG9tIElEXG4gKiBAcGFyYW0gd2lkdGgge051bWVyaWN9OiB0aGUgb3V0ZXIgd2lkdGhcbiAqIEBwYXJhbSBoZWlnaHQge051bWVyaWN9OiB0aGUgb3V0ZXIgaGVpZ2h0XG4gKiBAcGFyYW0gbWFyZ2luIHtPYmplY3R9IHdpdGggYXR0cjogbGVmdCwgdG9wXG4gKiBAcGFyYW0gc3ZnSWQge1N0cmluZ31cbiAqIEByZXR1cm5zIHsqfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3ZnKGlkLCB3aWR0aCwgaGVpZ2h0LCBtYXJnaW4sIHN2Z0lkPXVuZGVmaW5lZCl7XG4gICAgaWYgKHN2Z0lkPT09dW5kZWZpbmVkKSBzdmdJZD1gJHtpZH0tc3ZnYDtcbiAgICByZXR1cm4gc2VsZWN0KFwiI1wiK2lkKS5hcHBlbmQoXCJzdmdcIilcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB3aWR0aClcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgaGVpZ2h0KVxuICAgICAgICAuYXR0cihcImlkXCIsIHN2Z0lkKVxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7bWFyZ2luLmxlZnR9LCAke21hcmdpbi50b3B9KWApXG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBzdmdPYmpcbiAqIEBwYXJhbSBkb3dubG9hZEZpbGVOYW1lIHtTdHJpbmd9XG4gKiBAcGFyYW0gdGVtcERvd25sb2FkRGl2SWQge1N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvd25sb2FkU3ZnKHN2Z09iaiwgZG93bmxvYWRGaWxlTmFtZSwgdGVtcERvd25sb2FkRGl2SWQpe1xuICAgIGNvbnNvbGUubG9nKHN2Z09iaik7XG4gICAgdmFyICRzdmdDb3B5ID0gc3ZnT2JqLmNsb25lKClcbiAgICAuYXR0cihcInZlcnNpb25cIiwgXCIxLjFcIilcbiAgICAuYXR0cihcInhtbG5zXCIsIFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIik7XG5cbiAgICAvLyBwYXJzZSBhbmQgYWRkIHRoZSBDU1Mgc3R5bGluZyB1c2VkIGJ5IHRoZSBTVkdcbiAgICB2YXIgc3R5bGVzID0gcGFyc2VDc3NTdHlsZXMoc3ZnT2JqLmdldCgpKTtcbiAgICAkc3ZnQ29weS5wcmVwZW5kKHN0eWxlcyk7XG5cbiAgICAkKFwiI1wiICsgdGVtcERvd25sb2FkRGl2SWQpLmh0bWwoJycpLmhpZGUoKTtcbiAgICB2YXIgc3ZnSHRtbCA9ICQoXCIjXCIgKyB0ZW1wRG93bmxvYWREaXZJZCkuYXBwZW5kKCRzdmdDb3B5KS5odG1sKCk7XG5cbiAgICB2YXIgc3ZnQmxvYiA9IG5ldyBCbG9iKFtzdmdIdG1sXSwge3R5cGU6IFwiaW1hZ2Uvc3ZnK3htbFwifSk7XG4gICAgc2F2ZUFzKHN2Z0Jsb2IsIGRvd25sb2FkRmlsZU5hbWUpO1xuXG4gICAgLy8gY2xlYXIgdGhlIHRlbXAgZG93bmxvYWQgZGl2XG4gICAgJChcIiNcIiArIHRlbXBEb3dubG9hZERpdklkKS5odG1sKCcnKS5oaWRlKCk7XG59XG4vKipcbiAqIEEgZnVuY3Rpb24gZm9yIHBhcnNpbmcgdGhlIENTUyBzdHlsZSBzaGVldCBhbmQgaW5jbHVkaW5nIHRoZSBzdHlsZSBwcm9wZXJ0aWVzIGluIHRoZSBkb3dubG9hZGFibGUgU1ZHLlxuICogQHBhcmFtIGRvbVxuICogQHJldHVybnMge0VsZW1lbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNzc1N0eWxlcyAoZG9tKSB7XG4gICAgdmFyIHVzZWQgPSBcIlwiO1xuICAgIHZhciBzaGVldHMgPSBkb2N1bWVudC5zdHlsZVNoZWV0cztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2hlZXRzLmxlbmd0aDsgaSsrKSB7IC8vIFRPRE86IHdhbGsgdGhyb3VnaCB0aGlzIGJsb2NrIG9mIGNvZGVcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHNoZWV0c1tpXS5jc3NSdWxlcyA9PSBudWxsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHZhciBydWxlcyA9IHNoZWV0c1tpXS5jc3NSdWxlcztcblxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBydWxlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBydWxlID0gcnVsZXNbal07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihydWxlLnN0eWxlKSAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbGVtcztcbiAgICAgICAgICAgICAgICAgICAgLy9Tb21lIHNlbGVjdG9ycyB3b24ndCB3b3JrLCBhbmQgbW9zdCBvZiB0aGVzZSBkb24ndCBtYXR0ZXIuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtcyA9ICQoZG9tKS5maW5kKHJ1bGUuc2VsZWN0b3JUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VkICs9IHJ1bGUuc2VsZWN0b3JUZXh0ICsgXCIgeyBcIiArIHJ1bGUuc3R5bGUuY3NzVGV4dCArIFwiIH1cXG5cIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gSW4gRmlyZWZveCwgaWYgc3R5bGVzaGVldCBvcmlnaW5hdGVzIGZyb20gYSBkaWZmIGRvbWFpbixcbiAgICAgICAgICAgIC8vIHRyeWluZyB0byBhY2Nlc3MgdGhlIGNzc1J1bGVzIHdpbGwgdGhyb3cgYSBTZWN1cml0eUVycm9yLlxuICAgICAgICAgICAgLy8gSGVuY2UsIHdlIG11c3QgdXNlIGEgdHJ5L2NhdGNoIHRvIGhhbmRsZSB0aGlzIGluIEZpcmVmb3hcbiAgICAgICAgICAgIGlmIChlLm5hbWUgIT09ICdTZWN1cml0eUVycm9yJykgdGhyb3cgZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHMuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvY3NzJyk7XG4gICAgcy5pbm5lckhUTUwgPSBcIjwhW0NEQVRBW1xcblwiICsgdXNlZCArIFwiXFxuXV0+XCI7XG5cbiAgICByZXR1cm4gcztcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIGxpc3Qgb2YgeCp5IGRhdGEgb2JqZWN0cyB3aXRoIHJhbmRvbSB2YWx1ZXNcbiAqIFRoZSBkYXRhIG9iamVjdCBoYXMgdGhpcyBzdHJ1Y3R1cmU6IHt4OiB4bGFiZWwsIHk6IHlsYWJlbCwgdmFsdWU6IHNvbWUgdmFsdWUsIGRpc3BsYXlWYWx1ZTogc29tZSB2YWx1ZX1cbiAqIEBwYXJhbSBwYXJcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tTWF0cml4KHBhcj17eDoyMCwgeToyMCwgc2NhbGVGYWN0b3I6MX0pe1xuICAgIGxldCBYID0gcmFuZ2UoMSwgcGFyLngrMSk7IC8vIGdlbmVyYXRlcyBhIDEtYmFzZWQgbGlzdC5cbiAgICBsZXQgWSA9IHJhbmdlKDEsIHBhci55KzEpO1xuICAgIGxldCBkYXRhID0gW107XG4gICAgWC5mb3JFYWNoKCh4KT0+e1xuICAgICAgICB4ID0gJ3gnICsgeC50b1N0cmluZygpO1xuICAgICAgICBZLmZvckVhY2goKHkpPT57XG4gICAgICAgICAgICB5ID0gJ3knICsgeS50b1N0cmluZygpO1xuICAgICAgICAgICAgbGV0IHYgPSBNYXRoLnJhbmRvbSgpKnBhci5zY2FsZUZhY3RvcjtcbiAgICAgICAgICAgIGRhdGEucHVzaCh7XG4gICAgICAgICAgICAgICAgeDogeCxcbiAgICAgICAgICAgICAgICB5OiB5LFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2LFxuICAgICAgICAgICAgICAgIGRpc3BsYXlWYWx1ZTogcGFyc2VGbG9hdCh2LnRvRXhwb25lbnRpYWwoKSkudG9QcmVjaXNpb24oMylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH0pO1xuICAgIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgbGlzdCBvZiByYW5kb20gdmFsdWVzXG4gKiBAcGFyYW0gcGFyXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVJhbmRvbUxpc3QocGFyPXtuOjEwMCwgc2NhbGVGYWN0b3I6MX0pIHtcbiAgICBsZXQgWCA9IHJhbmdlKDAsIHBhci5uKTsgLy8gZ2VuZXJhdGVzIGEgMS1iYXNlZCBsaXN0LlxuICAgIGxldCBkYXRhID0gW107XG4gICAgcmV0dXJuIFgubWFwKCh4KSA9PiBNYXRoLnJhbmRvbSgpICogcGFyLnNjYWxlRmFjdG9yKTtcblxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKTtcbn1cbiIsImltcG9ydCBkZWZhdWx0U291cmNlIGZyb20gXCIuL2RlZmF1bHRTb3VyY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHNvdXJjZVJhbmRvbU5vcm1hbChzb3VyY2UpIHtcbiAgZnVuY3Rpb24gcmFuZG9tTm9ybWFsKG11LCBzaWdtYSkge1xuICAgIHZhciB4LCByO1xuICAgIG11ID0gbXUgPT0gbnVsbCA/IDAgOiArbXU7XG4gICAgc2lnbWEgPSBzaWdtYSA9PSBudWxsID8gMSA6ICtzaWdtYTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgeTtcblxuICAgICAgLy8gSWYgYXZhaWxhYmxlLCB1c2UgdGhlIHNlY29uZCBwcmV2aW91c2x5LWdlbmVyYXRlZCB1bmlmb3JtIHJhbmRvbS5cbiAgICAgIGlmICh4ICE9IG51bGwpIHkgPSB4LCB4ID0gbnVsbDtcblxuICAgICAgLy8gT3RoZXJ3aXNlLCBnZW5lcmF0ZSBhIG5ldyB4IGFuZCB5LlxuICAgICAgZWxzZSBkbyB7XG4gICAgICAgIHggPSBzb3VyY2UoKSAqIDIgLSAxO1xuICAgICAgICB5ID0gc291cmNlKCkgKiAyIC0gMTtcbiAgICAgICAgciA9IHggKiB4ICsgeSAqIHk7XG4gICAgICB9IHdoaWxlICghciB8fCByID4gMSk7XG5cbiAgICAgIHJldHVybiBtdSArIHNpZ21hICogeSAqIE1hdGguc3FydCgtMiAqIE1hdGgubG9nKHIpIC8gcik7XG4gICAgfTtcbiAgfVxuXG4gIHJhbmRvbU5vcm1hbC5zb3VyY2UgPSBzb3VyY2VSYW5kb21Ob3JtYWw7XG5cbiAgcmV0dXJuIHJhbmRvbU5vcm1hbDtcbn0pKGRlZmF1bHRTb3VyY2UpO1xuIiwiZXhwb3J0IHZhciBwcmVmaXggPSBcIiRcIjtcblxuZnVuY3Rpb24gTWFwKCkge31cblxuTWFwLnByb3RvdHlwZSA9IG1hcC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBNYXAsXG4gIGhhczogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIChwcmVmaXggKyBrZXkpIGluIHRoaXM7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIHRoaXNbcHJlZml4ICsga2V5XTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAgdGhpc1twcmVmaXggKyBrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHJlbW92ZTogZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIHByb3BlcnR5ID0gcHJlZml4ICsga2V5O1xuICAgIHJldHVybiBwcm9wZXJ0eSBpbiB0aGlzICYmIGRlbGV0ZSB0aGlzW3Byb3BlcnR5XTtcbiAgfSxcbiAgY2xlYXI6IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSBkZWxldGUgdGhpc1twcm9wZXJ0eV07XG4gIH0sXG4gIGtleXM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIGtleXMucHVzaChwcm9wZXJ0eS5zbGljZSgxKSk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH0sXG4gIHZhbHVlczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSB2YWx1ZXMucHVzaCh0aGlzW3Byb3BlcnR5XSk7XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfSxcbiAgZW50cmllczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGVudHJpZXMgPSBbXTtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgZW50cmllcy5wdXNoKHtrZXk6IHByb3BlcnR5LnNsaWNlKDEpLCB2YWx1ZTogdGhpc1twcm9wZXJ0eV19KTtcbiAgICByZXR1cm4gZW50cmllcztcbiAgfSxcbiAgc2l6ZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNpemUgPSAwO1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSArK3NpemU7XG4gICAgcmV0dXJuIHNpemU7XG4gIH0sXG4gIGVtcHR5OiBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBlYWNoOiBmdW5jdGlvbihmKSB7XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIGYodGhpc1twcm9wZXJ0eV0sIHByb3BlcnR5LnNsaWNlKDEpLCB0aGlzKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gbWFwKG9iamVjdCwgZikge1xuICB2YXIgbWFwID0gbmV3IE1hcDtcblxuICAvLyBDb3B5IGNvbnN0cnVjdG9yLlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTWFwKSBvYmplY3QuZWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7IG1hcC5zZXQoa2V5LCB2YWx1ZSk7IH0pO1xuXG4gIC8vIEluZGV4IGFycmF5IGJ5IG51bWVyaWMgaW5kZXggb3Igc3BlY2lmaWVkIGtleSBmdW5jdGlvbi5cbiAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgdmFyIGkgPSAtMSxcbiAgICAgICAgbiA9IG9iamVjdC5sZW5ndGgsXG4gICAgICAgIG87XG5cbiAgICBpZiAoZiA9PSBudWxsKSB3aGlsZSAoKytpIDwgbikgbWFwLnNldChpLCBvYmplY3RbaV0pO1xuICAgIGVsc2Ugd2hpbGUgKCsraSA8IG4pIG1hcC5zZXQoZihvID0gb2JqZWN0W2ldLCBpLCBvYmplY3QpLCBvKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgb2JqZWN0IHRvIG1hcC5cbiAgZWxzZSBpZiAob2JqZWN0KSBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBtYXAuc2V0KGtleSwgb2JqZWN0W2tleV0pO1xuXG4gIHJldHVybiBtYXA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcDtcbiIsImltcG9ydCBtYXAgZnJvbSBcIi4vbWFwXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIga2V5cyA9IFtdLFxuICAgICAgc29ydEtleXMgPSBbXSxcbiAgICAgIHNvcnRWYWx1ZXMsXG4gICAgICByb2xsdXAsXG4gICAgICBuZXN0O1xuXG4gIGZ1bmN0aW9uIGFwcGx5KGFycmF5LCBkZXB0aCwgY3JlYXRlUmVzdWx0LCBzZXRSZXN1bHQpIHtcbiAgICBpZiAoZGVwdGggPj0ga2V5cy5sZW5ndGgpIHtcbiAgICAgIGlmIChzb3J0VmFsdWVzICE9IG51bGwpIGFycmF5LnNvcnQoc29ydFZhbHVlcyk7XG4gICAgICByZXR1cm4gcm9sbHVwICE9IG51bGwgPyByb2xsdXAoYXJyYXkpIDogYXJyYXk7XG4gICAgfVxuXG4gICAgdmFyIGkgPSAtMSxcbiAgICAgICAgbiA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAga2V5ID0ga2V5c1tkZXB0aCsrXSxcbiAgICAgICAga2V5VmFsdWUsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZXNCeUtleSA9IG1hcCgpLFxuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIHJlc3VsdCA9IGNyZWF0ZVJlc3VsdCgpO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICh2YWx1ZXMgPSB2YWx1ZXNCeUtleS5nZXQoa2V5VmFsdWUgPSBrZXkodmFsdWUgPSBhcnJheVtpXSkgKyBcIlwiKSkge1xuICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZXNCeUtleS5zZXQoa2V5VmFsdWUsIFt2YWx1ZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhbHVlc0J5S2V5LmVhY2goZnVuY3Rpb24odmFsdWVzLCBrZXkpIHtcbiAgICAgIHNldFJlc3VsdChyZXN1bHQsIGtleSwgYXBwbHkodmFsdWVzLCBkZXB0aCwgY3JlYXRlUmVzdWx0LCBzZXRSZXN1bHQpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBlbnRyaWVzKG1hcCwgZGVwdGgpIHtcbiAgICBpZiAoKytkZXB0aCA+IGtleXMubGVuZ3RoKSByZXR1cm4gbWFwO1xuICAgIHZhciBhcnJheSwgc29ydEtleSA9IHNvcnRLZXlzW2RlcHRoIC0gMV07XG4gICAgaWYgKHJvbGx1cCAhPSBudWxsICYmIGRlcHRoID49IGtleXMubGVuZ3RoKSBhcnJheSA9IG1hcC5lbnRyaWVzKCk7XG4gICAgZWxzZSBhcnJheSA9IFtdLCBtYXAuZWFjaChmdW5jdGlvbih2LCBrKSB7IGFycmF5LnB1c2goe2tleTogaywgdmFsdWVzOiBlbnRyaWVzKHYsIGRlcHRoKX0pOyB9KTtcbiAgICByZXR1cm4gc29ydEtleSAhPSBudWxsID8gYXJyYXkuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBzb3J0S2V5KGEua2V5LCBiLmtleSk7IH0pIDogYXJyYXk7XG4gIH1cblxuICByZXR1cm4gbmVzdCA9IHtcbiAgICBvYmplY3Q6IGZ1bmN0aW9uKGFycmF5KSB7IHJldHVybiBhcHBseShhcnJheSwgMCwgY3JlYXRlT2JqZWN0LCBzZXRPYmplY3QpOyB9LFxuICAgIG1hcDogZnVuY3Rpb24oYXJyYXkpIHsgcmV0dXJuIGFwcGx5KGFycmF5LCAwLCBjcmVhdGVNYXAsIHNldE1hcCk7IH0sXG4gICAgZW50cmllczogZnVuY3Rpb24oYXJyYXkpIHsgcmV0dXJuIGVudHJpZXMoYXBwbHkoYXJyYXksIDAsIGNyZWF0ZU1hcCwgc2V0TWFwKSwgMCk7IH0sXG4gICAga2V5OiBmdW5jdGlvbihkKSB7IGtleXMucHVzaChkKTsgcmV0dXJuIG5lc3Q7IH0sXG4gICAgc29ydEtleXM6IGZ1bmN0aW9uKG9yZGVyKSB7IHNvcnRLZXlzW2tleXMubGVuZ3RoIC0gMV0gPSBvcmRlcjsgcmV0dXJuIG5lc3Q7IH0sXG4gICAgc29ydFZhbHVlczogZnVuY3Rpb24ob3JkZXIpIHsgc29ydFZhbHVlcyA9IG9yZGVyOyByZXR1cm4gbmVzdDsgfSxcbiAgICByb2xsdXA6IGZ1bmN0aW9uKGYpIHsgcm9sbHVwID0gZjsgcmV0dXJuIG5lc3Q7IH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT2JqZWN0KCkge1xuICByZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIHNldE9iamVjdChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTWFwKCkge1xuICByZXR1cm4gbWFwKCk7XG59XG5cbmZ1bmN0aW9uIHNldE1hcChtYXAsIGtleSwgdmFsdWUpIHtcbiAgbWFwLnNldChrZXksIHZhbHVlKTtcbn1cbiIsInZhciBhcnJheSA9IEFycmF5LnByb3RvdHlwZTtcblxuZXhwb3J0IHZhciBtYXAgPSBhcnJheS5tYXA7XG5leHBvcnQgdmFyIHNsaWNlID0gYXJyYXkuc2xpY2U7XG4iLCJpbXBvcnQge21hcH0gZnJvbSBcImQzLWNvbGxlY3Rpb25cIjtcbmltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5XCI7XG5cbmV4cG9ydCB2YXIgaW1wbGljaXQgPSB7bmFtZTogXCJpbXBsaWNpdFwifTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JkaW5hbChyYW5nZSkge1xuICB2YXIgaW5kZXggPSBtYXAoKSxcbiAgICAgIGRvbWFpbiA9IFtdLFxuICAgICAgdW5rbm93biA9IGltcGxpY2l0O1xuXG4gIHJhbmdlID0gcmFuZ2UgPT0gbnVsbCA/IFtdIDogc2xpY2UuY2FsbChyYW5nZSk7XG5cbiAgZnVuY3Rpb24gc2NhbGUoZCkge1xuICAgIHZhciBrZXkgPSBkICsgXCJcIiwgaSA9IGluZGV4LmdldChrZXkpO1xuICAgIGlmICghaSkge1xuICAgICAgaWYgKHVua25vd24gIT09IGltcGxpY2l0KSByZXR1cm4gdW5rbm93bjtcbiAgICAgIGluZGV4LnNldChrZXksIGkgPSBkb21haW4ucHVzaChkKSk7XG4gICAgfVxuICAgIHJldHVybiByYW5nZVsoaSAtIDEpICUgcmFuZ2UubGVuZ3RoXTtcbiAgfVxuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBkb21haW4uc2xpY2UoKTtcbiAgICBkb21haW4gPSBbXSwgaW5kZXggPSBtYXAoKTtcbiAgICB2YXIgaSA9IC0xLCBuID0gXy5sZW5ndGgsIGQsIGtleTtcbiAgICB3aGlsZSAoKytpIDwgbikgaWYgKCFpbmRleC5oYXMoa2V5ID0gKGQgPSBfW2ldKSArIFwiXCIpKSBpbmRleC5zZXQoa2V5LCBkb21haW4ucHVzaChkKSk7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gc2xpY2UuY2FsbChfKSwgc2NhbGUpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gb3JkaW5hbCgpXG4gICAgICAgIC5kb21haW4oZG9tYWluKVxuICAgICAgICAucmFuZ2UocmFuZ2UpXG4gICAgICAgIC51bmtub3duKHVua25vd24pO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cbiIsImltcG9ydCB7cmFuZ2UgYXMgc2VxdWVuY2V9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IG9yZGluYWwgZnJvbSBcIi4vb3JkaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiYW5kKCkge1xuICB2YXIgc2NhbGUgPSBvcmRpbmFsKCkudW5rbm93bih1bmRlZmluZWQpLFxuICAgICAgZG9tYWluID0gc2NhbGUuZG9tYWluLFxuICAgICAgb3JkaW5hbFJhbmdlID0gc2NhbGUucmFuZ2UsXG4gICAgICByYW5nZSA9IFswLCAxXSxcbiAgICAgIHN0ZXAsXG4gICAgICBiYW5kd2lkdGgsXG4gICAgICByb3VuZCA9IGZhbHNlLFxuICAgICAgcGFkZGluZ0lubmVyID0gMCxcbiAgICAgIHBhZGRpbmdPdXRlciA9IDAsXG4gICAgICBhbGlnbiA9IDAuNTtcblxuICBkZWxldGUgc2NhbGUudW5rbm93bjtcblxuICBmdW5jdGlvbiByZXNjYWxlKCkge1xuICAgIHZhciBuID0gZG9tYWluKCkubGVuZ3RoLFxuICAgICAgICByZXZlcnNlID0gcmFuZ2VbMV0gPCByYW5nZVswXSxcbiAgICAgICAgc3RhcnQgPSByYW5nZVtyZXZlcnNlIC0gMF0sXG4gICAgICAgIHN0b3AgPSByYW5nZVsxIC0gcmV2ZXJzZV07XG4gICAgc3RlcCA9IChzdG9wIC0gc3RhcnQpIC8gTWF0aC5tYXgoMSwgbiAtIHBhZGRpbmdJbm5lciArIHBhZGRpbmdPdXRlciAqIDIpO1xuICAgIGlmIChyb3VuZCkgc3RlcCA9IE1hdGguZmxvb3Ioc3RlcCk7XG4gICAgc3RhcnQgKz0gKHN0b3AgLSBzdGFydCAtIHN0ZXAgKiAobiAtIHBhZGRpbmdJbm5lcikpICogYWxpZ247XG4gICAgYmFuZHdpZHRoID0gc3RlcCAqICgxIC0gcGFkZGluZ0lubmVyKTtcbiAgICBpZiAocm91bmQpIHN0YXJ0ID0gTWF0aC5yb3VuZChzdGFydCksIGJhbmR3aWR0aCA9IE1hdGgucm91bmQoYmFuZHdpZHRoKTtcbiAgICB2YXIgdmFsdWVzID0gc2VxdWVuY2UobikubWFwKGZ1bmN0aW9uKGkpIHsgcmV0dXJuIHN0YXJ0ICsgc3RlcCAqIGk7IH0pO1xuICAgIHJldHVybiBvcmRpbmFsUmFuZ2UocmV2ZXJzZSA/IHZhbHVlcy5yZXZlcnNlKCkgOiB2YWx1ZXMpO1xuICB9XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRvbWFpbihfKSwgcmVzY2FsZSgpKSA6IGRvbWFpbigpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gWytfWzBdLCArX1sxXV0sIHJlc2NhbGUoKSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlUm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIHJhbmdlID0gWytfWzBdLCArX1sxXV0sIHJvdW5kID0gdHJ1ZSwgcmVzY2FsZSgpO1xuICB9O1xuXG4gIHNjYWxlLmJhbmR3aWR0aCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiYW5kd2lkdGg7XG4gIH07XG5cbiAgc2NhbGUuc3RlcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBzdGVwO1xuICB9O1xuXG4gIHNjYWxlLnJvdW5kID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJvdW5kID0gISFfLCByZXNjYWxlKCkpIDogcm91bmQ7XG4gIH07XG5cbiAgc2NhbGUucGFkZGluZyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRkaW5nSW5uZXIgPSBwYWRkaW5nT3V0ZXIgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBfKSksIHJlc2NhbGUoKSkgOiBwYWRkaW5nSW5uZXI7XG4gIH07XG5cbiAgc2NhbGUucGFkZGluZ0lubmVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmdJbm5lciA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIF8pKSwgcmVzY2FsZSgpKSA6IHBhZGRpbmdJbm5lcjtcbiAgfTtcblxuICBzY2FsZS5wYWRkaW5nT3V0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ091dGVyID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgXykpLCByZXNjYWxlKCkpIDogcGFkZGluZ091dGVyO1xuICB9O1xuXG4gIHNjYWxlLmFsaWduID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFsaWduID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgXykpLCByZXNjYWxlKCkpIDogYWxpZ247XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiYW5kKClcbiAgICAgICAgLmRvbWFpbihkb21haW4oKSlcbiAgICAgICAgLnJhbmdlKHJhbmdlKVxuICAgICAgICAucm91bmQocm91bmQpXG4gICAgICAgIC5wYWRkaW5nSW5uZXIocGFkZGluZ0lubmVyKVxuICAgICAgICAucGFkZGluZ091dGVyKHBhZGRpbmdPdXRlcilcbiAgICAgICAgLmFsaWduKGFsaWduKTtcbiAgfTtcblxuICByZXR1cm4gcmVzY2FsZSgpO1xufVxuXG5mdW5jdGlvbiBwb2ludGlzaChzY2FsZSkge1xuICB2YXIgY29weSA9IHNjYWxlLmNvcHk7XG5cbiAgc2NhbGUucGFkZGluZyA9IHNjYWxlLnBhZGRpbmdPdXRlcjtcbiAgZGVsZXRlIHNjYWxlLnBhZGRpbmdJbm5lcjtcbiAgZGVsZXRlIHNjYWxlLnBhZGRpbmdPdXRlcjtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHBvaW50aXNoKGNvcHkoKSk7XG4gIH07XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9pbnQoKSB7XG4gIHJldHVybiBwb2ludGlzaChiYW5kKCkucGFkZGluZ0lubmVyKDEpKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnN0cnVjdG9yLCBmYWN0b3J5LCBwcm90b3R5cGUpIHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gZmFjdG9yeS5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gIHByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kKHBhcmVudCwgZGVmaW5pdGlvbikge1xuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShwYXJlbnQucHJvdG90eXBlKTtcbiAgZm9yICh2YXIga2V5IGluIGRlZmluaXRpb24pIHByb3RvdHlwZVtrZXldID0gZGVmaW5pdGlvbltrZXldO1xuICByZXR1cm4gcHJvdG90eXBlO1xufVxuIiwiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBDb2xvcigpIHt9XG5cbmV4cG9ydCB2YXIgZGFya2VyID0gMC43O1xuZXhwb3J0IHZhciBicmlnaHRlciA9IDEgLyBkYXJrZXI7XG5cbnZhciByZUkgPSBcIlxcXFxzKihbKy1dP1xcXFxkKylcXFxccypcIixcbiAgICByZU4gPSBcIlxcXFxzKihbKy1dP1xcXFxkKlxcXFwuP1xcXFxkKyg/OltlRV1bKy1dP1xcXFxkKyk/KVxcXFxzKlwiLFxuICAgIHJlUCA9IFwiXFxcXHMqKFsrLV0/XFxcXGQqXFxcXC4/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pJVxcXFxzKlwiLFxuICAgIHJlSGV4MyA9IC9eIyhbMC05YS1mXXszfSkkLyxcbiAgICByZUhleDYgPSAvXiMoWzAtOWEtZl17Nn0pJC8sXG4gICAgcmVSZ2JJbnRlZ2VyID0gbmV3IFJlZ0V4cChcIl5yZ2JcXFxcKFwiICsgW3JlSSwgcmVJLCByZUldICsgXCJcXFxcKSRcIiksXG4gICAgcmVSZ2JQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5yZ2JcXFxcKFwiICsgW3JlUCwgcmVQLCByZVBdICsgXCJcXFxcKSRcIiksXG4gICAgcmVSZ2JhSW50ZWdlciA9IG5ldyBSZWdFeHAoXCJecmdiYVxcXFwoXCIgKyBbcmVJLCByZUksIHJlSSwgcmVOXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlUmdiYVBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXnJnYmFcXFxcKFwiICsgW3JlUCwgcmVQLCByZVAsIHJlTl0gKyBcIlxcXFwpJFwiKSxcbiAgICByZUhzbFBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXmhzbFxcXFwoXCIgKyBbcmVOLCByZVAsIHJlUF0gKyBcIlxcXFwpJFwiKSxcbiAgICByZUhzbGFQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5oc2xhXFxcXChcIiArIFtyZU4sIHJlUCwgcmVQLCByZU5dICsgXCJcXFxcKSRcIik7XG5cbnZhciBuYW1lZCA9IHtcbiAgYWxpY2VibHVlOiAweGYwZjhmZixcbiAgYW50aXF1ZXdoaXRlOiAweGZhZWJkNyxcbiAgYXF1YTogMHgwMGZmZmYsXG4gIGFxdWFtYXJpbmU6IDB4N2ZmZmQ0LFxuICBhenVyZTogMHhmMGZmZmYsXG4gIGJlaWdlOiAweGY1ZjVkYyxcbiAgYmlzcXVlOiAweGZmZTRjNCxcbiAgYmxhY2s6IDB4MDAwMDAwLFxuICBibGFuY2hlZGFsbW9uZDogMHhmZmViY2QsXG4gIGJsdWU6IDB4MDAwMGZmLFxuICBibHVldmlvbGV0OiAweDhhMmJlMixcbiAgYnJvd246IDB4YTUyYTJhLFxuICBidXJseXdvb2Q6IDB4ZGViODg3LFxuICBjYWRldGJsdWU6IDB4NWY5ZWEwLFxuICBjaGFydHJldXNlOiAweDdmZmYwMCxcbiAgY2hvY29sYXRlOiAweGQyNjkxZSxcbiAgY29yYWw6IDB4ZmY3ZjUwLFxuICBjb3JuZmxvd2VyYmx1ZTogMHg2NDk1ZWQsXG4gIGNvcm5zaWxrOiAweGZmZjhkYyxcbiAgY3JpbXNvbjogMHhkYzE0M2MsXG4gIGN5YW46IDB4MDBmZmZmLFxuICBkYXJrYmx1ZTogMHgwMDAwOGIsXG4gIGRhcmtjeWFuOiAweDAwOGI4YixcbiAgZGFya2dvbGRlbnJvZDogMHhiODg2MGIsXG4gIGRhcmtncmF5OiAweGE5YTlhOSxcbiAgZGFya2dyZWVuOiAweDAwNjQwMCxcbiAgZGFya2dyZXk6IDB4YTlhOWE5LFxuICBkYXJra2hha2k6IDB4YmRiNzZiLFxuICBkYXJrbWFnZW50YTogMHg4YjAwOGIsXG4gIGRhcmtvbGl2ZWdyZWVuOiAweDU1NmIyZixcbiAgZGFya29yYW5nZTogMHhmZjhjMDAsXG4gIGRhcmtvcmNoaWQ6IDB4OTkzMmNjLFxuICBkYXJrcmVkOiAweDhiMDAwMCxcbiAgZGFya3NhbG1vbjogMHhlOTk2N2EsXG4gIGRhcmtzZWFncmVlbjogMHg4ZmJjOGYsXG4gIGRhcmtzbGF0ZWJsdWU6IDB4NDgzZDhiLFxuICBkYXJrc2xhdGVncmF5OiAweDJmNGY0ZixcbiAgZGFya3NsYXRlZ3JleTogMHgyZjRmNGYsXG4gIGRhcmt0dXJxdW9pc2U6IDB4MDBjZWQxLFxuICBkYXJrdmlvbGV0OiAweDk0MDBkMyxcbiAgZGVlcHBpbms6IDB4ZmYxNDkzLFxuICBkZWVwc2t5Ymx1ZTogMHgwMGJmZmYsXG4gIGRpbWdyYXk6IDB4Njk2OTY5LFxuICBkaW1ncmV5OiAweDY5Njk2OSxcbiAgZG9kZ2VyYmx1ZTogMHgxZTkwZmYsXG4gIGZpcmVicmljazogMHhiMjIyMjIsXG4gIGZsb3JhbHdoaXRlOiAweGZmZmFmMCxcbiAgZm9yZXN0Z3JlZW46IDB4MjI4YjIyLFxuICBmdWNoc2lhOiAweGZmMDBmZixcbiAgZ2FpbnNib3JvOiAweGRjZGNkYyxcbiAgZ2hvc3R3aGl0ZTogMHhmOGY4ZmYsXG4gIGdvbGQ6IDB4ZmZkNzAwLFxuICBnb2xkZW5yb2Q6IDB4ZGFhNTIwLFxuICBncmF5OiAweDgwODA4MCxcbiAgZ3JlZW46IDB4MDA4MDAwLFxuICBncmVlbnllbGxvdzogMHhhZGZmMmYsXG4gIGdyZXk6IDB4ODA4MDgwLFxuICBob25leWRldzogMHhmMGZmZjAsXG4gIGhvdHBpbms6IDB4ZmY2OWI0LFxuICBpbmRpYW5yZWQ6IDB4Y2Q1YzVjLFxuICBpbmRpZ286IDB4NGIwMDgyLFxuICBpdm9yeTogMHhmZmZmZjAsXG4gIGtoYWtpOiAweGYwZTY4YyxcbiAgbGF2ZW5kZXI6IDB4ZTZlNmZhLFxuICBsYXZlbmRlcmJsdXNoOiAweGZmZjBmNSxcbiAgbGF3bmdyZWVuOiAweDdjZmMwMCxcbiAgbGVtb25jaGlmZm9uOiAweGZmZmFjZCxcbiAgbGlnaHRibHVlOiAweGFkZDhlNixcbiAgbGlnaHRjb3JhbDogMHhmMDgwODAsXG4gIGxpZ2h0Y3lhbjogMHhlMGZmZmYsXG4gIGxpZ2h0Z29sZGVucm9keWVsbG93OiAweGZhZmFkMixcbiAgbGlnaHRncmF5OiAweGQzZDNkMyxcbiAgbGlnaHRncmVlbjogMHg5MGVlOTAsXG4gIGxpZ2h0Z3JleTogMHhkM2QzZDMsXG4gIGxpZ2h0cGluazogMHhmZmI2YzEsXG4gIGxpZ2h0c2FsbW9uOiAweGZmYTA3YSxcbiAgbGlnaHRzZWFncmVlbjogMHgyMGIyYWEsXG4gIGxpZ2h0c2t5Ymx1ZTogMHg4N2NlZmEsXG4gIGxpZ2h0c2xhdGVncmF5OiAweDc3ODg5OSxcbiAgbGlnaHRzbGF0ZWdyZXk6IDB4Nzc4ODk5LFxuICBsaWdodHN0ZWVsYmx1ZTogMHhiMGM0ZGUsXG4gIGxpZ2h0eWVsbG93OiAweGZmZmZlMCxcbiAgbGltZTogMHgwMGZmMDAsXG4gIGxpbWVncmVlbjogMHgzMmNkMzIsXG4gIGxpbmVuOiAweGZhZjBlNixcbiAgbWFnZW50YTogMHhmZjAwZmYsXG4gIG1hcm9vbjogMHg4MDAwMDAsXG4gIG1lZGl1bWFxdWFtYXJpbmU6IDB4NjZjZGFhLFxuICBtZWRpdW1ibHVlOiAweDAwMDBjZCxcbiAgbWVkaXVtb3JjaGlkOiAweGJhNTVkMyxcbiAgbWVkaXVtcHVycGxlOiAweDkzNzBkYixcbiAgbWVkaXVtc2VhZ3JlZW46IDB4M2NiMzcxLFxuICBtZWRpdW1zbGF0ZWJsdWU6IDB4N2I2OGVlLFxuICBtZWRpdW1zcHJpbmdncmVlbjogMHgwMGZhOWEsXG4gIG1lZGl1bXR1cnF1b2lzZTogMHg0OGQxY2MsXG4gIG1lZGl1bXZpb2xldHJlZDogMHhjNzE1ODUsXG4gIG1pZG5pZ2h0Ymx1ZTogMHgxOTE5NzAsXG4gIG1pbnRjcmVhbTogMHhmNWZmZmEsXG4gIG1pc3R5cm9zZTogMHhmZmU0ZTEsXG4gIG1vY2Nhc2luOiAweGZmZTRiNSxcbiAgbmF2YWpvd2hpdGU6IDB4ZmZkZWFkLFxuICBuYXZ5OiAweDAwMDA4MCxcbiAgb2xkbGFjZTogMHhmZGY1ZTYsXG4gIG9saXZlOiAweDgwODAwMCxcbiAgb2xpdmVkcmFiOiAweDZiOGUyMyxcbiAgb3JhbmdlOiAweGZmYTUwMCxcbiAgb3JhbmdlcmVkOiAweGZmNDUwMCxcbiAgb3JjaGlkOiAweGRhNzBkNixcbiAgcGFsZWdvbGRlbnJvZDogMHhlZWU4YWEsXG4gIHBhbGVncmVlbjogMHg5OGZiOTgsXG4gIHBhbGV0dXJxdW9pc2U6IDB4YWZlZWVlLFxuICBwYWxldmlvbGV0cmVkOiAweGRiNzA5MyxcbiAgcGFwYXlhd2hpcDogMHhmZmVmZDUsXG4gIHBlYWNocHVmZjogMHhmZmRhYjksXG4gIHBlcnU6IDB4Y2Q4NTNmLFxuICBwaW5rOiAweGZmYzBjYixcbiAgcGx1bTogMHhkZGEwZGQsXG4gIHBvd2RlcmJsdWU6IDB4YjBlMGU2LFxuICBwdXJwbGU6IDB4ODAwMDgwLFxuICByZWJlY2NhcHVycGxlOiAweDY2MzM5OSxcbiAgcmVkOiAweGZmMDAwMCxcbiAgcm9zeWJyb3duOiAweGJjOGY4ZixcbiAgcm95YWxibHVlOiAweDQxNjllMSxcbiAgc2FkZGxlYnJvd246IDB4OGI0NTEzLFxuICBzYWxtb246IDB4ZmE4MDcyLFxuICBzYW5keWJyb3duOiAweGY0YTQ2MCxcbiAgc2VhZ3JlZW46IDB4MmU4YjU3LFxuICBzZWFzaGVsbDogMHhmZmY1ZWUsXG4gIHNpZW5uYTogMHhhMDUyMmQsXG4gIHNpbHZlcjogMHhjMGMwYzAsXG4gIHNreWJsdWU6IDB4ODdjZWViLFxuICBzbGF0ZWJsdWU6IDB4NmE1YWNkLFxuICBzbGF0ZWdyYXk6IDB4NzA4MDkwLFxuICBzbGF0ZWdyZXk6IDB4NzA4MDkwLFxuICBzbm93OiAweGZmZmFmYSxcbiAgc3ByaW5nZ3JlZW46IDB4MDBmZjdmLFxuICBzdGVlbGJsdWU6IDB4NDY4MmI0LFxuICB0YW46IDB4ZDJiNDhjLFxuICB0ZWFsOiAweDAwODA4MCxcbiAgdGhpc3RsZTogMHhkOGJmZDgsXG4gIHRvbWF0bzogMHhmZjYzNDcsXG4gIHR1cnF1b2lzZTogMHg0MGUwZDAsXG4gIHZpb2xldDogMHhlZTgyZWUsXG4gIHdoZWF0OiAweGY1ZGViMyxcbiAgd2hpdGU6IDB4ZmZmZmZmLFxuICB3aGl0ZXNtb2tlOiAweGY1ZjVmNSxcbiAgeWVsbG93OiAweGZmZmYwMCxcbiAgeWVsbG93Z3JlZW46IDB4OWFjZDMyXG59O1xuXG5kZWZpbmUoQ29sb3IsIGNvbG9yLCB7XG4gIGRpc3BsYXlhYmxlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpO1xuICB9LFxuICBoZXg6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnJnYigpLmhleCgpO1xuICB9LFxuICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucmdiKCkgKyBcIlwiO1xuICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29sb3IoZm9ybWF0KSB7XG4gIHZhciBtO1xuICBmb3JtYXQgPSAoZm9ybWF0ICsgXCJcIikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAobSA9IHJlSGV4My5leGVjKGZvcm1hdCkpID8gKG0gPSBwYXJzZUludChtWzFdLCAxNiksIG5ldyBSZ2IoKG0gPj4gOCAmIDB4ZikgfCAobSA+PiA0ICYgMHgwZjApLCAobSA+PiA0ICYgMHhmKSB8IChtICYgMHhmMCksICgobSAmIDB4ZikgPDwgNCkgfCAobSAmIDB4ZiksIDEpKSAvLyAjZjAwXG4gICAgICA6IChtID0gcmVIZXg2LmV4ZWMoZm9ybWF0KSkgPyByZ2JuKHBhcnNlSW50KG1bMV0sIDE2KSkgLy8gI2ZmMDAwMFxuICAgICAgOiAobSA9IHJlUmdiSW50ZWdlci5leGVjKGZvcm1hdCkpID8gbmV3IFJnYihtWzFdLCBtWzJdLCBtWzNdLCAxKSAvLyByZ2IoMjU1LCAwLCAwKVxuICAgICAgOiAobSA9IHJlUmdiUGVyY2VudC5leGVjKGZvcm1hdCkpID8gbmV3IFJnYihtWzFdICogMjU1IC8gMTAwLCBtWzJdICogMjU1IC8gMTAwLCBtWzNdICogMjU1IC8gMTAwLCAxKSAvLyByZ2IoMTAwJSwgMCUsIDAlKVxuICAgICAgOiAobSA9IHJlUmdiYUludGVnZXIuZXhlYyhmb3JtYXQpKSA/IHJnYmEobVsxXSwgbVsyXSwgbVszXSwgbVs0XSkgLy8gcmdiYSgyNTUsIDAsIDAsIDEpXG4gICAgICA6IChtID0gcmVSZ2JhUGVyY2VudC5leGVjKGZvcm1hdCkpID8gcmdiYShtWzFdICogMjU1IC8gMTAwLCBtWzJdICogMjU1IC8gMTAwLCBtWzNdICogMjU1IC8gMTAwLCBtWzRdKSAvLyByZ2IoMTAwJSwgMCUsIDAlLCAxKVxuICAgICAgOiAobSA9IHJlSHNsUGVyY2VudC5leGVjKGZvcm1hdCkpID8gaHNsYShtWzFdLCBtWzJdIC8gMTAwLCBtWzNdIC8gMTAwLCAxKSAvLyBoc2woMTIwLCA1MCUsIDUwJSlcbiAgICAgIDogKG0gPSByZUhzbGFQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBoc2xhKG1bMV0sIG1bMl0gLyAxMDAsIG1bM10gLyAxMDAsIG1bNF0pIC8vIGhzbGEoMTIwLCA1MCUsIDUwJSwgMSlcbiAgICAgIDogbmFtZWQuaGFzT3duUHJvcGVydHkoZm9ybWF0KSA/IHJnYm4obmFtZWRbZm9ybWF0XSlcbiAgICAgIDogZm9ybWF0ID09PSBcInRyYW5zcGFyZW50XCIgPyBuZXcgUmdiKE5hTiwgTmFOLCBOYU4sIDApXG4gICAgICA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHJnYm4obikge1xuICByZXR1cm4gbmV3IFJnYihuID4+IDE2ICYgMHhmZiwgbiA+PiA4ICYgMHhmZiwgbiAmIDB4ZmYsIDEpO1xufVxuXG5mdW5jdGlvbiByZ2JhKHIsIGcsIGIsIGEpIHtcbiAgaWYgKGEgPD0gMCkgciA9IGcgPSBiID0gTmFOO1xuICByZXR1cm4gbmV3IFJnYihyLCBnLCBiLCBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJnYkNvbnZlcnQobykge1xuICBpZiAoIShvIGluc3RhbmNlb2YgQ29sb3IpKSBvID0gY29sb3Iobyk7XG4gIGlmICghbykgcmV0dXJuIG5ldyBSZ2I7XG4gIG8gPSBvLnJnYigpO1xuICByZXR1cm4gbmV3IFJnYihvLnIsIG8uZywgby5iLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmdiKHIsIGcsIGIsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyByZ2JDb252ZXJ0KHIpIDogbmV3IFJnYihyLCBnLCBiLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZ2IociwgZywgYiwgb3BhY2l0eSkge1xuICB0aGlzLnIgPSArcjtcbiAgdGhpcy5nID0gK2c7XG4gIHRoaXMuYiA9ICtiO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKFJnYiwgcmdiLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XG4gICAgcmV0dXJuIG5ldyBSZ2IodGhpcy5yICogaywgdGhpcy5nICogaywgdGhpcy5iICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgcmV0dXJuIG5ldyBSZ2IodGhpcy5yICogaywgdGhpcy5nICogaywgdGhpcy5iICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgZGlzcGxheWFibGU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAoMCA8PSB0aGlzLnIgJiYgdGhpcy5yIDw9IDI1NSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5nICYmIHRoaXMuZyA8PSAyNTUpXG4gICAgICAgICYmICgwIDw9IHRoaXMuYiAmJiB0aGlzLmIgPD0gMjU1KVxuICAgICAgICAmJiAoMCA8PSB0aGlzLm9wYWNpdHkgJiYgdGhpcy5vcGFjaXR5IDw9IDEpO1xuICB9LFxuICBoZXg6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIiNcIiArIGhleCh0aGlzLnIpICsgaGV4KHRoaXMuZykgKyBoZXgodGhpcy5iKTtcbiAgfSxcbiAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhID0gdGhpcy5vcGFjaXR5OyBhID0gaXNOYU4oYSkgPyAxIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgYSkpO1xuICAgIHJldHVybiAoYSA9PT0gMSA/IFwicmdiKFwiIDogXCJyZ2JhKFwiKVxuICAgICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLnIpIHx8IDApKSArIFwiLCBcIlxuICAgICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLmcpIHx8IDApKSArIFwiLCBcIlxuICAgICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLmIpIHx8IDApKVxuICAgICAgICArIChhID09PSAxID8gXCIpXCIgOiBcIiwgXCIgKyBhICsgXCIpXCIpO1xuICB9XG59KSk7XG5cbmZ1bmN0aW9uIGhleCh2YWx1ZSkge1xuICB2YWx1ZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh2YWx1ZSkgfHwgMCkpO1xuICByZXR1cm4gKHZhbHVlIDwgMTYgPyBcIjBcIiA6IFwiXCIpICsgdmFsdWUudG9TdHJpbmcoMTYpO1xufVxuXG5mdW5jdGlvbiBoc2xhKGgsIHMsIGwsIGEpIHtcbiAgaWYgKGEgPD0gMCkgaCA9IHMgPSBsID0gTmFOO1xuICBlbHNlIGlmIChsIDw9IDAgfHwgbCA+PSAxKSBoID0gcyA9IE5hTjtcbiAgZWxzZSBpZiAocyA8PSAwKSBoID0gTmFOO1xuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhzbENvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG5ldyBIc2woby5oLCBvLnMsIG8ubCwgby5vcGFjaXR5KTtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIENvbG9yKSkgbyA9IGNvbG9yKG8pO1xuICBpZiAoIW8pIHJldHVybiBuZXcgSHNsO1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG87XG4gIG8gPSBvLnJnYigpO1xuICB2YXIgciA9IG8uciAvIDI1NSxcbiAgICAgIGcgPSBvLmcgLyAyNTUsXG4gICAgICBiID0gby5iIC8gMjU1LFxuICAgICAgbWluID0gTWF0aC5taW4ociwgZywgYiksXG4gICAgICBtYXggPSBNYXRoLm1heChyLCBnLCBiKSxcbiAgICAgIGggPSBOYU4sXG4gICAgICBzID0gbWF4IC0gbWluLFxuICAgICAgbCA9IChtYXggKyBtaW4pIC8gMjtcbiAgaWYgKHMpIHtcbiAgICBpZiAociA9PT0gbWF4KSBoID0gKGcgLSBiKSAvIHMgKyAoZyA8IGIpICogNjtcbiAgICBlbHNlIGlmIChnID09PSBtYXgpIGggPSAoYiAtIHIpIC8gcyArIDI7XG4gICAgZWxzZSBoID0gKHIgLSBnKSAvIHMgKyA0O1xuICAgIHMgLz0gbCA8IDAuNSA/IG1heCArIG1pbiA6IDIgLSBtYXggLSBtaW47XG4gICAgaCAqPSA2MDtcbiAgfSBlbHNlIHtcbiAgICBzID0gbCA+IDAgJiYgbCA8IDEgPyAwIDogaDtcbiAgfVxuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHNsKGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoc2xDb252ZXJ0KGgpIDogbmV3IEhzbChoLCBzLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmZ1bmN0aW9uIEhzbChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLnMgPSArcztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoSHNsLCBoc2wsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IEhzbCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgcmV0dXJuIG5ldyBIc2wodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGggPSB0aGlzLmggJSAzNjAgKyAodGhpcy5oIDwgMCkgKiAzNjAsXG4gICAgICAgIHMgPSBpc05hTihoKSB8fCBpc05hTih0aGlzLnMpID8gMCA6IHRoaXMucyxcbiAgICAgICAgbCA9IHRoaXMubCxcbiAgICAgICAgbTIgPSBsICsgKGwgPCAwLjUgPyBsIDogMSAtIGwpICogcyxcbiAgICAgICAgbTEgPSAyICogbCAtIG0yO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgaHNsMnJnYihoID49IDI0MCA/IGggLSAyNDAgOiBoICsgMTIwLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoIDwgMTIwID8gaCArIDI0MCA6IGggLSAxMjAsIG0xLCBtMiksXG4gICAgICB0aGlzLm9wYWNpdHlcbiAgICApO1xuICB9LFxuICBkaXNwbGF5YWJsZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICgwIDw9IHRoaXMucyAmJiB0aGlzLnMgPD0gMSB8fCBpc05hTih0aGlzLnMpKVxuICAgICAgICAmJiAoMCA8PSB0aGlzLmwgJiYgdGhpcy5sIDw9IDEpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH1cbn0pKTtcblxuLyogRnJvbSBGdkQgMTMuMzcsIENTUyBDb2xvciBNb2R1bGUgTGV2ZWwgMyAqL1xuZnVuY3Rpb24gaHNsMnJnYihoLCBtMSwgbTIpIHtcbiAgcmV0dXJuIChoIDwgNjAgPyBtMSArIChtMiAtIG0xKSAqIGggLyA2MFxuICAgICAgOiBoIDwgMTgwID8gbTJcbiAgICAgIDogaCA8IDI0MCA/IG0xICsgKG0yIC0gbTEpICogKDI0MCAtIGgpIC8gNjBcbiAgICAgIDogbTEpICogMjU1O1xufVxuIiwiZXhwb3J0IHZhciBkZWcycmFkID0gTWF0aC5QSSAvIDE4MDtcbmV4cG9ydCB2YXIgcmFkMmRlZyA9IDE4MCAvIE1hdGguUEk7XG4iLCJpbXBvcnQgZGVmaW5lLCB7ZXh0ZW5kfSBmcm9tIFwiLi9kZWZpbmVcIjtcbmltcG9ydCB7Q29sb3IsIHJnYkNvbnZlcnQsIFJnYn0gZnJvbSBcIi4vY29sb3JcIjtcbmltcG9ydCB7ZGVnMnJhZCwgcmFkMmRlZ30gZnJvbSBcIi4vbWF0aFwiO1xuXG4vLyBodHRwczovL2JldGEub2JzZXJ2YWJsZWhxLmNvbS9AbWJvc3RvY2svbGFiLWFuZC1yZ2JcbnZhciBLID0gMTgsXG4gICAgWG4gPSAwLjk2NDIyLFxuICAgIFluID0gMSxcbiAgICBabiA9IDAuODI1MjEsXG4gICAgdDAgPSA0IC8gMjksXG4gICAgdDEgPSA2IC8gMjksXG4gICAgdDIgPSAzICogdDEgKiB0MSxcbiAgICB0MyA9IHQxICogdDEgKiB0MTtcblxuZnVuY3Rpb24gbGFiQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgTGFiKSByZXR1cm4gbmV3IExhYihvLmwsIG8uYSwgby5iLCBvLm9wYWNpdHkpO1xuICBpZiAobyBpbnN0YW5jZW9mIEhjbCkge1xuICAgIGlmIChpc05hTihvLmgpKSByZXR1cm4gbmV3IExhYihvLmwsIDAsIDAsIG8ub3BhY2l0eSk7XG4gICAgdmFyIGggPSBvLmggKiBkZWcycmFkO1xuICAgIHJldHVybiBuZXcgTGFiKG8ubCwgTWF0aC5jb3MoaCkgKiBvLmMsIE1hdGguc2luKGgpICogby5jLCBvLm9wYWNpdHkpO1xuICB9XG4gIGlmICghKG8gaW5zdGFuY2VvZiBSZ2IpKSBvID0gcmdiQ29udmVydChvKTtcbiAgdmFyIHIgPSByZ2IybHJnYihvLnIpLFxuICAgICAgZyA9IHJnYjJscmdiKG8uZyksXG4gICAgICBiID0gcmdiMmxyZ2Ioby5iKSxcbiAgICAgIHkgPSB4eXoybGFiKCgwLjIyMjUwNDUgKiByICsgMC43MTY4Nzg2ICogZyArIDAuMDYwNjE2OSAqIGIpIC8gWW4pLCB4LCB6O1xuICBpZiAociA9PT0gZyAmJiBnID09PSBiKSB4ID0geiA9IHk7IGVsc2Uge1xuICAgIHggPSB4eXoybGFiKCgwLjQzNjA3NDcgKiByICsgMC4zODUwNjQ5ICogZyArIDAuMTQzMDgwNCAqIGIpIC8gWG4pO1xuICAgIHogPSB4eXoybGFiKCgwLjAxMzkzMjIgKiByICsgMC4wOTcxMDQ1ICogZyArIDAuNzE0MTczMyAqIGIpIC8gWm4pO1xuICB9XG4gIHJldHVybiBuZXcgTGFiKDExNiAqIHkgLSAxNiwgNTAwICogKHggLSB5KSwgMjAwICogKHkgLSB6KSwgby5vcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdyYXkobCwgb3BhY2l0eSkge1xuICByZXR1cm4gbmV3IExhYihsLCAwLCAwLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxhYihsLCBhLCBiLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gbGFiQ29udmVydChsKSA6IG5ldyBMYWIobCwgYSwgYiwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTGFiKGwsIGEsIGIsIG9wYWNpdHkpIHtcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMuYSA9ICthO1xuICB0aGlzLmIgPSArYjtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShMYWIsIGxhYiwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIG5ldyBMYWIodGhpcy5sICsgSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMuYSwgdGhpcy5iLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IExhYih0aGlzLmwgLSBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5hLCB0aGlzLmIsIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHkgPSAodGhpcy5sICsgMTYpIC8gMTE2LFxuICAgICAgICB4ID0gaXNOYU4odGhpcy5hKSA/IHkgOiB5ICsgdGhpcy5hIC8gNTAwLFxuICAgICAgICB6ID0gaXNOYU4odGhpcy5iKSA/IHkgOiB5IC0gdGhpcy5iIC8gMjAwO1xuICAgIHggPSBYbiAqIGxhYjJ4eXooeCk7XG4gICAgeSA9IFluICogbGFiMnh5eih5KTtcbiAgICB6ID0gWm4gKiBsYWIyeHl6KHopO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgbHJnYjJyZ2IoIDMuMTMzODU2MSAqIHggLSAxLjYxNjg2NjcgKiB5IC0gMC40OTA2MTQ2ICogeiksXG4gICAgICBscmdiMnJnYigtMC45Nzg3Njg0ICogeCArIDEuOTE2MTQxNSAqIHkgKyAwLjAzMzQ1NDAgKiB6KSxcbiAgICAgIGxyZ2IycmdiKCAwLjA3MTk0NTMgKiB4IC0gMC4yMjg5OTE0ICogeSArIDEuNDA1MjQyNyAqIHopLFxuICAgICAgdGhpcy5vcGFjaXR5XG4gICAgKTtcbiAgfVxufSkpO1xuXG5mdW5jdGlvbiB4eXoybGFiKHQpIHtcbiAgcmV0dXJuIHQgPiB0MyA/IE1hdGgucG93KHQsIDEgLyAzKSA6IHQgLyB0MiArIHQwO1xufVxuXG5mdW5jdGlvbiBsYWIyeHl6KHQpIHtcbiAgcmV0dXJuIHQgPiB0MSA/IHQgKiB0ICogdCA6IHQyICogKHQgLSB0MCk7XG59XG5cbmZ1bmN0aW9uIGxyZ2IycmdiKHgpIHtcbiAgcmV0dXJuIDI1NSAqICh4IDw9IDAuMDAzMTMwOCA/IDEyLjkyICogeCA6IDEuMDU1ICogTWF0aC5wb3coeCwgMSAvIDIuNCkgLSAwLjA1NSk7XG59XG5cbmZ1bmN0aW9uIHJnYjJscmdiKHgpIHtcbiAgcmV0dXJuICh4IC89IDI1NSkgPD0gMC4wNDA0NSA/IHggLyAxMi45MiA6IE1hdGgucG93KCh4ICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG59XG5cbmZ1bmN0aW9uIGhjbENvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIEhjbCkgcmV0dXJuIG5ldyBIY2woby5oLCBvLmMsIG8ubCwgby5vcGFjaXR5KTtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIExhYikpIG8gPSBsYWJDb252ZXJ0KG8pO1xuICBpZiAoby5hID09PSAwICYmIG8uYiA9PT0gMCkgcmV0dXJuIG5ldyBIY2woTmFOLCAwLCBvLmwsIG8ub3BhY2l0eSk7XG4gIHZhciBoID0gTWF0aC5hdGFuMihvLmIsIG8uYSkgKiByYWQyZGVnO1xuICByZXR1cm4gbmV3IEhjbChoIDwgMCA/IGggKyAzNjAgOiBoLCBNYXRoLnNxcnQoby5hICogby5hICsgby5iICogby5iKSwgby5sLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGNoKGwsIGMsIGgsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoY2xDb252ZXJ0KGwpIDogbmV3IEhjbChoLCBjLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoY2woaCwgYywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhjbENvbnZlcnQoaCkgOiBuZXcgSGNsKGgsIGMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhjbChoLCBjLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLmMgPSArYztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoSGNsLCBoY2wsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIHJldHVybiBuZXcgSGNsKHRoaXMuaCwgdGhpcy5jLCB0aGlzLmwgKyBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIG5ldyBIY2wodGhpcy5oLCB0aGlzLmMsIHRoaXMubCAtIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBsYWJDb252ZXJ0KHRoaXMpLnJnYigpO1xuICB9XG59KSk7XG4iLCJpbXBvcnQgZGVmaW5lLCB7ZXh0ZW5kfSBmcm9tIFwiLi9kZWZpbmVcIjtcbmltcG9ydCB7Q29sb3IsIHJnYkNvbnZlcnQsIFJnYiwgZGFya2VyLCBicmlnaHRlcn0gZnJvbSBcIi4vY29sb3JcIjtcbmltcG9ydCB7ZGVnMnJhZCwgcmFkMmRlZ30gZnJvbSBcIi4vbWF0aFwiO1xuXG52YXIgQSA9IC0wLjE0ODYxLFxuICAgIEIgPSArMS43ODI3NyxcbiAgICBDID0gLTAuMjkyMjcsXG4gICAgRCA9IC0wLjkwNjQ5LFxuICAgIEUgPSArMS45NzI5NCxcbiAgICBFRCA9IEUgKiBELFxuICAgIEVCID0gRSAqIEIsXG4gICAgQkNfREEgPSBCICogQyAtIEQgKiBBO1xuXG5mdW5jdGlvbiBjdWJlaGVsaXhDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBDdWJlaGVsaXgpIHJldHVybiBuZXcgQ3ViZWhlbGl4KG8uaCwgby5zLCBvLmwsIG8ub3BhY2l0eSk7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBSZ2IpKSBvID0gcmdiQ29udmVydChvKTtcbiAgdmFyIHIgPSBvLnIgLyAyNTUsXG4gICAgICBnID0gby5nIC8gMjU1LFxuICAgICAgYiA9IG8uYiAvIDI1NSxcbiAgICAgIGwgPSAoQkNfREEgKiBiICsgRUQgKiByIC0gRUIgKiBnKSAvIChCQ19EQSArIEVEIC0gRUIpLFxuICAgICAgYmwgPSBiIC0gbCxcbiAgICAgIGsgPSAoRSAqIChnIC0gbCkgLSBDICogYmwpIC8gRCxcbiAgICAgIHMgPSBNYXRoLnNxcnQoayAqIGsgKyBibCAqIGJsKSAvIChFICogbCAqICgxIC0gbCkpLCAvLyBOYU4gaWYgbD0wIG9yIGw9MVxuICAgICAgaCA9IHMgPyBNYXRoLmF0YW4yKGssIGJsKSAqIHJhZDJkZWcgLSAxMjAgOiBOYU47XG4gIHJldHVybiBuZXcgQ3ViZWhlbGl4KGggPCAwID8gaCArIDM2MCA6IGgsIHMsIGwsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGN1YmVoZWxpeChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gY3ViZWhlbGl4Q29udmVydChoKSA6IG5ldyBDdWJlaGVsaXgoaCwgcywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ3ViZWhlbGl4KGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgdGhpcy5oID0gK2g7XG4gIHRoaXMucyA9ICtzO1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShDdWJlaGVsaXgsIGN1YmVoZWxpeCwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGJyaWdodGVyIDogTWF0aC5wb3coYnJpZ2h0ZXIsIGspO1xuICAgIHJldHVybiBuZXcgQ3ViZWhlbGl4KHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IEN1YmVoZWxpeCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaCA9IGlzTmFOKHRoaXMuaCkgPyAwIDogKHRoaXMuaCArIDEyMCkgKiBkZWcycmFkLFxuICAgICAgICBsID0gK3RoaXMubCxcbiAgICAgICAgYSA9IGlzTmFOKHRoaXMucykgPyAwIDogdGhpcy5zICogbCAqICgxIC0gbCksXG4gICAgICAgIGNvc2ggPSBNYXRoLmNvcyhoKSxcbiAgICAgICAgc2luaCA9IE1hdGguc2luKGgpO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgMjU1ICogKGwgKyBhICogKEEgKiBjb3NoICsgQiAqIHNpbmgpKSxcbiAgICAgIDI1NSAqIChsICsgYSAqIChDICogY29zaCArIEQgKiBzaW5oKSksXG4gICAgICAyNTUgKiAobCArIGEgKiAoRSAqIGNvc2gpKSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH1cbn0pKTtcbiIsImV4cG9ydCBmdW5jdGlvbiBiYXNpcyh0MSwgdjAsIHYxLCB2MiwgdjMpIHtcbiAgdmFyIHQyID0gdDEgKiB0MSwgdDMgPSB0MiAqIHQxO1xuICByZXR1cm4gKCgxIC0gMyAqIHQxICsgMyAqIHQyIC0gdDMpICogdjBcbiAgICAgICsgKDQgLSA2ICogdDIgKyAzICogdDMpICogdjFcbiAgICAgICsgKDEgKyAzICogdDEgKyAzICogdDIgLSAzICogdDMpICogdjJcbiAgICAgICsgdDMgKiB2MykgLyA2O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoIC0gMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IHQgPD0gMCA/ICh0ID0gMCkgOiB0ID49IDEgPyAodCA9IDEsIG4gLSAxKSA6IE1hdGguZmxvb3IodCAqIG4pLFxuICAgICAgICB2MSA9IHZhbHVlc1tpXSxcbiAgICAgICAgdjIgPSB2YWx1ZXNbaSArIDFdLFxuICAgICAgICB2MCA9IGkgPiAwID8gdmFsdWVzW2kgLSAxXSA6IDIgKiB2MSAtIHYyLFxuICAgICAgICB2MyA9IGkgPCBuIC0gMSA/IHZhbHVlc1tpICsgMl0gOiAyICogdjIgLSB2MTtcbiAgICByZXR1cm4gYmFzaXMoKHQgLSBpIC8gbikgKiBuLCB2MCwgdjEsIHYyLCB2Myk7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuXG5mdW5jdGlvbiBsaW5lYXIoYSwgZCkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBhICsgdCAqIGQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGV4cG9uZW50aWFsKGEsIGIsIHkpIHtcbiAgcmV0dXJuIGEgPSBNYXRoLnBvdyhhLCB5KSwgYiA9IE1hdGgucG93KGIsIHkpIC0gYSwgeSA9IDEgLyB5LCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucG93KGEgKyB0ICogYiwgeSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBodWUoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkID4gMTgwIHx8IGQgPCAtMTgwID8gZCAtIDM2MCAqIE1hdGgucm91bmQoZCAvIDM2MCkgOiBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2FtbWEoeSkge1xuICByZXR1cm4gKHkgPSAreSkgPT09IDEgPyBub2dhbW1hIDogZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBiIC0gYSA/IGV4cG9uZW50aWFsKGEsIGIsIHkpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vZ2FtbWEoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuIiwiaW1wb3J0IHtyZ2IgYXMgY29sb3JSZ2J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGJhc2lzIGZyb20gXCIuL2Jhc2lzXCI7XG5pbXBvcnQgYmFzaXNDbG9zZWQgZnJvbSBcIi4vYmFzaXNDbG9zZWRcIjtcbmltcG9ydCBub2dhbW1hLCB7Z2FtbWF9IGZyb20gXCIuL2NvbG9yXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiByZ2JHYW1tYSh5KSB7XG4gIHZhciBjb2xvciA9IGdhbW1hKHkpO1xuXG4gIGZ1bmN0aW9uIHJnYihzdGFydCwgZW5kKSB7XG4gICAgdmFyIHIgPSBjb2xvcigoc3RhcnQgPSBjb2xvclJnYihzdGFydCkpLnIsIChlbmQgPSBjb2xvclJnYihlbmQpKS5yKSxcbiAgICAgICAgZyA9IGNvbG9yKHN0YXJ0LmcsIGVuZC5nKSxcbiAgICAgICAgYiA9IGNvbG9yKHN0YXJ0LmIsIGVuZC5iKSxcbiAgICAgICAgb3BhY2l0eSA9IG5vZ2FtbWEoc3RhcnQub3BhY2l0eSwgZW5kLm9wYWNpdHkpO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBzdGFydC5yID0gcih0KTtcbiAgICAgIHN0YXJ0LmcgPSBnKHQpO1xuICAgICAgc3RhcnQuYiA9IGIodCk7XG4gICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICAgIHJldHVybiBzdGFydCArIFwiXCI7XG4gICAgfTtcbiAgfVxuXG4gIHJnYi5nYW1tYSA9IHJnYkdhbW1hO1xuXG4gIHJldHVybiByZ2I7XG59KSgxKTtcblxuZnVuY3Rpb24gcmdiU3BsaW5lKHNwbGluZSkge1xuICByZXR1cm4gZnVuY3Rpb24oY29sb3JzKSB7XG4gICAgdmFyIG4gPSBjb2xvcnMubGVuZ3RoLFxuICAgICAgICByID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBnID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBiID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBpLCBjb2xvcjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBjb2xvciA9IGNvbG9yUmdiKGNvbG9yc1tpXSk7XG4gICAgICByW2ldID0gY29sb3IuciB8fCAwO1xuICAgICAgZ1tpXSA9IGNvbG9yLmcgfHwgMDtcbiAgICAgIGJbaV0gPSBjb2xvci5iIHx8IDA7XG4gICAgfVxuICAgIHIgPSBzcGxpbmUocik7XG4gICAgZyA9IHNwbGluZShnKTtcbiAgICBiID0gc3BsaW5lKGIpO1xuICAgIGNvbG9yLm9wYWNpdHkgPSAxO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBjb2xvci5yID0gcih0KTtcbiAgICAgIGNvbG9yLmcgPSBnKHQpO1xuICAgICAgY29sb3IuYiA9IGIodCk7XG4gICAgICByZXR1cm4gY29sb3IgKyBcIlwiO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCB2YXIgcmdiQmFzaXMgPSByZ2JTcGxpbmUoYmFzaXMpO1xuZXhwb3J0IHZhciByZ2JCYXNpc0Nsb3NlZCA9IHJnYlNwbGluZShiYXNpc0Nsb3NlZCk7XG4iLCJpbXBvcnQge2Jhc2lzfSBmcm9tIFwiLi9iYXNpc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gTWF0aC5mbG9vcigoKHQgJT0gMSkgPCAwID8gKyt0IDogdCkgKiBuKSxcbiAgICAgICAgdjAgPSB2YWx1ZXNbKGkgKyBuIC0gMSkgJSBuXSxcbiAgICAgICAgdjEgPSB2YWx1ZXNbaSAlIG5dLFxuICAgICAgICB2MiA9IHZhbHVlc1soaSArIDEpICUgbl0sXG4gICAgICAgIHYzID0gdmFsdWVzWyhpICsgMikgJSBuXTtcbiAgICByZXR1cm4gYmFzaXMoKHQgLSBpIC8gbikgKiBuLCB2MCwgdjEsIHYyLCB2Myk7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhID0gK2EsIGIgLT0gYSwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBhICsgYiAqIHQ7XG4gIH07XG59XG4iLCJpbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlclwiO1xuXG52YXIgcmVBID0gL1stK10/KD86XFxkK1xcLj9cXGQqfFxcLj9cXGQrKSg/OltlRV1bLStdP1xcZCspPy9nLFxuICAgIHJlQiA9IG5ldyBSZWdFeHAocmVBLnNvdXJjZSwgXCJnXCIpO1xuXG5mdW5jdGlvbiB6ZXJvKGIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbmUoYikge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBiKHQpICsgXCJcIjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgYmkgPSByZUEubGFzdEluZGV4ID0gcmVCLmxhc3RJbmRleCA9IDAsIC8vIHNjYW4gaW5kZXggZm9yIG5leHQgbnVtYmVyIGluIGJcbiAgICAgIGFtLCAvLyBjdXJyZW50IG1hdGNoIGluIGFcbiAgICAgIGJtLCAvLyBjdXJyZW50IG1hdGNoIGluIGJcbiAgICAgIGJzLCAvLyBzdHJpbmcgcHJlY2VkaW5nIGN1cnJlbnQgbnVtYmVyIGluIGIsIGlmIGFueVxuICAgICAgaSA9IC0xLCAvLyBpbmRleCBpbiBzXG4gICAgICBzID0gW10sIC8vIHN0cmluZyBjb25zdGFudHMgYW5kIHBsYWNlaG9sZGVyc1xuICAgICAgcSA9IFtdOyAvLyBudW1iZXIgaW50ZXJwb2xhdG9yc1xuXG4gIC8vIENvZXJjZSBpbnB1dHMgdG8gc3RyaW5ncy5cbiAgYSA9IGEgKyBcIlwiLCBiID0gYiArIFwiXCI7XG5cbiAgLy8gSW50ZXJwb2xhdGUgcGFpcnMgb2YgbnVtYmVycyBpbiBhICYgYi5cbiAgd2hpbGUgKChhbSA9IHJlQS5leGVjKGEpKVxuICAgICAgJiYgKGJtID0gcmVCLmV4ZWMoYikpKSB7XG4gICAgaWYgKChicyA9IGJtLmluZGV4KSA+IGJpKSB7IC8vIGEgc3RyaW5nIHByZWNlZGVzIHRoZSBuZXh0IG51bWJlciBpbiBiXG4gICAgICBicyA9IGIuc2xpY2UoYmksIGJzKTtcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBicztcbiAgICB9XG4gICAgaWYgKChhbSA9IGFtWzBdKSA9PT0gKGJtID0gYm1bMF0pKSB7IC8vIG51bWJlcnMgaW4gYSAmIGIgbWF0Y2hcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJtOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBibTtcbiAgICB9IGVsc2UgeyAvLyBpbnRlcnBvbGF0ZSBub24tbWF0Y2hpbmcgbnVtYmVyc1xuICAgICAgc1srK2ldID0gbnVsbDtcbiAgICAgIHEucHVzaCh7aTogaSwgeDogbnVtYmVyKGFtLCBibSl9KTtcbiAgICB9XG4gICAgYmkgPSByZUIubGFzdEluZGV4O1xuICB9XG5cbiAgLy8gQWRkIHJlbWFpbnMgb2YgYi5cbiAgaWYgKGJpIDwgYi5sZW5ndGgpIHtcbiAgICBicyA9IGIuc2xpY2UoYmkpO1xuICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgIGVsc2Ugc1srK2ldID0gYnM7XG4gIH1cblxuICAvLyBTcGVjaWFsIG9wdGltaXphdGlvbiBmb3Igb25seSBhIHNpbmdsZSBtYXRjaC5cbiAgLy8gT3RoZXJ3aXNlLCBpbnRlcnBvbGF0ZSBlYWNoIG9mIHRoZSBudW1iZXJzIGFuZCByZWpvaW4gdGhlIHN0cmluZy5cbiAgcmV0dXJuIHMubGVuZ3RoIDwgMiA/IChxWzBdXG4gICAgICA/IG9uZShxWzBdLngpXG4gICAgICA6IHplcm8oYikpXG4gICAgICA6IChiID0gcS5sZW5ndGgsIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbzsgaSA8IGI7ICsraSkgc1sobyA9IHFbaV0pLmldID0gby54KHQpO1xuICAgICAgICAgIHJldHVybiBzLmpvaW4oXCJcIik7XG4gICAgICAgIH0pO1xufVxuIiwiaW1wb3J0IGRlY29tcG9zZSwge2lkZW50aXR5fSBmcm9tIFwiLi9kZWNvbXBvc2VcIjtcblxudmFyIGNzc05vZGUsXG4gICAgY3NzUm9vdCxcbiAgICBjc3NWaWV3LFxuICAgIHN2Z05vZGU7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNzcyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IFwibm9uZVwiKSByZXR1cm4gaWRlbnRpdHk7XG4gIGlmICghY3NzTm9kZSkgY3NzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJESVZcIiksIGNzc1Jvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIGNzc1ZpZXcgPSBkb2N1bWVudC5kZWZhdWx0VmlldztcbiAgY3NzTm9kZS5zdHlsZS50cmFuc2Zvcm0gPSB2YWx1ZTtcbiAgdmFsdWUgPSBjc3NWaWV3LmdldENvbXB1dGVkU3R5bGUoY3NzUm9vdC5hcHBlbmRDaGlsZChjc3NOb2RlKSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShcInRyYW5zZm9ybVwiKTtcbiAgY3NzUm9vdC5yZW1vdmVDaGlsZChjc3NOb2RlKTtcbiAgdmFsdWUgPSB2YWx1ZS5zbGljZSg3LCAtMSkuc3BsaXQoXCIsXCIpO1xuICByZXR1cm4gZGVjb21wb3NlKCt2YWx1ZVswXSwgK3ZhbHVlWzFdLCArdmFsdWVbMl0sICt2YWx1ZVszXSwgK3ZhbHVlWzRdLCArdmFsdWVbNV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdmcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBpZGVudGl0eTtcbiAgaWYgKCFzdmdOb2RlKSBzdmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJnXCIpO1xuICBzdmdOb2RlLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLCB2YWx1ZSk7XG4gIGlmICghKHZhbHVlID0gc3ZnTm9kZS50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKSkgcmV0dXJuIGlkZW50aXR5O1xuICB2YWx1ZSA9IHZhbHVlLm1hdHJpeDtcbiAgcmV0dXJuIGRlY29tcG9zZSh2YWx1ZS5hLCB2YWx1ZS5iLCB2YWx1ZS5jLCB2YWx1ZS5kLCB2YWx1ZS5lLCB2YWx1ZS5mKTtcbn1cbiIsImltcG9ydCB7Y29sb3J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IHJnYiBmcm9tIFwiLi9yZ2JcIjtcbmltcG9ydCBhcnJheSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IGRhdGUgZnJvbSBcIi4vZGF0ZVwiO1xuaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXJcIjtcbmltcG9ydCBvYmplY3QgZnJvbSBcIi4vb2JqZWN0XCI7XG5pbXBvcnQgc3RyaW5nIGZyb20gXCIuL3N0cmluZ1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIHQgPSB0eXBlb2YgYiwgYztcbiAgcmV0dXJuIGIgPT0gbnVsbCB8fCB0ID09PSBcImJvb2xlYW5cIiA/IGNvbnN0YW50KGIpXG4gICAgICA6ICh0ID09PSBcIm51bWJlclwiID8gbnVtYmVyXG4gICAgICA6IHQgPT09IFwic3RyaW5nXCIgPyAoKGMgPSBjb2xvcihiKSkgPyAoYiA9IGMsIHJnYikgOiBzdHJpbmcpXG4gICAgICA6IGIgaW5zdGFuY2VvZiBjb2xvciA/IHJnYlxuICAgICAgOiBiIGluc3RhbmNlb2YgRGF0ZSA/IGRhdGVcbiAgICAgIDogQXJyYXkuaXNBcnJheShiKSA/IGFycmF5XG4gICAgICA6IHR5cGVvZiBiLnZhbHVlT2YgIT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgYi50b1N0cmluZyAhPT0gXCJmdW5jdGlvblwiIHx8IGlzTmFOKGIpID8gb2JqZWN0XG4gICAgICA6IG51bWJlcikoYSwgYik7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBkID0gbmV3IERhdGU7XG4gIHJldHVybiBhID0gK2EsIGIgLT0gYSwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBkLnNldFRpbWUoYSArIGIgKiB0KSwgZDtcbiAgfTtcbn1cbiIsImltcG9ydCB2YWx1ZSBmcm9tIFwiLi92YWx1ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBuYiA9IGIgPyBiLmxlbmd0aCA6IDAsXG4gICAgICBuYSA9IGEgPyBNYXRoLm1pbihuYiwgYS5sZW5ndGgpIDogMCxcbiAgICAgIHggPSBuZXcgQXJyYXkobmEpLFxuICAgICAgYyA9IG5ldyBBcnJheShuYiksXG4gICAgICBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBuYTsgKytpKSB4W2ldID0gdmFsdWUoYVtpXSwgYltpXSk7XG4gIGZvciAoOyBpIDwgbmI7ICsraSkgY1tpXSA9IGJbaV07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbmE7ICsraSkgY1tpXSA9IHhbaV0odCk7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG4iLCJpbXBvcnQgdmFsdWUgZnJvbSBcIi4vdmFsdWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgaSA9IHt9LFxuICAgICAgYyA9IHt9LFxuICAgICAgaztcblxuICBpZiAoYSA9PT0gbnVsbCB8fCB0eXBlb2YgYSAhPT0gXCJvYmplY3RcIikgYSA9IHt9O1xuICBpZiAoYiA9PT0gbnVsbCB8fCB0eXBlb2YgYiAhPT0gXCJvYmplY3RcIikgYiA9IHt9O1xuXG4gIGZvciAoayBpbiBiKSB7XG4gICAgaWYgKGsgaW4gYSkge1xuICAgICAgaVtrXSA9IHZhbHVlKGFba10sIGJba10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjW2tdID0gYltrXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGZvciAoayBpbiBpKSBjW2tdID0gaVtrXSh0KTtcbiAgICByZXR1cm4gYztcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEgPSArYSwgYiAtPSBhLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoYSArIGIgKiB0KTtcbiAgfTtcbn1cbiIsInZhciBkZWdyZWVzID0gMTgwIC8gTWF0aC5QSTtcblxuZXhwb3J0IHZhciBpZGVudGl0eSA9IHtcbiAgdHJhbnNsYXRlWDogMCxcbiAgdHJhbnNsYXRlWTogMCxcbiAgcm90YXRlOiAwLFxuICBza2V3WDogMCxcbiAgc2NhbGVYOiAxLFxuICBzY2FsZVk6IDFcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgdmFyIHNjYWxlWCwgc2NhbGVZLCBza2V3WDtcbiAgaWYgKHNjYWxlWCA9IE1hdGguc3FydChhICogYSArIGIgKiBiKSkgYSAvPSBzY2FsZVgsIGIgLz0gc2NhbGVYO1xuICBpZiAoc2tld1ggPSBhICogYyArIGIgKiBkKSBjIC09IGEgKiBza2V3WCwgZCAtPSBiICogc2tld1g7XG4gIGlmIChzY2FsZVkgPSBNYXRoLnNxcnQoYyAqIGMgKyBkICogZCkpIGMgLz0gc2NhbGVZLCBkIC89IHNjYWxlWSwgc2tld1ggLz0gc2NhbGVZO1xuICBpZiAoYSAqIGQgPCBiICogYykgYSA9IC1hLCBiID0gLWIsIHNrZXdYID0gLXNrZXdYLCBzY2FsZVggPSAtc2NhbGVYO1xuICByZXR1cm4ge1xuICAgIHRyYW5zbGF0ZVg6IGUsXG4gICAgdHJhbnNsYXRlWTogZixcbiAgICByb3RhdGU6IE1hdGguYXRhbjIoYiwgYSkgKiBkZWdyZWVzLFxuICAgIHNrZXdYOiBNYXRoLmF0YW4oc2tld1gpICogZGVncmVlcyxcbiAgICBzY2FsZVg6IHNjYWxlWCxcbiAgICBzY2FsZVk6IHNjYWxlWVxuICB9O1xufVxuIiwiaW1wb3J0IG51bWJlciBmcm9tIFwiLi4vbnVtYmVyXCI7XG5pbXBvcnQge3BhcnNlQ3NzLCBwYXJzZVN2Z30gZnJvbSBcIi4vcGFyc2VcIjtcblxuZnVuY3Rpb24gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2UsIHB4Q29tbWEsIHB4UGFyZW4sIGRlZ1BhcmVuKSB7XG5cbiAgZnVuY3Rpb24gcG9wKHMpIHtcbiAgICByZXR1cm4gcy5sZW5ndGggPyBzLnBvcCgpICsgXCIgXCIgOiBcIlwiO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNsYXRlKHhhLCB5YSwgeGIsIHliLCBzLCBxKSB7XG4gICAgaWYgKHhhICE9PSB4YiB8fCB5YSAhPT0geWIpIHtcbiAgICAgIHZhciBpID0gcy5wdXNoKFwidHJhbnNsYXRlKFwiLCBudWxsLCBweENvbW1hLCBudWxsLCBweFBhcmVuKTtcbiAgICAgIHEucHVzaCh7aTogaSAtIDQsIHg6IG51bWJlcih4YSwgeGIpfSwge2k6IGkgLSAyLCB4OiBudW1iZXIoeWEsIHliKX0pO1xuICAgIH0gZWxzZSBpZiAoeGIgfHwgeWIpIHtcbiAgICAgIHMucHVzaChcInRyYW5zbGF0ZShcIiArIHhiICsgcHhDb21tYSArIHliICsgcHhQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcm90YXRlKGEsIGIsIHMsIHEpIHtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgaWYgKGEgLSBiID4gMTgwKSBiICs9IDM2MDsgZWxzZSBpZiAoYiAtIGEgPiAxODApIGEgKz0gMzYwOyAvLyBzaG9ydGVzdCBwYXRoXG4gICAgICBxLnB1c2goe2k6IHMucHVzaChwb3AocykgKyBcInJvdGF0ZShcIiwgbnVsbCwgZGVnUGFyZW4pIC0gMiwgeDogbnVtYmVyKGEsIGIpfSk7XG4gICAgfSBlbHNlIGlmIChiKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJyb3RhdGUoXCIgKyBiICsgZGVnUGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNrZXdYKGEsIGIsIHMsIHEpIHtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgcS5wdXNoKHtpOiBzLnB1c2gocG9wKHMpICsgXCJza2V3WChcIiwgbnVsbCwgZGVnUGFyZW4pIC0gMiwgeDogbnVtYmVyKGEsIGIpfSk7XG4gICAgfSBlbHNlIGlmIChiKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJza2V3WChcIiArIGIgKyBkZWdQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeGEsIHlhLCB4YiwgeWIsIHMsIHEpIHtcbiAgICBpZiAoeGEgIT09IHhiIHx8IHlhICE9PSB5Yikge1xuICAgICAgdmFyIGkgPSBzLnB1c2gocG9wKHMpICsgXCJzY2FsZShcIiwgbnVsbCwgXCIsXCIsIG51bGwsIFwiKVwiKTtcbiAgICAgIHEucHVzaCh7aTogaSAtIDQsIHg6IG51bWJlcih4YSwgeGIpfSwge2k6IGkgLSAyLCB4OiBudW1iZXIoeWEsIHliKX0pO1xuICAgIH0gZWxzZSBpZiAoeGIgIT09IDEgfHwgeWIgIT09IDEpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInNjYWxlKFwiICsgeGIgKyBcIixcIiArIHliICsgXCIpXCIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbihhLCBiKSB7XG4gICAgdmFyIHMgPSBbXSwgLy8gc3RyaW5nIGNvbnN0YW50cyBhbmQgcGxhY2Vob2xkZXJzXG4gICAgICAgIHEgPSBbXTsgLy8gbnVtYmVyIGludGVycG9sYXRvcnNcbiAgICBhID0gcGFyc2UoYSksIGIgPSBwYXJzZShiKTtcbiAgICB0cmFuc2xhdGUoYS50cmFuc2xhdGVYLCBhLnRyYW5zbGF0ZVksIGIudHJhbnNsYXRlWCwgYi50cmFuc2xhdGVZLCBzLCBxKTtcbiAgICByb3RhdGUoYS5yb3RhdGUsIGIucm90YXRlLCBzLCBxKTtcbiAgICBza2V3WChhLnNrZXdYLCBiLnNrZXdYLCBzLCBxKTtcbiAgICBzY2FsZShhLnNjYWxlWCwgYS5zY2FsZVksIGIuc2NhbGVYLCBiLnNjYWxlWSwgcywgcSk7XG4gICAgYSA9IGIgPSBudWxsOyAvLyBnY1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgaSA9IC0xLCBuID0gcS5sZW5ndGgsIG87XG4gICAgICB3aGlsZSAoKytpIDwgbikgc1sobyA9IHFbaV0pLmldID0gby54KHQpO1xuICAgICAgcmV0dXJuIHMuam9pbihcIlwiKTtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgdmFyIGludGVycG9sYXRlVHJhbnNmb3JtQ3NzID0gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2VDc3MsIFwicHgsIFwiLCBcInB4KVwiLCBcImRlZylcIik7XG5leHBvcnQgdmFyIGludGVycG9sYXRlVHJhbnNmb3JtU3ZnID0gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2VTdmcsIFwiLCBcIiwgXCIpXCIsIFwiKVwiKTtcbiIsImltcG9ydCB7Y3ViZWhlbGl4IGFzIGNvbG9yQ3ViZWhlbGl4fSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCBjb2xvciwge2h1ZX0gZnJvbSBcIi4vY29sb3JcIjtcblxuZnVuY3Rpb24gY3ViZWhlbGl4KGh1ZSkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGN1YmVoZWxpeEdhbW1hKHkpIHtcbiAgICB5ID0gK3k7XG5cbiAgICBmdW5jdGlvbiBjdWJlaGVsaXgoc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIGggPSBodWUoKHN0YXJ0ID0gY29sb3JDdWJlaGVsaXgoc3RhcnQpKS5oLCAoZW5kID0gY29sb3JDdWJlaGVsaXgoZW5kKSkuaCksXG4gICAgICAgICAgcyA9IGNvbG9yKHN0YXJ0LnMsIGVuZC5zKSxcbiAgICAgICAgICBsID0gY29sb3Ioc3RhcnQubCwgZW5kLmwpLFxuICAgICAgICAgIG9wYWNpdHkgPSBjb2xvcihzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgICBzdGFydC5oID0gaCh0KTtcbiAgICAgICAgc3RhcnQucyA9IHModCk7XG4gICAgICAgIHN0YXJ0LmwgPSBsKE1hdGgucG93KHQsIHkpKTtcbiAgICAgICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgICAgIHJldHVybiBzdGFydCArIFwiXCI7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGN1YmVoZWxpeC5nYW1tYSA9IGN1YmVoZWxpeEdhbW1hO1xuXG4gICAgcmV0dXJuIGN1YmVoZWxpeDtcbiAgfSkoMSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGN1YmVoZWxpeChodWUpO1xuZXhwb3J0IHZhciBjdWJlaGVsaXhMb25nID0gY3ViZWhlbGl4KGNvbG9yKTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gK3g7XG59XG4iLCJpbXBvcnQge2Jpc2VjdH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2ludGVycG9sYXRlIGFzIGludGVycG9sYXRlVmFsdWUsIGludGVycG9sYXRlUm91bmR9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHttYXAsIHNsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlclwiO1xuXG52YXIgdW5pdCA9IFswLCAxXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlaW50ZXJwb2xhdGVMaW5lYXIoYSwgYikge1xuICByZXR1cm4gKGIgLT0gKGEgPSArYSkpXG4gICAgICA/IGZ1bmN0aW9uKHgpIHsgcmV0dXJuICh4IC0gYSkgLyBiOyB9XG4gICAgICA6IGNvbnN0YW50KGIpO1xufVxuXG5mdW5jdGlvbiBkZWludGVycG9sYXRlQ2xhbXAoZGVpbnRlcnBvbGF0ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oYSwgYikge1xuICAgIHZhciBkID0gZGVpbnRlcnBvbGF0ZShhID0gK2EsIGIgPSArYik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHggPD0gYSA/IDAgOiB4ID49IGIgPyAxIDogZCh4KTsgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVpbnRlcnBvbGF0ZUNsYW1wKHJlaW50ZXJwb2xhdGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGEsIGIpIHtcbiAgICB2YXIgciA9IHJlaW50ZXJwb2xhdGUoYSA9ICthLCBiID0gK2IpO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7IHJldHVybiB0IDw9IDAgPyBhIDogdCA+PSAxID8gYiA6IHIodCk7IH07XG4gIH07XG59XG5cbmZ1bmN0aW9uIGJpbWFwKGRvbWFpbiwgcmFuZ2UsIGRlaW50ZXJwb2xhdGUsIHJlaW50ZXJwb2xhdGUpIHtcbiAgdmFyIGQwID0gZG9tYWluWzBdLCBkMSA9IGRvbWFpblsxXSwgcjAgPSByYW5nZVswXSwgcjEgPSByYW5nZVsxXTtcbiAgaWYgKGQxIDwgZDApIGQwID0gZGVpbnRlcnBvbGF0ZShkMSwgZDApLCByMCA9IHJlaW50ZXJwb2xhdGUocjEsIHIwKTtcbiAgZWxzZSBkMCA9IGRlaW50ZXJwb2xhdGUoZDAsIGQxKSwgcjAgPSByZWludGVycG9sYXRlKHIwLCByMSk7XG4gIHJldHVybiBmdW5jdGlvbih4KSB7IHJldHVybiByMChkMCh4KSk7IH07XG59XG5cbmZ1bmN0aW9uIHBvbHltYXAoZG9tYWluLCByYW5nZSwgZGVpbnRlcnBvbGF0ZSwgcmVpbnRlcnBvbGF0ZSkge1xuICB2YXIgaiA9IE1hdGgubWluKGRvbWFpbi5sZW5ndGgsIHJhbmdlLmxlbmd0aCkgLSAxLFxuICAgICAgZCA9IG5ldyBBcnJheShqKSxcbiAgICAgIHIgPSBuZXcgQXJyYXkoaiksXG4gICAgICBpID0gLTE7XG5cbiAgLy8gUmV2ZXJzZSBkZXNjZW5kaW5nIGRvbWFpbnMuXG4gIGlmIChkb21haW5bal0gPCBkb21haW5bMF0pIHtcbiAgICBkb21haW4gPSBkb21haW4uc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgcmFuZ2UgPSByYW5nZS5zbGljZSgpLnJldmVyc2UoKTtcbiAgfVxuXG4gIHdoaWxlICgrK2kgPCBqKSB7XG4gICAgZFtpXSA9IGRlaW50ZXJwb2xhdGUoZG9tYWluW2ldLCBkb21haW5baSArIDFdKTtcbiAgICByW2ldID0gcmVpbnRlcnBvbGF0ZShyYW5nZVtpXSwgcmFuZ2VbaSArIDFdKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbih4KSB7XG4gICAgdmFyIGkgPSBiaXNlY3QoZG9tYWluLCB4LCAxLCBqKSAtIDE7XG4gICAgcmV0dXJuIHJbaV0oZFtpXSh4KSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KHNvdXJjZSwgdGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXRcbiAgICAgIC5kb21haW4oc291cmNlLmRvbWFpbigpKVxuICAgICAgLnJhbmdlKHNvdXJjZS5yYW5nZSgpKVxuICAgICAgLmludGVycG9sYXRlKHNvdXJjZS5pbnRlcnBvbGF0ZSgpKVxuICAgICAgLmNsYW1wKHNvdXJjZS5jbGFtcCgpKTtcbn1cblxuLy8gZGVpbnRlcnBvbGF0ZShhLCBiKSh4KSB0YWtlcyBhIGRvbWFpbiB2YWx1ZSB4IGluIFthLGJdIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciB0IGluIFswLDFdLlxuLy8gcmVpbnRlcnBvbGF0ZShhLCBiKSh0KSB0YWtlcyBhIHBhcmFtZXRlciB0IGluIFswLDFdIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGRvbWFpbiB2YWx1ZSB4IGluIFthLGJdLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGludW91cyhkZWludGVycG9sYXRlLCByZWludGVycG9sYXRlKSB7XG4gIHZhciBkb21haW4gPSB1bml0LFxuICAgICAgcmFuZ2UgPSB1bml0LFxuICAgICAgaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZVZhbHVlLFxuICAgICAgY2xhbXAgPSBmYWxzZSxcbiAgICAgIHBpZWNld2lzZSxcbiAgICAgIG91dHB1dCxcbiAgICAgIGlucHV0O1xuXG4gIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgcGllY2V3aXNlID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKSA+IDIgPyBwb2x5bWFwIDogYmltYXA7XG4gICAgb3V0cHV0ID0gaW5wdXQgPSBudWxsO1xuICAgIHJldHVybiBzY2FsZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICByZXR1cm4gKG91dHB1dCB8fCAob3V0cHV0ID0gcGllY2V3aXNlKGRvbWFpbiwgcmFuZ2UsIGNsYW1wID8gZGVpbnRlcnBvbGF0ZUNsYW1wKGRlaW50ZXJwb2xhdGUpIDogZGVpbnRlcnBvbGF0ZSwgaW50ZXJwb2xhdGUpKSkoK3gpO1xuICB9XG5cbiAgc2NhbGUuaW52ZXJ0ID0gZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiAoaW5wdXQgfHwgKGlucHV0ID0gcGllY2V3aXNlKHJhbmdlLCBkb21haW4sIGRlaW50ZXJwb2xhdGVMaW5lYXIsIGNsYW1wID8gcmVpbnRlcnBvbGF0ZUNsYW1wKHJlaW50ZXJwb2xhdGUpIDogcmVpbnRlcnBvbGF0ZSkpKSgreSk7XG4gIH07XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRvbWFpbiA9IG1hcC5jYWxsKF8sIG51bWJlciksIHJlc2NhbGUoKSkgOiBkb21haW4uc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IHNsaWNlLmNhbGwoXyksIHJlc2NhbGUoKSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlUm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIHJhbmdlID0gc2xpY2UuY2FsbChfKSwgaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZVJvdW5kLCByZXNjYWxlKCk7XG4gIH07XG5cbiAgc2NhbGUuY2xhbXAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2xhbXAgPSAhIV8sIHJlc2NhbGUoKSkgOiBjbGFtcDtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0ZSA9IF8sIHJlc2NhbGUoKSkgOiBpbnRlcnBvbGF0ZTtcbiAgfTtcblxuICByZXR1cm4gcmVzY2FsZSgpO1xufVxuIiwiLy8gQ29tcHV0ZXMgdGhlIGRlY2ltYWwgY29lZmZpY2llbnQgYW5kIGV4cG9uZW50IG9mIHRoZSBzcGVjaWZpZWQgbnVtYmVyIHggd2l0aFxuLy8gc2lnbmlmaWNhbnQgZGlnaXRzIHAsIHdoZXJlIHggaXMgcG9zaXRpdmUgYW5kIHAgaXMgaW4gWzEsIDIxXSBvciB1bmRlZmluZWQuXG4vLyBGb3IgZXhhbXBsZSwgZm9ybWF0RGVjaW1hbCgxLjIzKSByZXR1cm5zIFtcIjEyM1wiLCAwXS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHApIHtcbiAgaWYgKChpID0gKHggPSBwID8geC50b0V4cG9uZW50aWFsKHAgLSAxKSA6IHgudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKFwiZVwiKSkgPCAwKSByZXR1cm4gbnVsbDsgLy8gTmFOLCDCsUluZmluaXR5XG4gIHZhciBpLCBjb2VmZmljaWVudCA9IHguc2xpY2UoMCwgaSk7XG5cbiAgLy8gVGhlIHN0cmluZyByZXR1cm5lZCBieSB0b0V4cG9uZW50aWFsIGVpdGhlciBoYXMgdGhlIGZvcm0gXFxkXFwuXFxkK2VbLStdXFxkK1xuICAvLyAoZS5nLiwgMS4yZSszKSBvciB0aGUgZm9ybSBcXGRlWy0rXVxcZCsgKGUuZy4sIDFlKzMpLlxuICByZXR1cm4gW1xuICAgIGNvZWZmaWNpZW50Lmxlbmd0aCA+IDEgPyBjb2VmZmljaWVudFswXSArIGNvZWZmaWNpZW50LnNsaWNlKDIpIDogY29lZmZpY2llbnQsXG4gICAgK3guc2xpY2UoaSArIDEpXG4gIF07XG59XG4iLCJpbXBvcnQgZm9ybWF0RGVjaW1hbCBmcm9tIFwiLi9mb3JtYXREZWNpbWFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHggPSBmb3JtYXREZWNpbWFsKE1hdGguYWJzKHgpKSwgeCA/IHhbMV0gOiBOYU47XG59XG4iLCIvLyBbW2ZpbGxdYWxpZ25dW3NpZ25dW3N5bWJvbF1bMF1bd2lkdGhdWyxdWy5wcmVjaXNpb25dW35dW3R5cGVdXG52YXIgcmUgPSAvXig/OiguKT8oWzw+PV5dKSk/KFsrXFwtKCBdKT8oWyQjXSk/KDApPyhcXGQrKT8oLCk/KFxcLlxcZCspPyh+KT8oW2EteiVdKT8kL2k7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpIHtcbiAgcmV0dXJuIG5ldyBGb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKTtcbn1cblxuZm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZSA9IEZvcm1hdFNwZWNpZmllci5wcm90b3R5cGU7IC8vIGluc3RhbmNlb2ZcblxuZnVuY3Rpb24gRm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcikge1xuICBpZiAoIShtYXRjaCA9IHJlLmV4ZWMoc3BlY2lmaWVyKSkpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZm9ybWF0OiBcIiArIHNwZWNpZmllcik7XG4gIHZhciBtYXRjaDtcbiAgdGhpcy5maWxsID0gbWF0Y2hbMV0gfHwgXCIgXCI7XG4gIHRoaXMuYWxpZ24gPSBtYXRjaFsyXSB8fCBcIj5cIjtcbiAgdGhpcy5zaWduID0gbWF0Y2hbM10gfHwgXCItXCI7XG4gIHRoaXMuc3ltYm9sID0gbWF0Y2hbNF0gfHwgXCJcIjtcbiAgdGhpcy56ZXJvID0gISFtYXRjaFs1XTtcbiAgdGhpcy53aWR0aCA9IG1hdGNoWzZdICYmICttYXRjaFs2XTtcbiAgdGhpcy5jb21tYSA9ICEhbWF0Y2hbN107XG4gIHRoaXMucHJlY2lzaW9uID0gbWF0Y2hbOF0gJiYgK21hdGNoWzhdLnNsaWNlKDEpO1xuICB0aGlzLnRyaW0gPSAhIW1hdGNoWzldO1xuICB0aGlzLnR5cGUgPSBtYXRjaFsxMF0gfHwgXCJcIjtcbn1cblxuRm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5maWxsXG4gICAgICArIHRoaXMuYWxpZ25cbiAgICAgICsgdGhpcy5zaWduXG4gICAgICArIHRoaXMuc3ltYm9sXG4gICAgICArICh0aGlzLnplcm8gPyBcIjBcIiA6IFwiXCIpXG4gICAgICArICh0aGlzLndpZHRoID09IG51bGwgPyBcIlwiIDogTWF0aC5tYXgoMSwgdGhpcy53aWR0aCB8IDApKVxuICAgICAgKyAodGhpcy5jb21tYSA/IFwiLFwiIDogXCJcIilcbiAgICAgICsgKHRoaXMucHJlY2lzaW9uID09IG51bGwgPyBcIlwiIDogXCIuXCIgKyBNYXRoLm1heCgwLCB0aGlzLnByZWNpc2lvbiB8IDApKVxuICAgICAgKyAodGhpcy50cmltID8gXCJ+XCIgOiBcIlwiKVxuICAgICAgKyB0aGlzLnR5cGU7XG59O1xuIiwiLy8gVHJpbXMgaW5zaWduaWZpY2FudCB6ZXJvcywgZS5nLiwgcmVwbGFjZXMgMS4yMDAwayB3aXRoIDEuMmsuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzKSB7XG4gIG91dDogZm9yICh2YXIgbiA9IHMubGVuZ3RoLCBpID0gMSwgaTAgPSAtMSwgaTE7IGkgPCBuOyArK2kpIHtcbiAgICBzd2l0Y2ggKHNbaV0pIHtcbiAgICAgIGNhc2UgXCIuXCI6IGkwID0gaTEgPSBpOyBicmVhaztcbiAgICAgIGNhc2UgXCIwXCI6IGlmIChpMCA9PT0gMCkgaTAgPSBpOyBpMSA9IGk7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogaWYgKGkwID4gMCkgeyBpZiAoIStzW2ldKSBicmVhayBvdXQ7IGkwID0gMDsgfSBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGkwID4gMCA/IHMuc2xpY2UoMCwgaTApICsgcy5zbGljZShpMSArIDEpIDogcztcbn1cbiIsImltcG9ydCBmb3JtYXREZWNpbWFsIGZyb20gXCIuL2Zvcm1hdERlY2ltYWxcIjtcblxuZXhwb3J0IHZhciBwcmVmaXhFeHBvbmVudDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWwoeCwgcCk7XG4gIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICB2YXIgY29lZmZpY2llbnQgPSBkWzBdLFxuICAgICAgZXhwb25lbnQgPSBkWzFdLFxuICAgICAgaSA9IGV4cG9uZW50IC0gKHByZWZpeEV4cG9uZW50ID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQgLyAzKSkpICogMykgKyAxLFxuICAgICAgbiA9IGNvZWZmaWNpZW50Lmxlbmd0aDtcbiAgcmV0dXJuIGkgPT09IG4gPyBjb2VmZmljaWVudFxuICAgICAgOiBpID4gbiA/IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGkgLSBuICsgMSkuam9pbihcIjBcIilcbiAgICAgIDogaSA+IDAgPyBjb2VmZmljaWVudC5zbGljZSgwLCBpKSArIFwiLlwiICsgY29lZmZpY2llbnQuc2xpY2UoaSlcbiAgICAgIDogXCIwLlwiICsgbmV3IEFycmF5KDEgLSBpKS5qb2luKFwiMFwiKSArIGZvcm1hdERlY2ltYWwoeCwgTWF0aC5tYXgoMCwgcCArIGkgLSAxKSlbMF07IC8vIGxlc3MgdGhhbiAxeSFcbn1cbiIsImltcG9ydCBmb3JtYXRMb2NhbGUgZnJvbSBcIi4vbG9jYWxlXCI7XG5cbnZhciBsb2NhbGU7XG5leHBvcnQgdmFyIGZvcm1hdDtcbmV4cG9ydCB2YXIgZm9ybWF0UHJlZml4O1xuXG5kZWZhdWx0TG9jYWxlKHtcbiAgZGVjaW1hbDogXCIuXCIsXG4gIHRob3VzYW5kczogXCIsXCIsXG4gIGdyb3VwaW5nOiBbM10sXG4gIGN1cnJlbmN5OiBbXCIkXCIsIFwiXCJdXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVmYXVsdExvY2FsZShkZWZpbml0aW9uKSB7XG4gIGxvY2FsZSA9IGZvcm1hdExvY2FsZShkZWZpbml0aW9uKTtcbiAgZm9ybWF0ID0gbG9jYWxlLmZvcm1hdDtcbiAgZm9ybWF0UHJlZml4ID0gbG9jYWxlLmZvcm1hdFByZWZpeDtcbiAgcmV0dXJuIGxvY2FsZTtcbn1cbiIsImltcG9ydCBmb3JtYXREZWNpbWFsIGZyb20gXCIuL2Zvcm1hdERlY2ltYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWwoeCwgcCk7XG4gIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICB2YXIgY29lZmZpY2llbnQgPSBkWzBdLFxuICAgICAgZXhwb25lbnQgPSBkWzFdO1xuICByZXR1cm4gZXhwb25lbnQgPCAwID8gXCIwLlwiICsgbmV3IEFycmF5KC1leHBvbmVudCkuam9pbihcIjBcIikgKyBjb2VmZmljaWVudFxuICAgICAgOiBjb2VmZmljaWVudC5sZW5ndGggPiBleHBvbmVudCArIDEgPyBjb2VmZmljaWVudC5zbGljZSgwLCBleHBvbmVudCArIDEpICsgXCIuXCIgKyBjb2VmZmljaWVudC5zbGljZShleHBvbmVudCArIDEpXG4gICAgICA6IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGV4cG9uZW50IC0gY29lZmZpY2llbnQubGVuZ3RoICsgMikuam9pbihcIjBcIik7XG59XG4iLCJpbXBvcnQgZm9ybWF0UHJlZml4QXV0byBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvXCI7XG5pbXBvcnQgZm9ybWF0Um91bmRlZCBmcm9tIFwiLi9mb3JtYXRSb3VuZGVkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXCIlXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuICh4ICogMTAwKS50b0ZpeGVkKHApOyB9LFxuICBcImJcIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygyKTsgfSxcbiAgXCJjXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHggKyBcIlwiOyB9LFxuICBcImRcIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygxMCk7IH0sXG4gIFwiZVwiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiB4LnRvRXhwb25lbnRpYWwocCk7IH0sXG4gIFwiZlwiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiB4LnRvRml4ZWQocCk7IH0sXG4gIFwiZ1wiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiB4LnRvUHJlY2lzaW9uKHApOyB9LFxuICBcIm9cIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZyg4KTsgfSxcbiAgXCJwXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIGZvcm1hdFJvdW5kZWQoeCAqIDEwMCwgcCk7IH0sXG4gIFwiclwiOiBmb3JtYXRSb3VuZGVkLFxuICBcInNcIjogZm9ybWF0UHJlZml4QXV0byxcbiAgXCJYXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7IH0sXG4gIFwieFwiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDE2KTsgfVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHg7XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnRcIjtcbmltcG9ydCBmb3JtYXRHcm91cCBmcm9tIFwiLi9mb3JtYXRHcm91cFwiO1xuaW1wb3J0IGZvcm1hdE51bWVyYWxzIGZyb20gXCIuL2Zvcm1hdE51bWVyYWxzXCI7XG5pbXBvcnQgZm9ybWF0U3BlY2lmaWVyIGZyb20gXCIuL2Zvcm1hdFNwZWNpZmllclwiO1xuaW1wb3J0IGZvcm1hdFRyaW0gZnJvbSBcIi4vZm9ybWF0VHJpbVwiO1xuaW1wb3J0IGZvcm1hdFR5cGVzIGZyb20gXCIuL2Zvcm1hdFR5cGVzXCI7XG5pbXBvcnQge3ByZWZpeEV4cG9uZW50fSBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvXCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHlcIjtcblxudmFyIHByZWZpeGVzID0gW1wieVwiLFwielwiLFwiYVwiLFwiZlwiLFwicFwiLFwiblwiLFwiwrVcIixcIm1cIixcIlwiLFwia1wiLFwiTVwiLFwiR1wiLFwiVFwiLFwiUFwiLFwiRVwiLFwiWlwiLFwiWVwiXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obG9jYWxlKSB7XG4gIHZhciBncm91cCA9IGxvY2FsZS5ncm91cGluZyAmJiBsb2NhbGUudGhvdXNhbmRzID8gZm9ybWF0R3JvdXAobG9jYWxlLmdyb3VwaW5nLCBsb2NhbGUudGhvdXNhbmRzKSA6IGlkZW50aXR5LFxuICAgICAgY3VycmVuY3kgPSBsb2NhbGUuY3VycmVuY3ksXG4gICAgICBkZWNpbWFsID0gbG9jYWxlLmRlY2ltYWwsXG4gICAgICBudW1lcmFscyA9IGxvY2FsZS5udW1lcmFscyA/IGZvcm1hdE51bWVyYWxzKGxvY2FsZS5udW1lcmFscykgOiBpZGVudGl0eSxcbiAgICAgIHBlcmNlbnQgPSBsb2NhbGUucGVyY2VudCB8fCBcIiVcIjtcblxuICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyKSB7XG4gICAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcik7XG5cbiAgICB2YXIgZmlsbCA9IHNwZWNpZmllci5maWxsLFxuICAgICAgICBhbGlnbiA9IHNwZWNpZmllci5hbGlnbixcbiAgICAgICAgc2lnbiA9IHNwZWNpZmllci5zaWduLFxuICAgICAgICBzeW1ib2wgPSBzcGVjaWZpZXIuc3ltYm9sLFxuICAgICAgICB6ZXJvID0gc3BlY2lmaWVyLnplcm8sXG4gICAgICAgIHdpZHRoID0gc3BlY2lmaWVyLndpZHRoLFxuICAgICAgICBjb21tYSA9IHNwZWNpZmllci5jb21tYSxcbiAgICAgICAgcHJlY2lzaW9uID0gc3BlY2lmaWVyLnByZWNpc2lvbixcbiAgICAgICAgdHJpbSA9IHNwZWNpZmllci50cmltLFxuICAgICAgICB0eXBlID0gc3BlY2lmaWVyLnR5cGU7XG5cbiAgICAvLyBUaGUgXCJuXCIgdHlwZSBpcyBhbiBhbGlhcyBmb3IgXCIsZ1wiLlxuICAgIGlmICh0eXBlID09PSBcIm5cIikgY29tbWEgPSB0cnVlLCB0eXBlID0gXCJnXCI7XG5cbiAgICAvLyBUaGUgXCJcIiB0eXBlLCBhbmQgYW55IGludmFsaWQgdHlwZSwgaXMgYW4gYWxpYXMgZm9yIFwiLjEyfmdcIi5cbiAgICBlbHNlIGlmICghZm9ybWF0VHlwZXNbdHlwZV0pIHByZWNpc2lvbiA9PSBudWxsICYmIChwcmVjaXNpb24gPSAxMiksIHRyaW0gPSB0cnVlLCB0eXBlID0gXCJnXCI7XG5cbiAgICAvLyBJZiB6ZXJvIGZpbGwgaXMgc3BlY2lmaWVkLCBwYWRkaW5nIGdvZXMgYWZ0ZXIgc2lnbiBhbmQgYmVmb3JlIGRpZ2l0cy5cbiAgICBpZiAoemVybyB8fCAoZmlsbCA9PT0gXCIwXCIgJiYgYWxpZ24gPT09IFwiPVwiKSkgemVybyA9IHRydWUsIGZpbGwgPSBcIjBcIiwgYWxpZ24gPSBcIj1cIjtcblxuICAgIC8vIENvbXB1dGUgdGhlIHByZWZpeCBhbmQgc3VmZml4LlxuICAgIC8vIEZvciBTSS1wcmVmaXgsIHRoZSBzdWZmaXggaXMgbGF6aWx5IGNvbXB1dGVkLlxuICAgIHZhciBwcmVmaXggPSBzeW1ib2wgPT09IFwiJFwiID8gY3VycmVuY3lbMF0gOiBzeW1ib2wgPT09IFwiI1wiICYmIC9bYm94WF0vLnRlc3QodHlwZSkgPyBcIjBcIiArIHR5cGUudG9Mb3dlckNhc2UoKSA6IFwiXCIsXG4gICAgICAgIHN1ZmZpeCA9IHN5bWJvbCA9PT0gXCIkXCIgPyBjdXJyZW5jeVsxXSA6IC9bJXBdLy50ZXN0KHR5cGUpID8gcGVyY2VudCA6IFwiXCI7XG5cbiAgICAvLyBXaGF0IGZvcm1hdCBmdW5jdGlvbiBzaG91bGQgd2UgdXNlP1xuICAgIC8vIElzIHRoaXMgYW4gaW50ZWdlciB0eXBlP1xuICAgIC8vIENhbiB0aGlzIHR5cGUgZ2VuZXJhdGUgZXhwb25lbnRpYWwgbm90YXRpb24/XG4gICAgdmFyIGZvcm1hdFR5cGUgPSBmb3JtYXRUeXBlc1t0eXBlXSxcbiAgICAgICAgbWF5YmVTdWZmaXggPSAvW2RlZmdwcnMlXS8udGVzdCh0eXBlKTtcblxuICAgIC8vIFNldCB0aGUgZGVmYXVsdCBwcmVjaXNpb24gaWYgbm90IHNwZWNpZmllZCxcbiAgICAvLyBvciBjbGFtcCB0aGUgc3BlY2lmaWVkIHByZWNpc2lvbiB0byB0aGUgc3VwcG9ydGVkIHJhbmdlLlxuICAgIC8vIEZvciBzaWduaWZpY2FudCBwcmVjaXNpb24sIGl0IG11c3QgYmUgaW4gWzEsIDIxXS5cbiAgICAvLyBGb3IgZml4ZWQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFswLCAyMF0uXG4gICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uID09IG51bGwgPyA2XG4gICAgICAgIDogL1tncHJzXS8udGVzdCh0eXBlKSA/IE1hdGgubWF4KDEsIE1hdGgubWluKDIxLCBwcmVjaXNpb24pKVxuICAgICAgICA6IE1hdGgubWF4KDAsIE1hdGgubWluKDIwLCBwcmVjaXNpb24pKTtcblxuICAgIGZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSkge1xuICAgICAgdmFyIHZhbHVlUHJlZml4ID0gcHJlZml4LFxuICAgICAgICAgIHZhbHVlU3VmZml4ID0gc3VmZml4LFxuICAgICAgICAgIGksIG4sIGM7XG5cbiAgICAgIGlmICh0eXBlID09PSBcImNcIikge1xuICAgICAgICB2YWx1ZVN1ZmZpeCA9IGZvcm1hdFR5cGUodmFsdWUpICsgdmFsdWVTdWZmaXg7XG4gICAgICAgIHZhbHVlID0gXCJcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gK3ZhbHVlO1xuXG4gICAgICAgIC8vIFBlcmZvcm0gdGhlIGluaXRpYWwgZm9ybWF0dGluZy5cbiAgICAgICAgdmFyIHZhbHVlTmVnYXRpdmUgPSB2YWx1ZSA8IDA7XG4gICAgICAgIHZhbHVlID0gZm9ybWF0VHlwZShNYXRoLmFicyh2YWx1ZSksIHByZWNpc2lvbik7XG5cbiAgICAgICAgLy8gVHJpbSBpbnNpZ25pZmljYW50IHplcm9zLlxuICAgICAgICBpZiAodHJpbSkgdmFsdWUgPSBmb3JtYXRUcmltKHZhbHVlKTtcblxuICAgICAgICAvLyBJZiBhIG5lZ2F0aXZlIHZhbHVlIHJvdW5kcyB0byB6ZXJvIGR1cmluZyBmb3JtYXR0aW5nLCB0cmVhdCBhcyBwb3NpdGl2ZS5cbiAgICAgICAgaWYgKHZhbHVlTmVnYXRpdmUgJiYgK3ZhbHVlID09PSAwKSB2YWx1ZU5lZ2F0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguXG4gICAgICAgIHZhbHVlUHJlZml4ID0gKHZhbHVlTmVnYXRpdmUgPyAoc2lnbiA9PT0gXCIoXCIgPyBzaWduIDogXCItXCIpIDogc2lnbiA9PT0gXCItXCIgfHwgc2lnbiA9PT0gXCIoXCIgPyBcIlwiIDogc2lnbikgKyB2YWx1ZVByZWZpeDtcbiAgICAgICAgdmFsdWVTdWZmaXggPSAodHlwZSA9PT0gXCJzXCIgPyBwcmVmaXhlc1s4ICsgcHJlZml4RXhwb25lbnQgLyAzXSA6IFwiXCIpICsgdmFsdWVTdWZmaXggKyAodmFsdWVOZWdhdGl2ZSAmJiBzaWduID09PSBcIihcIiA/IFwiKVwiIDogXCJcIik7XG5cbiAgICAgICAgLy8gQnJlYWsgdGhlIGZvcm1hdHRlZCB2YWx1ZSBpbnRvIHRoZSBpbnRlZ2VyIOKAnHZhbHVl4oCdIHBhcnQgdGhhdCBjYW4gYmVcbiAgICAgICAgLy8gZ3JvdXBlZCwgYW5kIGZyYWN0aW9uYWwgb3IgZXhwb25lbnRpYWwg4oCcc3VmZml44oCdIHBhcnQgdGhhdCBpcyBub3QuXG4gICAgICAgIGlmIChtYXliZVN1ZmZpeCkge1xuICAgICAgICAgIGkgPSAtMSwgbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgICAgICAgaWYgKGMgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpLCA0OCA+IGMgfHwgYyA+IDU3KSB7XG4gICAgICAgICAgICAgIHZhbHVlU3VmZml4ID0gKGMgPT09IDQ2ID8gZGVjaW1hbCArIHZhbHVlLnNsaWNlKGkgKyAxKSA6IHZhbHVlLnNsaWNlKGkpKSArIHZhbHVlU3VmZml4O1xuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIG5vdCBcIjBcIiwgZ3JvdXBpbmcgaXMgYXBwbGllZCBiZWZvcmUgcGFkZGluZy5cbiAgICAgIGlmIChjb21tYSAmJiAhemVybykgdmFsdWUgPSBncm91cCh2YWx1ZSwgSW5maW5pdHkpO1xuXG4gICAgICAvLyBDb21wdXRlIHRoZSBwYWRkaW5nLlxuICAgICAgdmFyIGxlbmd0aCA9IHZhbHVlUHJlZml4Lmxlbmd0aCArIHZhbHVlLmxlbmd0aCArIHZhbHVlU3VmZml4Lmxlbmd0aCxcbiAgICAgICAgICBwYWRkaW5nID0gbGVuZ3RoIDwgd2lkdGggPyBuZXcgQXJyYXkod2lkdGggLSBsZW5ndGggKyAxKS5qb2luKGZpbGwpIDogXCJcIjtcblxuICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGFmdGVyIHBhZGRpbmcuXG4gICAgICBpZiAoY29tbWEgJiYgemVybykgdmFsdWUgPSBncm91cChwYWRkaW5nICsgdmFsdWUsIHBhZGRpbmcubGVuZ3RoID8gd2lkdGggLSB2YWx1ZVN1ZmZpeC5sZW5ndGggOiBJbmZpbml0eSksIHBhZGRpbmcgPSBcIlwiO1xuXG4gICAgICAvLyBSZWNvbnN0cnVjdCB0aGUgZmluYWwgb3V0cHV0IGJhc2VkIG9uIHRoZSBkZXNpcmVkIGFsaWdubWVudC5cbiAgICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgICAgY2FzZSBcIjxcIjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXggKyBwYWRkaW5nOyBicmVhaztcbiAgICAgICAgY2FzZSBcIj1cIjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHBhZGRpbmcgKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhaztcbiAgICAgICAgY2FzZSBcIl5cIjogdmFsdWUgPSBwYWRkaW5nLnNsaWNlKDAsIGxlbmd0aCA9IHBhZGRpbmcubGVuZ3RoID4+IDEpICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4ICsgcGFkZGluZy5zbGljZShsZW5ndGgpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDogdmFsdWUgPSBwYWRkaW5nICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bWVyYWxzKHZhbHVlKTtcbiAgICB9XG5cbiAgICBmb3JtYXQudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBzcGVjaWZpZXIgKyBcIlwiO1xuICAgIH07XG5cbiAgICByZXR1cm4gZm9ybWF0O1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UHJlZml4KHNwZWNpZmllciwgdmFsdWUpIHtcbiAgICB2YXIgZiA9IG5ld0Zvcm1hdCgoc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciksIHNwZWNpZmllci50eXBlID0gXCJmXCIsIHNwZWNpZmllcikpLFxuICAgICAgICBlID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMsXG4gICAgICAgIGsgPSBNYXRoLnBvdygxMCwgLWUpLFxuICAgICAgICBwcmVmaXggPSBwcmVmaXhlc1s4ICsgZSAvIDNdO1xuICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGYoayAqIHZhbHVlKSArIHByZWZpeDtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtYXQ6IG5ld0Zvcm1hdCxcbiAgICBmb3JtYXRQcmVmaXg6IGZvcm1hdFByZWZpeFxuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZ3JvdXBpbmcsIHRob3VzYW5kcykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIHdpZHRoKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5sZW5ndGgsXG4gICAgICAgIHQgPSBbXSxcbiAgICAgICAgaiA9IDAsXG4gICAgICAgIGcgPSBncm91cGluZ1swXSxcbiAgICAgICAgbGVuZ3RoID0gMDtcblxuICAgIHdoaWxlIChpID4gMCAmJiBnID4gMCkge1xuICAgICAgaWYgKGxlbmd0aCArIGcgKyAxID4gd2lkdGgpIGcgPSBNYXRoLm1heCgxLCB3aWR0aCAtIGxlbmd0aCk7XG4gICAgICB0LnB1c2godmFsdWUuc3Vic3RyaW5nKGkgLT0gZywgaSArIGcpKTtcbiAgICAgIGlmICgobGVuZ3RoICs9IGcgKyAxKSA+IHdpZHRoKSBicmVhaztcbiAgICAgIGcgPSBncm91cGluZ1tqID0gKGogKyAxKSAlIGdyb3VwaW5nLmxlbmd0aF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHQucmV2ZXJzZSgpLmpvaW4odGhvdXNhbmRzKTtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG51bWVyYWxzKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bMC05XS9nLCBmdW5jdGlvbihpKSB7XG4gICAgICByZXR1cm4gbnVtZXJhbHNbK2ldO1xuICAgIH0pO1xuICB9O1xufVxuIiwiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXApIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIC1leHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xufVxuIiwiaW1wb3J0IHt0aWNrU3RlcH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2Zvcm1hdCwgZm9ybWF0UHJlZml4LCBmb3JtYXRTcGVjaWZpZXIsIHByZWNpc2lvbkZpeGVkLCBwcmVjaXNpb25QcmVmaXgsIHByZWNpc2lvblJvdW5kfSBmcm9tIFwiZDMtZm9ybWF0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGRvbWFpbiwgY291bnQsIHNwZWNpZmllcikge1xuICB2YXIgc3RhcnQgPSBkb21haW5bMF0sXG4gICAgICBzdG9wID0gZG9tYWluW2RvbWFpbi5sZW5ndGggLSAxXSxcbiAgICAgIHN0ZXAgPSB0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQgPT0gbnVsbCA/IDEwIDogY291bnQpLFxuICAgICAgcHJlY2lzaW9uO1xuICBzcGVjaWZpZXIgPSBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyID09IG51bGwgPyBcIixmXCIgOiBzcGVjaWZpZXIpO1xuICBzd2l0Y2ggKHNwZWNpZmllci50eXBlKSB7XG4gICAgY2FzZSBcInNcIjoge1xuICAgICAgdmFyIHZhbHVlID0gTWF0aC5tYXgoTWF0aC5hYnMoc3RhcnQpLCBNYXRoLmFicyhzdG9wKSk7XG4gICAgICBpZiAoc3BlY2lmaWVyLnByZWNpc2lvbiA9PSBudWxsICYmICFpc05hTihwcmVjaXNpb24gPSBwcmVjaXNpb25QcmVmaXgoc3RlcCwgdmFsdWUpKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbjtcbiAgICAgIHJldHVybiBmb3JtYXRQcmVmaXgoc3BlY2lmaWVyLCB2YWx1ZSk7XG4gICAgfVxuICAgIGNhc2UgXCJcIjpcbiAgICBjYXNlIFwiZVwiOlxuICAgIGNhc2UgXCJnXCI6XG4gICAgY2FzZSBcInBcIjpcbiAgICBjYXNlIFwiclwiOiB7XG4gICAgICBpZiAoc3BlY2lmaWVyLnByZWNpc2lvbiA9PSBudWxsICYmICFpc05hTihwcmVjaXNpb24gPSBwcmVjaXNpb25Sb3VuZChzdGVwLCBNYXRoLm1heChNYXRoLmFicyhzdGFydCksIE1hdGguYWJzKHN0b3ApKSkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uIC0gKHNwZWNpZmllci50eXBlID09PSBcImVcIik7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBcImZcIjpcbiAgICBjYXNlIFwiJVwiOiB7XG4gICAgICBpZiAoc3BlY2lmaWVyLnByZWNpc2lvbiA9PSBudWxsICYmICFpc05hTihwcmVjaXNpb24gPSBwcmVjaXNpb25GaXhlZChzdGVwKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb24gLSAoc3BlY2lmaWVyLnR5cGUgPT09IFwiJVwiKSAqIDI7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZvcm1hdChzcGVjaWZpZXIpO1xufVxuIiwiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXAsIHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCh2YWx1ZSkgLyAzKSkpICogMyAtIGV4cG9uZW50KE1hdGguYWJzKHN0ZXApKSk7XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RlcCwgbWF4KSB7XG4gIHN0ZXAgPSBNYXRoLmFicyhzdGVwKSwgbWF4ID0gTWF0aC5hYnMobWF4KSAtIHN0ZXA7XG4gIHJldHVybiBNYXRoLm1heCgwLCBleHBvbmVudChtYXgpIC0gZXhwb25lbnQoc3RlcCkpICsgMTtcbn1cbiIsImltcG9ydCB7dGlja3MsIHRpY2tJbmNyZW1lbnR9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZU51bWJlciBhcyByZWludGVycG9sYXRlfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7ZGVmYXVsdCBhcyBjb250aW51b3VzLCBjb3B5LCBkZWludGVycG9sYXRlTGluZWFyIGFzIGRlaW50ZXJwb2xhdGV9IGZyb20gXCIuL2NvbnRpbnVvdXNcIjtcbmltcG9ydCB0aWNrRm9ybWF0IGZyb20gXCIuL3RpY2tGb3JtYXRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmVhcmlzaChzY2FsZSkge1xuICB2YXIgZG9tYWluID0gc2NhbGUuZG9tYWluO1xuXG4gIHNjYWxlLnRpY2tzID0gZnVuY3Rpb24oY291bnQpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHJldHVybiB0aWNrcyhkWzBdLCBkW2QubGVuZ3RoIC0gMV0sIGNvdW50ID09IG51bGwgPyAxMCA6IGNvdW50KTtcbiAgfTtcblxuICBzY2FsZS50aWNrRm9ybWF0ID0gZnVuY3Rpb24oY291bnQsIHNwZWNpZmllcikge1xuICAgIHJldHVybiB0aWNrRm9ybWF0KGRvbWFpbigpLCBjb3VudCwgc3BlY2lmaWVyKTtcbiAgfTtcblxuICBzY2FsZS5uaWNlID0gZnVuY3Rpb24oY291bnQpIHtcbiAgICBpZiAoY291bnQgPT0gbnVsbCkgY291bnQgPSAxMDtcblxuICAgIHZhciBkID0gZG9tYWluKCksXG4gICAgICAgIGkwID0gMCxcbiAgICAgICAgaTEgPSBkLmxlbmd0aCAtIDEsXG4gICAgICAgIHN0YXJ0ID0gZFtpMF0sXG4gICAgICAgIHN0b3AgPSBkW2kxXSxcbiAgICAgICAgc3RlcDtcblxuICAgIGlmIChzdG9wIDwgc3RhcnQpIHtcbiAgICAgIHN0ZXAgPSBzdGFydCwgc3RhcnQgPSBzdG9wLCBzdG9wID0gc3RlcDtcbiAgICAgIHN0ZXAgPSBpMCwgaTAgPSBpMSwgaTEgPSBzdGVwO1xuICAgIH1cblxuICAgIHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCk7XG5cbiAgICBpZiAoc3RlcCA+IDApIHtcbiAgICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAvIHN0ZXApICogc3RlcDtcbiAgICAgIHN0b3AgPSBNYXRoLmNlaWwoc3RvcCAvIHN0ZXApICogc3RlcDtcbiAgICAgIHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCk7XG4gICAgfSBlbHNlIGlmIChzdGVwIDwgMCkge1xuICAgICAgc3RhcnQgPSBNYXRoLmNlaWwoc3RhcnQgKiBzdGVwKSAvIHN0ZXA7XG4gICAgICBzdG9wID0gTWF0aC5mbG9vcihzdG9wICogc3RlcCkgLyBzdGVwO1xuICAgICAgc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KTtcbiAgICB9XG5cbiAgICBpZiAoc3RlcCA+IDApIHtcbiAgICAgIGRbaTBdID0gTWF0aC5mbG9vcihzdGFydCAvIHN0ZXApICogc3RlcDtcbiAgICAgIGRbaTFdID0gTWF0aC5jZWlsKHN0b3AgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICBkb21haW4oZCk7XG4gICAgfSBlbHNlIGlmIChzdGVwIDwgMCkge1xuICAgICAgZFtpMF0gPSBNYXRoLmNlaWwoc3RhcnQgKiBzdGVwKSAvIHN0ZXA7XG4gICAgICBkW2kxXSA9IE1hdGguZmxvb3Ioc3RvcCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgIGRvbWFpbihkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2NhbGU7XG4gIH07XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaW5lYXIoKSB7XG4gIHZhciBzY2FsZSA9IGNvbnRpbnVvdXMoZGVpbnRlcnBvbGF0ZSwgcmVpbnRlcnBvbGF0ZSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBsaW5lYXIoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGxpbmVhcmlzaChzY2FsZSk7XG59XG4iLCJ2YXIgdDAgPSBuZXcgRGF0ZSxcbiAgICB0MSA9IG5ldyBEYXRlO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBuZXdJbnRlcnZhbChmbG9vcmksIG9mZnNldGksIGNvdW50LCBmaWVsZCkge1xuXG4gIGZ1bmN0aW9uIGludGVydmFsKGRhdGUpIHtcbiAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSkpLCBkYXRlO1xuICB9XG5cbiAgaW50ZXJ2YWwuZmxvb3IgPSBpbnRlcnZhbDtcblxuICBpbnRlcnZhbC5jZWlsID0gZnVuY3Rpb24oZGF0ZSkge1xuICAgIHJldHVybiBmbG9vcmkoZGF0ZSA9IG5ldyBEYXRlKGRhdGUgLSAxKSksIG9mZnNldGkoZGF0ZSwgMSksIGZsb29yaShkYXRlKSwgZGF0ZTtcbiAgfTtcblxuICBpbnRlcnZhbC5yb3VuZCA9IGZ1bmN0aW9uKGRhdGUpIHtcbiAgICB2YXIgZDAgPSBpbnRlcnZhbChkYXRlKSxcbiAgICAgICAgZDEgPSBpbnRlcnZhbC5jZWlsKGRhdGUpO1xuICAgIHJldHVybiBkYXRlIC0gZDAgPCBkMSAtIGRhdGUgPyBkMCA6IGQxO1xuICB9O1xuXG4gIGludGVydmFsLm9mZnNldCA9IGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICByZXR1cm4gb2Zmc2V0aShkYXRlID0gbmV3IERhdGUoK2RhdGUpLCBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKSksIGRhdGU7XG4gIH07XG5cbiAgaW50ZXJ2YWwucmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIHZhciByYW5nZSA9IFtdLCBwcmV2aW91cztcbiAgICBzdGFydCA9IGludGVydmFsLmNlaWwoc3RhcnQpO1xuICAgIHN0ZXAgPSBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKTtcbiAgICBpZiAoIShzdGFydCA8IHN0b3ApIHx8ICEoc3RlcCA+IDApKSByZXR1cm4gcmFuZ2U7IC8vIGFsc28gaGFuZGxlcyBJbnZhbGlkIERhdGVcbiAgICBkbyByYW5nZS5wdXNoKHByZXZpb3VzID0gbmV3IERhdGUoK3N0YXJ0KSksIG9mZnNldGkoc3RhcnQsIHN0ZXApLCBmbG9vcmkoc3RhcnQpO1xuICAgIHdoaWxlIChwcmV2aW91cyA8IHN0YXJ0ICYmIHN0YXJ0IDwgc3RvcCk7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIGludGVydmFsLmZpbHRlciA9IGZ1bmN0aW9uKHRlc3QpIHtcbiAgICByZXR1cm4gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgICAgaWYgKGRhdGUgPj0gZGF0ZSkgd2hpbGUgKGZsb29yaShkYXRlKSwgIXRlc3QoZGF0ZSkpIGRhdGUuc2V0VGltZShkYXRlIC0gMSk7XG4gICAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgICAgaWYgKGRhdGUgPj0gZGF0ZSkge1xuICAgICAgICBpZiAoc3RlcCA8IDApIHdoaWxlICgrK3N0ZXAgPD0gMCkge1xuICAgICAgICAgIHdoaWxlIChvZmZzZXRpKGRhdGUsIC0xKSwgIXRlc3QoZGF0ZSkpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbiAgICAgICAgfSBlbHNlIHdoaWxlICgtLXN0ZXAgPj0gMCkge1xuICAgICAgICAgIHdoaWxlIChvZmZzZXRpKGRhdGUsICsxKSwgIXRlc3QoZGF0ZSkpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGlmIChjb3VudCkge1xuICAgIGludGVydmFsLmNvdW50ID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgICAgdDAuc2V0VGltZSgrc3RhcnQpLCB0MS5zZXRUaW1lKCtlbmQpO1xuICAgICAgZmxvb3JpKHQwKSwgZmxvb3JpKHQxKTtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKGNvdW50KHQwLCB0MSkpO1xuICAgIH07XG5cbiAgICBpbnRlcnZhbC5ldmVyeSA9IGZ1bmN0aW9uKHN0ZXApIHtcbiAgICAgIHN0ZXAgPSBNYXRoLmZsb29yKHN0ZXApO1xuICAgICAgcmV0dXJuICFpc0Zpbml0ZShzdGVwKSB8fCAhKHN0ZXAgPiAwKSA/IG51bGxcbiAgICAgICAgICA6ICEoc3RlcCA+IDEpID8gaW50ZXJ2YWxcbiAgICAgICAgICA6IGludGVydmFsLmZpbHRlcihmaWVsZFxuICAgICAgICAgICAgICA/IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGZpZWxkKGQpICUgc3RlcCA9PT0gMDsgfVxuICAgICAgICAgICAgICA6IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGludGVydmFsLmNvdW50KDAsIGQpICUgc3RlcCA9PT0gMDsgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBpbnRlcnZhbDtcbn1cbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbFwiO1xuXG52YXIgbWlsbGlzZWNvbmQgPSBpbnRlcnZhbChmdW5jdGlvbigpIHtcbiAgLy8gbm9vcFxufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGVuZCAtIHN0YXJ0O1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbm1pbGxpc2Vjb25kLmV2ZXJ5ID0gZnVuY3Rpb24oaykge1xuICBrID0gTWF0aC5mbG9vcihrKTtcbiAgaWYgKCFpc0Zpbml0ZShrKSB8fCAhKGsgPiAwKSkgcmV0dXJuIG51bGw7XG4gIGlmICghKGsgPiAxKSkgcmV0dXJuIG1pbGxpc2Vjb25kO1xuICByZXR1cm4gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0VGltZShNYXRoLmZsb29yKGRhdGUgLyBrKSAqIGspO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGspO1xuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBrO1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1pbGxpc2Vjb25kO1xuZXhwb3J0IHZhciBtaWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZC5yYW5nZTtcbiIsImV4cG9ydCB2YXIgZHVyYXRpb25TZWNvbmQgPSAxZTM7XG5leHBvcnQgdmFyIGR1cmF0aW9uTWludXRlID0gNmU0O1xuZXhwb3J0IHZhciBkdXJhdGlvbkhvdXIgPSAzNmU1O1xuZXhwb3J0IHZhciBkdXJhdGlvbkRheSA9IDg2NGU1O1xuZXhwb3J0IHZhciBkdXJhdGlvbldlZWsgPSA2MDQ4ZTU7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25EYXksIGR1cmF0aW9uTWludXRlfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgZGF5ID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCAtIChlbmQuZ2V0VGltZXpvbmVPZmZzZXQoKSAtIHN0YXJ0LmdldFRpbWV6b25lT2Zmc2V0KCkpICogZHVyYXRpb25NaW51dGUpIC8gZHVyYXRpb25EYXk7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldERhdGUoKSAtIDE7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGF5O1xuZXhwb3J0IHZhciBkYXlzID0gZGF5LnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uU2Vjb25kfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgc2Vjb25kID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFRpbWUoTWF0aC5mbG9vcihkYXRlIC8gZHVyYXRpb25TZWNvbmQpICogZHVyYXRpb25TZWNvbmQpO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25TZWNvbmQpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uU2Vjb25kO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENTZWNvbmRzKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgc2Vjb25kO1xuZXhwb3J0IHZhciBzZWNvbmRzID0gc2Vjb25kLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uTWludXRlfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgbWludXRlID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFRpbWUoTWF0aC5mbG9vcihkYXRlIC8gZHVyYXRpb25NaW51dGUpICogZHVyYXRpb25NaW51dGUpO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25NaW51dGUpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uTWludXRlO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRNaW51dGVzKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgbWludXRlO1xuZXhwb3J0IHZhciBtaW51dGVzID0gbWludXRlLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uSG91ciwgZHVyYXRpb25NaW51dGV9IGZyb20gXCIuL2R1cmF0aW9uXCI7XG5cbnZhciBob3VyID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICB2YXIgb2Zmc2V0ID0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpICogZHVyYXRpb25NaW51dGUgJSBkdXJhdGlvbkhvdXI7XG4gIGlmIChvZmZzZXQgPCAwKSBvZmZzZXQgKz0gZHVyYXRpb25Ib3VyO1xuICBkYXRlLnNldFRpbWUoTWF0aC5mbG9vcigoK2RhdGUgLSBvZmZzZXQpIC8gZHVyYXRpb25Ib3VyKSAqIGR1cmF0aW9uSG91ciArIG9mZnNldCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbkhvdXIpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uSG91cjtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0SG91cnMoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBob3VyO1xuZXhwb3J0IHZhciBob3VycyA9IGhvdXIucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25NaW51dGUsIGR1cmF0aW9uV2Vla30gZnJvbSBcIi4vZHVyYXRpb25cIjtcblxuZnVuY3Rpb24gd2Vla2RheShpKSB7XG4gIHJldHVybiBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gKGRhdGUuZ2V0RGF5KCkgKyA3IC0gaSkgJSA3KTtcbiAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgc3RlcCAqIDcpO1xuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCAtIChlbmQuZ2V0VGltZXpvbmVPZmZzZXQoKSAtIHN0YXJ0LmdldFRpbWV6b25lT2Zmc2V0KCkpICogZHVyYXRpb25NaW51dGUpIC8gZHVyYXRpb25XZWVrO1xuICB9KTtcbn1cblxuZXhwb3J0IHZhciBzdW5kYXkgPSB3ZWVrZGF5KDApO1xuZXhwb3J0IHZhciBtb25kYXkgPSB3ZWVrZGF5KDEpO1xuZXhwb3J0IHZhciB0dWVzZGF5ID0gd2Vla2RheSgyKTtcbmV4cG9ydCB2YXIgd2VkbmVzZGF5ID0gd2Vla2RheSgzKTtcbmV4cG9ydCB2YXIgdGh1cnNkYXkgPSB3ZWVrZGF5KDQpO1xuZXhwb3J0IHZhciBmcmlkYXkgPSB3ZWVrZGF5KDUpO1xuZXhwb3J0IHZhciBzYXR1cmRheSA9IHdlZWtkYXkoNik7XG5cbmV4cG9ydCB2YXIgc3VuZGF5cyA9IHN1bmRheS5yYW5nZTtcbmV4cG9ydCB2YXIgbW9uZGF5cyA9IG1vbmRheS5yYW5nZTtcbmV4cG9ydCB2YXIgdHVlc2RheXMgPSB0dWVzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB3ZWRuZXNkYXlzID0gd2VkbmVzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB0aHVyc2RheXMgPSB0aHVyc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgZnJpZGF5cyA9IGZyaWRheS5yYW5nZTtcbmV4cG9ydCB2YXIgc2F0dXJkYXlzID0gc2F0dXJkYXkucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcblxudmFyIHllYXIgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0TW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0RnVsbFllYXIoKSAtIHN0YXJ0LmdldEZ1bGxZZWFyKCk7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7XG59KTtcblxuLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxueWVhci5ldmVyeSA9IGZ1bmN0aW9uKGspIHtcbiAgcmV0dXJuICFpc0Zpbml0ZShrID0gTWF0aC5mbG9vcihrKSkgfHwgIShrID4gMCkgPyBudWxsIDogaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihkYXRlLmdldEZ1bGxZZWFyKCkgLyBrKSAqIGspO1xuICAgIGRhdGUuc2V0TW9udGgoMCwgMSk7XG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgc3RlcCAqIGspO1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHllYXI7XG5leHBvcnQgdmFyIHllYXJzID0geWVhci5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbFwiO1xuXG52YXIgbW9udGggPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0RGF0ZSgxKTtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRNb250aChkYXRlLmdldE1vbnRoKCkgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGVuZC5nZXRNb250aCgpIC0gc3RhcnQuZ2V0TW9udGgoKSArIChlbmQuZ2V0RnVsbFllYXIoKSAtIHN0YXJ0LmdldEZ1bGxZZWFyKCkpICogMTI7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldE1vbnRoKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgbW9udGg7XG5leHBvcnQgdmFyIG1vbnRocyA9IG1vbnRoLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uTWludXRlfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgdXRjTWludXRlID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ1NlY29uZHMoMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbk1pbnV0ZSk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25NaW51dGU7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ01pbnV0ZXMoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB1dGNNaW51dGU7XG5leHBvcnQgdmFyIHV0Y01pbnV0ZXMgPSB1dGNNaW51dGUucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25Ib3VyfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgdXRjSG91ciA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRVVENNaW51dGVzKDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25Ib3VyKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkhvdXI7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0hvdXJzKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgdXRjSG91cjtcbmV4cG9ydCB2YXIgdXRjSG91cnMgPSB1dGNIb3VyLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uRGF5fSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgdXRjRGF5ID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkRheTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDRGF0ZSgpIC0gMTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB1dGNEYXk7XG5leHBvcnQgdmFyIHV0Y0RheXMgPSB1dGNEYXkucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25XZWVrfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG5mdW5jdGlvbiB1dGNXZWVrZGF5KGkpIHtcbiAgcmV0dXJuIGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSAoZGF0ZS5nZXRVVENEYXkoKSArIDcgLSBpKSAlIDcpO1xuICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBzdGVwICogNyk7XG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uV2VlaztcbiAgfSk7XG59XG5cbmV4cG9ydCB2YXIgdXRjU3VuZGF5ID0gdXRjV2Vla2RheSgwKTtcbmV4cG9ydCB2YXIgdXRjTW9uZGF5ID0gdXRjV2Vla2RheSgxKTtcbmV4cG9ydCB2YXIgdXRjVHVlc2RheSA9IHV0Y1dlZWtkYXkoMik7XG5leHBvcnQgdmFyIHV0Y1dlZG5lc2RheSA9IHV0Y1dlZWtkYXkoMyk7XG5leHBvcnQgdmFyIHV0Y1RodXJzZGF5ID0gdXRjV2Vla2RheSg0KTtcbmV4cG9ydCB2YXIgdXRjRnJpZGF5ID0gdXRjV2Vla2RheSg1KTtcbmV4cG9ydCB2YXIgdXRjU2F0dXJkYXkgPSB1dGNXZWVrZGF5KDYpO1xuXG5leHBvcnQgdmFyIHV0Y1N1bmRheXMgPSB1dGNTdW5kYXkucmFuZ2U7XG5leHBvcnQgdmFyIHV0Y01vbmRheXMgPSB1dGNNb25kYXkucmFuZ2U7XG5leHBvcnQgdmFyIHV0Y1R1ZXNkYXlzID0gdXRjVHVlc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjV2VkbmVzZGF5cyA9IHV0Y1dlZG5lc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjVGh1cnNkYXlzID0gdXRjVGh1cnNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHV0Y0ZyaWRheXMgPSB1dGNGcmlkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHV0Y1NhdHVyZGF5cyA9IHV0Y1NhdHVyZGF5LnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5cbnZhciB1dGNZZWFyID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZW5kLmdldFVUQ0Z1bGxZZWFyKCkgLSBzdGFydC5nZXRVVENGdWxsWWVhcigpO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbnV0Y1llYXIuZXZlcnkgPSBmdW5jdGlvbihrKSB7XG4gIHJldHVybiAhaXNGaW5pdGUoayA9IE1hdGguZmxvb3IoaykpIHx8ICEoayA+IDApID8gbnVsbCA6IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZGF0ZS5nZXRVVENGdWxsWWVhcigpIC8gaykgKiBrKTtcbiAgICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSArIHN0ZXAgKiBrKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1dGNZZWFyO1xuZXhwb3J0IHZhciB1dGNZZWFycyA9IHV0Y1llYXIucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcblxudmFyIHV0Y01vbnRoID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ0RhdGUoMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VVRDTW9udGgoZGF0ZS5nZXRVVENNb250aCgpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0VVRDTW9udGgoKSAtIHN0YXJ0LmdldFVUQ01vbnRoKCkgKyAoZW5kLmdldFVUQ0Z1bGxZZWFyKCkgLSBzdGFydC5nZXRVVENGdWxsWWVhcigpKSAqIDEyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNb250aCgpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0Y01vbnRoO1xuZXhwb3J0IHZhciB1dGNNb250aHMgPSB1dGNNb250aC5yYW5nZTtcbiIsImltcG9ydCB7XG4gIHRpbWVEYXksXG4gIHRpbWVTdW5kYXksXG4gIHRpbWVNb25kYXksXG4gIHRpbWVUaHVyc2RheSxcbiAgdGltZVllYXIsXG4gIHV0Y0RheSxcbiAgdXRjU3VuZGF5LFxuICB1dGNNb25kYXksXG4gIHV0Y1RodXJzZGF5LFxuICB1dGNZZWFyXG59IGZyb20gXCJkMy10aW1lXCI7XG5cbmZ1bmN0aW9uIGxvY2FsRGF0ZShkKSB7XG4gIGlmICgwIDw9IGQueSAmJiBkLnkgPCAxMDApIHtcbiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKC0xLCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKTtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKGQueSk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKGQueSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCk7XG59XG5cbmZ1bmN0aW9uIHV0Y0RhdGUoZCkge1xuICBpZiAoMCA8PSBkLnkgJiYgZC55IDwgMTAwKSB7XG4gICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQygtMSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCkpO1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoZC55KTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoZC55LCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKSk7XG59XG5cbmZ1bmN0aW9uIG5ld1llYXIoeSkge1xuICByZXR1cm4ge3k6IHksIG06IDAsIGQ6IDEsIEg6IDAsIE06IDAsIFM6IDAsIEw6IDB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXRMb2NhbGUobG9jYWxlKSB7XG4gIHZhciBsb2NhbGVfZGF0ZVRpbWUgPSBsb2NhbGUuZGF0ZVRpbWUsXG4gICAgICBsb2NhbGVfZGF0ZSA9IGxvY2FsZS5kYXRlLFxuICAgICAgbG9jYWxlX3RpbWUgPSBsb2NhbGUudGltZSxcbiAgICAgIGxvY2FsZV9wZXJpb2RzID0gbG9jYWxlLnBlcmlvZHMsXG4gICAgICBsb2NhbGVfd2Vla2RheXMgPSBsb2NhbGUuZGF5cyxcbiAgICAgIGxvY2FsZV9zaG9ydFdlZWtkYXlzID0gbG9jYWxlLnNob3J0RGF5cyxcbiAgICAgIGxvY2FsZV9tb250aHMgPSBsb2NhbGUubW9udGhzLFxuICAgICAgbG9jYWxlX3Nob3J0TW9udGhzID0gbG9jYWxlLnNob3J0TW9udGhzO1xuXG4gIHZhciBwZXJpb2RSZSA9IGZvcm1hdFJlKGxvY2FsZV9wZXJpb2RzKSxcbiAgICAgIHBlcmlvZExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfcGVyaW9kcyksXG4gICAgICB3ZWVrZGF5UmUgPSBmb3JtYXRSZShsb2NhbGVfd2Vla2RheXMpLFxuICAgICAgd2Vla2RheUxvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfd2Vla2RheXMpLFxuICAgICAgc2hvcnRXZWVrZGF5UmUgPSBmb3JtYXRSZShsb2NhbGVfc2hvcnRXZWVrZGF5cyksXG4gICAgICBzaG9ydFdlZWtkYXlMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3Nob3J0V2Vla2RheXMpLFxuICAgICAgbW9udGhSZSA9IGZvcm1hdFJlKGxvY2FsZV9tb250aHMpLFxuICAgICAgbW9udGhMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX21vbnRocyksXG4gICAgICBzaG9ydE1vbnRoUmUgPSBmb3JtYXRSZShsb2NhbGVfc2hvcnRNb250aHMpLFxuICAgICAgc2hvcnRNb250aExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfc2hvcnRNb250aHMpO1xuXG4gIHZhciBmb3JtYXRzID0ge1xuICAgIFwiYVwiOiBmb3JtYXRTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IGZvcm1hdFdlZWtkYXksXG4gICAgXCJiXCI6IGZvcm1hdFNob3J0TW9udGgsXG4gICAgXCJCXCI6IGZvcm1hdE1vbnRoLFxuICAgIFwiY1wiOiBudWxsLFxuICAgIFwiZFwiOiBmb3JtYXREYXlPZk1vbnRoLFxuICAgIFwiZVwiOiBmb3JtYXREYXlPZk1vbnRoLFxuICAgIFwiZlwiOiBmb3JtYXRNaWNyb3NlY29uZHMsXG4gICAgXCJIXCI6IGZvcm1hdEhvdXIyNCxcbiAgICBcIklcIjogZm9ybWF0SG91cjEyLFxuICAgIFwialwiOiBmb3JtYXREYXlPZlllYXIsXG4gICAgXCJMXCI6IGZvcm1hdE1pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogZm9ybWF0TW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IGZvcm1hdE1pbnV0ZXMsXG4gICAgXCJwXCI6IGZvcm1hdFBlcmlvZCxcbiAgICBcIlFcIjogZm9ybWF0VW5peFRpbWVzdGFtcCxcbiAgICBcInNcIjogZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMsXG4gICAgXCJTXCI6IGZvcm1hdFNlY29uZHMsXG4gICAgXCJ1XCI6IGZvcm1hdFdlZWtkYXlOdW1iZXJNb25kYXksXG4gICAgXCJVXCI6IGZvcm1hdFdlZWtOdW1iZXJTdW5kYXksXG4gICAgXCJWXCI6IGZvcm1hdFdlZWtOdW1iZXJJU08sXG4gICAgXCJ3XCI6IGZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXksXG4gICAgXCJXXCI6IGZvcm1hdFdlZWtOdW1iZXJNb25kYXksXG4gICAgXCJ4XCI6IG51bGwsXG4gICAgXCJYXCI6IG51bGwsXG4gICAgXCJ5XCI6IGZvcm1hdFllYXIsXG4gICAgXCJZXCI6IGZvcm1hdEZ1bGxZZWFyLFxuICAgIFwiWlwiOiBmb3JtYXRab25lLFxuICAgIFwiJVwiOiBmb3JtYXRMaXRlcmFsUGVyY2VudFxuICB9O1xuXG4gIHZhciB1dGNGb3JtYXRzID0ge1xuICAgIFwiYVwiOiBmb3JtYXRVVENTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IGZvcm1hdFVUQ1dlZWtkYXksXG4gICAgXCJiXCI6IGZvcm1hdFVUQ1Nob3J0TW9udGgsXG4gICAgXCJCXCI6IGZvcm1hdFVUQ01vbnRoLFxuICAgIFwiY1wiOiBudWxsLFxuICAgIFwiZFwiOiBmb3JtYXRVVENEYXlPZk1vbnRoLFxuICAgIFwiZVwiOiBmb3JtYXRVVENEYXlPZk1vbnRoLFxuICAgIFwiZlwiOiBmb3JtYXRVVENNaWNyb3NlY29uZHMsXG4gICAgXCJIXCI6IGZvcm1hdFVUQ0hvdXIyNCxcbiAgICBcIklcIjogZm9ybWF0VVRDSG91cjEyLFxuICAgIFwialwiOiBmb3JtYXRVVENEYXlPZlllYXIsXG4gICAgXCJMXCI6IGZvcm1hdFVUQ01pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogZm9ybWF0VVRDTW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IGZvcm1hdFVUQ01pbnV0ZXMsXG4gICAgXCJwXCI6IGZvcm1hdFVUQ1BlcmlvZCxcbiAgICBcIlFcIjogZm9ybWF0VW5peFRpbWVzdGFtcCxcbiAgICBcInNcIjogZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMsXG4gICAgXCJTXCI6IGZvcm1hdFVUQ1NlY29uZHMsXG4gICAgXCJ1XCI6IGZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJNb25kYXksXG4gICAgXCJVXCI6IGZvcm1hdFVUQ1dlZWtOdW1iZXJTdW5kYXksXG4gICAgXCJWXCI6IGZvcm1hdFVUQ1dlZWtOdW1iZXJJU08sXG4gICAgXCJ3XCI6IGZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJTdW5kYXksXG4gICAgXCJXXCI6IGZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXksXG4gICAgXCJ4XCI6IG51bGwsXG4gICAgXCJYXCI6IG51bGwsXG4gICAgXCJ5XCI6IGZvcm1hdFVUQ1llYXIsXG4gICAgXCJZXCI6IGZvcm1hdFVUQ0Z1bGxZZWFyLFxuICAgIFwiWlwiOiBmb3JtYXRVVENab25lLFxuICAgIFwiJVwiOiBmb3JtYXRMaXRlcmFsUGVyY2VudFxuICB9O1xuXG4gIHZhciBwYXJzZXMgPSB7XG4gICAgXCJhXCI6IHBhcnNlU2hvcnRXZWVrZGF5LFxuICAgIFwiQVwiOiBwYXJzZVdlZWtkYXksXG4gICAgXCJiXCI6IHBhcnNlU2hvcnRNb250aCxcbiAgICBcIkJcIjogcGFyc2VNb250aCxcbiAgICBcImNcIjogcGFyc2VMb2NhbGVEYXRlVGltZSxcbiAgICBcImRcIjogcGFyc2VEYXlPZk1vbnRoLFxuICAgIFwiZVwiOiBwYXJzZURheU9mTW9udGgsXG4gICAgXCJmXCI6IHBhcnNlTWljcm9zZWNvbmRzLFxuICAgIFwiSFwiOiBwYXJzZUhvdXIyNCxcbiAgICBcIklcIjogcGFyc2VIb3VyMjQsXG4gICAgXCJqXCI6IHBhcnNlRGF5T2ZZZWFyLFxuICAgIFwiTFwiOiBwYXJzZU1pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogcGFyc2VNb250aE51bWJlcixcbiAgICBcIk1cIjogcGFyc2VNaW51dGVzLFxuICAgIFwicFwiOiBwYXJzZVBlcmlvZCxcbiAgICBcIlFcIjogcGFyc2VVbml4VGltZXN0YW1wLFxuICAgIFwic1wiOiBwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzLFxuICAgIFwiU1wiOiBwYXJzZVNlY29uZHMsXG4gICAgXCJ1XCI6IHBhcnNlV2Vla2RheU51bWJlck1vbmRheSxcbiAgICBcIlVcIjogcGFyc2VXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwiVlwiOiBwYXJzZVdlZWtOdW1iZXJJU08sXG4gICAgXCJ3XCI6IHBhcnNlV2Vla2RheU51bWJlclN1bmRheSxcbiAgICBcIldcIjogcGFyc2VXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBwYXJzZUxvY2FsZURhdGUsXG4gICAgXCJYXCI6IHBhcnNlTG9jYWxlVGltZSxcbiAgICBcInlcIjogcGFyc2VZZWFyLFxuICAgIFwiWVwiOiBwYXJzZUZ1bGxZZWFyLFxuICAgIFwiWlwiOiBwYXJzZVpvbmUsXG4gICAgXCIlXCI6IHBhcnNlTGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICAvLyBUaGVzZSByZWN1cnNpdmUgZGlyZWN0aXZlIGRlZmluaXRpb25zIG11c3QgYmUgZGVmZXJyZWQuXG4gIGZvcm1hdHMueCA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZSwgZm9ybWF0cyk7XG4gIGZvcm1hdHMuWCA9IG5ld0Zvcm1hdChsb2NhbGVfdGltZSwgZm9ybWF0cyk7XG4gIGZvcm1hdHMuYyA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZVRpbWUsIGZvcm1hdHMpO1xuICB1dGNGb3JtYXRzLnggPSBuZXdGb3JtYXQobG9jYWxlX2RhdGUsIHV0Y0Zvcm1hdHMpO1xuICB1dGNGb3JtYXRzLlggPSBuZXdGb3JtYXQobG9jYWxlX3RpbWUsIHV0Y0Zvcm1hdHMpO1xuICB1dGNGb3JtYXRzLmMgPSBuZXdGb3JtYXQobG9jYWxlX2RhdGVUaW1lLCB1dGNGb3JtYXRzKTtcblxuICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyLCBmb3JtYXRzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBbXSxcbiAgICAgICAgICBpID0gLTEsXG4gICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgbiA9IHNwZWNpZmllci5sZW5ndGgsXG4gICAgICAgICAgYyxcbiAgICAgICAgICBwYWQsXG4gICAgICAgICAgZm9ybWF0O1xuXG4gICAgICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSk7XG5cbiAgICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICAgIGlmIChzcGVjaWZpZXIuY2hhckNvZGVBdChpKSA9PT0gMzcpIHtcbiAgICAgICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgICAgIGlmICgocGFkID0gcGFkc1tjID0gc3BlY2lmaWVyLmNoYXJBdCgrK2kpXSkgIT0gbnVsbCkgYyA9IHNwZWNpZmllci5jaGFyQXQoKytpKTtcbiAgICAgICAgICBlbHNlIHBhZCA9IGMgPT09IFwiZVwiID8gXCIgXCIgOiBcIjBcIjtcbiAgICAgICAgICBpZiAoZm9ybWF0ID0gZm9ybWF0c1tjXSkgYyA9IGZvcm1hdChkYXRlLCBwYWQpO1xuICAgICAgICAgIHN0cmluZy5wdXNoKGMpO1xuICAgICAgICAgIGogPSBpICsgMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgcmV0dXJuIHN0cmluZy5qb2luKFwiXCIpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBuZXdQYXJzZShzcGVjaWZpZXIsIG5ld0RhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICB2YXIgZCA9IG5ld1llYXIoMTkwMCksXG4gICAgICAgICAgaSA9IHBhcnNlU3BlY2lmaWVyKGQsIHNwZWNpZmllciwgc3RyaW5nICs9IFwiXCIsIDApLFxuICAgICAgICAgIHdlZWssIGRheTtcbiAgICAgIGlmIChpICE9IHN0cmluZy5sZW5ndGgpIHJldHVybiBudWxsO1xuXG4gICAgICAvLyBJZiBhIFVOSVggdGltZXN0YW1wIGlzIHNwZWNpZmllZCwgcmV0dXJuIGl0LlxuICAgICAgaWYgKFwiUVwiIGluIGQpIHJldHVybiBuZXcgRGF0ZShkLlEpO1xuXG4gICAgICAvLyBUaGUgYW0tcG0gZmxhZyBpcyAwIGZvciBBTSwgYW5kIDEgZm9yIFBNLlxuICAgICAgaWYgKFwicFwiIGluIGQpIGQuSCA9IGQuSCAlIDEyICsgZC5wICogMTI7XG5cbiAgICAgIC8vIENvbnZlcnQgZGF5LW9mLXdlZWsgYW5kIHdlZWstb2YteWVhciB0byBkYXktb2YteWVhci5cbiAgICAgIGlmIChcIlZcIiBpbiBkKSB7XG4gICAgICAgIGlmIChkLlYgPCAxIHx8IGQuViA+IDUzKSByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKCEoXCJ3XCIgaW4gZCkpIGQudyA9IDE7XG4gICAgICAgIGlmIChcIlpcIiBpbiBkKSB7XG4gICAgICAgICAgd2VlayA9IHV0Y0RhdGUobmV3WWVhcihkLnkpKSwgZGF5ID0gd2Vlay5nZXRVVENEYXkoKTtcbiAgICAgICAgICB3ZWVrID0gZGF5ID4gNCB8fCBkYXkgPT09IDAgPyB1dGNNb25kYXkuY2VpbCh3ZWVrKSA6IHV0Y01vbmRheSh3ZWVrKTtcbiAgICAgICAgICB3ZWVrID0gdXRjRGF5Lm9mZnNldCh3ZWVrLCAoZC5WIC0gMSkgKiA3KTtcbiAgICAgICAgICBkLnkgPSB3ZWVrLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgICAgICAgZC5tID0gd2Vlay5nZXRVVENNb250aCgpO1xuICAgICAgICAgIGQuZCA9IHdlZWsuZ2V0VVRDRGF0ZSgpICsgKGQudyArIDYpICUgNztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3ZWVrID0gbmV3RGF0ZShuZXdZZWFyKGQueSkpLCBkYXkgPSB3ZWVrLmdldERheSgpO1xuICAgICAgICAgIHdlZWsgPSBkYXkgPiA0IHx8IGRheSA9PT0gMCA/IHRpbWVNb25kYXkuY2VpbCh3ZWVrKSA6IHRpbWVNb25kYXkod2Vlayk7XG4gICAgICAgICAgd2VlayA9IHRpbWVEYXkub2Zmc2V0KHdlZWssIChkLlYgLSAxKSAqIDcpO1xuICAgICAgICAgIGQueSA9IHdlZWsuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICBkLm0gPSB3ZWVrLmdldE1vbnRoKCk7XG4gICAgICAgICAgZC5kID0gd2Vlay5nZXREYXRlKCkgKyAoZC53ICsgNikgJSA3O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFwiV1wiIGluIGQgfHwgXCJVXCIgaW4gZCkge1xuICAgICAgICBpZiAoIShcIndcIiBpbiBkKSkgZC53ID0gXCJ1XCIgaW4gZCA/IGQudSAlIDcgOiBcIldcIiBpbiBkID8gMSA6IDA7XG4gICAgICAgIGRheSA9IFwiWlwiIGluIGQgPyB1dGNEYXRlKG5ld1llYXIoZC55KSkuZ2V0VVRDRGF5KCkgOiBuZXdEYXRlKG5ld1llYXIoZC55KSkuZ2V0RGF5KCk7XG4gICAgICAgIGQubSA9IDA7XG4gICAgICAgIGQuZCA9IFwiV1wiIGluIGQgPyAoZC53ICsgNikgJSA3ICsgZC5XICogNyAtIChkYXkgKyA1KSAlIDcgOiBkLncgKyBkLlUgKiA3IC0gKGRheSArIDYpICUgNztcbiAgICAgIH1cblxuICAgICAgLy8gSWYgYSB0aW1lIHpvbmUgaXMgc3BlY2lmaWVkLCBhbGwgZmllbGRzIGFyZSBpbnRlcnByZXRlZCBhcyBVVEMgYW5kIHRoZW5cbiAgICAgIC8vIG9mZnNldCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCB0aW1lIHpvbmUuXG4gICAgICBpZiAoXCJaXCIgaW4gZCkge1xuICAgICAgICBkLkggKz0gZC5aIC8gMTAwIHwgMDtcbiAgICAgICAgZC5NICs9IGQuWiAlIDEwMDtcbiAgICAgICAgcmV0dXJuIHV0Y0RhdGUoZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIE90aGVyd2lzZSwgYWxsIGZpZWxkcyBhcmUgaW4gbG9jYWwgdGltZS5cbiAgICAgIHJldHVybiBuZXdEYXRlKGQpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVNwZWNpZmllcihkLCBzcGVjaWZpZXIsIHN0cmluZywgaikge1xuICAgIHZhciBpID0gMCxcbiAgICAgICAgbiA9IHNwZWNpZmllci5sZW5ndGgsXG4gICAgICAgIG0gPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICBjLFxuICAgICAgICBwYXJzZTtcblxuICAgIHdoaWxlIChpIDwgbikge1xuICAgICAgaWYgKGogPj0gbSkgcmV0dXJuIC0xO1xuICAgICAgYyA9IHNwZWNpZmllci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICBpZiAoYyA9PT0gMzcpIHtcbiAgICAgICAgYyA9IHNwZWNpZmllci5jaGFyQXQoaSsrKTtcbiAgICAgICAgcGFyc2UgPSBwYXJzZXNbYyBpbiBwYWRzID8gc3BlY2lmaWVyLmNoYXJBdChpKyspIDogY107XG4gICAgICAgIGlmICghcGFyc2UgfHwgKChqID0gcGFyc2UoZCwgc3RyaW5nLCBqKSkgPCAwKSkgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIGlmIChjICE9IHN0cmluZy5jaGFyQ29kZUF0KGorKykpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBqO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VQZXJpb2QoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBwZXJpb2RSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5wID0gcGVyaW9kTG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU2hvcnRXZWVrZGF5KGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gc2hvcnRXZWVrZGF5UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQudyA9IHNob3J0V2Vla2RheUxvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSB3ZWVrZGF5UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQudyA9IHdlZWtkYXlMb29rdXBbblswXS50b0xvd2VyQ2FzZSgpXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTaG9ydE1vbnRoKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gc2hvcnRNb250aFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLm0gPSBzaG9ydE1vbnRoTG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBtb250aFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLm0gPSBtb250aExvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGVUaW1lKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfZGF0ZVRpbWUsIHN0cmluZywgaSk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGUoZCwgc3RyaW5nLCBpKSB7XG4gICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV9kYXRlLCBzdHJpbmcsIGkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VMb2NhbGVUaW1lKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfdGltZSwgc3RyaW5nLCBpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFNob3J0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydFdlZWtkYXlzW2QuZ2V0RGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV93ZWVrZGF5c1tkLmdldERheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFNob3J0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRNb250aHNbZC5nZXRNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdE1vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldE1vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UGVyaW9kKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3BlcmlvZHNbKyhkLmdldEhvdXJzKCkgPj0gMTIpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1Nob3J0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydFdlZWtkYXlzW2QuZ2V0VVRDRGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV93ZWVrZGF5c1tkLmdldFVUQ0RheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1Nob3J0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRNb250aHNbZC5nZXRVVENNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ01vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldFVUQ01vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDUGVyaW9kKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3BlcmlvZHNbKyhkLmdldFVUQ0hvdXJzKCkgPj0gMTIpXTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZm9ybWF0OiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBmID0gbmV3Rm9ybWF0KHNwZWNpZmllciArPSBcIlwiLCBmb3JtYXRzKTtcbiAgICAgIGYudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBmO1xuICAgIH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIHAgPSBuZXdQYXJzZShzcGVjaWZpZXIgKz0gXCJcIiwgbG9jYWxEYXRlKTtcbiAgICAgIHAudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBwO1xuICAgIH0sXG4gICAgdXRjRm9ybWF0OiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBmID0gbmV3Rm9ybWF0KHNwZWNpZmllciArPSBcIlwiLCB1dGNGb3JtYXRzKTtcbiAgICAgIGYudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBmO1xuICAgIH0sXG4gICAgdXRjUGFyc2U6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIHAgPSBuZXdQYXJzZShzcGVjaWZpZXIsIHV0Y0RhdGUpO1xuICAgICAgcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICB9O1xufVxuXG52YXIgcGFkcyA9IHtcIi1cIjogXCJcIiwgXCJfXCI6IFwiIFwiLCBcIjBcIjogXCIwXCJ9LFxuICAgIG51bWJlclJlID0gL15cXHMqXFxkKy8sIC8vIG5vdGU6IGlnbm9yZXMgbmV4dCBkaXJlY3RpdmVcbiAgICBwZXJjZW50UmUgPSAvXiUvLFxuICAgIHJlcXVvdGVSZSA9IC9bXFxcXF4kKis/fFtcXF0oKS57fV0vZztcblxuZnVuY3Rpb24gcGFkKHZhbHVlLCBmaWxsLCB3aWR0aCkge1xuICB2YXIgc2lnbiA9IHZhbHVlIDwgMCA/IFwiLVwiIDogXCJcIixcbiAgICAgIHN0cmluZyA9IChzaWduID8gLXZhbHVlIDogdmFsdWUpICsgXCJcIixcbiAgICAgIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIHJldHVybiBzaWduICsgKGxlbmd0aCA8IHdpZHRoID8gbmV3IEFycmF5KHdpZHRoIC0gbGVuZ3RoICsgMSkuam9pbihmaWxsKSArIHN0cmluZyA6IHN0cmluZyk7XG59XG5cbmZ1bmN0aW9uIHJlcXVvdGUocykge1xuICByZXR1cm4gcy5yZXBsYWNlKHJlcXVvdGVSZSwgXCJcXFxcJCZcIik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFJlKG5hbWVzKSB7XG4gIHJldHVybiBuZXcgUmVnRXhwKFwiXig/OlwiICsgbmFtZXMubWFwKHJlcXVvdGUpLmpvaW4oXCJ8XCIpICsgXCIpXCIsIFwiaVwiKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TG9va3VwKG5hbWVzKSB7XG4gIHZhciBtYXAgPSB7fSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbikgbWFwW25hbWVzW2ldLnRvTG93ZXJDYXNlKCldID0gaTtcbiAgcmV0dXJuIG1hcDtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrZGF5TnVtYmVyU3VuZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gKGQudyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla2RheU51bWJlck1vbmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IChkLnUgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtOdW1iZXJTdW5kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5VID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrTnVtYmVySVNPKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuViA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla051bWJlck1vbmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlcgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUZ1bGxZZWFyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA0KSk7XG4gIHJldHVybiBuID8gKGQueSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLnkgPSArblswXSArICgrblswXSA+IDY4ID8gMTkwMCA6IDIwMDApLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWm9uZShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSAvXihaKXwoWystXVxcZFxcZCkoPzo6PyhcXGRcXGQpKT8vLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA2KSk7XG4gIHJldHVybiBuID8gKGQuWiA9IG5bMV0gPyAwIDogLShuWzJdICsgKG5bM10gfHwgXCIwMFwiKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNb250aE51bWJlcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLm0gPSBuWzBdIC0gMSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZURheU9mTW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5kID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VEYXlPZlllYXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDMpKTtcbiAgcmV0dXJuIG4gPyAoZC5tID0gMCwgZC5kID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VIb3VyMjQoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5IID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNaW51dGVzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuTSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlMgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pbGxpc2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMykpO1xuICByZXR1cm4gbiA/IChkLkwgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pY3Jvc2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgNikpO1xuICByZXR1cm4gbiA/IChkLkwgPSBNYXRoLmZsb29yKG5bMF0gLyAxMDAwKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUxpdGVyYWxQZXJjZW50KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IHBlcmNlbnRSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IGkgKyBuWzBdLmxlbmd0aCA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVVuaXhUaW1lc3RhbXAoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICByZXR1cm4gbiA/IChkLlEgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgcmV0dXJuIG4gPyAoZC5RID0gKCtuWzBdKSAqIDEwMDAsIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGF5T2ZNb250aChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXREYXRlKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRIb3VyMjQoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0SG91cnMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhvdXIxMihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRIb3VycygpICUgMTIgfHwgMTIsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXlPZlllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKDEgKyB0aW1lRGF5LmNvdW50KHRpbWVZZWFyKGQpLCBkKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pbGxpc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNaWxsaXNlY29uZHMoKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pY3Jvc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBmb3JtYXRNaWxsaXNlY29uZHMoZCwgcCkgKyBcIjAwMFwiO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNb250aE51bWJlcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNb250aCgpICsgMSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pbnV0ZXMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0TWludXRlcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0U2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRTZWNvbmRzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrZGF5TnVtYmVyTW9uZGF5KGQpIHtcbiAgdmFyIGRheSA9IGQuZ2V0RGF5KCk7XG4gIHJldHVybiBkYXkgPT09IDAgPyA3IDogZGF5O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrTnVtYmVyU3VuZGF5KGQsIHApIHtcbiAgcmV0dXJuIHBhZCh0aW1lU3VuZGF5LmNvdW50KHRpbWVZZWFyKGQpLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJJU08oZCwgcCkge1xuICB2YXIgZGF5ID0gZC5nZXREYXkoKTtcbiAgZCA9IChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdGltZVRodXJzZGF5KGQpIDogdGltZVRodXJzZGF5LmNlaWwoZCk7XG4gIHJldHVybiBwYWQodGltZVRodXJzZGF5LmNvdW50KHRpbWVZZWFyKGQpLCBkKSArICh0aW1lWWVhcihkKS5nZXREYXkoKSA9PT0gNCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrZGF5TnVtYmVyU3VuZGF5KGQpIHtcbiAgcmV0dXJuIGQuZ2V0RGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHRpbWVNb25kYXkuY291bnQodGltZVllYXIoZCksIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0WWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RnVsbFllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0Wm9uZShkKSB7XG4gIHZhciB6ID0gZC5nZXRUaW1lem9uZU9mZnNldCgpO1xuICByZXR1cm4gKHogPiAwID8gXCItXCIgOiAoeiAqPSAtMSwgXCIrXCIpKVxuICAgICAgKyBwYWQoeiAvIDYwIHwgMCwgXCIwXCIsIDIpXG4gICAgICArIHBhZCh6ICUgNjAsIFwiMFwiLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRGF5T2ZNb250aChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENEYXRlKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENIb3VyMjQoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDSG91cnMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0hvdXIxMihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENIb3VycygpICUgMTIgfHwgMTIsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENEYXlPZlllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKDEgKyB1dGNEYXkuY291bnQodXRjWWVhcihkKSwgZCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaWxsaXNlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaWNyb3NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gZm9ybWF0VVRDTWlsbGlzZWNvbmRzKGQsIHApICsgXCIwMDBcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTW9udGhOdW1iZXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTW9udGgoKSArIDEsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaW51dGVzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ01pbnV0ZXMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDU2Vjb25kcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheShkKSB7XG4gIHZhciBkb3cgPSBkLmdldFVUQ0RheSgpO1xuICByZXR1cm4gZG93ID09PSAwID8gNyA6IGRvdztcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlclN1bmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodXRjU3VuZGF5LmNvdW50KHV0Y1llYXIoZCksIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlcklTTyhkLCBwKSB7XG4gIHZhciBkYXkgPSBkLmdldFVUQ0RheSgpO1xuICBkID0gKGRheSA+PSA0IHx8IGRheSA9PT0gMCkgPyB1dGNUaHVyc2RheShkKSA6IHV0Y1RodXJzZGF5LmNlaWwoZCk7XG4gIHJldHVybiBwYWQodXRjVGh1cnNkYXkuY291bnQodXRjWWVhcihkKSwgZCkgKyAodXRjWWVhcihkKS5nZXRVVENEYXkoKSA9PT0gNCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyU3VuZGF5KGQpIHtcbiAgcmV0dXJuIGQuZ2V0VVRDRGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHV0Y01vbmRheS5jb3VudCh1dGNZZWFyKGQpLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1llYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMCwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0Z1bGxZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDAwMCwgcCwgNCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1pvbmUoKSB7XG4gIHJldHVybiBcIiswMDAwXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExpdGVyYWxQZXJjZW50KCkge1xuICByZXR1cm4gXCIlXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVuaXhUaW1lc3RhbXAoZCkge1xuICByZXR1cm4gK2Q7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzKGQpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoK2QgLyAxMDAwKTtcbn1cbiIsImltcG9ydCBmb3JtYXRMb2NhbGUgZnJvbSBcIi4vbG9jYWxlXCI7XG5cbnZhciBsb2NhbGU7XG5leHBvcnQgdmFyIHRpbWVGb3JtYXQ7XG5leHBvcnQgdmFyIHRpbWVQYXJzZTtcbmV4cG9ydCB2YXIgdXRjRm9ybWF0O1xuZXhwb3J0IHZhciB1dGNQYXJzZTtcblxuZGVmYXVsdExvY2FsZSh7XG4gIGRhdGVUaW1lOiBcIiV4LCAlWFwiLFxuICBkYXRlOiBcIiUtbS8lLWQvJVlcIixcbiAgdGltZTogXCIlLUk6JU06JVMgJXBcIixcbiAgcGVyaW9kczogW1wiQU1cIiwgXCJQTVwiXSxcbiAgZGF5czogW1wiU3VuZGF5XCIsIFwiTW9uZGF5XCIsIFwiVHVlc2RheVwiLCBcIldlZG5lc2RheVwiLCBcIlRodXJzZGF5XCIsIFwiRnJpZGF5XCIsIFwiU2F0dXJkYXlcIl0sXG4gIHNob3J0RGF5czogW1wiU3VuXCIsIFwiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCJdLFxuICBtb250aHM6IFtcIkphbnVhcnlcIiwgXCJGZWJydWFyeVwiLCBcIk1hcmNoXCIsIFwiQXByaWxcIiwgXCJNYXlcIiwgXCJKdW5lXCIsIFwiSnVseVwiLCBcIkF1Z3VzdFwiLCBcIlNlcHRlbWJlclwiLCBcIk9jdG9iZXJcIiwgXCJOb3ZlbWJlclwiLCBcIkRlY2VtYmVyXCJdLFxuICBzaG9ydE1vbnRoczogW1wiSmFuXCIsIFwiRmViXCIsIFwiTWFyXCIsIFwiQXByXCIsIFwiTWF5XCIsIFwiSnVuXCIsIFwiSnVsXCIsIFwiQXVnXCIsIFwiU2VwXCIsIFwiT2N0XCIsIFwiTm92XCIsIFwiRGVjXCJdXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVmYXVsdExvY2FsZShkZWZpbml0aW9uKSB7XG4gIGxvY2FsZSA9IGZvcm1hdExvY2FsZShkZWZpbml0aW9uKTtcbiAgdGltZUZvcm1hdCA9IGxvY2FsZS5mb3JtYXQ7XG4gIHRpbWVQYXJzZSA9IGxvY2FsZS5wYXJzZTtcbiAgdXRjRm9ybWF0ID0gbG9jYWxlLnV0Y0Zvcm1hdDtcbiAgdXRjUGFyc2UgPSBsb2NhbGUudXRjUGFyc2U7XG4gIHJldHVybiBsb2NhbGU7XG59XG4iLCJpbXBvcnQge3V0Y0Zvcm1hdH0gZnJvbSBcIi4vZGVmYXVsdExvY2FsZVwiO1xuXG5leHBvcnQgdmFyIGlzb1NwZWNpZmllciA9IFwiJVktJW0tJWRUJUg6JU06JVMuJUxaXCI7XG5cbmZ1bmN0aW9uIGZvcm1hdElzb05hdGl2ZShkYXRlKSB7XG4gIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKCk7XG59XG5cbnZhciBmb3JtYXRJc28gPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZ1xuICAgID8gZm9ybWF0SXNvTmF0aXZlXG4gICAgOiB1dGNGb3JtYXQoaXNvU3BlY2lmaWVyKTtcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0SXNvO1xuIiwiaW1wb3J0IHtpc29TcGVjaWZpZXJ9IGZyb20gXCIuL2lzb0Zvcm1hdFwiO1xuaW1wb3J0IHt1dGNQYXJzZX0gZnJvbSBcIi4vZGVmYXVsdExvY2FsZVwiO1xuXG5mdW5jdGlvbiBwYXJzZUlzb05hdGl2ZShzdHJpbmcpIHtcbiAgdmFyIGRhdGUgPSBuZXcgRGF0ZShzdHJpbmcpO1xuICByZXR1cm4gaXNOYU4oZGF0ZSkgPyBudWxsIDogZGF0ZTtcbn1cblxudmFyIHBhcnNlSXNvID0gK25ldyBEYXRlKFwiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaXCIpXG4gICAgPyBwYXJzZUlzb05hdGl2ZVxuICAgIDogdXRjUGFyc2UoaXNvU3BlY2lmaWVyKTtcblxuZXhwb3J0IGRlZmF1bHQgcGFyc2VJc287XG4iLCJ2YXIgbm9vcCA9IHt2YWx1ZTogZnVuY3Rpb24oKSB7fX07XG5cbmZ1bmN0aW9uIGRpc3BhdGNoKCkge1xuICBmb3IgKHZhciBpID0gMCwgbiA9IGFyZ3VtZW50cy5sZW5ndGgsIF8gPSB7fSwgdDsgaSA8IG47ICsraSkge1xuICAgIGlmICghKHQgPSBhcmd1bWVudHNbaV0gKyBcIlwiKSB8fCAodCBpbiBfKSkgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCB0eXBlOiBcIiArIHQpO1xuICAgIF9bdF0gPSBbXTtcbiAgfVxuICByZXR1cm4gbmV3IERpc3BhdGNoKF8pO1xufVxuXG5mdW5jdGlvbiBEaXNwYXRjaChfKSB7XG4gIHRoaXMuXyA9IF87XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lcywgdHlwZXMpIHtcbiAgcmV0dXJuIHR5cGVuYW1lcy50cmltKCkuc3BsaXQoL158XFxzKy8pLm1hcChmdW5jdGlvbih0KSB7XG4gICAgdmFyIG5hbWUgPSBcIlwiLCBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSBuYW1lID0gdC5zbGljZShpICsgMSksIHQgPSB0LnNsaWNlKDAsIGkpO1xuICAgIGlmICh0ICYmICF0eXBlcy5oYXNPd25Qcm9wZXJ0eSh0KSkgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIiArIHQpO1xuICAgIHJldHVybiB7dHlwZTogdCwgbmFtZTogbmFtZX07XG4gIH0pO1xufVxuXG5EaXNwYXRjaC5wcm90b3R5cGUgPSBkaXNwYXRjaC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBEaXNwYXRjaCxcbiAgb246IGZ1bmN0aW9uKHR5cGVuYW1lLCBjYWxsYmFjaykge1xuICAgIHZhciBfID0gdGhpcy5fLFxuICAgICAgICBUID0gcGFyc2VUeXBlbmFtZXModHlwZW5hbWUgKyBcIlwiLCBfKSxcbiAgICAgICAgdCxcbiAgICAgICAgaSA9IC0xLFxuICAgICAgICBuID0gVC5sZW5ndGg7XG5cbiAgICAvLyBJZiBubyBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCByZXR1cm4gdGhlIGNhbGxiYWNrIG9mIHRoZSBnaXZlbiB0eXBlIGFuZCBuYW1lLlxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICgodCA9ICh0eXBlbmFtZSA9IFRbaV0pLnR5cGUpICYmICh0ID0gZ2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUpKSkgcmV0dXJuIHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgYSB0eXBlIHdhcyBzcGVjaWZpZWQsIHNldCB0aGUgY2FsbGJhY2sgZm9yIHRoZSBnaXZlbiB0eXBlIGFuZCBuYW1lLlxuICAgIC8vIE90aGVyd2lzZSwgaWYgYSBudWxsIGNhbGxiYWNrIHdhcyBzcGVjaWZpZWQsIHJlbW92ZSBjYWxsYmFja3Mgb2YgdGhlIGdpdmVuIG5hbWUuXG4gICAgaWYgKGNhbGxiYWNrICE9IG51bGwgJiYgdHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgY2FsbGJhY2s6IFwiICsgY2FsbGJhY2spO1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAodCA9ICh0eXBlbmFtZSA9IFRbaV0pLnR5cGUpIF9bdF0gPSBzZXQoX1t0XSwgdHlwZW5hbWUubmFtZSwgY2FsbGJhY2spO1xuICAgICAgZWxzZSBpZiAoY2FsbGJhY2sgPT0gbnVsbCkgZm9yICh0IGluIF8pIF9bdF0gPSBzZXQoX1t0XSwgdHlwZW5hbWUubmFtZSwgbnVsbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGNvcHk6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBjb3B5ID0ge30sIF8gPSB0aGlzLl87XG4gICAgZm9yICh2YXIgdCBpbiBfKSBjb3B5W3RdID0gX1t0XS5zbGljZSgpO1xuICAgIHJldHVybiBuZXcgRGlzcGF0Y2goY29weSk7XG4gIH0sXG4gIGNhbGw6IGZ1bmN0aW9uKHR5cGUsIHRoYXQpIHtcbiAgICBpZiAoKG4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMikgPiAwKSBmb3IgKHZhciBhcmdzID0gbmV3IEFycmF5KG4pLCBpID0gMCwgbiwgdDsgaSA8IG47ICsraSkgYXJnc1tpXSA9IGFyZ3VtZW50c1tpICsgMl07XG4gICAgaWYgKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodHlwZSkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0eXBlKTtcbiAgICBmb3IgKHQgPSB0aGlzLl9bdHlwZV0sIGkgPSAwLCBuID0gdC5sZW5ndGg7IGkgPCBuOyArK2kpIHRbaV0udmFsdWUuYXBwbHkodGhhdCwgYXJncyk7XG4gIH0sXG4gIGFwcGx5OiBmdW5jdGlvbih0eXBlLCB0aGF0LCBhcmdzKSB7XG4gICAgaWYgKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodHlwZSkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0eXBlKTtcbiAgICBmb3IgKHZhciB0ID0gdGhpcy5fW3R5cGVdLCBpID0gMCwgbiA9IHQubGVuZ3RoOyBpIDwgbjsgKytpKSB0W2ldLnZhbHVlLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBnZXQodHlwZSwgbmFtZSkge1xuICBmb3IgKHZhciBpID0gMCwgbiA9IHR5cGUubGVuZ3RoLCBjOyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKChjID0gdHlwZVtpXSkubmFtZSA9PT0gbmFtZSkge1xuICAgICAgcmV0dXJuIGMudmFsdWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNldCh0eXBlLCBuYW1lLCBjYWxsYmFjaykge1xuICBmb3IgKHZhciBpID0gMCwgbiA9IHR5cGUubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKHR5cGVbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgdHlwZVtpXSA9IG5vb3AsIHR5cGUgPSB0eXBlLnNsaWNlKDAsIGkpLmNvbmNhdCh0eXBlLnNsaWNlKGkgKyAxKSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGNhbGxiYWNrICE9IG51bGwpIHR5cGUucHVzaCh7bmFtZTogbmFtZSwgdmFsdWU6IGNhbGxiYWNrfSk7XG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBkaXNwYXRjaDtcbiIsInZhciBmcmFtZSA9IDAsIC8vIGlzIGFuIGFuaW1hdGlvbiBmcmFtZSBwZW5kaW5nP1xuICAgIHRpbWVvdXQgPSAwLCAvLyBpcyBhIHRpbWVvdXQgcGVuZGluZz9cbiAgICBpbnRlcnZhbCA9IDAsIC8vIGFyZSBhbnkgdGltZXJzIGFjdGl2ZT9cbiAgICBwb2tlRGVsYXkgPSAxMDAwLCAvLyBob3cgZnJlcXVlbnRseSB3ZSBjaGVjayBmb3IgY2xvY2sgc2tld1xuICAgIHRhc2tIZWFkLFxuICAgIHRhc2tUYWlsLFxuICAgIGNsb2NrTGFzdCA9IDAsXG4gICAgY2xvY2tOb3cgPSAwLFxuICAgIGNsb2NrU2tldyA9IDAsXG4gICAgY2xvY2sgPSB0eXBlb2YgcGVyZm9ybWFuY2UgPT09IFwib2JqZWN0XCIgJiYgcGVyZm9ybWFuY2Uubm93ID8gcGVyZm9ybWFuY2UgOiBEYXRlLFxuICAgIHNldEZyYW1lID0gdHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiAmJiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdykgOiBmdW5jdGlvbihmKSB7IHNldFRpbWVvdXQoZiwgMTcpOyB9O1xuXG5leHBvcnQgZnVuY3Rpb24gbm93KCkge1xuICByZXR1cm4gY2xvY2tOb3cgfHwgKHNldEZyYW1lKGNsZWFyTm93KSwgY2xvY2tOb3cgPSBjbG9jay5ub3coKSArIGNsb2NrU2tldyk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyTm93KCkge1xuICBjbG9ja05vdyA9IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUaW1lcigpIHtcbiAgdGhpcy5fY2FsbCA9XG4gIHRoaXMuX3RpbWUgPVxuICB0aGlzLl9uZXh0ID0gbnVsbDtcbn1cblxuVGltZXIucHJvdG90eXBlID0gdGltZXIucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogVGltZXIsXG4gIHJlc3RhcnQ6IGZ1bmN0aW9uKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuICAgIHRpbWUgPSAodGltZSA9PSBudWxsID8gbm93KCkgOiArdGltZSkgKyAoZGVsYXkgPT0gbnVsbCA/IDAgOiArZGVsYXkpO1xuICAgIGlmICghdGhpcy5fbmV4dCAmJiB0YXNrVGFpbCAhPT0gdGhpcykge1xuICAgICAgaWYgKHRhc2tUYWlsKSB0YXNrVGFpbC5fbmV4dCA9IHRoaXM7XG4gICAgICBlbHNlIHRhc2tIZWFkID0gdGhpcztcbiAgICAgIHRhc2tUYWlsID0gdGhpcztcbiAgICB9XG4gICAgdGhpcy5fY2FsbCA9IGNhbGxiYWNrO1xuICAgIHRoaXMuX3RpbWUgPSB0aW1lO1xuICAgIHNsZWVwKCk7XG4gIH0sXG4gIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9jYWxsKSB7XG4gICAgICB0aGlzLl9jYWxsID0gbnVsbDtcbiAgICAgIHRoaXMuX3RpbWUgPSBJbmZpbml0eTtcbiAgICAgIHNsZWVwKCk7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdGltZXIoY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gIHZhciB0ID0gbmV3IFRpbWVyO1xuICB0LnJlc3RhcnQoY2FsbGJhY2ssIGRlbGF5LCB0aW1lKTtcbiAgcmV0dXJuIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lckZsdXNoKCkge1xuICBub3coKTsgLy8gR2V0IHRoZSBjdXJyZW50IHRpbWUsIGlmIG5vdCBhbHJlYWR5IHNldC5cbiAgKytmcmFtZTsgLy8gUHJldGVuZCB3ZeKAmXZlIHNldCBhbiBhbGFybSwgaWYgd2UgaGF2ZW7igJl0IGFscmVhZHkuXG4gIHZhciB0ID0gdGFza0hlYWQsIGU7XG4gIHdoaWxlICh0KSB7XG4gICAgaWYgKChlID0gY2xvY2tOb3cgLSB0Ll90aW1lKSA+PSAwKSB0Ll9jYWxsLmNhbGwobnVsbCwgZSk7XG4gICAgdCA9IHQuX25leHQ7XG4gIH1cbiAgLS1mcmFtZTtcbn1cblxuZnVuY3Rpb24gd2FrZSgpIHtcbiAgY2xvY2tOb3cgPSAoY2xvY2tMYXN0ID0gY2xvY2subm93KCkpICsgY2xvY2tTa2V3O1xuICBmcmFtZSA9IHRpbWVvdXQgPSAwO1xuICB0cnkge1xuICAgIHRpbWVyRmx1c2goKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBmcmFtZSA9IDA7XG4gICAgbmFwKCk7XG4gICAgY2xvY2tOb3cgPSAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBva2UoKSB7XG4gIHZhciBub3cgPSBjbG9jay5ub3coKSwgZGVsYXkgPSBub3cgLSBjbG9ja0xhc3Q7XG4gIGlmIChkZWxheSA+IHBva2VEZWxheSkgY2xvY2tTa2V3IC09IGRlbGF5LCBjbG9ja0xhc3QgPSBub3c7XG59XG5cbmZ1bmN0aW9uIG5hcCgpIHtcbiAgdmFyIHQwLCB0MSA9IHRhc2tIZWFkLCB0MiwgdGltZSA9IEluZmluaXR5O1xuICB3aGlsZSAodDEpIHtcbiAgICBpZiAodDEuX2NhbGwpIHtcbiAgICAgIGlmICh0aW1lID4gdDEuX3RpbWUpIHRpbWUgPSB0MS5fdGltZTtcbiAgICAgIHQwID0gdDEsIHQxID0gdDEuX25leHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHQyID0gdDEuX25leHQsIHQxLl9uZXh0ID0gbnVsbDtcbiAgICAgIHQxID0gdDAgPyB0MC5fbmV4dCA9IHQyIDogdGFza0hlYWQgPSB0MjtcbiAgICB9XG4gIH1cbiAgdGFza1RhaWwgPSB0MDtcbiAgc2xlZXAodGltZSk7XG59XG5cbmZ1bmN0aW9uIHNsZWVwKHRpbWUpIHtcbiAgaWYgKGZyYW1lKSByZXR1cm47IC8vIFNvb25lc3QgYWxhcm0gYWxyZWFkeSBzZXQsIG9yIHdpbGwgYmUuXG4gIGlmICh0aW1lb3V0KSB0aW1lb3V0ID0gY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICB2YXIgZGVsYXkgPSB0aW1lIC0gY2xvY2tOb3c7IC8vIFN0cmljdGx5IGxlc3MgdGhhbiBpZiB3ZSByZWNvbXB1dGVkIGNsb2NrTm93LlxuICBpZiAoZGVsYXkgPiAyNCkge1xuICAgIGlmICh0aW1lIDwgSW5maW5pdHkpIHRpbWVvdXQgPSBzZXRUaW1lb3V0KHdha2UsIHRpbWUgLSBjbG9jay5ub3coKSAtIGNsb2NrU2tldyk7XG4gICAgaWYgKGludGVydmFsKSBpbnRlcnZhbCA9IGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICB9IGVsc2Uge1xuICAgIGlmICghaW50ZXJ2YWwpIGNsb2NrTGFzdCA9IGNsb2NrLm5vdygpLCBpbnRlcnZhbCA9IHNldEludGVydmFsKHBva2UsIHBva2VEZWxheSk7XG4gICAgZnJhbWUgPSAxLCBzZXRGcmFtZSh3YWtlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtUaW1lcn0gZnJvbSBcIi4vdGltZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gIHZhciB0ID0gbmV3IFRpbWVyO1xuICBkZWxheSA9IGRlbGF5ID09IG51bGwgPyAwIDogK2RlbGF5O1xuICB0LnJlc3RhcnQoZnVuY3Rpb24oZWxhcHNlZCkge1xuICAgIHQuc3RvcCgpO1xuICAgIGNhbGxiYWNrKGVsYXBzZWQgKyBkZWxheSk7XG4gIH0sIGRlbGF5LCB0aW1lKTtcbiAgcmV0dXJuIHQ7XG59XG4iLCJpbXBvcnQge2Rpc3BhdGNofSBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7dGltZXIsIHRpbWVvdXR9IGZyb20gXCJkMy10aW1lclwiO1xuXG52YXIgZW1wdHlPbiA9IGRpc3BhdGNoKFwic3RhcnRcIiwgXCJlbmRcIiwgXCJpbnRlcnJ1cHRcIik7XG52YXIgZW1wdHlUd2VlbiA9IFtdO1xuXG5leHBvcnQgdmFyIENSRUFURUQgPSAwO1xuZXhwb3J0IHZhciBTQ0hFRFVMRUQgPSAxO1xuZXhwb3J0IHZhciBTVEFSVElORyA9IDI7XG5leHBvcnQgdmFyIFNUQVJURUQgPSAzO1xuZXhwb3J0IHZhciBSVU5OSU5HID0gNDtcbmV4cG9ydCB2YXIgRU5ESU5HID0gNTtcbmV4cG9ydCB2YXIgRU5ERUQgPSA2O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlLCBuYW1lLCBpZCwgaW5kZXgsIGdyb3VwLCB0aW1pbmcpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uO1xuICBpZiAoIXNjaGVkdWxlcykgbm9kZS5fX3RyYW5zaXRpb24gPSB7fTtcbiAgZWxzZSBpZiAoaWQgaW4gc2NoZWR1bGVzKSByZXR1cm47XG4gIGNyZWF0ZShub2RlLCBpZCwge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgaW5kZXg6IGluZGV4LCAvLyBGb3IgY29udGV4dCBkdXJpbmcgY2FsbGJhY2suXG4gICAgZ3JvdXA6IGdyb3VwLCAvLyBGb3IgY29udGV4dCBkdXJpbmcgY2FsbGJhY2suXG4gICAgb246IGVtcHR5T24sXG4gICAgdHdlZW46IGVtcHR5VHdlZW4sXG4gICAgdGltZTogdGltaW5nLnRpbWUsXG4gICAgZGVsYXk6IHRpbWluZy5kZWxheSxcbiAgICBkdXJhdGlvbjogdGltaW5nLmR1cmF0aW9uLFxuICAgIGVhc2U6IHRpbWluZy5lYXNlLFxuICAgIHRpbWVyOiBudWxsLFxuICAgIHN0YXRlOiBDUkVBVEVEXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBnZXQobm9kZSwgaWQpO1xuICBpZiAoc2NoZWR1bGUuc3RhdGUgPiBDUkVBVEVEKSB0aHJvdyBuZXcgRXJyb3IoXCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWRcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBnZXQobm9kZSwgaWQpO1xuICBpZiAoc2NoZWR1bGUuc3RhdGUgPiBTVEFSVElORykgdGhyb3cgbmV3IEVycm9yKFwidG9vIGxhdGU7IGFscmVhZHkgc3RhcnRlZFwiKTtcbiAgcmV0dXJuIHNjaGVkdWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IG5vZGUuX190cmFuc2l0aW9uO1xuICBpZiAoIXNjaGVkdWxlIHx8ICEoc2NoZWR1bGUgPSBzY2hlZHVsZVtpZF0pKSB0aHJvdyBuZXcgRXJyb3IoXCJ0cmFuc2l0aW9uIG5vdCBmb3VuZFwiKTtcbiAgcmV0dXJuIHNjaGVkdWxlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGUobm9kZSwgaWQsIHNlbGYpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uLFxuICAgICAgdHdlZW47XG5cbiAgLy8gSW5pdGlhbGl6ZSB0aGUgc2VsZiB0aW1lciB3aGVuIHRoZSB0cmFuc2l0aW9uIGlzIGNyZWF0ZWQuXG4gIC8vIE5vdGUgdGhlIGFjdHVhbCBkZWxheSBpcyBub3Qga25vd24gdW50aWwgdGhlIGZpcnN0IGNhbGxiYWNrIVxuICBzY2hlZHVsZXNbaWRdID0gc2VsZjtcbiAgc2VsZi50aW1lciA9IHRpbWVyKHNjaGVkdWxlLCAwLCBzZWxmLnRpbWUpO1xuXG4gIGZ1bmN0aW9uIHNjaGVkdWxlKGVsYXBzZWQpIHtcbiAgICBzZWxmLnN0YXRlID0gU0NIRURVTEVEO1xuICAgIHNlbGYudGltZXIucmVzdGFydChzdGFydCwgc2VsZi5kZWxheSwgc2VsZi50aW1lKTtcblxuICAgIC8vIElmIHRoZSBlbGFwc2VkIGRlbGF5IGlzIGxlc3MgdGhhbiBvdXIgZmlyc3Qgc2xlZXAsIHN0YXJ0IGltbWVkaWF0ZWx5LlxuICAgIGlmIChzZWxmLmRlbGF5IDw9IGVsYXBzZWQpIHN0YXJ0KGVsYXBzZWQgLSBzZWxmLmRlbGF5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXJ0KGVsYXBzZWQpIHtcbiAgICB2YXIgaSwgaiwgbiwgbztcblxuICAgIC8vIElmIHRoZSBzdGF0ZSBpcyBub3QgU0NIRURVTEVELCB0aGVuIHdlIHByZXZpb3VzbHkgZXJyb3JlZCBvbiBzdGFydC5cbiAgICBpZiAoc2VsZi5zdGF0ZSAhPT0gU0NIRURVTEVEKSByZXR1cm4gc3RvcCgpO1xuXG4gICAgZm9yIChpIGluIHNjaGVkdWxlcykge1xuICAgICAgbyA9IHNjaGVkdWxlc1tpXTtcbiAgICAgIGlmIChvLm5hbWUgIT09IHNlbGYubmFtZSkgY29udGludWU7XG5cbiAgICAgIC8vIFdoaWxlIHRoaXMgZWxlbWVudCBhbHJlYWR5IGhhcyBhIHN0YXJ0aW5nIHRyYW5zaXRpb24gZHVyaW5nIHRoaXMgZnJhbWUsXG4gICAgICAvLyBkZWZlciBzdGFydGluZyBhbiBpbnRlcnJ1cHRpbmcgdHJhbnNpdGlvbiB1bnRpbCB0aGF0IHRyYW5zaXRpb24gaGFzIGFcbiAgICAgIC8vIGNoYW5jZSB0byB0aWNrIChhbmQgcG9zc2libHkgZW5kKTsgc2VlIGQzL2QzLXRyYW5zaXRpb24jNTQhXG4gICAgICBpZiAoby5zdGF0ZSA9PT0gU1RBUlRFRCkgcmV0dXJuIHRpbWVvdXQoc3RhcnQpO1xuXG4gICAgICAvLyBJbnRlcnJ1cHQgdGhlIGFjdGl2ZSB0cmFuc2l0aW9uLCBpZiBhbnkuXG4gICAgICAvLyBEaXNwYXRjaCB0aGUgaW50ZXJydXB0IGV2ZW50LlxuICAgICAgaWYgKG8uc3RhdGUgPT09IFJVTk5JTkcpIHtcbiAgICAgICAgby5zdGF0ZSA9IEVOREVEO1xuICAgICAgICBvLnRpbWVyLnN0b3AoKTtcbiAgICAgICAgby5vbi5jYWxsKFwiaW50ZXJydXB0XCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIG8uaW5kZXgsIG8uZ3JvdXApO1xuICAgICAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICAgICAgfVxuXG4gICAgICAvLyBDYW5jZWwgYW55IHByZS1lbXB0ZWQgdHJhbnNpdGlvbnMuIE5vIGludGVycnVwdCBldmVudCBpcyBkaXNwYXRjaGVkXG4gICAgICAvLyBiZWNhdXNlIHRoZSBjYW5jZWxsZWQgdHJhbnNpdGlvbnMgbmV2ZXIgc3RhcnRlZC4gTm90ZSB0aGF0IHRoaXMgYWxzb1xuICAgICAgLy8gcmVtb3ZlcyB0aGlzIHRyYW5zaXRpb24gZnJvbSB0aGUgcGVuZGluZyBsaXN0IVxuICAgICAgZWxzZSBpZiAoK2kgPCBpZCkge1xuICAgICAgICBvLnN0YXRlID0gRU5ERUQ7XG4gICAgICAgIG8udGltZXIuc3RvcCgpO1xuICAgICAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERlZmVyIHRoZSBmaXJzdCB0aWNrIHRvIGVuZCBvZiB0aGUgY3VycmVudCBmcmFtZTsgc2VlIGQzL2QzIzE1NzYuXG4gICAgLy8gTm90ZSB0aGUgdHJhbnNpdGlvbiBtYXkgYmUgY2FuY2VsZWQgYWZ0ZXIgc3RhcnQgYW5kIGJlZm9yZSB0aGUgZmlyc3QgdGljayFcbiAgICAvLyBOb3RlIHRoaXMgbXVzdCBiZSBzY2hlZHVsZWQgYmVmb3JlIHRoZSBzdGFydCBldmVudDsgc2VlIGQzL2QzLXRyYW5zaXRpb24jMTYhXG4gICAgLy8gQXNzdW1pbmcgdGhpcyBpcyBzdWNjZXNzZnVsLCBzdWJzZXF1ZW50IGNhbGxiYWNrcyBnbyBzdHJhaWdodCB0byB0aWNrLlxuICAgIHRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoc2VsZi5zdGF0ZSA9PT0gU1RBUlRFRCkge1xuICAgICAgICBzZWxmLnN0YXRlID0gUlVOTklORztcbiAgICAgICAgc2VsZi50aW1lci5yZXN0YXJ0KHRpY2ssIHNlbGYuZGVsYXksIHNlbGYudGltZSk7XG4gICAgICAgIHRpY2soZWxhcHNlZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBEaXNwYXRjaCB0aGUgc3RhcnQgZXZlbnQuXG4gICAgLy8gTm90ZSB0aGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgdGhlIHR3ZWVuIGFyZSBpbml0aWFsaXplZC5cbiAgICBzZWxmLnN0YXRlID0gU1RBUlRJTkc7XG4gICAgc2VsZi5vbi5jYWxsKFwic3RhcnRcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2VsZi5pbmRleCwgc2VsZi5ncm91cCk7XG4gICAgaWYgKHNlbGYuc3RhdGUgIT09IFNUQVJUSU5HKSByZXR1cm47IC8vIGludGVycnVwdGVkXG4gICAgc2VsZi5zdGF0ZSA9IFNUQVJURUQ7XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSB0d2VlbiwgZGVsZXRpbmcgbnVsbCB0d2Vlbi5cbiAgICB0d2VlbiA9IG5ldyBBcnJheShuID0gc2VsZi50d2Vlbi5sZW5ndGgpO1xuICAgIGZvciAoaSA9IDAsIGogPSAtMTsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG8gPSBzZWxmLnR3ZWVuW2ldLnZhbHVlLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgc2VsZi5pbmRleCwgc2VsZi5ncm91cCkpIHtcbiAgICAgICAgdHdlZW5bKytqXSA9IG87XG4gICAgICB9XG4gICAgfVxuICAgIHR3ZWVuLmxlbmd0aCA9IGogKyAxO1xuICB9XG5cbiAgZnVuY3Rpb24gdGljayhlbGFwc2VkKSB7XG4gICAgdmFyIHQgPSBlbGFwc2VkIDwgc2VsZi5kdXJhdGlvbiA/IHNlbGYuZWFzZS5jYWxsKG51bGwsIGVsYXBzZWQgLyBzZWxmLmR1cmF0aW9uKSA6IChzZWxmLnRpbWVyLnJlc3RhcnQoc3RvcCksIHNlbGYuc3RhdGUgPSBFTkRJTkcsIDEpLFxuICAgICAgICBpID0gLTEsXG4gICAgICAgIG4gPSB0d2Vlbi5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgdHdlZW5baV0uY2FsbChudWxsLCB0KTtcbiAgICB9XG5cbiAgICAvLyBEaXNwYXRjaCB0aGUgZW5kIGV2ZW50LlxuICAgIGlmIChzZWxmLnN0YXRlID09PSBFTkRJTkcpIHtcbiAgICAgIHNlbGYub24uY2FsbChcImVuZFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBzZWxmLmluZGV4LCBzZWxmLmdyb3VwKTtcbiAgICAgIHN0b3AoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdG9wKCkge1xuICAgIHNlbGYuc3RhdGUgPSBFTkRFRDtcbiAgICBzZWxmLnRpbWVyLnN0b3AoKTtcbiAgICBkZWxldGUgc2NoZWR1bGVzW2lkXTtcbiAgICBmb3IgKHZhciBpIGluIHNjaGVkdWxlcykgcmV0dXJuOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgZGVsZXRlIG5vZGUuX190cmFuc2l0aW9uO1xuICB9XG59XG4iLCJpbXBvcnQge1NUQVJUSU5HLCBFTkRJTkcsIEVOREVEfSBmcm9tIFwiLi90cmFuc2l0aW9uL3NjaGVkdWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uLFxuICAgICAgc2NoZWR1bGUsXG4gICAgICBhY3RpdmUsXG4gICAgICBlbXB0eSA9IHRydWUsXG4gICAgICBpO1xuXG4gIGlmICghc2NoZWR1bGVzKSByZXR1cm47XG5cbiAgbmFtZSA9IG5hbWUgPT0gbnVsbCA/IG51bGwgOiBuYW1lICsgXCJcIjtcblxuICBmb3IgKGkgaW4gc2NoZWR1bGVzKSB7XG4gICAgaWYgKChzY2hlZHVsZSA9IHNjaGVkdWxlc1tpXSkubmFtZSAhPT0gbmFtZSkgeyBlbXB0eSA9IGZhbHNlOyBjb250aW51ZTsgfVxuICAgIGFjdGl2ZSA9IHNjaGVkdWxlLnN0YXRlID4gU1RBUlRJTkcgJiYgc2NoZWR1bGUuc3RhdGUgPCBFTkRJTkc7XG4gICAgc2NoZWR1bGUuc3RhdGUgPSBFTkRFRDtcbiAgICBzY2hlZHVsZS50aW1lci5zdG9wKCk7XG4gICAgaWYgKGFjdGl2ZSkgc2NoZWR1bGUub24uY2FsbChcImludGVycnVwdFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBzY2hlZHVsZS5pbmRleCwgc2NoZWR1bGUuZ3JvdXApO1xuICAgIGRlbGV0ZSBzY2hlZHVsZXNbaV07XG4gIH1cblxuICBpZiAoZW1wdHkpIGRlbGV0ZSBub2RlLl9fdHJhbnNpdGlvbjtcbn1cbiIsImltcG9ydCB7Z2V0LCBzZXR9IGZyb20gXCIuL3NjaGVkdWxlXCI7XG5cbmZ1bmN0aW9uIHR3ZWVuUmVtb3ZlKGlkLCBuYW1lKSB7XG4gIHZhciB0d2VlbjAsIHR3ZWVuMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgIHR3ZWVuID0gc2NoZWR1bGUudHdlZW47XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIHR3ZWVuIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIHR3ZWVuIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmICh0d2VlbiAhPT0gdHdlZW4wKSB7XG4gICAgICB0d2VlbjEgPSB0d2VlbjAgPSB0d2VlbjtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdHdlZW4xLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAodHdlZW4xW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICB0d2VlbjEgPSB0d2VlbjEuc2xpY2UoKTtcbiAgICAgICAgICB0d2VlbjEuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2NoZWR1bGUudHdlZW4gPSB0d2VlbjE7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHR3ZWVuRnVuY3Rpb24oaWQsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0d2VlbjAsIHR3ZWVuMTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICB0d2VlbiA9IHNjaGVkdWxlLnR3ZWVuO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCB0d2VlbiB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCB0d2VlbiBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAodHdlZW4gIT09IHR3ZWVuMCkge1xuICAgICAgdHdlZW4xID0gKHR3ZWVuMCA9IHR3ZWVuKS5zbGljZSgpO1xuICAgICAgZm9yICh2YXIgdCA9IHtuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWV9LCBpID0gMCwgbiA9IHR3ZWVuMS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKHR3ZWVuMVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgdHdlZW4xW2ldID0gdDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGkgPT09IG4pIHR3ZWVuMS5wdXNoKHQpO1xuICAgIH1cblxuICAgIHNjaGVkdWxlLnR3ZWVuID0gdHdlZW4xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICBuYW1lICs9IFwiXCI7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIHR3ZWVuID0gZ2V0KHRoaXMubm9kZSgpLCBpZCkudHdlZW47XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0d2Vlbi5sZW5ndGgsIHQ7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgodCA9IHR3ZWVuW2ldKS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgIHJldHVybiB0LnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHZhbHVlID09IG51bGwgPyB0d2VlblJlbW92ZSA6IHR3ZWVuRnVuY3Rpb24pKGlkLCBuYW1lLCB2YWx1ZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHdlZW5WYWx1ZSh0cmFuc2l0aW9uLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgaWQgPSB0cmFuc2l0aW9uLl9pZDtcblxuICB0cmFuc2l0aW9uLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKTtcbiAgICAoc2NoZWR1bGUudmFsdWUgfHwgKHNjaGVkdWxlLnZhbHVlID0ge30pKVtuYW1lXSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIGdldChub2RlLCBpZCkudmFsdWVbbmFtZV07XG4gIH07XG59XG4iLCJpbXBvcnQge2NvbG9yfSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVOdW1iZXIsIGludGVycG9sYXRlUmdiLCBpbnRlcnBvbGF0ZVN0cmluZ30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGM7XG4gIHJldHVybiAodHlwZW9mIGIgPT09IFwibnVtYmVyXCIgPyBpbnRlcnBvbGF0ZU51bWJlclxuICAgICAgOiBiIGluc3RhbmNlb2YgY29sb3IgPyBpbnRlcnBvbGF0ZVJnYlxuICAgICAgOiAoYyA9IGNvbG9yKGIpKSA/IChiID0gYywgaW50ZXJwb2xhdGVSZ2IpXG4gICAgICA6IGludGVycG9sYXRlU3RyaW5nKShhLCBiKTtcbn1cbiIsImZ1bmN0aW9uIHJlbW92ZUZ1bmN0aW9uKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICAgIGZvciAodmFyIGkgaW4gdGhpcy5fX3RyYW5zaXRpb24pIGlmICgraSAhPT0gaWQpIHJldHVybjtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQucmVtb3ZlQ2hpbGQodGhpcyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5vbihcImVuZC5yZW1vdmVcIiwgcmVtb3ZlRnVuY3Rpb24odGhpcy5faWQpKTtcbn1cbiIsImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbnZhciBTZWxlY3Rpb24gPSBzZWxlY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImltcG9ydCB7dHdlZW5WYWx1ZX0gZnJvbSBcIi4vdHdlZW5cIjtcblxuZnVuY3Rpb24gdGV4dENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRleHRGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlMSA9IHZhbHVlKHRoaXMpO1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTEgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTE7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLnR3ZWVuKFwidGV4dFwiLCB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyB0ZXh0RnVuY3Rpb24odHdlZW5WYWx1ZSh0aGlzLCBcInRleHRcIiwgdmFsdWUpKVxuICAgICAgOiB0ZXh0Q29uc3RhbnQodmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSArIFwiXCIpKTtcbn1cbiIsImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9hdHRyIGZyb20gXCIuL2F0dHJcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2F0dHJUd2VlbiBmcm9tIFwiLi9hdHRyVHdlZW5cIjtcbmltcG9ydCB0cmFuc2l0aW9uX2RlbGF5IGZyb20gXCIuL2RlbGF5XCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9kdXJhdGlvbiBmcm9tIFwiLi9kdXJhdGlvblwiO1xuaW1wb3J0IHRyYW5zaXRpb25fZWFzZSBmcm9tIFwiLi9lYXNlXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9maWx0ZXIgZnJvbSBcIi4vZmlsdGVyXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9tZXJnZSBmcm9tIFwiLi9tZXJnZVwiO1xuaW1wb3J0IHRyYW5zaXRpb25fb24gZnJvbSBcIi4vb25cIjtcbmltcG9ydCB0cmFuc2l0aW9uX3JlbW92ZSBmcm9tIFwiLi9yZW1vdmVcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3NlbGVjdCBmcm9tIFwiLi9zZWxlY3RcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3NlbGVjdEFsbCBmcm9tIFwiLi9zZWxlY3RBbGxcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3NlbGVjdGlvbiBmcm9tIFwiLi9zZWxlY3Rpb25cIjtcbmltcG9ydCB0cmFuc2l0aW9uX3N0eWxlIGZyb20gXCIuL3N0eWxlXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zdHlsZVR3ZWVuIGZyb20gXCIuL3N0eWxlVHdlZW5cIjtcbmltcG9ydCB0cmFuc2l0aW9uX3RleHQgZnJvbSBcIi4vdGV4dFwiO1xuaW1wb3J0IHRyYW5zaXRpb25fdHJhbnNpdGlvbiBmcm9tIFwiLi90cmFuc2l0aW9uXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90d2VlbiBmcm9tIFwiLi90d2VlblwiO1xuXG52YXIgaWQgPSAwO1xuXG5leHBvcnQgZnVuY3Rpb24gVHJhbnNpdGlvbihncm91cHMsIHBhcmVudHMsIG5hbWUsIGlkKSB7XG4gIHRoaXMuX2dyb3VwcyA9IGdyb3VwcztcbiAgdGhpcy5fcGFyZW50cyA9IHBhcmVudHM7XG4gIHRoaXMuX25hbWUgPSBuYW1lO1xuICB0aGlzLl9pZCA9IGlkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2l0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHNlbGVjdGlvbigpLnRyYW5zaXRpb24obmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXdJZCgpIHtcbiAgcmV0dXJuICsraWQ7XG59XG5cbnZhciBzZWxlY3Rpb25fcHJvdG90eXBlID0gc2VsZWN0aW9uLnByb3RvdHlwZTtcblxuVHJhbnNpdGlvbi5wcm90b3R5cGUgPSB0cmFuc2l0aW9uLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFRyYW5zaXRpb24sXG4gIHNlbGVjdDogdHJhbnNpdGlvbl9zZWxlY3QsXG4gIHNlbGVjdEFsbDogdHJhbnNpdGlvbl9zZWxlY3RBbGwsXG4gIGZpbHRlcjogdHJhbnNpdGlvbl9maWx0ZXIsXG4gIG1lcmdlOiB0cmFuc2l0aW9uX21lcmdlLFxuICBzZWxlY3Rpb246IHRyYW5zaXRpb25fc2VsZWN0aW9uLFxuICB0cmFuc2l0aW9uOiB0cmFuc2l0aW9uX3RyYW5zaXRpb24sXG4gIGNhbGw6IHNlbGVjdGlvbl9wcm90b3R5cGUuY2FsbCxcbiAgbm9kZXM6IHNlbGVjdGlvbl9wcm90b3R5cGUubm9kZXMsXG4gIG5vZGU6IHNlbGVjdGlvbl9wcm90b3R5cGUubm9kZSxcbiAgc2l6ZTogc2VsZWN0aW9uX3Byb3RvdHlwZS5zaXplLFxuICBlbXB0eTogc2VsZWN0aW9uX3Byb3RvdHlwZS5lbXB0eSxcbiAgZWFjaDogc2VsZWN0aW9uX3Byb3RvdHlwZS5lYWNoLFxuICBvbjogdHJhbnNpdGlvbl9vbixcbiAgYXR0cjogdHJhbnNpdGlvbl9hdHRyLFxuICBhdHRyVHdlZW46IHRyYW5zaXRpb25fYXR0clR3ZWVuLFxuICBzdHlsZTogdHJhbnNpdGlvbl9zdHlsZSxcbiAgc3R5bGVUd2VlbjogdHJhbnNpdGlvbl9zdHlsZVR3ZWVuLFxuICB0ZXh0OiB0cmFuc2l0aW9uX3RleHQsXG4gIHJlbW92ZTogdHJhbnNpdGlvbl9yZW1vdmUsXG4gIHR3ZWVuOiB0cmFuc2l0aW9uX3R3ZWVuLFxuICBkZWxheTogdHJhbnNpdGlvbl9kZWxheSxcbiAgZHVyYXRpb246IHRyYW5zaXRpb25fZHVyYXRpb24sXG4gIGVhc2U6IHRyYW5zaXRpb25fZWFzZVxufTtcbiIsImltcG9ydCB7c2VsZWN0b3J9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCBzY2hlZHVsZSwge2dldH0gZnJvbSBcIi4vc2NoZWR1bGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0KSB7XG4gIHZhciBuYW1lID0gdGhpcy5fbmFtZSxcbiAgICAgIGlkID0gdGhpcy5faWQ7XG5cbiAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3Ioc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBzdWJub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChzdWJub2RlID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSkge1xuICAgICAgICBpZiAoXCJfX2RhdGFfX1wiIGluIG5vZGUpIHN1Ym5vZGUuX19kYXRhX18gPSBub2RlLl9fZGF0YV9fO1xuICAgICAgICBzdWJncm91cFtpXSA9IHN1Ym5vZGU7XG4gICAgICAgIHNjaGVkdWxlKHN1Ymdyb3VwW2ldLCBuYW1lLCBpZCwgaSwgc3ViZ3JvdXAsIGdldChub2RlLCBpZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsImltcG9ydCB7c2VsZWN0b3JBbGx9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCBzY2hlZHVsZSwge2dldH0gZnJvbSBcIi4vc2NoZWR1bGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0KSB7XG4gIHZhciBuYW1lID0gdGhpcy5fbmFtZSxcbiAgICAgIGlkID0gdGhpcy5faWQ7XG5cbiAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3JBbGwoc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBbXSwgcGFyZW50cyA9IFtdLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBmb3IgKHZhciBjaGlsZHJlbiA9IHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSwgY2hpbGQsIGluaGVyaXQgPSBnZXQobm9kZSwgaWQpLCBrID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgayA8IGw7ICsraykge1xuICAgICAgICAgIGlmIChjaGlsZCA9IGNoaWxkcmVuW2tdKSB7XG4gICAgICAgICAgICBzY2hlZHVsZShjaGlsZCwgbmFtZSwgaWQsIGssIGNoaWxkcmVuLCBpbmhlcml0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3ViZ3JvdXBzLnB1c2goY2hpbGRyZW4pO1xuICAgICAgICBwYXJlbnRzLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKHN1Ymdyb3VwcywgcGFyZW50cywgbmFtZSwgaWQpO1xufVxuIiwiaW1wb3J0IHttYXRjaGVyfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hdGNoKSB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggIT09IFwiZnVuY3Rpb25cIikgbWF0Y2ggPSBtYXRjaGVyKG1hdGNoKTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gW10sIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgbWF0Y2guY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpIHtcbiAgICAgICAgc3ViZ3JvdXAucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCB0aGlzLl9uYW1lLCB0aGlzLl9pZCk7XG59XG4iLCJpbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHRyYW5zaXRpb24pIHtcbiAgaWYgKHRyYW5zaXRpb24uX2lkICE9PSB0aGlzLl9pZCkgdGhyb3cgbmV3IEVycm9yO1xuXG4gIGZvciAodmFyIGdyb3VwczAgPSB0aGlzLl9ncm91cHMsIGdyb3VwczEgPSB0cmFuc2l0aW9uLl9ncm91cHMsIG0wID0gZ3JvdXBzMC5sZW5ndGgsIG0xID0gZ3JvdXBzMS5sZW5ndGgsIG0gPSBNYXRoLm1pbihtMCwgbTEpLCBtZXJnZXMgPSBuZXcgQXJyYXkobTApLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwMCA9IGdyb3VwczBbal0sIGdyb3VwMSA9IGdyb3VwczFbal0sIG4gPSBncm91cDAubGVuZ3RoLCBtZXJnZSA9IG1lcmdlc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXAwW2ldIHx8IGdyb3VwMVtpXSkge1xuICAgICAgICBtZXJnZVtpXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yICg7IGogPCBtMDsgKytqKSB7XG4gICAgbWVyZ2VzW2pdID0gZ3JvdXBzMFtqXTtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihtZXJnZXMsIHRoaXMuX3BhcmVudHMsIHRoaXMuX25hbWUsIHRoaXMuX2lkKTtcbn1cbiIsImltcG9ydCB7VHJhbnNpdGlvbiwgbmV3SWR9IGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZDAgPSB0aGlzLl9pZCxcbiAgICAgIGlkMSA9IG5ld0lkKCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgdmFyIGluaGVyaXQgPSBnZXQobm9kZSwgaWQwKTtcbiAgICAgICAgc2NoZWR1bGUobm9kZSwgbmFtZSwgaWQxLCBpLCBncm91cCwge1xuICAgICAgICAgIHRpbWU6IGluaGVyaXQudGltZSArIGluaGVyaXQuZGVsYXkgKyBpbmhlcml0LmR1cmF0aW9uLFxuICAgICAgICAgIGRlbGF5OiAwLFxuICAgICAgICAgIGR1cmF0aW9uOiBpbmhlcml0LmR1cmF0aW9uLFxuICAgICAgICAgIGVhc2U6IGluaGVyaXQuZWFzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCBuYW1lLCBpZDEpO1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldCwgaW5pdH0gZnJvbSBcIi4vc2NoZWR1bGVcIjtcblxuZnVuY3Rpb24gc3RhcnQobmFtZSkge1xuICByZXR1cm4gKG5hbWUgKyBcIlwiKS50cmltKCkuc3BsaXQoL158XFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGkgPj0gMCkgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgcmV0dXJuICF0IHx8IHQgPT09IFwic3RhcnRcIjtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uRnVuY3Rpb24oaWQsIG5hbWUsIGxpc3RlbmVyKSB7XG4gIHZhciBvbjAsIG9uMSwgc2l0ID0gc3RhcnQobmFtZSkgPyBpbml0IDogc2V0O1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2l0KHRoaXMsIGlkKSxcbiAgICAgICAgb24gPSBzY2hlZHVsZS5vbjtcblxuICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgYSBkaXNwYXRjaCB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCBkaXNwYXRjaCBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAob24gIT09IG9uMCkgKG9uMSA9IChvbjAgPSBvbikuY29weSgpKS5vbihuYW1lLCBsaXN0ZW5lcik7XG5cbiAgICBzY2hlZHVsZS5vbiA9IG9uMTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgbGlzdGVuZXIpIHtcbiAgdmFyIGlkID0gdGhpcy5faWQ7XG5cbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyXG4gICAgICA/IGdldCh0aGlzLm5vZGUoKSwgaWQpLm9uLm9uKG5hbWUpXG4gICAgICA6IHRoaXMuZWFjaChvbkZ1bmN0aW9uKGlkLCBuYW1lLCBsaXN0ZW5lcikpO1xufVxuIiwiaW1wb3J0IHtpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZyBhcyBpbnRlcnBvbGF0ZVRyYW5zZm9ybX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge25hbWVzcGFjZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHt0d2VlblZhbHVlfSBmcm9tIFwiLi90d2VlblwiO1xuaW1wb3J0IGludGVycG9sYXRlIGZyb20gXCIuL2ludGVycG9sYXRlXCI7XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmVOUyhmdWxsbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnQobmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgdmFsdWUwMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTAgPSB0aGlzLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgICByZXR1cm4gdmFsdWUwID09PSB2YWx1ZTEgPyBudWxsXG4gICAgICAgIDogdmFsdWUwID09PSB2YWx1ZTAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUodmFsdWUwMCA9IHZhbHVlMCwgdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50TlMoZnVsbG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZTEpIHtcbiAgdmFyIHZhbHVlMDAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUwID0gdGhpcy5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHJldHVybiB2YWx1ZTAgPT09IHZhbHVlMSA/IG51bGxcbiAgICAgICAgOiB2YWx1ZTAgPT09IHZhbHVlMDAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZSh2YWx1ZTAwID0gdmFsdWUwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb24obmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciB2YWx1ZTAwLFxuICAgICAgdmFsdWUxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTAsIHZhbHVlMSA9IHZhbHVlKHRoaXMpO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgcmV0dXJuIHZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgdmFsdWUwID0gdGhpcy5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gICAgcmV0dXJuIHZhbHVlMCA9PT0gdmFsdWUxID8gbnVsbFxuICAgICAgICA6IHZhbHVlMCA9PT0gdmFsdWUwMCAmJiB2YWx1ZTEgPT09IHZhbHVlMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZSh2YWx1ZTAwID0gdmFsdWUwLCB2YWx1ZTEwID0gdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uTlMoZnVsbG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZSkge1xuICB2YXIgdmFsdWUwMCxcbiAgICAgIHZhbHVlMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUwLCB2YWx1ZTEgPSB2YWx1ZSh0aGlzKTtcbiAgICBpZiAodmFsdWUxID09IG51bGwpIHJldHVybiB2b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICB2YWx1ZTAgPSB0aGlzLmdldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgcmV0dXJuIHZhbHVlMCA9PT0gdmFsdWUxID8gbnVsbFxuICAgICAgICA6IHZhbHVlMCA9PT0gdmFsdWUwMCAmJiB2YWx1ZTEgPT09IHZhbHVlMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZSh2YWx1ZTAwID0gdmFsdWUwLCB2YWx1ZTEwID0gdmFsdWUxKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpLCBpID0gZnVsbG5hbWUgPT09IFwidHJhbnNmb3JtXCIgPyBpbnRlcnBvbGF0ZVRyYW5zZm9ybSA6IGludGVycG9sYXRlO1xuICByZXR1cm4gdGhpcy5hdHRyVHdlZW4obmFtZSwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckZ1bmN0aW9uTlMgOiBhdHRyRnVuY3Rpb24pKGZ1bGxuYW1lLCBpLCB0d2VlblZhbHVlKHRoaXMsIFwiYXR0ci5cIiArIG5hbWUsIHZhbHVlKSlcbiAgICAgIDogdmFsdWUgPT0gbnVsbCA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJSZW1vdmVOUyA6IGF0dHJSZW1vdmUpKGZ1bGxuYW1lKVxuICAgICAgOiAoZnVsbG5hbWUubG9jYWwgPyBhdHRyQ29uc3RhbnROUyA6IGF0dHJDb25zdGFudCkoZnVsbG5hbWUsIGksIHZhbHVlICsgXCJcIikpO1xufVxuIiwiaW1wb3J0IHtuYW1lc3BhY2V9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcblxuZnVuY3Rpb24gYXR0clR3ZWVuTlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBub2RlID0gdGhpcywgaSA9IHZhbHVlLmFwcGx5KG5vZGUsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIGkgJiYgZnVuY3Rpb24odCkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIGkodCkpO1xuICAgIH07XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZnVuY3Rpb24gYXR0clR3ZWVuKG5hbWUsIHZhbHVlKSB7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBub2RlID0gdGhpcywgaSA9IHZhbHVlLmFwcGx5KG5vZGUsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIGkgJiYgZnVuY3Rpb24odCkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUobmFtZSwgaSh0KSk7XG4gICAgfTtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIga2V5ID0gXCJhdHRyLlwiICsgbmFtZTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgKGZ1bGxuYW1lLmxvY2FsID8gYXR0clR3ZWVuTlMgOiBhdHRyVHdlZW4pKGZ1bGxuYW1lLCB2YWx1ZSkpO1xufVxuIiwiaW1wb3J0IHtpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcyBhcyBpbnRlcnBvbGF0ZVRyYW5zZm9ybX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge3N0eWxlfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge3R3ZWVuVmFsdWV9IGZyb20gXCIuL3R3ZWVuXCI7XG5pbXBvcnQgaW50ZXJwb2xhdGUgZnJvbSBcIi4vaW50ZXJwb2xhdGVcIjtcblxuZnVuY3Rpb24gc3R5bGVSZW1vdmUobmFtZSwgaW50ZXJwb2xhdGUpIHtcbiAgdmFyIHZhbHVlMDAsXG4gICAgICB2YWx1ZTEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlMCA9IHN0eWxlKHRoaXMsIG5hbWUpLFxuICAgICAgICB2YWx1ZTEgPSAodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKSwgc3R5bGUodGhpcywgbmFtZSkpO1xuICAgIHJldHVybiB2YWx1ZTAgPT09IHZhbHVlMSA/IG51bGxcbiAgICAgICAgOiB2YWx1ZTAgPT09IHZhbHVlMDAgJiYgdmFsdWUxID09PSB2YWx1ZTEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUodmFsdWUwMCA9IHZhbHVlMCwgdmFsdWUxMCA9IHZhbHVlMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlUmVtb3ZlRW5kKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlQ29uc3RhbnQobmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgdmFsdWUwMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTAgPSBzdHlsZSh0aGlzLCBuYW1lKTtcbiAgICByZXR1cm4gdmFsdWUwID09PSB2YWx1ZTEgPyBudWxsXG4gICAgICAgIDogdmFsdWUwID09PSB2YWx1ZTAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUodmFsdWUwMCA9IHZhbHVlMCwgdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVGdW5jdGlvbihuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUpIHtcbiAgdmFyIHZhbHVlMDAsXG4gICAgICB2YWx1ZTEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlMCA9IHN0eWxlKHRoaXMsIG5hbWUpLFxuICAgICAgICB2YWx1ZTEgPSB2YWx1ZSh0aGlzKTtcbiAgICBpZiAodmFsdWUxID09IG51bGwpIHZhbHVlMSA9ICh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpLCBzdHlsZSh0aGlzLCBuYW1lKSk7XG4gICAgcmV0dXJuIHZhbHVlMCA9PT0gdmFsdWUxID8gbnVsbFxuICAgICAgICA6IHZhbHVlMCA9PT0gdmFsdWUwMCAmJiB2YWx1ZTEgPT09IHZhbHVlMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZSh2YWx1ZTAwID0gdmFsdWUwLCB2YWx1ZTEwID0gdmFsdWUxKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHZhciBpID0gKG5hbWUgKz0gXCJcIikgPT09IFwidHJhbnNmb3JtXCIgPyBpbnRlcnBvbGF0ZVRyYW5zZm9ybSA6IGludGVycG9sYXRlO1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/IHRoaXNcbiAgICAgICAgICAuc3R5bGVUd2VlbihuYW1lLCBzdHlsZVJlbW92ZShuYW1lLCBpKSlcbiAgICAgICAgICAub24oXCJlbmQuc3R5bGUuXCIgKyBuYW1lLCBzdHlsZVJlbW92ZUVuZChuYW1lKSlcbiAgICAgIDogdGhpcy5zdHlsZVR3ZWVuKG5hbWUsIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBzdHlsZUZ1bmN0aW9uKG5hbWUsIGksIHR3ZWVuVmFsdWUodGhpcywgXCJzdHlsZS5cIiArIG5hbWUsIHZhbHVlKSlcbiAgICAgICAgICA6IHN0eWxlQ29uc3RhbnQobmFtZSwgaSwgdmFsdWUgKyBcIlwiKSwgcHJpb3JpdHkpO1xufVxuIiwiZnVuY3Rpb24gc3R5bGVUd2VlbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLCBpID0gdmFsdWUuYXBwbHkobm9kZSwgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gaSAmJiBmdW5jdGlvbih0KSB7XG4gICAgICBub2RlLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIGkodCksIHByaW9yaXR5KTtcbiAgICB9O1xuICB9XG4gIHR3ZWVuLl92YWx1ZSA9IHZhbHVlO1xuICByZXR1cm4gdHdlZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICB2YXIga2V5ID0gXCJzdHlsZS5cIiArIChuYW1lICs9IFwiXCIpO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHJldHVybiAoa2V5ID0gdGhpcy50d2VlbihrZXkpKSAmJiBrZXkuX3ZhbHVlO1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBudWxsKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgc3R5bGVUd2VlbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkgPT0gbnVsbCA/IFwiXCIgOiBwcmlvcml0eSkpO1xufVxuIiwiaW1wb3J0IHtnZXQsIGluaXR9IGZyb20gXCIuL3NjaGVkdWxlXCI7XG5cbmZ1bmN0aW9uIGRlbGF5RnVuY3Rpb24oaWQsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpbml0KHRoaXMsIGlkKS5kZWxheSA9ICt2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkZWxheUNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPSArdmFsdWUsIGZ1bmN0aW9uKCkge1xuICAgIGluaXQodGhpcywgaWQpLmRlbGF5ID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGRlbGF5RnVuY3Rpb25cbiAgICAgICAgICA6IGRlbGF5Q29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmRlbGF5O1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGVcIjtcblxuZnVuY3Rpb24gZHVyYXRpb25GdW5jdGlvbihpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZHVyYXRpb24gPSArdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZHVyYXRpb25Db25zdGFudChpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID0gK3ZhbHVlLCBmdW5jdGlvbigpIHtcbiAgICBzZXQodGhpcywgaWQpLmR1cmF0aW9uID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGR1cmF0aW9uRnVuY3Rpb25cbiAgICAgICAgICA6IGR1cmF0aW9uQ29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmR1cmF0aW9uO1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGVcIjtcblxuZnVuY3Rpb24gZWFzZUNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZWFzZSA9IHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2goZWFzZUNvbnN0YW50KGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmVhc2U7XG59XG4iLCJpbXBvcnQge1RyYW5zaXRpb24sIG5ld0lkfSBmcm9tIFwiLi4vdHJhbnNpdGlvbi9pbmRleFwiO1xuaW1wb3J0IHNjaGVkdWxlIGZyb20gXCIuLi90cmFuc2l0aW9uL3NjaGVkdWxlXCI7XG5pbXBvcnQge2Vhc2VDdWJpY0luT3V0fSBmcm9tIFwiZDMtZWFzZVwiO1xuaW1wb3J0IHtub3d9IGZyb20gXCJkMy10aW1lclwiO1xuXG52YXIgZGVmYXVsdFRpbWluZyA9IHtcbiAgdGltZTogbnVsbCwgLy8gU2V0IG9uIHVzZS5cbiAgZGVsYXk6IDAsXG4gIGR1cmF0aW9uOiAyNTAsXG4gIGVhc2U6IGVhc2VDdWJpY0luT3V0XG59O1xuXG5mdW5jdGlvbiBpbmhlcml0KG5vZGUsIGlkKSB7XG4gIHZhciB0aW1pbmc7XG4gIHdoaWxlICghKHRpbWluZyA9IG5vZGUuX190cmFuc2l0aW9uKSB8fCAhKHRpbWluZyA9IHRpbWluZ1tpZF0pKSB7XG4gICAgaWYgKCEobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VGltaW5nLnRpbWUgPSBub3coKSwgZGVmYXVsdFRpbWluZztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRpbWluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgaWQsXG4gICAgICB0aW1pbmc7XG5cbiAgaWYgKG5hbWUgaW5zdGFuY2VvZiBUcmFuc2l0aW9uKSB7XG4gICAgaWQgPSBuYW1lLl9pZCwgbmFtZSA9IG5hbWUuX25hbWU7XG4gIH0gZWxzZSB7XG4gICAgaWQgPSBuZXdJZCgpLCAodGltaW5nID0gZGVmYXVsdFRpbWluZykudGltZSA9IG5vdygpLCBuYW1lID0gbmFtZSA9PSBudWxsID8gbnVsbCA6IG5hbWUgKyBcIlwiO1xuICB9XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc2NoZWR1bGUobm9kZSwgbmFtZSwgaWQsIGksIGdyb3VwLCB0aW1pbmcgfHwgaW5oZXJpdChub2RlLCBpZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBjdWJpY0luKHQpIHtcbiAgcmV0dXJuIHQgKiB0ICogdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1YmljT3V0KHQpIHtcbiAgcmV0dXJuIC0tdCAqIHQgKiB0ICsgMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1YmljSW5PdXQodCkge1xuICByZXR1cm4gKCh0ICo9IDIpIDw9IDEgPyB0ICogdCAqIHQgOiAodCAtPSAyKSAqIHQgKiB0ICsgMikgLyAyO1xufVxuIiwiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCBzZWxlY3Rpb25faW50ZXJydXB0IGZyb20gXCIuL2ludGVycnVwdFwiO1xuaW1wb3J0IHNlbGVjdGlvbl90cmFuc2l0aW9uIGZyb20gXCIuL3RyYW5zaXRpb25cIjtcblxuc2VsZWN0aW9uLnByb3RvdHlwZS5pbnRlcnJ1cHQgPSBzZWxlY3Rpb25faW50ZXJydXB0O1xuc2VsZWN0aW9uLnByb3RvdHlwZS50cmFuc2l0aW9uID0gc2VsZWN0aW9uX3RyYW5zaXRpb247XG4iLCJpbXBvcnQgaW50ZXJydXB0IGZyb20gXCIuLi9pbnRlcnJ1cHRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgIGludGVycnVwdCh0aGlzLCBuYW1lKTtcbiAgfSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgdmFyIG4gPSBzcGVjaWZpZXIubGVuZ3RoIC8gNiB8IDAsIGNvbG9ycyA9IG5ldyBBcnJheShuKSwgaSA9IDA7XG4gIHdoaWxlIChpIDwgbikgY29sb3JzW2ldID0gXCIjXCIgKyBzcGVjaWZpZXIuc2xpY2UoaSAqIDYsICsraSAqIDYpO1xuICByZXR1cm4gY29sb3JzO1xufVxuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcIjFmNzdiNGZmN2YwZTJjYTAyY2Q2MjcyODk0NjdiZDhjNTY0YmUzNzdjMjdmN2Y3ZmJjYmQyMjE3YmVjZlwiKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCI3ZmM5N2ZiZWFlZDRmZGMwODZmZmZmOTkzODZjYjBmMDAyN2ZiZjViMTc2NjY2NjZcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiMWI5ZTc3ZDk1ZjAyNzU3MGIzZTcyOThhNjZhNjFlZTZhYjAyYTY3NjFkNjY2NjY2XCIpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcImE2Y2VlMzFmNzhiNGIyZGY4YTMzYTAyY2ZiOWE5OWUzMWExY2ZkYmY2ZmZmN2YwMGNhYjJkNjZhM2Q5YWZmZmY5OWIxNTkyOFwiKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCJmYmI0YWViM2NkZTNjY2ViYzVkZWNiZTRmZWQ5YTZmZmZmY2NlNWQ4YmRmZGRhZWNmMmYyZjJcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiYjNlMmNkZmRjZGFjY2JkNWU4ZjRjYWU0ZTZmNWM5ZmZmMmFlZjFlMmNjY2NjY2NjXCIpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcImU0MWExYzM3N2ViODRkYWY0YTk4NGVhM2ZmN2YwMGZmZmYzM2E2NTYyOGY3ODFiZjk5OTk5OVwiKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCI2NmMyYTVmYzhkNjI4ZGEwY2JlNzhhYzNhNmQ4NTRmZmQ5MmZlNWM0OTRiM2IzYjNcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiOGRkM2M3ZmZmZmIzYmViYWRhZmI4MDcyODBiMWQzZmRiNDYyYjNkZTY5ZmNjZGU1ZDlkOWQ5YmM4MGJkY2NlYmM1ZmZlZDZmXCIpO1xuIiwiaW1wb3J0IHtpbnRlcnBvbGF0ZVJnYkJhc2lzfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2NoZW1lKSB7XG4gIHJldHVybiBpbnRlcnBvbGF0ZVJnYkJhc2lzKHNjaGVtZVtzY2hlbWUubGVuZ3RoIC0gMV0pO1xufVxuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZDhiMzY1ZjVmNWY1NWFiNGFjXCIsXG4gIFwiYTY2MTFhZGZjMjdkODBjZGMxMDE4NTcxXCIsXG4gIFwiYTY2MTFhZGZjMjdkZjVmNWY1ODBjZGMxMDE4NTcxXCIsXG4gIFwiOGM1MTBhZDhiMzY1ZjZlOGMzYzdlYWU1NWFiNGFjMDE2NjVlXCIsXG4gIFwiOGM1MTBhZDhiMzY1ZjZlOGMzZjVmNWY1YzdlYWU1NWFiNGFjMDE2NjVlXCIsXG4gIFwiOGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzYzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlXCIsXG4gIFwiOGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzZjVmNWY1YzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlXCIsXG4gIFwiNTQzMDA1OGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzYzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlMDAzYzMwXCIsXG4gIFwiNTQzMDA1OGM1MTBhYmY4MTJkZGZjMjdkZjZlOGMzZjVmNWY1YzdlYWU1ODBjZGMxMzU5NzhmMDE2NjVlMDAzYzMwXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImFmOGRjM2Y3ZjdmNzdmYmY3YlwiLFxuICBcIjdiMzI5NGMyYTVjZmE2ZGJhMDAwODgzN1wiLFxuICBcIjdiMzI5NGMyYTVjZmY3ZjdmN2E2ZGJhMDAwODgzN1wiLFxuICBcIjc2MmE4M2FmOGRjM2U3ZDRlOGQ5ZjBkMzdmYmY3YjFiNzgzN1wiLFxuICBcIjc2MmE4M2FmOGRjM2U3ZDRlOGY3ZjdmN2Q5ZjBkMzdmYmY3YjFiNzgzN1wiLFxuICBcIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzN1wiLFxuICBcIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzN1wiLFxuICBcIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYlwiLFxuICBcIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlOWEzYzlmN2Y3ZjdhMWQ3NmFcIixcbiAgXCJkMDFjOGJmMWI2ZGFiOGUxODY0ZGFjMjZcIixcbiAgXCJkMDFjOGJmMWI2ZGFmN2Y3ZjdiOGUxODY0ZGFjMjZcIixcbiAgXCJjNTFiN2RlOWEzYzlmZGUwZWZlNmY1ZDBhMWQ3NmE0ZDkyMjFcIixcbiAgXCJjNTFiN2RlOWEzYzlmZGUwZWZmN2Y3ZjdlNmY1ZDBhMWQ3NmE0ZDkyMjFcIixcbiAgXCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjFcIixcbiAgXCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjFcIixcbiAgXCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTlcIixcbiAgXCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTlcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiOTk4ZWMzZjdmN2Y3ZjFhMzQwXCIsXG4gIFwiNWUzYzk5YjJhYmQyZmRiODYzZTY2MTAxXCIsXG4gIFwiNWUzYzk5YjJhYmQyZjdmN2Y3ZmRiODYzZTY2MTAxXCIsXG4gIFwiNTQyNzg4OTk4ZWMzZDhkYWViZmVlMGI2ZjFhMzQwYjM1ODA2XCIsXG4gIFwiNTQyNzg4OTk4ZWMzZDhkYWViZjdmN2Y3ZmVlMGI2ZjFhMzQwYjM1ODA2XCIsXG4gIFwiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2XCIsXG4gIFwiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZjdmN2Y3ZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2XCIsXG4gIFwiMmQwMDRiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2N2YzYjA4XCIsXG4gIFwiMmQwMDRiNTQyNzg4ODA3M2FjYjJhYmQyZDhkYWViZjdmN2Y3ZmVlMGI2ZmRiODYzZTA4MjE0YjM1ODA2N2YzYjA4XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImVmOGE2MmY3ZjdmNzY3YTljZlwiLFxuICBcImNhMDAyMGY0YTU4MjkyYzVkZTA1NzFiMFwiLFxuICBcImNhMDAyMGY0YTU4MmY3ZjdmNzkyYzVkZTA1NzFiMFwiLFxuICBcImIyMTgyYmVmOGE2MmZkZGJjN2QxZTVmMDY3YTljZjIxNjZhY1wiLFxuICBcImIyMTgyYmVmOGE2MmZkZGJjN2Y3ZjdmN2QxZTVmMDY3YTljZjIxNjZhY1wiLFxuICBcImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhY1wiLFxuICBcImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhY1wiLFxuICBcIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MVwiLFxuICBcIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MVwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlZjhhNjJmZmZmZmY5OTk5OTlcIixcbiAgXCJjYTAwMjBmNGE1ODJiYWJhYmE0MDQwNDBcIixcbiAgXCJjYTAwMjBmNGE1ODJmZmZmZmZiYWJhYmE0MDQwNDBcIixcbiAgXCJiMjE4MmJlZjhhNjJmZGRiYzdlMGUwZTA5OTk5OTk0ZDRkNGRcIixcbiAgXCJiMjE4MmJlZjhhNjJmZGRiYzdmZmZmZmZlMGUwZTA5OTk5OTk0ZDRkNGRcIixcbiAgXCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGRcIixcbiAgXCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGRcIixcbiAgXCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWFcIixcbiAgXCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWFcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmM4ZDU5ZmZmZmJmOTFiZmRiXCIsXG4gIFwiZDcxOTFjZmRhZTYxYWJkOWU5MmM3YmI2XCIsXG4gIFwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkOWU5MmM3YmI2XCIsXG4gIFwiZDczMDI3ZmM4ZDU5ZmVlMDkwZTBmM2Y4OTFiZmRiNDU3NWI0XCIsXG4gIFwiZDczMDI3ZmM4ZDU5ZmVlMDkwZmZmZmJmZTBmM2Y4OTFiZmRiNDU3NWI0XCIsXG4gIFwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0XCIsXG4gIFwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZmZmZmJmZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0XCIsXG4gIFwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0MzEzNjk1XCIsXG4gIFwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDkwZmZmZmJmZTBmM2Y4YWJkOWU5NzRhZGQxNDU3NWI0MzEzNjk1XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImZjOGQ1OWZmZmZiZjkxY2Y2MFwiLFxuICBcImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MVwiLFxuICBcImQ3MTkxY2ZkYWU2MWZmZmZiZmE2ZDk2YTFhOTY0MVwiLFxuICBcImQ3MzAyN2ZjOGQ1OWZlZTA4YmQ5ZWY4YjkxY2Y2MDFhOTg1MFwiLFxuICBcImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MFwiLFxuICBcImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MFwiLFxuICBcImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MFwiLFxuICBcImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzN1wiLFxuICBcImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzN1wiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmYzhkNTlmZmZmYmY5OWQ1OTRcIixcbiAgXCJkNzE5MWNmZGFlNjFhYmRkYTQyYjgzYmFcIixcbiAgXCJkNzE5MWNmZGFlNjFmZmZmYmZhYmRkYTQyYjgzYmFcIixcbiAgXCJkNTNlNGZmYzhkNTlmZWUwOGJlNmY1OTg5OWQ1OTQzMjg4YmRcIixcbiAgXCJkNTNlNGZmYzhkNTlmZWUwOGJmZmZmYmZlNmY1OTg5OWQ1OTQzMjg4YmRcIixcbiAgXCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmRcIixcbiAgXCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmRcIixcbiAgXCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTJcIixcbiAgXCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTJcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZTVmNWY5OTlkOGM5MmNhMjVmXCIsXG4gIFwiZWRmOGZiYjJlMmUyNjZjMmE0MjM4YjQ1XCIsXG4gIFwiZWRmOGZiYjJlMmUyNjZjMmE0MmNhMjVmMDA2ZDJjXCIsXG4gIFwiZWRmOGZiY2NlY2U2OTlkOGM5NjZjMmE0MmNhMjVmMDA2ZDJjXCIsXG4gIFwiZWRmOGZiY2NlY2U2OTlkOGM5NjZjMmE0NDFhZTc2MjM4YjQ1MDA1ODI0XCIsXG4gIFwiZjdmY2ZkZTVmNWY5Y2NlY2U2OTlkOGM5NjZjMmE0NDFhZTc2MjM4YjQ1MDA1ODI0XCIsXG4gIFwiZjdmY2ZkZTVmNWY5Y2NlY2U2OTlkOGM5NjZjMmE0NDFhZTc2MjM4YjQ1MDA2ZDJjMDA0NDFiXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImUwZWNmNDllYmNkYTg4NTZhN1wiLFxuICBcImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZFwiLFxuICBcImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3Y1wiLFxuICBcImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3Y1wiLFxuICBcImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YlwiLFxuICBcImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YlwiLFxuICBcImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlMGYzZGJhOGRkYjU0M2EyY2FcIixcbiAgXCJmMGY5ZThiYWU0YmM3YmNjYzQyYjhjYmVcIixcbiAgXCJmMGY5ZThiYWU0YmM3YmNjYzQ0M2EyY2EwODY4YWNcIixcbiAgXCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0M2EyY2EwODY4YWNcIixcbiAgXCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWVcIixcbiAgXCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWVcIixcbiAgXCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODY4YWMwODQwODFcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmVlOGM4ZmRiYjg0ZTM0YTMzXCIsXG4gIFwiZmVmMGQ5ZmRjYzhhZmM4ZDU5ZDczMDFmXCIsXG4gIFwiZmVmMGQ5ZmRjYzhhZmM4ZDU5ZTM0YTMzYjMwMDAwXCIsXG4gIFwiZmVmMGQ5ZmRkNDllZmRiYjg0ZmM4ZDU5ZTM0YTMzYjMwMDAwXCIsXG4gIFwiZmVmMGQ5ZmRkNDllZmRiYjg0ZmM4ZDU5ZWY2NTQ4ZDczMDFmOTkwMDAwXCIsXG4gIFwiZmZmN2VjZmVlOGM4ZmRkNDllZmRiYjg0ZmM4ZDU5ZWY2NTQ4ZDczMDFmOTkwMDAwXCIsXG4gIFwiZmZmN2VjZmVlOGM4ZmRkNDllZmRiYjg0ZmM4ZDU5ZWY2NTQ4ZDczMDFmYjMwMDAwN2YwMDAwXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImVjZTJmMGE2YmRkYjFjOTA5OVwiLFxuICBcImY2ZWZmN2JkYzllMTY3YTljZjAyODE4YVwiLFxuICBcImY2ZWZmN2JkYzllMTY3YTljZjFjOTA5OTAxNmM1OVwiLFxuICBcImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjFjOTA5OTAxNmM1OVwiLFxuICBcImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MFwiLFxuICBcImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MFwiLFxuICBcImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNmM1OTAxNDYzNlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlY2U3ZjJhNmJkZGIyYjhjYmVcIixcbiAgXCJmMWVlZjZiZGM5ZTE3NGE5Y2YwNTcwYjBcIixcbiAgXCJmMWVlZjZiZGM5ZTE3NGE5Y2YyYjhjYmUwNDVhOGRcIixcbiAgXCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YyYjhjYmUwNDVhOGRcIixcbiAgXCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2JcIixcbiAgXCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2JcIixcbiAgXCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwNDVhOGQwMjM4NThcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZTdlMWVmYzk5NGM3ZGQxYzc3XCIsXG4gIFwiZjFlZWY2ZDdiNWQ4ZGY2NWIwY2UxMjU2XCIsXG4gIFwiZjFlZWY2ZDdiNWQ4ZGY2NWIwZGQxYzc3OTgwMDQzXCIsXG4gIFwiZjFlZWY2ZDRiOWRhYzk5NGM3ZGY2NWIwZGQxYzc3OTgwMDQzXCIsXG4gIFwiZjFlZWY2ZDRiOWRhYzk5NGM3ZGY2NWIwZTcyOThhY2UxMjU2OTEwMDNmXCIsXG4gIFwiZjdmNGY5ZTdlMWVmZDRiOWRhYzk5NGM3ZGY2NWIwZTcyOThhY2UxMjU2OTEwMDNmXCIsXG4gIFwiZjdmNGY5ZTdlMWVmZDRiOWRhYzk5NGM3ZGY2NWIwZTcyOThhY2UxMjU2OTgwMDQzNjcwMDFmXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImZkZTBkZGZhOWZiNWM1MWI4YVwiLFxuICBcImZlZWJlMmZiYjRiOWY3NjhhMWFlMDE3ZVwiLFxuICBcImZlZWJlMmZiYjRiOWY3NjhhMWM1MWI4YTdhMDE3N1wiLFxuICBcImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3N1wiLFxuICBcImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3N1wiLFxuICBcImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3N1wiLFxuICBcImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YVwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlZGY4YjE3ZmNkYmIyYzdmYjhcIixcbiAgXCJmZmZmY2NhMWRhYjQ0MWI2YzQyMjVlYThcIixcbiAgXCJmZmZmY2NhMWRhYjQ0MWI2YzQyYzdmYjgyNTM0OTRcIixcbiAgXCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQyYzdmYjgyNTM0OTRcIixcbiAgXCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODRcIixcbiAgXCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODRcIixcbiAgXCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgyNTM0OTQwODFkNThcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZjdmY2I5YWRkZDhlMzFhMzU0XCIsXG4gIFwiZmZmZmNjYzJlNjk5NzhjNjc5MjM4NDQzXCIsXG4gIFwiZmZmZmNjYzJlNjk5NzhjNjc5MzFhMzU0MDA2ODM3XCIsXG4gIFwiZmZmZmNjZDlmMGEzYWRkZDhlNzhjNjc5MzFhMzU0MDA2ODM3XCIsXG4gIFwiZmZmZmNjZDlmMGEzYWRkZDhlNzhjNjc5NDFhYjVkMjM4NDQzMDA1YTMyXCIsXG4gIFwiZmZmZmU1ZjdmY2I5ZDlmMGEzYWRkZDhlNzhjNjc5NDFhYjVkMjM4NDQzMDA1YTMyXCIsXG4gIFwiZmZmZmU1ZjdmY2I5ZDlmMGEzYWRkZDhlNzhjNjc5NDFhYjVkMjM4NDQzMDA2ODM3MDA0NTI5XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImZmZjdiY2ZlYzQ0ZmQ5NWYwZVwiLFxuICBcImZmZmZkNGZlZDk4ZWZlOTkyOWNjNGMwMlwiLFxuICBcImZmZmZkNGZlZDk4ZWZlOTkyOWQ5NWYwZTk5MzQwNFwiLFxuICBcImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNFwiLFxuICBcImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNFwiLFxuICBcImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNFwiLFxuICBcImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmZmVkYTBmZWIyNGNmMDNiMjBcIixcbiAgXCJmZmZmYjJmZWNjNWNmZDhkM2NlMzFhMWNcIixcbiAgXCJmZmZmYjJmZWNjNWNmZDhkM2NmMDNiMjBiZDAwMjZcIixcbiAgXCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmMDNiMjBiZDAwMjZcIixcbiAgXCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjZcIixcbiAgXCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjZcIixcbiAgXCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiZDAwMjY4MDAwMjZcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZGVlYmY3OWVjYWUxMzE4MmJkXCIsXG4gIFwiZWZmM2ZmYmRkN2U3NmJhZWQ2MjE3MWI1XCIsXG4gIFwiZWZmM2ZmYmRkN2U3NmJhZWQ2MzE4MmJkMDg1MTljXCIsXG4gIFwiZWZmM2ZmYzZkYmVmOWVjYWUxNmJhZWQ2MzE4MmJkMDg1MTljXCIsXG4gIFwiZWZmM2ZmYzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg0NTk0XCIsXG4gIFwiZjdmYmZmZGVlYmY3YzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg0NTk0XCIsXG4gIFwiZjdmYmZmZGVlYmY3YzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg1MTljMDgzMDZiXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImU1ZjVlMGExZDk5YjMxYTM1NFwiLFxuICBcImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NVwiLFxuICBcImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyY1wiLFxuICBcImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyY1wiLFxuICBcImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMlwiLFxuICBcImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMlwiLFxuICBcImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmMGYwZjBiZGJkYmQ2MzYzNjNcIixcbiAgXCJmN2Y3ZjdjY2NjY2M5Njk2OTY1MjUyNTJcIixcbiAgXCJmN2Y3ZjdjY2NjY2M5Njk2OTY2MzYzNjMyNTI1MjVcIixcbiAgXCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY2MzYzNjMyNTI1MjVcIixcbiAgXCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjVcIixcbiAgXCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjVcIixcbiAgXCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUwMDAwMDBcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcFwiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZWZlZGY1YmNiZGRjNzU2YmIxXCIsXG4gIFwiZjJmMGY3Y2JjOWUyOWU5YWM4NmE1MWEzXCIsXG4gIFwiZjJmMGY3Y2JjOWUyOWU5YWM4NzU2YmIxNTQyNzhmXCIsXG4gIFwiZjJmMGY3ZGFkYWViYmNiZGRjOWU5YWM4NzU2YmIxNTQyNzhmXCIsXG4gIFwiZjJmMGY3ZGFkYWViYmNiZGRjOWU5YWM4ODA3ZGJhNmE1MWEzNGExNDg2XCIsXG4gIFwiZmNmYmZkZWZlZGY1ZGFkYWViYmNiZGRjOWU5YWM4ODA3ZGJhNmE1MWEzNGExNDg2XCIsXG4gIFwiZmNmYmZkZWZlZGY1ZGFkYWViYmNiZGRjOWU5YWM4ODA3ZGJhNmE1MWEzNTQyNzhmM2YwMDdkXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9yc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXBcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImZlZTBkMmZjOTI3MmRlMmQyNlwiLFxuICBcImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZFwiLFxuICBcImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNVwiLFxuICBcImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNVwiLFxuICBcImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZFwiLFxuICBcImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZFwiLFxuICBcImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZFwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmZWU2Y2VmZGFlNmJlNjU1MGRcIixcbiAgXCJmZWVkZGVmZGJlODVmZDhkM2NkOTQ3MDFcIixcbiAgXCJmZWVkZGVmZGJlODVmZDhkM2NlNjU1MGRhNjM2MDNcIixcbiAgXCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NlNjU1MGRhNjM2MDNcIixcbiAgXCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDRcIixcbiAgXCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDRcIixcbiAgXCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDFhNjM2MDM3ZjI3MDRcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IHtjdWJlaGVsaXh9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmd9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmcoY3ViZWhlbGl4KDMwMCwgMC41LCAwLjApLCBjdWJlaGVsaXgoLTI0MCwgMC41LCAxLjApKTtcbiIsImltcG9ydCB7Y3ViZWhlbGl4fSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcblxuZXhwb3J0IHZhciB3YXJtID0gaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nKGN1YmVoZWxpeCgtMTAwLCAwLjc1LCAwLjM1KSwgY3ViZWhlbGl4KDgwLCAxLjUwLCAwLjgpKTtcblxuZXhwb3J0IHZhciBjb29sID0gaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nKGN1YmVoZWxpeCgyNjAsIDAuNzUsIDAuMzUpLCBjdWJlaGVsaXgoODAsIDEuNTAsIDAuOCkpO1xuXG52YXIgYyA9IGN1YmVoZWxpeCgpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0KSB7XG4gIGlmICh0IDwgMCB8fCB0ID4gMSkgdCAtPSBNYXRoLmZsb29yKHQpO1xuICB2YXIgdHMgPSBNYXRoLmFicyh0IC0gMC41KTtcbiAgYy5oID0gMzYwICogdCAtIDEwMDtcbiAgYy5zID0gMS41IC0gMS41ICogdHM7XG4gIGMubCA9IDAuOCAtIDAuOSAqIHRzO1xuICByZXR1cm4gYyArIFwiXCI7XG59XG4iLCJpbXBvcnQge3JnYn0gZnJvbSBcImQzLWNvbG9yXCI7XG5cbnZhciBjID0gcmdiKCksXG4gICAgcGlfMV8zID0gTWF0aC5QSSAvIDMsXG4gICAgcGlfMl8zID0gTWF0aC5QSSAqIDIgLyAzO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0KSB7XG4gIHZhciB4O1xuICB0ID0gKDAuNSAtIHQpICogTWF0aC5QSTtcbiAgYy5yID0gMjU1ICogKHggPSBNYXRoLnNpbih0KSkgKiB4O1xuICBjLmcgPSAyNTUgKiAoeCA9IE1hdGguc2luKHQgKyBwaV8xXzMpKSAqIHg7XG4gIGMuYiA9IDI1NSAqICh4ID0gTWF0aC5zaW4odCArIHBpXzJfMykpICogeDtcbiAgcmV0dXJuIGMgKyBcIlwiO1xufVxuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzXCI7XG5cbmZ1bmN0aW9uIHJhbXAocmFuZ2UpIHtcbiAgdmFyIG4gPSByYW5nZS5sZW5ndGg7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIHJhbmdlW01hdGgubWF4KDAsIE1hdGgubWluKG4gLSAxLCBNYXRoLmZsb29yKHQgKiBuKSkpXTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmFtcChjb2xvcnMoXCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjVcIikpO1xuXG5leHBvcnQgdmFyIG1hZ21hID0gcmFtcChjb2xvcnMoXCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmZcIikpO1xuXG5leHBvcnQgdmFyIGluZmVybm8gPSByYW1wKGNvbG9ycyhcIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNFwiKSk7XG5cbmV4cG9ydCB2YXIgcGxhc21hID0gcmFtcChjb2xvcnMoXCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjFcIikpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuaW1wb3J0IHttYXh9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtzY2FsZVNlcXVlbnRpYWx9IGZyb20gXCJkMy1zY2FsZVwiO1xuaW1wb3J0ICogYXMgZDNDaHJvbWF0aWMgZnJvbSBcImQzLXNjYWxlLWNocm9tYXRpY1wiO1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb2xvckNoYXJ0KHNodWZmbGU9dHJ1ZSl7XG4gICAgLy8gcmVmIGlsbHVzdHJhdG9yIGNvbG9yIHRoZW1lc1xuICAgIGNvbnN0IGNvbG9ycyA9IFtcbiAgICAgICAgXCJyZ2IoMTAwLDExOCwxMjApXCIsXG4gICAgICAgIFwicmdiKDEwMSwxNDEsMTQ1KVwiLFxuICAgICAgICBcInJnYigxMDMsMTI2LDgyKVwiLFxuICAgICAgICBcInJnYigxMDMsMTg0LDIyMilcIixcbiAgICAgICAgXCJyZ2IoMTA4LDExMCw4OClcIixcblxuICAgICAgICBcInJnYigxMDgsMTQ3LDEyOClcIixcbiAgICAgICAgXCJyZ2IoMTE5LDE0NCwxODIpXCIsXG4gICAgICAgIFwicmdiKDEyNiwxMzAsMTIyKVwiLFxuICAgICAgICBcInJnYigxMzMsMTczLDE4NilcIixcbiAgICAgICAgXCJyZ2IoMTM3LDExNCw5MSlcIixcbiAgICAgICAgXCJyZ2IoMTQ1LDE3MCwxNTcpXCIsXG5cbiAgICAgICAgXCJyZ2IoMTQ1LDIwMSwyMzIpXCIsXG4gICAgICAgIFwicmdiKDE0NywxMDUsNjYpXCIsXG4gICAgICAgIFwicmdiKDE1OSwxMTQsMTE2KVwiLFxuICAgICAgICBcInJnYigxNTksMTg4LDE5MSlcIixcbiAgICAgICAgXCJyZ2IoMTU5LDIyOSwxOTQpXCIsXG4gICAgICAgIFwicmdiKDE2MywxNjMsMTcxKVwiLFxuXG4gICAgICAgIFwicmdiKDE2NCwyMDcsMTkwKVwiLFxuICAgICAgICBcInJnYigxNzIsMTA4LDEzMClcIixcbiAgICAgICAgXCJyZ2IoMTczLDg0LDExNClcIixcbiAgICAgICAgXCJyZ2IoMTc0LDE5NSwyMjIpXCIsXG4gICAgICAgIFwicmdiKDE3NiwyMDQsMTUzKVwiLFxuXG4gICAgICAgIFwicmdiKDE3OSwxODAsMTUwKVwiLFxuICAgICAgICBcInJnYigxODAsMjIwLDIzNylcIixcbiAgICAgICAgXCJyZ2IoMTgzLDIwMiwxMjEpXCIsXG4gICAgICAgIFwicmdiKDE5MiwyMDIsODUpXCIsXG4gICAgICAgIFwicmdiKDE5MywxOTEsMTkzXCIsXG4gICAgICAgIFwicmdiKDE5NSw5NywxMzYpXCIsXG5cbiAgICAgICAgXCJyZ2IoMTk5LDEyMSwxMDIpXCIsXG4gICAgICAgIFwicmdiKDIwNywyMDIsNzYpXCIsXG4gICAgICAgIFwicmdiKDIwOSwyMTksMTg5KVwiLFxuICAgICAgICBcInJnYigyMTMsMjUxLDI1NSlcIixcbiAgICAgICAgXCJyZ2IoMjE1LDk0LDU2KVwiLFxuXG4gICAgICAgIFwicmdiKDIxOCwxMTQsMTI2KVwiLFxuICAgICAgICBcInJnYigyMjMsOTAsNzMpXCIsXG4gICAgICAgIFwicmdiKDIyNCwyNDcsMjE3KVwiLFxuICAgICAgICBcInJnYigyMjcsMjA1LDE2NClcIixcbiAgICAgICAgXCJyZ2IoMjI4LDE2OCwxODUpXCIsXG5cbiAgICAgICAgXCJyZ2IoMjMwLDE3NiwxNTIpXCIsXG4gICAgICAgIFwicmdiKDIzMiwyMTIsMTc1KVwiLFxuICAgICAgICBcInJnYigyMzksMjAxLDc2KVwiLFxuICAgICAgICBcInJnYigyNDAsMTI0LDEwOClcIixcbiAgICAgICAgXCJyZ2IoMjQ2LDIzMiwxNzcpXCIsXG5cbiAgICAgICAgXCJyZ2IoMjQ5LDIyOCwxNzMpXCIsXG4gICAgICAgIFwicmdiKDI1MiwyNDUsMTkxKVwiLFxuICAgICAgICBcInJnYigyNTUsMTg4LDEwMylcIixcbiAgICAgICAgXCJyZ2IoNDUsOTQsMTEwKVwiLFxuICAgICAgICBcInJnYig1MSwxNTMsMjA0KVwiLFxuXG4gICAgICAgIFwicmdiKDYwLDEyNCwxNDUpXCIsXG4gICAgICAgIFwicmdiKDYyLDg3LDE0NSlcIixcbiAgICAgICAgXCJyZ2IoNjUsMTE1LDEyMClcIixcbiAgICAgICAgXCJyZ2IoODksMjE2LDIyOSlcIixcbiAgICAgICAgXCJyZ2IoOTQsMTc4LDE1MylcIixcbiAgICAgICAgXCJyZ2IoOTUsMTI0LDEzNClcIlxuICAgIF07XG5cbiAgICBpZiAoc2h1ZmZsZSkgcmV0dXJuIHNodWZmbGVDb2xvcnMoY29sb3JzKTtcbiAgICByZXR1cm4gY29sb3JzO1xufVxuXG5mdW5jdGlvbiBzaHVmZmxlQ29sb3JzKGFycmF5KSB7XG4gICAgLy8gRmlzaGVyLVlhdGVzIHNodWZmbGVcbiAgICBsZXQgY291bnRlciA9IGFycmF5Lmxlbmd0aDtcblxuICAgIC8vIFdoaWxlIHRoZXJlIGFyZSBlbGVtZW50cyBpbiB0aGUgYXJyYXlcbiAgICB3aGlsZSAoY291bnRlciA+IDApIHtcbiAgICAgICAgLy8gUGljayBhIHJhbmRvbSBpbmRleFxuICAgICAgICBsZXQgaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjb3VudGVyKTtcblxuICAgICAgICAvLyBEZWNyZWFzZSBjb3VudGVyIGJ5IDFcbiAgICAgICAgY291bnRlci0tO1xuXG4gICAgICAgIC8vIEFuZCBzd2FwIHRoZSBsYXN0IGVsZW1lbnQgd2l0aCBpdFxuICAgICAgICBsZXQgdGVtcCA9IGFycmF5W2NvdW50ZXJdO1xuICAgICAgICBhcnJheVtjb3VudGVyXSA9IGFycmF5W2luZGV4XTtcbiAgICAgICAgYXJyYXlbaW5kZXhdID0gdGVtcDtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbi8qKlxuICogZ2V0IGEgY29sb3IgaW50ZXJwb2xhdG9yXG4gKiBAcGFyYW0gbmFtZSB7ZW51bX06IEJ1R24sIE9yUmQuLi4uXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbG9ySW50ZXJwb2xhdG9yKG5hbWUpe1xuICAgIC8vIHJlZmVyZW5jZTogaHR0cHM6Ly9naXRodWIuY29tL2QzL2QzLXNjYWxlLWNocm9tYXRpYy9ibG9iL21hc3Rlci9SRUFETUUubWQjc2VxdWVudGlhbC1tdWx0aS1odWVcbiAgICBjb25zdCBpbnRlcnBvbGF0b3JzID0ge1xuICAgICAgICBCdUduOiBkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZUJ1R24sXG4gICAgICAgIE9yUmQ6IGQzQ2hyb21hdGljLmludGVycG9sYXRlT3JSZCxcbiAgICAgICAgUHVCdTogZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVQdUJ1LFxuICAgICAgICBZbEduQnU6IGQzQ2hyb21hdGljLmludGVycG9sYXRlWWxHbkJ1LFxuICAgICAgICBCbHVlczogZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVCbHVlcyxcbiAgICAgICAgT3JhbmdlczogZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVPcmFuZ2VzLFxuICAgICAgICBHcmVlbnM6IGQzQ2hyb21hdGljLmludGVycG9sYXRlR3JlZW5zLFxuICAgICAgICBQdXJwbGVzOiBkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZVB1cnBsZXMsXG4gICAgICAgIFJlZHM6IGQzQ2hyb21hdGljLmludGVycG9sYXRlUmVkcyxcbiAgICAgICAgR3JleXM6IGQzQ2hyb21hdGljLmludGVycG9sYXRlR3JleXMsXG4gICAgICAgIEdyYXlzOiBkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZUdyZXlzXG4gICAgfTtcbiAgICBpZiAoIWludGVycG9sYXRvcnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgY29uc3QgZXJyID0gXCJVbnJlY29nbml6ZWQgY29sb3I6IFwiICsgbmFtZTtcbiAgICAgICAgYWxlcnQoZXJyKTtcbiAgICAgICAgdGhyb3coZXJyKTtcbiAgICB9XG4gICAgcmV0dXJuIGludGVycG9sYXRvcnNbbmFtZV07XG59XG5cbi8qKlxuICogcmVmZXJlbmNlOiBodHRwczovL2dpdGh1Yi5jb20vZDMvZDMtc2NhbGVcbiAqIHJlZmVyZW5jZTogaHR0cDovL2JsLm9ja3Mub3JnL2N1cnJhbi8zMDk0YjM3ZTYzYjkxOGJhYjBhMDY3ODdlMTYxNjA3YlxuICogc2NhbGVTZXF1ZW50aWFsIG1hcHMgdGhlIGNvbnRpbnVvdXMgZG9tYWluIHRvIGEgY29udGludW91cyBjb2xvciBzY2FsZVxuICogQHBhcmFtIGRhdGEge0xpc3R9IG9mIG51bWVyaWNhbCBkYXRhXG4gKiBAcGFyYW0gY29sb3JzIHtTdHJpbmd9IGEgY29sb3IgbmFtZSB0aGF0IGlzIGF2YWlsYWJsZSBpbiBnZXRDb2xvckludGVycG9sYXRvcigpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb2xvclNjYWxlKGRhdGEsIGNvbG9ycz1cIllsR25CdVwiLCBkbWluID0gMCkge1xuICAgIC8vIGxldCBkbWF4ID0gTWF0aC5yb3VuZChtYXgoZGF0YSkpO1xuICAgIGxldCBkbWF4ID0gbWF4KGRhdGEpO1xuICAgIGNvbnN0IHNjYWxlID0gc2NhbGVTZXF1ZW50aWFsKGdldENvbG9ySW50ZXJwb2xhdG9yKGNvbG9ycykpO1xuICAgIHNjYWxlLmRvbWFpbihbZG1pbiwgZG1heF0pO1xuICAgIHJldHVybiBzY2FsZTtcbn1cblxuLyoqXG4gKiBEcmF3IGEgY29sb3IgbGVnZW5kIGJhci5cbiAqIERlcGVuZGVuY2llczogZXhwcmVzc2lvbk1hcC5jc3NcbiAqIEBwYXJhbSB0aXRsZSB7U3RyaW5nfVxuICogQHBhcmFtIGRvbSB7b2JqZWN0fSBEMyBkb20gb2JqZWN0XG4gKiBAcGFyYW0gc2NhbGUge09iamVjdH0gRDMgc2NhbGUgb2YgdGhlIGNvbG9yXG4gKiBAcGFyYW0gY29uZmlnIHtPYmplY3R9IHdpdGggYXR0cjogeCwgeVxuICogQHBhcmFtIHVzZUxvZyB7Qm9vbGVhbn1cbiAqIEBwYXJhbSBvcmllbnRhdGlvbiB7ZW51bX0gaCBvciB2LCBpLmUuIGhvcml6b250YWwgb3IgdmVydGljYWxcbiAqIEBwYXJhbSBjZWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3Q29sb3JMZWdlbmQodGl0bGUsIGRvbSwgc2NhbGUsIGNvbmZpZywgdXNlTG9nLCB0aWNrcz0xMCwgYmFzZT0xMCwgY2VsbD17aDoxMCwgdzo0MH0sIG9yaWVudGF0aW9uPVwiaFwiKXtcbiAgICBsZXQgcmFuZ2UgPSBbLi4uQXJyYXkodGlja3MrMSkua2V5cygpXTtcbiAgICBsZXQgaW50ZXJ2YWwgPSBzY2FsZS5kb21haW4oKVsxXS90aWNrcztcbiAgICBjb25zdCBkYXRhID0gcmFuZ2UubWFwKChkKT0+ZCppbnRlcnZhbCk7XG5cbiAgICAvLyBsZWdlbmQgZ3JvdXBzXG4gICAgY29uc3QgbGVnZW5kcyA9IGRvbS5hcHBlbmQoXCJnXCIpLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke2NvbmZpZy54fSwgJHtjb25maWcueX0pYClcbiAgICAgICAgICAgICAgICAgICAgLnNlbGVjdEFsbChcIi5sZWdlbmRcIikuZGF0YShkYXRhKTtcblxuICAgIGNvbnN0IGcgPSBsZWdlbmRzLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5jbGFzc2VkKFwibGVnZW5kXCIsIHRydWUpO1xuXG4gICAgaWYgKG9yaWVudGF0aW9uID09ICdoJyl7XG4gICAgICAgICAvLyBsZWdlbmQgdGl0bGVcbiAgICAgICAgZG9tLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJjb2xvci1sZWdlbmRcIilcbiAgICAgICAgICAgIC50ZXh0KHRpdGxlKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIC0xMClcbiAgICAgICAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgXCJlbmRcIilcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBjZWxsLmgpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7Y29uZmlnLnh9LCAke2NvbmZpZy55fSlgKTtcblxuICAgICAgICAvLyB0aGUgY29sb3IgbGVnZW5kXG4gICAgICAgIGcuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIChkLCBpKSA9PiBjZWxsLncqaSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCA1KVxuICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBjZWxsLncpXG4gICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBjZWxsLmgpXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIHNjYWxlKTtcblxuICAgICAgICBnLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJjb2xvci1sZWdlbmRcIilcbiAgICAgICAgICAgIC50ZXh0KChkKSA9PiB1c2VMb2c/KE1hdGgucG93KGJhc2UsIGQpKS50b1ByZWNpc2lvbigyKTpkLnRvUHJlY2lzaW9uKDIpKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIChkLCBpKSA9PiBjZWxsLncgKiBpKVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgICAvLyBsZWdlbmQgdGl0bGVcbiAgICAgICAgZG9tLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJjb2xvci1sZWdlbmRcIilcbiAgICAgICAgICAgIC50ZXh0KHRpdGxlKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIDUpXG4gICAgICAgICAgICAuYXR0cihcInRleHQtYW5jaG9yXCIsIFwic3RhcnRcIilcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAwKVxuICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke2NvbmZpZy54fSwgJHtjb25maWcueSArIGNlbGwuaCAqIGRhdGEubGVuZ3RofSlyb3RhdGUoOTApYCk7XG5cbiAgICAgICAgZy5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgMClcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAoZCwgaSkgPT4gY2VsbC5oKmkpXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIGNlbGwudylcbiAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGNlbGwuaClcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgc2NhbGUpO1xuXG4gICAgICAgIGcuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImNvbG9yLWxlZ2VuZFwiKVxuICAgICAgICAgICAgLnRleHQoKGQpID0+IHVzZUxvZz8oTWF0aC5wb3coYmFzZSwgZCktMSkudG9QcmVjaXNpb24oMik6ZC50b1ByZWNpc2lvbigyKSlcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCAxNSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAoZCwgaSkgPT4gY2VsbC5oICogaSArIChjZWxsLmgvMikpO1xuICAgIH1cblxuXG5cbn0iLCJpbXBvcnQge2xpbmVhcmlzaH0gZnJvbSBcIi4vbGluZWFyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNlcXVlbnRpYWwoaW50ZXJwb2xhdG9yKSB7XG4gIHZhciB4MCA9IDAsXG4gICAgICB4MSA9IDEsXG4gICAgICBrMTAgPSAxLFxuICAgICAgY2xhbXAgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgdmFyIHQgPSAoeCAtIHgwKSAqIGsxMDtcbiAgICByZXR1cm4gaW50ZXJwb2xhdG9yKGNsYW1wID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdCkpIDogdCk7XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeDAgPSArX1swXSwgeDEgPSArX1sxXSwgazEwID0geDAgPT09IHgxID8gMCA6IDEgLyAoeDEgLSB4MCksIHNjYWxlKSA6IFt4MCwgeDFdO1xuICB9O1xuXG4gIHNjYWxlLmNsYW1wID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsYW1wID0gISFfLCBzY2FsZSkgOiBjbGFtcDtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0b3IgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaW50ZXJwb2xhdG9yID0gXywgc2NhbGUpIDogaW50ZXJwb2xhdG9yO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gc2VxdWVudGlhbChpbnRlcnBvbGF0b3IpLmRvbWFpbihbeDAsIHgxXSkuY2xhbXAoY2xhbXApO1xuICB9O1xuXG4gIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuLyoqXG4gKiBDcmVhdGUgYSB0b29sYmFyXG4gKiBUaGlzIGNsYXNzIHVzZXMgYSBsb3Qgb2YgalF1ZXJ5IGZvciBkb20gZWxlbWVudCBtYW5pcHVsYXRpb25cbiAqL1xuXG5pbXBvcnQge3NlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtwYXJzZUNzc1N0eWxlc30gZnJvbSBcIi4vdXRpbHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9vbGJhciB7XG4gICAgY29uc3RydWN0b3IoZG9tSWQsIHRvb2x0aXA9dW5kZWZpbmVkLCB2ZXJ0aWNhbD1mYWxzZSl7XG4gICAgICAgICQoYCMke2RvbUlkfWApLnNob3coKTsgLy8gaWYgaGlkZGVuXG5cbiAgICAgICAgLy8gYWRkIGEgbmV3IGJhcmdyb3VwIGRpdiB0byBkb21JRCB3aXRoIGJvb3RzdHJhcCBidXR0b24gY2xhc3Nlc1xuICAgICAgICBjb25zdCBidG5DbGFzc2VzID0gdmVydGljYWw/J2J0bi1ncm91cC12ZXJ0aWNhbCBidG4tZ3JvdXAtc20nOiAnYnRuLWdyb3VwIGJ0bi1ncm91cC1zbSc7XG4gICAgICAgIHRoaXMuYmFyID0gJCgnPGRpdi8+JykuYWRkQ2xhc3MoYnRuQ2xhc3NlcykuYXBwZW5kVG8oYCMke2RvbUlkfWApO1xuICAgICAgICB0aGlzLmJ1dHRvbnMgPSB7fTtcbiAgICAgICAgdGhpcy50b29sdGlwID0gdG9vbHRpcDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBkb3dubG9hZCBidXR0b24gZm9yIFNWR1xuICAgICAqIEBwYXJhbSBpZCB7U3RyaW5nfSB0aGUgYnV0dG9uIGRvbSBJRFxuICAgICAqIEBwYXJhbSBzdmdJZCB7U3RyaW5nfSB0aGUgU1ZHIGRvbSBJRCB0byBncmFiIGFuZCBkb3dubG9hZFxuICAgICAqIEBwYXJhbSBvdXRmaWxlTmFtZSB7U3RyaW5nfSB0aGUgZG93bmxvYWQgZmlsZSBuYW1lXG4gICAgICogQHBhcmFtIGNsb25lSWQge1N0cmluZ30gdGhlIGNsb25lZCBTVkcgZG9tIElEXG4gICAgICogQHBhcmFtIGljb24ge1N0cmluZ30gYSBmb250YXdlc29tZSdzIGljb24gY2xhc3MgbmFtZVxuICAgICAqL1xuICAgIGNyZWF0ZURvd25sb2FkU3ZnQnV0dG9uKGlkLCBzdmdJZCwgb3V0ZmlsZU5hbWUsIGNsb25lSWQsIGljb249J2ZhLWRvd25sb2FkJyl7XG4gICAgICAgIGNvbnN0ICRidXR0b24gPSB0aGlzLmNyZWF0ZUJ1dHRvbihpZCwgaWNvbik7XG4gICAgICAgIHNlbGVjdChgIyR7aWR9YClcbiAgICAgICAgICAgIC5vbignY2xpY2snLCAoKT0+e1xuICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRTdmcoc3ZnSWQsIG91dGZpbGVOYW1lLCBjbG9uZUlkKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAub24oJ21vdXNlb3ZlcicsICgpPT57XG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwLnNob3coXCJEb3dubG9hZFwiKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAub24oJ21vdXNlb3V0JywgKCk9PntcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAuaGlkZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVzZXRCdXR0b24oaWQsIGNhbGxiYWNrLCBpY29uPSdmYS1leHBhbmQtYXJyb3dzLWFsdCcpe1xuICAgICAgICBjb25zdCAkYnV0dG9uID0gdGhpcy5jcmVhdGVCdXR0b24oaWQsIGljb24pO1xuICAgICAgICBzZWxlY3QoYCMke2lkfWApXG4gICAgICAgICAgICAub24oJ2NsaWNrJywgY2FsbGJhY2spXG4gICAgICAgICAgICAub24oJ21vdXNlb3ZlcicsICgpPT57XG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwLnNob3coXCJSZXNldCB0aGUgc2NhbGVzXCIpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5vbignbW91c2VvdXQnLCAoKT0+e1xuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcC5oaWRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjcmVhdGUgYSBidXR0b24gdG8gdGhlIHRvb2xiYXJcbiAgICAgKiBAcGFyYW0gaWQge1N0cmluZ30gdGhlIGJ1dHRvbidzIGlkXG4gICAgICogQHBhcmFtIGljb24ge1N0cmluZ30gYSBmb250YXdlc29tZSBpY29uIGNsYXNzXG4gICAgICogRGVwZW5kZW5jaWVzOiBCb290c3RyYXAsIGpRdWVyeSwgRm9udGF3ZXNvbWVcbiAgICAgKi9cbiAgICBjcmVhdGVCdXR0b24oaWQsIGljb249J2ZhLWRvd25sb2FkJyl7XG4gICAgICAgIGNvbnN0ICRidXR0b24gPSAkKCc8YS8+JykuYXR0cignaWQnLCBpZClcbiAgICAgICAgICAgIC5hZGRDbGFzcygnYnRuIGJ0bi1kZWZhdWx0JykuYXBwZW5kVG8odGhpcy5iYXIpO1xuICAgICAgICAkKCc8aS8+JykuYWRkQ2xhc3MoYGZhICR7aWNvbn1gKS5hcHBlbmRUbygkYnV0dG9uKTtcbiAgICAgICAgdGhpcy5idXR0b25zW2lkXSA9ICRidXR0b247XG4gICAgICAgIHJldHVybiAkYnV0dG9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGF0dGFjaCBhIHRvb2x0aXAgZG9tIHdpdGggdGhlIHRvb2xiYXJcbiAgICAgKiBAcGFyYW0gdG9vbHRpcCB7VG9vbHRpcH1cbiAgICAgKi9cbiAgICBhdHRhY2hUb29sdGlwKHRvb2x0aXApe1xuICAgICAgICB0aGlzLnRvb2x0aXAgPSB0b29sdGlwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERvd25sb2FkIFNWRyBvYmpcbiAgICAgKiBAcGFyYW0gc3ZnSWQge1N0cmluZ30gdGhlIFNWRyBkb20gSURcbiAgICAgKiBAcGFyYW0gZmlsZU5hbWUge1N0cmluZ30gdGhlIG91dHB1dCBmaWxlIG5hbWVcbiAgICAgKiBAcGFyYW0gY2xvbmVJZCB7U3RyaW5nfSB0aGUgdGVtcG9yYXJ5IGRvbSBJRCB0byBjb3B5IHRoZSBTVkcgdG9cbiAgICAgKiBEZXBlbmRlbmNpZXM6IEZpbGVTYXZlclxuICAgICAqL1xuICAgIGRvd25sb2FkU3ZnKHN2Z0lkLCBmaWxlTmFtZSwgY2xvbmVJZCl7XG4gICAgICAgIC8vIGxldCBzdmdPYmogPSAkKCQoJChgJHtcIiNcIiArc3ZnSWR9IHN2Z2ApKVswXSk7IC8vIGNvbXBsaWNhdGVkIGpRdWVyeSB0byBnZXQgdG8gdGhlIFNWRyBvYmplY3RcbiAgICAgICAgbGV0IHN2Z09iaiA9ICQoJCgkKGAke1wiI1wiICtzdmdJZH1gKSlbMF0pO1xuICAgICAgICBsZXQgJHN2Z0NvcHkgPSBzdmdPYmouY2xvbmUoKVxuICAgICAgICAuYXR0cihcInZlcnNpb25cIiwgXCIxLjFcIilcbiAgICAgICAgLmF0dHIoXCJ4bWxuc1wiLCBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIpO1xuXG4gICAgICAgIC8vIHBhcnNlIGFuZCBhZGQgYWxsIHRoZSBDU1Mgc3R5bGluZyB1c2VkIGJ5IHRoZSBTVkdcbiAgICAgICAgbGV0IHN0eWxlcyA9IHBhcnNlQ3NzU3R5bGVzKHN2Z09iai5nZXQoKSk7XG4gICAgICAgICRzdmdDb3B5LnByZXBlbmQoc3R5bGVzKTtcblxuICAgICAgICAkKFwiI1wiICsgY2xvbmVJZCkuaHRtbCgnJykuaGlkZSgpOyAvLyBtYWtlIHN1cmUgdGhlIGNvcHlJRCBpcyBpbnZpc2libGVcbiAgICAgICAgbGV0IHN2Z0h0bWwgPSAkKGAjJHtjbG9uZUlkfWApLmFwcGVuZCgkc3ZnQ29weSkuaHRtbCgpO1xuXG4gICAgICAgIGxldCBzdmdCbG9iID0gbmV3IEJsb2IoW3N2Z0h0bWxdLCB7dHlwZTogXCJpbWFnZS9zdmcreG1sXCJ9KTtcbiAgICAgICAgc2F2ZUFzKHN2Z0Jsb2IsIGZpbGVOYW1lKTsgLy8gdGhpcyBpcyBhIEZpbGVTYXZlciBmdW5jdGlvbi4uLi5cblxuICAgICAgICAvLyBjbGVhciB0aGUgdGVtcCBkb3dubG9hZCBkaXZcbiAgICAgICAgJChgIyR7Y2xvbmVJZH1gKS5odG1sKCcnKS5oaWRlKCk7XG4gICAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IMKpIDIwMTUgLSAyMDE4IFRoZSBCcm9hZCBJbnN0aXR1dGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSAoaHR0cHM6Ly9naXRodWIuY29tL2Jyb2FkaW5zdGl0dXRlL2d0ZXgtdml6L2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQpXG4gKi9cbmltcG9ydCB7c2VsZWN0LCBldmVudH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb29sdGlwIHtcbiAgICBjb25zdHJ1Y3RvcihpZCwgdmVyYm9zZT1mYWxzZSwgb2Zmc2V0WD0zMCwgb2Zmc2V0WT0tNDAsIGR1cmF0aW9uPTEwMCl7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgdGhpcy52ZXJib3NlID0gdmVyYm9zZTtcbiAgICAgICAgdGhpcy5vZmZzZXRYID0gb2Zmc2V0WDtcbiAgICAgICAgdGhpcy5vZmZzZXRZID0gb2Zmc2V0WTtcbiAgICAgICAgdGhpcy5kdXJhdGlvbiA9IGR1cmF0aW9uO1xuICAgIH1cblxuICAgIHNob3coaW5mbykge1xuICAgICAgICBpZih0aGlzLnZlcmJvc2UpIGNvbnNvbGUubG9nKGluZm8pO1xuICAgICAgICB0aGlzLmVkaXQoaW5mbyk7XG4gICAgICAgIHRoaXMubW92ZSgpO1xuICAgICAgICBzZWxlY3QoXCIjXCIgKyB0aGlzLmlkKVxuICAgICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBcImlubGluZVwiKVxuICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLmR1cmF0aW9uKHRoaXMuZHVyYXRpb24pXG4gICAgICAgICAgICAuc3R5bGUoXCJvcGFjaXR5XCIsIDEuMClcblxuICAgIH1cblxuICAgIGhpZGUoKSB7XG4gICAgICAgIHNlbGVjdChcIiNcIiArIHRoaXMuaWQpXG4gICAgICAgICAgICAudHJhbnNpdGlvbigpXG4gICAgICAgICAgICAuZHVyYXRpb24odGhpcy5kdXJhdGlvbilcbiAgICAgICAgICAgIC5zdHlsZShcIm9wYWNpdHlcIiwgMC4wKTtcbiAgICAgICAgdGhpcy5lZGl0KFwiXCIpO1xuICAgIH1cblxuICAgIG1vdmUoeCA9IGV2ZW50LnBhZ2VYLCB5ID0gZXZlbnQucGFnZVkpIHtcbiAgICAgICAgaWYgKHRoaXMudmVyYm9zZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coeCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh5KTtcbiAgICAgICAgfVxuICAgICAgICB4ID0geCArIHRoaXMub2Zmc2V0WDsgLy8gVE9ETzogZ2V0IHJpZCBvZiB0aGUgaGFyZC1jb2RlZCBhZGp1c3RtZW50XG4gICAgICAgIHkgPSAoeSArIHRoaXMub2Zmc2V0WSk8MD8xMDp5K3RoaXMub2Zmc2V0WTtcbiAgICAgICAgY29uc3QgdCA9IHNlbGVjdCgnIycrdGhpcy5pZClcbiAgICAgICAgICAgIC5zdHlsZShcImxlZnRcIiwgYCR7eH1weGApXG4gICAgICAgICAgICAuc3R5bGUoXCJ0b3BcIiwgYCR7eX1weGApXG4gICAgfVxuXG4gICAgZWRpdChpbmZvKSB7XG4gICAgICAgIHNlbGVjdChcIiNcIiArIHRoaXMuaWQpXG4gICAgICAgICAgICAuaHRtbChpbmZvKVxuICAgIH1cbn1cblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuaW1wb3J0IHtzZWxlY3QsIHNlbGVjdEFsbH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtzY2FsZUJhbmR9IGZyb20gXCJkMy1zY2FsZVwiO1xuaW1wb3J0IHtuZXN0fSBmcm9tIFwiZDMtY29sbGVjdGlvblwiO1xuaW1wb3J0IHt0cmFuc2l0aW9ufSBmcm9tIFwiZDMtdHJhbnNpdGlvblwiO1xuXG5pbXBvcnQge3NldENvbG9yU2NhbGUsIGRyYXdDb2xvckxlZ2VuZH0gZnJvbSBcIi4vY29sb3JzXCI7XG5pbXBvcnQgVG9vbGJhciBmcm9tIFwiLi9Ub29sYmFyXCI7XG5pbXBvcnQgVG9vbHRpcCBmcm9tIFwiLi9Ub29sdGlwXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhlYXRtYXAge1xuICAgIC8qKlxuICAgICAqIGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIGRhdGEge0xpc3R9LCBhIGxpc3Qgb2Ygb2JqZWN0cyB3aXRoIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczogeDogdGhlIHggbGFiZWwsIHk6IHRoZSB5IGxhYmVsXG4gICAgICAgIHZhbHVlOiB0aGUgcmVuZGVyZWQgbnVtZXJpY2FsIHZhbHVlICh0cmFuc2Zvcm1lZClcbiAgICAgICAgZGlzcGxheVZhbHVlOiBkaXNwbGF5IG51bWVyaWNhbCB2YWx1ZVxuICAgICAqIEBwYXJhbSB1c2VMb2cge0Jvb2xlYW59IHBlcmZvcm1zIGxvZyB0cmFuc2Zvcm1hdGlvblxuICAgICAqIEBwYXJhbSBjb2xvclNjaGVtZSB7U3RyaW5nfTogcmVjb2duaXplZCB0ZXJtcyBpbiBDb2xvcnM6Z2V0Q29sb3JJbnRlcnBvbGF0b3JcbiAgICAgKiBAcGFyYW0gciB7SW50ZWdlcn06IGNlbGwgY29ybmVyIHJhZGl1c1xuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGRhdGEsIHVzZUxvZz10cnVlLCBsb2dCYXNlPTEwLCBjb2xvclNjaGVtZT1cIllsR25CdVwiLCByPTIsIHRvb2x0aXBJZD1cImhlYXRtYXBUb29sdGlwXCIpe1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLnVzZUxvZyA9IHVzZUxvZztcbiAgICAgICAgdGhpcy5sb2dCYXNlID0gbG9nQmFzZTtcbiAgICAgICAgdGhpcy5udWxsQ29sb3IgPSBcIiNlNmU2ZTZcIjtcbiAgICAgICAgdGhpcy5jb2xvclNjYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnhMaXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnlMaXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnhTY2FsZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy55U2NhbGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuciA9IHI7XG4gICAgICAgIHRoaXMuY29sb3JTY2hlbWUgPSBjb2xvclNjaGVtZTtcblxuICAgICAgICAvLyBwZXJpcGhlcmFsIGZlYXR1cmVzXG4gICAgICAgIC8vLyBUb29sdGlwXG4gICAgICAgIC8vLyBjcmVhdGUgdGhlIHRvb2x0aXAgRElWXG4gICAgICAgIGlmICgkKGAjJHt0b29sdGlwSWR9YCkubGVuZ3RoID09IDApICQoJzxkaXYvPicpLmF0dHIoJ2lkJywgdG9vbHRpcElkKS5hcHBlbmRUbygkKCdib2R5JykpO1xuICAgICAgICB0aGlzLnRvb2x0aXAgPSBuZXcgVG9vbHRpcCh0b29sdGlwSWQpO1xuICAgICAgICBzZWxlY3QoYCMke3Rvb2x0aXBJZH1gKS5jbGFzc2VkKCdoZWF0bWFwLXRvb2x0aXAnLCB0cnVlKTtcblxuICAgICAgICB0aGlzLnRvb2xiYXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIHRoZSB0b29sYmFyIHBhbmVsXG4gICAgICogQHBhcmFtIGRvbUlkIHtTdHJpbmd9IHRoZSB0b29sYmFyJ3MgZG9tIElEXG4gICAgICogQHBhcmFtIHRvb2x0aXAge1Rvb2x0aXB9XG4gICAgICogQHJldHVybnMge1Rvb2xiYXJ9XG4gICAgICovXG5cbiAgICBjcmVhdGVUb29sYmFyKGRvbUlkLCB0b29sdGlwKXtcbiAgICAgICAgdGhpcy50b29sYmFyID0gbmV3IFRvb2xiYXIoZG9tSWQsIHRvb2x0aXApO1xuICAgICAgICByZXR1cm4gdGhpcy50b29sYmFyO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogZHJhdyBjb2xvciBsZWdlbmQgZm9yIHRoZSBoZWF0IG1hcFxuICAgICAqIEBwYXJhbSBkb20ge1NlbGVjdGlvbn0gYSBkMyBzZWxlY3Rpb24gb2JqZWN0XG4gICAgICogQHBhcmFtIGxlZ2VuZENvbmZpZyB7T2JqZWN0fSB3aXRoIGF0dHI6IHgsIHlcbiAgICAgKi9cblxuICAgIGRyYXdDb2xvckxlZ2VuZChkb20sIGxlZ2VuZENvbmZpZz17eDowLCB5OjB9LCB0aWNrcz01KXtcbiAgICAgICAgZHJhd0NvbG9yTGVnZW5kKHRoaXMuZGF0YVswXS51bml0fHxcIlZhbHVlXCIsIGRvbSwgdGhpcy5jb2xvclNjYWxlLCBsZWdlbmRDb25maWcsIHRoaXMudXNlTG9nLCB0aWNrcywgdGhpcy5sb2dCYXNlKTtcbiAgICB9XG5cbiAgICAgLyoqXG4gICAgICogcmVkcmF3cyB0aGUgaGVhdG1hcDogd2hlbiB0aGUgeGxpc3QgYW5kIHlsaXN0IGFyZSBjaGFuZ2VkLCByZWRyYXcgdGhlIGhlYXRtYXBcbiAgICAgKiBAcGFyYW0gZG9tIHtTZWxlY3Rpb259IGEgZDMgc2VsZWN0aW9uIG9iamVjdFxuICAgICAqIEBwYXJhbSB4TGlzdCB7TGlzdH0gYSBsaXN0IG9mIHggbGFiZWxzXG4gICAgICogQHBhcmFtIHlMaXN0IHtMaXN0fSBhIGxpc3Qgb2YgeSBsYWJlbHNcbiAgICAgKiBAcGFyYW0gZGltZW5zaW9ucyB7RGljdGlvbmFyeX0ge3c6SW50ZWdlciwgaDppbnRlZ2VyfSB3aXRoIHR3byBhdHRyaWJ1dGVzOiB3IGFuZCBoXG4gICAgICogQHBhcmFtIGFuZ2xlIHtJbnRlZ2VyfSBmb3IgdGhlIHkgdGV4dCBsYWJlbHNcbiAgICAgKi9cbiAgICByZWRyYXcoZG9tLCB4TGlzdCwgeUxpc3QsIGRpbWVuc2lvbnM9e3c6MTAwMCwgaDoxMDAwfSwgYW5nbGU9MzApe1xuICAgICAgICB0aGlzLl9zZXRYTGlzdChkaW1lbnNpb25zLncsIHhMaXN0KTtcbiAgICAgICAgdGhpcy5fc2V0WUxpc3QoZGltZW5zaW9ucy5oLCB5TGlzdCk7XG4gICAgICAgIHRoaXMuZHJhdyhkb20sIGRpbWVuc2lvbnMsIGFuZ2xlKTtcbiAgICB9XG5cbiAgICBsb2codil7XG4gICAgICAgIGNvbnN0IGFkanVzdCA9IDE7XG4gICAgICAgIHJldHVybiB0aGlzLmxvZ0Jhc2UgPT0gMj8gTWF0aC5sb2cyKE51bWJlcih2K2FkanVzdCkpOk1hdGgubG9nMTAoTnVtYmVyKHYrYWRqdXN0KSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkcmF3cyB0aGUgaGVhdG1hcFxuICAgICAqIEBwYXJhbSBkb20ge1NlbGVjdGlvbn1cbiAgICAgKiBAcGFyYW0gZGltZW5zaW9ucyB7RGljdGlvbmFyeX0ge3c6SW50ZWdlciwgaDppbnRlZ2VyfSBvZiB0aGUgaGVhdG1hcFxuICAgICAqIEBwYXJhbSBhbmdsZSB7SW50ZWdlcn0gZm9yIHRoZSB5IHRleHQgbGFiZWxzXG4gICAgICogQHBhcmFtIHVzZU51bGxDb2xvciB7Qm9vbGVhbn0gd2hldGhlciB0byByZW5kZXIgbnVsbCB2YWx1ZXMgd2l0aCB0aGUgcHJlLWRlZmluZWQgbnVsbCBjb2xvclxuICAgICAqL1xuXG4gICAgZHJhdyhkb20sIGRpbWVuc2lvbnM9e3c6MTAwMCwgaDo2MDB9LCBhbmdsZT0zMCwgdXNlTnVsbENvbG9yPXRydWUsIGNvbHVtbkxhYmVsUG9zQWRqdXN0PW51bGwpe1xuXG4gICAgICAgIGlmICh0aGlzLnhMaXN0ID09PSB1bmRlZmluZWQpIHRoaXMuX3NldFhMaXN0KGRpbWVuc2lvbnMudyk7XG4gICAgICAgIGlmICh0aGlzLnlMaXN0ID09PSB1bmRlZmluZWQpIHRoaXMuX3NldFlMaXN0KGRpbWVuc2lvbnMuaCk7XG4gICAgICAgIGlmICh0aGlzLmNvbG9yU2NhbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGV0IHVzZUxvZyA9IHRoaXMudXNlTG9nO1xuICAgICAgICAgICAgbGV0IGRhdGEgPSB0aGlzLmRhdGEubWFwKChkKT0+dXNlTG9nP3RoaXMubG9nKGQudmFsdWUpOmQudmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5jb2xvclNjYWxlID0gc2V0Q29sb3JTY2FsZShkYXRhLCB0aGlzLmNvbG9yU2NoZW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRleHQgbGFiZWxzXG4gICAgICAgIC8vIGRhdGEgam9pblxuICAgICAgICBjb25zdCB4TGFiZWxzID0gZG9tLnNlbGVjdEFsbChcIi5leHAtbWFwLXhsYWJlbFwiKVxuICAgICAgICAgICAgLmRhdGEodGhpcy54TGlzdCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIG9sZCBlbGVtZW50c1xuICAgICAgICBjb25zdCBZID0gY29sdW1uTGFiZWxQb3NBZGp1c3Q9PW51bGw/dGhpcy55U2NhbGUucmFuZ2UoKVsxXSArICh0aGlzLnlTY2FsZS5iYW5kd2lkdGgoKSAqIDIpOnRoaXMueVNjYWxlLnJhbmdlKClbMV0rY29sdW1uTGFiZWxQb3NBZGp1c3Q7XG4gICAgICAgIGNvbnN0IGFkanVzdCA9IDU7XG4gICAgICAgIHhMYWJlbHMuYXR0cihcInRyYW5zZm9ybVwiLCAoZCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCB4ID0gdGhpcy54U2NhbGUoZCkgKyBhZGp1c3Q7XG4gICAgICAgICAgICAgICAgbGV0IHkgPSBZO1xuICAgICAgICAgICAgICAgIHJldHVybiBgdHJhbnNsYXRlKCR7eH0sICR7eX0pIHJvdGF0ZSgke2FuZ2xlfSlgO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyAuYXR0cihcImNsYXNzXCIsIChkLCBpKSA9PiBgZXhwLW1hcC14bGFiZWwgeCR7aX1gKTtcblxuXG4gICAgICAgIC8vIGVudGVycyBuZXcgZWxlbWVudHNcbiAgICAgICAgeExhYmVscy5lbnRlcigpLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgKGQsIGkpID0+IGBleHAtbWFwLXhsYWJlbCB4JHtpfWApXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgMClcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAwKVxuICAgICAgICAgICAgLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJzdGFydFwiKVxuICAgICAgICAgICAgLnN0eWxlKFwiY3Vyc29yXCIsIFwiZGVmYXVsdFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgKGQpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgeCA9IHRoaXMueFNjYWxlKGQpICsgYWRqdXN0O1xuICAgICAgICAgICAgICAgIGxldCB5ID0gWTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYHRyYW5zbGF0ZSgke3h9LCAke3l9KSByb3RhdGUoJHthbmdsZX0pYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAubWVyZ2UoeExhYmVscylcbiAgICAgICAgICAgIC50ZXh0KChkKSA9PiBkKTtcblxuICAgICAgICAvLyBleGl0IC0tIHJlbW92ZXMgb2xkIGVsZW1lbnRzIGFzIG5lZWRlZFxuICAgICAgICB4TGFiZWxzLmV4aXQoKS5yZW1vdmUoKTtcblxuICAgICAgICBjb25zdCB5TGFiZWxzID0gZG9tLnNlbGVjdEFsbChcIi5leHAtbWFwLXlsYWJlbFwiKVxuICAgICAgICAgICAgLmRhdGEodGhpcy55TGlzdClcbiAgICAgICAgICAgIC5lbnRlcigpLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC50ZXh0KChkKSA9PiBkKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIHRoaXMueFNjYWxlLnJhbmdlKClbMV0gKyA1KVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIChkKSA9PiB0aGlzLnlTY2FsZShkKSArIDEwKVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCAoZCwgaSkgPT4gYGV4cC1tYXAteWxhYmVsIHkke2l9YClcbiAgICAgICAgICAgIC5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwic3RhcnRcIilcbiAgICAgICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIilcbiAgICAgICAgICAgIC5vbignY2xpY2snLCAoZCkgPT4ge1xuICAgICAgICAgICAgICAgIGFsZXJ0KGAke2R9IGlzIGNsaWNrZWQuIFRvIGJlIGltcGxlbWVudGVkYClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAub24oJ21vdXNlb3ZlcicsIGZ1bmN0aW9uKGQpe1xuICAgICAgICAgICAgICAgIHNlbGVjdCh0aGlzKVxuICAgICAgICAgICAgICAgICAgICAuY2xhc3NlZCgnbm9ybWFsJywgZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5jbGFzc2VkKCdoaWdobGlnaHRlZCcsIHRydWUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5vbignbW91c2VvdXQnLCBmdW5jdGlvbihkKXtcbiAgICAgICAgICAgICAgICBzZWxlY3QodGhpcylcbiAgICAgICAgICAgICAgICAgICAgLmNsYXNzZWQoJ25vcm1hbCcsIHRydWUpXG4gICAgICAgICAgICAgICAgICAgIC5jbGFzc2VkKCdoaWdobGlnaHRlZCcsIGZhbHNlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHJlbmRlcnMgdGhlIGhlYXRtYXAgY2VsbHNcblxuICAgICAgICAvLyBkYXRhIGpvaW5cbiAgICAgICAgY29uc3QgY2VsbHMgPSBkb20uc2VsZWN0QWxsKFwiLmV4cC1tYXAtY2VsbFwiKVxuICAgICAgICAgICAgLmRhdGEodGhpcy5kYXRhLCAoZCkgPT4gZC52YWx1ZSk7XG5cbiAgICAgICAgLy8gdXBkYXRlIG9sZCBlbGVtZW50c1xuICAgICAgICBjZWxscy5hdHRyKFwieFwiLCAoZCkgPT4gdGhpcy54U2NhbGUoZC54KSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAoZCkgPT4gdGhpcy55U2NhbGUoZC55KSlcbiAgICAgICAgICAgIC5hdHRyKFwicm93XCIsIChkKSA9PiBgeCR7dGhpcy54TGlzdC5pbmRleE9mKGQueCl9YClcbiAgICAgICAgICAgIC5hdHRyKFwiY29sXCIsIChkKSA9PiBgeSR7dGhpcy55TGlzdC5pbmRleE9mKGQueSl9YCk7XG5cbiAgICAgICAgLy8gZW50ZXIgbmV3IGVsZW1lbnRzXG4gICAgICAgIGNvbnN0IG51bGxDb2xvciA9IFwiI0RERERERFwiO1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY2VsbHMuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgICAgICAuYXR0cihcInJvd1wiLCAoZCkgPT4gYHgke3RoaXMueExpc3QuaW5kZXhPZihkLngpfWApXG4gICAgICAgICAgICAuYXR0cihcImNvbFwiLCAoZCkgPT4gYHkke3RoaXMueUxpc3QuaW5kZXhPZihkLnkpfWApXG5cbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCAoZCkgPT4gdGhpcy54U2NhbGUoZC54KSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAoZCkgPT4gdGhpcy55U2NhbGUoZC55KSlcbiAgICAgICAgICAgIC5hdHRyKFwicnhcIiwgdGhpcy5yKVxuICAgICAgICAgICAgLmF0dHIoJ3J5JywgdGhpcy5yKVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCAoZCkgPT4gYGV4cC1tYXAtY2VsbGApXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMueFNjYWxlLmJhbmR3aWR0aCgpKVxuICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy55U2NhbGUuYmFuZHdpZHRoKCkpXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIChkKSA9PiBcIiNlZWVlZWVcIilcbiAgICAgICAgICAgIC5vbihcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbihkKXtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdCh0aGlzKTsgLy8gTm90ZTogXCJ0aGlzXCIgaGVyZSByZWZlcnMgdG8gdGhlIGRvbSBlbGVtZW50IG5vdCB0aGUgb2JqZWN0XG4gICAgICAgICAgICAgICAgc2VsZi5jZWxsTW91c2VvdmVyKGQsIGRvbSwgc2VsZWN0ZWQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5vbihcIm1vdXNlb3V0XCIsIGZ1bmN0aW9uKGQpe1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0KHRoaXMpOyAvLyBOb3RlOiBcInRoaXNcIiBoZXJlIHJlZmVycyB0byB0aGUgZG9tIGVsZW1lbnQgbm90IHRoZSBvYmplY3RcbiAgICAgICAgICAgICAgICBzZWxmLmNlbGxNb3VzZW91dCgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1lcmdlKGNlbGxzKVxuICAgICAgICAgICAgLy8gLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLy8gLmR1cmF0aW9uKDIwMDApXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIChkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVzZU51bGxDb2xvciYmZC52YWx1ZT09MD9udWxsQ29sb3I6dGhpcy51c2VMb2c/dGhpcy5jb2xvclNjYWxlKHRoaXMubG9nKGQudmFsdWUpKTp0aGlzLmNvbG9yU2NhbGUoZC52YWx1ZSlcbiAgICAgICAgICAgIH0pOyAvLyBUT0RPOiB3aGF0IGlmIG51bGwgdmFsdWUgaXNuJ3QgMD9cblxuICAgICAgICAvLyBleGl0IGFuZCByZW1vdmVcbiAgICAgICAgY2VsbHMuZXhpdCgpLnJlbW92ZSgpO1xuICAgIH1cblxuXG4gICAgY2VsbE1vdXNlb3V0KGQpe1xuICAgICAgICBzZWxlY3RBbGwoXCIqXCIpLmNsYXNzZWQoJ2hpZ2hsaWdodGVkJywgZmFsc2UpO1xuICAgICAgICB0aGlzLnRvb2x0aXAuaGlkZSgpO1xuICAgIH1cblxuICAgIGNlbGxNb3VzZW92ZXIgKGQsIGRvbSwgc2VsZWN0ZWQpIHtcbiAgICAgICAgY29uc3Qgcm93Q2xhc3MgPSBzZWxlY3RlZC5hdHRyKFwicm93XCIpO1xuICAgICAgICBjb25zdCBjb2xDbGFzcyA9IHNlbGVjdGVkLmF0dHIoXCJjb2xcIik7XG4gICAgICAgIGRvbS5zZWxlY3RBbGwoXCIuZXhwLW1hcC14bGFiZWxcIikuZmlsdGVyKGAuJHtyb3dDbGFzc31gKVxuICAgICAgICAgICAgLmNsYXNzZWQoJ2hpZ2hsaWdodGVkJywgdHJ1ZSk7XG4gICAgICAgIGRvbS5zZWxlY3RBbGwoXCIuZXhwLW1hcC15bGFiZWxcIikuZmlsdGVyKGAuJHtjb2xDbGFzc31gKVxuICAgICAgICAgICAgLmNsYXNzZWQoJ2hpZ2hsaWdodGVkJywgdHJ1ZSk7XG4gICAgICAgIHNlbGVjdGVkLmNsYXNzZWQoJ2hpZ2hsaWdodGVkJywgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlWYWx1ZSA9IGQuZGlzcGxheVZhbHVlID09PSB1bmRlZmluZWQ/cGFyc2VGbG9hdChkLnZhbHVlLnRvRXhwb25lbnRpYWwoKSkudG9QcmVjaXNpb24oNCk6ZC5kaXNwbGF5VmFsdWU7XG4gICAgICAgIHRoaXMudG9vbHRpcC5zaG93KGBDb2x1bW46ICR7ZC54fSA8YnIvPiBSb3c6ICR7ZC55fTxici8+IFZhbHVlOiAke2Rpc3BsYXlWYWx1ZX1gKTtcbiAgICB9XG5cbiAgICBfc2V0WExpc3Qod2lkdGgsIG5ld0xpc3QpIHtcbiAgICAgICAgaWYobmV3TGlzdCAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIHRoaXMueExpc3QgPSBuZXdMaXN0XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnhMaXN0ID0gbmVzdCgpXG4gICAgICAgICAgICAgICAgLmtleSgoZCkgPT4gZC54KVxuICAgICAgICAgICAgICAgIC5lbnRyaWVzKHRoaXMuZGF0YSlcbiAgICAgICAgICAgICAgICAubWFwKChkKSA9PiBkLmtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy54U2NhbGUgPSBzY2FsZUJhbmQoKVxuICAgICAgICAgICAgLmRvbWFpbih0aGlzLnhMaXN0KVxuICAgICAgICAgICAgLnJhbmdlKFswLCB3aWR0aF0pXG4gICAgICAgICAgICAucGFkZGluZyguMDUpOyAvLyBUT0RPOiBlbGltaW5hdGUgaGFyZC1jb2RlZCB2YWx1ZVxuICAgIH1cblxuICAgIF9zZXRZTGlzdChoZWlnaHQsIG5ld0xpc3QpIHtcbiAgICAgICAgaWYobmV3TGlzdCAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIHRoaXMueUxpc3QgPSBuZXdMaXN0XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgIHRoaXMueUxpc3QgPSBuZXN0KClcbiAgICAgICAgICAgIC5rZXkoKGQpID0+IGQueSlcbiAgICAgICAgICAgIC5lbnRyaWVzKHRoaXMuZGF0YSlcbiAgICAgICAgICAgIC5tYXAoKGQpID0+IGQua2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnlTY2FsZSA9IHNjYWxlQmFuZCgpXG4gICAgICAgICAgICAgICAgLmRvbWFpbih0aGlzLnlMaXN0KVxuICAgICAgICAgICAgICAgIC5yYW5nZShbMCwgaGVpZ2h0XSlcbiAgICAgICAgICAgICAgICAucGFkZGluZyguMDUpOyAvLyBUT0RPOiBlbGltaW5hdGUgaGFyZC1jb2RlZCB2YWx1ZVxuICAgIH1cblxuXG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuLyoqXG4gKiBUT0RPOiBjb2RlIHJldmlldyBvZiBob3cgdG8gcHJlc2V0IHBhcmFtZXRlciB2YWx1ZXNcbiAqIHJldmlldyBhbGwgdGhlIHBvc2l0aW9uIGNhbGN1bGF0aW9uc1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZW5kcm9IZWF0bWFwQ29uZmlnIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcm9vdFcge051bWJlcn0sIHRoaXMgd2lkdGggaW5jbHVkZXMgbWFyZ2luIGxlZnQgYW5kIHJpZ2h0LCByb3dUcmVlUGFuZWwgd2lkdGggYW5kIGhlYXRtYXAgd2lkdGguXG4gICAgICogQHBhcmFtIGxlZnRQYW5lbFcge0ludGVnZXJ9LCBzZXQgdG8gMCBpZiB0aGVyZSdzIG5vIGxlZnQgcGFuZWxcbiAgICAgKiBAcGFyYW0gdG9wUGFuZWxIIHtJbnRlZ2VyfSwgc2V0IHRvIDAgaWYgdGhlcmUncyBubyB0b3AgcGFuZWxcbiAgICAgKiBAcGFyYW0gbWFyZ2luIHtPYmplY3R9IHdpdGggYXR0cjogdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBzbWFsbGVyIHZhbHVlcyB0aGFuIHRoZSBkZWZhdWx0IGFyZSBub3QgcmVjb21tZW5kZWQgZm9yIHRoZSBoZWF0bWFwLCB0b3AgbWFyZ2luIHNob3VsZCBiZSBhdCBsZWFzdCA1MFxuICAgICAqIEBwYXJhbSBjZWxsSCB7SW50ZWdlcn1cbiAgICAgKiBAcGFyYW0gYWRqdXN0IHtJbnRlZ2VyfSwgYWRqdXN0ZWQgc3BhY2luZyBiZXR3ZWVuIHRoZSBoZWF0bWFwIGFuZCB0aGUgZGVuZHJvZ3JhbVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHJvb3RXPXdpbmRvdy5pbm5lcldpZHRoLCBsZWZ0UGFuZWxXPTEwMCwgdG9wUGFuZWxIPTEwMCwgbWFyZ2luPXt0b3A6NTAsIHJpZ2h0OjI1MCwgYm90dG9tOjE3MCwgbGVmdDoxMH0sIGNlbGxIPTEyLCBhZGp1c3Q9MTApIHtcbiAgICAgICAgdGhpcy5tYXJnaW4gPSBtYXJnaW47XG4gICAgICAgIHRoaXMucm9vdFcgPSByb290VztcblxuICAgICAgICB0aGlzLmxlZnRUcmVlUGFuZWwgPSB7IC8vIHRoZSByb3cgZGVuZHJvZ3JhbSBwYW5lbFxuICAgICAgICAgICAgeDogbWFyZ2luLmxlZnQsXG4gICAgICAgICAgICB5OiBtYXJnaW4udG9wICsgdG9wUGFuZWxILFxuICAgICAgICAgICAgaDogdW5kZWZpbmVkLCAvLyB1bmRlZmluZWQgaW5pdGlhbGx5LCBiZWNhdXNlIGl0J3MgZGF0YS1kZXBlbmRlbnRcbiAgICAgICAgICAgIHc6IGxlZnRQYW5lbFcgLSBhZGp1c3QsXG4gICAgICAgICAgICBpZDogXCJsZWZ0VHJlZVwiXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jZWxsID0ge1xuICAgICAgICAgICAgdzogdW5kZWZpbmVkLCAvLyB0byBiZSBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBkYXRhIGFuZCByb290V1xuICAgICAgICAgICAgaDogY2VsbEhcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnRvcFRyZWVQYW5lbCA9IHsgLy8gdGhlIGNvbHVtbiBkZW5kcm9ncmFtIHBhbmVsXG4gICAgICAgICAgICB4OiBtYXJnaW4ubGVmdCArIGxlZnRQYW5lbFcsXG4gICAgICAgICAgICB5OiBtYXJnaW4udG9wLFxuICAgICAgICAgICAgaDogdG9wUGFuZWxIIC0gYWRqdXN0LFxuICAgICAgICAgICAgdzogdGhpcy5yb290VyAtIChtYXJnaW4ubGVmdCArIGxlZnRQYW5lbFcgKyBtYXJnaW4ucmlnaHQpLCAvLyBoYXJkLWNvZGVkIHZhbHVlcz9cbiAgICAgICAgICAgIGlkOiBcInRvcFRyZWVcIlxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGVhdG1hcFBhbmVsID0ge1xuICAgICAgICAgICAgeDogbWFyZ2luLmxlZnQgKyBsZWZ0UGFuZWxXLFxuICAgICAgICAgICAgeTogbWFyZ2luLnRvcCArIHRvcFBhbmVsSCxcbiAgICAgICAgICAgIGg6IHRoaXMubGVmdFRyZWVQYW5lbC5oLFxuICAgICAgICAgICAgdzogdGhpcy50b3BUcmVlUGFuZWwudyxcbiAgICAgICAgICAgIGlkOiBcImhlYXRtYXBcIlxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMubGVnZW5kUGFuZWwgPSB7IC8vIHRoZSBjb2xvciBsZWdlbmQgcGFuZWxcbiAgICAgICAgICAgIHg6IG1hcmdpbi5sZWZ0ICsgbGVmdFBhbmVsVyxcbiAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICBoOiBtYXJnaW4udG9wLzIsXG4gICAgICAgICAgICB3OiB0aGlzLnRvcFRyZWVQYW5lbC53LFxuICAgICAgICAgICAgY2VsbDoge3c6IDYwfSxcbiAgICAgICAgICAgIGlkOiBcImxlZ2VuZFwiXG4gICAgICAgIH07XG5cblxuICAgIH1cblxuICAgIGdldCgpe1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWFyZ2luOiB0aGlzLm1hcmdpbixcbiAgICAgICAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgICAgICAgIHc6IHRoaXMucm9vdFcsXG4gICAgICAgICAgICBoOiB0aGlzLm1hcmdpbi50b3AgKyB0aGlzLnRvcFRyZWVQYW5lbC5oICsgdGhpcy5sZWdlbmRQYW5lbC5oICsgdGhpcy5tYXJnaW4uYm90dG9tLCAvLyBpbml0aWFsIGhlaWdodFxuICAgICAgICAgICAgcGFuZWxzOiB7XG4gICAgICAgICAgICAgICAgdG9wOiB0aGlzLnRvcFRyZWVQYW5lbCxcbiAgICAgICAgICAgICAgICBsZWZ0OiB0aGlzLmxlZnRUcmVlUGFuZWwsXG4gICAgICAgICAgICAgICAgbWFpbjogdGhpcy5oZWF0bWFwUGFuZWwsXG4gICAgICAgICAgICAgICAgbGVnZW5kOiB0aGlzLmxlZ2VuZFBhbmVsXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuXG4iLCJmdW5jdGlvbiBjb3VudChub2RlKSB7XG4gIHZhciBzdW0gPSAwLFxuICAgICAgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLFxuICAgICAgaSA9IGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aDtcbiAgaWYgKCFpKSBzdW0gPSAxO1xuICBlbHNlIHdoaWxlICgtLWkgPj0gMCkgc3VtICs9IGNoaWxkcmVuW2ldLnZhbHVlO1xuICBub2RlLnZhbHVlID0gc3VtO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaEFmdGVyKGNvdW50KTtcbn1cbiIsImltcG9ydCBub2RlX2NvdW50IGZyb20gXCIuL2NvdW50XCI7XG5pbXBvcnQgbm9kZV9lYWNoIGZyb20gXCIuL2VhY2hcIjtcbmltcG9ydCBub2RlX2VhY2hCZWZvcmUgZnJvbSBcIi4vZWFjaEJlZm9yZVwiO1xuaW1wb3J0IG5vZGVfZWFjaEFmdGVyIGZyb20gXCIuL2VhY2hBZnRlclwiO1xuaW1wb3J0IG5vZGVfc3VtIGZyb20gXCIuL3N1bVwiO1xuaW1wb3J0IG5vZGVfc29ydCBmcm9tIFwiLi9zb3J0XCI7XG5pbXBvcnQgbm9kZV9wYXRoIGZyb20gXCIuL3BhdGhcIjtcbmltcG9ydCBub2RlX2FuY2VzdG9ycyBmcm9tIFwiLi9hbmNlc3RvcnNcIjtcbmltcG9ydCBub2RlX2Rlc2NlbmRhbnRzIGZyb20gXCIuL2Rlc2NlbmRhbnRzXCI7XG5pbXBvcnQgbm9kZV9sZWF2ZXMgZnJvbSBcIi4vbGVhdmVzXCI7XG5pbXBvcnQgbm9kZV9saW5rcyBmcm9tIFwiLi9saW5rc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoaWVyYXJjaHkoZGF0YSwgY2hpbGRyZW4pIHtcbiAgdmFyIHJvb3QgPSBuZXcgTm9kZShkYXRhKSxcbiAgICAgIHZhbHVlZCA9ICtkYXRhLnZhbHVlICYmIChyb290LnZhbHVlID0gZGF0YS52YWx1ZSksXG4gICAgICBub2RlLFxuICAgICAgbm9kZXMgPSBbcm9vdF0sXG4gICAgICBjaGlsZCxcbiAgICAgIGNoaWxkcyxcbiAgICAgIGksXG4gICAgICBuO1xuXG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSBjaGlsZHJlbiA9IGRlZmF1bHRDaGlsZHJlbjtcblxuICB3aGlsZSAobm9kZSA9IG5vZGVzLnBvcCgpKSB7XG4gICAgaWYgKHZhbHVlZCkgbm9kZS52YWx1ZSA9ICtub2RlLmRhdGEudmFsdWU7XG4gICAgaWYgKChjaGlsZHMgPSBjaGlsZHJlbihub2RlLmRhdGEpKSAmJiAobiA9IGNoaWxkcy5sZW5ndGgpKSB7XG4gICAgICBub2RlLmNoaWxkcmVuID0gbmV3IEFycmF5KG4pO1xuICAgICAgZm9yIChpID0gbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIG5vZGVzLnB1c2goY2hpbGQgPSBub2RlLmNoaWxkcmVuW2ldID0gbmV3IE5vZGUoY2hpbGRzW2ldKSk7XG4gICAgICAgIGNoaWxkLnBhcmVudCA9IG5vZGU7XG4gICAgICAgIGNoaWxkLmRlcHRoID0gbm9kZS5kZXB0aCArIDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJvb3QuZWFjaEJlZm9yZShjb21wdXRlSGVpZ2h0KTtcbn1cblxuZnVuY3Rpb24gbm9kZV9jb3B5KCkge1xuICByZXR1cm4gaGllcmFyY2h5KHRoaXMpLmVhY2hCZWZvcmUoY29weURhdGEpO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0Q2hpbGRyZW4oZCkge1xuICByZXR1cm4gZC5jaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gY29weURhdGEobm9kZSkge1xuICBub2RlLmRhdGEgPSBub2RlLmRhdGEuZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVIZWlnaHQobm9kZSkge1xuICB2YXIgaGVpZ2h0ID0gMDtcbiAgZG8gbm9kZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIHdoaWxlICgobm9kZSA9IG5vZGUucGFyZW50KSAmJiAobm9kZS5oZWlnaHQgPCArK2hlaWdodCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTm9kZShkYXRhKSB7XG4gIHRoaXMuZGF0YSA9IGRhdGE7XG4gIHRoaXMuZGVwdGggPVxuICB0aGlzLmhlaWdodCA9IDA7XG4gIHRoaXMucGFyZW50ID0gbnVsbDtcbn1cblxuTm9kZS5wcm90b3R5cGUgPSBoaWVyYXJjaHkucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogTm9kZSxcbiAgY291bnQ6IG5vZGVfY291bnQsXG4gIGVhY2g6IG5vZGVfZWFjaCxcbiAgZWFjaEFmdGVyOiBub2RlX2VhY2hBZnRlcixcbiAgZWFjaEJlZm9yZTogbm9kZV9lYWNoQmVmb3JlLFxuICBzdW06IG5vZGVfc3VtLFxuICBzb3J0OiBub2RlX3NvcnQsXG4gIHBhdGg6IG5vZGVfcGF0aCxcbiAgYW5jZXN0b3JzOiBub2RlX2FuY2VzdG9ycyxcbiAgZGVzY2VuZGFudHM6IG5vZGVfZGVzY2VuZGFudHMsXG4gIGxlYXZlczogbm9kZV9sZWF2ZXMsXG4gIGxpbmtzOiBub2RlX2xpbmtzLFxuICBjb3B5OiBub2RlX2NvcHlcbn07XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaykge1xuICB2YXIgbm9kZSA9IHRoaXMsIGN1cnJlbnQsIG5leHQgPSBbbm9kZV0sIGNoaWxkcmVuLCBpLCBuO1xuICBkbyB7XG4gICAgY3VycmVudCA9IG5leHQucmV2ZXJzZSgpLCBuZXh0ID0gW107XG4gICAgd2hpbGUgKG5vZGUgPSBjdXJyZW50LnBvcCgpKSB7XG4gICAgICBjYWxsYmFjayhub2RlKSwgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuICAgICAgaWYgKGNoaWxkcmVuKSBmb3IgKGkgPSAwLCBuID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIG5leHQucHVzaChjaGlsZHJlbltpXSk7XG4gICAgICB9XG4gICAgfVxuICB9IHdoaWxlIChuZXh0Lmxlbmd0aCk7XG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyIG5vZGUgPSB0aGlzLCBub2RlcyA9IFtub2RlXSwgbmV4dCA9IFtdLCBjaGlsZHJlbiwgaSwgbjtcbiAgd2hpbGUgKG5vZGUgPSBub2Rlcy5wb3AoKSkge1xuICAgIG5leHQucHVzaChub2RlKSwgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuICAgIGlmIChjaGlsZHJlbikgZm9yIChpID0gMCwgbiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgbm9kZXMucHVzaChjaGlsZHJlbltpXSk7XG4gICAgfVxuICB9XG4gIHdoaWxlIChub2RlID0gbmV4dC5wb3AoKSkge1xuICAgIGNhbGxiYWNrKG5vZGUpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyIG5vZGUgPSB0aGlzLCBub2RlcyA9IFtub2RlXSwgY2hpbGRyZW4sIGk7XG4gIHdoaWxlIChub2RlID0gbm9kZXMucG9wKCkpIHtcbiAgICBjYWxsYmFjayhub2RlKSwgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuICAgIGlmIChjaGlsZHJlbikgZm9yIChpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIG5vZGVzLnB1c2goY2hpbGRyZW5baV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbihub2RlKSB7XG4gICAgdmFyIHN1bSA9ICt2YWx1ZShub2RlLmRhdGEpIHx8IDAsXG4gICAgICAgIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbixcbiAgICAgICAgaSA9IGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aDtcbiAgICB3aGlsZSAoLS1pID49IDApIHN1bSArPSBjaGlsZHJlbltpXS52YWx1ZTtcbiAgICBub2RlLnZhbHVlID0gc3VtO1xuICB9KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBhcmUpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaEJlZm9yZShmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIG5vZGUuY2hpbGRyZW4uc29ydChjb21wYXJlKTtcbiAgICB9XG4gIH0pO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZW5kKSB7XG4gIHZhciBzdGFydCA9IHRoaXMsXG4gICAgICBhbmNlc3RvciA9IGxlYXN0Q29tbW9uQW5jZXN0b3Ioc3RhcnQsIGVuZCksXG4gICAgICBub2RlcyA9IFtzdGFydF07XG4gIHdoaWxlIChzdGFydCAhPT0gYW5jZXN0b3IpIHtcbiAgICBzdGFydCA9IHN0YXJ0LnBhcmVudDtcbiAgICBub2Rlcy5wdXNoKHN0YXJ0KTtcbiAgfVxuICB2YXIgayA9IG5vZGVzLmxlbmd0aDtcbiAgd2hpbGUgKGVuZCAhPT0gYW5jZXN0b3IpIHtcbiAgICBub2Rlcy5zcGxpY2UoaywgMCwgZW5kKTtcbiAgICBlbmQgPSBlbmQucGFyZW50O1xuICB9XG4gIHJldHVybiBub2Rlcztcbn1cblxuZnVuY3Rpb24gbGVhc3RDb21tb25BbmNlc3RvcihhLCBiKSB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gYTtcbiAgdmFyIGFOb2RlcyA9IGEuYW5jZXN0b3JzKCksXG4gICAgICBiTm9kZXMgPSBiLmFuY2VzdG9ycygpLFxuICAgICAgYyA9IG51bGw7XG4gIGEgPSBhTm9kZXMucG9wKCk7XG4gIGIgPSBiTm9kZXMucG9wKCk7XG4gIHdoaWxlIChhID09PSBiKSB7XG4gICAgYyA9IGE7XG4gICAgYSA9IGFOb2Rlcy5wb3AoKTtcbiAgICBiID0gYk5vZGVzLnBvcCgpO1xuICB9XG4gIHJldHVybiBjO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBub2RlID0gdGhpcywgbm9kZXMgPSBbbm9kZV07XG4gIHdoaWxlIChub2RlID0gbm9kZS5wYXJlbnQpIHtcbiAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICB9XG4gIHJldHVybiBub2Rlcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbm9kZXMgPSBbXTtcbiAgdGhpcy5lYWNoKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICB9KTtcbiAgcmV0dXJuIG5vZGVzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBsZWF2ZXMgPSBbXTtcbiAgdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGxlYXZlcy5wdXNoKG5vZGUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsZWF2ZXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHJvb3QgPSB0aGlzLCBsaW5rcyA9IFtdO1xuICByb290LmVhY2goZnVuY3Rpb24obm9kZSkge1xuICAgIGlmIChub2RlICE9PSByb290KSB7IC8vIERvbuKAmXQgaW5jbHVkZSB0aGUgcm9vdOKAmXMgcGFyZW50LCBpZiBhbnkuXG4gICAgICBsaW5rcy5wdXNoKHtzb3VyY2U6IG5vZGUucGFyZW50LCB0YXJnZXQ6IG5vZGV9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGlua3M7XG59XG4iLCJleHBvcnQgdmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geDtcbn1cbiIsImltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5XCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHlcIjtcblxudmFyIHRvcCA9IDEsXG4gICAgcmlnaHQgPSAyLFxuICAgIGJvdHRvbSA9IDMsXG4gICAgbGVmdCA9IDQsXG4gICAgZXBzaWxvbiA9IDFlLTY7XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZVgoeCkge1xuICByZXR1cm4gXCJ0cmFuc2xhdGUoXCIgKyAoeCArIDAuNSkgKyBcIiwwKVwiO1xufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVZKHkpIHtcbiAgcmV0dXJuIFwidHJhbnNsYXRlKDAsXCIgKyAoeSArIDAuNSkgKyBcIilcIjtcbn1cblxuZnVuY3Rpb24gbnVtYmVyKHNjYWxlKSB7XG4gIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgcmV0dXJuICtzY2FsZShkKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2VudGVyKHNjYWxlKSB7XG4gIHZhciBvZmZzZXQgPSBNYXRoLm1heCgwLCBzY2FsZS5iYW5kd2lkdGgoKSAtIDEpIC8gMjsgLy8gQWRqdXN0IGZvciAwLjVweCBvZmZzZXQuXG4gIGlmIChzY2FsZS5yb3VuZCgpKSBvZmZzZXQgPSBNYXRoLnJvdW5kKG9mZnNldCk7XG4gIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgcmV0dXJuICtzY2FsZShkKSArIG9mZnNldDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZW50ZXJpbmcoKSB7XG4gIHJldHVybiAhdGhpcy5fX2F4aXM7XG59XG5cbmZ1bmN0aW9uIGF4aXMob3JpZW50LCBzY2FsZSkge1xuICB2YXIgdGlja0FyZ3VtZW50cyA9IFtdLFxuICAgICAgdGlja1ZhbHVlcyA9IG51bGwsXG4gICAgICB0aWNrRm9ybWF0ID0gbnVsbCxcbiAgICAgIHRpY2tTaXplSW5uZXIgPSA2LFxuICAgICAgdGlja1NpemVPdXRlciA9IDYsXG4gICAgICB0aWNrUGFkZGluZyA9IDMsXG4gICAgICBrID0gb3JpZW50ID09PSB0b3AgfHwgb3JpZW50ID09PSBsZWZ0ID8gLTEgOiAxLFxuICAgICAgeCA9IG9yaWVudCA9PT0gbGVmdCB8fCBvcmllbnQgPT09IHJpZ2h0ID8gXCJ4XCIgOiBcInlcIixcbiAgICAgIHRyYW5zZm9ybSA9IG9yaWVudCA9PT0gdG9wIHx8IG9yaWVudCA9PT0gYm90dG9tID8gdHJhbnNsYXRlWCA6IHRyYW5zbGF0ZVk7XG5cbiAgZnVuY3Rpb24gYXhpcyhjb250ZXh0KSB7XG4gICAgdmFyIHZhbHVlcyA9IHRpY2tWYWx1ZXMgPT0gbnVsbCA/IChzY2FsZS50aWNrcyA/IHNjYWxlLnRpY2tzLmFwcGx5KHNjYWxlLCB0aWNrQXJndW1lbnRzKSA6IHNjYWxlLmRvbWFpbigpKSA6IHRpY2tWYWx1ZXMsXG4gICAgICAgIGZvcm1hdCA9IHRpY2tGb3JtYXQgPT0gbnVsbCA/IChzY2FsZS50aWNrRm9ybWF0ID8gc2NhbGUudGlja0Zvcm1hdC5hcHBseShzY2FsZSwgdGlja0FyZ3VtZW50cykgOiBpZGVudGl0eSkgOiB0aWNrRm9ybWF0LFxuICAgICAgICBzcGFjaW5nID0gTWF0aC5tYXgodGlja1NpemVJbm5lciwgMCkgKyB0aWNrUGFkZGluZyxcbiAgICAgICAgcmFuZ2UgPSBzY2FsZS5yYW5nZSgpLFxuICAgICAgICByYW5nZTAgPSArcmFuZ2VbMF0gKyAwLjUsXG4gICAgICAgIHJhbmdlMSA9ICtyYW5nZVtyYW5nZS5sZW5ndGggLSAxXSArIDAuNSxcbiAgICAgICAgcG9zaXRpb24gPSAoc2NhbGUuYmFuZHdpZHRoID8gY2VudGVyIDogbnVtYmVyKShzY2FsZS5jb3B5KCkpLFxuICAgICAgICBzZWxlY3Rpb24gPSBjb250ZXh0LnNlbGVjdGlvbiA/IGNvbnRleHQuc2VsZWN0aW9uKCkgOiBjb250ZXh0LFxuICAgICAgICBwYXRoID0gc2VsZWN0aW9uLnNlbGVjdEFsbChcIi5kb21haW5cIikuZGF0YShbbnVsbF0pLFxuICAgICAgICB0aWNrID0gc2VsZWN0aW9uLnNlbGVjdEFsbChcIi50aWNrXCIpLmRhdGEodmFsdWVzLCBzY2FsZSkub3JkZXIoKSxcbiAgICAgICAgdGlja0V4aXQgPSB0aWNrLmV4aXQoKSxcbiAgICAgICAgdGlja0VudGVyID0gdGljay5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwidGlja1wiKSxcbiAgICAgICAgbGluZSA9IHRpY2suc2VsZWN0KFwibGluZVwiKSxcbiAgICAgICAgdGV4dCA9IHRpY2suc2VsZWN0KFwidGV4dFwiKTtcblxuICAgIHBhdGggPSBwYXRoLm1lcmdlKHBhdGguZW50ZXIoKS5pbnNlcnQoXCJwYXRoXCIsIFwiLnRpY2tcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImRvbWFpblwiKVxuICAgICAgICAuYXR0cihcInN0cm9rZVwiLCBcImN1cnJlbnRDb2xvclwiKSk7XG5cbiAgICB0aWNrID0gdGljay5tZXJnZSh0aWNrRW50ZXIpO1xuXG4gICAgbGluZSA9IGxpbmUubWVyZ2UodGlja0VudGVyLmFwcGVuZChcImxpbmVcIilcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJjdXJyZW50Q29sb3JcIilcbiAgICAgICAgLmF0dHIoeCArIFwiMlwiLCBrICogdGlja1NpemVJbm5lcikpO1xuXG4gICAgdGV4dCA9IHRleHQubWVyZ2UodGlja0VudGVyLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwiY3VycmVudENvbG9yXCIpXG4gICAgICAgIC5hdHRyKHgsIGsgKiBzcGFjaW5nKVxuICAgICAgICAuYXR0cihcImR5XCIsIG9yaWVudCA9PT0gdG9wID8gXCIwZW1cIiA6IG9yaWVudCA9PT0gYm90dG9tID8gXCIwLjcxZW1cIiA6IFwiMC4zMmVtXCIpKTtcblxuICAgIGlmIChjb250ZXh0ICE9PSBzZWxlY3Rpb24pIHtcbiAgICAgIHBhdGggPSBwYXRoLnRyYW5zaXRpb24oY29udGV4dCk7XG4gICAgICB0aWNrID0gdGljay50cmFuc2l0aW9uKGNvbnRleHQpO1xuICAgICAgbGluZSA9IGxpbmUudHJhbnNpdGlvbihjb250ZXh0KTtcbiAgICAgIHRleHQgPSB0ZXh0LnRyYW5zaXRpb24oY29udGV4dCk7XG5cbiAgICAgIHRpY2tFeGl0ID0gdGlja0V4aXQudHJhbnNpdGlvbihjb250ZXh0KVxuICAgICAgICAgIC5hdHRyKFwib3BhY2l0eVwiLCBlcHNpbG9uKVxuICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGlzRmluaXRlKGQgPSBwb3NpdGlvbihkKSkgPyB0cmFuc2Zvcm0oZCkgOiB0aGlzLmdldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiKTsgfSk7XG5cbiAgICAgIHRpY2tFbnRlclxuICAgICAgICAgIC5hdHRyKFwib3BhY2l0eVwiLCBlcHNpbG9uKVxuICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uKGQpIHsgdmFyIHAgPSB0aGlzLnBhcmVudE5vZGUuX19heGlzOyByZXR1cm4gdHJhbnNmb3JtKHAgJiYgaXNGaW5pdGUocCA9IHAoZCkpID8gcCA6IHBvc2l0aW9uKGQpKTsgfSk7XG4gICAgfVxuXG4gICAgdGlja0V4aXQucmVtb3ZlKCk7XG5cbiAgICBwYXRoXG4gICAgICAgIC5hdHRyKFwiZFwiLCBvcmllbnQgPT09IGxlZnQgfHwgb3JpZW50ID09IHJpZ2h0XG4gICAgICAgICAgICA/ICh0aWNrU2l6ZU91dGVyID8gXCJNXCIgKyBrICogdGlja1NpemVPdXRlciArIFwiLFwiICsgcmFuZ2UwICsgXCJIMC41VlwiICsgcmFuZ2UxICsgXCJIXCIgKyBrICogdGlja1NpemVPdXRlciA6IFwiTTAuNSxcIiArIHJhbmdlMCArIFwiVlwiICsgcmFuZ2UxKVxuICAgICAgICAgICAgOiAodGlja1NpemVPdXRlciA/IFwiTVwiICsgcmFuZ2UwICsgXCIsXCIgKyBrICogdGlja1NpemVPdXRlciArIFwiVjAuNUhcIiArIHJhbmdlMSArIFwiVlwiICsgayAqIHRpY2tTaXplT3V0ZXIgOiBcIk1cIiArIHJhbmdlMCArIFwiLDAuNUhcIiArIHJhbmdlMSkpO1xuXG4gICAgdGlja1xuICAgICAgICAuYXR0cihcIm9wYWNpdHlcIiwgMSlcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gdHJhbnNmb3JtKHBvc2l0aW9uKGQpKTsgfSk7XG5cbiAgICBsaW5lXG4gICAgICAgIC5hdHRyKHggKyBcIjJcIiwgayAqIHRpY2tTaXplSW5uZXIpO1xuXG4gICAgdGV4dFxuICAgICAgICAuYXR0cih4LCBrICogc3BhY2luZylcbiAgICAgICAgLnRleHQoZm9ybWF0KTtcblxuICAgIHNlbGVjdGlvbi5maWx0ZXIoZW50ZXJpbmcpXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIilcbiAgICAgICAgLmF0dHIoXCJmb250LXNpemVcIiwgMTApXG4gICAgICAgIC5hdHRyKFwiZm9udC1mYW1pbHlcIiwgXCJzYW5zLXNlcmlmXCIpXG4gICAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgb3JpZW50ID09PSByaWdodCA/IFwic3RhcnRcIiA6IG9yaWVudCA9PT0gbGVmdCA/IFwiZW5kXCIgOiBcIm1pZGRsZVwiKTtcblxuICAgIHNlbGVjdGlvblxuICAgICAgICAuZWFjaChmdW5jdGlvbigpIHsgdGhpcy5fX2F4aXMgPSBwb3NpdGlvbjsgfSk7XG4gIH1cblxuICBheGlzLnNjYWxlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNjYWxlID0gXywgYXhpcykgOiBzY2FsZTtcbiAgfTtcblxuICBheGlzLnRpY2tzID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRpY2tBcmd1bWVudHMgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyksIGF4aXM7XG4gIH07XG5cbiAgYXhpcy50aWNrQXJndW1lbnRzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tBcmd1bWVudHMgPSBfID09IG51bGwgPyBbXSA6IHNsaWNlLmNhbGwoXyksIGF4aXMpIDogdGlja0FyZ3VtZW50cy5zbGljZSgpO1xuICB9O1xuXG4gIGF4aXMudGlja1ZhbHVlcyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrVmFsdWVzID0gXyA9PSBudWxsID8gbnVsbCA6IHNsaWNlLmNhbGwoXyksIGF4aXMpIDogdGlja1ZhbHVlcyAmJiB0aWNrVmFsdWVzLnNsaWNlKCk7XG4gIH07XG5cbiAgYXhpcy50aWNrRm9ybWF0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tGb3JtYXQgPSBfLCBheGlzKSA6IHRpY2tGb3JtYXQ7XG4gIH07XG5cbiAgYXhpcy50aWNrU2l6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrU2l6ZUlubmVyID0gdGlja1NpemVPdXRlciA9ICtfLCBheGlzKSA6IHRpY2tTaXplSW5uZXI7XG4gIH07XG5cbiAgYXhpcy50aWNrU2l6ZUlubmVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tTaXplSW5uZXIgPSArXywgYXhpcykgOiB0aWNrU2l6ZUlubmVyO1xuICB9O1xuXG4gIGF4aXMudGlja1NpemVPdXRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrU2l6ZU91dGVyID0gK18sIGF4aXMpIDogdGlja1NpemVPdXRlcjtcbiAgfTtcblxuICBheGlzLnRpY2tQYWRkaW5nID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tQYWRkaW5nID0gK18sIGF4aXMpIDogdGlja1BhZGRpbmc7XG4gIH07XG5cbiAgcmV0dXJuIGF4aXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlzVG9wKHNjYWxlKSB7XG4gIHJldHVybiBheGlzKHRvcCwgc2NhbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc1JpZ2h0KHNjYWxlKSB7XG4gIHJldHVybiBheGlzKHJpZ2h0LCBzY2FsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlzQm90dG9tKHNjYWxlKSB7XG4gIHJldHVybiBheGlzKGJvdHRvbSwgc2NhbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc0xlZnQoc2NhbGUpIHtcbiAgcmV0dXJuIGF4aXMobGVmdCwgc2NhbGUpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuLypcbiAgICBEZW5kcm9ncmFtIHZpc3VhbGl6ZXMgYSB0ZXh0LWJhc2VkIE5ld2ljayB0cmVlIHVzaW5nIEQzIFY1LlxuXG4gICAgZGVwZW5kZW5jaWVzOlxuICAgIGQzIHY1XG4gICAgdGhlIG5ld2ljayBwYXJzZXI6IG5ld2ljay5qc1xuXG4gICAgcmVmZXJlbmNlczpcbiAgICBodHRwczovL2dpdGh1Yi5jb20vZDMvZDMtaGllcmFyY2h5XG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2phc29uZGF2aWVzL25ld2ljay5qcy9cblxuICAgIG5vdGVzIG9uIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlczpcbiAgICAtIGl0IHVzZXMgcGFyc2VOZXdpY2soKSB0byBjb252ZXJ0IHRoZSBuZXdpY2sgdHJlZSBpbnRvIHRoZSBmb2xsb3dpbmcganNvbjpcbiAgICAgICAge1xuICAgICAgICAgICAgYnJhbmNoc2V0OltjaGlsZCBub2RlIGpzb24gb2JqZWN0c10sXG4gICAgICAgICAgICBuYW1lOiBcIlwiIC8vIGludGVybmFsIG5vZGVzIHdvdWxkIGhhdmUgbm8gcmVhbCBsYWJlbHNcbiAgICAgICAgfVxuICAgICAgIFRoaXMganNvbiBzdHJ1Y3R1cmUgaXMgdGhlIGlucHV0IGRhdGEgb2YgZDMuaGllcmFyY2h5KClcblxuICAgIC0gSW4gdGhlIGQzLmhpZXJhcmNoeSgpLCB0aGUgcm9vdCBub2RlIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6XG4gICAgICAgIHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbY28sIGNvXSxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBicmFuY2hzZXQ6IEFycmF5KDIpLFxuICAgICAgICAgICAgICAgIG5hbWU6IFwibm9kZSBuYW1lXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZXB0aDogMCxcbiAgICAgICAgICAgIGhlaWdodDogaW50ZWdlcixcbiAgICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICAgIHZhbHVlOiA5XG4gICAgICAgIH1cbiAqL1xuXG4vLyBUT0RPOiBlbGltaW5hdGUgaGFyZC1jb2RlZCB2YWx1ZXNcblxuaW1wb3J0IHtoaWVyYXJjaHl9IGZyb20gXCJkMy1oaWVyYXJjaHlcIjtcbmltcG9ydCB7YXNjZW5kaW5nfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7YXhpc0JvdHRvbSwgYXhpc0xlZnR9IGZyb20gXCJkMy1heGlzXCI7XG5pbXBvcnQge3NjYWxlTGluZWFyLCBzY2FsZUJhbmR9IGZyb20gXCJkMy1zY2FsZVwiO1xuaW1wb3J0IHtwYXJzZU5ld2lja30gZnJvbSBcIi4vbmV3aWNrXCI7XG5jb25zdCB2ZXJib3NlID0gZmFsc2U7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZW5kcm9ncmFtIHtcbiAgICBjb25zdHJ1Y3RvcihuZXdpY2ssIG9yaWVudGF0aW9uPSdoJyl7XG4gICAgICAgIHRoaXMubmV3aWNrID0gbmV3aWNrO1xuICAgICAgICB0aGlzLm9yaWVudGF0aW9uID0gb3JpZW50YXRpb247XG4gICAgICAgIHRoaXMucG9zdG9yZGVyID0gW107XG4gICAgICAgIHRoaXMucm9vdCA9IGhpZXJhcmNoeShwYXJzZU5ld2ljayhuZXdpY2spLCAoZCkgPT4gZC5icmFuY2hzZXQpXG4gICAgICAgICAgICAuc3VtKChkKT0+ZC5icmFuY2hzZXQ/MDoxKVxuICAgICAgICAgICAgLnNvcnQoKGEsYik9PmEudmFsdWUtYi52YWx1ZXx8YS5kYXRhLmxlbmd0aC1iLmRhdGEubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5sZWF2ZXMgPSB0aGlzLnJvb3QubGVhdmVzKCkuc29ydCgoYSwgYikgPT4gKGEudmFsdWUgLSBiLnZhbHVlKSB8fCBhc2NlbmRpbmcoYS5kYXRhLmxlbmd0aCwgYi5kYXRhLmxlbmd0aCkpO1xuICAgICAgICB0aGlzLndpZHRoID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy54U2NhbGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMueVNjYWxlID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGRyYXcoZG9tLCB3aWR0aCwgaGVpZ2h0KXtcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgdGhpcy5fc2V0WFNjYWxlKCk7XG4gICAgICAgIHRoaXMuX3NldFlTY2FsZSgpO1xuICAgICAgICBpZiAoJ2gnID09IHRoaXMub3JpZW50YXRpb24pIHRoaXMuX2RyYXdIVHJlZShkb20pO1xuICAgICAgICBlbHNlIHRoaXMuX2RyYXdWVHJlZShkb20pO1xuICAgIH1cblxuICAgIC8vLy8vLy8gcHJpdmF0ZSBtZXRob2RzIC8vLy8vLy9cblxuICAgIF9kcmF3SFRyZWUoZG9tKXtcbiAgICAgICAgY29uc3Qgc2V0WSA9IChub2RlKSA9PiB7XG4gICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gYSBsZWFmIG5vZGVcbiAgICAgICAgICAgICAgICBub2RlLnkgPSB0aGlzLnlTY2FsZShub2RlLmRhdGEubmFtZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGFuIGludGVybmFsIG5vZGVcbiAgICAgICAgICAgICAgICAvLyB0aGUgeSBjb29yZGluYXRlIG9mIGFuIGludGVybmFsIG5vZGUgaXMgdGhlIGF2ZXJhZ2UgeSBmcm9tIGl0cyBjaGlsZHJlblxuICAgICAgICAgICAgICAgIG5vZGUueSA9IG5vZGUuY2hpbGRyZW4ucmVkdWNlKChzdW0sIGQpPT5zdW0rZC55LCAwKS9ub2RlLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2V0WCA9IChub2RlKSA9PiB7XG4gICAgICAgICAgICBub2RlLnggPSB0aGlzLnhTY2FsZSh0aGlzLl9nZXRCcmFuY2hMZW5ndGhUb1Jvb3Qobm9kZSkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGZyb20gdGhlIGxlYWYgbGV2ZWwgLT4gcm9vdFxuICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMuX3NvcnROb2Rlc0J5TGV2ZWwoKTtcbiAgICAgICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgc2V0WChub2RlKTtcbiAgICAgICAgICAgIHNldFkobm9kZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRvbS5zZWxlY3RBbGwoJy5icmFuY2gnKVxuICAgICAgICAgICAgLmRhdGEobm9kZXMpXG4gICAgICAgICAgICAuZW50ZXIoKS5hcHBlbmQoXCJsaW5lXCIpXG4gICAgICAgICAgICAuYXR0cihcIngxXCIsIChkKSA9PiBkLngpXG4gICAgICAgICAgICAuYXR0cihcIngyXCIsIChkKSA9PiBkLmRhdGEubGVuZ3RoP2QueCAtIHRoaXMueFNjYWxlKGQuZGF0YS5sZW5ndGgpOmQueClcbiAgICAgICAgICAgIC5hdHRyKFwieTFcIiwgKGQpID0+IGQueSArIHRoaXMueVNjYWxlLmJhbmR3aWR0aCgpLzIpXG4gICAgICAgICAgICAuYXR0cihcInkyXCIsIChkKSA9PiBkLnkgKyB0aGlzLnlTY2FsZS5iYW5kd2lkdGgoKS8yKVxuICAgICAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJncmF5XCIpXG4gICAgICAgICAgICAuYXR0cihcInN0cm9rZS13aWR0aFwiLCAxKTtcblxuICAgICAgICAvLyBmb3IgYWxsIGludGVybmFsIG5vZGVzXG4gICAgICAgIGNvbnN0IGlub2RlcyA9IHRoaXMucm9vdC5kZXNjZW5kYW50cygpLmZpbHRlcigoZCk9PmQuaGVpZ2h0KS5zb3J0KChhLGIpPT5iLmhlaWdodC1hLmhlaWdodCk7XG4gICAgICAgIGRvbS5zZWxlY3RBbGwoJy5hcm0nKVxuICAgICAgICAgICAgLmRhdGEoaW5vZGVzKVxuICAgICAgICAgICAgLmVudGVyKCkuYXBwZW5kKFwibGluZVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4MVwiLCAoZCkgPT4gZC54KVxuICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCAoZCkgPT4gZC54KVxuICAgICAgICAgICAgLmF0dHIoXCJ5MVwiLCAoZCkgPT4gZC5jaGlsZHJlblswXS55ICsgdGhpcy55U2NhbGUuYmFuZHdpZHRoKCkvMilcbiAgICAgICAgICAgIC5hdHRyKFwieTJcIiwgKGQpID0+IGQuY2hpbGRyZW5bMV0ueSArIHRoaXMueVNjYWxlLmJhbmR3aWR0aCgpLzIpXG4gICAgICAgICAgICAuYXR0cihcInN0cm9rZVwiLCBcImdyYXlcIilcbiAgICAgICAgICAgIC5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDEpO1xuXG4gICAgICAgIGRvbS5zZWxlY3RBbGwoJy5ub2RlJylcbiAgICAgICAgICAgIC5kYXRhKGlub2RlcylcbiAgICAgICAgICAgIC5lbnRlcigpLmFwcGVuZChcImNpcmNsZVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJjeFwiLCAoZCkgPT4gZC54KVxuICAgICAgICAgICAgLmF0dHIoXCJjeVwiLCAoZCkgPT4gZC55ICsgdGhpcy55U2NhbGUuYmFuZHdpZHRoKCkvMilcbiAgICAgICAgICAgIC5hdHRyKFwiclwiLCAyKVxuICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnIzMzMycpXG4gICAgICAgICAgICAuYXR0cihcIm9wYWNpdHlcIiwgMC41KVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImRlbmRyb2dyYW0tbm9kZVwiKVxuICAgICAgICAgICAgLm9uKFwibW91c2VvdmVyXCIsIGZ1bmN0aW9uKGQpe1xuICAgICAgICAgICAgICAgIGQzLnNlbGVjdCh0aGlzKS5hdHRyKFwiclwiLCAzKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkLmxlYXZlcygpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAub24oXCJtb3VzZW91dFwiLCBmdW5jdGlvbihkKXtcbiAgICAgICAgICAgICAgICBkMy5zZWxlY3QodGhpcykuYXR0cihcInJcIiwgMilcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGF4aXNcbiAgICAgICAgLy8gQWRkIHRoZSB4IEF4aXNcbiAgICAgICAgZG9tLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJkZW5kcm9ncmFtLWF4aXNcIilcbiAgICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKDAsXCIgKyB0aGlzLmhlaWdodCArIFwiKVwiKVxuICAgICAgICAgICAgLmNhbGwoXG4gICAgICAgICAgICAgICAgYXhpc0JvdHRvbSh0aGlzLnhTY2FsZSlcbiAgICAgICAgICAgICAgICAgICAgLnRpY2tzKDMpXG4gICAgICAgICAgICAgICAgLy8gLnRpY2tWYWx1ZXMoW01hdGguZmxvb3IodGhpcy5fZ2V0TWF4QnJhbmNoTGVuZ3RoKCkvMiksIE1hdGguZmxvb3IodGhpcy5fZ2V0TWF4QnJhbmNoTGVuZ3RoKCkpXSlcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgX3NvcnROb2Rlc0J5TGV2ZWwoKXtcbiAgICAgICAgLy8gcmV0dXJucyBhIGxpc3Qgb2Ygbm9kZXMgb3JkZXJlZCBieSBhbmNlc3RyYWwgbGV2ZWwsIHRoZW4gYnkgYnJhbmNoIGxlbmd0aFxuICAgICAgICByZXR1cm4gdGhpcy5yb290LmRlc2NlbmRhbnRzKCkuc29ydCgoYSwgYikgPT4gKGEuaGVpZ2h0IC0gYi5oZWlnaHQpIHx8IGFzY2VuZGluZyhhLmRhdGEubGVuZ3RoLCBiLmRhdGEubGVuZ3RoKSk7XG4gICAgfVxuXG4gICAgX2RyYXdWVHJlZShkb20pe1xuICAgICAgICBjb25zdCBzZXRYID0gKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBhIGxlYWYgbm9kZVxuICAgICAgICAgICAgICAgIG5vZGUueCA9IHRoaXMueFNjYWxlKG5vZGUuZGF0YS5uYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gYW4gaW50ZXJuYWwgbm9kZVxuICAgICAgICAgICAgICAgIC8vIHRoZSB5IGNvb3JkaW5hdGUgb2YgYW4gaW50ZXJuYWwgbm9kZSBpcyB0aGUgYXZlcmFnZSB5IGZyb20gaXRzIGNoaWxkcmVuXG4gICAgICAgICAgICAgICAgbm9kZS54ID0gbm9kZS5jaGlsZHJlbi5yZWR1Y2UoKHN1bSwgZCk9PnN1bStkLngsIDApL25vZGUuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzZXRZID0gKG5vZGUpID0+IHtcbiAgICAgICAgICAgIG5vZGUueSA9IHRoaXMueVNjYWxlKHRoaXMuX2dldEJyYW5jaExlbmd0aFRvUm9vdChub2RlKSk7XG4gICAgICAgIH07XG4gICAgICAgIC8vIGZyb20gdGhlIGxlYWYgbGV2ZWwgLT4gcm9vdFxuICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMuX3NvcnROb2Rlc0J5TGV2ZWwoKTtcbiAgICAgICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgc2V0WChub2RlKTtcbiAgICAgICAgICAgIHNldFkobm9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBkb20uc2VsZWN0QWxsKCcuYnJhbmNoJylcbiAgICAgICAgICAgIC5kYXRhKG5vZGVzKVxuICAgICAgICAgICAgLmVudGVyKCkuYXBwZW5kKFwibGluZVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ5MVwiLCAoZCkgPT4gZC55KVxuICAgICAgICAgICAgLmF0dHIoXCJ5MlwiLCAoZCkgPT4gZC5kYXRhLmxlbmd0aD9kLnkgLSB0aGlzLnlTY2FsZShkLmRhdGEubGVuZ3RoKTpkLnkpXG4gICAgICAgICAgICAuYXR0cihcIngxXCIsIChkKSA9PiBkLnggKyB0aGlzLnhTY2FsZS5iYW5kd2lkdGgoKS8yKVxuICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCAoZCkgPT4gZC54ICsgdGhpcy54U2NhbGUuYmFuZHdpZHRoKCkvMilcbiAgICAgICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiZ3JheVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgMSk7XG5cbiAgICAgICAgLy8gZm9yIGFsbCBpbnRlcm5hbCBub2Rlc1xuICAgICAgICBjb25zdCBpbm9kZXMgPSB0aGlzLnJvb3QuZGVzY2VuZGFudHMoKS5maWx0ZXIoKGQpPT5kLmhlaWdodCkuc29ydCgoYSxiKT0+Yi5oZWlnaHQtYS5oZWlnaHQpO1xuICAgICAgICBkb20uc2VsZWN0QWxsKCcuYXJtJylcbiAgICAgICAgICAgIC5kYXRhKGlub2RlcylcbiAgICAgICAgICAgIC5lbnRlcigpLmFwcGVuZChcImxpbmVcIilcbiAgICAgICAgICAgIC5hdHRyKFwieTFcIiwgKGQpID0+IGQueSlcbiAgICAgICAgICAgIC5hdHRyKFwieTJcIiwgKGQpID0+IGQueSlcbiAgICAgICAgICAgIC5hdHRyKFwieDFcIiwgKGQpID0+IGQuY2hpbGRyZW5bMF0ueCArIHRoaXMueFNjYWxlLmJhbmR3aWR0aCgpLzIpXG4gICAgICAgICAgICAuYXR0cihcIngyXCIsIChkKSA9PiBkLmNoaWxkcmVuWzFdLnggKyB0aGlzLnhTY2FsZS5iYW5kd2lkdGgoKS8yKVxuICAgICAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJncmF5XCIpXG4gICAgICAgICAgICAuYXR0cihcInN0cm9rZS13aWR0aFwiLCAxKTtcblxuICAgICAgICBkb20uc2VsZWN0QWxsKCcubm9kZScpXG4gICAgICAgICAgICAuZGF0YShpbm9kZXMpXG4gICAgICAgICAgICAuZW50ZXIoKS5hcHBlbmQoXCJjaXJjbGVcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY3hcIiwgKGQpID0+IGQueCArIHRoaXMueFNjYWxlLmJhbmR3aWR0aCgpLzIpXG4gICAgICAgICAgICAuYXR0cihcImN5XCIsIChkKSA9PiBkLnkpXG4gICAgICAgICAgICAuYXR0cihcInJcIiwgMilcbiAgICAgICAgICAgIC5hdHRyKCdmaWxsJywgJyMzMzMnKVxuICAgICAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIDAuNSlcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJkZW5kcm9ncmFtLW5vZGVcIilcbiAgICAgICAgICAgIC5vbihcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbihkKXtcbiAgICAgICAgICAgICAgICBkMy5zZWxlY3QodGhpcykuYXR0cihcInJcIiwgMyk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZC5sZWF2ZXMoKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm9uKFwibW91c2VvdXRcIiwgZnVuY3Rpb24oZCl7XG4gICAgICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLmF0dHIoXCJyXCIsIDIpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBheGlzXG4gICAgICAgIC8vIEFkZCB0aGUgeCBBeGlzXG4gICAgICAgIGRvbS5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAvLyAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7dGhpcy53aWR0aH0sIDApYClcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJkZW5kcm9ncmFtLWF4aXNcIilcbiAgICAgICAgICAgIC5jYWxsKFxuICAgICAgICAgICAgICAgIGF4aXNMZWZ0KHRoaXMueVNjYWxlKVxuICAgICAgICAgICAgICAgICAgICAudGlja3MoMylcbiAgICAgICAgICAgICAgICAvLyAudGlja1ZhbHVlcyhbTWF0aC5mbG9vcih0aGlzLl9nZXRNYXhCcmFuY2hMZW5ndGgoKS8yKSwgTWF0aC5mbG9vcih0aGlzLl9nZXRNYXhCcmFuY2hMZW5ndGgoKSldKVxuICAgICAgICAgICAgKTtcblxuICAgIH1cblxuICAgIF9nZXRCcmFuY2hMZW5ndGhUb1Jvb3Qobm9kZSkge1xuICAgICAgICAvLyBub2RlOiBhIGQzLmhpZXJhcmNoeSBub2RlXG4gICAgICAgIHJldHVybiBub2RlLnBhdGgodGhpcy5yb290KVxuICAgICAgICAgICAgLnJlZHVjZSgoc3VtLCBkKSA9PiBkLmRhdGEubGVuZ3RoP3N1bStkLmRhdGEubGVuZ3RoOnN1bSwgMCk7XG4gICAgfVxuXG4gICAgX2dldE1heEJyYW5jaExlbmd0aCgpIHtcbiAgICAgICAgLy8gdGhlIGFzc3VtcHRpb24gaGVyZSBpcyB0aGF0IGFsbCBsZWFmIG5vZGVzIGhhdmUgdGhlIHNhbWUgZGlzdGFuY2UgdG8gdGhlIHJvb3QuXG4gICAgICAgIGxldCBub2RlID0gdGhpcy5sZWF2ZXNbMF07IC8vIHJhbmRvbWx5IHBpY2tzIGEgbGVhZiBub2RlXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRCcmFuY2hMZW5ndGhUb1Jvb3Qobm9kZSk7XG4gICAgfVxuXG4gICAgX2Fzc2lnblBvc3RvcmRlcihub2RlKXtcbiAgICAgICAgLy8gYXNzaWducyBwb3N0LW9yZGVyIG9mIGFsbCBsZWFmIG5vZGVzXG4gICAgICAgIGlmKG5vZGUuY2hpbGRyZW4gPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAvLyBiYXNlIGNhc2VcbiAgICAgICAgICAgIHRoaXMucG9zdG9yZGVyLnB1c2gobm9kZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9hc3NpZ25Qb3N0b3JkZXIobm9kZS5jaGlsZHJlblswXSk7XG4gICAgICAgICAgICB0aGlzLl9hc3NpZ25Qb3N0b3JkZXIobm9kZS5jaGlsZHJlblsxXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfc2V0WFNjYWxlKCl7XG4gICAgICAgIGlmICgnaCcgPT0gdGhpcy5vcmllbnRhdGlvbil7XG4gICAgICAgICAgICB0aGlzLnhTY2FsZSA9IHNjYWxlTGluZWFyKClcbiAgICAgICAgICAgICAgICAuZG9tYWluKFswLCB0aGlzLl9nZXRNYXhCcmFuY2hMZW5ndGgoKV0pXG4gICAgICAgICAgICAgICAgLnJhbmdlKFswLCB0aGlzLndpZHRoXSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2Fzc2lnblBvc3RvcmRlcih0aGlzLnJvb3QpO1xuICAgICAgICAgICAgaWYgKHZlcmJvc2UpIGNvbnNvbGUubG9nKHRoaXMucG9zdG9yZGVyKTtcbiAgICAgICAgICAgIHRoaXMueFNjYWxlID0gc2NhbGVCYW5kKClcbiAgICAgICAgICAgICAgICAuZG9tYWluKHRoaXMucG9zdG9yZGVyLm1hcCgoZCkgPT4gZC5kYXRhLm5hbWUpKVxuICAgICAgICAgICAgICAgIC5yYW5nZShbMCwgdGhpcy53aWR0aF0pXG4gICAgICAgICAgICAgICAgLnBhZGRpbmcoLjA1KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9zZXRZU2NhbGUoKXtcbiAgICAgICAgaWYgKCdoJyA9PSB0aGlzLm9yaWVudGF0aW9uKXtcbiAgICAgICAgICAgIHRoaXMuX2Fzc2lnblBvc3RvcmRlcih0aGlzLnJvb3QpO1xuICAgICAgICAgICAgaWYgKHZlcmJvc2UpIGNvbnNvbGUubG9nKHRoaXMucG9zdG9yZGVyKTtcbiAgICAgICAgICAgIHRoaXMueVNjYWxlID0gc2NhbGVCYW5kKClcbiAgICAgICAgICAgICAgICAuZG9tYWluKHRoaXMucG9zdG9yZGVyLm1hcCgoZCkgPT4gZC5kYXRhLm5hbWUpKVxuICAgICAgICAgICAgICAgIC5yYW5nZShbMCwgdGhpcy5oZWlnaHRdKVxuICAgICAgICAgICAgICAgIC5wYWRkaW5nKC4wNSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnlTY2FsZSA9IHNjYWxlTGluZWFyKClcbiAgICAgICAgICAgICAgICAuZG9tYWluKFswLCB0aGlzLl9nZXRNYXhCcmFuY2hMZW5ndGgoKV0pXG4gICAgICAgICAgICAgICAgLnJhbmdlKFswLCB0aGlzLmhlaWdodF0pXG4gICAgICAgIH1cbiAgICB9XG5cbn0iLCIvLyBDb3B5cmlnaHQgMjAxMSBKYXNvbiBEYXZpZXMgaHR0cHM6Ly9naXRodWIuY29tL2phc29uZGF2aWVzL25ld2ljay5qc1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOZXdpY2socykge1xuICAgIHZhciBhbmNlc3RvcnMgPSBbXTtcbiAgICB2YXIgdHJlZSA9IHt9O1xuICAgIHZhciB0b2tlbnMgPSBzLnNwbGl0KC9cXHMqKDt8XFwofFxcKXwsfDopXFxzKi8pO1xuICAgIGZvciAodmFyIGk9MDsgaTx0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgY2FzZSAnKCc6IC8vIG5ldyBicmFuY2hzZXRcbiAgICAgICAgICB2YXIgc3VidHJlZSA9IHt9O1xuICAgICAgICAgIHRyZWUuYnJhbmNoc2V0ID0gW3N1YnRyZWVdO1xuICAgICAgICAgIGFuY2VzdG9ycy5wdXNoKHRyZWUpO1xuICAgICAgICAgIHRyZWUgPSBzdWJ0cmVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICcsJzogLy8gYW5vdGhlciBicmFuY2hcbiAgICAgICAgICB2YXIgc3VidHJlZSA9IHt9O1xuICAgICAgICAgIGFuY2VzdG9yc1thbmNlc3RvcnMubGVuZ3RoLTFdLmJyYW5jaHNldC5wdXNoKHN1YnRyZWUpO1xuICAgICAgICAgIHRyZWUgPSBzdWJ0cmVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICcpJzogLy8gb3B0aW9uYWwgbmFtZSBuZXh0XG4gICAgICAgICAgdHJlZSA9IGFuY2VzdG9ycy5wb3AoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnOic6IC8vIG9wdGlvbmFsIGxlbmd0aCBuZXh0XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdmFyIHggPSB0b2tlbnNbaS0xXTtcbiAgICAgICAgICBpZiAoeCA9PSAnKScgfHwgeCA9PSAnKCcgfHwgeCA9PSAnLCcpIHtcbiAgICAgICAgICAgIHRyZWUubmFtZSA9IHRva2VuO1xuICAgICAgICAgIH0gZWxzZSBpZiAoeCA9PSAnOicpIHtcbiAgICAgICAgICAgIHRyZWUubGVuZ3RoID0gcGFyc2VGbG9hdCh0b2tlbik7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJlZTtcbn1cblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuaW1wb3J0IHtjcmVhdGVTdmd9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge3NlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG5pbXBvcnQgRGVuZHJvSGVhdG1hcENvbmZpZyBmcm9tIFwiLi9EZW5kcm9IZWF0bWFwQ29uZmlnXCI7XG5pbXBvcnQgRGVuZHJvZ3JhbSBmcm9tIFwiLi9EZW5kcm9ncmFtXCI7XG5pbXBvcnQgSGVhdG1hcCBmcm9tIFwiLi9IZWF0bWFwXCI7XG5pbXBvcnQgVG9vbHRpcCBmcm9tIFwiLi9Ub29sdGlwXCI7XG5pbXBvcnQgVG9vbGJhciBmcm9tIFwiLi9Ub29sYmFyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlbmRyb0hlYXRtYXAge1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0gY29sdW1uVHJlZSB7U3RyaW5nfSBhIG5ld2ljayB0cmVlXG4gICAgICogQHBhcmFtIHJvd1RyZWUge1N0cmluZ30gYSBuZXdpY2sgdHJlZVxuICAgICAqIEBwYXJhbSBoZWF0bWFwRGF0YSB7TGlzdH0gb2Ygb2JqZWN0cyB3aXRoIGF0dHJpYnV0ZXM6IHg6IFN0cmluZywgeTpTdHJpbmcsIHZhbHVlOkZsb2F0LCBkaXNwbGF5VmFsdWU6RmxvYXRcbiAgICAgKiBAcGFyYW0gY29sb3Ige1N0cmluZ30gYSBjb2xvciBuYW1lIHRoYXQncyBhdmFpbGFibGUgaW4gQ29sb3JzLmdldENvbG9ySW50ZXJwb2xhdG9yXG4gICAgICogQHBhcmFtIHIge0ludGVnZXJ9IHRoZSBkZWdyZWVzIG9mIHJvdW5kZWQtY29ybmVycyBvZiB0aGUgaGVhdG1hcCBjZWxsc1xuICAgICAqIEBwYXJhbSBjb25maWcge0RlbmRyb0hlYXRtYXBDb25maWd9XG4gICAgICogQHBhcmFtIHVzZUxvZyB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihjb2x1bW5UcmVlLCByb3dUcmVlLCBoZWF0bWFwRGF0YSwgY29sb3I9XCJZbEduQnVcIiwgcj0yLCBjb25maWc9bmV3IERlbmRyb0hlYXRtYXBDb25maWcoKSwgdG9vbHRpcElkPVwiZG1hcFRvb2x0aXBcIiwgdXNlTG9nPXRydWUsIGJhc2U9MTAsIHRpdGxlID0gJycpe1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZy5nZXQoKTtcbiAgICAgICAgLy9pbnB1dCBldmFsdWF0aW9uc1xuICAgICAgICBjb2x1bW5UcmVlID0gY29sdW1uVHJlZT09PXVuZGVmaW5lZHx8Y29sdW1uVHJlZS5zdGFydHNXaXRoKFwiTm90IGVub3VnaCBkYXRhXCIpP3VuZGVmaW5lZDpjb2x1bW5UcmVlO1xuICAgICAgICByb3dUcmVlID0gcm93VHJlZT09PXVuZGVmaW5lZHx8cm93VHJlZS5zdGFydHNXaXRoKFwiTm90IGVub3VnaCBkYXRhXCIpP3VuZGVmaW5lZDpyb3dUcmVlO1xuICAgICAgICAvLyBhc3NpZ24gYXR0cmlidXRlIHZhbHVlcyBiYXNlZCBvbiBpbnB1dCBhcmd1bWVudHNcbiAgICAgICAgdGhpcy5kYXRhID0ge1xuICAgICAgICAgICAgY29sdW1uVHJlZTogY29sdW1uVHJlZSxcbiAgICAgICAgICAgIHJvd1RyZWU6IHJvd1RyZWUsXG4gICAgICAgICAgICBoZWF0bWFwOiBoZWF0bWFwRGF0YSxcbiAgICAgICAgICAgIGV4dGVybmFsOiB1bmRlZmluZWRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vYmplY3RzID0ge1xuICAgICAgICAgICAgY29sdW1uVHJlZTogdGhpcy5kYXRhLmNvbHVtblRyZWU9PT11bmRlZmluZWQ/IHVuZGVmaW5lZDpuZXcgRGVuZHJvZ3JhbSh0aGlzLmRhdGEuY29sdW1uVHJlZSwgXCJ2XCIpLFxuICAgICAgICAgICAgcm93VHJlZTogdGhpcy5kYXRhLnJvd1RyZWU9PT11bmRlZmluZWQ/dW5kZWZpbmVkOm5ldyBEZW5kcm9ncmFtKHRoaXMuZGF0YS5yb3dUcmVlLCBcImhcIiksXG4gICAgICAgICAgICBoZWF0bWFwOiBuZXcgSGVhdG1hcCh0aGlzLmRhdGEuaGVhdG1hcCwgdXNlTG9nLCBiYXNlLCBjb2xvciwgciwgdG9vbHRpcElkKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnZpc3VhbENvbXBvbmVudHMgPSB7XG4gICAgICAgICAgICBzdmc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbHVtblRyZWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHJvd1RyZWU6IHVuZGVmaW5lZFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMudGl0bGUgPSB0aXRsZTtcbiAgICAgICAgdGhpcy50b29sYmFyID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnRvb2x0aXAgPSB0aGlzLm9iamVjdHMuaGVhdG1hcC50b29sdGlwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSB0aGUgdG9vbGJhciBwYW5lbFxuICAgICAqIEBwYXJhbSBkb21JZCB7U3RyaW5nfSB0aGUgdG9vbGJhcidzIGRvbSBJRFxuICAgICAqIEBwYXJhbSB0b29sdGlwIHtUb29sdGlwfVxuICAgICAqIEByZXR1cm5zIHtUb29sYmFyfVxuICAgICAqL1xuXG4gICAgY3JlYXRlVG9vbGJhcihkb21JZCwgdG9vbHRpcCl7XG4gICAgICAgIHRoaXMudG9vbGJhciA9IG5ldyBUb29sYmFyKGRvbUlkLCB0b29sdGlwKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbGJhcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW5kZXIgdGhlIGRlbmRyb2dyYW1zIGFuZCBjb3JyZXNwb25kaW5nIGhlYXRtYXBcbiAgICAgKiBAcGFyYW0gZG9tSWQge1N0cmluZ30gdGhlIHBhcmVudCBET00gaWQgb2YgdGhlIFNWR1xuICAgICAqIEBwYXJhbSBzdmdJZCB7U3RyaW5nfSBvZiB0aGUgU1ZHXG4gICAgICogQHBhcmFtIHNob3dDb2x1bW5UcmVlIHtCb29sZWFufSByZW5kZXIgdGhlIGNvbHVtbiBkZW5kcm9ncmFtXG4gICAgICogQHBhcmFtIHNob3dSb3dUcmVlIHtCb29sZWFufSByZW5kZXIgdGhlIHJvdyBkZW5kcm9ncmFtXG4gICAgICogQHBhcmFtIGxlZ2VuZFBvcyB7RW51bX0gd2hlcmUgdG8gcGxhY2UgdGhlIGNvbG9yIGxlZ2VuZDogYm90dG9tLCB0b3BcbiAgICAgKiBAcGFyYW0gdGlja3Mge0ludGVnZXJ9IG51bWJlciBvZiBiaW5zIG9mIHRoZSBjb2xvciBsZWdlbmRcbiAgICAgKi9cbiAgICByZW5kZXIoZG9tSWQsIHN2Z0lkLCBzaG93Q29sdW1uVHJlZT10cnVlLCBzaG93Um93VHJlZT10cnVlLCBsZWdlbmRQb3M9XCJ0b3BcIiwgdGlja3M9NSl7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUNvbmZpZyhsZWdlbmRQb3MpO1xuICAgICAgICB0aGlzLnZpc3VhbENvbXBvbmVudHMuc3ZnID0gY3JlYXRlU3ZnKGRvbUlkLCB0aGlzLmNvbmZpZy53LCB0aGlzLmNvbmZpZy5oLCB0aGlzLmNvbmZpZy5tYXJnaW4sIHN2Z0lkKTtcblxuICAgICAgICBsZXQgeGxpc3QgPSB1bmRlZmluZWQsXG4gICAgICAgICAgICB5bGlzdCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoc2hvd0NvbHVtblRyZWUgJiYgdGhpcy5vYmplY3RzLmNvbHVtblRyZWUhPT11bmRlZmluZWQpe1xuICAgICAgICAgICAgdGhpcy52aXN1YWxDb21wb25lbnRzLmNvbHVtblRyZWUgPSB0aGlzLl9yZW5kZXJUcmVlKFwiY29sdW1uXCIsIHRoaXMub2JqZWN0cy5jb2x1bW5UcmVlLCB0aGlzLmNvbmZpZy5wYW5lbHMudG9wKTtcbiAgICAgICAgICAgIHhsaXN0ID0gdGhpcy5vYmplY3RzLmNvbHVtblRyZWUueFNjYWxlLmRvbWFpbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaG93Um93VHJlZSAmJiB0aGlzLm9iamVjdHMucm93VHJlZSAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIHRoaXMudmlzdWFsQ29tcG9uZW50cy5yb3dUcmVlID0gdGhpcy5fcmVuZGVyVHJlZShcInJvd1wiLCB0aGlzLm9iamVjdHMucm93VHJlZSwgdGhpcy5jb25maWcucGFuZWxzLmxlZnQpO1xuICAgICAgICAgICAgeWxpc3QgPSB0aGlzLm9iamVjdHMucm93VHJlZS55U2NhbGUuZG9tYWluKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50aXRsZSAhPSAnJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy50aXRsZSk7XG4gICAgICAgICAgICBzZWxlY3QoYCMke2RvbUlkfS1zdmdgKS5hcHBlbmQoJ3RleHQnKVxuICAgICAgICAgICAgICAgIC5hdHRyKCd4JywgMClcbiAgICAgICAgICAgICAgICAuYXR0cigneScsIDIwKVxuICAgICAgICAgICAgICAgIC50ZXh0KHRoaXMudGl0bGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmVuZGVySGVhdG1hcCh0aGlzLm9iamVjdHMuaGVhdG1hcCwgeGxpc3QsIHlsaXN0LCB0aWNrcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVuZGVyIGEgbmV3aWNrIHRyZWVcbiAgICAgKiBAcGFyYW0gZGlyZWN0aW9uIHtlbnVtfSBjb2x1bW4gb3Igcm93XG4gICAgICogQHBhcmFtIHRyZWUge0RlbmRyb2dyYW19IGEgRGVuZHJvZ3JhbSBvYmplY3RcbiAgICAgKiBAcGFyYW0gY29uZmlnIHtPYmplY3R9IGEgcGFuZWwgY29uZmlnIHdpdGggYXR0cmlidXRlczogeCwgeSwgd2lkdGggYW5kIGhlaWdodFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3JlbmRlclRyZWUoZGlyZWN0aW9uLCB0cmVlLCBjb25maWcpe1xuICAgICAgICBsZXQgc3ZnID0gdGhpcy52aXN1YWxDb21wb25lbnRzLnN2ZztcbiAgICAgICAgY29uc3QgbGFiZWxDbGFzcyA9IGRpcmVjdGlvbj09XCJyb3dcIj9cIi5leHAtbWFwLXlsYWJlbFwiOlwiLmV4cC1tYXAteGxhYmVsXCI7XG5cbiAgICAgICAgY29uc3QgdG9vbHRpcCA9IHRoaXMudmlzdWFsQ29tcG9uZW50cy50b29sdGlwO1xuICAgICAgICBjb25zdCBnID0gc3ZnLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgIC5hdHRyKFwiaWRcIiwgY29uZmlnLmlkKVxuICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgke2NvbmZpZy54fSwgJHtjb25maWcueX0pYCk7XG4gICAgICAgIHRyZWUuZHJhdyhnLCBjb25maWcudywgY29uZmlnLmgpO1xuXG4gICAgICAgIGNvbnN0IG1vdXNlb3V0ID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHNlbGVjdCh0aGlzKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiclwiLCAyKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcIiMzMzNcIik7XG4gICAgICAgICAgICBzdmcuc2VsZWN0QWxsKGxhYmVsQ2xhc3MpLmNsYXNzZWQoXCJoaWdobGlnaHRlZFwiLCBmYWxzZSk7XG4gICAgICAgICAgICBzdmcuc2VsZWN0QWxsKFwiLmxlYWYtY29sb3JcIikuY2xhc3NlZChcImhpZ2hsaWdodGVkXCIsIGZhbHNlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBtb3VzZW92ZXIgPSBmdW5jdGlvbihkKXtcbiAgICAgICAgICAgIHNlbGVjdCh0aGlzKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiclwiLCA2KVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcInJlZFwiKTtcbiAgICAgICAgICAgIGxldCBpZHMgPSBkLmxlYXZlcygpLm1hcCgobm9kZSk9Pm5vZGUuZGF0YS5uYW1lKTtcbiAgICAgICAgICAgIHN2Zy5zZWxlY3RBbGwobGFiZWxDbGFzcylcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChsYWJlbCk9Pmlkcy5pbmNsdWRlcyhsYWJlbCkpXG4gICAgICAgICAgICAgICAgLmNsYXNzZWQoXCJoaWdobGlnaHRlZFwiLCB0cnVlKTtcbiAgICAgICAgICAgIHN2Zy5zZWxlY3RBbGwoXCIubGVhZi1jb2xvclwiKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGxhYmVsKT0+aWRzLmluY2x1ZGVzKGxhYmVsKSlcbiAgICAgICAgICAgICAgICAuY2xhc3NlZChcImhpZ2hsaWdodGVkXCIsIHRydWUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGcuc2VsZWN0QWxsKFwiLmRlbmRyb2dyYW0tbm9kZVwiKVxuICAgICAgICAgICAgLm9uKFwibW91c2VvdmVyXCIsIG1vdXNlb3ZlcilcbiAgICAgICAgICAgIC5vbihcIm1vdXNlb3V0XCIsIG1vdXNlb3V0KTtcbiAgICAgICAgcmV0dXJuIGc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVuZGVyIHRoZSBoZWF0bWFwIGFuZCBjb2xvciBsZWdlbmRcbiAgICAgKiBAcGFyYW0gaGVhdG1hcCB7SGVhdG1hcH0gYSBIZWF0bWFwIG9iamVjdFxuICAgICAqIEBwYXJhbSB4TGlzdCB7TGlzdH0gYSBsaXN0IG9mIHggbGFiZWxzXG4gICAgICogQHBhcmFtIHlMaXN0IHtMaXN0fSBhIGxpc3Qgb2YgeSBsYWJlbHNcbiAgICAgKiBAcGFyYW0gdGlja3Mge0ludGVnZXJ9IHRoZSBudW1iZXIgb2YgYmlucyBpbiB0aGUgY29sb3IgbGVnZW5kXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfcmVuZGVySGVhdG1hcChoZWF0bWFwLCB4TGlzdCwgeUxpc3QsIHRpY2tzPTUpe1xuICAgICAgICBsZXQgZG9tID0gdGhpcy52aXN1YWxDb21wb25lbnRzLnN2ZztcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWcucGFuZWxzLm1haW47XG4gICAgICAgIGNvbnN0IGcgPSBkb20uYXBwZW5kKFwiZ1wiKVxuICAgICAgICAgICAgLmF0dHIoXCJpZFwiLCBjb25maWcuaWQpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKCR7Y29uZmlnLnh9LCAke2NvbmZpZy55fSlgKTtcbiAgICAgICAgaGVhdG1hcC5yZWRyYXcoZywgeExpc3QsIHlMaXN0LCB7dzogY29uZmlnLncsIGg6IGNvbmZpZy5ofSk7XG4gICAgICAgIGhlYXRtYXAuZHJhd0NvbG9yTGVnZW5kKGRvbSwgdGhpcy5jb25maWcucGFuZWxzLmxlZ2VuZCwgdGlja3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkanVzdCB0aGUgbGF5b3V0IGRpbWVuc2lvbnMgYmFzZWQgb24gdGhlIGFjdHVhbCBkYXRhXG4gICAgICogQHBhcmFtIGxlZ2VuZFBvcyB7U3RyaW5nfSBib3R0b20gb3IgdG9wXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfdXBkYXRlQ29uZmlnKGxlZ2VuZFBvcyl7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLm9iamVjdHMucm93VHJlZT09PXVuZGVmaW5lZD8xOnRoaXMub2JqZWN0cy5yb3dUcmVlLmxlYXZlcy5sZW5ndGg7XG5cbiAgICAgICAgLy8gdXBkYXRlcyB0aGUgbGVmdCBwYW5lbCdzIGhlaWdodCBiYXNlZCBvbiB0aGUgZGF0YVxuICAgICAgICB0aGlzLmNvbmZpZy5wYW5lbHMubGVmdC5oID0gdGhpcy5jb25maWcuY2VsbC5oICogcm93czwyMD8yMDp0aGlzLmNvbmZpZy5jZWxsLmggKiByb3dzO1xuICAgICAgICB0aGlzLmNvbmZpZy5oICs9IHRoaXMuY29uZmlnLnBhbmVscy5sZWZ0Lmg7XG4gICAgICAgIHRoaXMuY29uZmlnLnBhbmVscy5tYWluLmggPSB0aGlzLmNvbmZpZy5wYW5lbHMubGVmdC5oO1xuICAgICAgICBpZihsZWdlbmRQb3M9PVwiYm90dG9tXCIpIHRoaXMuY29uZmlnLnBhbmVscy5sZWdlbmQueSArPSB0aGlzLmNvbmZpZy5wYW5lbHMubWFpbi5oICsgdGhpcy5jb25maWcucGFuZWxzLm1haW4ueCArIDUwO1xuXG5cbiAgICB9XG59IiwidmFyIHBpID0gTWF0aC5QSSxcbiAgICB0YXUgPSAyICogcGksXG4gICAgZXBzaWxvbiA9IDFlLTYsXG4gICAgdGF1RXBzaWxvbiA9IHRhdSAtIGVwc2lsb247XG5cbmZ1bmN0aW9uIFBhdGgoKSB7XG4gIHRoaXMuX3gwID0gdGhpcy5feTAgPSAvLyBzdGFydCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgdGhpcy5feDEgPSB0aGlzLl95MSA9IG51bGw7IC8vIGVuZCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgdGhpcy5fID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gcGF0aCgpIHtcbiAgcmV0dXJuIG5ldyBQYXRoO1xufVxuXG5QYXRoLnByb3RvdHlwZSA9IHBhdGgucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogUGF0aCxcbiAgbW92ZVRvOiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gwID0gdGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MCA9IHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBjbG9zZVBhdGg6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl94MSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5feDEgPSB0aGlzLl94MCwgdGhpcy5feTEgPSB0aGlzLl95MDtcbiAgICAgIHRoaXMuXyArPSBcIlpcIjtcbiAgICB9XG4gIH0sXG4gIGxpbmVUbzogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIkxcIiArICh0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBxdWFkcmF0aWNDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJRXCIgKyAoK3gxKSArIFwiLFwiICsgKCt5MSkgKyBcIixcIiArICh0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBiZXppZXJDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIkNcIiArICgreDEpICsgXCIsXCIgKyAoK3kxKSArIFwiLFwiICsgKCt4MikgKyBcIixcIiArICgreTIpICsgXCIsXCIgKyAodGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgYXJjVG86IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCByKSB7XG4gICAgeDEgPSAreDEsIHkxID0gK3kxLCB4MiA9ICt4MiwgeTIgPSAreTIsIHIgPSArcjtcbiAgICB2YXIgeDAgPSB0aGlzLl94MSxcbiAgICAgICAgeTAgPSB0aGlzLl95MSxcbiAgICAgICAgeDIxID0geDIgLSB4MSxcbiAgICAgICAgeTIxID0geTIgLSB5MSxcbiAgICAgICAgeDAxID0geDAgLSB4MSxcbiAgICAgICAgeTAxID0geTAgLSB5MSxcbiAgICAgICAgbDAxXzIgPSB4MDEgKiB4MDEgKyB5MDEgKiB5MDE7XG5cbiAgICAvLyBJcyB0aGUgcmFkaXVzIG5lZ2F0aXZlPyBFcnJvci5cbiAgICBpZiAociA8IDApIHRocm93IG5ldyBFcnJvcihcIm5lZ2F0aXZlIHJhZGl1czogXCIgKyByKTtcblxuICAgIC8vIElzIHRoaXMgcGF0aCBlbXB0eT8gTW92ZSB0byAoeDEseTEpLlxuICAgIGlmICh0aGlzLl94MSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gxID0geDEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSk7XG4gICAgfVxuXG4gICAgLy8gT3IsIGlzICh4MSx5MSkgY29pbmNpZGVudCB3aXRoICh4MCx5MCk/IERvIG5vdGhpbmcuXG4gICAgZWxzZSBpZiAoIShsMDFfMiA+IGVwc2lsb24pKTtcblxuICAgIC8vIE9yLCBhcmUgKHgwLHkwKSwgKHgxLHkxKSBhbmQgKHgyLHkyKSBjb2xsaW5lYXI/XG4gICAgLy8gRXF1aXZhbGVudGx5LCBpcyAoeDEseTEpIGNvaW5jaWRlbnQgd2l0aCAoeDIseTIpP1xuICAgIC8vIE9yLCBpcyB0aGUgcmFkaXVzIHplcm8/IExpbmUgdG8gKHgxLHkxKS5cbiAgICBlbHNlIGlmICghKE1hdGguYWJzKHkwMSAqIHgyMSAtIHkyMSAqIHgwMSkgPiBlcHNpbG9uKSB8fCAhcikge1xuICAgICAgdGhpcy5fICs9IFwiTFwiICsgKHRoaXMuX3gxID0geDEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSk7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlLCBkcmF3IGFuIGFyYyFcbiAgICBlbHNlIHtcbiAgICAgIHZhciB4MjAgPSB4MiAtIHgwLFxuICAgICAgICAgIHkyMCA9IHkyIC0geTAsXG4gICAgICAgICAgbDIxXzIgPSB4MjEgKiB4MjEgKyB5MjEgKiB5MjEsXG4gICAgICAgICAgbDIwXzIgPSB4MjAgKiB4MjAgKyB5MjAgKiB5MjAsXG4gICAgICAgICAgbDIxID0gTWF0aC5zcXJ0KGwyMV8yKSxcbiAgICAgICAgICBsMDEgPSBNYXRoLnNxcnQobDAxXzIpLFxuICAgICAgICAgIGwgPSByICogTWF0aC50YW4oKHBpIC0gTWF0aC5hY29zKChsMjFfMiArIGwwMV8yIC0gbDIwXzIpIC8gKDIgKiBsMjEgKiBsMDEpKSkgLyAyKSxcbiAgICAgICAgICB0MDEgPSBsIC8gbDAxLFxuICAgICAgICAgIHQyMSA9IGwgLyBsMjE7XG5cbiAgICAgIC8vIElmIHRoZSBzdGFydCB0YW5nZW50IGlzIG5vdCBjb2luY2lkZW50IHdpdGggKHgwLHkwKSwgbGluZSB0by5cbiAgICAgIGlmIChNYXRoLmFicyh0MDEgLSAxKSA+IGVwc2lsb24pIHtcbiAgICAgICAgdGhpcy5fICs9IFwiTFwiICsgKHgxICsgdDAxICogeDAxKSArIFwiLFwiICsgKHkxICsgdDAxICogeTAxKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fICs9IFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsMCxcIiArICgrKHkwMSAqIHgyMCA+IHgwMSAqIHkyMCkpICsgXCIsXCIgKyAodGhpcy5feDEgPSB4MSArIHQyMSAqIHgyMSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkxICsgdDIxICogeTIxKTtcbiAgICB9XG4gIH0sXG4gIGFyYzogZnVuY3Rpb24oeCwgeSwgciwgYTAsIGExLCBjY3cpIHtcbiAgICB4ID0gK3gsIHkgPSAreSwgciA9ICtyO1xuICAgIHZhciBkeCA9IHIgKiBNYXRoLmNvcyhhMCksXG4gICAgICAgIGR5ID0gciAqIE1hdGguc2luKGEwKSxcbiAgICAgICAgeDAgPSB4ICsgZHgsXG4gICAgICAgIHkwID0geSArIGR5LFxuICAgICAgICBjdyA9IDEgXiBjY3csXG4gICAgICAgIGRhID0gY2N3ID8gYTAgLSBhMSA6IGExIC0gYTA7XG5cbiAgICAvLyBJcyB0aGUgcmFkaXVzIG5lZ2F0aXZlPyBFcnJvci5cbiAgICBpZiAociA8IDApIHRocm93IG5ldyBFcnJvcihcIm5lZ2F0aXZlIHJhZGl1czogXCIgKyByKTtcblxuICAgIC8vIElzIHRoaXMgcGF0aCBlbXB0eT8gTW92ZSB0byAoeDAseTApLlxuICAgIGlmICh0aGlzLl94MSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fICs9IFwiTVwiICsgeDAgKyBcIixcIiArIHkwO1xuICAgIH1cblxuICAgIC8vIE9yLCBpcyAoeDAseTApIG5vdCBjb2luY2lkZW50IHdpdGggdGhlIHByZXZpb3VzIHBvaW50PyBMaW5lIHRvICh4MCx5MCkuXG4gICAgZWxzZSBpZiAoTWF0aC5hYnModGhpcy5feDEgLSB4MCkgPiBlcHNpbG9uIHx8IE1hdGguYWJzKHRoaXMuX3kxIC0geTApID4gZXBzaWxvbikge1xuICAgICAgdGhpcy5fICs9IFwiTFwiICsgeDAgKyBcIixcIiArIHkwO1xuICAgIH1cblxuICAgIC8vIElzIHRoaXMgYXJjIGVtcHR5PyBXZeKAmXJlIGRvbmUuXG4gICAgaWYgKCFyKSByZXR1cm47XG5cbiAgICAvLyBEb2VzIHRoZSBhbmdsZSBnbyB0aGUgd3Jvbmcgd2F5PyBGbGlwIHRoZSBkaXJlY3Rpb24uXG4gICAgaWYgKGRhIDwgMCkgZGEgPSBkYSAlIHRhdSArIHRhdTtcblxuICAgIC8vIElzIHRoaXMgYSBjb21wbGV0ZSBjaXJjbGU/IERyYXcgdHdvIGFyY3MgdG8gY29tcGxldGUgdGhlIGNpcmNsZS5cbiAgICBpZiAoZGEgPiB0YXVFcHNpbG9uKSB7XG4gICAgICB0aGlzLl8gKz0gXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCwxLFwiICsgY3cgKyBcIixcIiArICh4IC0gZHgpICsgXCIsXCIgKyAoeSAtIGR5KSArIFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsMSxcIiArIGN3ICsgXCIsXCIgKyAodGhpcy5feDEgPSB4MCkgKyBcIixcIiArICh0aGlzLl95MSA9IHkwKTtcbiAgICB9XG5cbiAgICAvLyBJcyB0aGlzIGFyYyBub24tZW1wdHk/IERyYXcgYW4gYXJjIVxuICAgIGVsc2UgaWYgKGRhID4gZXBzaWxvbikge1xuICAgICAgdGhpcy5fICs9IFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsXCIgKyAoKyhkYSA+PSBwaSkpICsgXCIsXCIgKyBjdyArIFwiLFwiICsgKHRoaXMuX3gxID0geCArIHIgKiBNYXRoLmNvcyhhMSkpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5ICsgciAqIE1hdGguc2luKGExKSk7XG4gICAgfVxuICB9LFxuICByZWN0OiBmdW5jdGlvbih4LCB5LCB3LCBoKSB7XG4gICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gwID0gdGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MCA9IHRoaXMuX3kxID0gK3kpICsgXCJoXCIgKyAoK3cpICsgXCJ2XCIgKyAoK2gpICsgXCJoXCIgKyAoLXcpICsgXCJaXCI7XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBwYXRoO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24gY29uc3RhbnQoKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJmdW5jdGlvbiBMaW5lYXIoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuTGluZWFyLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHgsIHkpOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyAvLyBwcm9jZWVkXG4gICAgICBkZWZhdWx0OiB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgTGluZWFyKGNvbnRleHQpO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHgocCkge1xuICByZXR1cm4gcFswXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHkocCkge1xuICByZXR1cm4gcFsxXTtcbn1cbiIsImltcG9ydCB7cGF0aH0gZnJvbSBcImQzLXBhdGhcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuaW1wb3J0IGN1cnZlTGluZWFyIGZyb20gXCIuL2N1cnZlL2xpbmVhclwiO1xuaW1wb3J0IHt4IGFzIHBvaW50WCwgeSBhcyBwb2ludFl9IGZyb20gXCIuL3BvaW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgeCA9IHBvaW50WCxcbiAgICAgIHkgPSBwb2ludFksXG4gICAgICBkZWZpbmVkID0gY29uc3RhbnQodHJ1ZSksXG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIGN1cnZlID0gY3VydmVMaW5lYXIsXG4gICAgICBvdXRwdXQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGxpbmUoZGF0YSkge1xuICAgIHZhciBpLFxuICAgICAgICBuID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIGQsXG4gICAgICAgIGRlZmluZWQwID0gZmFsc2UsXG4gICAgICAgIGJ1ZmZlcjtcblxuICAgIGlmIChjb250ZXh0ID09IG51bGwpIG91dHB1dCA9IGN1cnZlKGJ1ZmZlciA9IHBhdGgoKSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IG47ICsraSkge1xuICAgICAgaWYgKCEoaSA8IG4gJiYgZGVmaW5lZChkID0gZGF0YVtpXSwgaSwgZGF0YSkpID09PSBkZWZpbmVkMCkge1xuICAgICAgICBpZiAoZGVmaW5lZDAgPSAhZGVmaW5lZDApIG91dHB1dC5saW5lU3RhcnQoKTtcbiAgICAgICAgZWxzZSBvdXRwdXQubGluZUVuZCgpO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmluZWQwKSBvdXRwdXQucG9pbnQoK3goZCwgaSwgZGF0YSksICt5KGQsIGksIGRhdGEpKTtcbiAgICB9XG5cbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gb3V0cHV0ID0gbnVsbCwgYnVmZmVyICsgXCJcIiB8fCBudWxsO1xuICB9XG5cbiAgbGluZS54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgbGluZSkgOiB4O1xuICB9O1xuXG4gIGxpbmUueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGxpbmUpIDogeTtcbiAgfTtcblxuICBsaW5lLmRlZmluZWQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZGVmaW5lZCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgbGluZSkgOiBkZWZpbmVkO1xuICB9O1xuXG4gIGxpbmUuY3VydmUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY3VydmUgPSBfLCBjb250ZXh0ICE9IG51bGwgJiYgKG91dHB1dCA9IGN1cnZlKGNvbnRleHQpKSwgbGluZSkgOiBjdXJ2ZTtcbiAgfTtcblxuICBsaW5lLmNvbnRleHQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoXyA9PSBudWxsID8gY29udGV4dCA9IG91dHB1dCA9IG51bGwgOiBvdXRwdXQgPSBjdXJ2ZShjb250ZXh0ID0gXyksIGxpbmUpIDogY29udGV4dDtcbiAgfTtcblxuICByZXR1cm4gbGluZTtcbn1cbiIsImltcG9ydCB7cGF0aH0gZnJvbSBcImQzLXBhdGhcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuaW1wb3J0IGN1cnZlTGluZWFyIGZyb20gXCIuL2N1cnZlL2xpbmVhclwiO1xuaW1wb3J0IGxpbmUgZnJvbSBcIi4vbGluZVwiO1xuaW1wb3J0IHt4IGFzIHBvaW50WCwgeSBhcyBwb2ludFl9IGZyb20gXCIuL3BvaW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgeDAgPSBwb2ludFgsXG4gICAgICB4MSA9IG51bGwsXG4gICAgICB5MCA9IGNvbnN0YW50KDApLFxuICAgICAgeTEgPSBwb2ludFksXG4gICAgICBkZWZpbmVkID0gY29uc3RhbnQodHJ1ZSksXG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIGN1cnZlID0gY3VydmVMaW5lYXIsXG4gICAgICBvdXRwdXQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGFyZWEoZGF0YSkge1xuICAgIHZhciBpLFxuICAgICAgICBqLFxuICAgICAgICBrLFxuICAgICAgICBuID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIGQsXG4gICAgICAgIGRlZmluZWQwID0gZmFsc2UsXG4gICAgICAgIGJ1ZmZlcixcbiAgICAgICAgeDB6ID0gbmV3IEFycmF5KG4pLFxuICAgICAgICB5MHogPSBuZXcgQXJyYXkobik7XG5cbiAgICBpZiAoY29udGV4dCA9PSBudWxsKSBvdXRwdXQgPSBjdXJ2ZShidWZmZXIgPSBwYXRoKCkpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8PSBuOyArK2kpIHtcbiAgICAgIGlmICghKGkgPCBuICYmIGRlZmluZWQoZCA9IGRhdGFbaV0sIGksIGRhdGEpKSA9PT0gZGVmaW5lZDApIHtcbiAgICAgICAgaWYgKGRlZmluZWQwID0gIWRlZmluZWQwKSB7XG4gICAgICAgICAgaiA9IGk7XG4gICAgICAgICAgb3V0cHV0LmFyZWFTdGFydCgpO1xuICAgICAgICAgIG91dHB1dC5saW5lU3RhcnQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRwdXQubGluZUVuZCgpO1xuICAgICAgICAgIG91dHB1dC5saW5lU3RhcnQoKTtcbiAgICAgICAgICBmb3IgKGsgPSBpIC0gMTsgayA+PSBqOyAtLWspIHtcbiAgICAgICAgICAgIG91dHB1dC5wb2ludCh4MHpba10sIHkweltrXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dHB1dC5saW5lRW5kKCk7XG4gICAgICAgICAgb3V0cHV0LmFyZWFFbmQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRlZmluZWQwKSB7XG4gICAgICAgIHgweltpXSA9ICt4MChkLCBpLCBkYXRhKSwgeTB6W2ldID0gK3kwKGQsIGksIGRhdGEpO1xuICAgICAgICBvdXRwdXQucG9pbnQoeDEgPyAreDEoZCwgaSwgZGF0YSkgOiB4MHpbaV0sIHkxID8gK3kxKGQsIGksIGRhdGEpIDogeTB6W2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gb3V0cHV0ID0gbnVsbCwgYnVmZmVyICsgXCJcIiB8fCBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gYXJlYWxpbmUoKSB7XG4gICAgcmV0dXJuIGxpbmUoKS5kZWZpbmVkKGRlZmluZWQpLmN1cnZlKGN1cnZlKS5jb250ZXh0KGNvbnRleHQpO1xuICB9XG5cbiAgYXJlYS54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHgwID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHgxID0gbnVsbCwgYXJlYSkgOiB4MDtcbiAgfTtcblxuICBhcmVhLngwID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHgwID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyZWEpIDogeDA7XG4gIH07XG5cbiAgYXJlYS54MSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4MSA9IF8gPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJlYSkgOiB4MTtcbiAgfTtcblxuICBhcmVhLnkgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeTAgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgeTEgPSBudWxsLCBhcmVhKSA6IHkwO1xuICB9O1xuXG4gIGFyZWEueTAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeTAgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJlYSkgOiB5MDtcbiAgfTtcblxuICBhcmVhLnkxID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHkxID0gXyA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmVhKSA6IHkxO1xuICB9O1xuXG4gIGFyZWEubGluZVgwID1cbiAgYXJlYS5saW5lWTAgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYXJlYWxpbmUoKS54KHgwKS55KHkwKTtcbiAgfTtcblxuICBhcmVhLmxpbmVZMSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBhcmVhbGluZSgpLngoeDApLnkoeTEpO1xuICB9O1xuXG4gIGFyZWEubGluZVgxID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGFyZWFsaW5lKCkueCh4MSkueSh5MCk7XG4gIH07XG5cbiAgYXJlYS5kZWZpbmVkID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRlZmluZWQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIGFyZWEpIDogZGVmaW5lZDtcbiAgfTtcblxuICBhcmVhLmN1cnZlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGN1cnZlID0gXywgY29udGV4dCAhPSBudWxsICYmIChvdXRwdXQgPSBjdXJ2ZShjb250ZXh0KSksIGFyZWEpIDogY3VydmU7XG4gIH07XG5cbiAgYXJlYS5jb250ZXh0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKF8gPT0gbnVsbCA/IGNvbnRleHQgPSBvdXRwdXQgPSBudWxsIDogb3V0cHV0ID0gY3VydmUoY29udGV4dCA9IF8pLCBhcmVhKSA6IGNvbnRleHQ7XG4gIH07XG5cbiAgcmV0dXJuIGFyZWE7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gcG9pbnQodGhhdCwgeCwgeSkge1xuICB0aGF0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oXG4gICAgdGhhdC5feDEgKyB0aGF0Ll9rICogKHRoYXQuX3gyIC0gdGhhdC5feDApLFxuICAgIHRoYXQuX3kxICsgdGhhdC5fayAqICh0aGF0Ll95MiAtIHRoYXQuX3kwKSxcbiAgICB0aGF0Ll94MiArIHRoYXQuX2sgKiAodGhhdC5feDEgLSB4KSxcbiAgICB0aGF0Ll95MiArIHRoYXQuX2sgKiAodGhhdC5feTEgLSB5KSxcbiAgICB0aGF0Ll94MixcbiAgICB0aGF0Ll95MlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2FyZGluYWwoY29udGV4dCwgdGVuc2lvbikge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5fayA9ICgxIC0gdGVuc2lvbikgLyA2O1xufVxuXG5DYXJkaW5hbC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gdGhpcy5feTIgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDI6IHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLCB0aGlzLl95Mik7IGJyZWFrO1xuICAgICAgY2FzZSAzOiBwb2ludCh0aGlzLCB0aGlzLl94MSwgdGhpcy5feTEpOyBicmVhaztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDEpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IHRoaXMuX3gxID0geCwgdGhpcy5feTEgPSB5OyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyAvLyBwcm9jZWVkXG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0gdGhpcy5feDIsIHRoaXMuX3gyID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHRoaXMuX3kyLCB0aGlzLl95MiA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20odGVuc2lvbikge1xuXG4gIGZ1bmN0aW9uIGNhcmRpbmFsKGNvbnRleHQpIHtcbiAgICByZXR1cm4gbmV3IENhcmRpbmFsKGNvbnRleHQsIHRlbnNpb24pO1xuICB9XG5cbiAgY2FyZGluYWwudGVuc2lvbiA9IGZ1bmN0aW9uKHRlbnNpb24pIHtcbiAgICByZXR1cm4gY3VzdG9tKCt0ZW5zaW9uKTtcbiAgfTtcblxuICByZXR1cm4gY2FyZGluYWw7XG59KSgwKTtcbiIsImZ1bmN0aW9uIHNpZ24oeCkge1xuICByZXR1cm4geCA8IDAgPyAtMSA6IDE7XG59XG5cbi8vIENhbGN1bGF0ZSB0aGUgc2xvcGVzIG9mIHRoZSB0YW5nZW50cyAoSGVybWl0ZS10eXBlIGludGVycG9sYXRpb24pIGJhc2VkIG9uXG4vLyB0aGUgZm9sbG93aW5nIHBhcGVyOiBTdGVmZmVuLCBNLiAxOTkwLiBBIFNpbXBsZSBNZXRob2QgZm9yIE1vbm90b25pY1xuLy8gSW50ZXJwb2xhdGlvbiBpbiBPbmUgRGltZW5zaW9uLiBBc3Ryb25vbXkgYW5kIEFzdHJvcGh5c2ljcywgVm9sLiAyMzksIE5PLlxuLy8gTk9WKElJKSwgUC4gNDQzLCAxOTkwLlxuZnVuY3Rpb24gc2xvcGUzKHRoYXQsIHgyLCB5Mikge1xuICB2YXIgaDAgPSB0aGF0Ll94MSAtIHRoYXQuX3gwLFxuICAgICAgaDEgPSB4MiAtIHRoYXQuX3gxLFxuICAgICAgczAgPSAodGhhdC5feTEgLSB0aGF0Ll95MCkgLyAoaDAgfHwgaDEgPCAwICYmIC0wKSxcbiAgICAgIHMxID0gKHkyIC0gdGhhdC5feTEpIC8gKGgxIHx8IGgwIDwgMCAmJiAtMCksXG4gICAgICBwID0gKHMwICogaDEgKyBzMSAqIGgwKSAvIChoMCArIGgxKTtcbiAgcmV0dXJuIChzaWduKHMwKSArIHNpZ24oczEpKSAqIE1hdGgubWluKE1hdGguYWJzKHMwKSwgTWF0aC5hYnMoczEpLCAwLjUgKiBNYXRoLmFicyhwKSkgfHwgMDtcbn1cblxuLy8gQ2FsY3VsYXRlIGEgb25lLXNpZGVkIHNsb3BlLlxuZnVuY3Rpb24gc2xvcGUyKHRoYXQsIHQpIHtcbiAgdmFyIGggPSB0aGF0Ll94MSAtIHRoYXQuX3gwO1xuICByZXR1cm4gaCA/ICgzICogKHRoYXQuX3kxIC0gdGhhdC5feTApIC8gaCAtIHQpIC8gMiA6IHQ7XG59XG5cbi8vIEFjY29yZGluZyB0byBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DdWJpY19IZXJtaXRlX3NwbGluZSNSZXByZXNlbnRhdGlvbnNcbi8vIFwieW91IGNhbiBleHByZXNzIGN1YmljIEhlcm1pdGUgaW50ZXJwb2xhdGlvbiBpbiB0ZXJtcyBvZiBjdWJpYyBCw6l6aWVyIGN1cnZlc1xuLy8gd2l0aCByZXNwZWN0IHRvIHRoZSBmb3VyIHZhbHVlcyBwMCwgcDAgKyBtMCAvIDMsIHAxIC0gbTEgLyAzLCBwMVwiLlxuZnVuY3Rpb24gcG9pbnQodGhhdCwgdDAsIHQxKSB7XG4gIHZhciB4MCA9IHRoYXQuX3gwLFxuICAgICAgeTAgPSB0aGF0Ll95MCxcbiAgICAgIHgxID0gdGhhdC5feDEsXG4gICAgICB5MSA9IHRoYXQuX3kxLFxuICAgICAgZHggPSAoeDEgLSB4MCkgLyAzO1xuICB0aGF0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oeDAgKyBkeCwgeTAgKyBkeCAqIHQwLCB4MSAtIGR4LCB5MSAtIGR4ICogdDEsIHgxLCB5MSk7XG59XG5cbmZ1bmN0aW9uIE1vbm90b25lWChjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5Nb25vdG9uZVgucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPVxuICAgIHRoaXMuX3QwID0gTmFOO1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAyOiB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSwgdGhpcy5feTEpOyBicmVhaztcbiAgICAgIGNhc2UgMzogcG9pbnQodGhpcywgdGhpcy5fdDAsIHNsb3BlMih0aGlzLCB0aGlzLl90MCkpOyBicmVhaztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDEpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB2YXIgdDEgPSBOYU47XG5cbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBpZiAoeCA9PT0gdGhpcy5feDEgJiYgeSA9PT0gdGhpcy5feTEpIHJldHVybjsgLy8gSWdub3JlIGNvaW5jaWRlbnQgcG9pbnRzLlxuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgYnJlYWs7XG4gICAgICBjYXNlIDI6IHRoaXMuX3BvaW50ID0gMzsgcG9pbnQodGhpcywgc2xvcGUyKHRoaXMsIHQxID0gc2xvcGUzKHRoaXMsIHgsIHkpKSwgdDEpOyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHRoaXMuX3QwLCB0MSA9IHNsb3BlMyh0aGlzLCB4LCB5KSk7IGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHk7XG4gICAgdGhpcy5fdDAgPSB0MTtcbiAgfVxufVxuXG5mdW5jdGlvbiBNb25vdG9uZVkoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gbmV3IFJlZmxlY3RDb250ZXh0KGNvbnRleHQpO1xufVxuXG4oTW9ub3RvbmVZLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTW9ub3RvbmVYLnByb3RvdHlwZSkpLnBvaW50ID0gZnVuY3Rpb24oeCwgeSkge1xuICBNb25vdG9uZVgucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcywgeSwgeCk7XG59O1xuXG5mdW5jdGlvbiBSZWZsZWN0Q29udGV4dChjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5SZWZsZWN0Q29udGV4dC5wcm90b3R5cGUgPSB7XG4gIG1vdmVUbzogZnVuY3Rpb24oeCwgeSkgeyB0aGlzLl9jb250ZXh0Lm1vdmVUbyh5LCB4KTsgfSxcbiAgY2xvc2VQYXRoOiBmdW5jdGlvbigpIHsgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTsgfSxcbiAgbGluZVRvOiBmdW5jdGlvbih4LCB5KSB7IHRoaXMuX2NvbnRleHQubGluZVRvKHksIHgpOyB9LFxuICBiZXppZXJDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgeCwgeSkgeyB0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oeTEsIHgxLCB5MiwgeDIsIHksIHgpOyB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gbW9ub3RvbmVYKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBNb25vdG9uZVgoY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb25vdG9uZVkoY29udGV4dCkge1xuICByZXR1cm4gbmV3IE1vbm90b25lWShjb250ZXh0KTtcbn1cbiIsImltcG9ydCB7ZXZlbnR9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcHJvcGFnYXRpb24oKSB7XG4gIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59XG4iLCJpbXBvcnQge3NlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IG5vZXZlbnQgZnJvbSBcIi4vbm9ldmVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2aWV3KSB7XG4gIHZhciByb290ID0gdmlldy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4gICAgICBzZWxlY3Rpb24gPSBzZWxlY3Qodmlldykub24oXCJkcmFnc3RhcnQuZHJhZ1wiLCBub2V2ZW50LCB0cnVlKTtcbiAgaWYgKFwib25zZWxlY3RzdGFydFwiIGluIHJvb3QpIHtcbiAgICBzZWxlY3Rpb24ub24oXCJzZWxlY3RzdGFydC5kcmFnXCIsIG5vZXZlbnQsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIHJvb3QuX19ub3NlbGVjdCA9IHJvb3Quc3R5bGUuTW96VXNlclNlbGVjdDtcbiAgICByb290LnN0eWxlLk1velVzZXJTZWxlY3QgPSBcIm5vbmVcIjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24geWVzZHJhZyh2aWV3LCBub2NsaWNrKSB7XG4gIHZhciByb290ID0gdmlldy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4gICAgICBzZWxlY3Rpb24gPSBzZWxlY3Qodmlldykub24oXCJkcmFnc3RhcnQuZHJhZ1wiLCBudWxsKTtcbiAgaWYgKG5vY2xpY2spIHtcbiAgICBzZWxlY3Rpb24ub24oXCJjbGljay5kcmFnXCIsIG5vZXZlbnQsIHRydWUpO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHNlbGVjdGlvbi5vbihcImNsaWNrLmRyYWdcIiwgbnVsbCk7IH0sIDApO1xuICB9XG4gIGlmIChcIm9uc2VsZWN0c3RhcnRcIiBpbiByb290KSB7XG4gICAgc2VsZWN0aW9uLm9uKFwic2VsZWN0c3RhcnQuZHJhZ1wiLCBudWxsKTtcbiAgfSBlbHNlIHtcbiAgICByb290LnN0eWxlLk1velVzZXJTZWxlY3QgPSByb290Ll9fbm9zZWxlY3Q7XG4gICAgZGVsZXRlIHJvb3QuX19ub3NlbGVjdDtcbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0YXJnZXQsIHR5cGUsIHNlbGVjdGlvbikge1xuICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247XG59XG4iLCJpbXBvcnQge2V2ZW50fSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBub3Byb3BhZ2F0aW9uKCkge1xuICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufVxuIiwiaW1wb3J0IHtkaXNwYXRjaH0gZnJvbSBcImQzLWRpc3BhdGNoXCI7XG5pbXBvcnQge2RyYWdEaXNhYmxlLCBkcmFnRW5hYmxlfSBmcm9tIFwiZDMtZHJhZ1wiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge2N1c3RvbUV2ZW50LCBldmVudCwgbW91c2UsIHNlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtpbnRlcnJ1cHR9IGZyb20gXCJkMy10cmFuc2l0aW9uXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcbmltcG9ydCBCcnVzaEV2ZW50IGZyb20gXCIuL2V2ZW50XCI7XG5pbXBvcnQgbm9ldmVudCwge25vcHJvcGFnYXRpb259IGZyb20gXCIuL25vZXZlbnRcIjtcblxudmFyIE1PREVfRFJBRyA9IHtuYW1lOiBcImRyYWdcIn0sXG4gICAgTU9ERV9TUEFDRSA9IHtuYW1lOiBcInNwYWNlXCJ9LFxuICAgIE1PREVfSEFORExFID0ge25hbWU6IFwiaGFuZGxlXCJ9LFxuICAgIE1PREVfQ0VOVEVSID0ge25hbWU6IFwiY2VudGVyXCJ9O1xuXG52YXIgWCA9IHtcbiAgbmFtZTogXCJ4XCIsXG4gIGhhbmRsZXM6IFtcImVcIiwgXCJ3XCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHgsIGUpIHsgcmV0dXJuIHggJiYgW1t4WzBdLCBlWzBdWzFdXSwgW3hbMV0sIGVbMV1bMV1dXTsgfSxcbiAgb3V0cHV0OiBmdW5jdGlvbih4eSkgeyByZXR1cm4geHkgJiYgW3h5WzBdWzBdLCB4eVsxXVswXV07IH1cbn07XG5cbnZhciBZID0ge1xuICBuYW1lOiBcInlcIixcbiAgaGFuZGxlczogW1wiblwiLCBcInNcIl0ubWFwKHR5cGUpLFxuICBpbnB1dDogZnVuY3Rpb24oeSwgZSkgeyByZXR1cm4geSAmJiBbW2VbMF1bMF0sIHlbMF1dLCBbZVsxXVswXSwgeVsxXV1dOyB9LFxuICBvdXRwdXQ6IGZ1bmN0aW9uKHh5KSB7IHJldHVybiB4eSAmJiBbeHlbMF1bMV0sIHh5WzFdWzFdXTsgfVxufTtcblxudmFyIFhZID0ge1xuICBuYW1lOiBcInh5XCIsXG4gIGhhbmRsZXM6IFtcIm5cIiwgXCJlXCIsIFwic1wiLCBcIndcIiwgXCJud1wiLCBcIm5lXCIsIFwic2VcIiwgXCJzd1wiXS5tYXAodHlwZSksXG4gIGlucHV0OiBmdW5jdGlvbih4eSkgeyByZXR1cm4geHk7IH0sXG4gIG91dHB1dDogZnVuY3Rpb24oeHkpIHsgcmV0dXJuIHh5OyB9XG59O1xuXG52YXIgY3Vyc29ycyA9IHtcbiAgb3ZlcmxheTogXCJjcm9zc2hhaXJcIixcbiAgc2VsZWN0aW9uOiBcIm1vdmVcIixcbiAgbjogXCJucy1yZXNpemVcIixcbiAgZTogXCJldy1yZXNpemVcIixcbiAgczogXCJucy1yZXNpemVcIixcbiAgdzogXCJldy1yZXNpemVcIixcbiAgbnc6IFwibndzZS1yZXNpemVcIixcbiAgbmU6IFwibmVzdy1yZXNpemVcIixcbiAgc2U6IFwibndzZS1yZXNpemVcIixcbiAgc3c6IFwibmVzdy1yZXNpemVcIlxufTtcblxudmFyIGZsaXBYID0ge1xuICBlOiBcIndcIixcbiAgdzogXCJlXCIsXG4gIG53OiBcIm5lXCIsXG4gIG5lOiBcIm53XCIsXG4gIHNlOiBcInN3XCIsXG4gIHN3OiBcInNlXCJcbn07XG5cbnZhciBmbGlwWSA9IHtcbiAgbjogXCJzXCIsXG4gIHM6IFwiblwiLFxuICBudzogXCJzd1wiLFxuICBuZTogXCJzZVwiLFxuICBzZTogXCJuZVwiLFxuICBzdzogXCJud1wiXG59O1xuXG52YXIgc2lnbnNYID0ge1xuICBvdmVybGF5OiArMSxcbiAgc2VsZWN0aW9uOiArMSxcbiAgbjogbnVsbCxcbiAgZTogKzEsXG4gIHM6IG51bGwsXG4gIHc6IC0xLFxuICBudzogLTEsXG4gIG5lOiArMSxcbiAgc2U6ICsxLFxuICBzdzogLTFcbn07XG5cbnZhciBzaWduc1kgPSB7XG4gIG92ZXJsYXk6ICsxLFxuICBzZWxlY3Rpb246ICsxLFxuICBuOiAtMSxcbiAgZTogbnVsbCxcbiAgczogKzEsXG4gIHc6IG51bGwsXG4gIG53OiAtMSxcbiAgbmU6IC0xLFxuICBzZTogKzEsXG4gIHN3OiArMVxufTtcblxuZnVuY3Rpb24gdHlwZSh0KSB7XG4gIHJldHVybiB7dHlwZTogdH07XG59XG5cbi8vIElnbm9yZSByaWdodC1jbGljaywgc2luY2UgdGhhdCBzaG91bGQgb3BlbiB0aGUgY29udGV4dCBtZW51LlxuZnVuY3Rpb24gZGVmYXVsdEZpbHRlcigpIHtcbiAgcmV0dXJuICFldmVudC5idXR0b247XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRFeHRlbnQoKSB7XG4gIHZhciBzdmcgPSB0aGlzLm93bmVyU1ZHRWxlbWVudCB8fCB0aGlzO1xuICByZXR1cm4gW1swLCAwXSwgW3N2Zy53aWR0aC5iYXNlVmFsLnZhbHVlLCBzdmcuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXTtcbn1cblxuLy8gTGlrZSBkMy5sb2NhbCwgYnV0IHdpdGggdGhlIG5hbWUg4oCcX19icnVzaOKAnSByYXRoZXIgdGhhbiBhdXRvLWdlbmVyYXRlZC5cbmZ1bmN0aW9uIGxvY2FsKG5vZGUpIHtcbiAgd2hpbGUgKCFub2RlLl9fYnJ1c2gpIGlmICghKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSByZXR1cm47XG4gIHJldHVybiBub2RlLl9fYnJ1c2g7XG59XG5cbmZ1bmN0aW9uIGVtcHR5KGV4dGVudCkge1xuICByZXR1cm4gZXh0ZW50WzBdWzBdID09PSBleHRlbnRbMV1bMF1cbiAgICAgIHx8IGV4dGVudFswXVsxXSA9PT0gZXh0ZW50WzFdWzFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJ1c2hTZWxlY3Rpb24obm9kZSkge1xuICB2YXIgc3RhdGUgPSBub2RlLl9fYnJ1c2g7XG4gIHJldHVybiBzdGF0ZSA/IHN0YXRlLmRpbS5vdXRwdXQoc3RhdGUuc2VsZWN0aW9uKSA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicnVzaFgoKSB7XG4gIHJldHVybiBicnVzaChYKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJydXNoWSgpIHtcbiAgcmV0dXJuIGJydXNoKFkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGJydXNoKFhZKTtcbn1cblxuZnVuY3Rpb24gYnJ1c2goZGltKSB7XG4gIHZhciBleHRlbnQgPSBkZWZhdWx0RXh0ZW50LFxuICAgICAgZmlsdGVyID0gZGVmYXVsdEZpbHRlcixcbiAgICAgIGxpc3RlbmVycyA9IGRpc3BhdGNoKGJydXNoLCBcInN0YXJ0XCIsIFwiYnJ1c2hcIiwgXCJlbmRcIiksXG4gICAgICBoYW5kbGVTaXplID0gNixcbiAgICAgIHRvdWNoZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGJydXNoKGdyb3VwKSB7XG4gICAgdmFyIG92ZXJsYXkgPSBncm91cFxuICAgICAgICAucHJvcGVydHkoXCJfX2JydXNoXCIsIGluaXRpYWxpemUpXG4gICAgICAuc2VsZWN0QWxsKFwiLm92ZXJsYXlcIilcbiAgICAgIC5kYXRhKFt0eXBlKFwib3ZlcmxheVwiKV0pO1xuXG4gICAgb3ZlcmxheS5lbnRlcigpLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcIm92ZXJsYXlcIilcbiAgICAgICAgLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcImFsbFwiKVxuICAgICAgICAuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLm92ZXJsYXkpXG4gICAgICAubWVyZ2Uob3ZlcmxheSlcbiAgICAgICAgLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGV4dGVudCA9IGxvY2FsKHRoaXMpLmV4dGVudDtcbiAgICAgICAgICBzZWxlY3QodGhpcylcbiAgICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGV4dGVudFswXVswXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGV4dGVudFswXVsxXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBleHRlbnRbMV1bMF0gLSBleHRlbnRbMF1bMF0pXG4gICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGV4dGVudFsxXVsxXSAtIGV4dGVudFswXVsxXSk7XG4gICAgICAgIH0pO1xuXG4gICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvblwiKVxuICAgICAgLmRhdGEoW3R5cGUoXCJzZWxlY3Rpb25cIildKVxuICAgICAgLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwic2VsZWN0aW9uXCIpXG4gICAgICAgIC5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnMuc2VsZWN0aW9uKVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCIjNzc3XCIpXG4gICAgICAgIC5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsIDAuMylcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCIjZmZmXCIpXG4gICAgICAgIC5hdHRyKFwic2hhcGUtcmVuZGVyaW5nXCIsIFwiY3Jpc3BFZGdlc1wiKTtcblxuICAgIHZhciBoYW5kbGUgPSBncm91cC5zZWxlY3RBbGwoXCIuaGFuZGxlXCIpXG4gICAgICAuZGF0YShkaW0uaGFuZGxlcywgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlOyB9KTtcblxuICAgIGhhbmRsZS5leGl0KCkucmVtb3ZlKCk7XG5cbiAgICBoYW5kbGUuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gXCJoYW5kbGUgaGFuZGxlLS1cIiArIGQudHlwZTsgfSlcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gY3Vyc29yc1tkLnR5cGVdOyB9KTtcblxuICAgIGdyb3VwXG4gICAgICAgIC5lYWNoKHJlZHJhdylcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKVxuICAgICAgICAuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsIFwiYWxsXCIpXG4gICAgICAgIC5zdHlsZShcIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvclwiLCBcInJnYmEoMCwwLDAsMClcIilcbiAgICAgICAgLm9uKFwibW91c2Vkb3duLmJydXNoIHRvdWNoc3RhcnQuYnJ1c2hcIiwgc3RhcnRlZCk7XG4gIH1cblxuICBicnVzaC5tb3ZlID0gZnVuY3Rpb24oZ3JvdXAsIHNlbGVjdGlvbikge1xuICAgIGlmIChncm91cC5zZWxlY3Rpb24pIHtcbiAgICAgIGdyb3VwXG4gICAgICAgICAgLm9uKFwic3RhcnQuYnJ1c2hcIiwgZnVuY3Rpb24oKSB7IGVtaXR0ZXIodGhpcywgYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCk7IH0pXG4gICAgICAgICAgLm9uKFwiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaFwiLCBmdW5jdGlvbigpIHsgZW1pdHRlcih0aGlzLCBhcmd1bWVudHMpLmVuZCgpOyB9KVxuICAgICAgICAgIC50d2VlbihcImJydXNoXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIHN0YXRlID0gdGhhdC5fX2JydXNoLFxuICAgICAgICAgICAgICAgIGVtaXQgPSBlbWl0dGVyKHRoYXQsIGFyZ3VtZW50cyksXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMCA9IHN0YXRlLnNlbGVjdGlvbixcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24xID0gZGltLmlucHV0KHR5cGVvZiBzZWxlY3Rpb24gPT09IFwiZnVuY3Rpb25cIiA/IHNlbGVjdGlvbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogc2VsZWN0aW9uLCBzdGF0ZS5leHRlbnQpLFxuICAgICAgICAgICAgICAgIGkgPSBpbnRlcnBvbGF0ZShzZWxlY3Rpb24wLCBzZWxlY3Rpb24xKTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gdHdlZW4odCkge1xuICAgICAgICAgICAgICBzdGF0ZS5zZWxlY3Rpb24gPSB0ID09PSAxICYmIGVtcHR5KHNlbGVjdGlvbjEpID8gbnVsbCA6IGkodCk7XG4gICAgICAgICAgICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgICAgICAgICAgICBlbWl0LmJydXNoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb24wICYmIHNlbGVjdGlvbjEgPyB0d2VlbiA6IHR3ZWVuKDEpO1xuICAgICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cFxuICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgICAgICAgc3RhdGUgPSB0aGF0Ll9fYnJ1c2gsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMSA9IGRpbS5pbnB1dCh0eXBlb2Ygc2VsZWN0aW9uID09PSBcImZ1bmN0aW9uXCIgPyBzZWxlY3Rpb24uYXBwbHkodGhhdCwgYXJncykgOiBzZWxlY3Rpb24sIHN0YXRlLmV4dGVudCksXG4gICAgICAgICAgICAgICAgZW1pdCA9IGVtaXR0ZXIodGhhdCwgYXJncykuYmVmb3Jlc3RhcnQoKTtcblxuICAgICAgICAgICAgaW50ZXJydXB0KHRoYXQpO1xuICAgICAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gc2VsZWN0aW9uMSA9PSBudWxsIHx8IGVtcHR5KHNlbGVjdGlvbjEpID8gbnVsbCA6IHNlbGVjdGlvbjE7XG4gICAgICAgICAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgICAgICAgIGVtaXQuc3RhcnQoKS5icnVzaCgpLmVuZCgpO1xuICAgICAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiByZWRyYXcoKSB7XG4gICAgdmFyIGdyb3VwID0gc2VsZWN0KHRoaXMpLFxuICAgICAgICBzZWxlY3Rpb24gPSBsb2NhbCh0aGlzKS5zZWxlY3Rpb247XG5cbiAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICBncm91cC5zZWxlY3RBbGwoXCIuc2VsZWN0aW9uXCIpXG4gICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwieFwiLCBzZWxlY3Rpb25bMF1bMF0pXG4gICAgICAgICAgLmF0dHIoXCJ5XCIsIHNlbGVjdGlvblswXVsxXSlcbiAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIHNlbGVjdGlvblsxXVswXSAtIHNlbGVjdGlvblswXVswXSlcbiAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBzZWxlY3Rpb25bMV1bMV0gLSBzZWxlY3Rpb25bMF1bMV0pO1xuXG4gICAgICBncm91cC5zZWxlY3RBbGwoXCIuaGFuZGxlXCIpXG4gICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwieFwiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnR5cGVbZC50eXBlLmxlbmd0aCAtIDFdID09PSBcImVcIiA/IHNlbGVjdGlvblsxXVswXSAtIGhhbmRsZVNpemUgLyAyIDogc2VsZWN0aW9uWzBdWzBdIC0gaGFuZGxlU2l6ZSAvIDI7IH0pXG4gICAgICAgICAgLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZVswXSA9PT0gXCJzXCIgPyBzZWxlY3Rpb25bMV1bMV0gLSBoYW5kbGVTaXplIC8gMiA6IHNlbGVjdGlvblswXVsxXSAtIGhhbmRsZVNpemUgLyAyOyB9KVxuICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlID09PSBcIm5cIiB8fCBkLnR5cGUgPT09IFwic1wiID8gc2VsZWN0aW9uWzFdWzBdIC0gc2VsZWN0aW9uWzBdWzBdICsgaGFuZGxlU2l6ZSA6IGhhbmRsZVNpemU7IH0pXG4gICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlID09PSBcImVcIiB8fCBkLnR5cGUgPT09IFwid1wiID8gc2VsZWN0aW9uWzFdWzFdIC0gc2VsZWN0aW9uWzBdWzFdICsgaGFuZGxlU2l6ZSA6IGhhbmRsZVNpemU7IH0pO1xuICAgIH1cblxuICAgIGVsc2Uge1xuICAgICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvbiwuaGFuZGxlXCIpXG4gICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBcIm5vbmVcIilcbiAgICAgICAgICAuYXR0cihcInhcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcInlcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZW1pdHRlcih0aGF0LCBhcmdzKSB7XG4gICAgcmV0dXJuIHRoYXQuX19icnVzaC5lbWl0dGVyIHx8IG5ldyBFbWl0dGVyKHRoYXQsIGFyZ3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gRW1pdHRlcih0aGF0LCBhcmdzKSB7XG4gICAgdGhpcy50aGF0ID0gdGhhdDtcbiAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgIHRoaXMuc3RhdGUgPSB0aGF0Ll9fYnJ1c2g7XG4gICAgdGhpcy5hY3RpdmUgPSAwO1xuICB9XG5cbiAgRW1pdHRlci5wcm90b3R5cGUgPSB7XG4gICAgYmVmb3Jlc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCsrdGhpcy5hY3RpdmUgPT09IDEpIHRoaXMuc3RhdGUuZW1pdHRlciA9IHRoaXMsIHRoaXMuc3RhcnRpbmcgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBzdGFydDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5zdGFydGluZykgdGhpcy5zdGFydGluZyA9IGZhbHNlLCB0aGlzLmVtaXQoXCJzdGFydFwiKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgYnJ1c2g6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5lbWl0KFwiYnJ1c2hcIik7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVuZDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aGlzLmFjdGl2ZSA9PT0gMCkgZGVsZXRlIHRoaXMuc3RhdGUuZW1pdHRlciwgdGhpcy5lbWl0KFwiZW5kXCIpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBlbWl0OiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICBjdXN0b21FdmVudChuZXcgQnJ1c2hFdmVudChicnVzaCwgdHlwZSwgZGltLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLCBsaXN0ZW5lcnMuYXBwbHksIGxpc3RlbmVycywgW3R5cGUsIHRoaXMudGhhdCwgdGhpcy5hcmdzXSk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHN0YXJ0ZWQoKSB7XG4gICAgaWYgKGV2ZW50LnRvdWNoZXMpIHsgaWYgKGV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aCA8IGV2ZW50LnRvdWNoZXMubGVuZ3RoKSByZXR1cm4gbm9ldmVudCgpOyB9XG4gICAgZWxzZSBpZiAodG91Y2hlbmRpbmcpIHJldHVybjtcbiAgICBpZiAoIWZpbHRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSByZXR1cm47XG5cbiAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHR5cGUgPSBldmVudC50YXJnZXQuX19kYXRhX18udHlwZSxcbiAgICAgICAgbW9kZSA9IChldmVudC5tZXRhS2V5ID8gdHlwZSA9IFwib3ZlcmxheVwiIDogdHlwZSkgPT09IFwic2VsZWN0aW9uXCIgPyBNT0RFX0RSQUcgOiAoZXZlbnQuYWx0S2V5ID8gTU9ERV9DRU5URVIgOiBNT0RFX0hBTkRMRSksXG4gICAgICAgIHNpZ25YID0gZGltID09PSBZID8gbnVsbCA6IHNpZ25zWFt0eXBlXSxcbiAgICAgICAgc2lnblkgPSBkaW0gPT09IFggPyBudWxsIDogc2lnbnNZW3R5cGVdLFxuICAgICAgICBzdGF0ZSA9IGxvY2FsKHRoYXQpLFxuICAgICAgICBleHRlbnQgPSBzdGF0ZS5leHRlbnQsXG4gICAgICAgIHNlbGVjdGlvbiA9IHN0YXRlLnNlbGVjdGlvbixcbiAgICAgICAgVyA9IGV4dGVudFswXVswXSwgdzAsIHcxLFxuICAgICAgICBOID0gZXh0ZW50WzBdWzFdLCBuMCwgbjEsXG4gICAgICAgIEUgPSBleHRlbnRbMV1bMF0sIGUwLCBlMSxcbiAgICAgICAgUyA9IGV4dGVudFsxXVsxXSwgczAsIHMxLFxuICAgICAgICBkeCxcbiAgICAgICAgZHksXG4gICAgICAgIG1vdmluZyxcbiAgICAgICAgc2hpZnRpbmcgPSBzaWduWCAmJiBzaWduWSAmJiBldmVudC5zaGlmdEtleSxcbiAgICAgICAgbG9ja1gsXG4gICAgICAgIGxvY2tZLFxuICAgICAgICBwb2ludDAgPSBtb3VzZSh0aGF0KSxcbiAgICAgICAgcG9pbnQgPSBwb2ludDAsXG4gICAgICAgIGVtaXQgPSBlbWl0dGVyKHRoYXQsIGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKTtcblxuICAgIGlmICh0eXBlID09PSBcIm92ZXJsYXlcIikge1xuICAgICAgc3RhdGUuc2VsZWN0aW9uID0gc2VsZWN0aW9uID0gW1xuICAgICAgICBbdzAgPSBkaW0gPT09IFkgPyBXIDogcG9pbnQwWzBdLCBuMCA9IGRpbSA9PT0gWCA/IE4gOiBwb2ludDBbMV1dLFxuICAgICAgICBbZTAgPSBkaW0gPT09IFkgPyBFIDogdzAsIHMwID0gZGltID09PSBYID8gUyA6IG4wXVxuICAgICAgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdzAgPSBzZWxlY3Rpb25bMF1bMF07XG4gICAgICBuMCA9IHNlbGVjdGlvblswXVsxXTtcbiAgICAgIGUwID0gc2VsZWN0aW9uWzFdWzBdO1xuICAgICAgczAgPSBzZWxlY3Rpb25bMV1bMV07XG4gICAgfVxuXG4gICAgdzEgPSB3MDtcbiAgICBuMSA9IG4wO1xuICAgIGUxID0gZTA7XG4gICAgczEgPSBzMDtcblxuICAgIHZhciBncm91cCA9IHNlbGVjdCh0aGF0KVxuICAgICAgICAuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcblxuICAgIHZhciBvdmVybGF5ID0gZ3JvdXAuc2VsZWN0QWxsKFwiLm92ZXJsYXlcIilcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlXSk7XG5cbiAgICBpZiAoZXZlbnQudG91Y2hlcykge1xuICAgICAgZ3JvdXBcbiAgICAgICAgICAub24oXCJ0b3VjaG1vdmUuYnJ1c2hcIiwgbW92ZWQsIHRydWUpXG4gICAgICAgICAgLm9uKFwidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2hcIiwgZW5kZWQsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdmlldyA9IHNlbGVjdChldmVudC52aWV3KVxuICAgICAgICAgIC5vbihcImtleWRvd24uYnJ1c2hcIiwga2V5ZG93bmVkLCB0cnVlKVxuICAgICAgICAgIC5vbihcImtleXVwLmJydXNoXCIsIGtleXVwcGVkLCB0cnVlKVxuICAgICAgICAgIC5vbihcIm1vdXNlbW92ZS5icnVzaFwiLCBtb3ZlZCwgdHJ1ZSlcbiAgICAgICAgICAub24oXCJtb3VzZXVwLmJydXNoXCIsIGVuZGVkLCB0cnVlKTtcblxuICAgICAgZHJhZ0Rpc2FibGUoZXZlbnQudmlldyk7XG4gICAgfVxuXG4gICAgbm9wcm9wYWdhdGlvbigpO1xuICAgIGludGVycnVwdCh0aGF0KTtcbiAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICBlbWl0LnN0YXJ0KCk7XG5cbiAgICBmdW5jdGlvbiBtb3ZlZCgpIHtcbiAgICAgIHZhciBwb2ludDEgPSBtb3VzZSh0aGF0KTtcbiAgICAgIGlmIChzaGlmdGluZyAmJiAhbG9ja1ggJiYgIWxvY2tZKSB7XG4gICAgICAgIGlmIChNYXRoLmFicyhwb2ludDFbMF0gLSBwb2ludFswXSkgPiBNYXRoLmFicyhwb2ludDFbMV0gLSBwb2ludFsxXSkpIGxvY2tZID0gdHJ1ZTtcbiAgICAgICAgZWxzZSBsb2NrWCA9IHRydWU7XG4gICAgICB9XG4gICAgICBwb2ludCA9IHBvaW50MTtcbiAgICAgIG1vdmluZyA9IHRydWU7XG4gICAgICBub2V2ZW50KCk7XG4gICAgICBtb3ZlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW92ZSgpIHtcbiAgICAgIHZhciB0O1xuXG4gICAgICBkeCA9IHBvaW50WzBdIC0gcG9pbnQwWzBdO1xuICAgICAgZHkgPSBwb2ludFsxXSAtIHBvaW50MFsxXTtcblxuICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgIGNhc2UgTU9ERV9TUEFDRTpcbiAgICAgICAgY2FzZSBNT0RFX0RSQUc6IHtcbiAgICAgICAgICBpZiAoc2lnblgpIGR4ID0gTWF0aC5tYXgoVyAtIHcwLCBNYXRoLm1pbihFIC0gZTAsIGR4KSksIHcxID0gdzAgKyBkeCwgZTEgPSBlMCArIGR4O1xuICAgICAgICAgIGlmIChzaWduWSkgZHkgPSBNYXRoLm1heChOIC0gbjAsIE1hdGgubWluKFMgLSBzMCwgZHkpKSwgbjEgPSBuMCArIGR5LCBzMSA9IHMwICsgZHk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBNT0RFX0hBTkRMRToge1xuICAgICAgICAgIGlmIChzaWduWCA8IDApIGR4ID0gTWF0aC5tYXgoVyAtIHcwLCBNYXRoLm1pbihFIC0gdzAsIGR4KSksIHcxID0gdzAgKyBkeCwgZTEgPSBlMDtcbiAgICAgICAgICBlbHNlIGlmIChzaWduWCA+IDApIGR4ID0gTWF0aC5tYXgoVyAtIGUwLCBNYXRoLm1pbihFIC0gZTAsIGR4KSksIHcxID0gdzAsIGUxID0gZTAgKyBkeDtcbiAgICAgICAgICBpZiAoc2lnblkgPCAwKSBkeSA9IE1hdGgubWF4KE4gLSBuMCwgTWF0aC5taW4oUyAtIG4wLCBkeSkpLCBuMSA9IG4wICsgZHksIHMxID0gczA7XG4gICAgICAgICAgZWxzZSBpZiAoc2lnblkgPiAwKSBkeSA9IE1hdGgubWF4KE4gLSBzMCwgTWF0aC5taW4oUyAtIHMwLCBkeSkpLCBuMSA9IG4wLCBzMSA9IHMwICsgZHk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBNT0RFX0NFTlRFUjoge1xuICAgICAgICAgIGlmIChzaWduWCkgdzEgPSBNYXRoLm1heChXLCBNYXRoLm1pbihFLCB3MCAtIGR4ICogc2lnblgpKSwgZTEgPSBNYXRoLm1heChXLCBNYXRoLm1pbihFLCBlMCArIGR4ICogc2lnblgpKTtcbiAgICAgICAgICBpZiAoc2lnblkpIG4xID0gTWF0aC5tYXgoTiwgTWF0aC5taW4oUywgbjAgLSBkeSAqIHNpZ25ZKSksIHMxID0gTWF0aC5tYXgoTiwgTWF0aC5taW4oUywgczAgKyBkeSAqIHNpZ25ZKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGUxIDwgdzEpIHtcbiAgICAgICAgc2lnblggKj0gLTE7XG4gICAgICAgIHQgPSB3MCwgdzAgPSBlMCwgZTAgPSB0O1xuICAgICAgICB0ID0gdzEsIHcxID0gZTEsIGUxID0gdDtcbiAgICAgICAgaWYgKHR5cGUgaW4gZmxpcFgpIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGUgPSBmbGlwWFt0eXBlXV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoczEgPCBuMSkge1xuICAgICAgICBzaWduWSAqPSAtMTtcbiAgICAgICAgdCA9IG4wLCBuMCA9IHMwLCBzMCA9IHQ7XG4gICAgICAgIHQgPSBuMSwgbjEgPSBzMSwgczEgPSB0O1xuICAgICAgICBpZiAodHlwZSBpbiBmbGlwWSkgb3ZlcmxheS5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnNbdHlwZSA9IGZsaXBZW3R5cGVdXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZS5zZWxlY3Rpb24pIHNlbGVjdGlvbiA9IHN0YXRlLnNlbGVjdGlvbjsgLy8gTWF5IGJlIHNldCBieSBicnVzaC5tb3ZlIVxuICAgICAgaWYgKGxvY2tYKSB3MSA9IHNlbGVjdGlvblswXVswXSwgZTEgPSBzZWxlY3Rpb25bMV1bMF07XG4gICAgICBpZiAobG9ja1kpIG4xID0gc2VsZWN0aW9uWzBdWzFdLCBzMSA9IHNlbGVjdGlvblsxXVsxXTtcblxuICAgICAgaWYgKHNlbGVjdGlvblswXVswXSAhPT0gdzFcbiAgICAgICAgICB8fCBzZWxlY3Rpb25bMF1bMV0gIT09IG4xXG4gICAgICAgICAgfHwgc2VsZWN0aW9uWzFdWzBdICE9PSBlMVxuICAgICAgICAgIHx8IHNlbGVjdGlvblsxXVsxXSAhPT0gczEpIHtcbiAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gW1t3MSwgbjFdLCBbZTEsIHMxXV07XG4gICAgICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgICAgICBlbWl0LmJydXNoKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5kZWQoKSB7XG4gICAgICBub3Byb3BhZ2F0aW9uKCk7XG4gICAgICBpZiAoZXZlbnQudG91Y2hlcykge1xuICAgICAgICBpZiAoZXZlbnQudG91Y2hlcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgaWYgKHRvdWNoZW5kaW5nKSBjbGVhclRpbWVvdXQodG91Y2hlbmRpbmcpO1xuICAgICAgICB0b3VjaGVuZGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRvdWNoZW5kaW5nID0gbnVsbDsgfSwgNTAwKTsgLy8gR2hvc3QgY2xpY2tzIGFyZSBkZWxheWVkIVxuICAgICAgICBncm91cC5vbihcInRvdWNobW92ZS5icnVzaCB0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaFwiLCBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRyYWdFbmFibGUoZXZlbnQudmlldywgbW92aW5nKTtcbiAgICAgICAgdmlldy5vbihcImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2hcIiwgbnVsbCk7XG4gICAgICB9XG4gICAgICBncm91cC5hdHRyKFwicG9pbnRlci1ldmVudHNcIiwgXCJhbGxcIik7XG4gICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29ycy5vdmVybGF5KTtcbiAgICAgIGlmIChzdGF0ZS5zZWxlY3Rpb24pIHNlbGVjdGlvbiA9IHN0YXRlLnNlbGVjdGlvbjsgLy8gTWF5IGJlIHNldCBieSBicnVzaC5tb3ZlIChvbiBzdGFydCkhXG4gICAgICBpZiAoZW1wdHkoc2VsZWN0aW9uKSkgc3RhdGUuc2VsZWN0aW9uID0gbnVsbCwgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgICBlbWl0LmVuZCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtleWRvd25lZCgpIHtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgICBjYXNlIDE2OiB7IC8vIFNISUZUXG4gICAgICAgICAgc2hpZnRpbmcgPSBzaWduWCAmJiBzaWduWTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDE4OiB7IC8vIEFMVFxuICAgICAgICAgIGlmIChtb2RlID09PSBNT0RFX0hBTkRMRSkge1xuICAgICAgICAgICAgaWYgKHNpZ25YKSBlMCA9IGUxIC0gZHggKiBzaWduWCwgdzAgPSB3MSArIGR4ICogc2lnblg7XG4gICAgICAgICAgICBpZiAoc2lnblkpIHMwID0gczEgLSBkeSAqIHNpZ25ZLCBuMCA9IG4xICsgZHkgKiBzaWduWTtcbiAgICAgICAgICAgIG1vZGUgPSBNT0RFX0NFTlRFUjtcbiAgICAgICAgICAgIG1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAzMjogeyAvLyBTUEFDRTsgdGFrZXMgcHJpb3JpdHkgb3ZlciBBTFRcbiAgICAgICAgICBpZiAobW9kZSA9PT0gTU9ERV9IQU5ETEUgfHwgbW9kZSA9PT0gTU9ERV9DRU5URVIpIHtcbiAgICAgICAgICAgIGlmIChzaWduWCA8IDApIGUwID0gZTEgLSBkeDsgZWxzZSBpZiAoc2lnblggPiAwKSB3MCA9IHcxIC0gZHg7XG4gICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxIC0gZHk7IGVsc2UgaWYgKHNpZ25ZID4gMCkgbjAgPSBuMSAtIGR5O1xuICAgICAgICAgICAgbW9kZSA9IE1PREVfU1BBQ0U7XG4gICAgICAgICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29ycy5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgbW92ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiByZXR1cm47XG4gICAgICB9XG4gICAgICBub2V2ZW50KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24ga2V5dXBwZWQoKSB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcbiAgICAgICAgY2FzZSAxNjogeyAvLyBTSElGVFxuICAgICAgICAgIGlmIChzaGlmdGluZykge1xuICAgICAgICAgICAgbG9ja1ggPSBsb2NrWSA9IHNoaWZ0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMTg6IHsgLy8gQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfQ0VOVEVSKSB7XG4gICAgICAgICAgICBpZiAoc2lnblggPCAwKSBlMCA9IGUxOyBlbHNlIGlmIChzaWduWCA+IDApIHcwID0gdzE7XG4gICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxOyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjE7XG4gICAgICAgICAgICBtb2RlID0gTU9ERV9IQU5ETEU7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMzI6IHsgLy8gU1BBQ0VcbiAgICAgICAgICBpZiAobW9kZSA9PT0gTU9ERV9TUEFDRSkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgICBpZiAoc2lnblgpIGUwID0gZTEgLSBkeCAqIHNpZ25YLCB3MCA9IHcxICsgZHggKiBzaWduWDtcbiAgICAgICAgICAgICAgaWYgKHNpZ25ZKSBzMCA9IHMxIC0gZHkgKiBzaWduWSwgbjAgPSBuMSArIGR5ICogc2lnblk7XG4gICAgICAgICAgICAgIG1vZGUgPSBNT0RFX0NFTlRFUjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChzaWduWCA8IDApIGUwID0gZTE7IGVsc2UgaWYgKHNpZ25YID4gMCkgdzAgPSB3MTtcbiAgICAgICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgczAgPSBzMTsgZWxzZSBpZiAoc2lnblkgPiAwKSBuMCA9IG4xO1xuICAgICAgICAgICAgICBtb2RlID0gTU9ERV9IQU5ETEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlXSk7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5vZXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplKCkge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuX19icnVzaCB8fCB7c2VsZWN0aW9uOiBudWxsfTtcbiAgICBzdGF0ZS5leHRlbnQgPSBleHRlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBzdGF0ZS5kaW0gPSBkaW07XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgYnJ1c2guZXh0ZW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGV4dGVudCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoW1srX1swXVswXSwgK19bMF1bMV1dLCBbK19bMV1bMF0sICtfWzFdWzFdXV0pLCBicnVzaCkgOiBleHRlbnQ7XG4gIH07XG5cbiAgYnJ1c2guZmlsdGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGZpbHRlciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgYnJ1c2gpIDogZmlsdGVyO1xuICB9O1xuXG4gIGJydXNoLmhhbmRsZVNpemUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaGFuZGxlU2l6ZSA9ICtfLCBicnVzaCkgOiBoYW5kbGVTaXplO1xuICB9O1xuXG4gIGJydXNoLm9uID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlID0gbGlzdGVuZXJzLm9uLmFwcGx5KGxpc3RlbmVycywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IGxpc3RlbmVycyA/IGJydXNoIDogdmFsdWU7XG4gIH07XG5cbiAgcmV0dXJuIGJydXNoO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuaW1wb3J0IHttZWFuLCBxdWFudGlsZSwgZGV2aWF0aW9ufSBmcm9tIFwiZDMtYXJyYXlcIjtcblxuXG4vLyByZWZlcmVuY2U6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0tlcm5lbF8oc3RhdGlzdGljcylcbi8vIHJlZmVyZW5jZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvS2VybmVsX2RlbnNpdHlfZXN0aW1hdGlvblxuZXhwb3J0IGNvbnN0IGtlcm5lbCA9IHtcbiAgICBlcGFuZWNobmlrb3Y6IGZ1bmN0aW9uKHUpe3JldHVybiBNYXRoLmFicyh1KSA8PSAxPyAoMy80KSooMS11KnUpOjB9LFxuICAgIGdhdXNzaWFuOiBmdW5jdGlvbih1KXtyZXR1cm4gMS9NYXRoLnNxcnQoMipNYXRoLlBJKSpNYXRoLmV4cCgtLjUqdSp1KX1cbn07XG5cbi8vIHJlZmVyZW5jZTogaHR0cHM6Ly9naXRodWIuY29tL2phc29uZGF2aWVzL3NjaWVuY2UuanMvYmxvYi9tYXN0ZXIvc3JjL3N0YXRzL2JhbmR3aWR0aC5qc1xuZXhwb3J0IGNvbnN0IGtlcm5lbEJhbmR3aWR0aCA9IHtcbiAgICAvLyBCYW5kd2lkdGggc2VsZWN0b3JzIGZvciBHYXVzc2lhbiBrZXJuZWxzLlxuICAgIG5yZDogZnVuY3Rpb24oeCkge1xuICAgICAgICBsZXQgaXFyID0gcXVhbnRpbGUoeCwgMC43NSkgLSBxdWFudGlsZSh4LCAwLjI1KTtcbiAgICAgICAgbGV0IGggPSBpcXIgLyAxLjM0O1xuICAgICAgICByZXR1cm4gMS4wNiAqIE1hdGgubWluKGRldmlhdGlvbih4KSwgaCkgKiBNYXRoLnBvdyh4Lmxlbmd0aCwgLTEvNSk7XG4gICAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGtlcm5lbDogdGhlIGtlcm5lbCBmdW5jdGlvbiwgc3VjaCBhcyBnYXVzc2lhblxuICogQHBhcmFtIFg6IGxpc3Qgb2YgYmluc1xuICogQHBhcmFtIGg6IHRoZSBiYW5kd2lkdGgsIGVpdGhlciBhIG51bWVyaWNhbCB2YWx1ZSBnaXZlbiBieSB0aGUgdXNlciBvciBjYWxjdWxhdGVkIHVzaW5nIHRoZSBmdW5jdGlvbiBrZXJuZWxCYW5kd2lkdGhcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn06IHRoZSBrZXJuZWwgZGVuc2l0eSBlc3RpbWF0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtlcm5lbERlbnNpdHlFc3RpbWF0b3Ioa2VybmVsLCBYLCBoKXtcbiAgICByZXR1cm4gZnVuY3Rpb24oVikge1xuICAgICAgICAvLyBYIGlzIHRoZSBiaW5zXG4gICAgICAgIHJldHVybiBYLm1hcCgoeCkgPT4gW3gsIG1lYW4oViwgKHYpID0+IGtlcm5lbCgoeC12KS9oKSkvaF0pO1xuICAgIH1cbn1cblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNSAtIDIwMTggVGhlIEJyb2FkIEluc3RpdHV0ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIChodHRwczovL2dpdGh1Yi5jb20vYnJvYWRpbnN0aXR1dGUvZ3RleC12aXovYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAqL1xuLypcbklucHV0IGRhdGEgc3RydWN0dXJlOiBhIGxpc3Qgb2YgZGF0YSBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZTpcbltcbiAgICB7XG4gICAgICAgIGdyb3VwOiBcImdyb3VwMVwiXG4gICAgICAgIGxhYmVsOiBcImRhdGFzZXQgMVwiLFxuICAgICAgICB2YWx1ZXM6IFthIGxpc3Qgb2YgbnVtZXJpY2FsIHZhbHVlc11cbiAgICAgfSxcbiAgICAge1xuICAgICAgICBncm91cDogXCJncm91cDFcIlxuICAgICAgICBsYWJlbDogXCJkYXRhc2V0IDJcIixcbiAgICAgICAgdmFsdWVzOiBbYSBsaXN0IG9mIG51bWVyaWNhbCB2YWx1ZXNdXG4gICAgIH0sXG4gICAgIHtcbiAgICAgICAgZ3JvdXA6IFwiZ3JvdXAyXCJcbiAgICAgICAgbGFiZWw6IFwiZGF0YXNldCAzXCIsXG4gICAgICAgIHZhbHVlczogW2EgbGlzdCBvZiBudW1lcmljYWwgdmFsdWVzXVxuICAgICB9XG5dXG4qL1xuXG5pbXBvcnQge2V4dGVudCwgbWVkaWFuLCBhc2NlbmRpbmcsIHF1YW50aWxlLCBtYXgsIG1pbn0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge25lc3R9IGZyb20gXCJkMy1jb2xsZWN0aW9uXCI7XG5pbXBvcnQge3NjYWxlQmFuZCwgc2NhbGVMaW5lYXJ9IGZyb20gXCJkMy1zY2FsZVwiO1xuaW1wb3J0IHthcmVhfSBmcm9tIFwiZDMtc2hhcGVcIjtcbmltcG9ydCB7YXhpc1RvcCwgYXhpc0JvdHRvbSwgYXhpc0xlZnR9IGZyb20gXCJkMy1heGlzXCI7XG5pbXBvcnQge3NlbGVjdCwgc2VsZWN0QWxsLCBldmVudH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHticnVzaH0gZnJvbSBcImQzLWJydXNoXCI7XG5cbmltcG9ydCB7a2VybmVsRGVuc2l0eUVzdGltYXRvciwga2VybmVsLCBrZXJuZWxCYW5kd2lkdGh9IGZyb20gXCIuL2tkZVwiO1xuaW1wb3J0IFRvb2x0aXAgZnJvbSBcIi4vVG9vbHRpcFwiO1xuaW1wb3J0IFRvb2xiYXIgZnJvbSBcIi4vVG9vbGJhclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHcm91cGVkVmlvbGluIHtcbiAgICAvKipcbiAgICAgKiBjb25zdHJ1Y3RvciBmb3IgR3JvdXBlZFZpb2xpblxuICAgICAqIEBwYXJhbSBkYXRhIHtMaXN0fTogYSBsaXN0IG9mIG9iamVjdHMgd2l0aCBhdHRyaWJ1dGVzOiBncm91cDoge1N0cmluZ30sIGxhYmVsOiB7U3RyaW5nfSwgdmFsdWVzOiB7TGlzdH0gb2YgbnVtZXJpY2FsIHZhbHVlcywgc2l6ZTogaW50ZWdlciwgb3B0aW9uYWxcbiAgICAgKiBAcGFyYW0gZ3JvdXBJbmZvIHtEaWN0aW9uYXJ5fTogbWV0YWRhdGEgb2YgdGhlIGdyb3VwLCBpbmRleGVkIGJ5IGdyb3VwIElEXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoZGF0YSwgZ3JvdXBJbmZvID0ge30pe1xuICAgICAgICB0aGlzLl9zYW5pdHlDaGVjayhkYXRhKTtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5ncm91cEluZm8gPSBncm91cEluZm87XG4gICAgICAgIHRoaXMudG9vbGJhciA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy50b29sdGlwID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIGRvbSB7RE9NfSB0aGUgU1ZHIGRvbSBvYmplY3QgdG8gYXBwZW5kIHRoZSB2aW9saW4gcGxvdCB0b1xuICAgICAqIEBwYXJhbSB3aWR0aCB7RmxvYXR9XG4gICAgICogQHBhcmFtIGhlaWdodCB7RmxvYXR9XG4gICAgICogQHBhcmFtIHhQYWRkaW5nIHtGbG9hdH0gcGFkZGluZyBvZiB0aGUgeCBheGlzXG4gICAgICogQHBhcmFtIHhEb21haW4ge0xpc3R9IHRoZSBvcmRlciBvZiBYIGdyb3Vwc1xuICAgICAqIEBwYXJhbSB5RG9tYWluICB7TGlzdH0gdGhlIG1pbiBhbmQgbWF4IHZhbHVlcyBvZiB0aGUgeSBkb21haW5cbiAgICAgKiBAcGFyYW0geUxhYmVsIHtTdHJpbmd9XG4gICAgICogQHBhcmFtIHNob3dYXG4gICAgICogQHBhcmFtIHNob3dTdWJYXG4gICAgICogQHBhcmFtIHN1YlhBbmdsZVxuICAgICAqIEBwYXJhbSBzaG93V2hpc2tlclxuICAgICAqIEBwYXJhbSBzaG93RGl2aWRlclxuICAgICAqIEBwYXJhbSBzaG93TGVnZW5kXG4gICAgICogQHBhcmFtIHNob3dTaXplXG4gICAgICovXG5cbiAgICByZW5kZXIoZG9tLCB3aWR0aD01MDAsIGhlaWdodD0zNTcsIHhQYWRkaW5nPTAuMDUsIHhEb21haW49dW5kZWZpbmVkLCB5RG9tYWluPVstMywzXSwgeUxhYmVsPVwiWSBheGlzXCIsXG4gICAgICAgICAgIHNob3dYPXRydWUsIHNob3dTdWJYPXRydWUsIHN1YlhBbmdsZT0wLFxuICAgICAgICAgICBzaG93V2hpc2tlcj1mYWxzZSwgc2hvd0RpdmlkZXI9ZmFsc2UsIHNob3dMZWdlbmQ9ZmFsc2UsIHNob3dTaXplPWZhbHNlKXtcblxuICAgICAgICAvLyBkZWZpbmUgdGhlIHJlc2V0IGZvciB0aGlzIHBsb3RcbiAgICAgICAgdGhpcy5yZXNldCA9ICgpID0+IHtcbiAgICAgICAgICAgIGRvbS5zZWxlY3RBbGwoXCIqXCIpLnJlbW92ZSgpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXIoZG9tLCB3aWR0aCwgaGVpZ2h0LCB4UGFkZGluZywgeERvbWFpbiwgeURvbWFpbiwgeUxhYmVsLCBzaG93WCwgc2hvd1N1YlgsIHN1YlhBbmdsZSwgc2hvd1doaXNrZXIsIHNob3dEaXZpZGVyLCBzaG93TGVnZW5kKTtcbiAgICAgICAgfTtcblxuXG4gICAgICAgIC8vIGRlZmluZXMgdGhlIFgsIHN1YlgsIFksIFogc2NhbGVzXG4gICAgICAgIGlmICh5RG9tYWluPT09dW5kZWZpbmVkIHx8IDAgPT0geURvbWFpbi5sZW5ndGgpe1xuICAgICAgICAgICAgbGV0IGFsbFYgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKChkKSA9PiBhbGxWID0gYWxsVi5jb25jYXQoZC52YWx1ZXMpKTtcbiAgICAgICAgICAgIHlEb21haW4gPSBleHRlbnQoYWxsVik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZS1vcmdhbml6ZWQgdGhpcy5kYXRhIGluZGV4ZWQgYnkgZ3JvdXBzXG4gICAgICAgIHRoaXMuZ3JvdXBzID0gbmVzdCgpXG4gICAgICAgICAgICAua2V5KChkKSA9PiBkLmdyb3VwKVxuICAgICAgICAgICAgLmVudHJpZXModGhpcy5kYXRhKTtcblxuICAgICAgICB0aGlzLnNjYWxlID0ge1xuICAgICAgICAgICAgeDogc2NhbGVCYW5kKClcbiAgICAgICAgICAgICAgICAucmFuZ2VSb3VuZChbMCwgd2lkdGhdKVxuICAgICAgICAgICAgICAgIC5kb21haW4oeERvbWFpbnx8dGhpcy5ncm91cHMubWFwKChkKSA9PiBkLmtleSkpXG4gICAgICAgICAgICAgICAgLnBhZGRpbmdJbm5lcih4UGFkZGluZyksXG4gICAgICAgICAgICBzdWJ4OiBzY2FsZUJhbmQoKSxcbiAgICAgICAgICAgIHk6IHNjYWxlTGluZWFyKClcbiAgICAgICAgICAgICAgICAucmFuZ2VSb3VuZChbaGVpZ2h0LCAwXSlcbiAgICAgICAgICAgICAgICAuZG9tYWluKHlEb21haW4pLFxuICAgICAgICAgICAgejogc2NhbGVMaW5lYXIoKSAvLyB0aGlzIGlzIHRoZSB2aW9saW4gd2lkdGgsIHRoZSBkb21haW4gYW5kIHJhbmdlIGFyZSBkZXRlcm1pbmVkIGxhdGVyIGluZGl2aWR1YWxseSBmb3IgZWFjaCB2aW9saW5cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBmb3IgZWFjaCBncm91cFxuICAgICAgICB0aGlzLmdyb3Vwcy5mb3JFYWNoKChnKSA9PiB7XG4gICAgICAgICAgICBsZXQgZ3JvdXAgPSBnLmtleTtcbiAgICAgICAgICAgIGxldCBlbnRyaWVzID0gZy52YWx1ZXM7XG4gICAgICAgICAgICBsZXQgaW5mbyA9IHRoaXMuZ3JvdXBJbmZvW2dyb3VwXTsgLy8gb3B0aW9uYWxcbiAgICAgICAgICAgIGcuaW5kZXggPSB0aGlzLnNjYWxlLnguZG9tYWluKCkuaW5kZXhPZihncm91cCk7XG5cbiAgICAgICAgICAgIGlmIChpbmZvICE9PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgICAvLyByZW5kZXJzIGdyb3VwIGluZm8gc3VjaCBhcyBwLXZhbHVlLCBncm91cCBuYW1lXG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBJbmZvRG9tID0gZG9tLmFwcGVuZChcImdcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBMYWJlbHMgPSBncm91cEluZm9Eb20uc2VsZWN0QWxsKFwiLnZpb2xpbi1ncm91cC1sYWJlbFwiKVxuICAgICAgICAgICAgICAgICAgICAuZGF0YShbJ3B2YWx1ZSddKTtcbiAgICAgICAgICAgICAgICBncm91cExhYmVscy5lbnRlcigpLmFwcGVuZChcInRleHRcIikgLy8gQ29kZSByZXZpZXc6IGNvbnNpZGVyIG1vdmluZyB0aGlzIHBhcnQgdG8gdGhlIGVRVEwgZGFzaGJvYXJkXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKFwieFwiLCAwKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgMClcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInZpb2xpbi1ncm91cC1sYWJlbFwiKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcImZpbGxcIiwgKGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGluZm9bJ3B2YWx1ZVRocmVzaG9sZCddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkPT0ncHZhbHVlJyYmcGFyc2VGbG9hdChpbmZvW2RdKTw9cGFyc2VGbG9hdChpbmZvWydwdmFsdWVUaHJlc2hvbGQnXSk/XCJvcmFuZ2VyZWRcIjpcIlNsYXRlR3JheVwiXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIChkLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgeCA9IHRoaXMuc2NhbGUueChncm91cCkgKyB0aGlzLnNjYWxlLnguYmFuZHdpZHRoKCkvMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB5ID0gdGhpcy5zY2FsZS55KHlEb21haW5bMF0pICsgNTA7IC8vIHRvZG86IGF2b2lkIGhhcmQtY29kZWQgdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYHRyYW5zbGF0ZSgke3h9LCAke3l9KWBcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLnRleHQoKGQpID0+IGAke2R9OiAke3BhcnNlRmxvYXQocGFyc2VGbG9hdChpbmZvW2RdKS50b1ByZWNpc2lvbigzKSkudG9FeHBvbmVudGlhbCgpfWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSB0aGlzLnNjYWxlLnN1YnggYmFzZWQgb24gdGhpcy5zY2FsZS54XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnN1YnhcbiAgICAgICAgICAgICAgICAuZG9tYWluKGVudHJpZXMubWFwKChkKSA9PiBkLmxhYmVsKSlcbiAgICAgICAgICAgICAgICAucmFuZ2VSb3VuZChbdGhpcy5zY2FsZS54KGdyb3VwKSwgdGhpcy5zY2FsZS54KGdyb3VwKSArIHRoaXMuc2NhbGUueC5iYW5kd2lkdGgoKV0pO1xuXG4gICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG5cbiAgICAgICAgICAgICAgICBpZiAoMCA9PSBlbnRyeS52YWx1ZXMubGVuZ3RoKSByZXR1cm47IC8vIG5vIGZ1cnRoZXIgcmVuZGVyaW5nIGlmIHRoaXMgZ3JvdXAgaGFzIG5vIGVudHJpZXNcbiAgICAgICAgICAgICAgICBlbnRyeS52YWx1ZXMgPSBlbnRyeS52YWx1ZXMuc29ydChhc2NlbmRpbmcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RyYXdWaW9saW4oZG9tLCBlbnRyeSwgc2hvd1doaXNrZXIsIGcuaW5kZXgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGFkZHMgdGhlIHN1Yi14IGF4aXMgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgZW50cmllc1xuICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IDE1O1xuICAgICAgICAgICAgaWYgKHNob3dTaXplKXtcbiAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZVNjYWxlID0gc2NhbGVCYW5kKClcbiAgICAgICAgICAgICAgICAgICAgLmRvbWFpbihlbnRyaWVzLm1hcCgoZCkgPT4ge3JldHVybiBkLnNpemU9PXVuZGVmaW5lZD8nKDApJzpgKCR7ZC5zaXplfHwwfSlgfSkpXG4gICAgICAgICAgICAgICAgICAgIC5yYW5nZVJvdW5kKFt0aGlzLnNjYWxlLngoZ3JvdXApLCB0aGlzLnNjYWxlLngoZ3JvdXApICsgdGhpcy5zY2FsZS54LmJhbmR3aWR0aCgpXSk7XG4gICAgICAgICAgICAgICAgIGNvbnN0IHNpemV4RyA9IGRvbS5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidmlvbGluLXNpemUtYXhpc1wiKVxuICAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZSgwLCAke2hlaWdodCArIGJ1ZmZlcn0pYClcbiAgICAgICAgICAgICAgICAgICAgIC5jYWxsKGF4aXNCb3R0b20oc2l6ZVNjYWxlKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaG93U3ViWCkge1xuICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSA1O1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1YnhHID0gZG9tLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInZpb2xpbi1zdWItYXhpc1wiKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKDAsICR7aGVpZ2h0ICsgYnVmZmVyfSlgKVxuICAgICAgICAgICAgICAgICAgICAuY2FsbChheGlzQm90dG9tKHRoaXMuc2NhbGUuc3VieCkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN1YlhBbmdsZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc3VieEcuc2VsZWN0QWxsKFwidGV4dFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJzdGFydFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgYHJvdGF0ZSgke3N1YlhBbmdsZX0sIDIsIDEwKWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHJlbmRlcnMgdGhlIHggYXhpc1xuICAgICAgICBsZXQgYnVmZmVyID0gc2hvd1N1Ylg/NTU6MDsgLy8gQ29kZSByZXZpZXc6IGhhcmQtY29kZWQgdmFsdWVzXG4gICAgICAgIHRoaXMueEF4aXMgPSBzaG93WD9heGlzQm90dG9tKHRoaXMuc2NhbGUueCk6YXhpc0JvdHRvbSh0aGlzLnNjYWxlLngpLnRpY2tGb3JtYXQoXCJcIik7XG4gICAgICAgIGRvbS5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidmlvbGluLXgtYXhpcyBheGlzLS14XCIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKDAsICR7aGVpZ2h0ICsgYnVmZmVyfSlgKVxuICAgICAgICAgICAgLmNhbGwodGhpcy54QXhpcykgLy8gc2V0IHRpY2tGb3JtYXQoXCJcIikgdG8gc2hvdyB0aWNrIG1hcmtzIHdpdGhvdXQgdGV4dCBsYWJlbHNcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcInN0YXJ0XCIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInJvdGF0ZSgzMCwgLTEwLCAxMClcIik7XG5cbiAgICAgICAgLy8gYWRkcyB0aGUgeSBBeGlzXG4gICAgICAgIGJ1ZmZlciA9IDU7XG4gICAgICAgIHRoaXMueUF4aXMgPSBheGlzTGVmdCh0aGlzLnNjYWxlLnkpXG4gICAgICAgICAgICAgICAgICAgIC50aWNrVmFsdWVzKHRoaXMuc2NhbGUueS50aWNrcyg1KSk7XG4gICAgICAgIGRvbS5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidmlvbGluLXktYXhpcyBheGlzLS15XCIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKC0ke2J1ZmZlcn0sIDApYClcbiAgICAgICAgICAgIC5jYWxsKHRoaXMueUF4aXMpO1xuXG4gICAgICAgIC8vIGFkZHMgdGhlIHRleHQgbGFiZWwgZm9yIHRoZSB5IGF4aXNcbiAgICAgICAgZG9tLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAtNDApIC8vIHRvZG86IGF2b2lkIGhhcmQtY29kZWQgdmFsdWVcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCAtNDApXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidmlvbGluLWF4aXMtbGFiZWxcIilcbiAgICAgICAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgXCJzdGFydFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJyb3RhdGUoLTkwKVwiKVxuICAgICAgICAgICAgLnRleHQoeUxhYmVsKTtcblxuICAgICAgICAvLyBwbG90IG1vdXNlIGV2ZW50c1xuICAgICAgICBkb20ub24oXCJtb3VzZW91dFwiLCAoKT0+e1xuICAgICAgICAgICAgaWYodGhpcy50b29sdGlwICE9PSB1bmRlZmluZWQpIHRoaXMudG9vbHRpcC5oaWRlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGFkZCBncm91cCBkaXZpZGVyc1xuICAgICAgICBpZihzaG93RGl2aWRlcil7XG4gICAgICAgICAgICB0aGlzLl9hZGRHcm91cERpdmlkZXIoZG9tKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCBjb2xvciBsZWdlbmRcbiAgICAgICAgaWYgKHNob3dMZWdlbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxlZ2VuZEcgPSBkb20uYXBwZW5kKFwiZ1wiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaWRcIiwgXCJ2aW9saW5MZWdlbmRcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKDAsIDApYCk7XG5cbiAgICAgICAgICAgIGxlZ2VuZEcuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieFwiLCB0aGlzLnNjYWxlLngucmFuZ2UoKVswXSlcbiAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgLTM1KVxuICAgICAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgNjAqKHRoaXMuZ3JvdXBzWzBdLnZhbHVlcy5sZW5ndGgpICsgMTApXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgMjQpXG4gICAgICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBcIm5vbmVcIilcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJzdHJva2VcIiwgXCJzaWx2ZXJcIik7XG5cbiAgICAgICAgICAgIGNvbnN0IGxlZ2VuZHMgPSBsZWdlbmRHLnNlbGVjdEFsbChcIi52aW9saW4tbGVnZW5kXCIpLmRhdGEodGhpcy5ncm91cHNbMF0udmFsdWVzKTtcblxuXG4gICAgICAgICAgICBjb25zdCBnID0gbGVnZW5kcy5lbnRlcigpLmFwcGVuZChcImdcIikuY2xhc3NlZChcInZpb2xpbi1sZWdlbmRcIiwgdHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCB3ID0gMTA7XG4gICAgICAgICAgICBnLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcInhcIiwgKGQsIGkpID0+IDUgKyA2MCooaSkgICsgdGhpcy5zY2FsZS54LnJhbmdlKClbMF0pXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIC0yOClcbiAgICAgICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIHcpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdylcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIChkKSA9PiBkLmNvbG9yKTtcblxuICAgICAgICAgICAgZy5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInZpb2xpbi1sZWdlbmQtdGV4dFwiKVxuICAgICAgICAgICAgICAgIC50ZXh0KChkKSA9PiBkLmxhYmVsKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieFwiLCAoZCwgaSkgPT4gMTcgKyA2MCooaSkgKyB0aGlzLnNjYWxlLngucmFuZ2UoKVswXSlcbiAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgLTIwKTtcbiAgICAgICAgfVxuXG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgdGhlIHRvb2x0aXAgb2JqZWN0XG4gICAgICogQHBhcmFtIGRvbUlkIHtTdHJpbmd9IHRoZSB0b29sdGlwJ3MgZG9tIElEXG4gICAgICogQHJldHVybnMge1Rvb2x0aXB9XG4gICAgICovXG4gICAgY3JlYXRlVG9vbHRpcChkb21JZCl7XG4gICAgICAgIGlmICgkKGAjJHtkb21JZH1gKS5sZW5ndGggPT0gMCkgJCgnPGRpdi8+JykuYXR0cignaWQnLCBkb21JZCkuYXBwZW5kVG8oJCgnYm9keScpKTtcbiAgICAgICAgdGhpcy50b29sdGlwID0gbmV3IFRvb2x0aXAoZG9tSWQpO1xuICAgICAgICBzZWxlY3QoYCMke2RvbUlkfWApLmNsYXNzZWQoJ3Zpb2xpbi10b29sdGlwJywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnRvb2x0aXA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIHRoZSB0b29sYmFyIHBhbmVsXG4gICAgICogQHBhcmFtIGRvbUlkIHtTdHJpbmd9IHRoZSB0b29sYmFyJ3MgZG9tIElEXG4gICAgICogQHBhcmFtIHRvb2x0aXAge1Rvb2x0aXB9XG4gICAgICogQHJldHVybnMge1Rvb2xiYXJ9XG4gICAgICovXG5cbiAgICBjcmVhdGVUb29sYmFyKGRvbUlkLCB0b29sdGlwKXtcbiAgICAgICAgLy8gaWYgKHRvb2x0aXAgPT09IHVuZGVmaW5lZCkgdG9vbHRpcCA9IHRoaXMuY3JlYXRlVG9vbHRpcChkb21JZCk7XG4gICAgICAgIHRoaXMudG9vbGJhciA9IG5ldyBUb29sYmFyKGRvbUlkLCB0b29sdGlwKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbGJhcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYSBicnVzaCB0byB0aGUgcGxvdFxuICAgICAqIEBwYXJhbSBkb20ge0QzfSBEb20gZWxlbWVudFxuICAgICAqL1xuICAgIGFkZEJydXNoKGRvbSl7XG4gICAgICAgIGNvbnN0IHRoZUJydXNoID0gYnJ1c2goKTtcbiAgICAgICAgdGhlQnJ1c2gub24oXCJlbmRcIiwgKCk9Pnt0aGlzLnpvb20oZG9tLCB0aGVCcnVzaCl9KTtcbiAgICAgICAgZG9tLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJicnVzaFwiKVxuICAgICAgICAgICAgLmNhbGwodGhlQnJ1c2gpO1xuICAgIH1cblxuICAgIHpvb20oZG9tLCB0aGVCcnVzaCl7XG4gICAgICAgIGxldCBzID0gZXZlbnQuc2VsZWN0aW9uLFxuICAgICAgICAgICAgaWRlbFRpbWVvdXQsXG4gICAgICAgICAgICBpZGVsRGVsYXkgPSAzNTA7XG4gICAgICAgIGlmICh0aGVCcnVzaCA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghcykge1xuICAgICAgICAgICAgaWYgKCFpZGVsVGltZW91dCkgcmV0dXJuIGlkZWxUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWRlbFRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgfSwgaWRlbERlbGF5KTtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gcmVzZXQgdGhlIGN1cnJlbnQgc2NhbGVzJyBkb21haW5zIGJhc2VkIG9uIHRoZSBicnVzaGVkIHdpbmRvd1xuICAgICAgICAgICAgdGhpcy5zY2FsZS54LmRvbWFpbih0aGlzLnNjYWxlLnguZG9tYWluKCkuZmlsdGVyKChkLCBpKT0+e1xuICAgICAgICAgICAgICAgICAgY29uc3QgbG93Qm91bmQgPSBNYXRoLmZsb29yKHNbMF1bMF0vdGhpcy5zY2FsZS54LmJhbmR3aWR0aCgpKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHVwcGVyQm91bmQgPSBNYXRoLmZsb29yKHNbMV1bMF0vdGhpcy5zY2FsZS54LmJhbmR3aWR0aCgpKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpID49IGxvd0JvdW5kICYmIGkgPD11cHBlckJvdW5kO1xuICAgICAgICAgICAgfSkpOyAvLyBUT0RPOiBhZGQgY29tbWVudHNcblxuICAgICAgICAgICAgY29uc3QgbWluID0gTWF0aC5mbG9vcih0aGlzLnNjYWxlLnkuaW52ZXJ0KHNbMV1bMV0pKTtcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IE1hdGguZmxvb3IodGhpcy5zY2FsZS55LmludmVydChzWzBdWzFdKSk7XG4gICAgICAgICAgICB0aGlzLnNjYWxlLnkuZG9tYWluKFttaW4sIG1heF0pOyAvLyB0b2RvOiBkZWJ1Z1xuXG4gICAgICAgICAgICBkb20uc2VsZWN0KFwiLmJydXNoXCIpLmNhbGwodGhlQnJ1c2gubW92ZSwgbnVsbCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgICAvLyB6b29tXG4gICAgICAgIGxldCB0ID0gZG9tLnRyYW5zaXRpb24oKS5kdXJhdGlvbig3NTApO1xuICAgICAgICBkb20uc2VsZWN0KFwiLmF4aXMtLXhcIikudHJhbnNpdGlvbih0KS5jYWxsKHRoaXMueEF4aXMpO1xuICAgICAgICBkb20uc2VsZWN0KFwiLmF4aXMtLXlcIikudHJhbnNpdGlvbih0KS5jYWxsKHRoaXMueUF4aXMpO1xuXG4gICAgICAgIHRoaXMuZ3JvdXBzLmZvckVhY2goKGdnLCBpKT0+IHtcbiAgICAgICAgICAgIGxldCBncm91cCA9IGdnLmtleTtcbiAgICAgICAgICAgIGxldCBlbnRyaWVzID0gZ2cudmFsdWVzO1xuXG4gICAgICAgICAgICAvLyByZS1kZWZpbmUgdGhlIHN1YngncyByYW5nZVxuICAgICAgICAgICAgdGhpcy5zY2FsZS5zdWJ4XG4gICAgICAgICAgICAgICAgLnJhbmdlUm91bmQoW3RoaXMuc2NhbGUueChncm91cCksIHRoaXMuc2NhbGUueChncm91cCkgKyB0aGlzLnNjYWxlLnguYmFuZHdpZHRoKCldKTtcblxuICAgICAgICAgICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgwID09IGVudHJ5LnZhbHVlcy5sZW5ndGgpIHJldHVybjsgLy8gbm8gZnVydGhlciByZW5kZXJpbmcgaWYgdGhpcyBncm91cCBoYXMgbm8gZW50cmllc1xuICAgICAgICAgICAgICAgIGNvbnN0IGdJbmRleCA9IHRoaXMuc2NhbGUueC5kb21haW4oKS5pbmRleE9mKGdyb3VwKTtcblxuXG4gICAgICAgICAgICAgICAgLy8gcmUtZGVmaW5lIHRoZSBzY2FsZS56J3MgcmFuZ2VcbiAgICAgICAgICAgICAgICB0aGlzLnNjYWxlLnpcbiAgICAgICAgICAgICAgICAgICAgLnJhbmdlKFt0aGlzLnNjYWxlLnN1YngoZW50cnkubGFiZWwpLCB0aGlzLnNjYWxlLnN1YngoZW50cnkubGFiZWwpICsgdGhpcy5zY2FsZS5zdWJ4LmJhbmR3aWR0aCgpXSk7XG5cbiAgICAgICAgICAgICAgICAvLyByZS1yZW5kZXIgdGhlIHZpb2xpblxuICAgICAgICAgICAgICAgIGNvbnN0IGcgPSBkb20uc2VsZWN0KGAjdmlvbGluJHtnZy5pbmRleH0tJHtlbnRyeS5sYWJlbH1gKTtcbiAgICAgICAgICAgICAgICBnLnNlbGVjdChcIi52aW9saW5cIilcbiAgICAgICAgICAgICAgICAgICAgLnRyYW5zaXRpb24odClcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJkXCIsIGFyZWEoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLngwKChkKSA9PiB0aGlzLnNjYWxlLnooZFsxXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAueDEoKGQpID0+IHRoaXMuc2NhbGUueigtZFsxXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAueSgoZCkgPT4gdGhpcy5zY2FsZS55KGRbMF0pKVxuICAgICAgICAgICAgICAgICAgICApO1xuXG5cbiAgICAgICAgICAgICAgICAvLyByZS1yZW5kZXIgdGhlIGJveCBwbG90XG4gICAgICAgICAgICAgICAgLy8gaW50ZXJxdWFydGlsZSByYW5nZVxuICAgICAgICAgICAgICAgIGNvbnN0IHExID0gcXVhbnRpbGUoZW50cnkudmFsdWVzLCAwLjI1KTtcbiAgICAgICAgICAgICAgICBjb25zdCBxMyA9IHF1YW50aWxlKGVudHJ5LnZhbHVlcywgMC43NSk7XG4gICAgICAgICAgICAgICAgY29uc3QgeiA9IDAuMTtcbiAgICAgICAgICAgICAgICBnLnNlbGVjdChcIi52aW9saW4taXJcIilcbiAgICAgICAgICAgICAgICAgICAgLnRyYW5zaXRpb24odClcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIHRoaXMuc2NhbGUueigteikpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKFwieVwiLCB0aGlzLnNjYWxlLnkocTMpKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIE1hdGguYWJzKHRoaXMuc2NhbGUueigteikgLSB0aGlzLnNjYWxlLnooeikpKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBNYXRoLmFicyh0aGlzLnNjYWxlLnkocTMpIC0gdGhpcy5zY2FsZS55KHExKSkpO1xuXG4gICAgICAgICAgICAgICAgLy8gdGhlIG1lZGlhbiBsaW5lXG4gICAgICAgICAgICAgICAgY29uc3QgbWVkID0gbWVkaWFuKGVudHJ5LnZhbHVlcyk7XG4gICAgICAgICAgICAgICAgZy5zZWxlY3QoXCIudmlvbGluLW1lZGlhblwiKVxuICAgICAgICAgICAgICAgICAgICAudHJhbnNpdGlvbih0KVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcIngxXCIsIHRoaXMuc2NhbGUueigteikpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKFwieDJcIiwgdGhpcy5zY2FsZS56KHopKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcInkxXCIsIHRoaXMuc2NhbGUueShtZWQpKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cihcInkyXCIsIHRoaXMuc2NhbGUueShtZWQpKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVuZGVyIHRoZSB2aW9saW4gYW5kIGJveCBwbG90c1xuICAgICAqIEBwYXJhbSBkb20ge0QzIERPTX1cbiAgICAgKiBAcGFyYW0gZW50cnkge09iamVjdH0gd2l0aCBhdHRyczogdmFsdWVzLCBsYWJlbFxuICAgICAqIEBwYXJhbSBzaG93V2hpc2tlciB7Qm9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9kcmF3VmlvbGluKGRvbSwgZW50cnksIHNob3dXaGlza2VyLCBnSW5kZXgpe1xuXG4gICAgICAgIC8vIGdlbmVyYXRlIHRoZSB2ZXJ0aWNlcyBmb3IgdGhlIHZpb2xpbiBwYXRoIHVzZSBhIGtkZVxuICAgICAgICBsZXQga2RlID0ga2VybmVsRGVuc2l0eUVzdGltYXRvcihcbiAgICAgICAgICAgIGtlcm5lbC5nYXVzc2lhbixcbiAgICAgICAgICAgIHRoaXMuc2NhbGUueS50aWNrcygxMDApLCAvLyB1c2UgdXAgdG8gMTAwIHZlcnRpY2VzIGFsb25nIHRoZSBZIGF4aXMgKHRvIGNyZWF0ZSB0aGUgdmlvbGluIHBhdGgpXG4gICAgICAgICAgICBrZXJuZWxCYW5kd2lkdGgubnJkKGVudHJ5LnZhbHVlcykgLy8gZXN0aW1hdGUgdGhlIGJhbmR3aWR0aCBiYXNlZCBvbiB0aGUgZGF0YVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBlRG9tYWluID0gZXh0ZW50KGVudHJ5LnZhbHVlcyk7IC8vIGdldCB0aGUgbWF4IGFuZCBtaW4gaW4gZW50cnkudmFsdWVzXG4gICAgICAgIGNvbnN0IHZlcnRpY2VzID0ga2RlKGVudHJ5LnZhbHVlcykuZmlsdGVyKChkKT0+ZFswXT5lRG9tYWluWzBdJiZkWzBdPGVEb21haW5bMV0pOyAvLyBmaWx0ZXIgdGhlIHZlcnRpY2VzIHRoYXQgYXJlbid0IGluIHRoZSBlbnRyeS52YWx1ZXNcblxuICAgICAgICAvLyBkZWZpbmUgdGhlIHogc2NhbGUgLS0gdGhlIHZpb2xpbiB3aWR0aFxuICAgICAgICBsZXQgek1heCA9IG1heCh2ZXJ0aWNlcywgKGQpPT5NYXRoLmFicyhkWzFdKSk7IC8vIGZpbmQgdGhlIGFicyh2YWx1ZSkgaW4gZW50cnkudmFsdWVzXG4gICAgICAgIHRoaXMuc2NhbGUuelxuICAgICAgICAgICAgLmRvbWFpbihbLXpNYXgsIHpNYXhdKVxuICAgICAgICAgICAgLnJhbmdlKFt0aGlzLnNjYWxlLnN1YngoZW50cnkubGFiZWwpLCB0aGlzLnNjYWxlLnN1YngoZW50cnkubGFiZWwpICsgdGhpcy5zY2FsZS5zdWJ4LmJhbmR3aWR0aCgpXSk7XG5cbiAgICAgICAgLy8gdmlzdWFsIHJlbmRlcmluZ1xuICAgICAgICBjb25zdCB2aW9saW5HID0gZG9tLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgIC5hdHRyKCdpZCcsIGB2aW9saW4ke2dJbmRleH0tJHtlbnRyeS5sYWJlbH1gKTtcblxuICAgICAgICBsZXQgdmlvbGluID0gYXJlYSgpXG4gICAgICAgICAgICAueDAoKGQpID0+IHRoaXMuc2NhbGUueihkWzFdKSlcbiAgICAgICAgICAgIC54MSgoZCkgPT4gdGhpcy5zY2FsZS56KC1kWzFdKSlcbiAgICAgICAgICAgIC55KChkKSA9PiB0aGlzLnNjYWxlLnkoZFswXSkpO1xuXG4gICAgICAgIGNvbnN0IHZQYXRoID0gdmlvbGluRy5hcHBlbmQoXCJwYXRoXCIpXG4gICAgICAgICAgICAuZGF0dW0odmVydGljZXMpXG4gICAgICAgICAgICAuYXR0cihcImRcIiwgdmlvbGluKVxuICAgICAgICAgICAgLmNsYXNzZWQoXCJ2aW9saW5cIiwgdHJ1ZSlcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgKCk9PntcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkuY29sb3IgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGVudHJ5LmNvbG9yO1xuICAgICAgICAgICAgICAgIC8vIGFsdGVybmF0ZSB0aGUgb2RkIGFuZCBldmVuIGNvbG9ycywgbWF5YmUgd2UgZG9uJ3Qgd2FudCB0aGlzIGZlYXR1cmVcbiAgICAgICAgICAgICAgICBpZihnSW5kZXglMiA9PSAwKSByZXR1cm4gXCIjOTBjMWMxXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiIzk0YThiOFwiO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gYm94cGxvdFxuICAgICAgICBjb25zdCBxMSA9IHF1YW50aWxlKGVudHJ5LnZhbHVlcywgMC4yNSk7XG4gICAgICAgIGNvbnN0IHEzID0gcXVhbnRpbGUoZW50cnkudmFsdWVzLCAwLjc1KTtcbiAgICAgICAgY29uc3QgeiA9IHRoaXMuc2NhbGUuei5kb21haW4oKVsxXS8zO1xuXG4gICAgICAgIGlmKHNob3dXaGlza2VyKXtcbiAgICAgICAgICAgIC8vIHRoZSB1cHBlciBhbmQgbG93ZXIgbGltaXRzIG9mIGVudHJ5LnZhbHVlc1xuICAgICAgICAgICAgY29uc3QgaXFyID0gTWF0aC5hYnMocTMtcTEpO1xuICAgICAgICAgICAgY29uc3QgdXBwZXIgPSBtYXgoZW50cnkudmFsdWVzLmZpbHRlcigoZCk9PmQ8cTMrKGlxcioxLjUpKSk7XG4gICAgICAgICAgICBjb25zdCBsb3dlciA9IG1pbihlbnRyeS52YWx1ZXMuZmlsdGVyKChkKT0+ZD5xMS0oaXFyKjEuNSkpKTtcbiAgICAgICAgICAgIGRvbS5hcHBlbmQoXCJsaW5lXCIpXG4gICAgICAgICAgICAgICAgLmNsYXNzZWQoXCJ3aGlza2VyXCIsIHRydWUpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4MVwiLCB0aGlzLnNjYWxlLnooMCkpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCB0aGlzLnNjYWxlLnooMCkpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5MVwiLCB0aGlzLnNjYWxlLnkodXBwZXIpKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieTJcIiwgdGhpcy5zY2FsZS55KGxvd2VyKSlcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJzdHJva2VcIiwgXCIjZmZmXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaW50ZXJxdWFydGlsZSByYW5nZVxuICAgICAgICB2aW9saW5HLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCB0aGlzLnNjYWxlLnooLXopKVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIHRoaXMuc2NhbGUueShxMykpXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIE1hdGguYWJzKHRoaXMuc2NhbGUueigteiktdGhpcy5zY2FsZS56KHopKSlcbiAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIE1hdGguYWJzKHRoaXMuc2NhbGUueShxMykgLSB0aGlzLnNjYWxlLnkocTEpKSlcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ2aW9saW4taXJcIik7XG5cbiAgICAgICAgLy8gbWVkaWFuXG4gICAgICAgIGNvbnN0IG1lZCA9IG1lZGlhbihlbnRyeS52YWx1ZXMpO1xuICAgICAgICB2aW9saW5HLmFwcGVuZChcImxpbmVcIikgLy8gdGhlIG1lZGlhbiBsaW5lXG4gICAgICAgICAgICAuYXR0cihcIngxXCIsIHRoaXMuc2NhbGUueigteikpXG4gICAgICAgICAgICAuYXR0cihcIngyXCIsIHRoaXMuc2NhbGUueih6KSlcbiAgICAgICAgICAgIC5hdHRyKFwieTFcIiwgdGhpcy5zY2FsZS55KG1lZCkpXG4gICAgICAgICAgICAuYXR0cihcInkyXCIsIHRoaXMuc2NhbGUueShtZWQpKVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInZpb2xpbi1tZWRpYW5cIik7XG5cbiAgICAgICAgLy8gbW91c2UgZXZlbnRzXG4gICAgICAgIHZpb2xpbkcub24oXCJtb3VzZW92ZXJcIiwgKCk9PntcbiAgICAgICAgICAgIHZQYXRoLmNsYXNzZWQoXCJoaWdobGlnaHRlZFwiLCB0cnVlKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGVudHJ5KTtcbiAgICAgICAgICAgIGlmKHRoaXMudG9vbHRpcCA9PT0gdW5kZWZpbmVkKSBjb25zb2xlLndhcm4oXCJHcm91cFZpb2xpbiBXYXJuaW5nOiB0b29sdGlwIG5vdCBkZWZpbmVkXCIpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwLnNob3coXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5Lmdyb3VwICsgXCI8YnIvPlwiICtcbiAgICAgICAgICAgICAgICAgICAgZW50cnkubGFiZWwgKyBcIjxici8+XCIgK1xuICAgICAgICAgICAgICAgICAgICBcIk1lZGlhbjogXCIgKyBtZWQudG9QcmVjaXNpb24oNCkgKyBcIjxici8+XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdmlvbGluRy5vbihcIm1vdXNlb3V0XCIsICgpPT57XG4gICAgICAgICAgICB2UGF0aC5jbGFzc2VkKFwiaGlnaGxpZ2h0ZWRcIiwgZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfc2FuaXR5Q2hlY2soZGF0YSl7XG4gICAgICAgIGNvbnN0IGF0dHIgPSBbXCJncm91cFwiLCBcImxhYmVsXCIsIFwidmFsdWVzXCJdO1xuXG4gICAgICAgIGRhdGEuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgICAgICAgYXR0ci5mb3JFYWNoKChhKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRbYV0gPT09IHVuZGVmaW5lZCkgdGhyb3cgXCJHcm91cGVkVmlvbGluOiBpbnB1dCBkYXRhIGVycm9yLlwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIGlmICgwID09IGQudmFsdWVzLmxlbmd0aCkgdGhyb3cgXCJWaW9saW46IElucHV0IGRhdGEgZXJyb3JcIjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX2FkZEdyb3VwRGl2aWRlcihkb20pe1xuICAgICAgICBjb25zdCBncm91cHMgPSB0aGlzLnNjYWxlLnguZG9tYWluKCk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSBNYXRoLmFicyh0aGlzLnNjYWxlLngodGhpcy5zY2FsZS54LmRvbWFpbigpWzFdKSAtIHRoaXMuc2NhbGUueCh0aGlzLnNjYWxlLnguZG9tYWluKClbMF0pIC0gdGhpcy5zY2FsZS54LmJhbmR3aWR0aCgpKTtcblxuICAgICAgICBjb25zdCBnZXRYID0gKGcsIGkpPT4ge1xuICAgICAgICAgICAgaWYgKGkgIT09IGdyb3Vwcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbGUueChnKSArICt0aGlzLnNjYWxlLnguYmFuZHdpZHRoKCkgKyAocGFkZGluZy8yKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZG9tLnNlbGVjdEFsbChcIi52bGluZVwiKS5kYXRhKGdyb3VwcylcbiAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAuYXBwZW5kKFwibGluZVwiKVxuICAgICAgICAgICAgLmNsYXNzZWQoXCJ2bGluZVwiLCB0cnVlKVxuICAgICAgICAgICAgLmF0dHIoXCJ4MVwiLCBnZXRYKVxuICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCBnZXRYKVxuICAgICAgICAgICAgLmF0dHIoXCJ5MVwiLCB0aGlzLnNjYWxlLnkucmFuZ2UoKVswXSlcbiAgICAgICAgICAgIC5hdHRyKFwieTJcIiwgdGhpcy5zY2FsZS55LnJhbmdlKClbMV0pXG4gICAgICAgICAgICAuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwgKGcsIGkpPT5pIT1ncm91cHMubGVuZ3RoLTE/MTowKVxuICAgICAgICAgICAgLnN0eWxlKFwic3Ryb2tlXCIsIFwicmdiKDg2LDk4LDEwNylcIilcbiAgICAgICAgICAgIC5zdHlsZShcIm9wYWNpdHlcIiwgMC41KVxuXG4gICAgfVxuXG5cbn0iLCIvKipcbiAqIENvcHlyaWdodCDCqSAyMDE1IC0gMjAxOCBUaGUgQnJvYWQgSW5zdGl0dXRlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgKGh0dHBzOi8vZ2l0aHViLmNvbS9icm9hZGluc3RpdHV0ZS9ndGV4LXZpei9ibG9iL21hc3Rlci9MSUNFTlNFLm1kKVxuICovXG4vKlxuVGhpcyBjbGFzcyBkZWZpbmVzIGEgZ2VuZSBtb2RlbCAob3IgaXNvZm9ybSksIHJlbmRlcmluZyB0aGUgZXhvbnMgYW5kIGp1bmN0aW9ucyBvZiBhIGdpdmVuIGdlbmUuIFRoZSBtb2RlbCBpcyByZW5kZXJlZCBiYXNlZCBvblxuZ2Vub21pYyBwb3NpdGlvbnMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN0cmFuZCBhbmQgdHJhbnNjcmlwdGlvbmFsIGRpcmVjdGlvbi5cblxuVE9ETzogc2ltcGxpZnkgaXNvZm9ybSBzdHJ1Y3R1cmUgcmVuZGVyaW5nP1xuICovXG5cbmltcG9ydCB7Y3VydmVDYXJkaW5hbCwgbGluZX0gZnJvbSBcImQzLXNoYXBlXCI7XG5pbXBvcnQge21heCwgc3VtfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7c2NhbGVMaW5lYXJ9IGZyb20gXCJkMy1zY2FsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHZW5lTW9kZWwge1xuICAgIC8qKlxuICAgICAqIGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIGdlbmUge09iamVjdH0gd2l0aCBhdHRyaWJ1dGVzOiBzdHJhbmQsIHRyYW5zY3JpcHRJZCwgZ2VuZVN5bWJvbFxuICAgICAqIEBwYXJhbSBleG9ucyB7TGlzdH0gb2YgZXhvbiBvYmplY3RzIHdpdGggYXR0cmlidXRlczogY2hyb20sIGNocm9tU3RhcnQsIGNocm9tRW5kLCBsZW5ndGgsIGV4b25OdW1iZXIsIGV4b25JZFxuICAgICAqIEBwYXJhbSBleG9uc0N1cmF0ZWQge0xpc3R9IG9mIGV4b24gb2JqZWN0cyBpbiB0aGUgZmluYWwgZ2VuZSBtb2RlbC4gVGhpcyBpcyBwcmV0dHkgc3BlY2lmaWMgdG8gR1RFeC4gSWYgdGhpcyBsaXN0IGlzbid0IGF2YWlsYWJsZSBmb3IgeW91ciBkYXRhLCB0aGVuIGp1c3QgcGFzcyBpbiB0aGUgc2FtZSBleG9uIGxpc3QgYWdhaW4uXG4gICAgICogQHBhcmFtIGp1bmN0aW9ucyB7TGlzdH0gb2YganVuY3Rpb24gb2JqZWN0cyB3aXRoIGF0dHJpYnV0ZXM6IGNocm9tLCBjaHJvbVN0YXJ0LCBjaHJvbUVuZCwganVuY3Rpb25JZFxuICAgICAqIEBwYXJhbSBpc0lzb2Zvcm0ge0Jvb2xlYW59XG4gICAgICogQHBhcmFtIG1heEludHJvbkxlbmd0aCB7SW50ZWdlcn0gdGhlIG1heGltdW0gbGVuZ3RoIG9mIGludHJvbi4gSW50cm9uIHJlbmRlcmluZyBpcyBjYXBwZWQgYXQgdGhpcyB2YWx1ZVxuICAgICAqIEBwYXJhbSBtaW5FeG9uV2lkdGgge0ludGVnZXJ9IHRoZSBtaW5pbXVtIHdpZHRoIChwaXhlbHMpIG9mIHRoZSBleG9uIHJlY3RhbmdsZS5cbiAgICAgKi9cblxuICAgIC8qKiBOT1RFOiB0aGUgZXhvbk51bWJlciBpbiBleG9ucyAmIGV4b25zQ3VyYXRlZCBkb24ndCByZWZlciB0byB0aGUgc2FtZSBleG9ucyAoYXQgbGVhc3QgdGhpcyBpcyB0aGUgY2FzZSBpbiBHVEV4KVxuICAgICAqICBUbyBlbnN1cmUgY29ycmVjdCBleG9uIG1hcHBpbmcgb2YgdGhlIGN1cmF0ZWQgZ2VuZSBtb2RlbCB0byB0aGUgb3JpZ2luYWwgbW9kZWwsIGhlcmUgd2UgdXNlIGdlbm9taWMgcG9zaXRpb24uXG4gICAgICovXG4gICAgY29uc3RydWN0b3IgKGdlbmUsIGV4b25zLCBleG9uc0N1cmF0ZWQsIGp1bmN0aW9ucywgaXNJc29mb3JtPWZhbHNlLCBtYXhJbnRyb25MZW5ndGg9MTAwMCwgbWluRXhvbldpZHRoPTApe1xuICAgICAgICB0aGlzLmdlbmUgPSBnZW5lO1xuICAgICAgICB0aGlzLmV4b25zID0gZXhvbnM7XG4gICAgICAgIGlmICh0aGlzLmdlbmUuc3RyYW5kID09IFwiK1wiKSB0aGlzLmV4b25zLnNvcnQoKGEsIGIpPT57cmV0dXJuIE51bWJlcihhLmV4b25OdW1iZXIpLU51bWJlcihiLmV4b25OdW1iZXIpfSk7XG4gICAgICAgIGVsc2UgdGhpcy5leG9ucy5zb3J0KChhLCBiKT0+e3JldHVybiBOdW1iZXIoYi5leG9uTnVtYmVyKS1OdW1iZXIoYS5leG9uTnVtYmVyKX0pO1xuICAgICAgICB0aGlzLmV4b25zQ3VyYXRlZCA9IGV4b25zQ3VyYXRlZC5zb3J0KChhLCBiKT0+e3JldHVybiBOdW1iZXIoYS5leG9uTnVtYmVyKS1OdW1iZXIoYi5leG9uTnVtYmVyKX0pO1xuICAgICAgICB0aGlzLmp1bmN0aW9ucyA9IGp1bmN0aW9ucy5zb3J0KChhLGIpID0+IHtcbiAgICAgICAgICAgIGlmIChhLmp1bmN0aW9uSWQgPCBiLmp1bmN0aW9uSWQpIHJldHVybiAtMTtcbiAgICAgICAgICAgIGlmIChhLmp1bmN0aW9uSWQgPiBiLmp1bmN0aW9uSWQpIHJldHVybiAxO1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0pOyAvLyBzb3J0ZWQgYnkganVuY3Rpb24gSURcbiAgICAgICAgdGhpcy5pc0lzb2Zvcm0gPSBpc0lzb2Zvcm07XG4gICAgICAgIHRoaXMubWF4SW50cm9uTGVuZ3RoID0gbWF4SW50cm9uTGVuZ3RoO1xuXG4gICAgICAgIC8vIGhhcmQtY29kZWQgZm9yIG5vd1xuICAgICAgICB0aGlzLmludHJvbkxlbmd0aCA9IDA7IC8vIGZpeGVkIGZha2UgaW50cm9uIGxlbmd0aCBpbiBiYXNlIHBhaXJzLCBvYnNvbGV0ZT9cbiAgICAgICAgdGhpcy5taW5FeG9uV2lkdGggPSBtaW5FeG9uV2lkdGg7IC8vIG1pbmltdW0gZXhvbiB3aWR0aCBpbiBwaXhlbHNcbiAgICAgICAgdGhpcy5udWxsQ29sb3IgPSAnI0RERERERCc7XG4gICAgfVxuXG4gICAgY2hhbmdlVGV4dGxhYmVsKGRvbSwgbGFiZWwpe1xuICAgICAgICBkb20uc2VsZWN0QWxsKFwiI21vZGVsSW5mb1wiKS50ZXh0KGxhYmVsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBkb20ge09iamVjdH0gb2YgRDNcbiAgICAgKiBAcGFyYW0gamRhdGEge0xpc3R9IG9mIGp1bmN0aW9uIGV4cHJlc3Npb24gb2JqZWN0c1xuICAgICAqIEBwYXJhbSBlZGF0YSB7TGlzdH0gb2YgZXhvbiBleHByZXNzaW9uIG9iamVjdHNcbiAgICAgKiBAcGFyYW0ganNjYWxlIHtEMyBzY2FsZX0gb2YgY29sb3JzIG9mIGp1bmN0aW9uIGRhdGFcbiAgICAgKiBAcGFyYW0gZXNjYWxlIHtEMyBzY2FsZX0gb2YgY29sb3JzIG9mIGV4b24gZGF0YVxuICAgICAqL1xuICAgIGFkZERhdGEoZG9tLCBqZGF0YSwgZWRhdGEsIGpzY2FsZSwgZXNjYWxlKXtcbiAgICAgICAgaWYgKGpkYXRhICE9PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgZG9tLnNlbGVjdEFsbChcIi5qdW5jXCIpLnN0eWxlKFwiZmlsbFwiLCAoZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBqZGF0YS5maWx0ZXIoKHopPT56Lmp1bmN0aW9uSWQ9PWQuanVuY3Rpb25JZClbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgamNvbG9yID0gdi52YWx1ZT09MD90aGlzLm51bGxDb2xvcjpqc2NhbGUodi52YWx1ZSk7XG4gICAgICAgICAgICAgICAgZG9tLnNlbGVjdEFsbChcIi5qdW5jLWN1cnZlXCIpLmZpbHRlcigoYC5qdW5jJHtkLmp1bmN0aW9uSWR9YCkpLnN0eWxlKFwic3Ryb2tlXCIsIGpjb2xvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGpjb2xvcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZG9tLnNlbGVjdEFsbChcIi5leG9uLWN1cmF0ZWRcIikuc3R5bGUoXCJmaWxsXCIsIChkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ID0gZWRhdGEuZmlsdGVyKCh6KT0+ei5leG9uSWQ9PWQuZXhvbklkKVswXTtcbiAgICAgICAgICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHRocm93IGAke2QuZXhvbklkfSBoYXMgbm8gZGF0YWA7XG4gICAgICAgICAgICBjb25zdCBlY29sb3IgPSB2LnZhbHVlID09IDA/dGhpcy5udWxsQ29sb3I6ZXNjYWxlKHYudmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGVjb2xvcjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVuZGVyIHRoZSBTVkcgb2YgdGhlIGdlbmUgbW9kZWxcbiAgICAgKiBAcGFyYW0gZG9tOiBhbiBTVkcgZG9tIG9iamVjdFxuICAgICAqIEBwYXJhbSBjb25maWdcblxuICAgICAqL1xuICAgIHJlbmRlcihkb20sIGNvbmZpZykge1xuICAgICAgICB0aGlzLnNldFhzY2FsZShjb25maWcudyk7XG5cbiAgICAgICAgLyogTm90ZTogZXhvbi54LCBleG9uLncgYXJlIGluIHBpeGVscyBmb3IgdmlzdWFsIHJlbmRlcmluZyAqL1xuICAgICAgICAvKiBOb3RlOiBleG9uLmxlbmd0aCBpcyBpbiBiYXNlIHBhaXJzICovXG4gICAgICAgIC8vIGNhbGN1bGF0aW5nIHggYW5kIHcgZm9yIGVhY2ggZXhvblxuICAgICAgICBjb25zdCBleG9uWSA9IGNvbmZpZy5oLzI7IC8vIFRPRE86IHJlbW92ZSBoYXJkLWNvZGVkIHZhbHVlc1xuICAgICAgICB0aGlzLmV4b25zLmZvckVhY2goKGQsIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChpID09IDApIHtcbiAgICAgICAgICAgICAgICBkLnggPSAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkLnggPSB0aGlzLmV4b25zW2ktMV0ueCArIHRoaXMuZXhvbnNbaS0xXS53ICsgdGhpcy54U2NhbGUoZC5pbnRyb25MZW5ndGg+dGhpcy5tYXhJbnRyb25MZW5ndGg/dGhpcy5tYXhJbnRyb25MZW5ndGg6ZC5pbnRyb25MZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZC53ID0gdGhpcy54U2NhbGUoZC5sZW5ndGgpPHRoaXMubWluRXhvbldpZHRoP3RoaXMubWluRXhvbldpZHRoOnRoaXMueFNjYWxlKGQubGVuZ3RoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gY2FsY3VsYWluZyB4IGFuZCB3IG9mIHRoZSByZWN0YW5nbGUgZm9yIGVhY2ggY3VyYXRlZCBleG9uIG9uIHRoZSBmaW5hbCBnZW5lIG1vZGVsXG4gICAgICAgIHRoaXMuZXhvbnNDdXJhdGVkLmZvckVhY2goKGQsIGkpID0+IHtcbiAgICAgICAgICAgIC8vIGZpcnN0LCBtYXAgZWFjaCBmaW5hbCBjdXJhdGVkIGV4b24gdG8gdGhlIG9yaWdpbmFsIGZ1bGwgZ2VuZSBtb2RlbC0tZmluZCB0aGUgb3JpZ2luYWwgZXhvblxuICAgICAgICAgICAgLy8gZmluZCB0aGUgb3JpZ2luYWwgZXhvblxuICAgICAgICAgICAgZC5vcmlFeG9uID0gdGhpcy5fZmluZEV4b24oZC5jaHJvbVN0YXJ0KXx8dGhpcy5fZmluZEV4b24oZC5jaHJvbUVuZCk7XG4gICAgICAgICAgICBpZiAoZC5vcmlFeG9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBub3QgZm91bmRcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYCR7dGhpcy5nZW5lLnRyYW5zY3JpcHRJZH0tJHtkLmV4b25JZH0gY2FuJ3QgbWFwIHRvIGZ1bGwgZ2VuZSBtb2RlbGApO1xuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaWdub3JlIHVubWFwcGFibGUgZXhvbnMsIHRoaXMgaGFwcGVucyBhdCB0aW1lcyAod2h5PylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2FsY3VsYXRlIGZvciB4XG4gICAgICAgICAgICBpZiAoTnVtYmVyKGQub3JpRXhvbi5jaHJvbVN0YXJ0KSA9PSBOdW1iZXIoZC5jaHJvbVN0YXJ0KSkgZC54ID0gZC5vcmlFeG9uLng7XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgZXhvbiBkb2Vzbid0IHN0YXJ0IGZyb20gdGhlIG9yaUV4b24gc3RhcnQgcG9zXG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdCA9IE51bWJlcihkLmNocm9tU3RhcnQpIC0gTnVtYmVyKGQub3JpRXhvbi5jaHJvbVN0YXJ0KSArIDE7XG4gICAgICAgICAgICAgICAgZC54ID0gZC5vcmlFeG9uLnggKyB0aGlzLnhTY2FsZShkaXN0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2FsY3VsYXRlIGZvciB3XG4gICAgICAgICAgICBpZiAoZC5sZW5ndGggPT09IHVuZGVmaW5lZCkgZC5sZW5ndGggPSBOdW1iZXIoZC5jaHJvbUVuZCkgLSBOdW1iZXIoZC5jaHJvbVN0YXJ0KSArIDE7XG4gICAgICAgICAgICBkLncgPSB0aGlzLnhTY2FsZShkLmxlbmd0aCk8dGhpcy5taW5FeG9uV2lkdGg/dGhpcy5taW5FeG9uV2lkdGg6dGhpcy54U2NhbGUoZC5sZW5ndGgpO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmKCF0aGlzLmlzSXNvZm9ybSl7XG4gICAgICAgICAgICAvLyBOT1RFOiBkbyBub3QgYWx0ZXIgdGhlIHJlbmRlcmluZyBvcmRlciBvZiB2aXN1YWwgY29tcG9uZW50cy5cbiAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYSBnZW5lIG1vZGVsLCBub3QgYW4gaXNvZm9ybVxuICAgICAgICAgICAgLy8gY2FsY3VsYXRpbmcgcG9zaXRpb25zIGZvciBlYWNoIGp1bmN0aW9uXG4gICAgICAgICAgICB0aGlzLmp1bmN0aW9ucyA9IHRoaXMuanVuY3Rpb25zLmZpbHRlcigoZCk9PntcbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBmaWx0ZXIgdW5tYXBwZWQganVuY3Rpb25zXG4gICAgICAgICAgICAgICAgZC5zdGFydEV4b24gPSB0aGlzLl9maW5kRXhvbihkLmNocm9tU3RhcnQpO1xuICAgICAgICAgICAgICAgIGQuZW5kRXhvbiA9IHRoaXMuX2ZpbmRFeG9uKGQuY2hyb21FbmQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkLnN0YXJ0RXhvbiAhPT0gdW5kZWZpbmVkICYmIGQuZW5kRXhvbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuanVuY3Rpb25zLnNvcnQoKGEsYik9PntcbiAgICAgICAgICAgICAgICAvLyBmaXJzdCBzb3J0IGJ5IGNocm9tU3RhcnRcbiAgICAgICAgICAgICAgICBpZiAoK2EuY2hyb21TdGFydCA8ICtiLmNocm9tU3RhcnQpIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICBpZiAoK2EuY2hyb21TdGFydCA+ICtiLmNocm9tU3RhcnQpIHJldHVybiAxO1xuXG4gICAgICAgICAgICAgICAgLy8gdGhlbiBzb3J0IGJ5IGNocm9tRW5kOlxuICAgICAgICAgICAgICAgIGlmICgrYS5jaHJvbUVuZCA8ICtiLmNocm9tRW5kKSByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgaWYgKCthLmNocm9tRW5kID4gK2IuY2hyb21FbmQpIHJldHVybiAxO1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmp1bmN0aW9ucy5mb3JFYWNoKChkLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZC5zdGFydEV4b24gPSB0aGlzLl9maW5kRXhvbihkLmNocm9tU3RhcnQpO1xuICAgICAgICAgICAgICAgIC8vIGQuZW5kRXhvbiA9IHRoaXMuX2ZpbmRFeG9uKGQuY2hyb21FbmQpO1xuICAgICAgICAgICAgICAgIGQuZGlzcGxheU5hbWUgPSBgSnVuY3Rpb24gJHtpKzF9YDtcblxuXG4gICAgICAgICAgICAgICAgLy8gZC5kaXNwbGF5TmFtZSA9IGBFeG9uICR7ZC5zdGFydEV4b24uZXhvbk51bWJlcn0gLSAke2QuZW5kRXhvbi5leG9uTnVtYmVyfWA7XG4gICAgICAgICAgICAgICAgLy8gaWYgKGQuc3RhcnRFeG9uLmV4b25OdW1iZXIgPT0gZC5lbmRFeG9uLmV4b25OdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgY29uc29sZS53YXJuKGQuanVuY3Rpb25JZCArIFwiIGlzIGluIEV4b246IFwiICtkLnN0YXJ0RXhvbi5jaHJvbVN0YXJ0ICsgXCIgLSBcIiArIGQuc3RhcnRFeG9uLmNocm9tRW5kICk7XG4gICAgICAgICAgICAgICAgLy8gfSAvLyB3aGF0IGlzIGhhcHBlbmluZ1xuXG4gICAgICAgICAgICAgICAgLy8gZC5maWx0ZXJlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgLy8gY2FsY3VsYXRlIGZvciBwb3NpdGlvbnNcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0ID0gTnVtYmVyKGQuY2hyb21TdGFydCkgLSBOdW1iZXIoZC5zdGFydEV4b24uY2hyb21TdGFydCkgKyAxO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3QyID0gTnVtYmVyKGQuY2hyb21FbmQpIC0gTnVtYmVyKGQuZW5kRXhvbi5jaHJvbVN0YXJ0KSArIDE7XG5cbiAgICAgICAgICAgICAgICBkLnN0YXJ0WCA9IGQuc3RhcnRFeG9uLnggKyB0aGlzLnhTY2FsZShkaXN0KTtcbiAgICAgICAgICAgICAgICBkLmVuZFggPSBkLmVuZEV4b24ueCArIHRoaXMueFNjYWxlKGRpc3QyKTtcbiAgICAgICAgICAgICAgICBkLmN4ID0gZC5zdGFydFggKyAoZC5lbmRYIC0gZC5zdGFydFggKyAxKS8yOyAvLyBqdW5jdGlvbiBpcyByZW5kZXJlZCBhdCB0aGUgbWlkcG9pbnQgYmV0d2VlbiBzdGFydFggYW5kIGVuZFhcbiAgICAgICAgICAgICAgICBkLmN5ID0gZXhvblkgLSAxNSAqICggTWF0aC5hYnMoTnVtYmVyKGQuZW5kRXhvbi5leG9uTnVtYmVyKSAtIE51bWJlcihkLnN0YXJ0RXhvbi5leG9uTnVtYmVyKSkgKyAwLjUgKTtcbiAgICAgICAgICAgICAgICBpZiAoZC5jeSA8IDApIGQuY3kgPSAwO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gaGFuZGxpbmcgZWRnZSBjYXNlOiBvdmVybGFwcGluZyBqdW5jdGlvbnMsIGFkZCBqaXR0ZXJcbiAgICAgICAgICAgIC8vIGEucmVkdWNlKChyLGspPT57cltrXT0xK3Jba118fDE7cmV0dXJuIHJ9LHt9KVxuICAgICAgICAgICAgY29uc3QgY291bnRzID0gdGhpcy5qdW5jdGlvbnMucmVkdWNlKChyLGQpPT57cltkLmRpc3BsYXlOYW1lXT0xK3JbZC5kaXNwbGF5TmFtZV18fDE7cmV0dXJuIHJ9LHt9KTtcbiAgICAgICAgICAgIHRoaXMuanVuY3Rpb25zLmZvckVhY2goKGQpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBqaXR0ZXJcbiAgICAgICAgICAgICAgICBpZihjb3VudHNbZC5kaXNwbGF5TmFtZV0gPiAxKXsgLy8gb3ZlcmxhcHBpbmcganVuY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIC8vIGQuY3ggKz0gTWF0aC5yYW5kb20oKSoyMDtcbiAgICAgICAgICAgICAgICAgICAgZC5jeSAtPSBNYXRoLnJhbmRvbSgpKjE1O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvKioqKiogcmVuZGVyIGp1bmN0aW9ucyAqL1xuICAgICAgICAgICAgY29uc3QgY3VydmUgPSBsaW5lKClcbiAgICAgICAgICAgICAgICAueCgoZCkgPT4gZC54KVxuICAgICAgICAgICAgICAgIC55KChkKSA9PiBkLnkpXG4gICAgICAgICAgICAgICAgLmN1cnZlKGN1cnZlQ2FyZGluYWwpO1xuXG4gICAgICAgICAgICB0aGlzLmp1bmN0aW9ucy5mb3JFYWNoKChkLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb20uYXBwZW5kKFwicGF0aFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmRhdHVtKFt7eDpkLnN0YXJ0WCwgeTpleG9uWX0sIHt4OmQuY3gsIHk6ZC5jeX0sIHt4OmQuZW5kWCwgeTpleG9uWX1dKSAvLyB0aGUgaW5wdXQgcG9pbnRzIHRvIGRyYXcgdGhlIGN1cnZlXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIGBqdW5jLWN1cnZlIGp1bmMke2QuanVuY3Rpb25JZH1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoXCJkXCIsIGN1cnZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN0eWxlKFwic3Ryb2tlXCIsIFwiIzkyYmNjOVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgY29uc3QganVuY0RvdHMgPSBkb20uc2VsZWN0QWxsKFwiLmp1bmNcIilcbiAgICAgICAgICAgICAgICAuZGF0YSh0aGlzLmp1bmN0aW9ucyk7XG5cbiAgICAgICAgICAgIC8vIHVwZGF0aW5nIGVsZW1lbnRzXG4gICAgICAgICAgICBqdW5jRG90cy5hdHRyKFwiY3hcIiwgKGQpID0+IGQuY3gpO1xuICAgICAgICAgICAganVuY0RvdHMuYXR0cihcImN5XCIsIChkKSA9PiBkLmN5KTsgLy8gVE9ETzogcmVtb3ZlIGhhcmQtY29kZWQgdmFsdWVzXG5cbiAgICAgICAgICAgIC8vIGVudGVyaW5nIG5ldyBlbGVtZW50c1xuICAgICAgICAgICAganVuY0RvdHMuZW50ZXIoKS5hcHBlbmQoXCJjaXJjbGVcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIChkKSA9PiBganVuYyBqdW5jJHtkLmp1bmN0aW9uSWR9YClcbiAgICAgICAgICAgICAgICAuYXR0cihcImN4XCIsIChkKSA9PiBkLmN4KVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY3lcIiwgKGQpID0+IGQuY3kpXG4gICAgICAgICAgICAgICAgLm1lcmdlKGp1bmNEb3RzKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiclwiLCA0KVxuICAgICAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgXCJyZ2IoODYsIDk4LCAxMDcpXCIpO1xuXG4gICAgICAgICAgICAvKioqKiogcmVuZGVyaW5nIGZ1bGwgZ2VuZSBtb2RlbCBleG9ucyAqL1xuICAgICAgICAgICAgY29uc3QgZXhvblJlY3RzID0gZG9tLnNlbGVjdEFsbChcIi5leG9uXCIpXG4gICAgICAgICAgICAuZGF0YSh0aGlzLmV4b25zKTtcblxuICAgICAgICAgICAgLy8gdXBkYXRpbmcgZWxlbWVudHNcbiAgICAgICAgICAgIGV4b25SZWN0cy5hdHRyKFwieFwiLCAoZCkgPT4gZC54KTtcbiAgICAgICAgICAgIGV4b25SZWN0cy5hdHRyKFwieVwiLCBleG9uWSk7XG5cbiAgICAgICAgICAgIC8vIGVudGVyaW5nIG5ldyBlbGVtZW50c1xuICAgICAgICAgICAgZXhvblJlY3RzLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgKGQpPT5gZXhvbiBleG9uJHtkLmV4b25OdW1iZXJ9YClcbiAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgZXhvblkpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJyeFwiLCAyKVxuICAgICAgICAgICAgICAgIC5hdHRyKCdyeScsIDIpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCAoZCkgPT4gZC53KVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIDE1KSAvLyBUT0RPOiByZW1vdmUgaGFyZC1jb2RlZCB2YWx1ZXNcbiAgICAgICAgICAgICAgICAuYXR0cihcInhcIiwgKGQpID0+IGQueClcbiAgICAgICAgICAgICAgICAubWVyZ2UoZXhvblJlY3RzKVxuICAgICAgICAgICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIik7XG5cbiAgICAgICAgICAgIC8vIG1vZGVsIGluZm8gdGV4dCBsYWJlbFxuICAgICAgICAgICAgZG9tLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcImlkXCIsIFwibW9kZWxJbmZvXCIpIC8vIFRPRE86IG5vIGhhcmQtY29kZWQgdmFsdWVcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcImVuZFwiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieFwiLCB0aGlzLnhTY2FsZSgwKSlcbiAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgZXhvblktMTApXG4gICAgICAgICAgICAgICAgLnN0eWxlKFwiZm9udC1zaXplXCIsIDEyKVxuICAgICAgICAgICAgICAgIC50ZXh0KFwiR2VuZSBNb2RlbFwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhbiBpc29mb3JtLCByZW5kZXIgdGhlIGludHJvbiBsaW5lXG4gICAgICAgICAgICBjb25zdCBpbnRyb25MaW5lID0gZG9tLmFwcGVuZChcImxpbmVcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcIngxXCIsIHRoaXMuZXhvbnNDdXJhdGVkWzBdLngpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCB0aGlzLmV4b25zQ3VyYXRlZFt0aGlzLmV4b25zQ3VyYXRlZC5sZW5ndGgtMV0ueClcbiAgICAgICAgICAgICAgICAuYXR0cihcInkxXCIsIGV4b25ZICsgKDE1LzIpKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieTJcIiwgZXhvblkgKyAoMTUvMikpXG4gICAgICAgICAgICAgICAgLmNsYXNzZWQoXCJpbnRyb25cIiwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvKioqKiogcmVuZGVyaW5nIGN1cmF0ZWQgZXhvbnMgb24gdGhlIGZpbmFsIGdlbmUgbW9kZWwgb3IgaXNvZm9ybSBleG9ucyAqL1xuICAgICAgICBjb25zdCBleG9uUmVjdHMyID0gZG9tLnNlbGVjdEFsbChcIi5leG9uLWN1cmF0ZWRcIilcbiAgICAgICAgICAgIC5kYXRhKHRoaXMuZXhvbnNDdXJhdGVkKTtcblxuICAgICAgICAvLyB1cGRhdGluZyBlbGVtZW50c1xuICAgICAgICBleG9uUmVjdHMyLmF0dHIoXCJ4XCIsIChkKSA9PiBkLngpO1xuICAgICAgICBleG9uUmVjdHMyLmF0dHIoXCJ5XCIsIGV4b25ZKTtcblxuICAgICAgICAvLyBlbnRlcmluZyBuZXcgZWxlbWVudHNcbiAgICAgICAgZXhvblJlY3RzMi5lbnRlcigpLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgKGQpPT50aGlzLmlzSXNvZm9ybT8nZXhvbi1jdXJhdGVkJzpgZXhvbi1jdXJhdGVkIGV4b24tY3VyYXRlZCR7ZC5leG9uTnVtYmVyfWApXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgZXhvblkpXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIChkKSA9PiBkLncpXG4gICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCAxNSkgLy8gVE9ETzogcmVtb3ZlIGhhcmQtY29kZWQgdmFsdWVzXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgKGQpID0+IGQueClcbiAgICAgICAgICAgIC5tZXJnZShleG9uUmVjdHMyKVxuICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBcIiNlZWVcIilcbiAgICAgICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIik7XG5cblxuICAgICAgICAvKioqKiogcmVuZGVyaW5nIHRleHQgbGFiZWxzICovXG4gICAgICAgIGlmIChjb25maWcubGFiZWxPbiA9PSAnbGVmdCcgfHwgY29uZmlnLmxhYmVsT24gPT0gJ2JvdGgnKXtcbiAgICAgICAgICAgIGRvbS5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuYXR0cihcImlkXCIsIFwibW9kZWxMYWJlbFwiKSAvLyBUT0RPOiBubyBoYXJkLWNvZGVkIHZhbHVlXG4gICAgICAgICAgICAuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcImVuZFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIHRoaXMueFNjYWxlLnJhbmdlKClbMF0gLSA1KVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGV4b25ZICsgNy41KVxuICAgICAgICAgICAgLnN0eWxlKFwiZm9udC1zaXplXCIsIFwiOXB4XCIpXG4gICAgICAgICAgICAudGV4dCh0aGlzLmdlbmUudHJhbnNjcmlwdElkPT09dW5kZWZpbmVkP2Ake3RoaXMuZ2VuZS5nZW5lU3ltYm9sfWA6dGhpcy5nZW5lLnRyYW5zY3JpcHRJZCk7XG5cblxuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcubGFiZWxPbiA9PSAncmlnaHQnIHx8IGNvbmZpZy5sYWJlbE9uID09ICdib3RoJyl7XG4gICAgICAgICAgICBkb20uYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJpZFwiLCBcIm1vZGVsTGFiZWxSaWdodFwiKSAvLyBUT0RPOiBubyBoYXJkLWNvZGVkIHZhbHVlXG4gICAgICAgICAgICAuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcInN0YXJ0XCIpXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgdGhpcy54U2NhbGUucmFuZ2UoKVsxXSArIDUwKVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGV4b25ZICsgNy41KVxuICAgICAgICAgICAgLnN0eWxlKFwiZm9udC1zaXplXCIsIFwiOXB4XCIpXG4gICAgICAgICAgICAudGV4dCh0aGlzLmdlbmUudHJhbnNjcmlwdElkPT09dW5kZWZpbmVkP2Ake3RoaXMuZ2VuZS5nZW5lU3ltYm9sfWA6dGhpcy5nZW5lLnRyYW5zY3JpcHRJZCk7XG5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFhzY2FsZSh3KXtcbiAgICAgICAgLy8gY29uY2VwdCBleHBsYWluZWQ6XG4gICAgICAgIC8vIGFzc3VtaW5nIHRoZSBjYW52YXMgd2lkdGggaXMgZml4ZWRcbiAgICAgICAgLy8gdGhlIHRhc2sgaXMgaG93IHRvIHJlbmRlciBhbGwgZXhvbnMgKyBmaXhlZC13aWR0aCBpbnRyb25zIHdpdGhpbiB0aGUgY2FudmFzXG4gICAgICAgIC8vIGZpcnN0IGZpbmQgdGhlIGxhcmdlc3QgZXhvbixcbiAgICAgICAgLy8gdGhlbiBzZXQgdGhlIHggc2NhbGUgb2YgdGhlIGNhbnZhcyB0byBhY2NvbW1vZGF0ZSBtYXgoZXhvbiBsZW5ndGgpKmV4b24gY291bnRzLFxuICAgICAgICAvLyB0aGlzIGVuc3VyZXMgdGhhdCB0aGVyZSdzIGFsd2F5cyBzcGFjZSBmb3IgcmVuZGVyaW5nIGludHJvbnNcbiAgICAgICAgLy8gdGhlIGZpeGVkIGludHJvbiB3aWR0aCBpcyBjYWxjdWxhdGVkIGFzIHN1Y2g6XG4gICAgICAgIC8vICgobWF4KGV4b24gbGVuZ3RoKSAqIGV4b24gY291bnRzKSAtIHRvdGFsIGV4b24gbGVuZ3RoKS8oZXhvbiBjb3VudHMgLSAxKVxuXG4gICAgICAgIHRoaXMuZXhvbnMuc29ydCgoYSxiKT0+e1xuICAgICAgICAgICAgaWYgKE51bWJlcihhLmNocm9tU3RhcnQpIDwgTnVtYmVyKGIuY2hyb21TdGFydCkpIHJldHVybiAtMTtcbiAgICAgICAgICAgIGlmIChOdW1iZXIoYS5jaHJvbVN0YXJ0KSA+IE51bWJlcihiLmNocm9tU3RhcnQpKSByZXR1cm4gMTtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgdGhpcy5leG9ucy5mb3JFYWNoKChkLCBpKT0+e1xuICAgICAgICAgICAgZC5sZW5ndGggPSBOdW1iZXIoZC5jaHJvbUVuZCkgLSBOdW1iZXIoZC5jaHJvbVN0YXJ0KSArIDE7XG4gICAgICAgICAgICBpZiAoaSA9PSAwKXtcbiAgICAgICAgICAgICAgICAvLyB0aGUgZmlyc3QgZXhvblxuICAgICAgICAgICAgICAgIHN1bSArPSBkLmxlbmd0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IG5iID0gdGhpcy5leG9uc1tpLTFdOyAvLyB0aGUgdXBzdHJlYW0gbmVpZ2hib3IgZXhvblxuICAgICAgICAgICAgICAgIGQuaW50cm9uTGVuZ3RoID0gTnVtYmVyKGQuY2hyb21TdGFydCkgLSBOdW1iZXIobmIuY2hyb21FbmQpICsgMTtcbiAgICAgICAgICAgICAgICBzdW0gKz0gZC5sZW5ndGggKyAoZC5pbnRyb25MZW5ndGg+dGhpcy5tYXhJbnRyb25MZW5ndGg/dGhpcy5tYXhJbnRyb25MZW5ndGg6ZC5pbnRyb25MZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBkb21haW4gPSBbMCwgc3VtXTtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBbMCwgd107XG4gICAgICAgIHRoaXMueFNjYWxlID0gc2NhbGVMaW5lYXIoKVxuICAgICAgICAgICAgLmRvbWFpbihkb21haW4pXG4gICAgICAgICAgICAucmFuZ2UocmFuZ2UpO1xuICAgIH1cblxuICAgIHNldFhzY2FsZUZpeEludHJvbih3KXtcbiAgICAgICAgLy8gY29uY2VwdCBleHBsYWluZWQ6XG4gICAgICAgIC8vIGFzc3VtaW5nIHRoZSBjYW52YXMgd2lkdGggaXMgZml4ZWRcbiAgICAgICAgLy8gdGhlIHRhc2sgaXMgaG93IHRvIHJlbmRlciBhbGwgZXhvbnMgKyBmaXhlZC13aWR0aCBpbnRyb25zIHdpdGhpbiB0aGUgY2FudmFzXG4gICAgICAgIC8vIGZpcnN0IGZpbmQgdGhlIGxhcmdlc3QgZXhvbixcbiAgICAgICAgLy8gdGhlbiBzZXQgdGhlIHggc2NhbGUgb2YgdGhlIGNhbnZhcyB0byBhY2NvbW1vZGF0ZSBtYXgoZXhvbiBsZW5ndGgpKmV4b24gY291bnRzLFxuICAgICAgICAvLyB0aGlzIGVuc3VyZXMgdGhhdCB0aGVyZSdzIGFsd2F5cyBzcGFjZSBmb3IgcmVuZGVyaW5nIGludHJvbnNcbiAgICAgICAgLy8gdGhlIGZpeGVkIGludHJvbiB3aWR0aCBpcyBjYWxjdWxhdGVkIGFzIHN1Y2g6XG4gICAgICAgIC8vICgobWF4KGV4b24gbGVuZ3RoKSAqIGV4b24gY291bnRzKSAtIHRvdGFsIGV4b24gbGVuZ3RoKS8oZXhvbiBjb3VudHMgLSAxKVxuXG4gICAgICAgIHRoaXMuZXhvbnMuZm9yRWFjaCgoZCkgPT4ge2QubGVuZ3RoID0gTnVtYmVyKGQuY2hyb21FbmQpIC0gTnVtYmVyKGQuY2hyb21TdGFydCkgKyAxfSk7XG4gICAgICAgIGNvbnN0IG1heEV4b25MZW5ndGggPSBtYXgodGhpcy5leG9ucywgKGQpPT5kLmxlbmd0aCk7XG5cbiAgICAgICAgY29uc3QgZG9tYWluID0gWzAsIG1heEV4b25MZW5ndGgqdGhpcy5leG9ucy5sZW5ndGhdO1xuICAgICAgICBjb25zdCByYW5nZSA9IFswLCB3XTtcbiAgICAgICAgdGhpcy54U2NhbGUgPSBzY2FsZUxpbmVhcigpXG4gICAgICAgICAgICAuZG9tYWluKGRvbWFpbilcbiAgICAgICAgICAgIC5yYW5nZShyYW5nZSk7XG5cbiAgICAgICAgLy8gZml4ZWQgaW50cm9uIHdpZHRoXG4gICAgICAgIGNvbnN0IG1pbkxlbmd0aCA9IHRoaXMueFNjYWxlLmludmVydCh0aGlzLm1pbkV4b25XaWR0aCk7IC8vIHRoZSBtaW5pbXVtIGV4b24gbGVuZ3RoIHRoYXQgbWFwcyB0byBtaW5pbXVtIGV4b24gd2lkdGggKHBpeGVscykgdXNpbmcgeFNjYWxlXG4gICAgICAgIGNvbnN0IHRvdGFsRXhvbkxlbmd0aCA9IHN1bSh0aGlzLmV4b25zLCAoZCk9PmQubGVuZ3RoPm1pbkxlbmd0aD9kLmxlbmd0aDptaW5MZW5ndGgpOyAvLyBpZiBhbiBleG9uIGlzIHNob3J0ZXIgdGhhbiBtaW4gbGVuZ3RoLCB1c2UgbWluIGxlbmd0aFxuICAgICAgICB0aGlzLmludHJvbkxlbmd0aCA9IChtYXhFeG9uTGVuZ3RoICogdGhpcy5leG9ucy5sZW5ndGggLSB0b3RhbEV4b25MZW5ndGgpLyh0aGlzLmV4b25zLmxlbmd0aC0xKTsgLy8gY2FsdWNsYXRlIHRoZSBmaXhlZCBpbnRyb24gbGVuZ3RoXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9yIGEgZ2l2ZW4gcG9zaXRpb24sIGZpbmQgdGhlIGV4b25cbiAgICAgKiBAcGFyYW0gcG9zIHtJbnRlZ2VyfTogYSBnZW5vbWljIHBvc2l0aW9uXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfZmluZEV4b24ocG9zKXtcbiAgICAgICAgcG9zID0gTnVtYmVyKHBvcyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmV4b25zLmZpbHRlcigoZCkgPT4ge3JldHVybiBOdW1iZXIoZC5jaHJvbVN0YXJ0KSAtIDEgPD0gcG9zICYmIE51bWJlcihkLmNocm9tRW5kKSArIDEgPj0gcG9zfSk7XG4gICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PSAxKSByZXR1cm4gcmVzdWx0c1swXTtcbiAgICAgICAgZWxzZSBpZihyZXN1bHRzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJObyBleG9uIGZvdW5kIGZvcjogXCIgKyBwb3MpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIk1vcmUgdGhhbiBvbmUgZXhvbnMgZm91bmQgZm9yOiBcIiArIHBvcyk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICB9XG5cbn0iLCIvKipcbiAqIENvcHlyaWdodCDCqSAyMDE1IC0gMjAxOCBUaGUgQnJvYWQgSW5zdGl0dXRlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgKGh0dHBzOi8vZ2l0aHViLmNvbS9icm9hZGluc3RpdHV0ZS9ndGV4LXZpei9ibG9iL21hc3Rlci9MSUNFTlNFLm1kKVxuICovXG4vKlxuVGhpcyBjbGFzcyBpcyBhIHZpZXdlciBvZiB0cmFuc2NyaXB0aW9uYWwgaXNvZm9ybXMsIGVhY2ggaXMgcmVuZGVyIGFzIGEgdHJhY2tcbiAqL1xuXG5pbXBvcnQgR2VuZU1vZGVsIGZyb20gXCIuL0dlbmVNb2RlbFwiO1xuaW1wb3J0IHtzZWxlY3QsIHNlbGVjdEFsbH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtzY2FsZUJhbmR9IGZyb20gXCJkMy1zY2FsZVwiO1xuaW1wb3J0IHtheGlzVG9wLCBheGlzUmlnaHR9IGZyb20gXCJkMy1heGlzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElzb2Zvcm1UcmFja1ZpZXdlciB7XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXNvZm9ybXMge0xpc3R9IG9mIGlzb2Zvcm0gb2JqZWN0cyB3aXRoIGF0dHI6IHRyYW5zY3JpcHRJZCwgc3RhcnQsIGVuZFxuICAgICAqIEBwYXJhbSBpc29mb3JtRXhvbnMge0RpY3Rpb25hcnl9IG9mIGxpc3RzIG9mIGlzb2Zvcm0gZXhvbnMgaW5kZXhlZCBieSBpc29mb3JtIElEICh0cmFuc2NyaXB0SWQpXG4gICAgICogQHBhcmFtIG1vZGVsRXhvbnMge0xpc3R9IG9mIHJlZmVyZW5jZSBleG9ucy4uLlxuICAgICAqIEBwYXJhbSBjb25maWdcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihpc29mb3JtcywgaXNvZm9ybUV4b25zLCBtb2RlbEV4b25zLCBjb25maWcpe1xuICAgICAgICB0aGlzLmlzb2Zvcm1zID0gaXNvZm9ybXM7XG4gICAgICAgIHRoaXMuaXNvZm9ybUV4b25zID0gaXNvZm9ybUV4b25zO1xuICAgICAgICB0aGlzLm1vZGVsRXhvbnMgPSBtb2RlbEV4b25zO1xuICAgICAgICB0aGlzLnZpc3VhbERvbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgICAgIHRoaXMubnVsbENvbG9yID0gXCIjREREREREXCI7XG4gICAgfVxuXG4gICAgc2hvd0RhdGEoZGF0YSwgY29sb3JTY2FsZSwgYmFyU2NhbGUsIGRhdGFMYWJlbCwgc29ydD10cnVlKXtcbiAgICAgICAgaWYgKHNvcnQpe1xuICAgICAgICAgICAgZGF0YS5zb3J0KChhLGIpPT57cmV0dXJuIC0oYS5kaXNwbGF5VmFsdWUgLSBiLmRpc3BsYXlWYWx1ZSl9KTsgLy8gZmlyc3Qgc29ydCB0aGUgZXhwcmVzc2lvbiBkYXRhXG4gICAgICAgICAgICBjb25zdCBpZHMgPSBkYXRhLm1hcCgoZCk9PmQudHJhbnNjcmlwdElkKTtcbiAgICAgICAgICAgIHRoaXMuc29ydFRyYWNrcyhpZHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YS5mb3JFYWNoKChkKT0+e1xuICAgICAgICAgICAgY29uc3QgaXNvZm9ybSA9IHRoaXMudmlzdWFsRG9tLnNlbGVjdChgIyR7ZC50cmFuc2NyaXB0SWQucmVwbGFjZShcIi5cIiwgXCJfXCIpfWApO1xuICAgICAgICAgICAgaXNvZm9ybS5zZWxlY3RBbGwoXCIuZXhvbi1jdXJhdGVkXCIpXG4gICAgICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBkLnZhbHVlPT0wP3RoaXMubnVsbENvbG9yOmNvbG9yU2NhbGUoZC52YWx1ZSkpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHJlbmRlciB0aGUgbG9sbGlwb3AgZ3JhcGhcbiAgICAgICAgdGhpcy52aXN1YWxEb20uc2VsZWN0KFwiLmxvbGxpcG9wR3JhcGhcIikucmVtb3ZlKCk7XG4gICAgICAgIGNvbnN0IGxvbGxpcG9wR3JhcGggPSB0aGlzLnZpc3VhbERvbS5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuY2xhc3NlZChcImxvbGxpcG9wR3JhcGhcIiwgdHJ1ZSlcbiAgICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGB0cmFuc2xhdGUoLTEwMCwgMTMpYCk7IC8vIFRPRE86IHJlbW92ZSBoYXJkLWNvZGVkIHZhbHVlc1xuXG4gICAgICAgIGNvbnN0IGxvbGxpcG9wcyA9IGxvbGxpcG9wR3JhcGguc2VsZWN0QWxsKFwiLmxvbGxpcG9wXCIpXG4gICAgICAgICAgICAuZGF0YShkYXRhKTtcblxuICAgICAgICBjb25zdCBnID0gbG9sbGlwb3BzLmVudGVyKClcbiAgICAgICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuY2xhc3NlZChcImxvbGxpcG9wXCIsIHRydWUpO1xuXG4gICAgICAgIGcuYXBwZW5kKFwibGluZVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4MVwiLCAwKVxuICAgICAgICAgICAgLmF0dHIoXCJ5MVwiLCAoZCk9PnRoaXMueVNjYWxlKGQudHJhbnNjcmlwdElkKSlcbiAgICAgICAgICAgIC5hdHRyKFwieTJcIiwgKGQpPT50aGlzLnlTY2FsZShkLnRyYW5zY3JpcHRJZCkpXG4gICAgICAgICAgICAuc3R5bGUoXCJzdHJva2VcIiwgKGQpPT5kLnZhbHVlPT0wP3RoaXMubnVsbENvbG9yOmNvbG9yU2NhbGUoZC52YWx1ZSkpXG4gICAgICAgICAgICAuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwgMilcbiAgICAgICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgICAgIC5kdXJhdGlvbigxMDAwKVxuICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCAoZCk9PmQudmFsdWU9PTA/MDpiYXJTY2FsZShkLnZhbHVlKSk7XG5cbiAgICAgICAgZy5hcHBlbmQoXCJjaXJjbGVcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY3hcIiwgMClcbiAgICAgICAgICAgIC5hdHRyKFwiY3lcIiwgKGQpPT50aGlzLnlTY2FsZShkLnRyYW5zY3JpcHRJZCkgKVxuICAgICAgICAgICAgLmF0dHIoXCJyXCIsIDUpXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIChkKT0+ZC52YWx1ZT09MD90aGlzLm51bGxDb2xvcjpjb2xvclNjYWxlKGQudmFsdWUpKVxuICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLmR1cmF0aW9uKDEwMDApXG4gICAgICAgICAgICAuYXR0cihcImN4XCIsIChkKT0+YmFyU2NhbGUoZC52YWx1ZSkpO1xuXG4gICAgICAgIC8vIGFkZCB0aGUgYXhlc1xuICAgICAgICBsb2xsaXBvcEdyYXBoLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJsb2xsaXBvcC1heGlzXCIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKDAsLSR7dGhpcy55U2NhbGUuYmFuZHdpZHRoKCkvMn0pYClcbiAgICAgICAgICAgIC5jYWxsKFxuICAgICAgICAgICAgICAgIGF4aXNUb3AoYmFyU2NhbGUpXG4gICAgICAgICAgICAgICAgICAgIC50aWNrcygzKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICBsb2xsaXBvcEdyYXBoLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwiaWRcIiwgXCJsb2xsaUxhYmVsXCIpXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgMClcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCAtNDApXG4gICAgICAgICAgICAuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcImVuZFwiKVxuICAgICAgICAgICAgLnN0eWxlKFwiZm9udC1zaXplXCIsIDkpXG4gICAgICAgICAgICAudGV4dChcImxvZzEwKFRQTSlcIik7IC8vIFRPRE86IHRoaXMgc2hvdWxkIGJlIGEgdXNlci1kZWZpbmVkIHRleHRcblxuICAgICAgICBsb2xsaXBvcEdyYXBoLmFwcGVuZChcImdcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJsb2xsaXBvcC1heGlzXCIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlKDAsLSR7dGhpcy55U2NhbGUuYmFuZHdpZHRoKCkvMn0pYClcbiAgICAgICAgICAgIC5jYWxsKFxuICAgICAgICAgICAgICAgIGF4aXNSaWdodCh0aGlzLnlTY2FsZSlcbiAgICAgICAgICAgICAgICAgIC50aWNrVmFsdWVzKFtdKSAvLyBzaG93IG5vIHRpY2tzXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIC8vIGRhdGEgbGFiZWxcbiAgICAgICAgbG9sbGlwb3BHcmFwaC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuYXR0cihcImlkXCIsIFwibG9sbGlMYWJlbFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIDEwKVxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIC0yMClcblxuICAgICAgICAgICAgLnRleHQoYFRyYW5zY3JpcHQgRXhwcmVzc2lvbiBpbiAke2RhdGFMYWJlbH1gKVxuICAgICAgICAgICAgLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJzdGFydFwiKVxuICAgICAgICAgICAgLnN0eWxlKFwiZm9udC1zaXplXCIsIFwiMTJweFwiKTtcblxuXG4gICAgfVxuXG4gICAgc29ydFRyYWNrcyh5bGlzdCl7XG4gICAgICAgIHRoaXMuc2V0WXNjYWxlKHRoaXMuY29uZmlnLmgsIHlsaXN0KTtcbiAgICAgICAgdGhpcy5yZW5kZXIodHJ1ZSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKHJlZHJhdz1mYWxzZSwgZG9tPXVuZGVmaW5lZCwgbGFiZWxPbj0nbGVmdCcsIGR1cmF0aW9uPTEwMDApe1xuICAgICAgICBpZiAoZG9tID09PSB1bmRlZmluZWQgJiYgdGhpcy52aXN1YWxEb20gPT09IHVuZGVmaW5lZCkgdGhyb3cgXCJGYXRhbCBFcnJvcjogbXVzdCBwcm92aWRlIGEgZG9tIGVsZW1lbnRcIjtcbiAgICAgICAgaWYgKGRvbSA9PT0gdW5kZWZpbmVkKSBkb20gPSB0aGlzLnZpc3VhbERvbTtcbiAgICAgICAgZWxzZSB0aGlzLnZpc3VhbERvbSA9IGRvbTtcblxuICAgICAgICBpZih0aGlzLnlTY2FsZT09PXVuZGVmaW5lZCkgdGhpcy5zZXRZc2NhbGUodGhpcy5jb25maWcuaCk7XG5cbiAgICAgICAgY29uc3QgaXNvVHJhY2tzID0gZG9tLnNlbGVjdEFsbChcIi5pc290cmFja1wiKVxuICAgICAgICAgICAgLmRhdGEodGhpcy5pc29mb3Jtcy5tYXAoKGQpPT5kLnRyYW5zY3JpcHRJZCkpO1xuXG4gICAgICAgIC8vIHVwZGF0ZSBvbGQgaXNvZm9ybSB0cmFja3MsIGlmIGFueVxuICAgICAgICBpc29UcmFja3MudHJhbnNpdGlvbigpXG4gICAgICAgICAgICAuZHVyYXRpb24oZHVyYXRpb24pXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCAoZCk9PnsgcmV0dXJuIGB0cmFuc2xhdGUoMCwgJHt0aGlzLnlTY2FsZShkKX0pYH0pO1xuXG4gICAgICAgIC8vIHVwZGF0ZSBuZXcgdHJhY2tzXG4gICAgICAgIGlzb1RyYWNrcy5lbnRlcigpXG4gICAgICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAgICAgLmF0dHIoXCJpZFwiLCAoZCk9PihkLnJlcGxhY2UoXCIuXCIsIFwiX1wiKSkpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiaXNvdHJhY2tcIilcbiAgICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIChkKT0+eyByZXR1cm4gYHRyYW5zbGF0ZSgwLCAwKWB9KVxuXG4gICAgICAgICAgICAvLyAubWVyZ2UoaXNvVHJhY2tzKVxuICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLmR1cmF0aW9uKGR1cmF0aW9uLzIpXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCAoZCk9PnsgcmV0dXJuIGB0cmFuc2xhdGUoMCwgJHt0aGlzLnlTY2FsZShkKX0pYH0pO1xuXG4gICAgICAgIGlmIChyZWRyYXcpIHJldHVybjtcblxuICAgICAgICB0aGlzLl9yZW5kZXJNb2RlbHModGhpcy5jb25maWcudywgbGFiZWxPbik7XG5cbiAgICB9XG5cbiAgICBfcmVuZGVyTW9kZWxzKHcsIGxhYmVsT24gPSAnbGVmdCcpe1xuICAgICAgICB0aGlzLmlzb2Zvcm1zLmZvckVhY2goKGlzb2Zvcm0pID0+IHtcbiAgICAgICAgICAgIGxldCByZWZlcmVuY2UgPSAodGhpcy5tb2RlbEV4b25zID09PSB1bmRlZmluZWQgfHwgdGhpcy5tb2RlbEV4b25zID09PSBudWxsKT90aGlzLmlzb2Zvcm1FeG9uc1tpc29mb3JtLnRyYW5zY3JpcHRJZF06dGhpcy5tb2RlbEV4b25zO1xuICAgICAgICAgICAgY29uc3QgbW9kZWwgPSBuZXcgR2VuZU1vZGVsKGlzb2Zvcm0sIHJlZmVyZW5jZSwgdGhpcy5pc29mb3JtRXhvbnNbaXNvZm9ybS50cmFuc2NyaXB0SWRdLCBbXSwgdHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCBpc29mb3JtRyA9IHNlbGVjdChgIyR7aXNvZm9ybS50cmFuc2NyaXB0SWQucmVwbGFjZShcIi5cIiwgXCJfXCIpfWApO1xuICAgICAgICAgICAgbW9kZWwucmVuZGVyKGlzb2Zvcm1HLCB7dzp3LCBoOiB0aGlzLnlTY2FsZS5iYW5kd2lkdGgoKSwgbGFiZWxPbjogbGFiZWxPbn0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRZc2NhbGUoaCwgeWxpc3Q9dW5kZWZpbmVkKXtcbiAgICAgICAgaWYgKHlsaXN0ID09PSB1bmRlZmluZWQpIHlsaXN0ID0gdGhpcy5pc29mb3Jtcy5tYXAoKGQpPT5kLnRyYW5zY3JpcHRJZCk7XG4gICAgICAgIHRoaXMueVNjYWxlID0gc2NhbGVCYW5kKClcbiAgICAgICAgICAgIC5kb21haW4oeWxpc3QpXG4gICAgICAgICAgICAucmFuZ2UoWzAsIGhdKVxuICAgICAgICAgICAgLnBhZGRpbmcoLjA1KTtcbiAgICB9XG5cbn0iLCIvKipcbiAqIENvcHlyaWdodCDCqSAyMDE1IC0gMjAxOCBUaGUgQnJvYWQgSW5zdGl0dXRlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgKGh0dHBzOi8vZ2l0aHViLmNvbS9icm9hZGluc3RpdHV0ZS9ndGV4LXZpei9ibG9iL21hc3Rlci9MSUNFTlNFLm1kKVxuICovXG5cbi8qXG5UT0RPXG4xLiByZWZhY3RvcmluZ1xuICovXG4ndXNlIHN0cmljdCc7XG5pbXBvcnQge2NyZWF0ZVN2ZywgZ2VuZXJhdGVSYW5kb21NYXRyaXgsIGdlbmVyYXRlUmFuZG9tTGlzdH0gZnJvbSBcIi4vbW9kdWxlcy91dGlsc1wiO1xuaW1wb3J0IHtyYW5nZX0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge3JhbmRvbU5vcm1hbH0gZnJvbSBcImQzLXJhbmRvbVwiO1xuaW1wb3J0IEhlYXRtYXAgZnJvbSBcIi4vbW9kdWxlcy9IZWF0bWFwXCI7XG5pbXBvcnQgRGVuZHJvSGVhdG1hcENvbmZpZyBmcm9tIFwiLi9tb2R1bGVzL0RlbmRyb0hlYXRtYXBDb25maWdcIjtcbmltcG9ydCBEZW5kcm9IZWF0bWFwIGZyb20gXCIuL21vZHVsZXMvRGVuZHJvSGVhdG1hcFwiO1xuaW1wb3J0IEdyb3VwZWRWaW9saW4gZnJvbSBcIi4vbW9kdWxlcy9Hcm91cGVkVmlvbGluXCI7XG5pbXBvcnQgSXNvZm9ybVRyYWNrVmlld2VyIGZyb20gXCIuL21vZHVsZXMvSXNvZm9ybVRyYWNrVmlld2VyXCI7XG5cbmV4cG9ydCBjb25zdCBkZW1vRGF0YSA9IHtcbiAgICBoZWF0bWFwOmdlbmVyYXRlUmFuZG9tTWF0cml4KHt4OjUwLCB5OjEwLCBzY2FsZUZhY3RvcjoxMDAwfSksXG4gICAgZGVuZHJvSGVhdG1hcDoge1xuICAgICAgICByb3dUcmVlOiBcIigoKFRQNTM6MC4xNyxTTEs6MC4xNyk6MS4xOCxORFJHNDoxLjM0KToxLjMzLEFDVE4zOjIuNjcpO1wiLFxuICAgICAgICBjb2xUcmVlOiBcIigoKEFkaXBvc2UgVmlzY2VyYWwgT21lbnR1bTowLjA2LEFkaXBvc2UgU3ViY3V0YW5lb3VzOjAuMDYpOjAuMDAsQmxhZGRlcjowLjA2KTowLjE2LEFkcmVuYWwgR2xhbmQ6MC4yMik7XCIsXG4gICAgICAgIGhlYXRtYXA6IFtcbiAgICB7XG4gICAgICBcInlcIjogXCJTTEtcIixcbiAgICAgIFwidmFsdWVcIjogMzUuNTA1LFxuICAgICAgXCJ4XCI6IFwiQWRpcG9zZSBTdWJjdXRhbmVvdXNcIixcbiAgICAgIFwidW5pdFwiOiBcIlRQTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcInlcIjogXCJTTEtcIixcbiAgICAgIFwidmFsdWVcIjogMjkuMjgsXG4gICAgICBcInhcIjogXCJBZGlwb3NlIFZpc2NlcmFsIE9tZW50dW1cIixcbiAgICAgIFwidW5pdFwiOiBcIlRQTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcInlcIjogXCJTTEtcIixcbiAgICAgIFwidmFsdWVcIjogMTcuNDA1LFxuICAgICAgXCJ4XCI6IFwiQWRyZW5hbCBHbGFuZFwiLFxuICAgICAgXCJ1bml0XCI6IFwiVFBNXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwieVwiOiBcIlNMS1wiLFxuICAgICAgXCJ2YWx1ZVwiOiA1My4yOSxcbiAgICAgIFwieFwiOiBcIkJsYWRkZXJcIixcbiAgICAgIFwidW5pdFwiOiBcIlRQTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcInlcIjogXCJORFJHNFwiLFxuICAgICAgXCJ2YWx1ZVwiOiAxMi4wMzUsXG4gICAgICBcInhcIjogXCJBZGlwb3NlIFN1YmN1dGFuZW91c1wiLFxuICAgICAgXCJ1bml0XCI6IFwiVFBNXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwieVwiOiBcIk5EUkc0XCIsXG4gICAgICBcInZhbHVlXCI6IDYuNTMxMDAwMDAwMDAwMDAxLFxuICAgICAgXCJ4XCI6IFwiQWRpcG9zZSBWaXNjZXJhbCBPbWVudHVtXCIsXG4gICAgICBcInVuaXRcIjogXCJUUE1cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJ5XCI6IFwiTkRSRzRcIixcbiAgICAgIFwidmFsdWVcIjogMTM0LjgsXG4gICAgICBcInhcIjogXCJBZHJlbmFsIEdsYW5kXCIsXG4gICAgICBcInVuaXRcIjogXCJUUE1cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJ5XCI6IFwiTkRSRzRcIixcbiAgICAgIFwidmFsdWVcIjogNy4xMTYwMDAwMDAwMDAwMDA1LFxuICAgICAgXCJ4XCI6IFwiQmxhZGRlclwiLFxuICAgICAgXCJ1bml0XCI6IFwiVFBNXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwieVwiOiBcIlRQNTNcIixcbiAgICAgIFwidmFsdWVcIjogMjkuOTM1LFxuICAgICAgXCJ4XCI6IFwiQWRpcG9zZSBTdWJjdXRhbmVvdXNcIixcbiAgICAgIFwidW5pdFwiOiBcIlRQTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcInlcIjogXCJUUDUzXCIsXG4gICAgICBcInZhbHVlXCI6IDIzLjU1LFxuICAgICAgXCJ4XCI6IFwiQWRpcG9zZSBWaXNjZXJhbCBPbWVudHVtXCIsXG4gICAgICBcInVuaXRcIjogXCJUUE1cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJ5XCI6IFwiVFA1M1wiLFxuICAgICAgXCJ2YWx1ZVwiOiAxOC41MTUsXG4gICAgICBcInhcIjogXCJBZHJlbmFsIEdsYW5kXCIsXG4gICAgICBcInVuaXRcIjogXCJUUE1cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJ5XCI6IFwiVFA1M1wiLFxuICAgICAgXCJ2YWx1ZVwiOiA0MC41MSxcbiAgICAgIFwieFwiOiBcIkJsYWRkZXJcIixcbiAgICAgIFwidW5pdFwiOiBcIlRQTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcInlcIjogXCJBQ1ROM1wiLFxuICAgICAgXCJ2YWx1ZVwiOiAwLjMzMTQ1LFxuICAgICAgXCJ4XCI6IFwiQWRpcG9zZSBTdWJjdXRhbmVvdXNcIixcbiAgICAgIFwidW5pdFwiOiBcIlRQTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcInlcIjogXCJBQ1ROM1wiLFxuICAgICAgXCJ2YWx1ZVwiOiAwLjMzMTcsXG4gICAgICBcInhcIjogXCJBZGlwb3NlIFZpc2NlcmFsIE9tZW50dW1cIixcbiAgICAgIFwidW5pdFwiOiBcIlRQTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcInlcIjogXCJBQ1ROM1wiLFxuICAgICAgXCJ2YWx1ZVwiOiAwLjEwMDAwNSxcbiAgICAgIFwieFwiOiBcIkFkcmVuYWwgR2xhbmRcIixcbiAgICAgIFwidW5pdFwiOiBcIlRQTVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcInlcIjogXCJBQ1ROM1wiLFxuICAgICAgXCJ2YWx1ZVwiOiAwLjQ4MTAwMDAwMDAwMDAwMDA0LFxuICAgICAgXCJ4XCI6IFwiQmxhZGRlclwiLFxuICAgICAgXCJ1bml0XCI6IFwiVFBNXCJcbiAgICB9XG4gIF1cbiAgICB9LFxuICAgIGdyb3VwZWRWaW9saW5QbG90OiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgZ3JvdXA6IFwiR3JvdXAgMVwiLFxuICAgICAgICAgICBsYWJlbDogXCJHZW5lIDFcIixcbiAgICAgICAgICAgdmFsdWVzOiByYW5nZSgwLCAyMDAwKS5tYXAocmFuZG9tTm9ybWFsKDIsIDEpKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBncm91cDogXCJHcm91cCAxXCIsXG4gICAgICAgICAgICBsYWJlbDogXCJHZW5lIDJcIixcbiAgICAgICAgICAgIHZhbHVlczogcmFuZ2UoMCwgMjAwMCkubWFwKHJhbmRvbU5vcm1hbCg1LCAxKSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JvdXA6IFwiR3JvdXAgMVwiLFxuICAgICAgICAgICAgbGFiZWw6IFwiR2VuZSAzXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHJhbmdlKDAsIDIwMDApLm1hcChyYW5kb21Ob3JtYWwoMTAsIDEpKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgIGdyb3VwOiBcIkdyb3VwIDJcIixcbiAgICAgICAgICAgbGFiZWw6IFwiR2VuZSAxXCIsXG4gICAgICAgICAgIHZhbHVlczogcmFuZ2UoMCwgMjAwMCkubWFwKHJhbmRvbU5vcm1hbCg1LCAxKSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JvdXA6IFwiR3JvdXAgMlwiLFxuICAgICAgICAgICAgbGFiZWw6IFwiR2VuZSAyXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHJhbmdlKDAsIDIwMDApLm1hcChyYW5kb21Ob3JtYWwoMywgMSkpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyb3VwOiBcIkdyb3VwIDJcIixcbiAgICAgICAgICAgIGxhYmVsOiBcIkdlbmUgM1wiLFxuICAgICAgICAgICAgdmFsdWVzOiByYW5nZSgwLCAyMDAwKS5tYXAocmFuZG9tTm9ybWFsKDEsIDEpKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgIGdyb3VwOiBcIkdyb3VwIDNcIixcbiAgICAgICAgICAgbGFiZWw6IFwiR2VuZSAxXCIsXG4gICAgICAgICAgIHZhbHVlczogcmFuZ2UoMCwgMjAwMCkubWFwKHJhbmRvbU5vcm1hbCgyLCAxKSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgZ3JvdXA6IFwiR3JvdXAgM1wiLFxuICAgICAgICAgICAgbGFiZWw6IFwiR2VuZSAyXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHJhbmdlKDAsIDIwMDApLm1hcChyYW5kb21Ob3JtYWwoMywgMSkpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdyb3VwOiBcIkdyb3VwIDNcIixcbiAgICAgICAgICAgIGxhYmVsOiBcIkdlbmUgM1wiLFxuICAgICAgICAgICAgdmFsdWVzOiByYW5nZSgwLCAyMDAwKS5tYXAocmFuZG9tTm9ybWFsKDUsIDEpKVxuICAgICAgICB9XG4gICAgXSxcbiAgICB0cmFuc2NyaXB0VHJhY2tzOiB7XG4gICAgICAgIFwiZXhvbnNcIjoge1xuICAgICAgICAgICAgXCJFTlNUMDAwMDAzMTE1OTUuOVwiOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImNocm9tXCI6IFwiMTdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbUVuZFwiOiA3NzA3MTE3MixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uSWRcIjogXCJFTlNFMDAwMDI3MTM5MzMuMVwiLFxuICAgICAgICAgICAgICAgICAgICBcImV4b25OdW1iZXJcIjogXCIxXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21TdGFydFwiOiA3NzA3MTE1MSxcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJhbmRcIjogXCIrXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVwiOiBcIjE3XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21FbmRcIjogNzcwNzM1NzksXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbklkXCI6IFwiRU5TRTAwMDAzNjcyNjI4LjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uTnVtYmVyXCI6IFwiMlwiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tU3RhcnRcIjogNzcwNzM1MTIsXG4gICAgICAgICAgICAgICAgICAgIFwic3RyYW5kXCI6IFwiK1wiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21cIjogXCIxN1wiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tRW5kXCI6IDc3MDczOTQ2LFxuICAgICAgICAgICAgICAgICAgICBcImV4b25JZFwiOiBcIkVOU0UwMDAwMzQ3NTI4MS4xXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbk51bWJlclwiOiBcIjNcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVN0YXJ0XCI6IDc3MDczNzQ1LFxuICAgICAgICAgICAgICAgICAgICBcInN0cmFuZFwiOiBcIitcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImNocm9tXCI6IFwiMTdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbUVuZFwiOiA3NzA3NTcxOSxcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uSWRcIjogXCJFTlNFMDAwMDExMTE3MTMuMVwiLFxuICAgICAgICAgICAgICAgICAgICBcImV4b25OdW1iZXJcIjogXCI0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21TdGFydFwiOiA3NzA3NTU3MSxcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJhbmRcIjogXCIrXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVwiOiBcIjE3XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21FbmRcIjogNzcwNzY0NDYsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbklkXCI6IFwiRU5TRTAwMDAzNjUxMjUwLjFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uTnVtYmVyXCI6IFwiNVwiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tU3RhcnRcIjogNzcwNzYyODksXG4gICAgICAgICAgICAgICAgICAgIFwic3RyYW5kXCI6IFwiK1wiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21cIjogXCIxN1wiLFxuICAgICAgICAgICAgICAgICAgICBcImNocm9tRW5kXCI6IDc3MDc3MTU1LFxuICAgICAgICAgICAgICAgICAgICBcImV4b25JZFwiOiBcIkVOU0UwMDAwMzYwNzc3My4xXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhvbk51bWJlclwiOiBcIjZcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbVN0YXJ0XCI6IDc3MDc3MDA3LFxuICAgICAgICAgICAgICAgICAgICBcInN0cmFuZFwiOiBcIitcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImNocm9tXCI6IFwiMTdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJjaHJvbUVuZFwiOiA3NzA3ODYxMixcbiAgICAgICAgICAgICAgICAgICAgXCJleG9uSWRcIjogXCJFTlNFMDAwMDI3MjA5MjQuMVwiLFxuICAgICAgICAgICAgICAgICAgICBcImV4b25OdW1iZXJcIjogXCI3XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiY2hyb21TdGFydFwiOiA3NzA3Nzk4MCxcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJhbmRcIjogXCIrXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwidHJhbnNjcmlwdHNcIjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwiY2hyb21vc29tZVwiOiBcIjE3XCIsXG4gICAgICAgICAgICAgICAgXCJlbmRcIjogNzcwNzg2MTIsXG4gICAgICAgICAgICAgICAgXCJnZW5jb2RlSWRcIjogXCJFTlNHMDAwMDAxNjcyODAuMTJcIixcbiAgICAgICAgICAgICAgICBcImdlbmVTeW1ib2xcIjogXCJFTkdBU0VcIixcbiAgICAgICAgICAgICAgICBcInN0YXJ0XCI6IDc3MDcxMTUxLFxuICAgICAgICAgICAgICAgIFwic3RyYW5kXCI6IFwiK1wiLFxuICAgICAgICAgICAgICAgIFwidHJhbnNjcmlwdElkXCI6IFwiRU5TVDAwMDAwMzExNTk1LjlcIlxuICAgICAgICAgICAgfVxuICAgICAgICBdXG4gICAgfVxufTtcblxuY29uc3QgdHJhbnNjcmlwdFRyYWNrc0NvbmZpZyA9IHtcbiAgICBpZDogJ2d0ZXhUcmFuc2NyaXB0VHJhY2tzJyxcbiAgICBkYXRhOiBkZW1vRGF0YS50cmFuc2NyaXB0VHJhY2tzLFxuICAgIHdpZHRoOiAxMjAwLFxuICAgIGhlaWdodDogODAsXG4gICAgbWFyZ2luTGVmdDogMTAwLFxuICAgIG1hcmdpblJpZ2h0OiAyMCxcbiAgICBtYXJnaW5Ub3A6IDAsXG4gICAgbWFyZ2luQm90dG9tOiAyMCxcbiAgICBsYWJlbFBvczogJ2xlZnQnXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNjcmlwdFRyYWNrcyhwYXI9dHJhbnNjcmlwdFRyYWNrc0NvbmZpZyl7XG4gICAgbGV0IG1hcmdpbiA9IHtcbiAgICAgICAgdG9wOiBwYXIubWFyZ2luVG9wLFxuICAgICAgICByaWdodDogcGFyLm1hcmdpblJpZ2h0LFxuICAgICAgICBib3R0b206IHBhci5tYXJnaW5Cb3R0b20sXG4gICAgICAgIGxlZnQ6IHBhci5tYXJnaW5MZWZ0XG4gICAgfTtcbiAgICBsZXQgaW5XaWR0aCA9IHBhci53aWR0aCAtIChwYXIubWFyZ2luTGVmdCArIHBhci5tYXJnaW5SaWdodCk7XG4gICAgbGV0IGluSGVpZ2h0ID0gcGFyLmhlaWdodCAtIChwYXIubWFyZ2luVG9wICsgcGFyLm1hcmdpbkJvdHRvbSk7XG5cbiAgICAvLyB0ZXN0IGlucHV0IHBhcmFtc1xuICAgIGlmICgkKGAjJHtwYXIuaWR9YCkubGVuZ3RoID09IDApIHtcbiAgICAgICAgbGV0IGVycm9yID0gYElucHV0IEVycm9yOiBET00gSUQgJHtwYXIuaWR9IGlzIG5vdCBmb3VuZC5gO1xuICAgICAgICBhbGVydChlcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIC8vIGNyZWF0ZSB0aGUgU1ZHXG4gICAgICAgIGxldCBzdmcgPSBjcmVhdGVTdmcocGFyLmlkLCBwYXIud2lkdGgsIHBhci5oZWlnaHQsIG1hcmdpbik7XG5cbiAgICAvLyByZW5kZXIgdGhlIHRyYW5zY3JpcHRzXG4gICAgbGV0IHRvb2x0aXBJZCA9IGAke3Bhci5pZH1Ub29sdGlwYDtcbiAgICBsZXQgY29uZmlnID0ge1xuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAwLFxuICAgICAgICB3OiBpbldpZHRoLFxuICAgICAgICBoOiBpbkhlaWdodCxcbiAgICAgICAgbGFiZWxPbjogcGFyLmxhYmVsUG9zXG4gICAgfTtcbiAgICBsZXQgdmlld2VyID0gbmV3IElzb2Zvcm1UcmFja1ZpZXdlcihwYXIuZGF0YS50cmFuc2NyaXB0cywgcGFyLmRhdGEuZXhvbnMsIHVuZGVmaW5lZCwgY29uZmlnKTtcbiAgICB2aWV3ZXIucmVuZGVyKGZhbHNlLCBzdmcsIHBhci5sYWJlbFBvcyk7XG5cbn1cblxuY29uc3QgaGVhdG1hcERlbW9Db25maWcgPSB7XG4gICAgaWQ6ICdndGV4Vml6SGVhdG1hcCcsXG4gICAgZGF0YTogZGVtb0RhdGEuaGVhdG1hcCxcbiAgICB3aWR0aDogMTIwMCwgLy8gb3V0ZXIgd2lkdGhcbiAgICBoZWlnaHQ6IDMwMCwgLy8gb3V0ZXIgaGVpZ2h0XG4gICAgbWFyZ2luTGVmdDogMjAsXG4gICAgbWFyZ2luUmlnaHQ6IDQwLFxuICAgIG1hcmdpblRvcDogNTAsXG4gICAgbWFyZ2luQm90dG9tOiA1MCxcbiAgICBjb2xvclNjaGVtZTogXCJZbEduQnVcIixcbiAgICBjb3JuZXJSYWRpdXM6IDIsXG4gICAgY29sdW1uTGFiZWxIZWlnaHQ6IDIwLFxuICAgIGNvbHVtbkxhYmVsQW5nbGU6IDYwLFxuICAgIGNvbHVtbkxhYmVsUG9zQWRqdXN0OiAxMCxcbiAgICByb3dMYWJlbFdpZHRoOiAxMDAsXG4gICAgbGVnZW5kU3BhY2U6IDUwLFxuICAgIHVzZUxvZzogdHJ1ZSxcbiAgICBsb2dCYXNlOiAxMFxufTtcblxuLyoqXG4gKiBSZW5kZXIgYSAyRCBIZWF0bWFwXG4gKiBAcGFyYW0gcGFyYW1zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoZWF0bWFwKHBhcj1oZWF0bWFwRGVtb0NvbmZpZyl7XG4gICAgbGV0IG1hcmdpbiA9IHtcbiAgICAgICAgdG9wOiBwYXIubWFyZ2luVG9wLFxuICAgICAgICByaWdodDogcGFyLm1hcmdpblJpZ2h0LFxuICAgICAgICBib3R0b206IHBhci5tYXJnaW5Cb3R0b20sXG4gICAgICAgIGxlZnQ6IHBhci5tYXJnaW5MZWZ0XG4gICAgfTtcbiAgICBsZXQgaW5XaWR0aCA9IHBhci53aWR0aCAtIChwYXIubWFyZ2luTGVmdCArIHBhci5tYXJnaW5SaWdodCArIHBhci5yb3dMYWJlbFdpZHRoKTtcbiAgICBsZXQgaW5IZWlnaHQgPSBwYXIuaGVpZ2h0IC0gKHBhci5tYXJnaW5Ub3AgKyBwYXIubWFyZ2luQm90dG9tICsgcGFyLmNvbHVtbkxhYmVsSGVpZ2h0KTtcblxuICAgIC8vIHRlc3QgaW5wdXQgcGFyYW1zXG4gICAgaWYgKCQoYCMke3Bhci5pZH1gKS5sZW5ndGggPT0gMCkge1xuICAgICAgICBsZXQgZXJyb3IgPSBgSW5wdXQgRXJyb3I6IERPTSBJRCAke3Bhci5pZH0gaXMgbm90IGZvdW5kLmA7XG4gICAgICAgIGFsZXJ0KGVycm9yKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIHRoZSBTVkdcbiAgICBsZXQgc3ZnID0gY3JlYXRlU3ZnKHBhci5pZCwgcGFyLndpZHRoLCBwYXIuaGVpZ2h0LCBtYXJnaW4pO1xuXG4gICAgLy8gcmVuZGVyIHRoZSBoZWF0bWFwXG4gICAgbGV0IHRvb2x0aXBJZCA9IGAke3Bhci5pZH1Ub29sdGlwYDtcbiAgICBsZXQgaCA9IG5ldyBIZWF0bWFwKHBhci5kYXRhLCBwYXIudXNlTG9nLCBwYXIubG9nQmFzZSwgcGFyLmNvbG9yU2NoZW1lLCBwYXIuY29ybmVyUmFkaXVzLCB0b29sdGlwSWQpO1xuICAgIGguZHJhdyhzdmcsIHt3OmluV2lkdGgsIGg6aW5IZWlnaHR9LCBwYXIuY29sdW1uTGFiZWxBbmdsZSwgZmFsc2UsIHBhci5jb2x1bW5MYWJlbFBvc0FkanVzdCk7XG4gICAgaC5kcmF3Q29sb3JMZWdlbmQoc3ZnLCB7eDoyMCwgeTogLTIwfSwgMTApO1xufVxuXG5jb25zdCBkZW5kcm9IZWF0bWFwRGVtb0NvbmZpZyA9IHtcbiAgICBpZDogJ2d0ZXhWaXpEZW5kcm9IZWF0bWFwJyxcbiAgICBkYXRhOiBkZW1vRGF0YS5kZW5kcm9IZWF0bWFwLFxuICAgIHVzZUxvZzogdHJ1ZSxcbiAgICBsb2dCYXNlOiAxMCxcbiAgICB3aWR0aDogNjAwLCAvLyBvdXRlciB3aWR0aFxuICAgIGhlaWdodDogMzAwLCAvLyBvdXRlciBoZWlnaHRcbiAgICBtYXJnaW5MZWZ0OiAyMCxcbiAgICBtYXJnaW5SaWdodDogNDAsXG4gICAgbWFyZ2luVG9wOiA1MCxcbiAgICBtYXJnaW5Cb3R0b206IDUwLFxuICAgIHJvd1RyZWVQYW5lbFdpZHRoOiAxMDAsXG4gICAgY29sVHJlZVBhbmVsSGVpZ2h0OiAxMDAsXG4gICAgY29sb3JTY2hlbWU6IFwiQmx1ZXNcIixcbiAgICBjb3JuZXJSYWRpdXM6IDIsXG4gICAgY29sdW1uTGFiZWxIZWlnaHQ6IDIwMCxcbiAgICBjb2x1bW5MYWJlbEFuZ2xlOiA2MCxcbiAgICBjb2x1bW5MYWJlbFBvc0FkanVzdDogMTAsXG4gICAgcm93TGFiZWxXaWR0aDogMjAwLFxuICAgIGxlZ2VuZFNwYWNlOiA1MFxufTtcblxuLyoqXG4gKiBSZW5kZXIgYSBEZW5kcm9IZWF0bWFwXG4gKiBAcGFyYW0gcGFyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZW5kcm9IZWF0bWFwKHBhcj1kZW5kcm9IZWF0bWFwRGVtb0NvbmZpZyl7XG4gICAgbGV0IG1hcmdpbiA9IHtcbiAgICAgICAgdG9wOiBwYXIubWFyZ2luVG9wLFxuICAgICAgICByaWdodDogcGFyLm1hcmdpblJpZ2h0ICsgcGFyLnJvd0xhYmVsV2lkdGgsXG4gICAgICAgIGJvdHRvbTogcGFyLm1hcmdpbkJvdHRvbSArIHBhci5jb2x1bW5MYWJlbEhlaWdodCxcbiAgICAgICAgbGVmdDogcGFyLm1hcmdpbkxlZnRcbiAgICB9O1xuXG4gICAgLy8gdGVzdCBpbnB1dCBwYXJhbXNcbiAgICBpZiAoJChgIyR7cGFyLmlkfWApLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIGxldCBlcnJvciA9IGBJbnB1dCBFcnJvcjogRE9NIElEICR7cGFyLmlkfSBpcyBub3QgZm91bmQuYDtcbiAgICAgICAgYWxlcnQoZXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICBsZXQgaW5XaWR0aCA9IHBhci53aWR0aCAtIChwYXIubWFyZ2luTGVmdCArIHBhci5tYXJnaW5SaWdodCArIHBhci5yb3dMYWJlbFdpZHRoKTtcbiAgICBsZXQgaW5IZWlnaHQgPSBwYXIuaGVpZ2h0IC0gKHBhci5tYXJnaW5Ub3AgKyBwYXIubWFyZ2luQm90dG9tICsgcGFyLmNvbHVtbkxhYmVsSGVpZ2h0KTtcblxuICAgIGxldCBzdmdJZCA9IGAke3Bhci5pZH1TdmdgO1xuICAgIGxldCB0b29sdGlwSWQgPSBgJHtwYXIuaWR9VG9vbHRpcGA7XG4gICAgbGV0IGRtYXBDb25maWcgPSBuZXcgRGVuZHJvSGVhdG1hcENvbmZpZyhwYXIud2lkdGgsIHBhci5yb3dUcmVlUGFuZWxXaWR0aCwgcGFyLmNvbFRyZWVQYW5lbEhlaWdodCwgbWFyZ2luKTtcbiAgICBsZXQgZG1hcCA9IG5ldyBEZW5kcm9IZWF0bWFwKHBhci5kYXRhLmNvbFRyZWUsIHBhci5kYXRhLnJvd1RyZWUsIHBhci5kYXRhLmhlYXRtYXAsIHBhci5jb2xvclNjaGVtZSwgcGFyLmNvcm5lclJhZGl1cywgZG1hcENvbmZpZywgdG9vbHRpcElkLCBwYXIudXNlTG9nLCBwYXIubG9nQmFzZSlcbiAgICBsZXQgc2hvd0NvbFRyZWUgPSBwYXIuZGF0YS5jb2xUcmVlICE9PSB1bmRlZmluZWQ7XG4gICAgbGV0IHNob3dSb3dUcmVlID0gcGFyLmRhdGEucm93VHJlZSAhPT0gdW5kZWZpbmVkO1xuICAgIGRtYXAucmVuZGVyKHBhci5pZCwgc3ZnSWQsIHNob3dDb2xUcmVlLCBzaG93Um93VHJlZSwgXCJ0b3BcIiwgOCk7XG59XG5cbmNvbnN0IHZpb2xpbkRlbW9Db25maWcgPSB7XG4gICAgaWQ6ICdndGV4R3JvdXBlZFZpb2xpblBsb3QnLFxuICAgIGRhdGE6IGRlbW9EYXRhLmdyb3VwZWRWaW9saW5QbG90LFxuICAgIHdpZHRoOiA1MDAsXG4gICAgaGVpZ2h0OiAzMDAsXG4gICAgbWFyZ2luTGVmdDogMTAwLFxuICAgIG1hcmdpblJpZ2h0OiAyMCxcbiAgICBtYXJnaW5Ub3A6IDUwLFxuICAgIG1hcmdpbkJvdHRvbTogMTAwLFxuICAgIHNob3dEaXZpZGVyOiB0cnVlLFxuICAgIHhQYWRkaW5nOiAwLjMsXG4gICAgeUxhYmVsOiBcIlJhbmRvbSBWYWx1ZVwiLFxuICAgIHNob3dHcm91cFg6IHRydWUsXG4gICAgc2hvd1g6IHRydWUsXG4gICAgeEFuZ2xlOiAwLFxuICAgIHNob3dXaGlza2VyOiBmYWxzZSxcbiAgICBzaG93TGVnZW5kOiBmYWxzZSxcbiAgICBzaG93U2FtcGxlU2l6ZTogdHJ1ZVxufTtcbmV4cG9ydCBmdW5jdGlvbiBncm91cGVkVmlvbGluUGxvdChwYXI9dmlvbGluRGVtb0NvbmZpZyl7XG4gICAgY29uc29sZS5sb2cocGFyLmRhdGEpO1xuICAgIGxldCBtYXJnaW4gPSB7XG4gICAgICAgIHRvcDogcGFyLm1hcmdpblRvcCxcbiAgICAgICAgcmlnaHQ6IHBhci5tYXJnaW5SaWdodCxcbiAgICAgICAgYm90dG9tOiBwYXIubWFyZ2luQm90dG9tLFxuICAgICAgICBsZWZ0OiBwYXIubWFyZ2luTGVmdFxuICAgIH07XG4gICAgLy8gdGVzdCBpbnB1dCBwYXJhbXNcbiAgICBpZiAoJChgIyR7cGFyLmlkfWApLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIGxldCBlcnJvciA9IGBJbnB1dCBFcnJvcjogRE9NIElEICR7cGFyLmlkfSBpcyBub3QgZm91bmQuYDtcbiAgICAgICAgYWxlcnQoZXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICBsZXQgaW5XaWR0aCA9IHBhci53aWR0aCAtIChwYXIubWFyZ2luTGVmdCArIHBhci5tYXJnaW5SaWdodCk7XG4gICAgbGV0IGluSGVpZ2h0ID0gcGFyLmhlaWdodCAtIChwYXIubWFyZ2luVG9wICsgcGFyLm1hcmdpbkJvdHRvbSk7XG5cbiAgICBsZXQgc3ZnSWQgPSBgJHtwYXIuaWR9U3ZnYDtcbiAgICBsZXQgdG9vbHRpcElkID0gYCR7cGFyLmlkfVRvb2x0aXBgO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBTVkdcbiAgICBsZXQgc3ZnID0gY3JlYXRlU3ZnKHBhci5pZCwgcGFyLndpZHRoLCBwYXIuaGVpZ2h0LCBtYXJnaW4pO1xuXG4gICAgY29uc3QgZ1Zpb2xpbiA9IG5ldyBHcm91cGVkVmlvbGluKHBhci5kYXRhKTtcbiAgICBnVmlvbGluLnJlbmRlcihzdmcsIGluV2lkdGgsIGluSGVpZ2h0LCBwYXIueFBhZGRpbmcsIHVuZGVmaW5lZCwgW10sIHBhci55TGFiZWwsIHBhci5zaG93R3JvdXBYLCBwYXIuU2hvd1gsIHBhci54QW5nbGUsIHBhci5zaG93V2hpc2tlciwgcGFyLnNob3dEaXZpZGVyLCBwYXIuc2hvd0xlZ2VuZCk7XG4gICAgY29uc3QgdG9vbHRpcCA9IGdWaW9saW4uY3JlYXRlVG9vbHRpcCh0b29sdGlwSWQpO1xuXG5cbn1cblxuIl0sIm5hbWVzIjpbInhodG1sIiwic3ZnIiwieGxpbmsiLCJ4bWwiLCJ4bWxucyIsIm5hbWUiLCJwcmVmaXgiLCJpIiwiaW5kZXhPZiIsInNsaWNlIiwibmFtZXNwYWNlcyIsImhhc093blByb3BlcnR5Iiwic3BhY2UiLCJsb2NhbCIsImZ1bGxuYW1lIiwibmFtZXNwYWNlIiwidGhpcyIsIm93bmVyRG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50TlMiLCJkb2N1bWVudCIsInVyaSIsIm5hbWVzcGFjZVVSSSIsImRvY3VtZW50RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJub25lIiwic2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yIiwiZW1wdHkiLCJxdWVyeVNlbGVjdG9yQWxsIiwibWF0Y2hlciIsIm1hdGNoZXMiLCJlbGVtZW50IiwidmVuZG9yTWF0Y2hlcyIsIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsIm1zTWF0Y2hlc1NlbGVjdG9yIiwibW96TWF0Y2hlc1NlbGVjdG9yIiwib01hdGNoZXNTZWxlY3RvciIsImNhbGwiLCJ1cGRhdGUiLCJBcnJheSIsImxlbmd0aCIsIkVudGVyTm9kZSIsInBhcmVudCIsImRhdHVtIiwiX25leHQiLCJfcGFyZW50IiwiX19kYXRhX18iLCJwcm90b3R5cGUiLCJjb25zdHJ1Y3RvciIsImFwcGVuZENoaWxkIiwiY2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJuZXh0Iiwia2V5UHJlZml4IiwiYmluZEluZGV4IiwiZ3JvdXAiLCJlbnRlciIsImV4aXQiLCJkYXRhIiwibm9kZSIsImdyb3VwTGVuZ3RoIiwiZGF0YUxlbmd0aCIsImJpbmRLZXkiLCJrZXkiLCJrZXlWYWx1ZSIsIm5vZGVCeUtleVZhbHVlIiwia2V5VmFsdWVzIiwiYXNjZW5kaW5nIiwiYSIsImIiLCJOYU4iLCJkZWZhdWx0VmlldyIsInN0eWxlVmFsdWUiLCJzdHlsZSIsImdldFByb3BlcnR5VmFsdWUiLCJnZXRDb21wdXRlZFN0eWxlIiwiY2xhc3NBcnJheSIsInN0cmluZyIsInRyaW0iLCJzcGxpdCIsImNsYXNzTGlzdCIsIkNsYXNzTGlzdCIsIl9ub2RlIiwiX25hbWVzIiwiZ2V0QXR0cmlidXRlIiwiY2xhc3NlZEFkZCIsIm5hbWVzIiwibGlzdCIsIm4iLCJhZGQiLCJjbGFzc2VkUmVtb3ZlIiwicmVtb3ZlIiwicHVzaCIsInNldEF0dHJpYnV0ZSIsImpvaW4iLCJzcGxpY2UiLCJjb250YWlucyIsInRleHRSZW1vdmUiLCJ0ZXh0Q29udGVudCIsImh0bWxSZW1vdmUiLCJpbm5lckhUTUwiLCJyYWlzZSIsIm5leHRTaWJsaW5nIiwicGFyZW50Tm9kZSIsImxvd2VyIiwicHJldmlvdXNTaWJsaW5nIiwiZmlyc3RDaGlsZCIsImNvbnN0YW50TnVsbCIsInJlbW92ZUNoaWxkIiwic2VsZWN0aW9uX2Nsb25lU2hhbGxvdyIsImNsb25lTm9kZSIsInNlbGVjdGlvbl9jbG9uZURlZXAiLCJmaWx0ZXJFdmVudHMiLCJldmVudCIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwiZmlsdGVyQ29udGV4dExpc3RlbmVyIiwibGlzdGVuZXIiLCJpbmRleCIsImNvbnRleHRMaXN0ZW5lciIsInJlbGF0ZWQiLCJyZWxhdGVkVGFyZ2V0IiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJldmVudDEiLCJldmVudDAiLCJvblJlbW92ZSIsInR5cGVuYW1lIiwib24iLCJfX29uIiwibyIsImoiLCJtIiwidHlwZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjYXB0dXJlIiwib25BZGQiLCJ2YWx1ZSIsIndyYXAiLCJkIiwiYWRkRXZlbnRMaXN0ZW5lciIsImRpc3BhdGNoRXZlbnQiLCJwYXJhbXMiLCJ3aW5kb3ciLCJDdXN0b21FdmVudCIsImNyZWF0ZUV2ZW50IiwiaW5pdEV2ZW50IiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJkZXRhaWwiLCJyb290IiwiU2VsZWN0aW9uIiwiZ3JvdXBzIiwicGFyZW50cyIsIl9ncm91cHMiLCJfcGFyZW50cyIsInNlbGVjdGlvbiIsInNlbGVjdCIsInN1Ymdyb3VwcyIsInN1Ym5vZGUiLCJzdWJncm91cCIsInNlbGVjdEFsbCIsInNlbGVjdG9yQWxsIiwiZmlsdGVyIiwibWF0Y2giLCJzaXplIiwiZWFjaCIsIngiLCJiaW5kIiwiZW50ZXJHcm91cCIsInVwZGF0ZUdyb3VwIiwicHJldmlvdXMiLCJpMCIsImkxIiwiX2VudGVyIiwiX2V4aXQiLCJtYXAiLCJzcGFyc2UiLCJtZXJnZSIsImdyb3VwczAiLCJncm91cHMxIiwibTAiLCJtMSIsIk1hdGgiLCJtaW4iLCJtZXJnZXMiLCJncm91cDAiLCJncm91cDEiLCJvcmRlciIsInNvcnQiLCJjb21wYXJlIiwiY29tcGFyZU5vZGUiLCJzb3J0Z3JvdXBzIiwic29ydGdyb3VwIiwiY2FsbGJhY2siLCJhcmd1bWVudHMiLCJhcHBseSIsIm5vZGVzIiwiYXR0ciIsImdldEF0dHJpYnV0ZU5TIiwicmVtb3ZlQXR0cmlidXRlTlMiLCJyZW1vdmVBdHRyaWJ1dGUiLCJ2Iiwic2V0QXR0cmlidXRlTlMiLCJwcmlvcml0eSIsInJlbW92ZVByb3BlcnR5Iiwic2V0UHJvcGVydHkiLCJwcm9wZXJ0eSIsImNsYXNzZWQiLCJ0ZXh0IiwiaHRtbCIsImFwcGVuZCIsImNyZWF0ZSIsImNyZWF0b3IiLCJpbnNlcnQiLCJiZWZvcmUiLCJjbG9uZSIsImRlZXAiLCJ0IiwidHlwZW5hbWVzIiwicGFyc2VUeXBlbmFtZXMiLCJkaXNwYXRjaCIsInNvdXJjZSIsImN1cnJlbnQiLCJzb3VyY2VFdmVudCIsImNoYW5nZWRUb3VjaGVzIiwib3duZXJTVkdFbGVtZW50IiwiY3JlYXRlU1ZHUG9pbnQiLCJwb2ludCIsImNsaWVudFgiLCJ5IiwiY2xpZW50WSIsIm1hdHJpeFRyYW5zZm9ybSIsImdldFNjcmVlbkNUTSIsImludmVyc2UiLCJyZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwibGVmdCIsImNsaWVudExlZnQiLCJ0b3AiLCJjbGllbnRUb3AiLCJmIiwiYmlzZWN0UmlnaHQiLCJsbyIsImhpIiwibWlkIiwicmlnaHQiLCJhcnJheSIsInZhbHVlcyIsInZhbHVlb2YiLCJkZWx0YSIsIm1lYW4iLCJzdW0iLCJpc05hTiIsIm51bWJlciIsInZhcmlhbmNlIiwic3FydCIsIm1heCIsInN0YXJ0Iiwic3RvcCIsInN0ZXAiLCJjZWlsIiwicmFuZ2UiLCJlMTAiLCJlNSIsImUyIiwiY291bnQiLCJyZXZlcnNlIiwidGlja3MiLCJ0aWNrSW5jcmVtZW50IiwiaXNGaW5pdGUiLCJmbG9vciIsInBvd2VyIiwibG9nIiwiTE4xMCIsImVycm9yIiwicG93IiwicCIsInZhbHVlMCIsIm51bWJlcnMiLCJxdWFudGlsZSIsImNyZWF0ZVN2ZyIsImlkIiwid2lkdGgiLCJoZWlnaHQiLCJtYXJnaW4iLCJzdmdJZCIsInVuZGVmaW5lZCIsInNvdXJjZVJhbmRvbU5vcm1hbCIsInJhbmRvbU5vcm1hbCIsIm11Iiwic2lnbWEiLCJyIiwicmFuZG9tIiwiTWFwIiwib2JqZWN0Iiwic2V0IiwiaXNBcnJheSIsImhhcyIsImdldCIsImNsZWFyIiwia2V5cyIsImVudHJpZXMiLCJzb3J0VmFsdWVzIiwicm9sbHVwIiwibmVzdCIsInNvcnRLZXlzIiwiZGVwdGgiLCJjcmVhdGVSZXN1bHQiLCJzZXRSZXN1bHQiLCJ2YWx1ZXNCeUtleSIsInJlc3VsdCIsImNyZWF0ZU9iamVjdCIsInNldE9iamVjdCIsImNyZWF0ZU1hcCIsInNldE1hcCIsInNvcnRLZXkiLCJrIiwiaW1wbGljaXQiLCJiYW5kIiwiYmFuZHdpZHRoIiwic2NhbGUiLCJvcmRpbmFsIiwiZG9tYWluIiwidW5rbm93biIsIl8iLCJjb3B5Iiwib3JkaW5hbFJhbmdlIiwicm91bmQiLCJwYWRkaW5nSW5uZXIiLCJwYWRkaW5nT3V0ZXIiLCJhbGlnbiIsInJlc2NhbGUiLCJzZXF1ZW5jZSIsInJhbmdlUm91bmQiLCJwYWRkaW5nIiwiZmFjdG9yeSIsImV4dGVuZCIsImRlZmluaXRpb24iLCJPYmplY3QiLCJDb2xvciIsInJlSSIsInJlTiIsInJlUCIsInJlSGV4MyIsInJlSGV4NiIsInJlUmdiSW50ZWdlciIsIlJlZ0V4cCIsInJlUmdiUGVyY2VudCIsInJlUmdiYUludGVnZXIiLCJyZVJnYmFQZXJjZW50IiwicmVIc2xQZXJjZW50IiwicmVIc2xhUGVyY2VudCIsIm5hbWVkIiwiYWxpY2VibHVlIiwiYW50aXF1ZXdoaXRlIiwiYXF1YSIsImFxdWFtYXJpbmUiLCJhenVyZSIsImJlaWdlIiwiYmlzcXVlIiwiYmxhY2siLCJibGFuY2hlZGFsbW9uZCIsImJsdWUiLCJibHVldmlvbGV0IiwiYnJvd24iLCJidXJseXdvb2QiLCJjYWRldGJsdWUiLCJjaGFydHJldXNlIiwiY2hvY29sYXRlIiwiY29yYWwiLCJjb3JuZmxvd2VyYmx1ZSIsImNvcm5zaWxrIiwiY3JpbXNvbiIsImN5YW4iLCJkYXJrYmx1ZSIsImRhcmtjeWFuIiwiZGFya2dvbGRlbnJvZCIsImRhcmtncmF5IiwiZGFya2dyZWVuIiwiZGFya2dyZXkiLCJkYXJra2hha2kiLCJkYXJrbWFnZW50YSIsImRhcmtvbGl2ZWdyZWVuIiwiZGFya29yYW5nZSIsImRhcmtvcmNoaWQiLCJkYXJrcmVkIiwiZGFya3NhbG1vbiIsImRhcmtzZWFncmVlbiIsImRhcmtzbGF0ZWJsdWUiLCJkYXJrc2xhdGVncmF5IiwiZGFya3NsYXRlZ3JleSIsImRhcmt0dXJxdW9pc2UiLCJkYXJrdmlvbGV0IiwiZGVlcHBpbmsiLCJkZWVwc2t5Ymx1ZSIsImRpbWdyYXkiLCJkaW1ncmV5IiwiZG9kZ2VyYmx1ZSIsImZpcmVicmljayIsImZsb3JhbHdoaXRlIiwiZm9yZXN0Z3JlZW4iLCJmdWNoc2lhIiwiZ2FpbnNib3JvIiwiZ2hvc3R3aGl0ZSIsImdvbGQiLCJnb2xkZW5yb2QiLCJncmF5IiwiZ3JlZW4iLCJncmVlbnllbGxvdyIsImdyZXkiLCJob25leWRldyIsImhvdHBpbmsiLCJpbmRpYW5yZWQiLCJpbmRpZ28iLCJpdm9yeSIsImtoYWtpIiwibGF2ZW5kZXIiLCJsYXZlbmRlcmJsdXNoIiwibGF3bmdyZWVuIiwibGVtb25jaGlmZm9uIiwibGlnaHRibHVlIiwibGlnaHRjb3JhbCIsImxpZ2h0Y3lhbiIsImxpZ2h0Z29sZGVucm9keWVsbG93IiwibGlnaHRncmF5IiwibGlnaHRncmVlbiIsImxpZ2h0Z3JleSIsImxpZ2h0cGluayIsImxpZ2h0c2FsbW9uIiwibGlnaHRzZWFncmVlbiIsImxpZ2h0c2t5Ymx1ZSIsImxpZ2h0c2xhdGVncmF5IiwibGlnaHRzbGF0ZWdyZXkiLCJsaWdodHN0ZWVsYmx1ZSIsImxpZ2h0eWVsbG93IiwibGltZSIsImxpbWVncmVlbiIsImxpbmVuIiwibWFnZW50YSIsIm1hcm9vbiIsIm1lZGl1bWFxdWFtYXJpbmUiLCJtZWRpdW1ibHVlIiwibWVkaXVtb3JjaGlkIiwibWVkaXVtcHVycGxlIiwibWVkaXVtc2VhZ3JlZW4iLCJtZWRpdW1zbGF0ZWJsdWUiLCJtZWRpdW1zcHJpbmdncmVlbiIsIm1lZGl1bXR1cnF1b2lzZSIsIm1lZGl1bXZpb2xldHJlZCIsIm1pZG5pZ2h0Ymx1ZSIsIm1pbnRjcmVhbSIsIm1pc3R5cm9zZSIsIm1vY2Nhc2luIiwibmF2YWpvd2hpdGUiLCJuYXZ5Iiwib2xkbGFjZSIsIm9saXZlIiwib2xpdmVkcmFiIiwib3JhbmdlIiwib3JhbmdlcmVkIiwib3JjaGlkIiwicGFsZWdvbGRlbnJvZCIsInBhbGVncmVlbiIsInBhbGV0dXJxdW9pc2UiLCJwYWxldmlvbGV0cmVkIiwicGFwYXlhd2hpcCIsInBlYWNocHVmZiIsInBlcnUiLCJwaW5rIiwicGx1bSIsInBvd2RlcmJsdWUiLCJwdXJwbGUiLCJyZWJlY2NhcHVycGxlIiwicmVkIiwicm9zeWJyb3duIiwicm95YWxibHVlIiwic2FkZGxlYnJvd24iLCJzYWxtb24iLCJzYW5keWJyb3duIiwic2VhZ3JlZW4iLCJzZWFzaGVsbCIsInNpZW5uYSIsInNpbHZlciIsInNreWJsdWUiLCJzbGF0ZWJsdWUiLCJzbGF0ZWdyYXkiLCJzbGF0ZWdyZXkiLCJzbm93Iiwic3ByaW5nZ3JlZW4iLCJzdGVlbGJsdWUiLCJ0YW4iLCJ0ZWFsIiwidGhpc3RsZSIsInRvbWF0byIsInR1cnF1b2lzZSIsInZpb2xldCIsIndoZWF0Iiwid2hpdGUiLCJ3aGl0ZXNtb2tlIiwieWVsbG93IiwieWVsbG93Z3JlZW4iLCJjb2xvciIsImZvcm1hdCIsInRvTG93ZXJDYXNlIiwiZXhlYyIsIlJnYiIsInBhcnNlSW50IiwicmdibiIsInJnYmEiLCJoc2xhIiwiZyIsInJnYkNvbnZlcnQiLCJyZ2IiLCJvcGFjaXR5IiwiaGV4IiwidG9TdHJpbmciLCJoIiwicyIsImwiLCJIc2wiLCJoc2wycmdiIiwibTIiLCJkZWZpbmUiLCJkaXNwbGF5YWJsZSIsImJyaWdodGVyIiwiZGFya2VyIiwiaHNsQ29udmVydCIsImRlZzJyYWQiLCJQSSIsInJhZDJkZWciLCJYbiIsIlluIiwiWm4iLCJ0MCIsInQxIiwidDIiLCJ0MyIsImxhYkNvbnZlcnQiLCJMYWIiLCJIY2wiLCJjb3MiLCJjIiwic2luIiwieiIsInJnYjJscmdiIiwieHl6MmxhYiIsImxhYjJ4eXoiLCJscmdiMnJnYiIsImF0YW4yIiwiaGNsQ29udmVydCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRUQiLCJFQiIsIkJDX0RBIiwiY3ViZWhlbGl4IiwiQ3ViZWhlbGl4IiwiYmwiLCJjdWJlaGVsaXhDb252ZXJ0IiwiYmFzaXMiLCJ2MCIsInYxIiwidjIiLCJ2MyIsImNvc2giLCJzaW5oIiwibGluZWFyIiwiZ2FtbWEiLCJub2dhbW1hIiwiZXhwb25lbnRpYWwiLCJjb25zdGFudCIsInJnYkdhbW1hIiwiZW5kIiwiY29sb3JSZ2IiLCJyZ2JTcGxpbmUiLCJzcGxpbmUiLCJjb2xvcnMiLCJyZ2JCYXNpcyIsInJlQSIsInJlQiIsImNzc05vZGUiLCJjc3NSb290IiwiY3NzVmlldyIsInN2Z05vZGUiLCJhbSIsImJtIiwiYnMiLCJiaSIsImxhc3RJbmRleCIsInEiLCJvbmUiLCJ6ZXJvIiwiRGF0ZSIsInNldFRpbWUiLCJuYiIsIm5hIiwidmFsdWVPZiIsImRlZ3JlZXMiLCJpZGVudGl0eSIsInRyYW5zbGF0ZVgiLCJ0cmFuc2xhdGVZIiwicm90YXRlIiwic2tld1giLCJzY2FsZVgiLCJzY2FsZVkiLCJlIiwiYXRhbiIsImludGVycG9sYXRlVHJhbnNmb3JtIiwicGFyc2UiLCJweENvbW1hIiwicHhQYXJlbiIsImRlZ1BhcmVuIiwicG9wIiwieGEiLCJ5YSIsInhiIiwieWIiLCJ0cmFuc2xhdGUiLCJpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcyIsInRyYW5zZm9ybSIsImRlY29tcG9zZSIsImludGVycG9sYXRlVHJhbnNmb3JtU3ZnIiwiYmFzZVZhbCIsImNvbnNvbGlkYXRlIiwibWF0cml4IiwiaHVlIiwiY3ViZWhlbGl4R2FtbWEiLCJjb2xvckN1YmVoZWxpeCIsImN1YmVoZWxpeCQxIiwiY3ViZWhlbGl4TG9uZyIsInVuaXQiLCJkZWludGVycG9sYXRlTGluZWFyIiwiYmltYXAiLCJkZWludGVycG9sYXRlIiwicmVpbnRlcnBvbGF0ZSIsImQwIiwiZDEiLCJyMCIsInIxIiwicG9seW1hcCIsImJpc2VjdCIsInRvRXhwb25lbnRpYWwiLCJjb2VmZmljaWVudCIsImZvcm1hdERlY2ltYWwiLCJhYnMiLCJyZSIsImZvcm1hdFNwZWNpZmllciIsInNwZWNpZmllciIsIkZvcm1hdFNwZWNpZmllciIsIkVycm9yIiwiZmlsbCIsInNpZ24iLCJzeW1ib2wiLCJjb21tYSIsInByZWNpc2lvbiIsInByZWZpeEV4cG9uZW50IiwibG9jYWxlIiwiZm9ybWF0UHJlZml4Iiwib3V0IiwiZXhwb25lbnQiLCIlIiwidG9GaXhlZCIsInRvUHJlY2lzaW9uIiwiZm9ybWF0Um91bmRlZCIsIlgiLCJ0b1VwcGVyQ2FzZSIsInByZWZpeGVzIiwiZ3JvdXBpbmciLCJ0aG91c2FuZHMiLCJzdWJzdHJpbmciLCJjdXJyZW5jeSIsImRlY2ltYWwiLCJudW1lcmFscyIsInJlcGxhY2UiLCJmb3JtYXROdW1lcmFscyIsInBlcmNlbnQiLCJuZXdGb3JtYXQiLCJmb3JtYXRUeXBlcyIsInRlc3QiLCJzdWZmaXgiLCJmb3JtYXRUeXBlIiwibWF5YmVTdWZmaXgiLCJ2YWx1ZVByZWZpeCIsInZhbHVlU3VmZml4IiwidmFsdWVOZWdhdGl2ZSIsImZvcm1hdFRyaW0iLCJjaGFyQ29kZUF0IiwiSW5maW5pdHkiLCJmb3JtYXRMb2NhbGUiLCJzdGVwMCIsInN0ZXAxIiwidGlja1N0ZXAiLCJwcmVjaXNpb25QcmVmaXgiLCJwcmVjaXNpb25Sb3VuZCIsInByZWNpc2lvbkZpeGVkIiwibGluZWFyaXNoIiwidGlja0Zvcm1hdCIsIm5pY2UiLCJwaWVjZXdpc2UiLCJvdXRwdXQiLCJpbnB1dCIsImludGVycG9sYXRlIiwiaW50ZXJwb2xhdGVWYWx1ZSIsImNsYW1wIiwiZGVpbnRlcnBvbGF0ZUNsYW1wIiwiaW52ZXJ0IiwicmVpbnRlcnBvbGF0ZUNsYW1wIiwiaW50ZXJwb2xhdGVSb3VuZCIsImNvbnRpbnVvdXMiLCJuZXdJbnRlcnZhbCIsImZsb29yaSIsIm9mZnNldGkiLCJmaWVsZCIsImludGVydmFsIiwiZGF0ZSIsIm9mZnNldCIsImV2ZXJ5IiwibWlsbGlzZWNvbmQiLCJkdXJhdGlvbk1pbnV0ZSIsImR1cmF0aW9uV2VlayIsImRheSIsImdldFVUQ1NlY29uZHMiLCJnZXRNaW51dGVzIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJnZXRIb3VycyIsInNldEhvdXJzIiwic2V0RGF0ZSIsImdldERhdGUiLCJ3ZWVrZGF5IiwiZ2V0RGF5Iiwic3VuZGF5IiwibW9uZGF5IiwidGh1cnNkYXkiLCJ5ZWFyIiwic2V0TW9udGgiLCJnZXRNb250aCIsImdldEZ1bGxZZWFyIiwic2V0RnVsbFllYXIiLCJzZXRVVENTZWNvbmRzIiwiZ2V0VVRDTWludXRlcyIsInNldFVUQ01pbnV0ZXMiLCJnZXRVVENIb3VycyIsInV0Y0RheSIsInNldFVUQ0hvdXJzIiwic2V0VVRDRGF0ZSIsImdldFVUQ0RhdGUiLCJ1dGNXZWVrZGF5IiwiZ2V0VVRDRGF5IiwidXRjU3VuZGF5IiwidXRjTW9uZGF5IiwidXRjVGh1cnNkYXkiLCJ1dGNZZWFyIiwic2V0VVRDTW9udGgiLCJnZXRVVENNb250aCIsImdldFVUQ0Z1bGxZZWFyIiwic2V0VVRDRnVsbFllYXIiLCJsb2NhbERhdGUiLCJIIiwiTSIsIlMiLCJMIiwidXRjRGF0ZSIsIlVUQyIsIm5ld1llYXIiLCJ1dGNGb3JtYXQiLCJ1dGNQYXJzZSIsInBhZHMiLCItIiwiMCIsIm51bWJlclJlIiwicGVyY2VudFJlIiwicmVxdW90ZVJlIiwicGFkIiwicmVxdW90ZSIsImZvcm1hdFJlIiwiZm9ybWF0TG9va3VwIiwicGFyc2VXZWVrZGF5TnVtYmVyU3VuZGF5IiwidyIsInBhcnNlV2Vla2RheU51bWJlck1vbmRheSIsInUiLCJwYXJzZVdlZWtOdW1iZXJTdW5kYXkiLCJVIiwicGFyc2VXZWVrTnVtYmVySVNPIiwiViIsInBhcnNlV2Vla051bWJlck1vbmRheSIsIlciLCJwYXJzZUZ1bGxZZWFyIiwicGFyc2VZZWFyIiwicGFyc2Vab25lIiwiWiIsInBhcnNlTW9udGhOdW1iZXIiLCJwYXJzZURheU9mTW9udGgiLCJwYXJzZURheU9mWWVhciIsInBhcnNlSG91cjI0IiwicGFyc2VNaW51dGVzIiwicGFyc2VTZWNvbmRzIiwicGFyc2VNaWxsaXNlY29uZHMiLCJwYXJzZU1pY3Jvc2Vjb25kcyIsInBhcnNlTGl0ZXJhbFBlcmNlbnQiLCJwYXJzZVVuaXhUaW1lc3RhbXAiLCJRIiwicGFyc2VVbml4VGltZXN0YW1wU2Vjb25kcyIsImZvcm1hdERheU9mTW9udGgiLCJmb3JtYXRIb3VyMjQiLCJmb3JtYXRIb3VyMTIiLCJmb3JtYXREYXlPZlllYXIiLCJ0aW1lRGF5IiwidGltZVllYXIiLCJmb3JtYXRNaWxsaXNlY29uZHMiLCJnZXRNaWxsaXNlY29uZHMiLCJmb3JtYXRNaWNyb3NlY29uZHMiLCJmb3JtYXRNb250aE51bWJlciIsImZvcm1hdE1pbnV0ZXMiLCJmb3JtYXRTZWNvbmRzIiwiZ2V0U2Vjb25kcyIsImZvcm1hdFdlZWtkYXlOdW1iZXJNb25kYXkiLCJmb3JtYXRXZWVrTnVtYmVyU3VuZGF5IiwidGltZVN1bmRheSIsImZvcm1hdFdlZWtOdW1iZXJJU08iLCJ0aW1lVGh1cnNkYXkiLCJmb3JtYXRXZWVrZGF5TnVtYmVyU3VuZGF5IiwiZm9ybWF0V2Vla051bWJlck1vbmRheSIsInRpbWVNb25kYXkiLCJmb3JtYXRZZWFyIiwiZm9ybWF0RnVsbFllYXIiLCJmb3JtYXRab25lIiwiZm9ybWF0VVRDRGF5T2ZNb250aCIsImZvcm1hdFVUQ0hvdXIyNCIsImZvcm1hdFVUQ0hvdXIxMiIsImZvcm1hdFVUQ0RheU9mWWVhciIsImZvcm1hdFVUQ01pbGxpc2Vjb25kcyIsImdldFVUQ01pbGxpc2Vjb25kcyIsImZvcm1hdFVUQ01pY3Jvc2Vjb25kcyIsImZvcm1hdFVUQ01vbnRoTnVtYmVyIiwiZm9ybWF0VVRDTWludXRlcyIsImZvcm1hdFVUQ1NlY29uZHMiLCJmb3JtYXRVVENXZWVrZGF5TnVtYmVyTW9uZGF5IiwiZG93IiwiZm9ybWF0VVRDV2Vla051bWJlclN1bmRheSIsImZvcm1hdFVUQ1dlZWtOdW1iZXJJU08iLCJmb3JtYXRVVENXZWVrZGF5TnVtYmVyU3VuZGF5IiwiZm9ybWF0VVRDV2Vla051bWJlck1vbmRheSIsImZvcm1hdFVUQ1llYXIiLCJmb3JtYXRVVENGdWxsWWVhciIsImZvcm1hdFVUQ1pvbmUiLCJmb3JtYXRMaXRlcmFsUGVyY2VudCIsImZvcm1hdFVuaXhUaW1lc3RhbXAiLCJmb3JtYXRVbml4VGltZXN0YW1wU2Vjb25kcyIsImxvY2FsZV9kYXRlVGltZSIsImRhdGVUaW1lIiwibG9jYWxlX2RhdGUiLCJsb2NhbGVfdGltZSIsInRpbWUiLCJsb2NhbGVfcGVyaW9kcyIsInBlcmlvZHMiLCJsb2NhbGVfd2Vla2RheXMiLCJkYXlzIiwibG9jYWxlX3Nob3J0V2Vla2RheXMiLCJzaG9ydERheXMiLCJsb2NhbGVfbW9udGhzIiwibW9udGhzIiwibG9jYWxlX3Nob3J0TW9udGhzIiwic2hvcnRNb250aHMiLCJwZXJpb2RSZSIsInBlcmlvZExvb2t1cCIsIndlZWtkYXlSZSIsIndlZWtkYXlMb29rdXAiLCJzaG9ydFdlZWtkYXlSZSIsInNob3J0V2Vla2RheUxvb2t1cCIsIm1vbnRoUmUiLCJtb250aExvb2t1cCIsInNob3J0TW9udGhSZSIsInNob3J0TW9udGhMb29rdXAiLCJmb3JtYXRzIiwiSSIsIlkiLCJ1dGNGb3JtYXRzIiwicGFyc2VzIiwicGFyc2VTcGVjaWZpZXIiLCJjaGFyQXQiLCJuZXdQYXJzZSIsIm5ld0RhdGUiLCJ3ZWVrIiwiZGVmYXVsdExvY2FsZSIsInRvSVNPU3RyaW5nIiwibm9vcCIsIkRpc3BhdGNoIiwiY29uY2F0IiwidHlwZXMiLCJUIiwidGhhdCIsImFyZ3MiLCJ0YXNrSGVhZCIsInRhc2tUYWlsIiwiZnJhbWUiLCJ0aW1lb3V0IiwicG9rZURlbGF5IiwiY2xvY2tMYXN0IiwiY2xvY2tOb3ciLCJjbG9ja1NrZXciLCJjbG9jayIsInBlcmZvcm1hbmNlIiwibm93Iiwic2V0RnJhbWUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJzZXRUaW1lb3V0IiwiY2xlYXJOb3ciLCJUaW1lciIsIl9jYWxsIiwiX3RpbWUiLCJ0aW1lciIsImRlbGF5IiwicmVzdGFydCIsIndha2UiLCJ0aW1lckZsdXNoIiwic2xlZXAiLCJuYXAiLCJwb2tlIiwiY2xlYXJUaW1lb3V0IiwiY2xlYXJJbnRlcnZhbCIsInNldEludGVydmFsIiwiVHlwZUVycm9yIiwiZWxhcHNlZCIsImVtcHR5T24iLCJlbXB0eVR3ZWVuIiwiQ1JFQVRFRCIsIlNDSEVEVUxFRCIsIlNUQVJUSU5HIiwiU1RBUlRFRCIsIlJVTk5JTkciLCJFTkRJTkciLCJFTkRFRCIsInRpbWluZyIsInNjaGVkdWxlcyIsIl9fdHJhbnNpdGlvbiIsInNlbGYiLCJ0d2VlbiIsInN0YXRlIiwidGljayIsImR1cmF0aW9uIiwiZWFzZSIsImluaXQiLCJzY2hlZHVsZSIsImFjdGl2ZSIsInR3ZWVuVmFsdWUiLCJ0cmFuc2l0aW9uIiwiX2lkIiwiaW50ZXJwb2xhdGVOdW1iZXIiLCJpbnRlcnBvbGF0ZVJnYiIsImludGVycG9sYXRlU3RyaW5nIiwiVHJhbnNpdGlvbiIsIl9uYW1lIiwibmV3SWQiLCJzZWxlY3Rpb25fcHJvdG90eXBlIiwiY2hpbGRyZW4iLCJpbmhlcml0IiwiaWQwIiwiaWQxIiwib24wIiwib24xIiwic2l0Iiwib25GdW5jdGlvbiIsImF0dHJUd2VlbiIsInZhbHVlMDAiLCJ2YWx1ZTEwIiwiaW50ZXJwb2xhdGUwIiwidmFsdWUxIiwiX3ZhbHVlIiwic3R5bGVUd2VlbiIsInN0eWxlUmVtb3ZlIiwic3R5bGVSZW1vdmVFbmQiLCJzdHlsZUZ1bmN0aW9uIiwic3R5bGVDb25zdGFudCIsInRleHRGdW5jdGlvbiIsInRleHRDb25zdGFudCIsInR3ZWVuMCIsInR3ZWVuMSIsImVhc2VDb25zdGFudCIsImRlZmF1bHRUaW1pbmciLCJpbnRlcnJ1cHQiLCJzY2hlbWUiLCJpbnRlcnBvbGF0ZVJnYkJhc2lzIiwicmFtcCIsImludGVycG9sYXRlQ3ViZWhlbGl4TG9uZyIsInJhbXAkMSIsInNldENvbG9yU2NhbGUiLCJkbWluIiwiZG1heCIsInNlcXVlbnRpYWwiLCJpbnRlcnBvbGF0b3IiLCJ4MCIsIngxIiwiazEwIiwic2NhbGVTZXF1ZW50aWFsIiwiaW50ZXJwb2xhdG9ycyIsIkJ1R24iLCJkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZUJ1R24iLCJPclJkIiwiZDNDaHJvbWF0aWMuaW50ZXJwb2xhdGVPclJkIiwiUHVCdSIsImQzQ2hyb21hdGljLmludGVycG9sYXRlUHVCdSIsIllsR25CdSIsImQzQ2hyb21hdGljLmludGVycG9sYXRlWWxHbkJ1IiwiQmx1ZXMiLCJkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZUJsdWVzIiwiT3JhbmdlcyIsImQzQ2hyb21hdGljLmludGVycG9sYXRlT3JhbmdlcyIsIkdyZWVucyIsImQzQ2hyb21hdGljLmludGVycG9sYXRlR3JlZW5zIiwiUHVycGxlcyIsImQzQ2hyb21hdGljLmludGVycG9sYXRlUHVycGxlcyIsIlJlZHMiLCJkM0Nocm9tYXRpYy5pbnRlcnBvbGF0ZVJlZHMiLCJHcmV5cyIsImQzQ2hyb21hdGljLmludGVycG9sYXRlR3JleXMiLCJHcmF5cyIsImVyciIsImFsZXJ0IiwiZ2V0Q29sb3JJbnRlcnBvbGF0b3IiLCJUb29sYmFyIiwiW29iamVjdCBPYmplY3RdIiwiZG9tSWQiLCJ0b29sdGlwIiwidmVydGljYWwiLCIkIiwic2hvdyIsImJ0bkNsYXNzZXMiLCJiYXIiLCJhZGRDbGFzcyIsImFwcGVuZFRvIiwiYnV0dG9ucyIsIm91dGZpbGVOYW1lIiwiY2xvbmVJZCIsImljb24iLCJjcmVhdGVCdXR0b24iLCJkb3dubG9hZFN2ZyIsImhpZGUiLCIkYnV0dG9uIiwiZmlsZU5hbWUiLCJzdmdPYmoiLCIkc3ZnQ29weSIsInN0eWxlcyIsImRvbSIsInVzZWQiLCJzaGVldHMiLCJzdHlsZVNoZWV0cyIsImNzc1J1bGVzIiwicnVsZXMiLCJydWxlIiwiZWxlbXMiLCJmaW5kIiwic2VsZWN0b3JUZXh0IiwiY3NzVGV4dCIsInBhcnNlQ3NzU3R5bGVzIiwicHJlcGVuZCIsInN2Z0h0bWwiLCJzdmdCbG9iIiwiQmxvYiIsInNhdmVBcyIsIlRvb2x0aXAiLCJ2ZXJib3NlIiwib2Zmc2V0WCIsIm9mZnNldFkiLCJpbmZvIiwiY29uc29sZSIsImVkaXQiLCJtb3ZlIiwicGFnZVgiLCJwYWdlWSIsIkhlYXRtYXAiLCJ1c2VMb2ciLCJsb2dCYXNlIiwiY29sb3JTY2hlbWUiLCJ0b29sdGlwSWQiLCJudWxsQ29sb3IiLCJjb2xvclNjYWxlIiwieExpc3QiLCJ5TGlzdCIsInhTY2FsZSIsInlTY2FsZSIsInRvb2xiYXIiLCJsZWdlbmRDb25maWciLCJ0aXRsZSIsImNvbmZpZyIsImJhc2UiLCJjZWxsIiwib3JpZW50YXRpb24iLCJkcmF3Q29sb3JMZWdlbmQiLCJkaW1lbnNpb25zIiwiYW5nbGUiLCJfc2V0WExpc3QiLCJfc2V0WUxpc3QiLCJkcmF3IiwibG9nMiIsIk51bWJlciIsImxvZzEwIiwidXNlTnVsbENvbG9yIiwiY29sdW1uTGFiZWxQb3NBZGp1c3QiLCJ4TGFiZWxzIiwiY2VsbHMiLCJzZWxlY3RlZCIsImNlbGxNb3VzZW92ZXIiLCJjZWxsTW91c2VvdXQiLCJyb3dDbGFzcyIsImNvbENsYXNzIiwiZGlzcGxheVZhbHVlIiwicGFyc2VGbG9hdCIsIm5ld0xpc3QiLCJzY2FsZUJhbmQiLCJEZW5kcm9IZWF0bWFwQ29uZmlnIiwicm9vdFciLCJpbm5lcldpZHRoIiwibGVmdFBhbmVsVyIsInRvcFBhbmVsSCIsImJvdHRvbSIsImNlbGxIIiwiYWRqdXN0IiwibGVmdFRyZWVQYW5lbCIsInRvcFRyZWVQYW5lbCIsImhlYXRtYXBQYW5lbCIsImxlZ2VuZFBhbmVsIiwicGFuZWxzIiwibWFpbiIsImxlZ2VuZCIsImhpZXJhcmNoeSIsImNoaWxkcyIsIk5vZGUiLCJ2YWx1ZWQiLCJkZWZhdWx0Q2hpbGRyZW4iLCJlYWNoQmVmb3JlIiwiY29tcHV0ZUhlaWdodCIsImNvcHlEYXRhIiwiZWFjaEFmdGVyIiwicGF0aCIsImFuY2VzdG9yIiwiYU5vZGVzIiwiYW5jZXN0b3JzIiwiYk5vZGVzIiwibGVhc3RDb21tb25BbmNlc3RvciIsImRlc2NlbmRhbnRzIiwibGVhdmVzIiwibGlua3MiLCJ0YXJnZXQiLCJlcHNpbG9uIiwiZW50ZXJpbmciLCJfX2F4aXMiLCJheGlzIiwib3JpZW50IiwidGlja0FyZ3VtZW50cyIsInRpY2tWYWx1ZXMiLCJ0aWNrU2l6ZUlubmVyIiwidGlja1NpemVPdXRlciIsInRpY2tQYWRkaW5nIiwiY29udGV4dCIsInNwYWNpbmciLCJyYW5nZTAiLCJyYW5nZTEiLCJwb3NpdGlvbiIsInRpY2tFeGl0IiwidGlja0VudGVyIiwibGluZSIsInRpY2tTaXplIiwiYXhpc0JvdHRvbSIsImF4aXNMZWZ0IiwiRGVuZHJvZ3JhbSIsIm5ld2ljayIsInBvc3RvcmRlciIsInRyZWUiLCJ0b2tlbnMiLCJ0b2tlbiIsInN1YnRyZWUiLCJicmFuY2hzZXQiLCJwYXJzZU5ld2ljayIsIl9zZXRYU2NhbGUiLCJfc2V0WVNjYWxlIiwiX2RyYXdIVHJlZSIsIl9kcmF3VlRyZWUiLCJzZXRZIiwicmVkdWNlIiwic2V0WCIsIl9nZXRCcmFuY2hMZW5ndGhUb1Jvb3QiLCJfc29ydE5vZGVzQnlMZXZlbCIsImZvckVhY2giLCJpbm9kZXMiLCJkMyIsIl9hc3NpZ25Qb3N0b3JkZXIiLCJzY2FsZUxpbmVhciIsIl9nZXRNYXhCcmFuY2hMZW5ndGgiLCJEZW5kcm9IZWF0bWFwIiwiY29sdW1uVHJlZSIsInJvd1RyZWUiLCJoZWF0bWFwRGF0YSIsInN0YXJ0c1dpdGgiLCJoZWF0bWFwIiwiZXh0ZXJuYWwiLCJvYmplY3RzIiwidmlzdWFsQ29tcG9uZW50cyIsInNob3dDb2x1bW5UcmVlIiwic2hvd1Jvd1RyZWUiLCJsZWdlbmRQb3MiLCJfdXBkYXRlQ29uZmlnIiwieGxpc3QiLCJ5bGlzdCIsIl9yZW5kZXJUcmVlIiwiX3JlbmRlckhlYXRtYXAiLCJkaXJlY3Rpb24iLCJsYWJlbENsYXNzIiwiaWRzIiwibGFiZWwiLCJpbmNsdWRlcyIsInJlZHJhdyIsInJvd3MiLCJwaSIsInRhdSIsInRhdUVwc2lsb24iLCJQYXRoIiwiX3gwIiwiX3kwIiwiX3gxIiwiX3kxIiwibW92ZVRvIiwiY2xvc2VQYXRoIiwibGluZVRvIiwicXVhZHJhdGljQ3VydmVUbyIsInkxIiwiYmV6aWVyQ3VydmVUbyIsIngyIiwieTIiLCJhcmNUbyIsInkwIiwieDIxIiwieTIxIiwieDAxIiwieTAxIiwibDAxXzIiLCJ4MjAiLCJ5MjAiLCJsMjFfMiIsImwyMF8yIiwibDIxIiwibDAxIiwiYWNvcyIsInQwMSIsInQyMSIsImFyYyIsImEwIiwiYTEiLCJjY3ciLCJkeCIsImR5IiwiY3ciLCJkYSIsIkxpbmVhciIsIl9jb250ZXh0IiwiYXJlYVN0YXJ0IiwiX2xpbmUiLCJhcmVhRW5kIiwibGluZVN0YXJ0IiwiX3BvaW50IiwibGluZUVuZCIsInBvaW50WCIsInBvaW50WSIsImRlZmluZWQiLCJjdXJ2ZSIsImN1cnZlTGluZWFyIiwiYnVmZmVyIiwiZGVmaW5lZDAiLCJhcmVhIiwieDB6IiwieTB6IiwiYXJlYWxpbmUiLCJsaW5lWDAiLCJsaW5lWTAiLCJsaW5lWTEiLCJsaW5lWDEiLCJfayIsIl94MiIsIl95MiIsIkNhcmRpbmFsIiwidGVuc2lvbiIsImN1c3RvbSIsImNhcmRpbmFsIiwic2xvcGUzIiwiaDAiLCJoMSIsInMwIiwiczEiLCJzbG9wZTIiLCJNb25vdG9uZVgiLCJSZWZsZWN0Q29udGV4dCIsIl90MCIsInByZXZlbnREZWZhdWx0Iiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwidmlldyIsIm5vZXZlbnQiLCJfX25vc2VsZWN0IiwiTW96VXNlclNlbGVjdCIsIm5vcHJvcGFnYXRpb24iLCJNT0RFX0RSQUciLCJNT0RFX1NQQUNFIiwiTU9ERV9IQU5ETEUiLCJNT0RFX0NFTlRFUiIsImhhbmRsZXMiLCJ4eSIsIlhZIiwiY3Vyc29ycyIsIm92ZXJsYXkiLCJudyIsIm5lIiwic2UiLCJzdyIsImZsaXBYIiwiZmxpcFkiLCJzaWduc1giLCJzaWduc1kiLCJkZWZhdWx0RmlsdGVyIiwiYnV0dG9uIiwiZGVmYXVsdEV4dGVudCIsIl9fYnJ1c2giLCJleHRlbnQiLCJkaW0iLCJ0b3VjaGVuZGluZyIsImxpc3RlbmVycyIsImJydXNoIiwiaGFuZGxlU2l6ZSIsImluaXRpYWxpemUiLCJoYW5kbGUiLCJzdGFydGVkIiwiZW1pdHRlciIsIkVtaXR0ZXIiLCJ0b3VjaGVzIiwidzAiLCJ3MSIsIm4wIiwibjEiLCJlMCIsImUxIiwibW92aW5nIiwibG9ja1giLCJsb2NrWSIsIm1vZGUiLCJtZXRhS2V5IiwiYWx0S2V5Iiwic2lnblgiLCJzaWduWSIsIk4iLCJzaGlmdGluZyIsInNoaWZ0S2V5IiwicG9pbnQwIiwibW91c2UiLCJlbWl0IiwiYmVmb3Jlc3RhcnQiLCJtb3ZlZCIsImVuZGVkIiwia2V5Q29kZSIsImRyYWdEaXNhYmxlIiwicG9pbnQxIiwibm9jbGljayIsImRyYWdFbmFibGUiLCJzZWxlY3Rpb24wIiwic2VsZWN0aW9uMSIsInN0YXJ0aW5nIiwiY3VzdG9tRXZlbnQiLCJCcnVzaEV2ZW50Iiwia2VybmVsIiwiZXBhbmVjaG5pa292IiwiZ2F1c3NpYW4iLCJleHAiLCJrZXJuZWxCYW5kd2lkdGgiLCJucmQiLCJkZXZpYXRpb24iLCJHcm91cGVkVmlvbGluIiwiZ3JvdXBJbmZvIiwiX3Nhbml0eUNoZWNrIiwieFBhZGRpbmciLCJ4RG9tYWluIiwieURvbWFpbiIsInlMYWJlbCIsInNob3dYIiwic2hvd1N1YlgiLCJzdWJYQW5nbGUiLCJzaG93V2hpc2tlciIsInNob3dEaXZpZGVyIiwic2hvd0xlZ2VuZCIsInNob3dTaXplIiwicmVzZXQiLCJyZW5kZXIiLCJhbGxWIiwic3VieCIsImVudHJ5IiwiX2RyYXdWaW9saW4iLCJzaXplU2NhbGUiLCJzdWJ4RyIsInhBeGlzIiwieUF4aXMiLCJfYWRkR3JvdXBEaXZpZGVyIiwibGVnZW5kRyIsInRoZUJydXNoIiwiem9vbSIsImlkZWxUaW1lb3V0IiwibG93Qm91bmQiLCJ1cHBlckJvdW5kIiwiZ2ciLCJxMSIsInEzIiwibWVkIiwibWVkaWFuIiwiZ0luZGV4Iiwia2RlIiwia2VybmVsRGVuc2l0eUVzdGltYXRvciIsImVEb21haW4iLCJ2ZXJ0aWNlcyIsInpNYXgiLCJ2aW9saW5HIiwidmlvbGluIiwidlBhdGgiLCJpcXIiLCJ1cHBlciIsIndhcm4iLCJnZXRYIiwiR2VuZU1vZGVsIiwiZ2VuZSIsImV4b25zIiwiZXhvbnNDdXJhdGVkIiwianVuY3Rpb25zIiwiaXNJc29mb3JtIiwibWF4SW50cm9uTGVuZ3RoIiwibWluRXhvbldpZHRoIiwic3RyYW5kIiwiZXhvbk51bWJlciIsImp1bmN0aW9uSWQiLCJpbnRyb25MZW5ndGgiLCJqZGF0YSIsImVkYXRhIiwianNjYWxlIiwiZXNjYWxlIiwiamNvbG9yIiwiZXhvbklkIiwic2V0WHNjYWxlIiwiZXhvblkiLCJvcmlFeG9uIiwiX2ZpbmRFeG9uIiwiY2hyb21TdGFydCIsImNocm9tRW5kIiwiZGlzdCIsInRyYW5zY3JpcHRJZCIsInN0YXJ0RXhvbiIsImVuZEV4b24iLCJkaXNwbGF5TmFtZSIsImRpc3QyIiwic3RhcnRYIiwiZW5kWCIsImN4IiwiY3kiLCJjb3VudHMiLCJjdXJ2ZUNhcmRpbmFsIiwianVuY0RvdHMiLCJleG9uUmVjdHMiLCJleG9uUmVjdHMyIiwibGFiZWxPbiIsImdlbmVTeW1ib2wiLCJtYXhFeG9uTGVuZ3RoIiwibWluTGVuZ3RoIiwidG90YWxFeG9uTGVuZ3RoIiwicG9zIiwicmVzdWx0cyIsIklzb2Zvcm1UcmFja1ZpZXdlciIsImlzb2Zvcm1zIiwiaXNvZm9ybUV4b25zIiwibW9kZWxFeG9ucyIsInZpc3VhbERvbSIsImJhclNjYWxlIiwiZGF0YUxhYmVsIiwic29ydFRyYWNrcyIsImxvbGxpcG9wR3JhcGgiLCJheGlzUmlnaHQiLCJzZXRZc2NhbGUiLCJpc29UcmFja3MiLCJfcmVuZGVyTW9kZWxzIiwiaXNvZm9ybSIsInJlZmVyZW5jZSIsIm1vZGVsIiwiaXNvZm9ybUciLCJkZW1vRGF0YSIsInBhciIsInNjYWxlRmFjdG9yIiwiZ2VuZXJhdGVSYW5kb21NYXRyaXgiLCJkZW5kcm9IZWF0bWFwIiwiY29sVHJlZSIsImdyb3VwZWRWaW9saW5QbG90IiwidHJhbnNjcmlwdFRyYWNrcyIsIkVOU1QwMDAwMDMxMTU5NS45IiwiY2hyb20iLCJ0cmFuc2NyaXB0cyIsImNocm9tb3NvbWUiLCJnZW5jb2RlSWQiLCJ0cmFuc2NyaXB0VHJhY2tzQ29uZmlnIiwibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIiwibGFiZWxQb3MiLCJoZWF0bWFwRGVtb0NvbmZpZyIsImNvcm5lclJhZGl1cyIsImNvbHVtbkxhYmVsSGVpZ2h0IiwiY29sdW1uTGFiZWxBbmdsZSIsInJvd0xhYmVsV2lkdGgiLCJsZWdlbmRTcGFjZSIsImRlbmRyb0hlYXRtYXBEZW1vQ29uZmlnIiwicm93VHJlZVBhbmVsV2lkdGgiLCJjb2xUcmVlUGFuZWxIZWlnaHQiLCJ2aW9saW5EZW1vQ29uZmlnIiwic2hvd0dyb3VwWCIsInhBbmdsZSIsInNob3dTYW1wbGVTaXplIiwiaW5XaWR0aCIsImluSGVpZ2h0IiwiZG1hcENvbmZpZyIsImRtYXAiLCJzaG93Q29sVHJlZSIsImdWaW9saW4iLCJTaG93WCIsImNyZWF0ZVRvb2x0aXAiXSwibWFwcGluZ3MiOiJxQ0FBTyxJQUFJQSxFQUFRLGtDQUdqQkMsSUFBSyw2QkFDTEQsTUFBT0EsRUFDUEUsTUFBTywrQkFDUEMsSUFBSyx1Q0FDTEMsTUFBTyxtQ0NMTSxTQUFTQyxHQUN0QixJQUFJQyxFQUFTRCxHQUFRLEdBQUlFLEVBQUlELEVBQU9FLFFBQVEsS0FFNUMsT0FESUQsR0FBSyxHQUFxQyxXQUEvQkQsRUFBU0QsRUFBS0ksTUFBTSxFQUFHRixNQUFpQkYsRUFBT0EsRUFBS0ksTUFBTUYsRUFBSSxJQUN0RUcsRUFBV0MsZUFBZUwsSUFBV00sTUFBT0YsRUFBV0osR0FBU08sTUFBT1IsR0FBUUEsR0NjeEYsTUFBZSxTQUFTQSxHQUN0QixJQUFJUyxFQUFXQyxFQUFVVixHQUN6QixPQUFRUyxFQUFTRCxNQVJuQixTQUFzQkMsR0FDcEIsT0FBTyxXQUNMLE9BQU9FLEtBQUtDLGNBQWNDLGdCQUFnQkosRUFBU0YsTUFBT0UsRUFBU0QsU0FadkUsU0FBd0JSLEdBQ3RCLE9BQU8sV0FDTCxJQUFJYyxFQUFXSCxLQUFLQyxjQUNoQkcsRUFBTUosS0FBS0ssYUFDZixPQUFPRCxJQUFRcEIsR0FBU21CLEVBQVNHLGdCQUFnQkQsZUFBaUJyQixFQUM1RG1CLEVBQVNJLGNBQWNsQixHQUN2QmMsRUFBU0QsZ0JBQWdCRSxFQUFLZixNQWNoQlMsSUN2QnhCLFNBQVNVLEtBRVQsTUFBZSxT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 diff --git a/demo/GTExViz.transcriptTracks.html b/demo/GTExViz.transcriptTracks.html index 25cfc9e7..88d7364f 100644 --- a/demo/GTExViz.transcriptTracks.html +++ b/demo/GTExViz.transcriptTracks.html @@ -41,106 +41,6 @@
Transcript Viewer
function getData(){ return { "exons": { - "ENST00000578419.1": [ - { - "chrom": "17", - "chromStart": 77071021, - "chromEnd": 77071172, - "strand": "+", - "exonNumber": "1", - "exonId": "ENSE00003502032.1" - - }, - { - "chrom": "17", - "chromEnd": 77073579, - "exonId": "ENSE00003672628.1", - "exonNumber": "2", - "chromStart": 77073512, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77073946, - "exonId": "ENSE00003475281.1", - "exonNumber": "3", - "chromStart": 77073745, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77076446, - "exonId": "ENSE00003679852.1", - "exonNumber": "4", - "chromStart": 77076289, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77077155, - "exonId": "ENSE00003583515.1", - "exonNumber": "5", - "chromStart": 77077007, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77078631, - "exonId": "ENSE00003589230.1", - "exonNumber": "6", - "chromStart": 77077980, - "strand": "+" - } - ], - "ENST00000539857.2": [ - { - "chrom": "17", - "chromEnd": 77071172, - "exonId": "ENSE00003512401.1", - "exonNumber": "1", - "chromStart": 77071021, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77073579, - "exonId": "ENSE00003623828.1", - "exonNumber": "2", - "chromStart": 77073512, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77073946, - "exonId": "ENSE00003638693.1", - "exonNumber": "3", - "chromStart": 77073745, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77076446, - "exonId": "ENSE00003651250.1", - "exonNumber": "4", - "chromStart": 77076289, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77077155, - "exonId": "ENSE00003607773.1", - "exonNumber": "5", - "chromStart": 77077007, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77078631, - "exonId": "ENSE00003488117.1", - "exonNumber": "6", - "chromStart": 77077980, - "strand": "+" - }], "ENST00000311595.9": [ { "chrom": "17", @@ -201,24 +101,6 @@
Transcript Viewer
] }, "transcripts": [ - { - "chromosome": "17", - "end": 77078631, - "gencodeId": "ENSG00000167280.12", - "geneSymbol": "ENGASE", - "start": 77071021, - "strand": "+", - "transcriptId": "ENST00000578419.1" - }, - { - "chromosome": "17", - "end": 77078631, - "gencodeId": "ENSG00000167280.12", - "geneSymbol": "ENGASE", - "start": 77071021, - "strand": "+", - "transcriptId": "ENST00000539857.2" - }, { "chromosome": "17", "end": 77078612, diff --git a/src/GTExViz.js b/src/GTExViz.js index e5181089..39841cd0 100644 --- a/src/GTExViz.js +++ b/src/GTExViz.js @@ -170,106 +170,6 @@ export const demoData = { ], transcriptTracks: { "exons": { - "ENST00000578419.1": [ - { - "chrom": "17", - "chromStart": 77071021, - "chromEnd": 77071172, - "strand": "+", - "exonNumber": "1", - "exonId": "ENSE00003502032.1" - - }, - { - "chrom": "17", - "chromEnd": 77073579, - "exonId": "ENSE00003672628.1", - "exonNumber": "2", - "chromStart": 77073512, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77073946, - "exonId": "ENSE00003475281.1", - "exonNumber": "3", - "chromStart": 77073745, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77076446, - "exonId": "ENSE00003679852.1", - "exonNumber": "4", - "chromStart": 77076289, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77077155, - "exonId": "ENSE00003583515.1", - "exonNumber": "5", - "chromStart": 77077007, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77078631, - "exonId": "ENSE00003589230.1", - "exonNumber": "6", - "chromStart": 77077980, - "strand": "+" - } - ], - "ENST00000539857.2": [ - { - "chrom": "17", - "chromEnd": 77071172, - "exonId": "ENSE00003512401.1", - "exonNumber": "1", - "chromStart": 77071021, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77073579, - "exonId": "ENSE00003623828.1", - "exonNumber": "2", - "chromStart": 77073512, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77073946, - "exonId": "ENSE00003638693.1", - "exonNumber": "3", - "chromStart": 77073745, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77076446, - "exonId": "ENSE00003651250.1", - "exonNumber": "4", - "chromStart": 77076289, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77077155, - "exonId": "ENSE00003607773.1", - "exonNumber": "5", - "chromStart": 77077007, - "strand": "+" - }, - { - "chrom": "17", - "chromEnd": 77078631, - "exonId": "ENSE00003488117.1", - "exonNumber": "6", - "chromStart": 77077980, - "strand": "+" - }], "ENST00000311595.9": [ { "chrom": "17", @@ -330,25 +230,6 @@ export const demoData = { ] }, "transcripts": [ - { - - "chromosome": "17", - "end": 77078631, - "gencodeId": "ENSG00000167280.12", - "geneSymbol": "ENGASE", - "start": 77071021, - "strand": "+", - "transcriptId": "ENST00000578419.1" - }, - { - "chromosome": "17", - "end": 77078631, - "gencodeId": "ENSG00000167280.12", - "geneSymbol": "ENGASE", - "start": 77071021, - "strand": "+", - "transcriptId": "ENST00000539857.2" - }, { "chromosome": "17", "end": 77078612, @@ -403,7 +284,7 @@ export function transcriptTracks(par=transcriptTracksConfig){ h: inHeight, labelOn: par.labelPos }; - let viewer = new IsoformTrackViewer(par.data.transcripts, par.data.exons, par.data.exons["ENST00000578419.1"], config); + let viewer = new IsoformTrackViewer(par.data.transcripts, par.data.exons, undefined, config); viewer.render(false, svg, par.labelPos); } diff --git a/src/modules/IsoformTrackViewer.js b/src/modules/IsoformTrackViewer.js index 72b89b71..2e2ab6d4 100644 --- a/src/modules/IsoformTrackViewer.js +++ b/src/modules/IsoformTrackViewer.js @@ -151,7 +151,8 @@ export default class IsoformTrackViewer { _renderModels(w, labelOn = 'left'){ this.isoforms.forEach((isoform) => { - const model = new GeneModel(isoform, this.modelExons, this.isoformExons[isoform.transcriptId], [], true); + let reference = (this.modelExons === undefined || this.modelExons === null)?this.isoformExons[isoform.transcriptId]:this.modelExons; + const model = new GeneModel(isoform, reference, this.isoformExons[isoform.transcriptId], [], true); const isoformG = select(`#${isoform.transcriptId.replace(".", "_")}`); model.render(isoformG, {w:w, h: this.yScale.bandwidth(), labelOn: labelOn}); });