@pipeline-builder/pipeline-data 4.1.15 → 4.1.16
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/lib/api/access-control-builder.d.ts +18 -1
- package/lib/api/access-control-builder.js +19 -6
- package/lib/api/crud-service.d.ts +94 -36
- package/lib/api/crud-service.js +188 -166
- package/lib/api/plugin-resolution.d.ts +253 -0
- package/lib/api/plugin-resolution.js +649 -0
- package/lib/api/public-directory.d.ts +281 -0
- package/lib/api/public-directory.js +457 -0
- package/lib/api/query-builders.d.ts +13 -0
- package/lib/api/query-builders.js +74 -9
- package/lib/api/reporting/caches.js +4 -4
- package/lib/api/reporting/dora-scoring.d.ts +3 -3
- package/lib/api/reporting/dora-scoring.js +4 -4
- package/lib/api/reporting/dora.d.ts +6 -6
- package/lib/api/reporting/dora.js +97 -73
- package/lib/api/reporting/plugin-runtime.d.ts +25 -0
- package/lib/api/reporting/plugin-runtime.js +106 -0
- package/lib/api/reporting/query-scope.d.ts +8 -2
- package/lib/api/reporting/query-scope.js +16 -7
- package/lib/api/reporting/retention.d.ts +4 -10
- package/lib/api/reporting/retention.js +8 -11
- package/lib/api/reporting/sql-helpers.d.ts +4 -7
- package/lib/api/reporting/sql-helpers.js +8 -9
- package/lib/api/reporting/types.d.ts +55 -17
- package/lib/api/reporting/types.js +1 -1
- package/lib/api/reporting-service.d.ts +35 -26
- package/lib/api/reporting-service.js +245 -161
- package/lib/api/semver-range.d.ts +73 -0
- package/lib/api/semver-range.js +227 -0
- package/lib/api/soft-delete-sweep.js +8 -20
- package/lib/core/query-filters.d.ts +18 -3
- package/lib/core/query-filters.js +1 -1
- package/lib/database/drizzle-schema.d.ts +7790 -2461
- package/lib/database/drizzle-schema.js +29 -1
- package/lib/database/index.d.ts +4 -2
- package/lib/database/index.js +5 -3
- package/lib/database/pg-result.d.ts +19 -0
- package/lib/database/pg-result.js +32 -0
- package/lib/database/postgres-connection.js +14 -24
- package/lib/database/public-reader.d.ts +14 -0
- package/lib/database/public-reader.js +68 -0
- package/lib/database/retry-strategy.d.ts +3 -5
- package/lib/database/retry-strategy.js +4 -6
- package/lib/database/schema/compliance.d.ts +16 -34
- package/lib/database/schema/compliance.js +4 -4
- package/lib/database/schema/dashboard.js +4 -2
- package/lib/database/schema/ecosystem.d.ts +6586 -0
- package/lib/database/schema/ecosystem.js +709 -0
- package/lib/database/schema/message.d.ts +6 -12
- package/lib/database/schema/message.js +3 -1
- package/lib/database/schema/pipeline.d.ts +79 -5
- package/lib/database/schema/pipeline.js +46 -25
- package/lib/database/schema/plugin.d.ts +587 -3
- package/lib/database/schema/plugin.js +86 -14
- package/lib/database/tenancy.d.ts +6 -7
- package/lib/database/tenancy.js +13 -14
- package/lib/index.d.ts +7 -4
- package/lib/index.js +7 -4
- package/lib/testing/exports.json +146 -0
- package/package.json +44 -7
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*/
|
|
4
|
-
export type MessageType = 'announcement' | 'conversation';
|
|
5
|
-
/**
|
|
6
|
-
* Message priority levels
|
|
7
|
-
*/
|
|
8
|
-
export type MessagePriority = 'normal' | 'high' | 'urgent';
|
|
1
|
+
import { type MessagePriority, type MessageType } from '@pipeline-builder/api-core';
|
|
2
|
+
export type { MessageType, MessagePriority };
|
|
9
3
|
/**
|
|
10
4
|
* Table for storing internal messages between organizations and the system org.
|
|
11
5
|
*
|
|
@@ -186,7 +180,7 @@ export declare const message: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
|
186
180
|
tableName: "messages";
|
|
187
181
|
dataType: "string";
|
|
188
182
|
columnType: "PgVarchar";
|
|
189
|
-
data:
|
|
183
|
+
data: "announcement" | "conversation";
|
|
190
184
|
driverParam: string;
|
|
191
185
|
notNull: true;
|
|
192
186
|
hasDefault: true;
|
|
@@ -199,7 +193,7 @@ export declare const message: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
|
199
193
|
generated: undefined;
|
|
200
194
|
}, {}, {
|
|
201
195
|
length: 20;
|
|
202
|
-
$type:
|
|
196
|
+
$type: "announcement" | "conversation";
|
|
203
197
|
}>;
|
|
204
198
|
channel: import("drizzle-orm/pg-core").PgColumn<{
|
|
205
199
|
name: "channel";
|
|
@@ -297,7 +291,7 @@ export declare const message: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
|
297
291
|
tableName: "messages";
|
|
298
292
|
dataType: "string";
|
|
299
293
|
columnType: "PgVarchar";
|
|
300
|
-
data:
|
|
294
|
+
data: "high" | "normal" | "urgent";
|
|
301
295
|
driverParam: string;
|
|
302
296
|
notNull: true;
|
|
303
297
|
hasDefault: true;
|
|
@@ -310,7 +304,7 @@ export declare const message: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
|
310
304
|
generated: undefined;
|
|
311
305
|
}, {}, {
|
|
312
306
|
length: 20;
|
|
313
|
-
$type:
|
|
307
|
+
$type: "high" | "normal" | "urgent";
|
|
314
308
|
}>;
|
|
315
309
|
isDefault: import("drizzle-orm/pg-core").PgColumn<{
|
|
316
310
|
name: "is_default";
|
|
@@ -110,5 +110,7 @@ export const message = pgTable('messages', {
|
|
|
110
110
|
.on(table.recipientOrgId, table.recipientUserId, table.isActive),
|
|
111
111
|
// Composite index for org inbox (orgId + active)
|
|
112
112
|
orgActiveIdx: index('message_org_active_idx').on(table.orgId, table.isActive),
|
|
113
|
+
// GIN over the per-participant read receipts (`read_by ? <orgId>` unread counts).
|
|
114
|
+
readByIdx: index('message_read_by_idx').using('gin', table.readBy),
|
|
113
115
|
}));
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kYXRhYmFzZS9zY2hlbWEvbWVzc2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFZckc7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRTtJQUN6QyxjQUFjO0lBQ2QsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxhQUFhLEVBQUU7SUFFM0Msa0NBQWtDO0lBQ2xDLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO1NBQ3RDLE9BQU8sQ0FBQyxhQUFhLENBQUM7U0FDdEIsT0FBTyxFQUFFO0lBRVosZUFBZTtJQUNmLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQzFCLE9BQU8sQ0FBQyxhQUFhLENBQUM7U0FDdEIsT0FBTyxFQUFFO0lBQ1osU0FBUyxFQUFFLFNBQVMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDdkQsVUFBVSxFQUFFO1NBQ1osT0FBTyxFQUFFO0lBQ1osU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDMUIsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsU0FBUyxDQUFD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RSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7SUFDakYsV0FBVyxFQUFFLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQzlELGNBQWMsRUFBRSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztJQUN2RSxVQUFVLEVBQUUsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDMUQsWUFBWSxFQUFFLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO0lBQ2pFLFNBQVMsRUFBRSxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUV6RCxtRUFBbUU7SUFDbkUseUJBQXlCLEVBQUUsS0FBSyxDQUFDLHNDQUFzQyxDQUFDO1NBQ3JFLEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUU1RCw4RUFBOEU7SUFDOUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLDRCQUE0QixDQUFDO1NBQ2xELEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUVsRSxpREFBaUQ7SUFDakQsWUFBWSxFQUFFLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUM7Q0FDOUUsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgU1lTVEVNX09SR19JRCB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IHNxbCB9IGZyb20gJ2RyaXp6bGUtb3JtJztcbmltcG9ydCB7IGJvb2xlYW4sIHZhcmNoYXIsIHBnVGFibGUsIHRleHQsIHRpbWVzdGFtcCwgdXVpZCwganNvbmIsIGluZGV4IH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSc7XG5cbi8qKlxuICogTWVzc2FnZSB0eXBlIGlkZW50aWZpZXJzXG4gKi9cbmV4cG9ydCB0eXBlIE1lc3NhZ2VUeXBlID0gJ2Fubm91bmNlbWVudCcgfCAnY29udmVyc2F0aW9uJztcblxuLyoqXG4gKiBNZXNzYWdlIHByaW9yaXR5IGxldmVsc1xuICovXG5leHBvcnQgdHlwZSBNZXNzYWdlUHJpb3JpdHkgPSAnbm9ybWFsJyB8ICdoaWdoJyB8ICd1cmdlbnQnO1xuXG4vKipcbiAqIFRhYmxlIGZvciBzdG9yaW5nIGludGVybmFsIG1lc3NhZ2VzIGJldHdlZW4gb3JnYW5pemF0aW9ucyBhbmQgdGhlIHN5c3RlbSBvcmcuXG4gKlxuICogRmVhdHVyZXMgKiAtIEFubm91bmNlbWVudHM6IFN5c3RlbSBvcmcgYnJvYWRjYXN0cyB0byBhbGwgb3JncyAocmVjaXBpZW50T3JnSWQgPSAnKicpXG4gKiAtIENvbnZlcnNhdGlvbnM6IFR3by13YXkgdGhyZWFkZWQgbWVzc2FnaW5nIGJldHdlZW4gYW4gb3JnIGFuZCBzeXN0ZW0gb3JnXG4gKiAtIFRocmVhZCBzdXBwb3J0IHZpYSB0aHJlYWRJZCAobnVsbCBmb3Igcm9vdCBtZXNzYWdlcywgcmVmZXJlbmNlcyByb290IGZvciByZXBsaWVzKVxuICogLSBSZWFkIHRyYWNraW5nIHBlciBtZXNzYWdlXG4gKiAtIFByaW9yaXR5IGxldmVscyAobm9ybWFsLCBoaWdoLCB1cmdlbnQpXG4gKiAtIFNvZnQgZGVsZXRlIHN1cHBvcnRcbiAqXG4gKiBAdGFibGUgbWVzc2FnZXNcbiAqL1xuZXhwb3J0IGNvbnN0IG1lc3NhZ2UgPSBwZ1RhYmxlKCdtZXNzYWdlcycsIHtcbiAgLy8gUHJpbWFyeSBrZXlcbiAgaWQ6IHV1aWQoJ2lkJykucHJpbWFyeUtleSgpLmRlZmF1bHRSYW5kb20oKSxcblxuICAvLyBPcmdhbml6YXRpb24gYW5kIGFjY2VzcyBjb250cm9sXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pXG4gICAgLmRlZmF1bHQoU1lTVEVNX09SR19JRClcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIEF1ZGl0IGZpZWxkc1xuICBjcmVhdGVkQnk6IHRleHQoJ2NyZWF0ZWRfYnknKVxuICAgIC5kZWZhdWx0KFNZU1RFTV9PUkdfSUQpXG4gICAgLm5vdE51bGwoKSxcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KVxuICAgIC5kZWZhdWx0Tm93KClcbiAgICAubm90TnVsbCgpLFxuICB1cGRhdGVkQnk6IHRleHQoJ3VwZGF0ZWRfYnknKVxuICAgIC5kZWZhdWx0KFNZU1RFTV9PUkdfSUQpXG4gICAgLm5vdE51bGwoKSxcbiAgdXBkYXRlZEF0OiB0aW1lc3RhbXAoJ3VwZGF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KVxuICAgIC5kZWZhdWx0Tm93KClcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIFRocmVhZGluZ1xuICB0aHJlYWRJZDogdXVpZCgndGhyZWFkX2lkJyksXG5cbiAgLy8gTWVzc2FnZSByb3V0aW5nXG4gIHJlY2lwaWVudE9yZ0lkOiB2YXJjaGFyKCdyZWNpcGllbnRfb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gT3B0aW9uYWwgcGVyLXVzZXIgdGFyZ2V0aW5nIFdJVEhJTiB0aGUgcmVjaXBpZW50IG9yZy4gTlVMTCAoZGVmYXVsdCkgPSB0aGVcbiAgLy8gd2hvbGUgcmVjaXBpZW50IG9yZyBzZWVzIGl0IOKAlCB0aGUgb3JpZ2luYWwsIGJhY2t3YXJkLWNvbXBhdGlibGUgYmVoYXZpb3IuXG4gIC8vIFdoZW4gc2V0LCBvbmx5IHRoaXMgdXNlciAoYSBtZW1iZXIgb2YgYHJlY2lwaWVudE9yZ0lkYCkgc2VlcyBpdCwgZW5mb3JjZWQgaW5cbiAgLy8gYGJ1aWxkTWVzc2FnZUNvbmRpdGlvbnNgIGFnYWluc3QgdGhlIHZpZXdlcidzIHVzZXJJZC4gQW5ub3VuY2VtZW50IGJyb2FkY2FzdHNcbiAgLy8gKGByZWNpcGllbnRPcmdJZCA9ICcqJ2ApIG5ldmVyIHNldCB0aGlzIOKAlCB0aGV5IGFyZSBvcmctd2lkZSBieSBkZWZpbml0aW9uLlxuICByZWNpcGllbnRVc2VySWQ6IHZhcmNoYXIoJ3JlY2lwaWVudF91c2VyX2lkJywgeyBsZW5ndGg6IDI1NSB9KSxcblxuICAvLyBNZXNzYWdlIGNvbnRlbnRcbiAgbWVzc2FnZVR5cGU6IHZhcmNoYXIoJ21lc3NhZ2VfdHlwZScsIHsgbGVuZ3RoOiAyMCB9KVxuICAgIC4kdHlwZTxNZXNzYWdlVHlwZT4oKVxuICAgIC5kZWZhdWx0KCdjb252ZXJzYXRpb24nIGFzIE1lc3NhZ2VUeXBlKVxuICAgIC5ub3ROdWxsKCksXG4gIC8vIExvZ2ljYWwgY2hhbm5lbC9pbmJveCBidWNrZXQg4oCUICdzdXBwb3J0JywgJ2hlbHAnLCBldGMuIE51bGxhYmxlIHNvXG4gIC8vIG9yZy10by1vcmcgY29udmVyc2F0aW9ucyAod2hpY2ggYXJlbid0IGNoYW5uZWwtc2NvcGVkKSBjYW4gb21pdCBpdC5cbiAgY2hhbm5lbDogdmFyY2hhcignY2hhbm5lbCcsIHsgbGVuZ3RoOiA1MCB9KSxcbiAgc3ViamVjdDogdmFyY2hhcignc3ViamVjdCcsIHsgbGVuZ3RoOiA1MDAgfSlcbiAgICAubm90TnVsbCgpLFxuICBjb250ZW50OiB0ZXh0KCdjb250ZW50JylcbiAgICAubm90TnVsbCgpLFxuICAvLyBTZXQgd2hlbiB0aGUgYXV0aG9yIGVkaXRzIHRoZSBjb250ZW50IGFmdGVyIHNlbmRpbmcgKE5VTEwgPSBuZXZlciBlZGl0ZWQpLlxuICAvLyBEaXN0aW5jdCBmcm9tIGB1cGRhdGVkQXRgLCB3aGljaCBhbHNvIG1vdmVzIG9uIHJlYWQtcmVjZWlwdC9zeXN0ZW0gdXBkYXRlcztcbiAgLy8gYGVkaXRlZEF0YCBtYXJrcyBhIGh1bWFuIENPTlRFTlQgZWRpdCBzbyB0aGUgVUkgY2FuIHNob3cgYW4gXCJlZGl0ZWRcIiBoaW50LlxuICBlZGl0ZWRBdDogdGltZXN0YW1wKCdlZGl0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcblxuICAvLyBTdGF0dXNcbiAgLy8gYHJlYWRCeWAgaXMgdGhlIHBlci1wYXJ0aWNpcGFudCByZWFkLXJlY2VpcHQgbWFwOiBvcmdJZCDihpIgSVNPIHRpbWVzdGFtcC5cbiAgLy8gUmVjaXBpZW50IG1hcmtpbmcgdGhlIHRocmVhZCBkb2VzIE5PVCBmbGlwIHNlbmRlcidzIHZpZXcuIEVtcHR5IGB7fWBcbiAgLy8gbWVhbnMgbm9ib2R5IGhhcyByZWFkIGl0IHlldC5cbiAgcmVhZEJ5OiBqc29uYigncmVhZF9ieScpXG4gICAgLiR0eXBlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuICBwcmlvcml0eTogdmFyY2hhcigncHJpb3JpdHknLCB7IGxlbmd0aDogMjAgfSlcbiAgICAuJHR5cGU8TWVzc2FnZVByaW9yaXR5PigpXG4gICAgLmRlZmF1bHQoJ25vcm1hbCcgYXMgTWVzc2FnZVByaW9yaXR5KVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gTk9URTogbWVzc2FnZXMgY2FycnkgTk8gc2hhcmluZyBydW5nLiBUaGVpciB2aXNpYmlsaXR5IGlzIHRoZSBiZXNwb2tlXG4gIC8vIHNlbmRlci9yZWNpcGllbnQvYnJvYWRjYXN0IHByZWRpY2F0ZSBpbiBgYnVpbGRNZXNzYWdlQ29uZGl0aW9uc2AgKHBsdXMgdGhlXG4gIC8vIHBlci11c2VyIGByZWNpcGllbnRfdXNlcl9pZGAgbmFycm93aW5nKSDigJQgYSBsYWRkZXIgd291bGQgYmUgbWVhbmluZ2xlc3MgYW5kXG4gIC8vIHRoZSBgYWNjZXNzX21vZGlmaWVyYCBjb2x1bW4gdGhpcyByZXBsYWNlZCB3YXMgd3JpdHRlbiBhcyBhIGhhcmRjb2RlZFxuICAvLyAncHJpdmF0ZScgb24gZXZlcnkgcGF0aCBhbmQgbmV2ZXIgcmVhZC5cbiAgaXNEZWZhdWx0OiBib29sZWFuKCdpc19kZWZhdWx0JylcbiAgICAuZGVmYXVsdChmYWxzZSlcbiAgICAubm90TnVsbCgpLFxuICBpc0FjdGl2ZTogYm9vbGVhbignaXNfYWN0aXZlJylcbiAgICAuZGVmYXVsdCh0cnVlKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gRGVsZXRpb24gdHJhY2tpbmcgKHNvZnQgZGVsZXRlKVxuICBkZWxldGVkQXQ6IHRpbWVzdGFtcCgnZGVsZXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBkZWxldGVkQnk6IHRleHQoJ2RlbGV0ZWRfYnknKSxcbiAgLy8gU29mdC1kZWxldGUgcHVyZ2UgZGVhZGxpbmU6IHRoZSByZXRlbnRpb24gc3dlZXAgaGFyZC1kZWxldGVzIHRvbWJzdG9uZWRcbiAgLy8gcm93cyBvbmNlIGBwdXJnZV9hZnRlcmAgaGFzIHBhc3NlZCAoc2V0IG9uIGRlbGV0ZSBhbG9uZ3NpZGUgZGVsZXRlZF9hdCkuXG4gIHB1cmdlQWZ0ZXI6IHRpbWVzdGFtcCgncHVyZ2VfYWZ0ZXInLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgLy8gUGFydGlhbCBpbmRleCBvdmVyIGp1c3QgdGhlIHRvbWJzdG9uZXMg4oCUIGRyaXZlcyB0aGUgcmV0ZW50aW9uIHB1cmdlIHN3ZWVwLlxuICBwdXJnZUlkeDogaW5kZXgoJ21lc3NhZ2VfcHVyZ2VfaWR4Jykub24odGFibGUucHVyZ2VBZnRlcikud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTk9UIE5VTExgKSxcbiAgLy8gSW5kZXhlcyBmb3IgY29tbW9uIHF1ZXJpZXNcbiAgb3JnSWRJZHg6IGluZGV4KCdtZXNzYWdlX29yZ19pZF9pZHgnKS5vbih0YWJsZS5vcmdJZCksXG4gIHJlY2lwaWVudE9yZ0lkSWR4OiBpbmRleCgnbWVzc2FnZV9yZWNpcGllbnRfb3JnX2lkX2lkeCcpLm9uKHRhYmxlLnJlY2lwaWVudE9yZ0lkKSxcbiAgdGhyZWFkSWRJZHg6IGluZGV4KCdtZXNzYWdlX3RocmVhZF9pZF9pZHgnKS5vbih0YWJsZS50aHJlYWRJZCksXG4gIG1lc3NhZ2VUeXBlSWR4OiBpbmRleCgnbWVzc2FnZV9tZXNzYWdlX3R5cGVfaWR4Jykub24odGFibGUubWVzc2FnZVR5cGUpLFxuICBjaGFubmVsSWR4OiBpbmRleCgnbWVzc2FnZV9jaGFubmVsX2lkeCcpLm9uKHRhYmxlLmNoYW5uZWwpLFxuICBjcmVhdGVkQXRJZHg6IGluZGV4KCdtZXNzYWdlX2NyZWF0ZWRfYXRfaWR4Jykub24odGFibGUuY3JlYXRlZEF0KSxcbiAgYWN0aXZlSWR4OiBpbmRleCgnbWVzc2FnZV9hY3RpdmVfaWR4Jykub24odGFibGUuaXNBY3RpdmUpLFxuXG4gIC8vIENvbXBvc2l0ZSBpbmRleCBmb3IgaW5ib3ggcXVlcmllcyAocmVjaXBpZW50ICsgYWN0aXZlICsgY3JlYXRlZClcbiAgcmVjaXBpZW50QWN0aXZlQ3JlYXRlZElkeDogaW5kZXgoJ21lc3NhZ2VfcmVjaXBpZW50X2FjdGl2ZV9jcmVhdGVkX2lkeCcpXG4gICAgLm9uKHRhYmxlLnJlY2lwaWVudE9yZ0lkLCB0YWJsZS5pc0FjdGl2ZSwgdGFibGUuY3JlYXRlZEF0KSxcblxuICAvLyBDb21wb3NpdGUgaW5kZXggZm9yIHBlci11c2VyIHRhcmdldGVkIGluYm94IGxvb2t1cHMgKHJlY2lwaWVudCBvcmcgKyB1c2VyKS5cbiAgcmVjaXBpZW50VXNlcklkeDogaW5kZXgoJ21lc3NhZ2VfcmVjaXBpZW50X3VzZXJfaWR4JylcbiAgICAub24odGFibGUucmVjaXBpZW50T3JnSWQsIHRhYmxlLnJlY2lwaWVudFVzZXJJZCwgdGFibGUuaXNBY3RpdmUpLFxuXG4gIC8vIENvbXBvc2l0ZSBpbmRleCBmb3Igb3JnIGluYm94IChvcmdJZCArIGFjdGl2ZSlcbiAgb3JnQWN0aXZlSWR4OiBpbmRleCgnbWVzc2FnZV9vcmdfYWN0aXZlX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5pc0FjdGl2ZSksXG59KSk7XG5cbi8qKlxuICogVHlwZVNjcmlwdCB0eXBlcyByZXByZXNlbnRpbmcgZGF0YWJhc2Ugcm93c1xuICovXG5leHBvcnQgdHlwZSBNZXNzYWdlID0gdHlwZW9mIG1lc3NhZ2UuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgTWVzc2FnZUluc2VydCA9IHR5cGVvZiBtZXNzYWdlLiRpbmZlckluc2VydDtcblxuLyoqXG4gKiBIZWxwZXIgdHlwZXMgZm9yIHdvcmtpbmcgd2l0aCBwYXJ0aWFsIHVwZGF0ZXNcbiAqL1xuZXhwb3J0IHR5cGUgTWVzc2FnZVVwZGF0ZSA9IFBhcnRpYWw8T21pdDxNZXNzYWdlSW5zZXJ0LCAnaWQnIHwgJ2NyZWF0ZWRBdCcgfCAnY3JlYXRlZEJ5Jz4+O1xuIl19
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kYXRhYmFzZS9zY2hlbWEvbWVzc2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxhQUFhLEVBQTBDLE1BQU0sNEJBQTRCLENBQUM7QUFDbkcsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSXJHOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQUU7SUFDekMsY0FBYztJQUNkLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsYUFBYSxFQUFFO0lBRTNDLGtDQUFrQztJQUNsQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUN0QyxPQUFPLENBQUMsYUFBYSxDQUFDO1NBQ3RCLE9BQU8sRUFBRTtJQUVaLGVBQWU7SUFDZixTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUMxQixPQUFPLENBQUMsYUFBYSxDQUFDO1NBQ3RCLE9BQU8sRUFBRTtJQUNaLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ3ZELFVBQVUsRUFBRTtTQUNaLE9BQU8sRUFBRTtJQUNaLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQzFCLE9BQU8sQ0FBQyxhQUFhLENBQUM7U0FDdEIsT0FBTyxFQUFFO0lBQ1osU0FBUyxFQUFFLFNBQVMsQ0FB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eXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IFNZU1RFTV9PUkdfSUQsIHR5cGUgTWVzc2FnZVByaW9yaXR5LCB0eXBlIE1lc3NhZ2VUeXBlIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgc3FsIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgYm9vbGVhbiwgdmFyY2hhciwgcGdUYWJsZSwgdGV4dCwgdGltZXN0YW1wLCB1dWlkLCBqc29uYiwgaW5kZXggfSBmcm9tICdkcml6emxlLW9ybS9wZy1jb3JlJztcblxuZXhwb3J0IHR5cGUgeyBNZXNzYWdlVHlwZSwgTWVzc2FnZVByaW9yaXR5IH07XG5cbi8qKlxuICogVGFibGUgZm9yIHN0b3JpbmcgaW50ZXJuYWwgbWVzc2FnZXMgYmV0d2VlbiBvcmdhbml6YXRpb25zIGFuZCB0aGUgc3lzdGVtIG9yZy5cbiAqXG4gKiBGZWF0dXJlcyAqIC0gQW5ub3VuY2VtZW50czogU3lzdGVtIG9yZyBicm9hZGNhc3RzIHRvIGFsbCBvcmdzIChyZWNpcGllbnRPcmdJZCA9ICcqJylcbiAqIC0gQ29udmVyc2F0aW9uczogVHdvLXdheSB0aHJlYWRlZCBtZXNzYWdpbmcgYmV0d2VlbiBhbiBvcmcgYW5kIHN5c3RlbSBvcmdcbiAqIC0gVGhyZWFkIHN1cHBvcnQgdmlhIHRocmVhZElkIChudWxsIGZvciByb290IG1lc3NhZ2VzLCByZWZlcmVuY2VzIHJvb3QgZm9yIHJlcGxpZXMpXG4gKiAtIFJlYWQgdHJhY2tpbmcgcGVyIG1lc3NhZ2VcbiAqIC0gUHJpb3JpdHkgbGV2ZWxzIChub3JtYWwsIGhpZ2gsIHVyZ2VudClcbiAqIC0gU29mdCBkZWxldGUgc3VwcG9ydFxuICpcbiAqIEB0YWJsZSBtZXNzYWdlc1xuICovXG5leHBvcnQgY29uc3QgbWVzc2FnZSA9IHBnVGFibGUoJ21lc3NhZ2VzJywge1xuICAvLyBQcmltYXJ5IGtleVxuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuXG4gIC8vIE9yZ2FuaXphdGlvbiBhbmQgYWNjZXNzIGNvbnRyb2xcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSlcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gQXVkaXQgZmllbGRzXG4gIGNyZWF0ZWRCeTogdGV4dCgnY3JlYXRlZF9ieScpXG4gICAgLmRlZmF1bHQoU1lTVEVNX09SR19JRClcbiAgICAubm90TnVsbCgpLFxuICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCgnY3JlYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pXG4gICAgLmRlZmF1bHROb3coKVxuICAgIC5ub3ROdWxsKCksXG4gIHVwZGF0ZWRCeTogdGV4dCgndXBkYXRlZF9ieScpXG4gICAgLmRlZmF1bHQoU1lTVEVNX09SR19JRClcbiAgICAubm90TnVsbCgpLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pXG4gICAgLmRlZmF1bHROb3coKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gVGhyZWFkaW5nXG4gIHRocmVhZElkOiB1dWlkKCd0aHJlYWRfaWQnKSxcblxuICAvLyBNZXNzYWdlIHJvdXRpbmdcbiAgcmVjaXBpZW50T3JnSWQ6IHZhcmNoYXIoJ3JlY2lwaWVudF9vcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBPcHRpb25hbCBwZXItdXNlciB0YXJnZXRpbmcgV0lUSElOIHRoZSByZWNpcGllbnQgb3JnLiBOVUxMIChkZWZhdWx0KSA9IHRoZVxuICAvLyB3aG9sZSByZWNpcGllbnQgb3JnIHNlZXMgaXQg4oCUIHRoZSBvcmlnaW5hbCwgYmFja3dhcmQtY29tcGF0aWJsZSBiZWhhdmlvci5cbiAgLy8gV2hlbiBzZXQsIG9ubHkgdGhpcyB1c2VyIChhIG1lbWJlciBvZiBgcmVjaXBpZW50T3JnSWRgKSBzZWVzIGl0LCBlbmZvcmNlZCBpblxuICAvLyBgYnVpbGRNZXNzYWdlQ29uZGl0aW9uc2AgYWdhaW5zdCB0aGUgdmlld2VyJ3MgdXNlcklkLiBBbm5vdW5jZW1lbnQgYnJvYWRjYXN0c1xuICAvLyAoYHJlY2lwaWVudE9yZ0lkID0gJyonYCkgbmV2ZXIgc2V0IHRoaXMg4oCUIHRoZXkgYXJlIG9yZy13aWRlIGJ5IGRlZmluaXRpb24uXG4gIHJlY2lwaWVudFVzZXJJZDogdmFyY2hhcigncmVjaXBpZW50X3VzZXJfaWQnLCB7IGxlbmd0aDogMjU1IH0pLFxuXG4gIC8vIE1lc3NhZ2UgY29udGVudFxuICBtZXNzYWdlVHlwZTogdmFyY2hhcignbWVzc2FnZV90eXBlJywgeyBsZW5ndGg6IDIwIH0pXG4gICAgLiR0eXBlPE1lc3NhZ2VUeXBlPigpXG4gICAgLmRlZmF1bHQoJ2NvbnZlcnNhdGlvbicgYXMgTWVzc2FnZVR5cGUpXG4gICAgLm5vdE51bGwoKSxcbiAgLy8gTG9naWNhbCBjaGFubmVsL2luYm94IGJ1Y2tldCDigJQgJ3N1cHBvcnQnLCAnaGVscCcsIGV0Yy4gTnVsbGFibGUgc29cbiAgLy8gb3JnLXRvLW9yZyBjb252ZXJzYXRpb25zICh3aGljaCBhcmVuJ3QgY2hhbm5lbC1zY29wZWQpIGNhbiBvbWl0IGl0LlxuICBjaGFubmVsOiB2YXJjaGFyKCdjaGFubmVsJywgeyBsZW5ndGg6IDUwIH0pLFxuICBzdWJqZWN0OiB2YXJjaGFyKCdzdWJqZWN0JywgeyBsZW5ndGg6IDUwMCB9KVxuICAgIC5ub3ROdWxsKCksXG4gIGNvbnRlbnQ6IHRleHQoJ2NvbnRlbnQnKVxuICAgIC5ub3ROdWxsKCksXG4gIC8vIFNldCB3aGVuIHRoZSBhdXRob3IgZWRpdHMgdGhlIGNvbnRlbnQgYWZ0ZXIgc2VuZGluZyAoTlVMTCA9IG5ldmVyIGVkaXRlZCkuXG4gIC8vIERpc3RpbmN0IGZyb20gYHVwZGF0ZWRBdGAsIHdoaWNoIGFsc28gbW92ZXMgb24gcmVhZC1yZWNlaXB0L3N5c3RlbSB1cGRhdGVzO1xuICAvLyBgZWRpdGVkQXRgIG1hcmtzIGEgaHVtYW4gQ09OVEVOVCBlZGl0IHNvIHRoZSBVSSBjYW4gc2hvdyBhbiBcImVkaXRlZFwiIGhpbnQuXG4gIGVkaXRlZEF0OiB0aW1lc3RhbXAoJ2VkaXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuXG4gIC8vIFN0YXR1c1xuICAvLyBgcmVhZEJ5YCBpcyB0aGUgcGVyLXBhcnRpY2lwYW50IHJlYWQtcmVjZWlwdCBtYXA6IG9yZ0lkIOKGkiBJU08gdGltZXN0YW1wLlxuICAvLyBSZWNpcGllbnQgbWFya2luZyB0aGUgdGhyZWFkIGRvZXMgTk9UIGZsaXAgc2VuZGVyJ3Mgdmlldy4gRW1wdHkgYHt9YFxuICAvLyBtZWFucyBub2JvZHkgaGFzIHJlYWQgaXQgeWV0LlxuICByZWFkQnk6IGpzb25iKCdyZWFkX2J5JylcbiAgICAuJHR5cGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKVxuICAgIC5kZWZhdWx0KHt9KVxuICAgIC5ub3ROdWxsKCksXG4gIHByaW9yaXR5OiB2YXJjaGFyKCdwcmlvcml0eScsIHsgbGVuZ3RoOiAyMCB9KVxuICAgIC4kdHlwZTxNZXNzYWdlUHJpb3JpdHk+KClcbiAgICAuZGVmYXVsdCgnbm9ybWFsJyBhcyBNZXNzYWdlUHJpb3JpdHkpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBOT1RFOiBtZXNzYWdlcyBjYXJyeSBOTyBzaGFyaW5nIHJ1bmcuIFRoZWlyIHZpc2liaWxpdHkgaXMgdGhlIGJlc3Bva2VcbiAgLy8gc2VuZGVyL3JlY2lwaWVudC9icm9hZGNhc3QgcHJlZGljYXRlIGluIGBidWlsZE1lc3NhZ2VDb25kaXRpb25zYCAocGx1cyB0aGVcbiAgLy8gcGVyLXVzZXIgYHJlY2lwaWVudF91c2VyX2lkYCBuYXJyb3dpbmcpIOKAlCBhIGxhZGRlciB3b3VsZCBiZSBtZWFuaW5nbGVzcyBhbmRcbiAgLy8gdGhlIGBhY2Nlc3NfbW9kaWZpZXJgIGNvbHVtbiB0aGlzIHJlcGxhY2VkIHdhcyB3cml0dGVuIGFzIGEgaGFyZGNvZGVkXG4gIC8vICdwcml2YXRlJyBvbiBldmVyeSBwYXRoIGFuZCBuZXZlciByZWFkLlxuICBpc0RlZmF1bHQ6IGJvb2xlYW4oJ2lzX2RlZmF1bHQnKVxuICAgIC5kZWZhdWx0KGZhbHNlKVxuICAgIC5ub3ROdWxsKCksXG4gIGlzQWN0aXZlOiBib29sZWFuKCdpc19hY3RpdmUnKVxuICAgIC5kZWZhdWx0KHRydWUpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBEZWxldGlvbiB0cmFja2luZyAoc29mdCBkZWxldGUpXG4gIGRlbGV0ZWRBdDogdGltZXN0YW1wKCdkZWxldGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGRlbGV0ZWRCeTogdGV4dCgnZGVsZXRlZF9ieScpLFxuICAvLyBTb2Z0LWRlbGV0ZSBwdXJnZSBkZWFkbGluZTogdGhlIHJldGVudGlvbiBzd2VlcCBoYXJkLWRlbGV0ZXMgdG9tYnN0b25lZFxuICAvLyByb3dzIG9uY2UgYHB1cmdlX2FmdGVyYCBoYXMgcGFzc2VkIChzZXQgb24gZGVsZXRlIGFsb25nc2lkZSBkZWxldGVkX2F0KS5cbiAgcHVyZ2VBZnRlcjogdGltZXN0YW1wKCdwdXJnZV9hZnRlcicsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxufSwgKHRhYmxlKSA9PiAoe1xuICAvLyBQYXJ0aWFsIGluZGV4IG92ZXIganVzdCB0aGUgdG9tYnN0b25lcyDigJQgZHJpdmVzIHRoZSByZXRlbnRpb24gcHVyZ2Ugc3dlZXAuXG4gIHB1cmdlSWR4OiBpbmRleCgnbWVzc2FnZV9wdXJnZV9pZHgnKS5vbih0YWJsZS5wdXJnZUFmdGVyKS53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOT1QgTlVMTGApLFxuICAvLyBJbmRleGVzIGZvciBjb21tb24gcXVlcmllc1xuICBvcmdJZElkeDogaW5kZXgoJ21lc3NhZ2Vfb3JnX2lkX2lkeCcpLm9uKHRhYmxlLm9yZ0lkKSxcbiAgcmVjaXBpZW50T3JnSWRJZHg6IGluZGV4KCdtZXNzYWdlX3JlY2lwaWVudF9vcmdfaWRfaWR4Jykub24odGFibGUucmVjaXBpZW50T3JnSWQpLFxuICB0aHJlYWRJZElkeDogaW5kZXgoJ21lc3NhZ2VfdGhyZWFkX2lkX2lkeCcpLm9uKHRhYmxlLnRocmVhZElkKSxcbiAgbWVzc2FnZVR5cGVJZHg6IGluZGV4KCdtZXNzYWdlX21lc3NhZ2VfdHlwZV9pZHgnKS5vbih0YWJsZS5tZXNzYWdlVHlwZSksXG4gIGNoYW5uZWxJZHg6IGluZGV4KCdtZXNzYWdlX2NoYW5uZWxfaWR4Jykub24odGFibGUuY2hhbm5lbCksXG4gIGNyZWF0ZWRBdElkeDogaW5kZXgoJ21lc3NhZ2VfY3JlYXRlZF9hdF9pZHgnKS5vbih0YWJsZS5jcmVhdGVkQXQpLFxuICBhY3RpdmVJZHg6IGluZGV4KCdtZXNzYWdlX2FjdGl2ZV9pZHgnKS5vbih0YWJsZS5pc0FjdGl2ZSksXG5cbiAgLy8gQ29tcG9zaXRlIGluZGV4IGZvciBpbmJveCBxdWVyaWVzIChyZWNpcGllbnQgKyBhY3RpdmUgKyBjcmVhdGVkKVxuICByZWNpcGllbnRBY3RpdmVDcmVhdGVkSWR4OiBpbmRleCgnbWVzc2FnZV9yZWNpcGllbnRfYWN0aXZlX2NyZWF0ZWRfaWR4JylcbiAgICAub24odGFibGUucmVjaXBpZW50T3JnSWQsIHRhYmxlLmlzQWN0aXZlLCB0YWJsZS5jcmVhdGVkQXQpLFxuXG4gIC8vIENvbXBvc2l0ZSBpbmRleCBmb3IgcGVyLXVzZXIgdGFyZ2V0ZWQgaW5ib3ggbG9va3VwcyAocmVjaXBpZW50IG9yZyArIHVzZXIpLlxuICByZWNpcGllbnRVc2VySWR4OiBpbmRleCgnbWVzc2FnZV9yZWNpcGllbnRfdXNlcl9pZHgnKVxuICAgIC5vbih0YWJsZS5yZWNpcGllbnRPcmdJZCwgdGFibGUucmVjaXBpZW50VXNlcklkLCB0YWJsZS5pc0FjdGl2ZSksXG5cbiAgLy8gQ29tcG9zaXRlIGluZGV4IGZvciBvcmcgaW5ib3ggKG9yZ0lkICsgYWN0aXZlKVxuICBvcmdBY3RpdmVJZHg6IGluZGV4KCdtZXNzYWdlX29yZ19hY3RpdmVfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmlzQWN0aXZlKSxcbiAgLy8gR0lOIG92ZXIgdGhlIHBlci1wYXJ0aWNpcGFudCByZWFkIHJlY2VpcHRzIChgcmVhZF9ieSA/IDxvcmdJZD5gIHVucmVhZCBjb3VudHMpLlxuICByZWFkQnlJZHg6IGluZGV4KCdtZXNzYWdlX3JlYWRfYnlfaWR4JykudXNpbmcoJ2dpbicsIHRhYmxlLnJlYWRCeSksXG59KSk7XG5cbi8qKlxuICogVHlwZVNjcmlwdCB0eXBlcyByZXByZXNlbnRpbmcgZGF0YWJhc2Ugcm93c1xuICovXG5leHBvcnQgdHlwZSBNZXNzYWdlID0gdHlwZW9mIG1lc3NhZ2UuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgTWVzc2FnZUluc2VydCA9IHR5cGVvZiBtZXNzYWdlLiRpbmZlckluc2VydDtcblxuLyoqXG4gKiBIZWxwZXIgdHlwZXMgZm9yIHdvcmtpbmcgd2l0aCBwYXJ0aWFsIHVwZGF0ZXNcbiAqL1xuZXhwb3J0IHR5cGUgTWVzc2FnZVVwZGF0ZSA9IFBhcnRpYWw8T21pdDxNZXNzYWdlSW5zZXJ0LCAnaWQnIHwgJ2NyZWF0ZWRBdCcgfCAnY3JlYXRlZEJ5Jz4+O1xuIl19
|
|
@@ -1037,6 +1037,80 @@ export declare const pipelineEvent: import("drizzle-orm/pg-core").PgTableWithCol
|
|
|
1037
1037
|
identity: undefined;
|
|
1038
1038
|
generated: undefined;
|
|
1039
1039
|
}, {}, {}>;
|
|
1040
|
+
pluginPublisher: import("drizzle-orm/pg-core").PgColumn<{
|
|
1041
|
+
name: "plugin_publisher";
|
|
1042
|
+
tableName: "pipeline_events";
|
|
1043
|
+
dataType: "string";
|
|
1044
|
+
columnType: "PgVarchar";
|
|
1045
|
+
data: string;
|
|
1046
|
+
driverParam: string;
|
|
1047
|
+
notNull: false;
|
|
1048
|
+
hasDefault: false;
|
|
1049
|
+
isPrimaryKey: false;
|
|
1050
|
+
isAutoincrement: false;
|
|
1051
|
+
hasRuntimeDefault: false;
|
|
1052
|
+
enumValues: [string, ...string[]];
|
|
1053
|
+
baseColumn: never;
|
|
1054
|
+
identity: undefined;
|
|
1055
|
+
generated: undefined;
|
|
1056
|
+
}, {}, {
|
|
1057
|
+
length: 39;
|
|
1058
|
+
}>;
|
|
1059
|
+
pluginPublisherId: import("drizzle-orm/pg-core").PgColumn<{
|
|
1060
|
+
name: "plugin_publisher_id";
|
|
1061
|
+
tableName: "pipeline_events";
|
|
1062
|
+
dataType: "string";
|
|
1063
|
+
columnType: "PgUUID";
|
|
1064
|
+
data: string;
|
|
1065
|
+
driverParam: string;
|
|
1066
|
+
notNull: false;
|
|
1067
|
+
hasDefault: false;
|
|
1068
|
+
isPrimaryKey: false;
|
|
1069
|
+
isAutoincrement: false;
|
|
1070
|
+
hasRuntimeDefault: false;
|
|
1071
|
+
enumValues: undefined;
|
|
1072
|
+
baseColumn: never;
|
|
1073
|
+
identity: undefined;
|
|
1074
|
+
generated: undefined;
|
|
1075
|
+
}, {}, {}>;
|
|
1076
|
+
pluginName: import("drizzle-orm/pg-core").PgColumn<{
|
|
1077
|
+
name: "plugin_name";
|
|
1078
|
+
tableName: "pipeline_events";
|
|
1079
|
+
dataType: "string";
|
|
1080
|
+
columnType: "PgVarchar";
|
|
1081
|
+
data: string;
|
|
1082
|
+
driverParam: string;
|
|
1083
|
+
notNull: false;
|
|
1084
|
+
hasDefault: false;
|
|
1085
|
+
isPrimaryKey: false;
|
|
1086
|
+
isAutoincrement: false;
|
|
1087
|
+
hasRuntimeDefault: false;
|
|
1088
|
+
enumValues: [string, ...string[]];
|
|
1089
|
+
baseColumn: never;
|
|
1090
|
+
identity: undefined;
|
|
1091
|
+
generated: undefined;
|
|
1092
|
+
}, {}, {
|
|
1093
|
+
length: 255;
|
|
1094
|
+
}>;
|
|
1095
|
+
pluginVersion: import("drizzle-orm/pg-core").PgColumn<{
|
|
1096
|
+
name: "plugin_version";
|
|
1097
|
+
tableName: "pipeline_events";
|
|
1098
|
+
dataType: "string";
|
|
1099
|
+
columnType: "PgVarchar";
|
|
1100
|
+
data: string;
|
|
1101
|
+
driverParam: string;
|
|
1102
|
+
notNull: false;
|
|
1103
|
+
hasDefault: false;
|
|
1104
|
+
isPrimaryKey: false;
|
|
1105
|
+
isAutoincrement: false;
|
|
1106
|
+
hasRuntimeDefault: false;
|
|
1107
|
+
enumValues: [string, ...string[]];
|
|
1108
|
+
baseColumn: never;
|
|
1109
|
+
identity: undefined;
|
|
1110
|
+
generated: undefined;
|
|
1111
|
+
}, {}, {
|
|
1112
|
+
length: 50;
|
|
1113
|
+
}>;
|
|
1040
1114
|
detail: import("drizzle-orm/pg-core").PgColumn<{
|
|
1041
1115
|
name: "detail";
|
|
1042
1116
|
tableName: "pipeline_events";
|
|
@@ -1077,7 +1151,7 @@ export declare const pipelineEvent: import("drizzle-orm/pg-core").PgTableWithCol
|
|
|
1077
1151
|
dialect: 'pg';
|
|
1078
1152
|
}>;
|
|
1079
1153
|
/**
|
|
1080
|
-
* Manual post-deploy outcome markers
|
|
1154
|
+
* Manual post-deploy outcome markers. A user marks a deployment
|
|
1081
1155
|
* `failed` (production incident linked to a deploy) or `restored` (recovered).
|
|
1082
1156
|
* These feed the DORA post-deploy Change Failure Rate component and the real
|
|
1083
1157
|
* MTTR (restored − deployed). Correlated to a deploy execution by `executionId`.
|
|
@@ -1220,7 +1294,7 @@ export declare const deploymentOutcome: import("drizzle-orm/pg-core").PgTableWit
|
|
|
1220
1294
|
dialect: 'pg';
|
|
1221
1295
|
}>;
|
|
1222
1296
|
/**
|
|
1223
|
-
* Per-org ingestion health
|
|
1297
|
+
* Per-org ingestion health. The AWS events Lambda periodically posts
|
|
1224
1298
|
* forwarded/dropped counters + the last event timestamp so the Reports UI can
|
|
1225
1299
|
* show whether events are flowing / stale / dropping. One row per org.
|
|
1226
1300
|
*
|
|
@@ -1321,7 +1395,7 @@ export declare const ingestHealth: import("drizzle-orm/pg-core").PgTableWithColu
|
|
|
1321
1395
|
dialect: 'pg';
|
|
1322
1396
|
}>;
|
|
1323
1397
|
/**
|
|
1324
|
-
* Production incidents ingested from the org's incident tooling
|
|
1398
|
+
* Production incidents ingested from the org's incident tooling. The
|
|
1325
1399
|
* user points their Alertmanager / PagerDuty / Datadog webhook at
|
|
1326
1400
|
* `POST /api/reports/incidents` (machine `reporting:ingest` scope). Each incident
|
|
1327
1401
|
* carries its external id, the affected `environment`, when it opened, and when
|
|
@@ -1486,9 +1560,9 @@ export declare const incident: import("drizzle-orm/pg-core").PgTableWithColumns<
|
|
|
1486
1560
|
}>;
|
|
1487
1561
|
/**
|
|
1488
1562
|
* Per-org DORA computation + retention overrides. One row per org (org_id PK).
|
|
1489
|
-
* `incidentWindowHours`
|
|
1563
|
+
* `incidentWindowHours` overrides the global `DORA_INCIDENT_WINDOW_HOURS`
|
|
1490
1564
|
* used to correlate an ingested incident to the most recent successful deploy.
|
|
1491
|
-
* `eventRetentionDays` / `doraRetentionDays`
|
|
1565
|
+
* `eventRetentionDays` / `doraRetentionDays` override the global reporting
|
|
1492
1566
|
* retention windows for the split sweep — standard events (`environment IS NULL`)
|
|
1493
1567
|
* vs DORA source (deploy stages + `deployment_outcomes` + `incidents`). Any NULL /
|
|
1494
1568
|
* absent value falls back to its env default. Set self-serve by an org admin via
|
|
@@ -92,24 +92,24 @@ export const pipeline = pgTable('pipelines', {
|
|
|
92
92
|
// Partial index over just the tombstones — drives the retention purge sweep
|
|
93
93
|
// (`WHERE deleted_at IS NOT NULL AND purge_after < now`) without scanning live rows.
|
|
94
94
|
purgeIdx: index('pipeline_purge_idx').on(table.purgeAfter).where(sql `deleted_at IS NOT NULL`),
|
|
95
|
-
//
|
|
96
|
-
|
|
95
|
+
// Mirrors the indexes postgres-init.sql creates, name for name (the SQL file is
|
|
96
|
+
// what deploys; schema-reflection.test.ts keeps the two in lock-step).
|
|
97
|
+
orgIdIdx: index('idx_pipelines_org_id').on(table.orgId).where(sql `deleted_at IS NULL`),
|
|
98
|
+
projectIdx: index('idx_pipelines_project').on(table.project).where(sql `deleted_at IS NULL`),
|
|
99
|
+
organizationIdx: index('idx_pipelines_organization').on(table.organization).where(sql `deleted_at IS NULL`),
|
|
100
|
+
projectOrgIdx: index('idx_pipelines_project_org').on(table.project, table.organization).where(sql `deleted_at IS NULL`),
|
|
101
|
+
visibilityIdx: index('idx_pipelines_visibility').on(table.visibility).where(sql `deleted_at IS NULL`),
|
|
102
|
+
isDefaultIdx: index('idx_pipelines_is_default')
|
|
103
|
+
.on(table.project, table.organization, table.isDefault).where(sql `is_default = true AND deleted_at IS NULL`),
|
|
104
|
+
activeIdx: index('idx_pipelines_is_active').on(table.isActive).where(sql `deleted_at IS NULL`),
|
|
105
|
+
orgCreatedIdx: index('idx_pipelines_org_created').on(table.orgId, sql `${table.createdAt} DESC`).where(sql `deleted_at IS NULL`),
|
|
97
106
|
// Developer-portal catalog indexes: "my services" (owner) + lifecycle filter.
|
|
98
107
|
ownerIdx: index('pipeline_owner_idx').on(table.orgId, table.ownerId),
|
|
99
108
|
lifecycleIdx: index('pipeline_lifecycle_idx').on(table.orgId, table.lifecycle),
|
|
100
|
-
organizationIdx: index('pipeline_organization_idx').on(table.organization),
|
|
101
|
-
orgIdIdx: index('pipeline_org_id_idx').on(table.orgId),
|
|
102
|
-
activeIdx: index('pipeline_active_idx').on(table.isActive),
|
|
103
|
-
createdAtIdx: index('pipeline_created_at_idx').on(table.createdAt),
|
|
104
|
-
updatedAtIdx: index('pipeline_updated_at_idx').on(table.updatedAt),
|
|
105
|
-
// Composite index for common access pattern (orgId + isActive)
|
|
106
|
-
orgActiveIdx: index('pipeline_org_active_idx').on(table.orgId, table.isActive),
|
|
107
109
|
// Composite index for filtered queries (orgId + visibility + isActive)
|
|
108
110
|
orgVisibilityActiveIdx: index('pipeline_org_visibility_active_idx').on(table.orgId, table.visibility, table.isActive),
|
|
109
111
|
// Drives the "my private drafts" leg of the visibility predicate.
|
|
110
112
|
createdByIdx: index('pipeline_created_by_idx').on(table.orgId, table.createdBy),
|
|
111
|
-
// Partial index for active-only queries (smaller, faster than full index)
|
|
112
|
-
activeOnlyOrgIdx: index('pipeline_active_only_org_idx').on(table.orgId, table.createdAt).where(sql `is_active = true`),
|
|
113
113
|
// Unique constraint on project + organization + orgId
|
|
114
114
|
projectOrgUnique: uniqueIndex('pipeline_project_org_unique')
|
|
115
115
|
.on(table.project, table.organization, table.orgId),
|
|
@@ -143,6 +143,8 @@ export const pipelineRegistry = pgTable('pipeline_registry', {
|
|
|
143
143
|
}, (table) => ({
|
|
144
144
|
orgIdIdx: index('registry_org_id_idx').on(table.orgId),
|
|
145
145
|
orgRegionIdx: index('registry_org_region_idx').on(table.orgId, table.region),
|
|
146
|
+
// One registry row per pipeline (the registration upsert's conflict target).
|
|
147
|
+
pipelineIdUnique: uniqueIndex('registry_pipeline_id_idx').on(table.pipelineId),
|
|
146
148
|
}));
|
|
147
149
|
/**
|
|
148
150
|
* Pipeline execution and build events.
|
|
@@ -174,12 +176,22 @@ export const pipelineEvent = pgTable('pipeline_events', {
|
|
|
174
176
|
commitSha: varchar('commit_sha', { length: 255 }),
|
|
175
177
|
commitRef: varchar('commit_ref', { length: 255 }),
|
|
176
178
|
environment: varchar('environment', { length: 255 }),
|
|
177
|
-
// DORA true-lead-time attribution
|
|
179
|
+
// DORA true-lead-time attribution. The forwarder resolves the source
|
|
178
180
|
// commit range in-account and reports the OLDEST unshipped commit's timestamp
|
|
179
181
|
// + how many commits shipped. Both nullable — events whose source type/token
|
|
180
182
|
// can't be resolved leave them NULL and lead time reports `unknown`.
|
|
181
183
|
commitTimestamp: timestamp('commit_timestamp', { withTimezone: true }),
|
|
182
184
|
commitCount: integer('commit_count'),
|
|
185
|
+
// Per-plugin runtime telemetry: the plugin an ACTION/BUILD event ran,
|
|
186
|
+
// joined at ingest from `pipeline_step_manifests` on (pipeline_id,
|
|
187
|
+
// stage_name, action_name). `pluginPublisher` is NULL for an own-org plugin;
|
|
188
|
+
// all three are NULL for non-plugin actions and unrecorded synths.
|
|
189
|
+
pluginPublisher: varchar('plugin_publisher', { length: 39 }),
|
|
190
|
+
// The publisher's ID (a handle can change on a claim or profile change; the
|
|
191
|
+
// listing stats join on this, never on the handle). NULL like pluginPublisher.
|
|
192
|
+
pluginPublisherId: uuid('plugin_publisher_id'),
|
|
193
|
+
pluginName: varchar('plugin_name', { length: 255 }),
|
|
194
|
+
pluginVersion: varchar('plugin_version', { length: 50 }),
|
|
183
195
|
detail: jsonb('detail').$type(),
|
|
184
196
|
createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
|
|
185
197
|
}, (table) => ({
|
|
@@ -197,7 +209,7 @@ export const pipelineEvent = pgTable('pipeline_events', {
|
|
|
197
209
|
// Partial (execution_id IS NOT NULL) because that's the natural per-event
|
|
198
210
|
// key; events without an executionId (rare) aren't deduped, which is safe.
|
|
199
211
|
// Includes pipeline_id so a (theoretical) execution-id reuse across pipelines
|
|
200
|
-
// can't collide
|
|
212
|
+
// can't collide (the ARN is not part of the row).
|
|
201
213
|
//
|
|
202
214
|
// COALESCE the nullable parts to sentinels (expression index): PIPELINE/STAGE/
|
|
203
215
|
// BUILD events leave stage_name/action_name NULL (plugin-build also pipeline_id
|
|
@@ -205,7 +217,7 @@ export const pipelineEvent = pgTable('pipeline_events', {
|
|
|
205
217
|
// column index never matches for those types and onConflictDoNothing can't dedup
|
|
206
218
|
// their at-least-once re-deliveries. Collapsing NULL→'' makes equal events equal.
|
|
207
219
|
// (drizzle's uniqueIndex can't express NULLS NOT DISTINCT on a partial index, so
|
|
208
|
-
// we use the equivalent expression index.)
|
|
220
|
+
// we use the equivalent expression index.) Created by postgres-init.sql.
|
|
209
221
|
dedupIdx: uniqueIndex('event_dedup_idx')
|
|
210
222
|
.on(sql `coalesce(${table.pipelineId}::text, '')`, table.executionId, table.eventType, table.status, sql `coalesce(${table.stageName}, '')`, sql `coalesce(${table.actionName}, '')`)
|
|
211
223
|
.where(sql `execution_id IS NOT NULL`),
|
|
@@ -216,7 +228,7 @@ export const pipelineEvent = pgTable('pipeline_events', {
|
|
|
216
228
|
// Partial (environment IS NOT NULL) keeps it small — legacy/CI-only events
|
|
217
229
|
// aren't indexed. The default run-based DORA path (no environment) can't use
|
|
218
230
|
// this partial index; it relies on event_pipeline_type_started_idx below.
|
|
219
|
-
//
|
|
231
|
+
// Created by postgres-init.sql.
|
|
220
232
|
envTypeStartedIdx: index('event_env_type_started_idx')
|
|
221
233
|
.on(table.environment, table.eventType, table.startedAt)
|
|
222
234
|
.where(sql `environment IS NOT NULL`),
|
|
@@ -224,18 +236,27 @@ export const pipelineEvent = pgTable('pipeline_events', {
|
|
|
224
236
|
// DORA path filters `event_type='PIPELINE' AND started_at BETWEEN …` joined on
|
|
225
237
|
// pipeline_id, but the other event composite index is on created_at, not
|
|
226
238
|
// started_at — so the range scan had no ideal index. This composite serves the
|
|
227
|
-
// join-driven scan by pipeline_id.
|
|
239
|
+
// join-driven scan by pipeline_id. Created by postgres-init.sql.
|
|
228
240
|
pipelineTypeStartedIdx: index('event_pipeline_type_started_idx')
|
|
229
241
|
.on(table.pipelineId, table.eventType, table.startedAt),
|
|
230
|
-
// DORA deploy-basis scan
|
|
242
|
+
// DORA deploy-basis scan: deployment frequency / deploy-time CFR /
|
|
231
243
|
// lead time all group deploy-stage events by environment over a completed_at
|
|
232
244
|
// window. This composite serves that grouped org-scoped scan directly.
|
|
233
|
-
//
|
|
245
|
+
// Created by postgres-init.sql.
|
|
234
246
|
orgEnvCompletedIdx: index('event_org_env_completed_idx')
|
|
235
247
|
.on(table.orgId, table.environment, table.completedAt),
|
|
248
|
+
// Per-plugin runtime reporting (success rate / duration per plugin version).
|
|
249
|
+
// Partial: the bulk of non-plugin events is never indexed.
|
|
250
|
+
pluginIdx: index('event_plugin_idx')
|
|
251
|
+
.on(table.pluginPublisher, table.pluginName, table.pluginVersion, table.completedAt)
|
|
252
|
+
.where(sql `plugin_name IS NOT NULL`),
|
|
253
|
+
// Listing adoption / success rate (plugin stats sweep), keyed on the publisher id.
|
|
254
|
+
pluginPublisherIdIdx: index('event_plugin_publisher_id_idx')
|
|
255
|
+
.on(table.pluginPublisherId, table.pluginName, table.completedAt)
|
|
256
|
+
.where(sql `plugin_publisher_id IS NOT NULL`),
|
|
236
257
|
}));
|
|
237
258
|
/**
|
|
238
|
-
* Manual post-deploy outcome markers
|
|
259
|
+
* Manual post-deploy outcome markers. A user marks a deployment
|
|
239
260
|
* `failed` (production incident linked to a deploy) or `restored` (recovered).
|
|
240
261
|
* These feed the DORA post-deploy Change Failure Rate component and the real
|
|
241
262
|
* MTTR (restored − deployed). Correlated to a deploy execution by `executionId`.
|
|
@@ -260,7 +281,7 @@ export const deploymentOutcome = pgTable('deployment_outcomes', {
|
|
|
260
281
|
.on(table.executionId, table.outcome),
|
|
261
282
|
}));
|
|
262
283
|
/**
|
|
263
|
-
* Per-org ingestion health
|
|
284
|
+
* Per-org ingestion health. The AWS events Lambda periodically posts
|
|
264
285
|
* forwarded/dropped counters + the last event timestamp so the Reports UI can
|
|
265
286
|
* show whether events are flowing / stale / dropping. One row per org.
|
|
266
287
|
*
|
|
@@ -274,7 +295,7 @@ export const ingestHealth = pgTable('ingest_health', {
|
|
|
274
295
|
updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
|
|
275
296
|
});
|
|
276
297
|
/**
|
|
277
|
-
* Production incidents ingested from the org's incident tooling
|
|
298
|
+
* Production incidents ingested from the org's incident tooling. The
|
|
278
299
|
* user points their Alertmanager / PagerDuty / Datadog webhook at
|
|
279
300
|
* `POST /api/reports/incidents` (machine `reporting:ingest` scope). Each incident
|
|
280
301
|
* carries its external id, the affected `environment`, when it opened, and when
|
|
@@ -310,9 +331,9 @@ export const incident = pgTable('incidents', {
|
|
|
310
331
|
}));
|
|
311
332
|
/**
|
|
312
333
|
* Per-org DORA computation + retention overrides. One row per org (org_id PK).
|
|
313
|
-
* `incidentWindowHours`
|
|
334
|
+
* `incidentWindowHours` overrides the global `DORA_INCIDENT_WINDOW_HOURS`
|
|
314
335
|
* used to correlate an ingested incident to the most recent successful deploy.
|
|
315
|
-
* `eventRetentionDays` / `doraRetentionDays`
|
|
336
|
+
* `eventRetentionDays` / `doraRetentionDays` override the global reporting
|
|
316
337
|
* retention windows for the split sweep — standard events (`environment IS NULL`)
|
|
317
338
|
* vs DORA source (deploy stages + `deployment_outcomes` + `incidents`). Any NULL /
|
|
318
339
|
* absent value falls back to its env default. Set self-serve by an org admin via
|
|
@@ -323,10 +344,10 @@ export const incident = pgTable('incidents', {
|
|
|
323
344
|
export const doraSettings = pgTable('dora_settings', {
|
|
324
345
|
orgId: varchar('org_id', { length: 255 }).primaryKey(),
|
|
325
346
|
incidentWindowHours: integer('incident_window_hours'),
|
|
326
|
-
//
|
|
347
|
+
// Retention overrides (days). NULL ⇒ use the global env default
|
|
327
348
|
// (REPORTING_EVENT_RETENTION_DAYS / REPORTING_DORA_RETENTION_DAYS).
|
|
328
349
|
eventRetentionDays: integer('event_retention_days'),
|
|
329
350
|
doraRetentionDays: integer('dora_retention_days'),
|
|
330
351
|
updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
|
|
331
352
|
});
|
|
332
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YWJhc2Uvc2NoZW1hL3BpcGVsaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUNMLGFBQWEsR0FFZCxNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQTBCbkk7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFO0lBQzNDLGNBQWM7SUFDZCxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLGFBQWEsRUFBRTtJQUUzQyxrQ0FBa0M7SUFDbEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7U0FDdEMsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFFWixlQUFlO0lBQ2YsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDMUIsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUN2RCxVQUFVLEVBQUU7U0FDWixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUMxQixPQUFPLENBQUMsYUFBYSxDQUFDO1NBQ3RCLE9B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RSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDekcsK0VBQStFO0lBQy9FLHdEQUF3RDtJQUN4RCxpQkFBaUIsRUFBRSxXQUFXLENBQUMsK0JBQStCLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDO0NBQ2xHLENBQUMsQ0FBQyxDQUFDO0FBRUo7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLGVBQWUsRUFBRTtJQUNuRCxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRTtJQUN0RCxtQkFBbUIsRUFBRSxPQUFPLENBQUMsdUJBQXVCLENBQUM7SUFDckQsd0VBQXdFO0lBQ3hFLG9FQUFvRTtJQUNwRSxrQkFBa0IsRUFBRSxPQUFPLENBQUMsc0JBQXNCLENBQUM7SUFDbkQsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLHFCQUFxQixDQUFDO0lBQ2pELFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxFQUFFO0NBQ2xGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQge1xuICBTWVNURU1fT1JHX0lELCB0eXBlIENyaXRpY2FsaXR5LCB0eXBlIEVudGl0eUxhYmVscywgdHlwZSBFbnRpdHlMaW5rLCB0eXBlIExpZmVjeWNsZSwgdHlwZSBNZXRhRGF0YVR5cGUsXG4gIHR5cGUgT3duZXJUeXBlLCB0eXBlIFZpc2liaWxpdHksXG59IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IHNxbCB9IGZyb20gJ2RyaXp6bGUtb3JtJztcbmltcG9ydCB7IGJpZ2ludCwgYm9vbGVhbiwgaW50ZWdlciwgdmFyY2hhciwgcGdUYWJsZSwgdGV4dCwgdGltZXN0YW1wLCB1dWlkLCBqc29uYiwgaW5kZXgsIHVuaXF1ZUluZGV4IH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSc7XG5cbi8qKlxuICogUGlwZWxpbmUgYnVpbGRlciBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgc3RvcmVkIGluIGRhdGFiYXNlLlxuICogTWlycm9ycyB0aGUgY2Fub25pY2FsIEJ1aWxkZXJQcm9wcyBmcm9tIHBpcGVsaW5lLWNvcmUgKEpTT04tc2VyaWFsaXphYmxlIGZvcm0pLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lQnVpbGRlckNvbmZpZyB7XG4gIHJlYWRvbmx5IHByb2plY3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBpcGVsaW5lTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgZ2xvYmFsPzogTWV0YURhdGFUeXBlO1xuICByZWFkb25seSBzeW50aDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJlYWRvbmx5IGRlZmF1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJlYWRvbmx5IHJvbGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmVhZG9ubHkgc3RhZ2VzPzogUGlwZWxpbmVTdGFnZUNvbmZpZ1tdO1xufVxuXG4vKipcbiAqIFN0YWdlIGNvbmZpZ3VyYXRpb24gc3RvcmVkIGluIGRhdGFiYXNlIChKU09OLXNlcmlhbGl6YWJsZSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVTdGFnZUNvbmZpZyB7XG4gIHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBhbGlhcz86IHN0cmluZztcbiAgcmVhZG9ubHkgc3RlcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107XG59XG5cbi8qKlxuICogVGFibGUgZm9yIHN0b3JpbmcgcGlwZWxpbmUgaW5zdGFuY2VzIGFuZCB0aGVpciBmdWxsIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogRmVhdHVyZXMgKiAtIEZ1bGwgQnVpbGRlclByb3BzIHNlcmlhbGl6YXRpb24gZm9yIHJlY29uc3RydWN0aW9uXG4gKiAtIE9yZ2FuaXphdGlvbi1sZXZlbCBpc29sYXRpb25cbiAqIC0gUGlwZWxpbmUgc3RhdHVzIHRyYWNraW5nXG4gKiAtIEV4ZWN1dGlvbiBoaXN0b3J5IHRyYWNraW5nXG4gKiAtIEZsZXhpYmxlIHRhZ2dpbmcgc3lzdGVtXG4gKlxuICogQHRhYmxlIHBpcGVsaW5lc1xuICovXG5leHBvcnQgY29uc3QgcGlwZWxpbmUgPSBwZ1RhYmxlKCdwaXBlbGluZXMnLCB7XG4gIC8vIFByaW1hcnkga2V5XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG5cbiAgLy8gT3JnYW5pemF0aW9uIGFuZCBhY2Nlc3MgY29udHJvbFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KVxuICAgIC5kZWZhdWx0KFNZU1RFTV9PUkdfSUQpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBBdWRpdCBmaWVsZHNcbiAgY3JlYXRlZEJ5OiB0ZXh0KCdjcmVhdGVkX2J5JylcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSlcbiAgICAuZGVmYXVsdE5vdygpXG4gICAgLm5vdE51bGwoKSxcbiAgdXBkYXRlZEJ5OiB0ZXh0KCd1cGRhdGVkX2J5JylcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG4gIHVwZGF0ZWRBdDogdGltZXN0YW1wKCd1cGRhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSlcbiAgICAuZGVmYXVsdE5vdygpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBDb3JlIHBpcGVsaW5lIGluZm9ybWF0aW9uXG4gIHByb2plY3Q6IHZhcmNoYXIoJ3Byb2plY3QnLCB7IGxlbmd0aDogMjU1IH0pXG4gICAgLm5vdE51bGwoKSxcbiAgb3JnYW5pemF0aW9uOiB2YXJjaGFyKCdvcmdhbml6YXRpb24nLCB7IGxlbmd0aDogMjU1IH0pXG4gICAgLm5vdE51bGwoKSxcbiAgcGlwZWxpbmVOYW1lOiB2YXJjaGFyKCdwaXBlbGluZV9uYW1lJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgZGVzY3JpcHRpb246IHRleHQoJ2Rlc2NyaXB0aW9uJyksXG4gIGtleXdvcmRzOiBqc29uYigna2V5d29yZHMnKVxuICAgIC4kdHlwZTxzdHJpbmdbXT4oKVxuICAgIC5kZWZhdWx0KFtdKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gUGlwZWxpbmUgY29uZmlndXJhdGlvblxuICBwcm9wczoganNvbmIoJ3Byb3BzJylcbiAgICAuJHR5cGU8UGlwZWxpbmVCdWlsZGVyQ29uZmlnPigpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBEZXZlbG9wZXItcG9ydGFsIGNhdGFsb2cgbWV0YWRhdGEgKG93bmVyc2hpcCAvIGxpZmVjeWNsZSAvIGNsYXNzaWZpY2F0aW9uKS5cbiAgLy8gb3duZXJJZCBkZWZhdWx0cyB0byB0aGUgY3JlYXRpbmcgdXNlciAoc2V0IGF0IGluc2VydCksIHNvIGV2ZXJ5IHBpcGVsaW5lIGhhc1xuICAvLyBhbiBvd25lciBmb3IgXCJteSBzZXJ2aWNlc1wiIHZpZXdzOyBvd25lclR5cGUgZGlzdGluZ3Vpc2hlcyB1c2VyIHZzIHRlYW0uXG4gIG93bmVySWQ6IHRleHQoJ293bmVyX2lkJyksXG4gIG93bmVyVHlwZTogdmFyY2hhcignb3duZXJfdHlwZScsIHsgbGVuZ3RoOiAxMCB9KS4kdHlwZTxPd25lclR5cGU+KCksXG4gIGxpZmVjeWNsZTogdmFyY2hhcignbGlmZWN5Y2xlJywgeyBsZW5ndGg6IDIwIH0pXG4gICAgLiR0eXBlPExpZmVjeWNsZT4oKVxuICAgIC5kZWZhdWx0KCdwcm9kdWN0aW9uJyBhcyBMaWZlY3ljbGUpXG4gICAgLm5vdE51bGwoKSxcbiAgY3JpdGljYWxpdHk6IHZhcmNoYXIoJ2NyaXRpY2FsaXR5JywgeyBsZW5ndGg6IDEwIH0pLiR0eXBlPENyaXRpY2FsaXR5PigpLFxuICBsYWJlbHM6IGpzb25iKCdsYWJlbHMnKVxuICAgIC4kdHlwZTxFbnRpdHlMYWJlbHM+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuICBsaW5rczoganNvbmIoJ2xpbmtzJylcbiAgICAuJHR5cGU8RW50aXR5TGlua1tdPigpXG4gICAgLmRlZmF1bHQoW10pXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBBY2Nlc3MgYW5kIHZpc2liaWxpdHkg4oCUIHRoZSBzaGFyZWQgdGhyZWUtcnVuZyBsYWRkZXIgKHNlZSBhcGktY29yZSdzXG4gIC8vIGBWaXNpYmlsaXR5YCk6IGBwcml2YXRlYCBpcyBhdXRob3Itb25seSAoYGNyZWF0ZWRfYnlgKSwgYG9yZ2AgaXMgdGhlIHdob2xlXG4gIC8vIG93bmluZyBvcmcsIGBwdWJsaWNgIHJlYWNoZXMgdGhlIG9yZydzIHRlYW1zIGFuZCDigJQgZnJvbSB0aGUgc3lzdGVtIG9yZyDigJRcbiAgLy8gZXZlcnkgb3JnLiBDb25zdHJhaW5lZCBhdCB0aGUgU1FMIGxheWVyIHRvbyB2aWEgYSBDSEVDSyBpbiBwb3N0Z3Jlcy1pbml0LnNxbFxuICAvLyBzbyBhIHR5cG8gY2FuJ3Qgc25lYWsgcGFzdCB0aGUgYXBwbGljYXRpb24gbGF5ZXIuXG4gIHZpc2liaWxpdHk6IHZhcmNoYXIoJ3Zpc2liaWxpdHknLCB7IGxlbmd0aDogMTAgfSlcbiAgICAuJHR5cGU8VmlzaWJpbGl0eT4oKVxuICAgIC5kZWZhdWx0KCdwcml2YXRlJylcbiAgICAubm90TnVsbCgpLFxuICBpc0RlZmF1bHQ6IGJvb2xlYW4oJ2lzX2RlZmF1bHQnKVxuICAgIC5kZWZhdWx0KGZhbHNlKVxuICAgIC5ub3ROdWxsKCksXG4gIGlzQWN0aXZlOiBib29sZWFuKCdpc19hY3RpdmUnKVxuICAgIC5kZWZhdWx0KHRydWUpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBEZWxldGlvbiB0cmFja2luZyAoc29mdCBkZWxldGUpXG4gIGRlbGV0ZWRBdDogdGltZXN0YW1wKCdkZWxldGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGRlbGV0ZWRCeTogdGV4dCgnZGVsZXRlZF9ieScpLFxuICAvLyBTb2Z0LWRlbGV0ZSBwdXJnZSBkZWFkbGluZTogdGhlIHJldGVudGlvbiBzd2VlcCBoYXJkLWRlbGV0ZXMgdG9tYnN0b25lZFxuICAvLyByb3dzIG9uY2UgYHB1cmdlX2FmdGVyYCBoYXMgcGFzc2VkIChzZXQgb24gZGVsZXRlIGFsb25nc2lkZSBkZWxldGVkX2F0KS5cbiAgcHVyZ2VBZnRlcjogdGltZXN0YW1wKCdwdXJnZV9hZnRlcicsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxufSwgKHRhYmxlKSA9PiAoe1xuICAvLyBQYXJ0aWFsIGluZGV4IG92ZXIganVzdCB0aGUgdG9tYnN0b25lcyDigJQgZHJpdmVzIHRoZSByZXRlbnRpb24gcHVyZ2Ugc3dlZXBcbiAgLy8gKGBXSEVSRSBkZWxldGVkX2F0IElTIE5PVCBOVUxMIEFORCBwdXJnZV9hZnRlciA8IG5vd2ApIHdpdGhvdXQgc2Nhbm5pbmcgbGl2ZSByb3dzLlxuICBwdXJnZUlkeDogaW5kZXgoJ3BpcGVsaW5lX3B1cmdlX2lkeCcpLm9uKHRhYmxlLnB1cmdlQWZ0ZXIpLndoZXJlKHNxbGBkZWxldGVkX2F0IElTIE5PVCBOVUxMYCksXG4gIC8vIEluZGV4ZXMgZm9yIGNvbW1vbiBxdWVyaWVzXG4gIHByb2plY3RJZHg6IGluZGV4KCdwaXBlbGluZV9wcm9qZWN0X2lkeCcpLm9uKHRhYmxlLnByb2plY3QpLFxuICAvLyBEZXZlbG9wZXItcG9ydGFsIGNhdGFsb2cgaW5kZXhlczogXCJteSBzZXJ2aWNlc1wiIChvd25lcikgKyBsaWZlY3ljbGUgZmlsdGVyLlxuICBvd25lcklkeDogaW5kZXgoJ3BpcGVsaW5lX293bmVyX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5vd25lcklkKSxcbiAgbGlmZWN5Y2xlSWR4OiBpbmRleCgncGlwZWxpbmVfbGlmZWN5Y2xlX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5saWZlY3ljbGUpLFxuICBvcmdhbml6YXRpb25JZHg6IGluZGV4KCdwaXBlbGluZV9vcmdhbml6YXRpb25faWR4Jykub24odGFibGUub3JnYW5pemF0aW9uKSxcbiAgb3JnSWRJZHg6IGluZGV4KCdwaXBlbGluZV9vcmdfaWRfaWR4Jykub24odGFibGUub3JnSWQpLFxuICBhY3RpdmVJZHg6IGluZGV4KCdwaXBlbGluZV9hY3RpdmVfaWR4Jykub24odGFibGUuaXNBY3RpdmUpLFxuICBjcmVhdGVkQXRJZHg6IGluZGV4KCdwaXBlbGluZV9jcmVhdGVkX2F0X2lkeCcpLm9uKHRhYmxlLmNyZWF0ZWRBdCksXG4gIHVwZGF0ZWRBdElkeDogaW5kZXgoJ3BpcGVsaW5lX3VwZGF0ZWRfYXRfaWR4Jykub24odGFibGUudXBkYXRlZEF0KSxcblxuICAvLyBDb21wb3NpdGUgaW5kZXggZm9yIGNvbW1vbiBhY2Nlc3MgcGF0dGVybiAob3JnSWQgKyBpc0FjdGl2ZSlcbiAgb3JnQWN0aXZlSWR4OiBpbmRleCgncGlwZWxpbmVfb3JnX2FjdGl2ZV9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUuaXNBY3RpdmUpLFxuXG4gIC8vIENvbXBvc2l0ZSBpbmRleCBmb3IgZmlsdGVyZWQgcXVlcmllcyAob3JnSWQgKyB2aXNpYmlsaXR5ICsgaXNBY3RpdmUpXG4gIG9yZ1Zpc2liaWxpdHlBY3RpdmVJZHg6IGluZGV4KCdwaXBlbGluZV9vcmdfdmlzaWJpbGl0eV9hY3RpdmVfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLnZpc2liaWxpdHksIHRhYmxlLmlzQWN0aXZlKSxcbiAgLy8gRHJpdmVzIHRoZSBcIm15IHByaXZhdGUgZHJhZnRzXCIgbGVnIG9mIHRoZSB2aXNpYmlsaXR5IHByZWRpY2F0ZS5cbiAgY3JlYXRlZEJ5SWR4OiBpbmRleCgncGlwZWxpbmVfY3JlYXRlZF9ieV9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUuY3JlYXRlZEJ5KSxcblxuICAvLyBQYXJ0aWFsIGluZGV4IGZvciBhY3RpdmUtb25seSBxdWVyaWVzIChzbWFsbGVyLCBmYXN0ZXIgdGhhbiBmdWxsIGluZGV4KVxuICBhY3RpdmVPbmx5T3JnSWR4OiBpbmRleCgncGlwZWxpbmVfYWN0aXZlX29ubHlfb3JnX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5jcmVhdGVkQXQpLndoZXJlKHNxbGBpc19hY3RpdmUgPSB0cnVlYCksXG5cbiAgLy8gVW5pcXVlIGNvbnN0cmFpbnQgb24gcHJvamVjdCArIG9yZ2FuaXphdGlvbiArIG9yZ0lkXG4gIHByb2plY3RPcmdVbmlxdWU6IHVuaXF1ZUluZGV4KCdwaXBlbGluZV9wcm9qZWN0X29yZ191bmlxdWUnKVxuICAgIC5vbih0YWJsZS5wcm9qZWN0LCB0YWJsZS5vcmdhbml6YXRpb24sIHRhYmxlLm9yZ0lkKSxcbn0pKTtcblxuLyoqXG4gKiBQaXBlbGluZSBkZXBsb3ltZW50IHJlZ2lzdHJ5LlxuICogTWFwcyBkZXBsb3llZCBDb2RlUGlwZWxpbmUgQVJOcyBiYWNrIHRvIHBpcGVsaW5lIHJlY29yZHMgYW5kIG9yZyBJRHMuXG4gKiBQb3B1bGF0ZWQgYnkgdGhlIGRlcGxveSBjb21tYW5kIGFmdGVyIHN1Y2Nlc3NmdWwgQ0RLIGRlcGxveS5cbiAqIFVzZWQgYnkgdGhlIHBpcGVsaW5lLWV2ZW50cyBMYW1iZGEgdG8gcmVzb2x2ZSBFdmVudEJyaWRnZSBldmVudHMgdG8gb3JnLXNjb3BlZCByZWNvcmRzLlxuICpcbiAqIEB0YWJsZSBwaXBlbGluZV9yZWdpc3RyeVxuICovXG5leHBvcnQgY29uc3QgcGlwZWxpbmVSZWdpc3RyeSA9IHBnVGFibGUoJ3BpcGVsaW5lX3JlZ2lzdHJ5Jywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICAvLyBUaGUgcGxhdGZvcm0ncyBwaXBlbGluZSByZWNvcmQgaWQg4oCUIGEgU1RBQkxFIHV1aWQgY3JlYXRlZCB3aXRoIHRoZSBwaXBlbGluZVxuICAvLyByZWNvcmQsIGtub3duIGF0IENESyBzeW50aCwgYW5kIGFwcGxpZWQgdG8gdGhlIGxpdmUgQ29kZVBpcGVsaW5lIGFzIHRoZVxuICAvLyBgcGIucGlwZWxpbmUtaWRgIHRhZy4gVGhlIGV2ZW50cyBMYW1iZGEgcmVhZHMgdGhhdCB0YWcgYW5kIHJlcG9ydHNcbiAgLy8gYWdhaW5zdCB0aGlzIGlkLCBzbyBpdCBJUyB0aGUgZXZlbnQgam9pbiBrZXkgKHJlcGxhY2luZyB0aGUgbWFza2VkIEFSTiDigJRcbiAgLy8gaXQgY2FycmllcyBubyBBV1MgYWNjb3VudC9yZWdpb24sIHNvIG5vIG1hc2tpbmcgaXMgbmVlZGVkKS4gVW5pcXVlOiBvbmVcbiAgLy8gcmVnaXN0cnkgcm93IHBlciBwaXBlbGluZSArIHRoZSB1cHNlcnQga2V5IGZvciAocmUpcmVnaXN0cmF0aW9uLlxuICBwaXBlbGluZUlkOiB1dWlkKCdwaXBlbGluZV9pZCcpLm5vdE51bGwoKS51bmlxdWUoKSxcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICBwaXBlbGluZU5hbWU6IHZhcmNoYXIoJ3BpcGVsaW5lX25hbWUnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgcmVnaW9uOiB2YXJjaGFyKCdyZWdpb24nLCB7IGxlbmd0aDogMzAgfSksXG4gIHByb2plY3Q6IHZhcmNoYXIoJ3Byb2plY3QnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBvcmdhbml6YXRpb246IHZhcmNoYXIoJ29yZ2FuaXphdGlvbicsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIGxhc3REZXBsb3llZDogdGltZXN0YW1wKCdsYXN0X2RlcGxveWVkJywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIHN0YWNrTmFtZTogdmFyY2hhcignc3RhY2tfbmFtZScsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbiAgdXBkYXRlZEF0OiB0aW1lc3RhbXAoJ3VwZGF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSwgKHRhYmxlKSA9PiAoe1xuICBvcmdJZElkeDogaW5kZXgoJ3JlZ2lzdHJ5X29yZ19pZF9pZHgnKS5vbih0YWJsZS5vcmdJZCksXG4gIG9yZ1JlZ2lvbklkeDogaW5kZXgoJ3JlZ2lzdHJ5X29yZ19yZWdpb25faWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLnJlZ2lvbiksXG59KSk7XG5cbi8qKlxuICogRXZlbnQgc291cmNlIGlkZW50aWZpZXJzIGZvciBwaXBlbGluZV9ldmVudHMuXG4gKi9cbmV4cG9ydCB0eXBlIEV2ZW50U291cmNlID0gJ2NvZGVwaXBlbGluZScgfCAnY29kZWJ1aWxkJyB8ICdwbHVnaW4tYnVpbGQnO1xuXG4vKipcbiAqIEV2ZW50IHR5cGUgZ3JhbnVsYXJpdHkgbGV2ZWxzIGZvciBwaXBlbGluZV9ldmVudHMuXG4gKi9cbmV4cG9ydCB0eXBlIEV2ZW50VHlwZSA9ICdQSVBFTElORScgfCAnU1RBR0UnIHwgJ0FDVElPTicgfCAnQlVJTEQnO1xuXG4vKipcbiAqIFBpcGVsaW5lIGV4ZWN1dGlvbiBhbmQgYnVpbGQgZXZlbnRzLlxuICogQ2FwdHVyZXMgQ29kZVBpcGVsaW5lL0NvZGVCdWlsZCBzdGF0ZSBjaGFuZ2VzIGZyb20gRXZlbnRCcmlkZ2VcbiAqIGFuZCBwbHVnaW4gRG9ja2VyIGJ1aWxkIG91dGNvbWVzIGZyb20gQnVsbE1RLlxuICogQWxsIGV2ZW50cyBhcmUgb3JnLXNjb3BlZCBmb3IgbXVsdGktdGVuYW50IHJlcG9ydGluZy5cbiAqXG4gKiBAdGFibGUgcGlwZWxpbmVfZXZlbnRzXG4gKi9cbmV4cG9ydCBjb25zdCBwaXBlbGluZUV2ZW50ID0gcGdUYWJsZSgncGlwZWxpbmVfZXZlbnRzJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICBwaXBlbGluZUlkOiB1dWlkKCdwaXBlbGluZV9pZCcpLFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIGV2ZW50U291cmNlOiB2YXJjaGFyKCdldmVudF9zb3VyY2UnLCB7IGxlbmd0aDogNTAgfSkuJHR5cGU8RXZlbnRTb3VyY2U+KCkubm90TnVsbCgpLFxuICBldmVudFR5cGU6IHZhcmNoYXIoJ2V2ZW50X3R5cGUnLCB7IGxlbmd0aDogNTAgfSkuJHR5cGU8RXZlbnRUeXBlPigpLm5vdE51bGwoKSxcbiAgc3RhdHVzOiB2YXJjaGFyKCdzdGF0dXMnLCB7IGxlbmd0aDogMjAgfSkubm90TnVsbCgpLFxuICBleGVjdXRpb25JZDogdmFyY2hhcignZXhlY3V0aW9uX2lkJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgc3RhZ2VOYW1lOiB2YXJjaGFyKCdzdGFnZV9uYW1lJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgYWN0aW9uTmFtZTogdmFyY2hhcignYWN0aW9uX25hbWUnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBlcnJvck1lc3NhZ2U6IHRleHQoJ2Vycm9yX21lc3NhZ2UnKSxcbiAgc3RhcnRlZEF0OiB0aW1lc3RhbXAoJ3N0YXJ0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgY29tcGxldGVkQXQ6IHRpbWVzdGFtcCgnY29tcGxldGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGR1cmF0aW9uTXM6IGludGVnZXIoJ2R1cmF0aW9uX21zJyksXG4gIC8vIERPUkEgZGVwbG95LWF0dHJpYnV0aW9uIChhbGwgbnVsbGFibGU7IHBvcHVsYXRlZCBhdCBpbmdlc3Qgd2hlbiB0aGUgc291cmNlXG4gIC8vIGV2ZW50IGNhcnJpZXMgdGhlbSDigJQgbGVnYWN5L0NJLW9ubHkgZXZlbnRzIGxlYXZlIHRoZW0gTlVMTCkuIGBlbnZpcm9ubWVudGBcbiAgLy8gaXMgdGhlIGRlcGxveSB0YXJnZXQgKGUuZy4gXCJwcm9kdWN0aW9uXCIpOyBpdHMgcHJlc2VuY2UgbWFya3MgYW4gZXhlY3V0aW9uXG4gIC8vIGFzIGEgcmVhbCBkZXBsb3ltZW50LCBsZXR0aW5nIERPUkEgc2NvcGUgcGFzdCBnZW5lcmljIHBpcGVsaW5lIHJ1bnMuXG4gIC8vIGBjb21taXRTaGFgL2Bjb21taXRSZWZgIGNhcHR1cmUgdGhlIHNvdXJjZSByZXZpc2lvbiBmb3IgbGVhZC10aW1lIHdvcmsuXG4gIGNvbW1pdFNoYTogdmFyY2hhcignY29tbWl0X3NoYScsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIGNvbW1pdFJlZjogdmFyY2hhcignY29tbWl0X3JlZicsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIGVudmlyb25tZW50OiB2YXJjaGFyKCdlbnZpcm9ubWVudCcsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIC8vIERPUkEgdHJ1ZS1sZWFkLXRpbWUgYXR0cmlidXRpb24gKFBoYXNlIDQpLiBUaGUgZm9yd2FyZGVyIHJlc29sdmVzIHRoZSBzb3VyY2VcbiAgLy8gY29tbWl0IHJhbmdlIGluLWFjY291bnQgYW5kIHJlcG9ydHMgdGhlIE9MREVTVCB1bnNoaXBwZWQgY29tbWl0J3MgdGltZXN0YW1wXG4gIC8vICsgaG93IG1hbnkgY29tbWl0cyBzaGlwcGVkLiBCb3RoIG51bGxhYmxlIOKAlCBldmVudHMgd2hvc2Ugc291cmNlIHR5cGUvdG9rZW5cbiAgLy8gY2FuJ3QgYmUgcmVzb2x2ZWQgbGVhdmUgdGhlbSBOVUxMIGFuZCBsZWFkIHRpbWUgcmVwb3J0cyBgdW5rbm93bmAuXG4gIGNvbW1pdFRpbWVzdGFtcDogdGltZXN0YW1wKCdjb21taXRfdGltZXN0YW1wJywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGNvbW1pdENvdW50OiBpbnRlZ2VyKCdjb21taXRfY291bnQnKSxcbiAgZGV0YWlsOiBqc29uYignZGV0YWlsJykuJHR5cGU8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgcGlwZWxpbmVJZElkeDogaW5kZXgoJ2V2ZW50X3BpcGVsaW5lX2lkX2lkeCcpLm9uKHRhYmxlLnBpcGVsaW5lSWQpLFxuICBvcmdJZElkeDogaW5kZXgoJ2V2ZW50X29yZ19pZF9pZHgnKS5vbih0YWJsZS5vcmdJZCksXG4gIGV2ZW50VHlwZUlkeDogaW5kZXgoJ2V2ZW50X3R5cGVfaWR4Jykub24odGFibGUuZXZlbnRUeXBlKSxcbiAgc3RhdHVzSWR4OiBpbmRleCgnZXZlbnRfc3RhdHVzX2lkeCcpLm9uKHRhYmxlLnN0YXR1cyksXG4gIGV4ZWN1dGlvbklkSWR4OiBpbmRleCgnZXZlbnRfZXhlY3V0aW9uX2lkX2lkeCcpLm9uKHRhYmxlLmV4ZWN1dGlvbklkKSxcbiAgY3JlYXRlZEF0SWR4OiBpbmRleCgnZXZlbnRfY3JlYXRlZF9hdF9pZHgnKS5vbih0YWJsZS5jcmVhdGVkQXQpLFxuICBvcmdUeXBlQ3JlYXRlZElkeDogaW5kZXgoJ2V2ZW50X29yZ190eXBlX2NyZWF0ZWRfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmV2ZW50VHlwZSwgdGFibGUuY3JlYXRlZEF0KSxcbiAgb3JnU291cmNlU3RhdHVzSWR4OiBpbmRleCgnZXZlbnRfb3JnX3NvdXJjZV9zdGF0dXNfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmV2ZW50U291cmNlLCB0YWJsZS5zdGF0dXMpLFxuICAvLyBJZGVtcG90ZW5jeTogRXZlbnRCcmlkZ2Ug4oaSIFNRUyBpcyBhdC1sZWFzdC1vbmNlLCBzbyB0aGUgc2FtZSBzdGF0ZS1jaGFuZ2VcbiAgLy8gY2FuIGJlIGRlbGl2ZXJlZCB0d2ljZS4gVGhpcyBwYXJ0aWFsIHVuaXF1ZSBpbmRleCBkZWR1cHMgcmUtZGVsaXZlcmllc1xuICAvLyAocGFpcmVkIHdpdGggYG9uQ29uZmxpY3REb05vdGhpbmdgIGluIHJlcG9ydGluZy1zZXJ2aWNlLmluZ2VzdEV2ZW50cykuXG4gIC8vIFBhcnRpYWwgKGV4ZWN1dGlvbl9pZCBJUyBOT1QgTlVMTCkgYmVjYXVzZSB0aGF0J3MgdGhlIG5hdHVyYWwgcGVyLWV2ZW50XG4gIC8vIGtleTsgZXZlbnRzIHdpdGhvdXQgYW4gZXhlY3V0aW9uSWQgKHJhcmUpIGFyZW4ndCBkZWR1cGVkLCB3aGljaCBpcyBzYWZlLlxuICAvLyBJbmNsdWRlcyBwaXBlbGluZV9pZCBzbyBhICh0aGVvcmV0aWNhbCkgZXhlY3V0aW9uLWlkIHJldXNlIGFjcm9zcyBwaXBlbGluZXNcbiAgLy8gY2FuJ3QgY29sbGlkZSBub3cgdGhhdCB0aGUgQVJOIGlzIG5vIGxvbmdlciBwYXJ0IG9mIHRoZSByb3cuXG4gIC8vXG4gIC8vIENPQUxFU0NFIHRoZSBudWxsYWJsZSBwYXJ0cyB0byBzZW50aW5lbHMgKGV4cHJlc3Npb24gaW5kZXgpOiBQSVBFTElORS9TVEFHRS9cbiAgLy8gQlVJTEQgZXZlbnRzIGxlYXZlIHN0YWdlX25hbWUvYWN0aW9uX25hbWUgTlVMTCAocGx1Z2luLWJ1aWxkIGFsc28gcGlwZWxpbmVfaWRcbiAgLy8gTlVMTCksIGFuZCBQb3N0Z3JlcyB0cmVhdHMgTlVMTHMgYXMgRElTVElOQ1QgaW4gYSB1bmlxdWUgaW5kZXgg4oCUIHNvIHRoZSBwbGFpblxuICAvLyBjb2x1bW4gaW5kZXggbmV2ZXIgbWF0Y2hlcyBmb3IgdGhvc2UgdHlwZXMgYW5kIG9uQ29uZmxpY3REb05vdGhpbmcgY2FuJ3QgZGVkdXBcbiAgLy8gdGhlaXIgYXQtbGVhc3Qtb25jZSByZS1kZWxpdmVyaWVzLiBDb2xsYXBzaW5nIE5VTEzihpInJyBtYWtlcyBlcXVhbCBldmVudHMgZXF1YWwuXG4gIC8vIChkcml6emxlJ3MgdW5pcXVlSW5kZXggY2FuJ3QgZXhwcmVzcyBOVUxMUyBOT1QgRElTVElOQ1Qgb24gYSBwYXJ0aWFsIGluZGV4LCBzb1xuICAvLyB3ZSB1c2UgdGhlIGVxdWl2YWxlbnQgZXhwcmVzc2lvbiBpbmRleC4pIE1JR1JBVElPTiBSRVFVSVJFRDogZHJpenpsZS1raXQgZ2VuZXJhdGUuXG4gIGRlZHVwSWR4OiB1bmlxdWVJbmRleCgnZXZlbnRfZGVkdXBfaWR4JylcbiAgICAub24oXG4gICAgICBzcWxgY29hbGVzY2UoJHt0YWJsZS5waXBlbGluZUlkfTo6dGV4dCwgJycpYCxcbiAgICAgIHRhYmxlLmV4ZWN1dGlvbklkLFxuICAgICAgdGFibGUuZXZlbnRUeXBlLFxuICAgICAgdGFibGUuc3RhdHVzLFxuICAgICAgc3FsYGNvYWxlc2NlKCR7dGFibGUuc3RhZ2VOYW1lfSwgJycpYCxcbiAgICAgIHNxbGBjb2FsZXNjZSgke3RhYmxlLmFjdGlvbk5hbWV9LCAnJylgLFxuICAgIClcbiAgICAud2hlcmUoc3FsYGV4ZWN1dGlvbl9pZCBJUyBOT1QgTlVMTGApLFxuICAvLyBET1JBIGRlcGxveS1zY29wZWQgcmVhZHM6IG9ubHkgUElQRUxJTkUtbGV2ZWwgZXhlY3V0aW9ucyB0YWdnZWQgd2l0aCBhXG4gIC8vIGRlcGxveSBlbnZpcm9ubWVudC4gYGV2ZW50X3R5cGVgIGlzIGluIHRoZSBpbmRleCBiZWNhdXNlIHRoZSBldmVudHMgTGFtYmRhXG4gIC8vIHRhZ3MgRVZFUlkgZXZlbnQgb2YgYSBkZXBsb3llZCBwaXBlbGluZSAoU1RBR0UvQUNUSU9OIHRvbyksIHdoaWxlIHRoZSBET1JBXG4gIC8vIHNjYW4gd2FudHMgb25seSBgZXZlbnRfdHlwZT0nUElQRUxJTkUnYCDigJQgaW5jbHVkaW5nIGl0IHJlc3RvcmVzIHNlbGVjdGl2aXR5LlxuICAvLyBQYXJ0aWFsIChlbnZpcm9ubWVudCBJUyBOT1QgTlVMTCkga2VlcHMgaXQgc21hbGwg4oCUIGxlZ2FjeS9DSS1vbmx5IGV2ZW50c1xuICAvLyBhcmVuJ3QgaW5kZXhlZC4gVGhlIGRlZmF1bHQgcnVuLWJhc2VkIERPUkEgcGF0aCAobm8gZW52aXJvbm1lbnQpIGNhbid0IHVzZVxuICAvLyB0aGlzIHBhcnRpYWwgaW5kZXg7IGl0IHJlbGllcyBvbiBldmVudF9waXBlbGluZV90eXBlX3N0YXJ0ZWRfaWR4IGJlbG93LlxuICAvLyBNSUdSQVRJT04gUkVRVUlSRUQ6IGRyaXp6bGUta2l0IGdlbmVyYXRlLlxuICBlbnZUeXBlU3RhcnRlZElkeDogaW5kZXgoJ2V2ZW50X2Vudl90eXBlX3N0YXJ0ZWRfaWR4JylcbiAgICAub24odGFibGUuZW52aXJvbm1lbnQsIHRhYmxlLmV2ZW50VHlwZSwgdGFibGUuc3RhcnRlZEF0KVxuICAgIC53aGVyZShzcWxgZW52aXJvbm1lbnQgSVMgTk9UIE5VTExgKSxcbiAgLy8gc3RhcnRlZF9hdCByYW5nZSBzY2FuczogZXZlcnkgQ2F0ZWdvcnktMSByZXBvcnQgYW5kIHRoZSBkZWZhdWx0IHJ1bi1iYXNlZFxuICAvLyBET1JBIHBhdGggZmlsdGVycyBgZXZlbnRfdHlwZT0nUElQRUxJTkUnIEFORCBzdGFydGVkX2F0IEJFVFdFRU4g4oCmYCBqb2luZWQgb25cbiAgLy8gcGlwZWxpbmVfaWQsIGJ1dCB0aGUgb3RoZXIgZXZlbnQgY29tcG9zaXRlIGluZGV4IGlzIG9uIGNyZWF0ZWRfYXQsIG5vdFxuICAvLyBzdGFydGVkX2F0IOKAlCBzbyB0aGUgcmFuZ2Ugc2NhbiBoYWQgbm8gaWRlYWwgaW5kZXguIFRoaXMgY29tcG9zaXRlIHNlcnZlcyB0aGVcbiAgLy8gam9pbi1kcml2ZW4gc2NhbiBieSBwaXBlbGluZV9pZC4gTUlHUkFUSU9OIFJFUVVJUkVEOiBkcml6emxlLWtpdCBnZW5lcmF0ZS5cbiAgcGlwZWxpbmVUeXBlU3RhcnRlZElkeDogaW5kZXgoJ2V2ZW50X3BpcGVsaW5lX3R5cGVfc3RhcnRlZF9pZHgnKVxuICAgIC5vbih0YWJsZS5waXBlbGluZUlkLCB0YWJsZS5ldmVudFR5cGUsIHRhYmxlLnN0YXJ0ZWRBdCksXG4gIC8vIERPUkEgZGVwbG95LWJhc2lzIHNjYW4gKFBoYXNlIDEpOiBkZXBsb3ltZW50IGZyZXF1ZW5jeSAvIGRlcGxveS10aW1lIENGUiAvXG4gIC8vIGxlYWQgdGltZSBhbGwgZ3JvdXAgZGVwbG95LXN0YWdlIGV2ZW50cyBieSBlbnZpcm9ubWVudCBvdmVyIGEgY29tcGxldGVkX2F0XG4gIC8vIHdpbmRvdy4gVGhpcyBjb21wb3NpdGUgc2VydmVzIHRoYXQgZ3JvdXBlZCBvcmctc2NvcGVkIHNjYW4gZGlyZWN0bHkuXG4gIC8vIE1JR1JBVElPTiBSRVFVSVJFRDogZHJpenpsZS1raXQgZ2VuZXJhdGUuXG4gIG9yZ0VudkNvbXBsZXRlZElkeDogaW5kZXgoJ2V2ZW50X29yZ19lbnZfY29tcGxldGVkX2lkeCcpXG4gICAgLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5lbnZpcm9ubWVudCwgdGFibGUuY29tcGxldGVkQXQpLFxufSkpO1xuXG4vKipcbiAqIE1hbnVhbCBwb3N0LWRlcGxveSBvdXRjb21lIG1hcmtlcnMgKFBoYXNlIDIpLiBBIHVzZXIgbWFya3MgYSBkZXBsb3ltZW50XG4gKiBgZmFpbGVkYCAocHJvZHVjdGlvbiBpbmNpZGVudCBsaW5rZWQgdG8gYSBkZXBsb3kpIG9yIGByZXN0b3JlZGAgKHJlY292ZXJlZCkuXG4gKiBUaGVzZSBmZWVkIHRoZSBET1JBIHBvc3QtZGVwbG95IENoYW5nZSBGYWlsdXJlIFJhdGUgY29tcG9uZW50IGFuZCB0aGUgcmVhbFxuICogTVRUUiAocmVzdG9yZWQg4oiSIGRlcGxveWVkKS4gQ29ycmVsYXRlZCB0byBhIGRlcGxveSBleGVjdXRpb24gYnkgYGV4ZWN1dGlvbklkYC5cbiAqXG4gKiBAdGFibGUgZGVwbG95bWVudF9vdXRjb21lc1xuICovXG5leHBvcnQgY29uc3QgZGVwbG95bWVudE91dGNvbWUgPSBwZ1RhYmxlKCdkZXBsb3ltZW50X291dGNvbWVzJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICBleGVjdXRpb25JZDogdmFyY2hhcignZXhlY3V0aW9uX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgZW52aXJvbm1lbnQ6IHZhcmNoYXIoJ2Vudmlyb25tZW50JywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgb3V0Y29tZTogdmFyY2hhcignb3V0Y29tZScsIHsgbGVuZ3RoOiAyMCB9KS4kdHlwZTwnZmFpbGVkJyB8ICdyZXN0b3JlZCc+KCkubm90TnVsbCgpLFxuICBhdDogdGltZXN0YW1wKCdhdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLm5vdE51bGwoKSxcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSwgKHRhYmxlKSA9PiAoe1xuICBvcmdFbnZJZHg6IGluZGV4KCdkZXBsb3ltZW50X291dGNvbWVzX29yZ19lbnZfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmVudmlyb25tZW50KSxcbiAgZXhlY3V0aW9uSWR4OiBpbmRleCgnZGVwbG95bWVudF9vdXRjb21lc19leGVjdXRpb25faWR4Jykub24odGFibGUuZXhlY3V0aW9uSWQpLFxuICAvLyBJZGVtcG90ZW50IHJlLW1hcmtpbmc6IG9uZSByb3cgcGVyIChleGVjdXRpb24sIG91dGNvbWUpLiBSZS1wb3N0aW5nIHRoZSBzYW1lXG4gIC8vIG91dGNvbWUgZm9yIGEgZGVwbG95IGlzIGEgbm8tb3AvcmVmcmVzaCAob25Db25mbGljdERvVXBkYXRlIHRoZSBgYXRgKSwgc28gYVxuICAvLyBmYWlsZWTihpJyZXN0b3JlZCBwYWlyIGlzIHR3byByb3dzIHdoaWxlIGEgZHVwbGljYXRlIFBPU1QgZG9lc24ndCBkb3VibGUtY291bnQuXG4gIGV4ZWN1dGlvbk91dGNvbWVVbmlxdWU6IHVuaXF1ZUluZGV4KCdkZXBsb3ltZW50X291dGNvbWVzX2V4ZWN1dGlvbl9vdXRjb21lX3VuaXF1ZScpXG4gICAgLm9uKHRhYmxlLmV4ZWN1dGlvbklkLCB0YWJsZS5vdXRjb21lKSxcbn0pKTtcblxuLyoqXG4gKiBQZXItb3JnIGluZ2VzdGlvbiBoZWFsdGggKFBoYXNlIDMpLiBUaGUgQVdTIGV2ZW50cyBMYW1iZGEgcGVyaW9kaWNhbGx5IHBvc3RzXG4gKiBmb3J3YXJkZWQvZHJvcHBlZCBjb3VudGVycyArIHRoZSBsYXN0IGV2ZW50IHRpbWVzdGFtcCBzbyB0aGUgUmVwb3J0cyBVSSBjYW5cbiAqIHNob3cgd2hldGhlciBldmVudHMgYXJlIGZsb3dpbmcgLyBzdGFsZSAvIGRyb3BwaW5nLiBPbmUgcm93IHBlciBvcmcuXG4gKlxuICogQHRhYmxlIGluZ2VzdF9oZWFsdGhcbiAqL1xuZXhwb3J0IGNvbnN0IGluZ2VzdEhlYWx0aCA9IHBnVGFibGUoJ2luZ2VzdF9oZWFsdGgnLCB7XG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLnByaW1hcnlLZXkoKSxcbiAgbGFzdEV2ZW50QXQ6IHRpbWVzdGFtcCgnbGFzdF9ldmVudF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBmb3J3YXJkZWQ6IGJpZ2ludCgnZm9yd2FyZGVkJywgeyBtb2RlOiAnbnVtYmVyJyB9KSxcbiAgZHJvcHBlZDogYmlnaW50KCdkcm9wcGVkJywgeyBtb2RlOiAnbnVtYmVyJyB9KSxcbiAgdXBkYXRlZEF0OiB0aW1lc3RhbXAoJ3VwZGF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSk7XG5cbi8qKlxuICogUHJvZHVjdGlvbiBpbmNpZGVudHMgaW5nZXN0ZWQgZnJvbSB0aGUgb3JnJ3MgaW5jaWRlbnQgdG9vbGluZyAoUGhhc2UgNSkuIFRoZVxuICogdXNlciBwb2ludHMgdGhlaXIgQWxlcnRtYW5hZ2VyIC8gUGFnZXJEdXR5IC8gRGF0YWRvZyB3ZWJob29rIGF0XG4gKiBgUE9TVCAvYXBpL3JlcG9ydHMvaW5jaWRlbnRzYCAobWFjaGluZSBgcmVwb3J0aW5nOmluZ2VzdGAgc2NvcGUpLiBFYWNoIGluY2lkZW50XG4gKiBjYXJyaWVzIGl0cyBleHRlcm5hbCBpZCwgdGhlIGFmZmVjdGVkIGBlbnZpcm9ubWVudGAsIHdoZW4gaXQgb3BlbmVkLCBhbmQgd2hlblxuICogaXQgd2FzIHJlc29sdmVkIChudWxsYWJsZSDigJQgYSBsYXRlciByZXNvbHZlIHVwZGF0ZXMgaXQpLiBET1JBIGNvcnJlbGF0ZXMgZWFjaFxuICogaW5jaWRlbnQgdG8gdGhlIG1vc3QgcmVjZW50IHN1Y2Nlc3NmdWwgZGVwbG95IHRvIGBlbnZpcm9ubWVudGAgd2l0aGluXG4gKiBgRE9SQV9JTkNJREVOVF9XSU5ET1dfSE9VUlNgLCB0dXJuaW5nIGl0IGludG8gYW4gYXV0b21hdGVkIHBvc3QtZGVwbG95IGZhaWx1cmVcbiAqIChDaGFuZ2UgRmFpbHVyZSBSYXRlKSBhbmQgYSByZWFsIHJlY292ZXJ5IHRpbWUgKGByZXNvbHZlZF9hdCDiiJIgb3BlbmVkX2F0YCBNVFRSKS5cbiAqIGBpbmNpZGVudF9pZGAgaXMgVU5JUVVFIHBlciBvcmcgc28gYSByZXNvbHZlIHJlLXBvc3QgaXMgYW4gaWRlbXBvdGVudCB1cHNlcnQuXG4gKlxuICogQHRhYmxlIGluY2lkZW50c1xuICovXG5leHBvcnQgY29uc3QgaW5jaWRlbnQgPSBwZ1RhYmxlKCdpbmNpZGVudHMnLCB7XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG4gIC8vIEV4dGVybmFsIGluY2lkZW50IGlkIGZyb20gdGhlIHNvdXJjZSBzeXN0ZW0gKFBhZ2VyRHV0eS9EYXRhZG9nL0FsZXJ0bWFuYWdlcikuXG4gIC8vIFVuaXF1ZSBQRVIgT1JHIChzZWUgaW5jaWRlbnRPcmdVbmlxdWUpIOKAlCB0aGUgaWRlbXBvdGVuY3kgKyB1cHNlcnQga2V5LlxuICBpbmNpZGVudElkOiB2YXJjaGFyKCdpbmNpZGVudF9pZCcsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIC8vIEFmZmVjdGVkIGRlcGxveSBlbnZpcm9ubWVudCAoZS5nLiBcInByb2R1Y3Rpb25cIikuIENvcnJlbGF0ZWQgdG8gYSBkZXBsb3kgZW52LlxuICBlbnZpcm9ubWVudDogdmFyY2hhcignZW52aXJvbm1lbnQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgb3BlbmVkQXQ6IHRpbWVzdGFtcCgnb3BlbmVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkubm90TnVsbCgpLFxuICAvLyBOVUxMIHdoaWxlIHRoZSBpbmNpZGVudCBpcyBvcGVuOyBhIGxhdGVyIHJlc29sdmUgd2ViaG9vayBzZXRzIGl0IChpZGVtcG90ZW50XG4gIC8vIHVwc2VydCkuIGByZXNvbHZlZF9hdCDiiJIgb3BlbmVkX2F0YCBpcyB0aGUgcmVhbCBNVFRSIGZvciB0aGUgY29ycmVsYXRlZCBkZXBsb3kuXG4gIHJlc29sdmVkQXQ6IHRpbWVzdGFtcCgncmVzb2x2ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgc2V2ZXJpdHk6IHZhcmNoYXIoJ3NldmVyaXR5JywgeyBsZW5ndGg6IDUwIH0pLm5vdE51bGwoKSxcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSwgKHRhYmxlKSA9PiAoe1xuICAvLyBDb3JyZWxhdGlvbiBzY2FuOiBtb3N0LXJlY2VudC1kZXBsb3ktYmVmb3JlLW9wZW4gbG9va3VwcyBncm91cCBieSAob3JnLCBlbnYpXG4gIC8vIGFuZCByYW5nZSBvbiBvcGVuZWRfYXQuXG4gIG9yZ0Vudk9wZW5lZElkeDogaW5kZXgoJ2luY2lkZW50c19vcmdfZW52X29wZW5lZF9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUuZW52aXJvbm1lbnQsIHRhYmxlLm9wZW5lZEF0KSxcbiAgLy8gSWRlbXBvdGVudCB1cHNlcnQgLyBkZWR1cDogb25lIHJvdyBwZXIgKG9yZywgaW5jaWRlbnRfaWQpLiBBIHJlc29sdmUgcmUtcG9zdFxuICAvLyB1cGRhdGVzIHJlc29sdmVkX2F0IGluc3RlYWQgb2YgaW5zZXJ0aW5nIGEgZHVwbGljYXRlLlxuICBvcmdJbmNpZGVudFVuaXF1ZTogdW5pcXVlSW5kZXgoJ2luY2lkZW50c19vcmdfaW5jaWRlbnRfdW5pcXVlJykub24odGFibGUub3JnSWQsIHRhYmxlLmluY2lkZW50SWQpLFxufSkpO1xuXG4vKipcbiAqIFBlci1vcmcgRE9SQSBjb21wdXRhdGlvbiArIHJldGVudGlvbiBvdmVycmlkZXMuIE9uZSByb3cgcGVyIG9yZyAob3JnX2lkIFBLKS5cbiAqIGBpbmNpZGVudFdpbmRvd0hvdXJzYCAoUGhhc2UgNWIpIG92ZXJyaWRlcyB0aGUgZ2xvYmFsIGBET1JBX0lOQ0lERU5UX1dJTkRPV19IT1VSU2BcbiAqIHVzZWQgdG8gY29ycmVsYXRlIGFuIGluZ2VzdGVkIGluY2lkZW50IHRvIHRoZSBtb3N0IHJlY2VudCBzdWNjZXNzZnVsIGRlcGxveS5cbiAqIGBldmVudFJldGVudGlvbkRheXNgIC8gYGRvcmFSZXRlbnRpb25EYXlzYCAoUGhhc2UgNykgb3ZlcnJpZGUgdGhlIGdsb2JhbCByZXBvcnRpbmdcbiAqIHJldGVudGlvbiB3aW5kb3dzIGZvciB0aGUgc3BsaXQgc3dlZXAg4oCUIHN0YW5kYXJkIGV2ZW50cyAoYGVudmlyb25tZW50IElTIE5VTExgKVxuICogdnMgRE9SQSBzb3VyY2UgKGRlcGxveSBzdGFnZXMgKyBgZGVwbG95bWVudF9vdXRjb21lc2AgKyBgaW5jaWRlbnRzYCkuIEFueSBOVUxMIC9cbiAqIGFic2VudCB2YWx1ZSBmYWxscyBiYWNrIHRvIGl0cyBlbnYgZGVmYXVsdC4gU2V0IHNlbGYtc2VydmUgYnkgYW4gb3JnIGFkbWluIHZpYVxuICogYFBVVCAvYXBpL3JlcG9ydHMvc2V0dGluZ3MvaW5jaWRlbnRzYC4gVGhpcyB0YWJsZSBpcyBpdHNlbGYgbmV2ZXIgcHVyZ2VkLlxuICpcbiAqIEB0YWJsZSBkb3JhX3NldHRpbmdzXG4gKi9cbmV4cG9ydCBjb25zdCBkb3JhU2V0dGluZ3MgPSBwZ1RhYmxlKCdkb3JhX3NldHRpbmdzJywge1xuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5wcmltYXJ5S2V5KCksXG4gIGluY2lkZW50V2luZG93SG91cnM6IGludGVnZXIoJ2luY2lkZW50X3dpbmRvd19ob3VycycpLFxuICAvLyBQaGFzZSA3IHJldGVudGlvbiBvdmVycmlkZXMgKGRheXMpLiBOVUxMIOKHkiB1c2UgdGhlIGdsb2JhbCBlbnYgZGVmYXVsdFxuICAvLyAoUkVQT1JUSU5HX0VWRU5UX1JFVEVOVElPTl9EQVlTIC8gUkVQT1JUSU5HX0RPUkFfUkVURU5USU9OX0RBWVMpLlxuICBldmVudFJldGVudGlvbkRheXM6IGludGVnZXIoJ2V2ZW50X3JldGVudGlvbl9kYXlzJyksXG4gIGRvcmFSZXRlbnRpb25EYXlzOiBpbnRlZ2VyKCdkb3JhX3JldGVudGlvbl9kYXlzJyksXG4gIHVwZGF0ZWRBdDogdGltZXN0YW1wKCd1cGRhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbn0pO1xuXG4vKipcbiAqIFR5cGVTY3JpcHQgdHlwZXMgcmVwcmVzZW50aW5nIGRhdGFiYXNlIHJvd3NcbiAqL1xuZXhwb3J0IHR5cGUgUGlwZWxpbmUgPSB0eXBlb2YgcGlwZWxpbmUuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgUGlwZWxpbmVJbnNlcnQgPSB0eXBlb2YgcGlwZWxpbmUuJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBQaXBlbGluZVJlZ2lzdHJ5ID0gdHlwZW9mIHBpcGVsaW5lUmVnaXN0cnkuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgUGlwZWxpbmVSZWdpc3RyeUluc2VydCA9IHR5cGVvZiBwaXBlbGluZVJlZ2lzdHJ5LiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgUGlwZWxpbmVFdmVudCA9IHR5cGVvZiBwaXBlbGluZUV2ZW50LiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIFBpcGVsaW5lRXZlbnRJbnNlcnQgPSB0eXBlb2YgcGlwZWxpbmVFdmVudC4kaW5mZXJJbnNlcnQ7XG5cbmV4cG9ydCB0eXBlIERlcGxveW1lbnRPdXRjb21lID0gdHlwZW9mIGRlcGxveW1lbnRPdXRjb21lLiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIERlcGxveW1lbnRPdXRjb21lSW5zZXJ0ID0gdHlwZW9mIGRlcGxveW1lbnRPdXRjb21lLiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgSW5nZXN0SGVhbHRoID0gdHlwZW9mIGluZ2VzdEhlYWx0aC4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBJbmdlc3RIZWFsdGhJbnNlcnQgPSB0eXBlb2YgaW5nZXN0SGVhbHRoLiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgSW5jaWRlbnQgPSB0eXBlb2YgaW5jaWRlbnQuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgSW5jaWRlbnRJbnNlcnQgPSB0eXBlb2YgaW5jaWRlbnQuJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBEb3JhU2V0dGluZ3MgPSB0eXBlb2YgZG9yYVNldHRpbmdzLiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIERvcmFTZXR0aW5nc0luc2VydCA9IHR5cGVvZiBkb3JhU2V0dGluZ3MuJGluZmVySW5zZXJ0O1xuXG4vKipcbiAqIEhlbHBlciB0eXBlcyBmb3Igd29ya2luZyB3aXRoIHBhcnRpYWwgdXBkYXRlc1xuICovXG5leHBvcnQgdHlwZSBQaXBlbGluZVVwZGF0ZSA9IFBhcnRpYWw8T21pdDxQaXBlbGluZUluc2VydCwgJ2lkJyB8ICdjcmVhdGVkQXQnIHwgJ2NyZWF0ZWRCeSc+PjtcbiJdfQ==
|
|
353
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YWJhc2Uvc2NoZW1hL3BpcGVsaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUNMLGFBQWEsR0FFZCxNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQTBCbkk7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFO0lBQzNDLGNBQWM7SUFDZCxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLGFBQWEsRUFBRTtJQUUzQyxrQ0FBa0M7SUFDbEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7U0FDdEMsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFFWixlQUFlO0lBQ2YsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDMUIsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUN2RCxVQUFVLEVBQUU7U0FDWixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUMxQixPQUFPLENBQUMsYUFBYSxDQUFDO1NBQ3RCLE9B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QUFFO0lBQ3ZELFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxFQUFFO0NBQ2xGLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDYiwrRUFBK0U7SUFDL0UsMEJBQTBCO0lBQzFCLGVBQWUsRUFBRSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDekcsK0VBQStFO0lBQy9FLHdEQUF3RDtJQUN4RCxpQkFBaUIsRUFBRSxXQUFXLENBQUMsK0JBQStCLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDO0NBQ2xHLENBQUMsQ0FBQyxDQUFDO0FBRUo7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLGVBQWUsRUFBRTtJQUNuRCxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRTtJQUN0RCxtQkFBbUIsRUFBRSxPQUFPLENBQUMsdUJBQXVCLENBQUM7SUFDckQsZ0VBQWdFO0lBQ2hFLG9FQUFvRTtJQUNwRSxrQkFBa0IsRUFBRSxPQUFPLENBQUMsc0JBQXNCLENBQUM7SUFDbkQsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLHFCQUFxQixDQUFDO0lBQ2pELFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxFQUFFO0NBQ2xGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQge1xuICBTWVNURU1fT1JHX0lELCB0eXBlIENyaXRpY2FsaXR5LCB0eXBlIEVudGl0eUxhYmVscywgdHlwZSBFbnRpdHlMaW5rLCB0eXBlIExpZmVjeWNsZSwgdHlwZSBNZXRhRGF0YVR5cGUsXG4gIHR5cGUgT3duZXJUeXBlLCB0eXBlIFZpc2liaWxpdHksXG59IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IHNxbCB9IGZyb20gJ2RyaXp6bGUtb3JtJztcbmltcG9ydCB7IGJpZ2ludCwgYm9vbGVhbiwgaW50ZWdlciwgdmFyY2hhciwgcGdUYWJsZSwgdGV4dCwgdGltZXN0YW1wLCB1dWlkLCBqc29uYiwgaW5kZXgsIHVuaXF1ZUluZGV4IH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSc7XG5cbi8qKlxuICogUGlwZWxpbmUgYnVpbGRlciBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgc3RvcmVkIGluIGRhdGFiYXNlLlxuICogTWlycm9ycyB0aGUgY2Fub25pY2FsIEJ1aWxkZXJQcm9wcyBmcm9tIHBpcGVsaW5lLWNvcmUgKEpTT04tc2VyaWFsaXphYmxlIGZvcm0pLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lQnVpbGRlckNvbmZpZyB7XG4gIHJlYWRvbmx5IHByb2plY3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBpcGVsaW5lTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgZ2xvYmFsPzogTWV0YURhdGFUeXBlO1xuICByZWFkb25seSBzeW50aDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJlYWRvbmx5IGRlZmF1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJlYWRvbmx5IHJvbGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmVhZG9ubHkgc3RhZ2VzPzogUGlwZWxpbmVTdGFnZUNvbmZpZ1tdO1xufVxuXG4vKipcbiAqIFN0YWdlIGNvbmZpZ3VyYXRpb24gc3RvcmVkIGluIGRhdGFiYXNlIChKU09OLXNlcmlhbGl6YWJsZSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVTdGFnZUNvbmZpZyB7XG4gIHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBhbGlhcz86IHN0cmluZztcbiAgcmVhZG9ubHkgc3RlcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107XG59XG5cbi8qKlxuICogVGFibGUgZm9yIHN0b3JpbmcgcGlwZWxpbmUgaW5zdGFuY2VzIGFuZCB0aGVpciBmdWxsIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogRmVhdHVyZXMgKiAtIEZ1bGwgQnVpbGRlclByb3BzIHNlcmlhbGl6YXRpb24gZm9yIHJlY29uc3RydWN0aW9uXG4gKiAtIE9yZ2FuaXphdGlvbi1sZXZlbCBpc29sYXRpb25cbiAqIC0gUGlwZWxpbmUgc3RhdHVzIHRyYWNraW5nXG4gKiAtIEV4ZWN1dGlvbiBoaXN0b3J5IHRyYWNraW5nXG4gKiAtIEZsZXhpYmxlIHRhZ2dpbmcgc3lzdGVtXG4gKlxuICogQHRhYmxlIHBpcGVsaW5lc1xuICovXG5leHBvcnQgY29uc3QgcGlwZWxpbmUgPSBwZ1RhYmxlKCdwaXBlbGluZXMnLCB7XG4gIC8vIFByaW1hcnkga2V5XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG5cbiAgLy8gT3JnYW5pemF0aW9uIGFuZCBhY2Nlc3MgY29udHJvbFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KVxuICAgIC5kZWZhdWx0KFNZU1RFTV9PUkdfSUQpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBBdWRpdCBmaWVsZHNcbiAgY3JlYXRlZEJ5OiB0ZXh0KCdjcmVhdGVkX2J5JylcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSlcbiAgICAuZGVmYXVsdE5vdygpXG4gICAgLm5vdE51bGwoKSxcbiAgdXBkYXRlZEJ5OiB0ZXh0KCd1cGRhdGVkX2J5JylcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG4gIHVwZGF0ZWRBdDogdGltZXN0YW1wKCd1cGRhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSlcbiAgICAuZGVmYXVsdE5vdygpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBDb3JlIHBpcGVsaW5lIGluZm9ybWF0aW9uXG4gIHByb2plY3Q6IHZhcmNoYXIoJ3Byb2plY3QnLCB7IGxlbmd0aDogMjU1IH0pXG4gICAgLm5vdE51bGwoKSxcbiAgb3JnYW5pemF0aW9uOiB2YXJjaGFyKCdvcmdhbml6YXRpb24nLCB7IGxlbmd0aDogMjU1IH0pXG4gICAgLm5vdE51bGwoKSxcbiAgcGlwZWxpbmVOYW1lOiB2YXJjaGFyKCdwaXBlbGluZV9uYW1lJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgZGVzY3JpcHRpb246IHRleHQoJ2Rlc2NyaXB0aW9uJyksXG4gIGtleXdvcmRzOiBqc29uYigna2V5d29yZHMnKVxuICAgIC4kdHlwZTxzdHJpbmdbXT4oKVxuICAgIC5kZWZhdWx0KFtdKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gUGlwZWxpbmUgY29uZmlndXJhdGlvblxuICBwcm9wczoganNvbmIoJ3Byb3BzJylcbiAgICAuJHR5cGU8UGlwZWxpbmVCdWlsZGVyQ29uZmlnPigpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBEZXZlbG9wZXItcG9ydGFsIGNhdGFsb2cgbWV0YWRhdGEgKG93bmVyc2hpcCAvIGxpZmVjeWNsZSAvIGNsYXNzaWZpY2F0aW9uKS5cbiAgLy8gb3duZXJJZCBkZWZhdWx0cyB0byB0aGUgY3JlYXRpbmcgdXNlciAoc2V0IGF0IGluc2VydCksIHNvIGV2ZXJ5IHBpcGVsaW5lIGhhc1xuICAvLyBhbiBvd25lciBmb3IgXCJteSBzZXJ2aWNlc1wiIHZpZXdzOyBvd25lclR5cGUgZGlzdGluZ3Vpc2hlcyB1c2VyIHZzIHRlYW0uXG4gIG93bmVySWQ6IHRleHQoJ293bmVyX2lkJyksXG4gIG93bmVyVHlwZTogdmFyY2hhcignb3duZXJfdHlwZScsIHsgbGVuZ3RoOiAxMCB9KS4kdHlwZTxPd25lclR5cGU+KCksXG4gIGxpZmVjeWNsZTogdmFyY2hhcignbGlmZWN5Y2xlJywgeyBsZW5ndGg6IDIwIH0pXG4gICAgLiR0eXBlPExpZmVjeWNsZT4oKVxuICAgIC5kZWZhdWx0KCdwcm9kdWN0aW9uJyBhcyBMaWZlY3ljbGUpXG4gICAgLm5vdE51bGwoKSxcbiAgY3JpdGljYWxpdHk6IHZhcmNoYXIoJ2NyaXRpY2FsaXR5JywgeyBsZW5ndGg6IDEwIH0pLiR0eXBlPENyaXRpY2FsaXR5PigpLFxuICBsYWJlbHM6IGpzb25iKCdsYWJlbHMnKVxuICAgIC4kdHlwZTxFbnRpdHlMYWJlbHM+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuICBsaW5rczoganNvbmIoJ2xpbmtzJylcbiAgICAuJHR5cGU8RW50aXR5TGlua1tdPigpXG4gICAgLmRlZmF1bHQoW10pXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBBY2Nlc3MgYW5kIHZpc2liaWxpdHkg4oCUIHRoZSBzaGFyZWQgdGhyZWUtcnVuZyBsYWRkZXIgKHNlZSBhcGktY29yZSdzXG4gIC8vIGBWaXNpYmlsaXR5YCk6IGBwcml2YXRlYCBpcyBhdXRob3Itb25seSAoYGNyZWF0ZWRfYnlgKSwgYG9yZ2AgaXMgdGhlIHdob2xlXG4gIC8vIG93bmluZyBvcmcsIGBwdWJsaWNgIHJlYWNoZXMgdGhlIG9yZydzIHRlYW1zIGFuZCDigJQgZnJvbSB0aGUgc3lzdGVtIG9yZyDigJRcbiAgLy8gZXZlcnkgb3JnLiBDb25zdHJhaW5lZCBhdCB0aGUgU1FMIGxheWVyIHRvbyB2aWEgYSBDSEVDSyBpbiBwb3N0Z3Jlcy1pbml0LnNxbFxuICAvLyBzbyBhIHR5cG8gY2FuJ3Qgc25lYWsgcGFzdCB0aGUgYXBwbGljYXRpb24gbGF5ZXIuXG4gIHZpc2liaWxpdHk6IHZhcmNoYXIoJ3Zpc2liaWxpdHknLCB7IGxlbmd0aDogMTAgfSlcbiAgICAuJHR5cGU8VmlzaWJpbGl0eT4oKVxuICAgIC5kZWZhdWx0KCdwcml2YXRlJylcbiAgICAubm90TnVsbCgpLFxuICBpc0RlZmF1bHQ6IGJvb2xlYW4oJ2lzX2RlZmF1bHQnKVxuICAgIC5kZWZhdWx0KGZhbHNlKVxuICAgIC5ub3ROdWxsKCksXG4gIGlzQWN0aXZlOiBib29sZWFuKCdpc19hY3RpdmUnKVxuICAgIC5kZWZhdWx0KHRydWUpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBEZWxldGlvbiB0cmFja2luZyAoc29mdCBkZWxldGUpXG4gIGRlbGV0ZWRBdDogdGltZXN0YW1wKCdkZWxldGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGRlbGV0ZWRCeTogdGV4dCgnZGVsZXRlZF9ieScpLFxuICAvLyBTb2Z0LWRlbGV0ZSBwdXJnZSBkZWFkbGluZTogdGhlIHJldGVudGlvbiBzd2VlcCBoYXJkLWRlbGV0ZXMgdG9tYnN0b25lZFxuICAvLyByb3dzIG9uY2UgYHB1cmdlX2FmdGVyYCBoYXMgcGFzc2VkIChzZXQgb24gZGVsZXRlIGFsb25nc2lkZSBkZWxldGVkX2F0KS5cbiAgcHVyZ2VBZnRlcjogdGltZXN0YW1wKCdwdXJnZV9hZnRlcicsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxufSwgKHRhYmxlKSA9PiAoe1xuICAvLyBQYXJ0aWFsIGluZGV4IG92ZXIganVzdCB0aGUgdG9tYnN0b25lcyDigJQgZHJpdmVzIHRoZSByZXRlbnRpb24gcHVyZ2Ugc3dlZXBcbiAgLy8gKGBXSEVSRSBkZWxldGVkX2F0IElTIE5PVCBOVUxMIEFORCBwdXJnZV9hZnRlciA8IG5vd2ApIHdpdGhvdXQgc2Nhbm5pbmcgbGl2ZSByb3dzLlxuICBwdXJnZUlkeDogaW5kZXgoJ3BpcGVsaW5lX3B1cmdlX2lkeCcpLm9uKHRhYmxlLnB1cmdlQWZ0ZXIpLndoZXJlKHNxbGBkZWxldGVkX2F0IElTIE5PVCBOVUxMYCksXG4gIC8vIE1pcnJvcnMgdGhlIGluZGV4ZXMgcG9zdGdyZXMtaW5pdC5zcWwgY3JlYXRlcywgbmFtZSBmb3IgbmFtZSAodGhlIFNRTCBmaWxlIGlzXG4gIC8vIHdoYXQgZGVwbG95czsgc2NoZW1hLXJlZmxlY3Rpb24udGVzdC50cyBrZWVwcyB0aGUgdHdvIGluIGxvY2stc3RlcCkuXG4gIG9yZ0lkSWR4OiBpbmRleCgnaWR4X3BpcGVsaW5lc19vcmdfaWQnKS5vbih0YWJsZS5vcmdJZCkud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBwcm9qZWN0SWR4OiBpbmRleCgnaWR4X3BpcGVsaW5lc19wcm9qZWN0Jykub24odGFibGUucHJvamVjdCkud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBvcmdhbml6YXRpb25JZHg6IGluZGV4KCdpZHhfcGlwZWxpbmVzX29yZ2FuaXphdGlvbicpLm9uKHRhYmxlLm9yZ2FuaXphdGlvbikud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBwcm9qZWN0T3JnSWR4OiBpbmRleCgnaWR4X3BpcGVsaW5lc19wcm9qZWN0X29yZycpLm9uKHRhYmxlLnByb2plY3QsIHRhYmxlLm9yZ2FuaXphdGlvbikud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICB2aXNpYmlsaXR5SWR4OiBpbmRleCgnaWR4X3BpcGVsaW5lc192aXNpYmlsaXR5Jykub24odGFibGUudmlzaWJpbGl0eSkud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBpc0RlZmF1bHRJZHg6IGluZGV4KCdpZHhfcGlwZWxpbmVzX2lzX2RlZmF1bHQnKVxuICAgIC5vbih0YWJsZS5wcm9qZWN0LCB0YWJsZS5vcmdhbml6YXRpb24sIHRhYmxlLmlzRGVmYXVsdCkud2hlcmUoc3FsYGlzX2RlZmF1bHQgPSB0cnVlIEFORCBkZWxldGVkX2F0IElTIE5VTExgKSxcbiAgYWN0aXZlSWR4OiBpbmRleCgnaWR4X3BpcGVsaW5lc19pc19hY3RpdmUnKS5vbih0YWJsZS5pc0FjdGl2ZSkud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBvcmdDcmVhdGVkSWR4OiBpbmRleCgnaWR4X3BpcGVsaW5lc19vcmdfY3JlYXRlZCcpLm9uKHRhYmxlLm9yZ0lkLCBzcWxgJHt0YWJsZS5jcmVhdGVkQXR9IERFU0NgKS53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOVUxMYCksXG5cbiAgLy8gRGV2ZWxvcGVyLXBvcnRhbCBjYXRhbG9nIGluZGV4ZXM6IFwibXkgc2VydmljZXNcIiAob3duZXIpICsgbGlmZWN5Y2xlIGZpbHRlci5cbiAgb3duZXJJZHg6IGluZGV4KCdwaXBlbGluZV9vd25lcl9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUub3duZXJJZCksXG4gIGxpZmVjeWNsZUlkeDogaW5kZXgoJ3BpcGVsaW5lX2xpZmVjeWNsZV9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUubGlmZWN5Y2xlKSxcblxuICAvLyBDb21wb3NpdGUgaW5kZXggZm9yIGZpbHRlcmVkIHF1ZXJpZXMgKG9yZ0lkICsgdmlzaWJpbGl0eSArIGlzQWN0aXZlKVxuICBvcmdWaXNpYmlsaXR5QWN0aXZlSWR4OiBpbmRleCgncGlwZWxpbmVfb3JnX3Zpc2liaWxpdHlfYWN0aXZlX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS52aXNpYmlsaXR5LCB0YWJsZS5pc0FjdGl2ZSksXG4gIC8vIERyaXZlcyB0aGUgXCJteSBwcml2YXRlIGRyYWZ0c1wiIGxlZyBvZiB0aGUgdmlzaWJpbGl0eSBwcmVkaWNhdGUuXG4gIGNyZWF0ZWRCeUlkeDogaW5kZXgoJ3BpcGVsaW5lX2NyZWF0ZWRfYnlfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmNyZWF0ZWRCeSksXG5cbiAgLy8gVW5pcXVlIGNvbnN0cmFpbnQgb24gcHJvamVjdCArIG9yZ2FuaXphdGlvbiArIG9yZ0lkXG4gIHByb2plY3RPcmdVbmlxdWU6IHVuaXF1ZUluZGV4KCdwaXBlbGluZV9wcm9qZWN0X29yZ191bmlxdWUnKVxuICAgIC5vbih0YWJsZS5wcm9qZWN0LCB0YWJsZS5vcmdhbml6YXRpb24sIHRhYmxlLm9yZ0lkKSxcbn0pKTtcblxuLyoqXG4gKiBQaXBlbGluZSBkZXBsb3ltZW50IHJlZ2lzdHJ5LlxuICogTWFwcyBkZXBsb3llZCBDb2RlUGlwZWxpbmUgQVJOcyBiYWNrIHRvIHBpcGVsaW5lIHJlY29yZHMgYW5kIG9yZyBJRHMuXG4gKiBQb3B1bGF0ZWQgYnkgdGhlIGRlcGxveSBjb21tYW5kIGFmdGVyIHN1Y2Nlc3NmdWwgQ0RLIGRlcGxveS5cbiAqIFVzZWQgYnkgdGhlIHBpcGVsaW5lLWV2ZW50cyBMYW1iZGEgdG8gcmVzb2x2ZSBFdmVudEJyaWRnZSBldmVudHMgdG8gb3JnLXNjb3BlZCByZWNvcmRzLlxuICpcbiAqIEB0YWJsZSBwaXBlbGluZV9yZWdpc3RyeVxuICovXG5leHBvcnQgY29uc3QgcGlwZWxpbmVSZWdpc3RyeSA9IHBnVGFibGUoJ3BpcGVsaW5lX3JlZ2lzdHJ5Jywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICAvLyBUaGUgcGxhdGZvcm0ncyBwaXBlbGluZSByZWNvcmQgaWQg4oCUIGEgU1RBQkxFIHV1aWQgY3JlYXRlZCB3aXRoIHRoZSBwaXBlbGluZVxuICAvLyByZWNvcmQsIGtub3duIGF0IENESyBzeW50aCwgYW5kIGFwcGxpZWQgdG8gdGhlIGxpdmUgQ29kZVBpcGVsaW5lIGFzIHRoZVxuICAvLyBgcGIucGlwZWxpbmUtaWRgIHRhZy4gVGhlIGV2ZW50cyBMYW1iZGEgcmVhZHMgdGhhdCB0YWcgYW5kIHJlcG9ydHNcbiAgLy8gYWdhaW5zdCB0aGlzIGlkLCBzbyBpdCBJUyB0aGUgZXZlbnQgam9pbiBrZXkgKHJlcGxhY2luZyB0aGUgbWFza2VkIEFSTiDigJRcbiAgLy8gaXQgY2FycmllcyBubyBBV1MgYWNjb3VudC9yZWdpb24sIHNvIG5vIG1hc2tpbmcgaXMgbmVlZGVkKS4gVW5pcXVlOiBvbmVcbiAgLy8gcmVnaXN0cnkgcm93IHBlciBwaXBlbGluZSArIHRoZSB1cHNlcnQga2V5IGZvciAocmUpcmVnaXN0cmF0aW9uLlxuICBwaXBlbGluZUlkOiB1dWlkKCdwaXBlbGluZV9pZCcpLm5vdE51bGwoKS51bmlxdWUoKSxcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICBwaXBlbGluZU5hbWU6IHZhcmNoYXIoJ3BpcGVsaW5lX25hbWUnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgcmVnaW9uOiB2YXJjaGFyKCdyZWdpb24nLCB7IGxlbmd0aDogMzAgfSksXG4gIHByb2plY3Q6IHZhcmNoYXIoJ3Byb2plY3QnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBvcmdhbml6YXRpb246IHZhcmNoYXIoJ29yZ2FuaXphdGlvbicsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIGxhc3REZXBsb3llZDogdGltZXN0YW1wKCdsYXN0X2RlcGxveWVkJywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIHN0YWNrTmFtZTogdmFyY2hhcignc3RhY2tfbmFtZScsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbiAgdXBkYXRlZEF0OiB0aW1lc3RhbXAoJ3VwZGF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSwgKHRhYmxlKSA9PiAoe1xuICBvcmdJZElkeDogaW5kZXgoJ3JlZ2lzdHJ5X29yZ19pZF9pZHgnKS5vbih0YWJsZS5vcmdJZCksXG4gIG9yZ1JlZ2lvbklkeDogaW5kZXgoJ3JlZ2lzdHJ5X29yZ19yZWdpb25faWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLnJlZ2lvbiksXG4gIC8vIE9uZSByZWdpc3RyeSByb3cgcGVyIHBpcGVsaW5lICh0aGUgcmVnaXN0cmF0aW9uIHVwc2VydCdzIGNvbmZsaWN0IHRhcmdldCkuXG4gIHBpcGVsaW5lSWRVbmlxdWU6IHVuaXF1ZUluZGV4KCdyZWdpc3RyeV9waXBlbGluZV9pZF9pZHgnKS5vbih0YWJsZS5waXBlbGluZUlkKSxcbn0pKTtcblxuLyoqXG4gKiBFdmVudCBzb3VyY2UgaWRlbnRpZmllcnMgZm9yIHBpcGVsaW5lX2V2ZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgRXZlbnRTb3VyY2UgPSAnY29kZXBpcGVsaW5lJyB8ICdjb2RlYnVpbGQnIHwgJ3BsdWdpbi1idWlsZCc7XG5cbi8qKlxuICogRXZlbnQgdHlwZSBncmFudWxhcml0eSBsZXZlbHMgZm9yIHBpcGVsaW5lX2V2ZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgRXZlbnRUeXBlID0gJ1BJUEVMSU5FJyB8ICdTVEFHRScgfCAnQUNUSU9OJyB8ICdCVUlMRCc7XG5cbi8qKlxuICogUGlwZWxpbmUgZXhlY3V0aW9uIGFuZCBidWlsZCBldmVudHMuXG4gKiBDYXB0dXJlcyBDb2RlUGlwZWxpbmUvQ29kZUJ1aWxkIHN0YXRlIGNoYW5nZXMgZnJvbSBFdmVudEJyaWRnZVxuICogYW5kIHBsdWdpbiBEb2NrZXIgYnVpbGQgb3V0Y29tZXMgZnJvbSBCdWxsTVEuXG4gKiBBbGwgZXZlbnRzIGFyZSBvcmctc2NvcGVkIGZvciBtdWx0aS10ZW5hbnQgcmVwb3J0aW5nLlxuICpcbiAqIEB0YWJsZSBwaXBlbGluZV9ldmVudHNcbiAqL1xuZXhwb3J0IGNvbnN0IHBpcGVsaW5lRXZlbnQgPSBwZ1RhYmxlKCdwaXBlbGluZV9ldmVudHMnLCB7XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG4gIHBpcGVsaW5lSWQ6IHV1aWQoJ3BpcGVsaW5lX2lkJyksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgZXZlbnRTb3VyY2U6IHZhcmNoYXIoJ2V2ZW50X3NvdXJjZScsIHsgbGVuZ3RoOiA1MCB9KS4kdHlwZTxFdmVudFNvdXJjZT4oKS5ub3ROdWxsKCksXG4gIGV2ZW50VHlwZTogdmFyY2hhcignZXZlbnRfdHlwZScsIHsgbGVuZ3RoOiA1MCB9KS4kdHlwZTxFdmVudFR5cGU+KCkubm90TnVsbCgpLFxuICBzdGF0dXM6IHZhcmNoYXIoJ3N0YXR1cycsIHsgbGVuZ3RoOiAyMCB9KS5ub3ROdWxsKCksXG4gIGV4ZWN1dGlvbklkOiB2YXJjaGFyKCdleGVjdXRpb25faWQnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBzdGFnZU5hbWU6IHZhcmNoYXIoJ3N0YWdlX25hbWUnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBhY3Rpb25OYW1lOiB2YXJjaGFyKCdhY3Rpb25fbmFtZScsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIGVycm9yTWVzc2FnZTogdGV4dCgnZXJyb3JfbWVzc2FnZScpLFxuICBzdGFydGVkQXQ6IHRpbWVzdGFtcCgnc3RhcnRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBjb21wbGV0ZWRBdDogdGltZXN0YW1wKCdjb21wbGV0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgZHVyYXRpb25NczogaW50ZWdlcignZHVyYXRpb25fbXMnKSxcbiAgLy8gRE9SQSBkZXBsb3ktYXR0cmlidXRpb24gKGFsbCBudWxsYWJsZTsgcG9wdWxhdGVkIGF0IGluZ2VzdCB3aGVuIHRoZSBzb3VyY2VcbiAgLy8gZXZlbnQgY2FycmllcyB0aGVtIOKAlCBsZWdhY3kvQ0ktb25seSBldmVudHMgbGVhdmUgdGhlbSBOVUxMKS4gYGVudmlyb25tZW50YFxuICAvLyBpcyB0aGUgZGVwbG95IHRhcmdldCAoZS5nLiBcInByb2R1Y3Rpb25cIik7IGl0cyBwcmVzZW5jZSBtYXJrcyBhbiBleGVjdXRpb25cbiAgLy8gYXMgYSByZWFsIGRlcGxveW1lbnQsIGxldHRpbmcgRE9SQSBzY29wZSBwYXN0IGdlbmVyaWMgcGlwZWxpbmUgcnVucy5cbiAgLy8gYGNvbW1pdFNoYWAvYGNvbW1pdFJlZmAgY2FwdHVyZSB0aGUgc291cmNlIHJldmlzaW9uIGZvciBsZWFkLXRpbWUgd29yay5cbiAgY29tbWl0U2hhOiB2YXJjaGFyKCdjb21taXRfc2hhJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgY29tbWl0UmVmOiB2YXJjaGFyKCdjb21taXRfcmVmJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgZW52aXJvbm1lbnQ6IHZhcmNoYXIoJ2Vudmlyb25tZW50JywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgLy8gRE9SQSB0cnVlLWxlYWQtdGltZSBhdHRyaWJ1dGlvbi4gVGhlIGZvcndhcmRlciByZXNvbHZlcyB0aGUgc291cmNlXG4gIC8vIGNvbW1pdCByYW5nZSBpbi1hY2NvdW50IGFuZCByZXBvcnRzIHRoZSBPTERFU1QgdW5zaGlwcGVkIGNvbW1pdCdzIHRpbWVzdGFtcFxuICAvLyArIGhvdyBtYW55IGNvbW1pdHMgc2hpcHBlZC4gQm90aCBudWxsYWJsZSDigJQgZXZlbnRzIHdob3NlIHNvdXJjZSB0eXBlL3Rva2VuXG4gIC8vIGNhbid0IGJlIHJlc29sdmVkIGxlYXZlIHRoZW0gTlVMTCBhbmQgbGVhZCB0aW1lIHJlcG9ydHMgYHVua25vd25gLlxuICBjb21taXRUaW1lc3RhbXA6IHRpbWVzdGFtcCgnY29tbWl0X3RpbWVzdGFtcCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBjb21taXRDb3VudDogaW50ZWdlcignY29tbWl0X2NvdW50JyksXG4gIC8vIFBlci1wbHVnaW4gcnVudGltZSB0ZWxlbWV0cnk6IHRoZSBwbHVnaW4gYW4gQUNUSU9OL0JVSUxEIGV2ZW50IHJhbixcbiAgLy8gam9pbmVkIGF0IGluZ2VzdCBmcm9tIGBwaXBlbGluZV9zdGVwX21hbmlmZXN0c2Agb24gKHBpcGVsaW5lX2lkLFxuICAvLyBzdGFnZV9uYW1lLCBhY3Rpb25fbmFtZSkuIGBwbHVnaW5QdWJsaXNoZXJgIGlzIE5VTEwgZm9yIGFuIG93bi1vcmcgcGx1Z2luO1xuICAvLyBhbGwgdGhyZWUgYXJlIE5VTEwgZm9yIG5vbi1wbHVnaW4gYWN0aW9ucyBhbmQgdW5yZWNvcmRlZCBzeW50aHMuXG4gIHBsdWdpblB1Ymxpc2hlcjogdmFyY2hhcigncGx1Z2luX3B1Ymxpc2hlcicsIHsgbGVuZ3RoOiAzOSB9KSxcbiAgLy8gVGhlIHB1Ymxpc2hlcidzIElEIChhIGhhbmRsZSBjYW4gY2hhbmdlIG9uIGEgY2xhaW0gb3IgcHJvZmlsZSBjaGFuZ2U7IHRoZVxuICAvLyBsaXN0aW5nIHN0YXRzIGpvaW4gb24gdGhpcywgbmV2ZXIgb24gdGhlIGhhbmRsZSkuIE5VTEwgbGlrZSBwbHVnaW5QdWJsaXNoZXIuXG4gIHBsdWdpblB1Ymxpc2hlcklkOiB1dWlkKCdwbHVnaW5fcHVibGlzaGVyX2lkJyksXG4gIHBsdWdpbk5hbWU6IHZhcmNoYXIoJ3BsdWdpbl9uYW1lJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgcGx1Z2luVmVyc2lvbjogdmFyY2hhcigncGx1Z2luX3ZlcnNpb24nLCB7IGxlbmd0aDogNTAgfSksXG4gIGRldGFpbDoganNvbmIoJ2RldGFpbCcpLiR0eXBlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpLFxuICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCgnY3JlYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG59LCAodGFibGUpID0+ICh7XG4gIHBpcGVsaW5lSWRJZHg6IGluZGV4KCdldmVudF9waXBlbGluZV9pZF9pZHgnKS5vbih0YWJsZS5waXBlbGluZUlkKSxcbiAgb3JnSWRJZHg6IGluZGV4KCdldmVudF9vcmdfaWRfaWR4Jykub24odGFibGUub3JnSWQpLFxuICBldmVudFR5cGVJZHg6IGluZGV4KCdldmVudF90eXBlX2lkeCcpLm9uKHRhYmxlLmV2ZW50VHlwZSksXG4gIHN0YXR1c0lkeDogaW5kZXgoJ2V2ZW50X3N0YXR1c19pZHgnKS5vbih0YWJsZS5zdGF0dXMpLFxuICBleGVjdXRpb25JZElkeDogaW5kZXgoJ2V2ZW50X2V4ZWN1dGlvbl9pZF9pZHgnKS5vbih0YWJsZS5leGVjdXRpb25JZCksXG4gIGNyZWF0ZWRBdElkeDogaW5kZXgoJ2V2ZW50X2NyZWF0ZWRfYXRfaWR4Jykub24odGFibGUuY3JlYXRlZEF0KSxcbiAgb3JnVHlwZUNyZWF0ZWRJZHg6IGluZGV4KCdldmVudF9vcmdfdHlwZV9jcmVhdGVkX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5ldmVudFR5cGUsIHRhYmxlLmNyZWF0ZWRBdCksXG4gIG9yZ1NvdXJjZVN0YXR1c0lkeDogaW5kZXgoJ2V2ZW50X29yZ19zb3VyY2Vfc3RhdHVzX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5ldmVudFNvdXJjZSwgdGFibGUuc3RhdHVzKSxcbiAgLy8gSWRlbXBvdGVuY3k6IEV2ZW50QnJpZGdlIOKGkiBTUVMgaXMgYXQtbGVhc3Qtb25jZSwgc28gdGhlIHNhbWUgc3RhdGUtY2hhbmdlXG4gIC8vIGNhbiBiZSBkZWxpdmVyZWQgdHdpY2UuIFRoaXMgcGFydGlhbCB1bmlxdWUgaW5kZXggZGVkdXBzIHJlLWRlbGl2ZXJpZXNcbiAgLy8gKHBhaXJlZCB3aXRoIGBvbkNvbmZsaWN0RG9Ob3RoaW5nYCBpbiByZXBvcnRpbmctc2VydmljZS5pbmdlc3RFdmVudHMpLlxuICAvLyBQYXJ0aWFsIChleGVjdXRpb25faWQgSVMgTk9UIE5VTEwpIGJlY2F1c2UgdGhhdCdzIHRoZSBuYXR1cmFsIHBlci1ldmVudFxuICAvLyBrZXk7IGV2ZW50cyB3aXRob3V0IGFuIGV4ZWN1dGlvbklkIChyYXJlKSBhcmVuJ3QgZGVkdXBlZCwgd2hpY2ggaXMgc2FmZS5cbiAgLy8gSW5jbHVkZXMgcGlwZWxpbmVfaWQgc28gYSAodGhlb3JldGljYWwpIGV4ZWN1dGlvbi1pZCByZXVzZSBhY3Jvc3MgcGlwZWxpbmVzXG4gIC8vIGNhbid0IGNvbGxpZGUgKHRoZSBBUk4gaXMgbm90IHBhcnQgb2YgdGhlIHJvdykuXG4gIC8vXG4gIC8vIENPQUxFU0NFIHRoZSBudWxsYWJsZSBwYXJ0cyB0byBzZW50aW5lbHMgKGV4cHJlc3Npb24gaW5kZXgpOiBQSVBFTElORS9TVEFHRS9cbiAgLy8gQlVJTEQgZXZlbnRzIGxlYXZlIHN0YWdlX25hbWUvYWN0aW9uX25hbWUgTlVMTCAocGx1Z2luLWJ1aWxkIGFsc28gcGlwZWxpbmVfaWRcbiAgLy8gTlVMTCksIGFuZCBQb3N0Z3JlcyB0cmVhdHMgTlVMTHMgYXMgRElTVElOQ1QgaW4gYSB1bmlxdWUgaW5kZXgg4oCUIHNvIHRoZSBwbGFpblxuICAvLyBjb2x1bW4gaW5kZXggbmV2ZXIgbWF0Y2hlcyBmb3IgdGhvc2UgdHlwZXMgYW5kIG9uQ29uZmxpY3REb05vdGhpbmcgY2FuJ3QgZGVkdXBcbiAgLy8gdGhlaXIgYXQtbGVhc3Qtb25jZSByZS1kZWxpdmVyaWVzLiBDb2xsYXBzaW5nIE5VTEzihpInJyBtYWtlcyBlcXVhbCBldmVudHMgZXF1YWwuXG4gIC8vIChkcml6emxlJ3MgdW5pcXVlSW5kZXggY2FuJ3QgZXhwcmVzcyBOVUxMUyBOT1QgRElTVElOQ1Qgb24gYSBwYXJ0aWFsIGluZGV4LCBzb1xuICAvLyB3ZSB1c2UgdGhlIGVxdWl2YWxlbnQgZXhwcmVzc2lvbiBpbmRleC4pIENyZWF0ZWQgYnkgcG9zdGdyZXMtaW5pdC5zcWwuXG4gIGRlZHVwSWR4OiB1bmlxdWVJbmRleCgnZXZlbnRfZGVkdXBfaWR4JylcbiAgICAub24oXG4gICAgICBzcWxgY29hbGVzY2UoJHt0YWJsZS5waXBlbGluZUlkfTo6dGV4dCwgJycpYCxcbiAgICAgIHRhYmxlLmV4ZWN1dGlvbklkLFxuICAgICAgdGFibGUuZXZlbnRUeXBlLFxuICAgICAgdGFibGUuc3RhdHVzLFxuICAgICAgc3FsYGNvYWxlc2NlKCR7dGFibGUuc3RhZ2VOYW1lfSwgJycpYCxcbiAgICAgIHNxbGBjb2FsZXNjZSgke3RhYmxlLmFjdGlvbk5hbWV9LCAnJylgLFxuICAgIClcbiAgICAud2hlcmUoc3FsYGV4ZWN1dGlvbl9pZCBJUyBOT1QgTlVMTGApLFxuICAvLyBET1JBIGRlcGxveS1zY29wZWQgcmVhZHM6IG9ubHkgUElQRUxJTkUtbGV2ZWwgZXhlY3V0aW9ucyB0YWdnZWQgd2l0aCBhXG4gIC8vIGRlcGxveSBlbnZpcm9ubWVudC4gYGV2ZW50X3R5cGVgIGlzIGluIHRoZSBpbmRleCBiZWNhdXNlIHRoZSBldmVudHMgTGFtYmRhXG4gIC8vIHRhZ3MgRVZFUlkgZXZlbnQgb2YgYSBkZXBsb3llZCBwaXBlbGluZSAoU1RBR0UvQUNUSU9OIHRvbyksIHdoaWxlIHRoZSBET1JBXG4gIC8vIHNjYW4gd2FudHMgb25seSBgZXZlbnRfdHlwZT0nUElQRUxJTkUnYCDigJQgaW5jbHVkaW5nIGl0IHJlc3RvcmVzIHNlbGVjdGl2aXR5LlxuICAvLyBQYXJ0aWFsIChlbnZpcm9ubWVudCBJUyBOT1QgTlVMTCkga2VlcHMgaXQgc21hbGwg4oCUIGxlZ2FjeS9DSS1vbmx5IGV2ZW50c1xuICAvLyBhcmVuJ3QgaW5kZXhlZC4gVGhlIGRlZmF1bHQgcnVuLWJhc2VkIERPUkEgcGF0aCAobm8gZW52aXJvbm1lbnQpIGNhbid0IHVzZVxuICAvLyB0aGlzIHBhcnRpYWwgaW5kZXg7IGl0IHJlbGllcyBvbiBldmVudF9waXBlbGluZV90eXBlX3N0YXJ0ZWRfaWR4IGJlbG93LlxuICAvLyBDcmVhdGVkIGJ5IHBvc3RncmVzLWluaXQuc3FsLlxuICBlbnZUeXBlU3RhcnRlZElkeDogaW5kZXgoJ2V2ZW50X2Vudl90eXBlX3N0YXJ0ZWRfaWR4JylcbiAgICAub24odGFibGUuZW52aXJvbm1lbnQsIHRhYmxlLmV2ZW50VHlwZSwgdGFibGUuc3RhcnRlZEF0KVxuICAgIC53aGVyZShzcWxgZW52aXJvbm1lbnQgSVMgTk9UIE5VTExgKSxcbiAgLy8gc3RhcnRlZF9hdCByYW5nZSBzY2FuczogZXZlcnkgQ2F0ZWdvcnktMSByZXBvcnQgYW5kIHRoZSBkZWZhdWx0IHJ1bi1iYXNlZFxuICAvLyBET1JBIHBhdGggZmlsdGVycyBgZXZlbnRfdHlwZT0nUElQRUxJTkUnIEFORCBzdGFydGVkX2F0IEJFVFdFRU4g4oCmYCBqb2luZWQgb25cbiAgLy8gcGlwZWxpbmVfaWQsIGJ1dCB0aGUgb3RoZXIgZXZlbnQgY29tcG9zaXRlIGluZGV4IGlzIG9uIGNyZWF0ZWRfYXQsIG5vdFxuICAvLyBzdGFydGVkX2F0IOKAlCBzbyB0aGUgcmFuZ2Ugc2NhbiBoYWQgbm8gaWRlYWwgaW5kZXguIFRoaXMgY29tcG9zaXRlIHNlcnZlcyB0aGVcbiAgLy8gam9pbi1kcml2ZW4gc2NhbiBieSBwaXBlbGluZV9pZC4gQ3JlYXRlZCBieSBwb3N0Z3Jlcy1pbml0LnNxbC5cbiAgcGlwZWxpbmVUeXBlU3RhcnRlZElkeDogaW5kZXgoJ2V2ZW50X3BpcGVsaW5lX3R5cGVfc3RhcnRlZF9pZHgnKVxuICAgIC5vbih0YWJsZS5waXBlbGluZUlkLCB0YWJsZS5ldmVudFR5cGUsIHRhYmxlLnN0YXJ0ZWRBdCksXG4gIC8vIERPUkEgZGVwbG95LWJhc2lzIHNjYW46IGRlcGxveW1lbnQgZnJlcXVlbmN5IC8gZGVwbG95LXRpbWUgQ0ZSIC9cbiAgLy8gbGVhZCB0aW1lIGFsbCBncm91cCBkZXBsb3ktc3RhZ2UgZXZlbnRzIGJ5IGVudmlyb25tZW50IG92ZXIgYSBjb21wbGV0ZWRfYXRcbiAgLy8gd2luZG93LiBUaGlzIGNvbXBvc2l0ZSBzZXJ2ZXMgdGhhdCBncm91cGVkIG9yZy1zY29wZWQgc2NhbiBkaXJlY3RseS5cbiAgLy8gQ3JlYXRlZCBieSBwb3N0Z3Jlcy1pbml0LnNxbC5cbiAgb3JnRW52Q29tcGxldGVkSWR4OiBpbmRleCgnZXZlbnRfb3JnX2Vudl9jb21wbGV0ZWRfaWR4JylcbiAgICAub24odGFibGUub3JnSWQsIHRhYmxlLmVudmlyb25tZW50LCB0YWJsZS5jb21wbGV0ZWRBdCksXG4gIC8vIFBlci1wbHVnaW4gcnVudGltZSByZXBvcnRpbmcgKHN1Y2Nlc3MgcmF0ZSAvIGR1cmF0aW9uIHBlciBwbHVnaW4gdmVyc2lvbikuXG4gIC8vIFBhcnRpYWw6IHRoZSBidWxrIG9mIG5vbi1wbHVnaW4gZXZlbnRzIGlzIG5ldmVyIGluZGV4ZWQuXG4gIHBsdWdpbklkeDogaW5kZXgoJ2V2ZW50X3BsdWdpbl9pZHgnKVxuICAgIC5vbih0YWJsZS5wbHVnaW5QdWJsaXNoZXIsIHRhYmxlLnBsdWdpbk5hbWUsIHRhYmxlLnBsdWdpblZlcnNpb24sIHRhYmxlLmNvbXBsZXRlZEF0KVxuICAgIC53aGVyZShzcWxgcGx1Z2luX25hbWUgSVMgTk9UIE5VTExgKSxcbiAgLy8gTGlzdGluZyBhZG9wdGlvbiAvIHN1Y2Nlc3MgcmF0ZSAocGx1Z2luIHN0YXRzIHN3ZWVwKSwga2V5ZWQgb24gdGhlIHB1Ymxpc2hlciBpZC5cbiAgcGx1Z2luUHVibGlzaGVySWRJZHg6IGluZGV4KCdldmVudF9wbHVnaW5fcHVibGlzaGVyX2lkX2lkeCcpXG4gICAgLm9uKHRhYmxlLnBsdWdpblB1Ymxpc2hlcklkLCB0YWJsZS5wbHVnaW5OYW1lLCB0YWJsZS5jb21wbGV0ZWRBdClcbiAgICAud2hlcmUoc3FsYHBsdWdpbl9wdWJsaXNoZXJfaWQgSVMgTk9UIE5VTExgKSxcbn0pKTtcblxuLyoqXG4gKiBNYW51YWwgcG9zdC1kZXBsb3kgb3V0Y29tZSBtYXJrZXJzLiBBIHVzZXIgbWFya3MgYSBkZXBsb3ltZW50XG4gKiBgZmFpbGVkYCAocHJvZHVjdGlvbiBpbmNpZGVudCBsaW5rZWQgdG8gYSBkZXBsb3kpIG9yIGByZXN0b3JlZGAgKHJlY292ZXJlZCkuXG4gKiBUaGVzZSBmZWVkIHRoZSBET1JBIHBvc3QtZGVwbG95IENoYW5nZSBGYWlsdXJlIFJhdGUgY29tcG9uZW50IGFuZCB0aGUgcmVhbFxuICogTVRUUiAocmVzdG9yZWQg4oiSIGRlcGxveWVkKS4gQ29ycmVsYXRlZCB0byBhIGRlcGxveSBleGVjdXRpb24gYnkgYGV4ZWN1dGlvbklkYC5cbiAqXG4gKiBAdGFibGUgZGVwbG95bWVudF9vdXRjb21lc1xuICovXG5leHBvcnQgY29uc3QgZGVwbG95bWVudE91dGNvbWUgPSBwZ1RhYmxlKCdkZXBsb3ltZW50X291dGNvbWVzJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICBleGVjdXRpb25JZDogdmFyY2hhcignZXhlY3V0aW9uX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgZW52aXJvbm1lbnQ6IHZhcmNoYXIoJ2Vudmlyb25tZW50JywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgb3V0Y29tZTogdmFyY2hhcignb3V0Y29tZScsIHsgbGVuZ3RoOiAyMCB9KS4kdHlwZTwnZmFpbGVkJyB8ICdyZXN0b3JlZCc+KCkubm90TnVsbCgpLFxuICBhdDogdGltZXN0YW1wKCdhdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLm5vdE51bGwoKSxcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSwgKHRhYmxlKSA9PiAoe1xuICBvcmdFbnZJZHg6IGluZGV4KCdkZXBsb3ltZW50X291dGNvbWVzX29yZ19lbnZfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmVudmlyb25tZW50KSxcbiAgZXhlY3V0aW9uSWR4OiBpbmRleCgnZGVwbG95bWVudF9vdXRjb21lc19leGVjdXRpb25faWR4Jykub24odGFibGUuZXhlY3V0aW9uSWQpLFxuICAvLyBJZGVtcG90ZW50IHJlLW1hcmtpbmc6IG9uZSByb3cgcGVyIChleGVjdXRpb24sIG91dGNvbWUpLiBSZS1wb3N0aW5nIHRoZSBzYW1lXG4gIC8vIG91dGNvbWUgZm9yIGEgZGVwbG95IGlzIGEgbm8tb3AvcmVmcmVzaCAob25Db25mbGljdERvVXBkYXRlIHRoZSBgYXRgKSwgc28gYVxuICAvLyBmYWlsZWTihpJyZXN0b3JlZCBwYWlyIGlzIHR3byByb3dzIHdoaWxlIGEgZHVwbGljYXRlIFBPU1QgZG9lc24ndCBkb3VibGUtY291bnQuXG4gIGV4ZWN1dGlvbk91dGNvbWVVbmlxdWU6IHVuaXF1ZUluZGV4KCdkZXBsb3ltZW50X291dGNvbWVzX2V4ZWN1dGlvbl9vdXRjb21lX3VuaXF1ZScpXG4gICAgLm9uKHRhYmxlLmV4ZWN1dGlvbklkLCB0YWJsZS5vdXRjb21lKSxcbn0pKTtcblxuLyoqXG4gKiBQZXItb3JnIGluZ2VzdGlvbiBoZWFsdGguIFRoZSBBV1MgZXZlbnRzIExhbWJkYSBwZXJpb2RpY2FsbHkgcG9zdHNcbiAqIGZvcndhcmRlZC9kcm9wcGVkIGNvdW50ZXJzICsgdGhlIGxhc3QgZXZlbnQgdGltZXN0YW1wIHNvIHRoZSBSZXBvcnRzIFVJIGNhblxuICogc2hvdyB3aGV0aGVyIGV2ZW50cyBhcmUgZmxvd2luZyAvIHN0YWxlIC8gZHJvcHBpbmcuIE9uZSByb3cgcGVyIG9yZy5cbiAqXG4gKiBAdGFibGUgaW5nZXN0X2hlYWx0aFxuICovXG5leHBvcnQgY29uc3QgaW5nZXN0SGVhbHRoID0gcGdUYWJsZSgnaW5nZXN0X2hlYWx0aCcsIHtcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkucHJpbWFyeUtleSgpLFxuICBsYXN0RXZlbnRBdDogdGltZXN0YW1wKCdsYXN0X2V2ZW50X2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGZvcndhcmRlZDogYmlnaW50KCdmb3J3YXJkZWQnLCB7IG1vZGU6ICdudW1iZXInIH0pLFxuICBkcm9wcGVkOiBiaWdpbnQoJ2Ryb3BwZWQnLCB7IG1vZGU6ICdudW1iZXInIH0pLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG59KTtcblxuLyoqXG4gKiBQcm9kdWN0aW9uIGluY2lkZW50cyBpbmdlc3RlZCBmcm9tIHRoZSBvcmcncyBpbmNpZGVudCB0b29saW5nLiBUaGVcbiAqIHVzZXIgcG9pbnRzIHRoZWlyIEFsZXJ0bWFuYWdlciAvIFBhZ2VyRHV0eSAvIERhdGFkb2cgd2ViaG9vayBhdFxuICogYFBPU1QgL2FwaS9yZXBvcnRzL2luY2lkZW50c2AgKG1hY2hpbmUgYHJlcG9ydGluZzppbmdlc3RgIHNjb3BlKS4gRWFjaCBpbmNpZGVudFxuICogY2FycmllcyBpdHMgZXh0ZXJuYWwgaWQsIHRoZSBhZmZlY3RlZCBgZW52aXJvbm1lbnRgLCB3aGVuIGl0IG9wZW5lZCwgYW5kIHdoZW5cbiAqIGl0IHdhcyByZXNvbHZlZCAobnVsbGFibGUg4oCUIGEgbGF0ZXIgcmVzb2x2ZSB1cGRhdGVzIGl0KS4gRE9SQSBjb3JyZWxhdGVzIGVhY2hcbiAqIGluY2lkZW50IHRvIHRoZSBtb3N0IHJlY2VudCBzdWNjZXNzZnVsIGRlcGxveSB0byBgZW52aXJvbm1lbnRgIHdpdGhpblxuICogYERPUkFfSU5DSURFTlRfV0lORE9XX0hPVVJTYCwgdHVybmluZyBpdCBpbnRvIGFuIGF1dG9tYXRlZCBwb3N0LWRlcGxveSBmYWlsdXJlXG4gKiAoQ2hhbmdlIEZhaWx1cmUgUmF0ZSkgYW5kIGEgcmVhbCByZWNvdmVyeSB0aW1lIChgcmVzb2x2ZWRfYXQg4oiSIG9wZW5lZF9hdGAgTVRUUikuXG4gKiBgaW5jaWRlbnRfaWRgIGlzIFVOSVFVRSBwZXIgb3JnIHNvIGEgcmVzb2x2ZSByZS1wb3N0IGlzIGFuIGlkZW1wb3RlbnQgdXBzZXJ0LlxuICpcbiAqIEB0YWJsZSBpbmNpZGVudHNcbiAqL1xuZXhwb3J0IGNvbnN0IGluY2lkZW50ID0gcGdUYWJsZSgnaW5jaWRlbnRzJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICAvLyBFeHRlcm5hbCBpbmNpZGVudCBpZCBmcm9tIHRoZSBzb3VyY2Ugc3lzdGVtIChQYWdlckR1dHkvRGF0YWRvZy9BbGVydG1hbmFnZXIpLlxuICAvLyBVbmlxdWUgUEVSIE9SRyAoc2VlIGluY2lkZW50T3JnVW5pcXVlKSDigJQgdGhlIGlkZW1wb3RlbmN5ICsgdXBzZXJ0IGtleS5cbiAgaW5jaWRlbnRJZDogdmFyY2hhcignaW5jaWRlbnRfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICAvLyBBZmZlY3RlZCBkZXBsb3kgZW52aXJvbm1lbnQgKGUuZy4gXCJwcm9kdWN0aW9uXCIpLiBDb3JyZWxhdGVkIHRvIGEgZGVwbG95IGVudi5cbiAgZW52aXJvbm1lbnQ6IHZhcmNoYXIoJ2Vudmlyb25tZW50JywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIG9wZW5lZEF0OiB0aW1lc3RhbXAoJ29wZW5lZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLm5vdE51bGwoKSxcbiAgLy8gTlVMTCB3aGlsZSB0aGUgaW5jaWRlbnQgaXMgb3BlbjsgYSBsYXRlciByZXNvbHZlIHdlYmhvb2sgc2V0cyBpdCAoaWRlbXBvdGVudFxuICAvLyB1cHNlcnQpLiBgcmVzb2x2ZWRfYXQg4oiSIG9wZW5lZF9hdGAgaXMgdGhlIHJlYWwgTVRUUiBmb3IgdGhlIGNvcnJlbGF0ZWQgZGVwbG95LlxuICByZXNvbHZlZEF0OiB0aW1lc3RhbXAoJ3Jlc29sdmVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIHNldmVyaXR5OiB2YXJjaGFyKCdzZXZlcml0eScsIHsgbGVuZ3RoOiA1MCB9KS5ub3ROdWxsKCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgLy8gQ29ycmVsYXRpb24gc2NhbjogbW9zdC1yZWNlbnQtZGVwbG95LWJlZm9yZS1vcGVuIGxvb2t1cHMgZ3JvdXAgYnkgKG9yZywgZW52KVxuICAvLyBhbmQgcmFuZ2Ugb24gb3BlbmVkX2F0LlxuICBvcmdFbnZPcGVuZWRJZHg6IGluZGV4KCdpbmNpZGVudHNfb3JnX2Vudl9vcGVuZWRfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmVudmlyb25tZW50LCB0YWJsZS5vcGVuZWRBdCksXG4gIC8vIElkZW1wb3RlbnQgdXBzZXJ0IC8gZGVkdXA6IG9uZSByb3cgcGVyIChvcmcsIGluY2lkZW50X2lkKS4gQSByZXNvbHZlIHJlLXBvc3RcbiAgLy8gdXBkYXRlcyByZXNvbHZlZF9hdCBpbnN0ZWFkIG9mIGluc2VydGluZyBhIGR1cGxpY2F0ZS5cbiAgb3JnSW5jaWRlbnRVbmlxdWU6IHVuaXF1ZUluZGV4KCdpbmNpZGVudHNfb3JnX2luY2lkZW50X3VuaXF1ZScpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5pbmNpZGVudElkKSxcbn0pKTtcblxuLyoqXG4gKiBQZXItb3JnIERPUkEgY29tcHV0YXRpb24gKyByZXRlbnRpb24gb3ZlcnJpZGVzLiBPbmUgcm93IHBlciBvcmcgKG9yZ19pZCBQSykuXG4gKiBgaW5jaWRlbnRXaW5kb3dIb3Vyc2Agb3ZlcnJpZGVzIHRoZSBnbG9iYWwgYERPUkFfSU5DSURFTlRfV0lORE9XX0hPVVJTYFxuICogdXNlZCB0byBjb3JyZWxhdGUgYW4gaW5nZXN0ZWQgaW5jaWRlbnQgdG8gdGhlIG1vc3QgcmVjZW50IHN1Y2Nlc3NmdWwgZGVwbG95LlxuICogYGV2ZW50UmV0ZW50aW9uRGF5c2AgLyBgZG9yYVJldGVudGlvbkRheXNgIG92ZXJyaWRlIHRoZSBnbG9iYWwgcmVwb3J0aW5nXG4gKiByZXRlbnRpb24gd2luZG93cyBmb3IgdGhlIHNwbGl0IHN3ZWVwIOKAlCBzdGFuZGFyZCBldmVudHMgKGBlbnZpcm9ubWVudCBJUyBOVUxMYClcbiAqIHZzIERPUkEgc291cmNlIChkZXBsb3kgc3RhZ2VzICsgYGRlcGxveW1lbnRfb3V0Y29tZXNgICsgYGluY2lkZW50c2ApLiBBbnkgTlVMTCAvXG4gKiBhYnNlbnQgdmFsdWUgZmFsbHMgYmFjayB0byBpdHMgZW52IGRlZmF1bHQuIFNldCBzZWxmLXNlcnZlIGJ5IGFuIG9yZyBhZG1pbiB2aWFcbiAqIGBQVVQgL2FwaS9yZXBvcnRzL3NldHRpbmdzL2luY2lkZW50c2AuIFRoaXMgdGFibGUgaXMgaXRzZWxmIG5ldmVyIHB1cmdlZC5cbiAqXG4gKiBAdGFibGUgZG9yYV9zZXR0aW5nc1xuICovXG5leHBvcnQgY29uc3QgZG9yYVNldHRpbmdzID0gcGdUYWJsZSgnZG9yYV9zZXR0aW5ncycsIHtcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkucHJpbWFyeUtleSgpLFxuICBpbmNpZGVudFdpbmRvd0hvdXJzOiBpbnRlZ2VyKCdpbmNpZGVudF93aW5kb3dfaG91cnMnKSxcbiAgLy8gUmV0ZW50aW9uIG92ZXJyaWRlcyAoZGF5cykuIE5VTEwg4oeSIHVzZSB0aGUgZ2xvYmFsIGVudiBkZWZhdWx0XG4gIC8vIChSRVBPUlRJTkdfRVZFTlRfUkVURU5USU9OX0RBWVMgLyBSRVBPUlRJTkdfRE9SQV9SRVRFTlRJT05fREFZUykuXG4gIGV2ZW50UmV0ZW50aW9uRGF5czogaW50ZWdlcignZXZlbnRfcmV0ZW50aW9uX2RheXMnKSxcbiAgZG9yYVJldGVudGlvbkRheXM6IGludGVnZXIoJ2RvcmFfcmV0ZW50aW9uX2RheXMnKSxcbiAgdXBkYXRlZEF0OiB0aW1lc3RhbXAoJ3VwZGF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSk7XG5cbi8qKlxuICogVHlwZVNjcmlwdCB0eXBlcyByZXByZXNlbnRpbmcgZGF0YWJhc2Ugcm93c1xuICovXG5leHBvcnQgdHlwZSBQaXBlbGluZSA9IHR5cGVvZiBwaXBlbGluZS4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBQaXBlbGluZUluc2VydCA9IHR5cGVvZiBwaXBlbGluZS4kaW5mZXJJbnNlcnQ7XG5cbmV4cG9ydCB0eXBlIFBpcGVsaW5lUmVnaXN0cnkgPSB0eXBlb2YgcGlwZWxpbmVSZWdpc3RyeS4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBQaXBlbGluZVJlZ2lzdHJ5SW5zZXJ0ID0gdHlwZW9mIHBpcGVsaW5lUmVnaXN0cnkuJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBQaXBlbGluZUV2ZW50ID0gdHlwZW9mIHBpcGVsaW5lRXZlbnQuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgUGlwZWxpbmVFdmVudEluc2VydCA9IHR5cGVvZiBwaXBlbGluZUV2ZW50LiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgRGVwbG95bWVudE91dGNvbWUgPSB0eXBlb2YgZGVwbG95bWVudE91dGNvbWUuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgRGVwbG95bWVudE91dGNvbWVJbnNlcnQgPSB0eXBlb2YgZGVwbG95bWVudE91dGNvbWUuJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBJbmdlc3RIZWFsdGggPSB0eXBlb2YgaW5nZXN0SGVhbHRoLiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIEluZ2VzdEhlYWx0aEluc2VydCA9IHR5cGVvZiBpbmdlc3RIZWFsdGguJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBJbmNpZGVudCA9IHR5cGVvZiBpbmNpZGVudC4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBJbmNpZGVudEluc2VydCA9IHR5cGVvZiBpbmNpZGVudC4kaW5mZXJJbnNlcnQ7XG5cbmV4cG9ydCB0eXBlIERvcmFTZXR0aW5ncyA9IHR5cGVvZiBkb3JhU2V0dGluZ3MuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgRG9yYVNldHRpbmdzSW5zZXJ0ID0gdHlwZW9mIGRvcmFTZXR0aW5ncy4kaW5mZXJJbnNlcnQ7XG5cbi8qKlxuICogSGVscGVyIHR5cGVzIGZvciB3b3JraW5nIHdpdGggcGFydGlhbCB1cGRhdGVzXG4gKi9cbmV4cG9ydCB0eXBlIFBpcGVsaW5lVXBkYXRlID0gUGFydGlhbDxPbWl0PFBpcGVsaW5lSW5zZXJ0LCAnaWQnIHwgJ2NyZWF0ZWRBdCcgfCAnY3JlYXRlZEJ5Jz4+O1xuIl19
|