@cartanova/qgrid-cli 2.6.6 → 2.6.8
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/monit/monit.frame.js +2 -2
- package/bundle/dist/application/qgrid/expired-token-reminder.js +37 -16
- package/bundle/dist/application/qgrid/oauth.js +1 -1
- package/bundle/dist/application/qgrid/qgrid.frame.js +3 -3
- package/bundle/dist/application/qgrid/slack-user-map.js +5 -14
- package/bundle/dist/application/qgrid/token-death.js +3 -2
- package/bundle/dist/application/qgrid/tool-emulation.js +1 -1
- package/bundle/dist/application/queries.generated.js +8 -2
- package/bundle/dist/application/request-log/request-log.model.js +2 -2
- package/bundle/dist/application/request-log-step/request-log-step.model.js +1 -1
- package/bundle/dist/application/setting/setting.model.js +236 -0
- package/bundle/dist/application/setting/setting.schema.js +157 -0
- package/bundle/dist/application/setting/setting.store.js +66 -0
- package/bundle/dist/application/setting/setting.types.js +48 -0
- package/bundle/dist/application/sonamu.generated.js +32 -2
- package/bundle/dist/application/sonamu.generated.sso.js +12 -2
- package/bundle/dist/application/token/token.model.js +1 -1
- package/bundle/dist/i18n/en.js +3 -1
- package/bundle/dist/i18n/ko.js +3 -1
- package/bundle/dist/i18n/sd.generated.js +9 -1
- package/bundle/dist/migrations/20260808194708_create__settings.js +24 -0
- package/bundle/dist/sonamu.config.js +8 -2
- package/bundle/dist/utils/providers/openai/openai-worker-pool-config.js +21 -6
- package/bundle/dist/utils/quiet-hours.js +43 -0
- package/bundle/dist/utils/slack-notify.js +12 -5
- package/bundle/src/application/qgrid/expired-token-reminder.test.ts +135 -13
- package/bundle/src/application/qgrid/expired-token-reminder.ts +60 -21
- package/bundle/src/application/qgrid/slack-user-map.test.ts +23 -0
- package/bundle/src/application/qgrid/slack-user-map.ts +4 -14
- package/bundle/src/application/qgrid/token-death.ts +2 -0
- package/bundle/src/application/queries.generated.ts +21 -1
- package/bundle/src/application/setting/setting.entity.json +59 -0
- package/bundle/src/application/setting/setting.model.ts +263 -0
- package/bundle/src/application/setting/setting.schema.test.ts +80 -0
- package/bundle/src/application/setting/setting.schema.ts +174 -0
- package/bundle/src/application/setting/setting.store.test.ts +87 -0
- package/bundle/src/application/setting/setting.store.ts +85 -0
- package/bundle/src/application/setting/setting.types.ts +51 -0
- package/bundle/src/application/sonamu.generated.http +47 -0
- package/bundle/src/application/sonamu.generated.sso.ts +21 -0
- package/bundle/src/application/sonamu.generated.ts +51 -0
- package/bundle/src/i18n/en.ts +2 -0
- package/bundle/src/i18n/ko.ts +2 -0
- package/bundle/src/i18n/sd.generated.ts +8 -0
- package/bundle/src/migrations/20260808194708_create__settings.ts +19 -0
- package/bundle/src/sonamu.config.ts +10 -0
- package/bundle/src/utils/providers/openai/openai-dispatcher.test.ts +12 -0
- package/bundle/src/utils/providers/openai/openai-worker-pool-config.ts +43 -5
- package/bundle/src/utils/quiet-hours.ts +40 -0
- package/bundle/src/utils/slack-notify.test.ts +88 -20
- package/bundle/src/utils/slack-notify.ts +24 -4
- package/bundle/web-dist/client/assets/index-7SZyiqAx.css +1 -0
- package/bundle/web-dist/client/assets/index-DrsXE13r.js +78 -0
- package/bundle/web-dist/client/assets/{logs-CvmI4KuC.js → logs-e4-6aYnO.js} +1 -1
- package/bundle/web-dist/client/assets/{monit-CUueNzoL.js → monit-eOAlYTK9.js} +1 -1
- package/bundle/web-dist/client/assets/plus-p4vtg6LN.js +1 -0
- package/bundle/web-dist/client/assets/{routes-CAfjRsMY.js → routes-Qie4ogtJ.js} +2 -2
- package/bundle/web-dist/client/assets/{sd.generated-DYdwSB2I.js → sd.generated-Bwa7rses.js} +1 -1
- package/bundle/web-dist/client/assets/services.generated-T4ctVcia.js +1 -0
- package/bundle/web-dist/client/assets/settings-CTVZpAAg.js +1 -0
- package/bundle/web-dist/client/assets/{show-C5vKpp5z.js → show-60iOOM-e.js} +1 -1
- package/bundle/web-dist/client/assets/tokens-DdDccGlX.js +1 -0
- package/bundle/web-dist/client/assets/{use-oauth-login-flow-B3o4CXDW.js → use-oauth-login-flow-0ZGq74bZ.js} +1 -1
- package/bundle/web-dist/client/index.html +3 -3
- package/bundle/web-dist/server/assets/{lazyRouteComponent-BaZaveNc.js → lazyRouteComponent-Ws7I6fL-.js} +2 -1
- package/bundle/web-dist/server/assets/{logs-DMOw3SjD.js → logs-DmkzGxGU.js} +4 -4
- package/bundle/web-dist/server/assets/{monit-UmcqHroX.js → monit-DyKLJX4s.js} +3 -2
- package/bundle/web-dist/server/assets/plus-BISXNqRU.js +19 -0
- package/bundle/web-dist/server/assets/react-dom-D7duWOwf.js +462 -0
- package/bundle/web-dist/server/assets/{routes-BfoQmYud.js → routes-g62E9xmC.js} +5 -4
- package/bundle/web-dist/server/assets/{sd.generated-B0xqnHEo.js → sd.generated-LO-h1_16.js} +13 -461
- package/bundle/web-dist/server/assets/{services.generated-DqAKskAS.js → services.generated-DADr9OGH.js} +111 -2
- package/bundle/web-dist/server/assets/settings-CMJKayff.js +332 -0
- package/bundle/web-dist/server/assets/{show-C-oSdzHX.js → show-BGAiCPGq.js} +4 -4
- package/bundle/web-dist/server/assets/{tokens-Dkd_uXEk.js → tokens-DmhIfVct.js} +6 -21
- package/bundle/web-dist/server/assets/{use-oauth-login-flow-YM1nsd-H.js → use-oauth-login-flow-B6MY65IN.js} +2 -2
- package/bundle/web-dist/server/entry-server.generated.js +54 -18
- package/package.json +1 -1
- package/skills/qgrid/references/cli-env-and-server-boot.md +14 -2
- package/skills/qgrid/references/openai-codex-runtime.md +1 -1
- package/skills/qgrid/references/sonamu-api-web-flow.md +2 -0
- package/skills/qgrid/references/token-auth-quota-lifecycle.md +2 -1
- package/bundle/web-dist/client/assets/index-B4GlN1IX.css +0 -1
- package/bundle/web-dist/client/assets/index-qs8K8bOv.js +0 -78
- package/bundle/web-dist/client/assets/services.generated-BsAvotjG.js +0 -1
- package/bundle/web-dist/client/assets/tokens-C9KKP2Yq.js +0 -1
- /package/bundle/web-dist/server/assets/{cost-CSH_t17I.js → cost-DzjfVtUr.js} +0 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
//#region src/application/setting/setting.schema.ts
|
|
2
|
+
/** 64 GiB 운영 호스트에서 세 자리 오입력을 막는 설정 상한. 안전을 보장하는 값은 아니다. */
|
|
3
|
+
const MAX_OPENAI_ESTIMATED_RSS_GIB = 32;
|
|
4
|
+
const MAX_OPENAI_MIN_HOST_AVAILABLE_GIB = 64;
|
|
5
|
+
const SETTING_DEFS = [
|
|
6
|
+
{
|
|
7
|
+
key: "openai.autoscale",
|
|
8
|
+
fallback: "true",
|
|
9
|
+
group: "openai",
|
|
10
|
+
envKey: "QGRID_OPENAI_AUTOSCALE",
|
|
11
|
+
label: "OpenAI 워커 오토스케일",
|
|
12
|
+
kind: "boolean",
|
|
13
|
+
applies: "restart",
|
|
14
|
+
help: "끄면 워커 수가 최소값으로 고정됩니다"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
key: "openai.minWorkersPerToken",
|
|
18
|
+
fallback: "1",
|
|
19
|
+
group: "openai",
|
|
20
|
+
envKey: "QGRID_OPENAI_MIN_WORKERS_PER_TOKEN",
|
|
21
|
+
label: "토큰당 최소 워커",
|
|
22
|
+
kind: "integer",
|
|
23
|
+
applies: "restart",
|
|
24
|
+
min: 1,
|
|
25
|
+
max: 20
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
key: "openai.maxWorkersPerToken",
|
|
29
|
+
fallback: "3",
|
|
30
|
+
group: "openai",
|
|
31
|
+
envKey: "QGRID_OPENAI_MAX_WORKERS_PER_TOKEN",
|
|
32
|
+
label: "토큰당 최대 워커",
|
|
33
|
+
kind: "integer",
|
|
34
|
+
applies: "restart",
|
|
35
|
+
min: 1,
|
|
36
|
+
max: 20,
|
|
37
|
+
help: "오토스케일이 꺼져 있으면 무시됩니다"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
key: "openai.maxEstimatedRssGiB",
|
|
41
|
+
fallback: "16",
|
|
42
|
+
group: "openai",
|
|
43
|
+
envKey: "QGRID_OPENAI_MAX_ESTIMATED_RSS_GIB",
|
|
44
|
+
label: "워커 메모리 상한 (GiB)",
|
|
45
|
+
kind: "number",
|
|
46
|
+
applies: "restart",
|
|
47
|
+
min: 1,
|
|
48
|
+
max: 32,
|
|
49
|
+
help: "이 추정치를 넘기면 워커를 더 늘리지 않습니다. 올릴수록 OOM 위험이 커지며 상한은 오입력 방지용입니다"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
key: "openai.minHostAvailableGiB",
|
|
53
|
+
fallback: "20",
|
|
54
|
+
group: "openai",
|
|
55
|
+
envKey: "QGRID_OPENAI_MIN_HOST_AVAILABLE_GIB",
|
|
56
|
+
label: "호스트 여유 메모리 하한 (GiB)",
|
|
57
|
+
kind: "number",
|
|
58
|
+
applies: "restart",
|
|
59
|
+
min: 0,
|
|
60
|
+
max: 64,
|
|
61
|
+
help: "호스트 여유가 이 값 아래면 스케일업을 멈춥니다. 확장을 끄려면 오토스케일을 끄세요"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
key: "slack.expiryReminderMinutes",
|
|
65
|
+
fallback: "0",
|
|
66
|
+
group: "slack",
|
|
67
|
+
envKey: "SLACK_EXPIRY_REMINDER_INTERVAL_MINUTES",
|
|
68
|
+
label: "만료 알림 반복 주기 (분)",
|
|
69
|
+
kind: "integer",
|
|
70
|
+
applies: "immediate",
|
|
71
|
+
min: 0,
|
|
72
|
+
max: 1440,
|
|
73
|
+
help: "0 이면 반복 알림을 끕니다"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
key: "slack.channelId",
|
|
77
|
+
fallback: "",
|
|
78
|
+
group: "slack",
|
|
79
|
+
envKey: "SLACK_CHANNEL_ID",
|
|
80
|
+
label: "Slack 채널 ID",
|
|
81
|
+
kind: "string",
|
|
82
|
+
applies: "immediate",
|
|
83
|
+
help: "사용자 ID(U...)를 넣으면 그 사람 DM 으로 갑니다"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
key: "slack.userMap",
|
|
87
|
+
fallback: "",
|
|
88
|
+
group: "slack",
|
|
89
|
+
envKey: "SLACK_USER_MAP",
|
|
90
|
+
label: "Slack 사용자 매핑",
|
|
91
|
+
kind: "string",
|
|
92
|
+
applies: "immediate",
|
|
93
|
+
help: "토큰명:SlackUserId 를 쉼표로. 공용 계정은 넣지 않습니다"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
key: "slack.botToken",
|
|
97
|
+
fallback: "",
|
|
98
|
+
group: "slack",
|
|
99
|
+
envKey: "SLACK_BOT_TOKEN",
|
|
100
|
+
label: "Slack 봇 토큰",
|
|
101
|
+
kind: "secret",
|
|
102
|
+
applies: "immediate"
|
|
103
|
+
}
|
|
104
|
+
];
|
|
105
|
+
function findSettingDef(key) {
|
|
106
|
+
return SETTING_DEFS.find((d) => d.key === key);
|
|
107
|
+
}
|
|
108
|
+
/** 저장 전 검증. 잘못된 값이 들어가면 런타임에서 조용히 기본값으로 떨어져 원인을 찾기 어렵다. */
|
|
109
|
+
function validateSettingValue(def, raw) {
|
|
110
|
+
const trimmed = raw.trim();
|
|
111
|
+
if (def.kind === "boolean") {
|
|
112
|
+
if (!["true", "false"].includes(trimmed)) return {
|
|
113
|
+
ok: false,
|
|
114
|
+
error: "true 또는 false"
|
|
115
|
+
};
|
|
116
|
+
return {
|
|
117
|
+
ok: true,
|
|
118
|
+
value: trimmed
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
if (def.kind === "integer" || def.kind === "number") {
|
|
122
|
+
const parsed = Number(trimmed);
|
|
123
|
+
if (!Number.isFinite(parsed)) return {
|
|
124
|
+
ok: false,
|
|
125
|
+
error: "숫자를 입력하세요"
|
|
126
|
+
};
|
|
127
|
+
if (def.kind === "integer" && !Number.isInteger(parsed)) return {
|
|
128
|
+
ok: false,
|
|
129
|
+
error: "정수를 입력하세요"
|
|
130
|
+
};
|
|
131
|
+
if (def.min !== void 0 && parsed < def.min) return {
|
|
132
|
+
ok: false,
|
|
133
|
+
error: `${def.min} 이상이어야 합니다`
|
|
134
|
+
};
|
|
135
|
+
if (def.max !== void 0 && parsed > def.max) return {
|
|
136
|
+
ok: false,
|
|
137
|
+
error: `${def.max} 이하여야 합니다`
|
|
138
|
+
};
|
|
139
|
+
return {
|
|
140
|
+
ok: true,
|
|
141
|
+
value: String(parsed)
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
ok: true,
|
|
146
|
+
value: trimmed
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/** 화면에 그대로 내려보내면 안 되는 값. 앞뒤만 남긴다. */
|
|
150
|
+
function maskSecret(value) {
|
|
151
|
+
if (value.length <= 12) return "***";
|
|
152
|
+
return `${value.slice(0, 8)}...${value.slice(-4)}`;
|
|
153
|
+
}
|
|
154
|
+
//#endregion
|
|
155
|
+
export { MAX_OPENAI_ESTIMATED_RSS_GIB, MAX_OPENAI_MIN_HOST_AVAILABLE_GIB, SETTING_DEFS, findSettingDef, maskSecret, validateSettingValue };
|
|
156
|
+
|
|
157
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy5zY2hlbWEuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3NldHRpbmcvc2V0dGluZy5zY2hlbWEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDqtIDrpqwg6rCA64ql7ZWcIOufsO2DgOyehCDshKTsoJUg66qp66GdLlxuICpcbiAqIO2CpMK3ZW52IOydtOumhMK37YOA7J6FwrfqsoDspp3snYQg7ZWcIOqzs+yXkCDrqqjslYQgQVBJIOyZgCBVSSDqsIAg6rCZ7J2AIOygleydmOulvCDrs7jri6QuIOyXrOq4sCDsl4bripQgZW52IOuKlFxuICog7ZmU66m07JeQ7IScIOuwlOq/gCDsiJgg7JeG64ukIOKAlCBEQiDsoJHsho0g7KCV67O064KYIO2PrO2KuOyymOufvCDshJzrsoTqsIAg65yo6riwIOyghOyXkCDtlYTsmpTtlZwg6rCS65Ok7J2064ukLlxuICovXG5cbmV4cG9ydCB0eXBlIFNldHRpbmdLaW5kID0gXCJib29sZWFuXCIgfCBcImludGVnZXJcIiB8IFwibnVtYmVyXCIgfCBcInN0cmluZ1wiIHwgXCJzZWNyZXRcIjtcblxuLyoqIO2ZlOuptOyXkOyEnCDrrLbslrQg67O07Jes7KSEIOuLqOychC4gOeqwnOulvCDtj4ntj4ntlZjqsowg64KY7Je07ZWY66m0IOyWtOuUlOulvCDrtJDslbwg7ZWg7KeAIOyVjCDsiJgg7JeG64ukLiAqL1xuZXhwb3J0IHR5cGUgU2V0dGluZ0dyb3VwID0gXCJvcGVuYWlcIiB8IFwic2xhY2tcIjtcblxuZXhwb3J0IHR5cGUgU2V0dGluZ0RlZiA9IHtcbiAga2V5OiBzdHJpbmc7XG4gIGdyb3VwOiBTZXR0aW5nR3JvdXA7XG4gIGVudktleTogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBraW5kOiBTZXR0aW5nS2luZDtcbiAgLyoqIOyggeyaqSDsi5zsoJAuIOybjOy7pCDshKTsoJXsnYAgZGlzcGF0Y2hlciDsg53shLHsnpDsl5DshJwg7ZWcIOuyiOunjCDsnb3tmIAg7J6s7Iuc7J6R7J20IO2VhOyalO2VmOuLpC4gKi9cbiAgYXBwbGllczogXCJpbW1lZGlhdGVcIiB8IFwicmVzdGFydFwiO1xuICBtaW4/OiBudW1iZXI7XG4gIG1heD86IG51bWJlcjtcbiAgLyoqXG4gICAqIOyggOyepeqwkuuPhCBlbnYg64+EIOyXhuydhCDrlYwg7Iuk7KCc66GcIOyggeyaqeuQmOuKlCDqsJIuIO2ZlOuptOydhCDruYTsm4zrkZDrqbQgXCLshKTsoJUg7JWIIOuQqFwi7Jy866GcIOydve2eiOyngOunjFxuICAgKiDsi6TsoJzroZzripQg7J20IOqwkuydtCDrj4zqs6Ag7J6I64ukIOKAlCDshozruYTsspjsnZgg6riw67O46rCS6rO8IOuwmOuTnOyLnCDqsJnslYTslbwg7ZWc64ukLlxuICAgKi9cbiAgZmFsbGJhY2s6IHN0cmluZztcbiAgaGVscD86IHN0cmluZztcbn07XG5cbi8qKiA2NCBHaUIg7Jq07JiBIO2YuOyKpO2KuOyXkOyEnCDshLgg7J6Q66asIOyYpOyeheugpeydhCDrp4nripQg7ISk7KCVIOyDge2VnC4g7JWI7KCE7J2EIOuztOyepe2VmOuKlCDqsJLsnYAg7JWE64uI64ukLiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9PUEVOQUlfRVNUSU1BVEVEX1JTU19HSUIgPSAzMjtcbmV4cG9ydCBjb25zdCBNQVhfT1BFTkFJX01JTl9IT1NUX0FWQUlMQUJMRV9HSUIgPSA2NDtcblxuZXhwb3J0IGNvbnN0IFNFVFRJTkdfREVGUzogU2V0dGluZ0RlZltdID0gW1xuICB7XG4gICAga2V5OiBcIm9wZW5haS5hdXRvc2NhbGVcIixcbiAgICBmYWxsYmFjazogXCJ0cnVlXCIsXG4gICAgZ3JvdXA6IFwib3BlbmFpXCIsXG4gICAgZW52S2V5OiBcIlFHUklEX09QRU5BSV9BVVRPU0NBTEVcIixcbiAgICBsYWJlbDogXCJPcGVuQUkg7JuM7LukIOyYpO2GoOyKpOy8gOydvFwiLFxuICAgIGtpbmQ6IFwiYm9vbGVhblwiLFxuICAgIGFwcGxpZXM6IFwicmVzdGFydFwiLFxuICAgIGhlbHA6IFwi64GE66m0IOybjOy7pCDsiJjqsIAg7LWc7IaM6rCS7Jy866GcIOqzoOygleuQqeuLiOuLpFwiLFxuICB9LFxuICB7XG4gICAga2V5OiBcIm9wZW5haS5taW5Xb3JrZXJzUGVyVG9rZW5cIixcbiAgICBmYWxsYmFjazogXCIxXCIsXG4gICAgZ3JvdXA6IFwib3BlbmFpXCIsXG4gICAgZW52S2V5OiBcIlFHUklEX09QRU5BSV9NSU5fV09SS0VSU19QRVJfVE9LRU5cIixcbiAgICBsYWJlbDogXCLthqDtgbDri7kg7LWc7IaMIOybjOy7pFwiLFxuICAgIGtpbmQ6IFwiaW50ZWdlclwiLFxuICAgIGFwcGxpZXM6IFwicmVzdGFydFwiLFxuICAgIG1pbjogMSxcbiAgICBtYXg6IDIwLFxuICB9LFxuICB7XG4gICAga2V5OiBcIm9wZW5haS5tYXhXb3JrZXJzUGVyVG9rZW5cIixcbiAgICBmYWxsYmFjazogXCIzXCIsXG4gICAgZ3JvdXA6IFwib3BlbmFpXCIsXG4gICAgZW52S2V5OiBcIlFHUklEX09QRU5BSV9NQVhfV09SS0VSU19QRVJfVE9LRU5cIixcbiAgICBsYWJlbDogXCLthqDtgbDri7kg7LWc64yAIOybjOy7pFwiLFxuICAgIGtpbmQ6IFwiaW50ZWdlclwiLFxuICAgIGFwcGxpZXM6IFwicmVzdGFydFwiLFxuICAgIG1pbjogMSxcbiAgICBtYXg6IDIwLFxuICAgIGhlbHA6IFwi7Jik7Yag7Iqk7LyA7J287J20IOq6vOyguCDsnojsnLzrqbQg66y07Iuc65Cp64uI64ukXCIsXG4gIH0sXG4gIHtcbiAgICBrZXk6IFwib3BlbmFpLm1heEVzdGltYXRlZFJzc0dpQlwiLFxuICAgIGZhbGxiYWNrOiBcIjE2XCIsXG4gICAgZ3JvdXA6IFwib3BlbmFpXCIsXG4gICAgZW52S2V5OiBcIlFHUklEX09QRU5BSV9NQVhfRVNUSU1BVEVEX1JTU19HSUJcIixcbiAgICBsYWJlbDogXCLsm4zsu6Qg66mU66qo66asIOyDge2VnCAoR2lCKVwiLFxuICAgIGtpbmQ6IFwibnVtYmVyXCIsXG4gICAgYXBwbGllczogXCJyZXN0YXJ0XCIsXG4gICAgbWluOiAxLFxuICAgIG1heDogTUFYX09QRU5BSV9FU1RJTUFURURfUlNTX0dJQixcbiAgICBoZWxwOiBcIuydtCDstpTsoJXsuZjrpbwg64SY6riw66m0IOybjOy7pOulvCDrjZQg64qY66as7KeAIOyViuyKteuLiOuLpC4g7Jis66a07IiY66GdIE9PTSDsnITtl5jsnbQg7Luk7KeA66mwIOyDge2VnOydgCDsmKTsnoXroKUg67Cp7KeA7Jqp7J6F64uI64ukXCIsXG4gIH0sXG4gIHtcbiAgICBrZXk6IFwib3BlbmFpLm1pbkhvc3RBdmFpbGFibGVHaUJcIixcbiAgICBmYWxsYmFjazogXCIyMFwiLFxuICAgIGdyb3VwOiBcIm9wZW5haVwiLFxuICAgIGVudktleTogXCJRR1JJRF9PUEVOQUlfTUlOX0hPU1RfQVZBSUxBQkxFX0dJQlwiLFxuICAgIGxhYmVsOiBcIu2YuOyKpO2KuCDsl6zsnKAg66mU66qo66asIO2VmO2VnCAoR2lCKVwiLFxuICAgIGtpbmQ6IFwibnVtYmVyXCIsXG4gICAgYXBwbGllczogXCJyZXN0YXJ0XCIsXG4gICAgbWluOiAwLFxuICAgIG1heDogTUFYX09QRU5BSV9NSU5fSE9TVF9BVkFJTEFCTEVfR0lCLFxuICAgIGhlbHA6IFwi7Zi47Iqk7Yq4IOyXrOycoOqwgCDsnbQg6rCSIOyVhOuemOuptCDsiqTsvIDsnbzsl4XsnYQg66mI7Lal64uI64ukLiDtmZXsnqXsnYQg64GE66Ck66m0IOyYpO2GoOyKpOy8gOydvOydhCDrgYTshLjsmpRcIixcbiAgfSxcbiAge1xuICAgIGtleTogXCJzbGFjay5leHBpcnlSZW1pbmRlck1pbnV0ZXNcIixcbiAgICBmYWxsYmFjazogXCIwXCIsXG4gICAgZ3JvdXA6IFwic2xhY2tcIixcbiAgICBlbnZLZXk6IFwiU0xBQ0tfRVhQSVJZX1JFTUlOREVSX0lOVEVSVkFMX01JTlVURVNcIixcbiAgICBsYWJlbDogXCLrp4zro4wg7JWM66a8IOuwmOuztSDso7zquLAgKOu2hClcIixcbiAgICBraW5kOiBcImludGVnZXJcIixcbiAgICBhcHBsaWVzOiBcImltbWVkaWF0ZVwiLFxuICAgIG1pbjogMCxcbiAgICBtYXg6IDE0NDAsXG4gICAgaGVscDogXCIwIOydtOuptCDrsJjrs7Ug7JWM66a87J2EIOuBleuLiOuLpFwiLFxuICB9LFxuICB7XG4gICAga2V5OiBcInNsYWNrLmNoYW5uZWxJZFwiLFxuICAgIGZhbGxiYWNrOiBcIlwiLFxuICAgIGdyb3VwOiBcInNsYWNrXCIsXG4gICAgZW52S2V5OiBcIlNMQUNLX0NIQU5ORUxfSURcIixcbiAgICBsYWJlbDogXCJTbGFjayDssYTrhJAgSURcIixcbiAgICBraW5kOiBcInN0cmluZ1wiLFxuICAgIGFwcGxpZXM6IFwiaW1tZWRpYXRlXCIsXG4gICAgaGVscDogXCLsgqzsmqnsnpAgSUQoVS4uLinrpbwg64Sj7Jy866m0IOq3uCDsgqzrnowgRE0g7Jy866GcIOqwkeuLiOuLpFwiLFxuICB9LFxuICB7XG4gICAga2V5OiBcInNsYWNrLnVzZXJNYXBcIixcbiAgICBmYWxsYmFjazogXCJcIixcbiAgICBncm91cDogXCJzbGFja1wiLFxuICAgIGVudktleTogXCJTTEFDS19VU0VSX01BUFwiLFxuICAgIGxhYmVsOiBcIlNsYWNrIOyCrOyaqeyekCDrp6TtlZFcIixcbiAgICBraW5kOiBcInN0cmluZ1wiLFxuICAgIGFwcGxpZXM6IFwiaW1tZWRpYXRlXCIsXG4gICAgaGVscDogXCLthqDtgbDrqoU6U2xhY2tVc2VySWQg66W8IOyJvO2RnOuhnC4g6rO17JqpIOqzhOygleydgCDrhKPsp4Ag7JWK7Iq164uI64ukXCIsXG4gIH0sXG4gIHtcbiAgICBrZXk6IFwic2xhY2suYm90VG9rZW5cIixcbiAgICBmYWxsYmFjazogXCJcIixcbiAgICBncm91cDogXCJzbGFja1wiLFxuICAgIGVudktleTogXCJTTEFDS19CT1RfVE9LRU5cIixcbiAgICBsYWJlbDogXCJTbGFjayDrtIcg7Yag7YGwXCIsXG4gICAga2luZDogXCJzZWNyZXRcIixcbiAgICBhcHBsaWVzOiBcImltbWVkaWF0ZVwiLFxuICB9LFxuXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRTZXR0aW5nRGVmKGtleTogc3RyaW5nKTogU2V0dGluZ0RlZiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBTRVRUSU5HX0RFRlMuZmluZCgoZCkgPT4gZC5rZXkgPT09IGtleSk7XG59XG5cbi8qKiDsoIDsnqUg7KCEIOqygOymnS4g7J6Y66q765CcIOqwkuydtCDrk6TslrTqsIDrqbQg65+w7YOA7J6E7JeQ7IScIOyhsOyaqe2eiCDquLDrs7jqsJLsnLzroZwg65ao7Ja07KC4IOybkOyduOydhCDssL7quLAg7Ja066C164ukLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2V0dGluZ1ZhbHVlKFxuICBkZWY6IFNldHRpbmdEZWYsXG4gIHJhdzogc3RyaW5nLFxuKTogeyBvazogdHJ1ZTsgdmFsdWU6IHN0cmluZyB9IHwgeyBvazogZmFsc2U7IGVycm9yOiBzdHJpbmcgfSB7XG4gIGNvbnN0IHRyaW1tZWQgPSByYXcudHJpbSgpO1xuXG4gIGlmIChkZWYua2luZCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICBpZiAoIVtcInRydWVcIiwgXCJmYWxzZVwiXS5pbmNsdWRlcyh0cmltbWVkKSkgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogXCJ0cnVlIOuYkOuKlCBmYWxzZVwiIH07XG4gICAgcmV0dXJuIHsgb2s6IHRydWUsIHZhbHVlOiB0cmltbWVkIH07XG4gIH1cblxuICBpZiAoZGVmLmtpbmQgPT09IFwiaW50ZWdlclwiIHx8IGRlZi5raW5kID09PSBcIm51bWJlclwiKSB7XG4gICAgY29uc3QgcGFyc2VkID0gTnVtYmVyKHRyaW1tZWQpO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkpIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IFwi7Iir7J6Q66W8IOyeheugpe2VmOyEuOyalFwiIH07XG4gICAgaWYgKGRlZi5raW5kID09PSBcImludGVnZXJcIiAmJiAhTnVtYmVyLmlzSW50ZWdlcihwYXJzZWQpKSB7XG4gICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBcIuygleyImOulvCDsnoXroKXtlZjshLjsmpRcIiB9O1xuICAgIH1cbiAgICBpZiAoZGVmLm1pbiAhPT0gdW5kZWZpbmVkICYmIHBhcnNlZCA8IGRlZi5taW4pIHtcbiAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IGAke2RlZi5taW59IOydtOyDgeydtOyWtOyVvCDtlanri4jri6RgIH07XG4gICAgfVxuICAgIGlmIChkZWYubWF4ICE9PSB1bmRlZmluZWQgJiYgcGFyc2VkID4gZGVmLm1heCkge1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogYCR7ZGVmLm1heH0g7J207ZWY7Jes7JW8IO2VqeuLiOuLpGAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgb2s6IHRydWUsIHZhbHVlOiBTdHJpbmcocGFyc2VkKSB9O1xuICB9XG5cbiAgcmV0dXJuIHsgb2s6IHRydWUsIHZhbHVlOiB0cmltbWVkIH07XG59XG5cbi8qKiDtmZTrqbTsl5Ag6re464yA66GcIOuCtOugpOuztOuCtOuptCDslYgg65CY64qUIOqwki4g7JWe65Kk66eMIOuCqOq4tOuLpC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXNrU2VjcmV0KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAodmFsdWUubGVuZ3RoIDw9IDEyKSByZXR1cm4gXCIqKipcIjtcbiAgcmV0dXJuIGAke3ZhbHVlLnNsaWNlKDAsIDgpfS4uLiR7dmFsdWUuc2xpY2UoLTQpfWA7XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBK0JBLE1BQWEsK0JBQStCO0FBQzVDLE1BQWEsb0NBQW9DO0FBRWpELE1BQWEsZUFBNkI7Q0FDeEM7RUFDRSxLQUFLO0VBQ0wsVUFBVTtFQUNWLE9BQU87RUFDUCxRQUFRO0VBQ1IsT0FBTztFQUNQLE1BQU07RUFDTixTQUFTO0VBQ1QsTUFBTTtDQUNSO0NBQ0E7RUFDRSxLQUFLO0VBQ0wsVUFBVTtFQUNWLE9BQU87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
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { SettingModel } from "./setting.model.js";
|
|
2
|
+
import { getLogger } from "@logtape/logtape";
|
|
3
|
+
//#region src/application/setting/setting.store.ts
|
|
4
|
+
/**
|
|
5
|
+
* 런타임 설정 조회 캐시.
|
|
6
|
+
*
|
|
7
|
+
* 값의 출처는 DB(`settings`) → env 순이다. env 를 남겨두는 이유는 전환 때문이다 — dev0 는
|
|
8
|
+
* `ecosystem.config.json` 으로 값을 주입하는데, DB 만 보게 만들면 배포 직후 설정이 전부
|
|
9
|
+
* 기본값으로 떨어진다.
|
|
10
|
+
*
|
|
11
|
+
* 설정은 요청 경로(워커 스케일링, 알림 전송)에서 읽히므로 매번 DB 를 때리지 않고 메모리에
|
|
12
|
+
* 둔다. `immediate` 변경도 현재 API 프로세스에만 즉시 반영된다. 인스턴스가 여러 개면 다른
|
|
13
|
+
* 인스턴스의 캐시는 갱신되지 않으며, 이 범위에서는 프로세스 간 전파를 두지 않는다.
|
|
14
|
+
*/
|
|
15
|
+
const logger = getLogger(["qgrid", "setting"]);
|
|
16
|
+
/** 로드 전에는 null 이라 전부 env 로 떨어진다. */
|
|
17
|
+
let cache = null;
|
|
18
|
+
let settingChangeHandler = null;
|
|
19
|
+
/**
|
|
20
|
+
* 런타임 소비자는 상위 조립 계층에서 하나만 등록한다. handler 는 동기 작업만 해야 하며,
|
|
21
|
+
* 실패해도 이미 성공한 DB 저장을 실패로 바꾸지 않는다.
|
|
22
|
+
*/
|
|
23
|
+
function setSettingChangeHandler(handler) {
|
|
24
|
+
settingChangeHandler = handler;
|
|
25
|
+
}
|
|
26
|
+
function notifySettingChanged(key) {
|
|
27
|
+
try {
|
|
28
|
+
settingChangeHandler?.(key);
|
|
29
|
+
} catch (e) {
|
|
30
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
31
|
+
logger.warn(`setting change handler failed for ${key}: ${message}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async function loadSettings(persistence = SettingModel) {
|
|
35
|
+
try {
|
|
36
|
+
cache = await persistence.findAllAsMap();
|
|
37
|
+
logger.info(`settings loaded: ${cache.size} stored`);
|
|
38
|
+
} catch (e) {
|
|
39
|
+
cache = /* @__PURE__ */ new Map();
|
|
40
|
+
logger.warn(`settings load failed, using env only: ${e.message}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/** DB → env 순. 둘 다 없으면 undefined 라 호출부의 기본값으로 떨어진다. */
|
|
44
|
+
function getSetting(key, envKey) {
|
|
45
|
+
return cache?.get(key) ?? process.env[envKey];
|
|
46
|
+
}
|
|
47
|
+
/** 저장된 값인지 — 화면에서 출처를 구분해 보여준다. */
|
|
48
|
+
function isStored(key) {
|
|
49
|
+
return cache?.has(key) ?? false;
|
|
50
|
+
}
|
|
51
|
+
async function saveSetting(key, value, persistence = SettingModel) {
|
|
52
|
+
await persistence.setByKey(key, value);
|
|
53
|
+
cache ??= /* @__PURE__ */ new Map();
|
|
54
|
+
cache.set(key, value);
|
|
55
|
+
notifySettingChanged(key);
|
|
56
|
+
}
|
|
57
|
+
/** 저장값을 지워 env 기본값으로 되돌린다. */
|
|
58
|
+
async function resetSetting(key, persistence = SettingModel) {
|
|
59
|
+
await persistence.clearByKey(key);
|
|
60
|
+
cache?.delete(key);
|
|
61
|
+
notifySettingChanged(key);
|
|
62
|
+
}
|
|
63
|
+
//#endregion
|
|
64
|
+
export { getSetting, isStored, loadSettings, resetSetting, saveSetting, setSettingChangeHandler };
|
|
65
|
+
|
|
66
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy5zdG9yZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vc2V0dGluZy9zZXR0aW5nLnN0b3JlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog65+w7YOA7J6EIOyEpOyglSDsobDtmowg7LqQ7IucLlxuICpcbiAqIOqwkuydmCDstpzsspjripQgREIoYHNldHRpbmdzYCkg4oaSIGVudiDsiJzsnbTri6QuIGVudiDrpbwg64Ko6rKo65GQ64qUIOydtOycoOuKlCDsoITtmZgg65WM66y47J2064ukIOKAlCBkZXYwIOuKlFxuICogYGVjb3N5c3RlbS5jb25maWcuanNvbmAg7Jy866GcIOqwkuydhCDso7zsnoXtlZjripTrjbAsIERCIOunjCDrs7Tqsowg66eM65Ok66m0IOuwsO2PrCDsp4Htm4Qg7ISk7KCV7J20IOyghOu2gFxuICog6riw67O46rCS7Jy866GcIOuWqOyWtOynhOuLpC5cbiAqXG4gKiDshKTsoJXsnYAg7JqU7LKtIOqyveuhnCjsm4zsu6Qg7Iqk7LyA7J2866eBLCDslYzrprwg7KCE7IahKeyXkOyEnCDsnb3tnojrr4DroZwg66ek67KIIERCIOulvCDrlYzrpqzsp4Ag7JWK6rOgIOuplOuqqOumrOyXkFxuICog65GU64ukLiBgaW1tZWRpYXRlYCDrs4Dqsr3rj4Qg7ZiE7J6sIEFQSSDtlITroZzshLjsiqTsl5Drp4wg7KaJ7IucIOuwmOyYgeuQnOuLpC4g7J247Iqk7YS07Iqk6rCAIOyXrOufrCDqsJzrqbQg64uk66W4XG4gKiDsnbjsiqTthLTsiqTsnZgg7LqQ7Iuc64qUIOqwseyLoOuQmOyngCDslYrsnLzrqbAsIOydtCDrspTsnITsl5DshJzripQg7ZSE66Gc7IS47IqkIOqwhCDsoITtjIzrpbwg65GQ7KeAIOyViuuKlOuLpC5cbiAqL1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcblxuaW1wb3J0IHsgU2V0dGluZ01vZGVsIH0gZnJvbSBcIi4vc2V0dGluZy5tb2RlbFwiO1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJzZXR0aW5nXCJdKTtcblxuLyoqIOuhnOuTnCDsoITsl5DripQgbnVsbCDsnbTrnbwg7KCE67aAIGVudiDroZwg65ao7Ja07KeE64ukLiAqL1xubGV0IGNhY2hlOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHwgbnVsbCA9IG51bGw7XG5cbnR5cGUgU2V0dGluZ0NoYW5nZUhhbmRsZXIgPSAoa2V5OiBzdHJpbmcpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBTZXR0aW5nUGVyc2lzdGVuY2UgPSBQaWNrPFxuICB0eXBlb2YgU2V0dGluZ01vZGVsLFxuICBcImNsZWFyQnlLZXlcIiB8IFwiZmluZEFsbEFzTWFwXCIgfCBcInNldEJ5S2V5XCJcbj47XG5sZXQgc2V0dGluZ0NoYW5nZUhhbmRsZXI6IFNldHRpbmdDaGFuZ2VIYW5kbGVyIHwgbnVsbCA9IG51bGw7XG5cbi8qKlxuICog65+w7YOA7J6EIOyGjOu5hOyekOuKlCDsg4HsnIQg7KGw66a9IOqzhOy4teyXkOyEnCDtlZjrgpjrp4wg65Ox66Gd7ZWc64ukLiBoYW5kbGVyIOuKlCDrj5nquLAg7J6R7JeF66eMIO2VtOyVvCDtlZjrqbAsXG4gKiDsi6TtjKjtlbTrj4Qg7J2066+4IOyEseqzte2VnCBEQiDsoIDsnqXsnYQg7Iuk7Yyo66GcIOuwlOq+uOyngCDslYrripTri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRTZXR0aW5nQ2hhbmdlSGFuZGxlcihoYW5kbGVyOiBTZXR0aW5nQ2hhbmdlSGFuZGxlciB8IG51bGwpOiB2b2lkIHtcbiAgc2V0dGluZ0NoYW5nZUhhbmRsZXIgPSBoYW5kbGVyO1xufVxuXG5mdW5jdGlvbiBub3RpZnlTZXR0aW5nQ2hhbmdlZChrZXk6IHN0cmluZyk6IHZvaWQge1xuICB0cnkge1xuICAgIHNldHRpbmdDaGFuZ2VIYW5kbGVyPy4oa2V5KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgbG9nZ2VyLndhcm4oYHNldHRpbmcgY2hhbmdlIGhhbmRsZXIgZmFpbGVkIGZvciAke2tleX06ICR7bWVzc2FnZX1gKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFNldHRpbmdzKHBlcnNpc3RlbmNlOiBTZXR0aW5nUGVyc2lzdGVuY2UgPSBTZXR0aW5nTW9kZWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBjYWNoZSA9IGF3YWl0IHBlcnNpc3RlbmNlLmZpbmRBbGxBc01hcCgpO1xuICAgIGxvZ2dlci5pbmZvKGBzZXR0aW5ncyBsb2FkZWQ6ICR7Y2FjaGUuc2l6ZX0gc3RvcmVkYCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyDthYzsnbTruJTsnbQg7JWE7KeBIOyXhuuKlCDrsLDtj6wo66eI7J206re466CI7J207IWYIOyghCnsl5DshJzrj4Qg7ISc67KE64qUIOuWoOyVvCDtlZzri6QuXG4gICAgY2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgbG9nZ2VyLndhcm4oYHNldHRpbmdzIGxvYWQgZmFpbGVkLCB1c2luZyBlbnYgb25seTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgfVxufVxuXG4vKiogREIg4oaSIGVudiDsiJwuIOuRmCDri6Qg7JeG7Jy866m0IHVuZGVmaW5lZCDrnbwg7Zi47Lac67aA7J2YIOq4sOuzuOqwkuycvOuhnCDrlqjslrTsp4Tri6QuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2V0dGluZyhrZXk6IHN0cmluZywgZW52S2V5OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gY2FjaGU/LmdldChrZXkpID8/IHByb2Nlc3MuZW52W2VudktleV07XG59XG5cbi8qKiDsoIDsnqXrkJwg6rCS7J247KeAIOKAlCDtmZTrqbTsl5DshJwg7Lac7LKY66W8IOq1rOu2hO2VtCDrs7Tsl6zspIDri6QuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTdG9yZWQoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNhY2hlPy5oYXMoa2V5KSA/PyBmYWxzZTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhdmVTZXR0aW5nKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IHN0cmluZyxcbiAgcGVyc2lzdGVuY2U6IFNldHRpbmdQZXJzaXN0ZW5jZSA9IFNldHRpbmdNb2RlbCxcbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBwZXJzaXN0ZW5jZS5zZXRCeUtleShrZXksIHZhbHVlKTtcbiAgY2FjaGUgPz89IG5ldyBNYXAoKTtcbiAgY2FjaGUuc2V0KGtleSwgdmFsdWUpO1xuICBub3RpZnlTZXR0aW5nQ2hhbmdlZChrZXkpO1xufVxuXG4vKiog7KCA7J6l6rCS7J2EIOyngOybjCBlbnYg6riw67O46rCS7Jy866GcIOuQmOuPjOumsOuLpC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNldFNldHRpbmcoXG4gIGtleTogc3RyaW5nLFxuICBwZXJzaXN0ZW5jZTogU2V0dGluZ1BlcnNpc3RlbmNlID0gU2V0dGluZ01vZGVsLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHBlcnNpc3RlbmNlLmNsZWFyQnlLZXkoa2V5KTtcbiAgY2FjaGU/LmRlbGV0ZShrZXkpO1xuICBub3RpZnlTZXR0aW5nQ2hhbmdlZChrZXkpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQWVBLE1BQU0sU0FBUyxVQUFVLENBQUMsU0FBUyxTQUFTLENBQUM7O0FBRzdDLElBQUksUUFBb0M7QUFPeEMsSUFBSSx1QkFBb0Q7Ozs7O0FBTXhELFNBQWdCLHdCQUF3QixTQUE0QztDQUNsRix1QkFBdUI7QUFDekI7QUFFQSxTQUFTLHFCQUFxQixLQUFtQjtDQUMvQyxJQUFJO0VBQ0YsdUJBQXVCLEdBQUc7Q0FDNUIsU0FBUyxHQUFHO0VBQ1YsTUFBTSxVQUFVLGFBQWEsUUFBUSxFQUFFLFVBQVUsT0FBTyxDQUFDO0VBQ3pELE9BQU8sS0FBSyxxQ0FBcUMsSUFBSSxJQUFJLFNBQVM7Q0FDcEU7QUFDRjtBQUVBLGVBQXNCLGFBQWEsY0FBa0MsY0FBNkI7Q0FDaEcsSUFBSTtFQUNGLFFBQVEsTUFBTSxZQUFZLGFBQWE7RUFDdkMsT0FBTyxLQUFLLG9CQUFvQixNQUFNLEtBQUssUUFBUTtDQUNyRCxTQUFTLEdBQUc7RUFFVix3QkFBUSxJQUFJLElBQUk7RUFDaEIsT0FBTyxLQUFLLHlDQUEwQyxFQUFZLFNBQVM7Q0FDN0U7QUFDRjs7QUFHQSxTQUFnQixXQUFXLEtBQWEsUUFBb0M7Q0FDMUUsT0FBTyxPQUFPLElBQUksR0FBRyxLQUFLLFFBQVEsSUFBSTtBQUN4Qzs7QUFHQSxTQUFnQixTQUFTLEtBQXNCO0NBQzdDLE9BQU8sT0FBTyxJQUFJLEdBQUcsS0FBSztBQUM1QjtBQUVBLGVBQXNCLFlBQ3BCLEtBQ0EsT0FDQSxjQUFrQyxjQUNuQjtDQUNmLE1BQU0sWUFBWSxTQUFTLEtBQUssS0FBSztDQUNyQywwQkFBVSxJQUFJLElBQUk7Q0FDbEIsTUFBTSxJQUFJLEtBQUssS0FBSztDQUNwQixxQkFBcUIsR0FBRztBQUMxQjs7QUFHQSxlQUFzQixhQUNwQixLQUNBLGNBQWtDLGNBQ25CO0NBQ2YsTUFBTSxZQUFZLFdBQVcsR0FBRztDQUNoQyxPQUFPLE9BQU8sR0FBRztDQUNqQixxQkFBcUIsR0FBRztBQUMxQiJ9
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { SettingBaseListParams, SettingBaseSchema } from "../sonamu.generated.js";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
//#region src/application/setting/setting.types.ts
|
|
4
|
+
const SettingListParams = SettingBaseListParams;
|
|
5
|
+
const SettingSaveParams = SettingBaseSchema.partial({
|
|
6
|
+
id: true,
|
|
7
|
+
created_at: true
|
|
8
|
+
});
|
|
9
|
+
const SettingKind = z.enum([
|
|
10
|
+
"boolean",
|
|
11
|
+
"integer",
|
|
12
|
+
"number",
|
|
13
|
+
"string",
|
|
14
|
+
"secret"
|
|
15
|
+
]);
|
|
16
|
+
const SettingApplies = z.enum(["immediate", "restart"]);
|
|
17
|
+
const SettingSource = z.enum([
|
|
18
|
+
"db",
|
|
19
|
+
"env",
|
|
20
|
+
"default"
|
|
21
|
+
]);
|
|
22
|
+
const SettingItem = z.object({
|
|
23
|
+
key: z.string(),
|
|
24
|
+
group: z.string(),
|
|
25
|
+
label: z.string(),
|
|
26
|
+
kind: SettingKind,
|
|
27
|
+
applies: SettingApplies,
|
|
28
|
+
/** 현재 적용 중인 값. 눈 토글을 지원하기 위해 secret 도 원본으로 내려간다. */
|
|
29
|
+
value: z.string(),
|
|
30
|
+
/** 이 값이 어디서 왔는지. 화면에서 출처를 보여줘야 "왜 안 바뀌지"가 없다. */
|
|
31
|
+
source: SettingSource,
|
|
32
|
+
min: z.number().nullable(),
|
|
33
|
+
max: z.number().nullable(),
|
|
34
|
+
help: z.string().nullable()
|
|
35
|
+
});
|
|
36
|
+
/** 화면에서 바꿀 수 없는 기동 시점 값들 — 어떤 환경에 붙어 있는지 확인용. */
|
|
37
|
+
const RuntimeInfoItem = z.object({
|
|
38
|
+
label: z.string(),
|
|
39
|
+
value: z.string()
|
|
40
|
+
});
|
|
41
|
+
const SettingsResponse = z.object({
|
|
42
|
+
settings: SettingItem.array(),
|
|
43
|
+
runtime: RuntimeInfoItem.array()
|
|
44
|
+
});
|
|
45
|
+
//#endregion
|
|
46
|
+
export { RuntimeInfoItem, SettingApplies, SettingItem, SettingKind, SettingListParams, SettingSaveParams, SettingSource, SettingsResponse };
|
|
47
|
+
|
|
48
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy50eXBlcy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vc2V0dGluZy9zZXR0aW5nLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IFNldHRpbmdCYXNlU2NoZW1hLCBTZXR0aW5nQmFzZUxpc3RQYXJhbXMgfSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZFwiO1xuXG4vLyBTZXR0aW5nIC0gTGlzdFBhcmFtc1xuZXhwb3J0IGNvbnN0IFNldHRpbmdMaXN0UGFyYW1zID0gU2V0dGluZ0Jhc2VMaXN0UGFyYW1zO1xuZXhwb3J0IHR5cGUgU2V0dGluZ0xpc3RQYXJhbXMgPSB6LmluZmVyPHR5cGVvZiBTZXR0aW5nTGlzdFBhcmFtcz47XG5cbi8vIFNldHRpbmcgLSBTYXZlUGFyYW1zXG5leHBvcnQgY29uc3QgU2V0dGluZ1NhdmVQYXJhbXMgPSBTZXR0aW5nQmFzZVNjaGVtYS5wYXJ0aWFsKHsgaWQ6IHRydWUsIGNyZWF0ZWRfYXQ6IHRydWUgfSk7XG5leHBvcnQgdHlwZSBTZXR0aW5nU2F2ZVBhcmFtcyA9IHouaW5mZXI8dHlwZW9mIFNldHRpbmdTYXZlUGFyYW1zPjtcblxuLy8g4pSA4pSAIOyEpOyglSBBUEkg7J2R64u1IOyKpO2CpOuniCDilIDilIBcblxuZXhwb3J0IGNvbnN0IFNldHRpbmdLaW5kID0gei5lbnVtKFtcImJvb2xlYW5cIiwgXCJpbnRlZ2VyXCIsIFwibnVtYmVyXCIsIFwic3RyaW5nXCIsIFwic2VjcmV0XCJdKTtcbmV4cG9ydCB0eXBlIFNldHRpbmdLaW5kID0gei5pbmZlcjx0eXBlb2YgU2V0dGluZ0tpbmQ+O1xuXG5leHBvcnQgY29uc3QgU2V0dGluZ0FwcGxpZXMgPSB6LmVudW0oW1wiaW1tZWRpYXRlXCIsIFwicmVzdGFydFwiXSk7XG5leHBvcnQgdHlwZSBTZXR0aW5nQXBwbGllcyA9IHouaW5mZXI8dHlwZW9mIFNldHRpbmdBcHBsaWVzPjtcblxuZXhwb3J0IGNvbnN0IFNldHRpbmdTb3VyY2UgPSB6LmVudW0oW1wiZGJcIiwgXCJlbnZcIiwgXCJkZWZhdWx0XCJdKTtcbmV4cG9ydCB0eXBlIFNldHRpbmdTb3VyY2UgPSB6LmluZmVyPHR5cGVvZiBTZXR0aW5nU291cmNlPjtcblxuZXhwb3J0IGNvbnN0IFNldHRpbmdJdGVtID0gei5vYmplY3Qoe1xuICBrZXk6IHouc3RyaW5nKCksXG4gIGdyb3VwOiB6LnN0cmluZygpLFxuICBsYWJlbDogei5zdHJpbmcoKSxcbiAga2luZDogU2V0dGluZ0tpbmQsXG4gIGFwcGxpZXM6IFNldHRpbmdBcHBsaWVzLFxuICAvKiog7ZiE7J6sIOyggeyaqSDspJHsnbgg6rCSLiDriIgg7Yag6riA7J2EIOyngOybkO2VmOq4sCDsnITtlbQgc2VjcmV0IOuPhCDsm5Drs7jsnLzroZwg64K066Ck6rCE64ukLiAqL1xuICB2YWx1ZTogei5zdHJpbmcoKSxcbiAgLyoqIOydtCDqsJLsnbQg7Ja065SU7IScIOyZlOuKlOyngC4g7ZmU66m07JeQ7IScIOy2nOyymOulvCDrs7Tsl6zspJjslbwgXCLsmZwg7JWIIOuwlOuAjOyngFwi6rCAIOyXhuuLpC4gKi9cbiAgc291cmNlOiBTZXR0aW5nU291cmNlLFxuICBtaW46IHoubnVtYmVyKCkubnVsbGFibGUoKSxcbiAgbWF4OiB6Lm51bWJlcigpLm51bGxhYmxlKCksXG4gIGhlbHA6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbn0pO1xuZXhwb3J0IHR5cGUgU2V0dGluZ0l0ZW0gPSB6LmluZmVyPHR5cGVvZiBTZXR0aW5nSXRlbT47XG5cbi8qKiDtmZTrqbTsl5DshJwg67CU6r+AIOyImCDsl4bripQg6riw64+ZIOyLnOygkCDqsJLrk6Qg4oCUIOyWtOuWpCDtmZjqsr3sl5Ag67aZ7Ja0IOyeiOuKlOyngCDtmZXsnbjsmqkuICovXG5leHBvcnQgY29uc3QgUnVudGltZUluZm9JdGVtID0gei5vYmplY3Qoe1xuICBsYWJlbDogei5zdHJpbmcoKSxcbiAgdmFsdWU6IHouc3RyaW5nKCksXG59KTtcbmV4cG9ydCB0eXBlIFJ1bnRpbWVJbmZvSXRlbSA9IHouaW5mZXI8dHlwZW9mIFJ1bnRpbWVJbmZvSXRlbT47XG5cbmV4cG9ydCBjb25zdCBTZXR0aW5nc1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICBzZXR0aW5nczogU2V0dGluZ0l0ZW0uYXJyYXkoKSxcbiAgcnVudGltZTogUnVudGltZUluZm9JdGVtLmFycmF5KCksXG59KTtcbmV4cG9ydCB0eXBlIFNldHRpbmdzUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBTZXR0aW5nc1Jlc3BvbnNlPjtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBS0EsTUFBYSxvQkFBb0I7QUFJakMsTUFBYSxvQkFBb0Isa0JBQWtCLFFBQVE7Q0FBRSxJQUFJO0NBQU0sWUFBWTtBQUFLLENBQUM7QUFLekYsTUFBYSxjQUFjLEVBQUUsS0FBSztDQUFDO0NBQVc7Q0FBVztDQUFVO0NBQVU7QUFBUSxDQUFDO0FBR3RGLE1BQWEsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGFBQWEsU0FBUyxDQUFDO0FBRzdELE1BQWEsZ0JBQWdCLEVBQUUsS0FBSztDQUFDO0NBQU07Q0FBTztBQUFTLENBQUM7QUFHNUQsTUFBYSxjQUFjLEVBQUUsT0FBTztDQUNsQyxLQUFLLEVBQUUsT0FBTztDQUNkLE9BQU8sRUFBRSxPQUFPO0NBQ2hCLE9BQU8sRUFBRSxPQUFPO0NBQ2hCLE1BQU07Q0FDTixTQUFTOztDQUVULE9BQU8sRUFBRSxPQUFPOztDQUVoQixRQUFRO0NBQ1IsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDekIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDekIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7QUFDNUIsQ0FBQzs7QUFJRCxNQUFhLGtCQUFrQixFQUFFLE9BQU87Q0FDdEMsT0FBTyxFQUFFLE9BQU87Q0FDaEIsT0FBTyxFQUFFLE9BQU87QUFDbEIsQ0FBQztBQUdELE1BQWEsbUJBQW1CLEVBQUUsT0FBTztDQUN2QyxVQUFVLFlBQVksTUFBTTtDQUM1QixTQUFTLGdCQUFnQixNQUFNO0FBQ2pDLENBQUMifQ==
|
|
@@ -104,6 +104,10 @@ const RequestLogStepOrderBy = z.enum(["id-asc"]).describe("RequestLogStepOrderBy
|
|
|
104
104
|
const RequestLogStepOrderByLabel = { "id-asc": "ID순" };
|
|
105
105
|
const RequestLogStepSearchField = z.enum(["id"]).describe("RequestLogStepSearchField");
|
|
106
106
|
const RequestLogStepSearchFieldLabel = { id: "ID" };
|
|
107
|
+
const SettingOrderBy = z.enum(["key-asc"]).describe("SettingOrderBy");
|
|
108
|
+
const SettingOrderByLabel = { "key-asc": "키순" };
|
|
109
|
+
const SettingSearchField = z.enum(["key"]).describe("SettingSearchField");
|
|
110
|
+
const SettingSearchFieldLabel = { key: "키" };
|
|
107
111
|
const TokenOrderBy = z.enum(["id-desc", "ord-asc"]).describe("TokenOrderBy");
|
|
108
112
|
const TokenOrderByLabel = {
|
|
109
113
|
"id-desc": "ID최신순",
|
|
@@ -175,6 +179,13 @@ const RequestLogStepBaseSchema = z.object({
|
|
|
175
179
|
tool_duration_ms: z.int().nullable(),
|
|
176
180
|
error: z.string().nullable()
|
|
177
181
|
});
|
|
182
|
+
const SettingBaseSchema = z.object({
|
|
183
|
+
id: z.int(),
|
|
184
|
+
created_at: z.date(),
|
|
185
|
+
key: z.string().max(100),
|
|
186
|
+
value: z.string(),
|
|
187
|
+
updated_at: z.date().nullable()
|
|
188
|
+
});
|
|
178
189
|
const TokenBaseSchema = z.object({
|
|
179
190
|
id: z.int(),
|
|
180
191
|
created_at: z.date(),
|
|
@@ -210,6 +221,17 @@ const RequestLogStepBaseListParams = z.object({
|
|
|
210
221
|
sonamuFilter: z.custom(),
|
|
211
222
|
request_log_id: z.int()
|
|
212
223
|
}).partial();
|
|
224
|
+
const SettingBaseListParams = z.object({
|
|
225
|
+
num: z.number().int().nonnegative(),
|
|
226
|
+
page: z.number().int().min(1),
|
|
227
|
+
search: SettingSearchField,
|
|
228
|
+
keyword: z.string(),
|
|
229
|
+
orderBy: SettingOrderBy,
|
|
230
|
+
queryMode: SonamuQueryMode,
|
|
231
|
+
id: zArrayable(z.number().int().positive()),
|
|
232
|
+
sonamuFilter: z.custom(),
|
|
233
|
+
key: z.string().max(100)
|
|
234
|
+
}).partial();
|
|
213
235
|
const TokenBaseListParams = z.object({
|
|
214
236
|
num: z.number().int().nonnegative(),
|
|
215
237
|
page: z.number().int().min(1),
|
|
@@ -358,6 +380,14 @@ const RequestLogStepSubsetKey = z.enum([
|
|
|
358
380
|
"T",
|
|
359
381
|
"I"
|
|
360
382
|
]);
|
|
383
|
+
const SettingSubsetA = z.object({
|
|
384
|
+
id: z.int(),
|
|
385
|
+
created_at: z.date(),
|
|
386
|
+
key: z.string().max(100),
|
|
387
|
+
value: z.string(),
|
|
388
|
+
updated_at: z.date().nullable()
|
|
389
|
+
});
|
|
390
|
+
const SettingSubsetKey = z.enum(["A"]);
|
|
361
391
|
const TokenSubsetA = z.object({
|
|
362
392
|
id: z.int(),
|
|
363
393
|
created_at: z.date(),
|
|
@@ -371,6 +401,6 @@ const TokenSubsetA = z.object({
|
|
|
371
401
|
});
|
|
372
402
|
const TokenSubsetKey = z.enum(["A"]);
|
|
373
403
|
//#endregion
|
|
374
|
-
export { RequestLogBaseListParams, RequestLogBaseSchema, RequestLogOrderBy, RequestLogOrderByLabel, RequestLogSearchField, RequestLogSearchFieldLabel, RequestLogStatus, RequestLogStatusLabel, RequestLogStepBaseListParams, RequestLogStepBaseSchema, RequestLogStepOrderBy, RequestLogStepOrderByLabel, RequestLogStepSearchField, RequestLogStepSearchFieldLabel, RequestLogStepSubsetA, RequestLogStepSubsetI, RequestLogStepSubsetKey, RequestLogStepSubsetT, RequestLogStepType, RequestLogStepTypeLabel, RequestLogSubsetA, RequestLogSubsetC, RequestLogSubsetKey, RequestLogSubsetP, TokenBaseListParams, TokenBaseSchema, TokenOrderBy, TokenOrderByLabel, TokenSearchField, TokenSearchFieldLabel, TokenSubsetA, TokenSubsetKey };
|
|
404
|
+
export { RequestLogBaseListParams, RequestLogBaseSchema, RequestLogOrderBy, RequestLogOrderByLabel, RequestLogSearchField, RequestLogSearchFieldLabel, RequestLogStatus, RequestLogStatusLabel, RequestLogStepBaseListParams, RequestLogStepBaseSchema, RequestLogStepOrderBy, RequestLogStepOrderByLabel, RequestLogStepSearchField, RequestLogStepSearchFieldLabel, RequestLogStepSubsetA, RequestLogStepSubsetI, RequestLogStepSubsetKey, RequestLogStepSubsetT, RequestLogStepType, RequestLogStepTypeLabel, RequestLogSubsetA, RequestLogSubsetC, RequestLogSubsetKey, RequestLogSubsetP, SettingBaseListParams, SettingBaseSchema, SettingOrderBy, SettingOrderByLabel, SettingSearchField, SettingSearchFieldLabel, SettingSubsetA, SettingSubsetKey, TokenBaseListParams, TokenBaseSchema, TokenOrderBy, TokenOrderByLabel, TokenSearchField, TokenSearchFieldLabel, TokenSubsetA, TokenSubsetKey };
|
|
375
405
|
|
|
376
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29uYW11LmdlbmVyYXRlZC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBwbGljYXRpb24vc29uYW11LmdlbmVyYXRlZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBnZW5lcmF0ZWRcbiAqIOyngeygkSDsiJjsoJXtlZjsp4Ag66eI7IS47JqULlxuICovXG5cbi8qIG94bGludC1kaXNhYmxlICovXG5cbmltcG9ydCB7IHpBcnJheWFibGUsIFNvbmFtdVF1ZXJ5TW9kZSwgQXBwbHlTb25hbXVGaWx0ZXIgfSBmcm9tIFwic29uYW11XCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG4vLyBDdXN0b21TY2FsYXI6IEhpc3RvcnlJdGVtc1xuY29uc3QgSGlzdG9yeUl0ZW1zID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHouc3RyaW5nKCksXG4gICAgcm9sZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGNvbnRlbnQ6IHoudW5rbm93bigpLm9wdGlvbmFsKCksXG4gICAgbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGFyZ3VtZW50czogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGNhbGxfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBvdXRwdXQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSksXG4pO1xudHlwZSBIaXN0b3J5SXRlbXMgPSB6LmluZmVyPHR5cGVvZiBIaXN0b3J5SXRlbXM+O1xuXG4vLyBDdXN0b21TY2FsYXI6IFRva2VuQ3JlZGVudGlhbHNcbmNvbnN0IFRva2VuQ3JlZGVudGlhbHMgPSB6LnVuaW9uKFtcbiAgei5vYmplY3Qoe1xuICAgIGFjY2Vzc1Rva2VuOiB6LnN0cmluZygpLFxuICAgIHJlZnJlc2hUb2tlbjogei5zdHJpbmcoKSxcbiAgICBleHBpcmVzQXQ6IHoubnVtYmVyKCksXG4gICAgYWNjb3VudFV1aWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgYWNjZXNzVG9rZW46IHouc3RyaW5nKCksXG4gICAgcmVmcmVzaFRva2VuOiB6LnN0cmluZygpLFxuICAgIGlkVG9rZW46IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBhY2Nlc3NUb2tlbkV4cGlyZXNBdDogei5udW1iZXIoKSxcbiAgICBpZFRva2VuRXhwaXJlc0F0OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgYWNjb3VudElkOiB6LnN0cmluZygpLFxuICAgIHBsYW5UeXBlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pLFxuXSk7XG50eXBlIFRva2VuQ3JlZGVudGlhbHMgPSB6LmluZmVyPHR5cGVvZiBUb2tlbkNyZWRlbnRpYWxzPjtcblxuLy8gQ3VzdG9tU2NhbGFyOiBUb29sRGVmaW5pdGlvbnNcbmNvbnN0IFRvb2xEZWZpbml0aW9ucyA9IHouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgaW5wdXRTY2hlbWE6IHoudW5rbm93bigpLFxuICB9KSxcbik7XG50eXBlIFRvb2xEZWZpbml0aW9ucyA9IHouaW5mZXI8dHlwZW9mIFRvb2xEZWZpbml0aW9ucz47XG5cbi8vIEVudW1zOiBSZXF1ZXN0TG9nXG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ09yZGVyQnkgPSB6XG4gIC5lbnVtKFtcbiAgICBcImlkLWRlc2NcIixcbiAgICBcImlkLWFzY1wiLFxuICAgIFwiY3JlYXRlZF9hdC1kZXNjXCIsXG4gICAgXCJjcmVhdGVkX2F0LWFzY1wiLFxuICAgIFwidHRmdF9tcy1kZXNjXCIsXG4gICAgXCJ0dGZ0X21zLWFzY1wiLFxuICAgIFwiZHVyYXRpb25fbXMtZGVzY1wiLFxuICAgIFwiZHVyYXRpb25fbXMtYXNjXCIsXG4gICAgXCJpbnB1dF90b2tlbnMtZGVzY1wiLFxuICAgIFwiaW5wdXRfdG9rZW5zLWFzY1wiLFxuICAgIFwib3V0cHV0X3Rva2Vucy1kZXNjXCIsXG4gICAgXCJvdXRwdXRfdG9rZW5zLWFzY1wiLFxuICAgIFwiY2FjaGVfcmVhZF90b2tlbnMtZGVzY1wiLFxuICAgIFwiY2FjaGVfcmVhZF90b2tlbnMtYXNjXCIsXG4gICAgXCJjYWNoZV9jcmVhdGlvbl90b2tlbnMtZGVzY1wiLFxuICAgIFwiY2FjaGVfY3JlYXRpb25fdG9rZW5zLWFzY1wiLFxuICAgIFwiY29zdF91c2QtZGVzY1wiLFxuICAgIFwiY29zdF91c2QtYXNjXCIsXG4gIF0pXG4gIC5kZXNjcmliZShcIlJlcXVlc3RMb2dPcmRlckJ5XCIpO1xuZXhwb3J0IHR5cGUgUmVxdWVzdExvZ09yZGVyQnkgPSB6LmluZmVyPHR5cGVvZiBSZXF1ZXN0TG9nT3JkZXJCeT47XG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ09yZGVyQnlMYWJlbCA9IHtcbiAgXCJpZC1kZXNjXCI6IFwiSUTstZzsi6DsiJxcIixcbiAgXCJpZC1hc2NcIjogXCJJROyYpOuemOuQnOyInFwiLFxuICBcImNyZWF0ZWRfYXQtZGVzY1wiOiBcIuuTseuhneydvOyLnOy1nOyLoOyInFwiLFxuICBcImNyZWF0ZWRfYXQtYXNjXCI6IFwi65Ox66Gd7J287Iuc7Jik656Y65Cc7IicXCIsXG4gIFwidHRmdF9tcy1kZXNjXCI6IFwiVFRGVOq4tOyInFwiLFxuICBcInR0ZnRfbXMtYXNjXCI6IFwiVFRGVOynp+ydgOyInFwiLFxuICBcImR1cmF0aW9uX21zLWRlc2NcIjogXCLshozsmpTsi5zqsITquLTsiJxcIixcbiAgXCJkdXJhdGlvbl9tcy1hc2NcIjogXCLshozsmpTsi5zqsITsp6fsnYDsiJxcIixcbiAgXCJpbnB1dF90b2tlbnMtZGVzY1wiOiBcIuyeheugpe2GoO2BsOunjuydgOyInFwiLFxuICBcImlucHV0X3Rva2Vucy1hc2NcIjogXCLsnoXroKXthqDtgbDsoIHsnYDsiJxcIixcbiAgXCJvdXRwdXRfdG9rZW5zLWRlc2NcIjogXCLstpzroKXthqDtgbDrp47snYDsiJxcIixcbiAgXCJvdXRwdXRfdG9rZW5zLWFzY1wiOiBcIuy2nOugpe2GoO2BsOyggeydgOyInFwiLFxuICBcImNhY2hlX3JlYWRfdG9rZW5zLWRlc2NcIjogXCLsupDsi5zsnb3quLDrp47snYDsiJxcIixcbiAgXCJjYWNoZV9yZWFkX3Rva2Vucy1hc2NcIjogXCLsupDsi5zsnb3quLDsoIHsnYDsiJxcIixcbiAgXCJjYWNoZV9jcmVhdGlvbl90b2tlbnMtZGVzY1wiOiBcIuy6kOyLnOyDneyEseunjuydgOyInFwiLFxuICBcImNhY2hlX2NyZWF0aW9uX3Rva2Vucy1hc2NcIjogXCLsupDsi5zsg53shLHsoIHsnYDsiJxcIixcbiAgXCJjb3N0X3VzZC1kZXNjXCI6IFwi67mE7Jqp64aS7J2A7IicXCIsXG4gIFwiY29zdF91c2QtYXNjXCI6IFwi67mE7Jqp64Ku7J2A7IicXCIsXG59O1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTZWFyY2hGaWVsZCA9IHpcbiAgLmVudW0oW1wiaWRcIiwgXCJ0b2tlbl9uYW1lXCIsIFwidXNlcl9wcm9tcHRcIl0pXG4gIC5kZXNjcmliZShcIlJlcXVlc3RMb2dTZWFyY2hGaWVsZFwiKTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTZWFyY2hGaWVsZCA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dTZWFyY2hGaWVsZD47XG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1NlYXJjaEZpZWxkTGFiZWwgPSB7XG4gIGlkOiBcIklEXCIsXG4gIHRva2VuX25hbWU6IFwi7Yag7YGw7J2066aEXCIsXG4gIHVzZXJfcHJvbXB0OiBcIuyCrOyaqeyekCDtlITroaztlITtirhcIixcbn07XG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N0YXR1cyA9IHpcbiAgLmVudW0oW1wicnVubmluZ1wiLCBcInN1Y2NlZWRlZFwiLCBcImVycm9yXCIsIFwiYWJvcnRlZFwiXSlcbiAgLmRlc2NyaWJlKFwiUmVxdWVzdExvZ1N0YXR1c1wiKTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdGF0dXMgPSB6LmluZmVyPHR5cGVvZiBSZXF1ZXN0TG9nU3RhdHVzPjtcbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nU3RhdHVzTGFiZWwgPSB7XG4gIHJ1bm5pbmc6IFwi7Iuk7ZaJIOykkVwiLFxuICBzdWNjZWVkZWQ6IFwi7ISx6rO1XCIsXG4gIGVycm9yOiBcIuyXkOufrFwiLFxuICBhYm9ydGVkOiBcIuykkeuLqFwiLFxufTtcblxuLy8gRW51bXM6IFJlcXVlc3RMb2dTdGVwXG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N0ZXBUeXBlID0gei5lbnVtKFtcImdlbmVyYXRlXCIsIFwidG9vbF9jYWxsXCJdKS5kZXNjcmliZShcIlJlcXVlc3RMb2dTdGVwVHlwZVwiKTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdGVwVHlwZSA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dTdGVwVHlwZT47XG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N0ZXBUeXBlTGFiZWwgPSB7IGdlbmVyYXRlOiBcIkxMTSDsg53shLFcIiwgdG9vbF9jYWxsOiBcIlRvb2wg7Zi47LacXCIgfTtcbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nU3RlcE9yZGVyQnkgPSB6LmVudW0oW1wiaWQtYXNjXCJdKS5kZXNjcmliZShcIlJlcXVlc3RMb2dTdGVwT3JkZXJCeVwiKTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdGVwT3JkZXJCeSA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dTdGVwT3JkZXJCeT47XG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N0ZXBPcmRlckJ5TGFiZWwgPSB7IFwiaWQtYXNjXCI6IFwiSUTsiJxcIiB9O1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdGVwU2VhcmNoRmllbGQgPSB6LmVudW0oW1wiaWRcIl0pLmRlc2NyaWJlKFwiUmVxdWVzdExvZ1N0ZXBTZWFyY2hGaWVsZFwiKTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdGVwU2VhcmNoRmllbGQgPSB6LmluZmVyPHR5cGVvZiBSZXF1ZXN0TG9nU3RlcFNlYXJjaEZpZWxkPjtcbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nU3RlcFNlYXJjaEZpZWxkTGFiZWwgPSB7IGlkOiBcIklEXCIgfTtcblxuLy8gRW51bXM6IFRva2VuXG5leHBvcnQgY29uc3QgVG9rZW5PcmRlckJ5ID0gei5lbnVtKFtcImlkLWRlc2NcIiwgXCJvcmQtYXNjXCJdKS5kZXNjcmliZShcIlRva2VuT3JkZXJCeVwiKTtcbmV4cG9ydCB0eXBlIFRva2VuT3JkZXJCeSA9IHouaW5mZXI8dHlwZW9mIFRva2VuT3JkZXJCeT47XG5leHBvcnQgY29uc3QgVG9rZW5PcmRlckJ5TGFiZWwgPSB7IFwiaWQtZGVzY1wiOiBcIklE7LWc7Iug7IicXCIsIFwib3JkLWFzY1wiOiBcIuyInOyEnOyInFwiIH07XG5leHBvcnQgY29uc3QgVG9rZW5TZWFyY2hGaWVsZCA9IHouZW51bShbXCJpZFwiLCBcIm5hbWVcIl0pLmRlc2NyaWJlKFwiVG9rZW5TZWFyY2hGaWVsZFwiKTtcbmV4cG9ydCB0eXBlIFRva2VuU2VhcmNoRmllbGQgPSB6LmluZmVyPHR5cGVvZiBUb2tlblNlYXJjaEZpZWxkPjtcbmV4cG9ydCBjb25zdCBUb2tlblNlYXJjaEZpZWxkTGFiZWwgPSB7IGlkOiBcIklEXCIsIG5hbWU6IFwi7J2066aEXCIgfTtcblxuLy8gQmFzZVNjaGVtYTogUmVxdWVzdExvZ1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dCYXNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogei5pbnQoKSxcbiAgY3JlYXRlZF9hdDogei5kYXRlKCksXG4gIHRva2VuX25hbWU6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgcHJvamVjdF9uYW1lOiB6LnN0cmluZygpLm1heCg1MCkubnVsbGFibGUoKSxcbiAgbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICBmYWxsYmFja19jb3VudDogei5pbnQoKS5udWxsYWJsZSgpLFxuICB1c2VyX3Byb21wdDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBzeXN0ZW1fcHJvbXB0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHJlc3BvbnNlOiB6LnN0cmluZygpLFxuICBpbnB1dF90b2tlbnM6IHouaW50KCksXG4gIG91dHB1dF90b2tlbnM6IHouaW50KCksXG4gIGNhY2hlX3JlYWRfdG9rZW5zOiB6LmludCgpLFxuICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHouaW50KCksXG4gIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgZHVyYXRpb25fbXM6IHouaW50KCksXG4gIHR0ZnRfbXM6IHouaW50KCksXG4gIGNvc3RfdXNkOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNvc3Rfc291cmNlOiB6LnN0cmluZygpLm1heCgyMCkubnVsbGFibGUoKSxcbiAgaW1hZ2VfY29zdF91c2Q6IHouaW50KCkubnVsbGFibGUoKSxcbiAgaW1hZ2VfY29zdF9tZXRob2Q6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgZWZmb3J0OiB6LnN0cmluZygpLm1heCgxMCkubnVsbGFibGUoKSxcbiAgaGlzdG9yeTogSGlzdG9yeUl0ZW1zLm51bGxhYmxlKCksXG4gIHRvb2xzOiBUb29sRGVmaW5pdGlvbnMubnVsbGFibGUoKSxcbiAgc3RhdHVzOiBSZXF1ZXN0TG9nU3RhdHVzLFxuICBlcnJvcl9tZXNzYWdlOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHRvb2xfY2FsbF9jb3VudDogei5pbnQoKSxcbiAgaXNfaW1hZ2VfZ2VuZXJhdGlvbjogei5ib29sZWFuKCksXG59KTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dCYXNlU2NoZW1hID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ0Jhc2VTY2hlbWE+ICYge1xuICByZWFkb25seSBfX2hhc0RlZmF1bHRfXzogcmVhZG9ubHkgW1xuICAgIFwiY3JlYXRlZF9hdFwiLFxuICAgIFwidG9rZW5fbmFtZVwiLFxuICAgIFwicHJvamVjdF9uYW1lXCIsXG4gICAgXCJtb2RlbF9uYW1lXCIsXG4gICAgXCJyZXF1ZXN0ZWRfbW9kZWxfbmFtZVwiLFxuICAgIFwiZmFsbGJhY2tfY291bnRcIixcbiAgICBcInVzZXJfcHJvbXB0XCIsXG4gICAgXCJzeXN0ZW1fcHJvbXB0XCIsXG4gICAgXCJyZXNwb25zZVwiLFxuICAgIFwiaW5wdXRfdG9rZW5zXCIsXG4gICAgXCJvdXRwdXRfdG9rZW5zXCIsXG4gICAgXCJjYWNoZV9yZWFkX3Rva2Vuc1wiLFxuICAgIFwiY2FjaGVfY3JlYXRpb25fdG9rZW5zXCIsXG4gICAgXCJjYWNoZV9jcmVhdGlvbl81bV90b2tlbnNcIixcbiAgICBcImNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vuc1wiLFxuICAgIFwiZHVyYXRpb25fbXNcIixcbiAgICBcInR0ZnRfbXNcIixcbiAgICBcImNvc3RfdXNkXCIsXG4gICAgXCJjb3N0X3NvdXJjZVwiLFxuICAgIFwiaW1hZ2VfY29zdF91c2RcIixcbiAgICBcImltYWdlX2Nvc3RfbWV0aG9kXCIsXG4gICAgXCJlZmZvcnRcIixcbiAgICBcImhpc3RvcnlcIixcbiAgICBcInRvb2xzXCIsXG4gICAgXCJzdGF0dXNcIixcbiAgICBcImVycm9yX21lc3NhZ2VcIixcbiAgICBcInRvb2xfY2FsbF9jb3VudFwiLFxuICAgIFwiaXNfaW1hZ2VfZ2VuZXJhdGlvblwiLFxuICAgIFwiaWRcIixcbiAgXTtcbn07XG5cbi8vIEJhc2VTY2hlbWE6IFJlcXVlc3RMb2dTdGVwXG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N0ZXBCYXNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogei5pbnQoKSxcbiAgY3JlYXRlZF9hdDogei5kYXRlKCksXG4gIHJlcXVlc3RfbG9nX2lkOiB6LmludCgpLFxuICBzdGVwX2luZGV4OiB6LmludCgpLFxuICB0eXBlOiBSZXF1ZXN0TG9nU3RlcFR5cGUsXG4gIG1vZGVsX25hbWU6IHouc3RyaW5nKCkubWF4KDI1NSkubnVsbGFibGUoKSxcbiAgcmVxdWVzdGVkX21vZGVsX25hbWU6IHouc3RyaW5nKCkubWF4KDI1NSkubnVsbGFibGUoKSxcbiAgZmFsbGJhY2tfY291bnQ6IHouaW50KCkubnVsbGFibGUoKSxcbiAgaW5wdXRfdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIG91dHB1dF90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY2FjaGVfcmVhZF90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY29zdF91c2Q6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY29zdF9zb3VyY2U6IHouc3RyaW5nKCkubWF4KDIwKS5udWxsYWJsZSgpLFxuICBkdXJhdGlvbl9tczogei5pbnQoKS5udWxsYWJsZSgpLFxuICB0dGZ0X21zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGZpbmlzaF9yZWFzb246IHouc3RyaW5nKCkubWF4KDIwKS5udWxsYWJsZSgpLFxuICByZWFzb25pbmdfdGV4dDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICByZWFzb25pbmdfdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIHRvb2xfY2FsbF9pbmRleDogei5pbnQoKS5udWxsYWJsZSgpLFxuICB0b29sX2NhbGxfaWQ6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgdG9vbF9uYW1lOiB6LnN0cmluZygpLm1heCgxMDApLm51bGxhYmxlKCksXG4gIHRvb2xfYXJnczogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICB0b29sX3Jlc3VsdDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICB0b29sX2R1cmF0aW9uX21zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGVycm9yOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG59KTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdGVwQmFzZVNjaGVtYSA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dTdGVwQmFzZVNjaGVtYT4gJiB7XG4gIHJlYWRvbmx5IF9faGFzRGVmYXVsdF9fOiByZWFkb25seSBbXG4gICAgXCJjcmVhdGVkX2F0XCIsXG4gICAgXCJtb2RlbF9uYW1lXCIsXG4gICAgXCJyZXF1ZXN0ZWRfbW9kZWxfbmFtZVwiLFxuICAgIFwiZmFsbGJhY2tfY291bnRcIixcbiAgICBcImlucHV0X3Rva2Vuc1wiLFxuICAgIFwib3V0cHV0X3Rva2Vuc1wiLFxuICAgIFwiY2FjaGVfcmVhZF90b2tlbnNcIixcbiAgICBcImNhY2hlX2NyZWF0aW9uX3Rva2Vuc1wiLFxuICAgIFwiY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zXCIsXG4gICAgXCJjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnNcIixcbiAgICBcImNvc3RfdXNkXCIsXG4gICAgXCJjb3N0X3NvdXJjZVwiLFxuICAgIFwiZHVyYXRpb25fbXNcIixcbiAgICBcInR0ZnRfbXNcIixcbiAgICBcImZpbmlzaF9yZWFzb25cIixcbiAgICBcInJlYXNvbmluZ190ZXh0XCIsXG4gICAgXCJyZWFzb25pbmdfdG9rZW5zXCIsXG4gICAgXCJ0b29sX2NhbGxfaW5kZXhcIixcbiAgICBcInRvb2xfY2FsbF9pZFwiLFxuICAgIFwidG9vbF9uYW1lXCIsXG4gICAgXCJ0b29sX2FyZ3NcIixcbiAgICBcInRvb2xfcmVzdWx0XCIsXG4gICAgXCJ0b29sX2R1cmF0aW9uX21zXCIsXG4gICAgXCJlcnJvclwiLFxuICAgIFwiaWRcIixcbiAgXTtcbn07XG5cbi8vIEJhc2VTY2hlbWE6IFRva2VuXG5leHBvcnQgY29uc3QgVG9rZW5CYXNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogei5pbnQoKSxcbiAgY3JlYXRlZF9hdDogei5kYXRlKCksXG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLm1heCgyMCksXG4gIGNyZWRlbnRpYWxzOiBUb2tlbkNyZWRlbnRpYWxzLFxuICBuYW1lOiB6LnN0cmluZygpLFxuICBhY3RpdmU6IHouYm9vbGVhbigpLFxuICBvcmQ6IHouaW50KCksXG4gIHF1b3RhX3RocmVzaG9sZDogei5pbnQoKS5udWxsYWJsZSgpLFxuICB3ZWlnaHQ6IHouaW50KCksXG59KTtcbmV4cG9ydCB0eXBlIFRva2VuQmFzZVNjaGVtYSA9IHouaW5mZXI8dHlwZW9mIFRva2VuQmFzZVNjaGVtYT4gJiB7XG4gIHJlYWRvbmx5IF9faGFzRGVmYXVsdF9fOiByZWFkb25seSBbXG4gICAgXCJjcmVhdGVkX2F0XCIsXG4gICAgXCJhY3RpdmVcIixcbiAgICBcIm9yZFwiLFxuICAgIFwicXVvdGFfdGhyZXNob2xkXCIsXG4gICAgXCJ3ZWlnaHRcIixcbiAgICBcImlkXCIsXG4gIF07XG59O1xuXG4vLyBCYXNlTGlzdFBhcmFtczogUmVxdWVzdExvZ1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dCYXNlTGlzdFBhcmFtcyA9IHpcbiAgLm9iamVjdCh7XG4gICAgbnVtOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG4gICAgcGFnZTogei5udW1iZXIoKS5pbnQoKS5taW4oMSksXG4gICAgc2VhcmNoOiBSZXF1ZXN0TG9nU2VhcmNoRmllbGQsXG4gICAga2V5d29yZDogei5zdHJpbmcoKSxcbiAgICBvcmRlckJ5OiBSZXF1ZXN0TG9nT3JkZXJCeSxcbiAgICBxdWVyeU1vZGU6IFNvbmFtdVF1ZXJ5TW9kZSxcbiAgICBpZDogekFycmF5YWJsZSh6Lm51bWJlcigpLmludCgpLnBvc2l0aXZlKCkpLFxuICAgIHNvbmFtdUZpbHRlcjogei5jdXN0b208QXBwbHlTb25hbXVGaWx0ZXI8UmVxdWVzdExvZ0Jhc2VTY2hlbWEsIG5ldmVyLCBuZXZlcj4+KCksXG4gICAgdG9rZW5fbmFtZTogei5zdHJpbmcoKS5tYXgoMTAwKS5udWxsYWJsZSgpLFxuICAgIHByb2plY3RfbmFtZTogei5zdHJpbmcoKS5tYXgoNTApLm51bGxhYmxlKCksXG4gICAgbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICB9KVxuICAucGFydGlhbCgpO1xuZXhwb3J0IHR5cGUgUmVxdWVzdExvZ0Jhc2VMaXN0UGFyYW1zID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ0Jhc2VMaXN0UGFyYW1zPjtcblxuLy8gQmFzZUxpc3RQYXJhbXM6IFJlcXVlc3RMb2dTdGVwXG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N0ZXBCYXNlTGlzdFBhcmFtcyA9IHpcbiAgLm9iamVjdCh7XG4gICAgbnVtOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG4gICAgcGFnZTogei5udW1iZXIoKS5pbnQoKS5taW4oMSksXG4gICAgc2VhcmNoOiBSZXF1ZXN0TG9nU3RlcFNlYXJjaEZpZWxkLFxuICAgIGtleXdvcmQ6IHouc3RyaW5nKCksXG4gICAgb3JkZXJCeTogUmVxdWVzdExvZ1N0ZXBPcmRlckJ5LFxuICAgIHF1ZXJ5TW9kZTogU29uYW11UXVlcnlNb2RlLFxuICAgIGlkOiB6QXJyYXlhYmxlKHoubnVtYmVyKCkuaW50KCkucG9zaXRpdmUoKSksXG4gICAgc29uYW11RmlsdGVyOiB6LmN1c3RvbTxBcHBseVNvbmFtdUZpbHRlcjxSZXF1ZXN0TG9nU3RlcEJhc2VTY2hlbWEsIG5ldmVyLCBuZXZlcj4+KCksXG4gICAgcmVxdWVzdF9sb2dfaWQ6IHouaW50KCksXG4gIH0pXG4gIC5wYXJ0aWFsKCk7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3RlcEJhc2VMaXN0UGFyYW1zID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ1N0ZXBCYXNlTGlzdFBhcmFtcz47XG5cbi8vIEJhc2VMaXN0UGFyYW1zOiBUb2tlblxuZXhwb3J0IGNvbnN0IFRva2VuQmFzZUxpc3RQYXJhbXMgPSB6XG4gIC5vYmplY3Qoe1xuICAgIG51bTogei5udW1iZXIoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLFxuICAgIHBhZ2U6IHoubnVtYmVyKCkuaW50KCkubWluKDEpLFxuICAgIHNlYXJjaDogVG9rZW5TZWFyY2hGaWVsZCxcbiAgICBrZXl3b3JkOiB6LnN0cmluZygpLFxuICAgIG9yZGVyQnk6IFRva2VuT3JkZXJCeSxcbiAgICBxdWVyeU1vZGU6IFNvbmFtdVF1ZXJ5TW9kZSxcbiAgICBpZDogekFycmF5YWJsZSh6Lm51bWJlcigpLmludCgpLnBvc2l0aXZlKCkpLFxuICAgIHNvbmFtdUZpbHRlcjogei5jdXN0b208QXBwbHlTb25hbXVGaWx0ZXI8VG9rZW5CYXNlU2NoZW1hLCBuZXZlciwgbmV2ZXI+PigpLFxuICB9KVxuICAucGFydGlhbCgpO1xuZXhwb3J0IHR5cGUgVG9rZW5CYXNlTGlzdFBhcmFtcyA9IHouaW5mZXI8dHlwZW9mIFRva2VuQmFzZUxpc3RQYXJhbXM+O1xuXG4vLyBTdWJzZXRzOiBSZXF1ZXN0TG9nXG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N1YnNldEEgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LmludCgpLFxuICBjcmVhdGVkX2F0OiB6LmRhdGUoKSxcbiAgdG9rZW5fbmFtZTogei5zdHJpbmcoKS5tYXgoMTAwKS5udWxsYWJsZSgpLFxuICBwcm9qZWN0X25hbWU6IHouc3RyaW5nKCkubWF4KDUwKS5udWxsYWJsZSgpLFxuICBtb2RlbF9uYW1lOiB6LnN0cmluZygpLm1heCgyNTUpLm51bGxhYmxlKCksXG4gIHJlcXVlc3RlZF9tb2RlbF9uYW1lOiB6LnN0cmluZygpLm1heCgyNTUpLm51bGxhYmxlKCksXG4gIGZhbGxiYWNrX2NvdW50OiB6LmludCgpLm51bGxhYmxlKCksXG4gIHVzZXJfcHJvbXB0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHN5c3RlbV9wcm9tcHQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgcmVzcG9uc2U6IHouc3RyaW5nKCksXG4gIGlucHV0X3Rva2Vuczogei5pbnQoKSxcbiAgb3V0cHV0X3Rva2Vuczogei5pbnQoKSxcbiAgY2FjaGVfcmVhZF90b2tlbnM6IHouaW50KCksXG4gIGNhY2hlX2NyZWF0aW9uX3Rva2Vuczogei5pbnQoKSxcbiAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBkdXJhdGlvbl9tczogei5pbnQoKSxcbiAgdHRmdF9tczogei5pbnQoKSxcbiAgY29zdF91c2Q6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY29zdF9zb3VyY2U6IHouc3RyaW5nKCkubWF4KDIwKS5udWxsYWJsZSgpLFxuICBpbWFnZV9jb3N0X3VzZDogei5pbnQoKS5udWxsYWJsZSgpLFxuICBpbWFnZV9jb3N0X21ldGhvZDogei5zdHJpbmcoKS5tYXgoMTAwKS5udWxsYWJsZSgpLFxuICBlZmZvcnQ6IHouc3RyaW5nKCkubWF4KDEwKS5udWxsYWJsZSgpLFxuICBoaXN0b3J5OiBIaXN0b3J5SXRlbXMubnVsbGFibGUoKSxcbiAgdG9vbHM6IFRvb2xEZWZpbml0aW9ucy5udWxsYWJsZSgpLFxuICBzdGF0dXM6IFJlcXVlc3RMb2dTdGF0dXMsXG4gIGVycm9yX21lc3NhZ2U6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgdG9vbF9jYWxsX2NvdW50OiB6LmludCgpLFxuICBpc19pbWFnZV9nZW5lcmF0aW9uOiB6LmJvb2xlYW4oKSxcbn0pO1xuZXhwb3J0IHR5cGUgUmVxdWVzdExvZ1N1YnNldEEgPSB6LmluZmVyPHR5cGVvZiBSZXF1ZXN0TG9nU3Vic2V0QT47XG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N1YnNldFAgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LmludCgpLFxuICBjcmVhdGVkX2F0OiB6LmRhdGUoKSxcbiAgdG9rZW5fbmFtZTogei5zdHJpbmcoKS5tYXgoMTAwKS5udWxsYWJsZSgpLFxuICBwcm9qZWN0X25hbWU6IHouc3RyaW5nKCkubWF4KDUwKS5udWxsYWJsZSgpLFxuICBtb2RlbF9uYW1lOiB6LnN0cmluZygpLm1heCgyNTUpLm51bGxhYmxlKCksXG4gIHJlcXVlc3RlZF9tb2RlbF9uYW1lOiB6LnN0cmluZygpLm1heCgyNTUpLm51bGxhYmxlKCksXG4gIGZhbGxiYWNrX2NvdW50OiB6LmludCgpLm51bGxhYmxlKCksXG4gIGlucHV0X3Rva2Vuczogei5pbnQoKSxcbiAgb3V0cHV0X3Rva2Vuczogei5pbnQoKSxcbiAgY2FjaGVfcmVhZF90b2tlbnM6IHouaW50KCksXG4gIGNhY2hlX2NyZWF0aW9uX3Rva2Vuczogei5pbnQoKSxcbiAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBkdXJhdGlvbl9tczogei5pbnQoKSxcbiAgdHRmdF9tczogei5pbnQoKSxcbiAgY29zdF91c2Q6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY29zdF9zb3VyY2U6IHouc3RyaW5nKCkubWF4KDIwKS5udWxsYWJsZSgpLFxuICBpbWFnZV9jb3N0X3VzZDogei5pbnQoKS5udWxsYWJsZSgpLFxuICBpbWFnZV9jb3N0X21ldGhvZDogei5zdHJpbmcoKS5tYXgoMTAwKS5udWxsYWJsZSgpLFxuICBlZmZvcnQ6IHouc3RyaW5nKCkubWF4KDEwKS5udWxsYWJsZSgpLFxuICBzdGF0dXM6IFJlcXVlc3RMb2dTdGF0dXMsXG4gIHRvb2xfY2FsbF9jb3VudDogei5pbnQoKSxcbiAgaXNfaW1hZ2VfZ2VuZXJhdGlvbjogei5ib29sZWFuKCksXG59KTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdWJzZXRQID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ1N1YnNldFA+O1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdWJzZXRDID0gei5vYmplY3Qoe1xuICBpZDogei5pbnQoKSxcbiAgdG9rZW5fbmFtZTogei5zdHJpbmcoKS5tYXgoMTAwKS5udWxsYWJsZSgpLFxuICBtb2RlbF9uYW1lOiB6LnN0cmluZygpLm1heCgyNTUpLm51bGxhYmxlKCksXG4gIGlucHV0X3Rva2Vuczogei5pbnQoKSxcbiAgb3V0cHV0X3Rva2Vuczogei5pbnQoKSxcbiAgY2FjaGVfcmVhZF90b2tlbnM6IHouaW50KCksXG4gIGNhY2hlX2NyZWF0aW9uX3Rva2Vuczogei5pbnQoKSxcbiAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjb3N0X3VzZDogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjb3N0X3NvdXJjZTogei5zdHJpbmcoKS5tYXgoMjApLm51bGxhYmxlKCksXG59KTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdWJzZXRDID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ1N1YnNldEM+O1xuZXhwb3J0IHR5cGUgUmVxdWVzdExvZ1N1YnNldE1hcHBpbmcgPSB7XG4gIEE6IFJlcXVlc3RMb2dTdWJzZXRBO1xuICBQOiBSZXF1ZXN0TG9nU3Vic2V0UDtcbiAgQzogUmVxdWVzdExvZ1N1YnNldEM7XG59O1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdWJzZXRLZXkgPSB6LmVudW0oW1wiQVwiLCBcIlBcIiwgXCJDXCJdKTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdWJzZXRLZXkgPSB6LmluZmVyPHR5cGVvZiBSZXF1ZXN0TG9nU3Vic2V0S2V5PjtcblxuLy8gU3Vic2V0czogUmVxdWVzdExvZ1N0ZXBcbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nU3RlcFN1YnNldEEgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LmludCgpLFxuICBjcmVhdGVkX2F0OiB6LmRhdGUoKSxcbiAgc3RlcF9pbmRleDogei5pbnQoKSxcbiAgdHlwZTogUmVxdWVzdExvZ1N0ZXBUeXBlLFxuICBtb2RlbF9uYW1lOiB6LnN0cmluZygpLm1heCgyNTUpLm51bGxhYmxlKCksXG4gIHJlcXVlc3RlZF9tb2RlbF9uYW1lOiB6LnN0cmluZygpLm1heCgyNTUpLm51bGxhYmxlKCksXG4gIGZhbGxiYWNrX2NvdW50OiB6LmludCgpLm51bGxhYmxlKCksXG4gIGlucHV0X3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBvdXRwdXRfdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNhY2hlX3JlYWRfdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNhY2hlX2NyZWF0aW9uX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNvc3RfdXNkOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNvc3Rfc291cmNlOiB6LnN0cmluZygpLm1heCgyMCkubnVsbGFibGUoKSxcbiAgZHVyYXRpb25fbXM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgdHRmdF9tczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBmaW5pc2hfcmVhc29uOiB6LnN0cmluZygpLm1heCgyMCkubnVsbGFibGUoKSxcbiAgcmVhc29uaW5nX3RleHQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgcmVhc29uaW5nX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICB0b29sX2NhbGxfaW5kZXg6IHouaW50KCkubnVsbGFibGUoKSxcbiAgdG9vbF9jYWxsX2lkOiB6LnN0cmluZygpLm1heCgxMDApLm51bGxhYmxlKCksXG4gIHRvb2xfbmFtZTogei5zdHJpbmcoKS5tYXgoMTAwKS5udWxsYWJsZSgpLFxuICB0b29sX2FyZ3M6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgdG9vbF9yZXN1bHQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgdG9vbF9kdXJhdGlvbl9tczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBlcnJvcjogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxufSk7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3RlcFN1YnNldEEgPSB6LmluZmVyPHR5cGVvZiBSZXF1ZXN0TG9nU3RlcFN1YnNldEE+O1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdGVwU3Vic2V0VCA9IHoub2JqZWN0KHtcbiAgaWQ6IHouaW50KCksXG4gIGNyZWF0ZWRfYXQ6IHouZGF0ZSgpLFxuICBzdGVwX2luZGV4OiB6LmludCgpLFxuICB0eXBlOiBSZXF1ZXN0TG9nU3RlcFR5cGUsXG4gIG1vZGVsX25hbWU6IHouc3RyaW5nKCkubWF4KDI1NSkubnVsbGFibGUoKSxcbiAgcmVxdWVzdGVkX21vZGVsX25hbWU6IHouc3RyaW5nKCkubWF4KDI1NSkubnVsbGFibGUoKSxcbiAgZmFsbGJhY2tfY291bnQ6IHouaW50KCkubnVsbGFibGUoKSxcbiAgaW5wdXRfdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIG91dHB1dF90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY2FjaGVfcmVhZF90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY29zdF91c2Q6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY29zdF9zb3VyY2U6IHouc3RyaW5nKCkubWF4KDIwKS5udWxsYWJsZSgpLFxuICBkdXJhdGlvbl9tczogei5pbnQoKS5udWxsYWJsZSgpLFxuICB0dGZ0X21zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGZpbmlzaF9yZWFzb246IHouc3RyaW5nKCkubWF4KDIwKS5udWxsYWJsZSgpLFxuICByZWFzb25pbmdfdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIHRvb2xfY2FsbF9pbmRleDogei5pbnQoKS5udWxsYWJsZSgpLFxuICB0b29sX2NhbGxfaWQ6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgdG9vbF9uYW1lOiB6LnN0cmluZygpLm1heCgxMDApLm51bGxhYmxlKCksXG4gIHRvb2xfZHVyYXRpb25fbXM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgZXJyb3I6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUmVxdWVzdExvZ1N0ZXBTdWJzZXRUID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ1N0ZXBTdWJzZXRUPjtcbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nU3RlcFN1YnNldEkgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LmludCgpLFxuICB0b29sX2FyZ3M6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUmVxdWVzdExvZ1N0ZXBTdWJzZXRJID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ1N0ZXBTdWJzZXRJPjtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdGVwU3Vic2V0TWFwcGluZyA9IHtcbiAgQTogUmVxdWVzdExvZ1N0ZXBTdWJzZXRBO1xuICBUOiBSZXF1ZXN0TG9nU3RlcFN1YnNldFQ7XG4gIEk6IFJlcXVlc3RMb2dTdGVwU3Vic2V0STtcbn07XG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N0ZXBTdWJzZXRLZXkgPSB6LmVudW0oW1wiQVwiLCBcIlRcIiwgXCJJXCJdKTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdGVwU3Vic2V0S2V5ID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ1N0ZXBTdWJzZXRLZXk+O1xuXG4vLyBTdWJzZXRzOiBUb2tlblxuZXhwb3J0IGNvbnN0IFRva2VuU3Vic2V0QSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouaW50KCksXG4gIGNyZWF0ZWRfYXQ6IHouZGF0ZSgpLFxuICBwcm92aWRlcjogei5zdHJpbmcoKS5tYXgoMjApLFxuICBjcmVkZW50aWFsczogVG9rZW5DcmVkZW50aWFscyxcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgYWN0aXZlOiB6LmJvb2xlYW4oKSxcbiAgb3JkOiB6LmludCgpLFxuICBxdW90YV90aHJlc2hvbGQ6IHouaW50KCkubnVsbGFibGUoKSxcbiAgd2VpZ2h0OiB6LmludCgpLFxufSk7XG5leHBvcnQgdHlwZSBUb2tlblN1YnNldEEgPSB6LmluZmVyPHR5cGVvZiBUb2tlblN1YnNldEE+O1xuZXhwb3J0IHR5cGUgVG9rZW5TdWJzZXRNYXBwaW5nID0ge1xuICBBOiBUb2tlblN1YnNldEE7XG59O1xuZXhwb3J0IGNvbnN0IFRva2VuU3Vic2V0S2V5ID0gei5lbnVtKFtcIkFcIl0pO1xuZXhwb3J0IHR5cGUgVG9rZW5TdWJzZXRLZXkgPSB6LmluZmVyPHR5cGVvZiBUb2tlblN1YnNldEtleT47XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFXQSxNQUFNLGVBQWUsRUFBRSxNQUNyQixFQUFFLE9BQU87Q0FDUCxNQUFNLEVBQUUsT0FBTztDQUNmLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzFCLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxTQUFTO0NBQzlCLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzFCLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQy9CLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzdCLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0FBQzlCLENBQUMsQ0FDSDtBQUlBLE1BQU0sbUJBQW1CLEVBQUUsTUFBTSxDQUMvQixFQUFFLE9BQU87Q0FDUCxhQUFhLEVBQUUsT0FBTztDQUN0QixjQUFjLEVBQUUsT0FBTztDQUN2QixXQUFXLEVBQUUsT0FBTztDQUNwQixhQUFhLEVBQUUsT0FBTztBQUN4QixDQUFDLEdBQ0QsRUFBRSxPQUFPO0NBQ1AsYUFBYSxFQUFFLE9BQU87Q0FDdEIsY0FBYyxFQUFFLE9B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
|
|
406
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29uYW11LmdlbmVyYXRlZC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBwbGljYXRpb24vc29uYW11LmdlbmVyYXRlZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBnZW5lcmF0ZWRcbiAqIOyngeygkSDsiJjsoJXtlZjsp4Ag66eI7IS47JqULlxuICovXG5cbi8qIG94bGludC1kaXNhYmxlICovXG5cbmltcG9ydCB7IHpBcnJheWFibGUsIFNvbmFtdVF1ZXJ5TW9kZSwgQXBwbHlTb25hbXVGaWx0ZXIgfSBmcm9tIFwic29uYW11XCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG4vLyBDdXN0b21TY2FsYXI6IEhpc3RvcnlJdGVtc1xuY29uc3QgSGlzdG9yeUl0ZW1zID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHouc3RyaW5nKCksXG4gICAgcm9sZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGNvbnRlbnQ6IHoudW5rbm93bigpLm9wdGlvbmFsKCksXG4gICAgbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGFyZ3VtZW50czogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGNhbGxfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBvdXRwdXQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSksXG4pO1xudHlwZSBIaXN0b3J5SXRlbXMgPSB6LmluZmVyPHR5cGVvZiBIaXN0b3J5SXRlbXM+O1xuXG4vLyBDdXN0b21TY2FsYXI6IFRva2VuQ3JlZGVudGlhbHNcbmNvbnN0IFRva2VuQ3JlZGVudGlhbHMgPSB6LnVuaW9uKFtcbiAgei5vYmplY3Qoe1xuICAgIGFjY2Vzc1Rva2VuOiB6LnN0cmluZygpLFxuICAgIHJlZnJlc2hUb2tlbjogei5zdHJpbmcoKSxcbiAgICBleHBpcmVzQXQ6IHoubnVtYmVyKCksXG4gICAgYWNjb3VudFV1aWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgYWNjZXNzVG9rZW46IHouc3RyaW5nKCksXG4gICAgcmVmcmVzaFRva2VuOiB6LnN0cmluZygpLFxuICAgIGlkVG9rZW46IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBhY2Nlc3NUb2tlbkV4cGlyZXNBdDogei5udW1iZXIoKSxcbiAgICBpZFRva2VuRXhwaXJlc0F0OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgYWNjb3VudElkOiB6LnN0cmluZygpLFxuICAgIHBsYW5UeXBlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pLFxuXSk7XG50eXBlIFRva2VuQ3JlZGVudGlhbHMgPSB6LmluZmVyPHR5cGVvZiBUb2tlbkNyZWRlbnRpYWxzPjtcblxuLy8gQ3VzdG9tU2NhbGFyOiBUb29sRGVmaW5pdGlvbnNcbmNvbnN0IFRvb2xEZWZpbml0aW9ucyA9IHouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgaW5wdXRTY2hlbWE6IHoudW5rbm93bigpLFxuICB9KSxcbik7XG50eXBlIFRvb2xEZWZpbml0aW9ucyA9IHouaW5mZXI8dHlwZW9mIFRvb2xEZWZpbml0aW9ucz47XG5cbi8vIEVudW1zOiBSZXF1ZXN0TG9nXG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ09yZGVyQnkgPSB6XG4gIC5lbnVtKFtcbiAgICBcImlkLWRlc2NcIixcbiAgICBcImlkLWFzY1wiLFxuICAgIFwiY3JlYXRlZF9hdC1kZXNjXCIsXG4gICAgXCJjcmVhdGVkX2F0LWFzY1wiLFxuICAgIFwidHRmdF9tcy1kZXNjXCIsXG4gICAgXCJ0dGZ0X21zLWFzY1wiLFxuICAgIFwiZHVyYXRpb25fbXMtZGVzY1wiLFxuICAgIFwiZHVyYXRpb25fbXMtYXNjXCIsXG4gICAgXCJpbnB1dF90b2tlbnMtZGVzY1wiLFxuICAgIFwiaW5wdXRfdG9rZW5zLWFzY1wiLFxuICAgIFwib3V0cHV0X3Rva2Vucy1kZXNjXCIsXG4gICAgXCJvdXRwdXRfdG9rZW5zLWFzY1wiLFxuICAgIFwiY2FjaGVfcmVhZF90b2tlbnMtZGVzY1wiLFxuICAgIFwiY2FjaGVfcmVhZF90b2tlbnMtYXNjXCIsXG4gICAgXCJjYWNoZV9jcmVhdGlvbl90b2tlbnMtZGVzY1wiLFxuICAgIFwiY2FjaGVfY3JlYXRpb25fdG9rZW5zLWFzY1wiLFxuICAgIFwiY29zdF91c2QtZGVzY1wiLFxuICAgIFwiY29zdF91c2QtYXNjXCIsXG4gIF0pXG4gIC5kZXNjcmliZShcIlJlcXVlc3RMb2dPcmRlckJ5XCIpO1xuZXhwb3J0IHR5cGUgUmVxdWVzdExvZ09yZGVyQnkgPSB6LmluZmVyPHR5cGVvZiBSZXF1ZXN0TG9nT3JkZXJCeT47XG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ09yZGVyQnlMYWJlbCA9IHtcbiAgXCJpZC1kZXNjXCI6IFwiSUTstZzsi6DsiJxcIixcbiAgXCJpZC1hc2NcIjogXCJJROyYpOuemOuQnOyInFwiLFxuICBcImNyZWF0ZWRfYXQtZGVzY1wiOiBcIuuTseuhneydvOyLnOy1nOyLoOyInFwiLFxuICBcImNyZWF0ZWRfYXQtYXNjXCI6IFwi65Ox66Gd7J287Iuc7Jik656Y65Cc7IicXCIsXG4gIFwidHRmdF9tcy1kZXNjXCI6IFwiVFRGVOq4tOyInFwiLFxuICBcInR0ZnRfbXMtYXNjXCI6IFwiVFRGVOynp+ydgOyInFwiLFxuICBcImR1cmF0aW9uX21zLWRlc2NcIjogXCLshozsmpTsi5zqsITquLTsiJxcIixcbiAgXCJkdXJhdGlvbl9tcy1hc2NcIjogXCLshozsmpTsi5zqsITsp6fsnYDsiJxcIixcbiAgXCJpbnB1dF90b2tlbnMtZGVzY1wiOiBcIuyeheugpe2GoO2BsOunjuydgOyInFwiLFxuICBcImlucHV0X3Rva2Vucy1hc2NcIjogXCLsnoXroKXthqDtgbDsoIHsnYDsiJxcIixcbiAgXCJvdXRwdXRfdG9rZW5zLWRlc2NcIjogXCLstpzroKXthqDtgbDrp47snYDsiJxcIixcbiAgXCJvdXRwdXRfdG9rZW5zLWFzY1wiOiBcIuy2nOugpe2GoO2BsOyggeydgOyInFwiLFxuICBcImNhY2hlX3JlYWRfdG9rZW5zLWRlc2NcIjogXCLsupDsi5zsnb3quLDrp47snYDsiJxcIixcbiAgXCJjYWNoZV9yZWFkX3Rva2Vucy1hc2NcIjogXCLsupDsi5zsnb3quLDsoIHsnYDsiJxcIixcbiAgXCJjYWNoZV9jcmVhdGlvbl90b2tlbnMtZGVzY1wiOiBcIuy6kOyLnOyDneyEseunjuydgOyInFwiLFxuICBcImNhY2hlX2NyZWF0aW9uX3Rva2Vucy1hc2NcIjogXCLsupDsi5zsg53shLHsoIHsnYDsiJxcIixcbiAgXCJjb3N0X3VzZC1kZXNjXCI6IFwi67mE7Jqp64aS7J2A7IicXCIsXG4gIFwiY29zdF91c2QtYXNjXCI6IFwi67mE7Jqp64Ku7J2A7IicXCIsXG59O1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTZWFyY2hGaWVsZCA9IHpcbiAgLmVudW0oW1wiaWRcIiwgXCJ0b2tlbl9uYW1lXCIsIFwidXNlcl9wcm9tcHRcIl0pXG4gIC5kZXNjcmliZShcIlJlcXVlc3RMb2dTZWFyY2hGaWVsZFwiKTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTZWFyY2hGaWVsZCA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dTZWFyY2hGaWVsZD47XG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1NlYXJjaEZpZWxkTGFiZWwgPSB7XG4gIGlkOiBcIklEXCIsXG4gIHRva2VuX25hbWU6IFwi7Yag7YGw7J2066aEXCIsXG4gIHVzZXJfcHJvbXB0OiBcIuyCrOyaqeyekCDtlITroaztlITtirhcIixcbn07XG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N0YXR1cyA9IHpcbiAgLmVudW0oW1wicnVubmluZ1wiLCBcInN1Y2NlZWRlZFwiLCBcImVycm9yXCIsIFwiYWJvcnRlZFwiXSlcbiAgLmRlc2NyaWJlKFwiUmVxdWVzdExvZ1N0YXR1c1wiKTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdGF0dXMgPSB6LmluZmVyPHR5cGVvZiBSZXF1ZXN0TG9nU3RhdHVzPjtcbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nU3RhdHVzTGFiZWwgPSB7XG4gIHJ1bm5pbmc6IFwi7Iuk7ZaJIOykkVwiLFxuICBzdWNjZWVkZWQ6IFwi7ISx6rO1XCIsXG4gIGVycm9yOiBcIuyXkOufrFwiLFxuICBhYm9ydGVkOiBcIuykkeuLqFwiLFxufTtcblxuLy8gRW51bXM6IFJlcXVlc3RMb2dTdGVwXG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N0ZXBUeXBlID0gei5lbnVtKFtcImdlbmVyYXRlXCIsIFwidG9vbF9jYWxsXCJdKS5kZXNjcmliZShcIlJlcXVlc3RMb2dTdGVwVHlwZVwiKTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdGVwVHlwZSA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dTdGVwVHlwZT47XG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N0ZXBUeXBlTGFiZWwgPSB7IGdlbmVyYXRlOiBcIkxMTSDsg53shLFcIiwgdG9vbF9jYWxsOiBcIlRvb2wg7Zi47LacXCIgfTtcbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nU3RlcE9yZGVyQnkgPSB6LmVudW0oW1wiaWQtYXNjXCJdKS5kZXNjcmliZShcIlJlcXVlc3RMb2dTdGVwT3JkZXJCeVwiKTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdGVwT3JkZXJCeSA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dTdGVwT3JkZXJCeT47XG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N0ZXBPcmRlckJ5TGFiZWwgPSB7IFwiaWQtYXNjXCI6IFwiSUTsiJxcIiB9O1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdGVwU2VhcmNoRmllbGQgPSB6LmVudW0oW1wiaWRcIl0pLmRlc2NyaWJlKFwiUmVxdWVzdExvZ1N0ZXBTZWFyY2hGaWVsZFwiKTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdGVwU2VhcmNoRmllbGQgPSB6LmluZmVyPHR5cGVvZiBSZXF1ZXN0TG9nU3RlcFNlYXJjaEZpZWxkPjtcbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nU3RlcFNlYXJjaEZpZWxkTGFiZWwgPSB7IGlkOiBcIklEXCIgfTtcblxuLy8gRW51bXM6IFNldHRpbmdcbmV4cG9ydCBjb25zdCBTZXR0aW5nT3JkZXJCeSA9IHouZW51bShbXCJrZXktYXNjXCJdKS5kZXNjcmliZShcIlNldHRpbmdPcmRlckJ5XCIpO1xuZXhwb3J0IHR5cGUgU2V0dGluZ09yZGVyQnkgPSB6LmluZmVyPHR5cGVvZiBTZXR0aW5nT3JkZXJCeT47XG5leHBvcnQgY29uc3QgU2V0dGluZ09yZGVyQnlMYWJlbCA9IHsgXCJrZXktYXNjXCI6IFwi7YKk7IicXCIgfTtcbmV4cG9ydCBjb25zdCBTZXR0aW5nU2VhcmNoRmllbGQgPSB6LmVudW0oW1wia2V5XCJdKS5kZXNjcmliZShcIlNldHRpbmdTZWFyY2hGaWVsZFwiKTtcbmV4cG9ydCB0eXBlIFNldHRpbmdTZWFyY2hGaWVsZCA9IHouaW5mZXI8dHlwZW9mIFNldHRpbmdTZWFyY2hGaWVsZD47XG5leHBvcnQgY29uc3QgU2V0dGluZ1NlYXJjaEZpZWxkTGFiZWwgPSB7IGtleTogXCLtgqRcIiB9O1xuXG4vLyBFbnVtczogVG9rZW5cbmV4cG9ydCBjb25zdCBUb2tlbk9yZGVyQnkgPSB6LmVudW0oW1wiaWQtZGVzY1wiLCBcIm9yZC1hc2NcIl0pLmRlc2NyaWJlKFwiVG9rZW5PcmRlckJ5XCIpO1xuZXhwb3J0IHR5cGUgVG9rZW5PcmRlckJ5ID0gei5pbmZlcjx0eXBlb2YgVG9rZW5PcmRlckJ5PjtcbmV4cG9ydCBjb25zdCBUb2tlbk9yZGVyQnlMYWJlbCA9IHsgXCJpZC1kZXNjXCI6IFwiSUTstZzsi6DsiJxcIiwgXCJvcmQtYXNjXCI6IFwi7Iic7ISc7IicXCIgfTtcbmV4cG9ydCBjb25zdCBUb2tlblNlYXJjaEZpZWxkID0gei5lbnVtKFtcImlkXCIsIFwibmFtZVwiXSkuZGVzY3JpYmUoXCJUb2tlblNlYXJjaEZpZWxkXCIpO1xuZXhwb3J0IHR5cGUgVG9rZW5TZWFyY2hGaWVsZCA9IHouaW5mZXI8dHlwZW9mIFRva2VuU2VhcmNoRmllbGQ+O1xuZXhwb3J0IGNvbnN0IFRva2VuU2VhcmNoRmllbGRMYWJlbCA9IHsgaWQ6IFwiSURcIiwgbmFtZTogXCLsnbTrpoRcIiB9O1xuXG4vLyBCYXNlU2NoZW1hOiBSZXF1ZXN0TG9nXG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ0Jhc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LmludCgpLFxuICBjcmVhdGVkX2F0OiB6LmRhdGUoKSxcbiAgdG9rZW5fbmFtZTogei5zdHJpbmcoKS5tYXgoMTAwKS5udWxsYWJsZSgpLFxuICBwcm9qZWN0X25hbWU6IHouc3RyaW5nKCkubWF4KDUwKS5udWxsYWJsZSgpLFxuICBtb2RlbF9uYW1lOiB6LnN0cmluZygpLm1heCgyNTUpLm51bGxhYmxlKCksXG4gIHJlcXVlc3RlZF9tb2RlbF9uYW1lOiB6LnN0cmluZygpLm1heCgyNTUpLm51bGxhYmxlKCksXG4gIGZhbGxiYWNrX2NvdW50OiB6LmludCgpLm51bGxhYmxlKCksXG4gIHVzZXJfcHJvbXB0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHN5c3RlbV9wcm9tcHQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgcmVzcG9uc2U6IHouc3RyaW5nKCksXG4gIGlucHV0X3Rva2Vuczogei5pbnQoKSxcbiAgb3V0cHV0X3Rva2Vuczogei5pbnQoKSxcbiAgY2FjaGVfcmVhZF90b2tlbnM6IHouaW50KCksXG4gIGNhY2hlX2NyZWF0aW9uX3Rva2Vuczogei5pbnQoKSxcbiAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBkdXJhdGlvbl9tczogei5pbnQoKSxcbiAgdHRmdF9tczogei5pbnQoKSxcbiAgY29zdF91c2Q6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY29zdF9zb3VyY2U6IHouc3RyaW5nKCkubWF4KDIwKS5udWxsYWJsZSgpLFxuICBpbWFnZV9jb3N0X3VzZDogei5pbnQoKS5udWxsYWJsZSgpLFxuICBpbWFnZV9jb3N0X21ldGhvZDogei5zdHJpbmcoKS5tYXgoMTAwKS5udWxsYWJsZSgpLFxuICBlZmZvcnQ6IHouc3RyaW5nKCkubWF4KDEwKS5udWxsYWJsZSgpLFxuICBoaXN0b3J5OiBIaXN0b3J5SXRlbXMubnVsbGFibGUoKSxcbiAgdG9vbHM6IFRvb2xEZWZpbml0aW9ucy5udWxsYWJsZSgpLFxuICBzdGF0dXM6IFJlcXVlc3RMb2dTdGF0dXMsXG4gIGVycm9yX21lc3NhZ2U6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgdG9vbF9jYWxsX2NvdW50OiB6LmludCgpLFxuICBpc19pbWFnZV9nZW5lcmF0aW9uOiB6LmJvb2xlYW4oKSxcbn0pO1xuZXhwb3J0IHR5cGUgUmVxdWVzdExvZ0Jhc2VTY2hlbWEgPSB6LmluZmVyPHR5cGVvZiBSZXF1ZXN0TG9nQmFzZVNjaGVtYT4gJiB7XG4gIHJlYWRvbmx5IF9faGFzRGVmYXVsdF9fOiByZWFkb25seSBbXG4gICAgXCJjcmVhdGVkX2F0XCIsXG4gICAgXCJ0b2tlbl9uYW1lXCIsXG4gICAgXCJwcm9qZWN0X25hbWVcIixcbiAgICBcIm1vZGVsX25hbWVcIixcbiAgICBcInJlcXVlc3RlZF9tb2RlbF9uYW1lXCIsXG4gICAgXCJmYWxsYmFja19jb3VudFwiLFxuICAgIFwidXNlcl9wcm9tcHRcIixcbiAgICBcInN5c3RlbV9wcm9tcHRcIixcbiAgICBcInJlc3BvbnNlXCIsXG4gICAgXCJpbnB1dF90b2tlbnNcIixcbiAgICBcIm91dHB1dF90b2tlbnNcIixcbiAgICBcImNhY2hlX3JlYWRfdG9rZW5zXCIsXG4gICAgXCJjYWNoZV9jcmVhdGlvbl90b2tlbnNcIixcbiAgICBcImNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuc1wiLFxuICAgIFwiY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIsXG4gICAgXCJkdXJhdGlvbl9tc1wiLFxuICAgIFwidHRmdF9tc1wiLFxuICAgIFwiY29zdF91c2RcIixcbiAgICBcImNvc3Rfc291cmNlXCIsXG4gICAgXCJpbWFnZV9jb3N0X3VzZFwiLFxuICAgIFwiaW1hZ2VfY29zdF9tZXRob2RcIixcbiAgICBcImVmZm9ydFwiLFxuICAgIFwiaGlzdG9yeVwiLFxuICAgIFwidG9vbHNcIixcbiAgICBcInN0YXR1c1wiLFxuICAgIFwiZXJyb3JfbWVzc2FnZVwiLFxuICAgIFwidG9vbF9jYWxsX2NvdW50XCIsXG4gICAgXCJpc19pbWFnZV9nZW5lcmF0aW9uXCIsXG4gICAgXCJpZFwiLFxuICBdO1xufTtcblxuLy8gQmFzZVNjaGVtYTogUmVxdWVzdExvZ1N0ZXBcbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nU3RlcEJhc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LmludCgpLFxuICBjcmVhdGVkX2F0OiB6LmRhdGUoKSxcbiAgcmVxdWVzdF9sb2dfaWQ6IHouaW50KCksXG4gIHN0ZXBfaW5kZXg6IHouaW50KCksXG4gIHR5cGU6IFJlcXVlc3RMb2dTdGVwVHlwZSxcbiAgbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICBmYWxsYmFja19jb3VudDogei5pbnQoKS5udWxsYWJsZSgpLFxuICBpbnB1dF90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgb3V0cHV0X3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9yZWFkX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjb3N0X3VzZDogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjb3N0X3NvdXJjZTogei5zdHJpbmcoKS5tYXgoMjApLm51bGxhYmxlKCksXG4gIGR1cmF0aW9uX21zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIHR0ZnRfbXM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgZmluaXNoX3JlYXNvbjogei5zdHJpbmcoKS5tYXgoMjApLm51bGxhYmxlKCksXG4gIHJlYXNvbmluZ190ZXh0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHJlYXNvbmluZ190b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgdG9vbF9jYWxsX2luZGV4OiB6LmludCgpLm51bGxhYmxlKCksXG4gIHRvb2xfY2FsbF9pZDogei5zdHJpbmcoKS5tYXgoMTAwKS5udWxsYWJsZSgpLFxuICB0b29sX25hbWU6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgdG9vbF9hcmdzOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHRvb2xfcmVzdWx0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHRvb2xfZHVyYXRpb25fbXM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgZXJyb3I6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUmVxdWVzdExvZ1N0ZXBCYXNlU2NoZW1hID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ1N0ZXBCYXNlU2NoZW1hPiAmIHtcbiAgcmVhZG9ubHkgX19oYXNEZWZhdWx0X186IHJlYWRvbmx5IFtcbiAgICBcImNyZWF0ZWRfYXRcIixcbiAgICBcIm1vZGVsX25hbWVcIixcbiAgICBcInJlcXVlc3RlZF9tb2RlbF9uYW1lXCIsXG4gICAgXCJmYWxsYmFja19jb3VudFwiLFxuICAgIFwiaW5wdXRfdG9rZW5zXCIsXG4gICAgXCJvdXRwdXRfdG9rZW5zXCIsXG4gICAgXCJjYWNoZV9yZWFkX3Rva2Vuc1wiLFxuICAgIFwiY2FjaGVfY3JlYXRpb25fdG9rZW5zXCIsXG4gICAgXCJjYWNoZV9jcmVhdGlvbl81bV90b2tlbnNcIixcbiAgICBcImNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vuc1wiLFxuICAgIFwiY29zdF91c2RcIixcbiAgICBcImNvc3Rfc291cmNlXCIsXG4gICAgXCJkdXJhdGlvbl9tc1wiLFxuICAgIFwidHRmdF9tc1wiLFxuICAgIFwiZmluaXNoX3JlYXNvblwiLFxuICAgIFwicmVhc29uaW5nX3RleHRcIixcbiAgICBcInJlYXNvbmluZ190b2tlbnNcIixcbiAgICBcInRvb2xfY2FsbF9pbmRleFwiLFxuICAgIFwidG9vbF9jYWxsX2lkXCIsXG4gICAgXCJ0b29sX25hbWVcIixcbiAgICBcInRvb2xfYXJnc1wiLFxuICAgIFwidG9vbF9yZXN1bHRcIixcbiAgICBcInRvb2xfZHVyYXRpb25fbXNcIixcbiAgICBcImVycm9yXCIsXG4gICAgXCJpZFwiLFxuICBdO1xufTtcblxuLy8gQmFzZVNjaGVtYTogU2V0dGluZ1xuZXhwb3J0IGNvbnN0IFNldHRpbmdCYXNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogei5pbnQoKSxcbiAgY3JlYXRlZF9hdDogei5kYXRlKCksXG4gIGtleTogei5zdHJpbmcoKS5tYXgoMTAwKSxcbiAgdmFsdWU6IHouc3RyaW5nKCksXG4gIHVwZGF0ZWRfYXQ6IHouZGF0ZSgpLm51bGxhYmxlKCksXG59KTtcbmV4cG9ydCB0eXBlIFNldHRpbmdCYXNlU2NoZW1hID0gei5pbmZlcjx0eXBlb2YgU2V0dGluZ0Jhc2VTY2hlbWE+ICYge1xuICByZWFkb25seSBfX2hhc0RlZmF1bHRfXzogcmVhZG9ubHkgW1wiY3JlYXRlZF9hdFwiLCBcInVwZGF0ZWRfYXRcIiwgXCJpZFwiXTtcbn07XG5cbi8vIEJhc2VTY2hlbWE6IFRva2VuXG5leHBvcnQgY29uc3QgVG9rZW5CYXNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogei5pbnQoKSxcbiAgY3JlYXRlZF9hdDogei5kYXRlKCksXG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLm1heCgyMCksXG4gIGNyZWRlbnRpYWxzOiBUb2tlbkNyZWRlbnRpYWxzLFxuICBuYW1lOiB6LnN0cmluZygpLFxuICBhY3RpdmU6IHouYm9vbGVhbigpLFxuICBvcmQ6IHouaW50KCksXG4gIHF1b3RhX3RocmVzaG9sZDogei5pbnQoKS5udWxsYWJsZSgpLFxuICB3ZWlnaHQ6IHouaW50KCksXG59KTtcbmV4cG9ydCB0eXBlIFRva2VuQmFzZVNjaGVtYSA9IHouaW5mZXI8dHlwZW9mIFRva2VuQmFzZVNjaGVtYT4gJiB7XG4gIHJlYWRvbmx5IF9faGFzRGVmYXVsdF9fOiByZWFkb25seSBbXG4gICAgXCJjcmVhdGVkX2F0XCIsXG4gICAgXCJhY3RpdmVcIixcbiAgICBcIm9yZFwiLFxuICAgIFwicXVvdGFfdGhyZXNob2xkXCIsXG4gICAgXCJ3ZWlnaHRcIixcbiAgICBcImlkXCIsXG4gIF07XG59O1xuXG4vLyBCYXNlTGlzdFBhcmFtczogUmVxdWVzdExvZ1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dCYXNlTGlzdFBhcmFtcyA9IHpcbiAgLm9iamVjdCh7XG4gICAgbnVtOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG4gICAgcGFnZTogei5udW1iZXIoKS5pbnQoKS5taW4oMSksXG4gICAgc2VhcmNoOiBSZXF1ZXN0TG9nU2VhcmNoRmllbGQsXG4gICAga2V5d29yZDogei5zdHJpbmcoKSxcbiAgICBvcmRlckJ5OiBSZXF1ZXN0TG9nT3JkZXJCeSxcbiAgICBxdWVyeU1vZGU6IFNvbmFtdVF1ZXJ5TW9kZSxcbiAgICBpZDogekFycmF5YWJsZSh6Lm51bWJlcigpLmludCgpLnBvc2l0aXZlKCkpLFxuICAgIHNvbmFtdUZpbHRlcjogei5jdXN0b208QXBwbHlTb25hbXVGaWx0ZXI8UmVxdWVzdExvZ0Jhc2VTY2hlbWEsIG5ldmVyLCBuZXZlcj4+KCksXG4gICAgdG9rZW5fbmFtZTogei5zdHJpbmcoKS5tYXgoMTAwKS5udWxsYWJsZSgpLFxuICAgIHByb2plY3RfbmFtZTogei5zdHJpbmcoKS5tYXgoNTApLm51bGxhYmxlKCksXG4gICAgbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICB9KVxuICAucGFydGlhbCgpO1xuZXhwb3J0IHR5cGUgUmVxdWVzdExvZ0Jhc2VMaXN0UGFyYW1zID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ0Jhc2VMaXN0UGFyYW1zPjtcblxuLy8gQmFzZUxpc3RQYXJhbXM6IFJlcXVlc3RMb2dTdGVwXG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N0ZXBCYXNlTGlzdFBhcmFtcyA9IHpcbiAgLm9iamVjdCh7XG4gICAgbnVtOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG4gICAgcGFnZTogei5udW1iZXIoKS5pbnQoKS5taW4oMSksXG4gICAgc2VhcmNoOiBSZXF1ZXN0TG9nU3RlcFNlYXJjaEZpZWxkLFxuICAgIGtleXdvcmQ6IHouc3RyaW5nKCksXG4gICAgb3JkZXJCeTogUmVxdWVzdExvZ1N0ZXBPcmRlckJ5LFxuICAgIHF1ZXJ5TW9kZTogU29uYW11UXVlcnlNb2RlLFxuICAgIGlkOiB6QXJyYXlhYmxlKHoubnVtYmVyKCkuaW50KCkucG9zaXRpdmUoKSksXG4gICAgc29uYW11RmlsdGVyOiB6LmN1c3RvbTxBcHBseVNvbmFtdUZpbHRlcjxSZXF1ZXN0TG9nU3RlcEJhc2VTY2hlbWEsIG5ldmVyLCBuZXZlcj4+KCksXG4gICAgcmVxdWVzdF9sb2dfaWQ6IHouaW50KCksXG4gIH0pXG4gIC5wYXJ0aWFsKCk7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3RlcEJhc2VMaXN0UGFyYW1zID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ1N0ZXBCYXNlTGlzdFBhcmFtcz47XG5cbi8vIEJhc2VMaXN0UGFyYW1zOiBTZXR0aW5nXG5leHBvcnQgY29uc3QgU2V0dGluZ0Jhc2VMaXN0UGFyYW1zID0gelxuICAub2JqZWN0KHtcbiAgICBudW06IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSxcbiAgICBwYWdlOiB6Lm51bWJlcigpLmludCgpLm1pbigxKSxcbiAgICBzZWFyY2g6IFNldHRpbmdTZWFyY2hGaWVsZCxcbiAgICBrZXl3b3JkOiB6LnN0cmluZygpLFxuICAgIG9yZGVyQnk6IFNldHRpbmdPcmRlckJ5LFxuICAgIHF1ZXJ5TW9kZTogU29uYW11UXVlcnlNb2RlLFxuICAgIGlkOiB6QXJyYXlhYmxlKHoubnVtYmVyKCkuaW50KCkucG9zaXRpdmUoKSksXG4gICAgc29uYW11RmlsdGVyOiB6LmN1c3RvbTxBcHBseVNvbmFtdUZpbHRlcjxTZXR0aW5nQmFzZVNjaGVtYSwgbmV2ZXIsIG5ldmVyPj4oKSxcbiAgICBrZXk6IHouc3RyaW5nKCkubWF4KDEwMCksXG4gIH0pXG4gIC5wYXJ0aWFsKCk7XG5leHBvcnQgdHlwZSBTZXR0aW5nQmFzZUxpc3RQYXJhbXMgPSB6LmluZmVyPHR5cGVvZiBTZXR0aW5nQmFzZUxpc3RQYXJhbXM+O1xuXG4vLyBCYXNlTGlzdFBhcmFtczogVG9rZW5cbmV4cG9ydCBjb25zdCBUb2tlbkJhc2VMaXN0UGFyYW1zID0gelxuICAub2JqZWN0KHtcbiAgICBudW06IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSxcbiAgICBwYWdlOiB6Lm51bWJlcigpLmludCgpLm1pbigxKSxcbiAgICBzZWFyY2g6IFRva2VuU2VhcmNoRmllbGQsXG4gICAga2V5d29yZDogei5zdHJpbmcoKSxcbiAgICBvcmRlckJ5OiBUb2tlbk9yZGVyQnksXG4gICAgcXVlcnlNb2RlOiBTb25hbXVRdWVyeU1vZGUsXG4gICAgaWQ6IHpBcnJheWFibGUoei5udW1iZXIoKS5pbnQoKS5wb3NpdGl2ZSgpKSxcbiAgICBzb25hbXVGaWx0ZXI6IHouY3VzdG9tPEFwcGx5U29uYW11RmlsdGVyPFRva2VuQmFzZVNjaGVtYSwgbmV2ZXIsIG5ldmVyPj4oKSxcbiAgfSlcbiAgLnBhcnRpYWwoKTtcbmV4cG9ydCB0eXBlIFRva2VuQmFzZUxpc3RQYXJhbXMgPSB6LmluZmVyPHR5cGVvZiBUb2tlbkJhc2VMaXN0UGFyYW1zPjtcblxuLy8gU3Vic2V0czogUmVxdWVzdExvZ1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdWJzZXRBID0gei5vYmplY3Qoe1xuICBpZDogei5pbnQoKSxcbiAgY3JlYXRlZF9hdDogei5kYXRlKCksXG4gIHRva2VuX25hbWU6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgcHJvamVjdF9uYW1lOiB6LnN0cmluZygpLm1heCg1MCkubnVsbGFibGUoKSxcbiAgbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICBmYWxsYmFja19jb3VudDogei5pbnQoKS5udWxsYWJsZSgpLFxuICB1c2VyX3Byb21wdDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBzeXN0ZW1fcHJvbXB0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHJlc3BvbnNlOiB6LnN0cmluZygpLFxuICBpbnB1dF90b2tlbnM6IHouaW50KCksXG4gIG91dHB1dF90b2tlbnM6IHouaW50KCksXG4gIGNhY2hlX3JlYWRfdG9rZW5zOiB6LmludCgpLFxuICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHouaW50KCksXG4gIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgZHVyYXRpb25fbXM6IHouaW50KCksXG4gIHR0ZnRfbXM6IHouaW50KCksXG4gIGNvc3RfdXNkOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNvc3Rfc291cmNlOiB6LnN0cmluZygpLm1heCgyMCkubnVsbGFibGUoKSxcbiAgaW1hZ2VfY29zdF91c2Q6IHouaW50KCkubnVsbGFibGUoKSxcbiAgaW1hZ2VfY29zdF9tZXRob2Q6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgZWZmb3J0OiB6LnN0cmluZygpLm1heCgxMCkubnVsbGFibGUoKSxcbiAgaGlzdG9yeTogSGlzdG9yeUl0ZW1zLm51bGxhYmxlKCksXG4gIHRvb2xzOiBUb29sRGVmaW5pdGlvbnMubnVsbGFibGUoKSxcbiAgc3RhdHVzOiBSZXF1ZXN0TG9nU3RhdHVzLFxuICBlcnJvcl9tZXNzYWdlOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHRvb2xfY2FsbF9jb3VudDogei5pbnQoKSxcbiAgaXNfaW1hZ2VfZ2VuZXJhdGlvbjogei5ib29sZWFuKCksXG59KTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdWJzZXRBID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ1N1YnNldEE+O1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdWJzZXRQID0gei5vYmplY3Qoe1xuICBpZDogei5pbnQoKSxcbiAgY3JlYXRlZF9hdDogei5kYXRlKCksXG4gIHRva2VuX25hbWU6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgcHJvamVjdF9uYW1lOiB6LnN0cmluZygpLm1heCg1MCkubnVsbGFibGUoKSxcbiAgbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICBmYWxsYmFja19jb3VudDogei5pbnQoKS5udWxsYWJsZSgpLFxuICBpbnB1dF90b2tlbnM6IHouaW50KCksXG4gIG91dHB1dF90b2tlbnM6IHouaW50KCksXG4gIGNhY2hlX3JlYWRfdG9rZW5zOiB6LmludCgpLFxuICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHouaW50KCksXG4gIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgZHVyYXRpb25fbXM6IHouaW50KCksXG4gIHR0ZnRfbXM6IHouaW50KCksXG4gIGNvc3RfdXNkOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNvc3Rfc291cmNlOiB6LnN0cmluZygpLm1heCgyMCkubnVsbGFibGUoKSxcbiAgaW1hZ2VfY29zdF91c2Q6IHouaW50KCkubnVsbGFibGUoKSxcbiAgaW1hZ2VfY29zdF9tZXRob2Q6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgZWZmb3J0OiB6LnN0cmluZygpLm1heCgxMCkubnVsbGFibGUoKSxcbiAgc3RhdHVzOiBSZXF1ZXN0TG9nU3RhdHVzLFxuICB0b29sX2NhbGxfY291bnQ6IHouaW50KCksXG4gIGlzX2ltYWdlX2dlbmVyYXRpb246IHouYm9vbGVhbigpLFxufSk7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3Vic2V0UCA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dTdWJzZXRQPjtcbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nU3Vic2V0QyA9IHoub2JqZWN0KHtcbiAgaWQ6IHouaW50KCksXG4gIHRva2VuX25hbWU6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICBpbnB1dF90b2tlbnM6IHouaW50KCksXG4gIG91dHB1dF90b2tlbnM6IHouaW50KCksXG4gIGNhY2hlX3JlYWRfdG9rZW5zOiB6LmludCgpLFxuICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHouaW50KCksXG4gIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY29zdF91c2Q6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY29zdF9zb3VyY2U6IHouc3RyaW5nKCkubWF4KDIwKS5udWxsYWJsZSgpLFxufSk7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3Vic2V0QyA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dTdWJzZXRDPjtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nID0ge1xuICBBOiBSZXF1ZXN0TG9nU3Vic2V0QTtcbiAgUDogUmVxdWVzdExvZ1N1YnNldFA7XG4gIEM6IFJlcXVlc3RMb2dTdWJzZXRDO1xufTtcbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nU3Vic2V0S2V5ID0gei5lbnVtKFtcIkFcIiwgXCJQXCIsIFwiQ1wiXSk7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3Vic2V0S2V5ID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ1N1YnNldEtleT47XG5cbi8vIFN1YnNldHM6IFJlcXVlc3RMb2dTdGVwXG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N0ZXBTdWJzZXRBID0gei5vYmplY3Qoe1xuICBpZDogei5pbnQoKSxcbiAgY3JlYXRlZF9hdDogei5kYXRlKCksXG4gIHN0ZXBfaW5kZXg6IHouaW50KCksXG4gIHR5cGU6IFJlcXVlc3RMb2dTdGVwVHlwZSxcbiAgbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICBmYWxsYmFja19jb3VudDogei5pbnQoKS5udWxsYWJsZSgpLFxuICBpbnB1dF90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgb3V0cHV0X3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9yZWFkX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjb3N0X3VzZDogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjb3N0X3NvdXJjZTogei5zdHJpbmcoKS5tYXgoMjApLm51bGxhYmxlKCksXG4gIGR1cmF0aW9uX21zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIHR0ZnRfbXM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgZmluaXNoX3JlYXNvbjogei5zdHJpbmcoKS5tYXgoMjApLm51bGxhYmxlKCksXG4gIHJlYXNvbmluZ190ZXh0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHJlYXNvbmluZ190b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgdG9vbF9jYWxsX2luZGV4OiB6LmludCgpLm51bGxhYmxlKCksXG4gIHRvb2xfY2FsbF9pZDogei5zdHJpbmcoKS5tYXgoMTAwKS5udWxsYWJsZSgpLFxuICB0b29sX25hbWU6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgdG9vbF9hcmdzOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHRvb2xfcmVzdWx0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHRvb2xfZHVyYXRpb25fbXM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgZXJyb3I6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUmVxdWVzdExvZ1N0ZXBTdWJzZXRBID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ1N0ZXBTdWJzZXRBPjtcbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nU3RlcFN1YnNldFQgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LmludCgpLFxuICBjcmVhdGVkX2F0OiB6LmRhdGUoKSxcbiAgc3RlcF9pbmRleDogei5pbnQoKSxcbiAgdHlwZTogUmVxdWVzdExvZ1N0ZXBUeXBlLFxuICBtb2RlbF9uYW1lOiB6LnN0cmluZygpLm1heCgyNTUpLm51bGxhYmxlKCksXG4gIHJlcXVlc3RlZF9tb2RlbF9uYW1lOiB6LnN0cmluZygpLm1heCgyNTUpLm51bGxhYmxlKCksXG4gIGZhbGxiYWNrX2NvdW50OiB6LmludCgpLm51bGxhYmxlKCksXG4gIGlucHV0X3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBvdXRwdXRfdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNhY2hlX3JlYWRfdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNhY2hlX2NyZWF0aW9uX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNvc3RfdXNkOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNvc3Rfc291cmNlOiB6LnN0cmluZygpLm1heCgyMCkubnVsbGFibGUoKSxcbiAgZHVyYXRpb25fbXM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgdHRmdF9tczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBmaW5pc2hfcmVhc29uOiB6LnN0cmluZygpLm1heCgyMCkubnVsbGFibGUoKSxcbiAgcmVhc29uaW5nX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICB0b29sX2NhbGxfaW5kZXg6IHouaW50KCkubnVsbGFibGUoKSxcbiAgdG9vbF9jYWxsX2lkOiB6LnN0cmluZygpLm1heCgxMDApLm51bGxhYmxlKCksXG4gIHRvb2xfbmFtZTogei5zdHJpbmcoKS5tYXgoMTAwKS5udWxsYWJsZSgpLFxuICB0b29sX2R1cmF0aW9uX21zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGVycm9yOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG59KTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdGVwU3Vic2V0VCA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dTdGVwU3Vic2V0VD47XG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N0ZXBTdWJzZXRJID0gei5vYmplY3Qoe1xuICBpZDogei5pbnQoKSxcbiAgdG9vbF9hcmdzOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG59KTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdGVwU3Vic2V0SSA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dTdGVwU3Vic2V0ST47XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3RlcFN1YnNldE1hcHBpbmcgPSB7XG4gIEE6IFJlcXVlc3RMb2dTdGVwU3Vic2V0QTtcbiAgVDogUmVxdWVzdExvZ1N0ZXBTdWJzZXRUO1xuICBJOiBSZXF1ZXN0TG9nU3RlcFN1YnNldEk7XG59O1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdGVwU3Vic2V0S2V5ID0gei5lbnVtKFtcIkFcIiwgXCJUXCIsIFwiSVwiXSk7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3RlcFN1YnNldEtleSA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dTdGVwU3Vic2V0S2V5PjtcblxuLy8gU3Vic2V0czogU2V0dGluZ1xuZXhwb3J0IGNvbnN0IFNldHRpbmdTdWJzZXRBID0gei5vYmplY3Qoe1xuICBpZDogei5pbnQoKSxcbiAgY3JlYXRlZF9hdDogei5kYXRlKCksXG4gIGtleTogei5zdHJpbmcoKS5tYXgoMTAwKSxcbiAgdmFsdWU6IHouc3RyaW5nKCksXG4gIHVwZGF0ZWRfYXQ6IHouZGF0ZSgpLm51bGxhYmxlKCksXG59KTtcbmV4cG9ydCB0eXBlIFNldHRpbmdTdWJzZXRBID0gei5pbmZlcjx0eXBlb2YgU2V0dGluZ1N1YnNldEE+O1xuZXhwb3J0IHR5cGUgU2V0dGluZ1N1YnNldE1hcHBpbmcgPSB7XG4gIEE6IFNldHRpbmdTdWJzZXRBO1xufTtcbmV4cG9ydCBjb25zdCBTZXR0aW5nU3Vic2V0S2V5ID0gei5lbnVtKFtcIkFcIl0pO1xuZXhwb3J0IHR5cGUgU2V0dGluZ1N1YnNldEtleSA9IHouaW5mZXI8dHlwZW9mIFNldHRpbmdTdWJzZXRLZXk+O1xuXG4vLyBTdWJzZXRzOiBUb2tlblxuZXhwb3J0IGNvbnN0IFRva2VuU3Vic2V0QSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouaW50KCksXG4gIGNyZWF0ZWRfYXQ6IHouZGF0ZSgpLFxuICBwcm92aWRlcjogei5zdHJpbmcoKS5tYXgoMjApLFxuICBjcmVkZW50aWFsczogVG9rZW5DcmVkZW50aWFscyxcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgYWN0aXZlOiB6LmJvb2xlYW4oKSxcbiAgb3JkOiB6LmludCgpLFxuICBxdW90YV90aHJlc2hvbGQ6IHouaW50KCkubnVsbGFibGUoKSxcbiAgd2VpZ2h0OiB6LmludCgpLFxufSk7XG5leHBvcnQgdHlwZSBUb2tlblN1YnNldEEgPSB6LmluZmVyPHR5cGVvZiBUb2tlblN1YnNldEE+O1xuZXhwb3J0IHR5cGUgVG9rZW5TdWJzZXRNYXBwaW5nID0ge1xuICBBOiBUb2tlblN1YnNldEE7XG59O1xuZXhwb3J0IGNvbnN0IFRva2VuU3Vic2V0S2V5ID0gei5lbnVtKFtcIkFcIl0pO1xuZXhwb3J0IHR5cGUgVG9rZW5TdWJzZXRLZXkgPSB6LmluZmVyPHR5cGVvZiBUb2tlblN1YnNldEtleT47XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFXQSxNQUFNLGVBQWUsRUFBRSxNQUNyQixFQUFFLE9BQU87Q0FDUCxNQUFNLEVBQUUsT0FBTztDQUNmLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzFCLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxTQUFTO0NBQzlCLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzFCLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQy9CLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzdCLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0FBQzlCLENBQUMsQ0FDSDtBQUlBLE1BQU0sbUJBQW1CLEVBQUUsTUFBTSxDQUMvQixFQUFFLE9BQU87Q0FDUCxhQUFhLEVBQUUsT0FBTztDQUN0QixjQUFjLEVBQUUsT0FBTztDQUN2QixXQUFXLEVBQUUsT0FBTztDQUNwQixhQUFhLEVBQUUsT0FBTztBQUN4QixDQUFDLEdBQ0QsRUFBRSxPQUFPO0NBQ1AsYUFBYSxFQUFFLE9BQU87Q0FDdEIsY0FBYyxFQUFFLE9BQU87Q0FDdkIsU0FB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
|