@pipeline-builder/pipeline-data 3.4.131 → 4.0.2
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/README.md +1 -1
- package/lib/api/access-control-builder.d.ts +58 -15
- package/lib/api/access-control-builder.js +88 -76
- package/lib/api/crud-service.d.ts +3 -3
- package/lib/api/crud-service.js +14 -6
- package/lib/api/query-builders.d.ts +10 -17
- package/lib/api/query-builders.js +13 -20
- package/lib/api/reporting-service.d.ts +2 -0
- package/lib/api/reporting-service.js +9 -5
- package/lib/api/viewer-context.d.ts +29 -0
- package/lib/api/viewer-context.js +63 -0
- package/lib/core/query-filters.d.ts +11 -20
- package/lib/core/query-filters.js +2 -2
- package/lib/database/drizzle-schema.d.ts +12 -91
- package/lib/database/schema/compliance.d.ts +0 -41
- package/lib/database/schema/compliance.js +6 -6
- package/lib/database/schema/dashboard.d.ts +0 -19
- package/lib/database/schema/dashboard.js +1 -8
- package/lib/database/schema/message.d.ts +0 -21
- package/lib/database/schema/message.js +7 -7
- package/lib/database/schema/pipeline-template.d.ts +16 -6
- package/lib/database/schema/pipeline-template.js +21 -6
- package/lib/database/schema/pipeline.d.ts +5 -5
- package/lib/database/schema/pipeline.js +12 -6
- package/lib/database/schema/plugin.d.ts +6 -6
- package/lib/database/schema/plugin.js +13 -7
- package/lib/database/tenancy.d.ts +13 -5
- package/lib/database/tenancy.js +23 -16
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import {
|
|
3
|
+
import { SYSTEM_ORG_ID, } from '@pipeline-builder/api-core';
|
|
4
4
|
import { sql } from 'drizzle-orm';
|
|
5
5
|
import { boolean, varchar, pgTable, text, timestamp, uuid, jsonb, index, uniqueIndex } from 'drizzle-orm/pg-core';
|
|
6
6
|
/**
|
|
@@ -8,7 +8,17 @@ import { boolean, varchar, pgTable, text, timestamp, uuid, jsonb, index, uniqueI
|
|
|
8
8
|
* `props` is a BuilderProps body with `{{ vars.* }}` placeholders, and `inputs`
|
|
9
9
|
* declares the variables a developer fills in when instantiating it into a real
|
|
10
10
|
* pipeline. System-org public templates form the shared golden-path catalog
|
|
11
|
-
* (visible to every org, same pattern as sample
|
|
11
|
+
* (visible to every org, same pattern as the sample template catalog / compliance templates).
|
|
12
|
+
*
|
|
13
|
+
* Visibility ladder (three rungs, like `dashboards` — NOT the catalog-wide
|
|
14
|
+
* three-value `visibility` that pipelines/plugins carry):
|
|
15
|
+
* - `private` — only the author (`created_by`) can read/write it; a personal draft
|
|
16
|
+
* - `org` — anyone in the owning org can read it; `pipelines:write` edits it
|
|
17
|
+
* - `public` — shared beyond the org: a team also sees its parent org's public
|
|
18
|
+
* templates, and the system org's public templates are the shared
|
|
19
|
+
* golden-path catalog every org sees. Needs `pipelines:publish`.
|
|
20
|
+
* The read predicate lives in `buildPipelineTemplateConditions`; the write gate
|
|
21
|
+
* in api-core's `requireTemplateWriteAccess`.
|
|
12
22
|
*
|
|
13
23
|
* @table pipeline_templates
|
|
14
24
|
*/
|
|
@@ -37,8 +47,10 @@ export const pipelineTemplate = pgTable('pipeline_templates', {
|
|
|
37
47
|
criticality: varchar('criticality', { length: 10 }).$type(),
|
|
38
48
|
labels: jsonb('labels').$type().default({}).notNull(),
|
|
39
49
|
links: jsonb('links').$type().default([]).notNull(),
|
|
40
|
-
// Access and visibility
|
|
41
|
-
|
|
50
|
+
// Access and visibility — see the header for the ladder. Constrained at the
|
|
51
|
+
// SQL layer too via a CHECK in postgres-init.sql so a typo can't sneak past
|
|
52
|
+
// the application layer.
|
|
53
|
+
visibility: varchar('visibility', { length: 10 })
|
|
42
54
|
.$type()
|
|
43
55
|
.default('private')
|
|
44
56
|
.notNull(),
|
|
@@ -56,10 +68,13 @@ export const pipelineTemplate = pgTable('pipeline_templates', {
|
|
|
56
68
|
orgIdIdx: index('pipeline_template_org_id_idx').on(table.orgId),
|
|
57
69
|
activeIdx: index('pipeline_template_active_idx').on(table.isActive),
|
|
58
70
|
categoryIdx: index('pipeline_template_category_idx').on(table.category),
|
|
59
|
-
|
|
71
|
+
// Listing is org-scoped, visibility-filtered and active-only, so all three go in.
|
|
72
|
+
orgVisibilityActiveIdx: index('pipeline_template_org_visibility_active_idx').on(table.orgId, table.visibility, table.isActive),
|
|
73
|
+
// Drives the "my private drafts" leg of the visibility predicate.
|
|
74
|
+
createdByIdx: index('pipeline_template_created_by_idx').on(table.orgId, table.createdBy),
|
|
60
75
|
ownerIdx: index('pipeline_template_owner_idx').on(table.orgId, table.ownerId),
|
|
61
76
|
lifecycleIdx: index('pipeline_template_lifecycle_idx').on(table.orgId, table.lifecycle),
|
|
62
77
|
// One template name per org.
|
|
63
78
|
nameOrgUnique: uniqueIndex('pipeline_template_name_org_unique').on(table.name, table.orgId),
|
|
64
79
|
}));
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtdGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YWJhc2Uvc2NoZW1hL3BpcGVsaW5lLXRlbXBsYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUNMLGNBQWMsRUFDZCxhQUFhLEdBT2QsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWxIOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixFQUFFO0lBQzVELEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsYUFBYSxFQUFFO0lBRTNDLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUUxRSxRQUFRO0lBQ1IsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxFQUFFO0lBQzlELFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxFQUFFO0lBQ2pGLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUM5RCxTQUFT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QUUsS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDL0QsU0FBUyxFQUFFLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQ25FLFdBQVcsRUFBRSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUN2RSxrQkFBa0IsRUFBRSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDMUgsUUFBUSxFQUFFLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDN0UsWUFBWSxFQUFFLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDdkYsNkJBQTZCO0lBQzdCLGFBQWEsRUFBRSxXQUFXLENBQUMsbUNBQW1DLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDO0NBQzVGLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7XG4gIEFjY2Vzc01vZGlmaWVyLFxuICBTWVNURU1fT1JHX0lELFxuICB0eXBlIENyaXRpY2FsaXR5LFxuICB0eXBlIEVudGl0eUxhYmVscyxcbiAgdHlwZSBFbnRpdHlMaW5rLFxuICB0eXBlIExpZmVjeWNsZSxcbiAgdHlwZSBPd25lclR5cGUsXG4gIHR5cGUgVGVtcGxhdGVJbnB1dCxcbn0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgc3FsIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgYm9vbGVhbiwgdmFyY2hhciwgcGdUYWJsZSwgdGV4dCwgdGltZXN0YW1wLCB1dWlkLCBqc29uYiwgaW5kZXgsIHVuaXF1ZUluZGV4IH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSc7XG5cbi8qKlxuICogR29sZGVuLXBhdGggcGlwZWxpbmUgdGVtcGxhdGVzLiBBIHRlbXBsYXRlIGlzIGEgcGFyYW1ldGVyaXplZCBzdGFydGVyOiBpdHNcbiAqIGBwcm9wc2AgaXMgYSBCdWlsZGVyUHJvcHMgYm9keSB3aXRoIGB7eyB2YXJzLiogfX1gIHBsYWNlaG9sZGVycywgYW5kIGBpbnB1dHNgXG4gKiBkZWNsYXJlcyB0aGUgdmFyaWFibGVzIGEgZGV2ZWxvcGVyIGZpbGxzIGluIHdoZW4gaW5zdGFudGlhdGluZyBpdCBpbnRvIGEgcmVhbFxuICogcGlwZWxpbmUuIFN5c3RlbS1vcmcgcHVibGljIHRlbXBsYXRlcyBmb3JtIHRoZSBzaGFyZWQgZ29sZGVuLXBhdGggY2F0YWxvZ1xuICogKHZpc2libGUgdG8gZXZlcnkgb3JnLCBzYW1lIHBhdHRlcm4gYXMgc2FtcGxlIHBpcGVsaW5lcyAvIGNvbXBsaWFuY2UgdGVtcGxhdGVzKS5cbiAqXG4gKiBAdGFibGUgcGlwZWxpbmVfdGVtcGxhdGVzXG4gKi9cbmV4cG9ydCBjb25zdCBwaXBlbGluZVRlbXBsYXRlID0gcGdUYWJsZSgncGlwZWxpbmVfdGVtcGxhdGVzJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLmRlZmF1bHQoU1lTVEVNX09SR19JRCkubm90TnVsbCgpLFxuXG4gIC8vIEF1ZGl0XG4gIGNyZWF0ZWRCeTogdGV4dCgnY3JlYXRlZF9ieScpLmRlZmF1bHQoU1lTVEVNX09SR19JRCkubm90TnVsbCgpLFxuICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCgnY3JlYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG4gIHVwZGF0ZWRCeTogdGV4dCgndXBkYXRlZF9ieScpLmRlZmF1bHQoU1lTVEVNX09SR19JRCkubm90TnVsbCgpLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG5cbiAgLy8gQ29yZSB0ZW1wbGF0ZSBpbmZvcm1hdGlvblxuICBuYW1lOiB2YXJjaGFyKCduYW1lJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIGRlc2NyaXB0aW9uOiB0ZXh0KCdkZXNjcmlwdGlvbicpLFxuICBrZXl3b3JkczoganNvbmIoJ2tleXdvcmRzJykuJHR5cGU8c3RyaW5nW10+KCkuZGVmYXVsdChbXSkubm90TnVsbCgpLFxuICBjYXRlZ29yeTogdmFyY2hhcignY2F0ZWdvcnknLCB7IGxlbmd0aDogNTAgfSkuZGVmYXVsdCgnZ2VuZXJhbCcpLm5vdE51bGwoKSxcblxuICAvLyBUZW1wbGF0ZSBib2R5OiBhIEJ1aWxkZXJQcm9wcyB3aXRoIGB7eyB2YXJzLiogfX1gIHBsYWNlaG9sZGVycy4gVHlwZWQgbG9vc2VseVxuICAvLyBiZWNhdXNlIGEgdGVtcGxhdGUgbWF5IG9taXQgY29uY3JldGUgcHJvamVjdC9vcmdhbml6YXRpb24gdW50aWwgaW5zdGFudGlhdGVkLlxuICBwcm9wczoganNvbmIoJ3Byb3BzJykuJHR5cGU8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KCkubm90TnVsbCgpLFxuICAvLyBEZWNsYXJlZCBpbnB1dHMgKHRoZSBgdmFycy4qYCBjb250cmFjdCBhIGRldmVsb3BlciBmaWxscyBpbiB0byBpbnN0YW50aWF0ZSkuXG4gIGlucHV0czoganNvbmIoJ2lucHV0cycpLiR0eXBlPFRlbXBsYXRlSW5wdXRbXT4oKS5kZWZhdWx0KFtdKS5ub3ROdWxsKCksXG5cbiAgLy8gRGV2ZWxvcGVyLXBvcnRhbCBjYXRhbG9nIG1ldGFkYXRhIChvd25lcnNoaXAgLyBsaWZlY3ljbGUgLyBjbGFzc2lmaWNhdGlvbilcbiAgb3duZXJJZDogdGV4dCgnb3duZXJfaWQnKSxcbiAgb3duZXJUeXBlOiB2YXJjaGFyKCdvd25lcl90eXBlJywgeyBsZW5ndGg6IDEwIH0pLiR0eXBlPE93bmVyVHlwZT4oKSxcbiAgbGlmZWN5Y2xlOiB2YXJjaGFyKCdsaWZlY3ljbGUnLCB7IGxlbmd0aDogMjAgfSkuJHR5cGU8TGlmZWN5Y2xlPigpLmRlZmF1bHQoJ3Byb2R1Y3Rpb24nIGFzIExpZmVjeWNsZSkubm90TnVsbCgpLFxuICBjcml0aWNhbGl0eTogdmFyY2hhcignY3JpdGljYWxpdHknLCB7IGxlbmd0aDogMTAgfSkuJHR5cGU8Q3JpdGljYWxpdHk+KCksXG4gIGxhYmVsczoganNvbmIoJ2xhYmVscycpLiR0eXBlPEVudGl0eUxhYmVscz4oKS5kZWZhdWx0KHt9KS5ub3ROdWxsKCksXG4gIGxpbmtzOiBqc29uYignbGlua3MnKS4kdHlwZTxFbnRpdHlMaW5rW10+KCkuZGVmYXVsdChbXSkubm90TnVsbCgpLFxuXG4gIC8vIEFjY2VzcyBhbmQgdmlzaWJpbGl0eVxuICBhY2Nlc3NNb2RpZmllcjogdmFyY2hhcignYWNjZXNzX21vZGlmaWVyJywgeyBsZW5ndGg6IDEwIH0pXG4gICAgLiR0eXBlPEFjY2Vzc01vZGlmaWVyPigpXG4gICAgLmRlZmF1bHQoJ3ByaXZhdGUnIGFzIEFjY2Vzc01vZGlmaWVyKVxuICAgIC5ub3ROdWxsKCksXG4gIGlzRGVmYXVsdDogYm9vbGVhbignaXNfZGVmYXVsdCcpLmRlZmF1bHQoZmFsc2UpLm5vdE51bGwoKSxcbiAgaXNBY3RpdmU6IGJvb2xlYW4oJ2lzX2FjdGl2ZScpLmRlZmF1bHQodHJ1ZSkubm90TnVsbCgpLFxuXG4gIC8vIFNvZnQgZGVsZXRlXG4gIGRlbGV0ZWRBdDogdGltZXN0YW1wKCdkZWxldGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGRlbGV0ZWRCeTogdGV4dCgnZGVsZXRlZF9ieScpLFxuICAvLyBTb2Z0LWRlbGV0ZSBwdXJnZSBkZWFkbGluZTogdGhlIHJldGVudGlvbiBzd2VlcCBoYXJkLWRlbGV0ZXMgdG9tYnN0b25lZFxuICAvLyByb3dzIG9uY2UgYHB1cmdlX2FmdGVyYCBoYXMgcGFzc2VkIChzZXQgb24gZGVsZXRlIGFsb25nc2lkZSBkZWxldGVkX2F0KS5cbiAgcHVyZ2VBZnRlcjogdGltZXN0YW1wKCdwdXJnZV9hZnRlcicsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxufSwgKHRhYmxlKSA9PiAoe1xuICAvLyBQYXJ0aWFsIGluZGV4IG92ZXIganVzdCB0aGUgdG9tYnN0b25lcyDigJQgZHJpdmVzIHRoZSByZXRlbnRpb24gcHVyZ2Ugc3dlZXAuXG4gIHB1cmdlSWR4OiBpbmRleCgncGlwZWxpbmVfdGVtcGxhdGVfcHVyZ2VfaWR4Jykub24odGFibGUucHVyZ2VBZnRlcikud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTk9UIE5VTExgKSxcbiAgb3JnSWRJZHg6IGluZGV4KCdwaXBlbGluZV90ZW1wbGF0ZV9vcmdfaWRfaWR4Jykub24odGFibGUub3JnSWQpLFxuICBhY3RpdmVJZHg6IGluZGV4KCdwaXBlbGluZV90ZW1wbGF0ZV9hY3RpdmVfaWR4Jykub24odGFibGUuaXNBY3RpdmUpLFxuICBjYXRlZ29yeUlkeDogaW5kZXgoJ3BpcGVsaW5lX3RlbXBsYXRlX2NhdGVnb3J5X2lkeCcpLm9uKHRhYmxlLmNhdGVnb3J5KSxcbiAgb3JnQWNjZXNzQWN0aXZlSWR4OiBpbmRleCgncGlwZWxpbmVfdGVtcGxhdGVfb3JnX2FjY2Vzc19hY3RpdmVfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmFjY2Vzc01vZGlmaWVyLCB0YWJsZS5pc0FjdGl2ZSksXG4gIG93bmVySWR4OiBpbmRleCgncGlwZWxpbmVfdGVtcGxhdGVfb3duZXJfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLm93bmVySWQpLFxuICBsaWZlY3ljbGVJZHg6IGluZGV4KCdwaXBlbGluZV90ZW1wbGF0ZV9saWZlY3ljbGVfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmxpZmVjeWNsZSksXG4gIC8vIE9uZSB0ZW1wbGF0ZSBuYW1lIHBlciBvcmcuXG4gIG5hbWVPcmdVbmlxdWU6IHVuaXF1ZUluZGV4KCdwaXBlbGluZV90ZW1wbGF0ZV9uYW1lX29yZ191bmlxdWUnKS5vbih0YWJsZS5uYW1lLCB0YWJsZS5vcmdJZCksXG59KSk7XG5cbmV4cG9ydCB0eXBlIFBpcGVsaW5lVGVtcGxhdGUgPSB0eXBlb2YgcGlwZWxpbmVUZW1wbGF0ZS4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBQaXBlbGluZVRlbXBsYXRlSW5zZXJ0ID0gdHlwZW9mIHBpcGVsaW5lVGVtcGxhdGUuJGluZmVySW5zZXJ0O1xuZXhwb3J0IHR5cGUgUGlwZWxpbmVUZW1wbGF0ZVVwZGF0ZSA9IFBhcnRpYWw8T21pdDxQaXBlbGluZVRlbXBsYXRlSW5zZXJ0LCAnaWQnIHwgJ2NyZWF0ZWRBdCcgfCAnY3JlYXRlZEJ5Jz4+O1xuIl19
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtdGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YWJhc2Uvc2NoZW1hL3BpcGVsaW5lLXRlbXBsYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUNMLGFBQWEsR0FRZCxNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEg7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRTtJQUM1RCxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLGFBQWEsRUFBRTtJQUUzQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLEVBQUU7SUFFMUUsUUFBUTtJQUNSLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUM5RCxTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sRUFBRTtJQUNqRixTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLEVBQUU7SUFDOUQsU0FBUyxFQUFFLFNBQVMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLEVBQUU7SUFFakYsNEJBQTRCO0lBQzVCLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0lBQ2hELFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQ2hDLFFBQVEsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUNuRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUU7SUFFMUUsZ0ZBQWdGO0lBQ2hGLGdGQUFnRjtJQUNoRixLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBMkIsQ0FBQyxPQUFPLEVBQUU7SUFDaEUsK0VBQStFO0lBQy9FLE1BQU0sRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxFQUFtQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7SUFFdEUsNkVBQTZFO0lBQzdFLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLFNBQVMsRUFBRSxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFhO0lBQ25FLFNBQVMsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFhLENBQUMsT0FBTyxDQUFDLFlBQXlCLENBQUMsQ0FBQyxPQUFPLEVBQUU7SUFDL0csV0FBVyxFQUFFLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQWU7SUFDeEUsTUFBTSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUNuRSxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBZ0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0lBRWpFLDRFQUE0RTtJQUM1RSw0RUFBNEU7SUFDNUUseUJBQXlCO0lBQ3pCLFVBQVUsRUFBRSxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO1NBQzlDLEtBQUssRUFBYztTQUNuQixPQUFPLENBQUMsU0FBUyxDQUFDO1NBQ2xCLE9BQU8sRUFBRTtJQUNaLFNBQVMsRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUN6RCxRQUFRLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUU7SUFFdEQsY0FBYztJQUNkLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzFELFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLDBFQUEwRTtJQUMxRSwyRUFBMkU7SUFDM0UsVUFBVSxFQUFFLFNBQVMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7Q0FDN0QsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNiLDZFQUE2RTtJQUM3RSxRQUFRLEVBQUUsS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFBLHdCQUF3QixDQUFDO0lBQ3RHLFFBQVEsRUFBRSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUMvRCxTQUFTLEVBQUUsS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDbkUsV0FBVyxFQUFFLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQ3ZFLGtGQUFrRjtJQUNsRixzQkFBc0IsRUFBRSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDOUgsa0VBQWtFO0lBQ2xFLFlBQVksRUFBRSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDO0lBQ3hGLFFBQVEsRUFBRSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDO0lBQzdFLFlBQVksRUFBRSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDO0lBQ3ZGLDZCQUE2QjtJQUM3QixhQUFhLEVBQUUsV0FBVyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztDQUM1RixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQge1xuICBTWVNURU1fT1JHX0lELFxuICB0eXBlIENyaXRpY2FsaXR5LFxuICB0eXBlIEVudGl0eUxhYmVscyxcbiAgdHlwZSBFbnRpdHlMaW5rLFxuICB0eXBlIExpZmVjeWNsZSxcbiAgdHlwZSBPd25lclR5cGUsXG4gIHR5cGUgVGVtcGxhdGVJbnB1dCxcbiAgdHlwZSBWaXNpYmlsaXR5LFxufSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBzcWwgfSBmcm9tICdkcml6emxlLW9ybSc7XG5pbXBvcnQgeyBib29sZWFuLCB2YXJjaGFyLCBwZ1RhYmxlLCB0ZXh0LCB0aW1lc3RhbXAsIHV1aWQsIGpzb25iLCBpbmRleCwgdW5pcXVlSW5kZXggfSBmcm9tICdkcml6emxlLW9ybS9wZy1jb3JlJztcblxuLyoqXG4gKiBHb2xkZW4tcGF0aCBwaXBlbGluZSB0ZW1wbGF0ZXMuIEEgdGVtcGxhdGUgaXMgYSBwYXJhbWV0ZXJpemVkIHN0YXJ0ZXI6IGl0c1xuICogYHByb3BzYCBpcyBhIEJ1aWxkZXJQcm9wcyBib2R5IHdpdGggYHt7IHZhcnMuKiB9fWAgcGxhY2Vob2xkZXJzLCBhbmQgYGlucHV0c2BcbiAqIGRlY2xhcmVzIHRoZSB2YXJpYWJsZXMgYSBkZXZlbG9wZXIgZmlsbHMgaW4gd2hlbiBpbnN0YW50aWF0aW5nIGl0IGludG8gYSByZWFsXG4gKiBwaXBlbGluZS4gU3lzdGVtLW9yZyBwdWJsaWMgdGVtcGxhdGVzIGZvcm0gdGhlIHNoYXJlZCBnb2xkZW4tcGF0aCBjYXRhbG9nXG4gKiAodmlzaWJsZSB0byBldmVyeSBvcmcsIHNhbWUgcGF0dGVybiBhcyB0aGUgc2FtcGxlIHRlbXBsYXRlIGNhdGFsb2cgLyBjb21wbGlhbmNlIHRlbXBsYXRlcykuXG4gKlxuICogVmlzaWJpbGl0eSBsYWRkZXIgKHRocmVlIHJ1bmdzLCBsaWtlIGBkYXNoYm9hcmRzYCDigJQgTk9UIHRoZSBjYXRhbG9nLXdpZGVcbiAqIHRocmVlLXZhbHVlIGB2aXNpYmlsaXR5YCB0aGF0IHBpcGVsaW5lcy9wbHVnaW5zIGNhcnJ5KTpcbiAqIC0gYHByaXZhdGVgIOKAlCBvbmx5IHRoZSBhdXRob3IgKGBjcmVhdGVkX2J5YCkgY2FuIHJlYWQvd3JpdGUgaXQ7IGEgcGVyc29uYWwgZHJhZnRcbiAqIC0gYG9yZ2AgICAgIOKAlCBhbnlvbmUgaW4gdGhlIG93bmluZyBvcmcgY2FuIHJlYWQgaXQ7IGBwaXBlbGluZXM6d3JpdGVgIGVkaXRzIGl0XG4gKiAtIGBwdWJsaWNgICDigJQgc2hhcmVkIGJleW9uZCB0aGUgb3JnOiBhIHRlYW0gYWxzbyBzZWVzIGl0cyBwYXJlbnQgb3JnJ3MgcHVibGljXG4gKiAgICAgICAgICAgICAgIHRlbXBsYXRlcywgYW5kIHRoZSBzeXN0ZW0gb3JnJ3MgcHVibGljIHRlbXBsYXRlcyBhcmUgdGhlIHNoYXJlZFxuICogICAgICAgICAgICAgICBnb2xkZW4tcGF0aCBjYXRhbG9nIGV2ZXJ5IG9yZyBzZWVzLiBOZWVkcyBgcGlwZWxpbmVzOnB1Ymxpc2hgLlxuICogVGhlIHJlYWQgcHJlZGljYXRlIGxpdmVzIGluIGBidWlsZFBpcGVsaW5lVGVtcGxhdGVDb25kaXRpb25zYDsgdGhlIHdyaXRlIGdhdGVcbiAqIGluIGFwaS1jb3JlJ3MgYHJlcXVpcmVUZW1wbGF0ZVdyaXRlQWNjZXNzYC5cbiAqXG4gKiBAdGFibGUgcGlwZWxpbmVfdGVtcGxhdGVzXG4gKi9cbmV4cG9ydCBjb25zdCBwaXBlbGluZVRlbXBsYXRlID0gcGdUYWJsZSgncGlwZWxpbmVfdGVtcGxhdGVzJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLmRlZmF1bHQoU1lTVEVNX09SR19JRCkubm90TnVsbCgpLFxuXG4gIC8vIEF1ZGl0XG4gIGNyZWF0ZWRCeTogdGV4dCgnY3JlYXRlZF9ieScpLmRlZmF1bHQoU1lTVEVNX09SR19JRCkubm90TnVsbCgpLFxuICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCgnY3JlYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG4gIHVwZGF0ZWRCeTogdGV4dCgndXBkYXRlZF9ieScpLmRlZmF1bHQoU1lTVEVNX09SR19JRCkubm90TnVsbCgpLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG5cbiAgLy8gQ29yZSB0ZW1wbGF0ZSBpbmZvcm1hdGlvblxuICBuYW1lOiB2YXJjaGFyKCduYW1lJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIGRlc2NyaXB0aW9uOiB0ZXh0KCdkZXNjcmlwdGlvbicpLFxuICBrZXl3b3JkczoganNvbmIoJ2tleXdvcmRzJykuJHR5cGU8c3RyaW5nW10+KCkuZGVmYXVsdChbXSkubm90TnVsbCgpLFxuICBjYXRlZ29yeTogdmFyY2hhcignY2F0ZWdvcnknLCB7IGxlbmd0aDogNTAgfSkuZGVmYXVsdCgnZ2VuZXJhbCcpLm5vdE51bGwoKSxcblxuICAvLyBUZW1wbGF0ZSBib2R5OiBhIEJ1aWxkZXJQcm9wcyB3aXRoIGB7eyB2YXJzLiogfX1gIHBsYWNlaG9sZGVycy4gVHlwZWQgbG9vc2VseVxuICAvLyBiZWNhdXNlIGEgdGVtcGxhdGUgbWF5IG9taXQgY29uY3JldGUgcHJvamVjdC9vcmdhbml6YXRpb24gdW50aWwgaW5zdGFudGlhdGVkLlxuICBwcm9wczoganNvbmIoJ3Byb3BzJykuJHR5cGU8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KCkubm90TnVsbCgpLFxuICAvLyBEZWNsYXJlZCBpbnB1dHMgKHRoZSBgdmFycy4qYCBjb250cmFjdCBhIGRldmVsb3BlciBmaWxscyBpbiB0byBpbnN0YW50aWF0ZSkuXG4gIGlucHV0czoganNvbmIoJ2lucHV0cycpLiR0eXBlPFRlbXBsYXRlSW5wdXRbXT4oKS5kZWZhdWx0KFtdKS5ub3ROdWxsKCksXG5cbiAgLy8gRGV2ZWxvcGVyLXBvcnRhbCBjYXRhbG9nIG1ldGFkYXRhIChvd25lcnNoaXAgLyBsaWZlY3ljbGUgLyBjbGFzc2lmaWNhdGlvbilcbiAgb3duZXJJZDogdGV4dCgnb3duZXJfaWQnKSxcbiAgb3duZXJUeXBlOiB2YXJjaGFyKCdvd25lcl90eXBlJywgeyBsZW5ndGg6IDEwIH0pLiR0eXBlPE93bmVyVHlwZT4oKSxcbiAgbGlmZWN5Y2xlOiB2YXJjaGFyKCdsaWZlY3ljbGUnLCB7IGxlbmd0aDogMjAgfSkuJHR5cGU8TGlmZWN5Y2xlPigpLmRlZmF1bHQoJ3Byb2R1Y3Rpb24nIGFzIExpZmVjeWNsZSkubm90TnVsbCgpLFxuICBjcml0aWNhbGl0eTogdmFyY2hhcignY3JpdGljYWxpdHknLCB7IGxlbmd0aDogMTAgfSkuJHR5cGU8Q3JpdGljYWxpdHk+KCksXG4gIGxhYmVsczoganNvbmIoJ2xhYmVscycpLiR0eXBlPEVudGl0eUxhYmVscz4oKS5kZWZhdWx0KHt9KS5ub3ROdWxsKCksXG4gIGxpbmtzOiBqc29uYignbGlua3MnKS4kdHlwZTxFbnRpdHlMaW5rW10+KCkuZGVmYXVsdChbXSkubm90TnVsbCgpLFxuXG4gIC8vIEFjY2VzcyBhbmQgdmlzaWJpbGl0eSDigJQgc2VlIHRoZSBoZWFkZXIgZm9yIHRoZSBsYWRkZXIuIENvbnN0cmFpbmVkIGF0IHRoZVxuICAvLyBTUUwgbGF5ZXIgdG9vIHZpYSBhIENIRUNLIGluIHBvc3RncmVzLWluaXQuc3FsIHNvIGEgdHlwbyBjYW4ndCBzbmVhayBwYXN0XG4gIC8vIHRoZSBhcHBsaWNhdGlvbiBsYXllci5cbiAgdmlzaWJpbGl0eTogdmFyY2hhcigndmlzaWJpbGl0eScsIHsgbGVuZ3RoOiAxMCB9KVxuICAgIC4kdHlwZTxWaXNpYmlsaXR5PigpXG4gICAgLmRlZmF1bHQoJ3ByaXZhdGUnKVxuICAgIC5ub3ROdWxsKCksXG4gIGlzRGVmYXVsdDogYm9vbGVhbignaXNfZGVmYXVsdCcpLmRlZmF1bHQoZmFsc2UpLm5vdE51bGwoKSxcbiAgaXNBY3RpdmU6IGJvb2xlYW4oJ2lzX2FjdGl2ZScpLmRlZmF1bHQodHJ1ZSkubm90TnVsbCgpLFxuXG4gIC8vIFNvZnQgZGVsZXRlXG4gIGRlbGV0ZWRBdDogdGltZXN0YW1wKCdkZWxldGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGRlbGV0ZWRCeTogdGV4dCgnZGVsZXRlZF9ieScpLFxuICAvLyBTb2Z0LWRlbGV0ZSBwdXJnZSBkZWFkbGluZTogdGhlIHJldGVudGlvbiBzd2VlcCBoYXJkLWRlbGV0ZXMgdG9tYnN0b25lZFxuICAvLyByb3dzIG9uY2UgYHB1cmdlX2FmdGVyYCBoYXMgcGFzc2VkIChzZXQgb24gZGVsZXRlIGFsb25nc2lkZSBkZWxldGVkX2F0KS5cbiAgcHVyZ2VBZnRlcjogdGltZXN0YW1wKCdwdXJnZV9hZnRlcicsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxufSwgKHRhYmxlKSA9PiAoe1xuICAvLyBQYXJ0aWFsIGluZGV4IG92ZXIganVzdCB0aGUgdG9tYnN0b25lcyDigJQgZHJpdmVzIHRoZSByZXRlbnRpb24gcHVyZ2Ugc3dlZXAuXG4gIHB1cmdlSWR4OiBpbmRleCgncGlwZWxpbmVfdGVtcGxhdGVfcHVyZ2VfaWR4Jykub24odGFibGUucHVyZ2VBZnRlcikud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTk9UIE5VTExgKSxcbiAgb3JnSWRJZHg6IGluZGV4KCdwaXBlbGluZV90ZW1wbGF0ZV9vcmdfaWRfaWR4Jykub24odGFibGUub3JnSWQpLFxuICBhY3RpdmVJZHg6IGluZGV4KCdwaXBlbGluZV90ZW1wbGF0ZV9hY3RpdmVfaWR4Jykub24odGFibGUuaXNBY3RpdmUpLFxuICBjYXRlZ29yeUlkeDogaW5kZXgoJ3BpcGVsaW5lX3RlbXBsYXRlX2NhdGVnb3J5X2lkeCcpLm9uKHRhYmxlLmNhdGVnb3J5KSxcbiAgLy8gTGlzdGluZyBpcyBvcmctc2NvcGVkLCB2aXNpYmlsaXR5LWZpbHRlcmVkIGFuZCBhY3RpdmUtb25seSwgc28gYWxsIHRocmVlIGdvIGluLlxuICBvcmdWaXNpYmlsaXR5QWN0aXZlSWR4OiBpbmRleCgncGlwZWxpbmVfdGVtcGxhdGVfb3JnX3Zpc2liaWxpdHlfYWN0aXZlX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS52aXNpYmlsaXR5LCB0YWJsZS5pc0FjdGl2ZSksXG4gIC8vIERyaXZlcyB0aGUgXCJteSBwcml2YXRlIGRyYWZ0c1wiIGxlZyBvZiB0aGUgdmlzaWJpbGl0eSBwcmVkaWNhdGUuXG4gIGNyZWF0ZWRCeUlkeDogaW5kZXgoJ3BpcGVsaW5lX3RlbXBsYXRlX2NyZWF0ZWRfYnlfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmNyZWF0ZWRCeSksXG4gIG93bmVySWR4OiBpbmRleCgncGlwZWxpbmVfdGVtcGxhdGVfb3duZXJfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLm93bmVySWQpLFxuICBsaWZlY3ljbGVJZHg6IGluZGV4KCdwaXBlbGluZV90ZW1wbGF0ZV9saWZlY3ljbGVfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmxpZmVjeWNsZSksXG4gIC8vIE9uZSB0ZW1wbGF0ZSBuYW1lIHBlciBvcmcuXG4gIG5hbWVPcmdVbmlxdWU6IHVuaXF1ZUluZGV4KCdwaXBlbGluZV90ZW1wbGF0ZV9uYW1lX29yZ191bmlxdWUnKS5vbih0YWJsZS5uYW1lLCB0YWJsZS5vcmdJZCksXG59KSk7XG5cbmV4cG9ydCB0eXBlIFBpcGVsaW5lVGVtcGxhdGUgPSB0eXBlb2YgcGlwZWxpbmVUZW1wbGF0ZS4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBQaXBlbGluZVRlbXBsYXRlSW5zZXJ0ID0gdHlwZW9mIHBpcGVsaW5lVGVtcGxhdGUuJGluZmVySW5zZXJ0O1xuZXhwb3J0IHR5cGUgUGlwZWxpbmVUZW1wbGF0ZVVwZGF0ZSA9IFBhcnRpYWw8T21pdDxQaXBlbGluZVRlbXBsYXRlSW5zZXJ0LCAnaWQnIHwgJ2NyZWF0ZWRBdCcgfCAnY3JlYXRlZEJ5Jz4+O1xuIl19
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type EntityLabels, type EntityLink, type MetaDataType } from '@pipeline-builder/api-core';
|
|
2
2
|
/**
|
|
3
3
|
* Pipeline builder configuration properties stored in database.
|
|
4
4
|
* Mirrors the canonical BuilderProps from pipeline-core (JSON-serializable form).
|
|
@@ -367,12 +367,12 @@ export declare const pipeline: import("drizzle-orm/pg-core").PgTableWithColumns<
|
|
|
367
367
|
}, {}, {
|
|
368
368
|
$type: EntityLink[];
|
|
369
369
|
}>;
|
|
370
|
-
|
|
371
|
-
name: "
|
|
370
|
+
visibility: import("drizzle-orm/pg-core").PgColumn<{
|
|
371
|
+
name: "visibility";
|
|
372
372
|
tableName: "pipelines";
|
|
373
373
|
dataType: "string";
|
|
374
374
|
columnType: "PgVarchar";
|
|
375
|
-
data:
|
|
375
|
+
data: "org" | "private" | "public";
|
|
376
376
|
driverParam: string;
|
|
377
377
|
notNull: true;
|
|
378
378
|
hasDefault: true;
|
|
@@ -385,7 +385,7 @@ export declare const pipeline: import("drizzle-orm/pg-core").PgTableWithColumns<
|
|
|
385
385
|
generated: undefined;
|
|
386
386
|
}, {}, {
|
|
387
387
|
length: 10;
|
|
388
|
-
$type:
|
|
388
|
+
$type: "org" | "private" | "public";
|
|
389
389
|
}>;
|
|
390
390
|
isDefault: import("drizzle-orm/pg-core").PgColumn<{
|
|
391
391
|
name: "is_default";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import {
|
|
3
|
+
import { SYSTEM_ORG_ID, } from '@pipeline-builder/api-core';
|
|
4
4
|
import { sql } from 'drizzle-orm';
|
|
5
5
|
import { bigint, boolean, integer, varchar, pgTable, text, timestamp, uuid, jsonb, index, uniqueIndex } from 'drizzle-orm/pg-core';
|
|
6
6
|
/**
|
|
@@ -67,8 +67,12 @@ export const pipeline = pgTable('pipelines', {
|
|
|
67
67
|
.$type()
|
|
68
68
|
.default([])
|
|
69
69
|
.notNull(),
|
|
70
|
-
// Access and visibility
|
|
71
|
-
|
|
70
|
+
// Access and visibility — the shared three-rung ladder (see api-core's
|
|
71
|
+
// `Visibility`): `private` is author-only (`created_by`), `org` is the whole
|
|
72
|
+
// owning org, `public` reaches the org's teams and — from the system org —
|
|
73
|
+
// every org. Constrained at the SQL layer too via a CHECK in postgres-init.sql
|
|
74
|
+
// so a typo can't sneak past the application layer.
|
|
75
|
+
visibility: varchar('visibility', { length: 10 })
|
|
72
76
|
.$type()
|
|
73
77
|
.default('private')
|
|
74
78
|
.notNull(),
|
|
@@ -100,8 +104,10 @@ export const pipeline = pgTable('pipelines', {
|
|
|
100
104
|
updatedAtIdx: index('pipeline_updated_at_idx').on(table.updatedAt),
|
|
101
105
|
// Composite index for common access pattern (orgId + isActive)
|
|
102
106
|
orgActiveIdx: index('pipeline_org_active_idx').on(table.orgId, table.isActive),
|
|
103
|
-
// Composite index for filtered queries (orgId +
|
|
104
|
-
|
|
107
|
+
// Composite index for filtered queries (orgId + visibility + isActive)
|
|
108
|
+
orgVisibilityActiveIdx: index('pipeline_org_visibility_active_idx').on(table.orgId, table.visibility, table.isActive),
|
|
109
|
+
// Drives the "my private drafts" leg of the visibility predicate.
|
|
110
|
+
createdByIdx: index('pipeline_created_by_idx').on(table.orgId, table.createdBy),
|
|
105
111
|
// Partial index for active-only queries (smaller, faster than full index)
|
|
106
112
|
activeOnlyOrgIdx: index('pipeline_active_only_org_idx').on(table.orgId, table.createdAt).where(sql `is_active = true`),
|
|
107
113
|
// Unique constraint on project + organization + orgId
|
|
@@ -323,4 +329,4 @@ export const doraSettings = pgTable('dora_settings', {
|
|
|
323
329
|
doraRetentionDays: integer('dora_retention_days'),
|
|
324
330
|
updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
|
|
325
331
|
});
|
|
326
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YWJhc2Uvc2NoZW1hL3BpcGVsaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQTJHLE1BQU0sNEJBQTRCLENBQUM7QUFDcEwsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBMEJuSTs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUU7SUFDM0MsY0FBYztJQUNkLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsYUFBYSxFQUFFO0lBRTNDLGtDQUFrQztJQUNsQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUN0QyxPQUFPLENBQUMsYUFBYSxDQUFDO1NBQ3RCLE9BQU8sRUFBRTtJQUVaLGVBQWU7SUFDZixTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUMxQixPQUFPLENBQUMsYUFBYSxDQUFDO1NBQ3RCLE9BQU8sRUFBRTtJQUNaLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ3ZELFVBQVUsRUFBRTtTQUNaLE9BQU8sRUFBRTtJQUNaLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQzFCLE9BQU8sQ0FBQyxhQUFhLENB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V0FBVyxDQUFDLCtCQUErQixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQztDQUNsRyxDQUFDLENBQUMsQ0FBQztBQUVKOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxlQUFlLEVBQUU7SUFDbkQsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUU7SUFDdEQsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLHVCQUF1QixDQUFDO0lBQ3JELHdFQUF3RTtJQUN4RSxvRUFBb0U7SUFDcEUsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLHNCQUFzQixDQUFDO0lBQ25ELGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztJQUNqRCxTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sRUFBRTtDQUNsRixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgQWNjZXNzTW9kaWZpZXIsIFNZU1RFTV9PUkdfSUQsIHR5cGUgQ3JpdGljYWxpdHksIHR5cGUgRW50aXR5TGFiZWxzLCB0eXBlIEVudGl0eUxpbmssIHR5cGUgTGlmZWN5Y2xlLCB0eXBlIE1ldGFEYXRhVHlwZSwgdHlwZSBPd25lclR5cGUgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBzcWwgfSBmcm9tICdkcml6emxlLW9ybSc7XG5pbXBvcnQgeyBiaWdpbnQsIGJvb2xlYW4sIGludGVnZXIsIHZhcmNoYXIsIHBnVGFibGUsIHRleHQsIHRpbWVzdGFtcCwgdXVpZCwganNvbmIsIGluZGV4LCB1bmlxdWVJbmRleCB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnO1xuXG4vKipcbiAqIFBpcGVsaW5lIGJ1aWxkZXIgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIHN0b3JlZCBpbiBkYXRhYmFzZS5cbiAqIE1pcnJvcnMgdGhlIGNhbm9uaWNhbCBCdWlsZGVyUHJvcHMgZnJvbSBwaXBlbGluZS1jb3JlIChKU09OLXNlcmlhbGl6YWJsZSBmb3JtKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZUJ1aWxkZXJDb25maWcge1xuICByZWFkb25seSBwcm9qZWN0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbjogc3RyaW5nO1xuICByZWFkb25seSBwaXBlbGluZU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGdsb2JhbD86IE1ldGFEYXRhVHlwZTtcbiAgcmVhZG9ubHkgc3ludGg6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZWFkb25seSBkZWZhdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZWFkb25seSByb2xlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJlYWRvbmx5IHN0YWdlcz86IFBpcGVsaW5lU3RhZ2VDb25maWdbXTtcbn1cblxuLyoqXG4gKiBTdGFnZSBjb25maWd1cmF0aW9uIHN0b3JlZCBpbiBkYXRhYmFzZSAoSlNPTi1zZXJpYWxpemFibGUpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lU3RhZ2VDb25maWcge1xuICByZWFkb25seSBzdGFnZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgYWxpYXM/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0ZXBzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdO1xufVxuXG4vKipcbiAqIFRhYmxlIGZvciBzdG9yaW5nIHBpcGVsaW5lIGluc3RhbmNlcyBhbmQgdGhlaXIgZnVsbCBjb25maWd1cmF0aW9uLlxuICpcbiAqIEZlYXR1cmVzICogLSBGdWxsIEJ1aWxkZXJQcm9wcyBzZXJpYWxpemF0aW9uIGZvciByZWNvbnN0cnVjdGlvblxuICogLSBPcmdhbml6YXRpb24tbGV2ZWwgaXNvbGF0aW9uXG4gKiAtIFBpcGVsaW5lIHN0YXR1cyB0cmFja2luZ1xuICogLSBFeGVjdXRpb24gaGlzdG9yeSB0cmFja2luZ1xuICogLSBGbGV4aWJsZSB0YWdnaW5nIHN5c3RlbVxuICpcbiAqIEB0YWJsZSBwaXBlbGluZXNcbiAqL1xuZXhwb3J0IGNvbnN0IHBpcGVsaW5lID0gcGdUYWJsZSgncGlwZWxpbmVzJywge1xuICAvLyBQcmltYXJ5IGtleVxuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuXG4gIC8vIE9yZ2FuaXphdGlvbiBhbmQgYWNjZXNzIGNvbnRyb2xcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSlcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gQXVkaXQgZmllbGRzXG4gIGNyZWF0ZWRCeTogdGV4dCgnY3JlYXRlZF9ieScpXG4gICAgLmRlZmF1bHQoU1lTVEVNX09SR19JRClcbiAgICAubm90TnVsbCgpLFxuICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCgnY3JlYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pXG4gICAgLmRlZmF1bHROb3coKVxuICAgIC5ub3ROdWxsKCksXG4gIHVwZGF0ZWRCeTogdGV4dCgndXBkYXRlZF9ieScpXG4gICAgLmRlZmF1bHQoU1lTVEVNX09SR19JRClcbiAgICAubm90TnVsbCgpLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pXG4gICAgLmRlZmF1bHROb3coKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gQ29yZSBwaXBlbGluZSBpbmZvcm1hdGlvblxuICBwcm9qZWN0OiB2YXJjaGFyKCdwcm9qZWN0JywgeyBsZW5ndGg6IDI1NSB9KVxuICAgIC5ub3ROdWxsKCksXG4gIG9yZ2FuaXphdGlvbjogdmFyY2hhcignb3JnYW5pemF0aW9uJywgeyBsZW5ndGg6IDI1NSB9KVxuICAgIC5ub3ROdWxsKCksXG4gIHBpcGVsaW5lTmFtZTogdmFyY2hhcigncGlwZWxpbmVfbmFtZScsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIGRlc2NyaXB0aW9uOiB0ZXh0KCdkZXNjcmlwdGlvbicpLFxuICBrZXl3b3JkczoganNvbmIoJ2tleXdvcmRzJylcbiAgICAuJHR5cGU8c3RyaW5nW10+KClcbiAgICAuZGVmYXVsdChbXSlcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIFBpcGVsaW5lIGNvbmZpZ3VyYXRpb25cbiAgcHJvcHM6IGpzb25iKCdwcm9wcycpXG4gICAgLiR0eXBlPFBpcGVsaW5lQnVpbGRlckNvbmZpZz4oKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gRGV2ZWxvcGVyLXBvcnRhbCBjYXRhbG9nIG1ldGFkYXRhIChvd25lcnNoaXAgLyBsaWZlY3ljbGUgLyBjbGFzc2lmaWNhdGlvbikuXG4gIC8vIG93bmVySWQgZGVmYXVsdHMgdG8gdGhlIGNyZWF0aW5nIHVzZXIgKHNldCBhdCBpbnNlcnQpLCBzbyBldmVyeSBwaXBlbGluZSBoYXNcbiAgLy8gYW4gb3duZXIgZm9yIFwibXkgc2VydmljZXNcIiB2aWV3czsgb3duZXJUeXBlIGRpc3Rpbmd1aXNoZXMgdXNlciB2cyB0ZWFtLlxuICBvd25lcklkOiB0ZXh0KCdvd25lcl9pZCcpLFxuICBvd25lclR5cGU6IHZhcmNoYXIoJ293bmVyX3R5cGUnLCB7IGxlbmd0aDogMTAgfSkuJHR5cGU8T3duZXJUeXBlPigpLFxuICBsaWZlY3ljbGU6IHZhcmNoYXIoJ2xpZmVjeWNsZScsIHsgbGVuZ3RoOiAyMCB9KVxuICAgIC4kdHlwZTxMaWZlY3ljbGU+KClcbiAgICAuZGVmYXVsdCgncHJvZHVjdGlvbicgYXMgTGlmZWN5Y2xlKVxuICAgIC5ub3ROdWxsKCksXG4gIGNyaXRpY2FsaXR5OiB2YXJjaGFyKCdjcml0aWNhbGl0eScsIHsgbGVuZ3RoOiAxMCB9KS4kdHlwZTxDcml0aWNhbGl0eT4oKSxcbiAgbGFiZWxzOiBqc29uYignbGFiZWxzJylcbiAgICAuJHR5cGU8RW50aXR5TGFiZWxzPigpXG4gICAgLmRlZmF1bHQoe30pXG4gICAgLm5vdE51bGwoKSxcbiAgbGlua3M6IGpzb25iKCdsaW5rcycpXG4gICAgLiR0eXBlPEVudGl0eUxpbmtbXT4oKVxuICAgIC5kZWZhdWx0KFtdKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gQWNjZXNzIGFuZCB2aXNpYmlsaXR5XG4gIGFjY2Vzc01vZGlmaWVyOiB2YXJjaGFyKCdhY2Nlc3NfbW9kaWZpZXInLCB7IGxlbmd0aDogMTAgfSlcbiAgICAuJHR5cGU8QWNjZXNzTW9kaWZpZXI+KClcbiAgICAuZGVmYXVsdCgncHJpdmF0ZScgYXMgQWNjZXNzTW9kaWZpZXIpXG4gICAgLm5vdE51bGwoKSxcbiAgaXNEZWZhdWx0OiBib29sZWFuKCdpc19kZWZhdWx0JylcbiAgICAuZGVmYXVsdChmYWxzZSlcbiAgICAubm90TnVsbCgpLFxuICBpc0FjdGl2ZTogYm9vbGVhbignaXNfYWN0aXZlJylcbiAgICAuZGVmYXVsdCh0cnVlKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gRGVsZXRpb24gdHJhY2tpbmcgKHNvZnQgZGVsZXRlKVxuICBkZWxldGVkQXQ6IHRpbWVzdGFtcCgnZGVsZXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBkZWxldGVkQnk6IHRleHQoJ2RlbGV0ZWRfYnknKSxcbiAgLy8gU29mdC1kZWxldGUgcHVyZ2UgZGVhZGxpbmU6IHRoZSByZXRlbnRpb24gc3dlZXAgaGFyZC1kZWxldGVzIHRvbWJzdG9uZWRcbiAgLy8gcm93cyBvbmNlIGBwdXJnZV9hZnRlcmAgaGFzIHBhc3NlZCAoc2V0IG9uIGRlbGV0ZSBhbG9uZ3NpZGUgZGVsZXRlZF9hdCkuXG4gIHB1cmdlQWZ0ZXI6IHRpbWVzdGFtcCgncHVyZ2VfYWZ0ZXInLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgLy8gUGFydGlhbCBpbmRleCBvdmVyIGp1c3QgdGhlIHRvbWJzdG9uZXMg4oCUIGRyaXZlcyB0aGUgcmV0ZW50aW9uIHB1cmdlIHN3ZWVwXG4gIC8vIChgV0hFUkUgZGVsZXRlZF9hdCBJUyBOT1QgTlVMTCBBTkQgcHVyZ2VfYWZ0ZXIgPCBub3dgKSB3aXRob3V0IHNjYW5uaW5nIGxpdmUgcm93cy5cbiAgcHVyZ2VJZHg6IGluZGV4KCdwaXBlbGluZV9wdXJnZV9pZHgnKS5vbih0YWJsZS5wdXJnZUFmdGVyKS53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOT1QgTlVMTGApLFxuICAvLyBJbmRleGVzIGZvciBjb21tb24gcXVlcmllc1xuICBwcm9qZWN0SWR4OiBpbmRleCgncGlwZWxpbmVfcHJvamVjdF9pZHgnKS5vbih0YWJsZS5wcm9qZWN0KSxcbiAgLy8gRGV2ZWxvcGVyLXBvcnRhbCBjYXRhbG9nIGluZGV4ZXM6IFwibXkgc2VydmljZXNcIiAob3duZXIpICsgbGlmZWN5Y2xlIGZpbHRlci5cbiAgb3duZXJJZHg6IGluZGV4KCdwaXBlbGluZV9vd25lcl9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUub3duZXJJZCksXG4gIGxpZmVjeWNsZUlkeDogaW5kZXgoJ3BpcGVsaW5lX2xpZmVjeWNsZV9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUubGlmZWN5Y2xlKSxcbiAgb3JnYW5pemF0aW9uSWR4OiBpbmRleCgncGlwZWxpbmVfb3JnYW5pemF0aW9uX2lkeCcpLm9uKHRhYmxlLm9yZ2FuaXphdGlvbiksXG4gIG9yZ0lkSWR4OiBpbmRleCgncGlwZWxpbmVfb3JnX2lkX2lkeCcpLm9uKHRhYmxlLm9yZ0lkKSxcbiAgYWN0aXZlSWR4OiBpbmRleCgncGlwZWxpbmVfYWN0aXZlX2lkeCcpLm9uKHRhYmxlLmlzQWN0aXZlKSxcbiAgY3JlYXRlZEF0SWR4OiBpbmRleCgncGlwZWxpbmVfY3JlYXRlZF9hdF9pZHgnKS5vbih0YWJsZS5jcmVhdGVkQXQpLFxuICB1cGRhdGVkQXRJZHg6IGluZGV4KCdwaXBlbGluZV91cGRhdGVkX2F0X2lkeCcpLm9uKHRhYmxlLnVwZGF0ZWRBdCksXG5cbiAgLy8gQ29tcG9zaXRlIGluZGV4IGZvciBjb21tb24gYWNjZXNzIHBhdHRlcm4gKG9yZ0lkICsgaXNBY3RpdmUpXG4gIG9yZ0FjdGl2ZUlkeDogaW5kZXgoJ3BpcGVsaW5lX29yZ19hY3RpdmVfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmlzQWN0aXZlKSxcblxuICAvLyBDb21wb3NpdGUgaW5kZXggZm9yIGZpbHRlcmVkIHF1ZXJpZXMgKG9yZ0lkICsgYWNjZXNzTW9kaWZpZXIgKyBpc0FjdGl2ZSlcbiAgb3JnQWNjZXNzQWN0aXZlSWR4OiBpbmRleCgncGlwZWxpbmVfb3JnX2FjY2Vzc19hY3RpdmVfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmFjY2Vzc01vZGlmaWVyLCB0YWJsZS5pc0FjdGl2ZSksXG5cbiAgLy8gUGFydGlhbCBpbmRleCBmb3IgYWN0aXZlLW9ubHkgcXVlcmllcyAoc21hbGxlciwgZmFzdGVyIHRoYW4gZnVsbCBpbmRleClcbiAgYWN0aXZlT25seU9yZ0lkeDogaW5kZXgoJ3BpcGVsaW5lX2FjdGl2ZV9vbmx5X29yZ19pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUuY3JlYXRlZEF0KS53aGVyZShzcWxgaXNfYWN0aXZlID0gdHJ1ZWApLFxuXG4gIC8vIFVuaXF1ZSBjb25zdHJhaW50IG9uIHByb2plY3QgKyBvcmdhbml6YXRpb24gKyBvcmdJZFxuICBwcm9qZWN0T3JnVW5pcXVlOiB1bmlxdWVJbmRleCgncGlwZWxpbmVfcHJvamVjdF9vcmdfdW5pcXVlJylcbiAgICAub24odGFibGUucHJvamVjdCwgdGFibGUub3JnYW5pemF0aW9uLCB0YWJsZS5vcmdJZCksXG59KSk7XG5cbi8qKlxuICogUGlwZWxpbmUgZGVwbG95bWVudCByZWdpc3RyeS5cbiAqIE1hcHMgZGVwbG95ZWQgQ29kZVBpcGVsaW5lIEFSTnMgYmFjayB0byBwaXBlbGluZSByZWNvcmRzIGFuZCBvcmcgSURzLlxuICogUG9wdWxhdGVkIGJ5IHRoZSBkZXBsb3kgY29tbWFuZCBhZnRlciBzdWNjZXNzZnVsIENESyBkZXBsb3kuXG4gKiBVc2VkIGJ5IHRoZSBwaXBlbGluZS1ldmVudHMgTGFtYmRhIHRvIHJlc29sdmUgRXZlbnRCcmlkZ2UgZXZlbnRzIHRvIG9yZy1zY29wZWQgcmVjb3Jkcy5cbiAqXG4gKiBAdGFibGUgcGlwZWxpbmVfcmVnaXN0cnlcbiAqL1xuZXhwb3J0IGNvbnN0IHBpcGVsaW5lUmVnaXN0cnkgPSBwZ1RhYmxlKCdwaXBlbGluZV9yZWdpc3RyeScsIHtcbiAgaWQ6IHV1aWQoJ2lkJykucHJpbWFyeUtleSgpLmRlZmF1bHRSYW5kb20oKSxcbiAgLy8gVGhlIHBsYXRmb3JtJ3MgcGlwZWxpbmUgcmVjb3JkIGlkIOKAlCBhIFNUQUJMRSB1dWlkIGNyZWF0ZWQgd2l0aCB0aGUgcGlwZWxpbmVcbiAgLy8gcmVjb3JkLCBrbm93biBhdCBDREsgc3ludGgsIGFuZCBhcHBsaWVkIHRvIHRoZSBsaXZlIENvZGVQaXBlbGluZSBhcyB0aGVcbiAgLy8gYHBiLnBpcGVsaW5lLWlkYCB0YWcuIFRoZSBldmVudHMgTGFtYmRhIHJlYWRzIHRoYXQgdGFnIGFuZCByZXBvcnRzXG4gIC8vIGFnYWluc3QgdGhpcyBpZCwgc28gaXQgSVMgdGhlIGV2ZW50IGpvaW4ga2V5IChyZXBsYWNpbmcgdGhlIG1hc2tlZCBBUk4g4oCUXG4gIC8vIGl0IGNhcnJpZXMgbm8gQVdTIGFjY291bnQvcmVnaW9uLCBzbyBubyBtYXNraW5nIGlzIG5lZWRlZCkuIFVuaXF1ZTogb25lXG4gIC8vIHJlZ2lzdHJ5IHJvdyBwZXIgcGlwZWxpbmUgKyB0aGUgdXBzZXJ0IGtleSBmb3IgKHJlKXJlZ2lzdHJhdGlvbi5cbiAgcGlwZWxpbmVJZDogdXVpZCgncGlwZWxpbmVfaWQnKS5ub3ROdWxsKCkudW5pcXVlKCksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgcGlwZWxpbmVOYW1lOiB2YXJjaGFyKCdwaXBlbGluZV9uYW1lJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIHJlZ2lvbjogdmFyY2hhcigncmVnaW9uJywgeyBsZW5ndGg6IDMwIH0pLFxuICBwcm9qZWN0OiB2YXJjaGFyKCdwcm9qZWN0JywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgb3JnYW5pemF0aW9uOiB2YXJjaGFyKCdvcmdhbml6YXRpb24nLCB7IGxlbmd0aDogMjU1IH0pLFxuICBsYXN0RGVwbG95ZWQ6IHRpbWVzdGFtcCgnbGFzdF9kZXBsb3llZCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBzdGFja05hbWU6IHZhcmNoYXIoJ3N0YWNrX25hbWUnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCgnY3JlYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG4gIHVwZGF0ZWRBdDogdGltZXN0YW1wKCd1cGRhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgb3JnSWRJZHg6IGluZGV4KCdyZWdpc3RyeV9vcmdfaWRfaWR4Jykub24odGFibGUub3JnSWQpLFxuICBvcmdSZWdpb25JZHg6IGluZGV4KCdyZWdpc3RyeV9vcmdfcmVnaW9uX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5yZWdpb24pLFxufSkpO1xuXG4vKipcbiAqIEV2ZW50IHNvdXJjZSBpZGVudGlmaWVycyBmb3IgcGlwZWxpbmVfZXZlbnRzLlxuICovXG5leHBvcnQgdHlwZSBFdmVudFNvdXJjZSA9ICdjb2RlcGlwZWxpbmUnIHwgJ2NvZGVidWlsZCcgfCAncGx1Z2luLWJ1aWxkJztcblxuLyoqXG4gKiBFdmVudCB0eXBlIGdyYW51bGFyaXR5IGxldmVscyBmb3IgcGlwZWxpbmVfZXZlbnRzLlxuICovXG5leHBvcnQgdHlwZSBFdmVudFR5cGUgPSAnUElQRUxJTkUnIHwgJ1NUQUdFJyB8ICdBQ1RJT04nIHwgJ0JVSUxEJztcblxuLyoqXG4gKiBQaXBlbGluZSBleGVjdXRpb24gYW5kIGJ1aWxkIGV2ZW50cy5cbiAqIENhcHR1cmVzIENvZGVQaXBlbGluZS9Db2RlQnVpbGQgc3RhdGUgY2hhbmdlcyBmcm9tIEV2ZW50QnJpZGdlXG4gKiBhbmQgcGx1Z2luIERvY2tlciBidWlsZCBvdXRjb21lcyBmcm9tIEJ1bGxNUS5cbiAqIEFsbCBldmVudHMgYXJlIG9yZy1zY29wZWQgZm9yIG11bHRpLXRlbmFudCByZXBvcnRpbmcuXG4gKlxuICogQHRhYmxlIHBpcGVsaW5lX2V2ZW50c1xuICovXG5leHBvcnQgY29uc3QgcGlwZWxpbmVFdmVudCA9IHBnVGFibGUoJ3BpcGVsaW5lX2V2ZW50cycsIHtcbiAgaWQ6IHV1aWQoJ2lkJykucHJpbWFyeUtleSgpLmRlZmF1bHRSYW5kb20oKSxcbiAgcGlwZWxpbmVJZDogdXVpZCgncGlwZWxpbmVfaWQnKSxcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICBldmVudFNvdXJjZTogdmFyY2hhcignZXZlbnRfc291cmNlJywgeyBsZW5ndGg6IDUwIH0pLiR0eXBlPEV2ZW50U291cmNlPigpLm5vdE51bGwoKSxcbiAgZXZlbnRUeXBlOiB2YXJjaGFyKCdldmVudF90eXBlJywgeyBsZW5ndGg6IDUwIH0pLiR0eXBlPEV2ZW50VHlwZT4oKS5ub3ROdWxsKCksXG4gIHN0YXR1czogdmFyY2hhcignc3RhdHVzJywgeyBsZW5ndGg6IDIwIH0pLm5vdE51bGwoKSxcbiAgZXhlY3V0aW9uSWQ6IHZhcmNoYXIoJ2V4ZWN1dGlvbl9pZCcsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIHN0YWdlTmFtZTogdmFyY2hhcignc3RhZ2VfbmFtZScsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIGFjdGlvbk5hbWU6IHZhcmNoYXIoJ2FjdGlvbl9uYW1lJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgZXJyb3JNZXNzYWdlOiB0ZXh0KCdlcnJvcl9tZXNzYWdlJyksXG4gIHN0YXJ0ZWRBdDogdGltZXN0YW1wKCdzdGFydGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGNvbXBsZXRlZEF0OiB0aW1lc3RhbXAoJ2NvbXBsZXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBkdXJhdGlvbk1zOiBpbnRlZ2VyKCdkdXJhdGlvbl9tcycpLFxuICAvLyBET1JBIGRlcGxveS1hdHRyaWJ1dGlvbiAoYWxsIG51bGxhYmxlOyBwb3B1bGF0ZWQgYXQgaW5nZXN0IHdoZW4gdGhlIHNvdXJjZVxuICAvLyBldmVudCBjYXJyaWVzIHRoZW0g4oCUIGxlZ2FjeS9DSS1vbmx5IGV2ZW50cyBsZWF2ZSB0aGVtIE5VTEwpLiBgZW52aXJvbm1lbnRgXG4gIC8vIGlzIHRoZSBkZXBsb3kgdGFyZ2V0IChlLmcuIFwicHJvZHVjdGlvblwiKTsgaXRzIHByZXNlbmNlIG1hcmtzIGFuIGV4ZWN1dGlvblxuICAvLyBhcyBhIHJlYWwgZGVwbG95bWVudCwgbGV0dGluZyBET1JBIHNjb3BlIHBhc3QgZ2VuZXJpYyBwaXBlbGluZSBydW5zLlxuICAvLyBgY29tbWl0U2hhYC9gY29tbWl0UmVmYCBjYXB0dXJlIHRoZSBzb3VyY2UgcmV2aXNpb24gZm9yIGxlYWQtdGltZSB3b3JrLlxuICBjb21taXRTaGE6IHZhcmNoYXIoJ2NvbW1pdF9zaGEnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBjb21taXRSZWY6IHZhcmNoYXIoJ2NvbW1pdF9yZWYnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBlbnZpcm9ubWVudDogdmFyY2hhcignZW52aXJvbm1lbnQnLCB7IGxlbmd0aDogMjU1IH0pLFxuICAvLyBET1JBIHRydWUtbGVhZC10aW1lIGF0dHJpYnV0aW9uIChQaGFzZSA0KS4gVGhlIGZvcndhcmRlciByZXNvbHZlcyB0aGUgc291cmNlXG4gIC8vIGNvbW1pdCByYW5nZSBpbi1hY2NvdW50IGFuZCByZXBvcnRzIHRoZSBPTERFU1QgdW5zaGlwcGVkIGNvbW1pdCdzIHRpbWVzdGFtcFxuICAvLyArIGhvdyBtYW55IGNvbW1pdHMgc2hpcHBlZC4gQm90aCBudWxsYWJsZSDigJQgZXZlbnRzIHdob3NlIHNvdXJjZSB0eXBlL3Rva2VuXG4gIC8vIGNhbid0IGJlIHJlc29sdmVkIGxlYXZlIHRoZW0gTlVMTCBhbmQgbGVhZCB0aW1lIHJlcG9ydHMgYHVua25vd25gLlxuICBjb21taXRUaW1lc3RhbXA6IHRpbWVzdGFtcCgnY29tbWl0X3RpbWVzdGFtcCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBjb21taXRDb3VudDogaW50ZWdlcignY29tbWl0X2NvdW50JyksXG4gIGRldGFpbDoganNvbmIoJ2RldGFpbCcpLiR0eXBlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpLFxuICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCgnY3JlYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG59LCAodGFibGUpID0+ICh7XG4gIHBpcGVsaW5lSWRJZHg6IGluZGV4KCdldmVudF9waXBlbGluZV9pZF9pZHgnKS5vbih0YWJsZS5waXBlbGluZUlkKSxcbiAgb3JnSWRJZHg6IGluZGV4KCdldmVudF9vcmdfaWRfaWR4Jykub24odGFibGUub3JnSWQpLFxuICBldmVudFR5cGVJZHg6IGluZGV4KCdldmVudF90eXBlX2lkeCcpLm9uKHRhYmxlLmV2ZW50VHlwZSksXG4gIHN0YXR1c0lkeDogaW5kZXgoJ2V2ZW50X3N0YXR1c19pZHgnKS5vbih0YWJsZS5zdGF0dXMpLFxuICBleGVjdXRpb25JZElkeDogaW5kZXgoJ2V2ZW50X2V4ZWN1dGlvbl9pZF9pZHgnKS5vbih0YWJsZS5leGVjdXRpb25JZCksXG4gIGNyZWF0ZWRBdElkeDogaW5kZXgoJ2V2ZW50X2NyZWF0ZWRfYXRfaWR4Jykub24odGFibGUuY3JlYXRlZEF0KSxcbiAgb3JnVHlwZUNyZWF0ZWRJZHg6IGluZGV4KCdldmVudF9vcmdfdHlwZV9jcmVhdGVkX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5ldmVudFR5cGUsIHRhYmxlLmNyZWF0ZWRBdCksXG4gIG9yZ1NvdXJjZVN0YXR1c0lkeDogaW5kZXgoJ2V2ZW50X29yZ19zb3VyY2Vfc3RhdHVzX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5ldmVudFNvdXJjZSwgdGFibGUuc3RhdHVzKSxcbiAgLy8gSWRlbXBvdGVuY3k6IEV2ZW50QnJpZGdlIOKGkiBTUVMgaXMgYXQtbGVhc3Qtb25jZSwgc28gdGhlIHNhbWUgc3RhdGUtY2hhbmdlXG4gIC8vIGNhbiBiZSBkZWxpdmVyZWQgdHdpY2UuIFRoaXMgcGFydGlhbCB1bmlxdWUgaW5kZXggZGVkdXBzIHJlLWRlbGl2ZXJpZXNcbiAgLy8gKHBhaXJlZCB3aXRoIGBvbkNvbmZsaWN0RG9Ob3RoaW5nYCBpbiByZXBvcnRpbmctc2VydmljZS5pbmdlc3RFdmVudHMpLlxuICAvLyBQYXJ0aWFsIChleGVjdXRpb25faWQgSVMgTk9UIE5VTEwpIGJlY2F1c2UgdGhhdCdzIHRoZSBuYXR1cmFsIHBlci1ldmVudFxuICAvLyBrZXk7IGV2ZW50cyB3aXRob3V0IGFuIGV4ZWN1dGlvbklkIChyYXJlKSBhcmVuJ3QgZGVkdXBlZCwgd2hpY2ggaXMgc2FmZS5cbiAgLy8gSW5jbHVkZXMgcGlwZWxpbmVfaWQgc28gYSAodGhlb3JldGljYWwpIGV4ZWN1dGlvbi1pZCByZXVzZSBhY3Jvc3MgcGlwZWxpbmVzXG4gIC8vIGNhbid0IGNvbGxpZGUgbm93IHRoYXQgdGhlIEFSTiBpcyBubyBsb25nZXIgcGFydCBvZiB0aGUgcm93LlxuICAvL1xuICAvLyBDT0FMRVNDRSB0aGUgbnVsbGFibGUgcGFydHMgdG8gc2VudGluZWxzIChleHByZXNzaW9uIGluZGV4KTogUElQRUxJTkUvU1RBR0UvXG4gIC8vIEJVSUxEIGV2ZW50cyBsZWF2ZSBzdGFnZV9uYW1lL2FjdGlvbl9uYW1lIE5VTEwgKHBsdWdpbi1idWlsZCBhbHNvIHBpcGVsaW5lX2lkXG4gIC8vIE5VTEwpLCBhbmQgUG9zdGdyZXMgdHJlYXRzIE5VTExzIGFzIERJU1RJTkNUIGluIGEgdW5pcXVlIGluZGV4IOKAlCBzbyB0aGUgcGxhaW5cbiAgLy8gY29sdW1uIGluZGV4IG5ldmVyIG1hdGNoZXMgZm9yIHRob3NlIHR5cGVzIGFuZCBvbkNvbmZsaWN0RG9Ob3RoaW5nIGNhbid0IGRlZHVwXG4gIC8vIHRoZWlyIGF0LWxlYXN0LW9uY2UgcmUtZGVsaXZlcmllcy4gQ29sbGFwc2luZyBOVUxM4oaSJycgbWFrZXMgZXF1YWwgZXZlbnRzIGVxdWFsLlxuICAvLyAoZHJpenpsZSdzIHVuaXF1ZUluZGV4IGNhbid0IGV4cHJlc3MgTlVMTFMgTk9UIERJU1RJTkNUIG9uIGEgcGFydGlhbCBpbmRleCwgc29cbiAgLy8gd2UgdXNlIHRoZSBlcXVpdmFsZW50IGV4cHJlc3Npb24gaW5kZXguKSBNSUdSQVRJT04gUkVRVUlSRUQ6IGRyaXp6bGUta2l0IGdlbmVyYXRlLlxuICBkZWR1cElkeDogdW5pcXVlSW5kZXgoJ2V2ZW50X2RlZHVwX2lkeCcpXG4gICAgLm9uKFxuICAgICAgc3FsYGNvYWxlc2NlKCR7dGFibGUucGlwZWxpbmVJZH06OnRleHQsICcnKWAsXG4gICAgICB0YWJsZS5leGVjdXRpb25JZCxcbiAgICAgIHRhYmxlLmV2ZW50VHlwZSxcbiAgICAgIHRhYmxlLnN0YXR1cyxcbiAgICAgIHNxbGBjb2FsZXNjZSgke3RhYmxlLnN0YWdlTmFtZX0sICcnKWAsXG4gICAgICBzcWxgY29hbGVzY2UoJHt0YWJsZS5hY3Rpb25OYW1lfSwgJycpYCxcbiAgICApXG4gICAgLndoZXJlKHNxbGBleGVjdXRpb25faWQgSVMgTk9UIE5VTExgKSxcbiAgLy8gRE9SQSBkZXBsb3ktc2NvcGVkIHJlYWRzOiBvbmx5IFBJUEVMSU5FLWxldmVsIGV4ZWN1dGlvbnMgdGFnZ2VkIHdpdGggYVxuICAvLyBkZXBsb3kgZW52aXJvbm1lbnQuIGBldmVudF90eXBlYCBpcyBpbiB0aGUgaW5kZXggYmVjYXVzZSB0aGUgZXZlbnRzIExhbWJkYVxuICAvLyB0YWdzIEVWRVJZIGV2ZW50IG9mIGEgZGVwbG95ZWQgcGlwZWxpbmUgKFNUQUdFL0FDVElPTiB0b28pLCB3aGlsZSB0aGUgRE9SQVxuICAvLyBzY2FuIHdhbnRzIG9ubHkgYGV2ZW50X3R5cGU9J1BJUEVMSU5FJ2Ag4oCUIGluY2x1ZGluZyBpdCByZXN0b3JlcyBzZWxlY3Rpdml0eS5cbiAgLy8gUGFydGlhbCAoZW52aXJvbm1lbnQgSVMgTk9UIE5VTEwpIGtlZXBzIGl0IHNtYWxsIOKAlCBsZWdhY3kvQ0ktb25seSBldmVudHNcbiAgLy8gYXJlbid0IGluZGV4ZWQuIFRoZSBkZWZhdWx0IHJ1bi1iYXNlZCBET1JBIHBhdGggKG5vIGVudmlyb25tZW50KSBjYW4ndCB1c2VcbiAgLy8gdGhpcyBwYXJ0aWFsIGluZGV4OyBpdCByZWxpZXMgb24gZXZlbnRfcGlwZWxpbmVfdHlwZV9zdGFydGVkX2lkeCBiZWxvdy5cbiAgLy8gTUlHUkFUSU9OIFJFUVVJUkVEOiBkcml6emxlLWtpdCBnZW5lcmF0ZS5cbiAgZW52VHlwZVN0YXJ0ZWRJZHg6IGluZGV4KCdldmVudF9lbnZfdHlwZV9zdGFydGVkX2lkeCcpXG4gICAgLm9uKHRhYmxlLmVudmlyb25tZW50LCB0YWJsZS5ldmVudFR5cGUsIHRhYmxlLnN0YXJ0ZWRBdClcbiAgICAud2hlcmUoc3FsYGVudmlyb25tZW50IElTIE5PVCBOVUxMYCksXG4gIC8vIHN0YXJ0ZWRfYXQgcmFuZ2Ugc2NhbnM6IGV2ZXJ5IENhdGVnb3J5LTEgcmVwb3J0IGFuZCB0aGUgZGVmYXVsdCBydW4tYmFzZWRcbiAgLy8gRE9SQSBwYXRoIGZpbHRlcnMgYGV2ZW50X3R5cGU9J1BJUEVMSU5FJyBBTkQgc3RhcnRlZF9hdCBCRVRXRUVOIOKApmAgam9pbmVkIG9uXG4gIC8vIHBpcGVsaW5lX2lkLCBidXQgdGhlIG90aGVyIGV2ZW50IGNvbXBvc2l0ZSBpbmRleCBpcyBvbiBjcmVhdGVkX2F0LCBub3RcbiAgLy8gc3RhcnRlZF9hdCDigJQgc28gdGhlIHJhbmdlIHNjYW4gaGFkIG5vIGlkZWFsIGluZGV4LiBUaGlzIGNvbXBvc2l0ZSBzZXJ2ZXMgdGhlXG4gIC8vIGpvaW4tZHJpdmVuIHNjYW4gYnkgcGlwZWxpbmVfaWQuIE1JR1JBVElPTiBSRVFVSVJFRDogZHJpenpsZS1raXQgZ2VuZXJhdGUuXG4gIHBpcGVsaW5lVHlwZVN0YXJ0ZWRJZHg6IGluZGV4KCdldmVudF9waXBlbGluZV90eXBlX3N0YXJ0ZWRfaWR4JylcbiAgICAub24odGFibGUucGlwZWxpbmVJZCwgdGFibGUuZXZlbnRUeXBlLCB0YWJsZS5zdGFydGVkQXQpLFxuICAvLyBET1JBIGRlcGxveS1iYXNpcyBzY2FuIChQaGFzZSAxKTogZGVwbG95bWVudCBmcmVxdWVuY3kgLyBkZXBsb3ktdGltZSBDRlIgL1xuICAvLyBsZWFkIHRpbWUgYWxsIGdyb3VwIGRlcGxveS1zdGFnZSBldmVudHMgYnkgZW52aXJvbm1lbnQgb3ZlciBhIGNvbXBsZXRlZF9hdFxuICAvLyB3aW5kb3cuIFRoaXMgY29tcG9zaXRlIHNlcnZlcyB0aGF0IGdyb3VwZWQgb3JnLXNjb3BlZCBzY2FuIGRpcmVjdGx5LlxuICAvLyBNSUdSQVRJT04gUkVRVUlSRUQ6IGRyaXp6bGUta2l0IGdlbmVyYXRlLlxuICBvcmdFbnZDb21wbGV0ZWRJZHg6IGluZGV4KCdldmVudF9vcmdfZW52X2NvbXBsZXRlZF9pZHgnKVxuICAgIC5vbih0YWJsZS5vcmdJZCwgdGFibGUuZW52aXJvbm1lbnQsIHRhYmxlLmNvbXBsZXRlZEF0KSxcbn0pKTtcblxuLyoqXG4gKiBNYW51YWwgcG9zdC1kZXBsb3kgb3V0Y29tZSBtYXJrZXJzIChQaGFzZSAyKS4gQSB1c2VyIG1hcmtzIGEgZGVwbG95bWVudFxuICogYGZhaWxlZGAgKHByb2R1Y3Rpb24gaW5jaWRlbnQgbGlua2VkIHRvIGEgZGVwbG95KSBvciBgcmVzdG9yZWRgIChyZWNvdmVyZWQpLlxuICogVGhlc2UgZmVlZCB0aGUgRE9SQSBwb3N0LWRlcGxveSBDaGFuZ2UgRmFpbHVyZSBSYXRlIGNvbXBvbmVudCBhbmQgdGhlIHJlYWxcbiAqIE1UVFIgKHJlc3RvcmVkIOKIkiBkZXBsb3llZCkuIENvcnJlbGF0ZWQgdG8gYSBkZXBsb3kgZXhlY3V0aW9uIGJ5IGBleGVjdXRpb25JZGAuXG4gKlxuICogQHRhYmxlIGRlcGxveW1lbnRfb3V0Y29tZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGRlcGxveW1lbnRPdXRjb21lID0gcGdUYWJsZSgnZGVwbG95bWVudF9vdXRjb21lcycsIHtcbiAgaWQ6IHV1aWQoJ2lkJykucHJpbWFyeUtleSgpLmRlZmF1bHRSYW5kb20oKSxcbiAgZXhlY3V0aW9uSWQ6IHZhcmNoYXIoJ2V4ZWN1dGlvbl9pZCcsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIGVudmlyb25tZW50OiB2YXJjaGFyKCdlbnZpcm9ubWVudCcsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIG91dGNvbWU6IHZhcmNoYXIoJ291dGNvbWUnLCB7IGxlbmd0aDogMjAgfSkuJHR5cGU8J2ZhaWxlZCcgfCAncmVzdG9yZWQnPigpLm5vdE51bGwoKSxcbiAgYXQ6IHRpbWVzdGFtcCgnYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5ub3ROdWxsKCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgb3JnRW52SWR4OiBpbmRleCgnZGVwbG95bWVudF9vdXRjb21lc19vcmdfZW52X2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5lbnZpcm9ubWVudCksXG4gIGV4ZWN1dGlvbklkeDogaW5kZXgoJ2RlcGxveW1lbnRfb3V0Y29tZXNfZXhlY3V0aW9uX2lkeCcpLm9uKHRhYmxlLmV4ZWN1dGlvbklkKSxcbiAgLy8gSWRlbXBvdGVudCByZS1tYXJraW5nOiBvbmUgcm93IHBlciAoZXhlY3V0aW9uLCBvdXRjb21lKS4gUmUtcG9zdGluZyB0aGUgc2FtZVxuICAvLyBvdXRjb21lIGZvciBhIGRlcGxveSBpcyBhIG5vLW9wL3JlZnJlc2ggKG9uQ29uZmxpY3REb1VwZGF0ZSB0aGUgYGF0YCksIHNvIGFcbiAgLy8gZmFpbGVk4oaScmVzdG9yZWQgcGFpciBpcyB0d28gcm93cyB3aGlsZSBhIGR1cGxpY2F0ZSBQT1NUIGRvZXNuJ3QgZG91YmxlLWNvdW50LlxuICBleGVjdXRpb25PdXRjb21lVW5pcXVlOiB1bmlxdWVJbmRleCgnZGVwbG95bWVudF9vdXRjb21lc19leGVjdXRpb25fb3V0Y29tZV91bmlxdWUnKVxuICAgIC5vbih0YWJsZS5leGVjdXRpb25JZCwgdGFibGUub3V0Y29tZSksXG59KSk7XG5cbi8qKlxuICogUGVyLW9yZyBpbmdlc3Rpb24gaGVhbHRoIChQaGFzZSAzKS4gVGhlIEFXUyBldmVudHMgTGFtYmRhIHBlcmlvZGljYWxseSBwb3N0c1xuICogZm9yd2FyZGVkL2Ryb3BwZWQgY291bnRlcnMgKyB0aGUgbGFzdCBldmVudCB0aW1lc3RhbXAgc28gdGhlIFJlcG9ydHMgVUkgY2FuXG4gKiBzaG93IHdoZXRoZXIgZXZlbnRzIGFyZSBmbG93aW5nIC8gc3RhbGUgLyBkcm9wcGluZy4gT25lIHJvdyBwZXIgb3JnLlxuICpcbiAqIEB0YWJsZSBpbmdlc3RfaGVhbHRoXG4gKi9cbmV4cG9ydCBjb25zdCBpbmdlc3RIZWFsdGggPSBwZ1RhYmxlKCdpbmdlc3RfaGVhbHRoJywge1xuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5wcmltYXJ5S2V5KCksXG4gIGxhc3RFdmVudEF0OiB0aW1lc3RhbXAoJ2xhc3RfZXZlbnRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgZm9yd2FyZGVkOiBiaWdpbnQoJ2ZvcndhcmRlZCcsIHsgbW9kZTogJ251bWJlcicgfSksXG4gIGRyb3BwZWQ6IGJpZ2ludCgnZHJvcHBlZCcsIHsgbW9kZTogJ251bWJlcicgfSksXG4gIHVwZGF0ZWRBdDogdGltZXN0YW1wKCd1cGRhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbn0pO1xuXG4vKipcbiAqIFByb2R1Y3Rpb24gaW5jaWRlbnRzIGluZ2VzdGVkIGZyb20gdGhlIG9yZydzIGluY2lkZW50IHRvb2xpbmcgKFBoYXNlIDUpLiBUaGVcbiAqIHVzZXIgcG9pbnRzIHRoZWlyIEFsZXJ0bWFuYWdlciAvIFBhZ2VyRHV0eSAvIERhdGFkb2cgd2ViaG9vayBhdFxuICogYFBPU1QgL2FwaS9yZXBvcnRzL2luY2lkZW50c2AgKG1hY2hpbmUgYHJlcG9ydGluZzppbmdlc3RgIHNjb3BlKS4gRWFjaCBpbmNpZGVudFxuICogY2FycmllcyBpdHMgZXh0ZXJuYWwgaWQsIHRoZSBhZmZlY3RlZCBgZW52aXJvbm1lbnRgLCB3aGVuIGl0IG9wZW5lZCwgYW5kIHdoZW5cbiAqIGl0IHdhcyByZXNvbHZlZCAobnVsbGFibGUg4oCUIGEgbGF0ZXIgcmVzb2x2ZSB1cGRhdGVzIGl0KS4gRE9SQSBjb3JyZWxhdGVzIGVhY2hcbiAqIGluY2lkZW50IHRvIHRoZSBtb3N0IHJlY2VudCBzdWNjZXNzZnVsIGRlcGxveSB0byBgZW52aXJvbm1lbnRgIHdpdGhpblxuICogYERPUkFfSU5DSURFTlRfV0lORE9XX0hPVVJTYCwgdHVybmluZyBpdCBpbnRvIGFuIGF1dG9tYXRlZCBwb3N0LWRlcGxveSBmYWlsdXJlXG4gKiAoQ2hhbmdlIEZhaWx1cmUgUmF0ZSkgYW5kIGEgcmVhbCByZWNvdmVyeSB0aW1lIChgcmVzb2x2ZWRfYXQg4oiSIG9wZW5lZF9hdGAgTVRUUikuXG4gKiBgaW5jaWRlbnRfaWRgIGlzIFVOSVFVRSBwZXIgb3JnIHNvIGEgcmVzb2x2ZSByZS1wb3N0IGlzIGFuIGlkZW1wb3RlbnQgdXBzZXJ0LlxuICpcbiAqIEB0YWJsZSBpbmNpZGVudHNcbiAqL1xuZXhwb3J0IGNvbnN0IGluY2lkZW50ID0gcGdUYWJsZSgnaW5jaWRlbnRzJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICAvLyBFeHRlcm5hbCBpbmNpZGVudCBpZCBmcm9tIHRoZSBzb3VyY2Ugc3lzdGVtIChQYWdlckR1dHkvRGF0YWRvZy9BbGVydG1hbmFnZXIpLlxuICAvLyBVbmlxdWUgUEVSIE9SRyAoc2VlIGluY2lkZW50T3JnVW5pcXVlKSDigJQgdGhlIGlkZW1wb3RlbmN5ICsgdXBzZXJ0IGtleS5cbiAgaW5jaWRlbnRJZDogdmFyY2hhcignaW5jaWRlbnRfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICAvLyBBZmZlY3RlZCBkZXBsb3kgZW52aXJvbm1lbnQgKGUuZy4gXCJwcm9kdWN0aW9uXCIpLiBDb3JyZWxhdGVkIHRvIGEgZGVwbG95IGVudi5cbiAgZW52aXJvbm1lbnQ6IHZhcmNoYXIoJ2Vudmlyb25tZW50JywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIG9wZW5lZEF0OiB0aW1lc3RhbXAoJ29wZW5lZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLm5vdE51bGwoKSxcbiAgLy8gTlVMTCB3aGlsZSB0aGUgaW5jaWRlbnQgaXMgb3BlbjsgYSBsYXRlciByZXNvbHZlIHdlYmhvb2sgc2V0cyBpdCAoaWRlbXBvdGVudFxuICAvLyB1cHNlcnQpLiBgcmVzb2x2ZWRfYXQg4oiSIG9wZW5lZF9hdGAgaXMgdGhlIHJlYWwgTVRUUiBmb3IgdGhlIGNvcnJlbGF0ZWQgZGVwbG95LlxuICByZXNvbHZlZEF0OiB0aW1lc3RhbXAoJ3Jlc29sdmVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIHNldmVyaXR5OiB2YXJjaGFyKCdzZXZlcml0eScsIHsgbGVuZ3RoOiA1MCB9KS5ub3ROdWxsKCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgLy8gQ29ycmVsYXRpb24gc2NhbjogbW9zdC1yZWNlbnQtZGVwbG95LWJlZm9yZS1vcGVuIGxvb2t1cHMgZ3JvdXAgYnkgKG9yZywgZW52KVxuICAvLyBhbmQgcmFuZ2Ugb24gb3BlbmVkX2F0LlxuICBvcmdFbnZPcGVuZWRJZHg6IGluZGV4KCdpbmNpZGVudHNfb3JnX2Vudl9vcGVuZWRfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmVudmlyb25tZW50LCB0YWJsZS5vcGVuZWRBdCksXG4gIC8vIElkZW1wb3RlbnQgdXBzZXJ0IC8gZGVkdXA6IG9uZSByb3cgcGVyIChvcmcsIGluY2lkZW50X2lkKS4gQSByZXNvbHZlIHJlLXBvc3RcbiAgLy8gdXBkYXRlcyByZXNvbHZlZF9hdCBpbnN0ZWFkIG9mIGluc2VydGluZyBhIGR1cGxpY2F0ZS5cbiAgb3JnSW5jaWRlbnRVbmlxdWU6IHVuaXF1ZUluZGV4KCdpbmNpZGVudHNfb3JnX2luY2lkZW50X3VuaXF1ZScpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5pbmNpZGVudElkKSxcbn0pKTtcblxuLyoqXG4gKiBQZXItb3JnIERPUkEgY29tcHV0YXRpb24gKyByZXRlbnRpb24gb3ZlcnJpZGVzLiBPbmUgcm93IHBlciBvcmcgKG9yZ19pZCBQSykuXG4gKiBgaW5jaWRlbnRXaW5kb3dIb3Vyc2AgKFBoYXNlIDViKSBvdmVycmlkZXMgdGhlIGdsb2JhbCBgRE9SQV9JTkNJREVOVF9XSU5ET1dfSE9VUlNgXG4gKiB1c2VkIHRvIGNvcnJlbGF0ZSBhbiBpbmdlc3RlZCBpbmNpZGVudCB0byB0aGUgbW9zdCByZWNlbnQgc3VjY2Vzc2Z1bCBkZXBsb3kuXG4gKiBgZXZlbnRSZXRlbnRpb25EYXlzYCAvIGBkb3JhUmV0ZW50aW9uRGF5c2AgKFBoYXNlIDcpIG92ZXJyaWRlIHRoZSBnbG9iYWwgcmVwb3J0aW5nXG4gKiByZXRlbnRpb24gd2luZG93cyBmb3IgdGhlIHNwbGl0IHN3ZWVwIOKAlCBzdGFuZGFyZCBldmVudHMgKGBlbnZpcm9ubWVudCBJUyBOVUxMYClcbiAqIHZzIERPUkEgc291cmNlIChkZXBsb3kgc3RhZ2VzICsgYGRlcGxveW1lbnRfb3V0Y29tZXNgICsgYGluY2lkZW50c2ApLiBBbnkgTlVMTCAvXG4gKiBhYnNlbnQgdmFsdWUgZmFsbHMgYmFjayB0byBpdHMgZW52IGRlZmF1bHQuIFNldCBzZWxmLXNlcnZlIGJ5IGFuIG9yZyBhZG1pbiB2aWFcbiAqIGBQVVQgL2FwaS9yZXBvcnRzL3NldHRpbmdzL2luY2lkZW50c2AuIFRoaXMgdGFibGUgaXMgaXRzZWxmIG5ldmVyIHB1cmdlZC5cbiAqXG4gKiBAdGFibGUgZG9yYV9zZXR0aW5nc1xuICovXG5leHBvcnQgY29uc3QgZG9yYVNldHRpbmdzID0gcGdUYWJsZSgnZG9yYV9zZXR0aW5ncycsIHtcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkucHJpbWFyeUtleSgpLFxuICBpbmNpZGVudFdpbmRvd0hvdXJzOiBpbnRlZ2VyKCdpbmNpZGVudF93aW5kb3dfaG91cnMnKSxcbiAgLy8gUGhhc2UgNyByZXRlbnRpb24gb3ZlcnJpZGVzIChkYXlzKS4gTlVMTCDih5IgdXNlIHRoZSBnbG9iYWwgZW52IGRlZmF1bHRcbiAgLy8gKFJFUE9SVElOR19FVkVOVF9SRVRFTlRJT05fREFZUyAvIFJFUE9SVElOR19ET1JBX1JFVEVOVElPTl9EQVlTKS5cbiAgZXZlbnRSZXRlbnRpb25EYXlzOiBpbnRlZ2VyKCdldmVudF9yZXRlbnRpb25fZGF5cycpLFxuICBkb3JhUmV0ZW50aW9uRGF5czogaW50ZWdlcignZG9yYV9yZXRlbnRpb25fZGF5cycpLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG59KTtcblxuLyoqXG4gKiBUeXBlU2NyaXB0IHR5cGVzIHJlcHJlc2VudGluZyBkYXRhYmFzZSByb3dzXG4gKi9cbmV4cG9ydCB0eXBlIFBpcGVsaW5lID0gdHlwZW9mIHBpcGVsaW5lLiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIFBpcGVsaW5lSW5zZXJ0ID0gdHlwZW9mIHBpcGVsaW5lLiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgUGlwZWxpbmVSZWdpc3RyeSA9IHR5cGVvZiBwaXBlbGluZVJlZ2lzdHJ5LiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIFBpcGVsaW5lUmVnaXN0cnlJbnNlcnQgPSB0eXBlb2YgcGlwZWxpbmVSZWdpc3RyeS4kaW5mZXJJbnNlcnQ7XG5cbmV4cG9ydCB0eXBlIFBpcGVsaW5lRXZlbnQgPSB0eXBlb2YgcGlwZWxpbmVFdmVudC4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBQaXBlbGluZUV2ZW50SW5zZXJ0ID0gdHlwZW9mIHBpcGVsaW5lRXZlbnQuJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBEZXBsb3ltZW50T3V0Y29tZSA9IHR5cGVvZiBkZXBsb3ltZW50T3V0Y29tZS4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBEZXBsb3ltZW50T3V0Y29tZUluc2VydCA9IHR5cGVvZiBkZXBsb3ltZW50T3V0Y29tZS4kaW5mZXJJbnNlcnQ7XG5cbmV4cG9ydCB0eXBlIEluZ2VzdEhlYWx0aCA9IHR5cGVvZiBpbmdlc3RIZWFsdGguJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgSW5nZXN0SGVhbHRoSW5zZXJ0ID0gdHlwZW9mIGluZ2VzdEhlYWx0aC4kaW5mZXJJbnNlcnQ7XG5cbmV4cG9ydCB0eXBlIEluY2lkZW50ID0gdHlwZW9mIGluY2lkZW50LiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIEluY2lkZW50SW5zZXJ0ID0gdHlwZW9mIGluY2lkZW50LiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgRG9yYVNldHRpbmdzID0gdHlwZW9mIGRvcmFTZXR0aW5ncy4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBEb3JhU2V0dGluZ3NJbnNlcnQgPSB0eXBlb2YgZG9yYVNldHRpbmdzLiRpbmZlckluc2VydDtcblxuLyoqXG4gKiBIZWxwZXIgdHlwZXMgZm9yIHdvcmtpbmcgd2l0aCBwYXJ0aWFsIHVwZGF0ZXNcbiAqL1xuZXhwb3J0IHR5cGUgUGlwZWxpbmVVcGRhdGUgPSBQYXJ0aWFsPE9taXQ8UGlwZWxpbmVJbnNlcnQsICdpZCcgfCAnY3JlYXRlZEF0JyB8ICdjcmVhdGVkQnknPj47XG4iXX0=
|
|
332
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YWJhc2Uvc2NoZW1hL3BpcGVsaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUNMLGFBQWEsR0FFZCxNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQTBCbkk7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFO0lBQzNDLGNBQWM7SUFDZCxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLGFBQWEsRUFBRTtJQUUzQyxrQ0FBa0M7SUFDbEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7U0FDdEMsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFFWixlQUFlO0lBQ2YsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDMUIsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUN2RCxVQUFVLEVBQUU7U0FDWixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUMxQixPQUFPLENBQUMsYUFBYSxDQUFDO1NBQ3RCLE9B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RSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDekcsK0VBQStFO0lBQy9FLHdEQUF3RDtJQUN4RCxpQkFBaUIsRUFBRSxXQUFXLENBQUMsK0JBQStCLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDO0NBQ2xHLENBQUMsQ0FBQyxDQUFDO0FBRUo7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLGVBQWUsRUFBRTtJQUNuRCxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRTtJQUN0RCxtQkFBbUIsRUFBRSxPQUFPLENBQUMsdUJBQXVCLENBQUM7SUFDckQsd0VBQXdFO0lBQ3hFLG9FQUFvRTtJQUNwRSxrQkFBa0IsRUFBRSxPQUFPLENBQUMsc0JBQXNCLENBQUM7SUFDbkQsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLHFCQUFxQixDQUFDO0lBQ2pELFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxFQUFFO0NBQ2xGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQge1xuICBTWVNURU1fT1JHX0lELCB0eXBlIENyaXRpY2FsaXR5LCB0eXBlIEVudGl0eUxhYmVscywgdHlwZSBFbnRpdHlMaW5rLCB0eXBlIExpZmVjeWNsZSwgdHlwZSBNZXRhRGF0YVR5cGUsXG4gIHR5cGUgT3duZXJUeXBlLCB0eXBlIFZpc2liaWxpdHksXG59IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IHNxbCB9IGZyb20gJ2RyaXp6bGUtb3JtJztcbmltcG9ydCB7IGJpZ2ludCwgYm9vbGVhbiwgaW50ZWdlciwgdmFyY2hhciwgcGdUYWJsZSwgdGV4dCwgdGltZXN0YW1wLCB1dWlkLCBqc29uYiwgaW5kZXgsIHVuaXF1ZUluZGV4IH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSc7XG5cbi8qKlxuICogUGlwZWxpbmUgYnVpbGRlciBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgc3RvcmVkIGluIGRhdGFiYXNlLlxuICogTWlycm9ycyB0aGUgY2Fub25pY2FsIEJ1aWxkZXJQcm9wcyBmcm9tIHBpcGVsaW5lLWNvcmUgKEpTT04tc2VyaWFsaXphYmxlIGZvcm0pLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lQnVpbGRlckNvbmZpZyB7XG4gIHJlYWRvbmx5IHByb2plY3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBpcGVsaW5lTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgZ2xvYmFsPzogTWV0YURhdGFUeXBlO1xuICByZWFkb25seSBzeW50aDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJlYWRvbmx5IGRlZmF1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJlYWRvbmx5IHJvbGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmVhZG9ubHkgc3RhZ2VzPzogUGlwZWxpbmVTdGFnZUNvbmZpZ1tdO1xufVxuXG4vKipcbiAqIFN0YWdlIGNvbmZpZ3VyYXRpb24gc3RvcmVkIGluIGRhdGFiYXNlIChKU09OLXNlcmlhbGl6YWJsZSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVTdGFnZUNvbmZpZyB7XG4gIHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBhbGlhcz86IHN0cmluZztcbiAgcmVhZG9ubHkgc3RlcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107XG59XG5cbi8qKlxuICogVGFibGUgZm9yIHN0b3JpbmcgcGlwZWxpbmUgaW5zdGFuY2VzIGFuZCB0aGVpciBmdWxsIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogRmVhdHVyZXMgKiAtIEZ1bGwgQnVpbGRlclByb3BzIHNlcmlhbGl6YXRpb24gZm9yIHJlY29uc3RydWN0aW9uXG4gKiAtIE9yZ2FuaXphdGlvbi1sZXZlbCBpc29sYXRpb25cbiAqIC0gUGlwZWxpbmUgc3RhdHVzIHRyYWNraW5nXG4gKiAtIEV4ZWN1dGlvbiBoaXN0b3J5IHRyYWNraW5nXG4gKiAtIEZsZXhpYmxlIHRhZ2dpbmcgc3lzdGVtXG4gKlxuICogQHRhYmxlIHBpcGVsaW5lc1xuICovXG5leHBvcnQgY29uc3QgcGlwZWxpbmUgPSBwZ1RhYmxlKCdwaXBlbGluZXMnLCB7XG4gIC8vIFByaW1hcnkga2V5XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG5cbiAgLy8gT3JnYW5pemF0aW9uIGFuZCBhY2Nlc3MgY29udHJvbFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KVxuICAgIC5kZWZhdWx0KFNZU1RFTV9PUkdfSUQpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBBdWRpdCBmaWVsZHNcbiAgY3JlYXRlZEJ5OiB0ZXh0KCdjcmVhdGVkX2J5JylcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSlcbiAgICAuZGVmYXVsdE5vdygpXG4gICAgLm5vdE51bGwoKSxcbiAgdXBkYXRlZEJ5OiB0ZXh0KCd1cGRhdGVkX2J5JylcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG4gIHVwZGF0ZWRBdDogdGltZXN0YW1wKCd1cGRhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSlcbiAgICAuZGVmYXVsdE5vdygpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBDb3JlIHBpcGVsaW5lIGluZm9ybWF0aW9uXG4gIHByb2plY3Q6IHZhcmNoYXIoJ3Byb2plY3QnLCB7IGxlbmd0aDogMjU1IH0pXG4gICAgLm5vdE51bGwoKSxcbiAgb3JnYW5pemF0aW9uOiB2YXJjaGFyKCdvcmdhbml6YXRpb24nLCB7IGxlbmd0aDogMjU1IH0pXG4gICAgLm5vdE51bGwoKSxcbiAgcGlwZWxpbmVOYW1lOiB2YXJjaGFyKCdwaXBlbGluZV9uYW1lJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgZGVzY3JpcHRpb246IHRleHQoJ2Rlc2NyaXB0aW9uJyksXG4gIGtleXdvcmRzOiBqc29uYigna2V5d29yZHMnKVxuICAgIC4kdHlwZTxzdHJpbmdbXT4oKVxuICAgIC5kZWZhdWx0KFtdKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gUGlwZWxpbmUgY29uZmlndXJhdGlvblxuICBwcm9wczoganNvbmIoJ3Byb3BzJylcbiAgICAuJHR5cGU8UGlwZWxpbmVCdWlsZGVyQ29uZmlnPigpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBEZXZlbG9wZXItcG9ydGFsIGNhdGFsb2cgbWV0YWRhdGEgKG93bmVyc2hpcCAvIGxpZmVjeWNsZSAvIGNsYXNzaWZpY2F0aW9uKS5cbiAgLy8gb3duZXJJZCBkZWZhdWx0cyB0byB0aGUgY3JlYXRpbmcgdXNlciAoc2V0IGF0IGluc2VydCksIHNvIGV2ZXJ5IHBpcGVsaW5lIGhhc1xuICAvLyBhbiBvd25lciBmb3IgXCJteSBzZXJ2aWNlc1wiIHZpZXdzOyBvd25lclR5cGUgZGlzdGluZ3Vpc2hlcyB1c2VyIHZzIHRlYW0uXG4gIG93bmVySWQ6IHRleHQoJ293bmVyX2lkJyksXG4gIG93bmVyVHlwZTogdmFyY2hhcignb3duZXJfdHlwZScsIHsgbGVuZ3RoOiAxMCB9KS4kdHlwZTxPd25lclR5cGU+KCksXG4gIGxpZmVjeWNsZTogdmFyY2hhcignbGlmZWN5Y2xlJywgeyBsZW5ndGg6IDIwIH0pXG4gICAgLiR0eXBlPExpZmVjeWNsZT4oKVxuICAgIC5kZWZhdWx0KCdwcm9kdWN0aW9uJyBhcyBMaWZlY3ljbGUpXG4gICAgLm5vdE51bGwoKSxcbiAgY3JpdGljYWxpdHk6IHZhcmNoYXIoJ2NyaXRpY2FsaXR5JywgeyBsZW5ndGg6IDEwIH0pLiR0eXBlPENyaXRpY2FsaXR5PigpLFxuICBsYWJlbHM6IGpzb25iKCdsYWJlbHMnKVxuICAgIC4kdHlwZTxFbnRpdHlMYWJlbHM+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuICBsaW5rczoganNvbmIoJ2xpbmtzJylcbiAgICAuJHR5cGU8RW50aXR5TGlua1tdPigpXG4gICAgLmRlZmF1bHQoW10pXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBBY2Nlc3MgYW5kIHZpc2liaWxpdHkg4oCUIHRoZSBzaGFyZWQgdGhyZWUtcnVuZyBsYWRkZXIgKHNlZSBhcGktY29yZSdzXG4gIC8vIGBWaXNpYmlsaXR5YCk6IGBwcml2YXRlYCBpcyBhdXRob3Itb25seSAoYGNyZWF0ZWRfYnlgKSwgYG9yZ2AgaXMgdGhlIHdob2xlXG4gIC8vIG93bmluZyBvcmcsIGBwdWJsaWNgIHJlYWNoZXMgdGhlIG9yZydzIHRlYW1zIGFuZCDigJQgZnJvbSB0aGUgc3lzdGVtIG9yZyDigJRcbiAgLy8gZXZlcnkgb3JnLiBDb25zdHJhaW5lZCBhdCB0aGUgU1FMIGxheWVyIHRvbyB2aWEgYSBDSEVDSyBpbiBwb3N0Z3Jlcy1pbml0LnNxbFxuICAvLyBzbyBhIHR5cG8gY2FuJ3Qgc25lYWsgcGFzdCB0aGUgYXBwbGljYXRpb24gbGF5ZXIuXG4gIHZpc2liaWxpdHk6IHZhcmNoYXIoJ3Zpc2liaWxpdHknLCB7IGxlbmd0aDogMTAgfSlcbiAgICAuJHR5cGU8VmlzaWJpbGl0eT4oKVxuICAgIC5kZWZhdWx0KCdwcml2YXRlJylcbiAgICAubm90TnVsbCgpLFxuICBpc0RlZmF1bHQ6IGJvb2xlYW4oJ2lzX2RlZmF1bHQnKVxuICAgIC5kZWZhdWx0KGZhbHNlKVxuICAgIC5ub3ROdWxsKCksXG4gIGlzQWN0aXZlOiBib29sZWFuKCdpc19hY3RpdmUnKVxuICAgIC5kZWZhdWx0KHRydWUpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBEZWxldGlvbiB0cmFja2luZyAoc29mdCBkZWxldGUpXG4gIGRlbGV0ZWRBdDogdGltZXN0YW1wKCdkZWxldGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGRlbGV0ZWRCeTogdGV4dCgnZGVsZXRlZF9ieScpLFxuICAvLyBTb2Z0LWRlbGV0ZSBwdXJnZSBkZWFkbGluZTogdGhlIHJldGVudGlvbiBzd2VlcCBoYXJkLWRlbGV0ZXMgdG9tYnN0b25lZFxuICAvLyByb3dzIG9uY2UgYHB1cmdlX2FmdGVyYCBoYXMgcGFzc2VkIChzZXQgb24gZGVsZXRlIGFsb25nc2lkZSBkZWxldGVkX2F0KS5cbiAgcHVyZ2VBZnRlcjogdGltZXN0YW1wKCdwdXJnZV9hZnRlcicsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxufSwgKHRhYmxlKSA9PiAoe1xuICAvLyBQYXJ0aWFsIGluZGV4IG92ZXIganVzdCB0aGUgdG9tYnN0b25lcyDigJQgZHJpdmVzIHRoZSByZXRlbnRpb24gcHVyZ2Ugc3dlZXBcbiAgLy8gKGBXSEVSRSBkZWxldGVkX2F0IElTIE5PVCBOVUxMIEFORCBwdXJnZV9hZnRlciA8IG5vd2ApIHdpdGhvdXQgc2Nhbm5pbmcgbGl2ZSByb3dzLlxuICBwdXJnZUlkeDogaW5kZXgoJ3BpcGVsaW5lX3B1cmdlX2lkeCcpLm9uKHRhYmxlLnB1cmdlQWZ0ZXIpLndoZXJlKHNxbGBkZWxldGVkX2F0IElTIE5PVCBOVUxMYCksXG4gIC8vIEluZGV4ZXMgZm9yIGNvbW1vbiBxdWVyaWVzXG4gIHByb2plY3RJZHg6IGluZGV4KCdwaXBlbGluZV9wcm9qZWN0X2lkeCcpLm9uKHRhYmxlLnByb2plY3QpLFxuICAvLyBEZXZlbG9wZXItcG9ydGFsIGNhdGFsb2cgaW5kZXhlczogXCJteSBzZXJ2aWNlc1wiIChvd25lcikgKyBsaWZlY3ljbGUgZmlsdGVyLlxuICBvd25lcklkeDogaW5kZXgoJ3BpcGVsaW5lX293bmVyX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5vd25lcklkKSxcbiAgbGlmZWN5Y2xlSWR4OiBpbmRleCgncGlwZWxpbmVfbGlmZWN5Y2xlX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5saWZlY3ljbGUpLFxuICBvcmdhbml6YXRpb25JZHg6IGluZGV4KCdwaXBlbGluZV9vcmdhbml6YXRpb25faWR4Jykub24odGFibGUub3JnYW5pemF0aW9uKSxcbiAgb3JnSWRJZHg6IGluZGV4KCdwaXBlbGluZV9vcmdfaWRfaWR4Jykub24odGFibGUub3JnSWQpLFxuICBhY3RpdmVJZHg6IGluZGV4KCdwaXBlbGluZV9hY3RpdmVfaWR4Jykub24odGFibGUuaXNBY3RpdmUpLFxuICBjcmVhdGVkQXRJZHg6IGluZGV4KCdwaXBlbGluZV9jcmVhdGVkX2F0X2lkeCcpLm9uKHRhYmxlLmNyZWF0ZWRBdCksXG4gIHVwZGF0ZWRBdElkeDogaW5kZXgoJ3BpcGVsaW5lX3VwZGF0ZWRfYXRfaWR4Jykub24odGFibGUudXBkYXRlZEF0KSxcblxuICAvLyBDb21wb3NpdGUgaW5kZXggZm9yIGNvbW1vbiBhY2Nlc3MgcGF0dGVybiAob3JnSWQgKyBpc0FjdGl2ZSlcbiAgb3JnQWN0aXZlSWR4OiBpbmRleCgncGlwZWxpbmVfb3JnX2FjdGl2ZV9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUuaXNBY3RpdmUpLFxuXG4gIC8vIENvbXBvc2l0ZSBpbmRleCBmb3IgZmlsdGVyZWQgcXVlcmllcyAob3JnSWQgKyB2aXNpYmlsaXR5ICsgaXNBY3RpdmUpXG4gIG9yZ1Zpc2liaWxpdHlBY3RpdmVJZHg6IGluZGV4KCdwaXBlbGluZV9vcmdfdmlzaWJpbGl0eV9hY3RpdmVfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLnZpc2liaWxpdHksIHRhYmxlLmlzQWN0aXZlKSxcbiAgLy8gRHJpdmVzIHRoZSBcIm15IHByaXZhdGUgZHJhZnRzXCIgbGVnIG9mIHRoZSB2aXNpYmlsaXR5IHByZWRpY2F0ZS5cbiAgY3JlYXRlZEJ5SWR4OiBpbmRleCgncGlwZWxpbmVfY3JlYXRlZF9ieV9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUuY3JlYXRlZEJ5KSxcblxuICAvLyBQYXJ0aWFsIGluZGV4IGZvciBhY3RpdmUtb25seSBxdWVyaWVzIChzbWFsbGVyLCBmYXN0ZXIgdGhhbiBmdWxsIGluZGV4KVxuICBhY3RpdmVPbmx5T3JnSWR4OiBpbmRleCgncGlwZWxpbmVfYWN0aXZlX29ubHlfb3JnX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5jcmVhdGVkQXQpLndoZXJlKHNxbGBpc19hY3RpdmUgPSB0cnVlYCksXG5cbiAgLy8gVW5pcXVlIGNvbnN0cmFpbnQgb24gcHJvamVjdCArIG9yZ2FuaXphdGlvbiArIG9yZ0lkXG4gIHByb2plY3RPcmdVbmlxdWU6IHVuaXF1ZUluZGV4KCdwaXBlbGluZV9wcm9qZWN0X29yZ191bmlxdWUnKVxuICAgIC5vbih0YWJsZS5wcm9qZWN0LCB0YWJsZS5vcmdhbml6YXRpb24sIHRhYmxlLm9yZ0lkKSxcbn0pKTtcblxuLyoqXG4gKiBQaXBlbGluZSBkZXBsb3ltZW50IHJlZ2lzdHJ5LlxuICogTWFwcyBkZXBsb3llZCBDb2RlUGlwZWxpbmUgQVJOcyBiYWNrIHRvIHBpcGVsaW5lIHJlY29yZHMgYW5kIG9yZyBJRHMuXG4gKiBQb3B1bGF0ZWQgYnkgdGhlIGRlcGxveSBjb21tYW5kIGFmdGVyIHN1Y2Nlc3NmdWwgQ0RLIGRlcGxveS5cbiAqIFVzZWQgYnkgdGhlIHBpcGVsaW5lLWV2ZW50cyBMYW1iZGEgdG8gcmVzb2x2ZSBFdmVudEJyaWRnZSBldmVudHMgdG8gb3JnLXNjb3BlZCByZWNvcmRzLlxuICpcbiAqIEB0YWJsZSBwaXBlbGluZV9yZWdpc3RyeVxuICovXG5leHBvcnQgY29uc3QgcGlwZWxpbmVSZWdpc3RyeSA9IHBnVGFibGUoJ3BpcGVsaW5lX3JlZ2lzdHJ5Jywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICAvLyBUaGUgcGxhdGZvcm0ncyBwaXBlbGluZSByZWNvcmQgaWQg4oCUIGEgU1RBQkxFIHV1aWQgY3JlYXRlZCB3aXRoIHRoZSBwaXBlbGluZVxuICAvLyByZWNvcmQsIGtub3duIGF0IENESyBzeW50aCwgYW5kIGFwcGxpZWQgdG8gdGhlIGxpdmUgQ29kZVBpcGVsaW5lIGFzIHRoZVxuICAvLyBgcGIucGlwZWxpbmUtaWRgIHRhZy4gVGhlIGV2ZW50cyBMYW1iZGEgcmVhZHMgdGhhdCB0YWcgYW5kIHJlcG9ydHNcbiAgLy8gYWdhaW5zdCB0aGlzIGlkLCBzbyBpdCBJUyB0aGUgZXZlbnQgam9pbiBrZXkgKHJlcGxhY2luZyB0aGUgbWFza2VkIEFSTiDigJRcbiAgLy8gaXQgY2FycmllcyBubyBBV1MgYWNjb3VudC9yZWdpb24sIHNvIG5vIG1hc2tpbmcgaXMgbmVlZGVkKS4gVW5pcXVlOiBvbmVcbiAgLy8gcmVnaXN0cnkgcm93IHBlciBwaXBlbGluZSArIHRoZSB1cHNlcnQga2V5IGZvciAocmUpcmVnaXN0cmF0aW9uLlxuICBwaXBlbGluZUlkOiB1dWlkKCdwaXBlbGluZV9pZCcpLm5vdE51bGwoKS51bmlxdWUoKSxcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICBwaXBlbGluZU5hbWU6IHZhcmNoYXIoJ3BpcGVsaW5lX25hbWUnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgcmVnaW9uOiB2YXJjaGFyKCdyZWdpb24nLCB7IGxlbmd0aDogMzAgfSksXG4gIHByb2plY3Q6IHZhcmNoYXIoJ3Byb2plY3QnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBvcmdhbml6YXRpb246IHZhcmNoYXIoJ29yZ2FuaXphdGlvbicsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIGxhc3REZXBsb3llZDogdGltZXN0YW1wKCdsYXN0X2RlcGxveWVkJywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIHN0YWNrTmFtZTogdmFyY2hhcignc3RhY2tfbmFtZScsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbiAgdXBkYXRlZEF0OiB0aW1lc3RhbXAoJ3VwZGF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSwgKHRhYmxlKSA9PiAoe1xuICBvcmdJZElkeDogaW5kZXgoJ3JlZ2lzdHJ5X29yZ19pZF9pZHgnKS5vbih0YWJsZS5vcmdJZCksXG4gIG9yZ1JlZ2lvbklkeDogaW5kZXgoJ3JlZ2lzdHJ5X29yZ19yZWdpb25faWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLnJlZ2lvbiksXG59KSk7XG5cbi8qKlxuICogRXZlbnQgc291cmNlIGlkZW50aWZpZXJzIGZvciBwaXBlbGluZV9ldmVudHMuXG4gKi9cbmV4cG9ydCB0eXBlIEV2ZW50U291cmNlID0gJ2NvZGVwaXBlbGluZScgfCAnY29kZWJ1aWxkJyB8ICdwbHVnaW4tYnVpbGQnO1xuXG4vKipcbiAqIEV2ZW50IHR5cGUgZ3JhbnVsYXJpdHkgbGV2ZWxzIGZvciBwaXBlbGluZV9ldmVudHMuXG4gKi9cbmV4cG9ydCB0eXBlIEV2ZW50VHlwZSA9ICdQSVBFTElORScgfCAnU1RBR0UnIHwgJ0FDVElPTicgfCAnQlVJTEQnO1xuXG4vKipcbiAqIFBpcGVsaW5lIGV4ZWN1dGlvbiBhbmQgYnVpbGQgZXZlbnRzLlxuICogQ2FwdHVyZXMgQ29kZVBpcGVsaW5lL0NvZGVCdWlsZCBzdGF0ZSBjaGFuZ2VzIGZyb20gRXZlbnRCcmlkZ2VcbiAqIGFuZCBwbHVnaW4gRG9ja2VyIGJ1aWxkIG91dGNvbWVzIGZyb20gQnVsbE1RLlxuICogQWxsIGV2ZW50cyBhcmUgb3JnLXNjb3BlZCBmb3IgbXVsdGktdGVuYW50IHJlcG9ydGluZy5cbiAqXG4gKiBAdGFibGUgcGlwZWxpbmVfZXZlbnRzXG4gKi9cbmV4cG9ydCBjb25zdCBwaXBlbGluZUV2ZW50ID0gcGdUYWJsZSgncGlwZWxpbmVfZXZlbnRzJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICBwaXBlbGluZUlkOiB1dWlkKCdwaXBlbGluZV9pZCcpLFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIGV2ZW50U291cmNlOiB2YXJjaGFyKCdldmVudF9zb3VyY2UnLCB7IGxlbmd0aDogNTAgfSkuJHR5cGU8RXZlbnRTb3VyY2U+KCkubm90TnVsbCgpLFxuICBldmVudFR5cGU6IHZhcmNoYXIoJ2V2ZW50X3R5cGUnLCB7IGxlbmd0aDogNTAgfSkuJHR5cGU8RXZlbnRUeXBlPigpLm5vdE51bGwoKSxcbiAgc3RhdHVzOiB2YXJjaGFyKCdzdGF0dXMnLCB7IGxlbmd0aDogMjAgfSkubm90TnVsbCgpLFxuICBleGVjdXRpb25JZDogdmFyY2hhcignZXhlY3V0aW9uX2lkJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgc3RhZ2VOYW1lOiB2YXJjaGFyKCdzdGFnZV9uYW1lJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgYWN0aW9uTmFtZTogdmFyY2hhcignYWN0aW9uX25hbWUnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBlcnJvck1lc3NhZ2U6IHRleHQoJ2Vycm9yX21lc3NhZ2UnKSxcbiAgc3RhcnRlZEF0OiB0aW1lc3RhbXAoJ3N0YXJ0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgY29tcGxldGVkQXQ6IHRpbWVzdGFtcCgnY29tcGxldGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGR1cmF0aW9uTXM6IGludGVnZXIoJ2R1cmF0aW9uX21zJyksXG4gIC8vIERPUkEgZGVwbG95LWF0dHJpYnV0aW9uIChhbGwgbnVsbGFibGU7IHBvcHVsYXRlZCBhdCBpbmdlc3Qgd2hlbiB0aGUgc291cmNlXG4gIC8vIGV2ZW50IGNhcnJpZXMgdGhlbSDigJQgbGVnYWN5L0NJLW9ubHkgZXZlbnRzIGxlYXZlIHRoZW0gTlVMTCkuIGBlbnZpcm9ubWVudGBcbiAgLy8gaXMgdGhlIGRlcGxveSB0YXJnZXQgKGUuZy4gXCJwcm9kdWN0aW9uXCIpOyBpdHMgcHJlc2VuY2UgbWFya3MgYW4gZXhlY3V0aW9uXG4gIC8vIGFzIGEgcmVhbCBkZXBsb3ltZW50LCBsZXR0aW5nIERPUkEgc2NvcGUgcGFzdCBnZW5lcmljIHBpcGVsaW5lIHJ1bnMuXG4gIC8vIGBjb21taXRTaGFgL2Bjb21taXRSZWZgIGNhcHR1cmUgdGhlIHNvdXJjZSByZXZpc2lvbiBmb3IgbGVhZC10aW1lIHdvcmsuXG4gIGNvbW1pdFNoYTogdmFyY2hhcignY29tbWl0X3NoYScsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIGNvbW1pdFJlZjogdmFyY2hhcignY29tbWl0X3JlZicsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIGVudmlyb25tZW50OiB2YXJjaGFyKCdlbnZpcm9ubWVudCcsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIC8vIERPUkEgdHJ1ZS1sZWFkLXRpbWUgYXR0cmlidXRpb24gKFBoYXNlIDQpLiBUaGUgZm9yd2FyZGVyIHJlc29sdmVzIHRoZSBzb3VyY2VcbiAgLy8gY29tbWl0IHJhbmdlIGluLWFjY291bnQgYW5kIHJlcG9ydHMgdGhlIE9MREVTVCB1bnNoaXBwZWQgY29tbWl0J3MgdGltZXN0YW1wXG4gIC8vICsgaG93IG1hbnkgY29tbWl0cyBzaGlwcGVkLiBCb3RoIG51bGxhYmxlIOKAlCBldmVudHMgd2hvc2Ugc291cmNlIHR5cGUvdG9rZW5cbiAgLy8gY2FuJ3QgYmUgcmVzb2x2ZWQgbGVhdmUgdGhlbSBOVUxMIGFuZCBsZWFkIHRpbWUgcmVwb3J0cyBgdW5rbm93bmAuXG4gIGNvbW1pdFRpbWVzdGFtcDogdGltZXN0YW1wKCdjb21taXRfdGltZXN0YW1wJywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGNvbW1pdENvdW50OiBpbnRlZ2VyKCdjb21taXRfY291bnQnKSxcbiAgZGV0YWlsOiBqc29uYignZGV0YWlsJykuJHR5cGU8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgcGlwZWxpbmVJZElkeDogaW5kZXgoJ2V2ZW50X3BpcGVsaW5lX2lkX2lkeCcpLm9uKHRhYmxlLnBpcGVsaW5lSWQpLFxuICBvcmdJZElkeDogaW5kZXgoJ2V2ZW50X29yZ19pZF9pZHgnKS5vbih0YWJsZS5vcmdJZCksXG4gIGV2ZW50VHlwZUlkeDogaW5kZXgoJ2V2ZW50X3R5cGVfaWR4Jykub24odGFibGUuZXZlbnRUeXBlKSxcbiAgc3RhdHVzSWR4OiBpbmRleCgnZXZlbnRfc3RhdHVzX2lkeCcpLm9uKHRhYmxlLnN0YXR1cyksXG4gIGV4ZWN1dGlvbklkSWR4OiBpbmRleCgnZXZlbnRfZXhlY3V0aW9uX2lkX2lkeCcpLm9uKHRhYmxlLmV4ZWN1dGlvbklkKSxcbiAgY3JlYXRlZEF0SWR4OiBpbmRleCgnZXZlbnRfY3JlYXRlZF9hdF9pZHgnKS5vbih0YWJsZS5jcmVhdGVkQXQpLFxuICBvcmdUeXBlQ3JlYXRlZElkeDogaW5kZXgoJ2V2ZW50X29yZ190eXBlX2NyZWF0ZWRfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmV2ZW50VHlwZSwgdGFibGUuY3JlYXRlZEF0KSxcbiAgb3JnU291cmNlU3RhdHVzSWR4OiBpbmRleCgnZXZlbnRfb3JnX3NvdXJjZV9zdGF0dXNfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmV2ZW50U291cmNlLCB0YWJsZS5zdGF0dXMpLFxuICAvLyBJZGVtcG90ZW5jeTogRXZlbnRCcmlkZ2Ug4oaSIFNRUyBpcyBhdC1sZWFzdC1vbmNlLCBzbyB0aGUgc2FtZSBzdGF0ZS1jaGFuZ2VcbiAgLy8gY2FuIGJlIGRlbGl2ZXJlZCB0d2ljZS4gVGhpcyBwYXJ0aWFsIHVuaXF1ZSBpbmRleCBkZWR1cHMgcmUtZGVsaXZlcmllc1xuICAvLyAocGFpcmVkIHdpdGggYG9uQ29uZmxpY3REb05vdGhpbmdgIGluIHJlcG9ydGluZy1zZXJ2aWNlLmluZ2VzdEV2ZW50cykuXG4gIC8vIFBhcnRpYWwgKGV4ZWN1dGlvbl9pZCBJUyBOT1QgTlVMTCkgYmVjYXVzZSB0aGF0J3MgdGhlIG5hdHVyYWwgcGVyLWV2ZW50XG4gIC8vIGtleTsgZXZlbnRzIHdpdGhvdXQgYW4gZXhlY3V0aW9uSWQgKHJhcmUpIGFyZW4ndCBkZWR1cGVkLCB3aGljaCBpcyBzYWZlLlxuICAvLyBJbmNsdWRlcyBwaXBlbGluZV9pZCBzbyBhICh0aGVvcmV0aWNhbCkgZXhlY3V0aW9uLWlkIHJldXNlIGFjcm9zcyBwaXBlbGluZXNcbiAgLy8gY2FuJ3QgY29sbGlkZSBub3cgdGhhdCB0aGUgQVJOIGlzIG5vIGxvbmdlciBwYXJ0IG9mIHRoZSByb3cuXG4gIC8vXG4gIC8vIENPQUxFU0NFIHRoZSBudWxsYWJsZSBwYXJ0cyB0byBzZW50aW5lbHMgKGV4cHJlc3Npb24gaW5kZXgpOiBQSVBFTElORS9TVEFHRS9cbiAgLy8gQlVJTEQgZXZlbnRzIGxlYXZlIHN0YWdlX25hbWUvYWN0aW9uX25hbWUgTlVMTCAocGx1Z2luLWJ1aWxkIGFsc28gcGlwZWxpbmVfaWRcbiAgLy8gTlVMTCksIGFuZCBQb3N0Z3JlcyB0cmVhdHMgTlVMTHMgYXMgRElTVElOQ1QgaW4gYSB1bmlxdWUgaW5kZXgg4oCUIHNvIHRoZSBwbGFpblxuICAvLyBjb2x1bW4gaW5kZXggbmV2ZXIgbWF0Y2hlcyBmb3IgdGhvc2UgdHlwZXMgYW5kIG9uQ29uZmxpY3REb05vdGhpbmcgY2FuJ3QgZGVkdXBcbiAgLy8gdGhlaXIgYXQtbGVhc3Qtb25jZSByZS1kZWxpdmVyaWVzLiBDb2xsYXBzaW5nIE5VTEzihpInJyBtYWtlcyBlcXVhbCBldmVudHMgZXF1YWwuXG4gIC8vIChkcml6emxlJ3MgdW5pcXVlSW5kZXggY2FuJ3QgZXhwcmVzcyBOVUxMUyBOT1QgRElTVElOQ1Qgb24gYSBwYXJ0aWFsIGluZGV4LCBzb1xuICAvLyB3ZSB1c2UgdGhlIGVxdWl2YWxlbnQgZXhwcmVzc2lvbiBpbmRleC4pIE1JR1JBVElPTiBSRVFVSVJFRDogZHJpenpsZS1raXQgZ2VuZXJhdGUuXG4gIGRlZHVwSWR4OiB1bmlxdWVJbmRleCgnZXZlbnRfZGVkdXBfaWR4JylcbiAgICAub24oXG4gICAgICBzcWxgY29hbGVzY2UoJHt0YWJsZS5waXBlbGluZUlkfTo6dGV4dCwgJycpYCxcbiAgICAgIHRhYmxlLmV4ZWN1dGlvbklkLFxuICAgICAgdGFibGUuZXZlbnRUeXBlLFxuICAgICAgdGFibGUuc3RhdHVzLFxuICAgICAgc3FsYGNvYWxlc2NlKCR7dGFibGUuc3RhZ2VOYW1lfSwgJycpYCxcbiAgICAgIHNxbGBjb2FsZXNjZSgke3RhYmxlLmFjdGlvbk5hbWV9LCAnJylgLFxuICAgIClcbiAgICAud2hlcmUoc3FsYGV4ZWN1dGlvbl9pZCBJUyBOT1QgTlVMTGApLFxuICAvLyBET1JBIGRlcGxveS1zY29wZWQgcmVhZHM6IG9ubHkgUElQRUxJTkUtbGV2ZWwgZXhlY3V0aW9ucyB0YWdnZWQgd2l0aCBhXG4gIC8vIGRlcGxveSBlbnZpcm9ubWVudC4gYGV2ZW50X3R5cGVgIGlzIGluIHRoZSBpbmRleCBiZWNhdXNlIHRoZSBldmVudHMgTGFtYmRhXG4gIC8vIHRhZ3MgRVZFUlkgZXZlbnQgb2YgYSBkZXBsb3llZCBwaXBlbGluZSAoU1RBR0UvQUNUSU9OIHRvbyksIHdoaWxlIHRoZSBET1JBXG4gIC8vIHNjYW4gd2FudHMgb25seSBgZXZlbnRfdHlwZT0nUElQRUxJTkUnYCDigJQgaW5jbHVkaW5nIGl0IHJlc3RvcmVzIHNlbGVjdGl2aXR5LlxuICAvLyBQYXJ0aWFsIChlbnZpcm9ubWVudCBJUyBOT1QgTlVMTCkga2VlcHMgaXQgc21hbGwg4oCUIGxlZ2FjeS9DSS1vbmx5IGV2ZW50c1xuICAvLyBhcmVuJ3QgaW5kZXhlZC4gVGhlIGRlZmF1bHQgcnVuLWJhc2VkIERPUkEgcGF0aCAobm8gZW52aXJvbm1lbnQpIGNhbid0IHVzZVxuICAvLyB0aGlzIHBhcnRpYWwgaW5kZXg7IGl0IHJlbGllcyBvbiBldmVudF9waXBlbGluZV90eXBlX3N0YXJ0ZWRfaWR4IGJlbG93LlxuICAvLyBNSUdSQVRJT04gUkVRVUlSRUQ6IGRyaXp6bGUta2l0IGdlbmVyYXRlLlxuICBlbnZUeXBlU3RhcnRlZElkeDogaW5kZXgoJ2V2ZW50X2Vudl90eXBlX3N0YXJ0ZWRfaWR4JylcbiAgICAub24odGFibGUuZW52aXJvbm1lbnQsIHRhYmxlLmV2ZW50VHlwZSwgdGFibGUuc3RhcnRlZEF0KVxuICAgIC53aGVyZShzcWxgZW52aXJvbm1lbnQgSVMgTk9UIE5VTExgKSxcbiAgLy8gc3RhcnRlZF9hdCByYW5nZSBzY2FuczogZXZlcnkgQ2F0ZWdvcnktMSByZXBvcnQgYW5kIHRoZSBkZWZhdWx0IHJ1bi1iYXNlZFxuICAvLyBET1JBIHBhdGggZmlsdGVycyBgZXZlbnRfdHlwZT0nUElQRUxJTkUnIEFORCBzdGFydGVkX2F0IEJFVFdFRU4g4oCmYCBqb2luZWQgb25cbiAgLy8gcGlwZWxpbmVfaWQsIGJ1dCB0aGUgb3RoZXIgZXZlbnQgY29tcG9zaXRlIGluZGV4IGlzIG9uIGNyZWF0ZWRfYXQsIG5vdFxuICAvLyBzdGFydGVkX2F0IOKAlCBzbyB0aGUgcmFuZ2Ugc2NhbiBoYWQgbm8gaWRlYWwgaW5kZXguIFRoaXMgY29tcG9zaXRlIHNlcnZlcyB0aGVcbiAgLy8gam9pbi1kcml2ZW4gc2NhbiBieSBwaXBlbGluZV9pZC4gTUlHUkFUSU9OIFJFUVVJUkVEOiBkcml6emxlLWtpdCBnZW5lcmF0ZS5cbiAgcGlwZWxpbmVUeXBlU3RhcnRlZElkeDogaW5kZXgoJ2V2ZW50X3BpcGVsaW5lX3R5cGVfc3RhcnRlZF9pZHgnKVxuICAgIC5vbih0YWJsZS5waXBlbGluZUlkLCB0YWJsZS5ldmVudFR5cGUsIHRhYmxlLnN0YXJ0ZWRBdCksXG4gIC8vIERPUkEgZGVwbG95LWJhc2lzIHNjYW4gKFBoYXNlIDEpOiBkZXBsb3ltZW50IGZyZXF1ZW5jeSAvIGRlcGxveS10aW1lIENGUiAvXG4gIC8vIGxlYWQgdGltZSBhbGwgZ3JvdXAgZGVwbG95LXN0YWdlIGV2ZW50cyBieSBlbnZpcm9ubWVudCBvdmVyIGEgY29tcGxldGVkX2F0XG4gIC8vIHdpbmRvdy4gVGhpcyBjb21wb3NpdGUgc2VydmVzIHRoYXQgZ3JvdXBlZCBvcmctc2NvcGVkIHNjYW4gZGlyZWN0bHkuXG4gIC8vIE1JR1JBVElPTiBSRVFVSVJFRDogZHJpenpsZS1raXQgZ2VuZXJhdGUuXG4gIG9yZ0VudkNvbXBsZXRlZElkeDogaW5kZXgoJ2V2ZW50X29yZ19lbnZfY29tcGxldGVkX2lkeCcpXG4gICAgLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5lbnZpcm9ubWVudCwgdGFibGUuY29tcGxldGVkQXQpLFxufSkpO1xuXG4vKipcbiAqIE1hbnVhbCBwb3N0LWRlcGxveSBvdXRjb21lIG1hcmtlcnMgKFBoYXNlIDIpLiBBIHVzZXIgbWFya3MgYSBkZXBsb3ltZW50XG4gKiBgZmFpbGVkYCAocHJvZHVjdGlvbiBpbmNpZGVudCBsaW5rZWQgdG8gYSBkZXBsb3kpIG9yIGByZXN0b3JlZGAgKHJlY292ZXJlZCkuXG4gKiBUaGVzZSBmZWVkIHRoZSBET1JBIHBvc3QtZGVwbG95IENoYW5nZSBGYWlsdXJlIFJhdGUgY29tcG9uZW50IGFuZCB0aGUgcmVhbFxuICogTVRUUiAocmVzdG9yZWQg4oiSIGRlcGxveWVkKS4gQ29ycmVsYXRlZCB0byBhIGRlcGxveSBleGVjdXRpb24gYnkgYGV4ZWN1dGlvbklkYC5cbiAqXG4gKiBAdGFibGUgZGVwbG95bWVudF9vdXRjb21lc1xuICovXG5leHBvcnQgY29uc3QgZGVwbG95bWVudE91dGNvbWUgPSBwZ1RhYmxlKCdkZXBsb3ltZW50X291dGNvbWVzJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICBleGVjdXRpb25JZDogdmFyY2hhcignZXhlY3V0aW9uX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgZW52aXJvbm1lbnQ6IHZhcmNoYXIoJ2Vudmlyb25tZW50JywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgb3V0Y29tZTogdmFyY2hhcignb3V0Y29tZScsIHsgbGVuZ3RoOiAyMCB9KS4kdHlwZTwnZmFpbGVkJyB8ICdyZXN0b3JlZCc+KCkubm90TnVsbCgpLFxuICBhdDogdGltZXN0YW1wKCdhdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLm5vdE51bGwoKSxcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSwgKHRhYmxlKSA9PiAoe1xuICBvcmdFbnZJZHg6IGluZGV4KCdkZXBsb3ltZW50X291dGNvbWVzX29yZ19lbnZfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmVudmlyb25tZW50KSxcbiAgZXhlY3V0aW9uSWR4OiBpbmRleCgnZGVwbG95bWVudF9vdXRjb21lc19leGVjdXRpb25faWR4Jykub24odGFibGUuZXhlY3V0aW9uSWQpLFxuICAvLyBJZGVtcG90ZW50IHJlLW1hcmtpbmc6IG9uZSByb3cgcGVyIChleGVjdXRpb24sIG91dGNvbWUpLiBSZS1wb3N0aW5nIHRoZSBzYW1lXG4gIC8vIG91dGNvbWUgZm9yIGEgZGVwbG95IGlzIGEgbm8tb3AvcmVmcmVzaCAob25Db25mbGljdERvVXBkYXRlIHRoZSBgYXRgKSwgc28gYVxuICAvLyBmYWlsZWTihpJyZXN0b3JlZCBwYWlyIGlzIHR3byByb3dzIHdoaWxlIGEgZHVwbGljYXRlIFBPU1QgZG9lc24ndCBkb3VibGUtY291bnQuXG4gIGV4ZWN1dGlvbk91dGNvbWVVbmlxdWU6IHVuaXF1ZUluZGV4KCdkZXBsb3ltZW50X291dGNvbWVzX2V4ZWN1dGlvbl9vdXRjb21lX3VuaXF1ZScpXG4gICAgLm9uKHRhYmxlLmV4ZWN1dGlvbklkLCB0YWJsZS5vdXRjb21lKSxcbn0pKTtcblxuLyoqXG4gKiBQZXItb3JnIGluZ2VzdGlvbiBoZWFsdGggKFBoYXNlIDMpLiBUaGUgQVdTIGV2ZW50cyBMYW1iZGEgcGVyaW9kaWNhbGx5IHBvc3RzXG4gKiBmb3J3YXJkZWQvZHJvcHBlZCBjb3VudGVycyArIHRoZSBsYXN0IGV2ZW50IHRpbWVzdGFtcCBzbyB0aGUgUmVwb3J0cyBVSSBjYW5cbiAqIHNob3cgd2hldGhlciBldmVudHMgYXJlIGZsb3dpbmcgLyBzdGFsZSAvIGRyb3BwaW5nLiBPbmUgcm93IHBlciBvcmcuXG4gKlxuICogQHRhYmxlIGluZ2VzdF9oZWFsdGhcbiAqL1xuZXhwb3J0IGNvbnN0IGluZ2VzdEhlYWx0aCA9IHBnVGFibGUoJ2luZ2VzdF9oZWFsdGgnLCB7XG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLnByaW1hcnlLZXkoKSxcbiAgbGFzdEV2ZW50QXQ6IHRpbWVzdGFtcCgnbGFzdF9ldmVudF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBmb3J3YXJkZWQ6IGJpZ2ludCgnZm9yd2FyZGVkJywgeyBtb2RlOiAnbnVtYmVyJyB9KSxcbiAgZHJvcHBlZDogYmlnaW50KCdkcm9wcGVkJywgeyBtb2RlOiAnbnVtYmVyJyB9KSxcbiAgdXBkYXRlZEF0OiB0aW1lc3RhbXAoJ3VwZGF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSk7XG5cbi8qKlxuICogUHJvZHVjdGlvbiBpbmNpZGVudHMgaW5nZXN0ZWQgZnJvbSB0aGUgb3JnJ3MgaW5jaWRlbnQgdG9vbGluZyAoUGhhc2UgNSkuIFRoZVxuICogdXNlciBwb2ludHMgdGhlaXIgQWxlcnRtYW5hZ2VyIC8gUGFnZXJEdXR5IC8gRGF0YWRvZyB3ZWJob29rIGF0XG4gKiBgUE9TVCAvYXBpL3JlcG9ydHMvaW5jaWRlbnRzYCAobWFjaGluZSBgcmVwb3J0aW5nOmluZ2VzdGAgc2NvcGUpLiBFYWNoIGluY2lkZW50XG4gKiBjYXJyaWVzIGl0cyBleHRlcm5hbCBpZCwgdGhlIGFmZmVjdGVkIGBlbnZpcm9ubWVudGAsIHdoZW4gaXQgb3BlbmVkLCBhbmQgd2hlblxuICogaXQgd2FzIHJlc29sdmVkIChudWxsYWJsZSDigJQgYSBsYXRlciByZXNvbHZlIHVwZGF0ZXMgaXQpLiBET1JBIGNvcnJlbGF0ZXMgZWFjaFxuICogaW5jaWRlbnQgdG8gdGhlIG1vc3QgcmVjZW50IHN1Y2Nlc3NmdWwgZGVwbG95IHRvIGBlbnZpcm9ubWVudGAgd2l0aGluXG4gKiBgRE9SQV9JTkNJREVOVF9XSU5ET1dfSE9VUlNgLCB0dXJuaW5nIGl0IGludG8gYW4gYXV0b21hdGVkIHBvc3QtZGVwbG95IGZhaWx1cmVcbiAqIChDaGFuZ2UgRmFpbHVyZSBSYXRlKSBhbmQgYSByZWFsIHJlY292ZXJ5IHRpbWUgKGByZXNvbHZlZF9hdCDiiJIgb3BlbmVkX2F0YCBNVFRSKS5cbiAqIGBpbmNpZGVudF9pZGAgaXMgVU5JUVVFIHBlciBvcmcgc28gYSByZXNvbHZlIHJlLXBvc3QgaXMgYW4gaWRlbXBvdGVudCB1cHNlcnQuXG4gKlxuICogQHRhYmxlIGluY2lkZW50c1xuICovXG5leHBvcnQgY29uc3QgaW5jaWRlbnQgPSBwZ1RhYmxlKCdpbmNpZGVudHMnLCB7XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG4gIC8vIEV4dGVybmFsIGluY2lkZW50IGlkIGZyb20gdGhlIHNvdXJjZSBzeXN0ZW0gKFBhZ2VyRHV0eS9EYXRhZG9nL0FsZXJ0bWFuYWdlcikuXG4gIC8vIFVuaXF1ZSBQRVIgT1JHIChzZWUgaW5jaWRlbnRPcmdVbmlxdWUpIOKAlCB0aGUgaWRlbXBvdGVuY3kgKyB1cHNlcnQga2V5LlxuICBpbmNpZGVudElkOiB2YXJjaGFyKCdpbmNpZGVudF9pZCcsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIC8vIEFmZmVjdGVkIGRlcGxveSBlbnZpcm9ubWVudCAoZS5nLiBcInByb2R1Y3Rpb25cIikuIENvcnJlbGF0ZWQgdG8gYSBkZXBsb3kgZW52LlxuICBlbnZpcm9ubWVudDogdmFyY2hhcignZW52aXJvbm1lbnQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgb3BlbmVkQXQ6IHRpbWVzdGFtcCgnb3BlbmVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkubm90TnVsbCgpLFxuICAvLyBOVUxMIHdoaWxlIHRoZSBpbmNpZGVudCBpcyBvcGVuOyBhIGxhdGVyIHJlc29sdmUgd2ViaG9vayBzZXRzIGl0IChpZGVtcG90ZW50XG4gIC8vIHVwc2VydCkuIGByZXNvbHZlZF9hdCDiiJIgb3BlbmVkX2F0YCBpcyB0aGUgcmVhbCBNVFRSIGZvciB0aGUgY29ycmVsYXRlZCBkZXBsb3kuXG4gIHJlc29sdmVkQXQ6IHRpbWVzdGFtcCgncmVzb2x2ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgc2V2ZXJpdHk6IHZhcmNoYXIoJ3NldmVyaXR5JywgeyBsZW5ndGg6IDUwIH0pLm5vdE51bGwoKSxcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSwgKHRhYmxlKSA9PiAoe1xuICAvLyBDb3JyZWxhdGlvbiBzY2FuOiBtb3N0LXJlY2VudC1kZXBsb3ktYmVmb3JlLW9wZW4gbG9va3VwcyBncm91cCBieSAob3JnLCBlbnYpXG4gIC8vIGFuZCByYW5nZSBvbiBvcGVuZWRfYXQuXG4gIG9yZ0Vudk9wZW5lZElkeDogaW5kZXgoJ2luY2lkZW50c19vcmdfZW52X29wZW5lZF9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUuZW52aXJvbm1lbnQsIHRhYmxlLm9wZW5lZEF0KSxcbiAgLy8gSWRlbXBvdGVudCB1cHNlcnQgLyBkZWR1cDogb25lIHJvdyBwZXIgKG9yZywgaW5jaWRlbnRfaWQpLiBBIHJlc29sdmUgcmUtcG9zdFxuICAvLyB1cGRhdGVzIHJlc29sdmVkX2F0IGluc3RlYWQgb2YgaW5zZXJ0aW5nIGEgZHVwbGljYXRlLlxuICBvcmdJbmNpZGVudFVuaXF1ZTogdW5pcXVlSW5kZXgoJ2luY2lkZW50c19vcmdfaW5jaWRlbnRfdW5pcXVlJykub24odGFibGUub3JnSWQsIHRhYmxlLmluY2lkZW50SWQpLFxufSkpO1xuXG4vKipcbiAqIFBlci1vcmcgRE9SQSBjb21wdXRhdGlvbiArIHJldGVudGlvbiBvdmVycmlkZXMuIE9uZSByb3cgcGVyIG9yZyAob3JnX2lkIFBLKS5cbiAqIGBpbmNpZGVudFdpbmRvd0hvdXJzYCAoUGhhc2UgNWIpIG92ZXJyaWRlcyB0aGUgZ2xvYmFsIGBET1JBX0lOQ0lERU5UX1dJTkRPV19IT1VSU2BcbiAqIHVzZWQgdG8gY29ycmVsYXRlIGFuIGluZ2VzdGVkIGluY2lkZW50IHRvIHRoZSBtb3N0IHJlY2VudCBzdWNjZXNzZnVsIGRlcGxveS5cbiAqIGBldmVudFJldGVudGlvbkRheXNgIC8gYGRvcmFSZXRlbnRpb25EYXlzYCAoUGhhc2UgNykgb3ZlcnJpZGUgdGhlIGdsb2JhbCByZXBvcnRpbmdcbiAqIHJldGVudGlvbiB3aW5kb3dzIGZvciB0aGUgc3BsaXQgc3dlZXAg4oCUIHN0YW5kYXJkIGV2ZW50cyAoYGVudmlyb25tZW50IElTIE5VTExgKVxuICogdnMgRE9SQSBzb3VyY2UgKGRlcGxveSBzdGFnZXMgKyBgZGVwbG95bWVudF9vdXRjb21lc2AgKyBgaW5jaWRlbnRzYCkuIEFueSBOVUxMIC9cbiAqIGFic2VudCB2YWx1ZSBmYWxscyBiYWNrIHRvIGl0cyBlbnYgZGVmYXVsdC4gU2V0IHNlbGYtc2VydmUgYnkgYW4gb3JnIGFkbWluIHZpYVxuICogYFBVVCAvYXBpL3JlcG9ydHMvc2V0dGluZ3MvaW5jaWRlbnRzYC4gVGhpcyB0YWJsZSBpcyBpdHNlbGYgbmV2ZXIgcHVyZ2VkLlxuICpcbiAqIEB0YWJsZSBkb3JhX3NldHRpbmdzXG4gKi9cbmV4cG9ydCBjb25zdCBkb3JhU2V0dGluZ3MgPSBwZ1RhYmxlKCdkb3JhX3NldHRpbmdzJywge1xuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5wcmltYXJ5S2V5KCksXG4gIGluY2lkZW50V2luZG93SG91cnM6IGludGVnZXIoJ2luY2lkZW50X3dpbmRvd19ob3VycycpLFxuICAvLyBQaGFzZSA3IHJldGVudGlvbiBvdmVycmlkZXMgKGRheXMpLiBOVUxMIOKHkiB1c2UgdGhlIGdsb2JhbCBlbnYgZGVmYXVsdFxuICAvLyAoUkVQT1JUSU5HX0VWRU5UX1JFVEVOVElPTl9EQVlTIC8gUkVQT1JUSU5HX0RPUkFfUkVURU5USU9OX0RBWVMpLlxuICBldmVudFJldGVudGlvbkRheXM6IGludGVnZXIoJ2V2ZW50X3JldGVudGlvbl9kYXlzJyksXG4gIGRvcmFSZXRlbnRpb25EYXlzOiBpbnRlZ2VyKCdkb3JhX3JldGVudGlvbl9kYXlzJyksXG4gIHVwZGF0ZWRBdDogdGltZXN0YW1wKCd1cGRhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbn0pO1xuXG4vKipcbiAqIFR5cGVTY3JpcHQgdHlwZXMgcmVwcmVzZW50aW5nIGRhdGFiYXNlIHJvd3NcbiAqL1xuZXhwb3J0IHR5cGUgUGlwZWxpbmUgPSB0eXBlb2YgcGlwZWxpbmUuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgUGlwZWxpbmVJbnNlcnQgPSB0eXBlb2YgcGlwZWxpbmUuJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBQaXBlbGluZVJlZ2lzdHJ5ID0gdHlwZW9mIHBpcGVsaW5lUmVnaXN0cnkuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgUGlwZWxpbmVSZWdpc3RyeUluc2VydCA9IHR5cGVvZiBwaXBlbGluZVJlZ2lzdHJ5LiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgUGlwZWxpbmVFdmVudCA9IHR5cGVvZiBwaXBlbGluZUV2ZW50LiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIFBpcGVsaW5lRXZlbnRJbnNlcnQgPSB0eXBlb2YgcGlwZWxpbmVFdmVudC4kaW5mZXJJbnNlcnQ7XG5cbmV4cG9ydCB0eXBlIERlcGxveW1lbnRPdXRjb21lID0gdHlwZW9mIGRlcGxveW1lbnRPdXRjb21lLiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIERlcGxveW1lbnRPdXRjb21lSW5zZXJ0ID0gdHlwZW9mIGRlcGxveW1lbnRPdXRjb21lLiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgSW5nZXN0SGVhbHRoID0gdHlwZW9mIGluZ2VzdEhlYWx0aC4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBJbmdlc3RIZWFsdGhJbnNlcnQgPSB0eXBlb2YgaW5nZXN0SGVhbHRoLiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgSW5jaWRlbnQgPSB0eXBlb2YgaW5jaWRlbnQuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgSW5jaWRlbnRJbnNlcnQgPSB0eXBlb2YgaW5jaWRlbnQuJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBEb3JhU2V0dGluZ3MgPSB0eXBlb2YgZG9yYVNldHRpbmdzLiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIERvcmFTZXR0aW5nc0luc2VydCA9IHR5cGVvZiBkb3JhU2V0dGluZ3MuJGluZmVySW5zZXJ0O1xuXG4vKipcbiAqIEhlbHBlciB0eXBlcyBmb3Igd29ya2luZyB3aXRoIHBhcnRpYWwgdXBkYXRlc1xuICovXG5leHBvcnQgdHlwZSBQaXBlbGluZVVwZGF0ZSA9IFBhcnRpYWw8T21pdDxQaXBlbGluZUluc2VydCwgJ2lkJyB8ICdjcmVhdGVkQXQnIHwgJ2NyZWF0ZWRCeSc+PjtcbiJdfQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ComputeType, PluginType, type EntityLabels, type EntityLink } from '@pipeline-builder/api-core';
|
|
2
2
|
/**
|
|
3
3
|
* Secret requirement for a plugin.
|
|
4
4
|
* Declares named secrets the plugin expects at build time.
|
|
@@ -13,7 +13,7 @@ export interface PluginSecret {
|
|
|
13
13
|
* Plugins define the behavior of synth/build steps in CDK pipelines.
|
|
14
14
|
*
|
|
15
15
|
* Features * - Versioning support with semantic versioning
|
|
16
|
-
* - Access control via orgId and
|
|
16
|
+
* - Access control via orgId and the three-rung `visibility` ladder
|
|
17
17
|
* - Full audit trail (created/updated by/at)
|
|
18
18
|
* - Flexible metadata storage via JSONB
|
|
19
19
|
* - Support for both ShellStep and CodeBuildStep types
|
|
@@ -630,12 +630,12 @@ export declare const plugin: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
|
630
630
|
}, {}, {
|
|
631
631
|
$type: EntityLink[];
|
|
632
632
|
}>;
|
|
633
|
-
|
|
634
|
-
name: "
|
|
633
|
+
visibility: import("drizzle-orm/pg-core").PgColumn<{
|
|
634
|
+
name: "visibility";
|
|
635
635
|
tableName: "plugins";
|
|
636
636
|
dataType: "string";
|
|
637
637
|
columnType: "PgVarchar";
|
|
638
|
-
data:
|
|
638
|
+
data: "org" | "private" | "public";
|
|
639
639
|
driverParam: string;
|
|
640
640
|
notNull: true;
|
|
641
641
|
hasDefault: true;
|
|
@@ -648,7 +648,7 @@ export declare const plugin: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
|
648
648
|
generated: undefined;
|
|
649
649
|
}, {}, {
|
|
650
650
|
length: 10;
|
|
651
|
-
$type:
|
|
651
|
+
$type: "org" | "private" | "public";
|
|
652
652
|
}>;
|
|
653
653
|
isDefault: import("drizzle-orm/pg-core").PgColumn<{
|
|
654
654
|
name: "is_default";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import {
|
|
3
|
+
import { ComputeType, PluginType, SYSTEM_ORG_ID, } from '@pipeline-builder/api-core';
|
|
4
4
|
import { sql } from 'drizzle-orm';
|
|
5
5
|
import { boolean, integer, varchar, pgTable, text, timestamp, uuid, jsonb, index, uniqueIndex, check } from 'drizzle-orm/pg-core';
|
|
6
6
|
/**
|
|
@@ -8,7 +8,7 @@ import { boolean, integer, varchar, pgTable, text, timestamp, uuid, jsonb, index
|
|
|
8
8
|
* Plugins define the behavior of synth/build steps in CDK pipelines.
|
|
9
9
|
*
|
|
10
10
|
* Features * - Versioning support with semantic versioning
|
|
11
|
-
* - Access control via orgId and
|
|
11
|
+
* - Access control via orgId and the three-rung `visibility` ladder
|
|
12
12
|
* - Full audit trail (created/updated by/at)
|
|
13
13
|
* - Flexible metadata storage via JSONB
|
|
14
14
|
* - Support for both ShellStep and CodeBuildStep types
|
|
@@ -113,8 +113,12 @@ export const plugin = pgTable('plugins', {
|
|
|
113
113
|
.$type()
|
|
114
114
|
.default([])
|
|
115
115
|
.notNull(),
|
|
116
|
-
// Access and visibility
|
|
117
|
-
|
|
116
|
+
// Access and visibility — the shared three-rung ladder (see api-core's
|
|
117
|
+
// `Visibility`): `private` is author-only (`created_by`), `org` is the whole
|
|
118
|
+
// owning org, `public` reaches the org's teams and — from the system org —
|
|
119
|
+
// every org. Constrained at the SQL layer too via a CHECK in postgres-init.sql
|
|
120
|
+
// so a typo can't sneak past the application layer.
|
|
121
|
+
visibility: varchar('visibility', { length: 10 })
|
|
118
122
|
.$type()
|
|
119
123
|
.default('private')
|
|
120
124
|
.notNull(),
|
|
@@ -147,8 +151,10 @@ export const plugin = pgTable('plugins', {
|
|
|
147
151
|
lifecycleIdx: index('plugin_lifecycle_idx').on(table.orgId, table.lifecycle),
|
|
148
152
|
// Composite index for common access pattern (orgId + isActive)
|
|
149
153
|
orgActiveIdx: index('plugin_org_active_idx').on(table.orgId, table.isActive),
|
|
150
|
-
// Composite index for filtered queries (orgId +
|
|
151
|
-
|
|
154
|
+
// Composite index for filtered queries (orgId + visibility + isActive)
|
|
155
|
+
orgVisibilityActiveIdx: index('plugin_org_visibility_active_idx').on(table.orgId, table.visibility, table.isActive),
|
|
156
|
+
// Drives the "my private drafts" leg of the visibility predicate.
|
|
157
|
+
createdByIdx: index('plugin_created_by_idx').on(table.orgId, table.createdBy),
|
|
152
158
|
// Partial index for active-only queries (smaller, faster than full index)
|
|
153
159
|
activeOnlyOrgIdx: index('plugin_active_only_org_idx').on(table.orgId, table.createdAt).where(sql `is_active = true`),
|
|
154
160
|
// Unique constraint on name + version + orgId
|
|
@@ -157,4 +163,4 @@ export const plugin = pgTable('plugins', {
|
|
|
157
163
|
// Check constraints
|
|
158
164
|
versionCheck: check('plugin_version_check', sql `${table.version} ~ '^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.-]+)?(\+[a-zA-Z0-9.-]+)?$'`),
|
|
159
165
|
}));
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGFiYXNlL3NjaGVtYS9wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUF3RixNQUFNLDRCQUE0QixDQUFDO0FBQzFMLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVlsSTs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFO0lBQ3ZDLGNBQWM7SUFDZCxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLGFBQWEsRUFBRTtJQUUzQyxrQ0FBa0M7SUFDbEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7U0FDdEMsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFFWixlQUFlO0lBQ2YsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDMUIsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUN2RCxVQUFVLEVBQUU7U0FDWixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUMxQixP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RSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUNsRSxZQUFZLEVBQUUsS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUU1RSwrREFBK0Q7SUFDL0QsWUFBWSxFQUFFLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFFNUUsMkVBQTJFO0lBQzNFLGtCQUFrQixFQUFFLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUUvRywwRUFBMEU7SUFDMUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUEsa0JBQWtCLENBQUM7SUFFbkgsOENBQThDO0lBQzlDLG9CQUFvQixFQUFFLFdBQVcsQ0FBQyxnQ0FBZ0MsQ0FBQztTQUNoRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFFN0Msb0JBQW9CO0lBQ3BCLFlBQVksRUFBRSxLQUFLLENBQUUsc0JBQXNCLEVBQ3pDLEdBQUcsQ0FBQSxHQUFHLEtBQUssQ0FBQyxPQUFPLG9FQUFvRSxDQUN4RjtDQUNGLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IEFjY2Vzc01vZGlmaWVyLCBDb21wdXRlVHlwZSwgUGx1Z2luVHlwZSwgU1lTVEVNX09SR19JRCwgdHlwZSBDcml0aWNhbGl0eSwgdHlwZSBFbnRpdHlMYWJlbHMsIHR5cGUgRW50aXR5TGluaywgdHlwZSBMaWZlY3ljbGUsIHR5cGUgT3duZXJUeXBlIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgc3FsIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgYm9vbGVhbiwgaW50ZWdlciwgdmFyY2hhciwgcGdUYWJsZSwgdGV4dCwgdGltZXN0YW1wLCB1dWlkLCBqc29uYiwgaW5kZXgsIHVuaXF1ZUluZGV4LCBjaGVjayB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnO1xuXG4vKipcbiAqIFNlY3JldCByZXF1aXJlbWVudCBmb3IgYSBwbHVnaW4uXG4gKiBEZWNsYXJlcyBuYW1lZCBzZWNyZXRzIHRoZSBwbHVnaW4gZXhwZWN0cyBhdCBidWlsZCB0aW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblNlY3JldCB7XG4gIG5hbWU6IHN0cmluZztcbiAgcmVxdWlyZWQ6IGJvb2xlYW47XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRhYmxlIGZvciBzdG9yaW5nIHJldXNhYmxlIHBsdWdpbiBjb25maWd1cmF0aW9ucy5cbiAqIFBsdWdpbnMgZGVmaW5lIHRoZSBiZWhhdmlvciBvZiBzeW50aC9idWlsZCBzdGVwcyBpbiBDREsgcGlwZWxpbmVzLlxuICpcbiAqIEZlYXR1cmVzICogLSBWZXJzaW9uaW5nIHN1cHBvcnQgd2l0aCBzZW1hbnRpYyB2ZXJzaW9uaW5nXG4gKiAtIEFjY2VzcyBjb250cm9sIHZpYSBvcmdJZCBhbmQgYWNjZXNzTW9kaWZpZXJcbiAqIC0gRnVsbCBhdWRpdCB0cmFpbCAoY3JlYXRlZC91cGRhdGVkIGJ5L2F0KVxuICogLSBGbGV4aWJsZSBtZXRhZGF0YSBzdG9yYWdlIHZpYSBKU09OQlxuICogLSBTdXBwb3J0IGZvciBib3RoIFNoZWxsU3RlcCBhbmQgQ29kZUJ1aWxkU3RlcCB0eXBlc1xuICpcbiAqIEB0YWJsZSBwbHVnaW5zXG4gKi9cbmV4cG9ydCBjb25zdCBwbHVnaW4gPSBwZ1RhYmxlKCdwbHVnaW5zJywge1xuICAvLyBQcmltYXJ5IGtleVxuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuXG4gIC8vIE9yZ2FuaXphdGlvbiBhbmQgYWNjZXNzIGNvbnRyb2xcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSlcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gQXVkaXQgZmllbGRzXG4gIGNyZWF0ZWRCeTogdGV4dCgnY3JlYXRlZF9ieScpXG4gICAgLmRlZmF1bHQoU1lTVEVNX09SR19JRClcbiAgICAubm90TnVsbCgpLFxuICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCgnY3JlYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pXG4gICAgLmRlZmF1bHROb3coKVxuICAgIC5ub3ROdWxsKCksXG4gIHVwZGF0ZWRCeTogdGV4dCgndXBkYXRlZF9ieScpXG4gICAgLmRlZmF1bHQoU1lTVEVNX09SR19JRClcbiAgICAubm90TnVsbCgpLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pXG4gICAgLmRlZmF1bHROb3coKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gQ29yZSBwbHVnaW4gaW5mb3JtYXRpb25cbiAgbmFtZTogdmFyY2hhcignbmFtZScsIHsgbGVuZ3RoOiAyNTUgfSlcbiAgICAubm90TnVsbCgpLFxuICBkZXNjcmlwdGlvbjogdGV4dCgnZGVzY3JpcHRpb24nKSxcbiAga2V5d29yZHM6IGpzb25iKCdrZXl3b3JkcycpXG4gICAgLiR0eXBlPHN0cmluZ1tdPigpXG4gICAgLmRlZmF1bHQoW10pXG4gICAgLm5vdE51bGwoKSxcbiAgdmVyc2lvbjogdmFyY2hhcigndmVyc2lvbicsIHsgbGVuZ3RoOiA1MCB9KVxuICAgIC5kZWZhdWx0KCcxLjAuMCcpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBQbHVnaW4gY2xhc3NpZmljYXRpb25cbiAgY2F0ZWdvcnk6IHZhcmNoYXIoJ2NhdGVnb3J5JywgeyBsZW5ndGg6IDUwIH0pXG4gICAgLmRlZmF1bHQoJ3Vua25vd24nKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gUGx1Z2luIGNvbmZpZ3VyYXRpb25cbiAgbWV0YWRhdGE6IGpzb25iKCdtZXRhZGF0YScpXG4gICAgLiR0eXBlPFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+PigpXG4gICAgLmRlZmF1bHQoe30pXG4gICAgLm5vdE51bGwoKSxcbiAgcGx1Z2luVHlwZTogdmFyY2hhcigncGx1Z2luX3R5cGUnLCB7IGxlbmd0aDogNTAgfSlcbiAgICAuJHR5cGU8UGx1Z2luVHlwZT4oKVxuICAgIC5kZWZhdWx0KCdDb2RlQnVpbGRTdGVwJyBhcyBQbHVnaW5UeXBlKVxuICAgIC5ub3ROdWxsKCksXG4gIGNvbXB1dGVUeXBlOiB2YXJjaGFyKCdjb21wdXRlX3R5cGUnLCB7IGxlbmd0aDogNTAgfSlcbiAgICAuJHR5cGU8Q29tcHV0ZVR5cGU+KClcbiAgICAuZGVmYXVsdCgnU01BTEwnIGFzIENvbXB1dGVUeXBlKVxuICAgIC5ub3ROdWxsKCksXG4gIHRpbWVvdXQ6IGludGVnZXIoJ3RpbWVvdXQnKSxcbiAgZmFpbHVyZUJlaGF2aW9yOiB2YXJjaGFyKCdmYWlsdXJlX2JlaGF2aW9yJywgeyBsZW5ndGg6IDEwIH0pXG4gICAgLiR0eXBlPCdmYWlsJyB8ICd3YXJuJyB8ICdpZ25vcmUnPigpXG4gICAgLmRlZmF1bHQoJ2ZhaWwnKVxuICAgIC5ub3ROdWxsKCksXG4gIHNlY3JldHM6IGpzb25iKCdzZWNyZXRzJylcbiAgICAuJHR5cGU8UGx1Z2luU2VjcmV0W10+KClcbiAgICAuZGVmYXVsdChbXSlcbiAgICAubm90TnVsbCgpLFxuICBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiB2YXJjaGFyKCdwcmltYXJ5X291dHB1dF9kaXJlY3RvcnknLCB7IGxlbmd0aDogMjggfSksXG5cbiAgLy8gQnVpbGQgY29uZmlndXJhdGlvblxuICBlbnY6IGpzb25iKCdlbnYnKVxuICAgIC4kdHlwZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigpXG4gICAgLmRlZmF1bHQoe30pXG4gICAgLm5vdE51bGwoKSxcbiAgYnVpbGRBcmdzOiBqc29uYignYnVpbGRfYXJncycpXG4gICAgLiR0eXBlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuICBpbnN0YWxsQ29tbWFuZHM6IHRleHQoJ2luc3RhbGxfY29tbWFuZHMnKVxuICAgIC5hcnJheSgpXG4gICAgLmRlZmF1bHQoW10pXG4gICAgLm5vdE51bGwoKSxcbiAgY29tbWFuZHM6IHRleHQoJ2NvbW1hbmRzJylcbiAgICAuYXJyYXkoKVxuICAgIC5kZWZhdWx0KFtdKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gRG9ja2VyIGNvbmZpZ3VyYXRpb25cbiAgZG9ja2VyZmlsZTogdGV4dCgnZG9ja2VyZmlsZScpLFxuICBidWlsZFR5cGU6IHZhcmNoYXIoJ2J1aWxkX3R5cGUnLCB7IGxlbmd0aDogMjAgfSlcbiAgICAuZGVmYXVsdCgnYnVpbGRfaW1hZ2UnKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gRGV2ZWxvcGVyLXBvcnRhbCBjYXRhbG9nIG1ldGFkYXRhIChvd25lcnNoaXAgLyBsaWZlY3ljbGUgLyBjbGFzc2lmaWNhdGlvbikuXG4gIC8vIG93bmVySWQgZGVmYXVsdHMgdG8gdGhlIGNyZWF0aW5nIHVzZXIgKHNldCBhdCBpbnNlcnQpLCBzbyBldmVyeSBwbHVnaW4gaGFzXG4gIC8vIGFuIG93bmVyIGZvciBcIm15IHNlcnZpY2VzXCIgdmlld3M7IG93bmVyVHlwZSBkaXN0aW5ndWlzaGVzIHVzZXIgdnMgdGVhbS5cbiAgb3duZXJJZDogdGV4dCgnb3duZXJfaWQnKSxcbiAgb3duZXJUeXBlOiB2YXJjaGFyKCdvd25lcl90eXBlJywgeyBsZW5ndGg6IDEwIH0pLiR0eXBlPE93bmVyVHlwZT4oKSxcbiAgbGlmZWN5Y2xlOiB2YXJjaGFyKCdsaWZlY3ljbGUnLCB7IGxlbmd0aDogMjAgfSlcbiAgICAuJHR5cGU8TGlmZWN5Y2xlPigpXG4gICAgLmRlZmF1bHQoJ3Byb2R1Y3Rpb24nIGFzIExpZmVjeWNsZSlcbiAgICAubm90TnVsbCgpLFxuICBjcml0aWNhbGl0eTogdmFyY2hhcignY3JpdGljYWxpdHknLCB7IGxlbmd0aDogMTAgfSkuJHR5cGU8Q3JpdGljYWxpdHk+KCksXG4gIGxhYmVsczoganNvbmIoJ2xhYmVscycpXG4gICAgLiR0eXBlPEVudGl0eUxhYmVscz4oKVxuICAgIC5kZWZhdWx0KHt9KVxuICAgIC5ub3ROdWxsKCksXG4gIGxpbmtzOiBqc29uYignbGlua3MnKVxuICAgIC4kdHlwZTxFbnRpdHlMaW5rW10+KClcbiAgICAuZGVmYXVsdChbXSlcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIEFjY2VzcyBhbmQgdmlzaWJpbGl0eVxuICBhY2Nlc3NNb2RpZmllcjogdmFyY2hhcignYWNjZXNzX21vZGlmaWVyJywgeyBsZW5ndGg6IDEwIH0pXG4gICAgLiR0eXBlPEFjY2Vzc01vZGlmaWVyPigpXG4gICAgLmRlZmF1bHQoJ3ByaXZhdGUnIGFzIEFjY2Vzc01vZGlmaWVyKVxuICAgIC5ub3ROdWxsKCksXG4gIGlzRGVmYXVsdDogYm9vbGVhbignaXNfZGVmYXVsdCcpXG4gICAgLmRlZmF1bHQoZmFsc2UpXG4gICAgLm5vdE51bGwoKSxcbiAgaXNBY3RpdmU6IGJvb2xlYW4oJ2lzX2FjdGl2ZScpXG4gICAgLmRlZmF1bHQodHJ1ZSlcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIERlbGV0aW9uIHRyYWNraW5nIChzb2Z0IGRlbGV0ZSlcbiAgZGVsZXRlZEF0OiB0aW1lc3RhbXAoJ2RlbGV0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgZGVsZXRlZEJ5OiB0ZXh0KCdkZWxldGVkX2J5JyksXG4gIC8vIFNvZnQtZGVsZXRlIHB1cmdlIGRlYWRsaW5lOiB0aGUgcmV0ZW50aW9uIHN3ZWVwIGhhcmQtZGVsZXRlcyB0b21ic3RvbmVkXG4gIC8vIHJvd3Mgb25jZSBgcHVyZ2VfYWZ0ZXJgIGhhcyBwYXNzZWQgKHNldCBvbiBkZWxldGUgYWxvbmdzaWRlIGRlbGV0ZWRfYXQpLlxuICBwdXJnZUFmdGVyOiB0aW1lc3RhbXAoJ3B1cmdlX2FmdGVyJywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG59LCAodGFibGUpID0+ICh7XG4gIC8vIFBhcnRpYWwgaW5kZXggb3ZlciBqdXN0IHRoZSB0b21ic3RvbmVzIOKAlCBkcml2ZXMgdGhlIHJldGVudGlvbiBwdXJnZSBzd2VlcC5cbiAgcHVyZ2VJZHg6IGluZGV4KCdwbHVnaW5fcHVyZ2VfaWR4Jykub24odGFibGUucHVyZ2VBZnRlcikud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTk9UIE5VTExgKSxcbiAgLy8gSW5kZXhlcyBmb3IgY29tbW9uIHF1ZXJpZXNcbiAgbmFtZUlkeDogaW5kZXgoJ3BsdWdpbl9uYW1lX2lkeCcpLm9uKHRhYmxlLm5hbWUpLFxuICBvcmdJZElkeDogaW5kZXgoJ3BsdWdpbl9vcmdfaWRfaWR4Jykub24odGFibGUub3JnSWQpLFxuICB2ZXJzaW9uSWR4OiBpbmRleCgncGx1Z2luX3ZlcnNpb25faWR4Jykub24odGFibGUudmVyc2lvbiksXG4gIGFjdGl2ZUlkeDogaW5kZXgoJ3BsdWdpbl9hY3RpdmVfaWR4Jykub24odGFibGUuaXNBY3RpdmUpLFxuICBjcmVhdGVkQXRJZHg6IGluZGV4KCdwbHVnaW5fY3JlYXRlZF9hdF9pZHgnKS5vbih0YWJsZS5jcmVhdGVkQXQpLFxuICB1cGRhdGVkQXRJZHg6IGluZGV4KCdwbHVnaW5fdXBkYXRlZF9hdF9pZHgnKS5vbih0YWJsZS51cGRhdGVkQXQpLFxuXG4gIC8vIENhdGVnb3J5IGluZGV4IGZvciBmaWx0ZXJpbmdcbiAgY2F0ZWdvcnlJZHg6IGluZGV4KCdwbHVnaW5fY2F0ZWdvcnlfaWR4Jykub24odGFibGUuY2F0ZWdvcnkpLFxuXG4gIC8vIERldmVsb3Blci1wb3J0YWwgY2F0YWxvZyBpbmRleGVzOiBcIm15IHNlcnZpY2VzXCIgKG93bmVyKSArIGxpZmVjeWNsZSBmaWx0ZXIuXG4gIG93bmVySWR4OiBpbmRleCgncGx1Z2luX293bmVyX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5vd25lcklkKSxcbiAgbGlmZWN5Y2xlSWR4OiBpbmRleCgncGx1Z2luX2xpZmVjeWNsZV9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUubGlmZWN5Y2xlKSxcblxuICAvLyBDb21wb3NpdGUgaW5kZXggZm9yIGNvbW1vbiBhY2Nlc3MgcGF0dGVybiAob3JnSWQgKyBpc0FjdGl2ZSlcbiAgb3JnQWN0aXZlSWR4OiBpbmRleCgncGx1Z2luX29yZ19hY3RpdmVfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmlzQWN0aXZlKSxcblxuICAvLyBDb21wb3NpdGUgaW5kZXggZm9yIGZpbHRlcmVkIHF1ZXJpZXMgKG9yZ0lkICsgYWNjZXNzTW9kaWZpZXIgKyBpc0FjdGl2ZSlcbiAgb3JnQWNjZXNzQWN0aXZlSWR4OiBpbmRleCgncGx1Z2luX29yZ19hY2Nlc3NfYWN0aXZlX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5hY2Nlc3NNb2RpZmllciwgdGFibGUuaXNBY3RpdmUpLFxuXG4gIC8vIFBhcnRpYWwgaW5kZXggZm9yIGFjdGl2ZS1vbmx5IHF1ZXJpZXMgKHNtYWxsZXIsIGZhc3RlciB0aGFuIGZ1bGwgaW5kZXgpXG4gIGFjdGl2ZU9ubHlPcmdJZHg6IGluZGV4KCdwbHVnaW5fYWN0aXZlX29ubHlfb3JnX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5jcmVhdGVkQXQpLndoZXJlKHNxbGBpc19hY3RpdmUgPSB0cnVlYCksXG5cbiAgLy8gVW5pcXVlIGNvbnN0cmFpbnQgb24gbmFtZSArIHZlcnNpb24gKyBvcmdJZFxuICBuYW1lVmVyc2lvbk9yZ1VuaXF1ZTogdW5pcXVlSW5kZXgoJ3BsdWdpbl9uYW1lX3ZlcnNpb25fb3JnX3VuaXF1ZScpXG4gICAgLm9uKHRhYmxlLm5hbWUsIHRhYmxlLnZlcnNpb24sIHRhYmxlLm9yZ0lkKSxcblxuICAvLyBDaGVjayBjb25zdHJhaW50c1xuICB2ZXJzaW9uQ2hlY2s6IGNoZWNrKCAncGx1Z2luX3ZlcnNpb25fY2hlY2snLFxuICAgIHNxbGAke3RhYmxlLnZlcnNpb259IH4gJ15bMC05XStcXC5bMC05XStcXC5bMC05XSsoLVthLXpBLVowLTkuLV0rKT8oXFwrW2EtekEtWjAtOS4tXSspPyQnYCxcbiAgKSxcbn0pKTtcblxuLyoqXG4gKiBUeXBlU2NyaXB0IHR5cGVzIHJlcHJlc2VudGluZyBkYXRhYmFzZSByb3dzXG4gKi9cbmV4cG9ydCB0eXBlIFBsdWdpbiA9IHR5cGVvZiBwbHVnaW4uJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgUGx1Z2luSW5zZXJ0ID0gdHlwZW9mIHBsdWdpbi4kaW5mZXJJbnNlcnQ7XG5cbi8qKlxuICogSGVscGVyIHR5cGVzIGZvciB3b3JraW5nIHdpdGggcGFydGlhbCB1cGRhdGVzXG4gKi9cbmV4cG9ydCB0eXBlIFBsdWdpblVwZGF0ZSA9IFBhcnRpYWw8T21pdDxQbHVnaW5JbnNlcnQsICdpZCcgfCAnY3JlYXRlZEF0JyB8ICdjcmVhdGVkQnknPj47XG4iXX0=
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGFiYXNlL3NjaGVtYS9wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQ0wsV0FBVyxFQUFFLFVBQVUsRUFBRSxhQUFhLEdBRXZDLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBWWxJOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUU7SUFDdkMsY0FBYztJQUNkLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsYUFBYSxFQUFFO0lBRTNDLGtDQUFrQztJQUNsQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUN0QyxPQUFPLENBQUMsYUFBYSxDQUFDO1NBQ3RCLE9BQU8sRUFBRTtJQUVaLGVBQWU7SUFDZixTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUMxQixPQUFPLENBQUMsYUFBYSxDQUFDO1NBQ3RCLE9BQU8sRUFBRTtJQUNaLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ3ZELFVBQVUsRUFBRTtTQUNaLE9BQU8sRUFBRTtJQUNaLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQzFCLE9BQU8sQ0FBQyxh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QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7XG4gIENvbXB1dGVUeXBlLCBQbHVnaW5UeXBlLCBTWVNURU1fT1JHX0lELCB0eXBlIENyaXRpY2FsaXR5LCB0eXBlIEVudGl0eUxhYmVscywgdHlwZSBFbnRpdHlMaW5rLCB0eXBlIExpZmVjeWNsZSwgdHlwZSBPd25lclR5cGUsXG4gIHR5cGUgVmlzaWJpbGl0eSxcbn0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgc3FsIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgYm9vbGVhbiwgaW50ZWdlciwgdmFyY2hhciwgcGdUYWJsZSwgdGV4dCwgdGltZXN0YW1wLCB1dWlkLCBqc29uYiwgaW5kZXgsIHVuaXF1ZUluZGV4LCBjaGVjayB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnO1xuXG4vKipcbiAqIFNlY3JldCByZXF1aXJlbWVudCBmb3IgYSBwbHVnaW4uXG4gKiBEZWNsYXJlcyBuYW1lZCBzZWNyZXRzIHRoZSBwbHVnaW4gZXhwZWN0cyBhdCBidWlsZCB0aW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblNlY3JldCB7XG4gIG5hbWU6IHN0cmluZztcbiAgcmVxdWlyZWQ6IGJvb2xlYW47XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRhYmxlIGZvciBzdG9yaW5nIHJldXNhYmxlIHBsdWdpbiBjb25maWd1cmF0aW9ucy5cbiAqIFBsdWdpbnMgZGVmaW5lIHRoZSBiZWhhdmlvciBvZiBzeW50aC9idWlsZCBzdGVwcyBpbiBDREsgcGlwZWxpbmVzLlxuICpcbiAqIEZlYXR1cmVzICogLSBWZXJzaW9uaW5nIHN1cHBvcnQgd2l0aCBzZW1hbnRpYyB2ZXJzaW9uaW5nXG4gKiAtIEFjY2VzcyBjb250cm9sIHZpYSBvcmdJZCBhbmQgdGhlIHRocmVlLXJ1bmcgYHZpc2liaWxpdHlgIGxhZGRlclxuICogLSBGdWxsIGF1ZGl0IHRyYWlsIChjcmVhdGVkL3VwZGF0ZWQgYnkvYXQpXG4gKiAtIEZsZXhpYmxlIG1ldGFkYXRhIHN0b3JhZ2UgdmlhIEpTT05CXG4gKiAtIFN1cHBvcnQgZm9yIGJvdGggU2hlbGxTdGVwIGFuZCBDb2RlQnVpbGRTdGVwIHR5cGVzXG4gKlxuICogQHRhYmxlIHBsdWdpbnNcbiAqL1xuZXhwb3J0IGNvbnN0IHBsdWdpbiA9IHBnVGFibGUoJ3BsdWdpbnMnLCB7XG4gIC8vIFByaW1hcnkga2V5XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG5cbiAgLy8gT3JnYW5pemF0aW9uIGFuZCBhY2Nlc3MgY29udHJvbFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KVxuICAgIC5kZWZhdWx0KFNZU1RFTV9PUkdfSUQpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBBdWRpdCBmaWVsZHNcbiAgY3JlYXRlZEJ5OiB0ZXh0KCdjcmVhdGVkX2J5JylcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSlcbiAgICAuZGVmYXVsdE5vdygpXG4gICAgLm5vdE51bGwoKSxcbiAgdXBkYXRlZEJ5OiB0ZXh0KCd1cGRhdGVkX2J5JylcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG4gIHVwZGF0ZWRBdDogdGltZXN0YW1wKCd1cGRhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSlcbiAgICAuZGVmYXVsdE5vdygpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBDb3JlIHBsdWdpbiBpbmZvcm1hdGlvblxuICBuYW1lOiB2YXJjaGFyKCduYW1lJywgeyBsZW5ndGg6IDI1NSB9KVxuICAgIC5ub3ROdWxsKCksXG4gIGRlc2NyaXB0aW9uOiB0ZXh0KCdkZXNjcmlwdGlvbicpLFxuICBrZXl3b3JkczoganNvbmIoJ2tleXdvcmRzJylcbiAgICAuJHR5cGU8c3RyaW5nW10+KClcbiAgICAuZGVmYXVsdChbXSlcbiAgICAubm90TnVsbCgpLFxuICB2ZXJzaW9uOiB2YXJjaGFyKCd2ZXJzaW9uJywgeyBsZW5ndGg6IDUwIH0pXG4gICAgLmRlZmF1bHQoJzEuMC4wJylcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIFBsdWdpbiBjbGFzc2lmaWNhdGlvblxuICBjYXRlZ29yeTogdmFyY2hhcignY2F0ZWdvcnknLCB7IGxlbmd0aDogNTAgfSlcbiAgICAuZGVmYXVsdCgndW5rbm93bicpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBQbHVnaW4gY29uZmlndXJhdGlvblxuICBtZXRhZGF0YToganNvbmIoJ21ldGFkYXRhJylcbiAgICAuJHR5cGU8UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuICBwbHVnaW5UeXBlOiB2YXJjaGFyKCdwbHVnaW5fdHlwZScsIHsgbGVuZ3RoOiA1MCB9KVxuICAgIC4kdHlwZTxQbHVnaW5UeXBlPigpXG4gICAgLmRlZmF1bHQoJ0NvZGVCdWlsZFN0ZXAnIGFzIFBsdWdpblR5cGUpXG4gICAgLm5vdE51bGwoKSxcbiAgY29tcHV0ZVR5cGU6IHZhcmNoYXIoJ2NvbXB1dGVfdHlwZScsIHsgbGVuZ3RoOiA1MCB9KVxuICAgIC4kdHlwZTxDb21wdXRlVHlwZT4oKVxuICAgIC5kZWZhdWx0KCdTTUFMTCcgYXMgQ29tcHV0ZVR5cGUpXG4gICAgLm5vdE51bGwoKSxcbiAgdGltZW91dDogaW50ZWdlcigndGltZW91dCcpLFxuICBmYWlsdXJlQmVoYXZpb3I6IHZhcmNoYXIoJ2ZhaWx1cmVfYmVoYXZpb3InLCB7IGxlbmd0aDogMTAgfSlcbiAgICAuJHR5cGU8J2ZhaWwnIHwgJ3dhcm4nIHwgJ2lnbm9yZSc+KClcbiAgICAuZGVmYXVsdCgnZmFpbCcpXG4gICAgLm5vdE51bGwoKSxcbiAgc2VjcmV0czoganNvbmIoJ3NlY3JldHMnKVxuICAgIC4kdHlwZTxQbHVnaW5TZWNyZXRbXT4oKVxuICAgIC5kZWZhdWx0KFtdKVxuICAgIC5ub3ROdWxsKCksXG4gIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6IHZhcmNoYXIoJ3ByaW1hcnlfb3V0cHV0X2RpcmVjdG9yeScsIHsgbGVuZ3RoOiAyOCB9KSxcblxuICAvLyBCdWlsZCBjb25maWd1cmF0aW9uXG4gIGVudjoganNvbmIoJ2VudicpXG4gICAgLiR0eXBlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuICBidWlsZEFyZ3M6IGpzb25iKCdidWlsZF9hcmdzJylcbiAgICAuJHR5cGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKVxuICAgIC5kZWZhdWx0KHt9KVxuICAgIC5ub3ROdWxsKCksXG4gIGluc3RhbGxDb21tYW5kczogdGV4dCgnaW5zdGFsbF9jb21tYW5kcycpXG4gICAgLmFycmF5KClcbiAgICAuZGVmYXVsdChbXSlcbiAgICAubm90TnVsbCgpLFxuICBjb21tYW5kczogdGV4dCgnY29tbWFuZHMnKVxuICAgIC5hcnJheSgpXG4gICAgLmRlZmF1bHQoW10pXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBEb2NrZXIgY29uZmlndXJhdGlvblxuICBkb2NrZXJmaWxlOiB0ZXh0KCdkb2NrZXJmaWxlJyksXG4gIGJ1aWxkVHlwZTogdmFyY2hhcignYnVpbGRfdHlwZScsIHsgbGVuZ3RoOiAyMCB9KVxuICAgIC5kZWZhdWx0KCdidWlsZF9pbWFnZScpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBEZXZlbG9wZXItcG9ydGFsIGNhdGFsb2cgbWV0YWRhdGEgKG93bmVyc2hpcCAvIGxpZmVjeWNsZSAvIGNsYXNzaWZpY2F0aW9uKS5cbiAgLy8gb3duZXJJZCBkZWZhdWx0cyB0byB0aGUgY3JlYXRpbmcgdXNlciAoc2V0IGF0IGluc2VydCksIHNvIGV2ZXJ5IHBsdWdpbiBoYXNcbiAgLy8gYW4gb3duZXIgZm9yIFwibXkgc2VydmljZXNcIiB2aWV3czsgb3duZXJUeXBlIGRpc3Rpbmd1aXNoZXMgdXNlciB2cyB0ZWFtLlxuICBvd25lcklkOiB0ZXh0KCdvd25lcl9pZCcpLFxuICBvd25lclR5cGU6IHZhcmNoYXIoJ293bmVyX3R5cGUnLCB7IGxlbmd0aDogMTAgfSkuJHR5cGU8T3duZXJUeXBlPigpLFxuICBsaWZlY3ljbGU6IHZhcmNoYXIoJ2xpZmVjeWNsZScsIHsgbGVuZ3RoOiAyMCB9KVxuICAgIC4kdHlwZTxMaWZlY3ljbGU+KClcbiAgICAuZGVmYXVsdCgncHJvZHVjdGlvbicgYXMgTGlmZWN5Y2xlKVxuICAgIC5ub3ROdWxsKCksXG4gIGNyaXRpY2FsaXR5OiB2YXJjaGFyKCdjcml0aWNhbGl0eScsIHsgbGVuZ3RoOiAxMCB9KS4kdHlwZTxDcml0aWNhbGl0eT4oKSxcbiAgbGFiZWxzOiBqc29uYignbGFiZWxzJylcbiAgICAuJHR5cGU8RW50aXR5TGFiZWxzPigpXG4gICAgLmRlZmF1bHQoe30pXG4gICAgLm5vdE51bGwoKSxcbiAgbGlua3M6IGpzb25iKCdsaW5rcycpXG4gICAgLiR0eXBlPEVudGl0eUxpbmtbXT4oKVxuICAgIC5kZWZhdWx0KFtdKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gQWNjZXNzIGFuZCB2aXNpYmlsaXR5IOKAlCB0aGUgc2hhcmVkIHRocmVlLXJ1bmcgbGFkZGVyIChzZWUgYXBpLWNvcmUnc1xuICAvLyBgVmlzaWJpbGl0eWApOiBgcHJpdmF0ZWAgaXMgYXV0aG9yLW9ubHkgKGBjcmVhdGVkX2J5YCksIGBvcmdgIGlzIHRoZSB3aG9sZVxuICAvLyBvd25pbmcgb3JnLCBgcHVibGljYCByZWFjaGVzIHRoZSBvcmcncyB0ZWFtcyBhbmQg4oCUIGZyb20gdGhlIHN5c3RlbSBvcmcg4oCUXG4gIC8vIGV2ZXJ5IG9yZy4gQ29uc3RyYWluZWQgYXQgdGhlIFNRTCBsYXllciB0b28gdmlhIGEgQ0hFQ0sgaW4gcG9zdGdyZXMtaW5pdC5zcWxcbiAgLy8gc28gYSB0eXBvIGNhbid0IHNuZWFrIHBhc3QgdGhlIGFwcGxpY2F0aW9uIGxheWVyLlxuICB2aXNpYmlsaXR5OiB2YXJjaGFyKCd2aXNpYmlsaXR5JywgeyBsZW5ndGg6IDEwIH0pXG4gICAgLiR0eXBlPFZpc2liaWxpdHk+KClcbiAgICAuZGVmYXVsdCgncHJpdmF0ZScpXG4gICAgLm5vdE51bGwoKSxcbiAgaXNEZWZhdWx0OiBib29sZWFuKCdpc19kZWZhdWx0JylcbiAgICAuZGVmYXVsdChmYWxzZSlcbiAgICAubm90TnVsbCgpLFxuICBpc0FjdGl2ZTogYm9vbGVhbignaXNfYWN0aXZlJylcbiAgICAuZGVmYXVsdCh0cnVlKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gRGVsZXRpb24gdHJhY2tpbmcgKHNvZnQgZGVsZXRlKVxuICBkZWxldGVkQXQ6IHRpbWVzdGFtcCgnZGVsZXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBkZWxldGVkQnk6IHRleHQoJ2RlbGV0ZWRfYnknKSxcbiAgLy8gU29mdC1kZWxldGUgcHVyZ2UgZGVhZGxpbmU6IHRoZSByZXRlbnRpb24gc3dlZXAgaGFyZC1kZWxldGVzIHRvbWJzdG9uZWRcbiAgLy8gcm93cyBvbmNlIGBwdXJnZV9hZnRlcmAgaGFzIHBhc3NlZCAoc2V0IG9uIGRlbGV0ZSBhbG9uZ3NpZGUgZGVsZXRlZF9hdCkuXG4gIHB1cmdlQWZ0ZXI6IHRpbWVzdGFtcCgncHVyZ2VfYWZ0ZXInLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgLy8gUGFydGlhbCBpbmRleCBvdmVyIGp1c3QgdGhlIHRvbWJzdG9uZXMg4oCUIGRyaXZlcyB0aGUgcmV0ZW50aW9uIHB1cmdlIHN3ZWVwLlxuICBwdXJnZUlkeDogaW5kZXgoJ3BsdWdpbl9wdXJnZV9pZHgnKS5vbih0YWJsZS5wdXJnZUFmdGVyKS53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOT1QgTlVMTGApLFxuICAvLyBJbmRleGVzIGZvciBjb21tb24gcXVlcmllc1xuICBuYW1lSWR4OiBpbmRleCgncGx1Z2luX25hbWVfaWR4Jykub24odGFibGUubmFtZSksXG4gIG9yZ0lkSWR4OiBpbmRleCgncGx1Z2luX29yZ19pZF9pZHgnKS5vbih0YWJsZS5vcmdJZCksXG4gIHZlcnNpb25JZHg6IGluZGV4KCdwbHVnaW5fdmVyc2lvbl9pZHgnKS5vbih0YWJsZS52ZXJzaW9uKSxcbiAgYWN0aXZlSWR4OiBpbmRleCgncGx1Z2luX2FjdGl2ZV9pZHgnKS5vbih0YWJsZS5pc0FjdGl2ZSksXG4gIGNyZWF0ZWRBdElkeDogaW5kZXgoJ3BsdWdpbl9jcmVhdGVkX2F0X2lkeCcpLm9uKHRhYmxlLmNyZWF0ZWRBdCksXG4gIHVwZGF0ZWRBdElkeDogaW5kZXgoJ3BsdWdpbl91cGRhdGVkX2F0X2lkeCcpLm9uKHRhYmxlLnVwZGF0ZWRBdCksXG5cbiAgLy8gQ2F0ZWdvcnkgaW5kZXggZm9yIGZpbHRlcmluZ1xuICBjYXRlZ29yeUlkeDogaW5kZXgoJ3BsdWdpbl9jYXRlZ29yeV9pZHgnKS5vbih0YWJsZS5jYXRlZ29yeSksXG5cbiAgLy8gRGV2ZWxvcGVyLXBvcnRhbCBjYXRhbG9nIGluZGV4ZXM6IFwibXkgc2VydmljZXNcIiAob3duZXIpICsgbGlmZWN5Y2xlIGZpbHRlci5cbiAgb3duZXJJZHg6IGluZGV4KCdwbHVnaW5fb3duZXJfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLm93bmVySWQpLFxuICBsaWZlY3ljbGVJZHg6IGluZGV4KCdwbHVnaW5fbGlmZWN5Y2xlX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5saWZlY3ljbGUpLFxuXG4gIC8vIENvbXBvc2l0ZSBpbmRleCBmb3IgY29tbW9uIGFjY2VzcyBwYXR0ZXJuIChvcmdJZCArIGlzQWN0aXZlKVxuICBvcmdBY3RpdmVJZHg6IGluZGV4KCdwbHVnaW5fb3JnX2FjdGl2ZV9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUuaXNBY3RpdmUpLFxuXG4gIC8vIENvbXBvc2l0ZSBpbmRleCBmb3IgZmlsdGVyZWQgcXVlcmllcyAob3JnSWQgKyB2aXNpYmlsaXR5ICsgaXNBY3RpdmUpXG4gIG9yZ1Zpc2liaWxpdHlBY3RpdmVJZHg6IGluZGV4KCdwbHVnaW5fb3JnX3Zpc2liaWxpdHlfYWN0aXZlX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS52aXNpYmlsaXR5LCB0YWJsZS5pc0FjdGl2ZSksXG4gIC8vIERyaXZlcyB0aGUgXCJteSBwcml2YXRlIGRyYWZ0c1wiIGxlZyBvZiB0aGUgdmlzaWJpbGl0eSBwcmVkaWNhdGUuXG4gIGNyZWF0ZWRCeUlkeDogaW5kZXgoJ3BsdWdpbl9jcmVhdGVkX2J5X2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5jcmVhdGVkQnkpLFxuXG4gIC8vIFBhcnRpYWwgaW5kZXggZm9yIGFjdGl2ZS1vbmx5IHF1ZXJpZXMgKHNtYWxsZXIsIGZhc3RlciB0aGFuIGZ1bGwgaW5kZXgpXG4gIGFjdGl2ZU9ubHlPcmdJZHg6IGluZGV4KCdwbHVnaW5fYWN0aXZlX29ubHlfb3JnX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5jcmVhdGVkQXQpLndoZXJlKHNxbGBpc19hY3RpdmUgPSB0cnVlYCksXG5cbiAgLy8gVW5pcXVlIGNvbnN0cmFpbnQgb24gbmFtZSArIHZlcnNpb24gKyBvcmdJZFxuICBuYW1lVmVyc2lvbk9yZ1VuaXF1ZTogdW5pcXVlSW5kZXgoJ3BsdWdpbl9uYW1lX3ZlcnNpb25fb3JnX3VuaXF1ZScpXG4gICAgLm9uKHRhYmxlLm5hbWUsIHRhYmxlLnZlcnNpb24sIHRhYmxlLm9yZ0lkKSxcblxuICAvLyBDaGVjayBjb25zdHJhaW50c1xuICB2ZXJzaW9uQ2hlY2s6IGNoZWNrKCAncGx1Z2luX3ZlcnNpb25fY2hlY2snLFxuICAgIHNxbGAke3RhYmxlLnZlcnNpb259IH4gJ15bMC05XStcXC5bMC05XStcXC5bMC05XSsoLVthLXpBLVowLTkuLV0rKT8oXFwrW2EtekEtWjAtOS4tXSspPyQnYCxcbiAgKSxcbn0pKTtcblxuLyoqXG4gKiBUeXBlU2NyaXB0IHR5cGVzIHJlcHJlc2VudGluZyBkYXRhYmFzZSByb3dzXG4gKi9cbmV4cG9ydCB0eXBlIFBsdWdpbiA9IHR5cGVvZiBwbHVnaW4uJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgUGx1Z2luSW5zZXJ0ID0gdHlwZW9mIHBsdWdpbi4kaW5mZXJJbnNlcnQ7XG5cbi8qKlxuICogSGVscGVyIHR5cGVzIGZvciB3b3JraW5nIHdpdGggcGFydGlhbCB1cGRhdGVzXG4gKi9cbmV4cG9ydCB0eXBlIFBsdWdpblVwZGF0ZSA9IFBhcnRpYWw8T21pdDxQbHVnaW5JbnNlcnQsICdpZCcgfCAnY3JlYXRlZEF0JyB8ICdjcmVhdGVkQnknPj47XG4iXX0=
|
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Background: postgres-init.sql installs RLS policies on every user-data
|
|
5
5
|
* table that consult two session GUCs — `app.org_id` and `app.is_sysadmin`.
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
6
|
+
* Most user-data tables have been flipped to `FORCE ROW LEVEL SECURITY`, so
|
|
7
|
+
* the policies DO enforce even for the (owning) connection user — a query
|
|
8
|
+
* against a FORCE'd table must run inside a transaction that has SET LOCAL'd
|
|
9
|
+
* both GUCs or it returns zero rows for non-sysadmins (and may fail to write
|
|
10
|
+
* for any caller). A few tables remain `ENABLE`-only (owner-bypass) pending
|
|
11
|
+
* their soak; the same context plumbing covers both.
|
|
11
12
|
*
|
|
12
13
|
* This module is the seam.
|
|
13
14
|
*
|
|
@@ -36,6 +37,13 @@ import { db } from './postgres-connection.js';
|
|
|
36
37
|
export interface TenantContext {
|
|
37
38
|
/** Caller's org. Undefined for un-authenticated / system jobs. */
|
|
38
39
|
orgId?: string;
|
|
40
|
+
/** Caller's user id. Not used for RLS — Postgres policies are org-grained,
|
|
41
|
+
* with no per-user session GUC — but carried so app-layer predicates with a
|
|
42
|
+
* PER-USER rung (pipeline templates' `private` visibility) can resolve "who
|
|
43
|
+
* is asking" on paths that have nowhere to pass it, notably CrudService's
|
|
44
|
+
* `writeConditions`. Absent for system jobs, which is the fail-closed case:
|
|
45
|
+
* no viewer ⇒ no private rows. */
|
|
46
|
+
userId?: string;
|
|
39
47
|
/** True when the caller is a sysadmin (system-org admin). Bypasses RLS
|
|
40
48
|
* policies via the sysadmin-bypass branch in `current_is_sysadmin()`. */
|
|
41
49
|
isSuperAdmin: boolean;
|