@dockstat/outline-sync 1.0.1 → 1.0.2

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.
Files changed (2) hide show
  1. package/dist/sync.js +5 -3
  2. package/package.json +1 -1
package/dist/sync.js CHANGED
@@ -1,4 +1,6 @@
1
- import j from"node:fs/promises";import{existsSync as Y}from"node:fs";import V from"node:path";var F="pages.json",R=process.argv.slice(2),M=process.env.OUTLINE_BASE_URL||null,D=process.env.OUTLINE_API_KEY||null,y=null,B=!1,A=!1,x=!1;for(let J of R)if(J.startsWith("--collection-id="))y=J.split("=")[1]||null;else if(J==="--dry-run")B=!0;else if(J==="--init")A=!0;else if(J==="--list-collections")x=!0;else if(J==="init")A=!0;else if(J==="list-collections")x=!0;else if(J==="--help"||J==="-h")C();else if(J.startsWith("--api-key="))D=J.split("=")[1]||null;else if(J.startsWith("--base-url="))M=J.split("=")[1]||null;if(!M)M="https://app.getoutline.com";var E={Authorization:`Bearer ${D}`,"Content-Type":"application/json"};function C(){console.log(`
1
+ #!/usr/bin/env bun
2
+ // @bun
3
+ import j from"fs/promises";import{existsSync as Y}from"fs";import V from"path";var F="pages.json",R=process.argv.slice(2),M=process.env.OUTLINE_BASE_URL||null,D=process.env.OUTLINE_API_KEY||null,y=null,B=!1,A=!1,x=!1;for(let J of R)if(J.startsWith("--collection-id="))y=J.split("=")[1]||null;else if(J==="--dry-run")B=!0;else if(J==="--init")A=!0;else if(J==="--list-collections")x=!0;else if(J==="init")A=!0;else if(J==="list-collections")x=!0;else if(J==="--help"||J==="-h")C();else if(J.startsWith("--api-key="))D=J.split("=")[1]||null;else if(J.startsWith("--base-url="))M=J.split("=")[1]||null;if(!M)M="https://app.getoutline.com";var E={Authorization:`Bearer ${D}`,"Content-Type":"application/json"};function C(){console.log(`
2
4
  Usage:
3
5
  OUTLINE_API_KEY=... bun run sync.ts [options]
4
6
 
@@ -20,5 +22,5 @@ Examples:
20
22
 
21
23
  `,"utf8"),console.log(`Created local placeholder file ${H}`);let K=await j.readFile(H,"utf8");try{let W=await m(Q.title,K,$,X);if(W?.id)Q.id=W.id,console.log(`Created Outline doc "${Q.title}" id=${Q.id} in collection ${$}`),await S(J,Z);else console.warn(`Create returned no id for "${Q.title}"`)}catch(W){console.error(`Failed to create Outline doc for "${Q.title}": ${W}`)}}let k=Q.id||X;if(Q.children?.length)for(let K of Q.children)await T(J,K,k,Z,$)}async function d(){if(x){console.log("Fetching collections...");try{let X=await f();for(let Z of X)console.log(`${Z.id} ${Z.name}`)}catch(X){console.error(`Failed to list collections: ${X}`)}return}if(A){let X=y||b;if(!X)console.error("Init requires a collection id. Provide with --collection-id=ID or set OUTLINE_COLLECTION_ID env var."),process.exit(1);console.log(`Bootstrapping manifest from collection ${X} (dry-run=${B})...`);try{let Z=await r(X);console.log(`Fetched ${Z.length} documents from Outline.`);let $=await c(Z,"docs");await S({collectionId:X,pages:$},F),console.log(`Wrote manifest to ${F} (pages saved into docs/).`)}catch(Z){console.error(`Init failed: ${Z}`)}return}if(!Y(F))console.error(`Manifest ${F} not found. Run with --init --collection-id=COLLECTION_ID to bootstrap.`),process.exit(1);let J=await p(F),Q=u(J.collectionId??null);if(console.log(`Syncing into single collection: ${Q}`),B)console.log("Running in dry-run mode; no destructive actions will be performed.");for(let X of J.pages)await T(J,X,null,V.resolve(F),Q);await S(J,V.resolve(F)),console.log("Sync complete.")}d();
22
24
 
23
- //# debugId=20779AEF9586C6D764756E2164756E21
24
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3luYy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIvKipcbiAqIE91dGxpbmUgPD4gR2l0IE1hcmtkb3duIHR3by13YXkgc3luYyAoc2luZ2xlLWNvbGxlY3Rpb24pICsgaW5pdFxuICogLSBCdW4gcnVudGltZSAodXNlcyBCdW4uc3Bhd25TeW5jLCBnbG9iYWwgZmV0Y2gpXG4gKlxuICogTmV3IGZlYXR1cmVzOlxuICogIC0gLS1pbml0IDogYm9vdHN0cmFwIHBhZ2VzLmpzb24gKyBtYXJrZG93biBmaWxlcyBmcm9tIGFuIGV4aXN0aW5nIGNvbGxlY3Rpb25cbiAqICAtIC0tbGlzdC1jb2xsZWN0aW9ucyA6IHByaW50cyBjb2xsZWN0aW9ucyAoaWQgKyBuYW1lKVxuICpcbiAqIFVzYWdlOlxuICogIE9VVExJTkVfQVBJX0tFWT0uLi4gYnVuIHJ1biBzeW5jLnRzIC0taW5pdCAtLWNvbGxlY3Rpb24taWQ9Q09MTEVDVElPTl9VVUlEXG4gKiAgT1VUTElORV9BUElfS0VZPS4uLiBidW4gcnVuIHN5bmMudHMgLS1saXN0LWNvbGxlY3Rpb25zXG4gKiAgT1VUTElORV9BUElfS0VZPS4uLiBidW4gcnVuIHN5bmMudHMgICAgICAgICAgICAjIG5vcm1hbCBzeW5jXG4gKlxuICogTk9URTogaWYgeW91IHJ1biAtLWluaXQgd2l0aG91dCAtLWRyeS1ydW4gaXQgd2lsbCBhY3R1YWxseSB3cml0ZSBmaWxlcyAmIHBhZ2VzLmpzb25cbiAqL1xuXG5pbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuXG50eXBlIFBhZ2VFbnRyeSA9IHtcbiAgdGl0bGU6IHN0cmluZztcbiAgZmlsZTogc3RyaW5nO1xuICBpZDogc3RyaW5nIHwgbnVsbDtcbiAgY2hpbGRyZW4/OiBQYWdlRW50cnlbXTtcbn07XG5cbnR5cGUgTWFuaWZlc3QgPSB7XG4gIGNvbGxlY3Rpb25JZDogc3RyaW5nO1xuICBwYWdlczogUGFnZUVudHJ5W107XG59O1xuXG5jb25zdCBNQU5JRkVTVCA9IFwicGFnZXMuanNvblwiO1xuXG5jb25zdCBhcmd2ID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpO1xubGV0IEJBU0VfVVJMID0gcHJvY2Vzcy5lbnYuT1VUTElORV9CQVNFX1VSTCB8fCBudWxsO1xubGV0IEFQSV9LRVkgPSBwcm9jZXNzLmVudi5PVVRMSU5FX0FQSV9LRVkgfHwgbnVsbDtcbmxldCBDTElfQ09MTEVDVElPTl9PVkVSUklERTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5sZXQgRFJZX1JVTiA9IGZhbHNlO1xubGV0IERPX0lOSVQgPSBmYWxzZTtcbmxldCBMSVNUX0NPTExFQ1RJT05TID0gZmFsc2U7XG5cbmZvciAoY29uc3QgYSBvZiBhcmd2KSB7XG4gIGlmIChhLnN0YXJ0c1dpdGgoXCItLWNvbGxlY3Rpb24taWQ9XCIpKSB7XG4gICAgQ0xJX0NPTExFQ1RJT05fT1ZFUlJJREUgPSBhLnNwbGl0KFwiPVwiKVsxXSB8fCBudWxsO1xuICB9IGVsc2UgaWYgKGEgPT09IFwiLS1kcnktcnVuXCIpIHtcbiAgICBEUllfUlVOID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChhID09PSBcIi0taW5pdFwiKSB7XG4gICAgRE9fSU5JVCA9IHRydWU7XG4gIH0gZWxzZSBpZiAoYSA9PT0gXCItLWxpc3QtY29sbGVjdGlvbnNcIikge1xuICAgIExJU1RfQ09MTEVDVElPTlMgPSB0cnVlO1xuICB9IGVsc2UgaWYgKGEgPT09IFwiaW5pdFwiKSB7XG4gICAgRE9fSU5JVCA9IHRydWU7XG4gIH0gZWxzZSBpZiAoYSA9PT0gXCJsaXN0LWNvbGxlY3Rpb25zXCIpIHtcbiAgICBMSVNUX0NPTExFQ1RJT05TID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChhID09PSBcIi0taGVscFwiIHx8IGEgPT09IFwiLWhcIikge1xuICAgIHByaW50SGVscEFuZEV4aXQoKTtcbiAgfSBlbHNlIGlmIChhLnN0YXJ0c1dpdGgoXCItLWFwaS1rZXk9XCIpKSB7XG4gICAgQVBJX0tFWSA9IGEuc3BsaXQoXCI9XCIpWzFdIHx8IG51bGw7XG4gIH0gZWxzZSBpZiAoYS5zdGFydHNXaXRoKFwiLS1iYXNlLXVybD1cIikpIHtcbiAgICBCQVNFX1VSTCA9IGEuc3BsaXQoXCI9XCIpWzFdIHx8IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgLy8gaWdub3JlIHVua25vd24sIGFsbG93IG90aGVyIGZsYWdzIGluIGZ1dHVyZVxuICB9XG59XG5cbmlmICghQkFTRV9VUkwpIHtcbiAgQkFTRV9VUkwgPSBcImh0dHBzOi8vYXBwLmdldG91dGxpbmUuY29tXCI7XG59XG5cbmNvbnN0IEhFQURFUlMgPSB7XG4gIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtBUElfS0VZfWAsXG4gIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxufTtcblxuZnVuY3Rpb24gcHJpbnRIZWxwQW5kRXhpdCgpIHtcbiAgY29uc29sZS5sb2coYFxuVXNhZ2U6XG4gIE9VVExJTkVfQVBJX0tFWT0uLi4gYnVuIHJ1biBzeW5jLnRzIFtvcHRpb25zXVxuXG5PcHRpb25zOlxuICAtLWluaXQgICAgICAgICAgICAgICAgICAgICAgQm9vdHN0cmFwIHBhZ2VzLmpzb24gKyBtYXJrZG93biBmaWxlcyBmcm9tIGEgY29sbGVjdGlvblxuICAtLWNvbGxlY3Rpb24taWQ9Q09MX0lEICAgICAgVXNlIHRoaXMgY29sbGVjdGlvbiBpZCAocmVxdWlyZWQgd2l0aCAtLWluaXQgdW5sZXNzIE9VVExJTkVfQ09MTEVDVElPTl9JRCBzZXQpXG4gIC0tbGlzdC1jb2xsZWN0aW9ucyAgICAgICAgICBMaXN0IGNvbGxlY3Rpb25zIHlvdSBoYXZlIGFjY2VzcyB0byAocHJpbnRzIGlkICsgbmFtZSlcbiAgLS1kcnktcnVuICAgICAgICAgICAgICAgICAgIFByaW50IGFjdGlvbnMgd2l0aG91dCB3cml0aW5nIGFueXRoaW5nXG4gIC0taGVscCAgICAgICAgICAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuRXhhbXBsZXM6XG4gIE9VVExJTkVfQVBJX0tFWT0uLi4gYnVuIHJ1biBzeW5jLnRzIC0tbGlzdC1jb2xsZWN0aW9uc1xuICBPVVRMSU5FX0FQSV9LRVk9Li4uIGJ1biBydW4gc3luYy50cyAtLWluaXQgLS1jb2xsZWN0aW9uLWlkPWFiYy11dWlkXG4gIE9VVExJTkVfQVBJX0tFWT0uLi4gYnVuIHJ1biBzeW5jLnRzICAgICAgICAgICAgICAgICAgIyBwZXJmb3JtIHJlZ3VsYXIgc3luY1xuICBPVVRMSU5FX0FQSV9LRVk9Li4uIGJ1biBydW4gc3luYy50cyAtLWRyeS1ydW5cbmApO1xuICBwcm9jZXNzLmV4aXQoMCk7XG59XG5cbmNvbnN0IEVOVl9DT0xMRUNUSU9OID0gcHJvY2Vzcy5lbnYuT1VUTElORV9DT0xMRUNUSU9OX0lEIHx8IG51bGw7XG5mdW5jdGlvbiByZXNvbHZlQ29sbGVjdGlvbklkKG1hbmlmZXN0Q29sbGVjdGlvbklkOiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHtcbiAgaWYgKENMSV9DT0xMRUNUSU9OX09WRVJSSURFKSByZXR1cm4gQ0xJX0NPTExFQ1RJT05fT1ZFUlJJREU7XG4gIGlmIChFTlZfQ09MTEVDVElPTikgcmV0dXJuIEVOVl9DT0xMRUNUSU9OO1xuICBpZiAobWFuaWZlc3RDb2xsZWN0aW9uSWQpIHJldHVybiBtYW5pZmVzdENvbGxlY3Rpb25JZDtcbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIFwiTm8gY29sbGVjdGlvbiBpZCBmb3VuZC4gUHJvdmlkZSBjb2xsZWN0aW9uSWQgaW4gcGFnZXMuanNvbiwgb3Igc2V0IE9VVExJTkVfQ09MTEVDVElPTl9JRCBlbnYgdmFyLCBvciBwYXNzIC0tY29sbGVjdGlvbi1pZD1JRFwiLFxuICApO1xufVxuXG5jb25zdCBzbGVlcCA9IChtczogbnVtYmVyKSA9PiBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCBtcykpO1xuXG5mdW5jdGlvbiBzbHVnaWZ5VGl0bGUodGl0bGU6IHN0cmluZykge1xuICByZXR1cm4gdGl0bGVcbiAgICAudG9TdHJpbmcoKVxuICAgIC5ub3JtYWxpemUoXCJORktEXCIpXG4gICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNkZdL2csIFwiXCIpIC8vIHJlbW92ZSBkaWFjcml0aWNzXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAucmVwbGFjZSgvW15hLXowLTldKy9nLCBcIi1cIilcbiAgICAucmVwbGFjZSgvKF4tfC0kKSsvZywgXCJcIilcbiAgICAuc2xpY2UoMCwgMTIwKTtcbn1cblxuZnVuY3Rpb24gZ2V0R2l0VGltZXN0YW1wTXMoZmlsZVBhdGg6IHN0cmluZyk6IG51bWJlciB8IG51bGwge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc29sdmVkID0gcGF0aC5yZXNvbHZlKGZpbGVQYXRoKTtcbiAgICBjb25zdCBvdXQgPSBCdW4uc3Bhd25TeW5jKFxuICAgICAgW1wiZ2l0XCIsIFwibG9nXCIsIFwiLTFcIiwgXCItLWZvcm1hdD0lY3RcIiwgXCItLVwiLCByZXNvbHZlZF0sXG4gICAgICB7IGN3ZDogcHJvY2Vzcy5jd2QoKSB9LFxuICAgICk7XG4gICAgaWYgKG91dC5leGl0Q29kZSAhPT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHR4dCA9IG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShvdXQuc3Rkb3V0KS50cmltKCk7XG4gICAgaWYgKCF0eHQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHNlYyA9IE51bWJlcih0eHQpO1xuICAgIGlmIChOdW1iZXIuaXNOYU4oc2VjKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHNlYyAqIDEwMDA7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldExvY2FsVGltZXN0YW1wTXMoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gIGNvbnN0IGdpdFRzID0gZ2V0R2l0VGltZXN0YW1wTXMoZmlsZVBhdGgpO1xuICBpZiAoZ2l0VHMpIHJldHVybiBnaXRUcztcbiAgY29uc3Qgc3QgPSBhd2FpdCBmcy5zdGF0KGZpbGVQYXRoKTtcbiAgcmV0dXJuIHN0Lm10aW1lTXM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNhZmVXcml0ZUZpbGUoZmlsZVBhdGg6IHN0cmluZywgY29udGVudDogc3RyaW5nKSB7XG4gIGlmIChleGlzdHNTeW5jKGZpbGVQYXRoKSkge1xuICAgIGNvbnN0IGJhayA9IGAke2ZpbGVQYXRofS5vdXRsaW5lLXN5bmMuYmFrLiR7RGF0ZS5ub3coKX1gO1xuICAgIGlmICghRFJZX1JVTikge1xuICAgICAgYXdhaXQgZnMuY29weUZpbGUoZmlsZVBhdGgsIGJhayk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKGBCYWNrZWQgdXAgZXhpc3RpbmcgZmlsZSB0byAke2Jha31gKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIURSWV9SVU4pIHtcbiAgICAgIGF3YWl0IGZzLm1rZGlyKHBhdGguZGlybmFtZShmaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuICBpZiAoIURSWV9SVU4pIHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZVBhdGgsIGNvbnRlbnQsIFwidXRmOFwiKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBbZHJ5LXJ1bl0gd291bGQgd3JpdGUgZmlsZSAke2ZpbGVQYXRofSAoJHtjb250ZW50Lmxlbmd0aH0gYnl0ZXMpYCxcbiAgICApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG91dGxpbmVSZXF1ZXN0KFxuICBlbmRwb2ludDogc3RyaW5nLFxuICBib2R5OiBhbnksXG4gIHJldHJpZXMgPSAzLFxuKTogUHJvbWlzZTxhbnk+IHtcbiAgY29uc3QgdXJsID0gYCR7QkFTRV9VUkx9L2FwaS8ke2VuZHBvaW50fWA7XG4gIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDwgcmV0cmllczsgYXR0ZW1wdCsrKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiBIRUFERVJTLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDQyOSkge1xuICAgICAgICBjb25zdCBiYWNrb2ZmID0gMTAwMCAqIChhdHRlbXB0ICsgMSk7XG4gICAgICAgIGNvbnNvbGUud2FybihgUmF0ZSBsaW1pdGVkLiBCYWNraW5nIG9mZiAke2JhY2tvZmZ9bXNgKTtcbiAgICAgICAgYXdhaXQgc2xlZXAoYmFja29mZik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGBbT3V0bGluZV0gJHtyZXMuc3RhdHVzfSAke2VuZHBvaW50fSBwYXlsb2FkPWAsXG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBcInJlc3BvbnNlPVwiLFxuICAgICAgICAgIGpzb24sXG4gICAgICAgICk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgT3V0bGluZSBBUEkgZXJyb3IgJHtyZXMuc3RhdHVzfTogJHtKU09OLnN0cmluZ2lmeShqc29uKX1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGpzb247XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoYXR0ZW1wdCA9PT0gcmV0cmllcyAtIDEpIHRocm93IGVycjtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFJlcXVlc3QgZmFpbGVkIChhdHRlbXB0ICR7YXR0ZW1wdCArIDF9KTogJHtlcnJ9LiBSZXRyeWluZy4uLmAsXG4gICAgICApO1xuICAgICAgYXdhaXQgc2xlZXAoNTAwICogKGF0dGVtcHQgKyAxKSk7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIm91dGxpbmVSZXF1ZXN0OiB1bnJlYWNoYWJsZVwiKTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgQVBJIGhlbHBlcnMgZm9yIG5vcm1hbCBzeW5jXG4gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoT3V0bGluZUluZm8oZG9jdW1lbnRJZDogc3RyaW5nKSB7XG4gIGNvbnN0IHBheWxvYWQgPSB7IGlkOiBkb2N1bWVudElkIH07XG4gIGNvbnN0IGpzb24gPSBhd2FpdCBvdXRsaW5lUmVxdWVzdChcImRvY3VtZW50cy5pbmZvXCIsIHBheWxvYWQpO1xuICByZXR1cm4ganNvbi5kYXRhID8/IG51bGw7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU91dGxpbmVEb2N1bWVudChcbiAgdGl0bGU6IHN0cmluZyxcbiAgdGV4dDogc3RyaW5nLFxuICBjb2xsZWN0aW9uSWQ6IHN0cmluZyxcbiAgcGFyZW50RG9jdW1lbnRJZDogc3RyaW5nIHwgbnVsbCxcbikge1xuICBjb25zdCBwYXlsb2FkID0ge1xuICAgIHRpdGxlLFxuICAgIHRleHQsXG4gICAgY29sbGVjdGlvbklkLFxuICAgIHBhcmVudERvY3VtZW50SWQ6IHBhcmVudERvY3VtZW50SWQgfHwgbnVsbCxcbiAgICBwdWJsaXNoOiB0cnVlLFxuICB9O1xuICBpZiAoRFJZX1JVTikge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYFtkcnktcnVuXSB3b3VsZCBjcmVhdGUgZG9jIHRpdGxlPVwiJHt0aXRsZX1cIiBjb2xsZWN0aW9uPSR7Y29sbGVjdGlvbklkfSBwYXJlbnQ9JHtwYXJlbnREb2N1bWVudElkfWAsXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGBkcnktcnVuLSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgOSl9YCxcbiAgICAgIHRpdGxlLFxuICAgICAgdGV4dCxcbiAgICAgIGNvbGxlY3Rpb25JZCxcbiAgICAgIHBhcmVudERvY3VtZW50SWQsXG4gICAgfTtcbiAgfVxuICBjb25zdCBqc29uID0gYXdhaXQgb3V0bGluZVJlcXVlc3QoXCJkb2N1bWVudHMuY3JlYXRlXCIsIHBheWxvYWQpO1xuICByZXR1cm4ganNvbi5kYXRhO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVPdXRsaW5lRG9jdW1lbnQoXG4gIGlkOiBzdHJpbmcsXG4gIHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHRleHQ6IHN0cmluZyxcbikge1xuICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7IGlkLCB0ZXh0LCBwdWJsaXNoOiB0cnVlIH07XG4gIGlmICh0aXRsZSkgcGF5bG9hZC50aXRsZSA9IHRpdGxlO1xuICBpZiAoRFJZX1JVTikge1xuICAgIGNvbnNvbGUubG9nKGBbZHJ5LXJ1bl0gd291bGQgdXBkYXRlIGRvYyBpZD0ke2lkfSB0aXRsZT0ke3RpdGxlfWApO1xuICAgIHJldHVybiB7IGlkLCB0aXRsZSwgdGV4dCB9O1xuICB9XG4gIGNvbnN0IGpzb24gPSBhd2FpdCBvdXRsaW5lUmVxdWVzdChcImRvY3VtZW50cy51cGRhdGVcIiwgcGF5bG9hZCk7XG4gIHJldHVybiBqc29uLmRhdGE7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgIEluaXQgaGVscGVyc1xuICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIExpc3QgT3V0bGluZSBjb2xsZWN0aW9ucyAocGFnZWQpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxpc3RDb2xsZWN0aW9ucygpOiBQcm9taXNlPHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXT4ge1xuICBjb25zdCBvdXQ6IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXSA9IFtdO1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgbGV0IGxpbWl0ID0gMTAwOyAvLyBPdXRsaW5lIG1heCBpcyAxMDBcbiAgd2hpbGUgKHRydWUpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QganNvbiA9IGF3YWl0IG91dGxpbmVSZXF1ZXN0KFwiY29sbGVjdGlvbnMubGlzdFwiLCB7IG9mZnNldCwgbGltaXQgfSk7XG4gICAgICBjb25zdCBkYXRhID0ganNvbi5kYXRhIHx8IFtdO1xuICAgICAgZm9yIChjb25zdCBjIG9mIGRhdGEpIG91dC5wdXNoKHsgaWQ6IGMuaWQsIG5hbWU6IGMubmFtZSB9KTtcbiAgICAgIGlmIChkYXRhLmxlbmd0aCA8IGxpbWl0KSBicmVhaztcbiAgICAgIG9mZnNldCArPSBkYXRhLmxlbmd0aDtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgLy8gRGVmZW5zaXZlOiBpZiBBUEkgY29tcGxhaW5zIGFib3V0IGxpbWl0LCByZXRyeSBvbmNlIHdpdGggbGltaXQ9MTAwXG4gICAgICBjb25zdCBtc2cgPSBlcnI/Lm1lc3NhZ2UgPz8gXCJcIjtcbiAgICAgIGlmIChtc2cuaW5jbHVkZXMoXCJQYWdpbmF0aW9uIGxpbWl0IGlzIHRvbyBsYXJnZVwiKSAmJiBsaW1pdCAhPT0gMTAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcIk91dGxpbmUgQVBJIGNvbXBsYWluZWQgYWJvdXQgbGltaXQ7IHJldHJ5aW5nIHdpdGggbGltaXQ9MTAwXCIsXG4gICAgICAgICk7XG4gICAgICAgIGxpbWl0ID0gMTAwO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBMaXN0IGFsbCBkb2N1bWVudHMgaW4gYSBjb2xsZWN0aW9uIChwYWdlZCkuXG4gKiBSZXR1cm5zIGFycmF5IG9mIGRvY3VtZW50cyB7IGlkLCB0aXRsZSwgdGV4dCwgcGFyZW50RG9jdW1lbnRJZCwgdXBkYXRlZEF0IH1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbGlzdERvY3VtZW50c0luQ29sbGVjdGlvbihjb2xsZWN0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8YW55W10+IHtcbiAgY29uc3Qgb3V0OiBhbnlbXSA9IFtdO1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgbGV0IGxpbWl0ID0gMTAwOyAvLyBtdXN0IGJlIDw9IDEwMCBwZXIgT3V0bGluZSBBUElcbiAgd2hpbGUgKHRydWUpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QganNvbiA9IGF3YWl0IG91dGxpbmVSZXF1ZXN0KFwiZG9jdW1lbnRzLmxpc3RcIiwge1xuICAgICAgICBjb2xsZWN0aW9uSWQsXG4gICAgICAgIG9mZnNldCxcbiAgICAgICAgbGltaXQsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRhdGEgPSBqc29uLmRhdGEgfHwgW107XG4gICAgICBmb3IgKGNvbnN0IGQgb2YgZGF0YSkgb3V0LnB1c2goZCk7XG4gICAgICBpZiAoZGF0YS5sZW5ndGggPCBsaW1pdCkgYnJlYWs7XG4gICAgICBvZmZzZXQgKz0gZGF0YS5sZW5ndGg7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGNvbnN0IG1zZyA9IGVycj8ubWVzc2FnZSA/PyBcIlwiO1xuICAgICAgaWYgKG1zZy5pbmNsdWRlcyhcIlBhZ2luYXRpb24gbGltaXQgaXMgdG9vIGxhcmdlXCIpICYmIGxpbWl0ICE9PSAxMDApIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIFwiT3V0bGluZSBBUEkgY29tcGxhaW5lZCBhYm91dCBsaW1pdDsgcmV0cnlpbmcgd2l0aCBsaW1pdD0xMDBcIixcbiAgICAgICAgKTtcbiAgICAgICAgbGltaXQgPSAxMDA7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIFdyaXRlIGRvY3MgdG8gZGlzayBhbmQgcmV0dXJuIHBhZ2VzIGFycmF5ICh3aXRoIGZpbGUgcGF0aHMgc2V0KVxuICovXG5hc3luYyBmdW5jdGlvbiBtYXRlcmlhbGl6ZURvY3NUb0ZpbGVzKFxuICBkb2NzOiBhbnlbXSxcbiAgZGVzdERpciA9IFwiZG9jc1wiLFxuKTogUHJvbWlzZTxQYWdlRW50cnlbXT4ge1xuICAvLyBkb2NzIGlzIGZsYXQgYXJyYXkgd2l0aCBpZC90aXRsZS90ZXh0L3BhcmVudERvY3VtZW50SWQgKG9yIHBhcmVudElkKVxuICBjb25zdCBpZFRvRmlsZW5hbWUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBjb25zdCB1c2VkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgLy8gMSkgYXNzaWduIHVuaXF1ZSBmaWxlbmFtZXMgYW5kIHdyaXRlIGZpbGVzXG4gIGZvciAoY29uc3QgZCBvZiBkb2NzKSB7XG4gICAgY29uc3Qgc2x1ZyA9IHNsdWdpZnlUaXRsZShkLnRpdGxlIHx8IFwidW50aXRsZWRcIik7XG4gICAgbGV0IGNhbmRpZGF0ZSA9IGAke3NsdWd9Lm1kYDtcbiAgICAvLyBlbnN1cmUgdW5pcXVlbmVzc1xuICAgIGlmICh1c2VkLmhhcyhjYW5kaWRhdGUpKSB7XG4gICAgICBjb25zdCBzaG9ydCA9IChkLmlkIHx8IFwiXCIpLnNsaWNlKDAsIDYpO1xuICAgICAgbGV0IGkgPSAxO1xuICAgICAgbGV0IGF0dGVtcHQgPSBgJHtzbHVnfS0ke3Nob3J0fS5tZGA7XG4gICAgICB3aGlsZSAodXNlZC5oYXMoYXR0ZW1wdCkpIHtcbiAgICAgICAgaSsrO1xuICAgICAgICBhdHRlbXB0ID0gYCR7c2x1Z30tJHtzaG9ydH0tJHtpfS5tZGA7XG4gICAgICB9XG4gICAgICBjYW5kaWRhdGUgPSBhdHRlbXB0O1xuICAgIH1cbiAgICB1c2VkLmFkZChjYW5kaWRhdGUpO1xuXG4gICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4oZGVzdERpciwgY2FuZGlkYXRlKTtcbiAgICBpZFRvRmlsZW5hbWUuc2V0KGQuaWQsIGZ1bGxQYXRoKTtcblxuICAgIGNvbnN0IGNvbnRlbnQgPSBkLnRleHQgPz8gYCMgJHtkLnRpdGxlfVxcblxcbmA7XG4gICAgaWYgKCFEUllfUlVOKSB7XG4gICAgICBhd2FpdCBmcy5ta2RpcihkZXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShmdWxsUGF0aCwgY29udGVudCwgXCJ1dGY4XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFtkcnktcnVuXSB3b3VsZCB3cml0ZSAke2Z1bGxQYXRofSAoJHtjb250ZW50Lmxlbmd0aH0gYnl0ZXMpYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gMikgYnVpbGQgbm9kZXMgbWFwIChhbGwgbm9kZXMgcHJlc2VudCBiZWZvcmUgYXR0YWNoaW5nIGNoaWxkcmVuKVxuICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgUGFnZUVudHJ5ICYgeyByYXc/OiBhbnkgfT4oKTtcbiAgZm9yIChjb25zdCBkIG9mIGRvY3MpIHtcbiAgICBtYXAuc2V0KGQuaWQsIHtcbiAgICAgIHRpdGxlOiBkLnRpdGxlLFxuICAgICAgZmlsZTpcbiAgICAgICAgaWRUb0ZpbGVuYW1lLmdldChkLmlkKSB8fFxuICAgICAgICBwYXRoLmpvaW4oZGVzdERpciwgYCR7c2x1Z2lmeVRpdGxlKGQudGl0bGUpfS5tZGApLFxuICAgICAgaWQ6IGQuaWQsXG4gICAgICBjaGlsZHJlbjogW10sXG4gICAgICByYXc6IGQsXG4gICAgfSBhcyBhbnkpO1xuICB9XG5cbiAgLy8gMykgYXR0YWNoIGNoaWxkcmVuIOKAlCByb2J1c3QgdG8gYm90aCBwYXJlbnREb2N1bWVudElkIGFuZCBwYXJlbnRJZFxuICBjb25zdCByb290czogKFBhZ2VFbnRyeSAmIHsgcmF3PzogYW55IH0pW10gPSBbXTtcbiAgZm9yIChjb25zdCBub2RlIG9mIG1hcC52YWx1ZXMoKSkge1xuICAgIGNvbnN0IHJhdyA9IG5vZGUucmF3IHx8IHt9O1xuICAgIGNvbnN0IHBhcmVudElkID0gcmF3LnBhcmVudERvY3VtZW50SWQgPz8gcmF3LnBhcmVudElkID8/IG51bGw7XG4gICAgaWYgKHBhcmVudElkICYmIG1hcC5oYXMocGFyZW50SWQpKSB7XG4gICAgICBtYXAuZ2V0KHBhcmVudElkKSEuY2hpbGRyZW4hLnB1c2gobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvb3RzLnB1c2gobm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gNCkgc3RyaXAgaW50ZXJuYWwgYHJhd2AgYW5kIHJldHVybiB0cmVlIHJlY3Vyc2l2ZWx5XG4gIGZ1bmN0aW9uIHN0cmlwKG46IGFueSk6IFBhZ2VFbnRyeSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiBuLnRpdGxlLFxuICAgICAgZmlsZTogbi5maWxlLFxuICAgICAgaWQ6IG4uaWQsXG4gICAgICBjaGlsZHJlbjogKG4uY2hpbGRyZW4gfHwgW10pLm1hcChzdHJpcCksXG4gICAgfTtcbiAgfVxuICByZXR1cm4gcm9vdHMubWFwKHN0cmlwKTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgRXhpc3Rpbmcgc3luYyBsb2dpYyAodW5jaGFuZ2VkKVxuICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5hc3luYyBmdW5jdGlvbiBwZXJzaXN0TWFuaWZlc3QobWFuaWZlc3Q6IE1hbmlmZXN0LCBmaWxlUGF0aDogc3RyaW5nKSB7XG4gIGlmIChEUllfUlVOKSB7XG4gICAgY29uc29sZS5sb2coYFtkcnktcnVuXSB3b3VsZCBwZXJzaXN0IG1hbmlmZXN0IHRvICR7ZmlsZVBhdGh9YCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGF3YWl0IGZzLndyaXRlRmlsZShcbiAgICBmaWxlUGF0aCxcbiAgICBgJHtKU09OLnN0cmluZ2lmeShtYW5pZmVzdCwgbnVsbCwgMil9XFxuYCxcbiAgICBcInV0ZjhcIixcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9hZE1hbmlmZXN0KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPE1hbmlmZXN0PiB7XG4gIGlmICghZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTWFuaWZlc3QgJHtmaWxlUGF0aH0gbm90IGZvdW5kLiBDcmVhdGUgJHtmaWxlUGF0aH0gd2l0aCBzdHJ1Y3R1cmUgZGVzY3JpYmVkIGluIFJFQURNRS5gLFxuICAgICk7XG4gIH1cbiAgY29uc3QgcmF3ID0gYXdhaXQgZnMucmVhZEZpbGUoZmlsZVBhdGgsIFwidXRmOFwiKTtcbiAgcmV0dXJuIEpTT04ucGFyc2UocmF3KSBhcyBNYW5pZmVzdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3luY1BhZ2UoXG4gIG1hbmlmZXN0OiBNYW5pZmVzdCxcbiAgcGFnZTogUGFnZUVudHJ5LFxuICBwYXJlbnRJZDogc3RyaW5nIHwgbnVsbCxcbiAgbWFuaWZlc3RQYXRoOiBzdHJpbmcsXG4gIHJlc29sdmVkQ29sbGVjdGlvbklkOiBzdHJpbmcsXG4pIHtcbiAgY29uc3QgZmlsZVBhdGggPSBwYWdlLmZpbGU7XG4gIGNvbnN0IGFic1BhdGggPSBwYXRoLnJlc29sdmUoZmlsZVBhdGgpO1xuICBjb25zdCBmaWxlRXhpc3RzID0gZXhpc3RzU3luYyhhYnNQYXRoKTtcblxuICBsZXQgbG9jYWxUcyA9IDA7XG4gIGlmIChmaWxlRXhpc3RzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsVHMgPSBhd2FpdCBnZXRMb2NhbFRpbWVzdGFtcE1zKGFic1BhdGgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS53YXJuKGBDb3VsZG4ndCBzdGF0IGZpbGUgJHthYnNQYXRofTogJHtlcnJ9YCk7XG4gICAgICBsb2NhbFRzID0gMDtcbiAgICB9XG4gIH1cblxuICBpZiAocGFnZS5pZCkge1xuICAgIGxldCBkb2M6IGFueSA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGRvYyA9IGF3YWl0IGZldGNoT3V0bGluZUluZm8ocGFnZS5pZCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIGZldGNoIE91dGxpbmUgaW5mbyBmb3IgJHtwYWdlLnRpdGxlfSAoJHtwYWdlLmlkfSk6ICR7ZXJyfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZG9jKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYE91dGxpbmUgZG9jICR7cGFnZS5pZH0gbm90IGZvdW5kIC0gd2lsbCBjcmVhdGUgYXMgbmV3IHVuZGVyIGNvbGxlY3Rpb24gJHtyZXNvbHZlZENvbGxlY3Rpb25JZH0uYCxcbiAgICAgICk7XG4gICAgICBwYWdlLmlkID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVtb3RlVXBkYXRlZEF0ID0gZG9jLnVwZGF0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKGRvYy51cGRhdGVkQXQpLmdldFRpbWUoKVxuICAgICAgICA6IDA7XG5cbiAgICAgIGlmICghZmlsZUV4aXN0cykge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgW1BVTExdIExvY2FsIGZpbGUgbWlzc2luZyBmb3IgXCIke3BhZ2UudGl0bGV9XCIgLT4gZmV0Y2hpbmcgcmVtb3RlYCxcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgc2FmZVdyaXRlRmlsZShhYnNQYXRoLCBkb2MudGV4dCB8fCBcIlwiKTtcbiAgICAgIH0gZWxzZSBpZiAobG9jYWxUcyA+IHJlbW90ZVVwZGF0ZWRBdCArIDUwMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgW1BVU0hdIExvY2FsIG5ld2VyIGZvciBcIiR7cGFnZS50aXRsZX1cIiAtPiB1cGRhdGluZyBPdXRsaW5lYCxcbiAgICAgICAgKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoYWJzUGF0aCwgXCJ1dGY4XCIpO1xuICAgICAgICAgIGF3YWl0IHVwZGF0ZU91dGxpbmVEb2N1bWVudChwYWdlLmlkLCBwYWdlLnRpdGxlLCBjb250ZW50KTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBVcGRhdGVkIE91dGxpbmUgZG9jICR7cGFnZS5pZH1gKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgICBGYWlsZWQgdG8gcHVzaCAke3BhZ2UudGl0bGV9OiAke2Vycn1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChyZW1vdGVVcGRhdGVkQXQgPiBsb2NhbFRzICsgNTAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBbUFVMTF0gT3V0bGluZSBuZXdlciBmb3IgXCIke3BhZ2UudGl0bGV9XCIgLT4gb3ZlcndyaXRpbmcgbG9jYWwgZmlsZWAsXG4gICAgICAgICk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgc2FmZVdyaXRlRmlsZShhYnNQYXRoLCBkb2MudGV4dCB8fCBcIlwiKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBXcm90ZSBsb2NhbCBmaWxlICR7YWJzUGF0aH1gKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgICBGYWlsZWQgdG8gd3JpdGUgZmlsZSAke2Fic1BhdGh9OiAke2Vycn1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coYFtTS0lQXSBObyBjaGFuZ2VzIGZvciBcIiR7cGFnZS50aXRsZX1cImApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICghcGFnZS5pZCkge1xuICAgIGlmICghZXhpc3RzU3luYyhhYnNQYXRoKSkge1xuICAgICAgYXdhaXQgZnMubWtkaXIocGF0aC5kaXJuYW1lKGFic1BhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShhYnNQYXRoLCBgIyAke3BhZ2UudGl0bGV9XFxuXFxuYCwgXCJ1dGY4XCIpO1xuICAgICAgY29uc29sZS5sb2coYENyZWF0ZWQgbG9jYWwgcGxhY2Vob2xkZXIgZmlsZSAke2Fic1BhdGh9YCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShhYnNQYXRoLCBcInV0ZjhcIik7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCBjcmVhdGVPdXRsaW5lRG9jdW1lbnQoXG4gICAgICAgIHBhZ2UudGl0bGUsXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIHJlc29sdmVkQ29sbGVjdGlvbklkLFxuICAgICAgICBwYXJlbnRJZCxcbiAgICAgICk7XG4gICAgICBpZiAoY3JlYXRlZD8uaWQpIHtcbiAgICAgICAgcGFnZS5pZCA9IGNyZWF0ZWQuaWQ7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBDcmVhdGVkIE91dGxpbmUgZG9jIFwiJHtwYWdlLnRpdGxlfVwiIGlkPSR7cGFnZS5pZH0gaW4gY29sbGVjdGlvbiAke3Jlc29sdmVkQ29sbGVjdGlvbklkfWAsXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHBlcnNpc3RNYW5pZmVzdChtYW5pZmVzdCwgbWFuaWZlc3RQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgQ3JlYXRlIHJldHVybmVkIG5vIGlkIGZvciBcIiR7cGFnZS50aXRsZX1cImApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBPdXRsaW5lIGRvYyBmb3IgXCIke3BhZ2UudGl0bGV9XCI6ICR7ZXJyfWApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5leHRQYXJlbnRJZCA9IHBhZ2UuaWQgfHwgcGFyZW50SWQ7XG4gIGlmIChwYWdlLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHBhZ2UuY2hpbGRyZW4pIHtcbiAgICAgIGF3YWl0IHN5bmNQYWdlKFxuICAgICAgICBtYW5pZmVzdCxcbiAgICAgICAgY2hpbGQsXG4gICAgICAgIG5leHRQYXJlbnRJZCxcbiAgICAgICAgbWFuaWZlc3RQYXRoLFxuICAgICAgICByZXNvbHZlZENvbGxlY3Rpb25JZCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgIE1haW5cbiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgaWYgKExJU1RfQ09MTEVDVElPTlMpIHtcbiAgICBjb25zb2xlLmxvZyhcIkZldGNoaW5nIGNvbGxlY3Rpb25zLi4uXCIpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb2xzID0gYXdhaXQgbGlzdENvbGxlY3Rpb25zKCk7XG4gICAgICBmb3IgKGNvbnN0IGMgb2YgY29scykge1xuICAgICAgICBjb25zb2xlLmxvZyhgJHtjLmlkfVxcdCR7Yy5uYW1lfWApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGxpc3QgY29sbGVjdGlvbnM6ICR7ZXJyfWApO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoRE9fSU5JVCkge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25JZCA9IENMSV9DT0xMRUNUSU9OX09WRVJSSURFIHx8IEVOVl9DT0xMRUNUSU9OO1xuICAgIGlmICghY29sbGVjdGlvbklkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIkluaXQgcmVxdWlyZXMgYSBjb2xsZWN0aW9uIGlkLiBQcm92aWRlIHdpdGggLS1jb2xsZWN0aW9uLWlkPUlEIG9yIHNldCBPVVRMSU5FX0NPTExFQ1RJT05fSUQgZW52IHZhci5cIixcbiAgICAgICk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYEJvb3RzdHJhcHBpbmcgbWFuaWZlc3QgZnJvbSBjb2xsZWN0aW9uICR7Y29sbGVjdGlvbklkfSAoZHJ5LXJ1bj0ke0RSWV9SVU59KS4uLmAsXG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZG9jcyA9IGF3YWl0IGxpc3REb2N1bWVudHNJbkNvbGxlY3Rpb24oY29sbGVjdGlvbklkKTtcbiAgICAgIGNvbnNvbGUubG9nKGBGZXRjaGVkICR7ZG9jcy5sZW5ndGh9IGRvY3VtZW50cyBmcm9tIE91dGxpbmUuYCk7XG4gICAgICBjb25zdCByb290cyA9IGF3YWl0IG1hdGVyaWFsaXplRG9jc1RvRmlsZXMoZG9jcywgXCJkb2NzXCIpO1xuICAgICAgY29uc3QgbWFuaWZlc3Q6IE1hbmlmZXN0ID0ge1xuICAgICAgICBjb2xsZWN0aW9uSWQsXG4gICAgICAgIHBhZ2VzOiByb290cyxcbiAgICAgIH07XG4gICAgICBhd2FpdCBwZXJzaXN0TWFuaWZlc3QobWFuaWZlc3QsIE1BTklGRVNUKTtcbiAgICAgIGNvbnNvbGUubG9nKGBXcm90ZSBtYW5pZmVzdCB0byAke01BTklGRVNUfSAocGFnZXMgc2F2ZWQgaW50byBkb2NzLykuYCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBJbml0IGZhaWxlZDogJHtlcnJ9YCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIG5vcm1hbCBzeW5jIGZsb3dcbiAgLy8gaWYgbWFuaWZlc3QgbWlzc2luZywgZXJyb3IgYW5kIGhpbnQgdG8gdXNlIC0taW5pdFxuICBpZiAoIWV4aXN0c1N5bmMoTUFOSUZFU1QpKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGBNYW5pZmVzdCAke01BTklGRVNUfSBub3QgZm91bmQuIFJ1biB3aXRoIC0taW5pdCAtLWNvbGxlY3Rpb24taWQ9Q09MTEVDVElPTl9JRCB0byBib290c3RyYXAuYCxcbiAgICApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IGxvYWRNYW5pZmVzdChNQU5JRkVTVCk7XG4gIGNvbnN0IGVmZmVjdGl2ZUNvbGxlY3Rpb25JZCA9IHJlc29sdmVDb2xsZWN0aW9uSWQoXG4gICAgbWFuaWZlc3QuY29sbGVjdGlvbklkID8/IG51bGwsXG4gICk7XG4gIGNvbnNvbGUubG9nKGBTeW5jaW5nIGludG8gc2luZ2xlIGNvbGxlY3Rpb246ICR7ZWZmZWN0aXZlQ29sbGVjdGlvbklkfWApO1xuICBpZiAoRFJZX1JVTilcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIFwiUnVubmluZyBpbiBkcnktcnVuIG1vZGU7IG5vIGRlc3RydWN0aXZlIGFjdGlvbnMgd2lsbCBiZSBwZXJmb3JtZWQuXCIsXG4gICAgKTtcblxuICBmb3IgKGNvbnN0IHAgb2YgbWFuaWZlc3QucGFnZXMpIHtcbiAgICBhd2FpdCBzeW5jUGFnZShcbiAgICAgIG1hbmlmZXN0LFxuICAgICAgcCxcbiAgICAgIG51bGwsXG4gICAgICBwYXRoLnJlc29sdmUoTUFOSUZFU1QpLFxuICAgICAgZWZmZWN0aXZlQ29sbGVjdGlvbklkLFxuICAgICk7XG4gIH1cbiAgYXdhaXQgcGVyc2lzdE1hbmlmZXN0KG1hbmlmZXN0LCBwYXRoLnJlc29sdmUoTUFOSUZFU1QpKTtcbiAgY29uc29sZS5sb2coXCJTeW5jIGNvbXBsZXRlLlwiKTtcbn1cblxubWFpbigpO1xuIgogIF0sCiAgIm1hcHBpbmdzIjogIkFBZ0JBLGdDQUNBLHFCQUFTLGdCQUNULHlCQWNBLElBQU0sRUFBVyxhQUVYLEVBQU8sUUFBUSxLQUFLLE1BQU0sQ0FBQyxFQUM3QixFQUFXLFFBQVEsSUFBSSxrQkFBb0IsS0FDM0MsRUFBVSxRQUFRLElBQUksaUJBQW1CLEtBQ3pDLEVBQXlDLEtBQ3pDLEVBQVUsR0FDVixFQUFVLEdBQ1YsRUFBbUIsR0FFdkIsUUFBVyxLQUFLLEVBQ2QsR0FBSSxFQUFFLFdBQVcsa0JBQWtCLEVBQ2pDLEVBQTBCLEVBQUUsTUFBTSxHQUFHLEVBQUUsSUFBTSxLQUN4QyxRQUFJLElBQU0sWUFD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QUFRLEVBQ3hDLFFBQVEsSUFBSSxxQkFBcUIsNkJBQW9DLEVBQ3JFLE1BQU8sRUFBSyxDQUNaLFFBQVEsTUFBTSxnQkFBZ0IsR0FBSyxFQUVyQyxPQUtGLElBQUssRUFBVyxDQUFRLEVBQ3RCLFFBQVEsTUFDTixZQUFZLDBFQUNkLEVBQ0EsUUFBUSxLQUFLLENBQUMsRUFFaEIsSUFBTSxFQUFXLE1BQU0sRUFBYSxDQUFRLEVBQ3RDLEVBQXdCLEVBQzVCLEVBQVMsY0FBZ0IsSUFDM0IsRUFFQSxHQURBLFFBQVEsSUFBSSxtQ0FBbUMsR0FBdUIsRUFDbEUsRUFDRixRQUFRLElBQ04sb0VBQ0YsRUFFRixRQUFXLEtBQUssRUFBUyxNQUN2QixNQUFNLEVBQ0osRUFDQSxFQUNBLEtBQ0EsRUFBSyxRQUFRLENBQVEsRUFDckIsQ0FDRixFQUVGLE1BQU0sRUFBZ0IsRUFBVSxFQUFLLFFBQVEsQ0FBUSxDQUFDLEVBQ3RELFFBQVEsSUFBSSxnQkFBZ0IsRUFHOUIsRUFBSyIsCiAgImRlYnVnSWQiOiAiMjA3NzlBRUY5NTg2QzZENzY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
25
+ //# debugId=20F7A2D3C47E56DC64756E2164756E21
26
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3luYy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIjIS91c3IvYmluL2VudiBidW5cblxuLyoqXG4gKiBPdXRsaW5lIDw+IEdpdCBNYXJrZG93biB0d28td2F5IHN5bmMgKHNpbmdsZS1jb2xsZWN0aW9uKSArIGluaXRcbiAqIC0gQnVuIHJ1bnRpbWUgKHVzZXMgQnVuLnNwYXduU3luYywgZ2xvYmFsIGZldGNoKVxuICpcbiAqIE5ldyBmZWF0dXJlczpcbiAqICAtIC0taW5pdCA6IGJvb3RzdHJhcCBwYWdlcy5qc29uICsgbWFya2Rvd24gZmlsZXMgZnJvbSBhbiBleGlzdGluZyBjb2xsZWN0aW9uXG4gKiAgLSAtLWxpc3QtY29sbGVjdGlvbnMgOiBwcmludHMgY29sbGVjdGlvbnMgKGlkICsgbmFtZSlcbiAqXG4gKiBVc2FnZTpcbiAqICBPVVRMSU5FX0FQSV9LRVk9Li4uIGJ1biBydW4gc3luYy50cyAtLWluaXQgLS1jb2xsZWN0aW9uLWlkPUNPTExFQ1RJT05fVVVJRFxuICogIE9VVExJTkVfQVBJX0tFWT0uLi4gYnVuIHJ1biBzeW5jLnRzIC0tbGlzdC1jb2xsZWN0aW9uc1xuICogIE9VVExJTkVfQVBJX0tFWT0uLi4gYnVuIHJ1biBzeW5jLnRzICAgICAgICAgICAgIyBub3JtYWwgc3luY1xuICpcbiAqIE5PVEU6IGlmIHlvdSBydW4gLS1pbml0IHdpdGhvdXQgLS1kcnktcnVuIGl0IHdpbGwgYWN0dWFsbHkgd3JpdGUgZmlsZXMgJiBwYWdlcy5qc29uXG4gKi9cblxuaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcblxudHlwZSBQYWdlRW50cnkgPSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGZpbGU6IHN0cmluZztcbiAgaWQ6IHN0cmluZyB8IG51bGw7XG4gIGNoaWxkcmVuPzogUGFnZUVudHJ5W107XG59O1xuXG50eXBlIE1hbmlmZXN0ID0ge1xuICBjb2xsZWN0aW9uSWQ6IHN0cmluZztcbiAgcGFnZXM6IFBhZ2VFbnRyeVtdO1xufTtcblxuY29uc3QgTUFOSUZFU1QgPSBcInBhZ2VzLmpzb25cIjtcblxuY29uc3QgYXJndiA9IHByb2Nlc3MuYXJndi5zbGljZSgyKTtcbmxldCBCQVNFX1VSTCA9IHByb2Nlc3MuZW52Lk9VVExJTkVfQkFTRV9VUkwgfHwgbnVsbDtcbmxldCBBUElfS0VZID0gcHJvY2Vzcy5lbnYuT1VUTElORV9BUElfS0VZIHx8IG51bGw7XG5sZXQgQ0xJX0NPTExFQ1RJT05fT1ZFUlJJREU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xubGV0IERSWV9SVU4gPSBmYWxzZTtcbmxldCBET19JTklUID0gZmFsc2U7XG5sZXQgTElTVF9DT0xMRUNUSU9OUyA9IGZhbHNlO1xuXG5mb3IgKGNvbnN0IGEgb2YgYXJndikge1xuICBpZiAoYS5zdGFydHNXaXRoKFwiLS1jb2xsZWN0aW9uLWlkPVwiKSkge1xuICAgIENMSV9DT0xMRUNUSU9OX09WRVJSSURFID0gYS5zcGxpdChcIj1cIilbMV0gfHwgbnVsbDtcbiAgfSBlbHNlIGlmIChhID09PSBcIi0tZHJ5LXJ1blwiKSB7XG4gICAgRFJZX1JVTiA9IHRydWU7XG4gIH0gZWxzZSBpZiAoYSA9PT0gXCItLWluaXRcIikge1xuICAgIERPX0lOSVQgPSB0cnVlO1xuICB9IGVsc2UgaWYgKGEgPT09IFwiLS1saXN0LWNvbGxlY3Rpb25zXCIpIHtcbiAgICBMSVNUX0NPTExFQ1RJT05TID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChhID09PSBcImluaXRcIikge1xuICAgIERPX0lOSVQgPSB0cnVlO1xuICB9IGVsc2UgaWYgKGEgPT09IFwibGlzdC1jb2xsZWN0aW9uc1wiKSB7XG4gICAgTElTVF9DT0xMRUNUSU9OUyA9IHRydWU7XG4gIH0gZWxzZSBpZiAoYSA9PT0gXCItLWhlbHBcIiB8fCBhID09PSBcIi1oXCIpIHtcbiAgICBwcmludEhlbHBBbmRFeGl0KCk7XG4gIH0gZWxzZSBpZiAoYS5zdGFydHNXaXRoKFwiLS1hcGkta2V5PVwiKSkge1xuICAgIEFQSV9LRVkgPSBhLnNwbGl0KFwiPVwiKVsxXSB8fCBudWxsO1xuICB9IGVsc2UgaWYgKGEuc3RhcnRzV2l0aChcIi0tYmFzZS11cmw9XCIpKSB7XG4gICAgQkFTRV9VUkwgPSBhLnNwbGl0KFwiPVwiKVsxXSB8fCBudWxsO1xuICB9IGVsc2Uge1xuICAgIC8vIGlnbm9yZSB1bmtub3duLCBhbGxvdyBvdGhlciBmbGFncyBpbiBmdXR1cmVcbiAgfVxufVxuXG5pZiAoIUJBU0VfVVJMKSB7XG4gIEJBU0VfVVJMID0gXCJodHRwczovL2FwcC5nZXRvdXRsaW5lLmNvbVwiO1xufVxuXG5jb25zdCBIRUFERVJTID0ge1xuICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7QVBJX0tFWX1gLFxuICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbn07XG5cbmZ1bmN0aW9uIHByaW50SGVscEFuZEV4aXQoKSB7XG4gIGNvbnNvbGUubG9nKGBcblVzYWdlOlxuICBPVVRMSU5FX0FQSV9LRVk9Li4uIGJ1biBydW4gc3luYy50cyBbb3B0aW9uc11cblxuT3B0aW9uczpcbiAgLS1pbml0ICAgICAgICAgICAgICAgICAgICAgIEJvb3RzdHJhcCBwYWdlcy5qc29uICsgbWFya2Rvd24gZmlsZXMgZnJvbSBhIGNvbGxlY3Rpb25cbiAgLS1jb2xsZWN0aW9uLWlkPUNPTF9JRCAgICAgIFVzZSB0aGlzIGNvbGxlY3Rpb24gaWQgKHJlcXVpcmVkIHdpdGggLS1pbml0IHVubGVzcyBPVVRMSU5FX0NPTExFQ1RJT05fSUQgc2V0KVxuICAtLWxpc3QtY29sbGVjdGlvbnMgICAgICAgICAgTGlzdCBjb2xsZWN0aW9ucyB5b3UgaGF2ZSBhY2Nlc3MgdG8gKHByaW50cyBpZCArIG5hbWUpXG4gIC0tZHJ5LXJ1biAgICAgICAgICAgICAgICAgICBQcmludCBhY3Rpb25zIHdpdGhvdXQgd3JpdGluZyBhbnl0aGluZ1xuICAtLWhlbHAgICAgICAgICAgICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHBcbkV4YW1wbGVzOlxuICBPVVRMSU5FX0FQSV9LRVk9Li4uIGJ1biBydW4gc3luYy50cyAtLWxpc3QtY29sbGVjdGlvbnNcbiAgT1VUTElORV9BUElfS0VZPS4uLiBidW4gcnVuIHN5bmMudHMgLS1pbml0IC0tY29sbGVjdGlvbi1pZD1hYmMtdXVpZFxuICBPVVRMSU5FX0FQSV9LRVk9Li4uIGJ1biBydW4gc3luYy50cyAgICAgICAgICAgICAgICAgICMgcGVyZm9ybSByZWd1bGFyIHN5bmNcbiAgT1VUTElORV9BUElfS0VZPS4uLiBidW4gcnVuIHN5bmMudHMgLS1kcnktcnVuXG5gKTtcbiAgcHJvY2Vzcy5leGl0KDApO1xufVxuXG5jb25zdCBFTlZfQ09MTEVDVElPTiA9IHByb2Nlc3MuZW52Lk9VVExJTkVfQ09MTEVDVElPTl9JRCB8fCBudWxsO1xuZnVuY3Rpb24gcmVzb2x2ZUNvbGxlY3Rpb25JZChtYW5pZmVzdENvbGxlY3Rpb25JZDogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB7XG4gIGlmIChDTElfQ09MTEVDVElPTl9PVkVSUklERSkgcmV0dXJuIENMSV9DT0xMRUNUSU9OX09WRVJSSURFO1xuICBpZiAoRU5WX0NPTExFQ1RJT04pIHJldHVybiBFTlZfQ09MTEVDVElPTjtcbiAgaWYgKG1hbmlmZXN0Q29sbGVjdGlvbklkKSByZXR1cm4gbWFuaWZlc3RDb2xsZWN0aW9uSWQ7XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBcIk5vIGNvbGxlY3Rpb24gaWQgZm91bmQuIFByb3ZpZGUgY29sbGVjdGlvbklkIGluIHBhZ2VzLmpzb24sIG9yIHNldCBPVVRMSU5FX0NPTExFQ1RJT05fSUQgZW52IHZhciwgb3IgcGFzcyAtLWNvbGxlY3Rpb24taWQ9SURcIixcbiAgKTtcbn1cblxuY29uc3Qgc2xlZXAgPSAobXM6IG51bWJlcikgPT4gbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgbXMpKTtcblxuZnVuY3Rpb24gc2x1Z2lmeVRpdGxlKHRpdGxlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHRpdGxlXG4gICAgLnRvU3RyaW5nKClcbiAgICAubm9ybWFsaXplKFwiTkZLRFwiKVxuICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZGXS9nLCBcIlwiKSAvLyByZW1vdmUgZGlhY3JpdGljc1xuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoL1teYS16MC05XSsvZywgXCItXCIpXG4gICAgLnJlcGxhY2UoLyheLXwtJCkrL2csIFwiXCIpXG4gICAgLnNsaWNlKDAsIDEyMCk7XG59XG5cbmZ1bmN0aW9uIGdldEdpdFRpbWVzdGFtcE1zKGZpbGVQYXRoOiBzdHJpbmcpOiBudW1iZXIgfCBudWxsIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHBhdGgucmVzb2x2ZShmaWxlUGF0aCk7XG4gICAgY29uc3Qgb3V0ID0gQnVuLnNwYXduU3luYyhcbiAgICAgIFtcImdpdFwiLCBcImxvZ1wiLCBcIi0xXCIsIFwiLS1mb3JtYXQ9JWN0XCIsIFwiLS1cIiwgcmVzb2x2ZWRdLFxuICAgICAgeyBjd2Q6IHByb2Nlc3MuY3dkKCkgfSxcbiAgICApO1xuICAgIGlmIChvdXQuZXhpdENvZGUgIT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB0eHQgPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUob3V0LnN0ZG91dCkudHJpbSgpO1xuICAgIGlmICghdHh0KSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBzZWMgPSBOdW1iZXIodHh0KTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHNlYykpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBzZWMgKiAxMDAwO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRMb2NhbFRpbWVzdGFtcE1zKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuICBjb25zdCBnaXRUcyA9IGdldEdpdFRpbWVzdGFtcE1zKGZpbGVQYXRoKTtcbiAgaWYgKGdpdFRzKSByZXR1cm4gZ2l0VHM7XG4gIGNvbnN0IHN0ID0gYXdhaXQgZnMuc3RhdChmaWxlUGF0aCk7XG4gIHJldHVybiBzdC5tdGltZU1zO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzYWZlV3JpdGVGaWxlKGZpbGVQYXRoOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZykge1xuICBpZiAoZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICBjb25zdCBiYWsgPSBgJHtmaWxlUGF0aH0ub3V0bGluZS1zeW5jLmJhay4ke0RhdGUubm93KCl9YDtcbiAgICBpZiAoIURSWV9SVU4pIHtcbiAgICAgIGF3YWl0IGZzLmNvcHlGaWxlKGZpbGVQYXRoLCBiYWspO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhgQmFja2VkIHVwIGV4aXN0aW5nIGZpbGUgdG8gJHtiYWt9YCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFEUllfUlVOKSB7XG4gICAgICBhd2FpdCBmcy5ta2RpcihwYXRoLmRpcm5hbWUoZmlsZVBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cbiAgaWYgKCFEUllfUlVOKSB7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGZpbGVQYXRoLCBjb250ZW50LCBcInV0ZjhcIik7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgW2RyeS1ydW5dIHdvdWxkIHdyaXRlIGZpbGUgJHtmaWxlUGF0aH0gKCR7Y29udGVudC5sZW5ndGh9IGJ5dGVzKWAsXG4gICAgKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBvdXRsaW5lUmVxdWVzdChcbiAgZW5kcG9pbnQ6IHN0cmluZyxcbiAgYm9keTogYW55LFxuICByZXRyaWVzID0gMyxcbik6IFByb21pc2U8YW55PiB7XG4gIGNvbnN0IHVybCA9IGAke0JBU0VfVVJMfS9hcGkvJHtlbmRwb2ludH1gO1xuICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IHJldHJpZXM7IGF0dGVtcHQrKykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczogSEVBREVSUyxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgICB9KTtcbiAgICAgIGlmIChyZXMuc3RhdHVzID09PSA0MjkpIHtcbiAgICAgICAgY29uc3QgYmFja29mZiA9IDEwMDAgKiAoYXR0ZW1wdCArIDEpO1xuICAgICAgICBjb25zb2xlLndhcm4oYFJhdGUgbGltaXRlZC4gQmFja2luZyBvZmYgJHtiYWNrb2ZmfW1zYCk7XG4gICAgICAgIGF3YWl0IHNsZWVwKGJhY2tvZmYpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBgW091dGxpbmVdICR7cmVzLnN0YXR1c30gJHtlbmRwb2ludH0gcGF5bG9hZD1gLFxuICAgICAgICAgIGJvZHksXG4gICAgICAgICAgXCJyZXNwb25zZT1cIixcbiAgICAgICAgICBqc29uLFxuICAgICAgICApO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYE91dGxpbmUgQVBJIGVycm9yICR7cmVzLnN0YXR1c306ICR7SlNPTi5zdHJpbmdpZnkoanNvbil9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBqc29uO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGF0dGVtcHQgPT09IHJldHJpZXMgLSAxKSB0aHJvdyBlcnI7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBSZXF1ZXN0IGZhaWxlZCAoYXR0ZW1wdCAke2F0dGVtcHQgKyAxfSk6ICR7ZXJyfS4gUmV0cnlpbmcuLi5gLFxuICAgICAgKTtcbiAgICAgIGF3YWl0IHNsZWVwKDUwMCAqIChhdHRlbXB0ICsgMSkpO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJvdXRsaW5lUmVxdWVzdDogdW5yZWFjaGFibGVcIik7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgIEFQSSBoZWxwZXJzIGZvciBub3JtYWwgc3luY1xuICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5hc3luYyBmdW5jdGlvbiBmZXRjaE91dGxpbmVJbmZvKGRvY3VtZW50SWQ6IHN0cmluZykge1xuICBjb25zdCBwYXlsb2FkID0geyBpZDogZG9jdW1lbnRJZCB9O1xuICBjb25zdCBqc29uID0gYXdhaXQgb3V0bGluZVJlcXVlc3QoXCJkb2N1bWVudHMuaW5mb1wiLCBwYXlsb2FkKTtcbiAgcmV0dXJuIGpzb24uZGF0YSA/PyBudWxsO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVPdXRsaW5lRG9jdW1lbnQoXG4gIHRpdGxlOiBzdHJpbmcsXG4gIHRleHQ6IHN0cmluZyxcbiAgY29sbGVjdGlvbklkOiBzdHJpbmcsXG4gIHBhcmVudERvY3VtZW50SWQ6IHN0cmluZyB8IG51bGwsXG4pIHtcbiAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICB0aXRsZSxcbiAgICB0ZXh0LFxuICAgIGNvbGxlY3Rpb25JZCxcbiAgICBwYXJlbnREb2N1bWVudElkOiBwYXJlbnREb2N1bWVudElkIHx8IG51bGwsXG4gICAgcHVibGlzaDogdHJ1ZSxcbiAgfTtcbiAgaWYgKERSWV9SVU4pIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBbZHJ5LXJ1bl0gd291bGQgY3JlYXRlIGRvYyB0aXRsZT1cIiR7dGl0bGV9XCIgY29sbGVjdGlvbj0ke2NvbGxlY3Rpb25JZH0gcGFyZW50PSR7cGFyZW50RG9jdW1lbnRJZH1gLFxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgZHJ5LXJ1bi0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDkpfWAsXG4gICAgICB0aXRsZSxcbiAgICAgIHRleHQsXG4gICAgICBjb2xsZWN0aW9uSWQsXG4gICAgICBwYXJlbnREb2N1bWVudElkLFxuICAgIH07XG4gIH1cbiAgY29uc3QganNvbiA9IGF3YWl0IG91dGxpbmVSZXF1ZXN0KFwiZG9jdW1lbnRzLmNyZWF0ZVwiLCBwYXlsb2FkKTtcbiAgcmV0dXJuIGpzb24uZGF0YTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlT3V0bGluZURvY3VtZW50KFxuICBpZDogc3RyaW5nLFxuICB0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICB0ZXh0OiBzdHJpbmcsXG4pIHtcbiAgY29uc3QgcGF5bG9hZDogYW55ID0geyBpZCwgdGV4dCwgcHVibGlzaDogdHJ1ZSB9O1xuICBpZiAodGl0bGUpIHBheWxvYWQudGl0bGUgPSB0aXRsZTtcbiAgaWYgKERSWV9SVU4pIHtcbiAgICBjb25zb2xlLmxvZyhgW2RyeS1ydW5dIHdvdWxkIHVwZGF0ZSBkb2MgaWQ9JHtpZH0gdGl0bGU9JHt0aXRsZX1gKTtcbiAgICByZXR1cm4geyBpZCwgdGl0bGUsIHRleHQgfTtcbiAgfVxuICBjb25zdCBqc29uID0gYXdhaXQgb3V0bGluZVJlcXVlc3QoXCJkb2N1bWVudHMudXBkYXRlXCIsIHBheWxvYWQpO1xuICByZXR1cm4ganNvbi5kYXRhO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICBJbml0IGhlbHBlcnNcbiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBMaXN0IE91dGxpbmUgY29sbGVjdGlvbnMgKHBhZ2VkKVxuICovXG5hc3luYyBmdW5jdGlvbiBsaXN0Q29sbGVjdGlvbnMoKTogUHJvbWlzZTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9W10+IHtcbiAgY29uc3Qgb3V0OiB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9W10gPSBbXTtcbiAgbGV0IG9mZnNldCA9IDA7XG4gIGxldCBsaW1pdCA9IDEwMDsgLy8gT3V0bGluZSBtYXggaXMgMTAwXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBvdXRsaW5lUmVxdWVzdChcImNvbGxlY3Rpb25zLmxpc3RcIiwgeyBvZmZzZXQsIGxpbWl0IH0pO1xuICAgICAgY29uc3QgZGF0YSA9IGpzb24uZGF0YSB8fCBbXTtcbiAgICAgIGZvciAoY29uc3QgYyBvZiBkYXRhKSBvdXQucHVzaCh7IGlkOiBjLmlkLCBuYW1lOiBjLm5hbWUgfSk7XG4gICAgICBpZiAoZGF0YS5sZW5ndGggPCBsaW1pdCkgYnJlYWs7XG4gICAgICBvZmZzZXQgKz0gZGF0YS5sZW5ndGg7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIC8vIERlZmVuc2l2ZTogaWYgQVBJIGNvbXBsYWlucyBhYm91dCBsaW1pdCwgcmV0cnkgb25jZSB3aXRoIGxpbWl0PTEwMFxuICAgICAgY29uc3QgbXNnID0gZXJyPy5tZXNzYWdlID8/IFwiXCI7XG4gICAgICBpZiAobXNnLmluY2x1ZGVzKFwiUGFnaW5hdGlvbiBsaW1pdCBpcyB0b28gbGFyZ2VcIikgJiYgbGltaXQgIT09IDEwMCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJPdXRsaW5lIEFQSSBjb21wbGFpbmVkIGFib3V0IGxpbWl0OyByZXRyeWluZyB3aXRoIGxpbWl0PTEwMFwiLFxuICAgICAgICApO1xuICAgICAgICBsaW1pdCA9IDEwMDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogTGlzdCBhbGwgZG9jdW1lbnRzIGluIGEgY29sbGVjdGlvbiAocGFnZWQpLlxuICogUmV0dXJucyBhcnJheSBvZiBkb2N1bWVudHMgeyBpZCwgdGl0bGUsIHRleHQsIHBhcmVudERvY3VtZW50SWQsIHVwZGF0ZWRBdCB9XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxpc3REb2N1bWVudHNJbkNvbGxlY3Rpb24oY29sbGVjdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPGFueVtdPiB7XG4gIGNvbnN0IG91dDogYW55W10gPSBbXTtcbiAgbGV0IG9mZnNldCA9IDA7XG4gIGxldCBsaW1pdCA9IDEwMDsgLy8gbXVzdCBiZSA8PSAxMDAgcGVyIE91dGxpbmUgQVBJXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBvdXRsaW5lUmVxdWVzdChcImRvY3VtZW50cy5saXN0XCIsIHtcbiAgICAgICAgY29sbGVjdGlvbklkLFxuICAgICAgICBvZmZzZXQsXG4gICAgICAgIGxpbWl0LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBkYXRhID0ganNvbi5kYXRhIHx8IFtdO1xuICAgICAgZm9yIChjb25zdCBkIG9mIGRhdGEpIG91dC5wdXNoKGQpO1xuICAgICAgaWYgKGRhdGEubGVuZ3RoIDwgbGltaXQpIGJyZWFrO1xuICAgICAgb2Zmc2V0ICs9IGRhdGEubGVuZ3RoO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBjb25zdCBtc2cgPSBlcnI/Lm1lc3NhZ2UgPz8gXCJcIjtcbiAgICAgIGlmIChtc2cuaW5jbHVkZXMoXCJQYWdpbmF0aW9uIGxpbWl0IGlzIHRvbyBsYXJnZVwiKSAmJiBsaW1pdCAhPT0gMTAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcIk91dGxpbmUgQVBJIGNvbXBsYWluZWQgYWJvdXQgbGltaXQ7IHJldHJ5aW5nIHdpdGggbGltaXQ9MTAwXCIsXG4gICAgICAgICk7XG4gICAgICAgIGxpbWl0ID0gMTAwO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBXcml0ZSBkb2NzIHRvIGRpc2sgYW5kIHJldHVybiBwYWdlcyBhcnJheSAod2l0aCBmaWxlIHBhdGhzIHNldClcbiAqL1xuYXN5bmMgZnVuY3Rpb24gbWF0ZXJpYWxpemVEb2NzVG9GaWxlcyhcbiAgZG9jczogYW55W10sXG4gIGRlc3REaXIgPSBcImRvY3NcIixcbik6IFByb21pc2U8UGFnZUVudHJ5W10+IHtcbiAgLy8gZG9jcyBpcyBmbGF0IGFycmF5IHdpdGggaWQvdGl0bGUvdGV4dC9wYXJlbnREb2N1bWVudElkIChvciBwYXJlbnRJZClcbiAgY29uc3QgaWRUb0ZpbGVuYW1lID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgY29uc3QgdXNlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIC8vIDEpIGFzc2lnbiB1bmlxdWUgZmlsZW5hbWVzIGFuZCB3cml0ZSBmaWxlc1xuICBmb3IgKGNvbnN0IGQgb2YgZG9jcykge1xuICAgIGNvbnN0IHNsdWcgPSBzbHVnaWZ5VGl0bGUoZC50aXRsZSB8fCBcInVudGl0bGVkXCIpO1xuICAgIGxldCBjYW5kaWRhdGUgPSBgJHtzbHVnfS5tZGA7XG4gICAgLy8gZW5zdXJlIHVuaXF1ZW5lc3NcbiAgICBpZiAodXNlZC5oYXMoY2FuZGlkYXRlKSkge1xuICAgICAgY29uc3Qgc2hvcnQgPSAoZC5pZCB8fCBcIlwiKS5zbGljZSgwLCA2KTtcbiAgICAgIGxldCBpID0gMTtcbiAgICAgIGxldCBhdHRlbXB0ID0gYCR7c2x1Z30tJHtzaG9ydH0ubWRgO1xuICAgICAgd2hpbGUgKHVzZWQuaGFzKGF0dGVtcHQpKSB7XG4gICAgICAgIGkrKztcbiAgICAgICAgYXR0ZW1wdCA9IGAke3NsdWd9LSR7c2hvcnR9LSR7aX0ubWRgO1xuICAgICAgfVxuICAgICAgY2FuZGlkYXRlID0gYXR0ZW1wdDtcbiAgICB9XG4gICAgdXNlZC5hZGQoY2FuZGlkYXRlKTtcblxuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKGRlc3REaXIsIGNhbmRpZGF0ZSk7XG4gICAgaWRUb0ZpbGVuYW1lLnNldChkLmlkLCBmdWxsUGF0aCk7XG5cbiAgICBjb25zdCBjb250ZW50ID0gZC50ZXh0ID8/IGAjICR7ZC50aXRsZX1cXG5cXG5gO1xuICAgIGlmICghRFJZX1JVTikge1xuICAgICAgYXdhaXQgZnMubWtkaXIoZGVzdERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUoZnVsbFBhdGgsIGNvbnRlbnQsIFwidXRmOFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBbZHJ5LXJ1bl0gd291bGQgd3JpdGUgJHtmdWxsUGF0aH0gKCR7Y29udGVudC5sZW5ndGh9IGJ5dGVzKWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIDIpIGJ1aWxkIG5vZGVzIG1hcCAoYWxsIG5vZGVzIHByZXNlbnQgYmVmb3JlIGF0dGFjaGluZyBjaGlsZHJlbilcbiAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIFBhZ2VFbnRyeSAmIHsgcmF3PzogYW55IH0+KCk7XG4gIGZvciAoY29uc3QgZCBvZiBkb2NzKSB7XG4gICAgbWFwLnNldChkLmlkLCB7XG4gICAgICB0aXRsZTogZC50aXRsZSxcbiAgICAgIGZpbGU6XG4gICAgICAgIGlkVG9GaWxlbmFtZS5nZXQoZC5pZCkgfHxcbiAgICAgICAgcGF0aC5qb2luKGRlc3REaXIsIGAke3NsdWdpZnlUaXRsZShkLnRpdGxlKX0ubWRgKSxcbiAgICAgIGlkOiBkLmlkLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgcmF3OiBkLFxuICAgIH0gYXMgYW55KTtcbiAgfVxuXG4gIC8vIDMpIGF0dGFjaCBjaGlsZHJlbiDigJQgcm9idXN0IHRvIGJvdGggcGFyZW50RG9jdW1lbnRJZCBhbmQgcGFyZW50SWRcbiAgY29uc3Qgcm9vdHM6IChQYWdlRW50cnkgJiB7IHJhdz86IGFueSB9KVtdID0gW107XG4gIGZvciAoY29uc3Qgbm9kZSBvZiBtYXAudmFsdWVzKCkpIHtcbiAgICBjb25zdCByYXcgPSBub2RlLnJhdyB8fCB7fTtcbiAgICBjb25zdCBwYXJlbnRJZCA9IHJhdy5wYXJlbnREb2N1bWVudElkID8/IHJhdy5wYXJlbnRJZCA/PyBudWxsO1xuICAgIGlmIChwYXJlbnRJZCAmJiBtYXAuaGFzKHBhcmVudElkKSkge1xuICAgICAgbWFwLmdldChwYXJlbnRJZCkhLmNoaWxkcmVuIS5wdXNoKG5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByb290cy5wdXNoKG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIDQpIHN0cmlwIGludGVybmFsIGByYXdgIGFuZCByZXR1cm4gdHJlZSByZWN1cnNpdmVseVxuICBmdW5jdGlvbiBzdHJpcChuOiBhbnkpOiBQYWdlRW50cnkge1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZTogbi50aXRsZSxcbiAgICAgIGZpbGU6IG4uZmlsZSxcbiAgICAgIGlkOiBuLmlkLFxuICAgICAgY2hpbGRyZW46IChuLmNoaWxkcmVuIHx8IFtdKS5tYXAoc3RyaXApLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJvb3RzLm1hcChzdHJpcCk7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgIEV4aXN0aW5nIHN5bmMgbG9naWMgKHVuY2hhbmdlZClcbiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuYXN5bmMgZnVuY3Rpb24gcGVyc2lzdE1hbmlmZXN0KG1hbmlmZXN0OiBNYW5pZmVzdCwgZmlsZVBhdGg6IHN0cmluZykge1xuICBpZiAoRFJZX1JVTikge1xuICAgIGNvbnNvbGUubG9nKGBbZHJ5LXJ1bl0gd291bGQgcGVyc2lzdCBtYW5pZmVzdCB0byAke2ZpbGVQYXRofWApO1xuICAgIHJldHVybjtcbiAgfVxuICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgZmlsZVBhdGgsXG4gICAgYCR7SlNPTi5zdHJpbmdpZnkobWFuaWZlc3QsIG51bGwsIDIpfVxcbmAsXG4gICAgXCJ1dGY4XCIsXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRNYW5pZmVzdChmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxNYW5pZmVzdD4ge1xuICBpZiAoIWV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYE1hbmlmZXN0ICR7ZmlsZVBhdGh9IG5vdCBmb3VuZC4gQ3JlYXRlICR7ZmlsZVBhdGh9IHdpdGggc3RydWN0dXJlIGRlc2NyaWJlZCBpbiBSRUFETUUuYCxcbiAgICApO1xuICB9XG4gIGNvbnN0IHJhdyA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVQYXRoLCBcInV0ZjhcIik7XG4gIHJldHVybiBKU09OLnBhcnNlKHJhdykgYXMgTWFuaWZlc3Q7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN5bmNQYWdlKFxuICBtYW5pZmVzdDogTWFuaWZlc3QsXG4gIHBhZ2U6IFBhZ2VFbnRyeSxcbiAgcGFyZW50SWQ6IHN0cmluZyB8IG51bGwsXG4gIG1hbmlmZXN0UGF0aDogc3RyaW5nLFxuICByZXNvbHZlZENvbGxlY3Rpb25JZDogc3RyaW5nLFxuKSB7XG4gIGNvbnN0IGZpbGVQYXRoID0gcGFnZS5maWxlO1xuICBjb25zdCBhYnNQYXRoID0gcGF0aC5yZXNvbHZlKGZpbGVQYXRoKTtcbiAgY29uc3QgZmlsZUV4aXN0cyA9IGV4aXN0c1N5bmMoYWJzUGF0aCk7XG5cbiAgbGV0IGxvY2FsVHMgPSAwO1xuICBpZiAoZmlsZUV4aXN0cykge1xuICAgIHRyeSB7XG4gICAgICBsb2NhbFRzID0gYXdhaXQgZ2V0TG9jYWxUaW1lc3RhbXBNcyhhYnNQYXRoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybihgQ291bGRuJ3Qgc3RhdCBmaWxlICR7YWJzUGF0aH06ICR7ZXJyfWApO1xuICAgICAgbG9jYWxUcyA9IDA7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhZ2UuaWQpIHtcbiAgICBsZXQgZG9jOiBhbnkgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICBkb2MgPSBhd2FpdCBmZXRjaE91dGxpbmVJbmZvKHBhZ2UuaWQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBmZXRjaCBPdXRsaW5lIGluZm8gZm9yICR7cGFnZS50aXRsZX0gKCR7cGFnZS5pZH0pOiAke2Vycn1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRvYykge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBPdXRsaW5lIGRvYyAke3BhZ2UuaWR9IG5vdCBmb3VuZCAtIHdpbGwgY3JlYXRlIGFzIG5ldyB1bmRlciBjb2xsZWN0aW9uICR7cmVzb2x2ZWRDb2xsZWN0aW9uSWR9LmAsXG4gICAgICApO1xuICAgICAgcGFnZS5pZCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlbW90ZVVwZGF0ZWRBdCA9IGRvYy51cGRhdGVkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShkb2MudXBkYXRlZEF0KS5nZXRUaW1lKClcbiAgICAgICAgOiAwO1xuXG4gICAgICBpZiAoIWZpbGVFeGlzdHMpIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYFtQVUxMXSBMb2NhbCBmaWxlIG1pc3NpbmcgZm9yIFwiJHtwYWdlLnRpdGxlfVwiIC0+IGZldGNoaW5nIHJlbW90ZWAsXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHNhZmVXcml0ZUZpbGUoYWJzUGF0aCwgZG9jLnRleHQgfHwgXCJcIik7XG4gICAgICB9IGVsc2UgaWYgKGxvY2FsVHMgPiByZW1vdGVVcGRhdGVkQXQgKyA1MDApIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYFtQVVNIXSBMb2NhbCBuZXdlciBmb3IgXCIke3BhZ2UudGl0bGV9XCIgLT4gdXBkYXRpbmcgT3V0bGluZWAsXG4gICAgICAgICk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKGFic1BhdGgsIFwidXRmOFwiKTtcbiAgICAgICAgICBhd2FpdCB1cGRhdGVPdXRsaW5lRG9jdW1lbnQocGFnZS5pZCwgcGFnZS50aXRsZSwgY29udGVudCk7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgVXBkYXRlZCBPdXRsaW5lIGRvYyAke3BhZ2UuaWR9YCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCAgRmFpbGVkIHRvIHB1c2ggJHtwYWdlLnRpdGxlfTogJHtlcnJ9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocmVtb3RlVXBkYXRlZEF0ID4gbG9jYWxUcyArIDUwMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgW1BVTExdIE91dGxpbmUgbmV3ZXIgZm9yIFwiJHtwYWdlLnRpdGxlfVwiIC0+IG92ZXJ3cml0aW5nIGxvY2FsIGZpbGVgLFxuICAgICAgICApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHNhZmVXcml0ZUZpbGUoYWJzUGF0aCwgZG9jLnRleHQgfHwgXCJcIik7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgV3JvdGUgbG9jYWwgZmlsZSAke2Fic1BhdGh9YCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCAgRmFpbGVkIHRvIHdyaXRlIGZpbGUgJHthYnNQYXRofTogJHtlcnJ9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbU0tJUF0gTm8gY2hhbmdlcyBmb3IgXCIke3BhZ2UudGl0bGV9XCJgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIXBhZ2UuaWQpIHtcbiAgICBpZiAoIWV4aXN0c1N5bmMoYWJzUGF0aCkpIHtcbiAgICAgIGF3YWl0IGZzLm1rZGlyKHBhdGguZGlybmFtZShhYnNQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUoYWJzUGF0aCwgYCMgJHtwYWdlLnRpdGxlfVxcblxcbmAsIFwidXRmOFwiKTtcbiAgICAgIGNvbnNvbGUubG9nKGBDcmVhdGVkIGxvY2FsIHBsYWNlaG9sZGVyIGZpbGUgJHthYnNQYXRofWApO1xuICAgIH1cbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoYWJzUGF0aCwgXCJ1dGY4XCIpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjcmVhdGVkID0gYXdhaXQgY3JlYXRlT3V0bGluZURvY3VtZW50KFxuICAgICAgICBwYWdlLnRpdGxlLFxuICAgICAgICBjb250ZW50LFxuICAgICAgICByZXNvbHZlZENvbGxlY3Rpb25JZCxcbiAgICAgICAgcGFyZW50SWQsXG4gICAgICApO1xuICAgICAgaWYgKGNyZWF0ZWQ/LmlkKSB7XG4gICAgICAgIHBhZ2UuaWQgPSBjcmVhdGVkLmlkO1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgQ3JlYXRlZCBPdXRsaW5lIGRvYyBcIiR7cGFnZS50aXRsZX1cIiBpZD0ke3BhZ2UuaWR9IGluIGNvbGxlY3Rpb24gJHtyZXNvbHZlZENvbGxlY3Rpb25JZH1gLFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCBwZXJzaXN0TWFuaWZlc3QobWFuaWZlc3QsIG1hbmlmZXN0UGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oYENyZWF0ZSByZXR1cm5lZCBubyBpZCBmb3IgXCIke3BhZ2UudGl0bGV9XCJgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgT3V0bGluZSBkb2MgZm9yIFwiJHtwYWdlLnRpdGxlfVwiOiAke2Vycn1gKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBuZXh0UGFyZW50SWQgPSBwYWdlLmlkIHx8IHBhcmVudElkO1xuICBpZiAocGFnZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBwYWdlLmNoaWxkcmVuKSB7XG4gICAgICBhd2FpdCBzeW5jUGFnZShcbiAgICAgICAgbWFuaWZlc3QsXG4gICAgICAgIGNoaWxkLFxuICAgICAgICBuZXh0UGFyZW50SWQsXG4gICAgICAgIG1hbmlmZXN0UGF0aCxcbiAgICAgICAgcmVzb2x2ZWRDb2xsZWN0aW9uSWQsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICBNYWluXG4gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gIGlmIChMSVNUX0NPTExFQ1RJT05TKSB7XG4gICAgY29uc29sZS5sb2coXCJGZXRjaGluZyBjb2xsZWN0aW9ucy4uLlwiKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29scyA9IGF3YWl0IGxpc3RDb2xsZWN0aW9ucygpO1xuICAgICAgZm9yIChjb25zdCBjIG9mIGNvbHMpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCR7Yy5pZH1cXHQke2MubmFtZX1gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBsaXN0IGNvbGxlY3Rpb25zOiAke2Vycn1gKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKERPX0lOSVQpIHtcbiAgICBjb25zdCBjb2xsZWN0aW9uSWQgPSBDTElfQ09MTEVDVElPTl9PVkVSUklERSB8fCBFTlZfQ09MTEVDVElPTjtcbiAgICBpZiAoIWNvbGxlY3Rpb25JZCkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJJbml0IHJlcXVpcmVzIGEgY29sbGVjdGlvbiBpZC4gUHJvdmlkZSB3aXRoIC0tY29sbGVjdGlvbi1pZD1JRCBvciBzZXQgT1VUTElORV9DT0xMRUNUSU9OX0lEIGVudiB2YXIuXCIsXG4gICAgICApO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBCb290c3RyYXBwaW5nIG1hbmlmZXN0IGZyb20gY29sbGVjdGlvbiAke2NvbGxlY3Rpb25JZH0gKGRyeS1ydW49JHtEUllfUlVOfSkuLi5gLFxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRvY3MgPSBhd2FpdCBsaXN0RG9jdW1lbnRzSW5Db2xsZWN0aW9uKGNvbGxlY3Rpb25JZCk7XG4gICAgICBjb25zb2xlLmxvZyhgRmV0Y2hlZCAke2RvY3MubGVuZ3RofSBkb2N1bWVudHMgZnJvbSBPdXRsaW5lLmApO1xuICAgICAgY29uc3Qgcm9vdHMgPSBhd2FpdCBtYXRlcmlhbGl6ZURvY3NUb0ZpbGVzKGRvY3MsIFwiZG9jc1wiKTtcbiAgICAgIGNvbnN0IG1hbmlmZXN0OiBNYW5pZmVzdCA9IHtcbiAgICAgICAgY29sbGVjdGlvbklkLFxuICAgICAgICBwYWdlczogcm9vdHMsXG4gICAgICB9O1xuICAgICAgYXdhaXQgcGVyc2lzdE1hbmlmZXN0KG1hbmlmZXN0LCBNQU5JRkVTVCk7XG4gICAgICBjb25zb2xlLmxvZyhgV3JvdGUgbWFuaWZlc3QgdG8gJHtNQU5JRkVTVH0gKHBhZ2VzIHNhdmVkIGludG8gZG9jcy8pLmApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihgSW5pdCBmYWlsZWQ6ICR7ZXJyfWApO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBub3JtYWwgc3luYyBmbG93XG4gIC8vIGlmIG1hbmlmZXN0IG1pc3NpbmcsIGVycm9yIGFuZCBoaW50IHRvIHVzZSAtLWluaXRcbiAgaWYgKCFleGlzdHNTeW5jKE1BTklGRVNUKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBgTWFuaWZlc3QgJHtNQU5JRkVTVH0gbm90IGZvdW5kLiBSdW4gd2l0aCAtLWluaXQgLS1jb2xsZWN0aW9uLWlkPUNPTExFQ1RJT05fSUQgdG8gYm9vdHN0cmFwLmAsXG4gICAgKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbiAgY29uc3QgbWFuaWZlc3QgPSBhd2FpdCBsb2FkTWFuaWZlc3QoTUFOSUZFU1QpO1xuICBjb25zdCBlZmZlY3RpdmVDb2xsZWN0aW9uSWQgPSByZXNvbHZlQ29sbGVjdGlvbklkKFxuICAgIG1hbmlmZXN0LmNvbGxlY3Rpb25JZCA/PyBudWxsLFxuICApO1xuICBjb25zb2xlLmxvZyhgU3luY2luZyBpbnRvIHNpbmdsZSBjb2xsZWN0aW9uOiAke2VmZmVjdGl2ZUNvbGxlY3Rpb25JZH1gKTtcbiAgaWYgKERSWV9SVU4pXG4gICAgY29uc29sZS5sb2coXG4gICAgICBcIlJ1bm5pbmcgaW4gZHJ5LXJ1biBtb2RlOyBubyBkZXN0cnVjdGl2ZSBhY3Rpb25zIHdpbGwgYmUgcGVyZm9ybWVkLlwiLFxuICAgICk7XG5cbiAgZm9yIChjb25zdCBwIG9mIG1hbmlmZXN0LnBhZ2VzKSB7XG4gICAgYXdhaXQgc3luY1BhZ2UoXG4gICAgICBtYW5pZmVzdCxcbiAgICAgIHAsXG4gICAgICBudWxsLFxuICAgICAgcGF0aC5yZXNvbHZlKE1BTklGRVNUKSxcbiAgICAgIGVmZmVjdGl2ZUNvbGxlY3Rpb25JZCxcbiAgICApO1xuICB9XG4gIGF3YWl0IHBlcnNpc3RNYW5pZmVzdChtYW5pZmVzdCwgcGF0aC5yZXNvbHZlKE1BTklGRVNUKSk7XG4gIGNvbnNvbGUubG9nKFwiU3luYyBjb21wbGV0ZS5cIik7XG59XG5cbm1haW4oKTtcbiIKICBdLAogICJtYXBwaW5ncyI6ICI7O0FBa0JBLDJCQUNBLHFCQUFTLFdBQ1Qsb0JBY0EsSUFBTSxFQUFXLGFBRVgsRUFBTyxRQUFRLEtBQUssTUFBTSxDQUFDLEVBQzdCLEVBQVcsUUFBUSxJQUFJLGtCQUFvQixLQUMzQyxFQUFVLFFBQVEsSUFBSSxpQkFBbUIsS0FDekMsRUFBeUMsS0FDekMsRUFBVSxHQUNWLEVBQVUsR0FDVixFQUFtQixHQUV2QixRQUFXLEtBQUssRUFDZCxHQUFJLEVBQUUsV0FBVyxrQkFBa0IsRUFDakMsRUFBMEIsRUFBRSxNQUFNLEdBQUcsRUFBRSxJ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LGVBQ0EsTUFBTyxDQUNULEVBQ2dDLENBQVEsRUFDeEMsUUFBUSxJQUFJLHFCQUFxQiw2QkFBb0MsRUFDckUsTUFBTyxFQUFLLENBQ1osUUFBUSxNQUFNLGdCQUFnQixHQUFLLEVBRXJDLE9BS0YsSUFBSyxFQUFXLENBQVEsRUFDdEIsUUFBUSxNQUNOLFlBQVksMEVBQ2QsRUFDQSxRQUFRLEtBQUssQ0FBQyxFQUVoQixJQUFNLEVBQVcsTUFBTSxFQUFhLENBQVEsRUFDdEMsRUFBd0IsRUFDNUIsRUFBUyxjQUFnQixJQUMzQixFQUVBLEdBREEsUUFBUSxJQUFJLG1DQUFtQyxHQUF1QixFQUNsRSxFQUNGLFFBQVEsSUFDTixvRUFDRixFQUVGLFFBQVcsS0FBSyxFQUFTLE1BQ3ZCLE1BQU0sRUFDSixFQUNBLEVBQ0EsS0FDQSxFQUFLLFFBQVEsQ0FBUSxFQUNyQixDQUNGLEVBRUYsTUFBTSxFQUFnQixFQUFVLEVBQUssUUFBUSxDQUFRLENBQUMsRUFDdEQsUUFBUSxJQUFJLGdCQUFnQixFQUc5QixFQUFLIiwKICAiZGVidWdJZCI6ICIyMEY3QTJEM0M0N0U1NkRDNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dockstat/outline-sync",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "A simple outline git-sync library",
5
5
  "type": "module",
6
6
  "main": "./dist/sync.js",