@cartanova/qgrid-cli 1.5.6 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/bundle/dist/application/qgrid/oauth.js +1 -1
  2. package/bundle/dist/application/qgrid/qgrid.dispatcher.js +166 -0
  3. package/bundle/dist/application/qgrid/qgrid.frame.js +28 -36
  4. package/bundle/dist/application/qgrid/qgrid.types.js +5 -16
  5. package/bundle/dist/i18n/sd.generated.js +2 -2
  6. package/bundle/dist/sonamu.config.js +6 -9
  7. package/bundle/src/application/qgrid/oauth.ts +1 -1
  8. package/bundle/src/application/qgrid/qgrid.dispatcher.ts +184 -0
  9. package/bundle/src/application/qgrid/qgrid.frame.ts +28 -50
  10. package/bundle/src/application/qgrid/qgrid.types.ts +2 -14
  11. package/bundle/src/application/sonamu.generated.http +2 -1
  12. package/bundle/src/i18n/sd.generated.ts +1 -1
  13. package/bundle/src/sonamu.config.ts +4 -7
  14. package/bundle/web-dist/client/assets/index-D8eEjsZj.js +78 -0
  15. package/bundle/web-dist/client/assets/{logs-KoJtGoEG.js → logs-CKnJzuH6.js} +1 -1
  16. package/bundle/web-dist/client/assets/{routes-CqzIoGYg.js → routes-DQKecVGa.js} +1 -1
  17. package/bundle/web-dist/client/assets/{sd.generated-Duipc8HN.js → sd.generated-NHYHS_-0.js} +1 -1
  18. package/bundle/web-dist/client/assets/services.generated-DDVXMid7.js +1 -0
  19. package/bundle/web-dist/client/assets/{show-BuMxiSr1.js → show-D2z1qxJ5.js} +1 -1
  20. package/bundle/web-dist/client/assets/tokens-BaywaQkm.js +1 -0
  21. package/bundle/web-dist/client/index.html +2 -2
  22. package/bundle/web-dist/server/assets/{copy-BPyN_0Dp.js → copy-BVWDOV2T.js} +1 -1
  23. package/bundle/web-dist/server/assets/{lazyRouteComponent-Bmjwy0OA.js → lazyRouteComponent-BJmwxFyJ.js} +2 -2
  24. package/bundle/web-dist/server/assets/{logs-BgcF7jVg.js → logs-DgIbufNf.js} +3 -3
  25. package/bundle/web-dist/server/assets/{routes-DVA-nsZ-.js → routes-x7-hqUm0.js} +2 -2
  26. package/bundle/web-dist/server/assets/{sd.generated-CDVQy4CJ.js → sd.generated-BZPIp4uL.js} +1 -1
  27. package/bundle/web-dist/server/assets/{services.generated-DWyvb1vb.js → services.generated-BA0gbdmd.js} +5 -4
  28. package/bundle/web-dist/server/assets/{shim-CqVZY710.js → shim-DGrmZkac.js} +1 -1
  29. package/bundle/web-dist/server/assets/{show-BnKnfNFP.js → show-Bk3NayMH.js} +4 -4
  30. package/bundle/web-dist/server/assets/{tokens-7z55hPRV.js → tokens-CVSwt0x0.js} +6 -17
  31. package/bundle/web-dist/server/entry-server.generated.js +7 -7
  32. package/package.json +1 -1
  33. package/bundle/dist/application/qgrid/pool.js +0 -128
  34. package/bundle/dist/application/qgrid/worker.js +0 -189
  35. package/bundle/src/application/qgrid/pool.ts +0 -165
  36. package/bundle/src/application/qgrid/worker.ts +0 -240
  37. package/bundle/web-dist/client/assets/index-BnqlZB1V.js +0 -78
  38. package/bundle/web-dist/client/assets/services.generated-Ccs6tru4.js +0 -1
  39. package/bundle/web-dist/client/assets/tokens--z-eVto5.js +0 -1
@@ -137,4 +137,4 @@ async function fetchUsage(accessToken) {
137
137
  //#endregion
138
138
  export { buildAuthUrl, exchangeCodeForTokens, fetchUsage, generatePKCE, refreshAccessToken };
139
139
 
140
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL29hdXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogT0F1dGgg7Jyg7Yu4IOKAlCBDbGF1ZGUgQ29kZSDshozsiqTsnZggT0F1dGgg7ZSM66Gc7JqwIOq3uOuMgOuhnCDsnqztmIRcbiAqL1xuaW1wb3J0IHsgY3JlYXRlSGFzaCwgcmFuZG9tQnl0ZXMgfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcblxuaW1wb3J0IHR5cGUgeyBVc2FnZVJlc3BvbnNlIH0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuY29uc3QgQ0xJRU5UX0lEID0gXCI5ZDFjMjUwYS1lNjFiLTQ0ZDktODhlZC01OTQ0ZDE5NjJmNWVcIjtcbmNvbnN0IEFVVEhPUklaRV9VUkwgPSBcImh0dHBzOi8vY2xhdWRlLmNvbS9jYWkvb2F1dGgvYXV0aG9yaXplXCI7XG5jb25zdCBUT0tFTl9VUkwgPSBcImh0dHBzOi8vcGxhdGZvcm0uY2xhdWRlLmNvbS92MS9vYXV0aC90b2tlblwiO1xuXG4vLyBsb2dpbiDsi5wg7IKs7JqpIChhdXRob3JpemUgVVJMKVxuY29uc3QgQUxMX1NDT1BFUyA9IFtcbiAgXCJvcmc6Y3JlYXRlX2FwaV9rZXlcIixcbiAgXCJ1c2VyOnByb2ZpbGVcIixcbiAgXCJ1c2VyOmluZmVyZW5jZVwiLFxuICBcInVzZXI6c2Vzc2lvbnM6Y2xhdWRlX2NvZGVcIixcbiAgXCJ1c2VyOm1jcF9zZXJ2ZXJzXCIsXG4gIFwidXNlcjpmaWxlX3VwbG9hZFwiLFxuXTtcblxuLy8gcmVmcmVzaCDsi5wg7IKs7JqpIChvcmc6Y3JlYXRlX2FwaV9rZXkg7KCc7Jm4KVxuY29uc3QgUkVGUkVTSF9TQ09QRVMgPSBbXG4gIFwidXNlcjpwcm9maWxlXCIsXG4gIFwidXNlcjppbmZlcmVuY2VcIixcbiAgXCJ1c2VyOnNlc3Npb25zOmNsYXVkZV9jb2RlXCIsXG4gIFwidXNlcjptY3Bfc2VydmVyc1wiLFxuICBcInVzZXI6ZmlsZV91cGxvYWRcIixcbl07XG5cbmZ1bmN0aW9uIGJhc2U2NFVSTEVuY29kZShidWZmZXI6IEJ1ZmZlcik6IHN0cmluZyB7XG4gIHJldHVybiBidWZmZXIudG9TdHJpbmcoXCJiYXNlNjRcIikucmVwbGFjZSgvXFwrL2csIFwiLVwiKS5yZXBsYWNlKC9cXC8vZywgXCJfXCIpLnJlcGxhY2UoLz0vZywgXCJcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVBLQ0UoKTogeyBjb2RlVmVyaWZpZXI6IHN0cmluZzsgY29kZUNoYWxsZW5nZTogc3RyaW5nOyBzdGF0ZTogc3RyaW5nIH0ge1xuICBjb25zdCBjb2RlVmVyaWZpZXIgPSBiYXNlNjRVUkxFbmNvZGUocmFuZG9tQnl0ZXMoMzIpKTtcbiAgY29uc3QgY29kZUNoYWxsZW5nZSA9IGJhc2U2NFVSTEVuY29kZShjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShjb2RlVmVyaWZpZXIpLmRpZ2VzdCgpKTtcbiAgY29uc3Qgc3RhdGUgPSBiYXNlNjRVUkxFbmNvZGUocmFuZG9tQnl0ZXMoMzIpKTtcbiAgcmV0dXJuIHsgY29kZVZlcmlmaWVyLCBjb2RlQ2hhbGxlbmdlLCBzdGF0ZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBdXRoVXJsKGNvZGVDaGFsbGVuZ2U6IHN0cmluZywgc3RhdGU6IHN0cmluZywgcmVkaXJlY3RVcmk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoQVVUSE9SSVpFX1VSTCk7XG4gIHVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwiY29kZVwiLCBcInRydWVcIik7XG4gIHVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwiY2xpZW50X2lkXCIsIENMSUVOVF9JRCk7XG4gIHVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwicmVzcG9uc2VfdHlwZVwiLCBcImNvZGVcIik7XG4gIHVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwicmVkaXJlY3RfdXJpXCIsIHJlZGlyZWN0VXJpKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoXCJzY29wZVwiLCBBTExfU0NPUEVTLmpvaW4oXCIgXCIpKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoXCJjb2RlX2NoYWxsZW5nZVwiLCBjb2RlQ2hhbGxlbmdlKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoXCJjb2RlX2NoYWxsZW5nZV9tZXRob2RcIiwgXCJTMjU2XCIpO1xuICB1cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChcInN0YXRlXCIsIHN0YXRlKTtcbiAgcmV0dXJuIHVybC50b1N0cmluZygpO1xufVxuXG5leHBvcnQgdHlwZSBPQXV0aFRva2VucyA9IHtcbiAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgcmVmcmVzaFRva2VuOiBzdHJpbmc7XG4gIGV4cGlyZXNBdDogbnVtYmVyO1xuICBzY29wZTogc3RyaW5nO1xuICBhY2NvdW50VXVpZD86IHN0cmluZztcbiAgZW1haWxBZGRyZXNzPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4Y2hhbmdlQ29kZUZvclRva2VucyhcbiAgY29kZTogc3RyaW5nLFxuICBjb2RlVmVyaWZpZXI6IHN0cmluZyxcbiAgc3RhdGU6IHN0cmluZyxcbiAgcmVkaXJlY3RVcmk6IHN0cmluZyxcbik6IFByb21pc2U8T0F1dGhUb2tlbnM+IHtcbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goVE9LRU5fVVJMLCB7XG4gICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZ3JhbnRfdHlwZTogXCJhdXRob3JpemF0aW9uX2NvZGVcIixcbiAgICAgIGNvZGUsXG4gICAgICByZWRpcmVjdF91cmk6IHJlZGlyZWN0VXJpLFxuICAgICAgY2xpZW50X2lkOiBDTElFTlRfSUQsXG4gICAgICBjb2RlX3ZlcmlmaWVyOiBjb2RlVmVyaWZpZXIsXG4gICAgICBzdGF0ZSxcbiAgICB9KSxcbiAgfSk7XG4gIGlmICghcmVzLm9rKSB7XG4gICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlcy50ZXh0KCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUb2tlbiBleGNoYW5nZSBmYWlsZWQgKCR7cmVzLnN0YXR1c30pOiAke3RleHR9YCk7XG4gIH1cblxuICBjb25zdCBkYXRhID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIHtcbiAgICBhY2Nlc3NfdG9rZW46IHN0cmluZztcbiAgICByZWZyZXNoX3Rva2VuOiBzdHJpbmc7XG4gICAgZXhwaXJlc19pbjogbnVtYmVyO1xuICAgIHNjb3BlOiBzdHJpbmc7XG4gICAgYWNjb3VudD86IHsgdXVpZDogc3RyaW5nOyBlbWFpbF9hZGRyZXNzOiBzdHJpbmcgfTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFjY2Vzc1Rva2VuOiBkYXRhLmFjY2Vzc190b2tlbixcbiAgICByZWZyZXNoVG9rZW46IGRhdGEucmVmcmVzaF90b2tlbixcbiAgICBleHBpcmVzQXQ6IERhdGUubm93KCkgKyBkYXRhLmV4cGlyZXNfaW4gKiAxMDAwLFxuICAgIHNjb3BlOiBkYXRhLnNjb3BlLFxuICAgIGFjY291bnRVdWlkOiBkYXRhLmFjY291bnQ/LnV1aWQsXG4gICAgZW1haWxBZGRyZXNzOiBkYXRhLmFjY291bnQ/LmVtYWlsX2FkZHJlc3MsXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWZyZXNoQWNjZXNzVG9rZW4ocmVmcmVzaFRva2VuOiBzdHJpbmcpOiBQcm9taXNlPE9BdXRoVG9rZW5zPiB7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKFRPS0VOX1VSTCwge1xuICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGdyYW50X3R5cGU6IFwicmVmcmVzaF90b2tlblwiLFxuICAgICAgcmVmcmVzaF90b2tlbjogcmVmcmVzaFRva2VuLFxuICAgICAgY2xpZW50X2lkOiBDTElFTlRfSUQsXG4gICAgICBzY29wZTogUkVGUkVTSF9TQ09QRVMuam9pbihcIiBcIiksXG4gICAgfSksXG4gIH0pO1xuICBpZiAoIXJlcy5vaykge1xuICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXMudGV4dCgpO1xuICAgIHRocm93IG5ldyBFcnJvcihgVG9rZW4gcmVmcmVzaCBmYWlsZWQgKCR7cmVzLnN0YXR1c30pOiAke3RleHR9YCk7XG4gIH1cbiAgY29uc3QgZGF0YSA9IChhd2FpdCByZXMuanNvbigpKSBhcyB7XG4gICAgYWNjZXNzX3Rva2VuOiBzdHJpbmc7XG4gICAgcmVmcmVzaF90b2tlbjogc3RyaW5nO1xuICAgIGV4cGlyZXNfaW46IG51bWJlcjtcbiAgICBzY29wZTogc3RyaW5nO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWNjZXNzVG9rZW46IGRhdGEuYWNjZXNzX3Rva2VuLFxuICAgIHJlZnJlc2hUb2tlbjogZGF0YS5yZWZyZXNoX3Rva2VuID8/IHJlZnJlc2hUb2tlbixcbiAgICBleHBpcmVzQXQ6IERhdGUubm93KCkgKyBkYXRhLmV4cGlyZXNfaW4gKiAxMDAwLFxuICAgIHNjb3BlOiBkYXRhLnNjb3BlLFxuICB9O1xufVxuXG5jb25zdCB1c2FnZUNhY2hlOiBSZWNvcmQ8c3RyaW5nLCB7IGRhdGE6IFVzYWdlUmVzcG9uc2U7IGNhY2hlZEF0OiBudW1iZXIgfT4gPSB7fTtcbmNvbnN0IFVTQUdFX0FQSV9DQUNIRV9UVEwgPSA2MF8wMDA7IC8vIDHrtoRcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoVXNhZ2UoYWNjZXNzVG9rZW46IHN0cmluZyk6IFByb21pc2U8VXNhZ2VSZXNwb25zZT4ge1xuICBjb25zdCBjYWNoZUtleSA9IGFjY2Vzc1Rva2VuLnNsaWNlKC0xMCk7XG4gIGNvbnN0IGNhY2hlZCA9IHVzYWdlQ2FjaGVbY2FjaGVLZXldO1xuICBpZiAoY2FjaGVkICYmIERhdGUubm93KCkgLSBjYWNoZWQuY2FjaGVkQXQgPCBVU0FHRV9BUElfQ0FDSEVfVFRMKSB7XG4gICAgY29uc29sZS5sb2coYFt1c2FnZV0gY2FjaGUgaGl0OiAke2NhY2hlS2V5fWApO1xuICAgIHJldHVybiBjYWNoZWQuZGF0YTtcbiAgfVxuXG4gIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKFwiaHR0cHM6Ly9hcGkuYW50aHJvcGljLmNvbS9hcGkvb2F1dGgvdXNhZ2VcIiwge1xuICAgIGhlYWRlcnM6IHtcbiAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gLFxuICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICBcImFudGhyb3BpYy1iZXRhXCI6IFwib2F1dGgtMjAyNS0wNC0yMFwiLFxuICAgIH0sXG4gICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KDUwMDApLFxuICB9KTtcbiAgaWYgKCFyZXMub2spIHtcbiAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzLnRleHQoKTtcblxuICAgIC8vIO2MjOyLsSDsi5zrj4TtlbTshJwg7JeQ65+sIOuplOyLnOyngCDstpTstpxcbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gYEVycm9yICR7cmVzLnN0YXR1c31gO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHRleHQpO1xuICAgICAgZXJyb3JNZXNzYWdlID0gcGFyc2VkLmVycm9yPy5tZXNzYWdlID8/IGVycm9yTWVzc2FnZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIO2MjOyLsSDslYgg65CY66m0IOq4sOuzuCDrqZTsi5zsp4BcbiAgICB9XG5cbiAgICBjb25zb2xlLndhcm4oYFt1c2FnZV0gJHtyZXMuc3RhdHVzfTogJHtlcnJvck1lc3NhZ2V9YCk7XG5cbiAgICAvLyDsnbTsoIQg7ISx6rO1IOy6kOyLnCDsnojsnLzrqbQg7Jyg7KeAXG4gICAgaWYgKGNhY2hlZD8uZGF0YSAmJiAhY2FjaGVkLmRhdGEuZXJyb3IpIHJldHVybiBjYWNoZWQuZGF0YTtcblxuICAgIC8vIOyLpO2MqOuPhCDsupDsi5wgKOuwmOuztSDtmLjstpwg67Cp7KeAKVxuICAgIGNvbnN0IGVycm9yUmVzdWx0ID0geyBlcnJvcjogZXJyb3JNZXNzYWdlIH07XG4gICAgdXNhZ2VDYWNoZVtjYWNoZUtleV0gPSB7IGRhdGE6IGVycm9yUmVzdWx0LCBjYWNoZWRBdDogRGF0ZS5ub3coKSB9O1xuICAgIHJldHVybiBlcnJvclJlc3VsdDtcbiAgfVxuXG4gIGNvbnN0IGRhdGEgPSAoYXdhaXQgcmVzLmpzb24oKSkgYXMgVXNhZ2VSZXNwb25zZTtcbiAgLy8gY2FjaGUgaW52YWxpZGF0ZVxuICB1c2FnZUNhY2hlW2NhY2hlS2V5XSA9IHsgZGF0YSwgY2FjaGVkQXQ6IERhdGUubm93KCkgfTtcbiAgcmV0dXJuIGRhdGE7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQU9BLE1BQU0sWUFBWTtBQUNsQixNQUFNLGdCQUFnQjtBQUN0QixNQUFNLFlBQVk7QUFHbEIsTUFBTSxhQUFhO0NBQ2pCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNEO0FBR0QsTUFBTSxpQkFBaUI7Q0FDckI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNEO0FBRUQsU0FBUyxnQkFBZ0IsUUFBd0I7QUFDL0MsUUFBTyxPQUFPLFNBQVMsU0FBUyxDQUFDLFFBQVEsT0FBTyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxRQUFRLE1BQU0sR0FBRzs7QUFHNUYsU0FBZ0IsZUFBK0U7Q0FDN0YsTUFBTSxlQUFlLGdCQUFnQixZQUFZLEdBQUcsQ0FBQztBQUdyRCxRQUFPO0VBQUU7RUFBYyxlQUZELGdCQUFnQixXQUFXLFNBQVMsQ0FBQyxPQUFPLGFBQWEsQ0FBQyxRQUFRLENBQUM7RUFFbkQsT0FEeEIsZ0JBQWdCLFlBQVksR0FBRyxDQUFDO0VBQ0Q7O0FBRy9DLFNBQWdCLGFBQWEsZUFB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
140
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL29hdXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogT0F1dGgg7Jyg7Yu4IOKAlCBDbGF1ZGUgQ29kZSDshozsiqTsnZggT0F1dGgg7ZSM66Gc7JqwIOq3uOuMgOuhnCDsnqztmIRcbiAqL1xuaW1wb3J0IHsgY3JlYXRlSGFzaCwgcmFuZG9tQnl0ZXMgfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcblxuaW1wb3J0IHsgdHlwZSBVc2FnZVJlc3BvbnNlIH0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuY29uc3QgQ0xJRU5UX0lEID0gXCI5ZDFjMjUwYS1lNjFiLTQ0ZDktODhlZC01OTQ0ZDE5NjJmNWVcIjtcbmNvbnN0IEFVVEhPUklaRV9VUkwgPSBcImh0dHBzOi8vY2xhdWRlLmNvbS9jYWkvb2F1dGgvYXV0aG9yaXplXCI7XG5jb25zdCBUT0tFTl9VUkwgPSBcImh0dHBzOi8vcGxhdGZvcm0uY2xhdWRlLmNvbS92MS9vYXV0aC90b2tlblwiO1xuXG4vLyBsb2dpbiDsi5wg7IKs7JqpIChhdXRob3JpemUgVVJMKVxuY29uc3QgQUxMX1NDT1BFUyA9IFtcbiAgXCJvcmc6Y3JlYXRlX2FwaV9rZXlcIixcbiAgXCJ1c2VyOnByb2ZpbGVcIixcbiAgXCJ1c2VyOmluZmVyZW5jZVwiLFxuICBcInVzZXI6c2Vzc2lvbnM6Y2xhdWRlX2NvZGVcIixcbiAgXCJ1c2VyOm1jcF9zZXJ2ZXJzXCIsXG4gIFwidXNlcjpmaWxlX3VwbG9hZFwiLFxuXTtcblxuLy8gcmVmcmVzaCDsi5wg7IKs7JqpIChvcmc6Y3JlYXRlX2FwaV9rZXkg7KCc7Jm4KVxuY29uc3QgUkVGUkVTSF9TQ09QRVMgPSBbXG4gIFwidXNlcjpwcm9maWxlXCIsXG4gIFwidXNlcjppbmZlcmVuY2VcIixcbiAgXCJ1c2VyOnNlc3Npb25zOmNsYXVkZV9jb2RlXCIsXG4gIFwidXNlcjptY3Bfc2VydmVyc1wiLFxuICBcInVzZXI6ZmlsZV91cGxvYWRcIixcbl07XG5cbmZ1bmN0aW9uIGJhc2U2NFVSTEVuY29kZShidWZmZXI6IEJ1ZmZlcik6IHN0cmluZyB7XG4gIHJldHVybiBidWZmZXIudG9TdHJpbmcoXCJiYXNlNjRcIikucmVwbGFjZSgvXFwrL2csIFwiLVwiKS5yZXBsYWNlKC9cXC8vZywgXCJfXCIpLnJlcGxhY2UoLz0vZywgXCJcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVBLQ0UoKTogeyBjb2RlVmVyaWZpZXI6IHN0cmluZzsgY29kZUNoYWxsZW5nZTogc3RyaW5nOyBzdGF0ZTogc3RyaW5nIH0ge1xuICBjb25zdCBjb2RlVmVyaWZpZXIgPSBiYXNlNjRVUkxFbmNvZGUocmFuZG9tQnl0ZXMoMzIpKTtcbiAgY29uc3QgY29kZUNoYWxsZW5nZSA9IGJhc2U2NFVSTEVuY29kZShjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShjb2RlVmVyaWZpZXIpLmRpZ2VzdCgpKTtcbiAgY29uc3Qgc3RhdGUgPSBiYXNlNjRVUkxFbmNvZGUocmFuZG9tQnl0ZXMoMzIpKTtcbiAgcmV0dXJuIHsgY29kZVZlcmlmaWVyLCBjb2RlQ2hhbGxlbmdlLCBzdGF0ZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBdXRoVXJsKGNvZGVDaGFsbGVuZ2U6IHN0cmluZywgc3RhdGU6IHN0cmluZywgcmVkaXJlY3RVcmk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoQVVUSE9SSVpFX1VSTCk7XG4gIHVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwiY29kZVwiLCBcInRydWVcIik7XG4gIHVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwiY2xpZW50X2lkXCIsIENMSUVOVF9JRCk7XG4gIHVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwicmVzcG9uc2VfdHlwZVwiLCBcImNvZGVcIik7XG4gIHVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKFwicmVkaXJlY3RfdXJpXCIsIHJlZGlyZWN0VXJpKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoXCJzY29wZVwiLCBBTExfU0NPUEVTLmpvaW4oXCIgXCIpKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoXCJjb2RlX2NoYWxsZW5nZVwiLCBjb2RlQ2hhbGxlbmdlKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoXCJjb2RlX2NoYWxsZW5nZV9tZXRob2RcIiwgXCJTMjU2XCIpO1xuICB1cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChcInN0YXRlXCIsIHN0YXRlKTtcbiAgcmV0dXJuIHVybC50b1N0cmluZygpO1xufVxuXG5leHBvcnQgdHlwZSBPQXV0aFRva2VucyA9IHtcbiAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgcmVmcmVzaFRva2VuOiBzdHJpbmc7XG4gIGV4cGlyZXNBdDogbnVtYmVyO1xuICBzY29wZTogc3RyaW5nO1xuICBhY2NvdW50VXVpZD86IHN0cmluZztcbiAgZW1haWxBZGRyZXNzPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4Y2hhbmdlQ29kZUZvclRva2VucyhcbiAgY29kZTogc3RyaW5nLFxuICBjb2RlVmVyaWZpZXI6IHN0cmluZyxcbiAgc3RhdGU6IHN0cmluZyxcbiAgcmVkaXJlY3RVcmk6IHN0cmluZyxcbik6IFByb21pc2U8T0F1dGhUb2tlbnM+IHtcbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goVE9LRU5fVVJMLCB7XG4gICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZ3JhbnRfdHlwZTogXCJhdXRob3JpemF0aW9uX2NvZGVcIixcbiAgICAgIGNvZGUsXG4gICAgICByZWRpcmVjdF91cmk6IHJlZGlyZWN0VXJpLFxuICAgICAgY2xpZW50X2lkOiBDTElFTlRfSUQsXG4gICAgICBjb2RlX3ZlcmlmaWVyOiBjb2RlVmVyaWZpZXIsXG4gICAgICBzdGF0ZSxcbiAgICB9KSxcbiAgfSk7XG4gIGlmICghcmVzLm9rKSB7XG4gICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlcy50ZXh0KCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUb2tlbiBleGNoYW5nZSBmYWlsZWQgKCR7cmVzLnN0YXR1c30pOiAke3RleHR9YCk7XG4gIH1cblxuICBjb25zdCBkYXRhID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIHtcbiAgICBhY2Nlc3NfdG9rZW46IHN0cmluZztcbiAgICByZWZyZXNoX3Rva2VuOiBzdHJpbmc7XG4gICAgZXhwaXJlc19pbjogbnVtYmVyO1xuICAgIHNjb3BlOiBzdHJpbmc7XG4gICAgYWNjb3VudD86IHsgdXVpZDogc3RyaW5nOyBlbWFpbF9hZGRyZXNzOiBzdHJpbmcgfTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFjY2Vzc1Rva2VuOiBkYXRhLmFjY2Vzc190b2tlbixcbiAgICByZWZyZXNoVG9rZW46IGRhdGEucmVmcmVzaF90b2tlbixcbiAgICBleHBpcmVzQXQ6IERhdGUubm93KCkgKyBkYXRhLmV4cGlyZXNfaW4gKiAxMDAwLFxuICAgIHNjb3BlOiBkYXRhLnNjb3BlLFxuICAgIGFjY291bnRVdWlkOiBkYXRhLmFjY291bnQ/LnV1aWQsXG4gICAgZW1haWxBZGRyZXNzOiBkYXRhLmFjY291bnQ/LmVtYWlsX2FkZHJlc3MsXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWZyZXNoQWNjZXNzVG9rZW4ocmVmcmVzaFRva2VuOiBzdHJpbmcpOiBQcm9taXNlPE9BdXRoVG9rZW5zPiB7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKFRPS0VOX1VSTCwge1xuICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGdyYW50X3R5cGU6IFwicmVmcmVzaF90b2tlblwiLFxuICAgICAgcmVmcmVzaF90b2tlbjogcmVmcmVzaFRva2VuLFxuICAgICAgY2xpZW50X2lkOiBDTElFTlRfSUQsXG4gICAgICBzY29wZTogUkVGUkVTSF9TQ09QRVMuam9pbihcIiBcIiksXG4gICAgfSksXG4gIH0pO1xuICBpZiAoIXJlcy5vaykge1xuICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXMudGV4dCgpO1xuICAgIHRocm93IG5ldyBFcnJvcihgVG9rZW4gcmVmcmVzaCBmYWlsZWQgKCR7cmVzLnN0YXR1c30pOiAke3RleHR9YCk7XG4gIH1cbiAgY29uc3QgZGF0YSA9IChhd2FpdCByZXMuanNvbigpKSBhcyB7XG4gICAgYWNjZXNzX3Rva2VuOiBzdHJpbmc7XG4gICAgcmVmcmVzaF90b2tlbjogc3RyaW5nO1xuICAgIGV4cGlyZXNfaW46IG51bWJlcjtcbiAgICBzY29wZTogc3RyaW5nO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWNjZXNzVG9rZW46IGRhdGEuYWNjZXNzX3Rva2VuLFxuICAgIHJlZnJlc2hUb2tlbjogZGF0YS5yZWZyZXNoX3Rva2VuID8/IHJlZnJlc2hUb2tlbixcbiAgICBleHBpcmVzQXQ6IERhdGUubm93KCkgKyBkYXRhLmV4cGlyZXNfaW4gKiAxMDAwLFxuICAgIHNjb3BlOiBkYXRhLnNjb3BlLFxuICB9O1xufVxuXG5jb25zdCB1c2FnZUNhY2hlOiBSZWNvcmQ8c3RyaW5nLCB7IGRhdGE6IFVzYWdlUmVzcG9uc2U7IGNhY2hlZEF0OiBudW1iZXIgfT4gPSB7fTtcbmNvbnN0IFVTQUdFX0FQSV9DQUNIRV9UVEwgPSA2MF8wMDA7IC8vIDHrtoRcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoVXNhZ2UoYWNjZXNzVG9rZW46IHN0cmluZyk6IFByb21pc2U8VXNhZ2VSZXNwb25zZT4ge1xuICBjb25zdCBjYWNoZUtleSA9IGFjY2Vzc1Rva2VuLnNsaWNlKC0xMCk7XG4gIGNvbnN0IGNhY2hlZCA9IHVzYWdlQ2FjaGVbY2FjaGVLZXldO1xuICBpZiAoY2FjaGVkICYmIERhdGUubm93KCkgLSBjYWNoZWQuY2FjaGVkQXQgPCBVU0FHRV9BUElfQ0FDSEVfVFRMKSB7XG4gICAgY29uc29sZS5sb2coYFt1c2FnZV0gY2FjaGUgaGl0OiAke2NhY2hlS2V5fWApO1xuICAgIHJldHVybiBjYWNoZWQuZGF0YTtcbiAgfVxuXG4gIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKFwiaHR0cHM6Ly9hcGkuYW50aHJvcGljLmNvbS9hcGkvb2F1dGgvdXNhZ2VcIiwge1xuICAgIGhlYWRlcnM6IHtcbiAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gLFxuICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICBcImFudGhyb3BpYy1iZXRhXCI6IFwib2F1dGgtMjAyNS0wNC0yMFwiLFxuICAgIH0sXG4gICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KDUwMDApLFxuICB9KTtcbiAgaWYgKCFyZXMub2spIHtcbiAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzLnRleHQoKTtcblxuICAgIC8vIO2MjOyLsSDsi5zrj4TtlbTshJwg7JeQ65+sIOuplOyLnOyngCDstpTstpxcbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gYEVycm9yICR7cmVzLnN0YXR1c31gO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHRleHQpO1xuICAgICAgZXJyb3JNZXNzYWdlID0gcGFyc2VkLmVycm9yPy5tZXNzYWdlID8/IGVycm9yTWVzc2FnZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIO2MjOyLsSDslYgg65CY66m0IOq4sOuzuCDrqZTsi5zsp4BcbiAgICB9XG5cbiAgICBjb25zb2xlLndhcm4oYFt1c2FnZV0gJHtyZXMuc3RhdHVzfTogJHtlcnJvck1lc3NhZ2V9YCk7XG5cbiAgICAvLyDsnbTsoIQg7ISx6rO1IOy6kOyLnCDsnojsnLzrqbQg7Jyg7KeAXG4gICAgaWYgKGNhY2hlZD8uZGF0YSAmJiAhY2FjaGVkLmRhdGEuZXJyb3IpIHJldHVybiBjYWNoZWQuZGF0YTtcblxuICAgIC8vIOyLpO2MqOuPhCDsupDsi5wgKOuwmOuztSDtmLjstpwg67Cp7KeAKVxuICAgIGNvbnN0IGVycm9yUmVzdWx0ID0geyBlcnJvcjogZXJyb3JNZXNzYWdlIH07XG4gICAgdXNhZ2VDYWNoZVtjYWNoZUtleV0gPSB7IGRhdGE6IGVycm9yUmVzdWx0LCBjYWNoZWRBdDogRGF0ZS5ub3coKSB9O1xuICAgIHJldHVybiBlcnJvclJlc3VsdDtcbiAgfVxuXG4gIGNvbnN0IGRhdGEgPSAoYXdhaXQgcmVzLmpzb24oKSkgYXMgVXNhZ2VSZXNwb25zZTtcbiAgLy8gY2FjaGUgaW52YWxpZGF0ZVxuICB1c2FnZUNhY2hlW2NhY2hlS2V5XSA9IHsgZGF0YSwgY2FjaGVkQXQ6IERhdGUubm93KCkgfTtcbiAgcmV0dXJuIGRhdGE7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQU9BLE1BQU0sWUFBWTtBQUNsQixNQUFNLGdCQUFnQjtBQUN0QixNQUFNLFlBQVk7QUFHbEIsTUFBTSxhQUFhO0NBQ2pCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNEO0FBR0QsTUFBTSxpQkFBaUI7Q0FDckI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNEO0FBRUQsU0FBUyxnQkFBZ0IsUUFBd0I7QUFDL0MsUUFBTyxPQUFPLFNBQVMsU0FBUyxDQUFDLFFBQVEsT0FBTyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksQ0FBQyxRQUFRLE1BQU0sR0FBRzs7QUFHNUYsU0FBZ0IsZUFBK0U7Q0FDN0YsTUFBTSxlQUFlLGdCQUFnQixZQUFZLEdBQUcsQ0FBQztBQUdyRCxRQUFPO0VBQUU7RUFBYyxlQUZELGdCQUFnQixXQUFXLFNBQVMsQ0FBQyxPQUFPLGFBQWEsQ0FBQyxRQUFRLENBQUM7RUFFbkQsT0FEeEIsZ0JBQWdCLFlBQVksR0FBRyxDQUFDO0VBQ0Q7O0FBRy9DLFNBQWdCLGFBQWEsZUFBdUIsT0FBZSxhQUE2QjtDQUM5RixNQUFNLE1BQU0sSUFBSSxJQUFJLGNBQWM7QUFDbEMsS0FBSSxhQUFhLE9BQU8sUUFBUSxPQUFPO0FBQ3ZDLEtBQUksYUFBYSxPQUFPLGFBQWEsVUFBVTtBQUMvQyxLQUFJLGFBQWEsT0FBTyxpQkFBaUIsT0FBTztBQUNoRCxLQUFJLGFBQWEsT0FBTyxnQkFBZ0IsWUFBWTtBQUNwRCxLQUFJLGFBQWEsT0FBTyxTQUFTLFdBQVcsS0FBSyxJQUFJLENBQUM7QUFDdEQsS0FBSSxhQUFhLE9BQU8sa0JBQWtCLGNBQWM7QUFDeEQsS0FBSSxhQUFhLE9BQU8seUJBQXlCLE9BQU87QUFDeEQsS0FBSSxhQUFhLE9BQU8sU0FBUyxNQUFNO0FBQ3ZDLFFBQU8sSUFBSSxVQUFVOztBQVl2QixlQUFzQixzQkFDcEIsTUFDQSxjQUNBLE9BQ0EsYUFDc0I7Q0FDdEIsTUFBTSxNQUFNLE1BQU0sTUFBTSxXQUFXO0VBQ2pDLFFBQVE7RUFDUixTQUFTLEVBQUUsZ0JBQWdCLG9CQUFvQjtFQUMvQyxNQUFNLEtBQUssVUFBVTtHQUNuQixZQUFZO0dBQ1o7R0FDQSxjQUFjO0dBQ2QsV0FBVztHQUNYLGVBQWU7R0FDZjtHQUNELENBQUM7RUFDSCxDQUFDO0FBQ0YsS0FBSSxDQUFDLElBQUksSUFBSTtFQUNYLE1BQU0sT0FBTyxNQUFNLElBQUksTUFBTTtBQUM3QixRQUFNLElBQUksTUFBTSwwQkFBMEIsSUFBSSxPQUFPLEtBQUssT0FBTzs7Q0FHbkUsTUFBTSxPQUFRLE1BQU0sSUFBSSxNQUFNO0FBUTlCLFFBQU87RUFDTCxhQUFhLEtBQUs7RUFDbEIsY0FBYyxLQUFLO0VBQ25CLFdBQVcsS0FBSyxLQUFLLEdBQUcsS0FBSyxhQUFhO0VBQzFDLE9BQU8sS0FBSztFQUNaLGFBQWEsS0FBSyxTQUFTO0VBQzNCLGNBQWMsS0FBSyxTQUFTO0VBQzdCOztBQUdILGVBQXNCLG1CQUFtQixjQUE0QztDQUNuRixNQUFNLE1BQU0sTUFBTSxNQUFNLFdBQVc7RUFDakMsUUFBUTtFQUNSLFNBQVMsRUFBRSxnQkFBZ0Isb0JBQW9CO0VBQy9DLE1BQU0sS0FBSyxVQUFVO0dBQ25CLFlBQVk7R0FDWixlQUFlO0dBQ2YsV0FBVztHQUNYLE9BQU8sZUFBZSxLQUFLLElBQUk7R0FDaEMsQ0FBQztFQUNILENBQUM7QUFDRixLQUFJLENBQUMsSUFBSSxJQUFJO0VBQ1gsTUFBTSxPQUFPLE1BQU0sSUFBSSxNQUFNO0FBQzdCLFFBQU0sSUFBSSxNQUFNLHlCQUF5QixJQUFJLE9BQU8sS0FBSyxPQUFPOztDQUVsRSxNQUFNLE9BQVEsTUFBTSxJQUFJLE1BQU07QUFPOUIsUUFBTztFQUNMLGFBQWEsS0FBSztFQUNsQixjQUFjLEtBQUssaUJBQWlCO0VBQ3BDLFdBQVcsS0FBSyxLQUFLLEdBQUcsS0FBSyxhQUFhO0VBQzFDLE9BQU8sS0FBSztFQUNiOztBQUdILE1BQU0sYUFBd0UsRUFBRTtBQUNoRixNQUFNLHNCQUFzQjtBQUU1QixlQUFzQixXQUFXLGFBQTZDO0NBQzVFLE1BQU0sV0FBVyxZQUFZLE1BQU0sSUFBSTtDQUN2QyxNQUFNLFNBQVMsV0FBVztBQUMxQixLQUFJLFVBQVUsS0FBSyxLQUFLLEdBQUcsT0FBTyxXQUFXLHFCQUFxQjtBQUNoRSxVQUFRLElBQUksc0JBQXNCLFdBQVc7QUFDN0MsU0FBTyxPQUFPOztDQUdoQixNQUFNLE1BQU0sTUFBTSxNQUFNLDZDQUE2QztFQUNuRSxTQUFTO0dBQ1AsZUFBZSxVQUFVO0dBQ3pCLGdCQUFnQjtHQUNoQixrQkFBa0I7R0FDbkI7RUFDRCxRQUFRLFlBQVksUUFBUSxJQUFLO0VBQ2xDLENBQUM7QUFDRixLQUFJLENBQUMsSUFBSSxJQUFJO0VBQ1gsTUFBTSxPQUFPLE1BQU0sSUFBSSxNQUFNO0VBRzdCLElBQUksZUFBZSxTQUFTLElBQUk7QUFDaEMsTUFBSTtBQUVGLGtCQURlLEtBQUssTUFBTSxLQUFLLENBQ1QsT0FBTyxXQUFXO1VBQ2xDO0FBSVIsVUFBUSxLQUFLLFdBQVcsSUFBSSxPQUFPLElBQUksZUFBZTtBQUd0RCxNQUFJLFFBQVEsUUFBUSxDQUFDLE9BQU8sS0FBSyxNQUFPLFFBQU8sT0FBTztFQUd0RCxNQUFNLGNBQWMsRUFBRSxPQUFPLGNBQWM7QUFDM0MsYUFBVyxZQUFZO0dBQUUsTUFBTTtHQUFhLFVBQVUsS0FBSyxLQUFLO0dBQUU7QUFDbEUsU0FBTzs7Q0FHVCxNQUFNLE9BQVEsTUFBTSxJQUFJLE1BQU07QUFFOUIsWUFBVyxZQUFZO0VBQUU7RUFBTSxVQUFVLEtBQUssS0FBSztFQUFFO0FBQ3JELFFBQU8ifQ==
@@ -0,0 +1,166 @@
1
+ import "../../_virtual/_rolldown/runtime.js";
2
+ import { ProcessError, QuotaError, TimeoutError, maskToken } from "./qgrid.types.js";
3
+ import { spawn } from "node:child_process";
4
+ import { mkdirSync } from "node:fs";
5
+ //#region src/application/qgrid/qgrid.dispatcher.ts
6
+ /**
7
+ * QgridDispatcher — OAuth 토큰 선택 + claude CLI fresh spawn 디스패처 싱글턴.
8
+ *
9
+ * - 매 요청마다 새 claude CLI 프로세스 spawn → 응답 후 종료
10
+ * - system 은 --append-system-prompt 로 분리 전달 (user turn 오염 방지)
11
+ * - least-used round-robin 으로 토큰 선택
12
+ * - QuotaError 는 그대로 상위 전파 (자동 failover 없음, UI 에서 수동 토글)
13
+ *
14
+ * env allowlist: PATH, TMPDIR, CLAUDE_CODE_OAUTH_TOKEN + CLAUDE_CODE_DISABLE_*
15
+ */
16
+ const DEFAULT_MODEL = "sonnet";
17
+ const DEFAULT_TIMEOUT_MS = 6e5;
18
+ var QgridDispatcherClass = class {
19
+ tokens = /* @__PURE__ */ new Map();
20
+ requestCounts = /* @__PURE__ */ new Map();
21
+ rrIndex = 0;
22
+ constructor() {
23
+ mkdirSync("/tmp/qgrid", { recursive: true });
24
+ }
25
+ getStats() {
26
+ return [...this.tokens.entries()].map(([token, name]) => ({
27
+ token,
28
+ name,
29
+ requests: this.requestCounts.get(token) ?? 0
30
+ }));
31
+ }
32
+ selectToken() {
33
+ const entries = [...this.tokens.entries()];
34
+ if (entries.length === 0) return null;
35
+ const minCount = Math.min(...entries.map(([t]) => this.requestCounts.get(t) ?? 0));
36
+ const idle = entries.filter(([t]) => (this.requestCounts.get(t) ?? 0) === minCount);
37
+ const picked = idle[this.rrIndex % idle.length];
38
+ this.rrIndex++;
39
+ return {
40
+ token: picked[0],
41
+ name: picked[1]
42
+ };
43
+ }
44
+ async query(input, timeoutMs) {
45
+ const sel = this.selectToken();
46
+ if (!sel) throw new QuotaError("No tokens available");
47
+ this.requestCounts.set(sel.token, (this.requestCounts.get(sel.token) ?? 0) + 1);
48
+ console.log(`[qgrid] → ${sel.name} (model: ${input.model ?? DEFAULT_MODEL})`);
49
+ return {
50
+ ...await executeClaude(input, sel.token, timeoutMs ?? DEFAULT_TIMEOUT_MS),
51
+ tokenName: sel.name
52
+ };
53
+ }
54
+ addToken(token, name) {
55
+ if (this.tokens.has(token)) return;
56
+ this.tokens.set(token, name);
57
+ this.requestCounts.set(token, 0);
58
+ }
59
+ removeToken(token) {
60
+ this.tokens.delete(token);
61
+ this.requestCounts.delete(token);
62
+ }
63
+ hasToken(token) {
64
+ return this.tokens.has(token);
65
+ }
66
+ };
67
+ async function executeClaude(input, token, timeoutMs) {
68
+ const model = input.model ?? DEFAULT_MODEL;
69
+ const timeout = input.timeout ?? timeoutMs;
70
+ const args = [
71
+ "-p",
72
+ "--output-format",
73
+ "stream-json",
74
+ "--verbose",
75
+ "--max-turns",
76
+ "1",
77
+ "--permission-mode",
78
+ "bypassPermissions",
79
+ "--setting-sources",
80
+ "project",
81
+ "--model",
82
+ model
83
+ ];
84
+ if (input.system) args.push("--append-system-prompt", input.system);
85
+ args.push(input.prompt);
86
+ const env = {
87
+ PATH: process.env.PATH,
88
+ TMPDIR: process.env.TMPDIR,
89
+ CLAUDE_CODE_OAUTH_TOKEN: token,
90
+ CLAUDE_CODE_DISABLE_AUTO_MEMORY: "1",
91
+ CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING: "1",
92
+ CLAUDE_CODE_DISABLE_1M_CONTEXT: "1"
93
+ };
94
+ return new Promise((resolve, reject) => {
95
+ const child = spawn("claude", args, {
96
+ stdio: [
97
+ "ignore",
98
+ "pipe",
99
+ "ignore"
100
+ ],
101
+ env,
102
+ cwd: "/tmp/qgrid"
103
+ });
104
+ let buffer = "";
105
+ let settled = false;
106
+ const timer = setTimeout(() => {
107
+ if (settled) return;
108
+ settled = true;
109
+ child.kill();
110
+ reject(new TimeoutError(`Timeout after ${timeout / 1e3}s (token: ${maskToken(token)})`));
111
+ }, timeout);
112
+ child.stdout?.on("data", (d) => {
113
+ if (settled) return;
114
+ buffer += d.toString();
115
+ const lines = buffer.split("\n");
116
+ buffer = lines.pop() ?? "";
117
+ for (const line of lines) {
118
+ if (!line.trim()) continue;
119
+ try {
120
+ const j = JSON.parse(line);
121
+ if (j.type === "result" && !settled) {
122
+ let text = j.result ?? "";
123
+ text = text.replace(/^```(?:json)?\s*\n?/i, "").replace(/\n?```\s*$/i, "");
124
+ if (text.startsWith("You've hit")) {
125
+ settled = true;
126
+ clearTimeout(timer);
127
+ reject(new QuotaError(`Quota exhausted (token: ${maskToken(token)})`));
128
+ return;
129
+ }
130
+ const u = j.usage ?? {};
131
+ settled = true;
132
+ clearTimeout(timer);
133
+ resolve({
134
+ text,
135
+ usage: {
136
+ input_tokens: u.input_tokens ?? 0,
137
+ output_tokens: u.output_tokens ?? 0,
138
+ cache_creation_input_tokens: u.cache_creation_input_tokens ?? 0,
139
+ cache_read_input_tokens: u.cache_read_input_tokens ?? 0
140
+ },
141
+ durationMs: j.duration_ms ?? 0,
142
+ costUsd: j.total_cost_usd ?? 0
143
+ });
144
+ }
145
+ } catch {}
146
+ }
147
+ });
148
+ child.on("close", () => {
149
+ if (settled) return;
150
+ settled = true;
151
+ clearTimeout(timer);
152
+ reject(new ProcessError(`CLI process closed without result (token: ${maskToken(token)})`));
153
+ });
154
+ child.on("error", (err) => {
155
+ if (settled) return;
156
+ settled = true;
157
+ clearTimeout(timer);
158
+ reject(new ProcessError(`CLI process error: ${err.message} (token: ${maskToken(token)})`));
159
+ });
160
+ });
161
+ }
162
+ const QgridDispatcher = new QgridDispatcherClass();
163
+ //#endregion
164
+ export { QgridDispatcher };
165
+
166
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQuZGlzcGF0Y2hlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvcWdyaWQuZGlzcGF0Y2hlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFFncmlkRGlzcGF0Y2hlciDigJQgT0F1dGgg7Yag7YGwIOyEoO2DnSArIGNsYXVkZSBDTEkgZnJlc2ggc3Bhd24g65SU7Iqk7Yyo7LKYIOyLseq4gO2EtC5cbiAqXG4gKiAtIOunpCDsmpTssq3rp4jri6Qg7IOIIGNsYXVkZSBDTEkg7ZSE66Gc7IS47IqkIHNwYXduIOKGkiDsnZHri7Ug7ZuEIOyiheujjFxuICogLSBzeXN0ZW0g7J2AIC0tYXBwZW5kLXN5c3RlbS1wcm9tcHQg66GcIOu2hOumrCDsoITri6wgKHVzZXIgdHVybiDsmKTsl7wg67Cp7KeAKVxuICogLSBsZWFzdC11c2VkIHJvdW5kLXJvYmluIOycvOuhnCDthqDtgbAg7ISg7YOdXG4gKiAtIFF1b3RhRXJyb3Ig64qUIOq3uOuMgOuhnCDsg4HsnIQg7KCE7YyMICjsnpDrj5kgZmFpbG92ZXIg7JeG7J2MLCBVSSDsl5DshJwg7IiY64+ZIO2GoOq4gClcbiAqXG4gKiBlbnYgYWxsb3dsaXN0OiBQQVRILCBUTVBESVIsIENMQVVERV9DT0RFX09BVVRIX1RPS0VOICsgQ0xBVURFX0NPREVfRElTQUJMRV8qXG4gKi9cbmltcG9ydCB7IHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgbWtkaXJTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcblxuaW1wb3J0IHsgdHlwZSBDbGlSZXN1bHQsIHR5cGUgUXVlcnlJbnB1dCwgdHlwZSBUb2tlblN0YXRzIH0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcbmltcG9ydCB7IG1hc2tUb2tlbiwgUHJvY2Vzc0Vycm9yLCBRdW90YUVycm9yLCBUaW1lb3V0RXJyb3IgfSBmcm9tIFwiLi9xZ3JpZC50eXBlc1wiO1xuXG5jb25zdCBERUZBVUxUX01PREVMID0gXCJzb25uZXRcIjtcbmNvbnN0IERFRkFVTFRfVElNRU9VVF9NUyA9IDYwMF8wMDA7XG5cbmNsYXNzIFFncmlkRGlzcGF0Y2hlckNsYXNzIHtcbiAgdG9rZW5zID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgcmVxdWVzdENvdW50cyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIHJySW5kZXggPSAwO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIG1rZGlyU3luYyhcIi90bXAvcWdyaWRcIiwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIH1cblxuICBnZXRTdGF0cygpOiBUb2tlblN0YXRzW10ge1xuICAgIHJldHVybiBbLi4udGhpcy50b2tlbnMuZW50cmllcygpXS5tYXAoKFt0b2tlbiwgbmFtZV0pID0+ICh7XG4gICAgICB0b2tlbixcbiAgICAgIG5hbWUsXG4gICAgICByZXF1ZXN0czogdGhpcy5yZXF1ZXN0Q291bnRzLmdldCh0b2tlbikgPz8gMCxcbiAgICB9KSk7XG4gIH1cblxuICBzZWxlY3RUb2tlbigpOiB7IHRva2VuOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9IHwgbnVsbCB7XG4gICAgY29uc3QgZW50cmllcyA9IFsuLi50aGlzLnRva2Vucy5lbnRyaWVzKCldO1xuICAgIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBtaW5Db3VudCA9IE1hdGgubWluKC4uLmVudHJpZXMubWFwKChbdF0pID0+IHRoaXMucmVxdWVzdENvdW50cy5nZXQodCkgPz8gMCkpO1xuICAgIGNvbnN0IGlkbGUgPSBlbnRyaWVzLmZpbHRlcigoW3RdKSA9PiAodGhpcy5yZXF1ZXN0Q291bnRzLmdldCh0KSA/PyAwKSA9PT0gbWluQ291bnQpO1xuICAgIGNvbnN0IHBpY2tlZCA9IGlkbGVbdGhpcy5yckluZGV4ICUgaWRsZS5sZW5ndGhdITtcbiAgICB0aGlzLnJySW5kZXgrKztcbiAgICByZXR1cm4geyB0b2tlbjogcGlja2VkWzBdLCBuYW1lOiBwaWNrZWRbMV0gfTtcbiAgfVxuXG4gIGFzeW5jIHF1ZXJ5KGlucHV0OiBRdWVyeUlucHV0LCB0aW1lb3V0TXM/OiBudW1iZXIpOiBQcm9taXNlPENsaVJlc3VsdD4ge1xuICAgIGNvbnN0IHNlbCA9IHRoaXMuc2VsZWN0VG9rZW4oKTtcbiAgICBpZiAoIXNlbCkgdGhyb3cgbmV3IFF1b3RhRXJyb3IoXCJObyB0b2tlbnMgYXZhaWxhYmxlXCIpO1xuXG4gICAgLy8gYXdhaXQg7KCE7JeQIGNvdW50IOyEoOuwmOyYgS4g67OR66CsIOyalOyyreydtCDrj5nsi5zsl5Ag64+E7LCp7ZW064+EIOqwgeyekCDri6Trpbgg7Yag7YGw7J2EIOqzoOultOuPhOuhnS5cbiAgICB0aGlzLnJlcXVlc3RDb3VudHMuc2V0KHNlbC50b2tlbiwgKHRoaXMucmVxdWVzdENvdW50cy5nZXQoc2VsLnRva2VuKSA/PyAwKSArIDEpO1xuXG4gICAgY29uc29sZS5sb2coYFtxZ3JpZF0g4oaSICR7c2VsLm5hbWV9IChtb2RlbDogJHtpbnB1dC5tb2RlbCA/PyBERUZBVUxUX01PREVMfSlgKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWN1dGVDbGF1ZGUoaW5wdXQsIHNlbC50b2tlbiwgdGltZW91dE1zID8/IERFRkFVTFRfVElNRU9VVF9NUyk7XG4gICAgcmV0dXJuIHsgLi4ucmVzdWx0LCB0b2tlbk5hbWU6IHNlbC5uYW1lIH07XG4gIH1cblxuICBhZGRUb2tlbih0b2tlbjogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50b2tlbnMuaGFzKHRva2VuKSkgcmV0dXJuO1xuICAgIHRoaXMudG9rZW5zLnNldCh0b2tlbiwgbmFtZSk7XG4gICAgdGhpcy5yZXF1ZXN0Q291bnRzLnNldCh0b2tlbiwgMCk7XG4gIH1cblxuICByZW1vdmVUb2tlbih0b2tlbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy50b2tlbnMuZGVsZXRlKHRva2VuKTtcbiAgICB0aGlzLnJlcXVlc3RDb3VudHMuZGVsZXRlKHRva2VuKTtcbiAgfVxuXG4gIGhhc1Rva2VuKHRva2VuOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnMuaGFzKHRva2VuKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlQ2xhdWRlKFxuICBpbnB1dDogUXVlcnlJbnB1dCxcbiAgdG9rZW46IHN0cmluZyxcbiAgdGltZW91dE1zOiBudW1iZXIsXG4pOiBQcm9taXNlPENsaVJlc3VsdD4ge1xuICBjb25zdCBtb2RlbCA9IGlucHV0Lm1vZGVsID8/IERFRkFVTFRfTU9ERUw7XG4gIGNvbnN0IHRpbWVvdXQgPSBpbnB1dC50aW1lb3V0ID8/IHRpbWVvdXRNcztcblxuICBjb25zdCBhcmdzOiBzdHJpbmdbXSA9IFtcbiAgICBcIi1wXCIsXG4gICAgXCItLW91dHB1dC1mb3JtYXRcIixcbiAgICBcInN0cmVhbS1qc29uXCIsXG4gICAgXCItLXZlcmJvc2VcIixcbiAgICBcIi0tbWF4LXR1cm5zXCIsXG4gICAgXCIxXCIsXG4gICAgXCItLXBlcm1pc3Npb24tbW9kZVwiLFxuICAgIFwiYnlwYXNzUGVybWlzc2lvbnNcIixcbiAgICBcIi0tc2V0dGluZy1zb3VyY2VzXCIsXG4gICAgXCJwcm9qZWN0XCIsXG4gICAgXCItLW1vZGVsXCIsXG4gICAgbW9kZWwsXG4gIF07XG4gIGlmIChpbnB1dC5zeXN0ZW0pIHtcbiAgICBhcmdzLnB1c2goXCItLWFwcGVuZC1zeXN0ZW0tcHJvbXB0XCIsIGlucHV0LnN5c3RlbSk7XG4gIH1cbiAgYXJncy5wdXNoKGlucHV0LnByb21wdCk7XG5cbiAgY29uc3QgZW52OiBOb2RlSlMuUHJvY2Vzc0VudiA9IHtcbiAgICBQQVRIOiBwcm9jZXNzLmVudi5QQVRILFxuICAgIFRNUERJUjogcHJvY2Vzcy5lbnYuVE1QRElSLFxuICAgIENMQVVERV9DT0RFX09BVVRIX1RPS0VOOiB0b2tlbixcbiAgICBDTEFVREVfQ09ERV9ESVNBQkxFX0FVVE9fTUVNT1JZOiBcIjFcIixcbiAgICBDTEFVREVfQ09ERV9ESVNBQkxFX0FEQVBUSVZFX1RISU5LSU5HOiBcIjFcIixcbiAgICBDTEFVREVfQ09ERV9ESVNBQkxFXzFNX0NPTlRFWFQ6IFwiMVwiLFxuICB9O1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZTxDbGlSZXN1bHQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBjaGlsZCA9IHNwYXduKFwiY2xhdWRlXCIsIGFyZ3MsIHtcbiAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJwaXBlXCIsIFwiaWdub3JlXCJdLFxuICAgICAgZW52LFxuICAgICAgY3dkOiBcIi90bXAvcWdyaWRcIixcbiAgICB9KTtcblxuICAgIGxldCBidWZmZXIgPSBcIlwiO1xuICAgIGxldCBzZXR0bGVkID0gZmFsc2U7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgIGNoaWxkLmtpbGwoKTtcbiAgICAgIHJlamVjdChuZXcgVGltZW91dEVycm9yKGBUaW1lb3V0IGFmdGVyICR7dGltZW91dCAvIDEwMDB9cyAodG9rZW46ICR7bWFza1Rva2VuKHRva2VuKX0pYCkpO1xuICAgIH0sIHRpbWVvdXQpO1xuXG4gICAgY2hpbGQuc3Rkb3V0Py5vbihcImRhdGFcIiwgKGQ6IEJ1ZmZlcikgPT4ge1xuICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgIGJ1ZmZlciArPSBkLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdChcIlxcblwiKTtcbiAgICAgIGJ1ZmZlciA9IGxpbmVzLnBvcCgpID8/IFwiXCI7XG4gICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgaWYgKCFsaW5lLnRyaW0oKSkgY29udGludWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaiA9IEpTT04ucGFyc2UobGluZSk7XG4gICAgICAgICAgaWYgKGoudHlwZSA9PT0gXCJyZXN1bHRcIiAmJiAhc2V0dGxlZCkge1xuICAgICAgICAgICAgbGV0IHRleHQ6IHN0cmluZyA9IGoucmVzdWx0ID8/IFwiXCI7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9eYGBgKD86anNvbik/XFxzKlxcbj8vaSwgXCJcIikucmVwbGFjZSgvXFxuP2BgYFxccyokL2ksIFwiXCIpO1xuXG4gICAgICAgICAgICBpZiAodGV4dC5zdGFydHNXaXRoKFwiWW91J3ZlIGhpdFwiKSkge1xuICAgICAgICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgcmVqZWN0KG5ldyBRdW90YUVycm9yKGBRdW90YSBleGhhdXN0ZWQgKHRva2VuOiAke21hc2tUb2tlbih0b2tlbil9KWApKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB1ID0gai51c2FnZSA/PyB7fTtcbiAgICAgICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICB1c2FnZToge1xuICAgICAgICAgICAgICAgIGlucHV0X3Rva2VuczogdS5pbnB1dF90b2tlbnMgPz8gMCxcbiAgICAgICAgICAgICAgICBvdXRwdXRfdG9rZW5zOiB1Lm91dHB1dF90b2tlbnMgPz8gMCxcbiAgICAgICAgICAgICAgICBjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnM6IHUuY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zID8/IDAsXG4gICAgICAgICAgICAgICAgY2FjaGVfcmVhZF9pbnB1dF90b2tlbnM6IHUuY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMgPz8gMCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZHVyYXRpb25Nczogai5kdXJhdGlvbl9tcyA/PyAwLFxuICAgICAgICAgICAgICBjb3N0VXNkOiBqLnRvdGFsX2Nvc3RfdXNkID8/IDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge31cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNoaWxkLm9uKFwiY2xvc2VcIiwgKCkgPT4ge1xuICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHJlamVjdChuZXcgUHJvY2Vzc0Vycm9yKGBDTEkgcHJvY2VzcyBjbG9zZWQgd2l0aG91dCByZXN1bHQgKHRva2VuOiAke21hc2tUb2tlbih0b2tlbil9KWApKTtcbiAgICB9KTtcblxuICAgIGNoaWxkLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHJlamVjdChuZXcgUHJvY2Vzc0Vycm9yKGBDTEkgcHJvY2VzcyBlcnJvcjogJHtlcnIubWVzc2FnZX0gKHRva2VuOiAke21hc2tUb2tlbih0b2tlbil9KWApKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBRZ3JpZERpc3BhdGNoZXIgPSBuZXcgUWdyaWREaXNwYXRjaGVyQ2xhc3MoKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JBLE1BQU0sZ0JBQWdCO0FBQ3RCLE1BQU0scUJBQXFCO0FBRTNCLElBQU0sdUJBQU4sTUFBMkI7Q0FDekIseUJBQVMsSUFBSSxLQUFxQjtDQUNsQyxnQ0FBZ0IsSUFBSSxLQUFxQjtDQUN6QyxVQUFVO0NBRVYsY0FBYztBQUNaLFlBQVUsY0FBYyxFQUFFLFdBQVcsTUFBTSxDQUFDOztDQUc5QyxXQUF5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
@@ -1,6 +1,6 @@
1
1
  import "../../_virtual/_rolldown/runtime.js";
2
2
  import { buildAuthUrl, exchangeCodeForTokens, fetchUsage, generatePKCE, refreshAccessToken } from "./oauth.js";
3
- import { getPool } from "./pool.js";
3
+ import { QgridDispatcher } from "./qgrid.dispatcher.js";
4
4
  import { __decorateMetadata } from "../../_virtual/_@oxc-project_runtime@0.122.0/helpers/decorateMetadata.js";
5
5
  import { __decorate } from "../../_virtual/_@oxc-project_runtime@0.122.0/helpers/decorate.js";
6
6
  import { MICRO_USD, RequestLogModel } from "../request-log/request-log.model.js";
@@ -12,14 +12,14 @@ var QgridFrameClass = class extends BaseFrameClass {
12
12
  constructor() {
13
13
  super("Qgrid");
14
14
  }
15
- async query(prompt, system, timeout) {
16
- const pool = getPool();
17
- const result = await pool.query({
15
+ async query(prompt, system, timeout, model) {
16
+ const result = await QgridDispatcher.query({
18
17
  system,
19
- prompt
18
+ prompt,
19
+ model
20
20
  }, timeout);
21
21
  RequestLogModel.save([{
22
- token_name: pool.getLastUsedWorkerName(),
22
+ token_name: result.tokenName,
23
23
  query: system ? `[System]\n${system}\n\n[User]\n${prompt}` : prompt,
24
24
  response: result.text,
25
25
  input_tokens: result.usage.input_tokens,
@@ -32,7 +32,7 @@ var QgridFrameClass = class extends BaseFrameClass {
32
32
  return result;
33
33
  }
34
34
  async stats() {
35
- return getPool().getStats();
35
+ return QgridDispatcher.getStats();
36
36
  }
37
37
  async totalCost(tokenName) {
38
38
  return { usd: await RequestLogModel.totalCost({ token_name: tokenName }) };
@@ -43,11 +43,10 @@ var QgridFrameClass = class extends BaseFrameClass {
43
43
  name,
44
44
  ...refreshToken && refreshToken.length > 0 ? { refresh_token: refreshToken } : {}
45
45
  }]);
46
- getPool().createWorkers(token, name);
46
+ QgridDispatcher.addToken(token, name);
47
47
  return { added: true };
48
48
  }
49
49
  async updateToken(token, name, newToken, refreshToken) {
50
- const pool = getPool();
51
50
  const entry = await TokenModel.findByToken("A", token);
52
51
  if (!entry) return { updated: false };
53
52
  const hasNewToken = newToken !== void 0 && newToken.length > 0;
@@ -59,28 +58,24 @@ var QgridFrameClass = class extends BaseFrameClass {
59
58
  ...hasRefreshToken ? { refresh_token: refreshToken } : {}
60
59
  }]);
61
60
  if (hasNewToken) {
62
- pool.destroyWorkers(token);
63
- pool.createWorkers(newToken, name ?? entry.name);
61
+ QgridDispatcher.removeToken(token);
62
+ QgridDispatcher.addToken(newToken, name ?? entry.name);
64
63
  }
65
64
  return { updated: true };
66
65
  }
67
66
  async removeToken(token) {
68
- const pool = getPool();
69
- if (!pool.workers.has(token)) return { removed: false };
67
+ if (!QgridDispatcher.hasToken(token)) return { removed: false };
70
68
  const entry = await TokenModel.findByToken("A", token);
71
69
  if (entry) await TokenModel.del([entry.id]);
72
- pool.destroyWorkers(token);
70
+ QgridDispatcher.removeToken(token);
73
71
  return { removed: true };
74
72
  }
75
73
  /**
76
- *
77
74
  * @param id token_id
78
- * 토큰 활성화/비활성화 토글 (pool 워커 생성/제거 & DB의 active 필드 업데이트)
79
- *
75
+ * 토큰 활성화/비활성화 토글 (dispatcher 등록/제거 & DB의 active 필드 업데이트)
80
76
  * @returns 토큰 활성화 여부
81
77
  */
82
78
  async toggleToken(id) {
83
- const pool = getPool();
84
79
  const entry = await TokenModel.findOne("A", { id });
85
80
  if (!entry) return { active: false };
86
81
  const newActive = !entry.active;
@@ -90,8 +85,8 @@ var QgridFrameClass = class extends BaseFrameClass {
90
85
  active: newActive,
91
86
  name: entry.name
92
87
  }]);
93
- if (newActive) pool.createWorkers(entry.token, entry.name);
94
- else pool.destroyWorkers(entry.token);
88
+ if (newActive) QgridDispatcher.addToken(entry.token, entry.name);
89
+ else QgridDispatcher.removeToken(entry.token);
95
90
  return { active: newActive };
96
91
  }
97
92
  async oauthStart(name) {
@@ -107,7 +102,6 @@ var QgridFrameClass = class extends BaseFrameClass {
107
102
  return { authUrl };
108
103
  }
109
104
  async handleOAuthCallback(code, state, reply) {
110
- const pool = getPool();
111
105
  const pending = pendingOAuth.get(state);
112
106
  if (!pending) return reply.redirect("/?oauth=error&reason=invalid_state");
113
107
  pendingOAuth.delete(state);
@@ -115,9 +109,9 @@ var QgridFrameClass = class extends BaseFrameClass {
115
109
  const tokens = await exchangeCodeForTokens(code, pending.codeVerifier, state, pending.redirectUri);
116
110
  if (tokens.accountUuid) {
117
111
  const oldEntries = await TokenModel.findByAccountUuid("A", tokens.accountUuid);
118
- for (const old of oldEntries) {
119
- pool.destroyWorkers(old.token);
120
- await TokenModel.del([old.id]);
112
+ if (oldEntries.length > 0) {
113
+ for (const old of oldEntries) QgridDispatcher.removeToken(old.token);
114
+ await TokenModel.del(oldEntries.map((o) => o.id));
121
115
  }
122
116
  }
123
117
  await TokenModel.save([{
@@ -127,27 +121,26 @@ var QgridFrameClass = class extends BaseFrameClass {
127
121
  expires_at: tokens.expiresAt ? BigInt(tokens.expiresAt) : null,
128
122
  account_uuid: tokens.accountUuid
129
123
  }]);
130
- pool.createWorkers(tokens.accessToken, pending.name);
124
+ QgridDispatcher.addToken(tokens.accessToken, pending.name);
131
125
  return reply.redirect(`/?oauth=success&name=${encodeURIComponent(pending.name)}`);
132
126
  } catch (e) {
133
127
  return reply.redirect(`/?oauth=error&reason=${encodeURIComponent(e.message)}`);
134
128
  }
135
129
  }
136
130
  async usage(tokenName) {
137
- const pool = getPool();
138
131
  const { rows: allTokens } = await TokenModel.findMany("A");
139
132
  const entry = tokenName ? allTokens.find((e) => e.name === tokenName) : allTokens.findLast((e) => e.active);
140
133
  if (!entry) return { error: "NOT_FOUND" };
141
134
  let accessToken = entry.token;
142
135
  if (entry.expires_at && Number(entry.expires_at) < Date.now() && entry.refresh_token) try {
143
- accessToken = await this.refreshToken(pool, entry);
136
+ accessToken = await this.refreshToken(entry);
144
137
  } catch (e) {
145
138
  console.warn(`[usage] refresh failed for ${entry.name}: ${e.message}`);
146
139
  return { error: "re-login required" };
147
140
  }
148
141
  const result = await fetchUsage(accessToken);
149
142
  if (result.error && entry.refresh_token) try {
150
- accessToken = await this.refreshToken(pool, entry);
143
+ accessToken = await this.refreshToken(entry);
151
144
  return await fetchUsage(accessToken);
152
145
  } catch (e) {
153
146
  console.warn(`[usage] refresh failed for ${entry.name}: ${e.message}`);
@@ -155,7 +148,7 @@ var QgridFrameClass = class extends BaseFrameClass {
155
148
  }
156
149
  return result;
157
150
  }
158
- async refreshToken(pool, token) {
151
+ async refreshToken(token) {
159
152
  if (!token.refresh_token) throw new Error("No refresh token");
160
153
  const refreshed = await refreshAccessToken(token.refresh_token);
161
154
  await TokenModel.save([{
@@ -165,16 +158,14 @@ var QgridFrameClass = class extends BaseFrameClass {
165
158
  expires_at: BigInt(refreshed.expiresAt),
166
159
  name: token.name ?? ""
167
160
  }]);
168
- pool.destroyWorkers(token.token);
169
- pool.createWorkers(refreshed.accessToken, token.name);
161
+ QgridDispatcher.removeToken(token.token);
162
+ QgridDispatcher.addToken(refreshed.accessToken, token.name);
170
163
  return refreshed.accessToken;
171
164
  }
172
165
  async health() {
173
- const pool = getPool();
174
166
  return {
175
167
  status: "ok",
176
- workers: [...pool.workers.values()].flat().length,
177
- activeTokens: pool.workers.size - pool.quotaExhausted.size
168
+ activeTokens: QgridDispatcher.tokens.size
178
169
  };
179
170
  }
180
171
  };
@@ -187,7 +178,8 @@ __decorate([
187
178
  __decorateMetadata("design:paramtypes", [
188
179
  String,
189
180
  String,
190
- Number
181
+ Number,
182
+ String
191
183
  ]),
192
184
  __decorateMetadata("design:returntype", Promise)
193
185
  ], QgridFrameClass.prototype, "query", null);
@@ -285,4 +277,4 @@ const QgridFrame = new QgridFrameClass();
285
277
  //#endregion
286
278
  export { QgridFrame };
287
279
 
288
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQuZnJhbWUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLmZyYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRmFzdGlmeVJlcGx5IH0gZnJvbSBcImZhc3RpZnlcIjtcbmltcG9ydCB7IGFwaSwgQmFzZUZyYW1lQ2xhc3MgfSBmcm9tIFwic29uYW11XCI7XG5cbmltcG9ydCB7IE1JQ1JPX1VTRCwgUmVxdWVzdExvZ01vZGVsIH0gZnJvbSBcIi4uL3JlcXVlc3QtbG9nL3JlcXVlc3QtbG9nLm1vZGVsXCI7XG5pbXBvcnQgeyBUb2tlbk1vZGVsIH0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLm1vZGVsXCI7XG5pbXBvcnQgeyB0eXBlIFJlZnJlc2hUb2tlblBhcmFtcyB9IGZyb20gXCIuLi90b2tlbi90b2tlbi50eXBlc1wiO1xuaW1wb3J0IHtcbiAgYnVpbGRBdXRoVXJsLFxuICBleGNoYW5nZUNvZGVGb3JUb2tlbnMsXG4gIGZldGNoVXNhZ2UsXG4gIGdlbmVyYXRlUEtDRSxcbiAgcmVmcmVzaEFjY2Vzc1Rva2VuLFxufSBmcm9tIFwiLi9vYXV0aFwiO1xuaW1wb3J0IHsgdHlwZSBDbGF1ZGVQb29sLCBnZXRQb29sIH0gZnJvbSBcIi4vcG9vbFwiO1xuaW1wb3J0IHtcbiAgdHlwZSBDbGlSZXN1bHQsXG4gIHR5cGUgSGVhbHRoUmVzcG9uc2UsXG4gIHR5cGUgT0F1dGhTdGFydFJlc3VsdCxcbiAgdHlwZSBUb2tlblN0YXRzLFxuICB0eXBlIFVzYWdlUmVzcG9uc2UsXG59IGZyb20gXCIuL3FncmlkLnR5cGVzXCI7XG5cbi8vIFBLQ0Ug7IS47IWYIOuplOuqqOumrCDsoIDsnqUgKHN0YXRlIOKGkiB7IGNvZGVWZXJpZmllciwgbmFtZSwgcmVkaXJlY3RVcmkgfSlcbmNvbnN0IHBlbmRpbmdPQXV0aCA9IG5ldyBNYXA8c3RyaW5nLCB7IGNvZGVWZXJpZmllcjogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHJlZGlyZWN0VXJpOiBzdHJpbmcgfT4oKTtcblxuY2xhc3MgUWdyaWRGcmFtZUNsYXNzIGV4dGVuZHMgQmFzZUZyYW1lQ2xhc3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIlFncmlkXCIpO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIHF1ZXJ5KHByb21wdDogc3RyaW5nLCBzeXN0ZW0/OiBzdHJpbmcsIHRpbWVvdXQ/OiBudW1iZXIpOiBQcm9taXNlPENsaVJlc3VsdD4ge1xuICAgIGNvbnN0IHBvb2wgPSBnZXRQb29sKCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeSh7IHN5c3RlbSwgcHJvbXB0IH0sIHRpbWVvdXQpO1xuXG4gICAgLy8g66Gc6re4IOq4sOuhnSDsi6TtjKjtlbTrj4Qg7L+866asIOqysOqzvOuKlCDrsJjtmZhcbiAgICBSZXF1ZXN0TG9nTW9kZWwuc2F2ZShbXG4gICAgICB7XG4gICAgICAgIHRva2VuX25hbWU6IHBvb2wuZ2V0TGFzdFVzZWRXb3JrZXJOYW1lKCksXG4gICAgICAgIHF1ZXJ5OiBzeXN0ZW0gPyBgW1N5c3RlbV1cXG4ke3N5c3RlbX1cXG5cXG5bVXNlcl1cXG4ke3Byb21wdH1gIDogcHJvbXB0LFxuICAgICAgICByZXNwb25zZTogcmVzdWx0LnRleHQsXG4gICAgICAgIGlucHV0X3Rva2VuczogcmVzdWx0LnVzYWdlLmlucHV0X3Rva2VucyxcbiAgICAgICAgb3V0cHV0X3Rva2VuczogcmVzdWx0LnVzYWdlLm91dHB1dF90b2tlbnMsXG4gICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiByZXN1bHQudXNhZ2UuY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogcmVzdWx0LnVzYWdlLmNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyxcbiAgICAgICAgZHVyYXRpb25fbXM6IHJlc3VsdC5kdXJhdGlvbk1zLFxuICAgICAgICBjb3N0X3VzZDogcmVzdWx0LmNvc3RVc2QgIT09IG51bGwgPyBNYXRoLnJvdW5kKHJlc3VsdC5jb3N0VXNkICogTUlDUk9fVVNEKSA6IG51bGwsXG4gICAgICB9LFxuICAgIF0pLmNhdGNoKChlKSA9PiBjb25zb2xlLmVycm9yKFwicmVxdWVzdExvZyBzYXZlIGZhaWxlZDpcIiwgZSkpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdIH0pXG4gIGFzeW5jIHN0YXRzKCk6IFByb21pc2U8VG9rZW5TdGF0c1tdPiB7XG4gICAgcmV0dXJuIGdldFBvb2woKS5nZXRTdGF0cygpO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0gfSlcbiAgYXN5bmMgdG90YWxDb3N0KHRva2VuTmFtZT86IHN0cmluZyk6IFByb21pc2U8eyB1c2Q6IG51bWJlciB9PiB7XG4gICAgcmV0dXJuIHsgdXNkOiBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwudG90YWxDb3N0KHsgdG9rZW5fbmFtZTogdG9rZW5OYW1lIH0pIH07XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgYWRkVG9rZW4odG9rZW46IHN0cmluZywgbmFtZTogc3RyaW5nLCByZWZyZXNoVG9rZW4/OiBzdHJpbmcpOiBQcm9taXNlPHsgYWRkZWQ6IGJvb2xlYW4gfT4ge1xuICAgIGF3YWl0IFRva2VuTW9kZWwuc2F2ZShbXG4gICAgICB7XG4gICAgICAgIHRva2VuLFxuICAgICAgICBuYW1lLFxuICAgICAgICAuLi4ocmVmcmVzaFRva2VuICYmIHJlZnJlc2hUb2tlbi5sZW5ndGggPiAwID8geyByZWZyZXNoX3Rva2VuOiByZWZyZXNoVG9rZW4gfSA6IHt9KSxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgZ2V0UG9vbCgpLmNyZWF0ZVdvcmtlcnModG9rZW4sIG5hbWUpO1xuICAgIHJldHVybiB7IGFkZGVkOiB0cnVlIH07XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgdXBkYXRlVG9rZW4oXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICBuYW1lPzogc3RyaW5nLFxuICAgIG5ld1Rva2VuPzogc3RyaW5nLFxuICAgIHJlZnJlc2hUb2tlbj86IHN0cmluZyxcbiAgKTogUHJvbWlzZTx7IHVwZGF0ZWQ6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IHBvb2wgPSBnZXRQb29sKCk7XG4gICAgY29uc3QgZW50cnkgPSBhd2FpdCBUb2tlbk1vZGVsLmZpbmRCeVRva2VuKFwiQVwiLCB0b2tlbik7XG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuIHsgdXBkYXRlZDogZmFsc2UgfTtcblxuICAgIGNvbnN0IGhhc05ld1Rva2VuID0gbmV3VG9rZW4gIT09IHVuZGVmaW5lZCAmJiBuZXdUb2tlbi5sZW5ndGggPiAwO1xuICAgIGNvbnN0IGhhc1JlZnJlc2hUb2tlbiA9IHJlZnJlc2hUb2tlbiAhPT0gdW5kZWZpbmVkICYmIHJlZnJlc2hUb2tlbi5sZW5ndGggPiAwO1xuICAgIGF3YWl0IFRva2VuTW9kZWwuc2F2ZShbXG4gICAgICB7XG4gICAgICAgIGlkOiBlbnRyeS5pZCxcbiAgICAgICAgdG9rZW46IGhhc05ld1Rva2VuID8gbmV3VG9rZW4gOiBlbnRyeS50b2tlbixcbiAgICAgICAgbmFtZTogbmFtZSAhPT0gdW5kZWZpbmVkID8gbmFtZSA6IGVudHJ5Lm5hbWUsXG4gICAgICAgIC4uLihoYXNSZWZyZXNoVG9rZW4gPyB7IHJlZnJlc2hfdG9rZW46IHJlZnJlc2hUb2tlbiB9IDoge30pLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIGlmIChoYXNOZXdUb2tlbikge1xuICAgICAgcG9vbC5kZXN0cm95V29ya2Vycyh0b2tlbik7XG4gICAgICBwb29sLmNyZWF0ZVdvcmtlcnMobmV3VG9rZW4sIG5hbWUgPz8gZW50cnkubmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB7IHVwZGF0ZWQ6IHRydWUgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyByZW1vdmVUb2tlbih0b2tlbjogc3RyaW5nKTogUHJvbWlzZTx7IHJlbW92ZWQ6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IHBvb2wgPSBnZXRQb29sKCk7XG4gICAgaWYgKCFwb29sLndvcmtlcnMuaGFzKHRva2VuKSkgcmV0dXJuIHsgcmVtb3ZlZDogZmFsc2UgfTtcblxuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kQnlUb2tlbihcIkFcIiwgdG9rZW4pO1xuICAgIGlmIChlbnRyeSkgYXdhaXQgVG9rZW5Nb2RlbC5kZWwoW2VudHJ5LmlkXSk7XG4gICAgcG9vbC5kZXN0cm95V29ya2Vycyh0b2tlbik7XG4gICAgcmV0dXJuIHsgcmVtb3ZlZDogdHJ1ZSB9O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBpZCB0b2tlbl9pZFxuICAgKiDthqDtgbAg7Zmc7ISx7ZmUL+u5hO2ZnOyEse2ZlCDthqDquIAgKHBvb2wg7JuM7LukIOyDneyEsS/soJzqsbAgJiBEQuydmCBhY3RpdmUg7ZWE65OcIOyXheuNsOydtO2KuClcbiAgICpcbiAgICogQHJldHVybnMg7Yag7YGwIO2ZnOyEse2ZlCDsl6zrtoBcbiAgICovXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyB0b2dnbGVUb2tlbihpZDogbnVtYmVyKTogUHJvbWlzZTx7IGFjdGl2ZTogYm9vbGVhbiB9PiB7XG4gICAgY29uc3QgcG9vbCA9IGdldFBvb2woKTtcbiAgICBjb25zdCBlbnRyeSA9IGF3YWl0IFRva2VuTW9kZWwuZmluZE9uZShcIkFcIiwgeyBpZCB9KTtcbiAgICBpZiAoIWVudHJ5KSByZXR1cm4geyBhY3RpdmU6IGZhbHNlIH07XG5cbiAgICBjb25zdCBuZXdBY3RpdmUgPSAhZW50cnkuYWN0aXZlO1xuICAgIGF3YWl0IFRva2VuTW9kZWwuc2F2ZShbeyBpZCwgdG9rZW46IGVudHJ5LnRva2VuLCBhY3RpdmU6IG5ld0FjdGl2ZSwgbmFtZTogZW50cnkubmFtZSB9XSk7XG5cbiAgICAvLyDthqDtgbDsnZgg7IOI66Gc7Jq0IOyDge2DnOqwgCDtmZzshLHtmZTrqbQv67mE7Zmc7ISx7ZmU66m0XG4gICAgaWYgKG5ld0FjdGl2ZSkge1xuICAgICAgLy8g7JuM7LukIOyDneyEsVxuICAgICAgcG9vbC5jcmVhdGVXb3JrZXJzKGVudHJ5LnRva2VuLCBlbnRyeS5uYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g7JuM7LukIOygnOqxsFxuICAgICAgcG9vbC5kZXN0cm95V29ya2VycyhlbnRyeS50b2tlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgYWN0aXZlOiBuZXdBY3RpdmUgfTtcbiAgfVxuXG4gIC8vIE9BdXRoIOuhnOq3uOyduDogYXV0aFVybCDsg53shLEgKO2UhOuhoO2KuOyXkOyEnCDsnbQgQVBJIO2YuOy2nCDtm4QgYXV0aFVybOuhnCDrpqzri6TsnbTroIntirgpXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBvYXV0aFN0YXJ0KG5hbWU6IHN0cmluZyk6IFByb21pc2U8T0F1dGhTdGFydFJlc3VsdD4ge1xuICAgIGNvbnN0IHsgY29kZVZlcmlmaWVyLCBjb2RlQ2hhbGxlbmdlLCBzdGF0ZSB9ID0gZ2VuZXJhdGVQS0NFKCk7XG5cbiAgICBjb25zdCBzZXJ2ZXJQb3J0ID0gcHJvY2Vzcy5lbnYuUE9SVCA/PyBcIjQ0OTAwXCI7XG4gICAgY29uc3QgcmVkaXJlY3RVcmkgPSBgaHR0cDovL2xvY2FsaG9zdDoke3NlcnZlclBvcnR9L2NhbGxiYWNrYDtcbiAgICBjb25zdCBhdXRoVXJsID0gYnVpbGRBdXRoVXJsKGNvZGVDaGFsbGVuZ2UsIHN0YXRlLCByZWRpcmVjdFVyaSk7XG5cbiAgICAvLyBQS0NF66W8IOuplOuqqOumrOyXkCDsoIDsnqUgKDXrtoQgVFRMKVxuICAgIHBlbmRpbmdPQXV0aC5zZXQoc3RhdGUsIHsgY29kZVZlcmlmaWVyLCBuYW1lLCByZWRpcmVjdFVyaSB9KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHBlbmRpbmdPQXV0aC5kZWxldGUoc3RhdGUpLCAzMDBfMDAwKTtcblxuICAgIHJldHVybiB7IGF1dGhVcmwgfTtcbiAgfVxuXG4gIC8vIE9BdXRoIOy9nOuwsSDsspjrpqwg4oCUIHNvbmFtdS5jb25maWcudHPsnZggY3VzdG9tIOudvOyasO2KuOyXkOyEnCDtmLjstpzrkKhcbiAgYXN5bmMgaGFuZGxlT0F1dGhDYWxsYmFjayhjb2RlOiBzdHJpbmcsIHN0YXRlOiBzdHJpbmcsIHJlcGx5OiBGYXN0aWZ5UmVwbHkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwb29sID0gZ2V0UG9vbCgpO1xuICAgIGNvbnN0IHBlbmRpbmcgPSBwZW5kaW5nT0F1dGguZ2V0KHN0YXRlKTtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHJldHVybiByZXBseS5yZWRpcmVjdChcIi8/b2F1dGg9ZXJyb3ImcmVhc29uPWludmFsaWRfc3RhdGVcIik7XG4gICAgfVxuICAgIHBlbmRpbmdPQXV0aC5kZWxldGUoc3RhdGUpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRva2VucyA9IGF3YWl0IGV4Y2hhbmdlQ29kZUZvclRva2VucyhcbiAgICAgICAgY29kZSxcbiAgICAgICAgcGVuZGluZy5jb2RlVmVyaWZpZXIsXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBwZW5kaW5nLnJlZGlyZWN0VXJpLFxuICAgICAgKTtcblxuICAgICAgLy8g6rCZ7J2AIOqzhOygleydmCDsnbTsoIQg7Yag7YGw7J20IOyeiOycvOuptCDqtZDssrRcbiAgICAgIGlmICh0b2tlbnMuYWNjb3VudFV1aWQpIHtcbiAgICAgICAgY29uc3Qgb2xkRW50cmllcyA9IGF3YWl0IFRva2VuTW9kZWwuZmluZEJ5QWNjb3VudFV1aWQoXCJBXCIsIHRva2Vucy5hY2NvdW50VXVpZCk7XG4gICAgICAgIGZvciAoY29uc3Qgb2xkIG9mIG9sZEVudHJpZXMpIHtcbiAgICAgICAgICBwb29sLmRlc3Ryb3lXb3JrZXJzKG9sZC50b2tlbik7XG4gICAgICAgICAgYXdhaXQgVG9rZW5Nb2RlbC5kZWwoW29sZC5pZF0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIOyDiCDthqDtgbAg7KCA7J6lICsgcG9vbOyXkCDrk7HroZ1cbiAgICAgIGF3YWl0IFRva2VuTW9kZWwuc2F2ZShbXG4gICAgICAgIHtcbiAgICAgICAgICB0b2tlbjogdG9rZW5zLmFjY2Vzc1Rva2VuLFxuICAgICAgICAgIG5hbWU6IHBlbmRpbmcubmFtZSxcbiAgICAgICAgICByZWZyZXNoX3Rva2VuOiB0b2tlbnMucmVmcmVzaFRva2VuLFxuICAgICAgICAgIGV4cGlyZXNfYXQ6IHRva2Vucy5leHBpcmVzQXQgPyBCaWdJbnQodG9rZW5zLmV4cGlyZXNBdCkgOiBudWxsLFxuICAgICAgICAgIGFjY291bnRfdXVpZDogdG9rZW5zLmFjY291bnRVdWlkLFxuICAgICAgICB9LFxuICAgICAgXSk7XG4gICAgICBwb29sLmNyZWF0ZVdvcmtlcnModG9rZW5zLmFjY2Vzc1Rva2VuLCBwZW5kaW5nLm5hbWUpO1xuXG4gICAgICByZXR1cm4gcmVwbHkucmVkaXJlY3QoYC8/b2F1dGg9c3VjY2VzcyZuYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBlbmRpbmcubmFtZSl9YCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHJlcGx5LnJlZGlyZWN0KGAvP29hdXRoPWVycm9yJnJlYXNvbj0ke2VuY29kZVVSSUNvbXBvbmVudCgoZSBhcyBFcnJvcikubWVzc2FnZSl9YCk7XG4gICAgfVxuICB9XG5cbiAgLy8g7Yag7YGwIOyCrOyaqeufiSDsobDtmowgKE9BdXRoIHVzYWdlIEFQSSlcbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0gfSlcbiAgYXN5bmMgdXNhZ2UodG9rZW5OYW1lPzogc3RyaW5nKTogUHJvbWlzZTxVc2FnZVJlc3BvbnNlPiB7XG4gICAgY29uc3QgcG9vbCA9IGdldFBvb2woKTtcbiAgICBjb25zdCB7IHJvd3M6IGFsbFRva2VucyB9ID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kTWFueShcIkFcIik7XG4gICAgY29uc3QgZW50cnkgPSB0b2tlbk5hbWVcbiAgICAgID8gYWxsVG9rZW5zLmZpbmQoKGUpID0+IGUubmFtZSA9PT0gdG9rZW5OYW1lKVxuICAgICAgOiBhbGxUb2tlbnMuZmluZExhc3QoKGUpID0+IGUuYWN0aXZlKTtcblxuICAgIGlmICghZW50cnkpIHJldHVybiB7IGVycm9yOiBcIk5PVF9GT1VORFwiIH07XG5cbiAgICAvLyDrp4zro4wg7ZmV7J24ICsgcmVmcmVzaCDsi5zrj4RcbiAgICBsZXQgYWNjZXNzVG9rZW4gPSBlbnRyeS50b2tlbjtcbiAgICBjb25zdCBpc0V4cGlyZWQgPSBlbnRyeS5leHBpcmVzX2F0ICYmIE51bWJlcihlbnRyeS5leHBpcmVzX2F0KSA8IERhdGUubm93KCk7XG5cbiAgICBpZiAoaXNFeHBpcmVkICYmIGVudHJ5LnJlZnJlc2hfdG9rZW4pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFjY2Vzc1Rva2VuID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW4ocG9vbCwgZW50cnkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYFt1c2FnZV0gcmVmcmVzaCBmYWlsZWQgZm9yICR7ZW50cnkubmFtZX06ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybiB7IGVycm9yOiBcInJlLWxvZ2luIHJlcXVpcmVkXCIgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB1c2FnZSDtmLjstpxcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaFVzYWdlKGFjY2Vzc1Rva2VuKTtcblxuICAgIC8vIOyduOymnSDsl5Drn6zrqbQgcmVmcmVzaF90b2tlbuycvOuhnCDsnqzsi5zrj4RcbiAgICBpZiAocmVzdWx0LmVycm9yICYmIGVudHJ5LnJlZnJlc2hfdG9rZW4pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFjY2Vzc1Rva2VuID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW4ocG9vbCwgZW50cnkpO1xuICAgICAgICByZXR1cm4gYXdhaXQgZmV0Y2hVc2FnZShhY2Nlc3NUb2tlbik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgW3VzYWdlXSByZWZyZXNoIGZhaWxlZCBmb3IgJHtlbnRyeS5uYW1lfTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IFwicmUtbG9naW4gcmVxdWlyZWRcIiB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyByZWZyZXNoVG9rZW4ocG9vbDogQ2xhdWRlUG9vbCwgdG9rZW46IFJlZnJlc2hUb2tlblBhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCF0b2tlbi5yZWZyZXNoX3Rva2VuKSB0aHJvdyBuZXcgRXJyb3IoXCJObyByZWZyZXNoIHRva2VuXCIpO1xuICAgIGNvbnN0IHJlZnJlc2hlZCA9IGF3YWl0IHJlZnJlc2hBY2Nlc3NUb2tlbih0b2tlbi5yZWZyZXNoX3Rva2VuKTtcbiAgICBhd2FpdCBUb2tlbk1vZGVsLnNhdmUoW1xuICAgICAge1xuICAgICAgICBpZDogdG9rZW4uaWQsXG4gICAgICAgIHRva2VuOiByZWZyZXNoZWQuYWNjZXNzVG9rZW4sXG4gICAgICAgIHJlZnJlc2hfdG9rZW46IHJlZnJlc2hlZC5yZWZyZXNoVG9rZW4sXG4gICAgICAgIGV4cGlyZXNfYXQ6IEJpZ0ludChyZWZyZXNoZWQuZXhwaXJlc0F0KSxcbiAgICAgICAgbmFtZTogdG9rZW4ubmFtZSA/PyBcIlwiLFxuICAgICAgfSxcbiAgICBdKTtcbiAgICBwb29sLmRlc3Ryb3lXb3JrZXJzKHRva2VuLnRva2VuKTtcbiAgICBwb29sLmNyZWF0ZVdvcmtlcnMocmVmcmVzaGVkLmFjY2Vzc1Rva2VuLCB0b2tlbi5uYW1lKTtcbiAgICByZXR1cm4gcmVmcmVzaGVkLmFjY2Vzc1Rva2VuO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0gfSlcbiAgYXN5bmMgaGVhbHRoKCk6IFByb21pc2U8SGVhbHRoUmVzcG9uc2U+IHtcbiAgICBjb25zdCBwb29sID0gZ2V0UG9vbCgpO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwib2tcIixcbiAgICAgIHdvcmtlcnM6IFsuLi5wb29sLndvcmtlcnMudmFsdWVzKCldLmZsYXQoKS5sZW5ndGgsXG4gICAgICBhY3RpdmVUb2tlbnM6IHBvb2wud29ya2Vycy5zaXplIC0gcG9vbC5xdW90YUV4aGF1c3RlZC5zaXplLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFFncmlkRnJhbWUgPSBuZXcgUWdyaWRGcmFtZUNsYXNzKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQXVCQSxNQUFNLCtCQUFlLElBQUksS0FBMEU7QUFFbkcsSUFBTSxrQkFBTixjQUE4QixlQUFlO0NB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
280
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQuZnJhbWUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLmZyYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRmFzdGlmeVJlcGx5IH0gZnJvbSBcImZhc3RpZnlcIjtcbmltcG9ydCB7IGFwaSwgQmFzZUZyYW1lQ2xhc3MgfSBmcm9tIFwic29uYW11XCI7XG5cbmltcG9ydCB7IE1JQ1JPX1VTRCwgUmVxdWVzdExvZ01vZGVsIH0gZnJvbSBcIi4uL3JlcXVlc3QtbG9nL3JlcXVlc3QtbG9nLm1vZGVsXCI7XG5pbXBvcnQgeyBUb2tlbk1vZGVsIH0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLm1vZGVsXCI7XG5pbXBvcnQgeyB0eXBlIFJlZnJlc2hUb2tlblBhcmFtcyB9IGZyb20gXCIuLi90b2tlbi90b2tlbi50eXBlc1wiO1xuaW1wb3J0IHtcbiAgYnVpbGRBdXRoVXJsLFxuICBleGNoYW5nZUNvZGVGb3JUb2tlbnMsXG4gIGZldGNoVXNhZ2UsXG4gIGdlbmVyYXRlUEtDRSxcbiAgcmVmcmVzaEFjY2Vzc1Rva2VuLFxufSBmcm9tIFwiLi9vYXV0aFwiO1xuaW1wb3J0IHsgUWdyaWREaXNwYXRjaGVyIH0gZnJvbSBcIi4vcWdyaWQuZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHtcbiAgdHlwZSBDbGlSZXN1bHQsXG4gIHR5cGUgSGVhbHRoUmVzcG9uc2UsXG4gIHR5cGUgT0F1dGhTdGFydFJlc3VsdCxcbiAgdHlwZSBUb2tlblN0YXRzLFxuICB0eXBlIFVzYWdlUmVzcG9uc2UsXG59IGZyb20gXCIuL3FncmlkLnR5cGVzXCI7XG5cbmNvbnN0IHBlbmRpbmdPQXV0aCA9IG5ldyBNYXA8c3RyaW5nLCB7IGNvZGVWZXJpZmllcjogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHJlZGlyZWN0VXJpOiBzdHJpbmcgfT4oKTtcblxuY2xhc3MgUWdyaWRGcmFtZUNsYXNzIGV4dGVuZHMgQmFzZUZyYW1lQ2xhc3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIlFncmlkXCIpO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIHF1ZXJ5KFxuICAgIHByb21wdDogc3RyaW5nLFxuICAgIHN5c3RlbT86IHN0cmluZyxcbiAgICB0aW1lb3V0PzogbnVtYmVyLFxuICAgIG1vZGVsPzogc3RyaW5nLFxuICApOiBQcm9taXNlPENsaVJlc3VsdD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFFncmlkRGlzcGF0Y2hlci5xdWVyeSh7IHN5c3RlbSwgcHJvbXB0LCBtb2RlbCB9LCB0aW1lb3V0KTtcblxuICAgIFJlcXVlc3RMb2dNb2RlbC5zYXZlKFtcbiAgICAgIHtcbiAgICAgICAgdG9rZW5fbmFtZTogcmVzdWx0LnRva2VuTmFtZSxcbiAgICAgICAgcXVlcnk6IHN5c3RlbSA/IGBbU3lzdGVtXVxcbiR7c3lzdGVtfVxcblxcbltVc2VyXVxcbiR7cHJvbXB0fWAgOiBwcm9tcHQsXG4gICAgICAgIHJlc3BvbnNlOiByZXN1bHQudGV4dCxcbiAgICAgICAgaW5wdXRfdG9rZW5zOiByZXN1bHQudXNhZ2UuaW5wdXRfdG9rZW5zLFxuICAgICAgICBvdXRwdXRfdG9rZW5zOiByZXN1bHQudXNhZ2Uub3V0cHV0X3Rva2VucyxcbiAgICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IHJlc3VsdC51c2FnZS5jYWNoZV9yZWFkX2lucHV0X3Rva2VucyxcbiAgICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiByZXN1bHQudXNhZ2UuY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zLFxuICAgICAgICBkdXJhdGlvbl9tczogcmVzdWx0LmR1cmF0aW9uTXMsXG4gICAgICAgIGNvc3RfdXNkOiByZXN1bHQuY29zdFVzZCAhPT0gbnVsbCA/IE1hdGgucm91bmQocmVzdWx0LmNvc3RVc2QgKiBNSUNST19VU0QpIDogbnVsbCxcbiAgICAgIH0sXG4gICAgXSkuY2F0Y2goKGUpID0+IGNvbnNvbGUuZXJyb3IoXCJyZXF1ZXN0TG9nIHNhdmUgZmFpbGVkOlwiLCBlKSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0gfSlcbiAgYXN5bmMgc3RhdHMoKTogUHJvbWlzZTxUb2tlblN0YXRzW10+IHtcbiAgICByZXR1cm4gUWdyaWREaXNwYXRjaGVyLmdldFN0YXRzKCk7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyB0b3RhbENvc3QodG9rZW5OYW1lPzogc3RyaW5nKTogUHJvbWlzZTx7IHVzZDogbnVtYmVyIH0+IHtcbiAgICByZXR1cm4geyB1c2Q6IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC50b3RhbENvc3QoeyB0b2tlbl9uYW1lOiB0b2tlbk5hbWUgfSkgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBhZGRUb2tlbih0b2tlbjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHJlZnJlc2hUb2tlbj86IHN0cmluZyk6IFByb21pc2U8eyBhZGRlZDogYm9vbGVhbiB9PiB7XG4gICAgYXdhaXQgVG9rZW5Nb2RlbC5zYXZlKFtcbiAgICAgIHtcbiAgICAgICAgdG9rZW4sXG4gICAgICAgIG5hbWUsXG4gICAgICAgIC4uLihyZWZyZXNoVG9rZW4gJiYgcmVmcmVzaFRva2VuLmxlbmd0aCA+IDAgPyB7IHJlZnJlc2hfdG9rZW46IHJlZnJlc2hUb2tlbiB9IDoge30pLFxuICAgICAgfSxcbiAgICBdKTtcbiAgICBRZ3JpZERpc3BhdGNoZXIuYWRkVG9rZW4odG9rZW4sIG5hbWUpO1xuICAgIHJldHVybiB7IGFkZGVkOiB0cnVlIH07XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgdXBkYXRlVG9rZW4oXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICBuYW1lPzogc3RyaW5nLFxuICAgIG5ld1Rva2VuPzogc3RyaW5nLFxuICAgIHJlZnJlc2hUb2tlbj86IHN0cmluZyxcbiAgKTogUHJvbWlzZTx7IHVwZGF0ZWQ6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kQnlUb2tlbihcIkFcIiwgdG9rZW4pO1xuICAgIGlmICghZW50cnkpIHJldHVybiB7IHVwZGF0ZWQ6IGZhbHNlIH07XG5cbiAgICBjb25zdCBoYXNOZXdUb2tlbiA9IG5ld1Rva2VuICE9PSB1bmRlZmluZWQgJiYgbmV3VG9rZW4ubGVuZ3RoID4gMDtcbiAgICBjb25zdCBoYXNSZWZyZXNoVG9rZW4gPSByZWZyZXNoVG9rZW4gIT09IHVuZGVmaW5lZCAmJiByZWZyZXNoVG9rZW4ubGVuZ3RoID4gMDtcbiAgICBhd2FpdCBUb2tlbk1vZGVsLnNhdmUoW1xuICAgICAge1xuICAgICAgICBpZDogZW50cnkuaWQsXG4gICAgICAgIHRva2VuOiBoYXNOZXdUb2tlbiA/IG5ld1Rva2VuIDogZW50cnkudG9rZW4sXG4gICAgICAgIG5hbWU6IG5hbWUgIT09IHVuZGVmaW5lZCA/IG5hbWUgOiBlbnRyeS5uYW1lLFxuICAgICAgICAuLi4oaGFzUmVmcmVzaFRva2VuID8geyByZWZyZXNoX3Rva2VuOiByZWZyZXNoVG9rZW4gfSA6IHt9KSxcbiAgICAgIH0sXG4gICAgXSk7XG5cbiAgICBpZiAoaGFzTmV3VG9rZW4pIHtcbiAgICAgIFFncmlkRGlzcGF0Y2hlci5yZW1vdmVUb2tlbih0b2tlbik7XG4gICAgICBRZ3JpZERpc3BhdGNoZXIuYWRkVG9rZW4obmV3VG9rZW4sIG5hbWUgPz8gZW50cnkubmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB7IHVwZGF0ZWQ6IHRydWUgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyByZW1vdmVUb2tlbih0b2tlbjogc3RyaW5nKTogUHJvbWlzZTx7IHJlbW92ZWQ6IGJvb2xlYW4gfT4ge1xuICAgIGlmICghUWdyaWREaXNwYXRjaGVyLmhhc1Rva2VuKHRva2VuKSkgcmV0dXJuIHsgcmVtb3ZlZDogZmFsc2UgfTtcblxuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kQnlUb2tlbihcIkFcIiwgdG9rZW4pO1xuICAgIGlmIChlbnRyeSkgYXdhaXQgVG9rZW5Nb2RlbC5kZWwoW2VudHJ5LmlkXSk7XG4gICAgUWdyaWREaXNwYXRjaGVyLnJlbW92ZVRva2VuKHRva2VuKTtcbiAgICByZXR1cm4geyByZW1vdmVkOiB0cnVlIH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGlkIHRva2VuX2lkXG4gICAqIO2GoO2BsCDtmZzshLHtmZQv67mE7Zmc7ISx7ZmUIO2GoOq4gCAoZGlzcGF0Y2hlciDrk7HroZ0v7KCc6rGwICYgRELsnZggYWN0aXZlIO2VhOuTnCDsl4XrjbDsnbTtirgpXG4gICAqIEByZXR1cm5zIO2GoO2BsCDtmZzshLHtmZQg7Jes67aAXG4gICAqL1xuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgdG9nZ2xlVG9rZW4oaWQ6IG51bWJlcik6IFByb21pc2U8eyBhY3RpdmU6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kT25lKFwiQVwiLCB7IGlkIH0pO1xuICAgIGlmICghZW50cnkpIHJldHVybiB7IGFjdGl2ZTogZmFsc2UgfTtcblxuICAgIGNvbnN0IG5ld0FjdGl2ZSA9ICFlbnRyeS5hY3RpdmU7XG4gICAgYXdhaXQgVG9rZW5Nb2RlbC5zYXZlKFt7IGlkLCB0b2tlbjogZW50cnkudG9rZW4sIGFjdGl2ZTogbmV3QWN0aXZlLCBuYW1lOiBlbnRyeS5uYW1lIH1dKTtcblxuICAgIGlmIChuZXdBY3RpdmUpIHtcbiAgICAgIFFncmlkRGlzcGF0Y2hlci5hZGRUb2tlbihlbnRyeS50b2tlbiwgZW50cnkubmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFFncmlkRGlzcGF0Y2hlci5yZW1vdmVUb2tlbihlbnRyeS50b2tlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgYWN0aXZlOiBuZXdBY3RpdmUgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBvYXV0aFN0YXJ0KG5hbWU6IHN0cmluZyk6IFByb21pc2U8T0F1dGhTdGFydFJlc3VsdD4ge1xuICAgIGNvbnN0IHsgY29kZVZlcmlmaWVyLCBjb2RlQ2hhbGxlbmdlLCBzdGF0ZSB9ID0gZ2VuZXJhdGVQS0NFKCk7XG5cbiAgICBjb25zdCBzZXJ2ZXJQb3J0ID0gcHJvY2Vzcy5lbnYuUE9SVCA/PyBcIjQ0OTAwXCI7XG4gICAgY29uc3QgcmVkaXJlY3RVcmkgPSBgaHR0cDovL2xvY2FsaG9zdDoke3NlcnZlclBvcnR9L2NhbGxiYWNrYDtcbiAgICBjb25zdCBhdXRoVXJsID0gYnVpbGRBdXRoVXJsKGNvZGVDaGFsbGVuZ2UsIHN0YXRlLCByZWRpcmVjdFVyaSk7XG5cbiAgICBwZW5kaW5nT0F1dGguc2V0KHN0YXRlLCB7IGNvZGVWZXJpZmllciwgbmFtZSwgcmVkaXJlY3RVcmkgfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiBwZW5kaW5nT0F1dGguZGVsZXRlKHN0YXRlKSwgMzAwXzAwMCk7XG5cbiAgICByZXR1cm4geyBhdXRoVXJsIH07XG4gIH1cblxuICBhc3luYyBoYW5kbGVPQXV0aENhbGxiYWNrKGNvZGU6IHN0cmluZywgc3RhdGU6IHN0cmluZywgcmVwbHk6IEZhc3RpZnlSZXBseSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBlbmRpbmcgPSBwZW5kaW5nT0F1dGguZ2V0KHN0YXRlKTtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHJldHVybiByZXBseS5yZWRpcmVjdChcIi8/b2F1dGg9ZXJyb3ImcmVhc29uPWludmFsaWRfc3RhdGVcIik7XG4gICAgfVxuICAgIHBlbmRpbmdPQXV0aC5kZWxldGUoc3RhdGUpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRva2VucyA9IGF3YWl0IGV4Y2hhbmdlQ29kZUZvclRva2VucyhcbiAgICAgICAgY29kZSxcbiAgICAgICAgcGVuZGluZy5jb2RlVmVyaWZpZXIsXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBwZW5kaW5nLnJlZGlyZWN0VXJpLFxuICAgICAgKTtcblxuICAgICAgaWYgKHRva2Vucy5hY2NvdW50VXVpZCkge1xuICAgICAgICBjb25zdCBvbGRFbnRyaWVzID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kQnlBY2NvdW50VXVpZChcIkFcIiwgdG9rZW5zLmFjY291bnRVdWlkKTtcbiAgICAgICAgaWYgKG9sZEVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGZvciAoY29uc3Qgb2xkIG9mIG9sZEVudHJpZXMpIFFncmlkRGlzcGF0Y2hlci5yZW1vdmVUb2tlbihvbGQudG9rZW4pO1xuICAgICAgICAgIGF3YWl0IFRva2VuTW9kZWwuZGVsKG9sZEVudHJpZXMubWFwKChvKSA9PiBvLmlkKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXdhaXQgVG9rZW5Nb2RlbC5zYXZlKFtcbiAgICAgICAge1xuICAgICAgICAgIHRva2VuOiB0b2tlbnMuYWNjZXNzVG9rZW4sXG4gICAgICAgICAgbmFtZTogcGVuZGluZy5uYW1lLFxuICAgICAgICAgIHJlZnJlc2hfdG9rZW46IHRva2Vucy5yZWZyZXNoVG9rZW4sXG4gICAgICAgICAgZXhwaXJlc19hdDogdG9rZW5zLmV4cGlyZXNBdCA/IEJpZ0ludCh0b2tlbnMuZXhwaXJlc0F0KSA6IG51bGwsXG4gICAgICAgICAgYWNjb3VudF91dWlkOiB0b2tlbnMuYWNjb3VudFV1aWQsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICAgIFFncmlkRGlzcGF0Y2hlci5hZGRUb2tlbih0b2tlbnMuYWNjZXNzVG9rZW4sIHBlbmRpbmcubmFtZSk7XG5cbiAgICAgIHJldHVybiByZXBseS5yZWRpcmVjdChgLz9vYXV0aD1zdWNjZXNzJm5hbWU9JHtlbmNvZGVVUklDb21wb25lbnQocGVuZGluZy5uYW1lKX1gKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gcmVwbHkucmVkaXJlY3QoYC8/b2F1dGg9ZXJyb3ImcmVhc29uPSR7ZW5jb2RlVVJJQ29tcG9uZW50KChlIGFzIEVycm9yKS5tZXNzYWdlKX1gKTtcbiAgICB9XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyB1c2FnZSh0b2tlbk5hbWU/OiBzdHJpbmcpOiBQcm9taXNlPFVzYWdlUmVzcG9uc2U+IHtcbiAgICBjb25zdCB7IHJvd3M6IGFsbFRva2VucyB9ID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kTWFueShcIkFcIik7XG4gICAgY29uc3QgZW50cnkgPSB0b2tlbk5hbWVcbiAgICAgID8gYWxsVG9rZW5zLmZpbmQoKGUpID0+IGUubmFtZSA9PT0gdG9rZW5OYW1lKVxuICAgICAgOiBhbGxUb2tlbnMuZmluZExhc3QoKGUpID0+IGUuYWN0aXZlKTtcblxuICAgIGlmICghZW50cnkpIHJldHVybiB7IGVycm9yOiBcIk5PVF9GT1VORFwiIH07XG5cbiAgICBsZXQgYWNjZXNzVG9rZW4gPSBlbnRyeS50b2tlbjtcbiAgICBjb25zdCBpc0V4cGlyZWQgPSBlbnRyeS5leHBpcmVzX2F0ICYmIE51bWJlcihlbnRyeS5leHBpcmVzX2F0KSA8IERhdGUubm93KCk7XG5cbiAgICBpZiAoaXNFeHBpcmVkICYmIGVudHJ5LnJlZnJlc2hfdG9rZW4pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFjY2Vzc1Rva2VuID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW4oZW50cnkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYFt1c2FnZV0gcmVmcmVzaCBmYWlsZWQgZm9yICR7ZW50cnkubmFtZX06ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybiB7IGVycm9yOiBcInJlLWxvZ2luIHJlcXVpcmVkXCIgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaFVzYWdlKGFjY2Vzc1Rva2VuKTtcblxuICAgIGlmIChyZXN1bHQuZXJyb3IgJiYgZW50cnkucmVmcmVzaF90b2tlbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYWNjZXNzVG9rZW4gPSBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbihlbnRyeSk7XG4gICAgICAgIHJldHVybiBhd2FpdCBmZXRjaFVzYWdlKGFjY2Vzc1Rva2VuKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBbdXNhZ2VdIHJlZnJlc2ggZmFpbGVkIGZvciAke2VudHJ5Lm5hbWV9OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICByZXR1cm4geyBlcnJvcjogXCJyZS1sb2dpbiByZXF1aXJlZFwiIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2hUb2tlbih0b2tlbjogUmVmcmVzaFRva2VuUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIXRva2VuLnJlZnJlc2hfdG9rZW4pIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZnJlc2ggdG9rZW5cIik7XG4gICAgY29uc3QgcmVmcmVzaGVkID0gYXdhaXQgcmVmcmVzaEFjY2Vzc1Rva2VuKHRva2VuLnJlZnJlc2hfdG9rZW4pO1xuICAgIGF3YWl0IFRva2VuTW9kZWwuc2F2ZShbXG4gICAgICB7XG4gICAgICAgIGlkOiB0b2tlbi5pZCxcbiAgICAgICAgdG9rZW46IHJlZnJlc2hlZC5hY2Nlc3NUb2tlbixcbiAgICAgICAgcmVmcmVzaF90b2tlbjogcmVmcmVzaGVkLnJlZnJlc2hUb2tlbixcbiAgICAgICAgZXhwaXJlc19hdDogQmlnSW50KHJlZnJlc2hlZC5leHBpcmVzQXQpLFxuICAgICAgICBuYW1lOiB0b2tlbi5uYW1lID8/IFwiXCIsXG4gICAgICB9LFxuICAgIF0pO1xuICAgIFFncmlkRGlzcGF0Y2hlci5yZW1vdmVUb2tlbih0b2tlbi50b2tlbik7XG4gICAgUWdyaWREaXNwYXRjaGVyLmFkZFRva2VuKHJlZnJlc2hlZC5hY2Nlc3NUb2tlbiwgdG9rZW4ubmFtZSk7XG4gICAgcmV0dXJuIHJlZnJlc2hlZC5hY2Nlc3NUb2tlbjtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdIH0pXG4gIGFzeW5jIGhlYWx0aCgpOiBQcm9taXNlPEhlYWx0aFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHsgc3RhdHVzOiBcIm9rXCIsIGFjdGl2ZVRva2VuczogUWdyaWREaXNwYXRjaGVyLnRva2Vucy5zaXplIH07XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFFncmlkRnJhbWUgPSBuZXcgUWdyaWRGcmFtZUNsYXNzKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQXNCQSxNQUFNLCtCQUFlLElBQUksS0FBMEU7QUFFbkcsSUFBTSxrQkFBTixjQUE4QixlQUFlO0NBQzNDLGNBQWM7QUFDWixRQUFNLFFB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
@@ -4,10 +4,12 @@ import { z } from "zod";
4
4
  const QueryInput = z.object({
5
5
  system: z.string().optional(),
6
6
  prompt: z.string(),
7
+ model: z.string().optional(),
7
8
  timeout: z.number().optional()
8
9
  });
9
10
  const CliResult = z.object({
10
11
  text: z.string(),
12
+ tokenName: z.string().optional(),
11
13
  usage: z.object({
12
14
  input_tokens: z.number(),
13
15
  output_tokens: z.number(),
@@ -17,17 +19,6 @@ const CliResult = z.object({
17
19
  durationMs: z.number(),
18
20
  costUsd: z.number()
19
21
  });
20
- const PoolConfig = z.object({
21
- tokens: z.array(z.object({
22
- token: z.string(),
23
- name: z.string()
24
- })),
25
- size: z.number().optional(),
26
- model: z.string().optional(),
27
- timeout: z.number().optional(),
28
- cwd: z.string().optional(),
29
- maxCalls: z.number().optional()
30
- });
31
22
  const AddTokenInput = z.object({
32
23
  token: z.string(),
33
24
  name: z.string()
@@ -36,8 +27,7 @@ const RemoveTokenInput = z.object({ token: z.string() });
36
27
  const TokenStats = z.object({
37
28
  token: z.string(),
38
29
  name: z.string(),
39
- requests: z.number(),
40
- active: z.boolean()
30
+ requests: z.number()
41
31
  });
42
32
  const OAuthStartResult = z.object({ authUrl: z.string() });
43
33
  const RateLimit = z.object({
@@ -61,7 +51,6 @@ const UsageResponse = z.object({
61
51
  });
62
52
  const HealthResponse = z.object({
63
53
  status: z.string(),
64
- workers: z.number(),
65
54
  activeTokens: z.number()
66
55
  });
67
56
  var QuotaError = class extends Error {
@@ -77,6 +66,6 @@ function maskToken(token) {
77
66
  return token.length > 4 ? `...${token.slice(-4)}` : token;
78
67
  }
79
68
  //#endregion
80
- export { AddTokenInput, CliResult, HealthResponse, OAuthStartResult, PoolConfig, ProcessError, QueryInput, QuotaError, RemoveTokenInput, TimeoutError, TokenStats, UsageResponse, maskToken };
69
+ export { AddTokenInput, CliResult, HealthResponse, OAuthStartResult, ProcessError, QueryInput, QuotaError, RemoveTokenInput, TimeoutError, TokenStats, UsageResponse, maskToken };
81
70
 
82
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQudHlwZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8vIOKUgOKUgOKUgCBRdWVyeSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IFF1ZXJ5SW5wdXQgPSB6Lm9iamVjdCh7XG4gIHN5c3RlbTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcm9tcHQ6IHouc3RyaW5nKCksXG4gIHRpbWVvdXQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUXVlcnlJbnB1dCA9IHouaW5mZXI8dHlwZW9mIFF1ZXJ5SW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgQ2xpUmVzdWx0ID0gei5vYmplY3Qoe1xuICB0ZXh0OiB6LnN0cmluZygpLFxuICB1c2FnZTogei5vYmplY3Qoe1xuICAgIGlucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICBvdXRwdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIGNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICBjYWNoZV9yZWFkX2lucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgfSksXG4gIGR1cmF0aW9uTXM6IHoubnVtYmVyKCksXG4gIGNvc3RVc2Q6IHoubnVtYmVyKCksXG59KTtcbmV4cG9ydCB0eXBlIENsaVJlc3VsdCA9IHouaW5mZXI8dHlwZW9mIENsaVJlc3VsdD47XG5cbi8vIOKUgOKUgOKUgCBQb29sIENvbmZpZyDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IFBvb2xDb25maWcgPSB6Lm9iamVjdCh7XG4gIHRva2Vuczogei5hcnJheSh6Lm9iamVjdCh7IHRva2VuOiB6LnN0cmluZygpLCBuYW1lOiB6LnN0cmluZygpIH0pKSxcbiAgc2l6ZTogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBtb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aW1lb3V0OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGN3ZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtYXhDYWxsczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBQb29sQ29uZmlnID0gei5pbmZlcjx0eXBlb2YgUG9vbENvbmZpZz47XG5cbi8vIOKUgOKUgOKUgCBUb2tlbiBNYW5hZ2VtZW50IOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgQWRkVG9rZW5JbnB1dCA9IHoub2JqZWN0KHtcbiAgdG9rZW46IHouc3RyaW5nKCksXG4gIG5hbWU6IHouc3RyaW5nKCksXG59KTtcbmV4cG9ydCB0eXBlIEFkZFRva2VuSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBBZGRUb2tlbklucHV0PjtcblxuZXhwb3J0IGNvbnN0IFJlbW92ZVRva2VuSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHRva2VuOiB6LnN0cmluZygpLFxufSk7XG5leHBvcnQgdHlwZSBSZW1vdmVUb2tlbklucHV0ID0gei5pbmZlcjx0eXBlb2YgUmVtb3ZlVG9rZW5JbnB1dD47XG5cbmV4cG9ydCBjb25zdCBUb2tlblN0YXRzID0gei5vYmplY3Qoe1xuICB0b2tlbjogei5zdHJpbmcoKSxcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgcmVxdWVzdHM6IHoubnVtYmVyKCksXG4gIGFjdGl2ZTogei5ib29sZWFuKCksXG59KTtcbmV4cG9ydCB0eXBlIFRva2VuU3RhdHMgPSB6LmluZmVyPHR5cGVvZiBUb2tlblN0YXRzPjtcblxuLy8g4pSA4pSA4pSAIE9BdXRoIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgT0F1dGhTdGFydFJlc3VsdCA9IHoub2JqZWN0KHtcbiAgYXV0aFVybDogei5zdHJpbmcoKSxcbn0pO1xuZXhwb3J0IHR5cGUgT0F1dGhTdGFydFJlc3VsdCA9IHouaW5mZXI8dHlwZW9mIE9BdXRoU3RhcnRSZXN1bHQ+O1xuXG5jb25zdCBSYXRlTGltaXQgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHV0aWxpemF0aW9uOiB6Lm51bWJlcigpLm51bGxhYmxlKCksXG4gICAgcmVzZXRzX2F0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIH0pXG4gIC5udWxsYWJsZSgpO1xuXG5leHBvcnQgY29uc3QgVXNhZ2VSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgZXJyb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZml2ZV9ob3VyOiBSYXRlTGltaXQub3B0aW9uYWwoKSxcbiAgc2V2ZW5fZGF5OiBSYXRlTGltaXQub3B0aW9uYWwoKSxcbiAgc2V2ZW5fZGF5X29wdXM6IFJhdGVMaW1pdC5vcHRpb25hbCgpLFxuICBzZXZlbl9kYXlfc29ubmV0OiBSYXRlTGltaXQub3B0aW9uYWwoKSxcbiAgc2V2ZW5fZGF5X29hdXRoX2FwcHM6IFJhdGVMaW1pdC5vcHRpb25hbCgpLFxuICBzZXZlbl9kYXlfY293b3JrOiBSYXRlTGltaXQub3B0aW9uYWwoKSxcbiAgZXh0cmFfdXNhZ2U6IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIGlzX2VuYWJsZWQ6IHouYm9vbGVhbigpLFxuICAgICAgbW9udGhseV9saW1pdDogei5udW1iZXIoKS5udWxsYWJsZSgpLFxuICAgICAgdXNlZF9jcmVkaXRzOiB6Lm51bWJlcigpLm51bGxhYmxlKCksXG4gICAgICB1dGlsaXphdGlvbjogei5udW1iZXIoKS5udWxsYWJsZSgpLFxuICAgIH0pXG4gICAgLm51bGxhYmxlKClcbiAgICAub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgVXNhZ2VSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIFVzYWdlUmVzcG9uc2U+O1xuXG4vLyDilIDilIDilIAgSGVhbHRoIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgSGVhbHRoUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5zdHJpbmcoKSxcbiAgd29ya2Vyczogei5udW1iZXIoKSxcbiAgYWN0aXZlVG9rZW5zOiB6Lm51bWJlcigpLFxufSk7XG5leHBvcnQgdHlwZSBIZWFsdGhSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIEhlYWx0aFJlc3BvbnNlPjtcblxuLy8g4pSA4pSA4pSAIEVycm9ycyDilIDilIDilIBcblxuZXhwb3J0IGNsYXNzIFF1b3RhRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlFVT1RBX0VYSEFVU1RFRFwiIGFzIGNvbnN0O1xufVxuZXhwb3J0IGNsYXNzIFRpbWVvdXRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgY29kZSA9IFwiVElNRU9VVFwiIGFzIGNvbnN0O1xufVxuZXhwb3J0IGNsYXNzIFByb2Nlc3NFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgY29kZSA9IFwiUFJPQ0VTU19FUlJPUlwiIGFzIGNvbnN0O1xufVxuXG4vLyDilIDilIDilIAgVXRpbHMg4pSA4pSA4pSAXG5cbmV4cG9ydCBmdW5jdGlvbiBtYXNrVG9rZW4odG9rZW46IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0b2tlbi5sZW5ndGggPiA0ID8gYC4uLiR7dG9rZW4uc2xpY2UoLTQpfWAgOiB0b2tlbjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsTUFBYSxhQUFhLEVBQUUsT0FBTztDQUNqQyxRQUFRLEVBQUUsUUFBUSxDQUFDLFVBQVU7Q0FDN0IsUUFBUSxFQUFFLFFBQVE7Q0FDbEIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQy9CLENBQUM7QUFHRixNQUFhLFlBQVksRUFBRSxPQUFPO0NBQ2hDLE1BQU0sRUFBRSxRQUFRO0NBQ2hCLE9BQU8sRUFBRSxPQUFPO0VBQ2QsY0FBYyxFQUFFLFFBQVE7RUFDeEIsZUFBZSxFQUFFLFFBQVE7RUFDekIsNkJBQTZCLEVBQUUsUUFBUTtFQUN2Qyx5QkFBeUIsRUFBRSxRQUFRO0VBQ3BDLENBQUM7Q0FDRixZQUFZLEVBQUUsUUFBUTtDQUN0QixTQUFTLEVBQUUsUUFBUTtDQUNwQixDQUFDO0FBS0YsTUFBYSxhQUFhLEVBQUUsT0FBTztDQUNqQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU87RUFBRSxPQUFPLEVBQUUsUUFBUTtFQUFFLE1BQU0sRUFBRSxRQUFRO0VBQUUsQ0FBQyxDQUFDO0NBQ2xFLE1BQU0sRUFBRSxRQUFRLENBQUMsVUFBVTtDQUMzQixPQUFPLEVBQUUsUUFBUSxDQUFDLFVBQVU7Q0FDNUIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQzlCLEtBQUssRUFBRSxRQUFRLENBQUMsVUFBVTtDQUMxQixVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVU7Q0FDaEMsQ0FBQztBQUtGLE1BQWEsZ0JBQWdCLEVBQUUsT0FBTztDQUNwQyxPQUFPLEVBQUUsUUFBUTtDQUNqQixNQUFNLEVBQUUsUUFBUTtDQUNqQixDQUFDO0FBR0YsTUFBYSxtQkFBbUIsRUFBRSxPQUFPLEVBQ3ZDLE9BQU8sRUFBRSxRQUFRLEVBQ2xCLENBQUM7QUFHRixNQUFhLGFBQWEsRUFBRSxPQUFPO0NBQ2pDLE9BQU8sRUFBRSxRQUFRO0NBQ2pCLE1BQU0sRUFBRSxRQUFRO0NBQ2hCLFVBQVUsRUFBRSxRQUFRO0NBQ3BCLFFBQVEsRUFBRSxTQUFTO0NBQ3BCLENBQUM7QUFLRixNQUFhLG1CQUFtQixFQUFFLE9BQU8sRUFDdkMsU0FBUyxFQUFFLFFBQVEsRUFDcEIsQ0FBQztBQUdGLE1BQU0sWUFBWSxFQUNmLE9BQU87Q0FDTixhQUFhLEVBQUUsUUFBUSxDQUFDLFVBQVU7Q0FDbEMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQ2pDLENBQUMsQ0FDRCxVQUFVO0FBRWIsTUFBYSxnQkFBZ0IsRUFBRSxPQUFPO0NBQ3BDLE9BQU8sRUFBRSxRQUFRLENBQUMsVUFBVTtDQUM1QixXQUFXLFVBQVUsVUFBVTtDQUMvQixXQUFXLFVBQVUsVUFBVTtDQUMvQixnQkFBZ0IsVUFBVSxVQUFVO0NBQ3BDLGtCQUFrQixVQUFVLFVBQVU7Q0FDdEMsc0JBQXNCLFVBQVUsVUFBVTtDQUMxQyxrQkFBa0IsVUFBVSxVQUFVO0NBQ3RDLGFBQWEsRUFDVixPQUFPO0VBQ04sWUFBWSxFQUFFLFNBQVM7RUFDdkIsZUFBZSxFQUFFLFFBQVEsQ0FBQyxVQUFVO0VBQ3BDLGNBQWMsRUFBRSxRQUFRLENBQUMsVUFBVTtFQUNuQyxhQUFhLEVBQUUsUUFBUSxDQUFDLFVBQVU7RUFDbkMsQ0FBQyxDQUNELFVBQVUsQ0FDVixVQUFVO0NBQ2QsQ0FBQztBQUtGLE1BQWEsaUJBQWlCLEVBQUUsT0FBTztDQUNyQyxRQUFRLEVBQUUsUUFBUTtDQUNsQixTQUFTLEVBQUUsUUFBUTtDQUNuQixjQUFjLEVBQUUsUUFBUTtDQUN6QixDQUFDO0FBS0YsSUFBYSxhQUFiLGNBQWdDLE1BQU07Q0FDcEMsT0FBZ0I7O0FBRWxCLElBQWEsZUFBYixjQUFrQyxNQUFNO0NBQ3RDLE9BQWdCOztBQUVsQixJQUFhLGVBQWIsY0FBa0MsTUFBTTtDQUN0QyxPQUFnQjs7QUFLbEIsU0FBZ0IsVUFBVSxPQUF1QjtBQUMvQyxRQUFPLE1BQU0sU0FBUyxJQUFJLE1BQU0sTUFBTSxNQUFNLEdBQUcsS0FBSyJ9
71
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQudHlwZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8vIOKUgOKUgOKUgCBRdWVyeSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IFF1ZXJ5SW5wdXQgPSB6Lm9iamVjdCh7XG4gIHN5c3RlbTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcm9tcHQ6IHouc3RyaW5nKCksXG4gIG1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRpbWVvdXQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUXVlcnlJbnB1dCA9IHouaW5mZXI8dHlwZW9mIFF1ZXJ5SW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgQ2xpUmVzdWx0ID0gei5vYmplY3Qoe1xuICB0ZXh0OiB6LnN0cmluZygpLFxuICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNhZ2U6IHoub2JqZWN0KHtcbiAgICBpbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgb3V0cHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICBjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgY2FjaGVfcmVhZF9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gIH0pLFxuICBkdXJhdGlvbk1zOiB6Lm51bWJlcigpLFxuICBjb3N0VXNkOiB6Lm51bWJlcigpLFxufSk7XG5leHBvcnQgdHlwZSBDbGlSZXN1bHQgPSB6LmluZmVyPHR5cGVvZiBDbGlSZXN1bHQ+O1xuXG4vLyDilIDilIDilIAgVG9rZW4gTWFuYWdlbWVudCDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IEFkZFRva2VuSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBuYW1lOiB6LnN0cmluZygpLFxufSk7XG5leHBvcnQgdHlwZSBBZGRUb2tlbklucHV0ID0gei5pbmZlcjx0eXBlb2YgQWRkVG9rZW5JbnB1dD47XG5cbmV4cG9ydCBjb25zdCBSZW1vdmVUb2tlbklucHV0ID0gei5vYmplY3Qoe1xuICB0b2tlbjogei5zdHJpbmcoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUmVtb3ZlVG9rZW5JbnB1dCA9IHouaW5mZXI8dHlwZW9mIFJlbW92ZVRva2VuSW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgVG9rZW5TdGF0cyA9IHoub2JqZWN0KHtcbiAgdG9rZW46IHouc3RyaW5nKCksXG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIHJlcXVlc3RzOiB6Lm51bWJlcigpLFxufSk7XG5leHBvcnQgdHlwZSBUb2tlblN0YXRzID0gei5pbmZlcjx0eXBlb2YgVG9rZW5TdGF0cz47XG5cbi8vIOKUgOKUgOKUgCBPQXV0aCDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IE9BdXRoU3RhcnRSZXN1bHQgPSB6Lm9iamVjdCh7XG4gIGF1dGhVcmw6IHouc3RyaW5nKCksXG59KTtcbmV4cG9ydCB0eXBlIE9BdXRoU3RhcnRSZXN1bHQgPSB6LmluZmVyPHR5cGVvZiBPQXV0aFN0YXJ0UmVzdWx0PjtcblxuY29uc3QgUmF0ZUxpbWl0ID0gelxuICAub2JqZWN0KHtcbiAgICB1dGlsaXphdGlvbjogei5udW1iZXIoKS5udWxsYWJsZSgpLFxuICAgIHJlc2V0c19hdDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICB9KVxuICAubnVsbGFibGUoKTtcblxuZXhwb3J0IGNvbnN0IFVzYWdlUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGZpdmVfaG91cjogUmF0ZUxpbWl0Lm9wdGlvbmFsKCksXG4gIHNldmVuX2RheTogUmF0ZUxpbWl0Lm9wdGlvbmFsKCksXG4gIHNldmVuX2RheV9vcHVzOiBSYXRlTGltaXQub3B0aW9uYWwoKSxcbiAgc2V2ZW5fZGF5X3Nvbm5ldDogUmF0ZUxpbWl0Lm9wdGlvbmFsKCksXG4gIHNldmVuX2RheV9vYXV0aF9hcHBzOiBSYXRlTGltaXQub3B0aW9uYWwoKSxcbiAgc2V2ZW5fZGF5X2Nvd29yazogUmF0ZUxpbWl0Lm9wdGlvbmFsKCksXG4gIGV4dHJhX3VzYWdlOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBpc19lbmFibGVkOiB6LmJvb2xlYW4oKSxcbiAgICAgIG1vbnRobHlfbGltaXQ6IHoubnVtYmVyKCkubnVsbGFibGUoKSxcbiAgICAgIHVzZWRfY3JlZGl0czogei5udW1iZXIoKS5udWxsYWJsZSgpLFxuICAgICAgdXRpbGl6YXRpb246IHoubnVtYmVyKCkubnVsbGFibGUoKSxcbiAgICB9KVxuICAgIC5udWxsYWJsZSgpXG4gICAgLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFVzYWdlUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBVc2FnZVJlc3BvbnNlPjtcblxuLy8g4pSA4pSA4pSAIEhlYWx0aCDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IEhlYWx0aFJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHouc3RyaW5nKCksXG4gIGFjdGl2ZVRva2Vuczogei5udW1iZXIoKSxcbn0pO1xuZXhwb3J0IHR5cGUgSGVhbHRoUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBIZWFsdGhSZXNwb25zZT47XG5cbi8vIOKUgOKUgOKUgCBFcnJvcnMg4pSA4pSA4pSAXG5cbmV4cG9ydCBjbGFzcyBRdW90YUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlID0gXCJRVU9UQV9FWEhBVVNURURcIiBhcyBjb25zdDtcbn1cbmV4cG9ydCBjbGFzcyBUaW1lb3V0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlRJTUVPVVRcIiBhcyBjb25zdDtcbn1cbmV4cG9ydCBjbGFzcyBQcm9jZXNzRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlBST0NFU1NfRVJST1JcIiBhcyBjb25zdDtcbn1cblxuLy8g4pSA4pSA4pSAIFV0aWxzIOKUgOKUgOKUgFxuXG5leHBvcnQgZnVuY3Rpb24gbWFza1Rva2VuKHRva2VuOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9rZW4ubGVuZ3RoID4gNCA/IGAuLi4ke3Rva2VuLnNsaWNlKC00KX1gIDogdG9rZW47XG59XG4iXSwibWFwcGluZ3MiOiI7OztBQUlBLE1BQWEsYUFBYSxFQUFFLE9BQU87Q0FDakMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQzdCLFFBQVEsRUFBRSxRQUFRO0NBQ2xCLE9BQU8sRUFBRSxRQUFRLENBQUMsVUFBVTtDQUM1QixTQUFTLEVBQUUsUUFBUSxDQUFDLFVBQVU7Q0FDL0IsQ0FBQztBQUdGLE1BQWEsWUFBWSxFQUFFLE9BQU87Q0FDaEMsTUFBTSxFQUFFLFFBQVE7Q0FDaEIsV0FBVyxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQ2hDLE9BQU8sRUFBRSxPQUFPO0VBQ2QsY0FBYyxFQUFFLFFBQVE7RUFDeEIsZUFBZSxFQUFFLFFBQVE7RUFDekIsNkJBQTZCLEVBQUUsUUFBUTtFQUN2Qyx5QkFBeUIsRUFBRSxRQUFRO0VBQ3BDLENBQUM7Q0FDRixZQUFZLEVBQUUsUUFBUTtDQUN0QixTQUFTLEVBQUUsUUFBUTtDQUNwQixDQUFDO0FBS0YsTUFBYSxnQkFBZ0IsRUFBRSxPQUFPO0NBQ3BDLE9BQU8sRUFBRSxRQUFRO0NBQ2pCLE1BQU0sRUFBRSxRQUFRO0NBQ2pCLENBQUM7QUFHRixNQUFhLG1CQUFtQixFQUFFLE9BQU8sRUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFDbEIsQ0FBQztBQUdGLE1BQWEsYUFBYSxFQUFFLE9BQU87Q0FDakMsT0FBTyxFQUFFLFFBQVE7Q0FDakIsTUFBTSxFQUFFLFFBQVE7Q0FDaEIsVUFBVSxFQUFFLFFBQVE7Q0FDckIsQ0FBQztBQUtGLE1BQWEsbUJBQW1CLEVBQUUsT0FBTyxFQUN2QyxTQUFTLEVBQUUsUUFBUSxFQUNwQixDQUFDO0FBR0YsTUFBTSxZQUFZLEVBQ2YsT0FBTztDQUNOLGFBQWEsRUFBRSxRQUFRLENBQUMsVUFBVTtDQUNsQyxXQUFXLEVBQUUsUUFBUSxDQUFDLFVBQVU7Q0FDakMsQ0FBQyxDQUNELFVBQVU7QUFFYixNQUFhLGdCQUFnQixFQUFFLE9BQU87Q0FDcEMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxVQUFVO0NBQzVCLFdBQVcsVUFBVSxVQUFVO0NBQy9CLFdBQVcsVUFBVSxVQUFVO0NBQy9CLGdCQUFnQixVQUFVLFVBQVU7Q0FDcEMsa0JBQWtCLFVBQVUsVUFBVTtDQUN0QyxzQkFBc0IsVUFBVSxVQUFVO0NBQzFDLGtCQUFrQixVQUFVLFVBQVU7Q0FDdEMsYUFBYSxFQUNWLE9BQU87RUFDTixZQUFZLEVBQUUsU0FBUztFQUN2QixlQUFlLEVBQUUsUUFBUSxDQUFDLFVBQVU7RUFDcEMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxVQUFVO0VBQ25DLGFBQWEsRUFBRSxRQUFRLENBQUMsVUFBVTtFQUNuQyxDQUFDLENBQ0QsVUFBVSxDQUNWLFVBQVU7Q0FDZCxDQUFDO0FBS0YsTUFBYSxpQkFBaUIsRUFBRSxPQUFPO0NBQ3JDLFFBQVEsRUFBRSxRQUFRO0NBQ2xCLGNBQWMsRUFBRSxRQUFRO0NBQ3pCLENBQUM7QUFLRixJQUFhLGFBQWIsY0FBZ0MsTUFBTTtDQUNwQyxPQUFnQjs7QUFFbEIsSUFBYSxlQUFiLGNBQWtDLE1BQU07Q0FDdEMsT0FBZ0I7O0FBRWxCLElBQWEsZUFBYixjQUFrQyxNQUFNO0NBQ3RDLE9BQWdCOztBQUtsQixTQUFnQixVQUFVLE9BQXVCO0FBQy9DLFFBQU8sTUFBTSxTQUFTLElBQUksTUFBTSxNQUFNLE1BQU0sR0FBRyxLQUFLIn0=