@sdkgen/node-runtime 0.0.0-dev.20230109134521 → 0.0.0-dev.20230109212108
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/dist/spec/error.spec.d.ts +1 -0
- package/dist/spec/rest/rest.spec.d.ts +1 -0
- package/dist/spec/runtime/errors.spec.d.ts +1 -0
- package/dist/spec/runtime/middleware.spec.d.ts +1 -0
- package/dist/spec/simple/legacyNodeClient.d.ts +17 -0
- package/dist/spec/simple/simple.spec.d.ts +1 -0
- package/dist/spec/types.d.ts +1 -0
- package/dist/spec/types.spec.d.ts +1 -0
- package/dist/src/api-config.d.ts +14 -0
- package/dist/src/context.d.ts +38 -0
- package/dist/src/encode-decode.d.ts +32 -0
- package/dist/src/error.d.ts +18 -0
- package/dist/src/execute.d.ts +3 -0
- package/dist/src/http-client.d.ts +17 -0
- package/dist/src/http-server.d.ts +37 -0
- package/dist/src/http-server.js +26 -27
- package/dist/src/index.d.ts +11 -0
- package/dist/src/new-interface.d.ts +156 -0
- package/dist/src/swagger.d.ts +2 -0
- package/dist/src/test-wrapper.d.ts +2 -0
- package/dist/src/utils.d.ts +6 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +9 -10
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface User {
|
|
2
|
+
name: string;
|
|
3
|
+
age: number;
|
|
4
|
+
}
|
|
5
|
+
export type ErrorType = "Fatal" | "Connection";
|
|
6
|
+
export declare class ApiClient {
|
|
7
|
+
private baseUrl;
|
|
8
|
+
private useStaging;
|
|
9
|
+
deviceId: string | null;
|
|
10
|
+
constructor(baseUrl?: string, useStaging?: boolean);
|
|
11
|
+
getUser(id: string): Promise<User>;
|
|
12
|
+
ping(): Promise<string>;
|
|
13
|
+
setPushToken(token: string): Promise<void>;
|
|
14
|
+
private device;
|
|
15
|
+
private randomBytesHex;
|
|
16
|
+
private makeRequest;
|
|
17
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AstJson, AstRoot } from "@sdkgen/parser";
|
|
2
|
+
import type { Context, ContextReply } from "./context.js";
|
|
3
|
+
import type { DeepReadonly } from "./utils.js";
|
|
4
|
+
export type Middleware<ExtraContextT> = (ctx: Context & ExtraContextT, next: () => Promise<ContextReply>) => Promise<ContextReply>;
|
|
5
|
+
export declare class BaseApiConfig<ExtraContextT = unknown> {
|
|
6
|
+
private _ast;
|
|
7
|
+
get ast(): AstRoot;
|
|
8
|
+
astJson: DeepReadonly<AstJson>;
|
|
9
|
+
fn: {
|
|
10
|
+
[name: string]: ((ctx: Context & ExtraContextT, args: any) => Promise<any>) | undefined;
|
|
11
|
+
};
|
|
12
|
+
readonly middlewares: Array<Middleware<ExtraContextT>>;
|
|
13
|
+
use(middleware: Middleware<ExtraContextT>): void;
|
|
14
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
+
import type { IncomingHttpHeaders, OutgoingHttpHeader } from "http";
|
|
4
|
+
import type { Readable } from "stream";
|
|
5
|
+
export interface ContextRequest {
|
|
6
|
+
args: Record<string, unknown>;
|
|
7
|
+
deviceInfo: {
|
|
8
|
+
id: string;
|
|
9
|
+
language: string | null;
|
|
10
|
+
platform: unknown;
|
|
11
|
+
timezone: string | null;
|
|
12
|
+
type: string;
|
|
13
|
+
version: string | null;
|
|
14
|
+
fingerprint: string | null;
|
|
15
|
+
};
|
|
16
|
+
extra: Record<string, unknown>;
|
|
17
|
+
headers: IncomingHttpHeaders;
|
|
18
|
+
id: string;
|
|
19
|
+
ip: string;
|
|
20
|
+
name: string;
|
|
21
|
+
version: number;
|
|
22
|
+
files: Array<{
|
|
23
|
+
name: string;
|
|
24
|
+
contents: Readable;
|
|
25
|
+
}>;
|
|
26
|
+
}
|
|
27
|
+
export interface ContextReply {
|
|
28
|
+
error?: unknown;
|
|
29
|
+
result?: unknown;
|
|
30
|
+
}
|
|
31
|
+
export interface ContextResponse {
|
|
32
|
+
statusCode?: number;
|
|
33
|
+
headers: Map<string, OutgoingHttpHeader>;
|
|
34
|
+
}
|
|
35
|
+
export interface Context {
|
|
36
|
+
request: ContextRequest;
|
|
37
|
+
response: ContextResponse;
|
|
38
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import type { AstJson, TypeDescription } from "@sdkgen/parser";
|
|
3
|
+
import { Decimal } from "decimal.js";
|
|
4
|
+
import type { DeepReadonly } from "./utils.js";
|
|
5
|
+
type TypeTable = AstJson["typeTable"];
|
|
6
|
+
type ExpandRecursively<T> = T extends object ? (T extends infer O ? {
|
|
7
|
+
[K in keyof O]: ExpandRecursively<O[K]>;
|
|
8
|
+
} : never) : T;
|
|
9
|
+
type JsonType = number | string | boolean | null | JsonType[] | {
|
|
10
|
+
[Key in string]: JsonType;
|
|
11
|
+
};
|
|
12
|
+
type AnyDecodedType = number | string | boolean | null | bigint | Decimal | Buffer | Date | AnyDecodedType[] | {
|
|
13
|
+
[Key in string]: AnyDecodedType;
|
|
14
|
+
};
|
|
15
|
+
type DecodedType<Type, Table extends object> = TypeDescription extends Type ? AnyDecodedType : Type extends "string" | "email" | "html" | "xml" | "url" | "hex" | "uuid" | "base64" | "cpf" | "cnpj" ? string : Type extends "json" ? JsonType : Type extends "bool" ? boolean : Type extends "void" ? null : Type extends "int" | "uint" | "float" | "money" ? number : Type extends "bigint" ? bigint : Type extends "bytes" ? Buffer : Type extends "decimal" ? Decimal : Type extends "date" | "datetime" ? Date : Type extends `${infer X}?` ? DecodedType<X, Table> | null : Type extends `${infer X}[]` ? Array<DecodedType<X, Table>> : Type extends Array<string | [string, string]> ? DecodedEnumType<Type, Table> : Type extends ReadonlyArray<string | readonly [string, string]> ? DecodedEnumType<Type, Table> : Type extends object ? {
|
|
16
|
+
-readonly [Key in keyof Type]: DecodedType<Type[Key], Table>;
|
|
17
|
+
} : object extends Table ? never : Type extends keyof Table ? DecodedType<Table[Type], Table> : never;
|
|
18
|
+
type DecodedEnumType<Type extends Array<string | [string, string]> | ReadonlyArray<string | readonly [string, string]>, Table extends object> = Type[number] extends string ? Type[number] : DecodeTaggedEnumValueType<Type[number], Table>;
|
|
19
|
+
type DecodeTaggedEnumValueType<ValueType extends string | [string, string] | readonly [string, string], Table extends object> = ValueType extends string ? {
|
|
20
|
+
tag: ValueType;
|
|
21
|
+
} : ValueType extends [infer Tag, infer Struct] ? ExpandRecursively<{
|
|
22
|
+
tag: Tag;
|
|
23
|
+
} & DecodedType<Struct, Table>> : ValueType extends readonly [infer Tag, infer Struct] ? ExpandRecursively<{
|
|
24
|
+
tag: Tag;
|
|
25
|
+
} & DecodedType<Struct, Table>> : never;
|
|
26
|
+
type EncodedType<Type, Table extends object> = TypeDescription extends Type ? JsonType : Type extends "string" | "email" | "html" | "xml" | "url" | "hex" | "uuid" | "base64" | "cpf" | "cnpj" ? string : Type extends "json" ? JsonType : Type extends "bool" ? boolean : Type extends "void" ? null : Type extends "int" | "uint" | "float" | "money" ? number : Type extends "bigint" | "bytes" | "date" | "datetime" | "decimal" ? string : Type extends `${infer X}?` ? EncodedType<X, Table> | null : Type extends `${infer X}[]` ? Array<EncodedType<X, Table>> : Type extends Array<string | [string, string]> ? EnumEncodedValueType<Type[number], Table> : Type extends ReadonlyArray<string | readonly [string, string]> ? EnumEncodedValueType<Type[number], Table> : Type extends object ? {
|
|
27
|
+
-readonly [Key in keyof Type]: EncodedType<Type[Key], Table>;
|
|
28
|
+
} : object extends Table ? never : Type extends keyof Table ? EncodedType<Table[Type], Table> : never;
|
|
29
|
+
type EnumEncodedValueType<ValueType extends string | [string, string] | readonly [string, string], Table extends object> = ValueType extends string ? ValueType : ValueType extends [infer Tag, infer Struct] ? [Tag, EncodedType<Struct, Table>] : ValueType extends readonly [infer Tag, infer Struct] ? [Tag, EncodedType<Struct, Table>] : never;
|
|
30
|
+
export declare function encode<Table extends DeepReadonly<TypeTable>, Type extends DeepReadonly<TypeDescription>>(typeTable: Table, path: string, type: Type, value: unknown): EncodedType<Type, Table>;
|
|
31
|
+
export declare function decode<Table extends DeepReadonly<TypeTable>, Type extends DeepReadonly<TypeDescription>>(typeTable: Table, path: string, type: Type, value: unknown): DecodedType<Type, Table>;
|
|
32
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare abstract class SdkgenError extends Error {
|
|
2
|
+
get type(): string;
|
|
3
|
+
toJSON(): {
|
|
4
|
+
message: string;
|
|
5
|
+
type: string;
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export declare abstract class SdkgenErrorWithData<DataType> extends SdkgenError {
|
|
9
|
+
data: DataType;
|
|
10
|
+
constructor(message: string, data: DataType);
|
|
11
|
+
toJSON(): {
|
|
12
|
+
data: DataType;
|
|
13
|
+
message: string;
|
|
14
|
+
type: string;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export declare class Fatal extends SdkgenError {
|
|
18
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { AstJson } from "@sdkgen/parser";
|
|
2
|
+
import type { PartialDeep } from "type-fest";
|
|
3
|
+
import type { Context } from "./context.js";
|
|
4
|
+
import type { SdkgenError, SdkgenErrorWithData } from "./error.js";
|
|
5
|
+
import type { DeepReadonly } from "./utils.js";
|
|
6
|
+
interface ErrClasses {
|
|
7
|
+
[className: string]: (new (message: string, data: any) => SdkgenErrorWithData<any>) | (new (message: string) => SdkgenError) | undefined;
|
|
8
|
+
}
|
|
9
|
+
export declare class SdkgenHttpClient {
|
|
10
|
+
private astJson;
|
|
11
|
+
private errClasses;
|
|
12
|
+
private baseUrl;
|
|
13
|
+
extra: Map<string, unknown>;
|
|
14
|
+
constructor(baseUrl: string, astJson: DeepReadonly<AstJson>, errClasses: ErrClasses);
|
|
15
|
+
makeRequest(ctx: PartialDeep<Context> | null, functionName: string, args: unknown): Promise<any>;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
+
import type { IncomingMessage, Server, ServerResponse } from "http";
|
|
4
|
+
import type { BaseApiConfig } from "./api-config.js";
|
|
5
|
+
export declare class SdkgenHttpServer<ExtraContextT = unknown> {
|
|
6
|
+
apiConfig: BaseApiConfig<ExtraContextT>;
|
|
7
|
+
httpServer: Server;
|
|
8
|
+
private readonly headers;
|
|
9
|
+
private readonly healthChecks;
|
|
10
|
+
private handlers;
|
|
11
|
+
dynamicCorsOrigin: boolean;
|
|
12
|
+
introspection: boolean;
|
|
13
|
+
log: (message: string) => void;
|
|
14
|
+
private hasSwagger;
|
|
15
|
+
private ignoredUrlPrefix;
|
|
16
|
+
private extraContext;
|
|
17
|
+
constructor(apiConfig: BaseApiConfig<ExtraContextT>, ...maybeExtraContext: {} extends ExtraContextT ? [{}?] : [ExtraContextT]);
|
|
18
|
+
registerHealthCheck(healthCheck: () => Promise<boolean>): void;
|
|
19
|
+
ignoreUrlPrefix(urlPrefix: string): void;
|
|
20
|
+
listen(port?: number): Promise<void>;
|
|
21
|
+
close(): Promise<void>;
|
|
22
|
+
private enableCors;
|
|
23
|
+
addHeader(header: string, value: string): void;
|
|
24
|
+
addHttpHandler(method: string, matcher: string | RegExp, handler: (req: IncomingMessage, res: ServerResponse, body: Buffer) => void): void;
|
|
25
|
+
private findBestHandler;
|
|
26
|
+
private attachRestHandlers;
|
|
27
|
+
handleRequest: (req: IncomingMessage, res: ServerResponse) => void;
|
|
28
|
+
private handleRequestWithBody;
|
|
29
|
+
private executeRequest;
|
|
30
|
+
private parseRequest;
|
|
31
|
+
private identifyRequestVersion;
|
|
32
|
+
private parseRequestV1;
|
|
33
|
+
private parseRequestV2;
|
|
34
|
+
private parseRequestV3;
|
|
35
|
+
private makeResponseError;
|
|
36
|
+
private writeReply;
|
|
37
|
+
}
|
package/dist/src/http-server.js
CHANGED
|
@@ -10,13 +10,12 @@ import { generateDartClientSource } from "@sdkgen/dart-generator";
|
|
|
10
10
|
import { generateFSharpServerSource } from "@sdkgen/fsharp-generator";
|
|
11
11
|
import { generateAndroidClientSource } from "@sdkgen/kotlin-generator";
|
|
12
12
|
import { DecimalPrimitiveType, Base64PrimitiveType, BigIntPrimitiveType, BoolPrimitiveType, BytesPrimitiveType, CnpjPrimitiveType, CpfPrimitiveType, DatePrimitiveType, DateTimePrimitiveType, FloatPrimitiveType, HexPrimitiveType, HtmlPrimitiveType, IntPrimitiveType, MoneyPrimitiveType, OptionalType, RestAnnotation, StringPrimitiveType, UIntPrimitiveType, UuidPrimitiveType, VoidPrimitiveType, XmlPrimitiveType, } from "@sdkgen/parser";
|
|
13
|
-
import { PLAYGROUND_PUBLIC_PATH } from "@sdkgen/playground";
|
|
13
|
+
// import { PLAYGROUND_PUBLIC_PATH } from "@sdkgen/playground";
|
|
14
14
|
import { generateSwiftClientSource } from "@sdkgen/swift-generator";
|
|
15
15
|
import { generateBrowserClientSource, generateNodeClientSource, generateNodeServerSource } from "@sdkgen/typescript-generator";
|
|
16
16
|
import Busboy from "busboy";
|
|
17
17
|
import { fileTypeFromBuffer } from "file-type";
|
|
18
18
|
import { getClientIp } from "request-ip";
|
|
19
|
-
import staticFilesHandler from "serve-handler";
|
|
20
19
|
import { decode, encode } from "./encode-decode.js";
|
|
21
20
|
import { Fatal } from "./error.js";
|
|
22
21
|
import { executeRequest } from "./execute.js";
|
|
@@ -121,27 +120,27 @@ export class SdkgenHttpServer {
|
|
|
121
120
|
res.write(JSON.stringify(apiConfig.astJson));
|
|
122
121
|
res.end();
|
|
123
122
|
});
|
|
124
|
-
this.addHttpHandler("GET", /^\/playground.*/u, (req, res) => {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
});
|
|
123
|
+
// this.addHttpHandler("GET", /^\/playground.*/u, (req, res) => {
|
|
124
|
+
// if (!this.introspection) {
|
|
125
|
+
// res.statusCode = 404;
|
|
126
|
+
// res.end();
|
|
127
|
+
// return;
|
|
128
|
+
// }
|
|
129
|
+
// if (req.url) {
|
|
130
|
+
// req.url = req.url.endsWith("/playground") ? req.url.replace(/\/playground/u, "/index.html") : req.url.replace(/\/playground/u, "");
|
|
131
|
+
// }
|
|
132
|
+
// staticFilesHandler(req, res, {
|
|
133
|
+
// cleanUrls: false,
|
|
134
|
+
// directoryListing: false,
|
|
135
|
+
// etag: true,
|
|
136
|
+
// public: PLAYGROUND_PUBLIC_PATH,
|
|
137
|
+
// }).catch(e => {
|
|
138
|
+
// console.error(e);
|
|
139
|
+
// res.statusCode = 500;
|
|
140
|
+
// res.write(`${e}`);
|
|
141
|
+
// res.end();
|
|
142
|
+
// });
|
|
143
|
+
// });
|
|
145
144
|
}
|
|
146
145
|
registerHealthCheck(healthCheck) {
|
|
147
146
|
this.healthChecks.push(healthCheck);
|
|
@@ -169,9 +168,9 @@ export class SdkgenHttpServer {
|
|
|
169
168
|
else {
|
|
170
169
|
console.log(`\nListening on port ${addr.port} (${addr.address})`);
|
|
171
170
|
}
|
|
172
|
-
if (this.introspection) {
|
|
173
|
-
|
|
174
|
-
}
|
|
171
|
+
// if (this.introspection) {
|
|
172
|
+
// console.log(`Playground: http://${urlHost}/playground`);
|
|
173
|
+
// }
|
|
175
174
|
if (this.hasSwagger) {
|
|
176
175
|
console.log(`Swagger UI: http://${urlHost}/swagger`);
|
|
177
176
|
}
|
|
@@ -925,4 +924,4 @@ export class SdkgenHttpServer {
|
|
|
925
924
|
}
|
|
926
925
|
}
|
|
927
926
|
}
|
|
928
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaHR0cC1zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNyQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRWpFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLElBQUksQ0FBQztBQUM5QixPQUFPLEVBQUUsS0FBSyxJQUFJLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLElBQUksUUFBUSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFakMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkUsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsZ0JB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Q0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztpQkFDdEY7Z0JBRUQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDOUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDVixNQUFNO2FBQ1A7WUFFRCxPQUFPLENBQUMsQ0FBQztnQkFDUCxHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztnQkFDckIsR0FBRyxDQUFDLEtBQUssQ0FDUCxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUNiLEtBQUssRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO2lCQUNuRixDQUFDLENBQ0gsQ0FBQztnQkFDRixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ1YsT0FBTzthQUNSO1NBQ0Y7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IGNyZWF0ZVJlYWRTdHJlYW0sIGNyZWF0ZVdyaXRlU3RyZWFtLCB1bmxpbmsgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB0eXBlIHsgSW5jb21pbmdNZXNzYWdlLCBTZXJ2ZXIsIFNlcnZlclJlc3BvbnNlIH0gZnJvbSBcImh0dHBcIjtcbmltcG9ydCB7IGNyZWF0ZVNlcnZlciB9IGZyb20gXCJodHRwXCI7XG5pbXBvcnQgdHlwZSB7IEFkZHJlc3NJbmZvIH0gZnJvbSBcIm5ldFwiO1xuaW1wb3J0IHsgaG9zdG5hbWUgfSBmcm9tIFwib3NcIjtcbmltcG9ydCB7IHBhcnNlIGFzIHBhcnNlUXVlcnlzdHJpbmcgfSBmcm9tIFwicXVlcnlzdHJpbmdcIjtcbmltcG9ydCB7IHBhcnNlIGFzIHBhcnNlVXJsIH0gZnJvbSBcInVybFwiO1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSBcInV0aWxcIjtcblxuaW1wb3J0IHsgZ2VuZXJhdGVDU2hhcnBTZXJ2ZXJTb3VyY2UgfSBmcm9tIFwiQHNka2dlbi9jc2hhcnAtZ2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZURhcnRDbGllbnRTb3VyY2UgfSBmcm9tIFwiQHNka2dlbi9kYXJ0LWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVGU2hhcnBTZXJ2ZXJTb3VyY2UgfSBmcm9tIFwiQHNka2dlbi9mc2hhcnAtZ2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZUFuZHJvaWRDbGllbnRTb3VyY2UgfSBmcm9tIFwiQHNka2dlbi9rb3RsaW4tZ2VuZXJhdG9yXCI7XG5pbXBvcnQgdHlwZSB7IEFzdFJvb3QgfSBmcm9tIFwiQHNka2dlbi9wYXJzZXJcIjtcbmltcG9ydCB7XG4gIERlY2ltYWxQcmltaXRpdmVUeXBlLFxuICBCYXNlNjRQcmltaXRpdmVUeXBlLFxuICBCaWdJbnRQcmltaXRpdmVUeXBlLFxuICBCb29sUHJpbWl0aXZlVHlwZSxcbiAgQnl0ZXNQcmltaXRpdmVUeXBlLFxuICBDbnBqUHJpbWl0aXZlVHlwZSxcbiAgQ3BmUHJpbWl0aXZlVHlwZSxcbiAgRGF0ZVByaW1pdGl2ZVR5cGUsXG4gIERhdGVUaW1lUHJpbWl0aXZlVHlwZSxcbiAgRmxvYXRQcmltaXRpdmVUeXBlLFxuICBIZXhQcmltaXRpdmVUeXBlLFxuICBIdG1sUHJpbWl0aXZlVHlwZSxcbiAgSW50UHJpbWl0aXZlVHlwZSxcbiAgTW9uZXlQcmltaXRpdmVUeXBlLFxuICBPcHRpb25hbFR5cGUsXG4gIFJlc3RBbm5vdGF0aW9uLFxuICBTdHJpbmdQcmltaXRpdmVUeXBlLFxuICBVSW50UHJpbWl0aXZlVHlwZSxcbiAgVXVpZFByaW1pdGl2ZVR5cGUsXG4gIFZvaWRQcmltaXRpdmVUeXBlLFxuICBYbWxQcmltaXRpdmVUeXBlLFxufSBmcm9tIFwiQHNka2dlbi9wYXJzZXJcIjtcbmltcG9ydCB7IFBMQVlHUk9VTkRfUFVCTElDX1BBVEggfSBmcm9tIFwiQHNka2dlbi9wbGF5Z3JvdW5kXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZVN3aWZ0Q2xpZW50U291cmNlIH0gZnJvbSBcIkBzZGtnZW4vc3dpZnQtZ2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZUJyb3dzZXJDbGllbnRTb3VyY2UsIGdlbmVyYXRlTm9kZUNsaWVudFNvdXJjZSwgZ2VuZXJhdGVOb2RlU2VydmVyU291cmNlIH0gZnJvbSBcIkBzZGtnZW4vdHlwZXNjcmlwdC1nZW5lcmF0b3JcIjtcbmltcG9ydCBCdXNib3kgZnJvbSBcImJ1c2JveVwiO1xuaW1wb3J0IHsgZmlsZVR5cGVGcm9tQnVmZmVyIH0gZnJvbSBcImZpbGUtdHlwZVwiO1xuaW1wb3J0IHsgZ2V0Q2xpZW50SXAgfSBmcm9tIFwicmVxdWVzdC1pcFwiO1xuaW1wb3J0IHN0YXRpY0ZpbGVzSGFuZGxlciBmcm9tIFwic2VydmUtaGFuZGxlclwiO1xuXG5pbXBvcnQgdHlwZSB7IEJhc2VBcGlDb25maWcgfSBmcm9tIFwiLi9hcGktY29uZmlnLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRleHQsIENvbnRleHRSZXBseSwgQ29udGV4dFJlcXVlc3QgfSBmcm9tIFwiLi9jb250ZXh0LmpzXCI7XG5pbXBvcnQgeyBkZWNvZGUsIGVuY29kZSB9IGZyb20gXCIuL2VuY29kZS1kZWNvZGUuanNcIjtcbmltcG9ydCB7IEZhdGFsIH0gZnJvbSBcIi4vZXJyb3IuanNcIjtcbmltcG9ydCB7IGV4ZWN1dGVSZXF1ZXN0IH0gZnJvbSBcIi4vZXhlY3V0ZS5qc1wiO1xuaW1wb3J0IHsgc2V0dXBTd2FnZ2VyIH0gZnJvbSBcIi4vc3dhZ2dlci5qc1wiO1xuaW1wb3J0IHsgaGFzIH0gZnJvbSBcIi4vdXRpbHMuanNcIjtcblxuZXhwb3J0IGNsYXNzIFNka2dlbkh0dHBTZXJ2ZXI8RXh0cmFDb250ZXh0VCA9IHVua25vd24+IHtcbiAgcHVibGljIGh0dHBTZXJ2ZXI6IFNlcnZlcjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGhlYWRlcnMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaGVhbHRoQ2hlY2tzOiBBcnJheTwoKSA9PiBQcm9taXNlPGJvb2xlYW4+PiA9IFtdO1xuXG4gIHByaXZhdGUgaGFuZGxlcnM6IEFycmF5PHtcbiAgICBtZXRob2Q6IHN0cmluZztcbiAgICBtYXRjaGVyOiBzdHJpbmcgfCBSZWdFeHA7XG4gICAgaGFuZGxlcihyZXE6IEluY29taW5nTWVzc2FnZSwgcmVzOiBTZXJ2ZXJSZXNwb25zZSwgYm9keTogQnVmZmVyKTogdm9pZDtcbiAgfT4gPSBbXTtcblxuICBwdWJsaWMgZHluYW1pY0NvcnNPcmlnaW4gPSB0cnVlO1xuXG4gIHB1YmxpYyBpbnRyb3NwZWN0aW9uID0gdHJ1ZTtcblxuICBwdWJsaWMgbG9nID0gKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKX0gJHttZXNzYWdlfWApO1xuICB9O1xuXG4gIHByaXZhdGUgaGFzU3dhZ2dlciA9IGZhbHNlO1xuXG4gIHByaXZhdGUgaWdub3JlZFVybFByZWZpeCA9IFwiXCI7XG5cbiAgcHJpdmF0ZSBleHRyYUNvbnRleHQ6IEV4dHJhQ29udGV4dFQ7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGFwaUNvbmZpZzogQmFzZUFwaUNvbmZpZzxFeHRyYUNvbnRleHRUPiwgLi4ubWF5YmVFeHRyYUNvbnRleHQ6IHt9IGV4dGVuZHMgRXh0cmFDb250ZXh0VCA/IFt7fT9dIDogW0V4dHJhQ29udGV4dFRdKSB7XG4gICAgdGhpcy5leHRyYUNvbnRleHQgPSAobWF5YmVFeHRyYUNvbnRleHRbMF0gPz8ge30pIGFzIEV4dHJhQ29udGV4dFQ7XG4gICAgdGhpcy5odHRwU2VydmVyID0gY3JlYXRlU2VydmVyKHRoaXMuaGFuZGxlUmVxdWVzdC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmVuYWJsZUNvcnMoKTtcbiAgICB0aGlzLmF0dGFjaFJlc3RIYW5kbGVycygpO1xuXG4gICAgY29uc3QgdGFyZ2V0VGFibGUgPSBbXG4gICAgICBbXCIvdGFyZ2V0cy9hbmRyb2lkL2NsaWVudC5rdFwiLCAoYXN0OiBBc3RSb290KSA9PiBnZW5lcmF0ZUFuZHJvaWRDbGllbnRTb3VyY2UoYXN0LCB0cnVlKV0sXG4gICAgICBbXCIvdGFyZ2V0cy9hbmRyb2lkL2NsaWVudF93aXRob3V0X2NhbGxiYWNrcy5rdFwiLCAoYXN0OiBBc3RSb290KSA9PiBnZW5lcmF0ZUFuZHJvaWRDbGllbnRTb3VyY2UoYXN0LCBmYWxzZSldLFxuICAgICAgW1wiL3RhcmdldHMvZG90bmV0L2FwaS5jc1wiLCBnZW5lcmF0ZUNTaGFycFNlcnZlclNvdXJjZV0sXG4gICAgICBbXCIvdGFyZ2V0cy9kb3RuZXQvYXBpLmZzXCIsIGdlbmVyYXRlRlNoYXJwU2VydmVyU291cmNlXSxcbiAgICAgIFtcIi90YXJnZXRzL2ZsdXR0ZXIvY2xpZW50LmRhcnRcIiwgZ2VuZXJhdGVEYXJ0Q2xpZW50U291cmNlXSxcbiAgICAgIFtcIi90YXJnZXRzL2lvcy9jbGllbnQuc3dpZnRcIiwgKGFzdDogQXN0Um9vdCkgPT4gZ2VuZXJhdGVTd2lmdENsaWVudFNvdXJjZShhc3QsIGZhbHNlKV0sXG4gICAgICBbXCIvdGFyZ2V0cy9pb3MvY2xpZW50LXJ4LnN3aWZ0XCIsIChhc3Q6IEFzdFJvb3QpID0+IGdlbmVyYXRlU3dpZnRDbGllbnRTb3VyY2UoYXN0LCB0cnVlKV0sXG4gICAgICBbXCIvdGFyZ2V0cy9ub2RlL2FwaS50c1wiLCBnZW5lcmF0ZU5vZGVTZXJ2ZXJTb3VyY2VdLFxuICAgICAgW1wiL3RhcmdldHMvbm9kZS9jbGllbnQudHNcIiwgZ2VuZXJhdGVOb2RlQ2xpZW50U291cmNlXSxcbiAgICAgIFtcIi90YXJnZXRzL3dlYi9jbGllbnQudHNcIiwgZ2VuZXJhdGVCcm93c2VyQ2xpZW50U291cmNlXSxcbiAgICBdIGFzIGNvbnN0O1xuXG4gICAgZm9yIChjb25zdCBbcGF0aCwgZ2VuZXJhdGVGbl0gb2YgdGFyZ2V0VGFibGUpIHtcbiAgICAgIHRoaXMuYWRkSHR0cEhhbmRsZXIoXCJHRVRcIiwgcGF0aCwgKF9yZXEsIHJlcykgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaW50cm9zcGVjdGlvbikge1xuICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNDA0O1xuICAgICAgICAgIHJlcy5lbmQoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIik7XG4gICAgICAgICAgcmVzLndyaXRlKGdlbmVyYXRlRm4odGhpcy5hcGlDb25maWcuYXN0KSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNTAwO1xuICAgICAgICAgIHJlcy53cml0ZShgJHtlfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRIdHRwSGFuZGxlcihcIkdFVFwiLCBcIi9hc3QuanNvblwiLCAoX3JlcSwgcmVzKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuaW50cm9zcGVjdGlvbikge1xuICAgICAgICByZXMuc3RhdHVzQ29kZSA9IDQwNDtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgcmVzLndyaXRlKEpTT04uc3RyaW5naWZ5KGFwaUNvbmZpZy5hc3RKc29uKSk7XG4gICAgICByZXMuZW5kKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZEh0dHBIYW5kbGVyKFwiR0VUXCIsIC9eXFwvcGxheWdyb3VuZC4qL3UsIChyZXEsIHJlcykgPT4ge1xuICAgICAgaWYgKCF0aGlzLmludHJvc3BlY3Rpb24pIHtcbiAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSA0MDQ7XG4gICAgICAgIHJlcy5lbmQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVxLnVybCkge1xuICAgICAgICByZXEudXJsID0gcmVxLnVybC5lbmRzV2l0aChcIi9wbGF5Z3JvdW5kXCIpID8gcmVxLnVybC5yZXBsYWNlKC9cXC9wbGF5Z3JvdW5kL3UsIFwiL2luZGV4Lmh0bWxcIikgOiByZXEudXJsLnJlcGxhY2UoL1xcL3BsYXlncm91bmQvdSwgXCJcIik7XG4gICAgICB9XG5cbiAgICAgIHN0YXRpY0ZpbGVzSGFuZGxlcihyZXEsIHJlcywge1xuICAgICAgICBjbGVhblVybHM6IGZhbHNlLFxuICAgICAgICBkaXJlY3RvcnlMaXN0aW5nOiBmYWxzZSxcbiAgICAgICAgZXRhZzogdHJ1ZSxcbiAgICAgICAgcHVibGljOiBQTEFZR1JPVU5EX1BVQkxJQ19QQVRILFxuICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNTAwO1xuICAgICAgICByZXMud3JpdGUoYCR7ZX1gKTtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZWdpc3RlckhlYWx0aENoZWNrKGhlYWx0aENoZWNrOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+KTogdm9pZCB7XG4gICAgdGhpcy5oZWFsdGhDaGVja3MucHVzaChoZWFsdGhDaGVjayk7XG4gIH1cblxuICBpZ25vcmVVcmxQcmVmaXgodXJsUHJlZml4OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmlnbm9yZWRVcmxQcmVmaXggPSB1cmxQcmVmaXg7XG4gIH1cblxuICBhc3luYyBsaXN0ZW4ocG9ydCA9IDgwMDApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICB0aGlzLmh0dHBTZXJ2ZXIubGlzdGVuKHBvcnQsICgpID0+IHtcbiAgICAgICAgY29uc3QgYWRkciA9IHRoaXMuaHR0cFNlcnZlci5hZGRyZXNzKCkgYXMgQWRkcmVzc0luZm87XG4gICAgICAgIGxldCB1cmxIb3N0OiBzdHJpbmc7XG5cbiAgICAgICAgaWYgKGFkZHIuYWRkcmVzcyA9PT0gXCI6OlwiKSB7XG4gICAgICAgICAgdXJsSG9zdCA9IGBsb2NhbGhvc3Q6JHthZGRyLnBvcnR9YDtcbiAgICAgICAgfSBlbHNlIGlmIChhZGRyLmZhbWlseSA9PT0gXCJpcHY2XCIpIHtcbiAgICAgICAgICB1cmxIb3N0ID0gYFske2FkZHIuYWRkcmVzc31dOiR7YWRkci5wb3J0fWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXJsSG9zdCA9IGAke2FkZHIuYWRkcmVzc306JHthZGRyLnBvcnR9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZGRyLmFkZHJlc3MgPT09IFwiOjpcIiB8fCBhZGRyLmFkZHJlc3MgPT09IFwiMC4wLjAuMFwiKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYFxcbkxpc3RlbmluZyBvbiBwb3J0ICR7YWRkci5wb3J0fWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBcXG5MaXN0ZW5pbmcgb24gcG9ydCAke2FkZHIucG9ydH0gKCR7YWRkci5hZGRyZXNzfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmludHJvc3BlY3Rpb24pIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgUGxheWdyb3VuZDogaHR0cDovLyR7dXJsSG9zdH0vcGxheWdyb3VuZGApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzU3dhZ2dlcikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBTd2FnZ2VyIFVJOiBodHRwOi8vJHt1cmxIb3N0fS9zd2FnZ2VyYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZyhcIlwiKTtcblxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBwcm9taXNpZnkodGhpcy5odHRwU2VydmVyLmNsb3NlLmJpbmQodGhpcy5odHRwU2VydmVyKSkoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlQ29ycygpIHtcbiAgICB0aGlzLmFkZEhlYWRlcihcIkFjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHNcIiwgXCJERUxFVEUsIEhFQUQsIFBVVCwgUE9TVCwgUEFUQ0gsIEdFVCwgT1BUSU9OU1wiKTtcbiAgICB0aGlzLmFkZEhlYWRlcihcIkFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnNcIiwgXCJDb250ZW50LVR5cGVcIik7XG4gICAgdGhpcy5hZGRIZWFkZXIoXCJBY2Nlc3MtQ29udHJvbC1NYXgtQWdlXCIsIFwiODY0MDBcIik7XG4gIH1cblxuICBhZGRIZWFkZXIoaGVhZGVyOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjbGVhbkhlYWRlciA9IGhlYWRlci50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuaGVhZGVycy5nZXQoY2xlYW5IZWFkZXIpO1xuXG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICBpZiAoIWV4aXN0aW5nLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KGNsZWFuSGVhZGVyLCBgJHtleGlzdGluZ30sICR7dmFsdWV9YCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVhZGVycy5zZXQoY2xlYW5IZWFkZXIsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBhZGRIdHRwSGFuZGxlcihtZXRob2Q6IHN0cmluZywgbWF0Y2hlcjogc3RyaW5nIHwgUmVnRXhwLCBoYW5kbGVyOiAocmVxOiBJbmNvbWluZ01lc3NhZ2UsIHJlczogU2VydmVyUmVzcG9uc2UsIGJvZHk6IEJ1ZmZlcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlcnMucHVzaCh7IGhhbmRsZXIsIG1hdGNoZXIsIG1ldGhvZCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZEJlc3RIYW5kbGVyKHBhdGg6IHN0cmluZywgcmVxOiBJbmNvbWluZ01lc3NhZ2UpIHtcbiAgICBjb25zdCBtYXRjaGluZ0hhbmRsZXJzID0gdGhpcy5oYW5kbGVyc1xuICAgICAgLmZpbHRlcigoeyBtZXRob2QgfSkgPT4gbWV0aG9kID09PSByZXEubWV0aG9kKVxuICAgICAgLmZpbHRlcigoeyBtYXRjaGVyIH0pID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXRjaGVyID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgcmV0dXJuIG1hdGNoZXIgPT09IHBhdGg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWF0Y2hlci5leGVjKHBhdGgpPy5bMF0gPT09IHBhdGg7XG4gICAgICB9KVxuICAgICAgLnNvcnQoKHsgbWF0Y2hlcjogZmlyc3QgfSwgeyBtYXRjaGVyOiBzZWNvbmQgfSkgPT4ge1xuICAgICAgICAvLyBQcmVmZXIgc3RyaW5nIG1hdGNoZXMgaW5zdGVhZCBvZiBSZWdleHAgbWF0Y2hlc1xuICAgICAgICBpZiAodHlwZW9mIGZpcnN0ID09PSBcInN0cmluZ1wiICYmIHR5cGVvZiBzZWNvbmQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZmlyc3QgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNlY29uZCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3RNYXRjaCA9IGZpcnN0LmV4ZWMocGF0aCk7XG4gICAgICAgIGNvbnN0IHNlY29uZE1hdGNoID0gc2Vjb25kLmV4ZWMocGF0aCk7XG5cbiAgICAgICAgaWYgKCFmaXJzdE1hdGNoKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzZWNvbmRNYXRjaCkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29tcHV0ZSBob3cgbWFueSBjaGFyYWN0ZXJzIHdlcmUgTk9UIHBhcnQgb2YgYSBjYXB0dXJlIGdyb3VwXG4gICAgICAgIGNvbnN0IGZpcnN0TGVuZ3RoID0gZmlyc3RNYXRjaFswXS5sZW5ndGggLSBmaXJzdE1hdGNoLnNsaWNlKDEpLnJlZHVjZSgoYWNjLCBjdXIpID0+IGFjYyArIGN1ci5sZW5ndGgsIDApO1xuICAgICAgICBjb25zdCBzZWNvbmRMZW5ndGggPSBzZWNvbmRNYXRjaFswXS5sZW5ndGggLSBzZWNvbmRNYXRjaC5zbGljZSgxKS5yZWR1Y2UoKGFjYywgY3VyKSA9PiBhY2MgKyBjdXIubGVuZ3RoLCAwKTtcblxuICAgICAgICAvLyBQcmVmZXIgdGhlIG1heGltdW0gbnVtYmVyIG9mIG5vbi1jYXB0dXJlZCBjaGFyYWN0ZXJzXG4gICAgICAgIHJldHVybiBzZWNvbmRMZW5ndGggLSBmaXJzdExlbmd0aDtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIG1hdGNoaW5nSGFuZGxlcnMubGVuZ3RoID8gbWF0Y2hpbmdIYW5kbGVyc1swXSA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGF0dGFjaFJlc3RIYW5kbGVycygpIHtcbiAgICBmdW5jdGlvbiBlc2NhcGVSZWdFeHAoc3RyOiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2d1LCBcIlxcXFwkJlwiKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG9wIG9mIHRoaXMuYXBpQ29uZmlnLmFzdC5vcGVyYXRpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IGFubiBvZiBvcC5hbm5vdGF0aW9ucykge1xuICAgICAgICBpZiAoIShhbm4gaW5zdGFuY2VvZiBSZXN0QW5ub3RhdGlvbikpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5oYXNTd2FnZ2VyKSB7XG4gICAgICAgICAgc2V0dXBTd2FnZ2VyKHRoaXMpO1xuICAgICAgICAgIHRoaXMuaGFzU3dhZ2dlciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXRoRnJhZ21lbnRzID0gYW5uLnBhdGguc3BsaXQoL1xce1xcdytcXH0vdSk7XG5cbiAgICAgICAgbGV0IHBhdGhSZWdleCA9IFwiXlwiO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aEZyYWdtZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgcGF0aFJlZ2V4ICs9IFwiKFteL10rPylcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXRoUmVnZXggKz0gZXNjYXBlUmVnRXhwKHBhdGhGcmFnbWVudHNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcGF0aFJlZ2V4ICs9IFwiLz8kXCI7XG5cbiAgICAgICAgZm9yIChjb25zdCBoZWFkZXIgb2YgYW5uLmhlYWRlcnMua2V5cygpKSB7XG4gICAgICAgICAgdGhpcy5hZGRIZWFkZXIoXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzXCIsIGhlYWRlci50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbWlzdXNlZC1wcm9taXNlc1xuICAgICAgICB0aGlzLmFkZEh0dHBIYW5kbGVyKGFubi5tZXRob2QsIG5ldyBSZWdFeHAocGF0aFJlZ2V4LCBcInVcIiksIGFzeW5jIChyZXEsIHJlcywgYm9keSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgICAgICAgICAgY29uc3QgZmlsZXM6IENvbnRleHRSZXF1ZXN0W1wiZmlsZXNcIl0gPSBbXTtcblxuICAgICAgICAgICAgY29uc3QgeyBwYXRobmFtZSwgcXVlcnkgfSA9IHBhcnNlVXJsKHJlcS51cmwgPz8gXCJcIik7XG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IHBhdGhuYW1lPy5tYXRjaChwYXRoUmVnZXgpO1xuXG4gICAgICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNDA0O1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNpbXBsZUFyZ3MgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nIHwgbnVsbD4oKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbm4ucGF0aFZhcmlhYmxlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICBjb25zdCBhcmdOYW1lID0gYW5uLnBhdGhWYXJpYWJsZXNbaV07XG4gICAgICAgICAgICAgIGNvbnN0IGFyZ1ZhbHVlID0gbWF0Y2hbaSArIDFdO1xuXG4gICAgICAgICAgICAgIHNpbXBsZUFyZ3Muc2V0KGFyZ05hbWUsIGFyZ1ZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGFyc2VkUXVlcnkgPSBxdWVyeSA/IHBhcnNlUXVlcnlzdHJpbmcocXVlcnkpIDoge307XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgYXJnTmFtZSBvZiBhbm4ucXVlcnlWYXJpYWJsZXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgYXJnVmFsdWUgPSBwYXJzZWRRdWVyeVthcmdOYW1lXSA/PyBudWxsO1xuXG4gICAgICAgICAgICAgIGlmIChhcmdWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc2ltcGxlQXJncy5zZXQoYXJnTmFtZSwgQXJyYXkuaXNBcnJheShhcmdWYWx1ZSkgPyBhcmdWYWx1ZS5qb2luKFwiXCIpIDogYXJnVmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtoZWFkZXJOYW1lLCBhcmdOYW1lXSBvZiBhbm4uaGVhZGVycykge1xuICAgICAgICAgICAgICBjb25zdCBhcmdWYWx1ZSA9IHJlcS5oZWFkZXJzW2hlYWRlck5hbWUudG9Mb3dlckNhc2UoKV0gPz8gbnVsbDtcblxuICAgICAgICAgICAgICBpZiAoYXJnVmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHNpbXBsZUFyZ3Muc2V0KGFyZ05hbWUsIEFycmF5LmlzQXJyYXkoYXJnVmFsdWUpID8gYXJnVmFsdWUuam9pbihcIlwiKSA6IGFyZ1ZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFhbm4uYm9keVZhcmlhYmxlICYmIHJlcS5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdPy5tYXRjaCgvXmFwcGxpY2F0aW9uXFwveC13d3ctZm9ybS11cmxlbmNvZGVkL2l1KSkge1xuICAgICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VRdWVyeXN0cmluZyhib2R5LnRvU3RyaW5nKCkpO1xuXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgYXJnTmFtZSBvZiBhbm4ucXVlcnlWYXJpYWJsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcmdWYWx1ZSA9IHBhcnNlZEJvZHlbYXJnTmFtZV0gPz8gbnVsbDtcblxuICAgICAgICAgICAgICAgIGlmIChhcmdWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2ltcGxlQXJncy5zZXQoYXJnTmFtZSwgQXJyYXkuaXNBcnJheShhcmdWYWx1ZSkgPyBhcmdWYWx1ZS5qb2luKFwiXCIpIDogYXJnVmFsdWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFhbm4uYm9keVZhcmlhYmxlICYmIHJlcS5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdPy5tYXRjaCgvXm11bHRpcGFydFxcL2Zvcm0tZGF0YS9pdSkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYnVzYm95ID0gQnVzYm95KHsgaGVhZGVyczogcmVxLmhlYWRlcnMgfSk7XG4gICAgICAgICAgICAgIGNvbnN0IGZpbGVQcm9taXNlczogQXJyYXk8UHJvbWlzZTx2b2lkPj4gPSBbXTtcblxuICAgICAgICAgICAgICBidXNib3kub24oXCJmaWVsZFwiLCAoZmllbGQsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGFubi5xdWVyeVZhcmlhYmxlcy5pbmNsdWRlcyhmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgIHNpbXBsZUFyZ3Muc2V0KGZpZWxkLCBgJHt2YWx1ZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGJ1c2JveS5vbihcImZpbGVcIiwgKF9maWVsZCwgc3RyZWFtLCBpbmZvKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcE5hbWUgPSByYW5kb21CeXRlcygzMikudG9TdHJpbmcoXCJoZXhcIik7XG4gICAgICAgICAgICAgICAgY29uc3Qgd3JpdGVTdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbSh0ZW1wTmFtZSk7XG5cbiAgICAgICAgICAgICAgICBmaWxlUHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJlYW0ub24oXCJlcnJvclwiLCByZWplY3QpO1xuXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtLm9uKFwiY2xvc2VcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRzID0gY3JlYXRlUmVhZFN0cmVhbSh0ZW1wTmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKHsgY29udGVudHMsIG5hbWU6IGluZm8uZmlsZW5hbWUgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjb250ZW50cy5vbihcIm9wZW5cIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rKHRlbXBOYW1lLCBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJlYW0ub24oXCJvcGVuXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucGlwZSh3cml0ZVN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIGJ1c2JveS5vbihcImZpbmlzaFwiLCByZXNvbHZlKTtcbiAgICAgICAgICAgICAgICBidXNib3kub24oXCJlcnJvclwiLCByZWplY3QpO1xuICAgICAgICAgICAgICAgIGJ1c2JveS53cml0ZShib2R5KTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoZmlsZVByb21pc2VzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYW5uLmJvZHlWYXJpYWJsZSkge1xuICAgICAgICAgICAgICBjb25zdCBhcmdOYW1lID0gYW5uLmJvZHlWYXJpYWJsZTtcbiAgICAgICAgICAgICAgY29uc3QgYXJnID0gb3AuYXJncy5maW5kKHggPT4geC5uYW1lID09PSBhcmdOYW1lKTtcblxuICAgICAgICAgICAgICBpZiAoL2FwcGxpY2F0aW9uXFwvanNvbi9pdS50ZXN0KHJlcS5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdID8/IFwiXCIpKSB7XG4gICAgICAgICAgICAgICAgYXJnc1thcmdOYW1lXSA9IEpTT04ucGFyc2UoYm9keS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcmcpIHtcbiAgICAgICAgICAgICAgICBsZXQgeyB0eXBlIH0gPSBhcmc7XG4gICAgICAgICAgICAgICAgbGV0IHNvbHZlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgaW5zdGFuY2VvZiBPcHRpb25hbFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChib2R5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzW2FyZ05hbWVdID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlLmJhc2U7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFzb2x2ZWQpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdHlwZSBpbnN0YW5jZW9mIEJvb2xQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBJbnRQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBVSW50UHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlIGluc3RhbmNlb2YgRmxvYXRQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBTdHJpbmdQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBEYXRlUHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlIGluc3RhbmNlb2YgRGF0ZVRpbWVQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBNb25leVByaW1pdGl2ZVR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSBpbnN0YW5jZW9mIERlY2ltYWxQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBCaWdJbnRQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBDcGZQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBDbnBqUHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlIGluc3RhbmNlb2YgVXVpZFByaW1pdGl2ZVR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSBpbnN0YW5jZW9mIEhleFByaW1pdGl2ZVR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSBpbnN0YW5jZW9mIEJhc2U2NFByaW1pdGl2ZVR5cGVcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBzaW1wbGVBcmdzLnNldChhcmdOYW1lLCBib2R5LnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgQnl0ZXNQcmltaXRpdmVUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbYXJnTmFtZV0gPSBib2R5LnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1thcmdOYW1lXSA9IEpTT04ucGFyc2UoYm9keS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBbYXJnTmFtZSwgYXJnVmFsdWVdIG9mIHNpbXBsZUFyZ3MpIHtcbiAgICAgICAgICAgICAgY29uc3QgYXJnID0gb3AuYXJncy5maW5kKHggPT4geC5uYW1lID09PSBhcmdOYW1lKTtcblxuICAgICAgICAgICAgICBpZiAoIWFyZykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbGV0IHsgdHlwZSB9ID0gYXJnO1xuXG4gICAgICAgICAgICAgIGlmICh0eXBlIGluc3RhbmNlb2YgT3B0aW9uYWxUeXBlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ1ZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICBhcmdzW2FyZ05hbWVdID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0eXBlID0gdHlwZS5iYXNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcmdWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGFyZ3NbYXJnTmFtZV0gPSBhcmdWYWx1ZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0eXBlIGluc3RhbmNlb2YgQm9vbFByaW1pdGl2ZVR5cGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJnVmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICAgICAgICBhcmdzW2FyZ05hbWVdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ1ZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgICAgICAgIGFyZ3NbYXJnTmFtZV0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgYXJnc1thcmdOYW1lXSA9IGFyZ1ZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgVUludFByaW1pdGl2ZVR5cGUgfHwgdHlwZSBpbnN0YW5jZW9mIEludFByaW1pdGl2ZVR5cGUgfHwgdHlwZSBpbnN0YW5jZW9mIE1vbmV5UHJpbWl0aXZlVHlwZSkge1xuICAgICAgICAgICAgICAgIGFyZ3NbYXJnTmFtZV0gPSBwYXJzZUludChhcmdWYWx1ZSwgMTApO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBGbG9hdFByaW1pdGl2ZVR5cGUpIHtcbiAgICAgICAgICAgICAgICBhcmdzW2FyZ05hbWVdID0gcGFyc2VGbG9hdChhcmdWYWx1ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXJnc1thcmdOYW1lXSA9IGFyZ1ZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGlwID0gZ2V0Q2xpZW50SXAocmVxKTtcblxuICAgICAgICAgICAgaWYgKCFpcCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBkZXRlcm1pbmUgY2xpZW50IElQXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0OiBDb250ZXh0UmVxdWVzdCA9IHtcbiAgICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgICAgZGV2aWNlSW5mbzoge1xuICAgICAgICAgICAgICAgIGZpbmdlcnByaW50OiBudWxsLFxuICAgICAgICAgICAgICAgIGlkOiByYW5kb21CeXRlcygxNikudG9TdHJpbmcoXCJoZXhcIiksXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2U6IG51bGwsXG4gICAgICAgICAgICAgICAgcGxhdGZvcm06IG51bGwsXG4gICAgICAgICAgICAgICAgdGltZXpvbmU6IG51bGwsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJyZXN0XCIsXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogbnVsbCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXh0cmE6IHt9LFxuICAgICAgICAgICAgICBmaWxlcyxcbiAgICAgICAgICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnMsXG4gICAgICAgICAgICAgIGlkOiByYW5kb21CeXRlcygxNikudG9TdHJpbmcoXCJoZXhcIiksXG4gICAgICAgICAgICAgIGlwLFxuICAgICAgICAgICAgICBuYW1lOiBvcC5uYW1lLFxuICAgICAgICAgICAgICB2ZXJzaW9uOiAzLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRlUmVxdWVzdChyZXF1ZXN0LCAoY3R4LCByZXBseSkgPT4ge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2hlYWRlcktleSwgaGVhZGVyVmFsdWVdIG9mIGN0eC5yZXNwb25zZS5oZWFkZXJzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKGhlYWRlcktleSwgaGVhZGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjdHg/LnJlc3BvbnNlLnN0YXR1c0NvZGUpIHtcbiAgICAgICAgICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gY3R4LnJlc3BvbnNlLnN0YXR1c0NvZGU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlcGx5LmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMubWFrZVJlc3BvbnNlRXJyb3IocmVwbHkuZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoIWN0eD8ucmVzcG9uc2Uuc3RhdHVzQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXMuc3RhdHVzQ29kZSA9IGVycm9yLnR5cGUgPT09IFwiRmF0YWxcIiA/IDUwMCA6IDQwMDtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcihcImNvbnRlbnQtdHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICAgICAgICByZXMud3JpdGUoSlNPTi5zdHJpbmdpZnkoZXJyb3IpKTtcbiAgICAgICAgICAgICAgICAgIHJlcy5lbmQoKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmVxLmhlYWRlcnMuYWNjZXB0ID09PSBcImFwcGxpY2F0aW9uL2pzb25cIikge1xuICAgICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcihcImNvbnRlbnQtdHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICAgICAgICByZXMud3JpdGUoSlNPTi5zdHJpbmdpZnkocmVwbHkucmVzdWx0KSk7XG4gICAgICAgICAgICAgICAgICByZXMuZW5kKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGxldCB0eXBlID0gb3AucmV0dXJuVHlwZTtcblxuICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgaW5zdGFuY2VvZiBPcHRpb25hbFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcGx5LnJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgIGlmICghY3R4Py5yZXNwb25zZS5zdGF0dXNDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXMuc3RhdHVzQ29kZSA9IGFubi5tZXRob2QgPT09IFwiR0VUXCIgPyA0MDQgOiAyMDQ7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlLmJhc2U7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdHlwZSBpbnN0YW5jZW9mIEJvb2xQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBJbnRQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBVSW50UHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlIGluc3RhbmNlb2YgRmxvYXRQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBTdHJpbmdQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBEYXRlUHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlIGluc3RhbmNlb2YgRGF0ZVRpbWVQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBNb25leVByaW1pdGl2ZVR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSBpbnN0YW5jZW9mIERlY2ltYWxQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBCaWdJbnRQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBDcGZQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBDbnBqUHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlIGluc3RhbmNlb2YgVXVpZFByaW1pdGl2ZVR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSBpbnN0YW5jZW9mIEhleFByaW1pdGl2ZVR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSBpbnN0YW5jZW9mIEJhc2U2NFByaW1pdGl2ZVR5cGVcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKFwiY29udGVudC10eXBlXCIsIFwidGV4dC9wbGFpblwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLndyaXRlKGAke3JlcGx5LnJlc3VsdH1gKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgSHRtbFByaW1pdGl2ZVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcihcImNvbnRlbnQtdHlwZVwiLCBcInRleHQvaHRtbFwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLndyaXRlKGAke3JlcGx5LnJlc3VsdH1gKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWG1sUHJpbWl0aXZlVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKFwiY29udGVudC10eXBlXCIsIFwidGV4dC94bWxcIik7XG4gICAgICAgICAgICAgICAgICAgIHJlcy53cml0ZShgJHtyZXBseS5yZXN1bHR9YCk7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5lbmQoKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIEJ5dGVzUHJpbWl0aXZlVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShyZXBseS5yZXN1bHQgYXMgc3RyaW5nLCBcImJhc2U2NFwiKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgICAgICAgICAgICAgICAgIGZpbGVUeXBlRnJvbUJ1ZmZlcihidWZmZXIpXG4gICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZmlsZVR5cGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcihcImNvbnRlbnQtdHlwZVwiLCBmaWxlVHlwZT8ubWltZSA/PyBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcihcImNvbnRlbnQtdHlwZVwiLCBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcy53cml0ZShidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoXCJjb250ZW50LXR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXMud3JpdGUoSlNPTi5zdHJpbmdpZnkocmVwbHkucmVzdWx0KSk7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5lbmQoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXMuaGVhZGVyc1NlbnQpIHtcbiAgICAgICAgICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNTAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlcy5lbmQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgaWYgKCFyZXMuaGVhZGVyc1NlbnQpIHtcbiAgICAgICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSA1MDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlcy5lbmQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVSZXF1ZXN0ID0gKHJlcTogSW5jb21pbmdNZXNzYWdlLCByZXM6IFNlcnZlclJlc3BvbnNlKSA9PiB7XG4gICAgY29uc3QgaHJTdGFydCA9IHByb2Nlc3MuaHJ0aW1lKCk7XG5cbiAgICByZXEub24oXCJlcnJvclwiLCBlcnIgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgcmVzLmVuZCgpO1xuICAgIH0pO1xuXG4gICAgcmVzLm9uKFwiZXJyb3JcIiwgZXJyID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIHJlcy5lbmQoKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmR5bmFtaWNDb3JzT3JpZ2luICYmIHJlcS5oZWFkZXJzLm9yaWdpbikge1xuICAgICAgcmVzLnNldEhlYWRlcihcIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpblwiLCByZXEuaGVhZGVycy5vcmlnaW4pO1xuICAgICAgcmVzLnNldEhlYWRlcihcIlZhcnlcIiwgXCJPcmlnaW5cIik7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbaGVhZGVyLCB2YWx1ZV0gb2YgdGhpcy5oZWFkZXJzKSB7XG4gICAgICBpZiAocmVxLm1ldGhvZCA9PT0gXCJPUFRJT05TXCIgJiYgIWhlYWRlci5zdGFydHNXaXRoKFwiYWNjZXNzLWNvbnRyb2wtXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICByZXMuc2V0SGVhZGVyKGhlYWRlciwgdmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChyZXEubWV0aG9kID09PSBcIk9QVElPTlNcIikge1xuICAgICAgcmVzLndyaXRlSGVhZCgyMDApO1xuICAgICAgcmVzLmVuZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUJvZHkgPSAoYm9keTogQnVmZmVyKSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZVJlcXVlc3RXaXRoQm9keShyZXEsIHJlcywgYm9keSwgaHJTdGFydCkuY2F0Y2goKGU6IHVua25vd24pID0+IHRoaXMud3JpdGVSZXBseShyZXMsIG51bGwsIHsgZXJyb3I6IGUgfSwgaHJTdGFydCkpO1xuICAgIH07XG5cbiAgICAvLyBHb29nbGUgQ2xvdWQgRnVuY3Rpb25zIGFkZCBhIHJhd0JvZHkgcHJvcGVydHkgdG8gdGhlIHJlcXVlc3Qgb2JqZWN0XG4gICAgaWYgKGhhcyhyZXEsIFwicmF3Qm9keVwiKSAmJiByZXEucmF3Qm9keSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgaGFuZGxlQm9keShyZXEucmF3Qm9keSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHk6IEJ1ZmZlcltdID0gW107XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG4gICAgICByZXEub24oXCJkYXRhXCIsIGNodW5rID0+IGJvZHkucHVzaChjaHVuaykpO1xuXG4gICAgICByZXEub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICBoYW5kbGVCb2R5KEJ1ZmZlci5jb25jYXQoYm9keSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlUmVxdWVzdFdpdGhCb2R5KHJlcTogSW5jb21pbmdNZXNzYWdlLCByZXM6IFNlcnZlclJlc3BvbnNlLCBib2R5OiBCdWZmZXIsIGhyU3RhcnQ6IFtudW1iZXIsIG51bWJlcl0pIHtcbiAgICBjb25zdCB7IHBhdGhuYW1lLCBxdWVyeSB9ID0gcGFyc2VVcmwocmVxLnVybCA/PyBcIlwiKTtcbiAgICBsZXQgcGF0aCA9IHBhdGhuYW1lID8/IFwiXCI7XG5cbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKHRoaXMuaWdub3JlZFVybFByZWZpeCkpIHtcbiAgICAgIHBhdGggPSBwYXRoLnNsaWNlKHRoaXMuaWdub3JlZFVybFByZWZpeC5sZW5ndGgpO1xuICAgIH1cblxuICAgIGlmICghcmVxLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0/Lm1hdGNoKC9hcHBsaWNhdGlvblxcL3Nka2dlbi9pdSkpIHtcbiAgICAgIGNvbnN0IGV4dGVybmFsSGFuZGxlciA9IHRoaXMuZmluZEJlc3RIYW5kbGVyKHBhdGgsIHJlcSk7XG5cbiAgICAgIGlmIChleHRlcm5hbEhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5sb2coYEhUVFAgJHtyZXEubWV0aG9kfSAke3BhdGh9JHtxdWVyeSA/IGA/JHtxdWVyeX1gIDogXCJcIn1gKTtcbiAgICAgICAgZXh0ZXJuYWxIYW5kbGVyLmhhbmRsZXIocmVxLCByZXMsIGJvZHkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLThcIik7XG5cbiAgICBpZiAocmVxLm1ldGhvZCA9PT0gXCJIRUFEXCIpIHtcbiAgICAgIHJlcy53cml0ZUhlYWQoMjAwKTtcbiAgICAgIHJlcy5lbmQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocmVxLm1ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgaWYgKHBhdGggIT09IFwiL1wiKSB7XG4gICAgICAgIHJlcy53cml0ZUhlYWQoNDA0KTtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBvayA9IHRydWU7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoY29uc3QgaGVhbHRoQ2hlY2sgb2YgdGhpcy5oZWFsdGhDaGVja3MpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvayA9IGF3YWl0IGhlYWx0aENoZWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgb2sgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmVzLnN0YXR1c0NvZGUgPSBvayA/IDIwMCA6IDUwMDtcbiAgICAgIHJlcy53cml0ZShKU09OLnN0cmluZ2lmeSh7IG9rIH0pKTtcbiAgICAgIHJlcy5lbmQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocmVxLm1ldGhvZCAhPT0gXCJQT1NUXCIpIHtcbiAgICAgIHJlcy53cml0ZUhlYWQoNDAwKTtcbiAgICAgIHJlcy5lbmQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjbGllbnRJcCA9IGdldENsaWVudElwKHJlcSk7XG5cbiAgICBpZiAoIWNsaWVudElwKSB7XG4gICAgICB0aGlzLndyaXRlUmVwbHkoXG4gICAgICAgIHJlcyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAge1xuICAgICAgICAgIGVycm9yOiBuZXcgRmF0YWwoXCJDb3VsZG4ndCBkZXRlcm1pbmUgY2xpZW50IElQXCIpLFxuICAgICAgICB9LFxuICAgICAgICBoclN0YXJ0LFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5wYXJzZVJlcXVlc3QocmVxLCBib2R5LnRvU3RyaW5nKCksIGNsaWVudElwKTtcblxuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgdGhpcy53cml0ZVJlcGx5KFxuICAgICAgICByZXMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHtcbiAgICAgICAgICBlcnJvcjogbmV3IEZhdGFsKFwiQ291bGRuJ3QgcGFyc2UgcmVxdWVzdFwiKSxcbiAgICAgICAgfSxcbiAgICAgICAgaHJTdGFydCxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5leGVjdXRlUmVxdWVzdChyZXF1ZXN0LCAoY3R4LCByZXBseSkgPT4gdGhpcy53cml0ZVJlcGx5KHJlcywgY3R4LCByZXBseSwgaHJTdGFydCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlUmVxdWVzdChyZXF1ZXN0OiBDb250ZXh0UmVxdWVzdCwgd3JpdGVSZXBseTogKGN0eDogQ29udGV4dCB8IG51bGwsIHJlcGx5OiBDb250ZXh0UmVwbHkpID0+IHZvaWQpIHtcbiAgICBjb25zdCBjdHg6IENvbnRleHQgJiBFeHRyYUNvbnRleHRUID0ge1xuICAgICAgLi4udGhpcy5leHRyYUNvbnRleHQsXG4gICAgICByZXF1ZXN0LFxuICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgaGVhZGVyczogbmV3IE1hcCgpLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgd3JpdGVSZXBseShjdHgsIGF3YWl0IGV4ZWN1dGVSZXF1ZXN0KGN0eCwgdGhpcy5hcGlDb25maWcpKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VSZXF1ZXN0KHJlcTogSW5jb21pbmdNZXNzYWdlLCBib2R5OiBzdHJpbmcsIGlwOiBzdHJpbmcpOiBDb250ZXh0UmVxdWVzdCB8IG51bGwge1xuICAgIHN3aXRjaCAodGhpcy5pZGVudGlmeVJlcXVlc3RWZXJzaW9uKHJlcSwgYm9keSkpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VSZXF1ZXN0VjEocmVxLCBib2R5LCBpcCk7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlUmVxdWVzdFYyKHJlcSwgYm9keSwgaXApO1xuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVJlcXVlc3RWMyhyZXEsIGJvZHksIGlwKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byB1bmRlcnN0YW5kIHJlcXVlc3RcIik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpZGVudGlmeVJlcXVlc3RWZXJzaW9uKF9yZXE6IEluY29taW5nTWVzc2FnZSwgYm9keTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGJvZHkpIGFzIHVua25vd247XG5cbiAgICBpZiAodHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIiAmJiBwYXJzZWQgJiYgaGFzKHBhcnNlZCwgXCJ2ZXJzaW9uXCIpICYmIHR5cGVvZiBwYXJzZWQudmVyc2lvbiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgcmV0dXJuIHBhcnNlZC52ZXJzaW9uO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIiAmJiBwYXJzZWQgJiYgaGFzKHBhcnNlZCwgXCJyZXF1ZXN0SWRcIikpIHtcbiAgICAgIHJldHVybiAyO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIiAmJiBwYXJzZWQgJiYgaGFzKHBhcnNlZCwgXCJkZXZpY2VcIikpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIHJldHVybiAzO1xuICB9XG5cbiAgLy8gT2xkIFNka2dlbiBmb3JtYXRcbiAgcHJpdmF0ZSBwYXJzZVJlcXVlc3RWMShyZXE6IEluY29taW5nTWVzc2FnZSwgYm9keTogc3RyaW5nLCBpcDogc3RyaW5nKTogQ29udGV4dFJlcXVlc3Qge1xuICAgIGNvbnN0IHBhcnNlZCA9IGRlY29kZShcbiAgICAgIHtcbiAgICAgICAgUmVxdWVzdDoge1xuICAgICAgICAgIGFyZ3M6IFwianNvblwiLFxuICAgICAgICAgIGRldmljZTogXCJSZXF1ZXN0RGV2aWNlXCIsXG4gICAgICAgICAgaWQ6IFwic3RyaW5nXCIsXG4gICAgICAgICAgbmFtZTogXCJzdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICAgICAgUmVxdWVzdERldmljZToge1xuICAgICAgICAgIGZpbmdlcnByaW50OiBcInN0cmluZz9cIixcbiAgICAgICAgICBpZDogXCJzdHJpbmc/XCIsXG4gICAgICAgICAgbGFuZ3VhZ2U6IFwic3RyaW5nP1wiLFxuICAgICAgICAgIHBsYXRmb3JtOiBcImpzb24/XCIsXG4gICAgICAgICAgdGltZXpvbmU6IFwic3RyaW5nP1wiLFxuICAgICAgICAgIHR5cGU6IFwic3RyaW5nP1wiLFxuICAgICAgICAgIHZlcnNpb246IFwic3RyaW5nP1wiLFxuICAgICAgICB9LFxuICAgICAgfSBhcyBjb25zdCxcbiAgICAgIFwicm9vdFwiLFxuICAgICAgXCJSZXF1ZXN0XCIsXG4gICAgICBKU09OLnBhcnNlKGJvZHkpLFxuICAgICk7XG5cbiAgICBjb25zdCBkZXZpY2VJZCA9IHBhcnNlZC5kZXZpY2UuaWQgPz8gcmFuZG9tQnl0ZXMoMjApLnRvU3RyaW5nKFwiaGV4XCIpO1xuXG4gICAgaWYgKCFwYXJzZWQuYXJncyB8fCBBcnJheS5pc0FycmF5KHBhcnNlZC5hcmdzKSB8fCB0eXBlb2YgcGFyc2VkLmFyZ3MgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkICdhcmdzJyB0byBiZSBhbiBvYmplY3RcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFyZ3M6IHBhcnNlZC5hcmdzLFxuICAgICAgZGV2aWNlSW5mbzoge1xuICAgICAgICBmaW5nZXJwcmludDogcGFyc2VkLmRldmljZS5maW5nZXJwcmludCxcbiAgICAgICAgaWQ6IGRldmljZUlkLFxuICAgICAgICBsYW5ndWFnZTogcGFyc2VkLmRldmljZS5sYW5ndWFnZSxcbiAgICAgICAgcGxhdGZvcm06IHBhcnNlZC5kZXZpY2UucGxhdGZvcm0sXG4gICAgICAgIHRpbWV6b25lOiBwYXJzZWQuZGV2aWNlLnRpbWV6b25lLFxuICAgICAgICB0eXBlOiBwYXJzZWQuZGV2aWNlLnR5cGUgPz8gKHR5cGVvZiBwYXJzZWQuZGV2aWNlLnBsYXRmb3JtID09PSBcInN0cmluZ1wiID8gcGFyc2VkLmRldmljZS5wbGF0Zm9ybSA6IFwiXCIpLFxuICAgICAgICB2ZXJzaW9uOiBwYXJzZWQuZGV2aWNlLnZlcnNpb24sXG4gICAgICB9LFxuICAgICAgZXh0cmE6IHt9LFxuICAgICAgZmlsZXM6IFtdLFxuICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnMsXG4gICAgICBpZDogYCR7ZGV2aWNlSWR9LSR7cGFyc2VkLmlkfWAsXG4gICAgICBpcCxcbiAgICAgIG5hbWU6IHBhcnNlZC5uYW1lLFxuICAgICAgdmVyc2lvbjogMSxcbiAgICB9O1xuICB9XG5cbiAgLy8gTWF4aW1hIHNka2dlbiBmb3JtYXRcbiAgcHJpdmF0ZSBwYXJzZVJlcXVlc3RWMihyZXE6IEluY29taW5nTWVzc2FnZSwgYm9keTogc3RyaW5nLCBpcDogc3RyaW5nKTogQ29udGV4dFJlcXVlc3Qge1xuICAgIGNvbnN0IHBhcnNlZCA9IGRlY29kZShcbiAgICAgIHtcbiAgICAgICAgUmVxdWVzdDoge1xuICAgICAgICAgIGFyZ3M6IFwianNvblwiLFxuICAgICAgICAgIGRldmljZUZpbmdlcnByaW50OiBcInN0cmluZz9cIixcbiAgICAgICAgICBkZXZpY2VJZDogXCJzdHJpbmdcIixcbiAgICAgICAgICBpbmZvOiBcIlJlcXVlc3RJbmZvXCIsXG4gICAgICAgICAgbmFtZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBwYXJ0bmVySWQ6IFwic3RyaW5nP1wiLFxuICAgICAgICAgIHJlcXVlc3RJZDogXCJzdHJpbmc/XCIsXG4gICAgICAgICAgc2Vzc2lvbklkOiBcInN0cmluZz9cIixcbiAgICAgICAgfSxcbiAgICAgICAgUmVxdWVzdEluZm86IHtcbiAgICAgICAgICBicm93c2VyVXNlckFnZW50OiBcInN0cmluZz9cIixcbiAgICAgICAgICBsYW5ndWFnZTogXCJzdHJpbmdcIixcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgICAgfSBhcyBjb25zdCxcbiAgICAgIFwicm9vdFwiLFxuICAgICAgXCJSZXF1ZXN0XCIsXG4gICAgICBKU09OLnBhcnNlKGJvZHkpLFxuICAgICk7XG5cbiAgICBpZiAoIXBhcnNlZC5hcmdzIHx8IEFycmF5LmlzQXJyYXkocGFyc2VkLmFyZ3MpIHx8IHR5cGVvZiBwYXJzZWQuYXJncyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgJ2FyZ3MnIHRvIGJlIGFuIG9iamVjdFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYXJnczogcGFyc2VkLmFyZ3MsXG4gICAgICBkZXZpY2VJbmZvOiB7XG4gICAgICAgIGZpbmdlcnByaW50OiBwYXJzZWQuZGV2aWNlRmluZ2VycHJpbnQsXG4gICAgICAgIGlkOiBwYXJzZWQuZGV2aWNlSWQsXG4gICAgICAgIGxhbmd1YWdlOiBwYXJzZWQuaW5mby5sYW5ndWFnZSxcbiAgICAgICAgcGxhdGZvcm06IHtcbiAgICAgICAgICBicm93c2VyVXNlckFnZW50OiBwYXJzZWQuaW5mby5icm93c2VyVXNlckFnZW50ID8/IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHRpbWV6b25lOiBudWxsLFxuICAgICAgICB0eXBlOiBwYXJzZWQuaW5mby50eXBlLFxuICAgICAgICB2ZXJzaW9uOiBcIlwiLFxuICAgICAgfSxcbiAgICAgIGV4dHJhOiB7XG4gICAgICAgIHBhcnRuZXJJZDogcGFyc2VkLnBhcnRuZXJJZCxcbiAgICAgICAgc2Vzc2lvbklkOiBwYXJzZWQuc2Vzc2lvbklkLFxuICAgICAgfSxcbiAgICAgIGZpbGVzOiBbXSxcbiAgICAgIGhlYWRlcnM6IHJlcS5oZWFkZXJzLFxuICAgICAgaWQ6IGAke3BhcnNlZC5kZXZpY2VJZH0tJHtwYXJzZWQucmVxdWVzdElkID8/IHJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZyhcImhleFwiKX1gLFxuICAgICAgaXAsXG4gICAgICBuYW1lOiBwYXJzZWQubmFtZSxcbiAgICAgIHZlcnNpb246IDIsXG4gICAgfTtcbiAgfVxuXG4gIC8vIE5ldyBzZGtnZW4gZm9ybWF0XG4gIHByaXZhdGUgcGFyc2VSZXF1ZXN0VjMocmVxOiBJbmNvbWluZ01lc3NhZ2UsIGJvZHk6IHN0cmluZywgaXA6IHN0cmluZyk6IENvbnRleHRSZXF1ZXN0IHtcbiAgICBjb25zdCBwYXJzZWQgPSBkZWNvZGUoXG4gICAgICB7XG4gICAgICAgIERldmljZUluZm86IHtcbiAgICAgICAgICBmaW5nZXJwcmludDogXCJzdHJpbmc/XCIsXG4gICAgICAgICAgaWQ6IFwic3RyaW5nP1wiLFxuICAgICAgICAgIGxhbmd1YWdlOiBcInN0cmluZz9cIixcbiAgICAgICAgICBwbGF0Zm9ybTogXCJqc29uP1wiLFxuICAgICAgICAgIHRpbWV6b25lOiBcInN0cmluZz9cIixcbiAgICAgICAgICB0eXBlOiBcInN0cmluZz9cIixcbiAgICAgICAgICB2ZXJzaW9uOiBcInN0cmluZz9cIixcbiAgICAgICAgfSxcbiAgICAgICAgUmVxdWVzdDoge1xuICAgICAgICAgIGFyZ3M6IFwianNvblwiLFxuICAgICAgICAgIGRldmljZUluZm86IFwiRGV2aWNlSW5mbz9cIixcbiAgICAgICAgICBleHRyYTogXCJqc29uP1wiLFxuICAgICAgICAgIG5hbWU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgcmVxdWVzdElkOiBcInN0cmluZz9cIixcbiAgICAgICAgfSxcbiAgICAgIH0gYXMgY29uc3QsXG4gICAgICBcInJvb3RcIixcbiAgICAgIFwiUmVxdWVzdFwiLFxuICAgICAgSlNPTi5wYXJzZShib2R5KSxcbiAgICApO1xuXG4gICAgY29uc3QgZGV2aWNlSW5mbyA9IHBhcnNlZC5kZXZpY2VJbmZvID8/IHtcbiAgICAgIGZpbmdlcnByaW50OiBudWxsLFxuICAgICAgaWQ6IG51bGwsXG4gICAgICBsYW5ndWFnZTogbnVsbCxcbiAgICAgIHBsYXRmb3JtOiBudWxsLFxuICAgICAgdGltZXpvbmU6IG51bGwsXG4gICAgICB0eXBlOiBudWxsLFxuICAgICAgdmVyc2lvbjogbnVsbCxcbiAgICB9O1xuICAgIGNvbnN0IGRldmljZUlkID0gZGV2aWNlSW5mby5pZCA/PyByYW5kb21CeXRlcygxNikudG9TdHJpbmcoXCJoZXhcIik7XG5cbiAgICBpZiAoIXBhcnNlZC5hcmdzIHx8IEFycmF5LmlzQXJyYXkocGFyc2VkLmFyZ3MpIHx8IHR5cGVvZiBwYXJzZWQuYXJncyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgJ2FyZ3MnIHRvIGJlIGFuIG9iamVjdFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYXJnczogcGFyc2VkLmFyZ3MsXG4gICAgICBkZXZpY2VJbmZvOiB7XG4gICAgICAgIGZpbmdlcnByaW50OiBkZXZpY2VJbmZvLmZpbmdlcnByaW50LFxuICAgICAgICBpZDogZGV2aWNlSWQsXG4gICAgICAgIGxhbmd1YWdlOiBkZXZpY2VJbmZvLmxhbmd1YWdlLFxuICAgICAgICBwbGF0Zm9ybTogdHlwZW9mIGRldmljZUluZm8ucGxhdGZvcm0gPT09IFwib2JqZWN0XCIgPyB7IC4uLmRldmljZUluZm8ucGxhdGZvcm0gfSA6IHt9LFxuICAgICAgICB0aW1lem9uZTogZGV2aWNlSW5mby50aW1lem9uZSxcbiAgICAgICAgdHlwZTogZGV2aWNlSW5mby50eXBlID8/IFwiYXBpXCIsXG4gICAgICAgIHZlcnNpb246IGRldmljZUluZm8udmVyc2lvbixcbiAgICAgIH0sXG4gICAgICBleHRyYTogdHlwZW9mIHBhcnNlZC5leHRyYSA9PT0gXCJvYmplY3RcIiA/IHsgLi4ucGFyc2VkLmV4dHJhIH0gOiB7fSxcbiAgICAgIGZpbGVzOiBbXSxcbiAgICAgIGhlYWRlcnM6IHJlcS5oZWFkZXJzLFxuICAgICAgaWQ6IGAke2RldmljZUlkfS0ke3BhcnNlZC5yZXF1ZXN0SWQgPz8gcmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKFwiaGV4XCIpfWAsXG4gICAgICBpcCxcbiAgICAgIG5hbWU6IHBhcnNlZC5uYW1lLFxuICAgICAgdmVyc2lvbjogMyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlUmVzcG9uc2VFcnJvcihlcnI6IHVua25vd24pOiB7IG1lc3NhZ2U6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0ge1xuICAgIGxldCB0eXBlID0gXCJGYXRhbFwiO1xuXG4gICAgaWYgKHR5cGVvZiBlcnIgPT09IFwib2JqZWN0XCIgJiYgZXJyICE9PSBudWxsICYmIGhhcyhlcnIsIFwidHlwZVwiKSAmJiB0eXBlb2YgZXJyLnR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICh7IHR5cGUgfSA9IGVycik7XG4gICAgfVxuXG4gICAgbGV0IG1lc3NhZ2U6IHN0cmluZztcblxuICAgIGlmICh0eXBlb2YgZXJyID09PSBcIm9iamVjdFwiICYmIGVyciAhPT0gbnVsbCAmJiBoYXMoZXJyLCBcIm1lc3NhZ2VcIikgJiYgdHlwZW9mIGVyci5tZXNzYWdlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAoeyBtZXNzYWdlIH0gPSBlcnIpO1xuICAgIH0gZWxzZSBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIG1lc3NhZ2UgPSBlcnIudG9TdHJpbmcoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlcnIgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIG1lc3NhZ2UgPSBKU09OLnN0cmluZ2lmeShlcnIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZXNzYWdlID0gYCR7ZXJyfWA7XG4gICAgfVxuXG4gICAgbGV0IGRhdGE6IHVua25vd247XG5cbiAgICBpZiAodHlwZW9mIGVyciA9PT0gXCJvYmplY3RcIiAmJiBlcnIgIT09IG51bGwgJiYgaGFzKGVyciwgXCJkYXRhXCIpKSB7XG4gICAgICAoeyBkYXRhIH0gPSBlcnIpO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9yID0gdGhpcy5hcGlDb25maWcuYXN0LmVycm9ycy5maW5kKHggPT4geC5uYW1lID09PSB0eXBlKTtcblxuICAgIGlmIChlcnJvcikge1xuICAgICAgaWYgKCEoZXJyb3IuZGF0YVR5cGUgaW5zdGFuY2VvZiBWb2lkUHJpbWl0aXZlVHlwZSkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBkYXRhID0gZW5jb2RlKHRoaXMuYXBpQ29uZmlnLmFzdEpzb24udHlwZVRhYmxlLCBgZXJyb3IuJHt0eXBlfWAsIGVycm9yLmRhdGFUeXBlLm5hbWUsIGRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlbmNvZGVFcnJvcikge1xuICAgICAgICAgIG1lc3NhZ2UgPSBgRmFpbGVkIHRvIGVuY29kZSBlcnJvciAke3R5cGV9IGJlY2F1c2U6ICR7ZW5jb2RlRXJyb3J9LiBPcmlnaW5hbCBtZXNzYWdlOiAke21lc3NhZ2V9YDtcbiAgICAgICAgICB0eXBlID0gXCJGYXRhbFwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGUgPSBcIkZhdGFsXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZGF0YSwgbWVzc2FnZSwgdHlwZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSB3cml0ZVJlcGx5KHJlczogU2VydmVyUmVzcG9uc2UsIGN0eDogQ29udGV4dCB8IG51bGwsIHJlcGx5OiBDb250ZXh0UmVwbHksIGhyU3RhcnQ6IFtudW1iZXIsIG51bWJlcl0pIHtcbiAgICBpZiAoIWN0eCkge1xuICAgICAgcmVzLnN0YXR1c0NvZGUgPSA1MDA7XG4gICAgICByZXMud3JpdGUoXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBlcnJvcjogdGhpcy5tYWtlUmVzcG9uc2VFcnJvcihyZXBseS5lcnJvciA/PyBuZXcgRmF0YWwoXCJSZXNwb25zZSB3aXRob3V0IGNvbnRleHRcIikpLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICByZXMuZW5kKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGVsdGFUaW1lID0gcHJvY2Vzcy5ocnRpbWUoaHJTdGFydCk7XG4gICAgY29uc3QgZHVyYXRpb24gPSBkZWx0YVRpbWVbMF0gKyBkZWx0YVRpbWVbMV0gKiAxZS05O1xuXG4gICAgaWYgKHJlcGx5LmVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKHJlcGx5LmVycm9yKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhgJHtjdHgucmVxdWVzdC5pZH0gWyR7ZHVyYXRpb24udG9GaXhlZCg2KX1zXSAke2N0eC5yZXF1ZXN0Lm5hbWV9KCkgLT4gJHtyZXBseS5lcnJvciA/IHRoaXMubWFrZVJlc3BvbnNlRXJyb3IocmVwbHkuZXJyb3IpLnR5cGUgOiBcIk9LXCJ9YCk7XG5cbiAgICBpZiAoY3R4LnJlc3BvbnNlLnN0YXR1c0NvZGUpIHtcbiAgICAgIHJlcy5zdGF0dXNDb2RlID0gY3R4LnJlc3BvbnNlLnN0YXR1c0NvZGU7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbaGVhZGVyS2V5LCBoZWFkZXJWYWx1ZV0gb2YgY3R4LnJlc3BvbnNlLmhlYWRlcnMuZW50cmllcygpKSB7XG4gICAgICByZXMuc2V0SGVhZGVyKGhlYWRlcktleSwgaGVhZGVyVmFsdWUpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoY3R4LnJlcXVlc3QudmVyc2lvbikge1xuICAgICAgY2FzZSAxOiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAgIGRldmljZUlkOiBjdHgucmVxdWVzdC5kZXZpY2VJbmZvLmlkLFxuICAgICAgICAgIGR1cmF0aW9uLFxuICAgICAgICAgIGVycm9yOiByZXBseS5lcnJvciA/IHRoaXMubWFrZVJlc3BvbnNlRXJyb3IocmVwbHkuZXJyb3IpIDogbnVsbCxcbiAgICAgICAgICBob3N0OiBob3N0bmFtZSgpLFxuICAgICAgICAgIGlkOiBjdHgucmVxdWVzdC5pZCxcbiAgICAgICAgICBvazogIXJlcGx5LmVycm9yLFxuICAgICAgICAgIHJlc3VsdDogcmVwbHkuZXJyb3IgPyBudWxsIDogcmVwbHkucmVzdWx0LFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5lcnJvciAmJiAhY3R4LnJlc3BvbnNlLnN0YXR1c0NvZGUpIHtcbiAgICAgICAgICByZXMuc3RhdHVzQ29kZSA9IHRoaXMubWFrZVJlc3BvbnNlRXJyb3IocmVzcG9uc2UuZXJyb3IpLnR5cGUgPT09IFwiRmF0YWxcIiA/IDUwMCA6IDQwMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcy53cml0ZShKU09OLnN0cmluZ2lmeShyZXNwb25zZSkpO1xuICAgICAgICByZXMuZW5kKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIDI6IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICAgZGV2aWNlSWQ6IGN0eC5yZXF1ZXN0LmRldmljZUluZm8uaWQsXG4gICAgICAgICAgZXJyb3I6IHJlcGx5LmVycm9yID8gdGhpcy5tYWtlUmVzcG9uc2VFcnJvcihyZXBseS5lcnJvcikgOiBudWxsLFxuICAgICAgICAgIG9rOiAhcmVwbHkuZXJyb3IsXG4gICAgICAgICAgcmVxdWVzdElkOiBjdHgucmVxdWVzdC5pZCxcbiAgICAgICAgICByZXN1bHQ6IHJlcGx5LmVycm9yID8gbnVsbCA6IHJlcGx5LnJlc3VsdCxcbiAgICAgICAgICBzZXNzaW9uSWQ6IGN0eC5yZXF1ZXN0LmV4dHJhLnNlc3Npb25JZCxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3IgJiYgIWN0eC5yZXNwb25zZS5zdGF0dXNDb2RlKSB7XG4gICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSB0aGlzLm1ha2VSZXNwb25zZUVycm9yKHJlc3BvbnNlLmVycm9yKS50eXBlID09PSBcIkZhdGFsXCIgPyA1MDAgOiA0MDA7XG4gICAgICAgIH1cblxuICAgICAgICByZXMud3JpdGUoSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpKTtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAzOiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAgIGR1cmF0aW9uLFxuICAgICAgICAgIGVycm9yOiByZXBseS5lcnJvciA/IHRoaXMubWFrZVJlc3BvbnNlRXJyb3IocmVwbHkuZXJyb3IpIDogbnVsbCxcbiAgICAgICAgICBob3N0OiBob3N0bmFtZSgpLFxuICAgICAgICAgIHJlc3VsdDogcmVwbHkuZXJyb3IgPyBudWxsIDogcmVwbHkucmVzdWx0LFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5lcnJvciAmJiAhY3R4LnJlc3BvbnNlLnN0YXR1c0NvZGUpIHtcbiAgICAgICAgICByZXMuc3RhdHVzQ29kZSA9IHRoaXMubWFrZVJlc3BvbnNlRXJyb3IocmVzcG9uc2UuZXJyb3IpLnR5cGUgPT09IFwiRmF0YWxcIiA/IDUwMCA6IDQwMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcy5zZXRIZWFkZXIoXCJ4LXJlcXVlc3QtaWRcIiwgY3R4LnJlcXVlc3QuaWQpO1xuICAgICAgICByZXMud3JpdGUoSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpKTtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXMuc3RhdHVzQ29kZSA9IDUwMDtcbiAgICAgICAgcmVzLndyaXRlKFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGVycm9yOiB0aGlzLm1ha2VSZXNwb25zZUVycm9yKHJlcGx5LmVycm9yID8/IG5ldyBGYXRhbChcIlVua25vd24gcmVxdWVzdCB2ZXJzaW9uXCIpKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
927
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaHR0cC1zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNyQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRWpFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLElBQUksQ0FBQztBQUM5QixPQUFPLEVBQUUsS0FBSyxJQUFJLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLElBQUksUUFBUSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFakMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkUsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsZ0JB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RUFBRTtvQkFDaEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU07aUJBQzFDLENBQUM7Z0JBRUYsSUFBSSxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUU7b0JBQzlDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztpQkFDdEY7Z0JBRUQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDOUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDVixNQUFNO2FBQ1A7WUFFRCxPQUFPLENBQUMsQ0FBQztnQkFDUCxHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztnQkFDckIsR0FBRyxDQUFDLEtBQUssQ0FDUCxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUNiLEtBQUssRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO2lCQUNuRixDQUFDLENBQ0gsQ0FBQztnQkFDRixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ1YsT0FBTzthQUNSO1NBQ0Y7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IGNyZWF0ZVJlYWRTdHJlYW0sIGNyZWF0ZVdyaXRlU3RyZWFtLCB1bmxpbmsgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB0eXBlIHsgSW5jb21pbmdNZXNzYWdlLCBTZXJ2ZXIsIFNlcnZlclJlc3BvbnNlIH0gZnJvbSBcImh0dHBcIjtcbmltcG9ydCB7IGNyZWF0ZVNlcnZlciB9IGZyb20gXCJodHRwXCI7XG5pbXBvcnQgdHlwZSB7IEFkZHJlc3NJbmZvIH0gZnJvbSBcIm5ldFwiO1xuaW1wb3J0IHsgaG9zdG5hbWUgfSBmcm9tIFwib3NcIjtcbmltcG9ydCB7IHBhcnNlIGFzIHBhcnNlUXVlcnlzdHJpbmcgfSBmcm9tIFwicXVlcnlzdHJpbmdcIjtcbmltcG9ydCB7IHBhcnNlIGFzIHBhcnNlVXJsIH0gZnJvbSBcInVybFwiO1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSBcInV0aWxcIjtcblxuaW1wb3J0IHsgZ2VuZXJhdGVDU2hhcnBTZXJ2ZXJTb3VyY2UgfSBmcm9tIFwiQHNka2dlbi9jc2hhcnAtZ2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZURhcnRDbGllbnRTb3VyY2UgfSBmcm9tIFwiQHNka2dlbi9kYXJ0LWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVGU2hhcnBTZXJ2ZXJTb3VyY2UgfSBmcm9tIFwiQHNka2dlbi9mc2hhcnAtZ2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZUFuZHJvaWRDbGllbnRTb3VyY2UgfSBmcm9tIFwiQHNka2dlbi9rb3RsaW4tZ2VuZXJhdG9yXCI7XG5pbXBvcnQgdHlwZSB7IEFzdFJvb3QgfSBmcm9tIFwiQHNka2dlbi9wYXJzZXJcIjtcbmltcG9ydCB7XG4gIERlY2ltYWxQcmltaXRpdmVUeXBlLFxuICBCYXNlNjRQcmltaXRpdmVUeXBlLFxuICBCaWdJbnRQcmltaXRpdmVUeXBlLFxuICBCb29sUHJpbWl0aXZlVHlwZSxcbiAgQnl0ZXNQcmltaXRpdmVUeXBlLFxuICBDbnBqUHJpbWl0aXZlVHlwZSxcbiAgQ3BmUHJpbWl0aXZlVHlwZSxcbiAgRGF0ZVByaW1pdGl2ZVR5cGUsXG4gIERhdGVUaW1lUHJpbWl0aXZlVHlwZSxcbiAgRmxvYXRQcmltaXRpdmVUeXBlLFxuICBIZXhQcmltaXRpdmVUeXBlLFxuICBIdG1sUHJpbWl0aXZlVHlwZSxcbiAgSW50UHJpbWl0aXZlVHlwZSxcbiAgTW9uZXlQcmltaXRpdmVUeXBlLFxuICBPcHRpb25hbFR5cGUsXG4gIFJlc3RBbm5vdGF0aW9uLFxuICBTdHJpbmdQcmltaXRpdmVUeXBlLFxuICBVSW50UHJpbWl0aXZlVHlwZSxcbiAgVXVpZFByaW1pdGl2ZVR5cGUsXG4gIFZvaWRQcmltaXRpdmVUeXBlLFxuICBYbWxQcmltaXRpdmVUeXBlLFxufSBmcm9tIFwiQHNka2dlbi9wYXJzZXJcIjtcbi8vIGltcG9ydCB7IFBMQVlHUk9VTkRfUFVCTElDX1BBVEggfSBmcm9tIFwiQHNka2dlbi9wbGF5Z3JvdW5kXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZVN3aWZ0Q2xpZW50U291cmNlIH0gZnJvbSBcIkBzZGtnZW4vc3dpZnQtZ2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZUJyb3dzZXJDbGllbnRTb3VyY2UsIGdlbmVyYXRlTm9kZUNsaWVudFNvdXJjZSwgZ2VuZXJhdGVOb2RlU2VydmVyU291cmNlIH0gZnJvbSBcIkBzZGtnZW4vdHlwZXNjcmlwdC1nZW5lcmF0b3JcIjtcbmltcG9ydCBCdXNib3kgZnJvbSBcImJ1c2JveVwiO1xuaW1wb3J0IHsgZmlsZVR5cGVGcm9tQnVmZmVyIH0gZnJvbSBcImZpbGUtdHlwZVwiO1xuaW1wb3J0IHsgZ2V0Q2xpZW50SXAgfSBmcm9tIFwicmVxdWVzdC1pcFwiO1xuaW1wb3J0IHN0YXRpY0ZpbGVzSGFuZGxlciBmcm9tIFwic2VydmUtaGFuZGxlclwiO1xuXG5pbXBvcnQgdHlwZSB7IEJhc2VBcGlDb25maWcgfSBmcm9tIFwiLi9hcGktY29uZmlnLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRleHQsIENvbnRleHRSZXBseSwgQ29udGV4dFJlcXVlc3QgfSBmcm9tIFwiLi9jb250ZXh0LmpzXCI7XG5pbXBvcnQgeyBkZWNvZGUsIGVuY29kZSB9IGZyb20gXCIuL2VuY29kZS1kZWNvZGUuanNcIjtcbmltcG9ydCB7IEZhdGFsIH0gZnJvbSBcIi4vZXJyb3IuanNcIjtcbmltcG9ydCB7IGV4ZWN1dGVSZXF1ZXN0IH0gZnJvbSBcIi4vZXhlY3V0ZS5qc1wiO1xuaW1wb3J0IHsgc2V0dXBTd2FnZ2VyIH0gZnJvbSBcIi4vc3dhZ2dlci5qc1wiO1xuaW1wb3J0IHsgaGFzIH0gZnJvbSBcIi4vdXRpbHMuanNcIjtcblxuZXhwb3J0IGNsYXNzIFNka2dlbkh0dHBTZXJ2ZXI8RXh0cmFDb250ZXh0VCA9IHVua25vd24+IHtcbiAgcHVibGljIGh0dHBTZXJ2ZXI6IFNlcnZlcjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGhlYWRlcnMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaGVhbHRoQ2hlY2tzOiBBcnJheTwoKSA9PiBQcm9taXNlPGJvb2xlYW4+PiA9IFtdO1xuXG4gIHByaXZhdGUgaGFuZGxlcnM6IEFycmF5PHtcbiAgICBtZXRob2Q6IHN0cmluZztcbiAgICBtYXRjaGVyOiBzdHJpbmcgfCBSZWdFeHA7XG4gICAgaGFuZGxlcihyZXE6IEluY29taW5nTWVzc2FnZSwgcmVzOiBTZXJ2ZXJSZXNwb25zZSwgYm9keTogQnVmZmVyKTogdm9pZDtcbiAgfT4gPSBbXTtcblxuICBwdWJsaWMgZHluYW1pY0NvcnNPcmlnaW4gPSB0cnVlO1xuXG4gIHB1YmxpYyBpbnRyb3NwZWN0aW9uID0gdHJ1ZTtcblxuICBwdWJsaWMgbG9nID0gKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKX0gJHttZXNzYWdlfWApO1xuICB9O1xuXG4gIHByaXZhdGUgaGFzU3dhZ2dlciA9IGZhbHNlO1xuXG4gIHByaXZhdGUgaWdub3JlZFVybFByZWZpeCA9IFwiXCI7XG5cbiAgcHJpdmF0ZSBleHRyYUNvbnRleHQ6IEV4dHJhQ29udGV4dFQ7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGFwaUNvbmZpZzogQmFzZUFwaUNvbmZpZzxFeHRyYUNvbnRleHRUPiwgLi4ubWF5YmVFeHRyYUNvbnRleHQ6IHt9IGV4dGVuZHMgRXh0cmFDb250ZXh0VCA/IFt7fT9dIDogW0V4dHJhQ29udGV4dFRdKSB7XG4gICAgdGhpcy5leHRyYUNvbnRleHQgPSAobWF5YmVFeHRyYUNvbnRleHRbMF0gPz8ge30pIGFzIEV4dHJhQ29udGV4dFQ7XG4gICAgdGhpcy5odHRwU2VydmVyID0gY3JlYXRlU2VydmVyKHRoaXMuaGFuZGxlUmVxdWVzdC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmVuYWJsZUNvcnMoKTtcbiAgICB0aGlzLmF0dGFjaFJlc3RIYW5kbGVycygpO1xuXG4gICAgY29uc3QgdGFyZ2V0VGFibGUgPSBbXG4gICAgICBbXCIvdGFyZ2V0cy9hbmRyb2lkL2NsaWVudC5rdFwiLCAoYXN0OiBBc3RSb290KSA9PiBnZW5lcmF0ZUFuZHJvaWRDbGllbnRTb3VyY2UoYXN0LCB0cnVlKV0sXG4gICAgICBbXCIvdGFyZ2V0cy9hbmRyb2lkL2NsaWVudF93aXRob3V0X2NhbGxiYWNrcy5rdFwiLCAoYXN0OiBBc3RSb290KSA9PiBnZW5lcmF0ZUFuZHJvaWRDbGllbnRTb3VyY2UoYXN0LCBmYWxzZSldLFxuICAgICAgW1wiL3RhcmdldHMvZG90bmV0L2FwaS5jc1wiLCBnZW5lcmF0ZUNTaGFycFNlcnZlclNvdXJjZV0sXG4gICAgICBbXCIvdGFyZ2V0cy9kb3RuZXQvYXBpLmZzXCIsIGdlbmVyYXRlRlNoYXJwU2VydmVyU291cmNlXSxcbiAgICAgIFtcIi90YXJnZXRzL2ZsdXR0ZXIvY2xpZW50LmRhcnRcIiwgZ2VuZXJhdGVEYXJ0Q2xpZW50U291cmNlXSxcbiAgICAgIFtcIi90YXJnZXRzL2lvcy9jbGllbnQuc3dpZnRcIiwgKGFzdDogQXN0Um9vdCkgPT4gZ2VuZXJhdGVTd2lmdENsaWVudFNvdXJjZShhc3QsIGZhbHNlKV0sXG4gICAgICBbXCIvdGFyZ2V0cy9pb3MvY2xpZW50LXJ4LnN3aWZ0XCIsIChhc3Q6IEFzdFJvb3QpID0+IGdlbmVyYXRlU3dpZnRDbGllbnRTb3VyY2UoYXN0LCB0cnVlKV0sXG4gICAgICBbXCIvdGFyZ2V0cy9ub2RlL2FwaS50c1wiLCBnZW5lcmF0ZU5vZGVTZXJ2ZXJTb3VyY2VdLFxuICAgICAgW1wiL3RhcmdldHMvbm9kZS9jbGllbnQudHNcIiwgZ2VuZXJhdGVOb2RlQ2xpZW50U291cmNlXSxcbiAgICAgIFtcIi90YXJnZXRzL3dlYi9jbGllbnQudHNcIiwgZ2VuZXJhdGVCcm93c2VyQ2xpZW50U291cmNlXSxcbiAgICBdIGFzIGNvbnN0O1xuXG4gICAgZm9yIChjb25zdCBbcGF0aCwgZ2VuZXJhdGVGbl0gb2YgdGFyZ2V0VGFibGUpIHtcbiAgICAgIHRoaXMuYWRkSHR0cEhhbmRsZXIoXCJHRVRcIiwgcGF0aCwgKF9yZXEsIHJlcykgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaW50cm9zcGVjdGlvbikge1xuICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNDA0O1xuICAgICAgICAgIHJlcy5lbmQoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIik7XG4gICAgICAgICAgcmVzLndyaXRlKGdlbmVyYXRlRm4odGhpcy5hcGlDb25maWcuYXN0KSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNTAwO1xuICAgICAgICAgIHJlcy53cml0ZShgJHtlfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRIdHRwSGFuZGxlcihcIkdFVFwiLCBcIi9hc3QuanNvblwiLCAoX3JlcSwgcmVzKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuaW50cm9zcGVjdGlvbikge1xuICAgICAgICByZXMuc3RhdHVzQ29kZSA9IDQwNDtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgcmVzLndyaXRlKEpTT04uc3RyaW5naWZ5KGFwaUNvbmZpZy5hc3RKc29uKSk7XG4gICAgICByZXMuZW5kKCk7XG4gICAgfSk7XG5cbiAgICAvLyB0aGlzLmFkZEh0dHBIYW5kbGVyKFwiR0VUXCIsIC9eXFwvcGxheWdyb3VuZC4qL3UsIChyZXEsIHJlcykgPT4ge1xuICAgIC8vICAgaWYgKCF0aGlzLmludHJvc3BlY3Rpb24pIHtcbiAgICAvLyAgICAgcmVzLnN0YXR1c0NvZGUgPSA0MDQ7XG4gICAgLy8gICAgIHJlcy5lbmQoKTtcbiAgICAvLyAgICAgcmV0dXJuO1xuICAgIC8vICAgfVxuXG4gICAgLy8gICBpZiAocmVxLnVybCkge1xuICAgIC8vICAgICByZXEudXJsID0gcmVxLnVybC5lbmRzV2l0aChcIi9wbGF5Z3JvdW5kXCIpID8gcmVxLnVybC5yZXBsYWNlKC9cXC9wbGF5Z3JvdW5kL3UsIFwiL2luZGV4Lmh0bWxcIikgOiByZXEudXJsLnJlcGxhY2UoL1xcL3BsYXlncm91bmQvdSwgXCJcIik7XG4gICAgLy8gICB9XG5cbiAgICAvLyAgIHN0YXRpY0ZpbGVzSGFuZGxlcihyZXEsIHJlcywge1xuICAgIC8vICAgICBjbGVhblVybHM6IGZhbHNlLFxuICAgIC8vICAgICBkaXJlY3RvcnlMaXN0aW5nOiBmYWxzZSxcbiAgICAvLyAgICAgZXRhZzogdHJ1ZSxcbiAgICAvLyAgICAgcHVibGljOiBQTEFZR1JPVU5EX1BVQkxJQ19QQVRILFxuICAgIC8vICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgLy8gICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgLy8gICAgIHJlcy5zdGF0dXNDb2RlID0gNTAwO1xuICAgIC8vICAgICByZXMud3JpdGUoYCR7ZX1gKTtcbiAgICAvLyAgICAgcmVzLmVuZCgpO1xuICAgIC8vICAgfSk7XG4gICAgLy8gfSk7XG4gIH1cblxuICByZWdpc3RlckhlYWx0aENoZWNrKGhlYWx0aENoZWNrOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+KTogdm9pZCB7XG4gICAgdGhpcy5oZWFsdGhDaGVja3MucHVzaChoZWFsdGhDaGVjayk7XG4gIH1cblxuICBpZ25vcmVVcmxQcmVmaXgodXJsUHJlZml4OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmlnbm9yZWRVcmxQcmVmaXggPSB1cmxQcmVmaXg7XG4gIH1cblxuICBhc3luYyBsaXN0ZW4ocG9ydCA9IDgwMDApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICB0aGlzLmh0dHBTZXJ2ZXIubGlzdGVuKHBvcnQsICgpID0+IHtcbiAgICAgICAgY29uc3QgYWRkciA9IHRoaXMuaHR0cFNlcnZlci5hZGRyZXNzKCkgYXMgQWRkcmVzc0luZm87XG4gICAgICAgIGxldCB1cmxIb3N0OiBzdHJpbmc7XG5cbiAgICAgICAgaWYgKGFkZHIuYWRkcmVzcyA9PT0gXCI6OlwiKSB7XG4gICAgICAgICAgdXJsSG9zdCA9IGBsb2NhbGhvc3Q6JHthZGRyLnBvcnR9YDtcbiAgICAgICAgfSBlbHNlIGlmIChhZGRyLmZhbWlseSA9PT0gXCJpcHY2XCIpIHtcbiAgICAgICAgICB1cmxIb3N0ID0gYFske2FkZHIuYWRkcmVzc31dOiR7YWRkci5wb3J0fWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXJsSG9zdCA9IGAke2FkZHIuYWRkcmVzc306JHthZGRyLnBvcnR9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZGRyLmFkZHJlc3MgPT09IFwiOjpcIiB8fCBhZGRyLmFkZHJlc3MgPT09IFwiMC4wLjAuMFwiKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYFxcbkxpc3RlbmluZyBvbiBwb3J0ICR7YWRkci5wb3J0fWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBcXG5MaXN0ZW5pbmcgb24gcG9ydCAke2FkZHIucG9ydH0gKCR7YWRkci5hZGRyZXNzfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmICh0aGlzLmludHJvc3BlY3Rpb24pIHtcbiAgICAgICAgLy8gICBjb25zb2xlLmxvZyhgUGxheWdyb3VuZDogaHR0cDovLyR7dXJsSG9zdH0vcGxheWdyb3VuZGApO1xuICAgICAgICAvLyB9XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzU3dhZ2dlcikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBTd2FnZ2VyIFVJOiBodHRwOi8vJHt1cmxIb3N0fS9zd2FnZ2VyYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZyhcIlwiKTtcblxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBwcm9taXNpZnkodGhpcy5odHRwU2VydmVyLmNsb3NlLmJpbmQodGhpcy5odHRwU2VydmVyKSkoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlQ29ycygpIHtcbiAgICB0aGlzLmFkZEhlYWRlcihcIkFjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHNcIiwgXCJERUxFVEUsIEhFQUQsIFBVVCwgUE9TVCwgUEFUQ0gsIEdFVCwgT1BUSU9OU1wiKTtcbiAgICB0aGlzLmFkZEhlYWRlcihcIkFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnNcIiwgXCJDb250ZW50LVR5cGVcIik7XG4gICAgdGhpcy5hZGRIZWFkZXIoXCJBY2Nlc3MtQ29udHJvbC1NYXgtQWdlXCIsIFwiODY0MDBcIik7XG4gIH1cblxuICBhZGRIZWFkZXIoaGVhZGVyOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjbGVhbkhlYWRlciA9IGhlYWRlci50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuaGVhZGVycy5nZXQoY2xlYW5IZWFkZXIpO1xuXG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICBpZiAoIWV4aXN0aW5nLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KGNsZWFuSGVhZGVyLCBgJHtleGlzdGluZ30sICR7dmFsdWV9YCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVhZGVycy5zZXQoY2xlYW5IZWFkZXIsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBhZGRIdHRwSGFuZGxlcihtZXRob2Q6IHN0cmluZywgbWF0Y2hlcjogc3RyaW5nIHwgUmVnRXhwLCBoYW5kbGVyOiAocmVxOiBJbmNvbWluZ01lc3NhZ2UsIHJlczogU2VydmVyUmVzcG9uc2UsIGJvZHk6IEJ1ZmZlcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlcnMucHVzaCh7IGhhbmRsZXIsIG1hdGNoZXIsIG1ldGhvZCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZEJlc3RIYW5kbGVyKHBhdGg6IHN0cmluZywgcmVxOiBJbmNvbWluZ01lc3NhZ2UpIHtcbiAgICBjb25zdCBtYXRjaGluZ0hhbmRsZXJzID0gdGhpcy5oYW5kbGVyc1xuICAgICAgLmZpbHRlcigoeyBtZXRob2QgfSkgPT4gbWV0aG9kID09PSByZXEubWV0aG9kKVxuICAgICAgLmZpbHRlcigoeyBtYXRjaGVyIH0pID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXRjaGVyID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgcmV0dXJuIG1hdGNoZXIgPT09IHBhdGg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWF0Y2hlci5leGVjKHBhdGgpPy5bMF0gPT09IHBhdGg7XG4gICAgICB9KVxuICAgICAgLnNvcnQoKHsgbWF0Y2hlcjogZmlyc3QgfSwgeyBtYXRjaGVyOiBzZWNvbmQgfSkgPT4ge1xuICAgICAgICAvLyBQcmVmZXIgc3RyaW5nIG1hdGNoZXMgaW5zdGVhZCBvZiBSZWdleHAgbWF0Y2hlc1xuICAgICAgICBpZiAodHlwZW9mIGZpcnN0ID09PSBcInN0cmluZ1wiICYmIHR5cGVvZiBzZWNvbmQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZmlyc3QgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNlY29uZCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3RNYXRjaCA9IGZpcnN0LmV4ZWMocGF0aCk7XG4gICAgICAgIGNvbnN0IHNlY29uZE1hdGNoID0gc2Vjb25kLmV4ZWMocGF0aCk7XG5cbiAgICAgICAgaWYgKCFmaXJzdE1hdGNoKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzZWNvbmRNYXRjaCkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29tcHV0ZSBob3cgbWFueSBjaGFyYWN0ZXJzIHdlcmUgTk9UIHBhcnQgb2YgYSBjYXB0dXJlIGdyb3VwXG4gICAgICAgIGNvbnN0IGZpcnN0TGVuZ3RoID0gZmlyc3RNYXRjaFswXS5sZW5ndGggLSBmaXJzdE1hdGNoLnNsaWNlKDEpLnJlZHVjZSgoYWNjLCBjdXIpID0+IGFjYyArIGN1ci5sZW5ndGgsIDApO1xuICAgICAgICBjb25zdCBzZWNvbmRMZW5ndGggPSBzZWNvbmRNYXRjaFswXS5sZW5ndGggLSBzZWNvbmRNYXRjaC5zbGljZSgxKS5yZWR1Y2UoKGFjYywgY3VyKSA9PiBhY2MgKyBjdXIubGVuZ3RoLCAwKTtcblxuICAgICAgICAvLyBQcmVmZXIgdGhlIG1heGltdW0gbnVtYmVyIG9mIG5vbi1jYXB0dXJlZCBjaGFyYWN0ZXJzXG4gICAgICAgIHJldHVybiBzZWNvbmRMZW5ndGggLSBmaXJzdExlbmd0aDtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIG1hdGNoaW5nSGFuZGxlcnMubGVuZ3RoID8gbWF0Y2hpbmdIYW5kbGVyc1swXSA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGF0dGFjaFJlc3RIYW5kbGVycygpIHtcbiAgICBmdW5jdGlvbiBlc2NhcGVSZWdFeHAoc3RyOiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2d1LCBcIlxcXFwkJlwiKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG9wIG9mIHRoaXMuYXBpQ29uZmlnLmFzdC5vcGVyYXRpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IGFubiBvZiBvcC5hbm5vdGF0aW9ucykge1xuICAgICAgICBpZiAoIShhbm4gaW5zdGFuY2VvZiBSZXN0QW5ub3RhdGlvbikpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5oYXNTd2FnZ2VyKSB7XG4gICAgICAgICAgc2V0dXBTd2FnZ2VyKHRoaXMpO1xuICAgICAgICAgIHRoaXMuaGFzU3dhZ2dlciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXRoRnJhZ21lbnRzID0gYW5uLnBhdGguc3BsaXQoL1xce1xcdytcXH0vdSk7XG5cbiAgICAgICAgbGV0IHBhdGhSZWdleCA9IFwiXlwiO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aEZyYWdtZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgcGF0aFJlZ2V4ICs9IFwiKFteL10rPylcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXRoUmVnZXggKz0gZXNjYXBlUmVnRXhwKHBhdGhGcmFnbWVudHNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcGF0aFJlZ2V4ICs9IFwiLz8kXCI7XG5cbiAgICAgICAgZm9yIChjb25zdCBoZWFkZXIgb2YgYW5uLmhlYWRlcnMua2V5cygpKSB7XG4gICAgICAgICAgdGhpcy5hZGRIZWFkZXIoXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzXCIsIGhlYWRlci50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbWlzdXNlZC1wcm9taXNlc1xuICAgICAgICB0aGlzLmFkZEh0dHBIYW5kbGVyKGFubi5tZXRob2QsIG5ldyBSZWdFeHAocGF0aFJlZ2V4LCBcInVcIiksIGFzeW5jIChyZXEsIHJlcywgYm9keSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgICAgICAgICAgY29uc3QgZmlsZXM6IENvbnRleHRSZXF1ZXN0W1wiZmlsZXNcIl0gPSBbXTtcblxuICAgICAgICAgICAgY29uc3QgeyBwYXRobmFtZSwgcXVlcnkgfSA9IHBhcnNlVXJsKHJlcS51cmwgPz8gXCJcIik7XG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IHBhdGhuYW1lPy5tYXRjaChwYXRoUmVnZXgpO1xuXG4gICAgICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNDA0O1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNpbXBsZUFyZ3MgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nIHwgbnVsbD4oKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbm4ucGF0aFZhcmlhYmxlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICBjb25zdCBhcmdOYW1lID0gYW5uLnBhdGhWYXJpYWJsZXNbaV07XG4gICAgICAgICAgICAgIGNvbnN0IGFyZ1ZhbHVlID0gbWF0Y2hbaSArIDFdO1xuXG4gICAgICAgICAgICAgIHNpbXBsZUFyZ3Muc2V0KGFyZ05hbWUsIGFyZ1ZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGFyc2VkUXVlcnkgPSBxdWVyeSA/IHBhcnNlUXVlcnlzdHJpbmcocXVlcnkpIDoge307XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgYXJnTmFtZSBvZiBhbm4ucXVlcnlWYXJpYWJsZXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgYXJnVmFsdWUgPSBwYXJzZWRRdWVyeVthcmdOYW1lXSA/PyBudWxsO1xuXG4gICAgICAgICAgICAgIGlmIChhcmdWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc2ltcGxlQXJncy5zZXQoYXJnTmFtZSwgQXJyYXkuaXNBcnJheShhcmdWYWx1ZSkgPyBhcmdWYWx1ZS5qb2luKFwiXCIpIDogYXJnVmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtoZWFkZXJOYW1lLCBhcmdOYW1lXSBvZiBhbm4uaGVhZGVycykge1xuICAgICAgICAgICAgICBjb25zdCBhcmdWYWx1ZSA9IHJlcS5oZWFkZXJzW2hlYWRlck5hbWUudG9Mb3dlckNhc2UoKV0gPz8gbnVsbDtcblxuICAgICAgICAgICAgICBpZiAoYXJnVmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHNpbXBsZUFyZ3Muc2V0KGFyZ05hbWUsIEFycmF5LmlzQXJyYXkoYXJnVmFsdWUpID8gYXJnVmFsdWUuam9pbihcIlwiKSA6IGFyZ1ZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFhbm4uYm9keVZhcmlhYmxlICYmIHJlcS5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdPy5tYXRjaCgvXmFwcGxpY2F0aW9uXFwveC13d3ctZm9ybS11cmxlbmNvZGVkL2l1KSkge1xuICAgICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gcGFyc2VRdWVyeXN0cmluZyhib2R5LnRvU3RyaW5nKCkpO1xuXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgYXJnTmFtZSBvZiBhbm4ucXVlcnlWYXJpYWJsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcmdWYWx1ZSA9IHBhcnNlZEJvZHlbYXJnTmFtZV0gPz8gbnVsbDtcblxuICAgICAgICAgICAgICAgIGlmIChhcmdWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2ltcGxlQXJncy5zZXQoYXJnTmFtZSwgQXJyYXkuaXNBcnJheShhcmdWYWx1ZSkgPyBhcmdWYWx1ZS5qb2luKFwiXCIpIDogYXJnVmFsdWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFhbm4uYm9keVZhcmlhYmxlICYmIHJlcS5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdPy5tYXRjaCgvXm11bHRpcGFydFxcL2Zvcm0tZGF0YS9pdSkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYnVzYm95ID0gQnVzYm95KHsgaGVhZGVyczogcmVxLmhlYWRlcnMgfSk7XG4gICAgICAgICAgICAgIGNvbnN0IGZpbGVQcm9taXNlczogQXJyYXk8UHJvbWlzZTx2b2lkPj4gPSBbXTtcblxuICAgICAgICAgICAgICBidXNib3kub24oXCJmaWVsZFwiLCAoZmllbGQsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGFubi5xdWVyeVZhcmlhYmxlcy5pbmNsdWRlcyhmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgIHNpbXBsZUFyZ3Muc2V0KGZpZWxkLCBgJHt2YWx1ZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGJ1c2JveS5vbihcImZpbGVcIiwgKF9maWVsZCwgc3RyZWFtLCBpbmZvKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcE5hbWUgPSByYW5kb21CeXRlcygzMikudG9TdHJpbmcoXCJoZXhcIik7XG4gICAgICAgICAgICAgICAgY29uc3Qgd3JpdGVTdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbSh0ZW1wTmFtZSk7XG5cbiAgICAgICAgICAgICAgICBmaWxlUHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJlYW0ub24oXCJlcnJvclwiLCByZWplY3QpO1xuXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtLm9uKFwiY2xvc2VcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRzID0gY3JlYXRlUmVhZFN0cmVhbSh0ZW1wTmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKHsgY29udGVudHMsIG5hbWU6IGluZm8uZmlsZW5hbWUgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBjb250ZW50cy5vbihcIm9wZW5cIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rKHRlbXBOYW1lLCBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJlYW0ub24oXCJvcGVuXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucGlwZSh3cml0ZVN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIGJ1c2JveS5vbihcImZpbmlzaFwiLCByZXNvbHZlKTtcbiAgICAgICAgICAgICAgICBidXNib3kub24oXCJlcnJvclwiLCByZWplY3QpO1xuICAgICAgICAgICAgICAgIGJ1c2JveS53cml0ZShib2R5KTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoZmlsZVByb21pc2VzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYW5uLmJvZHlWYXJpYWJsZSkge1xuICAgICAgICAgICAgICBjb25zdCBhcmdOYW1lID0gYW5uLmJvZHlWYXJpYWJsZTtcbiAgICAgICAgICAgICAgY29uc3QgYXJnID0gb3AuYXJncy5maW5kKHggPT4geC5uYW1lID09PSBhcmdOYW1lKTtcblxuICAgICAgICAgICAgICBpZiAoL2FwcGxpY2F0aW9uXFwvanNvbi9pdS50ZXN0KHJlcS5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdID8/IFwiXCIpKSB7XG4gICAgICAgICAgICAgICAgYXJnc1thcmdOYW1lXSA9IEpTT04ucGFyc2UoYm9keS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcmcpIHtcbiAgICAgICAgICAgICAgICBsZXQgeyB0eXBlIH0gPSBhcmc7XG4gICAgICAgICAgICAgICAgbGV0IHNvbHZlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgaW5zdGFuY2VvZiBPcHRpb25hbFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChib2R5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzW2FyZ05hbWVdID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlLmJhc2U7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFzb2x2ZWQpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdHlwZSBpbnN0YW5jZW9mIEJvb2xQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBJbnRQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBVSW50UHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlIGluc3RhbmNlb2YgRmxvYXRQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBTdHJpbmdQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBEYXRlUHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlIGluc3RhbmNlb2YgRGF0ZVRpbWVQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBNb25leVByaW1pdGl2ZVR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSBpbnN0YW5jZW9mIERlY2ltYWxQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBCaWdJbnRQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBDcGZQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBDbnBqUHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlIGluc3RhbmNlb2YgVXVpZFByaW1pdGl2ZVR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSBpbnN0YW5jZW9mIEhleFByaW1pdGl2ZVR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSBpbnN0YW5jZW9mIEJhc2U2NFByaW1pdGl2ZVR5cGVcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBzaW1wbGVBcmdzLnNldChhcmdOYW1lLCBib2R5LnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgQnl0ZXNQcmltaXRpdmVUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbYXJnTmFtZV0gPSBib2R5LnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1thcmdOYW1lXSA9IEpTT04ucGFyc2UoYm9keS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBbYXJnTmFtZSwgYXJnVmFsdWVdIG9mIHNpbXBsZUFyZ3MpIHtcbiAgICAgICAgICAgICAgY29uc3QgYXJnID0gb3AuYXJncy5maW5kKHggPT4geC5uYW1lID09PSBhcmdOYW1lKTtcblxuICAgICAgICAgICAgICBpZiAoIWFyZykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbGV0IHsgdHlwZSB9ID0gYXJnO1xuXG4gICAgICAgICAgICAgIGlmICh0eXBlIGluc3RhbmNlb2YgT3B0aW9uYWxUeXBlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ1ZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICBhcmdzW2FyZ05hbWVdID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0eXBlID0gdHlwZS5iYXNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcmdWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGFyZ3NbYXJnTmFtZV0gPSBhcmdWYWx1ZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0eXBlIGluc3RhbmNlb2YgQm9vbFByaW1pdGl2ZVR5cGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJnVmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICAgICAgICBhcmdzW2FyZ05hbWVdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ1ZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgICAgICAgIGFyZ3NbYXJnTmFtZV0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgYXJnc1thcmdOYW1lXSA9IGFyZ1ZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgVUludFByaW1pdGl2ZVR5cGUgfHwgdHlwZSBpbnN0YW5jZW9mIEludFByaW1pdGl2ZVR5cGUgfHwgdHlwZSBpbnN0YW5jZW9mIE1vbmV5UHJpbWl0aXZlVHlwZSkge1xuICAgICAgICAgICAgICAgIGFyZ3NbYXJnTmFtZV0gPSBwYXJzZUludChhcmdWYWx1ZSwgMTApO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBGbG9hdFByaW1pdGl2ZVR5cGUpIHtcbiAgICAgICAgICAgICAgICBhcmdzW2FyZ05hbWVdID0gcGFyc2VGbG9hdChhcmdWYWx1ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXJnc1thcmdOYW1lXSA9IGFyZ1ZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGlwID0gZ2V0Q2xpZW50SXAocmVxKTtcblxuICAgICAgICAgICAgaWYgKCFpcCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBkZXRlcm1pbmUgY2xpZW50IElQXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0OiBDb250ZXh0UmVxdWVzdCA9IHtcbiAgICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgICAgZGV2aWNlSW5mbzoge1xuICAgICAgICAgICAgICAgIGZpbmdlcnByaW50OiBudWxsLFxuICAgICAgICAgICAgICAgIGlkOiByYW5kb21CeXRlcygxNikudG9TdHJpbmcoXCJoZXhcIiksXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2U6IG51bGwsXG4gICAgICAgICAgICAgICAgcGxhdGZvcm06IG51bGwsXG4gICAgICAgICAgICAgICAgdGltZXpvbmU6IG51bGwsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJyZXN0XCIsXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogbnVsbCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXh0cmE6IHt9LFxuICAgICAgICAgICAgICBmaWxlcyxcbiAgICAgICAgICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnMsXG4gICAgICAgICAgICAgIGlkOiByYW5kb21CeXRlcygxNikudG9TdHJpbmcoXCJoZXhcIiksXG4gICAgICAgICAgICAgIGlwLFxuICAgICAgICAgICAgICBuYW1lOiBvcC5uYW1lLFxuICAgICAgICAgICAgICB2ZXJzaW9uOiAzLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRlUmVxdWVzdChyZXF1ZXN0LCAoY3R4LCByZXBseSkgPT4ge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2hlYWRlcktleSwgaGVhZGVyVmFsdWVdIG9mIGN0eC5yZXNwb25zZS5oZWFkZXJzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKGhlYWRlcktleSwgaGVhZGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjdHg/LnJlc3BvbnNlLnN0YXR1c0NvZGUpIHtcbiAgICAgICAgICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gY3R4LnJlc3BvbnNlLnN0YXR1c0NvZGU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlcGx5LmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMubWFrZVJlc3BvbnNlRXJyb3IocmVwbHkuZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoIWN0eD8ucmVzcG9uc2Uuc3RhdHVzQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXMuc3RhdHVzQ29kZSA9IGVycm9yLnR5cGUgPT09IFwiRmF0YWxcIiA/IDUwMCA6IDQwMDtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcihcImNvbnRlbnQtdHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICAgICAgICByZXMud3JpdGUoSlNPTi5zdHJpbmdpZnkoZXJyb3IpKTtcbiAgICAgICAgICAgICAgICAgIHJlcy5lbmQoKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmVxLmhlYWRlcnMuYWNjZXB0ID09PSBcImFwcGxpY2F0aW9uL2pzb25cIikge1xuICAgICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcihcImNvbnRlbnQtdHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICAgICAgICByZXMud3JpdGUoSlNPTi5zdHJpbmdpZnkocmVwbHkucmVzdWx0KSk7XG4gICAgICAgICAgICAgICAgICByZXMuZW5kKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGxldCB0eXBlID0gb3AucmV0dXJuVHlwZTtcblxuICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgaW5zdGFuY2VvZiBPcHRpb25hbFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcGx5LnJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgIGlmICghY3R4Py5yZXNwb25zZS5zdGF0dXNDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXMuc3RhdHVzQ29kZSA9IGFubi5tZXRob2QgPT09IFwiR0VUXCIgPyA0MDQgOiAyMDQ7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlLmJhc2U7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdHlwZSBpbnN0YW5jZW9mIEJvb2xQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBJbnRQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBVSW50UHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlIGluc3RhbmNlb2YgRmxvYXRQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBTdHJpbmdQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBEYXRlUHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlIGluc3RhbmNlb2YgRGF0ZVRpbWVQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBNb25leVByaW1pdGl2ZVR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSBpbnN0YW5jZW9mIERlY2ltYWxQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBCaWdJbnRQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBDcGZQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBDbnBqUHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlIGluc3RhbmNlb2YgVXVpZFByaW1pdGl2ZVR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSBpbnN0YW5jZW9mIEhleFByaW1pdGl2ZVR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSBpbnN0YW5jZW9mIEJhc2U2NFByaW1pdGl2ZVR5cGVcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKFwiY29udGVudC10eXBlXCIsIFwidGV4dC9wbGFpblwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLndyaXRlKGAke3JlcGx5LnJlc3VsdH1gKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgSHRtbFByaW1pdGl2ZVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcihcImNvbnRlbnQtdHlwZVwiLCBcInRleHQvaHRtbFwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLndyaXRlKGAke3JlcGx5LnJlc3VsdH1gKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWG1sUHJpbWl0aXZlVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKFwiY29udGVudC10eXBlXCIsIFwidGV4dC94bWxcIik7XG4gICAgICAgICAgICAgICAgICAgIHJlcy53cml0ZShgJHtyZXBseS5yZXN1bHR9YCk7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5lbmQoKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIEJ5dGVzUHJpbWl0aXZlVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShyZXBseS5yZXN1bHQgYXMgc3RyaW5nLCBcImJhc2U2NFwiKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgICAgICAgICAgICAgICAgIGZpbGVUeXBlRnJvbUJ1ZmZlcihidWZmZXIpXG4gICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZmlsZVR5cGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcihcImNvbnRlbnQtdHlwZVwiLCBmaWxlVHlwZT8ubWltZSA/PyBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcihcImNvbnRlbnQtdHlwZVwiLCBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcy53cml0ZShidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoXCJjb250ZW50LXR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXMud3JpdGUoSlNPTi5zdHJpbmdpZnkocmVwbHkucmVzdWx0KSk7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5lbmQoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXMuaGVhZGVyc1NlbnQpIHtcbiAgICAgICAgICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNTAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlcy5lbmQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgaWYgKCFyZXMuaGVhZGVyc1NlbnQpIHtcbiAgICAgICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSA1MDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlcy5lbmQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVSZXF1ZXN0ID0gKHJlcTogSW5jb21pbmdNZXNzYWdlLCByZXM6IFNlcnZlclJlc3BvbnNlKSA9PiB7XG4gICAgY29uc3QgaHJTdGFydCA9IHByb2Nlc3MuaHJ0aW1lKCk7XG5cbiAgICByZXEub24oXCJlcnJvclwiLCBlcnIgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgcmVzLmVuZCgpO1xuICAgIH0pO1xuXG4gICAgcmVzLm9uKFwiZXJyb3JcIiwgZXJyID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIHJlcy5lbmQoKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmR5bmFtaWNDb3JzT3JpZ2luICYmIHJlcS5oZWFkZXJzLm9yaWdpbikge1xuICAgICAgcmVzLnNldEhlYWRlcihcIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpblwiLCByZXEuaGVhZGVycy5vcmlnaW4pO1xuICAgICAgcmVzLnNldEhlYWRlcihcIlZhcnlcIiwgXCJPcmlnaW5cIik7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbaGVhZGVyLCB2YWx1ZV0gb2YgdGhpcy5oZWFkZXJzKSB7XG4gICAgICBpZiAocmVxLm1ldGhvZCA9PT0gXCJPUFRJT05TXCIgJiYgIWhlYWRlci5zdGFydHNXaXRoKFwiYWNjZXNzLWNvbnRyb2wtXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICByZXMuc2V0SGVhZGVyKGhlYWRlciwgdmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChyZXEubWV0aG9kID09PSBcIk9QVElPTlNcIikge1xuICAgICAgcmVzLndyaXRlSGVhZCgyMDApO1xuICAgICAgcmVzLmVuZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUJvZHkgPSAoYm9keTogQnVmZmVyKSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZVJlcXVlc3RXaXRoQm9keShyZXEsIHJlcywgYm9keSwgaHJTdGFydCkuY2F0Y2goKGU6IHVua25vd24pID0+IHRoaXMud3JpdGVSZXBseShyZXMsIG51bGwsIHsgZXJyb3I6IGUgfSwgaHJTdGFydCkpO1xuICAgIH07XG5cbiAgICAvLyBHb29nbGUgQ2xvdWQgRnVuY3Rpb25zIGFkZCBhIHJhd0JvZHkgcHJvcGVydHkgdG8gdGhlIHJlcXVlc3Qgb2JqZWN0XG4gICAgaWYgKGhhcyhyZXEsIFwicmF3Qm9keVwiKSAmJiByZXEucmF3Qm9keSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgaGFuZGxlQm9keShyZXEucmF3Qm9keSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHk6IEJ1ZmZlcltdID0gW107XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG4gICAgICByZXEub24oXCJkYXRhXCIsIGNodW5rID0+IGJvZHkucHVzaChjaHVuaykpO1xuXG4gICAgICByZXEub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICBoYW5kbGVCb2R5KEJ1ZmZlci5jb25jYXQoYm9keSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlUmVxdWVzdFdpdGhCb2R5KHJlcTogSW5jb21pbmdNZXNzYWdlLCByZXM6IFNlcnZlclJlc3BvbnNlLCBib2R5OiBCdWZmZXIsIGhyU3RhcnQ6IFtudW1iZXIsIG51bWJlcl0pIHtcbiAgICBjb25zdCB7IHBhdGhuYW1lLCBxdWVyeSB9ID0gcGFyc2VVcmwocmVxLnVybCA/PyBcIlwiKTtcbiAgICBsZXQgcGF0aCA9IHBhdGhuYW1lID8/IFwiXCI7XG5cbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKHRoaXMuaWdub3JlZFVybFByZWZpeCkpIHtcbiAgICAgIHBhdGggPSBwYXRoLnNsaWNlKHRoaXMuaWdub3JlZFVybFByZWZpeC5sZW5ndGgpO1xuICAgIH1cblxuICAgIGlmICghcmVxLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0/Lm1hdGNoKC9hcHBsaWNhdGlvblxcL3Nka2dlbi9pdSkpIHtcbiAgICAgIGNvbnN0IGV4dGVybmFsSGFuZGxlciA9IHRoaXMuZmluZEJlc3RIYW5kbGVyKHBhdGgsIHJlcSk7XG5cbiAgICAgIGlmIChleHRlcm5hbEhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5sb2coYEhUVFAgJHtyZXEubWV0aG9kfSAke3BhdGh9JHtxdWVyeSA/IGA/JHtxdWVyeX1gIDogXCJcIn1gKTtcbiAgICAgICAgZXh0ZXJuYWxIYW5kbGVyLmhhbmRsZXIocmVxLCByZXMsIGJvZHkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLThcIik7XG5cbiAgICBpZiAocmVxLm1ldGhvZCA9PT0gXCJIRUFEXCIpIHtcbiAgICAgIHJlcy53cml0ZUhlYWQoMjAwKTtcbiAgICAgIHJlcy5lbmQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocmVxLm1ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgaWYgKHBhdGggIT09IFwiL1wiKSB7XG4gICAgICAgIHJlcy53cml0ZUhlYWQoNDA0KTtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBvayA9IHRydWU7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoY29uc3QgaGVhbHRoQ2hlY2sgb2YgdGhpcy5oZWFsdGhDaGVja3MpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvayA9IGF3YWl0IGhlYWx0aENoZWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgb2sgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmVzLnN0YXR1c0NvZGUgPSBvayA/IDIwMCA6IDUwMDtcbiAgICAgIHJlcy53cml0ZShKU09OLnN0cmluZ2lmeSh7IG9rIH0pKTtcbiAgICAgIHJlcy5lbmQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocmVxLm1ldGhvZCAhPT0gXCJQT1NUXCIpIHtcbiAgICAgIHJlcy53cml0ZUhlYWQoNDAwKTtcbiAgICAgIHJlcy5lbmQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjbGllbnRJcCA9IGdldENsaWVudElwKHJlcSk7XG5cbiAgICBpZiAoIWNsaWVudElwKSB7XG4gICAgICB0aGlzLndyaXRlUmVwbHkoXG4gICAgICAgIHJlcyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAge1xuICAgICAgICAgIGVycm9yOiBuZXcgRmF0YWwoXCJDb3VsZG4ndCBkZXRlcm1pbmUgY2xpZW50IElQXCIpLFxuICAgICAgICB9LFxuICAgICAgICBoclN0YXJ0LFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5wYXJzZVJlcXVlc3QocmVxLCBib2R5LnRvU3RyaW5nKCksIGNsaWVudElwKTtcblxuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgdGhpcy53cml0ZVJlcGx5KFxuICAgICAgICByZXMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHtcbiAgICAgICAgICBlcnJvcjogbmV3IEZhdGFsKFwiQ291bGRuJ3QgcGFyc2UgcmVxdWVzdFwiKSxcbiAgICAgICAgfSxcbiAgICAgICAgaHJTdGFydCxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5leGVjdXRlUmVxdWVzdChyZXF1ZXN0LCAoY3R4LCByZXBseSkgPT4gdGhpcy53cml0ZVJlcGx5KHJlcywgY3R4LCByZXBseSwgaHJTdGFydCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlUmVxdWVzdChyZXF1ZXN0OiBDb250ZXh0UmVxdWVzdCwgd3JpdGVSZXBseTogKGN0eDogQ29udGV4dCB8IG51bGwsIHJlcGx5OiBDb250ZXh0UmVwbHkpID0+IHZvaWQpIHtcbiAgICBjb25zdCBjdHg6IENvbnRleHQgJiBFeHRyYUNvbnRleHRUID0ge1xuICAgICAgLi4udGhpcy5leHRyYUNvbnRleHQsXG4gICAgICByZXF1ZXN0LFxuICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgaGVhZGVyczogbmV3IE1hcCgpLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgd3JpdGVSZXBseShjdHgsIGF3YWl0IGV4ZWN1dGVSZXF1ZXN0KGN0eCwgdGhpcy5hcGlDb25maWcpKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VSZXF1ZXN0KHJlcTogSW5jb21pbmdNZXNzYWdlLCBib2R5OiBzdHJpbmcsIGlwOiBzdHJpbmcpOiBDb250ZXh0UmVxdWVzdCB8IG51bGwge1xuICAgIHN3aXRjaCAodGhpcy5pZGVudGlmeVJlcXVlc3RWZXJzaW9uKHJlcSwgYm9keSkpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VSZXF1ZXN0VjEocmVxLCBib2R5LCBpcCk7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlUmVxdWVzdFYyKHJlcSwgYm9keSwgaXApO1xuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVJlcXVlc3RWMyhyZXEsIGJvZHksIGlwKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byB1bmRlcnN0YW5kIHJlcXVlc3RcIik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpZGVudGlmeVJlcXVlc3RWZXJzaW9uKF9yZXE6IEluY29taW5nTWVzc2FnZSwgYm9keTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGJvZHkpIGFzIHVua25vd247XG5cbiAgICBpZiAodHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIiAmJiBwYXJzZWQgJiYgaGFzKHBhcnNlZCwgXCJ2ZXJzaW9uXCIpICYmIHR5cGVvZiBwYXJzZWQudmVyc2lvbiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgcmV0dXJuIHBhcnNlZC52ZXJzaW9uO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIiAmJiBwYXJzZWQgJiYgaGFzKHBhcnNlZCwgXCJyZXF1ZXN0SWRcIikpIHtcbiAgICAgIHJldHVybiAyO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIiAmJiBwYXJzZWQgJiYgaGFzKHBhcnNlZCwgXCJkZXZpY2VcIikpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIHJldHVybiAzO1xuICB9XG5cbiAgLy8gT2xkIFNka2dlbiBmb3JtYXRcbiAgcHJpdmF0ZSBwYXJzZVJlcXVlc3RWMShyZXE6IEluY29taW5nTWVzc2FnZSwgYm9keTogc3RyaW5nLCBpcDogc3RyaW5nKTogQ29udGV4dFJlcXVlc3Qge1xuICAgIGNvbnN0IHBhcnNlZCA9IGRlY29kZShcbiAgICAgIHtcbiAgICAgICAgUmVxdWVzdDoge1xuICAgICAgICAgIGFyZ3M6IFwianNvblwiLFxuICAgICAgICAgIGRldmljZTogXCJSZXF1ZXN0RGV2aWNlXCIsXG4gICAgICAgICAgaWQ6IFwic3RyaW5nXCIsXG4gICAgICAgICAgbmFtZTogXCJzdHJpbmdcIixcbiAgICAgICAgfSxcbiAgICAgICAgUmVxdWVzdERldmljZToge1xuICAgICAgICAgIGZpbmdlcnByaW50OiBcInN0cmluZz9cIixcbiAgICAgICAgICBpZDogXCJzdHJpbmc/XCIsXG4gICAgICAgICAgbGFuZ3VhZ2U6IFwic3RyaW5nP1wiLFxuICAgICAgICAgIHBsYXRmb3JtOiBcImpzb24/XCIsXG4gICAgICAgICAgdGltZXpvbmU6IFwic3RyaW5nP1wiLFxuICAgICAgICAgIHR5cGU6IFwic3RyaW5nP1wiLFxuICAgICAgICAgIHZlcnNpb246IFwic3RyaW5nP1wiLFxuICAgICAgICB9LFxuICAgICAgfSBhcyBjb25zdCxcbiAgICAgIFwicm9vdFwiLFxuICAgICAgXCJSZXF1ZXN0XCIsXG4gICAgICBKU09OLnBhcnNlKGJvZHkpLFxuICAgICk7XG5cbiAgICBjb25zdCBkZXZpY2VJZCA9IHBhcnNlZC5kZXZpY2UuaWQgPz8gcmFuZG9tQnl0ZXMoMjApLnRvU3RyaW5nKFwiaGV4XCIpO1xuXG4gICAgaWYgKCFwYXJzZWQuYXJncyB8fCBBcnJheS5pc0FycmF5KHBhcnNlZC5hcmdzKSB8fCB0eXBlb2YgcGFyc2VkLmFyZ3MgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkICdhcmdzJyB0byBiZSBhbiBvYmplY3RcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFyZ3M6IHBhcnNlZC5hcmdzLFxuICAgICAgZGV2aWNlSW5mbzoge1xuICAgICAgICBmaW5nZXJwcmludDogcGFyc2VkLmRldmljZS5maW5nZXJwcmludCxcbiAgICAgICAgaWQ6IGRldmljZUlkLFxuICAgICAgICBsYW5ndWFnZTogcGFyc2VkLmRldmljZS5sYW5ndWFnZSxcbiAgICAgICAgcGxhdGZvcm06IHBhcnNlZC5kZXZpY2UucGxhdGZvcm0sXG4gICAgICAgIHRpbWV6b25lOiBwYXJzZWQuZGV2aWNlLnRpbWV6b25lLFxuICAgICAgICB0eXBlOiBwYXJzZWQuZGV2aWNlLnR5cGUgPz8gKHR5cGVvZiBwYXJzZWQuZGV2aWNlLnBsYXRmb3JtID09PSBcInN0cmluZ1wiID8gcGFyc2VkLmRldmljZS5wbGF0Zm9ybSA6IFwiXCIpLFxuICAgICAgICB2ZXJzaW9uOiBwYXJzZWQuZGV2aWNlLnZlcnNpb24sXG4gICAgICB9LFxuICAgICAgZXh0cmE6IHt9LFxuICAgICAgZmlsZXM6IFtdLFxuICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnMsXG4gICAgICBpZDogYCR7ZGV2aWNlSWR9LSR7cGFyc2VkLmlkfWAsXG4gICAgICBpcCxcbiAgICAgIG5hbWU6IHBhcnNlZC5uYW1lLFxuICAgICAgdmVyc2lvbjogMSxcbiAgICB9O1xuICB9XG5cbiAgLy8gTWF4aW1hIHNka2dlbiBmb3JtYXRcbiAgcHJpdmF0ZSBwYXJzZVJlcXVlc3RWMihyZXE6IEluY29taW5nTWVzc2FnZSwgYm9keTogc3RyaW5nLCBpcDogc3RyaW5nKTogQ29udGV4dFJlcXVlc3Qge1xuICAgIGNvbnN0IHBhcnNlZCA9IGRlY29kZShcbiAgICAgIHtcbiAgICAgICAgUmVxdWVzdDoge1xuICAgICAgICAgIGFyZ3M6IFwianNvblwiLFxuICAgICAgICAgIGRldmljZUZpbmdlcnByaW50OiBcInN0cmluZz9cIixcbiAgICAgICAgICBkZXZpY2VJZDogXCJzdHJpbmdcIixcbiAgICAgICAgICBpbmZvOiBcIlJlcXVlc3RJbmZvXCIsXG4gICAgICAgICAgbmFtZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBwYXJ0bmVySWQ6IFwic3RyaW5nP1wiLFxuICAgICAgICAgIHJlcXVlc3RJZDogXCJzdHJpbmc/XCIsXG4gICAgICAgICAgc2Vzc2lvbklkOiBcInN0cmluZz9cIixcbiAgICAgICAgfSxcbiAgICAgICAgUmVxdWVzdEluZm86IHtcbiAgICAgICAgICBicm93c2VyVXNlckFnZW50OiBcInN0cmluZz9cIixcbiAgICAgICAgICBsYW5ndWFnZTogXCJzdHJpbmdcIixcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgICAgfSBhcyBjb25zdCxcbiAgICAgIFwicm9vdFwiLFxuICAgICAgXCJSZXF1ZXN0XCIsXG4gICAgICBKU09OLnBhcnNlKGJvZHkpLFxuICAgICk7XG5cbiAgICBpZiAoIXBhcnNlZC5hcmdzIHx8IEFycmF5LmlzQXJyYXkocGFyc2VkLmFyZ3MpIHx8IHR5cGVvZiBwYXJzZWQuYXJncyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgJ2FyZ3MnIHRvIGJlIGFuIG9iamVjdFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYXJnczogcGFyc2VkLmFyZ3MsXG4gICAgICBkZXZpY2VJbmZvOiB7XG4gICAgICAgIGZpbmdlcnByaW50OiBwYXJzZWQuZGV2aWNlRmluZ2VycHJpbnQsXG4gICAgICAgIGlkOiBwYXJzZWQuZGV2aWNlSWQsXG4gICAgICAgIGxhbmd1YWdlOiBwYXJzZWQuaW5mby5sYW5ndWFnZSxcbiAgICAgICAgcGxhdGZvcm06IHtcbiAgICAgICAgICBicm93c2VyVXNlckFnZW50OiBwYXJzZWQuaW5mby5icm93c2VyVXNlckFnZW50ID8/IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHRpbWV6b25lOiBudWxsLFxuICAgICAgICB0eXBlOiBwYXJzZWQuaW5mby50eXBlLFxuICAgICAgICB2ZXJzaW9uOiBcIlwiLFxuICAgICAgfSxcbiAgICAgIGV4dHJhOiB7XG4gICAgICAgIHBhcnRuZXJJZDogcGFyc2VkLnBhcnRuZXJJZCxcbiAgICAgICAgc2Vzc2lvbklkOiBwYXJzZWQuc2Vzc2lvbklkLFxuICAgICAgfSxcbiAgICAgIGZpbGVzOiBbXSxcbiAgICAgIGhlYWRlcnM6IHJlcS5oZWFkZXJzLFxuICAgICAgaWQ6IGAke3BhcnNlZC5kZXZpY2VJZH0tJHtwYXJzZWQucmVxdWVzdElkID8/IHJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZyhcImhleFwiKX1gLFxuICAgICAgaXAsXG4gICAgICBuYW1lOiBwYXJzZWQubmFtZSxcbiAgICAgIHZlcnNpb246IDIsXG4gICAgfTtcbiAgfVxuXG4gIC8vIE5ldyBzZGtnZW4gZm9ybWF0XG4gIHByaXZhdGUgcGFyc2VSZXF1ZXN0VjMocmVxOiBJbmNvbWluZ01lc3NhZ2UsIGJvZHk6IHN0cmluZywgaXA6IHN0cmluZyk6IENvbnRleHRSZXF1ZXN0IHtcbiAgICBjb25zdCBwYXJzZWQgPSBkZWNvZGUoXG4gICAgICB7XG4gICAgICAgIERldmljZUluZm86IHtcbiAgICAgICAgICBmaW5nZXJwcmludDogXCJzdHJpbmc/XCIsXG4gICAgICAgICAgaWQ6IFwic3RyaW5nP1wiLFxuICAgICAgICAgIGxhbmd1YWdlOiBcInN0cmluZz9cIixcbiAgICAgICAgICBwbGF0Zm9ybTogXCJqc29uP1wiLFxuICAgICAgICAgIHRpbWV6b25lOiBcInN0cmluZz9cIixcbiAgICAgICAgICB0eXBlOiBcInN0cmluZz9cIixcbiAgICAgICAgICB2ZXJzaW9uOiBcInN0cmluZz9cIixcbiAgICAgICAgfSxcbiAgICAgICAgUmVxdWVzdDoge1xuICAgICAgICAgIGFyZ3M6IFwianNvblwiLFxuICAgICAgICAgIGRldmljZUluZm86IFwiRGV2aWNlSW5mbz9cIixcbiAgICAgICAgICBleHRyYTogXCJqc29uP1wiLFxuICAgICAgICAgIG5hbWU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgcmVxdWVzdElkOiBcInN0cmluZz9cIixcbiAgICAgICAgfSxcbiAgICAgIH0gYXMgY29uc3QsXG4gICAgICBcInJvb3RcIixcbiAgICAgIFwiUmVxdWVzdFwiLFxuICAgICAgSlNPTi5wYXJzZShib2R5KSxcbiAgICApO1xuXG4gICAgY29uc3QgZGV2aWNlSW5mbyA9IHBhcnNlZC5kZXZpY2VJbmZvID8/IHtcbiAgICAgIGZpbmdlcnByaW50OiBudWxsLFxuICAgICAgaWQ6IG51bGwsXG4gICAgICBsYW5ndWFnZTogbnVsbCxcbiAgICAgIHBsYXRmb3JtOiBudWxsLFxuICAgICAgdGltZXpvbmU6IG51bGwsXG4gICAgICB0eXBlOiBudWxsLFxuICAgICAgdmVyc2lvbjogbnVsbCxcbiAgICB9O1xuICAgIGNvbnN0IGRldmljZUlkID0gZGV2aWNlSW5mby5pZCA/PyByYW5kb21CeXRlcygxNikudG9TdHJpbmcoXCJoZXhcIik7XG5cbiAgICBpZiAoIXBhcnNlZC5hcmdzIHx8IEFycmF5LmlzQXJyYXkocGFyc2VkLmFyZ3MpIHx8IHR5cGVvZiBwYXJzZWQuYXJncyAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgJ2FyZ3MnIHRvIGJlIGFuIG9iamVjdFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYXJnczogcGFyc2VkLmFyZ3MsXG4gICAgICBkZXZpY2VJbmZvOiB7XG4gICAgICAgIGZpbmdlcnByaW50OiBkZXZpY2VJbmZvLmZpbmdlcnByaW50LFxuICAgICAgICBpZDogZGV2aWNlSWQsXG4gICAgICAgIGxhbmd1YWdlOiBkZXZpY2VJbmZvLmxhbmd1YWdlLFxuICAgICAgICBwbGF0Zm9ybTogdHlwZW9mIGRldmljZUluZm8ucGxhdGZvcm0gPT09IFwib2JqZWN0XCIgPyB7IC4uLmRldmljZUluZm8ucGxhdGZvcm0gfSA6IHt9LFxuICAgICAgICB0aW1lem9uZTogZGV2aWNlSW5mby50aW1lem9uZSxcbiAgICAgICAgdHlwZTogZGV2aWNlSW5mby50eXBlID8/IFwiYXBpXCIsXG4gICAgICAgIHZlcnNpb246IGRldmljZUluZm8udmVyc2lvbixcbiAgICAgIH0sXG4gICAgICBleHRyYTogdHlwZW9mIHBhcnNlZC5leHRyYSA9PT0gXCJvYmplY3RcIiA/IHsgLi4ucGFyc2VkLmV4dHJhIH0gOiB7fSxcbiAgICAgIGZpbGVzOiBbXSxcbiAgICAgIGhlYWRlcnM6IHJlcS5oZWFkZXJzLFxuICAgICAgaWQ6IGAke2RldmljZUlkfS0ke3BhcnNlZC5yZXF1ZXN0SWQgPz8gcmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKFwiaGV4XCIpfWAsXG4gICAgICBpcCxcbiAgICAgIG5hbWU6IHBhcnNlZC5uYW1lLFxuICAgICAgdmVyc2lvbjogMyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlUmVzcG9uc2VFcnJvcihlcnI6IHVua25vd24pOiB7IG1lc3NhZ2U6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0ge1xuICAgIGxldCB0eXBlID0gXCJGYXRhbFwiO1xuXG4gICAgaWYgKHR5cGVvZiBlcnIgPT09IFwib2JqZWN0XCIgJiYgZXJyICE9PSBudWxsICYmIGhhcyhlcnIsIFwidHlwZVwiKSAmJiB0eXBlb2YgZXJyLnR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICh7IHR5cGUgfSA9IGVycik7XG4gICAgfVxuXG4gICAgbGV0IG1lc3NhZ2U6IHN0cmluZztcblxuICAgIGlmICh0eXBlb2YgZXJyID09PSBcIm9iamVjdFwiICYmIGVyciAhPT0gbnVsbCAmJiBoYXMoZXJyLCBcIm1lc3NhZ2VcIikgJiYgdHlwZW9mIGVyci5tZXNzYWdlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAoeyBtZXNzYWdlIH0gPSBlcnIpO1xuICAgIH0gZWxzZSBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIG1lc3NhZ2UgPSBlcnIudG9TdHJpbmcoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlcnIgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIG1lc3NhZ2UgPSBKU09OLnN0cmluZ2lmeShlcnIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZXNzYWdlID0gYCR7ZXJyfWA7XG4gICAgfVxuXG4gICAgbGV0IGRhdGE6IHVua25vd247XG5cbiAgICBpZiAodHlwZW9mIGVyciA9PT0gXCJvYmplY3RcIiAmJiBlcnIgIT09IG51bGwgJiYgaGFzKGVyciwgXCJkYXRhXCIpKSB7XG4gICAgICAoeyBkYXRhIH0gPSBlcnIpO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9yID0gdGhpcy5hcGlDb25maWcuYXN0LmVycm9ycy5maW5kKHggPT4geC5uYW1lID09PSB0eXBlKTtcblxuICAgIGlmIChlcnJvcikge1xuICAgICAgaWYgKCEoZXJyb3IuZGF0YVR5cGUgaW5zdGFuY2VvZiBWb2lkUHJpbWl0aXZlVHlwZSkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBkYXRhID0gZW5jb2RlKHRoaXMuYXBpQ29uZmlnLmFzdEpzb24udHlwZVRhYmxlLCBgZXJyb3IuJHt0eXBlfWAsIGVycm9yLmRhdGFUeXBlLm5hbWUsIGRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlbmNvZGVFcnJvcikge1xuICAgICAgICAgIG1lc3NhZ2UgPSBgRmFpbGVkIHRvIGVuY29kZSBlcnJvciAke3R5cGV9IGJlY2F1c2U6ICR7ZW5jb2RlRXJyb3J9LiBPcmlnaW5hbCBtZXNzYWdlOiAke21lc3NhZ2V9YDtcbiAgICAgICAgICB0eXBlID0gXCJGYXRhbFwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGUgPSBcIkZhdGFsXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZGF0YSwgbWVzc2FnZSwgdHlwZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSB3cml0ZVJlcGx5KHJlczogU2VydmVyUmVzcG9uc2UsIGN0eDogQ29udGV4dCB8IG51bGwsIHJlcGx5OiBDb250ZXh0UmVwbHksIGhyU3RhcnQ6IFtudW1iZXIsIG51bWJlcl0pIHtcbiAgICBpZiAoIWN0eCkge1xuICAgICAgcmVzLnN0YXR1c0NvZGUgPSA1MDA7XG4gICAgICByZXMud3JpdGUoXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBlcnJvcjogdGhpcy5tYWtlUmVzcG9uc2VFcnJvcihyZXBseS5lcnJvciA/PyBuZXcgRmF0YWwoXCJSZXNwb25zZSB3aXRob3V0IGNvbnRleHRcIikpLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICByZXMuZW5kKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGVsdGFUaW1lID0gcHJvY2Vzcy5ocnRpbWUoaHJTdGFydCk7XG4gICAgY29uc3QgZHVyYXRpb24gPSBkZWx0YVRpbWVbMF0gKyBkZWx0YVRpbWVbMV0gKiAxZS05O1xuXG4gICAgaWYgKHJlcGx5LmVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKHJlcGx5LmVycm9yKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhgJHtjdHgucmVxdWVzdC5pZH0gWyR7ZHVyYXRpb24udG9GaXhlZCg2KX1zXSAke2N0eC5yZXF1ZXN0Lm5hbWV9KCkgLT4gJHtyZXBseS5lcnJvciA/IHRoaXMubWFrZVJlc3BvbnNlRXJyb3IocmVwbHkuZXJyb3IpLnR5cGUgOiBcIk9LXCJ9YCk7XG5cbiAgICBpZiAoY3R4LnJlc3BvbnNlLnN0YXR1c0NvZGUpIHtcbiAgICAgIHJlcy5zdGF0dXNDb2RlID0gY3R4LnJlc3BvbnNlLnN0YXR1c0NvZGU7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbaGVhZGVyS2V5LCBoZWFkZXJWYWx1ZV0gb2YgY3R4LnJlc3BvbnNlLmhlYWRlcnMuZW50cmllcygpKSB7XG4gICAgICByZXMuc2V0SGVhZGVyKGhlYWRlcktleSwgaGVhZGVyVmFsdWUpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoY3R4LnJlcXVlc3QudmVyc2lvbikge1xuICAgICAgY2FzZSAxOiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAgIGRldmljZUlkOiBjdHgucmVxdWVzdC5kZXZpY2VJbmZvLmlkLFxuICAgICAgICAgIGR1cmF0aW9uLFxuICAgICAgICAgIGVycm9yOiByZXBseS5lcnJvciA/IHRoaXMubWFrZVJlc3BvbnNlRXJyb3IocmVwbHkuZXJyb3IpIDogbnVsbCxcbiAgICAgICAgICBob3N0OiBob3N0bmFtZSgpLFxuICAgICAgICAgIGlkOiBjdHgucmVxdWVzdC5pZCxcbiAgICAgICAgICBvazogIXJlcGx5LmVycm9yLFxuICAgICAgICAgIHJlc3VsdDogcmVwbHkuZXJyb3IgPyBudWxsIDogcmVwbHkucmVzdWx0LFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5lcnJvciAmJiAhY3R4LnJlc3BvbnNlLnN0YXR1c0NvZGUpIHtcbiAgICAgICAgICByZXMuc3RhdHVzQ29kZSA9IHRoaXMubWFrZVJlc3BvbnNlRXJyb3IocmVzcG9uc2UuZXJyb3IpLnR5cGUgPT09IFwiRmF0YWxcIiA/IDUwMCA6IDQwMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcy53cml0ZShKU09OLnN0cmluZ2lmeShyZXNwb25zZSkpO1xuICAgICAgICByZXMuZW5kKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIDI6IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgICAgZGV2aWNlSWQ6IGN0eC5yZXF1ZXN0LmRldmljZUluZm8uaWQsXG4gICAgICAgICAgZXJyb3I6IHJlcGx5LmVycm9yID8gdGhpcy5tYWtlUmVzcG9uc2VFcnJvcihyZXBseS5lcnJvcikgOiBudWxsLFxuICAgICAgICAgIG9rOiAhcmVwbHkuZXJyb3IsXG4gICAgICAgICAgcmVxdWVzdElkOiBjdHgucmVxdWVzdC5pZCxcbiAgICAgICAgICByZXN1bHQ6IHJlcGx5LmVycm9yID8gbnVsbCA6IHJlcGx5LnJlc3VsdCxcbiAgICAgICAgICBzZXNzaW9uSWQ6IGN0eC5yZXF1ZXN0LmV4dHJhLnNlc3Npb25JZCxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3IgJiYgIWN0eC5yZXNwb25zZS5zdGF0dXNDb2RlKSB7XG4gICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSB0aGlzLm1ha2VSZXNwb25zZUVycm9yKHJlc3BvbnNlLmVycm9yKS50eXBlID09PSBcIkZhdGFsXCIgPyA1MDAgOiA0MDA7XG4gICAgICAgIH1cblxuICAgICAgICByZXMud3JpdGUoSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpKTtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAzOiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICAgIGR1cmF0aW9uLFxuICAgICAgICAgIGVycm9yOiByZXBseS5lcnJvciA/IHRoaXMubWFrZVJlc3BvbnNlRXJyb3IocmVwbHkuZXJyb3IpIDogbnVsbCxcbiAgICAgICAgICBob3N0OiBob3N0bmFtZSgpLFxuICAgICAgICAgIHJlc3VsdDogcmVwbHkuZXJyb3IgPyBudWxsIDogcmVwbHkucmVzdWx0LFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5lcnJvciAmJiAhY3R4LnJlc3BvbnNlLnN0YXR1c0NvZGUpIHtcbiAgICAgICAgICByZXMuc3RhdHVzQ29kZSA9IHRoaXMubWFrZVJlc3BvbnNlRXJyb3IocmVzcG9uc2UuZXJyb3IpLnR5cGUgPT09IFwiRmF0YWxcIiA/IDUwMCA6IDQwMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcy5zZXRIZWFkZXIoXCJ4LXJlcXVlc3QtaWRcIiwgY3R4LnJlcXVlc3QuaWQpO1xuICAgICAgICByZXMud3JpdGUoSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpKTtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXMuc3RhdHVzQ29kZSA9IDUwMDtcbiAgICAgICAgcmVzLndyaXRlKFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGVycm9yOiB0aGlzLm1ha2VSZXNwb25zZUVycm9yKHJlcGx5LmVycm9yID8/IG5ldyBGYXRhbChcIlVua25vd24gcmVxdWVzdCB2ZXJzaW9uXCIpKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { BaseApiConfig } from "./api-config.js";
|
|
2
|
+
export type { Middleware as SdkgenMiddleware } from "./api-config.js";
|
|
3
|
+
export type { Context, ContextReply, ContextRequest } from "./context.js";
|
|
4
|
+
export { decode, encode } from "./encode-decode.js";
|
|
5
|
+
export { Fatal, SdkgenError, SdkgenErrorWithData } from "./error.js";
|
|
6
|
+
export { SdkgenHttpClient } from "./http-client.js";
|
|
7
|
+
export { SdkgenHttpServer } from "./http-server.js";
|
|
8
|
+
export { apiTestWrapper } from "./test-wrapper.js";
|
|
9
|
+
export { startSdkgenServer, createSdkgenEndpoint, createSdkgenType, createSdkgenTestClient, Uuid, Int, UInt, encodeValue, decodeValue, type TypeSpec, type GenerateTyping, type GenerateTypingFromFields, } from "./new-interface.js";
|
|
10
|
+
export interface DefaultExtraContext {
|
|
11
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
+
import Decimal from "decimal.js";
|
|
4
|
+
import type { Middleware } from "./api-config.js";
|
|
5
|
+
import type { Context } from "./context.js";
|
|
6
|
+
import type { DefaultExtraContext } from "./index.js";
|
|
7
|
+
export declare const Uuid: unique symbol;
|
|
8
|
+
export declare const Int: unique symbol;
|
|
9
|
+
export declare const UInt: unique symbol;
|
|
10
|
+
export declare const Cpf: unique symbol;
|
|
11
|
+
export declare const Cnpj: unique symbol;
|
|
12
|
+
export interface SdkgenConfig<ExtraContextT> {
|
|
13
|
+
port?: number;
|
|
14
|
+
endpoints: Record<string, SdkgenEndpoint<any, any>>;
|
|
15
|
+
middlewares?: Array<Middleware<ExtraContextT>>;
|
|
16
|
+
extraContext: ExtraContextT;
|
|
17
|
+
}
|
|
18
|
+
declare class CustomTypeBaseClass {
|
|
19
|
+
static readonly mark: unique symbol;
|
|
20
|
+
static readonly fields: Record<string, TypeSpec>;
|
|
21
|
+
}
|
|
22
|
+
export declare function startSdkgenServer<ExtraContextT>(config: SdkgenConfig<ExtraContextT>): Promise<void>;
|
|
23
|
+
type CallableEndpoint<ExtraContextT, Endpoint extends SdkgenEndpoint<unknown, unknown>> = Endpoint extends SdkgenEndpoint<infer Args, infer Return> ? (ctx: Partial<Context & ExtraContextT>, args: Args) => Promise<Return> : never;
|
|
24
|
+
type CallableEndpoints<ExtraContextT, Endpoints extends Record<string, SdkgenEndpoint<unknown, unknown>>> = {
|
|
25
|
+
[EndpointName in keyof Endpoints]: CallableEndpoint<ExtraContextT, Endpoints[EndpointName]>;
|
|
26
|
+
};
|
|
27
|
+
export declare function createSdkgenTestClient<ConfigT extends SdkgenConfig<any>>(config: ConfigT): CallableEndpoints<ConfigT["extraContext"], ConfigT["endpoints"]>;
|
|
28
|
+
export declare function createSdkgenType<Fields extends Record<string, TypeSpec>>(fields: Fields): {
|
|
29
|
+
mark: (typeof CustomTypeBaseClass)["mark"];
|
|
30
|
+
fields: Fields;
|
|
31
|
+
} & (new () => CustomTypeBaseClass & GenerateTypingFromFields<Fields>);
|
|
32
|
+
export type TypeSpec = typeof String | typeof Boolean | typeof Number | typeof Int | typeof UInt | typeof BigInt | typeof CustomTypeBaseClass | typeof Uuid | typeof Date | typeof Buffer | typeof Decimal | typeof Cpf | typeof Cnpj | typeof URL | undefined | [TypeSpec] | (({
|
|
33
|
+
type: typeof String;
|
|
34
|
+
minLength?: number;
|
|
35
|
+
maxLength?: number;
|
|
36
|
+
pattern?: RegExp;
|
|
37
|
+
} | {
|
|
38
|
+
type: typeof Boolean;
|
|
39
|
+
} | {
|
|
40
|
+
type: typeof Number;
|
|
41
|
+
min?: number;
|
|
42
|
+
max?: number;
|
|
43
|
+
} | {
|
|
44
|
+
type: typeof Int;
|
|
45
|
+
min?: number;
|
|
46
|
+
max?: number;
|
|
47
|
+
} | {
|
|
48
|
+
type: typeof UInt;
|
|
49
|
+
min?: number;
|
|
50
|
+
max?: number;
|
|
51
|
+
} | {
|
|
52
|
+
type: typeof BigInt;
|
|
53
|
+
min?: bigint;
|
|
54
|
+
max?: bigint;
|
|
55
|
+
} | {
|
|
56
|
+
type: typeof CustomTypeBaseClass;
|
|
57
|
+
} | {
|
|
58
|
+
type: typeof Uuid;
|
|
59
|
+
} | {
|
|
60
|
+
type: typeof Date;
|
|
61
|
+
} | {
|
|
62
|
+
type: typeof Buffer;
|
|
63
|
+
} | {
|
|
64
|
+
type: typeof Decimal;
|
|
65
|
+
} | {
|
|
66
|
+
type: typeof Cpf;
|
|
67
|
+
} | {
|
|
68
|
+
type: typeof Cnpj;
|
|
69
|
+
} | {
|
|
70
|
+
type: typeof URL;
|
|
71
|
+
} | {
|
|
72
|
+
type: undefined;
|
|
73
|
+
} | {
|
|
74
|
+
type: [TypeSpec];
|
|
75
|
+
minLength?: number;
|
|
76
|
+
maxLength?: number;
|
|
77
|
+
} | {
|
|
78
|
+
type: typeof Array;
|
|
79
|
+
of: TypeSpec;
|
|
80
|
+
minLength?: number;
|
|
81
|
+
maxLength?: number;
|
|
82
|
+
}) & {
|
|
83
|
+
nullable?: true;
|
|
84
|
+
});
|
|
85
|
+
interface ApiEndpointOptions {
|
|
86
|
+
rest?: {
|
|
87
|
+
method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
|
|
88
|
+
path: string;
|
|
89
|
+
headers?: Record<string, string>;
|
|
90
|
+
body?: string;
|
|
91
|
+
};
|
|
92
|
+
args?: Record<string, TypeSpec>;
|
|
93
|
+
return?: TypeSpec;
|
|
94
|
+
middlewares?: Array<Middleware<InferContext<DefaultExtraContext>>>;
|
|
95
|
+
}
|
|
96
|
+
export type GenerateTyping<Type> = Type extends {
|
|
97
|
+
nullable: true;
|
|
98
|
+
} ? null | GenerateTyping<Omit<Type, "nullable">> : Type extends typeof String | {
|
|
99
|
+
type: typeof String;
|
|
100
|
+
} ? string : Type extends typeof Boolean | {
|
|
101
|
+
type: typeof Boolean;
|
|
102
|
+
} ? boolean : Type extends typeof Number | {
|
|
103
|
+
type: typeof Number;
|
|
104
|
+
} ? number : Type extends typeof Int | {
|
|
105
|
+
type: typeof Int;
|
|
106
|
+
} ? number : Type extends typeof UInt | {
|
|
107
|
+
type: typeof UInt;
|
|
108
|
+
} ? number : Type extends typeof BigInt | {
|
|
109
|
+
type: typeof BigInt;
|
|
110
|
+
} ? bigint : Type extends typeof Uuid | {
|
|
111
|
+
type: typeof Uuid;
|
|
112
|
+
} ? string : Type extends typeof Date | {
|
|
113
|
+
type: typeof Date;
|
|
114
|
+
} ? Date : Type extends typeof Buffer | {
|
|
115
|
+
type: typeof Buffer;
|
|
116
|
+
} ? Buffer : Type extends typeof Cpf | {
|
|
117
|
+
type: typeof Cpf;
|
|
118
|
+
} ? string : Type extends typeof Cnpj | {
|
|
119
|
+
type: typeof Cnpj;
|
|
120
|
+
} ? string : Type extends typeof URL | {
|
|
121
|
+
type: typeof URL;
|
|
122
|
+
} ? string : Type extends [infer Inner] ? Array<GenerateTyping<Inner>> : Type extends {
|
|
123
|
+
type: typeof Array;
|
|
124
|
+
of: infer Inner;
|
|
125
|
+
} ? Array<GenerateTyping<Inner>> : Type extends {
|
|
126
|
+
type: [infer Inner];
|
|
127
|
+
} ? Array<GenerateTyping<Inner>> : Type extends typeof CustomTypeBaseClass ? InstanceType<Type> : Type extends {
|
|
128
|
+
type: typeof CustomTypeBaseClass;
|
|
129
|
+
} ? InstanceType<Type["type"]> : undefined extends Type ? void : {
|
|
130
|
+
$error: "❌ unrecognized type";
|
|
131
|
+
};
|
|
132
|
+
export type GenerateTypingFromFields<Fields extends Record<string, TypeSpec>> = {
|
|
133
|
+
[Field in keyof Fields]: GenerateTyping<Fields[Field]>;
|
|
134
|
+
};
|
|
135
|
+
declare class SdkgenEndpoint<Args, Return> {
|
|
136
|
+
readonly options: ApiEndpointOptions;
|
|
137
|
+
readonly handler: (ctx: InferContext<DefaultExtraContext>, args: Args) => Promise<Return>;
|
|
138
|
+
constructor(options: ApiEndpointOptions, handler: (ctx: InferContext<DefaultExtraContext>, args: Args) => Promise<Return>);
|
|
139
|
+
}
|
|
140
|
+
type InferContext<Obj> = Obj extends {
|
|
141
|
+
ctx: unknown;
|
|
142
|
+
} ? Obj["ctx"] & Context : Context;
|
|
143
|
+
type GetEndpointArgs<Options extends ApiEndpointOptions> = Options extends {
|
|
144
|
+
args: Record<string, TypeSpec>;
|
|
145
|
+
} ? GenerateTypingFromFields<Options["args"]> : {};
|
|
146
|
+
type GetEndpointReturn<Options extends ApiEndpointOptions> = GenerateTyping<Options["return"]>;
|
|
147
|
+
export declare function createSdkgenEndpoint<Options extends ApiEndpointOptions>(options: Options, handler: (ctx: InferContext<DefaultExtraContext>, args: GetEndpointArgs<Options>) => Promise<GetEndpointReturn<Options>>): SdkgenEndpoint<GetEndpointArgs<Options>, GenerateTyping<Options["return"]>>;
|
|
148
|
+
export type JsonArray = JsonValue[];
|
|
149
|
+
export type JsonObject = {
|
|
150
|
+
[K in string]?: JsonValue;
|
|
151
|
+
};
|
|
152
|
+
export type JsonPrimitive = boolean | null | number | string;
|
|
153
|
+
export type JsonValue = JsonArray | JsonObject | JsonPrimitive;
|
|
154
|
+
export declare function encodeValue<Type extends TypeSpec>(type: Type, value: GenerateTyping<Type>): JsonValue;
|
|
155
|
+
export declare function decodeValue<Type extends TypeSpec>(type: Type, value: JsonValue): GenerateTyping<Type>;
|
|
156
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type DeepReadonly<T> = T extends undefined | null | boolean | string | number | Function ? T : T extends [] ? readonly [] : T extends [infer U, ...infer Rest] ? readonly [DeepReadonly<U>, ...DeepReadonly<Rest>] : T extends Array<infer U> ? ReadonlyArray<DeepReadonly<U>> : T extends Map<infer K, infer V> ? ReadonlyMap<DeepReadonly<K>, DeepReadonly<V>> : T extends Set<infer U> ? ReadonlySet<DeepReadonly<U>> : {
|
|
2
|
+
readonly [K in keyof T]: DeepReadonly<T[K]>;
|
|
3
|
+
};
|
|
4
|
+
export declare function has<P extends PropertyKey>(target: object, property: P): target is {
|
|
5
|
+
[K in P]: unknown;
|
|
6
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"program":{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../parser/src/token.ts","../../parser/src/ast.ts","../../parser/src/compatibility/index.ts","../../parser/src/semantic/visitor.ts","../../parser/src/semantic/01_check_multiple_declaration.ts","../../parser/src/semantic/transformer.ts","../../parser/src/semantic/02_give_struct_and_enum_names.ts","../../parser/src/semantic/03_match_type_definitions.ts","../../parser/src/semantic/04_check_dont_return_secret.ts","../../parser/src/semantic/05_expand_spreads.ts","../../parser/src/semantic/06_check_empty_struct_or_enum.ts","../../parser/src/semantic/07_validate_recursive_types.ts","../../parser/src/semantic/08_collect_struct_and_enum_types.ts","../../parser/src/semantic/09_validate_annotations.ts","../../parser/src/semantic/10_check_duplicate_members_on_enum.ts","../../parser/src/semantic/analyser.ts","../../parser/src/utils.ts","../../parser/src/json.ts","../../parser/src/lexer.ts","../../parser/src/restparser.ts","../../parser/src/parser.ts","../../parser/src/helpers.ts","../../parser/src/index.ts","../src/context.ts","../src/utils.ts","../src/api-config.ts","../node_modules/@fnando/cnpj/es/index.d.ts","../node_modules/@fnando/cpf/es/index.d.ts","../node_modules/decimal.js/decimal.d.ts","../src/encode-decode.ts","../src/error.ts","../node_modules/type-fest/source/primitive.d.ts","../node_modules/type-fest/source/typed-array.d.ts","../node_modules/type-fest/source/basic.d.ts","../node_modules/type-fest/source/observable-like.d.ts","../node_modules/type-fest/source/empty-object.d.ts","../node_modules/type-fest/source/is-equal.d.ts","../node_modules/type-fest/source/except.d.ts","../node_modules/type-fest/source/simplify.d.ts","../node_modules/type-fest/source/writable.d.ts","../node_modules/type-fest/source/omit-index-signature.d.ts","../node_modules/type-fest/source/pick-index-signature.d.ts","../node_modules/type-fest/source/enforce-optional.d.ts","../node_modules/type-fest/source/merge.d.ts","../node_modules/type-fest/source/conditional-simplify.d.ts","../node_modules/type-fest/source/internal.d.ts","../node_modules/type-fest/source/merge-deep.d.ts","../node_modules/type-fest/source/merge-exclusive.d.ts","../node_modules/type-fest/source/require-at-least-one.d.ts","../node_modules/type-fest/source/require-exactly-one.d.ts","../node_modules/type-fest/source/require-all-or-none.d.ts","../node_modules/type-fest/source/partial-deep.d.ts","../node_modules/type-fest/source/partial-on-undefined-deep.d.ts","../node_modules/type-fest/source/readonly-deep.d.ts","../node_modules/type-fest/source/literal-union.d.ts","../node_modules/type-fest/source/promisable.d.ts","../node_modules/type-fest/source/opaque.d.ts","../node_modules/type-fest/source/invariant-of.d.ts","../node_modules/type-fest/source/set-optional.d.ts","../node_modules/type-fest/source/set-required.d.ts","../node_modules/type-fest/source/set-non-nullable.d.ts","../node_modules/type-fest/source/value-of.d.ts","../node_modules/type-fest/source/async-return-type.d.ts","../node_modules/type-fest/source/conditional-keys.d.ts","../node_modules/type-fest/source/conditional-except.d.ts","../node_modules/type-fest/source/conditional-pick.d.ts","../node_modules/type-fest/source/conditional-pick-deep.d.ts","../node_modules/type-fest/source/union-to-intersection.d.ts","../node_modules/type-fest/source/stringified.d.ts","../node_modules/type-fest/source/fixed-length-array.d.ts","../node_modules/type-fest/source/multidimensional-array.d.ts","../node_modules/type-fest/source/multidimensional-readonly-array.d.ts","../node_modules/type-fest/source/iterable-element.d.ts","../node_modules/type-fest/source/entry.d.ts","../node_modules/type-fest/source/entries.d.ts","../node_modules/type-fest/source/set-return-type.d.ts","../node_modules/type-fest/source/asyncify.d.ts","../node_modules/type-fest/source/numeric.d.ts","../node_modules/type-fest/source/jsonify.d.ts","../node_modules/type-fest/source/jsonifiable.d.ts","../node_modules/type-fest/source/schema.d.ts","../node_modules/type-fest/source/literal-to-primitive.d.ts","../node_modules/type-fest/source/string-key-of.d.ts","../node_modules/type-fest/source/exact.d.ts","../node_modules/type-fest/source/readonly-tuple.d.ts","../node_modules/type-fest/source/optional-keys-of.d.ts","../node_modules/type-fest/source/has-optional-keys.d.ts","../node_modules/type-fest/source/required-keys-of.d.ts","../node_modules/type-fest/source/has-required-keys.d.ts","../node_modules/type-fest/source/spread.d.ts","../node_modules/type-fest/source/tuple-to-union.d.ts","../node_modules/type-fest/source/split-words.d.ts","../node_modules/type-fest/source/camel-case.d.ts","../node_modules/type-fest/source/camel-cased-properties.d.ts","../node_modules/type-fest/source/camel-cased-properties-deep.d.ts","../node_modules/type-fest/source/delimiter-case.d.ts","../node_modules/type-fest/source/kebab-case.d.ts","../node_modules/type-fest/source/delimiter-cased-properties.d.ts","../node_modules/type-fest/source/kebab-cased-properties.d.ts","../node_modules/type-fest/source/delimiter-cased-properties-deep.d.ts","../node_modules/type-fest/source/kebab-cased-properties-deep.d.ts","../node_modules/type-fest/source/pascal-case.d.ts","../node_modules/type-fest/source/pascal-cased-properties.d.ts","../node_modules/type-fest/source/pascal-cased-properties-deep.d.ts","../node_modules/type-fest/source/snake-case.d.ts","../node_modules/type-fest/source/snake-cased-properties.d.ts","../node_modules/type-fest/source/snake-cased-properties-deep.d.ts","../node_modules/type-fest/source/includes.d.ts","../node_modules/type-fest/source/screaming-snake-case.d.ts","../node_modules/type-fest/source/join.d.ts","../node_modules/type-fest/source/split.d.ts","../node_modules/type-fest/source/trim.d.ts","../node_modules/type-fest/source/replace.d.ts","../node_modules/type-fest/source/get.d.ts","../node_modules/type-fest/source/last-array-element.d.ts","../node_modules/type-fest/source/global-this.d.ts","../node_modules/type-fest/source/package-json.d.ts","../node_modules/type-fest/source/tsconfig-json.d.ts","../node_modules/type-fest/index.d.ts","../src/http-client.ts","../../csharp-generator/src/helpers.ts","../../csharp-generator/src/csharp-server.ts","../../csharp-generator/src/index.ts","../../dart-generator/src/helpers.ts","../../dart-generator/src/dart-client.ts","../../dart-generator/src/index.ts","../../fsharp-generator/src/helpers.ts","../../fsharp-generator/src/fsharp-server.ts","../../fsharp-generator/src/index.ts","../../kotlin-generator/src/helpers.ts","../../kotlin-generator/src/android-client.ts","../../kotlin-generator/src/index.ts","../../swift-generator/src/helpers.ts","../../swift-generator/src/swift-client.ts","../../swift-generator/src/index.ts","../../typescript-generator/src/helpers.ts","../../typescript-generator/src/browser-client.ts","../../typescript-generator/src/interfaces.ts","../../typescript-generator/src/node-client.ts","../../typescript-generator/src/node-server.ts","../../typescript-generator/src/index.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/dom-events.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/globals.global.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/@types/busboy/index.d.ts","../node_modules/@tokenizer/token/index.d.ts","../node_modules/strtok3/lib/types.d.ts","../node_modules/strtok3/lib/AbstractTokenizer.d.ts","../node_modules/strtok3/lib/ReadStreamTokenizer.d.ts","../node_modules/strtok3/lib/BufferTokenizer.d.ts","../node_modules/peek-readable/lib/EndOfFileStream.d.ts","../node_modules/peek-readable/lib/StreamReader.d.ts","../node_modules/peek-readable/lib/index.d.ts","../node_modules/strtok3/lib/core.d.ts","../node_modules/strtok3/lib/FileTokenizer.d.ts","../node_modules/strtok3/lib/index.d.ts","../node_modules/file-type/core.d.ts","../node_modules/file-type/index.d.ts","../node_modules/@types/request-ip/index.d.ts","../node_modules/@types/serve-handler/index.d.ts","../src/execute.ts","../node_modules/json-schema-typed/draft-2020-12.ts","../node_modules/@types/swagger-ui-dist/absolute-path.d.ts","../node_modules/@types/swagger-ui-dist/index.d.ts","../src/swagger.ts","../src/http-server.ts","../src/test-wrapper.ts","../src/new-interface.ts","../src/index.ts","../spec/error.spec.ts","../spec/types.spec.ts","../node_modules/spec.ts/index.d.ts","../spec/types.ts","../node_modules/axios/index.d.ts","../node_modules/form-data/index.d.ts","../spec/rest/rest.spec.ts","../spec/runtime/errors.spec.ts","../spec/runtime/middleware.spec.ts","../spec/simple/legacyNodeClient.ts","../spec/simple/simple.spec.ts","../node_modules/@babel/types/lib/index.d.ts","../node_modules/@types/babel__generator/index.d.ts","../node_modules/@babel/parser/typings/babel-parser.d.ts","../node_modules/@types/babel__template/index.d.ts","../node_modules/@types/babel__traverse/index.d.ts","../node_modules/@types/babel__core/index.d.ts","../node_modules/@types/graceful-fs/index.d.ts","../node_modules/@types/istanbul-lib-coverage/index.d.ts","../node_modules/@types/istanbul-lib-report/index.d.ts","../node_modules/@types/istanbul-reports/index.d.ts","../node_modules/@jest/expect-utils/build/index.d.ts","../node_modules/chalk/index.d.ts","../node_modules/@sinclair/typebox/typebox.d.ts","../node_modules/@jest/schemas/build/index.d.ts","../node_modules/pretty-format/build/index.d.ts","../node_modules/jest-diff/build/index.d.ts","../node_modules/jest-matcher-utils/build/index.d.ts","../node_modules/expect/build/index.d.ts","../node_modules/@types/jest/index.d.ts","../node_modules/@types/json-schema/index.d.ts","../node_modules/@types/json5/index.d.ts","../node_modules/@types/prettier/index.d.ts","../node_modules/@types/semver/classes/semver.d.ts","../node_modules/@types/semver/functions/parse.d.ts","../node_modules/@types/semver/functions/valid.d.ts","../node_modules/@types/semver/functions/clean.d.ts","../node_modules/@types/semver/functions/inc.d.ts","../node_modules/@types/semver/functions/diff.d.ts","../node_modules/@types/semver/functions/major.d.ts","../node_modules/@types/semver/functions/minor.d.ts","../node_modules/@types/semver/functions/patch.d.ts","../node_modules/@types/semver/functions/prerelease.d.ts","../node_modules/@types/semver/functions/compare.d.ts","../node_modules/@types/semver/functions/rcompare.d.ts","../node_modules/@types/semver/functions/compare-loose.d.ts","../node_modules/@types/semver/functions/compare-build.d.ts","../node_modules/@types/semver/functions/sort.d.ts","../node_modules/@types/semver/functions/rsort.d.ts","../node_modules/@types/semver/functions/gt.d.ts","../node_modules/@types/semver/functions/lt.d.ts","../node_modules/@types/semver/functions/eq.d.ts","../node_modules/@types/semver/functions/neq.d.ts","../node_modules/@types/semver/functions/gte.d.ts","../node_modules/@types/semver/functions/lte.d.ts","../node_modules/@types/semver/functions/cmp.d.ts","../node_modules/@types/semver/functions/coerce.d.ts","../node_modules/@types/semver/classes/comparator.d.ts","../node_modules/@types/semver/classes/range.d.ts","../node_modules/@types/semver/functions/satisfies.d.ts","../node_modules/@types/semver/ranges/max-satisfying.d.ts","../node_modules/@types/semver/ranges/min-satisfying.d.ts","../node_modules/@types/semver/ranges/to-comparators.d.ts","../node_modules/@types/semver/ranges/min-version.d.ts","../node_modules/@types/semver/ranges/valid.d.ts","../node_modules/@types/semver/ranges/outside.d.ts","../node_modules/@types/semver/ranges/gtr.d.ts","../node_modules/@types/semver/ranges/ltr.d.ts","../node_modules/@types/semver/ranges/intersects.d.ts","../node_modules/@types/semver/ranges/simplify.d.ts","../node_modules/@types/semver/ranges/subset.d.ts","../node_modules/@types/semver/internals/identifiers.d.ts","../node_modules/@types/semver/index.d.ts","../node_modules/@types/stack-utils/index.d.ts","../node_modules/@types/yargs-parser/index.d.ts","../node_modules/@types/yargs/index.d.ts"],"fileInfos":[{"version":"8730f4bf322026ff5229336391a18bcaa1f94d4f82416c8b2f3954e2ccaae2ba","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","impliedFormat":1},{"version":"7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","impliedFormat":1},{"version":"8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","impliedFormat":1},{"version":"5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","impliedFormat":1},{"version":"4b421cbfb3a38a27c279dec1e9112c3d1da296f77a1a85ddadf7e7a425d45d18","impliedFormat":1},{"version":"1fc5ab7a764205c68fa10d381b08417795fc73111d6dd16b5b1ed36badb743d9","impliedFormat":1},{"version":"746d62152361558ea6d6115cf0da4dd10ede041d14882ede3568bce5dc4b4f1f","impliedFormat":1},{"version":"adb996790133eb33b33aadb9c09f15c2c575e71fb57a62de8bf74dbf59ec7dfb","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cc8c5a3bac513368b0157f3d8b31cfdcfe78b56d3724f30f80ed9715e404af8","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5c05907c02476e4bde6b7e76a79ffcd948aedd14b6a8f56e4674221b0417398","affectsGlobalScope":true,"impliedFormat":1},{"version":"5f406584aef28a331c36523df688ca3650288d14f39c5d2e555c95f0d2ff8f6f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22f230e544b35349cfb3bd9110b6ef37b41c6d6c43c3314a31bd0d9652fcec72","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ea0b55f6b315cf9ac2ad622b0a7813315bb6e97bf4bb3fbf8f8affbca7dc695","affectsGlobalScope":true,"impliedFormat":1},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb26de841c52236d8222f87e9e6a235332e0788af8c87a71e9e210314300410a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true,"impliedFormat":1},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true,"impliedFormat":1},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true,"impliedFormat":1},{"version":"81cac4cbc92c0c839c70f8ffb94eb61e2d32dc1c3cf6d95844ca099463cf37ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true,"impliedFormat":1},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true,"impliedFormat":1},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true,"impliedFormat":1},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true,"impliedFormat":1},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true,"impliedFormat":1},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true,"impliedFormat":1},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true,"impliedFormat":1},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true,"impliedFormat":1},{"version":"5e5e095c4470c8bab227dbbc61374878ecead104c74ab9960d3adcccfee23205","affectsGlobalScope":true,"impliedFormat":1},{"version":"09aa50414b80c023553090e2f53827f007a301bc34b0495bfb2c3c08ab9ad1eb","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7f680a43f8cd12a6b6122c07c54ba40952b0c8aa140dcfcf32eb9e6cb028596","affectsGlobalScope":true,"impliedFormat":1},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true,"impliedFormat":1},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true,"impliedFormat":1},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true,"impliedFormat":1},{"version":"2768ef564cfc0689a1b76106c421a2909bdff0acbe87da010785adab80efdd5c","affectsGlobalScope":true,"impliedFormat":1},{"version":"b248e32ca52e8f5571390a4142558ae4f203ae2f94d5bac38a3084d529ef4e58","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c55633c733c8378db65ac3da7a767c3cf2cf3057f0565a9124a16a3a2019e87","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe","affectsGlobalScope":true,"impliedFormat":1},{"version":"5b0ca94ec819d68d33da516306c15297acec88efeb0ae9e2b39f71dbd9685ef7","affectsGlobalScope":true,"impliedFormat":1},{"version":"34c839eaaa6d78c8674ae2c37af2236dee6831b13db7b4ef4df3ec889a04d4f2","affectsGlobalScope":true,"impliedFormat":1},{"version":"52d1bb7ab7a3306fd0375c8bff560feed26ed676a5b0457fa8027b563aecb9a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"abcce357d43321346018f0a447aae8396df4b6e3c8a71a07a698852c010659e6","impliedFormat":99},{"version":"1c83cf4df7382f9da2f2bb994b56deca7f0ca906e3026c05dad2085139b128d3","impliedFormat":99},{"version":"2aaf0504021ff3d87ce5b85987998f481c3a489fea930026f57e9add9048d662","impliedFormat":99},{"version":"88b228e477c78813231ea2740c6b614a7c9fe4538c0c3136de806bf0069da912","impliedFormat":99},{"version":"ef212e9cbb4f8afb8513c2c080f8cd89ec3d75eb5133736e867f00ac33558b27","impliedFormat":99},{"version":"beb95d02e3d514ff1114169f9f4551529f10fba5c17599bd27e8b7f8986e0b91","impliedFormat":99},{"version":"357210c34890c2c0b3efd7a7e33b0acb9a66ea629b545ad3ca15a7f32ad942b9","impliedFormat":99},{"version":"e664371d209dfaa6522211743b1346e514230cde78840621e17397cb9eaffdef","impliedFormat":99},{"version":"b4dfc725eebcf666ce4985aed7d598fafb2ddfec1b29d98f48e90174bd1e8369","impliedFormat":99},{"version":"dfb1b6c0855fdb807cb98470599865d512e9cfe4acb3a407c199b69c9a6fe5f4","impliedFormat":99},{"version":"6977fc37bdd4cb61bd8dbaee0ac30371abd7ef557faaf405056fb2baaa7ccbfc","impliedFormat":99},{"version":"7e2174fdc2f42c40a3a9b944a317ea993a82bbd63df3cb0280846559ab74062d","impliedFormat":99},{"version":"ebd4db2c36b857f612a8d0505f69d8fcf0b62526457112c6a04c5ff4b2861e21","impliedFormat":99},{"version":"3a04b10057d80162d042b48b5902ebe336783c989eaa0ac47f0d5614fc2b4355","impliedFormat":99},{"version":"239cb22721f22f7918bf97d646367c947f9f435bc66d3e5e627a7579be8be560","impliedFormat":99},{"version":"f05665feeb7ca5abd58210b2e3c3043b93a7e0b6da933258fe67e080a96f5bf7","impliedFormat":99},{"version":"53b8dd958f31452b509a3914e6183328fb758545596a05132576b316f2b705ac","impliedFormat":99},{"version":"3739c1d14b3ec0400a03e9ebf4164d1f50eea3f00fe142c41cf5529716865a6c","impliedFormat":99},{"version":"430195b0506d47e2aae8452f34d5e92c9ffa2bd2b830b4c337251868b1af55f1","impliedFormat":99},{"version":"7b24dd187cb99e874f970ec9e85cf270eb3191ca204741b80b0715c1051c3389","impliedFormat":99},{"version":"8b7b066a62d69c216966ffc9877023fee5a1b1323f46696e302541e12fbafcae","impliedFormat":99},{"version":"c4b53ade497f8596219707e7db3ecf38e3081c773fb9e85d9535ce2e498d8ace","impliedFormat":99},{"version":"c5a2f3e19af67dab79e0df701f86c612c8af49387cf3fae4d96adde9d49ae20e","impliedFormat":99},{"version":"be9d37f2b9d17f1162b6694dec28828b75652169bc3795b6906bc459057e41de","signature":"830ab9ff9d4b213afac7bc63818e8f6b3c8272c47b4c277ff71b4df17937c0cf","impliedFormat":99},{"version":"1b9b44a416955c4ca7365abc0137136b2fde57982973f80506faf47f284dc314","signature":"bc342549d9ebb094abe00b179a41720484094484f25234ef34bbd21515ff89f0","impliedFormat":99},{"version":"0f1532b0274fa63a03bd44d37c742491943aca1e69be63f2aa776c3f5404e3ec","signature":"574fa38c9c489ed87b58a095f251453aaa9b9329978a4ba319fb00c5c266ceca","impliedFormat":99},{"version":"54e1107b17734e5eaf0a810a03508a8308f5ab7f9d7e3e5a1a73a60b0621cde3","impliedFormat":1},{"version":"e809276dae5efdc11f4ba8297c2eb5e96cede57a181886483aec7a7c7dafd25c","impliedFormat":1},{"version":"67577c6ac7cc408265b36f54548167d12f419cab47c3567db64d0a990c089e88","impliedFormat":1},{"version":"91eb4a430c9531755fe79c006c8f8eb08124b4155dfb49d7d14d8e6b183fa18f","signature":"1c2f36fd04c5d558a08f5de2b11d9befe765e191dc814c85b1d1c6d84141500a","impliedFormat":99},{"version":"25cdd4ca9bf0f2cf40abbe26c0eb7b2b252cec5e11ec53ea73a0e075c6c4a93d","signature":"d5c436717561c6d9691b2c71d46e067cbdeb60dcd3ffc34c901a9b333ad0f8ef","impliedFormat":99},{"version":"cd51ceafea7762ad639afb3ca5b68e1e4ffeaacaa402d7ef2cae17016e29e098","impliedFormat":1},{"version":"1b8357b3fef5be61b5de6d6a4805a534d68fe3e040c11f1944e27d4aec85936a","impliedFormat":1},{"version":"f1f0ab91eacf5fe45d4b9c0fc67b7510f490bd292505bc4baeba3bb43d17ec68","impliedFormat":1},{"version":"4f24c2781b21b6cd65eede543669327d68a8cf0c6d9cf106a1146b164a7c8ef9","affectsGlobalScope":true,"impliedFormat":1},{"version":"86b484bcf6344a27a9ee19dd5cef1a5afbbd96aeb07708cc6d8b43d7dfa8466c","impliedFormat":1},{"version":"7873594f89f40867f1c033609db4052bb2e03a5d128f9b12c8ca657f83d293e4","impliedFormat":1},{"version":"47df64bd7286fa0b26b23c10f0a2c9221535a67934b8aecb6ed179688ee4d3c7","impliedFormat":1},{"version":"cb26f195564ee703a68161f88e57e33e6e76e630b999e582d0a4328435d7f84e","impliedFormat":1},{"version":"d274da8ba27079a593a7de4fbe82f3aab664724bf4f1b080e977f6e745e690e1","impliedFormat":1},{"version":"4502caaa3fff6c9766bfc145b1b586ef26d53e5f104271db046122b8eef57fd1","impliedFormat":1},{"version":"382f061a24f63ef8bfb1f7a748e1a2568ea62fb91ed1328901a6cf5ad129d61c","impliedFormat":1},{"version":"952c4a8d2338e19ef26c1c0758815b1de6c082a485f88368f5bece1e555f39d4","impliedFormat":1},{"version":"ce01848c6682d9e7653bfa653b28ca9294beeabb85cf99bcc6168f10c6e3f436","impliedFormat":1},{"version":"ef4c9ef3ec432ccbf6508f8aa12fbb8b7f4d535c8b484258a3888476de2c6c36","impliedFormat":1},{"version":"d97e5cd7a4962d990e63aa07a22ca564cafb87ea8f7d145480eaa8a437242f81","impliedFormat":1},{"version":"dee75c873b20a13839a8ce9ea9d32696682c6db4b1e9f4fb6bc431ed31b0fb8a","impliedFormat":1},{"version":"f981ffdbd651f67db134479a5352dac96648ca195f981284e79dc0a1dbc53fd5","impliedFormat":1},{"version":"865f3db83300a1303349cc49ed80943775a858e0596e7e5a052cc65ac03b10bb","impliedFormat":1},{"version":"a1c85a61ff2b66291676ab84ae03c1b1ff7139ffde1942173f6aee8dc4ee357b","impliedFormat":1},{"version":"a24c4fe21d5b13a9ecbbb39b5e22f5d4c6fe5feebb074865ba2de273381a73ae","impliedFormat":1},{"version":"48a9a38d31f33ba5a969cc7028907691e01c26d5341c558b051d27ef302602e9","impliedFormat":1},{"version":"2169cdcb2e85ec18274590018fc1a12b8fe02708813692d9a1531695c17d3198","impliedFormat":1},{"version":"9392e1e62ee32e9b9334fa9bf93c27be2d7227ded895a984532cb155dc776f95","impliedFormat":1},{"version":"da2aa652d2bf03cc042e2ff31e4194f4f18f042b8344dcb2568f761daaf7869f","impliedFormat":1},{"version":"03ed68319c97cd4ce8f1c4ded110d9b40b8a283c3242b9fe934ccfa834e45572","impliedFormat":1},{"version":"de2b56099545de410af72a7e430ead88894e43e4f959de29663d4d0ba464944d","impliedFormat":1},{"version":"eec9e706eef30b4f1c6ff674738d3fca572829b7fa1715f37742863dabb3d2f2","impliedFormat":1},{"version":"b0cefbc19466a38f5883079f0845babcb856637f7d4f3f594b746d39b74390f7","impliedFormat":1},{"version":"1e86d750ab0d4fbde7213aa28174f8838e38fe755bc75d8ab05795c58164082c","impliedFormat":1},{"version":"1f0ee5ddb64540632c6f9a5b63e242b06e49dd6472f3f5bd7dfeb96d12543e15","impliedFormat":1},{"version":"18b86125c67d99150f54225df07349ddd07acde086b55f3eeac1c34c81e424d8","impliedFormat":1},{"version":"2d3f23c577a913d0f396184f31998507e18c8712bc74303a433cf47f94fd7e07","impliedFormat":1},{"version":"4d397c276bd0d41f8a5a0d67a674d5cf3f79b79b0f4df13a0fbefdf0e88f0519","impliedFormat":1},{"version":"aa79b64f5b3690c66892f292e63dfe3e84eb678a886df86521f67c109d57a0c5","impliedFormat":1},{"version":"a692e092c3b9860c9554698d84baf308ba51fc8f32ddd6646e01a287810b16c6","impliedFormat":1},{"version":"3c2e543e5913aca16ba24e406cebbf84bac298f79c249ea255016fabaf8be744","impliedFormat":1},{"version":"0b9bcc98884f81d8adda2c5d2ebb0361c7a53af6713e72138c4457e6016ff708","impliedFormat":1},{"version":"1848ebe5252ccb5ca1ca4ff52114516bdbbc7512589d6d0839beeea768bfb400","impliedFormat":1},{"version":"31073e7d0e51f33b1456ff2ab7f06546c95e24e11c29d5b39a634bc51f86d914","impliedFormat":1},{"version":"f60149e188145ebf3e6edf735576a2c26e805ac575bfdfa839a27929175e0855","impliedFormat":1},{"version":"31d18349ccfc45ce4f82990c71aed8901272a8edc9c6d1b2d330aabf36f50aec","impliedFormat":1},{"version":"a90339d50728b60f761127fe75192e632aa07055712a377acd8d20bb5d61e80c","impliedFormat":1},{"version":"37569cc8f21262ca62ec9d3aa8eb5740f96e1f325fad3d6aa00a19403bd27b96","impliedFormat":1},{"version":"fa18c6fe108031717db1ada404c14dc75b8b38c54daa3bb3af4c4999861ca653","impliedFormat":1},{"version":"bb01ebb9b76c4eb319208a744c0d63a1fd9093c26b8a78aa3c661db3a22d4b22","impliedFormat":1},{"version":"efa00be58e65b88ea17c1eafd3efe3bc02ea403be1ee858f128ed79e7b880bd4","impliedFormat":1},{"version":"4f0781ec008bb24dc1923285d25d648ea48fb5a3c36d0786e2ee82eb00eff426","impliedFormat":1},{"version":"0aa5e0000438b420fa0222347d822c5699d24b5a188026ac364cadf1cc3d26f0","impliedFormat":1},{"version":"cd8aa48c26b3de057cfd76706c0cff88ace0f23f548b8dee974088497780e5ae","impliedFormat":1},{"version":"abf140fdc3db44c2cac9415426544d8c2a89e73f13f7838376b2b6d36d74a582","impliedFormat":1},{"version":"e79e530a8216ee171b4aca8fc7b99bd37f5e84555cba57dc3de4cd57580ff21a","impliedFormat":1},{"version":"f351eaa598ba2046e3078e5480a7533be7051e4db9212bb40f4eeb84279aa24d","impliedFormat":1},{"version":"11958f2fce49e1af7203482d72b410b1247724e35b7cce94ca72f994dc3d536b","impliedFormat":1},{"version":"4ce53edb8fb1d2f8b2f6814084b773cdf5846f49bf5a426fbe4029327bda95bf","impliedFormat":1},{"version":"1edc9192dfc277c60b92525cdfa1980e1bfd161ae77286c96777d10db36be73c","impliedFormat":1},{"version":"0a0bf0cb43af5e0ac1703b48325ebc18ad86f6bf796bdbe96a429c0e95ca4486","impliedFormat":1},{"version":"75a7db3b7ddf0ca49651629bb665e0294fda8d19ba04fddc8a14d32bb35eb248","impliedFormat":1},{"version":"eb31477c87de3309cbe4e9984fa74a052f31581edb89103f8590f01874b4e271","impliedFormat":1},{"version":"587ce54f0e8ad1eea0c9174d6f274fb859648cebb2b8535c7adb3975aee74c21","impliedFormat":1},{"version":"1502a23e43fd7e9976a83195dc4eaf54acaff044687e0988a3bd4f19fc26b02b","impliedFormat":1},{"version":"dfdd3da3c5aab7f4ef3078d833bd3cef0ae65f7e358a008476e59aef6cc1d708","impliedFormat":1},{"version":"f47280c45ddbc8aa4909396e1d8b526f64dfad4a845aec2356a6c1dc7b6fe722","impliedFormat":1},{"version":"7b7f39411329342a28ea19a4ca3aa4c7f7d888c9f01a411b05e4126280026ea6","impliedFormat":1},{"version":"7f89aebd8a6aa9ff7dfc72d12352478f1db227e2d79d5b5f9d8a59cf1b5c6b48","impliedFormat":1},{"version":"7d936e6db7d5d73c02471a8e872739f1ddbacf213c159e97d1d94cca315ea3f2","impliedFormat":1},{"version":"a86492d82baf906c071536e8de073e601eaa5deed138c2d9c42d471d72395d7e","impliedFormat":1},{"version":"789110b95e963c99ace4e9ad8b60901201ddc4cab59f32bde5458c1359a4d887","impliedFormat":1},{"version":"92eb8a98444729aa61be5e6e489602363d763da27d1bcfdf89356c1d360484da","impliedFormat":1},{"version":"074343ca788a38f572d8bdb0985956c0ad1a4d8ca8b6ef8c1a19a0e11cf09db0","impliedFormat":1},{"version":"d729b8b400507b9b51ff40d11e012379dbf0acd6e2f66bf596a3bc59444d9bf1","impliedFormat":1},{"version":"fc3ee92b81a6188a545cba5c15dc7c5d38ee0aaca3d8adc29af419d9bdb1fdb9","impliedFormat":1},{"version":"7d05ac926705ce932b6e41e5e273333b380d08b6a036ad0c8b01139586b34548","impliedFormat":1},{"version":"0bc13111c65ef1373c84c86c039416127579469828f0e01e03ffe00fb8fd6785","impliedFormat":1},{"version":"c00b402135ef36fb09d59519e34d03445fd6541c09e68b189abb64151f211b12","impliedFormat":1},{"version":"e08e58ac493a27b29ceee80da90bb31ec64341b520907d480df6244cdbec01f8","impliedFormat":1},{"version":"c0fe2b1135ca803efa203408c953e1e12645b8065e1a4c1336ad8bb11ea1101b","impliedFormat":1},{"version":"d82c245bfb76da44dd573948eca299ff75759b9714f8410468d2d055145a4b64","impliedFormat":1},{"version":"25b1108faedaf2043a97a76218240b1b537459bbca5ae9e2207c236c40dcfdef","impliedFormat":1},{"version":"d3752f9a8387c9c6938e7f68aba40fd8f9ade46bd50001e3c4f12b4abae0b6b4","impliedFormat":1},{"version":"5a4d0b09de173c391d5d50064fc20166becc194248b1ce738e8a56af5196d28c","impliedFormat":1},{"version":"7ad042f7d744ccfbcf6398216203c7712f01359d6fd4348c8bd8df8164e98096","impliedFormat":1},{"version":"0e0b8353d6d7f7cc3344adbabf3866e64f2f2813b23477254ba51f69e8fdf0eb","impliedFormat":1},{"version":"008ed9b6d1fdb68f9d98e6fd238d99be77e738892c3a1c6cf8b7616de4f8b114","impliedFormat":1},{"version":"08f95bee0619072d2c49854434af3e53d94e7e762fc082b49cea59e77db06905","impliedFormat":1},{"version":"9e5c7463fc0259a38938c9afbdeda92e802cff87560277fd3e385ad24663f214","impliedFormat":1},{"version":"e2b3d1e59ccc94f5c6bd3cac408fbe98344b4a42e50b924918d7d24afa68545a","impliedFormat":1},{"version":"288f78bb86d191e35b95b60396ba413f13768968c98e1904723b912348274f5a","impliedFormat":1},{"version":"63c66d9a40ef7d388fd747d4e6a814e534aae35a3edb9e1388227f7ebf942f61","impliedFormat":1},{"version":"9da7b5941ae555ad213e43420730a630178a538e18a5e7e383596c3a9137a841","signature":"96a4df5672d7ec75e77524d493be7141855716a75a125cfc86dd3851de50f6bf","impliedFormat":99},{"version":"6454e60dacbdaa3afe1323954d5f16e33aa9e396ecafd3a2feb7e9b22dc24995","impliedFormat":99},{"version":"29dd8861bd04334cf6fbf10ee5ecceec252c3ecd9503a389863eb134060b3510","impliedFormat":99},{"version":"e002248d7cec75634a3e65aec0f4c1f5a44aa2ba0d779cf5a3087efbaeef1e6b","impliedFormat":99},{"version":"0c2736b54146f52b95359b0a1a4e6ad89d4397d03643b09771f85894988013a1","impliedFormat":99},{"version":"ef62ad6d8fb1ed338e0de5015da60e8c4c2ae0e66c8f73b30370f18600dde461","impliedFormat":99},{"version":"e92bab07a2898318686b689a48f813232f836a0c0c91d0b6bd08aa7c11ef8436","impliedFormat":99},{"version":"40a6177080f7b189704265a0c1135717b9cf2f47a2ed2e3e2a3d51a8c753beec","impliedFormat":99},{"version":"c43b9e8f4b1aa450d10f4102f8f8326ad115344e2fa73f40867cceefce57a0fd","impliedFormat":99},{"version":"00ac8b77c1f823003f1b9168828ea4b5d393a0c85528c6d0e72edcef6c3eb402","impliedFormat":99},{"version":"903ddee9509c361bf190fbc13e9db0c54d1071b980eb6fd42767ee2376756685","impliedFormat":99},{"version":"d068f1391d5b4d1b0e7b231883e410f07b36e9b913a1e8d6a7c5683b6dbee727","impliedFormat":99},{"version":"4f912311f0b4ff00a0f144fd8c91e5f1fcfc0869b7f4f3913b71c5ac3f9c36b8","impliedFormat":99},{"version":"6fafe42eaf387979739246308bf965b771224ee9b263f4de3ec45c6e5c0f2d7a","impliedFormat":99},{"version":"5956c519810852efcfe72c6a4484bc6c9df1f38f049bbfb39dc6de979e0b3575","impliedFormat":99},{"version":"bbe6dafd0d5426e799aa955d337969c5b600ffd11c524edd26145676b194312e","impliedFormat":99},{"version":"3f990e30f389975ef7d7ffb0f48348af4d8d39ec9152cbc85d01ec6cbf8c51d4","impliedFormat":99},{"version":"e865a67cc3edff5078fc4bfc2112ae740d8f82642be96ddbd0ba509483956288","impliedFormat":99},{"version":"60285f352efe7e046c41ad034d60ac47de758b90ec83d6515c2c0337fe7ee030","impliedFormat":99},{"version":"240188ce4adf151fc575272c4d1ec5783e3b76049608269001c8978c04427a09","impliedFormat":99},{"version":"d292033ad9f4aeedab5186c45649c9d4a7e6a96a30aa421d4045fbc5a7ed818e","impliedFormat":99},{"version":"110316fa0943699d4203c94d48f1bd06a99d2f0c1060ddb7a2bae2b8a7b8e19d","impliedFormat":99},{"version":"7e771891adaa85b690266bc37bd6eb43bc57eecc4b54693ead36467e7369952a","impliedFormat":1},{"version":"a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a","impliedFormat":1},{"version":"ca72190df0eb9b09d4b600821c8c7b6c9747b75a1c700c4d57dc0bb72abc074c","affectsGlobalScope":true,"impliedFormat":1},{"version":"21a167fec8f933752fb8157f06d28fab6817af3ad9b0bdb1908a10762391eab9","impliedFormat":1},{"version":"bb65c6267c5d6676be61acbf6604cf0a4555ac4b505df58ac15c831fcbff4e3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"374ca798f244e464346f14301dc2a8b4b111af1a83b49fffef5906c338a1f922","impliedFormat":1},{"version":"5a94487653355b56018122d92392beb2e5f4a6c63ba5cef83bbe1c99775ef713","impliedFormat":1},{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true,"impliedFormat":1},{"version":"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","impliedFormat":1},{"version":"dab86d9604fe40854ef3c0a6f9e8948873dc3509213418e5e457f410fd11200f","impliedFormat":1},{"version":"bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","impliedFormat":1},{"version":"489532ff54b714f0e0939947a1c560e516d3ae93d51d639ab02e907a0e950114","impliedFormat":1},{"version":"f30bb836526d930a74593f7b0f5c1c46d10856415a8f69e5e2fc3db80371e362","impliedFormat":1},{"version":"14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","impliedFormat":1},{"version":"5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea","impliedFormat":1},{"version":"6b526a5ec4a401ca7c26cfe6a48e641d8f30af76673bad3b06a1b4504594a960","affectsGlobalScope":true,"impliedFormat":1},{"version":"816ad2e607a96de5bcac7d437f843f5afd8957f1fa5eefa6bba8e4ed7ca8fd84","affectsGlobalScope":true,"impliedFormat":1},{"version":"cec36af22f514322f870e81d30675c78df82ae8bf4863f5fd4e4424c040c678d","impliedFormat":1},{"version":"d903fafe96674bc0b2ac38a5be4a8fc07b14c2548d1cdb165a80ea24c44c0c54","impliedFormat":1},{"version":"5eec82ac21f84d83586c59a16b9b8502d34505d1393393556682fe7e7fde9ef2","impliedFormat":1},{"version":"04eb6578a588d6a46f50299b55f30e3a04ef27d0c5a46c57d8fcc211cd530faa","impliedFormat":1},{"version":"8d3c583a07e0c37e876908c2d5da575019f689df8d9fa4c081d99119d53dba22","impliedFormat":1},{"version":"2c828a5405191d006115ab34e191b8474bc6c86ffdc401d1a9864b1b6e088a58","impliedFormat":1},{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true,"impliedFormat":1},{"version":"d076fede3cb042e7b13fc29442aaa03a57806bc51e2b26a67a01fbc66a7c0c12","impliedFormat":1},{"version":"7c013aa892414a7fdcfd861ae524a668eaa3ede8c7c0acafaf611948122c8d93","impliedFormat":1},{"version":"b0973c3cbcdc59b37bf477731d468696ecaf442593ec51bab497a613a580fe30","impliedFormat":1},{"version":"4989e92ba5b69b182d2caaea6295af52b7dc73a4f7a2e336a676722884e7139d","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3624aed92dab6da8484280d3cb3e2f4130ec3f4ef3f8201c95144ae9e898bb6","affectsGlobalScope":true,"impliedFormat":1},{"version":"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","impliedFormat":1},{"version":"210d54cd652ec0fec8c8916e4af59bb341065576ecda039842f9ffb2e908507c","impliedFormat":1},{"version":"36b03690b628eab08703d63f04eaa89c5df202e5f1edf3989f13ad389cd2c091","impliedFormat":1},{"version":"0effadd232a20498b11308058e334d3339cc5bf8c4c858393e38d9d4c0013dcf","impliedFormat":1},{"version":"25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","impliedFormat":1},{"version":"fd93cee2621ff42dabe57b7be402783fd1aa69ece755bcba1e0290547ae60513","impliedFormat":1},{"version":"1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","impliedFormat":1},{"version":"69ee23dd0d215b09907ad30d23f88b7790c93329d1faf31d7835552a10cf7cbf","impliedFormat":1},{"version":"44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","impliedFormat":1},{"version":"23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda","impliedFormat":1},{"version":"223c37f62ce09a3d99e77498acdee7b2705a4ae14552fbdb4093600cd9164f3f","impliedFormat":1},{"version":"970a90f76d4d219ad60819d61f5994514087ba94c985647a3474a5a3d12714ed","affectsGlobalScope":true,"impliedFormat":1},{"version":"e10177274a35a9d07c825615340b2fcde2f610f53f3fb40269fd196b4288dda6","impliedFormat":1},{"version":"4c8525f256873c7ba3135338c647eaf0ca7115a1a2805ae2d0056629461186ce","impliedFormat":1},{"version":"3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","impliedFormat":1},{"version":"5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2","impliedFormat":1},{"version":"f0900cd5d00fe1263ff41201fb8073dbeb984397e4af3b8002a5c207a30bdc33","affectsGlobalScope":true,"impliedFormat":1},{"version":"4c50342e1b65d3bee2ed4ab18f84842d5724ad11083bd666d8705dc7a6079d80","affectsGlobalScope":true,"impliedFormat":1},{"version":"06d7c42d256f0ce6afe1b2b6cfbc97ab391f29dadb00dd0ae8e8f23f5bc916c3","impliedFormat":1},{"version":"ec4bd1b200670fb567920db572d6701ed42a9641d09c4ff6869768c8f81b404c","impliedFormat":1},{"version":"e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa","impliedFormat":1},{"version":"da26af7362f53d122283bc69fed862b9a9fe27e01bc6a69d1d682e0e5a4df3e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e","impliedFormat":1},{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true,"impliedFormat":1},{"version":"8dbe725f8d237e70310977afcfa011629804d101ebaa0266cafda6b61ad72236","impliedFormat":1},{"version":"4f09e229d71bab06d5e293a6f77344860a9d1ec224cea9dce0f0eae1217dc36a","impliedFormat":1},{"version":"e46cf250ea18d419593c3d20e3cab8465158dd7b891a46f30ca382a109a55131","impliedFormat":1},{"version":"9af2a351b809968918c9cb358d1bb2885f7e2a9631e667ee2db56e4bbf33efb8","impliedFormat":99},{"version":"6916103a0240cde459bbcda5fc1aac044431cb16c116f200633bf2fefd814efb","impliedFormat":99},{"version":"064b7bd5d1023910beb76ac0ce5f2b5ddb959aa1ab535fea7fb27eef32b0a85b","impliedFormat":99},{"version":"1273dec6285d14fd74482db87a14504a213ac8409c5547e8bb25b92b3d48c40a","impliedFormat":99},{"version":"e7440ee495cf56a2cdbeec0ecfd8b590c10f46eda6b152839677b40e3094dde9","impliedFormat":99},{"version":"04cd36bee7d18411c90747605078a8a56daf3a1a07aeda079041e91dc60d9a7d","impliedFormat":99},{"version":"74847f603c2aadfbb65cbbc02aa4a00ba3e298eedab2784952355499347a9e64","impliedFormat":99},{"version":"9d5e3a422f294fddedacdd198dd17a76e510417b77cb648f9de7fd7ede3d746d","impliedFormat":99},{"version":"8741057080fee17b39724976540f74ddff54c7dcd5c3500c1dfcb615f03a3ca3","impliedFormat":99},{"version":"4e4014e10ec192ab18f65bdb22417859a3d075b2a6491c54da74d35198a93398","impliedFormat":99},{"version":"703d2890eb6ef58de547d77509316a3fed8692bfd5d9fe3c72bbbe15b5127eaf","impliedFormat":99},{"version":"8d29cf03668a18a2eb0991cbb96a1b8255b8111c24cbcc3634344a02a7e58415","impliedFormat":99},{"version":"29313b7a1d1342a1ee37224f895e2b77a9023d7c67241c873aaa9b51130db2e7","affectsGlobalScope":true,"impliedFormat":1},{"version":"d51a4e4450ee23d941db79652c660ca2612691dba235fd5d14d4b2a622c72312","impliedFormat":1},{"version":"caa5b8ddf0c391e8dc3d9d4926d08bdcb43333896250f7411a7cc711275523ce","signature":"0be185ff5e5966a08ffcfd260364f24998882b409292321f1609ee7501a820ec","impliedFormat":99},{"version":"126783a400a891fce19c88533874b41073eb898725cb2a86a878e3b18e4e71f8","impliedFormat":99},{"version":"e59c13a739b9fbb0e9200e3140bf3f40358fffe0ab7eb661e5bc48d0d0f82c9c","impliedFormat":1},{"version":"025ff135f53ce224a573a1aa7df13bd10f905eee767ebcbc57c38e466194f17e","impliedFormat":1},{"version":"e51b36525a9d5f7a07a0f0d91e0bc9ba4d1da0630ddc66a985b08922c5c7da46","signature":"b733fb3c1de66fdd3da9bc63d43c81f38a5683bc6560493150961aa4b7c20707","impliedFormat":99},{"version":"faeaed40de826b39ff776745b2584ead80d9e52086b31c783aad7ad2e3d519b5","signature":"332f080bfc7b613abfd1244bd84e822263f2da7ec3e969e7be281be69eb864ec","impliedFormat":99},{"version":"48089065d57231403aeb2f1484ee6664ef52a51aa555d7d161c6214ae4b6cde9","signature":"28bcafb3c54da54f1e223d46247a253aa9c4f77f83b43a5c9c7f3d02ff54babf","impliedFormat":99},{"version":"2b68dd0db553ba858aa4e9c4531f6d5f20002c2d7ff5a4f456fe39d7f50b389b","signature":"44eda3a2e83b730fa2a65ba870d743c4fc532f09c5e3ff6638b9c250cb9472dc","impliedFormat":99},{"version":"ad9e303289834b0bcb4891a7cb591e3e047dcbdd995fa45aa0af212374df3f9c","signature":"cf4344f78e55e50d30056791ffbc9b8e1f5553b05e96543dad630a47f14a2737","impliedFormat":99},{"version":"336a54b50b7d21bd02e6e8462d9d24e6da0996eb8868797229fb8477debf23f0","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"e954f1fdc238d7fd6488810422b1fbe6e6059aedcad5cca5ce55c9e1d3e8960e","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"8f3a830f231f9196313fe8a4e61194b5fc51748e1c509bdc0dd2fcb70310c51a","impliedFormat":1},{"version":"1a3e8eaaab414b7b6566e0c61390805111ca73b55cb08a195f9491c7a0577d19","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"06dee36c2eb08a5af99fb07f2c9f5a5d3a2a2a5642a429398c3697a4b0d0a7bd","impliedFormat":99},{"version":"736097ddbb2903bef918bb3b5811ef1c9c5656f2a73bd39b22a91b9cc2525e50","impliedFormat":1},{"version":"293aa57e412ee0a654114078da7ba5b81734679bcd401c38df6f6097bef86711","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"8dba2f2a4fd4f4daae5a5b8b4bf6604efcdff1e8f660721ca56d972f4c46da42","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"9e13f82f69a54b2ab212b25da927d94fb2ba7e0f8a743ff94006e489a31c95d7","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"903d36a9e6e97b387a9c9543edb7e930beff2be05768ce0aa6f4af120375614c","signature":"f9418cd48fdefb9c96aebf2d5daf7a70375ca6800a0c49a4f4046a2b993b0e4a","impliedFormat":99},{"version":"294dc741abbb0e4a264a20c15b9436d65eb06f99e862712f07effbfbdf0dced2","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"f4617bbd5403ec5b058db53b242dcb1421952e2652bd5c80abf6a1c4ea5656d6","impliedFormat":1},{"version":"cc957354aa3c94c9961ebf46282cfde1e81d107fc5785a61f62c67f1dd3ac2eb","impliedFormat":1},{"version":"230d323ef7f2ffadfc0ceae494492c4d2faa2b4eaec07a4b71424d084b97ebb8","impliedFormat":1},{"version":"93de1c6dab503f053efe8d304cb522bb3a89feab8c98f307a674a4fae04773e9","impliedFormat":1},{"version":"dae3d1adc67ac3dbd1cd471889301339ec439837b5df565982345be20c8fca9a","impliedFormat":1},{"version":"331dd4fb49f27df3e88bcd1361a063de1e9bcc7d463d6dc386b0c0d690c1a66f","impliedFormat":1},{"version":"bf88ef4208a770ca39a844b182b3695df536326ea566893fdc5b8418702a331e","impliedFormat":1},{"version":"8b06ac3faeacb8484d84ddb44571d8f410697f98d7bfa86c0fda60373a9f5215","impliedFormat":1},{"version":"7eb06594824ada538b1d8b48c3925a83e7db792f47a081a62cf3e5c4e23cf0ee","impliedFormat":1},{"version":"f5638f7c2f12a9a1a57b5c41b3c1ea7db3876c003bab68e6a57afd6bcc169af0","impliedFormat":1},{"version":"a7321c0e96eecb19dcbf178493836474cef21ee3f9345384ce9d74e4be31228d","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"3054ef91b855e005b9c4681399e9d64d2a7b07a22d539314d794f09e53b876a7","impliedFormat":1},{"version":"427ce5854885cfc34387e09de05c1d5c1acf94c2143e1693f1d9ff54880573e7","impliedFormat":1},{"version":"bed2c4f96fab3348be4a34d88dcb12578c1b2475b07c6acd369e99e227718d81","impliedFormat":1},{"version":"e3ba509d3dce019b3190ceb2f3fc88e2610ab717122dabd91a9efaa37804040d","impliedFormat":1},{"version":"9ac9b7b349a96ff204f4172183cca1672cc402e1ee7277bfcdec96c000b7d818","impliedFormat":1},{"version":"ac127e4c6f2b5220b293cc9d2e64ba49781225b792a51cda50f3db8eafba550c","impliedFormat":1},{"version":"9aec3838773b6daece49517d7c04777c538ae9e9881ffb4e6d9aa8fc0c775a61","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3e604694b624fa3f83f6684185452992088f5efb2cf136b62474aa106d6f1b6","impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1},{"version":"bc88e4049153bc4dddb4503ed7e624eb141edfa9064b3659d6c86e900fe9e621","impliedFormat":1},{"version":"2b93035328f7778d200252681c1d86285d501ed424825a18f81e4c3028aa51d9","impliedFormat":1},{"version":"2ac9c8332c5f8510b8bdd571f8271e0f39b0577714d5e95c1e79a12b2616f069","impliedFormat":1},{"version":"42c21aa963e7b86fa00801d96e88b36803188018d5ad91db2a9101bccd40b3ff","impliedFormat":1},{"version":"d31eb848cdebb4c55b4893b335a7c0cca95ad66dee13cbb7d0893810c0a9c301","impliedFormat":1},{"version":"77c1d91a129ba60b8c405f9f539e42df834afb174fe0785f89d92a2c7c16b77a","impliedFormat":1},{"version":"7a9e0a564fee396cacf706523b5aeed96e04c6b871a8bebefad78499fbffc5bc","impliedFormat":1},{"version":"906c751ef5822ec0dadcea2f0e9db64a33fb4ee926cc9f7efa38afe5d5371b2a","impliedFormat":1},{"version":"5387c049e9702f2d2d7ece1a74836a14b47fbebe9bbeb19f94c580a37c855351","impliedFormat":1},{"version":"c68391fb9efad5d99ff332c65b1606248c4e4a9f1dd9a087204242b56c7126d6","impliedFormat":1},{"version":"e9cf02252d3a0ced987d24845dcb1f11c1be5541f17e5daa44c6de2d18138d0c","impliedFormat":1},{"version":"e8b02b879754d85f48489294f99147aeccc352c760d95a6fe2b6e49cd400b2fe","impliedFormat":1},{"version":"9f6908ab3d8a86c68b86e38578afc7095114e66b2fc36a2a96e9252aac3998e0","impliedFormat":1},{"version":"0eedb2344442b143ddcd788f87096961cd8572b64f10b4afc3356aa0460171c6","impliedFormat":1},{"version":"71405cc70f183d029cc5018375f6c35117ffdaf11846c35ebf85ee3956b1b2a6","impliedFormat":1},{"version":"c68baff4d8ba346130e9753cefe2e487a16731bf17e05fdacc81e8c9a26aae9d","impliedFormat":1},{"version":"2cd15528d8bb5d0453aa339b4b52e0696e8b07e790c153831c642c3dea5ac8af","impliedFormat":1},{"version":"479d622e66283ffa9883fbc33e441f7fc928b2277ff30aacbec7b7761b4e9579","impliedFormat":1},{"version":"ade307876dc5ca267ca308d09e737b611505e015c535863f22420a11fffc1c54","impliedFormat":1},{"version":"f8cdefa3e0dee639eccbe9794b46f90291e5fd3989fcba60d2f08fde56179fb9","impliedFormat":1},{"version":"86c5a62f99aac7053976e317dbe9acb2eaf903aaf3d2e5bb1cafe5c2df7b37a8","impliedFormat":1},{"version":"2b300954ce01a8343866f737656e13243e86e5baef51bd0631b21dcef1f6e954","impliedFormat":1},{"version":"a2d409a9ffd872d6b9d78ead00baa116bbc73cfa959fce9a2f29d3227876b2a1","impliedFormat":1},{"version":"b288936f560cd71f4a6002953290de9ff8dfbfbf37f5a9391be5c83322324898","impliedFormat":1},{"version":"61178a781ef82e0ff54f9430397e71e8f365fc1e3725e0e5346f2de7b0d50dfa","impliedFormat":1},{"version":"6a6ccb37feb3aad32d9be026a3337db195979cd5727a616fc0f557e974101a54","impliedFormat":1},{"version":"c649ea79205c029a02272ef55b7ab14ada0903db26144d2205021f24727ac7a3","impliedFormat":1},{"version":"38e2b02897c6357bbcff729ef84c736727b45cc152abe95a7567caccdfad2a1d","impliedFormat":1},{"version":"d6610ea7e0b1a7686dba062a1e5544dd7d34140f4545305b7c6afaebfb348341","impliedFormat":1},{"version":"3dee35db743bdba2c8d19aece7ac049bde6fa587e195d86547c882784e6ba34c","impliedFormat":1},{"version":"b15e55c5fa977c2f25ca0b1db52cfa2d1fd4bf0baf90a8b90d4a7678ca462ff1","impliedFormat":1},{"version":"f41d30972724714763a2698ae949fbc463afb203b5fa7c4ad7e4de0871129a17","impliedFormat":1},{"version":"843dd7b6a7c6269fd43827303f5cbe65c1fecabc30b4670a50d5a15d57daeeb9","impliedFormat":1},{"version":"f06d8b8567ee9fd799bf7f806efe93b67683ef24f4dea5b23ef12edff4434d9d","impliedFormat":1},{"version":"6017384f697ff38bc3ef6a546df5b230c3c31329db84cbfe686c83bec011e2b2","impliedFormat":1},{"version":"e1a5b30d9248549ca0c0bb1d653bafae20c64c4aa5928cc4cd3017b55c2177b0","impliedFormat":1},{"version":"a593632d5878f17295bd53e1c77f27bf4c15212822f764a2bfc1702f4b413fa0","impliedFormat":1},{"version":"a868a534ba1c2ca9060b8a13b0ffbbbf78b4be7b0ff80d8c75b02773f7192c29","impliedFormat":1},{"version":"da7545aba8f54a50fde23e2ede00158dc8112560d934cee58098dfb03aae9b9d","impliedFormat":1},{"version":"34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","impliedFormat":1},{"version":"6aee496bf0ecfbf6731aa8cca32f4b6e92cdc0a444911a7d88410408a45ecc5d","impliedFormat":1},{"version":"b0d10e46cfe3f6c476b69af02eaa38e4ccc7430221ce3109ae84bb9fb8282298","impliedFormat":1},{"version":"70e9a18da08294f75bf23e46c7d69e67634c0765d355887b9b41f0d959e1426e","impliedFormat":1},{"version":"149ebd778196c03e9c75b630866543501e0e9e62a146c1a17ce91ade4cdfb0ba","impliedFormat":1}],"options":{"composite":true,"inlineSourceMap":true,"inlineSources":true,"module":100,"outDir":"./","skipLibCheck":true,"strict":true,"target":8},"fileIdsList":[[69,167,234],[69,234],[168,234],[69,170,234],[171,234],[69,173,234],[174,234],[69,176,234],[177,234],[234,278],[234],[234,290],[234,278,279,280,281,282],[234,278,280],[207,222,234,241],[205,234,241],[234,285],[234,286],[234,292,295],[188,234],[191,234],[192,197,225,234],[193,204,205,212,222,233,234],[193,194,204,212,234],[195,234],[196,197,205,213,234],[197,222,230,234],[198,200,204,212,234],[199,234],[200,201,234],[204,234],[202,204,234],[204,205,206,222,233,234],[204,205,206,219,222,225,234],[234,238],[200,207,212,222,233,234],[204,205,207,208,212,222,230,233,234],[207,209,222,230,233,234],[188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240],[204,210,234],[211,233,234],[200,204,212,222,234],[213,234],[214,234],[191,215,234],[216,232,234,238],[217,234],[218,234],[204,219,220,234],[219,221,234,236],[192,204,222,223,224,225,234],[192,222,224,234],[222,223,234],[225,234],[226,234],[204,228,229,234],[228,229,234],[197,212,222,230,234],[231,234],[212,232,234],[192,207,218,233,234],[197,234],[222,234,235],[234,236],[234,237],[192,197,204,206,215,222,233,234,236,238],[222,234,239],[207,234,241],[234,300,339],[234,300,324,339],[234,339],[234,300],[234,300,325,339],[234,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338],[234,325,339],[205,207,234,241],[234,260],[234,341],[234,288,294],[222,234,253],[222,234,254],[234,292],[234,289,293],[222,234,241,248],[234,248,249],[234,291],[234,243,244],[234,244,245],[222,234,241,244,245],[222,234,241,243,244,246,247,250],[222,234,241,243,246,251,252],[234,241,243],[78,79,80,81,82,83,84,85,86,87,88,90,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,234],[122,234],[138,234],[139,234],[84,110,234],[83,91,103,111,234],[110,234],[92,234],[142,234],[85,234],[120,234],[92,103,234],[83,234],[92,129,157,234],[132,234],[134,234],[78,85,234],[103,234],[80,234],[79,80,82,92,124,234],[146,234],[144,234],[78,234],[87,88,89,90,91,92,234],[87,88,89,234],[83,92,234],[80,101,234],[90,92,234],[148,234],[84,234],[142,151,154,234],[84,85,234],[84,85,134,234],[234,266],[69,187,205,222,233,234,266,271,272],[69,187,205,233,234,266],[207,209,233,234],[69,75,187,197,205,233,234,266,271],[234,266,269],[69,70,71,234],[207,222,234],[69,71,73,74,75,234],[69,70,71,72,76,77,234],[69,70,71,76,77,165,197,207,209,213,233,234],[69,70,71,72,76,77,169,172,175,178,181,187,197,205,207,212,213,218,233,234,242,255,256,257,258,262],[70,72,76,77,166,234,263,264,265],[69,70,71,72,75,76,234,263,264,266],[69,234,257,259,261,263],[70,72,76,197,234,258],[47,234],[48,234],[48,50,234],[47,48,49,50,64,65,67,68,234],[48,62,63,234],[47,48,62,63,65,66,234],[48,50,52,234],[48,51,53,54,55,56,57,58,59,60,61,234],[180,234],[69,179,234],[69,182,234],[183,184,185,186,234],[69,70,71],[207,222],[69,71,75],[70,72],[69,70,71,77,165],[72,207],[70,72,76,77,166,263,264,265],[70,72,75,266],[263],[72]],"referencedMap":[[168,1],[167,2],[169,3],[171,4],[170,2],[172,5],[174,6],[173,2],[175,7],[177,8],[176,2],[178,9],[280,10],[278,11],[73,11],[74,11],[288,11],[291,12],[290,11],[243,11],[283,13],[279,10],[281,14],[282,10],[242,15],[284,16],[285,11],[286,17],[287,18],[296,19],[297,11],[298,11],[188,20],[189,20],[191,21],[192,22],[193,23],[194,24],[195,25],[196,26],[197,27],[198,28],[199,29],[200,30],[201,30],[203,31],[202,32],[204,31],[205,33],[206,34],[190,35],[240,11],[207,36],[208,37],[209,38],[241,39],[210,40],[211,41],[212,42],[213,43],[214,44],[215,45],[216,46],[217,47],[218,48],[219,49],[220,49],[221,50],[222,51],[224,52],[223,53],[225,54],[226,55],[227,11],[228,56],[229,57],[230,58],[231,59],[232,60],[233,61],[234,62],[235,63],[236,64],[237,65],[238,66],[239,67],[299,11],[256,68],[324,69],[325,70],[300,71],[303,71],[322,69],[323,69],[313,69],[312,72],[310,69],[305,69],[318,69],[316,69],[320,69],[304,69],[317,69],[321,69],[306,69],[307,69],[319,69],[301,69],[308,69],[309,69],[311,69],[315,69],[326,73],[314,69],[302,69],[339,74],[338,11],[333,73],[335,75],[334,73],[327,73],[328,73],[330,73],[332,73],[336,75],[337,75],[329,75],[331,75],[257,76],[340,11],[260,11],[261,77],[341,11],[342,78],[271,11],[289,11],[75,11],[295,79],[254,80],[255,81],[272,15],[293,82],[294,83],[259,11],[248,11],[249,84],[250,85],[292,86],[269,11],[245,87],[247,88],[252,88],[246,89],[251,90],[253,91],[244,92],[165,93],[109,11],[123,94],[80,11],[139,95],[141,96],[140,96],[111,97],[110,11],[113,98],[112,99],[91,11],[142,100],[146,101],[144,101],[82,11],[89,102],[121,103],[120,11],[130,104],[84,105],[116,11],[160,106],[162,11],[133,107],[135,108],[154,105],[92,109],[104,110],[83,11],[119,11],[156,11],[126,111],[125,112],[143,101],[147,113],[145,114],[161,11],[128,11],[101,115],[93,116],[94,11],[90,117],[117,118],[118,118],[124,11],[81,11],[87,11],[103,11],[132,11],[163,119],[98,100],[99,120],[148,96],[150,121],[149,121],[88,11],[78,11],[102,11],[100,100],[131,11],[159,11],[97,11],[95,122],[96,11],[134,11],[127,11],[155,123],[107,11],[105,124],[106,124],[122,100],[85,11],[151,101],[153,113],[152,114],[138,100],[157,11],[136,125],[129,11],[115,11],[158,11],[164,11],[137,11],[79,11],[114,11],[108,11],[86,124],[10,11],[9,11],[2,11],[11,11],[12,11],[13,11],[14,11],[15,11],[16,11],[17,11],[18,11],[3,11],[4,11],[22,11],[19,11],[20,11],[21,11],[23,11],[24,11],[25,11],[5,11],[26,11],[27,11],[28,11],[29,11],[6,11],[33,11],[30,11],[31,11],[32,11],[34,11],[7,11],[35,11],[40,11],[41,11],[36,11],[37,11],[38,11],[39,11],[8,11],[45,11],[42,11],[43,11],[44,11],[1,11],[46,11],[267,126],[273,127],[274,128],[275,128],[276,129],[277,130],[268,126],[270,131],[72,132],[70,133],[76,134],[77,11],[258,135],[166,136],[263,137],[266,138],[265,139],[262,140],[264,141],[71,11],[48,142],[49,143],[68,144],[69,145],[64,146],[65,142],[67,147],[66,143],[51,144],[53,148],[54,144],[55,144],[56,144],[57,144],[58,144],[59,144],[60,144],[61,144],[62,149],[52,143],[50,143],[47,11],[63,143],[179,2],[181,150],[180,151],[183,152],[182,2],[187,153],[184,152],[185,152],[186,152]],"exportedModulesMap":[[168,1],[167,2],[169,3],[171,4],[170,2],[172,5],[174,6],[173,2],[175,7],[177,8],[176,2],[178,9],[280,10],[278,11],[73,11],[74,11],[288,11],[291,12],[290,11],[243,11],[283,13],[279,10],[281,14],[282,10],[242,15],[284,16],[285,11],[286,17],[287,18],[296,19],[297,11],[298,11],[188,20],[189,20],[191,21],[192,22],[193,23],[194,24],[195,25],[196,26],[197,27],[198,28],[199,29],[200,30],[201,30],[203,31],[202,32],[204,31],[205,33],[206,34],[190,35],[240,11],[207,36],[208,37],[209,38],[241,39],[210,40],[211,41],[212,42],[213,43],[214,44],[215,45],[216,46],[217,47],[218,48],[219,49],[220,49],[221,50],[222,51],[224,52],[223,53],[225,54],[226,55],[227,11],[228,56],[229,57],[230,58],[231,59],[232,60],[233,61],[234,62],[235,63],[236,64],[237,65],[238,66],[239,67],[299,11],[256,68],[324,69],[325,70],[300,71],[303,71],[322,69],[323,69],[313,69],[312,72],[310,69],[305,69],[318,69],[316,69],[320,69],[304,69],[317,69],[321,69],[306,69],[307,69],[319,69],[301,69],[308,69],[309,69],[311,69],[315,69],[326,73],[314,69],[302,69],[339,74],[338,11],[333,73],[335,75],[334,73],[327,73],[328,73],[330,73],[332,73],[336,75],[337,75],[329,75],[331,75],[257,76],[340,11],[260,11],[261,77],[341,11],[342,78],[271,11],[289,11],[75,11],[295,79],[254,80],[255,81],[272,15],[293,82],[294,83],[259,11],[248,11],[249,84],[250,85],[292,86],[269,11],[245,87],[247,88],[252,88],[246,89],[251,90],[253,91],[244,92],[165,93],[109,11],[123,94],[80,11],[139,95],[141,96],[140,96],[111,97],[110,11],[113,98],[112,99],[91,11],[142,100],[146,101],[144,101],[82,11],[89,102],[121,103],[120,11],[130,104],[84,105],[116,11],[160,106],[162,11],[133,107],[135,108],[154,105],[92,109],[104,110],[83,11],[119,11],[156,11],[126,111],[125,112],[143,101],[147,113],[145,114],[161,11],[128,11],[101,115],[93,116],[94,11],[90,117],[117,118],[118,118],[124,11],[81,11],[87,11],[103,11],[132,11],[163,119],[98,100],[99,120],[148,96],[150,121],[149,121],[88,11],[78,11],[102,11],[100,100],[131,11],[159,11],[97,11],[95,122],[96,11],[134,11],[127,11],[155,123],[107,11],[105,124],[106,124],[122,100],[85,11],[151,101],[153,113],[152,114],[138,100],[157,11],[136,125],[129,11],[115,11],[158,11],[164,11],[137,11],[79,11],[114,11],[108,11],[86,124],[10,11],[9,11],[2,11],[11,11],[12,11],[13,11],[14,11],[15,11],[16,11],[17,11],[18,11],[3,11],[4,11],[22,11],[19,11],[20,11],[21,11],[23,11],[24,11],[25,11],[5,11],[26,11],[27,11],[28,11],[29,11],[6,11],[33,11],[30,11],[31,11],[32,11],[34,11],[7,11],[35,11],[40,11],[41,11],[36,11],[37,11],[38,11],[39,11],[8,11],[45,11],[42,11],[43,11],[44,11],[1,11],[46,11],[72,154],[70,155],[76,156],[258,157],[166,158],[263,159],[266,160],[265,161],[262,162],[264,163],[48,142],[49,143],[68,144],[69,145],[64,146],[65,142],[67,147],[66,143],[51,144],[53,148],[54,144],[55,144],[56,144],[57,144],[58,144],[59,144],[60,144],[61,144],[62,149],[52,143],[50,143],[47,11],[63,143],[179,2],[181,150],[180,151],[183,152],[182,2],[187,153],[184,152],[185,152],[186,152]],"semanticDiagnosticsPerFile":[168,167,169,171,170,172,174,173,175,177,176,178,280,278,73,74,288,291,290,243,283,279,281,282,242,284,285,286,287,296,297,298,188,189,191,192,193,194,195,196,197,198,199,200,201,203,202,204,205,206,190,240,207,208,209,241,210,211,212,213,214,215,216,217,218,219,220,221,222,224,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,299,256,324,325,300,303,322,323,313,312,310,305,318,316,320,304,317,321,306,307,319,301,308,309,311,315,326,314,302,339,338,333,335,334,327,328,330,332,336,337,329,331,257,340,260,261,341,342,271,289,75,295,254,255,272,293,294,259,248,249,250,292,269,245,247,252,246,251,253,244,165,109,123,80,139,141,140,111,110,113,112,91,142,146,144,82,89,121,120,130,84,116,160,162,133,135,154,92,104,83,119,156,126,125,143,147,145,161,128,101,93,94,90,117,118,124,81,87,103,132,163,98,99,148,150,149,88,78,102,100,131,159,97,95,96,134,127,155,107,105,106,122,85,151,153,152,138,157,136,129,115,158,164,137,79,114,108,86,10,9,2,11,12,13,14,15,16,17,18,3,4,22,19,20,21,23,24,25,5,26,27,28,29,6,33,30,31,32,34,7,35,40,41,36,37,38,39,8,45,42,43,44,1,46,267,273,274,275,276,277,268,270,72,70,76,77,258,166,263,266,265,262,264,71,48,49,68,69,64,65,67,66,51,53,54,55,56,57,58,59,60,61,62,52,50,47,63,179,181,180,183,182,187,184,185,186],"latestChangedDtsFile":"./spec/simple/simple.spec.d.ts"},"version":"4.9.4"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sdkgen/node-runtime",
|
|
3
|
-
"version": "0.0.0-dev.
|
|
3
|
+
"version": "0.0.0-dev.20230109212108",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/src/index.js",
|
|
6
|
-
"exports": "dist/src/index.js",
|
|
6
|
+
"exports": "./dist/src/index.js",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"scripts": {
|
|
9
9
|
"test": "TZ=UTC NODE_OPTIONS='--no-warnings --experimental-vm-modules' jest --passWithNoTests",
|
|
@@ -63,14 +63,13 @@
|
|
|
63
63
|
"dependencies": {
|
|
64
64
|
"@fnando/cnpj": "^1.0.2",
|
|
65
65
|
"@fnando/cpf": "^1.0.2",
|
|
66
|
-
"@sdkgen/csharp-generator": "0.0.0-dev.
|
|
67
|
-
"@sdkgen/dart-generator": "0.0.0-dev.
|
|
68
|
-
"@sdkgen/fsharp-generator": "0.0.0-dev.
|
|
69
|
-
"@sdkgen/kotlin-generator": "0.0.0-dev.
|
|
70
|
-
"@sdkgen/parser": "0.0.0-dev.
|
|
71
|
-
"@sdkgen/
|
|
72
|
-
"@sdkgen/
|
|
73
|
-
"@sdkgen/typescript-generator": "0.0.0-dev.20230109134521",
|
|
66
|
+
"@sdkgen/csharp-generator": "0.0.0-dev.20230109212108",
|
|
67
|
+
"@sdkgen/dart-generator": "0.0.0-dev.20230109212108",
|
|
68
|
+
"@sdkgen/fsharp-generator": "0.0.0-dev.20230109212108",
|
|
69
|
+
"@sdkgen/kotlin-generator": "0.0.0-dev.20230109212108",
|
|
70
|
+
"@sdkgen/parser": "0.0.0-dev.20230109212108",
|
|
71
|
+
"@sdkgen/swift-generator": "0.0.0-dev.20230109212108",
|
|
72
|
+
"@sdkgen/typescript-generator": "0.0.0-dev.20230109212108",
|
|
74
73
|
"busboy": "1.5.0",
|
|
75
74
|
"decimal.js": "^10.3.1",
|
|
76
75
|
"file-type": "^18.0.0",
|