@cdklabs/cdk-appmod-catalog-blueprints 1.9.2 → 1.11.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/.jsii +80 -80
- package/lib/document-processing/adapter/queued-s3-adapter.js +1 -1
- package/lib/document-processing/agentic-document-processing.js +1 -1
- package/lib/document-processing/base-document-processing.js +1 -1
- package/lib/document-processing/bedrock-document-processing.js +1 -1
- package/lib/document-processing/default-document-processing-config.js +1 -1
- package/lib/framework/agents/base-agent.js +1 -1
- package/lib/framework/agents/batch-agent.js +1 -1
- package/lib/framework/agents/default-agent-config.js +1 -1
- package/lib/framework/agents/interactive-agent.js +17 -8
- package/lib/framework/agents/knowledge-base/base-knowledge-base.js +1 -1
- package/lib/framework/agents/knowledge-base/bedrock-knowledge-base.js +3 -2
- package/lib/framework/agents/resources/interactive-agent-handler/index.py +3 -0
- package/lib/framework/bedrock/bedrock.js +1 -1
- package/lib/framework/custom-resource/default-runtimes.js +1 -1
- package/lib/framework/foundation/access-log.js +1 -1
- package/lib/framework/foundation/eventbridge-broker.js +1 -1
- package/lib/framework/foundation/network.js +1 -1
- package/lib/framework/tests/interactive-agent.test.js +55 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/utilities/data-loader.js +1 -1
- package/lib/utilities/lambda-iam-utils.js +1 -1
- package/lib/utilities/observability/cloudfront-distribution-observability-property-injector.js +1 -1
- package/lib/utilities/observability/cloudwatch-transaction-search.js +1 -1
- package/lib/utilities/observability/default-observability-config.js +1 -1
- package/lib/utilities/observability/lambda-observability-property-injector.js +1 -1
- package/lib/utilities/observability/log-group-data-protection-utils.js +1 -1
- package/lib/utilities/observability/powertools-config.js +1 -1
- package/lib/utilities/observability/state-machine-observability-property-injector.js +1 -1
- package/lib/webapp/frontend-construct.js +1 -1
- package/package.json +2 -2
|
@@ -38,5 +38,5 @@ class EventbridgeBroker extends constructs_1.Construct {
|
|
|
38
38
|
}
|
|
39
39
|
exports.EventbridgeBroker = EventbridgeBroker;
|
|
40
40
|
_a = JSII_RTTI_SYMBOL_1;
|
|
41
|
-
EventbridgeBroker[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.EventbridgeBroker", version: "1.
|
|
41
|
+
EventbridgeBroker[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.EventbridgeBroker", version: "1.11.0" };
|
|
42
42
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRicmlkZ2UtYnJva2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdXNlLWNhc2VzL2ZyYW1ld29yay9mb3VuZGF0aW9uL2V2ZW50YnJpZGdlLWJyb2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUE0QztBQUM1Qyx1REFBa0Q7QUFDbEQsaURBQTBDO0FBQzFDLHFFQUEwRDtBQUMxRCxpRkFBMkU7QUFDM0UsMkNBQXVDO0FBU3ZDLE1BQWEsaUJBQWtCLFNBQVEsc0JBQVM7SUFLOUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE2QjtRQUNyRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLElBQUksMkJBQWEsQ0FBQyxPQUFPLENBQUM7UUFDbkUsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksYUFBRyxDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRTtZQUMvRCxpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLGFBQWE7U0FDZCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUkscUJBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQzdDLFlBQVksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUN4QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxlQUFlLENBQUMsVUFBa0IsRUFBRSxXQUFnQjtRQUN6RCxPQUFPLElBQUksOENBQW9CLENBQUMsSUFBSSxFQUFFLHNCQUFzQixVQUFVLEVBQUUsRUFBRTtZQUN4RSxPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN2QixNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVc7b0JBQ3hCLFVBQVU7b0JBQ1YsTUFBTSxFQUFFLDZCQUFTLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztpQkFDMUM7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBL0JILDhDQWdDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlbW92YWxQb2xpY3kgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBFdmVudEJ1cyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0IHsgS2V5IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgeyBUYXNrSW5wdXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucyc7XG5pbXBvcnQgeyBFdmVudEJyaWRnZVB1dEV2ZW50cyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zLXRhc2tzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50YnJpZGdlQnJva2VyUHJvcHMge1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBldmVudFNvdXJjZTogc3RyaW5nO1xuICByZWFkb25seSBrbXNLZXk/OiBLZXk7XG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBSZW1vdmFsUG9saWN5O1xufVxuXG5leHBvcnQgY2xhc3MgRXZlbnRicmlkZ2VCcm9rZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50U291cmNlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV2ZW50YnVzOiBFdmVudEJ1cztcbiAgcmVhZG9ubHkga21zS2V5OiBLZXk7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEV2ZW50YnJpZGdlQnJva2VyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIGNvbnN0IHJlbW92YWxQb2xpY3kgPSBwcm9wcy5yZW1vdmFsUG9saWN5IHx8IFJlbW92YWxQb2xpY3kuREVTVFJPWTtcbiAgICB0aGlzLmttc0tleSA9IHByb3BzLmttc0tleSB8fCBuZXcgS2V5KHRoaXMsICdFdmVudEJyb2tlcktNU0tleScsIHtcbiAgICAgIGVuYWJsZUtleVJvdGF0aW9uOiB0cnVlLFxuICAgICAgcmVtb3ZhbFBvbGljeSxcbiAgICB9KTtcbiAgICB0aGlzLmV2ZW50YnVzID0gbmV3IEV2ZW50QnVzKHRoaXMsICdFdmVudEJ1cycsIHtcbiAgICAgIGV2ZW50QnVzTmFtZTogcHJvcHMubmFtZSxcbiAgICAgIGttc0tleTogdGhpcy5rbXNLZXksXG4gICAgfSk7XG5cbiAgICB0aGlzLmV2ZW50U291cmNlID0gcHJvcHMuZXZlbnRTb3VyY2U7XG4gIH1cblxuICBwdWJsaWMgc2VuZFZpYVNmbkNoYWluKGRldGFpbFR5cGU6IHN0cmluZywgZXZlbnREZXRhaWw6IGFueSkge1xuICAgIHJldHVybiBuZXcgRXZlbnRCcmlkZ2VQdXRFdmVudHModGhpcywgYFNmbkViUHV0RXZlbnRDaGFpbi0ke2RldGFpbFR5cGV9YCwge1xuICAgICAgZW50cmllczogW1xuICAgICAgICB7XG4gICAgICAgICAgZXZlbnRCdXM6IHRoaXMuZXZlbnRidXMsXG4gICAgICAgICAgc291cmNlOiB0aGlzLmV2ZW50U291cmNlLFxuICAgICAgICAgIGRldGFpbFR5cGUsXG4gICAgICAgICAgZGV0YWlsOiBUYXNrSW5wdXQuZnJvbU9iamVjdChldmVudERldGFpbCksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG59Il19
|
|
@@ -90,5 +90,5 @@ class Network extends constructs_1.Construct {
|
|
|
90
90
|
}
|
|
91
91
|
exports.Network = Network;
|
|
92
92
|
_a = JSII_RTTI_SYMBOL_1;
|
|
93
|
-
Network[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.Network", version: "1.
|
|
93
|
+
Network[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.Network", version: "1.11.0" };
|
|
94
94
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy9mcmFtZXdvcmsvZm91bmRhdGlvbi9uZXR3b3JrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUN0QyxpREFBK1M7QUFDL1MsMkNBQXVDO0FBY3ZDLE1BQWEsT0FBUSxTQUFRLHNCQUFTO0lBQzdCLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxPQUF5QjtRQUM1RixNQUFNLEdBQUcsR0FBRyxhQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRWhFLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUM1QixXQUFXLEVBQUUsR0FBRztTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBS0QsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUFzQixFQUFFO1FBQ2hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2QixJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLGFBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO29CQUM5QixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxxQkFBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7b0JBQ2pFLFdBQVcsRUFBRSxDQUFDO29CQUNkLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtvQkFDcEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO29CQUN0QixtQkFBbUIsRUFBRSxLQUFLLENBQUMsbUJBQW1CLElBQUk7d0JBQ2hEOzRCQUNFLElBQUksRUFBRSxVQUFVOzRCQUNoQixVQUFVLEVBQUUsb0JBQVUsQ0FBQyxnQkFBZ0I7NEJBQ3ZDLFFBQVEsRUFBRSxFQUFFO3lCQUNiO3FCQUNGO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksYUFBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7b0JBQzlCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxJQUFJLHFCQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztvQkFDakUsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLGtCQUFrQjtvQkFDNUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtvQkFDMUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksQ0FBQztvQkFDbkMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO29CQUNwQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87b0JBQ3RCLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxtQkFBbUIsSUFBSTt3QkFDaEQ7NEJBQ0UsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsVUFBVSxFQUFFLG9CQUFVLENBQUMsTUFBTTs0QkFDN0IsUUFBUSxFQUFFLEVBQUU7eUJBQ2I7d0JBQ0Q7NEJBQ0UsSUFBSSxFQUFFLFNBQVM7NEJBQ2YsVUFBVSxFQUFFLG9CQUFVLENBQUMsbUJBQW1COzRCQUMxQyxRQUFRLEVBQUUsRUFBRTt5QkFDYjt3QkFDRDs0QkFDRSxJQUFJLEVBQUUsVUFBVTs0QkFDaEIsVUFBVSxFQUFFLG9CQUFVLENBQUMsZ0JBQWdCOzRCQUN2QyxRQUFRLEVBQUUsRUFBRTt5QkFDYjtxQkFDRjtpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxFQUFVLEVBQUUsT0FBb0MsRUFBRSxJQUFZO1FBQ3pGLElBQUksT0FBTyxLQUFLLHdDQUE4QixDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRTtnQkFDM0MsT0FBTyxFQUFFLHNDQUE0QixDQUFDLEVBQUU7Z0JBQ3hDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO2FBQzdDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLHVCQUFhLENBQUMsSUFBSSxFQUFFLDZCQUE2QixFQUFFLEVBQUUsRUFBRTtZQUMvRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7U0FDZCxDQUFDLENBQUM7UUFFSCxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxjQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsY0FBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWpFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQywwQkFBMEIsRUFBRSxFQUFFLEVBQUU7WUFDbkUsT0FBTztZQUNQLGNBQWMsRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUMvQixPQUFPLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixFQUFFO1NBQzNDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSwwQkFBMEI7UUFDL0IsT0FBTztZQUNMLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsb0JBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsb0JBQVUsQ0FBQyxtQkFBbUI7U0FDOUYsQ0FBQztJQUNKLENBQUM7O0FBeEZILDBCQXlGQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCB7IEdhdGV3YXlWcGNFbmRwb2ludEF3c1NlcnZpY2UsIElJcEFkZHJlc3NlcywgSW50ZXJmYWNlVnBjRW5kcG9pbnQsIEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSwgSW50ZXJmYWNlVnBjRW5kcG9pbnRTZXJ2aWNlLCBJcEFkZHJlc3NlcywgSVBlZXIsIElWcGMsIE5hdFByb3ZpZGVyLCBQZWVyLCBQb3J0LCBTZWN1cml0eUdyb3VwLCBTdWJuZXRDb25maWd1cmF0aW9uLCBTdWJuZXRTZWxlY3Rpb24sIFN1Ym5ldFR5cGUsIFZwYywgVnBjTG9va3VwT3B0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya1Byb3BzIHtcbiAgcmVhZG9ubHkgZXhpc3RpbmdWcGM/OiBJVnBjO1xuICByZWFkb25seSBwcml2YXRlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaXBBZGRyZXNzZXM/OiBJSXBBZGRyZXNzZXM7XG4gIHJlYWRvbmx5IG5hdEdhdGV3YXlQcm92aWRlcj86IE5hdFByb3ZpZGVyO1xuICByZWFkb25seSBuYXRHYXRld2F5U3VibmV0cz86IFN1Ym5ldFNlbGVjdGlvbjtcbiAgcmVhZG9ubHkgbmF0R2F0ZXdheXM/OiBudW1iZXI7XG4gIHJlYWRvbmx5IG1heEF6cz86IG51bWJlcjtcbiAgcmVhZG9ubHkgdnBjTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgc3VibmV0Q29uZmlndXJhdGlvbj86IFN1Ym5ldENvbmZpZ3VyYXRpb25bXTtcbn1cblxuZXhwb3J0IGNsYXNzIE5ldHdvcmsgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgc3RhdGljIHVzZUV4aXN0aW5nVlBDRnJvbUxvb2t1cChzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBvcHRpb25zOiBWcGNMb29rdXBPcHRpb25zKTogTmV0d29yayB7XG4gICAgY29uc3QgdnBjID0gVnBjLmZyb21Mb29rdXAoc2NvcGUsIGAke2lkfS1leGlzdGluZ1ZwY2AsIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIG5ldyBOZXR3b3JrKHNjb3BlLCBpZCwge1xuICAgICAgZXhpc3RpbmdWcGM6IHZwYyxcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRvbmx5IHZwYzogSVZwYztcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogTmV0d29ya1Byb3BzO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBOZXR3b3JrUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgaWYgKCFwcm9wcy5leGlzdGluZ1ZwYykge1xuICAgICAgaWYgKHByb3BzLnByaXZhdGUpIHtcbiAgICAgICAgdGhpcy52cGMgPSBuZXcgVnBjKHRoaXMsICdWUEMnLCB7XG4gICAgICAgICAgaXBBZGRyZXNzZXM6IHByb3BzLmlwQWRkcmVzc2VzIHx8IElwQWRkcmVzc2VzLmNpZHIoJzEwLjAuMC4wLzE2JyksXG4gICAgICAgICAgbmF0R2F0ZXdheXM6IDAsXG4gICAgICAgICAgbWF4QXpzOiBwcm9wcy5tYXhBenMsXG4gICAgICAgICAgdnBjTmFtZTogcHJvcHMudnBjTmFtZSxcbiAgICAgICAgICBzdWJuZXRDb25maWd1cmF0aW9uOiBwcm9wcy5zdWJuZXRDb25maWd1cmF0aW9uIHx8IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogJ0lzb2xhdGVkJyxcbiAgICAgICAgICAgICAgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QUklWQVRFX0lTT0xBVEVELFxuICAgICAgICAgICAgICBjaWRyTWFzazogMjQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52cGMgPSBuZXcgVnBjKHRoaXMsICdWUEMnLCB7XG4gICAgICAgICAgaXBBZGRyZXNzZXM6IHByb3BzLmlwQWRkcmVzc2VzIHx8IElwQWRkcmVzc2VzLmNpZHIoJzEwLjAuMC4wLzE2JyksXG4gICAgICAgICAgbmF0R2F0ZXdheVByb3ZpZGVyOiBwcm9wcy5uYXRHYXRld2F5UHJvdmlkZXIsXG4gICAgICAgICAgbmF0R2F0ZXdheVN1Ym5ldHM6IHByb3BzLm5hdEdhdGV3YXlTdWJuZXRzLFxuICAgICAgICAgIG5hdEdhdGV3YXlzOiBwcm9wcy5uYXRHYXRld2F5cyB8fCAxLFxuICAgICAgICAgIG1heEF6czogcHJvcHMubWF4QXpzLFxuICAgICAgICAgIHZwY05hbWU6IHByb3BzLnZwY05hbWUsXG4gICAgICAgICAgc3VibmV0Q29uZmlndXJhdGlvbjogcHJvcHMuc3VibmV0Q29uZmlndXJhdGlvbiB8fCBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICdQdWJsaWMnLFxuICAgICAgICAgICAgICBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBVQkxJQyxcbiAgICAgICAgICAgICAgY2lkck1hc2s6IDI0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogJ1ByaXZhdGUnLFxuICAgICAgICAgICAgICBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MsXG4gICAgICAgICAgICAgIGNpZHJNYXNrOiAyNCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICdJc29sYXRlZCcsXG4gICAgICAgICAgICAgIHN1Ym5ldFR5cGU6IFN1Ym5ldFR5cGUuUFJJVkFURV9JU09MQVRFRCxcbiAgICAgICAgICAgICAgY2lkck1hc2s6IDI0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52cGMgPSBwcm9wcy5leGlzdGluZ1ZwYztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlU2VydmljZUVuZHBvaW50KGlkOiBzdHJpbmcsIHNlcnZpY2U6IEludGVyZmFjZVZwY0VuZHBvaW50U2VydmljZSwgcGVlcj86IElQZWVyKTogSW50ZXJmYWNlVnBjRW5kcG9pbnQge1xuICAgIGlmIChzZXJ2aWNlID09PSBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuUzMpIHtcbiAgICAgIHRoaXMudnBjLmFkZEdhdGV3YXlFbmRwb2ludChgJHtpZH0tZ2F0ZXdheWAsIHtcbiAgICAgICAgc2VydmljZTogR2F0ZXdheVZwY0VuZHBvaW50QXdzU2VydmljZS5TMyxcbiAgICAgICAgc3VibmV0czogW3RoaXMuYXBwbGljYXRpb25TdWJuZXRTZWxlY3Rpb24oKV0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWN1cml0eUdyb3VwID0gbmV3IFNlY3VyaXR5R3JvdXAodGhpcywgYHNnLWZvci1pbnRlcmZhY2UtZW5kcG9pbnQtJHtpZH1gLCB7XG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgIH0pO1xuXG4gICAgc2VjdXJpdHlHcm91cC5hZGRJbmdyZXNzUnVsZShwZWVyIHx8IFBlZXIuYW55SXB2NCgpLCBQb3J0LkhUVFBTKTtcblxuICAgIHJldHVybiB0aGlzLnZwYy5hZGRJbnRlcmZhY2VFbmRwb2ludChgaW50ZXJmYWNlLWVuZHBvaW50LWZvci0ke2lkfWAsIHtcbiAgICAgIHNlcnZpY2UsXG4gICAgICBzZWN1cml0eUdyb3VwczogW3NlY3VyaXR5R3JvdXBdLFxuICAgICAgc3VibmV0czogdGhpcy5hcHBsaWNhdGlvblN1Ym5ldFNlbGVjdGlvbigpLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFwcGxpY2F0aW9uU3VibmV0U2VsZWN0aW9uKCk6IFN1Ym5ldFNlbGVjdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Ym5ldFR5cGU6IHRoaXMucHJvcHMucHJpdmF0ZSA/IFN1Ym5ldFR5cGUuUFJJVkFURV9JU09MQVRFRCA6IFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyxcbiAgICB9O1xuICB9XG59Il19
|
|
@@ -9,6 +9,7 @@ const aws_s3_1 = require("aws-cdk-lib/aws-s3");
|
|
|
9
9
|
const aws_s3_assets_1 = require("aws-cdk-lib/aws-s3-assets");
|
|
10
10
|
const test_utils_1 = require("../../utilities/test-utils");
|
|
11
11
|
const interactive_agent_1 = require("../agents/interactive-agent");
|
|
12
|
+
const knowledge_base_1 = require("../agents/knowledge-base");
|
|
12
13
|
describe('InteractiveAgent', () => {
|
|
13
14
|
let app;
|
|
14
15
|
let stack;
|
|
@@ -783,4 +784,57 @@ describe('NoAuthenticator', () => {
|
|
|
783
784
|
expect(env).toEqual({ AUTH_TYPE: 'None' });
|
|
784
785
|
});
|
|
785
786
|
});
|
|
786
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3RpdmUtYWdlbnQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy9mcmFtZXdvcmsvdGVzdHMvaW50ZXJhY3RpdmUtYWdlbnQudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZCQUE2QjtBQUM3Qiw2Q0FBbUQ7QUFDbkQsdURBQXlEO0FBQ3pELHlEQUFvRTtBQUNwRSx1REFBaUU7QUFDakUsK0NBQTRDO0FBQzVDLDZEQUFrRDtBQUNsRCwyREFBMkQ7QUFDM0QsbUVBUXFDO0FBRXJDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUU7SUFDaEMsSUFBSSxHQUFRLENBQUM7SUFDYixJQUFJLEtBQVksQ0FBQztJQUNqQixJQUFJLFlBQW1CLENBQUM7SUFDeEIsTUFBTSxTQUFTLEdBQUcsdUNBQXlCLENBQUMsdUNBQXVDLENBQUM7SUFFcEYsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLEdBQUcsR0FBRyxJQUFBLDBCQUFhLEdBQUUsQ0FBQztRQUN0QixLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUU7WUFDbEMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFO1NBQ3RELENBQUMsQ0FBQztRQUNILFlBQVksR0FBRyxJQUFJLHFCQUFLLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRTtZQUM5QyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsb0RBQW9ELENBQUM7U0FDakYsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFO1FBQ3JDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7WUFDdEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUNqRCxTQUFTLEVBQUUsV0FBVztnQkFDdEIsZUFBZSxFQUFFO29CQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLFlBQVk7aUJBQ2I7YUFDRixDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMxQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHlDQUF5QyxFQUFFLEdBQUcsRUFBRTtZQUNuRCxNQUFNLEtBQUssR0FBRyxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQ2pELFNBQVMsRUFBRSxXQUFXO2dCQUN0QixlQUFlLEVBQUU7b0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtvQkFDdEMsWUFBWTtpQkFDYjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxDQUFDLHdDQUFvQixDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsMkNBQTJDLEVBQUUsR0FBRyxFQUFFO1lBQ3JELE1BQU0sS0FBSyxHQUFHLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDakQsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLGVBQWUsRUFBRTtvQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO29CQUN0QyxZQUFZO2lCQUNiO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxjQUFjLENBQUMsb0NBQWdCLENBQUMsQ0FBQztZQUM1RCxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLDhEQUE4RCxFQUFFLEdBQUcsRUFBRTtZQUN4RSxNQUFNLEtBQUssR0FBRyxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQ2pELFNBQVMsRUFBRSxXQUFXO2dCQUN0QixlQUFlLEVBQUU7b0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtvQkFDdEMsWUFBWTtpQkFDYjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsY0FBYyxDQUFDLG9EQUFnQyxDQUFDLENBQUM7UUFDakYsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsK0NBQStDLEVBQUUsR0FBRyxFQUFFO1lBQ3pELE1BQU0sS0FBSyxHQUFHLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDakQsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLGVBQWUsRUFBRTtvQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO29CQUN0QyxZQUFZO2lCQUNiO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxjQUFjLENBQUMsd0NBQW9CLENBQUMsQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtRQUM3QyxJQUFJLENBQUMsd0RBQXdELEVBQUUsR0FBRyxFQUFFO1lBQ2xFLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDbkMsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLGVBQWUsRUFBRTtvQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO29CQUN0QyxZQUFZO2lCQUNiO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsUUFBUSxDQUFDLHFCQUFxQixDQUFDLHVCQUF1QixFQUFFO2dCQUN0RCxPQUFPLEVBQUUsR0FBRyxFQUFFLGFBQWE7YUFDNUIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMscURBQXFELEVBQUUsR0FBRyxFQUFFO1lBQy9ELElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDbkMsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLGVBQWUsRUFBRTtvQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO29CQUN0QyxZQUFZO2lCQUNiO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsUUFBUSxDQUFDLHFCQUFxQixDQUFDLHVCQUF1QixFQUFFO2dCQUN0RCxVQUFVLEVBQUUsSUFBSTthQUNqQixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyw4Q0FBOEMsRUFBRSxHQUFHLEVBQUU7WUFDeEQsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUNuQyxTQUFTLEVBQUUsV0FBVztnQkFDdEIsZUFBZSxFQUFFO29CQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLFlBQVk7aUJBQ2I7YUFDRixDQUFDLENBQUM7WUFFSCxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxRQUFRLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLEVBQUU7Z0JBQ3RELE1BQU0sRUFBRSxrQkFBSyxDQUFDLFNBQVMsQ0FBQztvQkFDdEIsc0VBQXNFO2lCQUN2RSxDQUFDO2FBQ0gsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsNkRBQTZELEVBQUUsR0FBRyxFQUFFO1lBQ3ZFLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDbkMsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLGVBQWUsRUFBRTtvQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO29CQUN0QyxZQUFZO2lCQUNiO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsUUFBUSxDQUFDLHFCQUFxQixDQUFDLHVCQUF1QixFQUFFO2dCQUN0RCxXQUFXLEVBQUU7b0JBQ1gsU0FBUyxFQUFFLGtCQUFLLENBQUMsVUFBVSxDQUFDO3dCQUMxQix1QkFBdUIsRUFBRSxnQkFBZ0I7cUJBQzFDLENBQUM7aUJBQ0g7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxpREFBaUQsRUFBRSxHQUFHLEVBQUU7WUFDM0QsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUNuQyxTQUFTLEVBQUUsV0FBVztnQkFDdEIsZUFBZSxFQUFFO29CQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLFlBQVk7aUJBQ2I7YUFDRixDQUFDLENBQUM7WUFFSCxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxRQUFRLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLEVBQUU7Z0JBQ3RELFdBQVcsRUFBRTtvQkFDWCxTQUFTLEVBQUUsa0JBQUssQ0FBQyxVQUFVLENBQUM7d0JBQzFCLG1CQUFtQixFQUFFLGlCQUFpQjtxQkFDdkMsQ0FBQztpQkFDSDthQUNGLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLDhDQUE4QyxFQUFFLEdBQUcsRUFBRTtZQUN4RCxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQ25DLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixlQUFlLEVBQUU7b0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtvQkFDdEMsWUFBWTtpQkFDYjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyx1QkFBdUIsRUFBRTtnQkFDdEQsV0FBVyxFQUFFO29CQUNYLFNBQVMsRUFBRSxrQkFBSyxDQUFDLFVBQVUsQ0FBQzt3QkFDMUIsSUFBSSxFQUFFLE1BQU07cUJBQ2IsQ0FBQztpQkFDSDthQUNGLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtZQUNoRCxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQ25DLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixlQUFlLEVBQUU7b0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtvQkFDdEMsWUFBWTtpQkFDYjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyx1QkFBdUIsRUFBRTtnQkFDdEQsV0FBVyxFQUFFO29CQUNYLFNBQVMsRUFBRSxrQkFBSyxDQUFDLFVBQVUsQ0FBQzt3QkFDMUIsUUFBUSxFQUFFLGtCQUFLLENBQUMsUUFBUSxFQUFFO3FCQUMzQixDQUFDO2lCQUNIO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsK0NBQStDLEVBQUUsR0FBRyxFQUFFO1lBQ3pELElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDbkMsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLGVBQWUsRUFBRTtvQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO29CQUN0QyxZQUFZO2lCQUNiO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsUUFBUSxDQUFDLHFCQUFxQixDQUFDLHVCQUF1QixFQUFFO2dCQUN0RCxXQUFXLEVBQUU7b0JBQ1gsU0FBUyxFQUFFLGtCQUFLLENBQUMsVUFBVSxDQUFDO3dCQUMxQixlQUFlLEVBQUUsTUFBTTt3QkFDdkIsZ0JBQWdCLEVBQUUsZUFBZTt3QkFDakMsbUJBQW1CLEVBQUUsSUFBSTtxQkFDMUIsQ0FBQztpQkFDSDthQUNGLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLDRDQUE0QyxFQUFFLEdBQUcsRUFBRTtZQUN0RCxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQ25DLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixlQUFlLEVBQUU7b0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtvQkFDdEMsWUFBWTtpQkFDYjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyx1QkFBdUIsRUFBRTtnQkFDdEQsV0FBVyxFQUFFO29CQUNYLFNBQVMsRUFBRSxrQkFBSyxDQUFDLFVBQVUsQ0FBQzt3QkFDMUIsY0FBYyxFQUFFLGtCQUFLLENBQUMsUUFBUSxFQUFFO3FCQUNqQyxDQUFDO2lCQUNIO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsMkJBQTJCLEVBQUUsR0FBRyxFQUFFO1lBQ3JDLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDbkMsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLGVBQWUsRUFBRTtvQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO29CQUN0QyxZQUFZO2lCQUNiO2dCQUNELE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7YUFDOUIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsUUFBUSxDQUFDLHFCQUFxQixDQUFDLHVCQUF1QixFQUFFO2dCQUN0RCxPQUFPLEVBQUUsR0FBRzthQUNiLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLDhCQUE4QixFQUFFLEdBQUcsRUFBRTtZQUN4QyxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQ25DLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixlQUFlLEVBQUU7b0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtvQkFDdEMsWUFBWTtpQkFDYjtnQkFDRCxVQUFVLEVBQUUsSUFBSTthQUNqQixDQUFDLENBQUM7WUFFSCxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxRQUFRLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLEVBQUU7Z0JBQ3RELFVBQVUsRUFBRSxJQUFJO2FBQ2pCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO1FBQ3RDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxHQUFHLEVBQUU7WUFDckMsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUNuQyxTQUFTLEVBQUUsV0FBVztnQkFDdEIsZUFBZSxFQUFFO29CQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLFlBQVk7aUJBQ2I7YUFDRixDQUFDLENBQUM7WUFFSCxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxRQUFRLENBQUMsZUFBZSxDQUFDLDBCQUEwQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEdBQUcsRUFBRTtZQUNsQyxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQ25DLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixlQUFlLEVBQUU7b0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtvQkFDdEMsWUFBWTtpQkFDYjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQywyQkFBMkIsRUFBRTtnQkFDMUQsUUFBUSxFQUFFLE1BQU07YUFDakIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsOEJBQThCLEVBQUUsR0FBRyxFQUFFO1lBQ3hDLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDbkMsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLGVBQWUsRUFBRTtvQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO29CQUN0QyxZQUFZO2lCQUNiO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsUUFBUSxDQUFDLHFCQUFxQixDQUFDLHlCQUF5QixFQUFFO2dCQUN4RCxVQUFVLEVBQUUsTUFBTTthQUNuQixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQywrQ0FBK0MsRUFBRSxHQUFHLEVBQUU7WUFDekQsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUNuQyxTQUFTLEVBQUUsV0FBVztnQkFDdEIsZUFBZSxFQUFFO29CQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLFlBQVk7aUJBQ2I7YUFDRixDQUFDLENBQUM7WUFFSCxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxtQ0FBbUM7WUFDbkMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLDZCQUE2QixFQUFFO2dCQUM1RCxJQUFJLEVBQUUsb0JBQW9CO2FBQzNCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLG9EQUFvRCxFQUFFLEdBQUcsRUFBRTtZQUM5RCxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQ25DLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixlQUFlLEVBQUU7b0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtvQkFDdEMsWUFBWTtpQkFDYjtnQkFDRCxhQUFhLEVBQUUsSUFBSSxtQ0FBZSxFQUFFO2FBQ3JDLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLHlDQUF5QztZQUN6QyxRQUFRLENBQUMscUJBQXFCLENBQUMseUJBQXlCLEVBQUU7Z0JBQ3hELFVBQVUsRUFBRSxNQUFNO2dCQUNsQixpQkFBaUIsRUFBRSxNQUFNO2FBQzFCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLEdBQUcsRUFBRTtZQUMzQyxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQ25DLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixlQUFlLEVBQUU7b0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtvQkFDdEMsWUFBWTtpQkFDYjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLG9DQUFvQztZQUNwQyxRQUFRLENBQUMscUJBQXFCLENBQUMseUJBQXlCLEVBQUU7Z0JBQ3hELFVBQVUsRUFBRSxTQUFTO2FBQ3RCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO1FBQ2xDLElBQUksQ0FBQywwREFBMEQsRUFBRSxHQUFHLEVBQUU7WUFDcEUsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUNuQyxTQUFTLEVBQUUsV0FBVztnQkFDdEIsZUFBZSxFQUFFO29CQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLFlBQVk7aUJBQ2I7YUFDRixDQUFDLENBQUM7WUFFSCxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxRQUFRLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ2hELGdCQUFnQixFQUFFO29CQUNoQixpQ0FBaUMsRUFBRSxrQkFBSyxDQUFDLFNBQVMsQ0FBQzt3QkFDakQsa0JBQUssQ0FBQyxVQUFVLENBQUM7NEJBQ2YsNkJBQTZCLEVBQUU7Z0NBQzdCLFlBQVksRUFBRSxTQUFTOzZCQUN4Qjt5QkFDRixDQUFDO3FCQUNILENBQUM7aUJBQ0g7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxtQ0FBbUMsRUFBRSxHQUFHLEVBQUU7WUFDN0MsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUNuQyxTQUFTLEVBQUUsV0FBVztnQkFDdEIsZUFBZSxFQUFFO29CQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLFlBQVk7aUJBQ2I7YUFDRixDQUFDLENBQUM7WUFFSCxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxRQUFRLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ2hELHNCQUFzQixFQUFFO29CQUN0QixLQUFLLEVBQUUsa0JBQUssQ0FBQyxTQUFTLENBQUM7d0JBQ3JCLGtCQUFLLENBQUMsVUFBVSxDQUFDOzRCQUNmLE1BQU0sRUFBRSxTQUFTO3lCQUNsQixDQUFDO3FCQUNILENBQUM7aUJBQ0g7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyw2Q0FBNkMsRUFBRSxHQUFHLEVBQUU7WUFDdkQsTUFBTSxZQUFZLEdBQUcsSUFBSSxlQUFNLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBRXZELE1BQU0sS0FBSyxHQUFHLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDakQsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLGVBQWUsRUFBRTtvQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO29CQUN0QyxZQUFZO2lCQUNiO2dCQUNELGFBQWEsRUFBRSxZQUFZO2FBQzVCLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLG9GQUFvRixFQUFFLEdBQUcsRUFBRTtZQUM5RixpRkFBaUY7WUFDakYsK0VBQStFO1lBQy9FLE1BQU0sS0FBSyxHQUFHLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDakQsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLGVBQWUsRUFBRTtvQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO29CQUN0QyxZQUFZO2lCQUNiO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsa0NBQWtDO1lBQ2xDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7UUFDdEMsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtZQUNoRCxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQ25DLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixlQUFlLEVBQUU7b0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtvQkFDdEMsWUFBWTtpQkFDYjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLFFBQVEsQ0FBQyxlQUFlLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsNkNBQTZDLEVBQUUsR0FBRyxFQUFFO1lBQ3ZELElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDbkMsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLGVBQWUsRUFBRTtvQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO29CQUN0QyxZQUFZO2lCQUNiO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsUUFBUSxDQUFDLGVBQWUsQ0FBQyw4QkFBOEIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQywyQ0FBMkMsRUFBRSxHQUFHLEVBQUU7WUFDckQsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUNuQyxTQUFTLEVBQUUsV0FBVztnQkFDdEIsZUFBZSxFQUFFO29CQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLFlBQVk7aUJBQ2I7Z0JBQ0QsYUFBYSxFQUFFLElBQUksbUNBQWUsRUFBRTthQUNyQyxDQUFDLENBQUM7WUFFSCxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxRQUFRLENBQUMsZUFBZSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RELFFBQVEsQ0FBQyxlQUFlLENBQUMsOEJBQThCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUU7UUFDaEMsSUFBSSxDQUFDLGtDQUFrQyxFQUFFLEdBQUcsRUFBRTtZQUM1QyxNQUFNLENBQUMsR0FBRyxFQUFFO2dCQUNWLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtvQkFDbkMsU0FBUyxFQUFFLEVBQUU7b0JBQ2IsZUFBZSxFQUFFO3dCQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7d0JBQ3RDLFlBQVk7cUJBQ2I7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsNENBQTRDLEVBQUUsR0FBRyxFQUFFO1lBQ3RELE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO29CQUNuQyxTQUFTLEVBQUUsS0FBSztvQkFDaEIsZUFBZSxFQUFFO3dCQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7d0JBQ3RDLFlBQVk7cUJBQ2I7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMscUNBQXFDLEVBQUUsR0FBRyxFQUFFO1lBQy9DLE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO29CQUNuQyxTQUFTLEVBQUUsV0FBVztvQkFDdEIsZUFBZSxFQUFFO3dCQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7d0JBQ3RDLFlBQVk7cUJBQ2I7b0JBQ0QsVUFBVSxFQUFFLEVBQUU7aUJBQ2YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsc0NBQXNDLEVBQUUsR0FBRyxFQUFFO1lBQ2hELE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO29CQUNuQyxTQUFTLEVBQUUsV0FBVztvQkFDdEIsZUFBZSxFQUFFO3dCQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7d0JBQ3RDLFlBQVk7cUJBQ2I7b0JBQ0QsVUFBVSxFQUFFLEtBQUs7aUJBQ2xCLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsRUFBRTtZQUM5QyxNQUFNLENBQUMsR0FBRyxFQUFFO2dCQUNWLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtvQkFDbkMsU0FBUyxFQUFFLFdBQVc7b0JBQ3RCLGVBQWUsRUFBRTt3QkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO3dCQUN0QyxZQUFZO3FCQUNiO29CQUNELE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7aUJBQzdCLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLG1DQUFtQyxFQUFFLEdBQUcsRUFBRTtZQUM3QyxNQUFNLENBQUMsR0FBRyxFQUFFO2dCQUNWLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtvQkFDbkMsU0FBUyxFQUFFLFdBQVc7b0JBQ3RCLGVBQWUsRUFBRTt3QkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO3dCQUN0QyxZQUFZO3FCQUNiO29CQUNELE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7aUJBQzlCLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLDhDQUE4QyxFQUFFLEdBQUcsRUFBRTtZQUN4RCxNQUFNLENBQUMsR0FBRyxFQUFFO2dCQUNWLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtvQkFDbkMsU0FBUyxFQUFFLFdBQVc7b0JBQ3RCLGVBQWUsRUFBRTt3QkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO3dCQUN0QyxZQUFZO3FCQUNiO29CQUNELG1CQUFtQixFQUFFLENBQUM7aUJBQ3ZCLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLCtDQUErQyxFQUFFLEdBQUcsRUFBRTtZQUN6RCxNQUFNLENBQUMsR0FBRyxFQUFFO2dCQUNWLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtvQkFDbkMsU0FBUyxFQUFFLFdBQVc7b0JBQ3RCLGVBQWUsRUFBRTt3QkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO3dCQUN0QyxZQUFZO3FCQUNiO29CQUNELG1CQUFtQixFQUFFLElBQUk7aUJBQzFCLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtZQUN6QyxNQUFNLENBQUMsR0FBRyxFQUFFO2dCQUNWLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtvQkFDcEMsU0FBUyxFQUFFLFlBQVk7b0JBQ3ZCLGVBQWUsRUFBRTt3QkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO3dCQUN0QyxZQUFZO3FCQUNiO29CQUNELFVBQVUsRUFBRSxHQUFHO29CQUNmLE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQzVCLG1CQUFtQixFQUFFLENBQUM7aUJBQ3ZCLENBQUMsQ0FBQztnQkFFSCxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUU7b0JBQ3BDLFNBQVMsRUFBRSxZQUFZO29CQUN2QixlQUFlLEVBQUU7d0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTt3QkFDdEMsWUFBWTtxQkFDYjtvQkFDRCxVQUFVLEVBQUUsS0FBSztvQkFDakIsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDN0IsbUJBQW1CLEVBQUUsSUFBSTtpQkFDMUIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRTtRQUN6QixJQUFJLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFO1lBQ3RDLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDbkMsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLGVBQWUsRUFBRTtvQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO29CQUN0QyxZQUFZO2lCQUNiO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDVixHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZCxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsdUNBQXVDLEVBQUUsR0FBRyxFQUFFO1lBQ2pELElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDbkMsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLGVBQWUsRUFBRTtvQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO29CQUN0QyxZQUFZO2lCQUNiO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNyRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FDMUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEtBQUssSUFBSSxDQUN4RCxDQUFDO1lBQ0YsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxnREFBZ0QsRUFBRSxHQUFHLEVBQUU7WUFDMUQsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUNuQyxTQUFTLEVBQUUsV0FBVztnQkFDdEIsZUFBZSxFQUFFO29CQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLFlBQVk7aUJBQ2I7YUFDRixDQUFDLENBQUM7WUFFSCxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDdkQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUN4RCxJQUFJLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ3JELENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sS0FBSyxzQkFBc0IsQ0FDbEUsQ0FDRixDQUFDO1lBQ0YsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUdILFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUU7SUFDcEMsSUFBSSxHQUFRLENBQUM7SUFDYixJQUFJLEtBQVksQ0FBQztJQUNqQixJQUFJLFVBQW9CLENBQUM7SUFFekIsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLEdBQUcsR0FBRyxJQUFBLDBCQUFhLEdBQUUsQ0FBQztRQUN0QixLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUU7WUFDbEMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFO1NBQ3RELENBQUMsQ0FBQztRQUNILFVBQVUsR0FBRyxJQUFJLHFCQUFRLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRTtZQUM3QyxPQUFPLEVBQUUsb0JBQU8sQ0FBQyxXQUFXO1lBQzVCLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLElBQUksRUFBRSxpQkFBSSxDQUFDLFVBQVUsQ0FBQyxzREFBc0QsQ0FBQztTQUM5RSxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7UUFDdEQsTUFBTSxPQUFPLEdBQUcsSUFBSSx3Q0FBb0IsRUFBRSxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6RCxNQUFNLENBQUMsT0FBTyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3RELENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLDRCQUE0QixFQUFFLEdBQUcsRUFBRTtRQUN0QyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSx3Q0FBb0IsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3pELENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtRQUN6QyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSx3Q0FBb0IsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzdFLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLEdBQUcsRUFBRTtRQUMxQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSx3Q0FBb0IsQ0FBQztZQUNwQyxRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUU7U0FDOUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLG1EQUFtRCxFQUFFLEdBQUcsRUFBRTtRQUM3RCxNQUFNLE9BQU8sR0FBRyxJQUFJLHdDQUFvQixFQUFFLENBQUM7UUFDM0MsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FDeEQsdUZBQXVGLENBQ3hGLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLEVBQUU7UUFDakQsTUFBTSxPQUFPLEdBQUcsSUFBSSx3Q0FBb0IsRUFBRSxDQUFDO1FBQzNDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQixNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFO1FBQ3RDLE1BQU0sT0FBTyxHQUFHLElBQUksd0NBQW9CLEVBQUUsQ0FBQztRQUMzQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM5RCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBR0gsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtJQUNoQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO1FBQ3BDLE1BQU0sR0FBRyxHQUFHLElBQUEsMEJBQWEsR0FBRSxDQUFDO1FBQzVCLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQUssQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDMUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEQsTUFBTSxDQUFDLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2RCxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlDLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsRUFBRTtRQUM5QyxNQUFNLEdBQUcsR0FBRyxJQUFBLDBCQUFhLEdBQUUsQ0FBQztRQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzFDLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsRUFBRTtZQUNoRCxnQkFBZ0IsRUFBRTtnQkFDaEIsaUNBQWlDLEVBQUUsa0JBQUssQ0FBQyxTQUFTLENBQUM7b0JBQ2pELGtCQUFLLENBQUMsVUFBVSxDQUFDO3dCQUNmLDZCQUE2QixFQUFFOzRCQUM3QixZQUFZLEVBQUUsU0FBUzt5QkFDeEI7cUJBQ0YsQ0FBQztpQkFDSCxDQUFDO2FBQ0g7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7UUFDNUMsTUFBTSxHQUFHLEdBQUcsSUFBQSwwQkFBYSxHQUFFLENBQUM7UUFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQU0sQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDakQsTUFBTSxPQUFPLEdBQUcsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUM5RCxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyx5QkFBeUIsRUFBRSxHQUFHLEVBQUU7UUFDbkMsTUFBTSxHQUFHLEdBQUcsSUFBQSwwQkFBYSxHQUFFLENBQUM7UUFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRCxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoRCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUU7UUFDakMsTUFBTSxHQUFHLEdBQUcsSUFBQSwwQkFBYSxHQUFFLENBQUM7UUFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUU7WUFDaEQsVUFBVSxFQUFFLHNCQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztTQUMvQixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBR0gsUUFBUSxDQUFDLGtDQUFrQyxFQUFFLEdBQUcsRUFBRTtJQUNoRCxJQUFJLENBQUMsMkJBQTJCLEVBQUUsR0FBRyxFQUFFO1FBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksb0RBQWdDLEVBQUUsQ0FBQztRQUN2RCxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQywrQkFBK0IsRUFBRSxHQUFHLEVBQUU7UUFDekMsTUFBTSxPQUFPLEdBQUcsSUFBSSxvREFBZ0MsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLEdBQUcsRUFBRTtRQUMxQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxvREFBZ0MsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUMzRSx1Q0FBdUMsQ0FDeEMsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLG1DQUFtQyxFQUFFLEdBQUcsRUFBRTtRQUM3QyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxvREFBZ0MsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUM5RSx1Q0FBdUMsQ0FDeEMsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtRQUNqRCxNQUFNLE9BQU8sR0FBRyxJQUFJLG9EQUFnQyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDekUsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDM0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNsQixlQUFlLEVBQUUsTUFBTTtZQUN2QixnQkFBZ0IsRUFBRSxlQUFlO1lBQ2pDLG1CQUFtQixFQUFFLElBQUk7U0FDMUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUdILFFBQVEsQ0FBQyx5QkFBeUIsRUFBRSxHQUFHLEVBQUU7SUFDdkMsSUFBSSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtRQUNqRCxNQUFNLE9BQU8sR0FBRyxJQUFJLDJDQUF1QixFQUFFLENBQUM7UUFDOUMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDM0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNsQixlQUFlLEVBQUUsT0FBTztZQUN4QixnQkFBZ0IsRUFBRSxNQUFNO1NBQ3pCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFHSCxRQUFRLENBQUMsc0JBQXNCLEVBQUUsR0FBRyxFQUFFO0lBQ3BDLElBQUksR0FBUSxDQUFDO0lBQ2IsSUFBSSxLQUFZLENBQUM7SUFFakIsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLEdBQUcsR0FBRyxJQUFBLDBCQUFhLEdBQUUsQ0FBQztRQUN0QixLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUU7WUFDbEMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFO1NBQ3RELENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLDRCQUE0QixFQUFFLEdBQUcsRUFBRTtRQUN0QyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSx3Q0FBb0IsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3pELENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtRQUNqRCxNQUFNLElBQUksR0FBRyxJQUFJLHdDQUFvQixFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsb0RBQW9ELEVBQUUsR0FBRyxFQUFFO1FBQzlELE1BQU0sSUFBSSxHQUFHLElBQUksd0NBQW9CLEVBQUUsQ0FBQztRQUN4QyxNQUFNLFVBQVUsR0FBRyxJQUFJLHFCQUFRLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRTtZQUNuRCxPQUFPLEVBQUUsb0JBQU8sQ0FBQyxXQUFXO1lBQzVCLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLElBQUksRUFBRSxpQkFBSSxDQUFDLFVBQVUsQ0FBQyxxQ0FBcUMsQ0FBQztTQUM3RCxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0QsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsdUNBQXVDLEVBQUUsR0FBRyxFQUFFO1FBQ2pELE1BQU0sSUFBSSxHQUFHLElBQUksd0NBQW9CLEVBQUUsQ0FBQztRQUN4QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUN4QyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBR0gsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRTtJQUMvQixJQUFJLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLElBQUksbUNBQWUsRUFBRSxDQUFDO1FBQ25DLE1BQU0sR0FBRyxHQUFHLElBQUEsMEJBQWEsR0FBRSxDQUFDO1FBQzVCLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQUssQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDMUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxxQkFBUSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUU7WUFDbkQsT0FBTyxFQUFFLG9CQUFPLENBQUMsV0FBVztZQUM1QixPQUFPLEVBQUUsZUFBZTtZQUN4QixJQUFJLEVBQUUsaUJBQUksQ0FBQyxVQUFVLENBQUMscUNBQXFDLENBQUM7U0FDN0QsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqRSxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLEVBQUU7UUFDakQsTUFBTSxJQUFJLEdBQUcsSUFBSSxtQ0FBZSxFQUFFLENBQUM7UUFDbkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDeEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQXBwLCBTdGFjaywgRHVyYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBUZW1wbGF0ZSwgTWF0Y2ggfSBmcm9tICdhd3MtY2RrLWxpYi9hc3NlcnRpb25zJztcbmltcG9ydCB7IEZvdW5kYXRpb25Nb2RlbElkZW50aWZpZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9jayc7XG5pbXBvcnQgeyBDb2RlLCBGdW5jdGlvbiwgUnVudGltZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IEFzc2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG5pbXBvcnQgeyBjcmVhdGVUZXN0QXBwIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3Rlc3QtdXRpbHMnO1xuaW1wb3J0IHtcbiAgSW50ZXJhY3RpdmVBZ2VudCxcbiAgU3RyZWFtaW5nSHR0cEFkYXB0ZXIsXG4gIFMzU2Vzc2lvbk1hbmFnZXIsXG4gIFNsaWRpbmdXaW5kb3dDb252ZXJzYXRpb25NYW5hZ2VyLFxuICBOdWxsQ29udmVyc2F0aW9uTWFuYWdlcixcbiAgQ29nbml0b0F1dGhlbnRpY2F0b3IsXG4gIE5vQXV0aGVudGljYXRvcixcbn0gZnJvbSAnLi4vYWdlbnRzL2ludGVyYWN0aXZlLWFnZW50JztcblxuZGVzY3JpYmUoJ0ludGVyYWN0aXZlQWdlbnQnLCAoKSA9PiB7XG4gIGxldCBhcHA6IEFwcDtcbiAgbGV0IHN0YWNrOiBTdGFjaztcbiAgbGV0IHN5c3RlbVByb21wdDogQXNzZXQ7XG4gIGNvbnN0IHRlc3RNb2RlbCA9IEZvdW5kYXRpb25Nb2RlbElkZW50aWZpZXIuQU5USFJPUElDX0NMQVVERV8zX1NPTk5FVF8yMDI0MDIyOV9WMV8wO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGFwcCA9IGNyZWF0ZVRlc3RBcHAoKTtcbiAgICBzdGFjayA9IG5ldyBTdGFjayhhcHAsICdUZXN0U3RhY2snLCB7XG4gICAgICBlbnY6IHsgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSxcbiAgICB9KTtcbiAgICBzeXN0ZW1Qcm9tcHQgPSBuZXcgQXNzZXQoc3RhY2ssICdTeXN0ZW1Qcm9tcHQnLCB7XG4gICAgICBwYXRoOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vYWdlbnRzL3Jlc291cmNlcy9kZWZhdWx0LXN0cmFuZHMtYWdlbnQvYmF0Y2gucHknKSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0RlZmF1bHQgQ29uZmlndXJhdGlvbicsICgpID0+IHtcbiAgICB0ZXN0KCdjcmVhdGVzIHdpdGggbWluaW1hbCBwcm9wcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGFnZW50ID0gbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhZ2VudCkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChhZ2VudC5hZ2VudEZ1bmN0aW9uKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGFnZW50LmFwaUVuZHBvaW50KS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZGVmYXVsdCBhZGFwdGVyIGlzIFN0cmVhbWluZ0h0dHBBZGFwdGVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgYWdlbnQgPSBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFnZW50LmFkYXB0ZXIpLnRvQmVJbnN0YW5jZU9mKFN0cmVhbWluZ0h0dHBBZGFwdGVyKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2RlZmF1bHQgc2Vzc2lvbiBzdG9yZSBpcyBTM1Nlc3Npb25NYW5hZ2VyJywgKCkgPT4ge1xuICAgICAgY29uc3QgYWdlbnQgPSBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFnZW50LnNlc3Npb25TdG9yZSkudG9CZUluc3RhbmNlT2YoUzNTZXNzaW9uTWFuYWdlcik7XG4gICAgICBleHBlY3QoYWdlbnQuc2Vzc2lvbkJ1Y2tldCkudG9CZURlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2RlZmF1bHQgY29udGV4dCBzdHJhdGVneSBpcyBTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGFnZW50ID0gbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhZ2VudC5jb250ZXh0U3RyYXRlZ3kpLnRvQmVJbnN0YW5jZU9mKFNsaWRpbmdXaW5kb3dDb252ZXJzYXRpb25NYW5hZ2VyKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2RlZmF1bHQgYXV0aGVudGljYXRvciBpcyBDb2duaXRvQXV0aGVudGljYXRvcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGFnZW50ID0gbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhZ2VudC5hdXRoZW50aWNhdG9yKS50b0JlSW5zdGFuY2VPZihDb2duaXRvQXV0aGVudGljYXRvcik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdMYW1iZGEgRnVuY3Rpb24gQ29uZmlndXJhdGlvbicsICgpID0+IHtcbiAgICB0ZXN0KCdjcmVhdGVzIExhbWJkYSBmdW5jdGlvbiB3aXRoIGRlZmF1bHQgMTUtbWludXRlIHRpbWVvdXQnLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLCB7XG4gICAgICAgIFRpbWVvdXQ6IDkwMCwgLy8gMTUgbWludXRlc1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjcmVhdGVzIExhbWJkYSBmdW5jdGlvbiB3aXRoIGRlZmF1bHQgMTAyNCBNQiBtZW1vcnknLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLCB7XG4gICAgICAgIE1lbW9yeVNpemU6IDEwMjQsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ0xhbWJkYSBmdW5jdGlvbiBoYXMgTGFtYmRhIFdlYiBBZGFwdGVyIGxheWVyJywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywge1xuICAgICAgICBMYXllcnM6IE1hdGNoLmFycmF5V2l0aChbXG4gICAgICAgICAgJ2Fybjphd3M6bGFtYmRhOnVzLWVhc3QtMTo3NTMyNDA1OTgwNzU6bGF5ZXI6TGFtYmRhQWRhcHRlckxheWVyWDg2OjI1JyxcbiAgICAgICAgXSksXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ0xhbWJkYSBmdW5jdGlvbiBoYXMgQVdTX0xBTUJEQV9FWEVDX1dSQVBQRVIgZW52IHZhciBmb3IgTFdBJywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywge1xuICAgICAgICBFbnZpcm9ubWVudDoge1xuICAgICAgICAgIFZhcmlhYmxlczogTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAgICAgICAgICBBV1NfTEFNQkRBX0VYRUNfV1JBUFBFUjogJy9vcHQvYm9vdHN0cmFwJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnTGFtYmRhIGZ1bmN0aW9uIGhhcyBBV1NfTFdBX0lOVk9LRV9NT0RFIGVudiB2YXInLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLCB7XG4gICAgICAgIEVudmlyb25tZW50OiB7XG4gICAgICAgICAgVmFyaWFibGVzOiBNYXRjaC5vYmplY3RMaWtlKHtcbiAgICAgICAgICAgIEFXU19MV0FfSU5WT0tFX01PREU6ICdyZXNwb25zZV9zdHJlYW0nLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdMYW1iZGEgZnVuY3Rpb24gaGFzIFBPUlQgZW52IHZhciBzZXQgdG8gODA4MCcsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsIHtcbiAgICAgICAgRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBWYXJpYWJsZXM6IE1hdGNoLm9iamVjdExpa2Uoe1xuICAgICAgICAgICAgUE9SVDogJzgwODAnLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdMYW1iZGEgZnVuY3Rpb24gaGFzIE1PREVMX0lEIGVudiB2YXInLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLCB7XG4gICAgICAgIEVudmlyb25tZW50OiB7XG4gICAgICAgICAgVmFyaWFibGVzOiBNYXRjaC5vYmplY3RMaWtlKHtcbiAgICAgICAgICAgIE1PREVMX0lEOiBNYXRjaC5hbnlWYWx1ZSgpLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdMYW1iZGEgZnVuY3Rpb24gaGFzIGNvbnRleHQgc3RyYXRlZ3kgZW52IHZhcnMnLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLCB7XG4gICAgICAgIEVudmlyb25tZW50OiB7XG4gICAgICAgICAgVmFyaWFibGVzOiBNYXRjaC5vYmplY3RMaWtlKHtcbiAgICAgICAgICAgIENPTlRFWFRfRU5BQkxFRDogJ3RydWUnLFxuICAgICAgICAgICAgQ09OVEVYVF9TVFJBVEVHWTogJ1NsaWRpbmdXaW5kb3cnLFxuICAgICAgICAgICAgQ09OVEVYVF9XSU5ET1dfU0laRTogJzIwJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnTGFtYmRhIGZ1bmN0aW9uIGhhcyBzZXNzaW9uIGJ1Y2tldCBlbnYgdmFyJywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywge1xuICAgICAgICBFbnZpcm9ubWVudDoge1xuICAgICAgICAgIFZhcmlhYmxlczogTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAgICAgICAgICBTRVNTSU9OX0JVQ0tFVDogTWF0Y2guYW55VmFsdWUoKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY3VzdG9tIHRpbWVvdXQgaXMgYXBwbGllZCcsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxMCksXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLCB7XG4gICAgICAgIFRpbWVvdXQ6IDYwMCxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY3VzdG9tIG1lbW9yeVNpemUgaXMgYXBwbGllZCcsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgICAgbWVtb3J5U2l6ZTogMjA0OCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsIHtcbiAgICAgICAgTWVtb3J5U2l6ZTogMjA0OCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUkVTVCBBUEkgQ29uZmlndXJhdGlvbicsICgpID0+IHtcbiAgICB0ZXN0KCdjcmVhdGVzIFJFU1QgQVBJIHJlc291cmNlJywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcygnQVdTOjpBcGlHYXRld2F5OjpSZXN0QXBpJywgMSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjcmVhdGVzIC9jaGF0IHJlc291cmNlJywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpBcGlHYXRld2F5OjpSZXNvdXJjZScsIHtcbiAgICAgICAgUGF0aFBhcnQ6ICdjaGF0JyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY3JlYXRlcyBQT1NUIG1ldGhvZCBvbiAvY2hhdCcsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6QXBpR2F0ZXdheTo6TWV0aG9kJywge1xuICAgICAgICBIdHRwTWV0aG9kOiAnUE9TVCcsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ1BPU1QgbWV0aG9kIGhhcyBDb2duaXRvIGF1dGhvcml6ZXIgYnkgZGVmYXVsdCcsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICAvLyBWZXJpZnkgQ29nbml0byBhdXRob3JpemVyIGV4aXN0c1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkFwaUdhdGV3YXk6OkF1dGhvcml6ZXInLCB7XG4gICAgICAgIFR5cGU6ICdDT0dOSVRPX1VTRVJfUE9PTFMnLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdQT1NUIG1ldGhvZCBoYXMgbm8gYXV0aG9yaXplciB3aXRoIE5vQXV0aGVudGljYXRvcicsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgICAgYXV0aGVudGljYXRvcjogbmV3IE5vQXV0aGVudGljYXRvcigpLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIC8vIFNob3VsZCBoYXZlIFBPU1QgbWV0aG9kIHdpdGggTk9ORSBhdXRoXG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6QXBpR2F0ZXdheTo6TWV0aG9kJywge1xuICAgICAgICBIdHRwTWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIEF1dGhvcml6YXRpb25UeXBlOiAnTk9ORScsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ1JFU1QgQVBJIGhhcyBDT1JTIGNvbmZpZ3VyYXRpb24nLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgLy8gT1BUSU9OUyBtZXRob2QgZm9yIENPUlMgcHJlZmxpZ2h0XG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6QXBpR2F0ZXdheTo6TWV0aG9kJywge1xuICAgICAgICBIdHRwTWV0aG9kOiAnT1BUSU9OUycsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1Nlc3Npb24gTWFuYWdlbWVudCcsICgpID0+IHtcbiAgICB0ZXN0KCdjcmVhdGVzIFMzIHNlc3Npb24gYnVja2V0IHdpdGggS01TIGVuY3J5cHRpb24gYnkgZGVmYXVsdCcsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6UzM6OkJ1Y2tldCcsIHtcbiAgICAgICAgQnVja2V0RW5jcnlwdGlvbjoge1xuICAgICAgICAgIFNlcnZlclNpZGVFbmNyeXB0aW9uQ29uZmlndXJhdGlvbjogTWF0Y2guYXJyYXlXaXRoKFtcbiAgICAgICAgICAgIE1hdGNoLm9iamVjdExpa2Uoe1xuICAgICAgICAgICAgICBTZXJ2ZXJTaWRlRW5jcnlwdGlvbkJ5RGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIFNTRUFsZ29yaXRobTogJ2F3czprbXMnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3Nlc3Npb24gYnVja2V0IGhhcyBsaWZlY3ljbGUgcnVsZScsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6UzM6OkJ1Y2tldCcsIHtcbiAgICAgICAgTGlmZWN5Y2xlQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIFJ1bGVzOiBNYXRjaC5hcnJheVdpdGgoW1xuICAgICAgICAgICAgTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAgICAgICAgICAgIFN0YXR1czogJ0VuYWJsZWQnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2N1c3RvbSBzZXNzaW9uIGJ1Y2tldCBpcyB1c2VkIHdoZW4gcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21CdWNrZXQgPSBuZXcgQnVja2V0KHN0YWNrLCAnQ3VzdG9tQnVja2V0Jyk7XG5cbiAgICAgIGNvbnN0IGFnZW50ID0gbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uQnVja2V0OiBjdXN0b21CdWNrZXQsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFnZW50LnNlc3Npb25CdWNrZXQpLnRvQmUoY3VzdG9tQnVja2V0KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3N0YXRlbGVzcyBtb2RlIGNyZWF0ZXMgbm8gc2Vzc2lvbiBidWNrZXQgd2hlbiBzZXNzaW9uU3RvcmUgaXMgZXhwbGljaXRseSB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICAvLyBXaGVuIHNlc3Npb25TdG9yZSBpcyBub3QgcHJvdmlkZWQgYXQgYWxsLCBkZWZhdWx0IFMzU2Vzc2lvbk1hbmFnZXIgaXMgY3JlYXRlZC5cbiAgICAgIC8vIFRvIGdvIHRydWx5IHN0YXRlbGVzcywgdXNlciBtdXN0IHBhc3MgYSBjdXN0b20gSVNlc3Npb25TdG9yZSB3aXRoIG5vIGJ1Y2tldC5cbiAgICAgIGNvbnN0IGFnZW50ID0gbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIERlZmF1bHQgY3JlYXRlcyBhIHNlc3Npb24gc3RvcmVcbiAgICAgIGV4cGVjdChhZ2VudC5zZXNzaW9uU3RvcmUpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdDb2duaXRvIEF1dGhlbnRpY2F0aW9uJywgKCkgPT4ge1xuICAgIHRlc3QoJ2NyZWF0ZXMgQ29nbml0byBVc2VyIFBvb2wgYnkgZGVmYXVsdCcsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6Q29nbml0bzo6VXNlclBvb2wnLCAxKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NyZWF0ZXMgQ29nbml0byBVc2VyIFBvb2wgQ2xpZW50IGJ5IGRlZmF1bHQnLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50JywgMSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdubyBDb2duaXRvIHJlc291cmNlcyB3aXRoIE5vQXV0aGVudGljYXRvcicsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgICAgYXV0aGVudGljYXRvcjogbmV3IE5vQXV0aGVudGljYXRvcigpLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcygnQVdTOjpDb2duaXRvOjpVc2VyUG9vbCcsIDApO1xuICAgICAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50JywgMCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdQcm9wcyBWYWxpZGF0aW9uJywgKCkgPT4ge1xuICAgIHRlc3QoJ3Rocm93cyBlcnJvciBmb3IgZW1wdHkgYWdlbnROYW1lJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgICBhZ2VudE5hbWU6ICcnLFxuICAgICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KS50b1Rocm93KCdhZ2VudE5hbWUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd0aHJvd3MgZXJyb3IgZm9yIHdoaXRlc3BhY2Utb25seSBhZ2VudE5hbWUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICAgIGFnZW50TmFtZTogJyAgICcsXG4gICAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pLnRvVGhyb3coJ2FnZW50TmFtZSBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3Rocm93cyBlcnJvciBmb3IgbWVtb3J5U2l6ZSB0b28gbG93JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZW1vcnlTaXplOiA2NCxcbiAgICAgICAgfSk7XG4gICAgICB9KS50b1Rocm93KCdtZW1vcnlTaXplIG11c3QgYmUgYmV0d2VlbiAxMjggYW5kIDEwMjQwIE1CJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd0aHJvd3MgZXJyb3IgZm9yIG1lbW9yeVNpemUgdG9vIGhpZ2gnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lbW9yeVNpemU6IDIwNDgwLFxuICAgICAgICB9KTtcbiAgICAgIH0pLnRvVGhyb3coJ21lbW9yeVNpemUgbXVzdCBiZSBiZXR3ZWVuIDEyOCBhbmQgMTAyNDAgTUInKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3Rocm93cyBlcnJvciBmb3IgdGltZW91dCB0b28gc2hvcnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMCksXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdygndGltZW91dCBtdXN0IGJlIGJldHdlZW4gMSBzZWNvbmQgYW5kIDE1IG1pbnV0ZXMnKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3Rocm93cyBlcnJvciBmb3IgdGltZW91dCB0b28gbG9uZycsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygyMCksXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdygndGltZW91dCBtdXN0IGJlIGJldHdlZW4gMSBzZWNvbmQgYW5kIDE1IG1pbnV0ZXMnKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3Rocm93cyBlcnJvciBmb3IgbWVzc2FnZUhpc3RvcnlMaW1pdCB0b28gbG93JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZXNzYWdlSGlzdG9yeUxpbWl0OiAwLFxuICAgICAgICB9KTtcbiAgICAgIH0pLnRvVGhyb3coJ21lc3NhZ2VIaXN0b3J5TGltaXQgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEwMDAnKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3Rocm93cyBlcnJvciBmb3IgbWVzc2FnZUhpc3RvcnlMaW1pdCB0b28gaGlnaCcsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZUhpc3RvcnlMaW1pdDogMjAwMCxcbiAgICAgICAgfSk7XG4gICAgICB9KS50b1Rocm93KCdtZXNzYWdlSGlzdG9yeUxpbWl0IG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMDAwJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdhY2NlcHRzIHZhbGlkIGJvdW5kYXJ5IHZhbHVlcycsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQxJywge1xuICAgICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudDEnLFxuICAgICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZW1vcnlTaXplOiAxMjgsXG4gICAgICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcygxKSxcbiAgICAgICAgICBtZXNzYWdlSGlzdG9yeUxpbWl0OiAxLFxuICAgICAgICB9KTtcblxuICAgICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50MicsIHtcbiAgICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQyJyxcbiAgICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVtb3J5U2l6ZTogMTAyNDAsXG4gICAgICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgICAgICAgbWVzc2FnZUhpc3RvcnlMaW1pdDogMTAwMCxcbiAgICAgICAgfSk7XG4gICAgICB9KS5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQ0RLIFN5bnRoJywgKCkgPT4ge1xuICAgIHRlc3QoJ3N5bnRoZXNpemVzIHdpdGhvdXQgZXJyb3JzJywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIGFwcC5zeW50aCgpO1xuICAgICAgfSkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NyZWF0ZXMgS01TIGtleSB3aXRoIHJvdGF0aW9uIGVuYWJsZWQnLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgY29uc3Qga2V5cyA9IHRlbXBsYXRlLmZpbmRSZXNvdXJjZXMoJ0FXUzo6S01TOjpLZXknKTtcbiAgICAgIGNvbnN0IGhhc1JvdGF0aW9uID0gT2JqZWN0LnZhbHVlcyhrZXlzKS5zb21lKFxuICAgICAgICAoa2V5OiBhbnkpID0+IGtleS5Qcm9wZXJ0aWVzLkVuYWJsZUtleVJvdGF0aW9uID09PSB0cnVlLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChoYXNSb3RhdGlvbikudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NyZWF0ZXMgSUFNIHJvbGUgd2l0aCBMYW1iZGEgc2VydmljZSBwcmluY2lwYWwnLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgY29uc3Qgcm9sZXMgPSB0ZW1wbGF0ZS5maW5kUmVzb3VyY2VzKCdBV1M6OklBTTo6Um9sZScpO1xuICAgICAgY29uc3QgYWdlbnRSb2xlID0gT2JqZWN0LnZhbHVlcyhyb2xlcykuZmluZCgocm9sZTogYW55KSA9PlxuICAgICAgICByb2xlLlByb3BlcnRpZXMuQXNzdW1lUm9sZVBvbGljeURvY3VtZW50LlN0YXRlbWVudC5zb21lKFxuICAgICAgICAgIChzdG10OiBhbnkpID0+IHN0bXQuUHJpbmNpcGFsPy5TZXJ2aWNlID09PSAnbGFtYmRhLmFtYXpvbmF3cy5jb20nLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChhZ2VudFJvbGUpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cblxuZGVzY3JpYmUoJ1N0cmVhbWluZ0h0dHBBZGFwdGVyJywgKCkgPT4ge1xuICBsZXQgYXBwOiBBcHA7XG4gIGxldCBzdGFjazogU3RhY2s7XG4gIGxldCBtb2NrTGFtYmRhOiBGdW5jdGlvbjtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBhcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG4gICAgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJywge1xuICAgICAgZW52OiB7IGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICd1cy1lYXN0LTEnIH0sXG4gICAgfSk7XG4gICAgbW9ja0xhbWJkYSA9IG5ldyBGdW5jdGlvbihzdGFjaywgJ01vY2tMYW1iZGEnLCB7XG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogQ29kZS5mcm9tSW5saW5lKCdleHBvcnRzLmhhbmRsZXIgPSBhc3luYyAoKSA9PiAoeyBzdGF0dXNDb2RlOiAyMDAgfSk7JyksXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2ltcGxlbWVudHMgSUNvbW11bmljYXRpb25BZGFwdGVyIGludGVyZmFjZScsICgpID0+IHtcbiAgICBjb25zdCBhZGFwdGVyID0gbmV3IFN0cmVhbWluZ0h0dHBBZGFwdGVyKCk7XG4gICAgZXhwZWN0KHR5cGVvZiBhZGFwdGVyLmF0dGFjaFRvRnVuY3Rpb24pLnRvQmUoJ2Z1bmN0aW9uJyk7XG4gICAgZXhwZWN0KHR5cGVvZiBhZGFwdGVyLmdyYW50SW52b2tlKS50b0JlKCdmdW5jdGlvbicpO1xuICB9KTtcblxuICB0ZXN0KCdjcmVhdGVzIHdpdGggZGVmYXVsdCBwcm9wcycsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gbmV3IFN0cmVhbWluZ0h0dHBBZGFwdGVyKCkpLm5vdC50b1Rocm93KCk7XG4gIH0pO1xuXG4gIHRlc3QoJ2NyZWF0ZXMgd2l0aCBjdXN0b20gc3RhZ2VOYW1lJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBuZXcgU3RyZWFtaW5nSHR0cEFkYXB0ZXIoeyBzdGFnZU5hbWU6ICdkZXYnIH0pKS5ub3QudG9UaHJvdygpO1xuICB9KTtcblxuICB0ZXN0KCdjcmVhdGVzIHdpdGggdGhyb3R0bGUgc2V0dGluZ3MnLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IG5ldyBTdHJlYW1pbmdIdHRwQWRhcHRlcih7XG4gICAgICB0aHJvdHRsZTogeyByYXRlTGltaXQ6IDEwMCwgYnVyc3RMaW1pdDogMjAwIH0sXG4gICAgfSkpLm5vdC50b1Rocm93KCk7XG4gIH0pO1xuXG4gIHRlc3QoJ3Rocm93cyB3aGVuIGF0dGFjaFRvRnVuY3Rpb24gY2FsbGVkIHdpdGhvdXQgc2NvcGUnLCAoKSA9PiB7XG4gICAgY29uc3QgYWRhcHRlciA9IG5ldyBTdHJlYW1pbmdIdHRwQWRhcHRlcigpO1xuICAgIGV4cGVjdCgoKSA9PiBhZGFwdGVyLmF0dGFjaFRvRnVuY3Rpb24obW9ja0xhbWJkYSkpLnRvVGhyb3coXG4gICAgICAnU3RyZWFtaW5nSHR0cEFkYXB0ZXIgbXVzdCBiZSBpbml0aWFsaXplZCB3aXRoIGEgc2NvcGUgYmVmb3JlIGNhbGxpbmcgYXR0YWNoVG9GdW5jdGlvbicsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdCgnYXR0YWNoVG9GdW5jdGlvbiByZXR1cm5zIGVuZHBvaW50IFVSTCcsICgpID0+IHtcbiAgICBjb25zdCBhZGFwdGVyID0gbmV3IFN0cmVhbWluZ0h0dHBBZGFwdGVyKCk7XG4gICAgYWRhcHRlci5fc2V0U2NvcGUoc3RhY2spO1xuICAgIGNvbnN0IHVybCA9IGFkYXB0ZXIuYXR0YWNoVG9GdW5jdGlvbihtb2NrTGFtYmRhKTtcbiAgICBleHBlY3QodXJsKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdCh0eXBlb2YgdXJsKS50b0JlKCdzdHJpbmcnKTtcbiAgfSk7XG5cbiAgdGVzdCgnZ3JhbnRJbnZva2UgZG9lcyBub3QgdGhyb3cnLCAoKSA9PiB7XG4gICAgY29uc3QgYWRhcHRlciA9IG5ldyBTdHJlYW1pbmdIdHRwQWRhcHRlcigpO1xuICAgIGFkYXB0ZXIuX3NldFNjb3BlKHN0YWNrKTtcbiAgICBhZGFwdGVyLmF0dGFjaFRvRnVuY3Rpb24obW9ja0xhbWJkYSk7XG4gICAgZXhwZWN0KCgpID0+IGFkYXB0ZXIuZ3JhbnRJbnZva2UobW9ja0xhbWJkYSkpLm5vdC50b1Rocm93KCk7XG4gIH0pO1xufSk7XG5cblxuZGVzY3JpYmUoJ1MzU2Vzc2lvbk1hbmFnZXInLCAoKSA9PiB7XG4gIHRlc3QoJ2ltcGxlbWVudHMgSVNlc3Npb25TdG9yZScsICgpID0+IHtcbiAgICBjb25zdCBhcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJyk7XG4gICAgY29uc3QgbWFuYWdlciA9IG5ldyBTM1Nlc3Npb25NYW5hZ2VyKHN0YWNrLCAnU00nKTtcbiAgICBleHBlY3QodHlwZW9mIG1hbmFnZXIuZ3JhbnRSZWFkV3JpdGUpLnRvQmUoJ2Z1bmN0aW9uJyk7XG4gICAgZXhwZWN0KG1hbmFnZXIuc2Vzc2lvbkJ1Y2tldCkudG9CZURlZmluZWQoKTtcbiAgfSk7XG5cbiAgdGVzdCgnY3JlYXRlcyBidWNrZXQgd2l0aCBLTVMgZW5jcnlwdGlvbicsICgpID0+IHtcbiAgICBjb25zdCBhcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJyk7XG4gICAgbmV3IFMzU2Vzc2lvbk1hbmFnZXIoc3RhY2ssICdTTScpO1xuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6UzM6OkJ1Y2tldCcsIHtcbiAgICAgIEJ1Y2tldEVuY3J5cHRpb246IHtcbiAgICAgICAgU2VydmVyU2lkZUVuY3J5cHRpb25Db25maWd1cmF0aW9uOiBNYXRjaC5hcnJheVdpdGgoW1xuICAgICAgICAgIE1hdGNoLm9iamVjdExpa2Uoe1xuICAgICAgICAgICAgU2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgU1NFQWxnb3JpdGhtOiAnYXdzOmttcycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICBdKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3VzZXMgY3VzdG9tIGJ1Y2tldCB3aGVuIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgIGNvbnN0IGFwcCA9IGNyZWF0ZVRlc3RBcHAoKTtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsICdUZXN0U3RhY2snKTtcbiAgICBjb25zdCBidWNrZXQgPSBuZXcgQnVja2V0KHN0YWNrLCAnQ3VzdG9tQnVja2V0Jyk7XG4gICAgY29uc3QgbWFuYWdlciA9IG5ldyBTM1Nlc3Npb25NYW5hZ2VyKHN0YWNrLCAnU00nLCB7IGJ1Y2tldCB9KTtcbiAgICBleHBlY3QobWFuYWdlci5idWNrZXQpLnRvQmUoYnVja2V0KTtcbiAgfSk7XG5cbiAgdGVzdCgnZGVmYXVsdCBUVEwgaXMgMjQgaG91cnMnLCAoKSA9PiB7XG4gICAgY29uc3QgYXBwID0gY3JlYXRlVGVzdEFwcCgpO1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ1Rlc3RTdGFjaycpO1xuICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgUzNTZXNzaW9uTWFuYWdlcihzdGFjaywgJ1NNJyk7XG4gICAgZXhwZWN0KG1hbmFnZXIuc2Vzc2lvblRUTC50b0hvdXJzKCkpLnRvQmUoMjQpO1xuICB9KTtcblxuICB0ZXN0KCdjdXN0b20gVFRMIGlzIGFwcGxpZWQnLCAoKSA9PiB7XG4gICAgY29uc3QgYXBwID0gY3JlYXRlVGVzdEFwcCgpO1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ1Rlc3RTdGFjaycpO1xuICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgUzNTZXNzaW9uTWFuYWdlcihzdGFjaywgJ1NNJywge1xuICAgICAgc2Vzc2lvblRUTDogRHVyYXRpb24uaG91cnMoNDgpLFxuICAgIH0pO1xuICAgIGV4cGVjdChtYW5hZ2VyLnNlc3Npb25UVEwudG9Ib3VycygpKS50b0JlKDQ4KTtcbiAgfSk7XG59KTtcblxuXG5kZXNjcmliZSgnU2xpZGluZ1dpbmRvd0NvbnZlcnNhdGlvbk1hbmFnZXInLCAoKSA9PiB7XG4gIHRlc3QoJ2RlZmF1bHQgd2luZG93IHNpemUgaXMgMjAnLCAoKSA9PiB7XG4gICAgY29uc3QgbWFuYWdlciA9IG5ldyBTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlcigpO1xuICAgIGV4cGVjdChtYW5hZ2VyLndpbmRvd1NpemUpLnRvQmUoMjApO1xuICB9KTtcblxuICB0ZXN0KCdjdXN0b20gd2luZG93IHNpemUgaXMgYXBwbGllZCcsICgpID0+IHtcbiAgICBjb25zdCBtYW5hZ2VyID0gbmV3IFNsaWRpbmdXaW5kb3dDb252ZXJzYXRpb25NYW5hZ2VyKHsgd2luZG93U2l6ZTogNTAgfSk7XG4gICAgZXhwZWN0KG1hbmFnZXIud2luZG93U2l6ZSkudG9CZSg1MCk7XG4gIH0pO1xuXG4gIHRlc3QoJ3Rocm93cyBmb3Igd2luZG93IHNpemUgYmVsb3cgMScsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gbmV3IFNsaWRpbmdXaW5kb3dDb252ZXJzYXRpb25NYW5hZ2VyKHsgd2luZG93U2l6ZTogMCB9KSkudG9UaHJvdyhcbiAgICAgICd3aW5kb3dTaXplIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMDAwJyxcbiAgICApO1xuICB9KTtcblxuICB0ZXN0KCd0aHJvd3MgZm9yIHdpbmRvdyBzaXplIGFib3ZlIDEwMDAnLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IG5ldyBTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlcih7IHdpbmRvd1NpemU6IDEwMDEgfSkpLnRvVGhyb3coXG4gICAgICAnd2luZG93U2l6ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMTAwMCcsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdCgncmV0dXJucyBjb3JyZWN0IGVudmlyb25tZW50IHZhcmlhYmxlcycsICgpID0+IHtcbiAgICBjb25zdCBtYW5hZ2VyID0gbmV3IFNsaWRpbmdXaW5kb3dDb252ZXJzYXRpb25NYW5hZ2VyKHsgd2luZG93U2l6ZTogMzAgfSk7XG4gICAgY29uc3QgZW52ID0gbWFuYWdlci5lbnZpcm9ubWVudFZhcmlhYmxlcygpO1xuICAgIGV4cGVjdChlbnYpLnRvRXF1YWwoe1xuICAgICAgQ09OVEVYVF9FTkFCTEVEOiAndHJ1ZScsXG4gICAgICBDT05URVhUX1NUUkFURUdZOiAnU2xpZGluZ1dpbmRvdycsXG4gICAgICBDT05URVhUX1dJTkRPV19TSVpFOiAnMzAnLFxuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5cbmRlc2NyaWJlKCdOdWxsQ29udmVyc2F0aW9uTWFuYWdlcicsICgpID0+IHtcbiAgdGVzdCgncmV0dXJucyBjb3JyZWN0IGVudmlyb25tZW50IHZhcmlhYmxlcycsICgpID0+IHtcbiAgICBjb25zdCBtYW5hZ2VyID0gbmV3IE51bGxDb252ZXJzYXRpb25NYW5hZ2VyKCk7XG4gICAgY29uc3QgZW52ID0gbWFuYWdlci5lbnZpcm9ubWVudFZhcmlhYmxlcygpO1xuICAgIGV4cGVjdChlbnYpLnRvRXF1YWwoe1xuICAgICAgQ09OVEVYVF9FTkFCTEVEOiAnZmFsc2UnLFxuICAgICAgQ09OVEVYVF9TVFJBVEVHWTogJ051bGwnLFxuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5cbmRlc2NyaWJlKCdDb2duaXRvQXV0aGVudGljYXRvcicsICgpID0+IHtcbiAgbGV0IGFwcDogQXBwO1xuICBsZXQgc3RhY2s6IFN0YWNrO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGFwcCA9IGNyZWF0ZVRlc3RBcHAoKTtcbiAgICBzdGFjayA9IG5ldyBTdGFjayhhcHAsICdUZXN0U3RhY2snLCB7XG4gICAgICBlbnY6IHsgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnY3JlYXRlcyB3aXRoIGRlZmF1bHQgcHJvcHMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IG5ldyBDb2duaXRvQXV0aGVudGljYXRvcigpKS5ub3QudG9UaHJvdygpO1xuICB9KTtcblxuICB0ZXN0KCdzZXRTY29wZSBjcmVhdGVzIFVzZXIgUG9vbCBhbmQgQ2xpZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IGF1dGggPSBuZXcgQ29nbml0b0F1dGhlbnRpY2F0b3IoKTtcbiAgICBhdXRoLl9zZXRTY29wZShzdGFjayk7XG4gICAgZXhwZWN0KGF1dGgudXNlclBvb2wpLnRvQmVEZWZpbmVkKCk7XG4gICAgZXhwZWN0KGF1dGgudXNlclBvb2xDbGllbnQpLnRvQmVEZWZpbmVkKCk7XG4gIH0pO1xuXG4gIHRlc3QoJ3Rocm93cyB3aGVuIGdyYW50QXV0aGVudGljYXRlIGNhbGxlZCB3aXRob3V0IHNjb3BlJywgKCkgPT4ge1xuICAgIGNvbnN0IGF1dGggPSBuZXcgQ29nbml0b0F1dGhlbnRpY2F0b3IoKTtcbiAgICBjb25zdCBtb2NrTGFtYmRhID0gbmV3IEZ1bmN0aW9uKHN0YWNrLCAnTW9ja0xhbWJkYScsIHtcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIwX1gsXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICBjb2RlOiBDb2RlLmZyb21JbmxpbmUoJ2V4cG9ydHMuaGFuZGxlciA9IGFzeW5jICgpID0+ICh7fSk7JyksXG4gICAgfSk7XG4gICAgZXhwZWN0KCgpID0+IGF1dGguZ3JhbnRBdXRoZW50aWNhdGUobW9ja0xhbWJkYSkpLnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgdGVzdCgncmV0dXJucyBjb3JyZWN0IGVudmlyb25tZW50IHZhcmlhYmxlcycsICgpID0+IHtcbiAgICBjb25zdCBhdXRoID0gbmV3IENvZ25pdG9BdXRoZW50aWNhdG9yKCk7XG4gICAgY29uc3QgZW52ID0gYXV0aC5lbnZpcm9ubWVudFZhcmlhYmxlcygpO1xuICAgIGV4cGVjdChlbnYuQVVUSF9UWVBFKS50b0JlKCdDb2duaXRvJyk7XG4gIH0pO1xufSk7XG5cblxuZGVzY3JpYmUoJ05vQXV0aGVudGljYXRvcicsICgpID0+IHtcbiAgdGVzdCgnZ3JhbnRBdXRoZW50aWNhdGUgaXMgbm8tb3AnLCAoKSA9PiB7XG4gICAgY29uc3QgYXV0aCA9IG5ldyBOb0F1dGhlbnRpY2F0b3IoKTtcbiAgICBjb25zdCBhcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJyk7XG4gICAgY29uc3QgbW9ja0xhbWJkYSA9IG5ldyBGdW5jdGlvbihzdGFjaywgJ01vY2tMYW1iZGEnLCB7XG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogQ29kZS5mcm9tSW5saW5lKCdleHBvcnRzLmhhbmRsZXIgPSBhc3luYyAoKSA9PiAoe30pOycpLFxuICAgIH0pO1xuICAgIGV4cGVjdCgoKSA9PiBhdXRoLmdyYW50QXV0aGVudGljYXRlKG1vY2tMYW1iZGEpKS5ub3QudG9UaHJvdygpO1xuICB9KTtcblxuICB0ZXN0KCdyZXR1cm5zIGNvcnJlY3QgZW52aXJvbm1lbnQgdmFyaWFibGVzJywgKCkgPT4ge1xuICAgIGNvbnN0IGF1dGggPSBuZXcgTm9BdXRoZW50aWNhdG9yKCk7XG4gICAgY29uc3QgZW52ID0gYXV0aC5lbnZpcm9ubWVudFZhcmlhYmxlcygpO1xuICAgIGV4cGVjdChlbnYpLnRvRXF1YWwoeyBBVVRIX1RZUEU6ICdOb25lJyB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
787
|
+
describe('InteractiveAgent Knowledge Base Integration', () => {
|
|
788
|
+
let app;
|
|
789
|
+
let stack;
|
|
790
|
+
let systemPrompt;
|
|
791
|
+
const testModel = aws_bedrock_1.FoundationModelIdentifier.ANTHROPIC_CLAUDE_3_SONNET_20240229_V1_0;
|
|
792
|
+
beforeEach(() => {
|
|
793
|
+
app = (0, test_utils_1.createTestApp)();
|
|
794
|
+
stack = new aws_cdk_lib_1.Stack(app, 'TestStack', {
|
|
795
|
+
env: { account: '123456789012', region: 'us-east-1' },
|
|
796
|
+
});
|
|
797
|
+
systemPrompt = new aws_s3_assets_1.Asset(stack, 'SystemPrompt', {
|
|
798
|
+
path: path.join(__dirname, '../agents/resources/default-strands-agent/batch.py'),
|
|
799
|
+
});
|
|
800
|
+
});
|
|
801
|
+
test('sets KNOWLEDGE_BASES_CONFIG when KBs configured', () => {
|
|
802
|
+
const kb = new knowledge_base_1.BedrockKnowledgeBase(stack, 'TestKB', {
|
|
803
|
+
name: 'test-kb',
|
|
804
|
+
description: 'Test knowledge base',
|
|
805
|
+
knowledgeBaseId: 'KB123456',
|
|
806
|
+
});
|
|
807
|
+
new interactive_agent_1.InteractiveAgent(stack, 'Agent', {
|
|
808
|
+
agentName: 'TestAgent',
|
|
809
|
+
agentDefinition: {
|
|
810
|
+
bedrockModel: { fmModelId: testModel },
|
|
811
|
+
systemPrompt,
|
|
812
|
+
knowledgeBases: [kb],
|
|
813
|
+
},
|
|
814
|
+
});
|
|
815
|
+
const template = assertions_1.Template.fromStack(stack);
|
|
816
|
+
template.hasResourceProperties('AWS::Lambda::Function', {
|
|
817
|
+
Environment: {
|
|
818
|
+
Variables: assertions_1.Match.objectLike({
|
|
819
|
+
KNOWLEDGE_BASES_CONFIG: assertions_1.Match.anyValue(),
|
|
820
|
+
KNOWLEDGE_BASE_SYSTEM_PROMPT_ADDITION: assertions_1.Match.anyValue(),
|
|
821
|
+
}),
|
|
822
|
+
},
|
|
823
|
+
});
|
|
824
|
+
});
|
|
825
|
+
test('does not set KB env vars when no KBs configured', () => {
|
|
826
|
+
new interactive_agent_1.InteractiveAgent(stack, 'Agent', {
|
|
827
|
+
agentName: 'TestAgent',
|
|
828
|
+
agentDefinition: {
|
|
829
|
+
bedrockModel: { fmModelId: testModel },
|
|
830
|
+
systemPrompt,
|
|
831
|
+
},
|
|
832
|
+
});
|
|
833
|
+
const template = assertions_1.Template.fromStack(stack);
|
|
834
|
+
const functions = template.findResources('AWS::Lambda::Function');
|
|
835
|
+
const fn = Object.values(functions).find((f) => f.Properties?.FunctionName?.includes('TestAgent'));
|
|
836
|
+
expect(fn.Properties.Environment.Variables.KNOWLEDGE_BASES_CONFIG).toBeUndefined();
|
|
837
|
+
expect(fn.Properties.Environment.Variables.KNOWLEDGE_BASE_SYSTEM_PROMPT_ADDITION).toBeUndefined();
|
|
838
|
+
});
|
|
839
|
+
});
|
|
840
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3RpdmUtYWdlbnQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy9mcmFtZXdvcmsvdGVzdHMvaW50ZXJhY3RpdmUtYWdlbnQudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZCQUE2QjtBQUM3Qiw2Q0FBbUQ7QUFDbkQsdURBQXlEO0FBQ3pELHlEQUFvRTtBQUNwRSx1REFBaUU7QUFDakUsK0NBQTRDO0FBQzVDLDZEQUFrRDtBQUNsRCwyREFBMkQ7QUFDM0QsbUVBUXFDO0FBQ3JDLDZEQUFnRTtBQUVoRSxRQUFRLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO0lBQ2hDLElBQUksR0FBUSxDQUFDO0lBQ2IsSUFBSSxLQUFZLENBQUM7SUFDakIsSUFBSSxZQUFtQixDQUFDO0lBQ3hCLE1BQU0sU0FBUyxHQUFHLHVDQUF5QixDQUFDLHVDQUF1QyxDQUFDO0lBRXBGLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxHQUFHLEdBQUcsSUFBQSwwQkFBYSxHQUFFLENBQUM7UUFDdEIsS0FBSyxHQUFHLElBQUksbUJBQUssQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFO1lBQ2xDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRTtTQUN0RCxDQUFDLENBQUM7UUFDSCxZQUFZLEdBQUcsSUFBSSxxQkFBSyxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUU7WUFDOUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLG9EQUFvRCxDQUFDO1NBQ2pGLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRTtRQUNyQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFO1lBQ3RDLE1BQU0sS0FBSyxHQUFHLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9B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Q0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsaURBQWlELEVBQUUsR0FBRyxFQUFFO1FBQzNELElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtZQUNuQyxTQUFTLEVBQUUsV0FBVztZQUN0QixlQUFlLEVBQUU7Z0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtnQkFDdEMsWUFBWTthQUNiO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FDbEQsQ0FBQyxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUMzQyxDQUFDO1FBRVQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ25GLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMscUNBQXFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNwRyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEFwcCwgU3RhY2ssIER1cmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgVGVtcGxhdGUsIE1hdGNoIH0gZnJvbSAnYXdzLWNkay1saWIvYXNzZXJ0aW9ucyc7XG5pbXBvcnQgeyBGb3VuZGF0aW9uTW9kZWxJZGVudGlmaWVyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2snO1xuaW1wb3J0IHsgQ29kZSwgRnVuY3Rpb24sIFJ1bnRpbWUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IEJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBBc3NldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1hc3NldHMnO1xuaW1wb3J0IHsgY3JlYXRlVGVzdEFwcCB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy90ZXN0LXV0aWxzJztcbmltcG9ydCB7XG4gIEludGVyYWN0aXZlQWdlbnQsXG4gIFN0cmVhbWluZ0h0dHBBZGFwdGVyLFxuICBTM1Nlc3Npb25NYW5hZ2VyLFxuICBTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlcixcbiAgTnVsbENvbnZlcnNhdGlvbk1hbmFnZXIsXG4gIENvZ25pdG9BdXRoZW50aWNhdG9yLFxuICBOb0F1dGhlbnRpY2F0b3IsXG59IGZyb20gJy4uL2FnZW50cy9pbnRlcmFjdGl2ZS1hZ2VudCc7XG5pbXBvcnQgeyBCZWRyb2NrS25vd2xlZGdlQmFzZSB9IGZyb20gJy4uL2FnZW50cy9rbm93bGVkZ2UtYmFzZSc7XG5cbmRlc2NyaWJlKCdJbnRlcmFjdGl2ZUFnZW50JywgKCkgPT4ge1xuICBsZXQgYXBwOiBBcHA7XG4gIGxldCBzdGFjazogU3RhY2s7XG4gIGxldCBzeXN0ZW1Qcm9tcHQ6IEFzc2V0O1xuICBjb25zdCB0ZXN0TW9kZWwgPSBGb3VuZGF0aW9uTW9kZWxJZGVudGlmaWVyLkFOVEhST1BJQ19DTEFVREVfM19TT05ORVRfMjAyNDAyMjlfVjFfMDtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBhcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG4gICAgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJywge1xuICAgICAgZW52OiB7IGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICd1cy1lYXN0LTEnIH0sXG4gICAgfSk7XG4gICAgc3lzdGVtUHJvbXB0ID0gbmV3IEFzc2V0KHN0YWNrLCAnU3lzdGVtUHJvbXB0Jywge1xuICAgICAgcGF0aDogcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2FnZW50cy9yZXNvdXJjZXMvZGVmYXVsdC1zdHJhbmRzLWFnZW50L2JhdGNoLnB5JyksXG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdEZWZhdWx0IENvbmZpZ3VyYXRpb24nLCAoKSA9PiB7XG4gICAgdGVzdCgnY3JlYXRlcyB3aXRoIG1pbmltYWwgcHJvcHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhZ2VudCA9IG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYWdlbnQpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoYWdlbnQuYWdlbnRGdW5jdGlvbikudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChhZ2VudC5hcGlFbmRwb2ludCkudG9CZURlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2RlZmF1bHQgYWRhcHRlciBpcyBTdHJlYW1pbmdIdHRwQWRhcHRlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGFnZW50ID0gbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhZ2VudC5hZGFwdGVyKS50b0JlSW5zdGFuY2VPZihTdHJlYW1pbmdIdHRwQWRhcHRlcik7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdkZWZhdWx0IHNlc3Npb24gc3RvcmUgaXMgUzNTZXNzaW9uTWFuYWdlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGFnZW50ID0gbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhZ2VudC5zZXNzaW9uU3RvcmUpLnRvQmVJbnN0YW5jZU9mKFMzU2Vzc2lvbk1hbmFnZXIpO1xuICAgICAgZXhwZWN0KGFnZW50LnNlc3Npb25CdWNrZXQpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdkZWZhdWx0IGNvbnRleHQgc3RyYXRlZ3kgaXMgU2xpZGluZ1dpbmRvd0NvbnZlcnNhdGlvbk1hbmFnZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBhZ2VudCA9IG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYWdlbnQuY29udGV4dFN0cmF0ZWd5KS50b0JlSW5zdGFuY2VPZihTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlcik7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdkZWZhdWx0IGF1dGhlbnRpY2F0b3IgaXMgQ29nbml0b0F1dGhlbnRpY2F0b3InLCAoKSA9PiB7XG4gICAgICBjb25zdCBhZ2VudCA9IG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYWdlbnQuYXV0aGVudGljYXRvcikudG9CZUluc3RhbmNlT2YoQ29nbml0b0F1dGhlbnRpY2F0b3IpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnTGFtYmRhIEZ1bmN0aW9uIENvbmZpZ3VyYXRpb24nLCAoKSA9PiB7XG4gICAgdGVzdCgnY3JlYXRlcyBMYW1iZGEgZnVuY3Rpb24gd2l0aCBkZWZhdWx0IDE1LW1pbnV0ZSB0aW1lb3V0JywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywge1xuICAgICAgICBUaW1lb3V0OiA5MDAsIC8vIDE1IG1pbnV0ZXNcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY3JlYXRlcyBMYW1iZGEgZnVuY3Rpb24gd2l0aCBkZWZhdWx0IDEwMjQgTUIgbWVtb3J5JywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywge1xuICAgICAgICBNZW1vcnlTaXplOiAxMDI0LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdMYW1iZGEgZnVuY3Rpb24gaGFzIExhbWJkYSBXZWIgQWRhcHRlciBsYXllcicsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsIHtcbiAgICAgICAgTGF5ZXJzOiBNYXRjaC5hcnJheVdpdGgoW1xuICAgICAgICAgICdhcm46YXdzOmxhbWJkYTp1cy1lYXN0LTE6NzUzMjQwNTk4MDc1OmxheWVyOkxhbWJkYUFkYXB0ZXJMYXllclg4NjoyNScsXG4gICAgICAgIF0pLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdMYW1iZGEgZnVuY3Rpb24gaGFzIEFXU19MQU1CREFfRVhFQ19XUkFQUEVSIGVudiB2YXIgZm9yIExXQScsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsIHtcbiAgICAgICAgRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBWYXJpYWJsZXM6IE1hdGNoLm9iamVjdExpa2Uoe1xuICAgICAgICAgICAgQVdTX0xBTUJEQV9FWEVDX1dSQVBQRVI6ICcvb3B0L2Jvb3RzdHJhcCcsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ0xhbWJkYSBmdW5jdGlvbiBoYXMgQVdTX0xXQV9JTlZPS0VfTU9ERSBlbnYgdmFyJywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywge1xuICAgICAgICBFbnZpcm9ubWVudDoge1xuICAgICAgICAgIFZhcmlhYmxlczogTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAgICAgICAgICBBV1NfTFdBX0lOVk9LRV9NT0RFOiAncmVzcG9uc2Vfc3RyZWFtJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnTGFtYmRhIGZ1bmN0aW9uIGhhcyBQT1JUIGVudiB2YXIgc2V0IHRvIDgwODAnLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLCB7XG4gICAgICAgIEVudmlyb25tZW50OiB7XG4gICAgICAgICAgVmFyaWFibGVzOiBNYXRjaC5vYmplY3RMaWtlKHtcbiAgICAgICAgICAgIFBPUlQ6ICc4MDgwJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnTGFtYmRhIGZ1bmN0aW9uIGhhcyBNT0RFTF9JRCBlbnYgdmFyJywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywge1xuICAgICAgICBFbnZpcm9ubWVudDoge1xuICAgICAgICAgIFZhcmlhYmxlczogTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAgICAgICAgICBNT0RFTF9JRDogTWF0Y2guYW55VmFsdWUoKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnTGFtYmRhIGZ1bmN0aW9uIGhhcyBjb250ZXh0IHN0cmF0ZWd5IGVudiB2YXJzJywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywge1xuICAgICAgICBFbnZpcm9ubWVudDoge1xuICAgICAgICAgIFZhcmlhYmxlczogTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAgICAgICAgICBDT05URVhUX0VOQUJMRUQ6ICd0cnVlJyxcbiAgICAgICAgICAgIENPTlRFWFRfU1RSQVRFR1k6ICdTbGlkaW5nV2luZG93JyxcbiAgICAgICAgICAgIENPTlRFWFRfV0lORE9XX1NJWkU6ICcyMCcsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ0xhbWJkYSBmdW5jdGlvbiBoYXMgc2Vzc2lvbiBidWNrZXQgZW52IHZhcicsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsIHtcbiAgICAgICAgRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBWYXJpYWJsZXM6IE1hdGNoLm9iamVjdExpa2Uoe1xuICAgICAgICAgICAgU0VTU0lPTl9CVUNLRVQ6IE1hdGNoLmFueVZhbHVlKCksXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2N1c3RvbSB0aW1lb3V0IGlzIGFwcGxpZWQnLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMTApLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywge1xuICAgICAgICBUaW1lb3V0OiA2MDAsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2N1c3RvbSBtZW1vcnlTaXplIGlzIGFwcGxpZWQnLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICAgIG1lbW9yeVNpemU6IDIwNDgsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLCB7XG4gICAgICAgIE1lbW9yeVNpemU6IDIwNDgsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1JFU1QgQVBJIENvbmZpZ3VyYXRpb24nLCAoKSA9PiB7XG4gICAgdGVzdCgnY3JlYXRlcyBSRVNUIEFQSSByZXNvdXJjZScsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6QXBpR2F0ZXdheTo6UmVzdEFwaScsIDEpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY3JlYXRlcyAvY2hhdCByZXNvdXJjZScsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6QXBpR2F0ZXdheTo6UmVzb3VyY2UnLCB7XG4gICAgICAgIFBhdGhQYXJ0OiAnY2hhdCcsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NyZWF0ZXMgUE9TVCBtZXRob2Qgb24gL2NoYXQnLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZCcsIHtcbiAgICAgICAgSHR0cE1ldGhvZDogJ1BPU1QnLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdQT1NUIG1ldGhvZCBoYXMgQ29nbml0byBhdXRob3JpemVyIGJ5IGRlZmF1bHQnLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgLy8gVmVyaWZ5IENvZ25pdG8gYXV0aG9yaXplciBleGlzdHNcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpBcGlHYXRld2F5OjpBdXRob3JpemVyJywge1xuICAgICAgICBUeXBlOiAnQ09HTklUT19VU0VSX1BPT0xTJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnUE9TVCBtZXRob2QgaGFzIG5vIGF1dGhvcml6ZXIgd2l0aCBOb0F1dGhlbnRpY2F0b3InLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICAgIGF1dGhlbnRpY2F0b3I6IG5ldyBOb0F1dGhlbnRpY2F0b3IoKSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICAvLyBTaG91bGQgaGF2ZSBQT1NUIG1ldGhvZCB3aXRoIE5PTkUgYXV0aFxuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZCcsIHtcbiAgICAgICAgSHR0cE1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBBdXRob3JpemF0aW9uVHlwZTogJ05PTkUnLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdSRVNUIEFQSSBoYXMgQ09SUyBjb25maWd1cmF0aW9uJywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIC8vIE9QVElPTlMgbWV0aG9kIGZvciBDT1JTIHByZWZsaWdodFxuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZCcsIHtcbiAgICAgICAgSHR0cE1ldGhvZDogJ09QVElPTlMnLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTZXNzaW9uIE1hbmFnZW1lbnQnLCAoKSA9PiB7XG4gICAgdGVzdCgnY3JlYXRlcyBTMyBzZXNzaW9uIGJ1Y2tldCB3aXRoIEtNUyBlbmNyeXB0aW9uIGJ5IGRlZmF1bHQnLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OlMzOjpCdWNrZXQnLCB7XG4gICAgICAgIEJ1Y2tldEVuY3J5cHRpb246IHtcbiAgICAgICAgICBTZXJ2ZXJTaWRlRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb246IE1hdGNoLmFycmF5V2l0aChbXG4gICAgICAgICAgICBNYXRjaC5vYmplY3RMaWtlKHtcbiAgICAgICAgICAgICAgU2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBTU0VBbGdvcml0aG06ICdhd3M6a21zJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0pLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdzZXNzaW9uIGJ1Y2tldCBoYXMgbGlmZWN5Y2xlIHJ1bGUnLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OlMzOjpCdWNrZXQnLCB7XG4gICAgICAgIExpZmVjeWNsZUNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBSdWxlczogTWF0Y2guYXJyYXlXaXRoKFtcbiAgICAgICAgICAgIE1hdGNoLm9iamVjdExpa2Uoe1xuICAgICAgICAgICAgICBTdGF0dXM6ICdFbmFibGVkJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0pLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjdXN0b20gc2Vzc2lvbiBidWNrZXQgaXMgdXNlZCB3aGVuIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgY3VzdG9tQnVja2V0ID0gbmV3IEJ1Y2tldChzdGFjaywgJ0N1c3RvbUJ1Y2tldCcpO1xuXG4gICAgICBjb25zdCBhZ2VudCA9IG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgICAgc2Vzc2lvbkJ1Y2tldDogY3VzdG9tQnVja2V0LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhZ2VudC5zZXNzaW9uQnVja2V0KS50b0JlKGN1c3RvbUJ1Y2tldCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdzdGF0ZWxlc3MgbW9kZSBjcmVhdGVzIG5vIHNlc3Npb24gYnVja2V0IHdoZW4gc2Vzc2lvblN0b3JlIGlzIGV4cGxpY2l0bHkgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgLy8gV2hlbiBzZXNzaW9uU3RvcmUgaXMgbm90IHByb3ZpZGVkIGF0IGFsbCwgZGVmYXVsdCBTM1Nlc3Npb25NYW5hZ2VyIGlzIGNyZWF0ZWQuXG4gICAgICAvLyBUbyBnbyB0cnVseSBzdGF0ZWxlc3MsIHVzZXIgbXVzdCBwYXNzIGEgY3VzdG9tIElTZXNzaW9uU3RvcmUgd2l0aCBubyBidWNrZXQuXG4gICAgICBjb25zdCBhZ2VudCA9IG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBEZWZhdWx0IGNyZWF0ZXMgYSBzZXNzaW9uIHN0b3JlXG4gICAgICBleHBlY3QoYWdlbnQuc2Vzc2lvblN0b3JlKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQ29nbml0byBBdXRoZW50aWNhdGlvbicsICgpID0+IHtcbiAgICB0ZXN0KCdjcmVhdGVzIENvZ25pdG8gVXNlciBQb29sIGJ5IGRlZmF1bHQnLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkNvZ25pdG86OlVzZXJQb29sJywgMSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjcmVhdGVzIENvZ25pdG8gVXNlciBQb29sIENsaWVudCBieSBkZWZhdWx0JywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcygnQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudCcsIDEpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnbm8gQ29nbml0byByZXNvdXJjZXMgd2l0aCBOb0F1dGhlbnRpY2F0b3InLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICAgIGF1dGhlbnRpY2F0b3I6IG5ldyBOb0F1dGhlbnRpY2F0b3IoKSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6Q29nbml0bzo6VXNlclBvb2wnLCAwKTtcbiAgICAgIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcygnQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudCcsIDApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUHJvcHMgVmFsaWRhdGlvbicsICgpID0+IHtcbiAgICB0ZXN0KCd0aHJvd3MgZXJyb3IgZm9yIGVtcHR5IGFnZW50TmFtZScsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgICAgYWdlbnROYW1lOiAnJyxcbiAgICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdygnYWdlbnROYW1lIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgndGhyb3dzIGVycm9yIGZvciB3aGl0ZXNwYWNlLW9ubHkgYWdlbnROYW1lJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgICBhZ2VudE5hbWU6ICcgICAnLFxuICAgICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KS50b1Rocm93KCdhZ2VudE5hbWUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd0aHJvd3MgZXJyb3IgZm9yIG1lbW9yeVNpemUgdG9vIGxvdycsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVtb3J5U2l6ZTogNjQsXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdygnbWVtb3J5U2l6ZSBtdXN0IGJlIGJldHdlZW4gMTI4IGFuZCAxMDI0MCBNQicpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgndGhyb3dzIGVycm9yIGZvciBtZW1vcnlTaXplIHRvbyBoaWdoJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZW1vcnlTaXplOiAyMDQ4MCxcbiAgICAgICAgfSk7XG4gICAgICB9KS50b1Rocm93KCdtZW1vcnlTaXplIG11c3QgYmUgYmV0d2VlbiAxMjggYW5kIDEwMjQwIE1CJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd0aHJvd3MgZXJyb3IgZm9yIHRpbWVvdXQgdG9vIHNob3J0JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDApLFxuICAgICAgICB9KTtcbiAgICAgIH0pLnRvVGhyb3coJ3RpbWVvdXQgbXVzdCBiZSBiZXR3ZWVuIDEgc2Vjb25kIGFuZCAxNSBtaW51dGVzJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd0aHJvd3MgZXJyb3IgZm9yIHRpbWVvdXQgdG9vIGxvbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMjApLFxuICAgICAgICB9KTtcbiAgICAgIH0pLnRvVGhyb3coJ3RpbWVvdXQgbXVzdCBiZSBiZXR3ZWVuIDEgc2Vjb25kIGFuZCAxNSBtaW51dGVzJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd0aHJvd3MgZXJyb3IgZm9yIG1lc3NhZ2VIaXN0b3J5TGltaXQgdG9vIGxvdycsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZUhpc3RvcnlMaW1pdDogMCxcbiAgICAgICAgfSk7XG4gICAgICB9KS50b1Rocm93KCdtZXNzYWdlSGlzdG9yeUxpbWl0IG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMDAwJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd0aHJvd3MgZXJyb3IgZm9yIG1lc3NhZ2VIaXN0b3J5TGltaXQgdG9vIGhpZ2gnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2VIaXN0b3J5TGltaXQ6IDIwMDAsXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdygnbWVzc2FnZUhpc3RvcnlMaW1pdCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMTAwMCcpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnYWNjZXB0cyB2YWxpZCBib3VuZGFyeSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50MScsIHtcbiAgICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQxJyxcbiAgICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVtb3J5U2l6ZTogMTI4LFxuICAgICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMSksXG4gICAgICAgICAgbWVzc2FnZUhpc3RvcnlMaW1pdDogMSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudDInLCB7XG4gICAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50MicsXG4gICAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lbW9yeVNpemU6IDEwMjQwLFxuICAgICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgICAgICAgIG1lc3NhZ2VIaXN0b3J5TGltaXQ6IDEwMDAsXG4gICAgICAgIH0pO1xuICAgICAgfSkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0NESyBTeW50aCcsICgpID0+IHtcbiAgICB0ZXN0KCdzeW50aGVzaXplcyB3aXRob3V0IGVycm9ycycsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBhcHAuc3ludGgoKTtcbiAgICAgIH0pLm5vdC50b1Rocm93KCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjcmVhdGVzIEtNUyBrZXkgd2l0aCByb3RhdGlvbiBlbmFibGVkJywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIGNvbnN0IGtleXMgPSB0ZW1wbGF0ZS5maW5kUmVzb3VyY2VzKCdBV1M6OktNUzo6S2V5Jyk7XG4gICAgICBjb25zdCBoYXNSb3RhdGlvbiA9IE9iamVjdC52YWx1ZXMoa2V5cykuc29tZShcbiAgICAgICAgKGtleTogYW55KSA9PiBrZXkuUHJvcGVydGllcy5FbmFibGVLZXlSb3RhdGlvbiA9PT0gdHJ1ZSxcbiAgICAgICk7XG4gICAgICBleHBlY3QoaGFzUm90YXRpb24pLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjcmVhdGVzIElBTSByb2xlIHdpdGggTGFtYmRhIHNlcnZpY2UgcHJpbmNpcGFsJywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIGNvbnN0IHJvbGVzID0gdGVtcGxhdGUuZmluZFJlc291cmNlcygnQVdTOjpJQU06OlJvbGUnKTtcbiAgICAgIGNvbnN0IGFnZW50Um9sZSA9IE9iamVjdC52YWx1ZXMocm9sZXMpLmZpbmQoKHJvbGU6IGFueSkgPT5cbiAgICAgICAgcm9sZS5Qcm9wZXJ0aWVzLkFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuc29tZShcbiAgICAgICAgICAoc3RtdDogYW55KSA9PiBzdG10LlByaW5jaXBhbD8uU2VydmljZSA9PT0gJ2xhbWJkYS5hbWF6b25hd3MuY29tJyxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICBleHBlY3QoYWdlbnRSb2xlKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5cbmRlc2NyaWJlKCdTdHJlYW1pbmdIdHRwQWRhcHRlcicsICgpID0+IHtcbiAgbGV0IGFwcDogQXBwO1xuICBsZXQgc3RhY2s6IFN0YWNrO1xuICBsZXQgbW9ja0xhbWJkYTogRnVuY3Rpb247XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgYXBwID0gY3JlYXRlVGVzdEFwcCgpO1xuICAgIHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ1Rlc3RTdGFjaycsIHtcbiAgICAgIGVudjogeyBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJywgcmVnaW9uOiAndXMtZWFzdC0xJyB9LFxuICAgIH0pO1xuICAgIG1vY2tMYW1iZGEgPSBuZXcgRnVuY3Rpb24oc3RhY2ssICdNb2NrTGFtYmRhJywge1xuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIGNvZGU6IENvZGUuZnJvbUlubGluZSgnZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKCkgPT4gKHsgc3RhdHVzQ29kZTogMjAwIH0pOycpLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdpbXBsZW1lbnRzIElDb21tdW5pY2F0aW9uQWRhcHRlciBpbnRlcmZhY2UnLCAoKSA9PiB7XG4gICAgY29uc3QgYWRhcHRlciA9IG5ldyBTdHJlYW1pbmdIdHRwQWRhcHRlcigpO1xuICAgIGV4cGVjdCh0eXBlb2YgYWRhcHRlci5hdHRhY2hUb0Z1bmN0aW9uKS50b0JlKCdmdW5jdGlvbicpO1xuICAgIGV4cGVjdCh0eXBlb2YgYWRhcHRlci5ncmFudEludm9rZSkudG9CZSgnZnVuY3Rpb24nKTtcbiAgfSk7XG5cbiAgdGVzdCgnY3JlYXRlcyB3aXRoIGRlZmF1bHQgcHJvcHMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IG5ldyBTdHJlYW1pbmdIdHRwQWRhcHRlcigpKS5ub3QudG9UaHJvdygpO1xuICB9KTtcblxuICB0ZXN0KCdjcmVhdGVzIHdpdGggY3VzdG9tIHN0YWdlTmFtZScsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gbmV3IFN0cmVhbWluZ0h0dHBBZGFwdGVyKHsgc3RhZ2VOYW1lOiAnZGV2JyB9KSkubm90LnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgdGVzdCgnY3JlYXRlcyB3aXRoIHRocm90dGxlIHNldHRpbmdzJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBuZXcgU3RyZWFtaW5nSHR0cEFkYXB0ZXIoe1xuICAgICAgdGhyb3R0bGU6IHsgcmF0ZUxpbWl0OiAxMDAsIGJ1cnN0TGltaXQ6IDIwMCB9LFxuICAgIH0pKS5ub3QudG9UaHJvdygpO1xuICB9KTtcblxuICB0ZXN0KCd0aHJvd3Mgd2hlbiBhdHRhY2hUb0Z1bmN0aW9uIGNhbGxlZCB3aXRob3V0IHNjb3BlJywgKCkgPT4ge1xuICAgIGNvbnN0IGFkYXB0ZXIgPSBuZXcgU3RyZWFtaW5nSHR0cEFkYXB0ZXIoKTtcbiAgICBleHBlY3QoKCkgPT4gYWRhcHRlci5hdHRhY2hUb0Z1bmN0aW9uKG1vY2tMYW1iZGEpKS50b1Rocm93KFxuICAgICAgJ1N0cmVhbWluZ0h0dHBBZGFwdGVyIG11c3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCBhIHNjb3BlIGJlZm9yZSBjYWxsaW5nIGF0dGFjaFRvRnVuY3Rpb24nLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoJ2F0dGFjaFRvRnVuY3Rpb24gcmV0dXJucyBlbmRwb2ludCBVUkwnLCAoKSA9PiB7XG4gICAgY29uc3QgYWRhcHRlciA9IG5ldyBTdHJlYW1pbmdIdHRwQWRhcHRlcigpO1xuICAgIGFkYXB0ZXIuX3NldFNjb3BlKHN0YWNrKTtcbiAgICBjb25zdCB1cmwgPSBhZGFwdGVyLmF0dGFjaFRvRnVuY3Rpb24obW9ja0xhbWJkYSk7XG4gICAgZXhwZWN0KHVybCkudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3QodHlwZW9mIHVybCkudG9CZSgnc3RyaW5nJyk7XG4gIH0pO1xuXG4gIHRlc3QoJ2dyYW50SW52b2tlIGRvZXMgbm90IHRocm93JywgKCkgPT4ge1xuICAgIGNvbnN0IGFkYXB0ZXIgPSBuZXcgU3RyZWFtaW5nSHR0cEFkYXB0ZXIoKTtcbiAgICBhZGFwdGVyLl9zZXRTY29wZShzdGFjayk7XG4gICAgYWRhcHRlci5hdHRhY2hUb0Z1bmN0aW9uKG1vY2tMYW1iZGEpO1xuICAgIGV4cGVjdCgoKSA9PiBhZGFwdGVyLmdyYW50SW52b2tlKG1vY2tMYW1iZGEpKS5ub3QudG9UaHJvdygpO1xuICB9KTtcbn0pO1xuXG5cbmRlc2NyaWJlKCdTM1Nlc3Npb25NYW5hZ2VyJywgKCkgPT4ge1xuICB0ZXN0KCdpbXBsZW1lbnRzIElTZXNzaW9uU3RvcmUnLCAoKSA9PiB7XG4gICAgY29uc3QgYXBwID0gY3JlYXRlVGVzdEFwcCgpO1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ1Rlc3RTdGFjaycpO1xuICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgUzNTZXNzaW9uTWFuYWdlcihzdGFjaywgJ1NNJyk7XG4gICAgZXhwZWN0KHR5cGVvZiBtYW5hZ2VyLmdyYW50UmVhZFdyaXRlKS50b0JlKCdmdW5jdGlvbicpO1xuICAgIGV4cGVjdChtYW5hZ2VyLnNlc3Npb25CdWNrZXQpLnRvQmVEZWZpbmVkKCk7XG4gIH0pO1xuXG4gIHRlc3QoJ2NyZWF0ZXMgYnVja2V0IHdpdGggS01TIGVuY3J5cHRpb24nLCAoKSA9PiB7XG4gICAgY29uc3QgYXBwID0gY3JlYXRlVGVzdEFwcCgpO1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ1Rlc3RTdGFjaycpO1xuICAgIG5ldyBTM1Nlc3Npb25NYW5hZ2VyKHN0YWNrLCAnU00nKTtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OlMzOjpCdWNrZXQnLCB7XG4gICAgICBCdWNrZXRFbmNyeXB0aW9uOiB7XG4gICAgICAgIFNlcnZlclNpZGVFbmNyeXB0aW9uQ29uZmlndXJhdGlvbjogTWF0Y2guYXJyYXlXaXRoKFtcbiAgICAgICAgICBNYXRjaC5vYmplY3RMaWtlKHtcbiAgICAgICAgICAgIFNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0OiB7XG4gICAgICAgICAgICAgIFNTRUFsZ29yaXRobTogJ2F3czprbXMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCd1c2VzIGN1c3RvbSBidWNrZXQgd2hlbiBwcm92aWRlZCcsICgpID0+IHtcbiAgICBjb25zdCBhcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJyk7XG4gICAgY29uc3QgYnVja2V0ID0gbmV3IEJ1Y2tldChzdGFjaywgJ0N1c3RvbUJ1Y2tldCcpO1xuICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgUzNTZXNzaW9uTWFuYWdlcihzdGFjaywgJ1NNJywgeyBidWNrZXQgfSk7XG4gICAgZXhwZWN0KG1hbmFnZXIuYnVja2V0KS50b0JlKGJ1Y2tldCk7XG4gIH0pO1xuXG4gIHRlc3QoJ2RlZmF1bHQgVFRMIGlzIDI0IGhvdXJzJywgKCkgPT4ge1xuICAgIGNvbnN0IGFwcCA9IGNyZWF0ZVRlc3RBcHAoKTtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsICdUZXN0U3RhY2snKTtcbiAgICBjb25zdCBtYW5hZ2VyID0gbmV3IFMzU2Vzc2lvbk1hbmFnZXIoc3RhY2ssICdTTScpO1xuICAgIGV4cGVjdChtYW5hZ2VyLnNlc3Npb25UVEwudG9Ib3VycygpKS50b0JlKDI0KTtcbiAgfSk7XG5cbiAgdGVzdCgnY3VzdG9tIFRUTCBpcyBhcHBsaWVkJywgKCkgPT4ge1xuICAgIGNvbnN0IGFwcCA9IGNyZWF0ZVRlc3RBcHAoKTtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsICdUZXN0U3RhY2snKTtcbiAgICBjb25zdCBtYW5hZ2VyID0gbmV3IFMzU2Vzc2lvbk1hbmFnZXIoc3RhY2ssICdTTScsIHtcbiAgICAgIHNlc3Npb25UVEw6IER1cmF0aW9uLmhvdXJzKDQ4KSxcbiAgICB9KTtcbiAgICBleHBlY3QobWFuYWdlci5zZXNzaW9uVFRMLnRvSG91cnMoKSkudG9CZSg0OCk7XG4gIH0pO1xufSk7XG5cblxuZGVzY3JpYmUoJ1NsaWRpbmdXaW5kb3dDb252ZXJzYXRpb25NYW5hZ2VyJywgKCkgPT4ge1xuICB0ZXN0KCdkZWZhdWx0IHdpbmRvdyBzaXplIGlzIDIwJywgKCkgPT4ge1xuICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgU2xpZGluZ1dpbmRvd0NvbnZlcnNhdGlvbk1hbmFnZXIoKTtcbiAgICBleHBlY3QobWFuYWdlci53aW5kb3dTaXplKS50b0JlKDIwKTtcbiAgfSk7XG5cbiAgdGVzdCgnY3VzdG9tIHdpbmRvdyBzaXplIGlzIGFwcGxpZWQnLCAoKSA9PiB7XG4gICAgY29uc3QgbWFuYWdlciA9IG5ldyBTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlcih7IHdpbmRvd1NpemU6IDUwIH0pO1xuICAgIGV4cGVjdChtYW5hZ2VyLndpbmRvd1NpemUpLnRvQmUoNTApO1xuICB9KTtcblxuICB0ZXN0KCd0aHJvd3MgZm9yIHdpbmRvdyBzaXplIGJlbG93IDEnLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IG5ldyBTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlcih7IHdpbmRvd1NpemU6IDAgfSkpLnRvVGhyb3coXG4gICAgICAnd2luZG93U2l6ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMTAwMCcsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdCgndGhyb3dzIGZvciB3aW5kb3cgc2l6ZSBhYm92ZSAxMDAwJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBuZXcgU2xpZGluZ1dpbmRvd0NvbnZlcnNhdGlvbk1hbmFnZXIoeyB3aW5kb3dTaXplOiAxMDAxIH0pKS50b1Rocm93KFxuICAgICAgJ3dpbmRvd1NpemUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEwMDAnLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoJ3JldHVybnMgY29ycmVjdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMnLCAoKSA9PiB7XG4gICAgY29uc3QgbWFuYWdlciA9IG5ldyBTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlcih7IHdpbmRvd1NpemU6IDMwIH0pO1xuICAgIGNvbnN0IGVudiA9IG1hbmFnZXIuZW52aXJvbm1lbnRWYXJpYWJsZXMoKTtcbiAgICBleHBlY3QoZW52KS50b0VxdWFsKHtcbiAgICAgIENPTlRFWFRfRU5BQkxFRDogJ3RydWUnLFxuICAgICAgQ09OVEVYVF9TVFJBVEVHWTogJ1NsaWRpbmdXaW5kb3cnLFxuICAgICAgQ09OVEVYVF9XSU5ET1dfU0laRTogJzMwJyxcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuXG5kZXNjcmliZSgnTnVsbENvbnZlcnNhdGlvbk1hbmFnZXInLCAoKSA9PiB7XG4gIHRlc3QoJ3JldHVybnMgY29ycmVjdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMnLCAoKSA9PiB7XG4gICAgY29uc3QgbWFuYWdlciA9IG5ldyBOdWxsQ29udmVyc2F0aW9uTWFuYWdlcigpO1xuICAgIGNvbnN0IGVudiA9IG1hbmFnZXIuZW52aXJvbm1lbnRWYXJpYWJsZXMoKTtcbiAgICBleHBlY3QoZW52KS50b0VxdWFsKHtcbiAgICAgIENPTlRFWFRfRU5BQkxFRDogJ2ZhbHNlJyxcbiAgICAgIENPTlRFWFRfU1RSQVRFR1k6ICdOdWxsJyxcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuXG5kZXNjcmliZSgnQ29nbml0b0F1dGhlbnRpY2F0b3InLCAoKSA9PiB7XG4gIGxldCBhcHA6IEFwcDtcbiAgbGV0IHN0YWNrOiBTdGFjaztcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBhcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG4gICAgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJywge1xuICAgICAgZW52OiB7IGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICd1cy1lYXN0LTEnIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2NyZWF0ZXMgd2l0aCBkZWZhdWx0IHByb3BzJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBuZXcgQ29nbml0b0F1dGhlbnRpY2F0b3IoKSkubm90LnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgdGVzdCgnc2V0U2NvcGUgY3JlYXRlcyBVc2VyIFBvb2wgYW5kIENsaWVudCcsICgpID0+IHtcbiAgICBjb25zdCBhdXRoID0gbmV3IENvZ25pdG9BdXRoZW50aWNhdG9yKCk7XG4gICAgYXV0aC5fc2V0U2NvcGUoc3RhY2spO1xuICAgIGV4cGVjdChhdXRoLnVzZXJQb29sKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChhdXRoLnVzZXJQb29sQ2xpZW50KS50b0JlRGVmaW5lZCgpO1xuICB9KTtcblxuICB0ZXN0KCd0aHJvd3Mgd2hlbiBncmFudEF1dGhlbnRpY2F0ZSBjYWxsZWQgd2l0aG91dCBzY29wZScsICgpID0+IHtcbiAgICBjb25zdCBhdXRoID0gbmV3IENvZ25pdG9BdXRoZW50aWNhdG9yKCk7XG4gICAgY29uc3QgbW9ja0xhbWJkYSA9IG5ldyBGdW5jdGlvbihzdGFjaywgJ01vY2tMYW1iZGEnLCB7XG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogQ29kZS5mcm9tSW5saW5lKCdleHBvcnRzLmhhbmRsZXIgPSBhc3luYyAoKSA9PiAoe30pOycpLFxuICAgIH0pO1xuICAgIGV4cGVjdCgoKSA9PiBhdXRoLmdyYW50QXV0aGVudGljYXRlKG1vY2tMYW1iZGEpKS50b1Rocm93KCk7XG4gIH0pO1xuXG4gIHRlc3QoJ3JldHVybnMgY29ycmVjdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMnLCAoKSA9PiB7XG4gICAgY29uc3QgYXV0aCA9IG5ldyBDb2duaXRvQXV0aGVudGljYXRvcigpO1xuICAgIGNvbnN0IGVudiA9IGF1dGguZW52aXJvbm1lbnRWYXJpYWJsZXMoKTtcbiAgICBleHBlY3QoZW52LkFVVEhfVFlQRSkudG9CZSgnQ29nbml0bycpO1xuICB9KTtcbn0pO1xuXG5cbmRlc2NyaWJlKCdOb0F1dGhlbnRpY2F0b3InLCAoKSA9PiB7XG4gIHRlc3QoJ2dyYW50QXV0aGVudGljYXRlIGlzIG5vLW9wJywgKCkgPT4ge1xuICAgIGNvbnN0IGF1dGggPSBuZXcgTm9BdXRoZW50aWNhdG9yKCk7XG4gICAgY29uc3QgYXBwID0gY3JlYXRlVGVzdEFwcCgpO1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ1Rlc3RTdGFjaycpO1xuICAgIGNvbnN0IG1vY2tMYW1iZGEgPSBuZXcgRnVuY3Rpb24oc3RhY2ssICdNb2NrTGFtYmRhJywge1xuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIGNvZGU6IENvZGUuZnJvbUlubGluZSgnZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKCkgPT4gKHt9KTsnKSxcbiAgICB9KTtcbiAgICBleHBlY3QoKCkgPT4gYXV0aC5ncmFudEF1dGhlbnRpY2F0ZShtb2NrTGFtYmRhKSkubm90LnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgdGVzdCgncmV0dXJucyBjb3JyZWN0IGVudmlyb25tZW50IHZhcmlhYmxlcycsICgpID0+IHtcbiAgICBjb25zdCBhdXRoID0gbmV3IE5vQXV0aGVudGljYXRvcigpO1xuICAgIGNvbnN0IGVudiA9IGF1dGguZW52aXJvbm1lbnRWYXJpYWJsZXMoKTtcbiAgICBleHBlY3QoZW52KS50b0VxdWFsKHsgQVVUSF9UWVBFOiAnTm9uZScgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdJbnRlcmFjdGl2ZUFnZW50IEtub3dsZWRnZSBCYXNlIEludGVncmF0aW9uJywgKCkgPT4ge1xuICBsZXQgYXBwOiBBcHA7XG4gIGxldCBzdGFjazogU3RhY2s7XG4gIGxldCBzeXN0ZW1Qcm9tcHQ6IEFzc2V0O1xuICBjb25zdCB0ZXN0TW9kZWwgPSBGb3VuZGF0aW9uTW9kZWxJZGVudGlmaWVyLkFOVEhST1BJQ19DTEFVREVfM19TT05ORVRfMjAyNDAyMjlfVjFfMDtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBhcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG4gICAgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJywge1xuICAgICAgZW52OiB7IGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICd1cy1lYXN0LTEnIH0sXG4gICAgfSk7XG4gICAgc3lzdGVtUHJvbXB0ID0gbmV3IEFzc2V0KHN0YWNrLCAnU3lzdGVtUHJvbXB0Jywge1xuICAgICAgcGF0aDogcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2FnZW50cy9yZXNvdXJjZXMvZGVmYXVsdC1zdHJhbmRzLWFnZW50L2JhdGNoLnB5JyksXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3NldHMgS05PV0xFREdFX0JBU0VTX0NPTkZJRyB3aGVuIEtCcyBjb25maWd1cmVkJywgKCkgPT4ge1xuICAgIGNvbnN0IGtiID0gbmV3IEJlZHJvY2tLbm93bGVkZ2VCYXNlKHN0YWNrLCAnVGVzdEtCJywge1xuICAgICAgbmFtZTogJ3Rlc3Qta2InLFxuICAgICAgZGVzY3JpcHRpb246ICdUZXN0IGtub3dsZWRnZSBiYXNlJyxcbiAgICAgIGtub3dsZWRnZUJhc2VJZDogJ0tCMTIzNDU2JyxcbiAgICB9KTtcblxuICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIGtub3dsZWRnZUJhc2VzOiBba2JdLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsIHtcbiAgICAgIEVudmlyb25tZW50OiB7XG4gICAgICAgIFZhcmlhYmxlczogTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAgICAgICAgS05PV0xFREdFX0JBU0VTX0NPTkZJRzogTWF0Y2guYW55VmFsdWUoKSxcbiAgICAgICAgICBLTk9XTEVER0VfQkFTRV9TWVNURU1fUFJPTVBUX0FERElUSU9OOiBNYXRjaC5hbnlWYWx1ZSgpLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2RvZXMgbm90IHNldCBLQiBlbnYgdmFycyB3aGVuIG5vIEtCcyBjb25maWd1cmVkJywgKCkgPT4ge1xuICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgIGNvbnN0IGZ1bmN0aW9ucyA9IHRlbXBsYXRlLmZpbmRSZXNvdXJjZXMoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicpO1xuICAgIGNvbnN0IGZuID0gT2JqZWN0LnZhbHVlcyhmdW5jdGlvbnMpLmZpbmQoKGY6IGFueSkgPT5cbiAgICAgIGYuUHJvcGVydGllcz8uRnVuY3Rpb25OYW1lPy5pbmNsdWRlcygnVGVzdEFnZW50JyksXG4gICAgKSBhcyBhbnk7XG5cbiAgICBleHBlY3QoZm4uUHJvcGVydGllcy5FbnZpcm9ubWVudC5WYXJpYWJsZXMuS05PV0xFREdFX0JBU0VTX0NPTkZJRykudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChmbi5Qcm9wZXJ0aWVzLkVudmlyb25tZW50LlZhcmlhYmxlcy5LTk9XTEVER0VfQkFTRV9TWVNURU1fUFJPTVBUX0FERElUSU9OKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xufSk7XG4iXX0=
|