@dockstat/outline-sync 1.0.0 → 1.0.1
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/sync.js +3 -4
- package/package.json +1 -1
package/dist/sync.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
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(`
|
|
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(`
|
|
3
2
|
Usage:
|
|
4
3
|
OUTLINE_API_KEY=... bun run sync.ts [options]
|
|
5
4
|
|
|
@@ -21,5 +20,5 @@ Examples:
|
|
|
21
20
|
|
|
22
21
|
`,"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();
|
|
23
22
|
|
|
24
|
-
//# debugId=
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3luYy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIvKipcbiAqIE91dGxpbmUgPD4gR2l0IE1hcmtkb3duIHR3by13YXkgc3luYyAoc2luZ2xlLWNvbGxlY3Rpb24pICsgaW5pdFxuICogLSBCdW4gcnVudGltZSAodXNlcyBCdW4uc3Bhd25TeW5jLCBnbG9iYWwgZmV0Y2gpXG4gKlxuICogTmV3IGZlYXR1cmVzOlxuICogIC0gLS1pbml0IDogYm9vdHN0cmFwIHBhZ2VzLmpzb24gKyBtYXJrZG93biBmaWxlcyBmcm9tIGFuIGV4aXN0aW5nIGNvbGxlY3Rpb25cbiAqICAtIC0tbGlzdC1jb2xsZWN0aW9ucyA6IHByaW50cyBjb2xsZWN0aW9ucyAoaWQgKyBuYW1lKVxuICpcbiAqIFVzYWdlOlxuICogIE9VVExJTkVfQVBJX0tFWT0uLi4gYnVuIHJ1biBzeW5jLnRzIC0taW5pdCAtLWNvbGxlY3Rpb24taWQ9Q09MTEVDVElPTl9VVUlEXG4gKiAgT1VUTElORV9BUElfS0VZPS4uLiBidW4gcnVuIHN5bmMudHMgLS1saXN0LWNvbGxlY3Rpb25zXG4gKiAgT1VUTElORV9BUElfS0VZPS4uLiBidW4gcnVuIHN5bmMudHMgICAgICAgICAgICAjIG5vcm1hbCBzeW5jXG4gKlxuICogTk9URTogaWYgeW91IHJ1biAtLWluaXQgd2l0aG91dCAtLWRyeS1ydW4gaXQgd2lsbCBhY3R1YWxseSB3cml0ZSBmaWxlcyAmIHBhZ2VzLmpzb25cbiAqL1xuXG5pbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuXG50eXBlIFBhZ2VFbnRyeSA9IHtcbiAgdGl0bGU6IHN0cmluZztcbiAgZmlsZTogc3RyaW5nO1xuICBpZDogc3RyaW5nIHwgbnVsbDtcbiAgY2hpbGRyZW4/OiBQYWdlRW50cnlbXTtcbn07XG5cbnR5cGUgTWFuaWZlc3QgPSB7XG4gIGNvbGxlY3Rpb25JZDogc3RyaW5nO1xuICBwYWdlczogUGFnZUVudHJ5W107XG59O1xuXG5jb25zdCBNQU5JRkVTVCA9IFwicGFnZXMuanNvblwiO1xuXG5jb25zdCBhcmd2ID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpO1xubGV0IEJBU0VfVVJMID0gcHJvY2Vzcy5lbnYuT1VUTElORV9CQVNFX1VSTCB8fCBudWxsO1xubGV0IEFQSV9LRVkgPSBwcm9jZXNzLmVudi5PVVRMSU5FX0FQSV9LRVkgfHwgbnVsbDtcbmxldCBDTElfQ09MTEVDVElPTl9PVkVSUklERTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5sZXQgRFJZX1JVTiA9IGZhbHNlO1xubGV0IERPX0lOSVQgPSBmYWxzZTtcbmxldCBMSVNUX0NPTExFQ1RJT05TID0gZmFsc2U7XG5cbmZvciAoY29uc3QgYSBvZiBhcmd2KSB7XG4gIGlmIChhLnN0YXJ0c1dpdGgoXCItLWNvbGxlY3Rpb24taWQ9XCIpKSB7XG4gICAgQ0xJX0NPTExFQ1RJT05fT1ZFUlJJREUgPSBhLnNwbGl0KFwiPVwiKVsxXSB8fCBudWxsO1xuICB9IGVsc2UgaWYgKGEgPT09IFwiLS1kcnktcnVuXCIpIHtcbiAgICBEUllfUlVOID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChhID09PSBcIi0taW5pdFwiKSB7XG4gICAgRE9fSU5JVCA9IHRydWU7XG4gIH0gZWxzZSBpZiAoYSA9PT0gXCItLWxpc3QtY29sbGVjdGlvbnNcIikge1xuICAgIExJU1RfQ09MTEVDVElPTlMgPSB0cnVlO1xuICB9IGVsc2UgaWYgKGEgPT09IFwiaW5pdFwiKSB7XG4gICAgRE9fSU5JVCA9IHRydWU7XG4gIH0gZWxzZSBpZiAoYSA9PT0gXCJsaXN0LWNvbGxlY3Rpb25zXCIpIHtcbiAgICBMSVNUX0NPTExFQ1RJT05TID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChhID09PSBcIi0taGVscFwiIHx8IGEgPT09IFwiLWhcIikge1xuICAgIHByaW50SGVscEFuZEV4aXQoKTtcbiAgfSBlbHNlIGlmIChhLnN0YXJ0c1dpdGgoXCItLWFwaS1rZXk9XCIpKSB7XG4gICAgQVBJX0tFWSA9IGEuc3BsaXQoXCI9XCIpWzFdIHx8IG51bGw7XG4gIH0gZWxzZSBpZiAoYS5zdGFydHNXaXRoKFwiLS1iYXNlLXVybD1cIikpIHtcbiAgICBCQVNFX1VSTCA9IGEuc3BsaXQoXCI9XCIpWzFdIHx8IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgLy8gaWdub3JlIHVua25vd24sIGFsbG93IG90aGVyIGZsYWdzIGluIGZ1dHVyZVxuICB9XG59XG5cbmlmICghQkFTRV9VUkwpIHtcbiAgQkFTRV9VUkwgPSBcImh0dHBzOi8vYXBwLmdldG91dGxpbmUuY29tXCI7XG59XG5cbmNvbnN0IEhFQURFUlMgPSB7XG4gIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtBUElfS0VZfWAsXG4gIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxufTtcblxuZnVuY3Rpb24gcHJpbnRIZWxwQW5kRXhpdCgpIHtcbiAgY29uc29sZS5sb2coYFxuVXNhZ2U6XG4gIE9VVExJTkVfQVBJX0tFWT0uLi4gYnVuIHJ1biBzeW5jLnRzIFtvcHRpb25zXVxuXG5PcHRpb25zOlxuICAtLWluaXQgICAgICAgICAgICAgICAgICAgICAgQm9vdHN0cmFwIHBhZ2VzLmpzb24gKyBtYXJrZG93biBmaWxlcyBmcm9tIGEgY29sbGVjdGlvblxuICAtLWNvbGxlY3Rpb24taWQ9Q09MX0lEICAgICAgVXNlIHRoaXMgY29sbGVjdGlvbiBpZCAocmVxdWlyZWQgd2l0aCAtLWluaXQgdW5sZXNzIE9VVExJTkVfQ09MTEVDVElPTl9JRCBzZXQpXG4gIC0tbGlzdC1jb2xsZWN0aW9ucyAgICAgICAgICBMaXN0IGNvbGxlY3Rpb25zIHlvdSBoYXZlIGFjY2VzcyB0byAocHJpbnRzIGlkICsgbmFtZSlcbiAgLS1kcnktcnVuICAgICAgICAgICAgICAgICAgIFByaW50IGFjdGlvbnMgd2l0aG91dCB3cml0aW5nIGFueXRoaW5nXG4gIC0taGVscCAgICAgICAgICAgICAgICAgICAgICBTaG93IHRoaXMgaGVscFxuRXhhbXBsZXM6XG4gIE9VVExJTkVfQVBJX0tFWT0uLi4gYnVuIHJ1biBzeW5jLnRzIC0tbGlzdC1jb2xsZWN0aW9uc1xuICBPVVRMSU5FX0FQSV9LRVk9Li4uIGJ1biBydW4gc3luYy50cyAtLWluaXQgLS1jb2xsZWN0aW9uLWlkPWFiYy11dWlkXG4gIE9VVExJTkVfQVBJX0tFWT0uLi4gYnVuIHJ1biBzeW5jLnRzICAgICAgICAgICAgICAgICAgIyBwZXJmb3JtIHJlZ3VsYXIgc3luY1xuICBPVVRMSU5FX0FQSV9LRVk9Li4uIGJ1biBydW4gc3luYy50cyAtLWRyeS1ydW5cbmApO1xuICBwcm9jZXNzLmV4aXQoMCk7XG59XG5cbmNvbnN0IEVOVl9DT0xMRUNUSU9OID0gcHJvY2Vzcy5lbnYuT1VUTElORV9DT0xMRUNUSU9OX0lEIHx8IG51bGw7XG5mdW5jdGlvbiByZXNvbHZlQ29sbGVjdGlvbklkKG1hbmlmZXN0Q29sbGVjdGlvbklkOiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHtcbiAgaWYgKENMSV9DT0xMRUNUSU9OX09WRVJSSURFKSByZXR1cm4gQ0xJX0NPTExFQ1RJT05fT1ZFUlJJREU7XG4gIGlmIChFTlZfQ09MTEVDVElPTikgcmV0dXJuIEVOVl9DT0xMRUNUSU9OO1xuICBpZiAobWFuaWZlc3RDb2xsZWN0aW9uSWQpIHJldHVybiBtYW5pZmVzdENvbGxlY3Rpb25JZDtcbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIFwiTm8gY29sbGVjdGlvbiBpZCBmb3VuZC4gUHJvdmlkZSBjb2xsZWN0aW9uSWQgaW4gcGFnZXMuanNvbiwgb3Igc2V0IE9VVExJTkVfQ09MTEVDVElPTl9JRCBlbnYgdmFyLCBvciBwYXNzIC0tY29sbGVjdGlvbi1pZD1JRFwiLFxuICApO1xufVxuXG5jb25zdCBzbGVlcCA9IChtczogbnVtYmVyKSA9PiBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCBtcykpO1xuXG5mdW5jdGlvbiBzbHVnaWZ5VGl0bGUodGl0bGU6IHN0cmluZykge1xuICByZXR1cm4gdGl0bGVcbiAgICAudG9TdHJpbmcoKVxuICAgIC5ub3JtYWxpemUoXCJORktEXCIpXG4gICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNkZdL2csIFwiXCIpIC8vIHJlbW92ZSBkaWFjcml0aWNzXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAucmVwbGFjZSgvW15hLXowLTldKy9nLCBcIi1cIilcbiAgICAucmVwbGFjZSgvKF4tfC0kKSsvZywgXCJcIilcbiAgICAuc2xpY2UoMCwgMTIwKTtcbn1cblxuZnVuY3Rpb24gZ2V0R2l0VGltZXN0YW1wTXMoZmlsZVBhdGg6IHN0cmluZyk6IG51bWJlciB8IG51bGwge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc29sdmVkID0gcGF0aC5yZXNvbHZlKGZpbGVQYXRoKTtcbiAgICBjb25zdCBvdXQgPSBCdW4uc3Bhd25TeW5jKFxuICAgICAgW1wiZ2l0XCIsIFwibG9nXCIsIFwiLTFcIiwgXCItLWZvcm1hdD0lY3RcIiwgXCItLVwiLCByZXNvbHZlZF0sXG4gICAgICB7IGN3ZDogcHJvY2Vzcy5jd2QoKSB9LFxuICAgICk7XG4gICAgaWYgKG91dC5leGl0Q29kZSAhPT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHR4dCA9IG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShvdXQuc3Rkb3V0KS50cmltKCk7XG4gICAgaWYgKCF0eHQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHNlYyA9IE51bWJlcih0eHQpO1xuICAgIGlmIChOdW1iZXIuaXNOYU4oc2VjKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHNlYyAqIDEwMDA7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldExvY2FsVGltZXN0YW1wTXMoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gIGNvbnN0IGdpdFRzID0gZ2V0R2l0VGltZXN0YW1wTXMoZmlsZVBhdGgpO1xuICBpZiAoZ2l0VHMpIHJldHVybiBnaXRUcztcbiAgY29uc3Qgc3QgPSBhd2FpdCBmcy5zdGF0KGZpbGVQYXRoKTtcbiAgcmV0dXJuIHN0Lm10aW1lTXM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNhZmVXcml0ZUZpbGUoZmlsZVBhdGg6IHN0cmluZywgY29udGVudDogc3RyaW5nKSB7XG4gIGlmIChleGlzdHNTeW5jKGZpbGVQYXRoKSkge1xuICAgIGNvbnN0IGJhayA9IGAke2ZpbGVQYXRofS5vdXRsaW5lLXN5bmMuYmFrLiR7RGF0ZS5ub3coKX1gO1xuICAgIGlmICghRFJZX1JVTikge1xuICAgICAgYXdhaXQgZnMuY29weUZpbGUoZmlsZVBhdGgsIGJhayk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKGBCYWNrZWQgdXAgZXhpc3RpbmcgZmlsZSB0byAke2Jha31gKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIURSWV9SVU4pIHtcbiAgICAgIGF3YWl0IGZzLm1rZGlyKHBhdGguZGlybmFtZShmaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuICBpZiAoIURSWV9SVU4pIHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZVBhdGgsIGNvbnRlbnQsIFwidXRmOFwiKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBbZHJ5LXJ1bl0gd291bGQgd3JpdGUgZmlsZSAke2ZpbGVQYXRofSAoJHtjb250ZW50Lmxlbmd0aH0gYnl0ZXMpYCxcbiAgICApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG91dGxpbmVSZXF1ZXN0KFxuICBlbmRwb2ludDogc3RyaW5nLFxuICBib2R5OiBhbnksXG4gIHJldHJpZXMgPSAzLFxuKTogUHJvbWlzZTxhbnk+IHtcbiAgY29uc3QgdXJsID0gYCR7QkFTRV9VUkx9L2FwaS8ke2VuZHBvaW50fWA7XG4gIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDwgcmV0cmllczsgYXR0ZW1wdCsrKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiBIRUFERVJTLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDQyOSkge1xuICAgICAgICBjb25zdCBiYWNrb2ZmID0gMTAwMCAqIChhdHRlbXB0ICsgMSk7XG4gICAgICAgIGNvbnNvbGUud2FybihgUmF0ZSBsaW1pdGVkLiBCYWNraW5nIG9mZiAke2JhY2tvZmZ9bXNgKTtcbiAgICAgICAgYXdhaXQgc2xlZXAoYmFja29mZik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGBbT3V0bGluZV0gJHtyZXMuc3RhdHVzfSAke2VuZHBvaW50fSBwYXlsb2FkPWAsXG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBcInJlc3BvbnNlPVwiLFxuICAgICAgICAgIGpzb24sXG4gICAgICAgICk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgT3V0bGluZSBBUEkgZXJyb3IgJHtyZXMuc3RhdHVzfTogJHtKU09OLnN0cmluZ2lmeShqc29uKX1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGpzb247XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoYXR0ZW1wdCA9PT0gcmV0cmllcyAtIDEpIHRocm93IGVycjtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFJlcXVlc3QgZmFpbGVkIChhdHRlbXB0ICR7YXR0ZW1wdCArIDF9KTogJHtlcnJ9LiBSZXRyeWluZy4uLmAsXG4gICAgICApO1xuICAgICAgYXdhaXQgc2xlZXAoNTAwICogKGF0dGVtcHQgKyAxKSk7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIm91dGxpbmVSZXF1ZXN0OiB1bnJlYWNoYWJsZVwiKTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgQVBJIGhlbHBlcnMgZm9yIG5vcm1hbCBzeW5jXG4gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoT3V0bGluZUluZm8oZG9jdW1lbnRJZDogc3RyaW5nKSB7XG4gIGNvbnN0IHBheWxvYWQgPSB7IGlkOiBkb2N1bWVudElkIH07XG4gIGNvbnN0IGpzb24gPSBhd2FpdCBvdXRsaW5lUmVxdWVzdChcImRvY3VtZW50cy5pbmZvXCIsIHBheWxvYWQpO1xuICByZXR1cm4ganNvbi5kYXRhID8/IG51bGw7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU91dGxpbmVEb2N1bWVudChcbiAgdGl0bGU6IHN0cmluZyxcbiAgdGV4dDogc3RyaW5nLFxuICBjb2xsZWN0aW9uSWQ6IHN0cmluZyxcbiAgcGFyZW50RG9jdW1lbnRJZDogc3RyaW5nIHwgbnVsbCxcbikge1xuICBjb25zdCBwYXlsb2FkID0ge1xuICAgIHRpdGxlLFxuICAgIHRleHQsXG4gICAgY29sbGVjdGlvbklkLFxuICAgIHBhcmVudERvY3VtZW50SWQ6IHBhcmVudERvY3VtZW50SWQgfHwgbnVsbCxcbiAgICBwdWJsaXNoOiB0cnVlLFxuICB9O1xuICBpZiAoRFJZX1JVTikge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYFtkcnktcnVuXSB3b3VsZCBjcmVhdGUgZG9jIHRpdGxlPVwiJHt0aXRsZX1cIiBjb2xsZWN0aW9uPSR7Y29sbGVjdGlvbklkfSBwYXJlbnQ9JHtwYXJlbnREb2N1bWVudElkfWAsXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGBkcnktcnVuLSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgOSl9YCxcbiAgICAgIHRpdGxlLFxuICAgICAgdGV4dCxcbiAgICAgIGNvbGxlY3Rpb25JZCxcbiAgICAgIHBhcmVudERvY3VtZW50SWQsXG4gICAgfTtcbiAgfVxuICBjb25zdCBqc29uID0gYXdhaXQgb3V0bGluZVJlcXVlc3QoXCJkb2N1bWVudHMuY3JlYXRlXCIsIHBheWxvYWQpO1xuICByZXR1cm4ganNvbi5kYXRhO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVPdXRsaW5lRG9jdW1lbnQoXG4gIGlkOiBzdHJpbmcsXG4gIHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHRleHQ6IHN0cmluZyxcbikge1xuICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7IGlkLCB0ZXh0LCBwdWJsaXNoOiB0cnVlIH07XG4gIGlmICh0aXRsZSkgcGF5bG9hZC50aXRsZSA9IHRpdGxlO1xuICBpZiAoRFJZX1JVTikge1xuICAgIGNvbnNvbGUubG9nKGBbZHJ5LXJ1bl0gd291bGQgdXBkYXRlIGRvYyBpZD0ke2lkfSB0aXRsZT0ke3RpdGxlfWApO1xuICAgIHJldHVybiB7IGlkLCB0aXRsZSwgdGV4dCB9O1xuICB9XG4gIGNvbnN0IGpzb24gPSBhd2FpdCBvdXRsaW5lUmVxdWVzdChcImRvY3VtZW50cy51cGRhdGVcIiwgcGF5bG9hZCk7XG4gIHJldHVybiBqc29uLmRhdGE7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgIEluaXQgaGVscGVyc1xuICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIExpc3QgT3V0bGluZSBjb2xsZWN0aW9ucyAocGFnZWQpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxpc3RDb2xsZWN0aW9ucygpOiBQcm9taXNlPHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXT4ge1xuICBjb25zdCBvdXQ6IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXSA9IFtdO1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgbGV0IGxpbWl0ID0gMTAwOyAvLyBPdXRsaW5lIG1heCBpcyAxMDBcbiAgd2hpbGUgKHRydWUpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QganNvbiA9IGF3YWl0IG91dGxpbmVSZXF1ZXN0KFwiY29sbGVjdGlvbnMubGlzdFwiLCB7IG9mZnNldCwgbGltaXQgfSk7XG4gICAgICBjb25zdCBkYXRhID0ganNvbi5kYXRhIHx8IFtdO1xuICAgICAgZm9yIChjb25zdCBjIG9mIGRhdGEpIG91dC5wdXNoKHsgaWQ6IGMuaWQsIG5hbWU6IGMubmFtZSB9KTtcbiAgICAgIGlmIChkYXRhLmxlbmd0aCA8IGxpbWl0KSBicmVhaztcbiAgICAgIG9mZnNldCArPSBkYXRhLmxlbmd0aDtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgLy8gRGVmZW5zaXZlOiBpZiBBUEkgY29tcGxhaW5zIGFib3V0IGxpbWl0LCByZXRyeSBvbmNlIHdpdGggbGltaXQ9MTAwXG4gICAgICBjb25zdCBtc2cgPSBlcnI/Lm1lc3NhZ2UgPz8gXCJcIjtcbiAgICAgIGlmIChtc2cuaW5jbHVkZXMoXCJQYWdpbmF0aW9uIGxpbWl0IGlzIHRvbyBsYXJnZVwiKSAmJiBsaW1pdCAhPT0gMTAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcIk91dGxpbmUgQVBJIGNvbXBsYWluZWQgYWJvdXQgbGltaXQ7IHJldHJ5aW5nIHdpdGggbGltaXQ9MTAwXCIsXG4gICAgICAgICk7XG4gICAgICAgIGxpbWl0ID0gMTAwO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBMaXN0IGFsbCBkb2N1bWVudHMgaW4gYSBjb2xsZWN0aW9uIChwYWdlZCkuXG4gKiBSZXR1cm5zIGFycmF5IG9mIGRvY3VtZW50cyB7IGlkLCB0aXRsZSwgdGV4dCwgcGFyZW50RG9jdW1lbnRJZCwgdXBkYXRlZEF0IH1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbGlzdERvY3VtZW50c0luQ29sbGVjdGlvbihjb2xsZWN0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8YW55W10+IHtcbiAgY29uc3Qgb3V0OiBhbnlbXSA9IFtdO1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgbGV0IGxpbWl0ID0gMTAwOyAvLyBtdXN0IGJlIDw9IDEwMCBwZXIgT3V0bGluZSBBUElcbiAgd2hpbGUgKHRydWUpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QganNvbiA9IGF3YWl0IG91dGxpbmVSZXF1ZXN0KFwiZG9jdW1lbnRzLmxpc3RcIiwge1xuICAgICAgICBjb2xsZWN0aW9uSWQsXG4gICAgICAgIG9mZnNldCxcbiAgICAgICAgbGltaXQsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRhdGEgPSBqc29uLmRhdGEgfHwgW107XG4gICAgICBmb3IgKGNvbnN0IGQgb2YgZGF0YSkgb3V0LnB1c2goZCk7XG4gICAgICBpZiAoZGF0YS5sZW5ndGggPCBsaW1pdCkgYnJlYWs7XG4gICAgICBvZmZzZXQgKz0gZGF0YS5sZW5ndGg7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGNvbnN0IG1zZyA9IGVycj8ubWVzc2FnZSA/PyBcIlwiO1xuICAgICAgaWYgKG1zZy5pbmNsdWRlcyhcIlBhZ2luYXRpb24gbGltaXQgaXMgdG9vIGxhcmdlXCIpICYmIGxpbWl0ICE9PSAxMDApIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIFwiT3V0bGluZSBBUEkgY29tcGxhaW5lZCBhYm91dCBsaW1pdDsgcmV0cnlpbmcgd2l0aCBsaW1pdD0xMDBcIixcbiAgICAgICAgKTtcbiAgICAgICAgbGltaXQgPSAxMDA7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIFdyaXRlIGRvY3MgdG8gZGlzayBhbmQgcmV0dXJuIHBhZ2VzIGFycmF5ICh3aXRoIGZpbGUgcGF0aHMgc2V0KVxuICovXG5hc3luYyBmdW5jdGlvbiBtYXRlcmlhbGl6ZURvY3NUb0ZpbGVzKFxuICBkb2NzOiBhbnlbXSxcbiAgZGVzdERpciA9IFwiZG9jc1wiLFxuKTogUHJvbWlzZTxQYWdlRW50cnlbXT4ge1xuICAvLyBkb2NzIGlzIGZsYXQgYXJyYXkgd2l0aCBpZC90aXRsZS90ZXh0L3BhcmVudERvY3VtZW50SWQgKG9yIHBhcmVudElkKVxuICBjb25zdCBpZFRvRmlsZW5hbWUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBjb25zdCB1c2VkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgLy8gMSkgYXNzaWduIHVuaXF1ZSBmaWxlbmFtZXMgYW5kIHdyaXRlIGZpbGVzXG4gIGZvciAoY29uc3QgZCBvZiBkb2NzKSB7XG4gICAgY29uc3Qgc2x1ZyA9IHNsdWdpZnlUaXRsZShkLnRpdGxlIHx8IFwidW50aXRsZWRcIik7XG4gICAgbGV0IGNhbmRpZGF0ZSA9IGAke3NsdWd9Lm1kYDtcbiAgICAvLyBlbnN1cmUgdW5pcXVlbmVzc1xuICAgIGlmICh1c2VkLmhhcyhjYW5kaWRhdGUpKSB7XG4gICAgICBjb25zdCBzaG9ydCA9IChkLmlkIHx8IFwiXCIpLnNsaWNlKDAsIDYpO1xuICAgICAgbGV0IGkgPSAxO1xuICAgICAgbGV0IGF0dGVtcHQgPSBgJHtzbHVnfS0ke3Nob3J0fS5tZGA7XG4gICAgICB3aGlsZSAodXNlZC5oYXMoYXR0ZW1wdCkpIHtcbiAgICAgICAgaSsrO1xuICAgICAgICBhdHRlbXB0ID0gYCR7c2x1Z30tJHtzaG9ydH0tJHtpfS5tZGA7XG4gICAgICB9XG4gICAgICBjYW5kaWRhdGUgPSBhdHRlbXB0O1xuICAgIH1cbiAgICB1c2VkLmFkZChjYW5kaWRhdGUpO1xuXG4gICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4oZGVzdERpciwgY2FuZGlkYXRlKTtcbiAgICBpZFRvRmlsZW5hbWUuc2V0KGQuaWQsIGZ1bGxQYXRoKTtcblxuICAgIGNvbnN0IGNvbnRlbnQgPSBkLnRleHQgPz8gYCMgJHtkLnRpdGxlfVxcblxcbmA7XG4gICAgaWYgKCFEUllfUlVOKSB7XG4gICAgICBhd2FpdCBmcy5ta2RpcihkZXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShmdWxsUGF0aCwgY29udGVudCwgXCJ1dGY4XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFtkcnktcnVuXSB3b3VsZCB3cml0ZSAke2Z1bGxQYXRofSAoJHtjb250ZW50Lmxlbmd0aH0gYnl0ZXMpYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gMikgYnVpbGQgbm9kZXMgbWFwIChhbGwgbm9kZXMgcHJlc2VudCBiZWZvcmUgYXR0YWNoaW5nIGNoaWxkcmVuKVxuICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgUGFnZUVudHJ5ICYgeyByYXc/OiBhbnkgfT4oKTtcbiAgZm9yIChjb25zdCBkIG9mIGRvY3MpIHtcbiAgICBtYXAuc2V0KGQuaWQsIHtcbiAgICAgIHRpdGxlOiBkLnRpdGxlLFxuICAgICAgZmlsZTpcbiAgICAgICAgaWRUb0ZpbGVuYW1lLmdldChkLmlkKSB8fFxuICAgICAgICBwYXRoLmpvaW4oZGVzdERpciwgYCR7c2x1Z2lmeVRpdGxlKGQudGl0bGUpfS5tZGApLFxuICAgICAgaWQ6IGQuaWQsXG4gICAgICBjaGlsZHJlbjogW10sXG4gICAgICByYXc6IGQsXG4gICAgfSBhcyBhbnkpO1xuICB9XG5cbiAgLy8gMykgYXR0YWNoIGNoaWxkcmVuIOKAlCByb2J1c3QgdG8gYm90aCBwYXJlbnREb2N1bWVudElkIGFuZCBwYXJlbnRJZFxuICBjb25zdCByb290czogKFBhZ2VFbnRyeSAmIHsgcmF3PzogYW55IH0pW10gPSBbXTtcbiAgZm9yIChjb25zdCBub2RlIG9mIG1hcC52YWx1ZXMoKSkge1xuICAgIGNvbnN0IHJhdyA9IG5vZGUucmF3IHx8IHt9O1xuICAgIGNvbnN0IHBhcmVudElkID0gcmF3LnBhcmVudERvY3VtZW50SWQgPz8gcmF3LnBhcmVudElkID8/IG51bGw7XG4gICAgaWYgKHBhcmVudElkICYmIG1hcC5oYXMocGFyZW50SWQpKSB7XG4gICAgICBtYXAuZ2V0KHBhcmVudElkKSEuY2hpbGRyZW4hLnB1c2gobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvb3RzLnB1c2gobm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gNCkgc3RyaXAgaW50ZXJuYWwgYHJhd2AgYW5kIHJldHVybiB0cmVlIHJlY3Vyc2l2ZWx5XG4gIGZ1bmN0aW9uIHN0cmlwKG46IGFueSk6IFBhZ2VFbnRyeSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiBuLnRpdGxlLFxuICAgICAgZmlsZTogbi5maWxlLFxuICAgICAgaWQ6IG4uaWQsXG4gICAgICBjaGlsZHJlbjogKG4uY2hpbGRyZW4gfHwgW10pLm1hcChzdHJpcCksXG4gICAgfTtcbiAgfVxuICByZXR1cm4gcm9vdHMubWFwKHN0cmlwKTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgRXhpc3Rpbmcgc3luYyBsb2dpYyAodW5jaGFuZ2VkKVxuICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5hc3luYyBmdW5jdGlvbiBwZXJzaXN0TWFuaWZlc3QobWFuaWZlc3Q6IE1hbmlmZXN0LCBmaWxlUGF0aDogc3RyaW5nKSB7XG4gIGlmIChEUllfUlVOKSB7XG4gICAgY29uc29sZS5sb2coYFtkcnktcnVuXSB3b3VsZCBwZXJzaXN0IG1hbmlmZXN0IHRvICR7ZmlsZVBhdGh9YCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGF3YWl0IGZzLndyaXRlRmlsZShcbiAgICBmaWxlUGF0aCxcbiAgICBgJHtKU09OLnN0cmluZ2lmeShtYW5pZmVzdCwgbnVsbCwgMil9XFxuYCxcbiAgICBcInV0ZjhcIixcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9hZE1hbmlmZXN0KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPE1hbmlmZXN0PiB7XG4gIGlmICghZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTWFuaWZlc3QgJHtmaWxlUGF0aH0gbm90IGZvdW5kLiBDcmVhdGUgJHtmaWxlUGF0aH0gd2l0aCBzdHJ1Y3R1cmUgZGVzY3JpYmVkIGluIFJFQURNRS5gLFxuICAgICk7XG4gIH1cbiAgY29uc3QgcmF3ID0gYXdhaXQgZnMucmVhZEZpbGUoZmlsZVBhdGgsIFwidXRmOFwiKTtcbiAgcmV0dXJuIEpTT04ucGFyc2UocmF3KSBhcyBNYW5pZmVzdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3luY1BhZ2UoXG4gIG1hbmlmZXN0OiBNYW5pZmVzdCxcbiAgcGFnZTogUGFnZUVudHJ5LFxuICBwYXJlbnRJZDogc3RyaW5nIHwgbnVsbCxcbiAgbWFuaWZlc3RQYXRoOiBzdHJpbmcsXG4gIHJlc29sdmVkQ29sbGVjdGlvbklkOiBzdHJpbmcsXG4pIHtcbiAgY29uc3QgZmlsZVBhdGggPSBwYWdlLmZpbGU7XG4gIGNvbnN0IGFic1BhdGggPSBwYXRoLnJlc29sdmUoZmlsZVBhdGgpO1xuICBjb25zdCBmaWxlRXhpc3RzID0gZXhpc3RzU3luYyhhYnNQYXRoKTtcblxuICBsZXQgbG9jYWxUcyA9IDA7XG4gIGlmIChmaWxlRXhpc3RzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsVHMgPSBhd2FpdCBnZXRMb2NhbFRpbWVzdGFtcE1zKGFic1BhdGgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS53YXJuKGBDb3VsZG4ndCBzdGF0IGZpbGUgJHthYnNQYXRofTogJHtlcnJ9YCk7XG4gICAgICBsb2NhbFRzID0gMDtcbiAgICB9XG4gIH1cblxuICBpZiAocGFnZS5pZCkge1xuICAgIGxldCBkb2M6IGFueSA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGRvYyA9IGF3YWl0IGZldGNoT3V0bGluZUluZm8ocGFnZS5pZCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIGZldGNoIE91dGxpbmUgaW5mbyBmb3IgJHtwYWdlLnRpdGxlfSAoJHtwYWdlLmlkfSk6ICR7ZXJyfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZG9jKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYE91dGxpbmUgZG9jICR7cGFnZS5pZH0gbm90IGZvdW5kIC0gd2lsbCBjcmVhdGUgYXMgbmV3IHVuZGVyIGNvbGxlY3Rpb24gJHtyZXNvbHZlZENvbGxlY3Rpb25JZH0uYCxcbiAgICAgICk7XG4gICAgICBwYWdlLmlkID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVtb3RlVXBkYXRlZEF0ID0gZG9jLnVwZGF0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKGRvYy51cGRhdGVkQXQpLmdldFRpbWUoKVxuICAgICAgICA6IDA7XG5cbiAgICAgIGlmICghZmlsZUV4aXN0cykge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgW1BVTExdIExvY2FsIGZpbGUgbWlzc2luZyBmb3IgXCIke3BhZ2UudGl0bGV9XCIgLT4gZmV0Y2hpbmcgcmVtb3RlYCxcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgc2FmZVdyaXRlRmlsZShhYnNQYXRoLCBkb2MudGV4dCB8fCBcIlwiKTtcbiAgICAgIH0gZWxzZSBpZiAobG9jYWxUcyA+IHJlbW90ZVVwZGF0ZWRBdCArIDUwMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgW1BVU0hdIExvY2FsIG5ld2VyIGZvciBcIiR7cGFnZS50aXRsZX1cIiAtPiB1cGRhdGluZyBPdXRsaW5lYCxcbiAgICAgICAgKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoYWJzUGF0aCwgXCJ1dGY4XCIpO1xuICAgICAgICAgIGF3YWl0IHVwZGF0ZU91dGxpbmVEb2N1bWVudChwYWdlLmlkLCBwYWdlLnRpdGxlLCBjb250ZW50KTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBVcGRhdGVkIE91dGxpbmUgZG9jICR7cGFnZS5pZH1gKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgICBGYWlsZWQgdG8gcHVzaCAke3BhZ2UudGl0bGV9OiAke2Vycn1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChyZW1vdGVVcGRhdGVkQXQgPiBsb2NhbFRzICsgNTAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBbUFVMTF0gT3V0bGluZSBuZXdlciBmb3IgXCIke3BhZ2UudGl0bGV9XCIgLT4gb3ZlcndyaXRpbmcgbG9jYWwgZmlsZWAsXG4gICAgICAgICk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgc2FmZVdyaXRlRmlsZShhYnNQYXRoLCBkb2MudGV4dCB8fCBcIlwiKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBXcm90ZSBsb2NhbCBmaWxlICR7YWJzUGF0aH1gKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgICBGYWlsZWQgdG8gd3JpdGUgZmlsZSAke2Fic1BhdGh9OiAke2Vycn1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coYFtTS0lQXSBObyBjaGFuZ2VzIGZvciBcIiR7cGFnZS50aXRsZX1cImApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICghcGFnZS5pZCkge1xuICAgIGlmICghZXhpc3RzU3luYyhhYnNQYXRoKSkge1xuICAgICAgYXdhaXQgZnMubWtkaXIocGF0aC5kaXJuYW1lKGFic1BhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShhYnNQYXRoLCBgIyAke3BhZ2UudGl0bGV9XFxuXFxuYCwgXCJ1dGY4XCIpO1xuICAgICAgY29uc29sZS5sb2coYENyZWF0ZWQgbG9jYWwgcGxhY2Vob2xkZXIgZmlsZSAke2Fic1BhdGh9YCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShhYnNQYXRoLCBcInV0ZjhcIik7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCBjcmVhdGVPdXRsaW5lRG9jdW1lbnQoXG4gICAgICAgIHBhZ2UudGl0bGUsXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIHJlc29sdmVkQ29sbGVjdGlvbklkLFxuICAgICAgICBwYXJlbnRJZCxcbiAgICAgICk7XG4gICAgICBpZiAoY3JlYXRlZD8uaWQpIHtcbiAgICAgICAgcGFnZS5pZCA9IGNyZWF0ZWQuaWQ7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBDcmVhdGVkIE91dGxpbmUgZG9jIFwiJHtwYWdlLnRpdGxlfVwiIGlkPSR7cGFnZS5pZH0gaW4gY29sbGVjdGlvbiAke3Jlc29sdmVkQ29sbGVjdGlvbklkfWAsXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHBlcnNpc3RNYW5pZmVzdChtYW5pZmVzdCwgbWFuaWZlc3RQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgQ3JlYXRlIHJldHVybmVkIG5vIGlkIGZvciBcIiR7cGFnZS50aXRsZX1cImApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBPdXRsaW5lIGRvYyBmb3IgXCIke3BhZ2UudGl0bGV9XCI6ICR7ZXJyfWApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5leHRQYXJlbnRJZCA9IHBhZ2UuaWQgfHwgcGFyZW50SWQ7XG4gIGlmIChwYWdlLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHBhZ2UuY2hpbGRyZW4pIHtcbiAgICAgIGF3YWl0IHN5bmNQYWdlKFxuICAgICAgICBtYW5pZmVzdCxcbiAgICAgICAgY2hpbGQsXG4gICAgICAgIG5leHRQYXJlbnRJZCxcbiAgICAgICAgbWFuaWZlc3RQYXRoLFxuICAgICAgICByZXNvbHZlZENvbGxlY3Rpb25JZCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgIE1haW5cbiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgaWYgKExJU1RfQ09MTEVDVElPTlMpIHtcbiAgICBjb25zb2xlLmxvZyhcIkZldGNoaW5nIGNvbGxlY3Rpb25zLi4uXCIpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb2xzID0gYXdhaXQgbGlzdENvbGxlY3Rpb25zKCk7XG4gICAgICBmb3IgKGNvbnN0IGMgb2YgY29scykge1xuICAgICAgICBjb25zb2xlLmxvZyhgJHtjLmlkfVxcdCR7Yy5uYW1lfWApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGxpc3QgY29sbGVjdGlvbnM6ICR7ZXJyfWApO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoRE9fSU5JVCkge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25JZCA9IENMSV9DT0xMRUNUSU9OX09WRVJSSURFIHx8IEVOVl9DT0xMRUNUSU9OO1xuICAgIGlmICghY29sbGVjdGlvbklkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIkluaXQgcmVxdWlyZXMgYSBjb2xsZWN0aW9uIGlkLiBQcm92aWRlIHdpdGggLS1jb2xsZWN0aW9uLWlkPUlEIG9yIHNldCBPVVRMSU5FX0NPTExFQ1RJT05fSUQgZW52IHZhci5cIixcbiAgICAgICk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYEJvb3RzdHJhcHBpbmcgbWFuaWZlc3QgZnJvbSBjb2xsZWN0aW9uICR7Y29sbGVjdGlvbklkfSAoZHJ5LXJ1bj0ke0RSWV9SVU59KS4uLmAsXG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZG9jcyA9IGF3YWl0IGxpc3REb2N1bWVudHNJbkNvbGxlY3Rpb24oY29sbGVjdGlvbklkKTtcbiAgICAgIGNvbnNvbGUubG9nKGBGZXRjaGVkICR7ZG9jcy5sZW5ndGh9IGRvY3VtZW50cyBmcm9tIE91dGxpbmUuYCk7XG4gICAgICBjb25zdCByb290cyA9IGF3YWl0IG1hdGVyaWFsaXplRG9jc1RvRmlsZXMoZG9jcywgXCJkb2NzXCIpO1xuICAgICAgY29uc3QgbWFuaWZlc3Q6IE1hbmlmZXN0ID0ge1xuICAgICAgICBjb2xsZWN0aW9uSWQsXG4gICAgICAgIHBhZ2VzOiByb290cyxcbiAgICAgIH07XG4gICAgICBhd2FpdCBwZXJzaXN0TWFuaWZlc3QobWFuaWZlc3QsIE1BTklGRVNUKTtcbiAgICAgIGNvbnNvbGUubG9nKGBXcm90ZSBtYW5pZmVzdCB0byAke01BTklGRVNUfSAocGFnZXMgc2F2ZWQgaW50byBkb2NzLykuYCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBJbml0IGZhaWxlZDogJHtlcnJ9YCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIG5vcm1hbCBzeW5jIGZsb3dcbiAgLy8gaWYgbWFuaWZlc3QgbWlzc2luZywgZXJyb3IgYW5kIGhpbnQgdG8gdXNlIC0taW5pdFxuICBpZiAoIWV4aXN0c1N5bmMoTUFOSUZFU1QpKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGBNYW5pZmVzdCAke01BTklGRVNUfSBub3QgZm91bmQuIFJ1biB3aXRoIC0taW5pdCAtLWNvbGxlY3Rpb24taWQ9Q09MTEVDVElPTl9JRCB0byBib290c3RyYXAuYCxcbiAgICApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IGxvYWRNYW5pZmVzdChNQU5JRkVTVCk7XG4gIGNvbnN0IGVmZmVjdGl2ZUNvbGxlY3Rpb25JZCA9IHJlc29sdmVDb2xsZWN0aW9uSWQoXG4gICAgbWFuaWZlc3QuY29sbGVjdGlvbklkID8/IG51bGwsXG4gICk7XG4gIGNvbnNvbGUubG9nKGBTeW5jaW5nIGludG8gc2luZ2xlIGNvbGxlY3Rpb246ICR7ZWZmZWN0aXZlQ29sbGVjdGlvbklkfWApO1xuICBpZiAoRFJZX1JVTilcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIFwiUnVubmluZyBpbiBkcnktcnVuIG1vZGU7IG5vIGRlc3RydWN0aXZlIGFjdGlvbnMgd2lsbCBiZSBwZXJmb3JtZWQuXCIsXG4gICAgKTtcblxuICBmb3IgKGNvbnN0IHAgb2YgbWFuaWZlc3QucGFnZXMpIHtcbiAgICBhd2FpdCBzeW5jUGFnZShcbiAgICAgIG1hbmlmZXN0LFxuICAgICAgcCxcbiAgICAgIG51bGwsXG4gICAgICBwYXRoLnJlc29sdmUoTUFOSUZFU1QpLFxuICAgICAgZWZmZWN0aXZlQ29sbGVjdGlvbklkLFxuICAgICk7XG4gIH1cbiAgYXdhaXQgcGVyc2lzdE1hbmlmZXN0KG1hbmlmZXN0LCBwYXRoLnJlc29sdmUoTUFOSUZFU1QpKTtcbiAgY29uc29sZS5sb2coXCJTeW5jIGNvbXBsZXRlLlwiKTtcbn1cblxubWFpbigpO1xuIgogIF0sCiAgIm1hcHBpbmdzIjogIjtBQWdCQSwyQkFDQSxxQkFBUyxXQUNULG9CQWNBLElBQU0sRUFBVyxhQUVYLEVBQU8sUUFBUSxLQUFLLE1BQU0sQ0FBQyxFQUM3QixFQUFXLFFBQVEsSUFBSSxrQkFBb0IsS0FDM0MsRUFBVSxRQUFRLElBQUksaUJBQW1CLEtBQ3pDLEVBQXlDLEtBQ3pDLEVBQVUsR0FDVixFQUFVLEdBQ1YsRUFBbUIsR0FFdkIsUUFBVyxLQUFLLEVBQ2QsR0FBSSxFQUFFLFdBQVcsa0JBQWtCLEVBQ2pDLEVBQTBCLEVBQUUsTUFBTSxHQUFHLEVBQUUsSUFBTSxLQUN4QyxRQUFJLElBQU0sWUFD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QUFRLEVBQ3hDLFFBQVEsSUFBSSxxQkFBcUIsNkJBQW9DLEVBQ3JFLE1BQU8sRUFBSyxDQUNaLFFBQVEsTUFBTSxnQkFBZ0IsR0FBSyxFQUVyQyxPQUtGLElBQUssRUFBVyxDQUFRLEVBQ3RCLFFBQVEsTUFDTixZQUFZLDBFQUNkLEVBQ0EsUUFBUSxLQUFLLENBQUMsRUFFaEIsSUFBTSxFQUFXLE1BQU0sRUFBYSxDQUFRLEVBQ3RDLEVBQXdCLEVBQzVCLEVBQVMsY0FBZ0IsSUFDM0IsRUFFQSxHQURBLFFBQVEsSUFBSSxtQ0FBbUMsR0FBdUIsRUFDbEUsRUFDRixRQUFRLElBQ04sb0VBQ0YsRUFFRixRQUFXLEtBQUssRUFBUyxNQUN2QixNQUFNLEVBQ0osRUFDQSxFQUNBLEtBQ0EsRUFBSyxRQUFRLENBQVEsRUFDckIsQ0FDRixFQUVGLE1BQU0sRUFBZ0IsRUFBVSxFQUFLLFFBQVEsQ0FBUSxDQUFDLEVBQ3RELFFBQVEsSUFBSSxnQkFBZ0IsRUFHOUIsRUFBSyIsCiAgImRlYnVnSWQiOiAiNTA3OTJCNDBFRkY1MkMxQzY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|
|
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=
|