picocode 0.9.198 → 0.9.199

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/pico.js CHANGED
@@ -1509,6 +1509,9 @@ function workspaceNavigate(rows, selected, event, height) {
1509
1509
  else return void 0;
1510
1510
  return rows[Math.max(0, Math.min(rows.length - 1, next))]?.id ?? null;
1511
1511
  }
1512
+ function workspaceDraftAttachments(text, attachments) {
1513
+ return [...text.matchAll(/\[(?:Image|File) #\d+\]/g)].filter((match) => attachments.has(match[0])).length;
1514
+ }
1512
1515
  function emptyWorkspaceComposer({ text, attachments, dictation, capture, pending: pending2, history, completion, command, question, steer, queued, expedited }) {
1513
1516
  return text === "" && attachments === 0 && dictation === "idle" && capture === "idle" && !pending2 && history < 0 && !completion && !command && !question && !steer && queued === 0 && expedited === 0;
1514
1517
  }
@@ -4923,7 +4926,7 @@ function App({ boot: boot2, controller: ctl }) {
4923
4926
  onKeyDown: (e) => {
4924
4927
  if (e.key === "left" && !e.ctrl && !e.meta && !e.alt && boot2.workspace && fm.is("input") && view() === "chat" && !anyPanel() && emptyWorkspaceComposer({
4925
4928
  text: e.value,
4926
- attachments: state.attachments.size,
4929
+ attachments: workspaceDraftAttachments(e.value, state.attachments),
4927
4930
  dictation: dictationStatus(),
4928
4931
  capture: captureStatus(),
4929
4932
  pending: refs.commandExpansion || refs.workspacePastePending,
@@ -5582,4 +5585,4 @@ for (const signal of ["SIGINT", "SIGTERM", "SIGHUP"]) process.on(signal, () => {
5582
5585
  process.on("exit", () => connection.close());
5583
5586
  var app = mount(() => /* @__PURE__ */ jsx11(App, { boot, controller }), { title: `pico ${boot.root.split("/").pop()}`, theme });
5584
5587
  boot.setTheme = app.setTheme;
5585
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL21vZGVsLXJ1bnRpbWUuanMiLCAiLi4vc3JjL2hlYWRsZXNzLmpzIiwgIi4uL3NyYy9zaGVsbC5qcyIsICIuLi9zcmMvbWFpbi5qc3giLCAiLi4vc3JjL2NsaS1hcmdzLmpzIiwgIi4uL3NyYy91aS93b3Jrc3BhY2Utc2lkZWJhci5qc3giLCAiLi4vc3JjL3VpL3RoZW1lLmpzIiwgIi4uL3NyYy91aS9wYW5lbHMuanN4IiwgIi4uL3NyYy91aS9hbmltYXRlZC12YWx1ZS5qc3giLCAiLi4vc3JjL3VpL2NvbnRleHQtYmFyLmpzIiwgIi4uL3NyYy91aS93b3Jrc3BhY2Utc2lkZWJhci5qcyIsICIuLi9zcmMvdWkvYXBwLmpzeCIsICIuLi9zcmMvdWkvY29tcG9zZXItY29tbWFuZHMuanMiLCAiLi4vc3JjL3VpL2NvbW1hbmQtZm9ybS5qc3giLCAiLi4vc3JjL2RpY3RhdGlvbi10ZXh0LmpzIiwgIi4uL3NyYy9kaWN0YXRpb24uanMiLCAiLi4vc3JjL2NsaXBib2FyZC5qcyIsICIuLi9zcmMvdWkvY2xpcGJvYXJkLWlucHV0LmpzIiwgIi4uL3NyYy91aS9kaWN0YXRpb24taW5wdXQuanMiLCAiLi4vc3JjL3VpL3NjcmVlbi1jYXB0dXJlLWlucHV0LmpzIiwgIi4uL3NyYy9zY3JlZW4tY2FwdHVyZS5qcyIsICIuLi9zcmMvdWkvY29tcG9zZXItZmlsZXMuanMiLCAiLi4vc3JjL3VpL2RpY3RhdGlvbi1pbmRpY2F0b3IuanMiLCAiLi4vc3JjL3VpL2hpZ2hsaWdodC5qcyIsICIuLi9zcmMvdWkvdHJhbnNjcmlwdC5qc3giLCAiLi4vc3JjL3VpL3RyYW5zY3JpcHQtd2luZG93LmpzIiwgIi4uL3NyYy91aS9jb252ZXJzYXRpb24tc2VhcmNoLXZpZXcuanN4IiwgIi4uL3NyYy91aS9xdWVzdGlvbi1mb3JtLmpzeCIsICIuLi9zcmMvdWkvZW1wdHktc3RhdGUuanN4IiwgIi4uL3NyYy91aS9oZWxwLmpzeCJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgZGlzY292ZXJLZXlzLCBhcHBseUtleXMsIGtleUhpbnQgfSBmcm9tICdwaWNvY29kZS1jb3JlL2tleXMuanMnXG5pbXBvcnQgeyBsb2FkQ2F0YWxvZywgZXh0cmFjdE1vZGVscywgYWRob2NNb2RlbCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY2F0YWxvZy5qcydcbmltcG9ydCB7IGxvYWRDb2RleE1vZGVscyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29kZXgtbW9kZWxzLmpzJ1xuaW1wb3J0IHsgbG9hZE9wZW5Sb3V0ZXJNb2RlbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL29wZW5yb3V0ZXItbW9kZWxzLmpzJ1xuaW1wb3J0IHsgb3BlbmFpQ29ubmVjdGVkLCBvcGVuYWlDcmVkZW50aWFscyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvb3BlbmFpLWF1dGguanMnXG5pbXBvcnQgeyBkZWZhdWx0TW9kZWwgfSBmcm9tICdwaWNvY29kZS1jb3JlL21vZGVscy5qcydcbmltcG9ydCB7IGZ1enp5U2NvcmUgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Z1enp5LmpzJ1xuXG5jb25zdCBDQVRBTE9HX1BST1ZJREVSUyA9IFsnZ29vZ2xlJywgJ2FudGhyb3BpYycsICdvcGVuYWknLCAneGFpJ11cblxuZnVuY3Rpb24gY29kZXhDb250ZXh0KGNhdGFsb2dEYXRhLCBtb2RlbCkge1xuICBjb25zdCBlbnRyeSA9IGNhdGFsb2dEYXRhLm9wZW5haT8ubW9kZWxzPy5bbW9kZWwubmFtZS5zcGxpdCgnLycpWzFdXVxuICByZXR1cm4gbW9kZWwuY29udGV4dCA/PyBlbnRyeT8ubGltaXQ/LmlucHV0ID8/IGVudHJ5Py5saW1pdD8uY29udGV4dCA/PyBudWxsXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkTW9kZWxzKHsgcHJvdmlkZXJzLCBmb3JjZSB9KSB7XG4gIGNvbnN0IGhhcyA9IChwcm92aWRlcikgPT4gcHJvdmlkZXJzLmluY2x1ZGVzKHByb3ZpZGVyKVxuICBjb25zdCBjb2RleENyZWRlbnRpYWxzID0gaGFzKCdjb2RleCcpID8gYXdhaXQgb3BlbmFpQ3JlZGVudGlhbHMoKS5jYXRjaCgoKSA9PiBudWxsKSA6IG51bGxcbiAgY29uc3QgW2NhdGFsb2dEYXRhLCBjb2RleCwgb3BlbnJvdXRlcl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgbG9hZENhdGFsb2coeyBmb3JjZSB9KSxcbiAgICBsb2FkQ29kZXhNb2RlbHMoY29kZXhDcmVkZW50aWFscywgeyBmb3JjZSB9KSxcbiAgICBoYXMoJ29wZW5yb3V0ZXInKSA/IGxvYWRPcGVuUm91dGVyTW9kZWxzKHsgZm9yY2UgfSkgOiBbXSxcbiAgXSlcbiAgcmV0dXJuIFtcbiAgICAuLi5leHRyYWN0TW9kZWxzKGNhdGFsb2dEYXRhLCBDQVRBTE9HX1BST1ZJREVSUykubWFwKChtb2RlbCkgPT4gKHtcbiAgICAgIC4uLm1vZGVsLFxuICAgICAgYXZhaWxhYmxlOiBoYXMobW9kZWwucHJvdmlkZXIpLFxuICAgICAga2V5SGludDoga2V5SGludChtb2RlbC5wcm92aWRlciksXG4gICAgfSkpLFxuICAgIC4uLmNvZGV4Lm1hcCgobW9kZWwpID0+ICh7XG4gICAgICAuLi5tb2RlbCxcbiAgICAgIGNvbnRleHQ6IGNvZGV4Q29udGV4dChjYXRhbG9nRGF0YSwgbW9kZWwpLFxuICAgICAgYXZhaWxhYmxlOiBoYXMoJ2NvZGV4JyksXG4gICAgICBrZXlIaW50OiAnL2Nvbm5lY3QnLFxuICAgIH0pKSxcbiAgICAuLi5vcGVucm91dGVyLm1hcCgobW9kZWwpID0+ICh7IC4uLm1vZGVsLCBhdmFpbGFibGU6IHRydWUsIGtleUhpbnQ6IGtleUhpbnQoJ29wZW5yb3V0ZXInKSB9KSksXG4gIF1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRNb2RlbFJ1bnRpbWUoKSB7XG4gIGNvbnN0IGNoYXRncHQgPSBhd2FpdCBvcGVuYWlDb25uZWN0ZWQoKVxuICBjb25zdCBwcm92aWRlcnMgPSBbLi4uYXBwbHlLZXlzKGRpc2NvdmVyS2V5cygpKSwgLi4uKGNoYXRncHQgPyBbJ2NvZGV4J10gOiBbXSldXG4gIGNvbnN0IGNvZGV4Q3JlZGVudGlhbHMgPSBjaGF0Z3B0ID8gYXdhaXQgb3BlbmFpQ3JlZGVudGlhbHMoKS5jYXRjaCgoKSA9PiBudWxsKSA6IG51bGxcbiAgY29uc3QgbG9hZE1vZGVscyA9ICh7IGZvcmNlID0gZmFsc2UgfSA9IHt9KSA9PiBidWlsZE1vZGVscyh7IHByb3ZpZGVycywgZm9yY2UgfSlcbiAgcmV0dXJuIHsgcHJvdmlkZXJzLCBtb2RlbHM6IGF3YWl0IGxvYWRNb2RlbHMoKSwgY29kZXhDcmVkZW50aWFscywgbG9hZE1vZGVscyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTW9kZWwobW9kZWxzLCBwcm92aWRlcnMsIG5hbWUpIHtcbiAgaWYgKCFuYW1lKSByZXR1cm4gbnVsbFxuICBjb25zdCBleGFjdCA9IG1vZGVscy5maW5kKChtb2RlbCkgPT4gbW9kZWwubmFtZSA9PT0gbmFtZSlcbiAgaWYgKGV4YWN0KSByZXR1cm4gZXhhY3RcbiAgaWYgKG5hbWUuaW5jbHVkZXMoJy8nKSkgcmV0dXJuIGFkaG9jTW9kZWwobmFtZSwgcHJvdmlkZXJzKVxuICBjb25zdCBhdmFpbGFibGUgPSBtb2RlbHMuZmlsdGVyKChtb2RlbCkgPT4gbW9kZWwuYXZhaWxhYmxlICE9PSBmYWxzZSlcbiAgcmV0dXJuIGF2YWlsYWJsZVxuICAgICAgLm1hcCgobW9kZWwpID0+IFtmdXp6eVNjb3JlKG5hbWUsIG1vZGVsLm5hbWUpLCBtb2RlbF0pXG4gICAgICAuZmlsdGVyKChbc2NvcmVdKSA9PiBzY29yZSA+PSAwKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGJbMF0gLSBhWzBdKVswXT8uWzFdXG4gICAgfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0TW9kZWwoeyBtb2RlbHMsIHByb3ZpZGVycywgcmVxdWVzdGVkLCBjb25maWd1cmVkIH0pIHtcbiAgcmV0dXJuIHJlc29sdmVNb2RlbChtb2RlbHMsIHByb3ZpZGVycywgcmVxdWVzdGVkKVxuICAgIHx8IChjb25maWd1cmVkICYmIG1vZGVscy5maW5kKChtb2RlbCkgPT4gbW9kZWwubmFtZSA9PT0gY29uZmlndXJlZCAmJiBtb2RlbC5hdmFpbGFibGUpKVxuICAgIHx8IGRlZmF1bHRNb2RlbChtb2RlbHMpXG59XG4iLCAiaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCdcbmltcG9ydCB7IGZpbmRNb2RlbCwgdXNhZ2VDb3N0IH0gZnJvbSAncGljb2NvZGUtY29yZS9tb2RlbHMuanMnXG5pbXBvcnQgeyByZWFkQ29uZmlnIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb25maWcuanMnXG5pbXBvcnQgeyBidWlsZFByb2plY3RCb290IH0gZnJvbSAncGljb2NvZGUtY29yZS9ib290LmpzJ1xuaW1wb3J0IHsgY3JlYXRlU2hlbGxNYW5hZ2VyIH0gZnJvbSAncGljb2NvZGUtY29yZS9zaGVsbHMuanMnXG5pbXBvcnQgeyBjcmVhdGVTZXNzaW9uLCBvcGVuU2Vzc2lvbiwgbG9hZFNlc3Npb24sIG9uU2Vzc2lvbldyaXRlRXJyb3IgfSBmcm9tICdwaWNvY29kZS1jb3JlL3Nlc3Npb24uanMnXG5pbXBvcnQgeyBzZXNzaW9uc0RpciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvcGF0aHMuanMnXG5pbXBvcnQgeyBtYWtlRXZlbnQgfSBmcm9tICdwaWNvY29kZS1jb3JlL2V2ZW50cy5qcydcbmltcG9ydCB7IGRlcml2ZVN0YXRlIH0gZnJvbSAncGljb2NvZGUtY29yZS9kZXJpdmUuanMnXG5pbXBvcnQgeyBjcmVhdGVUb29sc2V0IH0gZnJvbSAncGljb2NvZGUtY29yZS90b29scy9pbmRleC5qcydcbmltcG9ydCB7IHJ1blR1cm4gfSBmcm9tICdwaWNvY29kZS1jb3JlL2FnZW50LmpzJ1xuaW1wb3J0IHsgYnVpbGRTeXN0ZW1Qcm9tcHQgfSBmcm9tICdwaWNvY29kZS1jb3JlL3N5c3RlbS1wcm9tcHQuanMnXG5pbXBvcnQgeyBtZW1vcnlJbmRleCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvbWVtb3J5LmpzJ1xuaW1wb3J0IHsgZmluYWxpemVVc2VyQ29udGVudCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYXR0YWNobWVudHMuanMnXG5pbXBvcnQgeyBsb2FkTW9kZWxSdW50aW1lLCBzZWxlY3RNb2RlbCB9IGZyb20gJy4vbW9kZWwtcnVudGltZS5qcydcblxuYXN5bmMgZnVuY3Rpb24gcmVhZFN0ZGluKCkge1xuICBpZiAocHJvY2Vzcy5zdGRpbi5pc1RUWSkgcmV0dXJuICcnXG4gIGxldCBkYXRhID0gJydcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBwcm9jZXNzLnN0ZGluKSB7XG4gICAgZGF0YSArPSBjaHVua1xuICAgIGlmIChkYXRhLmxlbmd0aCA+IDQwMDAwMCkgYnJlYWtcbiAgfVxuICByZXR1cm4gZGF0YS5zbGljZSgwLCA0MDAwMDApXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5IZWFkbGVzcyhvcHRzKSB7XG4gIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KClcbiAgY29uc3QgbG9nID0gb3B0cy5xdWlldCA/ICgpID0+IHt9IDogKGxpbmUpID0+IHByb2Nlc3Muc3RkZXJyLndyaXRlKGxpbmUgKyAnXFxuJylcblxuICBvblNlc3Npb25Xcml0ZUVycm9yKChlcnIsIGZpbGUpID0+IHByb2Nlc3Muc3RkZXJyLndyaXRlKGBwaWNvOiBjb3VsZCBub3Qgd3JpdGUgJHtmaWxlfTogJHtlcnIubWVzc2FnZX1cXG5gKSlcblxuICBjb25zdCB7IHByb3ZpZGVycywgbW9kZWxzLCBjb2RleENyZWRlbnRpYWxzOiBjb2RleENyZWRzIH0gPSBhd2FpdCBsb2FkTW9kZWxSdW50aW1lKClcbiAgaWYgKHByb3ZpZGVycy5sZW5ndGggPT09IDApIHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZSgncGljbzogbm8gY3JlZGVudGlhbHMgZm91bmQgKHNldCBhIHByb3ZpZGVyIGtleSBvciBydW4gcGljbyAtLWNvbm5lY3QpXFxuJylcbiAgICByZXR1cm4gMVxuICB9XG4gIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHJlYWRDb25maWcoKVxuXG4gIGNvbnN0IG1vZGVsID0gc2VsZWN0TW9kZWwoeyBtb2RlbHMsIHByb3ZpZGVycywgcmVxdWVzdGVkOiBvcHRzLm1vZGVsLCBjb25maWd1cmVkOiBjb25maWcuZGVmYXVsdE1vZGVsIH0pXG4gIGlmICghbW9kZWwgfHwgbW9kZWwuYXZhaWxhYmxlID09PSBmYWxzZSkge1xuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBwaWNvOiBubyB1c2FibGUgbW9kZWwke29wdHMubW9kZWwgPyBgIG1hdGNoaW5nIFwiJHtvcHRzLm1vZGVsfVwiYCA6ICcnfVxcbmApXG4gICAgcmV0dXJuIDFcbiAgfVxuICBpZiAob3B0cy5zcGVlZCA9PT0gJ2Zhc3QnICYmICFtb2RlbC5zcGVlZCkge1xuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBwaWNvOiAke21vZGVsLm5hbWV9IGRvZXMgbm90IHN1cHBvcnQgc3BlZWQgY29udHJvbFxcbmApXG4gICAgcmV0dXJuIDFcbiAgfVxuICBjb25zdCBlZmZvcnQgPSBvcHRzLmVmZm9ydCA/PyAobW9kZWwuZWZmb3J0ID8gJ2F1dG8nIDogbnVsbClcblxuICBjb25zdCBib290ID0gYXdhaXQgYnVpbGRQcm9qZWN0Qm9vdChwcm9jZXNzLmN3ZCgpKVxuICBhd2FpdCBQcm9taXNlLnJhY2UoW2Jvb3QubWNwLmNvbm5lY3RBbGwoKSwgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgMTAwMDApKV0pXG4gIGNvbnN0IHNoZWxscyA9IGNyZWF0ZVNoZWxsTWFuYWdlcigpXG5cbiAgbGV0IHNlc3Npb25cbiAgbGV0IGV2ZW50cyA9IFtdXG4gIGlmIChvcHRzLnJlc3VtZSkge1xuICAgIGNvbnN0IGZpbGUgPSBvcHRzLnJlc3VtZS5pbmNsdWRlcygnLycpID8gb3B0cy5yZXN1bWUgOiBqb2luKHNlc3Npb25zRGlyKGJvb3Qucm9vdCksIGAke29wdHMucmVzdW1lfS5qc29ubGApXG4gICAgY29uc3QgbG9hZGVkID0gYXdhaXQgbG9hZFNlc3Npb24oZmlsZSlcbiAgICBzZXNzaW9uID0gb3BlblNlc3Npb24oeyBmaWxlLCBoZWFkZXI6IGxvYWRlZC5oZWFkZXIgfSlcbiAgICBldmVudHMgPSBsb2FkZWQuZXZlbnRzXG4gIH0gZWxzZSB7XG4gICAgc2Vzc2lvbiA9IGNyZWF0ZVNlc3Npb24oeyBjd2Q6IGJvb3QuY3dkLCByb290OiBib290LnJvb3QgfSlcbiAgfVxuXG4gIGNvbnN0IHBlcnNpc3QgPSAoZXZlbnQpID0+IHtcbiAgICBldmVudHMucHVzaChldmVudClcbiAgICBzZXNzaW9uLmFwcGVuZChldmVudClcbiAgICBpZiAob3B0cy5zdHJlYW1Kc29uKSBwcm9jZXNzLnN0ZG91dC53cml0ZShKU09OLnN0cmluZ2lmeShldmVudCkgKyAnXFxuJylcbiAgfVxuXG4gIGNvbnN0IHJlc3RvcmVkU3BlZWQgPSBkZXJpdmVTdGF0ZShldmVudHMpLnNwZWVkXG4gIGNvbnN0IHNwZWVkID0gbW9kZWwuc3BlZWQgPyAob3B0cy5zcGVlZCA/PyAob3B0cy5yZXN1bWUgPyByZXN0b3JlZFNwZWVkID8/ICdzdGFuZGFyZCcgOiBjb25maWcuc3BlZWREZWZhdWx0cz8uW21vZGVsLm5hbWVdKSA/PyAnc3RhbmRhcmQnKSA6ICdzdGFuZGFyZCdcbiAgcGVyc2lzdChtYWtlRXZlbnQoJ3NwZWVkJywgeyB0bzogc3BlZWQgfSkpXG5cbiAgY29uc3Qgc3RkaW5EYXRhID0gYXdhaXQgcmVhZFN0ZGluKClcbiAgY29uc3QgcHJvbXB0VGV4dCA9IHN0ZGluRGF0YSA/IGAke29wdHMucHJvbXB0fVxcblxcbltwaXBlZCBpbnB1dF1cXG4ke3N0ZGluRGF0YX1gIDogb3B0cy5wcm9tcHRcbiAgY29uc3QgeyBjb250ZW50IH0gPSBmaW5hbGl6ZVVzZXJDb250ZW50KHByb21wdFRleHQsIG5ldyBNYXAoKSlcbiAgcGVyc2lzdChtYWtlRXZlbnQoJ21lc3NhZ2UnLCB7IG1lc3NhZ2U6IHsgcm9sZTogJ3VzZXInLCBjb250ZW50IH0gfSkpXG5cbiAgY29uc3QgZGVyaXZlZCA9IGRlcml2ZVN0YXRlKGV2ZW50cylcbiAgY29uc3QgbG9hZGVkQmVmb3JlID0gbmV3IFNldChib290LnRyYWNrZXIubG9hZGVkKVxuICBjb25zdCB7IHRvb2xzLCByZWNvcmRlciB9ID0gY3JlYXRlVG9vbHNldCh7XG4gICAgY3dkOiBib290LmN3ZCxcbiAgICB0cmFja2VyOiBib290LnRyYWNrZXIsXG4gICAgc2tpbGxzOiBib290LnNraWxscyxcbiAgICBzaGVsbHMsXG4gICAgbWVtb3J5OiBib290Lm1lbW9yeSxcbiAgICBtY3BUb29sczogYm9vdC5tY3AudG9vbHMoKSxcbiAgICB1c2VyVG9vbHM6IFtdLFxuICAgIG1heFRvb2xDYWxsczogb3B0cy5tYXhUb29sQ2FsbHMgPz8gNTAsXG4gIH0pXG5cbiAgbGV0IGF1dGggPSBudWxsXG4gIGlmIChtb2RlbC5wcm92aWRlciA9PT0gJ2NvZGV4Jykge1xuICAgIGF1dGggPSBjb2RleENyZWRzXG4gICAgaWYgKCFhdXRoKSB7XG4gICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZSgncGljbzogY29kZXggbW9kZWxzIG5lZWQgYSBDaGF0R1BUIHNpZ24taW4gKHJ1biBwaWNvIC0tY29ubmVjdClcXG4nKVxuICAgICAgYXdhaXQgc2Vzc2lvbi5mbHVzaCgpXG4gICAgICByZXR1cm4gMVxuICAgIH1cbiAgfVxuXG4gIGxvZyhgcGljbyAgJHttb2RlbC5uYW1lfSR7bW9kZWwuc3BlZWQgJiYgc3BlZWQgPT09ICdmYXN0JyA/ICcgIEZhc3QnIDogJyd9JHtlZmZvcnQgPyBgICAke2VmZm9ydH1gIDogJyd9ICBzZXNzaW9uICR7c2Vzc2lvbi5pZH1gKVxuICBsZXQgdGhvdWdodHMgPSAnJ1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBydW5UdXJuKHtcbiAgICBoaXN0b3J5OiBkZXJpdmVkLnByb3ZpZGVySGlzdG9yeSxcbiAgICB0b29scyxcbiAgICByZWNvcmRlcixcbiAgICBtb2RlbE5hbWU6IG1vZGVsLm5hbWUsXG4gICAgZWZmb3J0LFxuICAgIC4uLihtb2RlbC5wcm92aWRlciA9PT0gJ2NvZGV4JyAmJiB7IHNwZWVkIH0pLFxuICAgIGF1dGgsXG4gICAgc3lzdGVtOiBidWlsZFN5c3RlbVByb21wdCh7XG4gICAgICBjd2Q6IGJvb3QuY3dkLFxuICAgICAgY29udGV4dEZpbGVzOiBib290LnN0YXJ0dXBDb250ZXh0LmZpbGVzLFxuICAgICAgc2tpbGxzOiBib290LnNraWxscy5saXN0KCksXG4gICAgICBtZW1vcnlJbmRleFRleHQ6IG1lbW9yeUluZGV4KGF3YWl0IGJvb3QubWVtb3J5Lmxpc3QoKS5jYXRjaCgoKSA9PiBbXSksIGJvb3Qucm9vdCksXG4gICAgfSksXG4gICAgb25TdHJlYW06IChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICd0aGlua2luZycpIHRob3VnaHRzICs9IGV2ZW50LmNvbnRlbnRcbiAgICAgIGlmIChldmVudC50eXBlID09PSAndG9vbF9jb21wbGV0ZScpIHtcbiAgICAgICAgY29uc3QgZW50cnkgPSByZWNvcmRlci5lbnRyaWVzLmF0KC0xKVxuICAgICAgICBsb2coYCAgXHUyNzEzICR7ZW50cnk/Lm5hbWUgPz8gZXZlbnQuY2FsbC5mdW5jdGlvbi5uYW1lfSAgJHtlbnRyeT8udGl0bGUgPz8gJyd9YClcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC50eXBlID09PSAndG9vbF9lcnJvcicpIGxvZyhgICBcdTI3MTcgJHtldmVudC5jYWxsLmZ1bmN0aW9uLm5hbWV9ICAke2V2ZW50LmVycm9yLnNsaWNlKDAsIDEyMCl9YClcbiAgICB9LFxuICB9KVxuXG4gIGlmICh0aG91Z2h0cykgcGVyc2lzdChtYWtlRXZlbnQoJ3Rob3VnaHRzJywgeyB0ZXh0OiB0aG91Z2h0cyB9KSlcbiAgZm9yIChjb25zdCBtZXNzYWdlIG9mIHJlc3VsdC5tZXNzYWdlcykgcGVyc2lzdChtYWtlRXZlbnQoJ21lc3NhZ2UnLCB7IG1lc3NhZ2UgfSkpXG4gIGZvciAoY29uc3QgZW50cnkgb2YgcmVjb3JkZXIuZW50cmllcykgcGVyc2lzdChtYWtlRXZlbnQoJ3Rvb2xfbWV0YScsIGVudHJ5KSlcbiAgZm9yIChjb25zdCBwYXRoIG9mIGJvb3QudHJhY2tlci5sb2FkZWQpIHtcbiAgICBpZiAoIWxvYWRlZEJlZm9yZS5oYXMocGF0aCkpIHBlcnNpc3QobWFrZUV2ZW50KCdjb250ZXh0X2ZpbGUnLCB7IHBhdGggfSkpXG4gIH1cbiAgaWYgKHJlc3VsdC51c2FnZSkgcGVyc2lzdChtYWtlRXZlbnQoJ3VzYWdlJywgeyBtb2RlbDogbW9kZWwubmFtZSwgdXNhZ2U6IHJlc3VsdC51c2FnZSwgbGFzdFByb21wdDogcmVzdWx0Lmxhc3RQcm9tcHRUb2tlbnMgfSkpXG4gIGlmIChyZXN1bHQuaW50ZXJydXB0ZWQpIHBlcnNpc3QobWFrZUV2ZW50KCdpbnRlcnJ1cHQnLCB7fSkpXG5cbiAgY29uc3QgcnVubmluZyA9IHNoZWxscy5ydW5uaW5nKClcbiAgaWYgKHJ1bm5pbmcgPiAwKSBsb2coYCAga2lsbGluZyAke3J1bm5pbmd9IGJhY2tncm91bmQgc2hlbGwke3J1bm5pbmcgPT09IDEgPyAnJyA6ICdzJ31gKVxuICBzaGVsbHMua2lsbEFsbCgpXG4gIGF3YWl0IGJvb3QubWNwLmNsb3NlQWxsKCkuY2F0Y2goKCkgPT4ge30pXG4gIC8vIHRoZSBjYWxsZXIgZXhpdHMgdGhlIHByb2Nlc3MgdGhlIG1vbWVudCB0aGlzIHJldHVybnMsIHdoaWNoIHdvdWxkIGRpc2NhcmRcbiAgLy8gZXZlcnkgYXBwZW5kIHN0aWxsIGluIGZsaWdodFxuICBhd2FpdCBzZXNzaW9uLmZsdXNoKClcblxuICBjb25zdCB0ZXh0ID0gcmVzdWx0Lm1lc3NhZ2VzLmZpbHRlcigobSkgPT4gbS5yb2xlID09PSAnYXNzaXN0YW50JyAmJiB0eXBlb2YgbS5jb250ZW50ID09PSAnc3RyaW5nJyAmJiBtLmNvbnRlbnQpLmF0KC0xKT8uY29udGVudCA/PyAnJ1xuICBjb25zdCBzdW1tYXJ5ID0ge1xuICAgIHRleHQsXG4gICAgc2Vzc2lvbjogc2Vzc2lvbi5pZCxcbiAgICBzZXNzaW9uRmlsZTogc2Vzc2lvbi5maWxlLFxuICAgIG1vZGVsOiBtb2RlbC5uYW1lLFxuICAgIHVzYWdlOiByZXN1bHQudXNhZ2UsXG4gICAgY29zdDogdXNhZ2VDb3N0KGZpbmRNb2RlbChtb2RlbHMsIG1vZGVsLm5hbWUpLCByZXN1bHQudXNhZ2UpLFxuICAgIHRvb2xDYWxsczogcmVjb3JkZXIuZW50cmllcy5sZW5ndGgsXG4gICAgaW50ZXJydXB0ZWQ6IHJlc3VsdC5pbnRlcnJ1cHRlZCxcbiAgICBkdXJhdGlvbk1zOiBEYXRlLm5vdygpIC0gc3RhcnRlZEF0LFxuICB9XG5cbiAgaWYgKG9wdHMuanNvbikgcHJvY2Vzcy5zdGRvdXQud3JpdGUoSlNPTi5zdHJpbmdpZnkoc3VtbWFyeSkgKyAnXFxuJylcbiAgZWxzZSBpZiAob3B0cy5zdHJlYW1Kc29uKSBwcm9jZXNzLnN0ZG91dC53cml0ZShKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICdyZXN1bHQnLCAuLi5zdW1tYXJ5LCB0ZXh0OiB1bmRlZmluZWQsIGF0OiBEYXRlLm5vdygpIH0pICsgJ1xcbicpXG4gIGVsc2UgcHJvY2Vzcy5zdGRvdXQud3JpdGUodGV4dCArICdcXG4nKVxuXG4gIHJldHVybiByZXN1bHQuaW50ZXJydXB0ZWQgPyAxIDogMFxufVxuIiwgImltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSAnbm9kZTpwYXRoJ1xuaW1wb3J0IHsgcnVuVHVybiB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYWdlbnQuanMnXG5pbXBvcnQgeyByZWFkQ29uZmlnIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb25maWcuanMnXG5pbXBvcnQgeyBsb2FkTW9kZWxSdW50aW1lLCBzZWxlY3RNb2RlbCB9IGZyb20gJy4vbW9kZWwtcnVudGltZS5qcydcblxuY29uc3QgU1lTVEVNID0gKHsgcGxhdGZvcm0sIHNoZWxsLCBjd2QgfSkgPT4gYEdlbmVyYXRlIGV4YWN0bHkgb25lIHNoZWxsIGNvbW1hbmQgdGhhdCBzYXRpc2ZpZXMgdGhlIHVzZXIncyByZXF1ZXN0LiBUaGUgb3V0cHV0IG11c3QgYmUgYSB2YWxpZCBzaGVsbCBjb21tYW5kIHdpdGhvdXQgTWFya2Rvd24gZm9ybWF0dGluZy4gSWYgbXVsdGlwbGUgc3RlcHMgYXJlIHJlcXVpcmVkLCB0cnkgdG8gY29tYmluZSB0aGVtIHRvZ2V0aGVyIHVzaW5nICYmLlxuXG5FbnZpcm9ubWVudDpcbi0gb3BlcmF0aW5nIHN5c3RlbTogJHtwbGF0Zm9ybX1cbi0gc2hlbGw6ICR7c2hlbGx9XG4tIGN1cnJlbnQgZGlyZWN0b3J5OiAke2N3ZH1cblxuT3V0cHV0IG9ubHkgdGhlIGNvbW1hbmQgYXMgb25lIGxpbmUuIERvIG5vdCB1c2UgTWFya2Rvd24gZm9ybWF0dGluZyBzdWNoIGFzIFxcYFxcYFxcYC4gRG8gbm90IGV4cGxhaW4gdGhlIGNvbW1hbmQuIERvIG5vdCBleGVjdXRlIHRoZSBjb21tYW5kLmBcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbW1hbmRGcm9tUmVzcG9uc2UodGV4dCkge1xuICBjb25zdCBjb21tYW5kID0gdGV4dC50cmltKClcbiAgaWYgKCFjb21tYW5kKSB0aHJvdyBuZXcgRXJyb3IoJ3RoZSBtb2RlbCByZXR1cm5lZCBhbiBlbXB0eSBjb21tYW5kJylcbiAgaWYgKGNvbW1hbmQuaW5jbHVkZXMoJ1xcMCcpIHx8IC9bXFxyXFxuXS8udGVzdChjb21tYW5kKSkgdGhyb3cgbmV3IEVycm9yKCd0aGUgbW9kZWwgcmV0dXJuZWQgbW9yZSB0aGFuIG9uZSBsaW5lJylcbiAgaWYgKGNvbW1hbmQuaW5jbHVkZXMoJ2BgYCcpKSB0aHJvdyBuZXcgRXJyb3IoJ3RoZSBtb2RlbCByZXR1cm5lZCBNYXJrZG93biBpbnN0ZWFkIG9mIGEgY29tbWFuZCcpXG4gIHJldHVybiBjb21tYW5kXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5TaGVsbChvcHRzLCBkZXBlbmRlbmNpZXMgPSB7fSkge1xuICBjb25zdCBzdGRlcnIgPSBkZXBlbmRlbmNpZXMuc3RkZXJyIHx8IHByb2Nlc3Muc3RkZXJyXG4gIGNvbnN0IHN0ZG91dCA9IGRlcGVuZGVuY2llcy5zdGRvdXQgfHwgcHJvY2Vzcy5zdGRvdXRcbiAgdHJ5IHtcbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCAoZGVwZW5kZW5jaWVzLnJlYWRDb25maWcgfHwgcmVhZENvbmZpZykoKVxuICAgIGNvbnN0IHJ1bnRpbWUgPSBhd2FpdCAoZGVwZW5kZW5jaWVzLmxvYWRNb2RlbFJ1bnRpbWUgfHwgbG9hZE1vZGVsUnVudGltZSkoKVxuICAgIGlmIChydW50aW1lLnByb3ZpZGVycy5sZW5ndGggPT09IDApIHRocm93IG5ldyBFcnJvcignbm8gY3JlZGVudGlhbHMgZm91bmQgKHNldCBhIHByb3ZpZGVyIGtleSBvciBydW4gcGljbyAtLWNvbm5lY3QpJylcblxuICAgIGNvbnN0IGNvbmZpZ3VyZWRNb2RlbCA9IGNvbmZpZy5tb2RlbHM/LnNoZWxsXG4gICAgY29uc3QgbW9kZWwgPSBzZWxlY3RNb2RlbCh7XG4gICAgICBtb2RlbHM6IHJ1bnRpbWUubW9kZWxzLFxuICAgICAgcHJvdmlkZXJzOiBydW50aW1lLnByb3ZpZGVycyxcbiAgICAgIHJlcXVlc3RlZDogb3B0cy5tb2RlbCxcbiAgICAgIGNvbmZpZ3VyZWQ6IGNvbmZpZ3VyZWRNb2RlbCB8fCBjb25maWcuZGVmYXVsdE1vZGVsLFxuICAgIH0pXG4gICAgY29uc3QgcmVxdWVzdGVkTmFtZSA9IG9wdHMubW9kZWwgfHwgY29uZmlndXJlZE1vZGVsXG4gICAgaWYgKCFtb2RlbCB8fCBtb2RlbC5hdmFpbGFibGUgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHVzYWJsZSBtb2RlbCR7cmVxdWVzdGVkTmFtZSA/IGAgbWF0Y2hpbmcgXCIke3JlcXVlc3RlZE5hbWV9XCJgIDogJyd9YClcbiAgICB9XG5cbiAgICBpZiAob3B0cy5zcGVlZCA9PT0gJ2Zhc3QnICYmICFtb2RlbC5zcGVlZCkgdGhyb3cgbmV3IEVycm9yKGAke21vZGVsLm5hbWV9IGRvZXMgbm90IHN1cHBvcnQgc3BlZWQgY29udHJvbGApXG5cbiAgICBjb25zdCBhdXRoID0gbW9kZWwucHJvdmlkZXIgPT09ICdjb2RleCcgPyBydW50aW1lLmNvZGV4Q3JlZGVudGlhbHMgOiBudWxsXG4gICAgaWYgKG1vZGVsLnByb3ZpZGVyID09PSAnY29kZXgnICYmICFhdXRoKSB0aHJvdyBuZXcgRXJyb3IoJ2NvZGV4IG1vZGVscyBuZWVkIGEgQ2hhdEdQVCBzaWduLWluIChydW4gcGljbyAtLWNvbm5lY3QpJylcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IChkZXBlbmRlbmNpZXMucnVuVHVybiB8fCBydW5UdXJuKSh7XG4gICAgICBoaXN0b3J5OiBbeyByb2xlOiAndXNlcicsIGNvbnRlbnQ6IG9wdHMucHJvbXB0IH1dLFxuICAgICAgdG9vbHM6IFtdLFxuICAgICAgcmVjb3JkZXI6IG51bGwsXG4gICAgICBtb2RlbE5hbWU6IG1vZGVsLm5hbWUsXG4gICAgICBlZmZvcnQ6IG9wdHMuZWZmb3J0ID8/IChtb2RlbC5lZmZvcnQgPyAnbG93JyA6IG51bGwpLFxuICAgICAgLi4uKG1vZGVsLnByb3ZpZGVyID09PSAnY29kZXgnICYmIHsgc3BlZWQ6IG1vZGVsLnNwZWVkID8gKG9wdHMuc3BlZWQgPz8gJ3N0YW5kYXJkJykgOiAnc3RhbmRhcmQnIH0pLFxuICAgICAgYXV0aCxcbiAgICAgIHN5c3RlbTogU1lTVEVNKHtcbiAgICAgICAgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nID8gJ21hY09TJyA6IHByb2Nlc3MucGxhdGZvcm0sXG4gICAgICAgIHNoZWxsOiBiYXNlbmFtZShwcm9jZXNzLmVudi5TSEVMTCB8fCAnenNoJyksXG4gICAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgIH0pLFxuICAgIH0pXG4gICAgaWYgKHJlc3VsdC5lcnJvcikgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5lcnJvcilcbiAgICBpZiAocmVzdWx0LmludGVycnVwdGVkKSB0aHJvdyBuZXcgRXJyb3IoJ2NvbW1hbmQgZ2VuZXJhdGlvbiB3YXMgaW50ZXJydXB0ZWQnKVxuICAgIGNvbnN0IHRleHQgPSByZXN1bHQubWVzc2FnZXNcbiAgICAgIC5maWx0ZXIoKG1lc3NhZ2UpID0+IG1lc3NhZ2Uucm9sZSA9PT0gJ2Fzc2lzdGFudCcgJiYgdHlwZW9mIG1lc3NhZ2UuY29udGVudCA9PT0gJ3N0cmluZycpXG4gICAgICAuYXQoLTEpPy5jb250ZW50IHx8ICcnXG4gICAgc3Rkb3V0LndyaXRlKGNvbW1hbmRGcm9tUmVzcG9uc2UodGV4dCkgKyAnXFxuJylcbiAgICByZXR1cm4gMFxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHN0ZGVyci53cml0ZShgcGljbzogJHtlcnJvci5tZXNzYWdlfVxcbmApXG4gICAgcmV0dXJuIDFcbiAgfVxufVxuIiwgImltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnXG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnXG5pbXBvcnQgeyBlbnN1cmVEYWVtb24gfSBmcm9tICdwaWNvY29kZS1jb3JlL2RhZW1vbi10cmFuc3BvcnQuanMnXG5pbXBvcnQgeyBjcmVhdGVSZW1vdGVDb250cm9sbGVyIH0gZnJvbSAncGljb2NvZGUtY29yZS9yZW1vdGUtY29udHJvbGxlci5qcydcbmltcG9ydCB7IG1vdW50IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgcGFyc2VBcmdzLCBVU0FHRSB9IGZyb20gJy4vY2xpLWFyZ3MuanMnXG5pbXBvcnQgeyBsb2FkTW9kZWxSdW50aW1lIH0gZnJvbSAnLi9tb2RlbC1ydW50aW1lLmpzJ1xuaW1wb3J0IHsgcmVhZENvbmZpZyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29uZmlnLmpzJ1xuaW1wb3J0IHsgZGV0ZWN0VGVybWluYWxUaGVtZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvdGVybWluYWwtdGhlbWUuanMnXG5pbXBvcnQgeyBBcHAgfSBmcm9tICcuL3VpL2FwcC5qc3gnXG5pbXBvcnQgeyBERUZBVUxUX0FDQ0VOVCwgTVVURUQsIHNldFBhbGV0dGUsIHBhbGV0dGVMaXN0IH0gZnJvbSAnLi91aS90aGVtZS5qcydcblxuY29uc3QgcGtnID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMobmV3IFVSTCgnLi4vcGFja2FnZS5qc29uJywgaW1wb3J0Lm1ldGEudXJsKSwgJ3V0Zi04JykpXG5cbmxldCBjbGlcbnRyeSB7XG4gIGNsaSA9IHBhcnNlQXJncyhwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpXG59IGNhdGNoIChlcnIpIHtcbiAgY29uc29sZS5lcnJvcihgcGljbzogJHtlcnIubWVzc2FnZX1gKVxuICBjb25zb2xlLmVycm9yKFVTQUdFKVxuICBwcm9jZXNzLmV4aXQoMSlcbn1cbmlmIChjbGkubW9kZSA9PT0gJ2hlbHAnKSB7XG4gIGNvbnNvbGUubG9nKFVTQUdFKVxuICBwcm9jZXNzLmV4aXQoMClcbn1cbmlmIChjbGkubW9kZSA9PT0gJ3ZlcnNpb24nKSB7XG4gIGNvbnNvbGUubG9nKHBrZy52ZXJzaW9uKVxuICBwcm9jZXNzLmV4aXQoMClcbn1cbmlmIChjbGkubW9kZSA9PT0gJ3VwZGF0ZScpIHtcbiAgY29uc3QgeyBpc0Rldkluc3RhbGwsIHJ1blVwZGF0ZSwgZmV0Y2hMYXRlc3RWZXJzaW9uLCBuZXdlclZlcnNpb24gfSA9IGF3YWl0IGltcG9ydCgncGljb2NvZGUtY29yZS91cGRhdGUuanMnKVxuICBpZiAoaXNEZXZJbnN0YWxsKGltcG9ydC5tZXRhLnVybCkpIHtcbiAgICBjb25zb2xlLmVycm9yKCd0aGlzIHBpY28gcnVucyBmcm9tIGEgc291cmNlIGNoZWNrb3V0OyB1cGRhdGUgaXQgd2l0aCBnaXQsIG5vdCBucG0nKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG4gIGNvbnN0IGxhdGVzdCA9IGF3YWl0IGZldGNoTGF0ZXN0VmVyc2lvbigpLmNhdGNoKCgpID0+IG51bGwpXG4gIGlmIChsYXRlc3QgJiYgIW5ld2VyVmVyc2lvbihwa2cudmVyc2lvbiwgbGF0ZXN0KSkge1xuICAgIGNvbnNvbGUubG9nKGBwaWNvIHYke3BrZy52ZXJzaW9ufSBpcyBhbHJlYWR5IHRoZSBsYXRlc3RgKVxuICAgIHByb2Nlc3MuZXhpdCgwKVxuICB9XG4gIGNvbnNvbGUuZXJyb3IoYHVwZGF0aW5nIHBpY29jb2RlICR7bGF0ZXN0ID8gYHRvIHYke2xhdGVzdH0gYCA6ICcnfXZpYSBucG0uLi5gKVxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBydW5VcGRhdGUoKVxuICBpZiAocmVzdWx0Lm9rKSB7XG4gICAgY29uc29sZS5sb2coYHVwZGF0ZWQke2xhdGVzdCA/IGAgdG8gdiR7bGF0ZXN0fWAgOiAnJ31gKVxuICAgIHByb2Nlc3MuZXhpdCgwKVxuICB9XG4gIGNvbnNvbGUuZXJyb3IoYHVwZGF0ZSBmYWlsZWQ6XFxuJHtyZXN1bHQub3V0cHV0fWApXG4gIHByb2Nlc3MuZXhpdCgxKVxufVxuaWYgKGNsaS5tb2RlID09PSAnY29ubmVjdCcpIHtcbiAgY29uc3QgeyBjb25uZWN0T3BlbkFJIH0gPSBhd2FpdCBpbXBvcnQoJ3BpY29jb2RlLWNvcmUvb3BlbmFpLWF1dGguanMnKVxuICB0cnkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ29wZW5pbmcgeW91ciBicm93c2VyIGZvciBDaGF0R1BUIHNpZ24taW4uLi4nKVxuICAgIGNvbnN0IHsgZW1haWwgfSA9IGF3YWl0IGNvbm5lY3RPcGVuQUkoeyBvblVybDogKHVybCkgPT4gY29uc29sZS5lcnJvcihgaWYgdGhlIGJyb3dzZXIgZGlkIG5vdCBvcGVuLCB2aXNpdDpcXG4ke3VybH1gKSB9KVxuICAgIGNvbnNvbGUubG9nKGBjb25uZWN0ZWQgYXMgJHtlbWFpbCB8fCAneW91ciBDaGF0R1BUIGFjY291bnQnfWApXG4gICAgcHJvY2Vzcy5leGl0KDApXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUuZXJyb3IoYGNvbm5lY3QgZmFpbGVkOiAke2Vyci5tZXNzYWdlfWApXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbn1cbmlmIChjbGkubW9kZSA9PT0gJ2hlYWRsZXNzJykge1xuICBjb25zdCB7IHJ1bkhlYWRsZXNzIH0gPSBhd2FpdCBpbXBvcnQoJy4vaGVhZGxlc3MuanMnKVxuICBwcm9jZXNzLmV4aXQoYXdhaXQgcnVuSGVhZGxlc3MoY2xpKSlcbn1cbmlmIChjbGkubW9kZSA9PT0gJ3NoZWxsJykge1xuICBjb25zdCB7IHJ1blNoZWxsIH0gPSBhd2FpdCBpbXBvcnQoJy4vc2hlbGwuanMnKVxuICBwcm9jZXNzLmV4aXQoYXdhaXQgcnVuU2hlbGwoY2xpKSlcbn1cblxuY29uc3QgeyBwcm92aWRlcnMgfSA9IGF3YWl0IGxvYWRNb2RlbFJ1bnRpbWUoKVxuXG5pZiAocHJvdmlkZXJzLmxlbmd0aCA9PT0gMCkge1xuICBjb25zb2xlLmVycm9yKCdwaWNvOiBubyBjcmVkZW50aWFscyBmb3VuZC4nKVxuICBjb25zb2xlLmVycm9yKCdzZXQgb25lIG9mOiBHRU1JTklfQVBJX0tFWSwgQU5USFJPUElDX0FQSV9LRVksIE9QRU5BSV9BUElfS0VZLCBYQUlfQVBJX0tFWSwgT1BFTlJPVVRFUl9BUElfS0VZJylcbiAgY29uc29sZS5lcnJvcignb3Igc2lnbiBpbiB3aXRoIGEgQ2hhdEdQVCBwbGFuOiBwaWNvIC0tY29ubmVjdCcpXG4gIHByb2Nlc3MuZXhpdCgxKVxufVxuXG5jb25zdCBjb25maWcgPSBhd2FpdCByZWFkQ29uZmlnKClcblxuY29uc3QgZGV0ZWN0ZWRUaGVtZSA9IGF3YWl0IGRldGVjdFRlcm1pbmFsVGhlbWUoKVxuY29uc3QgdGhlbWVPdmVycmlkZSA9IHBhbGV0dGVMaXN0KCkuc29tZSgocCkgPT4gcC5rZXkgPT09IGNvbmZpZy50aGVtZSkgPyBjb25maWcudGhlbWUgOiBudWxsXG5zZXRQYWxldHRlKHRoZW1lT3ZlcnJpZGUgfHwgZGV0ZWN0ZWRUaGVtZSlcbmNvbnN0IHRoZW1lID0geyBhY2NlbnQ6IERFRkFVTFRfQUNDRU5ULCBtdXRlZDogTVVURUQgfVxuXG5jb25zdCBjb25uZWN0aW9uID0gYXdhaXQgZW5zdXJlRGFlbW9uKHsgZW50cnk6IGZpbGVVUkxUb1BhdGgobmV3IFVSTCgnLi9kYWVtb24uanMnLCBpbXBvcnQubWV0YS51cmwpKSB9KVxuY29uc3QgY29udHJvbGxlciA9IGF3YWl0IGNyZWF0ZVJlbW90ZUNvbnRyb2xsZXIoY29ubmVjdGlvbiwge1xuICBvcHRpb25zOiB7IGN3ZDogcHJvY2Vzcy5jd2QoKSwgdmVyc2lvbjogcGtnLnZlcnNpb24sIHRoZW1lLCBkZXRlY3RlZFRoZW1lLCB0aGVtZVByZWY6IHRoZW1lT3ZlcnJpZGUgfHwgJ2F1dG8nIH0sXG4gIGxvY2FsQm9vdDogeyByZWZzOiB7fSB9LFxufSlcbmNvbnN0IGJvb3QgPSBjb250cm9sbGVyLmJvb3RcbmlmIChjbGkuc3BlZWQpIGF3YWl0IGNvbnRyb2xsZXIuc3BlZWRDb21tYW5kKGNsaS5zcGVlZClcbmZvciAoY29uc3Qgc2lnbmFsIG9mIFsnU0lHSU5UJywgJ1NJR1RFUk0nLCAnU0lHSFVQJ10pIHByb2Nlc3Mub24oc2lnbmFsLCAoKSA9PiB7XG4gIGNvbm5lY3Rpb24uY2xvc2UoKVxuICBwcm9jZXNzLmV4aXQoMClcbn0pXG5wcm9jZXNzLm9uKCdleGl0JywgKCkgPT4gY29ubmVjdGlvbi5jbG9zZSgpKVxuY29uc3QgYXBwID0gbW91bnQoKCkgPT4gPEFwcCBib290PXtib290fSBjb250cm9sbGVyPXtjb250cm9sbGVyfSAvPiwgeyB0aXRsZTogYHBpY28gICR7Ym9vdC5yb290LnNwbGl0KCcvJykucG9wKCl9YCwgdGhlbWUgfSlcbmJvb3Quc2V0VGhlbWUgPSBhcHAuc2V0VGhlbWVcbiIsICJleHBvcnQgY29uc3QgVVNBR0UgPSBgcGljbyAtIGEgY29kaW5nIGFnZW50IGluIHlvdXIgdGVybWluYWxcblxudXNhZ2U6XG4gIHBpY28gICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlIHNlc3Npb24gaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5XG4gIHBpY28gLXAgXCJwcm9tcHRcIiAgICAgICAgICAgaGVhZGxlc3M6IHJ1biBvbmUgYWdlbnRpYyB0dXJuLCBwcmludCB0aGUgYW5zd2VyXG4gIHBpY28gLXMgXCJyZXF1ZXN0XCIgICAgICAgICAgZ2VuZXJhdGUgb25lIHNoZWxsIGNvbW1hbmQsIHdpdGhvdXQgcnVubmluZyBpdFxuICBjYXQgbG9nIHwgcGljbyAtcCBcIi4uLlwiICAgIHN0ZGluIGlzIGFwcGVuZGVkIHRvIHRoZSBwcm9tcHQgYXMgY29udGV4dFxuXG5jb21tYW5kIGZsYWdzOlxuICAtcCwgLS1wcmludCA8cHJvbXB0PiAgICAgICBydW4gb25lIGFnZW50aWMgdHVybiBhbmQgcHJpbnQgdGhlIGFuc3dlclxuICAtcywgLS1zaGVsbCA8cmVxdWVzdD4gICAgICBwcmludCBvbmUgZ2VuZXJhdGVkIHNoZWxsIGNvbW1hbmRcbiAgLS1qc29uICAgICAgICAgICAgICAgICAgICAgcHJpbnQgYSBzaW5nbGUgSlNPTiByZXN1bHQgb2JqZWN0IHRvIHN0ZG91dFxuICAtLXN0cmVhbS1qc29uICAgICAgICAgICAgICBzdHJlYW0gc2Vzc2lvbiBldmVudHMgdG8gc3Rkb3V0IGFzIGpzb25sXG4gIC1tLCAtLW1vZGVsIDxuYW1lPiAgICAgICAgIG1vZGVsIHRvIHVzZSAoZnV6enkgbWF0Y2hlZCwgb3IgcmF3IHByb3ZpZGVyL21vZGVsKVxuICAtLXNwZWVkIDxsZXZlbD4gICAgICAgICAgICBzcGVlZDogc3RhbmRhcmR8ZmFzdFxuICAtLWVmZm9ydCA8bGV2ZWw+ICAgICAgICAgICB0aGlua2luZyBlZmZvcnQ6IGF1dG98bG93fG1lZGl1bXxoaWdofG1heFxuICAtLXJlc3VtZSA8c2Vzc2lvbi1pZD4gICAgICBjb250aW51ZSBhbiBleGlzdGluZyBzZXNzaW9uIGZyb20gdGhpcyBwcm9qZWN0XG4gIC0tbWF4LXRvb2wtY2FsbHMgPG4+ICAgICAgIHN0b3AgdGhlIGFnZW50IGFmdGVyIG4gdG9vbCBjYWxscyAoZGVmYXVsdCA1MClcbiAgLXEsIC0tcXVpZXQgICAgICAgICAgICAgICAgbm8gcHJvZ3Jlc3Mgb3V0cHV0IG9uIHN0ZGVyclxuXG4gIC0tY29ubmVjdCAgICAgICAgICAgICAgICAgIHNpZ24gaW4gd2l0aCBhIENoYXRHUFQgcGxhbiAoT0F1dGggaW4geW91ciBicm93c2VyKVxuICB1cGRhdGUsIC0tdXBkYXRlICAgICAgICAgICB1cGRhdGUgcGljbyB0byB0aGUgbGF0ZXN0IHJlbGVhc2UgZnJvbSBucG1cbiAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHBcbiAgLXYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgc2hvdyB2ZXJzaW9uYFxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3YpIHtcbiAgY29uc3Qgb3B0cyA9IHsgbW9kZTogJ2ludGVyYWN0aXZlJyB9XG4gIGNvbnN0IHRha2VWYWx1ZSA9IChuYW1lLCBpKSA9PiB7XG4gICAgaWYgKGkgKyAxID49IGFyZ3YubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoYCR7bmFtZX0gcmVxdWlyZXMgYSB2YWx1ZWApXG4gICAgcmV0dXJuIGFyZ3ZbaSArIDFdXG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3YubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhcmcgPSBhcmd2W2ldXG4gICAgaWYgKGFyZyA9PT0gJy1wJyB8fCBhcmcgPT09ICctLXByaW50Jykge1xuICAgICAgaWYgKG9wdHMubW9kZSAhPT0gJ2ludGVyYWN0aXZlJykgdGhyb3cgbmV3IEVycm9yKGAke2FyZ30gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYW5vdGhlciBjb21tYW5kIG1vZGVgKVxuICAgICAgb3B0cy5tb2RlID0gJ2hlYWRsZXNzJ1xuICAgICAgb3B0cy5wcm9tcHQgPSB0YWtlVmFsdWUoYXJnLCBpKVxuICAgICAgaSsrXG4gICAgfSBlbHNlIGlmIChhcmcgPT09ICctcycgfHwgYXJnID09PSAnLS1zaGVsbCcpIHtcbiAgICAgIGlmIChvcHRzLm1vZGUgIT09ICdpbnRlcmFjdGl2ZScpIHRocm93IG5ldyBFcnJvcihgJHthcmd9IGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGFub3RoZXIgY29tbWFuZCBtb2RlYClcbiAgICAgIG9wdHMubW9kZSA9ICdzaGVsbCdcbiAgICAgIG9wdHMucHJvbXB0ID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLS1qc29uJykgb3B0cy5qc29uID0gdHJ1ZVxuICAgIGVsc2UgaWYgKGFyZyA9PT0gJy0tc3RyZWFtLWpzb24nKSBvcHRzLnN0cmVhbUpzb24gPSB0cnVlXG4gICAgZWxzZSBpZiAoYXJnID09PSAnLW0nIHx8IGFyZyA9PT0gJy0tbW9kZWwnKSB7XG4gICAgICBvcHRzLm1vZGVsID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLS1lZmZvcnQnKSB7XG4gICAgICBjb25zdCBsZXZlbCA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpZiAoIVsnYXV0bycsICdsb3cnLCAnbWVkaXVtJywgJ2hpZ2gnLCAnbWF4J10uaW5jbHVkZXMobGV2ZWwpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBlZmZvcnQgXCIke2xldmVsfVwiOiB1c2UgYXV0b3xsb3d8bWVkaXVtfGhpZ2h8bWF4YClcbiAgICAgIH1cbiAgICAgIG9wdHMuZWZmb3J0ID0gbGV2ZWxcbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLS1zcGVlZCcpIHtcbiAgICAgIGNvbnN0IGxldmVsID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGlmICghWydzdGFuZGFyZCcsICdmYXN0J10uaW5jbHVkZXMobGV2ZWwpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBzcGVlZCBcIiR7bGV2ZWx9XCI6IHVzZSBzdGFuZGFyZHxmYXN0YClcbiAgICAgIH1cbiAgICAgIG9wdHMuc3BlZWQgPSBsZXZlbFxuICAgICAgaSsrXG4gICAgfSBlbHNlIGlmIChhcmcgPT09ICctLXJlc3VtZScpIHtcbiAgICAgIG9wdHMucmVzdW1lID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLS1tYXgtdG9vbC1jYWxscycpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGlmICghL15cXGQrJC8udGVzdCh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcignLS1tYXgtdG9vbC1jYWxscyByZXF1aXJlcyBhIHBvc2l0aXZlIGludGVnZXInKVxuICAgICAgb3B0cy5tYXhUb29sQ2FsbHMgPSBOdW1iZXIodmFsdWUpXG4gICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKG9wdHMubWF4VG9vbENhbGxzKSB8fCBvcHRzLm1heFRvb2xDYWxscyA8IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCctLW1heC10b29sLWNhbGxzIHJlcXVpcmVzIGEgcG9zaXRpdmUgaW50ZWdlcicpXG4gICAgICB9XG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tY29ubmVjdCcpIG9wdHMubW9kZSA9ICdjb25uZWN0J1xuICAgIGVsc2UgaWYgKGFyZyA9PT0gJ3VwZGF0ZScgfHwgYXJnID09PSAnLS11cGRhdGUnKSBvcHRzLm1vZGUgPSAndXBkYXRlJ1xuICAgIGVsc2UgaWYgKGFyZyA9PT0gJy1xJyB8fCBhcmcgPT09ICctLXF1aWV0Jykgb3B0cy5xdWlldCA9IHRydWVcbiAgICBlbHNlIGlmIChhcmcgPT09ICctaCcgfHwgYXJnID09PSAnLS1oZWxwJykgb3B0cy5tb2RlID0gJ2hlbHAnXG4gICAgZWxzZSBpZiAoYXJnID09PSAnLXYnIHx8IGFyZyA9PT0gJy0tdmVyc2lvbicpIG9wdHMubW9kZSA9ICd2ZXJzaW9uJ1xuICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIGFyZ3VtZW50IFwiJHthcmd9XCJgKVxuICB9XG5cbiAgaWYgKG9wdHMubW9kZSA9PT0gJ2hlYWRsZXNzJyAmJiAhb3B0cy5wcm9tcHQ/LnRyaW0oKSkgdGhyb3cgbmV3IEVycm9yKCctcCByZXF1aXJlcyBhIG5vbi1lbXB0eSBwcm9tcHQnKVxuICBpZiAob3B0cy5tb2RlID09PSAnc2hlbGwnKSB7XG4gICAgaWYgKCFvcHRzLnByb21wdD8udHJpbSgpKSB0aHJvdyBuZXcgRXJyb3IoJy1zIHJlcXVpcmVzIGEgbm9uLWVtcHR5IHJlcXVlc3QnKVxuICAgIGNvbnN0IGluY29tcGF0aWJsZSA9IFtvcHRzLmpzb24gJiYgJy0tanNvbicsIG9wdHMuc3RyZWFtSnNvbiAmJiAnLS1zdHJlYW0tanNvbicsIG9wdHMucmVzdW1lICYmICctLXJlc3VtZScsIG9wdHMubWF4VG9vbENhbGxzICYmICctLW1heC10b29sLWNhbGxzJ10uZmluZChCb29sZWFuKVxuICAgIGlmIChpbmNvbXBhdGlibGUpIHRocm93IG5ldyBFcnJvcihgJHtpbmNvbXBhdGlibGV9IGNhbm5vdCBiZSB1c2VkIHdpdGggLS1zaGVsbGApXG4gIH1cbiAgcmV0dXJuIG9wdHNcbn1cbiIsICJpbXBvcnQgeyBTY3JvbGxCb3gsIHVzZUZvY3VzLCB1c2VMYXlvdXQsIHVzZUludGVydmFsLCBjcmVhdGVTaWduYWwgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcydcbmltcG9ydCB7IFNFU1NJT05fQ09MT1JTIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb250cm9sbGVyLmpzJ1xuaW1wb3J0IHsgRkdfU09GVCwgTVVURUQsIFBBTkVMX0JHLCBhY2NlbnQgfSBmcm9tICcuL3RoZW1lLmpzJ1xuaW1wb3J0IHsgdGltZUFnbyB9IGZyb20gJy4vcGFuZWxzLmpzeCdcblxuZnVuY3Rpb24gU2Vzc2lvblJvdyh7IHJvdywgc2VsZWN0ZWQsIGZvY3VzLCBub3cgfSkge1xuICBjb25zdCBsYXlvdXQgPSB1c2VMYXlvdXQoKVxuICBmb2N1cy5pdGVtKHJvdy5pZCwgbGF5b3V0KVxuICBjb25zdCBjb2xvciA9IFNFU1NJT05fQ09MT1JTW3Jvdy5jb2xvcl0gfHwgcm93LmNvbG9yIHx8IGFjY2VudCgpXG4gIHJldHVybiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMSwgaGVpZ2h0OiAyLCBmbGV4U2hyaW5rOiAwLCBiZzogc2VsZWN0ZWQgPyBjb2xvciA6IHVuZGVmaW5lZCB9fT5cbiAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogY29sb3IsIGJvbGQ6IHRydWUsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntgJHtyb3cuc3RhdHVzID09PSAnYnVzeScgPyAnXHUyNUNGJyA6ICdcdTI1Q0InfSAke3Jvdy5uYW1lfWB9PC90ZXh0PlxuICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57cm93LnN0YXR1cyA9PT0gJ2J1c3knID8gcm93LmFjdGl2aXR5IHx8ICd3b3JraW5nJyA6IHJvdy5sYXN0TWVzc2FnZUF0ID8gYExhc3QgbWVzc2FnZSAke3RpbWVBZ28ocm93Lmxhc3RNZXNzYWdlQXQpfWAgOiAnaWRsZSd9PC90ZXh0PlxuICA8L2JveD5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFdvcmtzcGFjZVNpZGViYXIoeyBncm91cHMsIHNlbGVjdGVkLCB3aWR0aCwgbG9hZGluZywgZXJyb3IsIG9uSGVpZ2h0IH0pIHtcbiAgY29uc3QgZm9jdXMgPSB1c2VGb2N1cyh7IGluaXRpYWw6IG51bGwsIGFjdGl2ZTogZmFsc2UgfSlcbiAgY29uc3QgW25vdywgc2V0Tm93XSA9IGNyZWF0ZVNpZ25hbChEYXRlLm5vdygpKVxuICB1c2VJbnRlcnZhbCgoKSA9PiBzZXROb3coRGF0ZS5ub3coKSksIDEwMDAwKVxuICBpZiAoc2VsZWN0ZWQpIGZvY3VzLmZvY3VzKHNlbGVjdGVkKVxuICBjb25zdCBob21lID0gaG9tZWRpcigpXG4gIHJldHVybiA8Ym94IHN0eWxlPXt7IHdpZHRoLCBmbGV4U2hyaW5rOiAwLCBoZWlnaHQ6ICcxMDAlJywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRyB9fT5cbiAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgYm9sZDogdHJ1ZSwgcGFkZGluZ1g6IDEgfX0+U2Vzc2lvbnM8L3RleHQ+XG4gICAge2xvYWRpbmcgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PmxvYWRpbmc8L3RleHQ+fVxuICAgIHtlcnJvciAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntlcnJvcn08L3RleHQ+fVxuICAgIDxTY3JvbGxCb3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gZm9sbG93Rm9jdXM9e2ZvY3VzfSBmb2N1c1BhZGRpbmc9ezF9IG9uTWV0cmljcz17KG1ldHJpY3MpID0+IG9uSGVpZ2h0KG1ldHJpY3MudmlzaWJsZUhlaWdodCl9PlxuICAgICAge2dyb3Vwcy5tYXAoKGdyb3VwKSA9PiA8Ym94IGtleT17Z3JvdXAuY3dkfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJywgcGFkZGluZ1g6IDEgfX0+e2dyb3VwLmN3ZCA9PT0gaG9tZSA/ICd+JyA6IGdyb3VwLmN3ZC5zdGFydHNXaXRoKGhvbWUgKyAnLycpID8gJ34nICsgZ3JvdXAuY3dkLnNsaWNlKGhvbWUubGVuZ3RoKSA6IGdyb3VwLmN3ZH08L3RleHQ+XG4gICAgICAgIHtncm91cC5zZXNzaW9ucy5tYXAoKHJvdykgPT4gPFNlc3Npb25Sb3cga2V5PXtyb3cuaWR9IHJvdz17cm93fSBzZWxlY3RlZD17cm93LmlkID09PSBzZWxlY3RlZH0gZm9jdXM9e2ZvY3VzfSBub3c9e25vdygpfSAvPil9XG4gICAgICA8L2JveD4pfVxuICAgIDwvU2Nyb2xsQm94PlxuICA8L2JveD5cbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5cbmNvbnN0IFBBTEVUVEVTID0ge1xuICBkYXJrOiB7XG4gICAgZGVzYzogJ2xpZ2h0IHRleHQgZm9yIGRhcmsgdGVybWluYWxzJyxcbiAgICBhY2NlbnQ6ICcjZjg3MTcxJyxcbiAgICBmZzogJyNlNWU3ZWInLFxuICAgIGZnU29mdDogJyM5Y2EzYWYnLFxuICAgIG11dGVkOiAnI2I4YzBkMCcsXG4gICAgcGFuZWxCZzogJyMxZTFlMjInLFxuICAgIHNlbGVjdEJnOiAnIzM3NDE1MScsXG4gICAgcmVkOiAnI2Y4NzE3MScsXG4gICAgZ3JlZW46ICcjNGFkZTgwJyxcbiAgICBwZWVyOiAnI2M0YjVmZCcsXG4gICAgaGlnaGxpZ2h0OiAnI2ZmZmZmZicsXG4gICAgc2hpa2k6ICdub3JkJyxcbiAgfSxcbiAgbGlnaHQ6IHtcbiAgICBkZXNjOiAnZGFyayB0ZXh0IGZvciBsaWdodCB0ZXJtaW5hbHMnLFxuICAgIGFjY2VudDogJyNkYzI2MjYnLFxuICAgIGZnOiAnIzFmMjQzMCcsXG4gICAgZmdTb2Z0OiAnIzRiNTU2MycsXG4gICAgbXV0ZWQ6ICcjNGI1NTYzJyxcbiAgICBwYW5lbEJnOiAnI2U5ZTllZScsXG4gICAgc2VsZWN0Qmc6ICcjZDRkNGRjJyxcbiAgICByZWQ6ICcjZGMyNjI2JyxcbiAgICBncmVlbjogJyMxNmEzNGEnLFxuICAgIHBlZXI6ICcjNmQyOGQ5JyxcbiAgICBoaWdobGlnaHQ6ICcjMTExODI3JyxcbiAgICBzaGlraTogJ2dpdGh1Yi1saWdodCcsXG4gIH0sXG4gIG5vcmQ6IHtcbiAgICBkZXNjOiAnYXJjdGljIGJsdWVzIG9uIHBvbGFyIG5pZ2h0JyxcbiAgICBhY2NlbnQ6ICcjODhjMGQwJyxcbiAgICBmZzogJyNkOGRlZTknLFxuICAgIGZnU29mdDogJyNhYWIyYzQnLFxuICAgIG11dGVkOiAnI2I4YzBkMCcsXG4gICAgcGFuZWxCZzogJyMzYjQyNTInLFxuICAgIHNlbGVjdEJnOiAnIzQzNGM1ZScsXG4gICAgcmVkOiAnI2JmNjE2YScsXG4gICAgZ3JlZW46ICcjYTNiZThjJyxcbiAgICBwZWVyOiAnI2Q4YjRmZScsXG4gICAgaGlnaGxpZ2h0OiAnI2VjZWZmNCcsXG4gICAgc2hpa2k6ICdub3JkJyxcbiAgfSxcbn1cblxuZXhwb3J0IGxldCBERUZBVUxUX0FDQ0VOVCA9IFBBTEVUVEVTLmRhcmsuYWNjZW50XG5leHBvcnQgbGV0IEZHID0gUEFMRVRURVMuZGFyay5mZ1xuZXhwb3J0IGxldCBGR19TT0ZUID0gUEFMRVRURVMuZGFyay5mZ1NvZnRcbmV4cG9ydCBsZXQgTVVURUQgPSBQQUxFVFRFUy5kYXJrLm11dGVkXG5leHBvcnQgbGV0IFBBTkVMX0JHID0gUEFMRVRURVMuZGFyay5wYW5lbEJnXG5leHBvcnQgbGV0IFNFTEVDVF9CRyA9IFBBTEVUVEVTLmRhcmsuc2VsZWN0QmdcbmV4cG9ydCBsZXQgUkVEID0gUEFMRVRURVMuZGFyay5yZWRcbmV4cG9ydCBsZXQgR1JFRU4gPSBQQUxFVFRFUy5kYXJrLmdyZWVuXG5leHBvcnQgbGV0IFBFRVIgPSBQQUxFVFRFUy5kYXJrLnBlZXJcbmV4cG9ydCBsZXQgSElHSExJR0hUID0gUEFMRVRURVMuZGFyay5oaWdobGlnaHRcblxubGV0IGN1cnJlbnRQYWxldHRlID0gJ2RhcmsnXG5sZXQgZXhwbGljaXRBY2NlbnQgPSBudWxsXG5cbmNvbnN0IFthY2NlbnRWYWx1ZSwgc2V0QWNjZW50VmFsdWVdID0gY3JlYXRlU2lnbmFsKERFRkFVTFRfQUNDRU5UKVxuXG5leHBvcnQgY29uc3QgYWNjZW50ID0gYWNjZW50VmFsdWVcblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFjY2VudChjb2xvcikge1xuICBleHBsaWNpdEFjY2VudCA9IGNvbG9yIHx8IG51bGxcbiAgc2V0QWNjZW50VmFsdWUoZXhwbGljaXRBY2NlbnQgfHwgREVGQVVMVF9BQ0NFTlQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRQYWxldHRlKG5hbWUpIHtcbiAgY3VycmVudFBhbGV0dGUgPSBQQUxFVFRFU1tuYW1lXSA/IG5hbWUgOiAnZGFyaydcbiAgY29uc3QgcCA9IFBBTEVUVEVTW2N1cnJlbnRQYWxldHRlXVxuICBERUZBVUxUX0FDQ0VOVCA9IHAuYWNjZW50XG4gIEZHID0gcC5mZ1xuICBGR19TT0ZUID0gcC5mZ1NvZnRcbiAgTVVURUQgPSBwLm11dGVkXG4gIFBBTkVMX0JHID0gcC5wYW5lbEJnXG4gIFNFTEVDVF9CRyA9IHAuc2VsZWN0QmdcbiAgUkVEID0gcC5yZWRcbiAgR1JFRU4gPSBwLmdyZWVuXG4gIFBFRVIgPSBwLnBlZXJcbiAgSElHSExJR0hUID0gcC5oaWdobGlnaHRcbiAgc2V0QWNjZW50VmFsdWUoZXhwbGljaXRBY2NlbnQgfHwgcC5hY2NlbnQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWxldHRlTmFtZSgpIHtcbiAgcmV0dXJuIGN1cnJlbnRQYWxldHRlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWxldHRlTGlzdCgpIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKFBBTEVUVEVTKS5tYXAoKFtrZXksIHBdKSA9PiAoeyBrZXksIGRlc2M6IHAuZGVzYyB9KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNoaWtpVGhlbWUoKSB7XG4gIHJldHVybiBQQUxFVFRFU1tjdXJyZW50UGFsZXR0ZV0uc2hpa2lcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwsIEJ1dHRvbiwgQ2hlY2tib3gsIGVhc2UsIEZpZWxkLCBGaWVsZExpc3QsIE1lbnUsIE51bWJlcklucHV0LCBQaWNrTGlzdCwgUmFkaW8sIFNjcm9sbEJveCwgVGV4dElucHV0LCB1c2VBbmltYXRlZCwgdXNlRm9jdXMsIHVzZUlucHV0LCB1c2VJbnRlcnZhbCwgdXNlTGF5b3V0IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgYWNjZW50LCBGRywgRkdfU09GVCwgTVVURUQsIFBBTkVMX0JHLCBTRUxFQ1RfQkcsIFJFRCwgR1JFRU4gfSBmcm9tICcuL3RoZW1lLmpzJ1xuaW1wb3J0IHsgQW5pbWF0ZWRWYWx1ZSB9IGZyb20gJy4vYW5pbWF0ZWQtdmFsdWUuanN4J1xuaW1wb3J0IHsgY29udGV4dEJhciB9IGZyb20gJy4vY29udGV4dC1iYXIuanMnXG5pbXBvcnQgeyBjb21wYWN0TnVtYmVyIH0gZnJvbSAncGljb2NvZGUtY29yZS9mb3JtYXQuanMnXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcydcbmltcG9ydCB7IGZ1enp5U2NvcmUsIHJhbmtGdXp6eSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZnV6enkuanMnXG5pbXBvcnQgeyBmb3JtYXRIdHRwU2VydmVyU3BlYywgcGFyc2VTZXJ2ZXJTcGVjLCByZWRhY3RTZXJ2ZXJTcGVjLCBSRURBQ1RFRF9IRUFERVIgfSBmcm9tICdwaWNvY29kZS1jb3JlL21jcC5qcydcblxuZnVuY3Rpb24gc2hvcnRlbkhvbWUocGF0aCkge1xuICBjb25zdCB2YWx1ZSA9IFN0cmluZyhwYXRoKVxuICBjb25zdCBob21lID0gaG9tZWRpcigpXG4gIHJldHVybiB2YWx1ZSA9PT0gaG9tZSB8fCB2YWx1ZS5zdGFydHNXaXRoKGAke2hvbWV9L2ApID8gYH4ke3ZhbHVlLnNsaWNlKGhvbWUubGVuZ3RoKX1gIDogdmFsdWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVBZ28oYXQpIHtcbiAgY29uc3QgcyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKERhdGUubm93KCkgLSBhdCkgLyAxMDAwKSlcbiAgaWYgKHMgPCA2MCkgcmV0dXJuIGAke3N9cyBhZ29gXG4gIGNvbnN0IG0gPSBNYXRoLmZsb29yKHMgLyA2MClcbiAgaWYgKG0gPCA2MCkgcmV0dXJuIGAke219bSBhZ29gXG4gIGNvbnN0IGggPSBNYXRoLmZsb29yKG0gLyA2MClcbiAgaWYgKGggPCAyNCkgcmV0dXJuIGAke2h9aCBhZ29gXG4gIHJldHVybiBgJHtNYXRoLmZsb29yKGggLyAyNCl9ZCBhZ29gXG59XG5cbmZ1bmN0aW9uIFBhbmVsRGl2aWRlcigpIHtcbiAgcmV0dXJuIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBTRUxFQ1RfQkcsIG92ZXJmbG93OiAnY2xpcCcgfX0+eydcdTI1MDAnLnJlcGVhdChwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIHx8IDgwKX08L3RleHQ+XG59XG5cbmZ1bmN0aW9uIFBhbmVsRnJhbWUoeyB0aXRsZSwgaGludCwgcmlnaHQsIGZ1bGxTY3JlZW4gPSBmYWxzZSwgY2hpbGRyZW4gfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgaGVpZ2h0OiBmdWxsU2NyZWVuID8gJzEwMCUnIDogdW5kZWZpbmVkIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIHBhZGRpbmdUb3A6IDEgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19Pnt0aXRsZX08L3RleHQ+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgIHtyaWdodH1cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57aGludH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIDxQYW5lbERpdmlkZXIgLz5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiBmdWxsU2NyZWVuID8gMCA6IDIsIHBhZGRpbmdCb3R0b206IDEsIGZsZXhHcm93OiBmdWxsU2NyZWVuID8gMSA6IHVuZGVmaW5lZCB9fT5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbmZpcm1QYW5lbCh7IHRpdGxlLCBtZXNzYWdlLCBjb25maXJtTGFiZWwgPSAnQ29uZmlybScsIGZvY3VzZWQsIG9uQ29uZmlybSwgb25DbG9zZSB9KSB7XG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgIG9uQ2xvc2UoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIG9uQ29uZmlybSgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPXt0aXRsZX0gaGludD17YGVudGVyOiAke2NvbmZpcm1MYWJlbC50b0xvd2VyQ2FzZSgpfSAgZXNjOiBjYW5jZWxgfT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PnttZXNzYWdlfTwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IFJFRCwgYm9sZDogdHJ1ZSB9fT5UaGlzIGNhbm5vdCBiZSB1bmRvbmUuPC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmZ1bmN0aW9uIENvbmZpZ0ZpZWxkKHsgZmllbGQsIHZhbHVlLCBmb2N1c2VkLCBvbkNoYW5nZSB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luQm90dG9tOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPENoZWNrYm94IGNoZWNrZWQ9e3ZhbHVlfSBsYWJlbD17ZmllbGQubGFiZWx9IGZvY3VzZWQ9e2ZvY3VzZWR9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2ZpZWxkLnBhdGh9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICAgJHtmaWVsZC5kZXNjfWB9PC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIENvbmZpZ051bWJlckZpZWxkKHsgdmFsdWUsIGZvY3VzZWQsIG9uQ2hhbmdlIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Cb3R0b206IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICA8TnVtYmVySW5wdXQgZm9jdXNlZD17Zm9jdXNlZH0gdmFsdWU9e3ZhbHVlfSBvbkNoYW5nZT17b25DaGFuZ2V9IG1pbj17MX0gbWF4PXsxMDB9IHdpZHRoPXs1fSAvPlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+IFBhcmFsbGVsIGFnZW50IGxpbWl0PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5yZXNlYXJjaC5hZ2VudExpbWl0PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+ICAgIE1heGltdW0gYWdlbnRzIHBlciBwYXJhbGxlbCBydW4gKDEtMTAwKTwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb25maWdNb2RlbEZpZWxkKHsgbW9kZWwsIGxhYmVsLCBwYXRoLCBmb2N1c2VkLCBvblBpY2sgfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDxCdXR0b24gbGFiZWw9e2xhYmVsfSBmb2N1c2VkPXtmb2N1c2VkfSBvblByZXNzPXtvblBpY2t9IC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntwYXRofTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAgICR7bW9kZWwgfHwgJ05vdCBjb25maWd1cmVkJ31gfTwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ29uZmlnUGFuZWwoeyB2YWx1ZXMsIGZvY3VzZWQsIG9uQ2hhbmdlLCBvblBpY2tSZXNlYXJjaE1vZGVsLCBvblBpY2tTaGVsbE1vZGVsLCBvblBpY2tEZWxpYmVyYXRpb25Nb2RlbCwgb25QaWNrUGFydGljaXBhbnRNb2RlbCwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IGZpZWxkcyA9IFtcbiAgICB7IG5hbWU6ICdjbG91ZHMnLCBsYWJlbDogJ0Nsb3VkIGFuaW1hdGlvbicsIGRlc2M6ICdTaG93IGFuaW1hdGVkIGNsb3VkcyBvbiB0aGUgZW1wdHkgc2NyZWVuJywgcGF0aDogJ2FuaW1hdGlvbi5jbG91ZHMnIH0sXG4gICAgeyBuYW1lOiAnY29tcGFjdFRvb2xzJywgbGFiZWw6ICdDb21wYWN0IHRvb2wgaGlzdG9yeScsIGRlc2M6ICdTdW1tYXJpemUgY29uc2VjdXRpdmUgdG9vbCBjYWxscyBpbiBvbmUgcm93JywgcGF0aDogJ2Rpc3BsYXkuY29tcGFjdFRvb2xIaXN0b3J5JyB9LFxuICAgIHsgbmFtZTogJ2dpdFN0YXR1cycsIGxhYmVsOiAnR2l0IGluZm9ybWF0aW9uJywgZGVzYzogJ1Nob3cgYnJhbmNoIGFuZCBjaGFuZ2VkIGxpbmUgY291bnRzJywgcGF0aDogJ2Rpc3BsYXkuZ2l0U3RhdHVzJyB9LFxuICAgIHsgbmFtZTogJ3dpZGVTaWRlYmFyJywgbGFiZWw6ICdXaWRlIHNpZGViYXInLCBkZXNjOiAnTW92ZSBwYW5lbHMgYW5kIHN0YXR1cyBkZXRhaWxzIHRvIGEgcmlnaHQgc2lkZWJhciB3aGVuIHRoZSB0ZXJtaW5hbCBpcyB3aWRlciB0aGFuIDE2MCBjb2x1bW5zJywgcGF0aDogJ2Rpc3BsYXkud2lkZVNpZGViYXInIH0sXG4gIF1cblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9XCJDb25maWd1cmF0aW9uXCIgaGludD1cInRhYjogbmV4dCBzZXR0aW5nICBzcGFjZS9lbnRlcjogY2hhbmdlICBlc2M6IGNsb3NlXCIgZnVsbFNjcmVlbj5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIG1hcmdpblRvcDogMSwgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDxGaWVsZExpc3QgZm9jdXNlZD17Zm9jdXNlZH0gaW5pdGlhbEZvY3VzPVwiY2xvdWRzXCIgc2Nyb2xsYmFyIGZvY3VzUGFkZGluZz17MX0+XG4gICAgICAgICAge2ZpZWxkcy5tYXAoKGZpZWxkKSA9PiAoXG4gICAgICAgICAgICA8RmllbGQga2V5PXtmaWVsZC5uYW1lfSBuYW1lPXtmaWVsZC5uYW1lfT5cbiAgICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiAoXG4gICAgICAgICAgICAgICAgPENvbmZpZ0ZpZWxkIGZpZWxkPXtmaWVsZH0gdmFsdWU9e3ZhbHVlc1tmaWVsZC5uYW1lXX0gZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvbkNoYW5nZT17KHZhbHVlKSA9PiBvbkNoYW5nZShmaWVsZC5uYW1lLCB2YWx1ZSl9IC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICkpfVxuICAgICAgICAgIDxGaWVsZCBuYW1lPVwicmVzZWFyY2hNb2RlbFwiPlxuICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTW9kZWxGaWVsZCBtb2RlbD17dmFsdWVzLnJlc2VhcmNoTW9kZWx9IGxhYmVsPVwiUGFyYWxsZWwgd29ya2VyIG1vZGVsXCIgcGF0aD1cIm1vZGVscy5yZXNlYXJjaFdvcmtlclwiIGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25QaWNrPXtvblBpY2tSZXNlYXJjaE1vZGVsfSAvPn1cbiAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgIDxGaWVsZCBuYW1lPVwic2hlbGxNb2RlbFwiPlxuICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTW9kZWxGaWVsZCBtb2RlbD17dmFsdWVzLnNoZWxsTW9kZWx9IGxhYmVsPVwiU2hlbGwgbW9kZWxcIiBwYXRoPVwibW9kZWxzLnNoZWxsXCIgZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvblBpY2s9e29uUGlja1NoZWxsTW9kZWx9IC8+fVxuICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAge1sncGFydGljaXBhbnRBJywgJ3BhcnRpY2lwYW50QiddLm1hcCgocm9sZSkgPT4gKFxuICAgICAgICAgICAgPEZpZWxkIG5hbWU9e2Ake3JvbGV9TW9kZWxgfT5cbiAgICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTW9kZWxGaWVsZCBtb2RlbD17dmFsdWVzW2Ake3JvbGV9TW9kZWxgXX0gbGFiZWw9e2BQYXJ0aWNpcGFudCAke3JvbGUgPT09ICdwYXJ0aWNpcGFudEEnID8gJ0EnIDogJ0InfSBtb2RlbGB9IHBhdGg9e2Btb2RlbHMuJHtyb2xlfWB9IGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25QaWNrPXsoKSA9PiBvblBpY2tQYXJ0aWNpcGFudE1vZGVsKHJvbGUpfSAvPn1cbiAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgICAgPEZpZWxkIG5hbWU9XCJkZWxpYmVyYXRpb25Nb2RlbFwiPlxuICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTW9kZWxGaWVsZCBtb2RlbD17dmFsdWVzLmRlbGliZXJhdGlvbk1vZGVsfSBsYWJlbD1cIlN5bnRoZXNpcyBtb2RlbFwiIHBhdGg9XCJtb2RlbHMuZGVsaWJlcmF0aW9uXCIgZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvblBpY2s9e29uUGlja0RlbGliZXJhdGlvbk1vZGVsfSAvPn1cbiAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgIDxGaWVsZCBuYW1lPVwicmVzZWFyY2hBZ2VudExpbWl0XCI+XG4gICAgICAgICAgICB7KHsgZm9jdXNlZDogZmllbGRGb2N1c2VkIH0pID0+IDxDb25maWdOdW1iZXJGaWVsZCB2YWx1ZT17dmFsdWVzLnJlc2VhcmNoQWdlbnRMaW1pdH0gZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvbkNoYW5nZT17KHZhbHVlKSA9PiBvbkNoYW5nZSgncmVzZWFyY2hBZ2VudExpbWl0JywgdmFsdWUpfSAvPn1cbiAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICA8L0ZpZWxkTGlzdD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gU2NvcGVUYWJzKHsgc2NvcGVzLCBhY3RpdmUgfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICB7c2NvcGVzLm1hcCgocywgaSkgPT4gKFxuICAgICAgICA8dGV4dCBrZXk9e3N9IHN0eWxlPXt7IGNvbG9yOiBpID09PSBhY3RpdmUgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiBpID09PSBhY3RpdmUgfX0+e2Ake2kgPiAwID8gJyAgJyA6ICcnfSR7cyA9PT0gJ2NoZWNrb3V0JyA/ICd0aGlzIGNoZWNrb3V0JyA6IHN9YH08L3RleHQ+XG4gICAgICApKX1cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gTW9kZWxQYW5lbCh7IG1vZGVscywgY3VycmVudCwgZGVmYXVsdE5hbWUsIGZvY3VzZWQsIG9uUGljaywgb25QaWNrRGVmYXVsdCwgb25DbG9zZSwgdGl0bGUgPSAnU2VsZWN0IG1vZGVsJywgaGludCA9ICdlbnRlcjogdGhpcyBzZXNzaW9uICBjdHJsK3M6IHNldCBhcyBkZWZhdWx0ICBlc2M6IGNsb3NlJyB9KSB7XG4gIGNvbnN0IFtjdXJzb3IsIHNldEN1cnNvcl0gPSBjcmVhdGVTaWduYWwobW9kZWxzWzBdIHx8IG51bGwpXG4gIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCByYW5rZWRNb2RlbHMgPSByYW5rRnV6enkobW9kZWxzLCBxdWVyeSgpLCAocSwgbW9kZWwpID0+IGZ1enp5U2NvcmUocSwgbW9kZWwubmFtZSkpXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJyAmJiBjdXJzb3IoKSkge1xuICAgICAgb25QaWNrRGVmYXVsdChjdXJzb3IoKSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9e3RpdGxlfSBoaW50PXtoaW50fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogMTIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgY291bnRlclxuICAgICAgICAgIGl0ZW1zPXtyYW5rZWRNb2RlbHN9XG4gICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBtb2RlbHMuLi5cIlxuICAgICAgICAgIGZpbHRlcj17KCkgPT4gdHJ1ZX1cbiAgICAgICAgICBvbkNoYW5nZT17c2V0UXVlcnl9XG4gICAgICAgICAgb25DdXJzb3JDaGFuZ2U9e3NldEN1cnNvcn1cbiAgICAgICAgICBvblN1Ym1pdD17b25QaWNrfVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICBpdGVtSGVpZ2h0PXsyfVxuICAgICAgICAgIHNjcm9sbG9mZj17MX1cbiAgICAgICAgICByZW5kZXJJdGVtPXsobSwgeyBzZWxlY3RlZCwgZm9jdXNlZDogZiB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvZmYgPSBtLmF2YWlsYWJsZSA9PT0gZmFsc2VcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBzZWxlY3RlZCA/IChmID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGJvbGQ6ICFvZmYsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBvZmYgPyBNVVRFRCA6IEZHIH19PnttLm5hbWV9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAge20ubmFtZSA9PT0gY3VycmVudCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogYWNjZW50KCkgfX0+eycgXHUyNzEzJ308L3RleHQ+fVxuICAgICAgICAgICAgICAgICAge20ubmFtZSA9PT0gZGVmYXVsdE5hbWUgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PnsnICBkZWZhdWx0J308L3RleHQ+fVxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PlxuICAgICAgICAgICAgICAgICAgICB7b2ZmID8gYG5lZWRzICR7bS5rZXlIaW50fWAgOiBtLnByaWNlID8gYCQke20ucHJpY2UuaW59IGluICAkJHttLnByaWNlLm91dH0gb3V0YCA6IG0ucHJvdmlkZXIgPT09ICdjb2RleCcgPyAnc3Vic2NyaXB0aW9uJyA6ICdwcmljZSB1bmtub3duJ31cbiAgICAgICAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e20uZGVzY308L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhpc3RvcnlQYW5lbCh7IHByb21wdHMsIHNjb3Blcywgc2NvcGVJbmRleCwgZm9jdXNlZCwgb25QaWNrLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW3ByZXZpZXcsIHNldFByZXZpZXddID0gY3JlYXRlU2lnbmFsKHByb21wdHNbMF0gfHwgbnVsbClcbiAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IGFueU1hdGNoID0gcHJvbXB0cy5zb21lKChwKSA9PiBmdXp6eVNjb3JlKHF1ZXJ5KCksIHAudGV4dCkgPj0gMClcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lXG4gICAgICB0aXRsZT1cIlNlYXJjaCBwcm9tcHRzXCJcbiAgICAgIGhpbnQ9XCJcdTIxOTFcdTIxOTMgdG8gbW92ZSAgY3RybCtzIHNjb3BlICBlbnRlciB0byBlZGl0ICBlc2MgdG8gY2xvc2VcIlxuICAgICAgcmlnaHQ9ezxTY29wZVRhYnMgc2NvcGVzPXtzY29wZXN9IGFjdGl2ZT17c2NvcGVJbmRleH0gLz59XG4gICAgPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAxMiwgbWFyZ2luVG9wOiAxLCBnYXA6IDIgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHdpZHRoOiAnNTAlJyB9fT5cbiAgICAgICAgICA8UGlja0xpc3RcbiAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgIGl0ZW1zPXtwcm9tcHRzfVxuICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZmlsdGVyIHByb21wdHMuLi5cIlxuICAgICAgICAgICAgZmlsdGVyPXsocSwgcCkgPT4gZnV6enlTY29yZShxLCBwLnRleHQpID49IDB9XG4gICAgICAgICAgICBvbkNoYW5nZT17c2V0UXVlcnl9XG4gICAgICAgICAgICBvbkN1cnNvckNoYW5nZT17KHApID0+IHNldFByZXZpZXcocCl9XG4gICAgICAgICAgICBvblN1Ym1pdD17KHApID0+IG9uUGljayhwLnRleHQpfVxuICAgICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyhwLCB7IHNlbGVjdGVkLCBmb2N1c2VkOiBmIH0pID0+IChcbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgYmc6IHNlbGVjdGVkID8gKGYgPyBhY2NlbnQoKSA6IFNFTEVDVF9CRykgOiBudWxsLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IEZHIH19PntwLnRleHQucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAgJHt0aW1lQWdvKHAuYXQpfWB9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgIHthbnlNYXRjaCAmJiBwcmV2aWV3KCkgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+e3ByZXZpZXcoKS50ZXh0LnNsaWNlKDAsIDIwMDApfTwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIG1hdGNoaW5nIHByb21wdHM8L3RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJld2luZFBpY2tQYW5lbCh7IGVudHJpZXMsIHN0YXRzLCBmb2N1c2VkLCBvblBpY2ssIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbcHJldmlldywgc2V0UHJldmlld10gPSBjcmVhdGVTaWduYWwoZW50cmllc1swXSB8fCBudWxsKVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9XCJSZXdpbmQgdG8gYSBtZXNzYWdlXCIgaGludD1cIlx1MjE5MVx1MjE5MyB0byBtb3ZlICBlbnRlciB0byBjaG9vc2UgIGVzYyB0byBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAxMiwgbWFyZ2luVG9wOiAxLCBnYXA6IDIgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHdpZHRoOiAnNTAlJyB9fT5cbiAgICAgICAgICA8UGlja0xpc3RcbiAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgIGl0ZW1zPXtlbnRyaWVzfVxuICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZmlsdGVyIG1lc3NhZ2VzLi4uXCJcbiAgICAgICAgICAgIGZpbHRlcj17KHEsIG0pID0+IGZ1enp5U2NvcmUocSwgbS50ZXh0KSA+PSAwfVxuICAgICAgICAgICAgb25DdXJzb3JDaGFuZ2U9eyhtKSA9PiBzZXRQcmV2aWV3KG0pfVxuICAgICAgICAgICAgb25TdWJtaXQ9e29uUGlja31cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICByZW5kZXJJdGVtPXsobSwgeyBzZWxlY3RlZCwgZm9jdXNlZDogZiB9KSA9PiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBzZWxlY3RlZCA/IChmID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGRyB9fT57bS50ZXh0LnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgICR7c3RhdHMobS5pbmRleCkubXNnc30gYWZ0ZXJgfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICB7cHJldmlldygpID8gKFxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgcmV3aW5kaW5nIGhlcmUgZHJvcHMgJHtzdGF0cyhwcmV2aWV3KCkuaW5kZXgpLm1zZ3N9IGVudHJpZXNgfTwvdGV4dD5cbiAgICAgICAgICAgICAge3N0YXRzKHByZXZpZXcoKS5pbmRleCkuZWRpdHMubWFwKChtLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgIFx1MjFBOSAke20udGl0bGV9YH08L3RleHQ+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+e3ByZXZpZXcoKS50ZXh0LnNsaWNlKDAsIDIwMDApfTwvdGV4dD5cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gbWF0Y2hpbmcgbWVzc2FnZXM8L3RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJld2luZEFjdGlvblBhbmVsKHsgdGFyZ2V0LCBvcHRpb25zLCBmb2N1c2VkLCBvblN1Ym1pdCwgb25CYWNrIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PlJld2luZCBvcHRpb25zPC90ZXh0PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsndG86ICd9PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBGR19TT0ZUIH19Pnt0YXJnZXQudGV4dC5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxNZW51XG4gICAgICAgICAgY291bnRlclxuICAgICAgICAgIGl0ZW1zPXtvcHRpb25zfVxuICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgbWF4VmlzaWJsZT17NH1cbiAgICAgICAgICBpdGVtSGVpZ2h0PXsyfVxuICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICB2aW1LZXlzXG4gICAgICAgICAgb25TdWJtaXQ9e29uU3VibWl0fVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkJhY2t9XG4gICAgICAgICAgcmVuZGVySXRlbT17KG8sIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57by5sYWJlbH08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICR7by5kZXNjfWB9PC90ZXh0PlxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PmVudGVyIHRvIGNvbmZpcm0gIGVzYyB0byBwaWNrIGEgZGlmZmVyZW50IG1lc3NhZ2U8L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gdXNlRXNjYXBlKGZvY3VzZWQsIG9uQ2xvc2UpIHtcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKCkpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzdW1lUGFuZWwoeyBzZXNzaW9ucywgc2NvcGVzLCBzY29wZUluZGV4LCBsb2FkaW5nLCBmb2N1c2VkLCBjdXJyZW50SWQsIG9uUGljaywgb25EZWxldGUsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbcHJldmlldywgc2V0UHJldmlld10gPSBjcmVhdGVTaWduYWwoc2Vzc2lvbnNbMF0gfHwgbnVsbClcbiAgY29uc3QgW3BhbmUsIHNldFBhbmVdID0gY3JlYXRlU2lnbmFsKCdsaXN0JylcbiAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IHJhbmtlZFNlc3Npb25zID0gcmFua0Z1enp5KHNlc3Npb25zLCBxdWVyeSgpLCAocSwgc2Vzc2lvbikgPT4ge1xuICAgIGNvbnN0IGN1c3RvbVNjb3JlID0gc2Vzc2lvbi5jdXN0b21UaXRsZSA/IGZ1enp5U2NvcmUocSwgc2Vzc2lvbi5jdXN0b21UaXRsZSkgOiAtMVxuICAgIGlmIChjdXN0b21TY29yZSA+PSAwKSByZXR1cm4gMjBfMDAwICsgY3VzdG9tU2NvcmVcbiAgICByZXR1cm4gTWF0aC5tYXgoZnV6enlTY29yZShxLCBzZXNzaW9uLmF1dG9tYXRpY1RpdGxlIHx8IHNlc3Npb24udGl0bGUpLCBmdXp6eVNjb3JlKHEsIHNlc3Npb24uY2hlY2tvdXQgfHwgJycpKVxuICB9KVxuICBjb25zdCBzaG93Q2hlY2tvdXRzID0gbmV3IFNldChzZXNzaW9ucy5tYXAoKHNlc3Npb24pID0+IHNlc3Npb24uY2hlY2tvdXQpLmZpbHRlcihCb29sZWFuKSkuc2l6ZSA+IDFcbiAgY29uc3Qgc2VsZWN0ZWRTZXNzaW9uID0gKCkgPT4ge1xuICAgIGlmIChsb2FkaW5nKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IHNlbGVjdGVkID0gcHJldmlldygpXG4gICAgcmV0dXJuIHNlc3Npb25zLmluY2x1ZGVzKHNlbGVjdGVkKSA/IHNlbGVjdGVkIDogbnVsbFxuICB9XG4gIHVzZUVzY2FwZSgoKSA9PiBmb2N1c2VkLCBvbkNsb3NlKVxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICd0YWInICYmICFldmVudC5jdHJsICYmICFldmVudC5tZXRhKSB7XG4gICAgICBzZXRQYW5lKChjdXJyZW50KSA9PiBjdXJyZW50ID09PSAnbGlzdCcgPyAncHJldmlldycgOiAnbGlzdCcpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0ZWRTZXNzaW9uKClcbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4JyAmJiBzZWxlY3RlZCkge1xuICAgICAgb25EZWxldGUoc2VsZWN0ZWQpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lXG4gICAgICB0aXRsZT1cIlJlc3VtZSBhIHNlc3Npb25cIlxuICAgICAgaGludD1cIlx1MjE5MVx1MjE5MyB0byBtb3ZlICB0YWI6IHByZXZpZXcgIGN0cmwrcyBzY29wZSAgZW50ZXIgdG8gcmVzdW1lICBjdHJsK3ggZGVsZXRlICBlc2MgdG8gY2xvc2VcIlxuICAgICAgcmlnaHQ9ezxTY29wZVRhYnMgc2NvcGVzPXtzY29wZXN9IGFjdGl2ZT17c2NvcGVJbmRleH0gLz59XG4gICAgICBmdWxsU2NyZWVuXG4gICAgPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIG1hcmdpblRvcDogMSwgZ2FwOiAxIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6ICc0MCUnLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5sb2FkaW5nIHNlc3Npb25zLi4uPC90ZXh0PlxuICAgICAgICAgICkgOiBzZXNzaW9ucy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gc2Vzc2lvbnMgaGVyZSB5ZXQ8L3RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxQaWNrTGlzdFxuICAgICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICAgIGl0ZW1zPXtyYW5rZWRTZXNzaW9uc31cbiAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBwYW5lKCkgPT09ICdsaXN0JyAmJiAhbG9hZGluZ31cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgc2Vzc2lvbnMuLi5cIlxuICAgICAgICAgICAgICBmaWx0ZXI9eygpID0+IHRydWV9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRRdWVyeX1cbiAgICAgICAgICAgICAgb25DdXJzb3JDaGFuZ2U9eyhzKSA9PiBzZXRQcmV2aWV3KHMpfVxuICAgICAgICAgICAgICBvblN1Ym1pdD17b25QaWNrfVxuICAgICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgICAgcmVuZGVySXRlbT17KHMsIHsgc2VsZWN0ZWQsIGZvY3VzZWQ6IGYgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBzZWxlY3RlZCA/IChmID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogKHNob3dDaGVja291dHMgPyBzLmNvbG9yIDogbnVsbCksIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgICAge3Nob3dDaGVja291dHMgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVELCBiZzogc2VsZWN0ZWQgPyBudWxsIDogcy5jb2xvciB9fT57YCR7cy5jaGVja291dH0gIGB9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGRywgYmc6IHNlbGVjdGVkIHx8IHNob3dDaGVja291dHMgPyBudWxsIDogcy5jb2xvciB9fT57cy50aXRsZS5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIHtzLmhlYWRlci5pZCA9PT0gY3VycmVudElkICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBhY2NlbnQoKSB9fT4gY3VycmVudDwvdGV4dD59XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgICR7dGltZUFnbyhzLmF0KX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDxQYW5lbERpdmlkZXIgLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDMgfX0+XG4gICAgICAgICAge3NlbGVjdGVkU2Vzc2lvbigpID8gKFxuICAgICAgICAgICAgPFNjcm9sbEJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSBmb2N1c2VkPXtmb2N1c2VkICYmIHBhbmUoKSA9PT0gJ3ByZXZpZXcnfSBzY3JvbGxiYXI+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtzZWxlY3RlZFNlc3Npb24oKS50dXJuc30gJHtzZWxlY3RlZFNlc3Npb24oKS50dXJucyA9PT0gMSA/ICd0dXJuJyA6ICd0dXJucyd9ICAke3RpbWVBZ28oc2VsZWN0ZWRTZXNzaW9uKCkuYXQpfSAgJHtzaG9ydGVuSG9tZShzZWxlY3RlZFNlc3Npb24oKS5oZWFkZXIucm9vdCl9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBoZWlnaHQ6IDEgfX0gLz5cbiAgICAgICAgICAgICAgICB7KHNlbGVjdGVkU2Vzc2lvbigpLnByZXZpZXcgfHwgW10pLmxlbmd0aCA+IDAgPyAoXG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICAgICAgICB7c2VsZWN0ZWRTZXNzaW9uKCkucHJldmlld01lc3NhZ2VDb3VudCA+IHNlbGVjdGVkU2Vzc2lvbigpLnByZXZpZXcubGVuZ3RoICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Ake3NlbGVjdGVkU2Vzc2lvbigpLnByZXZpZXdNZXNzYWdlQ291bnQgLSBzZWxlY3RlZFNlc3Npb24oKS5wcmV2aWV3Lmxlbmd0aH0gZWFybGllciBtZXNzYWdlcyBvbWl0dGVkYH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHsoc2VsZWN0ZWRTZXNzaW9uKCkucHJldmlldyB8fCBbXSkubWFwKChtZXNzYWdlLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGJveCBrZXk9e2Ake21lc3NhZ2Uucm9sZX0tJHtpfWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IGkgPT09IDAgPyAwIDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBtZXNzYWdlLnJvbGUgPT09ICd1c2VyJyA/IEZHIDogTVVURUQgfX0+e21lc3NhZ2UudGV4dH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyB0cmFuc2NyaXB0IHByZXZpZXc8L3RleHQ+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHNlc3Npb25zPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNZW1vcnlQYW5lbCh7IG1lbW9yaWVzLCBzY29wZXMsIHNjb3BlSW5kZXgsIGZvY3VzZWQsIG9uVG9nZ2xlRGlzYWJsZWQsIG9uRm9yZ2V0LCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2N1cnNvckl0ZW0sIHNldEN1cnNvckl0ZW1dID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtwYW5lLCBzZXRQYW5lXSA9IGNyZWF0ZVNpZ25hbCgnbGlzdCcpXG4gIGNvbnN0IHByZXZpZXcgPSBtZW1vcmllcy5pbmNsdWRlcyhjdXJzb3JJdGVtKCkpID8gY3Vyc29ySXRlbSgpIDogbWVtb3JpZXNbMF0gfHwgbnVsbFxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCwgb25DbG9zZSlcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyAmJiAhZXZlbnQuY3RybCAmJiAhZXZlbnQubWV0YSkge1xuICAgICAgc2V0UGFuZSgocCkgPT4gKHAgPT09ICdsaXN0JyA/ICdwcmV2aWV3JyA6ICdsaXN0JykpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnICYmIHByZXZpZXcpIHtcbiAgICAgIG9uRm9yZ2V0KHByZXZpZXcpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lXG4gICAgICB0aXRsZT1cIk1lbW9yeVwiXG4gICAgICBoaW50PVwiXHUyMTkxXHUyMTkzIHRvIG1vdmUgIGVudGVyOiBlbmFibGUvZGlzYWJsZSAgdGFiOiBwcmV2aWV3ICBjdHJsK3Mgc2NvcGUgIGN0cmwreCBmb3JnZXQgKHR3aWNlKSAgZXNjIHRvIGNsb3NlXCJcbiAgICAgIHJpZ2h0PXs8U2NvcGVUYWJzIHNjb3Blcz17c2NvcGVzfSBhY3RpdmU9e3Njb3BlSW5kZXh9IC8+fVxuICAgICAgZnVsbFNjcmVlblxuICAgID5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtYXJnaW5Ub3A6IDEsIGdhcDogMSB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiAnNDAlJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAge21lbW9yaWVzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBtZW1vcmllcyBoZXJlIHlldDwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgICAgaXRlbXM9e21lbW9yaWVzfVxuICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIHBhbmUoKSA9PT0gJ2xpc3QnfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBtZW1vcmllcy4uLlwiXG4gICAgICAgICAgICAgIGZpbHRlcj17KHEsIG0pID0+IGZ1enp5U2NvcmUocSwgYCR7bS5uYW1lfSAke20uZGVzY3JpcHRpb259YCkgPj0gMH1cbiAgICAgICAgICAgICAgb25DdXJzb3JDaGFuZ2U9e3NldEN1cnNvckl0ZW19XG4gICAgICAgICAgICAgIG9uU3VibWl0PXtvblRvZ2dsZURpc2FibGVkfVxuICAgICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgICAgcmVuZGVySXRlbT17KG0sIHsgc2VsZWN0ZWQsIGZvY3VzZWQ6IGYgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBzZWxlY3RlZCA/IChmID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBpdGFsaWM6IG0uZGlzYWJsZWQsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiAobS5kaXNhYmxlZCA/IE1VVEVEIDogRkcpIH19PntgJHttLmRpc2FibGVkID8gJyAgICcgOiAnJ30ke20ubmFtZX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICAge20uZGlzYWJsZWQgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PiAgc3VwcHJlc3NlZDwvdGV4dD59XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgICR7bS5zY29wZX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDxQYW5lbERpdmlkZXIgLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDMgfX0+XG4gICAgICAgICAge3ByZXZpZXcgPyAoXG4gICAgICAgICAgICA8U2Nyb2xsQm94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgcGFuZSgpID09PSAncHJldmlldyd9IHNjcm9sbGJhcj5cbiAgICAgICAgICAgICAge3ByZXZpZXcuZGlzYWJsZWQgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBib2xkOiB0cnVlIH19PlNVUFBSRVNTRUQ8L3RleHQ+fVxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57cHJldmlldy5kZXNjcmlwdGlvbiB8fCAnbm8gZGVzY3JpcHRpb24nfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e3ByZXZpZXcuYm9keX08L3RleHQ+XG4gICAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIG1lbW9yaWVzPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFZmZvcnRQYW5lbCh7IGxldmVscywgY3VycmVudCwgZGVmYXVsdExldmVsLCBmb2N1c2VkLCBvblBpY2ssIG9uUGlja0RlZmF1bHQsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbY3Vyc29yLCBzZXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IGl0ZW1zID0gbGV2ZWxzXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJykge1xuICAgICAgb25QaWNrRGVmYXVsdChpdGVtc1tjdXJzb3IoKV0pXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBsYWJlbCA9IChsKSA9PiAobC5rZXkgPT09IG51bGwgPyAnZGVmYXVsdCcgOiBsLmtleSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPVwiVGhpbmtpbmcgZWZmb3J0XCIgaGludD1cImovayB0byBtb3ZlICBlbnRlcjogdGhpcyBzZXNzaW9uICBjdHJsK3M6IHNldCBhcyBkZWZhdWx0ICBlc2M6IGNsb3NlXCI+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxNZW51XG4gICAgICAgICAgY291bnRlclxuICAgICAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgICAgICBzZWxlY3RlZD17Y3Vyc29yKCl9XG4gICAgICAgICAgb25TZWxlY3Q9e3NldEN1cnNvcn1cbiAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgICAgdmltS2V5c1xuICAgICAgICAgIG9uU3VibWl0PXtvblBpY2t9XG4gICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgcmVuZGVySXRlbT17KGwsIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHIH19PntsYWJlbChsKS5wYWRFbmQoTWF0aC5tYXgoMTAsIGxhYmVsKGwpLmxlbmd0aCArIDEpKX08L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57bC5kZXNjfTwvdGV4dD5cbiAgICAgICAgICAgICAge2wua2V5ID09PSBjdXJyZW50ICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IE1VVEVEIH19PnsnICBcdTI3MTMnfTwvdGV4dD59XG4gICAgICAgICAgICAgIHtsLmtleSA9PT0gZGVmYXVsdExldmVsICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57JyAgIGRlZmF1bHQnfTwvdGV4dD59XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApfVxuICAgICAgICAvPlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTcGVlZFBhbmVsKHsgbGV2ZWxzLCBjdXJyZW50LCBkZWZhdWx0TGV2ZWwsIGZvY3VzZWQsIG9uUGljaywgb25QaWNrRGVmYXVsdCwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtjdXJzb3IsIHNldEN1cnNvcl0gPSBjcmVhdGVTaWduYWwoTWF0aC5tYXgoMCwgbGV2ZWxzLmZpbmRJbmRleCgobCkgPT4gbC5rZXkgPT09IGN1cnJlbnQpKSlcbiAgY29uc3QgaXRlbXMgPSBsZXZlbHNcblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3MnKSB7XG4gICAgICBvblBpY2tEZWZhdWx0KGl0ZW1zW2N1cnNvcigpXSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IGxhYmVsID0gKGwpID0+IGwua2V5ID09PSAnZmFzdCcgPyAnRmFzdCcgOiAnU3RhbmRhcmQnXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlNwZWVkXCIgaGludD1cImVudGVyOiBzZXNzaW9uICBjdHJsK3M6IGRlZmF1bHQgIGVzYzogY2xvc2VcIj5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPE1lbnVcbiAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgaXRlbXM9e2l0ZW1zfVxuICAgICAgICAgIHNlbGVjdGVkPXtjdXJzb3IoKX1cbiAgICAgICAgICBvblNlbGVjdD17c2V0Q3Vyc29yfVxuICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICB2aW1LZXlzXG4gICAgICAgICAgb25TdWJtaXQ9e29uUGlja31cbiAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICByZW5kZXJJdGVtPXsobCwgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkcgfX0+e2xhYmVsKGwpLnBhZEVuZChNYXRoLm1heCgxMCwgbGFiZWwobCkubGVuZ3RoICsgMSkpfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtsLnVzYWdlLnJlcGxhY2UoLyB1c2FnZSQvLCAnJyl9IGluY2x1ZGVkIHVzYWdlYH08L3RleHQ+XG4gICAgICAgICAgICAgIHtsLmtleSA9PT0gY3VycmVudCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57JyAgXHUyNzEzJ308L3RleHQ+fVxuICAgICAgICAgICAgICB7bC5rZXkgPT09IGRlZmF1bHRMZXZlbCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eycgICBkZWZhdWx0J308L3RleHQ+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gVGhlbWVQYW5lbCh7IHRoZW1lcywgcHJlZiwgZm9jdXNlZCwgb25QaWNrLCBvblByZXZpZXcsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbY3Vyc29yLCBzZXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKE1hdGgubWF4KDAsIHRoZW1lcy5maW5kSW5kZXgoKHQpID0+IHQua2V5ID09PSBwcmVmKSkpXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlRoZW1lXCIgaGludD1cImovayB0byBtb3ZlIGFuZCBwcmV2aWV3ICBlbnRlciB0byBhcHBseSAgZXNjOiBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8TWVudVxuICAgICAgICAgIGl0ZW1zPXt0aGVtZXN9XG4gICAgICAgICAgc2VsZWN0ZWQ9e2N1cnNvcigpfVxuICAgICAgICAgIG9uU2VsZWN0PXsoaSkgPT4ge1xuICAgICAgICAgICAgc2V0Q3Vyc29yKGkpXG4gICAgICAgICAgICBvblByZXZpZXcodGhlbWVzW2ldKVxuICAgICAgICAgIH19XG4gICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICBtYXhWaXNpYmxlPXs2fVxuICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICBvblN1Ym1pdD17b25QaWNrfVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgIHJlbmRlckl0ZW09eyh0LCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57dC5rZXkucGFkRW5kKE1hdGgubWF4KDEwLCB0LmtleS5sZW5ndGggKyAxKSl9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e3QuZGVzY308L3RleHQ+XG4gICAgICAgICAgICAgIHt0LmtleSA9PT0gcHJlZiAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57JyAgXHUyNzEzJ308L3RleHQ+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb250ZXh0T3ZlcnZpZXcoeyBvdmVydmlldyB9KSB7XG4gIGNvbnN0IHJldmVhbCA9IHVzZUFuaW1hdGVkKDAsIGVhc2UoNzAwKSlcbiAgY29uc3QgbGF5b3V0ID0gdXNlTGF5b3V0KClcbiAgcmV2ZWFsLnNldCgxKVxuICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIGxheW91dC53aWR0aCB8fCAxKVxuICBjb25zdCB2aXNpYmxlID0gTWF0aC5yb3VuZCh3aWR0aCAqIHJldmVhbCgpKVxuICBjb25zdCB1c2FnZVdpZHRoID0gTWF0aC5tYXgoMSwgd2lkdGggLSA1KVxuICBjb25zdCB0b3RhbCA9IG92ZXJ2aWV3LnNlZ21lbnRzLnJlZHVjZSgoc3VtLCBzZWdtZW50KSA9PiBzdW0gKyBzZWdtZW50LnRva2VucywgMClcbiAgY29uc3QgdXNlZCA9IG92ZXJ2aWV3Lm1lYXN1cmVkIHx8IHRvdGFsXG4gIGNvbnN0IHBlcmNlbnQgPSB1c2VkICYmIG92ZXJ2aWV3LmxpbWl0ID8gTWF0aC5taW4oMTAwLCB1c2VkIC8gb3ZlcnZpZXcubGltaXQgKiAxMDApIDogMFxuICBsZXQgYm91bmRhcnkgPSAwXG4gIGNvbnN0IGNlbGxzID0gW11cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHdpZHRoOyBpKyspIHtcbiAgICBjb25zdCBzZWdtZW50ID0gb3ZlcnZpZXcuc2VnbWVudHMuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgYm91bmRhcnkgKz0gaXRlbS50b2tlbnMgLyB0b3RhbCAqIHdpZHRoXG4gICAgICByZXR1cm4gaSA8IGJvdW5kYXJ5XG4gICAgfSlcbiAgICBib3VuZGFyeSA9IDBcbiAgICBjZWxscy5wdXNoKFxuICAgICAgPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogaSA+PSB2aXNpYmxlID8gUEFORUxfQkcgOiBzZWdtZW50Py5jb2xvciB8fCBNVVRFRCB9fT5cbiAgICAgICAge2kgPj0gdmlzaWJsZSA/ICcgJyA6IHNlZ21lbnQgPyAnXHUyNTg4JyA6ICdcdTI1OTEnfVxuICAgICAgPC90ZXh0PixcbiAgICApXG4gIH1cblxuICBjb25zdCBmb3JtYXRUb2tlbnMgPSAodG9rZW5zKSA9PiB0b2tlbnMgPCAxMDAwID8gYCR7TWF0aC5yb3VuZCh0b2tlbnMpfSB0b2tgIDogYCR7KHRva2VucyAvIDEwMDApLnRvRml4ZWQoMSl9a2BcbiAgY29uc3QgbGVnZW5kUm93cyA9ICgpID0+IHtcbiAgICBjb25zdCByb3dzID0gW1tdXVxuICAgIGxldCB1c2VkID0gMFxuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBvdmVydmlldy5zZWdtZW50cykge1xuICAgICAgY29uc3QgaXRlbVdpZHRoID0gc2VnbWVudC5sYWJlbC5sZW5ndGggKyBmb3JtYXRUb2tlbnMoc2VnbWVudC50b2tlbnMpLmxlbmd0aCArIDVcbiAgICAgIGlmICh1c2VkID4gMCAmJiB1c2VkICsgaXRlbVdpZHRoID4gTWF0aC5tYXgoMSwgbGF5b3V0LndpZHRoIHx8IDEpKSB7XG4gICAgICAgIHJvd3MucHVzaChbXSlcbiAgICAgICAgdXNlZCA9IDBcbiAgICAgIH1cbiAgICAgIHJvd3MuYXQoLTEpLnB1c2goc2VnbWVudClcbiAgICAgIHVzZWQgKz0gaXRlbVdpZHRoXG4gICAgfVxuICAgIHJldHVybiByb3dzXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIHtwZXJjZW50ID4gMCAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgICAgICA8QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17cGVyY2VudH0gaW5pdGlhbD17MH0gZHVyYXRpb249ezEwMDB9IGNvbG9yPXtwZXJjZW50ID49IDgwID8gUkVEIDogRkdfU09GVH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gYmFja2dyb3VuZD17U0VMRUNUX0JHfSBmb3JtYXQ9eyh2YWx1ZSkgPT4gY29udGV4dEJhcih2YWx1ZSwgdXNhZ2VXaWR0aCl9IC8+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHBlcmNlbnQgPj0gODAgPyBSRUQgOiBNVVRFRCB9fT57YCR7b3ZlcnZpZXcubWVhc3VyZWQgPyAnJyA6ICd+J30ke01hdGgucm91bmQocGVyY2VudCl9JWAucGFkU3RhcnQoNSl9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PntjZWxsc308L2JveD5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgIHtsZWdlbmRSb3dzKCkubWFwKChyb3csIHJvd0luZGV4KSA9PiAoXG4gICAgICAgICAgPGJveCBrZXk9e3Jvd0luZGV4fSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgIHtyb3cubWFwKChzZWdtZW50KSA9PiAoXG4gICAgICAgICAgICAgIDxib3gga2V5PXtzZWdtZW50LmxhYmVsfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgbWFyZ2luUmlnaHQ6IDIgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlZ21lbnQuY29sb3IgfX0+XHUyNUEwPC90ZXh0PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAke3NlZ21lbnQubGFiZWx9IGB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDxBbmltYXRlZFZhbHVlXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17c2VnbWVudC50b2tlbnN9XG4gICAgICAgICAgICAgICAgICBpbml0aWFsPXswfVxuICAgICAgICAgICAgICAgICAgZHVyYXRpb249ezIwMDB9XG4gICAgICAgICAgICAgICAgICBjb2xvcj17TVVURUR9XG4gICAgICAgICAgICAgICAgICBoaWdobGlnaHQ9e2FjY2VudCgpfVxuICAgICAgICAgICAgICAgICAgZm9ybWF0PXtmb3JtYXRUb2tlbnN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKSl9XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gSW5mb0xpc3RQYW5lbCh7IHRpdGxlLCByb3dzLCBvdmVydmlldywgZm9jdXNlZCwgb25DbG9zZSB9KSB7XG4gIHVzZUVzY2FwZSgoKSA9PiBmb2N1c2VkLCBvbkNsb3NlKVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9e3RpdGxlfSBoaW50PVwiai9rIG9yIFx1MjE5MVx1MjE5MyB0byBzY3JvbGwgIGVzYyBjbG9zZVwiPlxuICAgICAge292ZXJ2aWV3ICYmIDxDb250ZXh0T3ZlcnZpZXcgb3ZlcnZpZXc9e292ZXJ2aWV3fSAvPn1cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogMTQsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAge3Jvd3MubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ub3RoaW5nIGhlcmUgeWV0PC90ZXh0PlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxTY3JvbGxCb3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gZm9jdXNlZD17Zm9jdXNlZH0gc2Nyb2xsYmFyPlxuICAgICAgICAgICAge3Jvd3MubWFwKChyb3csIGkpID0+IChcbiAgICAgICAgICAgICAgPGJveCBrZXk9e2Ake3Jvdy5uYW1lfS0ke2l9YH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogaSA9PT0gMCA/IDAgOiAxIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e3Jvdy5uYW1lfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICAgICAgICAgIHtyb3cubm90ZSAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e3Jvdy5ub3RlfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pntyb3cuZGVzYyB8fCAnbm8gZGVzY3JpcHRpb24nfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgKX1cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gUHJvamVjdFBhbmVsKHsgcHJvamVjdHMsIGxvYWRpbmcsIGZvY3VzZWQsIG9uUGlja0NoZWNrb3V0LCBvblBpY2tTZXNzaW9uLCBvbkFkZFdvcmt0cmVlLCBvbkRlbGV0ZSwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IHJvd3MgPSBwcm9qZWN0cy5mbGF0TWFwKChwcm9qZWN0KSA9PiBwcm9qZWN0LmNoZWNrb3V0cy5tYXAoKGNoZWNrb3V0LCBpbmRleCkgPT4gKHtcbiAgICAuLi5jaGVja291dCxcbiAgICBwcm9qZWN0UGF0aDogcHJvamVjdC5wYXRoLFxuICAgIGdyb3VwZWQ6IHByb2plY3QuY2hlY2tvdXRzLmxlbmd0aCA+IDEsXG4gICAgZmlyc3Q6IGluZGV4ID09PSAwLFxuICAgIGxhc3Q6IGluZGV4ID09PSBwcm9qZWN0LmNoZWNrb3V0cy5sZW5ndGggLSAxLFxuICB9KSkpXG4gIGNvbnN0IFtwcmV2aWV3LCBzZXRQcmV2aWV3XSA9IGNyZWF0ZVNpZ25hbChyb3dzWzBdIHx8IG51bGwpXG4gIGNvbnN0IFtwYW5lLCBzZXRQYW5lXSA9IGNyZWF0ZVNpZ25hbCgncHJvamVjdHMnKVxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCwgb25DbG9zZSlcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyAmJiAhZXZlbnQuY3RybCAmJiAhZXZlbnQubWV0YSkge1xuICAgICAgaWYgKHByZXZpZXcoKT8uc2Vzc2lvbnMubGVuZ3RoKSBzZXRQYW5lKChjdXJyZW50KSA9PiBjdXJyZW50ID09PSAncHJvamVjdHMnID8gJ3Nlc3Npb25zJyA6ICdwcm9qZWN0cycpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChwYW5lKCkgPT09ICdwcm9qZWN0cycgJiYgZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd0JyAmJiBwcmV2aWV3KCkpIHtcbiAgICAgIG9uQWRkV29ya3RyZWUocHJldmlldygpKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocGFuZSgpID09PSAncHJvamVjdHMnICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcgJiYgcHJldmlldygpKSB7XG4gICAgICBvbkRlbGV0ZShwcmV2aWV3KCkpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBjaGVja291dExhYmVsID0gKHJvdykgPT4gYCR7cm93Lmxhc3QgPyAnXHUyNTE0XHUyNTAwJyA6ICdcdTI1MUNcdTI1MDAnfSAke3Jvdy5icmFuY2ggfHwgKHJvdy53b3JrdHJlZSA/IHJvdy5wYXRoIDogJ21haW4nKX1gXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlN3aXRjaCBwcm9qZWN0XCIgaGludD1cIlx1MjE5MVx1MjE5MyBtb3ZlICB0YWIgc3dpdGNoIHBhbmUgIGVudGVyIG9wZW4gIGN0cmwrdCBuZXcgd29ya3RyZWUgIGN0cmwreCBkZWxldGUgIGVzYyBjbG9zZVwiIGZ1bGxTY3JlZW4+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWFyZ2luVG9wOiAxLCBnYXA6IDEgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogJzQ0JScsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PmxvYWRpbmcgcHJvamVjdHMuLi48L3RleHQ+XG4gICAgICAgICAgKSA6IHJvd3MubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIGtub3duIHByb2plY3RzIHlldDwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgICAgaXRlbXM9e3Jvd3N9XG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgcGFuZSgpID09PSAncHJvamVjdHMnfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBwcm9qZWN0cy4uLlwiXG4gICAgICAgICAgICAgIGZpbHRlcj17KHF1ZXJ5LCByb3cpID0+IGZ1enp5U2NvcmUocXVlcnksIGAke3Jvdy5wcm9qZWN0UGF0aH0gJHtyb3cuYnJhbmNoIHx8ICcnfWApID49IDB9XG4gICAgICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXtzZXRQcmV2aWV3fVxuICAgICAgICAgICAgICBvblN1Ym1pdD17b25QaWNrQ2hlY2tvdXR9XG4gICAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgICByZW5kZXJJdGVtPXsocm93LCB7IHNlbGVjdGVkLCBmb2N1c2VkOiBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgICAgICB7cm93Lmdyb3VwZWQgJiYgcm93LmZpcnN0ICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRyB9fT57YFx1MjVCRSAke3Jvdy5wcm9qZWN0UGF0aH1gfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoYWN0aXZlID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IEZHIH19Pntyb3cuZ3JvdXBlZCA/IGAgICR7Y2hlY2tvdXRMYWJlbChyb3cpfWAgOiByb3cucHJvamVjdFBhdGh9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke3Jvdy5jdXJyZW50ID8gJ2N1cnJlbnQgICcgOiAnJ30ke3Jvdy5sYXRlc3QgPyB0aW1lQWdvKHJvdy5sYXRlc3QuYXQpIDogJ25vIHNlc3Npb25zJ31gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICAgPFBhbmVsRGl2aWRlciAvPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICB7cHJldmlldygpPy5zZXNzaW9ucy5sZW5ndGggPyAoXG4gICAgICAgICAgICA8UGlja0xpc3RcbiAgICAgICAgICAgICAga2V5PXtwcmV2aWV3KCkucm9vdH1cbiAgICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgICBpdGVtcz17cHJldmlldygpLnNlc3Npb25zfVxuICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIHBhbmUoKSA9PT0gJ3Nlc3Npb25zJ31cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgc2Vzc2lvbnMuLi5cIlxuICAgICAgICAgICAgICBmaWx0ZXI9eyhxdWVyeSwgc2Vzc2lvbikgPT4gZnV6enlTY29yZShxdWVyeSwgc2Vzc2lvbi50aXRsZSkgPj0gMH1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9e29uUGlja1Nlc3Npb259XG4gICAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgICByZW5kZXJJdGVtPXsoc2Vzc2lvbiwgeyBzZWxlY3RlZCwgZm9jdXNlZDogYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoYWN0aXZlID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57c2Vzc2lvbi50aXRsZS5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAgJHtzZXNzaW9uLnR1cm5zfSAke3Nlc3Npb24udHVybnMgPT09IDEgPyAndHVybicgOiAndHVybnMnfSAgJHt0aW1lQWdvKHNlc3Npb24uYXQpfWB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHNlc3Npb25zPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb25uZWN0UGFuZWwoeyBwcm92aWRlcnMsIGZvY3VzZWQsIG9uQ29ubmVjdCwgb25EaXNjb25uZWN0LCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2luZGV4LCBzZXRJbmRleF0gPSBjcmVhdGVTaWduYWwoMClcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQsIG9uQ2xvc2UpXG5cbiAgY29uc3Qgc2VsZWN0ZWQgPSAoKSA9PiBwcm92aWRlcnNbTWF0aC5taW4oaW5kZXgoKSwgcHJvdmlkZXJzLmxlbmd0aCAtIDEpXSB8fCBudWxsXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBjb25zdCBwID0gc2VsZWN0ZWQoKVxuICAgIGlmIChwICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcgJiYgcC5jb25uZWN0ZWQpIHtcbiAgICAgIG9uRGlzY29ubmVjdChwKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIkNvbm5lY3QgYSBzdWJzY3JpcHRpb25cIiBoaW50PVwiZW50ZXIgc2lnbiBpbiAgY3RybCt4IGRpc2Nvbm5lY3QgKHR3aWNlKSAgZXNjIGNsb3NlXCI+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxNZW51XG4gICAgICAgICAgY291bnRlclxuICAgICAgICAgIGl0ZW1zPXtwcm92aWRlcnN9XG4gICAgICAgICAgc2VsZWN0ZWQ9e2luZGV4KCl9XG4gICAgICAgICAgb25TZWxlY3Q9e3NldEluZGV4fVxuICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICB2aW1LZXlzXG4gICAgICAgICAgb25TdWJtaXQ9eyhwKSA9PiBvbkNvbm5lY3QocCl9XG4gICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgcmVuZGVySXRlbT17KHAsIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBwLmNvbm5lY3RlZCA/IGFjY2VudCgpIDogTVVURUQgfX0+e3AuY29ubmVjdGVkID8gJ1x1MjVBQScgOiAnXHUyNUFCJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHIH19PntgICR7cC5sYWJlbH0gIGB9PC90ZXh0PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBNVVRFRCB9fT5cbiAgICAgICAgICAgICAgICAgIHtwLmNvbm5lY3RlZCA/IGBjb25uZWN0ZWQke3AuZW1haWwgPyBgIGFzICR7cC5lbWFpbH1gIDogJyd9YCA6ICdub3QgY29ubmVjdGVkJ31cbiAgICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gV2FrZXVwc1BhbmVsKHsgd2FrZXVwcywgZm9jdXNlZCwgb25DYW5jZWwsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbaW5kZXgsIHNldEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbdGljaywgc2V0VGlja10gPSBjcmVhdGVTaWduYWwoMClcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQsIG9uQ2xvc2UpXG4gIHVzZUludGVydmFsKCgpID0+IHNldFRpY2soKHQpID0+IHQgKyAxKSwgMTAwMClcbiAgdm9pZCB0aWNrKClcblxuICBjb25zdCBzZWxlY3RlZCA9ICgpID0+IHdha2V1cHNbTWF0aC5taW4oaW5kZXgoKSwgd2FrZXVwcy5sZW5ndGggLSAxKV0gfHwgbnVsbFxuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgY29uc3QgdyA9IHNlbGVjdGVkKClcbiAgICBpZiAodyAmJiBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnKSB7XG4gICAgICBvbkNhbmNlbCh3KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgY291bnRkb3duID0gKGF0KSA9PiB7XG4gICAgY29uc3Qgc2VjcyA9IE1hdGgubWF4KDAsIE1hdGgucm91bmQoKGF0IC0gRGF0ZS5ub3coKSkgLyAxMDAwKSlcbiAgICBpZiAoc2VjcyA8IDYwKSByZXR1cm4gYGluICR7c2Vjc31zYFxuICAgIGNvbnN0IG1pbnMgPSBNYXRoLmZsb29yKHNlY3MgLyA2MClcbiAgICBpZiAobWlucyA8IDYwKSByZXR1cm4gYGluICR7bWluc31tICR7c2VjcyAlIDYwfXNgXG4gICAgcmV0dXJuIGBpbiAke01hdGguZmxvb3IobWlucyAvIDYwKX1oICR7bWlucyAlIDYwfW1gXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPVwiU2NoZWR1bGVkIHdha2UtdXBzXCIgaGludD1cImovayB0byBtb3ZlICBlbnRlciBvciBjdHJsK3ggY2FuY2VsICh0d2ljZSkgIGVzYyBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICB7d2FrZXVwcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHBlbmRpbmcgd2FrZS11cHMgIHRoZSBhZ2VudCBzY2hlZHVsZXMgdGhlbSB3aXRoIHNjaGVkdWxlX3dha2V1cDwvdGV4dD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8TWVudVxuICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgaXRlbXM9e3dha2V1cHN9XG4gICAgICAgICAgICBzZWxlY3RlZD17aW5kZXgoKX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRJbmRleH1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgICAgaXRlbUhlaWdodD17Mn1cbiAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICAgIG9uU3VibWl0PXsodykgPT4gb25DYW5jZWwodyl9XG4gICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyh3LCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57YFx1MjNGMCAke3cuaWR9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2NvdW50ZG93bih3LmF0KX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICR7bmV3IERhdGUody5hdCkudG9Mb2NhbGVUaW1lU3RyaW5nKCl9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxLCBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57JyAgICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogRkdfU09GVCB9fT57dy5ub3RlLnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZnVuY3Rpb24gbWNwU3RhdHVzKHN0YXR1cykge1xuICBjb25zdCBwYWxldHRlID0ge1xuICAgIGNvbm5lY3RlZDogeyBpY29uOiAnXHUyNUFBJywgY29sb3I6IGFjY2VudCgpIH0sXG4gICAgY29ubmVjdGluZzogeyBpY29uOiAnXHUyNUNDJywgY29sb3I6ICcjZmJiZjI0JyB9LFxuICAgIGVycm9yOiB7IGljb246ICdcdTI3MTcnLCBjb2xvcjogUkVEIH0sXG4gICAgZGlzYWJsZWQ6IHsgaWNvbjogJ1x1MjVBQicsIGNvbG9yOiBNVVRFRCB9LFxuICAgIGlkbGU6IHsgaWNvbjogJ1x1MjVBQicsIGNvbG9yOiBNVVRFRCB9LFxuICB9XG4gIHJldHVybiBwYWxldHRlW3N0YXR1c10gfHwgcGFsZXR0ZS5pZGxlXG59XG5cbmZ1bmN0aW9uIEZvcm1GaWVsZCh7IGxhYmVsLCBhY3RpdmUsIGNoaWxkcmVuIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+e2xhYmVsfTwvdGV4dD5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gTWNwU2VydmVyRm9ybSh7IGZvY3VzZWQsIHNlcnZlciwgb25TYXZlLCBvbkludmFsaWQsIG9uQ2FuY2VsIH0pIHtcbiAgY29uc3QgaW5pdGlhbCA9IHNlcnZlciA/IHBhcnNlU2VydmVyU3BlYyhzZXJ2ZXIuY29tbWFuZCkgOiBudWxsXG4gIGNvbnN0IGVkaXRpbmcgPSAhIXNlcnZlclxuICBjb25zdCBbbmFtZSwgc2V0TmFtZV0gPSBjcmVhdGVTaWduYWwoc2VydmVyPy5uYW1lIHx8ICcnKVxuICBjb25zdCBbc2NvcGUsIHNldFNjb3BlXSA9IGNyZWF0ZVNpZ25hbChzZXJ2ZXI/LnNjb3BlIHx8ICdnbG9iYWwnKVxuICBjb25zdCBbdHJhbnNwb3J0LCBzZXRUcmFuc3BvcnRdID0gY3JlYXRlU2lnbmFsKGluaXRpYWw/LnR5cGUgfHwgJ3N0ZGlvJylcbiAgY29uc3QgW3RhcmdldCwgc2V0VGFyZ2V0XSA9IGNyZWF0ZVNpZ25hbChpbml0aWFsPy50eXBlID09PSAnaHR0cCcgPyBpbml0aWFsLnVybCA6IHNlcnZlcj8uY29tbWFuZCB8fCAnJylcbiAgY29uc3QgaW5pdGlhbEhlYWRlcnMgPSBpbml0aWFsPy50eXBlID09PSAnaHR0cCdcbiAgICA/IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3Qua2V5cyhpbml0aWFsLmhlYWRlcnMpLm1hcCgobmFtZSkgPT4gW25hbWUsIFJFREFDVEVEX0hFQURFUl0pKVxuICAgIDoge31cbiAgY29uc3QgW2hlYWRlcnMsIHNldEhlYWRlcnNdID0gY3JlYXRlU2lnbmFsKGZvcm1hdEh0dHBTZXJ2ZXJTcGVjKCcnLCBpbml0aWFsSGVhZGVycykudHJpbSgpKVxuXG4gIGNvbnN0IGZtID0gdXNlRm9jdXMoeyBpbml0aWFsOiBlZGl0aW5nID8gJ3RyYW5zcG9ydCcgOiAnbmFtZScgfSlcbiAgaWYgKCFlZGl0aW5nKSB7XG4gICAgZm0uaXRlbSgnbmFtZScpXG4gICAgZm0uaXRlbSgnc2NvcGUnKVxuICB9XG4gIGZtLml0ZW0oJ3RyYW5zcG9ydCcpXG4gIGZtLml0ZW0oJ3RhcmdldCcpXG4gIGlmICh0cmFuc3BvcnQoKSA9PT0gJ2h0dHAnKSBmbS5pdGVtKCdoZWFkZXJzJylcbiAgZm0uaXRlbSgnc2F2ZScpXG4gIGZtLml0ZW0oJ2NhbmNlbCcpXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DYW5jZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgaHR0cCA9IHRyYW5zcG9ydCgpID09PSAnaHR0cCdcblxuICBjb25zdCBzdWJtaXQgPSAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmVyTmFtZSA9IG5hbWUoKS50cmltKClcbiAgICBjb25zdCB2YWx1ZSA9IHRhcmdldCgpLnRyaW0oKVxuICAgIGlmICghc2VydmVyTmFtZSB8fCAvXFxzLy50ZXN0KHNlcnZlck5hbWUpKSByZXR1cm4gb25JbnZhbGlkKCduYW1lIGlzIHJlcXVpcmVkIGFuZCBjYW5ub3QgY29udGFpbiBzcGFjZXMnKVxuICAgIGlmICghdmFsdWUpIHJldHVybiBvbkludmFsaWQoaHR0cCA/ICd1cmwgaXMgcmVxdWlyZWQnIDogJ2NvbW1hbmQgaXMgcmVxdWlyZWQnKVxuICAgIGlmIChodHRwICYmICEvXmh0dHBzPzpcXC9cXC8vLnRlc3QodmFsdWUpKSByZXR1cm4gb25JbnZhbGlkKCd1cmwgbXVzdCBzdGFydCB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly8nKVxuICAgIGlmICghaHR0cCAmJiAvXmh0dHBzPzpcXC9cXC8vLnRlc3QodmFsdWUpKSByZXR1cm4gb25JbnZhbGlkKCdhIHN0ZGlvIGNvbW1hbmQgY2Fubm90IHN0YXJ0IHdpdGggYSB1cmw7IHBpY2sgdGhlIGh0dHAgdHJhbnNwb3J0JylcbiAgICBjb25zdCBleHRyYSA9IGhlYWRlcnMoKS50cmltKClcbiAgICBsZXQgc3BlYyA9IGh0dHAgJiYgZXh0cmEgPyBgJHt2YWx1ZX0gJHtleHRyYX1gIDogdmFsdWVcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VTZXJ2ZXJTcGVjKHNwZWMpXG4gICAgICBpZiAocGFyc2VkLnR5cGUgPT09ICdodHRwJyAmJiBpbml0aWFsPy50eXBlID09PSAnaHR0cCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBbaGVhZGVyLCBoZWFkZXJWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyc2VkLmhlYWRlcnMpKSB7XG4gICAgICAgICAgaWYgKGhlYWRlclZhbHVlID09PSBSRURBQ1RFRF9IRUFERVIgJiYgaW5pdGlhbC5oZWFkZXJzW2hlYWRlcl0gIT09IHVuZGVmaW5lZCkgcGFyc2VkLmhlYWRlcnNbaGVhZGVyXSA9IGluaXRpYWwuaGVhZGVyc1toZWFkZXJdXG4gICAgICAgIH1cbiAgICAgICAgc3BlYyA9IGZvcm1hdEh0dHBTZXJ2ZXJTcGVjKHBhcnNlZC51cmwsIHBhcnNlZC5oZWFkZXJzKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIG9uSW52YWxpZChlcnIubWVzc2FnZSlcbiAgICB9XG4gICAgb25TYXZlKHNlcnZlck5hbWUsIHNwZWMsIHNjb3BlKCkpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIHshZWRpdGluZyAmJiAoXG4gICAgICAgIDxGb3JtRmllbGQgbGFiZWw9XCJuYW1lXCIgYWN0aXZlPXtmbS5pcygnbmFtZScpfT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICA8VGV4dElucHV0IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ25hbWUnKX0gcGxhY2Vob2xkZXI9XCJsaW5lYXJcIiBvbkNoYW5nZT17c2V0TmFtZX0gLz5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICApfVxuICAgICAgeyFlZGl0aW5nICYmIChcbiAgICAgICAgPEZvcm1GaWVsZCBsYWJlbD1cInNjb3BlXCIgYWN0aXZlPXtmbS5pcygnc2NvcGUnKX0+XG4gICAgICAgICAgPFJhZGlvIG9wdGlvbnM9e1snZ2xvYmFsJywgJ3Byb2plY3QnXX0gc2VsZWN0ZWQ9e3Njb3BlKCl9IG9uQ2hhbmdlPXtzZXRTY29wZX0gZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygnc2NvcGUnKX0gLz5cbiAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICApfVxuICAgICAgPEZvcm1GaWVsZCBsYWJlbD1cInRyYW5zcG9ydFwiIGFjdGl2ZT17Zm0uaXMoJ3RyYW5zcG9ydCcpfT5cbiAgICAgICAgPFJhZGlvIG9wdGlvbnM9e1snc3RkaW8nLCAnaHR0cCddfSBzZWxlY3RlZD17dHJhbnNwb3J0KCl9IG9uQ2hhbmdlPXtzZXRUcmFuc3BvcnR9IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ3RyYW5zcG9ydCcpfSAvPlxuICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICA8Rm9ybUZpZWxkIGxhYmVsPXtodHRwID8gJ3VybCcgOiAnY29tbWFuZCd9IGFjdGl2ZT17Zm0uaXMoJ3RhcmdldCcpfT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ3RhcmdldCcpfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2h0dHAgPyAnaHR0cHM6Ly9tY3AubGluZWFyLmFwcC9tY3AnIDogJ25weCAteSBAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2VydmVyLWZpbGVzeXN0ZW0gL3RtcCd9XG4gICAgICAgICAgICBpbml0aWFsVmFsdWU9e3RhcmdldCgpfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3NldFRhcmdldH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAge2h0dHAgJiYgKFxuICAgICAgICA8Rm9ybUZpZWxkIGxhYmVsPVwiaGVhZGVycyAgb3B0aW9uYWxcIiBhY3RpdmU9e2ZtLmlzKCdoZWFkZXJzJyl9PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgIDxUZXh0SW5wdXQgZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygnaGVhZGVycycpfSBwbGFjZWhvbGRlcj0nQXV0aG9yaXphdGlvbj1cIkJlYXJlciAuLi5cIiBYLVRlYW09XCJjb3JlXCInIGluaXRpYWxWYWx1ZT17aGVhZGVycygpfSBvbkNoYW5nZT17c2V0SGVhZGVyc30gLz5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICApfVxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPEJ1dHRvbiBsYWJlbD17ZWRpdGluZyA/ICdzYXZlJyA6ICdhZGQnfSBvblByZXNzPXtzdWJtaXR9IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ3NhdmUnKX0gLz5cbiAgICAgICAgPHRleHQ+ICA8L3RleHQ+XG4gICAgICAgIDxCdXR0b24gbGFiZWw9XCJjYW5jZWxcIiBvblByZXNzPXtvbkNhbmNlbH0gZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygnY2FuY2VsJyl9IHZhcmlhbnQ9XCJkaW1cIiAvPlxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1jcFBhbmVsKHsgc2VydmVycywgZm9jdXNlZCwgb25Ub2dnbGUsIG9uUmVjb25uZWN0LCBvblJlbW92ZSwgb25BZGQsIG9uRWRpdCwgb25JbnZhbGlkLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2Zvcm0sIHNldEZvcm1dID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtpbmRleCwgc2V0SW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFt2aWV3aW5nLCBzZXRWaWV3aW5nXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCAmJiAhZm9ybSgpLCAoKSA9PiAodmlld2luZygpID8gc2V0Vmlld2luZyhudWxsKSA6IG9uQ2xvc2UoKSkpXG5cbiAgY29uc3Qgc2VsZWN0ZWQgPSAoKSA9PiBzZXJ2ZXJzW01hdGgubWluKGluZGV4KCksIHNlcnZlcnMubGVuZ3RoIC0gMSldIHx8IG51bGxcbiAgY29uc3Qgdmlld2VkID0gKCkgPT4gc2VydmVycy5maW5kKChzKSA9PiBzLm5hbWUgPT09IHZpZXdpbmcoKSkgfHwgbnVsbFxuXG4gIGlmICh2aWV3aW5nKCkgJiYgdmlld2VkKCkpIHtcbiAgICBjb25zdCBzZXJ2ZXIgPSB2aWV3ZWQoKVxuICAgIGNvbnN0IGRlc2NyaWJlID0gKHQpID0+IHQuZGVzY3JpcHRpb24ucmVwbGFjZSgvXlxcW1teXFxdXSpcXF1cXHMqLywgJycpLnRyaW0oKSB8fCAnbm8gZGVzY3JpcHRpb24nXG4gICAgcmV0dXJuIChcbiAgICAgIDxQYW5lbEZyYW1lXG4gICAgICAgIHRpdGxlPXtgTUNQIHNlcnZlcnMgICR7c2VydmVyLm5hbWV9ICAke3NlcnZlci50b29scy5sZW5ndGh9ICR7c2VydmVyLnRvb2xzLmxlbmd0aCA9PT0gMSA/ICd0b29sJyA6ICd0b29scyd9YH1cbiAgICAgICAgaGludD1cImovayBvciBcdTIxOTFcdTIxOTMgdG8gc2Nyb2xsICBlc2MgYmFjayB0byBzZXJ2ZXJzXCJcbiAgICAgICAgZnVsbFNjcmVlblxuICAgICAgPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWFyZ2luVG9wOiAxLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICB7c2VydmVyLnRvb2xzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyB0b29scyByZXBvcnRlZCAgaXMgdGhlIHNlcnZlciBjb25uZWN0ZWQ/PC90ZXh0PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8U2Nyb2xsQm94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IGZvY3VzZWQ9e2ZvY3VzZWR9IHNjcm9sbGJhcj5cbiAgICAgICAgICAgICAge3NlcnZlci50b29scy5tYXAoKHQsIGkpID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IGtleT17dC5uYW1lfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiBpID09PSAwID8gMCA6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e3QubmFtZX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Rlc2NyaWJlKHQpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvUGFuZWxGcmFtZT5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lXG4gICAgICB0aXRsZT1cIk1DUCBzZXJ2ZXJzXCJcbiAgICAgIGhpbnQ9e2Zvcm0oKVxuICAgICAgICA/ICd0YWIgbW92ZXMgYmV0d2VlbiBmaWVsZHMgIGovayArIHNwYWNlIHBpY2tzIGEgcmFkaW8gb3B0aW9uICBlc2MgY2FuY2VscydcbiAgICAgICAgOiAnZW50ZXIgZW5hYmxlL2Rpc2FibGUgIHQgdG9vbHMgIGUgZWRpdCAgciByZWNvbm5lY3QgIGEgYWRkICBjdHJsK3ggcmVtb3ZlICh0d2ljZSkgIGVzYyBjbG9zZSd9XG4gICAgICBmdWxsU2NyZWVuXG4gICAgPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIG1hcmdpblRvcDogMSwgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIHtmb3JtKCkgPyAoXG4gICAgICAgICAgPE1jcFNlcnZlckZvcm1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBzZXJ2ZXI9e2Zvcm0oKSA9PT0gJ2FkZCcgPyBudWxsIDogZm9ybSgpfVxuICAgICAgICAgICAgb25TYXZlPXsobmFtZSwgc3BlYywgc2NvcGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGZvcm0oKSA9PT0gJ2FkZCcpIG9uQWRkKG5hbWUsIHNwZWMsIHNjb3BlKVxuICAgICAgICAgICAgICBlbHNlIG9uRWRpdChuYW1lLCBzcGVjKVxuICAgICAgICAgICAgICBzZXRGb3JtKG51bGwpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25JbnZhbGlkPXtvbkludmFsaWR9XG4gICAgICAgICAgICBvbkNhbmNlbD17KCkgPT4gc2V0Rm9ybShudWxsKX1cbiAgICAgICAgICAvPlxuICAgICAgICApIDogc2VydmVycy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIE1DUCBzZXJ2ZXJzIGNvbmZpZ3VyZWQgIHByZXNzIGEgdG8gYWRkIG9uZTwvdGV4dD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8TWVudVxuICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgaXRlbXM9e3NlcnZlcnN9XG4gICAgICAgICAgICBzZWxlY3RlZD17aW5kZXgoKX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRJbmRleH1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBtYXhWaXNpYmxlPXs2fVxuICAgICAgICAgICAgdmltS2V5c1xuICAgICAgICAgICAgaXRlbUhlaWdodD17Mn1cbiAgICAgICAgICAgIG9uU3VibWl0PXsocykgPT4gb25Ub2dnbGUocy5uYW1lKX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgcmVuZGVySXRlbT17KHMsIHsgYWN0aXZlIH0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3QgPSBtY3BTdGF0dXMocy5zdGF0dXMpXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzdC5jb2xvciB9fT57c3QuaWNvbn08L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHIH19PntgICR7cy5uYW1lLnBhZEVuZChNYXRoLm1heCgxNCwgcy5uYW1lLmxlbmd0aCArIDEpKX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogcy5zdGF0dXMgPT09ICdlcnJvcicgPyBSRUQgOiBNVVRFRCB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtzLnN0YXR1cyA9PT0gJ2Vycm9yJyA/IHMuZXJyb3IgOiBzLnN0YXR1cyA9PT0gJ2Nvbm5lY3RlZCcgPyBgJHtzLnRvb2xDb3VudH0gdG9vbHNgIDogcy5zdGF0dXN9XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dD57JyAgICAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IE1VVEVEIH19PntzaG9ydGVuSG9tZShyZWRhY3RTZXJ2ZXJTcGVjKHMuY29tbWFuZCkpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgJHtzLnNjb3BlID09PSAncHJvamVjdCcgPyAncHJvamVjdCcgOiAnZ2xvYmFsJ31gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICAgIHshZm9ybSgpICYmIChcbiAgICAgICAgPE1jcEtleXNcbiAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgIG9uS2V5PXsoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzID0gc2VsZWN0ZWQoKVxuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2EnKSBzZXRGb3JtKCdhZGQnKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICdlJykgc2V0Rm9ybShzKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICdyJykgb25SZWNvbm5lY3Qocy5uYW1lKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICdyZW1vdmUnKSBvblJlbW92ZShzLm5hbWUpXG4gICAgICAgICAgICBlbHNlIGlmIChzICYmIGtleSA9PT0gJ3QnKSBzZXRWaWV3aW5nKHMubmFtZSlcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZnVuY3Rpb24gTWNwS2V5cyh7IGZvY3VzZWQsIG9uS2V5IH0pIHtcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4Jykge1xuICAgICAgb25LZXkoJ3JlbW92ZScpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICghZXZlbnQuY3RybCAmJiBbJ2EnLCAnZScsICdyJywgJ3QnXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICBvbktleShldmVudC5rZXkpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG51bGxcbn1cbiIsICJpbXBvcnQgeyBlYXNlLCBsaW5lYXIsIHVzZUFuaW1hdGVkIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuXG5mdW5jdGlvbiB0b1JnYihjb2xvcikge1xuICBpZiAoY29sb3I/LnN0YXJ0c1dpdGgoJyMnKSAmJiBjb2xvci5sZW5ndGggPT09IDcpIHtcbiAgICByZXR1cm4gW1xuICAgICAgcGFyc2VJbnQoY29sb3Iuc2xpY2UoMSwgMyksIDE2KSxcbiAgICAgIHBhcnNlSW50KGNvbG9yLnNsaWNlKDMsIDUpLCAxNiksXG4gICAgICBwYXJzZUludChjb2xvci5zbGljZSg1LCA3KSwgMTYpLFxuICAgIF1cbiAgfVxuICByZXR1cm4gWzEyNywgMTI3LCAxMjddXG59XG5cbmZ1bmN0aW9uIG1peENvbG9yKGZyb20sIHRvLCBhbW91bnQpIHtcbiAgaWYgKGZyb20gPT09IHRvKSByZXR1cm4gZnJvbVxuICBjb25zdCBhID0gdG9SZ2IoZnJvbSlcbiAgY29uc3QgYiA9IHRvUmdiKHRvKVxuICBjb25zdCBjaGFubmVscyA9IGEubWFwKCh2YWx1ZSwgaSkgPT4gTWF0aC5yb3VuZCh2YWx1ZSArIChiW2ldIC0gdmFsdWUpICogYW1vdW50KSlcbiAgcmV0dXJuIGAjJHtjaGFubmVscy5tYXAoKHZhbHVlKSA9PiB2YWx1ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyl9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gQW5pbWF0ZWRWYWx1ZSh7IHZhbHVlLCBpbml0aWFsID0gdmFsdWUsIGR1cmF0aW9uID0gMTAwMCwgY29sb3IsIGhpZ2hsaWdodCwgYmFja2dyb3VuZCwgZm9ybWF0ID0gU3RyaW5nIH0pIHtcbiAgY29uc3QgZGlzcGxheWVkID0gdXNlQW5pbWF0ZWQoaW5pdGlhbCwgZWFzZShkdXJhdGlvbikpXG4gIGNvbnN0IGdsb3cgPSB1c2VBbmltYXRlZCgwLCBlYXNlKGR1cmF0aW9uLCBsaW5lYXIpKVxuXG4gIGlmICh2YWx1ZSAhPT0gZGlzcGxheWVkLl9hbmltLnRhcmdldCkge1xuICAgIGRpc3BsYXllZC5zZXQodmFsdWUpXG4gICAgZ2xvdy5zbmFwKDEpXG4gICAgZ2xvdy5zZXQoMClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IG1peENvbG9yKGNvbG9yLCBoaWdobGlnaHQsIGdsb3coKSksIGJnOiBiYWNrZ3JvdW5kIH19PlxuICAgICAge2Zvcm1hdChkaXNwbGF5ZWQoKSl9XG4gICAgPC90ZXh0PlxuICApXG59XG4iLCAiY29uc3QgTEVWRUxTID0gWycgJywgJ1x1MjU4RicsICdcdTI1OEUnLCAnXHUyNThEJywgJ1x1MjU4QycsICdcdTI1OEInLCAnXHUyNThBJywgJ1x1MjU4OScsICdcdTI1ODgnXVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGV4dEJhcihwZXJjZW50LCB3aWR0aCA9IDQpIHtcbiAgY29uc3QgZWlnaHRocyA9IE1hdGgucm91bmQoTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBwZXJjZW50KSkgKiB3aWR0aCAqIDggLyAxMDApXG4gIGNvbnN0IGZ1bGwgPSBNYXRoLmZsb29yKGVpZ2h0aHMgLyA4KVxuICBjb25zdCBwYXJ0aWFsID0gZWlnaHRocyAlIDhcbiAgcmV0dXJuICdcdTI1ODgnLnJlcGVhdChmdWxsKSArIChwYXJ0aWFsID8gTEVWRUxTW3BhcnRpYWxdIDogJycpICsgJyAnLnJlcGVhdCh3aWR0aCAtIGZ1bGwgLSAocGFydGlhbCA/IDEgOiAwKSlcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gd29ya3NwYWNlR3JvdXBzKHJvd3MpIHtcbiAgY29uc3QgZ3JvdXBzID0gbmV3IE1hcCgpXG4gIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICBpZiAoIXJvdy5uYW1lPy50cmltKCkpIGNvbnRpbnVlXG4gICAgaWYgKCFncm91cHMuaGFzKHJvdy5jd2QpKSBncm91cHMuc2V0KHJvdy5jd2QsIFtdKVxuICAgIGdyb3Vwcy5nZXQocm93LmN3ZCkucHVzaChyb3cpXG4gIH1cbiAgcmV0dXJuIFsuLi5ncm91cHNdLnNvcnQoKFthXSwgW2JdKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpLm1hcCgoW2N3ZCwgc2Vzc2lvbnNdKSA9PiAoeyBjd2QsIHNlc3Npb25zIH0pKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya3NwYWNlU2VsZWN0aW9uKHJvd3MsIHNlbGVjdGVkLCBwcmV2aW91cyA9IFtdKSB7XG4gIGlmIChyb3dzLnNvbWUoKHJvdykgPT4gcm93LmlkID09PSBzZWxlY3RlZCkpIHJldHVybiBzZWxlY3RlZFxuICBjb25zdCBpbmRleCA9IE1hdGgubWF4KDAsIHByZXZpb3VzLmZpbmRJbmRleCgocm93KSA9PiByb3cuaWQgPT09IHNlbGVjdGVkKSlcbiAgcmV0dXJuIHJvd3NbTWF0aC5taW4oaW5kZXgsIHJvd3MubGVuZ3RoIC0gMSldPy5pZCA/PyBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3Jrc3BhY2VOYXZpZ2F0ZShyb3dzLCBzZWxlY3RlZCwgZXZlbnQsIGhlaWdodCkge1xuICBjb25zdCBpbmRleCA9IE1hdGgubWF4KDAsIHJvd3MuZmluZEluZGV4KChyb3cpID0+IHJvdy5pZCA9PT0gc2VsZWN0ZWQpKVxuICBjb25zdCBoYWxmID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihoZWlnaHQgLyA2KSlcbiAgbGV0IG5leHRcbiAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnZCcpIG5leHQgPSBpbmRleCArIGhhbGZcbiAgZWxzZSBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd1JykgbmV4dCA9IGluZGV4IC0gaGFsZlxuICBlbHNlIGlmIChldmVudC5jdHJsIHx8IGV2ZW50Lm1ldGEgfHwgZXZlbnQuYWx0KSByZXR1cm4gdW5kZWZpbmVkXG4gIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2onIHx8IGV2ZW50LmtleSA9PT0gJ2Rvd24nKSBuZXh0ID0gaW5kZXggKyAxXG4gIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2snIHx8IGV2ZW50LmtleSA9PT0gJ3VwJykgbmV4dCA9IGluZGV4IC0gMVxuICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdnJykgbmV4dCA9IDBcbiAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRycpIG5leHQgPSByb3dzLmxlbmd0aCAtIDFcbiAgZWxzZSByZXR1cm4gdW5kZWZpbmVkXG4gIHJldHVybiByb3dzW01hdGgubWF4KDAsIE1hdGgubWluKHJvd3MubGVuZ3RoIC0gMSwgbmV4dCkpXT8uaWQgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlXb3Jrc3BhY2VDb21wb3Nlcih7IHRleHQsIGF0dGFjaG1lbnRzLCBkaWN0YXRpb24sIGNhcHR1cmUsIHBlbmRpbmcsIGhpc3RvcnksIGNvbXBsZXRpb24sIGNvbW1hbmQsIHF1ZXN0aW9uLCBzdGVlciwgcXVldWVkLCBleHBlZGl0ZWQgfSkge1xuICByZXR1cm4gdGV4dCA9PT0gJycgJiYgYXR0YWNobWVudHMgPT09IDAgJiYgZGljdGF0aW9uID09PSAnaWRsZScgJiYgY2FwdHVyZSA9PT0gJ2lkbGUnICYmICFwZW5kaW5nICYmIGhpc3RvcnkgPCAwICYmICFjb21wbGV0aW9uICYmICFjb21tYW5kICYmICFxdWVzdGlvbiAmJiAhc3RlZXIgJiYgcXVldWVkID09PSAwICYmIGV4cGVkaXRlZCA9PT0gMFxufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya3NwYWNlQWN0aW9uKHJvdykge1xuICByZXR1cm4gcm93Py5zdGF0dXMgPT09ICdidXN5JyA/ICdpbnRlcnJ1cHQnIDogcm93Py5zdGF0dXMgPT09ICdpZGxlJyA/ICdkZW1vdGUnIDogbnVsbFxufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZVNpZGViYXIgfSBmcm9tICcuL3dvcmtzcGFjZS1zaWRlYmFyLmpzeCdcbmltcG9ydCB7IHdvcmtzcGFjZUdyb3Vwcywgd29ya3NwYWNlU2VsZWN0aW9uLCB3b3Jrc3BhY2VOYXZpZ2F0ZSwgd29ya3NwYWNlQWN0aW9uLCBlbXB0eVdvcmtzcGFjZUNvbXBvc2VyIH0gZnJvbSAnLi93b3Jrc3BhY2Utc2lkZWJhci5qcydcbmltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcydcbmltcG9ydCB7IHBhcnNlRnJvbnRtYXR0ZXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL3NraWxscy5qcydcbmltcG9ydCB7IGV4cGFuZENvbW1hbmQsIHBhcnNlQ29tbWFuZEFyZ3VtZW50cyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29tbWFuZHMuanMnXG5pbXBvcnQgeyBjb21tYW5kQXQsIHJlcGxhY2VDb21tYW5kLCBjb21tYW5kRmllbGRzIH0gZnJvbSAnLi9jb21wb3Nlci1jb21tYW5kcy5qcydcbmltcG9ydCB7IENvbW1hbmRGb3JtIH0gZnJvbSAnLi9jb21tYW5kLWZvcm0uanN4J1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ25vZGU6b3MnXG5pbXBvcnQgeyBjcmVhdGVEaWN0YXRpb24gfSBmcm9tICcuLi9kaWN0YXRpb24uanMnXG5pbXBvcnQgeyByZWFkQ2xpcGJvYXJkSW1hZ2UgfSBmcm9tICcuLi9jbGlwYm9hcmQuanMnXG5pbXBvcnQgeyBjcmVhdGVDbGlwYm9hcmRJbnB1dCB9IGZyb20gJy4vY2xpcGJvYXJkLWlucHV0LmpzJ1xuaW1wb3J0IHsgY3JlYXRlRGljdGF0aW9uSW5wdXQgfSBmcm9tICcuL2RpY3RhdGlvbi1pbnB1dC5qcydcbmltcG9ydCB7IGNyZWF0ZVNjcmVlbkNhcHR1cmVJbnB1dCB9IGZyb20gJy4vc2NyZWVuLWNhcHR1cmUtaW5wdXQuanMnXG5pbXBvcnQgeyBjYXB0dXJlUmVnaW9uIH0gZnJvbSAnLi4vc2NyZWVuLWNhcHR1cmUuanMnXG5pbXBvcnQgeyBjcmVhdGVDb21wb3NlckZpbGVzIH0gZnJvbSAnLi9jb21wb3Nlci1maWxlcy5qcydcbmltcG9ydCB7IGRpY3RhdGlvbkluZGljYXRvciwgYXBwZW5kTGV2ZWwgfSBmcm9tICcuL2RpY3RhdGlvbi1pbmRpY2F0b3IuanMnXG5pbXBvcnQgeyBjcmVhdGVTaWduYWwsIHVzZUludGVydmFsLCBvbkNsZWFudXAsIE1lbnUsIFByb2dyZXNzQmFyLCBTY3JvbGxCb3gsIFNoaW1tZXIsIFNwaW5uZXIsIFRleHRBcmVhLCB1c2VGb2N1cywgdXNlRm9jdXNUcmFwLCB1c2VGcmFtZVN0YXRzLCB1c2VIaXRUZXN0LCB1c2VJbnB1dCwgdXNlTGF5b3V0LCB1c2VNb3VzZSwgdXNlUmVzaXplLCB1c2VTZWxlY3Rpb24sIHVzZVRvYXN0IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgbWFrZUV2ZW50IH0gZnJvbSAncGljb2NvZGUtY29yZS9ldmVudHMuanMnXG5pbXBvcnQgeyBsaXN0U2Vzc2lvbnMsIGRlbGV0ZVNlc3Npb24sIGRlbGV0ZVByb2plY3REYXRhIH0gZnJvbSAncGljb2NvZGUtY29yZS9zZXNzaW9uLmpzJ1xuaW1wb3J0IHsgdXNlckVudHJpZXMsIHJld2luZFN0YXRzIH0gZnJvbSAncGljb2NvZGUtY29yZS9kZXJpdmUuanMnXG5pbXBvcnQgeyBsb2FkUHJvamVjdFByb21wdHMsIGxvYWRHbG9iYWxQcm9tcHRzIH0gZnJvbSAncGljb2NvZGUtY29yZS9oaXN0b3J5LmpzJ1xuaW1wb3J0IHsgaW1wbGljaXRSZXdpbmRUYXJnZXQgfSBmcm9tICdwaWNvY29kZS1jb3JlL3Jld2luZC5qcydcbmltcG9ydCB7IGNoZWNrRm9yVXBkYXRlLCBmZXRjaExhdGVzdFZlcnNpb24sIG5ld2VyVmVyc2lvbiwgaXNEZXZJbnN0YWxsLCBydW5VcGRhdGUgfSBmcm9tICdwaWNvY29kZS1jb3JlL3VwZGF0ZS5qcydcbmltcG9ydCB7IFNURUVSX1JPTEVTLCBzdGVlcmFibGVUcmFuc2NyaXB0IH0gZnJvbSAncGljb2NvZGUtY29yZS9zdGVlci5qcydcbmltcG9ydCB7IHdyaXRlQ29uZmlnIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb25maWcuanMnXG5pbXBvcnQgeyBvcGVuYWlTdGF0dXMgfSBmcm9tICdwaWNvY29kZS1jb3JlL29wZW5haS1hdXRoLmpzJ1xuaW1wb3J0IHsgRUZGT1JUX0xFVkVMUywgU1BFRURfTEVWRUxTLCBTRVNTSU9OX0NPTE9SUyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29udHJvbGxlci5qcydcbmltcG9ydCB7IGFnZW50VHJhbnNjcmlwdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYWdlbnQtdHJhbnNjcmlwdC5qcydcbmltcG9ydCB7IGZ1enp5U2NvcmUgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Z1enp5LmpzJ1xuaW1wb3J0IHsgY29tcGxldGlvbkNvbnRleHQsIGFwcGx5Q29tcGxldGlvbiB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29tcGxldGlvbi5qcydcbmltcG9ydCB7IGV4dHJhY3RJbWFnZVBhdGhzLCBwbGFjZWhvbGRlcml6ZUltYWdlUGF0aHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2F0dGFjaG1lbnRzLmpzJ1xuaW1wb3J0IHsgbGlzdEZpbGVzIH0gZnJvbSAncGljb2NvZGUtY29yZS9maWxlcy5qcydcbmltcG9ydCB7IGxpc3RXb3JrdHJlZXMgfSBmcm9tICdwaWNvY29kZS1jb3JlL3dvcmt0cmVlcy5qcydcbmltcG9ydCB7IG93bmVyUm9vdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvcGF0aHMuanMnXG5pbXBvcnQgeyBoaWdobGlnaHRWZXJzaW9uIH0gZnJvbSAnLi9oaWdobGlnaHQuanMnXG5pbXBvcnQgeyBjb21wYWN0TnVtYmVyIH0gZnJvbSAncGljb2NvZGUtY29yZS9mb3JtYXQuanMnXG5pbXBvcnQgeyBjb250ZXh0QmFyIH0gZnJvbSAnLi9jb250ZXh0LWJhci5qcydcbmltcG9ydCB7IEFuaW1hdGVkVmFsdWUgfSBmcm9tICcuL2FuaW1hdGVkLXZhbHVlLmpzeCdcbmltcG9ydCB7IERlbGliZXJhdGlvbkV4Y2hhbmdlLCBNZXNzYWdlIH0gZnJvbSAnLi90cmFuc2NyaXB0LmpzeCdcbmltcG9ydCB7IENvbnZlcnNhdGlvblNlYXJjaEJhciwgQ29udmVyc2F0aW9uU2Nyb2xsQW5jaG9yLCBDb252ZXJzYXRpb25TZWFyY2hNZXNzYWdlLCBjcmVhdGVDb252ZXJzYXRpb25TZWFyY2ggfSBmcm9tICcuL2NvbnZlcnNhdGlvbi1zZWFyY2gtdmlldy5qc3gnXG5pbXBvcnQgeyBjb21wYWN0VHJhbnNjcmlwdFJ1bnMsIHRyYW5zY3JpcHRXaW5kb3cgfSBmcm9tICcuL3RyYW5zY3JpcHQtd2luZG93LmpzJ1xuaW1wb3J0IHsgUXVlc3Rpb25Gb3JtIH0gZnJvbSAnLi9xdWVzdGlvbi1mb3JtLmpzeCdcbmltcG9ydCB7IEVtcHR5U3RhdGUgfSBmcm9tICcuL2VtcHR5LXN0YXRlLmpzeCdcbmltcG9ydCB7IEhlbHAgfSBmcm9tICcuL2hlbHAuanN4J1xuaW1wb3J0IHsgTW9kZWxQYW5lbCwgRWZmb3J0UGFuZWwsIFNwZWVkUGFuZWwsIFRoZW1lUGFuZWwsIENvbmZpZ1BhbmVsLCBDb25maXJtUGFuZWwsIEhpc3RvcnlQYW5lbCwgUmV3aW5kUGlja1BhbmVsLCBSZXdpbmRBY3Rpb25QYW5lbCwgUmVzdW1lUGFuZWwsIFByb2plY3RQYW5lbCwgTWNwUGFuZWwsIE1lbW9yeVBhbmVsLCBJbmZvTGlzdFBhbmVsLCBXYWtldXBzUGFuZWwsIENvbm5lY3RQYW5lbCwgdGltZUFnbyB9IGZyb20gJy4vcGFuZWxzLmpzeCdcbmltcG9ydCB7IGFjY2VudCwgc2V0QWNjZW50LCBzZXRQYWxldHRlLCBwYWxldHRlTmFtZSwgcGFsZXR0ZUxpc3QsIERFRkFVTFRfQUNDRU5ULCBGRywgRkdfU09GVCwgTVVURUQsIFBBTkVMX0JHLCBSRUQsIEdSRUVOLCBISUdITElHSFQgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5jb25zdCBDT01NQU5EUyA9IFtcbiAgeyBuYW1lOiAnbW9kZWwnLCBkZXNjOiAnU3dpdGNoIHRoZSBhY3RpdmUgbW9kZWwgZm9yIHRoaXMgc2Vzc2lvbicgfSxcbiAgeyBuYW1lOiAncmVmcmVzaC1tb2RlbHMnLCBkZXNjOiAnUmVmcmVzaCBhdmFpbGFibGUgbW9kZWxzIGZyb20gcHJvdmlkZXJzJyB9LFxuICB7IG5hbWU6ICdjb25uZWN0JywgZGVzYzogJ1NpZ24gaW4gd2l0aCBDaGF0R1BUIHRvIHVzZSBhIENvZGV4IHN1YnNjcmlwdGlvbicgfSxcbiAgeyBuYW1lOiAnZWZmb3J0JywgZGVzYzogJ1NldCB0aGUgdGhpbmtpbmcgZWZmb3J0IGZvciB0aGlzIHNlc3Npb24nIH0sXG4gIHsgbmFtZTogJ3NwZWVkJywgZGVzYzogJ1NwZWVkJyB9LFxuICB7IG5hbWU6ICdyZXN1bWUnLCBkZXNjOiAnUGljayB1cCBhIHByZXZpb3VzIHNlc3Npb24gd2hlcmUgeW91IGxlZnQgb2ZmJyB9LFxuICB7IG5hbWU6ICduZXcnLCBkZXNjOiAnU3RhcnQgYSBuZXcgc2Vzc2lvbiBpbiB0aGlzIHByb2plY3QnIH0sXG4gIHsgbmFtZTogJ2ZvcmsnLCBkZXNjOiAnRm9yayBjb252ZXJzYXRpb24nIH0sXG4gIHsgbmFtZTogJ2RlbGV0ZScsIGRlc2M6ICdQZXJtYW5lbnRseSBkZWxldGUgdGhlIGN1cnJlbnQgc2Vzc2lvbiBhbmQgc3RhcnQgZnJlc2gnIH0sXG4gIHsgbmFtZTogJ3Byb2plY3QnLCBkZXNjOiAnU3dpdGNoIHByb2plY3RzOiBqdW1wIHRvIGFub3RoZXIgcHJvamVjdCwgc2FtZSBhcyBjdHJsK3AnIH0sXG4gIHsgbmFtZTogJ2N3ZCcsIGRlc2M6ICdTaG93IHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBwcm9qZWN0IHJvb3QnIH0sXG4gIHsgbmFtZTogJ3NraWxscycsIGRlc2M6ICdMaXN0IGV2ZXJ5IHNraWxsOiBidWlsdGluLCBnbG9iYWwsIGFuZCBwcm9qZWN0JyB9LFxuICB7IG5hbWU6ICdjb21tYW5kcycsIGRlc2M6ICdMaXN0IGV2ZXJ5IGNvbW1hbmQ6IGJ1aWx0aW4sIGdsb2JhbCwgYW5kIHByb2plY3QnIH0sXG4gIHsgbmFtZTogJ2luaXQnLCBkZXNjOiAnQ3JlYXRlIG9yIGltcHJvdmUgcmVwb3NpdG9yeSBBR0VOVFMubWQgZ3VpZGFuY2UnIH0sXG4gIHsgbmFtZTogJ3Rvb2xzJywgZGVzYzogJ0xpc3QgYnVpbHRpbiBhbmQgdXNlci1kZWZpbmVkIHRvb2xzOyBNQ1AgdG9vbHMgbGl2ZSBpbiAvbWNwJyB9LFxuICB7IG5hbWU6ICdyZXdpbmQnLCBkZXNjOiAnUmVzdG9yZSB0aGUgY29udmVyc2F0aW9uIHRvIGEgcHJldmlvdXMgbWVzc2FnZScgfSxcbiAgeyBuYW1lOiAnc3RlZXInLCBkZXNjOiAnRWRpdCBvciBhZGQgY29udmVyc2F0aW9uIG1lc3NhZ2VzIHdpdGhvdXQgc2VuZGluZycgfSxcbiAgeyBuYW1lOiAnaGlzdG9yeScsIGRlc2M6ICdTZWFyY2ggcHJvbXB0cyB5b3UgcHJldmlvdXNseSBzZW50JyB9LFxuICB7IG5hbWU6ICdyZW5hbWUnLCBkZXNjOiAnTmFtZSB0aGlzIHNlc3Npb247IG9taXQgdGhlIG5hbWUgdG8gcmVzdG9yZSBpdHMgYXV0b21hdGljIHRpdGxlJyB9LFxuICB7IG5hbWU6ICdjb2xvcicsIGRlc2M6ICdDb2xvciB0aGlzIHNlc3Npb246IC9jb2xvciA8bmFtZSBvciAjaGV4PiwgL2NvbG9yIG5vbmUgdG8gY2xlYXInIH0sXG4gIHsgbmFtZTogJ3RoZW1lJywgZGVzYzogJ1BpY2sgYSBjb2xvciB0aGVtZTsgL3RoZW1lIDxuYW1lPiBhcHBsaWVzIG9uZSBkaXJlY3RseScgfSxcbiAgeyBuYW1lOiAnY29uZmlnJywgZGVzYzogJ0NvbmZpZ3VyZSBwaWNvIGRpc3BsYXkgYW5kIGJlaGF2aW9yJyB9LFxuICB7IG5hbWU6ICdtY3AnLCBkZXNjOiAnTWFuYWdlIE1DUCBzZXJ2ZXJzOiBhZGQsIHRvZ2dsZSwgcmVjb25uZWN0JyB9LFxuICB7IG5hbWU6ICdwYXJhbGxlbCcsIGRlc2M6ICdSdW4gYSB0YXNrIHdpdGggcGFyYWxsZWwgYWdlbnRzOiAvcGFyYWxsZWwgPHRhc2s+JyB9LFxuICB7IG5hbWU6ICdkZWxpYmVyYXRlJywgZGVzYzogJ0RlbGliZXJhdGUgb24gYSBkZWNpc2lvbjogL2RlbGliZXJhdGUgPGRlY2lzaW9uPicgfSxcbiAgeyBuYW1lOiAnd2FrZXVwcycsIGRlc2M6ICdWaWV3IGFuZCBjYW5jZWwgc2NoZWR1bGVkIHdha2UtdXBzJyB9LFxuICB7IG5hbWU6ICdtZW1vcnknLCBkZXNjOiAnQnJvd3NlIGFuZCBtYW5hZ2Ugc2F2ZWQgbWVtb3JpZXM6IHByb2plY3QgYW5kIGdsb2JhbCcgfSxcbiAgeyBuYW1lOiAnY29tcGFjdCcsIGRlc2M6ICdTdW1tYXJpemUgdGhlIGNvbnZlcnNhdGlvbiB0byBmcmVlIHRoZSBjb250ZXh0IHdpbmRvdycgfSxcbiAgeyBuYW1lOiAnY2xlYXInLCBkZXNjOiAnQ2xlYXIgdGhlIGNvbnZlcnNhdGlvbiBhbmQgZnJlZSB0aGUgY29udGV4dCB3aW5kb3cnIH0sXG4gIHsgbmFtZTogJ2Nvc3QnLCBkZXNjOiAnU2hvdyB0b2tlbiB1c2FnZSBhbmQgZXN0aW1hdGVkIGNvc3Qgc28gZmFyJyB9LFxuICB7IG5hbWU6ICdjb250ZXh0JywgZGVzYzogXCJTaG93IHdoYXQncyBpbiB0aGUgbW9kZWwncyBjb250ZXh0IGFuZCBob3cgYmlnIGVhY2ggcGllY2UgaXNcIiB9LFxuICB7IG5hbWU6ICdleHBvcnQnLCBkZXNjOiAnU2F2ZSB0aGUgY3VycmVudCBjb252ZXJzYXRpb24gdG8gYSBtYXJrZG93biBmaWxlJyB9LFxuICB7IG5hbWU6ICd1cGRhdGUnLCBkZXNjOiAnVXBkYXRlIHBpY28gdG8gdGhlIGxhdGVzdCByZWxlYXNlIGZyb20gbnBtJyB9LFxuICB7IG5hbWU6ICdoZWxwJywgZGVzYzogJ0xpc3QgZXZlcnkgY29tbWFuZCBhbmQgd2hhdCBpdCBkb2VzJyB9LFxuXVxuXG5jb25zdCBISVNUT1JZX1NDT1BFUyA9IFsnc2Vzc2lvbicsICdwcm9qZWN0JywgJ2V2ZXJ5d2hlcmUnXVxuY29uc3QgTUVNT1JZX1NDT1BFUyA9IFsnYWxsJywgJ3Byb2plY3QnLCAnZ2xvYmFsJ11cbmNvbnN0IFNIRUxMX1NUUklQX01BWCA9IDVcbmNvbnN0IEFHRU5UX1NUUklQX01BWCA9IDVcbmNvbnN0IFNUUklQX1NDUk9MTE9GRiA9IDFcblxuZnVuY3Rpb24gc3RyaXBXaW5kb3dTdGFydChjdXJyZW50LCB0YXJnZXQsIGxlbmd0aCwgc2l6ZSkge1xuICBjb25zdCBtYXggPSBNYXRoLm1heCgwLCBsZW5ndGggLSBzaXplKVxuICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGN1cnJlbnQsIG1heCkpXG4gIGlmICh0YXJnZXQgPCAwKSByZXR1cm4gc3RhcnRcbiAgaWYgKHRhcmdldCA8IHN0YXJ0ICsgU1RSSVBfU0NST0xMT0ZGKSByZXR1cm4gTWF0aC5tYXgoMCwgdGFyZ2V0IC0gU1RSSVBfU0NST0xMT0ZGKVxuICBpZiAodGFyZ2V0ID49IHN0YXJ0ICsgc2l6ZSAtIFNUUklQX1NDUk9MTE9GRikgcmV0dXJuIE1hdGgubWluKG1heCwgdGFyZ2V0IC0gc2l6ZSArIFNUUklQX1NDUk9MTE9GRiArIDEpXG4gIHJldHVybiBzdGFydFxufVxuXG5cbmZ1bmN0aW9uIGFnZW50RWxhcHNlZChhZ2VudCwgbm93ID0gRGF0ZS5ub3coKSkge1xuICBpZiAoIWFnZW50LnN0YXJ0ZWRBdCkgcmV0dXJuICd3YWl0aW5nJ1xuICBjb25zdCBzZWNvbmRzID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcigoKGFnZW50LmVuZGVkQXQgfHwgbm93KSAtIGFnZW50LnN0YXJ0ZWRBdCkgLyAxMDAwKSlcbiAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDYwKVxuICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IobWludXRlcyAvIDYwKVxuICBpZiAoaG91cnMpIHJldHVybiBgJHtob3Vyc31oICR7bWludXRlcyAlIDYwfW1gXG4gIGlmIChtaW51dGVzKSByZXR1cm4gYCR7bWludXRlc31tICR7c2Vjb25kcyAlIDYwfXNgXG4gIHJldHVybiBgJHtzZWNvbmRzfXNgXG59XG5cbmZ1bmN0aW9uIGFnZW50U3RhdHVzKGFnZW50KSB7XG4gIGlmIChhZ2VudC5zdGF0dXMgPT09ICdydW5uaW5nJykgcmV0dXJuIHsgaWNvbjogJycsIGxhYmVsOiAnJywgY29sb3I6IGFjY2VudCgpIH1cbiAgaWYgKGFnZW50LnN0YXR1cyA9PT0gJ3F1ZXVlZCcpIHJldHVybiB7IGljb246ICdcdTI1Q0MnLCBsYWJlbDogJ3F1ZXVlZCcsIGNvbG9yOiBNVVRFRCB9XG4gIGlmIChhZ2VudC5zdGF0dXMgPT09ICdjb21wbGV0ZWQnKSByZXR1cm4geyBpY29uOiAnXHUyNUNGJywgbGFiZWw6ICcnLCBjb2xvcjogR1JFRU4gfVxuICBpZiAoYWdlbnQuc3RhdHVzID09PSAnZmFpbGVkJykgcmV0dXJuIHsgaWNvbjogJ1x1MDBENycsIGxhYmVsOiAnZmFpbGVkJywgY29sb3I6IFJFRCB9XG4gIHJldHVybiB7IGljb246ICdcdTI1QTAnLCBsYWJlbDogJ2NhbmNlbGxlZCcsIGNvbG9yOiBNVVRFRCB9XG59XG5cbmZ1bmN0aW9uIFN0ZWVyTWVzc2FnZSh7IGl0ZW0sIHZlcmJvc2UsIHNlbGVjdGVkLCBmb2N1cyB9KSB7XG4gIGNvbnN0IGxheW91dCA9IHVzZUxheW91dCgpXG4gIGZvY3VzLml0ZW0oaXRlbS5tZXNzYWdlSWQsIGxheW91dClcbiAgcmV0dXJuIDxNZXNzYWdlIGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2V9IHNob3dMb2NrZWQgLz5cbn1cblxuZnVuY3Rpb24gRGljdGF0aW9uS2V5cyh7IGlucHV0IH0pIHtcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKGlucHV0LmhhbmRsZShldmVudCkpIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIH0pXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIE1vdXNlRm9jdXNSZWdpb24oeyBjaGlsZHJlbiwgb25QcmVzcywgLi4ucHJvcHMgfSkge1xuICBjb25zdCBoaXRUZXN0ID0gdXNlSGl0VGVzdCgpXG4gIHVzZU1vdXNlKChldmVudCkgPT4ge1xuICAgIGlmIChldmVudC5hY3Rpb24gPT09ICdwcmVzcycgJiYgZXZlbnQuYnV0dG9uID09PSAnbGVmdCcgJiYgaGl0VGVzdChldmVudC54LCBldmVudC55KSkgb25QcmVzcygpXG4gIH0pXG4gIHJldHVybiA8Ym94IHsuLi5wcm9wc30+e2NoaWxkcmVufTwvYm94PlxufVxuXG5mdW5jdGlvbiBDb21wb3NlckFjdGlvbih7IGljb24sIGFjdGl2ZUljb24sIGFjdGl2ZSA9IGZhbHNlLCBvblByZXNzLCBvbkhvdmVyIH0pIHtcbiAgY29uc3QgaGl0VGVzdCA9IHVzZUhpdFRlc3QoKVxuICBjb25zdCBbaG92ZXJlZCwgc2V0SG92ZXJlZF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIHVzZU1vdXNlKChldmVudCkgPT4ge1xuICAgIGNvbnN0IGluc2lkZSA9IGhpdFRlc3QoZXZlbnQueCwgZXZlbnQueSlcbiAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAnbW92ZScgJiYgaW5zaWRlICE9PSBob3ZlcmVkKCkpIHtcbiAgICAgIHNldEhvdmVyZWQoaW5zaWRlKVxuICAgICAgb25Ib3Zlcj8uKGluc2lkZSlcbiAgICB9XG4gICAgaWYgKGluc2lkZSAmJiBldmVudC5hY3Rpb24gPT09ICdwcmVzcycgJiYgZXZlbnQuYnV0dG9uID09PSAnbGVmdCcpIHtcbiAgICAgIG9uUHJlc3MoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG4gIGNvbnN0IGhpZ2hsaWdodGVkID0gaG92ZXJlZCgpIHx8IGFjdGl2ZVxuICByZXR1cm4gPHRleHQgc3R5bGU9e3sgYmc6IGhpZ2hsaWdodGVkID8gYWNjZW50KCkgOiB1bmRlZmluZWQsIGNvbG9yOiBoaWdobGlnaHRlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAke2hpZ2hsaWdodGVkID8gYWN0aXZlSWNvbiA6IGljb259IGB9PC90ZXh0PlxufVxuXG5mdW5jdGlvbiBBZ2VudFN0cmlwUm93KHsgc2VsZWN0ZWQsIGZvY3VzZWQsIGNoaWxkcmVuLCBvblByZXNzIH0pIHtcbiAgY29uc3QgaGl0VGVzdCA9IHVzZUhpdFRlc3QoKVxuICBjb25zdCBbaG92ZXJlZCwgc2V0SG92ZXJlZF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIHVzZU1vdXNlKChldmVudCkgPT4ge1xuICAgIGNvbnN0IGluc2lkZSA9IGhpdFRlc3QoZXZlbnQueCwgZXZlbnQueSlcbiAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAnbW92ZScpIHNldEhvdmVyZWQoaW5zaWRlKVxuICAgIGlmIChpbnNpZGUgJiYgZXZlbnQuYWN0aW9uID09PSAncHJlc3MnICYmIGV2ZW50LmJ1dHRvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICBvblByZXNzKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBmb2N1c2VkID8gYWNjZW50KCkgOiBudWxsLCBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBob3ZlcmVkKCkgPyBGR19TT0ZUIDogTVVURUQgfX0+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBzZWxlY3RlZCA/IGFjY2VudCgpIDogTVVURUQsIGJvbGQ6IHNlbGVjdGVkIH19PntzZWxlY3RlZCA/ICdcdTI3NkYgJyA6ICcgICd9PC90ZXh0PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYm94PlxuICApXG59XG5cbi8vIG9ubHkgdGhlIG5ld2VzdCBzbGljZSBvZiBhIGxvbmcgdHJhbnNjcmlwdCByZW5kZXJzOyBvbGRlciBpdGVtcyBsb2FkIGluXG4vLyBiYXRjaGVzIHdoZW4gdGhlIHVzZXIgc2Nyb2xscyB0byB0aGUgdG9wLiByZW5kZXIgY29zdCBpcyBwZXItaXRlbSwgc28gdGhpc1xuLy8ga2VlcHMgZGF5LWxvbmcgc2Vzc2lvbnMgYXMgZmFzdCBhcyBmcmVzaCBvbmVzXG5jb25zdCBISVNUT1JZX1dJTkRPVyA9IDUwXG5cbmZ1bmN0aW9uIGNvbGxhcHNlU3RlZXJUb29scyhpdGVtcykge1xuICBjb25zdCBjb2xsYXBzZWQgPSBbXVxuICBsZXQgaGlkZGVuID0gMFxuICBjb25zdCBmbHVzaCA9ICgpID0+IHtcbiAgICBpZiAoIWhpZGRlbikgcmV0dXJuXG4gICAgY29sbGFwc2VkLnB1c2goeyBraW5kOiAnc3RlZXItdG9vbHMnLCBjb3VudDogaGlkZGVuIH0pXG4gICAgaGlkZGVuID0gMFxuICB9XG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGlmIChpdGVtLmtpbmQgPT09ICd0b29sJyB8fCBpdGVtLmtpbmQgPT09ICd0b29sLWdyb3VwJyB8fCBpdGVtLmtpbmQgPT09ICd0aG91Z2h0cycpIHtcbiAgICAgIGhpZGRlbiArPSBpdGVtLmtpbmQgPT09ICd0b29sLWdyb3VwJyA/IGl0ZW0uaXRlbXMubGVuZ3RoIDogMVxuICAgIH0gZWxzZSB7XG4gICAgICBmbHVzaCgpXG4gICAgICBjb2xsYXBzZWQucHVzaChpdGVtKVxuICAgIH1cbiAgfVxuICBmbHVzaCgpXG4gIHJldHVybiBjb2xsYXBzZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFwcCh7IGJvb3QsIGNvbnRyb2xsZXI6IGN0bCB9KSB7XG4gIGNvbnN0IHsgY3dkLCByb290LCB2ZXJzaW9uLCBza2lsbHMsIG1jcCB9ID0gYm9vdFxuICBjb25zdCBzdGF0ZSA9IGN0bC5zdGF0ZVxuICBjb25zdCBbd29ya3NwYWNlT3Blbiwgc2V0V29ya3NwYWNlT3Blbl0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFt3b3Jrc3BhY2VSb3dzLCBzZXRXb3Jrc3BhY2VSb3dzXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW3dvcmtzcGFjZVNlbGVjdGVkLCBzZXRXb3Jrc3BhY2VTZWxlY3RlZF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3dvcmtzcGFjZUxvYWRpbmcsIHNldFdvcmtzcGFjZUxvYWRpbmddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbd29ya3NwYWNlRXJyb3IsIHNldFdvcmtzcGFjZUVycm9yXSA9IGNyZWF0ZVNpZ25hbCgnJylcbiAgY29uc3QgW3dvcmtzcGFjZUhlaWdodCwgc2V0V29ya3NwYWNlSGVpZ2h0XSA9IGNyZWF0ZVNpZ25hbCgyMClcbiAgY29uc3QgW3dvcmtzcGFjZVBlbmRpbmcsIHNldFdvcmtzcGFjZVBlbmRpbmddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCB3b3Jrc3BhY2VHcm91cHNOb3cgPSB3b3Jrc3BhY2VHcm91cHMod29ya3NwYWNlUm93cygpKVxuICBjb25zdCB3b3Jrc3BhY2VTZXNzaW9ucyA9IHdvcmtzcGFjZUdyb3Vwc05vdy5mbGF0TWFwKChncm91cCkgPT4gZ3JvdXAuc2Vzc2lvbnMpXG4gIGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hXb3Jrc3BhY2UoKSB7XG4gICAgaWYgKCFib290LndvcmtzcGFjZSB8fCBib290LnJlZnMud29ya3NwYWNlUmVmcmVzaGluZykgcmV0dXJuXG4gICAgYm9vdC5yZWZzLndvcmtzcGFjZVJlZnJlc2hpbmcgPSB0cnVlXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJvd3MgPSBhd2FpdCBib290LndvcmtzcGFjZS5saXN0KClcbiAgICAgIGNvbnN0IG5leHQgPSB3b3Jrc3BhY2VHcm91cHMocm93cykuZmxhdE1hcCgoZ3JvdXApID0+IGdyb3VwLnNlc3Npb25zKVxuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB3b3Jrc3BhY2VTZWxlY3Rpb24obmV4dCwgd29ya3NwYWNlU2VsZWN0ZWQoKSwgd29ya3NwYWNlU2Vzc2lvbnMpXG4gICAgICBzZXRXb3Jrc3BhY2VTZWxlY3RlZChzZWxlY3RlZClcbiAgICAgIHNldFdvcmtzcGFjZVJvd3Mocm93cylcbiAgICAgIHNldFdvcmtzcGFjZUVycm9yKCcnKVxuICAgICAgaWYgKHdvcmtzcGFjZU9wZW4oKSkgYXdhaXQgYm9vdC53b3Jrc3BhY2UucHJldmlldyhzZWxlY3RlZClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc2V0V29ya3NwYWNlRXJyb3IoYHNlc3Npb25zIGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGJvb3QucmVmcy53b3Jrc3BhY2VSZWZyZXNoaW5nID0gZmFsc2VcbiAgICAgIHNldFdvcmtzcGFjZUxvYWRpbmcoZmFsc2UpXG4gICAgfVxuICB9XG4gIGJvb3QucmVmcy5yZWZyZXNoV29ya3NwYWNlID0gcmVmcmVzaFdvcmtzcGFjZVxuICB1c2VJbnRlcnZhbCgoKSA9PiB7IGlmICh3b3Jrc3BhY2VPcGVuKCkpIHZvaWQgYm9vdC5yZWZzLnJlZnJlc2hXb3Jrc3BhY2UoKSB9LCAxMDAwKVxuICBpZiAoYm9vdC53b3Jrc3BhY2UgJiYgIWJvb3QucmVmcy53b3Jrc3BhY2VTdWJzY3JpYmVkKSB7XG4gICAgYm9vdC5yZWZzLndvcmtzcGFjZVN1YnNjcmliZWQgPSB0cnVlXG4gICAgY29uc3QgY2xlYW51cCA9IGJvb3Qud29ya3NwYWNlLnN1YnNjcmliZT8uKCgpID0+IHZvaWQgYm9vdC5yZWZzLnJlZnJlc2hXb3Jrc3BhY2UoKSlcbiAgICBvbkNsZWFudXAoKCkgPT4geyBjbGVhbnVwPy4oKTsgYm9vdC5yZWZzLndvcmtzcGFjZVN1YnNjcmliZWQgPSBmYWxzZSB9KVxuICB9XG4gIGNvbnN0IFttb2RlbHMsIHNldE1vZGVsc10gPSBjcmVhdGVTaWduYWwoYm9vdC5tb2RlbHMpXG4gIGNvbnN0IFtyZWZyZXNoaW5nTW9kZWxzLCBzZXRSZWZyZXNoaW5nTW9kZWxzXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcblxuICBjb25zdCBbZGVyaXZlZCwgc2V0RGVyaXZlZF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZGVyaXZlZClcbiAgY29uc3QgW3Rlcm1pbmFsV2lkdGgsIHNldFRlcm1pbmFsV2lkdGhdID0gY3JlYXRlU2lnbmFsKHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgfHwgODApXG4gIHVzZVJlc2l6ZSgoeyB3aWR0aCB9KSA9PiBzZXRUZXJtaW5hbFdpZHRoKHdpZHRoKSlcbiAgY29uc3QgW292ZXJsYXksIHNldE92ZXJsYXldID0gY3JlYXRlU2lnbmFsKHN0YXRlLm92ZXJsYXkpXG4gIGNvbnN0IFtzdHJlYW1pbmcsIHNldFN0cmVhbWluZ10gPSBjcmVhdGVTaWduYWwoc3RhdGUuc3RyZWFtaW5nKVxuICBjb25zdCBbbGl2ZVVzYWdlLCBzZXRMaXZlVXNhZ2VdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmxpdmVVc2FnZSlcbiAgY29uc3QgW3R1cm5QaGFzZSwgc2V0VHVyblBoYXNlXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS50dXJuUGhhc2UpXG4gIGNvbnN0IFtidXN5LCBzZXRCdXN5XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5idXN5KVxuICBjb25zdCBbY29tcGFjdGluZywgc2V0Q29tcGFjdGluZ10gPSBjcmVhdGVTaWduYWwoc3RhdGUuY29tcGFjdGluZylcbiAgY29uc3QgW2NvbXBhY3RTdGF0dXMsIHNldENvbXBhY3RTdGF0dXNdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmNvbXBhY3RTdGF0dXMpXG4gIGNvbnN0IFtzdGFydGVkQXQsIHNldFN0YXJ0ZWRBdF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuc3RhcnRlZEF0KVxuICBjb25zdCBbaW5wdXQsIHNldElucHV0VmFsdWVdID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBjb21wb3NlckZpbGVzID0gYm9vdC5yZWZzLmNvbXBvc2VyRmlsZXMgPz89IGNyZWF0ZUNvbXBvc2VyRmlsZXMoKVxuICBjb25zdCBbaW5wdXRDdXJzb3IsIHNldElucHV0Q3Vyc29yXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbY29tbWFuZEZvcm0sIHNldENvbW1hbmRGb3JtXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBzZXRJbnB1dCA9ICh0ZXh0LCBjdXJzb3IpID0+IHtcbiAgICBib290LnJlZnMuZHJhZnRSZXZpc2lvbiA9IChib290LnJlZnMuZHJhZnRSZXZpc2lvbiA/PyAwKSArIDFcbiAgICBjb25zdCB2YWx1ZSA9IGNvbXBvc2VyRmlsZXMudXBkYXRlKHRleHQsIHN0YXRlLmF0dGFjaG1lbnRzKVxuICAgIHNldElucHV0VmFsdWUodmFsdWUpXG4gICAgc2V0SW5wdXRDdXJzb3IoY3Vyc29yID8/IHZhbHVlLmxlbmd0aClcbiAgfVxuICBjb25zdCBbZGljdGF0aW9uU3RhdHVzLCBzZXREaWN0YXRpb25TdGF0dXNdID0gY3JlYXRlU2lnbmFsKCdpZGxlJylcbiAgY29uc3QgW2RpY3RhdGlvbkxldmVscywgc2V0RGljdGF0aW9uTGV2ZWxzXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW2NhcHR1cmVTdGF0dXMsIHNldENhcHR1cmVTdGF0dXNdID0gY3JlYXRlU2lnbmFsKCdpZGxlJylcbiAgY29uc3QgW2NvbXBvc2VyQWN0aW9uTGFiZWwsIHNldENvbXBvc2VyQWN0aW9uTGFiZWxdID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBbbW9kZWwsIHNldE1vZGVsXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5tb2RlbClcbiAgY29uc3QgW2RlZmF1bHRNb2RlbCwgc2V0RGVmYXVsdE1vZGVsXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5kZWZhdWx0TW9kZWwpXG4gIGNvbnN0IFtlZmZvcnQsIHNldEVmZm9ydF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZWZmb3J0KVxuICBjb25zdCBbZGVmYXVsdEVmZm9ydCwgc2V0RGVmYXVsdEVmZm9ydF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZGVmYXVsdEVmZm9ydClcbiAgY29uc3QgW3NwZWVkLCBzZXRTcGVlZF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuc3BlZWQpXG4gIGNvbnN0IFtzcGVlZERlZmF1bHRzLCBzZXRTcGVlZERlZmF1bHRzXSA9IGNyZWF0ZVNpZ25hbCh7IC4uLnN0YXRlLnNwZWVkRGVmYXVsdHMgfSlcbiAgY29uc3QgW3Nob3dTcGVlZFBhbmVsLCBzZXRTaG93U3BlZWRQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93RWZmb3J0UGFuZWwsIHNldFNob3dFZmZvcnRQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93VGhlbWVQYW5lbCwgc2V0U2hvd1RoZW1lUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd0NvbmZpZ1BhbmVsLCBzZXRTaG93Q29uZmlnUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd0RlbGV0ZUNvbmZpcm0sIHNldFNob3dEZWxldGVDb25maXJtXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2Nsb3Vkcywgc2V0Q2xvdWRzXSA9IGNyZWF0ZVNpZ25hbChib290LmNsb3VkcylcbiAgY29uc3QgW2NvbXBhY3RUb29sSGlzdG9yeSwgc2V0Q29tcGFjdFRvb2xIaXN0b3J5XSA9IGNyZWF0ZVNpZ25hbChib290LmNvbXBhY3RUb29sSGlzdG9yeSlcbiAgY29uc3QgW2dpdEZvb3Rlciwgc2V0R2l0Rm9vdGVyXSA9IGNyZWF0ZVNpZ25hbChib290LmdpdEZvb3RlcilcbiAgY29uc3QgW3dpZGVTaWRlYmFyLCBzZXRXaWRlU2lkZWJhcl0gPSBjcmVhdGVTaWduYWwoYm9vdC53aWRlU2lkZWJhcilcbiAgY29uc3QgW3Jlc2VhcmNoQWdlbnRMaW1pdCwgc2V0UmVzZWFyY2hBZ2VudExpbWl0XSA9IGNyZWF0ZVNpZ25hbChib290LnJlc2VhcmNoQWdlbnRMaW1pdClcbiAgY29uc3QgW3F1ZXN0aW9uUmVxdWVzdCwgc2V0UXVlc3Rpb25SZXF1ZXN0XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5xdWVzdGlvbilcbiAgY29uc3QgW3Nob3dNZW1vcnlQYW5lbCwgc2V0U2hvd01lbW9yeVBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW21lbVNjb3BlLCBzZXRNZW1TY29wZV0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW21lbW9yeUxpc3QsIHNldE1lbW9yeUxpc3RdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbdGhlbWVQcmVmLCBzZXRUaGVtZVByZWZdID0gY3JlYXRlU2lnbmFsKGJvb3QudGhlbWVQcmVmIHx8ICdhdXRvJylcbiAgY29uc3QgW3F1ZXVlZCwgc2V0UXVldWVkXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5xdWV1ZWQpXG4gIGNvbnN0IFtleHBlZGl0ZWQsIHNldEV4cGVkaXRlZF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZXhwZWRpdGVkKVxuICBjb25zdCBbc2VudCwgc2V0U2VudF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuc2VudClcbiAgY29uc3QgW2hpc3RJZHgsIHNldEhpc3RJZHhdID0gY3JlYXRlU2lnbmFsKC0xKVxuICBjb25zdCBbY21kSW5kZXgsIHNldENtZEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbY21kQ3ljbGUsIHNldENtZEN5Y2xlXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbZmlsZUluZGV4LCBzZXRGaWxlSW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtmaWxlTGlzdCwgc2V0RmlsZUxpc3RdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbZmlsZXNEaXNtaXNzZWQsIHNldEZpbGVzRGlzbWlzc2VkXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3ZpZXcsIHNldFZpZXdTaWduYWxdID0gY3JlYXRlU2lnbmFsKCdjaGF0JylcbiAgY29uc3QgW3ZlcmJvc2VdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd01vZGVsUGFuZWwsIHNldFNob3dNb2RlbFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dSZXNlYXJjaE1vZGVsUGFuZWwsIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbcmVzZWFyY2hNb2RlbFJldHVybiwgc2V0UmVzZWFyY2hNb2RlbFJldHVybl0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3NlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsLCBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzZWxlY3RpbmdTaGVsbE1vZGVsLCBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3BhcnRpY2lwYW50TW9kZWxUYXJnZXQsIHNldFBhcnRpY2lwYW50TW9kZWxUYXJnZXRdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtwZW5kaW5nUmVzZWFyY2gsIHNldFBlbmRpbmdSZXNlYXJjaF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3BlbmRpbmdEZWxpYmVyYXRpb24sIHNldFBlbmRpbmdEZWxpYmVyYXRpb25dID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFthZ2VudHNWZXJzaW9uLCBzZXRBZ2VudHNWZXJzaW9uXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5hY3Rpdml0eVZlcnNpb24pXG4gIGNvbnN0IFt2aWV3ZWRBZ2VudElkLCBzZXRWaWV3ZWRBZ2VudElkXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbYWdlbnRXaW5kb3dPZmZzZXQsIHNldEFnZW50V2luZG93T2Zmc2V0XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbc2hvd0hpc3RvcnlQYW5lbCwgc2V0U2hvd0hpc3RvcnlQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtoaXN0U2NvcGUsIHNldEhpc3RTY29wZV0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2hpc3RQcm9tcHRzLCBzZXRIaXN0UHJvbXB0c10gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFtzaG93UmVzdW1lUGFuZWwsIHNldFNob3dSZXN1bWVQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtyZXN1bWVTY29wZXMsIHNldFJlc3VtZVNjb3Blc10gPSBjcmVhdGVTaWduYWwoWydyZXBvc2l0b3J5JywgJ2V2ZXJ5d2hlcmUnXSlcbiAgY29uc3QgW3Jlc3VtZVNjb3BlLCBzZXRSZXN1bWVTY29wZV0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3Jlc3VtZVNlc3Npb25zLCBzZXRSZXN1bWVTZXNzaW9uc10gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFtyZXN1bWVMb2FkaW5nLCBzZXRSZXN1bWVMb2FkaW5nXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dNY3BQYW5lbCwgc2V0U2hvd01jcFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dQcm9qZWN0UGFuZWwsIHNldFNob3dQcm9qZWN0UGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbaW5mb1BhbmVsLCBzZXRJbmZvUGFuZWxdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFt2aWV3ZWRTaGVsbElkLCBzZXRWaWV3ZWRTaGVsbElkXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbc2hlbGxXaW5kb3dPZmZzZXQsIHNldFNoZWxsV2luZG93T2Zmc2V0XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbc2hvd1dha2V1cHNQYW5lbCwgc2V0U2hvd1dha2V1cHNQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93Q29ubmVjdFBhbmVsLCBzZXRTaG93Q29ubmVjdFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2F1dGhQcm92aWRlcnMsIHNldEF1dGhQcm92aWRlcnNdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbc2hlbGxzVmVyc2lvbiwgc2V0U2hlbGxzVmVyc2lvbl0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2dpdFZlcnNpb24sIHNldEdpdFZlcnNpb25dID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtwcm9qZWN0cywgc2V0UHJvamVjdHNdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbcHJvamVjdHNMb2FkaW5nLCBzZXRQcm9qZWN0c0xvYWRpbmddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbbWNwU2VydmVycywgc2V0TWNwU2VydmVyc10gPSBjcmVhdGVTaWduYWwobWNwLmxpc3QoKSlcbiAgY29uc3QgW2NvbXBsZXRpbmcsIHNldENvbXBsZXRpbmddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbY29tcEluZGV4LCBzZXRDb21wSW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtyZXdpbmRTdGVwLCBzZXRSZXdpbmRTdGVwXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbcmV3aW5kVGFyZ2V0LCBzZXRSZXdpbmRUYXJnZXRdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtvZmZzZXQsIHNldE9mZnNldF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2ZvbGxvdywgc2V0Rm9sbG93XSA9IGNyZWF0ZVNpZ25hbCh0cnVlKVxuICBjb25zdCBbaGlzdFdpbmRvdywgc2V0SGlzdFdpbmRvd10gPSBjcmVhdGVTaWduYWwoSElTVE9SWV9XSU5ET1cpXG4gIGNvbnN0IFt0cmFuc2NyaXB0TWV0cmljcywgc2V0VHJhbnNjcmlwdE1ldHJpY3NdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtzdGVlciwgc2V0U3RlZXJdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtzdGVlclRleHQsIHNldFN0ZWVyVGV4dF0gPSBjcmVhdGVTaWduYWwoJycpXG5cbiAgY29uc3QgcmVmcyA9IGJvb3QucmVmc1xuICByZWZzLnF1aXRBdCA/Pz0gMFxuICByZWZzLnJlc3VtZU9wZW4gPz89IDBcblxuICBmdW5jdGlvbiBzZXRWaWV3KG5leHQpIHtcbiAgICBzZXRWaWV3U2lnbmFsKG5leHQpXG4gICAgY3RsLmhvbGQobmV4dCAhPT0gJ2NoYXQnKVxuICB9XG5cbiAgLy8gdGhlIGNvbnRyb2xsZXIgb3ducyBldmVyeSBwaWVjZSBvZiBjb252ZXJzYXRpb24gc3RhdGU7IHRoZXNlIHNpZ25hbHNcbiAgLy8gbWlycm9yIGl0IHNvIHRoZSByZW5kZXIgdHJlZSBiZWxvdyBzdGF5cyByZWFjdGl2ZSB3aXRob3V0IGtub3dpbmcgdGhhdFxuICBjb25zdCBtaXJyb3IgPSAoZ2V0LCBzZXQsIHZhbHVlKSA9PiB7XG4gICAgaWYgKGdldCgpICE9PSB2YWx1ZSkgc2V0KHZhbHVlKVxuICB9XG4gIGNvbnN0IFtwZWVyU3RhdHVzLCBzZXRQZWVyU3RhdHVzXSA9IGNyZWF0ZVNpZ25hbCgnJylcblxuICBmdW5jdGlvbiBzeW5jRnJvbUNvbnRyb2xsZXIoKSB7XG4gICAgc2V0UGVlclN0YXR1cyhzdGF0ZS5wZWVyRXJyb3IgPyBgcGVlciBkaXNjb25uZWN0ZWQ6ICR7c3RhdGUucGVlckVycm9yfWAgOiBzdGF0ZS5wZWVyUGF1c2VkICYmIHN0YXRlLnBlZXJDb25uZWN0aW9uID8gJ3BlZXIgcmVzcG9uc2VzIHBhdXNlZCcgOiAnJylcbiAgICBtaXJyb3IoZGVyaXZlZCwgc2V0RGVyaXZlZCwgc3RhdGUuZGVyaXZlZClcbiAgICBtaXJyb3Iob3ZlcmxheSwgc2V0T3ZlcmxheSwgc3RhdGUub3ZlcmxheSlcbiAgICBtaXJyb3Ioc3RyZWFtaW5nLCBzZXRTdHJlYW1pbmcsIHN0YXRlLnN0cmVhbWluZylcbiAgICBtaXJyb3IobGl2ZVVzYWdlLCBzZXRMaXZlVXNhZ2UsIHN0YXRlLmxpdmVVc2FnZSlcbiAgICBtaXJyb3IodHVyblBoYXNlLCBzZXRUdXJuUGhhc2UsIHN0YXRlLnR1cm5QaGFzZSlcbiAgICBtaXJyb3IoYnVzeSwgc2V0QnVzeSwgc3RhdGUuYnVzeSlcbiAgICBtaXJyb3IoY29tcGFjdGluZywgc2V0Q29tcGFjdGluZywgc3RhdGUuY29tcGFjdGluZylcbiAgICBtaXJyb3IoY29tcGFjdFN0YXR1cywgc2V0Q29tcGFjdFN0YXR1cywgc3RhdGUuY29tcGFjdFN0YXR1cylcbiAgICBtaXJyb3Ioc3RhcnRlZEF0LCBzZXRTdGFydGVkQXQsIHN0YXRlLnN0YXJ0ZWRBdClcbiAgICBtaXJyb3IobW9kZWwsIHNldE1vZGVsLCBzdGF0ZS5tb2RlbClcbiAgICBtaXJyb3IoZGVmYXVsdE1vZGVsLCBzZXREZWZhdWx0TW9kZWwsIHN0YXRlLmRlZmF1bHRNb2RlbClcbiAgICBtaXJyb3Ioc3BlZWQsIHNldFNwZWVkLCBzdGF0ZS5zcGVlZClcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkoc3BlZWREZWZhdWx0cygpKSAhPT0gSlNPTi5zdHJpbmdpZnkoc3RhdGUuc3BlZWREZWZhdWx0cykpIHNldFNwZWVkRGVmYXVsdHMoeyAuLi5zdGF0ZS5zcGVlZERlZmF1bHRzIH0pXG4gICAgbWlycm9yKGVmZm9ydCwgc2V0RWZmb3J0LCBzdGF0ZS5lZmZvcnQpXG4gICAgbWlycm9yKGRlZmF1bHRFZmZvcnQsIHNldERlZmF1bHRFZmZvcnQsIHN0YXRlLmRlZmF1bHRFZmZvcnQpXG4gICAgbWlycm9yKHF1ZXN0aW9uUmVxdWVzdCwgc2V0UXVlc3Rpb25SZXF1ZXN0LCBzdGF0ZS5xdWVzdGlvbilcbiAgICBtaXJyb3IocXVldWVkLCBzZXRRdWV1ZWQsIHN0YXRlLnF1ZXVlZClcbiAgICBtaXJyb3IoZXhwZWRpdGVkLCBzZXRFeHBlZGl0ZWQsIHN0YXRlLmV4cGVkaXRlZClcbiAgICBtaXJyb3Ioc2VudCwgc2V0U2VudCwgc3RhdGUuc2VudClcbiAgICBtaXJyb3IoYWdlbnRzVmVyc2lvbiwgc2V0QWdlbnRzVmVyc2lvbiwgc3RhdGUuYWN0aXZpdHlWZXJzaW9uKVxuICB9XG5cbiAgLy8gdHJlbmQgcmUtcnVucyB0aGlzIGNvbXBvbmVudCBvbiBldmVyeSBzaWduYWwgY2hhbmdlLCBzbyB0aGUgY29udHJvbGxlclxuICAvLyBpcyBzdWJzY3JpYmVkIG9uY2UgYW5kIGVhY2ggaGFuZGxlciByZWFjaGVzIHRoZSBuZXdlc3QgcmVuZGVyIHRocm91Z2hcbiAgLy8gcmVmcy51aSwgd2hpY2ggaXMgcmVwbGFjZWQgYmVsb3cgb24gZXZlcnkgcGFzc1xuICByZWZzLnVpID0ge1xuICAgIHN5bmM6IHN5bmNGcm9tQ29udHJvbGxlcixcbiAgICBmbGFzaDogKG1lc3NhZ2UpID0+IGZsYXNoKG1lc3NhZ2UpLFxuICAgIGRlcml2ZWQ6IChuZXh0KSA9PiB7XG4gICAgICBzZXRBY2NlbnQobmV4dC5jb2xvcilcbiAgICAgIGJvb3Quc2V0VGhlbWU/Lih7IGFjY2VudDogbmV4dC5jb2xvciB8fCBERUZBVUxUX0FDQ0VOVCwgbXV0ZWQ6IE1VVEVEIH0pXG4gICAgfSxcbiAgICBxdWVzdGlvbjogKCkgPT4ge1xuICAgICAgcmVmcy5kaWN0YXRpb25JbnB1dD8uY2FuY2VsKClcbiAgICAgIGZtLmZvY3VzKCdxdWVzdGlvbicpXG4gICAgfSxcbiAgICB0dXJuOiAoKSA9PiB7XG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgfSxcbiAgICBpbnB1dDogKHRleHQpID0+IHtcbiAgICAgIHJlZnMuZGljdGF0aW9uSW5wdXQ/LmNhbmNlbCgpXG4gICAgICBzZXRJbnB1dCh0ZXh0KVxuICAgIH0sXG4gICAgc2Vzc2lvbjogKCkgPT4ge1xuICAgICAgc2V0Q29tbWFuZEZvcm0obnVsbClcbiAgICAgIHJlZnMuY29tbWFuZEV4cGFuc2lvbiA9IG51bGxcbiAgICAgIHJlZnMuZGljdGF0aW9uSW5wdXQ/LmNhbmNlbCgpXG4gICAgICBzZXRWaWV3ZWRBZ2VudElkKG51bGwpXG4gICAgICBzZXRWaWV3ZWRTaGVsbElkKG51bGwpXG4gICAgICBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgICAgc2V0Rm9sbG93KHRydWUpXG4gICAgICBmbS5mb2N1cygnaW5wdXQnKVxuICAgIH0sXG4gICAgcmVzdW1lZDogKG1ldGEpID0+IGZsYXNoKGByZXN1bWVkICAke21ldGEudHVybnN9ICR7bWV0YS50dXJucyA9PT0gMSA/ICd0dXJuJyA6ICd0dXJucyd9ICAke3RpbWVBZ28obWV0YS5hdCl9YCksXG4gICAgcHJvamVjdDogKG5leHQpID0+IHtcbiAgICAgIHJlZnMuZGljdGF0aW9uSW5wdXQ/LmNhbmNlbCgpXG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgXFx4MWJdMDtwaWNvICAke25leHQucm9vdC5zcGxpdCgnLycpLnBvcCgpfVxceDA3YClcbiAgICAgIHNldE1jcFNlcnZlcnMobmV4dC5tY3AubGlzdCgpKVxuICAgICAgc2V0RmlsZUxpc3QoW10pXG4gICAgfSxcbiAgICBtY3A6IChzZXJ2ZXJzKSA9PiBzZXRNY3BTZXJ2ZXJzKHNlcnZlcnMpLFxuICAgIHNoZWxsczogKCkgPT4gc2V0U2hlbGxzVmVyc2lvbigodikgPT4gdiArIDEpLFxuICAgIGdpdDogKCkgPT4gc2V0R2l0VmVyc2lvbigodikgPT4gdiArIDEpLFxuICB9XG4gIGlmICghcmVmcy5zdWJzY3JpYmVkKSB7XG4gICAgcmVmcy5zdWJzY3JpYmVkID0gdHJ1ZVxuICAgIGN0bC5vbignY2hhbmdlJywgKCkgPT4gcmVmcy51aS5zeW5jKCkpXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIFsnZmxhc2gnLCAnZGVyaXZlZCcsICdxdWVzdGlvbicsICd0dXJuJywgJ2lucHV0JywgJ3Nlc3Npb24nLCAncmVzdW1lZCcsICdwcm9qZWN0JywgJ21jcCcsICdzaGVsbHMnLCAnZ2l0J10pIHtcbiAgICAgIGN0bC5vbih0eXBlLCAocGF5bG9hZCkgPT4gcmVmcy51aVt0eXBlXShwYXlsb2FkKSlcbiAgICB9XG4gIH1cbiAgc3luY0Zyb21Db250cm9sbGVyKClcblxuICBjb25zdCBza2lsbENvbW1hbmRzID0gc2tpbGxzLmxpc3QoKS5tYXAoKHMpID0+ICh7IG5hbWU6IHMubmFtZSwgZGVzYzogYHNraWxsICAke3MuZGVzY3JpcHRpb24gfHwgcy5zb3VyY2V9YCwgc2tpbGw6IHRydWUgfSkpXG4gIGNvbnN0IHVzZXJDb21tYW5kcyA9IGJvb3QuY29tbWFuZHMubGlzdCgpLm1hcCgoYykgPT4gKHsgbmFtZTogYy5uYW1lLCBkZXNjOiBgY29tbWFuZCAgJHtjLmRlc2NyaXB0aW9uIHx8IGMuc291cmNlfWAsIGNvbW1hbmQ6IHRydWUgfSkpXG4gIGNvbnN0IGJ5TmFtZSA9IG5ldyBNYXAoKVxuICBjb25zdCBzaGFkb3dlZCA9IFtdXG4gIGZvciAoY29uc3QgYyBvZiBbLi4uQ09NTUFORFMsIC4uLnNraWxsQ29tbWFuZHMsIC4uLnVzZXJDb21tYW5kc10pIHtcbiAgICBpZiAoYnlOYW1lLmhhcyhjLm5hbWUpKSBzaGFkb3dlZC5wdXNoKGAke2Muc2tpbGwgPyAnc2tpbGwnIDogJ2NvbW1hbmQnfSBcIiR7Yy5uYW1lfVwiYClcbiAgICBlbHNlIGJ5TmFtZS5zZXQoYy5uYW1lLCBjKVxuICB9XG4gIGNvbnN0IGFsbENvbW1hbmRzID0gWy4uLmJ5TmFtZS52YWx1ZXMoKV1cbiAgaWYgKHNoYWRvd2VkLmxlbmd0aCAmJiAhcmVmcy53YXJuZWRTaGFkb3dlZCkge1xuICAgIHJlZnMud2FybmVkU2hhZG93ZWQgPSB0cnVlXG4gICAgc2V0VGltZW91dCgoKSA9PiBmbGFzaChgc2hhZG93ZWQgYnkgYW4gZWFybGllciBuYW1lLCByZW5hbWUgdG8gdXNlOiAke3NoYWRvd2VkLmpvaW4oJywgJyl9YCksIDApXG4gIH1cblxuICBjb25zdCB0b2FzdCA9IHVzZVRvYXN0KHtcbiAgICBkdXJhdGlvbjogMzUwMCxcbiAgICBwb3NpdGlvbjogJ3RvcC1yaWdodCcsXG4gICAgcmVuZGVyOiAobWVzc2FnZSkgPT4gPHRleHQgc3R5bGU9e3sgYmc6IGFjY2VudCgpLCBjb2xvcjogJ2JsYWNrJywgYm9sZDogdHJ1ZSB9fT57YCAke21lc3NhZ2V9IGB9PC90ZXh0PixcbiAgfSlcblxuICBjb25zdCB1cGRhdGVUb2FzdCA9IHVzZVRvYXN0KHtcbiAgICBkdXJhdGlvbjogODAwMCxcbiAgICBwb3NpdGlvbjogJ3RvcC1jZW50ZXInLFxuICAgIHJlbmRlcjogKG1lc3NhZ2UpID0+IChcbiAgICAgIDxib3ggc3R5bGU9e3sgYmc6IGFjY2VudCgpIH19PlxuICAgICAgICA8U2hpbW1lciBjb2xvcj1cImJsYWNrXCIgaGlnaGxpZ2h0PXtISUdITElHSFR9IGR1cmF0aW9uPXsxNTAwfT57YCAke21lc3NhZ2V9IGB9PC9TaGltbWVyPlxuICAgICAgPC9ib3g+XG4gICAgKSxcbiAgfSlcblxuICBmdW5jdGlvbiBmbGFzaChtc2cpIHtcbiAgICB0b2FzdChtc2cpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZWZyZXNoTW9kZWxzKCkge1xuICAgIGlmIChyZWZyZXNoaW5nTW9kZWxzKCkpIHJldHVyblxuICAgIHNldFJlZnJlc2hpbmdNb2RlbHModHJ1ZSlcbiAgICBmbGFzaCgncmVmcmVzaGluZyBtb2RlbHMnKVxuICAgIGNvbnN0IHN0YXJ0ZWQgPSBwZXJmb3JtYW5jZS5ub3coKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZWZyZXNoZWQgPSBhd2FpdCBib290LnJlZnJlc2hNb2RlbHMoKVxuICAgICAgYm9vdC5tb2RlbHMgPSByZWZyZXNoZWRcbiAgICAgIHNldE1vZGVscyhyZWZyZXNoZWQpXG4gICAgICBjb25zdCBlbGFwc2VkID0gTWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0ZWQpXG4gICAgICBmbGFzaChgbW9kZWxzIHJlZnJlc2hlZCAgJHtyZWZyZXNoZWQubGVuZ3RofSBtb2RlbHMgICR7ZWxhcHNlZH1tc2ApXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmbGFzaChgbW9kZWwgcmVmcmVzaCBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgMTIwKX1gKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRSZWZyZXNoaW5nTW9kZWxzKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIHJlZnMucGFzdGVJbWFnZSA/Pz0gY3JlYXRlQ2xpcGJvYXJkSW5wdXQoe1xuICAgIHJlYWRJbWFnZTogcmVhZENsaXBib2FyZEltYWdlLFxuICAgIGdldERyYWZ0OiAoKSA9PiAoeyB2YWx1ZTogaW5wdXQoKSwgY3Vyc29yOiBpbnB1dEN1cnNvcigpLCBzZXNzaW9uOiBzdGF0ZS5zZXNzaW9uLCByZXZpc2lvbjogcmVmcy5kcmFmdFJldmlzaW9uIH0pLFxuICAgIGF0dGFjaEltYWdlOiBjdGwuYXR0YWNoSW1hZ2UsXG4gICAgc2V0SW5wdXQsXG4gICAgb25FcnJvcjogKG1lc3NhZ2UpID0+IHJlZnMudWkuZmxhc2gobWVzc2FnZSksXG4gIH0pXG4gIHJlZnMuY2FwdHVyZUltYWdlID8/PSBjcmVhdGVTY3JlZW5DYXB0dXJlSW5wdXQoe1xuICAgIGNhcHR1cmVSZWdpb24sXG4gICAgZ2V0RHJhZnQ6ICgpID0+ICh7IHZhbHVlOiBpbnB1dCgpLCBjdXJzb3I6IGlucHV0Q3Vyc29yKCksIHNlc3Npb246IHN0YXRlLnNlc3Npb24sIHJldmlzaW9uOiByZWZzLmRyYWZ0UmV2aXNpb24gfSksXG4gICAgYXR0YWNoSW1hZ2U6IGN0bC5hdHRhY2hJbWFnZSxcbiAgICBzZXRJbnB1dCxcbiAgICBvbkVycm9yOiAobWVzc2FnZSkgPT4gcmVmcy51aS5mbGFzaChtZXNzYWdlKSxcbiAgICBvblN0YXR1czogc2V0Q2FwdHVyZVN0YXR1cyxcbiAgfSlcblxuICBpZiAoIXJlZnMuZGljdGF0aW9uKSB7XG4gICAgcmVmcy5kaWN0YXRpb24gPSBjcmVhdGVEaWN0YXRpb24oe1xuICAgICAgb25TdGF0dXM6IChzdGF0dXMpID0+IHtcbiAgICAgICAgc2V0RGljdGF0aW9uU3RhdHVzKHN0YXR1cylcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ3JlY29yZGluZycpIHNldERpY3RhdGlvbkxldmVscyhbXSlcbiAgICAgIH0sXG4gICAgICBvbkxldmVsOiAobGV2ZWwpID0+IHNldERpY3RhdGlvbkxldmVscyhhcHBlbmRMZXZlbChkaWN0YXRpb25MZXZlbHMoKSwgbGV2ZWwpKSxcbiAgICAgIG9uRXJyb3I6IChtZXNzYWdlKSA9PiByZWZzLnVpLmZsYXNoKGBkaWN0YXRpb24gZmFpbGVkOiAke21lc3NhZ2V9YCksXG4gICAgfSlcbiAgICByZWZzLmRpY3RhdGlvbklucHV0ID0gY3JlYXRlRGljdGF0aW9uSW5wdXQoeyBkaWN0YXRpb246IHJlZnMuZGljdGF0aW9uLCBnZXRJbnB1dDogaW5wdXQsIHNldElucHV0IH0pXG4gICAgY29uc3QgcHJlbG9hZCA9IHNldEltbWVkaWF0ZSgoKSA9PiByZWZzLmRpY3RhdGlvbi5wcmVsb2FkKCkpXG4gICAgcHJlbG9hZC51bnJlZigpXG4gICAgcHJvY2Vzcy5vbmNlKCdleGl0JywgKCkgPT4ge1xuICAgICAgY2xlYXJJbW1lZGlhdGUocHJlbG9hZClcbiAgICAgIHJlZnMuZGljdGF0aW9uLmRpc3Bvc2UoKVxuICAgIH0pXG4gICAgZm9yIChjb25zdCBbc2lnbmFsLCBjb2RlXSBvZiBbWydTSUdURVJNJywgMTQzXSwgWydTSUdIVVAnLCAxMjldXSkge1xuICAgICAgcHJvY2Vzcy5vbmNlKHNpZ25hbCwgKCkgPT4ge1xuICAgICAgICByZWZzLmRpY3RhdGlvbi5kaXNwb3NlKClcbiAgICAgICAgcHJvY2Vzcy5leGl0KGNvZGUpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGlmICghcmVmcy51cGRhdGVDaGVja2VkKSB7XG4gICAgcmVmcy51cGRhdGVDaGVja2VkID0gdHJ1ZVxuICAgIGNoZWNrRm9yVXBkYXRlKHZlcnNpb24pLnRoZW4oKGZvdW5kKSA9PiB7XG4gICAgICBpZiAoIWZvdW5kKSByZXR1cm5cbiAgICAgIHVwZGF0ZVRvYXN0KGBwaWNvIHYke2ZvdW5kLnZlcnNpb259IGF2YWlsYWJsZSAgL3VwZGF0ZWApXG4gICAgICBmb3VuZC5tYXJrTm90aWZpZWQoKVxuICAgIH0pLmNhdGNoKCgpID0+IHt9KVxuICB9XG5cbiAgY29uc3QgcGVyZm9ybUNvbXBhY3Rpb24gPSBjdGwuY29tcGFjdFxuXG4gIGZ1bmN0aW9uIGNvbXBsZXRpb25Tb3VyY2UobmFtZSkge1xuICAgIGlmIChuYW1lID09PSAnc3BlZWQnKSByZXR1cm4gU1BFRURfTEVWRUxTLm1hcCgobCkgPT4gbC5rZXkpXG4gICAgaWYgKG5hbWUgPT09ICdjb2xvcicpIHJldHVybiBPYmplY3Qua2V5cyhTRVNTSU9OX0NPTE9SUylcbiAgICBpZiAobmFtZSA9PT0gJ3RoZW1lJykgcmV0dXJuIFsuLi5wYWxldHRlTGlzdCgpLm1hcCgocCkgPT4gcC5rZXkpLCAnYXV0byddXG4gICAgaWYgKG5hbWUgPT09ICdlZmZvcnQnKSByZXR1cm4gWydkZWZhdWx0JywgJ2xvdycsICdtZWRpdW0nLCAnaGlnaCcsICdtYXgnXVxuICAgIGlmIChuYW1lID09PSAnbW9kZWwnKSByZXR1cm4gbW9kZWxzKCkuZmlsdGVyKChtKSA9PiBtLmF2YWlsYWJsZSAhPT0gZmFsc2UpLm1hcCgobSkgPT4gbS5uYW1lKVxuICAgIGNvbnN0IGNtZCA9IGFsbENvbW1hbmRzLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gbmFtZSlcbiAgICBpZiAoY21kPy5za2lsbCB8fCBjbWQ/LmNvbW1hbmQpIHJldHVybiBmaWxlTGlzdCgpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc21pc3NDb21wbGV0aW9uKCkge1xuICAgIHNldENvbXBsZXRpbmcoZmFsc2UpXG4gICAgc2V0Q29tcEluZGV4KDApXG4gIH1cblxuICBmdW5jdGlvbiBhY2NlcHRDb21wbGV0aW9uKHZhbHVlLCBjdHgsIGNhbmRpZGF0ZSkge1xuICAgIHNldElucHV0KGFwcGx5Q29tcGxldGlvbih2YWx1ZSwgY3R4LCBjYW5kaWRhdGUpKVxuICAgIGRpc21pc3NDb21wbGV0aW9uKClcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbmQodGV4dCkge1xuICAgIGlmICh2aWV3ZWRBZ2VudElkKCkgfHwgdmlld2VkU2hlbGxJZCgpKSByZXR1cm5cbiAgICBjb25zdCB2YWx1ZSA9IHRleHQudHJpbSgpXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuXG4gICAgZGlzbWlzc0NvbXBsZXRpb24oKVxuICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIGNvbnN0IFtuYW1lLCAuLi5yZXN0XSA9IHZhbHVlLnNsaWNlKDEpLnNwbGl0KC9cXHMrLylcbiAgICAgIGNvbnN0IG1hdGNoID0gYWxsQ29tbWFuZHMuZmluZCgoYykgPT4gYy5uYW1lID09PSBuYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgaWYgKG1hdGNoLmNvbW1hbmQpIHJldHVybiBpbnNlcnRDb21tYW5kKG1hdGNoLCB7IHN0YXJ0OiB0ZXh0LmluZGV4T2YoJy8nKSwgZW5kOiB0ZXh0Lmxlbmd0aCB9LCByZXN0LmpvaW4oJyAnKSlcbiAgICAgICAgc2V0SW5wdXQoJycpXG4gICAgICAgIHJ1bkNvbW1hbmQobWF0Y2gsIHJlc3Quam9pbignICcpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gICAgc2V0SGlzdElkeCgtMSlcbiAgICBjb21wb3NlckZpbGVzLnVwZGF0ZSh0ZXh0LCBzdGF0ZS5hdHRhY2htZW50cylcbiAgICBjdGwuc2VuZChjb21wb3NlckZpbGVzLmNvbnRlbnQoKS50cmltKCkpXG4gICAgc2V0SW5wdXQoJycpXG4gIH1cblxuICBmdW5jdGlvbiBpbnRlcnJ1cHQoKSB7XG4gICAgaWYgKCFidXN5KCkpIHJldHVyblxuICAgIGlmIChzdGF0ZS5xdWVzdGlvbikgcmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJRdWVzdGlvbiA9IHRydWVcbiAgICBjdGwuaW50ZXJydXB0KClcbiAgfVxuXG4gIGNvbnN0IGZtdFRva2VucyA9IChuKSA9PiAobiA+PSAxMDAwID8gYCR7KG4gLyAxMDAwKS50b0ZpeGVkKDEpfWtgIDogU3RyaW5nKG4pKVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hNZW1vcmllcygpIHtcbiAgICBzZXRNZW1vcnlMaXN0KGF3YWl0IGJvb3QubWVtb3J5Lmxpc3QoKS5jYXRjaCgoKSA9PiBbXSkpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiB0b2dnbGVNZW1vcnlEaXNhYmxlZChtKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGJvb3QubWVtb3J5LnNldERpc2FibGVkKG0sICFtLmRpc2FibGVkKVxuICAgICAgYXdhaXQgcmVmcmVzaE1lbW9yaWVzKClcbiAgICAgIGZsYXNoKGAke20uZGlzYWJsZWQgPyAnZW5hYmxlZCcgOiAnc3VwcHJlc3NlZCd9ICR7bS5uYW1lfSAoJHttLnNjb3BlfSlgKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYG1lbW9yeSB1cGRhdGUgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDEwMCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBmb3JnZXRNZW1vcnkobSkge1xuICAgIGNvbnN0IGFybWVkID0gcmVmcy5mb3JnZXRBcm1cbiAgICBpZiAoIWFybWVkIHx8IGFybWVkLmZpbGUgIT09IG0uZmlsZSB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLmZvcmdldEFybSA9IHsgZmlsZTogbS5maWxlLCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byBmb3JnZXQgXCIke20ubmFtZX1cImApXG4gICAgfVxuICAgIHJlZnMuZm9yZ2V0QXJtID0gbnVsbFxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBib290Lm1lbW9yeS5mb3JnZXQobSlcbiAgICAgIGF3YWl0IHJlZnJlc2hNZW1vcmllcygpXG4gICAgICBmbGFzaChgZm9yZ290ICR7bS5uYW1lfSAoJHttLnNjb3BlfSlgKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYGZvcmdldCBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgODApfWApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gb3BlbkNvbnRleHRQYW5lbCgpIHtcbiAgICBjb25zdCB0b2sgPSAobikgPT4gYH4ke2ZtdFRva2VucyhuKX0gdG9rYFxuICAgIGNvbnN0IGJyZWFrZG93biA9IGF3YWl0IGN0bC5jb250ZXh0QnJlYWtkb3duKClcbiAgICBjb25zdCByb3dzID0gYnJlYWtkb3duLnJvd3MubWFwKChyb3cpID0+ICh7IG5hbWU6IHJvdy5uYW1lLCBkZXNjOiByb3cuZGVzYywgbm90ZTogdG9rKHJvdy50b2tlbnMpIH0pKVxuICAgIGlmIChicmVha2Rvd24ubWVhc3VyZWQpIHtcbiAgICAgIHJvd3MucHVzaCh7XG4gICAgICAgIG5hbWU6ICdsYXN0IG1lYXN1cmVkIHJlcXVlc3QnLFxuICAgICAgICBkZXNjOiAncHJvdmlkZXItcmVwb3J0ZWQgaW5wdXQgdG9rZW5zLCB0aGUgbnVtYmVyIGJlaGluZCBjdHggJScsXG4gICAgICAgIG5vdGU6IGAke2JyZWFrZG93bi5tZWFzdXJlZC50b0xvY2FsZVN0cmluZygpfSB0b2tgLFxuICAgICAgfSlcbiAgICB9XG4gICAgc2V0SW5mb1BhbmVsKHtcbiAgICAgIHRpdGxlOiBgQ29udGV4dCAgJHticmVha2Rvd24ubW9kZWx9YCxcbiAgICAgIHJvd3MsXG4gICAgICBvdmVydmlldzogYnJlYWtkb3duLnNlZ21lbnRzLmxlbmd0aCA/IHsgc2VnbWVudHM6IGJyZWFrZG93bi5zZWdtZW50cywgbWVhc3VyZWQ6IGJyZWFrZG93bi5tZWFzdXJlZCwgbGltaXQ6IGJyZWFrZG93bi5saW1pdCA/PyBtb2RlbCgpLmNvbnRleHQgfSA6IG51bGwsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHRoZW1lSXRlbXMgPSAoKSA9PiBbXG4gICAgLi4ucGFsZXR0ZUxpc3QoKSxcbiAgICB7IGtleTogJ2F1dG8nLCBkZXNjOiBgZm9sbG93IHRoZSB0ZXJtaW5hbCAoZGV0ZWN0ZWQ6ICR7Ym9vdC5kZXRlY3RlZFRoZW1lIHx8ICdkYXJrJ30pYCB9LFxuICBdXG5cbiAgZnVuY3Rpb24gcGFsZXR0ZUZvcihwcmVmKSB7XG4gICAgcmV0dXJuIHByZWYgPT09ICdhdXRvJyA/IGJvb3QuZGV0ZWN0ZWRUaGVtZSB8fCAnZGFyaycgOiBwcmVmXG4gIH1cblxuICBmdW5jdGlvbiBwcmV2aWV3UGFsZXR0ZShwcmVmKSB7XG4gICAgc2V0UGFsZXR0ZShwYWxldHRlRm9yKHByZWYpKVxuICAgIGJvb3Quc2V0VGhlbWU/Lih7IGFjY2VudDogYWNjZW50KCksIG11dGVkOiBNVVRFRCB9KVxuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlUaGVtZVByZWYocHJlZikge1xuICAgIHNldFRoZW1lUHJlZihwcmVmKVxuICAgIHByZXZpZXdQYWxldHRlKHByZWYpXG4gICAgd3JpdGVDb25maWcoeyB0aGVtZTogcHJlZiA9PT0gJ2F1dG8nID8gdW5kZWZpbmVkIDogcHJlZiB9KS5jYXRjaCgoKSA9PiB7fSlcbiAgICBmbGFzaChwcmVmID09PSAnYXV0bycgPyBgdGhlbWU6IGF1dG8gIGZvbGxvd2luZyB0aGUgdGVybWluYWwgKCR7cGFsZXR0ZUZvcignYXV0bycpfSlgIDogYHRoZW1lOiAke3ByZWZ9YClcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0ZWVyUHJldmlldygpIHtcbiAgICByZXR1cm4gY3RsLnByZXZpZXdTdGVlcihzdGVlcigpPy5jaGFuZ2VzKVxuICB9XG5cbiAgZnVuY3Rpb24gc3RlZXJSb3dzKCkge1xuICAgIHJldHVybiBzdGVlcmFibGVUcmFuc2NyaXB0KHN0ZWVyUHJldmlldygpLnRyYW5zY3JpcHQpXG4gIH1cblxuICBmdW5jdGlvbiBiZWdpblN0ZWVyKCkge1xuICAgIGlmIChidXN5KCkgfHwgY29tcGFjdGluZygpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBmaXJzdCcpXG4gICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1heCgwLCByb3dzLmxlbmd0aCAtIDEpXG4gICAgc2V0U3RlZXIoeyBzZWxlY3RlZCwgZWRpdGluZzogZmFsc2UsIGFkZGluZzogZmFsc2UsIHJvbGU6ICd1c2VyJywgY2hhbmdlczogW10gfSlcbiAgICBpZiAocm93c1tzZWxlY3RlZF0pIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3Nbc2VsZWN0ZWRdLm1lc3NhZ2VJZClcbiAgICBzZXRIaXN0V2luZG93KEluZmluaXR5KVxuICAgIHNldEZvbGxvdyh0cnVlKVxuICAgIGZtLmZvY3VzKCdzdGVlcicpXG4gIH1cblxuICBmdW5jdGlvbiBjbG9zZVN0ZWVyKGFwcGxpZWQgPSBmYWxzZSkge1xuICAgIHNldFN0ZWVyKG51bGwpXG4gICAgc2V0U3RlZXJUZXh0KCcnKVxuICAgIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgZm0uZm9jdXMoJ2lucHV0JylcbiAgICBpZiAoYXBwbGllZCkgZmxhc2goJ2NvbnZlcnNhdGlvbiBzdGVlcmluZyBhcHBsaWVkICBub3RoaW5nIHNlbnQnKVxuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlTdGVlcigpIHtcbiAgICBjb25zdCBkcmFmdCA9IHN0ZWVyKClcbiAgICBpZiAoIWRyYWZ0Py5jaGFuZ2VzLmxlbmd0aCkgcmV0dXJuIGNsb3NlU3RlZXIoKVxuICAgIGN0bC5hcHBseVN0ZWVyKGRyYWZ0LmNoYW5nZXMpXG4gICAgY2xvc2VTdGVlcih0cnVlKVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnRTdGVlckVkaXQoKSB7XG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgY29uc3Qgcm93ID0gc3RlZXJSb3dzKClbZHJhZnQuc2VsZWN0ZWRdXG4gICAgaWYgKCFyb3cpIHJldHVybiBzdGFydFN0ZWVyQWRkKClcbiAgICBpZiAocm93LmxvY2tlZCkgcmV0dXJuIGZsYXNoKCdsb2NrZWQgIHRoaXMgbWVzc2FnZSBpcyBiZWZvcmUgdGhlIGxhdGVzdCBjb21wYWN0aW9uJylcbiAgICBzZXRTdGVlclRleHQocm93LnRleHQpXG4gICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgZWRpdGluZzogdHJ1ZSwgYWRkaW5nOiBmYWxzZSwgcm9sZTogcm93LnJvbGUgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXJ0U3RlZXJBZGQoKSB7XG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSByb3dzW2RyYWZ0LnNlbGVjdGVkXVxuICAgIGNvbnN0IHByZXZpb3VzUm9sZSA9IHNlbGVjdGVkPy5yb2xlXG4gICAgY29uc3Qgcm9sZSA9IHByZXZpb3VzUm9sZSA9PT0gJ3VzZXInID8gJ2Fzc2lzdGFudCcgOiBTVEVFUl9ST0xFU1swXVxuICAgIHNldFN0ZWVyVGV4dCgnJylcbiAgICBzZXRTdGVlcih7IC4uLmRyYWZ0LCBlZGl0aW5nOiB0cnVlLCBhZGRpbmc6IHRydWUsIHJvbGUgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YWdlU3RlZXJUZXh0KHRleHQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRleHQudHJpbSgpXG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZsYXNoKCdtZXNzYWdlIGNhbm5vdCBiZSBlbXB0eScpXG4gICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgY29uc3QgdGFyZ2V0ID0gcm93c1tkcmFmdC5zZWxlY3RlZF1cbiAgICBjb25zdCBjaGFuZ2UgPSBkcmFmdC5hZGRpbmdcbiAgICAgID8geyBvcDogJ2luc2VydCcsIGlkOiBtYWtlRXZlbnQoJ21lc3NhZ2UnKS5pZCwgYWZ0ZXI6IHRhcmdldD8ubWVzc2FnZUlkID8/IG51bGwsIG1lc3NhZ2U6IHsgcm9sZTogZHJhZnQucm9sZSwgY29udGVudDogdmFsdWUgfSB9XG4gICAgICA6IHsgb3A6ICdyZXBsYWNlJywgdGFyZ2V0OiB0YXJnZXQubWVzc2FnZUlkLCBtZXNzYWdlOiB7IHJvbGU6IGRyYWZ0LnJvbGUsIGNvbnRlbnQ6IHZhbHVlIH0gfVxuICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIGVkaXRpbmc6IGZhbHNlLCBhZGRpbmc6IGZhbHNlLCBjaGFuZ2VzOiBbLi4uZHJhZnQuY2hhbmdlcywgY2hhbmdlXSB9KVxuICAgIHNldFN0ZWVyVGV4dCgnJylcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YWdlU3RlZXJEZWxldGUoKSB7XG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgY29uc3QgdGFyZ2V0ID0gcm93c1tkcmFmdC5zZWxlY3RlZF1cbiAgICBpZiAoIXRhcmdldCkgcmV0dXJuXG4gICAgaWYgKHRhcmdldC5sb2NrZWQpIHJldHVybiBmbGFzaCgnbG9ja2VkICB0aGlzIG1lc3NhZ2UgaXMgYmVmb3JlIHRoZSBsYXRlc3QgY29tcGFjdGlvbicpXG4gICAgY29uc3QgY2hhbmdlcyA9IFsuLi5kcmFmdC5jaGFuZ2VzLCB7IG9wOiAnZGVsZXRlJywgdGFyZ2V0OiB0YXJnZXQubWVzc2FnZUlkIH1dXG4gICAgY29uc3QgcmVtYWluaW5nID0gcm93cy5maWx0ZXIoKHJvdykgPT4gcm93Lm1lc3NhZ2VJZCAhPT0gdGFyZ2V0Lm1lc3NhZ2VJZClcbiAgICBjb25zdCBzZWxlY3RlZCA9IE1hdGgubWluKGRyYWZ0LnNlbGVjdGVkLCBNYXRoLm1heCgwLCByZW1haW5pbmcubGVuZ3RoIC0gMSkpXG4gICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQsIGNoYW5nZXMgfSlcbiAgICBpZiAocmVtYWluaW5nW3NlbGVjdGVkXSkgc3RlZXJMaXN0Rm9jdXMuZm9jdXMocmVtYWluaW5nW3NlbGVjdGVkXS5tZXNzYWdlSWQpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBpbnNlcnRDb21tYW5kKGNvbW1hbmQsIHJhbmdlID0gY29tbWFuZEF0KGlucHV0KCksIGlucHV0Q3Vyc29yKCkpLCBhcmdzID0gJycpIHtcbiAgICBpZiAoIXJhbmdlKSByZXR1cm5cbiAgICBjb25zdCBkcmFmdCA9IGlucHV0KClcbiAgICBjb25zdCB0b2tlbiA9IHt9XG4gICAgcmVmcy5jb21tYW5kRXhwYW5zaW9uID0gdG9rZW5cbiAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBtZXRhZGF0YSA9IGJvb3QuY29tbWFuZHMubGlzdCgpLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gY29tbWFuZC5uYW1lKVxuICAgICAgY29uc3QgeyBib2R5IH0gPSBwYXJzZUZyb250bWF0dGVyKGF3YWl0IHJlYWRGaWxlKG1ldGFkYXRhLmZpbGUsICd1dGYtOCcpKVxuICAgICAgaWYgKHJlZnMuY29tbWFuZEV4cGFuc2lvbiAhPT0gdG9rZW4gfHwgaW5wdXQoKSAhPT0gZHJhZnQpIHJldHVyblxuICAgICAgY29uc3QgZm9ybSA9IHsgbmFtZTogY29tbWFuZC5uYW1lLCBib2R5OiBib2R5LnRyaW0oKSwgZHJhZnQsIHJhbmdlLCBhcmdzLCB0b2tlbiB9XG4gICAgICBjb25zdCBmaWVsZHMgPSBjb21tYW5kRmllbGRzKHsgYXJndW1lbnRzOiBwYXJzZUNvbW1hbmRBcmd1bWVudHMoYm9keSkgfSwgYm9keSwgYXJncylcbiAgICAgIGlmIChmaWVsZHMubGVuZ3RoKSB7XG4gICAgICAgIHNldENvbW1hbmRGb3JtKHsgLi4uZm9ybSwgZmllbGRzIH0pXG4gICAgICAgIGlmIChmaWVsZHMuc29tZSgoZmllbGQpID0+IGZpZWxkLnR5cGUgPT09ICdwYXRoJykpIHtcbiAgICAgICAgICBsaXN0RmlsZXMoY3dkKS50aGVuKHNldEZpbGVMaXN0KS5jYXRjaCgoZXJyb3IpID0+IGZsYXNoKGVycm9yLm1lc3NhZ2UpKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgZmluaXNoQ29tbWFuZChmb3JtLCB7fSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZmxhc2goYGNvdWxkIG5vdCBsb2FkIC8ke2NvbW1hbmQubmFtZX06ICR7ZXJyb3IubWVzc2FnZX1gKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmlzaENvbW1hbmQoZm9ybSwgdmFsdWVzKSB7XG4gICAgaWYgKHJlZnMuY29tbWFuZEV4cGFuc2lvbiAhPT0gZm9ybS50b2tlbiB8fCBpbnB1dCgpICE9PSBmb3JtLmRyYWZ0KSByZXR1cm5cbiAgICB0cnkge1xuICAgICAgY29uc3QgYm9keSA9IGV4cGFuZENvbW1hbmQoZm9ybS5ib2R5LCB2YWx1ZXNbJyRhcmdzJ10gPz8gZm9ybS5hcmdzLCB2YWx1ZXMpXG4gICAgICBjb25zdCBuZXh0ID0gcmVwbGFjZUNvbW1hbmQoZm9ybS5kcmFmdCwgZm9ybS5yYW5nZSwgYm9keSlcbiAgICAgIHNldElucHV0KG5leHQudGV4dCwgbmV4dC5jdXJzb3IpXG4gICAgICBzZXRDb21tYW5kRm9ybShudWxsKVxuICAgICAgcmVmcy5jb21tYW5kRXhwYW5zaW9uID0gbnVsbFxuICAgICAgZm0uZm9jdXMoJ2lucHV0JylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZmxhc2goZXJyb3IubWVzc2FnZSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBydW5Db21tYW5kKGMsIGFyZ3MgPSAnJykge1xuICAgIGlmICh0eXBlb2YgYXJncyAhPT0gJ3N0cmluZycpIGFyZ3MgPSAnJ1xuICAgIGlmIChjLmNvbW1hbmQpIHJldHVybiBpbnNlcnRDb21tYW5kKGMpXG4gICAgc2V0SW5wdXQoJycpXG4gICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICBpZiAoYy5uYW1lID09PSAnZm9yaycpIHJldHVybiBjdGwuZm9yayhhcmdzLnRyaW0oKSlcbiAgICBpZiAoYy5uYW1lID09PSAncmVuYW1lJykgcmV0dXJuIGN0bC5yZW5hbWUoYXJncylcbiAgICBpZiAoYy5uYW1lID09PSAnY29sb3InKSByZXR1cm4gY3RsLnNldENvbG9yKGFyZ3MpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2NvbmZpZycpIHtcbiAgICAgIHNldFNob3dDb25maWdQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICd0aGVtZScpIHtcbiAgICAgIGlmICghYXJncykgcmV0dXJuIHNldFNob3dUaGVtZVBhbmVsKHRydWUpXG4gICAgICBjb25zdCBjaG9pY2UgPSBhcmdzLnRvTG93ZXJDYXNlKClcbiAgICAgIGNvbnN0IHZhbGlkID0gWy4uLnBhbGV0dGVMaXN0KCkubWFwKChwKSA9PiBwLmtleSksICdhdXRvJ11cbiAgICAgIGlmICghdmFsaWQuaW5jbHVkZXMoY2hvaWNlKSkgcmV0dXJuIGZsYXNoKGB0aGVtZTogJHtwYWxldHRlTmFtZSgpfSAgL3RoZW1lIDwke3ZhbGlkLmpvaW4oJ3wnKX0+YClcbiAgICAgIGFwcGx5VGhlbWVQcmVmKGNob2ljZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5za2lsbCkgcmV0dXJuIGN0bC5zZW5kU2tpbGwoYy5uYW1lKVxuICAgIGlmIChjLm5hbWUgPT09ICdjb25uZWN0JykgcmV0dXJuIG9wZW5Db25uZWN0UGFuZWwoKVxuICAgIGlmIChjLm5hbWUgPT09ICdpbml0JykgcmV0dXJuIGN0bC5zZW5kSW5pdChhcmdzKVxuICAgIGlmIChjLm5hbWUgPT09ICdwYXJhbGxlbCcpIHtcbiAgICAgIGNvbnN0IHRhc2sgPSBhcmdzLnRyaW0oKVxuICAgICAgaWYgKGF3YWl0IGN0bC5zZW5kUGFyYWxsZWwodGFzaykpIHJldHVyblxuICAgICAgc2V0UGVuZGluZ1Jlc2VhcmNoKHsgdGFzayB9KVxuICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdkZWxpYmVyYXRlJykge1xuICAgICAgY29uc3QgZGVjaXNpb24gPSBhcmdzLnRyaW0oKVxuICAgICAgaWYgKGF3YWl0IGN0bC5zZW5kRGVsaWJlcmF0ZShkZWNpc2lvbikpIHJldHVyblxuICAgICAgc2V0UGVuZGluZ0RlbGliZXJhdGlvbih7IGRlY2lzaW9uIH0pXG4gICAgICBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCh0cnVlKVxuICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdtb2RlbCcpIHtcbiAgICAgIGlmICghYXJncykgcmV0dXJuIHNldFNob3dNb2RlbFBhbmVsKHRydWUpXG4gICAgICByZXR1cm4gY3RsLnN3aXRjaE1vZGVsQnlOYW1lKGFyZ3MpXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdyZWZyZXNoLW1vZGVscycpIHJldHVybiByZWZyZXNoTW9kZWxzKClcbiAgICBpZiAoYy5uYW1lID09PSAnc3BlZWQnKSB7XG4gICAgICBpZiAoIXNwZWVkQXBwbGllcygpKSByZXR1cm4gZmxhc2goYCR7bW9kZWwoKS5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IHNwZWVkIGNvbnRyb2xgKVxuICAgICAgaWYgKCFhcmdzKSByZXR1cm4gc2V0U2hvd1NwZWVkUGFuZWwodHJ1ZSlcbiAgICAgIHJldHVybiBjdGwuc3BlZWRDb21tYW5kKGFyZ3MudG9Mb3dlckNhc2UoKSlcbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ2VmZm9ydCcpIHtcbiAgICAgIGlmICghZWZmb3J0QXBwbGllcygpKSByZXR1cm4gZmxhc2goYCR7bW9kZWwoKS5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IGVmZm9ydCBjb250cm9sYClcbiAgICAgIGlmICghYXJncykgcmV0dXJuIHNldFNob3dFZmZvcnRQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuIGN0bC5zZXRFZmZvcnRCeU5hbWUoYXJncy50b0xvd2VyQ2FzZSgpKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAndXBkYXRlJykge1xuICAgICAgaWYgKGlzRGV2SW5zdGFsbChpbXBvcnQubWV0YS51cmwpKSByZXR1cm4gZmxhc2goJ3RoaXMgcGljbyBydW5zIGZyb20gYSBzb3VyY2UgY2hlY2tvdXQgIHVwZGF0ZSBpdCB3aXRoIGdpdCcpXG4gICAgICBjb25zdCBsYXRlc3QgPSBhd2FpdCBmZXRjaExhdGVzdFZlcnNpb24oKS5jYXRjaCgoKSA9PiBudWxsKVxuICAgICAgaWYgKGxhdGVzdCAmJiAhbmV3ZXJWZXJzaW9uKHZlcnNpb24sIGxhdGVzdCkpIHJldHVybiBmbGFzaChgcGljbyB2JHt2ZXJzaW9ufSBpcyBhbHJlYWR5IHRoZSBsYXRlc3RgKVxuICAgICAgZmxhc2goYHVwZGF0aW5nJHtsYXRlc3QgPyBgIHRvIHYke2xhdGVzdH1gIDogJyd9Li4uYClcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJ1blVwZGF0ZSgpXG4gICAgICBpZiAocmVzdWx0Lm9rKSByZXR1cm4gZmxhc2goYHVwZGF0ZWQke2xhdGVzdCA/IGAgdG8gdiR7bGF0ZXN0fWAgOiAnJ30gIHJlc3RhcnQgcGljbyB0byB1c2UgaXRgKVxuICAgICAgcmV0dXJuIGZsYXNoKGB1cGRhdGUgZmFpbGVkOiAke3Jlc3VsdC5vdXRwdXQuc2xpY2UoMCwgMTAwKX1gKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnc3RlZXInKSByZXR1cm4gYmVnaW5TdGVlcigpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2NvbnRleHQnKSByZXR1cm4gb3BlbkNvbnRleHRQYW5lbCgpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2hpc3RvcnknKSByZXR1cm4gb3Blbkhpc3RvcnlTZWFyY2goKVxuICAgIGlmIChjLm5hbWUgPT09ICdoZWxwJykgcmV0dXJuIHNldFZpZXcoJ2hlbHAnKVxuICAgIGlmIChjLm5hbWUgPT09ICdtY3AnKSByZXR1cm4gc2V0U2hvd01jcFBhbmVsKHRydWUpXG4gICAgaWYgKGMubmFtZSA9PT0gJ3dha2V1cHMnKSByZXR1cm4gc2V0U2hvd1dha2V1cHNQYW5lbCh0cnVlKVxuICAgIGlmIChjLm5hbWUgPT09ICdtZW1vcnknKSB7XG4gICAgICBhd2FpdCByZWZyZXNoTWVtb3JpZXMoKVxuICAgICAgcmV0dXJuIHNldFNob3dNZW1vcnlQYW5lbCh0cnVlKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAncmVzdW1lJykge1xuICAgICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gYmVmb3JlIHN3aXRjaGluZyBzZXNzaW9ucycpXG4gICAgICBvcGVuUmVzdW1lUGFuZWwoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdwcm9qZWN0JykgcmV0dXJuIG9wZW5Qcm9qZWN0UGFuZWwoKVxuICAgIGlmIChjLm5hbWUgPT09ICdjd2QnKSB7XG4gICAgICBjb25zdCByb290Tm90ZSA9IGJvb3Qucm9vdCAhPT0gYm9vdC5jd2QgPyBgICBwcm9qZWN0IHJvb3QgJHtzaG9ydGVuUGF0aChib290LnJvb3QpfWAgOiAnJ1xuICAgICAgcmV0dXJuIGZsYXNoKGAke2Jvb3QuZGlzcGxheUN3ZH0ke3Jvb3ROb3RlfWApXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdza2lsbHMnKSB7XG4gICAgICByZXR1cm4gc2V0SW5mb1BhbmVsKHtcbiAgICAgICAgdGl0bGU6ICdTa2lsbHMnLFxuICAgICAgICByb3dzOiBza2lsbHMubGlzdCgpLm1hcCgocykgPT4gKHsgbmFtZTogcy5uYW1lLCBkZXNjOiBzLmRlc2NyaXB0aW9uLCBub3RlOiBzLnNvdXJjZSB9KSksXG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnY29tbWFuZHMnKSB7XG4gICAgICByZXR1cm4gc2V0SW5mb1BhbmVsKHtcbiAgICAgICAgdGl0bGU6ICdDb21tYW5kcycsXG4gICAgICAgIHJvd3M6IFtcbiAgICAgICAgICAuLi5DT01NQU5EUy5tYXAoKGNtZCkgPT4gKHsgbmFtZTogYC8ke2NtZC5uYW1lfWAsIGRlc2M6IGNtZC5kZXNjLCBub3RlOiAnYnVpbHRpbicgfSkpLFxuICAgICAgICAgIC4uLmJvb3QuY29tbWFuZHMubGlzdCgpLm1hcCgoY21kKSA9PiAoeyBuYW1lOiBgLyR7Y21kLm5hbWV9YCwgZGVzYzogY21kLmRlc2NyaXB0aW9uLCBub3RlOiBjbWQuc291cmNlIH0pKSxcbiAgICAgICAgXSxcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICd0b29scycpIHtcbiAgICAgIGNvbnN0IHsgcm93cywgbWNwQ291bnQgfSA9IGF3YWl0IGN0bC5kZXNjcmliZVRvb2xzKClcbiAgICAgIHNldEluZm9QYW5lbCh7IHRpdGxlOiBgVG9vbHMke21jcENvdW50ID8gYCAgcGx1cyAke21jcENvdW50fSBNQ1AgKHNlZSAvbWNwKWAgOiAnJ31gLCByb3dzIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ25ldycpIHJldHVybiBjdGwubmV3U2Vzc2lvbihhcmdzKVxuICAgIGlmIChjLm5hbWUgPT09ICdkZWxldGUnKSB7XG4gICAgICBpZiAoYnVzeSgpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBmaXJzdCcpXG4gICAgICBpZiAoIXN0YXRlLnNlc3Npb24pIHJldHVybiBmbGFzaCgnbm8gY3VycmVudCBzZXNzaW9uIHRvIGRlbGV0ZScpXG4gICAgICBzZXRTaG93RGVsZXRlQ29uZmlybSh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdyZXdpbmQnKSB7XG4gICAgICBpZiAoYnVzeSgpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBmaXJzdCcpXG4gICAgICBpZiAodXNlckVudHJpZXMoZGVyaXZlZCgpKS5sZW5ndGggPT09IDApIHJldHVybiBmbGFzaCgnbm90aGluZyB0byByZXdpbmQgeWV0JylcbiAgICAgIHNldFJld2luZFN0ZXAoJ3BpY2snKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdjbGVhcicpIHJldHVybiBjdGwuY2xlYXIoKVxuICAgIGlmIChjLm5hbWUgPT09ICdjb21wYWN0JykgcmV0dXJuIHBlcmZvcm1Db21wYWN0aW9uKGFyZ3MpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2Nvc3QnKSB7XG4gICAgICBjb25zdCBjb3N0ID0gY3RsLmNvc3RTdW1tYXJ5KClcbiAgICAgIGlmICghY29zdCkgcmV0dXJuIGZsYXNoKCdubyB1c2FnZSB5ZXQnKVxuICAgICAgY29uc3QgYmFzZSA9IGAkJHtjb3N0LnNwZW50LnRvRml4ZWQoNCl9IHNwZW50ICAke2Nvc3QucHJvbXB0VG9rZW5zLnRvTG9jYWxlU3RyaW5nKCl9IGluICAke2Nvc3QuY29tcGxldGlvblRva2Vucy50b0xvY2FsZVN0cmluZygpfSBvdXRgXG4gICAgICBmbGFzaChjb3N0LnNwZW50IC0gY29zdC5hY3RpdmUgPiAwLjAwMDA1ID8gYCR7YmFzZX0gIGN1cnJlbnQgY29udmVyc2F0aW9uICQke2Nvc3QuYWN0aXZlLnRvRml4ZWQoNCl9YCA6IGJhc2UpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ2V4cG9ydCcpIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBjdGwuZXhwb3J0TWFya2Rvd24oKVxuICAgICAgZmxhc2goYGV4cG9ydGVkIHRvICR7ZmlsZX1gKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEF1dGhQcm92aWRlcnMoKSB7XG4gICAgY29uc3Qgb3BlbmFpID0gYXdhaXQgb3BlbmFpU3RhdHVzKCkuY2F0Y2goKCkgPT4gKHsgY29ubmVjdGVkOiBmYWxzZSwgZW1haWw6IG51bGwgfSkpXG4gICAgc2V0QXV0aFByb3ZpZGVycyhbXG4gICAgICB7IGlkOiAnb3BlbmFpJywgbGFiZWw6ICdPcGVuQUkgIENoYXRHUFQgLyBDb2RleCBwbGFuJywgY29ubmVjdGVkOiBvcGVuYWkuY29ubmVjdGVkLCBlbWFpbDogb3BlbmFpLmVtYWlsIH0sXG4gICAgXSlcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5Db25uZWN0UGFuZWwoKSB7XG4gICAgc2V0U2hvd0Nvbm5lY3RQYW5lbCh0cnVlKVxuICAgIHJlZnJlc2hBdXRoUHJvdmlkZXJzKClcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbm5lY3RQcm92aWRlcihwcm92aWRlcikge1xuICAgIGlmIChwcm92aWRlci5pZCAhPT0gJ29wZW5haScpIHJldHVyblxuICAgIHNldFNob3dDb25uZWN0UGFuZWwoZmFsc2UpXG4gICAgZmxhc2goJ29wZW5pbmcgeW91ciBicm93c2VyIGZvciBDaGF0R1BUIHNpZ24taW4uLi4nKVxuICAgIGN0bC5jb25uZWN0UHJvdmlkZXIoKVxuICAgICAgLnRoZW4oKHsgZW1haWwsIGNvdW50IH0pID0+IGZsYXNoKGBjb25uZWN0ZWQgYXMgJHtlbWFpbCB8fCAneW91ciBDaGF0R1BUIGFjY291bnQnfSAgJHtjb3VudH0gY29kZXggbW9kZWxzIHVubG9ja2VkIGluIC9tb2RlbGApKVxuICAgICAgLmNhdGNoKChlcnIpID0+IGZsYXNoKGBjb25uZWN0IGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCAxMjApfWApKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZGlzY29ubmVjdFByb3ZpZGVyKHByb3ZpZGVyKSB7XG4gICAgaWYgKHByb3ZpZGVyLmlkICE9PSAnb3BlbmFpJykgcmV0dXJuXG4gICAgY29uc3QgYXJtZWQgPSByZWZzLmRpc2Nvbm5lY3RBcm1cbiAgICBpZiAoIWFybWVkIHx8IGFybWVkLmlkICE9PSBwcm92aWRlci5pZCB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLmRpc2Nvbm5lY3RBcm0gPSB7IGlkOiBwcm92aWRlci5pZCwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8gZGlzY29ubmVjdCAke3Byb3ZpZGVyLmxhYmVsfSAoeW91IHdpbGwgbmVlZCB0byBzaWduIGluIGFnYWluKWApXG4gICAgfVxuICAgIHJlZnMuZGlzY29ubmVjdEFybSA9IG51bGxcbiAgICBhd2FpdCBjdGwuZGlzY29ubmVjdFByb3ZpZGVyKClcbiAgICByZWZyZXNoQXV0aFByb3ZpZGVycygpXG4gICAgZmxhc2goJ2Rpc2Nvbm5lY3RlZCBmcm9tIENoYXRHUFQnKVxuICB9XG5cbiAgZnVuY3Rpb24gb3BlblJlc3VtZVBhbmVsKCkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSArK3JlZnMucmVzdW1lT3BlblxuICAgIGNvbnN0IHNjb3BlcyA9IFsncmVwb3NpdG9yeScsICdldmVyeXdoZXJlJ11cbiAgICBzZXRSZXN1bWVTY29wZXMoc2NvcGVzKVxuICAgIHNldFJlc3VtZVNjb3BlKDApXG4gICAgc2V0U2hvd1Jlc3VtZVBhbmVsKHRydWUpXG4gICAgcmVmcmVzaFNlc3Npb25zKDAsIHNjb3BlcylcbiAgICBsaXN0V29ya3RyZWVzKG93bmVyUm9vdChib290LnJvb3QpKS50aGVuKCh0cmVlcykgPT4ge1xuICAgICAgaWYgKHRyZWVzLmxlbmd0aCA8IDIgfHwgIXNob3dSZXN1bWVQYW5lbCgpIHx8IHJlcXVlc3QgIT09IHJlZnMucmVzdW1lT3BlbikgcmV0dXJuXG4gICAgICBzZXRSZXN1bWVTY29wZXMoWydyZXBvc2l0b3J5JywgJ2NoZWNrb3V0JywgJ2V2ZXJ5d2hlcmUnXSlcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVmcmVzaFNlc3Npb25zKHNjb3BlSW5kZXgsIHNjb3BlcyA9IHJlc3VtZVNjb3BlcygpKSB7XG4gICAgc2V0UmVzdW1lTG9hZGluZyh0cnVlKVxuICAgIGN0bC5saXN0UmVzdW1lU2Vzc2lvbnMoc2NvcGVzW3Njb3BlSW5kZXhdKVxuICAgICAgLnRoZW4oc2V0UmVzdW1lU2Vzc2lvbnMpXG4gICAgICAuZmluYWxseSgoKSA9PiBzZXRSZXN1bWVMb2FkaW5nKGZhbHNlKSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3J0ZW5QYXRoKHBhdGgpIHtcbiAgICBjb25zdCBob21lID0gaG9tZWRpcigpXG4gICAgcmV0dXJuIHBhdGguc3RhcnRzV2l0aChob21lKSA/IHBhdGgucmVwbGFjZShob21lLCAnficpIDogcGF0aFxuICB9XG5cbiAgZnVuY3Rpb24gb3BlblByb2plY3RQYW5lbCgpIHtcbiAgICBpZiAoYnVzeSgpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBiZWZvcmUgc3dpdGNoaW5nIHNlc3Npb25zJylcbiAgICBzZXRTaG93UHJvamVjdFBhbmVsKHRydWUpXG4gICAgcmVmcmVzaFByb2plY3RzKClcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hQcm9qZWN0cygpIHtcbiAgICBzZXRQcm9qZWN0c0xvYWRpbmcodHJ1ZSlcbiAgICB0cnkge1xuICAgICAgY29uc3QgbGlzdCA9IGF3YWl0IGN0bC5saXN0UHJvamVjdHMoKVxuICAgICAgc2V0UHJvamVjdHMobGlzdC5tYXAoKHByb2plY3QpID0+ICh7XG4gICAgICAgIC4uLnByb2plY3QsXG4gICAgICAgIHBhdGg6IHNob3J0ZW5QYXRoKHByb2plY3Qucm9vdCksXG4gICAgICAgIGNoZWNrb3V0czogcHJvamVjdC5jaGVja291dHMubWFwKChjaGVja291dCkgPT4gKHsgLi4uY2hlY2tvdXQsIHBhdGg6IHNob3J0ZW5QYXRoKGNoZWNrb3V0LnJvb3QpIH0pKSxcbiAgICAgIH0pKSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0UHJvamVjdHNMb2FkaW5nKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGFkZFByb2plY3RXb3JrdHJlZShjaGVja291dCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0cmVlID0gYXdhaXQgY3RsLmFkZFdvcmt0cmVlKGNoZWNrb3V0Lm93bmVyKVxuICAgICAgYXdhaXQgY3RsLnN3aXRjaFRvV29ya3RyZWUoeyByb290OiB0cmVlLnBhdGggfSlcbiAgICAgIHNldFNob3dQcm9qZWN0UGFuZWwoZmFsc2UpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmbGFzaChgd29ya3RyZWUgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDgwKX1gKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZVByb2plY3RDaGVja291dChjaGVja291dCkge1xuICAgIGlmIChjaGVja291dC53b3JrdHJlZSkge1xuICAgICAgaWYgKGNoZWNrb3V0LmN1cnJlbnQpIHJldHVybiBmbGFzaCgnY2Fubm90IHJlbW92ZSB0aGUgY3VycmVudCB3b3JrdHJlZSAgc3dpdGNoIGF3YXkgZmlyc3QnKVxuICAgICAgY29uc3QgYXJtZWQgPSByZWZzLnByb2plY3REZWxldGVBcm1cbiAgICAgIGlmICghYXJtZWQgfHwgYXJtZWQucm9vdCAhPT0gY2hlY2tvdXQucm9vdCB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICAgIHJlZnMucHJvamVjdERlbGV0ZUFybSA9IHsgcm9vdDogY2hlY2tvdXQucm9vdCwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byByZW1vdmUgXCIke2NoZWNrb3V0LmJyYW5jaCB8fCBjaGVja291dC5wYXRofVwiIGFuZCBpdHMgJHtjaGVja291dC5jb3VudH0gJHtjaGVja291dC5jb3VudCA9PT0gMSA/ICdzZXNzaW9uJyA6ICdzZXNzaW9ucyd9YClcbiAgICAgIH1cbiAgICAgIHJlZnMucHJvamVjdERlbGV0ZUFybSA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGN0bC5kZWxldGVXb3JrdHJlZShjaGVja291dClcbiAgICAgICAgYXdhaXQgcmVmcmVzaFByb2plY3RzKClcbiAgICAgICAgZmxhc2goYHJlbW92ZWQgJHtjaGVja291dC5icmFuY2ggfHwgY2hlY2tvdXQucGF0aH1gKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGZsYXNoKGByZW1vdmUgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDgwKX1gKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjaGVja291dC5jdXJyZW50KSByZXR1cm4gZmxhc2goJ2Nhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnQgcHJvamVjdCAgc3dpdGNoIGF3YXkgZmlyc3QnKVxuICAgIGNvbnN0IGFybWVkID0gcmVmcy5wcm9qZWN0RGVsZXRlQXJtXG4gICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5yb290ICE9PSBjaGVja291dC5yb290IHx8IERhdGUubm93KCkgLSBhcm1lZC5hdCA+IDMwMDApIHtcbiAgICAgIHJlZnMucHJvamVjdERlbGV0ZUFybSA9IHsgcm9vdDogY2hlY2tvdXQucm9vdCwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8gZGVsZXRlIFwiJHtjaGVja291dC5wYXRofVwiIGFuZCBpdHMgJHtjaGVja291dC5jb3VudH0gJHtjaGVja291dC5jb3VudCA9PT0gMSA/ICdzZXNzaW9uJyA6ICdzZXNzaW9ucyd9YClcbiAgICB9XG4gICAgcmVmcy5wcm9qZWN0RGVsZXRlQXJtID0gbnVsbFxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkZWxldGVQcm9qZWN0RGF0YShjaGVja291dC5yb290KVxuICAgICAgYXdhaXQgcmVmcmVzaFByb2plY3RzKClcbiAgICAgIGZsYXNoKGBkZWxldGVkICR7Y2hlY2tvdXQucGF0aH0gICR7Y2hlY2tvdXQuY291bnR9ICR7Y2hlY2tvdXQuY291bnQgPT09IDEgPyAnc2Vzc2lvbicgOiAnc2Vzc2lvbnMnfSByZW1vdmVkYClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZsYXNoKGBkZWxldGUgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDgwKX1gKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZVNlc3Npb25NZXRhKG1ldGEpIHtcbiAgICBjb25zdCBjdXJyZW50ID0gc3RhdGUuc2Vzc2lvbj8uaWQgPT09IG1ldGEuaGVhZGVyLmlkXG4gICAgaWYgKGN1cnJlbnQgJiYgYnVzeSgpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBmaXJzdCcpXG4gICAgY29uc3QgYXJtZWQgPSByZWZzLmRlbGV0ZUFybVxuICAgIGlmICghYXJtZWQgfHwgYXJtZWQuZmlsZSAhPT0gbWV0YS5maWxlIHx8IERhdGUubm93KCkgLSBhcm1lZC5hdCA+IDMwMDApIHtcbiAgICAgIHJlZnMuZGVsZXRlQXJtID0geyBmaWxlOiBtZXRhLmZpbGUsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIGRlbGV0ZSBcIiR7bWV0YS50aXRsZS5zbGljZSgwLCA1MCl9XCJgKVxuICAgIH1cbiAgICByZWZzLmRlbGV0ZUFybSA9IG51bGxcbiAgICBpZiAoY3VycmVudCkge1xuICAgICAgaWYgKGF3YWl0IGNvbmZpcm1EZWxldGVDdXJyZW50U2Vzc2lvbigpKSByZWZyZXNoU2Vzc2lvbnMocmVzdW1lU2NvcGUoKSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZGVsZXRlU2Vzc2lvbihtZXRhLmZpbGUpXG4gICAgICByZWZyZXNoU2Vzc2lvbnMocmVzdW1lU2NvcGUoKSlcbiAgICAgIGZsYXNoKCdzZXNzaW9uIGRlbGV0ZWQnKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYGRlbGV0ZSBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgODApfWApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVzdW1lU2Vzc2lvbihtZXRhKSB7XG4gICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gYmVmb3JlIHN3aXRjaGluZyBzZXNzaW9ucycpXG4gICAgc2V0U2hvd1Jlc3VtZVBhbmVsKGZhbHNlKVxuICAgIHNldFNob3dQcm9qZWN0UGFuZWwoZmFsc2UpXG4gICAgYXdhaXQgY3RsLnJlc3VtZShtZXRhKVxuICB9XG5cbiAgZnVuY3Rpb24gb3Blbkhpc3RvcnlTZWFyY2goKSB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNlbnQoKVxuICAgIHNldEhpc3RQcm9tcHRzKGRlZHVwZVByb21wdHMoc2Vzc2lvbikpXG4gICAgc2V0U2hvd0hpc3RvcnlQYW5lbCh0cnVlKVxuICAgIHNldEhpc3RTY29wZSgwKVxuICB9XG5cbiAgZnVuY3Rpb24gZGVkdXBlUHJvbXB0cyhwb29sKSB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQoKVxuICAgIGNvbnN0IG91dCA9IFtdXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBbLi4ucG9vbF0uc29ydCgoYSwgYikgPT4gYi5hdCAtIGEuYXQpKSB7XG4gICAgICBpZiAoc2Vlbi5oYXMoZW50cnkudGV4dCkpIGNvbnRpbnVlXG4gICAgICBzZWVuLmFkZChlbnRyeS50ZXh0KVxuICAgICAgb3V0LnB1c2goZW50cnkpXG4gICAgfVxuICAgIHJldHVybiBvdXRcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHN3aXRjaEhpc3RTY29wZShuZXh0KSB7XG4gICAgc2V0SGlzdFNjb3BlKG5leHQpXG4gICAgaWYgKG5leHQgPT09IDApIHJldHVybiBzZXRIaXN0UHJvbXB0cyhkZWR1cGVQcm9tcHRzKHNlbnQoKSkpXG4gICAgY29uc3QgcHJvamVjdCA9IGF3YWl0IGxvYWRQcm9qZWN0UHJvbXB0cyhyb290KVxuICAgIGlmIChuZXh0ID09PSAxKSByZXR1cm4gc2V0SGlzdFByb21wdHMoZGVkdXBlUHJvbXB0cyhbLi4uc2VudCgpLCAuLi5wcm9qZWN0XSkpXG4gICAgY29uc3QgZ2xvYmFsID0gYXdhaXQgbG9hZEdsb2JhbFByb21wdHMoKVxuICAgIHNldEhpc3RQcm9tcHRzKGRlZHVwZVByb21wdHMoWy4uLnNlbnQoKSwgLi4ucHJvamVjdCwgLi4uZ2xvYmFsXSkpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBwZXJmb3JtUmV3aW5kVG8odGFyZ2V0LCBvcHQpIHtcbiAgICBhd2FpdCBjdGwucmV3aW5kKHRhcmdldCwgb3B0LmtleSlcbiAgICBzZXRSZXdpbmRTdGVwKG51bGwpXG4gICAgc2V0UmV3aW5kVGFyZ2V0KG51bGwpXG4gIH1cblxuICBmdW5jdGlvbiBwZXJmb3JtUmV3aW5kKG9wdCkge1xuICAgIHJldHVybiBwZXJmb3JtUmV3aW5kVG8ocmV3aW5kVGFyZ2V0KCksIG9wdClcbiAgfVxuXG4gIGNvbnN0IHVuZG9SZXdpbmQgPSBjdGwudW5kb1Jld2luZFxuXG4gIGFzeW5jIGZ1bmN0aW9uIGNvbmZpcm1EZWxldGVDdXJyZW50U2Vzc2lvbigpIHtcbiAgICBjb25zdCBkZWxldGVkID0gYXdhaXQgY3RsLmRlbGV0ZUN1cnJlbnRTZXNzaW9uKClcbiAgICBzZXRTaG93RGVsZXRlQ29uZmlybShmYWxzZSlcbiAgICByZXR1cm4gZGVsZXRlZFxuICB9XG5cbiAgY29uc3QgYW55UGFuZWwgPSAoKSA9PlxuICAgIHNob3dNb2RlbFBhbmVsKCkgfHwgc2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCgpIHx8IHNob3dTcGVlZFBhbmVsKCkgfHwgc2hvd0VmZm9ydFBhbmVsKCkgfHwgc2hvd1RoZW1lUGFuZWwoKSB8fCBzaG93Q29uZmlnUGFuZWwoKSB8fCBzaG93RGVsZXRlQ29uZmlybSgpIHx8IHNob3dNZW1vcnlQYW5lbCgpIHx8IHNob3dIaXN0b3J5UGFuZWwoKSB8fCBzaG93UmVzdW1lUGFuZWwoKSB8fCBzaG93TWNwUGFuZWwoKSB8fFxuICAgIHNob3dQcm9qZWN0UGFuZWwoKSB8fCBzaG93V2FrZXVwc1BhbmVsKCkgfHwgc2hvd0Nvbm5lY3RQYW5lbCgpIHx8XG4gICAgY29tbWFuZEZvcm0oKSAhPT0gbnVsbCB8fCBpbmZvUGFuZWwoKSAhPT0gbnVsbCB8fCByZXdpbmRTdGVwKCkgIT09IG51bGxcblxuICAvLyBldmVyeSBmb2N1cy10YWtpbmcgcGFuZWwgZGltcyB0aGUgY29udmVyc2F0aW9uIGJlaGluZCBpdDsgdGhlIHRoZW1lXG4gIC8vIHBpY2tlciBpcyB0aGUgb25lIGV4ZW1wdGlvbiwgc2luY2UgaXRzIGpvYiBpcyBwcmV2aWV3aW5nIHBhbGV0dGVzIG9uXG4gIC8vIHRoZSB1bmRpbW1lZCB1aVxuICBjb25zdCBkaW1taW5nUGFuZWwgPSAoKSA9PiBhbnlQYW5lbCgpICYmICFzaG93VGhlbWVQYW5lbCgpXG5cbiAgZnVuY3Rpb24gY2FuY2VsQWdlbnQoYWdlbnQpIHtcbiAgICBjdGwuY2FuY2VsQWdlbnQoYWdlbnQuaWQpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBkaXNtaXNzQWdlbnQoYWdlbnQpIHtcbiAgICBpZiAoIWF3YWl0IGN0bC5kaXNtaXNzQWdlbnQoYWdlbnQuaWQpKSByZXR1cm5cbiAgICBpZiAodmlld2VkQWdlbnRJZCgpID09PSBhZ2VudC5pZCkgc2V0Vmlld2VkQWdlbnRJZChudWxsKVxuICB9XG5cbiAgZnVuY3Rpb24gc3RvcE9yRGlzbWlzc0RlbGliZXJhdGlvbihpdGVtKSB7XG4gICAgaWYgKGl0ZW0uc3RhdHVzID09PSAncnVubmluZycpIHtcbiAgICAgIGludGVycnVwdCgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY3RsLmRpc21pc3NEZWxpYmVyYXRpb24oaXRlbS5kZWxpYmVyYXRpb25JZClcbiAgICBpZiAodmlld2VkQWdlbnRJZCgpID09PSBpdGVtLmlkKSBzZXRWaWV3ZWRBZ2VudElkKG51bGwpXG4gIH1cblxuICBmdW5jdGlvbiBkaXNtaXNzU2hlbGwoc2hlbGwpIHtcbiAgICBib290LnNoZWxscy5kaXNtaXNzKHNoZWxsLmlkKVxuICAgIGlmICh2aWV3ZWRTaGVsbElkKCkgPT09IHNoZWxsLmlkKSBzZXRWaWV3ZWRTaGVsbElkKG51bGwpXG4gIH1cblxuICBmdW5jdGlvbiBraWxsU2hlbGwoc2hlbGwpIHtcbiAgICBpZiAoc2hlbGwuc3RhdHVzICE9PSAncnVubmluZycpIHJldHVybiBmbGFzaChgc2hlbGwgJHtzaGVsbC5pZH0gYWxyZWFkeSBleGl0ZWRgKVxuICAgIGNvbnN0IGFybWVkID0gcmVmcy5zaGVsbEtpbGxBcm1cbiAgICBpZiAoIWFybWVkIHx8IGFybWVkLmlkICE9PSBzaGVsbC5pZCB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLnNoZWxsS2lsbEFybSA9IHsgaWQ6IHNoZWxsLmlkLCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byBraWxsIFwiJHtzaGVsbC5kZXNjcmlwdGlvbiB8fCBgc2hlbGwgJHtzaGVsbC5pZH1gfVwiYClcbiAgICB9XG4gICAgcmVmcy5zaGVsbEtpbGxBcm0gPSBudWxsXG4gICAgYm9vdC5zaGVsbHMua2lsbChzaGVsbC5pZCwgJ3VzZXInKVxuICB9XG5cbiAgY29uc3Qgc3BlZWRBcHBsaWVzID0gY3RsLnNwZWVkQXBwbGllc1xuICBjb25zdCBlZmZvcnRBcHBsaWVzID0gY3RsLmVmZm9ydEFwcGxpZXNcbiAgY29uc3Qgc2V0U2Vzc2lvbkVmZm9ydCA9IGN0bC5zZXRFZmZvcnRcblxuICBjb25zdCBmbSA9IHVzZUZvY3VzKHsgaW5pdGlhbDogJ2lucHV0JyB9KVxuICBjb25zdCBzdGVlckxpc3RGb2N1cyA9IHVzZUZvY3VzKHsgaW5pdGlhbDogbnVsbCwgY3ljbGU6ICdub25lJywgYWN0aXZlOiBmYWxzZSB9KVxuICBmbS5pdGVtKCdmZWVkJylcbiAgaWYgKHN0ZWVyKCkpIHtcbiAgICBmbS5pdGVtKCdzdGVlcicpXG4gICAgaWYgKCFmbS5pcygnc3RlZXInKSkgZm0uZm9jdXMoJ3N0ZWVyJylcbiAgfVxuICBjb25zdCBjb252ZXJzYXRpb25TZWFyY2ggPSBjcmVhdGVDb252ZXJzYXRpb25TZWFyY2goeyBmbSwgdmVyYm9zZSwgc2V0Rm9sbG93LCBzZXRPZmZzZXQgfSlcbiAgY29udmVyc2F0aW9uU2VhcmNoLnJlZ2lzdGVyRm9jdXMoKVxuICBsZXQgY29udmVyc2F0aW9uU2VhcmNoTWF0Y2hlcyA9IFtdXG4gIGFnZW50c1ZlcnNpb24oKVxuICBjb25zdCBhZ2VudFJvd3MgPSBjdGwuYWN0aXZpdHkoKVxuICBzaGVsbHNWZXJzaW9uKClcbiAgY29uc3Qgc2hlbGxSb3dzID0gY3RsLnNoZWxsUm93cygpXG4gIGlmIChxdWVzdGlvblJlcXVlc3QoKSkge1xuICAgIGZtLml0ZW0oJ3F1ZXN0aW9uJylcbiAgICBpZiAoIWZtLmlzKCdxdWVzdGlvbicpKSBmbS5mb2N1cygncXVlc3Rpb24nKVxuICB9IGVsc2Uge1xuICAgIGlmICghdmlld2VkQWdlbnRJZCgpICYmICF2aWV3ZWRTaGVsbElkKCkpIGZtLml0ZW0oJ2lucHV0JylcbiAgICBpZiAoc2hlbGxSb3dzLmxlbmd0aCA+IDAgJiYgYWdlbnRSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZtLmdyb3VwKCdhY3Rpdml0eS1zdHJpcCcsIHsgaXRlbXM6IFsnYWN0aXZpdHktbWFpbicsIC4uLnNoZWxsUm93cy5tYXAoKHMpID0+IGBzaGVsbC0ke3MuaWR9YCksIC4uLmFnZW50Um93cy5tYXAoKGEpID0+IGBhZ2VudC0ke2EuaWR9YCldLCBuYXZpZ2F0ZTogJ2JvdGgnLCB3cmFwOiB0cnVlIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzaGVsbFJvd3MubGVuZ3RoID4gMCkgZm0uZ3JvdXAoJ3NoZWxsLXN0cmlwJywgeyBpdGVtczogWydzaGVsbC1tYWluJywgLi4uc2hlbGxSb3dzLm1hcCgocykgPT4gYHNoZWxsLSR7cy5pZH1gKV0sIG5hdmlnYXRlOiAnYm90aCcsIHdyYXA6IHRydWUgfSlcbiAgICAgIGlmIChhZ2VudFJvd3MubGVuZ3RoID4gMCkgZm0uZ3JvdXAoJ2FnZW50LXN0cmlwJywgeyBpdGVtczogWydhZ2VudC1tYWluJywgLi4uYWdlbnRSb3dzLm1hcCgoYSkgPT4gYGFnZW50LSR7YS5pZH1gKV0sIG5hdmlnYXRlOiAnYm90aCcsIHdyYXA6IHRydWUgfSlcbiAgICB9XG4gICAgaWYgKHJlZnMuZm9jdXNDb21wb3NlckFmdGVyUXVlc3Rpb24gJiYgIXZpZXdlZEFnZW50SWQoKSAmJiAhdmlld2VkU2hlbGxJZCgpKSB7XG4gICAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlclF1ZXN0aW9uID0gZmFsc2VcbiAgICAgIGZtLmZvY3VzKCdpbnB1dCcpXG4gICAgfVxuICB9XG4gIGlmICh3b3Jrc3BhY2VPcGVuKCkpIHsgZm0uaXRlbSgnd29ya3NwYWNlJyk7IGZtLmZvY3VzKCd3b3Jrc3BhY2UnKSB9XG4gIGVsc2UgaWYgKHJlZnMuZm9jdXNDb21wb3NlckFmdGVyV29ya3NwYWNlKSB7XG4gICAgcmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJXb3Jrc3BhY2UgPSBmYWxzZVxuICAgIGZtLmZvY3VzKHF1ZXN0aW9uUmVxdWVzdCgpID8gJ3F1ZXN0aW9uJyA6ICdpbnB1dCcpXG4gIH1cbiAgdXNlRm9jdXNUcmFwKHdvcmtzcGFjZU9wZW4oKSB8fCBhbnlQYW5lbCgpIHx8IHZpZXcoKSA9PT0gJ2hlbHAnKVxuICB1c2VTZWxlY3Rpb24oe1xuICAgIG9uQ29weTogKHRleHQpID0+IGZsYXNoKGBjb3BpZWQgJHt0ZXh0Lmxlbmd0aH0gJHt0ZXh0Lmxlbmd0aCA9PT0gMSA/ICdjaGFyYWN0ZXInIDogJ2NoYXJhY3RlcnMnfWApLFxuICB9KVxuXG4gIGZ1bmN0aW9uIG5hdmlnYXRlQWN0aXZpdHlTdHJpcChldmVudCkge1xuICAgIGNvbnN0IGl0ZW1zID0gWydhY3Rpdml0eS1tYWluJywgLi4uc2hlbGxSb3dzLm1hcCgoc2hlbGwpID0+IGBzaGVsbC0ke3NoZWxsLmlkfWApLCAuLi5hZ2VudFJvd3MubWFwKChhZ2VudCkgPT4gYGFnZW50LSR7YWdlbnQuaWR9YCldXG4gICAgY29uc3QgY3VycmVudCA9IGl0ZW1zLmluZGV4T2YoZm0uY3VycmVudCgpKVxuICAgIGxldCBuZXh0ID0gY3VycmVudFxuICAgIGlmICghZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdnJykgbmV4dCA9IDBcbiAgICBlbHNlIGlmICghZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdHJykgbmV4dCA9IGl0ZW1zLmxlbmd0aCAtIDFcbiAgICBlbHNlIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2QnKSBuZXh0ID0gTWF0aC5taW4oaXRlbXMubGVuZ3RoIC0gMSwgY3VycmVudCArIE1hdGgubWF4KDEsIE1hdGguZmxvb3IoQUdFTlRfU1RSSVBfTUFYIC8gMikpKVxuICAgIGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAndScpIG5leHQgPSBNYXRoLm1heCgwLCBjdXJyZW50IC0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihBR0VOVF9TVFJJUF9NQVggLyAyKSkpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaicgfHwgZXZlbnQua2V5ID09PSAnZG93bicpIG5leHQgPSAoY3VycmVudCArIDEgKyBpdGVtcy5sZW5ndGgpICUgaXRlbXMubGVuZ3RoXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaycgfHwgZXZlbnQua2V5ID09PSAndXAnKSBuZXh0ID0gKGN1cnJlbnQgLSAxICsgaXRlbXMubGVuZ3RoKSAlIGl0ZW1zLmxlbmd0aFxuICAgIGVsc2UgcmV0dXJuIGZhbHNlXG4gICAgY29uc3QgdGFyZ2V0ID0gaXRlbXNbbmV4dF1cbiAgICBmbS5mb2N1cyh0YXJnZXQpXG4gICAgc2V0Vmlld2VkU2hlbGxJZCh0YXJnZXQuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyB0YXJnZXQuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSA6IG51bGwpXG4gICAgc2V0Vmlld2VkQWdlbnRJZCh0YXJnZXQuc3RhcnRzV2l0aCgnYWdlbnQtJykgPyB0YXJnZXQuc2xpY2UoJ2FnZW50LScubGVuZ3RoKSA6IG51bGwpXG4gICAgc2V0Rm9sbG93KHRydWUpXG4gICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBuYXZpZ2F0ZVN0cmlwKGV2ZW50LCBwcmVmaXgsIHJvd3MsIHsgbWFpbiA9IGZhbHNlLCBwcmV2aWV3QWdlbnQgPSBmYWxzZSwgcHJldmlld1NoZWxsID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgY29uc3QgaXRlbXMgPSBbLi4uKG1haW4gPyBbYCR7cHJlZml4fS1tYWluYF0gOiBbXSksIC4uLnJvd3MubWFwKChyb3cpID0+IGAke3ByZWZpeH0tJHtyb3cuaWR9YCldXG4gICAgY29uc3QgY3VycmVudCA9IGl0ZW1zLmluZGV4T2YoZm0uY3VycmVudCgpKVxuICAgIGxldCBuZXh0ID0gY3VycmVudFxuICAgIGlmICghZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdnJykgbmV4dCA9IDBcbiAgICBlbHNlIGlmICghZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdHJykgbmV4dCA9IGl0ZW1zLmxlbmd0aCAtIDFcbiAgICBlbHNlIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2QnKSBuZXh0ID0gTWF0aC5taW4oaXRlbXMubGVuZ3RoIC0gMSwgY3VycmVudCArIE1hdGgubWF4KDEsIE1hdGguZmxvb3IoQUdFTlRfU1RSSVBfTUFYIC8gMikpKVxuICAgIGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAndScpIG5leHQgPSBNYXRoLm1heCgwLCBjdXJyZW50IC0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihBR0VOVF9TVFJJUF9NQVggLyAyKSkpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaicgfHwgZXZlbnQua2V5ID09PSAnZG93bicpIG5leHQgPSAoY3VycmVudCArIDEgKyBpdGVtcy5sZW5ndGgpICUgaXRlbXMubGVuZ3RoXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaycgfHwgZXZlbnQua2V5ID09PSAndXAnKSBuZXh0ID0gKGN1cnJlbnQgLSAxICsgaXRlbXMubGVuZ3RoKSAlIGl0ZW1zLmxlbmd0aFxuICAgIGVsc2UgcmV0dXJuIGZhbHNlXG4gICAgY29uc3QgdGFyZ2V0ID0gaXRlbXNbbmV4dF1cbiAgICBmbS5mb2N1cyh0YXJnZXQpXG4gICAgaWYgKHByZXZpZXdBZ2VudCkge1xuICAgICAgc2V0Vmlld2VkQWdlbnRJZCh0YXJnZXQgPT09ICdhZ2VudC1tYWluJyA/IG51bGwgOiB0YXJnZXQuc2xpY2UoJ2FnZW50LScubGVuZ3RoKSlcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICB9XG4gICAgaWYgKHByZXZpZXdTaGVsbCkge1xuICAgICAgc2V0Vmlld2VkU2hlbGxJZCh0YXJnZXQgPT09ICdzaGVsbC1tYWluJyA/IG51bGwgOiB0YXJnZXQuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSlcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgIH1cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICB1c2VJbnB1dChhc3luYyAoZXZlbnQpID0+IHtcbiAgICBpZiAod29ya3NwYWNlT3BlbigpKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgICAgc2V0V29ya3NwYWNlUGVuZGluZyh0cnVlKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGJvb3Qud29ya3NwYWNlLmNhbmNlbFByZXZpZXcoKVxuICAgICAgICAgIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyV29ya3NwYWNlID0gdHJ1ZVxuICAgICAgICAgIHNldFdvcmtzcGFjZU9wZW4oZmFsc2UpXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgc2V0V29ya3NwYWNlRXJyb3IoYHJldHVybiBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKVxuICAgICAgICB9IGZpbmFsbHkgeyBzZXRXb3Jrc3BhY2VQZW5kaW5nKGZhbHNlKSB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKHdvcmtzcGFjZVBlbmRpbmcoKSkgcmV0dXJuXG4gICAgICBjb25zdCBuZXh0ID0gd29ya3NwYWNlTmF2aWdhdGUod29ya3NwYWNlU2Vzc2lvbnMsIHdvcmtzcGFjZVNlbGVjdGVkKCksIGV2ZW50LCB3b3Jrc3BhY2VIZWlnaHQoKSlcbiAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2V0V29ya3NwYWNlU2VsZWN0ZWQobmV4dClcbiAgICAgICAgdm9pZCBib290LndvcmtzcGFjZS5wcmV2aWV3KG5leHQpLmNhdGNoKGVycm9yID0+IHNldFdvcmtzcGFjZUVycm9yKGBwcmV2aWV3IGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IHJvdyA9IHdvcmtzcGFjZVNlc3Npb25zLmZpbmQoKHJvdykgPT4gcm93LmlkID09PSB3b3Jrc3BhY2VTZWxlY3RlZCgpKVxuICAgICAgaWYgKCFyb3cpIHJldHVyblxuICAgICAgY29uc3QgYXR0YWNoID0gIWV2ZW50LmN0cmwgJiYgIWV2ZW50Lm1ldGEgJiYgIWV2ZW50LmFsdCAmJiAoZXZlbnQua2V5ID09PSAncmlnaHQnIHx8IGV2ZW50LmtleSA9PT0gJ2wnKVxuICAgICAgY29uc3QgYWN0aW9uID0gZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4JyA/IHdvcmtzcGFjZUFjdGlvbihyb3cpIDogbnVsbFxuICAgICAgaWYgKCFhdHRhY2ggJiYgIWFjdGlvbikgcmV0dXJuXG4gICAgICBzZXRXb3Jrc3BhY2VQZW5kaW5nKHRydWUpXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoYXR0YWNoKSB7XG4gICAgICAgICAgYXdhaXQgYm9vdC53b3Jrc3BhY2Uuc2VsZWN0KHJvdy5pZClcbiAgICAgICAgICBzZXRJbnB1dCgnJylcbiAgICAgICAgICBzZXRIaXN0SWR4KC0xKVxuICAgICAgICAgIHNldE9mZnNldCgwKVxuICAgICAgICAgIHNldFRyYW5zY3JpcHRNZXRyaWNzKG51bGwpXG4gICAgICAgICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICAgICAgICBkaXNtaXNzQ29tcGxldGlvbigpXG4gICAgICAgICAgc2V0RmlsZXNEaXNtaXNzZWQoZmFsc2UpXG4gICAgICAgICAgY29udmVyc2F0aW9uU2VhcmNoLmNsb3NlKClcbiAgICAgICAgICByZWZzLnVpLnNlc3Npb24oKVxuICAgICAgICAgIHJlZnMudWkuc3luYygpXG4gICAgICAgICAgcmVmcy51aS5kZXJpdmVkKHN0YXRlLmRlcml2ZWQpXG4gICAgICAgICAgcmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJXb3Jrc3BhY2UgPSB0cnVlXG4gICAgICAgICAgc2V0V29ya3NwYWNlT3BlbihmYWxzZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCBib290LndvcmtzcGFjZVthY3Rpb25dKHJvdy5pZClcbiAgICAgICAgICBhd2FpdCByZWZyZXNoV29ya3NwYWNlKClcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc2V0V29ya3NwYWNlRXJyb3IoYCR7YXR0YWNoID8gJ2F0dGFjaCcgOiBhY3Rpb259IGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApXG4gICAgICB9IGZpbmFsbHkgeyBzZXRXb3Jrc3BhY2VQZW5kaW5nKGZhbHNlKSB9XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHJlZnMuZGljdGF0aW9uSW5wdXQuaGFuZGxlKGV2ZW50KSkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoc3RlZXIoKSAmJiBmbS5pcygnc3RlZXInKSAmJiAhc3RlZXIoKS5lZGl0aW5nKSB7XG4gICAgICBjb25zdCBkcmFmdCA9IHN0ZWVyKClcbiAgICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycpIGFwcGx5U3RlZXIoKVxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykgY2xvc2VTdGVlcigpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdyZXR1cm4nKSBzdGFydFN0ZWVyRWRpdCgpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdhJykgc3RhcnRTdGVlckFkZCgpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICd4JyB8fCBldmVudC5rZXkgPT09ICdkJykgc3RhZ2VTdGVlckRlbGV0ZSgpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICd1cCcgfHwgZXZlbnQua2V5ID09PSAnaycpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1heCgwLCBkcmFmdC5zZWxlY3RlZCAtIDEpXG4gICAgICAgIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3Nbc2VsZWN0ZWRdPy5tZXNzYWdlSWQpXG4gICAgICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIHNlbGVjdGVkIH0pXG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2Rvd24nIHx8IGV2ZW50LmtleSA9PT0gJ2onKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgcm93cy5sZW5ndGggLSAxKSwgZHJhZnQuc2VsZWN0ZWQgKyAxKVxuICAgICAgICBzdGVlckxpc3RGb2N1cy5mb2N1cyhyb3dzW3NlbGVjdGVkXT8ubWVzc2FnZUlkKVxuICAgICAgICBzZXRTdGVlcih7IC4uLmRyYWZ0LCBzZWxlY3RlZCB9KVxuICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdob21lJyB8fCBldmVudC5rZXkgPT09ICdnJykge1xuICAgICAgICBzdGVlckxpc3RGb2N1cy5mb2N1cyhyb3dzWzBdPy5tZXNzYWdlSWQpXG4gICAgICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIHNlbGVjdGVkOiAwIH0pXG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2VuZCcgfHwgZXZlbnQua2V5ID09PSAnRycpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1heCgwLCByb3dzLmxlbmd0aCAtIDEpXG4gICAgICAgIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3Nbc2VsZWN0ZWRdPy5tZXNzYWdlSWQpXG4gICAgICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIHNlbGVjdGVkIH0pXG4gICAgICB9XG4gICAgICBlbHNlIHJldHVyblxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoY29udmVyc2F0aW9uU2VhcmNoLmhhbmRsZUlucHV0KGV2ZW50LCBjb252ZXJzYXRpb25TZWFyY2hNYXRjaGVzKSkgcmV0dXJuXG4gICAgaWYgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIG5hdmlnYXRlQWN0aXZpdHlTdHJpcChldmVudCkpIHJldHVyblxuICAgIGlmIChmbS5pcygnYWN0aXZpdHktc3RyaXAnKSAmJiBldmVudC5rZXkgPT09ICdyZXR1cm4nKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBmbS5jdXJyZW50KClcbiAgICAgIHNldFZpZXdlZFNoZWxsSWQodGFyZ2V0LnN0YXJ0c1dpdGgoJ3NoZWxsLScpID8gdGFyZ2V0LnNsaWNlKCdzaGVsbC0nLmxlbmd0aCkgOiBudWxsKVxuICAgICAgc2V0Vmlld2VkQWdlbnRJZCh0YXJnZXQuc3RhcnRzV2l0aCgnYWdlbnQtJykgPyB0YXJnZXQuc2xpY2UoJ2FnZW50LScubGVuZ3RoKSA6IG51bGwpXG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChmbS5pcygnYWN0aXZpdHktc3RyaXAnKSAmJiBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBmbS5jdXJyZW50KClcbiAgICAgIGNvbnN0IHNoZWxsID0gdGFyZ2V0LnN0YXJ0c1dpdGgoJ3NoZWxsLScpID8gc2hlbGxSb3dzLmZpbmQoKHMpID0+IGBzaGVsbC0ke3MuaWR9YCA9PT0gdGFyZ2V0KSA6IG51bGxcbiAgICAgIGNvbnN0IGl0ZW0gPSB0YXJnZXQuc3RhcnRzV2l0aCgnYWdlbnQtJykgPyBhZ2VudFJvd3MuZmluZCgocm93KSA9PiBgYWdlbnQtJHtyb3cuaWR9YCA9PT0gdGFyZ2V0KSA6IG51bGxcbiAgICAgIGNvbnN0IGFnZW50ID0gaXRlbT8ucm9sZSA9PT0gJ2RlbGliZXJhdGlvbicgPyBudWxsIDogaXRlbVxuICAgICAgaWYgKHNoZWxsKSBzaGVsbC5zdGF0dXMgPT09ICdydW5uaW5nJyA/IGtpbGxTaGVsbChzaGVsbCkgOiBkaXNtaXNzU2hlbGwoc2hlbGwpXG4gICAgICBpZiAoaXRlbT8ucm9sZSA9PT0gJ2RlbGliZXJhdGlvbicpIHN0b3BPckRpc21pc3NEZWxpYmVyYXRpb24oaXRlbSlcbiAgICAgIGVsc2UgaWYgKGFnZW50KSBbJ3F1ZXVlZCcsICdydW5uaW5nJ10uaW5jbHVkZXMoYWdlbnQuc3RhdHVzKSA/IGNhbmNlbEFnZW50KGFnZW50KSA6IGRpc21pc3NBZ2VudChhZ2VudClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdzaGVsbC1zdHJpcCcpICYmIG5hdmlnYXRlU3RyaXAoZXZlbnQsICdzaGVsbCcsIHNoZWxsUm93cywgeyBtYWluOiB0cnVlLCBwcmV2aWV3U2hlbGw6IHRydWUgfSkpIHJldHVyblxuICAgIGlmIChmbS5pcygnYWdlbnQtc3RyaXAnKSAmJiBuYXZpZ2F0ZVN0cmlwKGV2ZW50LCAnYWdlbnQnLCBhZ2VudFJvd3MsIHsgbWFpbjogdHJ1ZSwgcHJldmlld0FnZW50OiB0cnVlIH0pKSByZXR1cm5cbiAgICBpZiAoZm0uaXMoJ3NoZWxsLXN0cmlwJykgJiYgZXZlbnQua2V5ID09PSAncmV0dXJuJykge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZm0uY3VycmVudCgpXG4gICAgICBzZXRWaWV3ZWRTaGVsbElkKHRhcmdldCA9PT0gJ3NoZWxsLW1haW4nID8gbnVsbCA6IHRhcmdldC5zbGljZSgnc2hlbGwtJy5sZW5ndGgpKVxuICAgICAgc2V0Rm9sbG93KHRydWUpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChmbS5pcygnc2hlbGwtc3RyaXAnKSAmJiBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnKSB7XG4gICAgICBjb25zdCBzaGVsbCA9IGZtLmN1cnJlbnQoKSA9PT0gJ3NoZWxsLW1haW4nID8gbnVsbCA6IHNoZWxsUm93cy5maW5kKChzKSA9PiBgc2hlbGwtJHtzLmlkfWAgPT09IGZtLmN1cnJlbnQoKSlcbiAgICAgIGlmIChzaGVsbCkge1xuICAgICAgICBpZiAoc2hlbGwuc3RhdHVzID09PSAncnVubmluZycpIGtpbGxTaGVsbChzaGVsbClcbiAgICAgICAgZWxzZSBkaXNtaXNzU2hlbGwoc2hlbGwpXG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChmbS5pcygnYWdlbnQtc3RyaXAnKSAmJiBldmVudC5rZXkgPT09ICdyZXR1cm4nKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBmbS5jdXJyZW50KClcbiAgICAgIHNldFZpZXdlZEFnZW50SWQodGFyZ2V0ID09PSAnYWdlbnQtbWFpbicgPyBudWxsIDogdGFyZ2V0LnNsaWNlKCdhZ2VudC0nLmxlbmd0aCkpXG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChmbS5pcygnYWdlbnQtc3RyaXAnKSAmJiBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBmbS5jdXJyZW50KClcbiAgICAgIGNvbnN0IGl0ZW0gPSB0YXJnZXQgPT09ICdhZ2VudC1tYWluJyA/IG51bGwgOiBhZ2VudFJvd3MuZmluZCgocm93KSA9PiBgYWdlbnQtJHtyb3cuaWR9YCA9PT0gdGFyZ2V0KVxuICAgICAgaWYgKGl0ZW0/LnJvbGUgPT09ICdkZWxpYmVyYXRpb24nKSBzdG9wT3JEaXNtaXNzRGVsaWJlcmF0aW9uKGl0ZW0pXG4gICAgICBlbHNlIGlmIChpdGVtKSB7XG4gICAgICAgIGlmIChbJ3F1ZXVlZCcsICdydW5uaW5nJ10uaW5jbHVkZXMoaXRlbS5zdGF0dXMpKSBjYW5jZWxBZ2VudChpdGVtKVxuICAgICAgICBlbHNlIGRpc21pc3NBZ2VudChpdGVtKVxuICAgICAgfVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJyAmJiBidXN5KCkgJiYgIWFueVBhbmVsKCkpIHtcbiAgICAgIGludGVycnVwdCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2MnKSB7XG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG4gICAgICBpZiAobm93IC0gcmVmcy5xdWl0QXQgPCAxNTAwKSB7XG4gICAgICAgIGF3YWl0IGN0bC5zaHV0ZG93bigpXG4gICAgICAgIHByb2Nlc3MuZXhpdCgwKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVmcy5xdWl0QXQgPSBub3dcbiAgICAgICAgY29uc3QgcnVubmluZyA9IGJvb3Quc2hlbGxzLnJ1bm5pbmcoKVxuICAgICAgICBmbGFzaChydW5uaW5nID8gYCR7cnVubmluZ30gJHtydW5uaW5nID09PSAxID8gJ3NoZWxsJyA6ICdzaGVsbHMnfSBydW5uaW5nICBjdHJsK2MgYWdhaW4gdG8gZXhpdCBhbmQga2lsbCAke3J1bm5pbmcgPT09IDEgPyAnaXQnIDogJ3RoZW0nfWAgOiAnY3RybCtjIGFnYWluIHRvIGV4aXQnKVxuICAgICAgfVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZm0uaXMoJ2ZlZWQnKSAmJiBldmVudC5rZXkgPT09ICcvJykge1xuICAgICAgY29udmVyc2F0aW9uU2VhcmNoLm9wZW4oKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdyJyAmJiB2aWV3KCkgPT09ICdjaGF0JyAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgaWYgKGJ1c3koKSkgZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBmaXJzdCcpXG4gICAgICBlbHNlIGlmICh1c2VyRW50cmllcyhkZXJpdmVkKCkpLmxlbmd0aCA9PT0gMCkgZmxhc2goJ25vdGhpbmcgdG8gcmV3aW5kIHlldCcpXG4gICAgICBlbHNlIHNldFJld2luZFN0ZXAoJ3BpY2snKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJyAmJiB2aWV3KCkgPT09ICdjaGF0JyAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgaWYgKGJ1c3koKSkgZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBiZWZvcmUgc3dpdGNoaW5nIHNlc3Npb25zJylcbiAgICAgIGVsc2Ugb3BlblJlc3VtZVBhbmVsKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAndCcgJiYgdmlldygpID09PSAnY2hhdCcgJiYgIWFueVBhbmVsKCkpIHtcbiAgICAgIHNldFNob3dNb2RlbFBhbmVsKHRydWUpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3AnICYmIHZpZXcoKSA9PT0gJ2NoYXQnICYmICFhbnlQYW5lbCgpKSB7XG4gICAgICBvcGVuUHJvamVjdFBhbmVsKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnYicgJiYgdmlldygpID09PSAnY2hhdCcgJiYgIWFueVBhbmVsKCkpIHtcbiAgICAgIGlmICghZWZmb3J0QXBwbGllcygpKSBmbGFzaChgJHttb2RlbCgpLm5hbWV9IGRvZXMgbm90IHN1cHBvcnQgZWZmb3J0IGNvbnRyb2xgKVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IG9yZGVyID0gW251bGwsICdsb3cnLCAnbWVkaXVtJywgJ2hpZ2gnLCAnbWF4J11cbiAgICAgICAgY29uc3QgbmV4dCA9IG9yZGVyWyhvcmRlci5pbmRleE9mKGVmZm9ydCgpID8/IG51bGwpICsgMSkgJSBvcmRlci5sZW5ndGhdXG4gICAgICAgIHNldFNlc3Npb25FZmZvcnQobmV4dClcbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycgJiYgc2hvd0hpc3RvcnlQYW5lbCgpKSB7XG4gICAgICBzd2l0Y2hIaXN0U2NvcGUoKGhpc3RTY29wZSgpICsgMSkgJSBISVNUT1JZX1NDT1BFUy5sZW5ndGgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3MnICYmIHNob3dNZW1vcnlQYW5lbCgpKSB7XG4gICAgICBzZXRNZW1TY29wZSgocykgPT4gKHMgKyAxKSAlIE1FTU9SWV9TQ09QRVMubGVuZ3RoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJyAmJiBzaG93UmVzdW1lUGFuZWwoKSkge1xuICAgICAgY29uc3QgbmV4dCA9IChyZXN1bWVTY29wZSgpICsgMSkgJSByZXN1bWVTY29wZXMoKS5sZW5ndGhcbiAgICAgIHNldFJlc3VtZVNjb3BlKG5leHQpXG4gICAgICByZWZyZXNoU2Vzc2lvbnMobmV4dClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneicgJiYgc3RhdGUucmV3aW5kVW5kbyAmJiAhYnVzeSgpICYmIHZpZXcoKSA9PT0gJ2NoYXQnKSB7XG4gICAgICB1bmRvUmV3aW5kKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IGZtdEVsYXBzZWQgPSAocykgPT4gKHMgPCA2MCA/IGAke3N9c2AgOiBgJHtNYXRoLmZsb29yKHMgLyA2MCl9bSAke3MgJSA2MH1zYClcbiAgY29uc3QgZWxhcHNlZCA9IGZtdEVsYXBzZWQoYnVzeSgpID8gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcigoRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCgpKSAvIDEwMDApKSA6IDApXG5cbiAgY29uc3Qgc2xhc2hSYW5nZSA9IGNvbW1hbmRBdChpbnB1dCgpLCBpbnB1dEN1cnNvcigpKVxuICBjb25zdCBzbGFzaFF1ZXJ5ID0gc2xhc2hSYW5nZT8ucXVlcnkgPz8gbnVsbFxuICBjb25zdCBzaG93Q29tbWFuZHMgPSBzbGFzaFJhbmdlICE9PSBudWxsICYmICFhbnlQYW5lbCgpXG4gIGNvbnN0IG1hdGNoZWRDb21tYW5kcyA9ICFzaG93Q29tbWFuZHNcbiAgICA/IFtdXG4gICAgOiBjbWRDeWNsZSgpXG4gICAgICA/IGNtZEN5Y2xlKCkubWF0Y2hlc1xuICAgICAgOiBhbGxDb21tYW5kcy5maWx0ZXIoKGMpID0+IChjLmNvbW1hbmQgfHwgKHNsYXNoUmFuZ2Uuc3RhcnQgPT09IDAgJiYgc2xhc2hSYW5nZS5lbmQgPT09IGlucHV0KCkubGVuZ3RoKSkgJiYgYy5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChzbGFzaFF1ZXJ5LnRvTG93ZXJDYXNlKCkpKVxuXG4gIGNvbnN0IGF0TWF0Y2ggPSBpbnB1dCgpLm1hdGNoKC8oXnxbXFxzKF0pQChbXlxcc0BdKikkLylcbiAgY29uc3Qgc2hvd0ZpbGVzID0gYXRNYXRjaCAhPT0gbnVsbCAmJiAhc2hvd0NvbW1hbmRzICYmICFmaWxlc0Rpc21pc3NlZCgpICYmICFhbnlQYW5lbCgpXG4gIGlmIChzaG93RmlsZXMpIHtcbiAgICBsaXN0RmlsZXMoY3dkKS50aGVuKChmaWxlcykgPT4ge1xuICAgICAgaWYgKGZpbGVzICE9PSBmaWxlTGlzdCgpKSBzZXRGaWxlTGlzdChmaWxlcylcbiAgICB9KVxuICB9XG4gIGNvbnN0IG1hdGNoZWRGaWxlcyA9IHNob3dGaWxlc1xuICAgID8gZmlsZUxpc3QoKVxuICAgICAgICAubWFwKChmKSA9PiBbZnV6enlTY29yZShhdE1hdGNoWzJdLCBmKSwgZl0pXG4gICAgICAgIC5maWx0ZXIoKFtzY29yZV0pID0+IHNjb3JlID49IDApXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBiWzBdIC0gYVswXSlcbiAgICAgICAgLm1hcCgoWywgZl0pID0+IGYpXG4gICAgOiBbXVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHBpY2tGaWxlKGYpIHtcbiAgICBjb25zdCB2ID0gaW5wdXQoKVxuICAgIGNvbnN0IGF0ID0gdi5sYXN0SW5kZXhPZignQCcpXG4gICAgY29uc3QgcGxhY2Vob2xkZXIgPSBhd2FpdCBjdGwuYXR0YWNoUHJvamVjdEZpbGUoZilcbiAgICBpZiAocGxhY2Vob2xkZXIpIHtcbiAgICAgIHNldElucHV0KHYuc2xpY2UoMCwgYXQpICsgcGxhY2Vob2xkZXIgKyAnICcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNldElucHV0KHYuc2xpY2UoMCwgYXQgKyAxKSArIGYgKyAnICcpXG4gICAgfVxuICAgIHNldEZpbGVJbmRleCgwKVxuICB9XG5cbiAgY29uc3QgY29tcEN0eCA9IGNvbXBsZXRpbmcoKSA/IGNvbXBsZXRpb25Db250ZXh0KHsgdmFsdWU6IGlucHV0KCksIHJlc29sdmU6IGNvbXBsZXRpb25Tb3VyY2UgfSkgOiBudWxsXG4gIGNvbnN0IHNob3dDb21wbGV0aW9uID0gISFjb21wQ3R4ICYmIGNvbXBDdHgubWF0Y2hlcy5sZW5ndGggPiAwICYmICFzaG93Q29tbWFuZHMgJiYgIXNob3dGaWxlcyAmJiAhYW55UGFuZWwoKVxuXG4gIGNvbnN0IHJld2luZEVudHJpZXMgPSAoKSA9PiB1c2VyRW50cmllcyhkZXJpdmVkKCkpXG4gIGNvbnN0IHJld2luZE9wdGlvbnMgPSAoKCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IHJld2luZFRhcmdldCgpXG4gICAgaWYgKCF0YXJnZXQpIHJldHVybiBbXVxuICAgIGNvbnN0IHsgbXNncywgZWRpdHMgfSA9IHJld2luZFN0YXRzKGRlcml2ZWQoKSwgdGFyZ2V0LmluZGV4KVxuICAgIGNvbnN0IGUgPSBlZGl0cy5sZW5ndGhcbiAgICBjb25zdCBlZGl0c0xhYmVsID0gYCR7ZX0gJHtlID09PSAxID8gJ2VkaXQnIDogJ2VkaXRzJ31gXG4gICAgY29uc3Qgb3B0cyA9IFtdXG4gICAgaWYgKGUgPiAwKSBvcHRzLnB1c2goeyBrZXk6ICdib3RoJywgbGFiZWw6ICdyZXN0b3JlIGNvZGUgYW5kIGNvbnZlcnNhdGlvbicsIGRlc2M6IGBjaGF0IHJldHVybnMgdG8gdGhpcyBtZXNzYWdlICAke2VkaXRzTGFiZWx9IHJldmVydGVkYCB9KVxuICAgIG9wdHMucHVzaCh7XG4gICAgICBrZXk6ICdjaGF0JyxcbiAgICAgIGxhYmVsOiBlID4gMCA/ICdyZXN0b3JlIGNvbnZlcnNhdGlvbiBvbmx5JyA6ICdyZXN0b3JlIGNvbnZlcnNhdGlvbicsXG4gICAgICBkZXNjOiBlID4gMCA/ICdjaGF0IHJldHVybnMgdG8gdGhpcyBtZXNzYWdlICBmaWxlIGNoYW5nZXMga2VwdCcgOiBgY2hhdCByZXR1cm5zIHRvIHRoaXMgbWVzc2FnZSAgZHJvcHMgJHttc2dzfSBlbnRyaWVzYCxcbiAgICB9KVxuICAgIGlmIChlID4gMCkgb3B0cy5wdXNoKHsga2V5OiAnY29kZScsIGxhYmVsOiAncmVzdG9yZSBjb2RlIG9ubHknLCBkZXNjOiBgY29udmVyc2F0aW9uIGtlcHQgICR7ZWRpdHNMYWJlbH0gcmV2ZXJ0ZWRgIH0pXG4gICAgb3B0cy5wdXNoKHsga2V5OiAnc3VtbWFyeScsIGxhYmVsOiAncmV3aW5kIGFuZCBrZWVwIGEgc3VtbWFyeScsIGRlc2M6ICdkcm9wcGVkIGVudHJpZXMgY29sbGFwc2UgaW50byBhIG9uZS1saW5lIG5vdGUnIH0pXG4gICAgcmV0dXJuIG9wdHNcbiAgfSkoKVxuXG4gIGNvbnN0IHVzYWdlID0gbGl2ZVVzYWdlKCkgfHwgZGVyaXZlZCgpLnVzYWdlQWN0aXZlXG4gIGNvbnN0IGNvbnRleHRQZXJjZW50ID0gbW9kZWwoKS5jb250ZXh0ID4gMCAmJiBkZXJpdmVkKCkubGFzdFByb21wdFRva2VucyA+IDAgJiYgZGVyaXZlZCgpLmxhc3RQcm9tcHRNb2RlbCA9PT0gbW9kZWwoKS5uYW1lXG4gICAgPyBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQoKGRlcml2ZWQoKS5sYXN0UHJvbXB0VG9rZW5zIC8gbW9kZWwoKS5jb250ZXh0KSAqIDEwMCkpXG4gICAgOiAwXG4gIGNvbnN0IHZpc2libGVTaGVsbHMgPSBzaGVsbFJvd3NcbiAgY29uc3Qgdmlld2VkU2hlbGwgPSB2aWV3ZWRTaGVsbElkKCkgPyB2aXNpYmxlU2hlbGxzLmZpbmQoKHMpID0+IHMuaWQgPT09IHZpZXdlZFNoZWxsSWQoKSkgOiBudWxsXG4gIGNvbnN0IGNvbWJpbmVkQWN0aXZpdHkgPSB2aXNpYmxlU2hlbGxzLmxlbmd0aCA+IDAgJiYgYWdlbnRSb3dzLmxlbmd0aCA+IDBcbiAgY29uc3Qgc2hlbGxTdHJpcEZvY3VzID0gZm0uaXMoJ3NoZWxsLXN0cmlwJykgfHwgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGZtLmN1cnJlbnQoKS5zdGFydHNXaXRoKCdzaGVsbC0nKSkgPyBmbS5jdXJyZW50KCkgOiBudWxsXG4gIGNvbnN0IGZvY3VzZWRTaGVsbElkID0gc2hlbGxTdHJpcEZvY3VzICYmIHNoZWxsU3RyaXBGb2N1cyAhPT0gJ3NoZWxsLW1haW4nID8gc2hlbGxTdHJpcEZvY3VzLnNsaWNlKCdzaGVsbC0nLmxlbmd0aCkgOiBudWxsXG4gIGNvbnN0IGZvY3VzZWRTaGVsbCA9IGZvY3VzZWRTaGVsbElkID8gdmlzaWJsZVNoZWxscy5maW5kKChzKSA9PiBzLmlkID09PSBmb2N1c2VkU2hlbGxJZCkgOiBudWxsXG4gIGNvbnN0IGhpbnRlZFNoZWxsID0gZm9jdXNlZFNoZWxsIHx8IHZpZXdlZFNoZWxsXG4gIGNvbnN0IHNoZWxsQWN0aW9uSGludCA9IGhpbnRlZFNoZWxsID8gYGN0cmwreCAke2hpbnRlZFNoZWxsLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8gJ2tpbGwnIDogJ2Rpc21pc3MnfWAgOiAnJ1xuICBjb25zdCBzaGVsbFdpbmRvd1RhcmdldCA9IHNoZWxsU3RyaXBGb2N1cyA9PT0gJ3NoZWxsLW1haW4nID8gMCA6IHZpc2libGVTaGVsbHMuZmluZEluZGV4KChzKSA9PiBzLmlkID09PSAoZm9jdXNlZFNoZWxsSWQgfHwgdmlld2VkU2hlbGxJZCgpKSlcbiAgY29uc3Qgc2hlbGxXaW5kb3dTdGFydCA9IHN0cmlwV2luZG93U3RhcnQoc2hlbGxXaW5kb3dPZmZzZXQoKSwgc2hlbGxXaW5kb3dUYXJnZXQsIHZpc2libGVTaGVsbHMubGVuZ3RoLCBTSEVMTF9TVFJJUF9NQVgpXG4gIGlmIChzaGVsbFdpbmRvd1N0YXJ0ICE9PSBzaGVsbFdpbmRvd09mZnNldCgpKSBzZXRTaGVsbFdpbmRvd09mZnNldChzaGVsbFdpbmRvd1N0YXJ0KVxuICBjb25zdCBzaGVsbFdpbmRvdyA9IHZpc2libGVTaGVsbHMuc2xpY2Uoc2hlbGxXaW5kb3dTdGFydCwgc2hlbGxXaW5kb3dTdGFydCArIFNIRUxMX1NUUklQX01BWClcbiAgYWdlbnRzVmVyc2lvbigpXG4gIGNvbnN0IHZpc2libGVBZ2VudHMgPSBhZ2VudFJvd3NcbiAgY29uc3Qgdmlld2VkQWdlbnQgPSB2aWV3ZWRBZ2VudElkKCkgPyBhZ2VudFJvd3MuZmluZCgocm93KSA9PiByb3cuaWQgPT09IHZpZXdlZEFnZW50SWQoKSkgOiBudWxsXG4gIGNvbnN0IGFnZW50U3RyaXBGb2N1cyA9IGZtLmlzKCdhZ2VudC1zdHJpcCcpIHx8IChmbS5pcygnYWN0aXZpdHktc3RyaXAnKSAmJiBmbS5jdXJyZW50KCkuc3RhcnRzV2l0aCgnYWdlbnQtJykpID8gZm0uY3VycmVudCgpIDogbnVsbFxuICBjb25zdCBmb2N1c2VkQWdlbnRJZCA9IGFnZW50U3RyaXBGb2N1cyAmJiBhZ2VudFN0cmlwRm9jdXMgIT09ICdhZ2VudC1tYWluJyA/IGFnZW50U3RyaXBGb2N1cy5zbGljZSgnYWdlbnQtJy5sZW5ndGgpIDogbnVsbFxuICBjb25zdCBmb2N1c2VkQWdlbnQgPSBmb2N1c2VkQWdlbnRJZCA/IGFnZW50Um93cy5maW5kKChyb3cpID0+IHJvdy5pZCA9PT0gZm9jdXNlZEFnZW50SWQpIDogbnVsbFxuICBjb25zdCBoaW50ZWRBZ2VudCA9IGZvY3VzZWRBZ2VudCB8fCB2aWV3ZWRBZ2VudFxuICBjb25zdCBhZ2VudEFjdGlvbkhpbnQgPSBoaW50ZWRBZ2VudFxuICAgID8gYGN0cmwreCAke1sncXVldWVkJywgJ3J1bm5pbmcnXS5pbmNsdWRlcyhoaW50ZWRBZ2VudC5zdGF0dXMpID8gJ2NhbmNlbCcgOiAnZGlzbWlzcyd9YFxuICAgIDogJydcbiAgY29uc3QgYWdlbnRXaW5kb3dUYXJnZXQgPSBhZ2VudFN0cmlwRm9jdXMgPT09ICdhZ2VudC1tYWluJ1xuICAgID8gMFxuICAgIDogdmlzaWJsZUFnZW50cy5maW5kSW5kZXgoKGEpID0+IGEuaWQgPT09IChmb2N1c2VkQWdlbnRJZCB8fCB2aWV3ZWRBZ2VudElkKCkpKVxuICBjb25zdCBhZ2VudFdpbmRvd1N0YXJ0ID0gc3RyaXBXaW5kb3dTdGFydChhZ2VudFdpbmRvd09mZnNldCgpLCBhZ2VudFdpbmRvd1RhcmdldCwgdmlzaWJsZUFnZW50cy5sZW5ndGgsIEFHRU5UX1NUUklQX01BWClcbiAgaWYgKGFnZW50V2luZG93U3RhcnQgIT09IGFnZW50V2luZG93T2Zmc2V0KCkpIHNldEFnZW50V2luZG93T2Zmc2V0KGFnZW50V2luZG93U3RhcnQpXG4gIGNvbnN0IGFnZW50V2luZG93ID0gdmlzaWJsZUFnZW50cy5zbGljZShhZ2VudFdpbmRvd1N0YXJ0LCBhZ2VudFdpbmRvd1N0YXJ0ICsgQUdFTlRfU1RSSVBfTUFYKVxuICBjb25zdCBwZW5kaW5nV2FrZXVwcyA9IGJvb3Qud2FrZXVwcy5wZW5kaW5nKClcbiAgZ2l0VmVyc2lvbigpXG4gIGNvbnN0IGdpdEluZm8gPSBnaXRGb290ZXIoKSA/IGJvb3QuZ2l0LnN0YXR1cygpIDogbnVsbFxuXG4gIGlmICh2aWV3KCkgPT09ICdoZWxwJykge1xuICAgIHJldHVybiA8SGVscCBjb21tYW5kcz17Q09NTUFORFN9IG9uQ2xvc2U9eygpID0+IHNldFZpZXcoJ2NoYXQnKX0gLz5cbiAgfVxuXG4gIGhpZ2hsaWdodFZlcnNpb24oKVxuXG4gIGNvbnN0IG1haW5UcmFuc2NyaXB0ID0gc3RlZXIoKSA/IHN0ZWVyUHJldmlldygpLnRyYW5zY3JpcHQgOiBkZXJpdmVkKCkudHJhbnNjcmlwdFxuICBjb25zdCBzZWxlY3RlZFN0ZWVyTWVzc2FnZUlkID0gc3RlZXJSb3dzKClbc3RlZXIoKT8uc2VsZWN0ZWRdPy5tZXNzYWdlSWRcbiAgY29uc3QgZGVjb3JhdGVkVHJhbnNjcmlwdCA9IHN0ZWVyKCkgPyBtYWluVHJhbnNjcmlwdC5tYXAoKGl0ZW0pID0+ICh7XG4gICAgLi4uaXRlbSxcbiAgICBzdGVlclNlbGVjdGVkOiBpdGVtLm1lc3NhZ2VJZCA9PT0gc2VsZWN0ZWRTdGVlck1lc3NhZ2VJZCxcbiAgfSkpIDogbWFpblRyYW5zY3JpcHRcbiAgY29uc3QgYWN0aXZlU2hlbGwgPSBzaGVsbFN0cmlwRm9jdXMgPyBmb2N1c2VkU2hlbGwgOiBhZ2VudFN0cmlwRm9jdXMgPyBudWxsIDogdmlld2VkU2hlbGxcbiAgY29uc3QgYWN0aXZlQWdlbnQgPSBhZ2VudFN0cmlwRm9jdXMgPyBmb2N1c2VkQWdlbnQgOiBzaGVsbFN0cmlwRm9jdXMgPyBudWxsIDogdmlld2VkQWdlbnRcbiAgbGV0IHNoZWxsT3V0cHV0ID0gbnVsbFxuICBpZiAoYWN0aXZlU2hlbGwpIHtcbiAgICB0cnkgeyBzaGVsbE91dHB1dCA9IGJvb3Quc2hlbGxzLm91dHB1dChhY3RpdmVTaGVsbC5pZCwgeyB0YWlsOiAyMDAwIH0pIH0gY2F0Y2gge31cbiAgfVxuICBjb25zdCBzaGVsbFRyYW5zY3JpcHQgPSBhY3RpdmVTaGVsbCA/IFtcbiAgICB7IGtpbmQ6ICdzaGVsbC1jb21tYW5kJywgdGV4dDogYWN0aXZlU2hlbGwuY29tbWFuZCB9LFxuICAgIHsga2luZDogJ3NoZWxsLW91dHB1dCcsIHRleHQ6IHNoZWxsT3V0cHV0Py5vdXRwdXQgfHwgJ25vIG91dHB1dCB5ZXQnIH0sXG4gIF0gOiBudWxsXG4gIGNvbnN0IHRyYW5zY3JpcHRTb3VyY2UgPSBhY3RpdmVTaGVsbCA/IGBzaGVsbDoke2FjdGl2ZVNoZWxsLmlkfWAgOiBhY3RpdmVBZ2VudCA/IGBhZ2VudDoke2FjdGl2ZUFnZW50LmlkfWAgOiAnbWFpbidcbiAgY29uc3QgbGl2ZVBlZXJJZHMgPSBuZXcgU2V0KG92ZXJsYXkoKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCA9PT0gJ3BlZXInKS5tYXAoKGl0ZW0pID0+IGl0ZW0ubWVzc2FnZUlkKSlcbiAgY29uc3QgdW5yZWFkUGVlcnMgPSBkZWNvcmF0ZWRUcmFuc2NyaXB0LmZpbHRlcihpdGVtID0+IGl0ZW0ua2luZCA9PT0gJ3BlZXInICYmIGl0ZW0uZGlyZWN0aW9uID09PSAnaW5jb21pbmcnICYmICFpdGVtLnJlYWQpXG4gIGNvbnN0IHVucmVhZFBlZXJJZHMgPSBuZXcgU2V0KHVucmVhZFBlZXJzLm1hcChpdGVtID0+IGl0ZW0ubWVzc2FnZUlkKSlcbiAgY29uc3QgdHJhbnNjcmlwdCA9IHNoZWxsVHJhbnNjcmlwdCB8fCAoYWN0aXZlQWdlbnQgPyBhZ2VudFRyYW5zY3JpcHQoYWN0aXZlQWdlbnQpIDogZGVjb3JhdGVkVHJhbnNjcmlwdC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCAhPT0gJ3BlZXInIHx8ICghbGl2ZVBlZXJJZHMuaGFzKGl0ZW0ubWVzc2FnZUlkKSAmJiAhdW5yZWFkUGVlcklkcy5oYXMoaXRlbS5tZXNzYWdlSWQpKSkpXG4gIGNvbnN0IGRlbGliZXJhdGlvblZpZXcgPSBhY3RpdmVBZ2VudD8ucm9sZSA9PT0gJ2RlbGliZXJhdGlvbidcbiAgY29uc3QgaXNvbGF0ZWRUcmFuc2NyaXB0ID0gYWN0aXZlQWdlbnQgfHwgYWN0aXZlU2hlbGxcbiAgY29uc3QgZ3JvdXBJdGVtcyA9IChzb3VyY2UsIGFjdGl2ZSA9IGZhbHNlKSA9PiBzdGVlcigpXG4gICAgPyBjb2xsYXBzZVN0ZWVyVG9vbHMoc291cmNlKVxuICAgIDogY29tcGFjdFRvb2xIaXN0b3J5KClcbiAgICAgID8gY29tcGFjdFRyYW5zY3JpcHRSdW5zKHNvdXJjZSwgYWN0aXZlKVxuICAgICAgOiBzb3VyY2VcbiAgY29uc3QgdHJhbnNjcmlwdEl0ZW1zID0gZ3JvdXBJdGVtcyh0cmFuc2NyaXB0LCBhY3RpdmVBZ2VudD8uc3RhdHVzID09PSAncnVubmluZycpXG4gIGNvbnN0IHdpbmRvd2VkID0gZGVsaWJlcmF0aW9uVmlldyA/IHsgaXRlbXM6IHRyYW5zY3JpcHRJdGVtcywgaGlkZGVuSXRlbXM6IDAsIGhpZGRlbkNvdW50OiAwIH0gOiB0cmFuc2NyaXB0V2luZG93KHRyYW5zY3JpcHRJdGVtcywgaGlzdFdpbmRvdygpKVxuICBjb25zdCBoaWRkZW5Db3VudCA9IHdpbmRvd2VkLmhpZGRlbkNvdW50XG4gIGNvbnN0IHZpc2libGVJdGVtcyA9IGlzb2xhdGVkVHJhbnNjcmlwdCA/IHdpbmRvd2VkLml0ZW1zIDogWy4uLndpbmRvd2VkLml0ZW1zLCAuLi5ncm91cEl0ZW1zKG92ZXJsYXkoKSwgdHVyblBoYXNlKCkgPT09ICd0b29scycpLCAuLi4oc3RyZWFtaW5nKCkgPyBbeyBraW5kOiAnYXNzaXN0YW50JywgdGV4dDogYCR7c3RyZWFtaW5nKCl9XHUyNThCYCB9XSA6IFtdKSwgLi4udW5yZWFkUGVlcnNdXG4gIGNvbnN0IHByZXBhcmVkQ29udmVyc2F0aW9uID0gY29udmVyc2F0aW9uU2VhcmNoLnByZXBhcmUodmlzaWJsZUl0ZW1zKVxuICBjb252ZXJzYXRpb25TZWFyY2hNYXRjaGVzID0gcHJlcGFyZWRDb252ZXJzYXRpb24ubWF0Y2hlc1xuICBjb25zdCBpdGVtcyA9IHByZXBhcmVkQ29udmVyc2F0aW9uLml0ZW1zXG5cbiAgY29uc3Qgd29ya3NwYWNlV2lkdGggPSBNYXRoLm1pbigzOCwgTWF0aC5tYXgoMTgsIE1hdGguZmxvb3IodGVybWluYWxXaWR0aCgpIC8gMykpKVxuICBjb25zdCB3aWRlTGF5b3V0ID0gd2lkZVNpZGViYXIoKSAmJiB0ZXJtaW5hbFdpZHRoKCkgLSAod29ya3NwYWNlT3BlbigpID8gd29ya3NwYWNlV2lkdGggOiAwKSA+IDE2MFxuICBjb25zdCBzaG93Q29tcG9zZXJBY3Rpb25zID0gIXN0ZWVyKCkgJiYgIXZpZXdlZEFnZW50ICYmICF2aWV3ZWRTaGVsbCAmJiAhYW55UGFuZWwoKSAmJiBwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJ1xuXG4gIGlmIChzaG93TWVtb3J5UGFuZWwoKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8TWVtb3J5UGFuZWxcbiAgICAgICAgbWVtb3JpZXM9e21lbW9yeUxpc3QoKS5maWx0ZXIoKG0pID0+IE1FTU9SWV9TQ09QRVNbbWVtU2NvcGUoKV0gPT09ICdhbGwnIHx8IG0uc2NvcGUgPT09IE1FTU9SWV9TQ09QRVNbbWVtU2NvcGUoKV0pfVxuICAgICAgICBzY29wZXM9e01FTU9SWV9TQ09QRVN9XG4gICAgICAgIHNjb3BlSW5kZXg9e21lbVNjb3BlKCl9XG4gICAgICAgIGZvY3VzZWRcbiAgICAgICAgb25Ub2dnbGVEaXNhYmxlZD17dG9nZ2xlTWVtb3J5RGlzYWJsZWR9XG4gICAgICAgIG9uRm9yZ2V0PXtmb3JnZXRNZW1vcnl9XG4gICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dNZW1vcnlQYW5lbChmYWxzZSl9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIGlmIChzaG93TWNwUGFuZWwoKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8TWNwUGFuZWxcbiAgICAgICAgc2VydmVycz17bWNwU2VydmVycygpfVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIG9uVG9nZ2xlPXsobmFtZSkgPT4gbWNwLnRvZ2dsZShuYW1lKX1cbiAgICAgICAgb25SZWNvbm5lY3Q9eyhuYW1lKSA9PiBtY3AucmVjb25uZWN0KG5hbWUpfVxuICAgICAgICBvblJlbW92ZT17KG5hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCBhcm1lZCA9IHJlZnMubWNwUmVtb3ZlQXJtXG4gICAgICAgICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5uYW1lICE9PSBuYW1lIHx8IERhdGUubm93KCkgLSBhcm1lZC5hdCA+IDMwMDApIHtcbiAgICAgICAgICAgIHJlZnMubWNwUmVtb3ZlQXJtID0geyBuYW1lLCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICAgICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byByZW1vdmUgXCIke25hbWV9XCIgYW5kIGl0cyBjb25maWdgKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZWZzLm1jcFJlbW92ZUFybSA9IG51bGxcbiAgICAgICAgICBtY3AucmVtb3ZlKG5hbWUpXG4gICAgICAgICAgZmxhc2goYHJlbW92ZWQgbWNwIHNlcnZlciAke25hbWV9YClcbiAgICAgICAgfX1cbiAgICAgICAgb25BZGQ9eyhuYW1lLCBjb21tYW5kLCBzY29wZSkgPT4ge1xuICAgICAgICAgIG1jcC5hZGQobmFtZSwgY29tbWFuZCwgc2NvcGUpXG4gICAgICAgICAgZmxhc2goYGFkZGVkICR7bmFtZX0gKCR7c2NvcGV9KWApXG4gICAgICAgIH19XG4gICAgICAgIG9uRWRpdD17KG5hbWUsIGNvbW1hbmQpID0+IHtcbiAgICAgICAgICBtY3AudXBkYXRlKG5hbWUsIGNvbW1hbmQpXG4gICAgICAgICAgZmxhc2goYHVwZGF0ZWQgJHtuYW1lfWApXG4gICAgICAgIH19XG4gICAgICAgIG9uSW52YWxpZD17Zmxhc2h9XG4gICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dNY3BQYW5lbChmYWxzZSl9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIGlmIChzaG93UmVzdW1lUGFuZWwoKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8UmVzdW1lUGFuZWxcbiAgICAgICAgc2Vzc2lvbnM9e3Jlc3VtZVNlc3Npb25zKCl9XG4gICAgICAgIHNjb3Blcz17cmVzdW1lU2NvcGVzKCl9XG4gICAgICAgIHNjb3BlSW5kZXg9e3Jlc3VtZVNjb3BlKCl9XG4gICAgICAgIGxvYWRpbmc9e3Jlc3VtZUxvYWRpbmcoKX1cbiAgICAgICAgZm9jdXNlZFxuICAgICAgICBjdXJyZW50SWQ9e3N0YXRlLnNlc3Npb24/LmlkfVxuICAgICAgICBvblBpY2s9eyhtZXRhKSA9PiB7XG4gICAgICAgICAgaWYgKG1ldGEuaGVhZGVyLmlkID09PSBzdGF0ZS5zZXNzaW9uPy5pZCkgcmV0dXJuIHNldFNob3dSZXN1bWVQYW5lbChmYWxzZSlcbiAgICAgICAgICByZXN1bWVTZXNzaW9uKG1ldGEpXG4gICAgICAgIH19XG4gICAgICAgIG9uRGVsZXRlPXtkZWxldGVTZXNzaW9uTWV0YX1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd1Jlc3VtZVBhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHNob3dQcm9qZWN0UGFuZWwoKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8UHJvamVjdFBhbmVsXG4gICAgICAgIHByb2plY3RzPXtwcm9qZWN0cygpfVxuICAgICAgICBsb2FkaW5nPXtwcm9qZWN0c0xvYWRpbmcoKX1cbiAgICAgICAgZm9jdXNlZFxuICAgICAgICBvblBpY2tDaGVja291dD17KGNoZWNrb3V0KSA9PiBjaGVja291dC5sYXRlc3QgPyByZXN1bWVTZXNzaW9uKGNoZWNrb3V0LmxhdGVzdCkgOiBjdGwuc3dpdGNoVG9Xb3JrdHJlZShjaGVja291dCkudGhlbigoKSA9PiBzZXRTaG93UHJvamVjdFBhbmVsKGZhbHNlKSl9XG4gICAgICAgIG9uUGlja1Nlc3Npb249e3Jlc3VtZVNlc3Npb259XG4gICAgICAgIG9uQWRkV29ya3RyZWU9e2FkZFByb2plY3RXb3JrdHJlZX1cbiAgICAgICAgb25EZWxldGU9e2RlbGV0ZVByb2plY3RDaGVja291dH1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd1Byb2plY3RQYW5lbChmYWxzZSl9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIGlmIChzaG93Q29uZmlnUGFuZWwoKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8Q29uZmlnUGFuZWxcbiAgICAgICAgdmFsdWVzPXt7IGNsb3VkczogY2xvdWRzKCksIGNvbXBhY3RUb29sczogY29tcGFjdFRvb2xIaXN0b3J5KCksIGdpdFN0YXR1czogZ2l0Rm9vdGVyKCksIHdpZGVTaWRlYmFyOiB3aWRlU2lkZWJhcigpLCByZXNlYXJjaE1vZGVsOiBib290LnJlc2VhcmNoTW9kZWwsIHNoZWxsTW9kZWw6IGJvb3Quc2hlbGxNb2RlbCwgZGVsaWJlcmF0aW9uTW9kZWw6IGJvb3QuZGVsaWJlcmF0aW9uTW9kZWwsIHBhcnRpY2lwYW50QU1vZGVsOiBib290LnBhcnRpY2lwYW50QU1vZGVsLCBwYXJ0aWNpcGFudEJNb2RlbDogYm9vdC5wYXJ0aWNpcGFudEJNb2RlbCwgcmVzZWFyY2hBZ2VudExpbWl0OiByZXNlYXJjaEFnZW50TGltaXQoKSB9fVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIG9uUGlja1NoZWxsTW9kZWw9eygpID0+IHtcbiAgICAgICAgICBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsKHRydWUpXG4gICAgICAgICAgc2V0UmVzZWFyY2hNb2RlbFJldHVybignY29uZmlnJylcbiAgICAgICAgICBzZXRTaG93Q29uZmlnUGFuZWwoZmFsc2UpXG4gICAgICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCh0cnVlKVxuICAgICAgICB9fVxuICAgICAgICBvblBpY2tSZXNlYXJjaE1vZGVsPXsoKSA9PiB7XG4gICAgICAgICAgc2V0U2VsZWN0aW5nU2hlbGxNb2RlbChmYWxzZSlcbiAgICAgICAgICBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbChmYWxzZSlcbiAgICAgICAgICBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuKCdjb25maWcnKVxuICAgICAgICAgIHNldFNob3dDb25maWdQYW5lbChmYWxzZSlcbiAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKHRydWUpXG4gICAgICAgIH19XG4gICAgICAgIG9uUGlja1BhcnRpY2lwYW50TW9kZWw9eyh0YXJnZXQpID0+IHtcbiAgICAgICAgICBzZXRQYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KHRhcmdldClcbiAgICAgICAgICBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuKCdjb25maWcnKVxuICAgICAgICAgIHNldFNob3dDb25maWdQYW5lbChmYWxzZSlcbiAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKHRydWUpXG4gICAgICAgIH19XG4gICAgICAgIG9uUGlja0RlbGliZXJhdGlvbk1vZGVsPXsoKSA9PiB7XG4gICAgICAgICAgc2V0U2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwodHJ1ZSlcbiAgICAgICAgICBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuKCdjb25maWcnKVxuICAgICAgICAgIHNldFNob3dDb25maWdQYW5lbChmYWxzZSlcbiAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKHRydWUpXG4gICAgICAgIH19XG4gICAgICAgIG9uQ2hhbmdlPXsobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ2Nsb3VkcycpIHtcbiAgICAgICAgICAgIHNldENsb3Vkcyh2YWx1ZSlcbiAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgYW5pbWF0aW9uOiB7IGNsb3VkczogdmFsdWUgfSB9KVxuICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ2dpdFN0YXR1cycpIHtcbiAgICAgICAgICAgIHNldEdpdEZvb3Rlcih2YWx1ZSlcbiAgICAgICAgICAgIGJvb3QuZ2l0Rm9vdGVyID0gdmFsdWVcbiAgICAgICAgICAgIGN0bC5jb25maWd1cmU/Lih7IGdpdEZvb3RlcjogdmFsdWUgfSlcbiAgICAgICAgICAgIGJvb3QuZ2l0LnNldEVuYWJsZWQodmFsdWUpXG4gICAgICAgICAgICB3cml0ZUNvbmZpZyh7IGRpc3BsYXk6IHsgZ2l0U3RhdHVzOiB2YWx1ZSB9IH0pXG4gICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnd2lkZVNpZGViYXInKSB7XG4gICAgICAgICAgICBzZXRXaWRlU2lkZWJhcih2YWx1ZSlcbiAgICAgICAgICAgIGJvb3Qud2lkZVNpZGViYXIgPSB2YWx1ZVxuICAgICAgICAgICAgY3RsLmNvbmZpZ3VyZT8uKHsgd2lkZVNpZGViYXI6IHZhbHVlIH0pXG4gICAgICAgICAgICB3cml0ZUNvbmZpZyh7IGRpc3BsYXk6IHsgd2lkZVNpZGViYXI6IHZhbHVlIH0gfSlcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdyZXNlYXJjaEFnZW50TGltaXQnKSB7XG4gICAgICAgICAgICBzZXRSZXNlYXJjaEFnZW50TGltaXQodmFsdWUpXG4gICAgICAgICAgICBib290LnJlc2VhcmNoQWdlbnRMaW1pdCA9IHZhbHVlXG4gICAgICAgICAgICBjdGwuY29uZmlndXJlPy4oeyByZXNlYXJjaEFnZW50TGltaXQ6IHZhbHVlIH0pXG4gICAgICAgICAgICB3cml0ZUNvbmZpZyh7IHJlc2VhcmNoOiB7IGFnZW50TGltaXQ6IHZhbHVlIH0gfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0Q29tcGFjdFRvb2xIaXN0b3J5KHZhbHVlKVxuICAgICAgICAgICAgd3JpdGVDb25maWcoeyBkaXNwbGF5OiB7IGNvbXBhY3RUb29sSGlzdG9yeTogdmFsdWUgfSB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBoZWlnaHQ6ICcxMDAlJyB9fT5cbiAgICAgIHt3b3Jrc3BhY2VPcGVuKCkgJiYgPFdvcmtzcGFjZVNpZGViYXIgZ3JvdXBzPXt3b3Jrc3BhY2VHcm91cHNOb3d9IHNlbGVjdGVkPXt3b3Jrc3BhY2VTZWxlY3RlZCgpfSB3aWR0aD17d29ya3NwYWNlV2lkdGh9IGxvYWRpbmc9e3dvcmtzcGFjZUxvYWRpbmcoKX0gZXJyb3I9e3dvcmtzcGFjZUVycm9yKCl9IG9uSGVpZ2h0PXsoaGVpZ2h0KSA9PiB7IGlmICh3b3Jrc3BhY2VIZWlnaHQoKSAhPT0gaGVpZ2h0KSBzZXRXb3Jrc3BhY2VIZWlnaHQoaGVpZ2h0KSB9fSAvPn1cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogd2lkZUxheW91dCA/ICdyb3cnIDogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBmbGV4QmFzaXM6IDAsIGhlaWdodDogJzEwMCUnIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBwYWRkaW5nWDogMiwgZ2FwOiAxLCBiZzogUEFORUxfQkcgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICB7YnVzeSgpXG4gICAgICAgICAgICA/IChcbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGJnOiBhY2NlbnQoKSwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8U2hpbW1lciBjb2xvcj1cImJsYWNrXCIgaGlnaGxpZ2h0PXtQQU5FTF9CR30gZHVyYXRpb249ezE1MDB9IHJldmVyc2U+XG4gICAgICAgICAgICAgICAgICAgIHtjb21wYWN0aW5nKClcbiAgICAgICAgICAgICAgICAgICAgICA/IGNvbXBhY3RTdGF0dXMoKT8ucGhhc2UgPT09ICd3cml0aW5nJyA/IGBDb21wYWN0aW5nICB3cml0aW5nICR7Y29tcGFjdFN0YXR1cygpLnNlY3Rpb259LzhgIDogJ0NvbXBhY3RpbmcgIGFuYWx5emluZydcbiAgICAgICAgICAgICAgICAgICAgICA6IHR1cm5QaGFzZSgpID09PSAndGhpbmtpbmcnID8gJ1RoaW5raW5nJyA6IHR1cm5QaGFzZSgpID09PSAndG9vbHMnID8gJ1dvcmtpbmcnIDogJ1Jlc3BvbmRpbmcnfVxuICAgICAgICAgICAgICAgICAgPC9TaGltbWVyPlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2AgICR7ZWxhcHNlZH0gIGVzYyB0byBpbnRlcnJ1cHRgfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApXG4gICAgICAgICAgICA6IDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2Jvb3QuZGlzcGxheUN3ZH08L3RleHQ+fVxuICAgICAgICA8L2JveD5cbiAgICAgICAge2dpdEluZm8/LmJyYW5jaCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntnaXRJbmZvLmJyYW5jaH08L3RleHQ+fVxuICAgICAgICB7Z2l0SW5mbz8uYWRkZWQgPiAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBHUkVFTiB9fT57YCske2dpdEluZm8uYWRkZWR9YH08L3RleHQ+fVxuICAgICAgICB7Z2l0SW5mbz8ucmVtb3ZlZCA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IFJFRCB9fT57YC0ke2dpdEluZm8ucmVtb3ZlZH1gfTwvdGV4dD59XG4gICAgICA8L2JveD5cbiAgICAgIHt0cmFuc2NyaXB0Lmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgZGltOiBkaW1taW5nUGFuZWwoKSB9fT5cbiAgICAgICAgICA8RW1wdHlTdGF0ZSB2ZXJzaW9uPXt2ZXJzaW9ufSBjbG91ZHM9e2Nsb3VkcygpfSAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICkgOiA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAge2RlbGliZXJhdGlvblZpZXcgJiYgaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmtpbmQgPT09ICd1c2VyJykubWFwKChpdGVtLCBpKSA9PiAoXG4gICAgICAgICAgPGJveCBrZXk9e2Ake3RyYW5zY3JpcHRTb3VyY2V9OnByb21wdDoke2l0ZW0ubWVzc2FnZUlkIHx8IGl9YH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdMZWZ0OiAyLCBwYWRkaW5nUmlnaHQ6IDQsIHBhZGRpbmdCb3R0b206IDEsIGZsZXhTaHJpbms6IDAgfX0+XG4gICAgICAgICAgICA8TWVzc2FnZSBpdGVtPXtpdGVtfSB2ZXJib3NlPXt2ZXJib3NlKCl9IC8+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICkpfVxuICAgICAgICA8U2Nyb2xsQm94XG4gICAgICAgICAgc3R5bGU9e3sgZmxleEdyb3c6IDEsIGRpbTogZGltbWluZ1BhbmVsKCkgfX1cbiAgICAgICAgICBmb2N1c2VkPXshZGVsaWJlcmF0aW9uVmlldyAmJiAoZm0uaXMoJ2ZlZWQnKSB8fCBmbS5pcygnY29udmVyc2F0aW9uLXNlYXJjaCcpKX1cbiAgICAgICAgICBmb2xsb3dGb2N1cz17c3RlZXIoKSA/IHN0ZWVyTGlzdEZvY3VzIDogbnVsbH1cbiAgICAgICAgICBmb2N1c1BhZGRpbmc9ezF9XG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0PXtmb2xsb3coKSA/IDFlOSA6IG9mZnNldCgpfVxuICAgICAgICAgIG9uTWV0cmljcz17KG1ldHJpY3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gdHJhbnNjcmlwdE1ldHJpY3MoKVxuICAgICAgICAgICAgaWYgKHByZXZpb3VzPy52aXNpYmxlSGVpZ2h0ID09PSBtZXRyaWNzLnZpc2libGVIZWlnaHQgJiYgcHJldmlvdXM/LmNvbnRlbnRIZWlnaHQgPT09IG1ldHJpY3MuY29udGVudEhlaWdodCkgcmV0dXJuXG4gICAgICAgICAgICBzZXRUcmFuc2NyaXB0TWV0cmljcyhtZXRyaWNzKVxuICAgICAgICAgICAgaWYgKGhpZGRlbkNvdW50ID4gMCAmJiBtZXRyaWNzLnZpc2libGVIZWlnaHQgPiAwICYmIG1ldHJpY3MuY29udGVudEhlaWdodCA8PSBtZXRyaWNzLnZpc2libGVIZWlnaHQpIHtcbiAgICAgICAgICAgICAgc2V0SGlzdFdpbmRvdygoc2l6ZSkgPT4gc2l6ZSArIEhJU1RPUllfV0lORE9XKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25TY3JvbGw9eyhuZXh0LCBtZXRhKSA9PiB7XG4gICAgICAgICAgc2V0Rm9sbG93KCEhbWV0YT8uYXRCb3R0b20pXG4gICAgICAgICAgLy8gYmFjayBhdCB0aGUgYm90dG9tOiBsb2FkZWQgaGlzdG9yeSBpcyBvZmYtc2NyZWVuLCBzbyByZS1oaWRpbmdcbiAgICAgICAgICAvLyBpdCBpcyBpbnZpc2libGUgYW5kIHJlc3RvcmVzIHRoZSBzbWFsbCByZW5kZXIgd2luZG93XG4gICAgICAgICAgaWYgKG1ldGE/LmF0Qm90dG9tICYmIGhpc3RXaW5kb3coKSA+IEhJU1RPUllfV0lORE9XKSBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgICAgICAgIGlmIChuZXh0ID09PSAwICYmIGhpZGRlbkNvdW50ID4gMCkge1xuICAgICAgICAgICAgLy8ga2VlcCB0aGUgdmlldyBhbmNob3JlZDogZXN0aW1hdGUgdGhlIHJvd3MgdGhlIG5ldyBiYXRjaCBhZGRzXG4gICAgICAgICAgICAvLyBhbmQgc2Nyb2xsIHBhc3QgdGhlbSBzbyB0aGUgY3VycmVudCB0b3AgaXRlbSBzdGF5cyBpbiBwbGFjZVxuICAgICAgICAgICAgY29uc3QgYWRkZWQgPSBNYXRoLm1pbihISVNUT1JZX1dJTkRPVywgd2luZG93ZWQuaGlkZGVuSXRlbXMpXG4gICAgICAgICAgICBjb25zdCBhdmdSb3dzID0gTWF0aC5tYXgoMiwgTWF0aC5yb3VuZCgobWV0YT8ubWF4T2Zmc2V0IHx8IDApIC8gTWF0aC5tYXgoMSwgaXRlbXMubGVuZ3RoKSkpXG4gICAgICAgICAgICBzZXRIaXN0V2luZG93KCh3KSA9PiB3ICsgSElTVE9SWV9XSU5ET1cpXG4gICAgICAgICAgICBzZXRPZmZzZXQoYWRkZWQgKiBhdmdSb3dzKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIHNldE9mZnNldChuZXh0KVxuICAgICAgICB9fVxuICAgICAgICBzY3JvbGxiYXJcbiAgICAgID5cbiAgICAgICAgPENvbnZlcnNhdGlvblNjcm9sbEFuY2hvciB0YXJnZXQ9e2NvbnZlcnNhdGlvblNlYXJjaC5zY3JvbGx9IC8+XG4gICAgICAgIHtoaWRkZW5Db3VudCA+IDAgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57YFx1MjMwMyAke2hpZGRlbkNvdW50LnRvTG9jYWxlU3RyaW5nKCl9IG9sZGVyICR7aGlkZGVuQ291bnQgPT09IDEgPyAnbWVzc2FnZScgOiAnbWVzc2FnZXMnfSAgc2Nyb2xsIHRvIHRvcCB0byBsb2FkYH08L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICAgIHtkZWxpYmVyYXRpb25WaWV3ID8gKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8RGVsaWJlcmF0aW9uRXhjaGFuZ2UgdHVybnM9e2l0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5raW5kID09PSAnZGVsaWJlcmF0aW9uLXR1cm4nKX0gdmVyYm9zZT17dmVyYm9zZSgpfSB3aWRlPXt0ZXJtaW5hbFdpZHRoKCkgPj0gMTEwfSBjb21wYWN0VG9vbEhpc3Rvcnk9e2NvbXBhY3RUb29sSGlzdG9yeSgpfSB2aWV3cG9ydEhlaWdodD17dHJhbnNjcmlwdE1ldHJpY3MoKT8udmlzaWJsZUhlaWdodH0gZm9jdXNlZD17Zm0uaXMoJ2ZlZWQnKX0gb25Gb2N1cz17KCkgPT4gZm0uZm9jdXMoJ2ZlZWQnKX0gLz5cbiAgICAgICAgICAgIHtpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCAhPT0gJ3VzZXInICYmIGl0ZW0ua2luZCAhPT0gJ2RlbGliZXJhdGlvbi10dXJuJykubWFwKChpdGVtLCBpKSA9PiAoXG4gICAgICAgICAgICAgIDxNZXNzYWdlIGtleT17YCR7dHJhbnNjcmlwdFNvdXJjZX06dGFpbDoke2l0ZW0ubWVzc2FnZUlkIHx8IGl0ZW0uY2FsbElkIHx8IGl9YH0gaXRlbT17aXRlbX0gdmVyYm9zZT17dmVyYm9zZSgpfSAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC8+XG4gICAgICAgICkgOiBpdGVtcy5tYXAoKGl0ZW0sIGkpID0+IHN0ZWVyKCkgJiYgaXRlbS5tZXNzYWdlSWQgPyAoXG4gICAgICAgICAgPFN0ZWVyTWVzc2FnZVxuICAgICAgICAgICAga2V5PXtgJHt0cmFuc2NyaXB0U291cmNlfToke2l0ZW0ubWVzc2FnZUlkIHx8IGl0ZW0uY2FsbElkIHx8IGhpZGRlbkNvdW50ICsgaX1gfVxuICAgICAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgICAgICAgIHZlcmJvc2U9e3ZlcmJvc2UoKX1cbiAgICAgICAgICAgIHNlbGVjdGVkPXtpdGVtLm1lc3NhZ2VJZCA9PT0gc2VsZWN0ZWRTdGVlck1lc3NhZ2VJZH1cbiAgICAgICAgICAgIGZvY3VzPXtzdGVlckxpc3RGb2N1c31cbiAgICAgICAgICAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxDb252ZXJzYXRpb25TZWFyY2hNZXNzYWdlXG4gICAgICAgICAgICBrZXk9e2Ake3RyYW5zY3JpcHRTb3VyY2V9OiR7aXRlbS5tZXNzYWdlSWQgfHwgaXRlbS5jYWxsSWQgfHwgaGlkZGVuQ291bnQgKyBpfWB9XG4gICAgICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgICAgICAgdmVyYm9zZT17dmVyYm9zZSgpfVxuICAgICAgICAgICAgY3VycmVudE1hdGNoPXtjb252ZXJzYXRpb25TZWFyY2hNYXRjaGVzW2NvbnZlcnNhdGlvblNlYXJjaC5pbmRleCgpXT8uaXRlbUluZGV4ID09PSBpID8gY29udmVyc2F0aW9uU2VhcmNoTWF0Y2hlc1tjb252ZXJzYXRpb25TZWFyY2guaW5kZXgoKV0gOiBudWxsfVxuICAgICAgICAgICAgc2VhcmNoPXtjb252ZXJzYXRpb25TZWFyY2h9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSl9XG4gICAgICAgIDwvU2Nyb2xsQm94PlxuICAgICAgICB7Y29udmVyc2F0aW9uU2VhcmNoLmFjdGl2ZSgpID8gKFxuICAgICAgICAgIDxDb252ZXJzYXRpb25TZWFyY2hCYXIgc2VhcmNoPXtjb252ZXJzYXRpb25TZWFyY2h9IG1hdGNoZXM9e2NvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXN9IC8+XG4gICAgICAgICkgOiBmbS5pcygnZmVlZCcpICYmICFhbnlQYW5lbCgpICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCB0b3A6IDAsIGxlZnQ6IDAsIHJpZ2h0OiAwLCBmbGV4RGlyZWN0aW9uOiAncm93JywgYmc6IGFjY2VudCgpLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiAnYmxhY2snIH19Pnsnai9rICBcdTIxOTEvXHUyMTkzIHNjcm9sbCAgIGcvRyBlbmRzICAgLyBzZWFyY2ggICBjdHJsLXUvZCBwYWdlJ308L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICA8L2JveD59XG5cbiAgICAgIHsoZXhwZWRpdGVkKCkubGVuZ3RoID4gMCB8fCBxdWV1ZWQoKS5sZW5ndGggPiAwKSAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAge2V4cGVkaXRlZCgpLm1hcCgobWVzc2FnZSwgaSkgPT4gKFxuICAgICAgICAgICAgPGJveCBrZXk9e2BleHBlZGl0ZWQtJHtpfWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIGJvbGQ6IHRydWUgfX0+eydcdTIxQTAgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IGFjY2VudCgpIH19PnttZXNzYWdlLnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgIHtpID09PSAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57JyAgYWZ0ZXIgbmV4dCB0b29sICBcdTIxOTEgdG8gZWRpdCd9PC90ZXh0Pn1cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICkpfVxuICAgICAgICAgIHtxdWV1ZWQoKS5tYXAoKG1lc3NhZ2UsIGkpID0+IChcbiAgICAgICAgICAgIDxib3gga2V5PXtgcGVuZGluZy0ke2l9YH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1x1MjAzQSAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogTVVURUQgfX0+e21lc3NhZ2UucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAge2kgPT09IDAgJiYgZXhwZWRpdGVkKCkubGVuZ3RoID09PSAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57JyAgcGVuZGluZyAgXHUyMTkxIGVkaXQgIFx1MjE5MiBzZW5kIGFmdGVyIG5leHQgdG9vbCd9PC90ZXh0Pn1cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHtjb21tYW5kRm9ybSgpICYmIDxDb21tYW5kRm9ybVxuICAgICAgICBuYW1lPXtjb21tYW5kRm9ybSgpLm5hbWV9XG4gICAgICAgIGZpZWxkcz17Y29tbWFuZEZvcm0oKS5maWVsZHN9XG4gICAgICAgIGZpbGVzPXtmaWxlTGlzdCgpfVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIG9uU3VibWl0PXsodmFsdWVzKSA9PiBmaW5pc2hDb21tYW5kKGNvbW1hbmRGb3JtKCksIHZhbHVlcyl9XG4gICAgICAgIG9uQ2FuY2VsPXsoKSA9PiB7IHNldENvbW1hbmRGb3JtKG51bGwpOyByZWZzLmNvbW1hbmRFeHBhbnNpb24gPSBudWxsOyBmbS5mb2N1cygnaW5wdXQnKSB9fVxuICAgICAgLz59XG5cbiAgICAgIHtxdWVzdGlvblJlcXVlc3QoKSAmJiAoXG4gICAgICAgIDxRdWVzdGlvbkZvcm1cbiAgICAgICAgICByZXF1ZXN0PXtxdWVzdGlvblJlcXVlc3QoKX1cbiAgICAgICAgICBmb2N1c2VkPXshd29ya3NwYWNlT3BlbigpICYmIGZtLmlzKCdxdWVzdGlvbicpICYmICFhbnlQYW5lbCgpfVxuICAgICAgICAgIG9uU3VibWl0PXsoYW5zd2VycykgPT4ge1xuICAgICAgICAgICAgcmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJRdWVzdGlvbiA9IHRydWVcbiAgICAgICAgICAgIGN0bC5hbnN3ZXJRdWVzdGlvbihhbnN3ZXJzKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DYW5jZWw9eygpID0+IHtcbiAgICAgICAgICAgIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyUXVlc3Rpb24gPSB0cnVlXG4gICAgICAgICAgICBjdGwuY2FuY2VsUXVlc3Rpb24oKVxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c3RlZXIoKSAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PntzdGVlcigpLmVkaXRpbmcgPyBgJHtzdGVlcigpLmFkZGluZyA/ICdBZGQnIDogJ0VkaXQnfSAke3N0ZWVyKCkucm9sZX1gIDogYFN0ZWVyICAke3N0ZWVyKCkuY2hhbmdlcy5sZW5ndGh9IHN0YWdlZGB9PC90ZXh0PlxuICAgICAgICAgIHtzdGVlcigpLmVkaXRpbmcgPyAoXG4gICAgICAgICAgICA8VGV4dEFyZWFcbiAgICAgICAgICAgICAgZm9jdXNlZD17Zm0uaXMoJ3N0ZWVyJyl9XG4gICAgICAgICAgICAgIHZhbHVlPXtzdGVlclRleHQoKX1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldFN0ZWVyVGV4dH1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9e3N0YWdlU3RlZXJUZXh0fVxuICAgICAgICAgICAgICBvbkNhbmNlbD17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFN0ZWVyVGV4dCgnJylcbiAgICAgICAgICAgICAgICBzZXRTdGVlcih7IC4uLnN0ZWVyKCksIGVkaXRpbmc6IGZhbHNlLCBhZGRpbmc6IGZhbHNlIH0pXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIG9uS2V5RG93bj17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ3RhYicpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGF0ID0gU1RFRVJfUk9MRVMuaW5kZXhPZihzdGVlcigpLnJvbGUpXG4gICAgICAgICAgICAgICAgICBzZXRTdGVlcih7IC4uLnN0ZWVyKCksIHJvbGU6IFNURUVSX1JPTEVTWyhhdCArIDEpICUgU1RFRVJfUk9MRVMubGVuZ3RoXSB9KVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHN1Ym1pdE9uRW50ZXJcbiAgICAgICAgICAgICAgbmV3bGluZU9uQmFja3NsYXNoRW50ZXJcbiAgICAgICAgICAgICAgY2xlYXJPblN1Ym1pdFxuICAgICAgICAgICAgICBtYXhIZWlnaHQ9ezh9XG4gICAgICAgICAgICAgIGN1cnNvcj17eyBibGluazogdHJ1ZSwgYmc6IGFjY2VudCgpLCBjb2xvcjogJ2JsYWNrJyB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnXHUyMTkxXHUyMTkzIHNlbGVjdCAgZW50ZXIgZWRpdCAgYSBhZGQgYWZ0ZXIgIHgvZCBkZWxldGUgIGN0cmwrcyBhcHBseSAgZXNjIGRpc2NhcmQnfTwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHtwZWVyU3RhdHVzKCkgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntwZWVyU3RhdHVzKCl9PC90ZXh0Pn1cbiAgICAgIHshc3RlZXIoKSAmJiAhdmlld2VkQWdlbnQgJiYgIXZpZXdlZFNoZWxsICYmIDxNb3VzZUZvY3VzUmVnaW9uIG9uUHJlc3M9eygpID0+IHsgaWYgKCF3b3Jrc3BhY2VPcGVuKCkpIGZtLmZvY3VzKCdpbnB1dCcpIH19IHN0eWxlPXt7IGJnOiBQQU5FTF9CRywgZmxleERpcmVjdGlvbjogJ3JvdycsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSwgbWFyZ2luVG9wOiB0cmFuc2NyaXB0Lmxlbmd0aCA9PT0gMCAmJiBjbG91ZHMoKSA/IDAgOiAxLCBkaW06IGRpbW1pbmdQYW5lbCgpIHx8ICEhcXVlc3Rpb25SZXF1ZXN0KCkgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5pcygnaW5wdXQnKSAmJiAhYW55UGFuZWwoKSAmJiAhcXVlc3Rpb25SZXF1ZXN0KCkgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiB0cnVlIH19PnsnXHUyNzZGJ308L3RleHQ+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIHsoc3RhdGUuc2Vzc2lvbj8uaGVhZGVyLmZvcmtlZEZyb20gfHwgZGVyaXZlZCgpLnRpdGxlKSAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBwb3NpdGlvbjogJ2Fic29sdXRlJywgdG9wOiAwLCByaWdodDogMCwgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICB7c3RhdGUuc2Vzc2lvbj8uaGVhZGVyLmZvcmtlZEZyb20gJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntkZXJpdmVkKCkudGl0bGUgPyAnXHUyNDQyICcgOiAnXHUyNDQyJ308L3RleHQ+fVxuICAgICAgICAgICAge2Rlcml2ZWQoKS50aXRsZSAmJiA8dGV4dCBzdHlsZT17eyBiZzogZm0uaXMoJ2lucHV0JykgJiYgIWFueVBhbmVsKCkgJiYgIXF1ZXN0aW9uUmVxdWVzdCgpID8gYWNjZW50KCkgOiBNVVRFRCwgY29sb3I6ICdibGFjaycsIGJvbGQ6IHRydWUgfX0+e2AgJHtkZXJpdmVkKCkudGl0bGV9IGB9PC90ZXh0Pn1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgICAgPFRleHRBcmVhXG4gICAgICAgICAgY29sb3I9e0ZHfVxuICAgICAgICAgIGxpbmVDb3VudGVyXG4gICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgZm9jdXNlZD17IXdvcmtzcGFjZU9wZW4oKSAmJiBmbS5pcygnaW5wdXQnKSAmJiAhYW55UGFuZWwoKSAmJiAhcXVlc3Rpb25SZXF1ZXN0KCl9XG4gICAgICAgICAgdmFsdWU9e2lucHV0KCl9XG4gICAgICAgICAgY3Vyc29yT2Zmc2V0PXtpbnB1dEN1cnNvcigpfVxuICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXsoY3Vyc29yKSA9PiB7XG4gICAgICAgICAgICBzZXRJbnB1dEN1cnNvcihjdXJzb3IpXG4gICAgICAgICAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgICAgICAgICAgc2V0Q21kSW5kZXgoMClcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2hhbmdlPXsodikgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udmVydGVkID0gcGxhY2Vob2xkZXJpemVJbWFnZVBhdGhzKHYsIHtcbiAgICAgICAgICAgICAgYXR0YWNobWVudHM6IHN0YXRlLmF0dGFjaG1lbnRzLFxuICAgICAgICAgICAgICBuZXh0SWQ6ICgpID0+ICsrc3RhdGUuaW1hZ2VDb3VudCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBzZXRJbnB1dChjb252ZXJ0ZWQudGV4dCwgY29udmVydGVkLnRleHQgPT09IHYgPyBpbnB1dEN1cnNvcigpIDogdW5kZWZpbmVkKVxuICAgICAgICAgICAgc2V0Q21kSW5kZXgoMClcbiAgICAgICAgICAgIHNldENtZEN5Y2xlKG51bGwpXG4gICAgICAgICAgICBzZXRGaWxlSW5kZXgoMClcbiAgICAgICAgICAgIHNldEhpc3RJZHgoLTEpXG4gICAgICAgICAgICBzZXRGaWxlc0Rpc21pc3NlZChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiB7XG4gICAgICAgICAgICBpZiAoYnVzeSgpKSBpbnRlcnJ1cHQoKVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGltcGxpY2l0UmV3aW5kVGFyZ2V0KGRlcml2ZWQoKSwgaW5wdXQoKSlcbiAgICAgICAgICAgICAgaWYgKHRhcmdldCkgcGVyZm9ybVJld2luZFRvKHRhcmdldCwgeyBrZXk6ICdjaGF0JyB9KVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgICAgICAgICAgICAgIHNldENvbXBsZXRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgc2V0RmlsZXNEaXNtaXNzZWQodHJ1ZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25TdWJtaXQ9e3NlbmR9XG4gICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnbGVmdCcgJiYgIWUuY3RybCAmJiAhZS5tZXRhICYmICFlLmFsdCAmJiBib290LndvcmtzcGFjZSAmJiBmbS5pcygnaW5wdXQnKSAmJiB2aWV3KCkgPT09ICdjaGF0JyAmJiAhYW55UGFuZWwoKSAmJiBlbXB0eVdvcmtzcGFjZUNvbXBvc2VyKHtcbiAgICAgICAgICAgICAgdGV4dDogZS52YWx1ZSwgYXR0YWNobWVudHM6IHN0YXRlLmF0dGFjaG1lbnRzLnNpemUsIGRpY3RhdGlvbjogZGljdGF0aW9uU3RhdHVzKCksIGNhcHR1cmU6IGNhcHR1cmVTdGF0dXMoKSwgcGVuZGluZzogcmVmcy5jb21tYW5kRXhwYW5zaW9uIHx8IHJlZnMud29ya3NwYWNlUGFzdGVQZW5kaW5nLFxuICAgICAgICAgICAgICBoaXN0b3J5OiBoaXN0SWR4KCksIGNvbXBsZXRpb246IGNvbXBsZXRpbmcoKSwgY29tbWFuZDogY29tbWFuZEZvcm0oKSwgcXVlc3Rpb246IHF1ZXN0aW9uUmVxdWVzdCgpLCBzdGVlcjogc3RlZXIoKSwgcXVldWVkOiBxdWV1ZWQoKS5sZW5ndGgsIGV4cGVkaXRlZDogZXhwZWRpdGVkKCkubGVuZ3RoLFxuICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgc2V0V29ya3NwYWNlU2VsZWN0ZWQoYm9vdC53b3Jrc3BhY2UuY3VycmVudElkKCkpXG4gICAgICAgICAgICAgIHNldFdvcmtzcGFjZU9wZW4odHJ1ZSlcbiAgICAgICAgICAgICAgc2V0V29ya3NwYWNlTG9hZGluZyh0cnVlKVxuICAgICAgICAgICAgICBmbS5mb2N1cygnd29ya3NwYWNlJylcbiAgICAgICAgICAgICAgdm9pZCByZWZyZXNoV29ya3NwYWNlKClcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZWZzLmRpY3RhdGlvbklucHV0LmhhbmRsZShlKSkgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIGlmIChlLmN0cmwgJiYgZS5rZXkgPT09ICd2Jykge1xuICAgICAgICAgICAgICByZWZzLndvcmtzcGFjZVBhc3RlUGVuZGluZyA9IHRydWVcbiAgICAgICAgICAgICAgdm9pZCByZWZzLnBhc3RlSW1hZ2UoKS5maW5hbGx5KCgpID0+IHsgcmVmcy53b3Jrc3BhY2VQYXN0ZVBlbmRpbmcgPSBmYWxzZSB9KVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuY3RybCAmJiBlLmtleSA9PT0gJ2cnKSB7XG4gICAgICAgICAgICAgIHJlZnMuZGljdGF0aW9uSW5wdXQuc3RhcnQoZSlcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmN0cmwgJiYgZS5rZXkgPT09ICdvJykge1xuICAgICAgICAgICAgICB2b2lkIHJlZnMuY2FwdHVyZUltYWdlKClcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3RhYicgJiYgIWUuY3RybCAmJiAhZS5tZXRhICYmIHNob3dGaWxlcyAmJiBtYXRjaGVkRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBwaWNrRmlsZShtYXRjaGVkRmlsZXNbTWF0aC5taW4oZmlsZUluZGV4KCksIG1hdGNoZWRGaWxlcy5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICd0YWInICYmICFlLmN0cmwgJiYgIWUubWV0YSAmJiBzaG93Q29tbWFuZHMgJiYgbWF0Y2hlZENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3QgY3ljbGUgPSBjbWRDeWNsZSgpXG4gICAgICAgICAgICAgIGlmICghY3ljbGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IE1hdGgubWluKGNtZEluZGV4KCksIG1hdGNoZWRDb21tYW5kcy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgICAgIHNldENtZEN5Y2xlKHsgbWF0Y2hlczogbWF0Y2hlZENvbW1hbmRzIH0pXG4gICAgICAgICAgICAgICAgc2V0Q21kSW5kZXgoc3RhcnQpXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IHJlcGxhY2VDb21tYW5kKGlucHV0KCksIHNsYXNoUmFuZ2UsICcvJyArIG1hdGNoZWRDb21tYW5kc1tzdGFydF0ubmFtZSlcbiAgICAgICAgICAgICAgICBzZXRJbnB1dChuZXh0LnRleHQsIG5leHQuY3Vyc29yKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSAoY21kSW5kZXgoKSArIDEpICUgY3ljbGUubWF0Y2hlcy5sZW5ndGhcbiAgICAgICAgICAgICAgICBzZXRDbWRJbmRleChuZXh0KVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gcmVwbGFjZUNvbW1hbmQoaW5wdXQoKSwgc2xhc2hSYW5nZSwgJy8nICsgY3ljbGUubWF0Y2hlc1tuZXh0XS5uYW1lKVxuICAgICAgICAgICAgICAgIHNldElucHV0KHJlcGxhY2VtZW50LnRleHQsIHJlcGxhY2VtZW50LmN1cnNvcilcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAncGFzdGUnICYmIGUudGV4dCkge1xuICAgICAgICAgICAgICBjb25zdCBwYXRocyA9IGV4dHJhY3RJbWFnZVBhdGhzKGUudGV4dClcbiAgICAgICAgICAgICAgaWYgKHBhdGhzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkcmFmdCA9IGUudmFsdWVcbiAgICAgICAgICAgICAgICBjb25zdCBhdCA9IGUuY3Vyc29yID8/IGRyYWZ0Lmxlbmd0aFxuICAgICAgICAgICAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGN0bC5pZFxuICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKHBhdGhzLm1hcChwYXRoID0+IGN0bC5hdHRhY2hJbWFnZShwYXRoKSkpLnRoZW4ocGxhY2Vob2xkZXJzID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChjdGwuaWQgIT09IHNlc3Npb25JZCB8fCBpbnB1dCgpICE9PSBkcmFmdCkgcmV0dXJuXG4gICAgICAgICAgICAgICAgICBzZXRJbnB1dChkcmFmdC5zbGljZSgwLCBhdCkgKyBwbGFjZWhvbGRlcnMuam9pbignICcpICsgZHJhZnQuc2xpY2UoYXQpKVxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVycm9yID0+IGZsYXNoKGVycm9yLm1lc3NhZ2UpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdiYWNrc3BhY2UnICYmIGUuY3Vyc29yID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaCA9IGUudmFsdWUuc2xpY2UoMCwgZS5jdXJzb3IpLm1hdGNoKC9cXFtJbWFnZSAjXFxkK1xcXSQvKVxuICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBjdGwuZGV0YWNoSW1hZ2UobWF0Y2hbMF0pXG4gICAgICAgICAgICAgICAgc2V0SW5wdXQoZS52YWx1ZS5zbGljZSgwLCBlLmN1cnNvciAtIG1hdGNoWzBdLmxlbmd0aCkgKyBlLnZhbHVlLnNsaWNlKGUuY3Vyc29yKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICd0YWInICYmICFlLmN0cmwgJiYgIWUubWV0YSkge1xuICAgICAgICAgICAgICBjb25zdCBjdHggPSBjb21wbGV0aW9uQ29udGV4dCh7IHZhbHVlOiBlLnZhbHVlLCByZXNvbHZlOiBjb21wbGV0aW9uU291cmNlIH0pXG4gICAgICAgICAgICAgIGlmICghY3R4KSByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgaWYgKCFjb21wbGV0aW5nKCkpIHtcbiAgICAgICAgICAgICAgICBzZXRDb21wbGV0aW5nKHRydWUpXG4gICAgICAgICAgICAgICAgc2V0Q29tcEluZGV4KDApXG4gICAgICAgICAgICAgICAgbGlzdEZpbGVzKGN3ZCkudGhlbigoZmlsZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChmaWxlcyAhPT0gZmlsZUxpc3QoKSkgc2V0RmlsZUxpc3QoZmlsZXMpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdHgubWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYWNjZXB0Q29tcGxldGlvbihlLnZhbHVlLCBjdHgsIGN0eC5tYXRjaGVzW01hdGgubWluKGNvbXBJbmRleCgpLCBjdHgubWF0Y2hlcy5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmN0cmwgfHwgZS5tZXRhIHx8IHNob3dDb21tYW5kcyB8fCBzaG93RmlsZXMpIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAndXAnICYmIGUudmFsdWUgPT09ICcnICYmIChleHBlZGl0ZWQoKS5sZW5ndGggPiAwIHx8IHF1ZXVlZCgpLmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgICAgIGN0bC5yZWNhbGxQZW5kaW5nKCkudGhlbihzZXRJbnB1dCkuY2F0Y2goZXJyb3IgPT4gZmxhc2goZXJyb3IubWVzc2FnZSkpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdyaWdodCcgJiYgZS52YWx1ZSA9PT0gJycgJiYgcXVldWVkKCkubGVuZ3RoID4gMCAmJiBidXN5KCkgJiYgIWNvbXBhY3RpbmcoKSkge1xuICAgICAgICAgICAgICBjdGwuZXhwZWRpdGVRdWV1ZWQoKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYnJvd3NpbmcgPSBoaXN0SWR4KCkgPj0gMFxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAndXAnICYmIChicm93c2luZyB8fCBlLnZhbHVlID09PSAnJykgJiYgaGlzdElkeCgpIDwgc2VudCgpLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgY29uc3QgbiA9IGhpc3RJZHgoKSArIDFcbiAgICAgICAgICAgICAgc2V0SGlzdElkeChuKVxuICAgICAgICAgICAgICBzZXRJbnB1dChzZW50KClbc2VudCgpLmxlbmd0aCAtIDEgLSBuXS50ZXh0KVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnZG93bicgJiYgYnJvd3NpbmcpIHtcbiAgICAgICAgICAgICAgY29uc3QgbiA9IGhpc3RJZHgoKSAtIDFcbiAgICAgICAgICAgICAgc2V0SGlzdElkeChuKVxuICAgICAgICAgICAgICBzZXRJbnB1dChuIDwgMCA/ICcnIDogc2VudCgpW3NlbnQoKS5sZW5ndGggLSAxIC0gbl0udGV4dClcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH19XG4gICAgICAgICAgc3VibWl0T25FbnRlclxuICAgICAgICAgIG5ld2xpbmVPbkJhY2tzbGFzaEVudGVyXG4gICAgICAgICAgY2xlYXJPblN1Ym1pdD17ZmFsc2V9XG4gICAgICAgICAgbWF4SGVpZ2h0PXs4fVxuICAgICAgICAgIGN1cnNvcj17eyBibGluazogdHJ1ZSwgYmc6IGFjY2VudCgpLCBjb2xvcjogJ2JsYWNrJyB9fVxuICAgICAgICAvPlxuICAgICAgPC9Nb3VzZUZvY3VzUmVnaW9uPn1cblxuICAgICAge3Nob3dDb21wb3NlckFjdGlvbnMgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBoZWlnaHQ6IDEsIG1hcmdpbkxlZnQ6IDEgfX0+XG4gICAgICAgICAgPENvbXBvc2VyQWN0aW9uXG4gICAgICAgICAgICBpY29uPVwiXHUyNUNCXCJcbiAgICAgICAgICAgIGFjdGl2ZUljb249XCJcdTI1Q0ZcIlxuICAgICAgICAgICAgYWN0aXZlPXtkaWN0YXRpb25TdGF0dXMoKSAhPT0gJ2lkbGUnfVxuICAgICAgICAgICAgb25Ib3Zlcj17KGhvdmVyZWQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGhvdmVyZWQpIHNldENvbXBvc2VyQWN0aW9uTGFiZWwoJ2NhcHR1cmUgYXVkaW8gKGN0cmwtZyknKVxuICAgICAgICAgICAgICBlbHNlIGlmIChjb21wb3NlckFjdGlvbkxhYmVsKCkgPT09ICdjYXB0dXJlIGF1ZGlvIChjdHJsLWcpJykgc2V0Q29tcG9zZXJBY3Rpb25MYWJlbCgnJylcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvblByZXNzPXsoKSA9PiBkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ3JlY29yZGluZydcbiAgICAgICAgICAgICAgPyB2b2lkIHJlZnMuZGljdGF0aW9uSW5wdXQuc3RvcCgpXG4gICAgICAgICAgICAgIDogcmVmcy5kaWN0YXRpb25JbnB1dC5zdGFydCh7IHZhbHVlOiBpbnB1dCgpLCBjdXJzb3I6IGlucHV0Q3Vyc29yKCkgfSl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8Q29tcG9zZXJBY3Rpb25cbiAgICAgICAgICAgIGljb249XCJcdTI1QTFcIlxuICAgICAgICAgICAgYWN0aXZlSWNvbj1cIlx1MjVBMFwiXG4gICAgICAgICAgICBhY3RpdmU9e2NhcHR1cmVTdGF0dXMoKSA9PT0gJ2NhcHR1cmluZyd9XG4gICAgICAgICAgICBvbkhvdmVyPXsoaG92ZXJlZCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaG92ZXJlZCkgc2V0Q29tcG9zZXJBY3Rpb25MYWJlbCgnY2FwdHVyZSBpbWFnZSAoY3RybC1vKScpXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBvc2VyQWN0aW9uTGFiZWwoKSA9PT0gJ2NhcHR1cmUgaW1hZ2UgKGN0cmwtbyknKSBzZXRDb21wb3NlckFjdGlvbkxhYmVsKCcnKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IHZvaWQgcmVmcy5jYXB0dXJlSW1hZ2UoKX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtkaWN0YXRpb25TdGF0dXMoKSAhPT0gJ2lkbGUnICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2RpY3RhdGlvbkluZGljYXRvcihkaWN0YXRpb25TdGF0dXMoKSwgZGljdGF0aW9uTGV2ZWxzKCkpfTwvdGV4dD59XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ3JlY29yZGluZycgPyAnZXNjIGNhbmNlbCAgZW50ZXIgY29uZmlybScgOiBjYXB0dXJlU3RhdHVzKCkgPT09ICdjYXB0dXJpbmcnID8gJyBlc2MgY2FuY2VsJyA6IGNvbXBvc2VyQWN0aW9uTGFiZWwoKSA/IGAgJHtjb21wb3NlckFjdGlvbkxhYmVsKCl9YCA6ICcnfTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7c2hvd0NvbW1hbmRzICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiA2LCBtaW5IZWlnaHQ6IDYsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAge21hdGNoZWRDb21tYW5kcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gbWF0Y2hpbmcgY29tbWFuZHM8L3RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxNZW51XG4gICAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgICAgaXRlbXM9e21hdGNoZWRDb21tYW5kc31cbiAgICAgICAgICAgICAgc2VsZWN0ZWQ9e2NtZEluZGV4KCl9XG4gICAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRDbWRJbmRleH1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9eyhjKSA9PiBydW5Db21tYW5kKGMpfVxuICAgICAgICAgICAgICBmb2N1c2VkPXtzaG93Q29tbWFuZHMgJiYgZGljdGF0aW9uU3RhdHVzKCkgPT09ICdpZGxlJ31cbiAgICAgICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICAgICAgc2Nyb2xsb2ZmPXsyfVxuICAgICAgICAgICAgICByZW5kZXJJdGVtPXsoYywgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+e2AvJHtjLm5hbWV9YC5wYWRFbmQobWF0Y2hlZENvbW1hbmRzLnJlZHVjZSgobSwgeCkgPT4gTWF0aC5tYXgobSwgeC5uYW1lLmxlbmd0aCArIDMpLCAxMikpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBGRyA6IE1VVEVEIH19PntjLmRlc2N9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93RmlsZXMgJiYgbWF0Y2hlZEZpbGVzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6IDYsIG1pbkhlaWdodDogNiwgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICA8TWVudVxuICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgaXRlbXM9e21hdGNoZWRGaWxlc31cbiAgICAgICAgICAgIHNlbGVjdGVkPXtmaWxlSW5kZXgoKX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRGaWxlSW5kZXh9XG4gICAgICAgICAgICBvblN1Ym1pdD17cGlja0ZpbGV9XG4gICAgICAgICAgICBvbkNhbmNlbD17KCkgPT4gc2V0RmlsZXNEaXNtaXNzZWQodHJ1ZSl9XG4gICAgICAgICAgICBmb2N1c2VkPXtzaG93RmlsZXMgJiYgZGljdGF0aW9uU3RhdHVzKCkgPT09ICdpZGxlJ31cbiAgICAgICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgICAgICBzY3JvbGxvZmY9ezJ9XG4gICAgICAgICAgICByZW5kZXJJdGVtPXsoZiwgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkdfU09GVCB9fT57Zn08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93Q29tcGxldGlvbiAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogNiwgbWluSGVpZ2h0OiA2LCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDxNZW51XG4gICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICBpdGVtcz17Y29tcEN0eC5tYXRjaGVzfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9e2NvbXBJbmRleCgpfVxuICAgICAgICAgICAgb25TZWxlY3Q9e3NldENvbXBJbmRleH1cbiAgICAgICAgICAgIG9uU3VibWl0PXsoY2FuZGlkYXRlKSA9PiBhY2NlcHRDb21wbGV0aW9uKGlucHV0KCksIGNvbXBDdHgsIGNhbmRpZGF0ZSl9XG4gICAgICAgICAgICBvbkNhbmNlbD17ZGlzbWlzc0NvbXBsZXRpb259XG4gICAgICAgICAgICBmb2N1c2VkPXtzaG93Q29tcGxldGlvbiAmJiBkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ2lkbGUnfVxuICAgICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICAgIHNjcm9sbG9mZj17Mn1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyhjYW5kaWRhdGUsIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHX1NPRlQgfX0+e2NhbmRpZGF0ZX08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgICA8L2JveD5cblxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgd2lkdGg6IHdpZGVMYXlvdXQgPyA2NCA6IHVuZGVmaW5lZCwgaGVpZ2h0OiB3aWRlTGF5b3V0ID8gJzEwMCUnIDogdW5kZWZpbmVkIH19PlxuICAgICAge3Nob3dNb2RlbFBhbmVsKCkgJiYgKFxuICAgICAgICA8TW9kZWxQYW5lbFxuICAgICAgICAgIG1vZGVscz17bW9kZWxzKCl9XG4gICAgICAgICAgY3VycmVudD17bW9kZWwoKS5uYW1lfVxuICAgICAgICAgIGRlZmF1bHROYW1lPXtkZWZhdWx0TW9kZWwoKS5uYW1lfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dNb2RlbFBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXthc3luYyAobSkgPT4ge1xuICAgICAgICAgICAgaWYgKGF3YWl0IGN0bC5zd2l0Y2hNb2RlbChtKSkgc2V0U2hvd01vZGVsUGFuZWwoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblBpY2tEZWZhdWx0PXthc3luYyAobSkgPT4ge1xuICAgICAgICAgICAgaWYgKGF3YWl0IGN0bC5zd2l0Y2hNb2RlbChtLCB7IGFzRGVmYXVsdDogdHJ1ZSB9KSkgc2V0U2hvd01vZGVsUGFuZWwoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93TW9kZWxQYW5lbChmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCgpICYmIChcbiAgICAgICAgPE1vZGVsUGFuZWxcbiAgICAgICAgICBtb2RlbHM9e21vZGVscygpLmZpbHRlcigobSkgPT4gbS5hdmFpbGFibGUgIT09IGZhbHNlKX1cbiAgICAgICAgICBjdXJyZW50PXtwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KCkgPyBib290W2Ake3BhcnRpY2lwYW50TW9kZWxUYXJnZXQoKX1Nb2RlbGBdIDogc2VsZWN0aW5nU2hlbGxNb2RlbCgpID8gYm9vdC5zaGVsbE1vZGVsIDogc2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoKSA/IGJvb3QuZGVsaWJlcmF0aW9uTW9kZWwgOiBib290LnJlc2VhcmNoTW9kZWx9XG4gICAgICAgICAgZGVmYXVsdE5hbWU9e251bGx9XG4gICAgICAgICAgdGl0bGU9e3BhcnRpY2lwYW50TW9kZWxUYXJnZXQoKSA/IGBDaG9vc2UgUGFydGljaXBhbnQgJHtwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KCkgPT09ICdwYXJ0aWNpcGFudEEnID8gJ0EnIDogJ0InfSBtb2RlbGAgOiBzZWxlY3RpbmdTaGVsbE1vZGVsKCkgPyAnQ2hvb3NlIHNoZWxsIG1vZGVsJyA6IHNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKCkgPyAnQ2hvb3NlIHN5bnRoZXNpcyBtb2RlbCcgOiAnQ2hvb3NlIHBhcmFsbGVsIHdvcmtlciBtb2RlbCd9XG4gICAgICAgICAgaGludD1cImVudGVyOiBzYXZlIG1vZGVsICBlc2M6IGNhbmNlbFwiXG4gICAgICAgICAgZm9jdXNlZD17c2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCgpfVxuICAgICAgICAgIG9uUGljaz17KG0pID0+IHtcbiAgICAgICAgICAgIGlmIChwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gcGFydGljaXBhbnRNb2RlbFRhcmdldCgpID09PSAncGFydGljaXBhbnRBJyA/ICdzZXRQYXJ0aWNpcGFudEFNb2RlbCcgOiAnc2V0UGFydGljaXBhbnRCTW9kZWwnXG4gICAgICAgICAgICAgIGN0bFttZXRob2RdKG0ubmFtZSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW5nU2hlbGxNb2RlbCgpKSB7XG4gICAgICAgICAgICAgIGN0bC5zZXRTaGVsbE1vZGVsKG0ubmFtZSlcbiAgICAgICAgICAgICAgZmxhc2goYHNoZWxsOiAke20ubmFtZX1gKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCgpKSB7XG4gICAgICAgICAgICAgIGJvb3QuZGVsaWJlcmF0aW9uTW9kZWwgPSBtLm5hbWVcbiAgICAgICAgICAgICAgY3RsLmNvbmZpZ3VyZT8uKHsgZGVsaWJlcmF0aW9uTW9kZWw6IG0ubmFtZSB9KVxuICAgICAgICAgICAgICB3cml0ZUNvbmZpZyh7IG1vZGVsczogeyBkZWxpYmVyYXRpb246IG0ubmFtZSB9IH0pLmNhdGNoKCgpID0+IHt9KVxuICAgICAgICAgICAgICBmbGFzaChgZGVsaWJlcmF0aW9uOiAke20ubmFtZX1gKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYm9vdC5yZXNlYXJjaE1vZGVsID0gbS5uYW1lXG4gICAgICAgICAgICAgIGN0bC5jb25maWd1cmU/Lih7IHJlc2VhcmNoTW9kZWw6IG0ubmFtZSB9KVxuICAgICAgICAgICAgICB3cml0ZUNvbmZpZyh7IG1vZGVsczogeyByZXNlYXJjaFdvcmtlcjogbS5uYW1lIH0gfSkuY2F0Y2goKCkgPT4ge30pXG4gICAgICAgICAgICAgIGZsYXNoKGBwYXJhbGxlbCB3b3JrZXJzOiAke20ubmFtZX1gKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0UGFydGljaXBhbnRNb2RlbFRhcmdldChudWxsKVxuICAgICAgICAgICAgc2V0U2VsZWN0aW5nU2hlbGxNb2RlbChmYWxzZSlcbiAgICAgICAgICAgIHNldFNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKGZhbHNlKVxuICAgICAgICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbChmYWxzZSlcbiAgICAgICAgICAgIGNvbnN0IHBlbmRpbmcgPSBwZW5kaW5nUmVzZWFyY2goKVxuICAgICAgICAgICAgY29uc3QgcGVuZGluZ0RlY2lzaW9uID0gcGVuZGluZ0RlbGliZXJhdGlvbigpXG4gICAgICAgICAgICBjb25zdCByZXR1cm5UbyA9IHJlc2VhcmNoTW9kZWxSZXR1cm4oKVxuICAgICAgICAgICAgc2V0UGVuZGluZ1Jlc2VhcmNoKG51bGwpXG4gICAgICAgICAgICBzZXRQZW5kaW5nRGVsaWJlcmF0aW9uKG51bGwpXG4gICAgICAgICAgICBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuKG51bGwpXG4gICAgICAgICAgICBpZiAocGVuZGluZykgcnVuQ29tbWFuZCh7IG5hbWU6ICdwYXJhbGxlbCcgfSwgcGVuZGluZy50YXNrKVxuICAgICAgICAgICAgZWxzZSBpZiAocGVuZGluZ0RlY2lzaW9uKSBydW5Db21tYW5kKHsgbmFtZTogJ2RlbGliZXJhdGUnIH0sIHBlbmRpbmdEZWNpc2lvbi5kZWNpc2lvbilcbiAgICAgICAgICAgIGVsc2UgaWYgKHJldHVyblRvID09PSAnY29uZmlnJykgc2V0U2hvd0NvbmZpZ1BhbmVsKHRydWUpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblBpY2tEZWZhdWx0PXsoKSA9PiB7fX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB7XG4gICAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKGZhbHNlKVxuICAgICAgICAgICAgc2V0UGFydGljaXBhbnRNb2RlbFRhcmdldChudWxsKVxuICAgICAgICAgICAgc2V0U2VsZWN0aW5nU2hlbGxNb2RlbChmYWxzZSlcbiAgICAgICAgICAgIHNldFNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKGZhbHNlKVxuICAgICAgICAgICAgc2V0UGVuZGluZ1Jlc2VhcmNoKG51bGwpXG4gICAgICAgICAgICBzZXRQZW5kaW5nRGVsaWJlcmF0aW9uKG51bGwpXG4gICAgICAgICAgICBpZiAocmVzZWFyY2hNb2RlbFJldHVybigpID09PSAnY29uZmlnJykgc2V0U2hvd0NvbmZpZ1BhbmVsKHRydWUpXG4gICAgICAgICAgICBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuKG51bGwpXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93U3BlZWRQYW5lbCgpICYmIChcbiAgICAgICAgPFNwZWVkUGFuZWxcbiAgICAgICAgICBsZXZlbHM9e1NQRUVEX0xFVkVMU31cbiAgICAgICAgICBjdXJyZW50PXtzcGVlZCgpfVxuICAgICAgICAgIGRlZmF1bHRMZXZlbD17c3BlZWREZWZhdWx0cygpW21vZGVsKCkubmFtZV0gPz8gJ3N0YW5kYXJkJ31cbiAgICAgICAgICBmb2N1c2VkPXtzaG93U3BlZWRQYW5lbCgpfVxuICAgICAgICAgIG9uUGljaz17KGwpID0+IHtcbiAgICAgICAgICAgIGN0bC5hcHBseVNwZWVkKGwua2V5KVxuICAgICAgICAgICAgc2V0U2hvd1NwZWVkUGFuZWwoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblBpY2tEZWZhdWx0PXsobCkgPT4ge1xuICAgICAgICAgICAgY3RsLmFwcGx5U3BlZWQobC5rZXksIHsgYXNEZWZhdWx0OiB0cnVlIH0pXG4gICAgICAgICAgICBzZXRTaG93U3BlZWRQYW5lbChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dTcGVlZFBhbmVsKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93RWZmb3J0UGFuZWwoKSAmJiAoXG4gICAgICAgIDxFZmZvcnRQYW5lbFxuICAgICAgICAgIGxldmVscz17RUZGT1JUX0xFVkVMU31cbiAgICAgICAgICBjdXJyZW50PXtlZmZvcnQoKSA/PyBudWxsfVxuICAgICAgICAgIGRlZmF1bHRMZXZlbD17ZGVmYXVsdEVmZm9ydCgpID8/IG51bGx9XG4gICAgICAgICAgZm9jdXNlZD17c2hvd0VmZm9ydFBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsobCkgPT4ge1xuICAgICAgICAgICAgc2V0U2Vzc2lvbkVmZm9ydChsLmtleSlcbiAgICAgICAgICAgIHNldFNob3dFZmZvcnRQYW5lbChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUGlja0RlZmF1bHQ9eyhsKSA9PiB7XG4gICAgICAgICAgICBzZXRTZXNzaW9uRWZmb3J0KGwua2V5LCB7IGFzRGVmYXVsdDogdHJ1ZSB9KVxuICAgICAgICAgICAgc2V0U2hvd0VmZm9ydFBhbmVsKGZhbHNlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd0VmZm9ydFBhbmVsKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93VGhlbWVQYW5lbCgpICYmIChcbiAgICAgICAgPFRoZW1lUGFuZWxcbiAgICAgICAgICB0aGVtZXM9e3RoZW1lSXRlbXMoKX1cbiAgICAgICAgICBwcmVmPXt0aGVtZVByZWYoKX1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93VGhlbWVQYW5lbCgpfVxuICAgICAgICAgIG9uUGljaz17KHQpID0+IHtcbiAgICAgICAgICAgIHNldFNob3dUaGVtZVBhbmVsKGZhbHNlKVxuICAgICAgICAgICAgYXBwbHlUaGVtZVByZWYodC5rZXkpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblByZXZpZXc9eyh0KSA9PiBwcmV2aWV3UGFsZXR0ZSh0LmtleSl9XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4ge1xuICAgICAgICAgICAgc2V0U2hvd1RoZW1lUGFuZWwoZmFsc2UpXG4gICAgICAgICAgICBwcmV2aWV3UGFsZXR0ZSh0aGVtZVByZWYoKSlcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dEZWxldGVDb25maXJtKCkgJiYgKFxuICAgICAgICA8Q29uZmlybVBhbmVsXG4gICAgICAgICAgdGl0bGU9XCJEZWxldGUgY3VycmVudCBzZXNzaW9uP1wiXG4gICAgICAgICAgbWVzc2FnZT1cIlRoZSBjdXJyZW50IGNvbnZlcnNhdGlvbiBhbmQgaXRzIHBlcnNpc3RlZCBoaXN0b3J5IHdpbGwgYmUgcGVybWFuZW50bHkgZGVsZXRlZC5cIlxuICAgICAgICAgIGNvbmZpcm1MYWJlbD1cIkRlbGV0ZVwiXG4gICAgICAgICAgZm9jdXNlZD17c2hvd0RlbGV0ZUNvbmZpcm0oKX1cbiAgICAgICAgICBvbkNvbmZpcm09e2NvbmZpcm1EZWxldGVDdXJyZW50U2Vzc2lvbn1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93RGVsZXRlQ29uZmlybShmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd0hpc3RvcnlQYW5lbCgpICYmIChcbiAgICAgICAgPEhpc3RvcnlQYW5lbFxuICAgICAgICAgIHByb21wdHM9e2hpc3RQcm9tcHRzKCl9XG4gICAgICAgICAgc2NvcGVzPXtISVNUT1JZX1NDT1BFU31cbiAgICAgICAgICBzY29wZUluZGV4PXtoaXN0U2NvcGUoKX1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93SGlzdG9yeVBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsodGV4dCkgPT4geyBzZXRJbnB1dCh0ZXh0KTsgc2V0U2hvd0hpc3RvcnlQYW5lbChmYWxzZSkgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93SGlzdG9yeVBhbmVsKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtpbmZvUGFuZWwoKSAmJiAoXG4gICAgICAgIDxJbmZvTGlzdFBhbmVsXG4gICAgICAgICAgdGl0bGU9e2luZm9QYW5lbCgpLnRpdGxlfVxuICAgICAgICAgIHJvd3M9e2luZm9QYW5lbCgpLnJvd3N9XG4gICAgICAgICAgb3ZlcnZpZXc9e2luZm9QYW5lbCgpLm92ZXJ2aWV3fVxuICAgICAgICAgIGZvY3VzZWQ9e2luZm9QYW5lbCgpICE9PSBudWxsfVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldEluZm9QYW5lbChudWxsKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93Q29ubmVjdFBhbmVsKCkgJiYgKFxuICAgICAgICA8Q29ubmVjdFBhbmVsXG4gICAgICAgICAgcHJvdmlkZXJzPXthdXRoUHJvdmlkZXJzKCl9XG4gICAgICAgICAgZm9jdXNlZD17c2hvd0Nvbm5lY3RQYW5lbCgpfVxuICAgICAgICAgIG9uQ29ubmVjdD17Y29ubmVjdFByb3ZpZGVyfVxuICAgICAgICAgIG9uRGlzY29ubmVjdD17ZGlzY29ubmVjdFByb3ZpZGVyfVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dDb25uZWN0UGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dXYWtldXBzUGFuZWwoKSAmJiAoXG4gICAgICAgIDxXYWtldXBzUGFuZWxcbiAgICAgICAgICB3YWtldXBzPXsoc2hlbGxzVmVyc2lvbigpLCBib290Lndha2V1cHMubGlzdCgpKX1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93V2FrZXVwc1BhbmVsKCl9XG4gICAgICAgICAgb25DYW5jZWw9eyh3KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcm1lZCA9IHJlZnMud2FrZXVwQ2FuY2VsQXJtXG4gICAgICAgICAgICBpZiAoIWFybWVkIHx8IGFybWVkLmlkICE9PSB3LmlkIHx8IERhdGUubm93KCkgLSBhcm1lZC5hdCA+IDMwMDApIHtcbiAgICAgICAgICAgICAgcmVmcy53YWtldXBDYW5jZWxBcm0gPSB7IGlkOiB3LmlkLCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICAgICAgICAgIHJldHVybiBmbGFzaChgYWdhaW4gdG8gY2FuY2VsIHdha2UtdXAgJHt3LmlkfSAoJHt3Lm5vdGUuc3BsaXQoJ1xcbicpWzBdLnNsaWNlKDAsIDQwKX0pYClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZnMud2FrZXVwQ2FuY2VsQXJtID0gbnVsbFxuICAgICAgICAgICAgY3RsLmNhbmNlbFdha2V1cCh3KVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd1dha2V1cHNQYW5lbChmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7cmV3aW5kU3RlcCgpID09PSAncGljaycgJiYgKFxuICAgICAgICA8UmV3aW5kUGlja1BhbmVsXG4gICAgICAgICAgZW50cmllcz17Wy4uLnJld2luZEVudHJpZXMoKV0ucmV2ZXJzZSgpfVxuICAgICAgICAgIHN0YXRzPXsoaW5kZXgpID0+IHJld2luZFN0YXRzKGRlcml2ZWQoKSwgaW5kZXgpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Jld2luZFN0ZXAoKSA9PT0gJ3BpY2snfVxuICAgICAgICAgIG9uUGljaz17KGVudHJ5KSA9PiB7IHNldFJld2luZFRhcmdldChlbnRyeSk7IHNldFJld2luZFN0ZXAoJ2FjdGlvbicpIH19XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0UmV3aW5kU3RlcChudWxsKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtyZXdpbmRTdGVwKCkgPT09ICdhY3Rpb24nICYmIHJld2luZFRhcmdldCgpICYmIChcbiAgICAgICAgPFJld2luZEFjdGlvblBhbmVsXG4gICAgICAgICAgdGFyZ2V0PXtyZXdpbmRUYXJnZXQoKX1cbiAgICAgICAgICBvcHRpb25zPXtyZXdpbmRPcHRpb25zfVxuICAgICAgICAgIGZvY3VzZWQ9e3Jld2luZFN0ZXAoKSA9PT0gJ2FjdGlvbid9XG4gICAgICAgICAgb25TdWJtaXQ9e3BlcmZvcm1SZXdpbmR9XG4gICAgICAgICAgb25CYWNrPXsoKSA9PiBzZXRSZXdpbmRTdGVwKCdwaWNrJyl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7Y29tYmluZWRBY3Rpdml0eSAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgPEFnZW50U3RyaXBSb3cgc2VsZWN0ZWQ9eyF2aWV3ZWRTaGVsbCAmJiAhdmlld2VkQWdlbnR9IGZvY3VzZWQ9e2ZtLmN1cnJlbnQoKSA9PT0gJ2FjdGl2aXR5LW1haW4nfSBvblByZXNzPXsoKSA9PiB7IGZtLmZvY3VzKCdhY3Rpdml0eS1tYWluJyk7IHNldFZpZXdlZFNoZWxsSWQobnVsbCk7IHNldFZpZXdlZEFnZW50SWQobnVsbCk7IHNldEZvbGxvdyh0cnVlKTsgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVykgfX0+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnYWN0aXZpdHktbWFpbicgPyAnYmxhY2snIDogYWNjZW50KCkgfX0+eydcdTI1Q0YgJ308L3RleHQ+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnYWN0aXZpdHktbWFpbicgPyAnYmxhY2snIDogIXZpZXdlZFNoZWxsICYmICF2aWV3ZWRBZ2VudCA/IEZHIDogTVVURUQgfX0+eydtYWluJ308L3RleHQ+XG4gICAgICAgICAgPC9BZ2VudFN0cmlwUm93PlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHt2aXNpYmxlU2hlbGxzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiBjb21iaW5lZEFjdGl2aXR5IHx8IHNob3dDb21wb3NlckFjdGlvbnMgPyAwIDogMSB9fT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7c2hlbGxBY3Rpb25IaW50ID8gYCR7c2hlbGxBY3Rpb25IaW50fSAgYCA6ICcnfWovayBtb3ZlYH08L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgeyFjb21iaW5lZEFjdGl2aXR5ICYmIChcbiAgICAgICAgICAgIDxBZ2VudFN0cmlwUm93IHNlbGVjdGVkPXshdmlld2VkU2hlbGx9IGZvY3VzZWQ9e2ZtLmN1cnJlbnQoKSA9PT0gJ3NoZWxsLW1haW4nfSBvblByZXNzPXsoKSA9PiB7IGZtLmZvY3VzKCdzaGVsbC1tYWluJyk7IHNldFZpZXdlZFNoZWxsSWQobnVsbCk7IHNldFZpZXdlZEFnZW50SWQobnVsbCk7IHNldEZvbGxvdyh0cnVlKSB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmN1cnJlbnQoKSA9PT0gJ3NoZWxsLW1haW4nID8gJ2JsYWNrJyA6IGFjY2VudCgpIH19PnsnXHUyNUNGICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnc2hlbGwtbWFpbicgPyAnYmxhY2snIDogIXZpZXdlZFNoZWxsID8gRkcgOiBNVVRFRCB9fT57J21haW4nfTwvdGV4dD5cbiAgICAgICAgICAgIDwvQWdlbnRTdHJpcFJvdz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtzaGVsbFdpbmRvdy5tYXAoKHMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzZWQgPSBmbS5jdXJyZW50KCkgPT09IGBzaGVsbC0ke3MuaWR9YFxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB2aWV3ZWRTaGVsbElkKCkgPT09IHMuaWRcbiAgICAgICAgICAgIGNvbnN0IGVsYXBzZWQgPSBhZ2VudEVsYXBzZWQoeyBzdGFydGVkQXQ6IHMuc3RhcnRlZEF0LCBlbmRlZEF0OiBzLmVuZGVkQXQgfSlcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxBZ2VudFN0cmlwUm93IGtleT17YHNoZWxsLSR7cy5pZH1gfSBzZWxlY3RlZD17c2VsZWN0ZWR9IGZvY3VzZWQ9e2ZvY3VzZWR9IG9uUHJlc3M9eygpID0+IHsgZm0uZm9jdXMoYHNoZWxsLSR7cy5pZH1gKTsgc2V0Vmlld2VkU2hlbGxJZChzLmlkKTsgc2V0Vmlld2VkQWdlbnRJZChudWxsKTsgc2V0Rm9sbG93KHRydWUpIH19PlxuICAgICAgICAgICAgICAgIHtzLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8gPFNwaW5uZXIgY29sb3I9e2ZvY3VzZWQgPyAnYmxhY2snIDogYWNjZW50KCl9IHZhcmlhbnQ9XCJkb3RzXCIgLz4gOiA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBzLmV4aXRDb2RlID09PSAwID8gR1JFRU4gOiBSRUQgfX0+e3MuZXhpdENvZGUgPT09IDAgPyAnXHUyNUNGJyA6ICdcdTAwRDcnfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgPHRleHQ+eycgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogc2VsZWN0ZWQgPyBGRyA6IE1VVEVEIH19Pntgc2hlbGwgWyR7cy5pZH1dICBgfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e3MuZGVzY3JpcHRpb24gfHwgcy5jb21tYW5kLnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAgJHtzLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8gJycgOiBgZXhpdCAke3MuZXhpdENvZGV9ICBgfSR7ZWxhcHNlZH1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9BZ2VudFN0cmlwUm93PlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pfVxuICAgICAgICAgIHt2aXNpYmxlU2hlbGxzLmxlbmd0aCA+IFNIRUxMX1NUUklQX01BWCAmJiAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICR7c2hlbGxXaW5kb3dTdGFydCA+IDAgPyBgXHUyMTkxICR7c2hlbGxXaW5kb3dTdGFydH1gIDogJyd9JHtzaGVsbFdpbmRvd1N0YXJ0ID4gMCAmJiBzaGVsbFdpbmRvd1N0YXJ0ICsgc2hlbGxXaW5kb3cubGVuZ3RoIDwgdmlzaWJsZVNoZWxscy5sZW5ndGggPyAnICAnIDogJyd9JHtzaGVsbFdpbmRvd1N0YXJ0ICsgc2hlbGxXaW5kb3cubGVuZ3RoIDwgdmlzaWJsZVNoZWxscy5sZW5ndGggPyBgXHUyMTkzICR7dmlzaWJsZVNoZWxscy5sZW5ndGggLSBzaGVsbFdpbmRvd1N0YXJ0IC0gc2hlbGxXaW5kb3cubGVuZ3RofWAgOiAnJ30gbW9yZWB9PC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3Zpc2libGVBZ2VudHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IGNvbWJpbmVkQWN0aXZpdHkgfHwgc2hvd0NvbXBvc2VyQWN0aW9ucyA/IDAgOiAxIH19PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHthZ2VudEFjdGlvbkhpbnQgPyBgJHthZ2VudEFjdGlvbkhpbnR9ICBgIDogJyd9ai9rIG1vdmVgfTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgICB7IWNvbWJpbmVkQWN0aXZpdHkgJiYgKFxuICAgICAgICAgICAgPEFnZW50U3RyaXBSb3cgc2VsZWN0ZWQ9eyF2aWV3ZWRBZ2VudH0gZm9jdXNlZD17Zm0uY3VycmVudCgpID09PSAnYWdlbnQtbWFpbid9IG9uUHJlc3M9eygpID0+IHsgZm0uZm9jdXMoJ2FnZW50LW1haW4nKTsgc2V0Vmlld2VkU2hlbGxJZChudWxsKTsgc2V0Vmlld2VkQWdlbnRJZChudWxsKTsgc2V0Rm9sbG93KHRydWUpOyBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKSB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmN1cnJlbnQoKSA9PT0gJ2FnZW50LW1haW4nID8gJ2JsYWNrJyA6IGFjY2VudCgpIH19PnsnXHUyNUNGICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnYWdlbnQtbWFpbicgPyAnYmxhY2snIDogIXZpZXdlZEFnZW50ID8gRkcgOiBNVVRFRCB9fT57J21haW4nfTwvdGV4dD5cbiAgICAgICAgICAgIDwvQWdlbnRTdHJpcFJvdz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHthZ2VudFdpbmRvdy5tYXAoKGEpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGFnZW50U3RhdHVzKGEpXG4gICAgICAgICAgICBjb25zdCBmb2N1c2VkID0gZm0uY3VycmVudCgpID09PSBgYWdlbnQtJHthLmlkfWBcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxBZ2VudFN0cmlwUm93IGtleT17YGFnZW50LSR7YS5pZH1gfSBzZWxlY3RlZD17dmlld2VkQWdlbnRJZCgpID09PSBhLmlkfSBmb2N1c2VkPXtmb2N1c2VkfSBvblByZXNzPXsoKSA9PiB7IGZtLmZvY3VzKGBhZ2VudC0ke2EuaWR9YCk7IHNldFZpZXdlZFNoZWxsSWQobnVsbCk7IHNldFZpZXdlZEFnZW50SWQoYS5pZCk7IHNldEZvbGxvdyh0cnVlKTsgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVykgfX0+XG4gICAgICAgICAgICAgICAge2Euc3RhdHVzID09PSAncnVubmluZycgPyA8U3Bpbm5lciBjb2xvcj17Zm9jdXNlZCA/ICdibGFjaycgOiBhY2NlbnQoKX0gdmFyaWFudD1cImRvdHNcIiAvPiA6IDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IHN0YXR1cy5jb2xvciB9fT57c3RhdHVzLmljb259PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICA8dGV4dD57JyAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiB2aWV3ZWRBZ2VudElkKCkgPT09IGEuaWQgPyBGRyA6IE1VVEVEIH19PntgJHthLnJvbGUgfHwgJ2FnZW50J30gWyR7YS5pZH1dICBgfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2EuZGVzY3JpcHRpb259PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIHtzdGF0dXMubGFiZWwgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogc3RhdHVzLmNvbG9yIH19PntgICAke3N0YXR1cy5sYWJlbH1gfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2Ake3N0YXR1cy5sYWJlbCA/ICcgICcgOiAnICAnfSAke2FnZW50RWxhcHNlZChhKX0gIFx1MjE5MyBgfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17YS51c2FnZT8udG90YWxUb2tlbnMgfHwgYS51c2FnZT8ucHJvbXB0VG9rZW5zIHx8IDB9IGNvbG9yPXtmb2N1c2VkID8gJ2JsYWNrJyA6IE1VVEVEfSBoaWdobGlnaHQ9e2ZvY3VzZWQgPyAnYmxhY2snIDogYWNjZW50KCl9IGZvcm1hdD17KG4pID0+IGAke2NvbXBhY3ROdW1iZXIobil9IHRva2Vuc2B9IC8+XG4gICAgICAgICAgICAgIDwvQWdlbnRTdHJpcFJvdz5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KX1cbiAgICAgICAgICB7dmlzaWJsZUFnZW50cy5sZW5ndGggPiBBR0VOVF9TVFJJUF9NQVggJiYgKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke2FnZW50V2luZG93U3RhcnQgPiAwID8gYFx1MjE5MSAke2FnZW50V2luZG93U3RhcnR9YCA6ICcnfSR7YWdlbnRXaW5kb3dTdGFydCA+IDAgJiYgYWdlbnRXaW5kb3dTdGFydCArIGFnZW50V2luZG93Lmxlbmd0aCA8IHZpc2libGVBZ2VudHMubGVuZ3RoID8gJyAgJyA6ICcnfSR7YWdlbnRXaW5kb3dTdGFydCArIGFnZW50V2luZG93Lmxlbmd0aCA8IHZpc2libGVBZ2VudHMubGVuZ3RoID8gYFx1MjE5MyAke3Zpc2libGVBZ2VudHMubGVuZ3RoIC0gYWdlbnRXaW5kb3dTdGFydCAtIGFnZW50V2luZG93Lmxlbmd0aH1gIDogJyd9IG1vcmVgfTwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHt3aWRlTGF5b3V0ICYmIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz59XG5cbiAgICAgIHt3aWRlTGF5b3V0ID8gKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgcGFkZGluZ1RvcDogMSB9fT5cbiAgICAgICAgICB7YnVzeSgpICYmIChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICA8U2hpbW1lciBjb2xvcj17YWNjZW50KCl9IGhpZ2hsaWdodD17SElHSExJR0hUfSBkdXJhdGlvbj17MTUwMH0gcmV2ZXJzZT5cbiAgICAgICAgICAgICAgICAgIHtjb21wYWN0aW5nKClcbiAgICAgICAgICAgICAgICAgICAgPyBjb21wYWN0U3RhdHVzKCk/LnBoYXNlID09PSAnd3JpdGluZycgPyBgQ29tcGFjdGluZyAgd3JpdGluZyAke2NvbXBhY3RTdGF0dXMoKS5zZWN0aW9ufS84YCA6ICdDb21wYWN0aW5nICBhbmFseXppbmcnXG4gICAgICAgICAgICAgICAgICAgIDogdHVyblBoYXNlKCkgPT09ICd0aGlua2luZycgPyAnVGhpbmtpbmcnIDogdHVyblBoYXNlKCkgPT09ICd0b29scycgPyAnV29ya2luZycgOiAnUmVzcG9uZGluZyd9XG4gICAgICAgICAgICAgICAgPC9TaGltbWVyPlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgJHtlbGFwc2VkfSAgZXNjIHRvIGludGVycnVwdGB9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAge2NvbXBhY3RTdGF0dXMoKT8ucGhhc2UgPT09ICd3cml0aW5nJyAmJiA8UHJvZ3Jlc3NCYXIgdmFyaWFudD1cInRoaW5cIiB2YWx1ZT17Y29tcGFjdFN0YXR1cygpLnNlY3Rpb24gLyA4fSB3aWR0aD17MzB9IHBlcmNlbnRhZ2U9e2ZhbHNlfSBjb2xvcj17YWNjZW50KCl9IC8+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7Z2l0SW5mbz8uYnJhbmNoICYmIChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQsIGJvbGQ6IHRydWUgfX0+eydSZXBvc2l0b3J5J308L3RleHQ+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnQnJhbmNoICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2dpdEluZm8uYnJhbmNofTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnQ2hhbmdlcyAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICB7Z2l0SW5mby5hZGRlZCA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEdSRUVOIH19PntgJHtnaXRJbmZvLmFkZGVkfSBhZGRlZGB9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICB7Z2l0SW5mby5hZGRlZCA+IDAgJiYgZ2l0SW5mby5yZW1vdmVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eycgICd9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICB7Z2l0SW5mby5yZW1vdmVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogUkVEIH19PntgJHtnaXRJbmZvLnJlbW92ZWR9IHJlbW92ZWRgfTwvdGV4dD59XG4gICAgICAgICAgICAgICAge2dpdEluZm8uYWRkZWQgPT09IDAgJiYgZ2l0SW5mby5yZW1vdmVkID09PSAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J2NsZWFuJ308L3RleHQ+fVxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICl9XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBib2xkOiB0cnVlIH19PnsnU2Vzc2lvbid9PC90ZXh0PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydEaXJlY3RvcnkgICAgICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2Jvb3QuZGlzcGxheUN3ZH08L3RleHQ+PC9ib3g+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J01vZGVsICAgICAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57bW9kZWwoKS5uYW1lfTwvdGV4dD57c3BlZWRBcHBsaWVzKCkgJiYgc3BlZWQoKSA9PT0gJ2Zhc3QnICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57JyBGYXN0J308L3RleHQ+fTwvYm94PlxuICAgICAgICAgICAge2VmZm9ydEFwcGxpZXMoKSAmJiBlZmZvcnQoKSAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J0VmZm9ydCAgICAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntlZmZvcnQoKX08L3RleHQ+PC9ib3g+fVxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydJbnB1dCB0b2tlbnMgICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57TWF0aC5yb3VuZCh1c2FnZS5wcm9tcHRUb2tlbnMpLnRvTG9jYWxlU3RyaW5nKCl9PC90ZXh0PjwvYm94PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydPdXRwdXQgdG9rZW5zICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57TWF0aC5yb3VuZCh1c2FnZS5jb21wbGV0aW9uVG9rZW5zKS50b0xvY2FsZVN0cmluZygpfTwvdGV4dD48L2JveD5cbiAgICAgICAgICAgIHt1c2FnZS50aG91Z2h0VG9rZW5zID4gMCAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1Rob3VnaHQgdG9rZW5zICd9PC90ZXh0PjxBbmltYXRlZFZhbHVlIHZhbHVlPXt1c2FnZS50aG91Z2h0VG9rZW5zfSBjb2xvcj17RkdfU09GVH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gZm9ybWF0PXsobikgPT4gTWF0aC5yb3VuZChuKS50b0xvY2FsZVN0cmluZygpfSAvPjwvYm94Pn1cbiAgICAgICAgICAgIHtjb250ZXh0UGVyY2VudCA+IDAgJiYgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydDb250ZXh0IHVzZWQgICAnfTwvdGV4dD48QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17Y29udGV4dFBlcmNlbnR9IGNvbG9yPXtjb250ZXh0UGVyY2VudCA+PSA4MCA/IFJFRCA6IEZHX1NPRlR9IGhpZ2hsaWdodD17YWNjZW50KCl9IGZvcm1hdD17KG4pID0+IGAke01hdGgucm91bmQobil9JWB9IC8+PC9ib3g+fVxuICAgICAgICAgICAge3BlbmRpbmdXYWtldXBzID4gMCAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1dha2UtdXBzICAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntwZW5kaW5nV2FrZXVwc308L3RleHQ+PC9ib3g+fVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICA8L2JveD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBoZWlnaHQ6IDEgfX0gLz5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBwYWRkaW5nWDogMiwgZ2FwOiAxIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pnttb2RlbCgpLm5hbWV9PC90ZXh0PlxuICAgICAgICAgICAge3NwZWVkQXBwbGllcygpICYmIHNwZWVkKCkgPT09ICdmYXN0JyAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+RmFzdDwvdGV4dD59XG4gICAgICAgICAgICB7ZWZmb3J0QXBwbGllcygpICYmIGVmZm9ydCgpICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57ZWZmb3J0KCl9PC90ZXh0Pn1cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICAgIHtwZW5kaW5nV2FrZXVwcyA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgXHUyM0YwICR7cGVuZGluZ1dha2V1cHN9YH08L3RleHQ+fVxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtjb21wYWN0TnVtYmVyKHVzYWdlLnByb21wdFRva2Vucyl9IFx1MjE5M2B9PC90ZXh0PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtjb21wYWN0TnVtYmVyKHVzYWdlLmNvbXBsZXRpb25Ub2tlbnMpfSBcdTIxOTFgfTwvdGV4dD5cbiAgICAgICAgICAgIHt1c2FnZS50aG91Z2h0VG9rZW5zID4gMCAmJiA8QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17dXNhZ2UudGhvdWdodFRva2Vuc30gY29sb3I9e01VVEVEfSBoaWdobGlnaHQ9e2FjY2VudCgpfSBmb3JtYXQ9eyhuKSA9PiBgJHtjb21wYWN0TnVtYmVyKG4pfSBcdTI1QzhgfSAvPn1cbiAgICAgICAgICAgIHtjb250ZXh0UGVyY2VudCA+IDAgJiYgPEFuaW1hdGVkVmFsdWUgdmFsdWU9e2NvbnRleHRQZXJjZW50fSBjb2xvcj17Y29udGV4dFBlcmNlbnQgPj0gODAgPyBSRUQgOiBNVVRFRH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gYmFja2dyb3VuZD17UEFORUxfQkd9IGZvcm1hdD17Y29udGV4dEJhcn0gLz59XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICAgIDwvYm94PlxuICAgICAgeyF3b3Jrc3BhY2VPcGVuKCkgJiYgPERpY3RhdGlvbktleXMgaW5wdXQ9e3JlZnMuZGljdGF0aW9uSW5wdXR9IC8+fVxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY29tbWFuZEF0KHRleHQsIGN1cnNvciA9IHRleHQubGVuZ3RoKSB7XG4gIGNvbnN0IG1hdGNoID0gdGV4dC5zbGljZSgwLCBjdXJzb3IpLm1hdGNoKC8oXnxbXFxzKF0pXFwvKFtBLVphLXowLTlfLV0qKSQvKVxuICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbFxuICBjb25zdCBzdGFydCA9IGN1cnNvciAtIG1hdGNoWzJdLmxlbmd0aCAtIDFcbiAgY29uc3Qgc3VmZml4ID0gdGV4dC5zbGljZShjdXJzb3IpLm1hdGNoKC9eW0EtWmEtejAtOV8tXSovKVswXVxuICByZXR1cm4geyBzdGFydCwgZW5kOiBjdXJzb3IgKyBzdWZmaXgubGVuZ3RoLCBxdWVyeTogbWF0Y2hbMl0gfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUNvbW1hbmQodGV4dCwgcmFuZ2UsIGJvZHkpIHtcbiAgcmV0dXJuIHtcbiAgICB0ZXh0OiB0ZXh0LnNsaWNlKDAsIHJhbmdlLnN0YXJ0KSArIGJvZHkgKyB0ZXh0LnNsaWNlKHJhbmdlLmVuZCksXG4gICAgY3Vyc29yOiByYW5nZS5zdGFydCArIGJvZHkubGVuZ3RoLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21tYW5kRmllbGRzKGNvbW1hbmQsIGJvZHksIGFyZ3MgPSAnJykge1xuICBjb25zdCBmaWVsZHMgPSBbLi4uKGNvbW1hbmQuYXJndW1lbnRzID8/IFtdKV1cbiAgaWYgKGJvZHkuaW5jbHVkZXMoJyRBUkdVTUVOVFMnKSAmJiAhYXJncykge1xuICAgIGZpZWxkcy5wdXNoKHsgbmFtZTogJyRhcmdzJywgbGFiZWw6ICdBcmd1bWVudHMnLCB0eXBlOiAndGV4dCcgfSlcbiAgfVxuICByZXR1cm4gZmllbGRzXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBUZXh0QXJlYSwgTWVudSwgQnV0dG9uLCB1c2VJbnB1dCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGZ1enp5U2NvcmUsIHJhbmtGdXp6eSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZnV6enkuanMnXG5pbXBvcnQgeyBhY2NlbnQsIEZHLCBNVVRFRCwgUEFORUxfQkcgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5leHBvcnQgZnVuY3Rpb24gQ29tbWFuZEZvcm0oeyBuYW1lLCBmaWVsZHMsIGZpbGVzLCBmb2N1c2VkLCBvblN1Ym1pdCwgb25DYW5jZWwgfSkge1xuICBjb25zdCBbc3RlcCwgc2V0U3RlcF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3ZhbHVlcywgc2V0VmFsdWVzXSA9IGNyZWF0ZVNpZ25hbCh7fSlcbiAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IFtzZWxlY3RlZCwgc2V0U2VsZWN0ZWRdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IGZpZWxkID0gZmllbGRzW3N0ZXAoKV1cbiAgY29uc3Qgb3B0aW9ucyA9IGZpZWxkLnR5cGUgPT09ICdjaG9pY2UnID8gZmllbGQuY2hvaWNlcyA6IGZpZWxkLnR5cGUgPT09ICdwYXRoJyA/IGZpbGVzIDogW11cbiAgY29uc3QgbWF0Y2hlcyA9IHJhbmtGdXp6eShvcHRpb25zLCBxdWVyeSgpLCAocSwgdmFsdWUpID0+IGZ1enp5U2NvcmUocSwgdmFsdWUpKVxuXG4gIGZ1bmN0aW9uIGFkdmFuY2UodmFsdWUpIHtcbiAgICBjb25zdCBuZXh0ID0geyAuLi52YWx1ZXMoKSwgW2ZpZWxkLm5hbWVdOiB2YWx1ZSB9XG4gICAgc2V0VmFsdWVzKG5leHQpXG4gICAgaWYgKHN0ZXAoKSA9PT0gZmllbGRzLmxlbmd0aCAtIDEpIHJldHVybiBvblN1Ym1pdChuZXh0KVxuICAgIHNldFN0ZXAoc3RlcCgpICsgMSlcbiAgICBzZXRRdWVyeSgnJylcbiAgICBzZXRTZWxlY3RlZCgwKVxuICB9XG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DYW5jZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGdhcDogMiB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PntgLyR7bmFtZX1gfTwvdGV4dD5cbiAgICAgICAge2ZpZWxkcy5zbGljZSgwLCBzdGVwKCkpLm1hcCgoaXRlbSkgPT4gPHRleHQga2V5PXtpdGVtLm5hbWV9IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57dmFsdWVzKClbaXRlbS5uYW1lXX08L3RleHQ+KX1cbiAgICAgICAgPEJ1dHRvbiBsYWJlbD1cIkNhbmNlbFwiIG9uUHJlc3M9e29uQ2FuY2VsfSAvPlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+e2ZpZWxkLmxhYmVsfTwvdGV4dD5cbiAgICAgIDxUZXh0QXJlYVxuICAgICAgICBrZXk9e2ZpZWxkLm5hbWV9XG4gICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgIHZhbHVlPXtxdWVyeSgpfVxuICAgICAgICBzdWJtaXRPbkVudGVyXG4gICAgICAgIGNsZWFyT25TdWJtaXQ9e2ZhbHNlfVxuICAgICAgICBtYXhIZWlnaHQ9ezF9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtmaWVsZC5sYWJlbH1cbiAgICAgICAgb25DYW5jZWw9e29uQ2FuY2VsfVxuICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PiB7IHNldFF1ZXJ5KHZhbHVlKTsgc2V0U2VsZWN0ZWQoMCkgfX1cbiAgICAgICAgb25TdWJtaXQ9eyh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnY2hvaWNlJykge1xuICAgICAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoKSBhZHZhbmNlKG1hdGNoZXNbTWF0aC5taW4oc2VsZWN0ZWQoKSwgbWF0Y2hlcy5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgfSBlbHNlIGFkdmFuY2UoZmllbGQudHlwZSA9PT0gJ3BhdGgnICYmIG1hdGNoZXMubGVuZ3RoICYmICF2YWx1ZS5zdGFydHNXaXRoKCcvJykgJiYgIXZhbHVlLnN0YXJ0c1dpdGgoJ34nKSA/IG1hdGNoZXNbTWF0aC5taW4oc2VsZWN0ZWQoKSwgbWF0Y2hlcy5sZW5ndGggLSAxKV0gOiB2YWx1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25LZXlEb3duPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnZG93bicgJiYgbWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkKE1hdGgubWluKHNlbGVjdGVkKCkgKyAxLCBtYXRjaGVzLmxlbmd0aCAtIDEpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ3VwJyAmJiBtYXRjaGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWQoTWF0aC5tYXgoMCwgc2VsZWN0ZWQoKSAtIDEpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ3RhYicgJiYgbWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNldFF1ZXJ5KG1hdGNoZXNbTWF0aC5taW4oc2VsZWN0ZWQoKSwgbWF0Y2hlcy5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgICB7bWF0Y2hlcy5sZW5ndGggPiAwICYmIDxNZW51XG4gICAgICAgIGl0ZW1zPXttYXRjaGVzfVxuICAgICAgICBzZWxlY3RlZD17c2VsZWN0ZWQoKX1cbiAgICAgICAgb25TZWxlY3Q9e3NldFNlbGVjdGVkfVxuICAgICAgICBvblN1Ym1pdD17YWR2YW5jZX1cbiAgICAgICAgZm9jdXNlZD17ZmFsc2V9XG4gICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgIHJlbmRlckl0ZW09eyh2YWx1ZSwgeyBhY3RpdmUgfSkgPT4gPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+e2Ake2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9JHt2YWx1ZX1gfTwvdGV4dD59XG4gICAgICAvPn1cbiAgICA8L2JveD5cbiAgKVxufVxuIiwgImNvbnN0IGZpbGxlciA9IC8oPzwhW15cXHMsOzohP10pKD86dWh8dW0pKD89JHxbXFxzLDs6LiE/XSkoWyBcXHRdKlssOzouIT9dKilbIFxcdF0qL2dpdVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5EaWN0YXRpb24odGV4dCkge1xuICByZXR1cm4gdGV4dC5zcGxpdCgnXFxuJykubWFwKGNsZWFuTGluZSkuam9pbignXFxuJykudHJpbSgpXG59XG5cbmZ1bmN0aW9uIGNsZWFuTGluZShsaW5lKSB7XG4gIGxldCByZXN1bHQgPSAnJ1xuICBsZXQgb2Zmc2V0ID0gMFxuICBsZXQgY2FwaXRhbGl6ZSA9IGZhbHNlXG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgbGluZS5tYXRjaEFsbChmaWxsZXIpKSB7XG4gICAgbGV0IGJlZm9yZSA9IGxpbmUuc2xpY2Uob2Zmc2V0LCBtYXRjaC5pbmRleClcbiAgICBpZiAoY2FwaXRhbGl6ZSkgYmVmb3JlID0gdXBwZXJGaXJzdChiZWZvcmUpXG4gICAgcmVzdWx0ICs9IGJlZm9yZVxuICAgIGNvbnN0IGFmdGVyID0gbGluZS5zbGljZShtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aClcbiAgICBjb25zdCB0ZXJtaW5hbCA9IG1hdGNoWzFdLm1hdGNoKC9bLiE/XSsvKT8uWzBdID8/ICcnXG4gICAgcmVzdWx0ID0gcmVzdWx0LnRyaW1FbmQoKVxuICAgIGNvbnN0IHNlbnRlbmNlU3RhcnQgPSAhcmVzdWx0IHx8IC9bLiE/XSQvLnRlc3QocmVzdWx0KVxuICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC8sJC8sICcnKVxuICAgIGlmICghYWZ0ZXIpIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9bOzpdJC8sICcnKVxuICAgIGlmICh0ZXJtaW5hbCAmJiAhc2VudGVuY2VTdGFydCkgcmVzdWx0ICs9IHRlcm1pbmFsXG4gICAgY2FwaXRhbGl6ZSA9IHNlbnRlbmNlU3RhcnQgfHwgQm9vbGVhbih0ZXJtaW5hbClcbiAgICBpZiAocmVzdWx0ICYmIGFmdGVyKSByZXN1bHQgKz0gJyAnXG4gICAgb2Zmc2V0ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGhcbiAgfVxuICBjb25zdCB0YWlsID0gbGluZS5zbGljZShvZmZzZXQpXG4gIHJldHVybiByZXN1bHQgKyAoY2FwaXRhbGl6ZSA/IHVwcGVyRmlyc3QodGFpbCkgOiB0YWlsKVxufVxuXG5mdW5jdGlvbiB1cHBlckZpcnN0KHRleHQpIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSgvXihcXHMqKShcXHB7TGx9KSg/IVxccHtMdX0pL3UsIChfLCBzcGFjZSwgbGV0dGVyKSA9PiBzcGFjZSArIGxldHRlci50b1VwcGVyQ2FzZSgpKVxufVxuXG4iLCAiaW1wb3J0IHsgY2xlYW5EaWN0YXRpb24gfSBmcm9tICcuL2RpY3RhdGlvbi10ZXh0LmpzJ1xuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcydcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCdcblxuZXhwb3J0IGZ1bmN0aW9uIGRpY3RhdGlvbkhlbHBlclBhdGgoKSB7XG4gIGNvbnN0IGJ1bmRsZWQgPSBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoJy4vcGljby1kaWN0YXRlJywgaW1wb3J0Lm1ldGEudXJsKSlcbiAgcmV0dXJuIGV4aXN0c1N5bmMoYnVuZGxlZCkgPyBidW5kbGVkIDogZmlsZVVSTFRvUGF0aChuZXcgVVJMKCcuLi9oZWxwZXIvLmJ1aWxkL3JlbGVhc2UvcGljby1kaWN0YXRlJywgaW1wb3J0Lm1ldGEudXJsKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURpY3RhdGlvbih7IG9uU3RhdHVzID0gKCkgPT4ge30sIG9uTGV2ZWwgPSAoKSA9PiB7fSwgb25FcnJvciA9ICgpID0+IHt9LCBwbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm0sIGFyY2ggPSBwcm9jZXNzLmFyY2gsIGxhdW5jaCA9ICgpID0+IHNwYXduKGRpY3RhdGlvbkhlbHBlclBhdGgoKSwgW10sIHsgc3RkaW86IFsncGlwZScsICdwaXBlJywgJ3BpcGUnXSB9KSwgbG9hZGluZ1RpbWVvdXQgPSA2MDAwMDAsIHJlcXVlc3RUaW1lb3V0ID0gNDUwMDAgfSA9IHt9KSB7XG4gIGxldCBjaGlsZCA9IG51bGxcbiAgbGV0IHN0YXR1cyA9ICdpZGxlJ1xuICBsZXQgc2VxdWVuY2UgPSAwXG4gIGxldCBnZW5lcmF0aW9uID0gMFxuICBsZXQgcmVhZHkgPSBudWxsXG4gIGxldCBkaXNwb3NlZCA9IGZhbHNlXG4gIGNvbnN0IHBlbmRpbmcgPSBuZXcgTWFwKClcblxuICBmdW5jdGlvbiBzZXRTdGF0dXModmFsdWUpIHtcbiAgICBzdGF0dXMgPSB2YWx1ZVxuICAgIG9uU3RhdHVzKHZhbHVlKVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXQoZXJyb3IgPSBuZXcgRXJyb3IoJ2RpY3RhdGlvbiBjYW5jZWxsZWQnKSkge1xuICAgIGNvbnN0IHByZXZpb3VzID0gY2hpbGRcbiAgICBjaGlsZCA9IG51bGxcbiAgICByZWFkeSA9IG51bGxcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHBlbmRpbmcudmFsdWVzKCkpIHtcbiAgICAgIGNsZWFyVGltZW91dChlbnRyeS50aW1lcilcbiAgICAgIGVudHJ5LnJlamVjdChlcnJvcilcbiAgICB9XG4gICAgcGVuZGluZy5jbGVhcigpXG4gICAgcHJldmlvdXM/LnN0ZGluLmVuZCgpXG4gICAgcHJldmlvdXM/LmtpbGwoKVxuICAgIHNldFN0YXR1cygnaWRsZScpXG4gIH1cblxuICBmdW5jdGlvbiB3YWl0Rm9yKGlkLCB0aW1lb3V0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiByZXNldChuZXcgRXJyb3IoJ2RpY3RhdGlvbiB0aW1lZCBvdXQnKSksIHRpbWVvdXQpXG4gICAgICBwZW5kaW5nLnNldChpZCwgeyByZXNvbHZlLCByZWplY3QsIHRpbWVyIH0pXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldHRsZShpZCwgbWVzc2FnZSkge1xuICAgIGNvbnN0IGVudHJ5ID0gcGVuZGluZy5nZXQoaWQpXG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuXG4gICAgcGVuZGluZy5kZWxldGUoaWQpXG4gICAgY2xlYXJUaW1lb3V0KGVudHJ5LnRpbWVyKVxuICAgIGlmIChtZXNzYWdlLmVycm9yKSBlbnRyeS5yZWplY3QobmV3IEVycm9yKG1lc3NhZ2UuZXJyb3IpKVxuICAgIGVsc2UgZW50cnkucmVzb2x2ZShtZXNzYWdlKVxuICB9XG5cbiAgZnVuY3Rpb24gbG9hZCgpIHtcbiAgICBpZiAocmVhZHkpIHJldHVybiByZWFkeVxuICAgIGlmIChwbGF0Zm9ybSAhPT0gJ2RhcndpbicgfHwgYXJjaCAhPT0gJ2FybTY0JykgdGhyb3cgbmV3IEVycm9yKCdkaWN0YXRpb24gcmVxdWlyZXMgYW4gQXBwbGUgU2lsaWNvbiBNYWMnKVxuICAgIGNvbnN0IGluc3RhbmNlID0gbGF1bmNoKClcbiAgICBjaGlsZCA9IGluc3RhbmNlXG4gICAgcmVhZHkgPSB3YWl0Rm9yKCdyZWFkeScsIGxvYWRpbmdUaW1lb3V0KVxuICAgIGxldCBidWZmZXIgPSAnJ1xuICAgIGluc3RhbmNlLnN0ZG91dC5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgaWYgKGNoaWxkICE9PSBpbnN0YW5jZSkgcmV0dXJuXG4gICAgICBidWZmZXIgKz0gY2h1bmsudG9TdHJpbmcoKVxuICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPiAxMDI0ICogMTAyNCkgcmV0dXJuIHJlc2V0KG5ldyBFcnJvcignaW52YWxpZCBkaWN0YXRpb24gaGVscGVyIG91dHB1dCcpKVxuICAgICAgbGV0IGF0XG4gICAgICB3aGlsZSAoKGF0ID0gYnVmZmVyLmluZGV4T2YoJ1xcbicpKSA+PSAwKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBidWZmZXIuc2xpY2UoMCwgYXQpXG4gICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5zbGljZShhdCArIDEpXG4gICAgICAgIGxldCBtZXNzYWdlXG4gICAgICAgIHRyeSB7IG1lc3NhZ2UgPSBKU09OLnBhcnNlKGxpbmUpIH0gY2F0Y2ggeyBjb250aW51ZSB9XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXR1cyA9PT0gJ2xldmVsJykge1xuICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdyZWNvcmRpbmcnICYmIE51bWJlci5pc0Zpbml0ZShtZXNzYWdlLmxldmVsKSkgb25MZXZlbChNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBtZXNzYWdlLmxldmVsKSkpXG4gICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5zdGF0dXMgPT09ICdyZWFkeScpIHNldHRsZSgncmVhZHknLCBtZXNzYWdlKVxuICAgICAgICBlbHNlIGlmIChtZXNzYWdlLnN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UubWVzc2FnZSB8fCAnZGljdGF0aW9uIGZhaWxlZCcpXG4gICAgICAgICAgY29uc3QgYWN0aXZlID0gcGVuZGluZy5zaXplID4gMFxuICAgICAgICAgIHJlc2V0KGVycm9yKVxuICAgICAgICAgIGlmICghYWN0aXZlKSBvbkVycm9yKGVycm9yLm1lc3NhZ2UpXG4gICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5pZCAhPSBudWxsKSBzZXR0bGUobWVzc2FnZS5pZCwgbWVzc2FnZSlcbiAgICAgIH1cbiAgICB9KVxuICAgIGluc3RhbmNlLnN0ZGVyci5vbignZGF0YScsICgpID0+IHt9KVxuICAgIGNvbnN0IGZhaWxlZCA9IChlcnJvcikgPT4ge1xuICAgICAgaWYgKGNoaWxkICE9PSBpbnN0YW5jZSkgcmV0dXJuXG4gICAgICBjb25zdCBhY3RpdmUgPSBwZW5kaW5nLnNpemUgPiAwXG4gICAgICBjb25zdCByZWNvcmRpbmcgPSBzdGF0dXMgPT09ICdyZWNvcmRpbmcnXG4gICAgICByZXNldChlcnJvcilcbiAgICAgIGlmICghYWN0aXZlICYmIHJlY29yZGluZykgb25FcnJvcihlcnJvci5tZXNzYWdlKVxuICAgIH1cbiAgICBpbnN0YW5jZS5vbignZXJyb3InLCAoZXJyb3IpID0+IGZhaWxlZChuZXcgRXJyb3IoYGRpY3RhdGlvbiBoZWxwZXIgdW5hdmFpbGFibGU6ICR7ZXJyb3IubWVzc2FnZX1gKSkpXG4gICAgaW5zdGFuY2Uuc3RkaW4ub24oJ2Vycm9yJywgZmFpbGVkKVxuICAgIGluc3RhbmNlLm9uKCdleGl0JywgKCkgPT4gZmFpbGVkKG5ldyBFcnJvcignZGljdGF0aW9uIGhlbHBlciBleGl0ZWQnKSkpXG4gICAgcmV0dXJuIHJlYWR5XG4gIH1cblxuICBmdW5jdGlvbiByZXF1ZXN0KG9wKSB7XG4gICAgY29uc3QgaWQgPSArK3NlcXVlbmNlXG4gICAgY29uc3QgcmVzdWx0ID0gd2FpdEZvcihpZCwgcmVxdWVzdFRpbWVvdXQpXG4gICAgdHJ5IHsgY2hpbGQuc3RkaW4ud3JpdGUoYCR7SlNPTi5zdHJpbmdpZnkoeyBpZCwgb3AgfSl9XFxuYCkgfSBjYXRjaCAoZXJyb3IpIHsgcmVzZXQoZXJyb3IpIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBwcmVsb2FkKCkge1xuICAgIGlmIChkaXNwb3NlZCkgcmV0dXJuXG4gICAgdHJ5IHsgYXdhaXQgbG9hZCgpIH0gY2F0Y2gge31cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkge1xuICAgIGlmIChkaXNwb3NlZCB8fCBzdGF0dXMgIT09ICdpZGxlJykgcmV0dXJuXG4gICAgY29uc3QgdG9rZW4gPSArK2dlbmVyYXRpb25cbiAgICBzZXRTdGF0dXMoJ2xvYWRpbmcnKVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBsb2FkKClcbiAgICAgIGlmICh0b2tlbiAhPT0gZ2VuZXJhdGlvbikgcmV0dXJuXG4gICAgICBzZXRTdGF0dXMoJ3N0YXJ0aW5nJylcbiAgICAgIGF3YWl0IHJlcXVlc3QoJ3N0YXJ0JylcbiAgICAgIGlmICh0b2tlbiA9PT0gZ2VuZXJhdGlvbikgc2V0U3RhdHVzKCdyZWNvcmRpbmcnKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAodG9rZW4gIT09IGdlbmVyYXRpb24pIHJldHVyblxuICAgICAgcmVzZXQoZXJyb3IpXG4gICAgICBvbkVycm9yKGVycm9yLm1lc3NhZ2UpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc3RvcCgpIHtcbiAgICBpZiAoc3RhdHVzICE9PSAncmVjb3JkaW5nJykgcmV0dXJuIG51bGxcbiAgICBjb25zdCB0b2tlbiA9IGdlbmVyYXRpb25cbiAgICBzZXRTdGF0dXMoJ3RyYW5zY3JpYmluZycpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcXVlc3QoJ3N0b3AnKVxuICAgICAgaWYgKHRva2VuICE9PSBnZW5lcmF0aW9uKSByZXR1cm4gbnVsbFxuICAgICAgc2V0U3RhdHVzKCdpZGxlJylcbiAgICAgIHJldHVybiBjbGVhbkRpY3RhdGlvbihyZXN1bHQudGV4dCB8fCAnJylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHRva2VuID09PSBnZW5lcmF0aW9uKSB7XG4gICAgICAgIHJlc2V0KGVycm9yKVxuICAgICAgICBvbkVycm9yKGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBjb25zdCB0b2tlbiA9ICsrZ2VuZXJhdGlvblxuICAgIGlmIChzdGF0dXMgPT09ICdpZGxlJykgcmV0dXJuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ3JlY29yZGluZycpIHJldHVybiByZXNldCgpXG4gICAgc2V0U3RhdHVzKCdjYW5jZWxsaW5nJylcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcmVxdWVzdCgnY2FuY2VsJylcbiAgICAgIGlmICh0b2tlbiA9PT0gZ2VuZXJhdGlvbikgc2V0U3RhdHVzKCdpZGxlJylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHRva2VuID09PSBnZW5lcmF0aW9uKSByZXNldChlcnJvcilcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgIGRpc3Bvc2VkID0gdHJ1ZVxuICAgICsrZ2VuZXJhdGlvblxuICAgIHJlc2V0KClcbiAgfVxuXG4gIHJldHVybiB7IHByZWxvYWQsIHN0YXJ0LCBzdG9wLCBjYW5jZWwsIGRpc3Bvc2UsIGdldCBzdGF0dXMoKSB7IHJldHVybiBzdGF0dXMgfSB9XG59XG4iLCAiaW1wb3J0IHsgZXhlY0ZpbGUgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICdub2RlOnV0aWwnXG5pbXBvcnQgeyBta2R0ZW1wLCB3cml0ZUZpbGUsIHJtIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcydcbmltcG9ydCB7IHJtU3luYyB9IGZyb20gJ25vZGU6ZnMnXG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJ1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCdcblxuY29uc3QgZXhlY3V0ZSA9IHByb21pc2lmeShleGVjRmlsZSlcbmNvbnN0IGRpcmVjdG9yaWVzID0gbmV3IFNldCgpXG5wcm9jZXNzLm9uY2UoJ2V4aXQnLCAoKSA9PiB7XG4gIGZvciAoY29uc3QgZGlyIG9mIGRpcmVjdG9yaWVzKSBybVN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcbn0pXG5cbmNvbnN0IG1hY1NjcmlwdCA9IGBPYmpDLmltcG9ydCgnQXBwS2l0Jyk7IE9iakMuaW1wb3J0KCdGb3VuZGF0aW9uJyk7XG5jb25zdCBwYXN0ZWJvYXJkID0gJC5OU1Bhc3RlYm9hcmQuZ2VuZXJhbFBhc3RlYm9hcmQ7XG5jb25zdCBmaWxlcyA9IHBhc3RlYm9hcmQucHJvcGVydHlMaXN0Rm9yVHlwZSgnTlNGaWxlbmFtZXNQYm9hcmRUeXBlJyk7XG5sZXQgaW1hZ2UgPSBudWxsO1xuaWYgKCFmaWxlcy5pc05pbCgpICYmIGZpbGVzLmNvdW50ID4gMCkge1xuICBjb25zdCBwYXRoID0gT2JqQy51bndyYXAoZmlsZXMub2JqZWN0QXRJbmRleCgwKSk7XG4gIGlmICgvXFxcXC4ocG5nfGpwZT9nfGdpZnx3ZWJwKSQvaS50ZXN0KHBhdGgpKSBpbWFnZSA9ICQuTlNJbWFnZS5hbGxvYy5pbml0V2l0aENvbnRlbnRzT2ZGaWxlKHBhdGgpO1xufVxuaWYgKCFpbWFnZSB8fCBpbWFnZS5pc05pbCgpKSBpbWFnZSA9ICQuTlNJbWFnZS5hbGxvYy5pbml0V2l0aFBhc3RlYm9hcmQocGFzdGVib2FyZCk7XG5sZXQgZGF0YSA9IG51bGw7XG5pZiAoIWltYWdlLmlzTmlsKCkpIHtcbiAgY29uc3QgYml0bWFwID0gJC5OU0JpdG1hcEltYWdlUmVwLmltYWdlUmVwV2l0aERhdGEoaW1hZ2UuVElGRlJlcHJlc2VudGF0aW9uKTtcbiAgZGF0YSA9IGJpdG1hcC5yZXByZXNlbnRhdGlvblVzaW5nVHlwZVByb3BlcnRpZXMoJC5OU0JpdG1hcEltYWdlRmlsZVR5cGVQTkcsICQoe30pKTtcbn1cbmRhdGEgPyBPYmpDLnVud3JhcChkYXRhLmJhc2U2NEVuY29kZWRTdHJpbmdXaXRoT3B0aW9ucygwKSkgOiAnJ2BcblxuY29uc3Qgd2luZG93c1NjcmlwdCA9IGBBZGQtVHlwZSAtQXNzZW1ibHlOYW1lIFN5c3RlbS5XaW5kb3dzLkZvcm1zOyBBZGQtVHlwZSAtQXNzZW1ibHlOYW1lIFN5c3RlbS5EcmF3aW5nO1xuaWYgKFtTeXN0ZW0uV2luZG93cy5Gb3Jtcy5DbGlwYm9hcmRdOjpDb250YWluc0ltYWdlKCkpIHtcbiAgJGltYWdlID0gW1N5c3RlbS5XaW5kb3dzLkZvcm1zLkNsaXBib2FyZF06OkdldEltYWdlKCk7XG4gICRzdHJlYW0gPSBOZXctT2JqZWN0IFN5c3RlbS5JTy5NZW1vcnlTdHJlYW07XG4gIHRyeSB7ICRpbWFnZS5TYXZlKCRzdHJlYW0sIFtTeXN0ZW0uRHJhd2luZy5JbWFnaW5nLkltYWdlRm9ybWF0XTo6UG5nKTsgW0NvbnZlcnRdOjpUb0Jhc2U2NFN0cmluZygkc3RyZWFtLlRvQXJyYXkoKSkgfVxuICBmaW5hbGx5IHsgJHN0cmVhbS5EaXNwb3NlKCk7ICRpbWFnZS5EaXNwb3NlKCkgfVxufWBcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRDbGlwYm9hcmRJbWFnZSh7IHBsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybSwgZW52ID0gcHJvY2Vzcy5lbnYsIHJ1biA9IGV4ZWN1dGUgfSA9IHt9KSB7XG4gIGlmIChlbnYuU1NIX0NPTk5FQ1RJT04gfHwgZW52LlNTSF9UVFkpIHRocm93IG5ldyBFcnJvcignY2xpcGJvYXJkIGltYWdlcyBhcmUgdW5hdmFpbGFibGUgb3ZlciBTU0gnKVxuICBjb25zdCBvcHRpb25zID0geyBlbmNvZGluZzogJ2J1ZmZlcicsIHRpbWVvdXQ6IDEwMDAwLCBtYXhCdWZmZXI6IDMyICogMTAyNCAqIDEwMjQgfVxuICBsZXQgZGF0YVxuICB0cnkge1xuICAgIGlmIChwbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBydW4oJ29zYXNjcmlwdCcsIFsnLWwnLCAnSmF2YVNjcmlwdCcsICctZScsIG1hY1NjcmlwdF0sIG9wdGlvbnMpXG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oc3Rkb3V0LnRvU3RyaW5nKCkudHJpbSgpLCAnYmFzZTY0JylcbiAgICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgcnVuKCdwb3dlcnNoZWxsLmV4ZScsIFsnLU5vUHJvZmlsZScsICctTm9uSW50ZXJhY3RpdmUnLCAnLVNUQScsICctQ29tbWFuZCcsIHdpbmRvd3NTY3JpcHRdLCBvcHRpb25zKVxuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKHN0ZG91dC50b1N0cmluZygpLnRyaW0oKSwgJ2Jhc2U2NCcpXG4gICAgfSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gJ2xpbnV4Jykge1xuICAgICAgY29uc3Qgd2F5bGFuZCA9IEJvb2xlYW4oZW52LldBWUxBTkRfRElTUExBWSlcbiAgICAgIGNvbnN0IGNvbW1hbmQgPSB3YXlsYW5kID8gJ3dsLXBhc3RlJyA6ICd4Y2xpcCdcbiAgICAgIGNvbnN0IHsgc3Rkb3V0OiB0eXBlcyB9ID0gYXdhaXQgcnVuKGNvbW1hbmQsIHdheWxhbmQgPyBbJy0tbGlzdC10eXBlcyddIDogWyctc2VsZWN0aW9uJywgJ2NsaXBib2FyZCcsICctdCcsICdUQVJHRVRTJywgJy1vJ10sIG9wdGlvbnMpXG4gICAgICBpZiAoIXR5cGVzLnRvU3RyaW5nKCkuc3BsaXQoL1xccysvKS5pbmNsdWRlcygnaW1hZ2UvcG5nJykpIHJldHVybiBudWxsXG4gICAgICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgcnVuKGNvbW1hbmQsIHdheWxhbmQgPyBbJy0tdHlwZScsICdpbWFnZS9wbmcnLCAnLS1uby1uZXdsaW5lJ10gOiBbJy1zZWxlY3Rpb24nLCAnY2xpcGJvYXJkJywgJy10JywgJ2ltYWdlL3BuZycsICctbyddLCBvcHRpb25zKVxuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKHN0ZG91dClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjbGlwYm9hcmQgaW1hZ2VzIGFyZSB1bnN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtJylcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yLmNvZGUgPT09ICdFTk9FTlQnKSB0aHJvdyBuZXcgRXJyb3IoJ2NsaXBib2FyZCByZWFkZXIgdW5hdmFpbGFibGU6IGluc3RhbGwgJyArIChlbnYuV0FZTEFORF9ESVNQTEFZID8gJ3dsLWNsaXBib2FyZCcgOiBwbGF0Zm9ybSA9PT0gJ2xpbnV4JyA/ICd4Y2xpcCcgOiAndGhlIHN5c3RlbSBjbGlwYm9hcmQgdG9vbHMnKSlcbiAgICB0aHJvdyBlcnJvclxuICB9XG4gIGlmICghZGF0YS5sZW5ndGgpIHJldHVybiBudWxsXG4gIGlmICghZGF0YS5zdWJhcnJheSgwLCA4KS5lcXVhbHMoQnVmZmVyLmZyb20oWzEzNywgODAsIDc4LCA3MSwgMTMsIDEwLCAyNiwgMTBdKSkpIHRocm93IG5ldyBFcnJvcignY2xpcGJvYXJkIGRpZCBub3QgcmV0dXJuIGEgUE5HIGltYWdlJylcbiAgY29uc3QgZGlyID0gYXdhaXQgbWtkdGVtcChqb2luKHRtcGRpcigpLCAncGljby1jbGlwYm9hcmQtJykpXG4gIGRpcmVjdG9yaWVzLmFkZChkaXIpXG4gIGNvbnN0IGRpc3Bvc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgcm0oZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcbiAgICBkaXJlY3Rvcmllcy5kZWxldGUoZGlyKVxuICB9XG4gIGNvbnN0IHBhdGggPSBqb2luKGRpciwgJ2NsaXBib2FyZC5wbmcnKVxuICB0cnkge1xuICAgIGF3YWl0IHdyaXRlRmlsZShwYXRoLCBkYXRhLCB7IG1vZGU6IDBvNjAwIH0pXG4gICAgcmV0dXJuIHsgcGF0aCwgZGlzcG9zZSB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgYXdhaXQgZGlzcG9zZSgpXG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDbGlwYm9hcmRJbnB1dCh7IHJlYWRJbWFnZSwgZ2V0RHJhZnQsIGF0dGFjaEltYWdlLCBzZXRJbnB1dCwgb25FcnJvciB9KSB7XG4gIGxldCBwZW5kaW5nID0gZmFsc2VcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIHBhc3RlSW1hZ2UoKSB7XG4gICAgaWYgKHBlbmRpbmcpIHJldHVyblxuICAgIHBlbmRpbmcgPSB0cnVlXG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0RHJhZnQoKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbWFnZSA9IGF3YWl0IHJlYWRJbWFnZSgpXG4gICAgICBpZiAoIWltYWdlKSB7XG4gICAgICAgIG9uRXJyb3IoJ05vIGltYWdlIG9uIHRoZSBjbGlwYm9hcmQnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBnZXREcmFmdCgpXG4gICAgICBpZiAoY3VycmVudC5yZXZpc2lvbiAhPT0gdGFyZ2V0LnJldmlzaW9uIHx8IGN1cnJlbnQuc2Vzc2lvbiAhPT0gdGFyZ2V0LnNlc3Npb24gfHwgY3VycmVudC52YWx1ZSAhPT0gdGFyZ2V0LnZhbHVlIHx8IGN1cnJlbnQuY3Vyc29yICE9PSB0YXJnZXQuY3Vyc29yKSB7XG4gICAgICAgIGF3YWl0IGltYWdlLmRpc3Bvc2UoKVxuICAgICAgICBvbkVycm9yKCdDbGlwYm9hcmQgaW1hZ2Ugbm90IGF0dGFjaGVkOiB0aGUgZHJhZnQgY2hhbmdlZCcpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgbGFiZWwgPSBhd2FpdCBhdHRhY2hJbWFnZShpbWFnZS5wYXRoKVxuICAgICAgaWYgKCFsYWJlbCkge1xuICAgICAgICBhd2FpdCBpbWFnZS5kaXNwb3NlKClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbWFnZSBhdHRhY2htZW50IGZhaWxlZCcpXG4gICAgICB9XG4gICAgICBjb25zdCBiZWZvcmUgPSB0YXJnZXQudmFsdWUuc2xpY2UoMCwgdGFyZ2V0LmN1cnNvcilcbiAgICAgIGNvbnN0IGFmdGVyID0gdGFyZ2V0LnZhbHVlLnNsaWNlKHRhcmdldC5jdXJzb3IpXG4gICAgICBzZXRJbnB1dChiZWZvcmUgKyBsYWJlbCArIGFmdGVyLCBiZWZvcmUubGVuZ3RoICsgbGFiZWwubGVuZ3RoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGBDbGlwYm9hcmQgcGFzdGUgZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcGVuZGluZyA9IGZhbHNlXG4gICAgfVxuICB9XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURpY3RhdGlvbklucHV0KHsgZGljdGF0aW9uLCBnZXRJbnB1dCwgc2V0SW5wdXQgfSkge1xuICBsZXQgZHJhZnQgPSBudWxsXG4gIGxldCBnZW5lcmF0aW9uID0gMFxuXG4gIGZ1bmN0aW9uIHN0YXJ0KHsgdmFsdWUsIGN1cnNvciB9KSB7XG4gICAgaWYgKGRpY3RhdGlvbi5zdGF0dXMgIT09ICdpZGxlJykgcmV0dXJuXG4gICAgZHJhZnQgPSB7IHZhbHVlLCBjdXJzb3IgfVxuICAgICsrZ2VuZXJhdGlvblxuICAgIHZvaWQgZGljdGF0aW9uLnN0YXJ0KClcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgY29uc3QgdG9rZW4gPSBnZW5lcmF0aW9uXG4gICAgY29uc3QgdGFyZ2V0ID0gZHJhZnRcbiAgICBjb25zdCB0ZXh0ID0gYXdhaXQgZGljdGF0aW9uLnN0b3AoKVxuICAgIGlmICh0b2tlbiAhPT0gZ2VuZXJhdGlvbiB8fCAhdGFyZ2V0IHx8IHRleHQgPT0gbnVsbCB8fCBnZXRJbnB1dCgpICE9PSB0YXJnZXQudmFsdWUpIHJldHVyblxuICAgIGNvbnN0IGJlZm9yZSA9IHRhcmdldC52YWx1ZS5zbGljZSgwLCB0YXJnZXQuY3Vyc29yKVxuICAgIGNvbnN0IGxlYWQgPSB0ZXh0ICYmIGJlZm9yZSAmJiAhL1xccyQvLnRlc3QoYmVmb3JlKSAmJiAhL15cXHMvLnRlc3QodGV4dCkgPyAnICcgOiAnJ1xuICAgIGNvbnN0IGFmdGVyID0gdGFyZ2V0LnZhbHVlLnNsaWNlKHRhcmdldC5jdXJzb3IpXG4gICAgY29uc3QgdHJhaWwgPSB0ZXh0ICYmIGFmdGVyICYmICEvXFxzJC8udGVzdCh0ZXh0KSAmJiAhL15bXFxzLiw7OiE/XS8udGVzdChhZnRlcikgPyAnICcgOiAnJ1xuICAgIHNldElucHV0KGJlZm9yZSArIGxlYWQgKyB0ZXh0ICsgdHJhaWwgKyBhZnRlcilcbiAgICBkcmFmdCA9IG51bGxcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICArK2dlbmVyYXRpb25cbiAgICBkcmFmdCA9IG51bGxcbiAgICB2b2lkIGRpY3RhdGlvbi5jYW5jZWwoKVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlKGV2ZW50KSB7XG4gICAgaWYgKGRpY3RhdGlvbi5zdGF0dXMgPT09ICdpZGxlJykgcmV0dXJuIGZhbHNlXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScgfHwgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnYycpKSBjYW5jZWwoKVxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicgJiYgIWV2ZW50LnNoaWZ0ICYmICFldmVudC5tZXRhICYmIGRpY3RhdGlvbi5zdGF0dXMgPT09ICdyZWNvcmRpbmcnKSB2b2lkIHN0b3AoKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICByZXR1cm4geyBzdGFydCwgc3RvcCwgY2FuY2VsLCBoYW5kbGUgfVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTY3JlZW5DYXB0dXJlSW5wdXQoeyBjYXB0dXJlUmVnaW9uLCBnZXREcmFmdCwgYXR0YWNoSW1hZ2UsIHNldElucHV0LCBvbkVycm9yLCBvblN0YXR1cyA9ICgpID0+IHt9IH0pIHtcbiAgbGV0IHBlbmRpbmcgPSBmYWxzZVxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gY2FwdHVyZUltYWdlKCkge1xuICAgIGlmIChwZW5kaW5nKSByZXR1cm5cbiAgICBwZW5kaW5nID0gdHJ1ZVxuICAgIG9uU3RhdHVzKCdjYXB0dXJpbmcnKVxuICAgIGNvbnN0IHRhcmdldCA9IGdldERyYWZ0KClcbiAgICB0cnkge1xuICAgICAgY29uc3QgaW1hZ2UgPSBhd2FpdCBjYXB0dXJlUmVnaW9uKClcbiAgICAgIGlmICghaW1hZ2UpIHJldHVyblxuICAgICAgY29uc3QgY3VycmVudCA9IGdldERyYWZ0KClcbiAgICAgIGlmIChjdXJyZW50LnJldmlzaW9uICE9PSB0YXJnZXQucmV2aXNpb24gfHwgY3VycmVudC5zZXNzaW9uICE9PSB0YXJnZXQuc2Vzc2lvbiB8fCBjdXJyZW50LnZhbHVlICE9PSB0YXJnZXQudmFsdWUgfHwgY3VycmVudC5jdXJzb3IgIT09IHRhcmdldC5jdXJzb3IpIHtcbiAgICAgICAgYXdhaXQgaW1hZ2UuZGlzcG9zZSgpXG4gICAgICAgIG9uRXJyb3IoJ1NjcmVlbiBjYXB0dXJlIG5vdCBhdHRhY2hlZDogdGhlIGRyYWZ0IGNoYW5nZWQnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGxhYmVsID0gYXdhaXQgYXR0YWNoSW1hZ2UoaW1hZ2UucGF0aClcbiAgICAgIGlmICghbGFiZWwpIHtcbiAgICAgICAgYXdhaXQgaW1hZ2UuZGlzcG9zZSgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW1hZ2UgYXR0YWNobWVudCBmYWlsZWQnKVxuICAgICAgfVxuICAgICAgY29uc3QgYmVmb3JlID0gdGFyZ2V0LnZhbHVlLnNsaWNlKDAsIHRhcmdldC5jdXJzb3IpXG4gICAgICBjb25zdCBhZnRlciA9IHRhcmdldC52YWx1ZS5zbGljZSh0YXJnZXQuY3Vyc29yKVxuICAgICAgc2V0SW5wdXQoYmVmb3JlICsgbGFiZWwgKyBhZnRlciwgYmVmb3JlLmxlbmd0aCArIGxhYmVsLmxlbmd0aClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihgU2NyZWVuIGNhcHR1cmUgZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcGVuZGluZyA9IGZhbHNlXG4gICAgICBvblN0YXR1cygnaWRsZScpXG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgZXhlY0ZpbGUgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgeyBta2R0ZW1wLCB1bmxpbmsgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJ1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnXG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJ1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCdcblxubGV0IGNhcHR1cmVEaXIgPSBudWxsXG5cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZUNhcHR1cmVEaXIoKSB7XG4gIGNhcHR1cmVEaXIgPz89IGF3YWl0IG1rZHRlbXAoam9pbih0bXBkaXIoKSwgJ3BpY28tY2FwdHVyZS0nKSlcbiAgcmV0dXJuIGNhcHR1cmVEaXJcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhcHR1cmVSZWdpb24oKSB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtICE9PSAnZGFyd2luJykgdGhyb3cgbmV3IEVycm9yKCdzY3JlZW4gY2FwdHVyZSBpcyBvbmx5IGF2YWlsYWJsZSBvbiBtYWNPUycpXG4gIGNvbnN0IGZpbGUgPSBqb2luKGF3YWl0IGVuc3VyZUNhcHR1cmVEaXIoKSwgYGNhcHR1cmUtJHtEYXRlLm5vdygpfS5wbmdgKVxuICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZXhlY0ZpbGUoJ3NjcmVlbmNhcHR1cmUnLCBbJy1pJywgJy14JywgZmlsZV0sIChlcnJvcikgPT4ge1xuICAgICAgaWYgKCFlcnJvciB8fCAhZXhpc3RzU3luYyhmaWxlKSkgcmVzb2x2ZSgpXG4gICAgICBlbHNlIHJlamVjdChlcnJvcilcbiAgICB9KVxuICB9KVxuICBpZiAoIWV4aXN0c1N5bmMoZmlsZSkpIHJldHVybiBudWxsXG4gIHJldHVybiB7XG4gICAgcGF0aDogZmlsZSxcbiAgICBkaXNwb3NlOiAoKSA9PiB1bmxpbmsoZmlsZSkuY2F0Y2goKCkgPT4ge30pLFxuICB9XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbXBvc2VyRmlsZXMoKSB7XG4gIGxldCB0ZXh0ID0gJydcbiAgbGV0IHJlZmVyZW5jZXMgPSBbXVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZSh2YWx1ZSwgYXR0YWNobWVudHMpIHtcbiAgICBsZXQgc3RhcnQgPSAwXG4gICAgd2hpbGUgKHN0YXJ0IDwgdGV4dC5sZW5ndGggJiYgc3RhcnQgPCB2YWx1ZS5sZW5ndGggJiYgdGV4dFtzdGFydF0gPT09IHZhbHVlW3N0YXJ0XSkgc3RhcnQrK1xuICAgIGxldCBlbmQgPSB0ZXh0Lmxlbmd0aFxuICAgIGxldCBuZXh0RW5kID0gdmFsdWUubGVuZ3RoXG4gICAgd2hpbGUgKGVuZCA+IHN0YXJ0ICYmIG5leHRFbmQgPiBzdGFydCAmJiB0ZXh0W2VuZCAtIDFdID09PSB2YWx1ZVtuZXh0RW5kIC0gMV0pIHtcbiAgICAgIGVuZC0tXG4gICAgICBuZXh0RW5kLS1cbiAgICB9XG4gICAgY29uc3QgZGVsdGEgPSBuZXh0RW5kIC0gZW5kXG4gICAgcmVmZXJlbmNlcyA9IHJlZmVyZW5jZXMuZmxhdE1hcCgocmVmZXJlbmNlKSA9PiB7XG4gICAgICBpZiAocmVmZXJlbmNlLmVuZCA8PSBzdGFydCkgcmV0dXJuIFtyZWZlcmVuY2VdXG4gICAgICBpZiAocmVmZXJlbmNlLnN0YXJ0ID49IGVuZCkgcmV0dXJuIFt7IC4uLnJlZmVyZW5jZSwgc3RhcnQ6IHJlZmVyZW5jZS5zdGFydCArIGRlbHRhLCBlbmQ6IHJlZmVyZW5jZS5lbmQgKyBkZWx0YSB9XVxuICAgICAgcmV0dXJuIFtdXG4gICAgfSlcbiAgICB0ZXh0ID0gdmFsdWVcbiAgICBjb25zdCBtYXRjaGVzID0gWy4uLnRleHQubWF0Y2hBbGwoL1xcW0ZpbGUgI1xcZCtcXF0vZyldLnJldmVyc2UoKVxuICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgbWF0Y2hlcykge1xuICAgICAgY29uc3QgYXR0YWNobWVudCA9IGF0dGFjaG1lbnRzLmdldChtYXRjaFswXSlcbiAgICAgIGlmIChhdHRhY2htZW50Py5raW5kICE9PSAnZmlsZScpIGNvbnRpbnVlXG4gICAgICBjb25zdCBwYXRoID0gYXR0YWNobWVudC5wYXRoXG4gICAgICBjb25zdCBvZmZzZXQgPSBwYXRoLmxlbmd0aCAtIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgcmVmZXJlbmNlcyA9IHJlZmVyZW5jZXMubWFwKChyZWZlcmVuY2UpID0+IHJlZmVyZW5jZS5zdGFydCA+PSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgICA/IHsgLi4ucmVmZXJlbmNlLCBzdGFydDogcmVmZXJlbmNlLnN0YXJ0ICsgb2Zmc2V0LCBlbmQ6IHJlZmVyZW5jZS5lbmQgKyBvZmZzZXQgfVxuICAgICAgICA6IHJlZmVyZW5jZSlcbiAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIG1hdGNoLmluZGV4KSArIHBhdGggKyB0ZXh0LnNsaWNlKG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKVxuICAgICAgcmVmZXJlbmNlcy5wdXNoKHsgc3RhcnQ6IG1hdGNoLmluZGV4LCBlbmQ6IG1hdGNoLmluZGV4ICsgcGF0aC5sZW5ndGgsIHBsYWNlaG9sZGVyOiBtYXRjaFswXSB9KVxuICAgIH1cbiAgICByZWZlcmVuY2VzLnNvcnQoKGEsIGIpID0+IGEuc3RhcnQgLSBiLnN0YXJ0KVxuICAgIHJldHVybiB0ZXh0XG4gIH1cblxuICBmdW5jdGlvbiBjb250ZW50KCkge1xuICAgIGxldCB2YWx1ZSA9IHRleHRcbiAgICBmb3IgKGNvbnN0IHJlZmVyZW5jZSBvZiBbLi4ucmVmZXJlbmNlc10ucmV2ZXJzZSgpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIHJlZmVyZW5jZS5zdGFydCkgKyByZWZlcmVuY2UucGxhY2Vob2xkZXIgKyB2YWx1ZS5zbGljZShyZWZlcmVuY2UuZW5kKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIHJldHVybiB7IHVwZGF0ZSwgY29udGVudCB9XG59XG4iLCAiY29uc3QgYmFycyA9ICdcdTI1ODFcdTI1ODJcdTI1ODNcdTI1ODRcdTI1ODVcdTI1ODZcdTI1ODdcdTI1ODgnXG5jb25zdCB3aWR0aCA9IDE2XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRMZXZlbChsZXZlbHMsIGxldmVsKSB7XG4gIHJldHVybiBbLi4ubGV2ZWxzLnNsaWNlKDEgLSB3aWR0aCksIE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGxldmVsKSldXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWN0YXRpb25JbmRpY2F0b3Ioc3RhdHVzLCBsZXZlbHMpIHtcbiAgaWYgKHN0YXR1cyA9PT0gJ2lkbGUnKSByZXR1cm4gJydcbiAgaWYgKHN0YXR1cyAhPT0gJ3JlY29yZGluZycpIHJldHVybiBgICR7c3RhdHVzfSBgXG4gIGNvbnN0IHNhbXBsZXMgPSBbLi4uQXJyYXkoTWF0aC5tYXgoMCwgd2lkdGggLSBsZXZlbHMubGVuZ3RoKSkuZmlsbCgwKSwgLi4ubGV2ZWxzLnNsaWNlKC13aWR0aCldXG4gIHJldHVybiBgICR7c2FtcGxlcy5tYXAoKGxldmVsKSA9PiBiYXJzW01hdGgucm91bmQobGV2ZWwgKiAoYmFycy5sZW5ndGggLSAxKSldKS5qb2luKCcnKX0gcmVjb3JkaW5nIGBcbn1cbiIsICJpbXBvcnQgeyBjb2RlVG9BTlNJIH0gZnJvbSAnQHNoaWtpanMvY2xpJ1xuaW1wb3J0IHsgY3JlYXRlU2lnbmFsIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgc2hpa2lUaGVtZSB9IGZyb20gJy4vdGhlbWUuanMnXG5cbmNvbnN0IExBTkdTID0ge1xuICBqczogJ2pzJywgbWpzOiAnanMnLCBjanM6ICdqcycsIGpzeDogJ2pzeCcsIHRzOiAndHMnLCB0c3g6ICd0c3gnLFxuICBqc29uOiAnanNvbicsIGpzb25sOiAnanNvbicsIG1kOiAnbWQnLCBweTogJ3B5dGhvbicsIHJiOiAncnVieScsIGdvOiAnZ28nLFxuICByczogJ3J1c3QnLCBjOiAnYycsIGg6ICdjJywgY3BwOiAnY3BwJywgamF2YTogJ2phdmEnLCBjc3M6ICdjc3MnLFxuICBodG1sOiAnaHRtbCcsIHZ1ZTogJ3Z1ZScsIHNoOiAnYmFzaCcsIGJhc2g6ICdiYXNoJywgenNoOiAnYmFzaCcsXG4gIHltbDogJ3lhbWwnLCB5YW1sOiAneWFtbCcsIHRvbWw6ICd0b21sJywgc3FsOiAnc3FsJywgc3ZlbHRlOiAnc3ZlbHRlJyxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhbmdGb3JQYXRoKHBhdGgpIHtcbiAgY29uc3QgZXh0ID0gU3RyaW5nKHBhdGgpLnNwbGl0KCcuJykucG9wKCkudG9Mb3dlckNhc2UoKVxuICByZXR1cm4gTEFOR1NbZXh0XSB8fCAndHh0J1xufVxuXG5jb25zdCBjYWNoZSA9IG5ldyBNYXAoKVxuY29uc3QgcGVuZGluZyA9IG5ldyBTZXQoKVxuY29uc3QgZmFpbGVkID0gbmV3IFNldCgpXG5jb25zdCBbdmVyc2lvbiwgc2V0VmVyc2lvbl0gPSBjcmVhdGVTaWduYWwoMClcblxuZXhwb3J0IGNvbnN0IGhpZ2hsaWdodFZlcnNpb24gPSB2ZXJzaW9uXG5cbmV4cG9ydCBmdW5jdGlvbiBoaWdobGlnaHQoY29kZSwgbGFuZykge1xuICBjb25zdCBzYWZlTGFuZyA9IGxhbmcgJiYgIWZhaWxlZC5oYXMobGFuZykgPyBsYW5nIDogJ3R4dCdcbiAgY29uc3QgdGhlbWUgPSBzaGlraVRoZW1lKClcbiAgcmV0dXJuIGNvZGVcbiAgICAuc3BsaXQoJ1xcbicpXG4gICAgLm1hcCgobGluZSkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gYCR7dGhlbWV9XFxuJHtzYWZlTGFuZ31cXG4ke2xpbmV9YFxuICAgICAgaWYgKGNhY2hlLmhhcyhrZXkpKSByZXR1cm4gY2FjaGUuZ2V0KGtleSlcbiAgICAgIHdhcm0obGluZSwgc2FmZUxhbmcsIHRoZW1lLCBrZXkpXG4gICAgICByZXR1cm4gbGluZVxuICAgIH0pXG4gICAgLmpvaW4oJ1xcbicpXG59XG5cbmZ1bmN0aW9uIHdhcm0obGluZSwgbGFuZywgdGhlbWUsIGtleSkge1xuICBpZiAocGVuZGluZy5oYXMoa2V5KSkgcmV0dXJuXG4gIHBlbmRpbmcuYWRkKGtleSlcbiAgY29kZVRvQU5TSShsaW5lLCBsYW5nLCB0aGVtZSlcbiAgICAudGhlbigoYW5zaSkgPT4gY2FjaGUuc2V0KGtleSwgYW5zaS5yZXBsYWNlKC9cXG4kLywgJycpKSlcbiAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgZmFpbGVkLmFkZChsYW5nKVxuICAgICAgY2FjaGUuc2V0KGtleSwgbGluZSlcbiAgICB9KVxuICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgIHBlbmRpbmcuZGVsZXRlKGtleSlcbiAgICAgIHNldFZlcnNpb24oKHYpID0+IHYgKyAxKVxuICAgIH0pXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBEaWZmLCBlYXNlLCBIb3Jpem9udGFsU2Nyb2xsQm94LCBsaW5lYXIsIE1hcmtkb3duLCBTY3JvbGxCb3gsIFNwaW5uZXIsIHVzZUFuaW1hdGVkLCB1c2VIaXRUZXN0LCB1c2VJbnB1dCwgdXNlTW91c2UgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBhY2NlbnQsIEZHLCBGR19TT0ZULCBNVVRFRCwgUEFORUxfQkcsIFNFTEVDVF9CRywgUkVELCBHUkVFTiwgUEVFUiB9IGZyb20gJy4vdGhlbWUuanMnXG5pbXBvcnQgeyBoaWdobGlnaHQsIGxhbmdGb3JQYXRoIH0gZnJvbSAnLi9oaWdobGlnaHQuanMnXG5pbXBvcnQgeyBjb21wYWN0VHJhbnNjcmlwdFJ1bnMgfSBmcm9tICcuL3RyYW5zY3JpcHQtd2luZG93LmpzJ1xuXG5leHBvcnQgeyBkZWZhdWx0VGl0bGUgYXMgdWlUaXRsZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvdG9vbHMvcmVjb3JkZXIuanMnXG5cbmZ1bmN0aW9uIFByb3NlU25pcHBldCh7IHZhbHVlLCBsYW5ndWFnZSwgaGlnaGxpZ2h0OiBoaWdobGlnaHRDb2RlLCBjb2RlQmcgfSkge1xuICBjb25zdCBzaG93biA9IGhpZ2hsaWdodENvZGUgPyBoaWdobGlnaHRDb2RlKHZhbHVlLCBsYW5ndWFnZSkgOiB2YWx1ZVxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgYmc6IGNvZGVCZywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICA8dGV4dD57c2hvd259PC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIENvZGVTbmlwcGV0KHsgdmFsdWUsIGxhbmd1YWdlLCBoaWdobGlnaHQ6IGhpZ2hsaWdodENvZGUsIGNvZGVCZyB9KSB7XG4gIGNvbnN0IHNob3duID0gaGlnaGxpZ2h0Q29kZSA/IGhpZ2hsaWdodENvZGUodmFsdWUsIGxhbmd1YWdlKSA6IHZhbHVlXG4gIGNvbnN0IGNvbnRlbnRXaWR0aCA9IE1hdGgubWF4KDAsIC4uLnZhbHVlLnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUpID0+IFsuLi5saW5lXS5sZW5ndGgpKSArIDJcbiAgcmV0dXJuIChcbiAgICA8SG9yaXpvbnRhbFNjcm9sbEJveCBjb250ZW50V2lkdGg9e2NvbnRlbnRXaWR0aH0gc3R5bGU9e3sgYmc6IGNvZGVCZywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICB7c2hvd24uc3BsaXQoJ1xcbicpLm1hcCgobGluZSwga2V5KSA9PiAoXG4gICAgICAgICAgPHRleHQga2V5PXtrZXl9IHN0eWxlPXt7IG92ZXJmbG93OiAnbm93cmFwJyB9fT57bGluZSB8fCAnICd9PC90ZXh0PlxuICAgICAgICApKX1cbiAgICAgIDwvYm94PlxuICAgIDwvSG9yaXpvbnRhbFNjcm9sbEJveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBUcmFuc2NyaXB0Q29kZUJsb2NrKHByb3BzKSB7XG4gIGNvbnN0IGxhbmd1YWdlID0gcHJvcHMubGFuZ3VhZ2U/LnRvTG93ZXJDYXNlKClcbiAgY29uc3QgQ29tcG9uZW50ID0gWydtZCcsICdtYXJrZG93bicsICd0ZXh0JywgJ3R4dCcsICdwbGFpbnRleHQnXS5pbmNsdWRlcyhsYW5ndWFnZSkgPyBQcm9zZVNuaXBwZXQgOiBDb2RlU25pcHBldFxuICByZXR1cm4gPENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIGRpZmZQcmV2aWV3KGRpZmYsIHJldmVydCkge1xuICBpZiAoIWRpZmY/Lmh1bmtzPy5sZW5ndGgpIHJldHVybiB7IGJlZm9yZTogU3RyaW5nKHJldmVydD8uYmVmb3JlIHx8ICcnKSwgYWZ0ZXI6IFN0cmluZyhyZXZlcnQ/LmFmdGVyIHx8ICcnKSB9XG4gIGNvbnN0IGJlZm9yZSA9IFtdXG4gIGNvbnN0IGFmdGVyID0gW11cbiAgZGlmZi5odW5rcy5mb3JFYWNoKChodW5rLCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCkge1xuICAgICAgYmVmb3JlLnB1c2goJ1x1MjJFRicpXG4gICAgICBhZnRlci5wdXNoKCdcdTIyRUYnKVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgaHVuay5saW5lcykge1xuICAgICAgaWYgKGxpbmUudHlwZSAhPT0gJ2FkZCcpIGJlZm9yZS5wdXNoKGxpbmUudGV4dClcbiAgICAgIGlmIChsaW5lLnR5cGUgIT09ICdyZW1vdmUnKSBhZnRlci5wdXNoKGxpbmUudGV4dClcbiAgICB9XG4gIH0pXG4gIHJldHVybiB7IGJlZm9yZTogYmVmb3JlLmpvaW4oJ1xcbicpLCBhZnRlcjogYWZ0ZXIuam9pbignXFxuJykgfVxufVxuXG5mdW5jdGlvbiBkaWZmUHJldmlld0xpbmVzKGRpZmYsIHJldmVydCkge1xuICBpZiAoZGlmZj8uaHVua3M/Lmxlbmd0aCkgcmV0dXJuIGRpZmYuaHVua3MucmVkdWNlKChzdW0sIGgpID0+IHN1bSArIGgubGluZXMubGVuZ3RoLCAwKVxuICBjb25zdCBwcmV2aWV3ID0gZGlmZlByZXZpZXcoZGlmZiwgcmV2ZXJ0KVxuICByZXR1cm4gTWF0aC5tYXgocHJldmlldy5hZnRlci5zcGxpdCgnXFxuJykubGVuZ3RoLCBwcmV2aWV3LmJlZm9yZS5zcGxpdCgnXFxuJykubGVuZ3RoLCAyKVxufVxuXG5mdW5jdGlvbiBmbXREdXJhdGlvbihtcykge1xuICBpZiAobXMgPCA2MDAwMCkgcmV0dXJuIGAkeyhtcyAvIDEwMDApLnRvRml4ZWQoMil9c2BcbiAgY29uc3Qgc2VjcyA9IE1hdGgucm91bmQobXMgLyAxMDAwKVxuICByZXR1cm4gYCR7TWF0aC5mbG9vcihzZWNzIC8gNjApfW0gJHtzZWNzICUgNjB9c2Bcbn1cblxuZnVuY3Rpb24gZm10UnVubmluZyhtcykge1xuICBjb25zdCBzZWNzID0gTWF0aC5mbG9vcihtcyAvIDEwMDApXG4gIHJldHVybiBzZWNzIDwgNjAgPyBgJHtzZWNzfXNgIDogYCR7TWF0aC5mbG9vcihzZWNzIC8gNjApfW0gJHtzZWNzICUgNjB9c2Bcbn1cblxuZnVuY3Rpb24gbWl4Q29sb3IoZnJvbSwgdG8sIGFtb3VudCkge1xuICBjb25zdCByZ2IgPSAoY29sb3IpID0+IGNvbG9yPy5zdGFydHNXaXRoKCcjJykgJiYgY29sb3IubGVuZ3RoID09PSA3XG4gICAgPyBbMSwgMywgNV0ubWFwKChpKSA9PiBwYXJzZUludChjb2xvci5zbGljZShpLCBpICsgMiksIDE2KSlcbiAgICA6IFsxMjcsIDEyNywgMTI3XVxuICBjb25zdCBhID0gcmdiKGZyb20pXG4gIGNvbnN0IGIgPSByZ2IodG8pXG4gIHJldHVybiBgIyR7YS5tYXAoKHZhbHVlLCBpKSA9PiBNYXRoLnJvdW5kKHZhbHVlICsgKGJbaV0gLSB2YWx1ZSkgKiBhbW91bnQpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKX1gXG59XG5cbmNvbnN0IFRPT0xfREVTQ1JJUFRJT05fTElNSVQgPSA1XG5jb25zdCBCQVNIX09VVFBVVF9MSU5FUyA9IDEwXG5jb25zdCBUT09MX05BTUVfRkxBU0hfTVMgPSA5MDBcbmNvbnN0IERFU0NSSVBUSU9OX1JFVkVBTF9ERUxBWV9NUyA9IDUwMFxuY29uc3QgREVTQ1JJUFRJT05fUkVWRUFMX01TID0gNzAwXG5cbmZ1bmN0aW9uIGRlbGF5ZWRMaW5lYXIodCkge1xuICBjb25zdCBkZWxheSA9IERFU0NSSVBUSU9OX1JFVkVBTF9ERUxBWV9NUyAvIChERVNDUklQVElPTl9SRVZFQUxfREVMQVlfTVMgKyBERVNDUklQVElPTl9SRVZFQUxfTVMpXG4gIHJldHVybiB0IDw9IGRlbGF5ID8gMCA6ICh0IC0gZGVsYXkpIC8gKDEgLSBkZWxheSlcbn1cblxuZnVuY3Rpb24gRGVzY3JpcHRpb25SZXZlYWwoeyBjaGlsZHJlbiwgcnVubmluZyB9KSB7XG4gIGNvbnN0IHJldmVhbCA9IHVzZUFuaW1hdGVkKHJ1bm5pbmcgPyAwIDogMSwgZWFzZShERVNDUklQVElPTl9SRVZFQUxfREVMQVlfTVMgKyBERVNDUklQVElPTl9SRVZFQUxfTVMsIGRlbGF5ZWRMaW5lYXIpKVxuICBpZiAoIXJ1bm5pbmcpIHJldmVhbC5zZXQoMSlcbiAgcmV0dXJuIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBtaXhDb2xvcihhY2NlbnQoKSwgRkcsIHJldmVhbCgpKSwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGZsZXhHcm93OiAxLCBtaW5XaWR0aDogMCB9fT57Y2hpbGRyZW59PC90ZXh0PlxufVxuXG5mdW5jdGlvbiBvdXRwdXRMaW5lcyh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gW11cbiAgY29uc3QgbGluZXMgPSB2YWx1ZS5zcGxpdCgnXFxuJylcbiAgaWYgKGxpbmVzLmF0KC0xKSA9PT0gJycpIGxpbmVzLnBvcCgpXG4gIHJldHVybiBsaW5lc1xufVxuXG5mdW5jdGlvbiBCYXNoT3V0cHV0KHsgdmFsdWUsIGxpbmVTdGFydCwgbGluZUNvdW50IH0pIHtcbiAgY29uc3QgbGluZXMgPSBvdXRwdXRMaW5lcyh2YWx1ZSlcbiAgaWYgKCFsaW5lcy5sZW5ndGgpIHJldHVybiBudWxsXG4gIGNvbnN0IHNob3duID0gbGluZXMuc2xpY2UoLUJBU0hfT1VUUFVUX0xJTkVTKVxuICBjb25zdCBmaXJzdCA9IGxpbmVTdGFydCB8fCAobGluZUNvdW50ID8gbGluZUNvdW50IC0gc2hvd24ubGVuZ3RoICsgMSA6IGxpbmVzLmxlbmd0aCAtIHNob3duLmxlbmd0aCArIDEpXG4gIGNvbnN0IGxhc3QgPSBsaW5lQ291bnQgfHwgZmlyc3QgKyBzaG93bi5sZW5ndGggLSAxXG4gIGNvbnN0IGd1dHRlcldpZHRoID0gU3RyaW5nKGxhc3QpLmxlbmd0aFxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIHtzaG93bi5tYXAoKGxpbmUsIGkpID0+IChcbiAgICAgICAgPGJveCBrZXk9e2ZpcnN0ICsgaX0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtTdHJpbmcoZmlyc3QgKyBpKS5wYWRTdGFydChndXR0ZXJXaWR0aCl9IGB9PC90ZXh0PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57bGluZSB8fCAnICd9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICkpfVxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIENvbXBhY3RUb29sU2lnbih7IHRvb2wgfSkge1xuICBpZiAodG9vbC5uYW1lICE9PSAnYmFzaCcpIHJldHVybiA8dGV4dD57JyAgJ308L3RleHQ+XG4gIGlmICh0b29sLmJhY2tncm91bmQpIHJldHVybiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+eydcdTIxQUEgJ308L3RleHQ+XG4gIGlmICh0b29sLnN0YXR1cyA9PT0gJ3J1bm5pbmcnKSByZXR1cm4gPGJveCBzdHlsZT17eyB3aWR0aDogMiB9fT48U3Bpbm5lciBjb2xvcj17YWNjZW50KCl9IC8+PC9ib3g+XG4gIGlmICh0b29sLmV4aXRDb2RlID09PSAwKSByZXR1cm4gPHRleHQgc3R5bGU9e3sgY29sb3I6IEdSRUVOIH19PnsnXHUyNzEzICd9PC90ZXh0PlxuICBpZiAodG9vbC5leGl0Q29kZSAhPSBudWxsKSByZXR1cm4gPHRleHQgc3R5bGU9e3sgY29sb3I6IFJFRCB9fT57J1x1MDBENyAnfTwvdGV4dD5cbiAgcmV0dXJuIDx0ZXh0PnsnICAnfTwvdGV4dD5cbn1cblxuZnVuY3Rpb24gVG9vbEdyb3VwKHsgaXRlbSwgdmVyYm9zZSB9KSB7XG4gIGNvbnN0IGxhdGVzdENhbGxJZCA9IGl0ZW0udG9vbHMuYXQoLTEpPy5jYWxsSWRcbiAgY29uc3QgZ2xvdyA9IHVzZUFuaW1hdGVkKDAsIGVhc2UoVE9PTF9OQU1FX0ZMQVNIX01TLCBsaW5lYXIpKVxuICBpZiAobGF0ZXN0Q2FsbElkICE9PSBnbG93Ll9jYWxsSWQpIHtcbiAgICBnbG93Ll9jYWxsSWQgPSBsYXRlc3RDYWxsSWRcbiAgICBpZiAoaXRlbS5hY3RpdmUpIHtcbiAgICAgIGdsb3cuc25hcCgxKVxuICAgICAgZ2xvdy5zZXQoMClcbiAgICB9XG4gIH1cblxuICBpZiAodmVyYm9zZSkge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICB7KGl0ZW0uaXRlbXMgfHwgaXRlbS50b29scykubWFwKChlbnRyeSwgaSkgPT4gZW50cnkua2luZCA9PT0gJ3Rob3VnaHRzJ1xuICAgICAgICAgID8gPE1lc3NhZ2Uga2V5PXtpfSBpdGVtPXtlbnRyeX0gdmVyYm9zZSAvPlxuICAgICAgICAgIDogPFRvb2xDYXJkIGtleT17aX0gey4uLmVudHJ5fSB2ZXJib3NlIC8+KX1cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGNvdW50cyA9IG5ldyBNYXAoKVxuICBmb3IgKGNvbnN0IHRvb2wgb2YgaXRlbS50b29scykgY291bnRzLnNldCh0b29sLm5hbWUsIChjb3VudHMuZ2V0KHRvb2wubmFtZSkgfHwgMCkgKyAxKVxuICBjb25zdCBlbnRyaWVzID0gWy4uLmNvdW50c11cbiAgY29uc3QgdG90YWxNcyA9IGl0ZW0udG9vbHMucmVkdWNlKChzdW0sIHRvb2wpID0+IHN1bSArICh0b29sLmR1cmF0aW9uTXMgfHwgMCksIDApXG4gIGNvbnN0IGxhdGVzdE5hbWUgPSBpdGVtLnRvb2xzLmF0KC0xKT8ubmFtZVxuICBjb25zdCBhY3Rpdml0eSA9IChpdGVtLml0ZW1zIHx8IGl0ZW0udG9vbHMpLm1hcCgoZW50cnkpID0+IGVudHJ5LmtpbmQgPT09ICd0aG91Z2h0cydcbiAgICA/IHsgLi4uZW50cnksIG5hbWU6ICd0aG91Z2h0cycsIGRlc2NyaXB0aW9uOiBlbnRyeS50ZXh0LnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCksIHRob3VnaHQ6IHRydWUgfVxuICAgIDogZW50cnkpLmZpbHRlcigoZW50cnkpID0+IGVudHJ5LmRlc2NyaXB0aW9uKVxuICBjb25zdCBkZXNjcmlwdGlvbnMgPSBhY3Rpdml0eS5zbGljZSgtVE9PTF9ERVNDUklQVElPTl9MSU1JVClcbiAgY29uc3QgaGlkZGVuRGVzY3JpcHRpb25zID0gYWN0aXZpdHkubGVuZ3RoIC0gZGVzY3JpcHRpb25zLmxlbmd0aFxuICBjb25zdCB0b29sTmFtZVdpZHRoID0gTWF0aC5tYXgoMCwgLi4uZGVzY3JpcHRpb25zLm1hcCgoZW50cnkpID0+IGVudHJ5Lm5hbWUubGVuZ3RoKSlcbiAgY29uc3QgdmlzaWJsZUJhc2ggPSBpdGVtLmFjdGl2ZSAmJiBpdGVtLnRvb2xzLmF0KC0xKT8ubmFtZSA9PT0gJ2Jhc2gnID8gaXRlbS50b29scy5hdCgtMSkgOiBudWxsXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgYWxpZ25JdGVtczogJ2ZsZXgtc3RhcnQnIH19PlxuICAgICAgICB7aXRlbS5hY3RpdmUgPyA8U3Bpbm5lciBjb2xvcj17YWNjZW50KCl9IC8+IDogPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Plx1MjcxMzwvdGV4dD59XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGZsZXhXcmFwOiAnd3JhcCcsIGZsZXhHcm93OiAxLCBtYXJnaW5SaWdodDogMiB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogaXRlbS5hY3RpdmUgPyBGRyA6IE1VVEVEIH19PiBDYWxsZWQgPC90ZXh0PlxuICAgICAgICAgIHtlbnRyaWVzLm1hcCgoW25hbWUsIGNvdW50XSwgaSkgPT4gKFxuICAgICAgICAgICAgPHRleHQga2V5PXtuYW1lfSBzdHlsZT17eyBjb2xvcjogaXRlbS5hY3RpdmUgJiYgbmFtZSA9PT0gbGF0ZXN0TmFtZSA/IG1peENvbG9yKEZHLCBhY2NlbnQoKSwgZ2xvdygpKSA6IGl0ZW0uYWN0aXZlID8gRkcgOiBNVVRFRCB9fT5cbiAgICAgICAgICAgICAge2Ake2kgPyAnLCAnIDogJyd9JHtuYW1lfSR7Y291bnQgPT09IDEgPyAnJyA6IGAgJHtjb3VudH0gdGltZXNgfWB9XG4gICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvYm94PlxuICAgICAgICB7dG90YWxNcyA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBmbGV4U2hyaW5rOiAwIH19PntmbXREdXJhdGlvbih0b3RhbE1zKX08L3RleHQ+fVxuICAgICAgPC9ib3g+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nTGVmdDogMiB9fT5cbiAgICAgICAge2hpZGRlbkRlc2NyaXB0aW9ucyA+IDAgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICA8dGV4dD57JyAnLnJlcGVhdCh0b29sTmFtZVdpZHRoICsgNCl9PC90ZXh0PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgLi4uJHtoaWRkZW5EZXNjcmlwdGlvbnN9IG1vcmVgfTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgICAge2Rlc2NyaXB0aW9ucy5tYXAoKHRvb2wsIGkpID0+IChcbiAgICAgICAgICA8Ym94IGtleT17dG9vbC5jYWxsSWQgfHwgYHRob3VnaHQtJHtpfWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAge3Rvb2wudGhvdWdodCA/IDx0ZXh0PnsnICAnfTwvdGV4dD4gOiA8Q29tcGFjdFRvb2xTaWduIHRvb2w9e3Rvb2x9IC8+fVxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRvb2wudGhvdWdodCB9fT57YCR7dG9vbC5uYW1lLnBhZFN0YXJ0KHRvb2xOYW1lV2lkdGgpfSAgYH08L3RleHQ+XG4gICAgICAgICAgICB7dG9vbC50aG91Z2h0XG4gICAgICAgICAgICAgID8gPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PjxNYXJrZG93biB0ZXh0PXt0b29sLmRlc2NyaXB0aW9ufSBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0gLz48L2JveD5cbiAgICAgICAgICAgICAgOiA8RGVzY3JpcHRpb25SZXZlYWwgcnVubmluZz17dG9vbC5zdGF0dXMgPT09ICdydW5uaW5nJ30+e3Rvb2wuZGVzY3JpcHRpb259PC9EZXNjcmlwdGlvblJldmVhbD59XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICkpfVxuICAgICAgICB7dmlzaWJsZUJhc2g/LnRpdGxlICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRywgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2hpZ2hsaWdodCh2aXNpYmxlQmFzaC50aXRsZSwgJ2Jhc2gnKX08L3RleHQ+fVxuICAgICAgICB7dmlzaWJsZUJhc2g/LmZ1bGxPdXRwdXQgJiYgPEJhc2hPdXRwdXQgdmFsdWU9e3Zpc2libGVCYXNoLmZ1bGxPdXRwdXR9IGxpbmVTdGFydD17dmlzaWJsZUJhc2gub3V0cHV0TGluZVN0YXJ0fSBsaW5lQ291bnQ9e3Zpc2libGVCYXNoLm91dHB1dExpbmVDb3VudH0gLz59XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBUb29sQ2FyZCh7IG5hbWUsIHRpdGxlLCB0aXRsZUxhbmcsIGRlc2NyaXB0aW9uLCBzdGF0dXMsIGRpZmYsIHJldmVydCwgZnVsbE91dHB1dCwgb3V0cHV0TGluZVN0YXJ0LCBvdXRwdXRMaW5lQ291bnQsIGVycm9yLCBiYWNrZ3JvdW5kLCB2ZXJib3NlLCBzdGFydGVkQXQsIGR1cmF0aW9uTXMgfSkge1xuICBjb25zdCBzaG93blRpdGxlID0gbmFtZSA9PT0gJ2Jhc2gnID8gbnVsbCA6IHRpdGxlTGFuZyAmJiB0aXRsZSA/IGhpZ2hsaWdodCh0aXRsZSwgdGl0bGVMYW5nKSA6IHRpdGxlXG4gIGNvbnN0IGlubGluZURlc2NyaXB0aW9uID0gIXNob3duVGl0bGVcbiAgY29uc3QgcHJldmlldyA9IGRpZmZQcmV2aWV3KGRpZmYsIHJldmVydClcbiAgY29uc3QgcnVubmluZyA9IHN0YXR1cyA9PT0gJ3J1bm5pbmcnXG4gIGNvbnN0IGludGVycnVwdGVkID0gc3RhdHVzID09PSAnaW50ZXJydXB0ZWQnXG4gIGNvbnN0IHJldmVydGVkID0gc3RhdHVzID09PSAncmV2ZXJ0ZWQnXG4gIGNvbnN0IGZhaWxlZCA9IHN0YXR1cyA9PT0gJ2Vycm9yJ1xuICBjb25zdCBvdXRMaW5lcyA9IGZ1bGxPdXRwdXQgPyBmdWxsT3V0cHV0LnNwbGl0KCdcXG4nKSA6IG51bGxcblxuICBjb25zdCBlbGFwc2VkID0gcnVubmluZyAmJiBzdGFydGVkQXQgPyBEYXRlLm5vdygpIC0gc3RhcnRlZEF0IDogMFxuICBjb25zdCB0b29rID0gIXJ1bm5pbmcgJiYgIWJhY2tncm91bmQgJiYgZHVyYXRpb25NcyAhPSBudWxsID8gZm10RHVyYXRpb24oZHVyYXRpb25NcykgOiBudWxsXG5cbiAgY29uc3QgaW5mbyA9IHJ1bm5pbmcgPyAoZWxhcHNlZCA+PSA1MDAwID8gYHJ1bm5pbmcgKCR7Zm10UnVubmluZyhlbGFwc2VkKX0pYCA6ICdydW5uaW5nJylcbiAgICA6IGludGVycnVwdGVkID8gJ2ludGVycnVwdGVkJ1xuICAgIDogcmV2ZXJ0ZWQgPyAncmV2ZXJ0ZWQnXG4gICAgOiBmYWlsZWQgPyBgZmFpbGVkJHt0b29rID8gYCAgJHt0b29rfWAgOiAnJ31gXG4gICAgOiBiYWNrZ3JvdW5kID8gJ2JhY2tncm91bmQgIHNoZWxsIGxpc3RlZCBiZWxvdydcbiAgICA6IGRpZmYgPyBgKyR7ZGlmZi5hZGRpdGlvbnN9IC0ke2RpZmYuZGVsZXRpb25zfSR7dG9vayA/IGAgICR7dG9va31gIDogJyd9YFxuICAgIDogb3V0TGluZXMgPyBgJHtvdXRwdXRMaW5lQ291bnQgfHwgb3V0TGluZXMubGVuZ3RofSAkeyhvdXRwdXRMaW5lQ291bnQgfHwgb3V0TGluZXMubGVuZ3RoKSA9PT0gMSA/ICdsaW5lJyA6ICdsaW5lcyd9JHt0b29rID8gYCAgJHt0b29rfWAgOiAnJ31gXG4gICAgOiBgZG9uZSR7dG9vayA/IGAgICR7dG9va31gIDogJyd9YFxuXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAxLCBvdmVyZmxvdzogJ2NsaXAnIH19PlxuICAgICAgICB7cnVubmluZ1xuICAgICAgICAgID8gPFNwaW5uZXIgY29sb3I9e2FjY2VudCgpfSAvPlxuICAgICAgICAgIDogPHRleHQgc3R5bGU9e3sgY29sb3I6IGludGVycnVwdGVkIHx8IGZhaWxlZCA/IFJFRCA6IHJldmVydGVkID8gTVVURUQgOiBhY2NlbnQoKSB9fT57aW50ZXJydXB0ZWQgPyAnXHUyNzE3JyA6IGZhaWxlZCA/ICdcdTI3MTcnIDogcmV2ZXJ0ZWQgPyAnXHUyMUE5JyA6ICdcdTI3MTMnfTwvdGV4dD59XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgZmxleFNocmluazogMCB9fT57YCR7bmFtZS5wYWRFbmQoNSl9IGB9PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBtaW5XaWR0aDogMCwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogRkcgfX0+e3Nob3duVGl0bGUgfHwgZGVzY3JpcHRpb24gfHwgbmFtZX08L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGZsZXhTaHJpbms6IDAsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntgICAke2luZm99YH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIHtkZXNjcmlwdGlvbiAmJiAhaW5saW5lRGVzY3JpcHRpb24gJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IHBhZGRpbmdMZWZ0OiA4IH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2Rlc2NyaXB0aW9ufTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgICAge25hbWUgPT09ICdiYXNoJyAmJiB0aXRsZSAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgcGFkZGluZ0xlZnQ6IDggfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHLCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57aGlnaGxpZ2h0KHRpdGxlLCB0aXRsZUxhbmcgfHwgJ2Jhc2gnKX08L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICAgIHtmYWlsZWQgJiYgZXJyb3IgJiYgKFxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntgICAke2Vycm9yfWB9PC90ZXh0PlxuICAgICAgKX1cbiAgICAgIHtyZXZlcnQgJiYgIXJ1bm5pbmcgJiYgIXJldmVydGVkICYmICEoZGlmZiAmJiBkaWZmLmFkZGl0aW9ucyA9PT0gMCAmJiBkaWZmLmRlbGV0aW9ucyA9PT0gMCkgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6IGRpZmZQcmV2aWV3TGluZXMoZGlmZiwgcmV2ZXJ0KSwgbWFyZ2luVG9wOiAxLCBwYWRkaW5nTGVmdDogOCB9fT5cbiAgICAgICAgICA8RGlmZlxuICAgICAgICAgICAgYmVmb3JlPXtwcmV2aWV3LmJlZm9yZX1cbiAgICAgICAgICAgIGFmdGVyPXtwcmV2aWV3LmFmdGVyfVxuICAgICAgICAgICAgbGFuZ3VhZ2U9e2xhbmdGb3JQYXRoKHJldmVydC5wYXRoKX1cbiAgICAgICAgICAgIGhpZ2hsaWdodD17aGlnaGxpZ2h0fVxuICAgICAgICAgICAgY29udGV4dD17M31cbiAgICAgICAgICAgIGZvbGRzPXtmYWxzZX1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgc2Nyb2xsYmFyPXtmYWxzZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgICB7bmFtZSA9PT0gJ2Jhc2gnICYmIGZ1bGxPdXRwdXQgJiYgPGJveCBzdHlsZT17eyBwYWRkaW5nTGVmdDogOCB9fT48QmFzaE91dHB1dCB2YWx1ZT17ZnVsbE91dHB1dH0gbGluZVN0YXJ0PXtvdXRwdXRMaW5lU3RhcnR9IGxpbmVDb3VudD17b3V0cHV0TGluZUNvdW50fSAvPjwvYm94Pn1cbiAgICAgIHtvdXRMaW5lcyAmJiB2ZXJib3NlICYmIG5hbWUgIT09ICdiYXNoJyAmJiAhcnVubmluZyAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICB7b3V0TGluZXMuc2xpY2UoMCwgMjAwKS5tYXAoKGxpbmUsIGkpID0+IChcbiAgICAgICAgICAgIDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntsaW5lIHx8ICcgJ308L3RleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgICAge291dExpbmVzLmxlbmd0aCA+IDIwMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2BcdTIwMjYgJHtvdXRMaW5lcy5sZW5ndGggLSAyMDB9IG1vcmUgbGluZXNgfTwvdGV4dD59XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBEZWxpYmVyYXRpb25UdXJuKHsgaXRlbSwgdmVyYm9zZSwgY29tcGFjdFRvb2xIaXN0b3J5ID0gZmFsc2UsIHBhaXJlZCA9IGZhbHNlLCBib3JkZXIgPSB0cnVlLCBwYW5lSGVpZ2h0LCBmb2N1c2VkID0gZmFsc2UsIG9uRm9jdXMgfSkge1xuICBjb25zdCBwYXJ0aWNpcGFudEEgPSBpdGVtLnJvbGUgPT09ICdwYXJ0aWNpcGFudC1hJyB8fCBpdGVtLnJvbGUgPT09ICdwcm9wb3NlcidcbiAgY29uc3Qgc3ludGhlc2lzID0gaXRlbS5yb2xlID09PSAnc3ludGhlc2lzJ1xuICBjb25zdCBsYWJlbCA9IHN5bnRoZXNpcyA/ICdTeW50aGVzaXMnIDogYCR7cGFydGljaXBhbnRBID8gJ1BhcnRpY2lwYW50IEEnIDogJ1BhcnRpY2lwYW50IEInfSAgcm91bmQgJHtpdGVtLnJvdW5kfWBcbiAgY29uc3QgdGV4dCA9IGl0ZW0uaW50ZXJydXB0ZWQgPyBgJHtpdGVtLnRleHR9ICooaW50ZXJydXB0ZWQpKmAgOiBpdGVtLnRleHRcbiAgY29uc3QgW29mZnNldCwgc2V0T2Zmc2V0XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbZm9sbG93LCBzZXRGb2xsb3ddID0gY3JlYXRlU2lnbmFsKHRydWUpXG4gIGNvbnN0IGhpdFRlc3QgPSB1c2VIaXRUZXN0KClcbiAgdXNlTW91c2UoKGV2ZW50KSA9PiB7XG4gICAgaWYgKHBhbmVIZWlnaHQgJiYgaGl0VGVzdChldmVudC54LCBldmVudC55KSAmJiAoZXZlbnQuYWN0aW9uID09PSAnc2Nyb2xsJyB8fCBldmVudC5hY3Rpb24gPT09ICdwcmVzcycpKSBvbkZvY3VzPy4oKVxuICB9KVxuICBjb25zdCB0b29scyA9IGNvbXBhY3RUb29sSGlzdG9yeSA/IGNvbXBhY3RUcmFuc2NyaXB0UnVucyhpdGVtLnRvb2xzIHx8IFtdLCAhIWl0ZW0uYWN0aXZlICYmICFpdGVtLnRleHQpIDogaXRlbS50b29scyB8fCBbXVxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtaW5XaWR0aDogMCwgcGFkZGluZ1g6IHBhaXJlZCA/IDAgOiAyLCBoZWlnaHQ6IHBhbmVIZWlnaHQsIGJnOiBwYWlyZWQgPyBQQU5FTF9CRyA6IHVuZGVmaW5lZCB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGZsZXhHcm93OiBwYW5lSGVpZ2h0ID8gMSA6IHVuZGVmaW5lZCB9fT5cbiAgICAgICAge2JvcmRlciAmJiA8Ym94IHN0eWxlPXt7IHdpZHRoOiAxLCBmbGV4U2hyaW5rOiAwLCBiZzogc3ludGhlc2lzIHx8IHBhcnRpY2lwYW50QSA/IGFjY2VudCgpIDogTVVURUQgfX0gLz59XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtaW5XaWR0aDogMCwgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxLCBiZzogc3ludGhlc2lzID8gU0VMRUNUX0JHIDogcGFydGljaXBhbnRBIHx8IHBhaXJlZCA/IFBBTkVMX0JHIDogdW5kZWZpbmVkIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkIHx8IHN5bnRoZXNpcyB8fCBwYXJ0aWNpcGFudEEgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiB0cnVlIH19PntsYWJlbH08L3RleHQ+XG4gICAgICAgICAge3BhbmVIZWlnaHQgPyAoXG4gICAgICAgICAgICA8U2Nyb2xsQm94XG4gICAgICAgICAgICAgIHN0eWxlPXt7IGZsZXhHcm93OiAxIH19XG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICAgIHNjcm9sbE9mZnNldD17Zm9sbG93KCkgPyAxZTkgOiBvZmZzZXQoKX1cbiAgICAgICAgICAgICAgb25TY3JvbGw9eyhuZXh0LCBtZXRhKSA9PiB7IHNldE9mZnNldChuZXh0KTsgc2V0Rm9sbG93KCEhbWV0YT8uYXRCb3R0b20pIH19XG4gICAgICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8RGVsaWJlcmF0aW9uQ29udGVudCB0b29scz17dG9vbHN9IHRleHQ9e3RleHR9IHZlcmJvc2U9e3ZlcmJvc2V9IC8+XG4gICAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgICApIDogPERlbGliZXJhdGlvbkNvbnRlbnQgdG9vbHM9e3Rvb2xzfSB0ZXh0PXt0ZXh0fSB2ZXJib3NlPXt2ZXJib3NlfSAvPn1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBEZWxpYmVyYXRpb25Db250ZW50KHsgdG9vbHMsIHRleHQsIHZlcmJvc2UgfSkge1xuICByZXR1cm4gPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICB7dG9vbHMubWFwKCh0b29sKSA9PiA8TWVzc2FnZSBrZXk9e3Rvb2wuY2FsbElkfSBpdGVtPXt0b29sfSB2ZXJib3NlPXt2ZXJib3NlfSAvPil9XG4gICAgICAgICAge3RleHQgJiYgdG9vbHMubGVuZ3RoID4gMCAmJiA8dGV4dD4gPC90ZXh0Pn1cbiAgICAgICAgICB7dGV4dCAmJiAoXG4gICAgICAgICAgICA8TWFya2Rvd25cbiAgICAgICAgICAgICAgdGV4dD17dGV4dH1cbiAgICAgICAgICAgICAgaGlnaGxpZ2h0PXtoaWdobGlnaHR9XG4gICAgICAgICAgICAgIGNvZGVCZz17bnVsbH1cbiAgICAgICAgICAgICAgY29kZUJsb2NrPXtUcmFuc2NyaXB0Q29kZUJsb2NrfVxuICAgICAgICAgICAgICB0YWJsZUJvcmRlckNvbG9yPXtNVVRFRH1cbiAgICAgICAgICAgICAgdGFibGVSb3dIb3ZlckJnPXtQQU5FTF9CR31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgPC9ib3g+XG59XG5cbmZ1bmN0aW9uIGRlbGliZXJhdGlvblJvd3ModHVybnMpIHtcbiAgY29uc3Qgcm93cyA9IFtdXG4gIGZvciAoY29uc3QgdHVybiBvZiB0dXJucykge1xuICAgIGlmICh0dXJuLnJvbGUgPT09ICdzeW50aGVzaXMnIHx8ICF0dXJuLnBhcmFsbGVsR3JvdXApIHtcbiAgICAgIHJvd3MucHVzaChbdHVybl0pXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBleGlzdGluZyA9IHJvd3MuZmluZCgocm93KSA9PiByb3dbMF0/LnBhcmFsbGVsR3JvdXAgPT09IHR1cm4ucGFyYWxsZWxHcm91cClcbiAgICBpZiAoZXhpc3RpbmcpIGV4aXN0aW5nLnB1c2godHVybilcbiAgICBlbHNlIHJvd3MucHVzaChbdHVybl0pXG4gIH1cbiAgcmV0dXJuIHJvd3Ncbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERlbGliZXJhdGlvbkV4Y2hhbmdlKHsgdHVybnMsIHZlcmJvc2UsIHdpZGUsIGNvbXBhY3RUb29sSGlzdG9yeSA9IGZhbHNlLCB2aWV3cG9ydEhlaWdodCwgZm9jdXNlZCA9IGZhbHNlLCBvbkZvY3VzIH0pIHtcbiAgY29uc3QgW3NlbGVjdGVkLCBzZXRTZWxlY3RlZF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgaWQgPSB0dXJuID0+IGAke3R1cm4ucm9sZX06JHt0dXJuLnJvdW5kID8/ICdzeW50aGVzaXMnfWBcbiAgY29uc3Qgc2VsZWN0ZWRJZCA9IHNlbGVjdGVkKCkgfHwgKHR1cm5zWzBdICYmIGlkKHR1cm5zWzBdKSlcbiAgY29uc3QgZm9jdXNUdXJuID0gdHVybiA9PiB7IHNldFNlbGVjdGVkKGlkKHR1cm4pKTsgb25Gb2N1cz8uKCkgfVxuICB1c2VJbnB1dChldmVudCA9PiB7XG4gICAgaWYgKCFmb2N1c2VkIHx8IChldmVudC5rZXkgIT09ICdsZWZ0JyAmJiBldmVudC5rZXkgIT09ICdyaWdodCcpKSByZXR1cm5cbiAgICBjb25zdCBpbmRleCA9IHR1cm5zLmZpbmRJbmRleCh0dXJuID0+IGlkKHR1cm4pID09PSBzZWxlY3RlZElkKVxuICAgIGNvbnN0IG5leHQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0dXJucy5sZW5ndGggLSAxLCBpbmRleCArIChldmVudC5rZXkgPT09ICdsZWZ0JyA/IC0xIDogMSkpKVxuICAgIGlmICh0dXJuc1tuZXh0XSkgZm9jdXNUdXJuKHR1cm5zW25leHRdKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIH0pXG4gIGNvbnN0IHBhbmVIZWlnaHQgPSB2aWV3cG9ydEhlaWdodCA/IE1hdGgubWF4KDYsIE1hdGguZmxvb3Iodmlld3BvcnRIZWlnaHQgKiAodHVybnMuc29tZSh0dXJuID0+IHR1cm4ucm9sZSA9PT0gJ3N5bnRoZXNpcycpID8gMC42IDogMSkpIC0gMSkgOiB1bmRlZmluZWRcbiAgY29uc3QgcGFuZVByb3BzID0gdHVybiA9PiAoeyBwYW5lSGVpZ2h0OiB0dXJuLnJvbGUgPT09ICdzeW50aGVzaXMnICYmIHZpZXdwb3J0SGVpZ2h0ID8gTWF0aC5tYXgoNiwgTWF0aC5mbG9vcih2aWV3cG9ydEhlaWdodCAqIDAuMzUpKSA6IHBhbmVIZWlnaHQsIGZvY3VzZWQ6IGZvY3VzZWQgJiYgc2VsZWN0ZWRJZCA9PT0gaWQodHVybiksIG9uRm9jdXM6ICgpID0+IGZvY3VzVHVybih0dXJuKSB9KVxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGdhcDogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAge2RlbGliZXJhdGlvblJvd3ModHVybnMpLm1hcCgocm93LCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBzeW50aGVzaXMgPSByb3dbMF0/LnJvbGUgPT09ICdzeW50aGVzaXMnXG4gICAgICAgIGlmICghd2lkZSB8fCBzeW50aGVzaXMpIHJldHVybiByb3cubWFwKCh0dXJuKSA9PiA8RGVsaWJlcmF0aW9uVHVybiBrZXk9e2Ake3R1cm4ucm9sZX06JHt0dXJuLnJvdW5kID8/ICdzeW50aGVzaXMnfWB9IGl0ZW09e3R1cm59IHZlcmJvc2U9e3ZlcmJvc2V9IGNvbXBhY3RUb29sSGlzdG9yeT17Y29tcGFjdFRvb2xIaXN0b3J5fSB7Li4ucGFuZVByb3BzKHR1cm4pfSAvPilcbiAgICAgICAgY29uc3QgbGVmdCA9IHJvdy5maW5kKCh0dXJuKSA9PiB0dXJuLnJvbGUgPT09ICdwYXJ0aWNpcGFudC1hJyB8fCB0dXJuLnJvbGUgPT09ICdwcm9wb3NlcicpXG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gcm93LmZpbmQoKHR1cm4pID0+IHR1cm4ucm9sZSA9PT0gJ3BhcnRpY2lwYW50LWInIHx8IHR1cm4ucm9sZSA9PT0gJ3Jldmlld2VyJylcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Ym94IGtleT17cm93WzBdPy5wYXJhbGxlbEdyb3VwIHx8IGAke3Jvd1swXT8ucm9sZX06JHtyb3dbMF0/LnJvdW5kfToke2luZGV4fWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCB3aWR0aDogJzEwMCUnLCBvdmVyZmxvdzogJ2NsaXAnLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgd2lkdGg6ICc1MCUnLCBtaW5XaWR0aDogMCwgb3ZlcmZsb3c6ICdjbGlwJyB9fT57bGVmdCAmJiA8RGVsaWJlcmF0aW9uVHVybiBpdGVtPXtsZWZ0fSB2ZXJib3NlPXt2ZXJib3NlfSBjb21wYWN0VG9vbEhpc3Rvcnk9e2NvbXBhY3RUb29sSGlzdG9yeX0gcGFpcmVkIGJvcmRlcj17ZmFsc2V9IHsuLi5wYW5lUHJvcHMobGVmdCl9IC8+fTwvYm94PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyB3aWR0aDogMSwgZmxleFNocmluazogMCB9fSAvPlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgbWluV2lkdGg6IDAsIG92ZXJmbG93OiAnY2xpcCcgfX0+e3JpZ2h0ICYmIDxEZWxpYmVyYXRpb25UdXJuIGl0ZW09e3JpZ2h0fSB2ZXJib3NlPXt2ZXJib3NlfSBjb21wYWN0VG9vbEhpc3Rvcnk9e2NvbXBhY3RUb29sSGlzdG9yeX0gcGFpcmVkIGJvcmRlcj17ZmFsc2V9IHsuLi5wYW5lUHJvcHMocmlnaHQpfSAvPn08L2JveD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1lc3NhZ2UoeyBpdGVtLCB2ZXJib3NlLCBzaG93TG9ja2VkID0gZmFsc2UgfSkge1xuICBpZiAoaXRlbS5raW5kID09PSAndG9vbC1ncm91cCcpIHJldHVybiA8VG9vbEdyb3VwIGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2V9IC8+XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3VzZXInICYmIGl0ZW0ub3JpZ2luID09PSAndmlldycpIHtcbiAgICBjb25zdCBsYWJlbCA9IC9eXFxbdmlldzogKFteXFxdXSspXFxdLy5leGVjKGl0ZW0udGV4dCk/LlsxXSB8fCAnaW1hZ2UnXG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2BcdTI3MTMgVmlld2VkICR7bGFiZWx9YH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnYWdlbnQtbm90aWNlLWdyb3VwJykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57YFx1MjY5OSAke2l0ZW0ubm90aWNlcy5sZW5ndGh9IGFnZW50cyBmaW5pc2hlZGB9PC90ZXh0PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIHt2ZXJib3NlICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgICB7aXRlbS5ub3RpY2VzLm1hcCgobm90aWNlLCBpKSA9PiAoXG4gICAgICAgICAgICAgIDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e25vdGljZS50ZXh0LnJlcGxhY2UoL15cXFtzeXN0ZW0gbm90aWZpY2F0aW9uXFxdXFxzKi8sICcnKX08L3RleHQ+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICd0b29sJykge1xuICAgIHJldHVybiA8VG9vbENhcmQgey4uLml0ZW19IHZlcmJvc2U9e3ZlcmJvc2V9IC8+XG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnc3VtbWFyeScpIHtcbiAgICBjb25zdCBsaW5lcyA9IGl0ZW0udGV4dC5zcGxpdCgnXFxuJylcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2l0ZW0uc291cmNlID09PSAnY29tcGFjdCcgPyAnXHUyNzI2IHN1bW1hcnkgIGNvbnZlcnNhdGlvbiBjb21wYWN0ZWQgYWJvdmUgdGhpcyBwb2ludCcgOiAnXHUyNzI2IHN1bW1hcnkgIHJld291bmQgY29udmVyc2F0aW9uJ308L3RleHQ+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7bGluZXMubGVuZ3RofSAke2xpbmVzLmxlbmd0aCA9PT0gMSA/ICdsaW5lJyA6ICdsaW5lcyd9YH08L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgICB7dmVyYm9zZSAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgICAge2xpbmVzLnNsaWNlKDAsIDUwMCkubWFwKChsaW5lLCBpKSA9PiAoXG4gICAgICAgICAgICAgIDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e2xpbmUgfHwgJyAnfTwvdGV4dD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgICAge2xpbmVzLmxlbmd0aCA+IDUwMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2BcdTIwMjYgJHtsaW5lcy5sZW5ndGggLSA1MDB9IG1vcmUgbGluZXNgfTwvdGV4dD59XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAndGhvdWdodHMnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgIDxNYXJrZG93biB0ZXh0PXtpdGVtLnRleHR9IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19IC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ2RlbGliZXJhdGlvbi10dXJuJykge1xuICAgIHJldHVybiA8Ym94IHN0eWxlPXt7IG1hcmdpblRvcDogMSB9fT48RGVsaWJlcmF0aW9uVHVybiBpdGVtPXtpdGVtfSB2ZXJib3NlPXt2ZXJib3NlfSAvPjwvYm94PlxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ25vdGljZScpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19PntgXHUyNjk5ICR7aXRlbS50ZXh0LnJlcGxhY2UoL15cXFtzeXN0ZW0gbm90aWZpY2F0aW9uXFxdXFxzKi8sICcnKX1gfTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdza2lsbCcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19PntgXHUyNzI2IHNraWxsOiAke2l0ZW0ubmFtZX1gfTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdzdGVlci10b29scycpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19PntgXHUyNTAwXHUyNTAwICR7aXRlbS5jb3VudH0gdG9vbCAke2l0ZW0uY291bnQgPT09IDEgPyAnaW50ZXJhY3Rpb24nIDogJ2ludGVyYWN0aW9ucyd9IGhpZGRlbiBcdTI1MDBcdTI1MDBgfTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdzaGVsbC1jb21tYW5kJykge1xuICAgIGNvbnN0IHNob3duID0gaGlnaGxpZ2h0KGl0ZW0udGV4dCwgJ2Jhc2gnKVxuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBib2xkOiB0cnVlIH19PnsnY29tbWFuZCd9PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nTGVmdDogMiB9fT5cbiAgICAgICAgICB7c2hvd24uc3BsaXQoJ1xcbicpLm1hcCgobGluZSwgaSkgPT4gPHRleHQga2V5PXtpfT57YCR7aSA9PT0gMCA/ICckICcgOiAnICAnfSR7bGluZSB8fCAnICd9YH08L3RleHQ+KX1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnc2hlbGwtb3V0cHV0Jykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBib2xkOiB0cnVlIH19Pnsnb3V0cHV0J308L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdMZWZ0OiAyIH19PlxuICAgICAgICAgIHtpdGVtLnRleHQuc3BsaXQoJ1xcbicpLm1hcCgobGluZSwgaSkgPT4gPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57bGluZSB8fCAnICd9PC90ZXh0Pil9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3BlZXInKSB7XG4gICAgY29uc3QgaW5jb21pbmcgPSBpdGVtLmRpcmVjdGlvbiA9PT0gJ2luY29taW5nJ1xuICAgIGNvbnN0IHVucmVhZCA9IGluY29taW5nICYmICFpdGVtLnJlYWRcbiAgICBjb25zdCBjb2xvciA9IGluY29taW5nICYmIGl0ZW0ucmVhZCA/IE1VVEVEIDogUEVFUlxuICAgIGNvbnN0IHN0YXR1cyA9IGluY29taW5nID8gYCAgJHt1bnJlYWQgPyAndW5yZWFkJyA6ICdyZWFkJ31gIDogYCAgJHtpdGVtLnN0YXR1cyB8fCAndW5rbm93bid9YFxuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nTGVmdDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogUEVFUiwgYm9sZDogdHJ1ZSB9fT57YEAke2l0ZW0uZnJvbS5uYW1lfSBcdTIxOTIgQCR7aXRlbS50by5uYW1lfSR7aXRlbS51cmdlbnQgPyAnICB1cmdlbnQnIDogJyd9YH08L3RleHQ+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3IsIGJvbGQ6IHVucmVhZCB9fT57c3RhdHVzfTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yIH19PntpdGVtLnRleHR9PC90ZXh0PlxuICAgICAgICB7aXRlbS5lcnJvciAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogUkVEIH19PntpdGVtLmVycm9yfTwvdGV4dD59XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAndXNlcicpIHtcbiAgICBjb25zdCBsYWJlbCA9IHNob3dMb2NrZWQgJiYgaXRlbS5sb2NrZWQgPyAnTG9ja2VkICBjb21wYWN0ZWQnIDogc2hvd0xvY2tlZCA/ICdVc2VyJyA6IG51bGxcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiAxLCBmbGV4U2hyaW5rOiAwLCBiZzogaXRlbS5zdGVlclNlbGVjdGVkID8gYWNjZW50KCkgOiBQQU5FTF9CRyB9fSAvPlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IGl0ZW0uc3RlZXJTZWxlY3RlZCA/IFNFTEVDVF9CRyA6IFBBTkVMX0JHLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIHBhZGRpbmdMZWZ0OiAxLCBwYWRkaW5nUmlnaHQ6IDIsIHBhZGRpbmdZOiAxIH19PlxuICAgICAgICAgICAge2xhYmVsICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiB0cnVlIH19PntsYWJlbH08L3RleHQ+fVxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PntpdGVtLnRleHR9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBpdGVtLmludGVycnVwdGVkID8gYCR7aXRlbS50ZXh0fSAqKGludGVycnVwdGVkKSpgIDogaXRlbS50ZXh0XG4gIGNvbnN0IGxhYmVsID0gc2hvd0xvY2tlZCAmJiBpdGVtLmxvY2tlZCA/ICdMb2NrZWQgIGNvbXBhY3RlZCcgOiBzaG93TG9ja2VkID8gJ0Fzc2lzdGFudCcgOiBudWxsXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiAxLCBmbGV4U2hyaW5rOiAwLCBiZzogaXRlbS5zdGVlclNlbGVjdGVkID8gYWNjZW50KCkgOiB1bmRlZmluZWQgfX0gLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIHBhZGRpbmdMZWZ0OiAxLCBwYWRkaW5nUmlnaHQ6IDIsIHBhZGRpbmdZOiBzaG93TG9ja2VkID8gMSA6IDAsIGJnOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBTRUxFQ1RfQkcgOiB1bmRlZmluZWQgfX0+XG4gICAgICAgICAge2xhYmVsICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiB0cnVlIH19PntsYWJlbH08L3RleHQ+fVxuICAgICAgICAgIDxNYXJrZG93blxuICAgICAgICAgICAgdGV4dD17dGV4dH1cbiAgICAgICAgICAgIGhpZ2hsaWdodD17aGlnaGxpZ2h0fVxuICAgICAgICAgICAgY29kZUJnPXtudWxsfVxuICAgICAgICAgICAgY29kZUJsb2NrPXtUcmFuc2NyaXB0Q29kZUJsb2NrfVxuICAgICAgICAgICAgdGFibGVCb3JkZXJDb2xvcj17TVVURUR9XG4gICAgICAgICAgICB0YWJsZVJvd0hvdmVyQmc9e1BBTkVMX0JHfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY29tcGFjdFRyYW5zY3JpcHRSdW5zKGl0ZW1zLCBhY3RpdmUgPSBmYWxzZSkge1xuICBjb25zdCByZXN1bHQgPSBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDspIHtcbiAgICBpZiAoaXRlbXNbaV0ua2luZCA9PT0gJ3Rvb2wnIHx8IGl0ZW1zW2ldLmtpbmQgPT09ICd0aG91Z2h0cycpIHtcbiAgICAgIGxldCBlbmQgPSBpICsgMVxuICAgICAgd2hpbGUgKGVuZCA8IGl0ZW1zLmxlbmd0aCAmJiAoaXRlbXNbZW5kXS5raW5kID09PSAndG9vbCcgfHwgaXRlbXNbZW5kXS5raW5kID09PSAndGhvdWdodHMnKSkgZW5kKytcbiAgICAgIGNvbnN0IHJ1biA9IGl0ZW1zLnNsaWNlKGksIGVuZClcbiAgICAgIGNvbnN0IHRvb2xzID0gcnVuLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5raW5kID09PSAndG9vbCcpXG4gICAgICByZXN1bHQucHVzaCh7IGtpbmQ6ICd0b29sLWdyb3VwJywgY2FsbElkOiB0b29scy5hdCgtMSk/LmNhbGxJZCwgaXRlbXM6IHJ1biwgdG9vbHMsIGFjdGl2ZTogYWN0aXZlICYmIGVuZCA9PT0gaXRlbXMubGVuZ3RoIH0pXG4gICAgICBpID0gZW5kXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoaXRlbXNbaV0ua2luZCA9PT0gJ25vdGljZScgJiYgaXRlbXNbaV0uYWdlbnRDb21wbGV0aW9uKSB7XG4gICAgICBsZXQgZW5kID0gaSArIDFcbiAgICAgIHdoaWxlIChlbmQgPCBpdGVtcy5sZW5ndGggJiYgaXRlbXNbZW5kXS5raW5kID09PSAnbm90aWNlJyAmJiBpdGVtc1tlbmRdLmFnZW50Q29tcGxldGlvbikgZW5kKytcbiAgICAgIGNvbnN0IHJ1biA9IGl0ZW1zLnNsaWNlKGksIGVuZClcbiAgICAgIHJlc3VsdC5wdXNoKHJ1bi5sZW5ndGggPT09IDEgPyBydW5bMF0gOiB7IGtpbmQ6ICdhZ2VudC1ub3RpY2UtZ3JvdXAnLCBub3RpY2VzOiBydW4gfSlcbiAgICAgIGkgPSBlbmRcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIHJlc3VsdC5wdXNoKGl0ZW1zW2krK10pXG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNjcmlwdFdpbmRvdyhpdGVtcywgc2l6ZSkge1xuICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIGl0ZW1zLmxlbmd0aCAtIHNpemUpXG4gIGNvbnN0IGhpZGRlbiA9IGl0ZW1zLnNsaWNlKDAsIHN0YXJ0KVxuICByZXR1cm4ge1xuICAgIGl0ZW1zOiBpdGVtcy5zbGljZShzdGFydCksXG4gICAgaGlkZGVuSXRlbXM6IGhpZGRlbi5sZW5ndGgsXG4gICAgaGlkZGVuQ291bnQ6IGhpZGRlbi5yZWR1Y2UoKHRvdGFsLCBpdGVtKSA9PiB0b3RhbCArIHNvdXJjZUl0ZW1Db3VudChpdGVtKSwgMCksXG4gIH1cbn1cblxuZnVuY3Rpb24gc291cmNlSXRlbUNvdW50KGl0ZW0pIHtcbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3Rvb2wtZ3JvdXAnKSByZXR1cm4gaXRlbS5pdGVtcy5sZW5ndGhcbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ2FnZW50LW5vdGljZS1ncm91cCcpIHJldHVybiBpdGVtLm5vdGljZXMubGVuZ3RoXG4gIGlmIChpdGVtLmtpbmQgPT09ICdzdGVlci10b29scycpIHJldHVybiBpdGVtLmNvdW50XG4gIHJldHVybiAxXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBUZXh0SW5wdXQsIHVzZUxheW91dCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICcuL3RyYW5zY3JpcHQuanN4J1xuaW1wb3J0IHsgYWNjZW50LCBGRywgTVVURUQsIFBBTkVMX0JHIH0gZnJvbSAnLi90aGVtZS5qcydcbmltcG9ydCB7IGNvbnZlcnNhdGlvbk1hdGNoZXMsIGhpZ2hsaWdodENvbnZlcnNhdGlvbiB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29udmVyc2F0aW9uLXNlYXJjaC5qcydcblxuZnVuY3Rpb24gU2Nyb2xsQW5jaG9yKHsgdGFyZ2V0IH0pIHtcbiAgY29uc3QgbGF5b3V0ID0gdXNlTGF5b3V0KClcbiAgdGFyZ2V0LmFuY2hvclkgPSBsYXlvdXQueVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBTZWFyY2hNZXNzYWdlKHsgaXRlbSwgdmVyYm9zZSwgY3VycmVudE1hdGNoLCBzZWFyY2ggfSkge1xuICBjb25zdCBsYXlvdXQgPSB1c2VMYXlvdXQoKVxuICBpZiAoY3VycmVudE1hdGNoKSBzZWFyY2guc2Nyb2xsVG9NYXRjaChsYXlvdXQsIGN1cnJlbnRNYXRjaClcbiAgcmV0dXJuIDxNZXNzYWdlIGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2V9IC8+XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb252ZXJzYXRpb25TZWFyY2goeyBmbSwgdmVyYm9zZSwgc2V0Rm9sbG93LCBzZXRPZmZzZXQgfSkge1xuICBjb25zdCBbYWN0aXZlLCBzZXRBY3RpdmVdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbcXVlcnksIHNldFF1ZXJ5XSA9IGNyZWF0ZVNpZ25hbCgnJylcbiAgY29uc3QgW2NvbW1pdHRlZCwgc2V0Q29tbWl0dGVkXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2luZGV4LCBzZXRJbmRleF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2VudGVyRm9jdXMsIHNldEVudGVyRm9jdXNdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2Nyb2xsUmVxdWVzdCwgc2V0U2Nyb2xsUmVxdWVzdF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3Njcm9sbF0gPSBjcmVhdGVTaWduYWwoeyBhbmNob3JZOiAwLCBrZXk6IG51bGwgfSlcblxuICBmdW5jdGlvbiByZWdpc3RlckZvY3VzKCkge1xuICAgIGlmICghYWN0aXZlKCkpIHJldHVyblxuICAgIGZtLml0ZW0oJ2NvbnZlcnNhdGlvbi1zZWFyY2gnKVxuICAgIGlmIChlbnRlckZvY3VzKCkpIHtcbiAgICAgIHNldEVudGVyRm9jdXMoZmFsc2UpXG4gICAgICBmbS5mb2N1cygnY29udmVyc2F0aW9uLXNlYXJjaCcpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb3BlbigpIHtcbiAgICBzZXRBY3RpdmUodHJ1ZSlcbiAgICBzZXRRdWVyeSgnJylcbiAgICBzZXRDb21taXR0ZWQoZmFsc2UpXG4gICAgc2V0SW5kZXgoMClcbiAgICBzZXRFbnRlckZvY3VzKHRydWUpXG4gIH1cblxuICBmdW5jdGlvbiBjbG9zZSh7IHJlc3RvcmVGb2N1cyA9IHRydWUgfSA9IHt9KSB7XG4gICAgc2V0QWN0aXZlKGZhbHNlKVxuICAgIHNldFF1ZXJ5KCcnKVxuICAgIHNldENvbW1pdHRlZChmYWxzZSlcbiAgICBzZXRJbmRleCgwKVxuICAgIGlmIChyZXN0b3JlRm9jdXMgJiYgZm0uaXMoJ2NvbnZlcnNhdGlvbi1zZWFyY2gnKSkgZm0uZm9jdXMoJ2ZlZWQnKVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlSW5wdXQoZXZlbnQsIG1hdGNoZXMpIHtcbiAgICBpZiAoYWN0aXZlKCkgJiYgIWZtLmlzKCdjb252ZXJzYXRpb24tc2VhcmNoJykpIHtcbiAgICAgIGNsb3NlKHsgcmVzdG9yZUZvY3VzOiBmYWxzZSB9KVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgaWYgKCFhY3RpdmUoKSB8fCAhY29tbWl0dGVkKCkpIHJldHVybiBmYWxzZVxuICAgIGNvbnN0IGNvdW50ID0gbWF0Y2hlcy5sZW5ndGhcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykgY2xvc2UoKVxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ24nICYmICFldmVudC5zaGlmdCkge1xuICAgICAgaWYgKGNvdW50KSB7XG4gICAgICAgIHNldEluZGV4KChpbmRleCgpICsgMSkgJSBjb3VudClcbiAgICAgICAgc2V0U2Nyb2xsUmVxdWVzdCgocmVxdWVzdCkgPT4gcmVxdWVzdCArIDEpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdOJyB8fCAoZXZlbnQuc2hpZnQgJiYgZXZlbnQua2V5ID09PSAnbicpKSB7XG4gICAgICBpZiAoY291bnQpIHtcbiAgICAgICAgc2V0SW5kZXgoKGluZGV4KCkgLSAxICsgY291bnQpICUgY291bnQpXG4gICAgICAgIHNldFNjcm9sbFJlcXVlc3QoKHJlcXVlc3QpID0+IHJlcXVlc3QgKyAxKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdvJykgcmV0dXJuIGZhbHNlXG4gICAgZWxzZSByZXR1cm4gdHJ1ZVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGZ1bmN0aW9uIHByZXBhcmUoaXRlbXMpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gY29udmVyc2F0aW9uTWF0Y2hlcyhpdGVtcywgcXVlcnkoKSwgdmVyYm9zZSgpKVxuICAgIGNvbnN0IGxhc3RJbmRleCA9IE1hdGgubWF4KDAsIG1hdGNoZXMubGVuZ3RoIC0gMSlcbiAgICBpZiAoaW5kZXgoKSA+IGxhc3RJbmRleCkgc2V0SW5kZXgobGFzdEluZGV4KVxuICAgIHJldHVybiB7XG4gICAgICBtYXRjaGVzLFxuICAgICAgaXRlbXM6IGFjdGl2ZSgpID8gaGlnaGxpZ2h0Q29udmVyc2F0aW9uKGl0ZW1zLCBxdWVyeSgpLCBpbmRleCgpLCB2ZXJib3NlKCkpIDogaXRlbXMsXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2Nyb2xsVG9NYXRjaChsYXlvdXQsIG1hdGNoKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gc2Nyb2xsKClcbiAgICBjb25zdCBrZXkgPSBgJHtxdWVyeSgpfVxcMCR7aW5kZXgoKX1cXDAke3ZlcmJvc2UoKX1cXDAke3Njcm9sbFJlcXVlc3QoKX1gXG4gICAgaWYgKHRhcmdldC5rZXkgPT09IGtleSkgcmV0dXJuXG4gICAgdGFyZ2V0LmtleSA9IGtleVxuICAgIHNldEZvbGxvdyhmYWxzZSlcbiAgICBzZXRPZmZzZXQoTWF0aC5tYXgoMCwgbGF5b3V0LnkgLSB0YXJnZXQuYW5jaG9yWSArIG1hdGNoLmxpbmUgLSAzKSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVF1ZXJ5KHZhbHVlKSB7XG4gICAgc2V0UXVlcnkodmFsdWUpXG4gICAgc2V0SW5kZXgoMClcbiAgICBzZXRTY3JvbGxSZXF1ZXN0KChyZXF1ZXN0KSA9PiByZXF1ZXN0ICsgMSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWN0aXZlLFxuICAgIHF1ZXJ5LFxuICAgIGNvbW1pdHRlZCxcbiAgICBpbmRleCxcbiAgICBmb2N1c2VkOiAoKSA9PiBmbS5pcygnY29udmVyc2F0aW9uLXNlYXJjaCcpLFxuICAgIHJlZ2lzdGVyRm9jdXMsXG4gICAgb3BlbixcbiAgICBjbG9zZSxcbiAgICBoYW5kbGVJbnB1dCxcbiAgICBwcmVwYXJlLFxuICAgIHNjcm9sbDogc2Nyb2xsKCksXG4gICAgc2Nyb2xsVG9NYXRjaCxcbiAgICBjb21taXQ6ICgpID0+IHNldENvbW1pdHRlZCh0cnVlKSxcbiAgICB1cGRhdGVRdWVyeSxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ29udmVyc2F0aW9uU2VhcmNoQmFyKHsgc2VhcmNoLCBtYXRjaGVzIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBmbGV4U2hyaW5rOiAwLCBoZWlnaHQ6IDEsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+eycvICd9PC90ZXh0PlxuICAgICAge3NlYXJjaC5jb21taXR0ZWQoKVxuICAgICAgICA/IDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRywgZmxleEdyb3c6IDEgfX0+e3NlYXJjaC5xdWVyeSgpfTwvdGV4dD5cbiAgICAgICAgOiA8VGV4dElucHV0XG4gICAgICAgICAgICBmb2N1c2VkPXtzZWFyY2guZm9jdXNlZCgpfVxuICAgICAgICAgICAgdmFsdWU9e3NlYXJjaC5xdWVyeSgpfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3NlYXJjaC51cGRhdGVRdWVyeX1cbiAgICAgICAgICAgIG9uU3VibWl0PXtzZWFyY2guY29tbWl0fVxuICAgICAgICAgICAgb25DYW5jZWw9e3NlYXJjaC5jbG9zZX1cbiAgICAgICAgICAvPn1cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57bWF0Y2hlcy5sZW5ndGggPyBgJHtzZWFyY2guaW5kZXgoKSArIDF9LyR7bWF0Y2hlcy5sZW5ndGh9YCA6ICcwLzAnfTwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgeyBTY3JvbGxBbmNob3IgYXMgQ29udmVyc2F0aW9uU2Nyb2xsQW5jaG9yLCBTZWFyY2hNZXNzYWdlIGFzIENvbnZlcnNhdGlvblNlYXJjaE1lc3NhZ2UgfVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgQnV0dG9uLCBUZXh0SW5wdXQsIHVzZUlucHV0IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgYWNjZW50LCBNVVRFRCwgRkcsIEZHX1NPRlQsIFBBTkVMX0JHLCBTRUxFQ1RfQkcgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5mdW5jdGlvbiBhbnN3ZXJUZXh0KHF1ZXN0aW9uLCBhbnN3ZXIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYW5zd2VyKSkgcmV0dXJuIGFuc3dlci5qb2luKCcsICcpXG4gIHJldHVybiBhbnN3ZXIgfHwgJ05vdCBhbnN3ZXJlZCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFF1ZXN0aW9uRm9ybSh7IHJlcXVlc3QsIGZvY3VzZWQsIG9uU3VibWl0LCBvbkNhbmNlbCB9KSB7XG4gIGNvbnN0IHF1ZXN0aW9ucyA9IHJlcXVlc3QucXVlc3Rpb25zXG4gIGNvbnN0IHJldmlld2luZyA9IHF1ZXN0aW9ucy5sZW5ndGggPiAxXG4gIGNvbnN0IFtzdGVwLCBzZXRTdGVwXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbYW5zd2Vycywgc2V0QW5zd2Vyc10gPSBjcmVhdGVTaWduYWwoe30pXG4gIGNvbnN0IFtjdXJzb3IsIHNldEN1cnNvcl0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2N1c3RvbSwgc2V0Q3VzdG9tXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Jldmlldywgc2V0UmV2aWV3XSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2NvbnRyb2wsIHNldENvbnRyb2xdID0gY3JlYXRlU2lnbmFsKCdhbnN3ZXInKVxuXG4gIGNvbnN0IHF1ZXN0aW9uID0gKCkgPT4gcXVlc3Rpb25zW3N0ZXAoKV1cbiAgY29uc3Qgb3B0aW9ucyA9ICgpID0+IHF1ZXN0aW9uKCkub3B0aW9ucyB8fCBbXVxuICBjb25zdCByb3dzID0gKCkgPT4gWy4uLm9wdGlvbnMoKSwgLi4uKHF1ZXN0aW9uKCkuYWxsb3dPdGhlciA9PT0gZmFsc2UgPyBbXSA6IFt7IGxhYmVsOiAnT3RoZXInLCBvdGhlcjogdHJ1ZSB9XSldXG4gIGNvbnN0IHNlbGVjdGVkID0gKGxhYmVsKSA9PiAoYW5zd2VycygpW3F1ZXN0aW9uKCkuaWRdIHx8IFtdKS5pbmNsdWRlcyhsYWJlbClcbiAgY29uc3Qgb3RoZXJBbnN3ZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgYW5zd2VyID0gYW5zd2VycygpW3F1ZXN0aW9uKCkuaWRdXG4gICAgY29uc3QgbGFiZWxzID0gbmV3IFNldChvcHRpb25zKCkubWFwKChvcHRpb24pID0+IG9wdGlvbi5sYWJlbCkpXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYW5zd2VyKSkgcmV0dXJuIGFuc3dlci5maW5kKCh2YWx1ZSkgPT4gIWxhYmVscy5oYXModmFsdWUpKSB8fCAnJ1xuICAgIHJldHVybiBhbnN3ZXIgJiYgIWxhYmVscy5oYXMoYW5zd2VyKSA/IGFuc3dlciA6ICcnXG4gIH1cblxuICBmdW5jdGlvbiBzZXRBbnN3ZXIodmFsdWUpIHtcbiAgICBzZXRBbnN3ZXJzKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBbcXVlc3Rpb24oKS5pZF06IHZhbHVlIH0pKVxuICB9XG5cbiAgZnVuY3Rpb24gYWR2YW5jZSgpIHtcbiAgICBzZXRDdXN0b20oZmFsc2UpXG4gICAgc2V0Q3Vyc29yKDApXG4gICAgc2V0Q29udHJvbCgnYW5zd2VyJylcbiAgICBpZiAoc3RlcCgpIDwgcXVlc3Rpb25zLmxlbmd0aCAtIDEpIHNldFN0ZXAoc3RlcCgpICsgMSlcbiAgICBlbHNlIGlmIChyZXZpZXdpbmcpIHsgc2V0Q3Vyc29yKHF1ZXN0aW9ucy5sZW5ndGgpOyBzZXRSZXZpZXcodHJ1ZSkgfVxuICAgIGVsc2UgZmluaXNoKClcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmlzaCgpIHtcbiAgICBvblN1Ym1pdChxdWVzdGlvbnMubWFwKChpdGVtKSA9PiAoeyBpZDogaXRlbS5pZCwgcXVlc3Rpb246IGl0ZW0ucXVlc3Rpb24sIGFuc3dlcjogYW5zd2VycygpW2l0ZW0uaWRdID8/ICcnIH0pKSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHN1Ym1pdFRleHQodmFsdWUpIHtcbiAgICBjb25zdCBhbnN3ZXIgPSB2YWx1ZS50cmltKClcbiAgICBpZiAoIWFuc3dlcikgcmV0dXJuXG4gICAgc2V0QW5zd2VyKGFuc3dlcilcbiAgICBpZiAocXVlc3Rpb25zLmxlbmd0aCA9PT0gMSkgb25TdWJtaXQoW3sgaWQ6IGl0ZW0uaWQsIHF1ZXN0aW9uOiBpdGVtLnF1ZXN0aW9uLCBhbnN3ZXIgfV0pXG4gICAgZWxzZSBhZHZhbmNlKClcbiAgfVxuXG4gIGZ1bmN0aW9uIHN1Ym1pdE90aGVyKHZhbHVlKSB7XG4gICAgY29uc3QgYW5zd2VyID0gdmFsdWUudHJpbSgpXG4gICAgY29uc3Qga25vd24gPSBuZXcgU2V0KChpdGVtLm9wdGlvbnMgfHwgW10pLm1hcCgob3B0aW9uKSA9PiBvcHRpb24ubGFiZWwpKVxuICAgIGNvbnN0IGNob2ljZXMgPSBpdGVtLnR5cGUgPT09ICdtdWx0aScgPyAoYW5zd2VycygpW2l0ZW0uaWRdIHx8IFtdKS5maWx0ZXIoKGVudHJ5KSA9PiBrbm93bi5oYXMoZW50cnkpKSA6IFtdXG4gICAgY29uc3QgbmV4dEFuc3dlciA9IGl0ZW0udHlwZSA9PT0gJ211bHRpJyA/IFsuLi5jaG9pY2VzLCAuLi4oYW5zd2VyID8gW2Fuc3dlcl0gOiBbXSldIDogYW5zd2VyXG4gICAgc2V0QW5zd2VyKG5leHRBbnN3ZXIpXG4gICAgc2V0Q3VzdG9tKGZhbHNlKVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdzaW5nbGUnICYmIGFuc3dlcikge1xuICAgICAgaWYgKHF1ZXN0aW9ucy5sZW5ndGggPT09IDEpIG9uU3VibWl0KFt7IGlkOiBpdGVtLmlkLCBxdWVzdGlvbjogaXRlbS5xdWVzdGlvbiwgYW5zd2VyIH1dKVxuICAgICAgZWxzZSBhZHZhbmNlKClcbiAgICB9XG4gIH1cblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBpZiAoY3VzdG9tKCkpIHsgc2V0Q3VzdG9tKGZhbHNlKTsgc2V0Q29udHJvbCgnYW5zd2VyJykgfVxuICAgICAgZWxzZSBpZiAocmV2aWV3KCkpIHNldFJldmlldyhmYWxzZSlcbiAgICAgIGVsc2Ugb25DYW5jZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocmV2aWV3KCkpIHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICd1cCcgfHwgZXZlbnQua2V5ID09PSAnaycpIHNldEN1cnNvcihNYXRoLm1heCgwLCBjdXJzb3IoKSAtIDEpKVxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZG93bicgfHwgZXZlbnQua2V5ID09PSAnaicpIHNldEN1cnNvcihNYXRoLm1pbihxdWVzdGlvbnMubGVuZ3RoLCBjdXJzb3IoKSArIDEpKVxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAncmV0dXJuJykge1xuICAgICAgICBpZiAoY3Vyc29yKCkgPT09IHF1ZXN0aW9ucy5sZW5ndGgpIGZpbmlzaCgpXG4gICAgICAgIGVsc2UgeyBzZXRTdGVwKGN1cnNvcigpKTsgc2V0Q3Vyc29yKDApOyBzZXRDb250cm9sKCdhbnN3ZXInKTsgc2V0UmV2aWV3KGZhbHNlKSB9XG4gICAgICB9IGVsc2UgcmV0dXJuXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChzdGVwKCkgPiAwICYmIChldmVudC5rZXkgPT09ICd0YWInIHx8IGV2ZW50LmtleSA9PT0gJ3NoaWZ0LXRhYicpKSB7XG4gICAgICBzZXRDb250cm9sKGNvbnRyb2woKSA9PT0gJ2JhY2snID8gJ2Fuc3dlcicgOiAnYmFjaycpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjb250cm9sKCkgPT09ICdiYWNrJykgcmV0dXJuXG4gICAgaWYgKGN1c3RvbSgpKSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyB8fCBldmVudC5rZXkgPT09ICdzaGlmdC10YWInKSB7XG4gICAgICAgIHNldEN1c3RvbShmYWxzZSlcbiAgICAgICAgc2V0Q29udHJvbCgnYW5zd2VyJylcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocXVlc3Rpb24oKT8udHlwZSA9PT0gJ3RleHQnKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAndXAnIHx8IGV2ZW50LmtleSA9PT0gJ2snKSBzZXRDdXJzb3IoTWF0aC5tYXgoMCwgY3Vyc29yKCkgLSAxKSlcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdkb3duJyB8fCBldmVudC5rZXkgPT09ICdqJykgc2V0Q3Vyc29yKE1hdGgubWluKHJvd3MoKS5sZW5ndGggLSAxLCBjdXJzb3IoKSArIDEpKVxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3NwYWNlJyAmJiBxdWVzdGlvbigpLnR5cGUgPT09ICdtdWx0aScpIHtcbiAgICAgIGNvbnN0IHJvdyA9IHJvd3MoKVtjdXJzb3IoKV1cbiAgICAgIGlmIChyb3cub3RoZXIpIHtcbiAgICAgICAgaWYgKG90aGVyQW5zd2VyKCkpIHtcbiAgICAgICAgICBjb25zdCBrbm93biA9IG5ldyBTZXQob3B0aW9ucygpLm1hcCgob3B0aW9uKSA9PiBvcHRpb24ubGFiZWwpKVxuICAgICAgICAgIHNldEFuc3dlcigoYW5zd2VycygpW3F1ZXN0aW9uKCkuaWRdIHx8IFtdKS5maWx0ZXIoKGVudHJ5KSA9PiBrbm93bi5oYXMoZW50cnkpKSlcbiAgICAgICAgICBzZXRDdXN0b20oZmFsc2UpXG4gICAgICAgIH0gZWxzZSBzZXRDdXN0b20odHJ1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBhbnN3ZXJzKClbcXVlc3Rpb24oKS5pZF0gfHwgW11cbiAgICAgICAgc2V0QW5zd2VyKGN1cnJlbnQuaW5jbHVkZXMocm93LmxhYmVsKSA/IGN1cnJlbnQuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgIT09IHJvdy5sYWJlbCkgOiBbLi4uY3VycmVudCwgcm93LmxhYmVsXSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIGNvbnN0IHJvdyA9IHJvd3MoKVtjdXJzb3IoKV1cbiAgICAgIGlmIChxdWVzdGlvbigpLnR5cGUgPT09ICdtdWx0aScpIGFkdmFuY2UoKVxuICAgICAgZWxzZSBpZiAocm93Lm90aGVyKSBzZXRDdXN0b20odHJ1ZSlcbiAgICAgIGVsc2Uge1xuICAgICAgICBzZXRBbnN3ZXIocm93LmxhYmVsKVxuICAgICAgICBpZiAocXVlc3Rpb25zLmxlbmd0aCA9PT0gMSkgb25TdWJtaXQoW3sgaWQ6IHF1ZXN0aW9uKCkuaWQsIHF1ZXN0aW9uOiBxdWVzdGlvbigpLnF1ZXN0aW9uLCBhbnN3ZXI6IHJvdy5sYWJlbCB9XSlcbiAgICAgICAgZWxzZSBhZHZhbmNlKClcbiAgICAgIH1cbiAgICB9IGVsc2UgcmV0dXJuXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgfSlcblxuICBpZiAocmV2aWV3KCkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIGJvbGQ6IHRydWUgfX0+UmV2aWV3IGFuc3dlcnM8L3RleHQ+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5lbnRlcjogZWRpdCBvciBzdWJtaXQgIGVzYzogYmFjazwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIHtxdWVzdGlvbnMubWFwKChpdGVtLCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBjdXJzb3IoKSA9PT0gaW5kZXggPyBTRUxFQ1RfQkcgOiB1bmRlZmluZWQsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGN1cnNvcigpID09PSBpbmRleCA/IGFjY2VudCgpIDogRkcgfX0+e2l0ZW0ucXVlc3Rpb259PC90ZXh0PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnthbnN3ZXJUZXh0KGl0ZW0sIGFuc3dlcnMoKVtpdGVtLmlkXSl9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApKX1cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgYmc6IGN1cnNvcigpID09PSBxdWVzdGlvbnMubGVuZ3RoID8gYWNjZW50KCkgOiB1bmRlZmluZWQsIGNvbG9yOiBjdXJzb3IoKSA9PT0gcXVlc3Rpb25zLmxlbmd0aCA/ICdibGFjaycgOiBGRywgYm9sZDogdHJ1ZSB9fT4gU3VibWl0IGFuc3dlcnMgPC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgaXRlbSA9IHF1ZXN0aW9uKClcbiAgY29uc3QgcHJvZ3Jlc3MgPSBxdWVzdGlvbnMubGVuZ3RoID4gMSA/IGAke3N0ZXAoKSArIDF9IG9mICR7cXVlc3Rpb25zLmxlbmd0aH1gIDogJ1F1ZXN0aW9uJ1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICB7c3RlcCgpID4gMCAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgbGFiZWw9XCJCYWNrXCJcbiAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBjb250cm9sKCkgPT09ICdiYWNrJ31cbiAgICAgICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFN0ZXAoc3RlcCgpIC0gMSlcbiAgICAgICAgICAgICAgICBzZXRDdXJzb3IoMClcbiAgICAgICAgICAgICAgICBzZXRDdXN0b20oZmFsc2UpXG4gICAgICAgICAgICAgICAgc2V0Q29udHJvbCgnYW5zd2VyJylcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8dGV4dD4gIDwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19Pntwcm9ncmVzc308L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntpdGVtLnR5cGUgPT09ICdtdWx0aScgPyAnc3BhY2U6IHNlbGVjdCAgZW50ZXI6IGNvbnRpbnVlJyA6ICdlbnRlcjogYW5zd2VyJ30gIGVzYzogY2FuY2VsPC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcsIGJvbGQ6IHRydWUgfX0+e2l0ZW0ucXVlc3Rpb259PC90ZXh0PlxuICAgICAge2l0ZW0uZGVzY3JpcHRpb24gJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e2l0ZW0uZGVzY3JpcHRpb259PC90ZXh0Pn1cbiAgICAgIHtpdGVtLnR5cGUgPT09ICd0ZXh0JyA/IChcbiAgICAgICAgPGJveCBzdHlsZT17eyBiZzogU0VMRUNUX0JHLCBwYWRkaW5nWDogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgIGtleT17YCR7aXRlbS5pZH06dGV4dGB9XG4gICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIGNvbnRyb2woKSA9PT0gJ2Fuc3dlcid9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgeW91ciBhbnN3ZXJcIlxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlPXt0eXBlb2YgYW5zd2VycygpW2l0ZW0uaWRdID09PSAnc3RyaW5nJyA/IGFuc3dlcnMoKVtpdGVtLmlkXSA6ICcnfVxuICAgICAgICAgICAgb25TdWJtaXQ9e3N1Ym1pdFRleHR9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICApIDogKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAge3Jvd3MoKS5tYXAoKG9wdGlvbiwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBjdXJzb3IoKSA9PT0gaW5kZXggPyBTRUxFQ1RfQkcgOiB1bmRlZmluZWQsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogY3Vyc29yKCkgPT09IGluZGV4ID8gYWNjZW50KCkgOiBGRyB9fT5cbiAgICAgICAgICAgICAgICB7aXRlbS50eXBlID09PSAnbXVsdGknXG4gICAgICAgICAgICAgICAgICA/IGAke29wdGlvbi5vdGhlciA/IChvdGhlckFuc3dlcigpID8gJ1t4XScgOiAnWyBdJykgOiAoc2VsZWN0ZWQob3B0aW9uLmxhYmVsKSA/ICdbeF0nIDogJ1sgXScpfSBgXG4gICAgICAgICAgICAgICAgICA6IGAke2N1cnNvcigpID09PSBpbmRleCA/ICdcdTIwM0EnIDogJyAnfSBgfXtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICAgICAge29wdGlvbi5kZXNjcmlwdGlvbiAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57YCAgJHtvcHRpb24uZGVzY3JpcHRpb259YH08L3RleHQ+fVxuICAgICAgICAgICAgICB7b3B0aW9uLm90aGVyICYmIChjdXN0b20oKSB8fCBvdGhlckFuc3dlcigpKSAmJiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBiZzogY3VzdG9tKCkgPyBQQU5FTF9CRyA6IHVuZGVmaW5lZCwgcGFkZGluZ0xlZnQ6IDQgfX0+XG4gICAgICAgICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgICAgICAgIGtleT17YCR7aXRlbS5pZH06b3RoZXJgfVxuICAgICAgICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIGN1c3RvbSgpfVxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgYW5vdGhlciBhbnN3ZXJcIlxuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU9e290aGVyQW5zd2VyKCl9XG4gICAgICAgICAgICAgICAgICAgIG9uU3VibWl0PXtzdWJtaXRPdGhlcn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgIDwvYm94PlxuICApXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCB1c2VJbnRlcnZhbCwgdXNlTW91c2UsIHVzZVJlc2l6ZSB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGFjY2VudCwgTVVURUQgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5mdW5jdGlvbiBFbXB0eUNsb3VkKHsgd2lkdGgsIGhlaWdodCwgdmVyc2lvbiB9KSB7XG4gIGNvbnN0IFtwaGFzZSwgc2V0UGhhc2VdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFt3YWtlLCBzZXRXYWtlXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgbGV0IHByZXZpb3VzID0gbnVsbFxuXG4gIHVzZU1vdXNlKChldmVudCkgPT4ge1xuICAgIGlmIChldmVudC5hY3Rpb24gIT09ICdtb3ZlJyAmJiBldmVudC5hY3Rpb24gIT09ICdkcmFnJykgcmV0dXJuXG4gICAgY29uc3QgeCA9IGV2ZW50LnhcbiAgICBjb25zdCB5ID0gZXZlbnQueVxuICAgIGlmICh4IDwgMCB8fCB4ID49IHdpZHRoIHx8IHkgPCAwIHx8IHkgPj0gaGVpZ2h0KSByZXR1cm5cbiAgICBjb25zdCBkeCA9IHByZXZpb3VzID8geCAtIHByZXZpb3VzLnggOiAwXG4gICAgY29uc3QgZHkgPSBwcmV2aW91cyA/IHkgLSBwcmV2aW91cy55IDogMFxuICAgIHByZXZpb3VzID0geyB4LCB5IH1cbiAgICBjb25zdCBzcGVlZCA9IE1hdGguaHlwb3QoZHggKiAwLjUsIGR5KVxuICAgIGlmIChzcGVlZCA9PT0gMCkgcmV0dXJuXG4gICAgc2V0V2FrZShwb2ludHMgPT4gWy4uLnBvaW50cy5zbGljZSgtMjApLCB7IHgsIHksIGR4LCBkeSwgc3BlZWQ6IE1hdGgubWluKDQsIHNwZWVkKSwgYWdlOiAwIH1dKVxuICB9KVxuXG4gIHVzZUludGVydmFsKCgpID0+IHtcbiAgICBzZXRQaGFzZSh2YWx1ZSA9PiB2YWx1ZSArIDAuMTYpXG4gICAgc2V0V2FrZShwb2ludHMgPT4gcG9pbnRzLm1hcChwb2ludCA9PiAoeyAuLi5wb2ludCwgYWdlOiBwb2ludC5hZ2UgKyAxIH0pKS5maWx0ZXIocG9pbnQgPT4gcG9pbnQuYWdlIDwgMTgpKVxuICB9LCA5MClcblxuICBjb25zdCBnbHlwaHMgPSAnICAuLjo6KysqKlx1MjU5MVx1MjU5MidcbiAgY29uc3Qgcm93cyA9IFtdXG4gIGNvbnN0IGJhc2UgPSBhY2NlbnQoKVxuICBjb25zdCByZ2IgPSAvXiMoWzAtOWEtZl17Nn0pJC9pLmV4ZWMoYmFzZSlcbiAgY29uc3QgbmVpZ2hib3JpbmcgPSByZ2JcbiAgICA/IGAjJHtbXG4gICAgICBNYXRoLm1heCgwLCBwYXJzZUludChyZ2JbMV0uc2xpY2UoMCwgMiksIDE2KSAtIDE4KSxcbiAgICAgIE1hdGgubWluKDI1NSwgcGFyc2VJbnQocmdiWzFdLnNsaWNlKDIsIDQpLCAxNikgKyA4KSxcbiAgICAgIE1hdGgubWluKDI1NSwgcGFyc2VJbnQocmdiWzFdLnNsaWNlKDQsIDYpLCAxNikgKyAyNCksXG4gICAgXS5tYXAodmFsdWUgPT4gdmFsdWUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpfWBcbiAgICA6IGJhc2VcblxuICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgY29uc3Qgcm93ID0gW11cbiAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgIGNvbnN0IHAgPSBwaGFzZSgpXG4gICAgICBjb25zdCBicm9hZCA9IE1hdGguc2luKHggKiAwLjA4ICsgcCkgKyBNYXRoLnNpbih5ICogMC4yOSAtIHAgKiAwLjcpICsgTWF0aC5zaW4oKHggKyB5KSAqIDAuMDUgKyBwICogMC4zNSlcbiAgICAgIGNvbnN0IHdpc3BzID0gTWF0aC5zaW4oeCAqIDAuMTkgLSB5ICogMC4xMSAtIHAgKiAwLjU1KSArIE1hdGguc2luKHggKiAwLjAzICsgeSAqIDAuNDMgKyBwICogMC40KVxuICAgICAgY29uc3QgcG9ja2V0cyA9IE1hdGguc2luKHggKiAwLjMxICsgcCAqIDAuOCkgKiBNYXRoLnNpbih5ICogMC40NyAtIHAgKiAwLjMpXG4gICAgICBsZXQgYnJvYWREaXNwbGFjZW1lbnQgPSAwXG4gICAgICBsZXQgd2lzcERpc3BsYWNlbWVudCA9IDBcbiAgICAgIGxldCBpbnRlcmFjdGlvbiA9IDBcbiAgICAgIGZvciAoY29uc3QgcG9pbnQgb2Ygd2FrZSgpKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGguaHlwb3QocG9pbnQuZHggKiAwLjUsIHBvaW50LmR5KSB8fCAxXG4gICAgICAgIGNvbnN0IHV4ID0gcG9pbnQuZHggKiAwLjUgLyBsZW5ndGhcbiAgICAgICAgY29uc3QgdXkgPSBwb2ludC5keSAvIGxlbmd0aFxuICAgICAgICBjb25zdCByeCA9ICh4IC0gcG9pbnQueCkgKiAwLjVcbiAgICAgICAgY29uc3QgcnkgPSB5IC0gcG9pbnQueVxuICAgICAgICBjb25zdCBhbG9uZyA9IHJ4ICogdXggKyByeSAqIHV5XG4gICAgICAgIGNvbnN0IGFjcm9zcyA9IC1yeCAqIHV5ICsgcnkgKiB1eFxuICAgICAgICBjb25zdCB0cmFpbGluZyA9IGFsb25nIDw9IDIgJiYgYWxvbmcgPj0gLTE4IC0gcG9pbnQuc3BlZWQgKiAzXG4gICAgICAgIGlmICghdHJhaWxpbmcpIGNvbnRpbnVlXG4gICAgICAgIGNvbnN0IGFnZSA9IDEgLSBwb2ludC5hZ2UgLyAxOFxuICAgICAgICBjb25zdCB0cmFpbCA9IE1hdGguZXhwKC1NYXRoLnBvdygoYWxvbmcgKyA0ICsgcG9pbnQuYWdlICogMC4zNSkgLyAoNyArIHBvaW50LnNwZWVkICogMiksIDIpKVxuICAgICAgICBjb25zdCBjZW50ZXIgPSBNYXRoLmV4cCgtKGFjcm9zcyAqIGFjcm9zcykgLyA1KVxuICAgICAgICBjb25zdCBlZGdlcyA9IE1hdGguZXhwKC1NYXRoLnBvdyhNYXRoLmFicyhhY3Jvc3MpIC0gMy4yLCAyKSAvIDMpXG4gICAgICAgIGNvbnN0IGZvcmNlID0gYWdlICogdHJhaWwgKiAoMC41ICsgcG9pbnQuc3BlZWQgKiAwLjQ1KVxuICAgICAgICBjb25zdCByYWRpYWxEaXN0YW5jZSA9IE1hdGguc3FydChyeCAqIHJ4ICsgcnkgKiByeSlcbiAgICAgICAgY29uc3QgcmlwcGxlRW52ZWxvcGUgPSBNYXRoLmV4cCgtKHJhZGlhbERpc3RhbmNlICogcmFkaWFsRGlzdGFuY2UpIC8gKDM1ICsgcG9pbnQuc3BlZWQgKiAxMikpXG4gICAgICAgIGNvbnN0IHJpcHBsZSA9IE1hdGguc2luKHJhZGlhbERpc3RhbmNlICogMS4zNSAtIHBvaW50LmFnZSAqIDAuNzUpICogcmlwcGxlRW52ZWxvcGUgKiBhZ2VcbiAgICAgICAgd2lzcERpc3BsYWNlbWVudCArPSAoZWRnZXMgKiAwLjkgLSBjZW50ZXIpICogZm9yY2UgKiAxLjUgKyByaXBwbGUgKiAoMS4yICsgcG9pbnQuc3BlZWQgKiAwLjI1KVxuICAgICAgICBicm9hZERpc3BsYWNlbWVudCArPSAoZWRnZXMgKiAwLjQ1IC0gY2VudGVyICogMC4zNSkgKiBmb3JjZSAqIDAuNTUgKyByaXBwbGUgKiAwLjI1XG4gICAgICAgIGludGVyYWN0aW9uID0gTWF0aC5tYXgoaW50ZXJhY3Rpb24sIE1hdGguYWJzKHJpcHBsZSkgKiAoMC41ICsgcG9pbnQuc3BlZWQgKiAwLjE1KSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbHVlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgKFxuICAgICAgICBicm9hZCArIGJyb2FkRGlzcGxhY2VtZW50ICsgKHdpc3BzICsgd2lzcERpc3BsYWNlbWVudCkgKiAwLjY1ICsgcG9ja2V0cyAqIDAuOCArIDMuMlxuICAgICAgKSAvIDcuNCkpXG4gICAgICBjb25zdCBpbmRleCA9IE1hdGgubWluKGdseXBocy5sZW5ndGggLSAxLCBNYXRoLmZsb29yKHZhbHVlICogZ2x5cGhzLmxlbmd0aCkpXG4gICAgICByb3cucHVzaCh7IGdseXBoOiBnbHlwaHNbaW5kZXhdLCBjb2xvcjogaW50ZXJhY3Rpb24gPiAwLjE2ID8gbmVpZ2hib3JpbmcgOiBiYXNlLCBkaW06IGluZGV4IDwgOCB9KVxuICAgIH1cbiAgICByb3dzLnB1c2gocm93KVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSB9fT5cbiAgICAgIHtyb3dzLm1hcCgocm93LCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaSA9PT0gMSA/ICdwaWNvJyA6IGkgPT09IDIgPyBgdiR7dmVyc2lvbn1gIDogJydcbiAgICAgICAgY29uc3QgaW5CcmFuZEJveCA9IGkgPj0gMSAmJiBpIDw9IDJcbiAgICAgICAgY29uc3QgYm94U3RhcnQgPSAxXG4gICAgICAgIGNvbnN0IGJveFdpZHRoID0gYHYke3ZlcnNpb259YC5sZW5ndGggKyAyXG4gICAgICAgIGNvbnN0IGNsb3VkID0gKGNlbGxzKSA9PiBjZWxscy5tYXAoKGNlbGwsIHgpID0+IChcbiAgICAgICAgICA8dGV4dCBrZXk9e3h9IHN0eWxlPXt7IGNvbG9yOiBjZWxsLmNvbG9yLCBkaW06IGNlbGwuZGltIH19PntjZWxsLmdseXBofTwvdGV4dD5cbiAgICAgICAgKSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Ym94IGtleT17aX0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMSwgb3ZlcmZsb3c6ICdjbGlwJyB9fT5cbiAgICAgICAgICAgIHtpbkJyYW5kQm94ICYmIGNsb3VkKHJvdy5zbGljZSgwLCBib3hTdGFydCkpfVxuICAgICAgICAgICAge2luQnJhbmRCb3ggJiYgKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiBib3hXaWR0aCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAge2xhYmVsICYmIDx0ZXh0IHN0eWxlPXt7IGJvbGQ6IGkgPT09IDEsIGNvbG9yOiBpID09PSAxID8gYWNjZW50KCkgOiBNVVRFRCB9fT57bGFiZWx9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2Nsb3VkKHJvdy5zbGljZShpbkJyYW5kQm94ID8gYm94U3RhcnQgKyBib3hXaWR0aCA6IDApKX1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVtcHR5U3RhdGUoeyB2ZXJzaW9uLCBjbG91ZHMgPSBmYWxzZSB9KSB7XG4gIGNvbnN0IFtzaXplLCBzZXRTaXplXSA9IGNyZWF0ZVNpZ25hbCh7IHdpZHRoOiBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIHx8IDgwLCBoZWlnaHQ6IHByb2Nlc3Muc3Rkb3V0LnJvd3MgfHwgMjQgfSlcbiAgdXNlUmVzaXplKHNldFNpemUpXG4gIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgc2l6ZSgpLndpZHRoKVxuICBjb25zdCBoZWlnaHQgPSBNYXRoLm1heCgxLCBzaXplKCkuaGVpZ2h0IC0gNClcbiAgaWYgKCFjbG91ZHMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBib2xkOiB0cnVlLCBjb2xvcjogYWNjZW50KCkgfX0+eycgIHBpY28nfTwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICB2JHt2ZXJzaW9ufWB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aCwgaGVpZ2h0IH19PlxuICAgICAgPEVtcHR5Q2xvdWQgd2lkdGg9e3dpZHRofSBoZWlnaHQ9e2hlaWdodH0gdmVyc2lvbj17dmVyc2lvbn0gLz5cbiAgICA8L2JveD5cbiAgKVxufVxuXG4iLCAiaW1wb3J0IHsgTWFya2Rvd24sIFNjcm9sbEJveCwgdXNlSW5wdXQgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBhY2NlbnQsIE1VVEVEIH0gZnJvbSAnLi90aGVtZS5qcydcblxuY29uc3QgSEVMUF9URVhUID0gKGNvbW1hbmRzKSA9PiBgcGljbyBpcyBhIGNvZGluZyBhZ2VudCBpbiB5b3VyIHRlcm1pbmFsLiBJdCByZWFkcywgZWRpdHMsIGFuZCBzZWFyY2hlcyBmaWxlcywgcnVucyBjb21tYW5kcywgYW5kIHN0cmVhbXMgaXRzIHdvcmsgaW50byB0aGlzIHRyYW5zY3JpcHQuXG5cbiMjIENvbW1hbmRzXG5cblR5cGUgXFxgL1xcYCBpbiB0aGUgY29tcG9zZXIgdG8gZmlsdGVyIHRoZXNlIGFzIHlvdSB0eXBlLlxuXG4ke2NvbW1hbmRzLm1hcCgoYykgPT4gYC0gXFxgLyR7Yy5uYW1lfVxcYCAtICR7Yy5kZXNjfWApLmpvaW4oJ1xcbicpfVxuXG5Ud28ga2luZHMgb2YgdXNlci1kZWZpbmVkIGVudHJpZXMgam9pbiB0aGlzIG1lbnU6XG5cbi0gKipjb21tYW5kcyoqIChcXGB+Ly5waWNvL2NvbW1hbmRzLzxuYW1lPi5tZFxcYCBvciBcXGAucGljby9jb21tYW5kcy88bmFtZT4ubWRcXGApOiBwcm9tcHQgdGVtcGxhdGVzIHlvdSBpbnZva2UgYXMgXFxgLzxuYW1lPiBbYXJnc11cXGAuIFxcYCRBUkdVTUVOVFNcXGAgaW4gdGhlIGJvZHkgaXMgcmVwbGFjZWQgd2l0aCB3aGF0ZXZlciBmb2xsb3dzIHRoZSBjb21tYW5kOyB3aXRob3V0IGEgcGxhY2Vob2xkZXIsIGFyZ3MgYXJlIGFwcGVuZGVkLiBUaGUgbW9kZWwgbmV2ZXIgc2VlcyB0aGVzZSB1bnRpbCB5b3UgcnVuIG9uZS5cbi0gKipza2lsbHMqKiAoXFxgfi8ucGljby9za2lsbHMvPG5hbWU+L1NLSUxMLm1kXFxgIG9yIFxcYC5waWNvL3NraWxscy88bmFtZT4vU0tJTEwubWRcXGApOiBjYXBhYmlsaXRpZXMgd2l0aCBhIG5hbWUgYW5kIGRlc2NyaXB0aW9uLiBZb3UgY2FuIGludm9rZSB0aGVtIGxpa2UgY29tbWFuZHMsIGFuZCB0aGUgYWdlbnQgY2FuIGFsc28gZGlzY292ZXIgYW5kIGxvYWQgdGhlbSBpdHNlbGYgdmlhIHRoZSBza2lsbCB0b29sLlxuLSAqKnRvb2xzKiogKFxcYH4vLnBpY28vdG9vbHMvPG5hbWU+LmpzXFxgIG9yIFxcYC5waWNvL3Rvb2xzLzxuYW1lPi5qc1xcYCk6IEVTIG1vZHVsZXMgZGVmYXVsdC1leHBvcnRpbmcgXFxgeyBuYW1lLCBkZXNjcmlwdGlvbiwgc2NoZW1hLCBleGVjdXRlIH1cXGAgKG9yIGEgZmFjdG9yeSByZWNlaXZpbmcgXFxgeyBjd2QsIHJvb3QgfVxcYCkuIFRoZXkgam9pbiB0aGUgYWdlbnQncyB0b29sc2V0IGFuZCBhcmUgcmVzY2FubmVkIGV2ZXJ5IHR1cm4sIHNvIGVkaXRzIGFwcGx5IG9uIHRoZSBuZXh0IG1lc3NhZ2UuIEFzayB0aGUgYWdlbnQgdG8gYnVpbGQgb25lIGZvciB5b3U6IHRoZSBidWlsdC1pbiBcXGAvbmV3LXRvb2xcXGAgc2tpbGwgdGVhY2hlcyBpdCB0aGUgZm9ybWF0LlxuXG5JbiB0aGUgTUNQIHBhbmVsOiBlbnRlciBlbmFibGVzL2Rpc2FibGVzIGEgc2VydmVyIChkaXNhYmxlZCBpcyBzdGlja3kgYWNyb3NzIHJlc3RhcnRzIC0gY29uZmlnIGtlcHQsIG5vIGNvbm5lY3Rpb24sIG5vIHRvb2xzIG9mZmVyZWQgdG8gdGhlIG1vZGVsLCBwZXIgcHJvamVjdCksIFxcYHRcXGAgbGlzdHMgaXRzIHRvb2xzLCBcXGByXFxgIHJlY29ubmVjdHMsIFxcYGFcXGAgYWRkcywgXFxgY3RybCt4XFxgIHJlbW92ZXMgKHByZXNzIHR3aWNlKS4gVW5maWx0ZXJlZCBsaXN0cyAoZWZmb3J0LCByZXdpbmQgb3B0aW9ucywgTUNQKSBhbHNvIG1vdmUgd2l0aCBcXGBqXFxgL1xcYGtcXGAgYW5kIGp1bXAgd2l0aCBcXGBnXFxgL1xcYEdcXGAuXG5cbiMjIENvbXBvc2VyXG5cbi0gXFxgY3RybCt2XFxgOiBBdHRhY2ggY2xpcGJvYXJkIGltYWdlXG4tIFxcYGN0cmwrb1xcYDogQ2FwdHVyZSBzY3JlZW4gcmVnaW9uIChtYWNPUylcbi0gXFxgY3RybCtnXFxgOiBSZWNvcmQgKG1hY09TKVxuLSBcXGBlbnRlclxcYDogVHJhbnNjcmliZSByZWNvcmRpbmdcbi0gXFxgZXNjXFxgOiBDYW5jZWwgZGljdGF0aW9uXG5cbi0gXFxgZW50ZXJcXGAgc2VuZHM7IFxcYHNoaWZ0K2VudGVyXFxgIG9yIFxcYFxcXFw8ZW50ZXI+XFxgIGluc2VydHMgYSBuZXdsaW5lXG4tIFxcYEBcXGAgb3BlbnMgYSBmdXp6eSBmaWxlIHBpY2tlcjsgZW50ZXIgaW5zZXJ0cyB0aGUgc2VsZWN0ZWQgcGF0aFxuLSBkcmFnIGFuIGltYWdlIGZpbGUgaW50byB0aGUgdGVybWluYWwgdG8gYXR0YWNoIGl0OiBpdCBhcHBlYXJzIGlubGluZSBhcyBcXGBbSW1hZ2UgI05dXFxgLCBleGFjdGx5IHdoZXJlIHlvdXIgY3Vyc29yIGlzLCBzbyBpbWFnZXMgY2FuIHNpdCBiZXR3ZWVuIHNlbnRlbmNlczsgYmFja3NwYWNlIGFmdGVyIG9uZSByZW1vdmVzIHRoZSB3aG9sZSBhdHRhY2htZW50XG4tIFxcYHRhYlxcYCBjb21wbGV0ZXM6IFxcYC9zdW1tPHRhYj5cXGAgZmluaXNoZXMgdGhlIGNvbW1hbmQgbmFtZSBhbmQgY3ljbGVzIHRocm91Z2ggbWF0Y2hlcyBvbiByZXBlYXQ7IGFmdGVyIGFuIGFyZ3VtZW50IHNwYWNlIGl0IGNvbXBsZXRlcyB2YWx1ZXMgKFxcYC9tb2RlbCBmbGE8dGFiPlxcYCwgXFxgL2NvbG9yIDx0YWI+XFxgLCBcXGAvZWZmb3J0IDx0YWI+XFxgKSBhbmQgZmlsZSBwYXRocyBmb3Igc2tpbGxzIGFuZCBjb21tYW5kcy4gS2VlcCB0eXBpbmcgdG8gbmFycm93LCB0YWIgb3IgZW50ZXIgaW5zZXJ0c1xuLSBcXGB1cFxcYCBhbmQgXFxgZG93blxcYCBvbiBhbiBlbXB0eSBjb21wb3NlciByZWNhbGwgbWVzc2FnZXMgeW91IGFscmVhZHkgc2VudFxuLSBcXGBjdHJsK3JcXGAgb3BlbnMgcmV3aW5kIChzYW1lIGFzIFxcYC9yZXdpbmRcXGApOyBcXGAvaGlzdG9yeVxcYCBmdXp6eS1zZWFyY2hlcyB5b3VyIG9sZCBwcm9tcHRzIGFuZCBwdXRzIHRoZSBzZWxlY3RlZCBvbmUgYmFjayBpbiB0aGUgY29tcG9zZXJcbi0gXFxgY3RybCtzXFxgIG9wZW5zIHRoZSBzZXNzaW9uIHBpY2tlciAoc2FtZSBhcyBcXGAvcmVzdW1lXFxgKTsgXFxgY3RybCt0XFxgIG9wZW5zIHRoZSBtb2RlbCBwaWNrZXJcbi0gXFxgY3RybCtwXFxgIHN3aXRjaGVzIHByb2plY3RzOiBwaWNrIG9uZSBhbmQgcGljbyBqdW1wcyB0byBpdHMgbW9zdCByZWNlbnQgc2Vzc2lvbiwgY2hhbmdpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCB0b29scywgY29udGV4dCwgYW5kIE1DUCBzZXJ2ZXJzIHRvIG1hdGNoOyBcXGBjdHJsK3hcXGAgdHdpY2UgZGVsZXRlcyBhIHByb2plY3QncyBwaWNvIGhpc3RvcnkgKGFsbCBpdHMgc2Vzc2lvbnMgYW5kIG1lbW9yaWVzKTsgXFxgL25ld1xcYCBzdGFydHMgYSBmcmVzaCBzZXNzaW9uIGluIHRoZSBjdXJyZW50IHByb2plY3Rcbi0gXFxgY3RybCtiXFxgIGN5Y2xlcyB0aGlua2luZyBlZmZvcnQgKGRlZmF1bHQsIGxvdywgbWVkaXVtLCBoaWdoLCBtYXgpIG9uIG1vZGVscyB0aGF0IHN1cHBvcnQgaXQ7IFxcYC9lZmZvcnRcXGAgb3BlbnMgdGhlIGZ1bGwgcGlja2VyXG4tIGluc2lkZSBhIHNlYXJjaCBwYW5lbCwgXFxgY3RybCtzXFxgIGN5Y2xlcyB0aGUgc2NvcGUgaW5zdGVhZDogdGhpcyBzZXNzaW9uLCB0aGlzIHByb2plY3QsIG9yIGV2ZXJ5d2hlcmVcbi0gXFxgL3Jld2luZFxcYCByZXN0b3JlcyB0aGUgY29udmVyc2F0aW9uIHRvIGFuIGVhcmxpZXIgbWVzc2FnZTsgYSByZXdpbmQgY2FuIGJlIHVuZG9uZSB3aXRoIFxcYGN0cmwrelxcYFxuLSBtZXNzYWdlcyBzZW50IHdoaWxlIHRoZSBhZ2VudCBpcyByZXNwb25kaW5nIHF1ZXVlIHVwIGFib3ZlIHRoZSBjb21wb3NlciBhbmQgYXJlIGRlbGl2ZXJlZCBhcyBvbmUgbWVzc2FnZSB3aGVuIHRoZSB0dXJuIGZpbmlzaGVzOyBcXGB1cFxcYCBwdWxscyB0aGVtIGJhY2sgZm9yIGVkaXRpbmdcbi0gXFxgZXNjXFxgIGludGVycnVwdHMgYSBzdHJlYW1pbmcgcmVzcG9uc2UsIG9yIGNsZWFycyB0aGUgY29tcG9zZXIgd2hlbiBpZGxlXG5cbiMjIE1vdmluZyBhcm91bmRcblxuLSBcXGB0YWJcXGAgc3dpdGNoZXMgZm9jdXMgYmV0d2VlbiB0aGUgdHJhbnNjcmlwdCBhbmQgdGhlIGNvbXBvc2VyXG4tIHdpdGggdGhlIHRyYW5zY3JpcHQgZm9jdXNlZCwgXFxgdXBcXGAvXFxgZG93blxcYC9cXGBqXFxgL1xcYGtcXGAgc2Nyb2xsIGFuZCBcXGBnXFxgL1xcYEdcXGAganVtcCB0byB0aGUgZW5kc1xuLSBsb25nIHNlc3Npb25zIHJlbmRlciBvbmx5IHRoZSBuZXdlc3QgNTAgbWVzc2FnZXM7IHNjcm9sbGluZyB0byB0aGUgdmVyeSB0b3AgbG9hZHMgb2xkZXIgb25lcyBpbiBiYXRjaGVzICh0aGUgdG9wIGxpbmUgc2hvd3MgaG93IG1hbnkgYXJlIGhpZGRlbilcbi0gdGhlIG1vdXNlIHdoZWVsIHNjcm9sbHM7IGNsaWNrLWRyYWcgc2VsZWN0cyB0ZXh0IGFuZCBjb3BpZXMgaXQgb24gcmVsZWFzZVxuLSBcXGBjdHJsK2NcXGAgdHdpY2UgZXhpdHNcblxuIyMgU2hlbGxzXG5cblRoZSBhZ2VudCBjYW4gcnVuIGxvbmctbGl2ZWQgcHJvY2Vzc2VzIChkZXYgc2VydmVycywgd2F0Y2hlcnMpIHdpdGggXFxgYmFzaCBiYWNrZ3JvdW5kOiB0cnVlXFxgLCB0aGVuIHJlYWQgdGhlaXIgb3V0cHV0IGFuZCBzdG9wIHRoZW0gaXRzZWxmLiBTaGVsbHMgYXBwZWFyIGJlbG93IHRoZSBjb21wb3NlciBhbmQgcmVtYWluIHRoZXJlIGFmdGVyIGV4aXQ6IHRhYiBmb2N1c2VzIHRoZSBsaXN0LCBqL2sgbW92ZXMsIGVudGVyIG9wZW5zIHRoZSBjb21tYW5kIGFuZCBsaXZlIG91dHB1dCwgYW5kIFxcYGN0cmwreFxcYCBraWxscyBhIHJ1bm5pbmcgc2hlbGwgb3IgZGlzbWlzc2VzIGEgZmluaXNoZWQgb25lLiBXaGVuIGEgc2hlbGwgZXhpdHMgb24gaXRzIG93biwgdGhlIGFnZW50IGlzIG5vdGlmaWVkIGFuZCByZXNwb25kczsgc2hlbGxzIGRpZSB3aXRoIHBpY28sIGFuZCBxdWl0dGluZyB3YXJucyB5b3UgaWYgYW55IGFyZSBzdGlsbCB1cC5cblxuIyMgU3Vic2NyaXB0aW9uc1xuXG5cXGAvY29ubmVjdFxcYCBsaXN0cyBzdWJzY3JpcHRpb24gcHJvdmlkZXJzIHlvdSBjYW4gc2lnbiBpbiB3aXRoIGluc3RlYWQgb2YgQVBJIGtleXMuIE9wZW5BSSAoQ2hhdEdQVCAvIENvZGV4IHBsYW4pIHNpZ25zIGluIHRocm91Z2ggeW91ciBicm93c2VyIHZpYSBPQXV0aDsgdG9rZW5zIGFyZSBzdG9yZWQgaW4gXFxgfi8ucGljby9hdXRoLmpzb25cXGAgYW5kIHJlZnJlc2hlZCBhdXRvbWF0aWNhbGx5LCBzbyB5b3Ugc2lnbiBpbiBvbmNlLiBPbmNlIGNvbm5lY3RlZCwgY29kZXggbW9kZWxzIGFwcGVhciBpbiBcXGAvbW9kZWxcXGAsIGJpbGxlZCB0byB5b3VyIHBsYW4uIFxcYGRcXGAgaW4gdGhlIHBhbmVsIGRpc2Nvbm5lY3RzLlxuXG4jIyBNZW1vcnlcblxuVGhlIGFnZW50IHNhdmVzIGR1cmFibGUgZmFjdHMgd2l0aCB0aGUgcmVtZW1iZXIgdG9vbDogb25lIGZpbGUgcGVyIG1lbW9yeSB1bmRlciBcXGB+Ly5waWNvL21lbW9yeVxcYCAoZ2xvYmFsKSBvciB0aGUgcHJvamVjdCdzIGRpcmVjdG9yeSBpbiBcXGB+Ly5waWNvL3Byb2plY3RzXFxgLiBPbmx5IGEgb25lLWxpbmUgaW5kZXggaXMgaW4gaXRzIGNvbnRleHQ7IGl0IGxvYWRzIGEgc3BlY2lmaWMgbWVtb3J5IHdpdGggdGhlIHJlY2FsbCB0b29sIHdoZW4gcmVsZXZhbnQuIFxcYC9tZW1vcnlcXGAgbGlzdHMgZXZlcnl0aGluZyBpdCBrbm93cyB3aXRoIGEgY29udGVudCBwcmV2aWV3OiBcXGBjdHJsK3NcXGAgY3ljbGVzIHRoZSBzY29wZSBmaWx0ZXIgKGFsbCwgcHJvamVjdCwgZ2xvYmFsKSBhbmQgXFxgY3RybCt4XFxgIHR3aWNlIGZvcmdldHMgdGhlIHNlbGVjdGVkIG1lbW9yeS4gWW91IGNhbiBhbHNvIGFzayB0aGUgYWdlbnQgdG8gcmVtZW1iZXIsIGZvcmdldCwgb3IgY2xlYW4gdXAgaXRzIG1lbW9yaWVzIGluIHBsYWluIGxhbmd1YWdlLlxuXG4jIyBXYWtlLXVwc1xuXG5UaGUgYWdlbnQgY2FuIHNjaGVkdWxlIG9uZS10aW1lIHdha2UtdXBzIGZvciBpdHNlbGYgd2l0aCB0aGUgc2NoZWR1bGVfd2FrZXVwIHRvb2w6IGFmdGVyIHRoZSBkZWxheSBpdCByZWNlaXZlcyBpdHMgb3duIG5vdGUgYXMgYSBzeXN0ZW0gbm90aWZpY2F0aW9uIGFuZCBhY3RzIG9uIGl0LiBSZWN1cnJpbmcgbG9vcHMgYXJlIGp1c3QgdGhlIGFnZW50IHJlc2NoZWR1bGluZyBhdCB0aGUgZW5kIG9mIGVhY2ggd2FrZS11cC4gXFxgL3dha2V1cHNcXGAgbGlzdHMgcGVuZGluZyBvbmVzIHdpdGggbGl2ZSBjb3VudGRvd25zOyBlbnRlciBvciBcXGBjdHJsK3hcXGAgY2FuY2VscyAocHJlc3MgdHdpY2UpLiBBIFxcYFx1MjNGMCBOXFxgIGluIHRoZSBmb290ZXIgc2hvd3MgaG93IG1hbnkgYXJlIHBlbmRpbmcuIFdha2UtdXBzIGxpdmUgaW4gbWVtb3J5IGFuZCBhcmUgbG9zdCB3aGVuIHBpY28gZXhpdHMuXG5cbiMjIEFwcGVhcmFuY2VcblxucGljbyBwaWNrcyBhIGxpZ2h0IG9yIGRhcmsgcGFsZXR0ZSBhdCBzdGFydHVwIGJ5IGFza2luZyB0aGUgdGVybWluYWwgZm9yIGl0cyBiYWNrZ3JvdW5kIGNvbG9yIChPU0MgMTEpLCBzbyBpdCBtYXRjaGVzIHdoYXRldmVyIHRoZW1lIHlvdXIgdGVybWluYWwgdXNlcy4gXFxgL3RoZW1lXFxgIG9wZW5zIGEgcGlja2VyIHRoYXQgcHJldmlld3MgZWFjaCB0aGVtZSBhcyB5b3UgbW92ZSBhbmQgcGVyc2lzdHMgeW91ciBjaG9pY2UgaW4gXFxgfi8ucGljby9jb25maWcuanNvblxcYDsgXFxgL3RoZW1lIGxpZ2h0XFxgLCBcXGAvdGhlbWUgZGFya1xcYCwgb3IgXFxgL3RoZW1lIGF1dG9cXGAgYXBwbGllcyBvbmUgZGlyZWN0bHkuIFxcYC9jb2xvclxcYCB0aW50cyBhIHNpbmdsZSBzZXNzaW9uJ3MgYWNjZW50IGFuZCBpcyBpbmRlcGVuZGVudCBvZiB0aGUgcGFsZXR0ZS5cblxuIyMgQ29udGV4dFxuXG5waWNvIHJlYWRzIEFHRU5UUy5tZCBmaWxlcyBhdXRvbWF0aWNhbGx5OiBhIGdsb2JhbCBvbmUgZnJvbSB+Ly5waWNvLCB0aGVuIGV2ZXJ5IGFuY2VzdG9yIG9mIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgdXAgdG8gdGhlIGdpdCByb290LiBEZWVwZXIgZmlsZXMgd2luLiBBR0VOVFMubWQgZmlsZXMgaW4gc3ViZGlyZWN0b3JpZXMgbG9hZCBsYXppbHkgdGhlIGZpcnN0IHRpbWUgYSB0b29sIHRvdWNoZXMgdGhhdCBzdWJ0cmVlLiBJbiBhbnkgcHJvamVjdCBkaXJlY3Rvcnkgd2l0aG91dCBhbiBBR0VOVFMubWQsIGEgQ0xBVURFLm1kIGlzIGhvbm9yZWQgYXMgYSBmYWxsYmFjayBzbyBleGlzdGluZyByZXBvcyB3b3JrIHVuY2hhbmdlZDsgQUdFTlRTLm1kIGFsd2F5cyB3aW5zIHdoZW4gYm90aCBleGlzdCwgYW5kIHRoZSBmYWxsYmFjayBuZXZlciBhcHBsaWVzIHRvIHRoZSBnbG9iYWwgZmlsZS5cblxuU2Vzc2lvbnMgYXJlIHN0b3JlZCB1bmRlciB+Ly5waWNvIGFzIGpzb25sIGV2ZW50IGxvZ3M7IFxcYC9yZXN1bWVcXGAgZm9sZHMgb25lIGJhY2sgaW50byBleGFjdGx5IHRoaXMgdmlldy5cblxuXFxgL2NvbnRleHRcXGAgYnJlYWtzIGRvd24gd2hhdCB0aGUgbmV4dCByZXF1ZXN0IHdpbGwgY29udGFpbiAtIHN5c3RlbSBwcm9tcHQsIHRvb2wgc2NoZW1hcywgcHJvamVjdCBpbnN0cnVjdGlvbnMsIG1lbW9yeSBpbmRleCwgY29tcGFjdGlvbiBzdW1tYXJ5LCBhbmQgY29udmVyc2F0aW9uIC0gd2l0aCBhbiBlc3RpbWF0ZWQgc2l6ZSBmb3IgZWFjaCBwaWVjZSBuZXh0IHRvIHRoZSBwcm92aWRlci1tZWFzdXJlZCB0b3RhbC5cblxuVGhlIGZvb3RlcidzIFxcYGN0eCAlXFxgIHNob3dzIGhvdyBmdWxsIHRoZSBtb2RlbCdzIGNvbnRleHQgaXMuIEF0IDg1JSBwaWNvIGF1dG8tY29tcGFjdHM6IHRoZSBvbGRlciBjb252ZXJzYXRpb24gaXMgc3VtbWFyaXplZCBpbiBhIHN0cnVjdHVyZWQgZm9ybSwgdGhlIG1vc3QgcmVjZW50IHR1cm5zIGFyZSBrZXB0IHZlcmJhdGltLCBhbmQgdGhlIG1vZGVsIGlzIHRvbGQgd2hlcmUgdGhlIGZ1bGwgc2Vzc2lvbiBmaWxlIGxpdmVzIHNvIGl0IGNhbiByZWFkIGV4YWN0IGRldGFpbHMgYmFjayBvbiBkZW1hbmQuIE5vdGhpbmcgdmlzaWJsZSBjaGFuZ2VzIGluIHRoZSB0cmFuc2NyaXB0LCBhbmQgcmV3aW5kIHN0aWxsIHdvcmtzIGFjcm9zcyBpdC4gXFxgL2NvbXBhY3RcXGAgcnVucyBpdCBtYW51YWxseSBhbmQgdGFrZXMgb3B0aW9uYWwgZm9jdXMgaW5zdHJ1Y3Rpb25zIChcXGAvY29tcGFjdCBmb2N1cyBvbiB0aGUgQVBJIGNoYW5nZXNcXGApLiBTZXQgXFxgXCJhdXRvQ29tcGFjdFwiOiBmYWxzZVxcYCBpbiBcXGB+Ly5waWNvL2NvbmZpZy5qc29uXFxgIHRvIGRpc2FibGUgdGhlIGF1dG9tYXRpYyB0cmlnZ2VyLlxuXG4tLS1cblxuKmVzYyB0YWtlcyB5b3UgYmFjayB0byB0aGUgY29udmVyc2F0aW9uKmBcblxuZXhwb3J0IGZ1bmN0aW9uIEhlbHAoeyBjb21tYW5kcywgb25DbG9zZSB9KSB7XG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiAnMTAwJScsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT5waWNvICBoZWxwPC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5cdTIxOTFcdTIxOTMgc2Nyb2xsICBlc2MgYmFjazwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgIDxTY3JvbGxCb3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gZm9jdXNlZCBzY3JvbGxiYXI+XG4gICAgICAgIDxNYXJrZG93biB0ZXh0PXtIRUxQX1RFWFQoY29tbWFuZHMpfSBjb2RlQmc9e251bGx9IC8+XG4gICAgICA8L1Njcm9sbEJveD5cbiAgICA8L2JveD5cbiAgKVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7QUFBQSxTQUFTLGNBQWMsV0FBVyxlQUFlO0FBQ2pELFNBQVMsYUFBYSxlQUFlLGtCQUFrQjtBQUN2RCxTQUFTLHVCQUF1QjtBQUNoQyxTQUFTLDRCQUE0QjtBQUNyQyxTQUFTLGlCQUFpQix5QkFBeUI7QUFDbkQsU0FBUyxvQkFBb0I7QUFDN0IsU0FBUyxrQkFBa0I7QUFJM0IsU0FBUyxhQUFhLGFBQWEsT0FBTztBQUN4QyxRQUFNLFFBQVEsWUFBWSxRQUFRLFNBQVMsTUFBTSxLQUFLLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNuRSxTQUFPLE1BQU0sV0FBVyxPQUFPLE9BQU8sU0FBUyxPQUFPLE9BQU8sV0FBVztBQUMxRTtBQUVBLGVBQWUsWUFBWSxFQUFFLFdBQUFBLFlBQVcsTUFBTSxHQUFHO0FBQy9DLFFBQU0sTUFBTSxDQUFDLGFBQWFBLFdBQVUsU0FBUyxRQUFRO0FBQ3JELFFBQU0sbUJBQW1CLElB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QU0sR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQztBQUM1SCxLQUFLLFdBQVcsSUFBSTsiLAogICJuYW1lcyI6IFsicHJvdmlkZXJzIiwgImpvaW4iLCAibWFrZUV2ZW50IiwgInByb3ZpZGVycyIsICJjb25maWciLCAiYm9vdCIsICJydW5UdXJuIiwgInJlYWRDb25maWciLCAiY29uZmlnIiwgImZpbGVVUkxUb1BhdGgiLCAicmVhZENvbmZpZyIsICJTY3JvbGxCb3giLCAidXNlRm9jdXMiLCAidXNlTGF5b3V0IiwgInVzZUludGVydmFsIiwgImNyZWF0ZVNpZ25hbCIsICJob21lZGlyIiwgImNyZWF0ZVNpZ25hbCIsICJlYXNlIiwgInVzZUFuaW1hdGVkIiwgImhpZ2hsaWdodCIsICJ3aWR0aCIsICJmdXp6eVNjb3JlIiwgImpzeCIsICJjcmVhdGVTaWduYWwiLCAidXNlQW5pbWF0ZWQiLCAiZWFzZSIsICJ3aWR0aCIsICJ1c2VkIiwgInByb3ZpZGVycyIsICJuYW1lIiwgImpzeCIsICJqc3hzIiwgInVzZUxheW91dCIsICJ3aWR0aCIsICJ1c2VGb2N1cyIsICJjcmVhdGVTaWduYWwiLCAidXNlSW50ZXJ2YWwiLCAiaG9tZWRpciIsICJTY3JvbGxCb3giLCAicGVuZGluZyIsICJjcmVhdGVTaWduYWwiLCAiTWVudSIsICJCdXR0b24iLCAidXNlSW5wdXQiLCAiZnV6enlTY29yZSIsICJyYW5rRnV6enkiLCAianN4IiwgImpzeHMiLCAiY3JlYXRlU2lnbmFsIiwgInJhbmtGdXp6eSIsICJmdXp6eVNjb3JlIiwgInVzZUlucHV0IiwgIkJ1dHRvbiIsICJNZW51IiwgImhvbWVkaXIiLCAicGVuZGluZyIsICJmYWlsZWQiLCAicGVuZGluZyIsICJjYXB0dXJlUmVnaW9uIiwgInBlbmRpbmciLCAiZXhlY0ZpbGUiLCAibWtkdGVtcCIsICJleGlzdHNTeW5jIiwgInRtcGRpciIsICJqb2luIiwgImNyZWF0ZVNpZ25hbCIsICJ1c2VJbnRlcnZhbCIsICJNZW51IiwgIlNjcm9sbEJveCIsICJTcGlubmVyIiwgIlRleHRBcmVhIiwgInVzZUZvY3VzIiwgInVzZUhpdFRlc3QiLCAidXNlSW5wdXQiLCAidXNlTGF5b3V0IiwgInVzZU1vdXNlIiwgInVzZVJlc2l6ZSIsICJTRVNTSU9OX0NPTE9SUyIsICJmdXp6eVNjb3JlIiwgImNyZWF0ZVNpZ25hbCIsICJjcmVhdGVTaWduYWwiLCAidGhlbWUiLCAiY29tcGFjdE51bWJlciIsICJjcmVhdGVTaWduYWwiLCAiZWFzZSIsICJsaW5lYXIiLCAiU2Nyb2xsQm94IiwgInVzZUFuaW1hdGVkIiwgInVzZUlucHV0IiwgImpzeCIsICJqc3hzIiwgIm1peENvbG9yIiwgInVzZUFuaW1hdGVkIiwgImVhc2UiLCAibGluZWFyIiwgImZhaWxlZCIsICJjcmVhdGVTaWduYWwiLCAiU2Nyb2xsQm94IiwgInVzZUlucHV0IiwgImxhYmVsIiwgImNyZWF0ZVNpZ25hbCIsICJUZXh0SW5wdXQiLCAidXNlTGF5b3V0IiwgImpzeCIsICJqc3hzIiwgInVzZUxheW91dCIsICJjcmVhdGVTaWduYWwiLCAiVGV4dElucHV0IiwgImNyZWF0ZVNpZ25hbCIsICJCdXR0b24iLCAiVGV4dElucHV0IiwgInVzZUlucHV0IiwgImpzeCIsICJqc3hzIiwgImNyZWF0ZVNpZ25hbCIsICJpdGVtIiwgInVzZUlucHV0IiwgIkJ1dHRvbiIsICJUZXh0SW5wdXQiLCAiY3JlYXRlU2lnbmFsIiwgInVzZUludGVydmFsIiwgInVzZU1vdXNlIiwgImpzeCIsICJqc3hzIiwgIndpZHRoIiwgInZlcnNpb24iLCAiY3JlYXRlU2lnbmFsIiwgInVzZU1vdXNlIiwgInVzZUludGVydmFsIiwgIk1hcmtkb3duIiwgIlNjcm9sbEJveCIsICJ1c2VJbnB1dCIsICJqc3giLCAianN4cyIsICJ1c2VJbnB1dCIsICJTY3JvbGxCb3giLCAiTWFya2Rvd24iLCAianN4IiwgImpzeHMiLCAidXNlTGF5b3V0IiwgInVzZUlucHV0IiwgInVzZUhpdFRlc3QiLCAidXNlTW91c2UiLCAiY3JlYXRlU2lnbmFsIiwgImJvb3QiLCAidmVyc2lvbiIsICJ1c2VJbnRlcnZhbCIsICJ1c2VSZXNpemUiLCAid2lkdGgiLCAiZGVmYXVsdE1vZGVsIiwgImVsYXBzZWQiLCAiU0VTU0lPTl9DT0xPUlMiLCAiaG9tZWRpciIsICJhcm1lZCIsICJ1c2VGb2N1cyIsICJpdGVtcyIsICJyb3ciLCAiZnV6enlTY29yZSIsICJTY3JvbGxCb3giLCAiVGV4dEFyZWEiLCAiTWVudSIsICJwZW5kaW5nIiwgIlNwaW5uZXIiLCAiY29tcGFjdE51bWJlciIsICJqc3giLCAiaXNEZXZJbnN0YWxsIiwgInJ1blVwZGF0ZSIsICJmZXRjaExhdGVzdFZlcnNpb24iLCAibmV3ZXJWZXJzaW9uIiwgInJ1bkhlYWRsZXNzIiwgInJ1blNoZWxsIiwgInJlYWRDb25maWciLCAiZmlsZVVSTFRvUGF0aCJdCn0K
5588
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL21vZGVsLXJ1bnRpbWUuanMiLCAiLi4vc3JjL2hlYWRsZXNzLmpzIiwgIi4uL3NyYy9zaGVsbC5qcyIsICIuLi9zcmMvbWFpbi5qc3giLCAiLi4vc3JjL2NsaS1hcmdzLmpzIiwgIi4uL3NyYy91aS93b3Jrc3BhY2Utc2lkZWJhci5qc3giLCAiLi4vc3JjL3VpL3RoZW1lLmpzIiwgIi4uL3NyYy91aS9wYW5lbHMuanN4IiwgIi4uL3NyYy91aS9hbmltYXRlZC12YWx1ZS5qc3giLCAiLi4vc3JjL3VpL2NvbnRleHQtYmFyLmpzIiwgIi4uL3NyYy91aS93b3Jrc3BhY2Utc2lkZWJhci5qcyIsICIuLi9zcmMvdWkvYXBwLmpzeCIsICIuLi9zcmMvdWkvY29tcG9zZXItY29tbWFuZHMuanMiLCAiLi4vc3JjL3VpL2NvbW1hbmQtZm9ybS5qc3giLCAiLi4vc3JjL2RpY3RhdGlvbi10ZXh0LmpzIiwgIi4uL3NyYy9kaWN0YXRpb24uanMiLCAiLi4vc3JjL2NsaXBib2FyZC5qcyIsICIuLi9zcmMvdWkvY2xpcGJvYXJkLWlucHV0LmpzIiwgIi4uL3NyYy91aS9kaWN0YXRpb24taW5wdXQuanMiLCAiLi4vc3JjL3VpL3NjcmVlbi1jYXB0dXJlLWlucHV0LmpzIiwgIi4uL3NyYy9zY3JlZW4tY2FwdHVyZS5qcyIsICIuLi9zcmMvdWkvY29tcG9zZXItZmlsZXMuanMiLCAiLi4vc3JjL3VpL2RpY3RhdGlvbi1pbmRpY2F0b3IuanMiLCAiLi4vc3JjL3VpL2hpZ2hsaWdodC5qcyIsICIuLi9zcmMvdWkvdHJhbnNjcmlwdC5qc3giLCAiLi4vc3JjL3VpL3RyYW5zY3JpcHQtd2luZG93LmpzIiwgIi4uL3NyYy91aS9jb252ZXJzYXRpb24tc2VhcmNoLXZpZXcuanN4IiwgIi4uL3NyYy91aS9xdWVzdGlvbi1mb3JtLmpzeCIsICIuLi9zcmMvdWkvZW1wdHktc3RhdGUuanN4IiwgIi4uL3NyYy91aS9oZWxwLmpzeCJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgZGlzY292ZXJLZXlzLCBhcHBseUtleXMsIGtleUhpbnQgfSBmcm9tICdwaWNvY29kZS1jb3JlL2tleXMuanMnXG5pbXBvcnQgeyBsb2FkQ2F0YWxvZywgZXh0cmFjdE1vZGVscywgYWRob2NNb2RlbCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY2F0YWxvZy5qcydcbmltcG9ydCB7IGxvYWRDb2RleE1vZGVscyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29kZXgtbW9kZWxzLmpzJ1xuaW1wb3J0IHsgbG9hZE9wZW5Sb3V0ZXJNb2RlbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL29wZW5yb3V0ZXItbW9kZWxzLmpzJ1xuaW1wb3J0IHsgb3BlbmFpQ29ubmVjdGVkLCBvcGVuYWlDcmVkZW50aWFscyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvb3BlbmFpLWF1dGguanMnXG5pbXBvcnQgeyBkZWZhdWx0TW9kZWwgfSBmcm9tICdwaWNvY29kZS1jb3JlL21vZGVscy5qcydcbmltcG9ydCB7IGZ1enp5U2NvcmUgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Z1enp5LmpzJ1xuXG5jb25zdCBDQVRBTE9HX1BST1ZJREVSUyA9IFsnZ29vZ2xlJywgJ2FudGhyb3BpYycsICdvcGVuYWknLCAneGFpJ11cblxuZnVuY3Rpb24gY29kZXhDb250ZXh0KGNhdGFsb2dEYXRhLCBtb2RlbCkge1xuICBjb25zdCBlbnRyeSA9IGNhdGFsb2dEYXRhLm9wZW5haT8ubW9kZWxzPy5bbW9kZWwubmFtZS5zcGxpdCgnLycpWzFdXVxuICByZXR1cm4gbW9kZWwuY29udGV4dCA/PyBlbnRyeT8ubGltaXQ/LmlucHV0ID8/IGVudHJ5Py5saW1pdD8uY29udGV4dCA/PyBudWxsXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkTW9kZWxzKHsgcHJvdmlkZXJzLCBmb3JjZSB9KSB7XG4gIGNvbnN0IGhhcyA9IChwcm92aWRlcikgPT4gcHJvdmlkZXJzLmluY2x1ZGVzKHByb3ZpZGVyKVxuICBjb25zdCBjb2RleENyZWRlbnRpYWxzID0gaGFzKCdjb2RleCcpID8gYXdhaXQgb3BlbmFpQ3JlZGVudGlhbHMoKS5jYXRjaCgoKSA9PiBudWxsKSA6IG51bGxcbiAgY29uc3QgW2NhdGFsb2dEYXRhLCBjb2RleCwgb3BlbnJvdXRlcl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgbG9hZENhdGFsb2coeyBmb3JjZSB9KSxcbiAgICBsb2FkQ29kZXhNb2RlbHMoY29kZXhDcmVkZW50aWFscywgeyBmb3JjZSB9KSxcbiAgICBoYXMoJ29wZW5yb3V0ZXInKSA/IGxvYWRPcGVuUm91dGVyTW9kZWxzKHsgZm9yY2UgfSkgOiBbXSxcbiAgXSlcbiAgcmV0dXJuIFtcbiAgICAuLi5leHRyYWN0TW9kZWxzKGNhdGFsb2dEYXRhLCBDQVRBTE9HX1BST1ZJREVSUykubWFwKChtb2RlbCkgPT4gKHtcbiAgICAgIC4uLm1vZGVsLFxuICAgICAgYXZhaWxhYmxlOiBoYXMobW9kZWwucHJvdmlkZXIpLFxuICAgICAga2V5SGludDoga2V5SGludChtb2RlbC5wcm92aWRlciksXG4gICAgfSkpLFxuICAgIC4uLmNvZGV4Lm1hcCgobW9kZWwpID0+ICh7XG4gICAgICAuLi5tb2RlbCxcbiAgICAgIGNvbnRleHQ6IGNvZGV4Q29udGV4dChjYXRhbG9nRGF0YSwgbW9kZWwpLFxuICAgICAgYXZhaWxhYmxlOiBoYXMoJ2NvZGV4JyksXG4gICAgICBrZXlIaW50OiAnL2Nvbm5lY3QnLFxuICAgIH0pKSxcbiAgICAuLi5vcGVucm91dGVyLm1hcCgobW9kZWwpID0+ICh7IC4uLm1vZGVsLCBhdmFpbGFibGU6IHRydWUsIGtleUhpbnQ6IGtleUhpbnQoJ29wZW5yb3V0ZXInKSB9KSksXG4gIF1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRNb2RlbFJ1bnRpbWUoKSB7XG4gIGNvbnN0IGNoYXRncHQgPSBhd2FpdCBvcGVuYWlDb25uZWN0ZWQoKVxuICBjb25zdCBwcm92aWRlcnMgPSBbLi4uYXBwbHlLZXlzKGRpc2NvdmVyS2V5cygpKSwgLi4uKGNoYXRncHQgPyBbJ2NvZGV4J10gOiBbXSldXG4gIGNvbnN0IGNvZGV4Q3JlZGVudGlhbHMgPSBjaGF0Z3B0ID8gYXdhaXQgb3BlbmFpQ3JlZGVudGlhbHMoKS5jYXRjaCgoKSA9PiBudWxsKSA6IG51bGxcbiAgY29uc3QgbG9hZE1vZGVscyA9ICh7IGZvcmNlID0gZmFsc2UgfSA9IHt9KSA9PiBidWlsZE1vZGVscyh7IHByb3ZpZGVycywgZm9yY2UgfSlcbiAgcmV0dXJuIHsgcHJvdmlkZXJzLCBtb2RlbHM6IGF3YWl0IGxvYWRNb2RlbHMoKSwgY29kZXhDcmVkZW50aWFscywgbG9hZE1vZGVscyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTW9kZWwobW9kZWxzLCBwcm92aWRlcnMsIG5hbWUpIHtcbiAgaWYgKCFuYW1lKSByZXR1cm4gbnVsbFxuICBjb25zdCBleGFjdCA9IG1vZGVscy5maW5kKChtb2RlbCkgPT4gbW9kZWwubmFtZSA9PT0gbmFtZSlcbiAgaWYgKGV4YWN0KSByZXR1cm4gZXhhY3RcbiAgaWYgKG5hbWUuaW5jbHVkZXMoJy8nKSkgcmV0dXJuIGFkaG9jTW9kZWwobmFtZSwgcHJvdmlkZXJzKVxuICBjb25zdCBhdmFpbGFibGUgPSBtb2RlbHMuZmlsdGVyKChtb2RlbCkgPT4gbW9kZWwuYXZhaWxhYmxlICE9PSBmYWxzZSlcbiAgcmV0dXJuIGF2YWlsYWJsZVxuICAgICAgLm1hcCgobW9kZWwpID0+IFtmdXp6eVNjb3JlKG5hbWUsIG1vZGVsLm5hbWUpLCBtb2RlbF0pXG4gICAgICAuZmlsdGVyKChbc2NvcmVdKSA9PiBzY29yZSA+PSAwKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGJbMF0gLSBhWzBdKVswXT8uWzFdXG4gICAgfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0TW9kZWwoeyBtb2RlbHMsIHByb3ZpZGVycywgcmVxdWVzdGVkLCBjb25maWd1cmVkIH0pIHtcbiAgcmV0dXJuIHJlc29sdmVNb2RlbChtb2RlbHMsIHByb3ZpZGVycywgcmVxdWVzdGVkKVxuICAgIHx8IChjb25maWd1cmVkICYmIG1vZGVscy5maW5kKChtb2RlbCkgPT4gbW9kZWwubmFtZSA9PT0gY29uZmlndXJlZCAmJiBtb2RlbC5hdmFpbGFibGUpKVxuICAgIHx8IGRlZmF1bHRNb2RlbChtb2RlbHMpXG59XG4iLCAiaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCdcbmltcG9ydCB7IGZpbmRNb2RlbCwgdXNhZ2VDb3N0IH0gZnJvbSAncGljb2NvZGUtY29yZS9tb2RlbHMuanMnXG5pbXBvcnQgeyByZWFkQ29uZmlnIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb25maWcuanMnXG5pbXBvcnQgeyBidWlsZFByb2plY3RCb290IH0gZnJvbSAncGljb2NvZGUtY29yZS9ib290LmpzJ1xuaW1wb3J0IHsgY3JlYXRlU2hlbGxNYW5hZ2VyIH0gZnJvbSAncGljb2NvZGUtY29yZS9zaGVsbHMuanMnXG5pbXBvcnQgeyBjcmVhdGVTZXNzaW9uLCBvcGVuU2Vzc2lvbiwgbG9hZFNlc3Npb24sIG9uU2Vzc2lvbldyaXRlRXJyb3IgfSBmcm9tICdwaWNvY29kZS1jb3JlL3Nlc3Npb24uanMnXG5pbXBvcnQgeyBzZXNzaW9uc0RpciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvcGF0aHMuanMnXG5pbXBvcnQgeyBtYWtlRXZlbnQgfSBmcm9tICdwaWNvY29kZS1jb3JlL2V2ZW50cy5qcydcbmltcG9ydCB7IGRlcml2ZVN0YXRlIH0gZnJvbSAncGljb2NvZGUtY29yZS9kZXJpdmUuanMnXG5pbXBvcnQgeyBjcmVhdGVUb29sc2V0IH0gZnJvbSAncGljb2NvZGUtY29yZS90b29scy9pbmRleC5qcydcbmltcG9ydCB7IHJ1blR1cm4gfSBmcm9tICdwaWNvY29kZS1jb3JlL2FnZW50LmpzJ1xuaW1wb3J0IHsgYnVpbGRTeXN0ZW1Qcm9tcHQgfSBmcm9tICdwaWNvY29kZS1jb3JlL3N5c3RlbS1wcm9tcHQuanMnXG5pbXBvcnQgeyBtZW1vcnlJbmRleCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvbWVtb3J5LmpzJ1xuaW1wb3J0IHsgZmluYWxpemVVc2VyQ29udGVudCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYXR0YWNobWVudHMuanMnXG5pbXBvcnQgeyBsb2FkTW9kZWxSdW50aW1lLCBzZWxlY3RNb2RlbCB9IGZyb20gJy4vbW9kZWwtcnVudGltZS5qcydcblxuYXN5bmMgZnVuY3Rpb24gcmVhZFN0ZGluKCkge1xuICBpZiAocHJvY2Vzcy5zdGRpbi5pc1RUWSkgcmV0dXJuICcnXG4gIGxldCBkYXRhID0gJydcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBwcm9jZXNzLnN0ZGluKSB7XG4gICAgZGF0YSArPSBjaHVua1xuICAgIGlmIChkYXRhLmxlbmd0aCA+IDQwMDAwMCkgYnJlYWtcbiAgfVxuICByZXR1cm4gZGF0YS5zbGljZSgwLCA0MDAwMDApXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5IZWFkbGVzcyhvcHRzKSB7XG4gIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KClcbiAgY29uc3QgbG9nID0gb3B0cy5xdWlldCA/ICgpID0+IHt9IDogKGxpbmUpID0+IHByb2Nlc3Muc3RkZXJyLndyaXRlKGxpbmUgKyAnXFxuJylcblxuICBvblNlc3Npb25Xcml0ZUVycm9yKChlcnIsIGZpbGUpID0+IHByb2Nlc3Muc3RkZXJyLndyaXRlKGBwaWNvOiBjb3VsZCBub3Qgd3JpdGUgJHtmaWxlfTogJHtlcnIubWVzc2FnZX1cXG5gKSlcblxuICBjb25zdCB7IHByb3ZpZGVycywgbW9kZWxzLCBjb2RleENyZWRlbnRpYWxzOiBjb2RleENyZWRzIH0gPSBhd2FpdCBsb2FkTW9kZWxSdW50aW1lKClcbiAgaWYgKHByb3ZpZGVycy5sZW5ndGggPT09IDApIHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZSgncGljbzogbm8gY3JlZGVudGlhbHMgZm91bmQgKHNldCBhIHByb3ZpZGVyIGtleSBvciBydW4gcGljbyAtLWNvbm5lY3QpXFxuJylcbiAgICByZXR1cm4gMVxuICB9XG4gIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHJlYWRDb25maWcoKVxuXG4gIGNvbnN0IG1vZGVsID0gc2VsZWN0TW9kZWwoeyBtb2RlbHMsIHByb3ZpZGVycywgcmVxdWVzdGVkOiBvcHRzLm1vZGVsLCBjb25maWd1cmVkOiBjb25maWcuZGVmYXVsdE1vZGVsIH0pXG4gIGlmICghbW9kZWwgfHwgbW9kZWwuYXZhaWxhYmxlID09PSBmYWxzZSkge1xuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBwaWNvOiBubyB1c2FibGUgbW9kZWwke29wdHMubW9kZWwgPyBgIG1hdGNoaW5nIFwiJHtvcHRzLm1vZGVsfVwiYCA6ICcnfVxcbmApXG4gICAgcmV0dXJuIDFcbiAgfVxuICBpZiAob3B0cy5zcGVlZCA9PT0gJ2Zhc3QnICYmICFtb2RlbC5zcGVlZCkge1xuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBwaWNvOiAke21vZGVsLm5hbWV9IGRvZXMgbm90IHN1cHBvcnQgc3BlZWQgY29udHJvbFxcbmApXG4gICAgcmV0dXJuIDFcbiAgfVxuICBjb25zdCBlZmZvcnQgPSBvcHRzLmVmZm9ydCA/PyAobW9kZWwuZWZmb3J0ID8gJ2F1dG8nIDogbnVsbClcblxuICBjb25zdCBib290ID0gYXdhaXQgYnVpbGRQcm9qZWN0Qm9vdChwcm9jZXNzLmN3ZCgpKVxuICBhd2FpdCBQcm9taXNlLnJhY2UoW2Jvb3QubWNwLmNvbm5lY3RBbGwoKSwgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgMTAwMDApKV0pXG4gIGNvbnN0IHNoZWxscyA9IGNyZWF0ZVNoZWxsTWFuYWdlcigpXG5cbiAgbGV0IHNlc3Npb25cbiAgbGV0IGV2ZW50cyA9IFtdXG4gIGlmIChvcHRzLnJlc3VtZSkge1xuICAgIGNvbnN0IGZpbGUgPSBvcHRzLnJlc3VtZS5pbmNsdWRlcygnLycpID8gb3B0cy5yZXN1bWUgOiBqb2luKHNlc3Npb25zRGlyKGJvb3Qucm9vdCksIGAke29wdHMucmVzdW1lfS5qc29ubGApXG4gICAgY29uc3QgbG9hZGVkID0gYXdhaXQgbG9hZFNlc3Npb24oZmlsZSlcbiAgICBzZXNzaW9uID0gb3BlblNlc3Npb24oeyBmaWxlLCBoZWFkZXI6IGxvYWRlZC5oZWFkZXIgfSlcbiAgICBldmVudHMgPSBsb2FkZWQuZXZlbnRzXG4gIH0gZWxzZSB7XG4gICAgc2Vzc2lvbiA9IGNyZWF0ZVNlc3Npb24oeyBjd2Q6IGJvb3QuY3dkLCByb290OiBib290LnJvb3QgfSlcbiAgfVxuXG4gIGNvbnN0IHBlcnNpc3QgPSAoZXZlbnQpID0+IHtcbiAgICBldmVudHMucHVzaChldmVudClcbiAgICBzZXNzaW9uLmFwcGVuZChldmVudClcbiAgICBpZiAob3B0cy5zdHJlYW1Kc29uKSBwcm9jZXNzLnN0ZG91dC53cml0ZShKU09OLnN0cmluZ2lmeShldmVudCkgKyAnXFxuJylcbiAgfVxuXG4gIGNvbnN0IHJlc3RvcmVkU3BlZWQgPSBkZXJpdmVTdGF0ZShldmVudHMpLnNwZWVkXG4gIGNvbnN0IHNwZWVkID0gbW9kZWwuc3BlZWQgPyAob3B0cy5zcGVlZCA/PyAob3B0cy5yZXN1bWUgPyByZXN0b3JlZFNwZWVkID8/ICdzdGFuZGFyZCcgOiBjb25maWcuc3BlZWREZWZhdWx0cz8uW21vZGVsLm5hbWVdKSA/PyAnc3RhbmRhcmQnKSA6ICdzdGFuZGFyZCdcbiAgcGVyc2lzdChtYWtlRXZlbnQoJ3NwZWVkJywgeyB0bzogc3BlZWQgfSkpXG5cbiAgY29uc3Qgc3RkaW5EYXRhID0gYXdhaXQgcmVhZFN0ZGluKClcbiAgY29uc3QgcHJvbXB0VGV4dCA9IHN0ZGluRGF0YSA/IGAke29wdHMucHJvbXB0fVxcblxcbltwaXBlZCBpbnB1dF1cXG4ke3N0ZGluRGF0YX1gIDogb3B0cy5wcm9tcHRcbiAgY29uc3QgeyBjb250ZW50IH0gPSBmaW5hbGl6ZVVzZXJDb250ZW50KHByb21wdFRleHQsIG5ldyBNYXAoKSlcbiAgcGVyc2lzdChtYWtlRXZlbnQoJ21lc3NhZ2UnLCB7IG1lc3NhZ2U6IHsgcm9sZTogJ3VzZXInLCBjb250ZW50IH0gfSkpXG5cbiAgY29uc3QgZGVyaXZlZCA9IGRlcml2ZVN0YXRlKGV2ZW50cylcbiAgY29uc3QgbG9hZGVkQmVmb3JlID0gbmV3IFNldChib290LnRyYWNrZXIubG9hZGVkKVxuICBjb25zdCB7IHRvb2xzLCByZWNvcmRlciB9ID0gY3JlYXRlVG9vbHNldCh7XG4gICAgY3dkOiBib290LmN3ZCxcbiAgICB0cmFja2VyOiBib290LnRyYWNrZXIsXG4gICAgc2tpbGxzOiBib290LnNraWxscyxcbiAgICBzaGVsbHMsXG4gICAgbWVtb3J5OiBib290Lm1lbW9yeSxcbiAgICBtY3BUb29sczogYm9vdC5tY3AudG9vbHMoKSxcbiAgICB1c2VyVG9vbHM6IFtdLFxuICAgIG1heFRvb2xDYWxsczogb3B0cy5tYXhUb29sQ2FsbHMgPz8gNTAsXG4gIH0pXG5cbiAgbGV0IGF1dGggPSBudWxsXG4gIGlmIChtb2RlbC5wcm92aWRlciA9PT0gJ2NvZGV4Jykge1xuICAgIGF1dGggPSBjb2RleENyZWRzXG4gICAgaWYgKCFhdXRoKSB7XG4gICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZSgncGljbzogY29kZXggbW9kZWxzIG5lZWQgYSBDaGF0R1BUIHNpZ24taW4gKHJ1biBwaWNvIC0tY29ubmVjdClcXG4nKVxuICAgICAgYXdhaXQgc2Vzc2lvbi5mbHVzaCgpXG4gICAgICByZXR1cm4gMVxuICAgIH1cbiAgfVxuXG4gIGxvZyhgcGljbyAgJHttb2RlbC5uYW1lfSR7bW9kZWwuc3BlZWQgJiYgc3BlZWQgPT09ICdmYXN0JyA/ICcgIEZhc3QnIDogJyd9JHtlZmZvcnQgPyBgICAke2VmZm9ydH1gIDogJyd9ICBzZXNzaW9uICR7c2Vzc2lvbi5pZH1gKVxuICBsZXQgdGhvdWdodHMgPSAnJ1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBydW5UdXJuKHtcbiAgICBoaXN0b3J5OiBkZXJpdmVkLnByb3ZpZGVySGlzdG9yeSxcbiAgICB0b29scyxcbiAgICByZWNvcmRlcixcbiAgICBtb2RlbE5hbWU6IG1vZGVsLm5hbWUsXG4gICAgZWZmb3J0LFxuICAgIC4uLihtb2RlbC5wcm92aWRlciA9PT0gJ2NvZGV4JyAmJiB7IHNwZWVkIH0pLFxuICAgIGF1dGgsXG4gICAgc3lzdGVtOiBidWlsZFN5c3RlbVByb21wdCh7XG4gICAgICBjd2Q6IGJvb3QuY3dkLFxuICAgICAgY29udGV4dEZpbGVzOiBib290LnN0YXJ0dXBDb250ZXh0LmZpbGVzLFxuICAgICAgc2tpbGxzOiBib290LnNraWxscy5saXN0KCksXG4gICAgICBtZW1vcnlJbmRleFRleHQ6IG1lbW9yeUluZGV4KGF3YWl0IGJvb3QubWVtb3J5Lmxpc3QoKS5jYXRjaCgoKSA9PiBbXSksIGJvb3Qucm9vdCksXG4gICAgfSksXG4gICAgb25TdHJlYW06IChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICd0aGlua2luZycpIHRob3VnaHRzICs9IGV2ZW50LmNvbnRlbnRcbiAgICAgIGlmIChldmVudC50eXBlID09PSAndG9vbF9jb21wbGV0ZScpIHtcbiAgICAgICAgY29uc3QgZW50cnkgPSByZWNvcmRlci5lbnRyaWVzLmF0KC0xKVxuICAgICAgICBsb2coYCAgXHUyNzEzICR7ZW50cnk/Lm5hbWUgPz8gZXZlbnQuY2FsbC5mdW5jdGlvbi5uYW1lfSAgJHtlbnRyeT8udGl0bGUgPz8gJyd9YClcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC50eXBlID09PSAndG9vbF9lcnJvcicpIGxvZyhgICBcdTI3MTcgJHtldmVudC5jYWxsLmZ1bmN0aW9uLm5hbWV9ICAke2V2ZW50LmVycm9yLnNsaWNlKDAsIDEyMCl9YClcbiAgICB9LFxuICB9KVxuXG4gIGlmICh0aG91Z2h0cykgcGVyc2lzdChtYWtlRXZlbnQoJ3Rob3VnaHRzJywgeyB0ZXh0OiB0aG91Z2h0cyB9KSlcbiAgZm9yIChjb25zdCBtZXNzYWdlIG9mIHJlc3VsdC5tZXNzYWdlcykgcGVyc2lzdChtYWtlRXZlbnQoJ21lc3NhZ2UnLCB7IG1lc3NhZ2UgfSkpXG4gIGZvciAoY29uc3QgZW50cnkgb2YgcmVjb3JkZXIuZW50cmllcykgcGVyc2lzdChtYWtlRXZlbnQoJ3Rvb2xfbWV0YScsIGVudHJ5KSlcbiAgZm9yIChjb25zdCBwYXRoIG9mIGJvb3QudHJhY2tlci5sb2FkZWQpIHtcbiAgICBpZiAoIWxvYWRlZEJlZm9yZS5oYXMocGF0aCkpIHBlcnNpc3QobWFrZUV2ZW50KCdjb250ZXh0X2ZpbGUnLCB7IHBhdGggfSkpXG4gIH1cbiAgaWYgKHJlc3VsdC51c2FnZSkgcGVyc2lzdChtYWtlRXZlbnQoJ3VzYWdlJywgeyBtb2RlbDogbW9kZWwubmFtZSwgdXNhZ2U6IHJlc3VsdC51c2FnZSwgbGFzdFByb21wdDogcmVzdWx0Lmxhc3RQcm9tcHRUb2tlbnMgfSkpXG4gIGlmIChyZXN1bHQuaW50ZXJydXB0ZWQpIHBlcnNpc3QobWFrZUV2ZW50KCdpbnRlcnJ1cHQnLCB7fSkpXG5cbiAgY29uc3QgcnVubmluZyA9IHNoZWxscy5ydW5uaW5nKClcbiAgaWYgKHJ1bm5pbmcgPiAwKSBsb2coYCAga2lsbGluZyAke3J1bm5pbmd9IGJhY2tncm91bmQgc2hlbGwke3J1bm5pbmcgPT09IDEgPyAnJyA6ICdzJ31gKVxuICBzaGVsbHMua2lsbEFsbCgpXG4gIGF3YWl0IGJvb3QubWNwLmNsb3NlQWxsKCkuY2F0Y2goKCkgPT4ge30pXG4gIC8vIHRoZSBjYWxsZXIgZXhpdHMgdGhlIHByb2Nlc3MgdGhlIG1vbWVudCB0aGlzIHJldHVybnMsIHdoaWNoIHdvdWxkIGRpc2NhcmRcbiAgLy8gZXZlcnkgYXBwZW5kIHN0aWxsIGluIGZsaWdodFxuICBhd2FpdCBzZXNzaW9uLmZsdXNoKClcblxuICBjb25zdCB0ZXh0ID0gcmVzdWx0Lm1lc3NhZ2VzLmZpbHRlcigobSkgPT4gbS5yb2xlID09PSAnYXNzaXN0YW50JyAmJiB0eXBlb2YgbS5jb250ZW50ID09PSAnc3RyaW5nJyAmJiBtLmNvbnRlbnQpLmF0KC0xKT8uY29udGVudCA/PyAnJ1xuICBjb25zdCBzdW1tYXJ5ID0ge1xuICAgIHRleHQsXG4gICAgc2Vzc2lvbjogc2Vzc2lvbi5pZCxcbiAgICBzZXNzaW9uRmlsZTogc2Vzc2lvbi5maWxlLFxuICAgIG1vZGVsOiBtb2RlbC5uYW1lLFxuICAgIHVzYWdlOiByZXN1bHQudXNhZ2UsXG4gICAgY29zdDogdXNhZ2VDb3N0KGZpbmRNb2RlbChtb2RlbHMsIG1vZGVsLm5hbWUpLCByZXN1bHQudXNhZ2UpLFxuICAgIHRvb2xDYWxsczogcmVjb3JkZXIuZW50cmllcy5sZW5ndGgsXG4gICAgaW50ZXJydXB0ZWQ6IHJlc3VsdC5pbnRlcnJ1cHRlZCxcbiAgICBkdXJhdGlvbk1zOiBEYXRlLm5vdygpIC0gc3RhcnRlZEF0LFxuICB9XG5cbiAgaWYgKG9wdHMuanNvbikgcHJvY2Vzcy5zdGRvdXQud3JpdGUoSlNPTi5zdHJpbmdpZnkoc3VtbWFyeSkgKyAnXFxuJylcbiAgZWxzZSBpZiAob3B0cy5zdHJlYW1Kc29uKSBwcm9jZXNzLnN0ZG91dC53cml0ZShKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICdyZXN1bHQnLCAuLi5zdW1tYXJ5LCB0ZXh0OiB1bmRlZmluZWQsIGF0OiBEYXRlLm5vdygpIH0pICsgJ1xcbicpXG4gIGVsc2UgcHJvY2Vzcy5zdGRvdXQud3JpdGUodGV4dCArICdcXG4nKVxuXG4gIHJldHVybiByZXN1bHQuaW50ZXJydXB0ZWQgPyAxIDogMFxufVxuIiwgImltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSAnbm9kZTpwYXRoJ1xuaW1wb3J0IHsgcnVuVHVybiB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYWdlbnQuanMnXG5pbXBvcnQgeyByZWFkQ29uZmlnIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb25maWcuanMnXG5pbXBvcnQgeyBsb2FkTW9kZWxSdW50aW1lLCBzZWxlY3RNb2RlbCB9IGZyb20gJy4vbW9kZWwtcnVudGltZS5qcydcblxuY29uc3QgU1lTVEVNID0gKHsgcGxhdGZvcm0sIHNoZWxsLCBjd2QgfSkgPT4gYEdlbmVyYXRlIGV4YWN0bHkgb25lIHNoZWxsIGNvbW1hbmQgdGhhdCBzYXRpc2ZpZXMgdGhlIHVzZXIncyByZXF1ZXN0LiBUaGUgb3V0cHV0IG11c3QgYmUgYSB2YWxpZCBzaGVsbCBjb21tYW5kIHdpdGhvdXQgTWFya2Rvd24gZm9ybWF0dGluZy4gSWYgbXVsdGlwbGUgc3RlcHMgYXJlIHJlcXVpcmVkLCB0cnkgdG8gY29tYmluZSB0aGVtIHRvZ2V0aGVyIHVzaW5nICYmLlxuXG5FbnZpcm9ubWVudDpcbi0gb3BlcmF0aW5nIHN5c3RlbTogJHtwbGF0Zm9ybX1cbi0gc2hlbGw6ICR7c2hlbGx9XG4tIGN1cnJlbnQgZGlyZWN0b3J5OiAke2N3ZH1cblxuT3V0cHV0IG9ubHkgdGhlIGNvbW1hbmQgYXMgb25lIGxpbmUuIERvIG5vdCB1c2UgTWFya2Rvd24gZm9ybWF0dGluZyBzdWNoIGFzIFxcYFxcYFxcYC4gRG8gbm90IGV4cGxhaW4gdGhlIGNvbW1hbmQuIERvIG5vdCBleGVjdXRlIHRoZSBjb21tYW5kLmBcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbW1hbmRGcm9tUmVzcG9uc2UodGV4dCkge1xuICBjb25zdCBjb21tYW5kID0gdGV4dC50cmltKClcbiAgaWYgKCFjb21tYW5kKSB0aHJvdyBuZXcgRXJyb3IoJ3RoZSBtb2RlbCByZXR1cm5lZCBhbiBlbXB0eSBjb21tYW5kJylcbiAgaWYgKGNvbW1hbmQuaW5jbHVkZXMoJ1xcMCcpIHx8IC9bXFxyXFxuXS8udGVzdChjb21tYW5kKSkgdGhyb3cgbmV3IEVycm9yKCd0aGUgbW9kZWwgcmV0dXJuZWQgbW9yZSB0aGFuIG9uZSBsaW5lJylcbiAgaWYgKGNvbW1hbmQuaW5jbHVkZXMoJ2BgYCcpKSB0aHJvdyBuZXcgRXJyb3IoJ3RoZSBtb2RlbCByZXR1cm5lZCBNYXJrZG93biBpbnN0ZWFkIG9mIGEgY29tbWFuZCcpXG4gIHJldHVybiBjb21tYW5kXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5TaGVsbChvcHRzLCBkZXBlbmRlbmNpZXMgPSB7fSkge1xuICBjb25zdCBzdGRlcnIgPSBkZXBlbmRlbmNpZXMuc3RkZXJyIHx8IHByb2Nlc3Muc3RkZXJyXG4gIGNvbnN0IHN0ZG91dCA9IGRlcGVuZGVuY2llcy5zdGRvdXQgfHwgcHJvY2Vzcy5zdGRvdXRcbiAgdHJ5IHtcbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCAoZGVwZW5kZW5jaWVzLnJlYWRDb25maWcgfHwgcmVhZENvbmZpZykoKVxuICAgIGNvbnN0IHJ1bnRpbWUgPSBhd2FpdCAoZGVwZW5kZW5jaWVzLmxvYWRNb2RlbFJ1bnRpbWUgfHwgbG9hZE1vZGVsUnVudGltZSkoKVxuICAgIGlmIChydW50aW1lLnByb3ZpZGVycy5sZW5ndGggPT09IDApIHRocm93IG5ldyBFcnJvcignbm8gY3JlZGVudGlhbHMgZm91bmQgKHNldCBhIHByb3ZpZGVyIGtleSBvciBydW4gcGljbyAtLWNvbm5lY3QpJylcblxuICAgIGNvbnN0IGNvbmZpZ3VyZWRNb2RlbCA9IGNvbmZpZy5tb2RlbHM/LnNoZWxsXG4gICAgY29uc3QgbW9kZWwgPSBzZWxlY3RNb2RlbCh7XG4gICAgICBtb2RlbHM6IHJ1bnRpbWUubW9kZWxzLFxuICAgICAgcHJvdmlkZXJzOiBydW50aW1lLnByb3ZpZGVycyxcbiAgICAgIHJlcXVlc3RlZDogb3B0cy5tb2RlbCxcbiAgICAgIGNvbmZpZ3VyZWQ6IGNvbmZpZ3VyZWRNb2RlbCB8fCBjb25maWcuZGVmYXVsdE1vZGVsLFxuICAgIH0pXG4gICAgY29uc3QgcmVxdWVzdGVkTmFtZSA9IG9wdHMubW9kZWwgfHwgY29uZmlndXJlZE1vZGVsXG4gICAgaWYgKCFtb2RlbCB8fCBtb2RlbC5hdmFpbGFibGUgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHVzYWJsZSBtb2RlbCR7cmVxdWVzdGVkTmFtZSA/IGAgbWF0Y2hpbmcgXCIke3JlcXVlc3RlZE5hbWV9XCJgIDogJyd9YClcbiAgICB9XG5cbiAgICBpZiAob3B0cy5zcGVlZCA9PT0gJ2Zhc3QnICYmICFtb2RlbC5zcGVlZCkgdGhyb3cgbmV3IEVycm9yKGAke21vZGVsLm5hbWV9IGRvZXMgbm90IHN1cHBvcnQgc3BlZWQgY29udHJvbGApXG5cbiAgICBjb25zdCBhdXRoID0gbW9kZWwucHJvdmlkZXIgPT09ICdjb2RleCcgPyBydW50aW1lLmNvZGV4Q3JlZGVudGlhbHMgOiBudWxsXG4gICAgaWYgKG1vZGVsLnByb3ZpZGVyID09PSAnY29kZXgnICYmICFhdXRoKSB0aHJvdyBuZXcgRXJyb3IoJ2NvZGV4IG1vZGVscyBuZWVkIGEgQ2hhdEdQVCBzaWduLWluIChydW4gcGljbyAtLWNvbm5lY3QpJylcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IChkZXBlbmRlbmNpZXMucnVuVHVybiB8fCBydW5UdXJuKSh7XG4gICAgICBoaXN0b3J5OiBbeyByb2xlOiAndXNlcicsIGNvbnRlbnQ6IG9wdHMucHJvbXB0IH1dLFxuICAgICAgdG9vbHM6IFtdLFxuICAgICAgcmVjb3JkZXI6IG51bGwsXG4gICAgICBtb2RlbE5hbWU6IG1vZGVsLm5hbWUsXG4gICAgICBlZmZvcnQ6IG9wdHMuZWZmb3J0ID8/IChtb2RlbC5lZmZvcnQgPyAnbG93JyA6IG51bGwpLFxuICAgICAgLi4uKG1vZGVsLnByb3ZpZGVyID09PSAnY29kZXgnICYmIHsgc3BlZWQ6IG1vZGVsLnNwZWVkID8gKG9wdHMuc3BlZWQgPz8gJ3N0YW5kYXJkJykgOiAnc3RhbmRhcmQnIH0pLFxuICAgICAgYXV0aCxcbiAgICAgIHN5c3RlbTogU1lTVEVNKHtcbiAgICAgICAgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nID8gJ21hY09TJyA6IHByb2Nlc3MucGxhdGZvcm0sXG4gICAgICAgIHNoZWxsOiBiYXNlbmFtZShwcm9jZXNzLmVudi5TSEVMTCB8fCAnenNoJyksXG4gICAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgIH0pLFxuICAgIH0pXG4gICAgaWYgKHJlc3VsdC5lcnJvcikgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5lcnJvcilcbiAgICBpZiAocmVzdWx0LmludGVycnVwdGVkKSB0aHJvdyBuZXcgRXJyb3IoJ2NvbW1hbmQgZ2VuZXJhdGlvbiB3YXMgaW50ZXJydXB0ZWQnKVxuICAgIGNvbnN0IHRleHQgPSByZXN1bHQubWVzc2FnZXNcbiAgICAgIC5maWx0ZXIoKG1lc3NhZ2UpID0+IG1lc3NhZ2Uucm9sZSA9PT0gJ2Fzc2lzdGFudCcgJiYgdHlwZW9mIG1lc3NhZ2UuY29udGVudCA9PT0gJ3N0cmluZycpXG4gICAgICAuYXQoLTEpPy5jb250ZW50IHx8ICcnXG4gICAgc3Rkb3V0LndyaXRlKGNvbW1hbmRGcm9tUmVzcG9uc2UodGV4dCkgKyAnXFxuJylcbiAgICByZXR1cm4gMFxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHN0ZGVyci53cml0ZShgcGljbzogJHtlcnJvci5tZXNzYWdlfVxcbmApXG4gICAgcmV0dXJuIDFcbiAgfVxufVxuIiwgImltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnXG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnXG5pbXBvcnQgeyBlbnN1cmVEYWVtb24gfSBmcm9tICdwaWNvY29kZS1jb3JlL2RhZW1vbi10cmFuc3BvcnQuanMnXG5pbXBvcnQgeyBjcmVhdGVSZW1vdGVDb250cm9sbGVyIH0gZnJvbSAncGljb2NvZGUtY29yZS9yZW1vdGUtY29udHJvbGxlci5qcydcbmltcG9ydCB7IG1vdW50IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgcGFyc2VBcmdzLCBVU0FHRSB9IGZyb20gJy4vY2xpLWFyZ3MuanMnXG5pbXBvcnQgeyBsb2FkTW9kZWxSdW50aW1lIH0gZnJvbSAnLi9tb2RlbC1ydW50aW1lLmpzJ1xuaW1wb3J0IHsgcmVhZENvbmZpZyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29uZmlnLmpzJ1xuaW1wb3J0IHsgZGV0ZWN0VGVybWluYWxUaGVtZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvdGVybWluYWwtdGhlbWUuanMnXG5pbXBvcnQgeyBBcHAgfSBmcm9tICcuL3VpL2FwcC5qc3gnXG5pbXBvcnQgeyBERUZBVUxUX0FDQ0VOVCwgTVVURUQsIHNldFBhbGV0dGUsIHBhbGV0dGVMaXN0IH0gZnJvbSAnLi91aS90aGVtZS5qcydcblxuY29uc3QgcGtnID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMobmV3IFVSTCgnLi4vcGFja2FnZS5qc29uJywgaW1wb3J0Lm1ldGEudXJsKSwgJ3V0Zi04JykpXG5cbmxldCBjbGlcbnRyeSB7XG4gIGNsaSA9IHBhcnNlQXJncyhwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpXG59IGNhdGNoIChlcnIpIHtcbiAgY29uc29sZS5lcnJvcihgcGljbzogJHtlcnIubWVzc2FnZX1gKVxuICBjb25zb2xlLmVycm9yKFVTQUdFKVxuICBwcm9jZXNzLmV4aXQoMSlcbn1cbmlmIChjbGkubW9kZSA9PT0gJ2hlbHAnKSB7XG4gIGNvbnNvbGUubG9nKFVTQUdFKVxuICBwcm9jZXNzLmV4aXQoMClcbn1cbmlmIChjbGkubW9kZSA9PT0gJ3ZlcnNpb24nKSB7XG4gIGNvbnNvbGUubG9nKHBrZy52ZXJzaW9uKVxuICBwcm9jZXNzLmV4aXQoMClcbn1cbmlmIChjbGkubW9kZSA9PT0gJ3VwZGF0ZScpIHtcbiAgY29uc3QgeyBpc0Rldkluc3RhbGwsIHJ1blVwZGF0ZSwgZmV0Y2hMYXRlc3RWZXJzaW9uLCBuZXdlclZlcnNpb24gfSA9IGF3YWl0IGltcG9ydCgncGljb2NvZGUtY29yZS91cGRhdGUuanMnKVxuICBpZiAoaXNEZXZJbnN0YWxsKGltcG9ydC5tZXRhLnVybCkpIHtcbiAgICBjb25zb2xlLmVycm9yKCd0aGlzIHBpY28gcnVucyBmcm9tIGEgc291cmNlIGNoZWNrb3V0OyB1cGRhdGUgaXQgd2l0aCBnaXQsIG5vdCBucG0nKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG4gIGNvbnN0IGxhdGVzdCA9IGF3YWl0IGZldGNoTGF0ZXN0VmVyc2lvbigpLmNhdGNoKCgpID0+IG51bGwpXG4gIGlmIChsYXRlc3QgJiYgIW5ld2VyVmVyc2lvbihwa2cudmVyc2lvbiwgbGF0ZXN0KSkge1xuICAgIGNvbnNvbGUubG9nKGBwaWNvIHYke3BrZy52ZXJzaW9ufSBpcyBhbHJlYWR5IHRoZSBsYXRlc3RgKVxuICAgIHByb2Nlc3MuZXhpdCgwKVxuICB9XG4gIGNvbnNvbGUuZXJyb3IoYHVwZGF0aW5nIHBpY29jb2RlICR7bGF0ZXN0ID8gYHRvIHYke2xhdGVzdH0gYCA6ICcnfXZpYSBucG0uLi5gKVxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBydW5VcGRhdGUoKVxuICBpZiAocmVzdWx0Lm9rKSB7XG4gICAgY29uc29sZS5sb2coYHVwZGF0ZWQke2xhdGVzdCA/IGAgdG8gdiR7bGF0ZXN0fWAgOiAnJ31gKVxuICAgIHByb2Nlc3MuZXhpdCgwKVxuICB9XG4gIGNvbnNvbGUuZXJyb3IoYHVwZGF0ZSBmYWlsZWQ6XFxuJHtyZXN1bHQub3V0cHV0fWApXG4gIHByb2Nlc3MuZXhpdCgxKVxufVxuaWYgKGNsaS5tb2RlID09PSAnY29ubmVjdCcpIHtcbiAgY29uc3QgeyBjb25uZWN0T3BlbkFJIH0gPSBhd2FpdCBpbXBvcnQoJ3BpY29jb2RlLWNvcmUvb3BlbmFpLWF1dGguanMnKVxuICB0cnkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ29wZW5pbmcgeW91ciBicm93c2VyIGZvciBDaGF0R1BUIHNpZ24taW4uLi4nKVxuICAgIGNvbnN0IHsgZW1haWwgfSA9IGF3YWl0IGNvbm5lY3RPcGVuQUkoeyBvblVybDogKHVybCkgPT4gY29uc29sZS5lcnJvcihgaWYgdGhlIGJyb3dzZXIgZGlkIG5vdCBvcGVuLCB2aXNpdDpcXG4ke3VybH1gKSB9KVxuICAgIGNvbnNvbGUubG9nKGBjb25uZWN0ZWQgYXMgJHtlbWFpbCB8fCAneW91ciBDaGF0R1BUIGFjY291bnQnfWApXG4gICAgcHJvY2Vzcy5leGl0KDApXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUuZXJyb3IoYGNvbm5lY3QgZmFpbGVkOiAke2Vyci5tZXNzYWdlfWApXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbn1cbmlmIChjbGkubW9kZSA9PT0gJ2hlYWRsZXNzJykge1xuICBjb25zdCB7IHJ1bkhlYWRsZXNzIH0gPSBhd2FpdCBpbXBvcnQoJy4vaGVhZGxlc3MuanMnKVxuICBwcm9jZXNzLmV4aXQoYXdhaXQgcnVuSGVhZGxlc3MoY2xpKSlcbn1cbmlmIChjbGkubW9kZSA9PT0gJ3NoZWxsJykge1xuICBjb25zdCB7IHJ1blNoZWxsIH0gPSBhd2FpdCBpbXBvcnQoJy4vc2hlbGwuanMnKVxuICBwcm9jZXNzLmV4aXQoYXdhaXQgcnVuU2hlbGwoY2xpKSlcbn1cblxuY29uc3QgeyBwcm92aWRlcnMgfSA9IGF3YWl0IGxvYWRNb2RlbFJ1bnRpbWUoKVxuXG5pZiAocHJvdmlkZXJzLmxlbmd0aCA9PT0gMCkge1xuICBjb25zb2xlLmVycm9yKCdwaWNvOiBubyBjcmVkZW50aWFscyBmb3VuZC4nKVxuICBjb25zb2xlLmVycm9yKCdzZXQgb25lIG9mOiBHRU1JTklfQVBJX0tFWSwgQU5USFJPUElDX0FQSV9LRVksIE9QRU5BSV9BUElfS0VZLCBYQUlfQVBJX0tFWSwgT1BFTlJPVVRFUl9BUElfS0VZJylcbiAgY29uc29sZS5lcnJvcignb3Igc2lnbiBpbiB3aXRoIGEgQ2hhdEdQVCBwbGFuOiBwaWNvIC0tY29ubmVjdCcpXG4gIHByb2Nlc3MuZXhpdCgxKVxufVxuXG5jb25zdCBjb25maWcgPSBhd2FpdCByZWFkQ29uZmlnKClcblxuY29uc3QgZGV0ZWN0ZWRUaGVtZSA9IGF3YWl0IGRldGVjdFRlcm1pbmFsVGhlbWUoKVxuY29uc3QgdGhlbWVPdmVycmlkZSA9IHBhbGV0dGVMaXN0KCkuc29tZSgocCkgPT4gcC5rZXkgPT09IGNvbmZpZy50aGVtZSkgPyBjb25maWcudGhlbWUgOiBudWxsXG5zZXRQYWxldHRlKHRoZW1lT3ZlcnJpZGUgfHwgZGV0ZWN0ZWRUaGVtZSlcbmNvbnN0IHRoZW1lID0geyBhY2NlbnQ6IERFRkFVTFRfQUNDRU5ULCBtdXRlZDogTVVURUQgfVxuXG5jb25zdCBjb25uZWN0aW9uID0gYXdhaXQgZW5zdXJlRGFlbW9uKHsgZW50cnk6IGZpbGVVUkxUb1BhdGgobmV3IFVSTCgnLi9kYWVtb24uanMnLCBpbXBvcnQubWV0YS51cmwpKSB9KVxuY29uc3QgY29udHJvbGxlciA9IGF3YWl0IGNyZWF0ZVJlbW90ZUNvbnRyb2xsZXIoY29ubmVjdGlvbiwge1xuICBvcHRpb25zOiB7IGN3ZDogcHJvY2Vzcy5jd2QoKSwgdmVyc2lvbjogcGtnLnZlcnNpb24sIHRoZW1lLCBkZXRlY3RlZFRoZW1lLCB0aGVtZVByZWY6IHRoZW1lT3ZlcnJpZGUgfHwgJ2F1dG8nIH0sXG4gIGxvY2FsQm9vdDogeyByZWZzOiB7fSB9LFxufSlcbmNvbnN0IGJvb3QgPSBjb250cm9sbGVyLmJvb3RcbmlmIChjbGkuc3BlZWQpIGF3YWl0IGNvbnRyb2xsZXIuc3BlZWRDb21tYW5kKGNsaS5zcGVlZClcbmZvciAoY29uc3Qgc2lnbmFsIG9mIFsnU0lHSU5UJywgJ1NJR1RFUk0nLCAnU0lHSFVQJ10pIHByb2Nlc3Mub24oc2lnbmFsLCAoKSA9PiB7XG4gIGNvbm5lY3Rpb24uY2xvc2UoKVxuICBwcm9jZXNzLmV4aXQoMClcbn0pXG5wcm9jZXNzLm9uKCdleGl0JywgKCkgPT4gY29ubmVjdGlvbi5jbG9zZSgpKVxuY29uc3QgYXBwID0gbW91bnQoKCkgPT4gPEFwcCBib290PXtib290fSBjb250cm9sbGVyPXtjb250cm9sbGVyfSAvPiwgeyB0aXRsZTogYHBpY28gICR7Ym9vdC5yb290LnNwbGl0KCcvJykucG9wKCl9YCwgdGhlbWUgfSlcbmJvb3Quc2V0VGhlbWUgPSBhcHAuc2V0VGhlbWVcbiIsICJleHBvcnQgY29uc3QgVVNBR0UgPSBgcGljbyAtIGEgY29kaW5nIGFnZW50IGluIHlvdXIgdGVybWluYWxcblxudXNhZ2U6XG4gIHBpY28gICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlIHNlc3Npb24gaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5XG4gIHBpY28gLXAgXCJwcm9tcHRcIiAgICAgICAgICAgaGVhZGxlc3M6IHJ1biBvbmUgYWdlbnRpYyB0dXJuLCBwcmludCB0aGUgYW5zd2VyXG4gIHBpY28gLXMgXCJyZXF1ZXN0XCIgICAgICAgICAgZ2VuZXJhdGUgb25lIHNoZWxsIGNvbW1hbmQsIHdpdGhvdXQgcnVubmluZyBpdFxuICBjYXQgbG9nIHwgcGljbyAtcCBcIi4uLlwiICAgIHN0ZGluIGlzIGFwcGVuZGVkIHRvIHRoZSBwcm9tcHQgYXMgY29udGV4dFxuXG5jb21tYW5kIGZsYWdzOlxuICAtcCwgLS1wcmludCA8cHJvbXB0PiAgICAgICBydW4gb25lIGFnZW50aWMgdHVybiBhbmQgcHJpbnQgdGhlIGFuc3dlclxuICAtcywgLS1zaGVsbCA8cmVxdWVzdD4gICAgICBwcmludCBvbmUgZ2VuZXJhdGVkIHNoZWxsIGNvbW1hbmRcbiAgLS1qc29uICAgICAgICAgICAgICAgICAgICAgcHJpbnQgYSBzaW5nbGUgSlNPTiByZXN1bHQgb2JqZWN0IHRvIHN0ZG91dFxuICAtLXN0cmVhbS1qc29uICAgICAgICAgICAgICBzdHJlYW0gc2Vzc2lvbiBldmVudHMgdG8gc3Rkb3V0IGFzIGpzb25sXG4gIC1tLCAtLW1vZGVsIDxuYW1lPiAgICAgICAgIG1vZGVsIHRvIHVzZSAoZnV6enkgbWF0Y2hlZCwgb3IgcmF3IHByb3ZpZGVyL21vZGVsKVxuICAtLXNwZWVkIDxsZXZlbD4gICAgICAgICAgICBzcGVlZDogc3RhbmRhcmR8ZmFzdFxuICAtLWVmZm9ydCA8bGV2ZWw+ICAgICAgICAgICB0aGlua2luZyBlZmZvcnQ6IGF1dG98bG93fG1lZGl1bXxoaWdofG1heFxuICAtLXJlc3VtZSA8c2Vzc2lvbi1pZD4gICAgICBjb250aW51ZSBhbiBleGlzdGluZyBzZXNzaW9uIGZyb20gdGhpcyBwcm9qZWN0XG4gIC0tbWF4LXRvb2wtY2FsbHMgPG4+ICAgICAgIHN0b3AgdGhlIGFnZW50IGFmdGVyIG4gdG9vbCBjYWxscyAoZGVmYXVsdCA1MClcbiAgLXEsIC0tcXVpZXQgICAgICAgICAgICAgICAgbm8gcHJvZ3Jlc3Mgb3V0cHV0IG9uIHN0ZGVyclxuXG4gIC0tY29ubmVjdCAgICAgICAgICAgICAgICAgIHNpZ24gaW4gd2l0aCBhIENoYXRHUFQgcGxhbiAoT0F1dGggaW4geW91ciBicm93c2VyKVxuICB1cGRhdGUsIC0tdXBkYXRlICAgICAgICAgICB1cGRhdGUgcGljbyB0byB0aGUgbGF0ZXN0IHJlbGVhc2UgZnJvbSBucG1cbiAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHBcbiAgLXYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgc2hvdyB2ZXJzaW9uYFxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3YpIHtcbiAgY29uc3Qgb3B0cyA9IHsgbW9kZTogJ2ludGVyYWN0aXZlJyB9XG4gIGNvbnN0IHRha2VWYWx1ZSA9IChuYW1lLCBpKSA9PiB7XG4gICAgaWYgKGkgKyAxID49IGFyZ3YubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoYCR7bmFtZX0gcmVxdWlyZXMgYSB2YWx1ZWApXG4gICAgcmV0dXJuIGFyZ3ZbaSArIDFdXG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3YubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhcmcgPSBhcmd2W2ldXG4gICAgaWYgKGFyZyA9PT0gJy1wJyB8fCBhcmcgPT09ICctLXByaW50Jykge1xuICAgICAgaWYgKG9wdHMubW9kZSAhPT0gJ2ludGVyYWN0aXZlJykgdGhyb3cgbmV3IEVycm9yKGAke2FyZ30gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYW5vdGhlciBjb21tYW5kIG1vZGVgKVxuICAgICAgb3B0cy5tb2RlID0gJ2hlYWRsZXNzJ1xuICAgICAgb3B0cy5wcm9tcHQgPSB0YWtlVmFsdWUoYXJnLCBpKVxuICAgICAgaSsrXG4gICAgfSBlbHNlIGlmIChhcmcgPT09ICctcycgfHwgYXJnID09PSAnLS1zaGVsbCcpIHtcbiAgICAgIGlmIChvcHRzLm1vZGUgIT09ICdpbnRlcmFjdGl2ZScpIHRocm93IG5ldyBFcnJvcihgJHthcmd9IGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGFub3RoZXIgY29tbWFuZCBtb2RlYClcbiAgICAgIG9wdHMubW9kZSA9ICdzaGVsbCdcbiAgICAgIG9wdHMucHJvbXB0ID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLS1qc29uJykgb3B0cy5qc29uID0gdHJ1ZVxuICAgIGVsc2UgaWYgKGFyZyA9PT0gJy0tc3RyZWFtLWpzb24nKSBvcHRzLnN0cmVhbUpzb24gPSB0cnVlXG4gICAgZWxzZSBpZiAoYXJnID09PSAnLW0nIHx8IGFyZyA9PT0gJy0tbW9kZWwnKSB7XG4gICAgICBvcHRzLm1vZGVsID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLS1lZmZvcnQnKSB7XG4gICAgICBjb25zdCBsZXZlbCA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpZiAoIVsnYXV0bycsICdsb3cnLCAnbWVkaXVtJywgJ2hpZ2gnLCAnbWF4J10uaW5jbHVkZXMobGV2ZWwpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBlZmZvcnQgXCIke2xldmVsfVwiOiB1c2UgYXV0b3xsb3d8bWVkaXVtfGhpZ2h8bWF4YClcbiAgICAgIH1cbiAgICAgIG9wdHMuZWZmb3J0ID0gbGV2ZWxcbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLS1zcGVlZCcpIHtcbiAgICAgIGNvbnN0IGxldmVsID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGlmICghWydzdGFuZGFyZCcsICdmYXN0J10uaW5jbHVkZXMobGV2ZWwpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBzcGVlZCBcIiR7bGV2ZWx9XCI6IHVzZSBzdGFuZGFyZHxmYXN0YClcbiAgICAgIH1cbiAgICAgIG9wdHMuc3BlZWQgPSBsZXZlbFxuICAgICAgaSsrXG4gICAgfSBlbHNlIGlmIChhcmcgPT09ICctLXJlc3VtZScpIHtcbiAgICAgIG9wdHMucmVzdW1lID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLS1tYXgtdG9vbC1jYWxscycpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGlmICghL15cXGQrJC8udGVzdCh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcignLS1tYXgtdG9vbC1jYWxscyByZXF1aXJlcyBhIHBvc2l0aXZlIGludGVnZXInKVxuICAgICAgb3B0cy5tYXhUb29sQ2FsbHMgPSBOdW1iZXIodmFsdWUpXG4gICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKG9wdHMubWF4VG9vbENhbGxzKSB8fCBvcHRzLm1heFRvb2xDYWxscyA8IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCctLW1heC10b29sLWNhbGxzIHJlcXVpcmVzIGEgcG9zaXRpdmUgaW50ZWdlcicpXG4gICAgICB9XG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tY29ubmVjdCcpIG9wdHMubW9kZSA9ICdjb25uZWN0J1xuICAgIGVsc2UgaWYgKGFyZyA9PT0gJ3VwZGF0ZScgfHwgYXJnID09PSAnLS11cGRhdGUnKSBvcHRzLm1vZGUgPSAndXBkYXRlJ1xuICAgIGVsc2UgaWYgKGFyZyA9PT0gJy1xJyB8fCBhcmcgPT09ICctLXF1aWV0Jykgb3B0cy5xdWlldCA9IHRydWVcbiAgICBlbHNlIGlmIChhcmcgPT09ICctaCcgfHwgYXJnID09PSAnLS1oZWxwJykgb3B0cy5tb2RlID0gJ2hlbHAnXG4gICAgZWxzZSBpZiAoYXJnID09PSAnLXYnIHx8IGFyZyA9PT0gJy0tdmVyc2lvbicpIG9wdHMubW9kZSA9ICd2ZXJzaW9uJ1xuICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIGFyZ3VtZW50IFwiJHthcmd9XCJgKVxuICB9XG5cbiAgaWYgKG9wdHMubW9kZSA9PT0gJ2hlYWRsZXNzJyAmJiAhb3B0cy5wcm9tcHQ/LnRyaW0oKSkgdGhyb3cgbmV3IEVycm9yKCctcCByZXF1aXJlcyBhIG5vbi1lbXB0eSBwcm9tcHQnKVxuICBpZiAob3B0cy5tb2RlID09PSAnc2hlbGwnKSB7XG4gICAgaWYgKCFvcHRzLnByb21wdD8udHJpbSgpKSB0aHJvdyBuZXcgRXJyb3IoJy1zIHJlcXVpcmVzIGEgbm9uLWVtcHR5IHJlcXVlc3QnKVxuICAgIGNvbnN0IGluY29tcGF0aWJsZSA9IFtvcHRzLmpzb24gJiYgJy0tanNvbicsIG9wdHMuc3RyZWFtSnNvbiAmJiAnLS1zdHJlYW0tanNvbicsIG9wdHMucmVzdW1lICYmICctLXJlc3VtZScsIG9wdHMubWF4VG9vbENhbGxzICYmICctLW1heC10b29sLWNhbGxzJ10uZmluZChCb29sZWFuKVxuICAgIGlmIChpbmNvbXBhdGlibGUpIHRocm93IG5ldyBFcnJvcihgJHtpbmNvbXBhdGlibGV9IGNhbm5vdCBiZSB1c2VkIHdpdGggLS1zaGVsbGApXG4gIH1cbiAgcmV0dXJuIG9wdHNcbn1cbiIsICJpbXBvcnQgeyBTY3JvbGxCb3gsIHVzZUZvY3VzLCB1c2VMYXlvdXQsIHVzZUludGVydmFsLCBjcmVhdGVTaWduYWwgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcydcbmltcG9ydCB7IFNFU1NJT05fQ09MT1JTIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb250cm9sbGVyLmpzJ1xuaW1wb3J0IHsgRkdfU09GVCwgTVVURUQsIFBBTkVMX0JHLCBhY2NlbnQgfSBmcm9tICcuL3RoZW1lLmpzJ1xuaW1wb3J0IHsgdGltZUFnbyB9IGZyb20gJy4vcGFuZWxzLmpzeCdcblxuZnVuY3Rpb24gU2Vzc2lvblJvdyh7IHJvdywgc2VsZWN0ZWQsIGZvY3VzLCBub3cgfSkge1xuICBjb25zdCBsYXlvdXQgPSB1c2VMYXlvdXQoKVxuICBmb2N1cy5pdGVtKHJvdy5pZCwgbGF5b3V0KVxuICBjb25zdCBjb2xvciA9IFNFU1NJT05fQ09MT1JTW3Jvdy5jb2xvcl0gfHwgcm93LmNvbG9yIHx8IGFjY2VudCgpXG4gIHJldHVybiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMSwgaGVpZ2h0OiAyLCBmbGV4U2hyaW5rOiAwLCBiZzogc2VsZWN0ZWQgPyBjb2xvciA6IHVuZGVmaW5lZCB9fT5cbiAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogY29sb3IsIGJvbGQ6IHRydWUsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntgJHtyb3cuc3RhdHVzID09PSAnYnVzeScgPyAnXHUyNUNGJyA6ICdcdTI1Q0InfSAke3Jvdy5uYW1lfWB9PC90ZXh0PlxuICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57cm93LnN0YXR1cyA9PT0gJ2J1c3knID8gcm93LmFjdGl2aXR5IHx8ICd3b3JraW5nJyA6IHJvdy5sYXN0TWVzc2FnZUF0ID8gYExhc3QgbWVzc2FnZSAke3RpbWVBZ28ocm93Lmxhc3RNZXNzYWdlQXQpfWAgOiAnaWRsZSd9PC90ZXh0PlxuICA8L2JveD5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFdvcmtzcGFjZVNpZGViYXIoeyBncm91cHMsIHNlbGVjdGVkLCB3aWR0aCwgbG9hZGluZywgZXJyb3IsIG9uSGVpZ2h0IH0pIHtcbiAgY29uc3QgZm9jdXMgPSB1c2VGb2N1cyh7IGluaXRpYWw6IG51bGwsIGFjdGl2ZTogZmFsc2UgfSlcbiAgY29uc3QgW25vdywgc2V0Tm93XSA9IGNyZWF0ZVNpZ25hbChEYXRlLm5vdygpKVxuICB1c2VJbnRlcnZhbCgoKSA9PiBzZXROb3coRGF0ZS5ub3coKSksIDEwMDAwKVxuICBpZiAoc2VsZWN0ZWQpIGZvY3VzLmZvY3VzKHNlbGVjdGVkKVxuICBjb25zdCBob21lID0gaG9tZWRpcigpXG4gIHJldHVybiA8Ym94IHN0eWxlPXt7IHdpZHRoLCBmbGV4U2hyaW5rOiAwLCBoZWlnaHQ6ICcxMDAlJywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRyB9fT5cbiAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgYm9sZDogdHJ1ZSwgcGFkZGluZ1g6IDEgfX0+U2Vzc2lvbnM8L3RleHQ+XG4gICAge2xvYWRpbmcgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PmxvYWRpbmc8L3RleHQ+fVxuICAgIHtlcnJvciAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntlcnJvcn08L3RleHQ+fVxuICAgIDxTY3JvbGxCb3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gZm9sbG93Rm9jdXM9e2ZvY3VzfSBmb2N1c1BhZGRpbmc9ezF9IG9uTWV0cmljcz17KG1ldHJpY3MpID0+IG9uSGVpZ2h0KG1ldHJpY3MudmlzaWJsZUhlaWdodCl9PlxuICAgICAge2dyb3Vwcy5tYXAoKGdyb3VwKSA9PiA8Ym94IGtleT17Z3JvdXAuY3dkfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJywgcGFkZGluZ1g6IDEgfX0+e2dyb3VwLmN3ZCA9PT0gaG9tZSA/ICd+JyA6IGdyb3VwLmN3ZC5zdGFydHNXaXRoKGhvbWUgKyAnLycpID8gJ34nICsgZ3JvdXAuY3dkLnNsaWNlKGhvbWUubGVuZ3RoKSA6IGdyb3VwLmN3ZH08L3RleHQ+XG4gICAgICAgIHtncm91cC5zZXNzaW9ucy5tYXAoKHJvdykgPT4gPFNlc3Npb25Sb3cga2V5PXtyb3cuaWR9IHJvdz17cm93fSBzZWxlY3RlZD17cm93LmlkID09PSBzZWxlY3RlZH0gZm9jdXM9e2ZvY3VzfSBub3c9e25vdygpfSAvPil9XG4gICAgICA8L2JveD4pfVxuICAgIDwvU2Nyb2xsQm94PlxuICA8L2JveD5cbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5cbmNvbnN0IFBBTEVUVEVTID0ge1xuICBkYXJrOiB7XG4gICAgZGVzYzogJ2xpZ2h0IHRleHQgZm9yIGRhcmsgdGVybWluYWxzJyxcbiAgICBhY2NlbnQ6ICcjZjg3MTcxJyxcbiAgICBmZzogJyNlNWU3ZWInLFxuICAgIGZnU29mdDogJyM5Y2EzYWYnLFxuICAgIG11dGVkOiAnI2I4YzBkMCcsXG4gICAgcGFuZWxCZzogJyMxZTFlMjInLFxuICAgIHNlbGVjdEJnOiAnIzM3NDE1MScsXG4gICAgcmVkOiAnI2Y4NzE3MScsXG4gICAgZ3JlZW46ICcjNGFkZTgwJyxcbiAgICBwZWVyOiAnI2M0YjVmZCcsXG4gICAgaGlnaGxpZ2h0OiAnI2ZmZmZmZicsXG4gICAgc2hpa2k6ICdub3JkJyxcbiAgfSxcbiAgbGlnaHQ6IHtcbiAgICBkZXNjOiAnZGFyayB0ZXh0IGZvciBsaWdodCB0ZXJtaW5hbHMnLFxuICAgIGFjY2VudDogJyNkYzI2MjYnLFxuICAgIGZnOiAnIzFmMjQzMCcsXG4gICAgZmdTb2Z0OiAnIzRiNTU2MycsXG4gICAgbXV0ZWQ6ICcjNGI1NTYzJyxcbiAgICBwYW5lbEJnOiAnI2U5ZTllZScsXG4gICAgc2VsZWN0Qmc6ICcjZDRkNGRjJyxcbiAgICByZWQ6ICcjZGMyNjI2JyxcbiAgICBncmVlbjogJyMxNmEzNGEnLFxuICAgIHBlZXI6ICcjNmQyOGQ5JyxcbiAgICBoaWdobGlnaHQ6ICcjMTExODI3JyxcbiAgICBzaGlraTogJ2dpdGh1Yi1saWdodCcsXG4gIH0sXG4gIG5vcmQ6IHtcbiAgICBkZXNjOiAnYXJjdGljIGJsdWVzIG9uIHBvbGFyIG5pZ2h0JyxcbiAgICBhY2NlbnQ6ICcjODhjMGQwJyxcbiAgICBmZzogJyNkOGRlZTknLFxuICAgIGZnU29mdDogJyNhYWIyYzQnLFxuICAgIG11dGVkOiAnI2I4YzBkMCcsXG4gICAgcGFuZWxCZzogJyMzYjQyNTInLFxuICAgIHNlbGVjdEJnOiAnIzQzNGM1ZScsXG4gICAgcmVkOiAnI2JmNjE2YScsXG4gICAgZ3JlZW46ICcjYTNiZThjJyxcbiAgICBwZWVyOiAnI2Q4YjRmZScsXG4gICAgaGlnaGxpZ2h0OiAnI2VjZWZmNCcsXG4gICAgc2hpa2k6ICdub3JkJyxcbiAgfSxcbn1cblxuZXhwb3J0IGxldCBERUZBVUxUX0FDQ0VOVCA9IFBBTEVUVEVTLmRhcmsuYWNjZW50XG5leHBvcnQgbGV0IEZHID0gUEFMRVRURVMuZGFyay5mZ1xuZXhwb3J0IGxldCBGR19TT0ZUID0gUEFMRVRURVMuZGFyay5mZ1NvZnRcbmV4cG9ydCBsZXQgTVVURUQgPSBQQUxFVFRFUy5kYXJrLm11dGVkXG5leHBvcnQgbGV0IFBBTkVMX0JHID0gUEFMRVRURVMuZGFyay5wYW5lbEJnXG5leHBvcnQgbGV0IFNFTEVDVF9CRyA9IFBBTEVUVEVTLmRhcmsuc2VsZWN0QmdcbmV4cG9ydCBsZXQgUkVEID0gUEFMRVRURVMuZGFyay5yZWRcbmV4cG9ydCBsZXQgR1JFRU4gPSBQQUxFVFRFUy5kYXJrLmdyZWVuXG5leHBvcnQgbGV0IFBFRVIgPSBQQUxFVFRFUy5kYXJrLnBlZXJcbmV4cG9ydCBsZXQgSElHSExJR0hUID0gUEFMRVRURVMuZGFyay5oaWdobGlnaHRcblxubGV0IGN1cnJlbnRQYWxldHRlID0gJ2RhcmsnXG5sZXQgZXhwbGljaXRBY2NlbnQgPSBudWxsXG5cbmNvbnN0IFthY2NlbnRWYWx1ZSwgc2V0QWNjZW50VmFsdWVdID0gY3JlYXRlU2lnbmFsKERFRkFVTFRfQUNDRU5UKVxuXG5leHBvcnQgY29uc3QgYWNjZW50ID0gYWNjZW50VmFsdWVcblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFjY2VudChjb2xvcikge1xuICBleHBsaWNpdEFjY2VudCA9IGNvbG9yIHx8IG51bGxcbiAgc2V0QWNjZW50VmFsdWUoZXhwbGljaXRBY2NlbnQgfHwgREVGQVVMVF9BQ0NFTlQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRQYWxldHRlKG5hbWUpIHtcbiAgY3VycmVudFBhbGV0dGUgPSBQQUxFVFRFU1tuYW1lXSA/IG5hbWUgOiAnZGFyaydcbiAgY29uc3QgcCA9IFBBTEVUVEVTW2N1cnJlbnRQYWxldHRlXVxuICBERUZBVUxUX0FDQ0VOVCA9IHAuYWNjZW50XG4gIEZHID0gcC5mZ1xuICBGR19TT0ZUID0gcC5mZ1NvZnRcbiAgTVVURUQgPSBwLm11dGVkXG4gIFBBTkVMX0JHID0gcC5wYW5lbEJnXG4gIFNFTEVDVF9CRyA9IHAuc2VsZWN0QmdcbiAgUkVEID0gcC5yZWRcbiAgR1JFRU4gPSBwLmdyZWVuXG4gIFBFRVIgPSBwLnBlZXJcbiAgSElHSExJR0hUID0gcC5oaWdobGlnaHRcbiAgc2V0QWNjZW50VmFsdWUoZXhwbGljaXRBY2NlbnQgfHwgcC5hY2NlbnQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWxldHRlTmFtZSgpIHtcbiAgcmV0dXJuIGN1cnJlbnRQYWxldHRlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWxldHRlTGlzdCgpIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKFBBTEVUVEVTKS5tYXAoKFtrZXksIHBdKSA9PiAoeyBrZXksIGRlc2M6IHAuZGVzYyB9KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNoaWtpVGhlbWUoKSB7XG4gIHJldHVybiBQQUxFVFRFU1tjdXJyZW50UGFsZXR0ZV0uc2hpa2lcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwsIEJ1dHRvbiwgQ2hlY2tib3gsIGVhc2UsIEZpZWxkLCBGaWVsZExpc3QsIE1lbnUsIE51bWJlcklucHV0LCBQaWNrTGlzdCwgUmFkaW8sIFNjcm9sbEJveCwgVGV4dElucHV0LCB1c2VBbmltYXRlZCwgdXNlRm9jdXMsIHVzZUlucHV0LCB1c2VJbnRlcnZhbCwgdXNlTGF5b3V0IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgYWNjZW50LCBGRywgRkdfU09GVCwgTVVURUQsIFBBTkVMX0JHLCBTRUxFQ1RfQkcsIFJFRCwgR1JFRU4gfSBmcm9tICcuL3RoZW1lLmpzJ1xuaW1wb3J0IHsgQW5pbWF0ZWRWYWx1ZSB9IGZyb20gJy4vYW5pbWF0ZWQtdmFsdWUuanN4J1xuaW1wb3J0IHsgY29udGV4dEJhciB9IGZyb20gJy4vY29udGV4dC1iYXIuanMnXG5pbXBvcnQgeyBjb21wYWN0TnVtYmVyIH0gZnJvbSAncGljb2NvZGUtY29yZS9mb3JtYXQuanMnXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcydcbmltcG9ydCB7IGZ1enp5U2NvcmUsIHJhbmtGdXp6eSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZnV6enkuanMnXG5pbXBvcnQgeyBmb3JtYXRIdHRwU2VydmVyU3BlYywgcGFyc2VTZXJ2ZXJTcGVjLCByZWRhY3RTZXJ2ZXJTcGVjLCBSRURBQ1RFRF9IRUFERVIgfSBmcm9tICdwaWNvY29kZS1jb3JlL21jcC5qcydcblxuZnVuY3Rpb24gc2hvcnRlbkhvbWUocGF0aCkge1xuICBjb25zdCB2YWx1ZSA9IFN0cmluZyhwYXRoKVxuICBjb25zdCBob21lID0gaG9tZWRpcigpXG4gIHJldHVybiB2YWx1ZSA9PT0gaG9tZSB8fCB2YWx1ZS5zdGFydHNXaXRoKGAke2hvbWV9L2ApID8gYH4ke3ZhbHVlLnNsaWNlKGhvbWUubGVuZ3RoKX1gIDogdmFsdWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVBZ28oYXQpIHtcbiAgY29uc3QgcyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKERhdGUubm93KCkgLSBhdCkgLyAxMDAwKSlcbiAgaWYgKHMgPCA2MCkgcmV0dXJuIGAke3N9cyBhZ29gXG4gIGNvbnN0IG0gPSBNYXRoLmZsb29yKHMgLyA2MClcbiAgaWYgKG0gPCA2MCkgcmV0dXJuIGAke219bSBhZ29gXG4gIGNvbnN0IGggPSBNYXRoLmZsb29yKG0gLyA2MClcbiAgaWYgKGggPCAyNCkgcmV0dXJuIGAke2h9aCBhZ29gXG4gIHJldHVybiBgJHtNYXRoLmZsb29yKGggLyAyNCl9ZCBhZ29gXG59XG5cbmZ1bmN0aW9uIFBhbmVsRGl2aWRlcigpIHtcbiAgcmV0dXJuIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBTRUxFQ1RfQkcsIG92ZXJmbG93OiAnY2xpcCcgfX0+eydcdTI1MDAnLnJlcGVhdChwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIHx8IDgwKX08L3RleHQ+XG59XG5cbmZ1bmN0aW9uIFBhbmVsRnJhbWUoeyB0aXRsZSwgaGludCwgcmlnaHQsIGZ1bGxTY3JlZW4gPSBmYWxzZSwgY2hpbGRyZW4gfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgaGVpZ2h0OiBmdWxsU2NyZWVuID8gJzEwMCUnIDogdW5kZWZpbmVkIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIHBhZGRpbmdUb3A6IDEgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19Pnt0aXRsZX08L3RleHQ+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgIHtyaWdodH1cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57aGludH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIDxQYW5lbERpdmlkZXIgLz5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiBmdWxsU2NyZWVuID8gMCA6IDIsIHBhZGRpbmdCb3R0b206IDEsIGZsZXhHcm93OiBmdWxsU2NyZWVuID8gMSA6IHVuZGVmaW5lZCB9fT5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbmZpcm1QYW5lbCh7IHRpdGxlLCBtZXNzYWdlLCBjb25maXJtTGFiZWwgPSAnQ29uZmlybScsIGZvY3VzZWQsIG9uQ29uZmlybSwgb25DbG9zZSB9KSB7XG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgIG9uQ2xvc2UoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIG9uQ29uZmlybSgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPXt0aXRsZX0gaGludD17YGVudGVyOiAke2NvbmZpcm1MYWJlbC50b0xvd2VyQ2FzZSgpfSAgZXNjOiBjYW5jZWxgfT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PnttZXNzYWdlfTwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IFJFRCwgYm9sZDogdHJ1ZSB9fT5UaGlzIGNhbm5vdCBiZSB1bmRvbmUuPC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmZ1bmN0aW9uIENvbmZpZ0ZpZWxkKHsgZmllbGQsIHZhbHVlLCBmb2N1c2VkLCBvbkNoYW5nZSB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luQm90dG9tOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPENoZWNrYm94IGNoZWNrZWQ9e3ZhbHVlfSBsYWJlbD17ZmllbGQubGFiZWx9IGZvY3VzZWQ9e2ZvY3VzZWR9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2ZpZWxkLnBhdGh9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICAgJHtmaWVsZC5kZXNjfWB9PC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIENvbmZpZ051bWJlckZpZWxkKHsgdmFsdWUsIGZvY3VzZWQsIG9uQ2hhbmdlIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Cb3R0b206IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICA8TnVtYmVySW5wdXQgZm9jdXNlZD17Zm9jdXNlZH0gdmFsdWU9e3ZhbHVlfSBvbkNoYW5nZT17b25DaGFuZ2V9IG1pbj17MX0gbWF4PXsxMDB9IHdpZHRoPXs1fSAvPlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+IFBhcmFsbGVsIGFnZW50IGxpbWl0PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5yZXNlYXJjaC5hZ2VudExpbWl0PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+ICAgIE1heGltdW0gYWdlbnRzIHBlciBwYXJhbGxlbCBydW4gKDEtMTAwKTwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb25maWdNb2RlbEZpZWxkKHsgbW9kZWwsIGxhYmVsLCBwYXRoLCBmb2N1c2VkLCBvblBpY2sgfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDxCdXR0b24gbGFiZWw9e2xhYmVsfSBmb2N1c2VkPXtmb2N1c2VkfSBvblByZXNzPXtvblBpY2t9IC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntwYXRofTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAgICR7bW9kZWwgfHwgJ05vdCBjb25maWd1cmVkJ31gfTwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ29uZmlnUGFuZWwoeyB2YWx1ZXMsIGZvY3VzZWQsIG9uQ2hhbmdlLCBvblBpY2tSZXNlYXJjaE1vZGVsLCBvblBpY2tTaGVsbE1vZGVsLCBvblBpY2tEZWxpYmVyYXRpb25Nb2RlbCwgb25QaWNrUGFydGljaXBhbnRNb2RlbCwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IGZpZWxkcyA9IFtcbiAgICB7IG5hbWU6ICdjbG91ZHMnLCBsYWJlbDogJ0Nsb3VkIGFuaW1hdGlvbicsIGRlc2M6ICdTaG93IGFuaW1hdGVkIGNsb3VkcyBvbiB0aGUgZW1wdHkgc2NyZWVuJywgcGF0aDogJ2FuaW1hdGlvbi5jbG91ZHMnIH0sXG4gICAgeyBuYW1lOiAnY29tcGFjdFRvb2xzJywgbGFiZWw6ICdDb21wYWN0IHRvb2wgaGlzdG9yeScsIGRlc2M6ICdTdW1tYXJpemUgY29uc2VjdXRpdmUgdG9vbCBjYWxscyBpbiBvbmUgcm93JywgcGF0aDogJ2Rpc3BsYXkuY29tcGFjdFRvb2xIaXN0b3J5JyB9LFxuICAgIHsgbmFtZTogJ2dpdFN0YXR1cycsIGxhYmVsOiAnR2l0IGluZm9ybWF0aW9uJywgZGVzYzogJ1Nob3cgYnJhbmNoIGFuZCBjaGFuZ2VkIGxpbmUgY291bnRzJywgcGF0aDogJ2Rpc3BsYXkuZ2l0U3RhdHVzJyB9LFxuICAgIHsgbmFtZTogJ3dpZGVTaWRlYmFyJywgbGFiZWw6ICdXaWRlIHNpZGViYXInLCBkZXNjOiAnTW92ZSBwYW5lbHMgYW5kIHN0YXR1cyBkZXRhaWxzIHRvIGEgcmlnaHQgc2lkZWJhciB3aGVuIHRoZSB0ZXJtaW5hbCBpcyB3aWRlciB0aGFuIDE2MCBjb2x1bW5zJywgcGF0aDogJ2Rpc3BsYXkud2lkZVNpZGViYXInIH0sXG4gIF1cblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9XCJDb25maWd1cmF0aW9uXCIgaGludD1cInRhYjogbmV4dCBzZXR0aW5nICBzcGFjZS9lbnRlcjogY2hhbmdlICBlc2M6IGNsb3NlXCIgZnVsbFNjcmVlbj5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIG1hcmdpblRvcDogMSwgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDxGaWVsZExpc3QgZm9jdXNlZD17Zm9jdXNlZH0gaW5pdGlhbEZvY3VzPVwiY2xvdWRzXCIgc2Nyb2xsYmFyIGZvY3VzUGFkZGluZz17MX0+XG4gICAgICAgICAge2ZpZWxkcy5tYXAoKGZpZWxkKSA9PiAoXG4gICAgICAgICAgICA8RmllbGQga2V5PXtmaWVsZC5uYW1lfSBuYW1lPXtmaWVsZC5uYW1lfT5cbiAgICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiAoXG4gICAgICAgICAgICAgICAgPENvbmZpZ0ZpZWxkIGZpZWxkPXtmaWVsZH0gdmFsdWU9e3ZhbHVlc1tmaWVsZC5uYW1lXX0gZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvbkNoYW5nZT17KHZhbHVlKSA9PiBvbkNoYW5nZShmaWVsZC5uYW1lLCB2YWx1ZSl9IC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICkpfVxuICAgICAgICAgIDxGaWVsZCBuYW1lPVwicmVzZWFyY2hNb2RlbFwiPlxuICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTW9kZWxGaWVsZCBtb2RlbD17dmFsdWVzLnJlc2VhcmNoTW9kZWx9IGxhYmVsPVwiUGFyYWxsZWwgd29ya2VyIG1vZGVsXCIgcGF0aD1cIm1vZGVscy5yZXNlYXJjaFdvcmtlclwiIGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25QaWNrPXtvblBpY2tSZXNlYXJjaE1vZGVsfSAvPn1cbiAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgIDxGaWVsZCBuYW1lPVwic2hlbGxNb2RlbFwiPlxuICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTW9kZWxGaWVsZCBtb2RlbD17dmFsdWVzLnNoZWxsTW9kZWx9IGxhYmVsPVwiU2hlbGwgbW9kZWxcIiBwYXRoPVwibW9kZWxzLnNoZWxsXCIgZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvblBpY2s9e29uUGlja1NoZWxsTW9kZWx9IC8+fVxuICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAge1sncGFydGljaXBhbnRBJywgJ3BhcnRpY2lwYW50QiddLm1hcCgocm9sZSkgPT4gKFxuICAgICAgICAgICAgPEZpZWxkIG5hbWU9e2Ake3JvbGV9TW9kZWxgfT5cbiAgICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTW9kZWxGaWVsZCBtb2RlbD17dmFsdWVzW2Ake3JvbGV9TW9kZWxgXX0gbGFiZWw9e2BQYXJ0aWNpcGFudCAke3JvbGUgPT09ICdwYXJ0aWNpcGFudEEnID8gJ0EnIDogJ0InfSBtb2RlbGB9IHBhdGg9e2Btb2RlbHMuJHtyb2xlfWB9IGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25QaWNrPXsoKSA9PiBvblBpY2tQYXJ0aWNpcGFudE1vZGVsKHJvbGUpfSAvPn1cbiAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgICAgPEZpZWxkIG5hbWU9XCJkZWxpYmVyYXRpb25Nb2RlbFwiPlxuICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTW9kZWxGaWVsZCBtb2RlbD17dmFsdWVzLmRlbGliZXJhdGlvbk1vZGVsfSBsYWJlbD1cIlN5bnRoZXNpcyBtb2RlbFwiIHBhdGg9XCJtb2RlbHMuZGVsaWJlcmF0aW9uXCIgZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvblBpY2s9e29uUGlja0RlbGliZXJhdGlvbk1vZGVsfSAvPn1cbiAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgIDxGaWVsZCBuYW1lPVwicmVzZWFyY2hBZ2VudExpbWl0XCI+XG4gICAgICAgICAgICB7KHsgZm9jdXNlZDogZmllbGRGb2N1c2VkIH0pID0+IDxDb25maWdOdW1iZXJGaWVsZCB2YWx1ZT17dmFsdWVzLnJlc2VhcmNoQWdlbnRMaW1pdH0gZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvbkNoYW5nZT17KHZhbHVlKSA9PiBvbkNoYW5nZSgncmVzZWFyY2hBZ2VudExpbWl0JywgdmFsdWUpfSAvPn1cbiAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICA8L0ZpZWxkTGlzdD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gU2NvcGVUYWJzKHsgc2NvcGVzLCBhY3RpdmUgfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICB7c2NvcGVzLm1hcCgocywgaSkgPT4gKFxuICAgICAgICA8dGV4dCBrZXk9e3N9IHN0eWxlPXt7IGNvbG9yOiBpID09PSBhY3RpdmUgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiBpID09PSBhY3RpdmUgfX0+e2Ake2kgPiAwID8gJyAgJyA6ICcnfSR7cyA9PT0gJ2NoZWNrb3V0JyA/ICd0aGlzIGNoZWNrb3V0JyA6IHN9YH08L3RleHQ+XG4gICAgICApKX1cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gTW9kZWxQYW5lbCh7IG1vZGVscywgY3VycmVudCwgZGVmYXVsdE5hbWUsIGZvY3VzZWQsIG9uUGljaywgb25QaWNrRGVmYXVsdCwgb25DbG9zZSwgdGl0bGUgPSAnU2VsZWN0IG1vZGVsJywgaGludCA9ICdlbnRlcjogdGhpcyBzZXNzaW9uICBjdHJsK3M6IHNldCBhcyBkZWZhdWx0ICBlc2M6IGNsb3NlJyB9KSB7XG4gIGNvbnN0IFtjdXJzb3IsIHNldEN1cnNvcl0gPSBjcmVhdGVTaWduYWwobW9kZWxzWzBdIHx8IG51bGwpXG4gIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCByYW5rZWRNb2RlbHMgPSByYW5rRnV6enkobW9kZWxzLCBxdWVyeSgpLCAocSwgbW9kZWwpID0+IGZ1enp5U2NvcmUocSwgbW9kZWwubmFtZSkpXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJyAmJiBjdXJzb3IoKSkge1xuICAgICAgb25QaWNrRGVmYXVsdChjdXJzb3IoKSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9e3RpdGxlfSBoaW50PXtoaW50fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogMTIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgY291bnRlclxuICAgICAgICAgIGl0ZW1zPXtyYW5rZWRNb2RlbHN9XG4gICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBtb2RlbHMuLi5cIlxuICAgICAgICAgIGZpbHRlcj17KCkgPT4gdHJ1ZX1cbiAgICAgICAgICBvbkNoYW5nZT17c2V0UXVlcnl9XG4gICAgICAgICAgb25DdXJzb3JDaGFuZ2U9e3NldEN1cnNvcn1cbiAgICAgICAgICBvblN1Ym1pdD17b25QaWNrfVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICBpdGVtSGVpZ2h0PXsyfVxuICAgICAgICAgIHNjcm9sbG9mZj17MX1cbiAgICAgICAgICByZW5kZXJJdGVtPXsobSwgeyBzZWxlY3RlZCwgZm9jdXNlZDogZiB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvZmYgPSBtLmF2YWlsYWJsZSA9PT0gZmFsc2VcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBzZWxlY3RlZCA/IChmID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGJvbGQ6ICFvZmYsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBvZmYgPyBNVVRFRCA6IEZHIH19PnttLm5hbWV9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAge20ubmFtZSA9PT0gY3VycmVudCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogYWNjZW50KCkgfX0+eycgXHUyNzEzJ308L3RleHQ+fVxuICAgICAgICAgICAgICAgICAge20ubmFtZSA9PT0gZGVmYXVsdE5hbWUgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PnsnICBkZWZhdWx0J308L3RleHQ+fVxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PlxuICAgICAgICAgICAgICAgICAgICB7b2ZmID8gYG5lZWRzICR7bS5rZXlIaW50fWAgOiBtLnByaWNlID8gYCQke20ucHJpY2UuaW59IGluICAkJHttLnByaWNlLm91dH0gb3V0YCA6IG0ucHJvdmlkZXIgPT09ICdjb2RleCcgPyAnc3Vic2NyaXB0aW9uJyA6ICdwcmljZSB1bmtub3duJ31cbiAgICAgICAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e20uZGVzY308L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhpc3RvcnlQYW5lbCh7IHByb21wdHMsIHNjb3Blcywgc2NvcGVJbmRleCwgZm9jdXNlZCwgb25QaWNrLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW3ByZXZpZXcsIHNldFByZXZpZXddID0gY3JlYXRlU2lnbmFsKHByb21wdHNbMF0gfHwgbnVsbClcbiAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IGFueU1hdGNoID0gcHJvbXB0cy5zb21lKChwKSA9PiBmdXp6eVNjb3JlKHF1ZXJ5KCksIHAudGV4dCkgPj0gMClcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lXG4gICAgICB0aXRsZT1cIlNlYXJjaCBwcm9tcHRzXCJcbiAgICAgIGhpbnQ9XCJcdTIxOTFcdTIxOTMgdG8gbW92ZSAgY3RybCtzIHNjb3BlICBlbnRlciB0byBlZGl0ICBlc2MgdG8gY2xvc2VcIlxuICAgICAgcmlnaHQ9ezxTY29wZVRhYnMgc2NvcGVzPXtzY29wZXN9IGFjdGl2ZT17c2NvcGVJbmRleH0gLz59XG4gICAgPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAxMiwgbWFyZ2luVG9wOiAxLCBnYXA6IDIgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHdpZHRoOiAnNTAlJyB9fT5cbiAgICAgICAgICA8UGlja0xpc3RcbiAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgIGl0ZW1zPXtwcm9tcHRzfVxuICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZmlsdGVyIHByb21wdHMuLi5cIlxuICAgICAgICAgICAgZmlsdGVyPXsocSwgcCkgPT4gZnV6enlTY29yZShxLCBwLnRleHQpID49IDB9XG4gICAgICAgICAgICBvbkNoYW5nZT17c2V0UXVlcnl9XG4gICAgICAgICAgICBvbkN1cnNvckNoYW5nZT17KHApID0+IHNldFByZXZpZXcocCl9XG4gICAgICAgICAgICBvblN1Ym1pdD17KHApID0+IG9uUGljayhwLnRleHQpfVxuICAgICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyhwLCB7IHNlbGVjdGVkLCBmb2N1c2VkOiBmIH0pID0+IChcbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgYmc6IHNlbGVjdGVkID8gKGYgPyBhY2NlbnQoKSA6IFNFTEVDVF9CRykgOiBudWxsLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IEZHIH19PntwLnRleHQucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAgJHt0aW1lQWdvKHAuYXQpfWB9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgIHthbnlNYXRjaCAmJiBwcmV2aWV3KCkgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+e3ByZXZpZXcoKS50ZXh0LnNsaWNlKDAsIDIwMDApfTwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIG1hdGNoaW5nIHByb21wdHM8L3RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJld2luZFBpY2tQYW5lbCh7IGVudHJpZXMsIHN0YXRzLCBmb2N1c2VkLCBvblBpY2ssIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbcHJldmlldywgc2V0UHJldmlld10gPSBjcmVhdGVTaWduYWwoZW50cmllc1swXSB8fCBudWxsKVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9XCJSZXdpbmQgdG8gYSBtZXNzYWdlXCIgaGludD1cIlx1MjE5MVx1MjE5MyB0byBtb3ZlICBlbnRlciB0byBjaG9vc2UgIGVzYyB0byBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAxMiwgbWFyZ2luVG9wOiAxLCBnYXA6IDIgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHdpZHRoOiAnNTAlJyB9fT5cbiAgICAgICAgICA8UGlja0xpc3RcbiAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgIGl0ZW1zPXtlbnRyaWVzfVxuICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZmlsdGVyIG1lc3NhZ2VzLi4uXCJcbiAgICAgICAgICAgIGZpbHRlcj17KHEsIG0pID0+IGZ1enp5U2NvcmUocSwgbS50ZXh0KSA+PSAwfVxuICAgICAgICAgICAgb25DdXJzb3JDaGFuZ2U9eyhtKSA9PiBzZXRQcmV2aWV3KG0pfVxuICAgICAgICAgICAgb25TdWJtaXQ9e29uUGlja31cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICByZW5kZXJJdGVtPXsobSwgeyBzZWxlY3RlZCwgZm9jdXNlZDogZiB9KSA9PiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBzZWxlY3RlZCA/IChmID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGRyB9fT57bS50ZXh0LnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgICR7c3RhdHMobS5pbmRleCkubXNnc30gYWZ0ZXJgfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICB7cHJldmlldygpID8gKFxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgcmV3aW5kaW5nIGhlcmUgZHJvcHMgJHtzdGF0cyhwcmV2aWV3KCkuaW5kZXgpLm1zZ3N9IGVudHJpZXNgfTwvdGV4dD5cbiAgICAgICAgICAgICAge3N0YXRzKHByZXZpZXcoKS5pbmRleCkuZWRpdHMubWFwKChtLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgIFx1MjFBOSAke20udGl0bGV9YH08L3RleHQ+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+e3ByZXZpZXcoKS50ZXh0LnNsaWNlKDAsIDIwMDApfTwvdGV4dD5cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gbWF0Y2hpbmcgbWVzc2FnZXM8L3RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJld2luZEFjdGlvblBhbmVsKHsgdGFyZ2V0LCBvcHRpb25zLCBmb2N1c2VkLCBvblN1Ym1pdCwgb25CYWNrIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PlJld2luZCBvcHRpb25zPC90ZXh0PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsndG86ICd9PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBGR19TT0ZUIH19Pnt0YXJnZXQudGV4dC5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxNZW51XG4gICAgICAgICAgY291bnRlclxuICAgICAgICAgIGl0ZW1zPXtvcHRpb25zfVxuICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgbWF4VmlzaWJsZT17NH1cbiAgICAgICAgICBpdGVtSGVpZ2h0PXsyfVxuICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICB2aW1LZXlzXG4gICAgICAgICAgb25TdWJtaXQ9e29uU3VibWl0fVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkJhY2t9XG4gICAgICAgICAgcmVuZGVySXRlbT17KG8sIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57by5sYWJlbH08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICR7by5kZXNjfWB9PC90ZXh0PlxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PmVudGVyIHRvIGNvbmZpcm0gIGVzYyB0byBwaWNrIGEgZGlmZmVyZW50IG1lc3NhZ2U8L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gdXNlRXNjYXBlKGZvY3VzZWQsIG9uQ2xvc2UpIHtcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKCkpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzdW1lUGFuZWwoeyBzZXNzaW9ucywgc2NvcGVzLCBzY29wZUluZGV4LCBsb2FkaW5nLCBmb2N1c2VkLCBjdXJyZW50SWQsIG9uUGljaywgb25EZWxldGUsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbcHJldmlldywgc2V0UHJldmlld10gPSBjcmVhdGVTaWduYWwoc2Vzc2lvbnNbMF0gfHwgbnVsbClcbiAgY29uc3QgW3BhbmUsIHNldFBhbmVdID0gY3JlYXRlU2lnbmFsKCdsaXN0JylcbiAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IHJhbmtlZFNlc3Npb25zID0gcmFua0Z1enp5KHNlc3Npb25zLCBxdWVyeSgpLCAocSwgc2Vzc2lvbikgPT4ge1xuICAgIGNvbnN0IGN1c3RvbVNjb3JlID0gc2Vzc2lvbi5jdXN0b21UaXRsZSA/IGZ1enp5U2NvcmUocSwgc2Vzc2lvbi5jdXN0b21UaXRsZSkgOiAtMVxuICAgIGlmIChjdXN0b21TY29yZSA+PSAwKSByZXR1cm4gMjBfMDAwICsgY3VzdG9tU2NvcmVcbiAgICByZXR1cm4gTWF0aC5tYXgoZnV6enlTY29yZShxLCBzZXNzaW9uLmF1dG9tYXRpY1RpdGxlIHx8IHNlc3Npb24udGl0bGUpLCBmdXp6eVNjb3JlKHEsIHNlc3Npb24uY2hlY2tvdXQgfHwgJycpKVxuICB9KVxuICBjb25zdCBzaG93Q2hlY2tvdXRzID0gbmV3IFNldChzZXNzaW9ucy5tYXAoKHNlc3Npb24pID0+IHNlc3Npb24uY2hlY2tvdXQpLmZpbHRlcihCb29sZWFuKSkuc2l6ZSA+IDFcbiAgY29uc3Qgc2VsZWN0ZWRTZXNzaW9uID0gKCkgPT4ge1xuICAgIGlmIChsb2FkaW5nKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IHNlbGVjdGVkID0gcHJldmlldygpXG4gICAgcmV0dXJuIHNlc3Npb25zLmluY2x1ZGVzKHNlbGVjdGVkKSA/IHNlbGVjdGVkIDogbnVsbFxuICB9XG4gIHVzZUVzY2FwZSgoKSA9PiBmb2N1c2VkLCBvbkNsb3NlKVxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICd0YWInICYmICFldmVudC5jdHJsICYmICFldmVudC5tZXRhKSB7XG4gICAgICBzZXRQYW5lKChjdXJyZW50KSA9PiBjdXJyZW50ID09PSAnbGlzdCcgPyAncHJldmlldycgOiAnbGlzdCcpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0ZWRTZXNzaW9uKClcbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4JyAmJiBzZWxlY3RlZCkge1xuICAgICAgb25EZWxldGUoc2VsZWN0ZWQpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lXG4gICAgICB0aXRsZT1cIlJlc3VtZSBhIHNlc3Npb25cIlxuICAgICAgaGludD1cIlx1MjE5MVx1MjE5MyB0byBtb3ZlICB0YWI6IHByZXZpZXcgIGN0cmwrcyBzY29wZSAgZW50ZXIgdG8gcmVzdW1lICBjdHJsK3ggZGVsZXRlICBlc2MgdG8gY2xvc2VcIlxuICAgICAgcmlnaHQ9ezxTY29wZVRhYnMgc2NvcGVzPXtzY29wZXN9IGFjdGl2ZT17c2NvcGVJbmRleH0gLz59XG4gICAgICBmdWxsU2NyZWVuXG4gICAgPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIG1hcmdpblRvcDogMSwgZ2FwOiAxIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6ICc0MCUnLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5sb2FkaW5nIHNlc3Npb25zLi4uPC90ZXh0PlxuICAgICAgICAgICkgOiBzZXNzaW9ucy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gc2Vzc2lvbnMgaGVyZSB5ZXQ8L3RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxQaWNrTGlzdFxuICAgICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICAgIGl0ZW1zPXtyYW5rZWRTZXNzaW9uc31cbiAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBwYW5lKCkgPT09ICdsaXN0JyAmJiAhbG9hZGluZ31cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgc2Vzc2lvbnMuLi5cIlxuICAgICAgICAgICAgICBmaWx0ZXI9eygpID0+IHRydWV9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRRdWVyeX1cbiAgICAgICAgICAgICAgb25DdXJzb3JDaGFuZ2U9eyhzKSA9PiBzZXRQcmV2aWV3KHMpfVxuICAgICAgICAgICAgICBvblN1Ym1pdD17b25QaWNrfVxuICAgICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgICAgcmVuZGVySXRlbT17KHMsIHsgc2VsZWN0ZWQsIGZvY3VzZWQ6IGYgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBzZWxlY3RlZCA/IChmID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogKHNob3dDaGVja291dHMgPyBzLmNvbG9yIDogbnVsbCksIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgICAge3Nob3dDaGVja291dHMgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVELCBiZzogc2VsZWN0ZWQgPyBudWxsIDogcy5jb2xvciB9fT57YCR7cy5jaGVja291dH0gIGB9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGRywgYmc6IHNlbGVjdGVkIHx8IHNob3dDaGVja291dHMgPyBudWxsIDogcy5jb2xvciB9fT57cy50aXRsZS5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIHtzLmhlYWRlci5pZCA9PT0gY3VycmVudElkICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBhY2NlbnQoKSB9fT4gY3VycmVudDwvdGV4dD59XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgICR7dGltZUFnbyhzLmF0KX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDxQYW5lbERpdmlkZXIgLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDMgfX0+XG4gICAgICAgICAge3NlbGVjdGVkU2Vzc2lvbigpID8gKFxuICAgICAgICAgICAgPFNjcm9sbEJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSBmb2N1c2VkPXtmb2N1c2VkICYmIHBhbmUoKSA9PT0gJ3ByZXZpZXcnfSBzY3JvbGxiYXI+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtzZWxlY3RlZFNlc3Npb24oKS50dXJuc30gJHtzZWxlY3RlZFNlc3Npb24oKS50dXJucyA9PT0gMSA/ICd0dXJuJyA6ICd0dXJucyd9ICAke3RpbWVBZ28oc2VsZWN0ZWRTZXNzaW9uKCkuYXQpfSAgJHtzaG9ydGVuSG9tZShzZWxlY3RlZFNlc3Npb24oKS5oZWFkZXIucm9vdCl9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBoZWlnaHQ6IDEgfX0gLz5cbiAgICAgICAgICAgICAgICB7KHNlbGVjdGVkU2Vzc2lvbigpLnByZXZpZXcgfHwgW10pLmxlbmd0aCA+IDAgPyAoXG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICAgICAgICB7c2VsZWN0ZWRTZXNzaW9uKCkucHJldmlld01lc3NhZ2VDb3VudCA+IHNlbGVjdGVkU2Vzc2lvbigpLnByZXZpZXcubGVuZ3RoICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Ake3NlbGVjdGVkU2Vzc2lvbigpLnByZXZpZXdNZXNzYWdlQ291bnQgLSBzZWxlY3RlZFNlc3Npb24oKS5wcmV2aWV3Lmxlbmd0aH0gZWFybGllciBtZXNzYWdlcyBvbWl0dGVkYH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHsoc2VsZWN0ZWRTZXNzaW9uKCkucHJldmlldyB8fCBbXSkubWFwKChtZXNzYWdlLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGJveCBrZXk9e2Ake21lc3NhZ2Uucm9sZX0tJHtpfWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IGkgPT09IDAgPyAwIDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBtZXNzYWdlLnJvbGUgPT09ICd1c2VyJyA/IEZHIDogTVVURUQgfX0+e21lc3NhZ2UudGV4dH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyB0cmFuc2NyaXB0IHByZXZpZXc8L3RleHQ+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHNlc3Npb25zPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNZW1vcnlQYW5lbCh7IG1lbW9yaWVzLCBzY29wZXMsIHNjb3BlSW5kZXgsIGZvY3VzZWQsIG9uVG9nZ2xlRGlzYWJsZWQsIG9uRm9yZ2V0LCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2N1cnNvckl0ZW0sIHNldEN1cnNvckl0ZW1dID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtwYW5lLCBzZXRQYW5lXSA9IGNyZWF0ZVNpZ25hbCgnbGlzdCcpXG4gIGNvbnN0IHByZXZpZXcgPSBtZW1vcmllcy5pbmNsdWRlcyhjdXJzb3JJdGVtKCkpID8gY3Vyc29ySXRlbSgpIDogbWVtb3JpZXNbMF0gfHwgbnVsbFxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCwgb25DbG9zZSlcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyAmJiAhZXZlbnQuY3RybCAmJiAhZXZlbnQubWV0YSkge1xuICAgICAgc2V0UGFuZSgocCkgPT4gKHAgPT09ICdsaXN0JyA/ICdwcmV2aWV3JyA6ICdsaXN0JykpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnICYmIHByZXZpZXcpIHtcbiAgICAgIG9uRm9yZ2V0KHByZXZpZXcpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lXG4gICAgICB0aXRsZT1cIk1lbW9yeVwiXG4gICAgICBoaW50PVwiXHUyMTkxXHUyMTkzIHRvIG1vdmUgIGVudGVyOiBlbmFibGUvZGlzYWJsZSAgdGFiOiBwcmV2aWV3ICBjdHJsK3Mgc2NvcGUgIGN0cmwreCBmb3JnZXQgKHR3aWNlKSAgZXNjIHRvIGNsb3NlXCJcbiAgICAgIHJpZ2h0PXs8U2NvcGVUYWJzIHNjb3Blcz17c2NvcGVzfSBhY3RpdmU9e3Njb3BlSW5kZXh9IC8+fVxuICAgICAgZnVsbFNjcmVlblxuICAgID5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtYXJnaW5Ub3A6IDEsIGdhcDogMSB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiAnNDAlJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAge21lbW9yaWVzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBtZW1vcmllcyBoZXJlIHlldDwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgICAgaXRlbXM9e21lbW9yaWVzfVxuICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIHBhbmUoKSA9PT0gJ2xpc3QnfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBtZW1vcmllcy4uLlwiXG4gICAgICAgICAgICAgIGZpbHRlcj17KHEsIG0pID0+IGZ1enp5U2NvcmUocSwgYCR7bS5uYW1lfSAke20uZGVzY3JpcHRpb259YCkgPj0gMH1cbiAgICAgICAgICAgICAgb25DdXJzb3JDaGFuZ2U9e3NldEN1cnNvckl0ZW19XG4gICAgICAgICAgICAgIG9uU3VibWl0PXtvblRvZ2dsZURpc2FibGVkfVxuICAgICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgICAgcmVuZGVySXRlbT17KG0sIHsgc2VsZWN0ZWQsIGZvY3VzZWQ6IGYgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBzZWxlY3RlZCA/IChmID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBpdGFsaWM6IG0uZGlzYWJsZWQsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiAobS5kaXNhYmxlZCA/IE1VVEVEIDogRkcpIH19PntgJHttLmRpc2FibGVkID8gJyAgICcgOiAnJ30ke20ubmFtZX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICAge20uZGlzYWJsZWQgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PiAgc3VwcHJlc3NlZDwvdGV4dD59XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgICR7bS5zY29wZX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDxQYW5lbERpdmlkZXIgLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDMgfX0+XG4gICAgICAgICAge3ByZXZpZXcgPyAoXG4gICAgICAgICAgICA8U2Nyb2xsQm94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgcGFuZSgpID09PSAncHJldmlldyd9IHNjcm9sbGJhcj5cbiAgICAgICAgICAgICAge3ByZXZpZXcuZGlzYWJsZWQgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBib2xkOiB0cnVlIH19PlNVUFBSRVNTRUQ8L3RleHQ+fVxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57cHJldmlldy5kZXNjcmlwdGlvbiB8fCAnbm8gZGVzY3JpcHRpb24nfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e3ByZXZpZXcuYm9keX08L3RleHQ+XG4gICAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIG1lbW9yaWVzPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFZmZvcnRQYW5lbCh7IGxldmVscywgY3VycmVudCwgZGVmYXVsdExldmVsLCBmb2N1c2VkLCBvblBpY2ssIG9uUGlja0RlZmF1bHQsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbY3Vyc29yLCBzZXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IGl0ZW1zID0gbGV2ZWxzXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJykge1xuICAgICAgb25QaWNrRGVmYXVsdChpdGVtc1tjdXJzb3IoKV0pXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBsYWJlbCA9IChsKSA9PiAobC5rZXkgPT09IG51bGwgPyAnZGVmYXVsdCcgOiBsLmtleSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPVwiVGhpbmtpbmcgZWZmb3J0XCIgaGludD1cImovayB0byBtb3ZlICBlbnRlcjogdGhpcyBzZXNzaW9uICBjdHJsK3M6IHNldCBhcyBkZWZhdWx0ICBlc2M6IGNsb3NlXCI+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxNZW51XG4gICAgICAgICAgY291bnRlclxuICAgICAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgICAgICBzZWxlY3RlZD17Y3Vyc29yKCl9XG4gICAgICAgICAgb25TZWxlY3Q9e3NldEN1cnNvcn1cbiAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgICAgdmltS2V5c1xuICAgICAgICAgIG9uU3VibWl0PXtvblBpY2t9XG4gICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgcmVuZGVySXRlbT17KGwsIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHIH19PntsYWJlbChsKS5wYWRFbmQoTWF0aC5tYXgoMTAsIGxhYmVsKGwpLmxlbmd0aCArIDEpKX08L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57bC5kZXNjfTwvdGV4dD5cbiAgICAgICAgICAgICAge2wua2V5ID09PSBjdXJyZW50ICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IE1VVEVEIH19PnsnICBcdTI3MTMnfTwvdGV4dD59XG4gICAgICAgICAgICAgIHtsLmtleSA9PT0gZGVmYXVsdExldmVsICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57JyAgIGRlZmF1bHQnfTwvdGV4dD59XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApfVxuICAgICAgICAvPlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTcGVlZFBhbmVsKHsgbGV2ZWxzLCBjdXJyZW50LCBkZWZhdWx0TGV2ZWwsIGZvY3VzZWQsIG9uUGljaywgb25QaWNrRGVmYXVsdCwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtjdXJzb3IsIHNldEN1cnNvcl0gPSBjcmVhdGVTaWduYWwoTWF0aC5tYXgoMCwgbGV2ZWxzLmZpbmRJbmRleCgobCkgPT4gbC5rZXkgPT09IGN1cnJlbnQpKSlcbiAgY29uc3QgaXRlbXMgPSBsZXZlbHNcblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3MnKSB7XG4gICAgICBvblBpY2tEZWZhdWx0KGl0ZW1zW2N1cnNvcigpXSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IGxhYmVsID0gKGwpID0+IGwua2V5ID09PSAnZmFzdCcgPyAnRmFzdCcgOiAnU3RhbmRhcmQnXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlNwZWVkXCIgaGludD1cImVudGVyOiBzZXNzaW9uICBjdHJsK3M6IGRlZmF1bHQgIGVzYzogY2xvc2VcIj5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPE1lbnVcbiAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgaXRlbXM9e2l0ZW1zfVxuICAgICAgICAgIHNlbGVjdGVkPXtjdXJzb3IoKX1cbiAgICAgICAgICBvblNlbGVjdD17c2V0Q3Vyc29yfVxuICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICB2aW1LZXlzXG4gICAgICAgICAgb25TdWJtaXQ9e29uUGlja31cbiAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICByZW5kZXJJdGVtPXsobCwgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkcgfX0+e2xhYmVsKGwpLnBhZEVuZChNYXRoLm1heCgxMCwgbGFiZWwobCkubGVuZ3RoICsgMSkpfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtsLnVzYWdlLnJlcGxhY2UoLyB1c2FnZSQvLCAnJyl9IGluY2x1ZGVkIHVzYWdlYH08L3RleHQ+XG4gICAgICAgICAgICAgIHtsLmtleSA9PT0gY3VycmVudCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57JyAgXHUyNzEzJ308L3RleHQ+fVxuICAgICAgICAgICAgICB7bC5rZXkgPT09IGRlZmF1bHRMZXZlbCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eycgICBkZWZhdWx0J308L3RleHQ+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gVGhlbWVQYW5lbCh7IHRoZW1lcywgcHJlZiwgZm9jdXNlZCwgb25QaWNrLCBvblByZXZpZXcsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbY3Vyc29yLCBzZXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKE1hdGgubWF4KDAsIHRoZW1lcy5maW5kSW5kZXgoKHQpID0+IHQua2V5ID09PSBwcmVmKSkpXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlRoZW1lXCIgaGludD1cImovayB0byBtb3ZlIGFuZCBwcmV2aWV3ICBlbnRlciB0byBhcHBseSAgZXNjOiBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8TWVudVxuICAgICAgICAgIGl0ZW1zPXt0aGVtZXN9XG4gICAgICAgICAgc2VsZWN0ZWQ9e2N1cnNvcigpfVxuICAgICAgICAgIG9uU2VsZWN0PXsoaSkgPT4ge1xuICAgICAgICAgICAgc2V0Q3Vyc29yKGkpXG4gICAgICAgICAgICBvblByZXZpZXcodGhlbWVzW2ldKVxuICAgICAgICAgIH19XG4gICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICBtYXhWaXNpYmxlPXs2fVxuICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICBvblN1Ym1pdD17b25QaWNrfVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgIHJlbmRlckl0ZW09eyh0LCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57dC5rZXkucGFkRW5kKE1hdGgubWF4KDEwLCB0LmtleS5sZW5ndGggKyAxKSl9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e3QuZGVzY308L3RleHQ+XG4gICAgICAgICAgICAgIHt0LmtleSA9PT0gcHJlZiAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57JyAgXHUyNzEzJ308L3RleHQ+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb250ZXh0T3ZlcnZpZXcoeyBvdmVydmlldyB9KSB7XG4gIGNvbnN0IHJldmVhbCA9IHVzZUFuaW1hdGVkKDAsIGVhc2UoNzAwKSlcbiAgY29uc3QgbGF5b3V0ID0gdXNlTGF5b3V0KClcbiAgcmV2ZWFsLnNldCgxKVxuICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIGxheW91dC53aWR0aCB8fCAxKVxuICBjb25zdCB2aXNpYmxlID0gTWF0aC5yb3VuZCh3aWR0aCAqIHJldmVhbCgpKVxuICBjb25zdCB1c2FnZVdpZHRoID0gTWF0aC5tYXgoMSwgd2lkdGggLSA1KVxuICBjb25zdCB0b3RhbCA9IG92ZXJ2aWV3LnNlZ21lbnRzLnJlZHVjZSgoc3VtLCBzZWdtZW50KSA9PiBzdW0gKyBzZWdtZW50LnRva2VucywgMClcbiAgY29uc3QgdXNlZCA9IG92ZXJ2aWV3Lm1lYXN1cmVkIHx8IHRvdGFsXG4gIGNvbnN0IHBlcmNlbnQgPSB1c2VkICYmIG92ZXJ2aWV3LmxpbWl0ID8gTWF0aC5taW4oMTAwLCB1c2VkIC8gb3ZlcnZpZXcubGltaXQgKiAxMDApIDogMFxuICBsZXQgYm91bmRhcnkgPSAwXG4gIGNvbnN0IGNlbGxzID0gW11cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHdpZHRoOyBpKyspIHtcbiAgICBjb25zdCBzZWdtZW50ID0gb3ZlcnZpZXcuc2VnbWVudHMuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgYm91bmRhcnkgKz0gaXRlbS50b2tlbnMgLyB0b3RhbCAqIHdpZHRoXG4gICAgICByZXR1cm4gaSA8IGJvdW5kYXJ5XG4gICAgfSlcbiAgICBib3VuZGFyeSA9IDBcbiAgICBjZWxscy5wdXNoKFxuICAgICAgPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogaSA+PSB2aXNpYmxlID8gUEFORUxfQkcgOiBzZWdtZW50Py5jb2xvciB8fCBNVVRFRCB9fT5cbiAgICAgICAge2kgPj0gdmlzaWJsZSA/ICcgJyA6IHNlZ21lbnQgPyAnXHUyNTg4JyA6ICdcdTI1OTEnfVxuICAgICAgPC90ZXh0PixcbiAgICApXG4gIH1cblxuICBjb25zdCBmb3JtYXRUb2tlbnMgPSAodG9rZW5zKSA9PiB0b2tlbnMgPCAxMDAwID8gYCR7TWF0aC5yb3VuZCh0b2tlbnMpfSB0b2tgIDogYCR7KHRva2VucyAvIDEwMDApLnRvRml4ZWQoMSl9a2BcbiAgY29uc3QgbGVnZW5kUm93cyA9ICgpID0+IHtcbiAgICBjb25zdCByb3dzID0gW1tdXVxuICAgIGxldCB1c2VkID0gMFxuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBvdmVydmlldy5zZWdtZW50cykge1xuICAgICAgY29uc3QgaXRlbVdpZHRoID0gc2VnbWVudC5sYWJlbC5sZW5ndGggKyBmb3JtYXRUb2tlbnMoc2VnbWVudC50b2tlbnMpLmxlbmd0aCArIDVcbiAgICAgIGlmICh1c2VkID4gMCAmJiB1c2VkICsgaXRlbVdpZHRoID4gTWF0aC5tYXgoMSwgbGF5b3V0LndpZHRoIHx8IDEpKSB7XG4gICAgICAgIHJvd3MucHVzaChbXSlcbiAgICAgICAgdXNlZCA9IDBcbiAgICAgIH1cbiAgICAgIHJvd3MuYXQoLTEpLnB1c2goc2VnbWVudClcbiAgICAgIHVzZWQgKz0gaXRlbVdpZHRoXG4gICAgfVxuICAgIHJldHVybiByb3dzXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIHtwZXJjZW50ID4gMCAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgICAgICA8QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17cGVyY2VudH0gaW5pdGlhbD17MH0gZHVyYXRpb249ezEwMDB9IGNvbG9yPXtwZXJjZW50ID49IDgwID8gUkVEIDogRkdfU09GVH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gYmFja2dyb3VuZD17U0VMRUNUX0JHfSBmb3JtYXQ9eyh2YWx1ZSkgPT4gY29udGV4dEJhcih2YWx1ZSwgdXNhZ2VXaWR0aCl9IC8+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHBlcmNlbnQgPj0gODAgPyBSRUQgOiBNVVRFRCB9fT57YCR7b3ZlcnZpZXcubWVhc3VyZWQgPyAnJyA6ICd+J30ke01hdGgucm91bmQocGVyY2VudCl9JWAucGFkU3RhcnQoNSl9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PntjZWxsc308L2JveD5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgIHtsZWdlbmRSb3dzKCkubWFwKChyb3csIHJvd0luZGV4KSA9PiAoXG4gICAgICAgICAgPGJveCBrZXk9e3Jvd0luZGV4fSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgIHtyb3cubWFwKChzZWdtZW50KSA9PiAoXG4gICAgICAgICAgICAgIDxib3gga2V5PXtzZWdtZW50LmxhYmVsfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgbWFyZ2luUmlnaHQ6IDIgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlZ21lbnQuY29sb3IgfX0+XHUyNUEwPC90ZXh0PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAke3NlZ21lbnQubGFiZWx9IGB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDxBbmltYXRlZFZhbHVlXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17c2VnbWVudC50b2tlbnN9XG4gICAgICAgICAgICAgICAgICBpbml0aWFsPXswfVxuICAgICAgICAgICAgICAgICAgZHVyYXRpb249ezIwMDB9XG4gICAgICAgICAgICAgICAgICBjb2xvcj17TVVURUR9XG4gICAgICAgICAgICAgICAgICBoaWdobGlnaHQ9e2FjY2VudCgpfVxuICAgICAgICAgICAgICAgICAgZm9ybWF0PXtmb3JtYXRUb2tlbnN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKSl9XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gSW5mb0xpc3RQYW5lbCh7IHRpdGxlLCByb3dzLCBvdmVydmlldywgZm9jdXNlZCwgb25DbG9zZSB9KSB7XG4gIHVzZUVzY2FwZSgoKSA9PiBmb2N1c2VkLCBvbkNsb3NlKVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9e3RpdGxlfSBoaW50PVwiai9rIG9yIFx1MjE5MVx1MjE5MyB0byBzY3JvbGwgIGVzYyBjbG9zZVwiPlxuICAgICAge292ZXJ2aWV3ICYmIDxDb250ZXh0T3ZlcnZpZXcgb3ZlcnZpZXc9e292ZXJ2aWV3fSAvPn1cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogMTQsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAge3Jvd3MubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ub3RoaW5nIGhlcmUgeWV0PC90ZXh0PlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxTY3JvbGxCb3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gZm9jdXNlZD17Zm9jdXNlZH0gc2Nyb2xsYmFyPlxuICAgICAgICAgICAge3Jvd3MubWFwKChyb3csIGkpID0+IChcbiAgICAgICAgICAgICAgPGJveCBrZXk9e2Ake3Jvdy5uYW1lfS0ke2l9YH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogaSA9PT0gMCA/IDAgOiAxIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e3Jvdy5uYW1lfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICAgICAgICAgIHtyb3cubm90ZSAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e3Jvdy5ub3RlfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pntyb3cuZGVzYyB8fCAnbm8gZGVzY3JpcHRpb24nfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgKX1cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gUHJvamVjdFBhbmVsKHsgcHJvamVjdHMsIGxvYWRpbmcsIGZvY3VzZWQsIG9uUGlja0NoZWNrb3V0LCBvblBpY2tTZXNzaW9uLCBvbkFkZFdvcmt0cmVlLCBvbkRlbGV0ZSwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IHJvd3MgPSBwcm9qZWN0cy5mbGF0TWFwKChwcm9qZWN0KSA9PiBwcm9qZWN0LmNoZWNrb3V0cy5tYXAoKGNoZWNrb3V0LCBpbmRleCkgPT4gKHtcbiAgICAuLi5jaGVja291dCxcbiAgICBwcm9qZWN0UGF0aDogcHJvamVjdC5wYXRoLFxuICAgIGdyb3VwZWQ6IHByb2plY3QuY2hlY2tvdXRzLmxlbmd0aCA+IDEsXG4gICAgZmlyc3Q6IGluZGV4ID09PSAwLFxuICAgIGxhc3Q6IGluZGV4ID09PSBwcm9qZWN0LmNoZWNrb3V0cy5sZW5ndGggLSAxLFxuICB9KSkpXG4gIGNvbnN0IFtwcmV2aWV3LCBzZXRQcmV2aWV3XSA9IGNyZWF0ZVNpZ25hbChyb3dzWzBdIHx8IG51bGwpXG4gIGNvbnN0IFtwYW5lLCBzZXRQYW5lXSA9IGNyZWF0ZVNpZ25hbCgncHJvamVjdHMnKVxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCwgb25DbG9zZSlcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyAmJiAhZXZlbnQuY3RybCAmJiAhZXZlbnQubWV0YSkge1xuICAgICAgaWYgKHByZXZpZXcoKT8uc2Vzc2lvbnMubGVuZ3RoKSBzZXRQYW5lKChjdXJyZW50KSA9PiBjdXJyZW50ID09PSAncHJvamVjdHMnID8gJ3Nlc3Npb25zJyA6ICdwcm9qZWN0cycpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChwYW5lKCkgPT09ICdwcm9qZWN0cycgJiYgZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd0JyAmJiBwcmV2aWV3KCkpIHtcbiAgICAgIG9uQWRkV29ya3RyZWUocHJldmlldygpKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocGFuZSgpID09PSAncHJvamVjdHMnICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcgJiYgcHJldmlldygpKSB7XG4gICAgICBvbkRlbGV0ZShwcmV2aWV3KCkpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBjaGVja291dExhYmVsID0gKHJvdykgPT4gYCR7cm93Lmxhc3QgPyAnXHUyNTE0XHUyNTAwJyA6ICdcdTI1MUNcdTI1MDAnfSAke3Jvdy5icmFuY2ggfHwgKHJvdy53b3JrdHJlZSA/IHJvdy5wYXRoIDogJ21haW4nKX1gXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlN3aXRjaCBwcm9qZWN0XCIgaGludD1cIlx1MjE5MVx1MjE5MyBtb3ZlICB0YWIgc3dpdGNoIHBhbmUgIGVudGVyIG9wZW4gIGN0cmwrdCBuZXcgd29ya3RyZWUgIGN0cmwreCBkZWxldGUgIGVzYyBjbG9zZVwiIGZ1bGxTY3JlZW4+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWFyZ2luVG9wOiAxLCBnYXA6IDEgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogJzQ0JScsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PmxvYWRpbmcgcHJvamVjdHMuLi48L3RleHQ+XG4gICAgICAgICAgKSA6IHJvd3MubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIGtub3duIHByb2plY3RzIHlldDwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgICAgaXRlbXM9e3Jvd3N9XG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgcGFuZSgpID09PSAncHJvamVjdHMnfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBwcm9qZWN0cy4uLlwiXG4gICAgICAgICAgICAgIGZpbHRlcj17KHF1ZXJ5LCByb3cpID0+IGZ1enp5U2NvcmUocXVlcnksIGAke3Jvdy5wcm9qZWN0UGF0aH0gJHtyb3cuYnJhbmNoIHx8ICcnfWApID49IDB9XG4gICAgICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXtzZXRQcmV2aWV3fVxuICAgICAgICAgICAgICBvblN1Ym1pdD17b25QaWNrQ2hlY2tvdXR9XG4gICAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgICByZW5kZXJJdGVtPXsocm93LCB7IHNlbGVjdGVkLCBmb2N1c2VkOiBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgICAgICB7cm93Lmdyb3VwZWQgJiYgcm93LmZpcnN0ICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRyB9fT57YFx1MjVCRSAke3Jvdy5wcm9qZWN0UGF0aH1gfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoYWN0aXZlID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IEZHIH19Pntyb3cuZ3JvdXBlZCA/IGAgICR7Y2hlY2tvdXRMYWJlbChyb3cpfWAgOiByb3cucHJvamVjdFBhdGh9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke3Jvdy5jdXJyZW50ID8gJ2N1cnJlbnQgICcgOiAnJ30ke3Jvdy5sYXRlc3QgPyB0aW1lQWdvKHJvdy5sYXRlc3QuYXQpIDogJ25vIHNlc3Npb25zJ31gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICAgPFBhbmVsRGl2aWRlciAvPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICB7cHJldmlldygpPy5zZXNzaW9ucy5sZW5ndGggPyAoXG4gICAgICAgICAgICA8UGlja0xpc3RcbiAgICAgICAgICAgICAga2V5PXtwcmV2aWV3KCkucm9vdH1cbiAgICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgICBpdGVtcz17cHJldmlldygpLnNlc3Npb25zfVxuICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIHBhbmUoKSA9PT0gJ3Nlc3Npb25zJ31cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgc2Vzc2lvbnMuLi5cIlxuICAgICAgICAgICAgICBmaWx0ZXI9eyhxdWVyeSwgc2Vzc2lvbikgPT4gZnV6enlTY29yZShxdWVyeSwgc2Vzc2lvbi50aXRsZSkgPj0gMH1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9e29uUGlja1Nlc3Npb259XG4gICAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgICByZW5kZXJJdGVtPXsoc2Vzc2lvbiwgeyBzZWxlY3RlZCwgZm9jdXNlZDogYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoYWN0aXZlID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57c2Vzc2lvbi50aXRsZS5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAgJHtzZXNzaW9uLnR1cm5zfSAke3Nlc3Npb24udHVybnMgPT09IDEgPyAndHVybicgOiAndHVybnMnfSAgJHt0aW1lQWdvKHNlc3Npb24uYXQpfWB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHNlc3Npb25zPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb25uZWN0UGFuZWwoeyBwcm92aWRlcnMsIGZvY3VzZWQsIG9uQ29ubmVjdCwgb25EaXNjb25uZWN0LCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2luZGV4LCBzZXRJbmRleF0gPSBjcmVhdGVTaWduYWwoMClcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQsIG9uQ2xvc2UpXG5cbiAgY29uc3Qgc2VsZWN0ZWQgPSAoKSA9PiBwcm92aWRlcnNbTWF0aC5taW4oaW5kZXgoKSwgcHJvdmlkZXJzLmxlbmd0aCAtIDEpXSB8fCBudWxsXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBjb25zdCBwID0gc2VsZWN0ZWQoKVxuICAgIGlmIChwICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcgJiYgcC5jb25uZWN0ZWQpIHtcbiAgICAgIG9uRGlzY29ubmVjdChwKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIkNvbm5lY3QgYSBzdWJzY3JpcHRpb25cIiBoaW50PVwiZW50ZXIgc2lnbiBpbiAgY3RybCt4IGRpc2Nvbm5lY3QgKHR3aWNlKSAgZXNjIGNsb3NlXCI+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxNZW51XG4gICAgICAgICAgY291bnRlclxuICAgICAgICAgIGl0ZW1zPXtwcm92aWRlcnN9XG4gICAgICAgICAgc2VsZWN0ZWQ9e2luZGV4KCl9XG4gICAgICAgICAgb25TZWxlY3Q9e3NldEluZGV4fVxuICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICB2aW1LZXlzXG4gICAgICAgICAgb25TdWJtaXQ9eyhwKSA9PiBvbkNvbm5lY3QocCl9XG4gICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgcmVuZGVySXRlbT17KHAsIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBwLmNvbm5lY3RlZCA/IGFjY2VudCgpIDogTVVURUQgfX0+e3AuY29ubmVjdGVkID8gJ1x1MjVBQScgOiAnXHUyNUFCJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHIH19PntgICR7cC5sYWJlbH0gIGB9PC90ZXh0PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBNVVRFRCB9fT5cbiAgICAgICAgICAgICAgICAgIHtwLmNvbm5lY3RlZCA/IGBjb25uZWN0ZWQke3AuZW1haWwgPyBgIGFzICR7cC5lbWFpbH1gIDogJyd9YCA6ICdub3QgY29ubmVjdGVkJ31cbiAgICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gV2FrZXVwc1BhbmVsKHsgd2FrZXVwcywgZm9jdXNlZCwgb25DYW5jZWwsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbaW5kZXgsIHNldEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbdGljaywgc2V0VGlja10gPSBjcmVhdGVTaWduYWwoMClcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQsIG9uQ2xvc2UpXG4gIHVzZUludGVydmFsKCgpID0+IHNldFRpY2soKHQpID0+IHQgKyAxKSwgMTAwMClcbiAgdm9pZCB0aWNrKClcblxuICBjb25zdCBzZWxlY3RlZCA9ICgpID0+IHdha2V1cHNbTWF0aC5taW4oaW5kZXgoKSwgd2FrZXVwcy5sZW5ndGggLSAxKV0gfHwgbnVsbFxuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgY29uc3QgdyA9IHNlbGVjdGVkKClcbiAgICBpZiAodyAmJiBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnKSB7XG4gICAgICBvbkNhbmNlbCh3KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgY291bnRkb3duID0gKGF0KSA9PiB7XG4gICAgY29uc3Qgc2VjcyA9IE1hdGgubWF4KDAsIE1hdGgucm91bmQoKGF0IC0gRGF0ZS5ub3coKSkgLyAxMDAwKSlcbiAgICBpZiAoc2VjcyA8IDYwKSByZXR1cm4gYGluICR7c2Vjc31zYFxuICAgIGNvbnN0IG1pbnMgPSBNYXRoLmZsb29yKHNlY3MgLyA2MClcbiAgICBpZiAobWlucyA8IDYwKSByZXR1cm4gYGluICR7bWluc31tICR7c2VjcyAlIDYwfXNgXG4gICAgcmV0dXJuIGBpbiAke01hdGguZmxvb3IobWlucyAvIDYwKX1oICR7bWlucyAlIDYwfW1gXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPVwiU2NoZWR1bGVkIHdha2UtdXBzXCIgaGludD1cImovayB0byBtb3ZlICBlbnRlciBvciBjdHJsK3ggY2FuY2VsICh0d2ljZSkgIGVzYyBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICB7d2FrZXVwcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHBlbmRpbmcgd2FrZS11cHMgIHRoZSBhZ2VudCBzY2hlZHVsZXMgdGhlbSB3aXRoIHNjaGVkdWxlX3dha2V1cDwvdGV4dD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8TWVudVxuICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgaXRlbXM9e3dha2V1cHN9XG4gICAgICAgICAgICBzZWxlY3RlZD17aW5kZXgoKX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRJbmRleH1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgICAgaXRlbUhlaWdodD17Mn1cbiAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICAgIG9uU3VibWl0PXsodykgPT4gb25DYW5jZWwodyl9XG4gICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyh3LCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57YFx1MjNGMCAke3cuaWR9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2NvdW50ZG93bih3LmF0KX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICR7bmV3IERhdGUody5hdCkudG9Mb2NhbGVUaW1lU3RyaW5nKCl9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxLCBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57JyAgICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogRkdfU09GVCB9fT57dy5ub3RlLnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZnVuY3Rpb24gbWNwU3RhdHVzKHN0YXR1cykge1xuICBjb25zdCBwYWxldHRlID0ge1xuICAgIGNvbm5lY3RlZDogeyBpY29uOiAnXHUyNUFBJywgY29sb3I6IGFjY2VudCgpIH0sXG4gICAgY29ubmVjdGluZzogeyBpY29uOiAnXHUyNUNDJywgY29sb3I6ICcjZmJiZjI0JyB9LFxuICAgIGVycm9yOiB7IGljb246ICdcdTI3MTcnLCBjb2xvcjogUkVEIH0sXG4gICAgZGlzYWJsZWQ6IHsgaWNvbjogJ1x1MjVBQicsIGNvbG9yOiBNVVRFRCB9LFxuICAgIGlkbGU6IHsgaWNvbjogJ1x1MjVBQicsIGNvbG9yOiBNVVRFRCB9LFxuICB9XG4gIHJldHVybiBwYWxldHRlW3N0YXR1c10gfHwgcGFsZXR0ZS5pZGxlXG59XG5cbmZ1bmN0aW9uIEZvcm1GaWVsZCh7IGxhYmVsLCBhY3RpdmUsIGNoaWxkcmVuIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+e2xhYmVsfTwvdGV4dD5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gTWNwU2VydmVyRm9ybSh7IGZvY3VzZWQsIHNlcnZlciwgb25TYXZlLCBvbkludmFsaWQsIG9uQ2FuY2VsIH0pIHtcbiAgY29uc3QgaW5pdGlhbCA9IHNlcnZlciA/IHBhcnNlU2VydmVyU3BlYyhzZXJ2ZXIuY29tbWFuZCkgOiBudWxsXG4gIGNvbnN0IGVkaXRpbmcgPSAhIXNlcnZlclxuICBjb25zdCBbbmFtZSwgc2V0TmFtZV0gPSBjcmVhdGVTaWduYWwoc2VydmVyPy5uYW1lIHx8ICcnKVxuICBjb25zdCBbc2NvcGUsIHNldFNjb3BlXSA9IGNyZWF0ZVNpZ25hbChzZXJ2ZXI/LnNjb3BlIHx8ICdnbG9iYWwnKVxuICBjb25zdCBbdHJhbnNwb3J0LCBzZXRUcmFuc3BvcnRdID0gY3JlYXRlU2lnbmFsKGluaXRpYWw/LnR5cGUgfHwgJ3N0ZGlvJylcbiAgY29uc3QgW3RhcmdldCwgc2V0VGFyZ2V0XSA9IGNyZWF0ZVNpZ25hbChpbml0aWFsPy50eXBlID09PSAnaHR0cCcgPyBpbml0aWFsLnVybCA6IHNlcnZlcj8uY29tbWFuZCB8fCAnJylcbiAgY29uc3QgaW5pdGlhbEhlYWRlcnMgPSBpbml0aWFsPy50eXBlID09PSAnaHR0cCdcbiAgICA/IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3Qua2V5cyhpbml0aWFsLmhlYWRlcnMpLm1hcCgobmFtZSkgPT4gW25hbWUsIFJFREFDVEVEX0hFQURFUl0pKVxuICAgIDoge31cbiAgY29uc3QgW2hlYWRlcnMsIHNldEhlYWRlcnNdID0gY3JlYXRlU2lnbmFsKGZvcm1hdEh0dHBTZXJ2ZXJTcGVjKCcnLCBpbml0aWFsSGVhZGVycykudHJpbSgpKVxuXG4gIGNvbnN0IGZtID0gdXNlRm9jdXMoeyBpbml0aWFsOiBlZGl0aW5nID8gJ3RyYW5zcG9ydCcgOiAnbmFtZScgfSlcbiAgaWYgKCFlZGl0aW5nKSB7XG4gICAgZm0uaXRlbSgnbmFtZScpXG4gICAgZm0uaXRlbSgnc2NvcGUnKVxuICB9XG4gIGZtLml0ZW0oJ3RyYW5zcG9ydCcpXG4gIGZtLml0ZW0oJ3RhcmdldCcpXG4gIGlmICh0cmFuc3BvcnQoKSA9PT0gJ2h0dHAnKSBmbS5pdGVtKCdoZWFkZXJzJylcbiAgZm0uaXRlbSgnc2F2ZScpXG4gIGZtLml0ZW0oJ2NhbmNlbCcpXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DYW5jZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgaHR0cCA9IHRyYW5zcG9ydCgpID09PSAnaHR0cCdcblxuICBjb25zdCBzdWJtaXQgPSAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmVyTmFtZSA9IG5hbWUoKS50cmltKClcbiAgICBjb25zdCB2YWx1ZSA9IHRhcmdldCgpLnRyaW0oKVxuICAgIGlmICghc2VydmVyTmFtZSB8fCAvXFxzLy50ZXN0KHNlcnZlck5hbWUpKSByZXR1cm4gb25JbnZhbGlkKCduYW1lIGlzIHJlcXVpcmVkIGFuZCBjYW5ub3QgY29udGFpbiBzcGFjZXMnKVxuICAgIGlmICghdmFsdWUpIHJldHVybiBvbkludmFsaWQoaHR0cCA/ICd1cmwgaXMgcmVxdWlyZWQnIDogJ2NvbW1hbmQgaXMgcmVxdWlyZWQnKVxuICAgIGlmIChodHRwICYmICEvXmh0dHBzPzpcXC9cXC8vLnRlc3QodmFsdWUpKSByZXR1cm4gb25JbnZhbGlkKCd1cmwgbXVzdCBzdGFydCB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly8nKVxuICAgIGlmICghaHR0cCAmJiAvXmh0dHBzPzpcXC9cXC8vLnRlc3QodmFsdWUpKSByZXR1cm4gb25JbnZhbGlkKCdhIHN0ZGlvIGNvbW1hbmQgY2Fubm90IHN0YXJ0IHdpdGggYSB1cmw7IHBpY2sgdGhlIGh0dHAgdHJhbnNwb3J0JylcbiAgICBjb25zdCBleHRyYSA9IGhlYWRlcnMoKS50cmltKClcbiAgICBsZXQgc3BlYyA9IGh0dHAgJiYgZXh0cmEgPyBgJHt2YWx1ZX0gJHtleHRyYX1gIDogdmFsdWVcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VTZXJ2ZXJTcGVjKHNwZWMpXG4gICAgICBpZiAocGFyc2VkLnR5cGUgPT09ICdodHRwJyAmJiBpbml0aWFsPy50eXBlID09PSAnaHR0cCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBbaGVhZGVyLCBoZWFkZXJWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyc2VkLmhlYWRlcnMpKSB7XG4gICAgICAgICAgaWYgKGhlYWRlclZhbHVlID09PSBSRURBQ1RFRF9IRUFERVIgJiYgaW5pdGlhbC5oZWFkZXJzW2hlYWRlcl0gIT09IHVuZGVmaW5lZCkgcGFyc2VkLmhlYWRlcnNbaGVhZGVyXSA9IGluaXRpYWwuaGVhZGVyc1toZWFkZXJdXG4gICAgICAgIH1cbiAgICAgICAgc3BlYyA9IGZvcm1hdEh0dHBTZXJ2ZXJTcGVjKHBhcnNlZC51cmwsIHBhcnNlZC5oZWFkZXJzKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIG9uSW52YWxpZChlcnIubWVzc2FnZSlcbiAgICB9XG4gICAgb25TYXZlKHNlcnZlck5hbWUsIHNwZWMsIHNjb3BlKCkpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIHshZWRpdGluZyAmJiAoXG4gICAgICAgIDxGb3JtRmllbGQgbGFiZWw9XCJuYW1lXCIgYWN0aXZlPXtmbS5pcygnbmFtZScpfT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICA8VGV4dElucHV0IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ25hbWUnKX0gcGxhY2Vob2xkZXI9XCJsaW5lYXJcIiBvbkNoYW5nZT17c2V0TmFtZX0gLz5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICApfVxuICAgICAgeyFlZGl0aW5nICYmIChcbiAgICAgICAgPEZvcm1GaWVsZCBsYWJlbD1cInNjb3BlXCIgYWN0aXZlPXtmbS5pcygnc2NvcGUnKX0+XG4gICAgICAgICAgPFJhZGlvIG9wdGlvbnM9e1snZ2xvYmFsJywgJ3Byb2plY3QnXX0gc2VsZWN0ZWQ9e3Njb3BlKCl9IG9uQ2hhbmdlPXtzZXRTY29wZX0gZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygnc2NvcGUnKX0gLz5cbiAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICApfVxuICAgICAgPEZvcm1GaWVsZCBsYWJlbD1cInRyYW5zcG9ydFwiIGFjdGl2ZT17Zm0uaXMoJ3RyYW5zcG9ydCcpfT5cbiAgICAgICAgPFJhZGlvIG9wdGlvbnM9e1snc3RkaW8nLCAnaHR0cCddfSBzZWxlY3RlZD17dHJhbnNwb3J0KCl9IG9uQ2hhbmdlPXtzZXRUcmFuc3BvcnR9IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ3RyYW5zcG9ydCcpfSAvPlxuICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICA8Rm9ybUZpZWxkIGxhYmVsPXtodHRwID8gJ3VybCcgOiAnY29tbWFuZCd9IGFjdGl2ZT17Zm0uaXMoJ3RhcmdldCcpfT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ3RhcmdldCcpfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2h0dHAgPyAnaHR0cHM6Ly9tY3AubGluZWFyLmFwcC9tY3AnIDogJ25weCAteSBAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2VydmVyLWZpbGVzeXN0ZW0gL3RtcCd9XG4gICAgICAgICAgICBpbml0aWFsVmFsdWU9e3RhcmdldCgpfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3NldFRhcmdldH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAge2h0dHAgJiYgKFxuICAgICAgICA8Rm9ybUZpZWxkIGxhYmVsPVwiaGVhZGVycyAgb3B0aW9uYWxcIiBhY3RpdmU9e2ZtLmlzKCdoZWFkZXJzJyl9PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgIDxUZXh0SW5wdXQgZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygnaGVhZGVycycpfSBwbGFjZWhvbGRlcj0nQXV0aG9yaXphdGlvbj1cIkJlYXJlciAuLi5cIiBYLVRlYW09XCJjb3JlXCInIGluaXRpYWxWYWx1ZT17aGVhZGVycygpfSBvbkNoYW5nZT17c2V0SGVhZGVyc30gLz5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICApfVxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPEJ1dHRvbiBsYWJlbD17ZWRpdGluZyA/ICdzYXZlJyA6ICdhZGQnfSBvblByZXNzPXtzdWJtaXR9IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ3NhdmUnKX0gLz5cbiAgICAgICAgPHRleHQ+ICA8L3RleHQ+XG4gICAgICAgIDxCdXR0b24gbGFiZWw9XCJjYW5jZWxcIiBvblByZXNzPXtvbkNhbmNlbH0gZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygnY2FuY2VsJyl9IHZhcmlhbnQ9XCJkaW1cIiAvPlxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1jcFBhbmVsKHsgc2VydmVycywgZm9jdXNlZCwgb25Ub2dnbGUsIG9uUmVjb25uZWN0LCBvblJlbW92ZSwgb25BZGQsIG9uRWRpdCwgb25JbnZhbGlkLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2Zvcm0sIHNldEZvcm1dID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtpbmRleCwgc2V0SW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFt2aWV3aW5nLCBzZXRWaWV3aW5nXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCAmJiAhZm9ybSgpLCAoKSA9PiAodmlld2luZygpID8gc2V0Vmlld2luZyhudWxsKSA6IG9uQ2xvc2UoKSkpXG5cbiAgY29uc3Qgc2VsZWN0ZWQgPSAoKSA9PiBzZXJ2ZXJzW01hdGgubWluKGluZGV4KCksIHNlcnZlcnMubGVuZ3RoIC0gMSldIHx8IG51bGxcbiAgY29uc3Qgdmlld2VkID0gKCkgPT4gc2VydmVycy5maW5kKChzKSA9PiBzLm5hbWUgPT09IHZpZXdpbmcoKSkgfHwgbnVsbFxuXG4gIGlmICh2aWV3aW5nKCkgJiYgdmlld2VkKCkpIHtcbiAgICBjb25zdCBzZXJ2ZXIgPSB2aWV3ZWQoKVxuICAgIGNvbnN0IGRlc2NyaWJlID0gKHQpID0+IHQuZGVzY3JpcHRpb24ucmVwbGFjZSgvXlxcW1teXFxdXSpcXF1cXHMqLywgJycpLnRyaW0oKSB8fCAnbm8gZGVzY3JpcHRpb24nXG4gICAgcmV0dXJuIChcbiAgICAgIDxQYW5lbEZyYW1lXG4gICAgICAgIHRpdGxlPXtgTUNQIHNlcnZlcnMgICR7c2VydmVyLm5hbWV9ICAke3NlcnZlci50b29scy5sZW5ndGh9ICR7c2VydmVyLnRvb2xzLmxlbmd0aCA9PT0gMSA/ICd0b29sJyA6ICd0b29scyd9YH1cbiAgICAgICAgaGludD1cImovayBvciBcdTIxOTFcdTIxOTMgdG8gc2Nyb2xsICBlc2MgYmFjayB0byBzZXJ2ZXJzXCJcbiAgICAgICAgZnVsbFNjcmVlblxuICAgICAgPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWFyZ2luVG9wOiAxLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICB7c2VydmVyLnRvb2xzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyB0b29scyByZXBvcnRlZCAgaXMgdGhlIHNlcnZlciBjb25uZWN0ZWQ/PC90ZXh0PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8U2Nyb2xsQm94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IGZvY3VzZWQ9e2ZvY3VzZWR9IHNjcm9sbGJhcj5cbiAgICAgICAgICAgICAge3NlcnZlci50b29scy5tYXAoKHQsIGkpID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IGtleT17dC5uYW1lfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiBpID09PSAwID8gMCA6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e3QubmFtZX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Rlc2NyaWJlKHQpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvUGFuZWxGcmFtZT5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lXG4gICAgICB0aXRsZT1cIk1DUCBzZXJ2ZXJzXCJcbiAgICAgIGhpbnQ9e2Zvcm0oKVxuICAgICAgICA/ICd0YWIgbW92ZXMgYmV0d2VlbiBmaWVsZHMgIGovayArIHNwYWNlIHBpY2tzIGEgcmFkaW8gb3B0aW9uICBlc2MgY2FuY2VscydcbiAgICAgICAgOiAnZW50ZXIgZW5hYmxlL2Rpc2FibGUgIHQgdG9vbHMgIGUgZWRpdCAgciByZWNvbm5lY3QgIGEgYWRkICBjdHJsK3ggcmVtb3ZlICh0d2ljZSkgIGVzYyBjbG9zZSd9XG4gICAgICBmdWxsU2NyZWVuXG4gICAgPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIG1hcmdpblRvcDogMSwgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIHtmb3JtKCkgPyAoXG4gICAgICAgICAgPE1jcFNlcnZlckZvcm1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBzZXJ2ZXI9e2Zvcm0oKSA9PT0gJ2FkZCcgPyBudWxsIDogZm9ybSgpfVxuICAgICAgICAgICAgb25TYXZlPXsobmFtZSwgc3BlYywgc2NvcGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGZvcm0oKSA9PT0gJ2FkZCcpIG9uQWRkKG5hbWUsIHNwZWMsIHNjb3BlKVxuICAgICAgICAgICAgICBlbHNlIG9uRWRpdChuYW1lLCBzcGVjKVxuICAgICAgICAgICAgICBzZXRGb3JtKG51bGwpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25JbnZhbGlkPXtvbkludmFsaWR9XG4gICAgICAgICAgICBvbkNhbmNlbD17KCkgPT4gc2V0Rm9ybShudWxsKX1cbiAgICAgICAgICAvPlxuICAgICAgICApIDogc2VydmVycy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIE1DUCBzZXJ2ZXJzIGNvbmZpZ3VyZWQgIHByZXNzIGEgdG8gYWRkIG9uZTwvdGV4dD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8TWVudVxuICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgaXRlbXM9e3NlcnZlcnN9XG4gICAgICAgICAgICBzZWxlY3RlZD17aW5kZXgoKX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRJbmRleH1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBtYXhWaXNpYmxlPXs2fVxuICAgICAgICAgICAgdmltS2V5c1xuICAgICAgICAgICAgaXRlbUhlaWdodD17Mn1cbiAgICAgICAgICAgIG9uU3VibWl0PXsocykgPT4gb25Ub2dnbGUocy5uYW1lKX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgcmVuZGVySXRlbT17KHMsIHsgYWN0aXZlIH0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3QgPSBtY3BTdGF0dXMocy5zdGF0dXMpXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzdC5jb2xvciB9fT57c3QuaWNvbn08L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHIH19PntgICR7cy5uYW1lLnBhZEVuZChNYXRoLm1heCgxNCwgcy5uYW1lLmxlbmd0aCArIDEpKX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogcy5zdGF0dXMgPT09ICdlcnJvcicgPyBSRUQgOiBNVVRFRCB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtzLnN0YXR1cyA9PT0gJ2Vycm9yJyA/IHMuZXJyb3IgOiBzLnN0YXR1cyA9PT0gJ2Nvbm5lY3RlZCcgPyBgJHtzLnRvb2xDb3VudH0gdG9vbHNgIDogcy5zdGF0dXN9XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dD57JyAgICAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IE1VVEVEIH19PntzaG9ydGVuSG9tZShyZWRhY3RTZXJ2ZXJTcGVjKHMuY29tbWFuZCkpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgJHtzLnNjb3BlID09PSAncHJvamVjdCcgPyAncHJvamVjdCcgOiAnZ2xvYmFsJ31gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICAgIHshZm9ybSgpICYmIChcbiAgICAgICAgPE1jcEtleXNcbiAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgIG9uS2V5PXsoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzID0gc2VsZWN0ZWQoKVxuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2EnKSBzZXRGb3JtKCdhZGQnKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICdlJykgc2V0Rm9ybShzKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICdyJykgb25SZWNvbm5lY3Qocy5uYW1lKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICdyZW1vdmUnKSBvblJlbW92ZShzLm5hbWUpXG4gICAgICAgICAgICBlbHNlIGlmIChzICYmIGtleSA9PT0gJ3QnKSBzZXRWaWV3aW5nKHMubmFtZSlcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZnVuY3Rpb24gTWNwS2V5cyh7IGZvY3VzZWQsIG9uS2V5IH0pIHtcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4Jykge1xuICAgICAgb25LZXkoJ3JlbW92ZScpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICghZXZlbnQuY3RybCAmJiBbJ2EnLCAnZScsICdyJywgJ3QnXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICBvbktleShldmVudC5rZXkpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG51bGxcbn1cbiIsICJpbXBvcnQgeyBlYXNlLCBsaW5lYXIsIHVzZUFuaW1hdGVkIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuXG5mdW5jdGlvbiB0b1JnYihjb2xvcikge1xuICBpZiAoY29sb3I/LnN0YXJ0c1dpdGgoJyMnKSAmJiBjb2xvci5sZW5ndGggPT09IDcpIHtcbiAgICByZXR1cm4gW1xuICAgICAgcGFyc2VJbnQoY29sb3Iuc2xpY2UoMSwgMyksIDE2KSxcbiAgICAgIHBhcnNlSW50KGNvbG9yLnNsaWNlKDMsIDUpLCAxNiksXG4gICAgICBwYXJzZUludChjb2xvci5zbGljZSg1LCA3KSwgMTYpLFxuICAgIF1cbiAgfVxuICByZXR1cm4gWzEyNywgMTI3LCAxMjddXG59XG5cbmZ1bmN0aW9uIG1peENvbG9yKGZyb20sIHRvLCBhbW91bnQpIHtcbiAgaWYgKGZyb20gPT09IHRvKSByZXR1cm4gZnJvbVxuICBjb25zdCBhID0gdG9SZ2IoZnJvbSlcbiAgY29uc3QgYiA9IHRvUmdiKHRvKVxuICBjb25zdCBjaGFubmVscyA9IGEubWFwKCh2YWx1ZSwgaSkgPT4gTWF0aC5yb3VuZCh2YWx1ZSArIChiW2ldIC0gdmFsdWUpICogYW1vdW50KSlcbiAgcmV0dXJuIGAjJHtjaGFubmVscy5tYXAoKHZhbHVlKSA9PiB2YWx1ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyl9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gQW5pbWF0ZWRWYWx1ZSh7IHZhbHVlLCBpbml0aWFsID0gdmFsdWUsIGR1cmF0aW9uID0gMTAwMCwgY29sb3IsIGhpZ2hsaWdodCwgYmFja2dyb3VuZCwgZm9ybWF0ID0gU3RyaW5nIH0pIHtcbiAgY29uc3QgZGlzcGxheWVkID0gdXNlQW5pbWF0ZWQoaW5pdGlhbCwgZWFzZShkdXJhdGlvbikpXG4gIGNvbnN0IGdsb3cgPSB1c2VBbmltYXRlZCgwLCBlYXNlKGR1cmF0aW9uLCBsaW5lYXIpKVxuXG4gIGlmICh2YWx1ZSAhPT0gZGlzcGxheWVkLl9hbmltLnRhcmdldCkge1xuICAgIGRpc3BsYXllZC5zZXQodmFsdWUpXG4gICAgZ2xvdy5zbmFwKDEpXG4gICAgZ2xvdy5zZXQoMClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IG1peENvbG9yKGNvbG9yLCBoaWdobGlnaHQsIGdsb3coKSksIGJnOiBiYWNrZ3JvdW5kIH19PlxuICAgICAge2Zvcm1hdChkaXNwbGF5ZWQoKSl9XG4gICAgPC90ZXh0PlxuICApXG59XG4iLCAiY29uc3QgTEVWRUxTID0gWycgJywgJ1x1MjU4RicsICdcdTI1OEUnLCAnXHUyNThEJywgJ1x1MjU4QycsICdcdTI1OEInLCAnXHUyNThBJywgJ1x1MjU4OScsICdcdTI1ODgnXVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGV4dEJhcihwZXJjZW50LCB3aWR0aCA9IDQpIHtcbiAgY29uc3QgZWlnaHRocyA9IE1hdGgucm91bmQoTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBwZXJjZW50KSkgKiB3aWR0aCAqIDggLyAxMDApXG4gIGNvbnN0IGZ1bGwgPSBNYXRoLmZsb29yKGVpZ2h0aHMgLyA4KVxuICBjb25zdCBwYXJ0aWFsID0gZWlnaHRocyAlIDhcbiAgcmV0dXJuICdcdTI1ODgnLnJlcGVhdChmdWxsKSArIChwYXJ0aWFsID8gTEVWRUxTW3BhcnRpYWxdIDogJycpICsgJyAnLnJlcGVhdCh3aWR0aCAtIGZ1bGwgLSAocGFydGlhbCA/IDEgOiAwKSlcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gd29ya3NwYWNlR3JvdXBzKHJvd3MpIHtcbiAgY29uc3QgZ3JvdXBzID0gbmV3IE1hcCgpXG4gIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICBpZiAoIXJvdy5uYW1lPy50cmltKCkpIGNvbnRpbnVlXG4gICAgaWYgKCFncm91cHMuaGFzKHJvdy5jd2QpKSBncm91cHMuc2V0KHJvdy5jd2QsIFtdKVxuICAgIGdyb3Vwcy5nZXQocm93LmN3ZCkucHVzaChyb3cpXG4gIH1cbiAgcmV0dXJuIFsuLi5ncm91cHNdLnNvcnQoKFthXSwgW2JdKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpLm1hcCgoW2N3ZCwgc2Vzc2lvbnNdKSA9PiAoeyBjd2QsIHNlc3Npb25zIH0pKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya3NwYWNlU2VsZWN0aW9uKHJvd3MsIHNlbGVjdGVkLCBwcmV2aW91cyA9IFtdKSB7XG4gIGlmIChyb3dzLnNvbWUoKHJvdykgPT4gcm93LmlkID09PSBzZWxlY3RlZCkpIHJldHVybiBzZWxlY3RlZFxuICBjb25zdCBpbmRleCA9IE1hdGgubWF4KDAsIHByZXZpb3VzLmZpbmRJbmRleCgocm93KSA9PiByb3cuaWQgPT09IHNlbGVjdGVkKSlcbiAgcmV0dXJuIHJvd3NbTWF0aC5taW4oaW5kZXgsIHJvd3MubGVuZ3RoIC0gMSldPy5pZCA/PyBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3Jrc3BhY2VOYXZpZ2F0ZShyb3dzLCBzZWxlY3RlZCwgZXZlbnQsIGhlaWdodCkge1xuICBjb25zdCBpbmRleCA9IE1hdGgubWF4KDAsIHJvd3MuZmluZEluZGV4KChyb3cpID0+IHJvdy5pZCA9PT0gc2VsZWN0ZWQpKVxuICBjb25zdCBoYWxmID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihoZWlnaHQgLyA2KSlcbiAgbGV0IG5leHRcbiAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnZCcpIG5leHQgPSBpbmRleCArIGhhbGZcbiAgZWxzZSBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd1JykgbmV4dCA9IGluZGV4IC0gaGFsZlxuICBlbHNlIGlmIChldmVudC5jdHJsIHx8IGV2ZW50Lm1ldGEgfHwgZXZlbnQuYWx0KSByZXR1cm4gdW5kZWZpbmVkXG4gIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2onIHx8IGV2ZW50LmtleSA9PT0gJ2Rvd24nKSBuZXh0ID0gaW5kZXggKyAxXG4gIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2snIHx8IGV2ZW50LmtleSA9PT0gJ3VwJykgbmV4dCA9IGluZGV4IC0gMVxuICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdnJykgbmV4dCA9IDBcbiAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRycpIG5leHQgPSByb3dzLmxlbmd0aCAtIDFcbiAgZWxzZSByZXR1cm4gdW5kZWZpbmVkXG4gIHJldHVybiByb3dzW01hdGgubWF4KDAsIE1hdGgubWluKHJvd3MubGVuZ3RoIC0gMSwgbmV4dCkpXT8uaWQgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya3NwYWNlRHJhZnRBdHRhY2htZW50cyh0ZXh0LCBhdHRhY2htZW50cykge1xuICByZXR1cm4gWy4uLnRleHQubWF0Y2hBbGwoL1xcWyg/OkltYWdlfEZpbGUpICNcXGQrXFxdL2cpXS5maWx0ZXIobWF0Y2ggPT4gYXR0YWNobWVudHMuaGFzKG1hdGNoWzBdKSkubGVuZ3RoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbXB0eVdvcmtzcGFjZUNvbXBvc2VyKHsgdGV4dCwgYXR0YWNobWVudHMsIGRpY3RhdGlvbiwgY2FwdHVyZSwgcGVuZGluZywgaGlzdG9yeSwgY29tcGxldGlvbiwgY29tbWFuZCwgcXVlc3Rpb24sIHN0ZWVyLCBxdWV1ZWQsIGV4cGVkaXRlZCB9KSB7XG4gIHJldHVybiB0ZXh0ID09PSAnJyAmJiBhdHRhY2htZW50cyA9PT0gMCAmJiBkaWN0YXRpb24gPT09ICdpZGxlJyAmJiBjYXB0dXJlID09PSAnaWRsZScgJiYgIXBlbmRpbmcgJiYgaGlzdG9yeSA8IDAgJiYgIWNvbXBsZXRpb24gJiYgIWNvbW1hbmQgJiYgIXF1ZXN0aW9uICYmICFzdGVlciAmJiBxdWV1ZWQgPT09IDAgJiYgZXhwZWRpdGVkID09PSAwXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3Jrc3BhY2VBY3Rpb24ocm93KSB7XG4gIHJldHVybiByb3c/LnN0YXR1cyA9PT0gJ2J1c3knID8gJ2ludGVycnVwdCcgOiByb3c/LnN0YXR1cyA9PT0gJ2lkbGUnID8gJ2RlbW90ZScgOiBudWxsXG59XG4iLCAiaW1wb3J0IHsgV29ya3NwYWNlU2lkZWJhciB9IGZyb20gJy4vd29ya3NwYWNlLXNpZGViYXIuanN4J1xuaW1wb3J0IHsgd29ya3NwYWNlR3JvdXBzLCB3b3Jrc3BhY2VTZWxlY3Rpb24sIHdvcmtzcGFjZU5hdmlnYXRlLCB3b3Jrc3BhY2VBY3Rpb24sIHdvcmtzcGFjZURyYWZ0QXR0YWNobWVudHMsIGVtcHR5V29ya3NwYWNlQ29tcG9zZXIgfSBmcm9tICcuL3dvcmtzcGFjZS1zaWRlYmFyLmpzJ1xuaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJ1xuaW1wb3J0IHsgcGFyc2VGcm9udG1hdHRlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvc2tpbGxzLmpzJ1xuaW1wb3J0IHsgZXhwYW5kQ29tbWFuZCwgcGFyc2VDb21tYW5kQXJndW1lbnRzIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb21tYW5kcy5qcydcbmltcG9ydCB7IGNvbW1hbmRBdCwgcmVwbGFjZUNvbW1hbmQsIGNvbW1hbmRGaWVsZHMgfSBmcm9tICcuL2NvbXBvc2VyLWNvbW1hbmRzLmpzJ1xuaW1wb3J0IHsgQ29tbWFuZEZvcm0gfSBmcm9tICcuL2NvbW1hbmQtZm9ybS5qc3gnXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcydcbmltcG9ydCB7IGNyZWF0ZURpY3RhdGlvbiB9IGZyb20gJy4uL2RpY3RhdGlvbi5qcydcbmltcG9ydCB7IHJlYWRDbGlwYm9hcmRJbWFnZSB9IGZyb20gJy4uL2NsaXBib2FyZC5qcydcbmltcG9ydCB7IGNyZWF0ZUNsaXBib2FyZElucHV0IH0gZnJvbSAnLi9jbGlwYm9hcmQtaW5wdXQuanMnXG5pbXBvcnQgeyBjcmVhdGVEaWN0YXRpb25JbnB1dCB9IGZyb20gJy4vZGljdGF0aW9uLWlucHV0LmpzJ1xuaW1wb3J0IHsgY3JlYXRlU2NyZWVuQ2FwdHVyZUlucHV0IH0gZnJvbSAnLi9zY3JlZW4tY2FwdHVyZS1pbnB1dC5qcydcbmltcG9ydCB7IGNhcHR1cmVSZWdpb24gfSBmcm9tICcuLi9zY3JlZW4tY2FwdHVyZS5qcydcbmltcG9ydCB7IGNyZWF0ZUNvbXBvc2VyRmlsZXMgfSBmcm9tICcuL2NvbXBvc2VyLWZpbGVzLmpzJ1xuaW1wb3J0IHsgZGljdGF0aW9uSW5kaWNhdG9yLCBhcHBlbmRMZXZlbCB9IGZyb20gJy4vZGljdGF0aW9uLWluZGljYXRvci5qcydcbmltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgdXNlSW50ZXJ2YWwsIG9uQ2xlYW51cCwgTWVudSwgUHJvZ3Jlc3NCYXIsIFNjcm9sbEJveCwgU2hpbW1lciwgU3Bpbm5lciwgVGV4dEFyZWEsIHVzZUZvY3VzLCB1c2VGb2N1c1RyYXAsIHVzZUZyYW1lU3RhdHMsIHVzZUhpdFRlc3QsIHVzZUlucHV0LCB1c2VMYXlvdXQsIHVzZU1vdXNlLCB1c2VSZXNpemUsIHVzZVNlbGVjdGlvbiwgdXNlVG9hc3QgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBtYWtlRXZlbnQgfSBmcm9tICdwaWNvY29kZS1jb3JlL2V2ZW50cy5qcydcbmltcG9ydCB7IGxpc3RTZXNzaW9ucywgZGVsZXRlU2Vzc2lvbiwgZGVsZXRlUHJvamVjdERhdGEgfSBmcm9tICdwaWNvY29kZS1jb3JlL3Nlc3Npb24uanMnXG5pbXBvcnQgeyB1c2VyRW50cmllcywgcmV3aW5kU3RhdHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Rlcml2ZS5qcydcbmltcG9ydCB7IGxvYWRQcm9qZWN0UHJvbXB0cywgbG9hZEdsb2JhbFByb21wdHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2hpc3RvcnkuanMnXG5pbXBvcnQgeyBpbXBsaWNpdFJld2luZFRhcmdldCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvcmV3aW5kLmpzJ1xuaW1wb3J0IHsgY2hlY2tGb3JVcGRhdGUsIGZldGNoTGF0ZXN0VmVyc2lvbiwgbmV3ZXJWZXJzaW9uLCBpc0Rldkluc3RhbGwsIHJ1blVwZGF0ZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvdXBkYXRlLmpzJ1xuaW1wb3J0IHsgU1RFRVJfUk9MRVMsIHN0ZWVyYWJsZVRyYW5zY3JpcHQgfSBmcm9tICdwaWNvY29kZS1jb3JlL3N0ZWVyLmpzJ1xuaW1wb3J0IHsgd3JpdGVDb25maWcgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbmZpZy5qcydcbmltcG9ydCB7IG9wZW5haVN0YXR1cyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvb3BlbmFpLWF1dGguanMnXG5pbXBvcnQgeyBFRkZPUlRfTEVWRUxTLCBTUEVFRF9MRVZFTFMsIFNFU1NJT05fQ09MT1JTIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb250cm9sbGVyLmpzJ1xuaW1wb3J0IHsgYWdlbnRUcmFuc2NyaXB0IH0gZnJvbSAncGljb2NvZGUtY29yZS9hZ2VudC10cmFuc2NyaXB0LmpzJ1xuaW1wb3J0IHsgZnV6enlTY29yZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZnV6enkuanMnXG5pbXBvcnQgeyBjb21wbGV0aW9uQ29udGV4dCwgYXBwbHlDb21wbGV0aW9uIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb21wbGV0aW9uLmpzJ1xuaW1wb3J0IHsgZXh0cmFjdEltYWdlUGF0aHMsIHBsYWNlaG9sZGVyaXplSW1hZ2VQYXRocyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYXR0YWNobWVudHMuanMnXG5pbXBvcnQgeyBsaXN0RmlsZXMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2ZpbGVzLmpzJ1xuaW1wb3J0IHsgbGlzdFdvcmt0cmVlcyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvd29ya3RyZWVzLmpzJ1xuaW1wb3J0IHsgb3duZXJSb290IH0gZnJvbSAncGljb2NvZGUtY29yZS9wYXRocy5qcydcbmltcG9ydCB7IGhpZ2hsaWdodFZlcnNpb24gfSBmcm9tICcuL2hpZ2hsaWdodC5qcydcbmltcG9ydCB7IGNvbXBhY3ROdW1iZXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Zvcm1hdC5qcydcbmltcG9ydCB7IGNvbnRleHRCYXIgfSBmcm9tICcuL2NvbnRleHQtYmFyLmpzJ1xuaW1wb3J0IHsgQW5pbWF0ZWRWYWx1ZSB9IGZyb20gJy4vYW5pbWF0ZWQtdmFsdWUuanN4J1xuaW1wb3J0IHsgRGVsaWJlcmF0aW9uRXhjaGFuZ2UsIE1lc3NhZ2UgfSBmcm9tICcuL3RyYW5zY3JpcHQuanN4J1xuaW1wb3J0IHsgQ29udmVyc2F0aW9uU2VhcmNoQmFyLCBDb252ZXJzYXRpb25TY3JvbGxBbmNob3IsIENvbnZlcnNhdGlvblNlYXJjaE1lc3NhZ2UsIGNyZWF0ZUNvbnZlcnNhdGlvblNlYXJjaCB9IGZyb20gJy4vY29udmVyc2F0aW9uLXNlYXJjaC12aWV3LmpzeCdcbmltcG9ydCB7IGNvbXBhY3RUcmFuc2NyaXB0UnVucywgdHJhbnNjcmlwdFdpbmRvdyB9IGZyb20gJy4vdHJhbnNjcmlwdC13aW5kb3cuanMnXG5pbXBvcnQgeyBRdWVzdGlvbkZvcm0gfSBmcm9tICcuL3F1ZXN0aW9uLWZvcm0uanN4J1xuaW1wb3J0IHsgRW1wdHlTdGF0ZSB9IGZyb20gJy4vZW1wdHktc3RhdGUuanN4J1xuaW1wb3J0IHsgSGVscCB9IGZyb20gJy4vaGVscC5qc3gnXG5pbXBvcnQgeyBNb2RlbFBhbmVsLCBFZmZvcnRQYW5lbCwgU3BlZWRQYW5lbCwgVGhlbWVQYW5lbCwgQ29uZmlnUGFuZWwsIENvbmZpcm1QYW5lbCwgSGlzdG9yeVBhbmVsLCBSZXdpbmRQaWNrUGFuZWwsIFJld2luZEFjdGlvblBhbmVsLCBSZXN1bWVQYW5lbCwgUHJvamVjdFBhbmVsLCBNY3BQYW5lbCwgTWVtb3J5UGFuZWwsIEluZm9MaXN0UGFuZWwsIFdha2V1cHNQYW5lbCwgQ29ubmVjdFBhbmVsLCB0aW1lQWdvIH0gZnJvbSAnLi9wYW5lbHMuanN4J1xuaW1wb3J0IHsgYWNjZW50LCBzZXRBY2NlbnQsIHNldFBhbGV0dGUsIHBhbGV0dGVOYW1lLCBwYWxldHRlTGlzdCwgREVGQVVMVF9BQ0NFTlQsIEZHLCBGR19TT0ZULCBNVVRFRCwgUEFORUxfQkcsIFJFRCwgR1JFRU4sIEhJR0hMSUdIVCB9IGZyb20gJy4vdGhlbWUuanMnXG5cbmNvbnN0IENPTU1BTkRTID0gW1xuICB7IG5hbWU6ICdtb2RlbCcsIGRlc2M6ICdTd2l0Y2ggdGhlIGFjdGl2ZSBtb2RlbCBmb3IgdGhpcyBzZXNzaW9uJyB9LFxuICB7IG5hbWU6ICdyZWZyZXNoLW1vZGVscycsIGRlc2M6ICdSZWZyZXNoIGF2YWlsYWJsZSBtb2RlbHMgZnJvbSBwcm92aWRlcnMnIH0sXG4gIHsgbmFtZTogJ2Nvbm5lY3QnLCBkZXNjOiAnU2lnbiBpbiB3aXRoIENoYXRHUFQgdG8gdXNlIGEgQ29kZXggc3Vic2NyaXB0aW9uJyB9LFxuICB7IG5hbWU6ICdlZmZvcnQnLCBkZXNjOiAnU2V0IHRoZSB0aGlua2luZyBlZmZvcnQgZm9yIHRoaXMgc2Vzc2lvbicgfSxcbiAgeyBuYW1lOiAnc3BlZWQnLCBkZXNjOiAnU3BlZWQnIH0sXG4gIHsgbmFtZTogJ3Jlc3VtZScsIGRlc2M6ICdQaWNrIHVwIGEgcHJldmlvdXMgc2Vzc2lvbiB3aGVyZSB5b3UgbGVmdCBvZmYnIH0sXG4gIHsgbmFtZTogJ25ldycsIGRlc2M6ICdTdGFydCBhIG5ldyBzZXNzaW9uIGluIHRoaXMgcHJvamVjdCcgfSxcbiAgeyBuYW1lOiAnZm9yaycsIGRlc2M6ICdGb3JrIGNvbnZlcnNhdGlvbicgfSxcbiAgeyBuYW1lOiAnZGVsZXRlJywgZGVzYzogJ1Blcm1hbmVudGx5IGRlbGV0ZSB0aGUgY3VycmVudCBzZXNzaW9uIGFuZCBzdGFydCBmcmVzaCcgfSxcbiAgeyBuYW1lOiAncHJvamVjdCcsIGRlc2M6ICdTd2l0Y2ggcHJvamVjdHM6IGp1bXAgdG8gYW5vdGhlciBwcm9qZWN0LCBzYW1lIGFzIGN0cmwrcCcgfSxcbiAgeyBuYW1lOiAnY3dkJywgZGVzYzogJ1Nob3cgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYW5kIHByb2plY3Qgcm9vdCcgfSxcbiAgeyBuYW1lOiAnc2tpbGxzJywgZGVzYzogJ0xpc3QgZXZlcnkgc2tpbGw6IGJ1aWx0aW4sIGdsb2JhbCwgYW5kIHByb2plY3QnIH0sXG4gIHsgbmFtZTogJ2NvbW1hbmRzJywgZGVzYzogJ0xpc3QgZXZlcnkgY29tbWFuZDogYnVpbHRpbiwgZ2xvYmFsLCBhbmQgcHJvamVjdCcgfSxcbiAgeyBuYW1lOiAnaW5pdCcsIGRlc2M6ICdDcmVhdGUgb3IgaW1wcm92ZSByZXBvc2l0b3J5IEFHRU5UUy5tZCBndWlkYW5jZScgfSxcbiAgeyBuYW1lOiAndG9vbHMnLCBkZXNjOiAnTGlzdCBidWlsdGluIGFuZCB1c2VyLWRlZmluZWQgdG9vbHM7IE1DUCB0b29scyBsaXZlIGluIC9tY3AnIH0sXG4gIHsgbmFtZTogJ3Jld2luZCcsIGRlc2M6ICdSZXN0b3JlIHRoZSBjb252ZXJzYXRpb24gdG8gYSBwcmV2aW91cyBtZXNzYWdlJyB9LFxuICB7IG5hbWU6ICdzdGVlcicsIGRlc2M6ICdFZGl0IG9yIGFkZCBjb252ZXJzYXRpb24gbWVzc2FnZXMgd2l0aG91dCBzZW5kaW5nJyB9LFxuICB7IG5hbWU6ICdoaXN0b3J5JywgZGVzYzogJ1NlYXJjaCBwcm9tcHRzIHlvdSBwcmV2aW91c2x5IHNlbnQnIH0sXG4gIHsgbmFtZTogJ3JlbmFtZScsIGRlc2M6ICdOYW1lIHRoaXMgc2Vzc2lvbjsgb21pdCB0aGUgbmFtZSB0byByZXN0b3JlIGl0cyBhdXRvbWF0aWMgdGl0bGUnIH0sXG4gIHsgbmFtZTogJ2NvbG9yJywgZGVzYzogJ0NvbG9yIHRoaXMgc2Vzc2lvbjogL2NvbG9yIDxuYW1lIG9yICNoZXg+LCAvY29sb3Igbm9uZSB0byBjbGVhcicgfSxcbiAgeyBuYW1lOiAndGhlbWUnLCBkZXNjOiAnUGljayBhIGNvbG9yIHRoZW1lOyAvdGhlbWUgPG5hbWU+IGFwcGxpZXMgb25lIGRpcmVjdGx5JyB9LFxuICB7IG5hbWU6ICdjb25maWcnLCBkZXNjOiAnQ29uZmlndXJlIHBpY28gZGlzcGxheSBhbmQgYmVoYXZpb3InIH0sXG4gIHsgbmFtZTogJ21jcCcsIGRlc2M6ICdNYW5hZ2UgTUNQIHNlcnZlcnM6IGFkZCwgdG9nZ2xlLCByZWNvbm5lY3QnIH0sXG4gIHsgbmFtZTogJ3BhcmFsbGVsJywgZGVzYzogJ1J1biBhIHRhc2sgd2l0aCBwYXJhbGxlbCBhZ2VudHM6IC9wYXJhbGxlbCA8dGFzaz4nIH0sXG4gIHsgbmFtZTogJ2RlbGliZXJhdGUnLCBkZXNjOiAnRGVsaWJlcmF0ZSBvbiBhIGRlY2lzaW9uOiAvZGVsaWJlcmF0ZSA8ZGVjaXNpb24+JyB9LFxuICB7IG5hbWU6ICd3YWtldXBzJywgZGVzYzogJ1ZpZXcgYW5kIGNhbmNlbCBzY2hlZHVsZWQgd2FrZS11cHMnIH0sXG4gIHsgbmFtZTogJ21lbW9yeScsIGRlc2M6ICdCcm93c2UgYW5kIG1hbmFnZSBzYXZlZCBtZW1vcmllczogcHJvamVjdCBhbmQgZ2xvYmFsJyB9LFxuICB7IG5hbWU6ICdjb21wYWN0JywgZGVzYzogJ1N1bW1hcml6ZSB0aGUgY29udmVyc2F0aW9uIHRvIGZyZWUgdGhlIGNvbnRleHQgd2luZG93JyB9LFxuICB7IG5hbWU6ICdjbGVhcicsIGRlc2M6ICdDbGVhciB0aGUgY29udmVyc2F0aW9uIGFuZCBmcmVlIHRoZSBjb250ZXh0IHdpbmRvdycgfSxcbiAgeyBuYW1lOiAnY29zdCcsIGRlc2M6ICdTaG93IHRva2VuIHVzYWdlIGFuZCBlc3RpbWF0ZWQgY29zdCBzbyBmYXInIH0sXG4gIHsgbmFtZTogJ2NvbnRleHQnLCBkZXNjOiBcIlNob3cgd2hhdCdzIGluIHRoZSBtb2RlbCdzIGNvbnRleHQgYW5kIGhvdyBiaWcgZWFjaCBwaWVjZSBpc1wiIH0sXG4gIHsgbmFtZTogJ2V4cG9ydCcsIGRlc2M6ICdTYXZlIHRoZSBjdXJyZW50IGNvbnZlcnNhdGlvbiB0byBhIG1hcmtkb3duIGZpbGUnIH0sXG4gIHsgbmFtZTogJ3VwZGF0ZScsIGRlc2M6ICdVcGRhdGUgcGljbyB0byB0aGUgbGF0ZXN0IHJlbGVhc2UgZnJvbSBucG0nIH0sXG4gIHsgbmFtZTogJ2hlbHAnLCBkZXNjOiAnTGlzdCBldmVyeSBjb21tYW5kIGFuZCB3aGF0IGl0IGRvZXMnIH0sXG5dXG5cbmNvbnN0IEhJU1RPUllfU0NPUEVTID0gWydzZXNzaW9uJywgJ3Byb2plY3QnLCAnZXZlcnl3aGVyZSddXG5jb25zdCBNRU1PUllfU0NPUEVTID0gWydhbGwnLCAncHJvamVjdCcsICdnbG9iYWwnXVxuY29uc3QgU0hFTExfU1RSSVBfTUFYID0gNVxuY29uc3QgQUdFTlRfU1RSSVBfTUFYID0gNVxuY29uc3QgU1RSSVBfU0NST0xMT0ZGID0gMVxuXG5mdW5jdGlvbiBzdHJpcFdpbmRvd1N0YXJ0KGN1cnJlbnQsIHRhcmdldCwgbGVuZ3RoLCBzaXplKSB7XG4gIGNvbnN0IG1heCA9IE1hdGgubWF4KDAsIGxlbmd0aCAtIHNpemUpXG4gIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY3VycmVudCwgbWF4KSlcbiAgaWYgKHRhcmdldCA8IDApIHJldHVybiBzdGFydFxuICBpZiAodGFyZ2V0IDwgc3RhcnQgKyBTVFJJUF9TQ1JPTExPRkYpIHJldHVybiBNYXRoLm1heCgwLCB0YXJnZXQgLSBTVFJJUF9TQ1JPTExPRkYpXG4gIGlmICh0YXJnZXQgPj0gc3RhcnQgKyBzaXplIC0gU1RSSVBfU0NST0xMT0ZGKSByZXR1cm4gTWF0aC5taW4obWF4LCB0YXJnZXQgLSBzaXplICsgU1RSSVBfU0NST0xMT0ZGICsgMSlcbiAgcmV0dXJuIHN0YXJ0XG59XG5cblxuZnVuY3Rpb24gYWdlbnRFbGFwc2VkKGFnZW50LCBub3cgPSBEYXRlLm5vdygpKSB7XG4gIGlmICghYWdlbnQuc3RhcnRlZEF0KSByZXR1cm4gJ3dhaXRpbmcnXG4gIGNvbnN0IHNlY29uZHMgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKCgoYWdlbnQuZW5kZWRBdCB8fCBub3cpIC0gYWdlbnQuc3RhcnRlZEF0KSAvIDEwMDApKVxuICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gNjApXG4gIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihtaW51dGVzIC8gNjApXG4gIGlmIChob3VycykgcmV0dXJuIGAke2hvdXJzfWggJHttaW51dGVzICUgNjB9bWBcbiAgaWYgKG1pbnV0ZXMpIHJldHVybiBgJHttaW51dGVzfW0gJHtzZWNvbmRzICUgNjB9c2BcbiAgcmV0dXJuIGAke3NlY29uZHN9c2Bcbn1cblxuZnVuY3Rpb24gYWdlbnRTdGF0dXMoYWdlbnQpIHtcbiAgaWYgKGFnZW50LnN0YXR1cyA9PT0gJ3J1bm5pbmcnKSByZXR1cm4geyBpY29uOiAnJywgbGFiZWw6ICcnLCBjb2xvcjogYWNjZW50KCkgfVxuICBpZiAoYWdlbnQuc3RhdHVzID09PSAncXVldWVkJykgcmV0dXJuIHsgaWNvbjogJ1x1MjVDQycsIGxhYmVsOiAncXVldWVkJywgY29sb3I6IE1VVEVEIH1cbiAgaWYgKGFnZW50LnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcpIHJldHVybiB7IGljb246ICdcdTI1Q0YnLCBsYWJlbDogJycsIGNvbG9yOiBHUkVFTiB9XG4gIGlmIChhZ2VudC5zdGF0dXMgPT09ICdmYWlsZWQnKSByZXR1cm4geyBpY29uOiAnXHUwMEQ3JywgbGFiZWw6ICdmYWlsZWQnLCBjb2xvcjogUkVEIH1cbiAgcmV0dXJuIHsgaWNvbjogJ1x1MjVBMCcsIGxhYmVsOiAnY2FuY2VsbGVkJywgY29sb3I6IE1VVEVEIH1cbn1cblxuZnVuY3Rpb24gU3RlZXJNZXNzYWdlKHsgaXRlbSwgdmVyYm9zZSwgc2VsZWN0ZWQsIGZvY3VzIH0pIHtcbiAgY29uc3QgbGF5b3V0ID0gdXNlTGF5b3V0KClcbiAgZm9jdXMuaXRlbShpdGVtLm1lc3NhZ2VJZCwgbGF5b3V0KVxuICByZXR1cm4gPE1lc3NhZ2UgaXRlbT17aXRlbX0gdmVyYm9zZT17dmVyYm9zZX0gc2hvd0xvY2tlZCAvPlxufVxuXG5mdW5jdGlvbiBEaWN0YXRpb25LZXlzKHsgaW5wdXQgfSkge1xuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoaW5wdXQuaGFuZGxlKGV2ZW50KSkgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgfSlcbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gTW91c2VGb2N1c1JlZ2lvbih7IGNoaWxkcmVuLCBvblByZXNzLCAuLi5wcm9wcyB9KSB7XG4gIGNvbnN0IGhpdFRlc3QgPSB1c2VIaXRUZXN0KClcbiAgdXNlTW91c2UoKGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ3ByZXNzJyAmJiBldmVudC5idXR0b24gPT09ICdsZWZ0JyAmJiBoaXRUZXN0KGV2ZW50LngsIGV2ZW50LnkpKSBvblByZXNzKClcbiAgfSlcbiAgcmV0dXJuIDxib3ggey4uLnByb3BzfT57Y2hpbGRyZW59PC9ib3g+XG59XG5cbmZ1bmN0aW9uIENvbXBvc2VyQWN0aW9uKHsgaWNvbiwgYWN0aXZlSWNvbiwgYWN0aXZlID0gZmFsc2UsIG9uUHJlc3MsIG9uSG92ZXIgfSkge1xuICBjb25zdCBoaXRUZXN0ID0gdXNlSGl0VGVzdCgpXG4gIGNvbnN0IFtob3ZlcmVkLCBzZXRIb3ZlcmVkXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgdXNlTW91c2UoKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgaW5zaWRlID0gaGl0VGVzdChldmVudC54LCBldmVudC55KVxuICAgIGlmIChldmVudC5hY3Rpb24gPT09ICdtb3ZlJyAmJiBpbnNpZGUgIT09IGhvdmVyZWQoKSkge1xuICAgICAgc2V0SG92ZXJlZChpbnNpZGUpXG4gICAgICBvbkhvdmVyPy4oaW5zaWRlKVxuICAgIH1cbiAgICBpZiAoaW5zaWRlICYmIGV2ZW50LmFjdGlvbiA9PT0gJ3ByZXNzJyAmJiBldmVudC5idXR0b24gPT09ICdsZWZ0Jykge1xuICAgICAgb25QcmVzcygpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcbiAgY29uc3QgaGlnaGxpZ2h0ZWQgPSBob3ZlcmVkKCkgfHwgYWN0aXZlXG4gIHJldHVybiA8dGV4dCBzdHlsZT17eyBiZzogaGlnaGxpZ2h0ZWQgPyBhY2NlbnQoKSA6IHVuZGVmaW5lZCwgY29sb3I6IGhpZ2hsaWdodGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICR7aGlnaGxpZ2h0ZWQgPyBhY3RpdmVJY29uIDogaWNvbn0gYH08L3RleHQ+XG59XG5cbmZ1bmN0aW9uIEFnZW50U3RyaXBSb3coeyBzZWxlY3RlZCwgZm9jdXNlZCwgY2hpbGRyZW4sIG9uUHJlc3MgfSkge1xuICBjb25zdCBoaXRUZXN0ID0gdXNlSGl0VGVzdCgpXG4gIGNvbnN0IFtob3ZlcmVkLCBzZXRIb3ZlcmVkXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgdXNlTW91c2UoKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgaW5zaWRlID0gaGl0VGVzdChldmVudC54LCBldmVudC55KVxuICAgIGlmIChldmVudC5hY3Rpb24gPT09ICdtb3ZlJykgc2V0SG92ZXJlZChpbnNpZGUpXG4gICAgaWYgKGluc2lkZSAmJiBldmVudC5hY3Rpb24gPT09ICdwcmVzcycgJiYgZXZlbnQuYnV0dG9uID09PSAnbGVmdCcpIHtcbiAgICAgIG9uUHJlc3MoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgYmc6IGZvY3VzZWQgPyBhY2NlbnQoKSA6IG51bGwsIGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IGhvdmVyZWQoKSA/IEZHX1NPRlQgOiBNVVRFRCB9fT5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IHNlbGVjdGVkID8gYWNjZW50KCkgOiBNVVRFRCwgYm9sZDogc2VsZWN0ZWQgfX0+e3NlbGVjdGVkID8gJ1x1Mjc2RiAnIDogJyAgJ308L3RleHQ+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9ib3g+XG4gIClcbn1cblxuLy8gb25seSB0aGUgbmV3ZXN0IHNsaWNlIG9mIGEgbG9uZyB0cmFuc2NyaXB0IHJlbmRlcnM7IG9sZGVyIGl0ZW1zIGxvYWQgaW5cbi8vIGJhdGNoZXMgd2hlbiB0aGUgdXNlciBzY3JvbGxzIHRvIHRoZSB0b3AuIHJlbmRlciBjb3N0IGlzIHBlci1pdGVtLCBzbyB0aGlzXG4vLyBrZWVwcyBkYXktbG9uZyBzZXNzaW9ucyBhcyBmYXN0IGFzIGZyZXNoIG9uZXNcbmNvbnN0IEhJU1RPUllfV0lORE9XID0gNTBcblxuZnVuY3Rpb24gY29sbGFwc2VTdGVlclRvb2xzKGl0ZW1zKSB7XG4gIGNvbnN0IGNvbGxhcHNlZCA9IFtdXG4gIGxldCBoaWRkZW4gPSAwXG4gIGNvbnN0IGZsdXNoID0gKCkgPT4ge1xuICAgIGlmICghaGlkZGVuKSByZXR1cm5cbiAgICBjb2xsYXBzZWQucHVzaCh7IGtpbmQ6ICdzdGVlci10b29scycsIGNvdW50OiBoaWRkZW4gfSlcbiAgICBoaWRkZW4gPSAwXG4gIH1cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgaWYgKGl0ZW0ua2luZCA9PT0gJ3Rvb2wnIHx8IGl0ZW0ua2luZCA9PT0gJ3Rvb2wtZ3JvdXAnIHx8IGl0ZW0ua2luZCA9PT0gJ3Rob3VnaHRzJykge1xuICAgICAgaGlkZGVuICs9IGl0ZW0ua2luZCA9PT0gJ3Rvb2wtZ3JvdXAnID8gaXRlbS5pdGVtcy5sZW5ndGggOiAxXG4gICAgfSBlbHNlIHtcbiAgICAgIGZsdXNoKClcbiAgICAgIGNvbGxhcHNlZC5wdXNoKGl0ZW0pXG4gICAgfVxuICB9XG4gIGZsdXNoKClcbiAgcmV0dXJuIGNvbGxhcHNlZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gQXBwKHsgYm9vdCwgY29udHJvbGxlcjogY3RsIH0pIHtcbiAgY29uc3QgeyBjd2QsIHJvb3QsIHZlcnNpb24sIHNraWxscywgbWNwIH0gPSBib290XG4gIGNvbnN0IHN0YXRlID0gY3RsLnN0YXRlXG4gIGNvbnN0IFt3b3Jrc3BhY2VPcGVuLCBzZXRXb3Jrc3BhY2VPcGVuXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3dvcmtzcGFjZVJvd3MsIHNldFdvcmtzcGFjZVJvd3NdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbd29ya3NwYWNlU2VsZWN0ZWQsIHNldFdvcmtzcGFjZVNlbGVjdGVkXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbd29ya3NwYWNlTG9hZGluZywgc2V0V29ya3NwYWNlTG9hZGluZ10gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFt3b3Jrc3BhY2VFcnJvciwgc2V0V29ya3NwYWNlRXJyb3JdID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBbd29ya3NwYWNlSGVpZ2h0LCBzZXRXb3Jrc3BhY2VIZWlnaHRdID0gY3JlYXRlU2lnbmFsKDIwKVxuICBjb25zdCBbd29ya3NwYWNlUGVuZGluZywgc2V0V29ya3NwYWNlUGVuZGluZ10gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IHdvcmtzcGFjZUdyb3Vwc05vdyA9IHdvcmtzcGFjZUdyb3Vwcyh3b3Jrc3BhY2VSb3dzKCkpXG4gIGNvbnN0IHdvcmtzcGFjZVNlc3Npb25zID0gd29ya3NwYWNlR3JvdXBzTm93LmZsYXRNYXAoKGdyb3VwKSA9PiBncm91cC5zZXNzaW9ucylcbiAgYXN5bmMgZnVuY3Rpb24gcmVmcmVzaFdvcmtzcGFjZSgpIHtcbiAgICBpZiAoIWJvb3Qud29ya3NwYWNlIHx8IGJvb3QucmVmcy53b3Jrc3BhY2VSZWZyZXNoaW5nKSByZXR1cm5cbiAgICBib290LnJlZnMud29ya3NwYWNlUmVmcmVzaGluZyA9IHRydWVcbiAgICB0cnkge1xuICAgICAgY29uc3Qgcm93cyA9IGF3YWl0IGJvb3Qud29ya3NwYWNlLmxpc3QoKVxuICAgICAgY29uc3QgbmV4dCA9IHdvcmtzcGFjZUdyb3Vwcyhyb3dzKS5mbGF0TWFwKChncm91cCkgPT4gZ3JvdXAuc2Vzc2lvbnMpXG4gICAgICBjb25zdCBzZWxlY3RlZCA9IHdvcmtzcGFjZVNlbGVjdGlvbihuZXh0LCB3b3Jrc3BhY2VTZWxlY3RlZCgpLCB3b3Jrc3BhY2VTZXNzaW9ucylcbiAgICAgIHNldFdvcmtzcGFjZVNlbGVjdGVkKHNlbGVjdGVkKVxuICAgICAgc2V0V29ya3NwYWNlUm93cyhyb3dzKVxuICAgICAgc2V0V29ya3NwYWNlRXJyb3IoJycpXG4gICAgICBpZiAod29ya3NwYWNlT3BlbigpKSBhd2FpdCBib290LndvcmtzcGFjZS5wcmV2aWV3KHNlbGVjdGVkKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBzZXRXb3Jrc3BhY2VFcnJvcihgc2Vzc2lvbnMgZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYm9vdC5yZWZzLndvcmtzcGFjZVJlZnJlc2hpbmcgPSBmYWxzZVxuICAgICAgc2V0V29ya3NwYWNlTG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH1cbiAgYm9vdC5yZWZzLnJlZnJlc2hXb3Jrc3BhY2UgPSByZWZyZXNoV29ya3NwYWNlXG4gIHVzZUludGVydmFsKCgpID0+IHsgaWYgKHdvcmtzcGFjZU9wZW4oKSkgdm9pZCBib290LnJlZnMucmVmcmVzaFdvcmtzcGFjZSgpIH0sIDEwMDApXG4gIGlmIChib290LndvcmtzcGFjZSAmJiAhYm9vdC5yZWZzLndvcmtzcGFjZVN1YnNjcmliZWQpIHtcbiAgICBib290LnJlZnMud29ya3NwYWNlU3Vic2NyaWJlZCA9IHRydWVcbiAgICBjb25zdCBjbGVhbnVwID0gYm9vdC53b3Jrc3BhY2Uuc3Vic2NyaWJlPy4oKCkgPT4gdm9pZCBib290LnJlZnMucmVmcmVzaFdvcmtzcGFjZSgpKVxuICAgIG9uQ2xlYW51cCgoKSA9PiB7IGNsZWFudXA/LigpOyBib290LnJlZnMud29ya3NwYWNlU3Vic2NyaWJlZCA9IGZhbHNlIH0pXG4gIH1cbiAgY29uc3QgW21vZGVscywgc2V0TW9kZWxzXSA9IGNyZWF0ZVNpZ25hbChib290Lm1vZGVscylcbiAgY29uc3QgW3JlZnJlc2hpbmdNb2RlbHMsIHNldFJlZnJlc2hpbmdNb2RlbHNdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuXG4gIGNvbnN0IFtkZXJpdmVkLCBzZXREZXJpdmVkXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5kZXJpdmVkKVxuICBjb25zdCBbdGVybWluYWxXaWR0aCwgc2V0VGVybWluYWxXaWR0aF0gPSBjcmVhdGVTaWduYWwocHJvY2Vzcy5zdGRvdXQuY29sdW1ucyB8fCA4MClcbiAgdXNlUmVzaXplKCh7IHdpZHRoIH0pID0+IHNldFRlcm1pbmFsV2lkdGgod2lkdGgpKVxuICBjb25zdCBbb3ZlcmxheSwgc2V0T3ZlcmxheV0gPSBjcmVhdGVTaWduYWwoc3RhdGUub3ZlcmxheSlcbiAgY29uc3QgW3N0cmVhbWluZywgc2V0U3RyZWFtaW5nXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5zdHJlYW1pbmcpXG4gIGNvbnN0IFtsaXZlVXNhZ2UsIHNldExpdmVVc2FnZV0gPSBjcmVhdGVTaWduYWwoc3RhdGUubGl2ZVVzYWdlKVxuICBjb25zdCBbdHVyblBoYXNlLCBzZXRUdXJuUGhhc2VdID0gY3JlYXRlU2lnbmFsKHN0YXRlLnR1cm5QaGFzZSlcbiAgY29uc3QgW2J1c3ksIHNldEJ1c3ldID0gY3JlYXRlU2lnbmFsKHN0YXRlLmJ1c3kpXG4gIGNvbnN0IFtjb21wYWN0aW5nLCBzZXRDb21wYWN0aW5nXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5jb21wYWN0aW5nKVxuICBjb25zdCBbY29tcGFjdFN0YXR1cywgc2V0Q29tcGFjdFN0YXR1c10gPSBjcmVhdGVTaWduYWwoc3RhdGUuY29tcGFjdFN0YXR1cylcbiAgY29uc3QgW3N0YXJ0ZWRBdCwgc2V0U3RhcnRlZEF0XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5zdGFydGVkQXQpXG4gIGNvbnN0IFtpbnB1dCwgc2V0SW5wdXRWYWx1ZV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IGNvbXBvc2VyRmlsZXMgPSBib290LnJlZnMuY29tcG9zZXJGaWxlcyA/Pz0gY3JlYXRlQ29tcG9zZXJGaWxlcygpXG4gIGNvbnN0IFtpbnB1dEN1cnNvciwgc2V0SW5wdXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtjb21tYW5kRm9ybSwgc2V0Q29tbWFuZEZvcm1dID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IHNldElucHV0ID0gKHRleHQsIGN1cnNvcikgPT4ge1xuICAgIGJvb3QucmVmcy5kcmFmdFJldmlzaW9uID0gKGJvb3QucmVmcy5kcmFmdFJldmlzaW9uID8/IDApICsgMVxuICAgIGNvbnN0IHZhbHVlID0gY29tcG9zZXJGaWxlcy51cGRhdGUodGV4dCwgc3RhdGUuYXR0YWNobWVudHMpXG4gICAgc2V0SW5wdXRWYWx1ZSh2YWx1ZSlcbiAgICBzZXRJbnB1dEN1cnNvcihjdXJzb3IgPz8gdmFsdWUubGVuZ3RoKVxuICB9XG4gIGNvbnN0IFtkaWN0YXRpb25TdGF0dXMsIHNldERpY3RhdGlvblN0YXR1c10gPSBjcmVhdGVTaWduYWwoJ2lkbGUnKVxuICBjb25zdCBbZGljdGF0aW9uTGV2ZWxzLCBzZXREaWN0YXRpb25MZXZlbHNdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbY2FwdHVyZVN0YXR1cywgc2V0Q2FwdHVyZVN0YXR1c10gPSBjcmVhdGVTaWduYWwoJ2lkbGUnKVxuICBjb25zdCBbY29tcG9zZXJBY3Rpb25MYWJlbCwgc2V0Q29tcG9zZXJBY3Rpb25MYWJlbF0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IFttb2RlbCwgc2V0TW9kZWxdID0gY3JlYXRlU2lnbmFsKHN0YXRlLm1vZGVsKVxuICBjb25zdCBbZGVmYXVsdE1vZGVsLCBzZXREZWZhdWx0TW9kZWxdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmRlZmF1bHRNb2RlbClcbiAgY29uc3QgW2VmZm9ydCwgc2V0RWZmb3J0XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5lZmZvcnQpXG4gIGNvbnN0IFtkZWZhdWx0RWZmb3J0LCBzZXREZWZhdWx0RWZmb3J0XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5kZWZhdWx0RWZmb3J0KVxuICBjb25zdCBbc3BlZWQsIHNldFNwZWVkXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5zcGVlZClcbiAgY29uc3QgW3NwZWVkRGVmYXVsdHMsIHNldFNwZWVkRGVmYXVsdHNdID0gY3JlYXRlU2lnbmFsKHsgLi4uc3RhdGUuc3BlZWREZWZhdWx0cyB9KVxuICBjb25zdCBbc2hvd1NwZWVkUGFuZWwsIHNldFNob3dTcGVlZFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dFZmZvcnRQYW5lbCwgc2V0U2hvd0VmZm9ydFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dUaGVtZVBhbmVsLCBzZXRTaG93VGhlbWVQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93Q29uZmlnUGFuZWwsIHNldFNob3dDb25maWdQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93RGVsZXRlQ29uZmlybSwgc2V0U2hvd0RlbGV0ZUNvbmZpcm1dID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbY2xvdWRzLCBzZXRDbG91ZHNdID0gY3JlYXRlU2lnbmFsKGJvb3QuY2xvdWRzKVxuICBjb25zdCBbY29tcGFjdFRvb2xIaXN0b3J5LCBzZXRDb21wYWN0VG9vbEhpc3RvcnldID0gY3JlYXRlU2lnbmFsKGJvb3QuY29tcGFjdFRvb2xIaXN0b3J5KVxuICBjb25zdCBbZ2l0Rm9vdGVyLCBzZXRHaXRGb290ZXJdID0gY3JlYXRlU2lnbmFsKGJvb3QuZ2l0Rm9vdGVyKVxuICBjb25zdCBbd2lkZVNpZGViYXIsIHNldFdpZGVTaWRlYmFyXSA9IGNyZWF0ZVNpZ25hbChib290LndpZGVTaWRlYmFyKVxuICBjb25zdCBbcmVzZWFyY2hBZ2VudExpbWl0LCBzZXRSZXNlYXJjaEFnZW50TGltaXRdID0gY3JlYXRlU2lnbmFsKGJvb3QucmVzZWFyY2hBZ2VudExpbWl0KVxuICBjb25zdCBbcXVlc3Rpb25SZXF1ZXN0LCBzZXRRdWVzdGlvblJlcXVlc3RdID0gY3JlYXRlU2lnbmFsKHN0YXRlLnF1ZXN0aW9uKVxuICBjb25zdCBbc2hvd01lbW9yeVBhbmVsLCBzZXRTaG93TWVtb3J5UGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbbWVtU2NvcGUsIHNldE1lbVNjb3BlXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbbWVtb3J5TGlzdCwgc2V0TWVtb3J5TGlzdF0gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFt0aGVtZVByZWYsIHNldFRoZW1lUHJlZl0gPSBjcmVhdGVTaWduYWwoYm9vdC50aGVtZVByZWYgfHwgJ2F1dG8nKVxuICBjb25zdCBbcXVldWVkLCBzZXRRdWV1ZWRdID0gY3JlYXRlU2lnbmFsKHN0YXRlLnF1ZXVlZClcbiAgY29uc3QgW2V4cGVkaXRlZCwgc2V0RXhwZWRpdGVkXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5leHBlZGl0ZWQpXG4gIGNvbnN0IFtzZW50LCBzZXRTZW50XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5zZW50KVxuICBjb25zdCBbaGlzdElkeCwgc2V0SGlzdElkeF0gPSBjcmVhdGVTaWduYWwoLTEpXG4gIGNvbnN0IFtjbWRJbmRleCwgc2V0Q21kSW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtjbWRDeWNsZSwgc2V0Q21kQ3ljbGVdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtmaWxlSW5kZXgsIHNldEZpbGVJbmRleF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2ZpbGVMaXN0LCBzZXRGaWxlTGlzdF0gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFtmaWxlc0Rpc21pc3NlZCwgc2V0RmlsZXNEaXNtaXNzZWRdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbdmlldywgc2V0Vmlld1NpZ25hbF0gPSBjcmVhdGVTaWduYWwoJ2NoYXQnKVxuICBjb25zdCBbdmVyYm9zZV0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93TW9kZWxQYW5lbCwgc2V0U2hvd01vZGVsUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCwgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtyZXNlYXJjaE1vZGVsUmV0dXJuLCBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbc2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwsIHNldFNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3NlbGVjdGluZ1NoZWxsTW9kZWwsIHNldFNlbGVjdGluZ1NoZWxsTW9kZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbcGFydGljaXBhbnRNb2RlbFRhcmdldCwgc2V0UGFydGljaXBhbnRNb2RlbFRhcmdldF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3BlbmRpbmdSZXNlYXJjaCwgc2V0UGVuZGluZ1Jlc2VhcmNoXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbcGVuZGluZ0RlbGliZXJhdGlvbiwgc2V0UGVuZGluZ0RlbGliZXJhdGlvbl0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW2FnZW50c1ZlcnNpb24sIHNldEFnZW50c1ZlcnNpb25dID0gY3JlYXRlU2lnbmFsKHN0YXRlLmFjdGl2aXR5VmVyc2lvbilcbiAgY29uc3QgW3ZpZXdlZEFnZW50SWQsIHNldFZpZXdlZEFnZW50SWRdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFthZ2VudFdpbmRvd09mZnNldCwgc2V0QWdlbnRXaW5kb3dPZmZzZXRdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtzaG93SGlzdG9yeVBhbmVsLCBzZXRTaG93SGlzdG9yeVBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2hpc3RTY29wZSwgc2V0SGlzdFNjb3BlXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbaGlzdFByb21wdHMsIHNldEhpc3RQcm9tcHRzXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW3Nob3dSZXN1bWVQYW5lbCwgc2V0U2hvd1Jlc3VtZVBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Jlc3VtZVNjb3Blcywgc2V0UmVzdW1lU2NvcGVzXSA9IGNyZWF0ZVNpZ25hbChbJ3JlcG9zaXRvcnknLCAnZXZlcnl3aGVyZSddKVxuICBjb25zdCBbcmVzdW1lU2NvcGUsIHNldFJlc3VtZVNjb3BlXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbcmVzdW1lU2Vzc2lvbnMsIHNldFJlc3VtZVNlc3Npb25zXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW3Jlc3VtZUxvYWRpbmcsIHNldFJlc3VtZUxvYWRpbmddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd01jcFBhbmVsLCBzZXRTaG93TWNwUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd1Byb2plY3RQYW5lbCwgc2V0U2hvd1Byb2plY3RQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtpbmZvUGFuZWwsIHNldEluZm9QYW5lbF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3ZpZXdlZFNoZWxsSWQsIHNldFZpZXdlZFNoZWxsSWRdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtzaGVsbFdpbmRvd09mZnNldCwgc2V0U2hlbGxXaW5kb3dPZmZzZXRdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtzaG93V2FrZXVwc1BhbmVsLCBzZXRTaG93V2FrZXVwc1BhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dDb25uZWN0UGFuZWwsIHNldFNob3dDb25uZWN0UGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbYXV0aFByb3ZpZGVycywgc2V0QXV0aFByb3ZpZGVyc10gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFtzaGVsbHNWZXJzaW9uLCBzZXRTaGVsbHNWZXJzaW9uXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbZ2l0VmVyc2lvbiwgc2V0R2l0VmVyc2lvbl0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3Byb2plY3RzLCBzZXRQcm9qZWN0c10gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFtwcm9qZWN0c0xvYWRpbmcsIHNldFByb2plY3RzTG9hZGluZ10gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFttY3BTZXJ2ZXJzLCBzZXRNY3BTZXJ2ZXJzXSA9IGNyZWF0ZVNpZ25hbChtY3AubGlzdCgpKVxuICBjb25zdCBbY29tcGxldGluZywgc2V0Q29tcGxldGluZ10gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtjb21wSW5kZXgsIHNldENvbXBJbmRleF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3Jld2luZFN0ZXAsIHNldFJld2luZFN0ZXBdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtyZXdpbmRUYXJnZXQsIHNldFJld2luZFRhcmdldF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW29mZnNldCwgc2V0T2Zmc2V0XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbZm9sbG93LCBzZXRGb2xsb3ddID0gY3JlYXRlU2lnbmFsKHRydWUpXG4gIGNvbnN0IFtoaXN0V2luZG93LCBzZXRIaXN0V2luZG93XSA9IGNyZWF0ZVNpZ25hbChISVNUT1JZX1dJTkRPVylcbiAgY29uc3QgW3RyYW5zY3JpcHRNZXRyaWNzLCBzZXRUcmFuc2NyaXB0TWV0cmljc10gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3N0ZWVyLCBzZXRTdGVlcl0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3N0ZWVyVGV4dCwgc2V0U3RlZXJUZXh0XSA9IGNyZWF0ZVNpZ25hbCgnJylcblxuICBjb25zdCByZWZzID0gYm9vdC5yZWZzXG4gIHJlZnMucXVpdEF0ID8/PSAwXG4gIHJlZnMucmVzdW1lT3BlbiA/Pz0gMFxuXG4gIGZ1bmN0aW9uIHNldFZpZXcobmV4dCkge1xuICAgIHNldFZpZXdTaWduYWwobmV4dClcbiAgICBjdGwuaG9sZChuZXh0ICE9PSAnY2hhdCcpXG4gIH1cblxuICAvLyB0aGUgY29udHJvbGxlciBvd25zIGV2ZXJ5IHBpZWNlIG9mIGNvbnZlcnNhdGlvbiBzdGF0ZTsgdGhlc2Ugc2lnbmFsc1xuICAvLyBtaXJyb3IgaXQgc28gdGhlIHJlbmRlciB0cmVlIGJlbG93IHN0YXlzIHJlYWN0aXZlIHdpdGhvdXQga25vd2luZyB0aGF0XG4gIGNvbnN0IG1pcnJvciA9IChnZXQsIHNldCwgdmFsdWUpID0+IHtcbiAgICBpZiAoZ2V0KCkgIT09IHZhbHVlKSBzZXQodmFsdWUpXG4gIH1cbiAgY29uc3QgW3BlZXJTdGF0dXMsIHNldFBlZXJTdGF0dXNdID0gY3JlYXRlU2lnbmFsKCcnKVxuXG4gIGZ1bmN0aW9uIHN5bmNGcm9tQ29udHJvbGxlcigpIHtcbiAgICBzZXRQZWVyU3RhdHVzKHN0YXRlLnBlZXJFcnJvciA/IGBwZWVyIGRpc2Nvbm5lY3RlZDogJHtzdGF0ZS5wZWVyRXJyb3J9YCA6IHN0YXRlLnBlZXJQYXVzZWQgJiYgc3RhdGUucGVlckNvbm5lY3Rpb24gPyAncGVlciByZXNwb25zZXMgcGF1c2VkJyA6ICcnKVxuICAgIG1pcnJvcihkZXJpdmVkLCBzZXREZXJpdmVkLCBzdGF0ZS5kZXJpdmVkKVxuICAgIG1pcnJvcihvdmVybGF5LCBzZXRPdmVybGF5LCBzdGF0ZS5vdmVybGF5KVxuICAgIG1pcnJvcihzdHJlYW1pbmcsIHNldFN0cmVhbWluZywgc3RhdGUuc3RyZWFtaW5nKVxuICAgIG1pcnJvcihsaXZlVXNhZ2UsIHNldExpdmVVc2FnZSwgc3RhdGUubGl2ZVVzYWdlKVxuICAgIG1pcnJvcih0dXJuUGhhc2UsIHNldFR1cm5QaGFzZSwgc3RhdGUudHVyblBoYXNlKVxuICAgIG1pcnJvcihidXN5LCBzZXRCdXN5LCBzdGF0ZS5idXN5KVxuICAgIG1pcnJvcihjb21wYWN0aW5nLCBzZXRDb21wYWN0aW5nLCBzdGF0ZS5jb21wYWN0aW5nKVxuICAgIG1pcnJvcihjb21wYWN0U3RhdHVzLCBzZXRDb21wYWN0U3RhdHVzLCBzdGF0ZS5jb21wYWN0U3RhdHVzKVxuICAgIG1pcnJvcihzdGFydGVkQXQsIHNldFN0YXJ0ZWRBdCwgc3RhdGUuc3RhcnRlZEF0KVxuICAgIG1pcnJvcihtb2RlbCwgc2V0TW9kZWwsIHN0YXRlLm1vZGVsKVxuICAgIG1pcnJvcihkZWZhdWx0TW9kZWwsIHNldERlZmF1bHRNb2RlbCwgc3RhdGUuZGVmYXVsdE1vZGVsKVxuICAgIG1pcnJvcihzcGVlZCwgc2V0U3BlZWQsIHN0YXRlLnNwZWVkKVxuICAgIGlmIChKU09OLnN0cmluZ2lmeShzcGVlZERlZmF1bHRzKCkpICE9PSBKU09OLnN0cmluZ2lmeShzdGF0ZS5zcGVlZERlZmF1bHRzKSkgc2V0U3BlZWREZWZhdWx0cyh7IC4uLnN0YXRlLnNwZWVkRGVmYXVsdHMgfSlcbiAgICBtaXJyb3IoZWZmb3J0LCBzZXRFZmZvcnQsIHN0YXRlLmVmZm9ydClcbiAgICBtaXJyb3IoZGVmYXVsdEVmZm9ydCwgc2V0RGVmYXVsdEVmZm9ydCwgc3RhdGUuZGVmYXVsdEVmZm9ydClcbiAgICBtaXJyb3IocXVlc3Rpb25SZXF1ZXN0LCBzZXRRdWVzdGlvblJlcXVlc3QsIHN0YXRlLnF1ZXN0aW9uKVxuICAgIG1pcnJvcihxdWV1ZWQsIHNldFF1ZXVlZCwgc3RhdGUucXVldWVkKVxuICAgIG1pcnJvcihleHBlZGl0ZWQsIHNldEV4cGVkaXRlZCwgc3RhdGUuZXhwZWRpdGVkKVxuICAgIG1pcnJvcihzZW50LCBzZXRTZW50LCBzdGF0ZS5zZW50KVxuICAgIG1pcnJvcihhZ2VudHNWZXJzaW9uLCBzZXRBZ2VudHNWZXJzaW9uLCBzdGF0ZS5hY3Rpdml0eVZlcnNpb24pXG4gIH1cblxuICAvLyB0cmVuZCByZS1ydW5zIHRoaXMgY29tcG9uZW50IG9uIGV2ZXJ5IHNpZ25hbCBjaGFuZ2UsIHNvIHRoZSBjb250cm9sbGVyXG4gIC8vIGlzIHN1YnNjcmliZWQgb25jZSBhbmQgZWFjaCBoYW5kbGVyIHJlYWNoZXMgdGhlIG5ld2VzdCByZW5kZXIgdGhyb3VnaFxuICAvLyByZWZzLnVpLCB3aGljaCBpcyByZXBsYWNlZCBiZWxvdyBvbiBldmVyeSBwYXNzXG4gIHJlZnMudWkgPSB7XG4gICAgc3luYzogc3luY0Zyb21Db250cm9sbGVyLFxuICAgIGZsYXNoOiAobWVzc2FnZSkgPT4gZmxhc2gobWVzc2FnZSksXG4gICAgZGVyaXZlZDogKG5leHQpID0+IHtcbiAgICAgIHNldEFjY2VudChuZXh0LmNvbG9yKVxuICAgICAgYm9vdC5zZXRUaGVtZT8uKHsgYWNjZW50OiBuZXh0LmNvbG9yIHx8IERFRkFVTFRfQUNDRU5ULCBtdXRlZDogTVVURUQgfSlcbiAgICB9LFxuICAgIHF1ZXN0aW9uOiAoKSA9PiB7XG4gICAgICByZWZzLmRpY3RhdGlvbklucHV0Py5jYW5jZWwoKVxuICAgICAgZm0uZm9jdXMoJ3F1ZXN0aW9uJylcbiAgICB9LFxuICAgIHR1cm46ICgpID0+IHtcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICB9LFxuICAgIGlucHV0OiAodGV4dCkgPT4ge1xuICAgICAgcmVmcy5kaWN0YXRpb25JbnB1dD8uY2FuY2VsKClcbiAgICAgIHNldElucHV0KHRleHQpXG4gICAgfSxcbiAgICBzZXNzaW9uOiAoKSA9PiB7XG4gICAgICBzZXRDb21tYW5kRm9ybShudWxsKVxuICAgICAgcmVmcy5jb21tYW5kRXhwYW5zaW9uID0gbnVsbFxuICAgICAgcmVmcy5kaWN0YXRpb25JbnB1dD8uY2FuY2VsKClcbiAgICAgIHNldFZpZXdlZEFnZW50SWQobnVsbClcbiAgICAgIHNldFZpZXdlZFNoZWxsSWQobnVsbClcbiAgICAgIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIGZtLmZvY3VzKCdpbnB1dCcpXG4gICAgfSxcbiAgICByZXN1bWVkOiAobWV0YSkgPT4gZmxhc2goYHJlc3VtZWQgICR7bWV0YS50dXJuc30gJHttZXRhLnR1cm5zID09PSAxID8gJ3R1cm4nIDogJ3R1cm5zJ30gICR7dGltZUFnbyhtZXRhLmF0KX1gKSxcbiAgICBwcm9qZWN0OiAobmV4dCkgPT4ge1xuICAgICAgcmVmcy5kaWN0YXRpb25JbnB1dD8uY2FuY2VsKClcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBcXHgxYl0wO3BpY28gICR7bmV4dC5yb290LnNwbGl0KCcvJykucG9wKCl9XFx4MDdgKVxuICAgICAgc2V0TWNwU2VydmVycyhuZXh0Lm1jcC5saXN0KCkpXG4gICAgICBzZXRGaWxlTGlzdChbXSlcbiAgICB9LFxuICAgIG1jcDogKHNlcnZlcnMpID0+IHNldE1jcFNlcnZlcnMoc2VydmVycyksXG4gICAgc2hlbGxzOiAoKSA9PiBzZXRTaGVsbHNWZXJzaW9uKCh2KSA9PiB2ICsgMSksXG4gICAgZ2l0OiAoKSA9PiBzZXRHaXRWZXJzaW9uKCh2KSA9PiB2ICsgMSksXG4gIH1cbiAgaWYgKCFyZWZzLnN1YnNjcmliZWQpIHtcbiAgICByZWZzLnN1YnNjcmliZWQgPSB0cnVlXG4gICAgY3RsLm9uKCdjaGFuZ2UnLCAoKSA9PiByZWZzLnVpLnN5bmMoKSlcbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgWydmbGFzaCcsICdkZXJpdmVkJywgJ3F1ZXN0aW9uJywgJ3R1cm4nLCAnaW5wdXQnLCAnc2Vzc2lvbicsICdyZXN1bWVkJywgJ3Byb2plY3QnLCAnbWNwJywgJ3NoZWxscycsICdnaXQnXSkge1xuICAgICAgY3RsLm9uKHR5cGUsIChwYXlsb2FkKSA9PiByZWZzLnVpW3R5cGVdKHBheWxvYWQpKVxuICAgIH1cbiAgfVxuICBzeW5jRnJvbUNvbnRyb2xsZXIoKVxuXG4gIGNvbnN0IHNraWxsQ29tbWFuZHMgPSBza2lsbHMubGlzdCgpLm1hcCgocykgPT4gKHsgbmFtZTogcy5uYW1lLCBkZXNjOiBgc2tpbGwgICR7cy5kZXNjcmlwdGlvbiB8fCBzLnNvdXJjZX1gLCBza2lsbDogdHJ1ZSB9KSlcbiAgY29uc3QgdXNlckNvbW1hbmRzID0gYm9vdC5jb21tYW5kcy5saXN0KCkubWFwKChjKSA9PiAoeyBuYW1lOiBjLm5hbWUsIGRlc2M6IGBjb21tYW5kICAke2MuZGVzY3JpcHRpb24gfHwgYy5zb3VyY2V9YCwgY29tbWFuZDogdHJ1ZSB9KSlcbiAgY29uc3QgYnlOYW1lID0gbmV3IE1hcCgpXG4gIGNvbnN0IHNoYWRvd2VkID0gW11cbiAgZm9yIChjb25zdCBjIG9mIFsuLi5DT01NQU5EUywgLi4uc2tpbGxDb21tYW5kcywgLi4udXNlckNvbW1hbmRzXSkge1xuICAgIGlmIChieU5hbWUuaGFzKGMubmFtZSkpIHNoYWRvd2VkLnB1c2goYCR7Yy5za2lsbCA/ICdza2lsbCcgOiAnY29tbWFuZCd9IFwiJHtjLm5hbWV9XCJgKVxuICAgIGVsc2UgYnlOYW1lLnNldChjLm5hbWUsIGMpXG4gIH1cbiAgY29uc3QgYWxsQ29tbWFuZHMgPSBbLi4uYnlOYW1lLnZhbHVlcygpXVxuICBpZiAoc2hhZG93ZWQubGVuZ3RoICYmICFyZWZzLndhcm5lZFNoYWRvd2VkKSB7XG4gICAgcmVmcy53YXJuZWRTaGFkb3dlZCA9IHRydWVcbiAgICBzZXRUaW1lb3V0KCgpID0+IGZsYXNoKGBzaGFkb3dlZCBieSBhbiBlYXJsaWVyIG5hbWUsIHJlbmFtZSB0byB1c2U6ICR7c2hhZG93ZWQuam9pbignLCAnKX1gKSwgMClcbiAgfVxuXG4gIGNvbnN0IHRvYXN0ID0gdXNlVG9hc3Qoe1xuICAgIGR1cmF0aW9uOiAzNTAwLFxuICAgIHBvc2l0aW9uOiAndG9wLXJpZ2h0JyxcbiAgICByZW5kZXI6IChtZXNzYWdlKSA9PiA8dGV4dCBzdHlsZT17eyBiZzogYWNjZW50KCksIGNvbG9yOiAnYmxhY2snLCBib2xkOiB0cnVlIH19PntgICR7bWVzc2FnZX0gYH08L3RleHQ+LFxuICB9KVxuXG4gIGNvbnN0IHVwZGF0ZVRvYXN0ID0gdXNlVG9hc3Qoe1xuICAgIGR1cmF0aW9uOiA4MDAwLFxuICAgIHBvc2l0aW9uOiAndG9wLWNlbnRlcicsXG4gICAgcmVuZGVyOiAobWVzc2FnZSkgPT4gKFxuICAgICAgPGJveCBzdHlsZT17eyBiZzogYWNjZW50KCkgfX0+XG4gICAgICAgIDxTaGltbWVyIGNvbG9yPVwiYmxhY2tcIiBoaWdobGlnaHQ9e0hJR0hMSUdIVH0gZHVyYXRpb249ezE1MDB9PntgICR7bWVzc2FnZX0gYH08L1NoaW1tZXI+XG4gICAgICA8L2JveD5cbiAgICApLFxuICB9KVxuXG4gIGZ1bmN0aW9uIGZsYXNoKG1zZykge1xuICAgIHRvYXN0KG1zZylcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hNb2RlbHMoKSB7XG4gICAgaWYgKHJlZnJlc2hpbmdNb2RlbHMoKSkgcmV0dXJuXG4gICAgc2V0UmVmcmVzaGluZ01vZGVscyh0cnVlKVxuICAgIGZsYXNoKCdyZWZyZXNoaW5nIG1vZGVscycpXG4gICAgY29uc3Qgc3RhcnRlZCA9IHBlcmZvcm1hbmNlLm5vdygpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlZnJlc2hlZCA9IGF3YWl0IGJvb3QucmVmcmVzaE1vZGVscygpXG4gICAgICBib290Lm1vZGVscyA9IHJlZnJlc2hlZFxuICAgICAgc2V0TW9kZWxzKHJlZnJlc2hlZClcbiAgICAgIGNvbnN0IGVsYXBzZWQgPSBNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRlZClcbiAgICAgIGZsYXNoKGBtb2RlbHMgcmVmcmVzaGVkICAke3JlZnJlc2hlZC5sZW5ndGh9IG1vZGVscyAgJHtlbGFwc2VkfW1zYClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZsYXNoKGBtb2RlbCByZWZyZXNoIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCAxMjApfWApXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFJlZnJlc2hpbmdNb2RlbHMoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgcmVmcy5wYXN0ZUltYWdlID8/PSBjcmVhdGVDbGlwYm9hcmRJbnB1dCh7XG4gICAgcmVhZEltYWdlOiByZWFkQ2xpcGJvYXJkSW1hZ2UsXG4gICAgZ2V0RHJhZnQ6ICgpID0+ICh7IHZhbHVlOiBpbnB1dCgpLCBjdXJzb3I6IGlucHV0Q3Vyc29yKCksIHNlc3Npb246IHN0YXRlLnNlc3Npb24sIHJldmlzaW9uOiByZWZzLmRyYWZ0UmV2aXNpb24gfSksXG4gICAgYXR0YWNoSW1hZ2U6IGN0bC5hdHRhY2hJbWFnZSxcbiAgICBzZXRJbnB1dCxcbiAgICBvbkVycm9yOiAobWVzc2FnZSkgPT4gcmVmcy51aS5mbGFzaChtZXNzYWdlKSxcbiAgfSlcbiAgcmVmcy5jYXB0dXJlSW1hZ2UgPz89IGNyZWF0ZVNjcmVlbkNhcHR1cmVJbnB1dCh7XG4gICAgY2FwdHVyZVJlZ2lvbixcbiAgICBnZXREcmFmdDogKCkgPT4gKHsgdmFsdWU6IGlucHV0KCksIGN1cnNvcjogaW5wdXRDdXJzb3IoKSwgc2Vzc2lvbjogc3RhdGUuc2Vzc2lvbiwgcmV2aXNpb246IHJlZnMuZHJhZnRSZXZpc2lvbiB9KSxcbiAgICBhdHRhY2hJbWFnZTogY3RsLmF0dGFjaEltYWdlLFxuICAgIHNldElucHV0LFxuICAgIG9uRXJyb3I6IChtZXNzYWdlKSA9PiByZWZzLnVpLmZsYXNoKG1lc3NhZ2UpLFxuICAgIG9uU3RhdHVzOiBzZXRDYXB0dXJlU3RhdHVzLFxuICB9KVxuXG4gIGlmICghcmVmcy5kaWN0YXRpb24pIHtcbiAgICByZWZzLmRpY3RhdGlvbiA9IGNyZWF0ZURpY3RhdGlvbih7XG4gICAgICBvblN0YXR1czogKHN0YXR1cykgPT4ge1xuICAgICAgICBzZXREaWN0YXRpb25TdGF0dXMoc3RhdHVzKVxuICAgICAgICBpZiAoc3RhdHVzICE9PSAncmVjb3JkaW5nJykgc2V0RGljdGF0aW9uTGV2ZWxzKFtdKVxuICAgICAgfSxcbiAgICAgIG9uTGV2ZWw6IChsZXZlbCkgPT4gc2V0RGljdGF0aW9uTGV2ZWxzKGFwcGVuZExldmVsKGRpY3RhdGlvbkxldmVscygpLCBsZXZlbCkpLFxuICAgICAgb25FcnJvcjogKG1lc3NhZ2UpID0+IHJlZnMudWkuZmxhc2goYGRpY3RhdGlvbiBmYWlsZWQ6ICR7bWVzc2FnZX1gKSxcbiAgICB9KVxuICAgIHJlZnMuZGljdGF0aW9uSW5wdXQgPSBjcmVhdGVEaWN0YXRpb25JbnB1dCh7IGRpY3RhdGlvbjogcmVmcy5kaWN0YXRpb24sIGdldElucHV0OiBpbnB1dCwgc2V0SW5wdXQgfSlcbiAgICBjb25zdCBwcmVsb2FkID0gc2V0SW1tZWRpYXRlKCgpID0+IHJlZnMuZGljdGF0aW9uLnByZWxvYWQoKSlcbiAgICBwcmVsb2FkLnVucmVmKClcbiAgICBwcm9jZXNzLm9uY2UoJ2V4aXQnLCAoKSA9PiB7XG4gICAgICBjbGVhckltbWVkaWF0ZShwcmVsb2FkKVxuICAgICAgcmVmcy5kaWN0YXRpb24uZGlzcG9zZSgpXG4gICAgfSlcbiAgICBmb3IgKGNvbnN0IFtzaWduYWwsIGNvZGVdIG9mIFtbJ1NJR1RFUk0nLCAxNDNdLCBbJ1NJR0hVUCcsIDEyOV1dKSB7XG4gICAgICBwcm9jZXNzLm9uY2Uoc2lnbmFsLCAoKSA9PiB7XG4gICAgICAgIHJlZnMuZGljdGF0aW9uLmRpc3Bvc2UoKVxuICAgICAgICBwcm9jZXNzLmV4aXQoY29kZSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgaWYgKCFyZWZzLnVwZGF0ZUNoZWNrZWQpIHtcbiAgICByZWZzLnVwZGF0ZUNoZWNrZWQgPSB0cnVlXG4gICAgY2hlY2tGb3JVcGRhdGUodmVyc2lvbikudGhlbigoZm91bmQpID0+IHtcbiAgICAgIGlmICghZm91bmQpIHJldHVyblxuICAgICAgdXBkYXRlVG9hc3QoYHBpY28gdiR7Zm91bmQudmVyc2lvbn0gYXZhaWxhYmxlICAvdXBkYXRlYClcbiAgICAgIGZvdW5kLm1hcmtOb3RpZmllZCgpXG4gICAgfSkuY2F0Y2goKCkgPT4ge30pXG4gIH1cblxuICBjb25zdCBwZXJmb3JtQ29tcGFjdGlvbiA9IGN0bC5jb21wYWN0XG5cbiAgZnVuY3Rpb24gY29tcGxldGlvblNvdXJjZShuYW1lKSB7XG4gICAgaWYgKG5hbWUgPT09ICdzcGVlZCcpIHJldHVybiBTUEVFRF9MRVZFTFMubWFwKChsKSA9PiBsLmtleSlcbiAgICBpZiAobmFtZSA9PT0gJ2NvbG9yJykgcmV0dXJuIE9iamVjdC5rZXlzKFNFU1NJT05fQ09MT1JTKVxuICAgIGlmIChuYW1lID09PSAndGhlbWUnKSByZXR1cm4gWy4uLnBhbGV0dGVMaXN0KCkubWFwKChwKSA9PiBwLmtleSksICdhdXRvJ11cbiAgICBpZiAobmFtZSA9PT0gJ2VmZm9ydCcpIHJldHVybiBbJ2RlZmF1bHQnLCAnbG93JywgJ21lZGl1bScsICdoaWdoJywgJ21heCddXG4gICAgaWYgKG5hbWUgPT09ICdtb2RlbCcpIHJldHVybiBtb2RlbHMoKS5maWx0ZXIoKG0pID0+IG0uYXZhaWxhYmxlICE9PSBmYWxzZSkubWFwKChtKSA9PiBtLm5hbWUpXG4gICAgY29uc3QgY21kID0gYWxsQ29tbWFuZHMuZmluZCgoYykgPT4gYy5uYW1lID09PSBuYW1lKVxuICAgIGlmIChjbWQ/LnNraWxsIHx8IGNtZD8uY29tbWFuZCkgcmV0dXJuIGZpbGVMaXN0KClcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gZGlzbWlzc0NvbXBsZXRpb24oKSB7XG4gICAgc2V0Q29tcGxldGluZyhmYWxzZSlcbiAgICBzZXRDb21wSW5kZXgoMClcbiAgfVxuXG4gIGZ1bmN0aW9uIGFjY2VwdENvbXBsZXRpb24odmFsdWUsIGN0eCwgY2FuZGlkYXRlKSB7XG4gICAgc2V0SW5wdXQoYXBwbHlDb21wbGV0aW9uKHZhbHVlLCBjdHgsIGNhbmRpZGF0ZSkpXG4gICAgZGlzbWlzc0NvbXBsZXRpb24oKVxuICB9XG5cbiAgZnVuY3Rpb24gc2VuZCh0ZXh0KSB7XG4gICAgaWYgKHZpZXdlZEFnZW50SWQoKSB8fCB2aWV3ZWRTaGVsbElkKCkpIHJldHVyblxuICAgIGNvbnN0IHZhbHVlID0gdGV4dC50cmltKClcbiAgICBpZiAoIXZhbHVlKSByZXR1cm5cbiAgICBkaXNtaXNzQ29tcGxldGlvbigpXG4gICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgY29uc3QgW25hbWUsIC4uLnJlc3RdID0gdmFsdWUuc2xpY2UoMSkuc3BsaXQoL1xccysvKVxuICAgICAgY29uc3QgbWF0Y2ggPSBhbGxDb21tYW5kcy5maW5kKChjKSA9PiBjLm5hbWUgPT09IG5hbWUudG9Mb3dlckNhc2UoKSlcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBpZiAobWF0Y2guY29tbWFuZCkgcmV0dXJuIGluc2VydENvbW1hbmQobWF0Y2gsIHsgc3RhcnQ6IHRleHQuaW5kZXhPZignLycpLCBlbmQ6IHRleHQubGVuZ3RoIH0sIHJlc3Quam9pbignICcpKVxuICAgICAgICBzZXRJbnB1dCgnJylcbiAgICAgICAgcnVuQ29tbWFuZChtYXRjaCwgcmVzdC5qb2luKCcgJykpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICBzZXRIaXN0SWR4KC0xKVxuICAgIGNvbXBvc2VyRmlsZXMudXBkYXRlKHRleHQsIHN0YXRlLmF0dGFjaG1lbnRzKVxuICAgIGN0bC5zZW5kKGNvbXBvc2VyRmlsZXMuY29udGVudCgpLnRyaW0oKSlcbiAgICBzZXRJbnB1dCgnJylcbiAgfVxuXG4gIGZ1bmN0aW9uIGludGVycnVwdCgpIHtcbiAgICBpZiAoIWJ1c3koKSkgcmV0dXJuXG4gICAgaWYgKHN0YXRlLnF1ZXN0aW9uKSByZWZzLmZvY3VzQ29tcG9zZXJBZnRlclF1ZXN0aW9uID0gdHJ1ZVxuICAgIGN0bC5pbnRlcnJ1cHQoKVxuICB9XG5cbiAgY29uc3QgZm10VG9rZW5zID0gKG4pID0+IChuID49IDEwMDAgPyBgJHsobiAvIDEwMDApLnRvRml4ZWQoMSl9a2AgOiBTdHJpbmcobikpXG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVmcmVzaE1lbW9yaWVzKCkge1xuICAgIHNldE1lbW9yeUxpc3QoYXdhaXQgYm9vdC5tZW1vcnkubGlzdCgpLmNhdGNoKCgpID0+IFtdKSlcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHRvZ2dsZU1lbW9yeURpc2FibGVkKG0pIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYm9vdC5tZW1vcnkuc2V0RGlzYWJsZWQobSwgIW0uZGlzYWJsZWQpXG4gICAgICBhd2FpdCByZWZyZXNoTWVtb3JpZXMoKVxuICAgICAgZmxhc2goYCR7bS5kaXNhYmxlZCA/ICdlbmFibGVkJyA6ICdzdXBwcmVzc2VkJ30gJHttLm5hbWV9ICgke20uc2NvcGV9KWApXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmbGFzaChgbWVtb3J5IHVwZGF0ZSBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgMTAwKX1gKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGZvcmdldE1lbW9yeShtKSB7XG4gICAgY29uc3QgYXJtZWQgPSByZWZzLmZvcmdldEFybVxuICAgIGlmICghYXJtZWQgfHwgYXJtZWQuZmlsZSAhPT0gbS5maWxlIHx8IERhdGUubm93KCkgLSBhcm1lZC5hdCA+IDMwMDApIHtcbiAgICAgIHJlZnMuZm9yZ2V0QXJtID0geyBmaWxlOiBtLmZpbGUsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIGZvcmdldCBcIiR7bS5uYW1lfVwiYClcbiAgICB9XG4gICAgcmVmcy5mb3JnZXRBcm0gPSBudWxsXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGJvb3QubWVtb3J5LmZvcmdldChtKVxuICAgICAgYXdhaXQgcmVmcmVzaE1lbW9yaWVzKClcbiAgICAgIGZsYXNoKGBmb3Jnb3QgJHttLm5hbWV9ICgke20uc2NvcGV9KWApXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmbGFzaChgZm9yZ2V0IGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBvcGVuQ29udGV4dFBhbmVsKCkge1xuICAgIGNvbnN0IHRvayA9IChuKSA9PiBgfiR7Zm10VG9rZW5zKG4pfSB0b2tgXG4gICAgY29uc3QgYnJlYWtkb3duID0gYXdhaXQgY3RsLmNvbnRleHRCcmVha2Rvd24oKVxuICAgIGNvbnN0IHJvd3MgPSBicmVha2Rvd24ucm93cy5tYXAoKHJvdykgPT4gKHsgbmFtZTogcm93Lm5hbWUsIGRlc2M6IHJvdy5kZXNjLCBub3RlOiB0b2socm93LnRva2VucykgfSkpXG4gICAgaWYgKGJyZWFrZG93bi5tZWFzdXJlZCkge1xuICAgICAgcm93cy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ2xhc3QgbWVhc3VyZWQgcmVxdWVzdCcsXG4gICAgICAgIGRlc2M6ICdwcm92aWRlci1yZXBvcnRlZCBpbnB1dCB0b2tlbnMsIHRoZSBudW1iZXIgYmVoaW5kIGN0eCAlJyxcbiAgICAgICAgbm90ZTogYCR7YnJlYWtkb3duLm1lYXN1cmVkLnRvTG9jYWxlU3RyaW5nKCl9IHRva2AsXG4gICAgICB9KVxuICAgIH1cbiAgICBzZXRJbmZvUGFuZWwoe1xuICAgICAgdGl0bGU6IGBDb250ZXh0ICAke2JyZWFrZG93bi5tb2RlbH1gLFxuICAgICAgcm93cyxcbiAgICAgIG92ZXJ2aWV3OiBicmVha2Rvd24uc2VnbWVudHMubGVuZ3RoID8geyBzZWdtZW50czogYnJlYWtkb3duLnNlZ21lbnRzLCBtZWFzdXJlZDogYnJlYWtkb3duLm1lYXN1cmVkLCBsaW1pdDogYnJlYWtkb3duLmxpbWl0ID8/IG1vZGVsKCkuY29udGV4dCB9IDogbnVsbCxcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgdGhlbWVJdGVtcyA9ICgpID0+IFtcbiAgICAuLi5wYWxldHRlTGlzdCgpLFxuICAgIHsga2V5OiAnYXV0bycsIGRlc2M6IGBmb2xsb3cgdGhlIHRlcm1pbmFsIChkZXRlY3RlZDogJHtib290LmRldGVjdGVkVGhlbWUgfHwgJ2RhcmsnfSlgIH0sXG4gIF1cblxuICBmdW5jdGlvbiBwYWxldHRlRm9yKHByZWYpIHtcbiAgICByZXR1cm4gcHJlZiA9PT0gJ2F1dG8nID8gYm9vdC5kZXRlY3RlZFRoZW1lIHx8ICdkYXJrJyA6IHByZWZcbiAgfVxuXG4gIGZ1bmN0aW9uIHByZXZpZXdQYWxldHRlKHByZWYpIHtcbiAgICBzZXRQYWxldHRlKHBhbGV0dGVGb3IocHJlZikpXG4gICAgYm9vdC5zZXRUaGVtZT8uKHsgYWNjZW50OiBhY2NlbnQoKSwgbXV0ZWQ6IE1VVEVEIH0pXG4gIH1cblxuICBmdW5jdGlvbiBhcHBseVRoZW1lUHJlZihwcmVmKSB7XG4gICAgc2V0VGhlbWVQcmVmKHByZWYpXG4gICAgcHJldmlld1BhbGV0dGUocHJlZilcbiAgICB3cml0ZUNvbmZpZyh7IHRoZW1lOiBwcmVmID09PSAnYXV0bycgPyB1bmRlZmluZWQgOiBwcmVmIH0pLmNhdGNoKCgpID0+IHt9KVxuICAgIGZsYXNoKHByZWYgPT09ICdhdXRvJyA/IGB0aGVtZTogYXV0byAgZm9sbG93aW5nIHRoZSB0ZXJtaW5hbCAoJHtwYWxldHRlRm9yKCdhdXRvJyl9KWAgOiBgdGhlbWU6ICR7cHJlZn1gKVxuICB9XG5cbiAgZnVuY3Rpb24gc3RlZXJQcmV2aWV3KCkge1xuICAgIHJldHVybiBjdGwucHJldmlld1N0ZWVyKHN0ZWVyKCk/LmNoYW5nZXMpXG4gIH1cblxuICBmdW5jdGlvbiBzdGVlclJvd3MoKSB7XG4gICAgcmV0dXJuIHN0ZWVyYWJsZVRyYW5zY3JpcHQoc3RlZXJQcmV2aWV3KCkudHJhbnNjcmlwdClcbiAgfVxuXG4gIGZ1bmN0aW9uIGJlZ2luU3RlZXIoKSB7XG4gICAgaWYgKGJ1c3koKSB8fCBjb21wYWN0aW5nKCkpIHJldHVybiBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGZpcnN0JylcbiAgICBjb25zdCByb3dzID0gc3RlZXJSb3dzKClcbiAgICBjb25zdCBzZWxlY3RlZCA9IE1hdGgubWF4KDAsIHJvd3MubGVuZ3RoIC0gMSlcbiAgICBzZXRTdGVlcih7IHNlbGVjdGVkLCBlZGl0aW5nOiBmYWxzZSwgYWRkaW5nOiBmYWxzZSwgcm9sZTogJ3VzZXInLCBjaGFuZ2VzOiBbXSB9KVxuICAgIGlmIChyb3dzW3NlbGVjdGVkXSkgc3RlZXJMaXN0Rm9jdXMuZm9jdXMocm93c1tzZWxlY3RlZF0ubWVzc2FnZUlkKVxuICAgIHNldEhpc3RXaW5kb3coSW5maW5pdHkpXG4gICAgc2V0Rm9sbG93KHRydWUpXG4gICAgZm0uZm9jdXMoJ3N0ZWVyJylcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlU3RlZXIoYXBwbGllZCA9IGZhbHNlKSB7XG4gICAgc2V0U3RlZXIobnVsbClcbiAgICBzZXRTdGVlclRleHQoJycpXG4gICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICBmbS5mb2N1cygnaW5wdXQnKVxuICAgIGlmIChhcHBsaWVkKSBmbGFzaCgnY29udmVyc2F0aW9uIHN0ZWVyaW5nIGFwcGxpZWQgIG5vdGhpbmcgc2VudCcpXG4gIH1cblxuICBmdW5jdGlvbiBhcHBseVN0ZWVyKCkge1xuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGlmICghZHJhZnQ/LmNoYW5nZXMubGVuZ3RoKSByZXR1cm4gY2xvc2VTdGVlcigpXG4gICAgY3RsLmFwcGx5U3RlZXIoZHJhZnQuY2hhbmdlcylcbiAgICBjbG9zZVN0ZWVyKHRydWUpXG4gIH1cblxuICBmdW5jdGlvbiBzdGFydFN0ZWVyRWRpdCgpIHtcbiAgICBjb25zdCBkcmFmdCA9IHN0ZWVyKClcbiAgICBjb25zdCByb3cgPSBzdGVlclJvd3MoKVtkcmFmdC5zZWxlY3RlZF1cbiAgICBpZiAoIXJvdykgcmV0dXJuIHN0YXJ0U3RlZXJBZGQoKVxuICAgIGlmIChyb3cubG9ja2VkKSByZXR1cm4gZmxhc2goJ2xvY2tlZCAgdGhpcyBtZXNzYWdlIGlzIGJlZm9yZSB0aGUgbGF0ZXN0IGNvbXBhY3Rpb24nKVxuICAgIHNldFN0ZWVyVGV4dChyb3cudGV4dClcbiAgICBzZXRTdGVlcih7IC4uLmRyYWZ0LCBlZGl0aW5nOiB0cnVlLCBhZGRpbmc6IGZhbHNlLCByb2xlOiByb3cucm9sZSB9KVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnRTdGVlckFkZCgpIHtcbiAgICBjb25zdCBkcmFmdCA9IHN0ZWVyKClcbiAgICBjb25zdCByb3dzID0gc3RlZXJSb3dzKClcbiAgICBjb25zdCBzZWxlY3RlZCA9IHJvd3NbZHJhZnQuc2VsZWN0ZWRdXG4gICAgY29uc3QgcHJldmlvdXNSb2xlID0gc2VsZWN0ZWQ/LnJvbGVcbiAgICBjb25zdCByb2xlID0gcHJldmlvdXNSb2xlID09PSAndXNlcicgPyAnYXNzaXN0YW50JyA6IFNURUVSX1JPTEVTWzBdXG4gICAgc2V0U3RlZXJUZXh0KCcnKVxuICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIGVkaXRpbmc6IHRydWUsIGFkZGluZzogdHJ1ZSwgcm9sZSB9KVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhZ2VTdGVlclRleHQodGV4dCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGV4dC50cmltKClcbiAgICBjb25zdCBkcmFmdCA9IHN0ZWVyKClcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gZmxhc2goJ21lc3NhZ2UgY2Fubm90IGJlIGVtcHR5JylcbiAgICBjb25zdCByb3dzID0gc3RlZXJSb3dzKClcbiAgICBjb25zdCB0YXJnZXQgPSByb3dzW2RyYWZ0LnNlbGVjdGVkXVxuICAgIGNvbnN0IGNoYW5nZSA9IGRyYWZ0LmFkZGluZ1xuICAgICAgPyB7IG9wOiAnaW5zZXJ0JywgaWQ6IG1ha2VFdmVudCgnbWVzc2FnZScpLmlkLCBhZnRlcjogdGFyZ2V0Py5tZXNzYWdlSWQgPz8gbnVsbCwgbWVzc2FnZTogeyByb2xlOiBkcmFmdC5yb2xlLCBjb250ZW50OiB2YWx1ZSB9IH1cbiAgICAgIDogeyBvcDogJ3JlcGxhY2UnLCB0YXJnZXQ6IHRhcmdldC5tZXNzYWdlSWQsIG1lc3NhZ2U6IHsgcm9sZTogZHJhZnQucm9sZSwgY29udGVudDogdmFsdWUgfSB9XG4gICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgZWRpdGluZzogZmFsc2UsIGFkZGluZzogZmFsc2UsIGNoYW5nZXM6IFsuLi5kcmFmdC5jaGFuZ2VzLCBjaGFuZ2VdIH0pXG4gICAgc2V0U3RlZXJUZXh0KCcnKVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhZ2VTdGVlckRlbGV0ZSgpIHtcbiAgICBjb25zdCBkcmFmdCA9IHN0ZWVyKClcbiAgICBjb25zdCByb3dzID0gc3RlZXJSb3dzKClcbiAgICBjb25zdCB0YXJnZXQgPSByb3dzW2RyYWZ0LnNlbGVjdGVkXVxuICAgIGlmICghdGFyZ2V0KSByZXR1cm5cbiAgICBpZiAodGFyZ2V0LmxvY2tlZCkgcmV0dXJuIGZsYXNoKCdsb2NrZWQgIHRoaXMgbWVzc2FnZSBpcyBiZWZvcmUgdGhlIGxhdGVzdCBjb21wYWN0aW9uJylcbiAgICBjb25zdCBjaGFuZ2VzID0gWy4uLmRyYWZ0LmNoYW5nZXMsIHsgb3A6ICdkZWxldGUnLCB0YXJnZXQ6IHRhcmdldC5tZXNzYWdlSWQgfV1cbiAgICBjb25zdCByZW1haW5pbmcgPSByb3dzLmZpbHRlcigocm93KSA9PiByb3cubWVzc2FnZUlkICE9PSB0YXJnZXQubWVzc2FnZUlkKVxuICAgIGNvbnN0IHNlbGVjdGVkID0gTWF0aC5taW4oZHJhZnQuc2VsZWN0ZWQsIE1hdGgubWF4KDAsIHJlbWFpbmluZy5sZW5ndGggLSAxKSlcbiAgICBzZXRTdGVlcih7IC4uLmRyYWZ0LCBzZWxlY3RlZCwgY2hhbmdlcyB9KVxuICAgIGlmIChyZW1haW5pbmdbc2VsZWN0ZWRdKSBzdGVlckxpc3RGb2N1cy5mb2N1cyhyZW1haW5pbmdbc2VsZWN0ZWRdLm1lc3NhZ2VJZClcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGluc2VydENvbW1hbmQoY29tbWFuZCwgcmFuZ2UgPSBjb21tYW5kQXQoaW5wdXQoKSwgaW5wdXRDdXJzb3IoKSksIGFyZ3MgPSAnJykge1xuICAgIGlmICghcmFuZ2UpIHJldHVyblxuICAgIGNvbnN0IGRyYWZ0ID0gaW5wdXQoKVxuICAgIGNvbnN0IHRva2VuID0ge31cbiAgICByZWZzLmNvbW1hbmRFeHBhbnNpb24gPSB0b2tlblxuICAgIHNldENtZEN5Y2xlKG51bGwpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gYm9vdC5jb21tYW5kcy5saXN0KCkuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBjb21tYW5kLm5hbWUpXG4gICAgICBjb25zdCB7IGJvZHkgfSA9IHBhcnNlRnJvbnRtYXR0ZXIoYXdhaXQgcmVhZEZpbGUobWV0YWRhdGEuZmlsZSwgJ3V0Zi04JykpXG4gICAgICBpZiAocmVmcy5jb21tYW5kRXhwYW5zaW9uICE9PSB0b2tlbiB8fCBpbnB1dCgpICE9PSBkcmFmdCkgcmV0dXJuXG4gICAgICBjb25zdCBmb3JtID0geyBuYW1lOiBjb21tYW5kLm5hbWUsIGJvZHk6IGJvZHkudHJpbSgpLCBkcmFmdCwgcmFuZ2UsIGFyZ3MsIHRva2VuIH1cbiAgICAgIGNvbnN0IGZpZWxkcyA9IGNvbW1hbmRGaWVsZHMoeyBhcmd1bWVudHM6IHBhcnNlQ29tbWFuZEFyZ3VtZW50cyhib2R5KSB9LCBib2R5LCBhcmdzKVxuICAgICAgaWYgKGZpZWxkcy5sZW5ndGgpIHtcbiAgICAgICAgc2V0Q29tbWFuZEZvcm0oeyAuLi5mb3JtLCBmaWVsZHMgfSlcbiAgICAgICAgaWYgKGZpZWxkcy5zb21lKChmaWVsZCkgPT4gZmllbGQudHlwZSA9PT0gJ3BhdGgnKSkge1xuICAgICAgICAgIGxpc3RGaWxlcyhjd2QpLnRoZW4oc2V0RmlsZUxpc3QpLmNhdGNoKChlcnJvcikgPT4gZmxhc2goZXJyb3IubWVzc2FnZSkpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBmaW5pc2hDb21tYW5kKGZvcm0sIHt9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBmbGFzaChgY291bGQgbm90IGxvYWQgLyR7Y29tbWFuZC5uYW1lfTogJHtlcnJvci5tZXNzYWdlfWApXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZmluaXNoQ29tbWFuZChmb3JtLCB2YWx1ZXMpIHtcbiAgICBpZiAocmVmcy5jb21tYW5kRXhwYW5zaW9uICE9PSBmb3JtLnRva2VuIHx8IGlucHV0KCkgIT09IGZvcm0uZHJhZnQpIHJldHVyblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBib2R5ID0gZXhwYW5kQ29tbWFuZChmb3JtLmJvZHksIHZhbHVlc1snJGFyZ3MnXSA/PyBmb3JtLmFyZ3MsIHZhbHVlcylcbiAgICAgIGNvbnN0IG5leHQgPSByZXBsYWNlQ29tbWFuZChmb3JtLmRyYWZ0LCBmb3JtLnJhbmdlLCBib2R5KVxuICAgICAgc2V0SW5wdXQobmV4dC50ZXh0LCBuZXh0LmN1cnNvcilcbiAgICAgIHNldENvbW1hbmRGb3JtKG51bGwpXG4gICAgICByZWZzLmNvbW1hbmRFeHBhbnNpb24gPSBudWxsXG4gICAgICBmbS5mb2N1cygnaW5wdXQnKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBmbGFzaChlcnJvci5tZXNzYWdlKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmQoYywgYXJncyA9ICcnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzICE9PSAnc3RyaW5nJykgYXJncyA9ICcnXG4gICAgaWYgKGMuY29tbWFuZCkgcmV0dXJuIGluc2VydENvbW1hbmQoYylcbiAgICBzZXRJbnB1dCgnJylcbiAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgIGlmIChjLm5hbWUgPT09ICdmb3JrJykgcmV0dXJuIGN0bC5mb3JrKGFyZ3MudHJpbSgpKVxuICAgIGlmIChjLm5hbWUgPT09ICdyZW5hbWUnKSByZXR1cm4gY3RsLnJlbmFtZShhcmdzKVxuICAgIGlmIChjLm5hbWUgPT09ICdjb2xvcicpIHJldHVybiBjdGwuc2V0Q29sb3IoYXJncylcbiAgICBpZiAoYy5uYW1lID09PSAnY29uZmlnJykge1xuICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKHRydWUpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3RoZW1lJykge1xuICAgICAgaWYgKCFhcmdzKSByZXR1cm4gc2V0U2hvd1RoZW1lUGFuZWwodHJ1ZSlcbiAgICAgIGNvbnN0IGNob2ljZSA9IGFyZ3MudG9Mb3dlckNhc2UoKVxuICAgICAgY29uc3QgdmFsaWQgPSBbLi4ucGFsZXR0ZUxpc3QoKS5tYXAoKHApID0+IHAua2V5KSwgJ2F1dG8nXVxuICAgICAgaWYgKCF2YWxpZC5pbmNsdWRlcyhjaG9pY2UpKSByZXR1cm4gZmxhc2goYHRoZW1lOiAke3BhbGV0dGVOYW1lKCl9ICAvdGhlbWUgPCR7dmFsaWQuam9pbignfCcpfT5gKVxuICAgICAgYXBwbHlUaGVtZVByZWYoY2hvaWNlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLnNraWxsKSByZXR1cm4gY3RsLnNlbmRTa2lsbChjLm5hbWUpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2Nvbm5lY3QnKSByZXR1cm4gb3BlbkNvbm5lY3RQYW5lbCgpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2luaXQnKSByZXR1cm4gY3RsLnNlbmRJbml0KGFyZ3MpXG4gICAgaWYgKGMubmFtZSA9PT0gJ3BhcmFsbGVsJykge1xuICAgICAgY29uc3QgdGFzayA9IGFyZ3MudHJpbSgpXG4gICAgICBpZiAoYXdhaXQgY3RsLnNlbmRQYXJhbGxlbCh0YXNrKSkgcmV0dXJuXG4gICAgICBzZXRQZW5kaW5nUmVzZWFyY2goeyB0YXNrIH0pXG4gICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKHRydWUpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ2RlbGliZXJhdGUnKSB7XG4gICAgICBjb25zdCBkZWNpc2lvbiA9IGFyZ3MudHJpbSgpXG4gICAgICBpZiAoYXdhaXQgY3RsLnNlbmREZWxpYmVyYXRlKGRlY2lzaW9uKSkgcmV0dXJuXG4gICAgICBzZXRQZW5kaW5nRGVsaWJlcmF0aW9uKHsgZGVjaXNpb24gfSlcbiAgICAgIHNldFNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKHRydWUpXG4gICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKHRydWUpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ21vZGVsJykge1xuICAgICAgaWYgKCFhcmdzKSByZXR1cm4gc2V0U2hvd01vZGVsUGFuZWwodHJ1ZSlcbiAgICAgIHJldHVybiBjdGwuc3dpdGNoTW9kZWxCeU5hbWUoYXJncylcbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3JlZnJlc2gtbW9kZWxzJykgcmV0dXJuIHJlZnJlc2hNb2RlbHMoKVxuICAgIGlmIChjLm5hbWUgPT09ICdzcGVlZCcpIHtcbiAgICAgIGlmICghc3BlZWRBcHBsaWVzKCkpIHJldHVybiBmbGFzaChgJHttb2RlbCgpLm5hbWV9IGRvZXMgbm90IHN1cHBvcnQgc3BlZWQgY29udHJvbGApXG4gICAgICBpZiAoIWFyZ3MpIHJldHVybiBzZXRTaG93U3BlZWRQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuIGN0bC5zcGVlZENvbW1hbmQoYXJncy50b0xvd2VyQ2FzZSgpKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnZWZmb3J0Jykge1xuICAgICAgaWYgKCFlZmZvcnRBcHBsaWVzKCkpIHJldHVybiBmbGFzaChgJHttb2RlbCgpLm5hbWV9IGRvZXMgbm90IHN1cHBvcnQgZWZmb3J0IGNvbnRyb2xgKVxuICAgICAgaWYgKCFhcmdzKSByZXR1cm4gc2V0U2hvd0VmZm9ydFBhbmVsKHRydWUpXG4gICAgICByZXR1cm4gY3RsLnNldEVmZm9ydEJ5TmFtZShhcmdzLnRvTG93ZXJDYXNlKCkpXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICd1cGRhdGUnKSB7XG4gICAgICBpZiAoaXNEZXZJbnN0YWxsKGltcG9ydC5tZXRhLnVybCkpIHJldHVybiBmbGFzaCgndGhpcyBwaWNvIHJ1bnMgZnJvbSBhIHNvdXJjZSBjaGVja291dCAgdXBkYXRlIGl0IHdpdGggZ2l0JylcbiAgICAgIGNvbnN0IGxhdGVzdCA9IGF3YWl0IGZldGNoTGF0ZXN0VmVyc2lvbigpLmNhdGNoKCgpID0+IG51bGwpXG4gICAgICBpZiAobGF0ZXN0ICYmICFuZXdlclZlcnNpb24odmVyc2lvbiwgbGF0ZXN0KSkgcmV0dXJuIGZsYXNoKGBwaWNvIHYke3ZlcnNpb259IGlzIGFscmVhZHkgdGhlIGxhdGVzdGApXG4gICAgICBmbGFzaChgdXBkYXRpbmcke2xhdGVzdCA/IGAgdG8gdiR7bGF0ZXN0fWAgOiAnJ30uLi5gKVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuVXBkYXRlKClcbiAgICAgIGlmIChyZXN1bHQub2spIHJldHVybiBmbGFzaChgdXBkYXRlZCR7bGF0ZXN0ID8gYCB0byB2JHtsYXRlc3R9YCA6ICcnfSAgcmVzdGFydCBwaWNvIHRvIHVzZSBpdGApXG4gICAgICByZXR1cm4gZmxhc2goYHVwZGF0ZSBmYWlsZWQ6ICR7cmVzdWx0Lm91dHB1dC5zbGljZSgwLCAxMDApfWApXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdzdGVlcicpIHJldHVybiBiZWdpblN0ZWVyKClcbiAgICBpZiAoYy5uYW1lID09PSAnY29udGV4dCcpIHJldHVybiBvcGVuQ29udGV4dFBhbmVsKClcbiAgICBpZiAoYy5uYW1lID09PSAnaGlzdG9yeScpIHJldHVybiBvcGVuSGlzdG9yeVNlYXJjaCgpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2hlbHAnKSByZXR1cm4gc2V0VmlldygnaGVscCcpXG4gICAgaWYgKGMubmFtZSA9PT0gJ21jcCcpIHJldHVybiBzZXRTaG93TWNwUGFuZWwodHJ1ZSlcbiAgICBpZiAoYy5uYW1lID09PSAnd2FrZXVwcycpIHJldHVybiBzZXRTaG93V2FrZXVwc1BhbmVsKHRydWUpXG4gICAgaWYgKGMubmFtZSA9PT0gJ21lbW9yeScpIHtcbiAgICAgIGF3YWl0IHJlZnJlc2hNZW1vcmllcygpXG4gICAgICByZXR1cm4gc2V0U2hvd01lbW9yeVBhbmVsKHRydWUpXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdyZXN1bWUnKSB7XG4gICAgICBpZiAoYnVzeSgpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBiZWZvcmUgc3dpdGNoaW5nIHNlc3Npb25zJylcbiAgICAgIG9wZW5SZXN1bWVQYW5lbCgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3Byb2plY3QnKSByZXR1cm4gb3BlblByb2plY3RQYW5lbCgpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2N3ZCcpIHtcbiAgICAgIGNvbnN0IHJvb3ROb3RlID0gYm9vdC5yb290ICE9PSBib290LmN3ZCA/IGAgIHByb2plY3Qgcm9vdCAke3Nob3J0ZW5QYXRoKGJvb3Qucm9vdCl9YCA6ICcnXG4gICAgICByZXR1cm4gZmxhc2goYCR7Ym9vdC5kaXNwbGF5Q3dkfSR7cm9vdE5vdGV9YClcbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3NraWxscycpIHtcbiAgICAgIHJldHVybiBzZXRJbmZvUGFuZWwoe1xuICAgICAgICB0aXRsZTogJ1NraWxscycsXG4gICAgICAgIHJvd3M6IHNraWxscy5saXN0KCkubWFwKChzKSA9PiAoeyBuYW1lOiBzLm5hbWUsIGRlc2M6IHMuZGVzY3JpcHRpb24sIG5vdGU6IHMuc291cmNlIH0pKSxcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdjb21tYW5kcycpIHtcbiAgICAgIHJldHVybiBzZXRJbmZvUGFuZWwoe1xuICAgICAgICB0aXRsZTogJ0NvbW1hbmRzJyxcbiAgICAgICAgcm93czogW1xuICAgICAgICAgIC4uLkNPTU1BTkRTLm1hcCgoY21kKSA9PiAoeyBuYW1lOiBgLyR7Y21kLm5hbWV9YCwgZGVzYzogY21kLmRlc2MsIG5vdGU6ICdidWlsdGluJyB9KSksXG4gICAgICAgICAgLi4uYm9vdC5jb21tYW5kcy5saXN0KCkubWFwKChjbWQpID0+ICh7IG5hbWU6IGAvJHtjbWQubmFtZX1gLCBkZXNjOiBjbWQuZGVzY3JpcHRpb24sIG5vdGU6IGNtZC5zb3VyY2UgfSkpLFxuICAgICAgICBdLFxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3Rvb2xzJykge1xuICAgICAgY29uc3QgeyByb3dzLCBtY3BDb3VudCB9ID0gYXdhaXQgY3RsLmRlc2NyaWJlVG9vbHMoKVxuICAgICAgc2V0SW5mb1BhbmVsKHsgdGl0bGU6IGBUb29scyR7bWNwQ291bnQgPyBgICBwbHVzICR7bWNwQ291bnR9IE1DUCAoc2VlIC9tY3ApYCA6ICcnfWAsIHJvd3MgfSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnbmV3JykgcmV0dXJuIGN0bC5uZXdTZXNzaW9uKGFyZ3MpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgIGlmIChidXN5KCkpIHJldHVybiBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGZpcnN0JylcbiAgICAgIGlmICghc3RhdGUuc2Vzc2lvbikgcmV0dXJuIGZsYXNoKCdubyBjdXJyZW50IHNlc3Npb24gdG8gZGVsZXRlJylcbiAgICAgIHNldFNob3dEZWxldGVDb25maXJtKHRydWUpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3Jld2luZCcpIHtcbiAgICAgIGlmIChidXN5KCkpIHJldHVybiBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGZpcnN0JylcbiAgICAgIGlmICh1c2VyRW50cmllcyhkZXJpdmVkKCkpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZsYXNoKCdub3RoaW5nIHRvIHJld2luZCB5ZXQnKVxuICAgICAgc2V0UmV3aW5kU3RlcCgncGljaycpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ2NsZWFyJykgcmV0dXJuIGN0bC5jbGVhcigpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2NvbXBhY3QnKSByZXR1cm4gcGVyZm9ybUNvbXBhY3Rpb24oYXJncylcbiAgICBpZiAoYy5uYW1lID09PSAnY29zdCcpIHtcbiAgICAgIGNvbnN0IGNvc3QgPSBjdGwuY29zdFN1bW1hcnkoKVxuICAgICAgaWYgKCFjb3N0KSByZXR1cm4gZmxhc2goJ25vIHVzYWdlIHlldCcpXG4gICAgICBjb25zdCBiYXNlID0gYCQke2Nvc3Quc3BlbnQudG9GaXhlZCg0KX0gc3BlbnQgICR7Y29zdC5wcm9tcHRUb2tlbnMudG9Mb2NhbGVTdHJpbmcoKX0gaW4gICR7Y29zdC5jb21wbGV0aW9uVG9rZW5zLnRvTG9jYWxlU3RyaW5nKCl9IG91dGBcbiAgICAgIGZsYXNoKGNvc3Quc3BlbnQgLSBjb3N0LmFjdGl2ZSA+IDAuMDAwMDUgPyBgJHtiYXNlfSAgY3VycmVudCBjb252ZXJzYXRpb24gJCR7Y29zdC5hY3RpdmUudG9GaXhlZCg0KX1gIDogYmFzZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnZXhwb3J0Jykge1xuICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGN0bC5leHBvcnRNYXJrZG93bigpXG4gICAgICBmbGFzaChgZXhwb3J0ZWQgdG8gJHtmaWxlfWApXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZWZyZXNoQXV0aFByb3ZpZGVycygpIHtcbiAgICBjb25zdCBvcGVuYWkgPSBhd2FpdCBvcGVuYWlTdGF0dXMoKS5jYXRjaCgoKSA9PiAoeyBjb25uZWN0ZWQ6IGZhbHNlLCBlbWFpbDogbnVsbCB9KSlcbiAgICBzZXRBdXRoUHJvdmlkZXJzKFtcbiAgICAgIHsgaWQ6ICdvcGVuYWknLCBsYWJlbDogJ09wZW5BSSAgQ2hhdEdQVCAvIENvZGV4IHBsYW4nLCBjb25uZWN0ZWQ6IG9wZW5haS5jb25uZWN0ZWQsIGVtYWlsOiBvcGVuYWkuZW1haWwgfSxcbiAgICBdKVxuICB9XG5cbiAgZnVuY3Rpb24gb3BlbkNvbm5lY3RQYW5lbCgpIHtcbiAgICBzZXRTaG93Q29ubmVjdFBhbmVsKHRydWUpXG4gICAgcmVmcmVzaEF1dGhQcm92aWRlcnMoKVxuICB9XG5cbiAgZnVuY3Rpb24gY29ubmVjdFByb3ZpZGVyKHByb3ZpZGVyKSB7XG4gICAgaWYgKHByb3ZpZGVyLmlkICE9PSAnb3BlbmFpJykgcmV0dXJuXG4gICAgc2V0U2hvd0Nvbm5lY3RQYW5lbChmYWxzZSlcbiAgICBmbGFzaCgnb3BlbmluZyB5b3VyIGJyb3dzZXIgZm9yIENoYXRHUFQgc2lnbi1pbi4uLicpXG4gICAgY3RsLmNvbm5lY3RQcm92aWRlcigpXG4gICAgICAudGhlbigoeyBlbWFpbCwgY291bnQgfSkgPT4gZmxhc2goYGNvbm5lY3RlZCBhcyAke2VtYWlsIHx8ICd5b3VyIENoYXRHUFQgYWNjb3VudCd9ICAke2NvdW50fSBjb2RleCBtb2RlbHMgdW5sb2NrZWQgaW4gL21vZGVsYCkpXG4gICAgICAuY2F0Y2goKGVycikgPT4gZmxhc2goYGNvbm5lY3QgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDEyMCl9YCkpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBkaXNjb25uZWN0UHJvdmlkZXIocHJvdmlkZXIpIHtcbiAgICBpZiAocHJvdmlkZXIuaWQgIT09ICdvcGVuYWknKSByZXR1cm5cbiAgICBjb25zdCBhcm1lZCA9IHJlZnMuZGlzY29ubmVjdEFybVxuICAgIGlmICghYXJtZWQgfHwgYXJtZWQuaWQgIT09IHByb3ZpZGVyLmlkIHx8IERhdGUubm93KCkgLSBhcm1lZC5hdCA+IDMwMDApIHtcbiAgICAgIHJlZnMuZGlzY29ubmVjdEFybSA9IHsgaWQ6IHByb3ZpZGVyLmlkLCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byBkaXNjb25uZWN0ICR7cHJvdmlkZXIubGFiZWx9ICh5b3Ugd2lsbCBuZWVkIHRvIHNpZ24gaW4gYWdhaW4pYClcbiAgICB9XG4gICAgcmVmcy5kaXNjb25uZWN0QXJtID0gbnVsbFxuICAgIGF3YWl0IGN0bC5kaXNjb25uZWN0UHJvdmlkZXIoKVxuICAgIHJlZnJlc2hBdXRoUHJvdmlkZXJzKClcbiAgICBmbGFzaCgnZGlzY29ubmVjdGVkIGZyb20gQ2hhdEdQVCcpXG4gIH1cblxuICBmdW5jdGlvbiBvcGVuUmVzdW1lUGFuZWwoKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9ICsrcmVmcy5yZXN1bWVPcGVuXG4gICAgY29uc3Qgc2NvcGVzID0gWydyZXBvc2l0b3J5JywgJ2V2ZXJ5d2hlcmUnXVxuICAgIHNldFJlc3VtZVNjb3BlcyhzY29wZXMpXG4gICAgc2V0UmVzdW1lU2NvcGUoMClcbiAgICBzZXRTaG93UmVzdW1lUGFuZWwodHJ1ZSlcbiAgICByZWZyZXNoU2Vzc2lvbnMoMCwgc2NvcGVzKVxuICAgIGxpc3RXb3JrdHJlZXMob3duZXJSb290KGJvb3Qucm9vdCkpLnRoZW4oKHRyZWVzKSA9PiB7XG4gICAgICBpZiAodHJlZXMubGVuZ3RoIDwgMiB8fCAhc2hvd1Jlc3VtZVBhbmVsKCkgfHwgcmVxdWVzdCAhPT0gcmVmcy5yZXN1bWVPcGVuKSByZXR1cm5cbiAgICAgIHNldFJlc3VtZVNjb3BlcyhbJ3JlcG9zaXRvcnknLCAnY2hlY2tvdXQnLCAnZXZlcnl3aGVyZSddKVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiByZWZyZXNoU2Vzc2lvbnMoc2NvcGVJbmRleCwgc2NvcGVzID0gcmVzdW1lU2NvcGVzKCkpIHtcbiAgICBzZXRSZXN1bWVMb2FkaW5nKHRydWUpXG4gICAgY3RsLmxpc3RSZXN1bWVTZXNzaW9ucyhzY29wZXNbc2NvcGVJbmRleF0pXG4gICAgICAudGhlbihzZXRSZXN1bWVTZXNzaW9ucylcbiAgICAgIC5maW5hbGx5KCgpID0+IHNldFJlc3VtZUxvYWRpbmcoZmFsc2UpKVxuICB9XG5cbiAgZnVuY3Rpb24gc2hvcnRlblBhdGgocGF0aCkge1xuICAgIGNvbnN0IGhvbWUgPSBob21lZGlyKClcbiAgICByZXR1cm4gcGF0aC5zdGFydHNXaXRoKGhvbWUpID8gcGF0aC5yZXBsYWNlKGhvbWUsICd+JykgOiBwYXRoXG4gIH1cblxuICBmdW5jdGlvbiBvcGVuUHJvamVjdFBhbmVsKCkge1xuICAgIGlmIChidXN5KCkpIHJldHVybiBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGJlZm9yZSBzd2l0Y2hpbmcgc2Vzc2lvbnMnKVxuICAgIHNldFNob3dQcm9qZWN0UGFuZWwodHJ1ZSlcbiAgICByZWZyZXNoUHJvamVjdHMoKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVmcmVzaFByb2plY3RzKCkge1xuICAgIHNldFByb2plY3RzTG9hZGluZyh0cnVlKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBsaXN0ID0gYXdhaXQgY3RsLmxpc3RQcm9qZWN0cygpXG4gICAgICBzZXRQcm9qZWN0cyhsaXN0Lm1hcCgocHJvamVjdCkgPT4gKHtcbiAgICAgICAgLi4ucHJvamVjdCxcbiAgICAgICAgcGF0aDogc2hvcnRlblBhdGgocHJvamVjdC5yb290KSxcbiAgICAgICAgY2hlY2tvdXRzOiBwcm9qZWN0LmNoZWNrb3V0cy5tYXAoKGNoZWNrb3V0KSA9PiAoeyAuLi5jaGVja291dCwgcGF0aDogc2hvcnRlblBhdGgoY2hlY2tvdXQucm9vdCkgfSkpLFxuICAgICAgfSkpKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRQcm9qZWN0c0xvYWRpbmcoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gYWRkUHJvamVjdFdvcmt0cmVlKGNoZWNrb3V0KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRyZWUgPSBhd2FpdCBjdGwuYWRkV29ya3RyZWUoY2hlY2tvdXQub3duZXIpXG4gICAgICBhd2FpdCBjdGwuc3dpdGNoVG9Xb3JrdHJlZSh7IHJvb3Q6IHRyZWUucGF0aCB9KVxuICAgICAgc2V0U2hvd1Byb2plY3RQYW5lbChmYWxzZSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZsYXNoKGB3b3JrdHJlZSBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgODApfWApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZGVsZXRlUHJvamVjdENoZWNrb3V0KGNoZWNrb3V0KSB7XG4gICAgaWYgKGNoZWNrb3V0Lndvcmt0cmVlKSB7XG4gICAgICBpZiAoY2hlY2tvdXQuY3VycmVudCkgcmV0dXJuIGZsYXNoKCdjYW5ub3QgcmVtb3ZlIHRoZSBjdXJyZW50IHdvcmt0cmVlICBzd2l0Y2ggYXdheSBmaXJzdCcpXG4gICAgICBjb25zdCBhcm1lZCA9IHJlZnMucHJvamVjdERlbGV0ZUFybVxuICAgICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5yb290ICE9PSBjaGVja291dC5yb290IHx8IERhdGUubm93KCkgLSBhcm1lZC5hdCA+IDMwMDApIHtcbiAgICAgICAgcmVmcy5wcm9qZWN0RGVsZXRlQXJtID0geyByb290OiBjaGVja291dC5yb290LCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIHJlbW92ZSBcIiR7Y2hlY2tvdXQuYnJhbmNoIHx8IGNoZWNrb3V0LnBhdGh9XCIgYW5kIGl0cyAke2NoZWNrb3V0LmNvdW50fSAke2NoZWNrb3V0LmNvdW50ID09PSAxID8gJ3Nlc3Npb24nIDogJ3Nlc3Npb25zJ31gKVxuICAgICAgfVxuICAgICAgcmVmcy5wcm9qZWN0RGVsZXRlQXJtID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY3RsLmRlbGV0ZVdvcmt0cmVlKGNoZWNrb3V0KVxuICAgICAgICBhd2FpdCByZWZyZXNoUHJvamVjdHMoKVxuICAgICAgICBmbGFzaChgcmVtb3ZlZCAke2NoZWNrb3V0LmJyYW5jaCB8fCBjaGVja291dC5wYXRofWApXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZmxhc2goYHJlbW92ZSBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgODApfWApXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGNoZWNrb3V0LmN1cnJlbnQpIHJldHVybiBmbGFzaCgnY2Fubm90IGRlbGV0ZSB0aGUgY3VycmVudCBwcm9qZWN0ICBzd2l0Y2ggYXdheSBmaXJzdCcpXG4gICAgY29uc3QgYXJtZWQgPSByZWZzLnByb2plY3REZWxldGVBcm1cbiAgICBpZiAoIWFybWVkIHx8IGFybWVkLnJvb3QgIT09IGNoZWNrb3V0LnJvb3QgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgcmVmcy5wcm9qZWN0RGVsZXRlQXJtID0geyByb290OiBjaGVja291dC5yb290LCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byBkZWxldGUgXCIke2NoZWNrb3V0LnBhdGh9XCIgYW5kIGl0cyAke2NoZWNrb3V0LmNvdW50fSAke2NoZWNrb3V0LmNvdW50ID09PSAxID8gJ3Nlc3Npb24nIDogJ3Nlc3Npb25zJ31gKVxuICAgIH1cbiAgICByZWZzLnByb2plY3REZWxldGVBcm0gPSBudWxsXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRlbGV0ZVByb2plY3REYXRhKGNoZWNrb3V0LnJvb3QpXG4gICAgICBhd2FpdCByZWZyZXNoUHJvamVjdHMoKVxuICAgICAgZmxhc2goYGRlbGV0ZWQgJHtjaGVja291dC5wYXRofSAgJHtjaGVja291dC5jb3VudH0gJHtjaGVja291dC5jb3VudCA9PT0gMSA/ICdzZXNzaW9uJyA6ICdzZXNzaW9ucyd9IHJlbW92ZWRgKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYGRlbGV0ZSBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgODApfWApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZGVsZXRlU2Vzc2lvbk1ldGEobWV0YSkge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBzdGF0ZS5zZXNzaW9uPy5pZCA9PT0gbWV0YS5oZWFkZXIuaWRcbiAgICBpZiAoY3VycmVudCAmJiBidXN5KCkpIHJldHVybiBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGZpcnN0JylcbiAgICBjb25zdCBhcm1lZCA9IHJlZnMuZGVsZXRlQXJtXG4gICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5maWxlICE9PSBtZXRhLmZpbGUgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgcmVmcy5kZWxldGVBcm0gPSB7IGZpbGU6IG1ldGEuZmlsZSwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8gZGVsZXRlIFwiJHttZXRhLnRpdGxlLnNsaWNlKDAsIDUwKX1cImApXG4gICAgfVxuICAgIHJlZnMuZGVsZXRlQXJtID0gbnVsbFxuICAgIGlmIChjdXJyZW50KSB7XG4gICAgICBpZiAoYXdhaXQgY29uZmlybURlbGV0ZUN1cnJlbnRTZXNzaW9uKCkpIHJlZnJlc2hTZXNzaW9ucyhyZXN1bWVTY29wZSgpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkZWxldGVTZXNzaW9uKG1ldGEuZmlsZSlcbiAgICAgIHJlZnJlc2hTZXNzaW9ucyhyZXN1bWVTY29wZSgpKVxuICAgICAgZmxhc2goJ3Nlc3Npb24gZGVsZXRlZCcpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmbGFzaChgZGVsZXRlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZXN1bWVTZXNzaW9uKG1ldGEpIHtcbiAgICBpZiAoYnVzeSgpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBiZWZvcmUgc3dpdGNoaW5nIHNlc3Npb25zJylcbiAgICBzZXRTaG93UmVzdW1lUGFuZWwoZmFsc2UpXG4gICAgc2V0U2hvd1Byb2plY3RQYW5lbChmYWxzZSlcbiAgICBhd2FpdCBjdGwucmVzdW1lKG1ldGEpXG4gIH1cblxuICBmdW5jdGlvbiBvcGVuSGlzdG9yeVNlYXJjaCgpIHtcbiAgICBjb25zdCBzZXNzaW9uID0gc2VudCgpXG4gICAgc2V0SGlzdFByb21wdHMoZGVkdXBlUHJvbXB0cyhzZXNzaW9uKSlcbiAgICBzZXRTaG93SGlzdG9yeVBhbmVsKHRydWUpXG4gICAgc2V0SGlzdFNjb3BlKDApXG4gIH1cblxuICBmdW5jdGlvbiBkZWR1cGVQcm9tcHRzKHBvb2wpIHtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldCgpXG4gICAgY29uc3Qgb3V0ID0gW11cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIFsuLi5wb29sXS5zb3J0KChhLCBiKSA9PiBiLmF0IC0gYS5hdCkpIHtcbiAgICAgIGlmIChzZWVuLmhhcyhlbnRyeS50ZXh0KSkgY29udGludWVcbiAgICAgIHNlZW4uYWRkKGVudHJ5LnRleHQpXG4gICAgICBvdXQucHVzaChlbnRyeSlcbiAgICB9XG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc3dpdGNoSGlzdFNjb3BlKG5leHQpIHtcbiAgICBzZXRIaXN0U2NvcGUobmV4dClcbiAgICBpZiAobmV4dCA9PT0gMCkgcmV0dXJuIHNldEhpc3RQcm9tcHRzKGRlZHVwZVByb21wdHMoc2VudCgpKSlcbiAgICBjb25zdCBwcm9qZWN0ID0gYXdhaXQgbG9hZFByb2plY3RQcm9tcHRzKHJvb3QpXG4gICAgaWYgKG5leHQgPT09IDEpIHJldHVybiBzZXRIaXN0UHJvbXB0cyhkZWR1cGVQcm9tcHRzKFsuLi5zZW50KCksIC4uLnByb2plY3RdKSlcbiAgICBjb25zdCBnbG9iYWwgPSBhd2FpdCBsb2FkR2xvYmFsUHJvbXB0cygpXG4gICAgc2V0SGlzdFByb21wdHMoZGVkdXBlUHJvbXB0cyhbLi4uc2VudCgpLCAuLi5wcm9qZWN0LCAuLi5nbG9iYWxdKSlcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1SZXdpbmRUbyh0YXJnZXQsIG9wdCkge1xuICAgIGF3YWl0IGN0bC5yZXdpbmQodGFyZ2V0LCBvcHQua2V5KVxuICAgIHNldFJld2luZFN0ZXAobnVsbClcbiAgICBzZXRSZXdpbmRUYXJnZXQobnVsbClcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlcmZvcm1SZXdpbmQob3B0KSB7XG4gICAgcmV0dXJuIHBlcmZvcm1SZXdpbmRUbyhyZXdpbmRUYXJnZXQoKSwgb3B0KVxuICB9XG5cbiAgY29uc3QgdW5kb1Jld2luZCA9IGN0bC51bmRvUmV3aW5kXG5cbiAgYXN5bmMgZnVuY3Rpb24gY29uZmlybURlbGV0ZUN1cnJlbnRTZXNzaW9uKCkge1xuICAgIGNvbnN0IGRlbGV0ZWQgPSBhd2FpdCBjdGwuZGVsZXRlQ3VycmVudFNlc3Npb24oKVxuICAgIHNldFNob3dEZWxldGVDb25maXJtKGZhbHNlKVxuICAgIHJldHVybiBkZWxldGVkXG4gIH1cblxuICBjb25zdCBhbnlQYW5lbCA9ICgpID0+XG4gICAgc2hvd01vZGVsUGFuZWwoKSB8fCBzaG93UmVzZWFyY2hNb2RlbFBhbmVsKCkgfHwgc2hvd1NwZWVkUGFuZWwoKSB8fCBzaG93RWZmb3J0UGFuZWwoKSB8fCBzaG93VGhlbWVQYW5lbCgpIHx8IHNob3dDb25maWdQYW5lbCgpIHx8IHNob3dEZWxldGVDb25maXJtKCkgfHwgc2hvd01lbW9yeVBhbmVsKCkgfHwgc2hvd0hpc3RvcnlQYW5lbCgpIHx8IHNob3dSZXN1bWVQYW5lbCgpIHx8IHNob3dNY3BQYW5lbCgpIHx8XG4gICAgc2hvd1Byb2plY3RQYW5lbCgpIHx8IHNob3dXYWtldXBzUGFuZWwoKSB8fCBzaG93Q29ubmVjdFBhbmVsKCkgfHxcbiAgICBjb21tYW5kRm9ybSgpICE9PSBudWxsIHx8IGluZm9QYW5lbCgpICE9PSBudWxsIHx8IHJld2luZFN0ZXAoKSAhPT0gbnVsbFxuXG4gIC8vIGV2ZXJ5IGZvY3VzLXRha2luZyBwYW5lbCBkaW1zIHRoZSBjb252ZXJzYXRpb24gYmVoaW5kIGl0OyB0aGUgdGhlbWVcbiAgLy8gcGlja2VyIGlzIHRoZSBvbmUgZXhlbXB0aW9uLCBzaW5jZSBpdHMgam9iIGlzIHByZXZpZXdpbmcgcGFsZXR0ZXMgb25cbiAgLy8gdGhlIHVuZGltbWVkIHVpXG4gIGNvbnN0IGRpbW1pbmdQYW5lbCA9ICgpID0+IGFueVBhbmVsKCkgJiYgIXNob3dUaGVtZVBhbmVsKClcblxuICBmdW5jdGlvbiBjYW5jZWxBZ2VudChhZ2VudCkge1xuICAgIGN0bC5jYW5jZWxBZ2VudChhZ2VudC5pZClcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRpc21pc3NBZ2VudChhZ2VudCkge1xuICAgIGlmICghYXdhaXQgY3RsLmRpc21pc3NBZ2VudChhZ2VudC5pZCkpIHJldHVyblxuICAgIGlmICh2aWV3ZWRBZ2VudElkKCkgPT09IGFnZW50LmlkKSBzZXRWaWV3ZWRBZ2VudElkKG51bGwpXG4gIH1cblxuICBmdW5jdGlvbiBzdG9wT3JEaXNtaXNzRGVsaWJlcmF0aW9uKGl0ZW0pIHtcbiAgICBpZiAoaXRlbS5zdGF0dXMgPT09ICdydW5uaW5nJykge1xuICAgICAgaW50ZXJydXB0KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjdGwuZGlzbWlzc0RlbGliZXJhdGlvbihpdGVtLmRlbGliZXJhdGlvbklkKVxuICAgIGlmICh2aWV3ZWRBZ2VudElkKCkgPT09IGl0ZW0uaWQpIHNldFZpZXdlZEFnZW50SWQobnVsbClcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc21pc3NTaGVsbChzaGVsbCkge1xuICAgIGJvb3Quc2hlbGxzLmRpc21pc3Moc2hlbGwuaWQpXG4gICAgaWYgKHZpZXdlZFNoZWxsSWQoKSA9PT0gc2hlbGwuaWQpIHNldFZpZXdlZFNoZWxsSWQobnVsbClcbiAgfVxuXG4gIGZ1bmN0aW9uIGtpbGxTaGVsbChzaGVsbCkge1xuICAgIGlmIChzaGVsbC5zdGF0dXMgIT09ICdydW5uaW5nJykgcmV0dXJuIGZsYXNoKGBzaGVsbCAke3NoZWxsLmlkfSBhbHJlYWR5IGV4aXRlZGApXG4gICAgY29uc3QgYXJtZWQgPSByZWZzLnNoZWxsS2lsbEFybVxuICAgIGlmICghYXJtZWQgfHwgYXJtZWQuaWQgIT09IHNoZWxsLmlkIHx8IERhdGUubm93KCkgLSBhcm1lZC5hdCA+IDMwMDApIHtcbiAgICAgIHJlZnMuc2hlbGxLaWxsQXJtID0geyBpZDogc2hlbGwuaWQsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIGtpbGwgXCIke3NoZWxsLmRlc2NyaXB0aW9uIHx8IGBzaGVsbCAke3NoZWxsLmlkfWB9XCJgKVxuICAgIH1cbiAgICByZWZzLnNoZWxsS2lsbEFybSA9IG51bGxcbiAgICBib290LnNoZWxscy5raWxsKHNoZWxsLmlkLCAndXNlcicpXG4gIH1cblxuICBjb25zdCBzcGVlZEFwcGxpZXMgPSBjdGwuc3BlZWRBcHBsaWVzXG4gIGNvbnN0IGVmZm9ydEFwcGxpZXMgPSBjdGwuZWZmb3J0QXBwbGllc1xuICBjb25zdCBzZXRTZXNzaW9uRWZmb3J0ID0gY3RsLnNldEVmZm9ydFxuXG4gIGNvbnN0IGZtID0gdXNlRm9jdXMoeyBpbml0aWFsOiAnaW5wdXQnIH0pXG4gIGNvbnN0IHN0ZWVyTGlzdEZvY3VzID0gdXNlRm9jdXMoeyBpbml0aWFsOiBudWxsLCBjeWNsZTogJ25vbmUnLCBhY3RpdmU6IGZhbHNlIH0pXG4gIGZtLml0ZW0oJ2ZlZWQnKVxuICBpZiAoc3RlZXIoKSkge1xuICAgIGZtLml0ZW0oJ3N0ZWVyJylcbiAgICBpZiAoIWZtLmlzKCdzdGVlcicpKSBmbS5mb2N1cygnc3RlZXInKVxuICB9XG4gIGNvbnN0IGNvbnZlcnNhdGlvblNlYXJjaCA9IGNyZWF0ZUNvbnZlcnNhdGlvblNlYXJjaCh7IGZtLCB2ZXJib3NlLCBzZXRGb2xsb3csIHNldE9mZnNldCB9KVxuICBjb252ZXJzYXRpb25TZWFyY2gucmVnaXN0ZXJGb2N1cygpXG4gIGxldCBjb252ZXJzYXRpb25TZWFyY2hNYXRjaGVzID0gW11cbiAgYWdlbnRzVmVyc2lvbigpXG4gIGNvbnN0IGFnZW50Um93cyA9IGN0bC5hY3Rpdml0eSgpXG4gIHNoZWxsc1ZlcnNpb24oKVxuICBjb25zdCBzaGVsbFJvd3MgPSBjdGwuc2hlbGxSb3dzKClcbiAgaWYgKHF1ZXN0aW9uUmVxdWVzdCgpKSB7XG4gICAgZm0uaXRlbSgncXVlc3Rpb24nKVxuICAgIGlmICghZm0uaXMoJ3F1ZXN0aW9uJykpIGZtLmZvY3VzKCdxdWVzdGlvbicpXG4gIH0gZWxzZSB7XG4gICAgaWYgKCF2aWV3ZWRBZ2VudElkKCkgJiYgIXZpZXdlZFNoZWxsSWQoKSkgZm0uaXRlbSgnaW5wdXQnKVxuICAgIGlmIChzaGVsbFJvd3MubGVuZ3RoID4gMCAmJiBhZ2VudFJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgZm0uZ3JvdXAoJ2FjdGl2aXR5LXN0cmlwJywgeyBpdGVtczogWydhY3Rpdml0eS1tYWluJywgLi4uc2hlbGxSb3dzLm1hcCgocykgPT4gYHNoZWxsLSR7cy5pZH1gKSwgLi4uYWdlbnRSb3dzLm1hcCgoYSkgPT4gYGFnZW50LSR7YS5pZH1gKV0sIG5hdmlnYXRlOiAnYm90aCcsIHdyYXA6IHRydWUgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNoZWxsUm93cy5sZW5ndGggPiAwKSBmbS5ncm91cCgnc2hlbGwtc3RyaXAnLCB7IGl0ZW1zOiBbJ3NoZWxsLW1haW4nLCAuLi5zaGVsbFJvd3MubWFwKChzKSA9PiBgc2hlbGwtJHtzLmlkfWApXSwgbmF2aWdhdGU6ICdib3RoJywgd3JhcDogdHJ1ZSB9KVxuICAgICAgaWYgKGFnZW50Um93cy5sZW5ndGggPiAwKSBmbS5ncm91cCgnYWdlbnQtc3RyaXAnLCB7IGl0ZW1zOiBbJ2FnZW50LW1haW4nLCAuLi5hZ2VudFJvd3MubWFwKChhKSA9PiBgYWdlbnQtJHthLmlkfWApXSwgbmF2aWdhdGU6ICdib3RoJywgd3JhcDogdHJ1ZSB9KVxuICAgIH1cbiAgICBpZiAocmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJRdWVzdGlvbiAmJiAhdmlld2VkQWdlbnRJZCgpICYmICF2aWV3ZWRTaGVsbElkKCkpIHtcbiAgICAgIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyUXVlc3Rpb24gPSBmYWxzZVxuICAgICAgZm0uZm9jdXMoJ2lucHV0JylcbiAgICB9XG4gIH1cbiAgaWYgKHdvcmtzcGFjZU9wZW4oKSkgeyBmbS5pdGVtKCd3b3Jrc3BhY2UnKTsgZm0uZm9jdXMoJ3dvcmtzcGFjZScpIH1cbiAgZWxzZSBpZiAocmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJXb3Jrc3BhY2UpIHtcbiAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlcldvcmtzcGFjZSA9IGZhbHNlXG4gICAgZm0uZm9jdXMocXVlc3Rpb25SZXF1ZXN0KCkgPyAncXVlc3Rpb24nIDogJ2lucHV0JylcbiAgfVxuICB1c2VGb2N1c1RyYXAod29ya3NwYWNlT3BlbigpIHx8IGFueVBhbmVsKCkgfHwgdmlldygpID09PSAnaGVscCcpXG4gIHVzZVNlbGVjdGlvbih7XG4gICAgb25Db3B5OiAodGV4dCkgPT4gZmxhc2goYGNvcGllZCAke3RleHQubGVuZ3RofSAke3RleHQubGVuZ3RoID09PSAxID8gJ2NoYXJhY3RlcicgOiAnY2hhcmFjdGVycyd9YCksXG4gIH0pXG5cbiAgZnVuY3Rpb24gbmF2aWdhdGVBY3Rpdml0eVN0cmlwKGV2ZW50KSB7XG4gICAgY29uc3QgaXRlbXMgPSBbJ2FjdGl2aXR5LW1haW4nLCAuLi5zaGVsbFJvd3MubWFwKChzaGVsbCkgPT4gYHNoZWxsLSR7c2hlbGwuaWR9YCksIC4uLmFnZW50Um93cy5tYXAoKGFnZW50KSA9PiBgYWdlbnQtJHthZ2VudC5pZH1gKV1cbiAgICBjb25zdCBjdXJyZW50ID0gaXRlbXMuaW5kZXhPZihmbS5jdXJyZW50KCkpXG4gICAgbGV0IG5leHQgPSBjdXJyZW50XG4gICAgaWYgKCFldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2cnKSBuZXh0ID0gMFxuICAgIGVsc2UgaWYgKCFldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ0cnKSBuZXh0ID0gaXRlbXMubGVuZ3RoIC0gMVxuICAgIGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnZCcpIG5leHQgPSBNYXRoLm1pbihpdGVtcy5sZW5ndGggLSAxLCBjdXJyZW50ICsgTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihBR0VOVF9TVFJJUF9NQVggLyAyKSkpXG4gICAgZWxzZSBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd1JykgbmV4dCA9IE1hdGgubWF4KDAsIGN1cnJlbnQgLSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKEFHRU5UX1NUUklQX01BWCAvIDIpKSlcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdqJyB8fCBldmVudC5rZXkgPT09ICdkb3duJykgbmV4dCA9IChjdXJyZW50ICsgMSArIGl0ZW1zLmxlbmd0aCkgJSBpdGVtcy5sZW5ndGhcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdrJyB8fCBldmVudC5rZXkgPT09ICd1cCcpIG5leHQgPSAoY3VycmVudCAtIDEgKyBpdGVtcy5sZW5ndGgpICUgaXRlbXMubGVuZ3RoXG4gICAgZWxzZSByZXR1cm4gZmFsc2VcbiAgICBjb25zdCB0YXJnZXQgPSBpdGVtc1tuZXh0XVxuICAgIGZtLmZvY3VzKHRhcmdldClcbiAgICBzZXRWaWV3ZWRTaGVsbElkKHRhcmdldC5zdGFydHNXaXRoKCdzaGVsbC0nKSA/IHRhcmdldC5zbGljZSgnc2hlbGwtJy5sZW5ndGgpIDogbnVsbClcbiAgICBzZXRWaWV3ZWRBZ2VudElkKHRhcmdldC5zdGFydHNXaXRoKCdhZ2VudC0nKSA/IHRhcmdldC5zbGljZSgnYWdlbnQtJy5sZW5ndGgpIDogbnVsbClcbiAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGZ1bmN0aW9uIG5hdmlnYXRlU3RyaXAoZXZlbnQsIHByZWZpeCwgcm93cywgeyBtYWluID0gZmFsc2UsIHByZXZpZXdBZ2VudCA9IGZhbHNlLCBwcmV2aWV3U2hlbGwgPSBmYWxzZSB9ID0ge30pIHtcbiAgICBjb25zdCBpdGVtcyA9IFsuLi4obWFpbiA/IFtgJHtwcmVmaXh9LW1haW5gXSA6IFtdKSwgLi4ucm93cy5tYXAoKHJvdykgPT4gYCR7cHJlZml4fS0ke3Jvdy5pZH1gKV1cbiAgICBjb25zdCBjdXJyZW50ID0gaXRlbXMuaW5kZXhPZihmbS5jdXJyZW50KCkpXG4gICAgbGV0IG5leHQgPSBjdXJyZW50XG4gICAgaWYgKCFldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2cnKSBuZXh0ID0gMFxuICAgIGVsc2UgaWYgKCFldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ0cnKSBuZXh0ID0gaXRlbXMubGVuZ3RoIC0gMVxuICAgIGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnZCcpIG5leHQgPSBNYXRoLm1pbihpdGVtcy5sZW5ndGggLSAxLCBjdXJyZW50ICsgTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihBR0VOVF9TVFJJUF9NQVggLyAyKSkpXG4gICAgZWxzZSBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd1JykgbmV4dCA9IE1hdGgubWF4KDAsIGN1cnJlbnQgLSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKEFHRU5UX1NUUklQX01BWCAvIDIpKSlcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdqJyB8fCBldmVudC5rZXkgPT09ICdkb3duJykgbmV4dCA9IChjdXJyZW50ICsgMSArIGl0ZW1zLmxlbmd0aCkgJSBpdGVtcy5sZW5ndGhcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdrJyB8fCBldmVudC5rZXkgPT09ICd1cCcpIG5leHQgPSAoY3VycmVudCAtIDEgKyBpdGVtcy5sZW5ndGgpICUgaXRlbXMubGVuZ3RoXG4gICAgZWxzZSByZXR1cm4gZmFsc2VcbiAgICBjb25zdCB0YXJnZXQgPSBpdGVtc1tuZXh0XVxuICAgIGZtLmZvY3VzKHRhcmdldClcbiAgICBpZiAocHJldmlld0FnZW50KSB7XG4gICAgICBzZXRWaWV3ZWRBZ2VudElkKHRhcmdldCA9PT0gJ2FnZW50LW1haW4nID8gbnVsbCA6IHRhcmdldC5zbGljZSgnYWdlbnQtJy5sZW5ndGgpKVxuICAgICAgc2V0Rm9sbG93KHRydWUpXG4gICAgICBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgIH1cbiAgICBpZiAocHJldmlld1NoZWxsKSB7XG4gICAgICBzZXRWaWV3ZWRTaGVsbElkKHRhcmdldCA9PT0gJ3NoZWxsLW1haW4nID8gbnVsbCA6IHRhcmdldC5zbGljZSgnc2hlbGwtJy5sZW5ndGgpKVxuICAgICAgc2V0Rm9sbG93KHRydWUpXG4gICAgfVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHVzZUlucHV0KGFzeW5jIChldmVudCkgPT4ge1xuICAgIGlmICh3b3Jrc3BhY2VPcGVuKCkpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgICBzZXRXb3Jrc3BhY2VQZW5kaW5nKHRydWUpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgYm9vdC53b3Jrc3BhY2UuY2FuY2VsUHJldmlldygpXG4gICAgICAgICAgcmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJXb3Jrc3BhY2UgPSB0cnVlXG4gICAgICAgICAgc2V0V29ya3NwYWNlT3BlbihmYWxzZSlcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBzZXRXb3Jrc3BhY2VFcnJvcihgcmV0dXJuIGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApXG4gICAgICAgIH0gZmluYWxseSB7IHNldFdvcmtzcGFjZVBlbmRpbmcoZmFsc2UpIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAod29ya3NwYWNlUGVuZGluZygpKSByZXR1cm5cbiAgICAgIGNvbnN0IG5leHQgPSB3b3Jrc3BhY2VOYXZpZ2F0ZSh3b3Jrc3BhY2VTZXNzaW9ucywgd29ya3NwYWNlU2VsZWN0ZWQoKSwgZXZlbnQsIHdvcmtzcGFjZUhlaWdodCgpKVxuICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzZXRXb3Jrc3BhY2VTZWxlY3RlZChuZXh0KVxuICAgICAgICB2b2lkIGJvb3Qud29ya3NwYWNlLnByZXZpZXcobmV4dCkuY2F0Y2goZXJyb3IgPT4gc2V0V29ya3NwYWNlRXJyb3IoYHByZXZpZXcgZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YCkpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3Qgcm93ID0gd29ya3NwYWNlU2Vzc2lvbnMuZmluZCgocm93KSA9PiByb3cuaWQgPT09IHdvcmtzcGFjZVNlbGVjdGVkKCkpXG4gICAgICBpZiAoIXJvdykgcmV0dXJuXG4gICAgICBjb25zdCBhdHRhY2ggPSAhZXZlbnQuY3RybCAmJiAhZXZlbnQubWV0YSAmJiAhZXZlbnQuYWx0ICYmIChldmVudC5rZXkgPT09ICdyaWdodCcgfHwgZXZlbnQua2V5ID09PSAnbCcpXG4gICAgICBjb25zdCBhY3Rpb24gPSBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnID8gd29ya3NwYWNlQWN0aW9uKHJvdykgOiBudWxsXG4gICAgICBpZiAoIWF0dGFjaCAmJiAhYWN0aW9uKSByZXR1cm5cbiAgICAgIHNldFdvcmtzcGFjZVBlbmRpbmcodHJ1ZSlcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChhdHRhY2gpIHtcbiAgICAgICAgICBhd2FpdCBib290LndvcmtzcGFjZS5zZWxlY3Qocm93LmlkKVxuICAgICAgICAgIHNldElucHV0KCcnKVxuICAgICAgICAgIHNldEhpc3RJZHgoLTEpXG4gICAgICAgICAgc2V0T2Zmc2V0KDApXG4gICAgICAgICAgc2V0VHJhbnNjcmlwdE1ldHJpY3MobnVsbClcbiAgICAgICAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgICAgICAgIGRpc21pc3NDb21wbGV0aW9uKClcbiAgICAgICAgICBzZXRGaWxlc0Rpc21pc3NlZChmYWxzZSlcbiAgICAgICAgICBjb252ZXJzYXRpb25TZWFyY2guY2xvc2UoKVxuICAgICAgICAgIHJlZnMudWkuc2Vzc2lvbigpXG4gICAgICAgICAgcmVmcy51aS5zeW5jKClcbiAgICAgICAgICByZWZzLnVpLmRlcml2ZWQoc3RhdGUuZGVyaXZlZClcbiAgICAgICAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlcldvcmtzcGFjZSA9IHRydWVcbiAgICAgICAgICBzZXRXb3Jrc3BhY2VPcGVuKGZhbHNlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IGJvb3Qud29ya3NwYWNlW2FjdGlvbl0ocm93LmlkKVxuICAgICAgICAgIGF3YWl0IHJlZnJlc2hXb3Jrc3BhY2UoKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBzZXRXb3Jrc3BhY2VFcnJvcihgJHthdHRhY2ggPyAnYXR0YWNoJyA6IGFjdGlvbn0gZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICAgIH0gZmluYWxseSB7IHNldFdvcmtzcGFjZVBlbmRpbmcoZmFsc2UpIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocmVmcy5kaWN0YXRpb25JbnB1dC5oYW5kbGUoZXZlbnQpKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChzdGVlcigpICYmIGZtLmlzKCdzdGVlcicpICYmICFzdGVlcigpLmVkaXRpbmcpIHtcbiAgICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJykgYXBwbHlTdGVlcigpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSBjbG9zZVN0ZWVyKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHN0YXJ0U3RlZXJFZGl0KClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2EnKSBzdGFydFN0ZWVyQWRkKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3gnIHx8IGV2ZW50LmtleSA9PT0gJ2QnKSBzdGFnZVN0ZWVyRGVsZXRlKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3VwJyB8fCBldmVudC5rZXkgPT09ICdrJykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IE1hdGgubWF4KDAsIGRyYWZ0LnNlbGVjdGVkIC0gMSlcbiAgICAgICAgc3RlZXJMaXN0Rm9jdXMuZm9jdXMocm93c1tzZWxlY3RlZF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQgfSlcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZG93bicgfHwgZXZlbnQua2V5ID09PSAnaicpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1pbihNYXRoLm1heCgwLCByb3dzLmxlbmd0aCAtIDEpLCBkcmFmdC5zZWxlY3RlZCArIDEpXG4gICAgICAgIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3Nbc2VsZWN0ZWRdPy5tZXNzYWdlSWQpXG4gICAgICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIHNlbGVjdGVkIH0pXG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2hvbWUnIHx8IGV2ZW50LmtleSA9PT0gJ2cnKSB7XG4gICAgICAgIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3NbMF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQ6IDAgfSlcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZW5kJyB8fCBldmVudC5rZXkgPT09ICdHJykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IE1hdGgubWF4KDAsIHJvd3MubGVuZ3RoIC0gMSlcbiAgICAgICAgc3RlZXJMaXN0Rm9jdXMuZm9jdXMocm93c1tzZWxlY3RlZF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQgfSlcbiAgICAgIH1cbiAgICAgIGVsc2UgcmV0dXJuXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjb252ZXJzYXRpb25TZWFyY2guaGFuZGxlSW5wdXQoZXZlbnQsIGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXMpKSByZXR1cm5cbiAgICBpZiAoZm0uaXMoJ2FjdGl2aXR5LXN0cmlwJykgJiYgbmF2aWdhdGVBY3Rpdml0eVN0cmlwKGV2ZW50KSkgcmV0dXJuXG4gICAgaWYgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgc2V0Vmlld2VkU2hlbGxJZCh0YXJnZXQuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyB0YXJnZXQuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSA6IG51bGwpXG4gICAgICBzZXRWaWV3ZWRBZ2VudElkKHRhcmdldC5zdGFydHNXaXRoKCdhZ2VudC0nKSA/IHRhcmdldC5zbGljZSgnYWdlbnQtJy5sZW5ndGgpIDogbnVsbClcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgY29uc3Qgc2hlbGwgPSB0YXJnZXQuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyBzaGVsbFJvd3MuZmluZCgocykgPT4gYHNoZWxsLSR7cy5pZH1gID09PSB0YXJnZXQpIDogbnVsbFxuICAgICAgY29uc3QgaXRlbSA9IHRhcmdldC5zdGFydHNXaXRoKCdhZ2VudC0nKSA/IGFnZW50Um93cy5maW5kKChyb3cpID0+IGBhZ2VudC0ke3Jvdy5pZH1gID09PSB0YXJnZXQpIDogbnVsbFxuICAgICAgY29uc3QgYWdlbnQgPSBpdGVtPy5yb2xlID09PSAnZGVsaWJlcmF0aW9uJyA/IG51bGwgOiBpdGVtXG4gICAgICBpZiAoc2hlbGwpIHNoZWxsLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8ga2lsbFNoZWxsKHNoZWxsKSA6IGRpc21pc3NTaGVsbChzaGVsbClcbiAgICAgIGlmIChpdGVtPy5yb2xlID09PSAnZGVsaWJlcmF0aW9uJykgc3RvcE9yRGlzbWlzc0RlbGliZXJhdGlvbihpdGVtKVxuICAgICAgZWxzZSBpZiAoYWdlbnQpIFsncXVldWVkJywgJ3J1bm5pbmcnXS5pbmNsdWRlcyhhZ2VudC5zdGF0dXMpID8gY2FuY2VsQWdlbnQoYWdlbnQpIDogZGlzbWlzc0FnZW50KGFnZW50KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZm0uaXMoJ3NoZWxsLXN0cmlwJykgJiYgbmF2aWdhdGVTdHJpcChldmVudCwgJ3NoZWxsJywgc2hlbGxSb3dzLCB7IG1haW46IHRydWUsIHByZXZpZXdTaGVsbDogdHJ1ZSB9KSkgcmV0dXJuXG4gICAgaWYgKGZtLmlzKCdhZ2VudC1zdHJpcCcpICYmIG5hdmlnYXRlU3RyaXAoZXZlbnQsICdhZ2VudCcsIGFnZW50Um93cywgeyBtYWluOiB0cnVlLCBwcmV2aWV3QWdlbnQ6IHRydWUgfSkpIHJldHVyblxuICAgIGlmIChmbS5pcygnc2hlbGwtc3RyaXAnKSAmJiBldmVudC5rZXkgPT09ICdyZXR1cm4nKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBmbS5jdXJyZW50KClcbiAgICAgIHNldFZpZXdlZFNoZWxsSWQodGFyZ2V0ID09PSAnc2hlbGwtbWFpbicgPyBudWxsIDogdGFyZ2V0LnNsaWNlKCdzaGVsbC0nLmxlbmd0aCkpXG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdzaGVsbC1zdHJpcCcpICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIGNvbnN0IHNoZWxsID0gZm0uY3VycmVudCgpID09PSAnc2hlbGwtbWFpbicgPyBudWxsIDogc2hlbGxSb3dzLmZpbmQoKHMpID0+IGBzaGVsbC0ke3MuaWR9YCA9PT0gZm0uY3VycmVudCgpKVxuICAgICAgaWYgKHNoZWxsKSB7XG4gICAgICAgIGlmIChzaGVsbC5zdGF0dXMgPT09ICdydW5uaW5nJykga2lsbFNoZWxsKHNoZWxsKVxuICAgICAgICBlbHNlIGRpc21pc3NTaGVsbChzaGVsbClcbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdhZ2VudC1zdHJpcCcpICYmIGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgc2V0Vmlld2VkQWdlbnRJZCh0YXJnZXQgPT09ICdhZ2VudC1tYWluJyA/IG51bGwgOiB0YXJnZXQuc2xpY2UoJ2FnZW50LScubGVuZ3RoKSlcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdhZ2VudC1zdHJpcCcpICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgY29uc3QgaXRlbSA9IHRhcmdldCA9PT0gJ2FnZW50LW1haW4nID8gbnVsbCA6IGFnZW50Um93cy5maW5kKChyb3cpID0+IGBhZ2VudC0ke3Jvdy5pZH1gID09PSB0YXJnZXQpXG4gICAgICBpZiAoaXRlbT8ucm9sZSA9PT0gJ2RlbGliZXJhdGlvbicpIHN0b3BPckRpc21pc3NEZWxpYmVyYXRpb24oaXRlbSlcbiAgICAgIGVsc2UgaWYgKGl0ZW0pIHtcbiAgICAgICAgaWYgKFsncXVldWVkJywgJ3J1bm5pbmcnXS5pbmNsdWRlcyhpdGVtLnN0YXR1cykpIGNhbmNlbEFnZW50KGl0ZW0pXG4gICAgICAgIGVsc2UgZGlzbWlzc0FnZW50KGl0ZW0pXG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnICYmIGJ1c3koKSAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgaW50ZXJydXB0KClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnYycpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcbiAgICAgIGlmIChub3cgLSByZWZzLnF1aXRBdCA8IDE1MDApIHtcbiAgICAgICAgYXdhaXQgY3RsLnNodXRkb3duKClcbiAgICAgICAgcHJvY2Vzcy5leGl0KDApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWZzLnF1aXRBdCA9IG5vd1xuICAgICAgICBjb25zdCBydW5uaW5nID0gYm9vdC5zaGVsbHMucnVubmluZygpXG4gICAgICAgIGZsYXNoKHJ1bm5pbmcgPyBgJHtydW5uaW5nfSAke3J1bm5pbmcgPT09IDEgPyAnc2hlbGwnIDogJ3NoZWxscyd9IHJ1bm5pbmcgIGN0cmwrYyBhZ2FpbiB0byBleGl0IGFuZCBraWxsICR7cnVubmluZyA9PT0gMSA/ICdpdCcgOiAndGhlbSd9YCA6ICdjdHJsK2MgYWdhaW4gdG8gZXhpdCcpXG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChmbS5pcygnZmVlZCcpICYmIGV2ZW50LmtleSA9PT0gJy8nKSB7XG4gICAgICBjb252ZXJzYXRpb25TZWFyY2gub3BlbigpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3InICYmIHZpZXcoKSA9PT0gJ2NoYXQnICYmICFhbnlQYW5lbCgpKSB7XG4gICAgICBpZiAoYnVzeSgpKSBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGZpcnN0JylcbiAgICAgIGVsc2UgaWYgKHVzZXJFbnRyaWVzKGRlcml2ZWQoKSkubGVuZ3RoID09PSAwKSBmbGFzaCgnbm90aGluZyB0byByZXdpbmQgeWV0JylcbiAgICAgIGVsc2Ugc2V0UmV3aW5kU3RlcCgncGljaycpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3MnICYmIHZpZXcoKSA9PT0gJ2NoYXQnICYmICFhbnlQYW5lbCgpKSB7XG4gICAgICBpZiAoYnVzeSgpKSBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGJlZm9yZSBzd2l0Y2hpbmcgc2Vzc2lvbnMnKVxuICAgICAgZWxzZSBvcGVuUmVzdW1lUGFuZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd0JyAmJiB2aWV3KCkgPT09ICdjaGF0JyAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgc2V0U2hvd01vZGVsUGFuZWwodHJ1ZSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncCcgJiYgdmlldygpID09PSAnY2hhdCcgJiYgIWFueVBhbmVsKCkpIHtcbiAgICAgIG9wZW5Qcm9qZWN0UGFuZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdiJyAmJiB2aWV3KCkgPT09ICdjaGF0JyAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgaWYgKCFlZmZvcnRBcHBsaWVzKCkpIGZsYXNoKGAke21vZGVsKCkubmFtZX0gZG9lcyBub3Qgc3VwcG9ydCBlZmZvcnQgY29udHJvbGApXG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3Qgb3JkZXIgPSBbbnVsbCwgJ2xvdycsICdtZWRpdW0nLCAnaGlnaCcsICdtYXgnXVxuICAgICAgICBjb25zdCBuZXh0ID0gb3JkZXJbKG9yZGVyLmluZGV4T2YoZWZmb3J0KCkgPz8gbnVsbCkgKyAxKSAlIG9yZGVyLmxlbmd0aF1cbiAgICAgICAgc2V0U2Vzc2lvbkVmZm9ydChuZXh0KVxuICAgICAgfVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJyAmJiBzaG93SGlzdG9yeVBhbmVsKCkpIHtcbiAgICAgIHN3aXRjaEhpc3RTY29wZSgoaGlzdFNjb3BlKCkgKyAxKSAlIEhJU1RPUllfU0NPUEVTLmxlbmd0aClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycgJiYgc2hvd01lbW9yeVBhbmVsKCkpIHtcbiAgICAgIHNldE1lbVNjb3BlKChzKSA9PiAocyArIDEpICUgTUVNT1JZX1NDT1BFUy5sZW5ndGgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3MnICYmIHNob3dSZXN1bWVQYW5lbCgpKSB7XG4gICAgICBjb25zdCBuZXh0ID0gKHJlc3VtZVNjb3BlKCkgKyAxKSAlIHJlc3VtZVNjb3BlcygpLmxlbmd0aFxuICAgICAgc2V0UmVzdW1lU2NvcGUobmV4dClcbiAgICAgIHJlZnJlc2hTZXNzaW9ucyhuZXh0KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd6JyAmJiBzdGF0ZS5yZXdpbmRVbmRvICYmICFidXN5KCkgJiYgdmlldygpID09PSAnY2hhdCcpIHtcbiAgICAgIHVuZG9SZXdpbmQoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgZm10RWxhcHNlZCA9IChzKSA9PiAocyA8IDYwID8gYCR7c31zYCA6IGAke01hdGguZmxvb3IocyAvIDYwKX1tICR7cyAlIDYwfXNgKVxuICBjb25zdCBlbGFwc2VkID0gZm10RWxhcHNlZChidXN5KCkgPyBNYXRoLm1heCgwLCBNYXRoLmZsb29yKChEYXRlLm5vdygpIC0gc3RhcnRlZEF0KCkpIC8gMTAwMCkpIDogMClcblxuICBjb25zdCBzbGFzaFJhbmdlID0gY29tbWFuZEF0KGlucHV0KCksIGlucHV0Q3Vyc29yKCkpXG4gIGNvbnN0IHNsYXNoUXVlcnkgPSBzbGFzaFJhbmdlPy5xdWVyeSA/PyBudWxsXG4gIGNvbnN0IHNob3dDb21tYW5kcyA9IHNsYXNoUmFuZ2UgIT09IG51bGwgJiYgIWFueVBhbmVsKClcbiAgY29uc3QgbWF0Y2hlZENvbW1hbmRzID0gIXNob3dDb21tYW5kc1xuICAgID8gW11cbiAgICA6IGNtZEN5Y2xlKClcbiAgICAgID8gY21kQ3ljbGUoKS5tYXRjaGVzXG4gICAgICA6IGFsbENvbW1hbmRzLmZpbHRlcigoYykgPT4gKGMuY29tbWFuZCB8fCAoc2xhc2hSYW5nZS5zdGFydCA9PT0gMCAmJiBzbGFzaFJhbmdlLmVuZCA9PT0gaW5wdXQoKS5sZW5ndGgpKSAmJiBjLm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHNsYXNoUXVlcnkudG9Mb3dlckNhc2UoKSkpXG5cbiAgY29uc3QgYXRNYXRjaCA9IGlucHV0KCkubWF0Y2goLyhefFtcXHMoXSlAKFteXFxzQF0qKSQvKVxuICBjb25zdCBzaG93RmlsZXMgPSBhdE1hdGNoICE9PSBudWxsICYmICFzaG93Q29tbWFuZHMgJiYgIWZpbGVzRGlzbWlzc2VkKCkgJiYgIWFueVBhbmVsKClcbiAgaWYgKHNob3dGaWxlcykge1xuICAgIGxpc3RGaWxlcyhjd2QpLnRoZW4oKGZpbGVzKSA9PiB7XG4gICAgICBpZiAoZmlsZXMgIT09IGZpbGVMaXN0KCkpIHNldEZpbGVMaXN0KGZpbGVzKVxuICAgIH0pXG4gIH1cbiAgY29uc3QgbWF0Y2hlZEZpbGVzID0gc2hvd0ZpbGVzXG4gICAgPyBmaWxlTGlzdCgpXG4gICAgICAgIC5tYXAoKGYpID0+IFtmdXp6eVNjb3JlKGF0TWF0Y2hbMl0sIGYpLCBmXSlcbiAgICAgICAgLmZpbHRlcigoW3Njb3JlXSkgPT4gc2NvcmUgPj0gMClcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGJbMF0gLSBhWzBdKVxuICAgICAgICAubWFwKChbLCBmXSkgPT4gZilcbiAgICA6IFtdXG5cbiAgYXN5bmMgZnVuY3Rpb24gcGlja0ZpbGUoZikge1xuICAgIGNvbnN0IHYgPSBpbnB1dCgpXG4gICAgY29uc3QgYXQgPSB2Lmxhc3RJbmRleE9mKCdAJylcbiAgICBjb25zdCBwbGFjZWhvbGRlciA9IGF3YWl0IGN0bC5hdHRhY2hQcm9qZWN0RmlsZShmKVxuICAgIGlmIChwbGFjZWhvbGRlcikge1xuICAgICAgc2V0SW5wdXQodi5zbGljZSgwLCBhdCkgKyBwbGFjZWhvbGRlciArICcgJylcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0SW5wdXQodi5zbGljZSgwLCBhdCArIDEpICsgZiArICcgJylcbiAgICB9XG4gICAgc2V0RmlsZUluZGV4KDApXG4gIH1cblxuICBjb25zdCBjb21wQ3R4ID0gY29tcGxldGluZygpID8gY29tcGxldGlvbkNvbnRleHQoeyB2YWx1ZTogaW5wdXQoKSwgcmVzb2x2ZTogY29tcGxldGlvblNvdXJjZSB9KSA6IG51bGxcbiAgY29uc3Qgc2hvd0NvbXBsZXRpb24gPSAhIWNvbXBDdHggJiYgY29tcEN0eC5tYXRjaGVzLmxlbmd0aCA+IDAgJiYgIXNob3dDb21tYW5kcyAmJiAhc2hvd0ZpbGVzICYmICFhbnlQYW5lbCgpXG5cbiAgY29uc3QgcmV3aW5kRW50cmllcyA9ICgpID0+IHVzZXJFbnRyaWVzKGRlcml2ZWQoKSlcbiAgY29uc3QgcmV3aW5kT3B0aW9ucyA9ICgoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gcmV3aW5kVGFyZ2V0KClcbiAgICBpZiAoIXRhcmdldCkgcmV0dXJuIFtdXG4gICAgY29uc3QgeyBtc2dzLCBlZGl0cyB9ID0gcmV3aW5kU3RhdHMoZGVyaXZlZCgpLCB0YXJnZXQuaW5kZXgpXG4gICAgY29uc3QgZSA9IGVkaXRzLmxlbmd0aFxuICAgIGNvbnN0IGVkaXRzTGFiZWwgPSBgJHtlfSAke2UgPT09IDEgPyAnZWRpdCcgOiAnZWRpdHMnfWBcbiAgICBjb25zdCBvcHRzID0gW11cbiAgICBpZiAoZSA+IDApIG9wdHMucHVzaCh7IGtleTogJ2JvdGgnLCBsYWJlbDogJ3Jlc3RvcmUgY29kZSBhbmQgY29udmVyc2F0aW9uJywgZGVzYzogYGNoYXQgcmV0dXJucyB0byB0aGlzIG1lc3NhZ2UgICR7ZWRpdHNMYWJlbH0gcmV2ZXJ0ZWRgIH0pXG4gICAgb3B0cy5wdXNoKHtcbiAgICAgIGtleTogJ2NoYXQnLFxuICAgICAgbGFiZWw6IGUgPiAwID8gJ3Jlc3RvcmUgY29udmVyc2F0aW9uIG9ubHknIDogJ3Jlc3RvcmUgY29udmVyc2F0aW9uJyxcbiAgICAgIGRlc2M6IGUgPiAwID8gJ2NoYXQgcmV0dXJucyB0byB0aGlzIG1lc3NhZ2UgIGZpbGUgY2hhbmdlcyBrZXB0JyA6IGBjaGF0IHJldHVybnMgdG8gdGhpcyBtZXNzYWdlICBkcm9wcyAke21zZ3N9IGVudHJpZXNgLFxuICAgIH0pXG4gICAgaWYgKGUgPiAwKSBvcHRzLnB1c2goeyBrZXk6ICdjb2RlJywgbGFiZWw6ICdyZXN0b3JlIGNvZGUgb25seScsIGRlc2M6IGBjb252ZXJzYXRpb24ga2VwdCAgJHtlZGl0c0xhYmVsfSByZXZlcnRlZGAgfSlcbiAgICBvcHRzLnB1c2goeyBrZXk6ICdzdW1tYXJ5JywgbGFiZWw6ICdyZXdpbmQgYW5kIGtlZXAgYSBzdW1tYXJ5JywgZGVzYzogJ2Ryb3BwZWQgZW50cmllcyBjb2xsYXBzZSBpbnRvIGEgb25lLWxpbmUgbm90ZScgfSlcbiAgICByZXR1cm4gb3B0c1xuICB9KSgpXG5cbiAgY29uc3QgdXNhZ2UgPSBsaXZlVXNhZ2UoKSB8fCBkZXJpdmVkKCkudXNhZ2VBY3RpdmVcbiAgY29uc3QgY29udGV4dFBlcmNlbnQgPSBtb2RlbCgpLmNvbnRleHQgPiAwICYmIGRlcml2ZWQoKS5sYXN0UHJvbXB0VG9rZW5zID4gMCAmJiBkZXJpdmVkKCkubGFzdFByb21wdE1vZGVsID09PSBtb2RlbCgpLm5hbWVcbiAgICA/IE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZCgoZGVyaXZlZCgpLmxhc3RQcm9tcHRUb2tlbnMgLyBtb2RlbCgpLmNvbnRleHQpICogMTAwKSlcbiAgICA6IDBcbiAgY29uc3QgdmlzaWJsZVNoZWxscyA9IHNoZWxsUm93c1xuICBjb25zdCB2aWV3ZWRTaGVsbCA9IHZpZXdlZFNoZWxsSWQoKSA/IHZpc2libGVTaGVsbHMuZmluZCgocykgPT4gcy5pZCA9PT0gdmlld2VkU2hlbGxJZCgpKSA6IG51bGxcbiAgY29uc3QgY29tYmluZWRBY3Rpdml0eSA9IHZpc2libGVTaGVsbHMubGVuZ3RoID4gMCAmJiBhZ2VudFJvd3MubGVuZ3RoID4gMFxuICBjb25zdCBzaGVsbFN0cmlwRm9jdXMgPSBmbS5pcygnc2hlbGwtc3RyaXAnKSB8fCAoZm0uaXMoJ2FjdGl2aXR5LXN0cmlwJykgJiYgZm0uY3VycmVudCgpLnN0YXJ0c1dpdGgoJ3NoZWxsLScpKSA/IGZtLmN1cnJlbnQoKSA6IG51bGxcbiAgY29uc3QgZm9jdXNlZFNoZWxsSWQgPSBzaGVsbFN0cmlwRm9jdXMgJiYgc2hlbGxTdHJpcEZvY3VzICE9PSAnc2hlbGwtbWFpbicgPyBzaGVsbFN0cmlwRm9jdXMuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSA6IG51bGxcbiAgY29uc3QgZm9jdXNlZFNoZWxsID0gZm9jdXNlZFNoZWxsSWQgPyB2aXNpYmxlU2hlbGxzLmZpbmQoKHMpID0+IHMuaWQgPT09IGZvY3VzZWRTaGVsbElkKSA6IG51bGxcbiAgY29uc3QgaGludGVkU2hlbGwgPSBmb2N1c2VkU2hlbGwgfHwgdmlld2VkU2hlbGxcbiAgY29uc3Qgc2hlbGxBY3Rpb25IaW50ID0gaGludGVkU2hlbGwgPyBgY3RybCt4ICR7aGludGVkU2hlbGwuc3RhdHVzID09PSAncnVubmluZycgPyAna2lsbCcgOiAnZGlzbWlzcyd9YCA6ICcnXG4gIGNvbnN0IHNoZWxsV2luZG93VGFyZ2V0ID0gc2hlbGxTdHJpcEZvY3VzID09PSAnc2hlbGwtbWFpbicgPyAwIDogdmlzaWJsZVNoZWxscy5maW5kSW5kZXgoKHMpID0+IHMuaWQgPT09IChmb2N1c2VkU2hlbGxJZCB8fCB2aWV3ZWRTaGVsbElkKCkpKVxuICBjb25zdCBzaGVsbFdpbmRvd1N0YXJ0ID0gc3RyaXBXaW5kb3dTdGFydChzaGVsbFdpbmRvd09mZnNldCgpLCBzaGVsbFdpbmRvd1RhcmdldCwgdmlzaWJsZVNoZWxscy5sZW5ndGgsIFNIRUxMX1NUUklQX01BWClcbiAgaWYgKHNoZWxsV2luZG93U3RhcnQgIT09IHNoZWxsV2luZG93T2Zmc2V0KCkpIHNldFNoZWxsV2luZG93T2Zmc2V0KHNoZWxsV2luZG93U3RhcnQpXG4gIGNvbnN0IHNoZWxsV2luZG93ID0gdmlzaWJsZVNoZWxscy5zbGljZShzaGVsbFdpbmRvd1N0YXJ0LCBzaGVsbFdpbmRvd1N0YXJ0ICsgU0hFTExfU1RSSVBfTUFYKVxuICBhZ2VudHNWZXJzaW9uKClcbiAgY29uc3QgdmlzaWJsZUFnZW50cyA9IGFnZW50Um93c1xuICBjb25zdCB2aWV3ZWRBZ2VudCA9IHZpZXdlZEFnZW50SWQoKSA/IGFnZW50Um93cy5maW5kKChyb3cpID0+IHJvdy5pZCA9PT0gdmlld2VkQWdlbnRJZCgpKSA6IG51bGxcbiAgY29uc3QgYWdlbnRTdHJpcEZvY3VzID0gZm0uaXMoJ2FnZW50LXN0cmlwJykgfHwgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGZtLmN1cnJlbnQoKS5zdGFydHNXaXRoKCdhZ2VudC0nKSkgPyBmbS5jdXJyZW50KCkgOiBudWxsXG4gIGNvbnN0IGZvY3VzZWRBZ2VudElkID0gYWdlbnRTdHJpcEZvY3VzICYmIGFnZW50U3RyaXBGb2N1cyAhPT0gJ2FnZW50LW1haW4nID8gYWdlbnRTdHJpcEZvY3VzLnNsaWNlKCdhZ2VudC0nLmxlbmd0aCkgOiBudWxsXG4gIGNvbnN0IGZvY3VzZWRBZ2VudCA9IGZvY3VzZWRBZ2VudElkID8gYWdlbnRSb3dzLmZpbmQoKHJvdykgPT4gcm93LmlkID09PSBmb2N1c2VkQWdlbnRJZCkgOiBudWxsXG4gIGNvbnN0IGhpbnRlZEFnZW50ID0gZm9jdXNlZEFnZW50IHx8IHZpZXdlZEFnZW50XG4gIGNvbnN0IGFnZW50QWN0aW9uSGludCA9IGhpbnRlZEFnZW50XG4gICAgPyBgY3RybCt4ICR7WydxdWV1ZWQnLCAncnVubmluZyddLmluY2x1ZGVzKGhpbnRlZEFnZW50LnN0YXR1cykgPyAnY2FuY2VsJyA6ICdkaXNtaXNzJ31gXG4gICAgOiAnJ1xuICBjb25zdCBhZ2VudFdpbmRvd1RhcmdldCA9IGFnZW50U3RyaXBGb2N1cyA9PT0gJ2FnZW50LW1haW4nXG4gICAgPyAwXG4gICAgOiB2aXNpYmxlQWdlbnRzLmZpbmRJbmRleCgoYSkgPT4gYS5pZCA9PT0gKGZvY3VzZWRBZ2VudElkIHx8IHZpZXdlZEFnZW50SWQoKSkpXG4gIGNvbnN0IGFnZW50V2luZG93U3RhcnQgPSBzdHJpcFdpbmRvd1N0YXJ0KGFnZW50V2luZG93T2Zmc2V0KCksIGFnZW50V2luZG93VGFyZ2V0LCB2aXNpYmxlQWdlbnRzLmxlbmd0aCwgQUdFTlRfU1RSSVBfTUFYKVxuICBpZiAoYWdlbnRXaW5kb3dTdGFydCAhPT0gYWdlbnRXaW5kb3dPZmZzZXQoKSkgc2V0QWdlbnRXaW5kb3dPZmZzZXQoYWdlbnRXaW5kb3dTdGFydClcbiAgY29uc3QgYWdlbnRXaW5kb3cgPSB2aXNpYmxlQWdlbnRzLnNsaWNlKGFnZW50V2luZG93U3RhcnQsIGFnZW50V2luZG93U3RhcnQgKyBBR0VOVF9TVFJJUF9NQVgpXG4gIGNvbnN0IHBlbmRpbmdXYWtldXBzID0gYm9vdC53YWtldXBzLnBlbmRpbmcoKVxuICBnaXRWZXJzaW9uKClcbiAgY29uc3QgZ2l0SW5mbyA9IGdpdEZvb3RlcigpID8gYm9vdC5naXQuc3RhdHVzKCkgOiBudWxsXG5cbiAgaWYgKHZpZXcoKSA9PT0gJ2hlbHAnKSB7XG4gICAgcmV0dXJuIDxIZWxwIGNvbW1hbmRzPXtDT01NQU5EU30gb25DbG9zZT17KCkgPT4gc2V0VmlldygnY2hhdCcpfSAvPlxuICB9XG5cbiAgaGlnaGxpZ2h0VmVyc2lvbigpXG5cbiAgY29uc3QgbWFpblRyYW5zY3JpcHQgPSBzdGVlcigpID8gc3RlZXJQcmV2aWV3KCkudHJhbnNjcmlwdCA6IGRlcml2ZWQoKS50cmFuc2NyaXB0XG4gIGNvbnN0IHNlbGVjdGVkU3RlZXJNZXNzYWdlSWQgPSBzdGVlclJvd3MoKVtzdGVlcigpPy5zZWxlY3RlZF0/Lm1lc3NhZ2VJZFxuICBjb25zdCBkZWNvcmF0ZWRUcmFuc2NyaXB0ID0gc3RlZXIoKSA/IG1haW5UcmFuc2NyaXB0Lm1hcCgoaXRlbSkgPT4gKHtcbiAgICAuLi5pdGVtLFxuICAgIHN0ZWVyU2VsZWN0ZWQ6IGl0ZW0ubWVzc2FnZUlkID09PSBzZWxlY3RlZFN0ZWVyTWVzc2FnZUlkLFxuICB9KSkgOiBtYWluVHJhbnNjcmlwdFxuICBjb25zdCBhY3RpdmVTaGVsbCA9IHNoZWxsU3RyaXBGb2N1cyA/IGZvY3VzZWRTaGVsbCA6IGFnZW50U3RyaXBGb2N1cyA/IG51bGwgOiB2aWV3ZWRTaGVsbFxuICBjb25zdCBhY3RpdmVBZ2VudCA9IGFnZW50U3RyaXBGb2N1cyA/IGZvY3VzZWRBZ2VudCA6IHNoZWxsU3RyaXBGb2N1cyA/IG51bGwgOiB2aWV3ZWRBZ2VudFxuICBsZXQgc2hlbGxPdXRwdXQgPSBudWxsXG4gIGlmIChhY3RpdmVTaGVsbCkge1xuICAgIHRyeSB7IHNoZWxsT3V0cHV0ID0gYm9vdC5zaGVsbHMub3V0cHV0KGFjdGl2ZVNoZWxsLmlkLCB7IHRhaWw6IDIwMDAgfSkgfSBjYXRjaCB7fVxuICB9XG4gIGNvbnN0IHNoZWxsVHJhbnNjcmlwdCA9IGFjdGl2ZVNoZWxsID8gW1xuICAgIHsga2luZDogJ3NoZWxsLWNvbW1hbmQnLCB0ZXh0OiBhY3RpdmVTaGVsbC5jb21tYW5kIH0sXG4gICAgeyBraW5kOiAnc2hlbGwtb3V0cHV0JywgdGV4dDogc2hlbGxPdXRwdXQ/Lm91dHB1dCB8fCAnbm8gb3V0cHV0IHlldCcgfSxcbiAgXSA6IG51bGxcbiAgY29uc3QgdHJhbnNjcmlwdFNvdXJjZSA9IGFjdGl2ZVNoZWxsID8gYHNoZWxsOiR7YWN0aXZlU2hlbGwuaWR9YCA6IGFjdGl2ZUFnZW50ID8gYGFnZW50OiR7YWN0aXZlQWdlbnQuaWR9YCA6ICdtYWluJ1xuICBjb25zdCBsaXZlUGVlcklkcyA9IG5ldyBTZXQob3ZlcmxheSgpLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5raW5kID09PSAncGVlcicpLm1hcCgoaXRlbSkgPT4gaXRlbS5tZXNzYWdlSWQpKVxuICBjb25zdCB1bnJlYWRQZWVycyA9IGRlY29yYXRlZFRyYW5zY3JpcHQuZmlsdGVyKGl0ZW0gPT4gaXRlbS5raW5kID09PSAncGVlcicgJiYgaXRlbS5kaXJlY3Rpb24gPT09ICdpbmNvbWluZycgJiYgIWl0ZW0ucmVhZClcbiAgY29uc3QgdW5yZWFkUGVlcklkcyA9IG5ldyBTZXQodW5yZWFkUGVlcnMubWFwKGl0ZW0gPT4gaXRlbS5tZXNzYWdlSWQpKVxuICBjb25zdCB0cmFuc2NyaXB0ID0gc2hlbGxUcmFuc2NyaXB0IHx8IChhY3RpdmVBZ2VudCA/IGFnZW50VHJhbnNjcmlwdChhY3RpdmVBZ2VudCkgOiBkZWNvcmF0ZWRUcmFuc2NyaXB0LmZpbHRlcigoaXRlbSkgPT4gaXRlbS5raW5kICE9PSAncGVlcicgfHwgKCFsaXZlUGVlcklkcy5oYXMoaXRlbS5tZXNzYWdlSWQpICYmICF1bnJlYWRQZWVySWRzLmhhcyhpdGVtLm1lc3NhZ2VJZCkpKSlcbiAgY29uc3QgZGVsaWJlcmF0aW9uVmlldyA9IGFjdGl2ZUFnZW50Py5yb2xlID09PSAnZGVsaWJlcmF0aW9uJ1xuICBjb25zdCBpc29sYXRlZFRyYW5zY3JpcHQgPSBhY3RpdmVBZ2VudCB8fCBhY3RpdmVTaGVsbFxuICBjb25zdCBncm91cEl0ZW1zID0gKHNvdXJjZSwgYWN0aXZlID0gZmFsc2UpID0+IHN0ZWVyKClcbiAgICA/IGNvbGxhcHNlU3RlZXJUb29scyhzb3VyY2UpXG4gICAgOiBjb21wYWN0VG9vbEhpc3RvcnkoKVxuICAgICAgPyBjb21wYWN0VHJhbnNjcmlwdFJ1bnMoc291cmNlLCBhY3RpdmUpXG4gICAgICA6IHNvdXJjZVxuICBjb25zdCB0cmFuc2NyaXB0SXRlbXMgPSBncm91cEl0ZW1zKHRyYW5zY3JpcHQsIGFjdGl2ZUFnZW50Py5zdGF0dXMgPT09ICdydW5uaW5nJylcbiAgY29uc3Qgd2luZG93ZWQgPSBkZWxpYmVyYXRpb25WaWV3ID8geyBpdGVtczogdHJhbnNjcmlwdEl0ZW1zLCBoaWRkZW5JdGVtczogMCwgaGlkZGVuQ291bnQ6IDAgfSA6IHRyYW5zY3JpcHRXaW5kb3codHJhbnNjcmlwdEl0ZW1zLCBoaXN0V2luZG93KCkpXG4gIGNvbnN0IGhpZGRlbkNvdW50ID0gd2luZG93ZWQuaGlkZGVuQ291bnRcbiAgY29uc3QgdmlzaWJsZUl0ZW1zID0gaXNvbGF0ZWRUcmFuc2NyaXB0ID8gd2luZG93ZWQuaXRlbXMgOiBbLi4ud2luZG93ZWQuaXRlbXMsIC4uLmdyb3VwSXRlbXMob3ZlcmxheSgpLCB0dXJuUGhhc2UoKSA9PT0gJ3Rvb2xzJyksIC4uLihzdHJlYW1pbmcoKSA/IFt7IGtpbmQ6ICdhc3Npc3RhbnQnLCB0ZXh0OiBgJHtzdHJlYW1pbmcoKX1cdTI1OEJgIH1dIDogW10pLCAuLi51bnJlYWRQZWVyc11cbiAgY29uc3QgcHJlcGFyZWRDb252ZXJzYXRpb24gPSBjb252ZXJzYXRpb25TZWFyY2gucHJlcGFyZSh2aXNpYmxlSXRlbXMpXG4gIGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXMgPSBwcmVwYXJlZENvbnZlcnNhdGlvbi5tYXRjaGVzXG4gIGNvbnN0IGl0ZW1zID0gcHJlcGFyZWRDb252ZXJzYXRpb24uaXRlbXNcblxuICBjb25zdCB3b3Jrc3BhY2VXaWR0aCA9IE1hdGgubWluKDM4LCBNYXRoLm1heCgxOCwgTWF0aC5mbG9vcih0ZXJtaW5hbFdpZHRoKCkgLyAzKSkpXG4gIGNvbnN0IHdpZGVMYXlvdXQgPSB3aWRlU2lkZWJhcigpICYmIHRlcm1pbmFsV2lkdGgoKSAtICh3b3Jrc3BhY2VPcGVuKCkgPyB3b3Jrc3BhY2VXaWR0aCA6IDApID4gMTYwXG4gIGNvbnN0IHNob3dDb21wb3NlckFjdGlvbnMgPSAhc3RlZXIoKSAmJiAhdmlld2VkQWdlbnQgJiYgIXZpZXdlZFNoZWxsICYmICFhbnlQYW5lbCgpICYmIHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nXG5cbiAgaWYgKHNob3dNZW1vcnlQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNZW1vcnlQYW5lbFxuICAgICAgICBtZW1vcmllcz17bWVtb3J5TGlzdCgpLmZpbHRlcigobSkgPT4gTUVNT1JZX1NDT1BFU1ttZW1TY29wZSgpXSA9PT0gJ2FsbCcgfHwgbS5zY29wZSA9PT0gTUVNT1JZX1NDT1BFU1ttZW1TY29wZSgpXSl9XG4gICAgICAgIHNjb3Blcz17TUVNT1JZX1NDT1BFU31cbiAgICAgICAgc2NvcGVJbmRleD17bWVtU2NvcGUoKX1cbiAgICAgICAgZm9jdXNlZFxuICAgICAgICBvblRvZ2dsZURpc2FibGVkPXt0b2dnbGVNZW1vcnlEaXNhYmxlZH1cbiAgICAgICAgb25Gb3JnZXQ9e2ZvcmdldE1lbW9yeX1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd01lbW9yeVBhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHNob3dNY3BQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNY3BQYW5lbFxuICAgICAgICBzZXJ2ZXJzPXttY3BTZXJ2ZXJzKCl9XG4gICAgICAgIGZvY3VzZWRcbiAgICAgICAgb25Ub2dnbGU9eyhuYW1lKSA9PiBtY3AudG9nZ2xlKG5hbWUpfVxuICAgICAgICBvblJlY29ubmVjdD17KG5hbWUpID0+IG1jcC5yZWNvbm5lY3QobmFtZSl9XG4gICAgICAgIG9uUmVtb3ZlPXsobmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFybWVkID0gcmVmcy5tY3BSZW1vdmVBcm1cbiAgICAgICAgICBpZiAoIWFybWVkIHx8IGFybWVkLm5hbWUgIT09IG5hbWUgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgICAgICAgcmVmcy5tY3BSZW1vdmVBcm0gPSB7IG5hbWUsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgICAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIHJlbW92ZSBcIiR7bmFtZX1cIiBhbmQgaXRzIGNvbmZpZ2ApXG4gICAgICAgICAgfVxuICAgICAgICAgIHJlZnMubWNwUmVtb3ZlQXJtID0gbnVsbFxuICAgICAgICAgIG1jcC5yZW1vdmUobmFtZSlcbiAgICAgICAgICBmbGFzaChgcmVtb3ZlZCBtY3Agc2VydmVyICR7bmFtZX1gKVxuICAgICAgICB9fVxuICAgICAgICBvbkFkZD17KG5hbWUsIGNvbW1hbmQsIHNjb3BlKSA9PiB7XG4gICAgICAgICAgbWNwLmFkZChuYW1lLCBjb21tYW5kLCBzY29wZSlcbiAgICAgICAgICBmbGFzaChgYWRkZWQgJHtuYW1lfSAoJHtzY29wZX0pYClcbiAgICAgICAgfX1cbiAgICAgICAgb25FZGl0PXsobmFtZSwgY29tbWFuZCkgPT4ge1xuICAgICAgICAgIG1jcC51cGRhdGUobmFtZSwgY29tbWFuZClcbiAgICAgICAgICBmbGFzaChgdXBkYXRlZCAke25hbWV9YClcbiAgICAgICAgfX1cbiAgICAgICAgb25JbnZhbGlkPXtmbGFzaH1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd01jcFBhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHNob3dSZXN1bWVQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxSZXN1bWVQYW5lbFxuICAgICAgICBzZXNzaW9ucz17cmVzdW1lU2Vzc2lvbnMoKX1cbiAgICAgICAgc2NvcGVzPXtyZXN1bWVTY29wZXMoKX1cbiAgICAgICAgc2NvcGVJbmRleD17cmVzdW1lU2NvcGUoKX1cbiAgICAgICAgbG9hZGluZz17cmVzdW1lTG9hZGluZygpfVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIGN1cnJlbnRJZD17c3RhdGUuc2Vzc2lvbj8uaWR9XG4gICAgICAgIG9uUGljaz17KG1ldGEpID0+IHtcbiAgICAgICAgICBpZiAobWV0YS5oZWFkZXIuaWQgPT09IHN0YXRlLnNlc3Npb24/LmlkKSByZXR1cm4gc2V0U2hvd1Jlc3VtZVBhbmVsKGZhbHNlKVxuICAgICAgICAgIHJlc3VtZVNlc3Npb24obWV0YSlcbiAgICAgICAgfX1cbiAgICAgICAgb25EZWxldGU9e2RlbGV0ZVNlc3Npb25NZXRhfVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93UmVzdW1lUGFuZWwoZmFsc2UpfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICBpZiAoc2hvd1Byb2plY3RQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxQcm9qZWN0UGFuZWxcbiAgICAgICAgcHJvamVjdHM9e3Byb2plY3RzKCl9XG4gICAgICAgIGxvYWRpbmc9e3Byb2plY3RzTG9hZGluZygpfVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIG9uUGlja0NoZWNrb3V0PXsoY2hlY2tvdXQpID0+IGNoZWNrb3V0LmxhdGVzdCA/IHJlc3VtZVNlc3Npb24oY2hlY2tvdXQubGF0ZXN0KSA6IGN0bC5zd2l0Y2hUb1dvcmt0cmVlKGNoZWNrb3V0KS50aGVuKCgpID0+IHNldFNob3dQcm9qZWN0UGFuZWwoZmFsc2UpKX1cbiAgICAgICAgb25QaWNrU2Vzc2lvbj17cmVzdW1lU2Vzc2lvbn1cbiAgICAgICAgb25BZGRXb3JrdHJlZT17YWRkUHJvamVjdFdvcmt0cmVlfVxuICAgICAgICBvbkRlbGV0ZT17ZGVsZXRlUHJvamVjdENoZWNrb3V0fVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93UHJvamVjdFBhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHNob3dDb25maWdQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDb25maWdQYW5lbFxuICAgICAgICB2YWx1ZXM9e3sgY2xvdWRzOiBjbG91ZHMoKSwgY29tcGFjdFRvb2xzOiBjb21wYWN0VG9vbEhpc3RvcnkoKSwgZ2l0U3RhdHVzOiBnaXRGb290ZXIoKSwgd2lkZVNpZGViYXI6IHdpZGVTaWRlYmFyKCksIHJlc2VhcmNoTW9kZWw6IGJvb3QucmVzZWFyY2hNb2RlbCwgc2hlbGxNb2RlbDogYm9vdC5zaGVsbE1vZGVsLCBkZWxpYmVyYXRpb25Nb2RlbDogYm9vdC5kZWxpYmVyYXRpb25Nb2RlbCwgcGFydGljaXBhbnRBTW9kZWw6IGJvb3QucGFydGljaXBhbnRBTW9kZWwsIHBhcnRpY2lwYW50Qk1vZGVsOiBib290LnBhcnRpY2lwYW50Qk1vZGVsLCByZXNlYXJjaEFnZW50TGltaXQ6IHJlc2VhcmNoQWdlbnRMaW1pdCgpIH19XG4gICAgICAgIGZvY3VzZWRcbiAgICAgICAgb25QaWNrU2hlbGxNb2RlbD17KCkgPT4ge1xuICAgICAgICAgIHNldFNlbGVjdGluZ1NoZWxsTW9kZWwodHJ1ZSlcbiAgICAgICAgICBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuKCdjb25maWcnKVxuICAgICAgICAgIHNldFNob3dDb25maWdQYW5lbChmYWxzZSlcbiAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKHRydWUpXG4gICAgICAgIH19XG4gICAgICAgIG9uUGlja1Jlc2VhcmNoTW9kZWw9eygpID0+IHtcbiAgICAgICAgICBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsKGZhbHNlKVxuICAgICAgICAgIHNldFNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKGZhbHNlKVxuICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4oJ2NvbmZpZycpXG4gICAgICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKVxuICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25QaWNrUGFydGljaXBhbnRNb2RlbD17KHRhcmdldCkgPT4ge1xuICAgICAgICAgIHNldFBhcnRpY2lwYW50TW9kZWxUYXJnZXQodGFyZ2V0KVxuICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4oJ2NvbmZpZycpXG4gICAgICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKVxuICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25QaWNrRGVsaWJlcmF0aW9uTW9kZWw9eygpID0+IHtcbiAgICAgICAgICBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCh0cnVlKVxuICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4oJ2NvbmZpZycpXG4gICAgICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKVxuICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25DaGFuZ2U9eyhuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmIChuYW1lID09PSAnY2xvdWRzJykge1xuICAgICAgICAgICAgc2V0Q2xvdWRzKHZhbHVlKVxuICAgICAgICAgICAgd3JpdGVDb25maWcoeyBhbmltYXRpb246IHsgY2xvdWRzOiB2YWx1ZSB9IH0pXG4gICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnZ2l0U3RhdHVzJykge1xuICAgICAgICAgICAgc2V0R2l0Rm9vdGVyKHZhbHVlKVxuICAgICAgICAgICAgYm9vdC5naXRGb290ZXIgPSB2YWx1ZVxuICAgICAgICAgICAgY3RsLmNvbmZpZ3VyZT8uKHsgZ2l0Rm9vdGVyOiB2YWx1ZSB9KVxuICAgICAgICAgICAgYm9vdC5naXQuc2V0RW5hYmxlZCh2YWx1ZSlcbiAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgZGlzcGxheTogeyBnaXRTdGF0dXM6IHZhbHVlIH0gfSlcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICd3aWRlU2lkZWJhcicpIHtcbiAgICAgICAgICAgIHNldFdpZGVTaWRlYmFyKHZhbHVlKVxuICAgICAgICAgICAgYm9vdC53aWRlU2lkZWJhciA9IHZhbHVlXG4gICAgICAgICAgICBjdGwuY29uZmlndXJlPy4oeyB3aWRlU2lkZWJhcjogdmFsdWUgfSlcbiAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgZGlzcGxheTogeyB3aWRlU2lkZWJhcjogdmFsdWUgfSB9KVxuICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3Jlc2VhcmNoQWdlbnRMaW1pdCcpIHtcbiAgICAgICAgICAgIHNldFJlc2VhcmNoQWdlbnRMaW1pdCh2YWx1ZSlcbiAgICAgICAgICAgIGJvb3QucmVzZWFyY2hBZ2VudExpbWl0ID0gdmFsdWVcbiAgICAgICAgICAgIGN0bC5jb25maWd1cmU/Lih7IHJlc2VhcmNoQWdlbnRMaW1pdDogdmFsdWUgfSlcbiAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgcmVzZWFyY2g6IHsgYWdlbnRMaW1pdDogdmFsdWUgfSB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRDb21wYWN0VG9vbEhpc3RvcnkodmFsdWUpXG4gICAgICAgICAgICB3cml0ZUNvbmZpZyh7IGRpc3BsYXk6IHsgY29tcGFjdFRvb2xIaXN0b3J5OiB2YWx1ZSB9IH0pXG4gICAgICAgICAgfVxuICAgICAgICB9fVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93Q29uZmlnUGFuZWwoZmFsc2UpfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogJzEwMCUnIH19PlxuICAgICAge3dvcmtzcGFjZU9wZW4oKSAmJiA8V29ya3NwYWNlU2lkZWJhciBncm91cHM9e3dvcmtzcGFjZUdyb3Vwc05vd30gc2VsZWN0ZWQ9e3dvcmtzcGFjZVNlbGVjdGVkKCl9IHdpZHRoPXt3b3Jrc3BhY2VXaWR0aH0gbG9hZGluZz17d29ya3NwYWNlTG9hZGluZygpfSBlcnJvcj17d29ya3NwYWNlRXJyb3IoKX0gb25IZWlnaHQ9eyhoZWlnaHQpID0+IHsgaWYgKHdvcmtzcGFjZUhlaWdodCgpICE9PSBoZWlnaHQpIHNldFdvcmtzcGFjZUhlaWdodChoZWlnaHQpIH19IC8+fVxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiB3aWRlTGF5b3V0ID8gJ3JvdycgOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIGZsZXhCYXNpczogMCwgaGVpZ2h0OiAnMTAwJScgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIHBhZGRpbmdYOiAyLCBnYXA6IDEsIGJnOiBQQU5FTF9CRyB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgIHtidXN5KClcbiAgICAgICAgICAgID8gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IGFjY2VudCgpLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDxTaGltbWVyIGNvbG9yPVwiYmxhY2tcIiBoaWdobGlnaHQ9e1BBTkVMX0JHfSBkdXJhdGlvbj17MTUwMH0gcmV2ZXJzZT5cbiAgICAgICAgICAgICAgICAgICAge2NvbXBhY3RpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgID8gY29tcGFjdFN0YXR1cygpPy5waGFzZSA9PT0gJ3dyaXRpbmcnID8gYENvbXBhY3RpbmcgIHdyaXRpbmcgJHtjb21wYWN0U3RhdHVzKCkuc2VjdGlvbn0vOGAgOiAnQ29tcGFjdGluZyAgYW5hbHl6aW5nJ1xuICAgICAgICAgICAgICAgICAgICAgIDogdHVyblBoYXNlKCkgPT09ICd0aGlua2luZycgPyAnVGhpbmtpbmcnIDogdHVyblBoYXNlKCkgPT09ICd0b29scycgPyAnV29ya2luZycgOiAnUmVzcG9uZGluZyd9XG4gICAgICAgICAgICAgICAgICA8L1NoaW1tZXI+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57YCAgJHtlbGFwc2VkfSAgZXNjIHRvIGludGVycnVwdGB9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57Ym9vdC5kaXNwbGF5Q3dkfTwvdGV4dD59XG4gICAgICAgIDwvYm94PlxuICAgICAgICB7Z2l0SW5mbz8uYnJhbmNoICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2dpdEluZm8uYnJhbmNofTwvdGV4dD59XG4gICAgICAgIHtnaXRJbmZvPy5hZGRlZCA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEdSRUVOIH19PntgKyR7Z2l0SW5mby5hZGRlZH1gfTwvdGV4dD59XG4gICAgICAgIHtnaXRJbmZvPy5yZW1vdmVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogUkVEIH19PntgLSR7Z2l0SW5mby5yZW1vdmVkfWB9PC90ZXh0Pn1cbiAgICAgIDwvYm94PlxuICAgICAge3RyYW5zY3JpcHQubGVuZ3RoID09PSAwID8gKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBkaW06IGRpbW1pbmdQYW5lbCgpIH19PlxuICAgICAgICAgIDxFbXB0eVN0YXRlIHZlcnNpb249e3ZlcnNpb259IGNsb3Vkcz17Y2xvdWRzKCl9IC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgKSA6IDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICB7ZGVsaWJlcmF0aW9uVmlldyAmJiBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCA9PT0gJ3VzZXInKS5tYXAoKGl0ZW0sIGkpID0+IChcbiAgICAgICAgICA8Ym94IGtleT17YCR7dHJhbnNjcmlwdFNvdXJjZX06cHJvbXB0OiR7aXRlbS5tZXNzYWdlSWQgfHwgaX1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ0xlZnQ6IDIsIHBhZGRpbmdSaWdodDogNCwgcGFkZGluZ0JvdHRvbTogMSwgZmxleFNocmluazogMCB9fT5cbiAgICAgICAgICAgIDxNZXNzYWdlIGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2UoKX0gLz5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKSl9XG4gICAgICAgIDxTY3JvbGxCb3hcbiAgICAgICAgICBzdHlsZT17eyBmbGV4R3JvdzogMSwgZGltOiBkaW1taW5nUGFuZWwoKSB9fVxuICAgICAgICAgIGZvY3VzZWQ9eyFkZWxpYmVyYXRpb25WaWV3ICYmIChmbS5pcygnZmVlZCcpIHx8IGZtLmlzKCdjb252ZXJzYXRpb24tc2VhcmNoJykpfVxuICAgICAgICAgIGZvbGxvd0ZvY3VzPXtzdGVlcigpID8gc3RlZXJMaXN0Rm9jdXMgOiBudWxsfVxuICAgICAgICAgIGZvY3VzUGFkZGluZz17MX1cbiAgICAgICAgICBzY3JvbGxPZmZzZXQ9e2ZvbGxvdygpID8gMWU5IDogb2Zmc2V0KCl9XG4gICAgICAgICAgb25NZXRyaWNzPXsobWV0cmljcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSB0cmFuc2NyaXB0TWV0cmljcygpXG4gICAgICAgICAgICBpZiAocHJldmlvdXM/LnZpc2libGVIZWlnaHQgPT09IG1ldHJpY3MudmlzaWJsZUhlaWdodCAmJiBwcmV2aW91cz8uY29udGVudEhlaWdodCA9PT0gbWV0cmljcy5jb250ZW50SGVpZ2h0KSByZXR1cm5cbiAgICAgICAgICAgIHNldFRyYW5zY3JpcHRNZXRyaWNzKG1ldHJpY3MpXG4gICAgICAgICAgICBpZiAoaGlkZGVuQ291bnQgPiAwICYmIG1ldHJpY3MudmlzaWJsZUhlaWdodCA+IDAgJiYgbWV0cmljcy5jb250ZW50SGVpZ2h0IDw9IG1ldHJpY3MudmlzaWJsZUhlaWdodCkge1xuICAgICAgICAgICAgICBzZXRIaXN0V2luZG93KChzaXplKSA9PiBzaXplICsgSElTVE9SWV9XSU5ET1cpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblNjcm9sbD17KG5leHQsIG1ldGEpID0+IHtcbiAgICAgICAgICBzZXRGb2xsb3coISFtZXRhPy5hdEJvdHRvbSlcbiAgICAgICAgICAvLyBiYWNrIGF0IHRoZSBib3R0b206IGxvYWRlZCBoaXN0b3J5IGlzIG9mZi1zY3JlZW4sIHNvIHJlLWhpZGluZ1xuICAgICAgICAgIC8vIGl0IGlzIGludmlzaWJsZSBhbmQgcmVzdG9yZXMgdGhlIHNtYWxsIHJlbmRlciB3aW5kb3dcbiAgICAgICAgICBpZiAobWV0YT8uYXRCb3R0b20gJiYgaGlzdFdpbmRvdygpID4gSElTVE9SWV9XSU5ET1cpIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgICAgICAgaWYgKG5leHQgPT09IDAgJiYgaGlkZGVuQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAvLyBrZWVwIHRoZSB2aWV3IGFuY2hvcmVkOiBlc3RpbWF0ZSB0aGUgcm93cyB0aGUgbmV3IGJhdGNoIGFkZHNcbiAgICAgICAgICAgIC8vIGFuZCBzY3JvbGwgcGFzdCB0aGVtIHNvIHRoZSBjdXJyZW50IHRvcCBpdGVtIHN0YXlzIGluIHBsYWNlXG4gICAgICAgICAgICBjb25zdCBhZGRlZCA9IE1hdGgubWluKEhJU1RPUllfV0lORE9XLCB3aW5kb3dlZC5oaWRkZW5JdGVtcylcbiAgICAgICAgICAgIGNvbnN0IGF2Z1Jvd3MgPSBNYXRoLm1heCgyLCBNYXRoLnJvdW5kKChtZXRhPy5tYXhPZmZzZXQgfHwgMCkgLyBNYXRoLm1heCgxLCBpdGVtcy5sZW5ndGgpKSlcbiAgICAgICAgICAgIHNldEhpc3RXaW5kb3coKHcpID0+IHcgKyBISVNUT1JZX1dJTkRPVylcbiAgICAgICAgICAgIHNldE9mZnNldChhZGRlZCAqIGF2Z1Jvd3MpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0T2Zmc2V0KG5leHQpXG4gICAgICAgIH19XG4gICAgICAgIHNjcm9sbGJhclxuICAgICAgPlxuICAgICAgICA8Q29udmVyc2F0aW9uU2Nyb2xsQW5jaG9yIHRhcmdldD17Y29udmVyc2F0aW9uU2VhcmNoLnNjcm9sbH0gLz5cbiAgICAgICAge2hpZGRlbkNvdW50ID4gMCAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19PntgXHUyMzAzICR7aGlkZGVuQ291bnQudG9Mb2NhbGVTdHJpbmcoKX0gb2xkZXIgJHtoaWRkZW5Db3VudCA9PT0gMSA/ICdtZXNzYWdlJyA6ICdtZXNzYWdlcyd9ICBzY3JvbGwgdG8gdG9wIHRvIGxvYWRgfTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgICAge2RlbGliZXJhdGlvblZpZXcgPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxEZWxpYmVyYXRpb25FeGNoYW5nZSB0dXJucz17aXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmtpbmQgPT09ICdkZWxpYmVyYXRpb24tdHVybicpfSB2ZXJib3NlPXt2ZXJib3NlKCl9IHdpZGU9e3Rlcm1pbmFsV2lkdGgoKSA+PSAxMTB9IGNvbXBhY3RUb29sSGlzdG9yeT17Y29tcGFjdFRvb2xIaXN0b3J5KCl9IHZpZXdwb3J0SGVpZ2h0PXt0cmFuc2NyaXB0TWV0cmljcygpPy52aXNpYmxlSGVpZ2h0fSBmb2N1c2VkPXtmbS5pcygnZmVlZCcpfSBvbkZvY3VzPXsoKSA9PiBmbS5mb2N1cygnZmVlZCcpfSAvPlxuICAgICAgICAgICAge2l0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5raW5kICE9PSAndXNlcicgJiYgaXRlbS5raW5kICE9PSAnZGVsaWJlcmF0aW9uLXR1cm4nKS5tYXAoKGl0ZW0sIGkpID0+IChcbiAgICAgICAgICAgICAgPE1lc3NhZ2Uga2V5PXtgJHt0cmFuc2NyaXB0U291cmNlfTp0YWlsOiR7aXRlbS5tZXNzYWdlSWQgfHwgaXRlbS5jYWxsSWQgfHwgaX1gfSBpdGVtPXtpdGVtfSB2ZXJib3NlPXt2ZXJib3NlKCl9IC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKSA6IGl0ZW1zLm1hcCgoaXRlbSwgaSkgPT4gc3RlZXIoKSAmJiBpdGVtLm1lc3NhZ2VJZCA/IChcbiAgICAgICAgICA8U3RlZXJNZXNzYWdlXG4gICAgICAgICAgICBrZXk9e2Ake3RyYW5zY3JpcHRTb3VyY2V9OiR7aXRlbS5tZXNzYWdlSWQgfHwgaXRlbS5jYWxsSWQgfHwgaGlkZGVuQ291bnQgKyBpfWB9XG4gICAgICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgICAgICAgdmVyYm9zZT17dmVyYm9zZSgpfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9e2l0ZW0ubWVzc2FnZUlkID09PSBzZWxlY3RlZFN0ZWVyTWVzc2FnZUlkfVxuICAgICAgICAgICAgZm9jdXM9e3N0ZWVyTGlzdEZvY3VzfVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPENvbnZlcnNhdGlvblNlYXJjaE1lc3NhZ2VcbiAgICAgICAgICAgIGtleT17YCR7dHJhbnNjcmlwdFNvdXJjZX06JHtpdGVtLm1lc3NhZ2VJZCB8fCBpdGVtLmNhbGxJZCB8fCBoaWRkZW5Db3VudCArIGl9YH1cbiAgICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgICB2ZXJib3NlPXt2ZXJib3NlKCl9XG4gICAgICAgICAgICBjdXJyZW50TWF0Y2g9e2NvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXNbY29udmVyc2F0aW9uU2VhcmNoLmluZGV4KCldPy5pdGVtSW5kZXggPT09IGkgPyBjb252ZXJzYXRpb25TZWFyY2hNYXRjaGVzW2NvbnZlcnNhdGlvblNlYXJjaC5pbmRleCgpXSA6IG51bGx9XG4gICAgICAgICAgICBzZWFyY2g9e2NvbnZlcnNhdGlvblNlYXJjaH1cbiAgICAgICAgICAvPlxuICAgICAgICApKX1cbiAgICAgICAgPC9TY3JvbGxCb3g+XG4gICAgICAgIHtjb252ZXJzYXRpb25TZWFyY2guYWN0aXZlKCkgPyAoXG4gICAgICAgICAgPENvbnZlcnNhdGlvblNlYXJjaEJhciBzZWFyY2g9e2NvbnZlcnNhdGlvblNlYXJjaH0gbWF0Y2hlcz17Y29udmVyc2F0aW9uU2VhcmNoTWF0Y2hlc30gLz5cbiAgICAgICAgKSA6IGZtLmlzKCdmZWVkJykgJiYgIWFueVBhbmVsKCkgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgcG9zaXRpb246ICdhYnNvbHV0ZScsIHRvcDogMCwgbGVmdDogMCwgcmlnaHQ6IDAsIGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogYWNjZW50KCksIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6ICdibGFjaycgfX0+eydqL2sgIFx1MjE5MS9cdTIxOTMgc2Nyb2xsICAgZy9HIGVuZHMgICAvIHNlYXJjaCAgIGN0cmwtdS9kIHBhZ2UnfTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgIDwvYm94Pn1cblxuICAgICAgeyhleHBlZGl0ZWQoKS5sZW5ndGggPiAwIHx8IHF1ZXVlZCgpLmxlbmd0aCA+IDApICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICB7ZXhwZWRpdGVkKCkubWFwKChtZXNzYWdlLCBpKSA9PiAoXG4gICAgICAgICAgICA8Ym94IGtleT17YGV4cGVkaXRlZC0ke2l9YH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT57J1x1MjFBMCAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogYWNjZW50KCkgfX0+e21lc3NhZ2UucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAge2kgPT09IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnsnICBhZnRlciBuZXh0IHRvb2wgIFx1MjE5MSB0byBlZGl0J308L3RleHQ+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKSl9XG4gICAgICAgICAge3F1ZXVlZCgpLm1hcCgobWVzc2FnZSwgaSkgPT4gKFxuICAgICAgICAgICAgPGJveCBrZXk9e2BwZW5kaW5nLSR7aX1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnXHUyMDNBICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBNVVRFRCB9fT57bWVzc2FnZS5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICB7aSA9PT0gMCAmJiBleHBlZGl0ZWQoKS5sZW5ndGggPT09IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnICBwZW5kaW5nICBcdTIxOTEgZWRpdCAgXHUyMTkyIHNlbmQgYWZ0ZXIgbmV4dCB0b29sJ308L3RleHQ+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge2NvbW1hbmRGb3JtKCkgJiYgPENvbW1hbmRGb3JtXG4gICAgICAgIG5hbWU9e2NvbW1hbmRGb3JtKCkubmFtZX1cbiAgICAgICAgZmllbGRzPXtjb21tYW5kRm9ybSgpLmZpZWxkc31cbiAgICAgICAgZmlsZXM9e2ZpbGVMaXN0KCl9XG4gICAgICAgIGZvY3VzZWRcbiAgICAgICAgb25TdWJtaXQ9eyh2YWx1ZXMpID0+IGZpbmlzaENvbW1hbmQoY29tbWFuZEZvcm0oKSwgdmFsdWVzKX1cbiAgICAgICAgb25DYW5jZWw9eygpID0+IHsgc2V0Q29tbWFuZEZvcm0obnVsbCk7IHJlZnMuY29tbWFuZEV4cGFuc2lvbiA9IG51bGw7IGZtLmZvY3VzKCdpbnB1dCcpIH19XG4gICAgICAvPn1cblxuICAgICAge3F1ZXN0aW9uUmVxdWVzdCgpICYmIChcbiAgICAgICAgPFF1ZXN0aW9uRm9ybVxuICAgICAgICAgIHJlcXVlc3Q9e3F1ZXN0aW9uUmVxdWVzdCgpfVxuICAgICAgICAgIGZvY3VzZWQ9eyF3b3Jrc3BhY2VPcGVuKCkgJiYgZm0uaXMoJ3F1ZXN0aW9uJykgJiYgIWFueVBhbmVsKCl9XG4gICAgICAgICAgb25TdWJtaXQ9eyhhbnN3ZXJzKSA9PiB7XG4gICAgICAgICAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlclF1ZXN0aW9uID0gdHJ1ZVxuICAgICAgICAgICAgY3RsLmFuc3dlclF1ZXN0aW9uKGFuc3dlcnMpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNhbmNlbD17KCkgPT4ge1xuICAgICAgICAgICAgcmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJRdWVzdGlvbiA9IHRydWVcbiAgICAgICAgICAgIGN0bC5jYW5jZWxRdWVzdGlvbigpXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzdGVlcigpICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIGJvbGQ6IHRydWUgfX0+e3N0ZWVyKCkuZWRpdGluZyA/IGAke3N0ZWVyKCkuYWRkaW5nID8gJ0FkZCcgOiAnRWRpdCd9ICR7c3RlZXIoKS5yb2xlfWAgOiBgU3RlZXIgICR7c3RlZXIoKS5jaGFuZ2VzLmxlbmd0aH0gc3RhZ2VkYH08L3RleHQ+XG4gICAgICAgICAge3N0ZWVyKCkuZWRpdGluZyA/IChcbiAgICAgICAgICAgIDxUZXh0QXJlYVxuICAgICAgICAgICAgICBmb2N1c2VkPXtmbS5pcygnc3RlZXInKX1cbiAgICAgICAgICAgICAgdmFsdWU9e3N0ZWVyVGV4dCgpfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0U3RlZXJUZXh0fVxuICAgICAgICAgICAgICBvblN1Ym1pdD17c3RhZ2VTdGVlclRleHR9XG4gICAgICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0U3RlZXJUZXh0KCcnKVxuICAgICAgICAgICAgICAgIHNldFN0ZWVyKHsgLi4uc3RlZXIoKSwgZWRpdGluZzogZmFsc2UsIGFkZGluZzogZmFsc2UgfSlcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgb25LZXlEb3duPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgYXQgPSBTVEVFUl9ST0xFUy5pbmRleE9mKHN0ZWVyKCkucm9sZSlcbiAgICAgICAgICAgICAgICAgIHNldFN0ZWVyKHsgLi4uc3RlZXIoKSwgcm9sZTogU1RFRVJfUk9MRVNbKGF0ICsgMSkgJSBTVEVFUl9ST0xFUy5sZW5ndGhdIH0pXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgc3VibWl0T25FbnRlclxuICAgICAgICAgICAgICBuZXdsaW5lT25CYWNrc2xhc2hFbnRlclxuICAgICAgICAgICAgICBjbGVhck9uU3VibWl0XG4gICAgICAgICAgICAgIG1heEhlaWdodD17OH1cbiAgICAgICAgICAgICAgY3Vyc29yPXt7IGJsaW5rOiB0cnVlLCBiZzogYWNjZW50KCksIGNvbG9yOiAnYmxhY2snIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydcdTIxOTFcdTIxOTMgc2VsZWN0ICBlbnRlciBlZGl0ICBhIGFkZCBhZnRlciAgeC9kIGRlbGV0ZSAgY3RybCtzIGFwcGx5ICBlc2MgZGlzY2FyZCd9PC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3BlZXJTdGF0dXMoKSAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e3BlZXJTdGF0dXMoKX08L3RleHQ+fVxuICAgICAgeyFzdGVlcigpICYmICF2aWV3ZWRBZ2VudCAmJiAhdmlld2VkU2hlbGwgJiYgPE1vdXNlRm9jdXNSZWdpb24gb25QcmVzcz17KCkgPT4geyBpZiAoIXdvcmtzcGFjZU9wZW4oKSkgZm0uZm9jdXMoJ2lucHV0JykgfX0gc3R5bGU9e3sgYmc6IFBBTkVMX0JHLCBmbGV4RGlyZWN0aW9uOiAncm93JywgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxLCBtYXJnaW5Ub3A6IHRyYW5zY3JpcHQubGVuZ3RoID09PSAwICYmIGNsb3VkcygpID8gMCA6IDEsIGRpbTogZGltbWluZ1BhbmVsKCkgfHwgISFxdWVzdGlvblJlcXVlc3QoKSB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmlzKCdpbnB1dCcpICYmICFhbnlQYW5lbCgpICYmICFxdWVzdGlvblJlcXVlc3QoKSA/IGFjY2VudCgpIDogTVVURUQsIGJvbGQ6IHRydWUgfX0+eydcdTI3NkYnfTwvdGV4dD5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgeyhzdGF0ZS5zZXNzaW9uPy5oZWFkZXIuZm9ya2VkRnJvbSB8fCBkZXJpdmVkKCkudGl0bGUpICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCB0b3A6IDAsIHJpZ2h0OiAwLCBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgIHtzdGF0ZS5zZXNzaW9uPy5oZWFkZXIuZm9ya2VkRnJvbSAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Rlcml2ZWQoKS50aXRsZSA/ICdcdTI0NDIgJyA6ICdcdTI0NDInfTwvdGV4dD59XG4gICAgICAgICAgICB7ZGVyaXZlZCgpLnRpdGxlICYmIDx0ZXh0IHN0eWxlPXt7IGJnOiBmbS5pcygnaW5wdXQnKSAmJiAhYW55UGFuZWwoKSAmJiAhcXVlc3Rpb25SZXF1ZXN0KCkgPyBhY2NlbnQoKSA6IE1VVEVELCBjb2xvcjogJ2JsYWNrJywgYm9sZDogdHJ1ZSB9fT57YCAke2Rlcml2ZWQoKS50aXRsZX0gYH08L3RleHQ+fVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgICA8VGV4dEFyZWFcbiAgICAgICAgICBjb2xvcj17Rkd9XG4gICAgICAgICAgbGluZUNvdW50ZXJcbiAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICBmb2N1c2VkPXshd29ya3NwYWNlT3BlbigpICYmIGZtLmlzKCdpbnB1dCcpICYmICFhbnlQYW5lbCgpICYmICFxdWVzdGlvblJlcXVlc3QoKX1cbiAgICAgICAgICB2YWx1ZT17aW5wdXQoKX1cbiAgICAgICAgICBjdXJzb3JPZmZzZXQ9e2lucHV0Q3Vyc29yKCl9XG4gICAgICAgICAgb25DdXJzb3JDaGFuZ2U9eyhjdXJzb3IpID0+IHtcbiAgICAgICAgICAgIHNldElucHV0Q3Vyc29yKGN1cnNvcilcbiAgICAgICAgICAgIHNldENtZEN5Y2xlKG51bGwpXG4gICAgICAgICAgICBzZXRDbWRJbmRleCgwKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DaGFuZ2U9eyh2KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb252ZXJ0ZWQgPSBwbGFjZWhvbGRlcml6ZUltYWdlUGF0aHModiwge1xuICAgICAgICAgICAgICBhdHRhY2htZW50czogc3RhdGUuYXR0YWNobWVudHMsXG4gICAgICAgICAgICAgIG5leHRJZDogKCkgPT4gKytzdGF0ZS5pbWFnZUNvdW50LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHNldElucHV0KGNvbnZlcnRlZC50ZXh0LCBjb252ZXJ0ZWQudGV4dCA9PT0gdiA/IGlucHV0Q3Vyc29yKCkgOiB1bmRlZmluZWQpXG4gICAgICAgICAgICBzZXRDbWRJbmRleCgwKVxuICAgICAgICAgICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICAgICAgICAgIHNldEZpbGVJbmRleCgwKVxuICAgICAgICAgICAgc2V0SGlzdElkeCgtMSlcbiAgICAgICAgICAgIHNldEZpbGVzRGlzbWlzc2VkKGZhbHNlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DYW5jZWw9eygpID0+IHtcbiAgICAgICAgICAgIGlmIChidXN5KCkpIGludGVycnVwdCgpXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gaW1wbGljaXRSZXdpbmRUYXJnZXQoZGVyaXZlZCgpLCBpbnB1dCgpKVxuICAgICAgICAgICAgICBpZiAodGFyZ2V0KSBwZXJmb3JtUmV3aW5kVG8odGFyZ2V0LCB7IGtleTogJ2NoYXQnIH0pXG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldENtZEN5Y2xlKG51bGwpXG4gICAgICAgICAgICAgICAgc2V0Q29tcGxldGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICBzZXRGaWxlc0Rpc21pc3NlZCh0cnVlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblN1Ym1pdD17c2VuZH1cbiAgICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdsZWZ0JyAmJiAhZS5jdHJsICYmICFlLm1ldGEgJiYgIWUuYWx0ICYmIGJvb3Qud29ya3NwYWNlICYmIGZtLmlzKCdpbnB1dCcpICYmIHZpZXcoKSA9PT0gJ2NoYXQnICYmICFhbnlQYW5lbCgpICYmIGVtcHR5V29ya3NwYWNlQ29tcG9zZXIoe1xuICAgICAgICAgICAgICB0ZXh0OiBlLnZhbHVlLCBhdHRhY2htZW50czogd29ya3NwYWNlRHJhZnRBdHRhY2htZW50cyhlLnZhbHVlLCBzdGF0ZS5hdHRhY2htZW50cyksIGRpY3RhdGlvbjogZGljdGF0aW9uU3RhdHVzKCksIGNhcHR1cmU6IGNhcHR1cmVTdGF0dXMoKSwgcGVuZGluZzogcmVmcy5jb21tYW5kRXhwYW5zaW9uIHx8IHJlZnMud29ya3NwYWNlUGFzdGVQZW5kaW5nLFxuICAgICAgICAgICAgICBoaXN0b3J5OiBoaXN0SWR4KCksIGNvbXBsZXRpb246IGNvbXBsZXRpbmcoKSwgY29tbWFuZDogY29tbWFuZEZvcm0oKSwgcXVlc3Rpb246IHF1ZXN0aW9uUmVxdWVzdCgpLCBzdGVlcjogc3RlZXIoKSwgcXVldWVkOiBxdWV1ZWQoKS5sZW5ndGgsIGV4cGVkaXRlZDogZXhwZWRpdGVkKCkubGVuZ3RoLFxuICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgc2V0V29ya3NwYWNlU2VsZWN0ZWQoYm9vdC53b3Jrc3BhY2UuY3VycmVudElkKCkpXG4gICAgICAgICAgICAgIHNldFdvcmtzcGFjZU9wZW4odHJ1ZSlcbiAgICAgICAgICAgICAgc2V0V29ya3NwYWNlTG9hZGluZyh0cnVlKVxuICAgICAgICAgICAgICBmbS5mb2N1cygnd29ya3NwYWNlJylcbiAgICAgICAgICAgICAgdm9pZCByZWZyZXNoV29ya3NwYWNlKClcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZWZzLmRpY3RhdGlvbklucHV0LmhhbmRsZShlKSkgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIGlmIChlLmN0cmwgJiYgZS5rZXkgPT09ICd2Jykge1xuICAgICAgICAgICAgICByZWZzLndvcmtzcGFjZVBhc3RlUGVuZGluZyA9IHRydWVcbiAgICAgICAgICAgICAgdm9pZCByZWZzLnBhc3RlSW1hZ2UoKS5maW5hbGx5KCgpID0+IHsgcmVmcy53b3Jrc3BhY2VQYXN0ZVBlbmRpbmcgPSBmYWxzZSB9KVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuY3RybCAmJiBlLmtleSA9PT0gJ2cnKSB7XG4gICAgICAgICAgICAgIHJlZnMuZGljdGF0aW9uSW5wdXQuc3RhcnQoZSlcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmN0cmwgJiYgZS5rZXkgPT09ICdvJykge1xuICAgICAgICAgICAgICB2b2lkIHJlZnMuY2FwdHVyZUltYWdlKClcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3RhYicgJiYgIWUuY3RybCAmJiAhZS5tZXRhICYmIHNob3dGaWxlcyAmJiBtYXRjaGVkRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBwaWNrRmlsZShtYXRjaGVkRmlsZXNbTWF0aC5taW4oZmlsZUluZGV4KCksIG1hdGNoZWRGaWxlcy5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICd0YWInICYmICFlLmN0cmwgJiYgIWUubWV0YSAmJiBzaG93Q29tbWFuZHMgJiYgbWF0Y2hlZENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3QgY3ljbGUgPSBjbWRDeWNsZSgpXG4gICAgICAgICAgICAgIGlmICghY3ljbGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IE1hdGgubWluKGNtZEluZGV4KCksIG1hdGNoZWRDb21tYW5kcy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgICAgIHNldENtZEN5Y2xlKHsgbWF0Y2hlczogbWF0Y2hlZENvbW1hbmRzIH0pXG4gICAgICAgICAgICAgICAgc2V0Q21kSW5kZXgoc3RhcnQpXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IHJlcGxhY2VDb21tYW5kKGlucHV0KCksIHNsYXNoUmFuZ2UsICcvJyArIG1hdGNoZWRDb21tYW5kc1tzdGFydF0ubmFtZSlcbiAgICAgICAgICAgICAgICBzZXRJbnB1dChuZXh0LnRleHQsIG5leHQuY3Vyc29yKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSAoY21kSW5kZXgoKSArIDEpICUgY3ljbGUubWF0Y2hlcy5sZW5ndGhcbiAgICAgICAgICAgICAgICBzZXRDbWRJbmRleChuZXh0KVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gcmVwbGFjZUNvbW1hbmQoaW5wdXQoKSwgc2xhc2hSYW5nZSwgJy8nICsgY3ljbGUubWF0Y2hlc1tuZXh0XS5uYW1lKVxuICAgICAgICAgICAgICAgIHNldElucHV0KHJlcGxhY2VtZW50LnRleHQsIHJlcGxhY2VtZW50LmN1cnNvcilcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAncGFzdGUnICYmIGUudGV4dCkge1xuICAgICAgICAgICAgICBjb25zdCBwYXRocyA9IGV4dHJhY3RJbWFnZVBhdGhzKGUudGV4dClcbiAgICAgICAgICAgICAgaWYgKHBhdGhzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkcmFmdCA9IGUudmFsdWVcbiAgICAgICAgICAgICAgICBjb25zdCBhdCA9IGUuY3Vyc29yID8/IGRyYWZ0Lmxlbmd0aFxuICAgICAgICAgICAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGN0bC5pZFxuICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKHBhdGhzLm1hcChwYXRoID0+IGN0bC5hdHRhY2hJbWFnZShwYXRoKSkpLnRoZW4ocGxhY2Vob2xkZXJzID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChjdGwuaWQgIT09IHNlc3Npb25JZCB8fCBpbnB1dCgpICE9PSBkcmFmdCkgcmV0dXJuXG4gICAgICAgICAgICAgICAgICBzZXRJbnB1dChkcmFmdC5zbGljZSgwLCBhdCkgKyBwbGFjZWhvbGRlcnMuam9pbignICcpICsgZHJhZnQuc2xpY2UoYXQpKVxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVycm9yID0+IGZsYXNoKGVycm9yLm1lc3NhZ2UpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdiYWNrc3BhY2UnICYmIGUuY3Vyc29yID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaCA9IGUudmFsdWUuc2xpY2UoMCwgZS5jdXJzb3IpLm1hdGNoKC9cXFtJbWFnZSAjXFxkK1xcXSQvKVxuICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBjdGwuZGV0YWNoSW1hZ2UobWF0Y2hbMF0pXG4gICAgICAgICAgICAgICAgc2V0SW5wdXQoZS52YWx1ZS5zbGljZSgwLCBlLmN1cnNvciAtIG1hdGNoWzBdLmxlbmd0aCkgKyBlLnZhbHVlLnNsaWNlKGUuY3Vyc29yKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICd0YWInICYmICFlLmN0cmwgJiYgIWUubWV0YSkge1xuICAgICAgICAgICAgICBjb25zdCBjdHggPSBjb21wbGV0aW9uQ29udGV4dCh7IHZhbHVlOiBlLnZhbHVlLCByZXNvbHZlOiBjb21wbGV0aW9uU291cmNlIH0pXG4gICAgICAgICAgICAgIGlmICghY3R4KSByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgaWYgKCFjb21wbGV0aW5nKCkpIHtcbiAgICAgICAgICAgICAgICBzZXRDb21wbGV0aW5nKHRydWUpXG4gICAgICAgICAgICAgICAgc2V0Q29tcEluZGV4KDApXG4gICAgICAgICAgICAgICAgbGlzdEZpbGVzKGN3ZCkudGhlbigoZmlsZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChmaWxlcyAhPT0gZmlsZUxpc3QoKSkgc2V0RmlsZUxpc3QoZmlsZXMpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdHgubWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYWNjZXB0Q29tcGxldGlvbihlLnZhbHVlLCBjdHgsIGN0eC5tYXRjaGVzW01hdGgubWluKGNvbXBJbmRleCgpLCBjdHgubWF0Y2hlcy5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmN0cmwgfHwgZS5tZXRhIHx8IHNob3dDb21tYW5kcyB8fCBzaG93RmlsZXMpIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAndXAnICYmIGUudmFsdWUgPT09ICcnICYmIChleHBlZGl0ZWQoKS5sZW5ndGggPiAwIHx8IHF1ZXVlZCgpLmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgICAgIGN0bC5yZWNhbGxQZW5kaW5nKCkudGhlbihzZXRJbnB1dCkuY2F0Y2goZXJyb3IgPT4gZmxhc2goZXJyb3IubWVzc2FnZSkpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdyaWdodCcgJiYgZS52YWx1ZSA9PT0gJycgJiYgcXVldWVkKCkubGVuZ3RoID4gMCAmJiBidXN5KCkgJiYgIWNvbXBhY3RpbmcoKSkge1xuICAgICAgICAgICAgICBjdGwuZXhwZWRpdGVRdWV1ZWQoKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYnJvd3NpbmcgPSBoaXN0SWR4KCkgPj0gMFxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAndXAnICYmIChicm93c2luZyB8fCBlLnZhbHVlID09PSAnJykgJiYgaGlzdElkeCgpIDwgc2VudCgpLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgY29uc3QgbiA9IGhpc3RJZHgoKSArIDFcbiAgICAgICAgICAgICAgc2V0SGlzdElkeChuKVxuICAgICAgICAgICAgICBzZXRJbnB1dChzZW50KClbc2VudCgpLmxlbmd0aCAtIDEgLSBuXS50ZXh0KVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnZG93bicgJiYgYnJvd3NpbmcpIHtcbiAgICAgICAgICAgICAgY29uc3QgbiA9IGhpc3RJZHgoKSAtIDFcbiAgICAgICAgICAgICAgc2V0SGlzdElkeChuKVxuICAgICAgICAgICAgICBzZXRJbnB1dChuIDwgMCA/ICcnIDogc2VudCgpW3NlbnQoKS5sZW5ndGggLSAxIC0gbl0udGV4dClcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH19XG4gICAgICAgICAgc3VibWl0T25FbnRlclxuICAgICAgICAgIG5ld2xpbmVPbkJhY2tzbGFzaEVudGVyXG4gICAgICAgICAgY2xlYXJPblN1Ym1pdD17ZmFsc2V9XG4gICAgICAgICAgbWF4SGVpZ2h0PXs4fVxuICAgICAgICAgIGN1cnNvcj17eyBibGluazogdHJ1ZSwgYmc6IGFjY2VudCgpLCBjb2xvcjogJ2JsYWNrJyB9fVxuICAgICAgICAvPlxuICAgICAgPC9Nb3VzZUZvY3VzUmVnaW9uPn1cblxuICAgICAge3Nob3dDb21wb3NlckFjdGlvbnMgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBoZWlnaHQ6IDEsIG1hcmdpbkxlZnQ6IDEgfX0+XG4gICAgICAgICAgPENvbXBvc2VyQWN0aW9uXG4gICAgICAgICAgICBpY29uPVwiXHUyNUNCXCJcbiAgICAgICAgICAgIGFjdGl2ZUljb249XCJcdTI1Q0ZcIlxuICAgICAgICAgICAgYWN0aXZlPXtkaWN0YXRpb25TdGF0dXMoKSAhPT0gJ2lkbGUnfVxuICAgICAgICAgICAgb25Ib3Zlcj17KGhvdmVyZWQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGhvdmVyZWQpIHNldENvbXBvc2VyQWN0aW9uTGFiZWwoJ2NhcHR1cmUgYXVkaW8gKGN0cmwtZyknKVxuICAgICAgICAgICAgICBlbHNlIGlmIChjb21wb3NlckFjdGlvbkxhYmVsKCkgPT09ICdjYXB0dXJlIGF1ZGlvIChjdHJsLWcpJykgc2V0Q29tcG9zZXJBY3Rpb25MYWJlbCgnJylcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvblByZXNzPXsoKSA9PiBkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ3JlY29yZGluZydcbiAgICAgICAgICAgICAgPyB2b2lkIHJlZnMuZGljdGF0aW9uSW5wdXQuc3RvcCgpXG4gICAgICAgICAgICAgIDogcmVmcy5kaWN0YXRpb25JbnB1dC5zdGFydCh7IHZhbHVlOiBpbnB1dCgpLCBjdXJzb3I6IGlucHV0Q3Vyc29yKCkgfSl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8Q29tcG9zZXJBY3Rpb25cbiAgICAgICAgICAgIGljb249XCJcdTI1QTFcIlxuICAgICAgICAgICAgYWN0aXZlSWNvbj1cIlx1MjVBMFwiXG4gICAgICAgICAgICBhY3RpdmU9e2NhcHR1cmVTdGF0dXMoKSA9PT0gJ2NhcHR1cmluZyd9XG4gICAgICAgICAgICBvbkhvdmVyPXsoaG92ZXJlZCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaG92ZXJlZCkgc2V0Q29tcG9zZXJBY3Rpb25MYWJlbCgnY2FwdHVyZSBpbWFnZSAoY3RybC1vKScpXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBvc2VyQWN0aW9uTGFiZWwoKSA9PT0gJ2NhcHR1cmUgaW1hZ2UgKGN0cmwtbyknKSBzZXRDb21wb3NlckFjdGlvbkxhYmVsKCcnKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IHZvaWQgcmVmcy5jYXB0dXJlSW1hZ2UoKX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtkaWN0YXRpb25TdGF0dXMoKSAhPT0gJ2lkbGUnICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2RpY3RhdGlvbkluZGljYXRvcihkaWN0YXRpb25TdGF0dXMoKSwgZGljdGF0aW9uTGV2ZWxzKCkpfTwvdGV4dD59XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ3JlY29yZGluZycgPyAnZXNjIGNhbmNlbCAgZW50ZXIgY29uZmlybScgOiBjYXB0dXJlU3RhdHVzKCkgPT09ICdjYXB0dXJpbmcnID8gJyBlc2MgY2FuY2VsJyA6IGNvbXBvc2VyQWN0aW9uTGFiZWwoKSA/IGAgJHtjb21wb3NlckFjdGlvbkxhYmVsKCl9YCA6ICcnfTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7c2hvd0NvbW1hbmRzICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiA2LCBtaW5IZWlnaHQ6IDYsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAge21hdGNoZWRDb21tYW5kcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gbWF0Y2hpbmcgY29tbWFuZHM8L3RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxNZW51XG4gICAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgICAgaXRlbXM9e21hdGNoZWRDb21tYW5kc31cbiAgICAgICAgICAgICAgc2VsZWN0ZWQ9e2NtZEluZGV4KCl9XG4gICAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRDbWRJbmRleH1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9eyhjKSA9PiBydW5Db21tYW5kKGMpfVxuICAgICAgICAgICAgICBmb2N1c2VkPXtzaG93Q29tbWFuZHMgJiYgZGljdGF0aW9uU3RhdHVzKCkgPT09ICdpZGxlJ31cbiAgICAgICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICAgICAgc2Nyb2xsb2ZmPXsyfVxuICAgICAgICAgICAgICByZW5kZXJJdGVtPXsoYywgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+e2AvJHtjLm5hbWV9YC5wYWRFbmQobWF0Y2hlZENvbW1hbmRzLnJlZHVjZSgobSwgeCkgPT4gTWF0aC5tYXgobSwgeC5uYW1lLmxlbmd0aCArIDMpLCAxMikpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBGRyA6IE1VVEVEIH19PntjLmRlc2N9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93RmlsZXMgJiYgbWF0Y2hlZEZpbGVzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6IDYsIG1pbkhlaWdodDogNiwgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICA8TWVudVxuICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgaXRlbXM9e21hdGNoZWRGaWxlc31cbiAgICAgICAgICAgIHNlbGVjdGVkPXtmaWxlSW5kZXgoKX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRGaWxlSW5kZXh9XG4gICAgICAgICAgICBvblN1Ym1pdD17cGlja0ZpbGV9XG4gICAgICAgICAgICBvbkNhbmNlbD17KCkgPT4gc2V0RmlsZXNEaXNtaXNzZWQodHJ1ZSl9XG4gICAgICAgICAgICBmb2N1c2VkPXtzaG93RmlsZXMgJiYgZGljdGF0aW9uU3RhdHVzKCkgPT09ICdpZGxlJ31cbiAgICAgICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgICAgICBzY3JvbGxvZmY9ezJ9XG4gICAgICAgICAgICByZW5kZXJJdGVtPXsoZiwgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkdfU09GVCB9fT57Zn08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93Q29tcGxldGlvbiAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogNiwgbWluSGVpZ2h0OiA2LCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDxNZW51XG4gICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICBpdGVtcz17Y29tcEN0eC5tYXRjaGVzfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9e2NvbXBJbmRleCgpfVxuICAgICAgICAgICAgb25TZWxlY3Q9e3NldENvbXBJbmRleH1cbiAgICAgICAgICAgIG9uU3VibWl0PXsoY2FuZGlkYXRlKSA9PiBhY2NlcHRDb21wbGV0aW9uKGlucHV0KCksIGNvbXBDdHgsIGNhbmRpZGF0ZSl9XG4gICAgICAgICAgICBvbkNhbmNlbD17ZGlzbWlzc0NvbXBsZXRpb259XG4gICAgICAgICAgICBmb2N1c2VkPXtzaG93Q29tcGxldGlvbiAmJiBkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ2lkbGUnfVxuICAgICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICAgIHNjcm9sbG9mZj17Mn1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyhjYW5kaWRhdGUsIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHX1NPRlQgfX0+e2NhbmRpZGF0ZX08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgICA8L2JveD5cblxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgd2lkdGg6IHdpZGVMYXlvdXQgPyA2NCA6IHVuZGVmaW5lZCwgaGVpZ2h0OiB3aWRlTGF5b3V0ID8gJzEwMCUnIDogdW5kZWZpbmVkIH19PlxuICAgICAge3Nob3dNb2RlbFBhbmVsKCkgJiYgKFxuICAgICAgICA8TW9kZWxQYW5lbFxuICAgICAgICAgIG1vZGVscz17bW9kZWxzKCl9XG4gICAgICAgICAgY3VycmVudD17bW9kZWwoKS5uYW1lfVxuICAgICAgICAgIGRlZmF1bHROYW1lPXtkZWZhdWx0TW9kZWwoKS5uYW1lfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dNb2RlbFBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXthc3luYyAobSkgPT4ge1xuICAgICAgICAgICAgaWYgKGF3YWl0IGN0bC5zd2l0Y2hNb2RlbChtKSkgc2V0U2hvd01vZGVsUGFuZWwoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblBpY2tEZWZhdWx0PXthc3luYyAobSkgPT4ge1xuICAgICAgICAgICAgaWYgKGF3YWl0IGN0bC5zd2l0Y2hNb2RlbChtLCB7IGFzRGVmYXVsdDogdHJ1ZSB9KSkgc2V0U2hvd01vZGVsUGFuZWwoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93TW9kZWxQYW5lbChmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCgpICYmIChcbiAgICAgICAgPE1vZGVsUGFuZWxcbiAgICAgICAgICBtb2RlbHM9e21vZGVscygpLmZpbHRlcigobSkgPT4gbS5hdmFpbGFibGUgIT09IGZhbHNlKX1cbiAgICAgICAgICBjdXJyZW50PXtwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KCkgPyBib290W2Ake3BhcnRpY2lwYW50TW9kZWxUYXJnZXQoKX1Nb2RlbGBdIDogc2VsZWN0aW5nU2hlbGxNb2RlbCgpID8gYm9vdC5zaGVsbE1vZGVsIDogc2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoKSA/IGJvb3QuZGVsaWJlcmF0aW9uTW9kZWwgOiBib290LnJlc2VhcmNoTW9kZWx9XG4gICAgICAgICAgZGVmYXVsdE5hbWU9e251bGx9XG4gICAgICAgICAgdGl0bGU9e3BhcnRpY2lwYW50TW9kZWxUYXJnZXQoKSA/IGBDaG9vc2UgUGFydGljaXBhbnQgJHtwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KCkgPT09ICdwYXJ0aWNpcGFudEEnID8gJ0EnIDogJ0InfSBtb2RlbGAgOiBzZWxlY3RpbmdTaGVsbE1vZGVsKCkgPyAnQ2hvb3NlIHNoZWxsIG1vZGVsJyA6IHNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKCkgPyAnQ2hvb3NlIHN5bnRoZXNpcyBtb2RlbCcgOiAnQ2hvb3NlIHBhcmFsbGVsIHdvcmtlciBtb2RlbCd9XG4gICAgICAgICAgaGludD1cImVudGVyOiBzYXZlIG1vZGVsICBlc2M6IGNhbmNlbFwiXG4gICAgICAgICAgZm9jdXNlZD17c2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCgpfVxuICAgICAgICAgIG9uUGljaz17KG0pID0+IHtcbiAgICAgICAgICAgIGlmIChwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gcGFydGljaXBhbnRNb2RlbFRhcmdldCgpID09PSAncGFydGljaXBhbnRBJyA/ICdzZXRQYXJ0aWNpcGFudEFNb2RlbCcgOiAnc2V0UGFydGljaXBhbnRCTW9kZWwnXG4gICAgICAgICAgICAgIGN0bFttZXRob2RdKG0ubmFtZSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW5nU2hlbGxNb2RlbCgpKSB7XG4gICAgICAgICAgICAgIGN0bC5zZXRTaGVsbE1vZGVsKG0ubmFtZSlcbiAgICAgICAgICAgICAgZmxhc2goYHNoZWxsOiAke20ubmFtZX1gKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCgpKSB7XG4gICAgICAgICAgICAgIGJvb3QuZGVsaWJlcmF0aW9uTW9kZWwgPSBtLm5hbWVcbiAgICAgICAgICAgICAgY3RsLmNvbmZpZ3VyZT8uKHsgZGVsaWJlcmF0aW9uTW9kZWw6IG0ubmFtZSB9KVxuICAgICAgICAgICAgICB3cml0ZUNvbmZpZyh7IG1vZGVsczogeyBkZWxpYmVyYXRpb246IG0ubmFtZSB9IH0pLmNhdGNoKCgpID0+IHt9KVxuICAgICAgICAgICAgICBmbGFzaChgZGVsaWJlcmF0aW9uOiAke20ubmFtZX1gKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYm9vdC5yZXNlYXJjaE1vZGVsID0gbS5uYW1lXG4gICAgICAgICAgICAgIGN0bC5jb25maWd1cmU/Lih7IHJlc2VhcmNoTW9kZWw6IG0ubmFtZSB9KVxuICAgICAgICAgICAgICB3cml0ZUNvbmZpZyh7IG1vZGVsczogeyByZXNlYXJjaFdvcmtlcjogbS5uYW1lIH0gfSkuY2F0Y2goKCkgPT4ge30pXG4gICAgICAgICAgICAgIGZsYXNoKGBwYXJhbGxlbCB3b3JrZXJzOiAke20ubmFtZX1gKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0UGFydGljaXBhbnRNb2RlbFRhcmdldChudWxsKVxuICAgICAgICAgICAgc2V0U2VsZWN0aW5nU2hlbGxNb2RlbChmYWxzZSlcbiAgICAgICAgICAgIHNldFNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKGZhbHNlKVxuICAgICAgICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbChmYWxzZSlcbiAgICAgICAgICAgIGNvbnN0IHBlbmRpbmcgPSBwZW5kaW5nUmVzZWFyY2goKVxuICAgICAgICAgICAgY29uc3QgcGVuZGluZ0RlY2lzaW9uID0gcGVuZGluZ0RlbGliZXJhdGlvbigpXG4gICAgICAgICAgICBjb25zdCByZXR1cm5UbyA9IHJlc2VhcmNoTW9kZWxSZXR1cm4oKVxuICAgICAgICAgICAgc2V0UGVuZGluZ1Jlc2VhcmNoKG51bGwpXG4gICAgICAgICAgICBzZXRQZW5kaW5nRGVsaWJlcmF0aW9uKG51bGwpXG4gICAgICAgICAgICBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuKG51bGwpXG4gICAgICAgICAgICBpZiAocGVuZGluZykgcnVuQ29tbWFuZCh7IG5hbWU6ICdwYXJhbGxlbCcgfSwgcGVuZGluZy50YXNrKVxuICAgICAgICAgICAgZWxzZSBpZiAocGVuZGluZ0RlY2lzaW9uKSBydW5Db21tYW5kKHsgbmFtZTogJ2RlbGliZXJhdGUnIH0sIHBlbmRpbmdEZWNpc2lvbi5kZWNpc2lvbilcbiAgICAgICAgICAgIGVsc2UgaWYgKHJldHVyblRvID09PSAnY29uZmlnJykgc2V0U2hvd0NvbmZpZ1BhbmVsKHRydWUpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblBpY2tEZWZhdWx0PXsoKSA9PiB7fX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB7XG4gICAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKGZhbHNlKVxuICAgICAgICAgICAgc2V0UGFydGljaXBhbnRNb2RlbFRhcmdldChudWxsKVxuICAgICAgICAgICAgc2V0U2VsZWN0aW5nU2hlbGxNb2RlbChmYWxzZSlcbiAgICAgICAgICAgIHNldFNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKGZhbHNlKVxuICAgICAgICAgICAgc2V0UGVuZGluZ1Jlc2VhcmNoKG51bGwpXG4gICAgICAgICAgICBzZXRQZW5kaW5nRGVsaWJlcmF0aW9uKG51bGwpXG4gICAgICAgICAgICBpZiAocmVzZWFyY2hNb2RlbFJldHVybigpID09PSAnY29uZmlnJykgc2V0U2hvd0NvbmZpZ1BhbmVsKHRydWUpXG4gICAgICAgICAgICBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuKG51bGwpXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93U3BlZWRQYW5lbCgpICYmIChcbiAgICAgICAgPFNwZWVkUGFuZWxcbiAgICAgICAgICBsZXZlbHM9e1NQRUVEX0xFVkVMU31cbiAgICAgICAgICBjdXJyZW50PXtzcGVlZCgpfVxuICAgICAgICAgIGRlZmF1bHRMZXZlbD17c3BlZWREZWZhdWx0cygpW21vZGVsKCkubmFtZV0gPz8gJ3N0YW5kYXJkJ31cbiAgICAgICAgICBmb2N1c2VkPXtzaG93U3BlZWRQYW5lbCgpfVxuICAgICAgICAgIG9uUGljaz17KGwpID0+IHtcbiAgICAgICAgICAgIGN0bC5hcHBseVNwZWVkKGwua2V5KVxuICAgICAgICAgICAgc2V0U2hvd1NwZWVkUGFuZWwoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblBpY2tEZWZhdWx0PXsobCkgPT4ge1xuICAgICAgICAgICAgY3RsLmFwcGx5U3BlZWQobC5rZXksIHsgYXNEZWZhdWx0OiB0cnVlIH0pXG4gICAgICAgICAgICBzZXRTaG93U3BlZWRQYW5lbChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dTcGVlZFBhbmVsKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93RWZmb3J0UGFuZWwoKSAmJiAoXG4gICAgICAgIDxFZmZvcnRQYW5lbFxuICAgICAgICAgIGxldmVscz17RUZGT1JUX0xFVkVMU31cbiAgICAgICAgICBjdXJyZW50PXtlZmZvcnQoKSA/PyBudWxsfVxuICAgICAgICAgIGRlZmF1bHRMZXZlbD17ZGVmYXVsdEVmZm9ydCgpID8/IG51bGx9XG4gICAgICAgICAgZm9jdXNlZD17c2hvd0VmZm9ydFBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsobCkgPT4ge1xuICAgICAgICAgICAgc2V0U2Vzc2lvbkVmZm9ydChsLmtleSlcbiAgICAgICAgICAgIHNldFNob3dFZmZvcnRQYW5lbChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUGlja0RlZmF1bHQ9eyhsKSA9PiB7XG4gICAgICAgICAgICBzZXRTZXNzaW9uRWZmb3J0KGwua2V5LCB7IGFzRGVmYXVsdDogdHJ1ZSB9KVxuICAgICAgICAgICAgc2V0U2hvd0VmZm9ydFBhbmVsKGZhbHNlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd0VmZm9ydFBhbmVsKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93VGhlbWVQYW5lbCgpICYmIChcbiAgICAgICAgPFRoZW1lUGFuZWxcbiAgICAgICAgICB0aGVtZXM9e3RoZW1lSXRlbXMoKX1cbiAgICAgICAgICBwcmVmPXt0aGVtZVByZWYoKX1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93VGhlbWVQYW5lbCgpfVxuICAgICAgICAgIG9uUGljaz17KHQpID0+IHtcbiAgICAgICAgICAgIHNldFNob3dUaGVtZVBhbmVsKGZhbHNlKVxuICAgICAgICAgICAgYXBwbHlUaGVtZVByZWYodC5rZXkpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblByZXZpZXc9eyh0KSA9PiBwcmV2aWV3UGFsZXR0ZSh0LmtleSl9XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4ge1xuICAgICAgICAgICAgc2V0U2hvd1RoZW1lUGFuZWwoZmFsc2UpXG4gICAgICAgICAgICBwcmV2aWV3UGFsZXR0ZSh0aGVtZVByZWYoKSlcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dEZWxldGVDb25maXJtKCkgJiYgKFxuICAgICAgICA8Q29uZmlybVBhbmVsXG4gICAgICAgICAgdGl0bGU9XCJEZWxldGUgY3VycmVudCBzZXNzaW9uP1wiXG4gICAgICAgICAgbWVzc2FnZT1cIlRoZSBjdXJyZW50IGNvbnZlcnNhdGlvbiBhbmQgaXRzIHBlcnNpc3RlZCBoaXN0b3J5IHdpbGwgYmUgcGVybWFuZW50bHkgZGVsZXRlZC5cIlxuICAgICAgICAgIGNvbmZpcm1MYWJlbD1cIkRlbGV0ZVwiXG4gICAgICAgICAgZm9jdXNlZD17c2hvd0RlbGV0ZUNvbmZpcm0oKX1cbiAgICAgICAgICBvbkNvbmZpcm09e2NvbmZpcm1EZWxldGVDdXJyZW50U2Vzc2lvbn1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93RGVsZXRlQ29uZmlybShmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd0hpc3RvcnlQYW5lbCgpICYmIChcbiAgICAgICAgPEhpc3RvcnlQYW5lbFxuICAgICAgICAgIHByb21wdHM9e2hpc3RQcm9tcHRzKCl9XG4gICAgICAgICAgc2NvcGVzPXtISVNUT1JZX1NDT1BFU31cbiAgICAgICAgICBzY29wZUluZGV4PXtoaXN0U2NvcGUoKX1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93SGlzdG9yeVBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsodGV4dCkgPT4geyBzZXRJbnB1dCh0ZXh0KTsgc2V0U2hvd0hpc3RvcnlQYW5lbChmYWxzZSkgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93SGlzdG9yeVBhbmVsKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtpbmZvUGFuZWwoKSAmJiAoXG4gICAgICAgIDxJbmZvTGlzdFBhbmVsXG4gICAgICAgICAgdGl0bGU9e2luZm9QYW5lbCgpLnRpdGxlfVxuICAgICAgICAgIHJvd3M9e2luZm9QYW5lbCgpLnJvd3N9XG4gICAgICAgICAgb3ZlcnZpZXc9e2luZm9QYW5lbCgpLm92ZXJ2aWV3fVxuICAgICAgICAgIGZvY3VzZWQ9e2luZm9QYW5lbCgpICE9PSBudWxsfVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldEluZm9QYW5lbChudWxsKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93Q29ubmVjdFBhbmVsKCkgJiYgKFxuICAgICAgICA8Q29ubmVjdFBhbmVsXG4gICAgICAgICAgcHJvdmlkZXJzPXthdXRoUHJvdmlkZXJzKCl9XG4gICAgICAgICAgZm9jdXNlZD17c2hvd0Nvbm5lY3RQYW5lbCgpfVxuICAgICAgICAgIG9uQ29ubmVjdD17Y29ubmVjdFByb3ZpZGVyfVxuICAgICAgICAgIG9uRGlzY29ubmVjdD17ZGlzY29ubmVjdFByb3ZpZGVyfVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dDb25uZWN0UGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dXYWtldXBzUGFuZWwoKSAmJiAoXG4gICAgICAgIDxXYWtldXBzUGFuZWxcbiAgICAgICAgICB3YWtldXBzPXsoc2hlbGxzVmVyc2lvbigpLCBib290Lndha2V1cHMubGlzdCgpKX1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93V2FrZXVwc1BhbmVsKCl9XG4gICAgICAgICAgb25DYW5jZWw9eyh3KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcm1lZCA9IHJlZnMud2FrZXVwQ2FuY2VsQXJtXG4gICAgICAgICAgICBpZiAoIWFybWVkIHx8IGFybWVkLmlkICE9PSB3LmlkIHx8IERhdGUubm93KCkgLSBhcm1lZC5hdCA+IDMwMDApIHtcbiAgICAgICAgICAgICAgcmVmcy53YWtldXBDYW5jZWxBcm0gPSB7IGlkOiB3LmlkLCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICAgICAgICAgIHJldHVybiBmbGFzaChgYWdhaW4gdG8gY2FuY2VsIHdha2UtdXAgJHt3LmlkfSAoJHt3Lm5vdGUuc3BsaXQoJ1xcbicpWzBdLnNsaWNlKDAsIDQwKX0pYClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZnMud2FrZXVwQ2FuY2VsQXJtID0gbnVsbFxuICAgICAgICAgICAgY3RsLmNhbmNlbFdha2V1cCh3KVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd1dha2V1cHNQYW5lbChmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7cmV3aW5kU3RlcCgpID09PSAncGljaycgJiYgKFxuICAgICAgICA8UmV3aW5kUGlja1BhbmVsXG4gICAgICAgICAgZW50cmllcz17Wy4uLnJld2luZEVudHJpZXMoKV0ucmV2ZXJzZSgpfVxuICAgICAgICAgIHN0YXRzPXsoaW5kZXgpID0+IHJld2luZFN0YXRzKGRlcml2ZWQoKSwgaW5kZXgpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Jld2luZFN0ZXAoKSA9PT0gJ3BpY2snfVxuICAgICAgICAgIG9uUGljaz17KGVudHJ5KSA9PiB7IHNldFJld2luZFRhcmdldChlbnRyeSk7IHNldFJld2luZFN0ZXAoJ2FjdGlvbicpIH19XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0UmV3aW5kU3RlcChudWxsKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtyZXdpbmRTdGVwKCkgPT09ICdhY3Rpb24nICYmIHJld2luZFRhcmdldCgpICYmIChcbiAgICAgICAgPFJld2luZEFjdGlvblBhbmVsXG4gICAgICAgICAgdGFyZ2V0PXtyZXdpbmRUYXJnZXQoKX1cbiAgICAgICAgICBvcHRpb25zPXtyZXdpbmRPcHRpb25zfVxuICAgICAgICAgIGZvY3VzZWQ9e3Jld2luZFN0ZXAoKSA9PT0gJ2FjdGlvbid9XG4gICAgICAgICAgb25TdWJtaXQ9e3BlcmZvcm1SZXdpbmR9XG4gICAgICAgICAgb25CYWNrPXsoKSA9PiBzZXRSZXdpbmRTdGVwKCdwaWNrJyl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7Y29tYmluZWRBY3Rpdml0eSAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgPEFnZW50U3RyaXBSb3cgc2VsZWN0ZWQ9eyF2aWV3ZWRTaGVsbCAmJiAhdmlld2VkQWdlbnR9IGZvY3VzZWQ9e2ZtLmN1cnJlbnQoKSA9PT0gJ2FjdGl2aXR5LW1haW4nfSBvblByZXNzPXsoKSA9PiB7IGZtLmZvY3VzKCdhY3Rpdml0eS1tYWluJyk7IHNldFZpZXdlZFNoZWxsSWQobnVsbCk7IHNldFZpZXdlZEFnZW50SWQobnVsbCk7IHNldEZvbGxvdyh0cnVlKTsgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVykgfX0+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnYWN0aXZpdHktbWFpbicgPyAnYmxhY2snIDogYWNjZW50KCkgfX0+eydcdTI1Q0YgJ308L3RleHQ+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnYWN0aXZpdHktbWFpbicgPyAnYmxhY2snIDogIXZpZXdlZFNoZWxsICYmICF2aWV3ZWRBZ2VudCA/IEZHIDogTVVURUQgfX0+eydtYWluJ308L3RleHQ+XG4gICAgICAgICAgPC9BZ2VudFN0cmlwUm93PlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHt2aXNpYmxlU2hlbGxzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiBjb21iaW5lZEFjdGl2aXR5IHx8IHNob3dDb21wb3NlckFjdGlvbnMgPyAwIDogMSB9fT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7c2hlbGxBY3Rpb25IaW50ID8gYCR7c2hlbGxBY3Rpb25IaW50fSAgYCA6ICcnfWovayBtb3ZlYH08L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgeyFjb21iaW5lZEFjdGl2aXR5ICYmIChcbiAgICAgICAgICAgIDxBZ2VudFN0cmlwUm93IHNlbGVjdGVkPXshdmlld2VkU2hlbGx9IGZvY3VzZWQ9e2ZtLmN1cnJlbnQoKSA9PT0gJ3NoZWxsLW1haW4nfSBvblByZXNzPXsoKSA9PiB7IGZtLmZvY3VzKCdzaGVsbC1tYWluJyk7IHNldFZpZXdlZFNoZWxsSWQobnVsbCk7IHNldFZpZXdlZEFnZW50SWQobnVsbCk7IHNldEZvbGxvdyh0cnVlKSB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmN1cnJlbnQoKSA9PT0gJ3NoZWxsLW1haW4nID8gJ2JsYWNrJyA6IGFjY2VudCgpIH19PnsnXHUyNUNGICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnc2hlbGwtbWFpbicgPyAnYmxhY2snIDogIXZpZXdlZFNoZWxsID8gRkcgOiBNVVRFRCB9fT57J21haW4nfTwvdGV4dD5cbiAgICAgICAgICAgIDwvQWdlbnRTdHJpcFJvdz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtzaGVsbFdpbmRvdy5tYXAoKHMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzZWQgPSBmbS5jdXJyZW50KCkgPT09IGBzaGVsbC0ke3MuaWR9YFxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB2aWV3ZWRTaGVsbElkKCkgPT09IHMuaWRcbiAgICAgICAgICAgIGNvbnN0IGVsYXBzZWQgPSBhZ2VudEVsYXBzZWQoeyBzdGFydGVkQXQ6IHMuc3RhcnRlZEF0LCBlbmRlZEF0OiBzLmVuZGVkQXQgfSlcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxBZ2VudFN0cmlwUm93IGtleT17YHNoZWxsLSR7cy5pZH1gfSBzZWxlY3RlZD17c2VsZWN0ZWR9IGZvY3VzZWQ9e2ZvY3VzZWR9IG9uUHJlc3M9eygpID0+IHsgZm0uZm9jdXMoYHNoZWxsLSR7cy5pZH1gKTsgc2V0Vmlld2VkU2hlbGxJZChzLmlkKTsgc2V0Vmlld2VkQWdlbnRJZChudWxsKTsgc2V0Rm9sbG93KHRydWUpIH19PlxuICAgICAgICAgICAgICAgIHtzLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8gPFNwaW5uZXIgY29sb3I9e2ZvY3VzZWQgPyAnYmxhY2snIDogYWNjZW50KCl9IHZhcmlhbnQ9XCJkb3RzXCIgLz4gOiA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBzLmV4aXRDb2RlID09PSAwID8gR1JFRU4gOiBSRUQgfX0+e3MuZXhpdENvZGUgPT09IDAgPyAnXHUyNUNGJyA6ICdcdTAwRDcnfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgPHRleHQ+eycgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogc2VsZWN0ZWQgPyBGRyA6IE1VVEVEIH19Pntgc2hlbGwgWyR7cy5pZH1dICBgfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e3MuZGVzY3JpcHRpb24gfHwgcy5jb21tYW5kLnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAgJHtzLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8gJycgOiBgZXhpdCAke3MuZXhpdENvZGV9ICBgfSR7ZWxhcHNlZH1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9BZ2VudFN0cmlwUm93PlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pfVxuICAgICAgICAgIHt2aXNpYmxlU2hlbGxzLmxlbmd0aCA+IFNIRUxMX1NUUklQX01BWCAmJiAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICR7c2hlbGxXaW5kb3dTdGFydCA+IDAgPyBgXHUyMTkxICR7c2hlbGxXaW5kb3dTdGFydH1gIDogJyd9JHtzaGVsbFdpbmRvd1N0YXJ0ID4gMCAmJiBzaGVsbFdpbmRvd1N0YXJ0ICsgc2hlbGxXaW5kb3cubGVuZ3RoIDwgdmlzaWJsZVNoZWxscy5sZW5ndGggPyAnICAnIDogJyd9JHtzaGVsbFdpbmRvd1N0YXJ0ICsgc2hlbGxXaW5kb3cubGVuZ3RoIDwgdmlzaWJsZVNoZWxscy5sZW5ndGggPyBgXHUyMTkzICR7dmlzaWJsZVNoZWxscy5sZW5ndGggLSBzaGVsbFdpbmRvd1N0YXJ0IC0gc2hlbGxXaW5kb3cubGVuZ3RofWAgOiAnJ30gbW9yZWB9PC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3Zpc2libGVBZ2VudHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IGNvbWJpbmVkQWN0aXZpdHkgfHwgc2hvd0NvbXBvc2VyQWN0aW9ucyA/IDAgOiAxIH19PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHthZ2VudEFjdGlvbkhpbnQgPyBgJHthZ2VudEFjdGlvbkhpbnR9ICBgIDogJyd9ai9rIG1vdmVgfTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgICB7IWNvbWJpbmVkQWN0aXZpdHkgJiYgKFxuICAgICAgICAgICAgPEFnZW50U3RyaXBSb3cgc2VsZWN0ZWQ9eyF2aWV3ZWRBZ2VudH0gZm9jdXNlZD17Zm0uY3VycmVudCgpID09PSAnYWdlbnQtbWFpbid9IG9uUHJlc3M9eygpID0+IHsgZm0uZm9jdXMoJ2FnZW50LW1haW4nKTsgc2V0Vmlld2VkU2hlbGxJZChudWxsKTsgc2V0Vmlld2VkQWdlbnRJZChudWxsKTsgc2V0Rm9sbG93KHRydWUpOyBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKSB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmN1cnJlbnQoKSA9PT0gJ2FnZW50LW1haW4nID8gJ2JsYWNrJyA6IGFjY2VudCgpIH19PnsnXHUyNUNGICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnYWdlbnQtbWFpbicgPyAnYmxhY2snIDogIXZpZXdlZEFnZW50ID8gRkcgOiBNVVRFRCB9fT57J21haW4nfTwvdGV4dD5cbiAgICAgICAgICAgIDwvQWdlbnRTdHJpcFJvdz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHthZ2VudFdpbmRvdy5tYXAoKGEpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGFnZW50U3RhdHVzKGEpXG4gICAgICAgICAgICBjb25zdCBmb2N1c2VkID0gZm0uY3VycmVudCgpID09PSBgYWdlbnQtJHthLmlkfWBcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxBZ2VudFN0cmlwUm93IGtleT17YGFnZW50LSR7YS5pZH1gfSBzZWxlY3RlZD17dmlld2VkQWdlbnRJZCgpID09PSBhLmlkfSBmb2N1c2VkPXtmb2N1c2VkfSBvblByZXNzPXsoKSA9PiB7IGZtLmZvY3VzKGBhZ2VudC0ke2EuaWR9YCk7IHNldFZpZXdlZFNoZWxsSWQobnVsbCk7IHNldFZpZXdlZEFnZW50SWQoYS5pZCk7IHNldEZvbGxvdyh0cnVlKTsgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVykgfX0+XG4gICAgICAgICAgICAgICAge2Euc3RhdHVzID09PSAncnVubmluZycgPyA8U3Bpbm5lciBjb2xvcj17Zm9jdXNlZCA/ICdibGFjaycgOiBhY2NlbnQoKX0gdmFyaWFudD1cImRvdHNcIiAvPiA6IDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IHN0YXR1cy5jb2xvciB9fT57c3RhdHVzLmljb259PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICA8dGV4dD57JyAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiB2aWV3ZWRBZ2VudElkKCkgPT09IGEuaWQgPyBGRyA6IE1VVEVEIH19PntgJHthLnJvbGUgfHwgJ2FnZW50J30gWyR7YS5pZH1dICBgfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2EuZGVzY3JpcHRpb259PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIHtzdGF0dXMubGFiZWwgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogc3RhdHVzLmNvbG9yIH19PntgICAke3N0YXR1cy5sYWJlbH1gfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2Ake3N0YXR1cy5sYWJlbCA/ICcgICcgOiAnICAnfSAke2FnZW50RWxhcHNlZChhKX0gIFx1MjE5MyBgfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17YS51c2FnZT8udG90YWxUb2tlbnMgfHwgYS51c2FnZT8ucHJvbXB0VG9rZW5zIHx8IDB9IGNvbG9yPXtmb2N1c2VkID8gJ2JsYWNrJyA6IE1VVEVEfSBoaWdobGlnaHQ9e2ZvY3VzZWQgPyAnYmxhY2snIDogYWNjZW50KCl9IGZvcm1hdD17KG4pID0+IGAke2NvbXBhY3ROdW1iZXIobil9IHRva2Vuc2B9IC8+XG4gICAgICAgICAgICAgIDwvQWdlbnRTdHJpcFJvdz5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KX1cbiAgICAgICAgICB7dmlzaWJsZUFnZW50cy5sZW5ndGggPiBBR0VOVF9TVFJJUF9NQVggJiYgKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke2FnZW50V2luZG93U3RhcnQgPiAwID8gYFx1MjE5MSAke2FnZW50V2luZG93U3RhcnR9YCA6ICcnfSR7YWdlbnRXaW5kb3dTdGFydCA+IDAgJiYgYWdlbnRXaW5kb3dTdGFydCArIGFnZW50V2luZG93Lmxlbmd0aCA8IHZpc2libGVBZ2VudHMubGVuZ3RoID8gJyAgJyA6ICcnfSR7YWdlbnRXaW5kb3dTdGFydCArIGFnZW50V2luZG93Lmxlbmd0aCA8IHZpc2libGVBZ2VudHMubGVuZ3RoID8gYFx1MjE5MyAke3Zpc2libGVBZ2VudHMubGVuZ3RoIC0gYWdlbnRXaW5kb3dTdGFydCAtIGFnZW50V2luZG93Lmxlbmd0aH1gIDogJyd9IG1vcmVgfTwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHt3aWRlTGF5b3V0ICYmIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz59XG5cbiAgICAgIHt3aWRlTGF5b3V0ID8gKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgcGFkZGluZ1RvcDogMSB9fT5cbiAgICAgICAgICB7YnVzeSgpICYmIChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICA8U2hpbW1lciBjb2xvcj17YWNjZW50KCl9IGhpZ2hsaWdodD17SElHSExJR0hUfSBkdXJhdGlvbj17MTUwMH0gcmV2ZXJzZT5cbiAgICAgICAgICAgICAgICAgIHtjb21wYWN0aW5nKClcbiAgICAgICAgICAgICAgICAgICAgPyBjb21wYWN0U3RhdHVzKCk/LnBoYXNlID09PSAnd3JpdGluZycgPyBgQ29tcGFjdGluZyAgd3JpdGluZyAke2NvbXBhY3RTdGF0dXMoKS5zZWN0aW9ufS84YCA6ICdDb21wYWN0aW5nICBhbmFseXppbmcnXG4gICAgICAgICAgICAgICAgICAgIDogdHVyblBoYXNlKCkgPT09ICd0aGlua2luZycgPyAnVGhpbmtpbmcnIDogdHVyblBoYXNlKCkgPT09ICd0b29scycgPyAnV29ya2luZycgOiAnUmVzcG9uZGluZyd9XG4gICAgICAgICAgICAgICAgPC9TaGltbWVyPlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgJHtlbGFwc2VkfSAgZXNjIHRvIGludGVycnVwdGB9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAge2NvbXBhY3RTdGF0dXMoKT8ucGhhc2UgPT09ICd3cml0aW5nJyAmJiA8UHJvZ3Jlc3NCYXIgdmFyaWFudD1cInRoaW5cIiB2YWx1ZT17Y29tcGFjdFN0YXR1cygpLnNlY3Rpb24gLyA4fSB3aWR0aD17MzB9IHBlcmNlbnRhZ2U9e2ZhbHNlfSBjb2xvcj17YWNjZW50KCl9IC8+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7Z2l0SW5mbz8uYnJhbmNoICYmIChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQsIGJvbGQ6IHRydWUgfX0+eydSZXBvc2l0b3J5J308L3RleHQ+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnQnJhbmNoICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2dpdEluZm8uYnJhbmNofTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnQ2hhbmdlcyAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICB7Z2l0SW5mby5hZGRlZCA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEdSRUVOIH19PntgJHtnaXRJbmZvLmFkZGVkfSBhZGRlZGB9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICB7Z2l0SW5mby5hZGRlZCA+IDAgJiYgZ2l0SW5mby5yZW1vdmVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eycgICd9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICB7Z2l0SW5mby5yZW1vdmVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogUkVEIH19PntgJHtnaXRJbmZvLnJlbW92ZWR9IHJlbW92ZWRgfTwvdGV4dD59XG4gICAgICAgICAgICAgICAge2dpdEluZm8uYWRkZWQgPT09IDAgJiYgZ2l0SW5mby5yZW1vdmVkID09PSAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J2NsZWFuJ308L3RleHQ+fVxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICl9XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBib2xkOiB0cnVlIH19PnsnU2Vzc2lvbid9PC90ZXh0PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydEaXJlY3RvcnkgICAgICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2Jvb3QuZGlzcGxheUN3ZH08L3RleHQ+PC9ib3g+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J01vZGVsICAgICAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57bW9kZWwoKS5uYW1lfTwvdGV4dD57c3BlZWRBcHBsaWVzKCkgJiYgc3BlZWQoKSA9PT0gJ2Zhc3QnICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57JyBGYXN0J308L3RleHQ+fTwvYm94PlxuICAgICAgICAgICAge2VmZm9ydEFwcGxpZXMoKSAmJiBlZmZvcnQoKSAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J0VmZm9ydCAgICAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntlZmZvcnQoKX08L3RleHQ+PC9ib3g+fVxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydJbnB1dCB0b2tlbnMgICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57TWF0aC5yb3VuZCh1c2FnZS5wcm9tcHRUb2tlbnMpLnRvTG9jYWxlU3RyaW5nKCl9PC90ZXh0PjwvYm94PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydPdXRwdXQgdG9rZW5zICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57TWF0aC5yb3VuZCh1c2FnZS5jb21wbGV0aW9uVG9rZW5zKS50b0xvY2FsZVN0cmluZygpfTwvdGV4dD48L2JveD5cbiAgICAgICAgICAgIHt1c2FnZS50aG91Z2h0VG9rZW5zID4gMCAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1Rob3VnaHQgdG9rZW5zICd9PC90ZXh0PjxBbmltYXRlZFZhbHVlIHZhbHVlPXt1c2FnZS50aG91Z2h0VG9rZW5zfSBjb2xvcj17RkdfU09GVH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gZm9ybWF0PXsobikgPT4gTWF0aC5yb3VuZChuKS50b0xvY2FsZVN0cmluZygpfSAvPjwvYm94Pn1cbiAgICAgICAgICAgIHtjb250ZXh0UGVyY2VudCA+IDAgJiYgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydDb250ZXh0IHVzZWQgICAnfTwvdGV4dD48QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17Y29udGV4dFBlcmNlbnR9IGNvbG9yPXtjb250ZXh0UGVyY2VudCA+PSA4MCA/IFJFRCA6IEZHX1NPRlR9IGhpZ2hsaWdodD17YWNjZW50KCl9IGZvcm1hdD17KG4pID0+IGAke01hdGgucm91bmQobil9JWB9IC8+PC9ib3g+fVxuICAgICAgICAgICAge3BlbmRpbmdXYWtldXBzID4gMCAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1dha2UtdXBzICAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntwZW5kaW5nV2FrZXVwc308L3RleHQ+PC9ib3g+fVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICA8L2JveD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBoZWlnaHQ6IDEgfX0gLz5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBwYWRkaW5nWDogMiwgZ2FwOiAxIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pnttb2RlbCgpLm5hbWV9PC90ZXh0PlxuICAgICAgICAgICAge3NwZWVkQXBwbGllcygpICYmIHNwZWVkKCkgPT09ICdmYXN0JyAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+RmFzdDwvdGV4dD59XG4gICAgICAgICAgICB7ZWZmb3J0QXBwbGllcygpICYmIGVmZm9ydCgpICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57ZWZmb3J0KCl9PC90ZXh0Pn1cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICAgIHtwZW5kaW5nV2FrZXVwcyA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgXHUyM0YwICR7cGVuZGluZ1dha2V1cHN9YH08L3RleHQ+fVxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtjb21wYWN0TnVtYmVyKHVzYWdlLnByb21wdFRva2Vucyl9IFx1MjE5M2B9PC90ZXh0PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtjb21wYWN0TnVtYmVyKHVzYWdlLmNvbXBsZXRpb25Ub2tlbnMpfSBcdTIxOTFgfTwvdGV4dD5cbiAgICAgICAgICAgIHt1c2FnZS50aG91Z2h0VG9rZW5zID4gMCAmJiA8QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17dXNhZ2UudGhvdWdodFRva2Vuc30gY29sb3I9e01VVEVEfSBoaWdobGlnaHQ9e2FjY2VudCgpfSBmb3JtYXQ9eyhuKSA9PiBgJHtjb21wYWN0TnVtYmVyKG4pfSBcdTI1QzhgfSAvPn1cbiAgICAgICAgICAgIHtjb250ZXh0UGVyY2VudCA+IDAgJiYgPEFuaW1hdGVkVmFsdWUgdmFsdWU9e2NvbnRleHRQZXJjZW50fSBjb2xvcj17Y29udGV4dFBlcmNlbnQgPj0gODAgPyBSRUQgOiBNVVRFRH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gYmFja2dyb3VuZD17UEFORUxfQkd9IGZvcm1hdD17Y29udGV4dEJhcn0gLz59XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICAgIDwvYm94PlxuICAgICAgeyF3b3Jrc3BhY2VPcGVuKCkgJiYgPERpY3RhdGlvbktleXMgaW5wdXQ9e3JlZnMuZGljdGF0aW9uSW5wdXR9IC8+fVxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY29tbWFuZEF0KHRleHQsIGN1cnNvciA9IHRleHQubGVuZ3RoKSB7XG4gIGNvbnN0IG1hdGNoID0gdGV4dC5zbGljZSgwLCBjdXJzb3IpLm1hdGNoKC8oXnxbXFxzKF0pXFwvKFtBLVphLXowLTlfLV0qKSQvKVxuICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbFxuICBjb25zdCBzdGFydCA9IGN1cnNvciAtIG1hdGNoWzJdLmxlbmd0aCAtIDFcbiAgY29uc3Qgc3VmZml4ID0gdGV4dC5zbGljZShjdXJzb3IpLm1hdGNoKC9eW0EtWmEtejAtOV8tXSovKVswXVxuICByZXR1cm4geyBzdGFydCwgZW5kOiBjdXJzb3IgKyBzdWZmaXgubGVuZ3RoLCBxdWVyeTogbWF0Y2hbMl0gfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUNvbW1hbmQodGV4dCwgcmFuZ2UsIGJvZHkpIHtcbiAgcmV0dXJuIHtcbiAgICB0ZXh0OiB0ZXh0LnNsaWNlKDAsIHJhbmdlLnN0YXJ0KSArIGJvZHkgKyB0ZXh0LnNsaWNlKHJhbmdlLmVuZCksXG4gICAgY3Vyc29yOiByYW5nZS5zdGFydCArIGJvZHkubGVuZ3RoLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21tYW5kRmllbGRzKGNvbW1hbmQsIGJvZHksIGFyZ3MgPSAnJykge1xuICBjb25zdCBmaWVsZHMgPSBbLi4uKGNvbW1hbmQuYXJndW1lbnRzID8/IFtdKV1cbiAgaWYgKGJvZHkuaW5jbHVkZXMoJyRBUkdVTUVOVFMnKSAmJiAhYXJncykge1xuICAgIGZpZWxkcy5wdXNoKHsgbmFtZTogJyRhcmdzJywgbGFiZWw6ICdBcmd1bWVudHMnLCB0eXBlOiAndGV4dCcgfSlcbiAgfVxuICByZXR1cm4gZmllbGRzXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBUZXh0QXJlYSwgTWVudSwgQnV0dG9uLCB1c2VJbnB1dCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGZ1enp5U2NvcmUsIHJhbmtGdXp6eSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZnV6enkuanMnXG5pbXBvcnQgeyBhY2NlbnQsIEZHLCBNVVRFRCwgUEFORUxfQkcgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5leHBvcnQgZnVuY3Rpb24gQ29tbWFuZEZvcm0oeyBuYW1lLCBmaWVsZHMsIGZpbGVzLCBmb2N1c2VkLCBvblN1Ym1pdCwgb25DYW5jZWwgfSkge1xuICBjb25zdCBbc3RlcCwgc2V0U3RlcF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3ZhbHVlcywgc2V0VmFsdWVzXSA9IGNyZWF0ZVNpZ25hbCh7fSlcbiAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IFtzZWxlY3RlZCwgc2V0U2VsZWN0ZWRdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IGZpZWxkID0gZmllbGRzW3N0ZXAoKV1cbiAgY29uc3Qgb3B0aW9ucyA9IGZpZWxkLnR5cGUgPT09ICdjaG9pY2UnID8gZmllbGQuY2hvaWNlcyA6IGZpZWxkLnR5cGUgPT09ICdwYXRoJyA/IGZpbGVzIDogW11cbiAgY29uc3QgbWF0Y2hlcyA9IHJhbmtGdXp6eShvcHRpb25zLCBxdWVyeSgpLCAocSwgdmFsdWUpID0+IGZ1enp5U2NvcmUocSwgdmFsdWUpKVxuXG4gIGZ1bmN0aW9uIGFkdmFuY2UodmFsdWUpIHtcbiAgICBjb25zdCBuZXh0ID0geyAuLi52YWx1ZXMoKSwgW2ZpZWxkLm5hbWVdOiB2YWx1ZSB9XG4gICAgc2V0VmFsdWVzKG5leHQpXG4gICAgaWYgKHN0ZXAoKSA9PT0gZmllbGRzLmxlbmd0aCAtIDEpIHJldHVybiBvblN1Ym1pdChuZXh0KVxuICAgIHNldFN0ZXAoc3RlcCgpICsgMSlcbiAgICBzZXRRdWVyeSgnJylcbiAgICBzZXRTZWxlY3RlZCgwKVxuICB9XG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DYW5jZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGdhcDogMiB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PntgLyR7bmFtZX1gfTwvdGV4dD5cbiAgICAgICAge2ZpZWxkcy5zbGljZSgwLCBzdGVwKCkpLm1hcCgoaXRlbSkgPT4gPHRleHQga2V5PXtpdGVtLm5hbWV9IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57dmFsdWVzKClbaXRlbS5uYW1lXX08L3RleHQ+KX1cbiAgICAgICAgPEJ1dHRvbiBsYWJlbD1cIkNhbmNlbFwiIG9uUHJlc3M9e29uQ2FuY2VsfSAvPlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+e2ZpZWxkLmxhYmVsfTwvdGV4dD5cbiAgICAgIDxUZXh0QXJlYVxuICAgICAgICBrZXk9e2ZpZWxkLm5hbWV9XG4gICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgIHZhbHVlPXtxdWVyeSgpfVxuICAgICAgICBzdWJtaXRPbkVudGVyXG4gICAgICAgIGNsZWFyT25TdWJtaXQ9e2ZhbHNlfVxuICAgICAgICBtYXhIZWlnaHQ9ezF9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtmaWVsZC5sYWJlbH1cbiAgICAgICAgb25DYW5jZWw9e29uQ2FuY2VsfVxuICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PiB7IHNldFF1ZXJ5KHZhbHVlKTsgc2V0U2VsZWN0ZWQoMCkgfX1cbiAgICAgICAgb25TdWJtaXQ9eyh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnY2hvaWNlJykge1xuICAgICAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoKSBhZHZhbmNlKG1hdGNoZXNbTWF0aC5taW4oc2VsZWN0ZWQoKSwgbWF0Y2hlcy5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgfSBlbHNlIGFkdmFuY2UoZmllbGQudHlwZSA9PT0gJ3BhdGgnICYmIG1hdGNoZXMubGVuZ3RoICYmICF2YWx1ZS5zdGFydHNXaXRoKCcvJykgJiYgIXZhbHVlLnN0YXJ0c1dpdGgoJ34nKSA/IG1hdGNoZXNbTWF0aC5taW4oc2VsZWN0ZWQoKSwgbWF0Y2hlcy5sZW5ndGggLSAxKV0gOiB2YWx1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25LZXlEb3duPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnZG93bicgJiYgbWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkKE1hdGgubWluKHNlbGVjdGVkKCkgKyAxLCBtYXRjaGVzLmxlbmd0aCAtIDEpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ3VwJyAmJiBtYXRjaGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWQoTWF0aC5tYXgoMCwgc2VsZWN0ZWQoKSAtIDEpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ3RhYicgJiYgbWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNldFF1ZXJ5KG1hdGNoZXNbTWF0aC5taW4oc2VsZWN0ZWQoKSwgbWF0Y2hlcy5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgICB7bWF0Y2hlcy5sZW5ndGggPiAwICYmIDxNZW51XG4gICAgICAgIGl0ZW1zPXttYXRjaGVzfVxuICAgICAgICBzZWxlY3RlZD17c2VsZWN0ZWQoKX1cbiAgICAgICAgb25TZWxlY3Q9e3NldFNlbGVjdGVkfVxuICAgICAgICBvblN1Ym1pdD17YWR2YW5jZX1cbiAgICAgICAgZm9jdXNlZD17ZmFsc2V9XG4gICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgIHJlbmRlckl0ZW09eyh2YWx1ZSwgeyBhY3RpdmUgfSkgPT4gPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+e2Ake2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9JHt2YWx1ZX1gfTwvdGV4dD59XG4gICAgICAvPn1cbiAgICA8L2JveD5cbiAgKVxufVxuIiwgImNvbnN0IGZpbGxlciA9IC8oPzwhW15cXHMsOzohP10pKD86dWh8dW0pKD89JHxbXFxzLDs6LiE/XSkoWyBcXHRdKlssOzouIT9dKilbIFxcdF0qL2dpdVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5EaWN0YXRpb24odGV4dCkge1xuICByZXR1cm4gdGV4dC5zcGxpdCgnXFxuJykubWFwKGNsZWFuTGluZSkuam9pbignXFxuJykudHJpbSgpXG59XG5cbmZ1bmN0aW9uIGNsZWFuTGluZShsaW5lKSB7XG4gIGxldCByZXN1bHQgPSAnJ1xuICBsZXQgb2Zmc2V0ID0gMFxuICBsZXQgY2FwaXRhbGl6ZSA9IGZhbHNlXG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgbGluZS5tYXRjaEFsbChmaWxsZXIpKSB7XG4gICAgbGV0IGJlZm9yZSA9IGxpbmUuc2xpY2Uob2Zmc2V0LCBtYXRjaC5pbmRleClcbiAgICBpZiAoY2FwaXRhbGl6ZSkgYmVmb3JlID0gdXBwZXJGaXJzdChiZWZvcmUpXG4gICAgcmVzdWx0ICs9IGJlZm9yZVxuICAgIGNvbnN0IGFmdGVyID0gbGluZS5zbGljZShtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aClcbiAgICBjb25zdCB0ZXJtaW5hbCA9IG1hdGNoWzFdLm1hdGNoKC9bLiE/XSsvKT8uWzBdID8/ICcnXG4gICAgcmVzdWx0ID0gcmVzdWx0LnRyaW1FbmQoKVxuICAgIGNvbnN0IHNlbnRlbmNlU3RhcnQgPSAhcmVzdWx0IHx8IC9bLiE/XSQvLnRlc3QocmVzdWx0KVxuICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC8sJC8sICcnKVxuICAgIGlmICghYWZ0ZXIpIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9bOzpdJC8sICcnKVxuICAgIGlmICh0ZXJtaW5hbCAmJiAhc2VudGVuY2VTdGFydCkgcmVzdWx0ICs9IHRlcm1pbmFsXG4gICAgY2FwaXRhbGl6ZSA9IHNlbnRlbmNlU3RhcnQgfHwgQm9vbGVhbih0ZXJtaW5hbClcbiAgICBpZiAocmVzdWx0ICYmIGFmdGVyKSByZXN1bHQgKz0gJyAnXG4gICAgb2Zmc2V0ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGhcbiAgfVxuICBjb25zdCB0YWlsID0gbGluZS5zbGljZShvZmZzZXQpXG4gIHJldHVybiByZXN1bHQgKyAoY2FwaXRhbGl6ZSA/IHVwcGVyRmlyc3QodGFpbCkgOiB0YWlsKVxufVxuXG5mdW5jdGlvbiB1cHBlckZpcnN0KHRleHQpIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSgvXihcXHMqKShcXHB7TGx9KSg/IVxccHtMdX0pL3UsIChfLCBzcGFjZSwgbGV0dGVyKSA9PiBzcGFjZSArIGxldHRlci50b1VwcGVyQ2FzZSgpKVxufVxuXG4iLCAiaW1wb3J0IHsgY2xlYW5EaWN0YXRpb24gfSBmcm9tICcuL2RpY3RhdGlvbi10ZXh0LmpzJ1xuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcydcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCdcblxuZXhwb3J0IGZ1bmN0aW9uIGRpY3RhdGlvbkhlbHBlclBhdGgoKSB7XG4gIGNvbnN0IGJ1bmRsZWQgPSBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoJy4vcGljby1kaWN0YXRlJywgaW1wb3J0Lm1ldGEudXJsKSlcbiAgcmV0dXJuIGV4aXN0c1N5bmMoYnVuZGxlZCkgPyBidW5kbGVkIDogZmlsZVVSTFRvUGF0aChuZXcgVVJMKCcuLi9oZWxwZXIvLmJ1aWxkL3JlbGVhc2UvcGljby1kaWN0YXRlJywgaW1wb3J0Lm1ldGEudXJsKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURpY3RhdGlvbih7IG9uU3RhdHVzID0gKCkgPT4ge30sIG9uTGV2ZWwgPSAoKSA9PiB7fSwgb25FcnJvciA9ICgpID0+IHt9LCBwbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm0sIGFyY2ggPSBwcm9jZXNzLmFyY2gsIGxhdW5jaCA9ICgpID0+IHNwYXduKGRpY3RhdGlvbkhlbHBlclBhdGgoKSwgW10sIHsgc3RkaW86IFsncGlwZScsICdwaXBlJywgJ3BpcGUnXSB9KSwgbG9hZGluZ1RpbWVvdXQgPSA2MDAwMDAsIHJlcXVlc3RUaW1lb3V0ID0gNDUwMDAgfSA9IHt9KSB7XG4gIGxldCBjaGlsZCA9IG51bGxcbiAgbGV0IHN0YXR1cyA9ICdpZGxlJ1xuICBsZXQgc2VxdWVuY2UgPSAwXG4gIGxldCBnZW5lcmF0aW9uID0gMFxuICBsZXQgcmVhZHkgPSBudWxsXG4gIGxldCBkaXNwb3NlZCA9IGZhbHNlXG4gIGNvbnN0IHBlbmRpbmcgPSBuZXcgTWFwKClcblxuICBmdW5jdGlvbiBzZXRTdGF0dXModmFsdWUpIHtcbiAgICBzdGF0dXMgPSB2YWx1ZVxuICAgIG9uU3RhdHVzKHZhbHVlKVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXQoZXJyb3IgPSBuZXcgRXJyb3IoJ2RpY3RhdGlvbiBjYW5jZWxsZWQnKSkge1xuICAgIGNvbnN0IHByZXZpb3VzID0gY2hpbGRcbiAgICBjaGlsZCA9IG51bGxcbiAgICByZWFkeSA9IG51bGxcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHBlbmRpbmcudmFsdWVzKCkpIHtcbiAgICAgIGNsZWFyVGltZW91dChlbnRyeS50aW1lcilcbiAgICAgIGVudHJ5LnJlamVjdChlcnJvcilcbiAgICB9XG4gICAgcGVuZGluZy5jbGVhcigpXG4gICAgcHJldmlvdXM/LnN0ZGluLmVuZCgpXG4gICAgcHJldmlvdXM/LmtpbGwoKVxuICAgIHNldFN0YXR1cygnaWRsZScpXG4gIH1cblxuICBmdW5jdGlvbiB3YWl0Rm9yKGlkLCB0aW1lb3V0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiByZXNldChuZXcgRXJyb3IoJ2RpY3RhdGlvbiB0aW1lZCBvdXQnKSksIHRpbWVvdXQpXG4gICAgICBwZW5kaW5nLnNldChpZCwgeyByZXNvbHZlLCByZWplY3QsIHRpbWVyIH0pXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldHRsZShpZCwgbWVzc2FnZSkge1xuICAgIGNvbnN0IGVudHJ5ID0gcGVuZGluZy5nZXQoaWQpXG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuXG4gICAgcGVuZGluZy5kZWxldGUoaWQpXG4gICAgY2xlYXJUaW1lb3V0KGVudHJ5LnRpbWVyKVxuICAgIGlmIChtZXNzYWdlLmVycm9yKSBlbnRyeS5yZWplY3QobmV3IEVycm9yKG1lc3NhZ2UuZXJyb3IpKVxuICAgIGVsc2UgZW50cnkucmVzb2x2ZShtZXNzYWdlKVxuICB9XG5cbiAgZnVuY3Rpb24gbG9hZCgpIHtcbiAgICBpZiAocmVhZHkpIHJldHVybiByZWFkeVxuICAgIGlmIChwbGF0Zm9ybSAhPT0gJ2RhcndpbicgfHwgYXJjaCAhPT0gJ2FybTY0JykgdGhyb3cgbmV3IEVycm9yKCdkaWN0YXRpb24gcmVxdWlyZXMgYW4gQXBwbGUgU2lsaWNvbiBNYWMnKVxuICAgIGNvbnN0IGluc3RhbmNlID0gbGF1bmNoKClcbiAgICBjaGlsZCA9IGluc3RhbmNlXG4gICAgcmVhZHkgPSB3YWl0Rm9yKCdyZWFkeScsIGxvYWRpbmdUaW1lb3V0KVxuICAgIGxldCBidWZmZXIgPSAnJ1xuICAgIGluc3RhbmNlLnN0ZG91dC5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgaWYgKGNoaWxkICE9PSBpbnN0YW5jZSkgcmV0dXJuXG4gICAgICBidWZmZXIgKz0gY2h1bmsudG9TdHJpbmcoKVxuICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPiAxMDI0ICogMTAyNCkgcmV0dXJuIHJlc2V0KG5ldyBFcnJvcignaW52YWxpZCBkaWN0YXRpb24gaGVscGVyIG91dHB1dCcpKVxuICAgICAgbGV0IGF0XG4gICAgICB3aGlsZSAoKGF0ID0gYnVmZmVyLmluZGV4T2YoJ1xcbicpKSA+PSAwKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBidWZmZXIuc2xpY2UoMCwgYXQpXG4gICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5zbGljZShhdCArIDEpXG4gICAgICAgIGxldCBtZXNzYWdlXG4gICAgICAgIHRyeSB7IG1lc3NhZ2UgPSBKU09OLnBhcnNlKGxpbmUpIH0gY2F0Y2ggeyBjb250aW51ZSB9XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXR1cyA9PT0gJ2xldmVsJykge1xuICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdyZWNvcmRpbmcnICYmIE51bWJlci5pc0Zpbml0ZShtZXNzYWdlLmxldmVsKSkgb25MZXZlbChNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBtZXNzYWdlLmxldmVsKSkpXG4gICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5zdGF0dXMgPT09ICdyZWFkeScpIHNldHRsZSgncmVhZHknLCBtZXNzYWdlKVxuICAgICAgICBlbHNlIGlmIChtZXNzYWdlLnN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UubWVzc2FnZSB8fCAnZGljdGF0aW9uIGZhaWxlZCcpXG4gICAgICAgICAgY29uc3QgYWN0aXZlID0gcGVuZGluZy5zaXplID4gMFxuICAgICAgICAgIHJlc2V0KGVycm9yKVxuICAgICAgICAgIGlmICghYWN0aXZlKSBvbkVycm9yKGVycm9yLm1lc3NhZ2UpXG4gICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5pZCAhPSBudWxsKSBzZXR0bGUobWVzc2FnZS5pZCwgbWVzc2FnZSlcbiAgICAgIH1cbiAgICB9KVxuICAgIGluc3RhbmNlLnN0ZGVyci5vbignZGF0YScsICgpID0+IHt9KVxuICAgIGNvbnN0IGZhaWxlZCA9IChlcnJvcikgPT4ge1xuICAgICAgaWYgKGNoaWxkICE9PSBpbnN0YW5jZSkgcmV0dXJuXG4gICAgICBjb25zdCBhY3RpdmUgPSBwZW5kaW5nLnNpemUgPiAwXG4gICAgICBjb25zdCByZWNvcmRpbmcgPSBzdGF0dXMgPT09ICdyZWNvcmRpbmcnXG4gICAgICByZXNldChlcnJvcilcbiAgICAgIGlmICghYWN0aXZlICYmIHJlY29yZGluZykgb25FcnJvcihlcnJvci5tZXNzYWdlKVxuICAgIH1cbiAgICBpbnN0YW5jZS5vbignZXJyb3InLCAoZXJyb3IpID0+IGZhaWxlZChuZXcgRXJyb3IoYGRpY3RhdGlvbiBoZWxwZXIgdW5hdmFpbGFibGU6ICR7ZXJyb3IubWVzc2FnZX1gKSkpXG4gICAgaW5zdGFuY2Uuc3RkaW4ub24oJ2Vycm9yJywgZmFpbGVkKVxuICAgIGluc3RhbmNlLm9uKCdleGl0JywgKCkgPT4gZmFpbGVkKG5ldyBFcnJvcignZGljdGF0aW9uIGhlbHBlciBleGl0ZWQnKSkpXG4gICAgcmV0dXJuIHJlYWR5XG4gIH1cblxuICBmdW5jdGlvbiByZXF1ZXN0KG9wKSB7XG4gICAgY29uc3QgaWQgPSArK3NlcXVlbmNlXG4gICAgY29uc3QgcmVzdWx0ID0gd2FpdEZvcihpZCwgcmVxdWVzdFRpbWVvdXQpXG4gICAgdHJ5IHsgY2hpbGQuc3RkaW4ud3JpdGUoYCR7SlNPTi5zdHJpbmdpZnkoeyBpZCwgb3AgfSl9XFxuYCkgfSBjYXRjaCAoZXJyb3IpIHsgcmVzZXQoZXJyb3IpIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBwcmVsb2FkKCkge1xuICAgIGlmIChkaXNwb3NlZCkgcmV0dXJuXG4gICAgdHJ5IHsgYXdhaXQgbG9hZCgpIH0gY2F0Y2gge31cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkge1xuICAgIGlmIChkaXNwb3NlZCB8fCBzdGF0dXMgIT09ICdpZGxlJykgcmV0dXJuXG4gICAgY29uc3QgdG9rZW4gPSArK2dlbmVyYXRpb25cbiAgICBzZXRTdGF0dXMoJ2xvYWRpbmcnKVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBsb2FkKClcbiAgICAgIGlmICh0b2tlbiAhPT0gZ2VuZXJhdGlvbikgcmV0dXJuXG4gICAgICBzZXRTdGF0dXMoJ3N0YXJ0aW5nJylcbiAgICAgIGF3YWl0IHJlcXVlc3QoJ3N0YXJ0JylcbiAgICAgIGlmICh0b2tlbiA9PT0gZ2VuZXJhdGlvbikgc2V0U3RhdHVzKCdyZWNvcmRpbmcnKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAodG9rZW4gIT09IGdlbmVyYXRpb24pIHJldHVyblxuICAgICAgcmVzZXQoZXJyb3IpXG4gICAgICBvbkVycm9yKGVycm9yLm1lc3NhZ2UpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc3RvcCgpIHtcbiAgICBpZiAoc3RhdHVzICE9PSAncmVjb3JkaW5nJykgcmV0dXJuIG51bGxcbiAgICBjb25zdCB0b2tlbiA9IGdlbmVyYXRpb25cbiAgICBzZXRTdGF0dXMoJ3RyYW5zY3JpYmluZycpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcXVlc3QoJ3N0b3AnKVxuICAgICAgaWYgKHRva2VuICE9PSBnZW5lcmF0aW9uKSByZXR1cm4gbnVsbFxuICAgICAgc2V0U3RhdHVzKCdpZGxlJylcbiAgICAgIHJldHVybiBjbGVhbkRpY3RhdGlvbihyZXN1bHQudGV4dCB8fCAnJylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHRva2VuID09PSBnZW5lcmF0aW9uKSB7XG4gICAgICAgIHJlc2V0KGVycm9yKVxuICAgICAgICBvbkVycm9yKGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBjb25zdCB0b2tlbiA9ICsrZ2VuZXJhdGlvblxuICAgIGlmIChzdGF0dXMgPT09ICdpZGxlJykgcmV0dXJuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ3JlY29yZGluZycpIHJldHVybiByZXNldCgpXG4gICAgc2V0U3RhdHVzKCdjYW5jZWxsaW5nJylcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcmVxdWVzdCgnY2FuY2VsJylcbiAgICAgIGlmICh0b2tlbiA9PT0gZ2VuZXJhdGlvbikgc2V0U3RhdHVzKCdpZGxlJylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHRva2VuID09PSBnZW5lcmF0aW9uKSByZXNldChlcnJvcilcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgIGRpc3Bvc2VkID0gdHJ1ZVxuICAgICsrZ2VuZXJhdGlvblxuICAgIHJlc2V0KClcbiAgfVxuXG4gIHJldHVybiB7IHByZWxvYWQsIHN0YXJ0LCBzdG9wLCBjYW5jZWwsIGRpc3Bvc2UsIGdldCBzdGF0dXMoKSB7IHJldHVybiBzdGF0dXMgfSB9XG59XG4iLCAiaW1wb3J0IHsgZXhlY0ZpbGUgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICdub2RlOnV0aWwnXG5pbXBvcnQgeyBta2R0ZW1wLCB3cml0ZUZpbGUsIHJtIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcydcbmltcG9ydCB7IHJtU3luYyB9IGZyb20gJ25vZGU6ZnMnXG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJ1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCdcblxuY29uc3QgZXhlY3V0ZSA9IHByb21pc2lmeShleGVjRmlsZSlcbmNvbnN0IGRpcmVjdG9yaWVzID0gbmV3IFNldCgpXG5wcm9jZXNzLm9uY2UoJ2V4aXQnLCAoKSA9PiB7XG4gIGZvciAoY29uc3QgZGlyIG9mIGRpcmVjdG9yaWVzKSBybVN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcbn0pXG5cbmNvbnN0IG1hY1NjcmlwdCA9IGBPYmpDLmltcG9ydCgnQXBwS2l0Jyk7IE9iakMuaW1wb3J0KCdGb3VuZGF0aW9uJyk7XG5jb25zdCBwYXN0ZWJvYXJkID0gJC5OU1Bhc3RlYm9hcmQuZ2VuZXJhbFBhc3RlYm9hcmQ7XG5jb25zdCBmaWxlcyA9IHBhc3RlYm9hcmQucHJvcGVydHlMaXN0Rm9yVHlwZSgnTlNGaWxlbmFtZXNQYm9hcmRUeXBlJyk7XG5sZXQgaW1hZ2UgPSBudWxsO1xuaWYgKCFmaWxlcy5pc05pbCgpICYmIGZpbGVzLmNvdW50ID4gMCkge1xuICBjb25zdCBwYXRoID0gT2JqQy51bndyYXAoZmlsZXMub2JqZWN0QXRJbmRleCgwKSk7XG4gIGlmICgvXFxcXC4ocG5nfGpwZT9nfGdpZnx3ZWJwKSQvaS50ZXN0KHBhdGgpKSBpbWFnZSA9ICQuTlNJbWFnZS5hbGxvYy5pbml0V2l0aENvbnRlbnRzT2ZGaWxlKHBhdGgpO1xufVxuaWYgKCFpbWFnZSB8fCBpbWFnZS5pc05pbCgpKSBpbWFnZSA9ICQuTlNJbWFnZS5hbGxvYy5pbml0V2l0aFBhc3RlYm9hcmQocGFzdGVib2FyZCk7XG5sZXQgZGF0YSA9IG51bGw7XG5pZiAoIWltYWdlLmlzTmlsKCkpIHtcbiAgY29uc3QgYml0bWFwID0gJC5OU0JpdG1hcEltYWdlUmVwLmltYWdlUmVwV2l0aERhdGEoaW1hZ2UuVElGRlJlcHJlc2VudGF0aW9uKTtcbiAgZGF0YSA9IGJpdG1hcC5yZXByZXNlbnRhdGlvblVzaW5nVHlwZVByb3BlcnRpZXMoJC5OU0JpdG1hcEltYWdlRmlsZVR5cGVQTkcsICQoe30pKTtcbn1cbmRhdGEgPyBPYmpDLnVud3JhcChkYXRhLmJhc2U2NEVuY29kZWRTdHJpbmdXaXRoT3B0aW9ucygwKSkgOiAnJ2BcblxuY29uc3Qgd2luZG93c1NjcmlwdCA9IGBBZGQtVHlwZSAtQXNzZW1ibHlOYW1lIFN5c3RlbS5XaW5kb3dzLkZvcm1zOyBBZGQtVHlwZSAtQXNzZW1ibHlOYW1lIFN5c3RlbS5EcmF3aW5nO1xuaWYgKFtTeXN0ZW0uV2luZG93cy5Gb3Jtcy5DbGlwYm9hcmRdOjpDb250YWluc0ltYWdlKCkpIHtcbiAgJGltYWdlID0gW1N5c3RlbS5XaW5kb3dzLkZvcm1zLkNsaXBib2FyZF06OkdldEltYWdlKCk7XG4gICRzdHJlYW0gPSBOZXctT2JqZWN0IFN5c3RlbS5JTy5NZW1vcnlTdHJlYW07XG4gIHRyeSB7ICRpbWFnZS5TYXZlKCRzdHJlYW0sIFtTeXN0ZW0uRHJhd2luZy5JbWFnaW5nLkltYWdlRm9ybWF0XTo6UG5nKTsgW0NvbnZlcnRdOjpUb0Jhc2U2NFN0cmluZygkc3RyZWFtLlRvQXJyYXkoKSkgfVxuICBmaW5hbGx5IHsgJHN0cmVhbS5EaXNwb3NlKCk7ICRpbWFnZS5EaXNwb3NlKCkgfVxufWBcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRDbGlwYm9hcmRJbWFnZSh7IHBsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybSwgZW52ID0gcHJvY2Vzcy5lbnYsIHJ1biA9IGV4ZWN1dGUgfSA9IHt9KSB7XG4gIGlmIChlbnYuU1NIX0NPTk5FQ1RJT04gfHwgZW52LlNTSF9UVFkpIHRocm93IG5ldyBFcnJvcignY2xpcGJvYXJkIGltYWdlcyBhcmUgdW5hdmFpbGFibGUgb3ZlciBTU0gnKVxuICBjb25zdCBvcHRpb25zID0geyBlbmNvZGluZzogJ2J1ZmZlcicsIHRpbWVvdXQ6IDEwMDAwLCBtYXhCdWZmZXI6IDMyICogMTAyNCAqIDEwMjQgfVxuICBsZXQgZGF0YVxuICB0cnkge1xuICAgIGlmIChwbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBydW4oJ29zYXNjcmlwdCcsIFsnLWwnLCAnSmF2YVNjcmlwdCcsICctZScsIG1hY1NjcmlwdF0sIG9wdGlvbnMpXG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oc3Rkb3V0LnRvU3RyaW5nKCkudHJpbSgpLCAnYmFzZTY0JylcbiAgICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgcnVuKCdwb3dlcnNoZWxsLmV4ZScsIFsnLU5vUHJvZmlsZScsICctTm9uSW50ZXJhY3RpdmUnLCAnLVNUQScsICctQ29tbWFuZCcsIHdpbmRvd3NTY3JpcHRdLCBvcHRpb25zKVxuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKHN0ZG91dC50b1N0cmluZygpLnRyaW0oKSwgJ2Jhc2U2NCcpXG4gICAgfSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gJ2xpbnV4Jykge1xuICAgICAgY29uc3Qgd2F5bGFuZCA9IEJvb2xlYW4oZW52LldBWUxBTkRfRElTUExBWSlcbiAgICAgIGNvbnN0IGNvbW1hbmQgPSB3YXlsYW5kID8gJ3dsLXBhc3RlJyA6ICd4Y2xpcCdcbiAgICAgIGNvbnN0IHsgc3Rkb3V0OiB0eXBlcyB9ID0gYXdhaXQgcnVuKGNvbW1hbmQsIHdheWxhbmQgPyBbJy0tbGlzdC10eXBlcyddIDogWyctc2VsZWN0aW9uJywgJ2NsaXBib2FyZCcsICctdCcsICdUQVJHRVRTJywgJy1vJ10sIG9wdGlvbnMpXG4gICAgICBpZiAoIXR5cGVzLnRvU3RyaW5nKCkuc3BsaXQoL1xccysvKS5pbmNsdWRlcygnaW1hZ2UvcG5nJykpIHJldHVybiBudWxsXG4gICAgICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgcnVuKGNvbW1hbmQsIHdheWxhbmQgPyBbJy0tdHlwZScsICdpbWFnZS9wbmcnLCAnLS1uby1uZXdsaW5lJ10gOiBbJy1zZWxlY3Rpb24nLCAnY2xpcGJvYXJkJywgJy10JywgJ2ltYWdlL3BuZycsICctbyddLCBvcHRpb25zKVxuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKHN0ZG91dClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjbGlwYm9hcmQgaW1hZ2VzIGFyZSB1bnN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtJylcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yLmNvZGUgPT09ICdFTk9FTlQnKSB0aHJvdyBuZXcgRXJyb3IoJ2NsaXBib2FyZCByZWFkZXIgdW5hdmFpbGFibGU6IGluc3RhbGwgJyArIChlbnYuV0FZTEFORF9ESVNQTEFZID8gJ3dsLWNsaXBib2FyZCcgOiBwbGF0Zm9ybSA9PT0gJ2xpbnV4JyA/ICd4Y2xpcCcgOiAndGhlIHN5c3RlbSBjbGlwYm9hcmQgdG9vbHMnKSlcbiAgICB0aHJvdyBlcnJvclxuICB9XG4gIGlmICghZGF0YS5sZW5ndGgpIHJldHVybiBudWxsXG4gIGlmICghZGF0YS5zdWJhcnJheSgwLCA4KS5lcXVhbHMoQnVmZmVyLmZyb20oWzEzNywgODAsIDc4LCA3MSwgMTMsIDEwLCAyNiwgMTBdKSkpIHRocm93IG5ldyBFcnJvcignY2xpcGJvYXJkIGRpZCBub3QgcmV0dXJuIGEgUE5HIGltYWdlJylcbiAgY29uc3QgZGlyID0gYXdhaXQgbWtkdGVtcChqb2luKHRtcGRpcigpLCAncGljby1jbGlwYm9hcmQtJykpXG4gIGRpcmVjdG9yaWVzLmFkZChkaXIpXG4gIGNvbnN0IGRpc3Bvc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgcm0oZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcbiAgICBkaXJlY3Rvcmllcy5kZWxldGUoZGlyKVxuICB9XG4gIGNvbnN0IHBhdGggPSBqb2luKGRpciwgJ2NsaXBib2FyZC5wbmcnKVxuICB0cnkge1xuICAgIGF3YWl0IHdyaXRlRmlsZShwYXRoLCBkYXRhLCB7IG1vZGU6IDBvNjAwIH0pXG4gICAgcmV0dXJuIHsgcGF0aCwgZGlzcG9zZSB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgYXdhaXQgZGlzcG9zZSgpXG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDbGlwYm9hcmRJbnB1dCh7IHJlYWRJbWFnZSwgZ2V0RHJhZnQsIGF0dGFjaEltYWdlLCBzZXRJbnB1dCwgb25FcnJvciB9KSB7XG4gIGxldCBwZW5kaW5nID0gZmFsc2VcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIHBhc3RlSW1hZ2UoKSB7XG4gICAgaWYgKHBlbmRpbmcpIHJldHVyblxuICAgIHBlbmRpbmcgPSB0cnVlXG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0RHJhZnQoKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbWFnZSA9IGF3YWl0IHJlYWRJbWFnZSgpXG4gICAgICBpZiAoIWltYWdlKSB7XG4gICAgICAgIG9uRXJyb3IoJ05vIGltYWdlIG9uIHRoZSBjbGlwYm9hcmQnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBnZXREcmFmdCgpXG4gICAgICBpZiAoY3VycmVudC5yZXZpc2lvbiAhPT0gdGFyZ2V0LnJldmlzaW9uIHx8IGN1cnJlbnQuc2Vzc2lvbiAhPT0gdGFyZ2V0LnNlc3Npb24gfHwgY3VycmVudC52YWx1ZSAhPT0gdGFyZ2V0LnZhbHVlIHx8IGN1cnJlbnQuY3Vyc29yICE9PSB0YXJnZXQuY3Vyc29yKSB7XG4gICAgICAgIGF3YWl0IGltYWdlLmRpc3Bvc2UoKVxuICAgICAgICBvbkVycm9yKCdDbGlwYm9hcmQgaW1hZ2Ugbm90IGF0dGFjaGVkOiB0aGUgZHJhZnQgY2hhbmdlZCcpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgbGFiZWwgPSBhd2FpdCBhdHRhY2hJbWFnZShpbWFnZS5wYXRoKVxuICAgICAgaWYgKCFsYWJlbCkge1xuICAgICAgICBhd2FpdCBpbWFnZS5kaXNwb3NlKClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbWFnZSBhdHRhY2htZW50IGZhaWxlZCcpXG4gICAgICB9XG4gICAgICBjb25zdCBiZWZvcmUgPSB0YXJnZXQudmFsdWUuc2xpY2UoMCwgdGFyZ2V0LmN1cnNvcilcbiAgICAgIGNvbnN0IGFmdGVyID0gdGFyZ2V0LnZhbHVlLnNsaWNlKHRhcmdldC5jdXJzb3IpXG4gICAgICBzZXRJbnB1dChiZWZvcmUgKyBsYWJlbCArIGFmdGVyLCBiZWZvcmUubGVuZ3RoICsgbGFiZWwubGVuZ3RoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGBDbGlwYm9hcmQgcGFzdGUgZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcGVuZGluZyA9IGZhbHNlXG4gICAgfVxuICB9XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURpY3RhdGlvbklucHV0KHsgZGljdGF0aW9uLCBnZXRJbnB1dCwgc2V0SW5wdXQgfSkge1xuICBsZXQgZHJhZnQgPSBudWxsXG4gIGxldCBnZW5lcmF0aW9uID0gMFxuXG4gIGZ1bmN0aW9uIHN0YXJ0KHsgdmFsdWUsIGN1cnNvciB9KSB7XG4gICAgaWYgKGRpY3RhdGlvbi5zdGF0dXMgIT09ICdpZGxlJykgcmV0dXJuXG4gICAgZHJhZnQgPSB7IHZhbHVlLCBjdXJzb3IgfVxuICAgICsrZ2VuZXJhdGlvblxuICAgIHZvaWQgZGljdGF0aW9uLnN0YXJ0KClcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgY29uc3QgdG9rZW4gPSBnZW5lcmF0aW9uXG4gICAgY29uc3QgdGFyZ2V0ID0gZHJhZnRcbiAgICBjb25zdCB0ZXh0ID0gYXdhaXQgZGljdGF0aW9uLnN0b3AoKVxuICAgIGlmICh0b2tlbiAhPT0gZ2VuZXJhdGlvbiB8fCAhdGFyZ2V0IHx8IHRleHQgPT0gbnVsbCB8fCBnZXRJbnB1dCgpICE9PSB0YXJnZXQudmFsdWUpIHJldHVyblxuICAgIGNvbnN0IGJlZm9yZSA9IHRhcmdldC52YWx1ZS5zbGljZSgwLCB0YXJnZXQuY3Vyc29yKVxuICAgIGNvbnN0IGxlYWQgPSB0ZXh0ICYmIGJlZm9yZSAmJiAhL1xccyQvLnRlc3QoYmVmb3JlKSAmJiAhL15cXHMvLnRlc3QodGV4dCkgPyAnICcgOiAnJ1xuICAgIGNvbnN0IGFmdGVyID0gdGFyZ2V0LnZhbHVlLnNsaWNlKHRhcmdldC5jdXJzb3IpXG4gICAgY29uc3QgdHJhaWwgPSB0ZXh0ICYmIGFmdGVyICYmICEvXFxzJC8udGVzdCh0ZXh0KSAmJiAhL15bXFxzLiw7OiE/XS8udGVzdChhZnRlcikgPyAnICcgOiAnJ1xuICAgIHNldElucHV0KGJlZm9yZSArIGxlYWQgKyB0ZXh0ICsgdHJhaWwgKyBhZnRlcilcbiAgICBkcmFmdCA9IG51bGxcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICArK2dlbmVyYXRpb25cbiAgICBkcmFmdCA9IG51bGxcbiAgICB2b2lkIGRpY3RhdGlvbi5jYW5jZWwoKVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlKGV2ZW50KSB7XG4gICAgaWYgKGRpY3RhdGlvbi5zdGF0dXMgPT09ICdpZGxlJykgcmV0dXJuIGZhbHNlXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScgfHwgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnYycpKSBjYW5jZWwoKVxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicgJiYgIWV2ZW50LnNoaWZ0ICYmICFldmVudC5tZXRhICYmIGRpY3RhdGlvbi5zdGF0dXMgPT09ICdyZWNvcmRpbmcnKSB2b2lkIHN0b3AoKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICByZXR1cm4geyBzdGFydCwgc3RvcCwgY2FuY2VsLCBoYW5kbGUgfVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTY3JlZW5DYXB0dXJlSW5wdXQoeyBjYXB0dXJlUmVnaW9uLCBnZXREcmFmdCwgYXR0YWNoSW1hZ2UsIHNldElucHV0LCBvbkVycm9yLCBvblN0YXR1cyA9ICgpID0+IHt9IH0pIHtcbiAgbGV0IHBlbmRpbmcgPSBmYWxzZVxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gY2FwdHVyZUltYWdlKCkge1xuICAgIGlmIChwZW5kaW5nKSByZXR1cm5cbiAgICBwZW5kaW5nID0gdHJ1ZVxuICAgIG9uU3RhdHVzKCdjYXB0dXJpbmcnKVxuICAgIGNvbnN0IHRhcmdldCA9IGdldERyYWZ0KClcbiAgICB0cnkge1xuICAgICAgY29uc3QgaW1hZ2UgPSBhd2FpdCBjYXB0dXJlUmVnaW9uKClcbiAgICAgIGlmICghaW1hZ2UpIHJldHVyblxuICAgICAgY29uc3QgY3VycmVudCA9IGdldERyYWZ0KClcbiAgICAgIGlmIChjdXJyZW50LnJldmlzaW9uICE9PSB0YXJnZXQucmV2aXNpb24gfHwgY3VycmVudC5zZXNzaW9uICE9PSB0YXJnZXQuc2Vzc2lvbiB8fCBjdXJyZW50LnZhbHVlICE9PSB0YXJnZXQudmFsdWUgfHwgY3VycmVudC5jdXJzb3IgIT09IHRhcmdldC5jdXJzb3IpIHtcbiAgICAgICAgYXdhaXQgaW1hZ2UuZGlzcG9zZSgpXG4gICAgICAgIG9uRXJyb3IoJ1NjcmVlbiBjYXB0dXJlIG5vdCBhdHRhY2hlZDogdGhlIGRyYWZ0IGNoYW5nZWQnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGxhYmVsID0gYXdhaXQgYXR0YWNoSW1hZ2UoaW1hZ2UucGF0aClcbiAgICAgIGlmICghbGFiZWwpIHtcbiAgICAgICAgYXdhaXQgaW1hZ2UuZGlzcG9zZSgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW1hZ2UgYXR0YWNobWVudCBmYWlsZWQnKVxuICAgICAgfVxuICAgICAgY29uc3QgYmVmb3JlID0gdGFyZ2V0LnZhbHVlLnNsaWNlKDAsIHRhcmdldC5jdXJzb3IpXG4gICAgICBjb25zdCBhZnRlciA9IHRhcmdldC52YWx1ZS5zbGljZSh0YXJnZXQuY3Vyc29yKVxuICAgICAgc2V0SW5wdXQoYmVmb3JlICsgbGFiZWwgKyBhZnRlciwgYmVmb3JlLmxlbmd0aCArIGxhYmVsLmxlbmd0aClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihgU2NyZWVuIGNhcHR1cmUgZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcGVuZGluZyA9IGZhbHNlXG4gICAgICBvblN0YXR1cygnaWRsZScpXG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgZXhlY0ZpbGUgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgeyBta2R0ZW1wLCB1bmxpbmsgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJ1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnXG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJ1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCdcblxubGV0IGNhcHR1cmVEaXIgPSBudWxsXG5cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZUNhcHR1cmVEaXIoKSB7XG4gIGNhcHR1cmVEaXIgPz89IGF3YWl0IG1rZHRlbXAoam9pbih0bXBkaXIoKSwgJ3BpY28tY2FwdHVyZS0nKSlcbiAgcmV0dXJuIGNhcHR1cmVEaXJcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhcHR1cmVSZWdpb24oKSB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtICE9PSAnZGFyd2luJykgdGhyb3cgbmV3IEVycm9yKCdzY3JlZW4gY2FwdHVyZSBpcyBvbmx5IGF2YWlsYWJsZSBvbiBtYWNPUycpXG4gIGNvbnN0IGZpbGUgPSBqb2luKGF3YWl0IGVuc3VyZUNhcHR1cmVEaXIoKSwgYGNhcHR1cmUtJHtEYXRlLm5vdygpfS5wbmdgKVxuICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZXhlY0ZpbGUoJ3NjcmVlbmNhcHR1cmUnLCBbJy1pJywgJy14JywgZmlsZV0sIChlcnJvcikgPT4ge1xuICAgICAgaWYgKCFlcnJvciB8fCAhZXhpc3RzU3luYyhmaWxlKSkgcmVzb2x2ZSgpXG4gICAgICBlbHNlIHJlamVjdChlcnJvcilcbiAgICB9KVxuICB9KVxuICBpZiAoIWV4aXN0c1N5bmMoZmlsZSkpIHJldHVybiBudWxsXG4gIHJldHVybiB7XG4gICAgcGF0aDogZmlsZSxcbiAgICBkaXNwb3NlOiAoKSA9PiB1bmxpbmsoZmlsZSkuY2F0Y2goKCkgPT4ge30pLFxuICB9XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbXBvc2VyRmlsZXMoKSB7XG4gIGxldCB0ZXh0ID0gJydcbiAgbGV0IHJlZmVyZW5jZXMgPSBbXVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZSh2YWx1ZSwgYXR0YWNobWVudHMpIHtcbiAgICBsZXQgc3RhcnQgPSAwXG4gICAgd2hpbGUgKHN0YXJ0IDwgdGV4dC5sZW5ndGggJiYgc3RhcnQgPCB2YWx1ZS5sZW5ndGggJiYgdGV4dFtzdGFydF0gPT09IHZhbHVlW3N0YXJ0XSkgc3RhcnQrK1xuICAgIGxldCBlbmQgPSB0ZXh0Lmxlbmd0aFxuICAgIGxldCBuZXh0RW5kID0gdmFsdWUubGVuZ3RoXG4gICAgd2hpbGUgKGVuZCA+IHN0YXJ0ICYmIG5leHRFbmQgPiBzdGFydCAmJiB0ZXh0W2VuZCAtIDFdID09PSB2YWx1ZVtuZXh0RW5kIC0gMV0pIHtcbiAgICAgIGVuZC0tXG4gICAgICBuZXh0RW5kLS1cbiAgICB9XG4gICAgY29uc3QgZGVsdGEgPSBuZXh0RW5kIC0gZW5kXG4gICAgcmVmZXJlbmNlcyA9IHJlZmVyZW5jZXMuZmxhdE1hcCgocmVmZXJlbmNlKSA9PiB7XG4gICAgICBpZiAocmVmZXJlbmNlLmVuZCA8PSBzdGFydCkgcmV0dXJuIFtyZWZlcmVuY2VdXG4gICAgICBpZiAocmVmZXJlbmNlLnN0YXJ0ID49IGVuZCkgcmV0dXJuIFt7IC4uLnJlZmVyZW5jZSwgc3RhcnQ6IHJlZmVyZW5jZS5zdGFydCArIGRlbHRhLCBlbmQ6IHJlZmVyZW5jZS5lbmQgKyBkZWx0YSB9XVxuICAgICAgcmV0dXJuIFtdXG4gICAgfSlcbiAgICB0ZXh0ID0gdmFsdWVcbiAgICBjb25zdCBtYXRjaGVzID0gWy4uLnRleHQubWF0Y2hBbGwoL1xcW0ZpbGUgI1xcZCtcXF0vZyldLnJldmVyc2UoKVxuICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgbWF0Y2hlcykge1xuICAgICAgY29uc3QgYXR0YWNobWVudCA9IGF0dGFjaG1lbnRzLmdldChtYXRjaFswXSlcbiAgICAgIGlmIChhdHRhY2htZW50Py5raW5kICE9PSAnZmlsZScpIGNvbnRpbnVlXG4gICAgICBjb25zdCBwYXRoID0gYXR0YWNobWVudC5wYXRoXG4gICAgICBjb25zdCBvZmZzZXQgPSBwYXRoLmxlbmd0aCAtIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgcmVmZXJlbmNlcyA9IHJlZmVyZW5jZXMubWFwKChyZWZlcmVuY2UpID0+IHJlZmVyZW5jZS5zdGFydCA+PSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgICA/IHsgLi4ucmVmZXJlbmNlLCBzdGFydDogcmVmZXJlbmNlLnN0YXJ0ICsgb2Zmc2V0LCBlbmQ6IHJlZmVyZW5jZS5lbmQgKyBvZmZzZXQgfVxuICAgICAgICA6IHJlZmVyZW5jZSlcbiAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIG1hdGNoLmluZGV4KSArIHBhdGggKyB0ZXh0LnNsaWNlKG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKVxuICAgICAgcmVmZXJlbmNlcy5wdXNoKHsgc3RhcnQ6IG1hdGNoLmluZGV4LCBlbmQ6IG1hdGNoLmluZGV4ICsgcGF0aC5sZW5ndGgsIHBsYWNlaG9sZGVyOiBtYXRjaFswXSB9KVxuICAgIH1cbiAgICByZWZlcmVuY2VzLnNvcnQoKGEsIGIpID0+IGEuc3RhcnQgLSBiLnN0YXJ0KVxuICAgIHJldHVybiB0ZXh0XG4gIH1cblxuICBmdW5jdGlvbiBjb250ZW50KCkge1xuICAgIGxldCB2YWx1ZSA9IHRleHRcbiAgICBmb3IgKGNvbnN0IHJlZmVyZW5jZSBvZiBbLi4ucmVmZXJlbmNlc10ucmV2ZXJzZSgpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIHJlZmVyZW5jZS5zdGFydCkgKyByZWZlcmVuY2UucGxhY2Vob2xkZXIgKyB2YWx1ZS5zbGljZShyZWZlcmVuY2UuZW5kKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIHJldHVybiB7IHVwZGF0ZSwgY29udGVudCB9XG59XG4iLCAiY29uc3QgYmFycyA9ICdcdTI1ODFcdTI1ODJcdTI1ODNcdTI1ODRcdTI1ODVcdTI1ODZcdTI1ODdcdTI1ODgnXG5jb25zdCB3aWR0aCA9IDE2XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRMZXZlbChsZXZlbHMsIGxldmVsKSB7XG4gIHJldHVybiBbLi4ubGV2ZWxzLnNsaWNlKDEgLSB3aWR0aCksIE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGxldmVsKSldXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWN0YXRpb25JbmRpY2F0b3Ioc3RhdHVzLCBsZXZlbHMpIHtcbiAgaWYgKHN0YXR1cyA9PT0gJ2lkbGUnKSByZXR1cm4gJydcbiAgaWYgKHN0YXR1cyAhPT0gJ3JlY29yZGluZycpIHJldHVybiBgICR7c3RhdHVzfSBgXG4gIGNvbnN0IHNhbXBsZXMgPSBbLi4uQXJyYXkoTWF0aC5tYXgoMCwgd2lkdGggLSBsZXZlbHMubGVuZ3RoKSkuZmlsbCgwKSwgLi4ubGV2ZWxzLnNsaWNlKC13aWR0aCldXG4gIHJldHVybiBgICR7c2FtcGxlcy5tYXAoKGxldmVsKSA9PiBiYXJzW01hdGgucm91bmQobGV2ZWwgKiAoYmFycy5sZW5ndGggLSAxKSldKS5qb2luKCcnKX0gcmVjb3JkaW5nIGBcbn1cbiIsICJpbXBvcnQgeyBjb2RlVG9BTlNJIH0gZnJvbSAnQHNoaWtpanMvY2xpJ1xuaW1wb3J0IHsgY3JlYXRlU2lnbmFsIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgc2hpa2lUaGVtZSB9IGZyb20gJy4vdGhlbWUuanMnXG5cbmNvbnN0IExBTkdTID0ge1xuICBqczogJ2pzJywgbWpzOiAnanMnLCBjanM6ICdqcycsIGpzeDogJ2pzeCcsIHRzOiAndHMnLCB0c3g6ICd0c3gnLFxuICBqc29uOiAnanNvbicsIGpzb25sOiAnanNvbicsIG1kOiAnbWQnLCBweTogJ3B5dGhvbicsIHJiOiAncnVieScsIGdvOiAnZ28nLFxuICByczogJ3J1c3QnLCBjOiAnYycsIGg6ICdjJywgY3BwOiAnY3BwJywgamF2YTogJ2phdmEnLCBjc3M6ICdjc3MnLFxuICBodG1sOiAnaHRtbCcsIHZ1ZTogJ3Z1ZScsIHNoOiAnYmFzaCcsIGJhc2g6ICdiYXNoJywgenNoOiAnYmFzaCcsXG4gIHltbDogJ3lhbWwnLCB5YW1sOiAneWFtbCcsIHRvbWw6ICd0b21sJywgc3FsOiAnc3FsJywgc3ZlbHRlOiAnc3ZlbHRlJyxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhbmdGb3JQYXRoKHBhdGgpIHtcbiAgY29uc3QgZXh0ID0gU3RyaW5nKHBhdGgpLnNwbGl0KCcuJykucG9wKCkudG9Mb3dlckNhc2UoKVxuICByZXR1cm4gTEFOR1NbZXh0XSB8fCAndHh0J1xufVxuXG5jb25zdCBjYWNoZSA9IG5ldyBNYXAoKVxuY29uc3QgcGVuZGluZyA9IG5ldyBTZXQoKVxuY29uc3QgZmFpbGVkID0gbmV3IFNldCgpXG5jb25zdCBbdmVyc2lvbiwgc2V0VmVyc2lvbl0gPSBjcmVhdGVTaWduYWwoMClcblxuZXhwb3J0IGNvbnN0IGhpZ2hsaWdodFZlcnNpb24gPSB2ZXJzaW9uXG5cbmV4cG9ydCBmdW5jdGlvbiBoaWdobGlnaHQoY29kZSwgbGFuZykge1xuICBjb25zdCBzYWZlTGFuZyA9IGxhbmcgJiYgIWZhaWxlZC5oYXMobGFuZykgPyBsYW5nIDogJ3R4dCdcbiAgY29uc3QgdGhlbWUgPSBzaGlraVRoZW1lKClcbiAgcmV0dXJuIGNvZGVcbiAgICAuc3BsaXQoJ1xcbicpXG4gICAgLm1hcCgobGluZSkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gYCR7dGhlbWV9XFxuJHtzYWZlTGFuZ31cXG4ke2xpbmV9YFxuICAgICAgaWYgKGNhY2hlLmhhcyhrZXkpKSByZXR1cm4gY2FjaGUuZ2V0KGtleSlcbiAgICAgIHdhcm0obGluZSwgc2FmZUxhbmcsIHRoZW1lLCBrZXkpXG4gICAgICByZXR1cm4gbGluZVxuICAgIH0pXG4gICAgLmpvaW4oJ1xcbicpXG59XG5cbmZ1bmN0aW9uIHdhcm0obGluZSwgbGFuZywgdGhlbWUsIGtleSkge1xuICBpZiAocGVuZGluZy5oYXMoa2V5KSkgcmV0dXJuXG4gIHBlbmRpbmcuYWRkKGtleSlcbiAgY29kZVRvQU5TSShsaW5lLCBsYW5nLCB0aGVtZSlcbiAgICAudGhlbigoYW5zaSkgPT4gY2FjaGUuc2V0KGtleSwgYW5zaS5yZXBsYWNlKC9cXG4kLywgJycpKSlcbiAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgZmFpbGVkLmFkZChsYW5nKVxuICAgICAgY2FjaGUuc2V0KGtleSwgbGluZSlcbiAgICB9KVxuICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgIHBlbmRpbmcuZGVsZXRlKGtleSlcbiAgICAgIHNldFZlcnNpb24oKHYpID0+IHYgKyAxKVxuICAgIH0pXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBEaWZmLCBlYXNlLCBIb3Jpem9udGFsU2Nyb2xsQm94LCBsaW5lYXIsIE1hcmtkb3duLCBTY3JvbGxCb3gsIFNwaW5uZXIsIHVzZUFuaW1hdGVkLCB1c2VIaXRUZXN0LCB1c2VJbnB1dCwgdXNlTW91c2UgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBhY2NlbnQsIEZHLCBGR19TT0ZULCBNVVRFRCwgUEFORUxfQkcsIFNFTEVDVF9CRywgUkVELCBHUkVFTiwgUEVFUiB9IGZyb20gJy4vdGhlbWUuanMnXG5pbXBvcnQgeyBoaWdobGlnaHQsIGxhbmdGb3JQYXRoIH0gZnJvbSAnLi9oaWdobGlnaHQuanMnXG5pbXBvcnQgeyBjb21wYWN0VHJhbnNjcmlwdFJ1bnMgfSBmcm9tICcuL3RyYW5zY3JpcHQtd2luZG93LmpzJ1xuXG5leHBvcnQgeyBkZWZhdWx0VGl0bGUgYXMgdWlUaXRsZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvdG9vbHMvcmVjb3JkZXIuanMnXG5cbmZ1bmN0aW9uIFByb3NlU25pcHBldCh7IHZhbHVlLCBsYW5ndWFnZSwgaGlnaGxpZ2h0OiBoaWdobGlnaHRDb2RlLCBjb2RlQmcgfSkge1xuICBjb25zdCBzaG93biA9IGhpZ2hsaWdodENvZGUgPyBoaWdobGlnaHRDb2RlKHZhbHVlLCBsYW5ndWFnZSkgOiB2YWx1ZVxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgYmc6IGNvZGVCZywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICA8dGV4dD57c2hvd259PC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIENvZGVTbmlwcGV0KHsgdmFsdWUsIGxhbmd1YWdlLCBoaWdobGlnaHQ6IGhpZ2hsaWdodENvZGUsIGNvZGVCZyB9KSB7XG4gIGNvbnN0IHNob3duID0gaGlnaGxpZ2h0Q29kZSA/IGhpZ2hsaWdodENvZGUodmFsdWUsIGxhbmd1YWdlKSA6IHZhbHVlXG4gIGNvbnN0IGNvbnRlbnRXaWR0aCA9IE1hdGgubWF4KDAsIC4uLnZhbHVlLnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUpID0+IFsuLi5saW5lXS5sZW5ndGgpKSArIDJcbiAgcmV0dXJuIChcbiAgICA8SG9yaXpvbnRhbFNjcm9sbEJveCBjb250ZW50V2lkdGg9e2NvbnRlbnRXaWR0aH0gc3R5bGU9e3sgYmc6IGNvZGVCZywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICB7c2hvd24uc3BsaXQoJ1xcbicpLm1hcCgobGluZSwga2V5KSA9PiAoXG4gICAgICAgICAgPHRleHQga2V5PXtrZXl9IHN0eWxlPXt7IG92ZXJmbG93OiAnbm93cmFwJyB9fT57bGluZSB8fCAnICd9PC90ZXh0PlxuICAgICAgICApKX1cbiAgICAgIDwvYm94PlxuICAgIDwvSG9yaXpvbnRhbFNjcm9sbEJveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBUcmFuc2NyaXB0Q29kZUJsb2NrKHByb3BzKSB7XG4gIGNvbnN0IGxhbmd1YWdlID0gcHJvcHMubGFuZ3VhZ2U/LnRvTG93ZXJDYXNlKClcbiAgY29uc3QgQ29tcG9uZW50ID0gWydtZCcsICdtYXJrZG93bicsICd0ZXh0JywgJ3R4dCcsICdwbGFpbnRleHQnXS5pbmNsdWRlcyhsYW5ndWFnZSkgPyBQcm9zZVNuaXBwZXQgOiBDb2RlU25pcHBldFxuICByZXR1cm4gPENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIGRpZmZQcmV2aWV3KGRpZmYsIHJldmVydCkge1xuICBpZiAoIWRpZmY/Lmh1bmtzPy5sZW5ndGgpIHJldHVybiB7IGJlZm9yZTogU3RyaW5nKHJldmVydD8uYmVmb3JlIHx8ICcnKSwgYWZ0ZXI6IFN0cmluZyhyZXZlcnQ/LmFmdGVyIHx8ICcnKSB9XG4gIGNvbnN0IGJlZm9yZSA9IFtdXG4gIGNvbnN0IGFmdGVyID0gW11cbiAgZGlmZi5odW5rcy5mb3JFYWNoKChodW5rLCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCkge1xuICAgICAgYmVmb3JlLnB1c2goJ1x1MjJFRicpXG4gICAgICBhZnRlci5wdXNoKCdcdTIyRUYnKVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgaHVuay5saW5lcykge1xuICAgICAgaWYgKGxpbmUudHlwZSAhPT0gJ2FkZCcpIGJlZm9yZS5wdXNoKGxpbmUudGV4dClcbiAgICAgIGlmIChsaW5lLnR5cGUgIT09ICdyZW1vdmUnKSBhZnRlci5wdXNoKGxpbmUudGV4dClcbiAgICB9XG4gIH0pXG4gIHJldHVybiB7IGJlZm9yZTogYmVmb3JlLmpvaW4oJ1xcbicpLCBhZnRlcjogYWZ0ZXIuam9pbignXFxuJykgfVxufVxuXG5mdW5jdGlvbiBkaWZmUHJldmlld0xpbmVzKGRpZmYsIHJldmVydCkge1xuICBpZiAoZGlmZj8uaHVua3M/Lmxlbmd0aCkgcmV0dXJuIGRpZmYuaHVua3MucmVkdWNlKChzdW0sIGgpID0+IHN1bSArIGgubGluZXMubGVuZ3RoLCAwKVxuICBjb25zdCBwcmV2aWV3ID0gZGlmZlByZXZpZXcoZGlmZiwgcmV2ZXJ0KVxuICByZXR1cm4gTWF0aC5tYXgocHJldmlldy5hZnRlci5zcGxpdCgnXFxuJykubGVuZ3RoLCBwcmV2aWV3LmJlZm9yZS5zcGxpdCgnXFxuJykubGVuZ3RoLCAyKVxufVxuXG5mdW5jdGlvbiBmbXREdXJhdGlvbihtcykge1xuICBpZiAobXMgPCA2MDAwMCkgcmV0dXJuIGAkeyhtcyAvIDEwMDApLnRvRml4ZWQoMil9c2BcbiAgY29uc3Qgc2VjcyA9IE1hdGgucm91bmQobXMgLyAxMDAwKVxuICByZXR1cm4gYCR7TWF0aC5mbG9vcihzZWNzIC8gNjApfW0gJHtzZWNzICUgNjB9c2Bcbn1cblxuZnVuY3Rpb24gZm10UnVubmluZyhtcykge1xuICBjb25zdCBzZWNzID0gTWF0aC5mbG9vcihtcyAvIDEwMDApXG4gIHJldHVybiBzZWNzIDwgNjAgPyBgJHtzZWNzfXNgIDogYCR7TWF0aC5mbG9vcihzZWNzIC8gNjApfW0gJHtzZWNzICUgNjB9c2Bcbn1cblxuZnVuY3Rpb24gbWl4Q29sb3IoZnJvbSwgdG8sIGFtb3VudCkge1xuICBjb25zdCByZ2IgPSAoY29sb3IpID0+IGNvbG9yPy5zdGFydHNXaXRoKCcjJykgJiYgY29sb3IubGVuZ3RoID09PSA3XG4gICAgPyBbMSwgMywgNV0ubWFwKChpKSA9PiBwYXJzZUludChjb2xvci5zbGljZShpLCBpICsgMiksIDE2KSlcbiAgICA6IFsxMjcsIDEyNywgMTI3XVxuICBjb25zdCBhID0gcmdiKGZyb20pXG4gIGNvbnN0IGIgPSByZ2IodG8pXG4gIHJldHVybiBgIyR7YS5tYXAoKHZhbHVlLCBpKSA9PiBNYXRoLnJvdW5kKHZhbHVlICsgKGJbaV0gLSB2YWx1ZSkgKiBhbW91bnQpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKX1gXG59XG5cbmNvbnN0IFRPT0xfREVTQ1JJUFRJT05fTElNSVQgPSA1XG5jb25zdCBCQVNIX09VVFBVVF9MSU5FUyA9IDEwXG5jb25zdCBUT09MX05BTUVfRkxBU0hfTVMgPSA5MDBcbmNvbnN0IERFU0NSSVBUSU9OX1JFVkVBTF9ERUxBWV9NUyA9IDUwMFxuY29uc3QgREVTQ1JJUFRJT05fUkVWRUFMX01TID0gNzAwXG5cbmZ1bmN0aW9uIGRlbGF5ZWRMaW5lYXIodCkge1xuICBjb25zdCBkZWxheSA9IERFU0NSSVBUSU9OX1JFVkVBTF9ERUxBWV9NUyAvIChERVNDUklQVElPTl9SRVZFQUxfREVMQVlfTVMgKyBERVNDUklQVElPTl9SRVZFQUxfTVMpXG4gIHJldHVybiB0IDw9IGRlbGF5ID8gMCA6ICh0IC0gZGVsYXkpIC8gKDEgLSBkZWxheSlcbn1cblxuZnVuY3Rpb24gRGVzY3JpcHRpb25SZXZlYWwoeyBjaGlsZHJlbiwgcnVubmluZyB9KSB7XG4gIGNvbnN0IHJldmVhbCA9IHVzZUFuaW1hdGVkKHJ1bm5pbmcgPyAwIDogMSwgZWFzZShERVNDUklQVElPTl9SRVZFQUxfREVMQVlfTVMgKyBERVNDUklQVElPTl9SRVZFQUxfTVMsIGRlbGF5ZWRMaW5lYXIpKVxuICBpZiAoIXJ1bm5pbmcpIHJldmVhbC5zZXQoMSlcbiAgcmV0dXJuIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBtaXhDb2xvcihhY2NlbnQoKSwgRkcsIHJldmVhbCgpKSwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGZsZXhHcm93OiAxLCBtaW5XaWR0aDogMCB9fT57Y2hpbGRyZW59PC90ZXh0PlxufVxuXG5mdW5jdGlvbiBvdXRwdXRMaW5lcyh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gW11cbiAgY29uc3QgbGluZXMgPSB2YWx1ZS5zcGxpdCgnXFxuJylcbiAgaWYgKGxpbmVzLmF0KC0xKSA9PT0gJycpIGxpbmVzLnBvcCgpXG4gIHJldHVybiBsaW5lc1xufVxuXG5mdW5jdGlvbiBCYXNoT3V0cHV0KHsgdmFsdWUsIGxpbmVTdGFydCwgbGluZUNvdW50IH0pIHtcbiAgY29uc3QgbGluZXMgPSBvdXRwdXRMaW5lcyh2YWx1ZSlcbiAgaWYgKCFsaW5lcy5sZW5ndGgpIHJldHVybiBudWxsXG4gIGNvbnN0IHNob3duID0gbGluZXMuc2xpY2UoLUJBU0hfT1VUUFVUX0xJTkVTKVxuICBjb25zdCBmaXJzdCA9IGxpbmVTdGFydCB8fCAobGluZUNvdW50ID8gbGluZUNvdW50IC0gc2hvd24ubGVuZ3RoICsgMSA6IGxpbmVzLmxlbmd0aCAtIHNob3duLmxlbmd0aCArIDEpXG4gIGNvbnN0IGxhc3QgPSBsaW5lQ291bnQgfHwgZmlyc3QgKyBzaG93bi5sZW5ndGggLSAxXG4gIGNvbnN0IGd1dHRlcldpZHRoID0gU3RyaW5nKGxhc3QpLmxlbmd0aFxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIHtzaG93bi5tYXAoKGxpbmUsIGkpID0+IChcbiAgICAgICAgPGJveCBrZXk9e2ZpcnN0ICsgaX0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtTdHJpbmcoZmlyc3QgKyBpKS5wYWRTdGFydChndXR0ZXJXaWR0aCl9IGB9PC90ZXh0PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57bGluZSB8fCAnICd9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICkpfVxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIENvbXBhY3RUb29sU2lnbih7IHRvb2wgfSkge1xuICBpZiAodG9vbC5uYW1lICE9PSAnYmFzaCcpIHJldHVybiA8dGV4dD57JyAgJ308L3RleHQ+XG4gIGlmICh0b29sLmJhY2tncm91bmQpIHJldHVybiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+eydcdTIxQUEgJ308L3RleHQ+XG4gIGlmICh0b29sLnN0YXR1cyA9PT0gJ3J1bm5pbmcnKSByZXR1cm4gPGJveCBzdHlsZT17eyB3aWR0aDogMiB9fT48U3Bpbm5lciBjb2xvcj17YWNjZW50KCl9IC8+PC9ib3g+XG4gIGlmICh0b29sLmV4aXRDb2RlID09PSAwKSByZXR1cm4gPHRleHQgc3R5bGU9e3sgY29sb3I6IEdSRUVOIH19PnsnXHUyNzEzICd9PC90ZXh0PlxuICBpZiAodG9vbC5leGl0Q29kZSAhPSBudWxsKSByZXR1cm4gPHRleHQgc3R5bGU9e3sgY29sb3I6IFJFRCB9fT57J1x1MDBENyAnfTwvdGV4dD5cbiAgcmV0dXJuIDx0ZXh0PnsnICAnfTwvdGV4dD5cbn1cblxuZnVuY3Rpb24gVG9vbEdyb3VwKHsgaXRlbSwgdmVyYm9zZSB9KSB7XG4gIGNvbnN0IGxhdGVzdENhbGxJZCA9IGl0ZW0udG9vbHMuYXQoLTEpPy5jYWxsSWRcbiAgY29uc3QgZ2xvdyA9IHVzZUFuaW1hdGVkKDAsIGVhc2UoVE9PTF9OQU1FX0ZMQVNIX01TLCBsaW5lYXIpKVxuICBpZiAobGF0ZXN0Q2FsbElkICE9PSBnbG93Ll9jYWxsSWQpIHtcbiAgICBnbG93Ll9jYWxsSWQgPSBsYXRlc3RDYWxsSWRcbiAgICBpZiAoaXRlbS5hY3RpdmUpIHtcbiAgICAgIGdsb3cuc25hcCgxKVxuICAgICAgZ2xvdy5zZXQoMClcbiAgICB9XG4gIH1cblxuICBpZiAodmVyYm9zZSkge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICB7KGl0ZW0uaXRlbXMgfHwgaXRlbS50b29scykubWFwKChlbnRyeSwgaSkgPT4gZW50cnkua2luZCA9PT0gJ3Rob3VnaHRzJ1xuICAgICAgICAgID8gPE1lc3NhZ2Uga2V5PXtpfSBpdGVtPXtlbnRyeX0gdmVyYm9zZSAvPlxuICAgICAgICAgIDogPFRvb2xDYXJkIGtleT17aX0gey4uLmVudHJ5fSB2ZXJib3NlIC8+KX1cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGNvdW50cyA9IG5ldyBNYXAoKVxuICBmb3IgKGNvbnN0IHRvb2wgb2YgaXRlbS50b29scykgY291bnRzLnNldCh0b29sLm5hbWUsIChjb3VudHMuZ2V0KHRvb2wubmFtZSkgfHwgMCkgKyAxKVxuICBjb25zdCBlbnRyaWVzID0gWy4uLmNvdW50c11cbiAgY29uc3QgdG90YWxNcyA9IGl0ZW0udG9vbHMucmVkdWNlKChzdW0sIHRvb2wpID0+IHN1bSArICh0b29sLmR1cmF0aW9uTXMgfHwgMCksIDApXG4gIGNvbnN0IGxhdGVzdE5hbWUgPSBpdGVtLnRvb2xzLmF0KC0xKT8ubmFtZVxuICBjb25zdCBhY3Rpdml0eSA9IChpdGVtLml0ZW1zIHx8IGl0ZW0udG9vbHMpLm1hcCgoZW50cnkpID0+IGVudHJ5LmtpbmQgPT09ICd0aG91Z2h0cydcbiAgICA/IHsgLi4uZW50cnksIG5hbWU6ICd0aG91Z2h0cycsIGRlc2NyaXB0aW9uOiBlbnRyeS50ZXh0LnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCksIHRob3VnaHQ6IHRydWUgfVxuICAgIDogZW50cnkpLmZpbHRlcigoZW50cnkpID0+IGVudHJ5LmRlc2NyaXB0aW9uKVxuICBjb25zdCBkZXNjcmlwdGlvbnMgPSBhY3Rpdml0eS5zbGljZSgtVE9PTF9ERVNDUklQVElPTl9MSU1JVClcbiAgY29uc3QgaGlkZGVuRGVzY3JpcHRpb25zID0gYWN0aXZpdHkubGVuZ3RoIC0gZGVzY3JpcHRpb25zLmxlbmd0aFxuICBjb25zdCB0b29sTmFtZVdpZHRoID0gTWF0aC5tYXgoMCwgLi4uZGVzY3JpcHRpb25zLm1hcCgoZW50cnkpID0+IGVudHJ5Lm5hbWUubGVuZ3RoKSlcbiAgY29uc3QgdmlzaWJsZUJhc2ggPSBpdGVtLmFjdGl2ZSAmJiBpdGVtLnRvb2xzLmF0KC0xKT8ubmFtZSA9PT0gJ2Jhc2gnID8gaXRlbS50b29scy5hdCgtMSkgOiBudWxsXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgYWxpZ25JdGVtczogJ2ZsZXgtc3RhcnQnIH19PlxuICAgICAgICB7aXRlbS5hY3RpdmUgPyA8U3Bpbm5lciBjb2xvcj17YWNjZW50KCl9IC8+IDogPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Plx1MjcxMzwvdGV4dD59XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGZsZXhXcmFwOiAnd3JhcCcsIGZsZXhHcm93OiAxLCBtYXJnaW5SaWdodDogMiB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogaXRlbS5hY3RpdmUgPyBGRyA6IE1VVEVEIH19PiBDYWxsZWQgPC90ZXh0PlxuICAgICAgICAgIHtlbnRyaWVzLm1hcCgoW25hbWUsIGNvdW50XSwgaSkgPT4gKFxuICAgICAgICAgICAgPHRleHQga2V5PXtuYW1lfSBzdHlsZT17eyBjb2xvcjogaXRlbS5hY3RpdmUgJiYgbmFtZSA9PT0gbGF0ZXN0TmFtZSA/IG1peENvbG9yKEZHLCBhY2NlbnQoKSwgZ2xvdygpKSA6IGl0ZW0uYWN0aXZlID8gRkcgOiBNVVRFRCB9fT5cbiAgICAgICAgICAgICAge2Ake2kgPyAnLCAnIDogJyd9JHtuYW1lfSR7Y291bnQgPT09IDEgPyAnJyA6IGAgJHtjb3VudH0gdGltZXNgfWB9XG4gICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvYm94PlxuICAgICAgICB7dG90YWxNcyA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBmbGV4U2hyaW5rOiAwIH19PntmbXREdXJhdGlvbih0b3RhbE1zKX08L3RleHQ+fVxuICAgICAgPC9ib3g+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nTGVmdDogMiB9fT5cbiAgICAgICAge2hpZGRlbkRlc2NyaXB0aW9ucyA+IDAgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICA8dGV4dD57JyAnLnJlcGVhdCh0b29sTmFtZVdpZHRoICsgNCl9PC90ZXh0PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgLi4uJHtoaWRkZW5EZXNjcmlwdGlvbnN9IG1vcmVgfTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgICAge2Rlc2NyaXB0aW9ucy5tYXAoKHRvb2wsIGkpID0+IChcbiAgICAgICAgICA8Ym94IGtleT17dG9vbC5jYWxsSWQgfHwgYHRob3VnaHQtJHtpfWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAge3Rvb2wudGhvdWdodCA/IDx0ZXh0PnsnICAnfTwvdGV4dD4gOiA8Q29tcGFjdFRvb2xTaWduIHRvb2w9e3Rvb2x9IC8+fVxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRvb2wudGhvdWdodCB9fT57YCR7dG9vbC5uYW1lLnBhZFN0YXJ0KHRvb2xOYW1lV2lkdGgpfSAgYH08L3RleHQ+XG4gICAgICAgICAgICB7dG9vbC50aG91Z2h0XG4gICAgICAgICAgICAgID8gPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PjxNYXJrZG93biB0ZXh0PXt0b29sLmRlc2NyaXB0aW9ufSBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0gLz48L2JveD5cbiAgICAgICAgICAgICAgOiA8RGVzY3JpcHRpb25SZXZlYWwgcnVubmluZz17dG9vbC5zdGF0dXMgPT09ICdydW5uaW5nJ30+e3Rvb2wuZGVzY3JpcHRpb259PC9EZXNjcmlwdGlvblJldmVhbD59XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICkpfVxuICAgICAgICB7dmlzaWJsZUJhc2g/LnRpdGxlICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRywgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2hpZ2hsaWdodCh2aXNpYmxlQmFzaC50aXRsZSwgJ2Jhc2gnKX08L3RleHQ+fVxuICAgICAgICB7dmlzaWJsZUJhc2g/LmZ1bGxPdXRwdXQgJiYgPEJhc2hPdXRwdXQgdmFsdWU9e3Zpc2libGVCYXNoLmZ1bGxPdXRwdXR9IGxpbmVTdGFydD17dmlzaWJsZUJhc2gub3V0cHV0TGluZVN0YXJ0fSBsaW5lQ291bnQ9e3Zpc2libGVCYXNoLm91dHB1dExpbmVDb3VudH0gLz59XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBUb29sQ2FyZCh7IG5hbWUsIHRpdGxlLCB0aXRsZUxhbmcsIGRlc2NyaXB0aW9uLCBzdGF0dXMsIGRpZmYsIHJldmVydCwgZnVsbE91dHB1dCwgb3V0cHV0TGluZVN0YXJ0LCBvdXRwdXRMaW5lQ291bnQsIGVycm9yLCBiYWNrZ3JvdW5kLCB2ZXJib3NlLCBzdGFydGVkQXQsIGR1cmF0aW9uTXMgfSkge1xuICBjb25zdCBzaG93blRpdGxlID0gbmFtZSA9PT0gJ2Jhc2gnID8gbnVsbCA6IHRpdGxlTGFuZyAmJiB0aXRsZSA/IGhpZ2hsaWdodCh0aXRsZSwgdGl0bGVMYW5nKSA6IHRpdGxlXG4gIGNvbnN0IGlubGluZURlc2NyaXB0aW9uID0gIXNob3duVGl0bGVcbiAgY29uc3QgcHJldmlldyA9IGRpZmZQcmV2aWV3KGRpZmYsIHJldmVydClcbiAgY29uc3QgcnVubmluZyA9IHN0YXR1cyA9PT0gJ3J1bm5pbmcnXG4gIGNvbnN0IGludGVycnVwdGVkID0gc3RhdHVzID09PSAnaW50ZXJydXB0ZWQnXG4gIGNvbnN0IHJldmVydGVkID0gc3RhdHVzID09PSAncmV2ZXJ0ZWQnXG4gIGNvbnN0IGZhaWxlZCA9IHN0YXR1cyA9PT0gJ2Vycm9yJ1xuICBjb25zdCBvdXRMaW5lcyA9IGZ1bGxPdXRwdXQgPyBmdWxsT3V0cHV0LnNwbGl0KCdcXG4nKSA6IG51bGxcblxuICBjb25zdCBlbGFwc2VkID0gcnVubmluZyAmJiBzdGFydGVkQXQgPyBEYXRlLm5vdygpIC0gc3RhcnRlZEF0IDogMFxuICBjb25zdCB0b29rID0gIXJ1bm5pbmcgJiYgIWJhY2tncm91bmQgJiYgZHVyYXRpb25NcyAhPSBudWxsID8gZm10RHVyYXRpb24oZHVyYXRpb25NcykgOiBudWxsXG5cbiAgY29uc3QgaW5mbyA9IHJ1bm5pbmcgPyAoZWxhcHNlZCA+PSA1MDAwID8gYHJ1bm5pbmcgKCR7Zm10UnVubmluZyhlbGFwc2VkKX0pYCA6ICdydW5uaW5nJylcbiAgICA6IGludGVycnVwdGVkID8gJ2ludGVycnVwdGVkJ1xuICAgIDogcmV2ZXJ0ZWQgPyAncmV2ZXJ0ZWQnXG4gICAgOiBmYWlsZWQgPyBgZmFpbGVkJHt0b29rID8gYCAgJHt0b29rfWAgOiAnJ31gXG4gICAgOiBiYWNrZ3JvdW5kID8gJ2JhY2tncm91bmQgIHNoZWxsIGxpc3RlZCBiZWxvdydcbiAgICA6IGRpZmYgPyBgKyR7ZGlmZi5hZGRpdGlvbnN9IC0ke2RpZmYuZGVsZXRpb25zfSR7dG9vayA/IGAgICR7dG9va31gIDogJyd9YFxuICAgIDogb3V0TGluZXMgPyBgJHtvdXRwdXRMaW5lQ291bnQgfHwgb3V0TGluZXMubGVuZ3RofSAkeyhvdXRwdXRMaW5lQ291bnQgfHwgb3V0TGluZXMubGVuZ3RoKSA9PT0gMSA/ICdsaW5lJyA6ICdsaW5lcyd9JHt0b29rID8gYCAgJHt0b29rfWAgOiAnJ31gXG4gICAgOiBgZG9uZSR7dG9vayA/IGAgICR7dG9va31gIDogJyd9YFxuXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAxLCBvdmVyZmxvdzogJ2NsaXAnIH19PlxuICAgICAgICB7cnVubmluZ1xuICAgICAgICAgID8gPFNwaW5uZXIgY29sb3I9e2FjY2VudCgpfSAvPlxuICAgICAgICAgIDogPHRleHQgc3R5bGU9e3sgY29sb3I6IGludGVycnVwdGVkIHx8IGZhaWxlZCA/IFJFRCA6IHJldmVydGVkID8gTVVURUQgOiBhY2NlbnQoKSB9fT57aW50ZXJydXB0ZWQgPyAnXHUyNzE3JyA6IGZhaWxlZCA/ICdcdTI3MTcnIDogcmV2ZXJ0ZWQgPyAnXHUyMUE5JyA6ICdcdTI3MTMnfTwvdGV4dD59XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgZmxleFNocmluazogMCB9fT57YCR7bmFtZS5wYWRFbmQoNSl9IGB9PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBtaW5XaWR0aDogMCwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogRkcgfX0+e3Nob3duVGl0bGUgfHwgZGVzY3JpcHRpb24gfHwgbmFtZX08L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGZsZXhTaHJpbms6IDAsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntgICAke2luZm99YH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIHtkZXNjcmlwdGlvbiAmJiAhaW5saW5lRGVzY3JpcHRpb24gJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IHBhZGRpbmdMZWZ0OiA4IH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2Rlc2NyaXB0aW9ufTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgICAge25hbWUgPT09ICdiYXNoJyAmJiB0aXRsZSAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgcGFkZGluZ0xlZnQ6IDggfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHLCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57aGlnaGxpZ2h0KHRpdGxlLCB0aXRsZUxhbmcgfHwgJ2Jhc2gnKX08L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICAgIHtmYWlsZWQgJiYgZXJyb3IgJiYgKFxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntgICAke2Vycm9yfWB9PC90ZXh0PlxuICAgICAgKX1cbiAgICAgIHtyZXZlcnQgJiYgIXJ1bm5pbmcgJiYgIXJldmVydGVkICYmICEoZGlmZiAmJiBkaWZmLmFkZGl0aW9ucyA9PT0gMCAmJiBkaWZmLmRlbGV0aW9ucyA9PT0gMCkgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6IGRpZmZQcmV2aWV3TGluZXMoZGlmZiwgcmV2ZXJ0KSwgbWFyZ2luVG9wOiAxLCBwYWRkaW5nTGVmdDogOCB9fT5cbiAgICAgICAgICA8RGlmZlxuICAgICAgICAgICAgYmVmb3JlPXtwcmV2aWV3LmJlZm9yZX1cbiAgICAgICAgICAgIGFmdGVyPXtwcmV2aWV3LmFmdGVyfVxuICAgICAgICAgICAgbGFuZ3VhZ2U9e2xhbmdGb3JQYXRoKHJldmVydC5wYXRoKX1cbiAgICAgICAgICAgIGhpZ2hsaWdodD17aGlnaGxpZ2h0fVxuICAgICAgICAgICAgY29udGV4dD17M31cbiAgICAgICAgICAgIGZvbGRzPXtmYWxzZX1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgc2Nyb2xsYmFyPXtmYWxzZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgICB7bmFtZSA9PT0gJ2Jhc2gnICYmIGZ1bGxPdXRwdXQgJiYgPGJveCBzdHlsZT17eyBwYWRkaW5nTGVmdDogOCB9fT48QmFzaE91dHB1dCB2YWx1ZT17ZnVsbE91dHB1dH0gbGluZVN0YXJ0PXtvdXRwdXRMaW5lU3RhcnR9IGxpbmVDb3VudD17b3V0cHV0TGluZUNvdW50fSAvPjwvYm94Pn1cbiAgICAgIHtvdXRMaW5lcyAmJiB2ZXJib3NlICYmIG5hbWUgIT09ICdiYXNoJyAmJiAhcnVubmluZyAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICB7b3V0TGluZXMuc2xpY2UoMCwgMjAwKS5tYXAoKGxpbmUsIGkpID0+IChcbiAgICAgICAgICAgIDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntsaW5lIHx8ICcgJ308L3RleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgICAge291dExpbmVzLmxlbmd0aCA+IDIwMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2BcdTIwMjYgJHtvdXRMaW5lcy5sZW5ndGggLSAyMDB9IG1vcmUgbGluZXNgfTwvdGV4dD59XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBEZWxpYmVyYXRpb25UdXJuKHsgaXRlbSwgdmVyYm9zZSwgY29tcGFjdFRvb2xIaXN0b3J5ID0gZmFsc2UsIHBhaXJlZCA9IGZhbHNlLCBib3JkZXIgPSB0cnVlLCBwYW5lSGVpZ2h0LCBmb2N1c2VkID0gZmFsc2UsIG9uRm9jdXMgfSkge1xuICBjb25zdCBwYXJ0aWNpcGFudEEgPSBpdGVtLnJvbGUgPT09ICdwYXJ0aWNpcGFudC1hJyB8fCBpdGVtLnJvbGUgPT09ICdwcm9wb3NlcidcbiAgY29uc3Qgc3ludGhlc2lzID0gaXRlbS5yb2xlID09PSAnc3ludGhlc2lzJ1xuICBjb25zdCBsYWJlbCA9IHN5bnRoZXNpcyA/ICdTeW50aGVzaXMnIDogYCR7cGFydGljaXBhbnRBID8gJ1BhcnRpY2lwYW50IEEnIDogJ1BhcnRpY2lwYW50IEInfSAgcm91bmQgJHtpdGVtLnJvdW5kfWBcbiAgY29uc3QgdGV4dCA9IGl0ZW0uaW50ZXJydXB0ZWQgPyBgJHtpdGVtLnRleHR9ICooaW50ZXJydXB0ZWQpKmAgOiBpdGVtLnRleHRcbiAgY29uc3QgW29mZnNldCwgc2V0T2Zmc2V0XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbZm9sbG93LCBzZXRGb2xsb3ddID0gY3JlYXRlU2lnbmFsKHRydWUpXG4gIGNvbnN0IGhpdFRlc3QgPSB1c2VIaXRUZXN0KClcbiAgdXNlTW91c2UoKGV2ZW50KSA9PiB7XG4gICAgaWYgKHBhbmVIZWlnaHQgJiYgaGl0VGVzdChldmVudC54LCBldmVudC55KSAmJiAoZXZlbnQuYWN0aW9uID09PSAnc2Nyb2xsJyB8fCBldmVudC5hY3Rpb24gPT09ICdwcmVzcycpKSBvbkZvY3VzPy4oKVxuICB9KVxuICBjb25zdCB0b29scyA9IGNvbXBhY3RUb29sSGlzdG9yeSA/IGNvbXBhY3RUcmFuc2NyaXB0UnVucyhpdGVtLnRvb2xzIHx8IFtdLCAhIWl0ZW0uYWN0aXZlICYmICFpdGVtLnRleHQpIDogaXRlbS50b29scyB8fCBbXVxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtaW5XaWR0aDogMCwgcGFkZGluZ1g6IHBhaXJlZCA/IDAgOiAyLCBoZWlnaHQ6IHBhbmVIZWlnaHQsIGJnOiBwYWlyZWQgPyBQQU5FTF9CRyA6IHVuZGVmaW5lZCB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGZsZXhHcm93OiBwYW5lSGVpZ2h0ID8gMSA6IHVuZGVmaW5lZCB9fT5cbiAgICAgICAge2JvcmRlciAmJiA8Ym94IHN0eWxlPXt7IHdpZHRoOiAxLCBmbGV4U2hyaW5rOiAwLCBiZzogc3ludGhlc2lzIHx8IHBhcnRpY2lwYW50QSA/IGFjY2VudCgpIDogTVVURUQgfX0gLz59XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtaW5XaWR0aDogMCwgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxLCBiZzogc3ludGhlc2lzID8gU0VMRUNUX0JHIDogcGFydGljaXBhbnRBIHx8IHBhaXJlZCA/IFBBTkVMX0JHIDogdW5kZWZpbmVkIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkIHx8IHN5bnRoZXNpcyB8fCBwYXJ0aWNpcGFudEEgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiB0cnVlIH19PntsYWJlbH08L3RleHQ+XG4gICAgICAgICAge3BhbmVIZWlnaHQgPyAoXG4gICAgICAgICAgICA8U2Nyb2xsQm94XG4gICAgICAgICAgICAgIHN0eWxlPXt7IGZsZXhHcm93OiAxIH19XG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICAgIHNjcm9sbE9mZnNldD17Zm9sbG93KCkgPyAxZTkgOiBvZmZzZXQoKX1cbiAgICAgICAgICAgICAgb25TY3JvbGw9eyhuZXh0LCBtZXRhKSA9PiB7IHNldE9mZnNldChuZXh0KTsgc2V0Rm9sbG93KCEhbWV0YT8uYXRCb3R0b20pIH19XG4gICAgICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8RGVsaWJlcmF0aW9uQ29udGVudCB0b29scz17dG9vbHN9IHRleHQ9e3RleHR9IHZlcmJvc2U9e3ZlcmJvc2V9IC8+XG4gICAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgICApIDogPERlbGliZXJhdGlvbkNvbnRlbnQgdG9vbHM9e3Rvb2xzfSB0ZXh0PXt0ZXh0fSB2ZXJib3NlPXt2ZXJib3NlfSAvPn1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBEZWxpYmVyYXRpb25Db250ZW50KHsgdG9vbHMsIHRleHQsIHZlcmJvc2UgfSkge1xuICByZXR1cm4gPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICB7dG9vbHMubWFwKCh0b29sKSA9PiA8TWVzc2FnZSBrZXk9e3Rvb2wuY2FsbElkfSBpdGVtPXt0b29sfSB2ZXJib3NlPXt2ZXJib3NlfSAvPil9XG4gICAgICAgICAge3RleHQgJiYgdG9vbHMubGVuZ3RoID4gMCAmJiA8dGV4dD4gPC90ZXh0Pn1cbiAgICAgICAgICB7dGV4dCAmJiAoXG4gICAgICAgICAgICA8TWFya2Rvd25cbiAgICAgICAgICAgICAgdGV4dD17dGV4dH1cbiAgICAgICAgICAgICAgaGlnaGxpZ2h0PXtoaWdobGlnaHR9XG4gICAgICAgICAgICAgIGNvZGVCZz17bnVsbH1cbiAgICAgICAgICAgICAgY29kZUJsb2NrPXtUcmFuc2NyaXB0Q29kZUJsb2NrfVxuICAgICAgICAgICAgICB0YWJsZUJvcmRlckNvbG9yPXtNVVRFRH1cbiAgICAgICAgICAgICAgdGFibGVSb3dIb3ZlckJnPXtQQU5FTF9CR31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgPC9ib3g+XG59XG5cbmZ1bmN0aW9uIGRlbGliZXJhdGlvblJvd3ModHVybnMpIHtcbiAgY29uc3Qgcm93cyA9IFtdXG4gIGZvciAoY29uc3QgdHVybiBvZiB0dXJucykge1xuICAgIGlmICh0dXJuLnJvbGUgPT09ICdzeW50aGVzaXMnIHx8ICF0dXJuLnBhcmFsbGVsR3JvdXApIHtcbiAgICAgIHJvd3MucHVzaChbdHVybl0pXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBleGlzdGluZyA9IHJvd3MuZmluZCgocm93KSA9PiByb3dbMF0/LnBhcmFsbGVsR3JvdXAgPT09IHR1cm4ucGFyYWxsZWxHcm91cClcbiAgICBpZiAoZXhpc3RpbmcpIGV4aXN0aW5nLnB1c2godHVybilcbiAgICBlbHNlIHJvd3MucHVzaChbdHVybl0pXG4gIH1cbiAgcmV0dXJuIHJvd3Ncbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERlbGliZXJhdGlvbkV4Y2hhbmdlKHsgdHVybnMsIHZlcmJvc2UsIHdpZGUsIGNvbXBhY3RUb29sSGlzdG9yeSA9IGZhbHNlLCB2aWV3cG9ydEhlaWdodCwgZm9jdXNlZCA9IGZhbHNlLCBvbkZvY3VzIH0pIHtcbiAgY29uc3QgW3NlbGVjdGVkLCBzZXRTZWxlY3RlZF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgaWQgPSB0dXJuID0+IGAke3R1cm4ucm9sZX06JHt0dXJuLnJvdW5kID8/ICdzeW50aGVzaXMnfWBcbiAgY29uc3Qgc2VsZWN0ZWRJZCA9IHNlbGVjdGVkKCkgfHwgKHR1cm5zWzBdICYmIGlkKHR1cm5zWzBdKSlcbiAgY29uc3QgZm9jdXNUdXJuID0gdHVybiA9PiB7IHNldFNlbGVjdGVkKGlkKHR1cm4pKTsgb25Gb2N1cz8uKCkgfVxuICB1c2VJbnB1dChldmVudCA9PiB7XG4gICAgaWYgKCFmb2N1c2VkIHx8IChldmVudC5rZXkgIT09ICdsZWZ0JyAmJiBldmVudC5rZXkgIT09ICdyaWdodCcpKSByZXR1cm5cbiAgICBjb25zdCBpbmRleCA9IHR1cm5zLmZpbmRJbmRleCh0dXJuID0+IGlkKHR1cm4pID09PSBzZWxlY3RlZElkKVxuICAgIGNvbnN0IG5leHQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0dXJucy5sZW5ndGggLSAxLCBpbmRleCArIChldmVudC5rZXkgPT09ICdsZWZ0JyA/IC0xIDogMSkpKVxuICAgIGlmICh0dXJuc1tuZXh0XSkgZm9jdXNUdXJuKHR1cm5zW25leHRdKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIH0pXG4gIGNvbnN0IHBhbmVIZWlnaHQgPSB2aWV3cG9ydEhlaWdodCA/IE1hdGgubWF4KDYsIE1hdGguZmxvb3Iodmlld3BvcnRIZWlnaHQgKiAodHVybnMuc29tZSh0dXJuID0+IHR1cm4ucm9sZSA9PT0gJ3N5bnRoZXNpcycpID8gMC42IDogMSkpIC0gMSkgOiB1bmRlZmluZWRcbiAgY29uc3QgcGFuZVByb3BzID0gdHVybiA9PiAoeyBwYW5lSGVpZ2h0OiB0dXJuLnJvbGUgPT09ICdzeW50aGVzaXMnICYmIHZpZXdwb3J0SGVpZ2h0ID8gTWF0aC5tYXgoNiwgTWF0aC5mbG9vcih2aWV3cG9ydEhlaWdodCAqIDAuMzUpKSA6IHBhbmVIZWlnaHQsIGZvY3VzZWQ6IGZvY3VzZWQgJiYgc2VsZWN0ZWRJZCA9PT0gaWQodHVybiksIG9uRm9jdXM6ICgpID0+IGZvY3VzVHVybih0dXJuKSB9KVxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGdhcDogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAge2RlbGliZXJhdGlvblJvd3ModHVybnMpLm1hcCgocm93LCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBzeW50aGVzaXMgPSByb3dbMF0/LnJvbGUgPT09ICdzeW50aGVzaXMnXG4gICAgICAgIGlmICghd2lkZSB8fCBzeW50aGVzaXMpIHJldHVybiByb3cubWFwKCh0dXJuKSA9PiA8RGVsaWJlcmF0aW9uVHVybiBrZXk9e2Ake3R1cm4ucm9sZX06JHt0dXJuLnJvdW5kID8/ICdzeW50aGVzaXMnfWB9IGl0ZW09e3R1cm59IHZlcmJvc2U9e3ZlcmJvc2V9IGNvbXBhY3RUb29sSGlzdG9yeT17Y29tcGFjdFRvb2xIaXN0b3J5fSB7Li4ucGFuZVByb3BzKHR1cm4pfSAvPilcbiAgICAgICAgY29uc3QgbGVmdCA9IHJvdy5maW5kKCh0dXJuKSA9PiB0dXJuLnJvbGUgPT09ICdwYXJ0aWNpcGFudC1hJyB8fCB0dXJuLnJvbGUgPT09ICdwcm9wb3NlcicpXG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gcm93LmZpbmQoKHR1cm4pID0+IHR1cm4ucm9sZSA9PT0gJ3BhcnRpY2lwYW50LWInIHx8IHR1cm4ucm9sZSA9PT0gJ3Jldmlld2VyJylcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Ym94IGtleT17cm93WzBdPy5wYXJhbGxlbEdyb3VwIHx8IGAke3Jvd1swXT8ucm9sZX06JHtyb3dbMF0/LnJvdW5kfToke2luZGV4fWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCB3aWR0aDogJzEwMCUnLCBvdmVyZmxvdzogJ2NsaXAnLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgd2lkdGg6ICc1MCUnLCBtaW5XaWR0aDogMCwgb3ZlcmZsb3c6ICdjbGlwJyB9fT57bGVmdCAmJiA8RGVsaWJlcmF0aW9uVHVybiBpdGVtPXtsZWZ0fSB2ZXJib3NlPXt2ZXJib3NlfSBjb21wYWN0VG9vbEhpc3Rvcnk9e2NvbXBhY3RUb29sSGlzdG9yeX0gcGFpcmVkIGJvcmRlcj17ZmFsc2V9IHsuLi5wYW5lUHJvcHMobGVmdCl9IC8+fTwvYm94PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyB3aWR0aDogMSwgZmxleFNocmluazogMCB9fSAvPlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgbWluV2lkdGg6IDAsIG92ZXJmbG93OiAnY2xpcCcgfX0+e3JpZ2h0ICYmIDxEZWxpYmVyYXRpb25UdXJuIGl0ZW09e3JpZ2h0fSB2ZXJib3NlPXt2ZXJib3NlfSBjb21wYWN0VG9vbEhpc3Rvcnk9e2NvbXBhY3RUb29sSGlzdG9yeX0gcGFpcmVkIGJvcmRlcj17ZmFsc2V9IHsuLi5wYW5lUHJvcHMocmlnaHQpfSAvPn08L2JveD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1lc3NhZ2UoeyBpdGVtLCB2ZXJib3NlLCBzaG93TG9ja2VkID0gZmFsc2UgfSkge1xuICBpZiAoaXRlbS5raW5kID09PSAndG9vbC1ncm91cCcpIHJldHVybiA8VG9vbEdyb3VwIGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2V9IC8+XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3VzZXInICYmIGl0ZW0ub3JpZ2luID09PSAndmlldycpIHtcbiAgICBjb25zdCBsYWJlbCA9IC9eXFxbdmlldzogKFteXFxdXSspXFxdLy5leGVjKGl0ZW0udGV4dCk/LlsxXSB8fCAnaW1hZ2UnXG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2BcdTI3MTMgVmlld2VkICR7bGFiZWx9YH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnYWdlbnQtbm90aWNlLWdyb3VwJykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57YFx1MjY5OSAke2l0ZW0ubm90aWNlcy5sZW5ndGh9IGFnZW50cyBmaW5pc2hlZGB9PC90ZXh0PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIHt2ZXJib3NlICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgICB7aXRlbS5ub3RpY2VzLm1hcCgobm90aWNlLCBpKSA9PiAoXG4gICAgICAgICAgICAgIDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e25vdGljZS50ZXh0LnJlcGxhY2UoL15cXFtzeXN0ZW0gbm90aWZpY2F0aW9uXFxdXFxzKi8sICcnKX08L3RleHQ+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICd0b29sJykge1xuICAgIHJldHVybiA8VG9vbENhcmQgey4uLml0ZW19IHZlcmJvc2U9e3ZlcmJvc2V9IC8+XG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnc3VtbWFyeScpIHtcbiAgICBjb25zdCBsaW5lcyA9IGl0ZW0udGV4dC5zcGxpdCgnXFxuJylcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2l0ZW0uc291cmNlID09PSAnY29tcGFjdCcgPyAnXHUyNzI2IHN1bW1hcnkgIGNvbnZlcnNhdGlvbiBjb21wYWN0ZWQgYWJvdmUgdGhpcyBwb2ludCcgOiAnXHUyNzI2IHN1bW1hcnkgIHJld291bmQgY29udmVyc2F0aW9uJ308L3RleHQ+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7bGluZXMubGVuZ3RofSAke2xpbmVzLmxlbmd0aCA9PT0gMSA/ICdsaW5lJyA6ICdsaW5lcyd9YH08L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgICB7dmVyYm9zZSAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgICAge2xpbmVzLnNsaWNlKDAsIDUwMCkubWFwKChsaW5lLCBpKSA9PiAoXG4gICAgICAgICAgICAgIDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e2xpbmUgfHwgJyAnfTwvdGV4dD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgICAge2xpbmVzLmxlbmd0aCA+IDUwMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2BcdTIwMjYgJHtsaW5lcy5sZW5ndGggLSA1MDB9IG1vcmUgbGluZXNgfTwvdGV4dD59XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAndGhvdWdodHMnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgIDxNYXJrZG93biB0ZXh0PXtpdGVtLnRleHR9IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19IC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ2RlbGliZXJhdGlvbi10dXJuJykge1xuICAgIHJldHVybiA8Ym94IHN0eWxlPXt7IG1hcmdpblRvcDogMSB9fT48RGVsaWJlcmF0aW9uVHVybiBpdGVtPXtpdGVtfSB2ZXJib3NlPXt2ZXJib3NlfSAvPjwvYm94PlxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ25vdGljZScpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19PntgXHUyNjk5ICR7aXRlbS50ZXh0LnJlcGxhY2UoL15cXFtzeXN0ZW0gbm90aWZpY2F0aW9uXFxdXFxzKi8sICcnKX1gfTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdza2lsbCcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19PntgXHUyNzI2IHNraWxsOiAke2l0ZW0ubmFtZX1gfTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdzdGVlci10b29scycpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19PntgXHUyNTAwXHUyNTAwICR7aXRlbS5jb3VudH0gdG9vbCAke2l0ZW0uY291bnQgPT09IDEgPyAnaW50ZXJhY3Rpb24nIDogJ2ludGVyYWN0aW9ucyd9IGhpZGRlbiBcdTI1MDBcdTI1MDBgfTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdzaGVsbC1jb21tYW5kJykge1xuICAgIGNvbnN0IHNob3duID0gaGlnaGxpZ2h0KGl0ZW0udGV4dCwgJ2Jhc2gnKVxuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBib2xkOiB0cnVlIH19PnsnY29tbWFuZCd9PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nTGVmdDogMiB9fT5cbiAgICAgICAgICB7c2hvd24uc3BsaXQoJ1xcbicpLm1hcCgobGluZSwgaSkgPT4gPHRleHQga2V5PXtpfT57YCR7aSA9PT0gMCA/ICckICcgOiAnICAnfSR7bGluZSB8fCAnICd9YH08L3RleHQ+KX1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnc2hlbGwtb3V0cHV0Jykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBib2xkOiB0cnVlIH19Pnsnb3V0cHV0J308L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdMZWZ0OiAyIH19PlxuICAgICAgICAgIHtpdGVtLnRleHQuc3BsaXQoJ1xcbicpLm1hcCgobGluZSwgaSkgPT4gPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57bGluZSB8fCAnICd9PC90ZXh0Pil9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3BlZXInKSB7XG4gICAgY29uc3QgaW5jb21pbmcgPSBpdGVtLmRpcmVjdGlvbiA9PT0gJ2luY29taW5nJ1xuICAgIGNvbnN0IHVucmVhZCA9IGluY29taW5nICYmICFpdGVtLnJlYWRcbiAgICBjb25zdCBjb2xvciA9IGluY29taW5nICYmIGl0ZW0ucmVhZCA/IE1VVEVEIDogUEVFUlxuICAgIGNvbnN0IHN0YXR1cyA9IGluY29taW5nID8gYCAgJHt1bnJlYWQgPyAndW5yZWFkJyA6ICdyZWFkJ31gIDogYCAgJHtpdGVtLnN0YXR1cyB8fCAndW5rbm93bid9YFxuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nTGVmdDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogUEVFUiwgYm9sZDogdHJ1ZSB9fT57YEAke2l0ZW0uZnJvbS5uYW1lfSBcdTIxOTIgQCR7aXRlbS50by5uYW1lfSR7aXRlbS51cmdlbnQgPyAnICB1cmdlbnQnIDogJyd9YH08L3RleHQ+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3IsIGJvbGQ6IHVucmVhZCB9fT57c3RhdHVzfTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yIH19PntpdGVtLnRleHR9PC90ZXh0PlxuICAgICAgICB7aXRlbS5lcnJvciAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogUkVEIH19PntpdGVtLmVycm9yfTwvdGV4dD59XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAndXNlcicpIHtcbiAgICBjb25zdCBsYWJlbCA9IHNob3dMb2NrZWQgJiYgaXRlbS5sb2NrZWQgPyAnTG9ja2VkICBjb21wYWN0ZWQnIDogc2hvd0xvY2tlZCA/ICdVc2VyJyA6IG51bGxcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiAxLCBmbGV4U2hyaW5rOiAwLCBiZzogaXRlbS5zdGVlclNlbGVjdGVkID8gYWNjZW50KCkgOiBQQU5FTF9CRyB9fSAvPlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IGl0ZW0uc3RlZXJTZWxlY3RlZCA/IFNFTEVDVF9CRyA6IFBBTkVMX0JHLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIHBhZGRpbmdMZWZ0OiAxLCBwYWRkaW5nUmlnaHQ6IDIsIHBhZGRpbmdZOiAxIH19PlxuICAgICAgICAgICAge2xhYmVsICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiB0cnVlIH19PntsYWJlbH08L3RleHQ+fVxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PntpdGVtLnRleHR9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBpdGVtLmludGVycnVwdGVkID8gYCR7aXRlbS50ZXh0fSAqKGludGVycnVwdGVkKSpgIDogaXRlbS50ZXh0XG4gIGNvbnN0IGxhYmVsID0gc2hvd0xvY2tlZCAmJiBpdGVtLmxvY2tlZCA/ICdMb2NrZWQgIGNvbXBhY3RlZCcgOiBzaG93TG9ja2VkID8gJ0Fzc2lzdGFudCcgOiBudWxsXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiAxLCBmbGV4U2hyaW5rOiAwLCBiZzogaXRlbS5zdGVlclNlbGVjdGVkID8gYWNjZW50KCkgOiB1bmRlZmluZWQgfX0gLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIHBhZGRpbmdMZWZ0OiAxLCBwYWRkaW5nUmlnaHQ6IDIsIHBhZGRpbmdZOiBzaG93TG9ja2VkID8gMSA6IDAsIGJnOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBTRUxFQ1RfQkcgOiB1bmRlZmluZWQgfX0+XG4gICAgICAgICAge2xhYmVsICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiB0cnVlIH19PntsYWJlbH08L3RleHQ+fVxuICAgICAgICAgIDxNYXJrZG93blxuICAgICAgICAgICAgdGV4dD17dGV4dH1cbiAgICAgICAgICAgIGhpZ2hsaWdodD17aGlnaGxpZ2h0fVxuICAgICAgICAgICAgY29kZUJnPXtudWxsfVxuICAgICAgICAgICAgY29kZUJsb2NrPXtUcmFuc2NyaXB0Q29kZUJsb2NrfVxuICAgICAgICAgICAgdGFibGVCb3JkZXJDb2xvcj17TVVURUR9XG4gICAgICAgICAgICB0YWJsZVJvd0hvdmVyQmc9e1BBTkVMX0JHfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY29tcGFjdFRyYW5zY3JpcHRSdW5zKGl0ZW1zLCBhY3RpdmUgPSBmYWxzZSkge1xuICBjb25zdCByZXN1bHQgPSBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDspIHtcbiAgICBpZiAoaXRlbXNbaV0ua2luZCA9PT0gJ3Rvb2wnIHx8IGl0ZW1zW2ldLmtpbmQgPT09ICd0aG91Z2h0cycpIHtcbiAgICAgIGxldCBlbmQgPSBpICsgMVxuICAgICAgd2hpbGUgKGVuZCA8IGl0ZW1zLmxlbmd0aCAmJiAoaXRlbXNbZW5kXS5raW5kID09PSAndG9vbCcgfHwgaXRlbXNbZW5kXS5raW5kID09PSAndGhvdWdodHMnKSkgZW5kKytcbiAgICAgIGNvbnN0IHJ1biA9IGl0ZW1zLnNsaWNlKGksIGVuZClcbiAgICAgIGNvbnN0IHRvb2xzID0gcnVuLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5raW5kID09PSAndG9vbCcpXG4gICAgICByZXN1bHQucHVzaCh7IGtpbmQ6ICd0b29sLWdyb3VwJywgY2FsbElkOiB0b29scy5hdCgtMSk/LmNhbGxJZCwgaXRlbXM6IHJ1biwgdG9vbHMsIGFjdGl2ZTogYWN0aXZlICYmIGVuZCA9PT0gaXRlbXMubGVuZ3RoIH0pXG4gICAgICBpID0gZW5kXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoaXRlbXNbaV0ua2luZCA9PT0gJ25vdGljZScgJiYgaXRlbXNbaV0uYWdlbnRDb21wbGV0aW9uKSB7XG4gICAgICBsZXQgZW5kID0gaSArIDFcbiAgICAgIHdoaWxlIChlbmQgPCBpdGVtcy5sZW5ndGggJiYgaXRlbXNbZW5kXS5raW5kID09PSAnbm90aWNlJyAmJiBpdGVtc1tlbmRdLmFnZW50Q29tcGxldGlvbikgZW5kKytcbiAgICAgIGNvbnN0IHJ1biA9IGl0ZW1zLnNsaWNlKGksIGVuZClcbiAgICAgIHJlc3VsdC5wdXNoKHJ1bi5sZW5ndGggPT09IDEgPyBydW5bMF0gOiB7IGtpbmQ6ICdhZ2VudC1ub3RpY2UtZ3JvdXAnLCBub3RpY2VzOiBydW4gfSlcbiAgICAgIGkgPSBlbmRcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIHJlc3VsdC5wdXNoKGl0ZW1zW2krK10pXG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNjcmlwdFdpbmRvdyhpdGVtcywgc2l6ZSkge1xuICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIGl0ZW1zLmxlbmd0aCAtIHNpemUpXG4gIGNvbnN0IGhpZGRlbiA9IGl0ZW1zLnNsaWNlKDAsIHN0YXJ0KVxuICByZXR1cm4ge1xuICAgIGl0ZW1zOiBpdGVtcy5zbGljZShzdGFydCksXG4gICAgaGlkZGVuSXRlbXM6IGhpZGRlbi5sZW5ndGgsXG4gICAgaGlkZGVuQ291bnQ6IGhpZGRlbi5yZWR1Y2UoKHRvdGFsLCBpdGVtKSA9PiB0b3RhbCArIHNvdXJjZUl0ZW1Db3VudChpdGVtKSwgMCksXG4gIH1cbn1cblxuZnVuY3Rpb24gc291cmNlSXRlbUNvdW50KGl0ZW0pIHtcbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3Rvb2wtZ3JvdXAnKSByZXR1cm4gaXRlbS5pdGVtcy5sZW5ndGhcbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ2FnZW50LW5vdGljZS1ncm91cCcpIHJldHVybiBpdGVtLm5vdGljZXMubGVuZ3RoXG4gIGlmIChpdGVtLmtpbmQgPT09ICdzdGVlci10b29scycpIHJldHVybiBpdGVtLmNvdW50XG4gIHJldHVybiAxXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBUZXh0SW5wdXQsIHVzZUxheW91dCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICcuL3RyYW5zY3JpcHQuanN4J1xuaW1wb3J0IHsgYWNjZW50LCBGRywgTVVURUQsIFBBTkVMX0JHIH0gZnJvbSAnLi90aGVtZS5qcydcbmltcG9ydCB7IGNvbnZlcnNhdGlvbk1hdGNoZXMsIGhpZ2hsaWdodENvbnZlcnNhdGlvbiB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29udmVyc2F0aW9uLXNlYXJjaC5qcydcblxuZnVuY3Rpb24gU2Nyb2xsQW5jaG9yKHsgdGFyZ2V0IH0pIHtcbiAgY29uc3QgbGF5b3V0ID0gdXNlTGF5b3V0KClcbiAgdGFyZ2V0LmFuY2hvclkgPSBsYXlvdXQueVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBTZWFyY2hNZXNzYWdlKHsgaXRlbSwgdmVyYm9zZSwgY3VycmVudE1hdGNoLCBzZWFyY2ggfSkge1xuICBjb25zdCBsYXlvdXQgPSB1c2VMYXlvdXQoKVxuICBpZiAoY3VycmVudE1hdGNoKSBzZWFyY2guc2Nyb2xsVG9NYXRjaChsYXlvdXQsIGN1cnJlbnRNYXRjaClcbiAgcmV0dXJuIDxNZXNzYWdlIGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2V9IC8+XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb252ZXJzYXRpb25TZWFyY2goeyBmbSwgdmVyYm9zZSwgc2V0Rm9sbG93LCBzZXRPZmZzZXQgfSkge1xuICBjb25zdCBbYWN0aXZlLCBzZXRBY3RpdmVdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbcXVlcnksIHNldFF1ZXJ5XSA9IGNyZWF0ZVNpZ25hbCgnJylcbiAgY29uc3QgW2NvbW1pdHRlZCwgc2V0Q29tbWl0dGVkXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2luZGV4LCBzZXRJbmRleF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2VudGVyRm9jdXMsIHNldEVudGVyRm9jdXNdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2Nyb2xsUmVxdWVzdCwgc2V0U2Nyb2xsUmVxdWVzdF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3Njcm9sbF0gPSBjcmVhdGVTaWduYWwoeyBhbmNob3JZOiAwLCBrZXk6IG51bGwgfSlcblxuICBmdW5jdGlvbiByZWdpc3RlckZvY3VzKCkge1xuICAgIGlmICghYWN0aXZlKCkpIHJldHVyblxuICAgIGZtLml0ZW0oJ2NvbnZlcnNhdGlvbi1zZWFyY2gnKVxuICAgIGlmIChlbnRlckZvY3VzKCkpIHtcbiAgICAgIHNldEVudGVyRm9jdXMoZmFsc2UpXG4gICAgICBmbS5mb2N1cygnY29udmVyc2F0aW9uLXNlYXJjaCcpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb3BlbigpIHtcbiAgICBzZXRBY3RpdmUodHJ1ZSlcbiAgICBzZXRRdWVyeSgnJylcbiAgICBzZXRDb21taXR0ZWQoZmFsc2UpXG4gICAgc2V0SW5kZXgoMClcbiAgICBzZXRFbnRlckZvY3VzKHRydWUpXG4gIH1cblxuICBmdW5jdGlvbiBjbG9zZSh7IHJlc3RvcmVGb2N1cyA9IHRydWUgfSA9IHt9KSB7XG4gICAgc2V0QWN0aXZlKGZhbHNlKVxuICAgIHNldFF1ZXJ5KCcnKVxuICAgIHNldENvbW1pdHRlZChmYWxzZSlcbiAgICBzZXRJbmRleCgwKVxuICAgIGlmIChyZXN0b3JlRm9jdXMgJiYgZm0uaXMoJ2NvbnZlcnNhdGlvbi1zZWFyY2gnKSkgZm0uZm9jdXMoJ2ZlZWQnKVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlSW5wdXQoZXZlbnQsIG1hdGNoZXMpIHtcbiAgICBpZiAoYWN0aXZlKCkgJiYgIWZtLmlzKCdjb252ZXJzYXRpb24tc2VhcmNoJykpIHtcbiAgICAgIGNsb3NlKHsgcmVzdG9yZUZvY3VzOiBmYWxzZSB9KVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgaWYgKCFhY3RpdmUoKSB8fCAhY29tbWl0dGVkKCkpIHJldHVybiBmYWxzZVxuICAgIGNvbnN0IGNvdW50ID0gbWF0Y2hlcy5sZW5ndGhcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykgY2xvc2UoKVxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ24nICYmICFldmVudC5zaGlmdCkge1xuICAgICAgaWYgKGNvdW50KSB7XG4gICAgICAgIHNldEluZGV4KChpbmRleCgpICsgMSkgJSBjb3VudClcbiAgICAgICAgc2V0U2Nyb2xsUmVxdWVzdCgocmVxdWVzdCkgPT4gcmVxdWVzdCArIDEpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdOJyB8fCAoZXZlbnQuc2hpZnQgJiYgZXZlbnQua2V5ID09PSAnbicpKSB7XG4gICAgICBpZiAoY291bnQpIHtcbiAgICAgICAgc2V0SW5kZXgoKGluZGV4KCkgLSAxICsgY291bnQpICUgY291bnQpXG4gICAgICAgIHNldFNjcm9sbFJlcXVlc3QoKHJlcXVlc3QpID0+IHJlcXVlc3QgKyAxKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdvJykgcmV0dXJuIGZhbHNlXG4gICAgZWxzZSByZXR1cm4gdHJ1ZVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGZ1bmN0aW9uIHByZXBhcmUoaXRlbXMpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gY29udmVyc2F0aW9uTWF0Y2hlcyhpdGVtcywgcXVlcnkoKSwgdmVyYm9zZSgpKVxuICAgIGNvbnN0IGxhc3RJbmRleCA9IE1hdGgubWF4KDAsIG1hdGNoZXMubGVuZ3RoIC0gMSlcbiAgICBpZiAoaW5kZXgoKSA+IGxhc3RJbmRleCkgc2V0SW5kZXgobGFzdEluZGV4KVxuICAgIHJldHVybiB7XG4gICAgICBtYXRjaGVzLFxuICAgICAgaXRlbXM6IGFjdGl2ZSgpID8gaGlnaGxpZ2h0Q29udmVyc2F0aW9uKGl0ZW1zLCBxdWVyeSgpLCBpbmRleCgpLCB2ZXJib3NlKCkpIDogaXRlbXMsXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2Nyb2xsVG9NYXRjaChsYXlvdXQsIG1hdGNoKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gc2Nyb2xsKClcbiAgICBjb25zdCBrZXkgPSBgJHtxdWVyeSgpfVxcMCR7aW5kZXgoKX1cXDAke3ZlcmJvc2UoKX1cXDAke3Njcm9sbFJlcXVlc3QoKX1gXG4gICAgaWYgKHRhcmdldC5rZXkgPT09IGtleSkgcmV0dXJuXG4gICAgdGFyZ2V0LmtleSA9IGtleVxuICAgIHNldEZvbGxvdyhmYWxzZSlcbiAgICBzZXRPZmZzZXQoTWF0aC5tYXgoMCwgbGF5b3V0LnkgLSB0YXJnZXQuYW5jaG9yWSArIG1hdGNoLmxpbmUgLSAzKSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVF1ZXJ5KHZhbHVlKSB7XG4gICAgc2V0UXVlcnkodmFsdWUpXG4gICAgc2V0SW5kZXgoMClcbiAgICBzZXRTY3JvbGxSZXF1ZXN0KChyZXF1ZXN0KSA9PiByZXF1ZXN0ICsgMSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWN0aXZlLFxuICAgIHF1ZXJ5LFxuICAgIGNvbW1pdHRlZCxcbiAgICBpbmRleCxcbiAgICBmb2N1c2VkOiAoKSA9PiBmbS5pcygnY29udmVyc2F0aW9uLXNlYXJjaCcpLFxuICAgIHJlZ2lzdGVyRm9jdXMsXG4gICAgb3BlbixcbiAgICBjbG9zZSxcbiAgICBoYW5kbGVJbnB1dCxcbiAgICBwcmVwYXJlLFxuICAgIHNjcm9sbDogc2Nyb2xsKCksXG4gICAgc2Nyb2xsVG9NYXRjaCxcbiAgICBjb21taXQ6ICgpID0+IHNldENvbW1pdHRlZCh0cnVlKSxcbiAgICB1cGRhdGVRdWVyeSxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ29udmVyc2F0aW9uU2VhcmNoQmFyKHsgc2VhcmNoLCBtYXRjaGVzIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBmbGV4U2hyaW5rOiAwLCBoZWlnaHQ6IDEsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+eycvICd9PC90ZXh0PlxuICAgICAge3NlYXJjaC5jb21taXR0ZWQoKVxuICAgICAgICA/IDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRywgZmxleEdyb3c6IDEgfX0+e3NlYXJjaC5xdWVyeSgpfTwvdGV4dD5cbiAgICAgICAgOiA8VGV4dElucHV0XG4gICAgICAgICAgICBmb2N1c2VkPXtzZWFyY2guZm9jdXNlZCgpfVxuICAgICAgICAgICAgdmFsdWU9e3NlYXJjaC5xdWVyeSgpfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3NlYXJjaC51cGRhdGVRdWVyeX1cbiAgICAgICAgICAgIG9uU3VibWl0PXtzZWFyY2guY29tbWl0fVxuICAgICAgICAgICAgb25DYW5jZWw9e3NlYXJjaC5jbG9zZX1cbiAgICAgICAgICAvPn1cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57bWF0Y2hlcy5sZW5ndGggPyBgJHtzZWFyY2guaW5kZXgoKSArIDF9LyR7bWF0Y2hlcy5sZW5ndGh9YCA6ICcwLzAnfTwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgeyBTY3JvbGxBbmNob3IgYXMgQ29udmVyc2F0aW9uU2Nyb2xsQW5jaG9yLCBTZWFyY2hNZXNzYWdlIGFzIENvbnZlcnNhdGlvblNlYXJjaE1lc3NhZ2UgfVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgQnV0dG9uLCBUZXh0SW5wdXQsIHVzZUlucHV0IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgYWNjZW50LCBNVVRFRCwgRkcsIEZHX1NPRlQsIFBBTkVMX0JHLCBTRUxFQ1RfQkcgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5mdW5jdGlvbiBhbnN3ZXJUZXh0KHF1ZXN0aW9uLCBhbnN3ZXIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYW5zd2VyKSkgcmV0dXJuIGFuc3dlci5qb2luKCcsICcpXG4gIHJldHVybiBhbnN3ZXIgfHwgJ05vdCBhbnN3ZXJlZCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFF1ZXN0aW9uRm9ybSh7IHJlcXVlc3QsIGZvY3VzZWQsIG9uU3VibWl0LCBvbkNhbmNlbCB9KSB7XG4gIGNvbnN0IHF1ZXN0aW9ucyA9IHJlcXVlc3QucXVlc3Rpb25zXG4gIGNvbnN0IHJldmlld2luZyA9IHF1ZXN0aW9ucy5sZW5ndGggPiAxXG4gIGNvbnN0IFtzdGVwLCBzZXRTdGVwXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbYW5zd2Vycywgc2V0QW5zd2Vyc10gPSBjcmVhdGVTaWduYWwoe30pXG4gIGNvbnN0IFtjdXJzb3IsIHNldEN1cnNvcl0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2N1c3RvbSwgc2V0Q3VzdG9tXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Jldmlldywgc2V0UmV2aWV3XSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2NvbnRyb2wsIHNldENvbnRyb2xdID0gY3JlYXRlU2lnbmFsKCdhbnN3ZXInKVxuXG4gIGNvbnN0IHF1ZXN0aW9uID0gKCkgPT4gcXVlc3Rpb25zW3N0ZXAoKV1cbiAgY29uc3Qgb3B0aW9ucyA9ICgpID0+IHF1ZXN0aW9uKCkub3B0aW9ucyB8fCBbXVxuICBjb25zdCByb3dzID0gKCkgPT4gWy4uLm9wdGlvbnMoKSwgLi4uKHF1ZXN0aW9uKCkuYWxsb3dPdGhlciA9PT0gZmFsc2UgPyBbXSA6IFt7IGxhYmVsOiAnT3RoZXInLCBvdGhlcjogdHJ1ZSB9XSldXG4gIGNvbnN0IHNlbGVjdGVkID0gKGxhYmVsKSA9PiAoYW5zd2VycygpW3F1ZXN0aW9uKCkuaWRdIHx8IFtdKS5pbmNsdWRlcyhsYWJlbClcbiAgY29uc3Qgb3RoZXJBbnN3ZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgYW5zd2VyID0gYW5zd2VycygpW3F1ZXN0aW9uKCkuaWRdXG4gICAgY29uc3QgbGFiZWxzID0gbmV3IFNldChvcHRpb25zKCkubWFwKChvcHRpb24pID0+IG9wdGlvbi5sYWJlbCkpXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYW5zd2VyKSkgcmV0dXJuIGFuc3dlci5maW5kKCh2YWx1ZSkgPT4gIWxhYmVscy5oYXModmFsdWUpKSB8fCAnJ1xuICAgIHJldHVybiBhbnN3ZXIgJiYgIWxhYmVscy5oYXMoYW5zd2VyKSA/IGFuc3dlciA6ICcnXG4gIH1cblxuICBmdW5jdGlvbiBzZXRBbnN3ZXIodmFsdWUpIHtcbiAgICBzZXRBbnN3ZXJzKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBbcXVlc3Rpb24oKS5pZF06IHZhbHVlIH0pKVxuICB9XG5cbiAgZnVuY3Rpb24gYWR2YW5jZSgpIHtcbiAgICBzZXRDdXN0b20oZmFsc2UpXG4gICAgc2V0Q3Vyc29yKDApXG4gICAgc2V0Q29udHJvbCgnYW5zd2VyJylcbiAgICBpZiAoc3RlcCgpIDwgcXVlc3Rpb25zLmxlbmd0aCAtIDEpIHNldFN0ZXAoc3RlcCgpICsgMSlcbiAgICBlbHNlIGlmIChyZXZpZXdpbmcpIHsgc2V0Q3Vyc29yKHF1ZXN0aW9ucy5sZW5ndGgpOyBzZXRSZXZpZXcodHJ1ZSkgfVxuICAgIGVsc2UgZmluaXNoKClcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmlzaCgpIHtcbiAgICBvblN1Ym1pdChxdWVzdGlvbnMubWFwKChpdGVtKSA9PiAoeyBpZDogaXRlbS5pZCwgcXVlc3Rpb246IGl0ZW0ucXVlc3Rpb24sIGFuc3dlcjogYW5zd2VycygpW2l0ZW0uaWRdID8/ICcnIH0pKSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHN1Ym1pdFRleHQodmFsdWUpIHtcbiAgICBjb25zdCBhbnN3ZXIgPSB2YWx1ZS50cmltKClcbiAgICBpZiAoIWFuc3dlcikgcmV0dXJuXG4gICAgc2V0QW5zd2VyKGFuc3dlcilcbiAgICBpZiAocXVlc3Rpb25zLmxlbmd0aCA9PT0gMSkgb25TdWJtaXQoW3sgaWQ6IGl0ZW0uaWQsIHF1ZXN0aW9uOiBpdGVtLnF1ZXN0aW9uLCBhbnN3ZXIgfV0pXG4gICAgZWxzZSBhZHZhbmNlKClcbiAgfVxuXG4gIGZ1bmN0aW9uIHN1Ym1pdE90aGVyKHZhbHVlKSB7XG4gICAgY29uc3QgYW5zd2VyID0gdmFsdWUudHJpbSgpXG4gICAgY29uc3Qga25vd24gPSBuZXcgU2V0KChpdGVtLm9wdGlvbnMgfHwgW10pLm1hcCgob3B0aW9uKSA9PiBvcHRpb24ubGFiZWwpKVxuICAgIGNvbnN0IGNob2ljZXMgPSBpdGVtLnR5cGUgPT09ICdtdWx0aScgPyAoYW5zd2VycygpW2l0ZW0uaWRdIHx8IFtdKS5maWx0ZXIoKGVudHJ5KSA9PiBrbm93bi5oYXMoZW50cnkpKSA6IFtdXG4gICAgY29uc3QgbmV4dEFuc3dlciA9IGl0ZW0udHlwZSA9PT0gJ211bHRpJyA/IFsuLi5jaG9pY2VzLCAuLi4oYW5zd2VyID8gW2Fuc3dlcl0gOiBbXSldIDogYW5zd2VyXG4gICAgc2V0QW5zd2VyKG5leHRBbnN3ZXIpXG4gICAgc2V0Q3VzdG9tKGZhbHNlKVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdzaW5nbGUnICYmIGFuc3dlcikge1xuICAgICAgaWYgKHF1ZXN0aW9ucy5sZW5ndGggPT09IDEpIG9uU3VibWl0KFt7IGlkOiBpdGVtLmlkLCBxdWVzdGlvbjogaXRlbS5xdWVzdGlvbiwgYW5zd2VyIH1dKVxuICAgICAgZWxzZSBhZHZhbmNlKClcbiAgICB9XG4gIH1cblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBpZiAoY3VzdG9tKCkpIHsgc2V0Q3VzdG9tKGZhbHNlKTsgc2V0Q29udHJvbCgnYW5zd2VyJykgfVxuICAgICAgZWxzZSBpZiAocmV2aWV3KCkpIHNldFJldmlldyhmYWxzZSlcbiAgICAgIGVsc2Ugb25DYW5jZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocmV2aWV3KCkpIHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICd1cCcgfHwgZXZlbnQua2V5ID09PSAnaycpIHNldEN1cnNvcihNYXRoLm1heCgwLCBjdXJzb3IoKSAtIDEpKVxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZG93bicgfHwgZXZlbnQua2V5ID09PSAnaicpIHNldEN1cnNvcihNYXRoLm1pbihxdWVzdGlvbnMubGVuZ3RoLCBjdXJzb3IoKSArIDEpKVxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAncmV0dXJuJykge1xuICAgICAgICBpZiAoY3Vyc29yKCkgPT09IHF1ZXN0aW9ucy5sZW5ndGgpIGZpbmlzaCgpXG4gICAgICAgIGVsc2UgeyBzZXRTdGVwKGN1cnNvcigpKTsgc2V0Q3Vyc29yKDApOyBzZXRDb250cm9sKCdhbnN3ZXInKTsgc2V0UmV2aWV3KGZhbHNlKSB9XG4gICAgICB9IGVsc2UgcmV0dXJuXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChzdGVwKCkgPiAwICYmIChldmVudC5rZXkgPT09ICd0YWInIHx8IGV2ZW50LmtleSA9PT0gJ3NoaWZ0LXRhYicpKSB7XG4gICAgICBzZXRDb250cm9sKGNvbnRyb2woKSA9PT0gJ2JhY2snID8gJ2Fuc3dlcicgOiAnYmFjaycpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjb250cm9sKCkgPT09ICdiYWNrJykgcmV0dXJuXG4gICAgaWYgKGN1c3RvbSgpKSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyB8fCBldmVudC5rZXkgPT09ICdzaGlmdC10YWInKSB7XG4gICAgICAgIHNldEN1c3RvbShmYWxzZSlcbiAgICAgICAgc2V0Q29udHJvbCgnYW5zd2VyJylcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocXVlc3Rpb24oKT8udHlwZSA9PT0gJ3RleHQnKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAndXAnIHx8IGV2ZW50LmtleSA9PT0gJ2snKSBzZXRDdXJzb3IoTWF0aC5tYXgoMCwgY3Vyc29yKCkgLSAxKSlcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdkb3duJyB8fCBldmVudC5rZXkgPT09ICdqJykgc2V0Q3Vyc29yKE1hdGgubWluKHJvd3MoKS5sZW5ndGggLSAxLCBjdXJzb3IoKSArIDEpKVxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3NwYWNlJyAmJiBxdWVzdGlvbigpLnR5cGUgPT09ICdtdWx0aScpIHtcbiAgICAgIGNvbnN0IHJvdyA9IHJvd3MoKVtjdXJzb3IoKV1cbiAgICAgIGlmIChyb3cub3RoZXIpIHtcbiAgICAgICAgaWYgKG90aGVyQW5zd2VyKCkpIHtcbiAgICAgICAgICBjb25zdCBrbm93biA9IG5ldyBTZXQob3B0aW9ucygpLm1hcCgob3B0aW9uKSA9PiBvcHRpb24ubGFiZWwpKVxuICAgICAgICAgIHNldEFuc3dlcigoYW5zd2VycygpW3F1ZXN0aW9uKCkuaWRdIHx8IFtdKS5maWx0ZXIoKGVudHJ5KSA9PiBrbm93bi5oYXMoZW50cnkpKSlcbiAgICAgICAgICBzZXRDdXN0b20oZmFsc2UpXG4gICAgICAgIH0gZWxzZSBzZXRDdXN0b20odHJ1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBhbnN3ZXJzKClbcXVlc3Rpb24oKS5pZF0gfHwgW11cbiAgICAgICAgc2V0QW5zd2VyKGN1cnJlbnQuaW5jbHVkZXMocm93LmxhYmVsKSA/IGN1cnJlbnQuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgIT09IHJvdy5sYWJlbCkgOiBbLi4uY3VycmVudCwgcm93LmxhYmVsXSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIGNvbnN0IHJvdyA9IHJvd3MoKVtjdXJzb3IoKV1cbiAgICAgIGlmIChxdWVzdGlvbigpLnR5cGUgPT09ICdtdWx0aScpIGFkdmFuY2UoKVxuICAgICAgZWxzZSBpZiAocm93Lm90aGVyKSBzZXRDdXN0b20odHJ1ZSlcbiAgICAgIGVsc2Uge1xuICAgICAgICBzZXRBbnN3ZXIocm93LmxhYmVsKVxuICAgICAgICBpZiAocXVlc3Rpb25zLmxlbmd0aCA9PT0gMSkgb25TdWJtaXQoW3sgaWQ6IHF1ZXN0aW9uKCkuaWQsIHF1ZXN0aW9uOiBxdWVzdGlvbigpLnF1ZXN0aW9uLCBhbnN3ZXI6IHJvdy5sYWJlbCB9XSlcbiAgICAgICAgZWxzZSBhZHZhbmNlKClcbiAgICAgIH1cbiAgICB9IGVsc2UgcmV0dXJuXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgfSlcblxuICBpZiAocmV2aWV3KCkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIGJvbGQ6IHRydWUgfX0+UmV2aWV3IGFuc3dlcnM8L3RleHQ+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5lbnRlcjogZWRpdCBvciBzdWJtaXQgIGVzYzogYmFjazwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIHtxdWVzdGlvbnMubWFwKChpdGVtLCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBjdXJzb3IoKSA9PT0gaW5kZXggPyBTRUxFQ1RfQkcgOiB1bmRlZmluZWQsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGN1cnNvcigpID09PSBpbmRleCA/IGFjY2VudCgpIDogRkcgfX0+e2l0ZW0ucXVlc3Rpb259PC90ZXh0PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnthbnN3ZXJUZXh0KGl0ZW0sIGFuc3dlcnMoKVtpdGVtLmlkXSl9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApKX1cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgYmc6IGN1cnNvcigpID09PSBxdWVzdGlvbnMubGVuZ3RoID8gYWNjZW50KCkgOiB1bmRlZmluZWQsIGNvbG9yOiBjdXJzb3IoKSA9PT0gcXVlc3Rpb25zLmxlbmd0aCA/ICdibGFjaycgOiBGRywgYm9sZDogdHJ1ZSB9fT4gU3VibWl0IGFuc3dlcnMgPC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgaXRlbSA9IHF1ZXN0aW9uKClcbiAgY29uc3QgcHJvZ3Jlc3MgPSBxdWVzdGlvbnMubGVuZ3RoID4gMSA/IGAke3N0ZXAoKSArIDF9IG9mICR7cXVlc3Rpb25zLmxlbmd0aH1gIDogJ1F1ZXN0aW9uJ1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICB7c3RlcCgpID4gMCAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgbGFiZWw9XCJCYWNrXCJcbiAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBjb250cm9sKCkgPT09ICdiYWNrJ31cbiAgICAgICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFN0ZXAoc3RlcCgpIC0gMSlcbiAgICAgICAgICAgICAgICBzZXRDdXJzb3IoMClcbiAgICAgICAgICAgICAgICBzZXRDdXN0b20oZmFsc2UpXG4gICAgICAgICAgICAgICAgc2V0Q29udHJvbCgnYW5zd2VyJylcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8dGV4dD4gIDwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19Pntwcm9ncmVzc308L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntpdGVtLnR5cGUgPT09ICdtdWx0aScgPyAnc3BhY2U6IHNlbGVjdCAgZW50ZXI6IGNvbnRpbnVlJyA6ICdlbnRlcjogYW5zd2VyJ30gIGVzYzogY2FuY2VsPC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcsIGJvbGQ6IHRydWUgfX0+e2l0ZW0ucXVlc3Rpb259PC90ZXh0PlxuICAgICAge2l0ZW0uZGVzY3JpcHRpb24gJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e2l0ZW0uZGVzY3JpcHRpb259PC90ZXh0Pn1cbiAgICAgIHtpdGVtLnR5cGUgPT09ICd0ZXh0JyA/IChcbiAgICAgICAgPGJveCBzdHlsZT17eyBiZzogU0VMRUNUX0JHLCBwYWRkaW5nWDogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgIGtleT17YCR7aXRlbS5pZH06dGV4dGB9XG4gICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIGNvbnRyb2woKSA9PT0gJ2Fuc3dlcid9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgeW91ciBhbnN3ZXJcIlxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlPXt0eXBlb2YgYW5zd2VycygpW2l0ZW0uaWRdID09PSAnc3RyaW5nJyA/IGFuc3dlcnMoKVtpdGVtLmlkXSA6ICcnfVxuICAgICAgICAgICAgb25TdWJtaXQ9e3N1Ym1pdFRleHR9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICApIDogKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAge3Jvd3MoKS5tYXAoKG9wdGlvbiwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBjdXJzb3IoKSA9PT0gaW5kZXggPyBTRUxFQ1RfQkcgOiB1bmRlZmluZWQsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogY3Vyc29yKCkgPT09IGluZGV4ID8gYWNjZW50KCkgOiBGRyB9fT5cbiAgICAgICAgICAgICAgICB7aXRlbS50eXBlID09PSAnbXVsdGknXG4gICAgICAgICAgICAgICAgICA/IGAke29wdGlvbi5vdGhlciA/IChvdGhlckFuc3dlcigpID8gJ1t4XScgOiAnWyBdJykgOiAoc2VsZWN0ZWQob3B0aW9uLmxhYmVsKSA/ICdbeF0nIDogJ1sgXScpfSBgXG4gICAgICAgICAgICAgICAgICA6IGAke2N1cnNvcigpID09PSBpbmRleCA/ICdcdTIwM0EnIDogJyAnfSBgfXtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICAgICAge29wdGlvbi5kZXNjcmlwdGlvbiAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57YCAgJHtvcHRpb24uZGVzY3JpcHRpb259YH08L3RleHQ+fVxuICAgICAgICAgICAgICB7b3B0aW9uLm90aGVyICYmIChjdXN0b20oKSB8fCBvdGhlckFuc3dlcigpKSAmJiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBiZzogY3VzdG9tKCkgPyBQQU5FTF9CRyA6IHVuZGVmaW5lZCwgcGFkZGluZ0xlZnQ6IDQgfX0+XG4gICAgICAgICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgICAgICAgIGtleT17YCR7aXRlbS5pZH06b3RoZXJgfVxuICAgICAgICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIGN1c3RvbSgpfVxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgYW5vdGhlciBhbnN3ZXJcIlxuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU9e290aGVyQW5zd2VyKCl9XG4gICAgICAgICAgICAgICAgICAgIG9uU3VibWl0PXtzdWJtaXRPdGhlcn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgIDwvYm94PlxuICApXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCB1c2VJbnRlcnZhbCwgdXNlTW91c2UsIHVzZVJlc2l6ZSB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGFjY2VudCwgTVVURUQgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5mdW5jdGlvbiBFbXB0eUNsb3VkKHsgd2lkdGgsIGhlaWdodCwgdmVyc2lvbiB9KSB7XG4gIGNvbnN0IFtwaGFzZSwgc2V0UGhhc2VdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFt3YWtlLCBzZXRXYWtlXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgbGV0IHByZXZpb3VzID0gbnVsbFxuXG4gIHVzZU1vdXNlKChldmVudCkgPT4ge1xuICAgIGlmIChldmVudC5hY3Rpb24gIT09ICdtb3ZlJyAmJiBldmVudC5hY3Rpb24gIT09ICdkcmFnJykgcmV0dXJuXG4gICAgY29uc3QgeCA9IGV2ZW50LnhcbiAgICBjb25zdCB5ID0gZXZlbnQueVxuICAgIGlmICh4IDwgMCB8fCB4ID49IHdpZHRoIHx8IHkgPCAwIHx8IHkgPj0gaGVpZ2h0KSByZXR1cm5cbiAgICBjb25zdCBkeCA9IHByZXZpb3VzID8geCAtIHByZXZpb3VzLnggOiAwXG4gICAgY29uc3QgZHkgPSBwcmV2aW91cyA/IHkgLSBwcmV2aW91cy55IDogMFxuICAgIHByZXZpb3VzID0geyB4LCB5IH1cbiAgICBjb25zdCBzcGVlZCA9IE1hdGguaHlwb3QoZHggKiAwLjUsIGR5KVxuICAgIGlmIChzcGVlZCA9PT0gMCkgcmV0dXJuXG4gICAgc2V0V2FrZShwb2ludHMgPT4gWy4uLnBvaW50cy5zbGljZSgtMjApLCB7IHgsIHksIGR4LCBkeSwgc3BlZWQ6IE1hdGgubWluKDQsIHNwZWVkKSwgYWdlOiAwIH1dKVxuICB9KVxuXG4gIHVzZUludGVydmFsKCgpID0+IHtcbiAgICBzZXRQaGFzZSh2YWx1ZSA9PiB2YWx1ZSArIDAuMTYpXG4gICAgc2V0V2FrZShwb2ludHMgPT4gcG9pbnRzLm1hcChwb2ludCA9PiAoeyAuLi5wb2ludCwgYWdlOiBwb2ludC5hZ2UgKyAxIH0pKS5maWx0ZXIocG9pbnQgPT4gcG9pbnQuYWdlIDwgMTgpKVxuICB9LCA5MClcblxuICBjb25zdCBnbHlwaHMgPSAnICAuLjo6KysqKlx1MjU5MVx1MjU5MidcbiAgY29uc3Qgcm93cyA9IFtdXG4gIGNvbnN0IGJhc2UgPSBhY2NlbnQoKVxuICBjb25zdCByZ2IgPSAvXiMoWzAtOWEtZl17Nn0pJC9pLmV4ZWMoYmFzZSlcbiAgY29uc3QgbmVpZ2hib3JpbmcgPSByZ2JcbiAgICA/IGAjJHtbXG4gICAgICBNYXRoLm1heCgwLCBwYXJzZUludChyZ2JbMV0uc2xpY2UoMCwgMiksIDE2KSAtIDE4KSxcbiAgICAgIE1hdGgubWluKDI1NSwgcGFyc2VJbnQocmdiWzFdLnNsaWNlKDIsIDQpLCAxNikgKyA4KSxcbiAgICAgIE1hdGgubWluKDI1NSwgcGFyc2VJbnQocmdiWzFdLnNsaWNlKDQsIDYpLCAxNikgKyAyNCksXG4gICAgXS5tYXAodmFsdWUgPT4gdmFsdWUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpfWBcbiAgICA6IGJhc2VcblxuICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgY29uc3Qgcm93ID0gW11cbiAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgIGNvbnN0IHAgPSBwaGFzZSgpXG4gICAgICBjb25zdCBicm9hZCA9IE1hdGguc2luKHggKiAwLjA4ICsgcCkgKyBNYXRoLnNpbih5ICogMC4yOSAtIHAgKiAwLjcpICsgTWF0aC5zaW4oKHggKyB5KSAqIDAuMDUgKyBwICogMC4zNSlcbiAgICAgIGNvbnN0IHdpc3BzID0gTWF0aC5zaW4oeCAqIDAuMTkgLSB5ICogMC4xMSAtIHAgKiAwLjU1KSArIE1hdGguc2luKHggKiAwLjAzICsgeSAqIDAuNDMgKyBwICogMC40KVxuICAgICAgY29uc3QgcG9ja2V0cyA9IE1hdGguc2luKHggKiAwLjMxICsgcCAqIDAuOCkgKiBNYXRoLnNpbih5ICogMC40NyAtIHAgKiAwLjMpXG4gICAgICBsZXQgYnJvYWREaXNwbGFjZW1lbnQgPSAwXG4gICAgICBsZXQgd2lzcERpc3BsYWNlbWVudCA9IDBcbiAgICAgIGxldCBpbnRlcmFjdGlvbiA9IDBcbiAgICAgIGZvciAoY29uc3QgcG9pbnQgb2Ygd2FrZSgpKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGguaHlwb3QocG9pbnQuZHggKiAwLjUsIHBvaW50LmR5KSB8fCAxXG4gICAgICAgIGNvbnN0IHV4ID0gcG9pbnQuZHggKiAwLjUgLyBsZW5ndGhcbiAgICAgICAgY29uc3QgdXkgPSBwb2ludC5keSAvIGxlbmd0aFxuICAgICAgICBjb25zdCByeCA9ICh4IC0gcG9pbnQueCkgKiAwLjVcbiAgICAgICAgY29uc3QgcnkgPSB5IC0gcG9pbnQueVxuICAgICAgICBjb25zdCBhbG9uZyA9IHJ4ICogdXggKyByeSAqIHV5XG4gICAgICAgIGNvbnN0IGFjcm9zcyA9IC1yeCAqIHV5ICsgcnkgKiB1eFxuICAgICAgICBjb25zdCB0cmFpbGluZyA9IGFsb25nIDw9IDIgJiYgYWxvbmcgPj0gLTE4IC0gcG9pbnQuc3BlZWQgKiAzXG4gICAgICAgIGlmICghdHJhaWxpbmcpIGNvbnRpbnVlXG4gICAgICAgIGNvbnN0IGFnZSA9IDEgLSBwb2ludC5hZ2UgLyAxOFxuICAgICAgICBjb25zdCB0cmFpbCA9IE1hdGguZXhwKC1NYXRoLnBvdygoYWxvbmcgKyA0ICsgcG9pbnQuYWdlICogMC4zNSkgLyAoNyArIHBvaW50LnNwZWVkICogMiksIDIpKVxuICAgICAgICBjb25zdCBjZW50ZXIgPSBNYXRoLmV4cCgtKGFjcm9zcyAqIGFjcm9zcykgLyA1KVxuICAgICAgICBjb25zdCBlZGdlcyA9IE1hdGguZXhwKC1NYXRoLnBvdyhNYXRoLmFicyhhY3Jvc3MpIC0gMy4yLCAyKSAvIDMpXG4gICAgICAgIGNvbnN0IGZvcmNlID0gYWdlICogdHJhaWwgKiAoMC41ICsgcG9pbnQuc3BlZWQgKiAwLjQ1KVxuICAgICAgICBjb25zdCByYWRpYWxEaXN0YW5jZSA9IE1hdGguc3FydChyeCAqIHJ4ICsgcnkgKiByeSlcbiAgICAgICAgY29uc3QgcmlwcGxlRW52ZWxvcGUgPSBNYXRoLmV4cCgtKHJhZGlhbERpc3RhbmNlICogcmFkaWFsRGlzdGFuY2UpIC8gKDM1ICsgcG9pbnQuc3BlZWQgKiAxMikpXG4gICAgICAgIGNvbnN0IHJpcHBsZSA9IE1hdGguc2luKHJhZGlhbERpc3RhbmNlICogMS4zNSAtIHBvaW50LmFnZSAqIDAuNzUpICogcmlwcGxlRW52ZWxvcGUgKiBhZ2VcbiAgICAgICAgd2lzcERpc3BsYWNlbWVudCArPSAoZWRnZXMgKiAwLjkgLSBjZW50ZXIpICogZm9yY2UgKiAxLjUgKyByaXBwbGUgKiAoMS4yICsgcG9pbnQuc3BlZWQgKiAwLjI1KVxuICAgICAgICBicm9hZERpc3BsYWNlbWVudCArPSAoZWRnZXMgKiAwLjQ1IC0gY2VudGVyICogMC4zNSkgKiBmb3JjZSAqIDAuNTUgKyByaXBwbGUgKiAwLjI1XG4gICAgICAgIGludGVyYWN0aW9uID0gTWF0aC5tYXgoaW50ZXJhY3Rpb24sIE1hdGguYWJzKHJpcHBsZSkgKiAoMC41ICsgcG9pbnQuc3BlZWQgKiAwLjE1KSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbHVlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgKFxuICAgICAgICBicm9hZCArIGJyb2FkRGlzcGxhY2VtZW50ICsgKHdpc3BzICsgd2lzcERpc3BsYWNlbWVudCkgKiAwLjY1ICsgcG9ja2V0cyAqIDAuOCArIDMuMlxuICAgICAgKSAvIDcuNCkpXG4gICAgICBjb25zdCBpbmRleCA9IE1hdGgubWluKGdseXBocy5sZW5ndGggLSAxLCBNYXRoLmZsb29yKHZhbHVlICogZ2x5cGhzLmxlbmd0aCkpXG4gICAgICByb3cucHVzaCh7IGdseXBoOiBnbHlwaHNbaW5kZXhdLCBjb2xvcjogaW50ZXJhY3Rpb24gPiAwLjE2ID8gbmVpZ2hib3JpbmcgOiBiYXNlLCBkaW06IGluZGV4IDwgOCB9KVxuICAgIH1cbiAgICByb3dzLnB1c2gocm93KVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSB9fT5cbiAgICAgIHtyb3dzLm1hcCgocm93LCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaSA9PT0gMSA/ICdwaWNvJyA6IGkgPT09IDIgPyBgdiR7dmVyc2lvbn1gIDogJydcbiAgICAgICAgY29uc3QgaW5CcmFuZEJveCA9IGkgPj0gMSAmJiBpIDw9IDJcbiAgICAgICAgY29uc3QgYm94U3RhcnQgPSAxXG4gICAgICAgIGNvbnN0IGJveFdpZHRoID0gYHYke3ZlcnNpb259YC5sZW5ndGggKyAyXG4gICAgICAgIGNvbnN0IGNsb3VkID0gKGNlbGxzKSA9PiBjZWxscy5tYXAoKGNlbGwsIHgpID0+IChcbiAgICAgICAgICA8dGV4dCBrZXk9e3h9IHN0eWxlPXt7IGNvbG9yOiBjZWxsLmNvbG9yLCBkaW06IGNlbGwuZGltIH19PntjZWxsLmdseXBofTwvdGV4dD5cbiAgICAgICAgKSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Ym94IGtleT17aX0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMSwgb3ZlcmZsb3c6ICdjbGlwJyB9fT5cbiAgICAgICAgICAgIHtpbkJyYW5kQm94ICYmIGNsb3VkKHJvdy5zbGljZSgwLCBib3hTdGFydCkpfVxuICAgICAgICAgICAge2luQnJhbmRCb3ggJiYgKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiBib3hXaWR0aCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAge2xhYmVsICYmIDx0ZXh0IHN0eWxlPXt7IGJvbGQ6IGkgPT09IDEsIGNvbG9yOiBpID09PSAxID8gYWNjZW50KCkgOiBNVVRFRCB9fT57bGFiZWx9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2Nsb3VkKHJvdy5zbGljZShpbkJyYW5kQm94ID8gYm94U3RhcnQgKyBib3hXaWR0aCA6IDApKX1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVtcHR5U3RhdGUoeyB2ZXJzaW9uLCBjbG91ZHMgPSBmYWxzZSB9KSB7XG4gIGNvbnN0IFtzaXplLCBzZXRTaXplXSA9IGNyZWF0ZVNpZ25hbCh7IHdpZHRoOiBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIHx8IDgwLCBoZWlnaHQ6IHByb2Nlc3Muc3Rkb3V0LnJvd3MgfHwgMjQgfSlcbiAgdXNlUmVzaXplKHNldFNpemUpXG4gIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgc2l6ZSgpLndpZHRoKVxuICBjb25zdCBoZWlnaHQgPSBNYXRoLm1heCgxLCBzaXplKCkuaGVpZ2h0IC0gNClcbiAgaWYgKCFjbG91ZHMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBib2xkOiB0cnVlLCBjb2xvcjogYWNjZW50KCkgfX0+eycgIHBpY28nfTwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICB2JHt2ZXJzaW9ufWB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aCwgaGVpZ2h0IH19PlxuICAgICAgPEVtcHR5Q2xvdWQgd2lkdGg9e3dpZHRofSBoZWlnaHQ9e2hlaWdodH0gdmVyc2lvbj17dmVyc2lvbn0gLz5cbiAgICA8L2JveD5cbiAgKVxufVxuXG4iLCAiaW1wb3J0IHsgTWFya2Rvd24sIFNjcm9sbEJveCwgdXNlSW5wdXQgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBhY2NlbnQsIE1VVEVEIH0gZnJvbSAnLi90aGVtZS5qcydcblxuY29uc3QgSEVMUF9URVhUID0gKGNvbW1hbmRzKSA9PiBgcGljbyBpcyBhIGNvZGluZyBhZ2VudCBpbiB5b3VyIHRlcm1pbmFsLiBJdCByZWFkcywgZWRpdHMsIGFuZCBzZWFyY2hlcyBmaWxlcywgcnVucyBjb21tYW5kcywgYW5kIHN0cmVhbXMgaXRzIHdvcmsgaW50byB0aGlzIHRyYW5zY3JpcHQuXG5cbiMjIENvbW1hbmRzXG5cblR5cGUgXFxgL1xcYCBpbiB0aGUgY29tcG9zZXIgdG8gZmlsdGVyIHRoZXNlIGFzIHlvdSB0eXBlLlxuXG4ke2NvbW1hbmRzLm1hcCgoYykgPT4gYC0gXFxgLyR7Yy5uYW1lfVxcYCAtICR7Yy5kZXNjfWApLmpvaW4oJ1xcbicpfVxuXG5Ud28ga2luZHMgb2YgdXNlci1kZWZpbmVkIGVudHJpZXMgam9pbiB0aGlzIG1lbnU6XG5cbi0gKipjb21tYW5kcyoqIChcXGB+Ly5waWNvL2NvbW1hbmRzLzxuYW1lPi5tZFxcYCBvciBcXGAucGljby9jb21tYW5kcy88bmFtZT4ubWRcXGApOiBwcm9tcHQgdGVtcGxhdGVzIHlvdSBpbnZva2UgYXMgXFxgLzxuYW1lPiBbYXJnc11cXGAuIFxcYCRBUkdVTUVOVFNcXGAgaW4gdGhlIGJvZHkgaXMgcmVwbGFjZWQgd2l0aCB3aGF0ZXZlciBmb2xsb3dzIHRoZSBjb21tYW5kOyB3aXRob3V0IGEgcGxhY2Vob2xkZXIsIGFyZ3MgYXJlIGFwcGVuZGVkLiBUaGUgbW9kZWwgbmV2ZXIgc2VlcyB0aGVzZSB1bnRpbCB5b3UgcnVuIG9uZS5cbi0gKipza2lsbHMqKiAoXFxgfi8ucGljby9za2lsbHMvPG5hbWU+L1NLSUxMLm1kXFxgIG9yIFxcYC5waWNvL3NraWxscy88bmFtZT4vU0tJTEwubWRcXGApOiBjYXBhYmlsaXRpZXMgd2l0aCBhIG5hbWUgYW5kIGRlc2NyaXB0aW9uLiBZb3UgY2FuIGludm9rZSB0aGVtIGxpa2UgY29tbWFuZHMsIGFuZCB0aGUgYWdlbnQgY2FuIGFsc28gZGlzY292ZXIgYW5kIGxvYWQgdGhlbSBpdHNlbGYgdmlhIHRoZSBza2lsbCB0b29sLlxuLSAqKnRvb2xzKiogKFxcYH4vLnBpY28vdG9vbHMvPG5hbWU+LmpzXFxgIG9yIFxcYC5waWNvL3Rvb2xzLzxuYW1lPi5qc1xcYCk6IEVTIG1vZHVsZXMgZGVmYXVsdC1leHBvcnRpbmcgXFxgeyBuYW1lLCBkZXNjcmlwdGlvbiwgc2NoZW1hLCBleGVjdXRlIH1cXGAgKG9yIGEgZmFjdG9yeSByZWNlaXZpbmcgXFxgeyBjd2QsIHJvb3QgfVxcYCkuIFRoZXkgam9pbiB0aGUgYWdlbnQncyB0b29sc2V0IGFuZCBhcmUgcmVzY2FubmVkIGV2ZXJ5IHR1cm4sIHNvIGVkaXRzIGFwcGx5IG9uIHRoZSBuZXh0IG1lc3NhZ2UuIEFzayB0aGUgYWdlbnQgdG8gYnVpbGQgb25lIGZvciB5b3U6IHRoZSBidWlsdC1pbiBcXGAvbmV3LXRvb2xcXGAgc2tpbGwgdGVhY2hlcyBpdCB0aGUgZm9ybWF0LlxuXG5JbiB0aGUgTUNQIHBhbmVsOiBlbnRlciBlbmFibGVzL2Rpc2FibGVzIGEgc2VydmVyIChkaXNhYmxlZCBpcyBzdGlja3kgYWNyb3NzIHJlc3RhcnRzIC0gY29uZmlnIGtlcHQsIG5vIGNvbm5lY3Rpb24sIG5vIHRvb2xzIG9mZmVyZWQgdG8gdGhlIG1vZGVsLCBwZXIgcHJvamVjdCksIFxcYHRcXGAgbGlzdHMgaXRzIHRvb2xzLCBcXGByXFxgIHJlY29ubmVjdHMsIFxcYGFcXGAgYWRkcywgXFxgY3RybCt4XFxgIHJlbW92ZXMgKHByZXNzIHR3aWNlKS4gVW5maWx0ZXJlZCBsaXN0cyAoZWZmb3J0LCByZXdpbmQgb3B0aW9ucywgTUNQKSBhbHNvIG1vdmUgd2l0aCBcXGBqXFxgL1xcYGtcXGAgYW5kIGp1bXAgd2l0aCBcXGBnXFxgL1xcYEdcXGAuXG5cbiMjIENvbXBvc2VyXG5cbi0gXFxgY3RybCt2XFxgOiBBdHRhY2ggY2xpcGJvYXJkIGltYWdlXG4tIFxcYGN0cmwrb1xcYDogQ2FwdHVyZSBzY3JlZW4gcmVnaW9uIChtYWNPUylcbi0gXFxgY3RybCtnXFxgOiBSZWNvcmQgKG1hY09TKVxuLSBcXGBlbnRlclxcYDogVHJhbnNjcmliZSByZWNvcmRpbmdcbi0gXFxgZXNjXFxgOiBDYW5jZWwgZGljdGF0aW9uXG5cbi0gXFxgZW50ZXJcXGAgc2VuZHM7IFxcYHNoaWZ0K2VudGVyXFxgIG9yIFxcYFxcXFw8ZW50ZXI+XFxgIGluc2VydHMgYSBuZXdsaW5lXG4tIFxcYEBcXGAgb3BlbnMgYSBmdXp6eSBmaWxlIHBpY2tlcjsgZW50ZXIgaW5zZXJ0cyB0aGUgc2VsZWN0ZWQgcGF0aFxuLSBkcmFnIGFuIGltYWdlIGZpbGUgaW50byB0aGUgdGVybWluYWwgdG8gYXR0YWNoIGl0OiBpdCBhcHBlYXJzIGlubGluZSBhcyBcXGBbSW1hZ2UgI05dXFxgLCBleGFjdGx5IHdoZXJlIHlvdXIgY3Vyc29yIGlzLCBzbyBpbWFnZXMgY2FuIHNpdCBiZXR3ZWVuIHNlbnRlbmNlczsgYmFja3NwYWNlIGFmdGVyIG9uZSByZW1vdmVzIHRoZSB3aG9sZSBhdHRhY2htZW50XG4tIFxcYHRhYlxcYCBjb21wbGV0ZXM6IFxcYC9zdW1tPHRhYj5cXGAgZmluaXNoZXMgdGhlIGNvbW1hbmQgbmFtZSBhbmQgY3ljbGVzIHRocm91Z2ggbWF0Y2hlcyBvbiByZXBlYXQ7IGFmdGVyIGFuIGFyZ3VtZW50IHNwYWNlIGl0IGNvbXBsZXRlcyB2YWx1ZXMgKFxcYC9tb2RlbCBmbGE8dGFiPlxcYCwgXFxgL2NvbG9yIDx0YWI+XFxgLCBcXGAvZWZmb3J0IDx0YWI+XFxgKSBhbmQgZmlsZSBwYXRocyBmb3Igc2tpbGxzIGFuZCBjb21tYW5kcy4gS2VlcCB0eXBpbmcgdG8gbmFycm93LCB0YWIgb3IgZW50ZXIgaW5zZXJ0c1xuLSBcXGB1cFxcYCBhbmQgXFxgZG93blxcYCBvbiBhbiBlbXB0eSBjb21wb3NlciByZWNhbGwgbWVzc2FnZXMgeW91IGFscmVhZHkgc2VudFxuLSBcXGBjdHJsK3JcXGAgb3BlbnMgcmV3aW5kIChzYW1lIGFzIFxcYC9yZXdpbmRcXGApOyBcXGAvaGlzdG9yeVxcYCBmdXp6eS1zZWFyY2hlcyB5b3VyIG9sZCBwcm9tcHRzIGFuZCBwdXRzIHRoZSBzZWxlY3RlZCBvbmUgYmFjayBpbiB0aGUgY29tcG9zZXJcbi0gXFxgY3RybCtzXFxgIG9wZW5zIHRoZSBzZXNzaW9uIHBpY2tlciAoc2FtZSBhcyBcXGAvcmVzdW1lXFxgKTsgXFxgY3RybCt0XFxgIG9wZW5zIHRoZSBtb2RlbCBwaWNrZXJcbi0gXFxgY3RybCtwXFxgIHN3aXRjaGVzIHByb2plY3RzOiBwaWNrIG9uZSBhbmQgcGljbyBqdW1wcyB0byBpdHMgbW9zdCByZWNlbnQgc2Vzc2lvbiwgY2hhbmdpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCB0b29scywgY29udGV4dCwgYW5kIE1DUCBzZXJ2ZXJzIHRvIG1hdGNoOyBcXGBjdHJsK3hcXGAgdHdpY2UgZGVsZXRlcyBhIHByb2plY3QncyBwaWNvIGhpc3RvcnkgKGFsbCBpdHMgc2Vzc2lvbnMgYW5kIG1lbW9yaWVzKTsgXFxgL25ld1xcYCBzdGFydHMgYSBmcmVzaCBzZXNzaW9uIGluIHRoZSBjdXJyZW50IHByb2plY3Rcbi0gXFxgY3RybCtiXFxgIGN5Y2xlcyB0aGlua2luZyBlZmZvcnQgKGRlZmF1bHQsIGxvdywgbWVkaXVtLCBoaWdoLCBtYXgpIG9uIG1vZGVscyB0aGF0IHN1cHBvcnQgaXQ7IFxcYC9lZmZvcnRcXGAgb3BlbnMgdGhlIGZ1bGwgcGlja2VyXG4tIGluc2lkZSBhIHNlYXJjaCBwYW5lbCwgXFxgY3RybCtzXFxgIGN5Y2xlcyB0aGUgc2NvcGUgaW5zdGVhZDogdGhpcyBzZXNzaW9uLCB0aGlzIHByb2plY3QsIG9yIGV2ZXJ5d2hlcmVcbi0gXFxgL3Jld2luZFxcYCByZXN0b3JlcyB0aGUgY29udmVyc2F0aW9uIHRvIGFuIGVhcmxpZXIgbWVzc2FnZTsgYSByZXdpbmQgY2FuIGJlIHVuZG9uZSB3aXRoIFxcYGN0cmwrelxcYFxuLSBtZXNzYWdlcyBzZW50IHdoaWxlIHRoZSBhZ2VudCBpcyByZXNwb25kaW5nIHF1ZXVlIHVwIGFib3ZlIHRoZSBjb21wb3NlciBhbmQgYXJlIGRlbGl2ZXJlZCBhcyBvbmUgbWVzc2FnZSB3aGVuIHRoZSB0dXJuIGZpbmlzaGVzOyBcXGB1cFxcYCBwdWxscyB0aGVtIGJhY2sgZm9yIGVkaXRpbmdcbi0gXFxgZXNjXFxgIGludGVycnVwdHMgYSBzdHJlYW1pbmcgcmVzcG9uc2UsIG9yIGNsZWFycyB0aGUgY29tcG9zZXIgd2hlbiBpZGxlXG5cbiMjIE1vdmluZyBhcm91bmRcblxuLSBcXGB0YWJcXGAgc3dpdGNoZXMgZm9jdXMgYmV0d2VlbiB0aGUgdHJhbnNjcmlwdCBhbmQgdGhlIGNvbXBvc2VyXG4tIHdpdGggdGhlIHRyYW5zY3JpcHQgZm9jdXNlZCwgXFxgdXBcXGAvXFxgZG93blxcYC9cXGBqXFxgL1xcYGtcXGAgc2Nyb2xsIGFuZCBcXGBnXFxgL1xcYEdcXGAganVtcCB0byB0aGUgZW5kc1xuLSBsb25nIHNlc3Npb25zIHJlbmRlciBvbmx5IHRoZSBuZXdlc3QgNTAgbWVzc2FnZXM7IHNjcm9sbGluZyB0byB0aGUgdmVyeSB0b3AgbG9hZHMgb2xkZXIgb25lcyBpbiBiYXRjaGVzICh0aGUgdG9wIGxpbmUgc2hvd3MgaG93IG1hbnkgYXJlIGhpZGRlbilcbi0gdGhlIG1vdXNlIHdoZWVsIHNjcm9sbHM7IGNsaWNrLWRyYWcgc2VsZWN0cyB0ZXh0IGFuZCBjb3BpZXMgaXQgb24gcmVsZWFzZVxuLSBcXGBjdHJsK2NcXGAgdHdpY2UgZXhpdHNcblxuIyMgU2hlbGxzXG5cblRoZSBhZ2VudCBjYW4gcnVuIGxvbmctbGl2ZWQgcHJvY2Vzc2VzIChkZXYgc2VydmVycywgd2F0Y2hlcnMpIHdpdGggXFxgYmFzaCBiYWNrZ3JvdW5kOiB0cnVlXFxgLCB0aGVuIHJlYWQgdGhlaXIgb3V0cHV0IGFuZCBzdG9wIHRoZW0gaXRzZWxmLiBTaGVsbHMgYXBwZWFyIGJlbG93IHRoZSBjb21wb3NlciBhbmQgcmVtYWluIHRoZXJlIGFmdGVyIGV4aXQ6IHRhYiBmb2N1c2VzIHRoZSBsaXN0LCBqL2sgbW92ZXMsIGVudGVyIG9wZW5zIHRoZSBjb21tYW5kIGFuZCBsaXZlIG91dHB1dCwgYW5kIFxcYGN0cmwreFxcYCBraWxscyBhIHJ1bm5pbmcgc2hlbGwgb3IgZGlzbWlzc2VzIGEgZmluaXNoZWQgb25lLiBXaGVuIGEgc2hlbGwgZXhpdHMgb24gaXRzIG93biwgdGhlIGFnZW50IGlzIG5vdGlmaWVkIGFuZCByZXNwb25kczsgc2hlbGxzIGRpZSB3aXRoIHBpY28sIGFuZCBxdWl0dGluZyB3YXJucyB5b3UgaWYgYW55IGFyZSBzdGlsbCB1cC5cblxuIyMgU3Vic2NyaXB0aW9uc1xuXG5cXGAvY29ubmVjdFxcYCBsaXN0cyBzdWJzY3JpcHRpb24gcHJvdmlkZXJzIHlvdSBjYW4gc2lnbiBpbiB3aXRoIGluc3RlYWQgb2YgQVBJIGtleXMuIE9wZW5BSSAoQ2hhdEdQVCAvIENvZGV4IHBsYW4pIHNpZ25zIGluIHRocm91Z2ggeW91ciBicm93c2VyIHZpYSBPQXV0aDsgdG9rZW5zIGFyZSBzdG9yZWQgaW4gXFxgfi8ucGljby9hdXRoLmpzb25cXGAgYW5kIHJlZnJlc2hlZCBhdXRvbWF0aWNhbGx5LCBzbyB5b3Ugc2lnbiBpbiBvbmNlLiBPbmNlIGNvbm5lY3RlZCwgY29kZXggbW9kZWxzIGFwcGVhciBpbiBcXGAvbW9kZWxcXGAsIGJpbGxlZCB0byB5b3VyIHBsYW4uIFxcYGRcXGAgaW4gdGhlIHBhbmVsIGRpc2Nvbm5lY3RzLlxuXG4jIyBNZW1vcnlcblxuVGhlIGFnZW50IHNhdmVzIGR1cmFibGUgZmFjdHMgd2l0aCB0aGUgcmVtZW1iZXIgdG9vbDogb25lIGZpbGUgcGVyIG1lbW9yeSB1bmRlciBcXGB+Ly5waWNvL21lbW9yeVxcYCAoZ2xvYmFsKSBvciB0aGUgcHJvamVjdCdzIGRpcmVjdG9yeSBpbiBcXGB+Ly5waWNvL3Byb2plY3RzXFxgLiBPbmx5IGEgb25lLWxpbmUgaW5kZXggaXMgaW4gaXRzIGNvbnRleHQ7IGl0IGxvYWRzIGEgc3BlY2lmaWMgbWVtb3J5IHdpdGggdGhlIHJlY2FsbCB0b29sIHdoZW4gcmVsZXZhbnQuIFxcYC9tZW1vcnlcXGAgbGlzdHMgZXZlcnl0aGluZyBpdCBrbm93cyB3aXRoIGEgY29udGVudCBwcmV2aWV3OiBcXGBjdHJsK3NcXGAgY3ljbGVzIHRoZSBzY29wZSBmaWx0ZXIgKGFsbCwgcHJvamVjdCwgZ2xvYmFsKSBhbmQgXFxgY3RybCt4XFxgIHR3aWNlIGZvcmdldHMgdGhlIHNlbGVjdGVkIG1lbW9yeS4gWW91IGNhbiBhbHNvIGFzayB0aGUgYWdlbnQgdG8gcmVtZW1iZXIsIGZvcmdldCwgb3IgY2xlYW4gdXAgaXRzIG1lbW9yaWVzIGluIHBsYWluIGxhbmd1YWdlLlxuXG4jIyBXYWtlLXVwc1xuXG5UaGUgYWdlbnQgY2FuIHNjaGVkdWxlIG9uZS10aW1lIHdha2UtdXBzIGZvciBpdHNlbGYgd2l0aCB0aGUgc2NoZWR1bGVfd2FrZXVwIHRvb2w6IGFmdGVyIHRoZSBkZWxheSBpdCByZWNlaXZlcyBpdHMgb3duIG5vdGUgYXMgYSBzeXN0ZW0gbm90aWZpY2F0aW9uIGFuZCBhY3RzIG9uIGl0LiBSZWN1cnJpbmcgbG9vcHMgYXJlIGp1c3QgdGhlIGFnZW50IHJlc2NoZWR1bGluZyBhdCB0aGUgZW5kIG9mIGVhY2ggd2FrZS11cC4gXFxgL3dha2V1cHNcXGAgbGlzdHMgcGVuZGluZyBvbmVzIHdpdGggbGl2ZSBjb3VudGRvd25zOyBlbnRlciBvciBcXGBjdHJsK3hcXGAgY2FuY2VscyAocHJlc3MgdHdpY2UpLiBBIFxcYFx1MjNGMCBOXFxgIGluIHRoZSBmb290ZXIgc2hvd3MgaG93IG1hbnkgYXJlIHBlbmRpbmcuIFdha2UtdXBzIGxpdmUgaW4gbWVtb3J5IGFuZCBhcmUgbG9zdCB3aGVuIHBpY28gZXhpdHMuXG5cbiMjIEFwcGVhcmFuY2VcblxucGljbyBwaWNrcyBhIGxpZ2h0IG9yIGRhcmsgcGFsZXR0ZSBhdCBzdGFydHVwIGJ5IGFza2luZyB0aGUgdGVybWluYWwgZm9yIGl0cyBiYWNrZ3JvdW5kIGNvbG9yIChPU0MgMTEpLCBzbyBpdCBtYXRjaGVzIHdoYXRldmVyIHRoZW1lIHlvdXIgdGVybWluYWwgdXNlcy4gXFxgL3RoZW1lXFxgIG9wZW5zIGEgcGlja2VyIHRoYXQgcHJldmlld3MgZWFjaCB0aGVtZSBhcyB5b3UgbW92ZSBhbmQgcGVyc2lzdHMgeW91ciBjaG9pY2UgaW4gXFxgfi8ucGljby9jb25maWcuanNvblxcYDsgXFxgL3RoZW1lIGxpZ2h0XFxgLCBcXGAvdGhlbWUgZGFya1xcYCwgb3IgXFxgL3RoZW1lIGF1dG9cXGAgYXBwbGllcyBvbmUgZGlyZWN0bHkuIFxcYC9jb2xvclxcYCB0aW50cyBhIHNpbmdsZSBzZXNzaW9uJ3MgYWNjZW50IGFuZCBpcyBpbmRlcGVuZGVudCBvZiB0aGUgcGFsZXR0ZS5cblxuIyMgQ29udGV4dFxuXG5waWNvIHJlYWRzIEFHRU5UUy5tZCBmaWxlcyBhdXRvbWF0aWNhbGx5OiBhIGdsb2JhbCBvbmUgZnJvbSB+Ly5waWNvLCB0aGVuIGV2ZXJ5IGFuY2VzdG9yIG9mIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgdXAgdG8gdGhlIGdpdCByb290LiBEZWVwZXIgZmlsZXMgd2luLiBBR0VOVFMubWQgZmlsZXMgaW4gc3ViZGlyZWN0b3JpZXMgbG9hZCBsYXppbHkgdGhlIGZpcnN0IHRpbWUgYSB0b29sIHRvdWNoZXMgdGhhdCBzdWJ0cmVlLiBJbiBhbnkgcHJvamVjdCBkaXJlY3Rvcnkgd2l0aG91dCBhbiBBR0VOVFMubWQsIGEgQ0xBVURFLm1kIGlzIGhvbm9yZWQgYXMgYSBmYWxsYmFjayBzbyBleGlzdGluZyByZXBvcyB3b3JrIHVuY2hhbmdlZDsgQUdFTlRTLm1kIGFsd2F5cyB3aW5zIHdoZW4gYm90aCBleGlzdCwgYW5kIHRoZSBmYWxsYmFjayBuZXZlciBhcHBsaWVzIHRvIHRoZSBnbG9iYWwgZmlsZS5cblxuU2Vzc2lvbnMgYXJlIHN0b3JlZCB1bmRlciB+Ly5waWNvIGFzIGpzb25sIGV2ZW50IGxvZ3M7IFxcYC9yZXN1bWVcXGAgZm9sZHMgb25lIGJhY2sgaW50byBleGFjdGx5IHRoaXMgdmlldy5cblxuXFxgL2NvbnRleHRcXGAgYnJlYWtzIGRvd24gd2hhdCB0aGUgbmV4dCByZXF1ZXN0IHdpbGwgY29udGFpbiAtIHN5c3RlbSBwcm9tcHQsIHRvb2wgc2NoZW1hcywgcHJvamVjdCBpbnN0cnVjdGlvbnMsIG1lbW9yeSBpbmRleCwgY29tcGFjdGlvbiBzdW1tYXJ5LCBhbmQgY29udmVyc2F0aW9uIC0gd2l0aCBhbiBlc3RpbWF0ZWQgc2l6ZSBmb3IgZWFjaCBwaWVjZSBuZXh0IHRvIHRoZSBwcm92aWRlci1tZWFzdXJlZCB0b3RhbC5cblxuVGhlIGZvb3RlcidzIFxcYGN0eCAlXFxgIHNob3dzIGhvdyBmdWxsIHRoZSBtb2RlbCdzIGNvbnRleHQgaXMuIEF0IDg1JSBwaWNvIGF1dG8tY29tcGFjdHM6IHRoZSBvbGRlciBjb252ZXJzYXRpb24gaXMgc3VtbWFyaXplZCBpbiBhIHN0cnVjdHVyZWQgZm9ybSwgdGhlIG1vc3QgcmVjZW50IHR1cm5zIGFyZSBrZXB0IHZlcmJhdGltLCBhbmQgdGhlIG1vZGVsIGlzIHRvbGQgd2hlcmUgdGhlIGZ1bGwgc2Vzc2lvbiBmaWxlIGxpdmVzIHNvIGl0IGNhbiByZWFkIGV4YWN0IGRldGFpbHMgYmFjayBvbiBkZW1hbmQuIE5vdGhpbmcgdmlzaWJsZSBjaGFuZ2VzIGluIHRoZSB0cmFuc2NyaXB0LCBhbmQgcmV3aW5kIHN0aWxsIHdvcmtzIGFjcm9zcyBpdC4gXFxgL2NvbXBhY3RcXGAgcnVucyBpdCBtYW51YWxseSBhbmQgdGFrZXMgb3B0aW9uYWwgZm9jdXMgaW5zdHJ1Y3Rpb25zIChcXGAvY29tcGFjdCBmb2N1cyBvbiB0aGUgQVBJIGNoYW5nZXNcXGApLiBTZXQgXFxgXCJhdXRvQ29tcGFjdFwiOiBmYWxzZVxcYCBpbiBcXGB+Ly5waWNvL2NvbmZpZy5qc29uXFxgIHRvIGRpc2FibGUgdGhlIGF1dG9tYXRpYyB0cmlnZ2VyLlxuXG4tLS1cblxuKmVzYyB0YWtlcyB5b3UgYmFjayB0byB0aGUgY29udmVyc2F0aW9uKmBcblxuZXhwb3J0IGZ1bmN0aW9uIEhlbHAoeyBjb21tYW5kcywgb25DbG9zZSB9KSB7XG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiAnMTAwJScsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT5waWNvICBoZWxwPC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5cdTIxOTFcdTIxOTMgc2Nyb2xsICBlc2MgYmFjazwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgIDxTY3JvbGxCb3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gZm9jdXNlZCBzY3JvbGxiYXI+XG4gICAgICAgIDxNYXJrZG93biB0ZXh0PXtIRUxQX1RFWFQoY29tbWFuZHMpfSBjb2RlQmc9e251bGx9IC8+XG4gICAgICA8L1Njcm9sbEJveD5cbiAgICA8L2JveD5cbiAgKVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7QUFBQSxTQUFTLGNBQWMsV0FBVyxlQUFlO0FBQ2pELFNBQVMsYUFBYSxlQUFlLGtCQUFrQjtBQUN2RCxTQUFTLHVCQUF1QjtBQUNoQyxTQUFTLDRCQUE0QjtBQUNyQyxTQUFTLGlCQUFpQix5QkFBeUI7QUFDbkQsU0FBUyxvQkFBb0I7QUFDN0IsU0FBUyxrQkFBa0I7QUFJM0IsU0FBUyxhQUFh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U0FBUyxPQUFPLGVBQWUsV0FBVyxpQkFBaUIsT0FBTztBQUFBLEVBQzlHLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRTtBQUN4QixDQUFDO0FBQ0QsSUFBTSxPQUFPLFdBQVc7QUFDeEIsSUFBSSxJQUFJLE1BQU8sT0FBTSxXQUFXLGFBQWEsSUFBSSxLQUFLO0FBQ3RELFdBQVcsVUFBVSxDQUFDLFVBQVUsV0FBVyxRQUFRLEVBQUcsU0FBUSxHQUFHLFFBQVEsTUFBTTtBQUM3RSxhQUFXLE1BQU07QUFDakIsVUFBUSxLQUFLLENBQUM7QUFDaEIsQ0FBQztBQUNELFFBQVEsR0FBRyxRQUFRLE1BQU0sV0FBVyxNQUFNLENBQUM7QUFDM0MsSUFBTSxNQUFNLE1BQU0sTUFBTSxnQkFBQVIsTUFBQyxPQUFJLE1BQVksWUFBd0IsR0FBSSxFQUFFLE9BQU8sU0FBUyxLQUFLLEtBQUssTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDO0FBQzVILEtBQUssV0FBVyxJQUFJOyIsCiAgIm5hbWVzIjogWyJwcm92aWRlcnMiLCAiam9pbiIsICJtYWtlRXZlbnQiLCAicHJvdmlkZXJzIiwgImNvbmZpZyIsICJib290IiwgInJ1blR1cm4iLCAicmVhZENvbmZpZyIsICJjb25maWciLCAiZmlsZVVSTFRvUGF0aCIsICJyZWFkQ29uZmlnIiwgIlNjcm9sbEJveCIsICJ1c2VGb2N1cyIsICJ1c2VMYXlvdXQiLCAidXNlSW50ZXJ2YWwiLCAiY3JlYXRlU2lnbmFsIiwgImhvbWVkaXIiLCAiY3JlYXRlU2lnbmFsIiwgImVhc2UiLCAidXNlQW5pbWF0ZWQiLCAiaGlnaGxpZ2h0IiwgIndpZHRoIiwgImZ1enp5U2NvcmUiLCAianN4IiwgImNyZWF0ZVNpZ25hbCIsICJ1c2VBbmltYXRlZCIsICJlYXNlIiwgIndpZHRoIiwgInVzZWQiLCAicHJvdmlkZXJzIiwgIm5hbWUiLCAianN4IiwgImpzeHMiLCAidXNlTGF5b3V0IiwgIndpZHRoIiwgInVzZUZvY3VzIiwgImNyZWF0ZVNpZ25hbCIsICJ1c2VJbnRlcnZhbCIsICJob21lZGlyIiwgIlNjcm9sbEJveCIsICJwZW5kaW5nIiwgImNyZWF0ZVNpZ25hbCIsICJNZW51IiwgIkJ1dHRvbiIsICJ1c2VJbnB1dCIsICJmdXp6eVNjb3JlIiwgInJhbmtGdXp6eSIsICJqc3giLCAianN4cyIsICJjcmVhdGVTaWduYWwiLCAicmFua0Z1enp5IiwgImZ1enp5U2NvcmUiLCAidXNlSW5wdXQiLCAiQnV0dG9uIiwgIk1lbnUiLCAiaG9tZWRpciIsICJwZW5kaW5nIiwgImZhaWxlZCIsICJwZW5kaW5nIiwgImNhcHR1cmVSZWdpb24iLCAicGVuZGluZyIsICJleGVjRmlsZSIsICJta2R0ZW1wIiwgImV4aXN0c1N5bmMiLCAidG1wZGlyIiwgImpvaW4iLCAiY3JlYXRlU2lnbmFsIiwgInVzZUludGVydmFsIiwgIk1lbnUiLCAiU2Nyb2xsQm94IiwgIlNwaW5uZXIiLCAiVGV4dEFyZWEiLCAidXNlRm9jdXMiLCAidXNlSGl0VGVzdCIsICJ1c2VJbnB1dCIsICJ1c2VMYXlvdXQiLCAidXNlTW91c2UiLCAidXNlUmVzaXplIiwgIlNFU1NJT05fQ09MT1JTIiwgImZ1enp5U2NvcmUiLCAiY3JlYXRlU2lnbmFsIiwgImNyZWF0ZVNpZ25hbCIsICJ0aGVtZSIsICJjb21wYWN0TnVtYmVyIiwgImNyZWF0ZVNpZ25hbCIsICJlYXNlIiwgImxpbmVhciIsICJTY3JvbGxCb3giLCAidXNlQW5pbWF0ZWQiLCAidXNlSW5wdXQiLCAianN4IiwgImpzeHMiLCAibWl4Q29sb3IiLCAidXNlQW5pbWF0ZWQiLCAiZWFzZSIsICJsaW5lYXIiLCAiZmFpbGVkIiwgImNyZWF0ZVNpZ25hbCIsICJTY3JvbGxCb3giLCAidXNlSW5wdXQiLCAibGFiZWwiLCAiY3JlYXRlU2lnbmFsIiwgIlRleHRJbnB1dCIsICJ1c2VMYXlvdXQiLCAianN4IiwgImpzeHMiLCAidXNlTGF5b3V0IiwgImNyZWF0ZVNpZ25hbCIsICJUZXh0SW5wdXQiLCAiY3JlYXRlU2lnbmFsIiwgIkJ1dHRvbiIsICJUZXh0SW5wdXQiLCAidXNlSW5wdXQiLCAianN4IiwgImpzeHMiLCAiY3JlYXRlU2lnbmFsIiwgIml0ZW0iLCAidXNlSW5wdXQiLCAiQnV0dG9uIiwgIlRleHRJbnB1dCIsICJjcmVhdGVTaWduYWwiLCAidXNlSW50ZXJ2YWwiLCAidXNlTW91c2UiLCAianN4IiwgImpzeHMiLCAid2lkdGgiLCAidmVyc2lvbiIsICJjcmVhdGVTaWduYWwiLCAidXNlTW91c2UiLCAidXNlSW50ZXJ2YWwiLCAiTWFya2Rvd24iLCAiU2Nyb2xsQm94IiwgInVzZUlucHV0IiwgImpzeCIsICJqc3hzIiwgInVzZUlucHV0IiwgIlNjcm9sbEJveCIsICJNYXJrZG93biIsICJqc3giLCAianN4cyIsICJ1c2VMYXlvdXQiLCAidXNlSW5wdXQiLCAidXNlSGl0VGVzdCIsICJ1c2VNb3VzZSIsICJjcmVhdGVTaWduYWwiLCAiYm9vdCIsICJ2ZXJzaW9uIiwgInVzZUludGVydmFsIiwgInVzZVJlc2l6ZSIsICJ3aWR0aCIsICJkZWZhdWx0TW9kZWwiLCAiZWxhcHNlZCIsICJTRVNTSU9OX0NPTE9SUyIsICJob21lZGlyIiwgImFybWVkIiwgInVzZUZvY3VzIiwgIml0ZW1zIiwgInJvdyIsICJmdXp6eVNjb3JlIiwgIlNjcm9sbEJveCIsICJUZXh0QXJlYSIsICJNZW51IiwgInBlbmRpbmciLCAiU3Bpbm5lciIsICJjb21wYWN0TnVtYmVyIiwgImpzeCIsICJpc0Rldkluc3RhbGwiLCAicnVuVXBkYXRlIiwgImZldGNoTGF0ZXN0VmVyc2lvbiIsICJuZXdlclZlcnNpb24iLCAicnVuSGVhZGxlc3MiLCAicnVuU2hlbGwiLCAicmVhZENvbmZpZyIsICJmaWxlVVJMVG9QYXRoIl0KfQo=