@sidekick-coder/zenith-kit 0.0.11 → 0.0.13
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/bin/zenith.js +28 -0
- package/bin/zkit.js +26 -0
- package/cli/commands/build.js +49 -0
- package/cli/commands/dev.js +37 -0
- package/cli/commands/start.js +38 -0
- package/cli/config.js +23 -0
- package/cli/utils/createWrapper.js +20 -0
- package/dist/client/index.d.mts +448 -0
- package/dist/client/index.mjs +2 -0
- package/dist/components/index-Dk5fhUBV.mjs +4399 -0
- package/dist/components/index.es.js +65708 -0
- package/dist/components/styles.css +4756 -0
- package/dist/server/index.d.mts +776 -178
- package/dist/server/index.mjs +5 -1743
- package/dist/shared/chunk-0Lt9GpW0.mjs +1 -0
- package/dist/shared/index.d.mts +266 -21
- package/dist/shared/index.mjs +2 -856
- package/package.json +66 -13
- package/tsconfig.client.json +3 -3
- package/tsconfig.server.json +1 -1
- package/tsdown/createTsdownConfig.js +29 -0
- package/tsdown.config.ts +53 -3
- package/vite/createViteConfig.js +55 -0
- package/vite/plugins/zenith.js +143 -0
- package/vite.config.ts +71 -0
- package/dist/shared/chunk-CfYAbeIz.mjs +0 -13
package/dist/server/index.d.mts
CHANGED
|
@@ -1,13 +1,101 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import cp from "child_process";
|
|
1
4
|
import * as v from "valibot";
|
|
5
|
+
import { InferOutput } from "valibot";
|
|
6
|
+
import * as _$_casl_ability0 from "@casl/ability";
|
|
7
|
+
import { defineAbility } from "@casl/ability";
|
|
8
|
+
import ms from "ms";
|
|
9
|
+
import { S3Client } from "@aws-sdk/client-s3";
|
|
10
|
+
import dotenv from "dotenv";
|
|
2
11
|
import { ChildProcess } from "node:child_process";
|
|
3
|
-
import { Request as Request$1, Response as Response$1 } from "express";
|
|
4
|
-
import UploadService from "#server/services/upload.service.ts";
|
|
5
|
-
import CookieService from "#shared/services/cookie.service.ts";
|
|
6
|
-
import Acl from "#server/entities/acl.entity.ts";
|
|
7
12
|
import { ColumnType, Generated, Kysely } from "kysely";
|
|
13
|
+
import { CookieOptions, Request as Request$1, Response as Response$1 } from "express";
|
|
14
|
+
import { ResolvableHead } from "@unhead/vue";
|
|
8
15
|
|
|
16
|
+
//#region src/server/utils/printTable.d.ts
|
|
17
|
+
interface TableColumn {
|
|
18
|
+
label: string;
|
|
19
|
+
value: string | ((item: any) => string);
|
|
20
|
+
width?: number;
|
|
21
|
+
realWidth?: number;
|
|
22
|
+
}
|
|
23
|
+
interface ObjectOptions {
|
|
24
|
+
keyWidth?: number;
|
|
25
|
+
}
|
|
26
|
+
declare function printObject(output?: any, options?: ObjectOptions): void;
|
|
27
|
+
declare function printTable(items: any[], columns?: TableColumn[]): void;
|
|
28
|
+
//#endregion
|
|
29
|
+
//#region src/server/services/ArtisanService.d.ts
|
|
30
|
+
declare class ArtisanService extends Command {
|
|
31
|
+
needs: Set<string>;
|
|
32
|
+
table: typeof printTable;
|
|
33
|
+
object: typeof printObject;
|
|
34
|
+
colors: chalk.Chalk & chalk.ChalkFunction & {
|
|
35
|
+
supportsColor: chalk.ColorSupport | false;
|
|
36
|
+
Level: chalk.Level;
|
|
37
|
+
Color: ("black" | "red" | "green" | "yellow" | "blue" | "magenta" | "cyan" | "white" | "gray" | "grey" | "blackBright" | "redBright" | "greenBright" | "yellowBright" | "blueBright" | "magentaBright" | "cyanBright" | "whiteBright") | ("bgBlack" | "bgRed" | "bgGreen" | "bgYellow" | "bgBlue" | "bgMagenta" | "bgCyan" | "bgWhite" | "bgGray" | "bgGrey" | "bgBlackBright" | "bgRedBright" | "bgGreenBright" | "bgYellowBright" | "bgBlueBright" | "bgMagentaBright" | "bgCyanBright" | "bgWhiteBright");
|
|
38
|
+
ForegroundColor: "black" | "red" | "green" | "yellow" | "blue" | "magenta" | "cyan" | "white" | "gray" | "grey" | "blackBright" | "redBright" | "greenBright" | "yellowBright" | "blueBright" | "magentaBright" | "cyanBright" | "whiteBright";
|
|
39
|
+
BackgroundColor: "bgBlack" | "bgRed" | "bgGreen" | "bgYellow" | "bgBlue" | "bgMagenta" | "bgCyan" | "bgWhite" | "bgGray" | "bgGrey" | "bgBlackBright" | "bgRedBright" | "bgGreenBright" | "bgYellowBright" | "bgBlueBright" | "bgMagentaBright" | "bgCyanBright" | "bgWhiteBright";
|
|
40
|
+
Modifiers: "reset" | "bold" | "dim" | "italic" | "underline" | "inverse" | "hidden" | "strikethrough" | "visible";
|
|
41
|
+
stderr: chalk.Chalk & {
|
|
42
|
+
supportsColor: chalk.ColorSupport | false;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
need(...args: string[]): this;
|
|
46
|
+
createCommand(name?: string): ArtisanService;
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
//#region src/server/services/ArtisanTesterService.d.ts
|
|
50
|
+
declare class ArteTesterService extends ArtisanService {
|
|
51
|
+
constructor();
|
|
52
|
+
add(path: string): Promise<void>;
|
|
53
|
+
execute(args: string[]): Promise<void>;
|
|
54
|
+
}
|
|
55
|
+
//#endregion
|
|
56
|
+
//#region src/shared/services/ConfigService.d.ts
|
|
57
|
+
interface Entry {
|
|
58
|
+
key: string;
|
|
59
|
+
value: any;
|
|
60
|
+
source: string;
|
|
61
|
+
}
|
|
62
|
+
declare class ConfigService {
|
|
63
|
+
static __container_entry_key: string;
|
|
64
|
+
entries: Map<string, Entry>;
|
|
65
|
+
constructor();
|
|
66
|
+
list(): Entry[];
|
|
67
|
+
parseValue(value: any): any;
|
|
68
|
+
loadFromRecord(record: Record<string, any>, source?: string): void;
|
|
69
|
+
loadFromEntries(entries: [string, any][], source?: string): void;
|
|
70
|
+
toRecord(): Record<string, any>;
|
|
71
|
+
has(key: string): boolean;
|
|
72
|
+
get<T = any | undefined>(key: string, defaultValue?: any): T;
|
|
73
|
+
getOne<T = any | undefined>(keys: string[], defaultValue?: any): T;
|
|
74
|
+
set(key: string, value: any, source?: string): void;
|
|
75
|
+
unset(key: string): void;
|
|
76
|
+
clear(): void;
|
|
77
|
+
}
|
|
78
|
+
//#endregion
|
|
79
|
+
//#region src/shared/services/ContainerService.d.ts
|
|
80
|
+
type Constructor$1<T = object> = new (...args: any[]) => T;
|
|
81
|
+
type EntryKey = string | symbol | Constructor$1;
|
|
82
|
+
declare class ContainerService {
|
|
83
|
+
private entries;
|
|
84
|
+
loadFromRecord(record: Record<string, any>): void;
|
|
85
|
+
toRecord(): Record<string, any>;
|
|
86
|
+
private getKey;
|
|
87
|
+
set(payload: EntryKey, value: any): this;
|
|
88
|
+
has(payload: EntryKey): boolean;
|
|
89
|
+
get<T>(payload: EntryKey): T;
|
|
90
|
+
singleton<T>(classConstructor: Constructor$1<T>): T;
|
|
91
|
+
load(entries: Record<any, any>): void;
|
|
92
|
+
proxy<T = unknown>(key: EntryKey): T;
|
|
93
|
+
keys(): EntryKey[];
|
|
94
|
+
}
|
|
95
|
+
//#endregion
|
|
9
96
|
//#region src/shared/services/LoggerService.d.ts
|
|
10
97
|
declare class LoggerService {
|
|
98
|
+
static __container_entry_key: string;
|
|
11
99
|
info(message: string, meta?: any): void;
|
|
12
100
|
debug(message: string, meta?: any): void;
|
|
13
101
|
warn(message: string, meta?: any): void;
|
|
@@ -34,6 +122,7 @@ interface EmmitterServiceOptions {
|
|
|
34
122
|
logger?: LoggerService;
|
|
35
123
|
}
|
|
36
124
|
declare class EmmitterService$1<Events extends Record<string, any> = Record<string, any>> {
|
|
125
|
+
static __container_entry_key: string;
|
|
37
126
|
private handlers;
|
|
38
127
|
private debug;
|
|
39
128
|
private logger;
|
|
@@ -58,26 +147,563 @@ declare class EmmitterService$1<Events extends Record<string, any> = Record<stri
|
|
|
58
147
|
hasHandlers(): boolean;
|
|
59
148
|
}
|
|
60
149
|
//#endregion
|
|
150
|
+
//#region src/shared/entities/LifecycleHook.d.ts
|
|
151
|
+
declare class LifecycleHook {
|
|
152
|
+
hook_id: string;
|
|
153
|
+
hook_aliases?: string[];
|
|
154
|
+
order?: number;
|
|
155
|
+
subhooks?: LifecycleHook[];
|
|
156
|
+
register(): Promise<void>;
|
|
157
|
+
load(): Promise<void>;
|
|
158
|
+
boot(): Promise<void>;
|
|
159
|
+
shutdown(): Promise<void>;
|
|
160
|
+
/** @deprecated Use register */
|
|
161
|
+
onRegister(): Promise<void>;
|
|
162
|
+
/** @deprecated Use load */
|
|
163
|
+
onLoad(): Promise<void>;
|
|
164
|
+
/** @deprecated Use boot */
|
|
165
|
+
onBoot(): Promise<void>;
|
|
166
|
+
/** @deprecated Use shutdown */
|
|
167
|
+
onShutdown(): Promise<void>;
|
|
168
|
+
}
|
|
169
|
+
//#endregion
|
|
170
|
+
//#region src/shared/utils/compose.d.ts
|
|
171
|
+
type Constructor<T = {}> = new (...args: any[]) => T;
|
|
172
|
+
//#endregion
|
|
173
|
+
//#region src/shared/services/LifecycleService.d.ts
|
|
174
|
+
type LifecycleMethod = 'register' | 'load' | 'boot' | 'shutdown';
|
|
175
|
+
interface ListOptions {
|
|
176
|
+
include?: string | string[];
|
|
177
|
+
exclude?: string | string[];
|
|
178
|
+
}
|
|
179
|
+
interface LifecycleServiceOptions {
|
|
180
|
+
debug?: boolean;
|
|
181
|
+
hooks?: Map<string, LifecycleHook>;
|
|
182
|
+
logger?: LoggerService;
|
|
183
|
+
onError?: (error: Error, context: {
|
|
184
|
+
hookId: string;
|
|
185
|
+
method: LifecycleMethod;
|
|
186
|
+
}) => void;
|
|
187
|
+
}
|
|
188
|
+
declare class LifecycleService$1 {
|
|
189
|
+
static __container_entry_key: string;
|
|
190
|
+
hooks: Map<string, LifecycleHook>;
|
|
191
|
+
logger: LoggerService;
|
|
192
|
+
debug: boolean;
|
|
193
|
+
constructor(data?: LifecycleServiceOptions);
|
|
194
|
+
onError(error: Error, context: {
|
|
195
|
+
hookId: string;
|
|
196
|
+
method: LifecycleMethod;
|
|
197
|
+
}): void;
|
|
198
|
+
mapAliases(args: string[]): string[];
|
|
199
|
+
list(options?: ListOptions): LifecycleHook[];
|
|
200
|
+
add(...payload: (LifecycleHook | Constructor<LifecycleHook>)[]): void;
|
|
201
|
+
emitMethod(method: LifecycleMethod, options?: ListOptions): Promise<void>;
|
|
202
|
+
emit(payload: LifecycleMethod | LifecycleMethod[], options?: ListOptions): Promise<void>;
|
|
203
|
+
register(options?: ListOptions): Promise<void>;
|
|
204
|
+
load(options?: ListOptions): Promise<void>;
|
|
205
|
+
boot(options?: ListOptions): Promise<void>;
|
|
206
|
+
shutdown(options?: ListOptions): Promise<void>;
|
|
207
|
+
clear(): void;
|
|
208
|
+
}
|
|
209
|
+
//#endregion
|
|
210
|
+
//#region src/shared/schemas/permissionAssignmentSchema.d.ts
|
|
211
|
+
type PermissionAssignment = v.InferOutput<typeof permissionAssignmentSchema>;
|
|
212
|
+
declare const permissionAssignmentSchema: v.ObjectSchema<{
|
|
213
|
+
readonly id: v.NumberSchema<undefined>;
|
|
214
|
+
readonly permission_id: v.NumberSchema<undefined>;
|
|
215
|
+
readonly assignable_type: v.StringSchema<undefined>;
|
|
216
|
+
readonly assignable_id: v.StringSchema<undefined>;
|
|
217
|
+
readonly created_at: v.StringSchema<undefined>;
|
|
218
|
+
readonly updated_at: v.StringSchema<undefined>;
|
|
219
|
+
}, undefined>;
|
|
220
|
+
//#endregion
|
|
221
|
+
//#region src/shared/schemas/permissionSchema.d.ts
|
|
222
|
+
type Permission = v.InferOutput<typeof permissionSchema>;
|
|
223
|
+
declare const permissionSchema: v.ObjectSchema<{
|
|
224
|
+
readonly id: v.NumberSchema<undefined>;
|
|
225
|
+
readonly name: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
226
|
+
readonly description: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
227
|
+
readonly action: v.StringSchema<undefined>;
|
|
228
|
+
readonly subject: v.StringSchema<undefined>;
|
|
229
|
+
readonly conditions: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
230
|
+
readonly created_at: v.StringSchema<undefined>;
|
|
231
|
+
readonly updated_at: v.StringSchema<undefined>;
|
|
232
|
+
readonly expires_at: v.StringSchema<undefined>;
|
|
233
|
+
}, undefined>;
|
|
234
|
+
//#endregion
|
|
235
|
+
//#region src/shared/schemas/tokenSchema.d.ts
|
|
236
|
+
type Token = v.InferOutput<typeof tokenSchema>;
|
|
237
|
+
declare const tokenSchema: v.ObjectSchema<{
|
|
238
|
+
readonly id: v.NumberSchema<undefined>;
|
|
239
|
+
readonly name: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
240
|
+
readonly type: v.StringSchema<undefined>;
|
|
241
|
+
readonly user_id: v.NumberSchema<undefined>;
|
|
242
|
+
readonly token: v.StringSchema<undefined>;
|
|
243
|
+
readonly created_at: v.StringSchema<undefined>;
|
|
244
|
+
readonly updated_at: v.StringSchema<undefined>;
|
|
245
|
+
readonly expires_at: v.StringSchema<undefined>;
|
|
246
|
+
}, undefined>;
|
|
247
|
+
//#endregion
|
|
248
|
+
//#region src/shared/entities/PermissionEntity.d.ts
|
|
249
|
+
declare const PermissionEntity_base: {
|
|
250
|
+
new (...args: any[]): {
|
|
251
|
+
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
252
|
+
};
|
|
253
|
+
from<T>(this: new () => T, data: Partial<T>): T;
|
|
254
|
+
} & Constructor;
|
|
255
|
+
declare class PermissionEntity extends PermissionEntity_base {
|
|
256
|
+
id: number;
|
|
257
|
+
name: string;
|
|
258
|
+
description: string | null;
|
|
259
|
+
origin: string;
|
|
260
|
+
subject: string;
|
|
261
|
+
action: string;
|
|
262
|
+
conditions: string | null | Record<string, any>;
|
|
263
|
+
get editable(): boolean;
|
|
264
|
+
get parsedConditions(): any;
|
|
265
|
+
}
|
|
266
|
+
//#endregion
|
|
267
|
+
//#region src/shared/entities/AclEntity.d.ts
|
|
268
|
+
declare class AclEntity {
|
|
269
|
+
static __container_entry_key: string;
|
|
270
|
+
ability: ReturnType<typeof defineAbility>;
|
|
271
|
+
permissions: PermissionEntity[];
|
|
272
|
+
debug: boolean;
|
|
273
|
+
logger: LoggerService;
|
|
274
|
+
constructor(data?: Partial<AclEntity>);
|
|
275
|
+
can(action: string, subject: any, object?: Record<string, any>): boolean;
|
|
276
|
+
cannot(action: string, subject: any, object?: Record<string, any>): boolean;
|
|
277
|
+
subject(subject: string, object: Record<string, any>): Record<string, any> & _$_casl_ability0.ForcedSubject<string>;
|
|
278
|
+
}
|
|
279
|
+
//#endregion
|
|
280
|
+
//#region src/shared/entities/CookieMapEntity.d.ts
|
|
281
|
+
interface CookieMapEntityOptions {
|
|
282
|
+
cookies?: Map<string, string>;
|
|
283
|
+
prefix?: string;
|
|
284
|
+
}
|
|
285
|
+
declare class CookieMapEntity$1 {
|
|
286
|
+
static __container_entry_key: string;
|
|
287
|
+
cookies: Map<string, string>;
|
|
288
|
+
prefix: string;
|
|
289
|
+
constructor(data?: CookieMapEntityOptions);
|
|
290
|
+
load(cookies: Record<string, string> | Map<string, string>): void;
|
|
291
|
+
get(name: string, defaultValue?: string | null): string | null;
|
|
292
|
+
set(name: string, value: string, options?: any): void;
|
|
293
|
+
toRecord(): Record<string, string>;
|
|
294
|
+
}
|
|
295
|
+
//#endregion
|
|
296
|
+
//#region src/shared/entities/DriveEntryEntity.d.ts
|
|
297
|
+
declare class DriveEntry {
|
|
298
|
+
name: string;
|
|
299
|
+
path: string;
|
|
300
|
+
type: 'file' | 'directory';
|
|
301
|
+
metas: Record<string, any>;
|
|
302
|
+
constructor(data: DriveEntry);
|
|
303
|
+
}
|
|
304
|
+
//#endregion
|
|
305
|
+
//#region src/shared/entities/ModuleManifestEntity.d.ts
|
|
306
|
+
interface ModuleManifestBuildImport {
|
|
307
|
+
from: string;
|
|
308
|
+
to?: string;
|
|
309
|
+
type: 'global_import';
|
|
310
|
+
}
|
|
311
|
+
interface ModuleManifestBuild {
|
|
312
|
+
imports?: ModuleManifestBuildImport[];
|
|
313
|
+
}
|
|
314
|
+
declare const ModuleManifest_base: {
|
|
315
|
+
new (...args: any[]): {
|
|
316
|
+
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
317
|
+
};
|
|
318
|
+
from<T>(this: new () => T, data: Partial<T>): T;
|
|
319
|
+
} & Constructor;
|
|
320
|
+
declare class ModuleManifest extends ModuleManifest_base {
|
|
321
|
+
id: string;
|
|
322
|
+
name: string;
|
|
323
|
+
version: string;
|
|
324
|
+
description?: string;
|
|
325
|
+
enabled: boolean;
|
|
326
|
+
author?: string;
|
|
327
|
+
dependencies?: Record<string, string>;
|
|
328
|
+
build?: ModuleManifestBuild;
|
|
329
|
+
[key: string]: any;
|
|
330
|
+
}
|
|
331
|
+
//#endregion
|
|
332
|
+
//#region src/shared/entities/ModuleEntity.d.ts
|
|
333
|
+
interface ModuleUpgradeInfo {
|
|
334
|
+
source: 'git' | 'zip';
|
|
335
|
+
[key: string]: any;
|
|
336
|
+
}
|
|
337
|
+
declare const Module_base$1: {
|
|
338
|
+
new (...args: any[]): {
|
|
339
|
+
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
340
|
+
};
|
|
341
|
+
from<T>(this: new () => T, data: Partial<T>): T;
|
|
342
|
+
} & Constructor & Constructor<{}> & typeof LifecycleHook;
|
|
343
|
+
declare class Module$1 extends Module_base$1 {
|
|
344
|
+
id: string;
|
|
345
|
+
name: string;
|
|
346
|
+
enabled: boolean;
|
|
347
|
+
dependencies: Record<string, any>;
|
|
348
|
+
build: ModuleManifest['build'];
|
|
349
|
+
directory: string;
|
|
350
|
+
upgrade_info?: ModuleUpgradeInfo;
|
|
351
|
+
setData(data: Partial<Module$1 | ModuleManifest>): void;
|
|
352
|
+
}
|
|
353
|
+
//#endregion
|
|
354
|
+
//#region src/shared/entities/PluginEntity.d.ts
|
|
355
|
+
declare const PluginEntity_base: {
|
|
356
|
+
new (...args: any[]): {
|
|
357
|
+
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
358
|
+
};
|
|
359
|
+
from<T>(this: new () => T, data: Partial<T>): T;
|
|
360
|
+
} & Constructor;
|
|
361
|
+
declare class PluginEntity$1 extends PluginEntity_base {
|
|
362
|
+
id: string;
|
|
363
|
+
name: string;
|
|
364
|
+
version: string;
|
|
365
|
+
enabled: boolean;
|
|
366
|
+
}
|
|
367
|
+
//#endregion
|
|
368
|
+
//#region src/shared/entities/RoleEntity.d.ts
|
|
369
|
+
declare const Role_base: {
|
|
370
|
+
new (...args: any[]): {
|
|
371
|
+
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
372
|
+
};
|
|
373
|
+
from<T>(this: new () => T, data: Partial<T>): T;
|
|
374
|
+
} & Constructor & {
|
|
375
|
+
new (...args: any[]): {
|
|
376
|
+
created_at: Date | string;
|
|
377
|
+
updated_at: Date | string;
|
|
378
|
+
};
|
|
379
|
+
} & {
|
|
380
|
+
new (...args: any[]): {
|
|
381
|
+
deleted_at: Date | string | null;
|
|
382
|
+
};
|
|
383
|
+
};
|
|
384
|
+
declare class Role extends Role_base {
|
|
385
|
+
id: number;
|
|
386
|
+
name: string;
|
|
387
|
+
description?: string;
|
|
388
|
+
}
|
|
389
|
+
//#endregion
|
|
390
|
+
//#region src/shared/entities/UserEntity.d.ts
|
|
391
|
+
declare const UserEntity_base: {
|
|
392
|
+
new (...args: any[]): {
|
|
393
|
+
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
394
|
+
};
|
|
395
|
+
from<T>(this: new () => T, data: Partial<T>): T;
|
|
396
|
+
} & Constructor & {
|
|
397
|
+
new (...args: any[]): {
|
|
398
|
+
created_at: Date | string;
|
|
399
|
+
updated_at: Date | string;
|
|
400
|
+
};
|
|
401
|
+
} & {
|
|
402
|
+
new (...args: any[]): {
|
|
403
|
+
deleted_at: Date | string | null;
|
|
404
|
+
};
|
|
405
|
+
};
|
|
406
|
+
declare class UserEntity extends UserEntity_base {
|
|
407
|
+
id: number;
|
|
408
|
+
email: string;
|
|
409
|
+
name: string;
|
|
410
|
+
username: string;
|
|
411
|
+
password?: string;
|
|
412
|
+
verified_at?: Date | string | null;
|
|
413
|
+
permissions?: PermissionEntity[];
|
|
414
|
+
roles?: Role[];
|
|
415
|
+
get initials(): string;
|
|
416
|
+
}
|
|
417
|
+
//#endregion
|
|
418
|
+
//#region src/server/services/ArtisanWrapperService.d.ts
|
|
419
|
+
declare class ArtisanWrapperService {
|
|
420
|
+
process: cp.ChildProcess | null;
|
|
421
|
+
appBasePath: string;
|
|
422
|
+
env: Map<string, any>;
|
|
423
|
+
args: string[];
|
|
424
|
+
configArguments: Map<string, string>;
|
|
425
|
+
configFiles: string[];
|
|
426
|
+
debug: boolean;
|
|
427
|
+
logger: LoggerService;
|
|
428
|
+
static create(): ArtisanWrapperService;
|
|
429
|
+
setBasePath(path: string): this;
|
|
430
|
+
setDebug(debug: boolean): this;
|
|
431
|
+
setLogger(logger: LoggerService): this;
|
|
432
|
+
addConfigArgument(key: string, value: string): this;
|
|
433
|
+
addConfigFile(...filePaths: string[]): this;
|
|
434
|
+
addEnv(key: string, value: any): this;
|
|
435
|
+
loadConfigArguments(): void;
|
|
436
|
+
loadConfigFiles(): void;
|
|
437
|
+
loadEnvironment(): void;
|
|
438
|
+
loadArguments(args?: string[]): void;
|
|
439
|
+
kill(code?: number): void;
|
|
440
|
+
run(args?: string[]): Promise<void>;
|
|
441
|
+
}
|
|
442
|
+
//#endregion
|
|
443
|
+
//#region src/server/services/ConfigFSService.d.ts
|
|
444
|
+
interface InitiOptions$1 {
|
|
445
|
+
directory?: string;
|
|
446
|
+
debug?: boolean;
|
|
447
|
+
logger?: LoggerService;
|
|
448
|
+
}
|
|
449
|
+
declare class ConfigFSService extends ConfigService {
|
|
450
|
+
directory: string;
|
|
451
|
+
logger: LoggerService;
|
|
452
|
+
debug: boolean;
|
|
453
|
+
constructor(options?: InitiOptions$1);
|
|
454
|
+
load(): Promise<void>;
|
|
455
|
+
private parseKey;
|
|
456
|
+
set(fullKey: string, value: any, source?: string): void;
|
|
457
|
+
unset(fullKey: string): void;
|
|
458
|
+
}
|
|
459
|
+
//#endregion
|
|
460
|
+
//#region src/server/schemas/envSchema.d.ts
|
|
461
|
+
type EnvSchema = v.InferOutput<typeof envSchema>;
|
|
462
|
+
declare const envSchema: v.LooseObjectSchema<{
|
|
463
|
+
readonly NODE_ENV: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"development", undefined>, v.LiteralSchema<"production", undefined>, v.LiteralSchema<"test", undefined>], undefined>, "development">;
|
|
464
|
+
readonly ZENITH_BASE_PATH: v.StringSchema<undefined>;
|
|
465
|
+
readonly ZENITH_APP_URL: v.OptionalSchema<v.StringSchema<undefined>, "http://localhost:3000">;
|
|
466
|
+
readonly ZENITH_PORT: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TransformAction<string, number>]>, "3000">;
|
|
467
|
+
readonly ZENITH_HOST: v.OptionalSchema<v.StringSchema<undefined>, "0.0.0.0">;
|
|
468
|
+
readonly ZENITH_LOG_LEVEL: v.OptionalSchema<v.PicklistSchema<["error", "warn", "info", "debug"], undefined>, "info">;
|
|
469
|
+
readonly ZENITH_LIFECYCLE_DEBUG: v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.LiteralSchema<"true", undefined>, v.LiteralSchema<"false", undefined>, v.LiteralSchema<"1", undefined>, v.LiteralSchema<"0", undefined>], undefined>, v.TransformAction<"0" | "1" | "true" | "false", boolean>, v.BooleanSchema<undefined>]>, "false">;
|
|
470
|
+
readonly ZENITH_CLIENT_CONFIG: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TransformAction<string, Record<string, any>>]>, "">;
|
|
471
|
+
readonly ZENITH_CONFIG: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TransformAction<string, Record<string, any>>]>, "">;
|
|
472
|
+
readonly ZENITH_CONFIG_ARGUMENTS: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TransformAction<string, Record<string, any>>]>, "">;
|
|
473
|
+
readonly ZENITH_CONFIG_FILES: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TransformAction<string, string[]>]>, "">;
|
|
474
|
+
readonly ZENITH_CONFIG_DEBUG: v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.LiteralSchema<"true", undefined>, v.LiteralSchema<"false", undefined>, v.LiteralSchema<"1", undefined>, v.LiteralSchema<"0", undefined>], undefined>, v.TransformAction<"0" | "1" | "true" | "false", boolean>, v.BooleanSchema<undefined>]>, "false">;
|
|
475
|
+
readonly ZENITH_CONFIG_DRIVER: v.OptionalSchema<v.PicklistSchema<["fs", "s3"], undefined>, "fs">;
|
|
476
|
+
readonly ZENITH_CONFIG_FS_PATH: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
477
|
+
readonly ZENITH_CONFIG_S3_BUCKET: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
478
|
+
readonly ZENITH_CONFIG_S3_REGION: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
479
|
+
readonly ZENITH_CONFIG_S3_ACCESS_KEY_ID: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
480
|
+
readonly ZENITH_CONFIG_S3_SECRET_ACCESS_KEY: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
481
|
+
readonly ZENITH_CONFIG_S3_SESSION_TOKEN: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
482
|
+
readonly ZENITH_CONFIG_S3_ENDPOINT: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
483
|
+
readonly ZENITH_CONFIG_S3_PREFIX: v.OptionalSchema<v.StringSchema<undefined>, "">;
|
|
484
|
+
readonly ZENITH_MODULE_EXTRAS: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TransformAction<string, Record<string, any>>]>, undefined>;
|
|
485
|
+
readonly ZENITH_PLUGINS: v.OptionalSchema<v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TransformAction<string, Record<string, any>>]>, v.RecordSchema<v.StringSchema<undefined>, v.ObjectSchema<{
|
|
486
|
+
readonly directory: v.StringSchema<undefined>;
|
|
487
|
+
}, undefined>, undefined>]>, undefined>;
|
|
488
|
+
}, undefined>;
|
|
489
|
+
//#endregion
|
|
490
|
+
//#region src/server/services/EnvService.d.ts
|
|
491
|
+
declare class EnvService {
|
|
492
|
+
private env;
|
|
493
|
+
private files;
|
|
494
|
+
static create(): EnvService;
|
|
495
|
+
static dotEnvConfig(options?: dotenv.DotenvConfigOptions): dotenv.DotenvConfigOutput;
|
|
496
|
+
setFiles(files: string[]): this;
|
|
497
|
+
addFile(file: string): this;
|
|
498
|
+
load(): this;
|
|
499
|
+
get production(): boolean;
|
|
500
|
+
get development(): boolean;
|
|
501
|
+
get test(): boolean;
|
|
502
|
+
has<K extends keyof EnvSchema>(key: K): boolean;
|
|
503
|
+
get<K extends keyof EnvSchema>(key: K, defaultValue?: any): EnvSchema[K];
|
|
504
|
+
set<K extends keyof EnvSchema>(key: K, value: EnvSchema[K]): void;
|
|
505
|
+
}
|
|
506
|
+
//#endregion
|
|
507
|
+
//#region src/server/services/ConfigManagerService.d.ts
|
|
508
|
+
interface ConfigManagerOptions {
|
|
509
|
+
env: EnvService;
|
|
510
|
+
logger: LoggerService;
|
|
511
|
+
silent?: boolean;
|
|
512
|
+
}
|
|
513
|
+
declare class ConfigManagerService {
|
|
514
|
+
env: EnvService;
|
|
515
|
+
logger: LoggerService;
|
|
516
|
+
silent: boolean;
|
|
517
|
+
constructor(options: ConfigManagerOptions);
|
|
518
|
+
static create(options: ConfigManagerOptions): ConfigManagerService;
|
|
519
|
+
private loadS3Config;
|
|
520
|
+
private loadFSConfig;
|
|
521
|
+
loadConfigFromEnv(service: ConfigService): void;
|
|
522
|
+
loadConfigFromFile(service: ConfigService, file: string): void;
|
|
523
|
+
loadConfigFromFiles(service: ConfigService, files: string[]): void;
|
|
524
|
+
load(): Promise<ConfigService>;
|
|
525
|
+
}
|
|
526
|
+
//#endregion
|
|
527
|
+
//#region src/server/gateways/DriveBaseGateway.d.ts
|
|
528
|
+
interface UrlOptions {
|
|
529
|
+
expires?: ms.StringValue;
|
|
530
|
+
}
|
|
531
|
+
interface UploadUrlOptions {
|
|
532
|
+
expires?: ms.StringValue;
|
|
533
|
+
mime_types?: string[];
|
|
534
|
+
max_size?: number;
|
|
535
|
+
}
|
|
536
|
+
declare class DriveBaseGateway {
|
|
537
|
+
id: string;
|
|
538
|
+
name: string;
|
|
539
|
+
description?: string;
|
|
540
|
+
config: Record<string, any>;
|
|
541
|
+
constructor(data: Pick<DriveBaseGateway, 'id' | 'name' | 'description' | 'config'>);
|
|
542
|
+
list(folder?: string): Promise<DriveEntry[]>;
|
|
543
|
+
find(filename: string): Promise<DriveEntry>;
|
|
544
|
+
exists(filename: string): Promise<boolean>;
|
|
545
|
+
read(filename: string): Promise<Uint8Array>;
|
|
546
|
+
readStream(filename: string): Promise<NodeJS.ReadableStream>;
|
|
547
|
+
write(filename: string, data: Uint8Array): Promise<void>;
|
|
548
|
+
writeStream(filename: string, stream: NodeJS.ReadableStream): Promise<void>;
|
|
549
|
+
delete(filename: string): Promise<void>;
|
|
550
|
+
url(filename: string, options?: UrlOptions): Promise<string>;
|
|
551
|
+
uploadUrl(filename: string, options?: UploadUrlOptions): Promise<string>;
|
|
552
|
+
}
|
|
553
|
+
//#endregion
|
|
554
|
+
//#region src/server/gateways/DriveS3Gateway.d.ts
|
|
555
|
+
declare const schema: v.ObjectSchema<{
|
|
556
|
+
readonly bucket: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
557
|
+
readonly region: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
558
|
+
readonly accessKeyId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
559
|
+
readonly secretAccessKey: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
560
|
+
readonly sessionToken: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
561
|
+
readonly endpoint: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
562
|
+
readonly prefix: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
563
|
+
}, undefined>;
|
|
564
|
+
type S3DriveConfig = InferOutput<typeof schema>;
|
|
565
|
+
declare class DriveS3 extends DriveBaseGateway {
|
|
566
|
+
private schema;
|
|
567
|
+
private _client?;
|
|
568
|
+
constructor(data: Pick<DriveBaseGateway, 'id' | 'name' | 'description' | 'config'>);
|
|
569
|
+
get valid(): boolean;
|
|
570
|
+
private checkValid;
|
|
571
|
+
protected get bucket(): string;
|
|
572
|
+
protected get prefix(): string;
|
|
573
|
+
private getKey;
|
|
574
|
+
protected get client(): S3Client;
|
|
575
|
+
exists: DriveBaseGateway['exists'];
|
|
576
|
+
list: DriveBaseGateway['list'];
|
|
577
|
+
find: DriveBaseGateway['find'];
|
|
578
|
+
mkdir(_filename: string): Promise<void>;
|
|
579
|
+
read: DriveBaseGateway['read'];
|
|
580
|
+
readStream(filename: string): Promise<any>;
|
|
581
|
+
write: DriveBaseGateway['write'];
|
|
582
|
+
writeStream(filename: string, stream: NodeJS.ReadableStream): Promise<void>;
|
|
583
|
+
delete: DriveBaseGateway['delete'];
|
|
584
|
+
url: DriveBaseGateway['url'];
|
|
585
|
+
uploadUrl: DriveBaseGateway['uploadUrl'];
|
|
586
|
+
}
|
|
587
|
+
//#endregion
|
|
588
|
+
//#region src/server/services/ConfigS3Service.d.ts
|
|
589
|
+
interface InitiOptions extends Omit<S3DriveConfig, 'name' | 'description'> {
|
|
590
|
+
prefix?: string;
|
|
591
|
+
debug?: boolean;
|
|
592
|
+
logger?: LoggerService;
|
|
593
|
+
}
|
|
594
|
+
declare class ConfigS3Service extends ConfigService {
|
|
595
|
+
prefix: string;
|
|
596
|
+
logger: LoggerService;
|
|
597
|
+
debug: boolean;
|
|
598
|
+
drive: DriveS3;
|
|
599
|
+
bucket: string;
|
|
600
|
+
region: string;
|
|
601
|
+
endpoint?: string;
|
|
602
|
+
constructor(options: InitiOptions);
|
|
603
|
+
private parseKey;
|
|
604
|
+
load(): Promise<void>;
|
|
605
|
+
set(fullKey: string, value: any, source?: string): void;
|
|
606
|
+
unset(fullKey: string): void;
|
|
607
|
+
}
|
|
608
|
+
//#endregion
|
|
609
|
+
//#region src/server/entities/MigrationEntity.d.ts
|
|
610
|
+
interface MigrationEntiyData {
|
|
611
|
+
name: string;
|
|
612
|
+
source: string | null;
|
|
613
|
+
filename: string;
|
|
614
|
+
executedAt: Date | null;
|
|
615
|
+
}
|
|
616
|
+
declare class MigrationEntity {
|
|
617
|
+
name: string;
|
|
618
|
+
source: string | null;
|
|
619
|
+
filename: string;
|
|
620
|
+
executedAt: Date | null;
|
|
621
|
+
constructor(data: MigrationEntiyData);
|
|
622
|
+
up(db: Kysely<any>): Promise<void>;
|
|
623
|
+
down(db: Kysely<any>): Promise<void>;
|
|
624
|
+
}
|
|
625
|
+
//#endregion
|
|
626
|
+
//#region src/server/entities/CookieMapEntity.d.ts
|
|
627
|
+
declare class CookieMapEntity extends CookieMapEntity$1 {
|
|
628
|
+
request: Request$1;
|
|
629
|
+
response: Response$1;
|
|
630
|
+
constructor(request: Request$1, response: Response$1);
|
|
631
|
+
set(name: string, value: string, options?: CookieOptions): void;
|
|
632
|
+
}
|
|
633
|
+
//#endregion
|
|
634
|
+
//#region src/server/entities/PageRequestContextEntity.d.ts
|
|
635
|
+
interface PageRequestContextEntityOptions {
|
|
636
|
+
url: string;
|
|
637
|
+
request: Request$1;
|
|
638
|
+
response: Response$1;
|
|
639
|
+
state?: Map<string, any>;
|
|
640
|
+
nodeContainer?: ContainerService;
|
|
641
|
+
nodeConfig?: ConfigService;
|
|
642
|
+
nodeState?: Map<string, any>;
|
|
643
|
+
browserContainer?: ContainerService;
|
|
644
|
+
browserConfig?: ConfigService;
|
|
645
|
+
browserState?: Map<string, any>;
|
|
646
|
+
}
|
|
647
|
+
declare class PageRequestContextEntity {
|
|
648
|
+
url: string;
|
|
649
|
+
request: Request$1;
|
|
650
|
+
response: Response$1;
|
|
651
|
+
cookies: CookieMapEntity;
|
|
652
|
+
head: ResolvableHead[];
|
|
653
|
+
nodeContainer: ContainerService;
|
|
654
|
+
nodeConfig: ConfigService;
|
|
655
|
+
nodeState: Map<string, any>;
|
|
656
|
+
browserContainer: ContainerService;
|
|
657
|
+
browserConfig: ConfigService;
|
|
658
|
+
browserState: Map<string, any>;
|
|
659
|
+
constructor(data: PageRequestContextEntityOptions);
|
|
660
|
+
setBrowserState(key: string, value: any): void;
|
|
661
|
+
setNodeState(key: string, value: any): void;
|
|
662
|
+
setState(key: string, value: any): void;
|
|
663
|
+
setBrowserContainerValue(key: string, value: any): void;
|
|
664
|
+
setNodeContainerValue(key: string, value: any): void;
|
|
665
|
+
setContainerValue(key: string, value: any): void;
|
|
666
|
+
setBrowserConfigValue(key: string, value: any): void;
|
|
667
|
+
setNodeConfigValue(key: string, value: any): void;
|
|
668
|
+
setConfigValue(key: string, value: any): void;
|
|
669
|
+
}
|
|
670
|
+
//#endregion
|
|
61
671
|
//#region src/server/contracts/EventContract.d.ts
|
|
62
672
|
interface EventContract {
|
|
673
|
+
'migrator:before-migrate': {
|
|
674
|
+
migrations: MigrationEntity[];
|
|
675
|
+
};
|
|
676
|
+
'migrator:after-migrate': {
|
|
677
|
+
migrations: MigrationEntity[];
|
|
678
|
+
};
|
|
679
|
+
'migrator:before-rollback': {
|
|
680
|
+
migrations: MigrationEntity[];
|
|
681
|
+
};
|
|
682
|
+
'migrator:after-rollback': {
|
|
683
|
+
migrations: MigrationEntity[];
|
|
684
|
+
};
|
|
63
685
|
'user:before-create': {
|
|
64
|
-
user:
|
|
686
|
+
user: UserEntity;
|
|
65
687
|
};
|
|
66
688
|
'user:after-create': {
|
|
67
|
-
user:
|
|
689
|
+
user: UserEntity;
|
|
68
690
|
};
|
|
69
691
|
'user:before-update': {
|
|
70
|
-
user:
|
|
692
|
+
user: UserEntity;
|
|
71
693
|
};
|
|
72
694
|
'user:after-update': {
|
|
73
|
-
user:
|
|
695
|
+
user: UserEntity;
|
|
74
696
|
};
|
|
75
697
|
'user:before-delete': {
|
|
76
|
-
user:
|
|
698
|
+
user: UserEntity;
|
|
77
699
|
};
|
|
78
700
|
'user:after-delete': {
|
|
79
|
-
user:
|
|
701
|
+
user: UserEntity;
|
|
80
702
|
};
|
|
703
|
+
'page:request:start': PageRequestContextEntity;
|
|
704
|
+
'page:request:before-render': PageRequestContextEntity;
|
|
705
|
+
'page:request:after-render': PageRequestContextEntity;
|
|
706
|
+
[key: string]: any;
|
|
81
707
|
}
|
|
82
708
|
//#endregion
|
|
83
709
|
//#region src/server/services/EmmitterService.d.ts
|
|
@@ -168,6 +794,70 @@ declare class GitCommitRepository {
|
|
|
168
794
|
list(options?: GitCommitListOptions): Promise<PaginatedCommits>;
|
|
169
795
|
}
|
|
170
796
|
//#endregion
|
|
797
|
+
//#region src/server/services/LifecycleService.d.ts
|
|
798
|
+
declare class LifecycleService extends LifecycleService$1 {
|
|
799
|
+
addDirectory(dirname: string): Promise<void>;
|
|
800
|
+
}
|
|
801
|
+
//#endregion
|
|
802
|
+
//#region src/server/services/MigratorService.d.ts
|
|
803
|
+
interface MigrationSource {
|
|
804
|
+
id: string;
|
|
805
|
+
directory: string;
|
|
806
|
+
}
|
|
807
|
+
interface Migration {
|
|
808
|
+
name: string;
|
|
809
|
+
source: string | null;
|
|
810
|
+
filename: string;
|
|
811
|
+
executedAt: Date | null;
|
|
812
|
+
}
|
|
813
|
+
interface ListFilters {
|
|
814
|
+
source?: string;
|
|
815
|
+
}
|
|
816
|
+
interface MigrationResult {
|
|
817
|
+
name: string;
|
|
818
|
+
filename: string;
|
|
819
|
+
source: string | null;
|
|
820
|
+
result: 'success' | 'failed';
|
|
821
|
+
error?: any;
|
|
822
|
+
}
|
|
823
|
+
interface MigratorServiceOptions {
|
|
824
|
+
sources: MigrationSource[];
|
|
825
|
+
db: Kysely<any>;
|
|
826
|
+
debug?: boolean;
|
|
827
|
+
emmitter?: EmmitterService$1;
|
|
828
|
+
logger?: LoggerService;
|
|
829
|
+
}
|
|
830
|
+
declare class MigratorService {
|
|
831
|
+
static __container_entry_key: string;
|
|
832
|
+
debug: boolean;
|
|
833
|
+
emmitter: EmmitterService$1;
|
|
834
|
+
logger: LoggerService;
|
|
835
|
+
db: Kysely<any>;
|
|
836
|
+
sources: MigrationSource[];
|
|
837
|
+
constructor(options: MigratorServiceOptions);
|
|
838
|
+
addSource(source: MigrationSource): void;
|
|
839
|
+
private ensureMigrationsTable;
|
|
840
|
+
listSource(source: MigrationSource): Promise<MigrationEntity[]>;
|
|
841
|
+
list(filters?: ListFilters): Promise<MigrationEntity[]>;
|
|
842
|
+
private migrateUp;
|
|
843
|
+
private migrateDown;
|
|
844
|
+
migrateFile(filename: string): Promise<MigrationResult>;
|
|
845
|
+
rollbackFile(filename: string): Promise<MigrationResult>;
|
|
846
|
+
migrate(filters?: ListFilters & {
|
|
847
|
+
steps?: number;
|
|
848
|
+
}): Promise<MigrationResult[]>;
|
|
849
|
+
rollback(filters?: ListFilters & {
|
|
850
|
+
steps?: number;
|
|
851
|
+
}): Promise<MigrationResult[]>;
|
|
852
|
+
up(steps?: number, filters?: ListFilters): Promise<MigrationResult[]>;
|
|
853
|
+
down(steps?: number, filters?: ListFilters): Promise<MigrationResult[]>;
|
|
854
|
+
latest(filters?: ListFilters): Promise<MigrationResult[]>;
|
|
855
|
+
latestOrFail(filters?: ListFilters): Promise<MigrationResult[]>;
|
|
856
|
+
fresh(filters?: ListFilters & {
|
|
857
|
+
steps?: number;
|
|
858
|
+
}): Promise<MigrationResult[]>;
|
|
859
|
+
}
|
|
860
|
+
//#endregion
|
|
171
861
|
//#region src/server/services/PluginIpcClient.d.ts
|
|
172
862
|
type IpcMessage<T = any> = {
|
|
173
863
|
id: string;
|
|
@@ -233,138 +923,32 @@ declare class PluginRouter {
|
|
|
233
923
|
delete(path: string, handler: RouteHandler): void;
|
|
234
924
|
}
|
|
235
925
|
//#endregion
|
|
236
|
-
//#region src/shared/utils/compose.d.ts
|
|
237
|
-
type Constructor$1<T = {}> = new (...args: any[]) => T;
|
|
238
|
-
//#endregion
|
|
239
926
|
//#region src/shared/mixins/HooksMixin.d.ts
|
|
240
927
|
interface Listener {
|
|
241
928
|
event: string;
|
|
242
929
|
listener: (...args: any[]) => void;
|
|
243
930
|
}
|
|
244
931
|
//#endregion
|
|
245
|
-
//#region src/
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
value: any;
|
|
249
|
-
source: string;
|
|
250
|
-
}
|
|
251
|
-
declare class ConfigService {
|
|
252
|
-
entries: Map<string, Entry>;
|
|
253
|
-
constructor();
|
|
254
|
-
list(): Entry[];
|
|
255
|
-
parseValue(value: any): any;
|
|
256
|
-
loadFromRecord(record: Record<string, any>, source?: string): void;
|
|
257
|
-
loadFromEntries(entries: [string, any][], source?: string): void;
|
|
258
|
-
toRecord(): Record<string, any>;
|
|
259
|
-
has(key: string): boolean;
|
|
260
|
-
get<T = any | undefined>(key: string, defaultValue?: any): T;
|
|
261
|
-
getOne<T = any | undefined>(keys: string[], defaultValue?: any): T;
|
|
262
|
-
set(key: string, value: any, source?: string): void;
|
|
263
|
-
unset(key: string): void;
|
|
264
|
-
clear(): void;
|
|
265
|
-
}
|
|
266
|
-
//#endregion
|
|
267
|
-
//#region src/shared/services/ContainerService.d.ts
|
|
268
|
-
type Constructor<T = object> = new (...args: any[]) => T;
|
|
269
|
-
type EntryKey = string | symbol | Constructor;
|
|
270
|
-
declare class ContainerService {
|
|
271
|
-
private entries;
|
|
272
|
-
loadFromRecord(record: Record<string, any>): void;
|
|
273
|
-
toRecord(): Record<string, any>;
|
|
274
|
-
set(payload: EntryKey, value: any): void;
|
|
275
|
-
has(payload: EntryKey): boolean;
|
|
276
|
-
get<T>(payload: EntryKey): T;
|
|
277
|
-
singleton<T>(classConstructor: Constructor<T>): T;
|
|
278
|
-
load(entries: Record<any, any>): void;
|
|
279
|
-
proxy<T = unknown>(key: EntryKey): T;
|
|
280
|
-
keys(): EntryKey[];
|
|
932
|
+
//#region src/server/entities/AclEntity.d.ts
|
|
933
|
+
declare class Acl extends AclEntity {
|
|
934
|
+
authorize(action: string, subject: any, object?: Record<string, any>): void;
|
|
281
935
|
}
|
|
282
936
|
//#endregion
|
|
283
|
-
//#region src/
|
|
284
|
-
|
|
285
|
-
hook_id: string;
|
|
286
|
-
order?: number;
|
|
287
|
-
subhooks?: LifecycleHook[];
|
|
288
|
-
constructor();
|
|
289
|
-
onRegister(): Promise<void>;
|
|
290
|
-
onLoad(): Promise<void>;
|
|
291
|
-
onBoot(): Promise<void>;
|
|
292
|
-
onShutdown(): Promise<void>;
|
|
293
|
-
}
|
|
294
|
-
//#endregion
|
|
295
|
-
//#region src/shared/schemas/tokenSchema.d.ts
|
|
296
|
-
type Token = v.InferOutput<typeof tokenSchema>;
|
|
297
|
-
declare const tokenSchema: v.ObjectSchema<{
|
|
298
|
-
readonly id: v.NumberSchema<undefined>;
|
|
299
|
-
readonly name: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
300
|
-
readonly type: v.StringSchema<undefined>;
|
|
301
|
-
readonly user_id: v.NumberSchema<undefined>;
|
|
302
|
-
readonly token: v.StringSchema<undefined>;
|
|
303
|
-
readonly created_at: v.StringSchema<undefined>;
|
|
304
|
-
readonly updated_at: v.StringSchema<undefined>;
|
|
305
|
-
readonly expires_at: v.StringSchema<undefined>;
|
|
306
|
-
}, undefined>;
|
|
307
|
-
//#endregion
|
|
308
|
-
//#region src/shared/entities/ModuleManifestEntity.d.ts
|
|
309
|
-
interface ModuleManifestBuildImport {
|
|
310
|
-
from: string;
|
|
311
|
-
to?: string;
|
|
312
|
-
type: 'global_import';
|
|
313
|
-
}
|
|
314
|
-
interface ModuleManifestBuild {
|
|
315
|
-
imports?: ModuleManifestBuildImport[];
|
|
316
|
-
}
|
|
317
|
-
declare const ModuleManifest_base: {
|
|
318
|
-
new (...args: any[]): {
|
|
319
|
-
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
320
|
-
};
|
|
321
|
-
from<T>(this: new () => T, data: Partial<T>): T;
|
|
322
|
-
} & Constructor$1;
|
|
323
|
-
declare class ModuleManifest extends ModuleManifest_base {
|
|
324
|
-
id: string;
|
|
325
|
-
name: string;
|
|
326
|
-
version: string;
|
|
327
|
-
description?: string;
|
|
328
|
-
enabled: boolean;
|
|
329
|
-
author?: string;
|
|
330
|
-
dependencies?: Record<string, string>;
|
|
331
|
-
build?: ModuleManifestBuild;
|
|
937
|
+
//#region src/server/contracts/HttpContextContract.d.ts
|
|
938
|
+
interface Request {
|
|
332
939
|
[key: string]: any;
|
|
333
940
|
}
|
|
334
|
-
|
|
335
|
-
//#region src/shared/entities/ModuleEntity.d.ts
|
|
336
|
-
interface ModuleUpgradeInfo {
|
|
337
|
-
source: 'git' | 'zip';
|
|
941
|
+
interface Response {
|
|
338
942
|
[key: string]: any;
|
|
339
943
|
}
|
|
340
|
-
declare const Module_base$1: {
|
|
341
|
-
new (...args: any[]): {
|
|
342
|
-
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
343
|
-
};
|
|
344
|
-
from<T>(this: new () => T, data: Partial<T>): T;
|
|
345
|
-
} & Constructor$1 & Constructor$1<{}> & typeof LifecycleHook;
|
|
346
|
-
declare class Module$1 extends Module_base$1 {
|
|
347
|
-
id: string;
|
|
348
|
-
name: string;
|
|
349
|
-
enabled: boolean;
|
|
350
|
-
dependencies: Record<string, any>;
|
|
351
|
-
build: ModuleManifest['build'];
|
|
352
|
-
directory: string;
|
|
353
|
-
upgrade_info?: ModuleUpgradeInfo;
|
|
354
|
-
setData(data: Partial<Module$1 | ModuleManifest>): void;
|
|
355
|
-
}
|
|
356
|
-
//#endregion
|
|
357
|
-
//#region src/server/contracts/HttpContextContract.d.ts
|
|
358
|
-
interface Request extends Request$1 {}
|
|
359
|
-
interface Response extends Response$1 {}
|
|
360
944
|
interface HttpContext {
|
|
361
945
|
url: string;
|
|
362
946
|
method: string;
|
|
363
947
|
params: Record<string, string>;
|
|
364
948
|
query: Record<string, string | string[]>;
|
|
365
949
|
body: any;
|
|
366
|
-
cookie:
|
|
367
|
-
upload:
|
|
950
|
+
cookie: any;
|
|
951
|
+
upload: any;
|
|
368
952
|
acl: Acl;
|
|
369
953
|
request: Request;
|
|
370
954
|
response: Response;
|
|
@@ -422,8 +1006,9 @@ declare const Router_base: {
|
|
|
422
1006
|
emit(event: string, ...args: any[]): void;
|
|
423
1007
|
emitAsync(event: string, ...args: any[]): Promise<void>;
|
|
424
1008
|
};
|
|
425
|
-
} & Constructor
|
|
1009
|
+
} & Constructor;
|
|
426
1010
|
declare class Router<C = {}> extends Router_base {
|
|
1011
|
+
static __container_entry_key: string;
|
|
427
1012
|
routes: Route[];
|
|
428
1013
|
middlewares: MiddlewareRegister[];
|
|
429
1014
|
prefixes: string[];
|
|
@@ -481,6 +1066,7 @@ interface CommandOptions {
|
|
|
481
1066
|
shell?: boolean;
|
|
482
1067
|
}
|
|
483
1068
|
declare class ShellService {
|
|
1069
|
+
static __container_entry_key: string;
|
|
484
1070
|
debug: boolean;
|
|
485
1071
|
logger: LoggerService;
|
|
486
1072
|
init(data?: Partial<ShellService>): void;
|
|
@@ -517,59 +1103,35 @@ interface PaginateOptions {
|
|
|
517
1103
|
interface DeleteManyOptions {
|
|
518
1104
|
limit?: number;
|
|
519
1105
|
}
|
|
520
|
-
declare class DatabaseRepository {
|
|
1106
|
+
declare class DatabaseRepository<TEntity = Record<string, any>, TPrimaryKey = any, TOptions = Record<string, any>> {
|
|
521
1107
|
protected db: Kysely<any>;
|
|
522
1108
|
protected table: string;
|
|
523
1109
|
protected primaryKey: string;
|
|
524
1110
|
constructor(db: Kysely<any>, table: string, primaryKey: string);
|
|
525
|
-
setDatabase(db: Kysely<any>): this;
|
|
526
|
-
setTable(table: string): this;
|
|
527
|
-
setPrimaryKey(primaryKey: string): this;
|
|
528
1111
|
query(options?: {
|
|
529
1112
|
qb?: any;
|
|
530
|
-
} &
|
|
1113
|
+
} & TOptions): any;
|
|
531
1114
|
count(options?: Record<string, any>): Promise<number>;
|
|
532
|
-
findMany(options?: FindManyOptions &
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
1115
|
+
findMany(options?: FindManyOptions & TOptions): Promise<TEntity[]>;
|
|
1116
|
+
findOne(options?: TOptions): Promise<TEntity | null>;
|
|
1117
|
+
findById(id: TPrimaryKey, options?: TOptions): Promise<TEntity | null>;
|
|
1118
|
+
findByIdOrFail(id: TPrimaryKey, options?: TOptions): Promise<NonNullable<Awaited<TEntity>>>;
|
|
1119
|
+
paginate(options?: PaginateOptions & TOptions): Promise<Pagination>;
|
|
1120
|
+
create(data: Partial<TEntity>): Promise<any>;
|
|
1121
|
+
createMany(data: Partial<TEntity>[]): Promise<any[]>;
|
|
1122
|
+
updateById(id: TPrimaryKey, data: Partial<TEntity>): Promise<void>;
|
|
1123
|
+
deleteById(id: TPrimaryKey): Promise<void>;
|
|
1124
|
+
deleteMany(options?: DeleteManyOptions & TOptions): Promise<void>;
|
|
541
1125
|
}
|
|
542
1126
|
//#endregion
|
|
543
|
-
//#region src/server/mixins/DatabaseRepositoryInferMixin.d.ts
|
|
544
|
-
interface IRepositoryTypes<TEntity = Record<string, any>, TPrimaryKeyType = any, TOptions = Record<string, any>> {
|
|
545
|
-
count(options?: TOptions): Promise<number>;
|
|
546
|
-
findMany(options?: TOptions & FindManyOptions): Promise<TEntity[]>;
|
|
547
|
-
findById(id: TPrimaryKeyType, options?: TOptions): Promise<TEntity | null>;
|
|
548
|
-
findByIdOrFail(id: TPrimaryKeyType, options?: TOptions): Promise<TEntity>;
|
|
549
|
-
paginate(options?: TOptions & PaginateOptions): Promise<Pagination>;
|
|
550
|
-
create(data: Partial<TEntity>, options?: TOptions): Promise<TEntity>;
|
|
551
|
-
createMany(data: Partial<TEntity>[], options?: TOptions): Promise<TEntity[]>;
|
|
552
|
-
deleteById(id: TPrimaryKeyType): Promise<void>;
|
|
553
|
-
destroyMany(options?: TOptions): Promise<void>;
|
|
554
|
-
}
|
|
555
|
-
declare function DatabaseRepositoryInferMixin<TEntity = Record<string, any>, TPrimaryKeyType = any, TOptions = Record<string, any>>(): <TBase extends Constructor$1>(Base: TBase) => TBase & Constructor$1<IRepositoryTypes<TEntity, TPrimaryKeyType, TOptions>>;
|
|
556
|
-
//#endregion
|
|
557
1127
|
//#region src/server/repositories/PermissionAssignmentRepository.d.ts
|
|
558
1128
|
interface PermissionAssignmentRepositoryQueryOptions {
|
|
559
1129
|
id?: number | number[];
|
|
560
1130
|
permissionId?: number | number[];
|
|
561
|
-
assignableId?:
|
|
1131
|
+
assignableId?: string | string[];
|
|
562
1132
|
assignableType?: string | string[];
|
|
563
1133
|
}
|
|
564
|
-
declare
|
|
565
|
-
id: number;
|
|
566
|
-
permission_id: number;
|
|
567
|
-
assignable_type: string;
|
|
568
|
-
assignable_id: string;
|
|
569
|
-
created_at: string;
|
|
570
|
-
updated_at: string;
|
|
571
|
-
}, number, PermissionAssignmentRepositoryQueryOptions>> & Constructor$1<{}> & typeof DatabaseRepository;
|
|
572
|
-
declare class PermissionAssignmentRepository extends PermissionAssignmentRepository_base {
|
|
1134
|
+
declare class PermissionAssignmentRepository extends DatabaseRepository<PermissionAssignment, PermissionAssignment['id'], PermissionAssignmentRepositoryQueryOptions> {
|
|
573
1135
|
constructor(db: DatabaseRepository['db']);
|
|
574
1136
|
query(options?: PermissionAssignmentRepositoryQueryOptions): any;
|
|
575
1137
|
}
|
|
@@ -579,29 +1141,32 @@ interface PermissionRepositoryQueryOptions {
|
|
|
579
1141
|
id?: number | number[];
|
|
580
1142
|
search?: string;
|
|
581
1143
|
}
|
|
582
|
-
declare
|
|
583
|
-
id: number;
|
|
584
|
-
name: string | null;
|
|
585
|
-
description: string | null;
|
|
586
|
-
action: string;
|
|
587
|
-
subject: string;
|
|
588
|
-
conditions: string | null;
|
|
589
|
-
created_at: string;
|
|
590
|
-
updated_at: string;
|
|
591
|
-
expires_at: string;
|
|
592
|
-
}, number, PermissionRepositoryQueryOptions>>;
|
|
593
|
-
declare class PermissionRepository extends PermissionRepository_base {
|
|
1144
|
+
declare class PermissionRepository extends DatabaseRepository<Permission, Permission['id'], PermissionRepositoryQueryOptions> {
|
|
594
1145
|
constructor(db: DatabaseRepository['db']);
|
|
595
1146
|
query(options?: PermissionRepositoryQueryOptions): any;
|
|
596
1147
|
}
|
|
597
1148
|
//#endregion
|
|
1149
|
+
//#region src/server/mixins/DatabaseRepositoryInferMixin.d.ts
|
|
1150
|
+
interface IRepositoryTypes<TEntity = Record<string, any>, TPrimaryKeyType = any, TOptions = Record<string, any>> {
|
|
1151
|
+
count(options?: TOptions): Promise<number>;
|
|
1152
|
+
findMany(options?: TOptions & FindManyOptions): Promise<TEntity[]>;
|
|
1153
|
+
findById(id: TPrimaryKeyType, options?: TOptions): Promise<TEntity | null>;
|
|
1154
|
+
findByIdOrFail(id: TPrimaryKeyType, options?: TOptions): Promise<TEntity>;
|
|
1155
|
+
paginate(options?: TOptions & PaginateOptions): Promise<Pagination>;
|
|
1156
|
+
create(data: Partial<TEntity>, options?: TOptions): Promise<TEntity>;
|
|
1157
|
+
createMany(data: Partial<TEntity>[], options?: TOptions): Promise<TEntity[]>;
|
|
1158
|
+
deleteById(id: TPrimaryKeyType): Promise<void>;
|
|
1159
|
+
destroyMany(options?: TOptions): Promise<void>;
|
|
1160
|
+
}
|
|
1161
|
+
declare function DatabaseRepositoryInferMixin<TEntity = Record<string, any>, TPrimaryKeyType = any, TOptions = Record<string, any>>(): <TBase extends Constructor>(Base: TBase) => TBase & Constructor<IRepositoryTypes<TEntity, TPrimaryKeyType, TOptions>>;
|
|
1162
|
+
//#endregion
|
|
598
1163
|
//#region src/server/repositories/TokenRepository.d.ts
|
|
599
1164
|
interface TokenRepositoryQueryOptions {
|
|
600
1165
|
id?: number | number[];
|
|
601
1166
|
search?: string;
|
|
602
1167
|
type?: string | string[];
|
|
603
1168
|
}
|
|
604
|
-
declare const TokenRepository_base: Constructor
|
|
1169
|
+
declare const TokenRepository_base: Constructor & Constructor<IRepositoryTypes<{
|
|
605
1170
|
id: number;
|
|
606
1171
|
name: string | null;
|
|
607
1172
|
type: string;
|
|
@@ -610,7 +1175,7 @@ declare const TokenRepository_base: Constructor$1<{}> & typeof DatabaseRepositor
|
|
|
610
1175
|
created_at: string;
|
|
611
1176
|
updated_at: string;
|
|
612
1177
|
expires_at: string;
|
|
613
|
-
}, number, TokenRepositoryQueryOptions
|
|
1178
|
+
}, number, TokenRepositoryQueryOptions>> & Constructor<{}> & typeof DatabaseRepository;
|
|
614
1179
|
declare class TokenRepository extends TokenRepository_base {
|
|
615
1180
|
constructor(db: DatabaseRepository['db']);
|
|
616
1181
|
query(options?: TokenRepositoryQueryOptions): any;
|
|
@@ -767,12 +1332,18 @@ declare const database: Kysely<DatabaseContract>;
|
|
|
767
1332
|
//#region src/server/facades/logger.d.ts
|
|
768
1333
|
declare const logger: LoggerService;
|
|
769
1334
|
//#endregion
|
|
1335
|
+
//#region src/server/facades/migrator.d.ts
|
|
1336
|
+
declare const migrator: MigratorService;
|
|
1337
|
+
//#endregion
|
|
770
1338
|
//#region src/server/facades/router.d.ts
|
|
771
1339
|
declare const router: Router<HttpContext>;
|
|
772
1340
|
//#endregion
|
|
773
1341
|
//#region src/server/facades/shell.d.ts
|
|
774
1342
|
declare const shell: ShellService;
|
|
775
1343
|
//#endregion
|
|
1344
|
+
//#region src/server/contracts/KyselyContract.d.ts
|
|
1345
|
+
interface DatabaseKysely extends Kysely<DatabaseContract> {}
|
|
1346
|
+
//#endregion
|
|
776
1347
|
//#region src/server/utils/defineLoader.d.ts
|
|
777
1348
|
interface Loader<T = Record<string, any>> {
|
|
778
1349
|
load(entities: T[]): Promise<void>;
|
|
@@ -808,10 +1379,30 @@ declare class Module extends Module_base {
|
|
|
808
1379
|
staticPath(...parts: string[]): string;
|
|
809
1380
|
command: typeof shell.command;
|
|
810
1381
|
load(): void;
|
|
1382
|
+
findClientEntrypointFilename(context?: 'dev' | 'node' | 'browser'): string | null;
|
|
1383
|
+
}
|
|
1384
|
+
//#endregion
|
|
1385
|
+
//#region src/server/entities/PluginEntryEntity.d.ts
|
|
1386
|
+
declare const PluginEntryEntity_base: typeof PluginEntity$1;
|
|
1387
|
+
declare class PluginEntryEntity extends PluginEntryEntity_base {
|
|
1388
|
+
directory: string;
|
|
1389
|
+
makePath(...parts: string[]): string;
|
|
1390
|
+
}
|
|
1391
|
+
//#endregion
|
|
1392
|
+
//#region src/server/entities/PluginEntity.d.ts
|
|
1393
|
+
interface AddApiFolderOptions {
|
|
1394
|
+
prefix?: string;
|
|
1395
|
+
}
|
|
1396
|
+
declare class PluginEntity extends PluginEntryEntity {
|
|
1397
|
+
staticPath(...parts: string[]): string;
|
|
1398
|
+
load(): Promise<void>;
|
|
1399
|
+
addApiFolder(directory: string, options?: AddApiFolderOptions): Promise<void>;
|
|
1400
|
+
static fromPluginDiscoverEntity<T>(this: new () => T, entity: PluginEntryEntity): T;
|
|
811
1401
|
}
|
|
812
1402
|
//#endregion
|
|
813
1403
|
//#region src/server/utils/basePath.d.ts
|
|
814
1404
|
declare function basePath(...args: string[]): string;
|
|
1405
|
+
declare function relativeToBasePath(...args: string[]): string;
|
|
815
1406
|
declare function tmpPath(...args: string[]): string;
|
|
816
1407
|
//#endregion
|
|
817
1408
|
//#region src/server/utils/createLoaderFactory.d.ts
|
|
@@ -821,6 +1412,12 @@ declare function createLoaderFactory<E extends Record<string, any> = Record<stri
|
|
|
821
1412
|
load: (entities: E | E[], names: keyof R | (keyof R)[]) => Promise<void>;
|
|
822
1413
|
};
|
|
823
1414
|
//#endregion
|
|
1415
|
+
//#region src/server/utils/defineHandler.d.ts
|
|
1416
|
+
declare function defineHandler(handler: (ctx: HttpContext) => Promise<any>): (ctx: HttpContext) => Promise<any>;
|
|
1417
|
+
//#endregion
|
|
1418
|
+
//#region src/server/utils/generateIndexFile.d.ts
|
|
1419
|
+
declare function generateIndexFile(options: any): void;
|
|
1420
|
+
//#endregion
|
|
824
1421
|
//#region src/server/utils/importAll.d.ts
|
|
825
1422
|
interface Options {
|
|
826
1423
|
cache?: boolean;
|
|
@@ -844,4 +1441,5 @@ declare function importAll(directory: string, options?: Options): Promise<Record
|
|
|
844
1441
|
//#region src/server/utils/importOne.d.ts
|
|
845
1442
|
declare function importOne(filenames: string[]): Promise<any>;
|
|
846
1443
|
//#endregion
|
|
847
|
-
export { DatabaseContract, DatabaseRepository, DatabaseRepositoryInferMixin, DeleteManyOptions, EmailTemplateMetaTable, EmailTemplateTable, EmmitterService, EventContract, FileMetaTable, FileTable, FindManyOptions, GitBranch, GitBranchFetchOptions, GitBranchRepository, GitCommit, GitCommitListOptions, GitCommitRef, GitCommitRepository, GitGateway, GitGatewayOptions, GitRepoInfo, HandleResult, Handler, HasManyThroughLoaderOptions, HttpContext, HttpMethod, IRepositoryTypes, IpcMessage, JobTable, Loader, LoaderRecord, Middleware, MiddlewareHandleResult, MigrationsTable, Module as ModuleEntity, OauthAccountTable, OauthTokenTable, PaginateOptions, PaginatedCommits, Pagination, PermissionAssignmentRepository, PermissionAssignmentRepositoryQueryOptions, PermissionAssignmentTable, PermissionRepository, PermissionRepositoryQueryOptions, PermissionTable, PluginIpcClient, PluginIpcHost, PluginRouter, Redirect, Request, Response, RoleTable, RouteDefinition, Route as RouteEntity, RouteHandler, RouteReply, RouteRequest, RouteResponsePayload, RouterFileBaseRoutingService, Router as RouterService, ShellService, SoftDeleteTable, TimestampTable, TokenRepository, TokenRepositoryQueryOptions, TokenTable, UploadSessionTable, UserMetaTable, UserRoleTable, UserTable, basePath, config, _default as container, createHasManyThroughLoader, createLoaderFactory, database, defineLoader, importAll, importFiles, importGlob, importOne, key, loadHasManyThrough, logger, router, shell, tmpPath };
|
|
1444
|
+
export { Acl as AclEntity, ArtisanService, ArteTesterService as ArtisanTesterService, ArtisanWrapperService, ConfigFSService, ConfigManagerOptions, ConfigManagerService, ConfigS3Service, CookieMapEntity, DatabaseContract, DatabaseKysely, DatabaseRepository, DatabaseRepositoryInferMixin, DeleteManyOptions, DriveBaseGateway, DriveS3 as DriveS3Gateway, EmailTemplateMetaTable, EmailTemplateTable, EmmitterService, EnvService, EventContract, FileMetaTable, FileTable, FindManyOptions, GitBranch, GitBranchFetchOptions, GitBranchRepository, GitCommit, GitCommitListOptions, GitCommitRef, GitCommitRepository, GitGateway, GitGatewayOptions, GitRepoInfo, HandleResult, Handler, HasManyThroughLoaderOptions, HttpContext, HttpMethod, IRepositoryTypes, IpcMessage, JobTable, LifecycleService, ListFilters, Loader, LoaderRecord, Middleware, MiddlewareHandleResult, Migration, MigrationEntity, MigrationEntiyData, MigrationSource, MigrationsTable, MigratorService, MigratorServiceOptions, Module as ModuleEntity, OauthAccountTable, OauthTokenTable, ObjectOptions, PageRequestContextEntity, PageRequestContextEntityOptions, PaginateOptions, PaginatedCommits, Pagination, PermissionAssignmentRepository, PermissionAssignmentRepositoryQueryOptions, PermissionAssignmentTable, PermissionRepository, PermissionRepositoryQueryOptions, PermissionTable, PluginEntity, PluginEntryEntity, PluginIpcClient, PluginIpcHost, PluginRouter, Redirect, Request, Response, RoleTable, RouteDefinition, Route as RouteEntity, RouteHandler, RouteReply, RouteRequest, RouteResponsePayload, RouterFileBaseRoutingService, Router as RouterService, S3DriveConfig, ShellService, SoftDeleteTable, TableColumn, TimestampTable, TokenRepository, TokenRepositoryQueryOptions, TokenTable, UploadSessionTable, UploadUrlOptions, UrlOptions, UserMetaTable, UserRoleTable, UserTable, basePath, config, _default as container, createHasManyThroughLoader, createLoaderFactory, database, defineHandler, defineLoader, generateIndexFile, importAll, importFiles, importGlob, importOne, key, loadHasManyThrough, logger, migrator, printObject, printTable, relativeToBasePath, router, shell, tmpPath };
|
|
1445
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC5tdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZlci91dGlscy9wcmludFRhYmxlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL0FydGlzYW5TZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL0FydGlzYW5UZXN0ZXJTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NlcnZpY2VzL0NvbmZpZ1NlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvc2VydmljZXMvQ29udGFpbmVyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9zZXJ2aWNlcy9Mb2dnZXJTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NlcnZpY2VzL0VtbWl0dGVyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9MaWZlY3ljbGVIb29rLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3V0aWxzL2NvbXBvc2UuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvc2VydmljZXMvTGlmZWN5Y2xlU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9zY2hlbWFzL3Blcm1pc3Npb25Bc3NpZ25tZW50U2NoZW1hLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NjaGVtYXMvcGVybWlzc2lvblNjaGVtYS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9zY2hlbWFzL3Rva2VuU2NoZW1hLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL1Blcm1pc3Npb25FbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvQWNsRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL0Nvb2tpZU1hcEVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9Ecml2ZUVudHJ5RW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL01vZHVsZU1hbmlmZXN0RW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL01vZHVsZUVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9QbHVnaW5FbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvUm9sZUVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9Vc2VyRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL0FydGlzYW5XcmFwcGVyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9Db25maWdGU1NlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2NoZW1hcy9lbnZTY2hlbWEuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvRW52U2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9Db25maWdNYW5hZ2VyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9nYXRld2F5cy9Ecml2ZUJhc2VHYXRld2F5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2dhdGV3YXlzL0RyaXZlUzNHYXRld2F5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL0NvbmZpZ1MzU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9lbnRpdGllcy9NaWdyYXRpb25FbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZW50aXRpZXMvQ29va2llTWFwRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2VudGl0aWVzL1BhZ2VSZXF1ZXN0Q29udGV4dEVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9jb250cmFjdHMvRXZlbnRDb250cmFjdC5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9FbW1pdHRlclNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZ2F0ZXdheXMvR2l0R2F0ZXdheS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9HaXRCcmFuY2hSZXBvc2l0b3J5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL0dpdENvbW1pdFJlcG9zaXRvcnkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvTGlmZWN5Y2xlU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9NaWdyYXRvclNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvUGx1Z2luSXBjQ2xpZW50LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL1BsdWdpbklwY0hvc3QuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvUGx1Z2luUm91dGVyLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL21peGlucy9Ib29rc01peGluLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2VudGl0aWVzL0FjbEVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9jb250cmFjdHMvSHR0cENvbnRleHRDb250cmFjdC5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9jb250cmFjdHMvUm91dGVyQ29udHJhY3QuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZW50aXRpZXMvUm91dGVFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvUm91dGVyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9Sb3V0ZXJGaWxlQmFzZVJvdXRpbmdTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL1NoZWxsU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9yZXBvc2l0b3JpZXMvRGF0YWJhc2VSZXBvc2l0b3J5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3JlcG9zaXRvcmllcy9QZXJtaXNzaW9uQXNzaWdubWVudFJlcG9zaXRvcnkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcmVwb3NpdG9yaWVzL1Blcm1pc3Npb25SZXBvc2l0b3J5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL21peGlucy9EYXRhYmFzZVJlcG9zaXRvcnlJbmZlck1peGluLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3JlcG9zaXRvcmllcy9Ub2tlblJlcG9zaXRvcnkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZmFjYWRlcy9jb25maWcuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZmFjYWRlcy9jb250YWluZXIuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvY29udHJhY3RzL0RhdGFiYXNlQ29udHJhY3QuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZmFjYWRlcy9kYXRhYmFzZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9mYWNhZGVzL2xvZ2dlci5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9mYWNhZGVzL21pZ3JhdG9yLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2ZhY2FkZXMvcm91dGVyLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2ZhY2FkZXMvc2hlbGwuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvY29udHJhY3RzL0t5c2VseUNvbnRyYWN0LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3V0aWxzL2RlZmluZUxvYWRlci5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9sb2FkZXJzL2NyZWF0ZUhhc01hbnlUaHJvdWdoTG9hZGVyLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2VudGl0aWVzL01vZHVsZUVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9lbnRpdGllcy9QbHVnaW5FbnRyeUVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9lbnRpdGllcy9QbHVnaW5FbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvdXRpbHMvYmFzZVBhdGguZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvdXRpbHMvY3JlYXRlTG9hZGVyRmFjdG9yeS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci91dGlscy9kZWZpbmVIYW5kbGVyLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3V0aWxzL2dlbmVyYXRlSW5kZXhGaWxlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3V0aWxzL2ltcG9ydEFsbC5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci91dGlscy9pbXBvcnRPbmUuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFRhYmxlQ29sdW1uIHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIHZhbHVlOiBzdHJpbmcgfCAoKGl0ZW06IGFueSkgPT4gc3RyaW5nKTtcbiAgICB3aWR0aD86IG51bWJlcjtcbiAgICByZWFsV2lkdGg/OiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdE9wdGlvbnMge1xuICAgIGtleVdpZHRoPzogbnVtYmVyO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcHJpbnRPYmplY3Qob3V0cHV0PzogYW55LCBvcHRpb25zPzogT2JqZWN0T3B0aW9ucyk6IHZvaWQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwcmludFRhYmxlKGl0ZW1zOiBhbnlbXSwgY29sdW1ucz86IFRhYmxlQ29sdW1uW10pOiB2b2lkO1xuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsgcHJpbnRUYWJsZSwgcHJpbnRPYmplY3QgfSBmcm9tICcuLi91dGlscy9wcmludFRhYmxlLnRzJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFydGlzYW5TZXJ2aWNlIGV4dGVuZHMgQ29tbWFuZCB7XG4gICAgbmVlZHM6IFNldDxzdHJpbmc+O1xuICAgIHRhYmxlOiB0eXBlb2YgcHJpbnRUYWJsZTtcbiAgICBvYmplY3Q6IHR5cGVvZiBwcmludE9iamVjdDtcbiAgICBjb2xvcnM6IGNoYWxrLkNoYWxrICYgY2hhbGsuQ2hhbGtGdW5jdGlvbiAmIHtcbiAgICAgICAgc3VwcG9ydHNDb2xvcjogY2hhbGsuQ29sb3JTdXBwb3J0IHwgZmFsc2U7XG4gICAgICAgIExldmVsOiBjaGFsay5MZXZlbDtcbiAgICAgICAgQ29sb3I6IChcImJsYWNrXCIgfCBcInJlZFwiIHwgXCJncmVlblwiIHwgXCJ5ZWxsb3dcIiB8IFwiYmx1ZVwiIHwgXCJtYWdlbnRhXCIgfCBcImN5YW5cIiB8IFwid2hpdGVcIiB8IFwiZ3JheVwiIHwgXCJncmV5XCIgfCBcImJsYWNrQnJpZ2h0XCIgfCBcInJlZEJyaWdodFwiIHwgXCJncmVlbkJyaWdodFwiIHwgXCJ5ZWxsb3dCcmlnaHRcIiB8IFwiYmx1ZUJyaWdodFwiIHwgXCJtYWdlbnRhQnJpZ2h0XCIgfCBcImN5YW5CcmlnaHRcIiB8IFwid2hpdGVCcmlnaHRcIikgfCAoXCJiZ0JsYWNrXCIgfCBcImJnUmVkXCIgfCBcImJnR3JlZW5cIiB8IFwiYmdZZWxsb3dcIiB8IFwiYmdCbHVlXCIgfCBcImJnTWFnZW50YVwiIHwgXCJiZ0N5YW5cIiB8IFwiYmdXaGl0ZVwiIHwgXCJiZ0dyYXlcIiB8IFwiYmdHcmV5XCIgfCBcImJnQmxhY2tCcmlnaHRcIiB8IFwiYmdSZWRCcmlnaHRcIiB8IFwiYmdHcmVlbkJyaWdodFwiIHwgXCJiZ1llbGxvd0JyaWdodFwiIHwgXCJiZ0JsdWVCcmlnaHRcIiB8IFwiYmdNYWdlbnRhQnJpZ2h0XCIgfCBcImJnQ3lhbkJyaWdodFwiIHwgXCJiZ1doaXRlQnJpZ2h0XCIpO1xuICAgICAgICBGb3JlZ3JvdW5kQ29sb3I6IFwiYmxhY2tcIiB8IFwicmVkXCIgfCBcImdyZWVuXCIgfCBcInllbGxvd1wiIHwgXCJibHVlXCIgfCBcIm1hZ2VudGFcIiB8IFwiY3lhblwiIHwgXCJ3aGl0ZVwiIHwgXCJncmF5XCIgfCBcImdyZXlcIiB8IFwiYmxhY2tCcmlnaHRcIiB8IFwicmVkQnJpZ2h0XCIgfCBcImdyZWVuQnJpZ2h0XCIgfCBcInllbGxvd0JyaWdodFwiIHwgXCJibHVlQnJpZ2h0XCIgfCBcIm1hZ2VudGFCcmlnaHRcIiB8IFwiY3lhbkJyaWdodFwiIHwgXCJ3aGl0ZUJyaWdodFwiO1xuICAgICAgICBCYWNrZ3JvdW5kQ29sb3I6IFwiYmdCbGFja1wiIHwgXCJiZ1JlZFwiIHwgXCJiZ0dyZWVuXCIgfCBcImJnWWVsbG93XCIgfCBcImJnQmx1ZVwiIHwgXCJiZ01hZ2VudGFcIiB8IFwiYmdDeWFuXCIgfCBcImJnV2hpdGVcIiB8IFwiYmdHcmF5XCIgfCBcImJnR3JleVwiIHwgXCJiZ0JsYWNrQnJpZ2h0XCIgfCBcImJnUmVkQnJpZ2h0XCIgfCBcImJnR3JlZW5CcmlnaHRcIiB8IFwiYmdZZWxsb3dCcmlnaHRcIiB8IFwiYmdCbHVlQnJpZ2h0XCIgfCBcImJnTWFnZW50YUJyaWdodFwiIHwgXCJiZ0N5YW5CcmlnaHRcIiB8IFwiYmdXaGl0ZUJyaWdodFwiO1xuICAgICAgICBNb2RpZmllcnM6IFwicmVzZXRcIiB8IFwiYm9sZFwiIHwgXCJkaW1cIiB8IFwiaXRhbGljXCIgfCBcInVuZGVybGluZVwiIHwgXCJpbnZlcnNlXCIgfCBcImhpZGRlblwiIHwgXCJzdHJpa2V0aHJvdWdoXCIgfCBcInZpc2libGVcIjtcbiAgICAgICAgc3RkZXJyOiBjaGFsay5DaGFsayAmIHtcbiAgICAgICAgICAgIHN1cHBvcnRzQ29sb3I6IGNoYWxrLkNvbG9yU3VwcG9ydCB8IGZhbHNlO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgbmVlZCguLi5hcmdzOiBzdHJpbmdbXSk6IHRoaXM7XG4gICAgY3JlYXRlQ29tbWFuZChuYW1lPzogc3RyaW5nKTogQXJ0aXNhblNlcnZpY2U7XG59XG4iLCJpbXBvcnQgQXJ0aXNhblNlcnZpY2UgZnJvbSAnI3NlcnZlci9zZXJ2aWNlcy9BcnRpc2FuU2VydmljZS50cyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcnRlVGVzdGVyU2VydmljZSBleHRlbmRzIEFydGlzYW5TZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpO1xuICAgIGFkZChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGV4ZWN1dGUoYXJnczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW50ZXJmYWNlIEVudHJ5IHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogYW55O1xuICAgIHNvdXJjZTogc3RyaW5nO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uZmlnU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGVudHJpZXM6IE1hcDxzdHJpbmcsIEVudHJ5PjtcbiAgICBjb25zdHJ1Y3RvcigpO1xuICAgIGxpc3QoKTogRW50cnlbXTtcbiAgICBwYXJzZVZhbHVlKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgbG9hZEZyb21SZWNvcmQocmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBzb3VyY2U/OiBzdHJpbmcpOiB2b2lkO1xuICAgIGxvYWRGcm9tRW50cmllcyhlbnRyaWVzOiBbc3RyaW5nLCBhbnldW10sIHNvdXJjZT86IHN0cmluZyk6IHZvaWQ7XG4gICAgdG9SZWNvcmQoKTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBoYXMoa2V5OiBzdHJpbmcpOiBib29sZWFuO1xuICAgIGdldDxUID0gYW55IHwgdW5kZWZpbmVkPihrZXk6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogYW55KTogVDtcbiAgICBnZXRPbmU8VCA9IGFueSB8IHVuZGVmaW5lZD4oa2V5czogc3RyaW5nW10sIGRlZmF1bHRWYWx1ZT86IGFueSk6IFQ7XG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBzb3VyY2U/OiBzdHJpbmcpOiB2b2lkO1xuICAgIHVuc2V0KGtleTogc3RyaW5nKTogdm9pZDtcbiAgICBjbGVhcigpOiB2b2lkO1xufVxuZXhwb3J0IHt9O1xuIiwidHlwZSBDb25zdHJ1Y3RvcjxUID0gb2JqZWN0PiA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQ7XG50eXBlIEVudHJ5S2V5ID0gc3RyaW5nIHwgc3ltYm9sIHwgQ29uc3RydWN0b3I7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250YWluZXJTZXJ2aWNlIHtcbiAgICBwcml2YXRlIGVudHJpZXM7XG4gICAgbG9hZEZyb21SZWNvcmQocmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdm9pZDtcbiAgICB0b1JlY29yZCgpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIHByaXZhdGUgZ2V0S2V5O1xuICAgIHNldChwYXlsb2FkOiBFbnRyeUtleSwgdmFsdWU6IGFueSk6IHRoaXM7XG4gICAgaGFzKHBheWxvYWQ6IEVudHJ5S2V5KTogYm9vbGVhbjtcbiAgICBnZXQ8VD4ocGF5bG9hZDogRW50cnlLZXkpOiBUO1xuICAgIHNpbmdsZXRvbjxUPihjbGFzc0NvbnN0cnVjdG9yOiBDb25zdHJ1Y3RvcjxUPik6IFQ7XG4gICAgbG9hZChlbnRyaWVzOiBSZWNvcmQ8YW55LCBhbnk+KTogdm9pZDtcbiAgICBwcm94eTxUID0gdW5rbm93bj4oa2V5OiBFbnRyeUtleSk6IFQ7XG4gICAga2V5cygpOiBFbnRyeUtleVtdO1xufVxuZXhwb3J0IHt9O1xuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGluZm8obWVzc2FnZTogc3RyaW5nLCBtZXRhPzogYW55KTogdm9pZDtcbiAgICBkZWJ1ZyhtZXNzYWdlOiBzdHJpbmcsIG1ldGE/OiBhbnkpOiB2b2lkO1xuICAgIHdhcm4obWVzc2FnZTogc3RyaW5nLCBtZXRhPzogYW55KTogdm9pZDtcbiAgICBlcnJvcihtZXNzYWdlOiBzdHJpbmcsIG1ldGE/OiBhbnkpOiB2b2lkO1xuICAgIGNoaWxkKG9wdGlvbnM6IGFueSk6IExvZ2dlclNlcnZpY2U7XG59XG4iLCJpbXBvcnQgTG9nZ2VyU2VydmljZSBmcm9tICcuL0xvZ2dlclNlcnZpY2UudHMnO1xuaW50ZXJmYWNlIEVtbWl0dGVySGFuZGxlciB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBldmVudDogc3RyaW5nO1xuICAgIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IGFueTtcbiAgICBvcmlnaW5hbExpc3RlbmVyPzogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk7XG59XG5pbnRlcmZhY2UgT25PcHRpb25zIHtcbiAgICBpZD86IHN0cmluZztcbiAgICB1bmlxdWU/OiBib29sZWFuO1xufVxuaW50ZXJmYWNlIE9uRGVib3VuY2VPcHRpb25zIGV4dGVuZHMgT25PcHRpb25zIHtcbiAgICBkZWJvdW5jZT86IG51bWJlcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRW1taXR0ZXJTZXJ2aWNlT3B0aW9ucyB7XG4gICAgZGVidWc/OiBib29sZWFuO1xuICAgIGxvZ2dlcj86IExvZ2dlclNlcnZpY2U7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbW1pdHRlclNlcnZpY2U8RXZlbnRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBoYW5kbGVycztcbiAgICBwcml2YXRlIGRlYnVnO1xuICAgIHByaXZhdGUgbG9nZ2VyO1xuICAgIGxvYWQob3B0aW9ucz86IEVtbWl0dGVyU2VydmljZU9wdGlvbnMpOiB2b2lkO1xuICAgIG9uPEsgZXh0ZW5kcyBrZXlvZiBFdmVudHM+KGV2ZW50OiBLLCBsaXN0ZW5lcjogKGFyZ3M6IEV2ZW50c1tLXSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcjtcbiAgICBvbihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKGFyZ3M6IGFueSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcjtcbiAgICBvbmNlPEsgZXh0ZW5kcyBrZXlvZiBFdmVudHM+KGV2ZW50OiBLLCBsaXN0ZW5lcjogKGFyZ3M6IEV2ZW50c1tLXSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcjtcbiAgICBvbmNlKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoYXJnczogYW55KSA9PiB2b2lkLCBvcHRpb25zPzogT25PcHRpb25zKTogRW1taXR0ZXJIYW5kbGVyO1xuICAgIG9uRGVib3VuY2U8SyBleHRlbmRzIGtleW9mIEV2ZW50cz4oZXZlbnQ6IEssIGxpc3RlbmVyOiAoYXJnczogRXZlbnRzW0tdKSA9PiB2b2lkLCBvcHRpb25zPzogT25EZWJvdW5jZU9wdGlvbnMpOiBFbW1pdHRlckhhbmRsZXI7XG4gICAgb25EZWJvdW5jZShldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKGFyZ3M6IGFueSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uRGVib3VuY2VPcHRpb25zKTogRW1taXR0ZXJIYW5kbGVyO1xuICAgIG9uQW55T2Y8SyBleHRlbmRzIGtleW9mIEV2ZW50cz4oZXZlbnRzOiBLW10sIGxpc3RlbmVyOiAoYXJnczogRXZlbnRzW0tdKSA9PiB2b2lkLCBvcHRpb25zPzogT25PcHRpb25zKTogRW1taXR0ZXJIYW5kbGVyW107XG4gICAgb25BbnlPZihldmVudHM6IHN0cmluZ1tdLCBsaXN0ZW5lcjogKGFyZ3M6IGFueSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcltdO1xuICAgIG9mZihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogRnVuY3Rpb24pOiB2b2lkO1xuICAgIGVtaXQ8SyBleHRlbmRzIGtleW9mIEV2ZW50cz4oZXZlbnQ6IEssIGFyZ3M6IEV2ZW50c1tLXSk6IHZvaWQ7XG4gICAgZW1pdChldmVudDogc3RyaW5nLCBhcmdzPzogYW55KTogdm9pZDtcbiAgICBlbWl0QW5kV2FpdDxLIGV4dGVuZHMga2V5b2YgRXZlbnRzPihldmVudDogSywgYXJnczogRXZlbnRzW0tdKTogUHJvbWlzZTx2b2lkPjtcbiAgICBlbWl0QW5kV2FpdChldmVudDogc3RyaW5nLCBhcmdzPzogYW55KTogUHJvbWlzZTx2b2lkPjtcbiAgICBsaXN0KCk6IEVtbWl0dGVySGFuZGxlcltdO1xuICAgIGxpc3RCeUV2ZW50KGV2ZW50OiBzdHJpbmcpOiBFbW1pdHRlckhhbmRsZXJbXTtcbiAgICByZW1vdmUocGF5bG9hZDogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkO1xuICAgIGNsZWFyKCk6IHZvaWQ7XG4gICAgaGFzSGFuZGxlcnMoKTogYm9vbGVhbjtcbn1cbmV4cG9ydCB7fTtcbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIExpZmVjeWNsZUhvb2sge1xuICAgIGhvb2tfaWQ6IHN0cmluZztcbiAgICBob29rX2FsaWFzZXM/OiBzdHJpbmdbXTtcbiAgICBvcmRlcj86IG51bWJlcjtcbiAgICBzdWJob29rcz86IExpZmVjeWNsZUhvb2tbXTtcbiAgICByZWdpc3RlcigpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGxvYWQoKTogUHJvbWlzZTx2b2lkPjtcbiAgICBib290KCk6IFByb21pc2U8dm9pZD47XG4gICAgc2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPjtcbiAgICAvKiogQGRlcHJlY2F0ZWQgVXNlIHJlZ2lzdGVyICovXG4gICAgb25SZWdpc3RlcigpOiBQcm9taXNlPHZvaWQ+O1xuICAgIC8qKiBAZGVwcmVjYXRlZCBVc2UgbG9hZCAqL1xuICAgIG9uTG9hZCgpOiBQcm9taXNlPHZvaWQ+O1xuICAgIC8qKiBAZGVwcmVjYXRlZCBVc2UgYm9vdCAqL1xuICAgIG9uQm9vdCgpOiBQcm9taXNlPHZvaWQ+O1xuICAgIC8qKiBAZGVwcmVjYXRlZCBVc2Ugc2h1dGRvd24gKi9cbiAgICBvblNodXRkb3duKCk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgdHlwZSB7IFVuaW9uVG9JbnRlcnNlY3Rpb24gfSBmcm9tICcuL3R5cGluZy50cyc7XG5leHBvcnQgdHlwZSBBbnlDbGFzcyA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IGFueTtcbmV4cG9ydCB0eXBlIENvbnN0cnVjdG9yPFQgPSB7fT4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xuZXhwb3J0IHR5cGUgTWl4aW48VD4gPSAoYmFzZTogQ29uc3RydWN0b3IpID0+IENvbnN0cnVjdG9yPFQ+O1xuLyoqXG4gKiBDb21wb3NlcyBtdWx0aXBsZSBtaXhpbnMgaW50byBhIHNpbmdsZSBjbGFzcyB0aGF0IGNhbiBiZSBleHRlbmRlZC5cbiAqIEFsbG93cyBmb3IgbXVsdGlwbGUgaW5oZXJpdGFuY2UtbGlrZSBiZWhhdmlvciBieSBhcHBseWluZyBtaXhpbnMgc2VxdWVudGlhbGx5LlxuICpcbiAqIEBwYXJhbSBtaXhpbnMgLSBBcnJheSBvZiBtaXhpbiBmdW5jdGlvbnMgdG8gY29tcG9zZVxuICogQHJldHVybnMgQSBjbGFzcyBjb25zdHJ1Y3RvciB0aGF0IGluY2x1ZGVzIGFsbCBtaXhpbiBmdW5jdGlvbmFsaXR5XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNsYXNzIFVzZXIgZXh0ZW5kcyBjb21wb3NlKFRpbWVzdGFtcCwgU29mdERlbGV0ZSkge1xuICogICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XG4gKiAgICAgc3VwZXIoKVxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY29tcG9zZTxNIGV4dGVuZHMgQXJyYXk8KGJhc2U6IENvbnN0cnVjdG9yPGFueT4pID0+IENvbnN0cnVjdG9yPGFueT4+PiguLi5taXhpbnM6IE0pOiBVbmlvblRvSW50ZXJzZWN0aW9uPFJldHVyblR5cGU8TVtudW1iZXJdPj47XG4vKipcbiAqIEFsdGVybmF0aXZlIGNvbXBvc2UgZnVuY3Rpb24gdGhhdCBzdGFydHMgd2l0aCBhIGJhc2UgY2xhc3NcbiAqXG4gKiBAcGFyYW0gYmFzZUNsYXNzIC0gVGhlIGJhc2UgY2xhc3MgdG8gc3RhcnQgd2l0aFxuICogQHBhcmFtIG1peGlucyAtIEFycmF5IG9mIG1peGluIGZ1bmN0aW9ucyB0byBhcHBseVxuICogQHJldHVybnMgQSBjbGFzcyBjb25zdHJ1Y3RvciB0aGF0IGV4dGVuZHMgdGhlIGJhc2UgY2xhc3Mgd2l0aCBhbGwgbWl4aW4gZnVuY3Rpb25hbGl0eVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjbGFzcyBVc2VyIGV4dGVuZHMgY29tcG9zZVdpdGgoQmFzZUVudGl0eSwgVGltZXN0YW1wLCBTb2Z0RGVsZXRlKSB7XG4gKiAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcbiAqICAgICBzdXBlcigpXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjb21wb3NlV2l0aDxUQmFzZSBleHRlbmRzIENvbnN0cnVjdG9yLCBNIGV4dGVuZHMgQXJyYXk8KGJhc2U6IENvbnN0cnVjdG9yKSA9PiBDb25zdHJ1Y3Rvcjxhbnk+Pj4oYmFzZUNsYXNzOiBUQmFzZSwgLi4ubWl4aW5zOiBNKTogVEJhc2UgJiBVbmlvblRvSW50ZXJzZWN0aW9uPFJldHVyblR5cGU8TVtudW1iZXJdPj47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBtaXhpbjxUQmFzZSBleHRlbmRzIENvbnN0cnVjdG9yPihTb3VyY2U6IFRCYXNlKTogPFRUYXJnZXQgZXh0ZW5kcyBDb25zdHJ1Y3Rvcj4oVGFyZ2V0OiBUVGFyZ2V0KSA9PiBUVGFyZ2V0ICYgVEJhc2U7XG4iLCJpbXBvcnQgTG9nZ2VyU2VydmljZSBmcm9tICcuL0xvZ2dlclNlcnZpY2UudHMnO1xuaW1wb3J0IHR5cGUgTGlmZWN5Y2xlSG9vayBmcm9tICcjc2hhcmVkL2VudGl0aWVzL0xpZmVjeWNsZUhvb2sudHMnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RvciB9IGZyb20gJyNzaGFyZWQvdXRpbHMvY29tcG9zZS50cyc7XG50eXBlIExpZmVjeWNsZU1ldGhvZCA9ICdyZWdpc3RlcicgfCAnbG9hZCcgfCAnYm9vdCcgfCAnc2h1dGRvd24nO1xuaW50ZXJmYWNlIExpc3RPcHRpb25zIHtcbiAgICBpbmNsdWRlPzogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgZXhjbHVkZT86IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuZXhwb3J0IGludGVyZmFjZSBMaWZlY3ljbGVTZXJ2aWNlT3B0aW9ucyB7XG4gICAgZGVidWc/OiBib29sZWFuO1xuICAgIGhvb2tzPzogTWFwPHN0cmluZywgTGlmZWN5Y2xlSG9vaz47XG4gICAgbG9nZ2VyPzogTG9nZ2VyU2VydmljZTtcbiAgICBvbkVycm9yPzogKGVycm9yOiBFcnJvciwgY29udGV4dDoge1xuICAgICAgICBob29rSWQ6IHN0cmluZztcbiAgICAgICAgbWV0aG9kOiBMaWZlY3ljbGVNZXRob2Q7XG4gICAgfSkgPT4gdm9pZDtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpZmVjeWNsZVNlcnZpY2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBob29rczogTWFwPHN0cmluZywgTGlmZWN5Y2xlSG9vaz47XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBMaWZlY3ljbGVTZXJ2aWNlT3B0aW9ucyk7XG4gICAgb25FcnJvcihlcnJvcjogRXJyb3IsIGNvbnRleHQ6IHtcbiAgICAgICAgaG9va0lkOiBzdHJpbmc7XG4gICAgICAgIG1ldGhvZDogTGlmZWN5Y2xlTWV0aG9kO1xuICAgIH0pOiB2b2lkO1xuICAgIG1hcEFsaWFzZXMoYXJnczogc3RyaW5nW10pOiBzdHJpbmdbXTtcbiAgICBsaXN0KG9wdGlvbnM/OiBMaXN0T3B0aW9ucyk6IExpZmVjeWNsZUhvb2tbXTtcbiAgICBhZGQoLi4ucGF5bG9hZDogKExpZmVjeWNsZUhvb2sgfCBDb25zdHJ1Y3RvcjxMaWZlY3ljbGVIb29rPilbXSk6IHZvaWQ7XG4gICAgZW1pdE1ldGhvZChtZXRob2Q6IExpZmVjeWNsZU1ldGhvZCwgb3B0aW9ucz86IExpc3RPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiAgICBlbWl0KHBheWxvYWQ6IExpZmVjeWNsZU1ldGhvZCB8IExpZmVjeWNsZU1ldGhvZFtdLCBvcHRpb25zPzogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHJlZ2lzdGVyKG9wdGlvbnM/OiBMaXN0T3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gICAgbG9hZChvcHRpb25zPzogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGJvb3Qob3B0aW9ucz86IExpc3RPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiAgICBzaHV0ZG93bihvcHRpb25zPzogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGNsZWFyKCk6IHZvaWQ7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgKiBhcyB2IGZyb20gJ3ZhbGlib3QnO1xuZXhwb3J0IHR5cGUgUGVybWlzc2lvbkFzc2lnbm1lbnQgPSB2LkluZmVyT3V0cHV0PHR5cGVvZiBwZXJtaXNzaW9uQXNzaWdubWVudFNjaGVtYT47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBwZXJtaXNzaW9uQXNzaWdubWVudFNjaGVtYTogdi5PYmplY3RTY2hlbWE8e1xuICAgIHJlYWRvbmx5IGlkOiB2Lk51bWJlclNjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IHBlcm1pc3Npb25faWQ6IHYuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgYXNzaWduYWJsZV90eXBlOiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IGFzc2lnbmFibGVfaWQ6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgY3JlYXRlZF9hdDogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSB1cGRhdGVkX2F0OiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xufSwgdW5kZWZpbmVkPjtcbiIsImltcG9ydCAqIGFzIHYgZnJvbSAndmFsaWJvdCc7XG5leHBvcnQgdHlwZSBQZXJtaXNzaW9uID0gdi5JbmZlck91dHB1dDx0eXBlb2YgcGVybWlzc2lvblNjaGVtYT47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBwZXJtaXNzaW9uU2NoZW1hOiB2Lk9iamVjdFNjaGVtYTx7XG4gICAgcmVhZG9ubHkgaWQ6IHYuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgbmFtZTogdi5OdWxsYWJsZVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiB2Lk51bGxhYmxlU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgYWN0aW9uOiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IHN1YmplY3Q6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgY29uZGl0aW9uczogdi5OdWxsYWJsZVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IGNyZWF0ZWRfYXQ6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgdXBkYXRlZF9hdDogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBleHBpcmVzX2F0OiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xufSwgdW5kZWZpbmVkPjtcbiIsImltcG9ydCAqIGFzIHYgZnJvbSAndmFsaWJvdCc7XG5leHBvcnQgdHlwZSBUb2tlbiA9IHYuSW5mZXJPdXRwdXQ8dHlwZW9mIHRva2VuU2NoZW1hPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHRva2VuU2NoZW1hOiB2Lk9iamVjdFNjaGVtYTx7XG4gICAgcmVhZG9ubHkgaWQ6IHYuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgbmFtZTogdi5OdWxsYWJsZVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IHR5cGU6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgdXNlcl9pZDogdi5OdW1iZXJTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSB0b2tlbjogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBjcmVhdGVkX2F0OiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IHVwZGF0ZWRfYXQ6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgZXhwaXJlc19hdDogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbn0sIHVuZGVmaW5lZD47XG4iLCJkZWNsYXJlIGNvbnN0IFBlcm1pc3Npb25FbnRpdHlfYmFzZToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIG1lcmdlKGRhdGE6IFBhcnRpYWw8LyplbGlkZWQqLyBhbnk+KTogLyplbGlkZWQqLyBhbnk7XG4gICAgfTtcbiAgICBmcm9tPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBkYXRhOiBQYXJ0aWFsPFQ+KTogVDtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3I7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZXJtaXNzaW9uRW50aXR5IGV4dGVuZHMgUGVybWlzc2lvbkVudGl0eV9iYXNlIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgICBvcmlnaW46IHN0cmluZztcbiAgICBzdWJqZWN0OiBzdHJpbmc7XG4gICAgYWN0aW9uOiBzdHJpbmc7XG4gICAgY29uZGl0aW9uczogc3RyaW5nIHwgbnVsbCB8IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgZ2V0IGVkaXRhYmxlKCk6IGJvb2xlYW47XG4gICAgZ2V0IHBhcnNlZENvbmRpdGlvbnMoKTogYW55O1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHsgZGVmaW5lQWJpbGl0eSB9IGZyb20gJ0BjYXNsL2FiaWxpdHknO1xuaW1wb3J0IFBlcm1pc3Npb24gZnJvbSAnLi9QZXJtaXNzaW9uRW50aXR5LnRzJztcbmltcG9ydCBMb2dnZXJTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvTG9nZ2VyU2VydmljZS50cyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBY2xFbnRpdHkge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBhYmlsaXR5OiBSZXR1cm5UeXBlPHR5cGVvZiBkZWZpbmVBYmlsaXR5PjtcbiAgICBwZXJtaXNzaW9uczogUGVybWlzc2lvbltdO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIGxvZ2dlcjogTG9nZ2VyU2VydmljZTtcbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogUGFydGlhbDxBY2xFbnRpdHk+KTtcbiAgICBjYW4oYWN0aW9uOiBzdHJpbmcsIHN1YmplY3Q6IGFueSwgb2JqZWN0PzogUmVjb3JkPHN0cmluZywgYW55Pik6IGJvb2xlYW47XG4gICAgY2Fubm90KGFjdGlvbjogc3RyaW5nLCBzdWJqZWN0OiBhbnksIG9iamVjdD86IFJlY29yZDxzdHJpbmcsIGFueT4pOiBib29sZWFuO1xuICAgIHN1YmplY3Qoc3ViamVjdDogc3RyaW5nLCBvYmplY3Q6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ICYgaW1wb3J0KFwiQGNhc2wvYWJpbGl0eVwiKS5Gb3JjZWRTdWJqZWN0PHN0cmluZz47XG59XG4iLCJleHBvcnQgaW50ZXJmYWNlIENvb2tpZU1hcEVudGl0eU9wdGlvbnMge1xuICAgIGNvb2tpZXM/OiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHByZWZpeD86IHN0cmluZztcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvb2tpZU1hcEVudGl0eSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGNvb2tpZXM6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gICAgcHJlZml4OiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IoZGF0YT86IENvb2tpZU1hcEVudGl0eU9wdGlvbnMpO1xuICAgIGxvYWQoY29va2llczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IE1hcDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkO1xuICAgIGdldChuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IG51bGwpOiBzdHJpbmcgfCBudWxsO1xuICAgIHNldChuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiB2b2lkO1xuICAgIHRvUmVjb3JkKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBEcml2ZUVudHJ5IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIHR5cGU6ICdmaWxlJyB8ICdkaXJlY3RvcnknO1xuICAgIG1ldGFzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IERyaXZlRW50cnkpO1xufVxuIiwiZXhwb3J0IGludGVyZmFjZSBNb2R1bGVNYW5pZmVzdEJ1aWxkSW1wb3J0IHtcbiAgICBmcm9tOiBzdHJpbmc7XG4gICAgdG8/OiBzdHJpbmc7XG4gICAgdHlwZTogJ2dsb2JhbF9pbXBvcnQnO1xufVxuZXhwb3J0IGludGVyZmFjZSBNb2R1bGVNYW5pZmVzdEJ1aWxkIHtcbiAgICBpbXBvcnRzPzogTW9kdWxlTWFuaWZlc3RCdWlsZEltcG9ydFtdO1xufVxuZGVjbGFyZSBjb25zdCBNb2R1bGVNYW5pZmVzdF9iYXNlOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbWVyZ2UoZGF0YTogUGFydGlhbDwvKmVsaWRlZCovIGFueT4pOiAvKmVsaWRlZCovIGFueTtcbiAgICB9O1xuICAgIGZyb208VD4odGhpczogbmV3ICgpID0+IFQsIGRhdGE6IFBhcnRpYWw8VD4pOiBUO1xufSAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3RvcjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vZHVsZU1hbmlmZXN0IGV4dGVuZHMgTW9kdWxlTWFuaWZlc3RfYmFzZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgYXV0aG9yPzogc3RyaW5nO1xuICAgIGRlcGVuZGVuY2llcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgYnVpbGQ/OiBNb2R1bGVNYW5pZmVzdEJ1aWxkO1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIE1vZHVsZU1hbmlmZXN0IGZyb20gJy4vTW9kdWxlTWFuaWZlc3RFbnRpdHkudHMnO1xuaW1wb3J0IExpZmVjeWNsZUhvb2sgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9MaWZlY3ljbGVIb29rLnRzJztcbmludGVyZmFjZSBNb2R1bGVVcGdyYWRlSW5mbyB7XG4gICAgc291cmNlOiAnZ2l0JyB8ICd6aXAnO1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn1cbmRlY2xhcmUgY29uc3QgTW9kdWxlX2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBtZXJnZShkYXRhOiBQYXJ0aWFsPC8qZWxpZGVkKi8gYW55Pik6IC8qZWxpZGVkKi8gYW55O1xuICAgIH07XG4gICAgZnJvbTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZGF0YTogUGFydGlhbDxUPik6IFQ7XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yPHt9PiAmIHR5cGVvZiBMaWZlY3ljbGVIb29rO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9kdWxlIGV4dGVuZHMgTW9kdWxlX2Jhc2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgZGVwZW5kZW5jaWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGJ1aWxkOiBNb2R1bGVNYW5pZmVzdFsnYnVpbGQnXTtcbiAgICBkaXJlY3Rvcnk6IHN0cmluZztcbiAgICB1cGdyYWRlX2luZm8/OiBNb2R1bGVVcGdyYWRlSW5mbztcbiAgICBzZXREYXRhKGRhdGE6IFBhcnRpYWw8TW9kdWxlIHwgTW9kdWxlTWFuaWZlc3Q+KTogdm9pZDtcbn1cbmV4cG9ydCB7fTtcbiIsImRlY2xhcmUgY29uc3QgUGx1Z2luRW50aXR5X2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBtZXJnZShkYXRhOiBQYXJ0aWFsPC8qZWxpZGVkKi8gYW55Pik6IC8qZWxpZGVkKi8gYW55O1xuICAgIH07XG4gICAgZnJvbTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZGF0YTogUGFydGlhbDxUPik6IFQ7XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGx1Z2luRW50aXR5IGV4dGVuZHMgUGx1Z2luRW50aXR5X2Jhc2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICBlbmFibGVkOiBib29sZWFuO1xufVxuZXhwb3J0IHt9O1xuIiwiZGVjbGFyZSBjb25zdCBSb2xlX2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBtZXJnZShkYXRhOiBQYXJ0aWFsPC8qZWxpZGVkKi8gYW55Pik6IC8qZWxpZGVkKi8gYW55O1xuICAgIH07XG4gICAgZnJvbTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZGF0YTogUGFydGlhbDxUPik6IFQ7XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGNyZWF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gICAgICAgIHVwZGF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gICAgfTtcbn0gJiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgZGVsZXRlZF9hdDogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSb2xlIGV4dGVuZHMgUm9sZV9iYXNlIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIFBlcm1pc3Npb24gZnJvbSAnLi9QZXJtaXNzaW9uRW50aXR5LnRzJztcbmltcG9ydCB0eXBlIFJvbGUgZnJvbSAnLi9Sb2xlRW50aXR5LnRzJztcbmRlY2xhcmUgY29uc3QgVXNlckVudGl0eV9iYXNlOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbWVyZ2UoZGF0YTogUGFydGlhbDwvKmVsaWRlZCovIGFueT4pOiAvKmVsaWRlZCovIGFueTtcbiAgICB9O1xuICAgIGZyb208VD4odGhpczogbmV3ICgpID0+IFQsIGRhdGE6IFBhcnRpYWw8VD4pOiBUO1xufSAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3RvciAmIHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBjcmVhdGVkX2F0OiBEYXRlIHwgc3RyaW5nO1xuICAgICAgICB1cGRhdGVkX2F0OiBEYXRlIHwgc3RyaW5nO1xuICAgIH07XG59ICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGRlbGV0ZWRfYXQ6IERhdGUgfCBzdHJpbmcgfCBudWxsO1xuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXNlckVudGl0eSBleHRlbmRzIFVzZXJFbnRpdHlfYmFzZSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBlbWFpbDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB1c2VybmFtZTogc3RyaW5nO1xuICAgIHBhc3N3b3JkPzogc3RyaW5nO1xuICAgIHZlcmlmaWVkX2F0PzogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gICAgcGVybWlzc2lvbnM/OiBQZXJtaXNzaW9uW107XG4gICAgcm9sZXM/OiBSb2xlW107XG4gICAgZ2V0IGluaXRpYWxzKCk6IHN0cmluZztcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCBjcCBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcjc2hhcmVkL2luZGV4LnRzJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFydGlzYW5XcmFwcGVyU2VydmljZSB7XG4gICAgcHJvY2VzczogY3AuQ2hpbGRQcm9jZXNzIHwgbnVsbDtcbiAgICBhcHBCYXNlUGF0aDogc3RyaW5nO1xuICAgIGVudjogTWFwPHN0cmluZywgYW55PjtcbiAgICBhcmdzOiBzdHJpbmdbXTtcbiAgICBjb25maWdBcmd1bWVudHM6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gICAgY29uZmlnRmlsZXM6IHN0cmluZ1tdO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIGxvZ2dlcjogTG9nZ2VyU2VydmljZTtcbiAgICBzdGF0aWMgY3JlYXRlKCk6IEFydGlzYW5XcmFwcGVyU2VydmljZTtcbiAgICBzZXRCYXNlUGF0aChwYXRoOiBzdHJpbmcpOiB0aGlzO1xuICAgIHNldERlYnVnKGRlYnVnOiBib29sZWFuKTogdGhpcztcbiAgICBzZXRMb2dnZXIobG9nZ2VyOiBMb2dnZXJTZXJ2aWNlKTogdGhpcztcbiAgICBhZGRDb25maWdBcmd1bWVudChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHRoaXM7XG4gICAgYWRkQ29uZmlnRmlsZSguLi5maWxlUGF0aHM6IHN0cmluZ1tdKTogdGhpcztcbiAgICBhZGRFbnYoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICAgIGxvYWRDb25maWdBcmd1bWVudHMoKTogdm9pZDtcbiAgICBsb2FkQ29uZmlnRmlsZXMoKTogdm9pZDtcbiAgICBsb2FkRW52aXJvbm1lbnQoKTogdm9pZDtcbiAgICBsb2FkQXJndW1lbnRzKGFyZ3M/OiBzdHJpbmdbXSk6IHZvaWQ7XG4gICAga2lsbChjb2RlPzogbnVtYmVyKTogdm9pZDtcbiAgICBydW4oYXJncz86IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCBDb25maWdTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvQ29uZmlnU2VydmljZS50cyc7XG5pbXBvcnQgTG9nZ2VyU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0xvZ2dlclNlcnZpY2UudHMnO1xuaW50ZXJmYWNlIEluaXRpT3B0aW9ucyB7XG4gICAgZGlyZWN0b3J5Pzogc3RyaW5nO1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICBsb2dnZXI/OiBMb2dnZXJTZXJ2aWNlO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uZmlnRlNTZXJ2aWNlIGV4dGVuZHMgQ29uZmlnU2VydmljZSB7XG4gICAgZGlyZWN0b3J5OiBzdHJpbmc7XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBJbml0aU9wdGlvbnMpO1xuICAgIGxvYWQoKTogUHJvbWlzZTx2b2lkPjtcbiAgICBwcml2YXRlIHBhcnNlS2V5O1xuICAgIHNldChmdWxsS2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIHNvdXJjZT86IHN0cmluZyk6IHZvaWQ7XG4gICAgdW5zZXQoZnVsbEtleTogc3RyaW5nKTogdm9pZDtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCAqIGFzIHYgZnJvbSAndmFsaWJvdCc7XG5leHBvcnQgdHlwZSBFbnZTY2hlbWEgPSB2LkluZmVyT3V0cHV0PHR5cGVvZiBlbnZTY2hlbWE+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgZW52U2NoZW1hOiB2Lkxvb3NlT2JqZWN0U2NoZW1hPHtcbiAgICByZWFkb25seSBOT0RFX0VOVjogdi5PcHRpb25hbFNjaGVtYTx2LlVuaW9uU2NoZW1hPFt2LkxpdGVyYWxTY2hlbWE8XCJkZXZlbG9wbWVudFwiLCB1bmRlZmluZWQ+LCB2LkxpdGVyYWxTY2hlbWE8XCJwcm9kdWN0aW9uXCIsIHVuZGVmaW5lZD4sIHYuTGl0ZXJhbFNjaGVtYTxcInRlc3RcIiwgdW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIFwiZGV2ZWxvcG1lbnRcIj47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0JBU0VfUEFUSDogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBaRU5JVEhfQVBQX1VSTDogdi5PcHRpb25hbFNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMFwiPjtcbiAgICByZWFkb25seSBaRU5JVEhfUE9SVDogdi5PcHRpb25hbFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcsIG51bWJlcj5dPiwgXCIzMDAwXCI+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9IT1NUOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIFwiMC4wLjAuMFwiPjtcbiAgICByZWFkb25seSBaRU5JVEhfTE9HX0xFVkVMOiB2Lk9wdGlvbmFsU2NoZW1hPHYuUGlja2xpc3RTY2hlbWE8W1wiZXJyb3JcIiwgXCJ3YXJuXCIsIFwiaW5mb1wiLCBcImRlYnVnXCJdLCB1bmRlZmluZWQ+LCBcImluZm9cIj47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0xJRkVDWUNMRV9ERUJVRzogdi5PcHRpb25hbFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LkxpdGVyYWxTY2hlbWE8XCJ0cnVlXCIsIHVuZGVmaW5lZD4sIHYuTGl0ZXJhbFNjaGVtYTxcImZhbHNlXCIsIHVuZGVmaW5lZD4sIHYuTGl0ZXJhbFNjaGVtYTxcIjFcIiwgdW5kZWZpbmVkPiwgdi5MaXRlcmFsU2NoZW1hPFwiMFwiLCB1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248XCIwXCIgfCBcIjFcIiB8IFwidHJ1ZVwiIHwgXCJmYWxzZVwiLCBib29sZWFuPiwgdi5Cb29sZWFuU2NoZW1hPHVuZGVmaW5lZD5dPiwgXCJmYWxzZVwiPjtcbiAgICByZWFkb25seSBaRU5JVEhfQ0xJRU5UX0NPTkZJRzogdi5PcHRpb25hbFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGFueT4+XT4sIFwiXCI+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9DT05GSUc6IHYuT3B0aW9uYWxTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBhbnk+Pl0+LCBcIlwiPjtcbiAgICByZWFkb25seSBaRU5JVEhfQ09ORklHX0FSR1VNRU5UUzogdi5PcHRpb25hbFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGFueT4+XT4sIFwiXCI+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9DT05GSUdfRklMRVM6IHYuT3B0aW9uYWxTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nLCBzdHJpbmdbXT5dPiwgXCJcIj47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0NPTkZJR19ERUJVRzogdi5PcHRpb25hbFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LkxpdGVyYWxTY2hlbWE8XCJ0cnVlXCIsIHVuZGVmaW5lZD4sIHYuTGl0ZXJhbFNjaGVtYTxcImZhbHNlXCIsIHVuZGVmaW5lZD4sIHYuTGl0ZXJhbFNjaGVtYTxcIjFcIiwgdW5kZWZpbmVkPiwgdi5MaXRlcmFsU2NoZW1hPFwiMFwiLCB1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248XCIwXCIgfCBcIjFcIiB8IFwidHJ1ZVwiIHwgXCJmYWxzZVwiLCBib29sZWFuPiwgdi5Cb29sZWFuU2NoZW1hPHVuZGVmaW5lZD5dPiwgXCJmYWxzZVwiPjtcbiAgICByZWFkb25seSBaRU5JVEhfQ09ORklHX0RSSVZFUjogdi5PcHRpb25hbFNjaGVtYTx2LlBpY2tsaXN0U2NoZW1hPFtcImZzXCIsIFwiczNcIl0sIHVuZGVmaW5lZD4sIFwiZnNcIj47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0NPTkZJR19GU19QQVRIOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0NPTkZJR19TM19CVUNLRVQ6IHYuT3B0aW9uYWxTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBaRU5JVEhfQ09ORklHX1MzX1JFR0lPTjogdi5PcHRpb25hbFNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9DT05GSUdfUzNfQUNDRVNTX0tFWV9JRDogdi5PcHRpb25hbFNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9DT05GSUdfUzNfU0VDUkVUX0FDQ0VTU19LRVk6IHYuT3B0aW9uYWxTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBaRU5JVEhfQ09ORklHX1MzX1NFU1NJT05fVE9LRU46IHYuT3B0aW9uYWxTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBaRU5JVEhfQ09ORklHX1MzX0VORFBPSU5UOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0NPTkZJR19TM19QUkVGSVg6IHYuT3B0aW9uYWxTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgXCJcIj47XG4gICAgcmVhZG9ubHkgWkVOSVRIX01PRFVMRV9FWFRSQVM6IHYuT3B0aW9uYWxTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBhbnk+Pl0+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9QTFVHSU5TOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZywgUmVjb3JkPHN0cmluZywgYW55Pj5dPiwgdi5SZWNvcmRTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5PYmplY3RTY2hlbWE8e1xuICAgICAgICByZWFkb25seSBkaXJlY3Rvcnk6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgfSwgdW5kZWZpbmVkPiwgdW5kZWZpbmVkPl0+LCB1bmRlZmluZWQ+O1xufSwgdW5kZWZpbmVkPjtcbiIsImltcG9ydCBkb3RlbnYgZnJvbSAnZG90ZW52JztcbmltcG9ydCB0eXBlIHsgRW52U2NoZW1hIH0gZnJvbSAnI3NlcnZlci9zY2hlbWFzL2VudlNjaGVtYS50cyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbnZTZXJ2aWNlIHtcbiAgICBwcml2YXRlIGVudjtcbiAgICBwcml2YXRlIGZpbGVzO1xuICAgIHN0YXRpYyBjcmVhdGUoKTogRW52U2VydmljZTtcbiAgICBzdGF0aWMgZG90RW52Q29uZmlnKG9wdGlvbnM/OiBkb3RlbnYuRG90ZW52Q29uZmlnT3B0aW9ucyk6IGRvdGVudi5Eb3RlbnZDb25maWdPdXRwdXQ7XG4gICAgc2V0RmlsZXMoZmlsZXM6IHN0cmluZ1tdKTogdGhpcztcbiAgICBhZGRGaWxlKGZpbGU6IHN0cmluZyk6IHRoaXM7XG4gICAgbG9hZCgpOiB0aGlzO1xuICAgIGdldCBwcm9kdWN0aW9uKCk6IGJvb2xlYW47XG4gICAgZ2V0IGRldmVsb3BtZW50KCk6IGJvb2xlYW47XG4gICAgZ2V0IHRlc3QoKTogYm9vbGVhbjtcbiAgICBoYXM8SyBleHRlbmRzIGtleW9mIEVudlNjaGVtYT4oa2V5OiBLKTogYm9vbGVhbjtcbiAgICBnZXQ8SyBleHRlbmRzIGtleW9mIEVudlNjaGVtYT4oa2V5OiBLLCBkZWZhdWx0VmFsdWU/OiBhbnkpOiBFbnZTY2hlbWFbS107XG4gICAgc2V0PEsgZXh0ZW5kcyBrZXlvZiBFbnZTY2hlbWE+KGtleTogSywgdmFsdWU6IEVudlNjaGVtYVtLXSk6IHZvaWQ7XG59XG4iLCJpbXBvcnQgeyB0eXBlIExvZ2dlclNlcnZpY2UgfSBmcm9tICcjc2hhcmVkL2luZGV4LnRzJztcbmltcG9ydCBDb25maWdTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvQ29uZmlnU2VydmljZS50cyc7XG5pbXBvcnQgdHlwZSBFbnZTZXJ2aWNlIGZyb20gJy4vRW52U2VydmljZS50cyc7XG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ01hbmFnZXJPcHRpb25zIHtcbiAgICBlbnY6IEVudlNlcnZpY2U7XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIHNpbGVudD86IGJvb2xlYW47XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25maWdNYW5hZ2VyU2VydmljZSB7XG4gICAgZW52OiBFbnZTZXJ2aWNlO1xuICAgIGxvZ2dlcjogTG9nZ2VyU2VydmljZTtcbiAgICBzaWxlbnQ6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogQ29uZmlnTWFuYWdlck9wdGlvbnMpO1xuICAgIHN0YXRpYyBjcmVhdGUob3B0aW9uczogQ29uZmlnTWFuYWdlck9wdGlvbnMpOiBDb25maWdNYW5hZ2VyU2VydmljZTtcbiAgICBwcml2YXRlIGxvYWRTM0NvbmZpZztcbiAgICBwcml2YXRlIGxvYWRGU0NvbmZpZztcbiAgICBsb2FkQ29uZmlnRnJvbUVudihzZXJ2aWNlOiBDb25maWdTZXJ2aWNlKTogdm9pZDtcbiAgICBsb2FkQ29uZmlnRnJvbUZpbGUoc2VydmljZTogQ29uZmlnU2VydmljZSwgZmlsZTogc3RyaW5nKTogdm9pZDtcbiAgICBsb2FkQ29uZmlnRnJvbUZpbGVzKHNlcnZpY2U6IENvbmZpZ1NlcnZpY2UsIGZpbGVzOiBzdHJpbmdbXSk6IHZvaWQ7XG4gICAgbG9hZCgpOiBQcm9taXNlPENvbmZpZ1NlcnZpY2U+O1xufVxuIiwiaW1wb3J0IG1zIGZyb20gJ21zJztcbmltcG9ydCB0eXBlIERyaXZlRW50cnkgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9Ecml2ZUVudHJ5RW50aXR5LnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgVXJsT3B0aW9ucyB7XG4gICAgZXhwaXJlcz86IG1zLlN0cmluZ1ZhbHVlO1xufVxuZXhwb3J0IGludGVyZmFjZSBVcGxvYWRVcmxPcHRpb25zIHtcbiAgICBleHBpcmVzPzogbXMuU3RyaW5nVmFsdWU7XG4gICAgbWltZV90eXBlcz86IHN0cmluZ1tdO1xuICAgIG1heF9zaXplPzogbnVtYmVyO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJpdmVCYXNlR2F0ZXdheSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IFBpY2s8RHJpdmVCYXNlR2F0ZXdheSwgJ2lkJyB8ICduYW1lJyB8ICdkZXNjcmlwdGlvbicgfCAnY29uZmlnJz4pO1xuICAgIGxpc3QoZm9sZGVyPzogc3RyaW5nKTogUHJvbWlzZTxEcml2ZUVudHJ5W10+O1xuICAgIGZpbmQoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8RHJpdmVFbnRyeT47XG4gICAgZXhpc3RzKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+O1xuICAgIHJlYWQoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8VWludDhBcnJheT47XG4gICAgcmVhZFN0cmVhbShmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxOb2RlSlMuUmVhZGFibGVTdHJlYW0+O1xuICAgIHdyaXRlKGZpbGVuYW1lOiBzdHJpbmcsIGRhdGE6IFVpbnQ4QXJyYXkpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHdyaXRlU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcsIHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtKTogUHJvbWlzZTx2b2lkPjtcbiAgICBkZWxldGUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG4gICAgdXJsKGZpbGVuYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBVcmxPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+O1xuICAgIHVwbG9hZFVybChmaWxlbmFtZTogc3RyaW5nLCBvcHRpb25zPzogVXBsb2FkVXJsT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPjtcbn1cbiIsImltcG9ydCB7IFMzQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcbmltcG9ydCB0eXBlIHsgSW5mZXJPdXRwdXQgfSBmcm9tICd2YWxpYm90JztcbmltcG9ydCBCYXNlRHJpdmUgZnJvbSAnI3NlcnZlci9nYXRld2F5cy9Ecml2ZUJhc2VHYXRld2F5LnRzJztcbmRlY2xhcmUgY29uc3Qgc2NoZW1hOiBpbXBvcnQoXCJ2YWxpYm90XCIpLk9iamVjdFNjaGVtYTx7XG4gICAgcmVhZG9ubHkgYnVja2V0OiBpbXBvcnQoXCJ2YWxpYm90XCIpLlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFtpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCBpbXBvcnQoXCJ2YWxpYm90XCIpLk1pbkxlbmd0aEFjdGlvbjxzdHJpbmcsIDEsIHVuZGVmaW5lZD5dPjtcbiAgICByZWFkb25seSByZWdpb246IGltcG9ydChcInZhbGlib3RcIikuT3B0aW9uYWxTY2hlbWE8aW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBhY2Nlc3NLZXlJZDogaW1wb3J0KFwidmFsaWJvdFwiKS5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbaW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgaW1wb3J0KFwidmFsaWJvdFwiKS5NaW5MZW5ndGhBY3Rpb248c3RyaW5nLCAxLCB1bmRlZmluZWQ+XT47XG4gICAgcmVhZG9ubHkgc2VjcmV0QWNjZXNzS2V5OiBpbXBvcnQoXCJ2YWxpYm90XCIpLlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFtpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCBpbXBvcnQoXCJ2YWxpYm90XCIpLk1pbkxlbmd0aEFjdGlvbjxzdHJpbmcsIDEsIHVuZGVmaW5lZD5dPjtcbiAgICByZWFkb25seSBzZXNzaW9uVG9rZW46IGltcG9ydChcInZhbGlib3RcIikuT3B0aW9uYWxTY2hlbWE8aW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBlbmRwb2ludDogaW1wb3J0KFwidmFsaWJvdFwiKS5PcHRpb25hbFNjaGVtYTxpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IHByZWZpeDogaW1wb3J0KFwidmFsaWJvdFwiKS5PcHRpb25hbFNjaGVtYTxpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xufSwgdW5kZWZpbmVkPjtcbmV4cG9ydCB0eXBlIFMzRHJpdmVDb25maWcgPSBJbmZlck91dHB1dDx0eXBlb2Ygc2NoZW1hPjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyaXZlUzMgZXh0ZW5kcyBCYXNlRHJpdmUge1xuICAgIHByaXZhdGUgc2NoZW1hO1xuICAgIHByaXZhdGUgX2NsaWVudD87XG4gICAgY29uc3RydWN0b3IoZGF0YTogUGljazxCYXNlRHJpdmUsICdpZCcgfCAnbmFtZScgfCAnZGVzY3JpcHRpb24nIHwgJ2NvbmZpZyc+KTtcbiAgICBnZXQgdmFsaWQoKTogYm9vbGVhbjtcbiAgICBwcml2YXRlIGNoZWNrVmFsaWQ7XG4gICAgcHJvdGVjdGVkIGdldCBidWNrZXQoKTogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBnZXQgcHJlZml4KCk6IHN0cmluZztcbiAgICBwcml2YXRlIGdldEtleTtcbiAgICBwcm90ZWN0ZWQgZ2V0IGNsaWVudCgpOiBTM0NsaWVudDtcbiAgICBleGlzdHM6IEJhc2VEcml2ZVsnZXhpc3RzJ107XG4gICAgbGlzdDogQmFzZURyaXZlWydsaXN0J107XG4gICAgZmluZDogQmFzZURyaXZlWydmaW5kJ107XG4gICAgbWtkaXIoX2ZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHJlYWQ6IEJhc2VEcml2ZVsncmVhZCddO1xuICAgIHJlYWRTdHJlYW0oZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgICB3cml0ZTogQmFzZURyaXZlWyd3cml0ZSddO1xuICAgIHdyaXRlU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcsIHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtKTogUHJvbWlzZTx2b2lkPjtcbiAgICBkZWxldGU6IEJhc2VEcml2ZVsnZGVsZXRlJ107XG4gICAgdXJsOiBCYXNlRHJpdmVbJ3VybCddO1xuICAgIHVwbG9hZFVybDogQmFzZURyaXZlWyd1cGxvYWRVcmwnXTtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCBDb25maWdTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvQ29uZmlnU2VydmljZS50cyc7XG5pbXBvcnQgTG9nZ2VyU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0xvZ2dlclNlcnZpY2UudHMnO1xuaW1wb3J0IFMzRHJpdmUgZnJvbSAnI3NlcnZlci9nYXRld2F5cy9Ecml2ZVMzR2F0ZXdheS50cyc7XG5pbXBvcnQgdHlwZSB7IFMzRHJpdmVDb25maWcgfSBmcm9tICcjc2VydmVyL2dhdGV3YXlzL0RyaXZlUzNHYXRld2F5LnRzJztcbmludGVyZmFjZSBJbml0aU9wdGlvbnMgZXh0ZW5kcyBPbWl0PFMzRHJpdmVDb25maWcsICduYW1lJyB8ICdkZXNjcmlwdGlvbic+IHtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gICAgZGVidWc/OiBib29sZWFuO1xuICAgIGxvZ2dlcj86IExvZ2dlclNlcnZpY2U7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25maWdTM1NlcnZpY2UgZXh0ZW5kcyBDb25maWdTZXJ2aWNlIHtcbiAgICBwcmVmaXg6IHN0cmluZztcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgZGVidWc6IGJvb2xlYW47XG4gICAgZHJpdmU6IFMzRHJpdmU7XG4gICAgYnVja2V0OiBzdHJpbmc7XG4gICAgcmVnaW9uOiBzdHJpbmc7XG4gICAgZW5kcG9pbnQ/OiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogSW5pdGlPcHRpb25zKTtcbiAgICBwcml2YXRlIHBhcnNlS2V5O1xuICAgIGxvYWQoKTogUHJvbWlzZTx2b2lkPjtcbiAgICBzZXQoZnVsbEtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBzb3VyY2U/OiBzdHJpbmcpOiB2b2lkO1xuICAgIHVuc2V0KGZ1bGxLZXk6IHN0cmluZyk6IHZvaWQ7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgdHlwZSB7IEt5c2VseSB9IGZyb20gXCJreXNlbHlcIjtcbmV4cG9ydCBpbnRlcmZhY2UgTWlncmF0aW9uRW50aXlEYXRhIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgc291cmNlOiBzdHJpbmcgfCBudWxsO1xuICAgIGZpbGVuYW1lOiBzdHJpbmc7XG4gICAgZXhlY3V0ZWRBdDogRGF0ZSB8IG51bGw7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNaWdyYXRpb25FbnRpdHkge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBzb3VyY2U6IHN0cmluZyB8IG51bGw7XG4gICAgZmlsZW5hbWU6IHN0cmluZztcbiAgICBleGVjdXRlZEF0OiBEYXRlIHwgbnVsbDtcbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBNaWdyYXRpb25FbnRpeURhdGEpO1xuICAgIHVwKGRiOiBLeXNlbHk8YW55Pik6IFByb21pc2U8dm9pZD47XG4gICAgZG93bihkYjogS3lzZWx5PGFueT4pOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBSZXF1ZXN0LCBSZXNwb25zZSwgQ29va2llT3B0aW9ucyB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IEJhc2UgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9Db29raWVNYXBFbnRpdHkudHMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29va2llTWFwRW50aXR5IGV4dGVuZHMgQmFzZSB7XG4gICAgcmVxdWVzdDogUmVxdWVzdDtcbiAgICByZXNwb25zZTogUmVzcG9uc2U7XG4gICAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCwgcmVzcG9uc2U6IFJlc3BvbnNlKTtcbiAgICBzZXQobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBvcHRpb25zPzogQ29va2llT3B0aW9ucyk6IHZvaWQ7XG59XG4iLCJpbXBvcnQgQ29va2llTWFwRW50aXR5IGZyb20gXCIjc2VydmVyL2VudGl0aWVzL0Nvb2tpZU1hcEVudGl0eS50c1wiO1xuaW1wb3J0IENvbnRhaW5lclNlcnZpY2UgZnJvbSBcIiNzaGFyZWQvc2VydmljZXMvQ29udGFpbmVyU2VydmljZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0LCBSZXNwb25zZSB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHR5cGUgeyBSZXNvbHZhYmxlSGVhZCB9IGZyb20gJ0B1bmhlYWQvdnVlJztcbmltcG9ydCBDb25maWdTZXJ2aWNlIGZyb20gXCIjc2hhcmVkL3NlcnZpY2VzL0NvbmZpZ1NlcnZpY2UudHNcIjtcbmV4cG9ydCBpbnRlcmZhY2UgUGFnZVJlcXVlc3RDb250ZXh0RW50aXR5T3B0aW9ucyB7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgcmVxdWVzdDogUmVxdWVzdDtcbiAgICByZXNwb25zZTogUmVzcG9uc2U7XG4gICAgc3RhdGU/OiBNYXA8c3RyaW5nLCBhbnk+O1xuICAgIG5vZGVDb250YWluZXI/OiBDb250YWluZXJTZXJ2aWNlO1xuICAgIG5vZGVDb25maWc/OiBDb25maWdTZXJ2aWNlO1xuICAgIG5vZGVTdGF0ZT86IE1hcDxzdHJpbmcsIGFueT47XG4gICAgYnJvd3NlckNvbnRhaW5lcj86IENvbnRhaW5lclNlcnZpY2U7XG4gICAgYnJvd3NlckNvbmZpZz86IENvbmZpZ1NlcnZpY2U7XG4gICAgYnJvd3NlclN0YXRlPzogTWFwPHN0cmluZywgYW55Pjtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhZ2VSZXF1ZXN0Q29udGV4dEVudGl0eSB7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgcmVxdWVzdDogUmVxdWVzdDtcbiAgICByZXNwb25zZTogUmVzcG9uc2U7XG4gICAgY29va2llczogQ29va2llTWFwRW50aXR5O1xuICAgIGhlYWQ6IFJlc29sdmFibGVIZWFkW107XG4gICAgbm9kZUNvbnRhaW5lcjogQ29udGFpbmVyU2VydmljZTtcbiAgICBub2RlQ29uZmlnOiBDb25maWdTZXJ2aWNlO1xuICAgIG5vZGVTdGF0ZTogTWFwPHN0cmluZywgYW55PjtcbiAgICBicm93c2VyQ29udGFpbmVyOiBDb250YWluZXJTZXJ2aWNlO1xuICAgIGJyb3dzZXJDb25maWc6IENvbmZpZ1NlcnZpY2U7XG4gICAgYnJvd3NlclN0YXRlOiBNYXA8c3RyaW5nLCBhbnk+O1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IFBhZ2VSZXF1ZXN0Q29udGV4dEVudGl0eU9wdGlvbnMpO1xuICAgIHNldEJyb3dzZXJTdGF0ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG4gICAgc2V0Tm9kZVN0YXRlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcbiAgICBzZXRTdGF0ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG4gICAgc2V0QnJvd3NlckNvbnRhaW5lclZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcbiAgICBzZXROb2RlQ29udGFpbmVyVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xuICAgIHNldENvbnRhaW5lclZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcbiAgICBzZXRCcm93c2VyQ29uZmlnVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xuICAgIHNldE5vZGVDb25maWdWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG4gICAgc2V0Q29uZmlnVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xufVxuIiwiaW1wb3J0IHR5cGUgTWlncmF0aW9uRW50aXR5IGZyb20gXCIjc2VydmVyL2VudGl0aWVzL01pZ3JhdGlvbkVudGl0eS50c1wiO1xuaW1wb3J0IHR5cGUgUGFnZVJlcXVlc3RDb250ZXh0RW50aXR5IGZyb20gXCIjc2VydmVyL2VudGl0aWVzL1BhZ2VSZXF1ZXN0Q29udGV4dEVudGl0eS50c1wiO1xuaW1wb3J0IHR5cGUgeyBVc2VyRW50aXR5IH0gZnJvbSBcIiNzaGFyZWQvaW5kZXgudHNcIjtcbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDb250cmFjdCB7XG4gICAgJ21pZ3JhdG9yOmJlZm9yZS1taWdyYXRlJzoge1xuICAgICAgICBtaWdyYXRpb25zOiBNaWdyYXRpb25FbnRpdHlbXTtcbiAgICB9O1xuICAgICdtaWdyYXRvcjphZnRlci1taWdyYXRlJzoge1xuICAgICAgICBtaWdyYXRpb25zOiBNaWdyYXRpb25FbnRpdHlbXTtcbiAgICB9O1xuICAgICdtaWdyYXRvcjpiZWZvcmUtcm9sbGJhY2snOiB7XG4gICAgICAgIG1pZ3JhdGlvbnM6IE1pZ3JhdGlvbkVudGl0eVtdO1xuICAgIH07XG4gICAgJ21pZ3JhdG9yOmFmdGVyLXJvbGxiYWNrJzoge1xuICAgICAgICBtaWdyYXRpb25zOiBNaWdyYXRpb25FbnRpdHlbXTtcbiAgICB9O1xuICAgICd1c2VyOmJlZm9yZS1jcmVhdGUnOiB7XG4gICAgICAgIHVzZXI6IFVzZXJFbnRpdHk7XG4gICAgfTtcbiAgICAndXNlcjphZnRlci1jcmVhdGUnOiB7XG4gICAgICAgIHVzZXI6IFVzZXJFbnRpdHk7XG4gICAgfTtcbiAgICAndXNlcjpiZWZvcmUtdXBkYXRlJzoge1xuICAgICAgICB1c2VyOiBVc2VyRW50aXR5O1xuICAgIH07XG4gICAgJ3VzZXI6YWZ0ZXItdXBkYXRlJzoge1xuICAgICAgICB1c2VyOiBVc2VyRW50aXR5O1xuICAgIH07XG4gICAgJ3VzZXI6YmVmb3JlLWRlbGV0ZSc6IHtcbiAgICAgICAgdXNlcjogVXNlckVudGl0eTtcbiAgICB9O1xuICAgICd1c2VyOmFmdGVyLWRlbGV0ZSc6IHtcbiAgICAgICAgdXNlcjogVXNlckVudGl0eTtcbiAgICB9O1xuICAgICdwYWdlOnJlcXVlc3Q6c3RhcnQnOiBQYWdlUmVxdWVzdENvbnRleHRFbnRpdHk7XG4gICAgJ3BhZ2U6cmVxdWVzdDpiZWZvcmUtcmVuZGVyJzogUGFnZVJlcXVlc3RDb250ZXh0RW50aXR5O1xuICAgICdwYWdlOnJlcXVlc3Q6YWZ0ZXItcmVuZGVyJzogUGFnZVJlcXVlc3RDb250ZXh0RW50aXR5O1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCBCYXNlRW1taXR0ZXJTZXJ2aWNlIGZyb20gXCIuLi8uLi9zaGFyZWQvc2VydmljZXMvRW1taXR0ZXJTZXJ2aWNlXCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50Q29udHJhY3QgfSBmcm9tICcuLi9jb250cmFjdHMvRXZlbnRDb250cmFjdCc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbW1pdHRlclNlcnZpY2UgZXh0ZW5kcyBCYXNlRW1taXR0ZXJTZXJ2aWNlPEV2ZW50Q29udHJhY3Q+IHtcbn1cbiIsImltcG9ydCBMb2dnZXJTZXJ2aWNlIGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9Mb2dnZXJTZXJ2aWNlLnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgR2l0UmVwb0luZm8ge1xuICAgIGRpcmVjdG9yeTogc3RyaW5nO1xuICAgIGhlYWQ6IHN0cmluZyB8IG51bGw7XG4gICAgc2hvcnRIYXNoOiBzdHJpbmc7XG4gICAgaXNEZXRhY2hlZEhlYWQ6IGJvb2xlYW47XG4gICAgcmVtb3Rlczogc3RyaW5nW107XG59XG5leHBvcnQgaW50ZXJmYWNlIEdpdEdhdGV3YXlPcHRpb25zIHtcbiAgICBjd2Q6IHN0cmluZztcbiAgICBzc2hLZXk/OiBzdHJpbmc7XG4gICAgc3NoS2V5RmlsZT86IHN0cmluZztcbiAgICBzc2hLZXlUbXBGaWxlTmFtZT86IHN0cmluZztcbiAgICBsb2dnZXI/OiBMb2dnZXJTZXJ2aWNlO1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIEdpdEdhdGV3YXkge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY3dkO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3NoS2V5PztcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNzaEtleUZpbGU/O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3NoS2V5VG1wRmlsZU5hbWU/O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVidWc7XG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogR2l0R2F0ZXdheU9wdGlvbnMpO1xuICAgIHByaXZhdGUgYnVpbGRFbnY7XG4gICAgcnVuKGFyZ3M6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPjtcbiAgICB0cnlSdW4oYXJnczogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPjtcbiAgICBjaGVja291dChyZWY6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG4gICAgZmV0Y2goKTogUHJvbWlzZTx2b2lkPjtcbiAgICBwdWxsKCk6IFByb21pc2U8dm9pZD47XG4gICAgZ2V0SW5mbygpOiBQcm9taXNlPEdpdFJlcG9JbmZvPjtcbn1cbiIsImltcG9ydCB0eXBlIHsgR2l0R2F0ZXdheSB9IGZyb20gJy4uL2dhdGV3YXlzL0dpdEdhdGV3YXkudHMnO1xuZXhwb3J0IGludGVyZmFjZSBHaXRCcmFuY2gge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICByZW1vdGU6IHN0cmluZyB8IG51bGw7XG4gICAgaXNDdXJyZW50OiBib29sZWFuO1xuICAgIGlzUmVtb3RlOiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBHaXRCcmFuY2hGZXRjaE9wdGlvbnMge1xuICAgIHJlbW90ZTogc3RyaW5nO1xuICAgIGJyYW5jaDogc3RyaW5nO1xuICAgIGxvY2FsTmFtZT86IHN0cmluZztcbn1cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIEdpdEJyYW5jaFJlcG9zaXRvcnkge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZ2F0ZXdheTtcbiAgICBjb25zdHJ1Y3RvcihnYXRld2F5OiBHaXRHYXRld2F5KTtcbiAgICBsaXN0KCk6IFByb21pc2U8R2l0QnJhbmNoW10+O1xuICAgIGZldGNoKG9wdGlvbnM6IEdpdEJyYW5jaEZldGNoT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgdHlwZSB7IEdpdEdhdGV3YXkgfSBmcm9tICcuLi9nYXRld2F5cy9HaXRHYXRld2F5LnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgR2l0Q29tbWl0UmVmIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgc2hvcnROYW1lOiBzdHJpbmc7XG4gICAgdHlwZTogJ2JyYW5jaCcgfCAndGFnJyB8ICdyZW1vdGUnIHwgJ290aGVyJztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgR2l0Q29tbWl0IHtcbiAgICBoYXNoOiBzdHJpbmc7XG4gICAgc2hvcnRIYXNoOiBzdHJpbmc7XG4gICAgYXV0aG9yTmFtZTogc3RyaW5nO1xuICAgIGF1dGhvckVtYWlsOiBzdHJpbmc7XG4gICAgZGF0ZTogc3RyaW5nO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICByZWZzOiBHaXRDb21taXRSZWZbXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgR2l0Q29tbWl0TGlzdE9wdGlvbnMge1xuICAgIGJyYW5jaD86IHN0cmluZztcbiAgICBwYWdlPzogbnVtYmVyO1xuICAgIHBlclBhZ2U/OiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRlZENvbW1pdHMge1xuICAgIGl0ZW1zOiBHaXRDb21taXRbXTtcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIHBhZ2U6IG51bWJlcjtcbiAgICBwZXJQYWdlOiBudW1iZXI7XG4gICAgdG90YWxQYWdlczogbnVtYmVyO1xufVxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgR2l0Q29tbWl0UmVwb3NpdG9yeSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBnYXRld2F5O1xuICAgIGNvbnN0cnVjdG9yKGdhdGV3YXk6IEdpdEdhdGV3YXkpO1xuICAgIGxpc3Qob3B0aW9ucz86IEdpdENvbW1pdExpc3RPcHRpb25zKTogUHJvbWlzZTxQYWdpbmF0ZWRDb21taXRzPjtcbn1cbiIsImltcG9ydCBCYXNlTGlmZWN5Y2xlU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0xpZmVjeWNsZVNlcnZpY2UudHMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlmZWN5Y2xlU2VydmljZSBleHRlbmRzIEJhc2VMaWZlY3ljbGVTZXJ2aWNlIHtcbiAgICBhZGREaXJlY3RvcnkoZGlybmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCBFbW1pdHRlclNlcnZpY2UgZnJvbSAnI3NoYXJlZC9zZXJ2aWNlcy9FbW1pdHRlclNlcnZpY2UudHMnO1xuaW1wb3J0IExvZ2dlclNlcnZpY2UgZnJvbSAnI3NoYXJlZC9zZXJ2aWNlcy9Mb2dnZXJTZXJ2aWNlLnRzJztcbmltcG9ydCB0eXBlIHsgS3lzZWx5IH0gZnJvbSAna3lzZWx5JztcbmltcG9ydCBNaWdyYXRpb25FbnRpdHkgZnJvbSAnI3NlcnZlci9lbnRpdGllcy9NaWdyYXRpb25FbnRpdHkudHMnO1xuZXhwb3J0IGludGVyZmFjZSBNaWdyYXRpb25Tb3VyY2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZGlyZWN0b3J5OiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIE1pZ3JhdGlvbiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHNvdXJjZTogc3RyaW5nIHwgbnVsbDtcbiAgICBmaWxlbmFtZTogc3RyaW5nO1xuICAgIGV4ZWN1dGVkQXQ6IERhdGUgfCBudWxsO1xufVxuZXhwb3J0IGludGVyZmFjZSBMaXN0RmlsdGVycyB7XG4gICAgc291cmNlPzogc3RyaW5nO1xufVxuaW50ZXJmYWNlIE1pZ3JhdGlvblJlc3VsdCB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGZpbGVuYW1lOiBzdHJpbmc7XG4gICAgc291cmNlOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlc3VsdDogJ3N1Y2Nlc3MnIHwgJ2ZhaWxlZCc7XG4gICAgZXJyb3I/OiBhbnk7XG59XG5leHBvcnQgaW50ZXJmYWNlIE1pZ3JhdG9yU2VydmljZU9wdGlvbnMge1xuICAgIHNvdXJjZXM6IE1pZ3JhdGlvblNvdXJjZVtdO1xuICAgIGRiOiBLeXNlbHk8YW55PjtcbiAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgZW1taXR0ZXI/OiBFbW1pdHRlclNlcnZpY2U7XG4gICAgbG9nZ2VyPzogTG9nZ2VyU2VydmljZTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1pZ3JhdG9yU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIGVtbWl0dGVyOiBFbW1pdHRlclNlcnZpY2U7XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIGRiOiBLeXNlbHk8YW55PjtcbiAgICBzb3VyY2VzOiBNaWdyYXRpb25Tb3VyY2VbXTtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBNaWdyYXRvclNlcnZpY2VPcHRpb25zKTtcbiAgICBhZGRTb3VyY2Uoc291cmNlOiBNaWdyYXRpb25Tb3VyY2UpOiB2b2lkO1xuICAgIHByaXZhdGUgZW5zdXJlTWlncmF0aW9uc1RhYmxlO1xuICAgIGxpc3RTb3VyY2Uoc291cmNlOiBNaWdyYXRpb25Tb3VyY2UpOiBQcm9taXNlPE1pZ3JhdGlvbkVudGl0eVtdPjtcbiAgICBsaXN0KGZpbHRlcnM/OiBMaXN0RmlsdGVycyk6IFByb21pc2U8TWlncmF0aW9uRW50aXR5W10+O1xuICAgIHByaXZhdGUgbWlncmF0ZVVwO1xuICAgIHByaXZhdGUgbWlncmF0ZURvd247XG4gICAgbWlncmF0ZUZpbGUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8TWlncmF0aW9uUmVzdWx0PjtcbiAgICByb2xsYmFja0ZpbGUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8TWlncmF0aW9uUmVzdWx0PjtcbiAgICBtaWdyYXRlKGZpbHRlcnM/OiBMaXN0RmlsdGVycyAmIHtcbiAgICAgICAgc3RlcHM/OiBudW1iZXI7XG4gICAgfSk6IFByb21pc2U8TWlncmF0aW9uUmVzdWx0W10+O1xuICAgIHJvbGxiYWNrKGZpbHRlcnM/OiBMaXN0RmlsdGVycyAmIHtcbiAgICAgICAgc3RlcHM/OiBudW1iZXI7XG4gICAgfSk6IFByb21pc2U8TWlncmF0aW9uUmVzdWx0W10+O1xuICAgIHVwKHN0ZXBzPzogbnVtYmVyLCBmaWx0ZXJzPzogTGlzdEZpbHRlcnMpOiBQcm9taXNlPE1pZ3JhdGlvblJlc3VsdFtdPjtcbiAgICBkb3duKHN0ZXBzPzogbnVtYmVyLCBmaWx0ZXJzPzogTGlzdEZpbHRlcnMpOiBQcm9taXNlPE1pZ3JhdGlvblJlc3VsdFtdPjtcbiAgICBsYXRlc3QoZmlsdGVycz86IExpc3RGaWx0ZXJzKTogUHJvbWlzZTxNaWdyYXRpb25SZXN1bHRbXT47XG4gICAgbGF0ZXN0T3JGYWlsKGZpbHRlcnM/OiBMaXN0RmlsdGVycyk6IFByb21pc2U8TWlncmF0aW9uUmVzdWx0W10+O1xuICAgIGZyZXNoKGZpbHRlcnM/OiBMaXN0RmlsdGVycyAmIHtcbiAgICAgICAgc3RlcHM/OiBudW1iZXI7XG4gICAgfSk6IFByb21pc2U8TWlncmF0aW9uUmVzdWx0W10+O1xufVxuZXhwb3J0IHt9O1xuIiwiZXhwb3J0IHR5cGUgSXBjTWVzc2FnZTxUID0gYW55PiA9IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGV2ZW50OiBzdHJpbmc7XG4gICAgZGF0YTogVDtcbn07XG50eXBlIElwY0xpc3RlbmVyPFQgPSBhbnk+ID0gKGRhdGE6IFQpID0+IHZvaWQ7XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBQbHVnaW5JcGNDbGllbnQge1xuICAgIHByaXZhdGUgbGlzdGVuZXJzO1xuICAgIGNvbnN0cnVjdG9yKCk7XG4gICAgb248VCA9IGFueT4oZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IElwY0xpc3RlbmVyPFQ+KTogdm9pZDtcbiAgICBvZmY8VCA9IGFueT4oZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IElwY0xpc3RlbmVyPFQ+KTogdm9pZDtcbiAgICBlbWl0PFQgPSBhbnk+KGV2ZW50OiBzdHJpbmcsIGRhdGE/OiBUKTogc3RyaW5nO1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3MgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xudHlwZSBJcGNMaXN0ZW5lcjxUID0gYW55PiA9IChkYXRhOiBUKSA9PiB2b2lkO1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgUGx1Z2luSXBjSG9zdCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjaGlsZDtcbiAgICBwcml2YXRlIGxpc3RlbmVycztcbiAgICBjb25zdHJ1Y3RvcihjaGlsZDogQ2hpbGRQcm9jZXNzKTtcbiAgICBvbjxUID0gYW55PihldmVudDogc3RyaW5nLCBjYWxsYmFjazogSXBjTGlzdGVuZXI8VD4pOiB2b2lkO1xuICAgIG9mZjxUID0gYW55PihldmVudDogc3RyaW5nLCBjYWxsYmFjazogSXBjTGlzdGVuZXI8VD4pOiB2b2lkO1xuICAgIGVtaXQ8VCA9IGFueT4oZXZlbnQ6IHN0cmluZywgZGF0YT86IFQpOiBzdHJpbmc7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgeyBQbHVnaW5JcGNDbGllbnQgfSBmcm9tICcuL1BsdWdpbklwY0NsaWVudC50cyc7XG5leHBvcnQgdHlwZSBIdHRwTWV0aG9kID0gJ0dFVCcgfCAnUE9TVCcgfCAnUFVUJyB8ICdQQVRDSCcgfCAnREVMRVRFJztcbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVEZWZpbml0aW9uIHtcbiAgICBtZXRob2Q6IEh0dHBNZXRob2Q7XG4gICAgcGF0aDogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZVJlcXVlc3Qge1xuICAgIHJlcXVlc3RJZDogc3RyaW5nO1xuICAgIG1ldGhvZDogSHR0cE1ldGhvZDtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgYm9keT86IGFueTtcbiAgICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBxdWVyeT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVSZXNwb25zZVBheWxvYWQge1xuICAgIHJlcXVlc3RJZDogc3RyaW5nO1xuICAgIHN0YXR1czogbnVtYmVyO1xuICAgIGJvZHk/OiBhbnk7XG4gICAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlUmVwbHkge1xuICAgIHN0YXR1cyhjb2RlOiBudW1iZXIpOiBSb3V0ZVJlcGx5O1xuICAgIHNlbmQoYm9keT86IGFueSk6IHZvaWQ7XG59XG5leHBvcnQgdHlwZSBSb3V0ZUhhbmRsZXIgPSAocmVxOiBSb3V0ZVJlcXVlc3QsIHJlcGx5OiBSb3V0ZVJlcGx5KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIFBsdWdpblJvdXRlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjbGllbnQ7XG4gICAgcHJpdmF0ZSByb3V0ZXM7XG4gICAgY29uc3RydWN0b3IoY2xpZW50OiBQbHVnaW5JcGNDbGllbnQpO1xuICAgIHByaXZhdGUgZGlzcGF0Y2g7XG4gICAgcHJpdmF0ZSByZWdpc3RlcjtcbiAgICBnZXQocGF0aDogc3RyaW5nLCBoYW5kbGVyOiBSb3V0ZUhhbmRsZXIpOiB2b2lkO1xuICAgIHBvc3QocGF0aDogc3RyaW5nLCBoYW5kbGVyOiBSb3V0ZUhhbmRsZXIpOiB2b2lkO1xuICAgIHB1dChwYXRoOiBzdHJpbmcsIGhhbmRsZXI6IFJvdXRlSGFuZGxlcik6IHZvaWQ7XG4gICAgcGF0Y2gocGF0aDogc3RyaW5nLCBoYW5kbGVyOiBSb3V0ZUhhbmRsZXIpOiB2b2lkO1xuICAgIGRlbGV0ZShwYXRoOiBzdHJpbmcsIGhhbmRsZXI6IFJvdXRlSGFuZGxlcik6IHZvaWQ7XG59XG4iLCJpbXBvcnQgdHlwZSB7IENvbnN0cnVjdG9yIH0gZnJvbSAnI3NoYXJlZC91dGlscy9jb21wb3NlLnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgTGlzdGVuZXIge1xuICAgIGV2ZW50OiBzdHJpbmc7XG4gICAgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZDtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGVtaXRIb29rKGNvbnN0cnVjdG9yOiBhbnksIGV2ZW50OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIG9uSG9vayhjb25zdHJ1Y3RvcjogYW55LCBldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIEhvb2tzU3RhdGljPFRCYXNlIGV4dGVuZHMgQ29uc3RydWN0b3I+KEJhc2U6IFRCYXNlKToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7fTtcbiAgICBsaXN0ZW5lcnM6IEFycmF5PCguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZD47XG4gICAgb24oZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHZvaWQ7XG4gICAgZW1pdChldmVudDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD47XG59ICYgVEJhc2U7XG5leHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgSG9va3NTdGF0aWMge1xuICAgIHZhciBlbWl0OiB0eXBlb2YgZW1pdEhvb2s7XG4gICAgdmFyIG9uOiB0eXBlb2Ygb25Ib29rO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSG9va3M8VEJhc2UgZXh0ZW5kcyBDb25zdHJ1Y3Rvcj4oQmFzZTogVEJhc2UpOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbGlzdGVuZXJzOiBMaXN0ZW5lcltdO1xuICAgICAgICBvbihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZDtcbiAgICAgICAgb2ZmKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB2b2lkO1xuICAgICAgICBlbWl0KGV2ZW50OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcbiAgICAgICAgZW1pdEFzeW5jKGV2ZW50OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPjtcbiAgICB9O1xufSAmIFRCYXNlO1xuIiwiaW1wb3J0IEJhc2VBY2wgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9BY2xFbnRpdHkudHMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWNsIGV4dGVuZHMgQmFzZUFjbCB7XG4gICAgYXV0aG9yaXplKGFjdGlvbjogc3RyaW5nLCBzdWJqZWN0OiBhbnksIG9iamVjdD86IFJlY29yZDxzdHJpbmcsIGFueT4pOiB2b2lkO1xufVxuIiwiaW1wb3J0IHR5cGUgQWNsIGZyb20gJyNzZXJ2ZXIvZW50aXRpZXMvQWNsRW50aXR5LnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufVxuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZSB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufVxuZXhwb3J0IGludGVyZmFjZSBIdHRwQ29udGV4dCB7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT47XG4gICAgYm9keTogYW55O1xuICAgIGNvb2tpZTogYW55O1xuICAgIHVwbG9hZDogYW55O1xuICAgIGFjbDogQWNsO1xuICAgIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gICAgcmVzcG9uc2U6IFJlc3BvbnNlO1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIHsgSHR0cENvbnRleHQgfSBmcm9tIFwiLi9IdHRwQ29udGV4dENvbnRyYWN0XCI7XG5leHBvcnQgaW50ZXJmYWNlIFJlZGlyZWN0IHtcbiAgICByZWRpcmVjdDogc3RyaW5nO1xufVxuZXhwb3J0IHR5cGUgSGFuZGxlUmVzdWx0ID0gUmVjb3JkPHN0cmluZywgYW55PiB8IFJlZGlyZWN0IHwgdm9pZDtcbmV4cG9ydCBpbnRlcmZhY2UgTWlkZGxld2FyZSB7XG4gICAgaGFuZGxlKGN0eDogYW55KTogSGFuZGxlUmVzdWx0IHwgUHJvbWlzZTxIYW5kbGVSZXN1bHQ+O1xufVxudHlwZSBFeHRyYWN0TWlkZGxld2FyZUNvbnRleHQ8TSBleHRlbmRzIE1pZGRsZXdhcmU+ID0gQXdhaXRlZDxSZXR1cm5UeXBlPE1bJ2hhbmRsZSddPj4gZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID8gQXdhaXRlZDxSZXR1cm5UeXBlPE1bJ2hhbmRsZSddPj4gOiB7fTtcbnR5cGUgUHJvY2Vzc01pZGRsZXdhcmVBcnJheTxUIGV4dGVuZHMgcmVhZG9ubHkgTWlkZGxld2FyZVtdPiA9IFQgZXh0ZW5kcyByZWFkb25seSBbaW5mZXIgRmlyc3QgZXh0ZW5kcyBNaWRkbGV3YXJlLCAuLi5pbmZlciBSZXN0IGV4dGVuZHMgcmVhZG9ubHkgTWlkZGxld2FyZVtdXSA/IEV4dHJhY3RNaWRkbGV3YXJlQ29udGV4dDxGaXJzdD4gJiBQcm9jZXNzTWlkZGxld2FyZUFycmF5PFJlc3Q+IDoge307XG5leHBvcnQgdHlwZSBNaWRkbGV3YXJlSGFuZGxlUmVzdWx0PFQgZXh0ZW5kcyByZWFkb25seSBNaWRkbGV3YXJlW10gPSByZWFkb25seSBNaWRkbGV3YXJlW10+ID0gUHJvY2Vzc01pZGRsZXdhcmVBcnJheTxUPjtcbmV4cG9ydCBpbnRlcmZhY2UgSGFuZGxlcjxUID0gUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIChjdHg6IEh0dHBDb250ZXh0ICYgVCk6IFByb21pc2U8YW55PiB8IGFueTtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIHsgSGFuZGxlciwgTWlkZGxld2FyZSB9IGZyb20gJyNzZXJ2ZXIvY29udHJhY3RzL1JvdXRlckNvbnRyYWN0LnRzJztcbnR5cGUgUm91dGVNZXRob2QgPSAnZ2V0JyB8ICdHRVQnIHwgJ3Bvc3QnIHwgJ1BPU1QnIHwgJ3B1dCcgfCAnUFVUJyB8ICdwYXRjaCcgfCAnUEFUQ0gnIHwgJ2RlbGV0ZScgfCAnREVMRVRFJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdXRlIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgbWV0aG9kOiBSb3V0ZU1ldGhvZDtcbiAgICBoYW5kbGVyOiBIYW5kbGVyPGFueT4gfCBudWxsO1xuICAgIG1pZGRsZXdhcmVzOiBNaWRkbGV3YXJlW107XG4gICAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsO1xuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBQYXJ0aWFsPFJvdXRlPik7XG4gICAgc3RhdGljIHBhcmFtcyhyb3V0ZVBhdGg6IHN0cmluZywgcmVxdWVzdFBhdGg6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgc3RhdGljIHF1ZXJ5KHJlcXVlc3RQYXRoOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHRvSlNPTigpOiB7XG4gICAgICAgIHBhdGg6IHN0cmluZztcbiAgICAgICAgbWV0aG9kOiBSb3V0ZU1ldGhvZDtcbiAgICAgICAgbWlkZGxld2FyZXM6IHN0cmluZ1tdO1xuICAgICAgICBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGw7XG4gICAgfTtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCBSb3V0ZSBmcm9tICcjc2VydmVyL2VudGl0aWVzL1JvdXRlRW50aXR5LnRzJztcbmltcG9ydCB0eXBlIHsgSGFuZGxlciwgTWlkZGxld2FyZSwgTWlkZGxld2FyZUhhbmRsZVJlc3VsdCB9IGZyb20gJyNzZXJ2ZXIvY29udHJhY3RzL1JvdXRlckNvbnRyYWN0LnRzJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcjc2hhcmVkL2luZGV4LnRzJztcbnR5cGUgUm91dGVDb250ZXh0ID0gJ2dsb2JhbCcgfCAnZ3JvdXAnIHwgJ3JvdXRlJztcbmludGVyZmFjZSBNaWRkbGV3YXJlUmVnaXN0ZXIge1xuICAgIG1pZGRsZXdhcmU6IE1pZGRsZXdhcmU7XG4gICAgY29udGV4dDogUm91dGVDb250ZXh0O1xufVxuaW50ZXJmYWNlIExvYWRPcHRpb25zIHtcbiAgICBkZWJ1Zz86IGJvb2xlYW47XG59XG5kZWNsYXJlIGNvbnN0IFJvdXRlcl9iYXNlOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbGlzdGVuZXJzOiBpbXBvcnQoXCIjc2hhcmVkL21peGlucy9Ib29rc01peGluLnRzXCIpLkxpc3RlbmVyW107XG4gICAgICAgIG9uKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB2b2lkO1xuICAgICAgICBvZmYoZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHZvaWQ7XG4gICAgICAgIGVtaXQoZXZlbnQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkO1xuICAgICAgICBlbWl0QXN5bmMoZXZlbnQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+O1xuICAgIH07XG59ICYgaW1wb3J0KFwiI3NoYXJlZC9pbmRleC50c1wiKS5Db25zdHJ1Y3RvcjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdXRlcjxDID0ge30+IGV4dGVuZHMgUm91dGVyX2Jhc2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICByb3V0ZXM6IFJvdXRlW107XG4gICAgbWlkZGxld2FyZXM6IE1pZGRsZXdhcmVSZWdpc3RlcltdO1xuICAgIHByZWZpeGVzOiBzdHJpbmdbXTtcbiAgICBncm91cHM6IFJvdXRlcjxhbnk+W107XG4gICAgZ3JvdXBQcmVmaXhlczogc3RyaW5nW107XG4gICAgZGVidWc6IGJvb2xlYW47XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBQYXJ0aWFsPFJvdXRlcjxDPj4pO1xuICAgIHVzZTxUIGV4dGVuZHMgTWlkZGxld2FyZT4obWlkZGxld2FyZTogVCwgY29udGV4dD86IFJvdXRlQ29udGV4dCk6IFJvdXRlcjxDICYgTWlkZGxld2FyZUhhbmRsZVJlc3VsdDxbdHlwZW9mIG1pZGRsZXdhcmVdPj47XG4gICAgcHJlZml4KHByZWZpeDogc3RyaW5nKTogdGhpcztcbiAgICBtYWtlUGF0aChhcmdzOiBzdHJpbmcpOiBzdHJpbmc7XG4gICAgYWRkKHBheWxvYWQ6IFBpY2s8Um91dGUsICdwYXRoJyB8ICdtZXRob2QnIHwgJ2hhbmRsZXInPik6IHZvaWQ7XG4gICAgZ2V0KHBhdGg6IHN0cmluZywgaGFuZGxlcjogSGFuZGxlcjxDPik6IHZvaWQ7XG4gICAgcG9zdChwYXRoOiBzdHJpbmcsIGhhbmRsZXI6IEhhbmRsZXI8Qz4pOiB2b2lkO1xuICAgIHB1dChwYXRoOiBzdHJpbmcsIGhhbmRsZXI6IEhhbmRsZXI8Qz4pOiB2b2lkO1xuICAgIHBhdGNoKHBhdGg6IHN0cmluZywgaGFuZGxlcjogSGFuZGxlcjxDPik6IHZvaWQ7XG4gICAgbWFueShtZXRob2RzOiBSb3V0ZVsnbWV0aG9kJ11bXSwgcGF0aDogc3RyaW5nLCBoYW5kbGVyOiBIYW5kbGVyPEM+KTogdm9pZDtcbiAgICBkZWxldGUocGF0aDogc3RyaW5nLCBoYW5kbGVyOiBIYW5kbGVyPEM+KTogdm9pZDtcbiAgICBncm91cCgpOiBSb3V0ZXI8Qz47XG4gICAgcmVzb2x2ZShtZXRob2Q6IHN0cmluZywgcGF0aDogc3RyaW5nKTogUm91dGUgfCBudWxsO1xuICAgIGV4ZWN1dGUocm91dGU6IFJvdXRlLCBpbml0aWFsQ3R4OiBhbnkpOiBQcm9taXNlPGFueT47XG4gICAgbWF0Y2hQYXRoKHJvdXRlUGF0aDogc3RyaW5nLCByZXF1ZXN0UGF0aDogc3RyaW5nKTogYm9vbGVhbjtcbiAgICBjbGVhcigpOiB2b2lkO1xuICAgIGxpc3QoKTogUm91dGVbXTtcbiAgICBsb2FkKG9wdGlvbnM/OiBMb2FkT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gICAgbG9hZFN5bmMob3B0aW9ucz86IExvYWRPcHRpb25zKTogdm9pZDtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIFJvdXRlciBmcm9tICcjc2VydmVyL3NlcnZpY2VzL1JvdXRlclNlcnZpY2UudHMnO1xuaW1wb3J0IExvZ2dlclNlcnZpY2UgZnJvbSAnI3NoYXJlZC9zZXJ2aWNlcy9Mb2dnZXJTZXJ2aWNlLnRzJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdXRlckZpbGVCYXNlUm91dGluZ1NlcnZpY2Uge1xuICAgIHByaXZhdGUgZGlyZWN0b3J5O1xuICAgIHByaXZhdGUgcHJlZml4O1xuICAgIHByaXZhdGUgbW9kdWxlPztcbiAgICBwcml2YXRlIHJvdXRlcjtcbiAgICBwcml2YXRlIGxvZ2dlcjtcbiAgICBwcml2YXRlIHJvdXRlcztcbiAgICBkZWJ1ZzogYm9vbGVhbjtcbiAgICBzZXREaXJlY3RvcnkoZGlyZWN0b3J5OiBzdHJpbmcpOiB0aGlzO1xuICAgIHNldFByZWZpeChwcmVmaXg6IHN0cmluZyk6IHRoaXM7XG4gICAgc2V0Um91dGVyKHJvdXRlcjogUm91dGVyKTogdGhpcztcbiAgICBzZXRNb2R1bGUobW9kdWxlOiBzdHJpbmcpOiB0aGlzO1xuICAgIHNldExvZ2dlcihsb2dnZXI6IExvZ2dlclNlcnZpY2UpOiB0aGlzO1xuICAgIHNldERlYnVnKGRlYnVnOiBib29sZWFuKTogdGhpcztcbiAgICBzdGF0aWMgY3JlYXRlKGRpcmVjdG9yeTogc3RyaW5nKTogUm91dGVyRmlsZUJhc2VSb3V0aW5nU2VydmljZTtcbiAgICBsb2FkRmlsZXMoKTogUHJvbWlzZTx2b2lkPjtcbiAgICByZWdpc3RlclJvdXRlcygpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGxvYWQoKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB0eXBlIExvZ2dlclNlcnZpY2UgZnJvbSAnI3NoYXJlZC9zZXJ2aWNlcy9Mb2dnZXJTZXJ2aWNlLnRzJztcbmludGVyZmFjZSBDb21tYW5kT3B0aW9ucyB7XG4gICAgY3dkPzogc3RyaW5nO1xuICAgIGVudj86IE5vZGVKUy5Qcm9jZXNzRW52O1xuICAgIHNoZWxsPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoZWxsU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIGxvZ2dlcjogTG9nZ2VyU2VydmljZTtcbiAgICBpbml0KGRhdGE/OiBQYXJ0aWFsPFNoZWxsU2VydmljZT4pOiB2b2lkO1xuICAgIC8qKlxuICAgICAqIEV4ZWN1dGUgYSBzaGVsbCBjb21tYW5kIGFuZCByZXR1cm4gYSBwcm9taXNlXG4gICAgICovXG4gICAgY29tbWFuZChiaW46IHN0cmluZywgYXJnczogc3RyaW5nW10sIG9wdGlvbnM/OiBDb21tYW5kT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gICAgLyoqXG4gICAgICogRXhlY3V0ZSBhIHNoZWxsIGNvbW1hbmQgYW5kIHJldHVybiB0aGUgb3V0cHV0IGFzIGEgc3RyaW5nXG4gICAgICovXG4gICAgZXhlY3V0ZUNvbW1hbmRXaXRoT3V0cHV0KGJpbjogc3RyaW5nLCBhcmdzOiBzdHJpbmdbXSwgb3B0aW9ucz86IENvbW1hbmRPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+O1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHR5cGUgeyBLeXNlbHkgfSBmcm9tICdreXNlbHknO1xuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uPFQgPSBhbnk+IHtcbiAgICBpdGVtczogVFtdO1xuICAgIHBhZ2U6IG51bWJlcjtcbiAgICBwZXJfcGFnZTogbnVtYmVyO1xuICAgIHRvdGFsOiBudW1iZXI7XG4gICAgdG90YWxfcGFnZXM6IG51bWJlcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRmluZE1hbnlPcHRpb25zIHtcbiAgICBsaW1pdD86IG51bWJlcjtcbiAgICBvZmZzZXQ/OiBudW1iZXI7XG4gICAgb3JkZXJCeT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIG9yZGVyRGlyZWN0aW9uPzogJ2FzYycgfCAnZGVzYycgfCAoJ2FzYycgfCAnZGVzYycpW107XG59XG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRlT3B0aW9ucyB7XG4gICAgcGFnZT86IG51bWJlcjtcbiAgICBsaW1pdD86IG51bWJlcjtcbiAgICBvcmRlckJ5PzogRmluZE1hbnlPcHRpb25zWydvcmRlckJ5J107XG4gICAgb3JkZXJEaXJlY3Rpb24/OiBGaW5kTWFueU9wdGlvbnNbJ29yZGVyRGlyZWN0aW9uJ107XG59XG5leHBvcnQgaW50ZXJmYWNlIERlbGV0ZU1hbnlPcHRpb25zIHtcbiAgICBsaW1pdD86IG51bWJlcjtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGFiYXNlUmVwb3NpdG9yeTxURW50aXR5ID0gUmVjb3JkPHN0cmluZywgYW55PiwgVFByaW1hcnlLZXkgPSBhbnksIFRPcHRpb25zID0gUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIHByb3RlY3RlZCBkYjogS3lzZWx5PGFueT47XG4gICAgcHJvdGVjdGVkIHRhYmxlOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHByaW1hcnlLZXk6IHN0cmluZztcbiAgICBjb25zdHJ1Y3RvcihkYjogS3lzZWx5PGFueT4sIHRhYmxlOiBzdHJpbmcsIHByaW1hcnlLZXk6IHN0cmluZyk7XG4gICAgcXVlcnkob3B0aW9ucz86IHtcbiAgICAgICAgcWI/OiBhbnk7XG4gICAgfSAmIFRPcHRpb25zKTogYW55O1xuICAgIGNvdW50KG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUHJvbWlzZTxudW1iZXI+O1xuICAgIGZpbmRNYW55KG9wdGlvbnM/OiBGaW5kTWFueU9wdGlvbnMgJiBUT3B0aW9ucyk6IFByb21pc2U8VEVudGl0eVtdPjtcbiAgICBmaW5kT25lKG9wdGlvbnM/OiBUT3B0aW9ucyk6IFByb21pc2U8VEVudGl0eSB8IG51bGw+O1xuICAgIGZpbmRCeUlkKGlkOiBUUHJpbWFyeUtleSwgb3B0aW9ucz86IFRPcHRpb25zKTogUHJvbWlzZTxURW50aXR5IHwgbnVsbD47XG4gICAgZmluZEJ5SWRPckZhaWwoaWQ6IFRQcmltYXJ5S2V5LCBvcHRpb25zPzogVE9wdGlvbnMpOiBQcm9taXNlPE5vbk51bGxhYmxlPEF3YWl0ZWQ8VEVudGl0eT4+PjtcbiAgICBwYWdpbmF0ZShvcHRpb25zPzogUGFnaW5hdGVPcHRpb25zICYgVE9wdGlvbnMpOiBQcm9taXNlPFBhZ2luYXRpb24+O1xuICAgIGNyZWF0ZShkYXRhOiBQYXJ0aWFsPFRFbnRpdHk+KTogUHJvbWlzZTxhbnk+O1xuICAgIGNyZWF0ZU1hbnkoZGF0YTogUGFydGlhbDxURW50aXR5PltdKTogUHJvbWlzZTxhbnlbXT47XG4gICAgdXBkYXRlQnlJZChpZDogVFByaW1hcnlLZXksIGRhdGE6IFBhcnRpYWw8VEVudGl0eT4pOiBQcm9taXNlPHZvaWQ+O1xuICAgIGRlbGV0ZUJ5SWQoaWQ6IFRQcmltYXJ5S2V5KTogUHJvbWlzZTx2b2lkPjtcbiAgICBkZWxldGVNYW55KG9wdGlvbnM/OiBEZWxldGVNYW55T3B0aW9ucyAmIFRPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCBEYXRhYmFzZVJlcG9zaXRvcnkgZnJvbSAnI3NlcnZlci9yZXBvc2l0b3JpZXMvRGF0YWJhc2VSZXBvc2l0b3J5LnRzJztcbmltcG9ydCB0eXBlIHsgUGVybWlzc2lvbkFzc2lnbm1lbnQgfSBmcm9tICcjc2hhcmVkL3NjaGVtYXMvcGVybWlzc2lvbkFzc2lnbm1lbnRTY2hlbWEudHMnO1xuZXhwb3J0IGludGVyZmFjZSBQZXJtaXNzaW9uQXNzaWdubWVudFJlcG9zaXRvcnlRdWVyeU9wdGlvbnMge1xuICAgIGlkPzogbnVtYmVyIHwgbnVtYmVyW107XG4gICAgcGVybWlzc2lvbklkPzogbnVtYmVyIHwgbnVtYmVyW107XG4gICAgYXNzaWduYWJsZUlkPzogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgYXNzaWduYWJsZVR5cGU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlcm1pc3Npb25Bc3NpZ25tZW50UmVwb3NpdG9yeSBleHRlbmRzIERhdGFiYXNlUmVwb3NpdG9yeTxQZXJtaXNzaW9uQXNzaWdubWVudCwgUGVybWlzc2lvbkFzc2lnbm1lbnRbJ2lkJ10sIFBlcm1pc3Npb25Bc3NpZ25tZW50UmVwb3NpdG9yeVF1ZXJ5T3B0aW9ucz4ge1xuICAgIGNvbnN0cnVjdG9yKGRiOiBEYXRhYmFzZVJlcG9zaXRvcnlbJ2RiJ10pO1xuICAgIHF1ZXJ5KG9wdGlvbnM/OiBQZXJtaXNzaW9uQXNzaWdubWVudFJlcG9zaXRvcnlRdWVyeU9wdGlvbnMpOiBhbnk7XG59XG4iLCJpbXBvcnQgRGF0YWJhc2VSZXBvc2l0b3J5IGZyb20gJyNzZXJ2ZXIvcmVwb3NpdG9yaWVzL0RhdGFiYXNlUmVwb3NpdG9yeS50cyc7XG5pbXBvcnQgdHlwZSB7IFBlcm1pc3Npb24gfSBmcm9tICcjc2hhcmVkL3NjaGVtYXMvcGVybWlzc2lvblNjaGVtYS50cyc7XG5leHBvcnQgaW50ZXJmYWNlIFBlcm1pc3Npb25SZXBvc2l0b3J5UXVlcnlPcHRpb25zIHtcbiAgICBpZD86IG51bWJlciB8IG51bWJlcltdO1xuICAgIHNlYXJjaD86IHN0cmluZztcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlcm1pc3Npb25SZXBvc2l0b3J5IGV4dGVuZHMgRGF0YWJhc2VSZXBvc2l0b3J5PFBlcm1pc3Npb24sIFBlcm1pc3Npb25bJ2lkJ10sIFBlcm1pc3Npb25SZXBvc2l0b3J5UXVlcnlPcHRpb25zPiB7XG4gICAgY29uc3RydWN0b3IoZGI6IERhdGFiYXNlUmVwb3NpdG9yeVsnZGInXSk7XG4gICAgcXVlcnkob3B0aW9ucz86IFBlcm1pc3Npb25SZXBvc2l0b3J5UXVlcnlPcHRpb25zKTogYW55O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBGaW5kTWFueU9wdGlvbnMsIFBhZ2luYXRlT3B0aW9ucywgUGFnaW5hdGlvbiB9IGZyb20gJyNzZXJ2ZXIvcmVwb3NpdG9yaWVzL0RhdGFiYXNlUmVwb3NpdG9yeS50cyc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdG9yIH0gZnJvbSAnI3NoYXJlZC91dGlscy9jb21wb3NlLnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgSVJlcG9zaXRvcnlUeXBlczxURW50aXR5ID0gUmVjb3JkPHN0cmluZywgYW55PiwgVFByaW1hcnlLZXlUeXBlID0gYW55LCBUT3B0aW9ucyA9IFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBjb3VudChvcHRpb25zPzogVE9wdGlvbnMpOiBQcm9taXNlPG51bWJlcj47XG4gICAgZmluZE1hbnkob3B0aW9ucz86IFRPcHRpb25zICYgRmluZE1hbnlPcHRpb25zKTogUHJvbWlzZTxURW50aXR5W10+O1xuICAgIGZpbmRCeUlkKGlkOiBUUHJpbWFyeUtleVR5cGUsIG9wdGlvbnM/OiBUT3B0aW9ucyk6IFByb21pc2U8VEVudGl0eSB8IG51bGw+O1xuICAgIGZpbmRCeUlkT3JGYWlsKGlkOiBUUHJpbWFyeUtleVR5cGUsIG9wdGlvbnM/OiBUT3B0aW9ucyk6IFByb21pc2U8VEVudGl0eT47XG4gICAgcGFnaW5hdGUob3B0aW9ucz86IFRPcHRpb25zICYgUGFnaW5hdGVPcHRpb25zKTogUHJvbWlzZTxQYWdpbmF0aW9uPjtcbiAgICBjcmVhdGUoZGF0YTogUGFydGlhbDxURW50aXR5Piwgb3B0aW9ucz86IFRPcHRpb25zKTogUHJvbWlzZTxURW50aXR5PjtcbiAgICBjcmVhdGVNYW55KGRhdGE6IFBhcnRpYWw8VEVudGl0eT5bXSwgb3B0aW9ucz86IFRPcHRpb25zKTogUHJvbWlzZTxURW50aXR5W10+O1xuICAgIGRlbGV0ZUJ5SWQoaWQ6IFRQcmltYXJ5S2V5VHlwZSk6IFByb21pc2U8dm9pZD47XG4gICAgZGVzdHJveU1hbnkob3B0aW9ucz86IFRPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERhdGFiYXNlUmVwb3NpdG9yeUluZmVyTWl4aW48VEVudGl0eSA9IFJlY29yZDxzdHJpbmcsIGFueT4sIFRQcmltYXJ5S2V5VHlwZSA9IGFueSwgVE9wdGlvbnMgPSBSZWNvcmQ8c3RyaW5nLCBhbnk+PigpOiA8VEJhc2UgZXh0ZW5kcyBDb25zdHJ1Y3Rvcj4oQmFzZTogVEJhc2UpID0+IFRCYXNlICYgQ29uc3RydWN0b3I8SVJlcG9zaXRvcnlUeXBlczxURW50aXR5LCBUUHJpbWFyeUtleVR5cGUsIFRPcHRpb25zPj47XG4iLCJpbXBvcnQgRGF0YWJhc2VSZXBvc2l0b3J5IGZyb20gJyNzZXJ2ZXIvcmVwb3NpdG9yaWVzL0RhdGFiYXNlUmVwb3NpdG9yeS50cyc7XG5pbXBvcnQgdHlwZSB7IFRva2VuIH0gZnJvbSAnI3NoYXJlZC9zY2hlbWFzL3Rva2VuU2NoZW1hLnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5SZXBvc2l0b3J5UXVlcnlPcHRpb25zIHtcbiAgICBpZD86IG51bWJlciB8IG51bWJlcltdO1xuICAgIHNlYXJjaD86IHN0cmluZztcbiAgICB0eXBlPzogc3RyaW5nIHwgc3RyaW5nW107XG59XG5kZWNsYXJlIGNvbnN0IFRva2VuUmVwb3NpdG9yeV9iYXNlOiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2luZGV4LnRzXCIpLkNvbnN0cnVjdG9yICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9pbmRleC50c1wiKS5Db25zdHJ1Y3RvcjxpbXBvcnQoXCIjc2VydmVyL21peGlucy9EYXRhYmFzZVJlcG9zaXRvcnlJbmZlck1peGluLnRzXCIpLklSZXBvc2l0b3J5VHlwZXM8e1xuICAgIGlkOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdXNlcl9pZDogbnVtYmVyO1xuICAgIHRva2VuOiBzdHJpbmc7XG4gICAgY3JlYXRlZF9hdDogc3RyaW5nO1xuICAgIHVwZGF0ZWRfYXQ6IHN0cmluZztcbiAgICBleHBpcmVzX2F0OiBzdHJpbmc7XG59LCBudW1iZXIsIFRva2VuUmVwb3NpdG9yeVF1ZXJ5T3B0aW9ucz4+ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9pbmRleC50c1wiKS5Db25zdHJ1Y3Rvcjx7fT4gJiB0eXBlb2YgRGF0YWJhc2VSZXBvc2l0b3J5O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW5SZXBvc2l0b3J5IGV4dGVuZHMgVG9rZW5SZXBvc2l0b3J5X2Jhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGRiOiBEYXRhYmFzZVJlcG9zaXRvcnlbJ2RiJ10pO1xuICAgIHF1ZXJ5KG9wdGlvbnM/OiBUb2tlblJlcG9zaXRvcnlRdWVyeU9wdGlvbnMpOiBhbnk7XG4gICAgZmluZEJ5VG9rZW4odG9rZW46IHN0cmluZyk6IFByb21pc2U8VG9rZW4gfCBudWxsPjtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCBDb25maWdTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvQ29uZmlnU2VydmljZS50cyc7XG5kZWNsYXJlIGNvbnN0IGNvbmZpZzogQ29uZmlnU2VydmljZTtcbmV4cG9ydCBkZWZhdWx0IGNvbmZpZztcbiIsImltcG9ydCBDb250YWluZXJTZXJ2aWNlIGZyb20gXCIjc2hhcmVkL3NlcnZpY2VzL0NvbnRhaW5lclNlcnZpY2UudHNcIjtcbmRlY2xhcmUgY29uc3QgX2RlZmF1bHQ6IENvbnRhaW5lclNlcnZpY2U7XG5leHBvcnQgZGVmYXVsdCBfZGVmYXVsdDtcbiIsImltcG9ydCB0eXBlIHsgQ29sdW1uVHlwZSwgR2VuZXJhdGVkIH0gZnJvbSAna3lzZWx5JztcbmV4cG9ydCBpbnRlcmZhY2UgU29mdERlbGV0ZVRhYmxlIHtcbiAgICBkZWxldGVkX2F0PzogQ29sdW1uVHlwZTxEYXRlLCBzdHJpbmcgfCB1bmRlZmluZWQsIG5ldmVyPiB8IG51bGw7XG59XG5leHBvcnQgaW50ZXJmYWNlIFRpbWVzdGFtcFRhYmxlIHtcbiAgICBjcmVhdGVkX2F0OiBDb2x1bW5UeXBlPERhdGUsIHN0cmluZyB8IHVuZGVmaW5lZCwgbmV2ZXI+O1xuICAgIHVwZGF0ZWRfYXQ6IENvbHVtblR5cGU8RGF0ZSwgc3RyaW5nIHwgdW5kZWZpbmVkLCBuZXZlcj47XG59XG5leHBvcnQgaW50ZXJmYWNlIE1pZ3JhdGlvbnNUYWJsZSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG1vZHVsZTogc3RyaW5nIHwgbnVsbDtcbiAgICBleGVjdXRlZF9hdDogQ29sdW1uVHlwZTxEYXRlLCBzdHJpbmcgfCB1bmRlZmluZWQsIG5ldmVyPjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclRhYmxlIGV4dGVuZHMgVGltZXN0YW1wVGFibGUsIFNvZnREZWxldGVUYWJsZSB7XG4gICAgaWQ6IEdlbmVyYXRlZDxudW1iZXI+O1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB1c2VybmFtZTogc3RyaW5nO1xuICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgcGFzc3dvcmQ6IHN0cmluZztcbiAgICB2ZXJpZmllZF9hdD86IERhdGUgfCBzdHJpbmcgfCBudWxsO1xufVxuZXhwb3J0IGludGVyZmFjZSBVc2VyTWV0YVRhYmxlIGV4dGVuZHMgVGltZXN0YW1wVGFibGUsIFNvZnREZWxldGVUYWJsZSB7XG4gICAgaWQ6IEdlbmVyYXRlZDxudW1iZXI+O1xuICAgIHVzZXJfaWQ6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmFsdWU6IHN0cmluZyB8IG51bGw7XG59XG5leHBvcnQgaW50ZXJmYWNlIFRva2VuVGFibGUgZXh0ZW5kcyBUaW1lc3RhbXBUYWJsZSB7XG4gICAgaWQ6IEdlbmVyYXRlZDxudW1iZXI+O1xuICAgIHVzZXJfaWQ6IG51bWJlcjtcbiAgICB0b2tlbjogc3RyaW5nO1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBleHBpcmVzX2F0OiBzdHJpbmcgfCBudWxsO1xufVxuZXhwb3J0IGludGVyZmFjZSBSb2xlVGFibGUge1xuICAgIGlkOiBHZW5lcmF0ZWQ8bnVtYmVyPjtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZyB8IG51bGw7XG59XG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSb2xlVGFibGUge1xuICAgIHVzZXJfaWQ6IG51bWJlcjtcbiAgICByb2xlX2lkOiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIFBlcm1pc3Npb25UYWJsZSBleHRlbmRzIFRpbWVzdGFtcFRhYmxlLCBTb2Z0RGVsZXRlVGFibGUge1xuICAgIGlkOiBHZW5lcmF0ZWQ8bnVtYmVyPjtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZyB8IG51bGw7XG4gICAgb3JpZ2luOiBzdHJpbmc7XG4gICAgc3ViamVjdDogc3RyaW5nO1xuICAgIGFjdGlvbjogc3RyaW5nO1xuICAgIGNvbmRpdGlvbnM6IHN0cmluZyB8IG51bGw7XG59XG5leHBvcnQgaW50ZXJmYWNlIFBlcm1pc3Npb25Bc3NpZ25tZW50VGFibGUge1xuICAgIGlkOiBHZW5lcmF0ZWQ8bnVtYmVyPjtcbiAgICBwZXJtaXNzaW9uX2lkOiBudW1iZXI7XG4gICAgYXNzaWduYWJsZV90eXBlOiBzdHJpbmc7XG4gICAgYXNzaWduYWJsZV9pZDogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBGaWxlVGFibGUgZXh0ZW5kcyBUaW1lc3RhbXBUYWJsZSwgU29mdERlbGV0ZVRhYmxlIHtcbiAgICBpZDogR2VuZXJhdGVkPG51bWJlcj47XG4gICAgZHJpdmU6IHN0cmluZztcbiAgICBtaW1ldHlwZTogc3RyaW5nO1xuICAgIGNsaWVudF9uYW1lOiBzdHJpbmc7XG4gICAgZmlsZW5hbWU6IHN0cmluZztcbiAgICBwdXJwb3NlOiBzdHJpbmc7XG4gICAgcHVibGljOiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBGaWxlTWV0YVRhYmxlIGV4dGVuZHMgVGltZXN0YW1wVGFibGUsIFNvZnREZWxldGVUYWJsZSB7XG4gICAgaWQ6IEdlbmVyYXRlZDxudW1iZXI+O1xuICAgIGZpbGVfaWQ6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmFsdWU6IHN0cmluZyB8IG51bGw7XG59XG5leHBvcnQgaW50ZXJmYWNlIFVwbG9hZFNlc3Npb25UYWJsZSB7XG4gICAgaWQ6IEdlbmVyYXRlZDxudW1iZXI+O1xuICAgIHB1cnBvc2U6IHN0cmluZztcbiAgICBtaW1lX3R5cGVzOiBzdHJpbmc7XG4gICAgbWF4X3NpemU6IG51bWJlcjtcbiAgICBleHBpcmVzX2F0OiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIEpvYlRhYmxlIGV4dGVuZHMgVGltZXN0YW1wVGFibGUge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgcXVldWVfaWQ6IHN0cmluZztcbiAgICBzdGF0dXM6ICdwZW5kaW5nJyB8ICdpbl9wcm9ncmVzcycgfCAnY29tcGxldGVkJyB8ICdmYWlsZWQnO1xuICAgIGRhdGE6IHN0cmluZyB8IG51bGw7XG4gICAgcmVzdWx0OiBzdHJpbmcgfCBudWxsO1xuICAgIGVycm9yOiBzdHJpbmcgfCBudWxsO1xufVxuZXhwb3J0IGludGVyZmFjZSBFbWFpbFRlbXBsYXRlVGFibGUgZXh0ZW5kcyBUaW1lc3RhbXBUYWJsZSwgU29mdERlbGV0ZVRhYmxlIHtcbiAgICBpZDogR2VuZXJhdGVkPG51bWJlcj47XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHN1YmplY3Q6IHN0cmluZztcbiAgICBrZXk6IHN0cmluZztcbiAgICBib2R5OiBzdHJpbmcgfCBudWxsO1xuICAgIGVuZ2luZTogc3RyaW5nIHwgbnVsbDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxUZW1wbGF0ZU1ldGFUYWJsZSBleHRlbmRzIFRpbWVzdGFtcFRhYmxlLCBTb2Z0RGVsZXRlVGFibGUge1xuICAgIGlkOiBHZW5lcmF0ZWQ8bnVtYmVyPjtcbiAgICB0ZW1wbGF0ZV9pZDogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBPYXV0aEFjY291bnRUYWJsZSBleHRlbmRzIFRpbWVzdGFtcFRhYmxlLCBTb2Z0RGVsZXRlVGFibGUge1xuICAgIGlkOiBHZW5lcmF0ZWQ8bnVtYmVyPjtcbiAgICB1c2VyX2lkOiBudW1iZXI7XG4gICAgcHJvdmlkZXI6IHN0cmluZztcbiAgICBwcm92aWRlcl91c2VyX2lkOiBzdHJpbmc7XG4gICAgcHJvdmlkZXJfdXNlcl9lbWFpbDogc3RyaW5nIHwgbnVsbDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgT2F1dGhUb2tlblRhYmxlIHtcbiAgICBpZDogR2VuZXJhdGVkPG51bWJlcj47XG4gICAgdXNlcl9pZDogbnVtYmVyIHwgbnVsbDtcbiAgICBwcm92aWRlcjogc3RyaW5nIHwgbnVsbDtcbiAgICBhY3Rpb246IHN0cmluZztcbiAgICB0b2tlbjogc3RyaW5nO1xuICAgIGV4cGlyZXNfYXQ6IHN0cmluZztcbiAgICBtZXRhZGF0YTogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZUNvbnRyYWN0IHtcbiAgICB1c2VyczogVXNlclRhYmxlO1xuICAgIHVzZXJfbWV0YXM6IFVzZXJNZXRhVGFibGU7XG4gICAgdG9rZW5zOiBUb2tlblRhYmxlO1xuICAgIG1pZ3JhdGlvbnM6IE1pZ3JhdGlvbnNUYWJsZTtcbiAgICBmaWxlczogRmlsZVRhYmxlO1xuICAgIGZpbGVfbWV0YXM6IEZpbGVNZXRhVGFibGU7XG4gICAgZmlsZV91cGxvYWRfc2Vzc2lvbnM6IFVwbG9hZFNlc3Npb25UYWJsZTtcbiAgICByb2xlczogUm9sZVRhYmxlO1xuICAgIHVzZXJfcm9sZXM6IFVzZXJSb2xlVGFibGU7XG4gICAgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25UYWJsZTtcbiAgICBwZXJtaXNzaW9uc19hc3NpZ25tZW50czogUGVybWlzc2lvbkFzc2lnbm1lbnRUYWJsZTtcbiAgICBqb2JzOiBKb2JUYWJsZTtcbiAgICBlbWFpbF90ZW1wbGF0ZXM6IEVtYWlsVGVtcGxhdGVUYWJsZTtcbiAgICBlbWFpbF90ZW1wbGF0ZV9tZXRhczogRW1haWxUZW1wbGF0ZU1ldGFUYWJsZTtcbiAgICBvYXV0aF9hY2NvdW50czogT2F1dGhBY2NvdW50VGFibGU7XG4gICAgb2F1dGhfdG9rZW5zOiBPYXV0aFRva2VuVGFibGU7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgdHlwZSB7IEt5c2VseSB9IGZyb20gJ2t5c2VseSc7XG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlQ29udHJhY3QgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9EYXRhYmFzZUNvbnRyYWN0LnRzJztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGtleSA9IFwiZGF0YWJhc2VcIjtcbmRlY2xhcmUgY29uc3QgZGF0YWJhc2U6IEt5c2VseTxEYXRhYmFzZUNvbnRyYWN0PjtcbmV4cG9ydCBkZWZhdWx0IGRhdGFiYXNlO1xuIiwiaW1wb3J0IExvZ2dlclNlcnZpY2UgZnJvbSAnI3NoYXJlZC9zZXJ2aWNlcy9Mb2dnZXJTZXJ2aWNlLnRzJztcbmRlY2xhcmUgY29uc3QgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuZXhwb3J0IGRlZmF1bHQgbG9nZ2VyO1xuIiwiaW1wb3J0IE1pZ3JhdG9yU2VydmljZSBmcm9tICcjc2VydmVyL3NlcnZpY2VzL01pZ3JhdG9yU2VydmljZS50cyc7XG5kZWNsYXJlIGNvbnN0IG1pZ3JhdG9yOiBNaWdyYXRvclNlcnZpY2U7XG5leHBvcnQgZGVmYXVsdCBtaWdyYXRvcjtcbiIsImltcG9ydCB0eXBlIHsgSHR0cENvbnRleHQgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9IdHRwQ29udGV4dENvbnRyYWN0LnRzJztcbmltcG9ydCBSb3V0ZXJTZXJ2aWNlIGZyb20gJyNzZXJ2ZXIvc2VydmljZXMvUm91dGVyU2VydmljZS50cyc7XG5kZWNsYXJlIGNvbnN0IHJvdXRlcjogUm91dGVyU2VydmljZTxIdHRwQ29udGV4dD47XG5leHBvcnQgZGVmYXVsdCByb3V0ZXI7XG4iLCJpbXBvcnQgU2hlbGxTZXJ2aWNlIGZyb20gJyNzZXJ2ZXIvc2VydmljZXMvU2hlbGxTZXJ2aWNlLnRzJztcbmRlY2xhcmUgY29uc3Qgc2hlbGw6IFNoZWxsU2VydmljZTtcbmV4cG9ydCBkZWZhdWx0IHNoZWxsO1xuIiwiaW1wb3J0IHR5cGUgeyBLeXNlbHkgfSBmcm9tICdreXNlbHknO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IH0gZnJvbSAnLi9EYXRhYmFzZUNvbnRyYWN0JztcbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VLeXNlbHkgZXh0ZW5kcyBLeXNlbHk8RGF0YWJhc2VDb250cmFjdD4ge1xufVxuIiwiZXhwb3J0IGludGVyZmFjZSBMb2FkZXI8VCA9IFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBsb2FkKGVudGl0aWVzOiBUW10pOiBQcm9taXNlPHZvaWQ+O1xufVxuZXhwb3J0IGludGVyZmFjZSBMb2FkZXJSZWNvcmQ8VCA9IFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBba2V5OiBzdHJpbmddOiBMb2FkZXI8VD47XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBkZWZpbmVMb2FkZXI8VCA9IFJlY29yZDxzdHJpbmcsIGFueT4+KGxvYWRlcjogTG9hZGVyPFQ+KTogTG9hZGVyPFQ+O1xuIiwidHlwZSBLZXlPckZ1bmN0aW9uPFQ+ID0ga2V5b2YgVCB8ICgoZW50aXR5OiBUKSA9PiBhbnkpO1xuZXhwb3J0IGludGVyZmFjZSBIYXNNYW55VGhyb3VnaExvYWRlck9wdGlvbnM8VEVudGl0eSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBUUGl2b3RFbnRpdHkgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55PiwgVFRhcmdldEVudGl0eSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgcGl2b3Q6IHtcbiAgICAgICAgc291cmNlS2V5OiBLZXlPckZ1bmN0aW9uPFRFbnRpdHk+O1xuICAgICAgICB0YXJnZXRLZXk6IEtleU9yRnVuY3Rpb248VFBpdm90RW50aXR5PjtcbiAgICAgICAgZmluZEVudGl0aWVzKGlkczogKHN0cmluZyB8IG51bWJlcilbXSk6IFByb21pc2U8VFBpdm90RW50aXR5W10+O1xuICAgIH07XG4gICAgdGFyZ2V0OiB7XG4gICAgICAgIHNvdXJjZUtleTogS2V5T3JGdW5jdGlvbjxUUGl2b3RFbnRpdHk+O1xuICAgICAgICB0YXJnZXRLZXk6IEtleU9yRnVuY3Rpb248VFRhcmdldEVudGl0eT47XG4gICAgICAgIGZpbmRFbnRpdGllcyhpZHM6IChzdHJpbmcgfCBudW1iZXIpW10pOiBQcm9taXNlPFRUYXJnZXRFbnRpdHlbXT47XG4gICAgfTtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGxvYWRIYXNNYW55VGhyb3VnaDxURW50aXR5IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4sIFRQaXZvdEVudGl0eSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBUVGFyZ2V0RW50aXR5IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4+KHBheWxvYWQ6IGFueSB8IGFueVtdLCBvcHRpb25zOiBIYXNNYW55VGhyb3VnaExvYWRlck9wdGlvbnM8VEVudGl0eSwgVFBpdm90RW50aXR5LCBUVGFyZ2V0RW50aXR5Pik6IFByb21pc2U8dm9pZD47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVIYXNNYW55VGhyb3VnaExvYWRlcjxURW50aXR5IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4sIFRQaXZvdEVudGl0eSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBUVGFyZ2V0RW50aXR5IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4+KG9wdGlvbnM6IEhhc01hbnlUaHJvdWdoTG9hZGVyT3B0aW9uczxURW50aXR5LCBUUGl2b3RFbnRpdHksIFRUYXJnZXRFbnRpdHk+KTogaW1wb3J0KFwiI3NlcnZlci91dGlscy9kZWZpbmVMb2FkZXIudHNcIikuTG9hZGVyPFRFbnRpdHk+O1xuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHsgR2l0R2F0ZXdheSB9IGZyb20gJyNzZXJ2ZXIvZ2F0ZXdheXMvR2l0R2F0ZXdheS50cyc7XG5pbXBvcnQgQmFzZSBmcm9tICcjc2hhcmVkL2VudGl0aWVzL01vZHVsZUVudGl0eS50cyc7XG5pbXBvcnQgc2hlbGwgZnJvbSAnI3NlcnZlci9mYWNhZGVzL3NoZWxsLnRzJztcbmRlY2xhcmUgY29uc3QgTW9kdWxlX2Jhc2U6IHR5cGVvZiBCYXNlO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9kdWxlIGV4dGVuZHMgTW9kdWxlX2Jhc2Uge1xuICAgIGdldCBnaXQoKTogR2l0R2F0ZXdheTtcbiAgICBtYWtlUGF0aCguLi5wYXJ0czogc3RyaW5nW10pOiBzdHJpbmc7XG4gICAgc3RhdGljUGF0aCguLi5wYXJ0czogc3RyaW5nW10pOiBzdHJpbmc7XG4gICAgY29tbWFuZDogdHlwZW9mIHNoZWxsLmNvbW1hbmQ7XG4gICAgbG9hZCgpOiB2b2lkO1xuICAgIGZpbmRDbGllbnRFbnRyeXBvaW50RmlsZW5hbWUoY29udGV4dD86ICdkZXYnIHwgJ25vZGUnIHwgJ2Jyb3dzZXInKTogc3RyaW5nIHwgbnVsbDtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCBCYXNlIGZyb20gJyNzaGFyZWQvZW50aXRpZXMvUGx1Z2luRW50aXR5LnRzJztcbmRlY2xhcmUgY29uc3QgUGx1Z2luRW50cnlFbnRpdHlfYmFzZTogdHlwZW9mIEJhc2U7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQbHVnaW5FbnRyeUVudGl0eSBleHRlbmRzIFBsdWdpbkVudHJ5RW50aXR5X2Jhc2Uge1xuICAgIGRpcmVjdG9yeTogc3RyaW5nO1xuICAgIG1ha2VQYXRoKC4uLnBhcnRzOiBzdHJpbmdbXSk6IHN0cmluZztcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCBQbHVnaW5FbnRyeUVudGl0eSBmcm9tICcuL1BsdWdpbkVudHJ5RW50aXR5LnRzJztcbmludGVyZmFjZSBBZGRBcGlGb2xkZXJPcHRpb25zIHtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQbHVnaW5FbnRpdHkgZXh0ZW5kcyBQbHVnaW5FbnRyeUVudGl0eSB7XG4gICAgc3RhdGljUGF0aCguLi5wYXJ0czogc3RyaW5nW10pOiBzdHJpbmc7XG4gICAgbG9hZCgpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGFkZEFwaUZvbGRlcihkaXJlY3Rvcnk6IHN0cmluZywgb3B0aW9ucz86IEFkZEFwaUZvbGRlck9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHN0YXRpYyBmcm9tUGx1Z2luRGlzY292ZXJFbnRpdHk8VD4odGhpczogbmV3ICgpID0+IFQsIGVudGl0eTogUGx1Z2luRW50cnlFbnRpdHkpOiBUO1xufVxuZXhwb3J0IHt9O1xuIiwiZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYmFzZVBhdGgoLi4uYXJnczogc3RyaW5nW10pOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByZWxhdGl2ZVRvQmFzZVBhdGgoLi4uYXJnczogc3RyaW5nW10pOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB0bXBQYXRoKC4uLmFyZ3M6IHN0cmluZ1tdKTogc3RyaW5nO1xuIiwiaW1wb3J0IHR5cGUgeyBMb2FkZXJSZWNvcmQgfSBmcm9tICcuL2RlZmluZUxvYWRlci50cyc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVMb2FkZXJGYWN0b3J5PEUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55PiwgUiBleHRlbmRzIExvYWRlclJlY29yZDxFPiA9IExvYWRlclJlY29yZDxFPj4obG9hZGVyczogUik6IHtcbiAgICBrZXlzOiAoa2V5b2YgUilbXTtcbiAgICBsb2FkZXJzOiBSO1xuICAgIGxvYWQ6IChlbnRpdGllczogRSB8IEVbXSwgbmFtZXM6IGtleW9mIFIgfCAoa2V5b2YgUilbXSkgPT4gUHJvbWlzZTx2b2lkPjtcbn07XG4iLCJpbXBvcnQgdHlwZSB7IEh0dHBDb250ZXh0IH0gZnJvbSBcIiNzZXJ2ZXIvY29udHJhY3RzL0h0dHBDb250ZXh0Q29udHJhY3QudHNcIjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGRlZmluZUhhbmRsZXIoaGFuZGxlcjogKGN0eDogSHR0cENvbnRleHQpID0+IFByb21pc2U8YW55Pik6IChjdHg6IEh0dHBDb250ZXh0KSA9PiBQcm9taXNlPGFueT47XG4iLCJleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBnZW5lcmF0ZUluZGV4RmlsZShvcHRpb25zOiBhbnkpOiB2b2lkO1xuIiwiaW50ZXJmYWNlIE9wdGlvbnMge1xuICAgIGNhY2hlPzogYm9vbGVhbjtcbiAgICBvbkJlZm9yZUltcG9ydD86IChjdHg6IHtcbiAgICAgICAgZmlsZW5hbWU6IHN0cmluZztcbiAgICB9KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICBvbkFmdGVySW1wb3J0PzogKGN0eDoge1xuICAgICAgICBmaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICBtb2R1bGU6IGFueTtcbiAgICB9KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICBvbkVycm9yPzogKGN0eDoge1xuICAgICAgICBmaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICBlcnJvcjogRXJyb3I7XG4gICAgfSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgZXhjbHVkZT86IHN0cmluZ1tdO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaW1wb3J0RmlsZXMoZmlsZXM6IHN0cmluZ1tdLCBvcHRpb25zPzogT3B0aW9ucyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBpbXBvcnRHbG9iKHBhdHRlcm46IHN0cmluZywgb3B0aW9ucz86IE9wdGlvbnMpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaW1wb3J0QWxsKGRpcmVjdG9yeTogc3RyaW5nLCBvcHRpb25zPzogT3B0aW9ucyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj47XG5leHBvcnQge307XG4iLCJleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBpbXBvcnRPbmUoZmlsZW5hbWVzOiBzdHJpbmdbXSk6IFByb21pc2U8YW55PjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQU8sY0FBVTtDQUFBO09BQVksRUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDN0IsSUFBVyxnQkFBTTtDQUFBO09BQUEsRUFBQTtDQUFBLENBQUEsR0FBQTtDQUFBO0FBQ2pCLElBQVcsY0FBVztDQUFJO09BQVUsQ0FBQSxjQUFPO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzNDLElBQVcsYUFBTztDQUFBO09BQUEsQ0FBQSxZQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDQWxCLElBQUEsaUJBQXFCO0NBQUE7T0FBQTtFQUFBO0VBQWU7RUFBUTtFQUFRLE1BQUE7RUFBQSxNQUFBO0VBQUEsTUFBQTtFQUFBLE1BQUE7RUFBQSxNQUFBO0VBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFB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QUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNMOUMsSUFBQSxnQkFBb0I7Q0FBQztPQUFBO0VBQUE7RUFBYztFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNFbkMsSUFBVyxjQUFjO0NBQUM7RUFBSyxNQUFHLENBQUcsRUFBRTtDQUFFO0VBQUM7RUFBSTtFQUFFO0VBQUs7Q0FBQzs7OztBQ0N0RCxJQUFJLGtCQUFrQjtDQUFDO09BQVcsRUFBRTtDQUFDLEVBQUE7Q0FBSTtBQUN6QyxJQUFBLGNBQVU7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UztFQUFHO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNENUQsSUFBSSxZQUFZO0NBQUM7RUFBSyxNQUFJO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDMUIsSUFBSSxPQUFJO0NBQUE7T0FBWSxDQUFBLFVBQVU7Q0FBTTtFQUFDO0VBQUU7RUFBTTtFQUFHO0VBQUE7Q0FBQTs7OztBQ0NoRCxJQUFJLGtCQUFrQjtDQUFDO0VBQUcsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzFCLElBQUksYUFBVTtDQUFJO09BQVc7RUFBQztFQUFNO0VBQVk7RUFBTTtFQUFNO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNGNUQsSUFBQSx3QkFBcUI7Q0FBQTtPQUFBO0VBQUEsR0FBcUI7RUFBQztFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDQTNDLElBQUEsaUJBQVU7Q0FBQTtPQUFhLENBQUEsY0FBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3ZCLElBQUksa0JBQWtCO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDRnRCLElBQVcsWUFBWTtDQUFDO09BQUUsQ0FBQSxXQUFtQixFQUFBLFlBQVU7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDdkQsSUFBTyxZQUFjO0NBQUE7T0FBYTtFQUFBLEVBQUE7RUFBa0IsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNBcEQsSUFBQSxhQUFlO0NBQUE7RUFBTSxNQUFBO0VBQUE7RUFBVyxPQUFBO0VBQUEsT0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNDaEMsSUFBTyx1QkFBVTtDQUFBO09BQXFCLENBQUEsWUFBQSxjQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUN0QyxJQUFJLHVCQUFlO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0ZuQixJQUFPLGFBQVU7Q0FBQTtPQUFXLENBQUEsR0FBQSxZQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzVCLElBQVcsbUJBQWlCO0NBQUE7T0FBQSxDQUFBLEdBQUEsWUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDNUIsSUFBQSxtQkFBQTtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBLE9BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQSxPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDQUEsSUFBSSxTQUFTO0NBQUE7T0FBUTtFQUFBLEVBQVE7RUFBVSxFQUFlO0VBQWtCLEVBQVU7RUFBYSxFQUFZO0VBQWtCLEVBQUE7RUFBMkIsRUFBVTtFQUFFLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDcEssSUFBSSxnQkFBdUI7Q0FBQztPQUFVLENBQUMsUUFBQSxZQUFlO0NBQU8sQ0FBQyxJQUFBLEdBQU87Q0FBQztBQUN0RSxJQUFJLFVBQVM7Q0FBQTtPQUFZO0VBQUM7RUFBUTtFQUFTO0VBQUM7RUFBZTtFQUFnQjtFQUFXO0VBQUM7RUFBYTtFQUFZO0VBQVEsT0FBVTtFQUFnQjtFQUFXO0VBQVk7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNGekssSUFBQSxlQUFVO0NBQUE7T0FBb0I7RUFBQztFQUFLO0VBQXlCO0VBQUE7Q0FBQTtFQUFBO0VBQVk7RUFBRTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDM0UsSUFBSSxrQkFBZTtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0puQixJQUFPLHFCQUFVO0NBQUE7T0FBbUIsQ0FBQSxLQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNwQyxJQUFJLGtCQUFZO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNBaEIsSUFBQSxrQkFBcUI7Q0FBQTtPQUFBO0VBQUE7RUFBdUI7RUFBTTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDR2xELElBQU8sa0NBQVU7Q0FBQTtPQUFnQztFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDakQsSUFBSSwyQkFBVztDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7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QTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUMzQixJQUFJLGtCQUFZO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDVGhCLElBQVcsYUFBYTtDQUFDO0VBQUUsTUFBTyxDQUFBLEVBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2xDLElBQUksZ0JBQVU7Q0FBQTtFQUFBLE1BQUEsQ0FBQSxFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2QsSUFBVyxrQkFBTTtDQUFBO0VBQUEsTUFBQTtFQUFB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O0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUN0QixJQUFJLFNBQVE7Q0FBQTtFQUFPLEdBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ1BuQixJQUFBLCtCQUFxQjtDQUFBO09BQUE7RUFBQTtFQUE2QjtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNEbEQsSUFBQSxpQkFBVTtDQUFBO09BQWUsQ0FBQSxPQUFBLFdBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3pCLElBQUksZUFBWTtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0RoQixJQUFPLGFBQVU7Q0FBQTtFQUFZLE1BQUcsQ0FBRyxFQUFFO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDckMsSUFBVyxrQkFBRztDQUFBO09BQUEsRUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2QsSUFBVSxrQkFBTTtDQUFBO09BQUEsQ0FBQSxpQkFBQSxnQkFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNoQixJQUFJLG9CQUFnQjtDQUFBO09BQUEsRUFBQTtDQUFBLENBQUEsR0FBQTtDQUFBO0FBQ3BCLElBQUkscUJBQWE7Q0FBQTtFQUFBLFNBQUEsYUFBQSxhQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0hqQixJQUFPLDZDQUFVO0NBQUE7T0FBMkMsRUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzVELElBQUksaUNBQXNCO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNEMUIsSUFBTyxtQ0FBVTtDQUFBO09BQWlDLEVBQUE7Q0FBQSxDQUFBLElBQUEsR0FBQTtDQUFBO0FBQ2xELElBQUksdUJBQXNCO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFB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
|