@codedrifters/configulator 0.0.21 → 0.0.22

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.
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AwsDeploymentTarget = exports.AWS_DEPLOY_TYPE = void 0;
4
+ const projen_1 = require("projen");
5
+ const aws_deployment_config_1 = require("./aws-deployment-config");
6
+ /*******************************************************************************
7
+ *
8
+ * AWS Deployment Configuration
9
+ *
10
+ * A single deployment target that CDK applications can be deployed into.
11
+ *
12
+ ******************************************************************************/
13
+ exports.AWS_DEPLOY_TYPE = {
14
+ /**
15
+ * Development environment, typically used for testing and development.
16
+ */
17
+ DEV: "dev",
18
+ /**
19
+ * Staging environment, used for pre-production testing.
20
+ */
21
+ STAGE: "stage",
22
+ /**
23
+ * Production environment, used for live deployments.
24
+ */
25
+ PROD: "prod",
26
+ };
27
+ class AwsDeploymentTarget extends projen_1.Component {
28
+ /**
29
+ * Static method to discovert targets in a project.
30
+ */
31
+ static of(project) {
32
+ const isDefined = (c) => c instanceof AwsDeploymentTarget;
33
+ return project.components.filter(isDefined);
34
+ }
35
+ constructor(project, options) {
36
+ super(project);
37
+ /**
38
+ * The AWS profile to use for this deployment target.
39
+ *
40
+ * @default ['main'] when prod release type, ['feature/*'] when dev type
41
+ */
42
+ this.branches = [];
43
+ /*****************************************************************************
44
+ *
45
+ * Deploy Tasks
46
+ *
47
+ * - If local deploy, add a deploy task.
48
+ *
49
+ ****************************************************************************/
50
+ this.configureDeployTask = () => {
51
+ if (this.localDeployment) {
52
+ const taskName = ["deploy", this.account, this.region].join(":");
53
+ const deployTask = this.project.tasks.addTask(taskName, {
54
+ env: this.awsDeploymentConfig.env,
55
+ });
56
+ deployTask.exec(`cdk deploy --lookups=false --require-approval=never --profile=${this.localDeploymentConfig?.profile} --app=${this.awsDeploymentConfig.cdkOut} "*-${this.account}-${this.region}"`);
57
+ }
58
+ };
59
+ /*****************************************************************************
60
+ *
61
+ * Watch tasks
62
+ *
63
+ * - Configure watch task to use the branch name
64
+ * - configure watch task to use the correct synth output location.
65
+ *
66
+ ****************************************************************************/
67
+ this.configureWatchTask = () => {
68
+ if (this.localDeployment) {
69
+ const taskName = ["watch", this.account, this.region].join(":");
70
+ const watchTask = this.project.tasks.addTask(taskName, {
71
+ env: this.awsDeploymentConfig.env,
72
+ });
73
+ // update the synth first
74
+ const synthSilent = this.project.tasks.tryFind("synth:silent");
75
+ if (synthSilent) {
76
+ watchTask.spawn(synthSilent);
77
+ }
78
+ // do a normal deploy
79
+ watchTask.exec(`cdk deploy --lookups=false --require-approval=never --profile=${this.localDeploymentConfig?.profile} --app=${this.awsDeploymentConfig.cdkOut} "*-${this.account}-${this.region}"`);
80
+ // watch for changes and log output
81
+ watchTask.exec(`cdk watch --lookups=false --require-approval=never --hotswap --profile=${this.localDeploymentConfig?.profile} "*-${this.account}-${this.region}"`);
82
+ }
83
+ };
84
+ /**
85
+ * Set target region and account.
86
+ */
87
+ this.account = options.account;
88
+ this.region = options.region;
89
+ /**
90
+ * Set default type
91
+ */
92
+ this.awsDeploymentType = options.awsDeploymentType || exports.AWS_DEPLOY_TYPE.DEV;
93
+ /**
94
+ * Set default Branches
95
+ */
96
+ this.branches =
97
+ options.branches || this.awsDeploymentType === exports.AWS_DEPLOY_TYPE.PROD
98
+ ? [
99
+ {
100
+ branch: "main",
101
+ },
102
+ ]
103
+ : [
104
+ {
105
+ branch: "feature/*",
106
+ },
107
+ ];
108
+ /**
109
+ * Set default for local deployment
110
+ */
111
+ this.localDeployment =
112
+ options.localDeployment ?? this.awsDeploymentType === exports.AWS_DEPLOY_TYPE.DEV;
113
+ /**
114
+ * Some default configurations for local deployments.
115
+ */
116
+ if (this.localDeployment) {
117
+ const roleName = options.localDeploymentConfig?.roleName?.toLowerCase() ||
118
+ "administratoraccess";
119
+ const profile = options.localDeploymentConfig?.profile ||
120
+ `${roleName}-${this.account}-${this.region}`;
121
+ this.localDeploymentConfig = {
122
+ profile,
123
+ roleName,
124
+ ...options.localDeploymentConfig,
125
+ };
126
+ }
127
+ /**
128
+ * Set CI deployment default
129
+ */
130
+ this.ciDeployment = options.ciDeployment ?? false;
131
+ /**
132
+ * Some defaults for CI deployments.
133
+ */
134
+ if (this.ciDeployment) {
135
+ const roleArn = options.ciDeploymentConfig?.roleArn ||
136
+ `arn:aws:iam::${this.account}:role/GitHubDeployer}`;
137
+ this.ciDeploymentConfig = {
138
+ roleArn,
139
+ ...options.ciDeploymentConfig,
140
+ };
141
+ }
142
+ /**
143
+ * Find or create CDK folder config for this project.
144
+ */
145
+ this.awsDeploymentConfig =
146
+ aws_deployment_config_1.AwsDeploymentConfig.of(project) || new aws_deployment_config_1.AwsDeploymentConfig(project);
147
+ /**
148
+ * Add the target to the deployment targets array.
149
+ */
150
+ this.awsDeploymentConfig.awsDeploymentTargets.push(this);
151
+ // Deploy tasks are configured per target.
152
+ this.configureDeployTask();
153
+ // Watch tasks are configured per target.
154
+ this.configureWatchTask();
155
+ }
156
+ }
157
+ exports.AwsDeploymentTarget = AwsDeploymentTarget;
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWRlcGxveW1lbnQtdGFyZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F3cy9hd3MtZGVwbG95bWVudC10YXJnZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQW1DO0FBRW5DLG1FQUE4RDtBQUc5RDs7Ozs7O2dGQU1nRjtBQUVuRSxRQUFBLGVBQWUsR0FBRztJQUM3Qjs7T0FFRztJQUNILEdBQUcsRUFBRSxLQUFLO0lBRVY7O09BRUc7SUFDSCxLQUFLLEVBQUUsT0FBTztJQUVkOztPQUVHO0lBQ0gsSUFBSSxFQUFFLE1BQU07Q0FDSixDQUFDO0FBeUZYLE1BQWEsbUJBQW9CLFNBQVEsa0JBQVM7SUFDaEQ7O09BRUc7SUFDSSxNQUFNLENBQUMsRUFBRSxDQUNkLE9BQTRCO1FBRTVCLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBWSxFQUE0QixFQUFFLENBQzNELENBQUMsWUFBWSxtQkFBbUIsQ0FBQztRQUNuQyxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUF1REQsWUFDRSxPQUE0QixFQUM1QixPQUFtQztRQUVuQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUF4Q2pCOzs7O1dBSUc7UUFDSSxhQUFRLEdBQXFCLEVBQUUsQ0FBQztRQThIdkM7Ozs7OztzRkFNOEU7UUFFdEUsd0JBQW1CLEdBQUcsR0FBUyxFQUFFO1lBQ3ZDLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN6QixNQUFNLFFBQVEsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2pFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7b0JBQ3RELEdBQUcsRUFBRSxJ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QixPQUFPO2dCQUNQLFFBQVE7Z0JBQ1IsR0FBRyxPQUFPLENBQUMscUJBQXFCO2FBQ2pDLENBQUM7UUFDSixDQUFDO1FBRUQ7O1dBRUc7UUFDSCxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLElBQUksS0FBSyxDQUFDO1FBRWxEOztXQUVHO1FBQ0gsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsTUFBTSxPQUFPLEdBQ1gsT0FBTyxDQUFDLGtCQUFrQixFQUFFLE9BQU87Z0JBQ25DLGdCQUFnQixJQUFJLENBQUMsT0FBTyx1QkFBdUIsQ0FBQztZQUV0RCxJQUFJLENBQUMsa0JBQWtCLEdBQUc7Z0JBQ3hCLE9BQU87Z0JBQ1AsR0FBRyxPQUFPLENBQUMsa0JBQWtCO2FBQzlCLENBQUM7UUFDSixDQUFDO1FBRUQ7O1dBRUc7UUFDSCxJQUFJLENBQUMsbUJBQW1CO1lBQ3RCLDJDQUFtQixDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLDJDQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXRFOztXQUVHO1FBQ0gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV6RCwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFM0IseUNBQXlDO1FBQ3pDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7Q0F1REY7QUFyTkQsa0RBcU5DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcInByb2plblwiO1xuaW1wb3J0IHsgQXdzQ2RrVHlwZVNjcmlwdEFwcCB9IGZyb20gXCJwcm9qZW4vbGliL2F3c2Nka1wiO1xuaW1wb3J0IHsgQXdzRGVwbG95bWVudENvbmZpZyB9IGZyb20gXCIuL2F3cy1kZXBsb3ltZW50LWNvbmZpZ1wiO1xuaW1wb3J0IHsgR2l0QnJhbmNoIH0gZnJvbSBcIi4uL2dpdFwiO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICpcbiAqIEFXUyBEZXBsb3ltZW50IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBBIHNpbmdsZSBkZXBsb3ltZW50IHRhcmdldCB0aGF0IENESyBhcHBsaWNhdGlvbnMgY2FuIGJlIGRlcGxveWVkIGludG8uXG4gKlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuZXhwb3J0IGNvbnN0IEFXU19ERVBMT1lfVFlQRSA9IHtcbiAgLyoqXG4gICAqIERldmVsb3BtZW50IGVudmlyb25tZW50LCB0eXBpY2FsbHkgdXNlZCBmb3IgdGVzdGluZyBhbmQgZGV2ZWxvcG1lbnQuXG4gICAqL1xuICBERVY6IFwiZGV2XCIsXG5cbiAgLyoqXG4gICAqIFN0YWdpbmcgZW52aXJvbm1lbnQsIHVzZWQgZm9yIHByZS1wcm9kdWN0aW9uIHRlc3RpbmcuXG4gICAqL1xuICBTVEFHRTogXCJzdGFnZVwiLFxuXG4gIC8qKlxuICAgKiBQcm9kdWN0aW9uIGVudmlyb25tZW50LCB1c2VkIGZvciBsaXZlIGRlcGxveW1lbnRzLlxuICAgKi9cbiAgUFJPRDogXCJwcm9kXCIsXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIEFib3ZlIGNvbnN0IGFzIGEgdHlwZS5cbiAqL1xuZXhwb3J0IHR5cGUgQXdzRGVwbG95bWVudFR5cGUgPVxuICAodHlwZW9mIEFXU19ERVBMT1lfVFlQRSlba2V5b2YgdHlwZW9mIEFXU19ERVBMT1lfVFlQRV07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgY29uZmlndXJhdGlvbiBmb3IgbG9jYWwgZGVwbG95bWVudCBpbiBBV1MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXdzTG9jYWxEZXBsb3ltZW50Q29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBBV1MgcHJvZmlsZSAoaW4gfi8uYXdzL2NvbmZpZykgdG8gdXNlIGZvciBsb2NhbCBkZXBsb3ltZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBnZW5lcmF0ZWQgZHluYW1pY2FsbHkgYmFzZWQgcm9sZSBuYW1lLCBhY2NvdW50IGFuZCByZWdpb25cbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWVkIFJvbGUgdXNlZCB0byBjb25kdWN0IGxvY2FsIGRlcGxveW1lbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcImFkbWluaXN0cmF0b3JhY2Nlc3NcIlxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZU5hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2lEZXBsb3ltZW50Q29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBPSURDIElBTSBSb2xlIHRvIGFzc3VtZSBmb3IgQ0kgZGVwbG95bWVudHMuXG4gICAqL1xuICByZWFkb25seSByb2xlQXJuOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGRlcGxveW1lbnQgdGFyZ2V0IGluIEFXUywgaW5jbHVkaW5nIGFjY291bnQgYW5kIHJlZ2lvbiwgYW5kXG4gKiBicmFuY2hlcyBhbGxvd2VkIHRvIGRlcGxveSB0byB0aGlzIHRhcmdldC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBd3NEZXBsb3ltZW50VGFyZ2V0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYWNjb3VudCBuYW1lIGZvciB0aGUgZGVwbG95bWVudCB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSBhY2NvdW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgcmVnaW9uIGZvciB0aGUgZGVwbG95bWVudCB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcblxuICAvKipcbiAgICogQVdTIGRlcGxveW1lbnQgdHlwZSwgc3VjaCBhcyBkZXYsIHN0YWdlLCBvciBwcm9kLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnZGV2J1xuICAgKi9cbiAgcmVhZG9ubHkgYXdzRGVwbG95bWVudFR5cGU/OiBBd3NEZXBsb3ltZW50VHlwZTtcblxuICAvKipcbiAgICogVGhlIEFXUyBwcm9maWxlIHRvIHVzZSBmb3IgdGhpcyBkZXBsb3ltZW50IHRhcmdldC5cbiAgICpcbiAgICogQGRlZmF1bHQgWydtYWluJ10gd2hlbiBwcm9kIHJlbGVhc2UgdHlwZSwgWydmZWF0dXJlLyonXSB3aGVuIGRldiB0eXBlXG4gICAqL1xuICByZWFkb25seSBicmFuY2hlcz86IEFycmF5PEdpdEJyYW5jaD47XG5cbiAgLyoqXG4gICAqIENhbiB0aGlzIGRlcGxveW1lbnQgdGFyZ2V0IGJlIHVzZWQgZm9yIGxvY2FsIGRldmVsb3BtZW50P1xuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlIGZvciBkZXYgZW52aXJvbm1lbnRzLCBmYWxzZSBmb3IgcHJvZCBlbnZpcm9ubWVudHNcbiAgICovXG4gIHJlYWRvbmx5IGxvY2FsRGVwbG95bWVudD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gd2hlbiBkZXBsb3lpbmcgdG8gdGhpcyB0YXJnZXQgbG9jYWxseS5cbiAgICovXG4gIHJlYWRvbmx5IGxvY2FsRGVwbG95bWVudENvbmZpZz86IEF3c0xvY2FsRGVwbG95bWVudENvbmZpZztcblxuICAvKipcbiAgICogQ2FuIHRoaXMgZGVwbG95bWVudCB0YXJnZXQgYmUgdXNlZCBpbiBDSSBkZXBsb3ltZW50cz9cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNpRGVwbG95bWVudD86IGJvb2xlYW47XG5cbiAgLypcbiAgICogQ29uZmlndXJhdGlvbiB3aGVuIGRlcGxveWluZyB0byB0aGlzIHRhcmdldCBpbiBDSS5cblxuICAgKi9cbiAgcmVhZG9ubHkgY2lEZXBsb3ltZW50Q29uZmlnPzogQ2lEZXBsb3ltZW50Q29uZmlnO1xufVxuXG5leHBvcnQgY2xhc3MgQXdzRGVwbG95bWVudFRhcmdldCBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBTdGF0aWMgbWV0aG9kIHRvIGRpc2NvdmVydCB0YXJnZXRzIGluIGEgcHJvamVjdC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2YoXG4gICAgcHJvamVjdDogQXdzQ2RrVHlwZVNjcmlwdEFwcCxcbiAgKTogQXJyYXk8QXdzRGVwbG95bWVudFRhcmdldD4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGlzRGVmaW5lZCA9IChjOiBDb21wb25lbnQpOiBjIGlzIEF3c0RlcGxveW1lbnRUYXJnZXQgPT5cbiAgICAgIGMgaW5zdGFuY2VvZiBBd3NEZXBsb3ltZW50VGFyZ2V0O1xuICAgIHJldHVybiBwcm9qZWN0LmNvbXBvbmVudHMuZmlsdGVyKGlzRGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGFjY291bnQgbmFtZSBmb3IgdGhlIGRlcGxveW1lbnQgdGFyZ2V0LlxuICAgKi9cbiAgcHVibGljIGFjY291bnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFXUyByZWdpb24gZm9yIHRoZSBkZXBsb3ltZW50IHRhcmdldC5cbiAgICovXG4gIHB1YmxpYyByZWdpb246IHN0cmluZztcblxuICAvKionXG4gICAqIEFXUyBkZXBsb3ltZW50IHR5cGUsIHN1Y2ggYXMgZGV2LCBzdGFnZSwgb3IgcHJvZC5cbiAgICpcbiAgICogQGRlZmF1bHQgJ2RldidcbiAgICovXG4gIHB1YmxpYyBhd3NEZXBsb3ltZW50VHlwZT86IEF3c0RlcGxveW1lbnRUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIHByb2ZpbGUgdG8gdXNlIGZvciB0aGlzIGRlcGxveW1lbnQgdGFyZ2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBbJ21haW4nXSB3aGVuIHByb2QgcmVsZWFzZSB0eXBlLCBbJ2ZlYXR1cmUvKiddIHdoZW4gZGV2IHR5cGVcbiAgICovXG4gIHB1YmxpYyBicmFuY2hlczogQXJyYXk8R2l0QnJhbmNoPiA9IFtdO1xuXG4gIC8qKlxuICAgKiBDYW4gdGhpcyBkZXBsb3ltZW50IHRhcmdldCBiZSB1c2VkIGZvciBsb2NhbCBkZXZlbG9wbWVudD9cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZSBmb3IgZGV2IGVudmlyb25tZW50cywgZmFsc2UgZm9yIHByb2QgZW52aXJvbm1lbnRzXG4gICAqL1xuICBwdWJsaWMgbG9jYWxEZXBsb3ltZW50PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiB3aGVuIGRlcGxveWluZyB0byB0aGlzIHRhcmdldCBsb2NhbGx5LlxuICAgKi9cbiAgcHVibGljIGxvY2FsRGVwbG95bWVudENvbmZpZz86IEF3c0xvY2FsRGVwbG95bWVudENvbmZpZztcblxuICAvKipcbiAgICogQ2FuIHRoaXMgZGVwbG95bWVudCB0YXJnZXQgYmUgdXNlZCBpbiBDSSBkZXBsb3ltZW50cz9cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHB1YmxpYyBjaURlcGxveW1lbnQ/OiBib29sZWFuO1xuXG4gIC8qXG4gICAqIENvbmZpZ3VyYXRpb24gd2hlbiBkZXBsb3lpbmcgdG8gdGhpcyB0YXJnZXQgaW4gQ0kuXG4gICAqL1xuICBwdWJsaWMgY2lEZXBsb3ltZW50Q29uZmlnPzogUmVxdWlyZWQ8Q2lEZXBsb3ltZW50Q29uZmlnPjtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIENESyBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGlzIGRlcGxveW1lbnQgdGFyZ2V0LlxuICAgKi9cbiAgcHVibGljIGF3c0RlcGxveW1lbnRDb25maWc6IEF3c0RlcGxveW1lbnRDb25maWc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvamVjdDogQXdzQ2RrVHlwZVNjcmlwdEFwcCxcbiAgICBvcHRpb25zOiBBd3NEZXBsb3ltZW50VGFyZ2V0T3B0aW9ucyxcbiAgKSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGFyZ2V0IHJlZ2lvbiBhbmQgYWNjb3VudC5cbiAgICAgKi9cbiAgICB0aGlzLmFjY291bnQgPSBvcHRpb25zLmFjY291bnQ7XG4gICAgdGhpcy5yZWdpb24gPSBvcHRpb25zLnJlZ2lvbjtcblxuICAgIC8qKlxuICAgICAqIFNldCBkZWZhdWx0IHR5cGVcbiAgICAgKi9cbiAgICB0aGlzLmF3c0RlcGxveW1lbnRUeXBlID0gb3B0aW9ucy5hd3NEZXBsb3ltZW50VHlwZSB8fCBBV1NfREVQTE9ZX1RZUEUuREVWO1xuXG4gICAgLyoqXG4gICAgICogU2V0IGRlZmF1bHQgQnJhbmNoZXNcbiAgICAgKi9cblxuICAgIHRoaXMuYnJhbmNoZXMgPVxuICAgICAgb3B0aW9ucy5icmFuY2hlcyB8fCB0aGlzLmF3c0RlcGxveW1lbnRUeXBlID09PSBBV1NfREVQTE9ZX1RZUEUuUFJPRFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYnJhbmNoOiBcIm1haW5cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXVxuICAgICAgICA6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYnJhbmNoOiBcImZlYXR1cmUvKlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdO1xuXG4gICAgLyoqXG4gICAgICogU2V0IGRlZmF1bHQgZm9yIGxvY2FsIGRlcGxveW1lbnRcbiAgICAgKi9cbiAgICB0aGlzLmxvY2FsRGVwbG95bWVudCA9XG4gICAgICBvcHRpb25zLmxvY2FsRGVwbG95bWVudCA/PyB0aGlzLmF3c0RlcGxveW1lbnRUeXBlID09PSBBV1NfREVQTE9ZX1RZUEUuREVWO1xuXG4gICAgLyoqXG4gICAgICogU29tZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zIGZvciBsb2NhbCBkZXBsb3ltZW50cy5cbiAgICAgKi9cbiAgICBpZiAodGhpcy5sb2NhbERlcGxveW1lbnQpIHtcbiAgICAgIGNvbnN0IHJvbGVOYW1lID1cbiAgICAgICAgb3B0aW9ucy5sb2NhbERlcGxveW1lbnRDb25maWc/LnJvbGVOYW1lPy50b0xvd2VyQ2FzZSgpIHx8XG4gICAgICAgIFwiYWRtaW5pc3RyYXRvcmFjY2Vzc1wiO1xuICAgICAgY29uc3QgcHJvZmlsZSA9XG4gICAgICAgIG9wdGlvbnMubG9jYWxEZXBsb3ltZW50Q29uZmlnPy5wcm9maWxlIHx8XG4gICAgICAgIGAke3JvbGVOYW1lfS0ke3RoaXMuYWNjb3VudH0tJHt0aGlzLnJlZ2lvbn1gO1xuXG4gICAgICB0aGlzLmxvY2FsRGVwbG95bWVudENvbmZpZyA9IHtcbiAgICAgICAgcHJvZmlsZSxcbiAgICAgICAgcm9sZU5hbWUsXG4gICAgICAgIC4uLm9wdGlvbnMubG9jYWxEZXBsb3ltZW50Q29uZmlnLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgQ0kgZGVwbG95bWVudCBkZWZhdWx0XG4gICAgICovXG4gICAgdGhpcy5jaURlcGxveW1lbnQgPSBvcHRpb25zLmNpRGVwbG95bWVudCA/PyBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNvbWUgZGVmYXVsdHMgZm9yIENJIGRlcGxveW1lbnRzLlxuICAgICAqL1xuICAgIGlmICh0aGlzLmNpRGVwbG95bWVudCkge1xuICAgICAgY29uc3Qgcm9sZUFybiA9XG4gICAgICAgIG9wdGlvbnMuY2lEZXBsb3ltZW50Q29uZmlnPy5yb2xlQXJuIHx8XG4gICAgICAgIGBhcm46YXdzOmlhbTo6JHt0aGlzLmFjY291bnR9OnJvbGUvR2l0SHViRGVwbG95ZXJ9YDtcblxuICAgICAgdGhpcy5jaURlcGxveW1lbnRDb25maWcgPSB7XG4gICAgICAgIHJvbGVBcm4sXG4gICAgICAgIC4uLm9wdGlvbnMuY2lEZXBsb3ltZW50Q29uZmlnLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kIG9yIGNyZWF0ZSBDREsgZm9sZGVyIGNvbmZpZyBmb3IgdGhpcyBwcm9qZWN0LlxuICAgICAqL1xuICAgIHRoaXMuYXdzRGVwbG95bWVudENvbmZpZyA9XG4gICAgICBBd3NEZXBsb3ltZW50Q29uZmlnLm9mKHByb2plY3QpIHx8IG5ldyBBd3NEZXBsb3ltZW50Q29uZmlnKHByb2plY3QpO1xuXG4gICAgLyoqXG4gICAgICogQWRkIHRoZSB0YXJnZXQgdG8gdGhlIGRlcGxveW1lbnQgdGFyZ2V0cyBhcnJheS5cbiAgICAgKi9cbiAgICB0aGlzLmF3c0RlcGxveW1lbnRDb25maWcuYXdzRGVwbG95bWVudFRhcmdldHMucHVzaCh0aGlzKTtcblxuICAgIC8vIERlcGxveSB0YXNrcyBhcmUgY29uZmlndXJlZCBwZXIgdGFyZ2V0LlxuICAgIHRoaXMuY29uZmlndXJlRGVwbG95VGFzaygpO1xuXG4gICAgLy8gV2F0Y2ggdGFza3MgYXJlIGNvbmZpZ3VyZWQgcGVyIHRhcmdldC5cbiAgICB0aGlzLmNvbmZpZ3VyZVdhdGNoVGFzaygpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqXG4gICAqIERlcGxveSBUYXNrc1xuICAgKlxuICAgKiAtIElmIGxvY2FsIGRlcGxveSwgYWRkIGEgZGVwbG95IHRhc2suXG4gICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgY29uZmlndXJlRGVwbG95VGFzayA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAodGhpcy5sb2NhbERlcGxveW1lbnQpIHtcbiAgICAgIGNvbnN0IHRhc2tOYW1lID0gW1wiZGVwbG95XCIsIHRoaXMuYWNjb3VudCwgdGhpcy5yZWdpb25dLmpvaW4oXCI6XCIpO1xuICAgICAgY29uc3QgZGVwbG95VGFzayA9IHRoaXMucHJvamVjdC50YXNrcy5hZGRUYXNrKHRhc2tOYW1lLCB7XG4gICAgICAgIGVudjogdGhpcy5hd3NEZXBsb3ltZW50Q29uZmlnLmVudixcbiAgICAgIH0pO1xuICAgICAgZGVwbG95VGFzay5leGVjKFxuICAgICAgICBgY2RrIGRlcGxveSAtLWxvb2t1cHM9ZmFsc2UgLS1yZXF1aXJlLWFwcHJvdmFsPW5ldmVyIC0tcHJvZmlsZT0ke3RoaXMubG9jYWxEZXBsb3ltZW50Q29uZmlnPy5wcm9maWxlfSAtLWFwcD0ke3RoaXMuYXdzRGVwbG95bWVudENvbmZpZy5jZGtPdXR9IFwiKi0ke3RoaXMuYWNjb3VudH0tJHt0aGlzLnJlZ2lvbn1cImAsXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICpcbiAgICogV2F0Y2ggdGFza3NcbiAgICpcbiAgICogLSBDb25maWd1cmUgd2F0Y2ggdGFzayB0byB1c2UgdGhlIGJyYW5jaCBuYW1lXG4gICAqIC0gY29uZmlndXJlIHdhdGNoIHRhc2sgdG8gdXNlIHRoZSBjb3JyZWN0IHN5bnRoIG91dHB1dCBsb2NhdGlvbi5cbiAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSBjb25maWd1cmVXYXRjaFRhc2sgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMubG9jYWxEZXBsb3ltZW50KSB7XG4gICAgICBjb25zdCB0YXNrTmFtZSA9IFtcIndhdGNoXCIsIHRoaXMuYWNjb3VudCwgdGhpcy5yZWdpb25dLmpvaW4oXCI6XCIpO1xuICAgICAgY29uc3Qgd2F0Y2hUYXNrID0gdGhpcy5wcm9qZWN0LnRhc2tzLmFkZFRhc2sodGFza05hbWUsIHtcbiAgICAgICAgZW52OiB0aGlzLmF3c0RlcGxveW1lbnRDb25maWcuZW52LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIHVwZGF0ZSB0aGUgc3ludGggZmlyc3RcbiAgICAgIGNvbnN0IHN5bnRoU2lsZW50ID0gdGhpcy5wcm9qZWN0LnRhc2tzLnRyeUZpbmQoXCJzeW50aDpzaWxlbnRcIik7XG4gICAgICBpZiAoc3ludGhTaWxlbnQpIHtcbiAgICAgICAgd2F0Y2hUYXNrLnNwYXduKHN5bnRoU2lsZW50KTtcbiAgICAgIH1cblxuICAgICAgLy8gZG8gYSBub3JtYWwgZGVwbG95XG4gICAgICB3YXRjaFRhc2suZXhlYyhcbiAgICAgICAgYGNkayBkZXBsb3kgLS1sb29rdXBzPWZhbHNlIC0tcmVxdWlyZS1hcHByb3ZhbD1uZXZlciAtLXByb2ZpbGU9JHt0aGlzLmxvY2FsRGVwbG95bWVudENvbmZpZz8ucHJvZmlsZX0gLS1hcHA9JHt0aGlzLmF3c0RlcGxveW1lbnRDb25maWcuY2RrT3V0fSBcIiotJHt0aGlzLmFjY291bnR9LSR7dGhpcy5yZWdpb259XCJgLFxuICAgICAgKTtcblxuICAgICAgLy8gd2F0Y2ggZm9yIGNoYW5nZXMgYW5kIGxvZyBvdXRwdXRcbiAgICAgIHdhdGNoVGFzay5leGVjKFxuICAgICAgICBgY2RrIHdhdGNoIC0tbG9va3Vwcz1mYWxzZSAtLXJlcXVpcmUtYXBwcm92YWw9bmV2ZXIgLS1ob3Rzd2FwIC0tcHJvZmlsZT0ke3RoaXMubG9jYWxEZXBsb3ltZW50Q29uZmlnPy5wcm9maWxlfSBcIiotJHt0aGlzLmFjY291bnR9LSR7dGhpcy5yZWdpb259XCJgLFxuICAgICAgKTtcbiAgICB9XG4gIH07XG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { Component } from "projen/lib";
1
+ import { Component, Project } from "projen/lib";
2
2
  import { NodeProject } from "projen/lib/javascript";
3
3
  import { TurboRepoTask } from "./turbo-repo-task";
4
4
  /*******************************************************************************
@@ -123,6 +123,10 @@ export interface TurboRepoOptions {
123
123
  }
124
124
  export declare class TurboRepo extends Component {
125
125
  readonly project: NodeProject;
126
+ /**
127
+ * Static method to discovert turbo in a project.
128
+ */
129
+ static of(project: Project): Array<TurboRepo> | undefined;
126
130
  /**
127
131
  * Version of turborepo to use.
128
132
  */
@@ -11,6 +11,13 @@ const turbo_repo_task_1 = require("./turbo-repo-task");
11
11
  exports.ROOT_TURBO_TASK_NAME = "turbo:build";
12
12
  exports.ROOT_CI_TASK_NAME = "build:all";
13
13
  class TurboRepo extends lib_1.Component {
14
+ /**
15
+ * Static method to discovert turbo in a project.
16
+ */
17
+ static of(project) {
18
+ const isDefined = (c) => c instanceof TurboRepo;
19
+ return project.components.filter(isDefined);
20
+ }
14
21
  constructor(project, options = {}) {
15
22
  super(project);
16
23
  this.project = project;
@@ -82,13 +89,6 @@ class TurboRepo extends lib_1.Component {
82
89
  });
83
90
  buildAll.exec("turbo telemetry disable");
84
91
  buildAll.exec(`turbo ${exports.ROOT_TURBO_TASK_NAME} --summarize --concurrency=10`);
85
- /**
86
- * Attach build all turbo runner to the build workflow at github.
87
- */
88
- project.buildWorkflow?.addPostBuildSteps({
89
- name: "Build Sub Projects",
90
- run: `npx projen ${exports.ROOT_CI_TASK_NAME}`,
91
- });
92
92
  }
93
93
  /**
94
94
  * SUB-PROJECT
@@ -207,4 +207,4 @@ class TurboRepo extends lib_1.Component {
207
207
  }
208
208
  }
209
209
  exports.TurboRepo = TurboRepo;
210
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVyYm8tcmVwby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90dXJiby90dXJiby1yZXBvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG9DQUF1RDtBQUV2RCx1REFBa0Q7QUFFbEQ7Ozs7Z0ZBSWdGO0FBRW5FLFFBQUEsb0JBQW9CLEdBQUcsYUFBYSxDQUFDO0FBQ3JDLFFBQUEsaUJBQWlCLEdBQUcsV0FBVyxDQUFDO0FBNkg3QyxNQUFhLFNBQVUsU0FBUSxlQUFTO0lBK0p0QyxZQUNrQixPQUFvQixFQUNwQyxVQUE0QixFQUFFO1FBRTlCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUhDLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFOdEM7O1dBRUc7UUFDYSxVQUFLLEdBQXlCLEVBQUUsQ0FBQztRQVEvQyxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDO1FBQ3JELElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFFOUM7O1dBRUc7UUFDSCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUVEOztXQUVHO1FBQ0gsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsT0FBTyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFM0M7Ozs7b0ZBSTRFO1FBRTVFLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxP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fSBmcm9tIFwicHJvamVuL2xpYlwiO1xuaW1wb3J0IHsgTm9kZVByb2plY3QgfSBmcm9tIFwicHJvamVuL2xpYi9qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBUdXJib1JlcG9UYXNrIH0gZnJvbSBcIi4vdHVyYm8tcmVwby10YXNrXCI7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKlxuICogVHVyYm8gUmVwbyBDb25maWdcbiAqXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5leHBvcnQgY29uc3QgUk9PVF9UVVJCT19UQVNLX05BTUUgPSBcInR1cmJvOmJ1aWxkXCI7XG5leHBvcnQgY29uc3QgUk9PVF9DSV9UQVNLX05BTUUgPSBcImJ1aWxkOmFsbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFR1cmJvUmVwb09wdGlvbnMge1xuICAvKipcbiAgICogVmVyc2lvbiBvZiB0dXJib3JlcG8gdG8gdXNlLlxuICAgKlxuICAgKiBAZGVmYXVsdDogc3BlY2lmaWVkIGluIHZlcnNpb25zIGZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHR1cmJvVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogRXh0ZW5kIGZyb20gdGhlIHJvb3QgdHVyYm8uanNvbiB0byBjcmVhdGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgYSBwYWNrYWdlIHVzaW5nIFBhY2thZ2UgQ29uZmlndXJhdGlvbnMuXG4gICAqXG4gICAqIFRoZSBvbmx5IHZhbGlkIHZhbHVlIGZvciBleHRlbmRzIGlzIFtcIi8vXCJdIHRvIGluaGVyaXQgY29uZmlndXJhdGlvbiBmcm9tIHRoZSByb290IHR1cmJvLmpzb24uXG4gICAqIElmIGV4dGVuZHMgaXMgdXNlZCBpbiB0aGUgcm9vdCB0dXJiby5qc29uLCBpdCB3aWxsIGJlIGlnbm9yZWQuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2V4dGVuZHNcbiAgICovXG4gIHJlYWRvbmx5IGV4dGVuZHM/OiBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZ2xvYnMgdGhhdCB5b3Ugd2FudCB0byBpbmNsdWRlIGluIGFsbCB0YXNrIGhhc2hlcy4gSWYgYW55IGZpbGUgbWF0Y2hpbmcgdGhlc2UgZ2xvYnMgY2hhbmdlcywgYWxsIHRhc2tzIHdpbGwgbWlzcyBjYWNoZS4gR2xvYnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBsb2NhdGlvbiBvZiB0dXJiby5qc29uLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBhbGwgZmlsZXMgaW4gc291cmNlIGNvbnRyb2wgaW4gdGhlIFdvcmtzcGFjZSByb290IGFyZSBpbmNsdWRlZCBpbiB0aGUgZ2xvYmFsIGhhc2guXG4gICAqXG4gICAqIEdsb2JzIG11c3QgYmUgaW4gdGhlIHJlcG9zaXRvcnkncyBzb3VyY2UgY29udHJvbCByb290LiBHbG9icyBvdXRzaWRlIG9mIHRoZSByZXBvc2l0b3J5IGFyZW4ndCBzdXBwb3J0ZWQuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2dsb2JhbGRlcGVuZGVuY2llc1xuICAgKi9cbiAgcmVhZG9ubHkgZ2xvYmFsRGVwZW5kZW5jaWVzPzogQXJyYXk8c3RyaW5nPjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHlvdSB3YW50IHRvIGltcGFjdCB0aGUgaGFzaCBvZiBhbGwgdGFza3MuIEFueSBjaGFuZ2UgdG8gdGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpbGwgY2F1c2UgYWxsIHRhc2tzIHRvIG1pc3MgY2FjaGUuXG4gICAqXG4gICAqIEZvciBtb3JlIG9uIHdpbGRjYXJkIGFuZCBuZWdhdGlvbiBzeW50YXgsIHNlZSB0aGUgZW52IHNlY3Rpb24uXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2dsb2JhbGVudlxuICAgKi9cbiAgcmVhZG9ubHkgZ2xvYmFsRW52PzogQXJyYXk8c3RyaW5nPjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHlvdSB3YW50IHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRhc2tzLlxuICAgKiBVc2luZyB0aGlzIGtleSBvcHRzIGFsbCB0YXNrcyBpbnRvIFN0cmljdFxuICAgKiBFbnZpcm9ubWVudCBWYXJpYWJsZSBNb2RlLlxuICAgKlxuICAgKiBBZGRpdGlvbmFsbHksIFR1cmJvcmVwbyBoYXMgYSBidWlsdC1pbiBzZXQgb2YgZ2xvYmFsIHBhc3N0aHJvdWdoIHZhcmlhYmxlc1xuICAgKiBmb3IgY29tbW9uIGNhc2VzLCBsaWtlIG9wZXJhdGluZyBzeXN0ZW0gZW52aXJvbm1lbnQgdmFyaWFibGVzLiBUaGlzXG4gICAqIGluY2x1ZGVzIHZhcmlhYmxlcyBsaWtlIEhPTUUsIFBBVEgsIEFQUERBVEEsIFNIRUxMLCBQV0QsIGFuZCBtb3JlLiBUaGUgZnVsbFxuICAgKiBsaXN0IGNhbiBiZSBmb3VuZCBpbiB0aGUgc291cmNlIGNvZGUuXG4gICAqXG4gICAqIFBhc3N0aHJvdWdoIHZhbHVlcyBkbyBub3QgY29udHJpYnV0ZSB0byBoYXNoZXMgZm9yIGNhY2hpbmdcbiAgICpcbiAgICogSWYgeW91IHdhbnQgY2hhbmdlcyBpbiB0aGVzZSB2YXJpYWJsZXMgdG8gY2F1c2UgY2FjaGUgbWlzc2VzLCB5b3Ugd2lsbCBuZWVkXG4gICAqIHRvIGluY2x1ZGUgdGhlbSBpbiBlbnYgb3IgZ2xvYmFsRW52LlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNnbG9iYWxwYXNzdGhyb3VnaGVudlxuICAgKi9cbiAgcmVhZG9ubHkgZ2xvYmFsUGFzc1Rocm91Z2hFbnY/OiBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdDogXCJzdHJlYW1cIlxuICAgKlxuICAgKiBTZWxlY3QgYSB0ZXJtaW5hbCBVSSBmb3IgdGhlIHJlcG9zaXRvcnkuXG4gICAqXG4gICAqIFwidHVpXCIgYWxsb3dzIGZvciB2aWV3aW5nIGVhY2ggbG9nIGF0IG9uY2UgYW5kIGludGVyYWN0aW5nIHdpdGggdGhlIHRhc2suXG4gICAqIFwic3RyZWFtXCIgb3V0cHV0cyBsb2dzIGFzIHRoZXkgY29tZSBpbiBhbmQgaXMgbm90IGludGVyYWN0aXZlLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiN1aVxuICAgKi9cbiAgcmVhZG9ubHkgdWk/OiBcInR1aVwiIHwgXCJzdHJlYW1cIjtcblxuICAvKipcbiAgICogQGRlZmF1bHQ6IGZhbHNlXG4gICAqXG4gICAqIFR1cmJvcmVwbyB1c2VzIHlvdXIgcmVwb3NpdG9yeSdzIGxvY2tmaWxlIHRvIGRldGVybWluZSBjYWNoaW5nIGJlaGF2aW9yLFxuICAgKiBQYWNrYWdlIEdyYXBocywgYW5kIG1vcmUuIEJlY2F1c2Ugb2YgdGhpcywgd2UgdXNlIHRoZSBwYWNrYWdlTWFuYWdlciBmaWVsZFxuICAgKiB0byBoZWxwIHlvdSBzdGFiaWxpemUgeW91ciBUdXJib3JlcG8uXG4gICAqXG4gICAqIFRvIGhlbHAgd2l0aCBpbmNyZW1lbnRhbCBtaWdyYXRpb24gb3IgaW4gc2l0dWF0aW9ucyB3aGVyZSB5b3UgY2FuJ3QgdXNlXG4gICAqIHRoZSBwYWNrYWdlTWFuYWdlciBmaWVsZCwgeW91IG1heSB1c2VcbiAgICogLS1kYW5nZXJvdXNseS1kaXNhYmxlLXBhY2thZ2UtbWFuYWdlci1jaGVjayB0byBvcHQgb3V0IG9mIHRoaXMgY2hlY2sgYW5kXG4gICAqIGFzc3VtZSB0aGUgcmlza3Mgb2YgdW5zdGFibGUgbG9ja2ZpbGVzIHByb2R1Y2luZyB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLlxuICAgKiBXaGVuIGRpc2FibGVkLCBUdXJib3JlcG8gd2lsbCBhdHRlbXB0IGEgYmVzdC1lZmZvcnQgZGlzY292ZXJ5IG9mIHRoZVxuICAgKiBpbnRlbmRlZCBwYWNrYWdlIG1hbmFnZXIgbWVhbnQgZm9yIHRoZSByZXBvc2l0b3J5LlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNkYW5nZXJvdXNseWRpc2FibGVwYWNrYWdlbWFuYWdlcmNoZWNrXG4gICAqL1xuICByZWFkb25seSBkYW5nZXJvdXNseURpc2FibGVQYWNrYWdlTWFuYWdlckNoZWNrPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlZmF1bHQ6IFwiLnR1cmJvL2NhY2hlXCJcbiAgICpcbiAgICogU3BlY2lmeSB0aGUgZmlsZXN5c3RlbSBjYWNoZSBkaXJlY3RvcnkuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2NhY2hlZGlyXG4gICAqL1xuICByZWFkb25seSBjYWNoZURpcj86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQ6IHRydWVcbiAgICpcbiAgICogVHVyYm9yZXBvIHJ1bnMgYSBiYWNrZ3JvdW5kIHByb2Nlc3MgdG8gcHJlLWNhbGN1bGF0ZSBzb21lIGV4cGVuc2l2ZVxuICAgKiBvcGVyYXRpb25zLiBUaGlzIHN0YW5kYWxvbmUgcHJvY2VzcyAoZGFlbW9uKSBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbixcbiAgICogYW5kIG5vdCByZXF1aXJlZCBmb3IgcHJvcGVyIGZ1bmN0aW9uaW5nIG9mIHR1cmJvLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNkYWVtb25cbiAgICovXG4gIHJlYWRvbmx5IGRhZW1vbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0OiBcInN0cmljdFwiXG4gICAqXG4gICAqIFR1cmJvcmVwbydzIEVudmlyb25tZW50IE1vZGVzIGFsbG93IHlvdSB0byBjb250cm9sIHdoaWNoIGVudmlyb25tZW50XG4gICAqIHZhcmlhYmxlcyBhcmUgYXZhaWxhYmxlIHRvIGEgdGFzayBhdCBydW50aW1lOlxuICAgKlxuICAgKlwic3RyaWN0XCI6IEZpbHRlciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gb25seSB0aG9zZSB0aGF0IGFyZSBzcGVjaWZpZWRcbiAgICogaW4gdGhlIGVudiBhbmQgZ2xvYmFsRW52IGtleXMgaW4gdHVyYm8uanNvbi5cbiAgICpcbiAgICogXCJsb29zZVwiOiBBbGxvdyBhbGwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgcHJvY2VzcyB0byBiZSBhdmFpbGFibGUuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2Vudm1vZGVcbiAgICovXG4gIHJlYWRvbmx5IGVudk1vZGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBUdXJib1JlcG8gZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogVmVyc2lvbiBvZiB0dXJib3JlcG8gdG8gdXNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHR1cmJvVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFeHRlbmQgZnJvbSB0aGUgcm9vdCB0dXJiby5qc29uIHRvIGNyZWF0ZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciBhIHBhY2thZ2UgdXNpbmcgUGFja2FnZSBDb25maWd1cmF0aW9ucy5cbiAgICpcbiAgICogVGhlIG9ubHkgdmFsaWQgdmFsdWUgZm9yIGV4dGVuZHMgaXMgW1wiLy9cIl0gdG8gaW5oZXJpdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIHJvb3QgdHVyYm8uanNvbi5cbiAgICogSWYgZXh0ZW5kcyBpcyB1c2VkIGluIHRoZSByb290IHR1cmJvLmpzb24sIGl0IHdpbGwgYmUgaWdub3JlZC5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZXh0ZW5kc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGV4dGVuZHM6IEFycmF5PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBnbG9icyB0aGF0IHlvdSB3YW50IHRvIGluY2x1ZGUgaW4gYWxsIHRhc2sgaGFzaGVzLiBJZiBhbnkgZmlsZSBtYXRjaGluZyB0aGVzZSBnbG9icyBjaGFuZ2VzLCBhbGwgdGFza3Mgd2lsbCBtaXNzIGNhY2hlLiBHbG9icyBhcmUgcmVsYXRpdmUgdG8gdGhlIGxvY2F0aW9uIG9mIHR1cmJvLmpzb24uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGFsbCBmaWxlcyBpbiBzb3VyY2UgY29udHJvbCBpbiB0aGUgV29ya3NwYWNlIHJvb3QgYXJlIGluY2x1ZGVkIGluIHRoZSBnbG9iYWwgaGFzaC5cbiAgICpcbiAgICogR2xvYnMgbXVzdCBiZSBpbiB0aGUgcmVwb3NpdG9yeSdzIHNvdXJjZSBjb250cm9sIHJvb3QuIEdsb2JzIG91dHNpZGUgb2YgdGhlIHJlcG9zaXRvcnkgYXJlbid0IHN1cHBvcnRlZC5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZ2xvYmFsZGVwZW5kZW5jaWVzXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2xvYmFsRGVwZW5kZW5jaWVzOiBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgeW91IHdhbnQgdG8gaW1wYWN0IHRoZSBoYXNoIG9mIGFsbCB0YXNrcy4gQW55IGNoYW5nZSB0byB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2lsbCBjYXVzZSBhbGwgdGFza3MgdG8gbWlzcyBjYWNoZS5cbiAgICpcbiAgICogRm9yIG1vcmUgb24gd2lsZGNhcmQgYW5kIG5lZ2F0aW9uIHN5bnRheCwgc2VlIHRoZSBlbnYgc2VjdGlvbi5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZ2xvYmFsZW52XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2xvYmFsRW52OiBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgeW91IHdhbnQgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGFza3MuXG4gICAqIFVzaW5nIHRoaXMga2V5IG9wdHMgYWxsIHRhc2tzIGludG8gU3RyaWN0XG4gICAqIEVudmlyb25tZW50IFZhcmlhYmxlIE1vZGUuXG4gICAqXG4gICAqIEFkZGl0aW9uYWxseSwgVHVyYm9yZXBvIGhhcyBhIGJ1aWx0LWluIHNldCBvZiBnbG9iYWwgcGFzc3Rocm91Z2ggdmFyaWFibGVzXG4gICAqIGZvciBjb21tb24gY2FzZXMsIGxpa2Ugb3BlcmF0aW5nIHN5c3RlbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIFRoaXNcbiAgICogaW5jbHVkZXMgdmFyaWFibGVzIGxpa2UgSE9NRSwgUEFUSCwgQVBQREFUQSwgU0hFTEwsIFBXRCwgYW5kIG1vcmUuIFRoZSBmdWxsXG4gICAqIGxpc3QgY2FuIGJlIGZvdW5kIGluIHRoZSBzb3VyY2UgY29kZS5cbiAgICpcbiAgICogUGFzc3Rocm91Z2ggdmFsdWVzIGRvIG5vdCBjb250cmlidXRlIHRvIGhhc2hlcyBmb3IgY2FjaGluZ1xuICAgKlxuICAgKiBJZiB5b3Ugd2FudCBjaGFuZ2VzIGluIHRoZXNlIHZhcmlhYmxlcyB0byBjYXVzZSBjYWNoZSBtaXNzZXMsIHlvdSB3aWxsIG5lZWRcbiAgICogdG8gaW5jbHVkZSB0aGVtIGluIGVudiBvciBnbG9iYWxFbnYuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2dsb2JhbHBhc3N0aHJvdWdoZW52XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2xvYmFsUGFzc1Rocm91Z2hFbnY6IEFycmF5PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0OiBcInN0cmVhbVwiXG4gICAqXG4gICAqIFNlbGVjdCBhIHRlcm1pbmFsIFVJIGZvciB0aGUgcmVwb3NpdG9yeS5cbiAgICpcbiAgICogXCJ0dWlcIiBhbGxvd3MgZm9yIHZpZXdpbmcgZWFjaCBsb2cgYXQgb25jZSBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgdGFzay5cbiAgICogXCJzdHJlYW1cIiBvdXRwdXRzIGxvZ3MgYXMgdGhleSBjb21lIGluIGFuZCBpcyBub3QgaW50ZXJhY3RpdmUuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI3VpXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdWk6IFwidHVpXCIgfCBcInN0cmVhbVwiO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdDogZmFsc2VcbiAgICpcbiAgICogVHVyYm9yZXBvIHVzZXMgeW91ciByZXBvc2l0b3J5J3MgbG9ja2ZpbGUgdG8gZGV0ZXJtaW5lIGNhY2hpbmcgYmVoYXZpb3IsXG4gICAqIFBhY2thZ2UgR3JhcGhzLCBhbmQgbW9yZS4gQmVjYXVzZSBvZiB0aGlzLCB3ZSB1c2UgdGhlIHBhY2thZ2VNYW5hZ2VyIGZpZWxkXG4gICAqIHRvIGhlbHAgeW91IHN0YWJpbGl6ZSB5b3VyIFR1cmJvcmVwby5cbiAgICpcbiAgICogVG8gaGVscCB3aXRoIGluY3JlbWVudGFsIG1pZ3JhdGlvbiBvciBpbiBzaXR1YXRpb25zIHdoZXJlIHlvdSBjYW4ndCB1c2VcbiAgICogdGhlIHBhY2thZ2VNYW5hZ2VyIGZpZWxkLCB5b3UgbWF5IHVzZVxuICAgKiAtLWRhbmdlcm91c2x5LWRpc2FibGUtcGFja2FnZS1tYW5hZ2VyLWNoZWNrIHRvIG9wdCBvdXQgb2YgdGhpcyBjaGVjayBhbmRcbiAgICogYXNzdW1lIHRoZSByaXNrcyBvZiB1bnN0YWJsZSBsb2NrZmlsZXMgcHJvZHVjaW5nIHVucHJlZGljdGFibGUgYmVoYXZpb3IuXG4gICAqIFdoZW4gZGlzYWJsZWQsIFR1cmJvcmVwbyB3aWxsIGF0dGVtcHQgYSBiZXN0LWVmZm9ydCBkaXNjb3Zlcnkgb2YgdGhlXG4gICAqIGludGVuZGVkIHBhY2thZ2UgbWFuYWdlciBtZWFudCBmb3IgdGhlIHJlcG9zaXRvcnkuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2Rhbmdlcm91c2x5ZGlzYWJsZXBhY2thZ2VtYW5hZ2VyY2hlY2tcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkYW5nZXJvdXNseURpc2FibGVQYWNrYWdlTWFuYWdlckNoZWNrOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdDogXCIudHVyYm8vY2FjaGVcIlxuICAgKlxuICAgKiBTcGVjaWZ5IHRoZSBmaWxlc3lzdGVtIGNhY2hlIGRpcmVjdG9yeS5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jY2FjaGVkaXJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjYWNoZURpcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdDogdHJ1ZVxuICAgKlxuICAgKiBUdXJib3JlcG8gcnVucyBhIGJhY2tncm91bmQgcHJvY2VzcyB0byBwcmUtY2FsY3VsYXRlIHNvbWUgZXhwZW5zaXZlXG4gICAqIG9wZXJhdGlvbnMuIFRoaXMgc3RhbmRhbG9uZSBwcm9jZXNzIChkYWVtb24pIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLFxuICAgKiBhbmQgbm90IHJlcXVpcmVkIGZvciBwcm9wZXIgZnVuY3Rpb25pbmcgb2YgdHVyYm8uXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2RhZW1vblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRhZW1vbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlZmF1bHQ6IFwic3RyaWN0XCJcbiAgICpcbiAgICogVHVyYm9yZXBvJ3MgRW52aXJvbm1lbnQgTW9kZXMgYWxsb3cgeW91IHRvIGNvbnRyb2wgd2hpY2ggZW52aXJvbm1lbnRcbiAgICogdmFyaWFibGVzIGFyZSBhdmFpbGFibGUgdG8gYSB0YXNrIGF0IHJ1bnRpbWU6XG4gICAqXG4gICAqXCJzdHJpY3RcIjogRmlsdGVyIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBvbmx5IHRob3NlIHRoYXQgYXJlIHNwZWNpZmllZFxuICAgKiBpbiB0aGUgZW52IGFuZCBnbG9iYWxFbnYga2V5cyBpbiB0dXJiby5qc29uLlxuICAgKlxuICAgKiBcImxvb3NlXCI6IEFsbG93IGFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBwcm9jZXNzIHRvIGJlIGF2YWlsYWJsZS5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZW52bW9kZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVudk1vZGU6IHN0cmluZztcblxuICAvKipcbiAgICogaXMgdGhpcyB0aGUgcm9vdCBwcm9qZWN0P1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzUm9vdFByb2plY3Q6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE1haW4gdHVyYm86YnVpbGQgdGFza1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJ1aWxkVGFzazogVHVyYm9SZXBvVGFzaztcblxuICAvKipcbiAgICpcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcmVDb21waWxlVGFzaz86IFR1cmJvUmVwb1Rhc2s7XG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbXBpbGVUYXNrPzogVHVyYm9SZXBvVGFzaztcblxuICAvKipcbiAgICpcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwb3N0Q29tcGlsZVRhc2s/OiBUdXJib1JlcG9UYXNrO1xuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRlc3RUYXNrPzogVHVyYm9SZXBvVGFzaztcblxuICAvKipcbiAgICpcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwYWNrYWdlVGFzaz86IFR1cmJvUmVwb1Rhc2s7XG5cbiAgLyoqXG4gICAqIFN1Yi1UYXNrcyB0byBydW5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YXNrczogQXJyYXk8VHVyYm9SZXBvVGFzaz4gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgcHJvamVjdDogTm9kZVByb2plY3QsXG4gICAgb3B0aW9uczogVHVyYm9SZXBvT3B0aW9ucyA9IHt9LFxuICApIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIHRoaXMudHVyYm9WZXJzaW9uID0gb3B0aW9ucy50dXJib1ZlcnNpb24gPz8gXCJeMi4wLjBcIjtcbiAgICB0aGlzLmlzUm9vdFByb2plY3QgPSBwcm9qZWN0ID09PSBwcm9qZWN0LnJvb3Q7XG5cbiAgICAvKipcbiAgICAgKiBBZGQgdHVyYm9yZXBvIHBhY2thZ2UgdG8gcm9vdCBwcm9qZWN0LlxuICAgICAqL1xuICAgIGlmICh0aGlzLmlzUm9vdFByb2plY3QpIHtcbiAgICAgIHByb2plY3QuYWRkRGV2RGVwcyhgdHVyYm9AJHt0aGlzLnR1cmJvVmVyc2lvbn1gKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJZ25vcmUgdGhlIHdvcmtpbmcgY2FjaGUgZm9yIHR1cmJvLlxuICAgICAqL1xuICAgIHByb2plY3QuZ2l0aWdub3JlLmFkZFBhdHRlcm5zKFwiLy50dXJib1wiKTtcbiAgICBwcm9qZWN0Lm5wbWlnbm9yZT8uYWRkUGF0dGVybnMoXCIvLnR1cmJvL1wiKTtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIFNldCBzb21lIGRlZmF1bHQgb3B0aW9uc1xuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgdGhpcy5leHRlbmRzID0gb3B0aW9ucy5leHRlbmRzID8/ICh0aGlzLmlzUm9vdFByb2plY3QgPyBbXSA6IFtcIi8vXCJdKTtcbiAgICB0aGlzLmdsb2JhbERlcGVuZGVuY2llcyA9IG9wdGlvbnMuZ2xvYmFsRGVwZW5kZW5jaWVzID8/IFtdO1xuICAgIHRoaXMuZ2xvYmFsRW52ID0gb3B0aW9ucy5nbG9iYWxFbnYgPz8gW107XG4gICAgdGhpcy5nbG9iYWxQYXNzVGhyb3VnaEVudiA9IG9wdGlvbnMuZ2xvYmFsUGFzc1Rocm91Z2hFbnYgPz8gW107XG4gICAgdGhpcy51aSA9IG9wdGlvbnMudWkgPz8gXCJzdHJlYW1cIjtcbiAgICB0aGlzLmRhbmdlcm91c2x5RGlzYWJsZVBhY2thZ2VNYW5hZ2VyQ2hlY2sgPVxuICAgICAgb3B0aW9ucy5kYW5nZXJvdXNseURpc2FibGVQYWNrYWdlTWFuYWdlckNoZWNrID8/IGZhbHNlO1xuICAgIHRoaXMuY2FjaGVEaXIgPSBvcHRpb25zLmNhY2hlRGlyID8/IFwiLnR1cmJvL2NhY2hlXCI7XG4gICAgdGhpcy5kYWVtb24gPSBvcHRpb25zLmRhZW1vbiA/PyB0cnVlO1xuICAgIHRoaXMuZW52TW9kZSA9IG9wdGlvbnMuZW52TW9kZSA/PyBcInN0cmljdFwiO1xuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqXG4gICAgICogVHVyYm8gQnVpbGQgVGFza1xuICAgICAqXG4gICAgICogQWxsIHR1cmJvIGNvbmZpZ3MgY29udGFpbiBhIHR1cmJvIGJ1aWxkIHRhc2suXG4gICAgICpcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHVyYm8gZW50cnkgcG9pbnQgZGVmaW5pdGlvbiBmb3IgdGhlIHR1cmJvOmJ1aWxkIHRhc2suIFRoaXMgZXhpc3RzXG4gICAgICogaW4gZWFjaCBwcm9qZWN0IGFuZCBpcyB3cml0dGVuIHRvdCBoZSB0dXJiby5qc29uIGZpbGUuIFRoaXMgdGFzayBpcyBub3RcbiAgICAgKiBhIHByb2plbiB0YXNrIG9yIGEgTm9kZSB0YXNrLlxuICAgICAqL1xuICAgIHRoaXMuYnVpbGRUYXNrID0gbmV3IFR1cmJvUmVwb1Rhc2sodGhpcy5wcm9qZWN0LCB7XG4gICAgICBuYW1lOiBST09UX1RVUkJPX1RBU0tfTkFNRSxcbiAgICAgIGRlcGVuZHNPbjogdGhpcy5pc1Jvb3RQcm9qZWN0ID8gW2BeJHtST09UX1RVUkJPX1RBU0tfTkFNRX1gXSA6IFtdLFxuICAgIH0pO1xuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqXG4gICAgICogVHVyYm8gQnVpbGQgQWxsIFRhc2tcbiAgICAgKlxuICAgICAqIFRoZSBQcm9qZW4gZW50cnkgcG9pbnQuIFRoaXMgb25seSBleGlzdHMgaW4gdGhlIHJvb3QgYW5kIGlzIGEgcHJvamVuXG4gICAgICogdGFzayB0aGF0IGNhbiBiZSBydW4gdXNpbmcgcG5wbS5cbiAgICAgKlxuICAgICAqIC0gVHVybnMgb2ZmIHRlbGVtZXRyeVxuICAgICAqIC0gUnVucyByb290IHR1cmJvIHRhc2sgdG8gYnVpbGQgYWxsIHN1Yi1wcm9qZWN0cy5cbiAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIGlmICh0aGlzLmlzUm9vdFByb2plY3QpIHtcbiAgICAgIC8qKlxuICAgICAgICogQ3JlYXRlIGFuZCBjb25maWd1cmUgdGhlIGJ1aWxkIGFsbCB0YXNrLlxuICAgICAgICovXG4gICAgICBjb25zdCBidWlsZEFsbCA9IHRoaXMucHJvamVjdC50YXNrcy5hZGRUYXNrKFJPT1RfQ0lfVEFTS19OQU1FLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgIFwiUm9vdCBidWlsZCBmb2xsb3dlZCBieSBzdWItcHJvamVjdCBidWlsZHMuIE1pbWljcyB0aGUgQ0kgYnVpbGQgcHJvY2VzcyBpbiBvbmUgc3RlcC5cIixcbiAgICAgIH0pO1xuICAgICAgYnVpbGRBbGwuZXhlYyhcInR1cmJvIHRlbGVtZXRyeSBkaXNhYmxlXCIpO1xuICAgICAgYnVpbGRBbGwuZXhlYyhcbiAgICAgICAgYHR1cmJvICR7Uk9PVF9UVVJCT19UQVNLX05BTUV9IC0tc3VtbWFyaXplIC0tY29uY3VycmVuY3k9MTBgLFxuICAgICAgKTtcblxuICAgICAgLyoqXG4gICAgICAgKiBBdHRhY2ggYnVpbGQgYWxsIHR1cmJvIHJ1bm5lciB0byB0aGUgYnVpbGQgd29ya2Zsb3cgYXQgZ2l0aHViLlxuICAgICAgICovXG4gICAgICBwcm9qZWN0LmJ1aWxkV29ya2Zsb3c/LmFkZFBvc3RCdWlsZFN0ZXBzKHtcbiAgICAgICAgbmFtZTogXCJCdWlsZCBTdWIgUHJvamVjdHNcIixcbiAgICAgICAgcnVuOiBgbnB4IHByb2plbiAke1JPT1RfQ0lfVEFTS19OQU1FfWAsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTVUItUFJPSkVDVFxuICAgICAqXG4gICAgICogQ3JlYXRlcyB0YXNrcyBmb3IgdGhlIHR5cGljYWwgbGlmZWN5Y2xlIGZvciBhbGwgcHJvamVjdCBwcm9qZWN0cy5cbiAgICAgKi9cbiAgICBpZiAoIXRoaXMuaXNSb290UHJvamVjdCkge1xuICAgICAgdGhpcy5wcmVDb21waWxlVGFzayA9IG5ldyBUdXJib1JlcG9UYXNrKHByb2plY3QsIHtcbiAgICAgICAgbmFtZTogXCJwcmUtY29tcGlsZVwiLFxuICAgICAgICBpbnB1dHM6IFtcInNyYy8qKi8qXCIsIFwiKi5qc29uXCJdLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmNvbXBpbGVUYXNrID0gbmV3IFR1cmJvUmVwb1Rhc2socHJvamVjdCwgeyBuYW1lOiBcImNvbXBpbGVcIiB9KTtcbiAgICAgIHRoaXMucG9zdENvbXBpbGVUYXNrID0gbmV3IFR1cmJvUmVwb1Rhc2socHJvamVjdCwge1xuICAgICAgICBuYW1lOiBcInBvc3QtY29tcGlsZVwiLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnRlc3RUYXNrID0gbmV3IFR1cmJvUmVwb1Rhc2socHJvamVjdCwgeyBuYW1lOiBcInRlc3RcIiB9KTtcbiAgICAgIHRoaXMucGFja2FnZVRhc2sgPSBuZXcgVHVyYm9SZXBvVGFzayhwcm9qZWN0LCB7XG4gICAgICAgIG5hbWU6IFwicGFja2FnZVwiLFxuICAgICAgICBpbnB1dHM6IFtcIi5ucG1pZ25vcmVcIl0sXG4gICAgICB9KTtcbiAgICAgIHRoaXMudGFza3MucHVzaChcbiAgICAgICAgdGhpcy5wcmVDb21waWxlVGFzayxcbiAgICAgICAgdGhpcy5jb21waWxlVGFzayxcbiAgICAgICAgdGhpcy5wb3N0Q29tcGlsZVRhc2ssXG4gICAgICAgIHRoaXMudGVzdFRhc2ssXG4gICAgICAgIHRoaXMucGFja2FnZVRhc2ssXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByZVN5bnRoZXNpemUoKTogdm9pZCB7XG4gICAgLyoqXG4gICAgICogQWRkIGFueSBsb2NhbCB3b3Jrc3BhY2Ugc3BlY2lmaWMgZGVwcyB0byBkZXBlbmRzT24gc28gdGhhdCB3ZSBrbm93XG4gICAgICogY29tcGlsZSBoYXMgZmluaXNoZWQgYmVmb3JlIGF0dGVtcHRpbmcgdG8gdXNlIGFueSBkaXN0cmlidXRpb24gYXJ0aWZhY3RzLlxuICAgICAqXG4gICAgICogRG8gdGhpcyBpbiBwcmVzeW50aCBzbyB0aGF0IHdlIGNhbiBiZSBzdXJlIGFsbCBwcm9qZWN0IGRlcGVuZGVuY2llcyBoYXZlXG4gICAgICogYmVlbiBkZWZpbmVkIGZpcnN0LlxuICAgICAqL1xuICAgIGxldCBuZXh0RGVwZW5kc09uID0gdGhpcy5wcm9qZWN0LmRlcHMuYWxsXG4gICAgICAuZmlsdGVyKChkKSA9PiBkLnZlcnNpb24gPT09IFwid29ya3NwYWNlOipcIilcbiAgICAgIC5tYXAoKGQpID0+IFtkLm5hbWUsIFJPT1RfVFVSQk9fVEFTS19OQU1FXS5qb2luKFwiI1wiKSk7XG5cbiAgICAvKipcbiAgICAgKiBMb29wIG92ZXIgYWxsIHByb2plbiB0YXNrcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyB0dXJibyB0YXNrXG4gICAgICogZGVmaW5pdGlvbnMuIENoYWluIHRoZW0gdG9nZXRoZXIgdXNpbmcgZGVwZW5kc09uLCBhbG9uZyB3aXRoIGFueSBvdXRzaWRlXG4gICAgICogcGFja2FnZSBkZXBlbmRlbmNpZXMuXG4gICAgICovXG4gICAgaWYgKCF0aGlzLmlzUm9vdFByb2plY3QpIHtcbiAgICAgIChcbiAgICAgICAgW1xuICAgICAgICAgIFt0aGlzLnByb2plY3QucHJlQ29tcGlsZVRhc2ssIHRoaXMucHJlQ29tcGlsZVRhc2tdLFxuICAgICAgICAgIFt0aGlzLnByb2plY3QuY29tcGlsZVRhc2ssIHRoaXMuY29tcGlsZVRhc2tdLFxuICAgICAgICAgIFt0aGlzLnByb2plY3QucG9zdENvbXBpbGVUYXNrLCB0aGlzLnBvc3RDb21waWxlVGFza10sXG4gICAgICAgICAgW3RoaXMucHJvamVjdC50ZXN0VGFzaywgdGhpcy50ZXN0VGFza10sXG4gICAgICAgICAgW3RoaXMucHJvamVjdC5wYWNrYWdlVGFzaywgdGhpcy5wYWNrYWdlVGFza10sXG4gICAgICAgIF0gYXMgQXJyYXk8W1Rhc2ssIFR1cmJvUmVwb1Rhc2tdPlxuICAgICAgKS5mb3JFYWNoKChbcGpUYXNrLCB0dXJib1Rhc2tdKSA9PiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBzdGVwcyBleGlzdCBjaGFpbiB1c2luZyBkZXBlbmRzT25cbiAgICAgICAgICovXG4gICAgICAgIGlmIChwalRhc2sgJiYgdHVyYm9UYXNrICYmIHBqVGFzay5zdGVwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKG5leHREZXBlbmRzT24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdHVyYm9UYXNrLmRlcGVuZHNPbi5wdXNoKC4uLm5leHREZXBlbmRzT24pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBuZXh0RGVwZW5kc09uID0gW3R1cmJvVGFzay5uYW1lXTtcblxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIE90aGVyd2lzZSwgaWYgYSB0YXNrIGRvZXNuJ3QgZG8gYW55dGhpbmcsIGRlYWN0aXZhdGUgaXQuXG4gICAgICAgICAgICovXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHVyYm9UYXNrLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvKipcbiAgICAgICAqIE1haW4gYnVpbGQgZW50cnkgcG9pbnQgZGVwZW5kcyBvbiB3aGF0ZXZlciB3YXMgbGFzdC5cbiAgICAgICAqL1xuICAgICAgdGhpcy5idWlsZFRhc2suZGVwZW5kc09uLnB1c2goLi4ubmV4dERlcGVuZHNPbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgZm9yIHRoZSB0dXJibyBjb25maWcgZmlsZS5cbiAgICAgKi9cbiAgICBjb25zdCBmaWxlTmFtZTogc3RyaW5nID0gXCJ0dXJiby5qc29uXCI7XG5cbiAgICAvKipcbiAgICAgKiBFbnN1cmUgdGhhdCB0dXJibyBjb25maWcgZG9lc24ndCBlbmQgdXAgaW4gYW55IHBhY2thZ2UgZGlzdHJpYnV0aW9ucy5cbiAgICAgKi9cbiAgICB0aGlzLnByb2plY3QuYWRkUGFja2FnZUlnbm9yZShmaWxlTmFtZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29udGVudCBvZiB0aGlzIFlBTUwgZmlsZSB3aWxsIGJlIHJlc29sdmVkIGF0IHN5bnRoIHRpbWUuIEJ5IHRoZW4sXG4gICAgICogYW55IHN1Yi1wcm9qZWN0cyB3aWxsIGJlIGRlZmluZWQgYW5kIHRoaXMgd2lsbCBiZSBhIGNvbXBsZXRlIGxpc3QuXG4gICAgICovXG4gICAgbmV3IEpzb25GaWxlKHRoaXMucHJvamVjdCwgZmlsZU5hbWUsIHtcbiAgICAgIG9iajoge1xuICAgICAgICBleHRlbmRzOiB0aGlzLmV4dGVuZHMubGVuZ3RoID8gdGhpcy5leHRlbmRzIDogdW5kZWZpbmVkLFxuICAgICAgICBnbG9iYWxEZXBlbmRlbmNpZXM6XG4gICAgICAgICAgdGhpcy5pc1Jvb3RQcm9qZWN0ICYmIHRoaXMuZ2xvYmFsRGVwZW5kZW5jaWVzLmxlbmd0aFxuICAgICAgICAgICAgPyB0aGlzLmdsb2JhbERlcGVuZGVuY2llc1xuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGdsb2JhbEVudjpcbiAgICAgICAgICB0aGlzLmlzUm9vdFByb2plY3QgJiYgdGhpcy5nbG9iYWxFbnYubGVuZ3RoXG4gICAgICAgICAgICA/IHRoaXMuZ2xvYmFsRW52XG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgZ2xvYmFsUGFzc1Rocm91Z2hFbnY6XG4gICAgICAgICAgdGhpcy5pc1Jvb3RQcm9qZWN0ICYmIHRoaXMuZ2xvYmFsUGFzc1Rocm91Z2hFbnYubGVuZ3RoXG4gICAgICAgICAgICA/IHRoaXMuZ2xvYmFsUGFzc1Rocm91Z2hFbnZcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICB1aTogdGhpcy5pc1Jvb3RQcm9qZWN0ID8gdGhpcy51aSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZGFuZ2Vyb3VzbHlEaXNhYmxlUGFja2FnZU1hbmFnZXJDaGVjazogdGhpcy5pc1Jvb3RQcm9qZWN0XG4gICAgICAgICAgPyB0aGlzLmRhbmdlcm91c2x5RGlzYWJsZVBhY2thZ2VNYW5hZ2VyQ2hlY2tcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgY2FjaGVEaXI6IHRoaXMuaXNSb290UHJvamVjdCA/IHRoaXMuY2FjaGVEaXIgOiB1bmRlZmluZWQsXG4gICAgICAgIGRhZW1vbjogdGhpcy5pc1Jvb3RQcm9qZWN0ID8gdGhpcy5kYWVtb24gOiB1bmRlZmluZWQsXG4gICAgICAgIGVudk1vZGU6IHRoaXMuaXNSb290UHJvamVjdCA/IHRoaXMuZW52TW9kZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFsbCB0YXNrc1xuICAgICAgICAgKi9cbiAgICAgICAgdGFza3M6IHRoaXMudGFza3NcbiAgICAgICAgICAuZmlsdGVyKCh0YXNrKSA9PiB0YXNrLmlzQWN0aXZlKVxuICAgICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCB0YXNrKSA9PiB7XG4gICAgICAgICAgICAgIGFjY1t0YXNrLm5hbWVdID0ge1xuICAgICAgICAgICAgICAgIC4uLnRhc2sudGFza0NvbmZpZygpLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW3RoaXMuYnVpbGRUYXNrLm5hbWVdOiB7IC4uLnRoaXMuYnVpbGRUYXNrLnRhc2tDb25maWcoKSB9LFxuICAgICAgICAgICAgfSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgICAgICAgICksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgc3VwZXIucHJlU3ludGhlc2l6ZSgpO1xuICB9XG59XG4iXX0=
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVyYm8tcmVwby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90dXJiby90dXJiby1yZXBvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG9DQUFnRTtBQUVoRSx1REFBa0Q7QUFFbEQ7Ozs7Z0ZBSWdGO0FBRW5FLFFBQUEsb0JBQW9CLEdBQUcsYUFBYSxDQUFDO0FBQ3JDLFFBQUEsaUJBQWlCLEdBQUcsV0FBVyxDQUFDO0FBNkg3QyxNQUFhLFNBQVUsU0FBUSxlQUFTO0lBQ3RDOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFnQjtRQUMvQixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQVksRUFBa0IsRUFBRSxDQUFDLENBQUMsWUFBWSxTQUFTLENBQUM7UUFDM0UsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBZ0tELFlBQ2tCLE9BQW9CLEVBQ3BDLFVBQTRCLEVBQUU7UUFFOUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBSEMsWUFBTyxHQUFQLE9BQU8sQ0FBYTtRQU50Qzs7V0FFRztRQUNhLFVBQUssR0FBeUIsRUFBRSxDQUFDO1FBUS9DLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksSUFBSSxRQUFRLENBQUM7UUFDckQsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQztRQUU5Qzs7V0FFRztRQUNILElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBRUQ7O1dBRUc7UUFDSCxPQUFPLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QyxPQUFPLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMs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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSnNvbkZpbGUsIFByb2plY3QsIFRhc2sgfSBmcm9tIFwicHJvamVuL2xpYlwiO1xuaW1wb3J0IHsgTm9kZVByb2plY3QgfSBmcm9tIFwicHJvamVuL2xpYi9qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBUdXJib1JlcG9UYXNrIH0gZnJvbSBcIi4vdHVyYm8tcmVwby10YXNrXCI7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKlxuICogVHVyYm8gUmVwbyBDb25maWdcbiAqXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5leHBvcnQgY29uc3QgUk9PVF9UVVJCT19UQVNLX05BTUUgPSBcInR1cmJvOmJ1aWxkXCI7XG5leHBvcnQgY29uc3QgUk9PVF9DSV9UQVNLX05BTUUgPSBcImJ1aWxkOmFsbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFR1cmJvUmVwb09wdGlvbnMge1xuICAvKipcbiAgICogVmVyc2lvbiBvZiB0dXJib3JlcG8gdG8gdXNlLlxuICAgKlxuICAgKiBAZGVmYXVsdDogc3BlY2lmaWVkIGluIHZlcnNpb25zIGZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHR1cmJvVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogRXh0ZW5kIGZyb20gdGhlIHJvb3QgdHVyYm8uanNvbiB0byBjcmVhdGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgYSBwYWNrYWdlIHVzaW5nIFBhY2thZ2UgQ29uZmlndXJhdGlvbnMuXG4gICAqXG4gICAqIFRoZSBvbmx5IHZhbGlkIHZhbHVlIGZvciBleHRlbmRzIGlzIFtcIi8vXCJdIHRvIGluaGVyaXQgY29uZmlndXJhdGlvbiBmcm9tIHRoZSByb290IHR1cmJvLmpzb24uXG4gICAqIElmIGV4dGVuZHMgaXMgdXNlZCBpbiB0aGUgcm9vdCB0dXJiby5qc29uLCBpdCB3aWxsIGJlIGlnbm9yZWQuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2V4dGVuZHNcbiAgICovXG4gIHJlYWRvbmx5IGV4dGVuZHM/OiBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZ2xvYnMgdGhhdCB5b3Ugd2FudCB0byBpbmNsdWRlIGluIGFsbCB0YXNrIGhhc2hlcy4gSWYgYW55IGZpbGUgbWF0Y2hpbmcgdGhlc2UgZ2xvYnMgY2hhbmdlcywgYWxsIHRhc2tzIHdpbGwgbWlzcyBjYWNoZS4gR2xvYnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBsb2NhdGlvbiBvZiB0dXJiby5qc29uLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBhbGwgZmlsZXMgaW4gc291cmNlIGNvbnRyb2wgaW4gdGhlIFdvcmtzcGFjZSByb290IGFyZSBpbmNsdWRlZCBpbiB0aGUgZ2xvYmFsIGhhc2guXG4gICAqXG4gICAqIEdsb2JzIG11c3QgYmUgaW4gdGhlIHJlcG9zaXRvcnkncyBzb3VyY2UgY29udHJvbCByb290LiBHbG9icyBvdXRzaWRlIG9mIHRoZSByZXBvc2l0b3J5IGFyZW4ndCBzdXBwb3J0ZWQuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2dsb2JhbGRlcGVuZGVuY2llc1xuICAgKi9cbiAgcmVhZG9ubHkgZ2xvYmFsRGVwZW5kZW5jaWVzPzogQXJyYXk8c3RyaW5nPjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHlvdSB3YW50IHRvIGltcGFjdCB0aGUgaGFzaCBvZiBhbGwgdGFza3MuIEFueSBjaGFuZ2UgdG8gdGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpbGwgY2F1c2UgYWxsIHRhc2tzIHRvIG1pc3MgY2FjaGUuXG4gICAqXG4gICAqIEZvciBtb3JlIG9uIHdpbGRjYXJkIGFuZCBuZWdhdGlvbiBzeW50YXgsIHNlZSB0aGUgZW52IHNlY3Rpb24uXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2dsb2JhbGVudlxuICAgKi9cbiAgcmVhZG9ubHkgZ2xvYmFsRW52PzogQXJyYXk8c3RyaW5nPjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHlvdSB3YW50IHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRhc2tzLlxuICAgKiBVc2luZyB0aGlzIGtleSBvcHRzIGFsbCB0YXNrcyBpbnRvIFN0cmljdFxuICAgKiBFbnZpcm9ubWVudCBWYXJpYWJsZSBNb2RlLlxuICAgKlxuICAgKiBBZGRpdGlvbmFsbHksIFR1cmJvcmVwbyBoYXMgYSBidWlsdC1pbiBzZXQgb2YgZ2xvYmFsIHBhc3N0aHJvdWdoIHZhcmlhYmxlc1xuICAgKiBmb3IgY29tbW9uIGNhc2VzLCBsaWtlIG9wZXJhdGluZyBzeXN0ZW0gZW52aXJvbm1lbnQgdmFyaWFibGVzLiBUaGlzXG4gICAqIGluY2x1ZGVzIHZhcmlhYmxlcyBsaWtlIEhPTUUsIFBBVEgsIEFQUERBVEEsIFNIRUxMLCBQV0QsIGFuZCBtb3JlLiBUaGUgZnVsbFxuICAgKiBsaXN0IGNhbiBiZSBmb3VuZCBpbiB0aGUgc291cmNlIGNvZGUuXG4gICAqXG4gICAqIFBhc3N0aHJvdWdoIHZhbHVlcyBkbyBub3QgY29udHJpYnV0ZSB0byBoYXNoZXMgZm9yIGNhY2hpbmdcbiAgICpcbiAgICogSWYgeW91IHdhbnQgY2hhbmdlcyBpbiB0aGVzZSB2YXJpYWJsZXMgdG8gY2F1c2UgY2FjaGUgbWlzc2VzLCB5b3Ugd2lsbCBuZWVkXG4gICAqIHRvIGluY2x1ZGUgdGhlbSBpbiBlbnYgb3IgZ2xvYmFsRW52LlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNnbG9iYWxwYXNzdGhyb3VnaGVudlxuICAgKi9cbiAgcmVhZG9ubHkgZ2xvYmFsUGFzc1Rocm91Z2hFbnY/OiBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdDogXCJzdHJlYW1cIlxuICAgKlxuICAgKiBTZWxlY3QgYSB0ZXJtaW5hbCBVSSBmb3IgdGhlIHJlcG9zaXRvcnkuXG4gICAqXG4gICAqIFwidHVpXCIgYWxsb3dzIGZvciB2aWV3aW5nIGVhY2ggbG9nIGF0IG9uY2UgYW5kIGludGVyYWN0aW5nIHdpdGggdGhlIHRhc2suXG4gICAqIFwic3RyZWFtXCIgb3V0cHV0cyBsb2dzIGFzIHRoZXkgY29tZSBpbiBhbmQgaXMgbm90IGludGVyYWN0aXZlLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiN1aVxuICAgKi9cbiAgcmVhZG9ubHkgdWk/OiBcInR1aVwiIHwgXCJzdHJlYW1cIjtcblxuICAvKipcbiAgICogQGRlZmF1bHQ6IGZhbHNlXG4gICAqXG4gICAqIFR1cmJvcmVwbyB1c2VzIHlvdXIgcmVwb3NpdG9yeSdzIGxvY2tmaWxlIHRvIGRldGVybWluZSBjYWNoaW5nIGJlaGF2aW9yLFxuICAgKiBQYWNrYWdlIEdyYXBocywgYW5kIG1vcmUuIEJlY2F1c2Ugb2YgdGhpcywgd2UgdXNlIHRoZSBwYWNrYWdlTWFuYWdlciBmaWVsZFxuICAgKiB0byBoZWxwIHlvdSBzdGFiaWxpemUgeW91ciBUdXJib3JlcG8uXG4gICAqXG4gICAqIFRvIGhlbHAgd2l0aCBpbmNyZW1lbnRhbCBtaWdyYXRpb24gb3IgaW4gc2l0dWF0aW9ucyB3aGVyZSB5b3UgY2FuJ3QgdXNlXG4gICAqIHRoZSBwYWNrYWdlTWFuYWdlciBmaWVsZCwgeW91IG1heSB1c2VcbiAgICogLS1kYW5nZXJvdXNseS1kaXNhYmxlLXBhY2thZ2UtbWFuYWdlci1jaGVjayB0byBvcHQgb3V0IG9mIHRoaXMgY2hlY2sgYW5kXG4gICAqIGFzc3VtZSB0aGUgcmlza3Mgb2YgdW5zdGFibGUgbG9ja2ZpbGVzIHByb2R1Y2luZyB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLlxuICAgKiBXaGVuIGRpc2FibGVkLCBUdXJib3JlcG8gd2lsbCBhdHRlbXB0IGEgYmVzdC1lZmZvcnQgZGlzY292ZXJ5IG9mIHRoZVxuICAgKiBpbnRlbmRlZCBwYWNrYWdlIG1hbmFnZXIgbWVhbnQgZm9yIHRoZSByZXBvc2l0b3J5LlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNkYW5nZXJvdXNseWRpc2FibGVwYWNrYWdlbWFuYWdlcmNoZWNrXG4gICAqL1xuICByZWFkb25seSBkYW5nZXJvdXNseURpc2FibGVQYWNrYWdlTWFuYWdlckNoZWNrPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlZmF1bHQ6IFwiLnR1cmJvL2NhY2hlXCJcbiAgICpcbiAgICogU3BlY2lmeSB0aGUgZmlsZXN5c3RlbSBjYWNoZSBkaXJlY3RvcnkuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2NhY2hlZGlyXG4gICAqL1xuICByZWFkb25seSBjYWNoZURpcj86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQ6IHRydWVcbiAgICpcbiAgICogVHVyYm9yZXBvIHJ1bnMgYSBiYWNrZ3JvdW5kIHByb2Nlc3MgdG8gcHJlLWNhbGN1bGF0ZSBzb21lIGV4cGVuc2l2ZVxuICAgKiBvcGVyYXRpb25zLiBUaGlzIHN0YW5kYWxvbmUgcHJvY2VzcyAoZGFlbW9uKSBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbixcbiAgICogYW5kIG5vdCByZXF1aXJlZCBmb3IgcHJvcGVyIGZ1bmN0aW9uaW5nIG9mIHR1cmJvLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNkYWVtb25cbiAgICovXG4gIHJlYWRvbmx5IGRhZW1vbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0OiBcInN0cmljdFwiXG4gICAqXG4gICAqIFR1cmJvcmVwbydzIEVudmlyb25tZW50IE1vZGVzIGFsbG93IHlvdSB0byBjb250cm9sIHdoaWNoIGVudmlyb25tZW50XG4gICAqIHZhcmlhYmxlcyBhcmUgYXZhaWxhYmxlIHRvIGEgdGFzayBhdCBydW50aW1lOlxuICAgKlxuICAgKlwic3RyaWN0XCI6IEZpbHRlciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gb25seSB0aG9zZSB0aGF0IGFyZSBzcGVjaWZpZWRcbiAgICogaW4gdGhlIGVudiBhbmQgZ2xvYmFsRW52IGtleXMgaW4gdHVyYm8uanNvbi5cbiAgICpcbiAgICogXCJsb29zZVwiOiBBbGxvdyBhbGwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgcHJvY2VzcyB0byBiZSBhdmFpbGFibGUuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2Vudm1vZGVcbiAgICovXG4gIHJlYWRvbmx5IGVudk1vZGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBUdXJib1JlcG8gZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogU3RhdGljIG1ldGhvZCB0byBkaXNjb3ZlcnQgdHVyYm8gaW4gYSBwcm9qZWN0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZihwcm9qZWN0OiBQcm9qZWN0KTogQXJyYXk8VHVyYm9SZXBvPiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaXNEZWZpbmVkID0gKGM6IENvbXBvbmVudCk6IGMgaXMgVHVyYm9SZXBvID0+IGMgaW5zdGFuY2VvZiBUdXJib1JlcG87XG4gICAgcmV0dXJuIHByb2plY3QuY29tcG9uZW50cy5maWx0ZXIoaXNEZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJzaW9uIG9mIHR1cmJvcmVwbyB0byB1c2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdHVyYm9WZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4dGVuZCBmcm9tIHRoZSByb290IHR1cmJvLmpzb24gdG8gY3JlYXRlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIGEgcGFja2FnZSB1c2luZyBQYWNrYWdlIENvbmZpZ3VyYXRpb25zLlxuICAgKlxuICAgKiBUaGUgb25seSB2YWxpZCB2YWx1ZSBmb3IgZXh0ZW5kcyBpcyBbXCIvL1wiXSB0byBpbmhlcml0IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgcm9vdCB0dXJiby5qc29uLlxuICAgKiBJZiBleHRlbmRzIGlzIHVzZWQgaW4gdGhlIHJvb3QgdHVyYm8uanNvbiwgaXQgd2lsbCBiZSBpZ25vcmVkLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNleHRlbmRzXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXh0ZW5kczogQXJyYXk8c3RyaW5nPjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGdsb2JzIHRoYXQgeW91IHdhbnQgdG8gaW5jbHVkZSBpbiBhbGwgdGFzayBoYXNoZXMuIElmIGFueSBmaWxlIG1hdGNoaW5nIHRoZXNlIGdsb2JzIGNoYW5nZXMsIGFsbCB0YXNrcyB3aWxsIG1pc3MgY2FjaGUuIEdsb2JzIGFyZSByZWxhdGl2ZSB0byB0aGUgbG9jYXRpb24gb2YgdHVyYm8uanNvbi5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgYWxsIGZpbGVzIGluIHNvdXJjZSBjb250cm9sIGluIHRoZSBXb3Jrc3BhY2Ugcm9vdCBhcmUgaW5jbHVkZWQgaW4gdGhlIGdsb2JhbCBoYXNoLlxuICAgKlxuICAgKiBHbG9icyBtdXN0IGJlIGluIHRoZSByZXBvc2l0b3J5J3Mgc291cmNlIGNvbnRyb2wgcm9vdC4gR2xvYnMgb3V0c2lkZSBvZiB0aGUgcmVwb3NpdG9yeSBhcmVuJ3Qgc3VwcG9ydGVkLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNnbG9iYWxkZXBlbmRlbmNpZXNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBnbG9iYWxEZXBlbmRlbmNpZXM6IEFycmF5PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB5b3Ugd2FudCB0byBpbXBhY3QgdGhlIGhhc2ggb2YgYWxsIHRhc2tzLiBBbnkgY2hhbmdlIHRvIHRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aWxsIGNhdXNlIGFsbCB0YXNrcyB0byBtaXNzIGNhY2hlLlxuICAgKlxuICAgKiBGb3IgbW9yZSBvbiB3aWxkY2FyZCBhbmQgbmVnYXRpb24gc3ludGF4LCBzZWUgdGhlIGVudiBzZWN0aW9uLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNnbG9iYWxlbnZcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBnbG9iYWxFbnY6IEFycmF5PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB5b3Ugd2FudCB0byBtYWtlIGF2YWlsYWJsZSB0byB0YXNrcy5cbiAgICogVXNpbmcgdGhpcyBrZXkgb3B0cyBhbGwgdGFza3MgaW50byBTdHJpY3RcbiAgICogRW52aXJvbm1lbnQgVmFyaWFibGUgTW9kZS5cbiAgICpcbiAgICogQWRkaXRpb25hbGx5LCBUdXJib3JlcG8gaGFzIGEgYnVpbHQtaW4gc2V0IG9mIGdsb2JhbCBwYXNzdGhyb3VnaCB2YXJpYWJsZXNcbiAgICogZm9yIGNvbW1vbiBjYXNlcywgbGlrZSBvcGVyYXRpbmcgc3lzdGVtIGVudmlyb25tZW50IHZhcmlhYmxlcy4gVGhpc1xuICAgKiBpbmNsdWRlcyB2YXJpYWJsZXMgbGlrZSBIT01FLCBQQVRILCBBUFBEQVRBLCBTSEVMTCwgUFdELCBhbmQgbW9yZS4gVGhlIGZ1bGxcbiAgICogbGlzdCBjYW4gYmUgZm91bmQgaW4gdGhlIHNvdXJjZSBjb2RlLlxuICAgKlxuICAgKiBQYXNzdGhyb3VnaCB2YWx1ZXMgZG8gbm90IGNvbnRyaWJ1dGUgdG8gaGFzaGVzIGZvciBjYWNoaW5nXG4gICAqXG4gICAqIElmIHlvdSB3YW50IGNoYW5nZXMgaW4gdGhlc2UgdmFyaWFibGVzIHRvIGNhdXNlIGNhY2hlIG1pc3NlcywgeW91IHdpbGwgbmVlZFxuICAgKiB0byBpbmNsdWRlIHRoZW0gaW4gZW52IG9yIGdsb2JhbEVudi5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZ2xvYmFscGFzc3Rocm91Z2hlbnZcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBnbG9iYWxQYXNzVGhyb3VnaEVudjogQXJyYXk8c3RyaW5nPjtcblxuICAvKipcbiAgICogQGRlZmF1bHQ6IFwic3RyZWFtXCJcbiAgICpcbiAgICogU2VsZWN0IGEgdGVybWluYWwgVUkgZm9yIHRoZSByZXBvc2l0b3J5LlxuICAgKlxuICAgKiBcInR1aVwiIGFsbG93cyBmb3Igdmlld2luZyBlYWNoIGxvZyBhdCBvbmNlIGFuZCBpbnRlcmFjdGluZyB3aXRoIHRoZSB0YXNrLlxuICAgKiBcInN0cmVhbVwiIG91dHB1dHMgbG9ncyBhcyB0aGV5IGNvbWUgaW4gYW5kIGlzIG5vdCBpbnRlcmFjdGl2ZS5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jdWlcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1aTogXCJ0dWlcIiB8IFwic3RyZWFtXCI7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0OiBmYWxzZVxuICAgKlxuICAgKiBUdXJib3JlcG8gdXNlcyB5b3VyIHJlcG9zaXRvcnkncyBsb2NrZmlsZSB0byBkZXRlcm1pbmUgY2FjaGluZyBiZWhhdmlvcixcbiAgICogUGFja2FnZSBHcmFwaHMsIGFuZCBtb3JlLiBCZWNhdXNlIG9mIHRoaXMsIHdlIHVzZSB0aGUgcGFja2FnZU1hbmFnZXIgZmllbGRcbiAgICogdG8gaGVscCB5b3Ugc3RhYmlsaXplIHlvdXIgVHVyYm9yZXBvLlxuICAgKlxuICAgKiBUbyBoZWxwIHdpdGggaW5jcmVtZW50YWwgbWlncmF0aW9uIG9yIGluIHNpdHVhdGlvbnMgd2hlcmUgeW91IGNhbid0IHVzZVxuICAgKiB0aGUgcGFja2FnZU1hbmFnZXIgZmllbGQsIHlvdSBtYXkgdXNlXG4gICAqIC0tZGFuZ2Vyb3VzbHktZGlzYWJsZS1wYWNrYWdlLW1hbmFnZXItY2hlY2sgdG8gb3B0IG91dCBvZiB0aGlzIGNoZWNrIGFuZFxuICAgKiBhc3N1bWUgdGhlIHJpc2tzIG9mIHVuc3RhYmxlIGxvY2tmaWxlcyBwcm9kdWNpbmcgdW5wcmVkaWN0YWJsZSBiZWhhdmlvci5cbiAgICogV2hlbiBkaXNhYmxlZCwgVHVyYm9yZXBvIHdpbGwgYXR0ZW1wdCBhIGJlc3QtZWZmb3J0IGRpc2NvdmVyeSBvZiB0aGVcbiAgICogaW50ZW5kZWQgcGFja2FnZSBtYW5hZ2VyIG1lYW50IGZvciB0aGUgcmVwb3NpdG9yeS5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZGFuZ2Vyb3VzbHlkaXNhYmxlcGFja2FnZW1hbmFnZXJjaGVja1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRhbmdlcm91c2x5RGlzYWJsZVBhY2thZ2VNYW5hZ2VyQ2hlY2s6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0OiBcIi50dXJiby9jYWNoZVwiXG4gICAqXG4gICAqIFNwZWNpZnkgdGhlIGZpbGVzeXN0ZW0gY2FjaGUgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNjYWNoZWRpclxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNhY2hlRGlyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0OiB0cnVlXG4gICAqXG4gICAqIFR1cmJvcmVwbyBydW5zIGEgYmFja2dyb3VuZCBwcm9jZXNzIHRvIHByZS1jYWxjdWxhdGUgc29tZSBleHBlbnNpdmVcbiAgICogb3BlcmF0aW9ucy4gVGhpcyBzdGFuZGFsb25lIHByb2Nlc3MgKGRhZW1vbikgaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sXG4gICAqIGFuZCBub3QgcmVxdWlyZWQgZm9yIHByb3BlciBmdW5jdGlvbmluZyBvZiB0dXJiby5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZGFlbW9uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGFlbW9uOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdDogXCJzdHJpY3RcIlxuICAgKlxuICAgKiBUdXJib3JlcG8ncyBFbnZpcm9ubWVudCBNb2RlcyBhbGxvdyB5b3UgdG8gY29udHJvbCB3aGljaCBlbnZpcm9ubWVudFxuICAgKiB2YXJpYWJsZXMgYXJlIGF2YWlsYWJsZSB0byBhIHRhc2sgYXQgcnVudGltZTpcbiAgICpcbiAgICpcInN0cmljdFwiOiBGaWx0ZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIG9ubHkgdGhvc2UgdGhhdCBhcmUgc3BlY2lmaWVkXG4gICAqIGluIHRoZSBlbnYgYW5kIGdsb2JhbEVudiBrZXlzIGluIHR1cmJvLmpzb24uXG4gICAqXG4gICAqIFwibG9vc2VcIjogQWxsb3cgYWxsIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIHByb2Nlc3MgdG8gYmUgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNlbnZtb2RlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZW52TW9kZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBpcyB0aGlzIHRoZSByb290IHByb2plY3Q/XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXNSb290UHJvamVjdDogYm9vbGVhbjtcblxuICAvKipcbiAgICogTWFpbiB0dXJibzpidWlsZCB0YXNrXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnVpbGRUYXNrOiBUdXJib1JlcG9UYXNrO1xuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByZUNvbXBpbGVUYXNrPzogVHVyYm9SZXBvVGFzaztcbiAgLyoqXG4gICAqXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29tcGlsZVRhc2s/OiBUdXJib1JlcG9UYXNrO1xuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBvc3RDb21waWxlVGFzaz86IFR1cmJvUmVwb1Rhc2s7XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGVzdFRhc2s/OiBUdXJib1JlcG9UYXNrO1xuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhY2thZ2VUYXNrPzogVHVyYm9SZXBvVGFzaztcblxuICAvKipcbiAgICogU3ViLVRhc2tzIHRvIHJ1blxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhc2tzOiBBcnJheTxUdXJib1JlcG9UYXNrPiA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBwcm9qZWN0OiBOb2RlUHJvamVjdCxcbiAgICBvcHRpb25zOiBUdXJib1JlcG9PcHRpb25zID0ge30sXG4gICkge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgdGhpcy50dXJib1ZlcnNpb24gPSBvcHRpb25zLnR1cmJvVmVyc2lvbiA/PyBcIl4yLjAuMFwiO1xuICAgIHRoaXMuaXNSb290UHJvamVjdCA9IHByb2plY3QgPT09IHByb2plY3Qucm9vdDtcblxuICAgIC8qKlxuICAgICAqIEFkZCB0dXJib3JlcG8gcGFja2FnZSB0byByb290IHByb2plY3QuXG4gICAgICovXG4gICAgaWYgKHRoaXMuaXNSb290UHJvamVjdCkge1xuICAgICAgcHJvamVjdC5hZGREZXZEZXBzKGB0dXJib0Ake3RoaXMudHVyYm9WZXJzaW9ufWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElnbm9yZSB0aGUgd29ya2luZyBjYWNoZSBmb3IgdHVyYm8uXG4gICAgICovXG4gICAgcHJvamVjdC5naXRpZ25vcmUuYWRkUGF0dGVybnMoXCIvLnR1cmJvXCIpO1xuICAgIHByb2plY3QubnBtaWdub3JlPy5hZGRQYXR0ZXJucyhcIi8udHVyYm8vXCIpO1xuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqXG4gICAgICogU2V0IHNvbWUgZGVmYXVsdCBvcHRpb25zXG4gICAgICpcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICB0aGlzLmV4dGVuZHMgPSBvcHRpb25zLmV4dGVuZHMgPz8gKHRoaXMuaXNSb290UHJvamVjdCA/IFtdIDogW1wiLy9cIl0pO1xuICAgIHRoaXMuZ2xvYmFsRGVwZW5kZW5jaWVzID0gb3B0aW9ucy5nbG9iYWxEZXBlbmRlbmNpZXMgPz8gW107XG4gICAgdGhpcy5nbG9iYWxFbnYgPSBvcHRpb25zLmdsb2JhbEVudiA/PyBbXTtcbiAgICB0aGlzLmdsb2JhbFBhc3NUaHJvdWdoRW52ID0gb3B0aW9ucy5nbG9iYWxQYXNzVGhyb3VnaEVudiA/PyBbXTtcbiAgICB0aGlzLnVpID0gb3B0aW9ucy51aSA/PyBcInN0cmVhbVwiO1xuICAgIHRoaXMuZGFuZ2Vyb3VzbHlEaXNhYmxlUGFja2FnZU1hbmFnZXJDaGVjayA9XG4gICAgICBvcHRpb25zLmRhbmdlcm91c2x5RGlzYWJsZVBhY2thZ2VNYW5hZ2VyQ2hlY2sgPz8gZmFsc2U7XG4gICAgdGhpcy5jYWNoZURpciA9IG9wdGlvbnMuY2FjaGVEaXIgPz8gXCIudHVyYm8vY2FjaGVcIjtcbiAgICB0aGlzLmRhZW1vbiA9IG9wdGlvbnMuZGFlbW9uID8/IHRydWU7XG4gICAgdGhpcy5lbnZNb2RlID0gb3B0aW9ucy5lbnZNb2RlID8/IFwic3RyaWN0XCI7XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBUdXJibyBCdWlsZCBUYXNrXG4gICAgICpcbiAgICAgKiBBbGwgdHVyYm8gY29uZmlncyBjb250YWluIGEgdHVyYm8gYnVpbGQgdGFzay5cbiAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIC8qKlxuICAgICAqIFRoZSB0dXJibyBlbnRyeSBwb2ludCBkZWZpbml0aW9uIGZvciB0aGUgdHVyYm86YnVpbGQgdGFzay4gVGhpcyBleGlzdHNcbiAgICAgKiBpbiBlYWNoIHByb2plY3QgYW5kIGlzIHdyaXR0ZW4gdG90IGhlIHR1cmJvLmpzb24gZmlsZS4gVGhpcyB0YXNrIGlzIG5vdFxuICAgICAqIGEgcHJvamVuIHRhc2sgb3IgYSBOb2RlIHRhc2suXG4gICAgICovXG4gICAgdGhpcy5idWlsZFRhc2sgPSBuZXcgVHVyYm9SZXBvVGFzayh0aGlzLnByb2plY3QsIHtcbiAgICAgIG5hbWU6IFJPT1RfVFVSQk9fVEFTS19OQU1FLFxuICAgICAgZGVwZW5kc09uOiB0aGlzLmlzUm9vdFByb2plY3QgPyBbYF4ke1JPT1RfVFVSQk9fVEFTS19OQU1FfWBdIDogW10sXG4gICAgfSk7XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBUdXJibyBCdWlsZCBBbGwgVGFza1xuICAgICAqXG4gICAgICogVGhlIFByb2plbiBlbnRyeSBwb2ludC4gVGhpcyBvbmx5IGV4aXN0cyBpbiB0aGUgcm9vdCBhbmQgaXMgYSBwcm9qZW5cbiAgICAgKiB0YXNrIHRoYXQgY2FuIGJlIHJ1biB1c2luZyBwbnBtLlxuICAgICAqXG4gICAgICogLSBUdXJucyBvZmYgdGVsZW1ldHJ5XG4gICAgICogLSBSdW5zIHJvb3QgdHVyYm8gdGFzayB0byBidWlsZCBhbGwgc3ViLXByb2plY3RzLlxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgaWYgKHRoaXMuaXNSb290UHJvamVjdCkge1xuICAgICAgLyoqXG4gICAgICAgKiBDcmVhdGUgYW5kIGNvbmZpZ3VyZSB0aGUgYnVpbGQgYWxsIHRhc2suXG4gICAgICAgKi9cbiAgICAgIGNvbnN0IGJ1aWxkQWxsID0gdGhpcy5wcm9qZWN0LnRhc2tzLmFkZFRhc2soUk9PVF9DSV9UQVNLX05BTUUsIHtcbiAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgXCJSb290IGJ1aWxkIGZvbGxvd2VkIGJ5IHN1Yi1wcm9qZWN0IGJ1aWxkcy4gTWltaWNzIHRoZSBDSSBidWlsZCBwcm9jZXNzIGluIG9uZSBzdGVwLlwiLFxuICAgICAgfSk7XG4gICAgICBidWlsZEFsbC5leGVjKFwidHVyYm8gdGVsZW1ldHJ5IGRpc2FibGVcIik7XG4gICAgICBidWlsZEFsbC5leGVjKFxuICAgICAgICBgdHVyYm8gJHtST09UX1RVUkJPX1RBU0tfTkFNRX0gLS1zdW1tYXJpemUgLS1jb25jdXJyZW5jeT0xMGAsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNVQi1QUk9KRUNUXG4gICAgICpcbiAgICAgKiBDcmVhdGVzIHRhc2tzIGZvciB0aGUgdHlwaWNhbCBsaWZlY3ljbGUgZm9yIGFsbCBwcm9qZWN0IHByb2plY3RzLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5pc1Jvb3RQcm9qZWN0KSB7XG4gICAgICB0aGlzLnByZUNvbXBpbGVUYXNrID0gbmV3IFR1cmJvUmVwb1Rhc2socHJvamVjdCwge1xuICAgICAgICBuYW1lOiBcInByZS1jb21waWxlXCIsXG4gICAgICAgIGlucHV0czogW1wic3JjLyoqLypcIiwgXCIqLmpzb25cIl0sXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29tcGlsZVRhc2sgPSBuZXcgVHVyYm9SZXBvVGFzayhwcm9qZWN0LCB7IG5hbWU6IFwiY29tcGlsZVwiIH0pO1xuICAgICAgdGhpcy5wb3N0Q29tcGlsZVRhc2sgPSBuZXcgVHVyYm9SZXBvVGFzayhwcm9qZWN0LCB7XG4gICAgICAgIG5hbWU6IFwicG9zdC1jb21waWxlXCIsXG4gICAgICB9KTtcbiAgICAgIHRoaXMudGVzdFRhc2sgPSBuZXcgVHVyYm9SZXBvVGFzayhwcm9qZWN0LCB7IG5hbWU6IFwidGVzdFwiIH0pO1xuICAgICAgdGhpcy5wYWNrYWdlVGFzayA9IG5ldyBUdXJib1JlcG9UYXNrKHByb2plY3QsIHtcbiAgICAgICAgbmFtZTogXCJwYWNrYWdlXCIsXG4gICAgICAgIGlucHV0czogW1wiLm5wbWlnbm9yZVwiXSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy50YXNrcy5wdXNoKFxuICAgICAgICB0aGlzLnByZUNvbXBpbGVUYXNrLFxuICAgICAgICB0aGlzLmNvbXBpbGVUYXNrLFxuICAgICAgICB0aGlzLnBvc3RDb21waWxlVGFzayxcbiAgICAgICAgdGhpcy50ZXN0VGFzayxcbiAgICAgICAgdGhpcy5wYWNrYWdlVGFzayxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJlU3ludGhlc2l6ZSgpOiB2b2lkIHtcbiAgICAvKipcbiAgICAgKiBBZGQgYW55IGxvY2FsIHdvcmtzcGFjZSBzcGVjaWZpYyBkZXBzIHRvIGRlcGVuZHNPbiBzbyB0aGF0IHdlIGtub3dcbiAgICAgKiBjb21waWxlIGhhcyBmaW5pc2hlZCBiZWZvcmUgYXR0ZW1wdGluZyB0byB1c2UgYW55IGRpc3RyaWJ1dGlvbiBhcnRpZmFjdHMuXG4gICAgICpcbiAgICAgKiBEbyB0aGlzIGluIHByZXN5bnRoIHNvIHRoYXQgd2UgY2FuIGJlIHN1cmUgYWxsIHByb2plY3QgZGVwZW5kZW5jaWVzIGhhdmVcbiAgICAgKiBiZWVuIGRlZmluZWQgZmlyc3QuXG4gICAgICovXG4gICAgbGV0IG5leHREZXBlbmRzT24gPSB0aGlzLnByb2plY3QuZGVwcy5hbGxcbiAgICAgIC5maWx0ZXIoKGQpID0+IGQudmVyc2lvbiA9PT0gXCJ3b3Jrc3BhY2U6KlwiKVxuICAgICAgLm1hcCgoZCkgPT4gW2QubmFtZSwgUk9PVF9UVVJCT19UQVNLX05BTUVdLmpvaW4oXCIjXCIpKTtcblxuICAgIC8qKlxuICAgICAqIExvb3Agb3ZlciBhbGwgcHJvamVuIHRhc2tzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHR1cmJvIHRhc2tcbiAgICAgKiBkZWZpbml0aW9ucy4gQ2hhaW4gdGhlbSB0b2dldGhlciB1c2luZyBkZXBlbmRzT24sIGFsb25nIHdpdGggYW55IG91dHNpZGVcbiAgICAgKiBwYWNrYWdlIGRlcGVuZGVuY2llcy5cbiAgICAgKi9cbiAgICBpZiAoIXRoaXMuaXNSb290UHJvamVjdCkge1xuICAgICAgKFxuICAgICAgICBbXG4gICAgICAgICAgW3RoaXMucHJvamVjdC5wcmVDb21waWxlVGFzaywgdGhpcy5wcmVDb21waWxlVGFza10sXG4gICAgICAgICAgW3RoaXMucHJvamVjdC5jb21waWxlVGFzaywgdGhpcy5jb21waWxlVGFza10sXG4gICAgICAgICAgW3RoaXMucHJvamVjdC5wb3N0Q29tcGlsZVRhc2ssIHRoaXMucG9zdENvbXBpbGVUYXNrXSxcbiAgICAgICAgICBbdGhpcy5wcm9qZWN0LnRlc3RUYXNrLCB0aGlzLnRlc3RUYXNrXSxcbiAgICAgICAgICBbdGhpcy5wcm9qZWN0LnBhY2thZ2VUYXNrLCB0aGlzLnBhY2thZ2VUYXNrXSxcbiAgICAgICAgXSBhcyBBcnJheTxbVGFzaywgVHVyYm9SZXBvVGFza10+XG4gICAgICApLmZvckVhY2goKFtwalRhc2ssIHR1cmJvVGFza10pID0+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHN0ZXBzIGV4aXN0IGNoYWluIHVzaW5nIGRlcGVuZHNPblxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHBqVGFzayAmJiB0dXJib1Rhc2sgJiYgcGpUYXNrLnN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAobmV4dERlcGVuZHNPbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0dXJib1Rhc2suZGVwZW5kc09uLnB1c2goLi4ubmV4dERlcGVuZHNPbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHREZXBlbmRzT24gPSBbdHVyYm9UYXNrLm5hbWVdO1xuXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogT3RoZXJ3aXNlLCBpZiBhIHRhc2sgZG9lc24ndCBkbyBhbnl0aGluZywgZGVhY3RpdmF0ZSBpdC5cbiAgICAgICAgICAgKi9cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0dXJib1Rhc2suaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8qKlxuICAgICAgICogTWFpbiBidWlsZCBlbnRyeSBwb2ludCBkZXBlbmRzIG9uIHdoYXRldmVyIHdhcyBsYXN0LlxuICAgICAgICovXG4gICAgICB0aGlzLmJ1aWxkVGFzay5kZXBlbmRzT24ucHVzaCguLi5uZXh0RGVwZW5kc09uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBmb3IgdGhlIHR1cmJvIGNvbmZpZyBmaWxlLlxuICAgICAqL1xuICAgIGNvbnN0IGZpbGVOYW1lOiBzdHJpbmcgPSBcInR1cmJvLmpzb25cIjtcblxuICAgIC8qKlxuICAgICAqIEVuc3VyZSB0aGF0IHR1cmJvIGNvbmZpZyBkb2Vzbid0IGVuZCB1cCBpbiBhbnkgcGFja2FnZSBkaXN0cmlidXRpb25zLlxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdC5hZGRQYWNrYWdlSWdub3JlKGZpbGVOYW1lKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb250ZW50IG9mIHRoaXMgWUFNTCBmaWxlIHdpbGwgYmUgcmVzb2x2ZWQgYXQgc3ludGggdGltZS4gQnkgdGhlbixcbiAgICAgKiBhbnkgc3ViLXByb2plY3RzIHdpbGwgYmUgZGVmaW5lZCBhbmQgdGhpcyB3aWxsIGJlIGEgY29tcGxldGUgbGlzdC5cbiAgICAgKi9cbiAgICBuZXcgSnNvbkZpbGUodGhpcy5wcm9qZWN0LCBmaWxlTmFtZSwge1xuICAgICAgb2JqOiB7XG4gICAgICAgIGV4dGVuZHM6IHRoaXMuZXh0ZW5kcy5sZW5ndGggPyB0aGlzLmV4dGVuZHMgOiB1bmRlZmluZWQsXG4gICAgICAgIGdsb2JhbERlcGVuZGVuY2llczpcbiAgICAgICAgICB0aGlzLmlzUm9vdFByb2plY3QgJiYgdGhpcy5nbG9iYWxEZXBlbmRlbmNpZXMubGVuZ3RoXG4gICAgICAgICAgICA/IHRoaXMuZ2xvYmFsRGVwZW5kZW5jaWVzXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgZ2xvYmFsRW52OlxuICAgICAgICAgIHRoaXMuaXNSb290UHJvamVjdCAmJiB0aGlzLmdsb2JhbEVudi5sZW5ndGhcbiAgICAgICAgICAgID8gdGhpcy5nbG9iYWxFbnZcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBnbG9iYWxQYXNzVGhyb3VnaEVudjpcbiAgICAgICAgICB0aGlzLmlzUm9vdFByb2plY3QgJiYgdGhpcy5nbG9iYWxQYXNzVGhyb3VnaEVudi5sZW5ndGhcbiAgICAgICAgICAgID8gdGhpcy5nbG9iYWxQYXNzVGhyb3VnaEVudlxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIHVpOiB0aGlzLmlzUm9vdFByb2plY3QgPyB0aGlzLnVpIDogdW5kZWZpbmVkLFxuICAgICAgICBkYW5nZXJvdXNseURpc2FibGVQYWNrYWdlTWFuYWdlckNoZWNrOiB0aGlzLmlzUm9vdFByb2plY3RcbiAgICAgICAgICA/IHRoaXMuZGFuZ2Vyb3VzbHlEaXNhYmxlUGFja2FnZU1hbmFnZXJDaGVja1xuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBjYWNoZURpcjogdGhpcy5pc1Jvb3RQcm9qZWN0ID8gdGhpcy5jYWNoZURpciA6IHVuZGVmaW5lZCxcbiAgICAgICAgZGFlbW9uOiB0aGlzLmlzUm9vdFByb2plY3QgPyB0aGlzLmRhZW1vbiA6IHVuZGVmaW5lZCxcbiAgICAgICAgZW52TW9kZTogdGhpcy5pc1Jvb3RQcm9qZWN0ID8gdGhpcy5lbnZNb2RlIDogdW5kZWZpbmVkLFxuICAgICAgICAvKipcbiAgICAgICAgICogQWxsIHRhc2tzXG4gICAgICAgICAqL1xuICAgICAgICB0YXNrczogdGhpcy50YXNrc1xuICAgICAgICAgIC5maWx0ZXIoKHRhc2spID0+IHRhc2suaXNBY3RpdmUpXG4gICAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAgIChhY2MsIHRhc2spID0+IHtcbiAgICAgICAgICAgICAgYWNjW3Rhc2submFtZV0gPSB7XG4gICAgICAgICAgICAgICAgLi4udGFzay50YXNrQ29uZmlnKCksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBbdGhpcy5idWlsZFRhc2submFtZV06IHsgLi4udGhpcy5idWlsZFRhc2sudGFza0NvbmZpZygpIH0sXG4gICAgICAgICAgICB9IGFzIFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBzdXBlci5wcmVTeW50aGVzaXplKCk7XG4gIH1cbn1cbiJdfQ==
package/lib/versions.d.ts CHANGED
@@ -1,12 +1,16 @@
1
1
  export declare const VERSION: {
2
2
  /**
3
- * CDK CLI for workflows and command line operations..
3
+ * CDK CLI for workflows and command line operations.
4
+ *
5
+ * CLI and lib are versioned separately, so this is the CLI version.
4
6
  */
5
- readonly CDK_CLI_VERISON: "2.1018.0";
7
+ readonly AWS_CDK_CLI_VERSION: "2.1024.0";
6
8
  /**
7
9
  * CDK Version to use for construct projects.
10
+ *
11
+ * CLI and lib are versioned separately, so this is the lib version.
8
12
  */
9
- readonly CDK_LIB_VERISON: "2.200.1";
13
+ readonly AWS_CDK_LIB_VERSION: "2.210.0";
10
14
  /**
11
15
  * Version of Node.js to use in workflows at github actions.
12
16
  */
package/lib/versions.js CHANGED
@@ -3,13 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
4
  exports.VERSION = {
5
5
  /**
6
- * CDK CLI for workflows and command line operations..
6
+ * CDK CLI for workflows and command line operations.
7
+ *
8
+ * CLI and lib are versioned separately, so this is the CLI version.
7
9
  */
8
- CDK_CLI_VERISON: "2.1018.0",
10
+ AWS_CDK_CLI_VERSION: "2.1024.0",
9
11
  /**
10
12
  * CDK Version to use for construct projects.
13
+ *
14
+ * CLI and lib are versioned separately, so this is the lib version.
11
15
  */
12
- CDK_LIB_VERISON: "2.200.1",
16
+ AWS_CDK_LIB_VERSION: "2.210.0",
13
17
  /**
14
18
  * Version of Node.js to use in workflows at github actions.
15
19
  */
@@ -23,4 +27,4 @@ exports.VERSION = {
23
27
  */
24
28
  TURBO_VERSION: "2.5.4",
25
29
  };
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdmVyc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxPQUFPLEdBQUc7SUFDckI7O09BRUc7SUFDSCxlQUFlLEVBQUUsVUFBVTtJQUUzQjs7T0FFRztJQUNILGVBQWUsRUFBRSxTQUFTO0lBRTFCOztPQUVHO0lBQ0gsY0FBYyxFQUFFLElBQUk7SUFFcEI7O09BRUc7SUFDSCxZQUFZLEVBQUUsU0FBUztJQUV2Qjs7T0FFRztJQUNILGFBQWEsRUFBRSxPQUFPO0NBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBWRVJTSU9OID0ge1xuICAvKipcbiAgICogQ0RLIENMSSBmb3Igd29ya2Zsb3dzIGFuZCBjb21tYW5kIGxpbmUgb3BlcmF0aW9ucy4uXG4gICAqL1xuICBDREtfQ0xJX1ZFUklTT046IFwiMi4xMDE4LjBcIixcblxuICAvKipcbiAgICogQ0RLIFZlcnNpb24gdG8gdXNlIGZvciBjb25zdHJ1Y3QgcHJvamVjdHMuXG4gICAqL1xuICBDREtfTElCX1ZFUklTT046IFwiMi4yMDAuMVwiLFxuXG4gIC8qKlxuICAgKiBWZXJzaW9uIG9mIE5vZGUuanMgdG8gdXNlIGluIHdvcmtmbG93cyBhdCBnaXRodWIgYWN0aW9ucy5cbiAgICovXG4gIE5PREVfV09SS0ZMT1dTOiBcIjIwXCIsXG5cbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgUE5QTSB0byB1c2UgaW4gd29ya2Zsb3dzIGF0IGdpdGh1YiBhY3Rpb25zLlxuICAgKi9cbiAgUE5QTV9WRVJTSU9OOiBcIjEwLjEzLjFcIixcblxuICAvKipcbiAgICogV2hhdCB2ZXJzaW9uIG9mIHRoZSB0dXJib3JlcG8gbGlicmFyeSBzaG91bGQgd2UgdXNlP1xuICAgKi9cbiAgVFVSQk9fVkVSU0lPTjogXCIyLjUuNFwiLFxufSBhcyBjb25zdDtcbiJdfQ==
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdmVyc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxPQUFPLEdBQUc7SUFDckI7Ozs7T0FJRztJQUNILG1CQUFtQixFQUFFLFVBQVU7SUFFL0I7Ozs7T0FJRztJQUNILG1CQUFtQixFQUFFLFNBQVM7SUFFOUI7O09BRUc7SUFDSCxjQUFjLEVBQUUsSUFBSTtJQUVwQjs7T0FFRztJQUNILFlBQVksRUFBRSxTQUFTO0lBRXZCOztPQUVHO0lBQ0gsYUFBYSxFQUFFLE9BQU87Q0FDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFZFUlNJT04gPSB7XG4gIC8qKlxuICAgKiBDREsgQ0xJIGZvciB3b3JrZmxvd3MgYW5kIGNvbW1hbmQgbGluZSBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBDTEkgYW5kIGxpYiBhcmUgdmVyc2lvbmVkIHNlcGFyYXRlbHksIHNvIHRoaXMgaXMgdGhlIENMSSB2ZXJzaW9uLlxuICAgKi9cbiAgQVdTX0NES19DTElfVkVSU0lPTjogXCIyLjEwMjQuMFwiLFxuXG4gIC8qKlxuICAgKiBDREsgVmVyc2lvbiB0byB1c2UgZm9yIGNvbnN0cnVjdCBwcm9qZWN0cy5cbiAgICpcbiAgICogQ0xJIGFuZCBsaWIgYXJlIHZlcnNpb25lZCBzZXBhcmF0ZWx5LCBzbyB0aGlzIGlzIHRoZSBsaWIgdmVyc2lvbi5cbiAgICovXG4gIEFXU19DREtfTElCX1ZFUlNJT046IFwiMi4yMTAuMFwiLFxuXG4gIC8qKlxuICAgKiBWZXJzaW9uIG9mIE5vZGUuanMgdG8gdXNlIGluIHdvcmtmbG93cyBhdCBnaXRodWIgYWN0aW9ucy5cbiAgICovXG4gIE5PREVfV09SS0ZMT1dTOiBcIjIwXCIsXG5cbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgUE5QTSB0byB1c2UgaW4gd29ya2Zsb3dzIGF0IGdpdGh1YiBhY3Rpb25zLlxuICAgKi9cbiAgUE5QTV9WRVJTSU9OOiBcIjEwLjEzLjFcIixcblxuICAvKipcbiAgICogV2hhdCB2ZXJzaW9uIG9mIHRoZSB0dXJib3JlcG8gbGlicmFyeSBzaG91bGQgd2UgdXNlP1xuICAgKi9cbiAgVFVSQk9fVkVSU0lPTjogXCIyLjUuNFwiLFxufSBhcyBjb25zdDtcbiJdfQ==
@@ -0,0 +1,54 @@
1
+ import { Component } from "projen";
2
+ import { AwsCdkTypeScriptApp } from "projen/lib/awscdk";
3
+ import { BuildWorkflow, BuildWorkflowOptions } from "projen/lib/build";
4
+ import { ValueOf } from "type-fest";
5
+ import { AWS_DEPLOY_TYPE, AwsDeploymentTarget } from "../aws/aws-deployment-target";
6
+ export declare const PROD_DEPLOY_NAME = "prod-deploy";
7
+ export interface DeployWorkflowOptions {
8
+ /**
9
+ * What type of deploy is this workflow for?
10
+ *
11
+ * @default AWS_DEPLOY_TYPE.DEV
12
+ */
13
+ readonly awsDeployType?: ValueOf<typeof AWS_DEPLOY_TYPE>;
14
+ /**
15
+ * Optionally feed a list of targets to deploy to.
16
+ *
17
+ * @default discovers all targets using deployType
18
+ */
19
+ readonly awsDeploymentTargets?: Array<AwsDeploymentTarget>;
20
+ /**
21
+ * Existing workflow, useful if we're tacking deployments onto an existing
22
+ * build workflow
23
+ */
24
+ readonly buildWorkflow?: BuildWorkflow;
25
+ /**
26
+ * Options for the build workflow, if no build workflow is provided.
27
+ */
28
+ readonly buildWorkflowOptions?: BuildWorkflowOptions;
29
+ }
30
+ export declare class AwsDeployWorkflow extends Component {
31
+ project: AwsCdkTypeScriptApp;
32
+ static of(project: AwsCdkTypeScriptApp, buildWorkflow: BuildWorkflow): AwsDeployWorkflow | undefined;
33
+ /**
34
+ * The root project for this deploy workflow. Must be a monorepo project.
35
+ */
36
+ private rootProject;
37
+ /**
38
+ * What type of deploy is this workflow for?
39
+ */
40
+ awsDeployType: ValueOf<typeof AWS_DEPLOY_TYPE>;
41
+ /**
42
+ * The list of targets to deploy to.
43
+ */
44
+ readonly awsDeploymentTargets: Array<AwsDeploymentTarget>;
45
+ /**
46
+ * Hold the deploy workflow so we can add to it in preSynth
47
+ */
48
+ buildWorkflow: BuildWorkflow;
49
+ constructor(project: AwsCdkTypeScriptApp, options?: DeployWorkflowOptions);
50
+ private setupNode;
51
+ private setupPnpm;
52
+ private deploySteps;
53
+ preSynthesize(): void;
54
+ }