cdk-nuxt 2.10.8 → 2.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/stack/access-logs-analysis/AccessLogsAnalysis.js +4 -4
- package/lib/stack/access-logs-analysis/AccessLogsAnalysis.ts +3 -3
- package/lib/stack/server/NuxtServerAppStack.d.ts +1 -0
- package/lib/stack/server/NuxtServerAppStack.js +19 -8
- package/lib/stack/server/NuxtServerAppStack.ts +19 -5
- package/lib/stack/server/NuxtServerAppStackProps.d.ts +3 -2
- package/lib/stack/server/NuxtServerAppStackProps.js +1 -1
- package/lib/stack/server/NuxtServerAppStackProps.ts +3 -2
- package/package.json +1 -1
|
@@ -94,7 +94,7 @@ class AccessLogsAnalysis extends constructs_1.Construct {
|
|
|
94
94
|
* which restricts the consumer to a specific yarn or npm version.
|
|
95
95
|
*/
|
|
96
96
|
createGroupByDateLambda() {
|
|
97
|
-
const functionName = `${this.resourceIdPrefix}-
|
|
97
|
+
const functionName = `${this.resourceIdPrefix}-grouper`;
|
|
98
98
|
const groupByDateLogGroup = new aws_logs_1.LogGroup(this, `${functionName}-logs`, {
|
|
99
99
|
logGroupName: `/aws/lambda/${functionName}`,
|
|
100
100
|
retention: aws_logs_1.RetentionDays.TWO_WEEKS,
|
|
@@ -134,7 +134,7 @@ class AccessLogsAnalysis extends constructs_1.Construct {
|
|
|
134
134
|
* which restricts the consumer to a specific yarn or npm version.
|
|
135
135
|
*/
|
|
136
136
|
createCreatePartitionLambda() {
|
|
137
|
-
const functionName = `${this.resourceIdPrefix}-
|
|
137
|
+
const functionName = `${this.resourceIdPrefix}-partitioner`;
|
|
138
138
|
const createPartLogGroup = new aws_logs_1.LogGroup(this, `${functionName}-logs`, {
|
|
139
139
|
logGroupName: `/aws/lambda/${functionName}`,
|
|
140
140
|
retention: aws_logs_1.RetentionDays.TWO_WEEKS,
|
|
@@ -182,7 +182,7 @@ class AccessLogsAnalysis extends constructs_1.Construct {
|
|
|
182
182
|
* which restricts the consumer to a specific yarn or npm version.
|
|
183
183
|
*/
|
|
184
184
|
createTransformPartitionLambda() {
|
|
185
|
-
const functionName = `${this.resourceIdPrefix}-
|
|
185
|
+
const functionName = `${this.resourceIdPrefix}-transformer`;
|
|
186
186
|
const transformPartLogGroup = new aws_logs_1.LogGroup(this, `${functionName}-logs`, {
|
|
187
187
|
logGroupName: `/aws/lambda/${functionName}`,
|
|
188
188
|
retention: aws_logs_1.RetentionDays.TWO_WEEKS,
|
|
@@ -266,4 +266,4 @@ AccessLogsAnalysis.ACCESS_LOGS_FOLDER_UNPROCESSED = 'unprocessed';
|
|
|
266
266
|
AccessLogsAnalysis.ACCESS_LOGS_FOLDER_GROUPED_BY_DATE = 'by-date';
|
|
267
267
|
AccessLogsAnalysis.ACCESS_LOGS_FOLDER_TRANSFORMED = 'transformed';
|
|
268
268
|
AccessLogsAnalysis.ACCESS_LOGS_FOLDER_ATHENA_RESULTS = 'athena-query-results';
|
|
269
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNjZXNzTG9nc0FuYWx5c2lzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiQWNjZXNzTG9nc0FuYWx5c2lzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtDQUFpRjtBQUNqRiwyQ0FBcUM7QUFDckMsdURBQW9EO0FBR3BELHVEQUE2RTtBQUM3RSx1REFBdUU7QUFDdkUsNkNBQXdFO0FBQ3hFLDREQUE4RDtBQUM5RCxtRkFBbUU7QUFDbkUsbURBQStEO0FBQy9ELGlEQUE0RDtBQUM1RCx1RUFBOEQ7QUFDOUQsNkJBQTZCO0FBSTdCOzs7O0dBSUc7QUFDSCxNQUFzQixrQkFBbUIsU0FBUSxzQkFBUztJQW1CdEQsWUFBc0IsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBOEI7UUFDOUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQztRQUM3QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ2hFLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUNsRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ2hFLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMs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QUFDLENBQUM7SUFDUCxDQUFDOztBQTFTTCxnREFpVEM7QUEvUzZCLGlEQUE4QixHQUFHLGFBQWEsQ0FBQztBQUMvQyxxREFBa0MsR0FBRyxTQUFTLENBQUM7QUFDL0MsaURBQThCLEdBQUcsYUFBYSxDQUFDO0FBQy9DLG9EQUFpQyxHQUFHLHNCQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCdWNrZXQsIEV2ZW50VHlwZSwgdHlwZSBOb3RpZmljYXRpb25LZXlGaWx0ZXJ9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQge0NvbnN0cnVjdH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQge0NmbldvcmtHcm91cH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWF0aGVuYSc7XG5pbXBvcnQge0Nsb3VkRnJvbnRBY2Nlc3NMb2dzQnlEYXRlVGFibGV9IGZyb20gJy4vQ2xvdWRGcm9udEFjY2Vzc0xvZ3NCeURhdGVUYWJsZSc7XG5pbXBvcnQge0FjY2Vzc0xvZ3NQYXJxdWV0VGFibGV9IGZyb20gJy4vQWNjZXNzTG9nc1BhcnF1ZXRUYWJsZSc7XG5pbXBvcnQge0FyY2hpdGVjdHVyZSwgQ29kZSwgRnVuY3Rpb24sIFJ1bnRpbWV9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHtSdWxlLCBSdWxlVGFyZ2V0SW5wdXQsIFNjaGVkdWxlfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCB7dHlwZSBDZm5UYWcsIER1cmF0aW9uLCBTdGFjaywgUmVtb3ZhbFBvbGljeX0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHt0eXBlIENvbHVtbiwgRGF0YWJhc2V9IGZyb20gJ0Bhd3MtY2RrL2F3cy1nbHVlLWFscGhhJztcbmltcG9ydCB7UzNFdmVudFNvdXJjZX0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ldmVudC1zb3VyY2VzJztcbmltcG9ydCB7IExvZ0dyb3VwLCBSZXRlbnRpb25EYXlzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHtFZmZlY3QsIFBvbGljeVN0YXRlbWVudH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQge0xhbWJkYUZ1bmN0aW9ufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7dHlwZSBBY2Nlc3NMb2dzQW5hbHlzaXNQcm9wc30gZnJvbSBcIi4vQWNjZXNzTG9nc0FuYWx5c2lzUHJvcHNcIjtcbmltcG9ydCB7dHlwZSBDb2x1bW5UcmFuc2Zvcm1hdGlvblJ1bGVzfSBmcm9tIFwiLi4vLi4vZnVuY3Rpb25zL2FjY2Vzcy1sb2dzLWFuYWx5c2lzL3BhcnRpdGlvbmluZy90eXBlc1wiO1xuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBBV1MgcmVzb3VyY2VzIHRvIGFuYWx5emUgYWNjZXNzIGxvZ3MuIFRoaXMgY29uc3RydWN0IGlzIGRlcml2ZWQgZnJvbSB0aGUgb2ZmaWNpYWwgQVdTIHNhbXBsZVxuICogQ2xvdWRGb3JtYXRpb24gc3RhY2s6XG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2F3cy1zYW1wbGVzL2FtYXpvbi1jbG91ZGZyb250LWFjY2Vzcy1sb2dzLXF1ZXJpZXMvYmxvYi9tYWlubGluZS90ZW1wbGF0ZS55YW1sfVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWNjZXNzTG9nc0FuYWx5c2lzIGV4dGVuZHMgQ29uc3RydWN0IHtcblxuICAgIHByb3RlY3RlZCBzdGF0aWMgcmVhZG9ubHkgQUNDRVNTX0xPR1NfRk9MREVSX1VOUFJPQ0VTU0VEID0gJ3VucHJvY2Vzc2VkJztcbiAgICBwcm90ZWN0ZWQgc3RhdGljIHJlYWRvbmx5IEFDQ0VTU19MT0dTX0ZPTERFUl9HUk9VUEVEX0JZX0RBVEUgPSAnYnktZGF0ZSc7XG4gICAgcHJvdGVjdGVkIHN0YXRpYyByZWFkb25seSBBQ0NFU1NfTE9HU19GT0xERVJfVFJBTlNGT1JNRUQgPSAndHJhbnNmb3JtZWQnO1xuICAgIHByb3RlY3RlZCBzdGF0aWMgcmVhZG9ubHkgQUNDRVNTX0xPR1NfRk9MREVSX0FUSEVOQV9SRVNVTFRTID0gJ2F0aGVuYS1xdWVyeS1yZXN1bHRzJztcblxuICAgIHByb3RlY3RlZCByZWFkb25seSByZXNvdXJjZUlkUHJlZml4OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGJ1Y2tldDogQnVja2V0O1xuICAgIHByb3RlY3RlZCByZWFkb25seSB3b3JrZ3JvdXA6IENmbldvcmtHcm91cDtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGF0YWJhc2U6IERhdGFiYXNlO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBhY2Nlc3NMb2dzQnlEYXRlVGFibGU6IENsb3VkRnJvbnRBY2Nlc3NMb2dzQnlEYXRlVGFibGU7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFjY2Vzc0xvZ3NQYXJxdWV0VGFibGU6IEFjY2Vzc0xvZ3NQYXJxdWV0VGFibGU7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGdyb3VwQnlEYXRlTGFtYmRhOiBGdW5jdGlvbjtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY3JlYXRlUGFydGl0aW9uTGFtYmRhOiBGdW5jdGlvbjtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdHJhbnNmb3JtUGFydGl0aW9uTGFtYmRhOiBGdW5jdGlvbjtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY3JlYXRlUGFydGl0aW9uc1NjaGVkdWxlcjogUnVsZTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdHJhbnNmb3JtUGFydGl0aW9uc1NjaGVkdWxlcjogUnVsZTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQWNjZXNzTG9nc0FuYWx5c2lzUHJvcHMpIHtcbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICAgICAgdGhpcy5yZXNvdXJjZUlkUHJlZml4ID0gcHJvcHMucmVzb3VyY2VQcmVmaXg7XG4gICAgICAgIHRoaXMuYnVja2V0ID0gcHJvcHMuYnVja2V0O1xuICAgICAgICB0aGlzLnNldHVwTGlmZWN5Y2xlUnVsZXMocHJvcHMpO1xuICAgICAgICB0aGlzLndvcmtncm91cCA9IHRoaXMuY3JlYXRlV29ya2dyb3VwKCk7XG4gICAgICAgIHRoaXMuZGF0YWJhc2UgPSB0aGlzLmNyZWF0ZUdsdWVEYXRhYmFzZSgpO1xuICAgICAgICB0aGlzLmFjY2Vzc0xvZ3NCeURhdGVUYWJsZSA9IHRoaXMuY3JlYXRlQWNjZXNzTG9nc0J5RGF0ZVRhYmxlKCk7XG4gICAgICAgIHRoaXMuYWNjZXNzTG9nc1BhcnF1ZXRUYWJsZSA9IHRoaXMuY3JlYXRlQWNjZXNzTG9nc1BhcnF1ZXRUYWJsZSgpO1xuICAgICAgICB0aGlzLmdyb3VwQnlEYXRlTGFtYmRhID0gdGhpcy5jcmVhdGVHcm91cEJ5RGF0ZUxhbWJkYSgpO1xuICAgICAgICB0aGlzLmNyZWF0ZVBhcnRpdGlvbkxhbWJkYSA9IHRoaXMuY3JlYXRlQ3JlYXRlUGFydGl0aW9uTGFtYmRhKCk7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtUGFydGl0aW9uTGFtYmRhID0gdGhpcy5jcmVhdGVUcmFuc2Zvcm1QYXJ0aXRpb25MYW1iZGEoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVQYXJ0aXRpb25zU2NoZWR1bGVyID0gdGhpcy5jcmVhdGVDcmVhdGVQYXJ0aXRpb25zU2NoZWR1bGVyKCk7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtUGFydGl0aW9uc1NjaGVkdWxlciA9IHRoaXMuY3JlYXRlVHJhbnNmb3JtUGFydGl0aW9uc1NjaGVkdWxlcihwcm9wcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cExpZmVjeWNsZVJ1bGVzKHByb3BzOiBBY2Nlc3NMb2dzQW5hbHlzaXNQcm9wcyk6IHZvaWQge1xuICAgICAgICAvLyBjbGVhbnVwIHJhdyBhbmQgcGFydGl0aW9uZWQgYWNjZXNzIGxvZ3MgYWZ0ZXIgYSBjb25maWd1cmFibGUgdGltZSByYW5nZVxuXG4gICAgICAgIHRoaXMuYnVja2V0LmFkZExpZmVjeWNsZVJ1bGUoe1xuICAgICAgICAgICAgaWQ6IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tY2xlYW51cC11bnByb2Nlc3NlZGAsXG4gICAgICAgICAgICBwcmVmaXg6IGAke0FjY2Vzc0xvZ3NBbmFseXNpcy5BQ0NFU1NfTE9HU19GT0xERVJfVU5QUk9DRVNTRUR9LypgLFxuICAgICAgICAgICAgZXhwaXJhdGlvbjogcHJvcHMuZXhwaXJlUmF3TG9nc0FmdGVyID8/IER1cmF0aW9uLmRheXMoNyksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYnVja2V0LmFkZExpZmVjeWNsZVJ1bGUoe1xuICAgICAgICAgICAgaWQ6IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tY2xlYW51cC1ncm91cGVkYCxcbiAgICAgICAgICAgIHByZWZpeDogYCR7QWNjZXNzTG9nc0FuYWx5c2lzLkFDQ0VTU19MT0dTX0ZPTERFUl9HUk9VUEVEX0JZX0RBVEV9LypgLFxuICAgICAgICAgICAgZXhwaXJhdGlvbjogcHJvcHMuZXhwaXJlSW50ZXJtZWRpYXRlTG9nc0FmdGVyID8/IER1cmF0aW9uLmRheXMoNyksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYnVja2V0LmFkZExpZmVjeWNsZVJ1bGUoe1xuICAgICAgICAgICAgaWQ6IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tY2xlYW51cC10cmFuc2Zvcm1lZGAsXG4gICAgICAgICAgICBwcmVmaXg6IGAke0FjY2Vzc0xvZ3NBbmFseXNpcy5BQ0NFU1NfTE9HU19GT0xERVJfVFJBTlNGT1JNRUR9LypgLFxuICAgICAgICAgICAgZXhwaXJhdGlvbjogcHJvcHMuZXhwaXJlVHJhbnNmb3JtZWRMb2dzQWZ0ZXIgPz8gRHVyYXRpb24uZGF5cygxODApLFxuICAgICAgICB9KTtcblxuICAgICAgICAvKiBDSEVDS01FOiBkZWxldGUgcXVlcnkgcmVzdWx0cyBhZnRlciAxIHdlZWtcbiAgICAgICAgdGhpcy5idWNrZXQuYWRkTGlmZWN5Y2xlUnVsZSh7XG4gICAgICAgICAgaWQ6IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tY2xlYW51cC1xdWVyeS1yZXN1bHRzYCxcbiAgICAgICAgICBwcmVmaXg6IGAke0FjY2Vzc0xvZ3NBbmFseXNpcy5BQ0NFU1NfTE9HU19GT0xERVJfQVRIRU5BX1JFU1VMVFN9LypgLFxuICAgICAgICAgIGV4cGlyYXRpb246IER1cmF0aW9uLmRheXMoNyksXG4gICAgICAgIH0pO1xuICAgICAgICAqL1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlV29ya2dyb3VwKCk6IENmbldvcmtHcm91cCB7XG4gICAgICAgIGNvbnN0IHdvcmtncm91cE5hbWUgPSBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LXdvcmtncm91cGA7XG5cbiAgICAgICAgLy8gZHVlIHRvIGEgY3VycmVudCBidWcsIHRoZSB0YWdzIGFyZSBub3QgYXV0b21hdGljYWxseSBhc3NpZ25lZCB0byB0aGUgd29ya2dyb3VwXG4gICAgICAgIC8vIG5vdGUsIHRoYXQgdGhlIGtleXMgbXVzdCBiZSBjb252ZXJ0ZWQgdG8gbG93ZXIgY2FzZVxuICAgICAgICBjb25zdCB0YWdzOiBDZm5UYWdbXSA9IFN0YWNrLm9mKHRoaXMpXG4gICAgICAgICAgICAudGFncy5yZW5kZXJUYWdzKClcbiAgICAgICAgICAgIC5tYXAoKHRhZzogeyBLZXk6IHN0cmluZzsgVmFsdWU6IHN0cmluZyB9KSA9PiAoe2tleTogdGFnLktleSwgdmFsdWU6IHRhZy5WYWx1ZX0pKTtcblxuICAgICAgICByZXR1cm4gbmV3IENmbldvcmtHcm91cCh0aGlzLCB3b3JrZ3JvdXBOYW1lLCB7XG4gICAgICAgICAgICBuYW1lOiB3b3JrZ3JvdXBOYW1lLFxuICAgICAgICAgICAgcmVjdXJzaXZlRGVsZXRlT3B0aW9uOiB0cnVlLFxuICAgICAgICAgICAgd29ya0dyb3VwQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHB1Ymxpc2hDbG91ZFdhdGNoTWV0cmljc0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHJlc3VsdENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0TG9jYXRpb246IGBzMzovLyR7dGhpcy5idWNrZXQuYnVja2V0TmFtZX0vJHtBY2Nlc3NMb2dzQW5hbHlzaXMuQUNDRVNTX0xPR1NfRk9MREVSX0FUSEVOQV9SRVNVTFRTfWAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlbmZvcmNlV29ya0dyb3VwQ29uZmlndXJhdGlvbjogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRhZ3MsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlR2x1ZURhdGFiYXNlKCk6IERhdGFiYXNlIHtcbiAgICAgICAgY29uc3QgZGF0YWJhc2VOYW1lID0gYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1kYXRhYmFzZWA7XG4gICAgICAgIHJldHVybiBuZXcgRGF0YWJhc2UodGhpcywgZGF0YWJhc2VOYW1lLCB7XG4gICAgICAgICAgICAvLyBBdGhlbmEgZG9lc24ndCBzdXBwb3J0IGRhc2hlcyBpbiBkYXRhYmFzZS90YWJsZSBuYW1lc1xuICAgICAgICAgICAgZGF0YWJhc2VOYW1lOiBkYXRhYmFzZU5hbWUucmVwbGFjZSgvLS9nLCAnXycpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgY3JlYXRlQWNjZXNzTG9nc0J5RGF0ZVRhYmxlKCk6IENsb3VkRnJvbnRBY2Nlc3NMb2dzQnlEYXRlVGFibGU7XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgY3JlYXRlQWNjZXNzTG9nc1BhcnF1ZXRUYWJsZSgpOiBDbG91ZEZyb250QWNjZXNzTG9nc0J5RGF0ZVRhYmxlO1xuXG4gICAgLyoqXG4gICAgICogQSBMYW1iZGEgZnVuY3Rpb24gdG8gYmUgdHJpZ2dlcmVkIHdoZW5ldmVyIGEgbmV3IGFjY2VzcyBsb2cgaXMgY3JlYXRlZC5cbiAgICAgKiBJdCBtb3ZlcyB0aGUgcmF3IGFjY2VzcyBsb2dzIGludG8gYSBzdWIgZm9sZGVyIGhpZXJhcmNoeSBieSB5ZWFyLCBtb250aCwgZGF5IGFuZCBob3VyLlxuICAgICAqIE5vdGUgdGhhdCB3ZSB1c2UgdGhlIGJ1bmRsZWQgQVdTIFNESyBmb3IgTm9kZSB0byBhdm9pZCB0aGUgbmVlZCBmb3IgYSBjdXN0b20gbGF5ZXJcbiAgICAgKiB3aGljaCByZXN0cmljdHMgdGhlIGNvbnN1bWVyIHRvIGEgc3BlY2lmaWMgeWFybiBvciBucG0gdmVyc2lvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUdyb3VwQnlEYXRlTGFtYmRhKCk6IEZ1bmN0aW9uIHtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1ncm91cC1ieS1kYXRlYDtcblxuICAgICAgICBjb25zdCBncm91cEJ5RGF0ZUxvZ0dyb3VwID0gbmV3IExvZ0dyb3VwKHRoaXMsIGAke2Z1bmN0aW9uTmFtZX0tbG9nc2AsIHtcbiAgICAgICAgICAgIGxvZ0dyb3VwTmFtZTogYC9hd3MvbGFtYmRhLyR7ZnVuY3Rpb25OYW1lfWAsXG4gICAgICAgICAgICByZXRlbnRpb246IFJldGVudGlvbkRheXMuVFdPX1dFRUtTLFxuICAgICAgICB9KTtcbiAgICAgICAgZ3JvdXBCeURhdGVMb2dHcm91cC5hcHBseVJlbW92YWxQb2xpY3koUmVtb3ZhbFBvbGljeS5ERVNUUk9ZKTtcblxuICAgICAgICBjb25zdCBsYW1iZGEgPSBuZXcgRnVuY3Rpb24odGhpcywgZnVuY3Rpb25OYW1lLCB7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICAgICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uLy4uL2Z1bmN0aW9ucy9hY2Nlc3MtbG9ncy1hbmFseXNpcy9ncm91cC1ieS1kYXRlL2J1aWxkL2FwcCcpLCB7XG4gICAgICAgICAgICAgICAgZXhjbHVkZTogWycqLmQudHMnXVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtZW1vcnlTaXplOiA1MTIsXG4gICAgICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDIwKSxcbiAgICAgICAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgICAgICAgIGV2ZW50czogW1xuICAgICAgICAgICAgICAgIG5ldyBTM0V2ZW50U291cmNlKHRoaXMuYnVja2V0LCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50czogW0V2ZW50VHlwZS5PQkpFQ1RfQ1JFQVRFRF0sXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IFt0aGlzLmdldFVucHJvY2Vzc2VkT2JqZWN0c0ZpbHRlcigpXSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAgICAgICAgIEFXU19OT0RFSlNfQ09OTkVDVElPTl9SRVVTRV9FTkFCTEVEOiAnMScsXG4gICAgICAgICAgICAgICAgTk9ERV9PUFRJT05TOiAnLS1lbmFibGUtc291cmNlLW1hcHMnLFxuICAgICAgICAgICAgICAgIFRBUkdFVF9GT0xERVI6IEFjY2Vzc0xvZ3NBbmFseXNpcy5BQ0NFU1NfTE9HU19GT0xERVJfR1JPVVBFRF9CWV9EQVRFLFxuICAgICAgICAgICAgICAgIFJBV19BQ0NFU1NfTE9HX0ZJTEVfUEFUVEVSTjogdGhpcy5nZXRSYXdBY2Nlc3NMb2dGaWxlUGF0dGVybigpLnNvdXJjZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsb2dHcm91cDogZ3JvdXBCeURhdGVMb2dHcm91cCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5idWNrZXQuZ3JhbnRSZWFkV3JpdGUobGFtYmRhKTtcbiAgICAgICAgdGhpcy5idWNrZXQuZ3JhbnREZWxldGUobGFtYmRhLCBgJHtBY2Nlc3NMb2dzQW5hbHlzaXMuQUNDRVNTX0xPR1NfRk9MREVSX1VOUFJPQ0VTU0VEfS8qYCk7XG5cbiAgICAgICAgcmV0dXJuIGxhbWJkYTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0VW5wcm9jZXNzZWRPYmplY3RzRmlsdGVyKCk6IE5vdGlmaWNhdGlvbktleUZpbHRlcjtcblxuICAgIC8qKiBUaGUgcGF0dGVybiB0byBpZGVudGlmeSB1bnByb2Nlc3NlZCBhY2Nlc3MgbG9ncyBkZXBlbmRzIG9uIHRoZSBwcm9kdWNpbmcgc291cmNlICovXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFJhd0FjY2Vzc0xvZ0ZpbGVQYXR0ZXJuKCk6IFJlZ0V4cDtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgcGFydGl0aW9uIGZvciB0aGUgdXBjb21pbmcgaG91ciBpbiB0aGUgYWNjZXNzIGxvZyBkYXRhYmFzZS5cbiAgICAgKiBOb3RlIHRoYXQgd2UgdXNlIHRoZSBidW5kbGVkIEFXUyBTREsgZm9yIE5vZGUgdG8gYXZvaWQgdGhlIG5lZWQgZm9yIGEgY3VzdG9tIGxheWVyXG4gICAgICogd2hpY2ggcmVzdHJpY3RzIHRoZSBjb25zdW1lciB0byBhIHNwZWNpZmljIHlhcm4gb3IgbnBtIHZlcnNpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVDcmVhdGVQYXJ0aXRpb25MYW1iZGEoKTogRnVuY3Rpb24ge1xuICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWNyZWF0ZS1wYXJ0YDtcblxuICAgICAgICBjb25zdCBjcmVhdGVQYXJ0TG9nR3JvdXAgPSBuZXcgTG9nR3JvdXAodGhpcywgYCR7ZnVuY3Rpb25OYW1lfS1sb2dzYCwge1xuICAgICAgICAgICAgbG9nR3JvdXBOYW1lOiBgL2F3cy9sYW1iZGEvJHtmdW5jdGlvbk5hbWV9YCxcbiAgICAgICAgICAgIHJldGVudGlvbjogUmV0ZW50aW9uRGF5cy5UV09fV0VFS1MsXG4gICAgICAgIH0pO1xuICAgICAgICBjcmVhdGVQYXJ0TG9nR3JvdXAuYXBwbHlSZW1vdmFsUG9saWN5KFJlbW92YWxQb2xpY3kuREVTVFJPWSk7XG5cbiAgICAgICAgY29uc3QgbGFtYmRhID0gbmV3IEZ1bmN0aW9uKHRoaXMsIGZ1bmN0aW9uTmFtZSwge1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgICAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi9mdW5jdGlvbnMvYWNjZXNzLWxvZ3MtYW5hbHlzaXMvcGFydGl0aW9uaW5nL2J1aWxkL2FwcCcpLCB7XG4gICAgICAgICAgICAgICAgZXhjbHVkZTogWycqLmQudHMnXVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtZW1vcnlTaXplOiAxMjgsXG4gICAgICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDIwKSxcbiAgICAgICAgICAgIGhhbmRsZXI6ICdjcmVhdGUtcGFydGl0aW9uLmhhbmRsZXInLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICAgICAgICBBV1NfTk9ERUpTX0NPTk5FQ1RJT05fUkVVU0VfRU5BQkxFRDogJzEnLFxuICAgICAgICAgICAgICAgIE5PREVfT1BUSU9OUzogJy0tZW5hYmxlLXNvdXJjZS1tYXBzJyxcbiAgICAgICAgICAgICAgICBXT1JLR1JPVVA6IHRoaXMud29ya2dyb3VwLm5hbWUsXG4gICAgICAgICAgICAgICAgREFUQUJBU0U6IHRoaXMuZGF0YWJhc2UuZGF0YWJhc2VOYW1lLFxuICAgICAgICAgICAgICAgIFRBQkxFOiB0aGlzLmFjY2Vzc0xvZ3NCeURhdGVUYWJsZS50YWJsZU5hbWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbG9nR3JvdXA6IGNyZWF0ZVBhcnRMb2dHcm91cCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gZ3JhbnQgYWNjZXNzIHRvIFMzIGJ1Y2tldCBhbmQgdG8gZXhlY3V0ZSBBdGhlbmEgcXVlcmllcyB3aGljaCBjcmVhdGUgbmV3IHBhcnRpdGlvbnNcbiAgICAgICAgdGhpcy5idWNrZXQuZ3JhbnRSZWFkV3JpdGUobGFtYmRhKTtcbiAgICAgICAgbGFtYmRhLmFkZFRvUm9sZVBvbGljeShcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpTdGFydFF1ZXJ5RXhlY3V0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXRRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdnbHVlOkNyZWF0ZURhdGFiYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2dsdWU6Q3JlYXRlUGFydGl0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ2dsdWU6R2V0RGF0YWJhc2UnLFxuICAgICAgICAgICAgICAgICAgICAnZ2x1ZTpHZXRUYWJsZScsXG4gICAgICAgICAgICAgICAgICAgICdnbHVlOkJhdGNoQ3JlYXRlUGFydGl0aW9uJyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBsYW1iZGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtcyBwYXJ0aXRpb25zIGZyb20gdGhlIEhpdmUgZm9ybWF0IHRvIFBhcnF1ZXQuXG4gICAgICogTm90ZSB0aGF0IHdlIHVzZSB0aGUgYnVuZGxlZCBBV1MgU0RLIGZvciBOb2RlIHRvIGF2b2lkIHRoZSBuZWVkIGZvciBhIGN1c3RvbSBsYXllclxuICAgICAqIHdoaWNoIHJlc3RyaWN0cyB0aGUgY29uc3VtZXIgdG8gYSBzcGVjaWZpYyB5YXJuIG9yIG5wbSB2ZXJzaW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlVHJhbnNmb3JtUGFydGl0aW9uTGFtYmRhKCk6IEZ1bmN0aW9uIHtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS10cmFuc2Zvcm0tcGFydGA7XG5cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtUGFydExvZ0dyb3VwID0gbmV3IExvZ0dyb3VwKHRoaXMsIGAke2Z1bmN0aW9uTmFtZX0tbG9nc2AsIHtcbiAgICAgICAgICAgIGxvZ0dyb3VwTmFtZTogYC9hd3MvbGFtYmRhLyR7ZnVuY3Rpb25OYW1lfWAsXG4gICAgICAgICAgICByZXRlbnRpb246IFJldGVudGlvbkRheXMuVFdPX1dFRUtTLFxuICAgICAgICB9KTtcbiAgICAgICAgdHJhbnNmb3JtUGFydExvZ0dyb3VwLmFwcGx5UmVtb3ZhbFBvbGljeShSZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuXG4gICAgICAgIGNvbnN0IGxhbWJkYSA9IG5ldyBGdW5jdGlvbih0aGlzLCBmdW5jdGlvbk5hbWUsIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgICAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIwX1gsXG4gICAgICAgICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vLi4vZnVuY3Rpb25zL2FjY2Vzcy1sb2dzLWFuYWx5c2lzL3BhcnRpdGlvbmluZy9idWlsZC9hcHAnKSwge1xuICAgICAgICAgICAgICAgIGV4Y2x1ZGU6IFsnY3JlYXRlLXBhcnRpdGlvbionLCAnKi5kLnRzJ11cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWVtb3J5U2l6ZTogMTI4LFxuICAgICAgICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcygyMCksXG4gICAgICAgICAgICBoYW5kbGVyOiAndHJhbnNmb3JtLXBhcnRpdGlvbi5oYW5kbGVyJyxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgICAgICAgQVdTX05PREVKU19DT05ORUNUSU9OX1JFVVNFX0VOQUJMRUQ6ICcxJyxcbiAgICAgICAgICAgICAgICBOT0RFX09QVElPTlM6ICctLWVuYWJsZS1zb3VyY2UtbWFwcycsXG4gICAgICAgICAgICAgICAgV09SS0dST1VQOiB0aGlzLndvcmtncm91cC5uYW1lLFxuICAgICAgICAgICAgICAgIERBVEFCQVNFOiB0aGlzLmRhdGFiYXNlLmRhdGFiYXNlTmFtZSxcbiAgICAgICAgICAgICAgICBTT1VSQ0VfVEFCTEU6IHRoaXMuYWNjZXNzTG9nc0J5RGF0ZVRhYmxlLnRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgICBUQVJHRVRfVEFCTEU6IHRoaXMuYWNjZXNzTG9nc1BhcnF1ZXRUYWJsZS50YWJsZU5hbWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbG9nR3JvdXA6IHRyYW5zZm9ybVBhcnRMb2dHcm91cCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gZ3JhbnQgYWNjZXNzIHRvIFMzIGJ1Y2tldCBhbmQgdG8gZXhlY3V0ZSBBdGhlbmEgcXVlcmllcyB3aGljaCBjcmVhdGUgbmV3IHBhcnRpdGlvbnNcbiAgICAgICAgdGhpcy5idWNrZXQuZ3JhbnRSZWFkV3JpdGUobGFtYmRhKTtcbiAgICAgICAgbGFtYmRhLmFkZFRvUm9sZVBvbGljeShcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpTdGFydFF1ZXJ5RXhlY3V0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXRRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdnbHVlOkNyZWF0ZURhdGFiYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2dsdWU6Q3JlYXRlUGFydGl0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ2dsdWU6R2V0RGF0YWJhc2UnLFxuICAgICAgICAgICAgICAgICAgICAnZ2x1ZTpHZXRUYWJsZScsXG4gICAgICAgICAgICAgICAgICAgICdnbHVlOkJhdGNoQ3JlYXRlUGFydGl0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ2dsdWU6R2V0UGFydGl0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ2dsdWU6R2V0UGFydGl0aW9ucycsXG4gICAgICAgICAgICAgICAgICAgICdnbHVlOkNyZWF0ZVRhYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2dsdWU6RGVsZXRlVGFibGUnLFxuICAgICAgICAgICAgICAgICAgICAnZ2x1ZTpEZWxldGVQYXJ0aXRpb24nLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGxhbWJkYTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNyZWF0ZVBhcnRpdGlvbnNTY2hlZHVsZXIoKTogUnVsZSB7XG4gICAgICAgIGNvbnN0IHJ1bGVOYW1lID0gYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1jcmVhdGUtcGFydC1zY2hlZGA7XG4gICAgICAgIHJldHVybiBuZXcgUnVsZSh0aGlzLCBydWxlTmFtZSwge1xuICAgICAgICAgICAgcnVsZU5hbWUsXG4gICAgICAgICAgICBzY2hlZHVsZTogU2NoZWR1bGUuY3Jvbih7bWludXRlOiAnNTUnfSksXG4gICAgICAgICAgICB0YXJnZXRzOiBbbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMuY3JlYXRlUGFydGl0aW9uTGFtYmRhLCB7cmV0cnlBdHRlbXB0czogMTB9KV0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlVHJhbnNmb3JtUGFydGl0aW9uc1NjaGVkdWxlcihwcm9wczogQWNjZXNzTG9nc0FuYWx5c2lzUHJvcHMpOiBSdWxlIHtcbiAgICAgICAgY29uc3QgcnVsZU5hbWUgPSBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LXRyYW5zZm9ybS1wYXJ0LXNjaGVkYDtcbiAgICAgICAgcmV0dXJuIG5ldyBSdWxlKHRoaXMsIHJ1bGVOYW1lLCB7XG4gICAgICAgICAgICBydWxlTmFtZSxcbiAgICAgICAgICAgIHNjaGVkdWxlOiBTY2hlZHVsZS5jcm9uKHttaW51dGU6ICcxJ30pLFxuICAgICAgICAgICAgdGFyZ2V0czogW1xuICAgICAgICAgICAgICAgIG5ldyBMYW1iZGFGdW5jdGlvbih0aGlzLnRyYW5zZm9ybVBhcnRpdGlvbkxhbWJkYSwge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogdGhpcy5nZXRUcmFuc2Zvcm1QYXJ0aXRpb25JbnZvY2F0aW9uUHJvcHMocHJvcHMpLFxuICAgICAgICAgICAgICAgICAgICByZXRyeUF0dGVtcHRzOiAxMCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VHJhbnNmb3JtUGFydGl0aW9uSW52b2NhdGlvblByb3BzKHByb3BzOiBBY2Nlc3NMb2dzQW5hbHlzaXNQcm9wcyk6IFJ1bGVUYXJnZXRJbnB1dCB7XG4gICAgICAgIHJldHVybiBSdWxlVGFyZ2V0SW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICBjb2x1bW5OYW1lczogW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuYWNjZXNzTG9nc1BhcnF1ZXRUYWJsZS5jb2x1bW5zLFxuICAgICAgICAgICAgICAgIC4uLih0aGlzLmFjY2Vzc0xvZ3NQYXJxdWV0VGFibGUucGFydGl0aW9uS2V5cyBhcyBDb2x1bW5bXSksXG4gICAgICAgICAgICBdLm1hcChjb2x1bW4gPT4gY29sdW1uLm5hbWUpLFxuICAgICAgICAgICAgY29sdW1uVHJhbnNmb3JtYXRpb25zOiB0aGlzLmdldENvbHVtblRyYW5zZm9ybWF0aW9uUnVsZXMocHJvcHMpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOZWVkcyB0byByZXR1cm4gdGhlIGxvZyBzb3VyY2Ugc3BlY2lmaWMgY29sdW1uIHRyYW5zZm9ybWF0aW9uIHJ1bGVzXG4gICAgICogKGUuZy4gdG8gYW5vbnltaXplIElQIGFkZHJlc3NlcykuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldENvbHVtblRyYW5zZm9ybWF0aW9uUnVsZXMocHJvcHM6IEFjY2Vzc0xvZ3NBbmFseXNpc1Byb3BzKTogQ29sdW1uVHJhbnNmb3JtYXRpb25SdWxlcztcbn1cbiJdfQ==
|
|
269
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNjZXNzTG9nc0FuYWx5c2lzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiQWNjZXNzTG9nc0FuYWx5c2lzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtDQUFpRjtBQUNqRiwyQ0FBcUM7QUFDckMsdURBQW9EO0FBR3BELHVEQUE2RTtBQUM3RSx1REFBdUU7QUFDdkUsNkNBQXdFO0FBQ3hFLDREQUE4RDtBQUM5RCxtRkFBbUU7QUFDbkUsbURBQStEO0FBQy9ELGlEQUE0RDtBQUM1RCx1RUFBOEQ7QUFDOUQsNkJBQTZCO0FBSTdCOzs7O0dBSUc7QUFDSCxNQUFzQixrQkFBbUIsU0FBUSxzQkFBUztJQW1CdEQsWUFBc0IsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBOEI7UUFDOUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQztRQUM3QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ2hFLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUNsRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ2hFLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMs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Q0FBQztJQUNQLENBQUM7O0FBMVNMLGdEQWlUQztBQS9TNkIsaURBQThCLEdBQUcsYUFBYSxDQUFDO0FBQy9DLHFEQUFrQyxHQUFHLFNBQVMsQ0FBQztBQUMvQyxpREFBOEIsR0FBRyxhQUFhLENBQUM7QUFDL0Msb0RBQWlDLEdBQUcsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0J1Y2tldCwgRXZlbnRUeXBlLCB0eXBlIE5vdGlmaWNhdGlvbktleUZpbHRlcn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7Q29uc3RydWN0fSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7Q2ZuV29ya0dyb3VwfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYXRoZW5hJztcbmltcG9ydCB7Q2xvdWRGcm9udEFjY2Vzc0xvZ3NCeURhdGVUYWJsZX0gZnJvbSAnLi9DbG91ZEZyb250QWNjZXNzTG9nc0J5RGF0ZVRhYmxlJztcbmltcG9ydCB7QWNjZXNzTG9nc1BhcnF1ZXRUYWJsZX0gZnJvbSAnLi9BY2Nlc3NMb2dzUGFycXVldFRhYmxlJztcbmltcG9ydCB7QXJjaGl0ZWN0dXJlLCBDb2RlLCBGdW5jdGlvbiwgUnVudGltZX0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQge1J1bGUsIFJ1bGVUYXJnZXRJbnB1dCwgU2NoZWR1bGV9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0IHt0eXBlIENmblRhZywgRHVyYXRpb24sIFN0YWNrLCBSZW1vdmFsUG9saWN5fSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQge3R5cGUgQ29sdW1uLCBEYXRhYmFzZX0gZnJvbSAnQGF3cy1jZGsvYXdzLWdsdWUtYWxwaGEnO1xuaW1wb3J0IHtTM0V2ZW50U291cmNlfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLWV2ZW50LXNvdXJjZXMnO1xuaW1wb3J0IHsgTG9nR3JvdXAsIFJldGVudGlvbkRheXMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQge0VmZmVjdCwgUG9saWN5U3RhdGVtZW50fSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7TGFtYmRhRnVuY3Rpb259IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0cyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHt0eXBlIEFjY2Vzc0xvZ3NBbmFseXNpc1Byb3BzfSBmcm9tIFwiLi9BY2Nlc3NMb2dzQW5hbHlzaXNQcm9wc1wiO1xuaW1wb3J0IHt0eXBlIENvbHVtblRyYW5zZm9ybWF0aW9uUnVsZXN9IGZyb20gXCIuLi8uLi9mdW5jdGlvbnMvYWNjZXNzLWxvZ3MtYW5hbHlzaXMvcGFydGl0aW9uaW5nL3R5cGVzXCI7XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIEFXUyByZXNvdXJjZXMgdG8gYW5hbHl6ZSBhY2Nlc3MgbG9ncy4gVGhpcyBjb25zdHJ1Y3QgaXMgZGVyaXZlZCBmcm9tIHRoZSBvZmZpY2lhbCBBV1Mgc2FtcGxlXG4gKiBDbG91ZEZvcm1hdGlvbiBzdGFjazpcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXdzLXNhbXBsZXMvYW1hem9uLWNsb3VkZnJvbnQtYWNjZXNzLWxvZ3MtcXVlcmllcy9ibG9iL21haW5saW5lL3RlbXBsYXRlLnlhbWx9XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBY2Nlc3NMb2dzQW5hbHlzaXMgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuXG4gICAgcHJvdGVjdGVkIHN0YXRpYyByZWFkb25seSBBQ0NFU1NfTE9HU19GT0xERVJfVU5QUk9DRVNTRUQgPSAndW5wcm9jZXNzZWQnO1xuICAgIHByb3RlY3RlZCBzdGF0aWMgcmVhZG9ubHkgQUNDRVNTX0xPR1NfRk9MREVSX0dST1VQRURfQllfREFURSA9ICdieS1kYXRlJztcbiAgICBwcm90ZWN0ZWQgc3RhdGljIHJlYWRvbmx5IEFDQ0VTU19MT0dTX0ZPTERFUl9UUkFOU0ZPUk1FRCA9ICd0cmFuc2Zvcm1lZCc7XG4gICAgcHJvdGVjdGVkIHN0YXRpYyByZWFkb25seSBBQ0NFU1NfTE9HU19GT0xERVJfQVRIRU5BX1JFU1VMVFMgPSAnYXRoZW5hLXF1ZXJ5LXJlc3VsdHMnO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlc291cmNlSWRQcmVmaXg6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYnVja2V0OiBCdWNrZXQ7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHdvcmtncm91cDogQ2ZuV29ya0dyb3VwO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkYXRhYmFzZTogRGF0YWJhc2U7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFjY2Vzc0xvZ3NCeURhdGVUYWJsZTogQ2xvdWRGcm9udEFjY2Vzc0xvZ3NCeURhdGVUYWJsZTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWNjZXNzTG9nc1BhcnF1ZXRUYWJsZTogQWNjZXNzTG9nc1BhcnF1ZXRUYWJsZTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZ3JvdXBCeURhdGVMYW1iZGE6IEZ1bmN0aW9uO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBjcmVhdGVQYXJ0aXRpb25MYW1iZGE6IEZ1bmN0aW9uO1xuICAgIHByb3RlY3RlZCByZWFkb25seSB0cmFuc2Zvcm1QYXJ0aXRpb25MYW1iZGE6IEZ1bmN0aW9uO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBjcmVhdGVQYXJ0aXRpb25zU2NoZWR1bGVyOiBSdWxlO1xuICAgIHByb3RlY3RlZCByZWFkb25seSB0cmFuc2Zvcm1QYXJ0aXRpb25zU2NoZWR1bGVyOiBSdWxlO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBBY2Nlc3NMb2dzQW5hbHlzaXNQcm9wcykge1xuICAgICAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgICAgICB0aGlzLnJlc291cmNlSWRQcmVmaXggPSBwcm9wcy5yZXNvdXJjZVByZWZpeDtcbiAgICAgICAgdGhpcy5idWNrZXQgPSBwcm9wcy5idWNrZXQ7XG4gICAgICAgIHRoaXMuc2V0dXBMaWZlY3ljbGVSdWxlcyhwcm9wcyk7XG4gICAgICAgIHRoaXMud29ya2dyb3VwID0gdGhpcy5jcmVhdGVXb3JrZ3JvdXAoKTtcbiAgICAgICAgdGhpcy5kYXRhYmFzZSA9IHRoaXMuY3JlYXRlR2x1ZURhdGFiYXNlKCk7XG4gICAgICAgIHRoaXMuYWNjZXNzTG9nc0J5RGF0ZVRhYmxlID0gdGhpcy5jcmVhdGVBY2Nlc3NMb2dzQnlEYXRlVGFibGUoKTtcbiAgICAgICAgdGhpcy5hY2Nlc3NMb2dzUGFycXVldFRhYmxlID0gdGhpcy5jcmVhdGVBY2Nlc3NMb2dzUGFycXVldFRhYmxlKCk7XG4gICAgICAgIHRoaXMuZ3JvdXBCeURhdGVMYW1iZGEgPSB0aGlzLmNyZWF0ZUdyb3VwQnlEYXRlTGFtYmRhKCk7XG4gICAgICAgIHRoaXMuY3JlYXRlUGFydGl0aW9uTGFtYmRhID0gdGhpcy5jcmVhdGVDcmVhdGVQYXJ0aXRpb25MYW1iZGEoKTtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1QYXJ0aXRpb25MYW1iZGEgPSB0aGlzLmNyZWF0ZVRyYW5zZm9ybVBhcnRpdGlvbkxhbWJkYSgpO1xuICAgICAgICB0aGlzLmNyZWF0ZVBhcnRpdGlvbnNTY2hlZHVsZXIgPSB0aGlzLmNyZWF0ZUNyZWF0ZVBhcnRpdGlvbnNTY2hlZHVsZXIoKTtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1QYXJ0aXRpb25zU2NoZWR1bGVyID0gdGhpcy5jcmVhdGVUcmFuc2Zvcm1QYXJ0aXRpb25zU2NoZWR1bGVyKHByb3BzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwTGlmZWN5Y2xlUnVsZXMocHJvcHM6IEFjY2Vzc0xvZ3NBbmFseXNpc1Byb3BzKTogdm9pZCB7XG4gICAgICAgIC8vIGNsZWFudXAgcmF3IGFuZCBwYXJ0aXRpb25lZCBhY2Nlc3MgbG9ncyBhZnRlciBhIGNvbmZpZ3VyYWJsZSB0aW1lIHJhbmdlXG5cbiAgICAgICAgdGhpcy5idWNrZXQuYWRkTGlmZWN5Y2xlUnVsZSh7XG4gICAgICAgICAgICBpZDogYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1jbGVhbnVwLXVucHJvY2Vzc2VkYCxcbiAgICAgICAgICAgIHByZWZpeDogYCR7QWNjZXNzTG9nc0FuYWx5c2lzLkFDQ0VTU19MT0dTX0ZPTERFUl9VTlBST0NFU1NFRH0vKmAsXG4gICAgICAgICAgICBleHBpcmF0aW9uOiBwcm9wcy5leHBpcmVSYXdMb2dzQWZ0ZXIgPz8gRHVyYXRpb24uZGF5cyg3KSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5idWNrZXQuYWRkTGlmZWN5Y2xlUnVsZSh7XG4gICAgICAgICAgICBpZDogYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1jbGVhbnVwLWdyb3VwZWRgLFxuICAgICAgICAgICAgcHJlZml4OiBgJHtBY2Nlc3NMb2dzQW5hbHlzaXMuQUNDRVNTX0xPR1NfRk9MREVSX0dST1VQRURfQllfREFURX0vKmAsXG4gICAgICAgICAgICBleHBpcmF0aW9uOiBwcm9wcy5leHBpcmVJbnRlcm1lZGlhdGVMb2dzQWZ0ZXIgPz8gRHVyYXRpb24uZGF5cyg3KSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5idWNrZXQuYWRkTGlmZWN5Y2xlUnVsZSh7XG4gICAgICAgICAgICBpZDogYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1jbGVhbnVwLXRyYW5zZm9ybWVkYCxcbiAgICAgICAgICAgIHByZWZpeDogYCR7QWNjZXNzTG9nc0FuYWx5c2lzLkFDQ0VTU19MT0dTX0ZPTERFUl9UUkFOU0ZPUk1FRH0vKmAsXG4gICAgICAgICAgICBleHBpcmF0aW9uOiBwcm9wcy5leHBpcmVUcmFuc2Zvcm1lZExvZ3NBZnRlciA/PyBEdXJhdGlvbi5kYXlzKDE4MCksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8qIENIRUNLTUU6IGRlbGV0ZSBxdWVyeSByZXN1bHRzIGFmdGVyIDEgd2Vla1xuICAgICAgICB0aGlzLmJ1Y2tldC5hZGRMaWZlY3ljbGVSdWxlKHtcbiAgICAgICAgICBpZDogYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1jbGVhbnVwLXF1ZXJ5LXJlc3VsdHNgLFxuICAgICAgICAgIHByZWZpeDogYCR7QWNjZXNzTG9nc0FuYWx5c2lzLkFDQ0VTU19MT0dTX0ZPTERFUl9BVEhFTkFfUkVTVUxUU30vKmAsXG4gICAgICAgICAgZXhwaXJhdGlvbjogRHVyYXRpb24uZGF5cyg3KSxcbiAgICAgICAgfSk7XG4gICAgICAgICovXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVXb3JrZ3JvdXAoKTogQ2ZuV29ya0dyb3VwIHtcbiAgICAgICAgY29uc3Qgd29ya2dyb3VwTmFtZSA9IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0td29ya2dyb3VwYDtcblxuICAgICAgICAvLyBkdWUgdG8gYSBjdXJyZW50IGJ1ZywgdGhlIHRhZ3MgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkIHRvIHRoZSB3b3JrZ3JvdXBcbiAgICAgICAgLy8gbm90ZSwgdGhhdCB0aGUga2V5cyBtdXN0IGJlIGNvbnZlcnRlZCB0byBsb3dlciBjYXNlXG4gICAgICAgIGNvbnN0IHRhZ3M6IENmblRhZ1tdID0gU3RhY2sub2YodGhpcylcbiAgICAgICAgICAgIC50YWdzLnJlbmRlclRhZ3MoKVxuICAgICAgICAgICAgLm1hcCgodGFnOiB7IEtleTogc3RyaW5nOyBWYWx1ZTogc3RyaW5nIH0pID0+ICh7a2V5OiB0YWcuS2V5LCB2YWx1ZTogdGFnLlZhbHVlfSkpO1xuXG4gICAgICAgIHJldHVybiBuZXcgQ2ZuV29ya0dyb3VwKHRoaXMsIHdvcmtncm91cE5hbWUsIHtcbiAgICAgICAgICAgIG5hbWU6IHdvcmtncm91cE5hbWUsXG4gICAgICAgICAgICByZWN1cnNpdmVEZWxldGVPcHRpb246IHRydWUsXG4gICAgICAgICAgICB3b3JrR3JvdXBDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgcHVibGlzaENsb3VkV2F0Y2hNZXRyaWNzRW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVzdWx0Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXRMb2NhdGlvbjogYHMzOi8vJHt0aGlzLmJ1Y2tldC5idWNrZXROYW1lfS8ke0FjY2Vzc0xvZ3NBbmFseXNpcy5BQ0NFU1NfTE9HU19GT0xERVJfQVRIRU5BX1JFU1VMVFN9YCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVuZm9yY2VXb3JrR3JvdXBDb25maWd1cmF0aW9uOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGFncyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVHbHVlRGF0YWJhc2UoKTogRGF0YWJhc2Uge1xuICAgICAgICBjb25zdCBkYXRhYmFzZU5hbWUgPSBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWRhdGFiYXNlYDtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRhYmFzZSh0aGlzLCBkYXRhYmFzZU5hbWUsIHtcbiAgICAgICAgICAgIC8vIEF0aGVuYSBkb2Vzbid0IHN1cHBvcnQgZGFzaGVzIGluIGRhdGFiYXNlL3RhYmxlIG5hbWVzXG4gICAgICAgICAgICBkYXRhYmFzZU5hbWU6IGRhdGFiYXNlTmFtZS5yZXBsYWNlKC8tL2csICdfJyksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBjcmVhdGVBY2Nlc3NMb2dzQnlEYXRlVGFibGUoKTogQ2xvdWRGcm9udEFjY2Vzc0xvZ3NCeURhdGVUYWJsZTtcblxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBjcmVhdGVBY2Nlc3NMb2dzUGFycXVldFRhYmxlKCk6IENsb3VkRnJvbnRBY2Nlc3NMb2dzQnlEYXRlVGFibGU7XG5cbiAgICAvKipcbiAgICAgKiBBIExhbWJkYSBmdW5jdGlvbiB0byBiZSB0cmlnZ2VyZWQgd2hlbmV2ZXIgYSBuZXcgYWNjZXNzIGxvZyBpcyBjcmVhdGVkLlxuICAgICAqIEl0IG1vdmVzIHRoZSByYXcgYWNjZXNzIGxvZ3MgaW50byBhIHN1YiBmb2xkZXIgaGllcmFyY2h5IGJ5IHllYXIsIG1vbnRoLCBkYXkgYW5kIGhvdXIuXG4gICAgICogTm90ZSB0aGF0IHdlIHVzZSB0aGUgYnVuZGxlZCBBV1MgU0RLIGZvciBOb2RlIHRvIGF2b2lkIHRoZSBuZWVkIGZvciBhIGN1c3RvbSBsYXllclxuICAgICAqIHdoaWNoIHJlc3RyaWN0cyB0aGUgY29uc3VtZXIgdG8gYSBzcGVjaWZpYyB5YXJuIG9yIG5wbSB2ZXJzaW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlR3JvdXBCeURhdGVMYW1iZGEoKTogRnVuY3Rpb24ge1xuICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWdyb3VwZXJgO1xuXG4gICAgICAgIGNvbnN0IGdyb3VwQnlEYXRlTG9nR3JvdXAgPSBuZXcgTG9nR3JvdXAodGhpcywgYCR7ZnVuY3Rpb25OYW1lfS1sb2dzYCwge1xuICAgICAgICAgICAgbG9nR3JvdXBOYW1lOiBgL2F3cy9sYW1iZGEvJHtmdW5jdGlvbk5hbWV9YCxcbiAgICAgICAgICAgIHJldGVudGlvbjogUmV0ZW50aW9uRGF5cy5UV09fV0VFS1MsXG4gICAgICAgIH0pO1xuICAgICAgICBncm91cEJ5RGF0ZUxvZ0dyb3VwLmFwcGx5UmVtb3ZhbFBvbGljeShSZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuXG4gICAgICAgIGNvbnN0IGxhbWJkYSA9IG5ldyBGdW5jdGlvbih0aGlzLCBmdW5jdGlvbk5hbWUsIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgICAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIwX1gsXG4gICAgICAgICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vLi4vZnVuY3Rpb25zL2FjY2Vzcy1sb2dzLWFuYWx5c2lzL2dyb3VwLWJ5LWRhdGUvYnVpbGQvYXBwJyksIHtcbiAgICAgICAgICAgICAgICBleGNsdWRlOiBbJyouZC50cyddXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1lbW9yeVNpemU6IDUxMixcbiAgICAgICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMjApLFxuICAgICAgICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgICAgICAgZXZlbnRzOiBbXG4gICAgICAgICAgICAgICAgbmV3IFMzRXZlbnRTb3VyY2UodGhpcy5idWNrZXQsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRzOiBbRXZlbnRUeXBlLk9CSkVDVF9DUkVBVEVEXSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogW3RoaXMuZ2V0VW5wcm9jZXNzZWRPYmplY3RzRmlsdGVyKCldLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgICAgICAgQVdTX05PREVKU19DT05ORUNUSU9OX1JFVVNFX0VOQUJMRUQ6ICcxJyxcbiAgICAgICAgICAgICAgICBOT0RFX09QVElPTlM6ICctLWVuYWJsZS1zb3VyY2UtbWFwcycsXG4gICAgICAgICAgICAgICAgVEFSR0VUX0ZPTERFUjogQWNjZXNzTG9nc0FuYWx5c2lzLkFDQ0VTU19MT0dTX0ZPTERFUl9HUk9VUEVEX0JZX0RBVEUsXG4gICAgICAgICAgICAgICAgUkFXX0FDQ0VTU19MT0dfRklMRV9QQVRURVJOOiB0aGlzLmdldFJhd0FjY2Vzc0xvZ0ZpbGVQYXR0ZXJuKCkuc291cmNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxvZ0dyb3VwOiBncm91cEJ5RGF0ZUxvZ0dyb3VwLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmJ1Y2tldC5ncmFudFJlYWRXcml0ZShsYW1iZGEpO1xuICAgICAgICB0aGlzLmJ1Y2tldC5ncmFudERlbGV0ZShsYW1iZGEsIGAke0FjY2Vzc0xvZ3NBbmFseXNpcy5BQ0NFU1NfTE9HU19GT0xERVJfVU5QUk9DRVNTRUR9LypgKTtcblxuICAgICAgICByZXR1cm4gbGFtYmRhO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRVbnByb2Nlc3NlZE9iamVjdHNGaWx0ZXIoKTogTm90aWZpY2F0aW9uS2V5RmlsdGVyO1xuXG4gICAgLyoqIFRoZSBwYXR0ZXJuIHRvIGlkZW50aWZ5IHVucHJvY2Vzc2VkIGFjY2VzcyBsb2dzIGRlcGVuZHMgb24gdGhlIHByb2R1Y2luZyBzb3VyY2UgKi9cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0UmF3QWNjZXNzTG9nRmlsZVBhdHRlcm4oKTogUmVnRXhwO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBwYXJ0aXRpb24gZm9yIHRoZSB1cGNvbWluZyBob3VyIGluIHRoZSBhY2Nlc3MgbG9nIGRhdGFiYXNlLlxuICAgICAqIE5vdGUgdGhhdCB3ZSB1c2UgdGhlIGJ1bmRsZWQgQVdTIFNESyBmb3IgTm9kZSB0byBhdm9pZCB0aGUgbmVlZCBmb3IgYSBjdXN0b20gbGF5ZXJcbiAgICAgKiB3aGljaCByZXN0cmljdHMgdGhlIGNvbnN1bWVyIHRvIGEgc3BlY2lmaWMgeWFybiBvciBucG0gdmVyc2lvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUNyZWF0ZVBhcnRpdGlvbkxhbWJkYSgpOiBGdW5jdGlvbiB7XG4gICAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tcGFydGl0aW9uZXJgO1xuXG4gICAgICAgIGNvbnN0IGNyZWF0ZVBhcnRMb2dHcm91cCA9IG5ldyBMb2dHcm91cCh0aGlzLCBgJHtmdW5jdGlvbk5hbWV9LWxvZ3NgLCB7XG4gICAgICAgICAgICBsb2dHcm91cE5hbWU6IGAvYXdzL2xhbWJkYS8ke2Z1bmN0aW9uTmFtZX1gLFxuICAgICAgICAgICAgcmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLlRXT19XRUVLUyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNyZWF0ZVBhcnRMb2dHcm91cC5hcHBseVJlbW92YWxQb2xpY3koUmVtb3ZhbFBvbGljeS5ERVNUUk9ZKTtcblxuICAgICAgICBjb25zdCBsYW1iZGEgPSBuZXcgRnVuY3Rpb24odGhpcywgZnVuY3Rpb25OYW1lLCB7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICAgICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uLy4uL2Z1bmN0aW9ucy9hY2Nlc3MtbG9ncy1hbmFseXNpcy9wYXJ0aXRpb25pbmcvYnVpbGQvYXBwJyksIHtcbiAgICAgICAgICAgICAgICBleGNsdWRlOiBbJyouZC50cyddXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1lbW9yeVNpemU6IDEyOCxcbiAgICAgICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMjApLFxuICAgICAgICAgICAgaGFuZGxlcjogJ2NyZWF0ZS1wYXJ0aXRpb24uaGFuZGxlcicsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAgICAgICAgIEFXU19OT0RFSlNfQ09OTkVDVElPTl9SRVVTRV9FTkFCTEVEOiAnMScsXG4gICAgICAgICAgICAgICAgTk9ERV9PUFRJT05TOiAnLS1lbmFibGUtc291cmNlLW1hcHMnLFxuICAgICAgICAgICAgICAgIFdPUktHUk9VUDogdGhpcy53b3JrZ3JvdXAubmFtZSxcbiAgICAgICAgICAgICAgICBEQVRBQkFTRTogdGhpcy5kYXRhYmFzZS5kYXRhYmFzZU5hbWUsXG4gICAgICAgICAgICAgICAgVEFCTEU6IHRoaXMuYWNjZXNzTG9nc0J5RGF0ZVRhYmxlLnRhYmxlTmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsb2dHcm91cDogY3JlYXRlUGFydExvZ0dyb3VwLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBncmFudCBhY2Nlc3MgdG8gUzMgYnVja2V0IGFuZCB0byBleGVjdXRlIEF0aGVuYSBxdWVyaWVzIHdoaWNoIGNyZWF0ZSBuZXcgcGFydGl0aW9uc1xuICAgICAgICB0aGlzLmJ1Y2tldC5ncmFudFJlYWRXcml0ZShsYW1iZGEpO1xuICAgICAgICBsYW1iZGEuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOlN0YXJ0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldFF1ZXJ5RXhlY3V0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ2dsdWU6Q3JlYXRlRGF0YWJhc2UnLFxuICAgICAgICAgICAgICAgICAgICAnZ2x1ZTpDcmVhdGVQYXJ0aXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnZ2x1ZTpHZXREYXRhYmFzZScsXG4gICAgICAgICAgICAgICAgICAgICdnbHVlOkdldFRhYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2dsdWU6QmF0Y2hDcmVhdGVQYXJ0aXRpb24nLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGxhbWJkYTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFuc2Zvcm1zIHBhcnRpdGlvbnMgZnJvbSB0aGUgSGl2ZSBmb3JtYXQgdG8gUGFycXVldC5cbiAgICAgKiBOb3RlIHRoYXQgd2UgdXNlIHRoZSBidW5kbGVkIEFXUyBTREsgZm9yIE5vZGUgdG8gYXZvaWQgdGhlIG5lZWQgZm9yIGEgY3VzdG9tIGxheWVyXG4gICAgICogd2hpY2ggcmVzdHJpY3RzIHRoZSBjb25zdW1lciB0byBhIHNwZWNpZmljIHlhcm4gb3IgbnBtIHZlcnNpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVUcmFuc2Zvcm1QYXJ0aXRpb25MYW1iZGEoKTogRnVuY3Rpb24ge1xuICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LXRyYW5zZm9ybWVyYDtcblxuICAgICAgICBjb25zdCB0cmFuc2Zvcm1QYXJ0TG9nR3JvdXAgPSBuZXcgTG9nR3JvdXAodGhpcywgYCR7ZnVuY3Rpb25OYW1lfS1sb2dzYCwge1xuICAgICAgICAgICAgbG9nR3JvdXBOYW1lOiBgL2F3cy9sYW1iZGEvJHtmdW5jdGlvbk5hbWV9YCxcbiAgICAgICAgICAgIHJldGVudGlvbjogUmV0ZW50aW9uRGF5cy5UV09fV0VFS1MsXG4gICAgICAgIH0pO1xuICAgICAgICB0cmFuc2Zvcm1QYXJ0TG9nR3JvdXAuYXBwbHlSZW1vdmFsUG9saWN5KFJlbW92YWxQb2xpY3kuREVTVFJPWSk7XG5cbiAgICAgICAgY29uc3QgbGFtYmRhID0gbmV3IEZ1bmN0aW9uKHRoaXMsIGZ1bmN0aW9uTmFtZSwge1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgICAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi9mdW5jdGlvbnMvYWNjZXNzLWxvZ3MtYW5hbHlzaXMvcGFydGl0aW9uaW5nL2J1aWxkL2FwcCcpLCB7XG4gICAgICAgICAgICAgICAgZXhjbHVkZTogWydjcmVhdGUtcGFydGl0aW9uKicsICcqLmQudHMnXVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtZW1vcnlTaXplOiAxMjgsXG4gICAgICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDIwKSxcbiAgICAgICAgICAgIGhhbmRsZXI6ICd0cmFuc2Zvcm0tcGFydGl0aW9uLmhhbmRsZXInLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICAgICAgICBBV1NfTk9ERUpTX0NPTk5FQ1RJT05fUkVVU0VfRU5BQkxFRDogJzEnLFxuICAgICAgICAgICAgICAgIE5PREVfT1BUSU9OUzogJy0tZW5hYmxlLXNvdXJjZS1tYXBzJyxcbiAgICAgICAgICAgICAgICBXT1JLR1JPVVA6IHRoaXMud29ya2dyb3VwLm5hbWUsXG4gICAgICAgICAgICAgICAgREFUQUJBU0U6IHRoaXMuZGF0YWJhc2UuZGF0YWJhc2VOYW1lLFxuICAgICAgICAgICAgICAgIFNPVVJDRV9UQUJMRTogdGhpcy5hY2Nlc3NMb2dzQnlEYXRlVGFibGUudGFibGVOYW1lLFxuICAgICAgICAgICAgICAgIFRBUkdFVF9UQUJMRTogdGhpcy5hY2Nlc3NMb2dzUGFycXVldFRhYmxlLnRhYmxlTmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsb2dHcm91cDogdHJhbnNmb3JtUGFydExvZ0dyb3VwLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBncmFudCBhY2Nlc3MgdG8gUzMgYnVja2V0IGFuZCB0byBleGVjdXRlIEF0aGVuYSBxdWVyaWVzIHdoaWNoIGNyZWF0ZSBuZXcgcGFydGl0aW9uc1xuICAgICAgICB0aGlzLmJ1Y2tldC5ncmFudFJlYWRXcml0ZShsYW1iZGEpO1xuICAgICAgICBsYW1iZGEuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOlN0YXJ0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldFF1ZXJ5RXhlY3V0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ2dsdWU6Q3JlYXRlRGF0YWJhc2UnLFxuICAgICAgICAgICAgICAgICAgICAnZ2x1ZTpDcmVhdGVQYXJ0aXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnZ2x1ZTpHZXREYXRhYmFzZScsXG4gICAgICAgICAgICAgICAgICAgICdnbHVlOkdldFRhYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2dsdWU6QmF0Y2hDcmVhdGVQYXJ0aXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnZ2x1ZTpHZXRQYXJ0aXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnZ2x1ZTpHZXRQYXJ0aXRpb25zJyxcbiAgICAgICAgICAgICAgICAgICAgJ2dsdWU6Q3JlYXRlVGFibGUnLFxuICAgICAgICAgICAgICAgICAgICAnZ2x1ZTpEZWxldGVUYWJsZScsXG4gICAgICAgICAgICAgICAgICAgICdnbHVlOkRlbGV0ZVBhcnRpdGlvbicsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gbGFtYmRhO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQ3JlYXRlUGFydGl0aW9uc1NjaGVkdWxlcigpOiBSdWxlIHtcbiAgICAgICAgY29uc3QgcnVsZU5hbWUgPSBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWNyZWF0ZS1wYXJ0LXNjaGVkYDtcbiAgICAgICAgcmV0dXJuIG5ldyBSdWxlKHRoaXMsIHJ1bGVOYW1lLCB7XG4gICAgICAgICAgICBydWxlTmFtZSxcbiAgICAgICAgICAgIHNjaGVkdWxlOiBTY2hlZHVsZS5jcm9uKHttaW51dGU6ICc1NSd9KSxcbiAgICAgICAgICAgIHRhcmdldHM6IFtuZXcgTGFtYmRhRnVuY3Rpb24odGhpcy5jcmVhdGVQYXJ0aXRpb25MYW1iZGEsIHtyZXRyeUF0dGVtcHRzOiAxMH0pXSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVUcmFuc2Zvcm1QYXJ0aXRpb25zU2NoZWR1bGVyKHByb3BzOiBBY2Nlc3NMb2dzQW5hbHlzaXNQcm9wcyk6IFJ1bGUge1xuICAgICAgICBjb25zdCBydWxlTmFtZSA9IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tdHJhbnNmb3JtLXBhcnQtc2NoZWRgO1xuICAgICAgICByZXR1cm4gbmV3IFJ1bGUodGhpcywgcnVsZU5hbWUsIHtcbiAgICAgICAgICAgIHJ1bGVOYW1lLFxuICAgICAgICAgICAgc2NoZWR1bGU6IFNjaGVkdWxlLmNyb24oe21pbnV0ZTogJzEnfSksXG4gICAgICAgICAgICB0YXJnZXRzOiBbXG4gICAgICAgICAgICAgICAgbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMudHJhbnNmb3JtUGFydGl0aW9uTGFtYmRhLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiB0aGlzLmdldFRyYW5zZm9ybVBhcnRpdGlvbkludm9jYXRpb25Qcm9wcyhwcm9wcyksXG4gICAgICAgICAgICAgICAgICAgIHJldHJ5QXR0ZW1wdHM6IDEwLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUcmFuc2Zvcm1QYXJ0aXRpb25JbnZvY2F0aW9uUHJvcHMocHJvcHM6IEFjY2Vzc0xvZ3NBbmFseXNpc1Byb3BzKTogUnVsZVRhcmdldElucHV0IHtcbiAgICAgICAgcmV0dXJuIFJ1bGVUYXJnZXRJbnB1dC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgIGNvbHVtbk5hbWVzOiBbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5hY2Nlc3NMb2dzUGFycXVldFRhYmxlLmNvbHVtbnMsXG4gICAgICAgICAgICAgICAgLi4uKHRoaXMuYWNjZXNzTG9nc1BhcnF1ZXRUYWJsZS5wYXJ0aXRpb25LZXlzIGFzIENvbHVtbltdKSxcbiAgICAgICAgICAgIF0ubWFwKGNvbHVtbiA9PiBjb2x1bW4ubmFtZSksXG4gICAgICAgICAgICBjb2x1bW5UcmFuc2Zvcm1hdGlvbnM6IHRoaXMuZ2V0Q29sdW1uVHJhbnNmb3JtYXRpb25SdWxlcyhwcm9wcyksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5lZWRzIHRvIHJldHVybiB0aGUgbG9nIHNvdXJjZSBzcGVjaWZpYyBjb2x1bW4gdHJhbnNmb3JtYXRpb24gcnVsZXNcbiAgICAgKiAoZS5nLiB0byBhbm9ueW1pemUgSVAgYWRkcmVzc2VzKS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0Q29sdW1uVHJhbnNmb3JtYXRpb25SdWxlcyhwcm9wczogQWNjZXNzTG9nc0FuYWx5c2lzUHJvcHMpOiBDb2x1bW5UcmFuc2Zvcm1hdGlvblJ1bGVzO1xufVxuIl19
|
|
@@ -127,7 +127,7 @@ export abstract class AccessLogsAnalysis extends Construct {
|
|
|
127
127
|
* which restricts the consumer to a specific yarn or npm version.
|
|
128
128
|
*/
|
|
129
129
|
private createGroupByDateLambda(): Function {
|
|
130
|
-
const functionName = `${this.resourceIdPrefix}-
|
|
130
|
+
const functionName = `${this.resourceIdPrefix}-grouper`;
|
|
131
131
|
|
|
132
132
|
const groupByDateLogGroup = new LogGroup(this, `${functionName}-logs`, {
|
|
133
133
|
logGroupName: `/aws/lambda/${functionName}`,
|
|
@@ -177,7 +177,7 @@ export abstract class AccessLogsAnalysis extends Construct {
|
|
|
177
177
|
* which restricts the consumer to a specific yarn or npm version.
|
|
178
178
|
*/
|
|
179
179
|
private createCreatePartitionLambda(): Function {
|
|
180
|
-
const functionName = `${this.resourceIdPrefix}-
|
|
180
|
+
const functionName = `${this.resourceIdPrefix}-partitioner`;
|
|
181
181
|
|
|
182
182
|
const createPartLogGroup = new LogGroup(this, `${functionName}-logs`, {
|
|
183
183
|
logGroupName: `/aws/lambda/${functionName}`,
|
|
@@ -232,7 +232,7 @@ export abstract class AccessLogsAnalysis extends Construct {
|
|
|
232
232
|
* which restricts the consumer to a specific yarn or npm version.
|
|
233
233
|
*/
|
|
234
234
|
private createTransformPartitionLambda(): Function {
|
|
235
|
-
const functionName = `${this.resourceIdPrefix}-
|
|
235
|
+
const functionName = `${this.resourceIdPrefix}-transformer`;
|
|
236
236
|
|
|
237
237
|
const transformPartLogGroup = new LogGroup(this, `${functionName}-logs`, {
|
|
238
238
|
logGroupName: `/aws/lambda/${functionName}`,
|
|
@@ -154,6 +154,7 @@ export declare class NuxtServerAppStack extends Stack {
|
|
|
154
154
|
private createNuxtAppCachePolicy;
|
|
155
155
|
/**
|
|
156
156
|
* Creates an origin request policy for the Nuxt app route behavior of the CloudFront distribution.
|
|
157
|
+
* No policy is created if no explicit config is provided.
|
|
157
158
|
*/
|
|
158
159
|
private createNuxtAppRequestPolicy;
|
|
159
160
|
/**
|
|
@@ -119,7 +119,7 @@ class NuxtServerAppStack extends aws_cdk_lib_1.Stack {
|
|
|
119
119
|
*/
|
|
120
120
|
createAppLambdaFunction(props) {
|
|
121
121
|
var _a, _b, _c, _d;
|
|
122
|
-
const funcName = `${this.resourceIdPrefix}-
|
|
122
|
+
const funcName = `${this.resourceIdPrefix}-nuxt`;
|
|
123
123
|
const appLogGroup = new aws_logs_1.LogGroup(this, `${funcName}-logs`, {
|
|
124
124
|
logGroupName: `/aws/lambda/${funcName}`,
|
|
125
125
|
retention: aws_logs_1.RetentionDays.ONE_MONTH,
|
|
@@ -152,7 +152,7 @@ class NuxtServerAppStack extends aws_cdk_lib_1.Stack {
|
|
|
152
152
|
*/
|
|
153
153
|
createCleanupLambdaFunction(props) {
|
|
154
154
|
var _a;
|
|
155
|
-
const functionName = `${this.resourceIdPrefix}-cleanup
|
|
155
|
+
const functionName = `${this.resourceIdPrefix}-cleanup`;
|
|
156
156
|
const functionDirPath = path.join(__dirname, '../../functions/assets-cleanup');
|
|
157
157
|
const cleanupLogGroup = new aws_logs_1.LogGroup(this, `${functionName}-logs`, {
|
|
158
158
|
logGroupName: `/aws/lambda/${functionName}`,
|
|
@@ -310,15 +310,21 @@ class NuxtServerAppStack extends aws_cdk_lib_1.Stack {
|
|
|
310
310
|
}
|
|
311
311
|
/**
|
|
312
312
|
* Creates an origin request policy for the Nuxt app route behavior of the CloudFront distribution.
|
|
313
|
+
* No policy is created if no explicit config is provided.
|
|
313
314
|
*/
|
|
314
315
|
createNuxtAppRequestPolicy(props) {
|
|
315
|
-
var _a, _b, _c;
|
|
316
|
+
var _a, _b, _c, _d, _e, _f;
|
|
317
|
+
// If no explicit config is provided, we want to use the default from Cloudfront
|
|
318
|
+
const hasAnyConfig = ((_a = props.forwardQueryParams) === null || _a === void 0 ? void 0 : _a.length) || ((_b = props.forwardHeaders) === null || _b === void 0 ? void 0 : _b.length) || ((_c = props.forwardCookies) === null || _c === void 0 ? void 0 : _c.length);
|
|
319
|
+
if (!hasAnyConfig) {
|
|
320
|
+
return undefined;
|
|
321
|
+
}
|
|
316
322
|
return new aws_cloudfront_1.OriginRequestPolicy(this, `${this.resourceIdPrefix}-request-policy`, {
|
|
317
323
|
originRequestPolicyName: `${this.resourceIdPrefix}-cdn-request-policy`,
|
|
318
324
|
comment: `Defines which request data to pass to the ${this.resourceIdPrefix} origin without affecting the cache key.`,
|
|
319
|
-
queryStringBehavior: ((
|
|
320
|
-
headerBehavior: ((
|
|
321
|
-
cookieBehavior: ((
|
|
325
|
+
queryStringBehavior: ((_d = props.forwardQueryParams) === null || _d === void 0 ? void 0 : _d.length) ? aws_cloudfront_1.OriginRequestQueryStringBehavior.allowList(...props.forwardQueryParams) : aws_cloudfront_1.OriginRequestQueryStringBehavior.all(),
|
|
326
|
+
headerBehavior: ((_e = props.forwardHeaders) === null || _e === void 0 ? void 0 : _e.length) ? aws_cloudfront_1.OriginRequestHeaderBehavior.allowList(...props.forwardHeaders) : aws_cloudfront_1.OriginRequestHeaderBehavior.none(),
|
|
327
|
+
cookieBehavior: ((_f = props.forwardCookies) === null || _f === void 0 ? void 0 : _f.length) ? aws_cloudfront_1.OriginRequestCookieBehavior.allowList(...props.forwardCookies) : aws_cloudfront_1.OriginRequestCookieBehavior.none(),
|
|
322
328
|
});
|
|
323
329
|
}
|
|
324
330
|
/**
|
|
@@ -399,6 +405,11 @@ class NuxtServerAppStack extends aws_cdk_lib_1.Stack {
|
|
|
399
405
|
* but gets cleaned up after a specified period of time via the cleanup Lambda function.
|
|
400
406
|
*/
|
|
401
407
|
configureDeployments() {
|
|
408
|
+
const logGroup = new aws_logs_1.LogGroup(this, `${this.resourceIdPrefix}-assets-deployment-logs`, {
|
|
409
|
+
logGroupName: `/aws/lambda/${this.resourceIdPrefix}-assets-deployment`,
|
|
410
|
+
retention: aws_logs_1.RetentionDays.ONE_DAY,
|
|
411
|
+
removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY,
|
|
412
|
+
});
|
|
402
413
|
// Returns a deployment for every configured static asset type to respect the different cache settings
|
|
403
414
|
return this.staticAssetConfigs.filter(asset => (0, fs_1.existsSync)(asset.source)).map((asset, assetIndex) => {
|
|
404
415
|
return new aws_s3_deployment_1.BucketDeployment(this, `${this.resourceIdPrefix}-assets-deployment-${assetIndex}`, {
|
|
@@ -415,7 +426,7 @@ class NuxtServerAppStack extends aws_cdk_lib_1.Stack {
|
|
|
415
426
|
contentType: asset.contentType,
|
|
416
427
|
distribution: asset.invalidateOnChange ? this.cdn : undefined,
|
|
417
428
|
distributionPaths: asset.invalidateOnChange ? [`/${asset.pattern}`] : undefined,
|
|
418
|
-
|
|
429
|
+
logGroup: logGroup,
|
|
419
430
|
metadata: {
|
|
420
431
|
// Store build revision on every asset to allow cleanup of outdated assets
|
|
421
432
|
revision: this.deploymentRevision,
|
|
@@ -536,4 +547,4 @@ class NuxtServerAppStack extends aws_cdk_lib_1.Stack {
|
|
|
536
547
|
}
|
|
537
548
|
}
|
|
538
549
|
exports.NuxtServerAppStack = NuxtServerAppStack;
|
|
539
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTnV4dFNlcnZlckFwcFN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiTnV4dFNlcnZlckFwcFN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUEyRDtBQUUzRCwrRUFBK0Q7QUFDL0QsK0RBZW9DO0FBQ3BDLHVEQUFzRjtBQUN0RiwrQ0FNNEI7QUFDNUIseURBQXdHO0FBQ3hHLHFFQUFxRjtBQUNyRiwrRUFBOEU7QUFDOUUseUVBQWlFO0FBQ2pFLG1EQUErRDtBQUMvRCxnRUFBNEY7QUFDNUYsdURBQXVFO0FBQ3ZFLHVFQUE4RDtBQUM5RCw2QkFBNkI7QUFDN0IsMkJBQXdEO0FBRXhELHVHQUFrRztBQUNsRyw2RkFBZ0Y7QUFDaEYsbUVBQTJHO0FBRTNHOztHQUVHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSxtQkFBSztJQWtHekMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE4Qjs7UUFDcEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVqRixxQkFBcUI7UUFDckIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBQSxrREFBNEIsRUFBQyxNQUFBLEtBQUssQ0FBQyxPQUFPLG1DQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFFMUQsSUFBSSxLQUFLLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNq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QUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRTlDLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxLQUE4QjtRQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxPQUFPLElBQUksMkRBQTRCLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQix1QkFBdUIsRUFBRTtZQUMzRixNQUFNLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUM3QixjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLGNBQWM7WUFDdEQsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtTQUMzQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUE3cEJELGdEQTZwQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0R1cmF0aW9uLCBSZW1vdmFsUG9saWN5LCBTdGFja30gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHtDb25zdHJ1Y3R9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHtDZXJ0aWZpY2F0ZX0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXJcIjtcbmltcG9ydCB7XG4gICAgQWxsb3dlZE1ldGhvZHMsXG4gICAgdHlwZSBCZWhhdmlvck9wdGlvbnMsXG4gICAgQ2FjaGVDb29raWVCZWhhdmlvcixcbiAgICBDYWNoZWRNZXRob2RzLFxuICAgIENhY2hlSGVhZGVyQmVoYXZpb3IsXG4gICAgQ2FjaGVQb2xpY3ksXG4gICAgQ2FjaGVRdWVyeVN0cmluZ0JlaGF2aW9yLFxuICAgIERpc3RyaWJ1dGlvbiwgSHR0cFZlcnNpb24sXG4gICAgdHlwZSBJT3JpZ2luQWNjZXNzSWRlbnRpdHksXG4gICAgT3JpZ2luQWNjZXNzSWRlbnRpdHksXG4gICAgT3JpZ2luUHJvdG9jb2xQb2xpY3ksIE9yaWdpblJlcXVlc3RQb2xpY3ksXG4gICAgUHJpY2VDbGFzcyxcbiAgICBTZWN1cml0eVBvbGljeVByb3RvY29sLFxuICAgIFZpZXdlclByb3RvY29sUG9saWN5LE9yaWdpblJlcXVlc3RDb29raWVCZWhhdmlvciwgT3JpZ2luUmVxdWVzdEhlYWRlckJlaGF2aW9yLCBPcmlnaW5SZXF1ZXN0UXVlcnlTdHJpbmdCZWhhdmlvclxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnRcIjtcbmltcG9ydCB7QXJjaGl0ZWN0dXJlLCBDb2RlLCBGdW5jdGlvbiwgUnVudGltZSwgVHJhY2luZ30gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7XG4gICAgQmxvY2tQdWJsaWNBY2Nlc3MsXG4gICAgQnVja2V0LFxuICAgIEJ1Y2tldEFjY2Vzc0NvbnRyb2wsXG4gICAgQnVja2V0RW5jcnlwdGlvbixcbiAgICBPYmplY3RPd25lcnNoaXBcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHtBYWFhUmVjb3JkLCBBUmVjb3JkLCBIb3N0ZWRab25lLCB0eXBlIElIb3N0ZWRab25lLCBSZWNvcmRUYXJnZXR9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1M1wiO1xuaW1wb3J0IHtCdWNrZXREZXBsb3ltZW50LCBTb3VyY2UsIFN0b3JhZ2VDbGFzc30gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zMy1kZXBsb3ltZW50XCI7XG5pbXBvcnQge0h0dHBPcmlnaW4sIFMzQnVja2V0T3JpZ2lufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQtb3JpZ2luc1wiO1xuaW1wb3J0IHtDbG91ZEZyb250VGFyZ2V0fSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTMtdGFyZ2V0c1wiO1xuaW1wb3J0IHsgTG9nR3JvdXAsIFJldGVudGlvbkRheXMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIjtcbmltcG9ydCB7Z2V0TnV4dEFwcFN0YXRpY0Fzc2V0Q29uZmlncywgdHlwZSBTdGF0aWNBc3NldENvbmZpZ30gZnJvbSBcIi4uL051eHRBcHBTdGF0aWNBc3NldHNcIjtcbmltcG9ydCB7UnVsZSwgUnVsZVRhcmdldElucHV0LCBTY2hlZHVsZX0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHNcIjtcbmltcG9ydCB7TGFtYmRhRnVuY3Rpb259IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7d3JpdGVGaWxlU3luYywgbWtkaXJTeW5jLCBleGlzdHNTeW5jfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7dHlwZSBOdXh0U2VydmVyQXBwU3RhY2tQcm9wc30gZnJvbSBcIi4vTnV4dFNlcnZlckFwcFN0YWNrUHJvcHNcIjtcbmltcG9ydCB7Q2xvdWRGcm9udEFjY2Vzc0xvZ3NBbmFseXNpc30gZnJvbSBcIi4uL2FjY2Vzcy1sb2dzLWFuYWx5c2lzL0Nsb3VkRnJvbnRBY2Nlc3NMb2dzQW5hbHlzaXNcIjtcbmltcG9ydCB7SHR0cExhbWJkYUludGVncmF0aW9ufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXl2Mi1pbnRlZ3JhdGlvbnNcIjtcbmltcG9ydCB7RG9tYWluTmFtZSwgRW5kcG9pbnRUeXBlLCBIdHRwQXBpLCBIdHRwTWV0aG9kLCBTZWN1cml0eVBvbGljeX0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5djJcIjtcblxuLyoqXG4gKiBDREsgc3RhY2sgdG8gZGVwbG95IGEgZHluYW1pYyBOdXh0IGFwcCAodGFyZ2V0PXNlcnZlcikgb24gQVdTIHdpdGggTGFtYmRhLCBBcGlHYXRld2F5LCBTMyBhbmQgQ2xvdWRGcm9udC5cbiAqL1xuZXhwb3J0IGNsYXNzIE51eHRTZXJ2ZXJBcHBTdGFjayBleHRlbmRzIFN0YWNrIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpZGVudGlmaWVyIHByZWZpeCBvZiB0aGUgcmVzb3VyY2VzIGNyZWF0ZWQgYnkgdGhlIHN0YWNrLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlSWRQcmVmaXg6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudCBkZXBsb3ltZW50IHRoYXQgaXMgdXNlZCB0byB0YWcgdGhlIHN0YXRpYyBhc3NldHMgb2YgdGhlIGRlcGxveW1lbnRcbiAgICAgKiB0byBsYXRlciBiZSBhYmxlIHRvIGNsZWFuIHVwIG91dGRhdGVkIGFzc2V0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXBsb3ltZW50UmV2aXNpb246IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBpZGVudGl0eSB0byB1c2UgZm9yIGFjY2Vzc2luZyB0aGUgZGVwbG95bWVudCBhc3NldHMgb24gUzMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RuQWNjZXNzSWRlbnRpdHk6IElPcmlnaW5BY2Nlc3NJZGVudGl0eTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBTMyBidWNrZXQgd2hlcmUgdGhlIGRlcGxveW1lbnQgYXNzZXRzIGdldHMgc3RvcmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWNBc3NldHNCdWNrZXQ6IEJ1Y2tldDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBTMyBidWNrZXQgd2hlcmUgdGhlIGFjY2VzcyBsb2dzIG9mIHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBnZXRzIHN0b3JlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWNjZXNzTG9nc0J1Y2tldDogQnVja2V0fHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBTMyBidWNrZXQgd2hlcmUgdGhlIHNpdGVtYXAgYXNzZXRzIGdldHMgc3RvcmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBzaXRlbWFwQnVja2V0OiBCdWNrZXR8dW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogVGhlIExhbWJkYSBmdW5jdGlvbiB0byByZW5kZXIgdGhlIE51eHQgYXBwIG9uIHRoZSBzZXJ2ZXIgc2lkZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBhcHBMYW1iZGFGdW5jdGlvbjogRnVuY3Rpb247XG5cbiAgICAvKipcbiAgICAgKiBUaGUgTGFtYmRhIGZ1bmN0aW9uIHRoYXQgY2xlYW51cHMgdGhlIG91dGRhdGVkIHN0YXRpYyBhc3NldHMgb2YgdGhlIE51eHQgYXBwLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNsZWFudXBMYW1iZGFGdW5jdGlvbjogRnVuY3Rpb247XG5cbiAgICAvKipcbiAgICAgKiBUaGUgQVBJIGdhdGV3YXkgdG8gbWFrZSB0aGUgTGFtYmRhIGZ1bmN0aW9uIHRvIHJlbmRlciB0aGUgTnV4dCBhcHAgcHVibGljbHkgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGFwaUdhdGV3YXk6IEh0dHBBcGk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29uZmlncyBmb3IgdGhlIHN0YXRpYyBhc3NldHMgb2YgdGhlIE51eHQgYXBwIHRoYXQgc2hhbGwgYmUgcHVibGljbHkgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpY0Fzc2V0Q29uZmlnczogU3RhdGljQXNzZXRDb25maWdbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBvcmlnaW4gZm9yIHRoZSBBUEkgZ2F0ZXdheSB0byByb3V0ZSBpbmNvbWluZyByZXF1ZXN0cyB0byB0aGUgTnV4dCBMYW1iZGEgZnVuY3Rpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBodHRwT3JpZ2luOiBIdHRwT3JpZ2luO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhY2hlIHBvbGljeSB0aGF0IHNwZWNpZmllcyB3aGljaCBIVFRQIGhlYWRlcnMsIGNvb2tpZXMsIGFuZCBxdWVyeSBzdHJpbmdzXG4gICAgICogQ2xvdWRGcm9udCBmb3J3YXJkcyB0byB0aGUgTnV4dCBhcHAgYW5kIHVzZXMgdG8gZ2VuZXJhdGUgYSBjYWNoZSBrZXkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBhcHBDYWNoZVBvbGljeTogQ2FjaGVQb2xpY3k7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luIHJlcXVlc3QgcG9saWN5IHRoYXQgc3BlY2lmaWVzIHdoaWNoIEhUVFAgaGVhZGVycywgY29va2llcywgYW5kIHF1ZXJ5IHN0cmluZ3NcbiAgICAgKiBDbG91ZEZyb250IGZvcndhcmRzIHRvIHRoZSBOdXh0IGFwcCB3aXRob3V0IGFmZmVjdGluZyB0aGUgY2FjaGUga2V5LlxuICAgICAqL1xuICAgIHByaXZhdGUgYXBwUmVxdWVzdFBvbGljeTogT3JpZ2luUmVxdWVzdFBvbGljeTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiZWhhdmlvciBmb3IgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHRvIHJvdXRlIGluY29taW5nIHdlYiByZXF1ZXN0c1xuICAgICAqIHRvIHRoZSBOdXh0IExhbWJkYSBmdW5jdGlvbiAodmlhIEFQSSBnYXRld2F5KS5cbiAgICAgKi9cbiAgICBwcml2YXRlIG51eHRTZXJ2ZXJSb3V0ZUJlaGF2aW9yOiBCZWhhdmlvck9wdGlvbnM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gdG8gcm91dGUgaW5jb21pbmcgcmVxdWVzdHMgdG8gdGhlIE51eHQgTGFtYmRhIGZ1bmN0aW9uICh2aWEgdGhlIEFQSSBnYXRld2F5KVxuICAgICAqIG9yIHRoZSBTMyBhc3NldHMgZm9sZGVyICh3aXRoIGNhY2hpbmcpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkbjogRGlzdHJpYnV0aW9uO1xuXG4gICAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE51eHRTZXJ2ZXJBcHBTdGFja1Byb3BzKSB7XG4gICAgICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgICAgIHRoaXMucmVzb3VyY2VJZFByZWZpeCA9IGAke3Byb3BzLnByb2plY3R9LSR7cHJvcHMuc2VydmljZX0tJHtwcm9wcy5lbnZpcm9ubWVudH1gO1xuXG4gICAgICAgIC8vIE51eHQgYXBwIHJlc291cmNlc1xuICAgICAgICB0aGlzLmRlcGxveW1lbnRSZXZpc2lvbiA9IHRoaXMuY3JlYXRlRGVwbG95bWVudFJldmlzaW9uKHByb3BzKTtcbiAgICAgICAgdGhpcy5zdGF0aWNBc3NldENvbmZpZ3MgPSBnZXROdXh0QXBwU3RhdGljQXNzZXRDb25maWdzKHByb3BzLnJvb3REaXIgPz8gJy4nKTtcbiAgICAgICAgdGhpcy5jZG5BY2Nlc3NJZGVudGl0eSA9IHRoaXMuY3JlYXRlQ2RuQWNjZXNzSWRlbnRpdHkoKTtcbiAgICAgICAgdGhpcy5zdGF0aWNBc3NldHNCdWNrZXQgPSB0aGlzLmNyZWF0ZVN0YXRpY0Fzc2V0c0J1Y2tldCgpO1xuXG4gICAgICAgIGlmIChwcm9wcy5lbmFibGVBY2Nlc3NMb2dzQW5hbHlzaXMpIHtcbiAgICAgICAgICAgIHRoaXMuYWNjZXNzTG9nc0J1Y2tldCA9IHRoaXMuY3JlYXRlQWNjZXNzTG9nc0J1Y2tldCgpO1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVBY2Nlc3NMb2dzQW5hbHlzaXMocHJvcHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLmVuYWJsZVNpdGVtYXApIHtcbiAgICAgICAgICAgIHRoaXMuc2l0ZW1hcEJ1Y2tldCA9IHRoaXMuY3JlYXRlU2l0ZW1hcEJ1Y2tldCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hcHBMYW1iZGFGdW5jdGlvbiA9IHRoaXMuY3JlYXRlQXBwTGFtYmRhRnVuY3Rpb24ocHJvcHMpO1xuICAgICAgICB0aGlzLmFwaUdhdGV3YXkgPSB0aGlzLmNyZWF0ZUFwaUdhdGV3YXkocHJvcHMpO1xuICAgICAgICB0aGlzLmh0dHBPcmlnaW4gPSB0aGlzLmNyZWF0ZU51eHRBcHBIdHRwT3JpZ2luKCk7XG4gICAgICAgIHRoaXMuYXBwQ2FjaGVQb2xpY3kgPSB0aGlzLmNyZWF0ZU51eHRBcHBDYWNoZVBvbGljeShwcm9wcylcbiAgICAgICAgdGhpcy5hcHBSZXF1ZXN0UG9saWN5ID0gdGhpcy5jcmVhdGVOdXh0QXBwUmVxdWVzdFBvbGljeShwcm9wcylcbiAgICAgICAgdGhpcy5udXh0U2VydmVyUm91dGVCZWhhdmlvciA9IHRoaXMuY3JlYXRlTnV4dFNlcnZlclJvdXRlQmVoYXZpb3IoKVxuICAgICAgICB0aGlzLmNkbiA9IHRoaXMuY3JlYXRlQ2xvdWRGcm9udERpc3RyaWJ1dGlvbihwcm9wcyk7XG4gICAgICAgIHRoaXMuY29uZmlndXJlRGVwbG95bWVudHMoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVEbnNSZWNvcmRzKHByb3BzKTtcbiAgICAgICAgdGhpcy5jcmVhdGVBcHBQaW5nUnVsZShwcm9wcyk7XG5cbiAgICAgICAgLy8gU3RhdGljIGFzc2V0cyBjbGVhbnVwIHJlc291cmNlc1xuICAgICAgICB0aGlzLmNsZWFudXBMYW1iZGFGdW5jdGlvbiA9IHRoaXMuY3JlYXRlQ2xlYW51cExhbWJkYUZ1bmN0aW9uKHByb3BzKTtcbiAgICAgICAgdGhpcy5jcmVhdGVDbGVhbnVwVHJpZ2dlclJ1bGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBjdXJyZW50IGRlcGxveW1lbnQgcmV2aXNpb24gZmlsZSBpbiB0aGUgcHVibGljIGZvbGRlciBvZiB0aGUgTnV4dCBhcHAgdG8gYmUgYWNjZXNzaWJsZVxuICAgICAqIGFuZCByZXR1cm5zIHRoZSBjdXJyZW50IHJldmlzaW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlRGVwbG95bWVudFJldmlzaW9uKHByb3BzOiBOdXh0U2VydmVyQXBwU3RhY2tQcm9wcyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGFwcFJldmlzaW9uID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gICAgICAgIGNvbnN0IGRpciA9IHBhdGguam9pbihwcm9wcy5yb290RGlyID8/ICcuJywgJy5vdXRwdXQnLCAncHVibGljJyk7XG4gICAgICAgIG1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICB3cml0ZUZpbGVTeW5jKHBhdGguam9pbihkaXIsICdhcHAtcmV2aXNpb24nKSwgYXBwUmV2aXNpb24sIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG5cbiAgICAgICAgcmV0dXJuIGFwcFJldmlzaW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgdGhlIGlkZW50aXR5IHRvIGFjY2VzcyB0aGUgUzMgZGVwbG95bWVudCBhc3NldCBmaWxlcyB2aWEgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUNkbkFjY2Vzc0lkZW50aXR5KCk6IElPcmlnaW5BY2Nlc3NJZGVudGl0eSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbkFjY2Vzc0lkZW50aXR5TmFtZSA9IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tY2RuLXMzLWFjY2Vzc2A7XG4gICAgICAgIHJldHVybiBuZXcgT3JpZ2luQWNjZXNzSWRlbnRpdHkodGhpcywgb3JpZ2luQWNjZXNzSWRlbnRpdHlOYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBidWNrZXQgdG8gc3RvcmUgdGhlIHN0YXRpYyBkZXBsb3ltZW50IGFzc2V0IGZpbGVzIG9mIHRoZSBOdXh0IGFwcC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVTdGF0aWNBc3NldHNCdWNrZXQoKTogQnVja2V0IHtcbiAgICAgICAgY29uc3QgYnVja2V0TmFtZSA9IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tYXNzZXRzYDtcbiAgICAgICAgY29uc3QgYnVja2V0ID0gbmV3IEJ1Y2tldCh0aGlzLCBidWNrZXROYW1lLCB7XG4gICAgICAgICAgICBibG9ja1B1YmxpY0FjY2VzczogQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgICAgICAgYnVja2V0TmFtZSxcbiAgICAgICAgICAgIC8vIFRoZSBidWNrZXQgYW5kIGFsbCBvZiBpdHMgb2JqZWN0cyBjYW4gYmUgZGVsZXRlZCwgYmVjYXVzZSBhbGwgdGhlIGNvbnRlbnQgaXMgbWFuYWdlZCBpbiB0aGlzIHByb2plY3RcbiAgICAgICAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgICAgICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgICAgICAgICAgb2JqZWN0T3duZXJzaGlwOiBPYmplY3RPd25lcnNoaXAuQlVDS0VUX09XTkVSX0VORk9SQ0VELFxuICAgICAgICB9KTtcblxuICAgICAgICBidWNrZXQuZ3JhbnRSZWFkV3JpdGUodGhpcy5jZG5BY2Nlc3NJZGVudGl0eSk7XG5cbiAgICAgICAgcmV0dXJuIGJ1Y2tldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBidWNrZXQgdG8gc3RvcmUgdGhlIHNpdGVtYXAgYXNzZXRzIG9mIHRoZSBOdXh0IGFwcC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVTaXRlbWFwQnVja2V0KCk6IEJ1Y2tldCB7XG4gICAgICAgIGNvbnN0IGJ1Y2tldE5hbWUgPSBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LXNpdGVtYXBgO1xuICAgICAgICBjb25zdCBidWNrZXQgPSBuZXcgQnVja2V0KHRoaXMsIGJ1Y2tldE5hbWUsIHtcbiAgICAgICAgICAgIGJ1Y2tldE5hbWUsXG4gICAgICAgICAgICBhY2Nlc3NDb250cm9sOiBCdWNrZXRBY2Nlc3NDb250cm9sLlBSSVZBVEUsXG4gICAgICAgICAgICBibG9ja1B1YmxpY0FjY2VzczogQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgICAgICAgZW5jcnlwdGlvbjogQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgICAgICAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAgICAgICAgICAgIC8vIFRoZSBidWNrZXQgYW5kIGFsbCBvZiBpdHMgb2JqZWN0cyBjYW4gYmUgZGVsZXRlZCwgYmVjYXVzZSBhbGwgdGhlIGNvbnRlbnQgaXMgbWFuYWdlZCBpbiB0aGlzIHByb2plY3RcbiAgICAgICAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgICAgICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICBidWNrZXQuZ3JhbnRSZWFkV3JpdGUodGhpcy5jZG5BY2Nlc3NJZGVudGl0eSk7XG5cbiAgICAgICAgcmV0dXJuIGJ1Y2tldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBMYW1iZGEgZnVuY3Rpb24gdG8gcmVuZGVyIHRoZSBOdXh0IGFwcC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVBcHBMYW1iZGFGdW5jdGlvbihwcm9wczogTnV4dFNlcnZlckFwcFN0YWNrUHJvcHMpOiBGdW5jdGlvbiB7XG4gICAgICAgIGNvbnN0IGZ1bmNOYW1lID0gYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1hcHAtZnVuY3Rpb25gO1xuXG4gICAgICAgIGNvbnN0IGFwcExvZ0dyb3VwID0gbmV3IExvZ0dyb3VwKHRoaXMsIGAke2Z1bmNOYW1lfS1sb2dzYCwge1xuICAgICAgICAgICAgbG9nR3JvdXBOYW1lOiBgL2F3cy9sYW1iZGEvJHtmdW5jTmFtZX1gLFxuICAgICAgICAgICAgcmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLk9ORV9NT05USCxcbiAgICAgICAgfSk7XG4gICAgICAgIGFwcExvZ0dyb3VwLmFwcGx5UmVtb3ZhbFBvbGljeShSZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuXG4gICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24odGhpcywgZnVuY05hbWUsIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY05hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYFJlbmRlcnMgdGhlICR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fSBOdXh0IGFwcC5gLFxuICAgICAgICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgICAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgICAgICAgIGhhbmRsZXI6IGAke3Byb3BzLmVudHJ5cG9pbnQgPz8gJ2luZGV4J30uaGFuZGxlcmAsXG4gICAgICAgICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChgJHtwcm9wcy5yb290RGlyID8/ICcuJyB9Ly5vdXRwdXQvc2VydmVyYCwge1xuICAgICAgICAgICAgICAgIGV4Y2x1ZGU6IFsnKiouc3ZnJywgJyoqLmljbycsICcqKi5wbmcnLCAnKiouanBnJywgJyoqLmpzLm1hcCddLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDEwKSxcbiAgICAgICAgICAgIG1lbW9yeVNpemU6IHByb3BzLm1lbW9yeVNpemUgPz8gMTc5MixcbiAgICAgICAgICAgIGFsbG93UHVibGljU3VibmV0OiBmYWxzZSxcbiAgICAgICAgICAgIHRyYWNpbmc6IHByb3BzLmVuYWJsZVRyYWNpbmcgPyBUcmFjaW5nLkFDVElWRSA6IFRyYWNpbmcuRElTQUJMRUQsXG4gICAgICAgICAgICBsb2dHcm91cDogYXBwTG9nR3JvdXAsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAgICAgICAgIE5PREVfT1BUSU9OUzogJy0tZW5hYmxlLXNvdXJjZS1tYXBzJyxcbiAgICAgICAgICAgICAgICAuLi5KU09OLnBhcnNlKHByb3BzLmVudHJ5cG9pbnRFbnYgPz8gJ3t9JyksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBMYW1iZGEgZnVuY3Rpb24gdGhhdCBjbGVhbnVwcyB0aGUgb3V0ZGF0ZWQgc3RhdGljIGFzc2V0cyBvZiB0aGUgTnV4dCBhcHAuXG4gICAgICogTm90ZSB0aGF0IHdlIHVzZSB0aGUgYnVuZGxlZCBBV1MgU0RLIGZvciBOb2RlIHRvIGF2b2lkIHRoZSBuZWVkIGZvciBhIGN1c3RvbSBsYXllclxuICAgICAqIHdoaWNoIHJlc3RyaWN0cyB0aGUgY29uc3VtZXIgdG8gYSBzcGVjaWZpYyB5YXJuIG9yIG5wbSB2ZXJzaW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlQ2xlYW51cExhbWJkYUZ1bmN0aW9uKHByb3BzOiBOdXh0U2VydmVyQXBwU3RhY2tQcm9wcyk6IEZ1bmN0aW9uIHtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lOiBzdHJpbmcgPSBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWNsZWFudXAtZnVuY3Rpb25gO1xuICAgICAgICBjb25zdCBmdW5jdGlvbkRpclBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vLi4vZnVuY3Rpb25zL2Fzc2V0cy1jbGVhbnVwJyk7XG5cbiAgICAgICAgY29uc3QgY2xlYW51cExvZ0dyb3VwID0gbmV3IExvZ0dyb3VwKHRoaXMsIGAke2Z1bmN0aW9uTmFtZX0tbG9nc2AsIHtcbiAgICAgICAgICAgIGxvZ0dyb3VwTmFtZTogYC9hd3MvbGFtYmRhLyR7ZnVuY3Rpb25OYW1lfWAsXG4gICAgICAgICAgICByZXRlbnRpb246IFJldGVudGlvbkRheXMuVFdPX1dFRUtTLFxuICAgICAgICB9KTtcbiAgICAgICAgY2xlYW51cExvZ0dyb3VwLmFwcGx5UmVtb3ZhbFBvbGljeShSZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdDogRnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24odGhpcywgZnVuY3Rpb25OYW1lLCB7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgQXV0by1kZWxldGVzIHRoZSBvdXRkYXRlZCBzdGF0aWMgYXNzZXRzIGluIHRoZSAke3RoaXMuc3RhdGljQXNzZXRzQnVja2V0LmJ1Y2tldE5hbWV9IFMzIGJ1Y2tldC5gLFxuICAgICAgICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgICAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgICAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgICAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KGAke2Z1bmN0aW9uRGlyUGF0aH0vYnVpbGQvYXBwYCwge1xuICAgICAgICAgICAgICAgIGV4Y2x1ZGU6IFsnKi5kLnRzJ11cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgICAgICAgIG1lbW9yeVNpemU6IDEyOCxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgICAgICAgU1RBVElDX0FTU0VUU19CVUNLRVQ6IHRoaXMuc3RhdGljQXNzZXRzQnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICAgICAgICAgICAgT1VUREFURURfQVNTRVRTX1JFVEVOVElPTl9EQVlTOiBgJHtwcm9wcy5vdXRkYXRlZEFzc2V0c1JldGVudGlvbkRheXMgPz8gMzB9YCxcbiAgICAgICAgICAgICAgICBFTlZJUk9OTUVOVDogcHJvcHMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICAgICAgQVdTX05PREVKU19DT05ORUNUSU9OX1JFVVNFX0VOQUJMRUQ6ICcxJyxcbiAgICAgICAgICAgICAgICBOT0RFX09QVElPTlM6ICctLWVuYWJsZS1zb3VyY2UtbWFwcycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbG9nR3JvdXA6IGNsZWFudXBMb2dHcm91cCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gZ3JhbnQgZnVuY3Rpb24gYWNjZXNzIHRvIFMzIGJ1Y2tldFxuICAgICAgICB0aGlzLnN0YXRpY0Fzc2V0c0J1Y2tldC5ncmFudFJlYWQocmVzdWx0KTtcbiAgICAgICAgdGhpcy5zdGF0aWNBc3NldHNCdWNrZXQuZ3JhbnREZWxldGUocmVzdWx0KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgdGhlIEFQSSBnYXRld2F5IHRvIG1ha2UgdGhlIE51eHQgYXBwIHJlbmRlciBMYW1iZGEgZnVuY3Rpb24gcHVibGljbHkgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUFwaUdhdGV3YXkocHJvcHM6IE51eHRTZXJ2ZXJBcHBTdGFja1Byb3BzKTogSHR0cEFwaSB7XG4gICAgICAgIGNvbnN0IGFwaU5hbWUgPSBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWFwaWA7XG4gICAgICAgIGNvbnN0IGxhbWJkYUludGVncmF0aW9uID0gbmV3IEh0dHBMYW1iZGFJbnRlZ3JhdGlvbihgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWxhbWJkYS1pbnRlZ3JhdGlvbmAsIHRoaXMuYXBwTGFtYmRhRnVuY3Rpb24pO1xuXG4gICAgICAgIC8vIFdlIHdhbnQgdGhlIEFQSSBnYXRld2F5IHRvIGJlIGFjY2Vzc2libGUgYnkgdGhlIGN1c3RvbSBkb21haW4gbmFtZS5cbiAgICAgICAgLy8gRXZlbiB0aG91Z2ggd2UgYWNjZXNzIHRoZSBnYXRld2F5IHZpYSBDbG91ZEZyb250IChmb3IgYXV0byBodHRwIHRvIGh0dHBzIHJlZGlyZWN0cyksIHRoaXMgaXMgcmVxdWlyZWRcbiAgICAgICAgLy8gdG8gYmUgYWJsZSB0byByZWRpcmVjdCB0aGUgb3JpZ2luYWwgJ0hvc3QnIGhlYWRlciB0byB0aGUgTnV4dCBhcHBsaWNhdGlvbiwgaWYgcmVxdWVzdGVkLlxuICAgICAgICBjb25zdCBkb21haW5OYW1lID0gbmV3IERvbWFpbk5hbWUodGhpcywgYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1hcGktZG9tYWluYCwge1xuICAgICAgICAgICAgZG9tYWluTmFtZTogcHJvcHMuZG9tYWluLFxuICAgICAgICAgICAgY2VydGlmaWNhdGU6IENlcnRpZmljYXRlLmZyb21DZXJ0aWZpY2F0ZUFybih0aGlzLCBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LXJlZ2lvbmFsLWNlcnRpZmljYXRlYCwgcHJvcHMucmVnaW9uYWxUbHNDZXJ0aWZpY2F0ZUFybiksXG4gICAgICAgICAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZS5SRUdJT05BTCxcbiAgICAgICAgICAgIHNlY3VyaXR5UG9saWN5OiBTZWN1cml0eVBvbGljeS5UTFNfMV8yXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGFwaUdhdGV3YXkgPSBuZXcgSHR0cEFwaSh0aGlzLCBhcGlOYW1lLCB7XG4gICAgICAgICAgICBhcGlOYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBDb25uZWN0cyB0aGUgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9IENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHdpdGggdGhlICR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fSBMYW1iZGEgZnVuY3Rpb24gdG8gbWFrZSBpdCBwdWJsaWNseSBhdmFpbGFibGUuYCxcbiAgICAgICAgICAgIC8vIFRoZSBhcHAgZG9lcyBub3QgYWxsb3cgYW55IGNyb3NzLW9yaWdpbiBhY2Nlc3MgYnkgcHVycG9zZTogdGhlIGFwcCBzaG91bGQgbm90IGJlIGVtYmVkZGFibGUgYW55d2hlcmVcbiAgICAgICAgICAgIGNvcnNQcmVmbGlnaHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRlZmF1bHRJbnRlZ3JhdGlvbjogbGFtYmRhSW50ZWdyYXRpb24sXG4gICAgICAgICAgICBkZWZhdWx0RG9tYWluTWFwcGluZzoge1xuICAgICAgICAgICAgICAgIGRvbWFpbk5hbWU6IGRvbWFpbk5hbWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXBpR2F0ZXdheS5hZGRSb3V0ZXMoe1xuICAgICAgICAgICAgaW50ZWdyYXRpb246IGxhbWJkYUludGVncmF0aW9uLFxuICAgICAgICAgICAgcGF0aDogJy97cHJveHkrfScsXG4gICAgICAgICAgICBtZXRob2RzOiBbXG4gICAgICAgICAgICAgICAgSHR0cE1ldGhvZC5HRVQsXG4gICAgICAgICAgICAgICAgSHR0cE1ldGhvZC5IRUFELFxuICAgICAgICAgICAgICAgIEh0dHBNZXRob2QuT1BUSU9OUyxcbiAgICAgICAgICAgICAgICBIdHRwTWV0aG9kLlBPU1QsXG4gICAgICAgICAgICAgICAgSHR0cE1ldGhvZC5QVVQsXG4gICAgICAgICAgICAgICAgSHR0cE1ldGhvZC5QQVRDSCxcbiAgICAgICAgICAgICAgICBIdHRwTWV0aG9kLkRFTEVURSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBhcGlHYXRld2F5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHRoYXQgcm91dGVzIGluY29taW5nIHJlcXVlc3RzIHRvIHRoZSBOdXh0IExhbWJkYSBmdW5jdGlvbiAodmlhIHRoZSBBUEkgZ2F0ZXdheSlcbiAgICAgKiBvciB0aGUgUzMgYXNzZXRzIGZvbGRlciAod2l0aCBjYWNoaW5nKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wc1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVDbG91ZEZyb250RGlzdHJpYnV0aW9uKHByb3BzOiBOdXh0U2VydmVyQXBwU3RhY2tQcm9wcyk6IERpc3RyaWJ1dGlvbiB7XG4gICAgICAgIGNvbnN0IGNkbk5hbWUgPSBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWNkbmA7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBEaXN0cmlidXRpb24odGhpcywgY2RuTmFtZSwge1xuICAgICAgICAgICAgZG9tYWluTmFtZXM6IFtwcm9wcy5kb21haW5dLFxuICAgICAgICAgICAgY29tbWVudDogY2RuTmFtZSxcbiAgICAgICAgICAgIG1pbmltdW1Qcm90b2NvbFZlcnNpb246IFNlY3VyaXR5UG9saWN5UHJvdG9jb2wuVExTX1YxXzJfMjAxOCxcbiAgICAgICAgICAgIGNlcnRpZmljYXRlOiBDZXJ0aWZpY2F0ZS5mcm9tQ2VydGlmaWNhdGVBcm4odGhpcywgYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1nbG9iYWwtY2VydGlmaWNhdGVgLCBwcm9wcy5nbG9iYWxUbHNDZXJ0aWZpY2F0ZUFybiksXG4gICAgICAgICAgICBodHRwVmVyc2lvbjogSHR0cFZlcnNpb24uSFRUUDJfQU5EXzMsXG4gICAgICAgICAgICBkZWZhdWx0QmVoYXZpb3I6IHRoaXMubnV4dFNlcnZlclJvdXRlQmVoYXZpb3IsXG4gICAgICAgICAgICBhZGRpdGlvbmFsQmVoYXZpb3JzOiB0aGlzLnNldHVwQ2xvdWRGcm9udFJvdXRpbmcocHJvcHMpLFxuICAgICAgICAgICAgcHJpY2VDbGFzczogUHJpY2VDbGFzcy5QUklDRV9DTEFTU18xMDAsIC8vIFVzZSBvbmx5IE5vcnRoIEFtZXJpY2EgYW5kIEV1cm9wZVxuICAgICAgICAgICAgbG9nQnVja2V0OiB0aGlzLmFjY2Vzc0xvZ3NCdWNrZXQsXG4gICAgICAgICAgICBsb2dGaWxlUHJlZml4OiBwcm9wcy5lbmFibGVBY2Nlc3NMb2dzQW5hbHlzaXMgPyBDbG91ZEZyb250QWNjZXNzTG9nc0FuYWx5c2lzLmdldExvZ0ZpbGVQcmVmaXgoKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGxvZ0luY2x1ZGVzQ29va2llczogcHJvcHMuZW5hYmxlQWNjZXNzTG9nc0FuYWx5c2lzLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBiZWhhdmlvciBvcmlnaW4gdG8gcm91dGUgaW5jb21pbmcgcmVxdWVzdHMgdG8gdGhlIE51eHQgcmVuZGVyIExhbWJkYSBmdW5jdGlvbiAodmlhIEFQSSBnYXRld2F5KS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZU51eHRBcHBIdHRwT3JpZ2luKCk6IEh0dHBPcmlnaW4ge1xuICAgICAgICByZXR1cm4gbmV3IEh0dHBPcmlnaW4oYCR7dGhpcy5hcGlHYXRld2F5Lmh0dHBBcGlJZH0uZXhlY3V0ZS1hcGkuJHt0aGlzLnJlZ2lvbn0uYW1hem9uYXdzLmNvbWAsIHtcbiAgICAgICAgICAgIGNvbm5lY3Rpb25BdHRlbXB0czogMixcbiAgICAgICAgICAgIGNvbm5lY3Rpb25UaW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDIpLFxuICAgICAgICAgICAgcmVhZFRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMTApLFxuICAgICAgICAgICAgcHJvdG9jb2xQb2xpY3k6IE9yaWdpblByb3RvY29sUG9saWN5LkhUVFBTX09OTFksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBiZWhhdmlvciBmb3IgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHRvIHJvdXRlIGluY29taW5nIHdlYiByZXF1ZXN0c1xuICAgICAqIHRvIHRoZSBOdXh0IHJlbmRlciBMYW1iZGEgZnVuY3Rpb24gKHZpYSBBUEkgZ2F0ZXdheSkuXG4gICAgICogQWRkaXRpb25hbGx5LCB0aGlzIGF1dG9tYXRpY2FsbHkgcmVkaXJlY3RzIEhUVFAgcmVxdWVzdHMgdG8gSFRUUFMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVOdXh0U2VydmVyUm91dGVCZWhhdmlvcigpOiBCZWhhdmlvck9wdGlvbnMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb3JpZ2luOiB0aGlzLmh0dHBPcmlnaW4sXG4gICAgICAgICAgICBhbGxvd2VkTWV0aG9kczogQWxsb3dlZE1ldGhvZHMuQUxMT1dfR0VUX0hFQUQsXG4gICAgICAgICAgICBjb21wcmVzczogdHJ1ZSxcbiAgICAgICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBWaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQUyxcbiAgICAgICAgICAgIG9yaWdpblJlcXVlc3RQb2xpY3k6IHRoaXMuYXBwUmVxdWVzdFBvbGljeSxcbiAgICAgICAgICAgIGNhY2hlUG9saWN5OiB0aGlzLmFwcENhY2hlUG9saWN5XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cENsb3VkRnJvbnRSb3V0aW5nKHByb3BzOiBOdXh0U2VydmVyQXBwU3RhY2tQcm9wcyk6IFJlY29yZDxzdHJpbmcsIEJlaGF2aW9yT3B0aW9ucz4ge1xuICAgICAgICBsZXQgcm91dGluZ0JlaGF2aW91cnM6IFJlY29yZDxzdHJpbmcsIEJlaGF2aW9yT3B0aW9ucz4gPSB7XG5cbiAgICAgICAgICAgIC8vIE51eHQgSTE4biBmaWxlcyBhcmUgc2VydmVkIHZpYSBhIHNlcnZlciByb3V0ZVxuICAgICAgICAgICAgJy9faTE4bi8qJzogdGhpcy5udXh0U2VydmVyUm91dGVCZWhhdmlvcixcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBTcGVjaWZpYyBvbmVzIGZpcnN0XG4gICAgICAgIGlmIChwcm9wcy5lbmFibGVBcGkpIHtcbiAgICAgICAgICAgIHJvdXRpbmdCZWhhdmlvdXJzID0gey4uLnJvdXRpbmdCZWhhdmlvdXJzLCAuLi50aGlzLmNyZWF0ZUFwaVJvdXRlQmVoYXZpb3IoKX07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLmVuYWJsZVNpdGVtYXApIHtcbiAgICAgICAgICAgIHJvdXRpbmdCZWhhdmlvdXJzID0gey4uLnJvdXRpbmdCZWhhdmlvdXJzLCAuLi50aGlzLmNyZWF0ZVNpdGVtYXBSb3V0ZUJlaGF2aW9yKCl9O1xuICAgICAgICB9XG5cbiAgICAgICAgcm91dGluZ0JlaGF2aW91cnMgPSB7Li4ucm91dGluZ0JlaGF2aW91cnMsIC4uLnRoaXMuY3JlYXRlU3RhdGljQXNzZXRzUm91dGVCZWhhdmlvcigpfTtcblxuICAgICAgICByZXR1cm4gcm91dGluZ0JlaGF2aW91cnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNhY2hlIHBvbGljeSBmb3IgdGhlIE51eHQgYXBwIHJvdXRlIGJlaGF2aW9yIG9mIHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZU51eHRBcHBDYWNoZVBvbGljeShwcm9wczogTnV4dFNlcnZlckFwcFN0YWNrUHJvcHMpOiBDYWNoZVBvbGljeSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2FjaGVQb2xpY3kodGhpcywgYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1jYWNoZS1wb2xpY3lgLCB7XG4gICAgICAgICAgICBjYWNoZVBvbGljeU5hbWU6IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tY2RuLWNhY2hlLXBvbGljeWAsXG4gICAgICAgICAgICBjb21tZW50OiBgRGVmaW5lcyB3aGljaCByZXF1ZXN0IGRhdGEgdG8gcGFzcyB0byB0aGUgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9IG9yaWdpbiBhbmQgaG93IHRoZSBjYWNoZSBrZXkgaXMgY2FsY3VsYXRlZC5gLFxuICAgICAgICAgICAgZGVmYXVsdFR0bDogRHVyYXRpb24uc2Vjb25kcygwKSxcbiAgICAgICAgICAgIG1pblR0bDogRHVyYXRpb24uc2Vjb25kcygwKSxcbiAgICAgICAgICAgIG1heFR0bDogRHVyYXRpb24uZGF5cygzNjUpLFxuICAgICAgICAgICAgcXVlcnlTdHJpbmdCZWhhdmlvcjogcHJvcHMuY2FjaGVLZXlRdWVyeVBhcmFtcz8ubGVuZ3RoID8gQ2FjaGVRdWVyeVN0cmluZ0JlaGF2aW9yLmFsbG93TGlzdCguLi5wcm9wcy5jYWNoZUtleVF1ZXJ5UGFyYW1zKSA6IChwcm9wcy5kZW55Q2FjaGVLZXlRdWVyeVBhcmFtcz8ubGVuZ3RoID8gQ2FjaGVRdWVyeVN0cmluZ0JlaGF2aW9yLmRlbnlMaXN0KC4uLnByb3BzLmRlbnlDYWNoZUtleVF1ZXJ5UGFyYW1zKSA6IChwcm9wcy5hbGxvd1F1ZXJ5UGFyYW1zPy5sZW5ndGggPyBDYWNoZVF1ZXJ5U3RyaW5nQmVoYXZpb3IuYWxsb3dMaXN0KC4uLnByb3BzLmFsbG93UXVlcnlQYXJhbXMpIDogKHByb3BzLmRlbnlRdWVyeVBhcmFtcz8ubGVuZ3RoID8gQ2FjaGVRdWVyeVN0cmluZ0JlaGF2aW9yLmRlbnlMaXN0KC4uLnByb3BzLmRlbnlRdWVyeVBhcmFtcykgOiBDYWNoZVF1ZXJ5U3RyaW5nQmVoYXZpb3IuYWxsKCkpKSksXG4gICAgICAgICAgICBoZWFkZXJCZWhhdmlvcjogcHJvcHMuY2FjaGVLZXlIZWFkZXJzPy5sZW5ndGggPyBDYWNoZUhlYWRlckJlaGF2aW9yLmFsbG93TGlzdCguLi5wcm9wcy5jYWNoZUtleUhlYWRlcnMpIDogKHByb3BzLmFsbG93SGVhZGVycz8ubGVuZ3RoID8gQ2FjaGVIZWFkZXJCZWhhdmlvci5hbGxvd0xpc3QoLi4ucHJvcHMuYWxsb3dIZWFkZXJzKSA6IENhY2hlSGVhZGVyQmVoYXZpb3Iubm9uZSgpKSxcbiAgICAgICAgICAgIGNvb2tpZUJlaGF2aW9yOiBwcm9wcy5jYWNoZUtleUNvb2tpZXM/Lmxlbmd0aCA/IENhY2hlQ29va2llQmVoYXZpb3IuYWxsb3dMaXN0KC4uLnByb3BzLmNhY2hlS2V5Q29va2llcykgOiAocHJvcHMuYWxsb3dDb29raWVzPy5sZW5ndGggPyBDYWNoZUNvb2tpZUJlaGF2aW9yLmFsbG93TGlzdCguLi5wcm9wcy5hbGxvd0Nvb2tpZXMpIDogQ2FjaGVDb29raWVCZWhhdmlvci5ub25lKCkpLFxuICAgICAgICAgICAgZW5hYmxlQWNjZXB0RW5jb2RpbmdCcm90bGk6IHRydWUsXG4gICAgICAgICAgICBlbmFibGVBY2NlcHRFbmNvZGluZ0d6aXA6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5IGZvciB0aGUgTnV4dCBhcHAgcm91dGUgYmVoYXZpb3Igb2YgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlTnV4dEFwcFJlcXVlc3RQb2xpY3kocHJvcHM6IE51eHRTZXJ2ZXJBcHBTdGFja1Byb3BzKTogT3JpZ2luUmVxdWVzdFBvbGljeSB7XG4gICAgICAgIHJldHVybiBuZXcgT3JpZ2luUmVxdWVzdFBvbGljeSh0aGlzLCBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LXJlcXVlc3QtcG9saWN5YCwge1xuICAgICAgICAgICAgb3JpZ2luUmVxdWVzdFBvbGljeU5hbWU6IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tY2RuLXJlcXVlc3QtcG9saWN5YCxcbiAgICAgICAgICAgIGNvbW1lbnQ6IGBEZWZpbmVzIHdoaWNoIHJlcXVlc3QgZGF0YSB0byBwYXNzIHRvIHRoZSAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0gb3JpZ2luIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBjYWNoZSBrZXkuYCxcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nQmVoYXZpb3I6IHByb3BzLmZvcndhcmRRdWVyeVBhcmFtcz8ubGVuZ3RoID8gT3JpZ2luUmVxdWVzdFF1ZXJ5U3RyaW5nQmVoYXZpb3IuYWxsb3dMaXN0KC4uLnByb3BzLmZvcndhcmRRdWVyeVBhcmFtcykgOiBPcmlnaW5SZXF1ZXN0UXVlcnlTdHJpbmdCZWhhdmlvci5hbGwoKSxcbiAgICAgICAgICAgIGhlYWRlckJlaGF2aW9yOiBwcm9wcy5mb3J3YXJkSGVhZGVycz8ubGVuZ3RoID8gT3JpZ2luUmVxdWVzdEhlYWRlckJlaGF2aW9yLmFsbG93TGlzdCguLi5wcm9wcy5mb3J3YXJkSGVhZGVycykgOiBPcmlnaW5SZXF1ZXN0SGVhZGVyQmVoYXZpb3Iubm9uZSgpLFxuICAgICAgICAgICAgY29va2llQmVoYXZpb3I6IHByb3BzLmZvcndhcmRDb29raWVzPy5sZW5ndGggPyBPcmlnaW5SZXF1ZXN0Q29va2llQmVoYXZpb3IuYWxsb3dMaXN0KC4uLnByb3BzLmZvcndhcmRDb29raWVzKSA6IE9yaWdpblJlcXVlc3RDb29raWVCZWhhdmlvci5ub25lKCksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBiZWhhdmlvciBmb3IgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHRvIHJvdXRlIG1hdGNoaW5nIE51eHQgYXBwIEFQSSByZXF1ZXN0cyB0byB0aGUgQVBJIGdhdGV3YXkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVBcGlSb3V0ZUJlaGF2aW9yKCk6IFJlY29yZDxzdHJpbmcsIEJlaGF2aW9yT3B0aW9ucz4ge1xuICAgICAgICBjb25zdCBhcGlCZWhhdmlvcjogQmVoYXZpb3JPcHRpb25zID0ge1xuICAgICAgICAgICAgb3JpZ2luOiB0aGlzLmh0dHBPcmlnaW4sXG4gICAgICAgICAgICBjb21wcmVzczogdHJ1ZSxcbiAgICAgICAgICAgIGFsbG93ZWRNZXRob2RzOiBBbGxvd2VkTWV0aG9kcy5BTExPV19BTEwsXG4gICAgICAgICAgICBjYWNoZWRNZXRob2RzOiBDYWNoZWRNZXRob2RzLkNBQ0hFX0dFVF9IRUFEX09QVElPTlMsXG4gICAgICAgICAgICBjYWNoZVBvbGljeTogdGhpcy5hcHBDYWNoZVBvbGljeSxcbiAgICAgICAgICAgIG9yaWdpblJlcXVlc3RQb2xpY3k6IHRoaXMuYXBwUmVxdWVzdFBvbGljeSxcbiAgICAgICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBWaWV3ZXJQcm90b2NvbFBvbGljeS5IVFRQU19PTkxZXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcnVsZXM6IFJlY29yZDxzdHJpbmcsIEJlaGF2aW9yT3B0aW9ucz4gPSB7fTtcbiAgICAgICAgcnVsZXNbJy9hcGkvKiddID0gYXBpQmVoYXZpb3I7XG5cbiAgICAgICAgcmV0dXJuIHJ1bGVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBiZWhhdmlvciBmb3IgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHRvIHJvdXRlIG1hdGNoaW5nIGluY29taW5nIHJlcXVlc3RzIGZvciB0aGUgc3RhdGljIGFzc2V0c1xuICAgICAqIHRvIHRoZSBTMyBidWNrZXQgdGhhdCBob2xkcyB0aGVzZSBzdGF0aWMgYXNzZXRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZVN0YXRpY0Fzc2V0c1JvdXRlQmVoYXZpb3IoKTogUmVjb3JkPHN0cmluZywgQmVoYXZpb3JPcHRpb25zPiB7XG4gICAgICAgIGNvbnN0IHN0YXRpY0Fzc2V0c0NhY2hlQ29uZmlnOiBCZWhhdmlvck9wdGlvbnMgPSB7XG4gICAgICAgICAgICBvcmlnaW46IFMzQnVja2V0T3JpZ2luLndpdGhPcmlnaW5BY2Nlc3NJZGVudGl0eSh0aGlzLnN0YXRpY0Fzc2V0c0J1Y2tldCwge1xuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25BdHRlbXB0czogMixcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uVGltZW91dDogRHVyYXRpb24uc2Vjb25kcygzKSxcbiAgICAgICAgICAgICAgICBvcmlnaW5BY2Nlc3NJZGVudGl0eTogdGhpcy5jZG5BY2Nlc3NJZGVudGl0eSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY29tcHJlc3M6IHRydWUsXG4gICAgICAgICAgICBhbGxvd2VkTWV0aG9kczogQWxsb3dlZE1ldGhvZHMuQUxMT1dfR0VUX0hFQURfT1BUSU9OUyxcbiAgICAgICAgICAgIGNhY2hlZE1ldGhvZHM6IENhY2hlZE1ldGhvZHMuQ0FDSEVfR0VUX0hFQURfT1BUSU9OUyxcbiAgICAgICAgICAgIGNhY2hlUG9saWN5OiBDYWNoZVBvbGljeS5DQUNISU5HX09QVElNSVpFRCxcbiAgICAgICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBWaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQUyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBydWxlczogUmVjb3JkPHN0cmluZywgQmVoYXZpb3JPcHRpb25zPiA9IHt9O1xuICAgICAgICB0aGlzLnN0YXRpY0Fzc2V0Q29uZmlncy5mb3JFYWNoKGFzc2V0ID0+IHtcbiAgICAgICAgICAgIHJ1bGVzW2Ake2Fzc2V0LnRhcmdldH0ke2Fzc2V0LnBhdHRlcm59YF0gPSBzdGF0aWNBc3NldHNDYWNoZUNvbmZpZ1xuICAgICAgICB9KVxuXG4gICAgICAgIHJldHVybiBydWxlc1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBiZWhhdmlvciBmb3IgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHRvIHJvdXRlIG1hdGNoaW5nIGluY29taW5nIHJlcXVlc3RzIGZvciB0aGUgc2l0ZW1hcCBhc3NldHNcbiAgICAgKiB0byB0aGUgUzMgYnVja2V0IHRoYXQgaG9sZHMgdGhlc2Ugc2l0ZW1hcCBhc3NldHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlU2l0ZW1hcFJvdXRlQmVoYXZpb3IoKTogUmVjb3JkPHN0cmluZywgQmVoYXZpb3JPcHRpb25zPiB7XG4gICAgICAgIGlmICghdGhpcy5zaXRlbWFwQnVja2V0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTaXRlbWFwIGJ1Y2tldCBtdXN0IGV4aXN0IGJlZm9yZSBjcmVhdGluZyBzaXRlbWFwIHJvdXRlIGJlaGF2aW9yLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNpdGVtYXBDYWNoZUNvbmZpZzogQmVoYXZpb3JPcHRpb25zID0ge1xuICAgICAgICAgICAgb3JpZ2luOiBTM0J1Y2tldE9yaWdpbi53aXRoT3JpZ2luQWNjZXNzSWRlbnRpdHkodGhpcy5zaXRlbWFwQnVja2V0LCB7XG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbkF0dGVtcHRzOiAyLFxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25UaW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDMpLFxuICAgICAgICAgICAgICAgIG9yaWdpbkFjY2Vzc0lkZW50aXR5OiB0aGlzLmNkbkFjY2Vzc0lkZW50aXR5LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjb21wcmVzczogdHJ1ZSxcbiAgICAgICAgICAgIGFsbG93ZWRNZXRob2RzOiBBbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRF9PUFRJT05TLFxuICAgICAgICAgICAgY2FjaGVkTWV0aG9kczogQ2FjaGVkTWV0aG9kcy5DQUNIRV9HRVRfSEVBRF9PUFRJT05TLFxuICAgICAgICAgICAgY2FjaGVQb2xpY3k6IENhY2hlUG9saWN5LkNBQ0hJTkdfT1BUSU1JWkVELFxuICAgICAgICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IFZpZXdlclByb3RvY29sUG9saWN5LlJFRElSRUNUX1RPX0hUVFBTXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcnVsZXM6IFJlY29yZDxzdHJpbmcsIEJlaGF2aW9yT3B0aW9ucz4gPSB7fTtcbiAgICAgICAgcnVsZXNbJypzaXRlbWFwLnhtbCddID0gc2l0ZW1hcENhY2hlQ29uZmlnO1xuICAgICAgICBydWxlc1snKnNpdGVtYXAtZ29uZS54bWwnXSA9IHNpdGVtYXBDYWNoZUNvbmZpZztcbiAgICAgICAgcnVsZXNbJy9zaXRlbWFwcy8qJ10gPSBzaXRlbWFwQ2FjaGVDb25maWc7XG5cbiAgICAgICAgcmV0dXJuIHJ1bGVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwbG9hZHMgdGhlIHN0YXRpYyBhc3NldHMgb2YgdGhlIE51eHQgYXBwIGFzIGRlZmluZWQgaW4ge0BzZWUgZ2V0TnV4dEFwcFN0YXRpY0Fzc2V0Q29uZmlnc30gdG8gdGhlIHN0YXRpYyBhc3NldHMgUzMgYnVja2V0LlxuICAgICAqIEluIG9yZGVyIHRvIGVuYWJsZSBhIHplcm8tZG93bnRpbWUgZGVwbG95bWVudCB3aXRoIG1pbmltYWwgc3RvcmFnZSBsb2FkLFxuICAgICAqIHdlIGRlcGxveSB0aGUgc3RhdGljIGFzc2V0cyBvZiBldmVyeSBkZXBsb3ltZW50IGludG8gdGhlIHNhbWUgZm9sZGVyIGJ1dCBtYXJrIHRoZW0gd2l0aCBhIGRlcGxveW1lbnQgcmV2aXNpb24uXG4gICAgICogQnkgZG9pbmcgc28sIHRoZSBmaWxlcyBvZiBwcmV2aW91cyBkZXBsb3ltZW50cyBhcmUgcmV0YWluZWQgdG8gYWxsb3cgY2xpZW50cyB0byBjb250aW51ZSB0byB3b3JrIHdpdGggYW4gb2xkZXIgcmV2aXNpb25cbiAgICAgKiBidXQgZ2V0cyBjbGVhbmVkIHVwIGFmdGVyIGEgc3BlY2lmaWVkIHBlcmlvZCBvZiB0aW1lIHZpYSB0aGUgY2xlYW51cCBMYW1iZGEgZnVuY3Rpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb25maWd1cmVEZXBsb3ltZW50cygpOiBCdWNrZXREZXBsb3ltZW50W10ge1xuICAgICAgICAvLyBSZXR1cm5zIGEgZGVwbG95bWVudCBmb3IgZXZlcnkgY29uZmlndXJlZCBzdGF0aWMgYXNzZXQgdHlwZSB0byByZXNwZWN0IHRoZSBkaWZmZXJlbnQgY2FjaGUgc2V0dGluZ3NcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGljQXNzZXRDb25maWdzLmZpbHRlcihhc3NldCA9PiBleGlzdHNTeW5jKGFzc2V0LnNvdXJjZSkpLm1hcCgoYXNzZXQsIGFzc2V0SW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLCBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWFzc2V0cy1kZXBsb3ltZW50LSR7YXNzZXRJbmRleH1gLCB7XG4gICAgICAgICAgICAgICAgc291cmNlczogW1NvdXJjZS5hc3NldChhc3NldC5zb3VyY2UsIHtcbiAgICAgICAgICAgICAgICAgICAgZXhjbHVkZTogYXNzZXQuZXhjbHVkZSxcbiAgICAgICAgICAgICAgICB9KV0sXG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb25CdWNrZXQ6IHRoaXMuc3RhdGljQXNzZXRzQnVja2V0LFxuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uS2V5UHJlZml4OiBhc3NldC50YXJnZXQucmVwbGFjZSgvXlxcLysvZywgJycpLCAvLyBSZW1vdmUgbGVhZGluZyBzbGFzaFxuICAgICAgICAgICAgICAgIHBydW5lOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzdG9yYWdlQ2xhc3M6IFN0b3JhZ2VDbGFzcy5TVEFOREFSRCxcbiAgICAgICAgICAgICAgICBleGNsdWRlOiBbJyonXSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlOiBbYXNzZXQucGF0dGVybl0sXG4gICAgICAgICAgICAgICAgY2FjaGVDb250cm9sOiBhc3NldC5jYWNoZUNvbnRyb2wsXG4gICAgICAgICAgICAgICAgY29udGVudFR5cGU6IGFzc2V0LmNvbnRlbnRUeXBlLFxuICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbjogYXNzZXQuaW52YWxpZGF0ZU9uQ2hhbmdlID8gdGhpcy5jZG4gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uUGF0aHM6IGFzc2V0LmludmFsaWRhdGVPbkNoYW5nZSA/IFtgLyR7YXNzZXQucGF0dGVybn1gXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBsb2dSZXRlbnRpb246IFJldGVudGlvbkRheXMuT05FX0RBWSxcblxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFN0b3JlIGJ1aWxkIHJldmlzaW9uIG9uIGV2ZXJ5IGFzc2V0IHRvIGFsbG93IGNsZWFudXAgb2Ygb3V0ZGF0ZWQgYXNzZXRzXG4gICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiB0aGlzLmRlcGxveW1lbnRSZXZpc2lvbixcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgLy8gU29tZSBOdXh0IGFwcGxpY2F0aW9ucyBoYXZlIGEgbG90IG9mIGFzc2V0cyB0byBkZXBsb3kgd2hlcmVieSB0aGUgZnVuY3Rpb24gbWlnaHQgcnVuIG91dCBvZiBtZW1vcnkuXG4gICAgICAgICAgICAgICAgLy8gQWRkaXRpb25hbGx5LCBhIGhpZ2ggbWVtb3J5IGxpbWl0IG1pZ2h0IHNwZWVkIHVwIGRlcGxveW1lbnRzLlxuICAgICAgICAgICAgICAgIG1lbW9yeUxpbWl0OiAxNzkyXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlcyB0aGUgaG9zdGVkIHpvbmUgYXQgd2hpY2ggdGhlIEROUyByZWNvcmRzIHNoYWxsIGJlIGNyZWF0ZWQgdG8gYWNjZXNzIHRoZSBOdXh0IGFwcCBvbiB0aGUgaW50ZXJuZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcHNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgZmluZEhvc3RlZFpvbmUocHJvcHM6IE51eHRTZXJ2ZXJBcHBTdGFja1Byb3BzKTogSUhvc3RlZFpvbmUge1xuICAgICAgICBjb25zdCBkb21haW5QYXJ0cyA9IHByb3BzLmRvbWFpbi5zcGxpdCgnLicpO1xuXG4gICAgICAgIHJldHVybiBIb3N0ZWRab25lLmZyb21Ib3N0ZWRab25lQXR0cmlidXRlcyh0aGlzLCBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWhvc3RlZC16b25lYCwge1xuICAgICAgICAgICAgaG9zdGVkWm9uZUlkOiBwcm9wcy5ob3N0ZWRab25lSWQsXG4gICAgICAgICAgICB6b25lTmFtZTogZG9tYWluUGFydHNbZG9tYWluUGFydHMubGVuZ3RoIC0gMV0sIC8vIFN1cHBvcnQgc3ViZG9tYWluc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBETlMgcmVjb3JkcyB0byBhY2Nlc3MgdGhlIE51eHQgYXBwIG9uIHRoZSBpbnRlcm5ldCB2aWEgdGhlIGN1c3RvbSBkb21haW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcHNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlRG5zUmVjb3Jkcyhwcm9wczogTnV4dFNlcnZlckFwcFN0YWNrUHJvcHMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaG9zdGVkWm9uZSA9IHRoaXMuZmluZEhvc3RlZFpvbmUocHJvcHMpO1xuICAgICAgICBjb25zdCBkbnNUYXJnZXQgPSBSZWNvcmRUYXJnZXQuZnJvbUFsaWFzKG5ldyBDbG91ZEZyb250VGFyZ2V0KHRoaXMuY2RuKSk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIGEgcmVjb3JkIGZvciBJUHY0XG4gICAgICAgIG5ldyBBUmVjb3JkKHRoaXMsIGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0taXB2NC1yZWNvcmRgLCB7XG4gICAgICAgICAgICByZWNvcmROYW1lOiBwcm9wcy5kb21haW4sXG4gICAgICAgICAgICB6b25lOiBob3N0ZWRab25lLFxuICAgICAgICAgICAgdGFyZ2V0OiBkbnNUYXJnZXQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIENyZWF0ZSBhIHJlY29yZCBmb3IgSVB2NlxuICAgICAgICBuZXcgQWFhYVJlY29yZCh0aGlzLCBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWlwdjYtcmVjb3JkYCwge1xuICAgICAgICAgICAgcmVjb3JkTmFtZTogcHJvcHMuZG9tYWluLFxuICAgICAgICAgICAgem9uZTogaG9zdGVkWm9uZSxcbiAgICAgICAgICAgIHRhcmdldDogZG5zVGFyZ2V0LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2NoZWR1bGVkIHJ1bGUgdG8gcGluZyB0aGUgTnV4dCBhcHAgTGFtYmRhIGZ1bmN0aW9uIGV2ZXJ5IDUgbWludXRlcyBpbiBvcmRlciB0byBrZWVwIGl0IHdhcm1cbiAgICAgKiBhbmQgc3BlZWQgdXAgaW5pdGlhbCBTU1IgcmVxdWVzdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlQXBwUGluZ1J1bGUocHJvcHM6IE51eHRTZXJ2ZXJBcHBTdGFja1Byb3BzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZha2VBcGlHYXRld2F5RXZlbnREYXRhID0ge1xuICAgICAgICAgICAgXCJ2ZXJzaW9uXCI6IFwiMi4wXCIsXG4gICAgICAgICAgICBcInJvdXRlS2V5XCI6IFwiR0VUIC97cHJveHkrfVwiLFxuICAgICAgICAgICAgXCJyYXdQYXRoXCI6IFwiL1wiLFxuICAgICAgICAgICAgXCJyYXdRdWVyeVN0cmluZ1wiOiBcIlwiLFxuICAgICAgICAgICAgXCJoZWFkZXJzXCI6IHt9LFxuICAgICAgICAgICAgXCJyZXF1ZXN0Q29udGV4dFwiOiB7XG4gICAgICAgICAgICAgICAgXCJkb21haW5OYW1lXCI6IHByb3BzLmRvbWFpbixcbiAgICAgICAgICAgICAgICBcImh0dHBcIjoge1xuICAgICAgICAgICAgICAgICAgICBcIm1ldGhvZFwiOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICBcInBhdGhcIjogXCIvXCIsXG4gICAgICAgICAgICAgICAgICAgIFwicHJvdG9jb2xcIjogXCJIVFRQLzEuMVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIG5ldyBSdWxlKHRoaXMsIGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tcGluZ2VyLXJ1bGVgLCB7XG4gICAgICAgICAgICBydWxlTmFtZTogYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1waW5nZXJgLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBQaW5ncyB0aGUgTGFtYmRhIGZ1bmN0aW9uIG9mIHRoZSAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0gYXBwIGV2ZXJ5IDUgbWludXRlcyB0byBrZWVwIGl0IHdhcm0uYCxcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICBzY2hlZHVsZTogU2NoZWR1bGUucmF0ZShEdXJhdGlvbi5taW51dGVzKDUpKSxcbiAgICAgICAgICAgIHRhcmdldHM6IFtuZXcgTGFtYmRhRnVuY3Rpb24odGhpcy5hcHBMYW1iZGFGdW5jdGlvbiwge1xuICAgICAgICAgICAgICAgIGV2ZW50OiBSdWxlVGFyZ2V0SW5wdXQuZnJvbU9iamVjdChmYWtlQXBpR2F0ZXdheUV2ZW50RGF0YSlcbiAgICAgICAgICAgIH0pXSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2NoZWR1bGVkIHJ1bGUgdGhhdCBydW5zIGV2ZXJ5IFR1ZXNkYXkgYXQgMDM6MzAgQU0gR01UIHRvIHRyaWdnZXJcbiAgICAgKiBvdXIgY2xlYW51cCBMYW1iZGEgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlQ2xlYW51cFRyaWdnZXJSdWxlKCk6IHZvaWQge1xuICAgICAgICBuZXcgUnVsZSh0aGlzLCBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LXNjaGVkdWxlci1ydWxlYCwge1xuICAgICAgICAgICAgcnVsZU5hbWU6IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tc2NoZWR1bGVyYCxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgVHJpZ2dlcnMgYSBjbGVhbnVwIG9mIHRoZSBvdXRkYXRlZCBzdGF0aWMgYXNzZXRzIGF0IHRoZSAke3RoaXMuc3RhdGljQXNzZXRzQnVja2V0LmJ1Y2tldE5hbWV9IFMzIGJ1Y2tldC5gLFxuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIHNjaGVkdWxlOiBTY2hlZHVsZS5jcm9uKHt3ZWVrRGF5OiAnMicsIGhvdXI6ICczJywgbWludXRlOiAnMzAnfSksXG4gICAgICAgICAgICB0YXJnZXRzOiBbbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMuY2xlYW51cExhbWJkYUZ1bmN0aW9uKV0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBTMyBidWNrZXQgdG8gc3RvcmUgdGhlIGFjY2VzcyBsb2dzIG9mIHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUFjY2Vzc0xvZ3NCdWNrZXQoKTogQnVja2V0IHtcbiAgICAgICAgY29uc3QgYnVja2V0TmFtZSA9IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tYWNjZXNzLWxvZ3NgO1xuICAgICAgICBjb25zdCBidWNrZXQgPSBuZXcgQnVja2V0KHRoaXMsIGJ1Y2tldE5hbWUsIHtcbiAgICAgICAgICAgIGJ1Y2tldE5hbWUsXG4gICAgICAgICAgICBibG9ja1B1YmxpY0FjY2VzczogQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgICAgICAgb2JqZWN0T3duZXJzaGlwOiBPYmplY3RPd25lcnNoaXAuQlVDS0VUX09XTkVSX1BSRUZFUlJFRCxcbiAgICAgICAgICAgIC8vIFdoZW4gdGhlIHN0YWNrIGlzIGRlc3Ryb3llZCwgd2UgZXhwZWN0IGV2ZXJ5dGhpbmcgdG8gYmUgZGVsZXRlZFxuICAgICAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgICAgICAgYXV0b0RlbGV0ZU9iamVjdHM6IHRydWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGJ1Y2tldC5ncmFudFJlYWRXcml0ZSh0aGlzLmNkbkFjY2Vzc0lkZW50aXR5KTtcblxuICAgICAgICByZXR1cm4gYnVja2V0O1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQWNjZXNzTG9nc0FuYWx5c2lzKHByb3BzOiBOdXh0U2VydmVyQXBwU3RhY2tQcm9wcyk6IENsb3VkRnJvbnRBY2Nlc3NMb2dzQW5hbHlzaXMge1xuICAgICAgICBpZiAoIXRoaXMuYWNjZXNzTG9nc0J1Y2tldCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBY2Nlc3MgYnVja2V0IG5vdCBzZXQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENsb3VkRnJvbnRBY2Nlc3NMb2dzQW5hbHlzaXModGhpcywgYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1hY2Nlc3MtbG9ncy1hbmFseXNpc2AsIHtcbiAgICAgICAgICAgIGJ1Y2tldDogdGhpcy5hY2Nlc3NMb2dzQnVja2V0LFxuICAgICAgICAgICAgcmVzb3VyY2VQcmVmaXg6IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tYWNjZXNzLWxvZ3NgLFxuICAgICAgICAgICAgYWNjZXNzTG9nQ29va2llczogcHJvcHMuYWNjZXNzTG9nQ29va2llcyxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
550
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTnV4dFNlcnZlckFwcFN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiTnV4dFNlcnZlckFwcFN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUEyRDtBQUUzRCwrRUFBK0Q7QUFDL0QsK0RBZW9DO0FBQ3BDLHVEQUFzRjtBQUN0RiwrQ0FNNEI7QUFDNUIseURBQXdHO0FBQ3hHLHFFQUFxRjtBQUNyRiwrRUFBOEU7QUFDOUUseUVBQWlFO0FBQ2pFLG1EQUErRDtBQUMvRCxnRUFBNEY7QUFDNUYsdURBQXVFO0FBQ3ZFLHVFQUE4RDtBQUM5RCw2QkFBNkI7QUFDN0IsMkJBQXdEO0FBRXhELHVHQUFrRztBQUNsRyw2RkFBZ0Y7QUFDaEYsbUVBQTJHO0FBRTNHOztHQUVHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSxtQkFBSztJQWtHekMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE4Qjs7UUFDcEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVqRixxQkFBcUI7UUFDckIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBQSxrREFBNEIsRUFBQyxNQUFBLEtBQUssQ0FBQyxPQUFPLG1DQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFFMUQsSUFBSSxLQUFLLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNq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QUMsQ0FBQztZQUNoRSxPQUFPLEVBQUUsQ0FBQyxJQUFJLG1DQUFjLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDNUQsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0ssc0JBQXNCO1FBQzFCLE1BQU0sVUFBVSxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixjQUFjLENBQUM7UUFDMUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUN4QyxVQUFVO1lBQ1YsaUJBQWlCLEVBQUUsMEJBQWlCLENBQUMsU0FBUztZQUM5QyxlQUFlLEVBQUUsd0JBQWUsQ0FBQyxzQkFBc0I7WUFDdkQsa0VBQWtFO1lBQ2xFLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87WUFDcEMsaUJBQWlCLEVBQUUsSUFBSTtTQUMxQixDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRTlDLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxLQUE4QjtRQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxPQUFPLElBQUksMkRBQTRCLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQix1QkFBdUIsRUFBRTtZQUMzRixNQUFNLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUM3QixjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLGNBQWM7WUFDdEQsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtTQUMzQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUEzcUJELGdEQTJxQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0R1cmF0aW9uLCBSZW1vdmFsUG9saWN5LCBTdGFja30gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHtDb25zdHJ1Y3R9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHtDZXJ0aWZpY2F0ZX0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXJcIjtcbmltcG9ydCB7XG4gICAgQWxsb3dlZE1ldGhvZHMsXG4gICAgdHlwZSBCZWhhdmlvck9wdGlvbnMsXG4gICAgQ2FjaGVDb29raWVCZWhhdmlvcixcbiAgICBDYWNoZWRNZXRob2RzLFxuICAgIENhY2hlSGVhZGVyQmVoYXZpb3IsXG4gICAgQ2FjaGVQb2xpY3ksXG4gICAgQ2FjaGVRdWVyeVN0cmluZ0JlaGF2aW9yLFxuICAgIERpc3RyaWJ1dGlvbiwgSHR0cFZlcnNpb24sXG4gICAgdHlwZSBJT3JpZ2luQWNjZXNzSWRlbnRpdHksXG4gICAgT3JpZ2luQWNjZXNzSWRlbnRpdHksXG4gICAgT3JpZ2luUHJvdG9jb2xQb2xpY3ksIE9yaWdpblJlcXVlc3RQb2xpY3ksXG4gICAgUHJpY2VDbGFzcyxcbiAgICBTZWN1cml0eVBvbGljeVByb3RvY29sLFxuICAgIFZpZXdlclByb3RvY29sUG9saWN5LE9yaWdpblJlcXVlc3RDb29raWVCZWhhdmlvciwgT3JpZ2luUmVxdWVzdEhlYWRlckJlaGF2aW9yLCBPcmlnaW5SZXF1ZXN0UXVlcnlTdHJpbmdCZWhhdmlvclxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnRcIjtcbmltcG9ydCB7QXJjaGl0ZWN0dXJlLCBDb2RlLCBGdW5jdGlvbiwgUnVudGltZSwgVHJhY2luZ30gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7XG4gICAgQmxvY2tQdWJsaWNBY2Nlc3MsXG4gICAgQnVja2V0LFxuICAgIEJ1Y2tldEFjY2Vzc0NvbnRyb2wsXG4gICAgQnVja2V0RW5jcnlwdGlvbixcbiAgICBPYmplY3RPd25lcnNoaXBcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHtBYWFhUmVjb3JkLCBBUmVjb3JkLCBIb3N0ZWRab25lLCB0eXBlIElIb3N0ZWRab25lLCBSZWNvcmRUYXJnZXR9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1M1wiO1xuaW1wb3J0IHtCdWNrZXREZXBsb3ltZW50LCBTb3VyY2UsIFN0b3JhZ2VDbGFzc30gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zMy1kZXBsb3ltZW50XCI7XG5pbXBvcnQge0h0dHBPcmlnaW4sIFMzQnVja2V0T3JpZ2lufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQtb3JpZ2luc1wiO1xuaW1wb3J0IHtDbG91ZEZyb250VGFyZ2V0fSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTMtdGFyZ2V0c1wiO1xuaW1wb3J0IHsgTG9nR3JvdXAsIFJldGVudGlvbkRheXMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIjtcbmltcG9ydCB7Z2V0TnV4dEFwcFN0YXRpY0Fzc2V0Q29uZmlncywgdHlwZSBTdGF0aWNBc3NldENvbmZpZ30gZnJvbSBcIi4uL051eHRBcHBTdGF0aWNBc3NldHNcIjtcbmltcG9ydCB7UnVsZSwgUnVsZVRhcmdldElucHV0LCBTY2hlZHVsZX0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHNcIjtcbmltcG9ydCB7TGFtYmRhRnVuY3Rpb259IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7d3JpdGVGaWxlU3luYywgbWtkaXJTeW5jLCBleGlzdHNTeW5jfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7dHlwZSBOdXh0U2VydmVyQXBwU3RhY2tQcm9wc30gZnJvbSBcIi4vTnV4dFNlcnZlckFwcFN0YWNrUHJvcHNcIjtcbmltcG9ydCB7Q2xvdWRGcm9udEFjY2Vzc0xvZ3NBbmFseXNpc30gZnJvbSBcIi4uL2FjY2Vzcy1sb2dzLWFuYWx5c2lzL0Nsb3VkRnJvbnRBY2Nlc3NMb2dzQW5hbHlzaXNcIjtcbmltcG9ydCB7SHR0cExhbWJkYUludGVncmF0aW9ufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXl2Mi1pbnRlZ3JhdGlvbnNcIjtcbmltcG9ydCB7RG9tYWluTmFtZSwgRW5kcG9pbnRUeXBlLCBIdHRwQXBpLCBIdHRwTWV0aG9kLCBTZWN1cml0eVBvbGljeX0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5djJcIjtcblxuLyoqXG4gKiBDREsgc3RhY2sgdG8gZGVwbG95IGEgZHluYW1pYyBOdXh0IGFwcCAodGFyZ2V0PXNlcnZlcikgb24gQVdTIHdpdGggTGFtYmRhLCBBcGlHYXRld2F5LCBTMyBhbmQgQ2xvdWRGcm9udC5cbiAqL1xuZXhwb3J0IGNsYXNzIE51eHRTZXJ2ZXJBcHBTdGFjayBleHRlbmRzIFN0YWNrIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBpZGVudGlmaWVyIHByZWZpeCBvZiB0aGUgcmVzb3VyY2VzIGNyZWF0ZWQgYnkgdGhlIHN0YWNrLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlSWRQcmVmaXg6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudCBkZXBsb3ltZW50IHRoYXQgaXMgdXNlZCB0byB0YWcgdGhlIHN0YXRpYyBhc3NldHMgb2YgdGhlIGRlcGxveW1lbnRcbiAgICAgKiB0byBsYXRlciBiZSBhYmxlIHRvIGNsZWFuIHVwIG91dGRhdGVkIGFzc2V0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXBsb3ltZW50UmV2aXNpb246IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBpZGVudGl0eSB0byB1c2UgZm9yIGFjY2Vzc2luZyB0aGUgZGVwbG95bWVudCBhc3NldHMgb24gUzMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RuQWNjZXNzSWRlbnRpdHk6IElPcmlnaW5BY2Nlc3NJZGVudGl0eTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBTMyBidWNrZXQgd2hlcmUgdGhlIGRlcGxveW1lbnQgYXNzZXRzIGdldHMgc3RvcmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWNBc3NldHNCdWNrZXQ6IEJ1Y2tldDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBTMyBidWNrZXQgd2hlcmUgdGhlIGFjY2VzcyBsb2dzIG9mIHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBnZXRzIHN0b3JlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWNjZXNzTG9nc0J1Y2tldDogQnVja2V0fHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBTMyBidWNrZXQgd2hlcmUgdGhlIHNpdGVtYXAgYXNzZXRzIGdldHMgc3RvcmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBzaXRlbWFwQnVja2V0OiBCdWNrZXR8dW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogVGhlIExhbWJkYSBmdW5jdGlvbiB0byByZW5kZXIgdGhlIE51eHQgYXBwIG9uIHRoZSBzZXJ2ZXIgc2lkZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBhcHBMYW1iZGFGdW5jdGlvbjogRnVuY3Rpb247XG5cbiAgICAvKipcbiAgICAgKiBUaGUgTGFtYmRhIGZ1bmN0aW9uIHRoYXQgY2xlYW51cHMgdGhlIG91dGRhdGVkIHN0YXRpYyBhc3NldHMgb2YgdGhlIE51eHQgYXBwLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNsZWFudXBMYW1iZGFGdW5jdGlvbjogRnVuY3Rpb247XG5cbiAgICAvKipcbiAgICAgKiBUaGUgQVBJIGdhdGV3YXkgdG8gbWFrZSB0aGUgTGFtYmRhIGZ1bmN0aW9uIHRvIHJlbmRlciB0aGUgTnV4dCBhcHAgcHVibGljbHkgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGFwaUdhdGV3YXk6IEh0dHBBcGk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29uZmlncyBmb3IgdGhlIHN0YXRpYyBhc3NldHMgb2YgdGhlIE51eHQgYXBwIHRoYXQgc2hhbGwgYmUgcHVibGljbHkgYXZhaWxhYmxlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpY0Fzc2V0Q29uZmlnczogU3RhdGljQXNzZXRDb25maWdbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBvcmlnaW4gZm9yIHRoZSBBUEkgZ2F0ZXdheSB0byByb3V0ZSBpbmNvbWluZyByZXF1ZXN0cyB0byB0aGUgTnV4dCBMYW1iZGEgZnVuY3Rpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBodHRwT3JpZ2luOiBIdHRwT3JpZ2luO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNhY2hlIHBvbGljeSB0aGF0IHNwZWNpZmllcyB3aGljaCBIVFRQIGhlYWRlcnMsIGNvb2tpZXMsIGFuZCBxdWVyeSBzdHJpbmdzXG4gICAgICogQ2xvdWRGcm9udCBmb3J3YXJkcyB0byB0aGUgTnV4dCBhcHAgYW5kIHVzZXMgdG8gZ2VuZXJhdGUgYSBjYWNoZSBrZXkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBhcHBDYWNoZVBvbGljeTogQ2FjaGVQb2xpY3k7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZ2luIHJlcXVlc3QgcG9saWN5IHRoYXQgc3BlY2lmaWVzIHdoaWNoIEhUVFAgaGVhZGVycywgY29va2llcywgYW5kIHF1ZXJ5IHN0cmluZ3NcbiAgICAgKiBDbG91ZEZyb250IGZvcndhcmRzIHRvIHRoZSBOdXh0IGFwcCB3aXRob3V0IGFmZmVjdGluZyB0aGUgY2FjaGUga2V5LlxuICAgICAqL1xuICAgIHByaXZhdGUgYXBwUmVxdWVzdFBvbGljeTogT3JpZ2luUmVxdWVzdFBvbGljeSB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiZWhhdmlvciBmb3IgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHRvIHJvdXRlIGluY29taW5nIHdlYiByZXF1ZXN0c1xuICAgICAqIHRvIHRoZSBOdXh0IExhbWJkYSBmdW5jdGlvbiAodmlhIEFQSSBnYXRld2F5KS5cbiAgICAgKi9cbiAgICBwcml2YXRlIG51eHRTZXJ2ZXJSb3V0ZUJlaGF2aW9yOiBCZWhhdmlvck9wdGlvbnM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gdG8gcm91dGUgaW5jb21pbmcgcmVxdWVzdHMgdG8gdGhlIE51eHQgTGFtYmRhIGZ1bmN0aW9uICh2aWEgdGhlIEFQSSBnYXRld2F5KVxuICAgICAqIG9yIHRoZSBTMyBhc3NldHMgZm9sZGVyICh3aXRoIGNhY2hpbmcpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkbjogRGlzdHJpYnV0aW9uO1xuXG4gICAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE51eHRTZXJ2ZXJBcHBTdGFja1Byb3BzKSB7XG4gICAgICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgICAgIHRoaXMucmVzb3VyY2VJZFByZWZpeCA9IGAke3Byb3BzLnByb2plY3R9LSR7cHJvcHMuc2VydmljZX0tJHtwcm9wcy5lbnZpcm9ubWVudH1gO1xuXG4gICAgICAgIC8vIE51eHQgYXBwIHJlc291cmNlc1xuICAgICAgICB0aGlzLmRlcGxveW1lbnRSZXZpc2lvbiA9IHRoaXMuY3JlYXRlRGVwbG95bWVudFJldmlzaW9uKHByb3BzKTtcbiAgICAgICAgdGhpcy5zdGF0aWNBc3NldENvbmZpZ3MgPSBnZXROdXh0QXBwU3RhdGljQXNzZXRDb25maWdzKHByb3BzLnJvb3REaXIgPz8gJy4nKTtcbiAgICAgICAgdGhpcy5jZG5BY2Nlc3NJZGVudGl0eSA9IHRoaXMuY3JlYXRlQ2RuQWNjZXNzSWRlbnRpdHkoKTtcbiAgICAgICAgdGhpcy5zdGF0aWNBc3NldHNCdWNrZXQgPSB0aGlzLmNyZWF0ZVN0YXRpY0Fzc2V0c0J1Y2tldCgpO1xuXG4gICAgICAgIGlmIChwcm9wcy5lbmFibGVBY2Nlc3NMb2dzQW5hbHlzaXMpIHtcbiAgICAgICAgICAgIHRoaXMuYWNjZXNzTG9nc0J1Y2tldCA9IHRoaXMuY3JlYXRlQWNjZXNzTG9nc0J1Y2tldCgpO1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVBY2Nlc3NMb2dzQW5hbHlzaXMocHJvcHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLmVuYWJsZVNpdGVtYXApIHtcbiAgICAgICAgICAgIHRoaXMuc2l0ZW1hcEJ1Y2tldCA9IHRoaXMuY3JlYXRlU2l0ZW1hcEJ1Y2tldCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hcHBMYW1iZGFGdW5jdGlvbiA9IHRoaXMuY3JlYXRlQXBwTGFtYmRhRnVuY3Rpb24ocHJvcHMpO1xuICAgICAgICB0aGlzLmFwaUdhdGV3YXkgPSB0aGlzLmNyZWF0ZUFwaUdhdGV3YXkocHJvcHMpO1xuICAgICAgICB0aGlzLmh0dHBPcmlnaW4gPSB0aGlzLmNyZWF0ZU51eHRBcHBIdHRwT3JpZ2luKCk7XG4gICAgICAgIHRoaXMuYXBwQ2FjaGVQb2xpY3kgPSB0aGlzLmNyZWF0ZU51eHRBcHBDYWNoZVBvbGljeShwcm9wcylcbiAgICAgICAgdGhpcy5hcHBSZXF1ZXN0UG9saWN5ID0gdGhpcy5jcmVhdGVOdXh0QXBwUmVxdWVzdFBvbGljeShwcm9wcylcbiAgICAgICAgdGhpcy5udXh0U2VydmVyUm91dGVCZWhhdmlvciA9IHRoaXMuY3JlYXRlTnV4dFNlcnZlclJvdXRlQmVoYXZpb3IoKVxuICAgICAgICB0aGlzLmNkbiA9IHRoaXMuY3JlYXRlQ2xvdWRGcm9udERpc3RyaWJ1dGlvbihwcm9wcyk7XG4gICAgICAgIHRoaXMuY29uZmlndXJlRGVwbG95bWVudHMoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVEbnNSZWNvcmRzKHByb3BzKTtcbiAgICAgICAgdGhpcy5jcmVhdGVBcHBQaW5nUnVsZShwcm9wcyk7XG5cbiAgICAgICAgLy8gU3RhdGljIGFzc2V0cyBjbGVhbnVwIHJlc291cmNlc1xuICAgICAgICB0aGlzLmNsZWFudXBMYW1iZGFGdW5jdGlvbiA9IHRoaXMuY3JlYXRlQ2xlYW51cExhbWJkYUZ1bmN0aW9uKHByb3BzKTtcbiAgICAgICAgdGhpcy5jcmVhdGVDbGVhbnVwVHJpZ2dlclJ1bGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBjdXJyZW50IGRlcGxveW1lbnQgcmV2aXNpb24gZmlsZSBpbiB0aGUgcHVibGljIGZvbGRlciBvZiB0aGUgTnV4dCBhcHAgdG8gYmUgYWNjZXNzaWJsZVxuICAgICAqIGFuZCByZXR1cm5zIHRoZSBjdXJyZW50IHJldmlzaW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlRGVwbG95bWVudFJldmlzaW9uKHByb3BzOiBOdXh0U2VydmVyQXBwU3RhY2tQcm9wcyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGFwcFJldmlzaW9uID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gICAgICAgIGNvbnN0IGRpciA9IHBhdGguam9pbihwcm9wcy5yb290RGlyID8/ICcuJywgJy5vdXRwdXQnLCAncHVibGljJyk7XG4gICAgICAgIG1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICB3cml0ZUZpbGVTeW5jKHBhdGguam9pbihkaXIsICdhcHAtcmV2aXNpb24nKSwgYXBwUmV2aXNpb24sIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG5cbiAgICAgICAgcmV0dXJuIGFwcFJldmlzaW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgdGhlIGlkZW50aXR5IHRvIGFjY2VzcyB0aGUgUzMgZGVwbG95bWVudCBhc3NldCBmaWxlcyB2aWEgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUNkbkFjY2Vzc0lkZW50aXR5KCk6IElPcmlnaW5BY2Nlc3NJZGVudGl0eSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbkFjY2Vzc0lkZW50aXR5TmFtZSA9IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tY2RuLXMzLWFjY2Vzc2A7XG4gICAgICAgIHJldHVybiBuZXcgT3JpZ2luQWNjZXNzSWRlbnRpdHkodGhpcywgb3JpZ2luQWNjZXNzSWRlbnRpdHlOYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBidWNrZXQgdG8gc3RvcmUgdGhlIHN0YXRpYyBkZXBsb3ltZW50IGFzc2V0IGZpbGVzIG9mIHRoZSBOdXh0IGFwcC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVTdGF0aWNBc3NldHNCdWNrZXQoKTogQnVja2V0IHtcbiAgICAgICAgY29uc3QgYnVja2V0TmFtZSA9IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tYXNzZXRzYDtcbiAgICAgICAgY29uc3QgYnVja2V0ID0gbmV3IEJ1Y2tldCh0aGlzLCBidWNrZXROYW1lLCB7XG4gICAgICAgICAgICBibG9ja1B1YmxpY0FjY2VzczogQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgICAgICAgYnVja2V0TmFtZSxcbiAgICAgICAgICAgIC8vIFRoZSBidWNrZXQgYW5kIGFsbCBvZiBpdHMgb2JqZWN0cyBjYW4gYmUgZGVsZXRlZCwgYmVjYXVzZSBhbGwgdGhlIGNvbnRlbnQgaXMgbWFuYWdlZCBpbiB0aGlzIHByb2plY3RcbiAgICAgICAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgICAgICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgICAgICAgICAgb2JqZWN0T3duZXJzaGlwOiBPYmplY3RPd25lcnNoaXAuQlVDS0VUX09XTkVSX0VORk9SQ0VELFxuICAgICAgICB9KTtcblxuICAgICAgICBidWNrZXQuZ3JhbnRSZWFkV3JpdGUodGhpcy5jZG5BY2Nlc3NJZGVudGl0eSk7XG5cbiAgICAgICAgcmV0dXJuIGJ1Y2tldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBidWNrZXQgdG8gc3RvcmUgdGhlIHNpdGVtYXAgYXNzZXRzIG9mIHRoZSBOdXh0IGFwcC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVTaXRlbWFwQnVja2V0KCk6IEJ1Y2tldCB7XG4gICAgICAgIGNvbnN0IGJ1Y2tldE5hbWUgPSBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LXNpdGVtYXBgO1xuICAgICAgICBjb25zdCBidWNrZXQgPSBuZXcgQnVja2V0KHRoaXMsIGJ1Y2tldE5hbWUsIHtcbiAgICAgICAgICAgIGJ1Y2tldE5hbWUsXG4gICAgICAgICAgICBhY2Nlc3NDb250cm9sOiBCdWNrZXRBY2Nlc3NDb250cm9sLlBSSVZBVEUsXG4gICAgICAgICAgICBibG9ja1B1YmxpY0FjY2VzczogQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgICAgICAgZW5jcnlwdGlvbjogQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgICAgICAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAgICAgICAgICAgIC8vIFRoZSBidWNrZXQgYW5kIGFsbCBvZiBpdHMgb2JqZWN0cyBjYW4gYmUgZGVsZXRlZCwgYmVjYXVzZSBhbGwgdGhlIGNvbnRlbnQgaXMgbWFuYWdlZCBpbiB0aGlzIHByb2plY3RcbiAgICAgICAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgICAgICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICBidWNrZXQuZ3JhbnRSZWFkV3JpdGUodGhpcy5jZG5BY2Nlc3NJZGVudGl0eSk7XG5cbiAgICAgICAgcmV0dXJuIGJ1Y2tldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBMYW1iZGEgZnVuY3Rpb24gdG8gcmVuZGVyIHRoZSBOdXh0IGFwcC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVBcHBMYW1iZGFGdW5jdGlvbihwcm9wczogTnV4dFNlcnZlckFwcFN0YWNrUHJvcHMpOiBGdW5jdGlvbiB7XG4gICAgICAgIGNvbnN0IGZ1bmNOYW1lID0gYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1udXh0YDtcblxuICAgICAgICBjb25zdCBhcHBMb2dHcm91cCA9IG5ldyBMb2dHcm91cCh0aGlzLCBgJHtmdW5jTmFtZX0tbG9nc2AsIHtcbiAgICAgICAgICAgIGxvZ0dyb3VwTmFtZTogYC9hd3MvbGFtYmRhLyR7ZnVuY05hbWV9YCxcbiAgICAgICAgICAgIHJldGVudGlvbjogUmV0ZW50aW9uRGF5cy5PTkVfTU9OVEgsXG4gICAgICAgIH0pO1xuICAgICAgICBhcHBMb2dHcm91cC5hcHBseVJlbW92YWxQb2xpY3koUmVtb3ZhbFBvbGljeS5ERVNUUk9ZKTtcblxuICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKHRoaXMsIGZ1bmNOYW1lLCB7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmNOYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBSZW5kZXJzIHRoZSAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0gTnV4dCBhcHAuYCxcbiAgICAgICAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIwX1gsXG4gICAgICAgICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICAgICAgICBoYW5kbGVyOiBgJHtwcm9wcy5lbnRyeXBvaW50ID8/ICdpbmRleCd9LmhhbmRsZXJgLFxuICAgICAgICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoYCR7cHJvcHMucm9vdERpciA/PyAnLicgfS8ub3V0cHV0L3NlcnZlcmAsIHtcbiAgICAgICAgICAgICAgICBleGNsdWRlOiBbJyoqLnN2ZycsICcqKi5pY28nLCAnKioucG5nJywgJyoqLmpwZycsICcqKi5qcy5tYXAnXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcygxMCksXG4gICAgICAgICAgICBtZW1vcnlTaXplOiBwcm9wcy5tZW1vcnlTaXplID8/IDE3OTIsXG4gICAgICAgICAgICBhbGxvd1B1YmxpY1N1Ym5ldDogZmFsc2UsXG4gICAgICAgICAgICB0cmFjaW5nOiBwcm9wcy5lbmFibGVUcmFjaW5nID8gVHJhY2luZy5BQ1RJVkUgOiBUcmFjaW5nLkRJU0FCTEVELFxuICAgICAgICAgICAgbG9nR3JvdXA6IGFwcExvZ0dyb3VwLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICAgICAgICBOT0RFX09QVElPTlM6ICctLWVuYWJsZS1zb3VyY2UtbWFwcycsXG4gICAgICAgICAgICAgICAgLi4uSlNPTi5wYXJzZShwcm9wcy5lbnRyeXBvaW50RW52ID8/ICd7fScpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyB0aGUgTGFtYmRhIGZ1bmN0aW9uIHRoYXQgY2xlYW51cHMgdGhlIG91dGRhdGVkIHN0YXRpYyBhc3NldHMgb2YgdGhlIE51eHQgYXBwLlxuICAgICAqIE5vdGUgdGhhdCB3ZSB1c2UgdGhlIGJ1bmRsZWQgQVdTIFNESyBmb3IgTm9kZSB0byBhdm9pZCB0aGUgbmVlZCBmb3IgYSBjdXN0b20gbGF5ZXJcbiAgICAgKiB3aGljaCByZXN0cmljdHMgdGhlIGNvbnN1bWVyIHRvIGEgc3BlY2lmaWMgeWFybiBvciBucG0gdmVyc2lvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUNsZWFudXBMYW1iZGFGdW5jdGlvbihwcm9wczogTnV4dFNlcnZlckFwcFN0YWNrUHJvcHMpOiBGdW5jdGlvbiB7XG4gICAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZTogc3RyaW5nID0gYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1jbGVhbnVwYDtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25EaXJQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uLy4uL2Z1bmN0aW9ucy9hc3NldHMtY2xlYW51cCcpO1xuXG4gICAgICAgIGNvbnN0IGNsZWFudXBMb2dHcm91cCA9IG5ldyBMb2dHcm91cCh0aGlzLCBgJHtmdW5jdGlvbk5hbWV9LWxvZ3NgLCB7XG4gICAgICAgICAgICBsb2dHcm91cE5hbWU6IGAvYXdzL2xhbWJkYS8ke2Z1bmN0aW9uTmFtZX1gLFxuICAgICAgICAgICAgcmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLlRXT19XRUVLUyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNsZWFudXBMb2dHcm91cC5hcHBseVJlbW92YWxQb2xpY3koUmVtb3ZhbFBvbGljeS5ERVNUUk9ZKTtcblxuICAgICAgICBjb25zdCByZXN1bHQ6IEZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uKHRoaXMsIGZ1bmN0aW9uTmFtZSwge1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYEF1dG8tZGVsZXRlcyB0aGUgb3V0ZGF0ZWQgc3RhdGljIGFzc2V0cyBpbiB0aGUgJHt0aGlzLnN0YXRpY0Fzc2V0c0J1Y2tldC5idWNrZXROYW1lfSBTMyBidWNrZXQuYCxcbiAgICAgICAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIwX1gsXG4gICAgICAgICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICAgICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICAgICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChgJHtmdW5jdGlvbkRpclBhdGh9L2J1aWxkL2FwcGAsIHtcbiAgICAgICAgICAgICAgICBleGNsdWRlOiBbJyouZC50cyddXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICAgICAgICBtZW1vcnlTaXplOiAxMjgsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAgICAgICAgIFNUQVRJQ19BU1NFVFNfQlVDS0VUOiB0aGlzLnN0YXRpY0Fzc2V0c0J1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICAgICAgICAgIE9VVERBVEVEX0FTU0VUU19SRVRFTlRJT05fREFZUzogYCR7cHJvcHMub3V0ZGF0ZWRBc3NldHNSZXRlbnRpb25EYXlzID8/IDMwfWAsXG4gICAgICAgICAgICAgICAgRU5WSVJPTk1FTlQ6IHByb3BzLmVudmlyb25tZW50LFxuICAgICAgICAgICAgICAgIEFXU19OT0RFSlNfQ09OTkVDVElPTl9SRVVTRV9FTkFCTEVEOiAnMScsXG4gICAgICAgICAgICAgICAgTk9ERV9PUFRJT05TOiAnLS1lbmFibGUtc291cmNlLW1hcHMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxvZ0dyb3VwOiBjbGVhbnVwTG9nR3JvdXAsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGdyYW50IGZ1bmN0aW9uIGFjY2VzcyB0byBTMyBidWNrZXRcbiAgICAgICAgdGhpcy5zdGF0aWNBc3NldHNCdWNrZXQuZ3JhbnRSZWFkKHJlc3VsdCk7XG4gICAgICAgIHRoaXMuc3RhdGljQXNzZXRzQnVja2V0LmdyYW50RGVsZXRlKHJlc3VsdCk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBBUEkgZ2F0ZXdheSB0byBtYWtlIHRoZSBOdXh0IGFwcCByZW5kZXIgTGFtYmRhIGZ1bmN0aW9uIHB1YmxpY2x5IGF2YWlsYWJsZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVBcGlHYXRld2F5KHByb3BzOiBOdXh0U2VydmVyQXBwU3RhY2tQcm9wcyk6IEh0dHBBcGkge1xuICAgICAgICBjb25zdCBhcGlOYW1lID0gYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1hcGlgO1xuICAgICAgICBjb25zdCBsYW1iZGFJbnRlZ3JhdGlvbiA9IG5ldyBIdHRwTGFtYmRhSW50ZWdyYXRpb24oYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1sYW1iZGEtaW50ZWdyYXRpb25gLCB0aGlzLmFwcExhbWJkYUZ1bmN0aW9uKTtcblxuICAgICAgICAvLyBXZSB3YW50IHRoZSBBUEkgZ2F0ZXdheSB0byBiZSBhY2Nlc3NpYmxlIGJ5IHRoZSBjdXN0b20gZG9tYWluIG5hbWUuXG4gICAgICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGFjY2VzcyB0aGUgZ2F0ZXdheSB2aWEgQ2xvdWRGcm9udCAoZm9yIGF1dG8gaHR0cCB0byBodHRwcyByZWRpcmVjdHMpLCB0aGlzIGlzIHJlcXVpcmVkXG4gICAgICAgIC8vIHRvIGJlIGFibGUgdG8gcmVkaXJlY3QgdGhlIG9yaWdpbmFsICdIb3N0JyBoZWFkZXIgdG8gdGhlIE51eHQgYXBwbGljYXRpb24sIGlmIHJlcXVlc3RlZC5cbiAgICAgICAgY29uc3QgZG9tYWluTmFtZSA9IG5ldyBEb21haW5OYW1lKHRoaXMsIGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tYXBpLWRvbWFpbmAsIHtcbiAgICAgICAgICAgIGRvbWFpbk5hbWU6IHByb3BzLmRvbWFpbixcbiAgICAgICAgICAgIGNlcnRpZmljYXRlOiBDZXJ0aWZpY2F0ZS5mcm9tQ2VydGlmaWNhdGVBcm4odGhpcywgYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1yZWdpb25hbC1jZXJ0aWZpY2F0ZWAsIHByb3BzLnJlZ2lvbmFsVGxzQ2VydGlmaWNhdGVBcm4pLFxuICAgICAgICAgICAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGUuUkVHSU9OQUwsXG4gICAgICAgICAgICBzZWN1cml0eVBvbGljeTogU2VjdXJpdHlQb2xpY3kuVExTXzFfMlxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBhcGlHYXRld2F5ID0gbmV3IEh0dHBBcGkodGhpcywgYXBpTmFtZSwge1xuICAgICAgICAgICAgYXBpTmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgQ29ubmVjdHMgdGhlICR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiB3aXRoIHRoZSAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0gTGFtYmRhIGZ1bmN0aW9uIHRvIG1ha2UgaXQgcHVibGljbHkgYXZhaWxhYmxlLmAsXG4gICAgICAgICAgICAvLyBUaGUgYXBwIGRvZXMgbm90IGFsbG93IGFueSBjcm9zcy1vcmlnaW4gYWNjZXNzIGJ5IHB1cnBvc2U6IHRoZSBhcHAgc2hvdWxkIG5vdCBiZSBlbWJlZGRhYmxlIGFueXdoZXJlXG4gICAgICAgICAgICBjb3JzUHJlZmxpZ2h0OiB1bmRlZmluZWQsXG4gICAgICAgICAgICBkZWZhdWx0SW50ZWdyYXRpb246IGxhbWJkYUludGVncmF0aW9uLFxuICAgICAgICAgICAgZGVmYXVsdERvbWFpbk1hcHBpbmc6IHtcbiAgICAgICAgICAgICAgICBkb21haW5OYW1lOiBkb21haW5OYW1lXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFwaUdhdGV3YXkuYWRkUm91dGVzKHtcbiAgICAgICAgICAgIGludGVncmF0aW9uOiBsYW1iZGFJbnRlZ3JhdGlvbixcbiAgICAgICAgICAgIHBhdGg6ICcve3Byb3h5K30nLFxuICAgICAgICAgICAgbWV0aG9kczogW1xuICAgICAgICAgICAgICAgIEh0dHBNZXRob2QuR0VULFxuICAgICAgICAgICAgICAgIEh0dHBNZXRob2QuSEVBRCxcbiAgICAgICAgICAgICAgICBIdHRwTWV0aG9kLk9QVElPTlMsXG4gICAgICAgICAgICAgICAgSHR0cE1ldGhvZC5QT1NULFxuICAgICAgICAgICAgICAgIEh0dHBNZXRob2QuUFVULFxuICAgICAgICAgICAgICAgIEh0dHBNZXRob2QuUEFUQ0gsXG4gICAgICAgICAgICAgICAgSHR0cE1ldGhvZC5ERUxFVEUsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gYXBpR2F0ZXdheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiB0aGF0IHJvdXRlcyBpbmNvbWluZyByZXF1ZXN0cyB0byB0aGUgTnV4dCBMYW1iZGEgZnVuY3Rpb24gKHZpYSB0aGUgQVBJIGdhdGV3YXkpXG4gICAgICogb3IgdGhlIFMzIGFzc2V0cyBmb2xkZXIgKHdpdGggY2FjaGluZykuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcHNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlQ2xvdWRGcm9udERpc3RyaWJ1dGlvbihwcm9wczogTnV4dFNlcnZlckFwcFN0YWNrUHJvcHMpOiBEaXN0cmlidXRpb24ge1xuICAgICAgICBjb25zdCBjZG5OYW1lID0gYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1jZG5gO1xuXG4gICAgICAgIHJldHVybiBuZXcgRGlzdHJpYnV0aW9uKHRoaXMsIGNkbk5hbWUsIHtcbiAgICAgICAgICAgIGRvbWFpbk5hbWVzOiBbcHJvcHMuZG9tYWluXSxcbiAgICAgICAgICAgIGNvbW1lbnQ6IGNkbk5hbWUsXG4gICAgICAgICAgICBtaW5pbXVtUHJvdG9jb2xWZXJzaW9uOiBTZWN1cml0eVBvbGljeVByb3RvY29sLlRMU19WMV8yXzIwMTgsXG4gICAgICAgICAgICBjZXJ0aWZpY2F0ZTogQ2VydGlmaWNhdGUuZnJvbUNlcnRpZmljYXRlQXJuKHRoaXMsIGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tZ2xvYmFsLWNlcnRpZmljYXRlYCwgcHJvcHMuZ2xvYmFsVGxzQ2VydGlmaWNhdGVBcm4pLFxuICAgICAgICAgICAgaHR0cFZlcnNpb246IEh0dHBWZXJzaW9uLkhUVFAyX0FORF8zLFxuICAgICAgICAgICAgZGVmYXVsdEJlaGF2aW9yOiB0aGlzLm51eHRTZXJ2ZXJSb3V0ZUJlaGF2aW9yLFxuICAgICAgICAgICAgYWRkaXRpb25hbEJlaGF2aW9yczogdGhpcy5zZXR1cENsb3VkRnJvbnRSb3V0aW5nKHByb3BzKSxcbiAgICAgICAgICAgIHByaWNlQ2xhc3M6IFByaWNlQ2xhc3MuUFJJQ0VfQ0xBU1NfMTAwLCAvLyBVc2Ugb25seSBOb3J0aCBBbWVyaWNhIGFuZCBFdXJvcGVcbiAgICAgICAgICAgIGxvZ0J1Y2tldDogdGhpcy5hY2Nlc3NMb2dzQnVja2V0LFxuICAgICAgICAgICAgbG9nRmlsZVByZWZpeDogcHJvcHMuZW5hYmxlQWNjZXNzTG9nc0FuYWx5c2lzID8gQ2xvdWRGcm9udEFjY2Vzc0xvZ3NBbmFseXNpcy5nZXRMb2dGaWxlUHJlZml4KCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBsb2dJbmNsdWRlc0Nvb2tpZXM6IHByb3BzLmVuYWJsZUFjY2Vzc0xvZ3NBbmFseXNpcyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyB0aGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gYmVoYXZpb3Igb3JpZ2luIHRvIHJvdXRlIGluY29taW5nIHJlcXVlc3RzIHRvIHRoZSBOdXh0IHJlbmRlciBMYW1iZGEgZnVuY3Rpb24gKHZpYSBBUEkgZ2F0ZXdheSkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVOdXh0QXBwSHR0cE9yaWdpbigpOiBIdHRwT3JpZ2luIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIdHRwT3JpZ2luKGAke3RoaXMuYXBpR2F0ZXdheS5odHRwQXBpSWR9LmV4ZWN1dGUtYXBpLiR7dGhpcy5yZWdpb259LmFtYXpvbmF3cy5jb21gLCB7XG4gICAgICAgICAgICBjb25uZWN0aW9uQXR0ZW1wdHM6IDIsXG4gICAgICAgICAgICBjb25uZWN0aW9uVGltZW91dDogRHVyYXRpb24uc2Vjb25kcygyKSxcbiAgICAgICAgICAgIHJlYWRUaW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDEwKSxcbiAgICAgICAgICAgIHByb3RvY29sUG9saWN5OiBPcmlnaW5Qcm90b2NvbFBvbGljeS5IVFRQU19PTkxZLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYmVoYXZpb3IgZm9yIHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiB0byByb3V0ZSBpbmNvbWluZyB3ZWIgcmVxdWVzdHNcbiAgICAgKiB0byB0aGUgTnV4dCByZW5kZXIgTGFtYmRhIGZ1bmN0aW9uICh2aWEgQVBJIGdhdGV3YXkpLlxuICAgICAqIEFkZGl0aW9uYWxseSwgdGhpcyBhdXRvbWF0aWNhbGx5IHJlZGlyZWN0cyBIVFRQIHJlcXVlc3RzIHRvIEhUVFBTLlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlTnV4dFNlcnZlclJvdXRlQmVoYXZpb3IoKTogQmVoYXZpb3JPcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG9yaWdpbjogdGhpcy5odHRwT3JpZ2luLFxuICAgICAgICAgICAgYWxsb3dlZE1ldGhvZHM6IEFsbG93ZWRNZXRob2RzLkFMTE9XX0dFVF9IRUFELFxuICAgICAgICAgICAgY29tcHJlc3M6IHRydWUsXG4gICAgICAgICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICAgICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5OiB0aGlzLmFwcFJlcXVlc3RQb2xpY3ksXG4gICAgICAgICAgICBjYWNoZVBvbGljeTogdGhpcy5hcHBDYWNoZVBvbGljeVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBDbG91ZEZyb250Um91dGluZyhwcm9wczogTnV4dFNlcnZlckFwcFN0YWNrUHJvcHMpOiBSZWNvcmQ8c3RyaW5nLCBCZWhhdmlvck9wdGlvbnM+IHtcbiAgICAgICAgbGV0IHJvdXRpbmdCZWhhdmlvdXJzOiBSZWNvcmQ8c3RyaW5nLCBCZWhhdmlvck9wdGlvbnM+ID0ge1xuXG4gICAgICAgICAgICAvLyBOdXh0IEkxOG4gZmlsZXMgYXJlIHNlcnZlZCB2aWEgYSBzZXJ2ZXIgcm91dGVcbiAgICAgICAgICAgICcvX2kxOG4vKic6IHRoaXMubnV4dFNlcnZlclJvdXRlQmVoYXZpb3IsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gU3BlY2lmaWMgb25lcyBmaXJzdFxuICAgICAgICBpZiAocHJvcHMuZW5hYmxlQXBpKSB7XG4gICAgICAgICAgICByb3V0aW5nQmVoYXZpb3VycyA9IHsuLi5yb3V0aW5nQmVoYXZpb3VycywgLi4udGhpcy5jcmVhdGVBcGlSb3V0ZUJlaGF2aW9yKCl9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5lbmFibGVTaXRlbWFwKSB7XG4gICAgICAgICAgICByb3V0aW5nQmVoYXZpb3VycyA9IHsuLi5yb3V0aW5nQmVoYXZpb3VycywgLi4udGhpcy5jcmVhdGVTaXRlbWFwUm91dGVCZWhhdmlvcigpfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvdXRpbmdCZWhhdmlvdXJzID0gey4uLnJvdXRpbmdCZWhhdmlvdXJzLCAuLi50aGlzLmNyZWF0ZVN0YXRpY0Fzc2V0c1JvdXRlQmVoYXZpb3IoKX07XG5cbiAgICAgICAgcmV0dXJuIHJvdXRpbmdCZWhhdmlvdXJzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjYWNoZSBwb2xpY3kgZm9yIHRoZSBOdXh0IGFwcCByb3V0ZSBiZWhhdmlvciBvZiB0aGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVOdXh0QXBwQ2FjaGVQb2xpY3kocHJvcHM6IE51eHRTZXJ2ZXJBcHBTdGFja1Byb3BzKTogQ2FjaGVQb2xpY3kge1xuICAgICAgICByZXR1cm4gbmV3IENhY2hlUG9saWN5KHRoaXMsIGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tY2FjaGUtcG9saWN5YCwge1xuICAgICAgICAgICAgY2FjaGVQb2xpY3lOYW1lOiBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWNkbi1jYWNoZS1wb2xpY3lgLFxuICAgICAgICAgICAgY29tbWVudDogYERlZmluZXMgd2hpY2ggcmVxdWVzdCBkYXRhIHRvIHBhc3MgdG8gdGhlICR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fSBvcmlnaW4gYW5kIGhvdyB0aGUgY2FjaGUga2V5IGlzIGNhbGN1bGF0ZWQuYCxcbiAgICAgICAgICAgIGRlZmF1bHRUdGw6IER1cmF0aW9uLnNlY29uZHMoMCksXG4gICAgICAgICAgICBtaW5UdGw6IER1cmF0aW9uLnNlY29uZHMoMCksXG4gICAgICAgICAgICBtYXhUdGw6IER1cmF0aW9uLmRheXMoMzY1KSxcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nQmVoYXZpb3I6IHByb3BzLmNhY2hlS2V5UXVlcnlQYXJhbXM/Lmxlbmd0aCA/IENhY2hlUXVlcnlTdHJpbmdCZWhhdmlvci5hbGxvd0xpc3QoLi4ucHJvcHMuY2FjaGVLZXlRdWVyeVBhcmFtcykgOiAocHJvcHMuZGVueUNhY2hlS2V5UXVlcnlQYXJhbXM/Lmxlbmd0aCA/IENhY2hlUXVlcnlTdHJpbmdCZWhhdmlvci5kZW55TGlzdCguLi5wcm9wcy5kZW55Q2FjaGVLZXlRdWVyeVBhcmFtcykgOiAocHJvcHMuYWxsb3dRdWVyeVBhcmFtcz8ubGVuZ3RoID8gQ2FjaGVRdWVyeVN0cmluZ0JlaGF2aW9yLmFsbG93TGlzdCguLi5wcm9wcy5hbGxvd1F1ZXJ5UGFyYW1zKSA6IChwcm9wcy5kZW55UXVlcnlQYXJhbXM/Lmxlbmd0aCA/IENhY2hlUXVlcnlTdHJpbmdCZWhhdmlvci5kZW55TGlzdCguLi5wcm9wcy5kZW55UXVlcnlQYXJhbXMpIDogQ2FjaGVRdWVyeVN0cmluZ0JlaGF2aW9yLmFsbCgpKSkpLFxuICAgICAgICAgICAgaGVhZGVyQmVoYXZpb3I6IHByb3BzLmNhY2hlS2V5SGVhZGVycz8ubGVuZ3RoID8gQ2FjaGVIZWFkZXJCZWhhdmlvci5hbGxvd0xpc3QoLi4ucHJvcHMuY2FjaGVLZXlIZWFkZXJzKSA6IChwcm9wcy5hbGxvd0hlYWRlcnM/Lmxlbmd0aCA/IENhY2hlSGVhZGVyQmVoYXZpb3IuYWxsb3dMaXN0KC4uLnByb3BzLmFsbG93SGVhZGVycykgOiBDYWNoZUhlYWRlckJlaGF2aW9yLm5vbmUoKSksXG4gICAgICAgICAgICBjb29raWVCZWhhdmlvcjogcHJvcHMuY2FjaGVLZXlDb29raWVzPy5sZW5ndGggPyBDYWNoZUNvb2tpZUJlaGF2aW9yLmFsbG93TGlzdCguLi5wcm9wcy5jYWNoZUtleUNvb2tpZXMpIDogKHByb3BzLmFsbG93Q29va2llcz8ubGVuZ3RoID8gQ2FjaGVDb29raWVCZWhhdmlvci5hbGxvd0xpc3QoLi4ucHJvcHMuYWxsb3dDb29raWVzKSA6IENhY2hlQ29va2llQmVoYXZpb3Iubm9uZSgpKSxcbiAgICAgICAgICAgIGVuYWJsZUFjY2VwdEVuY29kaW5nQnJvdGxpOiB0cnVlLFxuICAgICAgICAgICAgZW5hYmxlQWNjZXB0RW5jb2RpbmdHemlwOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBmb3IgdGhlIE51eHQgYXBwIHJvdXRlIGJlaGF2aW9yIG9mIHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbi5cbiAgICAgKiBObyBwb2xpY3kgaXMgY3JlYXRlZCBpZiBubyBleHBsaWNpdCBjb25maWcgaXMgcHJvdmlkZWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVOdXh0QXBwUmVxdWVzdFBvbGljeShwcm9wczogTnV4dFNlcnZlckFwcFN0YWNrUHJvcHMpOiBPcmlnaW5SZXF1ZXN0UG9saWN5fHVuZGVmaW5lZCB7XG5cbiAgICAgICAgLy8gSWYgbm8gZXhwbGljaXQgY29uZmlnIGlzIHByb3ZpZGVkLCB3ZSB3YW50IHRvIHVzZSB0aGUgZGVmYXVsdCBmcm9tIENsb3VkZnJvbnRcbiAgICAgICAgY29uc3QgaGFzQW55Q29uZmlnID0gcHJvcHMuZm9yd2FyZFF1ZXJ5UGFyYW1zPy5sZW5ndGggfHwgcHJvcHMuZm9yd2FyZEhlYWRlcnM/Lmxlbmd0aCB8fCBwcm9wcy5mb3J3YXJkQ29va2llcz8ubGVuZ3RoO1xuICAgICAgICBpZiAoIWhhc0FueUNvbmZpZykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT3JpZ2luUmVxdWVzdFBvbGljeSh0aGlzLCBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LXJlcXVlc3QtcG9saWN5YCwge1xuICAgICAgICAgICAgb3JpZ2luUmVxdWVzdFBvbGljeU5hbWU6IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tY2RuLXJlcXVlc3QtcG9saWN5YCxcbiAgICAgICAgICAgIGNvbW1lbnQ6IGBEZWZpbmVzIHdoaWNoIHJlcXVlc3QgZGF0YSB0byBwYXNzIHRvIHRoZSAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0gb3JpZ2luIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBjYWNoZSBrZXkuYCxcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nQmVoYXZpb3I6IHByb3BzLmZvcndhcmRRdWVyeVBhcmFtcz8ubGVuZ3RoID8gT3JpZ2luUmVxdWVzdFF1ZXJ5U3RyaW5nQmVoYXZpb3IuYWxsb3dMaXN0KC4uLnByb3BzLmZvcndhcmRRdWVyeVBhcmFtcykgOiBPcmlnaW5SZXF1ZXN0UXVlcnlTdHJpbmdCZWhhdmlvci5hbGwoKSxcbiAgICAgICAgICAgIGhlYWRlckJlaGF2aW9yOiBwcm9wcy5mb3J3YXJkSGVhZGVycz8ubGVuZ3RoID8gT3JpZ2luUmVxdWVzdEhlYWRlckJlaGF2aW9yLmFsbG93TGlzdCguLi5wcm9wcy5mb3J3YXJkSGVhZGVycykgOiBPcmlnaW5SZXF1ZXN0SGVhZGVyQmVoYXZpb3Iubm9uZSgpLFxuICAgICAgICAgICAgY29va2llQmVoYXZpb3I6IHByb3BzLmZvcndhcmRDb29raWVzPy5sZW5ndGggPyBPcmlnaW5SZXF1ZXN0Q29va2llQmVoYXZpb3IuYWxsb3dMaXN0KC4uLnByb3BzLmZvcndhcmRDb29raWVzKSA6IE9yaWdpblJlcXVlc3RDb29raWVCZWhhdmlvci5ub25lKCksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBiZWhhdmlvciBmb3IgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHRvIHJvdXRlIG1hdGNoaW5nIE51eHQgYXBwIEFQSSByZXF1ZXN0cyB0byB0aGUgQVBJIGdhdGV3YXkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVBcGlSb3V0ZUJlaGF2aW9yKCk6IFJlY29yZDxzdHJpbmcsIEJlaGF2aW9yT3B0aW9ucz4ge1xuICAgICAgICBjb25zdCBhcGlCZWhhdmlvcjogQmVoYXZpb3JPcHRpb25zID0ge1xuICAgICAgICAgICAgb3JpZ2luOiB0aGlzLmh0dHBPcmlnaW4sXG4gICAgICAgICAgICBjb21wcmVzczogdHJ1ZSxcbiAgICAgICAgICAgIGFsbG93ZWRNZXRob2RzOiBBbGxvd2VkTWV0aG9kcy5BTExPV19BTEwsXG4gICAgICAgICAgICBjYWNoZWRNZXRob2RzOiBDYWNoZWRNZXRob2RzLkNBQ0hFX0dFVF9IRUFEX09QVElPTlMsXG4gICAgICAgICAgICBjYWNoZVBvbGljeTogdGhpcy5hcHBDYWNoZVBvbGljeSxcbiAgICAgICAgICAgIG9yaWdpblJlcXVlc3RQb2xpY3k6IHRoaXMuYXBwUmVxdWVzdFBvbGljeSxcbiAgICAgICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBWaWV3ZXJQcm90b2NvbFBvbGljeS5IVFRQU19PTkxZXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcnVsZXM6IFJlY29yZDxzdHJpbmcsIEJlaGF2aW9yT3B0aW9ucz4gPSB7fTtcbiAgICAgICAgcnVsZXNbJy9hcGkvKiddID0gYXBpQmVoYXZpb3I7XG5cbiAgICAgICAgcmV0dXJuIHJ1bGVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBiZWhhdmlvciBmb3IgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHRvIHJvdXRlIG1hdGNoaW5nIGluY29taW5nIHJlcXVlc3RzIGZvciB0aGUgc3RhdGljIGFzc2V0c1xuICAgICAqIHRvIHRoZSBTMyBidWNrZXQgdGhhdCBob2xkcyB0aGVzZSBzdGF0aWMgYXNzZXRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZVN0YXRpY0Fzc2V0c1JvdXRlQmVoYXZpb3IoKTogUmVjb3JkPHN0cmluZywgQmVoYXZpb3JPcHRpb25zPiB7XG4gICAgICAgIGNvbnN0IHN0YXRpY0Fzc2V0c0NhY2hlQ29uZmlnOiBCZWhhdmlvck9wdGlvbnMgPSB7XG4gICAgICAgICAgICBvcmlnaW46IFMzQnVja2V0T3JpZ2luLndpdGhPcmlnaW5BY2Nlc3NJZGVudGl0eSh0aGlzLnN0YXRpY0Fzc2V0c0J1Y2tldCwge1xuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25BdHRlbXB0czogMixcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uVGltZW91dDogRHVyYXRpb24uc2Vjb25kcygzKSxcbiAgICAgICAgICAgICAgICBvcmlnaW5BY2Nlc3NJZGVudGl0eTogdGhpcy5jZG5BY2Nlc3NJZGVudGl0eSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY29tcHJlc3M6IHRydWUsXG4gICAgICAgICAgICBhbGxvd2VkTWV0aG9kczogQWxsb3dlZE1ldGhvZHMuQUxMT1dfR0VUX0hFQURfT1BUSU9OUyxcbiAgICAgICAgICAgIGNhY2hlZE1ldGhvZHM6IENhY2hlZE1ldGhvZHMuQ0FDSEVfR0VUX0hFQURfT1BUSU9OUyxcbiAgICAgICAgICAgIGNhY2hlUG9saWN5OiBDYWNoZVBvbGljeS5DQUNISU5HX09QVElNSVpFRCxcbiAgICAgICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBWaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQUyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBydWxlczogUmVjb3JkPHN0cmluZywgQmVoYXZpb3JPcHRpb25zPiA9IHt9O1xuICAgICAgICB0aGlzLnN0YXRpY0Fzc2V0Q29uZmlncy5mb3JFYWNoKGFzc2V0ID0+IHtcbiAgICAgICAgICAgIHJ1bGVzW2Ake2Fzc2V0LnRhcmdldH0ke2Fzc2V0LnBhdHRlcm59YF0gPSBzdGF0aWNBc3NldHNDYWNoZUNvbmZpZ1xuICAgICAgICB9KVxuXG4gICAgICAgIHJldHVybiBydWxlc1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBiZWhhdmlvciBmb3IgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHRvIHJvdXRlIG1hdGNoaW5nIGluY29taW5nIHJlcXVlc3RzIGZvciB0aGUgc2l0ZW1hcCBhc3NldHNcbiAgICAgKiB0byB0aGUgUzMgYnVja2V0IHRoYXQgaG9sZHMgdGhlc2Ugc2l0ZW1hcCBhc3NldHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlU2l0ZW1hcFJvdXRlQmVoYXZpb3IoKTogUmVjb3JkPHN0cmluZywgQmVoYXZpb3JPcHRpb25zPiB7XG4gICAgICAgIGlmICghdGhpcy5zaXRlbWFwQnVja2V0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTaXRlbWFwIGJ1Y2tldCBtdXN0IGV4aXN0IGJlZm9yZSBjcmVhdGluZyBzaXRlbWFwIHJvdXRlIGJlaGF2aW9yLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNpdGVtYXBDYWNoZUNvbmZpZzogQmVoYXZpb3JPcHRpb25zID0ge1xuICAgICAgICAgICAgb3JpZ2luOiBTM0J1Y2tldE9yaWdpbi53aXRoT3JpZ2luQWNjZXNzSWRlbnRpdHkodGhpcy5zaXRlbWFwQnVja2V0LCB7XG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbkF0dGVtcHRzOiAyLFxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25UaW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDMpLFxuICAgICAgICAgICAgICAgIG9yaWdpbkFjY2Vzc0lkZW50aXR5OiB0aGlzLmNkbkFjY2Vzc0lkZW50aXR5LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjb21wcmVzczogdHJ1ZSxcbiAgICAgICAgICAgIGFsbG93ZWRNZXRob2RzOiBBbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRF9PUFRJT05TLFxuICAgICAgICAgICAgY2FjaGVkTWV0aG9kczogQ2FjaGVkTWV0aG9kcy5DQUNIRV9HRVRfSEVBRF9PUFRJT05TLFxuICAgICAgICAgICAgY2FjaGVQb2xpY3k6IENhY2hlUG9saWN5LkNBQ0hJTkdfT1BUSU1JWkVELFxuICAgICAgICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IFZpZXdlclByb3RvY29sUG9saWN5LlJFRElSRUNUX1RPX0hUVFBTXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcnVsZXM6IFJlY29yZDxzdHJpbmcsIEJlaGF2aW9yT3B0aW9ucz4gPSB7fTtcbiAgICAgICAgcnVsZXNbJypzaXRlbWFwLnhtbCddID0gc2l0ZW1hcENhY2hlQ29uZmlnO1xuICAgICAgICBydWxlc1snKnNpdGVtYXAtZ29uZS54bWwnXSA9IHNpdGVtYXBDYWNoZUNvbmZpZztcbiAgICAgICAgcnVsZXNbJy9zaXRlbWFwcy8qJ10gPSBzaXRlbWFwQ2FjaGVDb25maWc7XG5cbiAgICAgICAgcmV0dXJuIHJ1bGVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwbG9hZHMgdGhlIHN0YXRpYyBhc3NldHMgb2YgdGhlIE51eHQgYXBwIGFzIGRlZmluZWQgaW4ge0BzZWUgZ2V0TnV4dEFwcFN0YXRpY0Fzc2V0Q29uZmlnc30gdG8gdGhlIHN0YXRpYyBhc3NldHMgUzMgYnVja2V0LlxuICAgICAqIEluIG9yZGVyIHRvIGVuYWJsZSBhIHplcm8tZG93bnRpbWUgZGVwbG95bWVudCB3aXRoIG1pbmltYWwgc3RvcmFnZSBsb2FkLFxuICAgICAqIHdlIGRlcGxveSB0aGUgc3RhdGljIGFzc2V0cyBvZiBldmVyeSBkZXBsb3ltZW50IGludG8gdGhlIHNhbWUgZm9sZGVyIGJ1dCBtYXJrIHRoZW0gd2l0aCBhIGRlcGxveW1lbnQgcmV2aXNpb24uXG4gICAgICogQnkgZG9pbmcgc28sIHRoZSBmaWxlcyBvZiBwcmV2aW91cyBkZXBsb3ltZW50cyBhcmUgcmV0YWluZWQgdG8gYWxsb3cgY2xpZW50cyB0byBjb250aW51ZSB0byB3b3JrIHdpdGggYW4gb2xkZXIgcmV2aXNpb25cbiAgICAgKiBidXQgZ2V0cyBjbGVhbmVkIHVwIGFmdGVyIGEgc3BlY2lmaWVkIHBlcmlvZCBvZiB0aW1lIHZpYSB0aGUgY2xlYW51cCBMYW1iZGEgZnVuY3Rpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb25maWd1cmVEZXBsb3ltZW50cygpOiBCdWNrZXREZXBsb3ltZW50W10ge1xuICAgICAgICBjb25zdCBsb2dHcm91cCA9IG5ldyBMb2dHcm91cCh0aGlzLCBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWFzc2V0cy1kZXBsb3ltZW50LWxvZ3NgLCB7XG4gICAgICAgICAgICBsb2dHcm91cE5hbWU6IGAvYXdzL2xhbWJkYS8ke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tYXNzZXRzLWRlcGxveW1lbnRgLFxuICAgICAgICAgICAgcmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLk9ORV9EQVksXG4gICAgICAgICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFJldHVybnMgYSBkZXBsb3ltZW50IGZvciBldmVyeSBjb25maWd1cmVkIHN0YXRpYyBhc3NldCB0eXBlIHRvIHJlc3BlY3QgdGhlIGRpZmZlcmVudCBjYWNoZSBzZXR0aW5nc1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0aWNBc3NldENvbmZpZ3MuZmlsdGVyKGFzc2V0ID0+IGV4aXN0c1N5bmMoYXNzZXQuc291cmNlKSkubWFwKChhc3NldCwgYXNzZXRJbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBCdWNrZXREZXBsb3ltZW50KHRoaXMsIGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tYXNzZXRzLWRlcGxveW1lbnQtJHthc3NldEluZGV4fWAsIHtcbiAgICAgICAgICAgICAgICBzb3VyY2VzOiBbU291cmNlLmFzc2V0KGFzc2V0LnNvdXJjZSwge1xuICAgICAgICAgICAgICAgICAgICBleGNsdWRlOiBhc3NldC5leGNsdWRlLFxuICAgICAgICAgICAgICAgIH0pXSxcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogdGhpcy5zdGF0aWNBc3NldHNCdWNrZXQsXG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb25LZXlQcmVmaXg6IGFzc2V0LnRhcmdldC5yZXBsYWNlKC9eXFwvKy9nLCAnJyksIC8vIFJlbW92ZSBsZWFkaW5nIHNsYXNoXG4gICAgICAgICAgICAgICAgcHJ1bmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHN0b3JhZ2VDbGFzczogU3RvcmFnZUNsYXNzLlNUQU5EQVJELFxuICAgICAgICAgICAgICAgIGV4Y2x1ZGU6IFsnKiddLFxuICAgICAgICAgICAgICAgIGluY2x1ZGU6IFthc3NldC5wYXR0ZXJuXSxcbiAgICAgICAgICAgICAgICBjYWNoZUNvbnRyb2w6IGFzc2V0LmNhY2hlQ29udHJvbCxcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogYXNzZXQuY29udGVudFR5cGUsXG4gICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uOiBhc3NldC5pbnZhbGlkYXRlT25DaGFuZ2UgPyB0aGlzLmNkbiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25QYXRoczogYXNzZXQuaW52YWxpZGF0ZU9uQ2hhbmdlID8gW2AvJHthc3NldC5wYXR0ZXJufWBdIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGxvZ0dyb3VwOiBsb2dHcm91cCxcblxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFN0b3JlIGJ1aWxkIHJldmlzaW9uIG9uIGV2ZXJ5IGFzc2V0IHRvIGFsbG93IGNsZWFudXAgb2Ygb3V0ZGF0ZWQgYXNzZXRzXG4gICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiB0aGlzLmRlcGxveW1lbnRSZXZpc2lvbixcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgLy8gU29tZSBOdXh0IGFwcGxpY2F0aW9ucyBoYXZlIGEgbG90IG9mIGFzc2V0cyB0byBkZXBsb3kgd2hlcmVieSB0aGUgZnVuY3Rpb24gbWlnaHQgcnVuIG91dCBvZiBtZW1vcnkuXG4gICAgICAgICAgICAgICAgLy8gQWRkaXRpb25hbGx5LCBhIGhpZ2ggbWVtb3J5IGxpbWl0IG1pZ2h0IHNwZWVkIHVwIGRlcGxveW1lbnRzLlxuICAgICAgICAgICAgICAgIG1lbW9yeUxpbWl0OiAxNzkyXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlcyB0aGUgaG9zdGVkIHpvbmUgYXQgd2hpY2ggdGhlIEROUyByZWNvcmRzIHNoYWxsIGJlIGNyZWF0ZWQgdG8gYWNjZXNzIHRoZSBOdXh0IGFwcCBvbiB0aGUgaW50ZXJuZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcHNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgZmluZEhvc3RlZFpvbmUocHJvcHM6IE51eHRTZXJ2ZXJBcHBTdGFja1Byb3BzKTogSUhvc3RlZFpvbmUge1xuICAgICAgICBjb25zdCBkb21haW5QYXJ0cyA9IHByb3BzLmRvbWFpbi5zcGxpdCgnLicpO1xuXG4gICAgICAgIHJldHVybiBIb3N0ZWRab25lLmZyb21Ib3N0ZWRab25lQXR0cmlidXRlcyh0aGlzLCBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWhvc3RlZC16b25lYCwge1xuICAgICAgICAgICAgaG9zdGVkWm9uZUlkOiBwcm9wcy5ob3N0ZWRab25lSWQsXG4gICAgICAgICAgICB6b25lTmFtZTogZG9tYWluUGFydHNbZG9tYWluUGFydHMubGVuZ3RoIC0gMV0sIC8vIFN1cHBvcnQgc3ViZG9tYWluc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRoZSBETlMgcmVjb3JkcyB0byBhY2Nlc3MgdGhlIE51eHQgYXBwIG9uIHRoZSBpbnRlcm5ldCB2aWEgdGhlIGN1c3RvbSBkb21haW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcHNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlRG5zUmVjb3Jkcyhwcm9wczogTnV4dFNlcnZlckFwcFN0YWNrUHJvcHMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaG9zdGVkWm9uZSA9IHRoaXMuZmluZEhvc3RlZFpvbmUocHJvcHMpO1xuICAgICAgICBjb25zdCBkbnNUYXJnZXQgPSBSZWNvcmRUYXJnZXQuZnJvbUFsaWFzKG5ldyBDbG91ZEZyb250VGFyZ2V0KHRoaXMuY2RuKSk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIGEgcmVjb3JkIGZvciBJUHY0XG4gICAgICAgIG5ldyBBUmVjb3JkKHRoaXMsIGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0taXB2NC1yZWNvcmRgLCB7XG4gICAgICAgICAgICByZWNvcmROYW1lOiBwcm9wcy5kb21haW4sXG4gICAgICAgICAgICB6b25lOiBob3N0ZWRab25lLFxuICAgICAgICAgICAgdGFyZ2V0OiBkbnNUYXJnZXQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIENyZWF0ZSBhIHJlY29yZCBmb3IgSVB2NlxuICAgICAgICBuZXcgQWFhYVJlY29yZCh0aGlzLCBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LWlwdjYtcmVjb3JkYCwge1xuICAgICAgICAgICAgcmVjb3JkTmFtZTogcHJvcHMuZG9tYWluLFxuICAgICAgICAgICAgem9uZTogaG9zdGVkWm9uZSxcbiAgICAgICAgICAgIHRhcmdldDogZG5zVGFyZ2V0LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2NoZWR1bGVkIHJ1bGUgdG8gcGluZyB0aGUgTnV4dCBhcHAgTGFtYmRhIGZ1bmN0aW9uIGV2ZXJ5IDUgbWludXRlcyBpbiBvcmRlciB0byBrZWVwIGl0IHdhcm1cbiAgICAgKiBhbmQgc3BlZWQgdXAgaW5pdGlhbCBTU1IgcmVxdWVzdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlQXBwUGluZ1J1bGUocHJvcHM6IE51eHRTZXJ2ZXJBcHBTdGFja1Byb3BzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZha2VBcGlHYXRld2F5RXZlbnREYXRhID0ge1xuICAgICAgICAgICAgXCJ2ZXJzaW9uXCI6IFwiMi4wXCIsXG4gICAgICAgICAgICBcInJvdXRlS2V5XCI6IFwiR0VUIC97cHJveHkrfVwiLFxuICAgICAgICAgICAgXCJyYXdQYXRoXCI6IFwiL1wiLFxuICAgICAgICAgICAgXCJyYXdRdWVyeVN0cmluZ1wiOiBcIlwiLFxuICAgICAgICAgICAgXCJoZWFkZXJzXCI6IHt9LFxuICAgICAgICAgICAgXCJyZXF1ZXN0Q29udGV4dFwiOiB7XG4gICAgICAgICAgICAgICAgXCJkb21haW5OYW1lXCI6IHByb3BzLmRvbWFpbixcbiAgICAgICAgICAgICAgICBcImh0dHBcIjoge1xuICAgICAgICAgICAgICAgICAgICBcIm1ldGhvZFwiOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICBcInBhdGhcIjogXCIvXCIsXG4gICAgICAgICAgICAgICAgICAgIFwicHJvdG9jb2xcIjogXCJIVFRQLzEuMVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIG5ldyBSdWxlKHRoaXMsIGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tcGluZ2VyLXJ1bGVgLCB7XG4gICAgICAgICAgICBydWxlTmFtZTogYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1waW5nZXJgLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBQaW5ncyB0aGUgTGFtYmRhIGZ1bmN0aW9uIG9mIHRoZSAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0gYXBwIGV2ZXJ5IDUgbWludXRlcyB0byBrZWVwIGl0IHdhcm0uYCxcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICBzY2hlZHVsZTogU2NoZWR1bGUucmF0ZShEdXJhdGlvbi5taW51dGVzKDUpKSxcbiAgICAgICAgICAgIHRhcmdldHM6IFtuZXcgTGFtYmRhRnVuY3Rpb24odGhpcy5hcHBMYW1iZGFGdW5jdGlvbiwge1xuICAgICAgICAgICAgICAgIGV2ZW50OiBSdWxlVGFyZ2V0SW5wdXQuZnJvbU9iamVjdChmYWtlQXBpR2F0ZXdheUV2ZW50RGF0YSlcbiAgICAgICAgICAgIH0pXSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2NoZWR1bGVkIHJ1bGUgdGhhdCBydW5zIGV2ZXJ5IFR1ZXNkYXkgYXQgMDM6MzAgQU0gR01UIHRvIHRyaWdnZXJcbiAgICAgKiBvdXIgY2xlYW51cCBMYW1iZGEgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlQ2xlYW51cFRyaWdnZXJSdWxlKCk6IHZvaWQge1xuICAgICAgICBuZXcgUnVsZSh0aGlzLCBgJHt0aGlzLnJlc291cmNlSWRQcmVmaXh9LXNjaGVkdWxlci1ydWxlYCwge1xuICAgICAgICAgICAgcnVsZU5hbWU6IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tc2NoZWR1bGVyYCxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgVHJpZ2dlcnMgYSBjbGVhbnVwIG9mIHRoZSBvdXRkYXRlZCBzdGF0aWMgYXNzZXRzIGF0IHRoZSAke3RoaXMuc3RhdGljQXNzZXRzQnVja2V0LmJ1Y2tldE5hbWV9IFMzIGJ1Y2tldC5gLFxuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIHNjaGVkdWxlOiBTY2hlZHVsZS5jcm9uKHt3ZWVrRGF5OiAnMicsIGhvdXI6ICczJywgbWludXRlOiAnMzAnfSksXG4gICAgICAgICAgICB0YXJnZXRzOiBbbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMuY2xlYW51cExhbWJkYUZ1bmN0aW9uKV0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBTMyBidWNrZXQgdG8gc3RvcmUgdGhlIGFjY2VzcyBsb2dzIG9mIHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUFjY2Vzc0xvZ3NCdWNrZXQoKTogQnVja2V0IHtcbiAgICAgICAgY29uc3QgYnVja2V0TmFtZSA9IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tYWNjZXNzLWxvZ3NgO1xuICAgICAgICBjb25zdCBidWNrZXQgPSBuZXcgQnVja2V0KHRoaXMsIGJ1Y2tldE5hbWUsIHtcbiAgICAgICAgICAgIGJ1Y2tldE5hbWUsXG4gICAgICAgICAgICBibG9ja1B1YmxpY0FjY2VzczogQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgICAgICAgb2JqZWN0T3duZXJzaGlwOiBPYmplY3RPd25lcnNoaXAuQlVDS0VUX09XTkVSX1BSRUZFUlJFRCxcbiAgICAgICAgICAgIC8vIFdoZW4gdGhlIHN0YWNrIGlzIGRlc3Ryb3llZCwgd2UgZXhwZWN0IGV2ZXJ5dGhpbmcgdG8gYmUgZGVsZXRlZFxuICAgICAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgICAgICAgYXV0b0RlbGV0ZU9iamVjdHM6IHRydWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGJ1Y2tldC5ncmFudFJlYWRXcml0ZSh0aGlzLmNkbkFjY2Vzc0lkZW50aXR5KTtcblxuICAgICAgICByZXR1cm4gYnVja2V0O1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQWNjZXNzTG9nc0FuYWx5c2lzKHByb3BzOiBOdXh0U2VydmVyQXBwU3RhY2tQcm9wcyk6IENsb3VkRnJvbnRBY2Nlc3NMb2dzQW5hbHlzaXMge1xuICAgICAgICBpZiAoIXRoaXMuYWNjZXNzTG9nc0J1Y2tldCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBY2Nlc3MgYnVja2V0IG5vdCBzZXQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENsb3VkRnJvbnRBY2Nlc3NMb2dzQW5hbHlzaXModGhpcywgYCR7dGhpcy5yZXNvdXJjZUlkUHJlZml4fS1hY2Nlc3MtbG9ncy1hbmFseXNpc2AsIHtcbiAgICAgICAgICAgIGJ1Y2tldDogdGhpcy5hY2Nlc3NMb2dzQnVja2V0LFxuICAgICAgICAgICAgcmVzb3VyY2VQcmVmaXg6IGAke3RoaXMucmVzb3VyY2VJZFByZWZpeH0tYWNjZXNzLWxvZ3NgLFxuICAgICAgICAgICAgYWNjZXNzTG9nQ29va2llczogcHJvcHMuYWNjZXNzTG9nQ29va2llcyxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
@@ -125,7 +125,7 @@ export class NuxtServerAppStack extends Stack {
|
|
|
125
125
|
* The origin request policy that specifies which HTTP headers, cookies, and query strings
|
|
126
126
|
* CloudFront forwards to the Nuxt app without affecting the cache key.
|
|
127
127
|
*/
|
|
128
|
-
private appRequestPolicy: OriginRequestPolicy;
|
|
128
|
+
private appRequestPolicy: OriginRequestPolicy | undefined;
|
|
129
129
|
|
|
130
130
|
/**
|
|
131
131
|
* The behavior for the CloudFront distribution to route incoming web requests
|
|
@@ -251,7 +251,7 @@ export class NuxtServerAppStack extends Stack {
|
|
|
251
251
|
* @private
|
|
252
252
|
*/
|
|
253
253
|
private createAppLambdaFunction(props: NuxtServerAppStackProps): Function {
|
|
254
|
-
const funcName = `${this.resourceIdPrefix}-
|
|
254
|
+
const funcName = `${this.resourceIdPrefix}-nuxt`;
|
|
255
255
|
|
|
256
256
|
const appLogGroup = new LogGroup(this, `${funcName}-logs`, {
|
|
257
257
|
logGroupName: `/aws/lambda/${funcName}`,
|
|
@@ -286,7 +286,7 @@ export class NuxtServerAppStack extends Stack {
|
|
|
286
286
|
* which restricts the consumer to a specific yarn or npm version.
|
|
287
287
|
*/
|
|
288
288
|
private createCleanupLambdaFunction(props: NuxtServerAppStackProps): Function {
|
|
289
|
-
const functionName: string = `${this.resourceIdPrefix}-cleanup
|
|
289
|
+
const functionName: string = `${this.resourceIdPrefix}-cleanup`;
|
|
290
290
|
const functionDirPath = path.join(__dirname, '../../functions/assets-cleanup');
|
|
291
291
|
|
|
292
292
|
const cleanupLogGroup = new LogGroup(this, `${functionName}-logs`, {
|
|
@@ -463,8 +463,16 @@ export class NuxtServerAppStack extends Stack {
|
|
|
463
463
|
|
|
464
464
|
/**
|
|
465
465
|
* Creates an origin request policy for the Nuxt app route behavior of the CloudFront distribution.
|
|
466
|
+
* No policy is created if no explicit config is provided.
|
|
466
467
|
*/
|
|
467
|
-
private createNuxtAppRequestPolicy(props: NuxtServerAppStackProps): OriginRequestPolicy {
|
|
468
|
+
private createNuxtAppRequestPolicy(props: NuxtServerAppStackProps): OriginRequestPolicy|undefined {
|
|
469
|
+
|
|
470
|
+
// If no explicit config is provided, we want to use the default from Cloudfront
|
|
471
|
+
const hasAnyConfig = props.forwardQueryParams?.length || props.forwardHeaders?.length || props.forwardCookies?.length;
|
|
472
|
+
if (!hasAnyConfig) {
|
|
473
|
+
return undefined;
|
|
474
|
+
}
|
|
475
|
+
|
|
468
476
|
return new OriginRequestPolicy(this, `${this.resourceIdPrefix}-request-policy`, {
|
|
469
477
|
originRequestPolicyName: `${this.resourceIdPrefix}-cdn-request-policy`,
|
|
470
478
|
comment: `Defines which request data to pass to the ${this.resourceIdPrefix} origin without affecting the cache key.`,
|
|
@@ -562,6 +570,12 @@ export class NuxtServerAppStack extends Stack {
|
|
|
562
570
|
* but gets cleaned up after a specified period of time via the cleanup Lambda function.
|
|
563
571
|
*/
|
|
564
572
|
private configureDeployments(): BucketDeployment[] {
|
|
573
|
+
const logGroup = new LogGroup(this, `${this.resourceIdPrefix}-assets-deployment-logs`, {
|
|
574
|
+
logGroupName: `/aws/lambda/${this.resourceIdPrefix}-assets-deployment`,
|
|
575
|
+
retention: RetentionDays.ONE_DAY,
|
|
576
|
+
removalPolicy: RemovalPolicy.DESTROY,
|
|
577
|
+
});
|
|
578
|
+
|
|
565
579
|
// Returns a deployment for every configured static asset type to respect the different cache settings
|
|
566
580
|
return this.staticAssetConfigs.filter(asset => existsSync(asset.source)).map((asset, assetIndex) => {
|
|
567
581
|
return new BucketDeployment(this, `${this.resourceIdPrefix}-assets-deployment-${assetIndex}`, {
|
|
@@ -578,7 +592,7 @@ export class NuxtServerAppStack extends Stack {
|
|
|
578
592
|
contentType: asset.contentType,
|
|
579
593
|
distribution: asset.invalidateOnChange ? this.cdn : undefined,
|
|
580
594
|
distributionPaths: asset.invalidateOnChange ? [`/${asset.pattern}`] : undefined,
|
|
581
|
-
|
|
595
|
+
logGroup: logGroup,
|
|
582
596
|
|
|
583
597
|
metadata: {
|
|
584
598
|
// Store build revision on every asset to allow cleanup of outdated assets
|
|
@@ -54,7 +54,7 @@ export interface NuxtServerAppStackProps extends NuxtAppStackProps {
|
|
|
54
54
|
* An array of HTTP headers to forward to the Nuxt app on origin requests without affecting the cache key at CloudFront edge locations.
|
|
55
55
|
* This should only be used for headers that do not affect the response.
|
|
56
56
|
*
|
|
57
|
-
*
|
|
57
|
+
* Only the Cloudfront default headers are forwarded by default.
|
|
58
58
|
*
|
|
59
59
|
* {@link https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html}
|
|
60
60
|
*/
|
|
@@ -63,7 +63,8 @@ export interface NuxtServerAppStackProps extends NuxtAppStackProps {
|
|
|
63
63
|
* An array of HTTP headers to forward to the Nuxt app and to include in the cache key for objects that are cached at CloudFront edge locations.
|
|
64
64
|
* This should be used for headers that might affect the response, e.g., 'Authorization'.
|
|
65
65
|
*
|
|
66
|
-
*
|
|
66
|
+
* Only the Cloudfront default headers are forwarded,
|
|
67
|
+
* but no headers are included in the cache key by default.
|
|
67
68
|
*
|
|
68
69
|
* {@link https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html}
|
|
69
70
|
*/
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTnV4dFNlcnZlckFwcFN0YWNrUHJvcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJOdXh0U2VydmVyQXBwU3RhY2tQcm9wcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt0eXBlIE51eHRBcHBTdGFja1Byb3BzfSBmcm9tIFwiLi4vTnV4dEFwcFN0YWNrUHJvcHNcIjtcblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBwcm9wcyByZXF1aXJlZCBmb3IgdGhlIHtAc2VlIE51eHRTZXJ2ZXJBcHBTdGFja30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnV4dFNlcnZlckFwcFN0YWNrUHJvcHMgZXh0ZW5kcyBOdXh0QXBwU3RhY2tQcm9wcyB7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgQVJOIG9mIHRoZSBjZXJ0aWZpY2F0ZSB0byB1c2UgYXQgdGhlIEFwaUdhdGV3YXkgZm9yIHRoZSBOdXh0IGFwcCB0byBtYWtlIGl0IGFjY2Vzc2libGUgdmlhIHRoZSBjdXN0b20gZG9tYWluXG4gICAgICogYW5kIHRvIHByb3ZpZGUgdGhlIGN1c3RvbSBkb21haW4gdG8gdGhlIE51eHQgYXBwIHZpYSB0aGUgJ0hvc3QnIGhlYWRlciBmb3Igc2VydmVyIHNpZGUgcmVuZGVyaW5nIHVzZSBjYXNlcy5cbiAgICAgKiBUaGUgY2VydGlmaWNhdGUgbXVzdCBiZSBpc3N1ZWQgaW4gdGhlIHNhbWUgcmVnaW9uIGFzIHNwZWNpZmllZCB2aWEgJ2Vudi5yZWdpb24nIGFzIEFwaUdhdGV3YXkgd29ya3MgcmVnaW9uYWxseS5cbiAgICAgKi9cbiAgICByZWFkb25seSByZWdpb25hbFRsc0NlcnRpZmljYXRlQXJuOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZmlsZSBuYW1lICh3aXRob3V0IGV4dGVuc2lvbikgb2YgdGhlIExhbWJkYSBlbnRyeXBvaW50IHdpdGhpbiB0aGUgJ3NlcnZlcicgZGlyZWN0b3J5IGV4cG9ydGluZyBhIGhhbmRsZXIuXG4gICAgICogRGVmYXVsdHMgdG8gXCJpbmRleFwiLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGVudHJ5cG9pbnQ/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBIEpTT04gc2VyaWFsaXplZCBzdHJpbmcgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHBhc3MgdG8gdGhlIExhbWJkYSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICByZWFkb25seSBlbnRyeXBvaW50RW52Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1lbW9yeSBzaXplIHRvIGFwcGx5IHRvIHRoZSBOdXh0IGFwcCdzIExhbWJkYS5cbiAgICAgKiBEZWZhdWx0cyB0byAxNzkyTUIgKG9wdGltaXplZCBmb3IgY29zdHMgYW5kIHBlcmZvcm1hbmNlIGZvciBzdGFuZGFyZCBOdXh0IGFwcHMpLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IG1lbW9yeVNpemU/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGVuYWJsZSBBV1MgWC1SYXkgZm9yIHRoZSBOdXh0IExhbWJkYSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICByZWFkb25seSBlbmFibGVUcmFjaW5nPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZW5hYmxlIGEgZ2xvYmFsIFNpdGVtYXAgYnVja2V0IHdoaWNoIGlzIHBlcm1hbmVudGx5IGFjY2Vzc2libGUgdGhyb3VnaCBtdWx0aXBsZSBkZXBsb3ltZW50cy5cbiAgICAgKi9cbiAgICByZWFkb25seSBlbmFibGVTaXRlbWFwPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZW5hYmxlIChIVFRQUyBvbmx5KSBBUEkgYWNjZXNzIHRvIHRoZSBOdXh0IGFwcCB2aWEgdGhlIGAvYXBpYCBwYXRoIHdoaWNoIHN1cHBvcnQgYWxsIEhUVFAgbWV0aG9kcy5cbiAgICAgKiBTZWUgaHR0cHM6Ly9udXh0LmNvbS9kb2NzL2d1aWRlL2RpcmVjdG9yeS1zdHJ1Y3R1cmUvc2VydmVyI3JlY2lwZXMgZm9yIGRldGFpbHMuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZW5hYmxlQXBpPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZW5hYmxlIHJlcG9ydGluZyBvZiBDbG91ZEZyb250IGFjY2VzcyBsb2dzIHZpYSBBdGhlbmEuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZW5hYmxlQWNjZXNzTG9nc0FuYWx5c2lzPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEFycmF5IG9mIGNvb2tpZSBuYW1lcyB0byBpbmNsdWRlIGluIHRoZSBhY2Nlc3MgbG9ncyAod2hpdGVsaXN0KS5cbiAgICAgKi9cbiAgICByZWFkb25seSBhY2Nlc3NMb2dDb29raWVzPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGRheXMgdG8gcmV0YWluIHN0YXRpYyBhc3NldHMgb2Ygb3V0ZGF0ZWQgZGVwbG95bWVudHMgaW4gdGhlIFMzIGJ1Y2tldC5cbiAgICAgKiBVc2VmdWwgdG8gYWxsb3cgdXNlcnMgdG8gc3RpbGwgYWNjZXNzIG9sZCBhc3NldHMgYWZ0ZXIgYSBuZXcgZGVwbG95bWVudCB3aGVuIHRoZXkgYXJlIHN0aWxsIGJyb3dzaW5nIG9uIGFuIG9sZCB2ZXJzaW9uLlxuICAgICAqIERlZmF1bHRzIHRvIDMwIGRheXMuXG4gICAgICovXG4gICAgcmVhZG9ubHkgb3V0ZGF0ZWRBc3NldHNSZXRlbnRpb25EYXlzPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgSFRUUCBoZWFkZXJzIHRvIGZvcndhcmQgdG8gdGhlIE51eHQgYXBwIG9uIG9yaWdpbiByZXF1ZXN0cyB3aXRob3V0IGFmZmVjdGluZyB0aGUgY2FjaGUga2V5IGF0IENsb3VkRnJvbnQgZWRnZSBsb2NhdGlvbnMuXG4gICAgICogVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGZvciBoZWFkZXJzIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgcmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBObyBoZWFkZXJzIGFyZSBmb3J3YXJkZWQgYnkgZGVmYXVsdC5cbiAgICAgKlxuICAgICAqIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWx9XG4gICAgICovXG4gICAgcmVhZG9ubHkgZm9yd2FyZEhlYWRlcnM/OiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIEhUVFAgaGVhZGVycyB0byBmb3J3YXJkIHRvIHRoZSBOdXh0IGFwcCBhbmQgdG8gaW5jbHVkZSBpbiB0aGUgY2FjaGUga2V5IGZvciBvYmplY3RzIHRoYXQgYXJlIGNhY2hlZCBhdCBDbG91ZEZyb250IGVkZ2UgbG9jYXRpb25zLlxuICAgICAqIFRoaXMgc2hvdWxkIGJlIHVzZWQgZm9yIGhlYWRlcnMgdGhhdCBtaWdodCBhZmZlY3QgdGhlIHJlc3BvbnNlLCBlLmcuLCAnQXV0aG9yaXphdGlvbicuXG4gICAgICpcbiAgICAgKiBObyBoZWFkZXJzIGFyZSBmb3J3YXJkZWQgb3IgaW5jbHVkZWQgaW4gdGhlIGNhY2hlIGtleSBieSBkZWZhdWx0LlxuICAgICAqXG4gICAgICoge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWx9XG4gICAgICovXG4gICAgcmVhZG9ubHkgY2FjaGVLZXlIZWFkZXJzPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBjb29raWVzIHRvIGZvcndhcmQgdG8gdGhlIE51eHQgYXBwIG9uIG9yaWdpbiByZXF1ZXN0cyB3aXRob3V0IGFmZmVjdGluZyB0aGUgY2FjaGUga2V5IGF0IENsb3VkRnJvbnQgZWRnZSBsb2NhdGlvbnMuXG4gICAgICogVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjb29raWVzIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgcmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBObyBjb29raWVzIGFyZSBmb3J3YXJkZWQgYnkgZGVmYXVsdC5cbiAgICAgKlxuICAgICAqIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWx9XG4gICAgICovXG4gICAgcmVhZG9ubHkgZm9yd2FyZENvb2tpZXM/OiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGNvb2tpZXMgdG8gZm9yd2FyZCB0byB0aGUgTnV4dCBhcHAgYW5kIHRvIGluY2x1ZGUgaW4gdGhlIGNhY2hlIGtleSBmb3Igb2JqZWN0cyB0aGF0IGFyZSBjYWNoZWQgYXQgQ2xvdWRGcm9udCBlZGdlIGxvY2F0aW9ucy5cbiAgICAgKiBUaGlzIHNob3VsZCBiZSB1c2VkIGZvciBjb29raWVzIHRoYXQgbWlnaHQgYWZmZWN0IHRoZSByZXNwb25zZSwgZS5nLiwgYXV0aGVudGljYXRpb24gY29va2llcy5cbiAgICAgKlxuICAgICAqIE5vIGNvb2tpZXMgYXJlIGZvcndhcmRlZCBvciBpbmNsdWRlZCBpbiB0aGUgY2FjaGUga2V5IGJ5IGRlZmF1bHQuXG4gICAgICpcbiAgICAgKiB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbH1cbiAgICAgKi9cbiAgICByZWFkb25seSBjYWNoZUtleUNvb2tpZXM/OiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHF1ZXJ5IHBhcmFtcyB0byBmb3J3YXJkIHRvIHRoZSBOdXh0IGFwcCBvbiBvcmlnaW4gcmVxdWVzdHMgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGNhY2hlIGtleSBhdCBDbG91ZEZyb250IGVkZ2UgbG9jYXRpb25zLlxuICAgICAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgcXVlcnkgcGFyYW1zIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgcmVzcG9uc2UgYW5kIGFyZSByZXF1aXJlZCBvbiBTU1IgcmVxdWVzdHMuXG4gICAgICpcbiAgICAgKiBBbGwgcXVlcnkgcGFyYW1zIGFyZSBmb3J3YXJkZWQgYnkgZGVmYXVsdC5cbiAgICAgKlxuICAgICAqIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWx9XG4gICAgICovXG4gICAgcmVhZG9ubHkgZm9yd2FyZFF1ZXJ5UGFyYW1zPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBxdWVyeSBwYXJhbXMgdG8gZm9yd2FyZCB0byB0aGUgTnV4dCBhcHAgYW5kIHRvIGluY2x1ZGUgaW4gdGhlIGNhY2hlIGtleSBmb3Igb2JqZWN0cyB0aGF0IGFyZSBjYWNoZWQgYXQgQ2xvdWRGcm9udCBlZGdlIGxvY2F0aW9ucy5cbiAgICAgKiBUaGlzIHNob3VsZCBiZSB1c2VkIGZvciBxdWVyeSBwYXJhbXMgdGhhdCBhZmZlY3QgdGhlIHJlc3BvbnNlIGFuZCBhcmUgcmVxdWlyZWQgb24gU1NSIHJlcXVlc3RzLCBlLmcuLCBmaWx0ZXJzLlxuICAgICAqXG4gICAgICogQWxsIHF1ZXJ5IHBhcmFtcyBhcmUgZm9yd2FyZGVkIGFuZCBpbmNsdWRlZCBpbiB0aGUgY2FjaGUga2V5IGJ5IGRlZmF1bHQuXG4gICAgICpcbiAgICAgKiB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbH1cbiAgICAgKi9cbiAgICByZWFkb25seSBjYWNoZUtleVF1ZXJ5UGFyYW1zPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBxdWVyeSBwYXJhbXMgdG8gcHJldmVudCBmb3J3YXJkaW5nIHRvIHRoZSBOdXh0IGFwcCBhbmQgdG8gbm90IGluY2x1ZGUgaW4gdGhlIGNhY2hlIGtleSBmb3Igb2JqZWN0cyB0aGF0IGFyZSBjYWNoZWQgYXQgQ2xvdWRGcm9udCBlZGdlIGxvY2F0aW9ucy5cbiAgICAgKiBXaGVuIHNldCwgYWxsIHF1ZXJ5IHBhcmFtcyB0aGF0IGFyZSBub3Qgc3BlY2lmaWVkIGluIHRoaXMgYXJyYXkgd2lsbCBiZSBmb3J3YXJkZWQgdG8gdGhlIE51eHQgYXBwIGFuZCBpbmNsdWRlZCBpbiB0aGUgY2FjaGUga2V5LlxuICAgICAqIFRoaXMgc2hvdWxkIGJlIHVzZWQgZm9yIHF1ZXJ5IHBhcmFtcyB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIHJlc3BvbnNlIGFuZCBhcmUgbm90IHJlcXVpcmVkIG9uIFNTUiByZXF1ZXN0cywgZS5nLiwgJ2ZiY2xpZCcgb3IgJ3V0bV9jYW1wYWlnbicuXG4gICAgICpcbiAgICAgKiBJZiBib3RoIHtAc2VlIGNhY2hlS2V5UXVlcnlQYXJhbXN9IGFuZCB7QHNlZSBkZW55Q2FjaGVLZXlRdWVyeVBhcmFtc30gYXJlIHNwZWNpZmllZCwgdGhlIHtAc2VlIGRlbnlDYWNoZUtleVF1ZXJ5UGFyYW1zfSB3aWxsIGJlIGlnbm9yZWQuXG4gICAgICogQWxsIHF1ZXJ5IHBhcmFtcyBhcmUgZm9yd2FyZGVkIGFuZCBpbmNsdWRlZCBpbiB0aGUgY2FjaGUga2V5IGJ5IGRlZmF1bHQuXG4gICAgICpcbiAgICAgKiB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbH1cbiAgICAgKi9cbiAgICByZWFkb25seSBkZW55Q2FjaGVLZXlRdWVyeVBhcmFtcz86IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgaGVhZGVycyB0byBwYXNzIHRvIHRoZSBOdXh0IGFwcCBvbiBTU1IgcmVxdWVzdHMuXG4gICAgICogVGhlIG1vcmUgaGVhZGVycyBhcmUgcGFzc2VkLCB0aGUgd2Vha2VyIHRoZSBjYWNoZSBwZXJmb3JtYW5jZSB3aWxsIGJlLCBhcyB0aGUgY2FjaGUga2V5XG4gICAgICogaXMgYmFzZWQgb24gdGhlIGhlYWRlcnMuXG4gICAgICogTm8gaGVhZGVycyBhcmUgcGFzc2VkIGJ5IGRlZmF1bHQuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgY2FjaGVLZXlIZWFkZXJzfSBpbnN0ZWFkLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGFsbG93SGVhZGVycz86IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgY29va2llcyB0byBwYXNzIHRvIHRoZSBOdXh0IGFwcCBvbiBTU1IgcmVxdWVzdHMuXG4gICAgICogVGhlIG1vcmUgY29va2llcyBhcmUgcGFzc2VkLCB0aGUgd2Vha2VyIHRoZSBjYWNoZSBwZXJmb3JtYW5jZSB3aWxsIGJlLCBhcyB0aGUgY2FjaGUga2V5XG4gICAgICogaXMgYmFzZWQgb24gdGhlIGNvb2tpZXMuXG4gICAgICogTm8gY29va2llcyBhcmUgcGFzc2VkIGJ5IGRlZmF1bHQuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgY2FjaGVLZXlDb29raWVzfSBpbnN0ZWFkLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGFsbG93Q29va2llcz86IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgcXVlcnkgcGFyYW0ga2V5cyB0byBwYXNzIHRvIHRoZSBOdXh0IGFwcCBvbiBTU1IgcmVxdWVzdHMuXG4gICAgICogVGhlIG1vcmUgcXVlcnkgcGFyYW1zIGFyZSBwYXNzZWQsIHRoZSB3ZWFrZXIgdGhlIGNhY2hlIHBlcmZvcm1hbmNlIHdpbGwgYmUsIGFzIHRoZSBjYWNoZSBrZXlcbiAgICAgKiBpcyBiYXNlZCBvbiB0aGUgcXVlcnkgcGFyYW1zLlxuICAgICAqIE5vdGUgdGhhdCB0aGlzIGNvbmZpZyBjYW4gbm90IGJlIGNvbWJpbmVkIHdpdGgge0BzZWUgZGVueVF1ZXJ5UGFyYW1zfS5cbiAgICAgKiBJZiBib3RoIGFyZSBzcGVjaWZpZWQsIHRoZSB7QHNlZSBkZW55UXVlcnlQYXJhbXN9IHdpbGwgYmUgaWdub3JlZC5cbiAgICAgKiBBbGwgcXVlcnkgcGFyYW1zIGFyZSBwYXNzZWQgYnkgZGVmYXVsdC5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBjYWNoZUtleVF1ZXJ5UGFyYW1zfSBpbnN0ZWFkLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGFsbG93UXVlcnlQYXJhbXM/OiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHF1ZXJ5IHBhcmFtIGtleXMgdG8gZGVueSBwYXNzaW5nIHRvIHRoZSBOdXh0IGFwcCBvbiBTU1IgcmVxdWVzdHMuXG4gICAgICogSXQgbWlnaHQgYmUgdXNlZnVsIHRvIHByZXZlbnQgc3BlY2lmaWMgZXh0ZXJuYWwgcXVlcnkgcGFyYW1zLCBlLmcuLCBmYmNsaWQsIHV0bV9jYW1wYWlnbiwgLi4uLFxuICAgICAqIHRvIGltcHJvdmUgY2FjaGUgcGVyZm9ybWFuY2UsIGFzIHRoZSBjYWNoZSBrZXkgaXMgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBxdWVyeSBwYXJhbXMuXG4gICAgICogTm90ZSB0aGF0IHRoaXMgY29uZmlnIGNhbiBub3QgYmUgY29tYmluZWQgd2l0aCB7QHNlZSBhbGxvd1F1ZXJ5UGFyYW1zfS5cbiAgICAgKiBJZiBib3RoIGFyZSBzcGVjaWZpZWQsIHRoZSB7QHNlZSBkZW55UXVlcnlQYXJhbXN9IHdpbGwgYmUgaWdub3JlZC5cbiAgICAgKiBBbGwgcXVlcnkgcGFyYW1zIGFyZSBwYXNzZWQgYnkgZGVmYXVsdC5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBkZW55Q2FjaGVLZXlRdWVyeVBhcmFtc30gaW5zdGVhZC5cbiAgICAgKi9cbiAgICByZWFkb25seSBkZW55UXVlcnlQYXJhbXM/OiBzdHJpbmdbXTtcbn0iXX0=
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTnV4dFNlcnZlckFwcFN0YWNrUHJvcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJOdXh0U2VydmVyQXBwU3RhY2tQcm9wcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt0eXBlIE51eHRBcHBTdGFja1Byb3BzfSBmcm9tIFwiLi4vTnV4dEFwcFN0YWNrUHJvcHNcIjtcblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBwcm9wcyByZXF1aXJlZCBmb3IgdGhlIHtAc2VlIE51eHRTZXJ2ZXJBcHBTdGFja30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnV4dFNlcnZlckFwcFN0YWNrUHJvcHMgZXh0ZW5kcyBOdXh0QXBwU3RhY2tQcm9wcyB7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgQVJOIG9mIHRoZSBjZXJ0aWZpY2F0ZSB0byB1c2UgYXQgdGhlIEFwaUdhdGV3YXkgZm9yIHRoZSBOdXh0IGFwcCB0byBtYWtlIGl0IGFjY2Vzc2libGUgdmlhIHRoZSBjdXN0b20gZG9tYWluXG4gICAgICogYW5kIHRvIHByb3ZpZGUgdGhlIGN1c3RvbSBkb21haW4gdG8gdGhlIE51eHQgYXBwIHZpYSB0aGUgJ0hvc3QnIGhlYWRlciBmb3Igc2VydmVyIHNpZGUgcmVuZGVyaW5nIHVzZSBjYXNlcy5cbiAgICAgKiBUaGUgY2VydGlmaWNhdGUgbXVzdCBiZSBpc3N1ZWQgaW4gdGhlIHNhbWUgcmVnaW9uIGFzIHNwZWNpZmllZCB2aWEgJ2Vudi5yZWdpb24nIGFzIEFwaUdhdGV3YXkgd29ya3MgcmVnaW9uYWxseS5cbiAgICAgKi9cbiAgICByZWFkb25seSByZWdpb25hbFRsc0NlcnRpZmljYXRlQXJuOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZmlsZSBuYW1lICh3aXRob3V0IGV4dGVuc2lvbikgb2YgdGhlIExhbWJkYSBlbnRyeXBvaW50IHdpdGhpbiB0aGUgJ3NlcnZlcicgZGlyZWN0b3J5IGV4cG9ydGluZyBhIGhhbmRsZXIuXG4gICAgICogRGVmYXVsdHMgdG8gXCJpbmRleFwiLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGVudHJ5cG9pbnQ/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBIEpTT04gc2VyaWFsaXplZCBzdHJpbmcgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHBhc3MgdG8gdGhlIExhbWJkYSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICByZWFkb25seSBlbnRyeXBvaW50RW52Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1lbW9yeSBzaXplIHRvIGFwcGx5IHRvIHRoZSBOdXh0IGFwcCdzIExhbWJkYS5cbiAgICAgKiBEZWZhdWx0cyB0byAxNzkyTUIgKG9wdGltaXplZCBmb3IgY29zdHMgYW5kIHBlcmZvcm1hbmNlIGZvciBzdGFuZGFyZCBOdXh0IGFwcHMpLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IG1lbW9yeVNpemU/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGVuYWJsZSBBV1MgWC1SYXkgZm9yIHRoZSBOdXh0IExhbWJkYSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICByZWFkb25seSBlbmFibGVUcmFjaW5nPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZW5hYmxlIGEgZ2xvYmFsIFNpdGVtYXAgYnVja2V0IHdoaWNoIGlzIHBlcm1hbmVudGx5IGFjY2Vzc2libGUgdGhyb3VnaCBtdWx0aXBsZSBkZXBsb3ltZW50cy5cbiAgICAgKi9cbiAgICByZWFkb25seSBlbmFibGVTaXRlbWFwPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZW5hYmxlIChIVFRQUyBvbmx5KSBBUEkgYWNjZXNzIHRvIHRoZSBOdXh0IGFwcCB2aWEgdGhlIGAvYXBpYCBwYXRoIHdoaWNoIHN1cHBvcnQgYWxsIEhUVFAgbWV0aG9kcy5cbiAgICAgKiBTZWUgaHR0cHM6Ly9udXh0LmNvbS9kb2NzL2d1aWRlL2RpcmVjdG9yeS1zdHJ1Y3R1cmUvc2VydmVyI3JlY2lwZXMgZm9yIGRldGFpbHMuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZW5hYmxlQXBpPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZW5hYmxlIHJlcG9ydGluZyBvZiBDbG91ZEZyb250IGFjY2VzcyBsb2dzIHZpYSBBdGhlbmEuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZW5hYmxlQWNjZXNzTG9nc0FuYWx5c2lzPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEFycmF5IG9mIGNvb2tpZSBuYW1lcyB0byBpbmNsdWRlIGluIHRoZSBhY2Nlc3MgbG9ncyAod2hpdGVsaXN0KS5cbiAgICAgKi9cbiAgICByZWFkb25seSBhY2Nlc3NMb2dDb29raWVzPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIGRheXMgdG8gcmV0YWluIHN0YXRpYyBhc3NldHMgb2Ygb3V0ZGF0ZWQgZGVwbG95bWVudHMgaW4gdGhlIFMzIGJ1Y2tldC5cbiAgICAgKiBVc2VmdWwgdG8gYWxsb3cgdXNlcnMgdG8gc3RpbGwgYWNjZXNzIG9sZCBhc3NldHMgYWZ0ZXIgYSBuZXcgZGVwbG95bWVudCB3aGVuIHRoZXkgYXJlIHN0aWxsIGJyb3dzaW5nIG9uIGFuIG9sZCB2ZXJzaW9uLlxuICAgICAqIERlZmF1bHRzIHRvIDMwIGRheXMuXG4gICAgICovXG4gICAgcmVhZG9ubHkgb3V0ZGF0ZWRBc3NldHNSZXRlbnRpb25EYXlzPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgSFRUUCBoZWFkZXJzIHRvIGZvcndhcmQgdG8gdGhlIE51eHQgYXBwIG9uIG9yaWdpbiByZXF1ZXN0cyB3aXRob3V0IGFmZmVjdGluZyB0aGUgY2FjaGUga2V5IGF0IENsb3VkRnJvbnQgZWRnZSBsb2NhdGlvbnMuXG4gICAgICogVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGZvciBoZWFkZXJzIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgcmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBPbmx5IHRoZSBDbG91ZGZyb250IGRlZmF1bHQgaGVhZGVycyBhcmUgZm9yd2FyZGVkIGJ5IGRlZmF1bHQuXG4gICAgICpcbiAgICAgKiB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLW9yaWdpbi1yZXF1ZXN0cy5odG1sfVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGZvcndhcmRIZWFkZXJzPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBIVFRQIGhlYWRlcnMgdG8gZm9yd2FyZCB0byB0aGUgTnV4dCBhcHAgYW5kIHRvIGluY2x1ZGUgaW4gdGhlIGNhY2hlIGtleSBmb3Igb2JqZWN0cyB0aGF0IGFyZSBjYWNoZWQgYXQgQ2xvdWRGcm9udCBlZGdlIGxvY2F0aW9ucy5cbiAgICAgKiBUaGlzIHNob3VsZCBiZSB1c2VkIGZvciBoZWFkZXJzIHRoYXQgbWlnaHQgYWZmZWN0IHRoZSByZXNwb25zZSwgZS5nLiwgJ0F1dGhvcml6YXRpb24nLlxuICAgICAqXG4gICAgICogT25seSB0aGUgQ2xvdWRmcm9udCBkZWZhdWx0IGhlYWRlcnMgYXJlIGZvcndhcmRlZCxcbiAgICAgKiBidXQgbm8gaGVhZGVycyBhcmUgaW5jbHVkZWQgaW4gdGhlIGNhY2hlIGtleSBieSBkZWZhdWx0LlxuICAgICAqXG4gICAgICoge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWx9XG4gICAgICovXG4gICAgcmVhZG9ubHkgY2FjaGVLZXlIZWFkZXJzPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBjb29raWVzIHRvIGZvcndhcmQgdG8gdGhlIE51eHQgYXBwIG9uIG9yaWdpbiByZXF1ZXN0cyB3aXRob3V0IGFmZmVjdGluZyB0aGUgY2FjaGUga2V5IGF0IENsb3VkRnJvbnQgZWRnZSBsb2NhdGlvbnMuXG4gICAgICogVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjb29raWVzIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgcmVzcG9uc2UuXG4gICAgICpcbiAgICAgKiBObyBjb29raWVzIGFyZSBmb3J3YXJkZWQgYnkgZGVmYXVsdC5cbiAgICAgKlxuICAgICAqIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWx9XG4gICAgICovXG4gICAgcmVhZG9ubHkgZm9yd2FyZENvb2tpZXM/OiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGNvb2tpZXMgdG8gZm9yd2FyZCB0byB0aGUgTnV4dCBhcHAgYW5kIHRvIGluY2x1ZGUgaW4gdGhlIGNhY2hlIGtleSBmb3Igb2JqZWN0cyB0aGF0IGFyZSBjYWNoZWQgYXQgQ2xvdWRGcm9udCBlZGdlIGxvY2F0aW9ucy5cbiAgICAgKiBUaGlzIHNob3VsZCBiZSB1c2VkIGZvciBjb29raWVzIHRoYXQgbWlnaHQgYWZmZWN0IHRoZSByZXNwb25zZSwgZS5nLiwgYXV0aGVudGljYXRpb24gY29va2llcy5cbiAgICAgKlxuICAgICAqIE5vIGNvb2tpZXMgYXJlIGZvcndhcmRlZCBvciBpbmNsdWRlZCBpbiB0aGUgY2FjaGUga2V5IGJ5IGRlZmF1bHQuXG4gICAgICpcbiAgICAgKiB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbH1cbiAgICAgKi9cbiAgICByZWFkb25seSBjYWNoZUtleUNvb2tpZXM/OiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHF1ZXJ5IHBhcmFtcyB0byBmb3J3YXJkIHRvIHRoZSBOdXh0IGFwcCBvbiBvcmlnaW4gcmVxdWVzdHMgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGNhY2hlIGtleSBhdCBDbG91ZEZyb250IGVkZ2UgbG9jYXRpb25zLlxuICAgICAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgcXVlcnkgcGFyYW1zIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgcmVzcG9uc2UgYW5kIGFyZSByZXF1aXJlZCBvbiBTU1IgcmVxdWVzdHMuXG4gICAgICpcbiAgICAgKiBBbGwgcXVlcnkgcGFyYW1zIGFyZSBmb3J3YXJkZWQgYnkgZGVmYXVsdC5cbiAgICAgKlxuICAgICAqIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWx9XG4gICAgICovXG4gICAgcmVhZG9ubHkgZm9yd2FyZFF1ZXJ5UGFyYW1zPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBxdWVyeSBwYXJhbXMgdG8gZm9yd2FyZCB0byB0aGUgTnV4dCBhcHAgYW5kIHRvIGluY2x1ZGUgaW4gdGhlIGNhY2hlIGtleSBmb3Igb2JqZWN0cyB0aGF0IGFyZSBjYWNoZWQgYXQgQ2xvdWRGcm9udCBlZGdlIGxvY2F0aW9ucy5cbiAgICAgKiBUaGlzIHNob3VsZCBiZSB1c2VkIGZvciBxdWVyeSBwYXJhbXMgdGhhdCBhZmZlY3QgdGhlIHJlc3BvbnNlIGFuZCBhcmUgcmVxdWlyZWQgb24gU1NSIHJlcXVlc3RzLCBlLmcuLCBmaWx0ZXJzLlxuICAgICAqXG4gICAgICogQWxsIHF1ZXJ5IHBhcmFtcyBhcmUgZm9yd2FyZGVkIGFuZCBpbmNsdWRlZCBpbiB0aGUgY2FjaGUga2V5IGJ5IGRlZmF1bHQuXG4gICAgICpcbiAgICAgKiB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbH1cbiAgICAgKi9cbiAgICByZWFkb25seSBjYWNoZUtleVF1ZXJ5UGFyYW1zPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBxdWVyeSBwYXJhbXMgdG8gcHJldmVudCBmb3J3YXJkaW5nIHRvIHRoZSBOdXh0IGFwcCBhbmQgdG8gbm90IGluY2x1ZGUgaW4gdGhlIGNhY2hlIGtleSBmb3Igb2JqZWN0cyB0aGF0IGFyZSBjYWNoZWQgYXQgQ2xvdWRGcm9udCBlZGdlIGxvY2F0aW9ucy5cbiAgICAgKiBXaGVuIHNldCwgYWxsIHF1ZXJ5IHBhcmFtcyB0aGF0IGFyZSBub3Qgc3BlY2lmaWVkIGluIHRoaXMgYXJyYXkgd2lsbCBiZSBmb3J3YXJkZWQgdG8gdGhlIE51eHQgYXBwIGFuZCBpbmNsdWRlZCBpbiB0aGUgY2FjaGUga2V5LlxuICAgICAqIFRoaXMgc2hvdWxkIGJlIHVzZWQgZm9yIHF1ZXJ5IHBhcmFtcyB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIHJlc3BvbnNlIGFuZCBhcmUgbm90IHJlcXVpcmVkIG9uIFNTUiByZXF1ZXN0cywgZS5nLiwgJ2ZiY2xpZCcgb3IgJ3V0bV9jYW1wYWlnbicuXG4gICAgICpcbiAgICAgKiBJZiBib3RoIHtAc2VlIGNhY2hlS2V5UXVlcnlQYXJhbXN9IGFuZCB7QHNlZSBkZW55Q2FjaGVLZXlRdWVyeVBhcmFtc30gYXJlIHNwZWNpZmllZCwgdGhlIHtAc2VlIGRlbnlDYWNoZUtleVF1ZXJ5UGFyYW1zfSB3aWxsIGJlIGlnbm9yZWQuXG4gICAgICogQWxsIHF1ZXJ5IHBhcmFtcyBhcmUgZm9yd2FyZGVkIGFuZCBpbmNsdWRlZCBpbiB0aGUgY2FjaGUga2V5IGJ5IGRlZmF1bHQuXG4gICAgICpcbiAgICAgKiB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbH1cbiAgICAgKi9cbiAgICByZWFkb25seSBkZW55Q2FjaGVLZXlRdWVyeVBhcmFtcz86IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgaGVhZGVycyB0byBwYXNzIHRvIHRoZSBOdXh0IGFwcCBvbiBTU1IgcmVxdWVzdHMuXG4gICAgICogVGhlIG1vcmUgaGVhZGVycyBhcmUgcGFzc2VkLCB0aGUgd2Vha2VyIHRoZSBjYWNoZSBwZXJmb3JtYW5jZSB3aWxsIGJlLCBhcyB0aGUgY2FjaGUga2V5XG4gICAgICogaXMgYmFzZWQgb24gdGhlIGhlYWRlcnMuXG4gICAgICogTm8gaGVhZGVycyBhcmUgcGFzc2VkIGJ5IGRlZmF1bHQuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgY2FjaGVLZXlIZWFkZXJzfSBpbnN0ZWFkLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGFsbG93SGVhZGVycz86IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgY29va2llcyB0byBwYXNzIHRvIHRoZSBOdXh0IGFwcCBvbiBTU1IgcmVxdWVzdHMuXG4gICAgICogVGhlIG1vcmUgY29va2llcyBhcmUgcGFzc2VkLCB0aGUgd2Vha2VyIHRoZSBjYWNoZSBwZXJmb3JtYW5jZSB3aWxsIGJlLCBhcyB0aGUgY2FjaGUga2V5XG4gICAgICogaXMgYmFzZWQgb24gdGhlIGNvb2tpZXMuXG4gICAgICogTm8gY29va2llcyBhcmUgcGFzc2VkIGJ5IGRlZmF1bHQuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgY2FjaGVLZXlDb29raWVzfSBpbnN0ZWFkLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGFsbG93Q29va2llcz86IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgcXVlcnkgcGFyYW0ga2V5cyB0byBwYXNzIHRvIHRoZSBOdXh0IGFwcCBvbiBTU1IgcmVxdWVzdHMuXG4gICAgICogVGhlIG1vcmUgcXVlcnkgcGFyYW1zIGFyZSBwYXNzZWQsIHRoZSB3ZWFrZXIgdGhlIGNhY2hlIHBlcmZvcm1hbmNlIHdpbGwgYmUsIGFzIHRoZSBjYWNoZSBrZXlcbiAgICAgKiBpcyBiYXNlZCBvbiB0aGUgcXVlcnkgcGFyYW1zLlxuICAgICAqIE5vdGUgdGhhdCB0aGlzIGNvbmZpZyBjYW4gbm90IGJlIGNvbWJpbmVkIHdpdGgge0BzZWUgZGVueVF1ZXJ5UGFyYW1zfS5cbiAgICAgKiBJZiBib3RoIGFyZSBzcGVjaWZpZWQsIHRoZSB7QHNlZSBkZW55UXVlcnlQYXJhbXN9IHdpbGwgYmUgaWdub3JlZC5cbiAgICAgKiBBbGwgcXVlcnkgcGFyYW1zIGFyZSBwYXNzZWQgYnkgZGVmYXVsdC5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBjYWNoZUtleVF1ZXJ5UGFyYW1zfSBpbnN0ZWFkLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGFsbG93UXVlcnlQYXJhbXM/OiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHF1ZXJ5IHBhcmFtIGtleXMgdG8gZGVueSBwYXNzaW5nIHRvIHRoZSBOdXh0IGFwcCBvbiBTU1IgcmVxdWVzdHMuXG4gICAgICogSXQgbWlnaHQgYmUgdXNlZnVsIHRvIHByZXZlbnQgc3BlY2lmaWMgZXh0ZXJuYWwgcXVlcnkgcGFyYW1zLCBlLmcuLCBmYmNsaWQsIHV0bV9jYW1wYWlnbiwgLi4uLFxuICAgICAqIHRvIGltcHJvdmUgY2FjaGUgcGVyZm9ybWFuY2UsIGFzIHRoZSBjYWNoZSBrZXkgaXMgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBxdWVyeSBwYXJhbXMuXG4gICAgICogTm90ZSB0aGF0IHRoaXMgY29uZmlnIGNhbiBub3QgYmUgY29tYmluZWQgd2l0aCB7QHNlZSBhbGxvd1F1ZXJ5UGFyYW1zfS5cbiAgICAgKiBJZiBib3RoIGFyZSBzcGVjaWZpZWQsIHRoZSB7QHNlZSBkZW55UXVlcnlQYXJhbXN9IHdpbGwgYmUgaWdub3JlZC5cbiAgICAgKiBBbGwgcXVlcnkgcGFyYW1zIGFyZSBwYXNzZWQgYnkgZGVmYXVsdC5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBkZW55Q2FjaGVLZXlRdWVyeVBhcmFtc30gaW5zdGVhZC5cbiAgICAgKi9cbiAgICByZWFkb25seSBkZW55UXVlcnlQYXJhbXM/OiBzdHJpbmdbXTtcbn0iXX0=
|
|
@@ -66,7 +66,7 @@ export interface NuxtServerAppStackProps extends NuxtAppStackProps {
|
|
|
66
66
|
* An array of HTTP headers to forward to the Nuxt app on origin requests without affecting the cache key at CloudFront edge locations.
|
|
67
67
|
* This should only be used for headers that do not affect the response.
|
|
68
68
|
*
|
|
69
|
-
*
|
|
69
|
+
* Only the Cloudfront default headers are forwarded by default.
|
|
70
70
|
*
|
|
71
71
|
* {@link https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html}
|
|
72
72
|
*/
|
|
@@ -76,7 +76,8 @@ export interface NuxtServerAppStackProps extends NuxtAppStackProps {
|
|
|
76
76
|
* An array of HTTP headers to forward to the Nuxt app and to include in the cache key for objects that are cached at CloudFront edge locations.
|
|
77
77
|
* This should be used for headers that might affect the response, e.g., 'Authorization'.
|
|
78
78
|
*
|
|
79
|
-
*
|
|
79
|
+
* Only the Cloudfront default headers are forwarded,
|
|
80
|
+
* but no headers are included in the cache key by default.
|
|
80
81
|
*
|
|
81
82
|
* {@link https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-the-cache-key.html}
|
|
82
83
|
*/
|