every-plugin 0.4.4 → 0.4.6
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/build/rspack/index.cjs +300 -0
- package/dist/build/rspack/index.d.cts +20 -0
- package/dist/build/rspack/index.d.mts +20 -0
- package/dist/build/rspack/index.mjs +298 -0
- package/dist/chunk-QQAxy9l9.mjs +31 -0
- package/dist/chunk-zltIcp7o.cjs +46 -0
- package/dist/effect.cjs +9 -0
- package/dist/effect.d.cts +1 -0
- package/dist/effect.d.mts +1 -0
- package/dist/effect.mjs +3 -0
- package/dist/errors-CVnoPl9v.cjs +68 -0
- package/dist/errors-Car4tFVP.d.mts +75 -0
- package/dist/errors-D7keKf7a.mjs +63 -0
- package/dist/errors-DKPPPYYT.d.cts +75 -0
- package/dist/errors.cjs +4 -0
- package/dist/errors.d.cts +3 -0
- package/dist/errors.d.mts +3 -0
- package/dist/errors.mjs +4 -0
- package/dist/fetch-Cc95-7kM.cjs +336 -0
- package/dist/fetch-KLktuWuM.mjs +335 -0
- package/dist/index-bwAhA9ca.d.mts +383 -0
- package/dist/index-matrPV4m.d.cts +382 -0
- package/dist/index.cjs +57 -0
- package/dist/index.d.cts +5 -0
- package/dist/index.d.mts +5 -0
- package/dist/index.mjs +52 -0
- package/dist/{runtime/services/normalize.d.ts → normalize-BLTyqFww.d.mts} +5 -2
- package/dist/{runtime/services/normalize.js → normalize-BW7kk8Lk.d.cts} +5 -1
- package/dist/normalize-D4Qh0wVk.cjs +28 -0
- package/dist/normalize-D7nae0Hn.mjs +22 -0
- package/dist/openapi.DrTcell5-C6kyDyUK.mjs +669 -0
- package/dist/openapi.DrTcell5-DDf4D5V3.cjs +687 -0
- package/dist/orpc.cjs +46 -0
- package/dist/orpc.d.cts +7 -0
- package/dist/orpc.d.mts +7 -0
- package/dist/orpc.mjs +11 -0
- package/dist/package-CmegWGdE.cjs +154 -0
- package/dist/package-Dn-xZ55N.mjs +149 -0
- package/dist/plugins-C-7lh5gK.cjs +128 -0
- package/dist/plugins-Ps5Xxpk2.mjs +128 -0
- package/dist/runtime/index.cjs +6 -0
- package/dist/runtime/index.d.cts +5 -0
- package/dist/runtime/index.d.mts +5 -0
- package/dist/runtime/index.mjs +5 -0
- package/dist/runtime/services/normalize.cjs +3 -0
- package/dist/runtime/services/normalize.d.cts +2 -0
- package/dist/runtime/services/normalize.d.mts +2 -0
- package/dist/runtime/services/normalize.mjs +3 -0
- package/dist/runtime-CgRUExK3.cjs +523 -0
- package/dist/runtime-Da2NjzYy.mjs +458 -0
- package/dist/standard-DaxKTFui.mjs +595 -0
- package/dist/standard-eUgUkWaf.cjs +702 -0
- package/dist/testing/index.cjs +78 -0
- package/dist/testing/index.d.cts +60 -0
- package/dist/testing/index.d.mts +60 -0
- package/dist/testing/index.mjs +75 -0
- package/dist/zod-A7Pti5IV.d.cts +4 -0
- package/dist/zod-BVo51kgJ.mjs +10 -0
- package/dist/zod-D4CFw8d9.d.mts +4 -0
- package/dist/zod-DYghWCz1.cjs +14 -0
- package/dist/zod.cjs +10 -0
- package/dist/zod.d.cts +2 -0
- package/dist/zod.d.mts +2 -0
- package/dist/zod.mjs +5 -0
- package/dist/zod4-BXTBR1od.cjs +318 -0
- package/dist/zod4-VpXuwRO7.mjs +317 -0
- package/package.json +64 -23
- package/dist/effect.d.ts +0 -2
- package/dist/effect.d.ts.map +0 -1
- package/dist/effect.js +0 -1
- package/dist/errors.d.ts +0 -70
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -61
- package/dist/index.d.ts +0 -6
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -5
- package/dist/orpc.d.ts +0 -10
- package/dist/orpc.d.ts.map +0 -1
- package/dist/orpc.js +0 -6
- package/dist/plugin.d.ts +0 -57
- package/dist/plugin.d.ts.map +0 -1
- package/dist/plugin.js +0 -43
- package/dist/runtime/errors.d.ts +0 -36
- package/dist/runtime/errors.d.ts.map +0 -1
- package/dist/runtime/errors.js +0 -47
- package/dist/runtime/index.d.ts +0 -20
- package/dist/runtime/index.d.ts.map +0 -1
- package/dist/runtime/index.js +0 -131
- package/dist/runtime/services/module-federation.service.d.ts +0 -13
- package/dist/runtime/services/module-federation.service.d.ts.map +0 -1
- package/dist/runtime/services/module-federation.service.js +0 -155
- package/dist/runtime/services/normalize.d.ts.map +0 -1
- package/dist/runtime/services/plugin-lifecycle.service.d.ts +0 -14
- package/dist/runtime/services/plugin-lifecycle.service.d.ts.map +0 -1
- package/dist/runtime/services/plugin-lifecycle.service.js +0 -34
- package/dist/runtime/services/plugin-loader.service.d.ts +0 -45
- package/dist/runtime/services/plugin-loader.service.d.ts.map +0 -1
- package/dist/runtime/services/plugin-loader.service.js +0 -93
- package/dist/runtime/services/plugin.service.d.ts +0 -36
- package/dist/runtime/services/plugin.service.d.ts.map +0 -1
- package/dist/runtime/services/plugin.service.js +0 -31
- package/dist/runtime/services/secrets.service.d.ts +0 -15
- package/dist/runtime/services/secrets.service.d.ts.map +0 -1
- package/dist/runtime/services/secrets.service.js +0 -35
- package/dist/runtime/services.d.ts +0 -6
- package/dist/runtime/services.d.ts.map +0 -1
- package/dist/runtime/services.js +0 -5
- package/dist/runtime/validation.d.ts +0 -5
- package/dist/runtime/validation.d.ts.map +0 -1
- package/dist/runtime/validation.js +0 -13
- package/dist/testing/index.d.ts +0 -59
- package/dist/testing/index.d.ts.map +0 -1
- package/dist/testing/index.js +0 -45
- package/dist/testing/mocks/module-federation.service.d.ts +0 -6
- package/dist/testing/mocks/module-federation.service.d.ts.map +0 -1
- package/dist/testing/mocks/module-federation.service.js +0 -29
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/types.d.ts +0 -187
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -1
- package/dist/zod.d.ts +0 -2
- package/dist/zod.d.ts.map +0 -1
- package/dist/zod.js +0 -1
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { t as zod_exports } from "./zod-BVo51kgJ.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/errors.ts
|
|
4
|
+
/**
|
|
5
|
+
* Common error schemas for plugin contracts.
|
|
6
|
+
* Import these to ensure consistent error handling across plugins.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { CommonPluginErrors } from "every-plugin/errors";
|
|
11
|
+
*
|
|
12
|
+
* export const contract = oc.router({
|
|
13
|
+
* getData: oc.route(...)
|
|
14
|
+
* .errors(CommonPluginErrors)
|
|
15
|
+
* });
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
const CommonPluginErrors = {
|
|
19
|
+
UNAUTHORIZED: { data: zod_exports.z.object({
|
|
20
|
+
apiKeyProvided: zod_exports.z.boolean(),
|
|
21
|
+
provider: zod_exports.z.string().optional(),
|
|
22
|
+
authType: zod_exports.z.enum([
|
|
23
|
+
"apiKey",
|
|
24
|
+
"oauth",
|
|
25
|
+
"token"
|
|
26
|
+
]).optional()
|
|
27
|
+
}) },
|
|
28
|
+
RATE_LIMITED: { data: zod_exports.z.object({
|
|
29
|
+
retryAfter: zod_exports.z.number().int().min(1),
|
|
30
|
+
remainingRequests: zod_exports.z.number().int().min(0).optional(),
|
|
31
|
+
resetTime: zod_exports.z.string().datetime().optional(),
|
|
32
|
+
limitType: zod_exports.z.enum([
|
|
33
|
+
"requests",
|
|
34
|
+
"tokens",
|
|
35
|
+
"bandwidth"
|
|
36
|
+
]).optional()
|
|
37
|
+
}) },
|
|
38
|
+
SERVICE_UNAVAILABLE: { data: zod_exports.z.object({
|
|
39
|
+
retryAfter: zod_exports.z.number().int().optional(),
|
|
40
|
+
maintenanceWindow: zod_exports.z.boolean().default(false),
|
|
41
|
+
estimatedUptime: zod_exports.z.string().datetime().optional()
|
|
42
|
+
}) },
|
|
43
|
+
BAD_REQUEST: { data: zod_exports.z.object({
|
|
44
|
+
invalidFields: zod_exports.z.array(zod_exports.z.string()).optional(),
|
|
45
|
+
validationErrors: zod_exports.z.array(zod_exports.z.object({
|
|
46
|
+
field: zod_exports.z.string(),
|
|
47
|
+
message: zod_exports.z.string(),
|
|
48
|
+
code: zod_exports.z.string().optional()
|
|
49
|
+
})).optional()
|
|
50
|
+
}) },
|
|
51
|
+
NOT_FOUND: { data: zod_exports.z.object({
|
|
52
|
+
resource: zod_exports.z.string().optional(),
|
|
53
|
+
resourceId: zod_exports.z.string().optional()
|
|
54
|
+
}) },
|
|
55
|
+
FORBIDDEN: { data: zod_exports.z.object({
|
|
56
|
+
requiredPermissions: zod_exports.z.array(zod_exports.z.string()).optional(),
|
|
57
|
+
action: zod_exports.z.string().optional()
|
|
58
|
+
}) }
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
//#endregion
|
|
62
|
+
export { CommonPluginErrors as t };
|
|
63
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLUQ3a2VLZjdhLm1qcyIsIm5hbWVzIjpbInoiXSwic291cmNlcyI6WyIuLi9zcmMvZXJyb3JzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiLi96b2RcIjtcblxuLyoqXG4gKiBDb21tb24gZXJyb3Igc2NoZW1hcyBmb3IgcGx1Z2luIGNvbnRyYWN0cy5cbiAqIEltcG9ydCB0aGVzZSB0byBlbnN1cmUgY29uc2lzdGVudCBlcnJvciBoYW5kbGluZyBhY3Jvc3MgcGx1Z2lucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQ29tbW9uUGx1Z2luRXJyb3JzIH0gZnJvbSBcImV2ZXJ5LXBsdWdpbi9lcnJvcnNcIjtcbiAqXG4gKiBleHBvcnQgY29uc3QgY29udHJhY3QgPSBvYy5yb3V0ZXIoe1xuICogICBnZXREYXRhOiBvYy5yb3V0ZSguLi4pXG4gKiAgICAgLmVycm9ycyhDb21tb25QbHVnaW5FcnJvcnMpXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgQ29tbW9uUGx1Z2luRXJyb3JzID0ge1xuXHRVTkFVVEhPUklaRUQ6IHtcblx0XHRkYXRhOiB6Lm9iamVjdCh7XG5cdFx0XHRhcGlLZXlQcm92aWRlZDogei5ib29sZWFuKCksXG5cdFx0XHRwcm92aWRlcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuXHRcdFx0YXV0aFR5cGU6IHouZW51bShbJ2FwaUtleScsICdvYXV0aCcsICd0b2tlbiddKS5vcHRpb25hbCgpLFxuXHRcdH0pXG5cdH0sXG5cdFJBVEVfTElNSVRFRDoge1xuXHRcdGRhdGE6IHoub2JqZWN0KHtcblx0XHRcdHJldHJ5QWZ0ZXI6IHoubnVtYmVyKCkuaW50KCkubWluKDEpLFxuXHRcdFx0cmVtYWluaW5nUmVxdWVzdHM6IHoubnVtYmVyKCkuaW50KCkubWluKDApLm9wdGlvbmFsKCksXG5cdFx0XHRyZXNldFRpbWU6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5vcHRpb25hbCgpLFxuXHRcdFx0bGltaXRUeXBlOiB6LmVudW0oWydyZXF1ZXN0cycsICd0b2tlbnMnLCAnYmFuZHdpZHRoJ10pLm9wdGlvbmFsKCksXG5cdFx0fSlcblx0fSxcblx0U0VSVklDRV9VTkFWQUlMQUJMRToge1xuXHRcdGRhdGE6IHoub2JqZWN0KHtcblx0XHRcdHJldHJ5QWZ0ZXI6IHoubnVtYmVyKCkuaW50KCkub3B0aW9uYWwoKSxcblx0XHRcdG1haW50ZW5hbmNlV2luZG93OiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcblx0XHRcdGVzdGltYXRlZFVwdGltZTogei5zdHJpbmcoKS5kYXRldGltZSgpLm9wdGlvbmFsKCksXG5cdFx0fSlcblx0fSxcblx0QkFEX1JFUVVFU1Q6IHtcblx0XHRkYXRhOiB6Lm9iamVjdCh7XG5cdFx0XHRpbnZhbGlkRmllbGRzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG5cdFx0XHR2YWxpZGF0aW9uRXJyb3JzOiB6LmFycmF5KHoub2JqZWN0KHtcblx0XHRcdFx0ZmllbGQ6IHouc3RyaW5nKCksXG5cdFx0XHRcdG1lc3NhZ2U6IHouc3RyaW5nKCksXG5cdFx0XHRcdGNvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcblx0XHRcdH0pKS5vcHRpb25hbCgpLFxuXHRcdH0pXG5cdH0sXG5cdE5PVF9GT1VORDoge1xuXHRcdGRhdGE6IHoub2JqZWN0KHtcblx0XHRcdHJlc291cmNlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cdFx0XHRyZXNvdXJjZUlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cdFx0fSlcblx0fSxcblx0Rk9SQklEREVOOiB7XG5cdFx0ZGF0YTogei5vYmplY3Qoe1xuXHRcdFx0cmVxdWlyZWRQZXJtaXNzaW9uczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuXHRcdFx0YWN0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cdFx0fSlcblx0fVxufSBhcyBjb25zdDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkEsTUFBYSxxQkFBcUI7Q0FDakMsY0FBYyxFQUNiLE1BQU1BLGNBQUUsT0FBTztFQUNkLGdCQUFnQkEsY0FBRSxTQUFTO0VBQzNCLFVBQVVBLGNBQUUsUUFBUSxDQUFDLFVBQVU7RUFDL0IsVUFBVUEsY0FBRSxLQUFLO0dBQUM7R0FBVTtHQUFTO0dBQVEsQ0FBQyxDQUFDLFVBQVU7RUFDekQsQ0FBQyxFQUNGO0NBQ0QsY0FBYyxFQUNiLE1BQU1BLGNBQUUsT0FBTztFQUNkLFlBQVlBLGNBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7RUFDbkMsbUJBQW1CQSxjQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVTtFQUNyRCxXQUFXQSxjQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsVUFBVTtFQUMzQyxXQUFXQSxjQUFFLEtBQUs7R0FBQztHQUFZO0dBQVU7R0FBWSxDQUFDLENBQUMsVUFBVTtFQUNqRSxDQUFDLEVBQ0Y7Q0FDRCxxQkFBcUIsRUFDcEIsTUFBTUEsY0FBRSxPQUFPO0VBQ2QsWUFBWUEsY0FBRSxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVU7RUFDdkMsbUJBQW1CQSxjQUFFLFNBQVMsQ0FBQyxRQUFRLE1BQU07RUFDN0MsaUJBQWlCQSxjQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsVUFBVTtFQUNqRCxDQUFDLEVBQ0Y7Q0FDRCxhQUFhLEVBQ1osTUFBTUEsY0FBRSxPQUFPO0VBQ2QsZUFBZUEsY0FBRSxNQUFNQSxjQUFFLFFBQVEsQ0FBQyxDQUFDLFVBQVU7RUFDN0Msa0JBQWtCQSxjQUFFLE1BQU1BLGNBQUUsT0FBTztHQUNsQyxPQUFPQSxjQUFFLFFBQVE7R0FDakIsU0FBU0EsY0FBRSxRQUFRO0dBQ25CLE1BQU1BLGNBQUUsUUFBUSxDQUFDLFVBQVU7R0FDM0IsQ0FBQyxDQUFDLENBQUMsVUFBVTtFQUNkLENBQUMsRUFDRjtDQUNELFdBQVcsRUFDVixNQUFNQSxjQUFFLE9BQU87RUFDZCxVQUFVQSxjQUFFLFFBQVEsQ0FBQyxVQUFVO0VBQy9CLFlBQVlBLGNBQUUsUUFBUSxDQUFDLFVBQVU7RUFDakMsQ0FBQyxFQUNGO0NBQ0QsV0FBVyxFQUNWLE1BQU1BLGNBQUUsT0FBTztFQUNkLHFCQUFxQkEsY0FBRSxNQUFNQSxjQUFFLFFBQVEsQ0FBQyxDQUFDLFVBQVU7RUFDbkQsUUFBUUEsY0FBRSxRQUFRLENBQUMsVUFBVTtFQUM3QixDQUFDLEVBQ0Y7Q0FDRCJ9
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { t as zod_d_exports } from "./zod-A7Pti5IV.cjs";
|
|
2
|
+
|
|
3
|
+
//#region src/errors.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Common error schemas for plugin contracts.
|
|
7
|
+
* Import these to ensure consistent error handling across plugins.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { CommonPluginErrors } from "every-plugin/errors";
|
|
12
|
+
*
|
|
13
|
+
* export const contract = oc.router({
|
|
14
|
+
* getData: oc.route(...)
|
|
15
|
+
* .errors(CommonPluginErrors)
|
|
16
|
+
* });
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
declare const CommonPluginErrors: {
|
|
20
|
+
readonly UNAUTHORIZED: {
|
|
21
|
+
readonly data: zod_d_exports.z.ZodObject<{
|
|
22
|
+
apiKeyProvided: zod_d_exports.z.ZodBoolean;
|
|
23
|
+
provider: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodString>;
|
|
24
|
+
authType: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodEnum<{
|
|
25
|
+
apiKey: "apiKey";
|
|
26
|
+
oauth: "oauth";
|
|
27
|
+
token: "token";
|
|
28
|
+
}>>;
|
|
29
|
+
}, zod_d_exports.z.core.$strip>;
|
|
30
|
+
};
|
|
31
|
+
readonly RATE_LIMITED: {
|
|
32
|
+
readonly data: zod_d_exports.z.ZodObject<{
|
|
33
|
+
retryAfter: zod_d_exports.z.ZodNumber;
|
|
34
|
+
remainingRequests: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodNumber>;
|
|
35
|
+
resetTime: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodString>;
|
|
36
|
+
limitType: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodEnum<{
|
|
37
|
+
requests: "requests";
|
|
38
|
+
tokens: "tokens";
|
|
39
|
+
bandwidth: "bandwidth";
|
|
40
|
+
}>>;
|
|
41
|
+
}, zod_d_exports.z.core.$strip>;
|
|
42
|
+
};
|
|
43
|
+
readonly SERVICE_UNAVAILABLE: {
|
|
44
|
+
readonly data: zod_d_exports.z.ZodObject<{
|
|
45
|
+
retryAfter: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodNumber>;
|
|
46
|
+
maintenanceWindow: zod_d_exports.z.ZodDefault<zod_d_exports.z.ZodBoolean>;
|
|
47
|
+
estimatedUptime: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodString>;
|
|
48
|
+
}, zod_d_exports.z.core.$strip>;
|
|
49
|
+
};
|
|
50
|
+
readonly BAD_REQUEST: {
|
|
51
|
+
readonly data: zod_d_exports.z.ZodObject<{
|
|
52
|
+
invalidFields: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodArray<zod_d_exports.z.ZodString>>;
|
|
53
|
+
validationErrors: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodArray<zod_d_exports.z.ZodObject<{
|
|
54
|
+
field: zod_d_exports.z.ZodString;
|
|
55
|
+
message: zod_d_exports.z.ZodString;
|
|
56
|
+
code: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodString>;
|
|
57
|
+
}, zod_d_exports.z.core.$strip>>>;
|
|
58
|
+
}, zod_d_exports.z.core.$strip>;
|
|
59
|
+
};
|
|
60
|
+
readonly NOT_FOUND: {
|
|
61
|
+
readonly data: zod_d_exports.z.ZodObject<{
|
|
62
|
+
resource: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodString>;
|
|
63
|
+
resourceId: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodString>;
|
|
64
|
+
}, zod_d_exports.z.core.$strip>;
|
|
65
|
+
};
|
|
66
|
+
readonly FORBIDDEN: {
|
|
67
|
+
readonly data: zod_d_exports.z.ZodObject<{
|
|
68
|
+
requiredPermissions: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodArray<zod_d_exports.z.ZodString>>;
|
|
69
|
+
action: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodString>;
|
|
70
|
+
}, zod_d_exports.z.core.$strip>;
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
//#endregion
|
|
74
|
+
export { CommonPluginErrors as t };
|
|
75
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLURLUFBQWVlULmQuY3RzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9lcnJvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBZ0JBOzs7Ozs7Ozs7Ozs7Y0FBYSJ9
|
package/dist/errors.cjs
ADDED
package/dist/errors.mjs
ADDED
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
const require_chunk = require('./chunk-zltIcp7o.cjs');
|
|
2
|
+
const require_standard = require('./standard-eUgUkWaf.cjs');
|
|
3
|
+
let __orpc_server = require("@orpc/server");
|
|
4
|
+
let __orpc_contract = require("@orpc/contract");
|
|
5
|
+
let __orpc_server_fetch = require("@orpc/server/fetch");
|
|
6
|
+
let __orpc_server_standard = require("@orpc/server/standard");
|
|
7
|
+
|
|
8
|
+
//#region ../../node_modules/.bun/rou3@0.7.10/node_modules/rou3/dist/index.mjs
|
|
9
|
+
const NullProtoObj = /* @__PURE__ */ (() => {
|
|
10
|
+
const e = function() {};
|
|
11
|
+
return e.prototype = Object.create(null), Object.freeze(e.prototype), e;
|
|
12
|
+
})();
|
|
13
|
+
/**
|
|
14
|
+
* Create a new router context.
|
|
15
|
+
*/
|
|
16
|
+
function createRouter() {
|
|
17
|
+
return {
|
|
18
|
+
root: { key: "" },
|
|
19
|
+
static: new NullProtoObj()
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function splitPath(path) {
|
|
23
|
+
const [_, ...s] = path.split("/");
|
|
24
|
+
return s[s.length - 1] === "" ? s.slice(0, -1) : s;
|
|
25
|
+
}
|
|
26
|
+
function getMatchParams(segments, paramsMap) {
|
|
27
|
+
const params = new NullProtoObj();
|
|
28
|
+
for (const [index, name] of paramsMap) {
|
|
29
|
+
const segment = index < 0 ? segments.slice(-1 * index).join("/") : segments[index];
|
|
30
|
+
if (typeof name === "string") params[name] = segment;
|
|
31
|
+
else {
|
|
32
|
+
const match = segment.match(name);
|
|
33
|
+
if (match) for (const key in match.groups) params[key] = match.groups[key];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return params;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Add a route to the router context.
|
|
40
|
+
*/
|
|
41
|
+
function addRoute(ctx, method = "", path, data) {
|
|
42
|
+
method = method.toUpperCase();
|
|
43
|
+
if (path.charCodeAt(0) !== 47) path = `/${path}`;
|
|
44
|
+
const segments = splitPath(path);
|
|
45
|
+
let node = ctx.root;
|
|
46
|
+
let _unnamedParamIndex = 0;
|
|
47
|
+
const paramsMap = [];
|
|
48
|
+
const paramsRegexp = [];
|
|
49
|
+
for (let i = 0; i < segments.length; i++) {
|
|
50
|
+
const segment = segments[i];
|
|
51
|
+
if (segment.startsWith("**")) {
|
|
52
|
+
if (!node.wildcard) node.wildcard = { key: "**" };
|
|
53
|
+
node = node.wildcard;
|
|
54
|
+
paramsMap.push([
|
|
55
|
+
-i,
|
|
56
|
+
segment.split(":")[1] || "_",
|
|
57
|
+
segment.length === 2
|
|
58
|
+
]);
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
if (segment === "*" || segment.includes(":")) {
|
|
62
|
+
if (!node.param) node.param = { key: "*" };
|
|
63
|
+
node = node.param;
|
|
64
|
+
if (segment === "*") paramsMap.push([
|
|
65
|
+
i,
|
|
66
|
+
`_${_unnamedParamIndex++}`,
|
|
67
|
+
true
|
|
68
|
+
]);
|
|
69
|
+
else if (segment.includes(":", 1)) {
|
|
70
|
+
const regexp = getParamRegexp(segment);
|
|
71
|
+
paramsRegexp[i] = regexp;
|
|
72
|
+
node.hasRegexParam = true;
|
|
73
|
+
paramsMap.push([
|
|
74
|
+
i,
|
|
75
|
+
regexp,
|
|
76
|
+
false
|
|
77
|
+
]);
|
|
78
|
+
} else paramsMap.push([
|
|
79
|
+
i,
|
|
80
|
+
segment.slice(1),
|
|
81
|
+
false
|
|
82
|
+
]);
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const child = node.static?.[segment];
|
|
86
|
+
if (child) node = child;
|
|
87
|
+
else {
|
|
88
|
+
const staticNode = { key: segment };
|
|
89
|
+
if (!node.static) node.static = new NullProtoObj();
|
|
90
|
+
node.static[segment] = staticNode;
|
|
91
|
+
node = staticNode;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const hasParams = paramsMap.length > 0;
|
|
95
|
+
if (!node.methods) node.methods = new NullProtoObj();
|
|
96
|
+
node.methods[method] ??= [];
|
|
97
|
+
node.methods[method].push({
|
|
98
|
+
data: data || null,
|
|
99
|
+
paramsRegexp,
|
|
100
|
+
paramsMap: hasParams ? paramsMap : void 0
|
|
101
|
+
});
|
|
102
|
+
if (!hasParams) ctx.static[path] = node;
|
|
103
|
+
}
|
|
104
|
+
function getParamRegexp(segment) {
|
|
105
|
+
const regex = segment.replace(/:(\w+)/g, (_, id) => `(?<${id}>[^/]+)`).replace(/\./g, "\\.");
|
|
106
|
+
return /* @__PURE__ */ new RegExp(`^${regex}$`);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Find a route by path.
|
|
110
|
+
*/
|
|
111
|
+
function findRoute(ctx, method = "", path, opts) {
|
|
112
|
+
if (path.charCodeAt(path.length - 1) === 47) path = path.slice(0, -1);
|
|
113
|
+
const staticNode = ctx.static[path];
|
|
114
|
+
if (staticNode && staticNode.methods) {
|
|
115
|
+
const staticMatch = staticNode.methods[method] || staticNode.methods[""];
|
|
116
|
+
if (staticMatch !== void 0) return staticMatch[0];
|
|
117
|
+
}
|
|
118
|
+
const segments = splitPath(path);
|
|
119
|
+
const match = _lookupTree(ctx, ctx.root, method, segments, 0)?.[0];
|
|
120
|
+
if (match === void 0) return;
|
|
121
|
+
if (opts?.params === false) return match;
|
|
122
|
+
return {
|
|
123
|
+
data: match.data,
|
|
124
|
+
params: match.paramsMap ? getMatchParams(segments, match.paramsMap) : void 0
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
function _lookupTree(ctx, node, method, segments, index) {
|
|
128
|
+
if (index === segments.length) {
|
|
129
|
+
if (node.methods) {
|
|
130
|
+
const match = node.methods[method] || node.methods[""];
|
|
131
|
+
if (match) return match;
|
|
132
|
+
}
|
|
133
|
+
if (node.param && node.param.methods) {
|
|
134
|
+
const match = node.param.methods[method] || node.param.methods[""];
|
|
135
|
+
if (match) {
|
|
136
|
+
const pMap = match[0].paramsMap;
|
|
137
|
+
if (pMap?.[pMap?.length - 1]?.[2]) return match;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (node.wildcard && node.wildcard.methods) {
|
|
141
|
+
const match = node.wildcard.methods[method] || node.wildcard.methods[""];
|
|
142
|
+
if (match) {
|
|
143
|
+
const pMap = match[0].paramsMap;
|
|
144
|
+
if (pMap?.[pMap?.length - 1]?.[2]) return match;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const segment = segments[index];
|
|
150
|
+
if (node.static) {
|
|
151
|
+
const staticChild = node.static[segment];
|
|
152
|
+
if (staticChild) {
|
|
153
|
+
const match = _lookupTree(ctx, staticChild, method, segments, index + 1);
|
|
154
|
+
if (match) return match;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (node.param) {
|
|
158
|
+
const match = _lookupTree(ctx, node.param, method, segments, index + 1);
|
|
159
|
+
if (match) {
|
|
160
|
+
if (node.param.hasRegexParam) {
|
|
161
|
+
const exactMatch = match.find((m) => m.paramsRegexp[index]?.test(segment)) || match.find((m) => !m.paramsRegexp[index]);
|
|
162
|
+
return exactMatch ? [exactMatch] : void 0;
|
|
163
|
+
}
|
|
164
|
+
return match;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
if (node.wildcard && node.wildcard.methods) return node.wildcard.methods[method] || node.wildcard.methods[""];
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
//#endregion
|
|
171
|
+
//#region ../../node_modules/.bun/@orpc+openapi@1.10.4/node_modules/@orpc/openapi/dist/shared/openapi.DIt-Z9W1.mjs
|
|
172
|
+
var StandardOpenAPICodec = class {
|
|
173
|
+
constructor(serializer, options = {}) {
|
|
174
|
+
this.serializer = serializer;
|
|
175
|
+
this.customErrorResponseBodyEncoder = options.customErrorResponseBodyEncoder;
|
|
176
|
+
}
|
|
177
|
+
customErrorResponseBodyEncoder;
|
|
178
|
+
async decode(request, params, procedure) {
|
|
179
|
+
if ((0, __orpc_contract.fallbackContractConfig)("defaultInputStructure", procedure["~orpc"].route.inputStructure) === "compact") {
|
|
180
|
+
const data = request.method === "GET" ? this.serializer.deserialize(request.url.searchParams) : this.serializer.deserialize(await request.body());
|
|
181
|
+
if (data === void 0) return params;
|
|
182
|
+
if (require_standard.isObject(data)) return {
|
|
183
|
+
...params,
|
|
184
|
+
...data
|
|
185
|
+
};
|
|
186
|
+
return data;
|
|
187
|
+
}
|
|
188
|
+
const deserializeSearchParams = () => {
|
|
189
|
+
return this.serializer.deserialize(request.url.searchParams);
|
|
190
|
+
};
|
|
191
|
+
return {
|
|
192
|
+
params,
|
|
193
|
+
get query() {
|
|
194
|
+
const value$1 = deserializeSearchParams();
|
|
195
|
+
Object.defineProperty(this, "query", {
|
|
196
|
+
value: value$1,
|
|
197
|
+
writable: true
|
|
198
|
+
});
|
|
199
|
+
return value$1;
|
|
200
|
+
},
|
|
201
|
+
set query(value$1) {
|
|
202
|
+
Object.defineProperty(this, "query", {
|
|
203
|
+
value: value$1,
|
|
204
|
+
writable: true
|
|
205
|
+
});
|
|
206
|
+
},
|
|
207
|
+
headers: request.headers,
|
|
208
|
+
body: this.serializer.deserialize(await request.body())
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
encode(output, procedure) {
|
|
212
|
+
const successStatus = (0, __orpc_contract.fallbackContractConfig)("defaultSuccessStatus", procedure["~orpc"].route.successStatus);
|
|
213
|
+
if ((0, __orpc_contract.fallbackContractConfig)("defaultOutputStructure", procedure["~orpc"].route.outputStructure) === "compact") return {
|
|
214
|
+
status: successStatus,
|
|
215
|
+
headers: {},
|
|
216
|
+
body: this.serializer.serialize(output)
|
|
217
|
+
};
|
|
218
|
+
if (!this.#isDetailedOutput(output)) throw new Error(`
|
|
219
|
+
Invalid "detailed" output structure:
|
|
220
|
+
\u2022 Expected an object with optional properties:
|
|
221
|
+
- status (number 200-399)
|
|
222
|
+
- headers (Record<string, string | string[]>)
|
|
223
|
+
- body (any)
|
|
224
|
+
\u2022 No extra keys allowed.
|
|
225
|
+
|
|
226
|
+
Actual value:
|
|
227
|
+
${require_standard.stringifyJSON(output)}
|
|
228
|
+
`);
|
|
229
|
+
return {
|
|
230
|
+
status: output.status ?? successStatus,
|
|
231
|
+
headers: output.headers ?? {},
|
|
232
|
+
body: this.serializer.serialize(output.body)
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
encodeError(error) {
|
|
236
|
+
const body = this.customErrorResponseBodyEncoder?.(error) ?? error.toJSON();
|
|
237
|
+
return {
|
|
238
|
+
status: error.status,
|
|
239
|
+
headers: {},
|
|
240
|
+
body: this.serializer.serialize(body, { outputFormat: "plain" })
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
#isDetailedOutput(output) {
|
|
244
|
+
if (!require_standard.isObject(output)) return false;
|
|
245
|
+
if (output.headers && !require_standard.isObject(output.headers)) return false;
|
|
246
|
+
if (output.status !== void 0 && (typeof output.status !== "number" || !Number.isInteger(output.status) || require_standard.isORPCErrorStatus(output.status))) return false;
|
|
247
|
+
return true;
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
function toRou3Pattern(path) {
|
|
251
|
+
return require_standard.standardizeHTTPPath(path).replace(/\/\{\+([^}]+)\}/g, "/**:$1").replace(/\/\{([^}]+)\}/g, "/:$1");
|
|
252
|
+
}
|
|
253
|
+
function decodeParams(params) {
|
|
254
|
+
return Object.fromEntries(Object.entries(params).map(([key, value$1]) => [key, require_standard.tryDecodeURIComponent(value$1)]));
|
|
255
|
+
}
|
|
256
|
+
var StandardOpenAPIMatcher = class {
|
|
257
|
+
filter;
|
|
258
|
+
tree = createRouter();
|
|
259
|
+
pendingRouters = [];
|
|
260
|
+
constructor(options = {}) {
|
|
261
|
+
this.filter = options.filter ?? true;
|
|
262
|
+
}
|
|
263
|
+
init(router, path = []) {
|
|
264
|
+
const laziedOptions = (0, __orpc_server.traverseContractProcedures)({
|
|
265
|
+
router,
|
|
266
|
+
path
|
|
267
|
+
}, (traverseOptions) => {
|
|
268
|
+
if (!require_standard.value(this.filter, traverseOptions)) return;
|
|
269
|
+
const { path: path2, contract } = traverseOptions;
|
|
270
|
+
const method = (0, __orpc_contract.fallbackContractConfig)("defaultMethod", contract["~orpc"].route.method);
|
|
271
|
+
const httpPath = toRou3Pattern(contract["~orpc"].route.path ?? require_standard.toHttpPath(path2));
|
|
272
|
+
if ((0, __orpc_server.isProcedure)(contract)) addRoute(this.tree, method, httpPath, {
|
|
273
|
+
path: path2,
|
|
274
|
+
contract,
|
|
275
|
+
procedure: contract,
|
|
276
|
+
router
|
|
277
|
+
});
|
|
278
|
+
else addRoute(this.tree, method, httpPath, {
|
|
279
|
+
path: path2,
|
|
280
|
+
contract,
|
|
281
|
+
procedure: void 0,
|
|
282
|
+
router
|
|
283
|
+
});
|
|
284
|
+
});
|
|
285
|
+
this.pendingRouters.push(...laziedOptions.map((option) => ({
|
|
286
|
+
...option,
|
|
287
|
+
httpPathPrefix: require_standard.toHttpPath(option.path),
|
|
288
|
+
laziedPrefix: (0, __orpc_server.getLazyMeta)(option.router).prefix
|
|
289
|
+
})));
|
|
290
|
+
}
|
|
291
|
+
async match(method, pathname) {
|
|
292
|
+
if (this.pendingRouters.length) {
|
|
293
|
+
const newPendingRouters = [];
|
|
294
|
+
for (const pendingRouter of this.pendingRouters) if (!pendingRouter.laziedPrefix || pathname.startsWith(pendingRouter.laziedPrefix) || pathname.startsWith(pendingRouter.httpPathPrefix)) {
|
|
295
|
+
const { default: router } = await (0, __orpc_server.unlazy)(pendingRouter.router);
|
|
296
|
+
this.init(router, pendingRouter.path);
|
|
297
|
+
} else newPendingRouters.push(pendingRouter);
|
|
298
|
+
this.pendingRouters = newPendingRouters;
|
|
299
|
+
}
|
|
300
|
+
const match = findRoute(this.tree, method, pathname);
|
|
301
|
+
if (!match) return;
|
|
302
|
+
if (!match.data.procedure) {
|
|
303
|
+
const { default: maybeProcedure } = await (0, __orpc_server.unlazy)((0, __orpc_server.getRouter)(match.data.router, match.data.path));
|
|
304
|
+
if (!(0, __orpc_server.isProcedure)(maybeProcedure)) throw new Error(`
|
|
305
|
+
[Contract-First] Missing or invalid implementation for procedure at path: ${require_standard.toHttpPath(match.data.path)}.
|
|
306
|
+
Ensure that the procedure is correctly defined and matches the expected contract.
|
|
307
|
+
`);
|
|
308
|
+
match.data.procedure = (0, __orpc_server.createContractedProcedure)(maybeProcedure, match.data.contract);
|
|
309
|
+
}
|
|
310
|
+
return {
|
|
311
|
+
path: match.data.path,
|
|
312
|
+
procedure: match.data.procedure,
|
|
313
|
+
params: match.params ? decodeParams(match.params) : void 0
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
};
|
|
317
|
+
var StandardOpenAPIHandler = class extends __orpc_server_standard.StandardHandler {
|
|
318
|
+
constructor(router, options) {
|
|
319
|
+
const serializer = new require_standard.StandardOpenAPISerializer(new require_standard.StandardOpenAPIJsonSerializer(options), new require_standard.StandardBracketNotationSerializer(options));
|
|
320
|
+
const matcher = new StandardOpenAPIMatcher(options);
|
|
321
|
+
const codec = new StandardOpenAPICodec(serializer, options);
|
|
322
|
+
super(router, matcher, codec, options);
|
|
323
|
+
}
|
|
324
|
+
};
|
|
325
|
+
|
|
326
|
+
//#endregion
|
|
327
|
+
//#region ../../node_modules/.bun/@orpc+openapi@1.10.4/node_modules/@orpc/openapi/dist/adapters/fetch/index.mjs
|
|
328
|
+
var OpenAPIHandler = class extends __orpc_server_fetch.FetchHandler {
|
|
329
|
+
constructor(router, options = {}) {
|
|
330
|
+
super(new StandardOpenAPIHandler(router, options), options);
|
|
331
|
+
}
|
|
332
|
+
};
|
|
333
|
+
|
|
334
|
+
//#endregion
|
|
335
|
+
exports.OpenAPIHandler = OpenAPIHandler;
|
|
336
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2gtQ2M5NS03a00uY2pzIiwibmFtZXMiOlsiaXNPYmplY3QiLCJ2YWx1ZSIsIiNpc0RldGFpbGVkT3V0cHV0Iiwic3RyaW5naWZ5SlNPTiIsImlzT1JQQ0Vycm9yU3RhdHVzIiwic3RhbmRhcmRpemVIVFRQUGF0aCIsInRyeURlY29kZVVSSUNvbXBvbmVudCIsInRvSHR0cFBhdGgiLCJTdGFuZGFyZEhhbmRsZXIiLCJTdGFuZGFyZE9wZW5BUElTZXJpYWxpemVyIiwiU3RhbmRhcmRPcGVuQVBJSnNvblNlcmlhbGl6ZXIiLCJTdGFuZGFyZEJyYWNrZXROb3RhdGlvblNlcmlhbGl6ZXIiLCJGZXRjaEhhbmRsZXIiXSwic291cmNlcyI6WyIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9yb3UzQDAuNy4xMC9ub2RlX21vZHVsZXMvcm91My9kaXN0L2luZGV4Lm1qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL0BvcnBjK29wZW5hcGlAMS4xMC40L25vZGVfbW9kdWxlcy9Ab3JwYy9vcGVuYXBpL2Rpc3Qvc2hhcmVkL29wZW5hcGkuREl0LVo5VzEubWpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQG9ycGMrb3BlbmFwaUAxLjEwLjQvbm9kZV9tb2R1bGVzL0BvcnBjL29wZW5hcGkvZGlzdC9hZGFwdGVycy9mZXRjaC9pbmRleC5tanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgTnVsbFByb3RvT2JqID0gLyogQF9fUFVSRV9fICovICgoKSA9PiB7XG5cdGNvbnN0IGUgPSBmdW5jdGlvbigpIHt9O1xuXHRyZXR1cm4gZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKG51bGwpLCBPYmplY3QuZnJlZXplKGUucHJvdG90eXBlKSwgZTtcbn0pKCk7XG5cbi8qKlxuKiBDcmVhdGUgYSBuZXcgcm91dGVyIGNvbnRleHQuXG4qL1xuZnVuY3Rpb24gY3JlYXRlUm91dGVyKCkge1xuXHRyZXR1cm4ge1xuXHRcdHJvb3Q6IHsga2V5OiBcIlwiIH0sXG5cdFx0c3RhdGljOiBuZXcgTnVsbFByb3RvT2JqKClcblx0fTtcbn1cblxuZnVuY3Rpb24gc3BsaXRQYXRoKHBhdGgpIHtcblx0Y29uc3QgW18sIC4uLnNdID0gcGF0aC5zcGxpdChcIi9cIik7XG5cdHJldHVybiBzW3MubGVuZ3RoIC0gMV0gPT09IFwiXCIgPyBzLnNsaWNlKDAsIC0xKSA6IHM7XG59XG5mdW5jdGlvbiBnZXRNYXRjaFBhcmFtcyhzZWdtZW50cywgcGFyYW1zTWFwKSB7XG5cdGNvbnN0IHBhcmFtcyA9IG5ldyBOdWxsUHJvdG9PYmooKTtcblx0Zm9yIChjb25zdCBbaW5kZXgsIG5hbWVdIG9mIHBhcmFtc01hcCkge1xuXHRcdGNvbnN0IHNlZ21lbnQgPSBpbmRleCA8IDAgPyBzZWdtZW50cy5zbGljZSgtMSAqIGluZGV4KS5qb2luKFwiL1wiKSA6IHNlZ21lbnRzW2luZGV4XTtcblx0XHRpZiAodHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIpIHBhcmFtc1tuYW1lXSA9IHNlZ21lbnQ7XG5cdFx0ZWxzZSB7XG5cdFx0XHRjb25zdCBtYXRjaCA9IHNlZ21lbnQubWF0Y2gobmFtZSk7XG5cdFx0XHRpZiAobWF0Y2gpIGZvciAoY29uc3Qga2V5IGluIG1hdGNoLmdyb3VwcykgcGFyYW1zW2tleV0gPSBtYXRjaC5ncm91cHNba2V5XTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHBhcmFtcztcbn1cblxuLyoqXG4qIEFkZCBhIHJvdXRlIHRvIHRoZSByb3V0ZXIgY29udGV4dC5cbiovXG5mdW5jdGlvbiBhZGRSb3V0ZShjdHgsIG1ldGhvZCA9IFwiXCIsIHBhdGgsIGRhdGEpIHtcblx0bWV0aG9kID0gbWV0aG9kLnRvVXBwZXJDYXNlKCk7XG5cdGlmIChwYXRoLmNoYXJDb2RlQXQoMCkgIT09IDQ3KSBwYXRoID0gYC8ke3BhdGh9YDtcblx0Y29uc3Qgc2VnbWVudHMgPSBzcGxpdFBhdGgocGF0aCk7XG5cdGxldCBub2RlID0gY3R4LnJvb3Q7XG5cdGxldCBfdW5uYW1lZFBhcmFtSW5kZXggPSAwO1xuXHRjb25zdCBwYXJhbXNNYXAgPSBbXTtcblx0Y29uc3QgcGFyYW1zUmVnZXhwID0gW107XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBzZWdtZW50ID0gc2VnbWVudHNbaV07XG5cdFx0aWYgKHNlZ21lbnQuc3RhcnRzV2l0aChcIioqXCIpKSB7XG5cdFx0XHRpZiAoIW5vZGUud2lsZGNhcmQpIG5vZGUud2lsZGNhcmQgPSB7IGtleTogXCIqKlwiIH07XG5cdFx0XHRub2RlID0gbm9kZS53aWxkY2FyZDtcblx0XHRcdHBhcmFtc01hcC5wdXNoKFtcblx0XHRcdFx0LWksXG5cdFx0XHRcdHNlZ21lbnQuc3BsaXQoXCI6XCIpWzFdIHx8IFwiX1wiLFxuXHRcdFx0XHRzZWdtZW50Lmxlbmd0aCA9PT0gMlxuXHRcdFx0XSk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdFx0aWYgKHNlZ21lbnQgPT09IFwiKlwiIHx8IHNlZ21lbnQuaW5jbHVkZXMoXCI6XCIpKSB7XG5cdFx0XHRpZiAoIW5vZGUucGFyYW0pIG5vZGUucGFyYW0gPSB7IGtleTogXCIqXCIgfTtcblx0XHRcdG5vZGUgPSBub2RlLnBhcmFtO1xuXHRcdFx0aWYgKHNlZ21lbnQgPT09IFwiKlwiKSBwYXJhbXNNYXAucHVzaChbXG5cdFx0XHRcdGksXG5cdFx0XHRcdGBfJHtfdW5uYW1lZFBhcmFtSW5kZXgrK31gLFxuXHRcdFx0XHR0cnVlXG5cdFx0XHRdKTtcblx0XHRcdGVsc2UgaWYgKHNlZ21lbnQuaW5jbHVkZXMoXCI6XCIsIDEpKSB7XG5cdFx0XHRcdGNvbnN0IHJlZ2V4cCA9IGdldFBhcmFtUmVnZXhwKHNlZ21lbnQpO1xuXHRcdFx0XHRwYXJhbXNSZWdleHBbaV0gPSByZWdleHA7XG5cdFx0XHRcdG5vZGUuaGFzUmVnZXhQYXJhbSA9IHRydWU7XG5cdFx0XHRcdHBhcmFtc01hcC5wdXNoKFtcblx0XHRcdFx0XHRpLFxuXHRcdFx0XHRcdHJlZ2V4cCxcblx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRdKTtcblx0XHRcdH0gZWxzZSBwYXJhbXNNYXAucHVzaChbXG5cdFx0XHRcdGksXG5cdFx0XHRcdHNlZ21lbnQuc2xpY2UoMSksXG5cdFx0XHRcdGZhbHNlXG5cdFx0XHRdKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRjb25zdCBjaGlsZCA9IG5vZGUuc3RhdGljPy5bc2VnbWVudF07XG5cdFx0aWYgKGNoaWxkKSBub2RlID0gY2hpbGQ7XG5cdFx0ZWxzZSB7XG5cdFx0XHRjb25zdCBzdGF0aWNOb2RlID0geyBrZXk6IHNlZ21lbnQgfTtcblx0XHRcdGlmICghbm9kZS5zdGF0aWMpIG5vZGUuc3RhdGljID0gbmV3IE51bGxQcm90b09iaigpO1xuXHRcdFx0bm9kZS5zdGF0aWNbc2VnbWVudF0gPSBzdGF0aWNOb2RlO1xuXHRcdFx0bm9kZSA9IHN0YXRpY05vZGU7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGhhc1BhcmFtcyA9IHBhcmFtc01hcC5sZW5ndGggPiAwO1xuXHRpZiAoIW5vZGUubWV0aG9kcykgbm9kZS5tZXRob2RzID0gbmV3IE51bGxQcm90b09iaigpO1xuXHRub2RlLm1ldGhvZHNbbWV0aG9kXSA/Pz0gW107XG5cdG5vZGUubWV0aG9kc1ttZXRob2RdLnB1c2goe1xuXHRcdGRhdGE6IGRhdGEgfHwgbnVsbCxcblx0XHRwYXJhbXNSZWdleHAsXG5cdFx0cGFyYW1zTWFwOiBoYXNQYXJhbXMgPyBwYXJhbXNNYXAgOiB2b2lkIDBcblx0fSk7XG5cdGlmICghaGFzUGFyYW1zKSBjdHguc3RhdGljW3BhdGhdID0gbm9kZTtcbn1cbmZ1bmN0aW9uIGdldFBhcmFtUmVnZXhwKHNlZ21lbnQpIHtcblx0Y29uc3QgcmVnZXggPSBzZWdtZW50LnJlcGxhY2UoLzooXFx3KykvZywgKF8sIGlkKSA9PiBgKD88JHtpZH0+W14vXSspYCkucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIik7XG5cdHJldHVybiAvKiBAX19QVVJFX18gKi8gbmV3IFJlZ0V4cChgXiR7cmVnZXh9JGApO1xufVxuXG4vKipcbiogRmluZCBhIHJvdXRlIGJ5IHBhdGguXG4qL1xuZnVuY3Rpb24gZmluZFJvdXRlKGN0eCwgbWV0aG9kID0gXCJcIiwgcGF0aCwgb3B0cykge1xuXHRpZiAocGF0aC5jaGFyQ29kZUF0KHBhdGgubGVuZ3RoIC0gMSkgPT09IDQ3KSBwYXRoID0gcGF0aC5zbGljZSgwLCAtMSk7XG5cdGNvbnN0IHN0YXRpY05vZGUgPSBjdHguc3RhdGljW3BhdGhdO1xuXHRpZiAoc3RhdGljTm9kZSAmJiBzdGF0aWNOb2RlLm1ldGhvZHMpIHtcblx0XHRjb25zdCBzdGF0aWNNYXRjaCA9IHN0YXRpY05vZGUubWV0aG9kc1ttZXRob2RdIHx8IHN0YXRpY05vZGUubWV0aG9kc1tcIlwiXTtcblx0XHRpZiAoc3RhdGljTWF0Y2ggIT09IHZvaWQgMCkgcmV0dXJuIHN0YXRpY01hdGNoWzBdO1xuXHR9XG5cdGNvbnN0IHNlZ21lbnRzID0gc3BsaXRQYXRoKHBhdGgpO1xuXHRjb25zdCBtYXRjaCA9IF9sb29rdXBUcmVlKGN0eCwgY3R4LnJvb3QsIG1ldGhvZCwgc2VnbWVudHMsIDApPy5bMF07XG5cdGlmIChtYXRjaCA9PT0gdm9pZCAwKSByZXR1cm47XG5cdGlmIChvcHRzPy5wYXJhbXMgPT09IGZhbHNlKSByZXR1cm4gbWF0Y2g7XG5cdHJldHVybiB7XG5cdFx0ZGF0YTogbWF0Y2guZGF0YSxcblx0XHRwYXJhbXM6IG1hdGNoLnBhcmFtc01hcCA/IGdldE1hdGNoUGFyYW1zKHNlZ21lbnRzLCBtYXRjaC5wYXJhbXNNYXApIDogdm9pZCAwXG5cdH07XG59XG5mdW5jdGlvbiBfbG9va3VwVHJlZShjdHgsIG5vZGUsIG1ldGhvZCwgc2VnbWVudHMsIGluZGV4KSB7XG5cdGlmIChpbmRleCA9PT0gc2VnbWVudHMubGVuZ3RoKSB7XG5cdFx0aWYgKG5vZGUubWV0aG9kcykge1xuXHRcdFx0Y29uc3QgbWF0Y2ggPSBub2RlLm1ldGhvZHNbbWV0aG9kXSB8fCBub2RlLm1ldGhvZHNbXCJcIl07XG5cdFx0XHRpZiAobWF0Y2gpIHJldHVybiBtYXRjaDtcblx0XHR9XG5cdFx0aWYgKG5vZGUucGFyYW0gJiYgbm9kZS5wYXJhbS5tZXRob2RzKSB7XG5cdFx0XHRjb25zdCBtYXRjaCA9IG5vZGUucGFyYW0ubWV0aG9kc1ttZXRob2RdIHx8IG5vZGUucGFyYW0ubWV0aG9kc1tcIlwiXTtcblx0XHRcdGlmIChtYXRjaCkge1xuXHRcdFx0XHRjb25zdCBwTWFwID0gbWF0Y2hbMF0ucGFyYW1zTWFwO1xuXHRcdFx0XHRpZiAocE1hcD8uW3BNYXA/Lmxlbmd0aCAtIDFdPy5bMl0pIHJldHVybiBtYXRjaDtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKG5vZGUud2lsZGNhcmQgJiYgbm9kZS53aWxkY2FyZC5tZXRob2RzKSB7XG5cdFx0XHRjb25zdCBtYXRjaCA9IG5vZGUud2lsZGNhcmQubWV0aG9kc1ttZXRob2RdIHx8IG5vZGUud2lsZGNhcmQubWV0aG9kc1tcIlwiXTtcblx0XHRcdGlmIChtYXRjaCkge1xuXHRcdFx0XHRjb25zdCBwTWFwID0gbWF0Y2hbMF0ucGFyYW1zTWFwO1xuXHRcdFx0XHRpZiAocE1hcD8uW3BNYXA/Lmxlbmd0aCAtIDFdPy5bMl0pIHJldHVybiBtYXRjaDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGNvbnN0IHNlZ21lbnQgPSBzZWdtZW50c1tpbmRleF07XG5cdGlmIChub2RlLnN0YXRpYykge1xuXHRcdGNvbnN0IHN0YXRpY0NoaWxkID0gbm9kZS5zdGF0aWNbc2VnbWVudF07XG5cdFx0aWYgKHN0YXRpY0NoaWxkKSB7XG5cdFx0XHRjb25zdCBtYXRjaCA9IF9sb29rdXBUcmVlKGN0eCwgc3RhdGljQ2hpbGQsIG1ldGhvZCwgc2VnbWVudHMsIGluZGV4ICsgMSk7XG5cdFx0XHRpZiAobWF0Y2gpIHJldHVybiBtYXRjaDtcblx0XHR9XG5cdH1cblx0aWYgKG5vZGUucGFyYW0pIHtcblx0XHRjb25zdCBtYXRjaCA9IF9sb29rdXBUcmVlKGN0eCwgbm9kZS5wYXJhbSwgbWV0aG9kLCBzZWdtZW50cywgaW5kZXggKyAxKTtcblx0XHRpZiAobWF0Y2gpIHtcblx0XHRcdGlmIChub2RlLnBhcmFtLmhhc1JlZ2V4UGFyYW0pIHtcblx0XHRcdFx0Y29uc3QgZXhhY3RNYXRjaCA9IG1hdGNoLmZpbmQoKG0pID0+IG0ucGFyYW1zUmVnZXhwW2luZGV4XT8udGVzdChzZWdtZW50KSkgfHwgbWF0Y2guZmluZCgobSkgPT4gIW0ucGFyYW1zUmVnZXhwW2luZGV4XSk7XG5cdFx0XHRcdHJldHVybiBleGFjdE1hdGNoID8gW2V4YWN0TWF0Y2hdIDogdm9pZCAwO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdH1cblx0fVxuXHRpZiAobm9kZS53aWxkY2FyZCAmJiBub2RlLndpbGRjYXJkLm1ldGhvZHMpIHJldHVybiBub2RlLndpbGRjYXJkLm1ldGhvZHNbbWV0aG9kXSB8fCBub2RlLndpbGRjYXJkLm1ldGhvZHNbXCJcIl07XG59XG5cbi8qKlxuKiBSZW1vdmUgYSByb3V0ZSBmcm9tIHRoZSByb3V0ZXIgY29udGV4dC5cbiovXG5mdW5jdGlvbiByZW1vdmVSb3V0ZShjdHgsIG1ldGhvZCwgcGF0aCkge1xuXHRjb25zdCBzZWdtZW50cyA9IHNwbGl0UGF0aChwYXRoKTtcblx0cmV0dXJuIF9yZW1vdmUoY3R4LnJvb3QsIG1ldGhvZCB8fCBcIlwiLCBzZWdtZW50cywgMCk7XG59XG5mdW5jdGlvbiBfcmVtb3ZlKG5vZGUsIG1ldGhvZCwgc2VnbWVudHMsIGluZGV4KSB7XG5cdGlmIChpbmRleCA9PT0gc2VnbWVudHMubGVuZ3RoKSB7XG5cdFx0aWYgKG5vZGUubWV0aG9kcyAmJiBtZXRob2QgaW4gbm9kZS5tZXRob2RzKSB7XG5cdFx0XHRkZWxldGUgbm9kZS5tZXRob2RzW21ldGhvZF07XG5cdFx0XHRpZiAoT2JqZWN0LmtleXMobm9kZS5tZXRob2RzKS5sZW5ndGggPT09IDApIG5vZGUubWV0aG9kcyA9IHZvaWQgMDtcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGNvbnN0IHNlZ21lbnQgPSBzZWdtZW50c1tpbmRleF07XG5cdGlmIChzZWdtZW50ID09PSBcIipcIikge1xuXHRcdGlmIChub2RlLnBhcmFtKSB7XG5cdFx0XHRfcmVtb3ZlKG5vZGUucGFyYW0sIG1ldGhvZCwgc2VnbWVudHMsIGluZGV4ICsgMSk7XG5cdFx0XHRpZiAoX2lzRW1wdHlOb2RlKG5vZGUucGFyYW0pKSBub2RlLnBhcmFtID0gdm9pZCAwO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblx0aWYgKHNlZ21lbnQuc3RhcnRzV2l0aChcIioqXCIpKSB7XG5cdFx0aWYgKG5vZGUud2lsZGNhcmQpIHtcblx0XHRcdF9yZW1vdmUobm9kZS53aWxkY2FyZCwgbWV0aG9kLCBzZWdtZW50cywgaW5kZXggKyAxKTtcblx0XHRcdGlmIChfaXNFbXB0eU5vZGUobm9kZS53aWxkY2FyZCkpIG5vZGUud2lsZGNhcmQgPSB2b2lkIDA7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXHRjb25zdCBjaGlsZE5vZGUgPSBub2RlLnN0YXRpYz8uW3NlZ21lbnRdO1xuXHRpZiAoY2hpbGROb2RlKSB7XG5cdFx0X3JlbW92ZShjaGlsZE5vZGUsIG1ldGhvZCwgc2VnbWVudHMsIGluZGV4ICsgMSk7XG5cdFx0aWYgKF9pc0VtcHR5Tm9kZShjaGlsZE5vZGUpKSB7XG5cdFx0XHRkZWxldGUgbm9kZS5zdGF0aWNbc2VnbWVudF07XG5cdFx0XHRpZiAoT2JqZWN0LmtleXMobm9kZS5zdGF0aWMpLmxlbmd0aCA9PT0gMCkgbm9kZS5zdGF0aWMgPSB2b2lkIDA7XG5cdFx0fVxuXHR9XG59XG5mdW5jdGlvbiBfaXNFbXB0eU5vZGUobm9kZSkge1xuXHRyZXR1cm4gbm9kZS5tZXRob2RzID09PSB2b2lkIDAgJiYgbm9kZS5zdGF0aWMgPT09IHZvaWQgMCAmJiBub2RlLnBhcmFtID09PSB2b2lkIDAgJiYgbm9kZS53aWxkY2FyZCA9PT0gdm9pZCAwO1xufVxuXG4vKipcbiogRmluZCBhbGwgcm91dGUgcGF0dGVybnMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gcGF0aC5cbiovXG5mdW5jdGlvbiBmaW5kQWxsUm91dGVzKGN0eCwgbWV0aG9kID0gXCJcIiwgcGF0aCwgb3B0cykge1xuXHRpZiAocGF0aC5jaGFyQ29kZUF0KHBhdGgubGVuZ3RoIC0gMSkgPT09IDQ3KSBwYXRoID0gcGF0aC5zbGljZSgwLCAtMSk7XG5cdGNvbnN0IHNlZ21lbnRzID0gc3BsaXRQYXRoKHBhdGgpO1xuXHRjb25zdCBtYXRjaGVzID0gX2ZpbmRBbGwoY3R4LCBjdHgucm9vdCwgbWV0aG9kLCBzZWdtZW50cywgMCk7XG5cdGlmIChvcHRzPy5wYXJhbXMgPT09IGZhbHNlKSByZXR1cm4gbWF0Y2hlcztcblx0cmV0dXJuIG1hdGNoZXMubWFwKChtKSA9PiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGRhdGE6IG0uZGF0YSxcblx0XHRcdHBhcmFtczogbS5wYXJhbXNNYXAgPyBnZXRNYXRjaFBhcmFtcyhzZWdtZW50cywgbS5wYXJhbXNNYXApIDogdm9pZCAwXG5cdFx0fTtcblx0fSk7XG59XG5mdW5jdGlvbiBfZmluZEFsbChjdHgsIG5vZGUsIG1ldGhvZCwgc2VnbWVudHMsIGluZGV4LCBtYXRjaGVzID0gW10pIHtcblx0Y29uc3Qgc2VnbWVudCA9IHNlZ21lbnRzW2luZGV4XTtcblx0aWYgKG5vZGUud2lsZGNhcmQgJiYgbm9kZS53aWxkY2FyZC5tZXRob2RzKSB7XG5cdFx0Y29uc3QgbWF0Y2ggPSBub2RlLndpbGRjYXJkLm1ldGhvZHNbbWV0aG9kXSB8fCBub2RlLndpbGRjYXJkLm1ldGhvZHNbXCJcIl07XG5cdFx0aWYgKG1hdGNoKSBtYXRjaGVzLnB1c2goLi4ubWF0Y2gpO1xuXHR9XG5cdGlmIChub2RlLnBhcmFtKSB7XG5cdFx0X2ZpbmRBbGwoY3R4LCBub2RlLnBhcmFtLCBtZXRob2QsIHNlZ21lbnRzLCBpbmRleCArIDEsIG1hdGNoZXMpO1xuXHRcdGlmIChpbmRleCA9PT0gc2VnbWVudHMubGVuZ3RoICYmIG5vZGUucGFyYW0ubWV0aG9kcykge1xuXHRcdFx0Y29uc3QgbWF0Y2ggPSBub2RlLnBhcmFtLm1ldGhvZHNbbWV0aG9kXSB8fCBub2RlLnBhcmFtLm1ldGhvZHNbXCJcIl07XG5cdFx0XHRpZiAobWF0Y2gpIHtcblx0XHRcdFx0Y29uc3QgcE1hcCA9IG1hdGNoWzBdLnBhcmFtc01hcDtcblx0XHRcdFx0aWYgKHBNYXA/LltwTWFwPy5sZW5ndGggLSAxXT8uWzJdKSBtYXRjaGVzLnB1c2goLi4ubWF0Y2gpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRjb25zdCBzdGF0aWNDaGlsZCA9IG5vZGUuc3RhdGljPy5bc2VnbWVudF07XG5cdGlmIChzdGF0aWNDaGlsZCkgX2ZpbmRBbGwoY3R4LCBzdGF0aWNDaGlsZCwgbWV0aG9kLCBzZWdtZW50cywgaW5kZXggKyAxLCBtYXRjaGVzKTtcblx0aWYgKGluZGV4ID09PSBzZWdtZW50cy5sZW5ndGggJiYgbm9kZS5tZXRob2RzKSB7XG5cdFx0Y29uc3QgbWF0Y2ggPSBub2RlLm1ldGhvZHNbbWV0aG9kXSB8fCBub2RlLm1ldGhvZHNbXCJcIl07XG5cdFx0aWYgKG1hdGNoKSBtYXRjaGVzLnB1c2goLi4ubWF0Y2gpO1xuXHR9XG5cdHJldHVybiBtYXRjaGVzO1xufVxuXG5mdW5jdGlvbiByb3V0ZVRvUmVnRXhwKHJvdXRlID0gXCIvXCIpIHtcblx0Y29uc3QgcmVTZWdtZW50cyA9IFtdO1xuXHRsZXQgaWRDdHIgPSAwO1xuXHRmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygcm91dGUuc3BsaXQoXCIvXCIpKSB7XG5cdFx0aWYgKCFzZWdtZW50KSBjb250aW51ZTtcblx0XHRpZiAoc2VnbWVudCA9PT0gXCIqXCIpIHJlU2VnbWVudHMucHVzaChgKD88XyR7aWRDdHIrK30+W14vXSopYCk7XG5cdFx0ZWxzZSBpZiAoc2VnbWVudC5zdGFydHNXaXRoKFwiKipcIikpIHJlU2VnbWVudHMucHVzaChzZWdtZW50ID09PSBcIioqXCIgPyBcIj8oPzxfPi4qKVwiIDogYD8oPzwke3NlZ21lbnQuc2xpY2UoMyl9Pi4rKWApO1xuXHRcdGVsc2UgaWYgKHNlZ21lbnQuaW5jbHVkZXMoXCI6XCIpKSByZVNlZ21lbnRzLnB1c2goc2VnbWVudC5yZXBsYWNlKC86KFxcdyspL2csIChfLCBpZCkgPT4gYCg/PCR7aWR9PlteL10rKWApLnJlcGxhY2UoL1xcLi9nLCBcIlxcXFwuXCIpKTtcblx0XHRlbHNlIHJlU2VnbWVudHMucHVzaChzZWdtZW50KTtcblx0fVxuXHRyZXR1cm4gLyogQF9fUFVSRV9fICovIG5ldyBSZWdFeHAoYF4vJHtyZVNlZ21lbnRzLmpvaW4oXCIvXCIpfS8/JGApO1xufVxuXG5leHBvcnQgeyBOdWxsUHJvdG9PYmosIGFkZFJvdXRlLCBjcmVhdGVSb3V0ZXIsIGZpbmRBbGxSb3V0ZXMsIGZpbmRSb3V0ZSwgcmVtb3ZlUm91dGUsIHJvdXRlVG9SZWdFeHAgfTsiLCJpbXBvcnQgeyBzdGFuZGFyZGl6ZUhUVFBQYXRoLCBTdGFuZGFyZE9wZW5BUElKc29uU2VyaWFsaXplciwgU3RhbmRhcmRCcmFja2V0Tm90YXRpb25TZXJpYWxpemVyLCBTdGFuZGFyZE9wZW5BUElTZXJpYWxpemVyIH0gZnJvbSAnQG9ycGMvb3BlbmFwaS1jbGllbnQvc3RhbmRhcmQnO1xuaW1wb3J0IHsgU3RhbmRhcmRIYW5kbGVyIH0gZnJvbSAnQG9ycGMvc2VydmVyL3N0YW5kYXJkJztcbmltcG9ydCB7IGlzT1JQQ0Vycm9yU3RhdHVzIH0gZnJvbSAnQG9ycGMvY2xpZW50JztcbmltcG9ydCB7IGZhbGxiYWNrQ29udHJhY3RDb25maWcgfSBmcm9tICdAb3JwYy9jb250cmFjdCc7XG5pbXBvcnQgeyBpc09iamVjdCwgc3RyaW5naWZ5SlNPTiwgdHJ5RGVjb2RlVVJJQ29tcG9uZW50LCB2YWx1ZSB9IGZyb20gJ0BvcnBjL3NoYXJlZCc7XG5pbXBvcnQgeyB0b0h0dHBQYXRoIH0gZnJvbSAnQG9ycGMvY2xpZW50L3N0YW5kYXJkJztcbmltcG9ydCB7IHRyYXZlcnNlQ29udHJhY3RQcm9jZWR1cmVzLCBpc1Byb2NlZHVyZSwgZ2V0TGF6eU1ldGEsIHVubGF6eSwgZ2V0Um91dGVyLCBjcmVhdGVDb250cmFjdGVkUHJvY2VkdXJlIH0gZnJvbSAnQG9ycGMvc2VydmVyJztcbmltcG9ydCB7IGNyZWF0ZVJvdXRlciwgYWRkUm91dGUsIGZpbmRSb3V0ZSB9IGZyb20gJ3JvdTMnO1xuXG5jbGFzcyBTdGFuZGFyZE9wZW5BUElDb2RlYyB7XG4gIGNvbnN0cnVjdG9yKHNlcmlhbGl6ZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuc2VyaWFsaXplciA9IHNlcmlhbGl6ZXI7XG4gICAgdGhpcy5jdXN0b21FcnJvclJlc3BvbnNlQm9keUVuY29kZXIgPSBvcHRpb25zLmN1c3RvbUVycm9yUmVzcG9uc2VCb2R5RW5jb2RlcjtcbiAgfVxuICBjdXN0b21FcnJvclJlc3BvbnNlQm9keUVuY29kZXI7XG4gIGFzeW5jIGRlY29kZShyZXF1ZXN0LCBwYXJhbXMsIHByb2NlZHVyZSkge1xuICAgIGNvbnN0IGlucHV0U3RydWN0dXJlID0gZmFsbGJhY2tDb250cmFjdENvbmZpZyhcImRlZmF1bHRJbnB1dFN0cnVjdHVyZVwiLCBwcm9jZWR1cmVbXCJ+b3JwY1wiXS5yb3V0ZS5pbnB1dFN0cnVjdHVyZSk7XG4gICAgaWYgKGlucHV0U3RydWN0dXJlID09PSBcImNvbXBhY3RcIikge1xuICAgICAgY29uc3QgZGF0YSA9IHJlcXVlc3QubWV0aG9kID09PSBcIkdFVFwiID8gdGhpcy5zZXJpYWxpemVyLmRlc2VyaWFsaXplKHJlcXVlc3QudXJsLnNlYXJjaFBhcmFtcykgOiB0aGlzLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYXdhaXQgcmVxdWVzdC5ib2R5KCkpO1xuICAgICAgaWYgKGRhdGEgPT09IHZvaWQgMCkge1xuICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgICAgfVxuICAgICAgaWYgKGlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICAgIC4uLmRhdGFcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBjb25zdCBkZXNlcmlhbGl6ZVNlYXJjaFBhcmFtcyA9ICgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVxdWVzdC51cmwuc2VhcmNoUGFyYW1zKTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwYXJhbXMsXG4gICAgICBnZXQgcXVlcnkoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZGVzZXJpYWxpemVTZWFyY2hQYXJhbXMoKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwicXVlcnlcIiwgeyB2YWx1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0sXG4gICAgICBzZXQgcXVlcnkodmFsdWUpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwicXVlcnlcIiwgeyB2YWx1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gICAgICB9LFxuICAgICAgaGVhZGVyczogcmVxdWVzdC5oZWFkZXJzLFxuICAgICAgYm9keTogdGhpcy5zZXJpYWxpemVyLmRlc2VyaWFsaXplKGF3YWl0IHJlcXVlc3QuYm9keSgpKVxuICAgIH07XG4gIH1cbiAgZW5jb2RlKG91dHB1dCwgcHJvY2VkdXJlKSB7XG4gICAgY29uc3Qgc3VjY2Vzc1N0YXR1cyA9IGZhbGxiYWNrQ29udHJhY3RDb25maWcoXCJkZWZhdWx0U3VjY2Vzc1N0YXR1c1wiLCBwcm9jZWR1cmVbXCJ+b3JwY1wiXS5yb3V0ZS5zdWNjZXNzU3RhdHVzKTtcbiAgICBjb25zdCBvdXRwdXRTdHJ1Y3R1cmUgPSBmYWxsYmFja0NvbnRyYWN0Q29uZmlnKFwiZGVmYXVsdE91dHB1dFN0cnVjdHVyZVwiLCBwcm9jZWR1cmVbXCJ+b3JwY1wiXS5yb3V0ZS5vdXRwdXRTdHJ1Y3R1cmUpO1xuICAgIGlmIChvdXRwdXRTdHJ1Y3R1cmUgPT09IFwiY29tcGFjdFwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IHN1Y2Nlc3NTdGF0dXMsXG4gICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICBib2R5OiB0aGlzLnNlcmlhbGl6ZXIuc2VyaWFsaXplKG91dHB1dClcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghdGhpcy4jaXNEZXRhaWxlZE91dHB1dChvdXRwdXQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFxuICAgICAgICBJbnZhbGlkIFwiZGV0YWlsZWRcIiBvdXRwdXQgc3RydWN0dXJlOlxuICAgICAgICBcXHUyMDIyIEV4cGVjdGVkIGFuIG9iamVjdCB3aXRoIG9wdGlvbmFsIHByb3BlcnRpZXM6XG4gICAgICAgICAgLSBzdGF0dXMgKG51bWJlciAyMDAtMzk5KVxuICAgICAgICAgIC0gaGVhZGVycyAoUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+KVxuICAgICAgICAgIC0gYm9keSAoYW55KVxuICAgICAgICBcXHUyMDIyIE5vIGV4dHJhIGtleXMgYWxsb3dlZC5cblxuICAgICAgICBBY3R1YWwgdmFsdWU6XG4gICAgICAgICAgJHtzdHJpbmdpZnlKU09OKG91dHB1dCl9XG4gICAgICBgKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogb3V0cHV0LnN0YXR1cyA/PyBzdWNjZXNzU3RhdHVzLFxuICAgICAgaGVhZGVyczogb3V0cHV0LmhlYWRlcnMgPz8ge30sXG4gICAgICBib2R5OiB0aGlzLnNlcmlhbGl6ZXIuc2VyaWFsaXplKG91dHB1dC5ib2R5KVxuICAgIH07XG4gIH1cbiAgZW5jb2RlRXJyb3IoZXJyb3IpIHtcbiAgICBjb25zdCBib2R5ID0gdGhpcy5jdXN0b21FcnJvclJlc3BvbnNlQm9keUVuY29kZXI/LihlcnJvcikgPz8gZXJyb3IudG9KU09OKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogZXJyb3Iuc3RhdHVzLFxuICAgICAgaGVhZGVyczoge30sXG4gICAgICBib2R5OiB0aGlzLnNlcmlhbGl6ZXIuc2VyaWFsaXplKGJvZHksIHsgb3V0cHV0Rm9ybWF0OiBcInBsYWluXCIgfSlcbiAgICB9O1xuICB9XG4gICNpc0RldGFpbGVkT3V0cHV0KG91dHB1dCkge1xuICAgIGlmICghaXNPYmplY3Qob3V0cHV0KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAob3V0cHV0LmhlYWRlcnMgJiYgIWlzT2JqZWN0KG91dHB1dC5oZWFkZXJzKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAob3V0cHV0LnN0YXR1cyAhPT0gdm9pZCAwICYmICh0eXBlb2Ygb3V0cHV0LnN0YXR1cyAhPT0gXCJudW1iZXJcIiB8fCAhTnVtYmVyLmlzSW50ZWdlcihvdXRwdXQuc3RhdHVzKSB8fCBpc09SUENFcnJvclN0YXR1cyhvdXRwdXQuc3RhdHVzKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9Sb3UzUGF0dGVybihwYXRoKSB7XG4gIHJldHVybiBzdGFuZGFyZGl6ZUhUVFBQYXRoKHBhdGgpLnJlcGxhY2UoL1xcL1xce1xcKyhbXn1dKylcXH0vZywgXCIvKio6JDFcIikucmVwbGFjZSgvXFwvXFx7KFtefV0rKVxcfS9nLCBcIi86JDFcIik7XG59XG5mdW5jdGlvbiBkZWNvZGVQYXJhbXMocGFyYW1zKSB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMocGFyYW1zKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gW2tleSwgdHJ5RGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKV0pKTtcbn1cblxuY2xhc3MgU3RhbmRhcmRPcGVuQVBJTWF0Y2hlciB7XG4gIGZpbHRlcjtcbiAgdHJlZSA9IGNyZWF0ZVJvdXRlcigpO1xuICBwZW5kaW5nUm91dGVycyA9IFtdO1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmZpbHRlciA9IG9wdGlvbnMuZmlsdGVyID8/IHRydWU7XG4gIH1cbiAgaW5pdChyb3V0ZXIsIHBhdGggPSBbXSkge1xuICAgIGNvbnN0IGxhemllZE9wdGlvbnMgPSB0cmF2ZXJzZUNvbnRyYWN0UHJvY2VkdXJlcyh7IHJvdXRlciwgcGF0aCB9LCAodHJhdmVyc2VPcHRpb25zKSA9PiB7XG4gICAgICBpZiAoIXZhbHVlKHRoaXMuZmlsdGVyLCB0cmF2ZXJzZU9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgcGF0aDogcGF0aDIsIGNvbnRyYWN0IH0gPSB0cmF2ZXJzZU9wdGlvbnM7XG4gICAgICBjb25zdCBtZXRob2QgPSBmYWxsYmFja0NvbnRyYWN0Q29uZmlnKFwiZGVmYXVsdE1ldGhvZFwiLCBjb250cmFjdFtcIn5vcnBjXCJdLnJvdXRlLm1ldGhvZCk7XG4gICAgICBjb25zdCBodHRwUGF0aCA9IHRvUm91M1BhdHRlcm4oY29udHJhY3RbXCJ+b3JwY1wiXS5yb3V0ZS5wYXRoID8/IHRvSHR0cFBhdGgocGF0aDIpKTtcbiAgICAgIGlmIChpc1Byb2NlZHVyZShjb250cmFjdCkpIHtcbiAgICAgICAgYWRkUm91dGUodGhpcy50cmVlLCBtZXRob2QsIGh0dHBQYXRoLCB7XG4gICAgICAgICAgcGF0aDogcGF0aDIsXG4gICAgICAgICAgY29udHJhY3QsXG4gICAgICAgICAgcHJvY2VkdXJlOiBjb250cmFjdCxcbiAgICAgICAgICAvLyB0aGlzIG1lYW4gZGV2IG5vdCB1c2VkIGNvbnRyYWN0LWZpcnN0IHNvIHdlIGNhbiB1c2VkIGNvbnRyYWN0IGFzIHByb2NlZHVyZSBkaXJlY3RseVxuICAgICAgICAgIHJvdXRlclxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFkZFJvdXRlKHRoaXMudHJlZSwgbWV0aG9kLCBodHRwUGF0aCwge1xuICAgICAgICAgIHBhdGg6IHBhdGgyLFxuICAgICAgICAgIGNvbnRyYWN0LFxuICAgICAgICAgIHByb2NlZHVyZTogdm9pZCAwLFxuICAgICAgICAgIHJvdXRlclxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnBlbmRpbmdSb3V0ZXJzLnB1c2goLi4ubGF6aWVkT3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gKHtcbiAgICAgIC4uLm9wdGlvbixcbiAgICAgIGh0dHBQYXRoUHJlZml4OiB0b0h0dHBQYXRoKG9wdGlvbi5wYXRoKSxcbiAgICAgIGxhemllZFByZWZpeDogZ2V0TGF6eU1ldGEob3B0aW9uLnJvdXRlcikucHJlZml4XG4gICAgfSkpKTtcbiAgfVxuICBhc3luYyBtYXRjaChtZXRob2QsIHBhdGhuYW1lKSB7XG4gICAgaWYgKHRoaXMucGVuZGluZ1JvdXRlcnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBuZXdQZW5kaW5nUm91dGVycyA9IFtdO1xuICAgICAgZm9yIChjb25zdCBwZW5kaW5nUm91dGVyIG9mIHRoaXMucGVuZGluZ1JvdXRlcnMpIHtcbiAgICAgICAgaWYgKCFwZW5kaW5nUm91dGVyLmxhemllZFByZWZpeCB8fCBwYXRobmFtZS5zdGFydHNXaXRoKHBlbmRpbmdSb3V0ZXIubGF6aWVkUHJlZml4KSB8fCBwYXRobmFtZS5zdGFydHNXaXRoKHBlbmRpbmdSb3V0ZXIuaHR0cFBhdGhQcmVmaXgpKSB7XG4gICAgICAgICAgY29uc3QgeyBkZWZhdWx0OiByb3V0ZXIgfSA9IGF3YWl0IHVubGF6eShwZW5kaW5nUm91dGVyLnJvdXRlcik7XG4gICAgICAgICAgdGhpcy5pbml0KHJvdXRlciwgcGVuZGluZ1JvdXRlci5wYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdQZW5kaW5nUm91dGVycy5wdXNoKHBlbmRpbmdSb3V0ZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnBlbmRpbmdSb3V0ZXJzID0gbmV3UGVuZGluZ1JvdXRlcnM7XG4gICAgfVxuICAgIGNvbnN0IG1hdGNoID0gZmluZFJvdXRlKHRoaXMudHJlZSwgbWV0aG9kLCBwYXRobmFtZSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gICAgaWYgKCFtYXRjaC5kYXRhLnByb2NlZHVyZSkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0OiBtYXliZVByb2NlZHVyZSB9ID0gYXdhaXQgdW5sYXp5KGdldFJvdXRlcihtYXRjaC5kYXRhLnJvdXRlciwgbWF0Y2guZGF0YS5wYXRoKSk7XG4gICAgICBpZiAoIWlzUHJvY2VkdXJlKG1heWJlUHJvY2VkdXJlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFxuICAgICAgICAgIFtDb250cmFjdC1GaXJzdF0gTWlzc2luZyBvciBpbnZhbGlkIGltcGxlbWVudGF0aW9uIGZvciBwcm9jZWR1cmUgYXQgcGF0aDogJHt0b0h0dHBQYXRoKG1hdGNoLmRhdGEucGF0aCl9LlxuICAgICAgICAgIEVuc3VyZSB0aGF0IHRoZSBwcm9jZWR1cmUgaXMgY29ycmVjdGx5IGRlZmluZWQgYW5kIG1hdGNoZXMgdGhlIGV4cGVjdGVkIGNvbnRyYWN0LlxuICAgICAgICBgKTtcbiAgICAgIH1cbiAgICAgIG1hdGNoLmRhdGEucHJvY2VkdXJlID0gY3JlYXRlQ29udHJhY3RlZFByb2NlZHVyZShtYXliZVByb2NlZHVyZSwgbWF0Y2guZGF0YS5jb250cmFjdCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwYXRoOiBtYXRjaC5kYXRhLnBhdGgsXG4gICAgICBwcm9jZWR1cmU6IG1hdGNoLmRhdGEucHJvY2VkdXJlLFxuICAgICAgcGFyYW1zOiBtYXRjaC5wYXJhbXMgPyBkZWNvZGVQYXJhbXMobWF0Y2gucGFyYW1zKSA6IHZvaWQgMFxuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgU3RhbmRhcmRPcGVuQVBJSGFuZGxlciBleHRlbmRzIFN0YW5kYXJkSGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yKHJvdXRlciwgb3B0aW9ucykge1xuICAgIGNvbnN0IGpzb25TZXJpYWxpemVyID0gbmV3IFN0YW5kYXJkT3BlbkFQSUpzb25TZXJpYWxpemVyKG9wdGlvbnMpO1xuICAgIGNvbnN0IGJyYWNrZXROb3RhdGlvblNlcmlhbGl6ZXIgPSBuZXcgU3RhbmRhcmRCcmFja2V0Tm90YXRpb25TZXJpYWxpemVyKG9wdGlvbnMpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZXIgPSBuZXcgU3RhbmRhcmRPcGVuQVBJU2VyaWFsaXplcihqc29uU2VyaWFsaXplciwgYnJhY2tldE5vdGF0aW9uU2VyaWFsaXplcik7XG4gICAgY29uc3QgbWF0Y2hlciA9IG5ldyBTdGFuZGFyZE9wZW5BUElNYXRjaGVyKG9wdGlvbnMpO1xuICAgIGNvbnN0IGNvZGVjID0gbmV3IFN0YW5kYXJkT3BlbkFQSUNvZGVjKHNlcmlhbGl6ZXIsIG9wdGlvbnMpO1xuICAgIHN1cGVyKHJvdXRlciwgbWF0Y2hlciwgY29kZWMsIG9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCB7IFN0YW5kYXJkT3BlbkFQSUNvZGVjIGFzIFMsIFN0YW5kYXJkT3BlbkFQSUhhbmRsZXIgYXMgYSwgU3RhbmRhcmRPcGVuQVBJTWF0Y2hlciBhcyBiLCBkZWNvZGVQYXJhbXMgYXMgZCwgdG9Sb3UzUGF0dGVybiBhcyB0IH07XG4iLCJpbXBvcnQgeyBGZXRjaEhhbmRsZXIgfSBmcm9tICdAb3JwYy9zZXJ2ZXIvZmV0Y2gnO1xuaW1wb3J0ICdAb3JwYy9jbGllbnQnO1xuaW1wb3J0ICdAb3JwYy9jb250cmFjdCc7XG5pbXBvcnQgJ0BvcnBjL3NoYXJlZCc7XG5pbXBvcnQgeyBhIGFzIFN0YW5kYXJkT3BlbkFQSUhhbmRsZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvb3BlbmFwaS5ESXQtWjlXMS5tanMnO1xuaW1wb3J0ICdAb3JwYy9jbGllbnQvc3RhbmRhcmQnO1xuaW1wb3J0ICdAb3JwYy9zZXJ2ZXInO1xuaW1wb3J0ICdyb3UzJztcbmltcG9ydCAnQG9ycGMvb3BlbmFwaS1jbGllbnQvc3RhbmRhcmQnO1xuaW1wb3J0ICdAb3JwYy9zZXJ2ZXIvc3RhbmRhcmQnO1xuXG5jbGFzcyBPcGVuQVBJSGFuZGxlciBleHRlbmRzIEZldGNoSGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yKHJvdXRlciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIobmV3IFN0YW5kYXJkT3BlbkFQSUhhbmRsZXIocm91dGVyLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gIH1cbn1cblxuZXhwb3J0IHsgT3BlbkFQSUhhbmRsZXIgfTtcbiJdLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxNQUFNLGVBQStCLHVCQUFPO0NBQzNDLE1BQU0sSUFBSSxXQUFXO0FBQ3JCLFFBQU8sRUFBRSxZQUFZLE9BQU8sT0FBTyxLQUFLLEVBQUUsT0FBTyxPQUFPLEVBQUUsVUFBVSxFQUFFO0lBQ25FOzs7O0FBS0osU0FBUyxlQUFlO0FBQ3ZCLFFBQU87RUFDTixNQUFNLEVBQUUsS0FBSyxJQUFJO0VBQ2pCLFFBQVEsSUFBSSxjQUFjO0VBQzFCOztBQUdGLFNBQVMsVUFBVSxNQUFNO0NBQ3hCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsS0FBSyxLQUFLLE1BQU0sSUFBSTtBQUNqQyxRQUFPLEVBQUUsRUFBRSxTQUFTLE9BQU8sS0FBSyxFQUFFLE1BQU0sR0FBRyxHQUFHLEdBQUc7O0FBRWxELFNBQVMsZUFBZSxVQUFVLFdBQVc7Q0FDNUMsTUFBTSxTQUFTLElBQUksY0FBYztBQUNqQyxNQUFLLE1BQU0sQ0FBQyxPQUFPLFNBQVMsV0FBVztFQUN0QyxNQUFNLFVBQVUsUUFBUSxJQUFJLFNBQVMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxLQUFLLElBQUksR0FBRyxTQUFTO0FBQzVFLE1BQUksT0FBTyxTQUFTLFNBQVUsUUFBTyxRQUFRO09BQ3hDO0dBQ0osTUFBTSxRQUFRLFFBQVEsTUFBTSxLQUFLO0FBQ2pDLE9BQUksTUFBTyxNQUFLLE1BQU0sT0FBTyxNQUFNLE9BQVEsUUFBTyxPQUFPLE1BQU0sT0FBTzs7O0FBR3hFLFFBQU87Ozs7O0FBTVIsU0FBUyxTQUFTLEtBQUssU0FBUyxJQUFJLE1B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
|