@cartanova/qgrid-cli 2.10.8 → 2.10.10
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/bundle/dist/application/qgrid/qgrid-response-format.js +2 -2
- package/bundle/dist/application/qgrid/qgrid-run-lifecycle.js +4 -2
- package/bundle/dist/application/request-log/request-log.model.js +2 -1
- package/bundle/dist/application/request-log/request-log.types.js +8 -2
- package/bundle/dist/application/sonamu.generated.js +9 -1
- package/bundle/dist/application/sonamu.generated.sso.js +2 -1
- package/bundle/dist/i18n/sd.generated.js +2 -1
- package/bundle/dist/migrations/20261018215031_alter_request_logs_add1_alter1.js +15 -0
- package/bundle/src/application/qgrid/qgrid-response-format.ts +1 -1
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.test.ts +14 -0
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +3 -0
- package/bundle/src/application/request-log/request-log.entity.json +8 -0
- package/bundle/src/application/request-log/request-log.model.ts +3 -0
- package/bundle/src/application/request-log/request-log.types.ts +11 -0
- package/bundle/src/application/sonamu.generated.http +2 -0
- package/bundle/src/application/sonamu.generated.sso.ts +1 -0
- package/bundle/src/application/sonamu.generated.ts +14 -0
- package/bundle/src/i18n/sd.generated.ts +1 -0
- package/bundle/src/migrations/20261018215031_alter_request_logs_add1_alter1.ts +15 -0
- package/bundle/web-dist/client/assets/{index-DmCLKefs.js → index-DZwzUfI-.js} +4 -4
- package/bundle/web-dist/client/assets/{logs-BedgCqdB.js → logs-Cog79DU5.js} +1 -1
- package/bundle/web-dist/client/assets/{monit-76gLIcaG.js → monit-2auznBys.js} +1 -1
- package/bundle/web-dist/client/assets/{routes-BcU0zD8h.js → routes-B0lTeLK-.js} +1 -1
- package/bundle/web-dist/client/assets/{services.generated-BsieU37H.js → services.generated-NP-ValHd.js} +1 -1
- package/bundle/web-dist/client/assets/{settings-DNVHSTQH.js → settings-D8ZxZGSJ.js} +1 -1
- package/bundle/web-dist/client/assets/{show-dZPDC-qz.js → show-CFSERlnM.js} +2 -2
- package/bundle/web-dist/client/assets/{tokens-BaQQcYUT.js → tokens-CZXUyI7O.js} +1 -1
- package/bundle/web-dist/client/assets/{use-oauth-login-flow-D1jlq9ha.js → use-oauth-login-flow-hboOs3wG.js} +1 -1
- package/bundle/web-dist/client/assets/{use-update-token-mutation-DAq0F8p-.js → use-update-token-mutation-BQHS0byG.js} +1 -1
- package/bundle/web-dist/client/index.html +2 -2
- package/bundle/web-dist/server/assets/{lazyRouteComponent-Dtd0NR4r.js → lazyRouteComponent-CgBdabgd.js} +2 -2
- package/bundle/web-dist/server/assets/{logs-l91avYif.js → logs-BMyR98rU.js} +4 -4
- package/bundle/web-dist/server/assets/{monit-DvzribSE.js → monit-ZPt66W5M.js} +3 -3
- package/bundle/web-dist/server/assets/{plus-KZrECewT.js → plus-BZ9I0VgC.js} +1 -1
- package/bundle/web-dist/server/assets/{react-dom-B4a6-uuR.js → react-dom-Ds75e4Jl.js} +1 -1
- package/bundle/web-dist/server/assets/{refresh-cw-BND93JrF.js → refresh-cw-CztCFis-.js} +1 -1
- package/bundle/web-dist/server/assets/{request-model-CbqfnQOJ.js → request-model-DjGldb-h.js} +1 -1
- package/bundle/web-dist/server/assets/{routes-BAPWTizT.js → routes-Ct-k7nBA.js} +4 -4
- package/bundle/web-dist/server/assets/{services.generated-CEbGjsI0.js → services.generated-BA4AcAf5.js} +1 -0
- package/bundle/web-dist/server/assets/{settings-BZR5HSAL.js → settings-CBUZ47Xx.js} +3 -3
- package/bundle/web-dist/server/assets/{show-CxVZTAdv.js → show-LSFIzvO2.js} +11 -7
- package/bundle/web-dist/server/assets/{tokens-D1hb4eKk.js → tokens-DxrBW512.js} +4 -4
- package/bundle/web-dist/server/assets/{use-oauth-login-flow-Cvdy0zF8.js → use-oauth-login-flow-Gn8flMK5.js} +1 -1
- package/bundle/web-dist/server/assets/{use-update-token-mutation-CfYmk_4_.js → use-update-token-mutation-pkArIzCP.js} +1 -1
- package/bundle/web-dist/server/entry-server.generated.js +18 -10
- package/package.json +1 -1
- package/skills/qgrid/references/ai-sdk-provider-contract.md +1 -1
- package/skills/qgrid/references/decision-rationale.md +2 -2
- package/skills/qgrid/references/openai-codex-runtime.md +3 -2
- package/skills/qgrid/references/request-log-run-lifecycle.md +1 -1
- package/skills/qgrid/references/sonamu-api-web-flow.md +1 -1
- package/skills/qgrid/references/verification-and-debugging.md +3 -3
|
@@ -87,6 +87,6 @@ function base64ByteSize(value) {
|
|
|
87
87
|
return Math.max(Math.floor(normalized.length * 3 / 4) - padding, 0);
|
|
88
88
|
}
|
|
89
89
|
//#endregion
|
|
90
|
-
export { CODEX_IMAGE_GENERATION_TOOL_CONFIG, buildImageGenerationToolSteps, formatImagePartForLog, formatResponseForLog, getImageParts, imageGenerationToolArgs };
|
|
90
|
+
export { CODEX_IMAGE_GENERATION_TOOL_CONFIG, buildImageGenerationToolSteps, extractInputImagesForToolArgs, formatImagePartForLog, formatResponseForLog, getImageParts, imageGenerationToolArgs };
|
|
91
91
|
|
|
92
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQtcmVzcG9uc2UtZm9ybWF0LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHBsaWNhdGlvbi9xZ3JpZC9xZ3JpZC1yZXNwb25zZS1mb3JtYXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ09ERVhfSU1BR0VfR0VORVJBVElPTl9NT0RFTCxcbiAgcmVzb2x2ZUltYWdlR2VuZXJhdGlvbk9wdGlvbnMsXG59IGZyb20gXCIuL3FncmlkLWltYWdlLWdlbmVyYXRpb25cIjtcbmltcG9ydCB7XG4gIHR5cGUgSW1hZ2VHZW5lcmF0aW9uTWV0YWRhdGEsXG4gIHR5cGUgUWdyaWRDb250ZW50LFxuICB0eXBlIFF1ZXJ5SW5wdXQsXG4gIHR5cGUgUXVlcnlPdXRwdXQsXG59IGZyb20gXCIuL3FncmlkLnR5cGVzXCI7XG5cbmV4cG9ydCBjb25zdCBDT0RFWF9JTUFHRV9HRU5FUkFUSU9OX1RPT0xfQ09ORklHID0ge1xuICB0eXBlOiBcImltYWdlX2dlbmVyYXRpb25cIixcbiAgb3V0cHV0Rm9ybWF0OiBcInBuZ1wiLFxufSBhcyBjb25zdDtcblxuZnVuY3Rpb24gZXNjYXBlSHRtbEF0dHJpYnV0ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlXG4gICAgLnJlcGxhY2UoLyYvZywgXCImYW1wO1wiKVxuICAgIC5yZXBsYWNlKC9cIi9nLCBcIiZxdW90O1wiKVxuICAgIC5yZXBsYWNlKC88L2csIFwiJmx0O1wiKVxuICAgIC5yZXBsYWNlKC8+L2csIFwiJmd0O1wiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFJlc3BvbnNlRm9yTG9nKHJlc3VsdDogUXVlcnlPdXRwdXQpOiBzdHJpbmcge1xuICByZXR1cm4gcmVzdWx0LmNvbnRlbnRcbiAgICAuZmxhdE1hcCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gXCJ0ZXh0XCIpIHJldHVybiBbaXRlbS50ZXh0XTtcbiAgICAgIGlmIChpdGVtLnR5cGUgPT09IFwiaW1hZ2VcIikgcmV0dXJuIFtmb3JtYXRJbWFnZVBhcnRGb3JMb2coaXRlbSldO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pXG4gICAgLmZpbHRlcigocGFydCkgPT4gcGFydC5sZW5ndGggPiAwKVxuICAgIC5qb2luKFwiXFxuXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1hZ2VQYXJ0cyhyZXN1bHQ6IFF1ZXJ5T3V0cHV0KTogRXh0cmFjdDxRZ3JpZENvbnRlbnQsIHsgdHlwZTogXCJpbWFnZVwiIH0+W10ge1xuICByZXR1cm4gcmVzdWx0LmNvbnRlbnQuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnR5cGUgPT09IFwiaW1hZ2VcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRJbWFnZVBhcnRGb3JMb2coaW1hZ2U6IEV4dHJhY3Q8UWdyaWRDb250ZW50LCB7IHR5cGU6IFwiaW1hZ2VcIiB9Pik6IHN0cmluZyB7XG4gIGNvbnN0IGFsdCA9IGVzY2FwZUh0bWxBdHRyaWJ1dGUoaW1hZ2UucmV2aXNlZFByb21wdCA/PyBcImdlbmVyYXRlZCBpbWFnZVwiKTtcbiAgcmV0dXJuIGA8aW1nIHNyYz1cImRhdGE6JHtpbWFnZS5tZWRpYVR5cGUgPz8gXCJpbWFnZS9wbmdcIn07YmFzZTY0LCR7aW1hZ2UuZGF0YX1cIiBhbHQ9XCIke2FsdH1cIiAvPmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbWFnZUdlbmVyYXRpb25Ub29sQXJncyhcbiAgYXJnczogUXVlcnlJbnB1dCxcbiAgb3B0aW9uczogeyBpbmNsdWRlSW5wdXRJbWFnZXM/OiBib29sZWFuOyBnZW5lcmF0aW9uPzogSW1hZ2VHZW5lcmF0aW9uTWV0YWRhdGEgfSA9IHt9LFxuKTogc3RyaW5nIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyhhcmdzLmltYWdlR2VuZXJhdGlvbk9wdGlvbnMpO1xuICBjb25zdCBpbnB1dEltYWdlcyA9XG4gICAgb3B0aW9ucy5pbmNsdWRlSW5wdXRJbWFnZXMgPT09IGZhbHNlID8gW10gOiBleHRyYWN0SW5wdXRJbWFnZXNGb3JUb29sQXJncyhhcmdzKTtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcbiAgICBwcm9tcHQ6IGFyZ3MucHJvbXB0LFxuICAgIC4uLihpbnB1dEltYWdlcy5sZW5ndGggPiAwID8geyBpbnB1dEltYWdlcyB9IDoge30pLFxuICAgIGRyaXZlck1vZGVsOiBhcmdzLm1vZGVsID8/IG51bGwsXG4gICAgdG9vbDoge1xuICAgICAgLi4uQ09ERVhfSU1BR0VfR0VORVJBVElPTl9UT09MX0NPTkZJRyxcbiAgICAgIC4uLihhcmdzLmltYWdlR2VuZXJhdGlvbk9wdGlvbnM/Lm91dHB1dEZvcm1hdFxuICAgICAgICA/IHsgb3V0cHV0Rm9ybWF0OiBhcmdzLmltYWdlR2VuZXJhdGlvbk9wdGlvbnMub3V0cHV0Rm9ybWF0IH1cbiAgICAgICAgOiB7fSksXG4gICAgfSxcbiAgICAuLi4oYXJncy5pbWFnZUdlbmVyYXRpb25PcHRpb25zID8geyByZXF1ZXN0ZWRPcHRpb25zOiBhcmdzLmltYWdlR2VuZXJhdGlvbk9wdGlvbnMgfSA6IHt9KSxcbiAgICAuLi4ob3B0aW9ucy5nZW5lcmF0aW9uXG4gICAgICA/IHsgb2JzZXJ2ZWRHZW5lcmF0aW9uOiBvcHRpb25zLmdlbmVyYXRpb24gfVxuICAgICAgOiB7XG4gICAgICAgICAgcHJpY2luZ0Fzc3VtcHRpb246IHtcbiAgICAgICAgICAgIG1vZGVsOiBDT0RFWF9JTUFHRV9HRU5FUkFUSU9OX01PREVMLFxuICAgICAgICAgICAgcXVhbGl0eTogcmVzb2x2ZWQucXVhbGl0eSxcbiAgICAgICAgICAgIHNpemU6IHJlc29sdmVkLnNpemUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRJbWFnZUdlbmVyYXRpb25Ub29sU3RlcHMoXG4gIGFyZ3M6IFF1ZXJ5SW5wdXQsXG4gIGltYWdlczogRXh0cmFjdDxRZ3JpZENvbnRlbnQsIHsgdHlwZTogXCJpbWFnZVwiIH0+
|
|
92
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQtcmVzcG9uc2UtZm9ybWF0LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHBsaWNhdGlvbi9xZ3JpZC9xZ3JpZC1yZXNwb25zZS1mb3JtYXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ09ERVhfSU1BR0VfR0VORVJBVElPTl9NT0RFTCxcbiAgcmVzb2x2ZUltYWdlR2VuZXJhdGlvbk9wdGlvbnMsXG59IGZyb20gXCIuL3FncmlkLWltYWdlLWdlbmVyYXRpb25cIjtcbmltcG9ydCB7XG4gIHR5cGUgSW1hZ2VHZW5lcmF0aW9uTWV0YWRhdGEsXG4gIHR5cGUgUWdyaWRDb250ZW50LFxuICB0eXBlIFF1ZXJ5SW5wdXQsXG4gIHR5cGUgUXVlcnlPdXRwdXQsXG59IGZyb20gXCIuL3FncmlkLnR5cGVzXCI7XG5cbmV4cG9ydCBjb25zdCBDT0RFWF9JTUFHRV9HRU5FUkFUSU9OX1RPT0xfQ09ORklHID0ge1xuICB0eXBlOiBcImltYWdlX2dlbmVyYXRpb25cIixcbiAgb3V0cHV0Rm9ybWF0OiBcInBuZ1wiLFxufSBhcyBjb25zdDtcblxuZnVuY3Rpb24gZXNjYXBlSHRtbEF0dHJpYnV0ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlXG4gICAgLnJlcGxhY2UoLyYvZywgXCImYW1wO1wiKVxuICAgIC5yZXBsYWNlKC9cIi9nLCBcIiZxdW90O1wiKVxuICAgIC5yZXBsYWNlKC88L2csIFwiJmx0O1wiKVxuICAgIC5yZXBsYWNlKC8+L2csIFwiJmd0O1wiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFJlc3BvbnNlRm9yTG9nKHJlc3VsdDogUXVlcnlPdXRwdXQpOiBzdHJpbmcge1xuICByZXR1cm4gcmVzdWx0LmNvbnRlbnRcbiAgICAuZmxhdE1hcCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gXCJ0ZXh0XCIpIHJldHVybiBbaXRlbS50ZXh0XTtcbiAgICAgIGlmIChpdGVtLnR5cGUgPT09IFwiaW1hZ2VcIikgcmV0dXJuIFtmb3JtYXRJbWFnZVBhcnRGb3JMb2coaXRlbSldO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pXG4gICAgLmZpbHRlcigocGFydCkgPT4gcGFydC5sZW5ndGggPiAwKVxuICAgIC5qb2luKFwiXFxuXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1hZ2VQYXJ0cyhyZXN1bHQ6IFF1ZXJ5T3V0cHV0KTogRXh0cmFjdDxRZ3JpZENvbnRlbnQsIHsgdHlwZTogXCJpbWFnZVwiIH0+W10ge1xuICByZXR1cm4gcmVzdWx0LmNvbnRlbnQuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnR5cGUgPT09IFwiaW1hZ2VcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRJbWFnZVBhcnRGb3JMb2coaW1hZ2U6IEV4dHJhY3Q8UWdyaWRDb250ZW50LCB7IHR5cGU6IFwiaW1hZ2VcIiB9Pik6IHN0cmluZyB7XG4gIGNvbnN0IGFsdCA9IGVzY2FwZUh0bWxBdHRyaWJ1dGUoaW1hZ2UucmV2aXNlZFByb21wdCA/PyBcImdlbmVyYXRlZCBpbWFnZVwiKTtcbiAgcmV0dXJuIGA8aW1nIHNyYz1cImRhdGE6JHtpbWFnZS5tZWRpYVR5cGUgPz8gXCJpbWFnZS9wbmdcIn07YmFzZTY0LCR7aW1hZ2UuZGF0YX1cIiBhbHQ9XCIke2FsdH1cIiAvPmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbWFnZUdlbmVyYXRpb25Ub29sQXJncyhcbiAgYXJnczogUXVlcnlJbnB1dCxcbiAgb3B0aW9uczogeyBpbmNsdWRlSW5wdXRJbWFnZXM/OiBib29sZWFuOyBnZW5lcmF0aW9uPzogSW1hZ2VHZW5lcmF0aW9uTWV0YWRhdGEgfSA9IHt9LFxuKTogc3RyaW5nIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyhhcmdzLmltYWdlR2VuZXJhdGlvbk9wdGlvbnMpO1xuICBjb25zdCBpbnB1dEltYWdlcyA9XG4gICAgb3B0aW9ucy5pbmNsdWRlSW5wdXRJbWFnZXMgPT09IGZhbHNlID8gW10gOiBleHRyYWN0SW5wdXRJbWFnZXNGb3JUb29sQXJncyhhcmdzKTtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcbiAgICBwcm9tcHQ6IGFyZ3MucHJvbXB0LFxuICAgIC4uLihpbnB1dEltYWdlcy5sZW5ndGggPiAwID8geyBpbnB1dEltYWdlcyB9IDoge30pLFxuICAgIGRyaXZlck1vZGVsOiBhcmdzLm1vZGVsID8/IG51bGwsXG4gICAgdG9vbDoge1xuICAgICAgLi4uQ09ERVhfSU1BR0VfR0VORVJBVElPTl9UT09MX0NPTkZJRyxcbiAgICAgIC4uLihhcmdzLmltYWdlR2VuZXJhdGlvbk9wdGlvbnM/Lm91dHB1dEZvcm1hdFxuICAgICAgICA/IHsgb3V0cHV0Rm9ybWF0OiBhcmdzLmltYWdlR2VuZXJhdGlvbk9wdGlvbnMub3V0cHV0Rm9ybWF0IH1cbiAgICAgICAgOiB7fSksXG4gICAgfSxcbiAgICAuLi4oYXJncy5pbWFnZUdlbmVyYXRpb25PcHRpb25zID8geyByZXF1ZXN0ZWRPcHRpb25zOiBhcmdzLmltYWdlR2VuZXJhdGlvbk9wdGlvbnMgfSA6IHt9KSxcbiAgICAuLi4ob3B0aW9ucy5nZW5lcmF0aW9uXG4gICAgICA/IHsgb2JzZXJ2ZWRHZW5lcmF0aW9uOiBvcHRpb25zLmdlbmVyYXRpb24gfVxuICAgICAgOiB7XG4gICAgICAgICAgcHJpY2luZ0Fzc3VtcHRpb246IHtcbiAgICAgICAgICAgIG1vZGVsOiBDT0RFWF9JTUFHRV9HRU5FUkFUSU9OX01PREVMLFxuICAgICAgICAgICAgcXVhbGl0eTogcmVzb2x2ZWQucXVhbGl0eSxcbiAgICAgICAgICAgIHNpemU6IHJlc29sdmVkLnNpemUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRJbWFnZUdlbmVyYXRpb25Ub29sU3RlcHMoXG4gIGFyZ3M6IFF1ZXJ5SW5wdXQsXG4gIGltYWdlczogRXh0cmFjdDxRZ3JpZENvbnRlbnQsIHsgdHlwZTogXCJpbWFnZVwiIH0+W10sXG4gIHN0ZXBJbmRleDogbnVtYmVyLFxuKTogQXJyYXk8e1xuICBzdGVwX2luZGV4OiBudW1iZXI7XG4gIHR5cGU6IFwidG9vbF9jYWxsXCI7XG4gIHRvb2xfY2FsbF9pbmRleDogbnVtYmVyO1xuICB0b29sX2NhbGxfaWQ6IHN0cmluZztcbiAgdG9vbF9uYW1lOiBcImltYWdlX2dlbmVyYXRpb25cIjtcbiAgdG9vbF9hcmdzOiBzdHJpbmc7XG4gIHRvb2xfcmVzdWx0OiBzdHJpbmc7XG59PiB7XG4gIGlmIChpbWFnZXMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG5cbiAgcmV0dXJuIGltYWdlcy5tYXAoKGltYWdlLCBpbmRleCkgPT4gKHtcbiAgICBzdGVwX2luZGV4OiBzdGVwSW5kZXgsXG4gICAgdHlwZTogXCJ0b29sX2NhbGxcIixcbiAgICB0b29sX2NhbGxfaW5kZXg6IGluZGV4LFxuICAgIHRvb2xfY2FsbF9pZDogYGltYWdlX2dlbmVyYXRpb246JHtzdGVwSW5kZXh9OiR7aW5kZXh9YCxcbiAgICB0b29sX25hbWU6IFwiaW1hZ2VfZ2VuZXJhdGlvblwiLFxuICAgIHRvb2xfYXJnczogaW1hZ2VHZW5lcmF0aW9uVG9vbEFyZ3MoYXJncywge1xuICAgICAgaW5jbHVkZUlucHV0SW1hZ2VzOiBpbmRleCA9PT0gMCxcbiAgICAgIGdlbmVyYXRpb246IGltYWdlLmdlbmVyYXRpb24sXG4gICAgfSksXG4gICAgdG9vbF9yZXN1bHQ6IGZvcm1hdEltYWdlUGFydEZvckxvZyhpbWFnZSksXG4gIH0pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RJbnB1dEltYWdlc0ZvclRvb2xBcmdzKGFyZ3M6IFF1ZXJ5SW5wdXQpOiBBcnJheTx7XG4gIG1lZGlhVHlwZT86IHN0cmluZztcbiAgZGF0YT86IHN0cmluZztcbiAgdXJsPzogc3RyaW5nO1xuICBieXRlU2l6ZT86IG51bWJlcjtcbn0+IHtcbiAgY29uc3QgaW1hZ2VzID0gYXJncy5pbnB1dD8uZmlsdGVyKChpdGVtKSA9PiBpdGVtLnR5cGUgPT09IFwiaW1hZ2VcIikgPz8gW107XG4gIHJldHVybiBpbWFnZXMubWFwKChpbWFnZSkgPT4ge1xuICAgIGNvbnN0IGRhdGFVcmwgPSBwYXJzZURhdGFVcmwoaW1hZ2UudXJsKTtcbiAgICBpZiAoIWRhdGFVcmwpIHJldHVybiB7IHVybDogaW1hZ2UudXJsIH07XG4gICAgaWYgKGRhdGFVcmwuaXNCYXNlNjQgJiYgZGF0YVVybC5tZWRpYVR5cGUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKFwiaW1hZ2UvXCIpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtZWRpYVR5cGU6IGRhdGFVcmwubWVkaWFUeXBlLFxuICAgICAgICBkYXRhOiBkYXRhVXJsLmRhdGEsXG4gICAgICAgIGJ5dGVTaXplOiBiYXNlNjRCeXRlU2l6ZShkYXRhVXJsLmRhdGEpLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lZGlhVHlwZTogZGF0YVVybC5tZWRpYVR5cGUsXG4gICAgICB1cmw6IGBbZGF0YS11cmwgJHtpbWFnZS51cmwubGVuZ3RofSBjaGFyc11gLFxuICAgICAgLi4uKGRhdGFVcmwuaXNCYXNlNjQgPyB7IGJ5dGVTaXplOiBiYXNlNjRCeXRlU2l6ZShkYXRhVXJsLmRhdGEpIH0gOiB7fSksXG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF0YVVybChcbiAgdmFsdWU6IHN0cmluZyxcbik6IHsgbWVkaWFUeXBlOiBzdHJpbmc7IGRhdGE6IHN0cmluZzsgaXNCYXNlNjQ6IGJvb2xlYW4gfSB8IG51bGwge1xuICBjb25zdCBtYXRjaCA9IC9eZGF0YTooW147LF0rKSgoPzo7W14sXSopKiksKC4qKSQvaXMuZXhlYyh2YWx1ZSk7XG4gIGlmICghbWF0Y2gpIHJldHVybiBudWxsO1xuICBjb25zdCBwYXJhbXMgPSBtYXRjaFsyXSEudG9Mb3dlckNhc2UoKS5zcGxpdChcIjtcIikuZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4geyBtZWRpYVR5cGU6IG1hdGNoWzFdISwgZGF0YTogbWF0Y2hbM10hLCBpc0Jhc2U2NDogcGFyYW1zLmluY2x1ZGVzKFwiYmFzZTY0XCIpIH07XG59XG5cbmZ1bmN0aW9uIGJhc2U2NEJ5dGVTaXplKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBub3JtYWxpemVkID0gL1xccy8udGVzdCh2YWx1ZSkgPyB2YWx1ZS5yZXBsYWNlKC9cXHMvZywgXCJcIikgOiB2YWx1ZTtcbiAgY29uc3QgcGFkZGluZyA9IG5vcm1hbGl6ZWQuZW5kc1dpdGgoXCI9PVwiKSA/IDIgOiBub3JtYWxpemVkLmVuZHNXaXRoKFwiPVwiKSA/IDEgOiAwO1xuICByZXR1cm4gTWF0aC5tYXgoTWF0aC5mbG9vcigobm9ybWFsaXplZC5sZW5ndGggKiAzKSAvIDQpIC0gcGFkZGluZywgMCk7XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBV0EsTUFBYSxxQ0FBcUM7Q0FDaEQsTUFBTTtDQUNOLGNBQWM7QUFDaEI7QUFFQSxTQUFTLG9CQUFvQixPQUF1QjtDQUNsRCxPQUFPLE1BQ0osUUFBUSxNQUFNLE9BQU8sQ0FBQyxDQUN0QixRQUFRLE1BQU0sUUFBUSxDQUFDLENBQ3ZCLFFBQVEsTUFBTSxNQUFNLENBQUMsQ0FDckIsUUFBUSxNQUFNLE1BQU07QUFDekI7QUFFQSxTQUFnQixxQkFBcUIsUUFBNkI7Q0FDaEUsT0FBTyxPQUFPLFFBQ1gsU0FBUyxTQUFTO0VBQ2pCLElBQUksS0FBSyxTQUFTLFFBQVEsT0FBTyxDQUFDLEtBQUssSUFBSTtFQUMzQyxJQUFJLEtBQUssU0FBUyxTQUFTLE9BQU8sQ0FBQyxzQkFBc0IsSUFBSSxDQUFDO0VBQzlELE9BQU8sQ0FBQztDQUNWLENBQUMsQ0FBQyxDQUNELFFBQVEsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQ2pDLEtBQUssSUFBSTtBQUNkO0FBRUEsU0FBZ0IsY0FBYyxRQUFpRTtDQUM3RixPQUFPLE9BQU8sUUFBUSxRQUFRLFNBQVMsS0FBSyxT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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { RequestLogModel } from "../request-log/request-log.model.js";
|
|
2
2
|
import { estimateImageGenerationCostMicroUsd, imageGenerationCostMethod } from "./qgrid-image-generation.js";
|
|
3
|
-
import { buildImageGenerationToolSteps, formatResponseForLog, getImageParts } from "./qgrid-response-format.js";
|
|
3
|
+
import { buildImageGenerationToolSteps, extractInputImagesForToolArgs, formatResponseForLog, getImageParts } from "./qgrid-response-format.js";
|
|
4
4
|
import { getLogger } from "@logtape/logtape";
|
|
5
5
|
//#region src/application/qgrid/qgrid-run-lifecycle.ts
|
|
6
6
|
const logger = getLogger(["qgrid", "run-lifecycle"]);
|
|
@@ -54,6 +54,7 @@ async function beforeQuery(args) {
|
|
|
54
54
|
await cleanupStaleRuns();
|
|
55
55
|
} else {
|
|
56
56
|
await cleanupStaleRuns();
|
|
57
|
+
const inputImages = extractInputImagesForToolArgs(args);
|
|
57
58
|
requestLogId = await RequestLogModel.createRun({
|
|
58
59
|
user_prompt: args.prompt,
|
|
59
60
|
system_prompt: args.system,
|
|
@@ -62,6 +63,7 @@ async function beforeQuery(args) {
|
|
|
62
63
|
service_tier: args.model?.startsWith("openai/") ? args.serviceTier : void 0,
|
|
63
64
|
project_name: args.projectName,
|
|
64
65
|
history: filterHistoryForStorage(args.history),
|
|
66
|
+
input_images: inputImages.length > 0 ? inputImages : void 0,
|
|
65
67
|
tools: args.tools?.length ? args.tools : void 0,
|
|
66
68
|
is_image_generation: args.imageGeneration === "auto" ? false : args.imageGeneration,
|
|
67
69
|
json_schema: args.jsonSchema ?? null
|
|
@@ -218,4 +220,4 @@ async function performStaleRunCleanup() {
|
|
|
218
220
|
//#endregion
|
|
219
221
|
export { afterQuery, beforeQuery, finishRunAborted, finishRunWithError };
|
|
220
222
|
|
|
221
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQtcnVuLWxpZmVjeWNsZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvcWdyaWQtcnVuLWxpZmVjeWNsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuXG5pbXBvcnQgeyBSZXF1ZXN0TG9nTW9kZWwgfSBmcm9tIFwiLi4vcmVxdWVzdC1sb2cvcmVxdWVzdC1sb2cubW9kZWxcIjtcbmltcG9ydCB7XG4gIGVzdGltYXRlSW1hZ2VHZW5lcmF0aW9uQ29zdE1pY3JvVXNkLFxuICBpbWFnZUdlbmVyYXRpb25Db3N0TWV0aG9kLFxufSBmcm9tIFwiLi9xZ3JpZC1pbWFnZS1nZW5lcmF0aW9uXCI7XG5pbXBvcnQge1xuICBidWlsZEltYWdlR2VuZXJhdGlvblRvb2xTdGVwcyxcbiAgZm9ybWF0UmVzcG9uc2VGb3JMb2csXG4gIGdldEltYWdlUGFydHMsXG59IGZyb20gXCIuL3FncmlkLXJlc3BvbnNlLWZvcm1hdFwiO1xuaW1wb3J0IHsgdHlwZSBRZ3JpZFJ1bkNvbnRleHQsIHR5cGUgUXVlcnlJbnB1dCwgdHlwZSBRdWVyeU91dHB1dCB9IGZyb20gXCIuL3FncmlkLnR5cGVzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJxZ3JpZFwiLCBcInJ1bi1saWZlY3ljbGVcIl0pO1xuY29uc3QgU1RBTEVfUlVOX1RIUkVTSE9MRF9NUyA9IDMwICogNjAgKiAxMDAwO1xuY29uc3QgU1RBTEVfQ0xFQU5VUF9JTlRFUlZBTF9NUyA9IDYwICogMTAwMDtcbmxldCBzdGFsZUNsZWFudXBJbkZsaWdodDogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZDtcbmxldCBsYXN0U3RhbGVDbGVhbnVwU3RhcnRlZEF0ID0gMDtcbmZ1bmN0aW9uIHdpdGhQcm92aWRlclByZWZpeChcbiAgcm91dGVNb2RlbDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBtb2RlbDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFtb2RlbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKG1vZGVsLmluY2x1ZGVzKFwiL1wiKSkgcmV0dXJuIG1vZGVsO1xuICBjb25zdCBzbGFzaCA9IHJvdXRlTW9kZWw/LmluZGV4T2YoXCIvXCIpID8/IC0xO1xuICBjb25zdCBwcm92aWRlciA9IHNsYXNoID4gMCA/IHJvdXRlTW9kZWw/LnNsaWNlKDAsIHNsYXNoKSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIHByb3ZpZGVyID8gYCR7cHJvdmlkZXJ9LyR7bW9kZWx9YCA6IG1vZGVsO1xufVxuXG4vKipcbiAqIGhpc3RvcnnripQg7JuQ67O4IOq3uOuMgOuhnCDsoIDsnqXtlZjquLDrs7Tri6TripQsIHJ1biDrtoTshJ3sl5Ag7ZWE7JqU7ZWcIHVzZXIvYXNzaXN0YW50IOygleuztOunjCDtlYTthLDrp4HtlbTshJwg7KCA7J6lXG4gKi9cbmZ1bmN0aW9uIGZpbHRlckhpc3RvcnlGb3JTdG9yYWdlKHJhd0hpc3Rvcnk6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHVua25vd24ge1xuICBpZiAoIXJhd0hpc3RvcnkpIHJldHVybiB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgY29uc3QgaXRlbXMgPSBKU09OLnBhcnNlKHJhd0hpc3RvcnkpIGFzIHVua25vd25bXTtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgaWYgKCFpdGVtIHx8IHR5cGVvZiBpdGVtICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCByZWNvcmQgPSBpdGVtIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgcmV0dXJuIHJlY29yZC50eXBlID09PSBcIm1lc3NhZ2VcIiAmJiAocmVjb3JkLnJvbGUgPT09IFwidXNlclwiIHx8IHJlY29yZC5yb2xlID09PSBcImFzc2lzdGFudFwiKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZmlsdGVyZWQubGVuZ3RoID4gMCA/IGZpbHRlcmVkIDogdW5kZWZpbmVkO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzUGFyc2VhYmxlSnNvbih0ZXh0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBKU09OLnBhcnNlKHRleHQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgUnVuTGlmZWN5Y2xlUmVzdWx0ID0ge1xuICBydW5Db250ZXh0PzogUWdyaWRSdW5Db250ZXh0O1xufTtcblxuLyoqXG4gKiBsb2dnZXItZW5hYmxlZCBxdWVyeS9zdHJlYW0g7J2R64u1IOyghO2bhOyXkCDtmLjstpwuXG4gKlxuICogMSkgYmVmb3JlUXVlcnk6IHJ1biDsg53shLEv6rOE7IaNICsgdG9vbCByZXN1bHQg7JmE66OMICsgc3RhbGUgdG9vbC13YWl0IGNsZWFudXBcbiAqIDIpIGFmdGVyUXVlcnk6IGdlbmVyYXRlIHN0ZXAgKyB0b29sLWNhbGwgc3RlcCArIGZpbmlzaC9rZWVwLW9wZW5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJlZm9yZVF1ZXJ5KGFyZ3M6IFF1ZXJ5SW5wdXQpOiBQcm9taXNlPHtcbiAgcmVxdWVzdExvZ0lkOiBudW1iZXI7XG4gIHN0ZXBJbmRleDogbnVtYmVyO1xufT4ge1xuICBsZXQgcmVxdWVzdExvZ0lkOiBudW1iZXI7XG4gIGxldCBzdGVwSW5kZXggPSAwO1xuXG4gIC8vIHJlcXVlc3RMb2dJZCDqsIAg7J6I7J2EIOuVjOunjCDquLDsobQgcnVuIOyXsOyepS4gdGhyZWFkQ29vcmQg66eMIOyeiOuKlCBjb252IOuKlCDsg4ggcnVuIOycvOuhnCDsi5zsnpEuXG4gIC8vIGNvbnRpbnVhdGlvbiDsnYAgY3JlYXRlUnVuIOydhCDqsbTrhIjrm7Drr4DroZwgcnVuIOydmCB0b29scyDripQg7LKrIOyKpO2FnSDsnqXssKnrtoTsnLzroZwg6rOg7KCV65Cc64ukIOKAlFxuICAvLyBBSSBTREsgcHJlcGFyZVN0ZXAvYWN0aXZlVG9vbHMg66GcIOyKpO2FneuniOuLpCDtiLTshYvsnbQg67CU64CM7Ja064+EIOuhnOq3uOyXkOuKlCDrsJjsmIHrkJjsp4Ag7JWK64qU64ukLlxuICBpZiAoYXJncy5ydW5Db250ZXh0Py5yZXF1ZXN0TG9nSWQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJlcXVlc3RMb2dJZCA9IGFyZ3MucnVuQ29udGV4dC5yZXF1ZXN0TG9nSWQ7XG4gICAgLy8gY2xlYW51cOqzvCDqsJnsnYAgREIgYWR2aXNvcnkgbG9ja+ydhCDsnqHqs6AgdG9vbCDqsrDqs7wg67CY7JiBICsg64uk7J2MIHN0ZXAg7JiI7JW97J2EIO2VnFxuICAgIC8vIHRyYW5zYWN0aW9u7JeQ7IScIOyymOumrO2VnOuLpC4g7Jes65+sIHFncmlkIO2UhOuhnOyEuOyKpCDsgqzsnbTsl5DshJzrj4Qgc3RhbGUgZXhwaXJ56rCAXG4gICAgLy8g64+E7LCpIOykkeyduCBmb2xsb3ctdXDsnYQgZXJyb3LroZwg642u7Ja07JOw7KeAIOuqu+2VnOuLpC5cbiAgICBzdGVwSW5kZXggPSBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuY29udGludWVUb29sUnVuKHJlcXVlc3RMb2dJZCwgYXJncy50b29sUmVzdWx0cyA/PyBbXSk7XG4gICAgYXdhaXQgY2xlYW51cFN0YWxlUnVucygpO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGNsZWFudXBTdGFsZVJ1bnMoKTtcbiAgICByZXF1ZXN0TG9nSWQgPSBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuY3JlYXRlUnVuKHtcbiAgICAgIHVzZXJfcHJvbXB0OiBhcmdzLnByb21wdCxcbiAgICAgIHN5c3RlbV9wcm9tcHQ6IGFyZ3Muc3lzdGVtLFxuICAgICAgcmVxdWVzdGVkX21vZGVsX25hbWU6IGFyZ3MubW9kZWwsXG4gICAgICBlZmZvcnQ6IGFyZ3MudGhpbmtpbmcgPT09IGZhbHNlID8gdW5kZWZpbmVkIDogYXJncy5lZmZvcnQsXG4gICAgICBzZXJ2aWNlX3RpZXI6IGFyZ3MubW9kZWw/LnN0YXJ0c1dpdGgoXCJvcGVuYWkvXCIpID8gYXJncy5zZXJ2aWNlVGllciA6IHVuZGVmaW5lZCxcbiAgICAgIHByb2plY3RfbmFtZTogYXJncy5wcm9qZWN0TmFtZSxcbiAgICAgIGhpc3Rvcnk6IGZpbHRlckhpc3RvcnlGb3JTdG9yYWdlKGFyZ3MuaGlzdG9yeSksXG4gICAgICB0b29sczogYXJncy50b29scz8ubGVuZ3RoID8gYXJncy50b29scyA6IHVuZGVmaW5lZCxcbiAgICAgIGlzX2ltYWdlX2dlbmVyYXRpb246IGFyZ3MuaW1hZ2VHZW5lcmF0aW9uID09PSBcImF1dG9cIiA/IGZhbHNlIDogYXJncy5pbWFnZUdlbmVyYXRpb24sXG4gICAgICBqc29uX3NjaGVtYTogYXJncy5qc29uU2NoZW1hID8/IG51bGwsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4geyByZXF1ZXN0TG9nSWQsIHN0ZXBJbmRleCB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBhcHBlbmRHZW5lcmF0ZVN0ZXAoXG4gIHJlcXVlc3RMb2dJZDogbnVtYmVyLFxuICBzdGVwSW5kZXg6IG51bWJlcixcbiAgYXJnczogUXVlcnlJbnB1dCxcbiAgcmVzdWx0OiBRdWVyeU91dHB1dCxcbikge1xuICAvLyBwcm92aWRlcuqwgCBjYW5vbmljYWwgbW9kZWzsnYQg64+M66Ck7KSY64+EIOyalOyyrSByb3V0ZSDsnpDssrQoWzFtXSDrk7Ep64qUIOuztOyhtO2VnOuLpC5cbiAgY29uc3QgcmVxdWVzdGVkTW9kZWxOYW1lID0gd2l0aFByb3ZpZGVyUHJlZml4KFxuICAgIGFyZ3MubW9kZWwsXG4gICAgYXJncy5tb2RlbCA/PyByZXN1bHQucmVxdWVzdGVkTW9kZWwgPz8gcmVzdWx0Lm1vZGVsLFxuICApO1xuICBjb25zdCBzZXJ2ZWRNb2RlbE5hbWUgPSB3aXRoUHJvdmlkZXJQcmVmaXgoYXJncy5tb2RlbCwgcmVzdWx0Lm1vZGVsKTtcblxuICAvLyBnZW5lcmF0ZSBzdGVwIOq4sOuhnVxuICBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuYXBwZW5kU3RlcChyZXF1ZXN0TG9nSWQsIHtcbiAgICBzdGVwX2luZGV4OiBzdGVwSW5kZXgsXG4gICAgdHlwZTogXCJnZW5lcmF0ZVwiLFxuICAgIG1vZGVsX25hbWU6IHNlcnZlZE1vZGVsTmFtZSxcbiAgICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogcmVxdWVzdGVkTW9kZWxOYW1lLFxuICAgIGZhbGxiYWNrX2NvdW50OiByZXN1bHQubW9kZWxGYWxsYmFja3M/Lmxlbmd0aCA/PyAwLFxuICAgIGlucHV0X3Rva2VuczogcmVzdWx0LnVzYWdlLmlucHV0X3Rva2VucyxcbiAgICBvdXRwdXRfdG9rZW5zOiByZXN1bHQudXNhZ2Uub3V0cHV0X3Rva2VucyxcbiAgICBjYWNoZV9yZWFkX3Rva2VuczogcmVzdWx0LnVzYWdlLmNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zLFxuICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogcmVzdWx0LnVzYWdlLmNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyxcbiAgICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IHJlc3VsdC51c2FnZS5jYWNoZV9jcmVhdGlvbl81bV9pbnB1dF90b2tlbnMsXG4gICAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zOiByZXN1bHQudXNhZ2UuY2FjaGVfY3JlYXRpb25fMWhfaW5wdXRfdG9rZW5zLFxuICAgIGNvc3RfdXNkOiBNYXRoLnJvdW5kKHJlc3VsdC5jb3N0VXNkICogMV8wMDBfMDAwKSxcbiAgICBjb3N0X3NvdXJjZTogcmVzdWx0LmNvc3RTb3VyY2UsXG4gICAgZHVyYXRpb25fbXM6IHJlc3VsdC5kdXJhdGlvbk1zLFxuICAgIHR0ZnRfbXM6IHJlc3VsdC50dGZ0TXMsXG4gICAgZmluaXNoX3JlYXNvbjogcmVzdWx0LmZpbmlzaFJlYXNvbixcbiAgfSk7XG4gIHJldHVybiB7IHJlcXVlc3RlZE1vZGVsTmFtZSwgc2VydmVkTW9kZWxOYW1lIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZnRlclF1ZXJ5KFxuICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgc3RlcEluZGV4OiBudW1iZXIsXG4gIGFyZ3M6IFF1ZXJ5SW5wdXQsXG4gIHJlc3VsdDogUXVlcnlPdXRwdXQsXG4pOiBQcm9taXNlPFJ1bkxpZmVjeWNsZVJlc3VsdD4ge1xuICBjb25zdCB7IHJlcXVlc3RlZE1vZGVsTmFtZSwgc2VydmVkTW9kZWxOYW1lIH0gPSBhd2FpdCBhcHBlbmRHZW5lcmF0ZVN0ZXAoXG4gICAgcmVxdWVzdExvZ0lkLFxuICAgIHN0ZXBJbmRleCxcbiAgICBhcmdzLFxuICAgIHJlc3VsdCxcbiAgKTtcblxuICBjb25zdCBpbWFnZVBhcnRzID0gZ2V0SW1hZ2VQYXJ0cyhyZXN1bHQpO1xuICBjb25zdCBpbWFnZUNvc3RNaWNyb1VzZCA9IGVzdGltYXRlSW1hZ2VHZW5lcmF0aW9uQ29zdE1pY3JvVXNkKFxuICAgIHJlc3VsdCxcbiAgICBhcmdzLmltYWdlR2VuZXJhdGlvbk9wdGlvbnMsXG4gICk7XG4gIGZvciAoY29uc3Qgc3RlcCBvZiBidWlsZEltYWdlR2VuZXJhdGlvblRvb2xTdGVwcyhhcmdzLCBpbWFnZVBhcnRzLCBzdGVwSW5kZXgpKSB7XG4gICAgYXdhaXQgUmVxdWVzdExvZ01vZGVsLmFwcGVuZFN0ZXAocmVxdWVzdExvZ0lkLCBzdGVwKTtcbiAgfVxuXG4gIGlmIChyZXN1bHQuZmluaXNoUmVhc29uID09PSBcInRvb2wtY2FsbHNcIikge1xuICAgIC8vIHRvb2wtY2FsbCBzdGVw7J2EIOymieyLnCDquLDroZ3tlZjqs6AsIOuLpOydjCBmb2xsb3ctdXDsnbQg6rCZ7J2AIHJvd+yXkCDqsrDqs7zrpbwg7LGE7Jq064ukLlxuICAgIGNvbnN0IHRvb2xDYWxscyA9IHJlc3VsdC5jb250ZW50LmZpbHRlcigoYykgPT4gYy50eXBlID09PSBcInRvb2wtY2FsbFwiKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvb2xDYWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdGMgPSB0b29sQ2FsbHNbaV0hO1xuICAgICAgaWYgKHRjLnR5cGUgIT09IFwidG9vbC1jYWxsXCIpIGNvbnRpbnVlO1xuICAgICAgYXdhaXQgUmVxdWVzdExvZ01vZGVsLmFwcGVuZFN0ZXAocmVxdWVzdExvZ0lkLCB7XG4gICAgICAgIHN0ZXBfaW5kZXg6IHN0ZXBJbmRleCxcbiAgICAgICAgdHlwZTogXCJ0b29sX2NhbGxcIixcbiAgICAgICAgdG9vbF9jYWxsX2luZGV4OiBpbWFnZVBhcnRzLmxlbmd0aCArIGksXG4gICAgICAgIHRvb2xfY2FsbF9pZDogdGMudG9vbENhbGxJZCxcbiAgICAgICAgdG9vbF9uYW1lOiB0Yy50b29sTmFtZSxcbiAgICAgICAgdG9vbF9hcmdzOiB0Yy5pbnB1dCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7IHJ1bkNvbnRleHQ6IHsgcmVxdWVzdExvZ0lkIH0gfTtcbiAgfVxuXG4gIC8vIGZpbmlzaFJlYXNvbiA9PT0gXCJzdG9wXCIg4oaSIHJ1biDsooXro4wgKOyghOyytCBzdGVwIHVzYWdlIO2VqeyCsClcbiAgY29uc3QgYWdnID0gYXdhaXQgUmVxdWVzdExvZ01vZGVsLmFnZ3JlZ2F0ZVN0ZXBVc2FnZShyZXF1ZXN0TG9nSWQpO1xuICBjb25zdCByZXNwb25zZVRleHQgPSBmb3JtYXRSZXNwb25zZUZvckxvZyhyZXN1bHQpO1xuICBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuZmluaXNoUnVuKHJlcXVlc3RMb2dJZCwge1xuICAgIHN0YXR1czogXCJzdWNjZWVkZWRcIixcbiAgICByZXNwb25zZTogcmVzcG9uc2VUZXh0LFxuICAgIC8vIHN0cnVjdHVyZWQg7JqU7LKt66eMIO2MkOygle2VnOuLpC4gZGV0aSDrsLDsuZjsnZggYnJva2VuIEpTT04g66WY66W8IOuqqeuhneyXkOyEnCDrsJTroZxcbiAgICAvLyDqtazrs4TtlZjquLAg7JyE7ZWcIOq4sOuhneydtOupsCwg67mEc3RydWN0dXJlZCDsmpTssq3snYAgbnVsbCDroZwg64Ko64qU64ukLlxuICAgIHJlc3BvbnNlX2pzb25fb2s6IGFyZ3MuanNvblNjaGVtYSA/IGlzUGFyc2VhYmxlSnNvbihyZXNwb25zZVRleHQpIDogbnVsbCxcbiAgICB0b2tlbl9uYW1lOiByZXN1bHQudG9rZW5OYW1lLFxuICAgIGlucHV0X3Rva2VuczogYWdnLmlucHV0X3Rva2VucyxcbiAgICBvdXRwdXRfdG9rZW5zOiBhZ2cub3V0cHV0X3Rva2VucyxcbiAgICBjYWNoZV9yZWFkX3Rva2VuczogYWdnLmNhY2hlX3JlYWRfdG9rZW5zLFxuICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogYWdnLmNhY2hlX2NyZWF0aW9uX3Rva2VucyxcbiAgICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IGFnZy5jYWNoZV9jcmVhdGlvbl81bV90b2tlbnMsXG4gICAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zOiBhZ2cuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zLFxuICAgIGR1cmF0aW9uX21zOiBhZ2cuZHVyYXRpb25fbXMsXG4gICAgLy8gbXVsdGktc3RlcCBydW4g67aA66qo7J2YIOuqqOuNuOydgCDstZzsooUgdHVybuydhCDshJzruZntlZwg66qo64247J2064ukLlxuICAgIHJlcXVlc3RlZF9tb2RlbF9uYW1lOiByZXF1ZXN0ZWRNb2RlbE5hbWUsXG4gICAgbW9kZWxfbmFtZTogc2VydmVkTW9kZWxOYW1lLFxuICAgIGZhbGxiYWNrX2NvdW50OiBhZ2cuZmFsbGJhY2tfY291bnQsXG4gICAgc2VydmljZV90aWVyOiBhcmdzLm1vZGVsPy5zdGFydHNXaXRoKFwib3BlbmFpL1wiKSA/IChhcmdzLnNlcnZpY2VUaWVyID8/IG51bGwpIDogbnVsbCxcbiAgICBjb3N0X3VzZDogYWdnLmNvc3RfdXNkLFxuICAgIGNvc3Rfc291cmNlOiBhZ2cuY29zdF9zb3VyY2UsXG4gICAgaW1hZ2VfY29zdF91c2Q6IGltYWdlQ29zdE1pY3JvVXNkLFxuICAgIC4uLihpbWFnZVBhcnRzLmxlbmd0aCA+IDAgPyB7IGlzX2ltYWdlX2dlbmVyYXRpb246IHRydWUgfSA6IHt9KSxcbiAgICBpbWFnZV9jb3N0X21ldGhvZDpcbiAgICAgIGltYWdlQ29zdE1pY3JvVXNkICE9PSBudWxsXG4gICAgICAgID8gaW1hZ2VHZW5lcmF0aW9uQ29zdE1ldGhvZChhcmdzLmltYWdlR2VuZXJhdGlvbk9wdGlvbnMsIHJlc3VsdClcbiAgICAgICAgOiBudWxsLFxuICAgIGhpc3Rvcnk6IGZpbHRlckhpc3RvcnlGb3JTdG9yYWdlKGFyZ3MuaGlzdG9yeSksXG4gIH0pO1xuXG4gIHJldHVybiB7fTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmlzaFJ1bldpdGhFcnJvcihcbiAgcmVxdWVzdExvZ0lkOiBudW1iZXIsXG4gIGVycm9yTWVzc2FnZTogc3RyaW5nLFxuICBhcmdzPzogUXVlcnlJbnB1dCxcbiAgY29tcGxldGVkU3RlcD86IHsgc3RlcEluZGV4OiBudW1iZXI7IHJlc3VsdDogUXVlcnlPdXRwdXQgfSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBmaW5pc2hUZXJtaW5hbFJ1bihyZXF1ZXN0TG9nSWQsIFwiZXJyb3JcIiwgZXJyb3JNZXNzYWdlLCBhcmdzLCBjb21wbGV0ZWRTdGVwKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmlzaFJ1bkFib3J0ZWQoXG4gIHJlcXVlc3RMb2dJZDogbnVtYmVyLFxuICBhcmdzPzogUXVlcnlJbnB1dCxcbiAgY29tcGxldGVkU3RlcD86IHsgc3RlcEluZGV4OiBudW1iZXI7IHJlc3VsdDogUXVlcnlPdXRwdXQgfSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBmaW5pc2hUZXJtaW5hbFJ1bihyZXF1ZXN0TG9nSWQsIFwiYWJvcnRlZFwiLCBcImNsaWVudCBkaXNjb25uZWN0ZWRcIiwgYXJncywgY29tcGxldGVkU3RlcCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpbmlzaFRlcm1pbmFsUnVuKFxuICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgc3RhdHVzOiBcImVycm9yXCIgfCBcImFib3J0ZWRcIixcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmcsXG4gIGFyZ3M/OiBRdWVyeUlucHV0LFxuICBjb21wbGV0ZWRTdGVwPzogeyBzdGVwSW5kZXg6IG51bWJlcjsgcmVzdWx0OiBRdWVyeU91dHB1dCB9LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgaWYgKGNvbXBsZXRlZFN0ZXAgJiYgYXJncykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYXBwZW5kR2VuZXJhdGVTdGVwKHJlcXVlc3RMb2dJZCwgY29tcGxldGVkU3RlcC5zdGVwSW5kZXgsIGFyZ3MsIGNvbXBsZXRlZFN0ZXAucmVzdWx0KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICAgIGBhcHBlbmRHZW5lcmF0ZVN0ZXAgZmFpbGVkIHdoaWxlIGZpbmlzaGluZyAke3N0YXR1c306ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGFnZ3JlZ2F0ZTogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBSZXF1ZXN0TG9nTW9kZWwuYWdncmVnYXRlU3RlcFVzYWdlPj4gfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGFnZ3JlZ2F0ZSA9IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5hZ2dyZWdhdGVTdGVwVXNhZ2UocmVxdWVzdExvZ0lkKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYGFnZ3JlZ2F0ZVN0ZXBVc2FnZSBmYWlsZWQgd2hpbGUgZmluaXNoaW5nICR7c3RhdHVzfTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICB9XG5cbiAgICBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuZmluaXNoUnVuKHJlcXVlc3RMb2dJZCwge1xuICAgICAgc3RhdHVzLFxuICAgICAgZXJyb3JfbWVzc2FnZTogZXJyb3JNZXNzYWdlLFxuICAgICAgaGlzdG9yeTogYXJncyA/IGZpbHRlckhpc3RvcnlGb3JTdG9yYWdlKGFyZ3MuaGlzdG9yeSkgOiB1bmRlZmluZWQsXG4gICAgICAuLi4oY29tcGxldGVkU3RlcFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHRva2VuX25hbWU6IGNvbXBsZXRlZFN0ZXAucmVzdWx0LnRva2VuTmFtZSxcbiAgICAgICAgICAgIHJlcXVlc3RlZF9tb2RlbF9uYW1lOiB3aXRoUHJvdmlkZXJQcmVmaXgoXG4gICAgICAgICAgICAgIGFyZ3M/Lm1vZGVsLFxuICAgICAgICAgICAgICBhcmdzPy5tb2RlbCA/PyBjb21wbGV0ZWRTdGVwLnJlc3VsdC5yZXF1ZXN0ZWRNb2RlbCA/PyBjb21wbGV0ZWRTdGVwLnJlc3VsdC5tb2RlbCxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBtb2RlbF9uYW1lOiB3aXRoUHJvdmlkZXJQcmVmaXgoYXJncz8ubW9kZWwsIGNvbXBsZXRlZFN0ZXAucmVzdWx0Lm1vZGVsKSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgICAgLi4uKGFnZ3JlZ2F0ZVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGlucHV0X3Rva2VuczogYWdncmVnYXRlLmlucHV0X3Rva2VucyxcbiAgICAgICAgICAgIG91dHB1dF90b2tlbnM6IGFnZ3JlZ2F0ZS5vdXRwdXRfdG9rZW5zLFxuICAgICAgICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9yZWFkX3Rva2VucyxcbiAgICAgICAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogYWdncmVnYXRlLmNhY2hlX2NyZWF0aW9uX3Rva2VucyxcbiAgICAgICAgICAgIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2VuczogYWdncmVnYXRlLmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyxcbiAgICAgICAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2VuczogYWdncmVnYXRlLmNhY2hlX2NyZWF0aW9uXzFoX3Rva2VucyxcbiAgICAgICAgICAgIGR1cmF0aW9uX21zOiBhZ2dyZWdhdGUuZHVyYXRpb25fbXMsXG4gICAgICAgICAgICBmYWxsYmFja19jb3VudDogYWdncmVnYXRlLmZhbGxiYWNrX2NvdW50LFxuICAgICAgICAgICAgY29zdF91c2Q6IGFnZ3JlZ2F0ZS5jb3N0X3VzZCxcbiAgICAgICAgICAgIGNvc3Rfc291cmNlOiBhZ2dyZWdhdGUuY29zdF9zb3VyY2UsXG4gICAgICAgICAgfVxuICAgICAgICA6IHt9KSxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5lcnJvcihgZmluaXNoVGVybWluYWxSdW4oJHtzdGF0dXN9KSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY2xlYW51cFN0YWxlUnVucygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHN0YWxlQ2xlYW51cEluRmxpZ2h0KSB7XG4gICAgYXdhaXQgc3RhbGVDbGVhbnVwSW5GbGlnaHQ7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgaWYgKG5vdyAtIGxhc3RTdGFsZUNsZWFudXBTdGFydGVkQXQgPCBTVEFMRV9DTEVBTlVQX0lOVEVSVkFMX01TKSByZXR1cm47XG4gIGxhc3RTdGFsZUNsZWFudXBTdGFydGVkQXQgPSBub3c7XG5cbiAgY29uc3QgY2xlYW51cCA9IHBlcmZvcm1TdGFsZVJ1bkNsZWFudXAoKTtcbiAgc3RhbGVDbGVhbnVwSW5GbGlnaHQgPSBjbGVhbnVwO1xuICB0cnkge1xuICAgIGF3YWl0IGNsZWFudXA7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKHN0YWxlQ2xlYW51cEluRmxpZ2h0ID09PSBjbGVhbnVwKSBzdGFsZUNsZWFudXBJbkZsaWdodCA9IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBwZXJmb3JtU3RhbGVSdW5DbGVhbnVwKCk6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IFwidG9vbC1jYWxsIHJ1bjogbm8gZm9sbG93LXVwIHdpdGhpbiAzMCBtaW51dGVzXCI7XG4gICAgY29uc3Qgc3RhbGVJZHMgPSBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuZXhwaXJlU3RhbGVUb29sV2FpdGluZ1J1bnMoXG4gICAgICBTVEFMRV9SVU5fVEhSRVNIT0xEX01TLFxuICAgICAgZXJyb3JNZXNzYWdlLFxuICAgICk7XG4gICAgY29uc3QgY2xlYW5lZENvdW50ID0gc3RhbGVJZHMubGVuZ3RoO1xuICAgIGlmIChjbGVhbmVkQ291bnQgPiAwKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgY2xlYW5lZCB1cCAke2NsZWFuZWRDb3VudH0gc3RhbGUgcnVubmluZyByZXF1ZXN0IGxvZ3NgKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZXJyb3IoYHN0YWxlIGNsZWFudXAgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBY0EsTUFBTSxTQUFTLFVBQVUsQ0FBQyxTQUFTLGVBQWUsQ0FBQztBQUNuRCxNQUFNLHlCQUF5QixPQUFVO0FBQ3pDLE1BQU0sNEJBQTRCLEtBQUs7QUFDdkMsSUFBSTtBQUNKLElBQUksNEJBQTRCO0FBQ2hDLFNBQVMsbUJBQ1AsWUFDQSxPQUNvQjtDQUNwQixJQUFJLENBQUMsT0FBTyxPQUFPO0NBQ25CLElBQUksTUFBTSxTQUFTLEdBQUcsR0FBRyxPQUFPO0NBQ2hDLE1BQU0sUUFBUSxZQUFZLFFBQVEsR0FBRyxLQUFLO0NBQzFDLE1BQU0sV0FBVyxRQUFRLElBQUksWUFBWSxNQUFNLEdBQUcsS0FBSyxJQUFJO0NBQzNELE9BQU8sV0FBVyxHQUFHLFNBQVMsR0FBRyxVQUFVO0FBQzdDOzs7O0FBS0EsU0FBUyx3QkFBd0IsWUFBeUM7Q0FDeEUsSUFBSSxDQUFDLFlBQVksT0FBTztDQUN4QixJQUFJO0VBRUYsTUFBTSxX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
|
|
223
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQtcnVuLWxpZmVjeWNsZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvcWdyaWQtcnVuLWxpZmVjeWNsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuXG5pbXBvcnQgeyBSZXF1ZXN0TG9nTW9kZWwgfSBmcm9tIFwiLi4vcmVxdWVzdC1sb2cvcmVxdWVzdC1sb2cubW9kZWxcIjtcbmltcG9ydCB7XG4gIGVzdGltYXRlSW1hZ2VHZW5lcmF0aW9uQ29zdE1pY3JvVXNkLFxuICBpbWFnZUdlbmVyYXRpb25Db3N0TWV0aG9kLFxufSBmcm9tIFwiLi9xZ3JpZC1pbWFnZS1nZW5lcmF0aW9uXCI7XG5pbXBvcnQge1xuICBidWlsZEltYWdlR2VuZXJhdGlvblRvb2xTdGVwcyxcbiAgZXh0cmFjdElucHV0SW1hZ2VzRm9yVG9vbEFyZ3MsXG4gIGZvcm1hdFJlc3BvbnNlRm9yTG9nLFxuICBnZXRJbWFnZVBhcnRzLFxufSBmcm9tIFwiLi9xZ3JpZC1yZXNwb25zZS1mb3JtYXRcIjtcbmltcG9ydCB7IHR5cGUgUWdyaWRSdW5Db250ZXh0LCB0eXBlIFF1ZXJ5SW5wdXQsIHR5cGUgUXVlcnlPdXRwdXQgfSBmcm9tIFwiLi9xZ3JpZC50eXBlc1wiO1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJydW4tbGlmZWN5Y2xlXCJdKTtcbmNvbnN0IFNUQUxFX1JVTl9USFJFU0hPTERfTVMgPSAzMCAqIDYwICogMTAwMDtcbmNvbnN0IFNUQUxFX0NMRUFOVVBfSU5URVJWQUxfTVMgPSA2MCAqIDEwMDA7XG5sZXQgc3RhbGVDbGVhbnVwSW5GbGlnaHQ6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQ7XG5sZXQgbGFzdFN0YWxlQ2xlYW51cFN0YXJ0ZWRBdCA9IDA7XG5mdW5jdGlvbiB3aXRoUHJvdmlkZXJQcmVmaXgoXG4gIHJvdXRlTW9kZWw6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgbW9kZWw6IHN0cmluZyB8IHVuZGVmaW5lZCxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghbW9kZWwpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChtb2RlbC5pbmNsdWRlcyhcIi9cIikpIHJldHVybiBtb2RlbDtcbiAgY29uc3Qgc2xhc2ggPSByb3V0ZU1vZGVsPy5pbmRleE9mKFwiL1wiKSA/PyAtMTtcbiAgY29uc3QgcHJvdmlkZXIgPSBzbGFzaCA+IDAgPyByb3V0ZU1vZGVsPy5zbGljZSgwLCBzbGFzaCkgOiB1bmRlZmluZWQ7XG4gIHJldHVybiBwcm92aWRlciA/IGAke3Byb3ZpZGVyfS8ke21vZGVsfWAgOiBtb2RlbDtcbn1cblxuLyoqXG4gKiBoaXN0b3J564qUIOybkOuzuCDqt7jrjIDroZwg7KCA7J6l7ZWY6riw67O064uk64qULCBydW4g67aE7ISd7JeQIO2VhOyalO2VnCB1c2VyL2Fzc2lzdGFudCDsoJXrs7Trp4wg7ZWE7YSw66eB7ZW07IScIOyggOyepVxuICovXG5mdW5jdGlvbiBmaWx0ZXJIaXN0b3J5Rm9yU3RvcmFnZShyYXdIaXN0b3J5OiBzdHJpbmcgfCB1bmRlZmluZWQpOiB1bmtub3duIHtcbiAgaWYgKCFyYXdIaXN0b3J5KSByZXR1cm4gdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIGNvbnN0IGl0ZW1zID0gSlNPTi5wYXJzZShyYXdIaXN0b3J5KSBhcyB1bmtub3duW107XG4gICAgY29uc3QgZmlsdGVyZWQgPSBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgIGlmICghaXRlbSB8fCB0eXBlb2YgaXRlbSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgcmVjb3JkID0gaXRlbSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIHJldHVybiByZWNvcmQudHlwZSA9PT0gXCJtZXNzYWdlXCIgJiYgKHJlY29yZC5yb2xlID09PSBcInVzZXJcIiB8fCByZWNvcmQucm9sZSA9PT0gXCJhc3Npc3RhbnRcIik7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbHRlcmVkLmxlbmd0aCA+IDAgPyBmaWx0ZXJlZCA6IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1BhcnNlYWJsZUpzb24odGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFJ1bkxpZmVjeWNsZVJlc3VsdCA9IHtcbiAgcnVuQ29udGV4dD86IFFncmlkUnVuQ29udGV4dDtcbn07XG5cbi8qKlxuICogbG9nZ2VyLWVuYWJsZWQgcXVlcnkvc3RyZWFtIOydkeuLtSDsoITtm4Tsl5Ag7Zi47LacLlxuICpcbiAqIDEpIGJlZm9yZVF1ZXJ5OiBydW4g7IOd7ISxL+qzhOyGjSArIHRvb2wgcmVzdWx0IOyZhOujjCArIHN0YWxlIHRvb2wtd2FpdCBjbGVhbnVwXG4gKiAyKSBhZnRlclF1ZXJ5OiBnZW5lcmF0ZSBzdGVwICsgdG9vbC1jYWxsIHN0ZXAgKyBmaW5pc2gva2VlcC1vcGVuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBiZWZvcmVRdWVyeShhcmdzOiBRdWVyeUlucHV0KTogUHJvbWlzZTx7XG4gIHJlcXVlc3RMb2dJZDogbnVtYmVyO1xuICBzdGVwSW5kZXg6IG51bWJlcjtcbn0+IHtcbiAgbGV0IHJlcXVlc3RMb2dJZDogbnVtYmVyO1xuICBsZXQgc3RlcEluZGV4ID0gMDtcblxuICAvLyByZXF1ZXN0TG9nSWQg6rCAIOyeiOydhCDrlYzrp4wg6riw7KG0IHJ1biDsl7DsnqUuIHRocmVhZENvb3JkIOunjCDsnojripQgY29udiDripQg7IOIIHJ1biDsnLzroZwg7Iuc7J6RLlxuICAvLyBjb250aW51YXRpb24g7J2AIGNyZWF0ZVJ1biDsnYQg6rG064SI65uw66+A66GcIHJ1biDsnZggdG9vbHMg64qUIOyyqyDsiqTthZ0g7J6l7LCp67aE7Jy866GcIOqzoOygleuQnOuLpCDigJRcbiAgLy8gQUkgU0RLIHByZXBhcmVTdGVwL2FjdGl2ZVRvb2xzIOuhnCDsiqTthZ3rp4jri6Qg7Yi07IWL7J20IOuwlOuAjOyWtOuPhCDroZzqt7jsl5DripQg67CY7JiB65CY7KeAIOyViuuKlOuLpC5cbiAgaWYgKGFyZ3MucnVuQ29udGV4dD8ucmVxdWVzdExvZ0lkICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXF1ZXN0TG9nSWQgPSBhcmdzLnJ1bkNvbnRleHQucmVxdWVzdExvZ0lkO1xuICAgIC8vIGNsZWFudXDqs7wg6rCZ7J2AIERCIGFkdmlzb3J5IGxvY2vsnYQg7J6h6rOgIHRvb2wg6rKw6rO8IOuwmOyYgSArIOuLpOydjCBzdGVwIOyYiOyVveydhCDtlZxcbiAgICAvLyB0cmFuc2FjdGlvbuyXkOyEnCDsspjrpqztlZzri6QuIOyXrOufrCBxZ3JpZCDtlITroZzshLjsiqQg7IKs7J207JeQ7ISc64+EIHN0YWxlIGV4cGlyeeqwgFxuICAgIC8vIOuPhOywqSDspJHsnbggZm9sbG93LXVw7J2EIGVycm9y66GcIOuNruyWtOyTsOyngCDrqrvtlZzri6QuXG4gICAgc3RlcEluZGV4ID0gYXdhaXQgUmVxdWVzdExvZ01vZGVsLmNvbnRpbnVlVG9vbFJ1bihyZXF1ZXN0TG9nSWQsIGFyZ3MudG9vbFJlc3VsdHMgPz8gW10pO1xuICAgIGF3YWl0IGNsZWFudXBTdGFsZVJ1bnMoKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBjbGVhbnVwU3RhbGVSdW5zKCk7XG4gICAgY29uc3QgaW5wdXRJbWFnZXMgPSBleHRyYWN0SW5wdXRJbWFnZXNGb3JUb29sQXJncyhhcmdzKTtcbiAgICByZXF1ZXN0TG9nSWQgPSBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuY3JlYXRlUnVuKHtcbiAgICAgIHVzZXJfcHJvbXB0OiBhcmdzLnByb21wdCxcbiAgICAgIHN5c3RlbV9wcm9tcHQ6IGFyZ3Muc3lzdGVtLFxuICAgICAgcmVxdWVzdGVkX21vZGVsX25hbWU6IGFyZ3MubW9kZWwsXG4gICAgICBlZmZvcnQ6IGFyZ3MudGhpbmtpbmcgPT09IGZhbHNlID8gdW5kZWZpbmVkIDogYXJncy5lZmZvcnQsXG4gICAgICBzZXJ2aWNlX3RpZXI6IGFyZ3MubW9kZWw/LnN0YXJ0c1dpdGgoXCJvcGVuYWkvXCIpID8gYXJncy5zZXJ2aWNlVGllciA6IHVuZGVmaW5lZCxcbiAgICAgIHByb2plY3RfbmFtZTogYXJncy5wcm9qZWN0TmFtZSxcbiAgICAgIGhpc3Rvcnk6IGZpbHRlckhpc3RvcnlGb3JTdG9yYWdlKGFyZ3MuaGlzdG9yeSksXG4gICAgICBpbnB1dF9pbWFnZXM6IGlucHV0SW1hZ2VzLmxlbmd0aCA+IDAgPyBpbnB1dEltYWdlcyA6IHVuZGVmaW5lZCxcbiAgICAgIHRvb2xzOiBhcmdzLnRvb2xzPy5sZW5ndGggPyBhcmdzLnRvb2xzIDogdW5kZWZpbmVkLFxuICAgICAgaXNfaW1hZ2VfZ2VuZXJhdGlvbjogYXJncy5pbWFnZUdlbmVyYXRpb24gPT09IFwiYXV0b1wiID8gZmFsc2UgOiBhcmdzLmltYWdlR2VuZXJhdGlvbixcbiAgICAgIGpzb25fc2NoZW1hOiBhcmdzLmpzb25TY2hlbWEgPz8gbnVsbCxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB7IHJlcXVlc3RMb2dJZCwgc3RlcEluZGV4IH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFwcGVuZEdlbmVyYXRlU3RlcChcbiAgcmVxdWVzdExvZ0lkOiBudW1iZXIsXG4gIHN0ZXBJbmRleDogbnVtYmVyLFxuICBhcmdzOiBRdWVyeUlucHV0LFxuICByZXN1bHQ6IFF1ZXJ5T3V0cHV0LFxuKSB7XG4gIC8vIHByb3ZpZGVy6rCAIGNhbm9uaWNhbCBtb2RlbOydhCDrj4zroKTspJjrj4Qg7JqU7LKtIHJvdXRlIOyekOyytChbMW1dIOuTsSnripQg67O07KG07ZWc64ukLlxuICBjb25zdCByZXF1ZXN0ZWRNb2RlbE5hbWUgPSB3aXRoUHJvdmlkZXJQcmVmaXgoXG4gICAgYXJncy5tb2RlbCxcbiAgICBhcmdzLm1vZGVsID8/IHJlc3VsdC5yZXF1ZXN0ZWRNb2RlbCA/PyByZXN1bHQubW9kZWwsXG4gICk7XG4gIGNvbnN0IHNlcnZlZE1vZGVsTmFtZSA9IHdpdGhQcm92aWRlclByZWZpeChhcmdzLm1vZGVsLCByZXN1bHQubW9kZWwpO1xuXG4gIC8vIGdlbmVyYXRlIHN0ZXAg6riw66GdXG4gIGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5hcHBlbmRTdGVwKHJlcXVlc3RMb2dJZCwge1xuICAgIHN0ZXBfaW5kZXg6IHN0ZXBJbmRleCxcbiAgICB0eXBlOiBcImdlbmVyYXRlXCIsXG4gICAgbW9kZWxfbmFtZTogc2VydmVkTW9kZWxOYW1lLFxuICAgIHJlcXVlc3RlZF9tb2RlbF9uYW1lOiByZXF1ZXN0ZWRNb2RlbE5hbWUsXG4gICAgZmFsbGJhY2tfY291bnQ6IHJlc3VsdC5tb2RlbEZhbGxiYWNrcz8ubGVuZ3RoID8/IDAsXG4gICAgaW5wdXRfdG9rZW5zOiByZXN1bHQudXNhZ2UuaW5wdXRfdG9rZW5zLFxuICAgIG91dHB1dF90b2tlbnM6IHJlc3VsdC51c2FnZS5vdXRwdXRfdG9rZW5zLFxuICAgIGNhY2hlX3JlYWRfdG9rZW5zOiByZXN1bHQudXNhZ2UuY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMsXG4gICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiByZXN1bHQudXNhZ2UuY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zLFxuICAgIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2VuczogcmVzdWx0LnVzYWdlLmNhY2hlX2NyZWF0aW9uXzVtX2lucHV0X3Rva2VucyxcbiAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IHJlc3VsdC51c2FnZS5jYWNoZV9jcmVhdGlvbl8xaF9pbnB1dF90b2tlbnMsXG4gICAgY29zdF91c2Q6IE1hdGgucm91bmQocmVzdWx0LmNvc3RVc2QgKiAxXzAwMF8wMDApLFxuICAgIGNvc3Rfc291cmNlOiByZXN1bHQuY29zdFNvdXJjZSxcbiAgICBkdXJhdGlvbl9tczogcmVzdWx0LmR1cmF0aW9uTXMsXG4gICAgdHRmdF9tczogcmVzdWx0LnR0ZnRNcyxcbiAgICBmaW5pc2hfcmVhc29uOiByZXN1bHQuZmluaXNoUmVhc29uLFxuICB9KTtcbiAgcmV0dXJuIHsgcmVxdWVzdGVkTW9kZWxOYW1lLCBzZXJ2ZWRNb2RlbE5hbWUgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFmdGVyUXVlcnkoXG4gIHJlcXVlc3RMb2dJZDogbnVtYmVyLFxuICBzdGVwSW5kZXg6IG51bWJlcixcbiAgYXJnczogUXVlcnlJbnB1dCxcbiAgcmVzdWx0OiBRdWVyeU91dHB1dCxcbik6IFByb21pc2U8UnVuTGlmZWN5Y2xlUmVzdWx0PiB7XG4gIGNvbnN0IHsgcmVxdWVzdGVkTW9kZWxOYW1lLCBzZXJ2ZWRNb2RlbE5hbWUgfSA9IGF3YWl0IGFwcGVuZEdlbmVyYXRlU3RlcChcbiAgICByZXF1ZXN0TG9nSWQsXG4gICAgc3RlcEluZGV4LFxuICAgIGFyZ3MsXG4gICAgcmVzdWx0LFxuICApO1xuXG4gIGNvbnN0IGltYWdlUGFydHMgPSBnZXRJbWFnZVBhcnRzKHJlc3VsdCk7XG4gIGNvbnN0IGltYWdlQ29zdE1pY3JvVXNkID0gZXN0aW1hdGVJbWFnZUdlbmVyYXRpb25Db3N0TWljcm9Vc2QoXG4gICAgcmVzdWx0LFxuICAgIGFyZ3MuaW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyxcbiAgKTtcbiAgZm9yIChjb25zdCBzdGVwIG9mIGJ1aWxkSW1hZ2VHZW5lcmF0aW9uVG9vbFN0ZXBzKGFyZ3MsIGltYWdlUGFydHMsIHN0ZXBJbmRleCkpIHtcbiAgICBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuYXBwZW5kU3RlcChyZXF1ZXN0TG9nSWQsIHN0ZXApO1xuICB9XG5cbiAgaWYgKHJlc3VsdC5maW5pc2hSZWFzb24gPT09IFwidG9vbC1jYWxsc1wiKSB7XG4gICAgLy8gdG9vbC1jYWxsIHN0ZXDsnYQg7KaJ7IucIOq4sOuhne2VmOqzoCwg64uk7J2MIGZvbGxvdy11cOydtCDqsJnsnYAgcm937JeQIOqysOqzvOulvCDssYTsmrTri6QuXG4gICAgY29uc3QgdG9vbENhbGxzID0gcmVzdWx0LmNvbnRlbnQuZmlsdGVyKChjKSA9PiBjLnR5cGUgPT09IFwidG9vbC1jYWxsXCIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9vbENhbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB0YyA9IHRvb2xDYWxsc1tpXSE7XG4gICAgICBpZiAodGMudHlwZSAhPT0gXCJ0b29sLWNhbGxcIikgY29udGludWU7XG4gICAgICBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuYXBwZW5kU3RlcChyZXF1ZXN0TG9nSWQsIHtcbiAgICAgICAgc3RlcF9pbmRleDogc3RlcEluZGV4LFxuICAgICAgICB0eXBlOiBcInRvb2xfY2FsbFwiLFxuICAgICAgICB0b29sX2NhbGxfaW5kZXg6IGltYWdlUGFydHMubGVuZ3RoICsgaSxcbiAgICAgICAgdG9vbF9jYWxsX2lkOiB0Yy50b29sQ2FsbElkLFxuICAgICAgICB0b29sX25hbWU6IHRjLnRvb2xOYW1lLFxuICAgICAgICB0b29sX2FyZ3M6IHRjLmlucHV0LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcnVuQ29udGV4dDogeyByZXF1ZXN0TG9nSWQgfSB9O1xuICB9XG5cbiAgLy8gZmluaXNoUmVhc29uID09PSBcInN0b3BcIiDihpIgcnVuIOyiheujjCAo7KCE7LK0IHN0ZXAgdXNhZ2Ug7ZWp7IKwKVxuICBjb25zdCBhZ2cgPSBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuYWdncmVnYXRlU3RlcFVzYWdlKHJlcXVlc3RMb2dJZCk7XG4gIGNvbnN0IHJlc3BvbnNlVGV4dCA9IGZvcm1hdFJlc3BvbnNlRm9yTG9nKHJlc3VsdCk7XG4gIGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5maW5pc2hSdW4ocmVxdWVzdExvZ0lkLCB7XG4gICAgc3RhdHVzOiBcInN1Y2NlZWRlZFwiLFxuICAgIHJlc3BvbnNlOiByZXNwb25zZVRleHQsXG4gICAgLy8gc3RydWN0dXJlZCDsmpTssq3rp4wg7YyQ7KCV7ZWc64ukLiBkZXRpIOuwsOy5mOydmCBicm9rZW4gSlNPTiDrpZjrpbwg66qp66Gd7JeQ7IScIOuwlOuhnFxuICAgIC8vIOq1rOuzhO2VmOq4sCDsnITtlZwg6riw66Gd7J2066mwLCDruYRzdHJ1Y3R1cmVkIOyalOyyreydgCBudWxsIOuhnCDrgqjripTri6QuXG4gICAgcmVzcG9uc2VfanNvbl9vazogYXJncy5qc29uU2NoZW1hID8gaXNQYXJzZWFibGVKc29uKHJlc3BvbnNlVGV4dCkgOiBudWxsLFxuICAgIHRva2VuX25hbWU6IHJlc3VsdC50b2tlbk5hbWUsXG4gICAgaW5wdXRfdG9rZW5zOiBhZ2cuaW5wdXRfdG9rZW5zLFxuICAgIG91dHB1dF90b2tlbnM6IGFnZy5vdXRwdXRfdG9rZW5zLFxuICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBhZ2cuY2FjaGVfcmVhZF90b2tlbnMsXG4gICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBhZ2cuY2FjaGVfY3JlYXRpb25fdG9rZW5zLFxuICAgIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2VuczogYWdnLmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyxcbiAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IGFnZy5jYWNoZV9jcmVhdGlvbl8xaF90b2tlbnMsXG4gICAgZHVyYXRpb25fbXM6IGFnZy5kdXJhdGlvbl9tcyxcbiAgICAvLyBtdWx0aS1zdGVwIHJ1biDrtoDrqqjsnZgg66qo64247J2AIOy1nOyihSB0dXJu7J2EIOyEnOu5me2VnCDrqqjrjbjsnbTri6QuXG4gICAgcmVxdWVzdGVkX21vZGVsX25hbWU6IHJlcXVlc3RlZE1vZGVsTmFtZSxcbiAgICBtb2RlbF9uYW1lOiBzZXJ2ZWRNb2RlbE5hbWUsXG4gICAgZmFsbGJhY2tfY291bnQ6IGFnZy5mYWxsYmFja19jb3VudCxcbiAgICBzZXJ2aWNlX3RpZXI6IGFyZ3MubW9kZWw/LnN0YXJ0c1dpdGgoXCJvcGVuYWkvXCIpID8gKGFyZ3Muc2VydmljZVRpZXIgPz8gbnVsbCkgOiBudWxsLFxuICAgIGNvc3RfdXNkOiBhZ2cuY29zdF91c2QsXG4gICAgY29zdF9zb3VyY2U6IGFnZy5jb3N0X3NvdXJjZSxcbiAgICBpbWFnZV9jb3N0X3VzZDogaW1hZ2VDb3N0TWljcm9Vc2QsXG4gICAgLi4uKGltYWdlUGFydHMubGVuZ3RoID4gMCA/IHsgaXNfaW1hZ2VfZ2VuZXJhdGlvbjogdHJ1ZSB9IDoge30pLFxuICAgIGltYWdlX2Nvc3RfbWV0aG9kOlxuICAgICAgaW1hZ2VDb3N0TWljcm9Vc2QgIT09IG51bGxcbiAgICAgICAgPyBpbWFnZUdlbmVyYXRpb25Db3N0TWV0aG9kKGFyZ3MuaW1hZ2VHZW5lcmF0aW9uT3B0aW9ucywgcmVzdWx0KVxuICAgICAgICA6IG51bGwsXG4gICAgaGlzdG9yeTogZmlsdGVySGlzdG9yeUZvclN0b3JhZ2UoYXJncy5oaXN0b3J5KSxcbiAgfSk7XG5cbiAgcmV0dXJuIHt9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluaXNoUnVuV2l0aEVycm9yKFxuICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmcsXG4gIGFyZ3M/OiBRdWVyeUlucHV0LFxuICBjb21wbGV0ZWRTdGVwPzogeyBzdGVwSW5kZXg6IG51bWJlcjsgcmVzdWx0OiBRdWVyeU91dHB1dCB9LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGZpbmlzaFRlcm1pbmFsUnVuKHJlcXVlc3RMb2dJZCwgXCJlcnJvclwiLCBlcnJvck1lc3NhZ2UsIGFyZ3MsIGNvbXBsZXRlZFN0ZXApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluaXNoUnVuQWJvcnRlZChcbiAgcmVxdWVzdExvZ0lkOiBudW1iZXIsXG4gIGFyZ3M/OiBRdWVyeUlucHV0LFxuICBjb21wbGV0ZWRTdGVwPzogeyBzdGVwSW5kZXg6IG51bWJlcjsgcmVzdWx0OiBRdWVyeU91dHB1dCB9LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGZpbmlzaFRlcm1pbmFsUnVuKHJlcXVlc3RMb2dJZCwgXCJhYm9ydGVkXCIsIFwiY2xpZW50IGRpc2Nvbm5lY3RlZFwiLCBhcmdzLCBjb21wbGV0ZWRTdGVwKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmluaXNoVGVybWluYWxSdW4oXG4gIHJlcXVlc3RMb2dJZDogbnVtYmVyLFxuICBzdGF0dXM6IFwiZXJyb3JcIiB8IFwiYWJvcnRlZFwiLFxuICBlcnJvck1lc3NhZ2U6IHN0cmluZyxcbiAgYXJncz86IFF1ZXJ5SW5wdXQsXG4gIGNvbXBsZXRlZFN0ZXA/OiB7IHN0ZXBJbmRleDogbnVtYmVyOyByZXN1bHQ6IFF1ZXJ5T3V0cHV0IH0sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBpZiAoY29tcGxldGVkU3RlcCAmJiBhcmdzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBhcHBlbmRHZW5lcmF0ZVN0ZXAocmVxdWVzdExvZ0lkLCBjb21wbGV0ZWRTdGVwLnN0ZXBJbmRleCwgYXJncywgY29tcGxldGVkU3RlcC5yZXN1bHQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICAgYGFwcGVuZEdlbmVyYXRlU3RlcCBmYWlsZWQgd2hpbGUgZmluaXNoaW5nICR7c3RhdHVzfTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgYWdncmVnYXRlOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIFJlcXVlc3RMb2dNb2RlbC5hZ2dyZWdhdGVTdGVwVXNhZ2U+PiB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgYWdncmVnYXRlID0gYXdhaXQgUmVxdWVzdExvZ01vZGVsLmFnZ3JlZ2F0ZVN0ZXBVc2FnZShyZXF1ZXN0TG9nSWQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgYWdncmVnYXRlU3RlcFVzYWdlIGZhaWxlZCB3aGlsZSBmaW5pc2hpbmcgJHtzdGF0dXN9OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgIH1cblxuICAgIGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5maW5pc2hSdW4ocmVxdWVzdExvZ0lkLCB7XG4gICAgICBzdGF0dXMsXG4gICAgICBlcnJvcl9tZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgICBoaXN0b3J5OiBhcmdzID8gZmlsdGVySGlzdG9yeUZvclN0b3JhZ2UoYXJncy5oaXN0b3J5KSA6IHVuZGVmaW5lZCxcbiAgICAgIC4uLihjb21wbGV0ZWRTdGVwXG4gICAgICAgID8ge1xuICAgICAgICAgICAgdG9rZW5fbmFtZTogY29tcGxldGVkU3RlcC5yZXN1bHQudG9rZW5OYW1lLFxuICAgICAgICAgICAgcmVxdWVzdGVkX21vZGVsX25hbWU6IHdpdGhQcm92aWRlclByZWZpeChcbiAgICAgICAgICAgICAgYXJncz8ubW9kZWwsXG4gICAgICAgICAgICAgIGFyZ3M/Lm1vZGVsID8/IGNvbXBsZXRlZFN0ZXAucmVzdWx0LnJlcXVlc3RlZE1vZGVsID8/IGNvbXBsZXRlZFN0ZXAucmVzdWx0Lm1vZGVsLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIG1vZGVsX25hbWU6IHdpdGhQcm92aWRlclByZWZpeChhcmdzPy5tb2RlbCwgY29tcGxldGVkU3RlcC5yZXN1bHQubW9kZWwpLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgICAuLi4oYWdncmVnYXRlXG4gICAgICAgID8ge1xuICAgICAgICAgICAgaW5wdXRfdG9rZW5zOiBhZ2dyZWdhdGUuaW5wdXRfdG9rZW5zLFxuICAgICAgICAgICAgb3V0cHV0X3Rva2VuczogYWdncmVnYXRlLm91dHB1dF90b2tlbnMsXG4gICAgICAgICAgICBjYWNoZV9yZWFkX3Rva2VuczogYWdncmVnYXRlLmNhY2hlX3JlYWRfdG9rZW5zLFxuICAgICAgICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBhZ2dyZWdhdGUuY2FjaGVfY3JlYXRpb25fdG9rZW5zLFxuICAgICAgICAgICAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiBhZ2dyZWdhdGUuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zLFxuICAgICAgICAgICAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zOiBhZ2dyZWdhdGUuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zLFxuICAgICAgICAgICAgZHVyYXRpb25fbXM6IGFnZ3JlZ2F0ZS5kdXJhdGlvbl9tcyxcbiAgICAgICAgICAgIGZhbGxiYWNrX2NvdW50OiBhZ2dyZWdhdGUuZmFsbGJhY2tfY291bnQsXG4gICAgICAgICAgICBjb3N0X3VzZDogYWdncmVnYXRlLmNvc3RfdXNkLFxuICAgICAgICAgICAgY29zdF9zb3VyY2U6IGFnZ3JlZ2F0ZS5jb3N0X3NvdXJjZSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLmVycm9yKGBmaW5pc2hUZXJtaW5hbFJ1bigke3N0YXR1c30pIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjbGVhbnVwU3RhbGVSdW5zKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoc3RhbGVDbGVhbnVwSW5GbGlnaHQpIHtcbiAgICBhd2FpdCBzdGFsZUNsZWFudXBJbkZsaWdodDtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBpZiAobm93IC0gbGFzdFN0YWxlQ2xlYW51cFN0YXJ0ZWRBdCA8IFNUQUxFX0NMRUFOVVBfSU5URVJWQUxfTVMpIHJldHVybjtcbiAgbGFzdFN0YWxlQ2xlYW51cFN0YXJ0ZWRBdCA9IG5vdztcblxuICBjb25zdCBjbGVhbnVwID0gcGVyZm9ybVN0YWxlUnVuQ2xlYW51cCgpO1xuICBzdGFsZUNsZWFudXBJbkZsaWdodCA9IGNsZWFudXA7XG4gIHRyeSB7XG4gICAgYXdhaXQgY2xlYW51cDtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoc3RhbGVDbGVhbnVwSW5GbGlnaHQgPT09IGNsZWFudXApIHN0YWxlQ2xlYW51cEluRmxpZ2h0ID0gdW5kZWZpbmVkO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1TdGFsZVJ1bkNsZWFudXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gXCJ0b29sLWNhbGwgcnVuOiBubyBmb2xsb3ctdXAgd2l0aGluIDMwIG1pbnV0ZXNcIjtcbiAgICBjb25zdCBzdGFsZUlkcyA9IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5leHBpcmVTdGFsZVRvb2xXYWl0aW5nUnVucyhcbiAgICAgIFNUQUxFX1JVTl9USFJFU0hPTERfTVMsXG4gICAgICBlcnJvck1lc3NhZ2UsXG4gICAgKTtcbiAgICBjb25zdCBjbGVhbmVkQ291bnQgPSBzdGFsZUlkcy5sZW5ndGg7XG4gICAgaWYgKGNsZWFuZWRDb3VudCA+IDApIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBjbGVhbmVkIHVwICR7Y2xlYW5lZENvdW50fSBzdGFsZSBydW5uaW5nIHJlcXVlc3QgbG9nc2ApO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5lcnJvcihgc3RhbGUgY2xlYW51cCBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFlQSxNQUFNLFNBQVMsVUFBVSxDQUFDLFNBQVMsZUFBZSxDQUFDO0FBQ25ELE1BQU0seUJBQXlCLE9BQVU7QUFDekMsTUFBTSw0QkFBNEIsS0FBSztBQUN2QyxJQUFJO0FBQ0osSUFBSSw0QkFBNEI7QUFDaEMsU0FBUyxtQkFDUCxZQUNBLE9BQ29CO0NBQ3BCLElBQUksQ0FBQyxPQUFPLE9BQU87Q0FDbkIsSUFBSSxNQUFNLFNBQVMsR0FBRyxHQUFHLE9BQU87Q0FDaEMsTUFBTSxRQUFRLFlBQVksUUFBUSxHQUFHLEtBQUs7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
|
|
@@ -297,6 +297,7 @@ var RequestLogModelClass = class extends BaseModelClass {
|
|
|
297
297
|
json_schema: params.json_schema ?? null,
|
|
298
298
|
is_structured: params.is_structured ?? (params.json_schema !== null && params.json_schema !== void 0),
|
|
299
299
|
...params.history !== void 0 ? { history: params.history } : {},
|
|
300
|
+
...params.input_images ? { input_images: params.input_images } : {},
|
|
300
301
|
...params.tools !== void 0 ? { tools: params.tools } : {}
|
|
301
302
|
});
|
|
302
303
|
return wdb.transaction(async (trx) => {
|
|
@@ -590,4 +591,4 @@ const RequestLogModel = new RequestLogModelClass();
|
|
|
590
591
|
//#endregion
|
|
591
592
|
export { MICRO_USD, RequestLogModel };
|
|
592
593
|
|
|
593
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1sb2cubW9kZWwuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3JlcXVlc3QtbG9nL3JlcXVlc3QtbG9nLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzb25TY2hlbWFUb1pvZCB9IGZyb20gXCJqc29uLXNjaGVtYS10by16b2RcIjtcbmltcG9ydCB7XG4gIGFwaSxcbiAgYXNBcnJheSxcbiAgQmFkUmVxdWVzdEV4Y2VwdGlvbixcbiAgQmFzZU1vZGVsQ2xhc3MsXG4gIHR5cGUgTGlzdFJlc3VsdCxcbiAgbm9ybWFsaXplRmlsdGVyUXVlcnksXG4gIE5vdEZvdW5kRXhjZXB0aW9uLFxuICBQdXJpLFxuICB0cmFuc2FjdGlvbmFsLFxufSBmcm9tIFwic29uYW11XCI7XG5cbmltcG9ydCB7IFNEIH0gZnJvbSBcIi4uLy4uL2kxOG4vc2QuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgeyBjYWxjdWxhdGVDb3N0VXNkIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3Byb3ZpZGVycy9jb21tb24vbW9kZWwtY29zdFwiO1xuaW1wb3J0IHsgdHlwZSBSZXF1ZXN0TG9nU3Vic2V0S2V5LCB0eXBlIFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nIH0gZnJvbSBcIi4uL3NvbmFtdS5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IHJlcXVlc3RMb2dMb2FkZXJRdWVyaWVzLCByZXF1ZXN0TG9nU3Vic2V0UXVlcmllcyB9IGZyb20gXCIuLi9zb25hbXUuZ2VuZXJhdGVkLnNzb1wiO1xuaW1wb3J0IHtcbiAgcmVuZGVySnNvblNjaGVtYVpvZFNoYXBlVGV4dCxcbiAgcmVuZGVyUGFyc2VkSnNvblNjaGVtYVR5cGVUZXh0LFxufSBmcm9tIFwiLi9qc29uLXNjaGVtYS10eXBlLXRleHRcIjtcbmltcG9ydCB7XG4gIHR5cGUgUmVxdWVzdExvZ0xpc3RQYXJhbXMsXG4gIHR5cGUgUmVxdWVzdExvZ1NhdmVQYXJhbXMsXG4gIHR5cGUgVG9vbERlZmluaXRpb25zLFxuICB0eXBlIFRvb2xWaWV3LFxufSBmcm9tIFwiLi9yZXF1ZXN0LWxvZy50eXBlc1wiO1xuaW1wb3J0IHsgZm9ybWF0Wm9kQ29kZSB9IGZyb20gXCIuL3pvZC1jb2RlLWZvcm1hdFwiO1xuXG4vLyBjb3N0X3VzZOuKlCDsoJXsiJggbWljcm8tVVNE66GcIOyggOyepS4g7Iuk7KCcIFVTRCA9IGNvc3RfdXNkIC8gTUlDUk9fVVNELlxuZXhwb3J0IGNvbnN0IE1JQ1JPX1VTRCA9IDFfMDAwXzAwMDtcbmNvbnN0IFJFUVVFU1RfTE9HX1JVTl9MT0NLX0NMQVNTX0lEID0gNzE4O1xuY29uc3QgVE9PTF9FTlVNX1ZBTFVFX0xJTUlUID0gNjtcblxuZnVuY3Rpb24gZGVjb2RlU3RvcmVkVG9vbHModmFsdWU6IHVua25vd24pOiBUb29sRGVmaW5pdGlvbnMgfCBudWxsIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHJldHVybiB2YWx1ZSBhcyBUb29sRGVmaW5pdGlvbnM7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UodmFsdWUpIGFzIFRvb2xEZWZpbml0aW9ucztcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxudHlwZSBUb29sUmVzdWx0Q29udGludWF0aW9uID0ge1xuICB0b29sQ2FsbElkOiBzdHJpbmc7XG4gIG91dHB1dDogc3RyaW5nO1xuICBpc0Vycm9yPzogYm9vbGVhbjtcbn07XG5cbnR5cGUgUmVxdWVzdExvZ1N0ZXBBZ2dyZWdhdGUgPSB7XG4gIGlucHV0X3Rva2VuczogbnVtYmVyO1xuICBvdXRwdXRfdG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlX3JlYWRfdG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogbnVtYmVyO1xuICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM/OiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vucz86IG51bWJlcjtcbiAgZHVyYXRpb25fbXM6IG51bWJlcjtcbiAgZmFsbGJhY2tfY291bnQ6IG51bWJlcjtcbiAgY29zdF91c2Q6IG51bWJlcjtcbiAgY29zdF9zb3VyY2U/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBTVEVQX0FHR1JFR0FURV9TRUxFQ1QgPSB7XG4gIGlucHV0X3Rva2VuczogXCJpbnB1dF90b2tlbnNcIixcbiAgb3V0cHV0X3Rva2VuczogXCJvdXRwdXRfdG9rZW5zXCIsXG4gIGNhY2hlX3JlYWRfdG9rZW5zOiBcImNhY2hlX3JlYWRfdG9rZW5zXCIsXG4gIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogXCJjYWNoZV9jcmVhdGlvbl90b2tlbnNcIixcbiAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiBcImNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuc1wiLFxuICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IFwiY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIsXG4gIGR1cmF0aW9uX21zOiBcImR1cmF0aW9uX21zXCIsXG4gIGZhbGxiYWNrX2NvdW50OiBcImZhbGxiYWNrX2NvdW50XCIsXG4gIGNvc3RfdXNkOiBcImNvc3RfdXNkXCIsXG4gIGNvc3Rfc291cmNlOiBcImNvc3Rfc291cmNlXCIsXG59IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBhZ2dyZWdhdGVHZW5lcmF0ZVN0ZXBSb3dzKHJvd3M6IEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pik6IFJlcXVlc3RMb2dTdGVwQWdncmVnYXRlIHtcbiAgY29uc3Qgc3VtID0gKGZpZWxkOiBzdHJpbmcpOiBudW1iZXIgPT5cbiAgICByb3dzLnJlZHVjZSgodG90YWwsIHJvdykgPT4gdG90YWwgKyBOdW1iZXIocm93W2ZpZWxkXSA/PyAwKSwgMCk7XG4gIGNvbnN0IG9wdGlvbmFsU3VtID0gKGZpZWxkOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQgPT5cbiAgICByb3dzLnNvbWUoKHJvdykgPT4gcm93W2ZpZWxkXSAhPT0gbnVsbCAmJiByb3dbZmllbGRdICE9PSB1bmRlZmluZWQpID8gc3VtKGZpZWxkKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgY29sbGFwc2UgPSAoZmllbGQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3QgdmFsdWVzID0gW1xuICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgcm93c1xuICAgICAgICAgIC5tYXAoKHJvdykgPT4gcm93W2ZpZWxkXSlcbiAgICAgICAgICAuZmlsdGVyKCh2YWx1ZSk6IHZhbHVlIGlzIHN0cmluZyA9PiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUubGVuZ3RoID4gMCksXG4gICAgICApLFxuICAgIF07XG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHZhbHVlcy5sZW5ndGggPT09IDEgPyB2YWx1ZXNbMF0gOiBcIm1peGVkXCI7XG4gIH07XG4gIHJldHVybiB7XG4gICAgaW5wdXRfdG9rZW5zOiBzdW0oXCJpbnB1dF90b2tlbnNcIiksXG4gICAgb3V0cHV0X3Rva2Vuczogc3VtKFwib3V0cHV0X3Rva2Vuc1wiKSxcbiAgICBjYWNoZV9yZWFkX3Rva2Vuczogc3VtKFwiY2FjaGVfcmVhZF90b2tlbnNcIiksXG4gICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBzdW0oXCJjYWNoZV9jcmVhdGlvbl90b2tlbnNcIiksXG4gICAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiBvcHRpb25hbFN1bShcImNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuc1wiKSxcbiAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IG9wdGlvbmFsU3VtKFwiY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIpLFxuICAgIGR1cmF0aW9uX21zOiBzdW0oXCJkdXJhdGlvbl9tc1wiKSxcbiAgICBmYWxsYmFja19jb3VudDogc3VtKFwiZmFsbGJhY2tfY291bnRcIiksXG4gICAgY29zdF91c2Q6IHN1bShcImNvc3RfdXNkXCIpLFxuICAgIGNvc3Rfc291cmNlOiBjb2xsYXBzZShcImNvc3Rfc291cmNlXCIpLFxuICB9O1xufVxuXG50eXBlIFJlcXVlc3RMb2dVc2FnZVJvdyA9IHtcbiAgdG9rZW5fbmFtZT86IHN0cmluZyB8IG51bGw7XG4gIG1vZGVsX25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICBpbnB1dF90b2tlbnM6IG51bWJlcjtcbiAgb3V0cHV0X3Rva2VuczogbnVtYmVyO1xuICBjYWNoZV9yZWFkX3Rva2VuczogbnVtYmVyO1xuICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IG51bWJlcjtcbiAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zPzogbnVtYmVyIHwgbnVsbDtcbiAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zPzogbnVtYmVyIHwgbnVsbDtcbiAgY29zdF91c2Q/OiBudW1iZXIgfCBudWxsO1xuICBjb3N0X3NvdXJjZT86IHN0cmluZyB8IG51bGw7XG59O1xuXG5mdW5jdGlvbiBpc0FudGhyb3BpY1VzYWdlUm93KHJvdzogUGljazxSZXF1ZXN0TG9nVXNhZ2VSb3csIFwidG9rZW5fbmFtZVwiIHwgXCJtb2RlbF9uYW1lXCI+KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgcm93LnRva2VuX25hbWU/LnN0YXJ0c1dpdGgoXCJhbnRocm9waWMvXCIpID09PSB0cnVlIHx8XG4gICAgcm93Lm1vZGVsX25hbWU/LnN0YXJ0c1dpdGgoXCJjbGF1ZGUtXCIpID09PSB0cnVlIHx8XG4gICAgcm93Lm1vZGVsX25hbWU/LnN0YXJ0c1dpdGgoXCJhbnRocm9waWMvY2xhdWRlLVwiKSA9PT0gdHJ1ZVxuICApO1xufVxuXG5mdW5jdGlvbiBjYW5vbmljYWxNb2RlbE5hbWUobW9kZWxOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbW9kZWxOYW1lLmluY2x1ZGVzKFwiL1wiKSA/IG1vZGVsTmFtZS5zcGxpdChcIi9cIikucG9wKCkhIDogbW9kZWxOYW1lO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVkVXNhZ2VGb3JDb3N0KHJvdzogUmVxdWVzdExvZ1VzYWdlUm93KToge1xuICBtb2RlbDogc3RyaW5nIHwgbnVsbDtcbiAgaW5wdXRUb2tlbnM6IG51bWJlcjtcbiAgb3V0cHV0VG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlZElucHV0VG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogbnVtYmVyO1xuICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bT86IG51bWJlcjtcbiAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWg/OiBudW1iZXI7XG59IHtcbiAgY29uc3QgY2FjaGVSZWFkID0gcm93LmNhY2hlX3JlYWRfdG9rZW5zO1xuICBjb25zdCBjYWNoZUNyZWF0aW9uID0gcm93LmNhY2hlX2NyZWF0aW9uX3Rva2VucztcbiAgY29uc3Qgc3RvcmVkSW5wdXQgPSByb3cuaW5wdXRfdG9rZW5zO1xuICBjb25zdCBsZWdhY3lBbnRocm9waWNTcGxpdElucHV0ID1cbiAgICBpc0FudGhyb3BpY1VzYWdlUm93KHJvdykgJiYgc3RvcmVkSW5wdXQgPCBjYWNoZVJlYWQgKyBjYWNoZUNyZWF0aW9uO1xuICByZXR1cm4ge1xuICAgIG1vZGVsOiByb3cubW9kZWxfbmFtZSA/IGNhbm9uaWNhbE1vZGVsTmFtZShyb3cubW9kZWxfbmFtZSkgOiBudWxsLFxuICAgIGlucHV0VG9rZW5zOiBsZWdhY3lBbnRocm9waWNTcGxpdElucHV0ID8gc3RvcmVkSW5wdXQgKyBjYWNoZVJlYWQgKyBjYWNoZUNyZWF0aW9uIDogc3RvcmVkSW5wdXQsXG4gICAgb3V0cHV0VG9rZW5zOiByb3cub3V0cHV0X3Rva2VucyxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogY2FjaGVSZWFkLFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogY2FjaGVDcmVhdGlvbixcbiAgICAuLi4ocm93LmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyAhPT0gbnVsbCAmJiByb3cuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zICE9PSB1bmRlZmluZWRcbiAgICAgID8geyBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bTogcm93LmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyB9XG4gICAgICA6IHt9KSxcbiAgICAuLi4ocm93LmNhY2hlX2NyZWF0aW9uXzFoX3Rva2VucyAhPT0gbnVsbCAmJiByb3cuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zICE9PSB1bmRlZmluZWRcbiAgICAgID8geyBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaDogcm93LmNhY2hlX2NyZWF0aW9uXzFoX3Rva2VucyB9XG4gICAgICA6IHt9KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTGVnYWN5QW50aHJvcGljUm93PFQgZXh0ZW5kcyBSZXF1ZXN0TG9nVXNhZ2VSb3c+KHJvdzogVCk6IFQge1xuICAvLyDsg4ggcm93IOuKlCDri7nsi5zsnZggcHJvdmlkZXIv6rCA6rKp7ZGcIOu5hOyaqeydhCDtmZXsoJUg7KCA7J6l7ZWc64ukLiDtmITsnqwg6rCA6rKp7ZGc66GcIOuNruyWtOyTsOyngCDslYrripTri6QuXG4gIGlmIChyb3cuY29zdF9zb3VyY2UpIHJldHVybiByb3c7XG4gIGNvbnN0IHVzYWdlID0gbm9ybWFsaXplZFVzYWdlRm9yQ29zdChyb3cpO1xuICBpZiAodXNhZ2UuaW5wdXRUb2tlbnMgPT09IHJvdy5pbnB1dF90b2tlbnMpIHJldHVybiByb3c7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB7IC4uLnJvdywgaW5wdXRfdG9rZW5zOiB1c2FnZS5pbnB1dFRva2VucyB9O1xuICBpZiAodXNhZ2UubW9kZWwpIHtcbiAgICBub3JtYWxpemVkLmNvc3RfdXNkID0gTWF0aC5yb3VuZChjYWxjdWxhdGVDb3N0VXNkKHVzYWdlLm1vZGVsLCB1c2FnZSkgKiBNSUNST19VU0QpO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKipcbiAqIGBvcmRlckJ5YCBlbnVtIOqwkihg7Lus65+8Leuwqe2WpWAp7J2EIOygleugrCDsoIjroZwg7Jiu6ri064ukLlxuICpcbiAqIGVudW0g7J20IDE4IOyiheydtOudvCDsvIDsnbTsiqTrpbwg7J287J287J20IOyggeuKlCDrjIDsi6Ag7YyM7Iux7ZWY65CYLCDsu6zrn7zsnYAg7JWE656YIOuqqeuhneycvOuhnCDtlZzsoJXtlZzri6Qg4oCUXG4gKiDrrLjsnpDsl7TsnYQg6re464yA66GcIOy7rOufvOuqheyXkCDrhJjquLDrqbQgZW51bSDsnbQg67CU64CUIOuVjCDqsoDspp0g7JeG64qUIOyLneuzhOyekOqwgCBTUUwg66GcIO2dmOufrOuToOuLpC5cbiAqIOuqqeuhneyXkCDsl4bripQg6rCS7J2AIOq4sOuzuCDsoJXroKwoaWQgZGVzYynroZwg65ao7Ja07KeE64ukLlxuICovXG5jb25zdCBPUkRFUkFCTEVfQ09MVU1OUyA9IHtcbiAgaWQ6IFwicmVxdWVzdF9sb2dzLmlkXCIsXG4gIGNyZWF0ZWRfYXQ6IFwicmVxdWVzdF9sb2dzLmNyZWF0ZWRfYXRcIixcbiAgdHRmdF9tczogXCJyZXF1ZXN0X2xvZ3MudHRmdF9tc1wiLFxuICBkdXJhdGlvbl9tczogXCJyZXF1ZXN0X2xvZ3MuZHVyYXRpb25fbXNcIixcbiAgaW5wdXRfdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5pbnB1dF90b2tlbnNcIixcbiAgb3V0cHV0X3Rva2VuczogXCJyZXF1ZXN0X2xvZ3Mub3V0cHV0X3Rva2Vuc1wiLFxuICBjYWNoZV9yZWFkX3Rva2VuczogXCJyZXF1ZXN0X2xvZ3MuY2FjaGVfcmVhZF90b2tlbnNcIixcbiAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5jYWNoZV9jcmVhdGlvbl90b2tlbnNcIixcbiAgY29zdF91c2Q6IFwicmVxdWVzdF9sb2dzLmNvc3RfdXNkXCIsXG59IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBhcHBseU9yZGVyQnkoXG4gIHFiOiBSZXR1cm5UeXBlPFJlcXVlc3RMb2dNb2RlbENsYXNzW1wiZ2V0U3Vic2V0UXVlcmllc1wiXT5bXCJxYlwiXSxcbiAgb3JkZXJCeTogc3RyaW5nLFxuKTogdm9pZCB7XG4gIGNvbnN0IHNlcGFyYXRvciA9IG9yZGVyQnkubGFzdEluZGV4T2YoXCItXCIpO1xuICBjb25zdCBrZXkgPSBvcmRlckJ5LnNsaWNlKDAsIHNlcGFyYXRvcikgYXMga2V5b2YgdHlwZW9mIE9SREVSQUJMRV9DT0xVTU5TO1xuICBjb25zdCBkaXJlY3Rpb24gPSBvcmRlckJ5LnNsaWNlKHNlcGFyYXRvciArIDEpID09PSBcImFzY1wiID8gXCJhc2NcIiA6IFwiZGVzY1wiO1xuICBjb25zdCBjb2x1bW4gPSBPUkRFUkFCTEVfQ09MVU1OU1trZXldO1xuXG4gIGlmICghY29sdW1uKSB7XG4gICAgcWIub3JkZXJCeShcInJlcXVlc3RfbG9ncy5pZFwiLCBcImRlc2NcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIHFiLm9yZGVyQnkoY29sdW1uLCBkaXJlY3Rpb24pO1xuICAvLyDrj5nsoJAg7ZaJ7J2YIOyInOyEnOqwgCDtjpjsnbTsp4Drp4jri6Qg7Z2U65Ok66as7KeAIOyViuqyjCDqs6DsnKAg7Lus65+87Jy866GcIHRpZS1icmVhayDtlZzri6QuXG4gIGlmIChrZXkgIT09IFwiaWRcIikgcWIub3JkZXJCeShcInJlcXVlc3RfbG9ncy5pZFwiLCBcImRlc2NcIik7XG59XG5cbi8qXG4gIFJlcXVlc3RMb2cgTW9kZWxcbiovXG5jbGFzcyBSZXF1ZXN0TG9nTW9kZWxDbGFzcyBleHRlbmRzIEJhc2VNb2RlbENsYXNzPFxuICBSZXF1ZXN0TG9nU3Vic2V0S2V5LFxuICBSZXF1ZXN0TG9nU3Vic2V0TWFwcGluZyxcbiAgdHlwZW9mIHJlcXVlc3RMb2dTdWJzZXRRdWVyaWVzLFxuICB0eXBlb2YgcmVxdWVzdExvZ0xvYWRlclF1ZXJpZXNcbj4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIlJlcXVlc3RMb2dcIiwgcmVxdWVzdExvZ1N1YnNldFF1ZXJpZXMsIHJlcXVlc3RMb2dMb2FkZXJRdWVyaWVzKTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdLCByZXNvdXJjZU5hbWU6IFwiUmVxdWVzdExvZ1wiIH0pXG4gIGFzeW5jIGZpbmRCeUlkPFQgZXh0ZW5kcyBSZXF1ZXN0TG9nU3Vic2V0S2V5PihcbiAgICBzdWJzZXQ6IFQsXG4gICAgaWQ6IG51bWJlcixcbiAgKTogUHJvbWlzZTxSZXF1ZXN0TG9nU3Vic2V0TWFwcGluZ1tUXT4ge1xuICAgIGNvbnN0IHsgcm93cyB9ID0gYXdhaXQgdGhpcy5maW5kTWFueShzdWJzZXQsIHtcbiAgICAgIGlkLFxuICAgICAgbnVtOiAxLFxuICAgICAgcGFnZTogMSxcbiAgICAgIHF1ZXJ5TW9kZTogXCJsaXN0XCIsXG4gICAgfSk7XG4gICAgaWYgKCFyb3dzWzBdKSB7XG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFeGNlcHRpb24oU0QoXCJlcnJvci5lbnRpdHlOb3RGb3VuZFwiKShcIlJlcXVlc3RMb2dcIiwgaWQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93c1swXTtcbiAgfVxuXG4gIGFzeW5jIGZpbmRPbmU8VCBleHRlbmRzIFJlcXVlc3RMb2dTdWJzZXRLZXk+KFxuICAgIHN1YnNldDogVCxcbiAgICBsaXN0UGFyYW1zOiBSZXF1ZXN0TG9nTGlzdFBhcmFtcyxcbiAgKTogUHJvbWlzZTxSZXF1ZXN0TG9nU3Vic2V0TWFwcGluZ1tUXSB8IG51bGw+IHtcbiAgICBjb25zdCB7IHJvd3MgfSA9IGF3YWl0IHRoaXMuZmluZE1hbnkoc3Vic2V0LCB7XG4gICAgICAuLi5saXN0UGFyYW1zLFxuICAgICAgbnVtOiAxLFxuICAgICAgcGFnZTogMSxcbiAgICAgIHF1ZXJ5TW9kZTogXCJsaXN0XCIsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcm93c1swXSA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIOuqqeuhnSDtlYTthLDsnZgg64uo7J28IOygleydmC4gZmluZE1hbnkg7JmAIHRvdGFsQ29zdCDqsIAg6rCZ7J2AIOyhsOqxtOydhCDrs7Trj4TroZ0g6rO17Jyg7ZWc64ukIOKAlFxuICAgKiDtmZTrqbTsl5DshJwg7ZWE7YSw66W8IOqxuOuptCDtlokg7IiY7JmAIOu5hOyaqeydtCDtlajqu5gg7KKB7ZiA7KC47JW8IO2VmOuKlOuNsCwg65GQIOy/vOumrOqwgCDqsIHsnpAg7ZWE7YSw66W8XG4gICAqIOq1rO2YhO2VmOuptCDtlZzsqr3sl5Ag7LaV7J2EIOy2lOqwgO2VoCDrlYwg7KGw7Jqp7Z6IIOyWtOq4i+uCnOuLpC5cbiAgICovXG4gIGFwcGx5TGlzdEZpbHRlcnMoXG4gICAgcWI6IFJldHVyblR5cGU8UmVxdWVzdExvZ01vZGVsQ2xhc3NbXCJnZXRTdWJzZXRRdWVyaWVzXCJdPltcInFiXCJdLFxuICAgIHBhcmFtczogUmVxdWVzdExvZ0xpc3RQYXJhbXMsXG4gICk6IHZvaWQge1xuICAgIGlmIChwYXJhbXMuaWQpIHtcbiAgICAgIHFiLndoZXJlSW4oXCJyZXF1ZXN0X2xvZ3MuaWRcIiwgYXNBcnJheShwYXJhbXMuaWQpKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnRva2VuX25hbWUpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnRva2VuX25hbWVcIiwgcGFyYW1zLnRva2VuX25hbWUpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMucHJvamVjdF9uYW1lX2lzX251bGwpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnByb2plY3RfbmFtZVwiLCBudWxsKTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5wcm9qZWN0X25hbWVfaXNfbm90X251bGwpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnByb2plY3RfbmFtZVwiLCBcIiE9XCIsIG51bGwpO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zLnByb2plY3RfbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MucHJvamVjdF9uYW1lXCIsIHBhcmFtcy5wcm9qZWN0X25hbWUpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubW9kZWxfbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MubW9kZWxfbmFtZVwiLCBwYXJhbXMubW9kZWxfbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5zZWFyY2ggJiYgcGFyYW1zLmtleXdvcmQgJiYgcGFyYW1zLmtleXdvcmQubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHBhcmFtcy5zZWFyY2ggPT09IFwiaWRcIikge1xuICAgICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy5pZFwiLCBOdW1iZXIocGFyYW1zLmtleXdvcmQpKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnNlYXJjaCA9PT0gXCJ0b2tlbl9uYW1lXCIpIHtcbiAgICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MudG9rZW5fbmFtZVwiLCBcImxpa2VcIiwgYCUke3BhcmFtcy5rZXl3b3JkfSVgKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnNlYXJjaCA9PT0gXCJ1c2VyX3Byb21wdFwiKSB7XG4gICAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnVzZXJfcHJvbXB0XCIsIFwibGlrZVwiLCBgJSR7cGFyYW1zLmtleXdvcmR9JWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJlcnJvci51bmtub3duU2VhcmNoRmllbGRcIikocGFyYW1zLnNlYXJjaCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdLCByZXNvdXJjZU5hbWU6IFwiUmVxdWVzdExvZ3NcIiB9KVxuICBhc3luYyBmaW5kTWFueTxUIGV4dGVuZHMgUmVxdWVzdExvZ1N1YnNldEtleSwgTFAgZXh0ZW5kcyBSZXF1ZXN0TG9nTGlzdFBhcmFtcz4oXG4gICAgc3Vic2V0OiBULFxuICAgIHJhd1BhcmFtcz86IExQLFxuICApOiBQcm9taXNlPExpc3RSZXN1bHQ8TFAsIFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nW1RdPj4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIG51bTogMjQsXG4gICAgICBwYWdlOiAxLFxuICAgICAgc2VhcmNoOiBcImlkXCIgYXMgY29uc3QsXG4gICAgICBvcmRlckJ5OiBcImlkLWRlc2NcIiBhcyBjb25zdCxcbiAgICAgIC4uLnJhd1BhcmFtcyxcbiAgICB9IHNhdGlzZmllcyBSZXF1ZXN0TG9nTGlzdFBhcmFtcztcblxuICAgIGNvbnN0IHsgcWIgfSA9IHRoaXMuZ2V0U3Vic2V0UXVlcmllcyhzdWJzZXQpO1xuXG4gICAgdGhpcy5hcHBseUxpc3RGaWx0ZXJzKHFiLCBwYXJhbXMpO1xuXG4gICAgaWYgKHBhcmFtcy5vcmRlckJ5KSBhcHBseU9yZGVyQnkocWIsIHBhcmFtcy5vcmRlckJ5KTtcblxuICAgIGNvbnN0IGVuaGFuY2VycyA9IHRoaXMuY3JlYXRlRW5oYW5jZXJzKHtcbiAgICAgIEE6IChyb3cpID0+IG5vcm1hbGl6ZUxlZ2FjeUFudGhyb3BpY1Jvdyhyb3cpLFxuICAgICAgQzogKHJvdykgPT4gbm9ybWFsaXplTGVnYWN5QW50aHJvcGljUm93KHJvdyksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlU3Vic2V0UXVlcnkoe1xuICAgICAgc3Vic2V0LFxuICAgICAgcWIsXG4gICAgICBwYXJhbXMsXG4gICAgICBlbmhhbmNlcnMsXG4gICAgfSk7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgc2F2ZShzcGE6IFJlcXVlc3RMb2dTYXZlUGFyYW1zW10pOiBQcm9taXNlPG51bWJlcltdPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcblxuICAgIC8vIHJlZ2lzdGVyXG4gICAgc3BhLmZvckVhY2goKHNwKSA9PiB7XG4gICAgICB3ZGIudWJSZWdpc3RlcihcInJlcXVlc3RfbG9nc1wiLCBzcCk7XG4gICAgfSk7XG5cbiAgICAvLyB0cmFuc2FjdGlvblxuICAgIHJldHVybiB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgY29uc3QgaWRzID0gYXdhaXQgdHJ4LnViVXBzZXJ0KFwicmVxdWVzdF9sb2dzXCIpO1xuXG4gICAgICByZXR1cm4gaWRzO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOy1nOq3vCDqtazqsITsnZggcHJvdmlkZXIg67OEIOqyveufiSDthrXqs4Qo66qo64uI7YSw66eB7JqpKS4gcHJvdmlkZXIg64qUIHJlcXVlc3RlZF9tb2RlbF9uYW1lIOydmFxuICAgKiBcIm9wZW5haS8uLi5cIiB8IFwiYW50aHJvcGljLy4uLlwiIHByZWZpeCDroZwg7YyQ7KCV7ZWc64ukIOKAlCBzZXJ2aW5nIG1vZGVsX25hbWUg7J2AIHByZWZpeCDqsIBcbiAgICog7JeG6rOgLCBydW5uaW5nIOy0iOq4sOyXlCDslYTsp4Eg67mE7Ja0IOyeiOuLpC4g7KeR6rOE64qUIEpTIOyXkOyEnCDtlZzri6Q6IO2PtOungSDso7zquLDqsIAg64qQ7Iqo7ZWY6rOgXG4gICAqIOq1rOqwhOydtCDsp6fslYQgcm93IOyImOqwgCDsnpHsnLzrqbAsIHByZWZpeCBDQVNFIOyLneydhCDsv7zrpqwg67mM642U7JeQIOuwleyngCDslYrslYTrj4Qg65Cc64ukLlxuICAgKi9cbiAgYXN5bmMgcHJvdmlkZXJTdGF0c1NpbmNlKHNpbmNlOiBEYXRlKTogUHJvbWlzZTxcbiAgICBBcnJheTx7XG4gICAgICBwcm92aWRlcjogc3RyaW5nO1xuICAgICAgcmVxdWVzdHM6IG51bWJlcjtcbiAgICAgIGVycm9yczogbnVtYmVyO1xuICAgICAgaW5wdXRUb2tlbnM6IG51bWJlcjtcbiAgICAgIGNhY2hlUmVhZFRva2VuczogbnVtYmVyO1xuICAgIH0+XG4gID4ge1xuICAgIGNvbnN0IHJkYiA9IHRoaXMuZ2V0UHVyaShcInJcIik7XG4gICAgY29uc3Qgcm93cyA9IChhd2FpdCByZGJcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAuc2VsZWN0KHtcbiAgICAgICAgcmVxdWVzdGVkX21vZGVsX25hbWU6IFwicmVxdWVzdF9sb2dzLnJlcXVlc3RlZF9tb2RlbF9uYW1lXCIsXG4gICAgICAgIHN0YXR1czogXCJyZXF1ZXN0X2xvZ3Muc3RhdHVzXCIsXG4gICAgICAgIGlucHV0X3Rva2VuczogXCJyZXF1ZXN0X2xvZ3MuaW5wdXRfdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5jYWNoZV9yZWFkX3Rva2Vuc1wiLFxuICAgICAgfSlcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9ncy5jcmVhdGVkX2F0XCIsIFwiPj1cIiwgc2luY2UpKSBhcyB1bmtub3duIGFzIEFycmF5PHtcbiAgICAgIHJlcXVlc3RlZF9tb2RlbF9uYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgICAgc3RhdHVzOiBzdHJpbmc7XG4gICAgICBpbnB1dF90b2tlbnM6IG51bWJlcjtcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBudW1iZXI7XG4gICAgfT47XG5cbiAgICBjb25zdCBieVByb3ZpZGVyID0gbmV3IE1hcDxcbiAgICAgIHN0cmluZyxcbiAgICAgIHsgcmVxdWVzdHM6IG51bWJlcjsgZXJyb3JzOiBudW1iZXI7IGlucHV0VG9rZW5zOiBudW1iZXI7IGNhY2hlUmVhZFRva2VuczogbnVtYmVyIH1cbiAgICA+KCk7XG4gICAgcm93cy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IG1vZGVsID0gcm93LnJlcXVlc3RlZF9tb2RlbF9uYW1lID8/IFwiXCI7XG4gICAgICBjb25zdCBwcm92aWRlciA9IG1vZGVsLnN0YXJ0c1dpdGgoXCJvcGVuYWkvXCIpXG4gICAgICAgID8gXCJvcGVuYWlcIlxuICAgICAgICA6IG1vZGVsLnN0YXJ0c1dpdGgoXCJhbnRocm9waWMvXCIpXG4gICAgICAgICAgPyBcImFudGhyb3BpY1wiXG4gICAgICAgICAgOiBcInVua25vd25cIjtcbiAgICAgIGNvbnN0IGFnZyA9IGJ5UHJvdmlkZXIuZ2V0KHByb3ZpZGVyKSA/PyB7XG4gICAgICAgIHJlcXVlc3RzOiAwLFxuICAgICAgICBlcnJvcnM6IDAsXG4gICAgICAgIGlucHV0VG9rZW5zOiAwLFxuICAgICAgICBjYWNoZVJlYWRUb2tlbnM6IDAsXG4gICAgICB9O1xuICAgICAgYWdnLnJlcXVlc3RzICs9IDE7XG4gICAgICBpZiAocm93LnN0YXR1cyA9PT0gXCJlcnJvclwiKSBhZ2cuZXJyb3JzICs9IDE7XG4gICAgICBhZ2cuaW5wdXRUb2tlbnMgKz0gcm93LmlucHV0X3Rva2VucztcbiAgICAgIGFnZy5jYWNoZVJlYWRUb2tlbnMgKz0gcm93LmNhY2hlX3JlYWRfdG9rZW5zO1xuICAgICAgYnlQcm92aWRlci5zZXQocHJvdmlkZXIsIGFnZyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFsuLi5ieVByb3ZpZGVyLmVudHJpZXMoKV1cbiAgICAgIC5tYXAoKFtwcm92aWRlciwgYWdnXSkgPT4gKHsgcHJvdmlkZXIsIC4uLmFnZyB9KSlcbiAgICAgIC50b1NvcnRlZCgoYSwgYikgPT4gYS5wcm92aWRlci5sb2NhbGVDb21wYXJlKGIucHJvdmlkZXIpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzdHJ1Y3R1cmVkIG91dHB1dCDsmpTssq3snZggSlNPTiBTY2hlbWEg66W8IO2RnOyLnOyaqSDtg4DsnoUg7YWN7Iqk7Yq466GcIOuzgO2ZmO2VnOuLpC5cbiAgICogdHlwZXNjcmlwdCDripQg6rCE6rKw7ZWcIGB0eXBlYCDshKDslrgsIHpvZCDripQg7J6s6rWs7ISx65CcIHpvZCDtkZztmITsi53snbTri6Qg4oCUIOybkOuzuCB6b2RcbiAgICog7IaM7Iqk64qUIHdpcmUg66W8IOqxtOuEiOyYpOupsCDshozsi6TrkJjrr4DroZwgcmVmaW5lL3RyYW5zZm9ybSDrpZjripQg67O17JuQ65CY7KeAIOyViuuKlOuLpC5cbiAgICog7Iqk7YKk66eI6rCAIOyXhuqxsOuCmCDrs4DtmZgg7Iuk7Yyo66m0IG51bGwg4oCUIO2ZlOuptOydgCDtlbTri7kg67iU66GdIO2RnOyLnOulvCDsg53rnrXtlZzri6QuXG4gICAqL1xuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyByZXNwb25zZVR5cGVUcyhpZDogbnVtYmVyKTogUHJvbWlzZTx7XG4gICAgdHlwZXNjcmlwdDogc3RyaW5nIHwgbnVsbDtcbiAgICB6b2Q6IHN0cmluZyB8IG51bGw7XG4gIH0+IHtcbiAgICBjb25zdCByZGIgPSB0aGlzLmdldFB1cmkoXCJyXCIpO1xuICAgIGNvbnN0IHJvd3MgPSAoYXdhaXQgcmRiXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgLnNlbGVjdCh7IGpzb25fc2NoZW1hOiBcInJlcXVlc3RfbG9ncy5qc29uX3NjaGVtYVwiIH0pXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ3MuaWRcIiwgaWQpKSBhcyB1bmtub3duIGFzIEFycmF5PHsganNvbl9zY2hlbWE6IHN0cmluZyB8IG51bGwgfT47XG4gICAgY29uc3Qgc2NoZW1hID0gcm93c1swXT8uanNvbl9zY2hlbWE7XG4gICAgaWYgKCFzY2hlbWEpIHJldHVybiB7IHR5cGVzY3JpcHQ6IG51bGwsIHpvZDogbnVsbCB9O1xuXG4gICAgbGV0IHBhcnNlZDogdW5rbm93bjtcbiAgICB0cnkge1xuICAgICAgcGFyc2VkID0gSlNPTi5wYXJzZShzY2hlbWEpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHsgdHlwZXNjcmlwdDogbnVsbCwgem9kOiBudWxsIH07XG4gICAgfVxuICAgIGxldCB6b2Q6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICB6b2QgPSBmb3JtYXRab2RDb2RlKFxuICAgICAgICBqc29uU2NoZW1hVG9ab2QocGFyc2VkIGFzIFBhcmFtZXRlcnM8dHlwZW9mIGpzb25TY2hlbWFUb1pvZD5bMF0sIHsgbW9kdWxlOiBcIm5vbmVcIiB9KSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB6b2QgPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4geyB0eXBlc2NyaXB0OiByZW5kZXJQYXJzZWRKc29uU2NoZW1hVHlwZVRleHQocGFyc2VkKSwgem9kIH07XG4gIH1cblxuICAvLyDilIDilIAgVG9vbCBDb250cmFjdCBWaWV3XG5cbiAgLyoqXG4gICAqIOyalOyyreyXkCDsnqXssKnrkJwgdG9vbCDqs4Tslb3snYQgZGV0YWlsIO2ZlOuptOyaqeycvOuhnCDstpXslb3tlZzri6QuIEpTT05CIOuKlCDsnbTrr7ggZGVjb2RlIOuQnFxuICAgKiDrsLDsl7TroZwg7Jik66mwIOusuOyekOyXtOyduCDqsr3smrDrp4wg67Cp7Ja07KCB7Jy866GcIHBhcnNlIO2VnOuLpC4g7KCA7J6l65CcIFFncmlkVG9vbCDqs4Tslb3snYBcbiAgICog7KCE7IiYIOqygOyCrOuhnCDtmZXsnbjrkJDsnLzrr4DroZwg7ZWt66qp67OEIOuztOygleydtOuCmCB1bnJlYWRhYmxlIHNlbnRpbmVsIOydgCDrp4zrk6Tsp4Ag7JWK64qU64ukLlxuICAgKiDri6Trp4wgYFFncmlkVG9vbC5pbnB1dFNjaGVtYWAg64qUIGB6LnVua25vd24oKWAg7J206528IO2CpOqwgCDsl4bqsbDrgpggbnVsbCDsnbgg6rCS64+EXG4gICAqIHdpcmUg6rKA7Kad7J2EIO2GteqzvO2VmOuvgOuhnCDruYgg7Iqk7YKk66eI66GcIOygleq3nO2ZlO2VnOuLpCDigJQgU0RLIOuKlCBge31gIOuhnCDssYTsm4wg67O064K464ukLlxuICAgKi9cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0gfSlcbiAgYXN5bmMgdG9vbHNWaWV3KGlkOiBudW1iZXIpOiBQcm9taXNlPFRvb2xWaWV3W10+IHtcbiAgICBjb25zdCByb3cgPSAoYXdhaXQgdGhpcy5nZXRQdXJpKFwiclwiKVxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgIC5zZWxlY3QoeyB0b29sczogXCJyZXF1ZXN0X2xvZ3MudG9vbHNcIiB9KVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dzLmlkXCIsIGlkKVxuICAgICAgLmZpcnN0KCkpIGFzIHsgdG9vbHM6IHVua25vd24gfSB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCB0b29scyA9IGRlY29kZVN0b3JlZFRvb2xzKHJvdz8udG9vbHMpO1xuICAgIGlmICghdG9vbHMpIHJldHVybiBbXTtcblxuICAgIHJldHVybiB0b29scy5tYXAoKHRvb2wpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0U2NoZW1hID0gKHRvb2wuaW5wdXRTY2hlbWEgPz8ge30pIGFzIHtcbiAgICAgICAgcHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlucHV0Wm9kID0gcmVuZGVySnNvblNjaGVtYVpvZFNoYXBlVGV4dChpbnB1dFNjaGVtYSwgVE9PTF9FTlVNX1ZBTFVFX0xJTUlUKTtcbiAgICAgIGNvbnN0IGZ1bGxJbnB1dFpvZCA9IHJlbmRlckpzb25TY2hlbWFab2RTaGFwZVRleHQoaW5wdXRTY2hlbWEpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiB0b29sLm5hbWUsXG4gICAgICAgIC4uLih0b29sLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgPyB7IGRlc2NyaXB0aW9uOiB0b29sLmRlc2NyaXB0aW9uIH0gOiB7fSksXG4gICAgICAgIHBhcmFtZXRlckNvdW50OiBPYmplY3Qua2V5cyhpbnB1dFNjaGVtYS5wcm9wZXJ0aWVzID8/IHt9KS5sZW5ndGgsXG4gICAgICAgIGlucHV0Wm9kLFxuICAgICAgICAuLi4oaW5wdXRab2QgIT09IGZ1bGxJbnB1dFpvZCA/IHsgZnVsbElucHV0Wm9kIH0gOiB7fSksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLy8g4pSA4pSAIFJ1biBMaWZlY3ljbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgYXN5bmMgY3JlYXRlUnVuKHBhcmFtczoge1xuICAgIHVzZXJfcHJvbXB0OiBzdHJpbmc7XG4gICAgc3lzdGVtX3Byb21wdD86IHN0cmluZyB8IG51bGw7XG4gICAgcmVxdWVzdGVkX21vZGVsX25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgIGVmZm9ydD86IHN0cmluZyB8IG51bGw7XG4gICAgc2VydmljZV90aWVyPzogc3RyaW5nIHwgbnVsbDtcbiAgICBwcm9qZWN0X25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgIGhpc3Rvcnk/OiB1bmtub3duO1xuICAgIHRvb2xzPzogVG9vbERlZmluaXRpb25zO1xuICAgIGlzX2ltYWdlX2dlbmVyYXRpb24/OiBib29sZWFuO1xuICAgIGlzX3N0cnVjdHVyZWQ/OiBib29sZWFuO1xuICAgIGpzb25fc2NoZW1hPzogc3RyaW5nIHwgbnVsbDtcbiAgfSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcbiAgICB3ZGIudWJSZWdpc3RlcihcInJlcXVlc3RfbG9nc1wiLCB7XG4gICAgICB1c2VyX3Byb21wdDogcGFyYW1zLnVzZXJfcHJvbXB0LFxuICAgICAgc3lzdGVtX3Byb21wdDogcGFyYW1zLnN5c3RlbV9wcm9tcHQgPz8gbnVsbCxcbiAgICAgIC8vIHByb3ZpZGVyIOyLpO2WiSDsoITsnbTrr4DroZwgc2VydmluZyBtb2RlbOydgCDslYTsp4Eg7JWMIOyImCDsl4bri6QuXG4gICAgICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogcGFyYW1zLnJlcXVlc3RlZF9tb2RlbF9uYW1lID8/IG51bGwsXG4gICAgICBtb2RlbF9uYW1lOiBudWxsLFxuICAgICAgZWZmb3J0OiBwYXJhbXMuZWZmb3J0ID8/IG51bGwsXG4gICAgICBzZXJ2aWNlX3RpZXI6IHBhcmFtcy5zZXJ2aWNlX3RpZXIgPz8gbnVsbCxcbiAgICAgIHByb2plY3RfbmFtZTogcGFyYW1zLnByb2plY3RfbmFtZSA/PyBudWxsLFxuICAgICAgc3RhdHVzOiBcInJ1bm5pbmdcIixcbiAgICAgIHJlc3BvbnNlOiBcIlwiLFxuICAgICAgaW5wdXRfdG9rZW5zOiAwLFxuICAgICAgb3V0cHV0X3Rva2VuczogMCxcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiAwLFxuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiAwLFxuICAgICAgZHVyYXRpb25fbXM6IDAsXG4gICAgICB0b29sX2NhbGxfY291bnQ6IDAsXG4gICAgICAvLyDsnbTrr7jsp4AgdHVybiDsi53rs4QoUjEzKS4gcnVuIOqyveuhnCh0b29scytpbWFnZSDsobDtlakp64+EIGF1dG8g6rK966Gc7JmAIOuPmeydvO2VmOqyjCDrp4jtgrkuXG4gICAgICBpc19pbWFnZV9nZW5lcmF0aW9uOiBwYXJhbXMuaXNfaW1hZ2VfZ2VuZXJhdGlvbiA/PyBmYWxzZSxcbiAgICAgIGpzb25fc2NoZW1hOiBwYXJhbXMuanNvbl9zY2hlbWEgPz8gbnVsbCxcbiAgICAgIGlzX3N0cnVjdHVyZWQ6XG4gICAgICAgIHBhcmFtcy5pc19zdHJ1Y3R1cmVkID8/IChwYXJhbXMuanNvbl9zY2hlbWEgIT09IG51bGwgJiYgcGFyYW1zLmpzb25fc2NoZW1hICE9PSB1bmRlZmluZWQpLFxuICAgICAgLi4uKHBhcmFtcy5oaXN0b3J5ICE9PSB1bmRlZmluZWQgPyB7IGhpc3Rvcnk6IHBhcmFtcy5oaXN0b3J5IGFzIHsgdHlwZTogc3RyaW5nIH1bXSB9IDoge30pLFxuICAgICAgLi4uKHBhcmFtcy50b29scyAhPT0gdW5kZWZpbmVkID8geyB0b29sczogcGFyYW1zLnRvb2xzIH0gOiB7fSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBjb25zdCBpZHMgPSBhd2FpdCB0cngudWJVcHNlcnQoXCJyZXF1ZXN0X2xvZ3NcIik7XG4gICAgICByZXR1cm4gaWRzWzBdITtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGFwcGVuZFN0ZXAocmVxdWVzdExvZ0lkOiBudW1iZXIsIHN0ZXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuICAgIHdkYi51YlJlZ2lzdGVyKFwicmVxdWVzdF9sb2dfc3RlcHNcIiwgeyByZXF1ZXN0X2xvZ19pZDogcmVxdWVzdExvZ0lkLCAuLi5zdGVwIH0pO1xuICAgIHJldHVybiB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgY29uc3QgaWRzID0gYXdhaXQgdHJ4LnViVXBzZXJ0KFwicmVxdWVzdF9sb2dfc3RlcHNcIik7XG4gICAgICBpZiAoc3RlcC50eXBlID09PSBcInRvb2xfY2FsbFwiKSB7XG4gICAgICAgIGF3YWl0IHRyeC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpLndoZXJlKFwiaWRcIiwgcmVxdWVzdExvZ0lkKS5pbmNyZW1lbnQoXCJ0b29sX2NhbGxfY291bnRcIiwgMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaWRzWzBdITtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFJ1bihcbiAgICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgICBwYXJhbXM6IHtcbiAgICAgIHN0YXR1czogc3RyaW5nO1xuICAgICAgcmVzcG9uc2U/OiBzdHJpbmc7XG4gICAgICB0b2tlbl9uYW1lPzogc3RyaW5nO1xuICAgICAgaW5wdXRfdG9rZW5zPzogbnVtYmVyO1xuICAgICAgb3V0cHV0X3Rva2Vucz86IG51bWJlcjtcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zPzogbnVtYmVyO1xuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zPzogbnVtYmVyO1xuICAgICAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zPzogbnVtYmVyIHwgbnVsbDtcbiAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vucz86IG51bWJlciB8IG51bGw7XG4gICAgICBkdXJhdGlvbl9tcz86IG51bWJlcjtcbiAgICAgIHJlcXVlc3RlZF9tb2RlbF9uYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgIG1vZGVsX25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgc2VydmljZV90aWVyPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgIGZhbGxiYWNrX2NvdW50PzogbnVtYmVyIHwgbnVsbDtcbiAgICAgIGNvc3RfdXNkPzogbnVtYmVyIHwgbnVsbDtcbiAgICAgIGNvc3Rfc291cmNlPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgIGhpc3Rvcnk/OiB1bmtub3duO1xuICAgICAgZXJyb3JfbWVzc2FnZT86IHN0cmluZztcbiAgICAgIHRvb2xfY2FsbF9jb3VudD86IG51bWJlcjtcbiAgICAgIGltYWdlX2Nvc3RfdXNkPzogbnVtYmVyIHwgbnVsbDtcbiAgICAgIGltYWdlX2Nvc3RfbWV0aG9kPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgIGlzX2ltYWdlX2dlbmVyYXRpb24/OiBib29sZWFuO1xuICAgICAgcmVzcG9uc2VfanNvbl9vaz86IGJvb2xlYW4gfCBudWxsO1xuICAgIH0sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChwYXJhbXMuc3RhdHVzID09PSBcInN1Y2NlZWRlZFwiICYmICFwYXJhbXMudG9rZW5fbmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidG9rZW5OYW1lIGlzIHJlcXVpcmVkIGZvciBzdWNjZWVkZWQgcnVuc1wiKTtcbiAgICB9XG4gICAgY29uc3QgdXBkYXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgaWQ6IHJlcXVlc3RMb2dJZCwgc3RhdHVzOiBwYXJhbXMuc3RhdHVzIH07XG4gICAgY29uc3QgZmllbGRzID0gW1xuICAgICAgXCJyZXNwb25zZVwiLFxuICAgICAgXCJ0b2tlbl9uYW1lXCIsXG4gICAgICBcImlucHV0X3Rva2Vuc1wiLFxuICAgICAgXCJvdXRwdXRfdG9rZW5zXCIsXG4gICAgICBcImNhY2hlX3JlYWRfdG9rZW5zXCIsXG4gICAgICBcImNhY2hlX2NyZWF0aW9uX3Rva2Vuc1wiLFxuICAgICAgXCJjYWNoZV9jcmVhdGlvbl81bV90b2tlbnNcIixcbiAgICAgIFwiY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIsXG4gICAgICBcImR1cmF0aW9uX21zXCIsXG4gICAgICBcInJlcXVlc3RlZF9tb2RlbF9uYW1lXCIsXG4gICAgICBcIm1vZGVsX25hbWVcIixcbiAgICAgIFwic2VydmljZV90aWVyXCIsXG4gICAgICBcImZhbGxiYWNrX2NvdW50XCIsXG4gICAgICBcImNvc3RfdXNkXCIsXG4gICAgICBcImNvc3Rfc291cmNlXCIsXG4gICAgICBcImVycm9yX21lc3NhZ2VcIixcbiAgICAgIFwidG9vbF9jYWxsX2NvdW50XCIsXG4gICAgICBcImltYWdlX2Nvc3RfdXNkXCIsXG4gICAgICBcImltYWdlX2Nvc3RfbWV0aG9kXCIsXG4gICAgICBcImlzX2ltYWdlX2dlbmVyYXRpb25cIixcbiAgICAgIFwicmVzcG9uc2VfanNvbl9va1wiLFxuICAgIF0gYXMgY29uc3Q7XG4gICAgZmllbGRzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKHBhcmFtc1trZXldICE9PSB1bmRlZmluZWQpIHVwZGF0ZVtrZXldID0gcGFyYW1zW2tleV07XG4gICAgfSk7XG4gICAgaWYgKHBhcmFtcy5oaXN0b3J5ICE9PSB1bmRlZmluZWQpIHVwZGF0ZS5oaXN0b3J5ID0gcGFyYW1zLmhpc3Rvcnk7XG4gICAgdXBkYXRlLnR0ZnRfbXMgPSAoYXdhaXQgdGhpcy5maXJzdEdlbmVyYXRlU3RlcFR0ZnQocmVxdWVzdExvZ0lkKSkgPz8gMDtcblxuICAgIC8vIOyEnOuyhCBydW4g6rK966Gc64qUIHN0ZXAg7JeQ7IScIO2Zleygle2VnCBleGFjdCBjb3N0IOulvCDrhJjquLTri6QuIOyZuOu2gC9sZWdhY3kgY2FsbGVyIOqwgCDruYTsmqnsnYRcbiAgICAvLyDsg53rnrXtlZwg6rK97Jqw7JeQ66eMIOyggOyepeuQnCDrqqjrjbgrdXNhZ2Ug66GcIOqzhOyCsO2VnOuLpC5cbiAgICBpZiAoXG4gICAgICBwYXJhbXMuY29zdF91c2QgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcGFyYW1zLmlucHV0X3Rva2VucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBwYXJhbXMub3V0cHV0X3Rva2VucyAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCByb3cgPSBhd2FpdCB0aGlzLmdldFB1cmkoXCJyXCIpXG4gICAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAgIC5zZWxlY3QoeyBtb2RlbF9uYW1lOiBcIm1vZGVsX25hbWVcIiB9KVxuICAgICAgICAud2hlcmUoXCJpZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAgIC5maXJzdCgpO1xuICAgICAgY29uc3QgZWZmZWN0aXZlTW9kZWxOYW1lID0gcGFyYW1zLm1vZGVsX25hbWUgPz8gcm93Py5tb2RlbF9uYW1lO1xuICAgICAgaWYgKGVmZmVjdGl2ZU1vZGVsTmFtZSkge1xuICAgICAgICBjb25zdCBtb2RlbCA9IGNhbm9uaWNhbE1vZGVsTmFtZShlZmZlY3RpdmVNb2RlbE5hbWUpO1xuICAgICAgICBjb25zdCB1c2FnZSA9IG5vcm1hbGl6ZWRVc2FnZUZvckNvc3Qoe1xuICAgICAgICAgIHRva2VuX25hbWU6IHBhcmFtcy50b2tlbl9uYW1lLFxuICAgICAgICAgIG1vZGVsX25hbWU6IGVmZmVjdGl2ZU1vZGVsTmFtZSxcbiAgICAgICAgICBpbnB1dF90b2tlbnM6IHBhcmFtcy5pbnB1dF90b2tlbnMsXG4gICAgICAgICAgb3V0cHV0X3Rva2VuczogcGFyYW1zLm91dHB1dF90b2tlbnMsXG4gICAgICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IHBhcmFtcy5jYWNoZV9yZWFkX3Rva2VucyA/PyAwLFxuICAgICAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogcGFyYW1zLmNhY2hlX2NyZWF0aW9uX3Rva2VucyA/PyAwLFxuICAgICAgICAgIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2VuczogcGFyYW1zLmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyxcbiAgICAgICAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IHBhcmFtcy5jYWNoZV9jcmVhdGlvbl8xaF90b2tlbnMsXG4gICAgICAgIH0pO1xuICAgICAgICB1cGRhdGUuY29zdF91c2QgPSBNYXRoLnJvdW5kKFxuICAgICAgICAgIGNhbGN1bGF0ZUNvc3RVc2QobW9kZWwsIHtcbiAgICAgICAgICAgIGlucHV0VG9rZW5zOiB1c2FnZS5pbnB1dFRva2VucyxcbiAgICAgICAgICAgIG91dHB1dFRva2VuczogdXNhZ2Uub3V0cHV0VG9rZW5zLFxuICAgICAgICAgICAgY2FjaGVkSW5wdXRUb2tlbnM6IHVzYWdlLmNhY2hlZElucHV0VG9rZW5zLFxuICAgICAgICAgICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiB1c2FnZS5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMsXG4gICAgICAgICAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bTogdXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zNW0sXG4gICAgICAgICAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaDogdXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWgsXG4gICAgICAgICAgfSkgKiAxXzAwMF8wMDAsXG4gICAgICAgICk7XG4gICAgICAgIHVwZGF0ZS5jb3N0X3NvdXJjZSA9IFwicHJpY2luZ190YWJsZVwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG4gICAgd2RiLnViUmVnaXN0ZXIoXCJyZXF1ZXN0X2xvZ3NcIiwgdXBkYXRlKTtcbiAgICBhd2FpdCB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgYXdhaXQgdHJ4LnViVXBzZXJ0KFwicmVxdWVzdF9sb2dzXCIpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZmlyc3RHZW5lcmF0ZVN0ZXBUdGZ0KHJlcXVlc3RMb2dJZDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG4gICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5nZXRQdXJpKFwiclwiKVxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgLnNlbGVjdCh7IHR0ZnRfbXM6IFwidHRmdF9tc1wiIH0pXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19pZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAud2hlcmUoXCJ0eXBlXCIsIFwiZ2VuZXJhdGVcIilcbiAgICAgIC53aGVyZShcInR0ZnRfbXNcIiwgXCIhPVwiLCBudWxsKVxuICAgICAgLm9yZGVyQnkoXCJzdGVwX2luZGV4XCIsIFwiYXNjXCIpXG4gICAgICAub3JkZXJCeShcImlkXCIsIFwiYXNjXCIpXG4gICAgICAuZmlyc3QoKTtcbiAgICByZXR1cm4gcm93Py50dGZ0X21zID09PSBudWxsIHx8IHJvdz8udHRmdF9tcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IE51bWJlcihyb3cudHRmdF9tcyk7XG4gIH1cblxuICBhc3luYyBhZ2dyZWdhdGVTdGVwVXNhZ2UocmVxdWVzdExvZ0lkOiBudW1iZXIpOiBQcm9taXNlPFJlcXVlc3RMb2dTdGVwQWdncmVnYXRlPiB7XG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IHRoaXMuZ2V0UHVyaShcInJcIilcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgIC5zZWxlY3QoU1RFUF9BR0dSRUdBVEVfU0VMRUNUKVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgLndoZXJlKFwidHlwZVwiLCBcImdlbmVyYXRlXCIpO1xuICAgIHJldHVybiBhZ2dyZWdhdGVHZW5lcmF0ZVN0ZXBSb3dzKHJvd3MgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBzdGFsZSBjYW5kaWRhdGVzLCB0aGVuIGV4cGlyZXMgZWFjaCBydW4gaW4gaXRzIG93biBzaG9ydCB0cmFuc2FjdGlvbi5cbiAgICogVGhlIGNhbmRpZGF0ZSBxdWVyeSBpcyBvbmx5IGEgaGludDsgdGhlIHRyYW5zYWN0aW9uYWwgb3BlcmF0aW9uIHJlY2hlY2tzIGl0XG4gICAqIGFmdGVyIGFjcXVpcmluZyB0aGUgYWR2aXNvcnkgbG9jayBzaGFyZWQgd2l0aCB0b29sIGZvbGxvdy11cHMuXG4gICAqL1xuICBhc3luYyBleHBpcmVTdGFsZVRvb2xXYWl0aW5nUnVucyhcbiAgICB0aHJlc2hvbGRNczogbnVtYmVyLFxuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nLFxuICAgIGxpbWl0OiBudW1iZXIgPSAxMCxcbiAgKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICAgIGNvbnN0IHRocmVzaG9sZCA9IG5ldyBEYXRlKERhdGUubm93KCkgLSB0aHJlc2hvbGRNcyk7XG4gICAgY29uc3QgY2FuZGlkYXRlSWRzID0gYXdhaXQgdGhpcy5maW5kU3RhbGVUb29sV2FpdGluZ1J1bkNhbmRpZGF0ZXModGhyZXNob2xkLCBsaW1pdCk7XG4gICAgY29uc3QgZXhwaXJlZElkczogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RMb2dJZCBvZiBjYW5kaWRhdGVJZHMpIHtcbiAgICAgIGlmIChhd2FpdCB0aGlzLnRyeUV4cGlyZVN0YWxlVG9vbFdhaXRpbmdSdW4ocmVxdWVzdExvZ0lkLCB0aHJlc2hvbGQsIGVycm9yTWVzc2FnZSkpIHtcbiAgICAgICAgZXhwaXJlZElkcy5wdXNoKHJlcXVlc3RMb2dJZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBleHBpcmVkSWRzO1xuICB9XG5cbiAgYXN5bmMgZmluZFN0YWxlVG9vbFdhaXRpbmdSdW5DYW5kaWRhdGVzKHRocmVzaG9sZDogRGF0ZSwgbGltaXQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyW10+IHtcbiAgICBjb25zdCByb3dzID0gYXdhaXQgdGhpcy5nZXRQdXJpKFwid1wiKVxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgIC5qb2luKFwicmVxdWVzdF9sb2dfc3RlcHNcIiwgXCJyZXF1ZXN0X2xvZ3MuaWRcIiwgXCJyZXF1ZXN0X2xvZ19zdGVwcy5yZXF1ZXN0X2xvZ19pZFwiKVxuICAgICAgLmRpc3RpbmN0KFwicmVxdWVzdF9sb2dzLmlkXCIpXG4gICAgICAuc2VsZWN0KHsgaWQ6IFwicmVxdWVzdF9sb2dzLmlkXCIgfSlcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9ncy5zdGF0dXNcIiwgXCJydW5uaW5nXCIpXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19zdGVwcy50eXBlXCIsIFwidG9vbF9jYWxsXCIpXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19zdGVwcy5jcmVhdGVkX2F0XCIsIFwiPFwiLCB0aHJlc2hvbGQpXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19zdGVwcy50b29sX3Jlc3VsdFwiLCBudWxsKVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfc3RlcHMuZXJyb3JcIiwgbnVsbClcbiAgICAgIC5saW1pdChsaW1pdCk7XG4gICAgcmV0dXJuIHJvd3MubWFwKCh7IGlkIH0pID0+IGlkKTtcbiAgfVxuXG4gIEB0cmFuc2FjdGlvbmFsKHsgZGJQcmVzZXQ6IFwid1wiIH0pXG4gIGFzeW5jIHRyeUV4cGlyZVN0YWxlVG9vbFdhaXRpbmdSdW4oXG4gICAgcmVxdWVzdExvZ0lkOiBudW1iZXIsXG4gICAgdGhyZXNob2xkOiBEYXRlLFxuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuICAgIGNvbnN0IGxvY2tSZXN1bHQgPSAoYXdhaXQgd2RiLmtuZXgucmF3KFwiU0VMRUNUIHBnX3RyeV9hZHZpc29yeV94YWN0X2xvY2soPywgPykgQVMgYWNxdWlyZWRcIiwgW1xuICAgICAgUkVRVUVTVF9MT0dfUlVOX0xPQ0tfQ0xBU1NfSUQsXG4gICAgICByZXF1ZXN0TG9nSWQsXG4gICAgXSkpIGFzIHsgcm93cz86IEFycmF5PHsgYWNxdWlyZWQ/OiBib29sZWFuIH0+IH07XG4gICAgaWYgKGxvY2tSZXN1bHQucm93cz8uWzBdPy5hY3F1aXJlZCAhPT0gdHJ1ZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gVGhlIGZvbGxvdy11cCBwYXRoIHVzZXMgdGhlIHNhbWUgd3JpdGVyIHRyYW5zYWN0aW9uIGxvY2suIFJlY2hlY2sgYWZ0ZXJcbiAgICAvLyBsb2NraW5nIHNvIGEgcmVzdWx0IGNvbW1pdHRlZCBkdXJpbmcgY2FuZGlkYXRlIGRpc2NvdmVyeSBtYWtlcyB0aGlzIGEgbm8tb3AuXG4gICAgY29uc3QgdW5yZXNvbHZlZCA9IGF3YWl0IHdkYlxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgLnNlbGVjdCh7IGlkOiBcImlkXCIgfSlcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC53aGVyZShcInR5cGVcIiwgXCJ0b29sX2NhbGxcIilcbiAgICAgIC53aGVyZShcImNyZWF0ZWRfYXRcIiwgXCI8XCIsIHRocmVzaG9sZClcbiAgICAgIC53aGVyZShcInRvb2xfcmVzdWx0XCIsIG51bGwpXG4gICAgICAud2hlcmUoXCJlcnJvclwiLCBudWxsKVxuICAgICAgLmZpcnN0KCk7XG4gICAgaWYgKCF1bnJlc29sdmVkKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBzdGVwUm93cyA9IGF3YWl0IHdkYlxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgLnNlbGVjdChTVEVQX0FHR1JFR0FURV9TRUxFQ1QpXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19pZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAud2hlcmUoXCJ0eXBlXCIsIFwiZ2VuZXJhdGVcIik7XG4gICAgY29uc3QgYWdncmVnYXRlID0gYWdncmVnYXRlR2VuZXJhdGVTdGVwUm93cyhzdGVwUm93cyBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pO1xuICAgIGNvbnN0IGZpcnN0VHRmdCA9IGF3YWl0IHdkYlxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgLnNlbGVjdCh7IHR0ZnRfbXM6IFwidHRmdF9tc1wiIH0pXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19pZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAud2hlcmUoXCJ0eXBlXCIsIFwiZ2VuZXJhdGVcIilcbiAgICAgIC53aGVyZShcInR0ZnRfbXNcIiwgXCIhPVwiLCBudWxsKVxuICAgICAgLm9yZGVyQnkoXCJzdGVwX2luZGV4XCIsIFwiYXNjXCIpXG4gICAgICAub3JkZXJCeShcImlkXCIsIFwiYXNjXCIpXG4gICAgICAuZmlyc3QoKTtcblxuICAgIGNvbnN0IHVwZGF0ZWQgPSBhd2FpdCB3ZGJcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAud2hlcmUoXCJpZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAud2hlcmUoXCJzdGF0dXNcIiwgXCJydW5uaW5nXCIpXG4gICAgICAudXBkYXRlKHtcbiAgICAgICAgc3RhdHVzOiBcImVycm9yXCIsXG4gICAgICAgIGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgaW5wdXRfdG9rZW5zOiBhZ2dyZWdhdGUuaW5wdXRfdG9rZW5zLFxuICAgICAgICBvdXRwdXRfdG9rZW5zOiBhZ2dyZWdhdGUub3V0cHV0X3Rva2VucyxcbiAgICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9yZWFkX3Rva2VucyxcbiAgICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBhZ2dyZWdhdGUuY2FjaGVfY3JlYXRpb25fdG9rZW5zLFxuICAgICAgICAuLi4oYWdncmVnYXRlLmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB7IGNhY2hlX2NyZWF0aW9uXzVtX3Rva2VuczogYWdncmVnYXRlLmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLihhZ2dyZWdhdGUuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHsgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zOiBhZ2dyZWdhdGUuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgZHVyYXRpb25fbXM6IGFnZ3JlZ2F0ZS5kdXJhdGlvbl9tcyxcbiAgICAgICAgZmFsbGJhY2tfY291bnQ6IGFnZ3JlZ2F0ZS5mYWxsYmFja19jb3VudCxcbiAgICAgICAgY29zdF91c2Q6IGFnZ3JlZ2F0ZS5jb3N0X3VzZCxcbiAgICAgICAgLi4uKGFnZ3JlZ2F0ZS5jb3N0X3NvdXJjZSAhPT0gdW5kZWZpbmVkID8geyBjb3N0X3NvdXJjZTogYWdncmVnYXRlLmNvc3Rfc291cmNlIH0gOiB7fSksXG4gICAgICAgIHR0ZnRfbXM6XG4gICAgICAgICAgZmlyc3RUdGZ0Py50dGZ0X21zID09PSBudWxsIHx8IGZpcnN0VHRmdD8udHRmdF9tcyA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogTnVtYmVyKGZpcnN0VHRmdC50dGZ0X21zKSxcbiAgICAgIH0pO1xuICAgIHJldHVybiB1cGRhdGVkID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGEgbmF0aXZlIHFncmlkIHRvb2wgZm9sbG93LXVwIGFuZCBjb21wdXRlcyBpdHMgbmV4dCBzdGVwIGluZGV4IHdoaWxlXG4gICAqIGhvbGRpbmcgdGhlIHBlci1ydW4gYWR2aXNvcnkgbG9jayBzaGFyZWQgd2l0aCBzdGFsZSBjbGVhbnVwLlxuICAgKi9cbiAgQHRyYW5zYWN0aW9uYWwoeyBkYlByZXNldDogXCJ3XCIgfSlcbiAgYXN5bmMgY29udGludWVUb29sUnVuKFxuICAgIHJlcXVlc3RMb2dJZDogbnVtYmVyLFxuICAgIHRvb2xSZXN1bHRzOiBUb29sUmVzdWx0Q29udGludWF0aW9uW10sXG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcbiAgICBhd2FpdCB3ZGIua25leC5yYXcoXCJTRUxFQ1QgcGdfYWR2aXNvcnlfeGFjdF9sb2NrKD8sID8pXCIsIFtcbiAgICAgIFJFUVVFU1RfTE9HX1JVTl9MT0NLX0NMQVNTX0lELFxuICAgICAgcmVxdWVzdExvZ0lkLFxuICAgIF0pO1xuXG4gICAgY29uc3QgcnVuID0gYXdhaXQgd2RiXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgLnNlbGVjdCh7IHN0YXR1czogXCJzdGF0dXNcIiB9KVxuICAgICAgLndoZXJlKFwiaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgLmZpcnN0KCk7XG4gICAgaWYgKCFydW4pIHRocm93IG5ldyBFcnJvcihgcmVxdWVzdCBsb2cgcnVuICR7cmVxdWVzdExvZ0lkfSBub3QgZm91bmRgKTtcbiAgICBpZiAocnVuLnN0YXR1cyAhPT0gXCJydW5uaW5nXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcmVxdWVzdCBsb2cgcnVuICR7cmVxdWVzdExvZ0lkfSBpcyBhbHJlYWR5ICR7cnVuLnN0YXR1c31gKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiB0b29sUmVzdWx0cykge1xuICAgICAgYXdhaXQgd2RiXG4gICAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgICAud2hlcmUoXCJ0b29sX2NhbGxfaWRcIiwgcmVzdWx0LnRvb2xDYWxsSWQpXG4gICAgICAgIC53aGVyZShcInR5cGVcIiwgXCJ0b29sX2NhbGxcIilcbiAgICAgICAgLnVwZGF0ZShyZXN1bHQuaXNFcnJvciA/IHsgZXJyb3I6IHJlc3VsdC5vdXRwdXQgfSA6IHsgdG9vbF9yZXN1bHQ6IHJlc3VsdC5vdXRwdXQgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm93ID0gYXdhaXQgd2RiXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAuc2VsZWN0KHsgbWF4X3N0ZXA6IFB1cmkubWF4KFwic3RlcF9pbmRleFwiKSB9KVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgLmZpcnN0KCk7XG4gICAgcmV0dXJuIChyb3c/Lm1heF9zdGVwID8/IC0xKSArIDE7XG4gIH1cblxuICAvKipcbiAgICog7ZmU66m0IO2RnOyLnOyaqSDstJ0g67mE7JqpLiDrqqnroZ3qs7wg6rCZ7J2AIO2VhO2EsOulvCDsoIHsmqntlZzri6QuXG4gICAqXG4gICAqIGRyaXZlcuyZgCBpbWFnZSDruYTsmqnsnYQg7ZWo6ruYIFNVTe2VnCDrkqQsIGxlZ2FjeSBkcml2ZXIg67mE7Jqp7J2YIOywqOyVoeunjCDrs7TsoJXtlZzri6QuXG4gICAqIOydtOuvuOyngCDruYTsmqnsnYAg7KCA7J6l6rCS7J2EIO2VnCDrsojrp4wg7Y+s7ZWo7ZWY6rOgIOqwgOqyqe2RnCDsnqzqs4TsgrAg64yA7IOB7JeQ7IScIOygnOyZuO2VnOuLpC5cbiAgICpcbiAgICogbGVnYWN5IOuztOygleydhCDrgqjqsqjrkZQg7J207JygOiDrsLHtlYTroZwg6riw7KG0IGxlZ2FjeSDripQgMCDsnbQg65CY7JeI7KeA66eMLCDsmbjrtoAg66Gc6rGw6rCAXG4gICAqIGBBcHBlbmRTdGVwSW5wdXRgL2BGaW5pc2hSdW5JbnB1dGAg7Jy866GcIGNvc3RTb3VyY2Ug7JeG7J20IOuEo+ycvOuptCDri6Tsi5wg7IOd6ri4IOyImCDsnojri6QuXG4gICAqIOq3uOufsCByb3cg64qUIOyggOyepeqwkiDrjIDsi6Ag7ZiE7J6sIOqwgOqyqe2RnCDsnqzqs4TsgrDqsJLsnbQg66ee7Jy866+A66GcIOywqOyVoeydhCDrjZTtlZzri6QuXG4gICAqXG4gICAqIO2VhO2EsCDsobDqsbTsnYQg7Jes6riw7IScIOuLpOyLnCDqtaztmITtlZjsp4Ag7JWK6rOgIGBhcHBseUxpc3RGaWx0ZXJzYCDrpbwg6rO17Jyg7ZWY64qUIOqyg+ydtCDtlbXsi6zsnbTri6Qg4oCUXG4gICAqIOuRkCDsv7zrpqzqsIAg6rCB7J6QIO2VhO2EsOulvCDqsIDsp4DrqbQg7ZmU66m07JeQ7IScIO2VhO2EsOulvCDqsbjsl4jsnYQg65WMIO2WiSDsiJjsmYAg67mE7Jqp7J20IOyhsOyaqe2eiCDslrTquIvrgpzri6QuXG4gICAqL1xuICBhc3luYyB0b3RhbENvc3QoXG4gICAgcmF3UGFyYW1zOiBSZXF1ZXN0TG9nTGlzdFBhcmFtcyA9IHsgbnVtOiAwLCBwYWdlOiAxIH0sXG4gICk6IFByb21pc2U8eyB1c2Q6IG51bWJlcjsgdW5rbm93bkltYWdlQ29zdENvdW50OiBudW1iZXIgfT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIG51bTogMCxcbiAgICAgIHBhZ2U6IDEsXG4gICAgICBzZWFyY2g6IFwiaWRcIiBhcyBjb25zdCxcbiAgICAgIC4uLnJhd1BhcmFtcyxcbiAgICB9IHNhdGlzZmllcyBSZXF1ZXN0TG9nTGlzdFBhcmFtcztcblxuICAgIGNvbnN0IHsgcWI6IHRvdGFsUWIgfSA9IHRoaXMuZ2V0U3Vic2V0UXVlcmllcyhcIkNcIik7XG4gICAgdGhpcy5hcHBseUxpc3RGaWx0ZXJzKHRvdGFsUWIsIHBhcmFtcyk7XG4gICAgY29uc3Qgc29uYW11RmlsdGVyID0gcGFyYW1zLnNvbmFtdUZpbHRlclxuICAgICAgPyBub3JtYWxpemVGaWx0ZXJRdWVyeShwYXJhbXMuc29uYW11RmlsdGVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5hcHBseVNvbmFtdUZpbHRlcnModG90YWxRYiwgc29uYW11RmlsdGVyKTtcbiAgICAvLyBzdWJzZXQgcWIg64qUIOy7rOufvCDrqqnroZ3snbQg7J2066+4IFNFTEVDVCDsl5Ag67CV7ZiAIOyeiOyWtCDsp5Hqs4Trpbwg7Ja57Jy866m0IEdST1VQIEJZIOyXkOufrOqwgCDrgpzri6QuXG4gICAgLy8gZXhlY3V0ZUNvdW50UXVlcnkg7JmAIOqwmeydgCDrsKnsi53snLzroZwgc2VsZWN0IOulvCDruYTsmrDqs6Ag7KeR6rOE66eMIOuCqOq4tOuLpC5cbiAgICBjb25zdCBzdG9yZWQgPSBhd2FpdCB0b3RhbFFiXG4gICAgICAuY2xlYXIoXCJzZWxlY3RcIilcbiAgICAgIC8vIOydjOyImCDsoIDsnqXqsJIo6rO86rGwIOuyhOq3uCnsnYAgMCDsnLzroZwg64iM65+s7IScIOuNlO2VnOuLpCDigJQgSlMg7Kq9IE1hdGgubWF4IOyZgCDqsJnsnYAg6rec7LmZLlxuICAgICAgLnNlbGVjdCh7XG4gICAgICAgIHRvdGFsOiBQdXJpLnJhd051bWJlcihcbiAgICAgICAgICBcIkNPQUxFU0NFKFNVTShHUkVBVEVTVChyZXF1ZXN0X2xvZ3MuY29zdF91c2QsIDApICsgQ09BTEVTQ0UocmVxdWVzdF9sb2dzLmltYWdlX2Nvc3RfdXNkLCAwKSksIDApXCIsXG4gICAgICAgICksXG4gICAgICAgIHVua25vd25JbWFnZUNvc3RDb3VudDogUHVyaS5yYXdOdW1iZXIoXG4gICAgICAgICAgXCJDT1VOVCgqKSBGSUxURVIgKFdIRVJFIHJlcXVlc3RfbG9ncy5pc19pbWFnZV9nZW5lcmF0aW9uID0gdHJ1ZSBBTkQgcmVxdWVzdF9sb2dzLmltYWdlX2Nvc3RfdXNkIElTIE5VTEwpXCIsXG4gICAgICAgICksXG4gICAgICB9KVxuICAgICAgLmZpcnN0KCk7XG5cbiAgICBjb25zdCB7IHFiOiBsZWdhY3lRYiB9ID0gdGhpcy5nZXRTdWJzZXRRdWVyaWVzKFwiQ1wiKTtcbiAgICB0aGlzLmFwcGx5TGlzdEZpbHRlcnMobGVnYWN5UWIsIHBhcmFtcyk7XG4gICAgdGhpcy5hcHBseVNvbmFtdUZpbHRlcnMobGVnYWN5UWIsIHNvbmFtdUZpbHRlcik7XG4gICAgY29uc3QgbGVnYWN5Um93cyA9IGF3YWl0IGxlZ2FjeVFiXG4gICAgICAud2hlcmVSYXcoXCJyZXF1ZXN0X2xvZ3MuY29zdF9zb3VyY2UgSVMgTlVMTCBPUiByZXF1ZXN0X2xvZ3MuY29zdF91c2QgSVMgTlVMTFwiKVxuICAgICAgLmNsZWFyKFwic2VsZWN0XCIpXG4gICAgICAuc2VsZWN0KHtcbiAgICAgICAgdG9rZW5fbmFtZTogXCJyZXF1ZXN0X2xvZ3MudG9rZW5fbmFtZVwiLFxuICAgICAgICBtb2RlbF9uYW1lOiBcInJlcXVlc3RfbG9ncy5tb2RlbF9uYW1lXCIsXG4gICAgICAgIGlucHV0X3Rva2VuczogXCJyZXF1ZXN0X2xvZ3MuaW5wdXRfdG9rZW5zXCIsXG4gICAgICAgIG91dHB1dF90b2tlbnM6IFwicmVxdWVzdF9sb2dzLm91dHB1dF90b2tlbnNcIixcbiAgICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IFwicmVxdWVzdF9sb2dzLmNhY2hlX3JlYWRfdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogXCJyZXF1ZXN0X2xvZ3MuY2FjaGVfY3JlYXRpb25fdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2VuczogXCJyZXF1ZXN0X2xvZ3MuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2VuczogXCJyZXF1ZXN0X2xvZ3MuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIsXG4gICAgICAgIGNvc3RfdXNkOiBcInJlcXVlc3RfbG9ncy5jb3N0X3VzZFwiLFxuICAgICAgfSk7XG5cbiAgICBjb25zdCBzdG9yZWRUb3RhbCA9IE51bWJlcihzdG9yZWQ/LnRvdGFsID8/IDApIC8gTUlDUk9fVVNEO1xuXG4gICAgLy8gbGVnYWN5IHJvdyDripQg7JyEIFNVTSDsl5Ag7KCA7J6l6rCS7Jy866GcIOydtOuvuCDtj6ztlajrkJjslrQg7J6I64ukLiDsnqzqs4TsgrDqsJLqs7zsnZgg7LCo7JWh66eMIOuNlO2VnOuLpC5cbiAgICBjb25zdCB1c2QgPSBsZWdhY3lSb3dzLnJlZHVjZSgoc3VtLCByb3cpID0+IHtcbiAgICAgIGNvbnN0IGFscmVhZHlTdW1tZWQgPSBNYXRoLm1heChyb3cuY29zdF91c2QgPz8gMCwgMCkgLyBNSUNST19VU0Q7XG4gICAgICBjb25zdCB1c2FnZSA9IG5vcm1hbGl6ZWRVc2FnZUZvckNvc3Qocm93KTtcbiAgICAgIGlmICghdXNhZ2UubW9kZWwpIHJldHVybiBzdW07XG4gICAgICByZXR1cm4gKFxuICAgICAgICBzdW0gK1xuICAgICAgICBjYWxjdWxhdGVDb3N0VXNkKHVzYWdlLm1vZGVsLCB7XG4gICAgICAgICAgaW5wdXRUb2tlbnM6IHVzYWdlLmlucHV0VG9rZW5zLFxuICAgICAgICAgIG91dHB1dFRva2VuczogdXNhZ2Uub3V0cHV0VG9rZW5zLFxuICAgICAgICAgIGNhY2hlZElucHV0VG9rZW5zOiB1c2FnZS5jYWNoZWRJbnB1dFRva2VucyxcbiAgICAgICAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM6IHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VucyxcbiAgICAgICAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bTogdXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zNW0sXG4gICAgICAgICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWg6IHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczFoLFxuICAgICAgICB9KSAtXG4gICAgICAgIGFscmVhZHlTdW1tZWRcbiAgICAgICk7XG4gICAgfSwgc3RvcmVkVG90YWwpO1xuICAgIHJldHVybiB7IHVzZCwgdW5rbm93bkltYWdlQ29zdENvdW50OiBOdW1iZXIoc3RvcmVkPy51bmtub3duSW1hZ2VDb3N0Q291bnQgPz8gMCkgfTtcbiAgfVxuXG4gIGFzeW5jIGRpc3RpbmN0UHJvamVjdE5hbWVzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCByb3dzID0gYXdhaXQgdGhpcy5nZXRQdXJpKFwiclwiKVxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgIC5kaXN0aW5jdChcInByb2plY3RfbmFtZVwiKVxuICAgICAgLndoZXJlKFwicHJvamVjdF9uYW1lXCIsIFwiIT1cIiwgbnVsbClcbiAgICAgIC5vcmRlckJ5KFwicHJvamVjdF9uYW1lXCIsIFwiYXNjXCIpXG4gICAgICAuc2VsZWN0KHtcbiAgICAgICAgcHJvamVjdF9uYW1lOiBcInByb2plY3RfbmFtZVwiLFxuICAgICAgfSk7XG4gICAgcmV0dXJuIHJvd3MubWFwKChyKSA9PiByLnByb2plY3RfbmFtZSEpO1xuICB9XG5cbiAgYXN5bmMgZGlzdGluY3RNb2RlbE5hbWVzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCByb3dzID0gYXdhaXQgdGhpcy5nZXRQdXJpKFwiclwiKVxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgIC5kaXN0aW5jdChcIm1vZGVsX25hbWVcIilcbiAgICAgIC53aGVyZShcIm1vZGVsX25hbWVcIiwgXCIhPVwiLCBudWxsKVxuICAgICAgLm9yZGVyQnkoXCJtb2RlbF9uYW1lXCIsIFwiYXNjXCIpXG4gICAgICAuc2VsZWN0KHtcbiAgICAgICAgbW9kZWxfbmFtZTogXCJtb2RlbF9uYW1lXCIsXG4gICAgICB9KTtcbiAgICByZXR1cm4gcm93cy5tYXAoKHIpID0+IHIubW9kZWxfbmFtZSEpO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIGRlbChpZHM6IG51bWJlcltdKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuXG4gICAgLy8gdHJhbnNhY3Rpb25cbiAgICBhd2FpdCB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgYXdhaXQgdHJ4XG4gICAgICAgIC50YWJsZShcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAgIC53aGVyZUluKFwicmVxdWVzdF9sb2dfc3RlcHMucmVxdWVzdF9sb2dfaWRcIiwgaWRzKVxuICAgICAgICAuZGVsZXRlKCk7XG4gICAgICByZXR1cm4gdHJ4LnRhYmxlKFwicmVxdWVzdF9sb2dzXCIpLndoZXJlSW4oXCJyZXF1ZXN0X2xvZ3MuaWRcIiwgaWRzKS5kZWxldGUoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBpZHMubGVuZ3RoO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nTW9kZWwgPSBuZXcgUmVxdWVzdExvZ01vZGVsQ2xhc3MoKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQThCQSxNQUFhLFlBQVk7QUFDekIsTUFBTSxnQ0FBZ0M7QUFDdEMsTUFBTSx3QkFBd0I7QUFFOUIsU0FBUyxrQkFBa0IsT0FBd0M7Q0FDakUsSUFBSSxDQUFDLE9BQU8sT0FBTztDQUNuQixJQUFJLE9BQU8sVUFBVSxVQUFVLE9BQU87Q0FDdEMsSUFBSTtFQUNGLE9BQU8sS0FBSyxNQUFNLEtBQUs7Q0FDekIsUUFBUTtFQUNOLE9BQU87Q0FDVDtBQUNGO0FBcUJBLE1BQU0sd0JBQXdCO0NBQzVCLGNBQWM7Q0FDZCxlQUFlO0NBQ2YsbUJBQW1CO0NBQ25CLHVCQUF1QjtDQUN2QiwwQkFBMEI7Q0FDMUIsMEJBQTBCO0NBQzFCLGFBQWE7Q0FDYixnQkFBZ0I7Q0FDaEIsVUFBVTtDQUNWLGFBQWE7QUFDZjtBQUVBLFNBQVMsMEJBQTBCLE1BQStEO0NBQ2hHLE1BQU0sT0FBTyxVQUNYLEtBQUssUUFBUSxPQUFPLFFBQVEsUUFB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
|
|
594
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1sb2cubW9kZWwuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3JlcXVlc3QtbG9nL3JlcXVlc3QtbG9nLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzb25TY2hlbWFUb1pvZCB9IGZyb20gXCJqc29uLXNjaGVtYS10by16b2RcIjtcbmltcG9ydCB7XG4gIGFwaSxcbiAgYXNBcnJheSxcbiAgQmFkUmVxdWVzdEV4Y2VwdGlvbixcbiAgQmFzZU1vZGVsQ2xhc3MsXG4gIHR5cGUgTGlzdFJlc3VsdCxcbiAgbm9ybWFsaXplRmlsdGVyUXVlcnksXG4gIE5vdEZvdW5kRXhjZXB0aW9uLFxuICBQdXJpLFxuICB0cmFuc2FjdGlvbmFsLFxufSBmcm9tIFwic29uYW11XCI7XG5cbmltcG9ydCB7IFNEIH0gZnJvbSBcIi4uLy4uL2kxOG4vc2QuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgeyBjYWxjdWxhdGVDb3N0VXNkIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3Byb3ZpZGVycy9jb21tb24vbW9kZWwtY29zdFwiO1xuaW1wb3J0IHsgdHlwZSBSZXF1ZXN0TG9nU3Vic2V0S2V5LCB0eXBlIFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nIH0gZnJvbSBcIi4uL3NvbmFtdS5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IHJlcXVlc3RMb2dMb2FkZXJRdWVyaWVzLCByZXF1ZXN0TG9nU3Vic2V0UXVlcmllcyB9IGZyb20gXCIuLi9zb25hbXUuZ2VuZXJhdGVkLnNzb1wiO1xuaW1wb3J0IHtcbiAgcmVuZGVySnNvblNjaGVtYVpvZFNoYXBlVGV4dCxcbiAgcmVuZGVyUGFyc2VkSnNvblNjaGVtYVR5cGVUZXh0LFxufSBmcm9tIFwiLi9qc29uLXNjaGVtYS10eXBlLXRleHRcIjtcbmltcG9ydCB7XG4gIHR5cGUgUmVxdWVzdExvZ0xpc3RQYXJhbXMsXG4gIHR5cGUgUmVxdWVzdExvZ1NhdmVQYXJhbXMsXG4gIHR5cGUgSW5wdXRJbWFnZXMsXG4gIHR5cGUgVG9vbERlZmluaXRpb25zLFxuICB0eXBlIFRvb2xWaWV3LFxufSBmcm9tIFwiLi9yZXF1ZXN0LWxvZy50eXBlc1wiO1xuaW1wb3J0IHsgZm9ybWF0Wm9kQ29kZSB9IGZyb20gXCIuL3pvZC1jb2RlLWZvcm1hdFwiO1xuXG4vLyBjb3N0X3VzZOuKlCDsoJXsiJggbWljcm8tVVNE66GcIOyggOyepS4g7Iuk7KCcIFVTRCA9IGNvc3RfdXNkIC8gTUlDUk9fVVNELlxuZXhwb3J0IGNvbnN0IE1JQ1JPX1VTRCA9IDFfMDAwXzAwMDtcbmNvbnN0IFJFUVVFU1RfTE9HX1JVTl9MT0NLX0NMQVNTX0lEID0gNzE4O1xuY29uc3QgVE9PTF9FTlVNX1ZBTFVFX0xJTUlUID0gNjtcblxuZnVuY3Rpb24gZGVjb2RlU3RvcmVkVG9vbHModmFsdWU6IHVua25vd24pOiBUb29sRGVmaW5pdGlvbnMgfCBudWxsIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHJldHVybiB2YWx1ZSBhcyBUb29sRGVmaW5pdGlvbnM7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UodmFsdWUpIGFzIFRvb2xEZWZpbml0aW9ucztcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxudHlwZSBUb29sUmVzdWx0Q29udGludWF0aW9uID0ge1xuICB0b29sQ2FsbElkOiBzdHJpbmc7XG4gIG91dHB1dDogc3RyaW5nO1xuICBpc0Vycm9yPzogYm9vbGVhbjtcbn07XG5cbnR5cGUgUmVxdWVzdExvZ1N0ZXBBZ2dyZWdhdGUgPSB7XG4gIGlucHV0X3Rva2VuczogbnVtYmVyO1xuICBvdXRwdXRfdG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlX3JlYWRfdG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogbnVtYmVyO1xuICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM/OiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vucz86IG51bWJlcjtcbiAgZHVyYXRpb25fbXM6IG51bWJlcjtcbiAgZmFsbGJhY2tfY291bnQ6IG51bWJlcjtcbiAgY29zdF91c2Q6IG51bWJlcjtcbiAgY29zdF9zb3VyY2U/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBTVEVQX0FHR1JFR0FURV9TRUxFQ1QgPSB7XG4gIGlucHV0X3Rva2VuczogXCJpbnB1dF90b2tlbnNcIixcbiAgb3V0cHV0X3Rva2VuczogXCJvdXRwdXRfdG9rZW5zXCIsXG4gIGNhY2hlX3JlYWRfdG9rZW5zOiBcImNhY2hlX3JlYWRfdG9rZW5zXCIsXG4gIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogXCJjYWNoZV9jcmVhdGlvbl90b2tlbnNcIixcbiAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiBcImNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuc1wiLFxuICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IFwiY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIsXG4gIGR1cmF0aW9uX21zOiBcImR1cmF0aW9uX21zXCIsXG4gIGZhbGxiYWNrX2NvdW50OiBcImZhbGxiYWNrX2NvdW50XCIsXG4gIGNvc3RfdXNkOiBcImNvc3RfdXNkXCIsXG4gIGNvc3Rfc291cmNlOiBcImNvc3Rfc291cmNlXCIsXG59IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBhZ2dyZWdhdGVHZW5lcmF0ZVN0ZXBSb3dzKHJvd3M6IEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pik6IFJlcXVlc3RMb2dTdGVwQWdncmVnYXRlIHtcbiAgY29uc3Qgc3VtID0gKGZpZWxkOiBzdHJpbmcpOiBudW1iZXIgPT5cbiAgICByb3dzLnJlZHVjZSgodG90YWwsIHJvdykgPT4gdG90YWwgKyBOdW1iZXIocm93W2ZpZWxkXSA/PyAwKSwgMCk7XG4gIGNvbnN0IG9wdGlvbmFsU3VtID0gKGZpZWxkOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQgPT5cbiAgICByb3dzLnNvbWUoKHJvdykgPT4gcm93W2ZpZWxkXSAhPT0gbnVsbCAmJiByb3dbZmllbGRdICE9PSB1bmRlZmluZWQpID8gc3VtKGZpZWxkKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgY29sbGFwc2UgPSAoZmllbGQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3QgdmFsdWVzID0gW1xuICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgcm93c1xuICAgICAgICAgIC5tYXAoKHJvdykgPT4gcm93W2ZpZWxkXSlcbiAgICAgICAgICAuZmlsdGVyKCh2YWx1ZSk6IHZhbHVlIGlzIHN0cmluZyA9PiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUubGVuZ3RoID4gMCksXG4gICAgICApLFxuICAgIF07XG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHZhbHVlcy5sZW5ndGggPT09IDEgPyB2YWx1ZXNbMF0gOiBcIm1peGVkXCI7XG4gIH07XG4gIHJldHVybiB7XG4gICAgaW5wdXRfdG9rZW5zOiBzdW0oXCJpbnB1dF90b2tlbnNcIiksXG4gICAgb3V0cHV0X3Rva2Vuczogc3VtKFwib3V0cHV0X3Rva2Vuc1wiKSxcbiAgICBjYWNoZV9yZWFkX3Rva2Vuczogc3VtKFwiY2FjaGVfcmVhZF90b2tlbnNcIiksXG4gICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBzdW0oXCJjYWNoZV9jcmVhdGlvbl90b2tlbnNcIiksXG4gICAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiBvcHRpb25hbFN1bShcImNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuc1wiKSxcbiAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IG9wdGlvbmFsU3VtKFwiY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIpLFxuICAgIGR1cmF0aW9uX21zOiBzdW0oXCJkdXJhdGlvbl9tc1wiKSxcbiAgICBmYWxsYmFja19jb3VudDogc3VtKFwiZmFsbGJhY2tfY291bnRcIiksXG4gICAgY29zdF91c2Q6IHN1bShcImNvc3RfdXNkXCIpLFxuICAgIGNvc3Rfc291cmNlOiBjb2xsYXBzZShcImNvc3Rfc291cmNlXCIpLFxuICB9O1xufVxuXG50eXBlIFJlcXVlc3RMb2dVc2FnZVJvdyA9IHtcbiAgdG9rZW5fbmFtZT86IHN0cmluZyB8IG51bGw7XG4gIG1vZGVsX25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICBpbnB1dF90b2tlbnM6IG51bWJlcjtcbiAgb3V0cHV0X3Rva2VuczogbnVtYmVyO1xuICBjYWNoZV9yZWFkX3Rva2VuczogbnVtYmVyO1xuICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IG51bWJlcjtcbiAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zPzogbnVtYmVyIHwgbnVsbDtcbiAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zPzogbnVtYmVyIHwgbnVsbDtcbiAgY29zdF91c2Q/OiBudW1iZXIgfCBudWxsO1xuICBjb3N0X3NvdXJjZT86IHN0cmluZyB8IG51bGw7XG59O1xuXG5mdW5jdGlvbiBpc0FudGhyb3BpY1VzYWdlUm93KHJvdzogUGljazxSZXF1ZXN0TG9nVXNhZ2VSb3csIFwidG9rZW5fbmFtZVwiIHwgXCJtb2RlbF9uYW1lXCI+KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgcm93LnRva2VuX25hbWU/LnN0YXJ0c1dpdGgoXCJhbnRocm9waWMvXCIpID09PSB0cnVlIHx8XG4gICAgcm93Lm1vZGVsX25hbWU/LnN0YXJ0c1dpdGgoXCJjbGF1ZGUtXCIpID09PSB0cnVlIHx8XG4gICAgcm93Lm1vZGVsX25hbWU/LnN0YXJ0c1dpdGgoXCJhbnRocm9waWMvY2xhdWRlLVwiKSA9PT0gdHJ1ZVxuICApO1xufVxuXG5mdW5jdGlvbiBjYW5vbmljYWxNb2RlbE5hbWUobW9kZWxOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbW9kZWxOYW1lLmluY2x1ZGVzKFwiL1wiKSA/IG1vZGVsTmFtZS5zcGxpdChcIi9cIikucG9wKCkhIDogbW9kZWxOYW1lO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVkVXNhZ2VGb3JDb3N0KHJvdzogUmVxdWVzdExvZ1VzYWdlUm93KToge1xuICBtb2RlbDogc3RyaW5nIHwgbnVsbDtcbiAgaW5wdXRUb2tlbnM6IG51bWJlcjtcbiAgb3V0cHV0VG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlZElucHV0VG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogbnVtYmVyO1xuICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bT86IG51bWJlcjtcbiAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWg/OiBudW1iZXI7XG59IHtcbiAgY29uc3QgY2FjaGVSZWFkID0gcm93LmNhY2hlX3JlYWRfdG9rZW5zO1xuICBjb25zdCBjYWNoZUNyZWF0aW9uID0gcm93LmNhY2hlX2NyZWF0aW9uX3Rva2VucztcbiAgY29uc3Qgc3RvcmVkSW5wdXQgPSByb3cuaW5wdXRfdG9rZW5zO1xuICBjb25zdCBsZWdhY3lBbnRocm9waWNTcGxpdElucHV0ID1cbiAgICBpc0FudGhyb3BpY1VzYWdlUm93KHJvdykgJiYgc3RvcmVkSW5wdXQgPCBjYWNoZVJlYWQgKyBjYWNoZUNyZWF0aW9uO1xuICByZXR1cm4ge1xuICAgIG1vZGVsOiByb3cubW9kZWxfbmFtZSA/IGNhbm9uaWNhbE1vZGVsTmFtZShyb3cubW9kZWxfbmFtZSkgOiBudWxsLFxuICAgIGlucHV0VG9rZW5zOiBsZWdhY3lBbnRocm9waWNTcGxpdElucHV0ID8gc3RvcmVkSW5wdXQgKyBjYWNoZVJlYWQgKyBjYWNoZUNyZWF0aW9uIDogc3RvcmVkSW5wdXQsXG4gICAgb3V0cHV0VG9rZW5zOiByb3cub3V0cHV0X3Rva2VucyxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogY2FjaGVSZWFkLFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogY2FjaGVDcmVhdGlvbixcbiAgICAuLi4ocm93LmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyAhPT0gbnVsbCAmJiByb3cuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zICE9PSB1bmRlZmluZWRcbiAgICAgID8geyBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bTogcm93LmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyB9XG4gICAgICA6IHt9KSxcbiAgICAuLi4ocm93LmNhY2hlX2NyZWF0aW9uXzFoX3Rva2VucyAhPT0gbnVsbCAmJiByb3cuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zICE9PSB1bmRlZmluZWRcbiAgICAgID8geyBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaDogcm93LmNhY2hlX2NyZWF0aW9uXzFoX3Rva2VucyB9XG4gICAgICA6IHt9KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTGVnYWN5QW50aHJvcGljUm93PFQgZXh0ZW5kcyBSZXF1ZXN0TG9nVXNhZ2VSb3c+KHJvdzogVCk6IFQge1xuICAvLyDsg4ggcm93IOuKlCDri7nsi5zsnZggcHJvdmlkZXIv6rCA6rKp7ZGcIOu5hOyaqeydhCDtmZXsoJUg7KCA7J6l7ZWc64ukLiDtmITsnqwg6rCA6rKp7ZGc66GcIOuNruyWtOyTsOyngCDslYrripTri6QuXG4gIGlmIChyb3cuY29zdF9zb3VyY2UpIHJldHVybiByb3c7XG4gIGNvbnN0IHVzYWdlID0gbm9ybWFsaXplZFVzYWdlRm9yQ29zdChyb3cpO1xuICBpZiAodXNhZ2UuaW5wdXRUb2tlbnMgPT09IHJvdy5pbnB1dF90b2tlbnMpIHJldHVybiByb3c7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB7IC4uLnJvdywgaW5wdXRfdG9rZW5zOiB1c2FnZS5pbnB1dFRva2VucyB9O1xuICBpZiAodXNhZ2UubW9kZWwpIHtcbiAgICBub3JtYWxpemVkLmNvc3RfdXNkID0gTWF0aC5yb3VuZChjYWxjdWxhdGVDb3N0VXNkKHVzYWdlLm1vZGVsLCB1c2FnZSkgKiBNSUNST19VU0QpO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKipcbiAqIGBvcmRlckJ5YCBlbnVtIOqwkihg7Lus65+8Leuwqe2WpWAp7J2EIOygleugrCDsoIjroZwg7Jiu6ri064ukLlxuICpcbiAqIGVudW0g7J20IDE4IOyiheydtOudvCDsvIDsnbTsiqTrpbwg7J287J287J20IOyggeuKlCDrjIDsi6Ag7YyM7Iux7ZWY65CYLCDsu6zrn7zsnYAg7JWE656YIOuqqeuhneycvOuhnCDtlZzsoJXtlZzri6Qg4oCUXG4gKiDrrLjsnpDsl7TsnYQg6re464yA66GcIOy7rOufvOuqheyXkCDrhJjquLDrqbQgZW51bSDsnbQg67CU64CUIOuVjCDqsoDspp0g7JeG64qUIOyLneuzhOyekOqwgCBTUUwg66GcIO2dmOufrOuToOuLpC5cbiAqIOuqqeuhneyXkCDsl4bripQg6rCS7J2AIOq4sOuzuCDsoJXroKwoaWQgZGVzYynroZwg65ao7Ja07KeE64ukLlxuICovXG5jb25zdCBPUkRFUkFCTEVfQ09MVU1OUyA9IHtcbiAgaWQ6IFwicmVxdWVzdF9sb2dzLmlkXCIsXG4gIGNyZWF0ZWRfYXQ6IFwicmVxdWVzdF9sb2dzLmNyZWF0ZWRfYXRcIixcbiAgdHRmdF9tczogXCJyZXF1ZXN0X2xvZ3MudHRmdF9tc1wiLFxuICBkdXJhdGlvbl9tczogXCJyZXF1ZXN0X2xvZ3MuZHVyYXRpb25fbXNcIixcbiAgaW5wdXRfdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5pbnB1dF90b2tlbnNcIixcbiAgb3V0cHV0X3Rva2VuczogXCJyZXF1ZXN0X2xvZ3Mub3V0cHV0X3Rva2Vuc1wiLFxuICBjYWNoZV9yZWFkX3Rva2VuczogXCJyZXF1ZXN0X2xvZ3MuY2FjaGVfcmVhZF90b2tlbnNcIixcbiAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5jYWNoZV9jcmVhdGlvbl90b2tlbnNcIixcbiAgY29zdF91c2Q6IFwicmVxdWVzdF9sb2dzLmNvc3RfdXNkXCIsXG59IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBhcHBseU9yZGVyQnkoXG4gIHFiOiBSZXR1cm5UeXBlPFJlcXVlc3RMb2dNb2RlbENsYXNzW1wiZ2V0U3Vic2V0UXVlcmllc1wiXT5bXCJxYlwiXSxcbiAgb3JkZXJCeTogc3RyaW5nLFxuKTogdm9pZCB7XG4gIGNvbnN0IHNlcGFyYXRvciA9IG9yZGVyQnkubGFzdEluZGV4T2YoXCItXCIpO1xuICBjb25zdCBrZXkgPSBvcmRlckJ5LnNsaWNlKDAsIHNlcGFyYXRvcikgYXMga2V5b2YgdHlwZW9mIE9SREVSQUJMRV9DT0xVTU5TO1xuICBjb25zdCBkaXJlY3Rpb24gPSBvcmRlckJ5LnNsaWNlKHNlcGFyYXRvciArIDEpID09PSBcImFzY1wiID8gXCJhc2NcIiA6IFwiZGVzY1wiO1xuICBjb25zdCBjb2x1bW4gPSBPUkRFUkFCTEVfQ09MVU1OU1trZXldO1xuXG4gIGlmICghY29sdW1uKSB7XG4gICAgcWIub3JkZXJCeShcInJlcXVlc3RfbG9ncy5pZFwiLCBcImRlc2NcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIHFiLm9yZGVyQnkoY29sdW1uLCBkaXJlY3Rpb24pO1xuICAvLyDrj5nsoJAg7ZaJ7J2YIOyInOyEnOqwgCDtjpjsnbTsp4Drp4jri6Qg7Z2U65Ok66as7KeAIOyViuqyjCDqs6DsnKAg7Lus65+87Jy866GcIHRpZS1icmVhayDtlZzri6QuXG4gIGlmIChrZXkgIT09IFwiaWRcIikgcWIub3JkZXJCeShcInJlcXVlc3RfbG9ncy5pZFwiLCBcImRlc2NcIik7XG59XG5cbi8qXG4gIFJlcXVlc3RMb2cgTW9kZWxcbiovXG5jbGFzcyBSZXF1ZXN0TG9nTW9kZWxDbGFzcyBleHRlbmRzIEJhc2VNb2RlbENsYXNzPFxuICBSZXF1ZXN0TG9nU3Vic2V0S2V5LFxuICBSZXF1ZXN0TG9nU3Vic2V0TWFwcGluZyxcbiAgdHlwZW9mIHJlcXVlc3RMb2dTdWJzZXRRdWVyaWVzLFxuICB0eXBlb2YgcmVxdWVzdExvZ0xvYWRlclF1ZXJpZXNcbj4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIlJlcXVlc3RMb2dcIiwgcmVxdWVzdExvZ1N1YnNldFF1ZXJpZXMsIHJlcXVlc3RMb2dMb2FkZXJRdWVyaWVzKTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdLCByZXNvdXJjZU5hbWU6IFwiUmVxdWVzdExvZ1wiIH0pXG4gIGFzeW5jIGZpbmRCeUlkPFQgZXh0ZW5kcyBSZXF1ZXN0TG9nU3Vic2V0S2V5PihcbiAgICBzdWJzZXQ6IFQsXG4gICAgaWQ6IG51bWJlcixcbiAgKTogUHJvbWlzZTxSZXF1ZXN0TG9nU3Vic2V0TWFwcGluZ1tUXT4ge1xuICAgIGNvbnN0IHsgcm93cyB9ID0gYXdhaXQgdGhpcy5maW5kTWFueShzdWJzZXQsIHtcbiAgICAgIGlkLFxuICAgICAgbnVtOiAxLFxuICAgICAgcGFnZTogMSxcbiAgICAgIHF1ZXJ5TW9kZTogXCJsaXN0XCIsXG4gICAgfSk7XG4gICAgaWYgKCFyb3dzWzBdKSB7XG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFeGNlcHRpb24oU0QoXCJlcnJvci5lbnRpdHlOb3RGb3VuZFwiKShcIlJlcXVlc3RMb2dcIiwgaWQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93c1swXTtcbiAgfVxuXG4gIGFzeW5jIGZpbmRPbmU8VCBleHRlbmRzIFJlcXVlc3RMb2dTdWJzZXRLZXk+KFxuICAgIHN1YnNldDogVCxcbiAgICBsaXN0UGFyYW1zOiBSZXF1ZXN0TG9nTGlzdFBhcmFtcyxcbiAgKTogUHJvbWlzZTxSZXF1ZXN0TG9nU3Vic2V0TWFwcGluZ1tUXSB8IG51bGw+IHtcbiAgICBjb25zdCB7IHJvd3MgfSA9IGF3YWl0IHRoaXMuZmluZE1hbnkoc3Vic2V0LCB7XG4gICAgICAuLi5saXN0UGFyYW1zLFxuICAgICAgbnVtOiAxLFxuICAgICAgcGFnZTogMSxcbiAgICAgIHF1ZXJ5TW9kZTogXCJsaXN0XCIsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcm93c1swXSA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIOuqqeuhnSDtlYTthLDsnZgg64uo7J28IOygleydmC4gZmluZE1hbnkg7JmAIHRvdGFsQ29zdCDqsIAg6rCZ7J2AIOyhsOqxtOydhCDrs7Trj4TroZ0g6rO17Jyg7ZWc64ukIOKAlFxuICAgKiDtmZTrqbTsl5DshJwg7ZWE7YSw66W8IOqxuOuptCDtlokg7IiY7JmAIOu5hOyaqeydtCDtlajqu5gg7KKB7ZiA7KC47JW8IO2VmOuKlOuNsCwg65GQIOy/vOumrOqwgCDqsIHsnpAg7ZWE7YSw66W8XG4gICAqIOq1rO2YhO2VmOuptCDtlZzsqr3sl5Ag7LaV7J2EIOy2lOqwgO2VoCDrlYwg7KGw7Jqp7Z6IIOyWtOq4i+uCnOuLpC5cbiAgICovXG4gIGFwcGx5TGlzdEZpbHRlcnMoXG4gICAgcWI6IFJldHVyblR5cGU8UmVxdWVzdExvZ01vZGVsQ2xhc3NbXCJnZXRTdWJzZXRRdWVyaWVzXCJdPltcInFiXCJdLFxuICAgIHBhcmFtczogUmVxdWVzdExvZ0xpc3RQYXJhbXMsXG4gICk6IHZvaWQge1xuICAgIGlmIChwYXJhbXMuaWQpIHtcbiAgICAgIHFiLndoZXJlSW4oXCJyZXF1ZXN0X2xvZ3MuaWRcIiwgYXNBcnJheShwYXJhbXMuaWQpKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnRva2VuX25hbWUpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnRva2VuX25hbWVcIiwgcGFyYW1zLnRva2VuX25hbWUpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMucHJvamVjdF9uYW1lX2lzX251bGwpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnByb2plY3RfbmFtZVwiLCBudWxsKTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5wcm9qZWN0X25hbWVfaXNfbm90X251bGwpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnByb2plY3RfbmFtZVwiLCBcIiE9XCIsIG51bGwpO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zLnByb2plY3RfbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MucHJvamVjdF9uYW1lXCIsIHBhcmFtcy5wcm9qZWN0X25hbWUpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubW9kZWxfbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MubW9kZWxfbmFtZVwiLCBwYXJhbXMubW9kZWxfbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5zZWFyY2ggJiYgcGFyYW1zLmtleXdvcmQgJiYgcGFyYW1zLmtleXdvcmQubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHBhcmFtcy5zZWFyY2ggPT09IFwiaWRcIikge1xuICAgICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy5pZFwiLCBOdW1iZXIocGFyYW1zLmtleXdvcmQpKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnNlYXJjaCA9PT0gXCJ0b2tlbl9uYW1lXCIpIHtcbiAgICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MudG9rZW5fbmFtZVwiLCBcImxpa2VcIiwgYCUke3BhcmFtcy5rZXl3b3JkfSVgKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnNlYXJjaCA9PT0gXCJ1c2VyX3Byb21wdFwiKSB7XG4gICAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnVzZXJfcHJvbXB0XCIsIFwibGlrZVwiLCBgJSR7cGFyYW1zLmtleXdvcmR9JWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJlcnJvci51bmtub3duU2VhcmNoRmllbGRcIikocGFyYW1zLnNlYXJjaCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdLCByZXNvdXJjZU5hbWU6IFwiUmVxdWVzdExvZ3NcIiB9KVxuICBhc3luYyBmaW5kTWFueTxUIGV4dGVuZHMgUmVxdWVzdExvZ1N1YnNldEtleSwgTFAgZXh0ZW5kcyBSZXF1ZXN0TG9nTGlzdFBhcmFtcz4oXG4gICAgc3Vic2V0OiBULFxuICAgIHJhd1BhcmFtcz86IExQLFxuICApOiBQcm9taXNlPExpc3RSZXN1bHQ8TFAsIFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nW1RdPj4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIG51bTogMjQsXG4gICAgICBwYWdlOiAxLFxuICAgICAgc2VhcmNoOiBcImlkXCIgYXMgY29uc3QsXG4gICAgICBvcmRlckJ5OiBcImlkLWRlc2NcIiBhcyBjb25zdCxcbiAgICAgIC4uLnJhd1BhcmFtcyxcbiAgICB9IHNhdGlzZmllcyBSZXF1ZXN0TG9nTGlzdFBhcmFtcztcblxuICAgIGNvbnN0IHsgcWIgfSA9IHRoaXMuZ2V0U3Vic2V0UXVlcmllcyhzdWJzZXQpO1xuXG4gICAgdGhpcy5hcHBseUxpc3RGaWx0ZXJzKHFiLCBwYXJhbXMpO1xuXG4gICAgaWYgKHBhcmFtcy5vcmRlckJ5KSBhcHBseU9yZGVyQnkocWIsIHBhcmFtcy5vcmRlckJ5KTtcblxuICAgIGNvbnN0IGVuaGFuY2VycyA9IHRoaXMuY3JlYXRlRW5oYW5jZXJzKHtcbiAgICAgIEE6IChyb3cpID0+IG5vcm1hbGl6ZUxlZ2FjeUFudGhyb3BpY1Jvdyhyb3cpLFxuICAgICAgQzogKHJvdykgPT4gbm9ybWFsaXplTGVnYWN5QW50aHJvcGljUm93KHJvdyksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlU3Vic2V0UXVlcnkoe1xuICAgICAgc3Vic2V0LFxuICAgICAgcWIsXG4gICAgICBwYXJhbXMsXG4gICAgICBlbmhhbmNlcnMsXG4gICAgfSk7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgc2F2ZShzcGE6IFJlcXVlc3RMb2dTYXZlUGFyYW1zW10pOiBQcm9taXNlPG51bWJlcltdPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcblxuICAgIC8vIHJlZ2lzdGVyXG4gICAgc3BhLmZvckVhY2goKHNwKSA9PiB7XG4gICAgICB3ZGIudWJSZWdpc3RlcihcInJlcXVlc3RfbG9nc1wiLCBzcCk7XG4gICAgfSk7XG5cbiAgICAvLyB0cmFuc2FjdGlvblxuICAgIHJldHVybiB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgY29uc3QgaWRzID0gYXdhaXQgdHJ4LnViVXBzZXJ0KFwicmVxdWVzdF9sb2dzXCIpO1xuXG4gICAgICByZXR1cm4gaWRzO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOy1nOq3vCDqtazqsITsnZggcHJvdmlkZXIg67OEIOqyveufiSDthrXqs4Qo66qo64uI7YSw66eB7JqpKS4gcHJvdmlkZXIg64qUIHJlcXVlc3RlZF9tb2RlbF9uYW1lIOydmFxuICAgKiBcIm9wZW5haS8uLi5cIiB8IFwiYW50aHJvcGljLy4uLlwiIHByZWZpeCDroZwg7YyQ7KCV7ZWc64ukIOKAlCBzZXJ2aW5nIG1vZGVsX25hbWUg7J2AIHByZWZpeCDqsIBcbiAgICog7JeG6rOgLCBydW5uaW5nIOy0iOq4sOyXlCDslYTsp4Eg67mE7Ja0IOyeiOuLpC4g7KeR6rOE64qUIEpTIOyXkOyEnCDtlZzri6Q6IO2PtOungSDso7zquLDqsIAg64qQ7Iqo7ZWY6rOgXG4gICAqIOq1rOqwhOydtCDsp6fslYQgcm93IOyImOqwgCDsnpHsnLzrqbAsIHByZWZpeCBDQVNFIOyLneydhCDsv7zrpqwg67mM642U7JeQIOuwleyngCDslYrslYTrj4Qg65Cc64ukLlxuICAgKi9cbiAgYXN5bmMgcHJvdmlkZXJTdGF0c1NpbmNlKHNpbmNlOiBEYXRlKTogUHJvbWlzZTxcbiAgICBBcnJheTx7XG4gICAgICBwcm92aWRlcjogc3RyaW5nO1xuICAgICAgcmVxdWVzdHM6IG51bWJlcjtcbiAgICAgIGVycm9yczogbnVtYmVyO1xuICAgICAgaW5wdXRUb2tlbnM6IG51bWJlcjtcbiAgICAgIGNhY2hlUmVhZFRva2VuczogbnVtYmVyO1xuICAgIH0+XG4gID4ge1xuICAgIGNvbnN0IHJkYiA9IHRoaXMuZ2V0UHVyaShcInJcIik7XG4gICAgY29uc3Qgcm93cyA9IChhd2FpdCByZGJcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAuc2VsZWN0KHtcbiAgICAgICAgcmVxdWVzdGVkX21vZGVsX25hbWU6IFwicmVxdWVzdF9sb2dzLnJlcXVlc3RlZF9tb2RlbF9uYW1lXCIsXG4gICAgICAgIHN0YXR1czogXCJyZXF1ZXN0X2xvZ3Muc3RhdHVzXCIsXG4gICAgICAgIGlucHV0X3Rva2VuczogXCJyZXF1ZXN0X2xvZ3MuaW5wdXRfdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5jYWNoZV9yZWFkX3Rva2Vuc1wiLFxuICAgICAgfSlcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9ncy5jcmVhdGVkX2F0XCIsIFwiPj1cIiwgc2luY2UpKSBhcyB1bmtub3duIGFzIEFycmF5PHtcbiAgICAgIHJlcXVlc3RlZF9tb2RlbF9uYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgICAgc3RhdHVzOiBzdHJpbmc7XG4gICAgICBpbnB1dF90b2tlbnM6IG51bWJlcjtcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBudW1iZXI7XG4gICAgfT47XG5cbiAgICBjb25zdCBieVByb3ZpZGVyID0gbmV3IE1hcDxcbiAgICAgIHN0cmluZyxcbiAgICAgIHsgcmVxdWVzdHM6IG51bWJlcjsgZXJyb3JzOiBudW1iZXI7IGlucHV0VG9rZW5zOiBudW1iZXI7IGNhY2hlUmVhZFRva2VuczogbnVtYmVyIH1cbiAgICA+KCk7XG4gICAgcm93cy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IG1vZGVsID0gcm93LnJlcXVlc3RlZF9tb2RlbF9uYW1lID8/IFwiXCI7XG4gICAgICBjb25zdCBwcm92aWRlciA9IG1vZGVsLnN0YXJ0c1dpdGgoXCJvcGVuYWkvXCIpXG4gICAgICAgID8gXCJvcGVuYWlcIlxuICAgICAgICA6IG1vZGVsLnN0YXJ0c1dpdGgoXCJhbnRocm9waWMvXCIpXG4gICAgICAgICAgPyBcImFudGhyb3BpY1wiXG4gICAgICAgICAgOiBcInVua25vd25cIjtcbiAgICAgIGNvbnN0IGFnZyA9IGJ5UHJvdmlkZXIuZ2V0KHByb3ZpZGVyKSA/PyB7XG4gICAgICAgIHJlcXVlc3RzOiAwLFxuICAgICAgICBlcnJvcnM6IDAsXG4gICAgICAgIGlucHV0VG9rZW5zOiAwLFxuICAgICAgICBjYWNoZVJlYWRUb2tlbnM6IDAsXG4gICAgICB9O1xuICAgICAgYWdnLnJlcXVlc3RzICs9IDE7XG4gICAgICBpZiAocm93LnN0YXR1cyA9PT0gXCJlcnJvclwiKSBhZ2cuZXJyb3JzICs9IDE7XG4gICAgICBhZ2cuaW5wdXRUb2tlbnMgKz0gcm93LmlucHV0X3Rva2VucztcbiAgICAgIGFnZy5jYWNoZVJlYWRUb2tlbnMgKz0gcm93LmNhY2hlX3JlYWRfdG9rZW5zO1xuICAgICAgYnlQcm92aWRlci5zZXQocHJvdmlkZXIsIGFnZyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFsuLi5ieVByb3ZpZGVyLmVudHJpZXMoKV1cbiAgICAgIC5tYXAoKFtwcm92aWRlciwgYWdnXSkgPT4gKHsgcHJvdmlkZXIsIC4uLmFnZyB9KSlcbiAgICAgIC50b1NvcnRlZCgoYSwgYikgPT4gYS5wcm92aWRlci5sb2NhbGVDb21wYXJlKGIucHJvdmlkZXIpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzdHJ1Y3R1cmVkIG91dHB1dCDsmpTssq3snZggSlNPTiBTY2hlbWEg66W8IO2RnOyLnOyaqSDtg4DsnoUg7YWN7Iqk7Yq466GcIOuzgO2ZmO2VnOuLpC5cbiAgICogdHlwZXNjcmlwdCDripQg6rCE6rKw7ZWcIGB0eXBlYCDshKDslrgsIHpvZCDripQg7J6s6rWs7ISx65CcIHpvZCDtkZztmITsi53snbTri6Qg4oCUIOybkOuzuCB6b2RcbiAgICog7IaM7Iqk64qUIHdpcmUg66W8IOqxtOuEiOyYpOupsCDshozsi6TrkJjrr4DroZwgcmVmaW5lL3RyYW5zZm9ybSDrpZjripQg67O17JuQ65CY7KeAIOyViuuKlOuLpC5cbiAgICog7Iqk7YKk66eI6rCAIOyXhuqxsOuCmCDrs4DtmZgg7Iuk7Yyo66m0IG51bGwg4oCUIO2ZlOuptOydgCDtlbTri7kg67iU66GdIO2RnOyLnOulvCDsg53rnrXtlZzri6QuXG4gICAqL1xuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyByZXNwb25zZVR5cGVUcyhpZDogbnVtYmVyKTogUHJvbWlzZTx7XG4gICAgdHlwZXNjcmlwdDogc3RyaW5nIHwgbnVsbDtcbiAgICB6b2Q6IHN0cmluZyB8IG51bGw7XG4gIH0+IHtcbiAgICBjb25zdCByZGIgPSB0aGlzLmdldFB1cmkoXCJyXCIpO1xuICAgIGNvbnN0IHJvd3MgPSAoYXdhaXQgcmRiXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgLnNlbGVjdCh7IGpzb25fc2NoZW1hOiBcInJlcXVlc3RfbG9ncy5qc29uX3NjaGVtYVwiIH0pXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ3MuaWRcIiwgaWQpKSBhcyB1bmtub3duIGFzIEFycmF5PHsganNvbl9zY2hlbWE6IHN0cmluZyB8IG51bGwgfT47XG4gICAgY29uc3Qgc2NoZW1hID0gcm93c1swXT8uanNvbl9zY2hlbWE7XG4gICAgaWYgKCFzY2hlbWEpIHJldHVybiB7IHR5cGVzY3JpcHQ6IG51bGwsIHpvZDogbnVsbCB9O1xuXG4gICAgbGV0IHBhcnNlZDogdW5rbm93bjtcbiAgICB0cnkge1xuICAgICAgcGFyc2VkID0gSlNPTi5wYXJzZShzY2hlbWEpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHsgdHlwZXNjcmlwdDogbnVsbCwgem9kOiBudWxsIH07XG4gICAgfVxuICAgIGxldCB6b2Q6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICB6b2QgPSBmb3JtYXRab2RDb2RlKFxuICAgICAgICBqc29uU2NoZW1hVG9ab2QocGFyc2VkIGFzIFBhcmFtZXRlcnM8dHlwZW9mIGpzb25TY2hlbWFUb1pvZD5bMF0sIHsgbW9kdWxlOiBcIm5vbmVcIiB9KSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB6b2QgPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4geyB0eXBlc2NyaXB0OiByZW5kZXJQYXJzZWRKc29uU2NoZW1hVHlwZVRleHQocGFyc2VkKSwgem9kIH07XG4gIH1cblxuICAvLyDilIDilIAgVG9vbCBDb250cmFjdCBWaWV3XG5cbiAgLyoqXG4gICAqIOyalOyyreyXkCDsnqXssKnrkJwgdG9vbCDqs4Tslb3snYQgZGV0YWlsIO2ZlOuptOyaqeycvOuhnCDstpXslb3tlZzri6QuIEpTT05CIOuKlCDsnbTrr7ggZGVjb2RlIOuQnFxuICAgKiDrsLDsl7TroZwg7Jik66mwIOusuOyekOyXtOyduCDqsr3smrDrp4wg67Cp7Ja07KCB7Jy866GcIHBhcnNlIO2VnOuLpC4g7KCA7J6l65CcIFFncmlkVG9vbCDqs4Tslb3snYBcbiAgICog7KCE7IiYIOqygOyCrOuhnCDtmZXsnbjrkJDsnLzrr4DroZwg7ZWt66qp67OEIOuztOygleydtOuCmCB1bnJlYWRhYmxlIHNlbnRpbmVsIOydgCDrp4zrk6Tsp4Ag7JWK64qU64ukLlxuICAgKiDri6Trp4wgYFFncmlkVG9vbC5pbnB1dFNjaGVtYWAg64qUIGB6LnVua25vd24oKWAg7J206528IO2CpOqwgCDsl4bqsbDrgpggbnVsbCDsnbgg6rCS64+EXG4gICAqIHdpcmUg6rKA7Kad7J2EIO2GteqzvO2VmOuvgOuhnCDruYgg7Iqk7YKk66eI66GcIOygleq3nO2ZlO2VnOuLpCDigJQgU0RLIOuKlCBge31gIOuhnCDssYTsm4wg67O064K464ukLlxuICAgKi9cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0gfSlcbiAgYXN5bmMgdG9vbHNWaWV3KGlkOiBudW1iZXIpOiBQcm9taXNlPFRvb2xWaWV3W10+IHtcbiAgICBjb25zdCByb3cgPSAoYXdhaXQgdGhpcy5nZXRQdXJpKFwiclwiKVxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgIC5zZWxlY3QoeyB0b29sczogXCJyZXF1ZXN0X2xvZ3MudG9vbHNcIiB9KVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dzLmlkXCIsIGlkKVxuICAgICAgLmZpcnN0KCkpIGFzIHsgdG9vbHM6IHVua25vd24gfSB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCB0b29scyA9IGRlY29kZVN0b3JlZFRvb2xzKHJvdz8udG9vbHMpO1xuICAgIGlmICghdG9vbHMpIHJldHVybiBbXTtcblxuICAgIHJldHVybiB0b29scy5tYXAoKHRvb2wpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0U2NoZW1hID0gKHRvb2wuaW5wdXRTY2hlbWEgPz8ge30pIGFzIHtcbiAgICAgICAgcHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlucHV0Wm9kID0gcmVuZGVySnNvblNjaGVtYVpvZFNoYXBlVGV4dChpbnB1dFNjaGVtYSwgVE9PTF9FTlVNX1ZBTFVFX0xJTUlUKTtcbiAgICAgIGNvbnN0IGZ1bGxJbnB1dFpvZCA9IHJlbmRlckpzb25TY2hlbWFab2RTaGFwZVRleHQoaW5wdXRTY2hlbWEpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiB0b29sLm5hbWUsXG4gICAgICAgIC4uLih0b29sLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgPyB7IGRlc2NyaXB0aW9uOiB0b29sLmRlc2NyaXB0aW9uIH0gOiB7fSksXG4gICAgICAgIHBhcmFtZXRlckNvdW50OiBPYmplY3Qua2V5cyhpbnB1dFNjaGVtYS5wcm9wZXJ0aWVzID8/IHt9KS5sZW5ndGgsXG4gICAgICAgIGlucHV0Wm9kLFxuICAgICAgICAuLi4oaW5wdXRab2QgIT09IGZ1bGxJbnB1dFpvZCA/IHsgZnVsbElucHV0Wm9kIH0gOiB7fSksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLy8g4pSA4pSAIFJ1biBMaWZlY3ljbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgYXN5bmMgY3JlYXRlUnVuKHBhcmFtczoge1xuICAgIHVzZXJfcHJvbXB0OiBzdHJpbmc7XG4gICAgc3lzdGVtX3Byb21wdD86IHN0cmluZyB8IG51bGw7XG4gICAgcmVxdWVzdGVkX21vZGVsX25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgIGVmZm9ydD86IHN0cmluZyB8IG51bGw7XG4gICAgc2VydmljZV90aWVyPzogc3RyaW5nIHwgbnVsbDtcbiAgICBwcm9qZWN0X25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgIGhpc3Rvcnk/OiB1bmtub3duO1xuICAgIGlucHV0X2ltYWdlcz86IElucHV0SW1hZ2VzO1xuICAgIHRvb2xzPzogVG9vbERlZmluaXRpb25zO1xuICAgIGlzX2ltYWdlX2dlbmVyYXRpb24/OiBib29sZWFuO1xuICAgIGlzX3N0cnVjdHVyZWQ/OiBib29sZWFuO1xuICAgIGpzb25fc2NoZW1hPzogc3RyaW5nIHwgbnVsbDtcbiAgfSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcbiAgICB3ZGIudWJSZWdpc3RlcihcInJlcXVlc3RfbG9nc1wiLCB7XG4gICAgICB1c2VyX3Byb21wdDogcGFyYW1zLnVzZXJfcHJvbXB0LFxuICAgICAgc3lzdGVtX3Byb21wdDogcGFyYW1zLnN5c3RlbV9wcm9tcHQgPz8gbnVsbCxcbiAgICAgIC8vIHByb3ZpZGVyIOyLpO2WiSDsoITsnbTrr4DroZwgc2VydmluZyBtb2RlbOydgCDslYTsp4Eg7JWMIOyImCDsl4bri6QuXG4gICAgICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogcGFyYW1zLnJlcXVlc3RlZF9tb2RlbF9uYW1lID8/IG51bGwsXG4gICAgICBtb2RlbF9uYW1lOiBudWxsLFxuICAgICAgZWZmb3J0OiBwYXJhbXMuZWZmb3J0ID8/IG51bGwsXG4gICAgICBzZXJ2aWNlX3RpZXI6IHBhcmFtcy5zZXJ2aWNlX3RpZXIgPz8gbnVsbCxcbiAgICAgIHByb2plY3RfbmFtZTogcGFyYW1zLnByb2plY3RfbmFtZSA/PyBudWxsLFxuICAgICAgc3RhdHVzOiBcInJ1bm5pbmdcIixcbiAgICAgIHJlc3BvbnNlOiBcIlwiLFxuICAgICAgaW5wdXRfdG9rZW5zOiAwLFxuICAgICAgb3V0cHV0X3Rva2VuczogMCxcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiAwLFxuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiAwLFxuICAgICAgZHVyYXRpb25fbXM6IDAsXG4gICAgICB0b29sX2NhbGxfY291bnQ6IDAsXG4gICAgICAvLyDsnbTrr7jsp4AgdHVybiDsi53rs4QoUjEzKS4gcnVuIOqyveuhnCh0b29scytpbWFnZSDsobDtlakp64+EIGF1dG8g6rK966Gc7JmAIOuPmeydvO2VmOqyjCDrp4jtgrkuXG4gICAgICBpc19pbWFnZV9nZW5lcmF0aW9uOiBwYXJhbXMuaXNfaW1hZ2VfZ2VuZXJhdGlvbiA/PyBmYWxzZSxcbiAgICAgIGpzb25fc2NoZW1hOiBwYXJhbXMuanNvbl9zY2hlbWEgPz8gbnVsbCxcbiAgICAgIGlzX3N0cnVjdHVyZWQ6XG4gICAgICAgIHBhcmFtcy5pc19zdHJ1Y3R1cmVkID8/IChwYXJhbXMuanNvbl9zY2hlbWEgIT09IG51bGwgJiYgcGFyYW1zLmpzb25fc2NoZW1hICE9PSB1bmRlZmluZWQpLFxuICAgICAgLi4uKHBhcmFtcy5oaXN0b3J5ICE9PSB1bmRlZmluZWQgPyB7IGhpc3Rvcnk6IHBhcmFtcy5oaXN0b3J5IGFzIHsgdHlwZTogc3RyaW5nIH1bXSB9IDoge30pLFxuICAgICAgLi4uKHBhcmFtcy5pbnB1dF9pbWFnZXMgPyB7IGlucHV0X2ltYWdlczogcGFyYW1zLmlucHV0X2ltYWdlcyB9IDoge30pLFxuICAgICAgLi4uKHBhcmFtcy50b29scyAhPT0gdW5kZWZpbmVkID8geyB0b29sczogcGFyYW1zLnRvb2xzIH0gOiB7fSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBjb25zdCBpZHMgPSBhd2FpdCB0cngudWJVcHNlcnQoXCJyZXF1ZXN0X2xvZ3NcIik7XG4gICAgICByZXR1cm4gaWRzWzBdITtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGFwcGVuZFN0ZXAocmVxdWVzdExvZ0lkOiBudW1iZXIsIHN0ZXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuICAgIHdkYi51YlJlZ2lzdGVyKFwicmVxdWVzdF9sb2dfc3RlcHNcIiwgeyByZXF1ZXN0X2xvZ19pZDogcmVxdWVzdExvZ0lkLCAuLi5zdGVwIH0pO1xuICAgIHJldHVybiB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgY29uc3QgaWRzID0gYXdhaXQgdHJ4LnViVXBzZXJ0KFwicmVxdWVzdF9sb2dfc3RlcHNcIik7XG4gICAgICBpZiAoc3RlcC50eXBlID09PSBcInRvb2xfY2FsbFwiKSB7XG4gICAgICAgIGF3YWl0IHRyeC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpLndoZXJlKFwiaWRcIiwgcmVxdWVzdExvZ0lkKS5pbmNyZW1lbnQoXCJ0b29sX2NhbGxfY291bnRcIiwgMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaWRzWzBdITtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFJ1bihcbiAgICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgICBwYXJhbXM6IHtcbiAgICAgIHN0YXR1czogc3RyaW5nO1xuICAgICAgcmVzcG9uc2U/OiBzdHJpbmc7XG4gICAgICB0b2tlbl9uYW1lPzogc3RyaW5nO1xuICAgICAgaW5wdXRfdG9rZW5zPzogbnVtYmVyO1xuICAgICAgb3V0cHV0X3Rva2Vucz86IG51bWJlcjtcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zPzogbnVtYmVyO1xuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zPzogbnVtYmVyO1xuICAgICAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zPzogbnVtYmVyIHwgbnVsbDtcbiAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vucz86IG51bWJlciB8IG51bGw7XG4gICAgICBkdXJhdGlvbl9tcz86IG51bWJlcjtcbiAgICAgIHJlcXVlc3RlZF9tb2RlbF9uYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgIG1vZGVsX25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgc2VydmljZV90aWVyPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgIGZhbGxiYWNrX2NvdW50PzogbnVtYmVyIHwgbnVsbDtcbiAgICAgIGNvc3RfdXNkPzogbnVtYmVyIHwgbnVsbDtcbiAgICAgIGNvc3Rfc291cmNlPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgIGhpc3Rvcnk/OiB1bmtub3duO1xuICAgICAgZXJyb3JfbWVzc2FnZT86IHN0cmluZztcbiAgICAgIHRvb2xfY2FsbF9jb3VudD86IG51bWJlcjtcbiAgICAgIGltYWdlX2Nvc3RfdXNkPzogbnVtYmVyIHwgbnVsbDtcbiAgICAgIGltYWdlX2Nvc3RfbWV0aG9kPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgIGlzX2ltYWdlX2dlbmVyYXRpb24/OiBib29sZWFuO1xuICAgICAgcmVzcG9uc2VfanNvbl9vaz86IGJvb2xlYW4gfCBudWxsO1xuICAgIH0sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChwYXJhbXMuc3RhdHVzID09PSBcInN1Y2NlZWRlZFwiICYmICFwYXJhbXMudG9rZW5fbmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidG9rZW5OYW1lIGlzIHJlcXVpcmVkIGZvciBzdWNjZWVkZWQgcnVuc1wiKTtcbiAgICB9XG4gICAgY29uc3QgdXBkYXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgaWQ6IHJlcXVlc3RMb2dJZCwgc3RhdHVzOiBwYXJhbXMuc3RhdHVzIH07XG4gICAgY29uc3QgZmllbGRzID0gW1xuICAgICAgXCJyZXNwb25zZVwiLFxuICAgICAgXCJ0b2tlbl9uYW1lXCIsXG4gICAgICBcImlucHV0X3Rva2Vuc1wiLFxuICAgICAgXCJvdXRwdXRfdG9rZW5zXCIsXG4gICAgICBcImNhY2hlX3JlYWRfdG9rZW5zXCIsXG4gICAgICBcImNhY2hlX2NyZWF0aW9uX3Rva2Vuc1wiLFxuICAgICAgXCJjYWNoZV9jcmVhdGlvbl81bV90b2tlbnNcIixcbiAgICAgIFwiY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIsXG4gICAgICBcImR1cmF0aW9uX21zXCIsXG4gICAgICBcInJlcXVlc3RlZF9tb2RlbF9uYW1lXCIsXG4gICAgICBcIm1vZGVsX25hbWVcIixcbiAgICAgIFwic2VydmljZV90aWVyXCIsXG4gICAgICBcImZhbGxiYWNrX2NvdW50XCIsXG4gICAgICBcImNvc3RfdXNkXCIsXG4gICAgICBcImNvc3Rfc291cmNlXCIsXG4gICAgICBcImVycm9yX21lc3NhZ2VcIixcbiAgICAgIFwidG9vbF9jYWxsX2NvdW50XCIsXG4gICAgICBcImltYWdlX2Nvc3RfdXNkXCIsXG4gICAgICBcImltYWdlX2Nvc3RfbWV0aG9kXCIsXG4gICAgICBcImlzX2ltYWdlX2dlbmVyYXRpb25cIixcbiAgICAgIFwicmVzcG9uc2VfanNvbl9va1wiLFxuICAgIF0gYXMgY29uc3Q7XG4gICAgZmllbGRzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKHBhcmFtc1trZXldICE9PSB1bmRlZmluZWQpIHVwZGF0ZVtrZXldID0gcGFyYW1zW2tleV07XG4gICAgfSk7XG4gICAgaWYgKHBhcmFtcy5oaXN0b3J5ICE9PSB1bmRlZmluZWQpIHVwZGF0ZS5oaXN0b3J5ID0gcGFyYW1zLmhpc3Rvcnk7XG4gICAgdXBkYXRlLnR0ZnRfbXMgPSAoYXdhaXQgdGhpcy5maXJzdEdlbmVyYXRlU3RlcFR0ZnQocmVxdWVzdExvZ0lkKSkgPz8gMDtcblxuICAgIC8vIOyEnOuyhCBydW4g6rK966Gc64qUIHN0ZXAg7JeQ7IScIO2Zleygle2VnCBleGFjdCBjb3N0IOulvCDrhJjquLTri6QuIOyZuOu2gC9sZWdhY3kgY2FsbGVyIOqwgCDruYTsmqnsnYRcbiAgICAvLyDsg53rnrXtlZwg6rK97Jqw7JeQ66eMIOyggOyepeuQnCDrqqjrjbgrdXNhZ2Ug66GcIOqzhOyCsO2VnOuLpC5cbiAgICBpZiAoXG4gICAgICBwYXJhbXMuY29zdF91c2QgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcGFyYW1zLmlucHV0X3Rva2VucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBwYXJhbXMub3V0cHV0X3Rva2VucyAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCByb3cgPSBhd2FpdCB0aGlzLmdldFB1cmkoXCJyXCIpXG4gICAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAgIC5zZWxlY3QoeyBtb2RlbF9uYW1lOiBcIm1vZGVsX25hbWVcIiB9KVxuICAgICAgICAud2hlcmUoXCJpZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAgIC5maXJzdCgpO1xuICAgICAgY29uc3QgZWZmZWN0aXZlTW9kZWxOYW1lID0gcGFyYW1zLm1vZGVsX25hbWUgPz8gcm93Py5tb2RlbF9uYW1lO1xuICAgICAgaWYgKGVmZmVjdGl2ZU1vZGVsTmFtZSkge1xuICAgICAgICBjb25zdCBtb2RlbCA9IGNhbm9uaWNhbE1vZGVsTmFtZShlZmZlY3RpdmVNb2RlbE5hbWUpO1xuICAgICAgICBjb25zdCB1c2FnZSA9IG5vcm1hbGl6ZWRVc2FnZUZvckNvc3Qoe1xuICAgICAgICAgIHRva2VuX25hbWU6IHBhcmFtcy50b2tlbl9uYW1lLFxuICAgICAgICAgIG1vZGVsX25hbWU6IGVmZmVjdGl2ZU1vZGVsTmFtZSxcbiAgICAgICAgICBpbnB1dF90b2tlbnM6IHBhcmFtcy5pbnB1dF90b2tlbnMsXG4gICAgICAgICAgb3V0cHV0X3Rva2VuczogcGFyYW1zLm91dHB1dF90b2tlbnMsXG4gICAgICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IHBhcmFtcy5jYWNoZV9yZWFkX3Rva2VucyA/PyAwLFxuICAgICAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogcGFyYW1zLmNhY2hlX2NyZWF0aW9uX3Rva2VucyA/PyAwLFxuICAgICAgICAgIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2VuczogcGFyYW1zLmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyxcbiAgICAgICAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IHBhcmFtcy5jYWNoZV9jcmVhdGlvbl8xaF90b2tlbnMsXG4gICAgICAgIH0pO1xuICAgICAgICB1cGRhdGUuY29zdF91c2QgPSBNYXRoLnJvdW5kKFxuICAgICAgICAgIGNhbGN1bGF0ZUNvc3RVc2QobW9kZWwsIHtcbiAgICAgICAgICAgIGlucHV0VG9rZW5zOiB1c2FnZS5pbnB1dFRva2VucyxcbiAgICAgICAgICAgIG91dHB1dFRva2VuczogdXNhZ2Uub3V0cHV0VG9rZW5zLFxuICAgICAgICAgICAgY2FjaGVkSW5wdXRUb2tlbnM6IHVzYWdlLmNhY2hlZElucHV0VG9rZW5zLFxuICAgICAgICAgICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiB1c2FnZS5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMsXG4gICAgICAgICAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bTogdXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zNW0sXG4gICAgICAgICAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaDogdXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWgsXG4gICAgICAgICAgfSkgKiAxXzAwMF8wMDAsXG4gICAgICAgICk7XG4gICAgICAgIHVwZGF0ZS5jb3N0X3NvdXJjZSA9IFwicHJpY2luZ190YWJsZVwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG4gICAgd2RiLnViUmVnaXN0ZXIoXCJyZXF1ZXN0X2xvZ3NcIiwgdXBkYXRlKTtcbiAgICBhd2FpdCB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgYXdhaXQgdHJ4LnViVXBzZXJ0KFwicmVxdWVzdF9sb2dzXCIpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZmlyc3RHZW5lcmF0ZVN0ZXBUdGZ0KHJlcXVlc3RMb2dJZDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG4gICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5nZXRQdXJpKFwiclwiKVxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgLnNlbGVjdCh7IHR0ZnRfbXM6IFwidHRmdF9tc1wiIH0pXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19pZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAud2hlcmUoXCJ0eXBlXCIsIFwiZ2VuZXJhdGVcIilcbiAgICAgIC53aGVyZShcInR0ZnRfbXNcIiwgXCIhPVwiLCBudWxsKVxuICAgICAgLm9yZGVyQnkoXCJzdGVwX2luZGV4XCIsIFwiYXNjXCIpXG4gICAgICAub3JkZXJCeShcImlkXCIsIFwiYXNjXCIpXG4gICAgICAuZmlyc3QoKTtcbiAgICByZXR1cm4gcm93Py50dGZ0X21zID09PSBudWxsIHx8IHJvdz8udHRmdF9tcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IE51bWJlcihyb3cudHRmdF9tcyk7XG4gIH1cblxuICBhc3luYyBhZ2dyZWdhdGVTdGVwVXNhZ2UocmVxdWVzdExvZ0lkOiBudW1iZXIpOiBQcm9taXNlPFJlcXVlc3RMb2dTdGVwQWdncmVnYXRlPiB7XG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IHRoaXMuZ2V0UHVyaShcInJcIilcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgIC5zZWxlY3QoU1RFUF9BR0dSRUdBVEVfU0VMRUNUKVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgLndoZXJlKFwidHlwZVwiLCBcImdlbmVyYXRlXCIpO1xuICAgIHJldHVybiBhZ2dyZWdhdGVHZW5lcmF0ZVN0ZXBSb3dzKHJvd3MgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBzdGFsZSBjYW5kaWRhdGVzLCB0aGVuIGV4cGlyZXMgZWFjaCBydW4gaW4gaXRzIG93biBzaG9ydCB0cmFuc2FjdGlvbi5cbiAgICogVGhlIGNhbmRpZGF0ZSBxdWVyeSBpcyBvbmx5IGEgaGludDsgdGhlIHRyYW5zYWN0aW9uYWwgb3BlcmF0aW9uIHJlY2hlY2tzIGl0XG4gICAqIGFmdGVyIGFjcXVpcmluZyB0aGUgYWR2aXNvcnkgbG9jayBzaGFyZWQgd2l0aCB0b29sIGZvbGxvdy11cHMuXG4gICAqL1xuICBhc3luYyBleHBpcmVTdGFsZVRvb2xXYWl0aW5nUnVucyhcbiAgICB0aHJlc2hvbGRNczogbnVtYmVyLFxuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nLFxuICAgIGxpbWl0OiBudW1iZXIgPSAxMCxcbiAgKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICAgIGNvbnN0IHRocmVzaG9sZCA9IG5ldyBEYXRlKERhdGUubm93KCkgLSB0aHJlc2hvbGRNcyk7XG4gICAgY29uc3QgY2FuZGlkYXRlSWRzID0gYXdhaXQgdGhpcy5maW5kU3RhbGVUb29sV2FpdGluZ1J1bkNhbmRpZGF0ZXModGhyZXNob2xkLCBsaW1pdCk7XG4gICAgY29uc3QgZXhwaXJlZElkczogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RMb2dJZCBvZiBjYW5kaWRhdGVJZHMpIHtcbiAgICAgIGlmIChhd2FpdCB0aGlzLnRyeUV4cGlyZVN0YWxlVG9vbFdhaXRpbmdSdW4ocmVxdWVzdExvZ0lkLCB0aHJlc2hvbGQsIGVycm9yTWVzc2FnZSkpIHtcbiAgICAgICAgZXhwaXJlZElkcy5wdXNoKHJlcXVlc3RMb2dJZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBleHBpcmVkSWRzO1xuICB9XG5cbiAgYXN5bmMgZmluZFN0YWxlVG9vbFdhaXRpbmdSdW5DYW5kaWRhdGVzKHRocmVzaG9sZDogRGF0ZSwgbGltaXQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyW10+IHtcbiAgICBjb25zdCByb3dzID0gYXdhaXQgdGhpcy5nZXRQdXJpKFwid1wiKVxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgIC5qb2luKFwicmVxdWVzdF9sb2dfc3RlcHNcIiwgXCJyZXF1ZXN0X2xvZ3MuaWRcIiwgXCJyZXF1ZXN0X2xvZ19zdGVwcy5yZXF1ZXN0X2xvZ19pZFwiKVxuICAgICAgLmRpc3RpbmN0KFwicmVxdWVzdF9sb2dzLmlkXCIpXG4gICAgICAuc2VsZWN0KHsgaWQ6IFwicmVxdWVzdF9sb2dzLmlkXCIgfSlcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9ncy5zdGF0dXNcIiwgXCJydW5uaW5nXCIpXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19zdGVwcy50eXBlXCIsIFwidG9vbF9jYWxsXCIpXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19zdGVwcy5jcmVhdGVkX2F0XCIsIFwiPFwiLCB0aHJlc2hvbGQpXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19zdGVwcy50b29sX3Jlc3VsdFwiLCBudWxsKVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfc3RlcHMuZXJyb3JcIiwgbnVsbClcbiAgICAgIC5saW1pdChsaW1pdCk7XG4gICAgcmV0dXJuIHJvd3MubWFwKCh7IGlkIH0pID0+IGlkKTtcbiAgfVxuXG4gIEB0cmFuc2FjdGlvbmFsKHsgZGJQcmVzZXQ6IFwid1wiIH0pXG4gIGFzeW5jIHRyeUV4cGlyZVN0YWxlVG9vbFdhaXRpbmdSdW4oXG4gICAgcmVxdWVzdExvZ0lkOiBudW1iZXIsXG4gICAgdGhyZXNob2xkOiBEYXRlLFxuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuICAgIGNvbnN0IGxvY2tSZXN1bHQgPSAoYXdhaXQgd2RiLmtuZXgucmF3KFwiU0VMRUNUIHBnX3RyeV9hZHZpc29yeV94YWN0X2xvY2soPywgPykgQVMgYWNxdWlyZWRcIiwgW1xuICAgICAgUkVRVUVTVF9MT0dfUlVOX0xPQ0tfQ0xBU1NfSUQsXG4gICAgICByZXF1ZXN0TG9nSWQsXG4gICAgXSkpIGFzIHsgcm93cz86IEFycmF5PHsgYWNxdWlyZWQ/OiBib29sZWFuIH0+IH07XG4gICAgaWYgKGxvY2tSZXN1bHQucm93cz8uWzBdPy5hY3F1aXJlZCAhPT0gdHJ1ZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gVGhlIGZvbGxvdy11cCBwYXRoIHVzZXMgdGhlIHNhbWUgd3JpdGVyIHRyYW5zYWN0aW9uIGxvY2suIFJlY2hlY2sgYWZ0ZXJcbiAgICAvLyBsb2NraW5nIHNvIGEgcmVzdWx0IGNvbW1pdHRlZCBkdXJpbmcgY2FuZGlkYXRlIGRpc2NvdmVyeSBtYWtlcyB0aGlzIGEgbm8tb3AuXG4gICAgY29uc3QgdW5yZXNvbHZlZCA9IGF3YWl0IHdkYlxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgLnNlbGVjdCh7IGlkOiBcImlkXCIgfSlcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC53aGVyZShcInR5cGVcIiwgXCJ0b29sX2NhbGxcIilcbiAgICAgIC53aGVyZShcImNyZWF0ZWRfYXRcIiwgXCI8XCIsIHRocmVzaG9sZClcbiAgICAgIC53aGVyZShcInRvb2xfcmVzdWx0XCIsIG51bGwpXG4gICAgICAud2hlcmUoXCJlcnJvclwiLCBudWxsKVxuICAgICAgLmZpcnN0KCk7XG4gICAgaWYgKCF1bnJlc29sdmVkKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBzdGVwUm93cyA9IGF3YWl0IHdkYlxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgLnNlbGVjdChTVEVQX0FHR1JFR0FURV9TRUxFQ1QpXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19pZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAud2hlcmUoXCJ0eXBlXCIsIFwiZ2VuZXJhdGVcIik7XG4gICAgY29uc3QgYWdncmVnYXRlID0gYWdncmVnYXRlR2VuZXJhdGVTdGVwUm93cyhzdGVwUm93cyBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pO1xuICAgIGNvbnN0IGZpcnN0VHRmdCA9IGF3YWl0IHdkYlxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgLnNlbGVjdCh7IHR0ZnRfbXM6IFwidHRmdF9tc1wiIH0pXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19pZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAud2hlcmUoXCJ0eXBlXCIsIFwiZ2VuZXJhdGVcIilcbiAgICAgIC53aGVyZShcInR0ZnRfbXNcIiwgXCIhPVwiLCBudWxsKVxuICAgICAgLm9yZGVyQnkoXCJzdGVwX2luZGV4XCIsIFwiYXNjXCIpXG4gICAgICAub3JkZXJCeShcImlkXCIsIFwiYXNjXCIpXG4gICAgICAuZmlyc3QoKTtcblxuICAgIGNvbnN0IHVwZGF0ZWQgPSBhd2FpdCB3ZGJcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAud2hlcmUoXCJpZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAud2hlcmUoXCJzdGF0dXNcIiwgXCJydW5uaW5nXCIpXG4gICAgICAudXBkYXRlKHtcbiAgICAgICAgc3RhdHVzOiBcImVycm9yXCIsXG4gICAgICAgIGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgaW5wdXRfdG9rZW5zOiBhZ2dyZWdhdGUuaW5wdXRfdG9rZW5zLFxuICAgICAgICBvdXRwdXRfdG9rZW5zOiBhZ2dyZWdhdGUub3V0cHV0X3Rva2VucyxcbiAgICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9yZWFkX3Rva2VucyxcbiAgICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBhZ2dyZWdhdGUuY2FjaGVfY3JlYXRpb25fdG9rZW5zLFxuICAgICAgICAuLi4oYWdncmVnYXRlLmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB7IGNhY2hlX2NyZWF0aW9uXzVtX3Rva2VuczogYWdncmVnYXRlLmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLihhZ2dyZWdhdGUuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHsgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zOiBhZ2dyZWdhdGUuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgZHVyYXRpb25fbXM6IGFnZ3JlZ2F0ZS5kdXJhdGlvbl9tcyxcbiAgICAgICAgZmFsbGJhY2tfY291bnQ6IGFnZ3JlZ2F0ZS5mYWxsYmFja19jb3VudCxcbiAgICAgICAgY29zdF91c2Q6IGFnZ3JlZ2F0ZS5jb3N0X3VzZCxcbiAgICAgICAgLi4uKGFnZ3JlZ2F0ZS5jb3N0X3NvdXJjZSAhPT0gdW5kZWZpbmVkID8geyBjb3N0X3NvdXJjZTogYWdncmVnYXRlLmNvc3Rfc291cmNlIH0gOiB7fSksXG4gICAgICAgIHR0ZnRfbXM6XG4gICAgICAgICAgZmlyc3RUdGZ0Py50dGZ0X21zID09PSBudWxsIHx8IGZpcnN0VHRmdD8udHRmdF9tcyA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogTnVtYmVyKGZpcnN0VHRmdC50dGZ0X21zKSxcbiAgICAgIH0pO1xuICAgIHJldHVybiB1cGRhdGVkID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGEgbmF0aXZlIHFncmlkIHRvb2wgZm9sbG93LXVwIGFuZCBjb21wdXRlcyBpdHMgbmV4dCBzdGVwIGluZGV4IHdoaWxlXG4gICAqIGhvbGRpbmcgdGhlIHBlci1ydW4gYWR2aXNvcnkgbG9jayBzaGFyZWQgd2l0aCBzdGFsZSBjbGVhbnVwLlxuICAgKi9cbiAgQHRyYW5zYWN0aW9uYWwoeyBkYlByZXNldDogXCJ3XCIgfSlcbiAgYXN5bmMgY29udGludWVUb29sUnVuKFxuICAgIHJlcXVlc3RMb2dJZDogbnVtYmVyLFxuICAgIHRvb2xSZXN1bHRzOiBUb29sUmVzdWx0Q29udGludWF0aW9uW10sXG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcbiAgICBhd2FpdCB3ZGIua25leC5yYXcoXCJTRUxFQ1QgcGdfYWR2aXNvcnlfeGFjdF9sb2NrKD8sID8pXCIsIFtcbiAgICAgIFJFUVVFU1RfTE9HX1JVTl9MT0NLX0NMQVNTX0lELFxuICAgICAgcmVxdWVzdExvZ0lkLFxuICAgIF0pO1xuXG4gICAgY29uc3QgcnVuID0gYXdhaXQgd2RiXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgLnNlbGVjdCh7IHN0YXR1czogXCJzdGF0dXNcIiB9KVxuICAgICAgLndoZXJlKFwiaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgLmZpcnN0KCk7XG4gICAgaWYgKCFydW4pIHRocm93IG5ldyBFcnJvcihgcmVxdWVzdCBsb2cgcnVuICR7cmVxdWVzdExvZ0lkfSBub3QgZm91bmRgKTtcbiAgICBpZiAocnVuLnN0YXR1cyAhPT0gXCJydW5uaW5nXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcmVxdWVzdCBsb2cgcnVuICR7cmVxdWVzdExvZ0lkfSBpcyBhbHJlYWR5ICR7cnVuLnN0YXR1c31gKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiB0b29sUmVzdWx0cykge1xuICAgICAgYXdhaXQgd2RiXG4gICAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgICAud2hlcmUoXCJ0b29sX2NhbGxfaWRcIiwgcmVzdWx0LnRvb2xDYWxsSWQpXG4gICAgICAgIC53aGVyZShcInR5cGVcIiwgXCJ0b29sX2NhbGxcIilcbiAgICAgICAgLnVwZGF0ZShyZXN1bHQuaXNFcnJvciA/IHsgZXJyb3I6IHJlc3VsdC5vdXRwdXQgfSA6IHsgdG9vbF9yZXN1bHQ6IHJlc3VsdC5vdXRwdXQgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm93ID0gYXdhaXQgd2RiXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAuc2VsZWN0KHsgbWF4X3N0ZXA6IFB1cmkubWF4KFwic3RlcF9pbmRleFwiKSB9KVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgLmZpcnN0KCk7XG4gICAgcmV0dXJuIChyb3c/Lm1heF9zdGVwID8/IC0xKSArIDE7XG4gIH1cblxuICAvKipcbiAgICog7ZmU66m0IO2RnOyLnOyaqSDstJ0g67mE7JqpLiDrqqnroZ3qs7wg6rCZ7J2AIO2VhO2EsOulvCDsoIHsmqntlZzri6QuXG4gICAqXG4gICAqIGRyaXZlcuyZgCBpbWFnZSDruYTsmqnsnYQg7ZWo6ruYIFNVTe2VnCDrkqQsIGxlZ2FjeSBkcml2ZXIg67mE7Jqp7J2YIOywqOyVoeunjCDrs7TsoJXtlZzri6QuXG4gICAqIOydtOuvuOyngCDruYTsmqnsnYAg7KCA7J6l6rCS7J2EIO2VnCDrsojrp4wg7Y+s7ZWo7ZWY6rOgIOqwgOqyqe2RnCDsnqzqs4TsgrAg64yA7IOB7JeQ7IScIOygnOyZuO2VnOuLpC5cbiAgICpcbiAgICogbGVnYWN5IOuztOygleydhCDrgqjqsqjrkZQg7J207JygOiDrsLHtlYTroZwg6riw7KG0IGxlZ2FjeSDripQgMCDsnbQg65CY7JeI7KeA66eMLCDsmbjrtoAg66Gc6rGw6rCAXG4gICAqIGBBcHBlbmRTdGVwSW5wdXRgL2BGaW5pc2hSdW5JbnB1dGAg7Jy866GcIGNvc3RTb3VyY2Ug7JeG7J20IOuEo+ycvOuptCDri6Tsi5wg7IOd6ri4IOyImCDsnojri6QuXG4gICAqIOq3uOufsCByb3cg64qUIOyggOyepeqwkiDrjIDsi6Ag7ZiE7J6sIOqwgOqyqe2RnCDsnqzqs4TsgrDqsJLsnbQg66ee7Jy866+A66GcIOywqOyVoeydhCDrjZTtlZzri6QuXG4gICAqXG4gICAqIO2VhO2EsCDsobDqsbTsnYQg7Jes6riw7IScIOuLpOyLnCDqtaztmITtlZjsp4Ag7JWK6rOgIGBhcHBseUxpc3RGaWx0ZXJzYCDrpbwg6rO17Jyg7ZWY64qUIOqyg+ydtCDtlbXsi6zsnbTri6Qg4oCUXG4gICAqIOuRkCDsv7zrpqzqsIAg6rCB7J6QIO2VhO2EsOulvCDqsIDsp4DrqbQg7ZmU66m07JeQ7IScIO2VhO2EsOulvCDqsbjsl4jsnYQg65WMIO2WiSDsiJjsmYAg67mE7Jqp7J20IOyhsOyaqe2eiCDslrTquIvrgpzri6QuXG4gICAqL1xuICBhc3luYyB0b3RhbENvc3QoXG4gICAgcmF3UGFyYW1zOiBSZXF1ZXN0TG9nTGlzdFBhcmFtcyA9IHsgbnVtOiAwLCBwYWdlOiAxIH0sXG4gICk6IFByb21pc2U8eyB1c2Q6IG51bWJlcjsgdW5rbm93bkltYWdlQ29zdENvdW50OiBudW1iZXIgfT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIG51bTogMCxcbiAgICAgIHBhZ2U6IDEsXG4gICAgICBzZWFyY2g6IFwiaWRcIiBhcyBjb25zdCxcbiAgICAgIC4uLnJhd1BhcmFtcyxcbiAgICB9IHNhdGlzZmllcyBSZXF1ZXN0TG9nTGlzdFBhcmFtcztcblxuICAgIGNvbnN0IHsgcWI6IHRvdGFsUWIgfSA9IHRoaXMuZ2V0U3Vic2V0UXVlcmllcyhcIkNcIik7XG4gICAgdGhpcy5hcHBseUxpc3RGaWx0ZXJzKHRvdGFsUWIsIHBhcmFtcyk7XG4gICAgY29uc3Qgc29uYW11RmlsdGVyID0gcGFyYW1zLnNvbmFtdUZpbHRlclxuICAgICAgPyBub3JtYWxpemVGaWx0ZXJRdWVyeShwYXJhbXMuc29uYW11RmlsdGVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5hcHBseVNvbmFtdUZpbHRlcnModG90YWxRYiwgc29uYW11RmlsdGVyKTtcbiAgICAvLyBzdWJzZXQgcWIg64qUIOy7rOufvCDrqqnroZ3snbQg7J2066+4IFNFTEVDVCDsl5Ag67CV7ZiAIOyeiOyWtCDsp5Hqs4Trpbwg7Ja57Jy866m0IEdST1VQIEJZIOyXkOufrOqwgCDrgpzri6QuXG4gICAgLy8gZXhlY3V0ZUNvdW50UXVlcnkg7JmAIOqwmeydgCDrsKnsi53snLzroZwgc2VsZWN0IOulvCDruYTsmrDqs6Ag7KeR6rOE66eMIOuCqOq4tOuLpC5cbiAgICBjb25zdCBzdG9yZWQgPSBhd2FpdCB0b3RhbFFiXG4gICAgICAuY2xlYXIoXCJzZWxlY3RcIilcbiAgICAgIC8vIOydjOyImCDsoIDsnqXqsJIo6rO86rGwIOuyhOq3uCnsnYAgMCDsnLzroZwg64iM65+s7IScIOuNlO2VnOuLpCDigJQgSlMg7Kq9IE1hdGgubWF4IOyZgCDqsJnsnYAg6rec7LmZLlxuICAgICAgLnNlbGVjdCh7XG4gICAgICAgIHRvdGFsOiBQdXJpLnJhd051bWJlcihcbiAgICAgICAgICBcIkNPQUxFU0NFKFNVTShHUkVBVEVTVChyZXF1ZXN0X2xvZ3MuY29zdF91c2QsIDApICsgQ09BTEVTQ0UocmVxdWVzdF9sb2dzLmltYWdlX2Nvc3RfdXNkLCAwKSksIDApXCIsXG4gICAgICAgICksXG4gICAgICAgIHVua25vd25JbWFnZUNvc3RDb3VudDogUHVyaS5yYXdOdW1iZXIoXG4gICAgICAgICAgXCJDT1VOVCgqKSBGSUxURVIgKFdIRVJFIHJlcXVlc3RfbG9ncy5pc19pbWFnZV9nZW5lcmF0aW9uID0gdHJ1ZSBBTkQgcmVxdWVzdF9sb2dzLmltYWdlX2Nvc3RfdXNkIElTIE5VTEwpXCIsXG4gICAgICAgICksXG4gICAgICB9KVxuICAgICAgLmZpcnN0KCk7XG5cbiAgICBjb25zdCB7IHFiOiBsZWdhY3lRYiB9ID0gdGhpcy5nZXRTdWJzZXRRdWVyaWVzKFwiQ1wiKTtcbiAgICB0aGlzLmFwcGx5TGlzdEZpbHRlcnMobGVnYWN5UWIsIHBhcmFtcyk7XG4gICAgdGhpcy5hcHBseVNvbmFtdUZpbHRlcnMobGVnYWN5UWIsIHNvbmFtdUZpbHRlcik7XG4gICAgY29uc3QgbGVnYWN5Um93cyA9IGF3YWl0IGxlZ2FjeVFiXG4gICAgICAud2hlcmVSYXcoXCJyZXF1ZXN0X2xvZ3MuY29zdF9zb3VyY2UgSVMgTlVMTCBPUiByZXF1ZXN0X2xvZ3MuY29zdF91c2QgSVMgTlVMTFwiKVxuICAgICAgLmNsZWFyKFwic2VsZWN0XCIpXG4gICAgICAuc2VsZWN0KHtcbiAgICAgICAgdG9rZW5fbmFtZTogXCJyZXF1ZXN0X2xvZ3MudG9rZW5fbmFtZVwiLFxuICAgICAgICBtb2RlbF9uYW1lOiBcInJlcXVlc3RfbG9ncy5tb2RlbF9uYW1lXCIsXG4gICAgICAgIGlucHV0X3Rva2VuczogXCJyZXF1ZXN0X2xvZ3MuaW5wdXRfdG9rZW5zXCIsXG4gICAgICAgIG91dHB1dF90b2tlbnM6IFwicmVxdWVzdF9sb2dzLm91dHB1dF90b2tlbnNcIixcbiAgICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IFwicmVxdWVzdF9sb2dzLmNhY2hlX3JlYWRfdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogXCJyZXF1ZXN0X2xvZ3MuY2FjaGVfY3JlYXRpb25fdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2VuczogXCJyZXF1ZXN0X2xvZ3MuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2VuczogXCJyZXF1ZXN0X2xvZ3MuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIsXG4gICAgICAgIGNvc3RfdXNkOiBcInJlcXVlc3RfbG9ncy5jb3N0X3VzZFwiLFxuICAgICAgfSk7XG5cbiAgICBjb25zdCBzdG9yZWRUb3RhbCA9IE51bWJlcihzdG9yZWQ/LnRvdGFsID8/IDApIC8gTUlDUk9fVVNEO1xuXG4gICAgLy8gbGVnYWN5IHJvdyDripQg7JyEIFNVTSDsl5Ag7KCA7J6l6rCS7Jy866GcIOydtOuvuCDtj6ztlajrkJjslrQg7J6I64ukLiDsnqzqs4TsgrDqsJLqs7zsnZgg7LCo7JWh66eMIOuNlO2VnOuLpC5cbiAgICBjb25zdCB1c2QgPSBsZWdhY3lSb3dzLnJlZHVjZSgoc3VtLCByb3cpID0+IHtcbiAgICAgIGNvbnN0IGFscmVhZHlTdW1tZWQgPSBNYXRoLm1heChyb3cuY29zdF91c2QgPz8gMCwgMCkgLyBNSUNST19VU0Q7XG4gICAgICBjb25zdCB1c2FnZSA9IG5vcm1hbGl6ZWRVc2FnZUZvckNvc3Qocm93KTtcbiAgICAgIGlmICghdXNhZ2UubW9kZWwpIHJldHVybiBzdW07XG4gICAgICByZXR1cm4gKFxuICAgICAgICBzdW0gK1xuICAgICAgICBjYWxjdWxhdGVDb3N0VXNkKHVzYWdlLm1vZGVsLCB7XG4gICAgICAgICAgaW5wdXRUb2tlbnM6IHVzYWdlLmlucHV0VG9rZW5zLFxuICAgICAgICAgIG91dHB1dFRva2VuczogdXNhZ2Uub3V0cHV0VG9rZW5zLFxuICAgICAgICAgIGNhY2hlZElucHV0VG9rZW5zOiB1c2FnZS5jYWNoZWRJbnB1dFRva2VucyxcbiAgICAgICAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM6IHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VucyxcbiAgICAgICAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bTogdXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zNW0sXG4gICAgICAgICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWg6IHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczFoLFxuICAgICAgICB9KSAtXG4gICAgICAgIGFscmVhZHlTdW1tZWRcbiAgICAgICk7XG4gICAgfSwgc3RvcmVkVG90YWwpO1xuICAgIHJldHVybiB7IHVzZCwgdW5rbm93bkltYWdlQ29zdENvdW50OiBOdW1iZXIoc3RvcmVkPy51bmtub3duSW1hZ2VDb3N0Q291bnQgPz8gMCkgfTtcbiAgfVxuXG4gIGFzeW5jIGRpc3RpbmN0UHJvamVjdE5hbWVzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCByb3dzID0gYXdhaXQgdGhpcy5nZXRQdXJpKFwiclwiKVxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgIC5kaXN0aW5jdChcInByb2plY3RfbmFtZVwiKVxuICAgICAgLndoZXJlKFwicHJvamVjdF9uYW1lXCIsIFwiIT1cIiwgbnVsbClcbiAgICAgIC5vcmRlckJ5KFwicHJvamVjdF9uYW1lXCIsIFwiYXNjXCIpXG4gICAgICAuc2VsZWN0KHtcbiAgICAgICAgcHJvamVjdF9uYW1lOiBcInByb2plY3RfbmFtZVwiLFxuICAgICAgfSk7XG4gICAgcmV0dXJuIHJvd3MubWFwKChyKSA9PiByLnByb2plY3RfbmFtZSEpO1xuICB9XG5cbiAgYXN5bmMgZGlzdGluY3RNb2RlbE5hbWVzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCByb3dzID0gYXdhaXQgdGhpcy5nZXRQdXJpKFwiclwiKVxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgIC5kaXN0aW5jdChcIm1vZGVsX25hbWVcIilcbiAgICAgIC53aGVyZShcIm1vZGVsX25hbWVcIiwgXCIhPVwiLCBudWxsKVxuICAgICAgLm9yZGVyQnkoXCJtb2RlbF9uYW1lXCIsIFwiYXNjXCIpXG4gICAgICAuc2VsZWN0KHtcbiAgICAgICAgbW9kZWxfbmFtZTogXCJtb2RlbF9uYW1lXCIsXG4gICAgICB9KTtcbiAgICByZXR1cm4gcm93cy5tYXAoKHIpID0+IHIubW9kZWxfbmFtZSEpO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIGRlbChpZHM6IG51bWJlcltdKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuXG4gICAgLy8gdHJhbnNhY3Rpb25cbiAgICBhd2FpdCB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgYXdhaXQgdHJ4XG4gICAgICAgIC50YWJsZShcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAgIC53aGVyZUluKFwicmVxdWVzdF9sb2dfc3RlcHMucmVxdWVzdF9sb2dfaWRcIiwgaWRzKVxuICAgICAgICAuZGVsZXRlKCk7XG4gICAgICByZXR1cm4gdHJ4LnRhYmxlKFwicmVxdWVzdF9sb2dzXCIpLndoZXJlSW4oXCJyZXF1ZXN0X2xvZ3MuaWRcIiwgaWRzKS5kZWxldGUoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBpZHMubGVuZ3RoO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nTW9kZWwgPSBuZXcgUmVxdWVzdExvZ01vZGVsQ2xhc3MoKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQStCQSxNQUFhLFlBQVk7QUFDekIsTUFBTSxnQ0FBZ0M7QUFDdEMsTUFBTSx3QkFBd0I7QUFFOUIsU0FBUyxrQkFBa0IsT0FBd0M7Q0FDakUsSUFBSSxDQUFDLE9BQU8sT0FBTztDQUNuQixJQUFJLE9BQU8sVUFBVSxVQUFVLE9BQU87Q0FDdEMsSUFBSTtFQUNGLE9BQU8sS0FBSyxNQUFNLEtBQUs7Q0FDekIsUUFBUTtFQUNOLE9BQU87Q0FDVDtBQUNGO0FBcUJBLE1BQU0sd0JBQXdCO0NBQzVCLGNBQWM7Q0FDZCxlQUFlO0NBQ2YsbUJBQW1CO0NBQ25CLHVCQUF1QjtDQUN2QiwwQkFB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
|
|
@@ -11,6 +11,12 @@ const HistoryItems = z.array(z.object({
|
|
|
11
11
|
call_id: z.string().optional(),
|
|
12
12
|
output: z.string().optional()
|
|
13
13
|
}));
|
|
14
|
+
const InputImages = z.array(z.object({
|
|
15
|
+
mediaType: z.string().optional(),
|
|
16
|
+
data: z.string().optional(),
|
|
17
|
+
url: z.string().optional(),
|
|
18
|
+
byteSize: z.number().optional()
|
|
19
|
+
}));
|
|
14
20
|
const ToolDefinitions = z.array(QgridTool);
|
|
15
21
|
const ToolView = z.object({
|
|
16
22
|
name: z.string(),
|
|
@@ -31,6 +37,6 @@ const RequestLogSaveParams = RequestLogBaseSchema.partial({
|
|
|
31
37
|
error_message: true
|
|
32
38
|
});
|
|
33
39
|
//#endregion
|
|
34
|
-
export { HistoryItems, RequestLogListParams, RequestLogSaveParams, ToolDefinitions, ToolView };
|
|
40
|
+
export { HistoryItems, InputImages, RequestLogListParams, RequestLogSaveParams, ToolDefinitions, ToolView };
|
|
35
41
|
|
|
36
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1sb2cudHlwZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3JlcXVlc3QtbG9nL3JlcXVlc3QtbG9nLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IFFncmlkVG9vbCB9IGZyb20gXCIuLi9xZ3JpZC9xZ3JpZC50eXBlc1wiO1xuaW1wb3J0IHsgUmVxdWVzdExvZ0Jhc2VMaXN0UGFyYW1zLCBSZXF1ZXN0TG9nQmFzZVNjaGVtYSB9IGZyb20gXCIuLi9zb25hbXUuZ2VuZXJhdGVkXCI7XG5cbmV4cG9ydCBjb25zdCBIaXN0b3J5SXRlbXMgPSB6LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5zdHJpbmcoKSxcbiAgICByb2xlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgY29udGVudDogei51bmtub3duKCkub3B0aW9uYWwoKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgYXJndW1lbnRzOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgY2FsbF9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIG91dHB1dDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KSxcbik7XG5leHBvcnQgdHlwZSBIaXN0b3J5SXRlbXMgPSB6LmluZmVyPHR5cGVvZiBIaXN0b3J5SXRlbXM+O1xuXG4vLyDsmpTssq3sl5Ag7J6l7LCp65CcIHRvb2wg7KCV7J2YIOuqqeuhnSDigJQg7KCA7J6lIO2Yle2DnOuKlCBRZ3JpZFRvb2wg6rOE7JW97J2EIOq3uOuMgOuhnCDrlLDrpbjri6QuXG5leHBvcnQgY29uc3QgVG9vbERlZmluaXRpb25zID0gei5hcnJheShRZ3JpZFRvb2wpO1xuZXhwb3J0IHR5cGUgVG9vbERlZmluaXRpb25zID0gei5pbmZlcjx0eXBlb2YgVG9vbERlZmluaXRpb25zPjtcblxuLy8gcmVxdWVzdC1sb2cgZGV0YWlsIO2ZlOuptOydtCDshozruYTtlZjripQgdG9vbCDqs4Tslb0gcHJvamVjdGlvbi4gQVBJIOuwmO2ZmCDtg4DsnoXsnYAgU29uYW11XG4vLyBzeW5jZXIg6rCAIOuqqOuTiOydhCDtlbTshJ3tlaAg7IiYIOyeiOuPhOuhnSB0eXBlLW9ubHkg7ISg7Ja4IOuMgOyLoCBab2Qgc2NoZW1hIOuhnCDrkZTri6QuXG5leHBvcnQgY29uc3QgVG9vbFZpZXcgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHBhcmFtZXRlckNvdW50OiB6Lm51bWJlcigpLFxuICBpbnB1dFpvZDogei5zdHJpbmcoKSxcbiAgZnVsbElucHV0Wm9kOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFRvb2xWaWV3ID0gei5pbmZlcjx0eXBlb2YgVG9vbFZpZXc+
|
|
42
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1sb2cudHlwZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3JlcXVlc3QtbG9nL3JlcXVlc3QtbG9nLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IFFncmlkVG9vbCB9IGZyb20gXCIuLi9xZ3JpZC9xZ3JpZC50eXBlc1wiO1xuaW1wb3J0IHsgUmVxdWVzdExvZ0Jhc2VMaXN0UGFyYW1zLCBSZXF1ZXN0TG9nQmFzZVNjaGVtYSB9IGZyb20gXCIuLi9zb25hbXUuZ2VuZXJhdGVkXCI7XG5cbmV4cG9ydCBjb25zdCBIaXN0b3J5SXRlbXMgPSB6LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5zdHJpbmcoKSxcbiAgICByb2xlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgY29udGVudDogei51bmtub3duKCkub3B0aW9uYWwoKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgYXJndW1lbnRzOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgY2FsbF9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIG91dHB1dDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KSxcbik7XG5leHBvcnQgdHlwZSBIaXN0b3J5SXRlbXMgPSB6LmluZmVyPHR5cGVvZiBIaXN0b3J5SXRlbXM+O1xuXG4vLyDtmITsnqwgdXNlciB0dXJu7J2YIOyeheugpSDsnbTrr7jsp4AuIGltYWdlX2dlbmVyYXRpb24gdG9vbF9hcmdzLmlucHV0SW1hZ2Vz7JmAIOqwmeydgCDtmJXtg5zri6QuXG5leHBvcnQgY29uc3QgSW5wdXRJbWFnZXMgPSB6LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgbWVkaWFUeXBlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZGF0YTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHVybDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGJ5dGVTaXplOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIH0pLFxuKTtcbmV4cG9ydCB0eXBlIElucHV0SW1hZ2VzID0gei5pbmZlcjx0eXBlb2YgSW5wdXRJbWFnZXM+O1xuXG4vLyDsmpTssq3sl5Ag7J6l7LCp65CcIHRvb2wg7KCV7J2YIOuqqeuhnSDigJQg7KCA7J6lIO2Yle2DnOuKlCBRZ3JpZFRvb2wg6rOE7JW97J2EIOq3uOuMgOuhnCDrlLDrpbjri6QuXG5leHBvcnQgY29uc3QgVG9vbERlZmluaXRpb25zID0gei5hcnJheShRZ3JpZFRvb2wpO1xuZXhwb3J0IHR5cGUgVG9vbERlZmluaXRpb25zID0gei5pbmZlcjx0eXBlb2YgVG9vbERlZmluaXRpb25zPjtcblxuLy8gcmVxdWVzdC1sb2cgZGV0YWlsIO2ZlOuptOydtCDshozruYTtlZjripQgdG9vbCDqs4Tslb0gcHJvamVjdGlvbi4gQVBJIOuwmO2ZmCDtg4DsnoXsnYAgU29uYW11XG4vLyBzeW5jZXIg6rCAIOuqqOuTiOydhCDtlbTshJ3tlaAg7IiYIOyeiOuPhOuhnSB0eXBlLW9ubHkg7ISg7Ja4IOuMgOyLoCBab2Qgc2NoZW1hIOuhnCDrkZTri6QuXG5leHBvcnQgY29uc3QgVG9vbFZpZXcgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHBhcmFtZXRlckNvdW50OiB6Lm51bWJlcigpLFxuICBpbnB1dFpvZDogei5zdHJpbmcoKSxcbiAgZnVsbElucHV0Wm9kOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFRvb2xWaWV3ID0gei5pbmZlcjx0eXBlb2YgVG9vbFZpZXc+O1xuXG4vLyBSZXF1ZXN0TG9nIC0gTGlzdFBhcmFtc1xuLy8gcHJvamVjdF9uYW1lIE5VTEwg67aE6riwOiBJUyBOVUxM66eMIOyhsO2ajCh1bmFzc2lnbmVkIO2VhO2EsCkg65iQ64qUIElTIE5PVCBOVUxM66eMKGRpc3RpbmN0IOyhsO2ajCkuXG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ0xpc3RQYXJhbXMgPSBSZXF1ZXN0TG9nQmFzZUxpc3RQYXJhbXMuZXh0ZW5kKHtcbiAgcHJvamVjdF9uYW1lX2lzX251bGw6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHByb2plY3RfbmFtZV9pc19ub3RfbnVsbDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUmVxdWVzdExvZ0xpc3RQYXJhbXMgPSB6LmluZmVyPHR5cGVvZiBSZXF1ZXN0TG9nTGlzdFBhcmFtcz47XG5cbi8vIFJlcXVlc3RMb2cgLSBTYXZlUGFyYW1zXG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1NhdmVQYXJhbXMgPSBSZXF1ZXN0TG9nQmFzZVNjaGVtYS5wYXJ0aWFsKHtcbiAgaWQ6IHRydWUsXG4gIGNyZWF0ZWRfYXQ6IHRydWUsXG4gIHRva2VuX25hbWU6IHRydWUsXG4gIHN0YXR1czogdHJ1ZSxcbiAgZXJyb3JfbWVzc2FnZTogdHJ1ZSxcbn0pO1xuZXhwb3J0IHR5cGUgUmVxdWVzdExvZ1NhdmVQYXJhbXMgPSB6LmluZmVyPHR5cGVvZiBSZXF1ZXN0TG9nU2F2ZVBhcmFtcz47XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFLQSxNQUFhLGVBQWUsRUFBRSxNQUM1QixFQUFFLE9BQU87Q0FDUCxNQUFNLEVBQUUsT0FBTztDQUNmLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzFCLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxTQUFTO0NBQzlCLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzFCLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQy9CLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzdCLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0FBQzlCLENBQUMsQ0FDSDtBQUlBLE1BQWEsY0FBYyxFQUFFLE1BQzNCLEVBQUUsT0FBTztDQUNQLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQy9CLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzFCLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ3pCLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0FBQ2hDLENBQUMsQ0FDSDtBQUlBLE1BQWEsa0JBQWtCLEVBQUUsTUFBTSxTQUFTO0FBS2hELE1BQWEsV0FBVyxFQUFFLE9BQU87Q0FDL0IsTUFBTSxFQUFFLE9BQU87Q0FDZixhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNqQyxnQkFBZ0IsRUFBRSxPQUFPO0NBQ3pCLFVBQVUsRUFBRSxPQUFPO0NBQ25CLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0FBQ3BDLENBQUM7QUFLRCxNQUFhLHVCQUF1Qix5QkFBeUIsT0FBTztDQUNsRSxzQkFBc0IsRUFBRSxRQUFRLENBQUMsQ0FBQyxTQUFTO0NBQzNDLDBCQUEwQixFQUFFLFFBQVEsQ0FBQyxDQUFDLFNBQVM7QUFDakQsQ0FBQztBQUlELE1BQWEsdUJBQXVCLHFCQUFxQixRQUFRO0NBQy9ELElBQUk7Q0FDSixZQUFZO0NBQ1osWUFBWTtDQUNaLFFBQVE7Q0FDUixlQUFlO0FBQ2pCLENBQUMifQ==
|