sonamu 0.7.16 → 0.7.18

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 (64) hide show
  1. package/dist/ai/providers/rtzr/error.d.ts +1 -1
  2. package/dist/ai/providers/rtzr/error.d.ts.map +1 -1
  3. package/dist/api/config.d.ts +1 -0
  4. package/dist/api/config.d.ts.map +1 -1
  5. package/dist/api/config.js +1 -1
  6. package/dist/api/decorators.d.ts +1 -1
  7. package/dist/api/decorators.d.ts.map +1 -1
  8. package/dist/api/decorators.js +1 -1
  9. package/dist/api/sonamu.d.ts +3 -1
  10. package/dist/api/sonamu.d.ts.map +1 -1
  11. package/dist/api/sonamu.js +48 -38
  12. package/dist/syncer/checksum.d.ts +8 -3
  13. package/dist/syncer/checksum.d.ts.map +1 -1
  14. package/dist/syncer/checksum.js +17 -9
  15. package/dist/syncer/code-generator.js +7 -2
  16. package/dist/syncer/syncer.d.ts +6 -6
  17. package/dist/syncer/syncer.d.ts.map +1 -1
  18. package/dist/syncer/syncer.js +27 -13
  19. package/dist/template/implementations/model.template.js +5 -5
  20. package/dist/template/implementations/services.template.d.ts +17 -0
  21. package/dist/template/implementations/services.template.d.ts.map +1 -0
  22. package/dist/template/implementations/services.template.js +180 -0
  23. package/dist/template/implementations/view_form.template.js +2 -2
  24. package/dist/template/implementations/view_id_async_select.template.js +2 -2
  25. package/dist/template/implementations/view_list.template.js +5 -5
  26. package/dist/types/types.d.ts +2 -14
  27. package/dist/types/types.d.ts.map +1 -1
  28. package/dist/types/types.js +3 -15
  29. package/dist/ui/ai-api.d.ts +2 -0
  30. package/dist/ui/ai-api.d.ts.map +1 -1
  31. package/dist/ui/ai-api.js +43 -49
  32. package/dist/ui/ai-client.d.ts +10 -0
  33. package/dist/ui/ai-client.d.ts.map +1 -1
  34. package/dist/ui/ai-client.js +457 -437
  35. package/dist/ui/api.d.ts.map +1 -1
  36. package/dist/ui/api.js +3 -1
  37. package/dist/ui-web/assets/index-DFqVuxOB.js +92 -0
  38. package/dist/ui-web/index.html +1 -1
  39. package/package.json +9 -5
  40. package/src/api/config.ts +3 -0
  41. package/src/api/decorators.ts +6 -1
  42. package/src/api/sonamu.ts +68 -50
  43. package/src/shared/app.shared.ts.txt +1 -1
  44. package/src/shared/web.shared.ts.txt +0 -43
  45. package/src/syncer/checksum.ts +31 -9
  46. package/src/syncer/code-generator.ts +8 -1
  47. package/src/syncer/syncer.ts +38 -26
  48. package/src/template/implementations/model.template.ts +4 -4
  49. package/src/template/implementations/services.template.ts +265 -0
  50. package/src/template/implementations/view_form.template.ts +1 -1
  51. package/src/template/implementations/view_id_async_select.template.ts +1 -1
  52. package/src/template/implementations/view_list.template.ts +4 -4
  53. package/src/types/types.ts +2 -14
  54. package/src/ui/ai-api.ts +61 -60
  55. package/src/ui/ai-client.ts +535 -499
  56. package/src/ui/api.ts +3 -0
  57. package/src/ui/entity.instructions.md +536 -0
  58. package/dist/template/implementations/service.template.d.ts +0 -29
  59. package/dist/template/implementations/service.template.d.ts.map +0 -1
  60. package/dist/template/implementations/service.template.js +0 -202
  61. package/dist/ui-web/assets/index-BcbbB-BB.js +0 -95
  62. package/dist/ui-web/assets/provider-utils_false-BKJD46kk.js +0 -1
  63. package/dist/ui-web/assets/provider-utils_false-Bu5lmX18.js +0 -1
  64. package/src/template/implementations/service.template.ts +0 -328
@@ -0,0 +1,180 @@
1
+ import inflection from "inflection";
2
+ import { diff, unique } from "radashi";
3
+ import { apiParamToTsCode, apiParamTypeToTsType, unwrapPromiseOnce } from "../../api/code-converters.js";
4
+ import { Sonamu } from "../../api/sonamu.js";
5
+ import { ApiParamType } from "../../types/types.js";
6
+ import { assertDefined } from "../../utils/utils.js";
7
+ import { Template } from "../template.js";
8
+ import { zodTypeToTsTypeDef } from "../zod-converter.js";
9
+ export class Template__services extends Template {
10
+ constructor(){
11
+ super("services");
12
+ }
13
+ getTargetAndPath() {
14
+ return {
15
+ target: ":target/src/services",
16
+ path: `services.generated.ts`
17
+ };
18
+ }
19
+ render({}) {
20
+ const { apis } = Sonamu.syncer;
21
+ // 모델별로 그룹화
22
+ const apisByModel = new Map();
23
+ for (const api of apis){
24
+ const modelName = api.modelName.replace(/Model$/, "").replace(/Frame$/, "");
25
+ if (!apisByModel.has(modelName)) {
26
+ apisByModel.set(modelName, []);
27
+ }
28
+ apisByModel.get(modelName)?.push(api);
29
+ }
30
+ const importKeys = [];
31
+ const namespaces = [];
32
+ let typeParamNames = [];
33
+ for (const [modelName, modelApis] of apisByModel){
34
+ const functions = [];
35
+ for (const api of modelApis){
36
+ // @stream 데코레이터가 있으면 SSE 스트림 함수 생성
37
+ if (api.streamOptions) {
38
+ const paramsWithoutContext = api.parameters.filter((param)=>!ApiParamType.isContext(param.type) && !ApiParamType.isRefKnex(param.type) && !(param.optional === true && param.name.startsWith("_")));
39
+ const paramsDef = apiParamToTsCode(paramsWithoutContext, importKeys);
40
+ const apiBaseUrl = `${Sonamu.config.api.route.prefix}${api.path}`;
41
+ const methodNameStream = api.options.resourceName ? `use${inflection.camelize(api.options.resourceName)}` : `use${inflection.camelize(api.methodName)}`;
42
+ const methodNameStreamCamelized = inflection.camelize(methodNameStream, true);
43
+ const eventsTypeDef = zodTypeToTsTypeDef(api.streamOptions.events);
44
+ const paramsDefAsObject = paramsWithoutContext.length > 0 ? `{ ${paramsWithoutContext.map((p)=>p.name).join(", ")} }` : "{}";
45
+ functions.push(`
46
+ export function ${methodNameStreamCamelized}(
47
+ params: ${paramsDef ? `{ ${paramsWithoutContext.map((p)=>`${p.name}: ${apiParamTypeToTsType(p.type, importKeys)}`).join(", ")} }` : "{}"},
48
+ handlers: EventHandlers<${eventsTypeDef} & { end?: () => void }>,
49
+ options: SSEStreamOptions
50
+ ) {
51
+ return useSSEStream<${eventsTypeDef}>(\`${apiBaseUrl}\`, ${paramsDefAsObject}, handlers, options);
52
+ }
53
+ `.trim());
54
+ continue;
55
+ }
56
+ // Context 제외한 파라미터
57
+ const paramsWithoutContext = api.parameters.filter((param)=>!ApiParamType.isContext(param.type) && !ApiParamType.isRefKnex(param.type) && !(param.optional === true && param.name.startsWith("_")));
58
+ // 타입 파라미터 정의
59
+ const typeParametersAsTsType = api.typeParameters.map((typeParam)=>apiParamTypeToTsType(typeParam, importKeys)).join(", ");
60
+ const typeParamsDef = typeParametersAsTsType ? `<${typeParametersAsTsType}>` : "";
61
+ typeParamNames = typeParamNames.concat(api.typeParameters.map((tp)=>tp.id));
62
+ // 파라미터 정의
63
+ const paramsDef = apiParamToTsCode(paramsWithoutContext, importKeys);
64
+ const paramNames = paramsWithoutContext.map((p)=>p.name).join(", ");
65
+ // 리턴 타입 정의
66
+ const returnTypeDef = apiParamTypeToTsType(assertDefined(unwrapPromiseOnce(api.returnType)), importKeys);
67
+ // 기본 URL
68
+ const apiBaseUrl = `${Sonamu.config.api.route.prefix}${api.path}`;
69
+ const clients = api.options.clients || [];
70
+ // 1. axios 함수 생성
71
+ // resourceName이 있으면 get + resourceName 형태로 함수명 생성
72
+ const methodName = api.options.resourceName ? `get${inflection.camelize(api.options.resourceName)}` : api.methodName;
73
+ // axios-multipart 처리 (파일 업로드)
74
+ if (clients.includes("axios-multipart")) {
75
+ const isMultiple = api.uploadOptions?.mode === "multiple";
76
+ const fileParamName = isMultiple ? "files" : "file";
77
+ const fileParamType = isMultiple ? "File[]" : "File";
78
+ const formDataAppend = isMultiple ? `${fileParamName}.forEach(f => { formData.append("${fileParamName}", f); });` : `formData.append("${fileParamName}", ${fileParamName});`;
79
+ const otherParamsAppend = paramsWithoutContext.map((param)=>`formData.append('${param.name}', String(${param.name}));`).join("\n ");
80
+ const paramsDefComma = paramsDef !== "" ? ", " : "";
81
+ functions.push(`
82
+ export async function ${methodName}${typeParamsDef}(
83
+ ${paramsDef}${paramsDefComma}
84
+ ${fileParamName}: ${fileParamType},
85
+ onUploadProgress?: (pe: AxiosProgressEvent) => void
86
+ ): Promise<${returnTypeDef}> {
87
+ const formData = new FormData();
88
+ ${formDataAppend}
89
+ ${otherParamsAppend}
90
+ return fetch({
91
+ method: 'POST',
92
+ url: \`${apiBaseUrl}\`,
93
+ headers: {
94
+ "Content-Type": "multipart/form-data",
95
+ },
96
+ onUploadProgress,
97
+ data: formData,
98
+ ${api.options.timeout ? `signal: AbortSignal.timeout(${api.options.timeout}),` : ""}
99
+ });
100
+ }
101
+ `.trim());
102
+ } else if (api.options.httpMethod === "GET") {
103
+ const hasParams = paramsWithoutContext.length > 0;
104
+ functions.push(`
105
+ export async function ${methodName}${typeParamsDef}(${paramsDef}): Promise<${returnTypeDef}> {
106
+ return fetch({
107
+ method: "GET",
108
+ url: \`${apiBaseUrl}${hasParams ? `?\${qs.stringify({ ${paramNames} })}` : ""}\`,
109
+ ${api.options.timeout ? `signal: AbortSignal.timeout(${api.options.timeout}),` : ""}
110
+ });
111
+ }
112
+ `.trim());
113
+ } else {
114
+ const hasParams = paramsWithoutContext.length > 0;
115
+ functions.push(`
116
+ export async function ${methodName}${typeParamsDef}(${paramsDef}): Promise<${returnTypeDef}> {
117
+ return fetch({
118
+ method: "${api.options.httpMethod}",
119
+ url: \`${apiBaseUrl}\`,
120
+ ${hasParams ? `data: { ${paramNames} },` : ""}
121
+ ${api.options.timeout ? `signal: AbortSignal.timeout(${api.options.timeout}),` : ""}
122
+ });
123
+ }
124
+ `.trim());
125
+ }
126
+ // 2. queryOptions + useQuery (tanstack-query)
127
+ if (clients.includes("tanstack-query")) {
128
+ const hookName = api.options.resourceName ? inflection.camelize(api.options.resourceName, true) : inflection.camelize(api.methodName, true);
129
+ // queryOptions
130
+ functions.push(`
131
+ export const ${methodName}QueryOptions = ${typeParamsDef}(${paramsDef}) => queryOptions({
132
+ queryKey: ['${modelName}', '${methodName}'${paramNames ? `, ${paramNames}` : ""}],
133
+ queryFn: () => ${methodName}(${paramNames})
134
+ });
135
+ `.trim());
136
+ // useQuery hook
137
+ functions.push(`
138
+ export const use${inflection.camelize(hookName)} = ${typeParamsDef}(${paramsDef}${paramsDef ? ", " : ""}options?: { enabled?: boolean }) =>
139
+ useQuery({
140
+ ...${methodName}QueryOptions(${paramNames}),
141
+ ...options
142
+ });
143
+ `.trim());
144
+ }
145
+ // 3. useMutation (tanstack-mutation)
146
+ if (clients.includes("tanstack-mutation")) {
147
+ const hookName = inflection.camelize(api.methodName);
148
+ const mutationParamType = paramsWithoutContext.length > 0 ? `{ ${paramsWithoutContext.map((p)=>`${p.name}: ${apiParamTypeToTsType(p.type, [])}`).join(", ")} }` : "void";
149
+ const mutationParamNames = paramsWithoutContext.length > 0 ? paramsWithoutContext.map((p)=>`params.${p.name}`).join(", ") : "";
150
+ functions.push(`
151
+ export const use${hookName}Mutation = ${typeParamsDef}() => useMutation({
152
+ mutationFn: (params: ${mutationParamType}) => ${methodName}(${mutationParamNames})
153
+ });
154
+ `.trim());
155
+ }
156
+ }
157
+ namespaces.push(`
158
+ export namespace ${modelName}Service {
159
+ ${functions.join("\n\n")}
160
+ }
161
+ `.trim());
162
+ }
163
+ return {
164
+ ...this.getTargetAndPath(),
165
+ body: namespaces.join("\n\n"),
166
+ importKeys: diff(unique(importKeys), [
167
+ ...typeParamNames,
168
+ "ListResult"
169
+ ]),
170
+ customHeaders: [
171
+ `import { queryOptions, useQuery, useMutation } from '@tanstack/react-query';`,
172
+ `import type { AxiosProgressEvent } from 'axios';`,
173
+ `import qs from 'qs';`,
174
+ `import { type ListResult, fetch, type EventHandlers, type SSEStreamOptions, useSSEStream } from './sonamu.shared';`
175
+ ]
176
+ };
177
+ }
178
+ }
179
+
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvc2VydmljZXMudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB7IGRpZmYsIHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQge1xuICBhcGlQYXJhbVRvVHNDb2RlLFxuICBhcGlQYXJhbVR5cGVUb1RzVHlwZSxcbiAgdW53cmFwUHJvbWlzZU9uY2UsXG59IGZyb20gXCIuLi8uLi9hcGkvY29kZS1jb252ZXJ0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVuZGVkQXBpIH0gZnJvbSBcIi4uLy4uL2FwaS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IEFwaVBhcmFtVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgYXNzZXJ0RGVmaW5lZCB9IGZyb20gXCIuLi8uLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcbmltcG9ydCB7IHpvZFR5cGVUb1RzVHlwZURlZiB9IGZyb20gXCIuLi96b2QtY29udmVydGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fc2VydmljZXMgZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwic2VydmljZXNcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IFwiOnRhcmdldC9zcmMvc2VydmljZXNcIixcbiAgICAgIHBhdGg6IGBzZXJ2aWNlcy5nZW5lcmF0ZWQudHNgLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIoe306IFRlbXBsYXRlT3B0aW9uc1tcInNlcnZpY2VzXCJdKSB7XG4gICAgY29uc3QgeyBhcGlzIH0gPSBTb25hbXUuc3luY2VyO1xuXG4gICAgLy8g66qo642467OE66GcIOq3uOujue2ZlFxuICAgIGNvbnN0IGFwaXNCeU1vZGVsID0gbmV3IE1hcDxzdHJpbmcsIEV4dGVuZGVkQXBpW10+KCk7XG4gICAgZm9yIChjb25zdCBhcGkgb2YgYXBpcykge1xuICAgICAgY29uc3QgbW9kZWxOYW1lID0gYXBpLm1vZGVsTmFtZS5yZXBsYWNlKC9Nb2RlbCQvLCBcIlwiKS5yZXBsYWNlKC9GcmFtZSQvLCBcIlwiKTtcbiAgICAgIGlmICghYXBpc0J5TW9kZWwuaGFzKG1vZGVsTmFtZSkpIHtcbiAgICAgICAgYXBpc0J5TW9kZWwuc2V0KG1vZGVsTmFtZSwgW10pO1xuICAgICAgfVxuICAgICAgYXBpc0J5TW9kZWwuZ2V0KG1vZGVsTmFtZSk/LnB1c2goYXBpKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IG5hbWVzcGFjZXM6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IHR5cGVQYXJhbU5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBbbW9kZWxOYW1lLCBtb2RlbEFwaXNdIG9mIGFwaXNCeU1vZGVsKSB7XG4gICAgICBjb25zdCBmdW5jdGlvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgYXBpIG9mIG1vZGVsQXBpcykge1xuICAgICAgICAvLyBAc3RyZWFtIOuNsOy9lOugiOydtO2EsOqwgCDsnojsnLzrqbQgU1NFIOyKpO2KuOumvCDtlajsiJgg7IOd7ISxXG4gICAgICAgIGlmIChhcGkuc3RyZWFtT3B0aW9ucykge1xuICAgICAgICAgIGNvbnN0IHBhcmFtc1dpdGhvdXRDb250ZXh0ID0gYXBpLnBhcmFtZXRlcnMuZmlsdGVyKFxuICAgICAgICAgICAgKHBhcmFtKSA9PlxuICAgICAgICAgICAgICAhQXBpUGFyYW1UeXBlLmlzQ29udGV4dChwYXJhbS50eXBlKSAmJlxuICAgICAgICAgICAgICAhQXBpUGFyYW1UeXBlLmlzUmVmS25leChwYXJhbS50eXBlKSAmJlxuICAgICAgICAgICAgICAhKHBhcmFtLm9wdGlvbmFsID09PSB0cnVlICYmIHBhcmFtLm5hbWUuc3RhcnRzV2l0aChcIl9cIikpLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBwYXJhbXNEZWYgPSBhcGlQYXJhbVRvVHNDb2RlKHBhcmFtc1dpdGhvdXRDb250ZXh0LCBpbXBvcnRLZXlzKTtcbiAgICAgICAgICBjb25zdCBhcGlCYXNlVXJsID0gYCR7U29uYW11LmNvbmZpZy5hcGkucm91dGUucHJlZml4fSR7YXBpLnBhdGh9YDtcblxuICAgICAgICAgIGNvbnN0IG1ldGhvZE5hbWVTdHJlYW0gPSBhcGkub3B0aW9ucy5yZXNvdXJjZU5hbWVcbiAgICAgICAgICAgID8gYHVzZSR7aW5mbGVjdGlvbi5jYW1lbGl6ZShhcGkub3B0aW9ucy5yZXNvdXJjZU5hbWUpfWBcbiAgICAgICAgICAgIDogYHVzZSR7aW5mbGVjdGlvbi5jYW1lbGl6ZShhcGkubWV0aG9kTmFtZSl9YDtcbiAgICAgICAgICBjb25zdCBtZXRob2ROYW1lU3RyZWFtQ2FtZWxpemVkID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShtZXRob2ROYW1lU3RyZWFtLCB0cnVlKTtcblxuICAgICAgICAgIGNvbnN0IGV2ZW50c1R5cGVEZWYgPSB6b2RUeXBlVG9Uc1R5cGVEZWYoYXBpLnN0cmVhbU9wdGlvbnMuZXZlbnRzKTtcblxuICAgICAgICAgIGNvbnN0IHBhcmFtc0RlZkFzT2JqZWN0ID1cbiAgICAgICAgICAgIHBhcmFtc1dpdGhvdXRDb250ZXh0Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBgeyAke3BhcmFtc1dpdGhvdXRDb250ZXh0Lm1hcCgocCkgPT4gcC5uYW1lKS5qb2luKFwiLCBcIil9IH1gXG4gICAgICAgICAgICAgIDogXCJ7fVwiO1xuXG4gICAgICAgICAgZnVuY3Rpb25zLnB1c2goXG4gICAgICAgICAgICBgXG5leHBvcnQgZnVuY3Rpb24gJHttZXRob2ROYW1lU3RyZWFtQ2FtZWxpemVkfShcbiAgcGFyYW1zOiAke3BhcmFtc0RlZiA/IGB7ICR7cGFyYW1zV2l0aG91dENvbnRleHQubWFwKChwKSA9PiBgJHtwLm5hbWV9OiAke2FwaVBhcmFtVHlwZVRvVHNUeXBlKHAudHlwZSwgaW1wb3J0S2V5cyl9YCkuam9pbihcIiwgXCIpfSB9YCA6IFwie31cIn0sXG4gIGhhbmRsZXJzOiBFdmVudEhhbmRsZXJzPCR7ZXZlbnRzVHlwZURlZn0gJiB7IGVuZD86ICgpID0+IHZvaWQgfT4sXG4gIG9wdGlvbnM6IFNTRVN0cmVhbU9wdGlvbnNcbikge1xuICByZXR1cm4gdXNlU1NFU3RyZWFtPCR7ZXZlbnRzVHlwZURlZn0+KFxcYCR7YXBpQmFzZVVybH1cXGAsICR7cGFyYW1zRGVmQXNPYmplY3R9LCBoYW5kbGVycywgb3B0aW9ucyk7XG59XG4gICAgICAgICAgICBgLnRyaW0oKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29udGV4dCDsoJzsmbjtlZwg7YyM652866+47YSwXG4gICAgICAgIGNvbnN0IHBhcmFtc1dpdGhvdXRDb250ZXh0ID0gYXBpLnBhcmFtZXRlcnMuZmlsdGVyKFxuICAgICAgICAgIChwYXJhbSkgPT5cbiAgICAgICAgICAgICFBcGlQYXJhbVR5cGUuaXNDb250ZXh0KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICAgICAhQXBpUGFyYW1UeXBlLmlzUmVmS25leChwYXJhbS50eXBlKSAmJlxuICAgICAgICAgICAgIShwYXJhbS5vcHRpb25hbCA9PT0gdHJ1ZSAmJiBwYXJhbS5uYW1lLnN0YXJ0c1dpdGgoXCJfXCIpKSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyDtg4DsnoUg7YyM652866+47YSwIOygleydmFxuICAgICAgICBjb25zdCB0eXBlUGFyYW1ldGVyc0FzVHNUeXBlID0gYXBpLnR5cGVQYXJhbWV0ZXJzXG4gICAgICAgICAgLm1hcCgodHlwZVBhcmFtKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlUGFyYW0sIGltcG9ydEtleXMpKVxuICAgICAgICAgIC5qb2luKFwiLCBcIik7XG4gICAgICAgIGNvbnN0IHR5cGVQYXJhbXNEZWYgPSB0eXBlUGFyYW1ldGVyc0FzVHNUeXBlID8gYDwke3R5cGVQYXJhbWV0ZXJzQXNUc1R5cGV9PmAgOiBcIlwiO1xuICAgICAgICB0eXBlUGFyYW1OYW1lcyA9IHR5cGVQYXJhbU5hbWVzLmNvbmNhdChhcGkudHlwZVBhcmFtZXRlcnMubWFwKCh0cCkgPT4gdHAuaWQpKTtcblxuICAgICAgICAvLyDtjIzrnbzrr7jthLAg7KCV7J2YXG4gICAgICAgIGNvbnN0IHBhcmFtc0RlZiA9IGFwaVBhcmFtVG9Uc0NvZGUocGFyYW1zV2l0aG91dENvbnRleHQsIGltcG9ydEtleXMpO1xuICAgICAgICBjb25zdCBwYXJhbU5hbWVzID0gcGFyYW1zV2l0aG91dENvbnRleHQubWFwKChwKSA9PiBwLm5hbWUpLmpvaW4oXCIsIFwiKTtcblxuICAgICAgICAvLyDrpqzthLQg7YOA7J6FIOygleydmFxuICAgICAgICBjb25zdCByZXR1cm5UeXBlRGVmID0gYXBpUGFyYW1UeXBlVG9Uc1R5cGUoXG4gICAgICAgICAgYXNzZXJ0RGVmaW5lZCh1bndyYXBQcm9taXNlT25jZShhcGkucmV0dXJuVHlwZSkpLFxuICAgICAgICAgIGltcG9ydEtleXMsXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8g6riw67O4IFVSTFxuICAgICAgICBjb25zdCBhcGlCYXNlVXJsID0gYCR7U29uYW11LmNvbmZpZy5hcGkucm91dGUucHJlZml4fSR7YXBpLnBhdGh9YDtcblxuICAgICAgICBjb25zdCBjbGllbnRzID0gYXBpLm9wdGlvbnMuY2xpZW50cyB8fCBbXTtcblxuICAgICAgICAvLyAxLiBheGlvcyDtlajsiJgg7IOd7ISxXG4gICAgICAgIC8vIHJlc291cmNlTmFtZeydtCDsnojsnLzrqbQgZ2V0ICsgcmVzb3VyY2VOYW1lIO2Yle2DnOuhnCDtlajsiJjrqoUg7IOd7ISxXG4gICAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBhcGkub3B0aW9ucy5yZXNvdXJjZU5hbWVcbiAgICAgICAgICA/IGBnZXQke2luZmxlY3Rpb24uY2FtZWxpemUoYXBpLm9wdGlvbnMucmVzb3VyY2VOYW1lKX1gXG4gICAgICAgICAgOiBhcGkubWV0aG9kTmFtZTtcblxuICAgICAgICAvLyBheGlvcy1tdWx0aXBhcnQg7LKY66asICjtjIzsnbwg7JeF66Gc65OcKVxuICAgICAgICBpZiAoY2xpZW50cy5pbmNsdWRlcyhcImF4aW9zLW11bHRpcGFydFwiKSkge1xuICAgICAgICAgIGNvbnN0IGlzTXVsdGlwbGUgPSBhcGkudXBsb2FkT3B0aW9ucz8ubW9kZSA9PT0gXCJtdWx0aXBsZVwiO1xuICAgICAgICAgIGNvbnN0IGZpbGVQYXJhbU5hbWUgPSBpc011bHRpcGxlID8gXCJmaWxlc1wiIDogXCJmaWxlXCI7XG4gICAgICAgICAgY29uc3QgZmlsZVBhcmFtVHlwZSA9IGlzTXVsdGlwbGUgPyBcIkZpbGVbXVwiIDogXCJGaWxlXCI7XG5cbiAgICAgICAgICBjb25zdCBmb3JtRGF0YUFwcGVuZCA9IGlzTXVsdGlwbGVcbiAgICAgICAgICAgID8gYCR7ZmlsZVBhcmFtTmFtZX0uZm9yRWFjaChmID0+IHsgZm9ybURhdGEuYXBwZW5kKFwiJHtmaWxlUGFyYW1OYW1lfVwiLCBmKTsgfSk7YFxuICAgICAgICAgICAgOiBgZm9ybURhdGEuYXBwZW5kKFwiJHtmaWxlUGFyYW1OYW1lfVwiLCAke2ZpbGVQYXJhbU5hbWV9KTtgO1xuXG4gICAgICAgICAgY29uc3Qgb3RoZXJQYXJhbXNBcHBlbmQgPSBwYXJhbXNXaXRob3V0Q29udGV4dFxuICAgICAgICAgICAgLm1hcCgocGFyYW0pID0+IGBmb3JtRGF0YS5hcHBlbmQoJyR7cGFyYW0ubmFtZX0nLCBTdHJpbmcoJHtwYXJhbS5uYW1lfSkpO2ApXG4gICAgICAgICAgICAuam9pbihcIlxcbiAgICBcIik7XG5cbiAgICAgICAgICBjb25zdCBwYXJhbXNEZWZDb21tYSA9IHBhcmFtc0RlZiAhPT0gXCJcIiA/IFwiLCBcIiA6IFwiXCI7XG4gICAgICAgICAgZnVuY3Rpb25zLnB1c2goXG4gICAgICAgICAgICBgXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gJHttZXRob2ROYW1lfSR7dHlwZVBhcmFtc0RlZn0oXG4gICR7cGFyYW1zRGVmfSR7cGFyYW1zRGVmQ29tbWF9XG4gICR7ZmlsZVBhcmFtTmFtZX06ICR7ZmlsZVBhcmFtVHlwZX0sXG4gIG9uVXBsb2FkUHJvZ3Jlc3M/OiAocGU6IEF4aW9zUHJvZ3Jlc3NFdmVudCkgPT4gdm9pZFxuKTogUHJvbWlzZTwke3JldHVyblR5cGVEZWZ9PiB7XG4gIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICR7Zm9ybURhdGFBcHBlbmR9XG4gICR7b3RoZXJQYXJhbXNBcHBlbmR9XG4gIHJldHVybiBmZXRjaCh7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgdXJsOiBcXGAke2FwaUJhc2VVcmx9XFxgLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiLFxuICAgIH0sXG4gICAgb25VcGxvYWRQcm9ncmVzcyxcbiAgICBkYXRhOiBmb3JtRGF0YSxcbiAgICAke2FwaS5vcHRpb25zLnRpbWVvdXQgPyBgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KCR7YXBpLm9wdGlvbnMudGltZW91dH0pLGAgOiBcIlwifVxuICB9KTtcbn1cbiAgICAgICAgICBgLnRyaW0oKSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGFwaS5vcHRpb25zLmh0dHBNZXRob2QgPT09IFwiR0VUXCIpIHtcbiAgICAgICAgICBjb25zdCBoYXNQYXJhbXMgPSBwYXJhbXNXaXRob3V0Q29udGV4dC5sZW5ndGggPiAwO1xuICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgYFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uICR7bWV0aG9kTmFtZX0ke3R5cGVQYXJhbXNEZWZ9KCR7cGFyYW1zRGVmfSk6IFByb21pc2U8JHtyZXR1cm5UeXBlRGVmfT4ge1xuICByZXR1cm4gZmV0Y2goe1xuICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICB1cmw6IFxcYCR7YXBpQmFzZVVybH0ke2hhc1BhcmFtcyA/IGA/XFwke3FzLnN0cmluZ2lmeSh7ICR7cGFyYW1OYW1lc30gfSl9YCA6IFwiXCJ9XFxgLFxuICAgICR7YXBpLm9wdGlvbnMudGltZW91dCA/IGBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQoJHthcGkub3B0aW9ucy50aW1lb3V0fSksYCA6IFwiXCJ9XG4gIH0pO1xufVxuICAgICAgICAgIGAudHJpbSgpLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgaGFzUGFyYW1zID0gcGFyYW1zV2l0aG91dENvbnRleHQubGVuZ3RoID4gMDtcbiAgICAgICAgICBmdW5jdGlvbnMucHVzaChcbiAgICAgICAgICAgIGBcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiAke21ldGhvZE5hbWV9JHt0eXBlUGFyYW1zRGVmfSgke3BhcmFtc0RlZn0pOiBQcm9taXNlPCR7cmV0dXJuVHlwZURlZn0+IHtcbiAgcmV0dXJuIGZldGNoKHtcbiAgICBtZXRob2Q6IFwiJHthcGkub3B0aW9ucy5odHRwTWV0aG9kfVwiLFxuICAgIHVybDogXFxgJHthcGlCYXNlVXJsfVxcYCxcbiAgICAke2hhc1BhcmFtcyA/IGBkYXRhOiB7ICR7cGFyYW1OYW1lc30gfSxgIDogXCJcIn1cbiAgICAke2FwaS5vcHRpb25zLnRpbWVvdXQgPyBgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KCR7YXBpLm9wdGlvbnMudGltZW91dH0pLGAgOiBcIlwifVxuICB9KTtcbn1cbiAgICAgICAgICBgLnRyaW0oKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gcXVlcnlPcHRpb25zICsgdXNlUXVlcnkgKHRhbnN0YWNrLXF1ZXJ5KVxuICAgICAgICBpZiAoY2xpZW50cy5pbmNsdWRlcyhcInRhbnN0YWNrLXF1ZXJ5XCIpKSB7XG4gICAgICAgICAgY29uc3QgaG9va05hbWUgPSBhcGkub3B0aW9ucy5yZXNvdXJjZU5hbWVcbiAgICAgICAgICAgID8gaW5mbGVjdGlvbi5jYW1lbGl6ZShhcGkub3B0aW9ucy5yZXNvdXJjZU5hbWUsIHRydWUpXG4gICAgICAgICAgICA6IGluZmxlY3Rpb24uY2FtZWxpemUoYXBpLm1ldGhvZE5hbWUsIHRydWUpO1xuXG4gICAgICAgICAgLy8gcXVlcnlPcHRpb25zXG4gICAgICAgICAgZnVuY3Rpb25zLnB1c2goXG4gICAgICAgICAgICBgXG5leHBvcnQgY29uc3QgJHttZXRob2ROYW1lfVF1ZXJ5T3B0aW9ucyA9ICR7dHlwZVBhcmFtc0RlZn0oJHtwYXJhbXNEZWZ9KSA9PiBxdWVyeU9wdGlvbnMoe1xuICBxdWVyeUtleTogWycke21vZGVsTmFtZX0nLCAnJHttZXRob2ROYW1lfScke3BhcmFtTmFtZXMgPyBgLCAke3BhcmFtTmFtZXN9YCA6IFwiXCJ9XSxcbiAgcXVlcnlGbjogKCkgPT4gJHttZXRob2ROYW1lfSgke3BhcmFtTmFtZXN9KVxufSk7XG4gICAgICAgICAgYC50cmltKCksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIHVzZVF1ZXJ5IGhvb2tcbiAgICAgICAgICBmdW5jdGlvbnMucHVzaChcbiAgICAgICAgICAgIGBcbmV4cG9ydCBjb25zdCB1c2Uke2luZmxlY3Rpb24uY2FtZWxpemUoaG9va05hbWUpfSA9ICR7dHlwZVBhcmFtc0RlZn0oJHtwYXJhbXNEZWZ9JHtcbiAgICAgICAgICAgICAgcGFyYW1zRGVmID8gXCIsIFwiIDogXCJcIlxuICAgICAgICAgICAgfW9wdGlvbnM/OiB7IGVuYWJsZWQ/OiBib29sZWFuIH0pID0+XG4gIHVzZVF1ZXJ5KHtcbiAgICAuLi4ke21ldGhvZE5hbWV9UXVlcnlPcHRpb25zKCR7cGFyYW1OYW1lc30pLFxuICAgIC4uLm9wdGlvbnNcbiAgfSk7XG4gICAgICAgICAgYC50cmltKCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIHVzZU11dGF0aW9uICh0YW5zdGFjay1tdXRhdGlvbilcbiAgICAgICAgaWYgKGNsaWVudHMuaW5jbHVkZXMoXCJ0YW5zdGFjay1tdXRhdGlvblwiKSkge1xuICAgICAgICAgIGNvbnN0IGhvb2tOYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShhcGkubWV0aG9kTmFtZSk7XG4gICAgICAgICAgY29uc3QgbXV0YXRpb25QYXJhbVR5cGUgPVxuICAgICAgICAgICAgcGFyYW1zV2l0aG91dENvbnRleHQubGVuZ3RoID4gMFxuICAgICAgICAgICAgICA/IGB7ICR7cGFyYW1zV2l0aG91dENvbnRleHRcbiAgICAgICAgICAgICAgICAgIC5tYXAoKHApID0+IGAke3AubmFtZX06ICR7YXBpUGFyYW1UeXBlVG9Uc1R5cGUocC50eXBlLCBbXSl9YClcbiAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9IH1gXG4gICAgICAgICAgICAgIDogXCJ2b2lkXCI7XG4gICAgICAgICAgY29uc3QgbXV0YXRpb25QYXJhbU5hbWVzID1cbiAgICAgICAgICAgIHBhcmFtc1dpdGhvdXRDb250ZXh0Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBwYXJhbXNXaXRob3V0Q29udGV4dC5tYXAoKHApID0+IGBwYXJhbXMuJHtwLm5hbWV9YCkuam9pbihcIiwgXCIpXG4gICAgICAgICAgICAgIDogXCJcIjtcblxuICAgICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgYFxuZXhwb3J0IGNvbnN0IHVzZSR7aG9va05hbWV9TXV0YXRpb24gPSAke3R5cGVQYXJhbXNEZWZ9KCkgPT4gdXNlTXV0YXRpb24oe1xuICBtdXRhdGlvbkZuOiAocGFyYW1zOiAke211dGF0aW9uUGFyYW1UeXBlfSkgPT4gJHttZXRob2ROYW1lfSgke211dGF0aW9uUGFyYW1OYW1lc30pXG59KTtcbiAgICAgICAgICBgLnRyaW0oKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5hbWVzcGFjZXMucHVzaChcbiAgICAgICAgYFxuZXhwb3J0IG5hbWVzcGFjZSAke21vZGVsTmFtZX1TZXJ2aWNlIHtcbiR7ZnVuY3Rpb25zLmpvaW4oXCJcXG5cXG5cIil9XG59XG4gICAgICBgLnRyaW0oKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aCgpLFxuICAgICAgYm9keTogbmFtZXNwYWNlcy5qb2luKFwiXFxuXFxuXCIpLFxuICAgICAgaW1wb3J0S2V5czogZGlmZih1bmlxdWUoaW1wb3J0S2V5cyksIFsuLi50eXBlUGFyYW1OYW1lcywgXCJMaXN0UmVzdWx0XCJdKSxcbiAgICAgIGN1c3RvbUhlYWRlcnM6IFtcbiAgICAgICAgYGltcG9ydCB7IHF1ZXJ5T3B0aW9ucywgdXNlUXVlcnksIHVzZU11dGF0aW9uIH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztgLFxuICAgICAgICBgaW1wb3J0IHR5cGUgeyBBeGlvc1Byb2dyZXNzRXZlbnQgfSBmcm9tICdheGlvcyc7YCxcbiAgICAgICAgYGltcG9ydCBxcyBmcm9tICdxcyc7YCxcbiAgICAgICAgYGltcG9ydCB7IHR5cGUgTGlzdFJlc3VsdCwgZmV0Y2gsIHR5cGUgRXZlbnRIYW5kbGVycywgdHlwZSBTU0VTdHJlYW1PcHRpb25zLCB1c2VTU0VTdHJlYW0gfSBmcm9tICcuL3NvbmFtdS5zaGFyZWQnO2AsXG4gICAgICBdLFxuICAgIH07XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJpbmZsZWN0aW9uIiwiZGlmZiIsInVuaXF1ZSIsImFwaVBhcmFtVG9Uc0NvZGUiLCJhcGlQYXJhbVR5cGVUb1RzVHlwZSIsInVud3JhcFByb21pc2VPbmNlIiwiU29uYW11IiwiQXBpUGFyYW1UeXBlIiwiYXNzZXJ0RGVmaW5lZCIsIlRlbXBsYXRlIiwiem9kVHlwZVRvVHNUeXBlRGVmIiwiVGVtcGxhdGVfX3NlcnZpY2VzIiwiZ2V0VGFyZ2V0QW5kUGF0aCIsInRhcmdldCIsInBhdGgiLCJyZW5kZXIiLCJhcGlzIiwic3luY2VyIiwiYXBpc0J5TW9kZWwiLCJNYXAiLCJhcGkiLCJtb2RlbE5hbWUiLCJyZXBsYWNlIiwiaGFzIiwic2V0IiwiZ2V0IiwicHVzaCIsImltcG9ydEtleXMiLCJuYW1lc3BhY2VzIiwidHlwZVBhcmFtTmFtZXMiLCJtb2RlbEFwaXMiLCJmdW5jdGlvbnMiLCJzdHJlYW1PcHRpb25zIiwicGFyYW1zV2l0aG91dENvbnRleHQiLCJwYXJhbWV0ZXJzIiwiZmlsdGVyIiwicGFyYW0iLCJpc0NvbnRleHQiLCJ0eXBlIiwiaXNSZWZLbmV4Iiwib3B0aW9uYWwiLCJuYW1lIiwic3RhcnRzV2l0aCIsInBhcmFtc0RlZiIsImFwaUJhc2VVcmwiLCJjb25maWciLCJyb3V0ZSIsInByZWZpeCIsIm1ldGhvZE5hbWVTdHJlYW0iLCJvcHRpb25zIiwicmVzb3VyY2VOYW1lIiwiY2FtZWxpemUiLCJtZXRob2ROYW1lIiwibWV0aG9kTmFtZVN0cmVhbUNhbWVsaXplZCIsImV2ZW50c1R5cGVEZWYiLCJldmVudHMiLCJwYXJhbXNEZWZBc09iamVjdCIsImxlbmd0aCIsIm1hcCIsInAiLCJqb2luIiwidHJpbSIsInR5cGVQYXJhbWV0ZXJzQXNUc1R5cGUiLCJ0eXBlUGFyYW1ldGVycyIsInR5cGVQYXJhbSIsInR5cGVQYXJhbXNEZWYiLCJjb25jYXQiLCJ0cCIsImlkIiwicGFyYW1OYW1lcyIsInJldHVyblR5cGVEZWYiLCJyZXR1cm5UeXBlIiwiY2xpZW50cyIsImluY2x1ZGVzIiwiaXNNdWx0aXBsZSIsInVwbG9hZE9wdGlvbnMiLCJtb2RlIiwiZmlsZVBhcmFtTmFtZSIsImZpbGVQYXJhbVR5cGUiLCJmb3JtRGF0YUFwcGVuZCIsIm90aGVyUGFyYW1zQXBwZW5kIiwicGFyYW1zRGVmQ29tbWEiLCJ0aW1lb3V0IiwiaHR0cE1ldGhvZCIsImhhc1BhcmFtcyIsImhvb2tOYW1lIiwibXV0YXRpb25QYXJhbVR5cGUiLCJtdXRhdGlvblBhcmFtTmFtZXMiLCJib2R5IiwiY3VzdG9tSGVhZGVycyJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsZ0JBQWdCLGFBQWE7QUFDcEMsU0FBU0MsSUFBSSxFQUFFQyxNQUFNLFFBQVEsVUFBVTtBQUN2QyxTQUNFQyxnQkFBZ0IsRUFDaEJDLG9CQUFvQixFQUNwQkMsaUJBQWlCLFFBQ1osK0JBQTRCO0FBRW5DLFNBQVNDLE1BQU0sUUFBUSxzQkFBbUI7QUFFMUMsU0FBU0MsWUFBWSxRQUFRLHVCQUFvQjtBQUNqRCxTQUFTQyxhQUFhLFFBQVEsdUJBQW9CO0FBQ2xELFNBQVNDLFFBQVEsUUFBUSxpQkFBYztBQUN2QyxTQUFTQyxrQkFBa0IsUUFBUSxzQkFBbUI7QUFFdEQsT0FBTyxNQUFNQywyQkFBMkJGO0lBQ3RDLGFBQWM7UUFDWixLQUFLLENBQUM7SUFDUjtJQUVBRyxtQkFBbUI7UUFDakIsT0FBTztZQUNMQyxRQUFRO1lBQ1JDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztRQUMvQjtJQUNGO0lBRUFDLE9BQU8sRUFBK0IsRUFBRTtRQUN0QyxNQUFNLEVBQUVDLElBQUksRUFBRSxHQUFHVixPQUFPVyxNQUFNO1FBRTlCLFdBQVc7UUFDWCxNQUFNQyxjQUFjLElBQUlDO1FBQ3hCLEtBQUssTUFBTUMsT0FBT0osS0FBTTtZQUN0QixNQUFNSyxZQUFZRCxJQUFJQyxTQUFTLENBQUNDLE9BQU8sQ0FBQyxVQUFVLElBQUlBLE9BQU8sQ0FBQyxVQUFVO1lBQ3hFLElBQUksQ0FBQ0osWUFBWUssR0FBRyxDQUFDRixZQUFZO2dCQUMvQkgsWUFBWU0sR0FBRyxDQUFDSCxXQUFXLEVBQUU7WUFDL0I7WUFDQUgsWUFBWU8sR0FBRyxDQUFDSixZQUFZSyxLQUFLTjtRQUNuQztRQUVBLE1BQU1PLGFBQXVCLEVBQUU7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
@@ -223,7 +223,7 @@ import { defaultCatch } from '@/services/sonamu.shared';
223
223
  // import { useCommonModal } from "@/admin-common/CommonModal";
224
224
 
225
225
  import { ${names.capital}SaveParams } from '@/services/${names.fs}/${names.fs}.types';
226
- import { ${names.capital}Service } from '@/services/${names.fs}/${names.fs}.service';
226
+ import { ${names.capital}Service } from '@/services/services.generated';
227
227
  import { ${names.capital}SubsetA } from '@/services/sonamu.generated';
228
228
  ${unique(columns.filter((col)=>[
229
229
  "number-fk_id",
@@ -337,4 +337,4 @@ export function ${names.capitalPlural}Form({ id, mode }: ${names.capitalPlural}F
337
337
  }
338
338
  }
339
339
 
340
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19mb3JtLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIsIHR5cGUgRW50aXR5TmFtZXNSZWNvcmQgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IFJlbmRlcmluZ05vZGUsIFRlbXBsYXRlS2V5LCBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGdldEVudW1JbmZvRnJvbUNvbE5hbWUsIGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lIH0gZnJvbSBcIi4uL2hlbHBlcnNcIjtcbmltcG9ydCB0eXBlIHsgUmVuZGVyZWRUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcbmltcG9ydCB7IGdldFpvZFR5cGVCeUlkLCB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlIH0gZnJvbSBcIi4uL3pvZC1jb252ZXJ0ZXJcIjtcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX192aWV3X2Zvcm0gZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwidmlld19mb3JtXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBcIndlYi9zcmMvcGFnZXMvYWRtaW5cIixcbiAgICAgIHBhdGg6IGAke25hbWVzLmZzUGx1cmFsfS9mb3JtLnRzeGAsXG4gICAgfTtcbiAgfVxuXG4gIHdyYXBGQyhib2R5OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgYDxGb3JtLkZpZWxkPiR7bGFiZWwgPyBgXFxuICAgPGxhYmVsPiR7bGFiZWx9PC9sYWJlbD5gIDogXCJcIn1gLFxuICAgICAgYm9keSxcbiAgICAgIGA8L0Zvcm0uRmllbGQ+YCxcbiAgICBdLmpvaW4oXCJcXG5cIik7XG4gIH1cbiAgd3JhcEZHKGJvZHk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBbYDxGb3JtLkdyb3VwIHdpZHRocz1cImVxdWFsXCI+YCwgdGhpcy53cmFwRkMoYm9keSwgbGFiZWwpLCBgPC9Gb3JtLkdyb3VwPmBdLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICByZW5kZXJDb2x1bW5JbXBvcnQoZW50aXR5SWQ6IHN0cmluZywgY29sOiBSZW5kZXJpbmdOb2RlKSB7XG4gICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgIGNvbnN0IHsgaWQsIHRhcmdldEVudGl0eU5hbWVzIH0gPSBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgICBjb25zdCBjb21wb25lbnRJZCA9IGAke2lkfVNlbGVjdGA7XG4gICAgICByZXR1cm4gYGltcG9ydCB7ICR7Y29tcG9uZW50SWR9IH0gZnJvbSBcIkAvY29tcG9uZW50cy8ke3RhcmdldEVudGl0eU5hbWVzLmZzfS8ke2NvbXBvbmVudElkfVwiO2A7XG4gICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItZmtfaWRcIikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0TmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKHJlbFByb3Aud2l0aCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudElkID0gYCR7cmVsUHJvcC53aXRofUlkQXN5bmNTZWxlY3RgO1xuICAgICAgICByZXR1cm4gYGltcG9ydCB7ICR7Y29tcG9uZW50SWR9IH0gZnJvbSBcIkAvY29tcG9uZW50cy8ke3RhcmdldE5hbWVzLmZzfS8ke2NvbXBvbmVudElkfVwiO2A7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg66CM642UIOu2iOqwgOuKpe2VnCDsnoTtj6ztirggJHtjb2wubmFtZX0gJHtjb2wucmVuZGVyVHlwZX1gKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXJDb2x1bW4oXG4gICAgZW50aXR5SWQ6IHN0cmluZyxcbiAgICBjb2w6IFJlbmRlcmluZ05vZGUsXG4gICAgbmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkLFxuICAgIHBhcmVudDogc3RyaW5nID0gXCJcIixcbiAgKTogc3RyaW5nIHtcbiAgICBsZXQgcmVnRXhwcjogc3RyaW5nID0gXCJcIjtcbiAgICByZWdFeHByID0gYHsuLi5yZWdpc3RlcihcXGAke3BhcmVudH0ke2NvbC5uYW1lfVxcYCl9YDtcblxuICAgIHN3aXRjaCAoY29sLnJlbmRlclR5cGUpIHtcbiAgICAgIGNhc2UgXCJzdHJpbmctcGxhaW5cIjpcbiAgICAgICAgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RTdHJpbmcgJiYgKGNvbC56b2RUeXBlLm1heExlbmd0aCA/PyAwKSA8PSA1MTIpIHtcbiAgICAgICAgICByZXR1cm4gYDxJbnB1dCBwbGFjZWhvbGRlcj1cIiR7Y29sLmxhYmVsfVwiICR7cmVnRXhwcn0gLz5gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBgPFRleHRBcmVhIHJvd3M9ezh9IHBsYWNlaG9sZGVyPVwiJHtjb2wubGFiZWx9XCIgJHtyZWdFeHByfSAvPmA7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgXCJkYXRldGltZVwiOlxuICAgICAgICByZXR1cm4gYDxJbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJzdHJpbmctZGF0ZXRpbWVcIjpcbiAgICAgICAgcmV0dXJuIGA8U1FMRGF0ZVRpbWVJbnB1dCAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJzdHJpbmctZGF0ZVwiOlxuICAgICAgICByZXR1cm4gYDxTUUxEYXRlSW5wdXQgJHtyZWdFeHByfSAvPmA7XG4gICAgICBjYXNlIFwibnVtYmVyLWlkXCI6XG4gICAgICAgIHJldHVybiBgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJudW1iZXItcGxhaW5cIjpcbiAgICAgICAgcmV0dXJuIGA8TnVtYmVySW5wdXQgcGxhY2Vob2xkZXI9XCIke2NvbC5sYWJlbH1cIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgIHJldHVybiBgPEJvb2xlYW5Ub2dnbGUgJHtyZWdFeHByfSAvPmA7XG4gICAgICBjYXNlIFwic3RyaW5nLWltYWdlXCI6XG4gICAgICAgIHJldHVybiBgPEltYWdlVXBsb2FkZXIgbXVsdGlwbGU9e2ZhbHNlfSAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJhcnJheS1pbWFnZXNcIjpcbiAgICAgICAgcmV0dXJuIGA8SW1hZ2VVcGxvYWRlciBtdWx0aXBsZT17dHJ1ZX0gJHtyZWdFeHByfSBtYXhTaXplPXs1fSAvPmA7XG4gICAgICBjYXNlIFwiZW51bXNcIjpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgZW51bUlkOiBzdHJpbmc7XG4gICAgICAgICAgaWYgKGNvbC5uYW1lID09PSBcIm9yZGVyQnlcIikge1xuICAgICAgICAgICAgZW51bUlkID0gYCR7bmFtZXMuY2FwaXRhbH0ke2luZmxlY3Rpb24uY2FtZWxpemUoY29sLm5hbWUpfVNlbGVjdGA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHsgaWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICAgIGVudW1JZCA9IGAke2lkfVNlbGVjdGA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBgPCR7ZW51bUlkfSAke3JlZ0V4cHJ9ICR7XG4gICAgICAgICAgICBjb2wub3B0aW9uYWwgfHwgY29sLm51bGxhYmxlID8gXCJjbGVhcmFibGVcIiA6IFwiXCJcbiAgICAgICAgICB9IHRleHRQcmVmaXg9XCJcIiAvPmA7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBgPD7ssL7snYQg7IiYIOyXhuuKlCBFbnVtICR7Y29sLm5hbWV9PC8+YDtcbiAgICAgICAgfVxuICAgICAgY2FzZSBcIm51bWJlci1ma19pZFwiOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKSk7XG4gICAgICAgICAgY29uc3QgZmtJZCA9IGAke3JlbFByb3Aud2l0aH1JZEFzeW5jU2VsZWN0YDtcbiAgICAgICAgICByZXR1cm4gYDwke2ZrSWR9IHsuLi5yZWdpc3RlcignJHtjb2wubmFtZX0nKX0gJHtcbiAgICAgICAgICAgIGNvbC5vcHRpb25hbCB8fCBjb2wubnVsbGFibGUgPyBcImNsZWFyYWJsZVwiIDogXCJcIlxuICAgICAgICAgIH0gc3Vic2V0PVwiQVwiIC8+YDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGA8SW5wdXQgJHtyZWdFeHByfSAvPmA7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICByZXR1cm4gYDw+JHtjb2wubmFtZX0gYXJyYXk8Lz5gO1xuICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICByZXR1cm4gYDw+JHtjb2wubmFtZX0gb2JqZWN0PC8+YDtcbiAgICAgIGNhc2UgXCJ2ZWN0b3JcIjpcbiAgICAgICAgLy8gdmVjdG9yIO2DgOyeheydgCDsnbzrsJjsoIHsnLzroZwgQVBJ66W8IO2Gte2VtCDsg53shLHrkJjrr4DroZwg7J296riwIOyghOyaqeycvOuhnCDtkZzsi5xcbiAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzTmFtZT1cInAtOHB4IHRleHQtZ3JheS01MDBcIj5bVmVjdG9yOiAke2NvbC5uYW1lfV0gLSDsnoTrsqDrlKkg642w7J207YSw64qUIEFQSeulvCDthrXtlbQg7J6Q64+ZIOyDneyEseuQqeuLiOuLpC48L2Rpdj5gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDrjIDsnZEg67aI6rCA64ql7ZWcIOugjOuNlCDtg4DsnoUgJHtjb2wucmVuZGVyVHlwZX0gb24gJHtjb2wubmFtZX1gKTtcbiAgICB9XG4gIH1cblxuICByZXNvbHZlRGVmYXVsdFZhbHVlKGNvbHVtbnM6IFJlbmRlcmluZ05vZGVbXSk6IG9iamVjdCB7XG4gICAgcmV0dXJuIGNvbHVtbnMucmVkdWNlKFxuICAgICAgKHJlc3VsdCwgY29sKSA9PiB7XG4gICAgICAgIGlmIChjb2wub3B0aW9uYWwpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZhbHVlOiB1bmtub3duO1xuICAgICAgICBpZiAoY29sLm51bGxhYmxlID09PSB0cnVlKSB7XG4gICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2ROdW1iZXIpIHtcbiAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEVudW0pIHtcbiAgICAgICAgICB2YWx1ZSA9IE9iamVjdC5rZXlzKGNvbC56b2RUeXBlLm9wdGlvbnMpWzBdO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RCb29sZWFuKSB7XG4gICAgICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRGF0ZSkge1xuICAgICAgICAgIHZhbHVlID0gbmV3IERhdGUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kU3RyaW5nKSB7XG4gICAgICAgICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1kYXRldGltZVwiKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFwibm93KClcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBcIlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQXJyYXkpIHtcbiAgICAgICAgICB2YWx1ZSA9IFtdO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RPYmplY3QpIHtcbiAgICAgICAgICB2YWx1ZSA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0W2NvbC5uYW1lXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICAgIHt9IGFzIHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9LFxuICAgICk7XG4gIH1cblxuICBhc3luYyByZW5kZXIoeyBlbnRpdHlJZCB9OiBUZW1wbGF0ZU9wdGlvbnNbXCJ2aWV3X2Zvcm1cIl0pIHtcbiAgICBjb25zdCBzYXZlUGFyYW1zWm9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKGAke2VudGl0eUlkfVNhdmVQYXJhbXNgKTtcbiAgICBjb25zdCBzYXZlUGFyYW1zTm9kZSA9IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoc2F2ZVBhcmFtc1pvZFR5cGUpO1xuXG4gICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgIGNvbnN0IG5hbWVzID0gRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChlbnRpdHlJZCk7XG4gICAgY29uc3QgY29sdW1ucyA9IChzYXZlUGFyYW1zTm9kZS5jaGlsZHJlbiBhcyBSZW5kZXJpbmdOb2RlW10pXG4gICAgICAuZmlsdGVyKChjb2wpID0+IGNvbC5uYW1lICE9PSBcImlkXCIpXG4gICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgY29uc3QgcHJvcENhbmRpZGF0ZSA9IGVudGl0eS5wcm9wcy5maW5kKChwcm9wKSA9PiBwcm9wLm5hbWUgPT09IGNvbC5uYW1lKTtcbiAgICAgICAgY29sLmxhYmVsID0gcHJvcENhbmRpZGF0ZT8uZGVzYyA/PyBjb2wubGFiZWw7XG4gICAgICAgIHJldHVybiBjb2w7XG4gICAgICB9KTtcblxuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXMucmVzb2x2ZURlZmF1bHRWYWx1ZShjb2x1bW5zKTtcblxuICAgIC8vIO2UhOumrCDthZztlIzrpr9cbiAgICBjb25zdCBwcmVUZW1wbGF0ZXM6IFJlbmRlcmVkVGVtcGxhdGVbXCJwcmVUZW1wbGF0ZXNcIl0gPSAoY29sdW1ucyBhcyBSZW5kZXJpbmdOb2RlW10pXG4gICAgICAuZmlsdGVyKChjb2wpID0+IHtcbiAgICAgICAgaWYgKGNvbC5uYW1lID09PSBcImlkXCIpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLm5hbWUuZW5kc1dpdGgoXCJfaWRcIikgfHwgY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWlkXCIpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lLnJlcGxhY2UoXCJfaWRcIiwgXCJcIikpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgbGV0IGtleTogVGVtcGxhdGVLZXk7XG4gICAgICAgIGxldCB0YXJnZXRNZElkID0gZW50aXR5SWQ7XG4gICAgICAgIGxldCBlbnVtSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgICAgICBrZXkgPSBcInZpZXdfZW51bXNfc2VsZWN0XCI7XG4gICAgICAgICAgY29uc3QgeyB0YXJnZXRFbnRpdHlOYW1lczogdGFyZ2V0TUROYW1lcywgaWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUoXG4gICAgICAgICAgICBlbnRpdHlJZCxcbiAgICAgICAgICAgIGNvbC5uYW1lLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGFyZ2V0TWRJZCA9IHRhcmdldE1ETmFtZXMuY2FwaXRhbDtcbiAgICAgICAgICBlbnVtSWQgPSBpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBrZXkgPSBcInZpZXdfaWRfYXN5bmNfc2VsZWN0XCI7XG4gICAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgICB0YXJnZXRNZElkID0gcmVsUHJvcC53aXRoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBrZXk6IGtleSBhcyBUZW1wbGF0ZUtleSxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBlbnRpdHlJZDogdGFyZ2V0TWRJZCxcbiAgICAgICAgICAgIG5vZGU6IGNvbCxcbiAgICAgICAgICAgIGVudW1JZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKHByZVRlbXBsYXRlKSA9PiB7XG4gICAgICAgIGlmIChwcmVUZW1wbGF0ZS5rZXkgPT09IFwidmlld19pZF9hc3luY19zZWxlY3RcIikge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBFbnRpdHlNYW5hZ2VyLmdldChwcmVUZW1wbGF0ZS5vcHRpb25zLmVudGl0eUlkKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aChuYW1lcyksXG4gICAgICBib2R5OiBgXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSwgRGlzcGF0Y2gsIFNldFN0YXRlQWN0aW9uLCBmb3J3YXJkUmVmLCBSZWYsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlU2VhcmNoUGFyYW1zIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQge1xuICBCdXR0b24sXG4gIENoZWNrYm94LFxuICBGb3JtLFxuICBIZWFkZXIsXG4gIElucHV0LFxuICBTZWdtZW50LFxuICBUZXh0QXJlYSxcbiAgTGFiZWwsXG59IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSBcImx1eG9uXCI7XG5cbmltcG9ydCB7IEJhY2tMaW5rLCBMaW5rSW5wdXQsIE51bWJlcklucHV0LCBCb29sZWFuVG9nZ2xlLCBTUUxEYXRlVGltZUlucHV0LCBTUUxEYXRlSW5wdXQsIHVzZVR5cGVGb3JtLCB1c2VHb0JhY2ssIGZvcm1hdERhdGVUaW1lIH0gZnJvbSBcIkBzb25hbXUta2l0L3JlYWN0LXN1aVwiO1xuaW1wb3J0IHsgZGVmYXVsdENhdGNoIH0gZnJvbSAnQC9zZXJ2aWNlcy9zb25hbXUuc2hhcmVkJztcbi8vIGltcG9ydCB7IEltYWdlVXBsb2FkZXIgfSBmcm9tICdAL2FkbWluLWNvbW1vbi9JbWFnZVVwbG9hZGVyJztcbi8vIGltcG9ydCB7IHVzZUNvbW1vbk1vZGFsIH0gZnJvbSBcIkAvYWRtaW4tY29tbW9uL0NvbW1vbk1vZGFsXCI7XG5cbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1TYXZlUGFyYW1zIH0gZnJvbSAnQC9zZXJ2aWNlcy8ke25hbWVzLmZzfS8ke25hbWVzLmZzfS50eXBlcyc7XG5pbXBvcnQgeyAke25hbWVzLmNhcGl0YWx9U2VydmljZSB9IGZyb20gJ0Avc2VydmljZXMvJHtuYW1lcy5mc30vJHtuYW1lcy5mc30uc2VydmljZSc7XG5pbXBvcnQgeyAke25hbWVzLmNhcGl0YWx9U3Vic2V0QSB9IGZyb20gJ0Avc2VydmljZXMvc29uYW11LmdlbmVyYXRlZCc7XG4ke3VuaXF1ZShcbiAgY29sdW1uc1xuICAgIC5maWx0ZXIoKGNvbCkgPT4gW1wibnVtYmVyLWZrX2lkXCIsIFwiZW51bXNcIl0uaW5jbHVkZXMoY29sLnJlbmRlclR5cGUpKVxuICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ29sdW1uSW1wb3J0KGVudGl0eUlkLCBjb2wpO1xuICAgIH0pLFxuKS5qb2luKFwiXFxuXCIpfVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybVBhZ2UoKSB7XG4gIC8vIOudvOyasO2MhSBzZWFyY2hQYXJhbXNcbiAgY29uc3QgW3NlYXJjaFBhcmFtc10gPSB1c2VTZWFyY2hQYXJhbXMoKTtcbiAgY29uc3QgcXVlcnkgPSB7XG4gICAgaWQ6IHNlYXJjaFBhcmFtcy5nZXQoJ2lkJykgPz8gdW5kZWZpbmVkLFxuICB9O1xuXG4gIHJldHVybiA8JHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm0gaWQ9e3F1ZXJ5Py5pZCA/IE51bWJlcihxdWVyeS5pZCkgOiB1bmRlZmluZWR9IC8+O1xufVxudHlwZSAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybVByb3BzID0ge1xuICBpZD86IG51bWJlcjtcbiAgbW9kZT86ICdwYWdlJyB8ICdtb2RhbCc7XG59O1xuZXhwb3J0IGZ1bmN0aW9uICR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtKHsgaWQsIG1vZGUgfTogJHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm1Qcm9wcykge1xuICAvLyDtjrjsp5Hsi5wg6riw7KG0IHJvd1xuICBjb25zdCBbcm93LCBzZXRSb3ddID0gdXNlU3RhdGU8JHtuYW1lcy5jYXBpdGFsfVN1YnNldEEgfCB1bmRlZmluZWQ+KCk7XG5cbiAgLy8gJHtuYW1lcy5jYXBpdGFsfVNhdmVQYXJhbXMg7Y+8XG4gIGNvbnN0IHsgZm9ybSwgc2V0Rm9ybSwgcmVnaXN0ZXIgfSA9IHVzZVR5cGVGb3JtKCR7bmFtZXMuY2FwaXRhbH1TYXZlUGFyYW1zLCAke0pTT04uc3RyaW5naWZ5KFxuICAgIGRlZmF1bHRWYWx1ZSxcbiAgKS5yZXBsYWNlKC9cIm5vd1xcKFxcKVwiL2csIFwiRGF0ZVRpbWUubG9jYWwoKS50b1NRTCgpIS5zbGljZSgwLCAxOSlcIil9KTtcblxuICAvLyDsiJjsoJXsnbwg65WMIOq4sOyhtCByb3cg7L2cXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlkKSB7XG4gICAgICAke25hbWVzLmNhcGl0YWx9U2VydmljZS5nZXQke25hbWVzLmNhcGl0YWx9KCdBJywgaWQpLnRoZW4oKHJvdykgPT4ge1xuICAgICAgICBzZXRSb3cocm93KTtcbiAgICAgICAgc2V0Rm9ybSh7XG4gICAgICAgICAgLi4ucm93LFxuICAgICAgICAgICR7Y29sdW1uc1xuICAgICAgICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItZmtfaWRcIilcbiAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoY29sLm51bGxhYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2NvbC5uYW1lfTogcm93LiR7Y29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIj8uaWRcIil9ID8/IG51bGxgO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBgJHtjb2wubmFtZX06IHJvdy4ke2NvbC5uYW1lLnJlcGxhY2UoXCJfaWRcIiwgXCIuaWRcIil9YDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKFwiLFxcblwiKX1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtpZF0pO1xuXG4gIC8vIENvbW1vbk1vZGFsXG4gIC8vIGNvbnN0IHsgZG9uZU1vZGFsLCBjbG9zZU1vZGFsIH0gPSB1c2VDb21tb25Nb2RhbCgpO1xuXG4gIC8vIOyggOyepVxuICBjb25zdCB7IGdvQmFjayB9ID0gdXNlR29CYWNrKCk7XG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAke25hbWVzLmNhcGl0YWx9U2VydmljZS5zYXZlKFtmb3JtXSkudGhlbigoW2lkXSkgPT4ge1xuICAgICAgaWYoIG1vZGUgPT09ICdtb2RhbCcgKSB7XG4gICAgICAgIC8vIGRvbmVNb2RhbCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ29CYWNrKCcvYWRtaW4vJHtuYW1lcy5mc1BsdXJhbH0nKTtcbiAgICAgIH1cbiAgICB9KS5jYXRjaChkZWZhdWx0Q2F0Y2gpO1xuICB9LCBbIGZvcm0sIG1vZGUsIGlkIF0pO1xuXG4gIC8vIO2OmOydtOyngFxuICBjb25zdCBQQUdFID0ge1xuICAgIHRpdGxlOiBcXGAke2VudGl0eS50aXRsZSA/PyBuYW1lcy5jYXBpdGFsfVxcJHtpZCA/IFxcYCNcXCR7aWR9IOyImOyglVxcYCA6ICcg65Ox66GdJ31cXGAsXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybVwiPlxuICAgICAgPFNlZ21lbnQgcGFkZGVkIGJhc2ljPlxuICAgICAgICA8U2VnbWVudCBwYWRkZWQgY29sb3I9XCJncmV5XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoZWFkZXItcm93XCI+XG4gICAgICAgICAgICA8SGVhZGVyPlxuICAgICAgICAgICAgICB7UEFHRS50aXRsZX1cbiAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgeyBtb2RlICE9PSAnbW9kYWwnICYmIDxkaXYgY2xhc3NOYW1lPVwiYnV0dG9uc1wiPlxuICAgICAgICAgICAgICA8QmFja0xpbmsgcHJpbWFyeSBzaXplPVwidGlueVwiIHRvPVwiL2FkbWluLyR7XG4gICAgICAgICAgICAgICAgbmFtZXMuZnNQbHVyYWxcbiAgICAgICAgICAgICAgfVwiIGNvbnRlbnQ9XCLrqqnroZ1cIiBpY29uPVwibGlzdFwiIC8+XG4gICAgICAgICAgICA8L2Rpdj59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPEZvcm0+XG4gICAgICAgICAgICAke2NvbHVtbnNcbiAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbC5uYW1lID09PSBcImNyZWF0ZWRfYXRcIikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGB7Zm9ybS5pZCAmJiAoJHt0aGlzLndyYXBGRyhcbiAgICAgICAgICAgICAgICAgICAgYDxkaXYgY2xhc3NOYW1lPVwicC04cHhcIj57Zm9ybWF0RGF0ZVRpbWUoZm9ybS4ke2NvbC5uYW1lfSl9PC9kaXY+YCxcbiAgICAgICAgICAgICAgICAgICAgXCLrk7HroZ3snbzsi5xcIixcbiAgICAgICAgICAgICAgICAgICl9KX1gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy53cmFwRkcoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ29sdW1uKGVudGl0eUlkLCBjb2wsIG5hbWVzKSxcbiAgICAgICAgICAgICAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sLmxhYmVsLmVuZHNXaXRoKFwiSWRcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGNvbC5sYWJlbC5yZXBsYWNlKFwiSWRcIiwgXCJcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50aXR5LnRpdGxlID8/IGNvbC5sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sLmxhYmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sLmxhYmVsO1xuICAgICAgICAgICAgICAgICAgICB9KSgpLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKFwiXFxuXCIpfVxuICAgICAgICAgICAgPFNlZ21lbnQgYmFzaWMgdGV4dEFsaWduPVwiY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cInN1Ym1pdFwiIHByaW1hcnkgb25DbGljaz17aGFuZGxlU3VibWl0fSBjb250ZW50PVwi7KCA7J6lXCIgaWNvbj1cInNhdmVcIiAvPlxuICAgICAgICAgICAgPC9TZWdtZW50PlxuICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgPC9TZWdtZW50PlxuICAgICAgPC9TZWdtZW50PlxuICAgIDwvZGl2PlxuICApO1xufTtcbiAgICAgIGAudHJpbSgpLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgICBwcmVUZW1wbGF0ZXMsXG4gICAgfTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbImluZmxlY3Rpb24iLCJ1bmlxdWUiLCJ6IiwiRW50aXR5TWFuYWdlciIsImdldEVudW1JbmZvRnJvbUNvbE5hbWUiLCJnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZSIsIlRlbXBsYXRlIiwiZ2V0Wm9kVHlwZUJ5SWQiLCJ6b2RUeXBlVG9SZW5kZXJpbmdOb2RlIiwiVGVtcGxhdGVfX3ZpZXdfZm9ybSIsImdldFRhcmdldEFuZFBhdGgiLCJuYW1lcyIsInRhcmdldCIsInBhdGgiLCJmc1BsdXJhbCIsIndyYXBGQyIsImJvZHkiLCJsYWJlbCIsImpvaW4iLCJ3cmFwRkciLCJyZW5kZXJDb2x1bW5JbXBvcnQiLCJlbnRpdHlJZCIsImNvbCIsInJlbmRlclR5cGUiLCJpZCIsInRhcmdldEVudGl0eU5hbWVzIiwibmFtZSIsImNvbXBvbmVudElkIiwiZnMiLCJyZWxQcm9wIiwicmVwbGFjZSIsInRhcmdldE5hbWVzIiwiZ2V0TmFtZXNGcm9tSWQiLCJ3aXRoIiwiRXJyb3IiLCJyZW5kZXJDb2x1bW4iLCJwYXJlbnQiLCJyZWdFeHByIiwiem9kVHlwZSIsIlpvZFN0cmluZyIsIm1heExlbmd0aCIsImVudW1JZCIsImNhcGl0YWwiLCJjYW1lbGl6ZSIsIm9wdGlvbmFsIiwibnVsbGFibGUiLCJma0lkIiwicmVzb2x2ZURlZmF1bHRWYWx1ZSIsImNvbHVtbnMiLCJyZWR1Y2UiLCJyZXN1bHQiLCJ2YWx1ZSIsIlpvZE51bWJlciIsIlpvZEVudW0iLCJPYmplY3QiLCJrZXlzIiwib3B0aW9ucyIsIlpvZEJvb2xlYW4iLCJab2REYXRlIiwiRGF0ZSIsIlpvZEFycmF5IiwiWm9kT2JqZWN0IiwicmVuZGVyIiwic2F2ZVBhcmFtc1pvZFR5cGUiLCJzYXZlUGFyYW1zTm9kZSIsImVudGl0eSIsImdldCIsImNoaWxkcmVuIiwiZmlsdGVyIiwibWFwIiwicHJvcENhbmRpZGF0ZSIsInByb3BzIiwiZmluZCIsInByb3AiLCJkZXNjIiwiZGVmYXVsdFZhbHVlIiwicHJlVGVtcGxhdGVzIiwiZW5kc1dpdGgiLCJrZXkiLCJ0YXJnZXRNZElkIiwidGFyZ2V0TUROYW1lcyIsIm5vZGUiLCJwcmVUZW1wbGF0ZSIsImluY2x1ZGVzIiwiY2FwaXRhbFBsdXJhbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0aXRsZSIsInRyaW0iLCJpbXBvcnRLZXlzIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxnQkFBZ0IsYUFBYTtBQUNwQyxTQUFTQyxNQUFNLFFBQVEsVUFBVTtBQUNqQyxTQUFTQyxDQUFDLFFBQVEsTUFBTTtBQUN4QixTQUFTQyxhQUFhLFFBQWdDLGlDQUE4QjtBQUVwRixTQUFTQyxzQkFBc0IsRUFBRUMsMEJBQTBCLFFBQVEsZ0JBQWE7QUFFaEYsU0FBU0MsUUFBUSxRQUFRLGlCQUFjO0FBQ3ZDLFNBQVNDLGNBQWMsRUFBRUMsc0JBQXNCLFFBQVEsc0JBQW1CO0FBRTFFLE9BQU8sTUFBTUMsNEJBQTRCSDtJQUN2QyxhQUFjO1FBQ1osS0FBSyxDQUFDO0lBQ1I7SUFFQUksaUJBQWlCQyxLQUF3QixFQUFFO1FBQ3pDLE9BQU87WUFDTEMsUUFBUTtZQUNSQyxNQUFNLEdBQUdGLE1BQU1HLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDcEM7SUFDRjtJQUVBQyxPQUFPQyxJQUFZLEVBQUVDLEtBQWMsRUFBVTtRQUMzQyxPQUFPO1lBQ0wsQ0FBQyxZQUFZLEVBQUVBLFFBQVEsQ0FBQyxZQUFZLEVBQUVB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
340
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19mb3JtLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIsIHR5cGUgRW50aXR5TmFtZXNSZWNvcmQgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IFJlbmRlcmluZ05vZGUsIFRlbXBsYXRlS2V5LCBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGdldEVudW1JbmZvRnJvbUNvbE5hbWUsIGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lIH0gZnJvbSBcIi4uL2hlbHBlcnNcIjtcbmltcG9ydCB0eXBlIHsgUmVuZGVyZWRUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcbmltcG9ydCB7IGdldFpvZFR5cGVCeUlkLCB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlIH0gZnJvbSBcIi4uL3pvZC1jb252ZXJ0ZXJcIjtcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX192aWV3X2Zvcm0gZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwidmlld19mb3JtXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBcIndlYi9zcmMvcGFnZXMvYWRtaW5cIixcbiAgICAgIHBhdGg6IGAke25hbWVzLmZzUGx1cmFsfS9mb3JtLnRzeGAsXG4gICAgfTtcbiAgfVxuXG4gIHdyYXBGQyhib2R5OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgYDxGb3JtLkZpZWxkPiR7bGFiZWwgPyBgXFxuICAgPGxhYmVsPiR7bGFiZWx9PC9sYWJlbD5gIDogXCJcIn1gLFxuICAgICAgYm9keSxcbiAgICAgIGA8L0Zvcm0uRmllbGQ+YCxcbiAgICBdLmpvaW4oXCJcXG5cIik7XG4gIH1cbiAgd3JhcEZHKGJvZHk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBbYDxGb3JtLkdyb3VwIHdpZHRocz1cImVxdWFsXCI+YCwgdGhpcy53cmFwRkMoYm9keSwgbGFiZWwpLCBgPC9Gb3JtLkdyb3VwPmBdLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICByZW5kZXJDb2x1bW5JbXBvcnQoZW50aXR5SWQ6IHN0cmluZywgY29sOiBSZW5kZXJpbmdOb2RlKSB7XG4gICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgIGNvbnN0IHsgaWQsIHRhcmdldEVudGl0eU5hbWVzIH0gPSBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgICBjb25zdCBjb21wb25lbnRJZCA9IGAke2lkfVNlbGVjdGA7XG4gICAgICByZXR1cm4gYGltcG9ydCB7ICR7Y29tcG9uZW50SWR9IH0gZnJvbSBcIkAvY29tcG9uZW50cy8ke3RhcmdldEVudGl0eU5hbWVzLmZzfS8ke2NvbXBvbmVudElkfVwiO2A7XG4gICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItZmtfaWRcIikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0TmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKHJlbFByb3Aud2l0aCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudElkID0gYCR7cmVsUHJvcC53aXRofUlkQXN5bmNTZWxlY3RgO1xuICAgICAgICByZXR1cm4gYGltcG9ydCB7ICR7Y29tcG9uZW50SWR9IH0gZnJvbSBcIkAvY29tcG9uZW50cy8ke3RhcmdldE5hbWVzLmZzfS8ke2NvbXBvbmVudElkfVwiO2A7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg66CM642UIOu2iOqwgOuKpe2VnCDsnoTtj6ztirggJHtjb2wubmFtZX0gJHtjb2wucmVuZGVyVHlwZX1gKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXJDb2x1bW4oXG4gICAgZW50aXR5SWQ6IHN0cmluZyxcbiAgICBjb2w6IFJlbmRlcmluZ05vZGUsXG4gICAgbmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkLFxuICAgIHBhcmVudDogc3RyaW5nID0gXCJcIixcbiAgKTogc3RyaW5nIHtcbiAgICBsZXQgcmVnRXhwcjogc3RyaW5nID0gXCJcIjtcbiAgICByZWdFeHByID0gYHsuLi5yZWdpc3RlcihcXGAke3BhcmVudH0ke2NvbC5uYW1lfVxcYCl9YDtcblxuICAgIHN3aXRjaCAoY29sLnJlbmRlclR5cGUpIHtcbiAgICAgIGNhc2UgXCJzdHJpbmctcGxhaW5cIjpcbiAgICAgICAgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RTdHJpbmcgJiYgKGNvbC56b2RUeXBlLm1heExlbmd0aCA/PyAwKSA8PSA1MTIpIHtcbiAgICAgICAgICByZXR1cm4gYDxJbnB1dCBwbGFjZWhvbGRlcj1cIiR7Y29sLmxhYmVsfVwiICR7cmVnRXhwcn0gLz5gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBgPFRleHRBcmVhIHJvd3M9ezh9IHBsYWNlaG9sZGVyPVwiJHtjb2wubGFiZWx9XCIgJHtyZWdFeHByfSAvPmA7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgXCJkYXRldGltZVwiOlxuICAgICAgICByZXR1cm4gYDxJbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJzdHJpbmctZGF0ZXRpbWVcIjpcbiAgICAgICAgcmV0dXJuIGA8U1FMRGF0ZVRpbWVJbnB1dCAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJzdHJpbmctZGF0ZVwiOlxuICAgICAgICByZXR1cm4gYDxTUUxEYXRlSW5wdXQgJHtyZWdFeHByfSAvPmA7XG4gICAgICBjYXNlIFwibnVtYmVyLWlkXCI6XG4gICAgICAgIHJldHVybiBgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJudW1iZXItcGxhaW5cIjpcbiAgICAgICAgcmV0dXJuIGA8TnVtYmVySW5wdXQgcGxhY2Vob2xkZXI9XCIke2NvbC5sYWJlbH1cIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgIHJldHVybiBgPEJvb2xlYW5Ub2dnbGUgJHtyZWdFeHByfSAvPmA7XG4gICAgICBjYXNlIFwic3RyaW5nLWltYWdlXCI6XG4gICAgICAgIHJldHVybiBgPEltYWdlVXBsb2FkZXIgbXVsdGlwbGU9e2ZhbHNlfSAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJhcnJheS1pbWFnZXNcIjpcbiAgICAgICAgcmV0dXJuIGA8SW1hZ2VVcGxvYWRlciBtdWx0aXBsZT17dHJ1ZX0gJHtyZWdFeHByfSBtYXhTaXplPXs1fSAvPmA7XG4gICAgICBjYXNlIFwiZW51bXNcIjpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgZW51bUlkOiBzdHJpbmc7XG4gICAgICAgICAgaWYgKGNvbC5uYW1lID09PSBcIm9yZGVyQnlcIikge1xuICAgICAgICAgICAgZW51bUlkID0gYCR7bmFtZXMuY2FwaXRhbH0ke2luZmxlY3Rpb24uY2FtZWxpemUoY29sLm5hbWUpfVNlbGVjdGA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHsgaWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICAgIGVudW1JZCA9IGAke2lkfVNlbGVjdGA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBgPCR7ZW51bUlkfSAke3JlZ0V4cHJ9ICR7XG4gICAgICAgICAgICBjb2wub3B0aW9uYWwgfHwgY29sLm51bGxhYmxlID8gXCJjbGVhcmFibGVcIiA6IFwiXCJcbiAgICAgICAgICB9IHRleHRQcmVmaXg9XCJcIiAvPmA7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBgPD7ssL7snYQg7IiYIOyXhuuKlCBFbnVtICR7Y29sLm5hbWV9PC8+YDtcbiAgICAgICAgfVxuICAgICAgY2FzZSBcIm51bWJlci1ma19pZFwiOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKSk7XG4gICAgICAgICAgY29uc3QgZmtJZCA9IGAke3JlbFByb3Aud2l0aH1JZEFzeW5jU2VsZWN0YDtcbiAgICAgICAgICByZXR1cm4gYDwke2ZrSWR9IHsuLi5yZWdpc3RlcignJHtjb2wubmFtZX0nKX0gJHtcbiAgICAgICAgICAgIGNvbC5vcHRpb25hbCB8fCBjb2wubnVsbGFibGUgPyBcImNsZWFyYWJsZVwiIDogXCJcIlxuICAgICAgICAgIH0gc3Vic2V0PVwiQVwiIC8+YDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGA8SW5wdXQgJHtyZWdFeHByfSAvPmA7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICByZXR1cm4gYDw+JHtjb2wubmFtZX0gYXJyYXk8Lz5gO1xuICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICByZXR1cm4gYDw+JHtjb2wubmFtZX0gb2JqZWN0PC8+YDtcbiAgICAgIGNhc2UgXCJ2ZWN0b3JcIjpcbiAgICAgICAgLy8gdmVjdG9yIO2DgOyeheydgCDsnbzrsJjsoIHsnLzroZwgQVBJ66W8IO2Gte2VtCDsg53shLHrkJjrr4DroZwg7J296riwIOyghOyaqeycvOuhnCDtkZzsi5xcbiAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzTmFtZT1cInAtOHB4IHRleHQtZ3JheS01MDBcIj5bVmVjdG9yOiAke2NvbC5uYW1lfV0gLSDsnoTrsqDrlKkg642w7J207YSw64qUIEFQSeulvCDthrXtlbQg7J6Q64+ZIOyDneyEseuQqeuLiOuLpC48L2Rpdj5gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDrjIDsnZEg67aI6rCA64ql7ZWcIOugjOuNlCDtg4DsnoUgJHtjb2wucmVuZGVyVHlwZX0gb24gJHtjb2wubmFtZX1gKTtcbiAgICB9XG4gIH1cblxuICByZXNvbHZlRGVmYXVsdFZhbHVlKGNvbHVtbnM6IFJlbmRlcmluZ05vZGVbXSk6IG9iamVjdCB7XG4gICAgcmV0dXJuIGNvbHVtbnMucmVkdWNlKFxuICAgICAgKHJlc3VsdCwgY29sKSA9PiB7XG4gICAgICAgIGlmIChjb2wub3B0aW9uYWwpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZhbHVlOiB1bmtub3duO1xuICAgICAgICBpZiAoY29sLm51bGxhYmxlID09PSB0cnVlKSB7XG4gICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2ROdW1iZXIpIHtcbiAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEVudW0pIHtcbiAgICAgICAgICB2YWx1ZSA9IE9iamVjdC5rZXlzKGNvbC56b2RUeXBlLm9wdGlvbnMpWzBdO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RCb29sZWFuKSB7XG4gICAgICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRGF0ZSkge1xuICAgICAgICAgIHZhbHVlID0gbmV3IERhdGUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kU3RyaW5nKSB7XG4gICAgICAgICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1kYXRldGltZVwiKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFwibm93KClcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBcIlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQXJyYXkpIHtcbiAgICAgICAgICB2YWx1ZSA9IFtdO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RPYmplY3QpIHtcbiAgICAgICAgICB2YWx1ZSA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0W2NvbC5uYW1lXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICAgIHt9IGFzIHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9LFxuICAgICk7XG4gIH1cblxuICBhc3luYyByZW5kZXIoeyBlbnRpdHlJZCB9OiBUZW1wbGF0ZU9wdGlvbnNbXCJ2aWV3X2Zvcm1cIl0pIHtcbiAgICBjb25zdCBzYXZlUGFyYW1zWm9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKGAke2VudGl0eUlkfVNhdmVQYXJhbXNgKTtcbiAgICBjb25zdCBzYXZlUGFyYW1zTm9kZSA9IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoc2F2ZVBhcmFtc1pvZFR5cGUpO1xuXG4gICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgIGNvbnN0IG5hbWVzID0gRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChlbnRpdHlJZCk7XG4gICAgY29uc3QgY29sdW1ucyA9IChzYXZlUGFyYW1zTm9kZS5jaGlsZHJlbiBhcyBSZW5kZXJpbmdOb2RlW10pXG4gICAgICAuZmlsdGVyKChjb2wpID0+IGNvbC5uYW1lICE9PSBcImlkXCIpXG4gICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgY29uc3QgcHJvcENhbmRpZGF0ZSA9IGVudGl0eS5wcm9wcy5maW5kKChwcm9wKSA9PiBwcm9wLm5hbWUgPT09IGNvbC5uYW1lKTtcbiAgICAgICAgY29sLmxhYmVsID0gcHJvcENhbmRpZGF0ZT8uZGVzYyA/PyBjb2wubGFiZWw7XG4gICAgICAgIHJldHVybiBjb2w7XG4gICAgICB9KTtcblxuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXMucmVzb2x2ZURlZmF1bHRWYWx1ZShjb2x1bW5zKTtcblxuICAgIC8vIO2UhOumrCDthZztlIzrpr9cbiAgICBjb25zdCBwcmVUZW1wbGF0ZXM6IFJlbmRlcmVkVGVtcGxhdGVbXCJwcmVUZW1wbGF0ZXNcIl0gPSAoY29sdW1ucyBhcyBSZW5kZXJpbmdOb2RlW10pXG4gICAgICAuZmlsdGVyKChjb2wpID0+IHtcbiAgICAgICAgaWYgKGNvbC5uYW1lID09PSBcImlkXCIpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLm5hbWUuZW5kc1dpdGgoXCJfaWRcIikgfHwgY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWlkXCIpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lLnJlcGxhY2UoXCJfaWRcIiwgXCJcIikpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgbGV0IGtleTogVGVtcGxhdGVLZXk7XG4gICAgICAgIGxldCB0YXJnZXRNZElkID0gZW50aXR5SWQ7XG4gICAgICAgIGxldCBlbnVtSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgICAgICBrZXkgPSBcInZpZXdfZW51bXNfc2VsZWN0XCI7XG4gICAgICAgICAgY29uc3QgeyB0YXJnZXRFbnRpdHlOYW1lczogdGFyZ2V0TUROYW1lcywgaWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUoXG4gICAgICAgICAgICBlbnRpdHlJZCxcbiAgICAgICAgICAgIGNvbC5uYW1lLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGFyZ2V0TWRJZCA9IHRhcmdldE1ETmFtZXMuY2FwaXRhbDtcbiAgICAgICAgICBlbnVtSWQgPSBpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBrZXkgPSBcInZpZXdfaWRfYXN5bmNfc2VsZWN0XCI7XG4gICAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgICB0YXJnZXRNZElkID0gcmVsUHJvcC53aXRoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBrZXk6IGtleSBhcyBUZW1wbGF0ZUtleSxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBlbnRpdHlJZDogdGFyZ2V0TWRJZCxcbiAgICAgICAgICAgIG5vZGU6IGNvbCxcbiAgICAgICAgICAgIGVudW1JZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKHByZVRlbXBsYXRlKSA9PiB7XG4gICAgICAgIGlmIChwcmVUZW1wbGF0ZS5rZXkgPT09IFwidmlld19pZF9hc3luY19zZWxlY3RcIikge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBFbnRpdHlNYW5hZ2VyLmdldChwcmVUZW1wbGF0ZS5vcHRpb25zLmVudGl0eUlkKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aChuYW1lcyksXG4gICAgICBib2R5OiBgXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSwgRGlzcGF0Y2gsIFNldFN0YXRlQWN0aW9uLCBmb3J3YXJkUmVmLCBSZWYsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlU2VhcmNoUGFyYW1zIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQge1xuICBCdXR0b24sXG4gIENoZWNrYm94LFxuICBGb3JtLFxuICBIZWFkZXIsXG4gIElucHV0LFxuICBTZWdtZW50LFxuICBUZXh0QXJlYSxcbiAgTGFiZWwsXG59IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSBcImx1eG9uXCI7XG5cbmltcG9ydCB7IEJhY2tMaW5rLCBMaW5rSW5wdXQsIE51bWJlcklucHV0LCBCb29sZWFuVG9nZ2xlLCBTUUxEYXRlVGltZUlucHV0LCBTUUxEYXRlSW5wdXQsIHVzZVR5cGVGb3JtLCB1c2VHb0JhY2ssIGZvcm1hdERhdGVUaW1lIH0gZnJvbSBcIkBzb25hbXUta2l0L3JlYWN0LXN1aVwiO1xuaW1wb3J0IHsgZGVmYXVsdENhdGNoIH0gZnJvbSAnQC9zZXJ2aWNlcy9zb25hbXUuc2hhcmVkJztcbi8vIGltcG9ydCB7IEltYWdlVXBsb2FkZXIgfSBmcm9tICdAL2FkbWluLWNvbW1vbi9JbWFnZVVwbG9hZGVyJztcbi8vIGltcG9ydCB7IHVzZUNvbW1vbk1vZGFsIH0gZnJvbSBcIkAvYWRtaW4tY29tbW9uL0NvbW1vbk1vZGFsXCI7XG5cbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1TYXZlUGFyYW1zIH0gZnJvbSAnQC9zZXJ2aWNlcy8ke25hbWVzLmZzfS8ke25hbWVzLmZzfS50eXBlcyc7XG5pbXBvcnQgeyAke25hbWVzLmNhcGl0YWx9U2VydmljZSB9IGZyb20gJ0Avc2VydmljZXMvc2VydmljZXMuZ2VuZXJhdGVkJztcbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRBIH0gZnJvbSAnQC9zZXJ2aWNlcy9zb25hbXUuZ2VuZXJhdGVkJztcbiR7dW5pcXVlKFxuICBjb2x1bW5zXG4gICAgLmZpbHRlcigoY29sKSA9PiBbXCJudW1iZXItZmtfaWRcIiwgXCJlbnVtc1wiXS5pbmNsdWRlcyhjb2wucmVuZGVyVHlwZSkpXG4gICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJDb2x1bW5JbXBvcnQoZW50aXR5SWQsIGNvbCk7XG4gICAgfSksXG4pLmpvaW4oXCJcXG5cIil9XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtUGFnZSgpIHtcbiAgLy8g65287Jqw7YyFIHNlYXJjaFBhcmFtc1xuICBjb25zdCBbc2VhcmNoUGFyYW1zXSA9IHVzZVNlYXJjaFBhcmFtcygpO1xuICBjb25zdCBxdWVyeSA9IHtcbiAgICBpZDogc2VhcmNoUGFyYW1zLmdldCgnaWQnKSA/PyB1bmRlZmluZWQsXG4gIH07XG5cbiAgcmV0dXJuIDwke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybSBpZD17cXVlcnk/LmlkID8gTnVtYmVyKHF1ZXJ5LmlkKSA6IHVuZGVmaW5lZH0gLz47XG59XG50eXBlICR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtUHJvcHMgPSB7XG4gIGlkPzogbnVtYmVyO1xuICBtb2RlPzogJ3BhZ2UnIHwgJ21vZGFsJztcbn07XG5leHBvcnQgZnVuY3Rpb24gJHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm0oeyBpZCwgbW9kZSB9OiAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybVByb3BzKSB7XG4gIC8vIO2OuOynkeyLnCDquLDsobQgcm93XG4gIGNvbnN0IFtyb3csIHNldFJvd10gPSB1c2VTdGF0ZTwke25hbWVzLmNhcGl0YWx9U3Vic2V0QSB8IHVuZGVmaW5lZD4oKTtcblxuICAvLyAke25hbWVzLmNhcGl0YWx9U2F2ZVBhcmFtcyDtj7xcbiAgY29uc3QgeyBmb3JtLCBzZXRGb3JtLCByZWdpc3RlciB9ID0gdXNlVHlwZUZvcm0oJHtuYW1lcy5jYXBpdGFsfVNhdmVQYXJhbXMsICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgZGVmYXVsdFZhbHVlLFxuICApLnJlcGxhY2UoL1wibm93XFwoXFwpXCIvZywgXCJEYXRlVGltZS5sb2NhbCgpLnRvU1FMKCkhLnNsaWNlKDAsIDE5KVwiKX0pO1xuXG4gIC8vIOyImOygleydvCDrlYwg6riw7KG0IHJvdyDsvZxcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaWQpIHtcbiAgICAgICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlLmdldCR7bmFtZXMuY2FwaXRhbH0oJ0EnLCBpZCkudGhlbigocm93KSA9PiB7XG4gICAgICAgIHNldFJvdyhyb3cpO1xuICAgICAgICBzZXRGb3JtKHtcbiAgICAgICAgICAuLi5yb3csXG4gICAgICAgICAgJHtjb2x1bW5zXG4gICAgICAgICAgICAuZmlsdGVyKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcIm51bWJlci1ma19pZFwiKVxuICAgICAgICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjb2wubnVsbGFibGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7Y29sLm5hbWV9OiByb3cuJHtjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiPy5pZFwiKX0gPz8gbnVsbGA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2NvbC5uYW1lfTogcm93LiR7Y29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIi5pZFwiKX1gO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCIsXFxuXCIpfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2lkXSk7XG5cbiAgLy8gQ29tbW9uTW9kYWxcbiAgLy8gY29uc3QgeyBkb25lTW9kYWwsIGNsb3NlTW9kYWwgfSA9IHVzZUNvbW1vbk1vZGFsKCk7XG5cbiAgLy8g7KCA7J6lXG4gIGNvbnN0IHsgZ29CYWNrIH0gPSB1c2VHb0JhY2soKTtcbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlLnNhdmUoW2Zvcm1dKS50aGVuKChbaWRdKSA9PiB7XG4gICAgICBpZiggbW9kZSA9PT0gJ21vZGFsJyApIHtcbiAgICAgICAgLy8gZG9uZU1vZGFsKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnb0JhY2soJy9hZG1pbi8ke25hbWVzLmZzUGx1cmFsfScpO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKGRlZmF1bHRDYXRjaCk7XG4gIH0sIFsgZm9ybSwgbW9kZSwgaWQgXSk7XG5cbiAgLy8g7Y6Y7J207KeAXG4gIGNvbnN0IFBBR0UgPSB7XG4gICAgdGl0bGU6IFxcYCR7ZW50aXR5LnRpdGxlID8/IG5hbWVzLmNhcGl0YWx9XFwke2lkID8gXFxgI1xcJHtpZH0g7IiY7KCVXFxgIDogJyDrk7HroZ0nfVxcYCxcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtXCI+XG4gICAgICA8U2VnbWVudCBwYWRkZWQgYmFzaWM+XG4gICAgICAgIDxTZWdtZW50IHBhZGRlZCBjb2xvcj1cImdyZXlcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhlYWRlci1yb3dcIj5cbiAgICAgICAgICAgIDxIZWFkZXI+XG4gICAgICAgICAgICAgIHtQQUdFLnRpdGxlfVxuICAgICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgICAgICB7IG1vZGUgIT09ICdtb2RhbCcgJiYgPGRpdiBjbGFzc05hbWU9XCJidXR0b25zXCI+XG4gICAgICAgICAgICAgIDxCYWNrTGluayBwcmltYXJ5IHNpemU9XCJ0aW55XCIgdG89XCIvYWRtaW4vJHtcbiAgICAgICAgICAgICAgICBuYW1lcy5mc1BsdXJhbFxuICAgICAgICAgICAgICB9XCIgY29udGVudD1cIuuqqeuhnVwiIGljb249XCJsaXN0XCIgLz5cbiAgICAgICAgICAgIDwvZGl2Pn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8Rm9ybT5cbiAgICAgICAgICAgICR7Y29sdW1uc1xuICAgICAgICAgICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29sLm5hbWUgPT09IFwiY3JlYXRlZF9hdFwiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYHtmb3JtLmlkICYmICgke3RoaXMud3JhcEZHKFxuICAgICAgICAgICAgICAgICAgICBgPGRpdiBjbGFzc05hbWU9XCJwLThweFwiPntmb3JtYXREYXRlVGltZShmb3JtLiR7Y29sLm5hbWV9KX08L2Rpdj5gLFxuICAgICAgICAgICAgICAgICAgICBcIuuTseuhneydvOyLnFwiLFxuICAgICAgICAgICAgICAgICAgKX0pfWA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndyYXBGRyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDb2x1bW4oZW50aXR5SWQsIGNvbCwgbmFtZXMpLFxuICAgICAgICAgICAgICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2wubGFiZWwuZW5kc1dpdGgoXCJJZFwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoY29sLmxhYmVsLnJlcGxhY2UoXCJJZFwiLCBcIlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRpdHkudGl0bGUgPz8gY29sLmxhYmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2wubGFiZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2wubGFiZWw7XG4gICAgICAgICAgICAgICAgICAgIH0pKCksXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4oXCJcXG5cIil9XG4gICAgICAgICAgICA8U2VnbWVudCBiYXNpYyB0ZXh0QWxpZ249XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwic3VibWl0XCIgcHJpbWFyeSBvbkNsaWNrPXtoYW5kbGVTdWJtaXR9IGNvbnRlbnQ9XCLsoIDsnqVcIiBpY29uPVwic2F2ZVwiIC8+XG4gICAgICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICAgICAgPC9Gb3JtPlxuICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICA8L1NlZ21lbnQ+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuICAgICAgYC50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICAgIHByZVRlbXBsYXRlcyxcbiAgICB9O1xuICB9XG59XG4iXSwibmFtZXMiOlsiaW5mbGVjdGlvbiIsInVuaXF1ZSIsInoiLCJFbnRpdHlNYW5hZ2VyIiwiZ2V0RW51bUluZm9Gcm9tQ29sTmFtZSIsImdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lIiwiVGVtcGxhdGUiLCJnZXRab2RUeXBlQnlJZCIsInpvZFR5cGVUb1JlbmRlcmluZ05vZGUiLCJUZW1wbGF0ZV9fdmlld19mb3JtIiwiZ2V0VGFyZ2V0QW5kUGF0aCIsIm5hbWVzIiwidGFyZ2V0IiwicGF0aCIsImZzUGx1cmFsIiwid3JhcEZDIiwiYm9keSIsImxhYmVsIiwiam9pbiIsIndyYXBGRyIsInJlbmRlckNvbHVtbkltcG9ydCIsImVudGl0eUlkIiwiY29sIiwicmVuZGVyVHlwZSIsImlkIiwidGFyZ2V0RW50aXR5TmFtZXMiLCJuYW1lIiwiY29tcG9uZW50SWQiLCJmcyIsInJlbFByb3AiLCJyZXBsYWNlIiwidGFyZ2V0TmFtZXMiLCJnZXROYW1lc0Zyb21JZCIsIndpdGgiLCJFcnJvciIsInJlbmRlckNvbHVtbiIsInBhcmVudCIsInJlZ0V4cHIiLCJ6b2RUeXBlIiwiWm9kU3RyaW5nIiwibWF4TGVuZ3RoIiwiZW51bUlkIiwiY2FwaXRhbCIsImNhbWVsaXplIiwib3B0aW9uYWwiLCJudWxsYWJsZSIsImZrSWQiLCJyZXNvbHZlRGVmYXVsdFZhbHVlIiwiY29sdW1ucyIsInJlZHVjZSIsInJlc3VsdCIsInZhbHVlIiwiWm9kTnVtYmVyIiwiWm9kRW51bSIsIk9iamVjdCIsImtleXMiLCJvcHRpb25zIiwiWm9kQm9vbGVhbiIsIlpvZERhdGUiLCJEYXRlIiwiWm9kQXJyYXkiLCJab2RPYmplY3QiLCJyZW5kZXIiLCJzYXZlUGFyYW1zWm9kVHlwZSIsInNhdmVQYXJhbXNOb2RlIiwiZW50aXR5IiwiZ2V0IiwiY2hpbGRyZW4iLCJmaWx0ZXIiLCJtYXAiLCJwcm9wQ2FuZGlkYXRlIiwicHJvcHMiLCJmaW5kIiwicHJvcCIsImRlc2MiLCJkZWZhdWx0VmFsdWUiLCJwcmVUZW1wbGF0ZXMiLCJlbmRzV2l0aCIsImtleSIsInRhcmdldE1kSWQiLCJ0YXJnZXRNRE5hbWVzIiwibm9kZSIsInByZVRlbXBsYXRlIiwiaW5jbHVkZXMiLCJjYXBpdGFsUGx1cmFsIiwiSlNPTiIsInN0cmluZ2lmeSIsInRpdGxlIiwidHJpbSIsImltcG9ydEtleXMiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLGdCQUFnQixhQUFhO0FBQ3BDLFNBQVNDLE1BQU0sUUFBUSxVQUFVO0FBQ2pDLFNBQVNDLENBQUMsUUFBUSxNQUFNO0FBQ3hCLFNBQVNDLGFBQWEsUUFBZ0MsaUNBQThCO0FBRXBGLFNBQVNDLHNCQUFzQixFQUFFQywwQkFBMEIsUUFBUSxnQkFBYTtBQUVoRixTQUFTQyxRQUFRLFFBQVEsaUJBQWM7QUFDdkMsU0FBU0MsY0FBYyxFQUFFQyxzQkFBc0IsUUFBUSxzQkFBbUI7QUFFMUUsT0FBTyxNQUFNQyw0QkFBNEJIO0lBQ3ZDLGFBQWM7UUFDWixLQUFLLENBQUM7SUFDUjtJQUVBSSxpQkFBaUJDLEtBQXdCLEVBQUU7UUFDekMsT0FBTztZQUNMQyxRQUFRO1lBQ1JDLE1BQU0sR0FBR0YsTUFBTUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUNwQztJQUNGO0lBRUFDLE9BQU9DLElBQVksRUFBRUMsS0FBYyxFQUFVO1FBQzNDLE9BQU87WUFDTCxDQUFDLFlBQVksRUFBRUEsUUFBUSxDQUFDLFlBQVksRUFBRUEsTUFBTSxRQUFRLENB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
@@ -35,7 +35,7 @@ export class Template__view_id_async_select extends Template {
35
35
  import React, { useState, useEffect, SyntheticEvent } from "react";
36
36
  import { DropdownProps, DropdownItemProps, DropdownOnSearchChangeData, Dropdown } from "semantic-ui-react";
37
37
  import { ${names.capital}SubsetKey, ${names.capital}SubsetMapping } from "@/services/sonamu.generated";
38
- import { ${names.capital}Service } from "@/services/${names.fs}/${names.fs}.service";
38
+ import { ${names.capital}Service } from "@/services/services.generated";
39
39
  import { ${names.capital}ListParams } from "@/services/${names.fs}/${names.fs}.types";
40
40
 
41
41
  export function ${names.capital}IdAsyncSelect<T extends ${names.capital}SubsetKey>(
@@ -102,4 +102,4 @@ export function ${names.capital}IdAsyncSelect<T extends ${names.capital}SubsetKe
102
102
  }
103
103
  }
104
104
 
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19pZF9hc3luY19zZWxlY3QudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5TWFuYWdlciwgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3ZpZXdfaWRfYXN5bmNfc2VsZWN0IGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInZpZXdfaWRfYXN5bmNfc2VsZWN0XCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBcIndlYi9zcmMvY29tcG9uZW50c1wiLFxuICAgICAgcGF0aDogYCR7bmFtZXMuZnN9LyR7bmFtZXMuY2FwaXRhbH1JZEFzeW5jU2VsZWN0LnRzeGAsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7IGVudGl0eUlkLCB0ZXh0RmllbGQgfTogVGVtcGxhdGVPcHRpb25zW1widmlld19pZF9hc3luY19zZWxlY3RcIl0pIHtcbiAgICBjb25zdCBuYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuXG4gICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgIGlmICghdGV4dEZpZWxkKSB7XG4gICAgICBjb25zdCBwaWNrZWRQcm9wID0gZW50aXR5LnByb3BzLmZpbmQoKHByb3ApID0+IFtcIm5hbWVcIiwgXCJ0aXRsZVwiXS5pbmNsdWRlcyhwcm9wLm5hbWUpKTtcbiAgICAgIGlmIChwaWNrZWRQcm9wKSB7XG4gICAgICAgIHRleHRGaWVsZCA9IHBpY2tlZFByb3AubmFtZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZVByb3AgPSBlbnRpdHkucHJvcHMuZmluZCgocHJvcCkgPT4gcHJvcC50eXBlID09PSBcInN0cmluZ1wiKTtcbiAgICAgICAgaWYgKGNhbmRpZGF0ZVByb3ApIHtcbiAgICAgICAgICB0ZXh0RmllbGQgPSBjYW5kaWRhdGVQcm9wLm5hbWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJ0ZXh0RmllbGQg7LC+7J2EIOyImCDsl4bsnYxcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzKSxcbiAgICAgIGJvZHk6IGBcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCBTeW50aGV0aWNFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRHJvcGRvd25Qcm9wcywgRHJvcGRvd25JdGVtUHJvcHMsIERyb3Bkb3duT25TZWFyY2hDaGFuZ2VEYXRhLCBEcm9wZG93biB9IGZyb20gXCJzZW1hbnRpYy11aS1yZWFjdFwiO1xuaW1wb3J0IHsgJHtuYW1lcy5jYXBpdGFsfVN1YnNldEtleSwgJHtcbiAgICAgICAgbmFtZXMuY2FwaXRhbFxuICAgICAgfVN1YnNldE1hcHBpbmcgfSBmcm9tIFwiQC9zZXJ2aWNlcy9zb25hbXUuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgeyAke25hbWVzLmNhcGl0YWx9U2VydmljZSB9IGZyb20gXCJAL3NlcnZpY2VzLyR7bmFtZXMuZnN9LyR7bmFtZXMuZnN9LnNlcnZpY2VcIjtcbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1MaXN0UGFyYW1zIH0gZnJvbSBcIkAvc2VydmljZXMvJHtuYW1lcy5mc30vJHtuYW1lcy5mc30udHlwZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uICR7bmFtZXMuY2FwaXRhbH1JZEFzeW5jU2VsZWN0PFQgZXh0ZW5kcyAke25hbWVzLmNhcGl0YWx9U3Vic2V0S2V5PihcbiAgeyBzdWJzZXQsIGJhc2VMaXN0UGFyYW1zLCB0ZXh0RmllbGQsIHZhbHVlRmllbGQsIC4uLnByb3BzIH06IERyb3Bkb3duUHJvcHMgJiB7XG4gICAgc3Vic2V0OiBUO1xuICAgIGJhc2VMaXN0UGFyYW1zPzogJHtuYW1lcy5jYXBpdGFsfUxpc3RQYXJhbXM7XG4gICAgdGV4dEZpZWxkJHt0ZXh0RmllbGQgPyBcIj9cIiA6IFwiXCJ9OiBrZXlvZiAke25hbWVzLmNhcGl0YWx9U3Vic2V0TWFwcGluZ1tUXTtcbiAgICB2YWx1ZUZpZWxkPzoga2V5b2YgJHtuYW1lcy5jYXBpdGFsfVN1YnNldE1hcHBpbmdbVF07XG4gIH0sXG4pIHtcbiAgY29uc3QgW29wdGlvbnMsIHNldE9wdGlvbnNdID0gdXNlU3RhdGU8RHJvcGRvd25JdGVtUHJvcHNbXT4oW10pO1xuICBjb25zdCBbbGlzdFBhcmFtcywgc2V0TGlzdFBhcmFtc10gPSB1c2VTdGF0ZTwke25hbWVzLmNhcGl0YWx9TGlzdFBhcmFtcz4oXG4gICAgYmFzZUxpc3RQYXJhbXMgPz8ge30sXG4gICk7XG5cbiAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gJHtuYW1lcy5jYXBpdGFsfVNlcnZpY2UudXNlJHtuYW1lcy5jYXBpdGFsUGx1cmFsfShzdWJzZXQsIGxpc3RQYXJhbXMpO1xuICBjb25zdCB7IHJvd3M6ICR7bmFtZXMuY2FtZWxQbHVyYWx9LCB0b3RhbCB9ID0gZGF0YSA/PyB7fTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldE9wdGlvbnMoXG4gICAgICAoJHtuYW1lcy5jYW1lbFBsdXJhbH0gPz8gW10pLm1hcCgoJHtuYW1lcy5jYW1lbH0pID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBrZXk6ICR7bmFtZXMuY2FtZWx9LmlkLFxuICAgICAgICAgIHZhbHVlOiAke25hbWVzLmNhbWVsfVt2YWx1ZUZpZWxkID8/ICdpZCddIGFzIHN0cmluZyB8IG51bWJlcixcbiAgICAgICAgICB0ZXh0OiBTdHJpbmcoJHtuYW1lcy5jYW1lbH1bdGV4dEZpZWxkJHt0ZXh0RmllbGQgPyBgID8/ICcke3RleHRGaWVsZH0nYCA6IFwiXCJ9XSksXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuICB9LCBbJHtuYW1lcy5jYW1lbFBsdXJhbH1dKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldExpc3RQYXJhbXMoe1xuICAgICAgLi4ubGlzdFBhcmFtcyxcbiAgICAgIC4uLmJhc2VMaXN0UGFyYW1zLFxuICAgIH0pO1xuICB9LCBbYmFzZUxpc3RQYXJhbXNdKTtcblxuICBjb25zdCBoYW5kbGVTZWFyY2hDaGFuZ2UgPSAoXG4gICAgZTogU3ludGhldGljRXZlbnQ8SFRNTEVsZW1lbnQsIEV2ZW50PixcbiAgICBkYXRhOiBEcm9wZG93bk9uU2VhcmNoQ2hhbmdlRGF0YSxcbiAgKSA9PiB7XG4gICAgc2V0TGlzdFBhcmFtcyh7XG4gICAgICAuLi5saXN0UGFyYW1zLFxuICAgICAga2V5d29yZDogZGF0YS5zZWFyY2hRdWVyeSxcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxEcm9wZG93blxuICAgICAgcGxhY2Vob2xkZXI9XCIke2VudGl0eS50aXRsZSA/PyBuYW1lcy5jb25zdGFudH1cIlxuICAgICAgc2VsZWN0aW9uXG4gICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgb25TZWFyY2hDaGFuZ2U9e2hhbmRsZVNlYXJjaENoYW5nZX1cbiAgICAgIGRpc2FibGVkPXshJHtuYW1lcy5jYW1lbFBsdXJhbH19XG4gICAgICBsb2FkaW5nPXshJHtuYW1lcy5jYW1lbFBsdXJhbH19XG4gICAgICBzZWxlY3RPbkJsdXI9e2ZhbHNlfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gICk7XG59XG4gICAgICBgLnRyaW0oKSxcbiAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgIH07XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJFbnRpdHlNYW5hZ2VyIiwiVGVtcGxhdGUiLCJUZW1wbGF0ZV9fdmlld19pZF9hc3luY19zZWxlY3QiLCJnZXRUYXJnZXRBbmRQYXRoIiwibmFtZXMiLCJ0YXJnZXQiLCJwYXRoIiwiZnMiLCJjYXBpdGFsIiwicmVuZGVyIiwiZW50aXR5SWQiLCJ0ZXh0RmllbGQiLCJnZXROYW1lc0Zyb21JZCIsImVudGl0eSIsImdldCIsInBpY2tlZFByb3AiLCJwcm9wcyIsImZpbmQiLCJwcm9wIiwiaW5jbHVkZXMiLCJuYW1lIiwiY2FuZGlkYXRlUHJvcCIsInR5cGUiLCJjb25zb2xlIiwibG9nIiwiYm9keSIsImNhcGl0YWxQbHVyYWwiLCJjYW1lbFBsdXJhbCIsImNhbWVsIiwidGl0bGUiLCJjb25zdGFudCIsInRyaW0iLCJpbXBvcnRLZXlzIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxhQUFhLFFBQWdDLGlDQUE4QjtBQUVwRixTQUFTQyxRQUFRLFFBQVEsaUJBQWM7QUFFdkMsT0FBTyxNQUFNQyx1Q0FBdUNEO0lBQ2xELGFBQWM7UUFDWixLQUFLLENBQUM7SUFDUjtJQUVBRSxpQkFBaUJDLEtBQXdCLEVBQUU7UUFDekMsT0FBTztZQUNMQyxRQUFRO1lBQ1JDLE1BQU0sR0FBR0YsTUFBTUcsRUFBRSxDQUFDLENBQUMsRUFBRUgsTUFBTUksT0FBTyxDQUFDLGlCQUFpQixDQUFDO1FBQ3ZEO0lBQ0Y7SUFFQUMsT0FBTyxFQUFFQyxRQUFRLEVBQUVDLFNBQVMsRUFBMkMsRUFBRTtRQUN2RSxNQUFNUCxRQUFRSixjQUFjWSxjQUFjLENBQUNGO1FBRTNDLE1BQU1HLFNBQVNiLGNBQWNjLEdBQUcsQ0FBQ0o7UUFDakMsSUFBSSxDQUFDQyxXQUFXO1lBQ2QsTUFBTUksYUFBYUYsT0FBT0csS0FBSyxDQUFDQyxJQUFJLENBQUMsQ0FBQ0MsT0FBUztvQkFBQztvQkFBUTtpQkFBUSxDQUFDQyxRQUFRLENBQUNELEtBQUtFLElBQUk7WUFDbkYsSUFBSUwsWUFBWTtnQkFDZEosWUFBWUksV0FBV0ssSUFBSTtZQUM3QixPQUFPO2dCQUNMLE1BQU1DLGdCQUFnQlIsT0FBT0csS0FBSyxDQUFDQyxJQUFJLENBQUMsQ0FBQ0MsT0FBU0EsS0FBS0ksSUFBSSxLQUFLO2dCQUNoRSxJQUFJRCxlQUFlO29CQUNqQlYsWUFBWVUsY0FBY0QsSUFBSTtnQkFDaEMsT0FBTztvQkFDTEcsUUFBUUMsR0FBRyxDQUFDO2dCQUNkO1lBQ0Y7UUFDRjtRQUVBLE9BQU87WUFDTCxHQUFHLElBQUksQ0FBQ3JCLGdCQUFnQixDQUFDQyxNQUFNO1lBQy9CcUIsTUFBTSxDQUFDOzs7U0FHSixFQUFFckIsTUFBTUksT0FBTyxDQUFDLFdBQVcsRUFDNUJKLE1BQU1JLE9BQU8sQ0FDZDtTQUNFLEVBQUVKLE1BQU1JLE9BQU8sQ0FBQywyQkFBMkIsRUFBRUosTUFBTUcsRUFBRSxDQUFDLENBQUMsRUFBRUgsTUFBTUcsRUFBRSxDQUFDO1NBQ2xFLEVBQUVILE1BQU1JLE9BQU8sQ0FBQyw4QkFBOEIsRUFBRUosTUFBTUcsRUFBRSxDQUFDLENBQUMsRUFBRUgsTUFBTUcsRUFBRSxDQUFDOztnQkFFOUQsRUFBRUgsTUFBTUksT0FBTyxDQUFDLHdCQUF3QixFQUFFSixNQUFNSSxPQUFPLENBQUM7OztxQkFHbkQsRUFBRUosTUFBTUksT0FBTyxDQUFDO2FBQ3hCLEVBQUVHLFlBQVksTUFBTSxHQUFHLFFBQVEsRUFBRVAsTUFBTUksT0FBTyxDQUFDO3VCQUNyQyxFQUFFSixNQUFNSSxPQUFPLENBQUM7Ozs7K0NBSVEsRUFBRUosTUFBTUksT0FBTyxDQUFDOzs7OzBCQUlyQyxFQUFFSixNQUFNSSxPQUFPLENBQUMsV0FBVyxFQUFFSixNQUFNc0IsYUFBYSxDQUFDO2dCQUMzRCxFQUFFdEIsTUFBTXVCLFdBQVcsQ0FBQzs7OztPQUk3QixFQUFFdkIsTUFBTXVCLFdBQVcsQ0FBQyxhQUFhLEVBQUV2QixNQUFNd0IsS0FBSyxDQUFDOztlQUV2QyxFQUFFeEIsTUFBTXdCLEtBQUssQ0FBQztpQkFDWixFQUFFeEIsTUFBTXdCLEtBQUssQ0FBQzt1QkFDUixFQUFFeEIsTUFBTXdCLEtBQUssQ0FBQyxVQUFVLEVBQUVqQixZQUFZLENBQUMsS0FBSyxFQUFFQSxVQUFVLENBQUMsQ0FBQyxHQUFHLEdBQUc7Ozs7TUFJakYsRUFBRVAsTUFBTXVCLFdBQVcsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O21CQXFCUCxFQUFFZCxPQUFPZ0IsS0FBSyxJQUFJekIsTUFBTTBCLFFBQVEsQ0FBQzs7OztpQkFJbkMsRUFBRTFCLE1BQU11QixXQUFXLENBQUM7Z0JBQ3JCLEVBQUV2QixNQUFNdUIsV0FBVyxDQUFDOzs7Ozs7TUFNOUIsQ0FBQyxDQUFDSSxJQUFJO1lBQ05DLFlBQVksRUFBRTtRQUNoQjtJQUNGO0FBQ0YifQ==
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19pZF9hc3luY19zZWxlY3QudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5TWFuYWdlciwgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3ZpZXdfaWRfYXN5bmNfc2VsZWN0IGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInZpZXdfaWRfYXN5bmNfc2VsZWN0XCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBcIndlYi9zcmMvY29tcG9uZW50c1wiLFxuICAgICAgcGF0aDogYCR7bmFtZXMuZnN9LyR7bmFtZXMuY2FwaXRhbH1JZEFzeW5jU2VsZWN0LnRzeGAsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7IGVudGl0eUlkLCB0ZXh0RmllbGQgfTogVGVtcGxhdGVPcHRpb25zW1widmlld19pZF9hc3luY19zZWxlY3RcIl0pIHtcbiAgICBjb25zdCBuYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuXG4gICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgIGlmICghdGV4dEZpZWxkKSB7XG4gICAgICBjb25zdCBwaWNrZWRQcm9wID0gZW50aXR5LnByb3BzLmZpbmQoKHByb3ApID0+IFtcIm5hbWVcIiwgXCJ0aXRsZVwiXS5pbmNsdWRlcyhwcm9wLm5hbWUpKTtcbiAgICAgIGlmIChwaWNrZWRQcm9wKSB7XG4gICAgICAgIHRleHRGaWVsZCA9IHBpY2tlZFByb3AubmFtZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZVByb3AgPSBlbnRpdHkucHJvcHMuZmluZCgocHJvcCkgPT4gcHJvcC50eXBlID09PSBcInN0cmluZ1wiKTtcbiAgICAgICAgaWYgKGNhbmRpZGF0ZVByb3ApIHtcbiAgICAgICAgICB0ZXh0RmllbGQgPSBjYW5kaWRhdGVQcm9wLm5hbWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJ0ZXh0RmllbGQg7LC+7J2EIOyImCDsl4bsnYxcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzKSxcbiAgICAgIGJvZHk6IGBcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCBTeW50aGV0aWNFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRHJvcGRvd25Qcm9wcywgRHJvcGRvd25JdGVtUHJvcHMsIERyb3Bkb3duT25TZWFyY2hDaGFuZ2VEYXRhLCBEcm9wZG93biB9IGZyb20gXCJzZW1hbnRpYy11aS1yZWFjdFwiO1xuaW1wb3J0IHsgJHtuYW1lcy5jYXBpdGFsfVN1YnNldEtleSwgJHtcbiAgICAgICAgbmFtZXMuY2FwaXRhbFxuICAgICAgfVN1YnNldE1hcHBpbmcgfSBmcm9tIFwiQC9zZXJ2aWNlcy9zb25hbXUuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgeyAke25hbWVzLmNhcGl0YWx9U2VydmljZSB9IGZyb20gXCJAL3NlcnZpY2VzL3NlcnZpY2VzLmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgJHtuYW1lcy5jYXBpdGFsfUxpc3RQYXJhbXMgfSBmcm9tIFwiQC9zZXJ2aWNlcy8ke25hbWVzLmZzfS8ke25hbWVzLmZzfS50eXBlc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gJHtuYW1lcy5jYXBpdGFsfUlkQXN5bmNTZWxlY3Q8VCBleHRlbmRzICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRLZXk+KFxuICB7IHN1YnNldCwgYmFzZUxpc3RQYXJhbXMsIHRleHRGaWVsZCwgdmFsdWVGaWVsZCwgLi4ucHJvcHMgfTogRHJvcGRvd25Qcm9wcyAmIHtcbiAgICBzdWJzZXQ6IFQ7XG4gICAgYmFzZUxpc3RQYXJhbXM/OiAke25hbWVzLmNhcGl0YWx9TGlzdFBhcmFtcztcbiAgICB0ZXh0RmllbGQke3RleHRGaWVsZCA/IFwiP1wiIDogXCJcIn06IGtleW9mICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRNYXBwaW5nW1RdO1xuICAgIHZhbHVlRmllbGQ/OiBrZXlvZiAke25hbWVzLmNhcGl0YWx9U3Vic2V0TWFwcGluZ1tUXTtcbiAgfSxcbikge1xuICBjb25zdCBbb3B0aW9ucywgc2V0T3B0aW9uc10gPSB1c2VTdGF0ZTxEcm9wZG93bkl0ZW1Qcm9wc1tdPihbXSk7XG4gIGNvbnN0IFtsaXN0UGFyYW1zLCBzZXRMaXN0UGFyYW1zXSA9IHVzZVN0YXRlPCR7bmFtZXMuY2FwaXRhbH1MaXN0UGFyYW1zPihcbiAgICBiYXNlTGlzdFBhcmFtcyA/PyB7fSxcbiAgKTtcblxuICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSAke25hbWVzLmNhcGl0YWx9U2VydmljZS51c2Uke25hbWVzLmNhcGl0YWxQbHVyYWx9KHN1YnNldCwgbGlzdFBhcmFtcyk7XG4gIGNvbnN0IHsgcm93czogJHtuYW1lcy5jYW1lbFBsdXJhbH0sIHRvdGFsIH0gPSBkYXRhID8/IHt9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0T3B0aW9ucyhcbiAgICAgICgke25hbWVzLmNhbWVsUGx1cmFsfSA/PyBbXSkubWFwKCgke25hbWVzLmNhbWVsfSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGtleTogJHtuYW1lcy5jYW1lbH0uaWQsXG4gICAgICAgICAgdmFsdWU6ICR7bmFtZXMuY2FtZWx9W3ZhbHVlRmllbGQgPz8gJ2lkJ10gYXMgc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgICAgIHRleHQ6IFN0cmluZygke25hbWVzLmNhbWVsfVt0ZXh0RmllbGQke3RleHRGaWVsZCA/IGAgPz8gJyR7dGV4dEZpZWxkfSdgIDogXCJcIn1dKSxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH0sIFske25hbWVzLmNhbWVsUGx1cmFsfV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0TGlzdFBhcmFtcyh7XG4gICAgICAuLi5saXN0UGFyYW1zLFxuICAgICAgLi4uYmFzZUxpc3RQYXJhbXMsXG4gICAgfSk7XG4gIH0sIFtiYXNlTGlzdFBhcmFtc10pO1xuXG4gIGNvbnN0IGhhbmRsZVNlYXJjaENoYW5nZSA9IChcbiAgICBlOiBTeW50aGV0aWNFdmVudDxIVE1MRWxlbWVudCwgRXZlbnQ+LFxuICAgIGRhdGE6IERyb3Bkb3duT25TZWFyY2hDaGFuZ2VEYXRhLFxuICApID0+IHtcbiAgICBzZXRMaXN0UGFyYW1zKHtcbiAgICAgIC4uLmxpc3RQYXJhbXMsXG4gICAgICBrZXl3b3JkOiBkYXRhLnNlYXJjaFF1ZXJ5LFxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPERyb3Bkb3duXG4gICAgICBwbGFjZWhvbGRlcj1cIiR7ZW50aXR5LnRpdGxlID8/IG5hbWVzLmNvbnN0YW50fVwiXG4gICAgICBzZWxlY3Rpb25cbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICBvblNlYXJjaENoYW5nZT17aGFuZGxlU2VhcmNoQ2hhbmdlfVxuICAgICAgZGlzYWJsZWQ9eyEke25hbWVzLmNhbWVsUGx1cmFsfX1cbiAgICAgIGxvYWRpbmc9eyEke25hbWVzLmNhbWVsUGx1cmFsfX1cbiAgICAgIHNlbGVjdE9uQmx1cj17ZmFsc2V9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKTtcbn1cbiAgICAgIGAudHJpbSgpLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgfTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkVudGl0eU1hbmFnZXIiLCJUZW1wbGF0ZSIsIlRlbXBsYXRlX192aWV3X2lkX2FzeW5jX3NlbGVjdCIsImdldFRhcmdldEFuZFBhdGgiLCJuYW1lcyIsInRhcmdldCIsInBhdGgiLCJmcyIsImNhcGl0YWwiLCJyZW5kZXIiLCJlbnRpdHlJZCIsInRleHRGaWVsZCIsImdldE5hbWVzRnJvbUlkIiwiZW50aXR5IiwiZ2V0IiwicGlja2VkUHJvcCIsInByb3BzIiwiZmluZCIsInByb3AiLCJpbmNsdWRlcyIsIm5hbWUiLCJjYW5kaWRhdGVQcm9wIiwidHlwZSIsImNvbnNvbGUiLCJsb2ciLCJib2R5IiwiY2FwaXRhbFBsdXJhbCIsImNhbWVsUGx1cmFsIiwiY2FtZWwiLCJ0aXRsZSIsImNvbnN0YW50IiwidHJpbSIsImltcG9ydEtleXMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGFBQWEsUUFBZ0MsaUNBQThCO0FBRXBGLFNBQVNDLFFBQVEsUUFBUSxpQkFBYztBQUV2QyxPQUFPLE1BQU1DLHVDQUF1Q0Q7SUFDbEQsYUFBYztRQUNaLEtBQUssQ0FBQztJQUNSO0lBRUFFLGlCQUFpQkMsS0FBd0IsRUFBRTtRQUN6QyxPQUFPO1lBQ0xDLFFBQVE7WUFDUkMsTUFBTSxHQUFHRixNQUFNRyxFQUFFLENBQUMsQ0FBQyxFQUFFSCxNQUFNSSxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFDdkQ7SUFDRjtJQUVBQyxPQUFPLEVBQUVDLFFBQVEsRUFBRUMsU0FBUyxFQUEyQyxFQUFFO1FBQ3ZFLE1BQU1QLFFBQVFKLGNBQWNZLGNBQWMsQ0FBQ0Y7UUFFM0MsTUFBTUcsU0FBU2IsY0FBY2MsR0FBRyxDQUFDSjtRQUNqQyxJQUFJLENBQUNDLFdBQVc7WUFDZCxNQUFNSSxhQUFhRixPQUFPRyxLQUFLLENBQUNDLElBQUksQ0FBQyxDQUFDQyxPQUFTO29CQUFDO29CQUFRO2lCQUFRLENBQUNDLFFBQVEsQ0FBQ0QsS0FBS0UsSUFBSTtZQUNuRixJQUFJTCxZQUFZO2dCQUNkSixZQUFZSSxXQUFXSyxJQUFJO1lBQzdCLE9BQU87Z0JBQ0wsTUFBTUMsZ0JBQWdCUixPQUFPRyxLQUFLLENBQUNDLElBQUksQ0FBQyxDQUFDQyxPQUFTQSxLQUFLSSxJQUFJLEtBQUs7Z0JBQ2hFLElBQUlELGVBQWU7b0JBQ2pCVixZQUFZVSxjQUFjRCxJQUFJO2dCQUNoQyxPQUFPO29CQUNMRyxRQUFRQyxHQUFHLENBQUM7Z0JBQ2Q7WUFDRjtRQUNGO1FBRUEsT0FBTztZQUNMLEdBQUcsSUFBSSxDQUFDckIsZ0JBQWdCLENBQUNDLE1BQU07WUFDL0JxQixNQUFNLENBQUM7OztTQUdKLEVBQUVyQixNQUFNSSxPQUFPLENBQUMsV0FBVyxFQUM1QkosTUFBTUksT0FBTyxDQUNkO1NBQ0UsRUFBRUosTUFBTUksT0FBTyxDQUFDO1NBQ2hCLEVBQUVKLE1BQU1JLE9BQU8sQ0FBQyw4QkFBOEIsRUFBRUosTUFBTUcsRUFBRSxDQUFDLENBQUMsRUFBRUgsTUFBTUcsRUFBRSxDQUFDOztnQkFFOUQsRUFBRUgsTUFBTUksT0FBTyxDQUFDLHdCQUF3QixFQUFFSixNQUFNSSxPQUFPLENBQUM7OztxQkFHbkQsRUFBRUosTUFBTUksT0FBTyxDQUFDO2FBQ3hCLEVBQUVHLFlBQVksTUFBTSxHQUFHLFFBQVEsRUFBRVAsTUFBTUksT0FBTyxDQUFDO3VCQUNyQyxFQUFFSixNQUFNSSxPQUFPLENBQUM7Ozs7K0NBSVEsRUFBRUosTUFBTUksT0FBTyxDQUFDOzs7OzBCQUlyQyxFQUFFSixNQUFNSSxPQUFPLENBQUMsV0FBVyxFQUFFSixNQUFNc0IsYUFBYSxDQUFDO2dCQUMzRCxFQUFFdEIsTUFBTXVCLFdBQVcsQ0FBQzs7OztPQUk3QixFQUFFdkIsTUFBTXVCLFdBQVcsQ0FBQyxhQUFhLEVBQUV2QixNQUFNd0IsS0FBSyxDQUFDOztlQUV2QyxFQUFFeEIsTUFBTXdCLEtBQUssQ0FBQztpQkFDWixFQUFFeEIsTUFBTXdCLEtBQUssQ0FBQzt1QkFDUixFQUFFeEIsTUFBTXdCLEtBQUssQ0FBQyxVQUFVLEVBQUVqQixZQUFZLENBQUMsS0FBSyxFQUFFQSxVQUFVLENBQUMsQ0FBQyxHQUFHLEdBQUc7Ozs7TUFJakYsRUFBRVAsTUFBTXVCLFdBQVcsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O21CQXFCUCxFQUFFZCxPQUFPZ0IsS0FBSyxJQUFJekIsTUFBTTBCLFFBQVEsQ0FBQzs7OztpQkFJbkMsRUFBRTFCLE1BQU11QixXQUFXLENBQUM7Z0JBQ3JCLEVBQUV2QixNQUFNdUIsV0FBVyxDQUFDOzs7Ozs7TUFNOUIsQ0FBQyxDQUFDSSxJQUFJO1lBQ05DLFlBQVksRUFBRTtRQUNoQjtJQUNGO0FBQ0YifQ==