@cdklabs/cdk-appmod-catalog-blueprints 1.14.0 → 1.16.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.
Files changed (33) hide show
  1. package/.jsii +243 -164
  2. package/README.md +29 -28
  3. package/lib/document-processing/adapter/queued-s3-adapter.js +1 -1
  4. package/lib/document-processing/agentic-document-processing.js +1 -1
  5. package/lib/document-processing/base-document-processing.js +1 -1
  6. package/lib/document-processing/bedrock-document-processing.js +1 -1
  7. package/lib/document-processing/default-document-processing-config.js +1 -1
  8. package/lib/framework/agents/base-agent.js +1 -1
  9. package/lib/framework/agents/batch-agent.js +1 -1
  10. package/lib/framework/agents/default-agent-config.js +1 -1
  11. package/lib/framework/agents/interactive-agent.d.ts +71 -5
  12. package/lib/framework/agents/interactive-agent.js +92 -15
  13. package/lib/framework/agents/knowledge-base/base-knowledge-base.js +1 -1
  14. package/lib/framework/agents/knowledge-base/bedrock-knowledge-base.js +1 -1
  15. package/lib/framework/bedrock/bedrock.js +1 -1
  16. package/lib/framework/custom-resource/default-runtimes.js +1 -1
  17. package/lib/framework/foundation/access-log.js +1 -1
  18. package/lib/framework/foundation/eventbridge-broker.js +1 -1
  19. package/lib/framework/foundation/network.js +1 -1
  20. package/lib/framework/tests/interactive-agent-nag.test.js +2 -2
  21. package/lib/framework/tests/interactive-agent.test.js +89 -2
  22. package/lib/tsconfig.tsbuildinfo +1 -1
  23. package/lib/utilities/data-loader.js +1 -1
  24. package/lib/utilities/lambda-iam-utils.js +1 -1
  25. package/lib/utilities/observability/cloudfront-distribution-observability-property-injector.js +1 -1
  26. package/lib/utilities/observability/cloudwatch-transaction-search.js +1 -1
  27. package/lib/utilities/observability/default-observability-config.js +1 -1
  28. package/lib/utilities/observability/lambda-observability-property-injector.js +1 -1
  29. package/lib/utilities/observability/log-group-data-protection-utils.js +1 -1
  30. package/lib/utilities/observability/powertools-config.js +1 -1
  31. package/lib/utilities/observability/state-machine-observability-property-injector.js +1 -1
  32. package/lib/webapp/frontend-construct.js +1 -1
  33. package/package.json +1 -1
@@ -4,12 +4,14 @@ const path = require("path");
4
4
  const aws_cdk_lib_1 = require("aws-cdk-lib");
5
5
  const assertions_1 = require("aws-cdk-lib/assertions");
6
6
  const aws_bedrock_1 = require("aws-cdk-lib/aws-bedrock");
7
+ const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
7
8
  const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
8
9
  const aws_s3_1 = require("aws-cdk-lib/aws-s3");
9
10
  const aws_s3_assets_1 = require("aws-cdk-lib/aws-s3-assets");
10
11
  const test_utils_1 = require("../../utilities/test-utils");
11
12
  const interactive_agent_1 = require("../agents/interactive-agent");
12
13
  const knowledge_base_1 = require("../agents/knowledge-base");
14
+ const foundation_1 = require("../foundation");
13
15
  describe('InteractiveAgent', () => {
14
16
  let app;
15
17
  let stack;
@@ -928,7 +930,7 @@ describe('AgentCoreRuntimeHostingAdapter', () => {
928
930
  },
929
931
  hostingAdapter: new interactive_agent_1.AgentCoreRuntimeHostingAdapter({
930
932
  containerImageUri: '123456789012.dkr.ecr.us-east-1.amazonaws.com/my-agent:latest',
931
- networkMode: 'PUBLIC',
933
+ networkMode: interactive_agent_1.NetworkMode.PUBLIC,
932
934
  }),
933
935
  });
934
936
  const template = assertions_1.Template.fromStack(stack);
@@ -1082,5 +1084,90 @@ describe('AgentCoreRuntimeHostingAdapter', () => {
1082
1084
  });
1083
1085
  expect(agent.cfnRuntime).toBeDefined();
1084
1086
  });
1087
+ test('VPC network mode sets NetworkModeConfig via property override', () => {
1088
+ const network = new foundation_1.Network(stack, 'TestNetwork', { maxAzs: 2, natGateways: 1 });
1089
+ const sg = new aws_ec2_1.SecurityGroup(stack, 'TestSG', {
1090
+ vpc: network.vpc,
1091
+ description: 'Test SG',
1092
+ });
1093
+ new interactive_agent_1.InteractiveAgent(stack, 'Agent', {
1094
+ agentName: 'TestAgent',
1095
+ agentDefinition: {
1096
+ bedrockModel: { fmModelId: testModel },
1097
+ systemPrompt,
1098
+ },
1099
+ network,
1100
+ hostingAdapter: new interactive_agent_1.AgentCoreRuntimeHostingAdapter({
1101
+ containerImageUri: '123456789012.dkr.ecr.us-east-1.amazonaws.com/my-agent:latest',
1102
+ networkMode: interactive_agent_1.NetworkMode.VPC,
1103
+ vpcSubnets: { subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS },
1104
+ securityGroups: [sg],
1105
+ }),
1106
+ });
1107
+ const template = assertions_1.Template.fromStack(stack);
1108
+ template.hasResourceProperties('AWS::BedrockAgentCore::Runtime', {
1109
+ NetworkConfiguration: {
1110
+ NetworkMode: 'VPC',
1111
+ NetworkModeConfig: {
1112
+ Subnets: assertions_1.Match.anyValue(),
1113
+ SecurityGroups: assertions_1.Match.anyValue(),
1114
+ },
1115
+ },
1116
+ });
1117
+ });
1118
+ test('VPC mode throws when no subnets can be resolved', () => {
1119
+ expect(() => {
1120
+ new interactive_agent_1.InteractiveAgent(stack, 'Agent', {
1121
+ agentName: 'TestAgent',
1122
+ agentDefinition: {
1123
+ bedrockModel: { fmModelId: testModel },
1124
+ systemPrompt,
1125
+ },
1126
+ hostingAdapter: new interactive_agent_1.AgentCoreRuntimeHostingAdapter({
1127
+ containerImageUri: '123456789012.dkr.ecr.us-east-1.amazonaws.com/my-agent:latest',
1128
+ networkMode: interactive_agent_1.NetworkMode.VPC,
1129
+ }),
1130
+ });
1131
+ }).toThrow(/subnets/);
1132
+ });
1133
+ test('VPC mode throws when no security groups can be resolved', () => {
1134
+ // Provide a network so subnets resolve, but don't provide securityGroups
1135
+ // and mock the network so it doesn't auto-create one
1136
+ expect(() => {
1137
+ const network = new foundation_1.Network(stack, 'TestNetwork2', { maxAzs: 2, natGateways: 1 });
1138
+ new interactive_agent_1.InteractiveAgent(stack, 'Agent', {
1139
+ agentName: 'TestAgent',
1140
+ agentDefinition: {
1141
+ bedrockModel: { fmModelId: testModel },
1142
+ systemPrompt,
1143
+ },
1144
+ network,
1145
+ hostingAdapter: new interactive_agent_1.AgentCoreRuntimeHostingAdapter({
1146
+ containerImageUri: '123456789012.dkr.ecr.us-east-1.amazonaws.com/my-agent:latest',
1147
+ networkMode: interactive_agent_1.NetworkMode.VPC,
1148
+ }),
1149
+ });
1150
+ }).not.toThrow(); // Network auto-creates a security group, so this should succeed
1151
+ });
1152
+ test('PUBLIC mode does not set NetworkModeConfig', () => {
1153
+ new interactive_agent_1.InteractiveAgent(stack, 'Agent', {
1154
+ agentName: 'TestAgent',
1155
+ agentDefinition: {
1156
+ bedrockModel: { fmModelId: testModel },
1157
+ systemPrompt,
1158
+ },
1159
+ hostingAdapter: new interactive_agent_1.AgentCoreRuntimeHostingAdapter({
1160
+ containerImageUri: '123456789012.dkr.ecr.us-east-1.amazonaws.com/my-agent:latest',
1161
+ networkMode: interactive_agent_1.NetworkMode.PUBLIC,
1162
+ }),
1163
+ });
1164
+ const template = assertions_1.Template.fromStack(stack);
1165
+ template.hasResourceProperties('AWS::BedrockAgentCore::Runtime', {
1166
+ NetworkConfiguration: {
1167
+ NetworkMode: 'PUBLIC',
1168
+ NetworkModeConfig: assertions_1.Match.absent(),
1169
+ },
1170
+ });
1171
+ });
1085
1172
  });
1086
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3RpdmUtYWdlbnQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy9mcmFtZXdvcmsvdGVzdHMvaW50ZXJhY3RpdmUtYWdlbnQudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZCQUE2QjtBQUM3Qiw2Q0FBbUQ7QUFDbkQsdURBQXlEO0FBQ3pELHlEQUFvRTtBQUNwRSx1REFBaUU7QUFDakUsK0NBQTRDO0FBQzVDLDZEQUFrRDtBQUNsRCwyREFBMkQ7QUFDM0QsbUVBVXFDO0FBQ3JDLDZEQUFnRTtBQUVoRSxRQUFRLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO0lBQ2hDLElBQUksR0FBUSxDQUFDO0lBQ2IsSUFBSSxLQUFZLENBQUM7SUFDakIsSUFBSSxZQUFtQixDQUFDO0lBQ3hCLE1BQU0sU0FBUyxHQUFHLHVDQUF5QixDQUFDLHVDQUF1QyxDQUFDO0lBRXBGLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxHQUFHLEdBQUcsSUFBQSwwQkFBYSxHQUFFLENBQUM7UUFDdEIsS0FBSyxHQUFHLElBQUksbUJBQUssQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFO1lBQ2xDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRTtTQUN0RCxDQUFDLENBQUM7UUFDSCxZQUFZLEdBQUcsSUFBSSxxQkFBSyxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUU7WUFDOUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLG9EQUFvRCxDQUFDO1NBQ2pGLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRTtRQUNyQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFO1lBQ3RDLE1BQU0sS0FBSyxHQUFHLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDakQsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLGVBQWUsRUFBRTtvQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO29CQUN0QyxZQUFZO2lCQUNiO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDMUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyx5Q0FBeUMsRUFBRSxHQUFHLEVBQUU7WUFDbkQsTUFBTSxLQUFLLEdBQUcsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUNqRCxTQUFTLEVBQUUsV0FBVztnQkFDdEIsZUFBZSxFQUFFO29CQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLFlBQVk7aUJBQ2I7YUFDRixDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FBQyx3Q0FBb0IsQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLDJDQUEyQyxFQUFFLEdBQUcsRUFBRTtZQUNyRCxNQUFNLEtBQUssR0FBRyxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQ2pELFNBQVMsRUFBRSxXQUFXO2dCQUN0QixlQUFlLEVBQUU7b0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtvQkFDdEMsWUFBWTtpQkFDYjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsY0FBYyxDQUFDLG9DQUFnQixDQUFDLENBQUM7WUFDNUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyw4REFBOEQsRUFBRSxHQUFHLEVBQUU7WUFDeEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUNqRCxTQUFTLEVBQUUsV0FBVztnQkFDdEIsZUFBZSxFQUFFO29CQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLFlBQVk7aUJBQ2I7YUFDRixDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxvREFBZ0MsQ0FBQyxDQUFDO1FBQ2pGLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLCtDQUErQyxFQUFFLEdBQUcsRUFBRTtZQUN6RCxNQUFNLEtBQUssR0FBRyxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQ2pELFNBQVMsRUFBRSxXQUFXO2dCQUN0QixlQUFlLEVBQUU7b0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtvQkFDdEMsWUFBWTtpQkFDYjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsY0FBYyxDQUFDLHdDQUFvQixDQUFDLENBQUM7UUFDbkUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQywrQkFBK0IsRUFBRSxHQUFHLEVBQUU7UUFDN0MsSUFBSSxDQUFDLHdEQUF3RCxFQUFFLEdBQUcsRUFBRTtZQUNsRSxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQ25DLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixlQUFlLEVBQUU7b0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtvQkFDdEMsWUFBWTtpQkFDYjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyx1QkFBdUIsRUFBRTtnQkFDdEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxhQUFhO2FBQzVCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHFEQUFxRCxFQUFFLEdBQUcsRUFBRTtZQUMvRCxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQ25DLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixlQUFlLEVBQUU7b0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtvQkFDdEMsWUFBWTtpQkFDYjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyx1QkFBdUIsRUFBRTtnQkFDdEQsVUFBVSxFQUFFLElBQUk7YUFDakIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsOENBQThDLEVBQUUsR0FBRyxFQUFFO1lBQ3hELElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDbkMsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLGVBQWUsRUFBRTtvQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO29CQUN0QyxZQUFZO2lCQUNiO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsUUFBUSxDQUFDLHFCQUFxQixDQUFDLHVCQUF1QixFQUFFO2dCQUN0RCxNQUFNLEVBQUUsa0JBQUssQ0FBQyxTQUFTLENBQUM7b0JBQ3RCLHNFQUFzRTtpQkFDdkUsQ0FBQzthQUNILENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLDZEQUE2RCxFQUFFLEdBQUcsRUFBRTtZQUN2RSxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQ25DLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixlQUFlLEVBQUU7b0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtvQkFDdEMsWUFBWTtpQkFDYjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyx1QkFBdUIsRUFBRTtnQkFDdEQsV0FBVyxFQUFFO29CQUNYLFNBQVMsRUFBRSxrQkFBSyxDQUFDLFVBQVUsQ0FBQzt3QkFDMUIsdUJBQXVCLEVBQUUsZ0JBQWdCO3FCQUMxQyxDQUFDO2lCQUNIO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsaURBQWlELEVBQUUsR0FBRyxFQUFFO1lBQzNELElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDbkMsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLGVBQWUsRUFBRTtvQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO29CQUN0QyxZQUFZO2lCQUNiO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsUUFBUSxDQUFDLHFCQUFxQixDQUFDLHVCQUF1QixFQUFFO2dCQUN0RCxXQUFXLEVBQUU7b0JBQ1gsU0FBUyxFQUFFLGtCQUFLLENBQUMsVUFBVSxDQUFDO3dCQUMxQixtQkFBbUIsRUFBRSxpQkFBaUI7cUJBQ3ZDLENBQUM7aUJBQ0g7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyw4Q0FBOEMsRUFBRSxHQUFHLEVBQUU7WUFDeEQsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUNuQyxTQUFTLEVBQUUsV0FBVztnQkFDdEIsZUFBZSxFQUFFO29CQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLFlBQVk7aUJBQ2I7YUFDRixDQUFDLENBQUM7WUFFSCxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxRQUFRLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLEVBQUU7Z0JBQ3RELFdBQVcsRUFBRTtvQkFDWCxTQUFTLEVBQUUsa0JBQUssQ0FBQyxVQUFVLENBQUM7d0JBQzFCLElBQUksRUFBRSxNQUFNO3FCQUNiLENBQUM7aUJBQ0g7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxzQ0FBc0MsRUFBRSxHQUFHLEVBQUU7WUFDaEQsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUNuQyxTQUFTLEVBQUUsV0FBVztnQkFDdEIsZUFBZSxFQUFFO29CQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLFlBQVk7aUJBQ2I7YUFDRixDQUFDLENBQUM7WUFFSCxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxRQUFRLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLEVBQUU7Z0JBQ3RELFdBQVcsRUFBRTtvQkFDWCxTQUFTLEVBQUUsa0JBQUssQ0FBQyxVQUFVLENBQUM7d0JBQzFCLFFBQVEsRUFBRSxrQkFBSyxDQUFDLFFBQVEsRUFBRTtxQkFDM0IsQ0FBQztpQkFDSDthQUNGLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLG9FQUFvRSxFQUFFLEdBQUcsRUFBRTtZQUM5RSxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQ25DLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixlQUFlLEVBQUU7b0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtvQkFDdEMsWUFBWTtpQkFDYjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUNsRSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQ2xELENBQUMsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FDM0MsQ0FBQztZQUVULCtFQUErRTtZQUMvRSxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzVFLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM3RSxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbEYsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsNENBQTRDLEVBQUUsR0FBRyxFQUFFO1lBQ3RELElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDbkMsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLGVBQWUsRUFBRTtvQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO29CQUN0QyxZQUFZO2lCQUNiO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsUUFBUSxDQUFDLHFCQUFxQixDQUFDLHVCQUF1QixFQUFFO2dCQUN0RCxXQUFXLEVBQUU7b0JBQ1gsU0FBUyxFQUFFLGtCQUFLLENBQUMsVUFBVSxDQUFDO3dCQUMxQixjQUFjLEVBQUUsa0JBQUssQ0FBQyxRQUFRLEVBQUU7cUJBQ2pDLENBQUM7aUJBQ0g7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQywyQkFBMkIsRUFBRSxHQUFHLEVBQUU7WUFDckMsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUNuQyxTQUFTLEVBQUUsV0FBVztnQkFDdEIsZUFBZSxFQUFFO29CQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLFlBQVk7aUJBQ2I7Z0JBQ0QsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzthQUM5QixDQUFDLENBQUM7WUFFSCxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxRQUFRLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLEVBQUU7Z0JBQ3RELE9BQU8sRUFBRSxHQUFHO2FBQ2IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsOEJBQThCLEVBQUUsR0FBRyxFQUFFO1lBQ3hDLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDbkMsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLGVBQWUsRUFBRTtvQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO29CQUN0QyxZQUFZO2lCQUNiO2dCQUNELFVBQVUsRUFBRSxJQUFJO2FBQ2pCLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyx1QkFBdUIsRUFBRTtnQkFDdEQsVUFBVSxFQUFFLElBQUk7YUFDakIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7UUFDdEMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtZQUNyQyxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQ25DLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixlQUFlLEVBQUU7b0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtvQkFDdEMsWUFBWTtpQkFDYjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLFFBQVEsQ0FBQyxlQUFlLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO1lBQ2xDLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDbkMsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLGVBQWUsRUFBRTtvQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO29CQUN0QyxZQUFZO2lCQUNiO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsUUFBUSxDQUFDLHFCQUFxQixDQUFDLDJCQUEyQixFQUFFO2dCQUMxRCxRQUFRLEVBQUUsTUFBTTthQUNqQixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLEVBQUU7WUFDeEMsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUNuQyxTQUFTLEVBQUUsV0FBVztnQkFDdEIsZUFBZSxFQUFFO29CQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLFlBQVk7aUJBQ2I7YUFDRixDQUFDLENBQUM7WUFFSCxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxRQUFRLENBQUMscUJBQXFCLENBQUMseUJBQXlCLEVBQUU7Z0JBQ3hELFVBQVUsRUFBRSxNQUFNO2FBQ25CLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLCtDQUErQyxFQUFFLEdBQUcsRUFBRTtZQUN6RCxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQ25DLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixlQUFlLEVBQUU7b0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtvQkFDdEMsWUFBWTtpQkFDYjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLG1DQUFtQztZQUNuQyxRQUFRLENBQUMscUJBQXFCLENBQUMsNkJBQTZCLEVBQUU7Z0JBQzVELElBQUksRUFBRSxvQkFBb0I7YUFDM0IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsb0RBQW9ELEVBQUUsR0FBRyxFQUFFO1lBQzlELElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDbkMsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLGVBQWUsRUFBRTtvQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO29CQUN0QyxZQUFZO2lCQUNiO2dCQUNELGFBQWEsRUFBRSxJQUFJLG1DQUFlLEVBQUU7YUFDckMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MseUNBQXlDO1lBQ3pDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyx5QkFBeUIsRUFBRTtnQkFDeEQsVUFBVSxFQUFFLE1BQU07Z0JBQ2xCLGlCQUFpQixFQUFFLE1BQU07YUFDMUIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsaUNBQWlDLEVBQUUsR0FBRyxFQUFFO1lBQzNDLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDbkMsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLGVBQWUsRUFBRTtvQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO29CQUN0QyxZQUFZO2lCQUNiO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0Msb0NBQW9DO1lBQ3BDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyx5QkFBeUIsRUFBRTtnQkFDeEQsVUFBVSxFQUFFLFNBQVM7YUFDdEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUU7UUFDbEMsSUFBSSxDQUFDLDBEQUEwRCxFQUFFLEdBQUcsRUFBRTtZQUNwRSxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQ25DLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixlQUFlLEVBQUU7b0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtvQkFDdEMsWUFBWTtpQkFDYjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsRUFBRTtnQkFDaEQsZ0JBQWdCLEVBQUU7b0JBQ2hCLGlDQUFpQyxFQUFFLGtCQUFLLENBQUMsU0FBUyxDQUFDO3dCQUNqRCxrQkFBSyxDQUFDLFVBQVUsQ0FBQzs0QkFDZiw2QkFBNkIsRUFBRTtnQ0FDN0IsWUFBWSxFQUFFLFNBQVM7NkJBQ3hCO3lCQUNGLENBQUM7cUJBQ0gsQ0FBQztpQkFDSDthQUNGLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLG1DQUFtQyxFQUFFLEdBQUcsRUFBRTtZQUM3QyxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQ25DLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixlQUFlLEVBQUU7b0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtvQkFDdEMsWUFBWTtpQkFDYjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsRUFBRTtnQkFDaEQsc0JBQXNCLEVBQUU7b0JBQ3RCLEtBQUssRUFBRSxrQkFBSyxDQUFDLFNBQVMsQ0FBQzt3QkFDckIsa0JBQUssQ0FBQyxVQUFVLENBQUM7NEJBQ2YsTUFBTSxFQUFFLFNBQVM7eUJBQ2xCLENBQUM7cUJBQ0gsQ0FBQztpQkFDSDthQUNGLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLDZDQUE2QyxFQUFFLEdBQUcsRUFBRTtZQUN2RCxNQUFNLFlBQVksR0FBRyxJQUFJLGVBQU0sQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFFdkQsTUFBTSxLQUFLLEdBQUcsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUNqRCxTQUFTLEVBQUUsV0FBVztnQkFDdEIsZUFBZSxFQUFFO29CQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLFlBQVk7aUJBQ2I7Z0JBQ0QsYUFBYSxFQUFFLFlBQVk7YUFDNUIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsb0ZBQW9GLEVBQUUsR0FBRyxFQUFFO1lBQzlGLGlGQUFpRjtZQUNqRiwrRUFBK0U7WUFDL0UsTUFBTSxLQUFLLEdBQUcsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUNqRCxTQUFTLEVBQUUsV0FBVztnQkFDdEIsZUFBZSxFQUFFO29CQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLFlBQVk7aUJBQ2I7YUFDRixDQUFDLENBQUM7WUFFSCxrQ0FBa0M7WUFDbEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHdCQUF3QixFQUFFLEdBQUcsRUFBRTtRQUN0QyxJQUFJLENBQUMsc0NBQXNDLEVBQUUsR0FBRyxFQUFFO1lBQ2hELElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDbkMsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLGVBQWUsRUFBRTtvQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO29CQUN0QyxZQUFZO2lCQUNiO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsUUFBUSxDQUFDLGVBQWUsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyw2Q0FBNkMsRUFBRSxHQUFHLEVBQUU7WUFDdkQsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUNuQyxTQUFTLEVBQUUsV0FBVztnQkFDdEIsZUFBZSxFQUFFO29CQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLFlBQVk7aUJBQ2I7YUFDRixDQUFDLENBQUM7WUFFSCxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxRQUFRLENBQUMsZUFBZSxDQUFDLDhCQUE4QixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLDJDQUEyQyxFQUFFLEdBQUcsRUFBRTtZQUNyRCxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQ25DLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixlQUFlLEVBQUU7b0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtvQkFDdEMsWUFBWTtpQkFDYjtnQkFDRCxhQUFhLEVBQUUsSUFBSSxtQ0FBZSxFQUFFO2FBQ3JDLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLFFBQVEsQ0FBQyxlQUFlLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdEQsUUFBUSxDQUFDLGVBQWUsQ0FBQyw4QkFBOEIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtRQUNoQyxJQUFJLENBQUMsa0NBQWtDLEVBQUUsR0FBRyxFQUFFO1lBQzVDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO29CQUNuQyxTQUFTLEVBQUUsRUFBRTtvQkFDYixlQUFlLEVBQUU7d0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTt3QkFDdEMsWUFBWTtxQkFDYjtpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7WUFDdEQsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDVixJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7b0JBQ25DLFNBQVMsRUFBRSxLQUFLO29CQUNoQixlQUFlLEVBQUU7d0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTt3QkFDdEMsWUFBWTtxQkFDYjtpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxHQUFHLEVBQUU7WUFDL0MsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDVixJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7b0JBQ25DLFNBQVMsRUFBRSxXQUFXO29CQUN0QixlQUFlLEVBQUU7d0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTt3QkFDdEMsWUFBWTtxQkFDYjtvQkFDRCxVQUFVLEVBQUUsRUFBRTtpQkFDZixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxzQ0FBc0MsRUFBRSxHQUFHLEVBQUU7WUFDaEQsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDVixJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7b0JBQ25DLFNBQVMsRUFBRSxXQUFXO29CQUN0QixlQUFlLEVBQUU7d0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTt3QkFDdEMsWUFBWTtxQkFDYjtvQkFDRCxVQUFVLEVBQUUsS0FBSztpQkFDbEIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxFQUFFO1lBQzlDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO29CQUNuQyxTQUFTLEVBQUUsV0FBVztvQkFDdEIsZUFBZSxFQUFFO3dCQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7d0JBQ3RDLFlBQVk7cUJBQ2I7b0JBQ0QsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztpQkFDN0IsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsbUNBQW1DLEVBQUUsR0FBRyxFQUFFO1lBQzdDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO29CQUNuQyxTQUFTLEVBQUUsV0FBVztvQkFDdEIsZUFBZSxFQUFFO3dCQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7d0JBQ3RDLFlBQVk7cUJBQ2I7b0JBQ0QsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztpQkFDOUIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsOENBQThDLEVBQUUsR0FBRyxFQUFFO1lBQ3hELE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO29CQUNuQyxTQUFTLEVBQUUsV0FBVztvQkFDdEIsZUFBZSxFQUFFO3dCQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7d0JBQ3RDLFlBQVk7cUJBQ2I7b0JBQ0QsbUJBQW1CLEVBQUUsQ0FBQztpQkFDdkIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsK0NBQStDLEVBQUUsR0FBRyxFQUFFO1lBQ3pELE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO29CQUNuQyxTQUFTLEVBQUUsV0FBVztvQkFDdEIsZUFBZSxFQUFFO3dCQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7d0JBQ3RDLFlBQVk7cUJBQ2I7b0JBQ0QsbUJBQW1CLEVBQUUsSUFBSTtpQkFDMUIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO1lBQ3pDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFO29CQUNwQyxTQUFTLEVBQUUsWUFBWTtvQkFDdkIsZUFBZSxFQUFFO3dCQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7d0JBQ3RDLFlBQVk7cUJBQ2I7b0JBQ0QsVUFBVSxFQUFFLEdBQUc7b0JBQ2YsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDNUIsbUJBQW1CLEVBQUUsQ0FBQztpQkFDdkIsQ0FBQyxDQUFDO2dCQUVILElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtvQkFDcEMsU0FBUyxFQUFFLFlBQVk7b0JBQ3ZCLGVBQWUsRUFBRTt3QkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO3dCQUN0QyxZQUFZO3FCQUNiO29CQUNELFVBQVUsRUFBRSxLQUFLO29CQUNqQixPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUM3QixtQkFBbUIsRUFBRSxJQUFJO2lCQUMxQixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO1FBQ3pCLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7WUFDdEMsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUNuQyxTQUFTLEVBQUUsV0FBVztnQkFDdEIsZUFBZSxFQUFFO29CQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLFlBQVk7aUJBQ2I7YUFDRixDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsR0FBRyxFQUFFO2dCQUNWLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNkLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLEVBQUU7WUFDakQsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUNuQyxTQUFTLEVBQUUsV0FBVztnQkFDdEIsZUFBZSxFQUFFO29CQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLFlBQVk7aUJBQ2I7YUFDRixDQUFDLENBQUM7WUFFSCxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUMxQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLENBQ3hELENBQUM7WUFDRixNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGdEQUFnRCxFQUFFLEdBQUcsRUFBRTtZQUMxRCxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQ25DLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixlQUFlLEVBQUU7b0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtvQkFDdEMsWUFBWTtpQkFDYjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN2RCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQ3hELElBQUksQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDckQsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxLQUFLLHNCQUFzQixDQUNsRSxDQUNGLENBQUM7WUFDRixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBR0gsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRTtJQUNwQyxJQUFJLEdBQVEsQ0FBQztJQUNiLElBQUksS0FBWSxDQUFDO0lBQ2pCLElBQUksVUFBb0IsQ0FBQztJQUV6QixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsR0FBRyxHQUFHLElBQUEsMEJBQWEsR0FBRSxDQUFDO1FBQ3RCLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRTtZQUNsQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUU7U0FDdEQsQ0FBQyxDQUFDO1FBQ0gsVUFBVSxHQUFHLElBQUkscUJBQVEsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFO1lBQzdDLE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7WUFDNUIsT0FBTyxFQUFFLGVBQWU7WUFDeEIsSUFBSSxFQUFFLGlCQUFJLENBQUMsVUFBVSxDQUFDLHNEQUFzRCxDQUFDO1NBQzlFLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLDRDQUE0QyxFQUFFLEdBQUcsRUFBRTtRQUN0RCxNQUFNLE9BQU8sR0FBRyxJQUFJLHdDQUFvQixFQUFFLENBQUM7UUFDM0MsTUFBTSxDQUFDLE9BQU8sT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sQ0FBQyxPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFO1FBQ3RDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLHdDQUFvQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekQsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO1FBQ3pDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLHdDQUFvQixDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0UsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsR0FBRyxFQUFFO1FBQzFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLHdDQUFvQixDQUFDO1lBQ3BDLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRTtTQUM5QyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsbURBQW1ELEVBQUUsR0FBRyxFQUFFO1FBQzdELE1BQU0sT0FBTyxHQUFHLElBQUksd0NBQW9CLEVBQUUsQ0FBQztRQUMzQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUN4RCx1RkFBdUYsQ0FDeEYsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtRQUNqRCxNQUFNLE9BQU8sR0FBRyxJQUFJLHdDQUFvQixFQUFFLENBQUM7UUFDM0MsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzFCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQyxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7UUFDdEMsTUFBTSxPQUFPLEdBQUcsSUFBSSx3Q0FBb0IsRUFBRSxDQUFDO1FBQzNDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzlELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFHSCxRQUFRLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO0lBQ2hDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxHQUFHLEVBQUU7UUFDcEMsTUFBTSxHQUFHLEdBQUcsSUFBQSwwQkFBYSxHQUFFLENBQUM7UUFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRCxNQUFNLENBQUMsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxFQUFFO1FBQzlDLE1BQU0sR0FBRyxHQUFHLElBQUEsMEJBQWEsR0FBRSxDQUFDO1FBQzVCLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQUssQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDMUMsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEMsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsUUFBUSxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixFQUFFO1lBQ2hELGdCQUFnQixFQUFFO2dCQUNoQixpQ0FBaUMsRUFBRSxrQkFBSyxDQUFDLFNBQVMsQ0FBQztvQkFDakQsa0JBQUssQ0FBQyxVQUFVLENBQUM7d0JBQ2YsNkJBQTZCLEVBQUU7NEJBQzdCLFlBQVksRUFBRSxTQUFTO3lCQUN4QjtxQkFDRixDQUFDO2lCQUNILENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLGtDQUFrQyxFQUFFLEdBQUcsRUFBRTtRQUM1QyxNQUFNLEdBQUcsR0FBRyxJQUFBLDBCQUFhLEdBQUUsQ0FBQztRQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBTSxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNqRCxNQUFNLE9BQU8sR0FBRyxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzlELE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRTtRQUNuQyxNQUFNLEdBQUcsR0FBRyxJQUFBLDBCQUFhLEdBQUUsQ0FBQztRQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xELE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxJQUFBLDBCQUFhLEdBQUUsQ0FBQztRQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRTtZQUNoRCxVQUFVLEVBQUUsc0JBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1NBQy9CLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFHSCxRQUFRLENBQUMsa0NBQWtDLEVBQUUsR0FBRyxFQUFFO0lBQ2hELElBQUksQ0FBQywyQkFBMkIsRUFBRSxHQUFHLEVBQUU7UUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBSSxvREFBZ0MsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtRQUN6QyxNQUFNLE9BQU8sR0FBRyxJQUFJLG9EQUFnQyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDekUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsR0FBRyxFQUFFO1FBQzFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLG9EQUFnQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQzNFLHVDQUF1QyxDQUN4QyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsbUNBQW1DLEVBQUUsR0FBRyxFQUFFO1FBQzdDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLG9EQUFnQyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQzlFLHVDQUF1QyxDQUN4QyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsdUNBQXVDLEVBQUUsR0FBRyxFQUFFO1FBQ2pELE1BQU0sT0FBTyxHQUFHLElBQUksb0RBQWdDLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6RSxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUMzQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2xCLGVBQWUsRUFBRSxNQUFNO1lBQ3ZCLGdCQUFnQixFQUFFLGVBQWU7WUFDakMsbUJBQW1CLEVBQUUsSUFBSTtTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBR0gsUUFBUSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRTtJQUN2QyxJQUFJLENBQUMsdUNBQXVDLEVBQUUsR0FBRyxFQUFFO1FBQ2pELE1BQU0sT0FBTyxHQUFHLElBQUksMkNBQXVCLEVBQUUsQ0FBQztRQUM5QyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUMzQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2xCLGVBQWUsRUFBRSxPQUFPO1lBQ3hCLGdCQUFnQixFQUFFLE1BQU07U0FDekIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUdILFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUU7SUFDcEMsSUFBSSxHQUFRLENBQUM7SUFDYixJQUFJLEtBQVksQ0FBQztJQUVqQixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsR0FBRyxHQUFHLElBQUEsMEJBQWEsR0FBRSxDQUFDO1FBQ3RCLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRTtZQUNsQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUU7U0FDdEQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFO1FBQ3RDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLHdDQUFvQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekQsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsdUNBQXVDLEVBQUUsR0FBRyxFQUFFO1FBQ2pELE1BQU0sSUFBSSxHQUFHLElBQUksd0NBQW9CLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM1QyxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxvREFBb0QsRUFBRSxHQUFHLEVBQUU7UUFDOUQsTUFBTSxJQUFJLEdBQUcsSUFBSSx3Q0FBb0IsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLElBQUkscUJBQVEsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFO1lBQ25ELE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7WUFDNUIsT0FBTyxFQUFFLGVBQWU7WUFDeEIsSUFBSSxFQUFFLGlCQUFJLENBQUMsVUFBVSxDQUFDLHFDQUFxQyxDQUFDO1NBQzdELENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3RCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLEVBQUU7UUFDakQsTUFBTSxJQUFJLEdBQUcsSUFBSSx3Q0FBb0IsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFHSCxRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO0lBQy9CLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7UUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxtQ0FBZSxFQUFFLENBQUM7UUFDbkMsTUFBTSxHQUFHLEdBQUcsSUFBQSwwQkFBYSxHQUFFLENBQUM7UUFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMxQyxNQUFNLFVBQVUsR0FBRyxJQUFJLHFCQUFRLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRTtZQUNuRCxPQUFPLEVBQUUsb0JBQU8sQ0FBQyxXQUFXO1lBQzVCLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLElBQUksRUFBRSxpQkFBSSxDQUFDLFVBQVUsQ0FBQyxxQ0FBcUMsQ0FBQztTQUM3RCxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pFLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtRQUNqRCxNQUFNLElBQUksR0FBRyxJQUFJLG1DQUFlLEVBQUUsQ0FBQztRQUNuQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUN4QyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyw2Q0FBNkMsRUFBRSxHQUFHLEVBQUU7SUFDM0QsSUFBSSxHQUFRLENBQUM7SUFDYixJQUFJLEtBQVksQ0FBQztJQUNqQixJQUFJLFlBQW1CLENBQUM7SUFDeEIsTUFBTSxTQUFTLEdBQUcsdUNBQXlCLENBQUMsdUNBQXVDLENBQUM7SUFFcEYsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLEdBQUcsR0FBRyxJQUFBLDBCQUFhLEdBQUUsQ0FBQztRQUN0QixLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUU7WUFDbEMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFO1NBQ3RELENBQUMsQ0FBQztRQUNILFlBQVksR0FBRyxJQUFJLHFCQUFLLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRTtZQUM5QyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsb0RBQW9ELENBQUM7U0FDakYsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsaURBQWlELEVBQUUsR0FBRyxFQUFFO1FBQzNELE1BQU0sRUFBRSxHQUFHLElBQUkscUNBQW9CLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtZQUNuRCxJQUFJLEVBQUUsU0FBUztZQUNmLFdBQVcsRUFBRSxxQkFBcUI7WUFDbEMsZUFBZSxFQUFFLFVBQVU7U0FDNUIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO1lBQ25DLFNBQVMsRUFBRSxXQUFXO1lBQ3RCLGVBQWUsRUFBRTtnQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO2dCQUN0QyxZQUFZO2dCQUNaLGNBQWMsRUFBRSxDQUFDLEVBQUUsQ0FBQzthQUNyQjtTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyx1QkFBdUIsRUFBRTtZQUN0RCxXQUFXLEVBQUU7Z0JBQ1gsU0FBUyxFQUFFLGtCQUFLLENBQUMsVUFBVSxDQUFDO29CQUMxQixzQkFBc0IsRUFBRSxrQkFBSyxDQUFDLFFBQVEsRUFBRTtvQkFDeEMscUNBQXFDLEVBQUUsa0JBQUssQ0FBQyxRQUFRLEVBQUU7aUJBQ3hELENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLGlEQUFpRCxFQUFFLEdBQUcsRUFBRTtRQUMzRCxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7WUFDbkMsU0FBUyxFQUFFLFdBQVc7WUFDdEIsZUFBZSxFQUFFO2dCQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7Z0JBQ3RDLFlBQVk7YUFDYjtTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNsRSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQ2xELENBQUMsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FDM0MsQ0FBQztRQUVULE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuRixNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLHFDQUFxQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDcEcsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUdILFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUU7SUFDcEMsSUFBSSxHQUFRLENBQUM7SUFDYixJQUFJLEtBQVksQ0FBQztJQUNqQixJQUFJLFlBQW1CLENBQUM7SUFDeEIsTUFBTSxTQUFTLEdBQUcsdUNBQXlCLENBQUMsdUNBQXVDLENBQUM7SUFFcEYsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLEdBQUcsR0FBRyxJQUFBLDBCQUFhLEdBQUUsQ0FBQztRQUN0QixLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUU7WUFDbEMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFO1NBQ3RELENBQUMsQ0FBQztRQUNILFlBQVksR0FBRyxJQUFJLHFCQUFLLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRTtZQUM5QyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsb0RBQW9ELENBQUM7U0FDakYsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMscURBQXFELEVBQUUsR0FBRyxFQUFFO1FBQy9ELE1BQU0sS0FBSyxHQUFHLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtZQUNqRCxTQUFTLEVBQUUsV0FBVztZQUN0QixlQUFlLEVBQUU7Z0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtnQkFDdEMsWUFBWTthQUNiO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsaURBQWlEO1FBQ2pELE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUV4Qyx3REFBd0Q7UUFDeEQsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsUUFBUSxDQUFDLHFCQUFxQixDQUFDLHVCQUF1QixFQUFFO1lBQ3RELFlBQVksRUFBRSxrQkFBSyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQztTQUNsRCxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsZUFBZSxDQUFDLDBCQUEwQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hELFFBQVEsQ0FBQyxlQUFlLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMseURBQXlELEVBQUUsR0FBRyxFQUFFO1FBQ25FLE1BQU0sS0FBSyxHQUFHLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtZQUNqRCxTQUFTLEVBQUUsV0FBVztZQUN0QixlQUFlLEVBQUU7Z0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtnQkFDdEMsWUFBWTthQUNiO1lBQ0QsY0FBYyxFQUFFLElBQUksd0NBQW9CLENBQUM7Z0JBQ3ZDLGFBQWEsRUFBRSxJQUFJLG1DQUFlLEVBQUU7YUFDckMsQ0FBQztTQUNILENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUV4QyxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxRQUFRLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLEVBQUU7WUFDdEQsWUFBWSxFQUFFLGtCQUFLLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDO1NBQ2xELENBQUMsQ0FBQztRQUNILGtDQUFrQztRQUNsQyxRQUFRLENBQUMsZUFBZSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLDRFQUE0RSxFQUFFLEdBQUcsRUFBRTtRQUN0RixJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7WUFDbkMsU0FBUyxFQUFFLFdBQVc7WUFDdEIsZUFBZSxFQUFFO2dCQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7Z0JBQ3RDLFlBQVk7YUFDYjtZQUNELDBEQUEwRDtZQUMxRCxhQUFhLEVBQUUsSUFBSSx3Q0FBb0IsRUFBRTtZQUN6QyxjQUFjLEVBQUUsSUFBSSx3Q0FBb0IsQ0FBQztnQkFDdkMsYUFBYSxFQUFFLElBQUksbUNBQWUsRUFBRTthQUNyQyxDQUFDO1NBQ0gsQ0FBQyxDQUFDO1FBRUgsMkRBQTJEO1FBQzNELE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLFFBQVEsQ0FBQyxlQUFlLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUdILFFBQVEsQ0FBQyxnQ0FBZ0MsRUFBRSxHQUFHLEVBQUU7SUFDOUMsSUFBSSxHQUFRLENBQUM7SUFDYixJQUFJLEtBQVksQ0FBQztJQUNqQixJQUFJLFlBQW1CLENBQUM7SUFDeEIsTUFBTSxTQUFTLEdBQUcsdUNBQXlCLENBQUMsdUNBQXVDLENBQUM7SUFFcEYsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLEdBQUcsR0FBRyxJQUFBLDBCQUFhLEdBQUUsQ0FBQztRQUN0QixLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUU7WUFDbEMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFO1NBQ3RELENBQUMsQ0FBQztRQUNILFlBQVksR0FBRyxJQUFJLHFCQUFLLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRTtZQUM5QyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsb0RBQW9ELENBQUM7U0FDakYsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsdUNBQXVDLEVBQUUsR0FBRyxFQUFFO1FBQ2pELElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtZQUNuQyxTQUFTLEVBQUUsV0FBVztZQUN0QixlQUFlLEVBQUU7Z0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtnQkFDdEMsWUFBWTthQUNiO1lBQ0QsY0FBYyxFQUFFLElBQUksa0RBQThCLENBQUM7Z0JBQ2pELGlCQUFpQixFQUFFLDhEQUE4RDtnQkFDakYsV0FBVyxFQUFFLFFBQVE7YUFDdEIsQ0FBQztTQUNILENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxnQ0FBZ0MsRUFBRTtZQUMvRCxnQkFBZ0IsRUFBRSxtQkFBbUI7WUFDckMsb0JBQW9CLEVBQUU7Z0JBQ3BCLHNCQUFzQixFQUFFO29CQUN0QixZQUFZLEVBQUUsOERBQThEO2lCQUM3RTthQUNGO1lBQ0Qsb0JBQW9CLEVBQUU7Z0JBQ3BCLFdBQVcsRUFBRSxRQUFRO2FBQ3RCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFO1FBQ3RDLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtZQUNuQyxTQUFTLEVBQUUsV0FBVztZQUN0QixlQUFlLEVBQUU7Z0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtnQkFDdEMsWUFBWTthQUNiO1lBQ0QsY0FBYyxFQUFFLElBQUksa0RBQThCLENBQUM7Z0JBQ2pELGlCQUFpQixFQUFFLDhEQUE4RDthQUNsRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO1FBRUgsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsUUFBUSxDQUFDLGVBQWUsQ0FBQyx3Q0FBd0MsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0RSxRQUFRLENBQUMscUJBQXFCLENBQUMsd0NBQXdDLEVBQUU7WUFDdkUsSUFBSSxFQUFFLG9CQUFvQjtTQUMzQixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxzREFBc0QsRUFBRSxHQUFHLEVBQUU7UUFDaEUsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO1lBQ25DLFNBQVMsRUFBRSxXQUFXO1lBQ3RCLGVBQWUsRUFBRTtnQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO2dCQUN0QyxZQUFZO2FBQ2I7WUFDRCxjQUFjLEVBQUUsSUFBSSxrREFBOEIsQ0FBQztnQkFDakQsaUJBQWlCLEVBQUUsOERBQThEO2FBQ2xGLENBQUM7U0FDSCxDQUFDLENBQUM7UUFFSCxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdkQsOENBQThDO1FBQzlDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FDL0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUN2RCxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEtBQUssaUNBQWlDLENBQzdFLENBQ0YsQ0FBQztRQUNGLDJFQUEyRTtRQUMzRSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLDhCQUE4QixFQUFFLEdBQUcsRUFBRTtRQUN4QyxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7WUFDbkMsU0FBUyxFQUFFLFdBQVc7WUFDdEIsZUFBZSxFQUFFO2dCQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7Z0JBQ3RDLFlBQVk7YUFDYjtZQUNELGNBQWMsRUFBRSxJQUFJLGtEQUE4QixDQUFDO2dCQUNqRCxpQkFBaUIsRUFBRSw4REFBOEQ7YUFDbEYsQ0FBQztTQUNILENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxnQ0FBZ0MsRUFBRTtZQUMvRCxvQkFBb0IsRUFBRSxrQkFBSyxDQUFDLFVBQVUsQ0FBQztnQkFDckMsUUFBUSxFQUFFLGtCQUFLLENBQUMsUUFBUSxFQUFFO2FBQzNCLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxHQUFHLEVBQUU7UUFDM0MsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO1lBQ25DLFNBQVMsRUFBRSxXQUFXO1lBQ3RCLGVBQWUsRUFBRTtnQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO2dCQUN0QyxZQUFZO2FBQ2I7WUFDRCxjQUFjLEVBQUUsSUFBSSxrREFBOEIsQ0FBQztnQkFDakQsaUJBQWlCLEVBQUUsOERBQThEO2FBQ2xGLENBQUM7U0FDSCxDQUFDLENBQUM7UUFFSCxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxRQUFRLENBQUMscUJBQXFCLENBQUMsZ0NBQWdDLEVBQUU7WUFDL0Qsb0JBQW9CLEVBQUU7Z0JBQ3BCLFdBQVcsRUFBRSxRQUFRO2FBQ3RCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsaURBQWlELEVBQUUsR0FBRyxFQUFFO1FBQzNELE1BQU0sS0FBSyxHQUFHLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtZQUNqRCxTQUFTLEVBQUUsV0FBVztZQUN0QixlQUFlLEVBQUU7Z0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtnQkFDdEMsWUFBWTthQUNiO1lBQ0QsY0FBYyxFQUFFLElBQUksa0RBQThCLENBQUM7Z0JBQ2pELGlCQUFpQixFQUFFLDhEQUE4RDthQUNsRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO1FBRUgsNkRBQTZEO1FBQzdELE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUMsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsUUFBUSxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHdEQUF3RCxFQUFFLEdBQUcsRUFBRTtRQUNsRSxNQUFNLEtBQUssR0FBRyxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7WUFDakQsU0FBUyxFQUFFLFdBQVc7WUFDdEIsZUFBZSxFQUFFO2dCQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7Z0JBQ3RDLFlBQVk7YUFDYjtZQUNELGNBQWMsRUFBRSxJQUFJLGtEQUE4QixDQUFDO2dCQUNqRCxpQkFBaUIsRUFBRSw4REFBOEQ7YUFDbEYsQ0FBQztTQUNILENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMscUNBQXFDLEVBQUUsR0FBRyxFQUFFO1FBQy9DLElBQUksb0NBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtZQUNuQyxTQUFTLEVBQUUsV0FBVztZQUN0QixlQUFlLEVBQUU7Z0JBQ2YsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtnQkFDdEMsWUFBWTthQUNiO1lBQ0QsY0FBYyxFQUFFLElBQUksa0RBQThCLENBQUM7Z0JBQ2pELGlCQUFpQixFQUFFLDhEQUE4RDtnQkFDakYsbUJBQW1CLEVBQUU7b0JBQ25CLFlBQVksRUFBRSxzREFBc0Q7b0JBQ3BFLGVBQWUsRUFBRSxDQUFDLGFBQWEsQ0FBQztvQkFDaEMsY0FBYyxFQUFFLENBQUMsV0FBVyxDQUFDO2lCQUM5QjthQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7UUFFSCxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxRQUFRLENBQUMscUJBQXFCLENBQUMsZ0NBQWdDLEVBQUU7WUFDL0QsdUJBQXVCLEVBQUUsa0JBQUssQ0FBQyxVQUFVLENBQUM7Z0JBQ3hDLG1CQUFtQixFQUFFLGtCQUFLLENBQUMsVUFBVSxDQUFDO29CQUNwQyxZQUFZLEVBQUUsc0RBQXNEO2lCQUNyRSxDQUFDO2FBQ0gsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLG1DQUFtQyxFQUFFLEdBQUcsRUFBRTtRQUM3QyxNQUFNLEtBQUssR0FBRyxJQUFJLG9DQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7WUFDakQsU0FBUyxFQUFFLFdBQVc7WUFDdEIsZUFBZSxFQUFFO2dCQUNmLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7Z0JBQ3RDLFlBQVk7YUFDYjtZQUNELGNBQWMsRUFBRSxJQUFJLGtEQUE4QixDQUFDO2dCQUNqRCxpQkFBaUIsRUFBRSw4REFBOEQ7YUFDbEYsQ0FBQztTQUNILENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBBcHAsIFN0YWNrLCBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFRlbXBsYXRlLCBNYXRjaCB9IGZyb20gJ2F3cy1jZGstbGliL2Fzc2VydGlvbnMnO1xuaW1wb3J0IHsgRm91bmRhdGlvbk1vZGVsSWRlbnRpZmllciB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1iZWRyb2NrJztcbmltcG9ydCB7IENvZGUsIEZ1bmN0aW9uLCBSdW50aW1lIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBCdWNrZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgQXNzZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbmltcG9ydCB7IGNyZWF0ZVRlc3RBcHAgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvdGVzdC11dGlscyc7XG5pbXBvcnQge1xuICBJbnRlcmFjdGl2ZUFnZW50LFxuICBTdHJlYW1pbmdIdHRwQWRhcHRlcixcbiAgUzNTZXNzaW9uTWFuYWdlcixcbiAgU2xpZGluZ1dpbmRvd0NvbnZlcnNhdGlvbk1hbmFnZXIsXG4gIE51bGxDb252ZXJzYXRpb25NYW5hZ2VyLFxuICBDb2duaXRvQXV0aGVudGljYXRvcixcbiAgTm9BdXRoZW50aWNhdG9yLFxuICBMYW1iZGFIb3N0aW5nQWRhcHRlcixcbiAgQWdlbnRDb3JlUnVudGltZUhvc3RpbmdBZGFwdGVyLFxufSBmcm9tICcuLi9hZ2VudHMvaW50ZXJhY3RpdmUtYWdlbnQnO1xuaW1wb3J0IHsgQmVkcm9ja0tub3dsZWRnZUJhc2UgfSBmcm9tICcuLi9hZ2VudHMva25vd2xlZGdlLWJhc2UnO1xuXG5kZXNjcmliZSgnSW50ZXJhY3RpdmVBZ2VudCcsICgpID0+IHtcbiAgbGV0IGFwcDogQXBwO1xuICBsZXQgc3RhY2s6IFN0YWNrO1xuICBsZXQgc3lzdGVtUHJvbXB0OiBBc3NldDtcbiAgY29uc3QgdGVzdE1vZGVsID0gRm91bmRhdGlvbk1vZGVsSWRlbnRpZmllci5BTlRIUk9QSUNfQ0xBVURFXzNfU09OTkVUXzIwMjQwMjI5X1YxXzA7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgYXBwID0gY3JlYXRlVGVzdEFwcCgpO1xuICAgIHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ1Rlc3RTdGFjaycsIHtcbiAgICAgIGVudjogeyBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJywgcmVnaW9uOiAndXMtZWFzdC0xJyB9LFxuICAgIH0pO1xuICAgIHN5c3RlbVByb21wdCA9IG5ldyBBc3NldChzdGFjaywgJ1N5c3RlbVByb21wdCcsIHtcbiAgICAgIHBhdGg6IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9hZ2VudHMvcmVzb3VyY2VzL2RlZmF1bHQtc3RyYW5kcy1hZ2VudC9iYXRjaC5weScpLFxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRGVmYXVsdCBDb25maWd1cmF0aW9uJywgKCkgPT4ge1xuICAgIHRlc3QoJ2NyZWF0ZXMgd2l0aCBtaW5pbWFsIHByb3BzJywgKCkgPT4ge1xuICAgICAgY29uc3QgYWdlbnQgPSBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFnZW50KS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGFnZW50LmFnZW50RnVuY3Rpb24pLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoYWdlbnQuYXBpRW5kcG9pbnQpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdkZWZhdWx0IGFkYXB0ZXIgaXMgU3RyZWFtaW5nSHR0cEFkYXB0ZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBhZ2VudCA9IG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYWdlbnQuYWRhcHRlcikudG9CZUluc3RhbmNlT2YoU3RyZWFtaW5nSHR0cEFkYXB0ZXIpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZGVmYXVsdCBzZXNzaW9uIHN0b3JlIGlzIFMzU2Vzc2lvbk1hbmFnZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBhZ2VudCA9IG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYWdlbnQuc2Vzc2lvblN0b3JlKS50b0JlSW5zdGFuY2VPZihTM1Nlc3Npb25NYW5hZ2VyKTtcbiAgICAgIGV4cGVjdChhZ2VudC5zZXNzaW9uQnVja2V0KS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZGVmYXVsdCBjb250ZXh0IHN0cmF0ZWd5IGlzIFNsaWRpbmdXaW5kb3dDb252ZXJzYXRpb25NYW5hZ2VyJywgKCkgPT4ge1xuICAgICAgY29uc3QgYWdlbnQgPSBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFnZW50LmNvbnRleHRTdHJhdGVneSkudG9CZUluc3RhbmNlT2YoU2xpZGluZ1dpbmRvd0NvbnZlcnNhdGlvbk1hbmFnZXIpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZGVmYXVsdCBhdXRoZW50aWNhdG9yIGlzIENvZ25pdG9BdXRoZW50aWNhdG9yJywgKCkgPT4ge1xuICAgICAgY29uc3QgYWdlbnQgPSBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFnZW50LmF1dGhlbnRpY2F0b3IpLnRvQmVJbnN0YW5jZU9mKENvZ25pdG9BdXRoZW50aWNhdG9yKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0xhbWJkYSBGdW5jdGlvbiBDb25maWd1cmF0aW9uJywgKCkgPT4ge1xuICAgIHRlc3QoJ2NyZWF0ZXMgTGFtYmRhIGZ1bmN0aW9uIHdpdGggZGVmYXVsdCAxNS1taW51dGUgdGltZW91dCcsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsIHtcbiAgICAgICAgVGltZW91dDogOTAwLCAvLyAxNSBtaW51dGVzXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NyZWF0ZXMgTGFtYmRhIGZ1bmN0aW9uIHdpdGggZGVmYXVsdCAxMDI0IE1CIG1lbW9yeScsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsIHtcbiAgICAgICAgTWVtb3J5U2l6ZTogMTAyNCxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnTGFtYmRhIGZ1bmN0aW9uIGhhcyBMYW1iZGEgV2ViIEFkYXB0ZXIgbGF5ZXInLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLCB7XG4gICAgICAgIExheWVyczogTWF0Y2guYXJyYXlXaXRoKFtcbiAgICAgICAgICAnYXJuOmF3czpsYW1iZGE6dXMtZWFzdC0xOjc1MzI0MDU5ODA3NTpsYXllcjpMYW1iZGFBZGFwdGVyTGF5ZXJYODY6MjUnLFxuICAgICAgICBdKSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnTGFtYmRhIGZ1bmN0aW9uIGhhcyBBV1NfTEFNQkRBX0VYRUNfV1JBUFBFUiBlbnYgdmFyIGZvciBMV0EnLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLCB7XG4gICAgICAgIEVudmlyb25tZW50OiB7XG4gICAgICAgICAgVmFyaWFibGVzOiBNYXRjaC5vYmplY3RMaWtlKHtcbiAgICAgICAgICAgIEFXU19MQU1CREFfRVhFQ19XUkFQUEVSOiAnL29wdC9ib290c3RyYXAnLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdMYW1iZGEgZnVuY3Rpb24gaGFzIEFXU19MV0FfSU5WT0tFX01PREUgZW52IHZhcicsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsIHtcbiAgICAgICAgRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBWYXJpYWJsZXM6IE1hdGNoLm9iamVjdExpa2Uoe1xuICAgICAgICAgICAgQVdTX0xXQV9JTlZPS0VfTU9ERTogJ3Jlc3BvbnNlX3N0cmVhbScsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ0xhbWJkYSBmdW5jdGlvbiBoYXMgUE9SVCBlbnYgdmFyIHNldCB0byA4MDgwJywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywge1xuICAgICAgICBFbnZpcm9ubWVudDoge1xuICAgICAgICAgIFZhcmlhYmxlczogTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAgICAgICAgICBQT1JUOiAnODA4MCcsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ0xhbWJkYSBmdW5jdGlvbiBoYXMgTU9ERUxfSUQgZW52IHZhcicsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsIHtcbiAgICAgICAgRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBWYXJpYWJsZXM6IE1hdGNoLm9iamVjdExpa2Uoe1xuICAgICAgICAgICAgTU9ERUxfSUQ6IE1hdGNoLmFueVZhbHVlKCksXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ0xhbWJkYSBmdW5jdGlvbiBkb2VzIG5vdCBoYXZlIGRlcHJlY2F0ZWQgY29udGV4dCBzdHJhdGVneSBlbnYgdmFycycsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICBjb25zdCBmdW5jdGlvbnMgPSB0ZW1wbGF0ZS5maW5kUmVzb3VyY2VzKCdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nKTtcbiAgICAgIGNvbnN0IGZuID0gT2JqZWN0LnZhbHVlcyhmdW5jdGlvbnMpLmZpbmQoKGY6IGFueSkgPT5cbiAgICAgICAgZi5Qcm9wZXJ0aWVzPy5GdW5jdGlvbk5hbWU/LmluY2x1ZGVzKCdUZXN0QWdlbnQnKSxcbiAgICAgICkgYXMgYW55O1xuXG4gICAgICAvLyBDb250ZXh0IGVudiB2YXJzIHNob3VsZCBubyBsb25nZXIgYmUgc2V0IChoYW5kbGVkIGJ5IFN0cmFuZHMtbmF0aXZlIGhhbmRsZXIpXG4gICAgICBleHBlY3QoZm4uUHJvcGVydGllcy5FbnZpcm9ubWVudC5WYXJpYWJsZXMuQ09OVEVYVF9FTkFCTEVEKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgICBleHBlY3QoZm4uUHJvcGVydGllcy5FbnZpcm9ubWVudC5WYXJpYWJsZXMuQ09OVEVYVF9TVFJBVEVHWSkudG9CZVVuZGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGZuLlByb3BlcnRpZXMuRW52aXJvbm1lbnQuVmFyaWFibGVzLkNPTlRFWFRfV0lORE9XX1NJWkUpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ0xhbWJkYSBmdW5jdGlvbiBoYXMgc2Vzc2lvbiBidWNrZXQgZW52IHZhcicsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsIHtcbiAgICAgICAgRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBWYXJpYWJsZXM6IE1hdGNoLm9iamVjdExpa2Uoe1xuICAgICAgICAgICAgU0VTU0lPTl9CVUNLRVQ6IE1hdGNoLmFueVZhbHVlKCksXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2N1c3RvbSB0aW1lb3V0IGlzIGFwcGxpZWQnLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMTApLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywge1xuICAgICAgICBUaW1lb3V0OiA2MDAsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2N1c3RvbSBtZW1vcnlTaXplIGlzIGFwcGxpZWQnLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICAgIG1lbW9yeVNpemU6IDIwNDgsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLCB7XG4gICAgICAgIE1lbW9yeVNpemU6IDIwNDgsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1JFU1QgQVBJIENvbmZpZ3VyYXRpb24nLCAoKSA9PiB7XG4gICAgdGVzdCgnY3JlYXRlcyBSRVNUIEFQSSByZXNvdXJjZScsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6QXBpR2F0ZXdheTo6UmVzdEFwaScsIDEpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY3JlYXRlcyAvY2hhdCByZXNvdXJjZScsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6QXBpR2F0ZXdheTo6UmVzb3VyY2UnLCB7XG4gICAgICAgIFBhdGhQYXJ0OiAnY2hhdCcsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NyZWF0ZXMgUE9TVCBtZXRob2Qgb24gL2NoYXQnLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZCcsIHtcbiAgICAgICAgSHR0cE1ldGhvZDogJ1BPU1QnLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdQT1NUIG1ldGhvZCBoYXMgQ29nbml0byBhdXRob3JpemVyIGJ5IGRlZmF1bHQnLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgLy8gVmVyaWZ5IENvZ25pdG8gYXV0aG9yaXplciBleGlzdHNcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpBcGlHYXRld2F5OjpBdXRob3JpemVyJywge1xuICAgICAgICBUeXBlOiAnQ09HTklUT19VU0VSX1BPT0xTJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnUE9TVCBtZXRob2QgaGFzIG5vIGF1dGhvcml6ZXIgd2l0aCBOb0F1dGhlbnRpY2F0b3InLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICAgIGF1dGhlbnRpY2F0b3I6IG5ldyBOb0F1dGhlbnRpY2F0b3IoKSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICAvLyBTaG91bGQgaGF2ZSBQT1NUIG1ldGhvZCB3aXRoIE5PTkUgYXV0aFxuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZCcsIHtcbiAgICAgICAgSHR0cE1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBBdXRob3JpemF0aW9uVHlwZTogJ05PTkUnLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdSRVNUIEFQSSBoYXMgQ09SUyBjb25maWd1cmF0aW9uJywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIC8vIE9QVElPTlMgbWV0aG9kIGZvciBDT1JTIHByZWZsaWdodFxuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZCcsIHtcbiAgICAgICAgSHR0cE1ldGhvZDogJ09QVElPTlMnLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTZXNzaW9uIE1hbmFnZW1lbnQnLCAoKSA9PiB7XG4gICAgdGVzdCgnY3JlYXRlcyBTMyBzZXNzaW9uIGJ1Y2tldCB3aXRoIEtNUyBlbmNyeXB0aW9uIGJ5IGRlZmF1bHQnLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OlMzOjpCdWNrZXQnLCB7XG4gICAgICAgIEJ1Y2tldEVuY3J5cHRpb246IHtcbiAgICAgICAgICBTZXJ2ZXJTaWRlRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb246IE1hdGNoLmFycmF5V2l0aChbXG4gICAgICAgICAgICBNYXRjaC5vYmplY3RMaWtlKHtcbiAgICAgICAgICAgICAgU2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBTU0VBbGdvcml0aG06ICdhd3M6a21zJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0pLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdzZXNzaW9uIGJ1Y2tldCBoYXMgbGlmZWN5Y2xlIHJ1bGUnLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OlMzOjpCdWNrZXQnLCB7XG4gICAgICAgIExpZmVjeWNsZUNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBSdWxlczogTWF0Y2guYXJyYXlXaXRoKFtcbiAgICAgICAgICAgIE1hdGNoLm9iamVjdExpa2Uoe1xuICAgICAgICAgICAgICBTdGF0dXM6ICdFbmFibGVkJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0pLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjdXN0b20gc2Vzc2lvbiBidWNrZXQgaXMgdXNlZCB3aGVuIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgY3VzdG9tQnVja2V0ID0gbmV3IEJ1Y2tldChzdGFjaywgJ0N1c3RvbUJ1Y2tldCcpO1xuXG4gICAgICBjb25zdCBhZ2VudCA9IG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgICAgc2Vzc2lvbkJ1Y2tldDogY3VzdG9tQnVja2V0LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhZ2VudC5zZXNzaW9uQnVja2V0KS50b0JlKGN1c3RvbUJ1Y2tldCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdzdGF0ZWxlc3MgbW9kZSBjcmVhdGVzIG5vIHNlc3Npb24gYnVja2V0IHdoZW4gc2Vzc2lvblN0b3JlIGlzIGV4cGxpY2l0bHkgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgLy8gV2hlbiBzZXNzaW9uU3RvcmUgaXMgbm90IHByb3ZpZGVkIGF0IGFsbCwgZGVmYXVsdCBTM1Nlc3Npb25NYW5hZ2VyIGlzIGNyZWF0ZWQuXG4gICAgICAvLyBUbyBnbyB0cnVseSBzdGF0ZWxlc3MsIHVzZXIgbXVzdCBwYXNzIGEgY3VzdG9tIElTZXNzaW9uU3RvcmUgd2l0aCBubyBidWNrZXQuXG4gICAgICBjb25zdCBhZ2VudCA9IG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBEZWZhdWx0IGNyZWF0ZXMgYSBzZXNzaW9uIHN0b3JlXG4gICAgICBleHBlY3QoYWdlbnQuc2Vzc2lvblN0b3JlKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQ29nbml0byBBdXRoZW50aWNhdGlvbicsICgpID0+IHtcbiAgICB0ZXN0KCdjcmVhdGVzIENvZ25pdG8gVXNlciBQb29sIGJ5IGRlZmF1bHQnLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkNvZ25pdG86OlVzZXJQb29sJywgMSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjcmVhdGVzIENvZ25pdG8gVXNlciBQb29sIENsaWVudCBieSBkZWZhdWx0JywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcygnQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudCcsIDEpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnbm8gQ29nbml0byByZXNvdXJjZXMgd2l0aCBOb0F1dGhlbnRpY2F0b3InLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICAgIGF1dGhlbnRpY2F0b3I6IG5ldyBOb0F1dGhlbnRpY2F0b3IoKSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6Q29nbml0bzo6VXNlclBvb2wnLCAwKTtcbiAgICAgIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcygnQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudCcsIDApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUHJvcHMgVmFsaWRhdGlvbicsICgpID0+IHtcbiAgICB0ZXN0KCd0aHJvd3MgZXJyb3IgZm9yIGVtcHR5IGFnZW50TmFtZScsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgICAgYWdlbnROYW1lOiAnJyxcbiAgICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdygnYWdlbnROYW1lIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgndGhyb3dzIGVycm9yIGZvciB3aGl0ZXNwYWNlLW9ubHkgYWdlbnROYW1lJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgICBhZ2VudE5hbWU6ICcgICAnLFxuICAgICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KS50b1Rocm93KCdhZ2VudE5hbWUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd0aHJvd3MgZXJyb3IgZm9yIG1lbW9yeVNpemUgdG9vIGxvdycsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVtb3J5U2l6ZTogNjQsXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdygnbWVtb3J5U2l6ZSBtdXN0IGJlIGJldHdlZW4gMTI4IGFuZCAxMDI0MCBNQicpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgndGhyb3dzIGVycm9yIGZvciBtZW1vcnlTaXplIHRvbyBoaWdoJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZW1vcnlTaXplOiAyMDQ4MCxcbiAgICAgICAgfSk7XG4gICAgICB9KS50b1Rocm93KCdtZW1vcnlTaXplIG11c3QgYmUgYmV0d2VlbiAxMjggYW5kIDEwMjQwIE1CJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd0aHJvd3MgZXJyb3IgZm9yIHRpbWVvdXQgdG9vIHNob3J0JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDApLFxuICAgICAgICB9KTtcbiAgICAgIH0pLnRvVGhyb3coJ3RpbWVvdXQgbXVzdCBiZSBiZXR3ZWVuIDEgc2Vjb25kIGFuZCAxNSBtaW51dGVzJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd0aHJvd3MgZXJyb3IgZm9yIHRpbWVvdXQgdG9vIGxvbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMjApLFxuICAgICAgICB9KTtcbiAgICAgIH0pLnRvVGhyb3coJ3RpbWVvdXQgbXVzdCBiZSBiZXR3ZWVuIDEgc2Vjb25kIGFuZCAxNSBtaW51dGVzJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd0aHJvd3MgZXJyb3IgZm9yIG1lc3NhZ2VIaXN0b3J5TGltaXQgdG9vIGxvdycsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZUhpc3RvcnlMaW1pdDogMCxcbiAgICAgICAgfSk7XG4gICAgICB9KS50b1Rocm93KCdtZXNzYWdlSGlzdG9yeUxpbWl0IG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMDAwJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd0aHJvd3MgZXJyb3IgZm9yIG1lc3NhZ2VIaXN0b3J5TGltaXQgdG9vIGhpZ2gnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2VIaXN0b3J5TGltaXQ6IDIwMDAsXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdygnbWVzc2FnZUhpc3RvcnlMaW1pdCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMTAwMCcpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnYWNjZXB0cyB2YWxpZCBib3VuZGFyeSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50MScsIHtcbiAgICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQxJyxcbiAgICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVtb3J5U2l6ZTogMTI4LFxuICAgICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMSksXG4gICAgICAgICAgbWVzc2FnZUhpc3RvcnlMaW1pdDogMSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudDInLCB7XG4gICAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50MicsXG4gICAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lbW9yeVNpemU6IDEwMjQwLFxuICAgICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgICAgICAgIG1lc3NhZ2VIaXN0b3J5TGltaXQ6IDEwMDAsXG4gICAgICAgIH0pO1xuICAgICAgfSkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0NESyBTeW50aCcsICgpID0+IHtcbiAgICB0ZXN0KCdzeW50aGVzaXplcyB3aXRob3V0IGVycm9ycycsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBhcHAuc3ludGgoKTtcbiAgICAgIH0pLm5vdC50b1Rocm93KCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjcmVhdGVzIEtNUyBrZXkgd2l0aCByb3RhdGlvbiBlbmFibGVkJywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIGNvbnN0IGtleXMgPSB0ZW1wbGF0ZS5maW5kUmVzb3VyY2VzKCdBV1M6OktNUzo6S2V5Jyk7XG4gICAgICBjb25zdCBoYXNSb3RhdGlvbiA9IE9iamVjdC52YWx1ZXMoa2V5cykuc29tZShcbiAgICAgICAgKGtleTogYW55KSA9PiBrZXkuUHJvcGVydGllcy5FbmFibGVLZXlSb3RhdGlvbiA9PT0gdHJ1ZSxcbiAgICAgICk7XG4gICAgICBleHBlY3QoaGFzUm90YXRpb24pLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjcmVhdGVzIElBTSByb2xlIHdpdGggTGFtYmRhIHNlcnZpY2UgcHJpbmNpcGFsJywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIGNvbnN0IHJvbGVzID0gdGVtcGxhdGUuZmluZFJlc291cmNlcygnQVdTOjpJQU06OlJvbGUnKTtcbiAgICAgIGNvbnN0IGFnZW50Um9sZSA9IE9iamVjdC52YWx1ZXMocm9sZXMpLmZpbmQoKHJvbGU6IGFueSkgPT5cbiAgICAgICAgcm9sZS5Qcm9wZXJ0aWVzLkFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuc29tZShcbiAgICAgICAgICAoc3RtdDogYW55KSA9PiBzdG10LlByaW5jaXBhbD8uU2VydmljZSA9PT0gJ2xhbWJkYS5hbWF6b25hd3MuY29tJyxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICBleHBlY3QoYWdlbnRSb2xlKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5cbmRlc2NyaWJlKCdTdHJlYW1pbmdIdHRwQWRhcHRlcicsICgpID0+IHtcbiAgbGV0IGFwcDogQXBwO1xuICBsZXQgc3RhY2s6IFN0YWNrO1xuICBsZXQgbW9ja0xhbWJkYTogRnVuY3Rpb247XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgYXBwID0gY3JlYXRlVGVzdEFwcCgpO1xuICAgIHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ1Rlc3RTdGFjaycsIHtcbiAgICAgIGVudjogeyBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJywgcmVnaW9uOiAndXMtZWFzdC0xJyB9LFxuICAgIH0pO1xuICAgIG1vY2tMYW1iZGEgPSBuZXcgRnVuY3Rpb24oc3RhY2ssICdNb2NrTGFtYmRhJywge1xuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIGNvZGU6IENvZGUuZnJvbUlubGluZSgnZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKCkgPT4gKHsgc3RhdHVzQ29kZTogMjAwIH0pOycpLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdpbXBsZW1lbnRzIElDb21tdW5pY2F0aW9uQWRhcHRlciBpbnRlcmZhY2UnLCAoKSA9PiB7XG4gICAgY29uc3QgYWRhcHRlciA9IG5ldyBTdHJlYW1pbmdIdHRwQWRhcHRlcigpO1xuICAgIGV4cGVjdCh0eXBlb2YgYWRhcHRlci5hdHRhY2hUb0Z1bmN0aW9uKS50b0JlKCdmdW5jdGlvbicpO1xuICAgIGV4cGVjdCh0eXBlb2YgYWRhcHRlci5ncmFudEludm9rZSkudG9CZSgnZnVuY3Rpb24nKTtcbiAgfSk7XG5cbiAgdGVzdCgnY3JlYXRlcyB3aXRoIGRlZmF1bHQgcHJvcHMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IG5ldyBTdHJlYW1pbmdIdHRwQWRhcHRlcigpKS5ub3QudG9UaHJvdygpO1xuICB9KTtcblxuICB0ZXN0KCdjcmVhdGVzIHdpdGggY3VzdG9tIHN0YWdlTmFtZScsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gbmV3IFN0cmVhbWluZ0h0dHBBZGFwdGVyKHsgc3RhZ2VOYW1lOiAnZGV2JyB9KSkubm90LnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgdGVzdCgnY3JlYXRlcyB3aXRoIHRocm90dGxlIHNldHRpbmdzJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBuZXcgU3RyZWFtaW5nSHR0cEFkYXB0ZXIoe1xuICAgICAgdGhyb3R0bGU6IHsgcmF0ZUxpbWl0OiAxMDAsIGJ1cnN0TGltaXQ6IDIwMCB9LFxuICAgIH0pKS5ub3QudG9UaHJvdygpO1xuICB9KTtcblxuICB0ZXN0KCd0aHJvd3Mgd2hlbiBhdHRhY2hUb0Z1bmN0aW9uIGNhbGxlZCB3aXRob3V0IHNjb3BlJywgKCkgPT4ge1xuICAgIGNvbnN0IGFkYXB0ZXIgPSBuZXcgU3RyZWFtaW5nSHR0cEFkYXB0ZXIoKTtcbiAgICBleHBlY3QoKCkgPT4gYWRhcHRlci5hdHRhY2hUb0Z1bmN0aW9uKG1vY2tMYW1iZGEpKS50b1Rocm93KFxuICAgICAgJ1N0cmVhbWluZ0h0dHBBZGFwdGVyIG11c3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCBhIHNjb3BlIGJlZm9yZSBjYWxsaW5nIGF0dGFjaFRvRnVuY3Rpb24nLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoJ2F0dGFjaFRvRnVuY3Rpb24gcmV0dXJucyBlbmRwb2ludCBVUkwnLCAoKSA9PiB7XG4gICAgY29uc3QgYWRhcHRlciA9IG5ldyBTdHJlYW1pbmdIdHRwQWRhcHRlcigpO1xuICAgIGFkYXB0ZXIuX3NldFNjb3BlKHN0YWNrKTtcbiAgICBjb25zdCB1cmwgPSBhZGFwdGVyLmF0dGFjaFRvRnVuY3Rpb24obW9ja0xhbWJkYSk7XG4gICAgZXhwZWN0KHVybCkudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3QodHlwZW9mIHVybCkudG9CZSgnc3RyaW5nJyk7XG4gIH0pO1xuXG4gIHRlc3QoJ2dyYW50SW52b2tlIGRvZXMgbm90IHRocm93JywgKCkgPT4ge1xuICAgIGNvbnN0IGFkYXB0ZXIgPSBuZXcgU3RyZWFtaW5nSHR0cEFkYXB0ZXIoKTtcbiAgICBhZGFwdGVyLl9zZXRTY29wZShzdGFjayk7XG4gICAgYWRhcHRlci5hdHRhY2hUb0Z1bmN0aW9uKG1vY2tMYW1iZGEpO1xuICAgIGV4cGVjdCgoKSA9PiBhZGFwdGVyLmdyYW50SW52b2tlKG1vY2tMYW1iZGEpKS5ub3QudG9UaHJvdygpO1xuICB9KTtcbn0pO1xuXG5cbmRlc2NyaWJlKCdTM1Nlc3Npb25NYW5hZ2VyJywgKCkgPT4ge1xuICB0ZXN0KCdpbXBsZW1lbnRzIElTZXNzaW9uU3RvcmUnLCAoKSA9PiB7XG4gICAgY29uc3QgYXBwID0gY3JlYXRlVGVzdEFwcCgpO1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ1Rlc3RTdGFjaycpO1xuICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgUzNTZXNzaW9uTWFuYWdlcihzdGFjaywgJ1NNJyk7XG4gICAgZXhwZWN0KHR5cGVvZiBtYW5hZ2VyLmdyYW50UmVhZFdyaXRlKS50b0JlKCdmdW5jdGlvbicpO1xuICAgIGV4cGVjdChtYW5hZ2VyLnNlc3Npb25CdWNrZXQpLnRvQmVEZWZpbmVkKCk7XG4gIH0pO1xuXG4gIHRlc3QoJ2NyZWF0ZXMgYnVja2V0IHdpdGggS01TIGVuY3J5cHRpb24nLCAoKSA9PiB7XG4gICAgY29uc3QgYXBwID0gY3JlYXRlVGVzdEFwcCgpO1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ1Rlc3RTdGFjaycpO1xuICAgIG5ldyBTM1Nlc3Npb25NYW5hZ2VyKHN0YWNrLCAnU00nKTtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OlMzOjpCdWNrZXQnLCB7XG4gICAgICBCdWNrZXRFbmNyeXB0aW9uOiB7XG4gICAgICAgIFNlcnZlclNpZGVFbmNyeXB0aW9uQ29uZmlndXJhdGlvbjogTWF0Y2guYXJyYXlXaXRoKFtcbiAgICAgICAgICBNYXRjaC5vYmplY3RMaWtlKHtcbiAgICAgICAgICAgIFNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0OiB7XG4gICAgICAgICAgICAgIFNTRUFsZ29yaXRobTogJ2F3czprbXMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCd1c2VzIGN1c3RvbSBidWNrZXQgd2hlbiBwcm92aWRlZCcsICgpID0+IHtcbiAgICBjb25zdCBhcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJyk7XG4gICAgY29uc3QgYnVja2V0ID0gbmV3IEJ1Y2tldChzdGFjaywgJ0N1c3RvbUJ1Y2tldCcpO1xuICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgUzNTZXNzaW9uTWFuYWdlcihzdGFjaywgJ1NNJywgeyBidWNrZXQgfSk7XG4gICAgZXhwZWN0KG1hbmFnZXIuYnVja2V0KS50b0JlKGJ1Y2tldCk7XG4gIH0pO1xuXG4gIHRlc3QoJ2RlZmF1bHQgVFRMIGlzIDI0IGhvdXJzJywgKCkgPT4ge1xuICAgIGNvbnN0IGFwcCA9IGNyZWF0ZVRlc3RBcHAoKTtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsICdUZXN0U3RhY2snKTtcbiAgICBjb25zdCBtYW5hZ2VyID0gbmV3IFMzU2Vzc2lvbk1hbmFnZXIoc3RhY2ssICdTTScpO1xuICAgIGV4cGVjdChtYW5hZ2VyLnNlc3Npb25UVEwudG9Ib3VycygpKS50b0JlKDI0KTtcbiAgfSk7XG5cbiAgdGVzdCgnY3VzdG9tIFRUTCBpcyBhcHBsaWVkJywgKCkgPT4ge1xuICAgIGNvbnN0IGFwcCA9IGNyZWF0ZVRlc3RBcHAoKTtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsICdUZXN0U3RhY2snKTtcbiAgICBjb25zdCBtYW5hZ2VyID0gbmV3IFMzU2Vzc2lvbk1hbmFnZXIoc3RhY2ssICdTTScsIHtcbiAgICAgIHNlc3Npb25UVEw6IER1cmF0aW9uLmhvdXJzKDQ4KSxcbiAgICB9KTtcbiAgICBleHBlY3QobWFuYWdlci5zZXNzaW9uVFRMLnRvSG91cnMoKSkudG9CZSg0OCk7XG4gIH0pO1xufSk7XG5cblxuZGVzY3JpYmUoJ1NsaWRpbmdXaW5kb3dDb252ZXJzYXRpb25NYW5hZ2VyJywgKCkgPT4ge1xuICB0ZXN0KCdkZWZhdWx0IHdpbmRvdyBzaXplIGlzIDIwJywgKCkgPT4ge1xuICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgU2xpZGluZ1dpbmRvd0NvbnZlcnNhdGlvbk1hbmFnZXIoKTtcbiAgICBleHBlY3QobWFuYWdlci53aW5kb3dTaXplKS50b0JlKDIwKTtcbiAgfSk7XG5cbiAgdGVzdCgnY3VzdG9tIHdpbmRvdyBzaXplIGlzIGFwcGxpZWQnLCAoKSA9PiB7XG4gICAgY29uc3QgbWFuYWdlciA9IG5ldyBTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlcih7IHdpbmRvd1NpemU6IDUwIH0pO1xuICAgIGV4cGVjdChtYW5hZ2VyLndpbmRvd1NpemUpLnRvQmUoNTApO1xuICB9KTtcblxuICB0ZXN0KCd0aHJvd3MgZm9yIHdpbmRvdyBzaXplIGJlbG93IDEnLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IG5ldyBTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlcih7IHdpbmRvd1NpemU6IDAgfSkpLnRvVGhyb3coXG4gICAgICAnd2luZG93U2l6ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMTAwMCcsXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdCgndGhyb3dzIGZvciB3aW5kb3cgc2l6ZSBhYm92ZSAxMDAwJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBuZXcgU2xpZGluZ1dpbmRvd0NvbnZlcnNhdGlvbk1hbmFnZXIoeyB3aW5kb3dTaXplOiAxMDAxIH0pKS50b1Rocm93KFxuICAgICAgJ3dpbmRvd1NpemUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEwMDAnLFxuICAgICk7XG4gIH0pO1xuXG4gIHRlc3QoJ3JldHVybnMgY29ycmVjdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMnLCAoKSA9PiB7XG4gICAgY29uc3QgbWFuYWdlciA9IG5ldyBTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlcih7IHdpbmRvd1NpemU6IDMwIH0pO1xuICAgIGNvbnN0IGVudiA9IG1hbmFnZXIuZW52aXJvbm1lbnRWYXJpYWJsZXMoKTtcbiAgICBleHBlY3QoZW52KS50b0VxdWFsKHtcbiAgICAgIENPTlRFWFRfRU5BQkxFRDogJ3RydWUnLFxuICAgICAgQ09OVEVYVF9TVFJBVEVHWTogJ1NsaWRpbmdXaW5kb3cnLFxuICAgICAgQ09OVEVYVF9XSU5ET1dfU0laRTogJzMwJyxcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuXG5kZXNjcmliZSgnTnVsbENvbnZlcnNhdGlvbk1hbmFnZXInLCAoKSA9PiB7XG4gIHRlc3QoJ3JldHVybnMgY29ycmVjdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMnLCAoKSA9PiB7XG4gICAgY29uc3QgbWFuYWdlciA9IG5ldyBOdWxsQ29udmVyc2F0aW9uTWFuYWdlcigpO1xuICAgIGNvbnN0IGVudiA9IG1hbmFnZXIuZW52aXJvbm1lbnRWYXJpYWJsZXMoKTtcbiAgICBleHBlY3QoZW52KS50b0VxdWFsKHtcbiAgICAgIENPTlRFWFRfRU5BQkxFRDogJ2ZhbHNlJyxcbiAgICAgIENPTlRFWFRfU1RSQVRFR1k6ICdOdWxsJyxcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuXG5kZXNjcmliZSgnQ29nbml0b0F1dGhlbnRpY2F0b3InLCAoKSA9PiB7XG4gIGxldCBhcHA6IEFwcDtcbiAgbGV0IHN0YWNrOiBTdGFjaztcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBhcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG4gICAgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJywge1xuICAgICAgZW52OiB7IGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICd1cy1lYXN0LTEnIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2NyZWF0ZXMgd2l0aCBkZWZhdWx0IHByb3BzJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiBuZXcgQ29nbml0b0F1dGhlbnRpY2F0b3IoKSkubm90LnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgdGVzdCgnc2V0U2NvcGUgY3JlYXRlcyBVc2VyIFBvb2wgYW5kIENsaWVudCcsICgpID0+IHtcbiAgICBjb25zdCBhdXRoID0gbmV3IENvZ25pdG9BdXRoZW50aWNhdG9yKCk7XG4gICAgYXV0aC5fc2V0U2NvcGUoc3RhY2spO1xuICAgIGV4cGVjdChhdXRoLnVzZXJQb29sKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChhdXRoLnVzZXJQb29sQ2xpZW50KS50b0JlRGVmaW5lZCgpO1xuICB9KTtcblxuICB0ZXN0KCd0aHJvd3Mgd2hlbiBncmFudEF1dGhlbnRpY2F0ZSBjYWxsZWQgd2l0aG91dCBzY29wZScsICgpID0+IHtcbiAgICBjb25zdCBhdXRoID0gbmV3IENvZ25pdG9BdXRoZW50aWNhdG9yKCk7XG4gICAgY29uc3QgbW9ja0xhbWJkYSA9IG5ldyBGdW5jdGlvbihzdGFjaywgJ01vY2tMYW1iZGEnLCB7XG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogQ29kZS5mcm9tSW5saW5lKCdleHBvcnRzLmhhbmRsZXIgPSBhc3luYyAoKSA9PiAoe30pOycpLFxuICAgIH0pO1xuICAgIGV4cGVjdCgoKSA9PiBhdXRoLmdyYW50QXV0aGVudGljYXRlKG1vY2tMYW1iZGEpKS50b1Rocm93KCk7XG4gIH0pO1xuXG4gIHRlc3QoJ3JldHVybnMgY29ycmVjdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMnLCAoKSA9PiB7XG4gICAgY29uc3QgYXV0aCA9IG5ldyBDb2duaXRvQXV0aGVudGljYXRvcigpO1xuICAgIGNvbnN0IGVudiA9IGF1dGguZW52aXJvbm1lbnRWYXJpYWJsZXMoKTtcbiAgICBleHBlY3QoZW52LkFVVEhfVFlQRSkudG9CZSgnQ29nbml0bycpO1xuICB9KTtcbn0pO1xuXG5cbmRlc2NyaWJlKCdOb0F1dGhlbnRpY2F0b3InLCAoKSA9PiB7XG4gIHRlc3QoJ2dyYW50QXV0aGVudGljYXRlIGlzIG5vLW9wJywgKCkgPT4ge1xuICAgIGNvbnN0IGF1dGggPSBuZXcgTm9BdXRoZW50aWNhdG9yKCk7XG4gICAgY29uc3QgYXBwID0gY3JlYXRlVGVzdEFwcCgpO1xuICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ1Rlc3RTdGFjaycpO1xuICAgIGNvbnN0IG1vY2tMYW1iZGEgPSBuZXcgRnVuY3Rpb24oc3RhY2ssICdNb2NrTGFtYmRhJywge1xuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIGNvZGU6IENvZGUuZnJvbUlubGluZSgnZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKCkgPT4gKHt9KTsnKSxcbiAgICB9KTtcbiAgICBleHBlY3QoKCkgPT4gYXV0aC5ncmFudEF1dGhlbnRpY2F0ZShtb2NrTGFtYmRhKSkubm90LnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgdGVzdCgncmV0dXJucyBjb3JyZWN0IGVudmlyb25tZW50IHZhcmlhYmxlcycsICgpID0+IHtcbiAgICBjb25zdCBhdXRoID0gbmV3IE5vQXV0aGVudGljYXRvcigpO1xuICAgIGNvbnN0IGVudiA9IGF1dGguZW52aXJvbm1lbnRWYXJpYWJsZXMoKTtcbiAgICBleHBlY3QoZW52KS50b0VxdWFsKHsgQVVUSF9UWVBFOiAnTm9uZScgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdJbnRlcmFjdGl2ZUFnZW50IEtub3dsZWRnZSBCYXNlIEludGVncmF0aW9uJywgKCkgPT4ge1xuICBsZXQgYXBwOiBBcHA7XG4gIGxldCBzdGFjazogU3RhY2s7XG4gIGxldCBzeXN0ZW1Qcm9tcHQ6IEFzc2V0O1xuICBjb25zdCB0ZXN0TW9kZWwgPSBGb3VuZGF0aW9uTW9kZWxJZGVudGlmaWVyLkFOVEhST1BJQ19DTEFVREVfM19TT05ORVRfMjAyNDAyMjlfVjFfMDtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBhcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG4gICAgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJywge1xuICAgICAgZW52OiB7IGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICd1cy1lYXN0LTEnIH0sXG4gICAgfSk7XG4gICAgc3lzdGVtUHJvbXB0ID0gbmV3IEFzc2V0KHN0YWNrLCAnU3lzdGVtUHJvbXB0Jywge1xuICAgICAgcGF0aDogcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2FnZW50cy9yZXNvdXJjZXMvZGVmYXVsdC1zdHJhbmRzLWFnZW50L2JhdGNoLnB5JyksXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3NldHMgS05PV0xFREdFX0JBU0VTX0NPTkZJRyB3aGVuIEtCcyBjb25maWd1cmVkJywgKCkgPT4ge1xuICAgIGNvbnN0IGtiID0gbmV3IEJlZHJvY2tLbm93bGVkZ2VCYXNlKHN0YWNrLCAnVGVzdEtCJywge1xuICAgICAgbmFtZTogJ3Rlc3Qta2InLFxuICAgICAgZGVzY3JpcHRpb246ICdUZXN0IGtub3dsZWRnZSBiYXNlJyxcbiAgICAgIGtub3dsZWRnZUJhc2VJZDogJ0tCMTIzNDU2JyxcbiAgICB9KTtcblxuICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIGtub3dsZWRnZUJhc2VzOiBba2JdLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsIHtcbiAgICAgIEVudmlyb25tZW50OiB7XG4gICAgICAgIFZhcmlhYmxlczogTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAgICAgICAgS05PV0xFREdFX0JBU0VTX0NPTkZJRzogTWF0Y2guYW55VmFsdWUoKSxcbiAgICAgICAgICBLTk9XTEVER0VfQkFTRV9TWVNURU1fUFJPTVBUX0FERElUSU9OOiBNYXRjaC5hbnlWYWx1ZSgpLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2RvZXMgbm90IHNldCBLQiBlbnYgdmFycyB3aGVuIG5vIEtCcyBjb25maWd1cmVkJywgKCkgPT4ge1xuICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgIGNvbnN0IGZ1bmN0aW9ucyA9IHRlbXBsYXRlLmZpbmRSZXNvdXJjZXMoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicpO1xuICAgIGNvbnN0IGZuID0gT2JqZWN0LnZhbHVlcyhmdW5jdGlvbnMpLmZpbmQoKGY6IGFueSkgPT5cbiAgICAgIGYuUHJvcGVydGllcz8uRnVuY3Rpb25OYW1lPy5pbmNsdWRlcygnVGVzdEFnZW50JyksXG4gICAgKSBhcyBhbnk7XG5cbiAgICBleHBlY3QoZm4uUHJvcGVydGllcy5FbnZpcm9ubWVudC5WYXJpYWJsZXMuS05PV0xFREdFX0JBU0VTX0NPTkZJRykudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChmbi5Qcm9wZXJ0aWVzLkVudmlyb25tZW50LlZhcmlhYmxlcy5LTk9XTEVER0VfQkFTRV9TWVNURU1fUFJPTVBUX0FERElUSU9OKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xufSk7XG5cblxuZGVzY3JpYmUoJ0xhbWJkYUhvc3RpbmdBZGFwdGVyJywgKCkgPT4ge1xuICBsZXQgYXBwOiBBcHA7XG4gIGxldCBzdGFjazogU3RhY2s7XG4gIGxldCBzeXN0ZW1Qcm9tcHQ6IEFzc2V0O1xuICBjb25zdCB0ZXN0TW9kZWwgPSBGb3VuZGF0aW9uTW9kZWxJZGVudGlmaWVyLkFOVEhST1BJQ19DTEFVREVfM19TT05ORVRfMjAyNDAyMjlfVjFfMDtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBhcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG4gICAgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJywge1xuICAgICAgZW52OiB7IGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICd1cy1lYXN0LTEnIH0sXG4gICAgfSk7XG4gICAgc3lzdGVtUHJvbXB0ID0gbmV3IEFzc2V0KHN0YWNrLCAnU3lzdGVtUHJvbXB0Jywge1xuICAgICAgcGF0aDogcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2FnZW50cy9yZXNvdXJjZXMvZGVmYXVsdC1zdHJhbmRzLWFnZW50L2JhdGNoLnB5JyksXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2lzIHVzZWQgYnkgZGVmYXVsdCB3aGVuIG5vIGhvc3RpbmdBZGFwdGVyIHNwZWNpZmllZCcsICgpID0+IHtcbiAgICBjb25zdCBhZ2VudCA9IG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gU2hvdWxkIGhhdmUgYSBMYW1iZGEgZnVuY3Rpb24gYW5kIEFQSSBlbmRwb2ludFxuICAgIGV4cGVjdChhZ2VudC5hZ2VudEZ1bmN0aW9uKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChhZ2VudC5hcGlFbmRwb2ludCkudG9CZURlZmluZWQoKTtcblxuICAgIC8vIFNob3VsZCBoYXZlIGNyZWF0ZWQgQVBJIEdhdGV3YXkgYW5kIENvZ25pdG8gcmVzb3VyY2VzXG4gICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywge1xuICAgICAgRnVuY3Rpb25OYW1lOiBNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKCdUZXN0QWdlbnQnKSxcbiAgICB9KTtcbiAgICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6QXBpR2F0ZXdheTo6UmVzdEFwaScsIDEpO1xuICAgIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcygnQVdTOjpDb2duaXRvOjpVc2VyUG9vbCcsIDEpO1xuICB9KTtcblxuICB0ZXN0KCdleHBsaWNpdCBMYW1iZGFIb3N0aW5nQWRhcHRlciB3aXRoIGN1c3RvbSBhdXRoZW50aWNhdG9yJywgKCkgPT4ge1xuICAgIGNvbnN0IGFnZW50ID0gbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgIH0sXG4gICAgICBob3N0aW5nQWRhcHRlcjogbmV3IExhbWJkYUhvc3RpbmdBZGFwdGVyKHtcbiAgICAgICAgYXV0aGVudGljYXRvcjogbmV3IE5vQXV0aGVudGljYXRvcigpLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICBleHBlY3QoYWdlbnQuYWdlbnRGdW5jdGlvbikudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3QoYWdlbnQuYXBpRW5kcG9pbnQpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLCB7XG4gICAgICBGdW5jdGlvbk5hbWU6IE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoJ1Rlc3RBZ2VudCcpLFxuICAgIH0pO1xuICAgIC8vIE5vIENvZ25pdG8gd2l0aCBOb0F1dGhlbnRpY2F0b3JcbiAgICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6Q29nbml0bzo6VXNlclBvb2wnLCAwKTtcbiAgfSk7XG5cbiAgdGVzdCgnaG9zdGluZ0FkYXB0ZXIgcHJvcCBvdmVycmlkZXMgdG9wLWxldmVsIGF1dGhlbnRpY2F0b3IvY29tbXVuaWNhdGlvbkFkYXB0ZXInLCAoKSA9PiB7XG4gICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgIH0sXG4gICAgICAvLyBUaGVzZSBzaG91bGQgYmUgaWdub3JlZCB3aGVuIGhvc3RpbmdBZGFwdGVyIGlzIHByb3ZpZGVkXG4gICAgICBhdXRoZW50aWNhdG9yOiBuZXcgQ29nbml0b0F1dGhlbnRpY2F0b3IoKSxcbiAgICAgIGhvc3RpbmdBZGFwdGVyOiBuZXcgTGFtYmRhSG9zdGluZ0FkYXB0ZXIoe1xuICAgICAgICBhdXRoZW50aWNhdG9yOiBuZXcgTm9BdXRoZW50aWNhdG9yKCksXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIC8vIEFkYXB0ZXItbGV2ZWwgYXV0aGVudGljYXRvciBzaG91bGQgd2luIOKAlCBubyBDb2duaXRvIHBvb2xcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkNvZ25pdG86OlVzZXJQb29sJywgMCk7XG4gIH0pO1xufSk7XG5cblxuZGVzY3JpYmUoJ0FnZW50Q29yZVJ1bnRpbWVIb3N0aW5nQWRhcHRlcicsICgpID0+IHtcbiAgbGV0IGFwcDogQXBwO1xuICBsZXQgc3RhY2s6IFN0YWNrO1xuICBsZXQgc3lzdGVtUHJvbXB0OiBBc3NldDtcbiAgY29uc3QgdGVzdE1vZGVsID0gRm91bmRhdGlvbk1vZGVsSWRlbnRpZmllci5BTlRIUk9QSUNfQ0xBVURFXzNfU09OTkVUXzIwMjQwMjI5X1YxXzA7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgYXBwID0gY3JlYXRlVGVzdEFwcCgpO1xuICAgIHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ1Rlc3RTdGFjaycsIHtcbiAgICAgIGVudjogeyBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJywgcmVnaW9uOiAndXMtZWFzdC0xJyB9LFxuICAgIH0pO1xuICAgIHN5c3RlbVByb21wdCA9IG5ldyBBc3NldChzdGFjaywgJ1N5c3RlbVByb21wdCcsIHtcbiAgICAgIHBhdGg6IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9hZ2VudHMvcmVzb3VyY2VzL2RlZmF1bHQtc3RyYW5kcy1hZ2VudC9iYXRjaC5weScpLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdjcmVhdGVzIENmblJ1bnRpbWUgd2l0aCBjb250YWluZXIgVVJJJywgKCkgPT4ge1xuICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICB9LFxuICAgICAgaG9zdGluZ0FkYXB0ZXI6IG5ldyBBZ2VudENvcmVSdW50aW1lSG9zdGluZ0FkYXB0ZXIoe1xuICAgICAgICBjb250YWluZXJJbWFnZVVyaTogJzEyMzQ1Njc4OTAxMi5ka3IuZWNyLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tL215LWFnZW50OmxhdGVzdCcsXG4gICAgICAgIG5ldHdvcmtNb2RlOiAnUFVCTElDJyxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpSdW50aW1lJywge1xuICAgICAgQWdlbnRSdW50aW1lTmFtZTogJ1Rlc3RBZ2VudF9ydW50aW1lJyxcbiAgICAgIEFnZW50UnVudGltZUFydGlmYWN0OiB7XG4gICAgICAgIENvbnRhaW5lckNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBDb250YWluZXJVcmk6ICcxMjM0NTY3ODkwMTIuZGtyLmVjci51cy1lYXN0LTEuYW1hem9uYXdzLmNvbS9teS1hZ2VudDpsYXRlc3QnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIE5ldHdvcmtDb25maWd1cmF0aW9uOiB7XG4gICAgICAgIE5ldHdvcmtNb2RlOiAnUFVCTElDJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2NyZWF0ZXMgQ2ZuUnVudGltZUVuZHBvaW50JywgKCkgPT4ge1xuICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICB9LFxuICAgICAgaG9zdGluZ0FkYXB0ZXI6IG5ldyBBZ2VudENvcmVSdW50aW1lSG9zdGluZ0FkYXB0ZXIoe1xuICAgICAgICBjb250YWluZXJJbWFnZVVyaTogJzEyMzQ1Njc4OTAxMi5ka3IuZWNyLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tL215LWFnZW50OmxhdGVzdCcsXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6QmVkcm9ja0FnZW50Q29yZTo6UnVudGltZUVuZHBvaW50JywgMSk7XG4gICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkJlZHJvY2tBZ2VudENvcmU6OlJ1bnRpbWVFbmRwb2ludCcsIHtcbiAgICAgIE5hbWU6ICdUZXN0QWdlbnRfZW5kcG9pbnQnLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdjcmVhdGVzIHNpbmdsZSBJQU0gcm9sZSB3aXRoIGJlZHJvY2stYWdlbnRjb3JlIHRydXN0JywgKCkgPT4ge1xuICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICB9LFxuICAgICAgaG9zdGluZ0FkYXB0ZXI6IG5ldyBBZ2VudENvcmVSdW50aW1lSG9zdGluZ0FkYXB0ZXIoe1xuICAgICAgICBjb250YWluZXJJbWFnZVVyaTogJzEyMzQ1Njc4OTAxMi5ka3IuZWNyLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tL215LWFnZW50OmxhdGVzdCcsXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICBjb25zdCByb2xlcyA9IHRlbXBsYXRlLmZpbmRSZXNvdXJjZXMoJ0FXUzo6SUFNOjpSb2xlJyk7XG4gICAgLy8gRmluZCBhbGwgcm9sZXMgd2l0aCBiZWRyb2NrLWFnZW50Y29yZSB0cnVzdFxuICAgIGNvbnN0IGFnZW50Q29yZVJvbGVzID0gT2JqZWN0LnZhbHVlcyhyb2xlcykuZmlsdGVyKChyb2xlOiBhbnkpID0+XG4gICAgICByb2xlLlByb3BlcnRpZXMuQXNzdW1lUm9sZVBvbGljeURvY3VtZW50Py5TdGF0ZW1lbnQ/LnNvbWUoXG4gICAgICAgIChzdG10OiBhbnkpID0+IHN0bXQuUHJpbmNpcGFsPy5TZXJ2aWNlID09PSAnYmVkcm9jay1hZ2VudGNvcmUuYW1hem9uYXdzLmNvbScsXG4gICAgICApLFxuICAgICk7XG4gICAgLy8gU2hvdWxkIGJlIGV4YWN0bHkgT05FIHJvbGUgKHRoZSBhZ2VudCByb2xlKSwgbm90IGEgc2VwYXJhdGUgcnVudGltZSByb2xlXG4gICAgZXhwZWN0KGFnZW50Q29yZVJvbGVzKS50b0hhdmVMZW5ndGgoMSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3Bhc3NlcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMnLCAoKSA9PiB7XG4gICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgIH0sXG4gICAgICBob3N0aW5nQWRhcHRlcjogbmV3IEFnZW50Q29yZVJ1bnRpbWVIb3N0aW5nQWRhcHRlcih7XG4gICAgICAgIGNvbnRhaW5lckltYWdlVXJpOiAnMTIzNDU2Nzg5MDEyLmRrci5lY3IudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20vbXktYWdlbnQ6bGF0ZXN0JyxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpSdW50aW1lJywge1xuICAgICAgRW52aXJvbm1lbnRWYXJpYWJsZXM6IE1hdGNoLm9iamVjdExpa2Uoe1xuICAgICAgICBNT0RFTF9JRDogTWF0Y2guYW55VmFsdWUoKSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdkZWZhdWx0cyB0byBQVUJMSUMgbmV0d29yayBtb2RlJywgKCkgPT4ge1xuICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICB9LFxuICAgICAgaG9zdGluZ0FkYXB0ZXI6IG5ldyBBZ2VudENvcmVSdW50aW1lSG9zdGluZ0FkYXB0ZXIoe1xuICAgICAgICBjb250YWluZXJJbWFnZVVyaTogJzEyMzQ1Njc4OTAxMi5ka3IuZWNyLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tL215LWFnZW50OmxhdGVzdCcsXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6QmVkcm9ja0FnZW50Q29yZTo6UnVudGltZScsIHtcbiAgICAgIE5ldHdvcmtDb25maWd1cmF0aW9uOiB7XG4gICAgICAgIE5ldHdvcmtNb2RlOiAnUFVCTElDJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ1MzIHNlc3Npb24gYnVja2V0IGNyZWF0ZWQgZm9yIEFnZW50Q29yZSBob3N0aW5nJywgKCkgPT4ge1xuICAgIGNvbnN0IGFnZW50ID0gbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgIH0sXG4gICAgICBob3N0aW5nQWRhcHRlcjogbmV3IEFnZW50Q29yZVJ1bnRpbWVIb3N0aW5nQWRhcHRlcih7XG4gICAgICAgIGNvbnRhaW5lckltYWdlVXJpOiAnMTIzNDU2Nzg5MDEyLmRrci5lY3IudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20vbXktYWdlbnQ6bGF0ZXN0JyxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gU2Vzc2lvbiBidWNrZXQgc2hvdWxkIGJlIGNyZWF0ZWQgZm9yIFMzLWJhY2tlZCBwZXJzaXN0ZW5jZVxuICAgIGV4cGVjdChhZ2VudC5zZXNzaW9uQnVja2V0KS50b0JlRGVmaW5lZCgpO1xuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6UzM6OkJ1Y2tldCcsIHt9KTtcbiAgfSk7XG5cbiAgdGVzdCgnbm8gYWdlbnQgTGFtYmRhIGZ1bmN0aW9uIGNyZWF0ZWQgZm9yIEFnZW50Q29yZSBob3N0aW5nJywgKCkgPT4ge1xuICAgIGNvbnN0IGFnZW50ID0gbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgIH0sXG4gICAgICBob3N0aW5nQWRhcHRlcjogbmV3IEFnZW50Q29yZVJ1bnRpbWVIb3N0aW5nQWRhcHRlcih7XG4gICAgICAgIGNvbnRhaW5lckltYWdlVXJpOiAnMTIzNDU2Nzg5MDEyLmRrci5lY3IudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20vbXktYWdlbnQ6bGF0ZXN0JyxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KGFnZW50LmFnZW50RnVuY3Rpb24pLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgdGVzdCgnY3VzdG9tIEpXVCBhdXRob3JpemVyIGNvbmZpZ3VyYXRpb24nLCAoKSA9PiB7XG4gICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgIH0sXG4gICAgICBob3N0aW5nQWRhcHRlcjogbmV3IEFnZW50Q29yZVJ1bnRpbWVIb3N0aW5nQWRhcHRlcih7XG4gICAgICAgIGNvbnRhaW5lckltYWdlVXJpOiAnMTIzNDU2Nzg5MDEyLmRrci5lY3IudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20vbXktYWdlbnQ6bGF0ZXN0JyxcbiAgICAgICAgY3VzdG9tSnd0QXV0aG9yaXplcjoge1xuICAgICAgICAgIGRpc2NvdmVyeVVybDogJ2h0dHBzOi8vZXhhbXBsZS5jb20vLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24nLFxuICAgICAgICAgIGFsbG93ZWRBdWRpZW5jZTogWydteS1hdWRpZW5jZSddLFxuICAgICAgICAgIGFsbG93ZWRDbGllbnRzOiBbJ215LWNsaWVudCddLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkJlZHJvY2tBZ2VudENvcmU6OlJ1bnRpbWUnLCB7XG4gICAgICBBdXRob3JpemVyQ29uZmlndXJhdGlvbjogTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAgICAgIEN1c3RvbUpXVEF1dGhvcml6ZXI6IE1hdGNoLm9iamVjdExpa2Uoe1xuICAgICAgICAgIERpc2NvdmVyeVVybDogJ2h0dHBzOi8vZXhhbXBsZS5jb20vLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24nLFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdzZXRzIGNmblJ1bnRpbWUgcHJvcGVydHkgb24gYWdlbnQnLCAoKSA9PiB7XG4gICAgY29uc3QgYWdlbnQgPSBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgfSxcbiAgICAgIGhvc3RpbmdBZGFwdGVyOiBuZXcgQWdlbnRDb3JlUnVudGltZUhvc3RpbmdBZGFwdGVyKHtcbiAgICAgICAgY29udGFpbmVySW1hZ2VVcmk6ICcxMjM0NTY3ODkwMTIuZGtyLmVjci51cy1lYXN0LTEuYW1hem9uYXdzLmNvbS9teS1hZ2VudDpsYXRlc3QnLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICBleHBlY3QoYWdlbnQuY2ZuUnVudGltZSkudG9CZURlZmluZWQoKTtcbiAgfSk7XG59KTtcbiJdfQ==
1173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3RpdmUtYWdlbnQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy9mcmFtZXdvcmsvdGVzdHMvaW50ZXJhY3RpdmUtYWdlbnQudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZCQUE2QjtBQUM3Qiw2Q0FBbUQ7QUFDbkQsdURBQXlEO0FBQ3pELHlEQUFvRTtBQUNwRSxpREFBZ0U7QUFDaEUsdURBQWlFO0FBQ2pFLCtDQUE0QztBQUM1Qyw2REFBa0Q7QUFDbEQsMkRBQTJEO0FBQzNELG1FQVdxQztBQUNyQyw2REFBZ0U7QUFDaEUsOENBQXdDO0FBRXhDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUU7SUFDaEMsSUFBSSxHQUFRLENBQUM7SUFDYixJQUFJLEtBQVksQ0FBQztJQUNqQixJQUFJLFlBQW1CLENBQUM7SUFDeEIsTUFBTSxTQUFTLEdBQUcsdUNBQXlCLENBQUMsdUNBQXVDLENBQUM7SUFFcEYsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLEdBQUcsR0FBRyxJQUFBLDBCQUFhLEdBQUUsQ0FBQztRQUN0QixLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUU7WUFDbEMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFO1NBQ3RELENBQUMsQ0FBQztRQUNILFlBQVksR0FBRyxJQUFJLHFCQUFLLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRTtZQUM5QyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsb0RBQW9ELENBQUM7U0FDakYsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFO1FBQ3JDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7WUFDdEMsTUFBTSxLQUFLLEdBQUcsSUFB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Q0FBQzthQUNILENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLGdFQUFnRTtJQUNwRixDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7UUFDdEQsSUFBSSxvQ0FBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO1lBQ25DLFNBQVMsRUFBRSxXQUFXO1lBQ3RCLGVBQWUsRUFBRTtnQkFDZixZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO2dCQUN0QyxZQUFZO2FBQ2I7WUFDRCxjQUFjLEVBQUUsSUFBSSxrREFBOEIsQ0FBQztnQkFDakQsaUJBQWlCLEVBQUUsOERBQThEO2dCQUNqRixXQUFXLEVBQUUsK0JBQVcsQ0FBQyxNQUFNO2FBQ2hDLENBQUM7U0FDSCxDQUFDLENBQUM7UUFFSCxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxRQUFRLENBQUMscUJBQXFCLENBQUMsZ0NBQWdDLEVBQUU7WUFDL0Qsb0JBQW9CLEVBQUU7Z0JBQ3BCLFdBQVcsRUFBRSxRQUFRO2dCQUNyQixpQkFBaUIsRUFBRSxrQkFBSyxDQUFDLE1BQU0sRUFBRTthQUNsQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQXBwLCBTdGFjaywgRHVyYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBUZW1wbGF0ZSwgTWF0Y2ggfSBmcm9tICdhd3MtY2RrLWxpYi9hc3NlcnRpb25zJztcbmltcG9ydCB7IEZvdW5kYXRpb25Nb2RlbElkZW50aWZpZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9jayc7XG5pbXBvcnQgeyBTZWN1cml0eUdyb3VwLCBTdWJuZXRUeXBlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgeyBDb2RlLCBGdW5jdGlvbiwgUnVudGltZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IEFzc2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG5pbXBvcnQgeyBjcmVhdGVUZXN0QXBwIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3Rlc3QtdXRpbHMnO1xuaW1wb3J0IHtcbiAgSW50ZXJhY3RpdmVBZ2VudCxcbiAgU3RyZWFtaW5nSHR0cEFkYXB0ZXIsXG4gIFMzU2Vzc2lvbk1hbmFnZXIsXG4gIFNsaWRpbmdXaW5kb3dDb252ZXJzYXRpb25NYW5hZ2VyLFxuICBOdWxsQ29udmVyc2F0aW9uTWFuYWdlcixcbiAgQ29nbml0b0F1dGhlbnRpY2F0b3IsXG4gIE5vQXV0aGVudGljYXRvcixcbiAgTGFtYmRhSG9zdGluZ0FkYXB0ZXIsXG4gIEFnZW50Q29yZVJ1bnRpbWVIb3N0aW5nQWRhcHRlcixcbiAgTmV0d29ya01vZGUsXG59IGZyb20gJy4uL2FnZW50cy9pbnRlcmFjdGl2ZS1hZ2VudCc7XG5pbXBvcnQgeyBCZWRyb2NrS25vd2xlZGdlQmFzZSB9IGZyb20gJy4uL2FnZW50cy9rbm93bGVkZ2UtYmFzZSc7XG5pbXBvcnQgeyBOZXR3b3JrIH0gZnJvbSAnLi4vZm91bmRhdGlvbic7XG5cbmRlc2NyaWJlKCdJbnRlcmFjdGl2ZUFnZW50JywgKCkgPT4ge1xuICBsZXQgYXBwOiBBcHA7XG4gIGxldCBzdGFjazogU3RhY2s7XG4gIGxldCBzeXN0ZW1Qcm9tcHQ6IEFzc2V0O1xuICBjb25zdCB0ZXN0TW9kZWwgPSBGb3VuZGF0aW9uTW9kZWxJZGVudGlmaWVyLkFOVEhST1BJQ19DTEFVREVfM19TT05ORVRfMjAyNDAyMjlfVjFfMDtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBhcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG4gICAgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJywge1xuICAgICAgZW52OiB7IGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICd1cy1lYXN0LTEnIH0sXG4gICAgfSk7XG4gICAgc3lzdGVtUHJvbXB0ID0gbmV3IEFzc2V0KHN0YWNrLCAnU3lzdGVtUHJvbXB0Jywge1xuICAgICAgcGF0aDogcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2FnZW50cy9yZXNvdXJjZXMvZGVmYXVsdC1zdHJhbmRzLWFnZW50L2JhdGNoLnB5JyksXG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdEZWZhdWx0IENvbmZpZ3VyYXRpb24nLCAoKSA9PiB7XG4gICAgdGVzdCgnY3JlYXRlcyB3aXRoIG1pbmltYWwgcHJvcHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhZ2VudCA9IG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYWdlbnQpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoYWdlbnQuYWdlbnRGdW5jdGlvbikudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChhZ2VudC5hcGlFbmRwb2ludCkudG9CZURlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2RlZmF1bHQgYWRhcHRlciBpcyBTdHJlYW1pbmdIdHRwQWRhcHRlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGFnZW50ID0gbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhZ2VudC5hZGFwdGVyKS50b0JlSW5zdGFuY2VPZihTdHJlYW1pbmdIdHRwQWRhcHRlcik7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdkZWZhdWx0IHNlc3Npb24gc3RvcmUgaXMgUzNTZXNzaW9uTWFuYWdlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGFnZW50ID0gbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChhZ2VudC5zZXNzaW9uU3RvcmUpLnRvQmVJbnN0YW5jZU9mKFMzU2Vzc2lvbk1hbmFnZXIpO1xuICAgICAgZXhwZWN0KGFnZW50LnNlc3Npb25CdWNrZXQpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdkZWZhdWx0IGNvbnRleHQgc3RyYXRlZ3kgaXMgU2xpZGluZ1dpbmRvd0NvbnZlcnNhdGlvbk1hbmFnZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBhZ2VudCA9IG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYWdlbnQuY29udGV4dFN0cmF0ZWd5KS50b0JlSW5zdGFuY2VPZihTbGlkaW5nV2luZG93Q29udmVyc2F0aW9uTWFuYWdlcik7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdkZWZhdWx0IGF1dGhlbnRpY2F0b3IgaXMgQ29nbml0b0F1dGhlbnRpY2F0b3InLCAoKSA9PiB7XG4gICAgICBjb25zdCBhZ2VudCA9IG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYWdlbnQuYXV0aGVudGljYXRvcikudG9CZUluc3RhbmNlT2YoQ29nbml0b0F1dGhlbnRpY2F0b3IpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnTGFtYmRhIEZ1bmN0aW9uIENvbmZpZ3VyYXRpb24nLCAoKSA9PiB7XG4gICAgdGVzdCgnY3JlYXRlcyBMYW1iZGEgZnVuY3Rpb24gd2l0aCBkZWZhdWx0IDE1LW1pbnV0ZSB0aW1lb3V0JywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywge1xuICAgICAgICBUaW1lb3V0OiA5MDAsIC8vIDE1IG1pbnV0ZXNcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY3JlYXRlcyBMYW1iZGEgZnVuY3Rpb24gd2l0aCBkZWZhdWx0IDEwMjQgTUIgbWVtb3J5JywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywge1xuICAgICAgICBNZW1vcnlTaXplOiAxMDI0LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdMYW1iZGEgZnVuY3Rpb24gaGFzIExhbWJkYSBXZWIgQWRhcHRlciBsYXllcicsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsIHtcbiAgICAgICAgTGF5ZXJzOiBNYXRjaC5hcnJheVdpdGgoW1xuICAgICAgICAgICdhcm46YXdzOmxhbWJkYTp1cy1lYXN0LTE6NzUzMjQwNTk4MDc1OmxheWVyOkxhbWJkYUFkYXB0ZXJMYXllclg4NjoyNScsXG4gICAgICAgIF0pLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdMYW1iZGEgZnVuY3Rpb24gaGFzIEFXU19MQU1CREFfRVhFQ19XUkFQUEVSIGVudiB2YXIgZm9yIExXQScsICgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsIHtcbiAgICAgICAgRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBWYXJpYWJsZXM6IE1hdGNoLm9iamVjdExpa2Uoe1xuICAgICAgICAgICAgQVdTX0xBTUJEQV9FWEVDX1dSQVBQRVI6ICcvb3B0L2Jvb3RzdHJhcCcsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ0xhbWJkYSBmdW5jdGlvbiBoYXMgQVdTX0xXQV9JTlZPS0VfTU9ERSBlbnYgdmFyJywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywge1xuICAgICAgICBFbnZpcm9ubWVudDoge1xuICAgICAgICAgIFZhcmlhYmxlczogTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAgICAgICAgICBBV1NfTFdBX0lOVk9LRV9NT0RFOiAncmVzcG9uc2Vfc3RyZWFtJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnTGFtYmRhIGZ1bmN0aW9uIGhhcyBQT1JUIGVudiB2YXIgc2V0IHRvIDgwODAnLCAoKSA9PiB7XG4gICAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLCB7XG4gICAgICAgIEVudmlyb25tZW50OiB7XG4gICAgICAgICAgVmFyaWFibGVzOiBNYXRjaC5vYmplY3RMaWtlKHtcbiAgICAgICAgICAgIFBPUlQ6ICc4MDgwJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnTGFtYmRhIGZ1bmN0aW9uIGhhcyBNT0RFTF9JRCBlbnYgdmFyJywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywge1xuICAgICAgICBFbnZpcm9ubWVudDoge1xuICAgICAgICAgIFZhcmlhYmxlczogTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAgICAgICAgICBNT0RFTF9JRDogTWF0Y2guYW55VmFsdWUoKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnTGFtYmRhIGZ1bmN0aW9uIGRvZXMgbm90IGhhdmUgZGVwcmVjYXRlZCBjb250ZXh0IHN0cmF0ZWd5IGVudiB2YXJzJywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIGNvbnN0IGZ1bmN0aW9ucyA9IHRlbXBsYXRlLmZpbmRSZXNvdXJjZXMoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicpO1xuICAgICAgY29uc3QgZm4gPSBPYmplY3QudmFsdWVzKGZ1bmN0aW9ucykuZmluZCgoZjogYW55KSA9PlxuICAgICAgICBmLlByb3BlcnRpZXM/LkZ1bmN0aW9uTmFtZT8uaW5jbHVkZXMoJ1Rlc3RBZ2VudCcpLFxuICAgICAgKSBhcyBhbnk7XG5cbiAgICAgIC8vIENvbnRleHQgZW52IHZhcnMgc2hvdWxkIG5vIGxvbmdlciBiZSBzZXQgKGhhbmRsZWQgYnkgU3RyYW5kcy1uYXRpdmUgaGFuZGxlcilcbiAgICAgIGV4cGVjdChmbi5Qcm9wZXJ0aWVzLkVudmlyb25tZW50LlZhcmlhYmxlcy5DT05URVhUX0VOQUJMRUQpLnRvQmVVbmRlZmluZWQoKTtcbiAgICAgIGV4cGVjdChmbi5Qcm9wZXJ0aWVzLkVudmlyb25tZW50LlZhcmlhYmxlcy5DT05URVhUX1NUUkFURUdZKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgICBleHBlY3QoZm4uUHJvcGVydGllcy5FbnZpcm9ubWVudC5WYXJpYWJsZXMuQ09OVEVYVF9XSU5ET1dfU0laRSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnTGFtYmRhIGZ1bmN0aW9uIGhhcyBzZXNzaW9uIGJ1Y2tldCBlbnYgdmFyJywgKCkgPT4ge1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywge1xuICAgICAgICBFbnZpcm9ubWVudDoge1xuICAgICAgICAgIFZhcmlhYmxlczogTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAgICAgICAgICBTRVNTSU9OX0JVQ0tFVDogTWF0Y2guYW55VmFsdWUoKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY3VzdG9tIHRpbWVvdXQgaXMgYXBwbGllZCcsICgpID0+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+IHtcbiAgdGVzdCgnZ3JhbnRBdXRoZW50aWNhdGUgaXMgbm8tb3AnLCAoKSA9PiB7XG4gICAgY29uc3QgYXV0aCA9IG5ldyBOb0F1dGhlbnRpY2F0b3IoKTtcbiAgICBjb25zdCBhcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJyk7XG4gICAgY29uc3QgbW9ja0xhbWJkYSA9IG5ldyBGdW5jdGlvbihzdGFjaywgJ01vY2tMYW1iZGEnLCB7XG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogQ29kZS5mcm9tSW5saW5lKCdleHBvcnRzLmhhbmRsZXIgPSBhc3luYyAoKSA9PiAoe30pOycpLFxuICAgIH0pO1xuICAgIGV4cGVjdCgoKSA9PiBhdXRoLmdyYW50QXV0aGVudGljYXRlKG1vY2tMYW1iZGEpKS5ub3QudG9UaHJvdygpO1xuICB9KTtcblxuICB0ZXN0KCdyZXR1cm5zIGNvcnJlY3QgZW52aXJvbm1lbnQgdmFyaWFibGVzJywgKCkgPT4ge1xuICAgIGNvbnN0IGF1dGggPSBuZXcgTm9BdXRoZW50aWNhdG9yKCk7XG4gICAgY29uc3QgZW52ID0gYXV0aC5lbnZpcm9ubWVudFZhcmlhYmxlcygpO1xuICAgIGV4cGVjdChlbnYpLnRvRXF1YWwoeyBBVVRIX1RZUEU6ICdOb25lJyB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ0ludGVyYWN0aXZlQWdlbnQgS25vd2xlZGdlIEJhc2UgSW50ZWdyYXRpb24nLCAoKSA9PiB7XG4gIGxldCBhcHA6IEFwcDtcbiAgbGV0IHN0YWNrOiBTdGFjaztcbiAgbGV0IHN5c3RlbVByb21wdDogQXNzZXQ7XG4gIGNvbnN0IHRlc3RNb2RlbCA9IEZvdW5kYXRpb25Nb2RlbElkZW50aWZpZXIuQU5USFJPUElDX0NMQVVERV8zX1NPTk5FVF8yMDI0MDIyOV9WMV8wO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGFwcCA9IGNyZWF0ZVRlc3RBcHAoKTtcbiAgICBzdGFjayA9IG5ldyBTdGFjayhhcHAsICdUZXN0U3RhY2snLCB7XG4gICAgICBlbnY6IHsgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSxcbiAgICB9KTtcbiAgICBzeXN0ZW1Qcm9tcHQgPSBuZXcgQXNzZXQoc3RhY2ssICdTeXN0ZW1Qcm9tcHQnLCB7XG4gICAgICBwYXRoOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vYWdlbnRzL3Jlc291cmNlcy9kZWZhdWx0LXN0cmFuZHMtYWdlbnQvYmF0Y2gucHknKSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnc2V0cyBLTk9XTEVER0VfQkFTRVNfQ09ORklHIHdoZW4gS0JzIGNvbmZpZ3VyZWQnLCAoKSA9PiB7XG4gICAgY29uc3Qga2IgPSBuZXcgQmVkcm9ja0tub3dsZWRnZUJhc2Uoc3RhY2ssICdUZXN0S0InLCB7XG4gICAgICBuYW1lOiAndGVzdC1rYicsXG4gICAgICBkZXNjcmlwdGlvbjogJ1Rlc3Qga25vd2xlZGdlIGJhc2UnLFxuICAgICAga25vd2xlZGdlQmFzZUlkOiAnS0IxMjM0NTYnLFxuICAgIH0pO1xuXG4gICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAga25vd2xlZGdlQmFzZXM6IFtrYl0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywge1xuICAgICAgRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgVmFyaWFibGVzOiBNYXRjaC5vYmplY3RMaWtlKHtcbiAgICAgICAgICBLTk9XTEVER0VfQkFTRVNfQ09ORklHOiBNYXRjaC5hbnlWYWx1ZSgpLFxuICAgICAgICAgIEtOT1dMRURHRV9CQVNFX1NZU1RFTV9QUk9NUFRfQURESVRJT046IE1hdGNoLmFueVZhbHVlKCksXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnZG9lcyBub3Qgc2V0IEtCIGVudiB2YXJzIHdoZW4gbm8gS0JzIGNvbmZpZ3VyZWQnLCAoKSA9PiB7XG4gICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgY29uc3QgZnVuY3Rpb25zID0gdGVtcGxhdGUuZmluZFJlc291cmNlcygnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJyk7XG4gICAgY29uc3QgZm4gPSBPYmplY3QudmFsdWVzKGZ1bmN0aW9ucykuZmluZCgoZjogYW55KSA9PlxuICAgICAgZi5Qcm9wZXJ0aWVzPy5GdW5jdGlvbk5hbWU/LmluY2x1ZGVzKCdUZXN0QWdlbnQnKSxcbiAgICApIGFzIGFueTtcblxuICAgIGV4cGVjdChmbi5Qcm9wZXJ0aWVzLkVudmlyb25tZW50LlZhcmlhYmxlcy5LTk9XTEVER0VfQkFTRVNfQ09ORklHKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KGZuLlByb3BlcnRpZXMuRW52aXJvbm1lbnQuVmFyaWFibGVzLktOT1dMRURHRV9CQVNFX1NZU1RFTV9QUk9NUFRfQURESVRJT04pLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG59KTtcblxuXG5kZXNjcmliZSgnTGFtYmRhSG9zdGluZ0FkYXB0ZXInLCAoKSA9PiB7XG4gIGxldCBhcHA6IEFwcDtcbiAgbGV0IHN0YWNrOiBTdGFjaztcbiAgbGV0IHN5c3RlbVByb21wdDogQXNzZXQ7XG4gIGNvbnN0IHRlc3RNb2RlbCA9IEZvdW5kYXRpb25Nb2RlbElkZW50aWZpZXIuQU5USFJPUElDX0NMQVVERV8zX1NPTk5FVF8yMDI0MDIyOV9WMV8wO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGFwcCA9IGNyZWF0ZVRlc3RBcHAoKTtcbiAgICBzdGFjayA9IG5ldyBTdGFjayhhcHAsICdUZXN0U3RhY2snLCB7XG4gICAgICBlbnY6IHsgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSxcbiAgICB9KTtcbiAgICBzeXN0ZW1Qcm9tcHQgPSBuZXcgQXNzZXQoc3RhY2ssICdTeXN0ZW1Qcm9tcHQnLCB7XG4gICAgICBwYXRoOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vYWdlbnRzL3Jlc291cmNlcy9kZWZhdWx0LXN0cmFuZHMtYWdlbnQvYmF0Y2gucHknKSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnaXMgdXNlZCBieSBkZWZhdWx0IHdoZW4gbm8gaG9zdGluZ0FkYXB0ZXIgc3BlY2lmaWVkJywgKCkgPT4ge1xuICAgIGNvbnN0IGFnZW50ID0gbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBTaG91bGQgaGF2ZSBhIExhbWJkYSBmdW5jdGlvbiBhbmQgQVBJIGVuZHBvaW50XG4gICAgZXhwZWN0KGFnZW50LmFnZW50RnVuY3Rpb24pLnRvQmVEZWZpbmVkKCk7XG4gICAgZXhwZWN0KGFnZW50LmFwaUVuZHBvaW50KS50b0JlRGVmaW5lZCgpO1xuXG4gICAgLy8gU2hvdWxkIGhhdmUgY3JlYXRlZCBBUEkgR2F0ZXdheSBhbmQgQ29nbml0byByZXNvdXJjZXNcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLCB7XG4gICAgICBGdW5jdGlvbk5hbWU6IE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoJ1Rlc3RBZ2VudCcpLFxuICAgIH0pO1xuICAgIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcygnQVdTOjpBcGlHYXRld2F5OjpSZXN0QXBpJywgMSk7XG4gICAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkNvZ25pdG86OlVzZXJQb29sJywgMSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2V4cGxpY2l0IExhbWJkYUhvc3RpbmdBZGFwdGVyIHdpdGggY3VzdG9tIGF1dGhlbnRpY2F0b3InLCAoKSA9PiB7XG4gICAgY29uc3QgYWdlbnQgPSBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgfSxcbiAgICAgIGhvc3RpbmdBZGFwdGVyOiBuZXcgTGFtYmRhSG9zdGluZ0FkYXB0ZXIoe1xuICAgICAgICBhdXRoZW50aWNhdG9yOiBuZXcgTm9BdXRoZW50aWNhdG9yKCksXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChhZ2VudC5hZ2VudEZ1bmN0aW9uKS50b0JlRGVmaW5lZCgpO1xuICAgIGV4cGVjdChhZ2VudC5hcGlFbmRwb2ludCkudG9CZURlZmluZWQoKTtcblxuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsIHtcbiAgICAgIEZ1bmN0aW9uTmFtZTogTWF0Y2guc3RyaW5nTGlrZVJlZ2V4cCgnVGVzdEFnZW50JyksXG4gICAgfSk7XG4gICAgLy8gTm8gQ29nbml0byB3aXRoIE5vQXV0aGVudGljYXRvclxuICAgIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcygnQVdTOjpDb2duaXRvOjpVc2VyUG9vbCcsIDApO1xuICB9KTtcblxuICB0ZXN0KCdob3N0aW5nQWRhcHRlciBwcm9wIG92ZXJyaWRlcyB0b3AtbGV2ZWwgYXV0aGVudGljYXRvci9jb21tdW5pY2F0aW9uQWRhcHRlcicsICgpID0+IHtcbiAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgfSxcbiAgICAgIC8vIFRoZXNlIHNob3VsZCBiZSBpZ25vcmVkIHdoZW4gaG9zdGluZ0FkYXB0ZXIgaXMgcHJvdmlkZWRcbiAgICAgIGF1dGhlbnRpY2F0b3I6IG5ldyBDb2duaXRvQXV0aGVudGljYXRvcigpLFxuICAgICAgaG9zdGluZ0FkYXB0ZXI6IG5ldyBMYW1iZGFIb3N0aW5nQWRhcHRlcih7XG4gICAgICAgIGF1dGhlbnRpY2F0b3I6IG5ldyBOb0F1dGhlbnRpY2F0b3IoKSxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gQWRhcHRlci1sZXZlbCBhdXRoZW50aWNhdG9yIHNob3VsZCB3aW4g4oCUIG5vIENvZ25pdG8gcG9vbFxuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6Q29nbml0bzo6VXNlclBvb2wnLCAwKTtcbiAgfSk7XG59KTtcblxuXG5kZXNjcmliZSgnQWdlbnRDb3JlUnVudGltZUhvc3RpbmdBZGFwdGVyJywgKCkgPT4ge1xuICBsZXQgYXBwOiBBcHA7XG4gIGxldCBzdGFjazogU3RhY2s7XG4gIGxldCBzeXN0ZW1Qcm9tcHQ6IEFzc2V0O1xuICBjb25zdCB0ZXN0TW9kZWwgPSBGb3VuZGF0aW9uTW9kZWxJZGVudGlmaWVyLkFOVEhST1BJQ19DTEFVREVfM19TT05ORVRfMjAyNDAyMjlfVjFfMDtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBhcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG4gICAgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJywge1xuICAgICAgZW52OiB7IGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICd1cy1lYXN0LTEnIH0sXG4gICAgfSk7XG4gICAgc3lzdGVtUHJvbXB0ID0gbmV3IEFzc2V0KHN0YWNrLCAnU3lzdGVtUHJvbXB0Jywge1xuICAgICAgcGF0aDogcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2FnZW50cy9yZXNvdXJjZXMvZGVmYXVsdC1zdHJhbmRzLWFnZW50L2JhdGNoLnB5JyksXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2NyZWF0ZXMgQ2ZuUnVudGltZSB3aXRoIGNvbnRhaW5lciBVUkknLCAoKSA9PiB7XG4gICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgIH0sXG4gICAgICBob3N0aW5nQWRhcHRlcjogbmV3IEFnZW50Q29yZVJ1bnRpbWVIb3N0aW5nQWRhcHRlcih7XG4gICAgICAgIGNvbnRhaW5lckltYWdlVXJpOiAnMTIzNDU2Nzg5MDEyLmRrci5lY3IudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20vbXktYWdlbnQ6bGF0ZXN0JyxcbiAgICAgICAgbmV0d29ya01vZGU6IE5ldHdvcmtNb2RlLlBVQkxJQyxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpSdW50aW1lJywge1xuICAgICAgQWdlbnRSdW50aW1lTmFtZTogJ1Rlc3RBZ2VudF9ydW50aW1lJyxcbiAgICAgIEFnZW50UnVudGltZUFydGlmYWN0OiB7XG4gICAgICAgIENvbnRhaW5lckNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBDb250YWluZXJVcmk6ICcxMjM0NTY3ODkwMTIuZGtyLmVjci51cy1lYXN0LTEuYW1hem9uYXdzLmNvbS9teS1hZ2VudDpsYXRlc3QnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIE5ldHdvcmtDb25maWd1cmF0aW9uOiB7XG4gICAgICAgIE5ldHdvcmtNb2RlOiAnUFVCTElDJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2NyZWF0ZXMgQ2ZuUnVudGltZUVuZHBvaW50JywgKCkgPT4ge1xuICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICB9LFxuICAgICAgaG9zdGluZ0FkYXB0ZXI6IG5ldyBBZ2VudENvcmVSdW50aW1lSG9zdGluZ0FkYXB0ZXIoe1xuICAgICAgICBjb250YWluZXJJbWFnZVVyaTogJzEyMzQ1Njc4OTAxMi5ka3IuZWNyLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tL215LWFnZW50OmxhdGVzdCcsXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6QmVkcm9ja0FnZW50Q29yZTo6UnVudGltZUVuZHBvaW50JywgMSk7XG4gICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkJlZHJvY2tBZ2VudENvcmU6OlJ1bnRpbWVFbmRwb2ludCcsIHtcbiAgICAgIE5hbWU6ICdUZXN0QWdlbnRfZW5kcG9pbnQnLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdjcmVhdGVzIHNpbmdsZSBJQU0gcm9sZSB3aXRoIGJlZHJvY2stYWdlbnRjb3JlIHRydXN0JywgKCkgPT4ge1xuICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICB9LFxuICAgICAgaG9zdGluZ0FkYXB0ZXI6IG5ldyBBZ2VudENvcmVSdW50aW1lSG9zdGluZ0FkYXB0ZXIoe1xuICAgICAgICBjb250YWluZXJJbWFnZVVyaTogJzEyMzQ1Njc4OTAxMi5ka3IuZWNyLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tL215LWFnZW50OmxhdGVzdCcsXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICBjb25zdCByb2xlcyA9IHRlbXBsYXRlLmZpbmRSZXNvdXJjZXMoJ0FXUzo6SUFNOjpSb2xlJyk7XG4gICAgLy8gRmluZCBhbGwgcm9sZXMgd2l0aCBiZWRyb2NrLWFnZW50Y29yZSB0cnVzdFxuICAgIGNvbnN0IGFnZW50Q29yZVJvbGVzID0gT2JqZWN0LnZhbHVlcyhyb2xlcykuZmlsdGVyKChyb2xlOiBhbnkpID0+XG4gICAgICByb2xlLlByb3BlcnRpZXMuQXNzdW1lUm9sZVBvbGljeURvY3VtZW50Py5TdGF0ZW1lbnQ/LnNvbWUoXG4gICAgICAgIChzdG10OiBhbnkpID0+IHN0bXQuUHJpbmNpcGFsPy5TZXJ2aWNlID09PSAnYmVkcm9jay1hZ2VudGNvcmUuYW1hem9uYXdzLmNvbScsXG4gICAgICApLFxuICAgICk7XG4gICAgLy8gU2hvdWxkIGJlIGV4YWN0bHkgT05FIHJvbGUgKHRoZSBhZ2VudCByb2xlKSwgbm90IGEgc2VwYXJhdGUgcnVudGltZSByb2xlXG4gICAgZXhwZWN0KGFnZW50Q29yZVJvbGVzKS50b0hhdmVMZW5ndGgoMSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3Bhc3NlcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMnLCAoKSA9PiB7XG4gICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgIH0sXG4gICAgICBob3N0aW5nQWRhcHRlcjogbmV3IEFnZW50Q29yZVJ1bnRpbWVIb3N0aW5nQWRhcHRlcih7XG4gICAgICAgIGNvbnRhaW5lckltYWdlVXJpOiAnMTIzNDU2Nzg5MDEyLmRrci5lY3IudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20vbXktYWdlbnQ6bGF0ZXN0JyxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpSdW50aW1lJywge1xuICAgICAgRW52aXJvbm1lbnRWYXJpYWJsZXM6IE1hdGNoLm9iamVjdExpa2Uoe1xuICAgICAgICBNT0RFTF9JRDogTWF0Y2guYW55VmFsdWUoKSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdkZWZhdWx0cyB0byBQVUJMSUMgbmV0d29yayBtb2RlJywgKCkgPT4ge1xuICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICBhZ2VudE5hbWU6ICdUZXN0QWdlbnQnLFxuICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICBzeXN0ZW1Qcm9tcHQsXG4gICAgICB9LFxuICAgICAgaG9zdGluZ0FkYXB0ZXI6IG5ldyBBZ2VudENvcmVSdW50aW1lSG9zdGluZ0FkYXB0ZXIoe1xuICAgICAgICBjb250YWluZXJJbWFnZVVyaTogJzEyMzQ1Njc4OTAxMi5ka3IuZWNyLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tL215LWFnZW50OmxhdGVzdCcsXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6QmVkcm9ja0FnZW50Q29yZTo6UnVudGltZScsIHtcbiAgICAgIE5ldHdvcmtDb25maWd1cmF0aW9uOiB7XG4gICAgICAgIE5ldHdvcmtNb2RlOiAnUFVCTElDJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ1MzIHNlc3Npb24gYnVja2V0IGNyZWF0ZWQgZm9yIEFnZW50Q29yZSBob3N0aW5nJywgKCkgPT4ge1xuICAgIGNvbnN0IGFnZW50ID0gbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgIH0sXG4gICAgICBob3N0aW5nQWRhcHRlcjogbmV3IEFnZW50Q29yZVJ1bnRpbWVIb3N0aW5nQWRhcHRlcih7XG4gICAgICAgIGNvbnRhaW5lckltYWdlVXJpOiAnMTIzNDU2Nzg5MDEyLmRrci5lY3IudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20vbXktYWdlbnQ6bGF0ZXN0JyxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gU2Vzc2lvbiBidWNrZXQgc2hvdWxkIGJlIGNyZWF0ZWQgZm9yIFMzLWJhY2tlZCBwZXJzaXN0ZW5jZVxuICAgIGV4cGVjdChhZ2VudC5zZXNzaW9uQnVja2V0KS50b0JlRGVmaW5lZCgpO1xuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6UzM6OkJ1Y2tldCcsIHt9KTtcbiAgfSk7XG5cbiAgdGVzdCgnbm8gYWdlbnQgTGFtYmRhIGZ1bmN0aW9uIGNyZWF0ZWQgZm9yIEFnZW50Q29yZSBob3N0aW5nJywgKCkgPT4ge1xuICAgIGNvbnN0IGFnZW50ID0gbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgIH0sXG4gICAgICBob3N0aW5nQWRhcHRlcjogbmV3IEFnZW50Q29yZVJ1bnRpbWVIb3N0aW5nQWRhcHRlcih7XG4gICAgICAgIGNvbnRhaW5lckltYWdlVXJpOiAnMTIzNDU2Nzg5MDEyLmRrci5lY3IudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20vbXktYWdlbnQ6bGF0ZXN0JyxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KGFnZW50LmFnZW50RnVuY3Rpb24pLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgdGVzdCgnY3VzdG9tIEpXVCBhdXRob3JpemVyIGNvbmZpZ3VyYXRpb24nLCAoKSA9PiB7XG4gICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgIH0sXG4gICAgICBob3N0aW5nQWRhcHRlcjogbmV3IEFnZW50Q29yZVJ1bnRpbWVIb3N0aW5nQWRhcHRlcih7XG4gICAgICAgIGNvbnRhaW5lckltYWdlVXJpOiAnMTIzNDU2Nzg5MDEyLmRrci5lY3IudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20vbXktYWdlbnQ6bGF0ZXN0JyxcbiAgICAgICAgY3VzdG9tSnd0QXV0aG9yaXplcjoge1xuICAgICAgICAgIGRpc2NvdmVyeVVybDogJ2h0dHBzOi8vZXhhbXBsZS5jb20vLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24nLFxuICAgICAgICAgIGFsbG93ZWRBdWRpZW5jZTogWydteS1hdWRpZW5jZSddLFxuICAgICAgICAgIGFsbG93ZWRDbGllbnRzOiBbJ215LWNsaWVudCddLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkJlZHJvY2tBZ2VudENvcmU6OlJ1bnRpbWUnLCB7XG4gICAgICBBdXRob3JpemVyQ29uZmlndXJhdGlvbjogTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAgICAgIEN1c3RvbUpXVEF1dGhvcml6ZXI6IE1hdGNoLm9iamVjdExpa2Uoe1xuICAgICAgICAgIERpc2NvdmVyeVVybDogJ2h0dHBzOi8vZXhhbXBsZS5jb20vLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24nLFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdzZXRzIGNmblJ1bnRpbWUgcHJvcGVydHkgb24gYWdlbnQnLCAoKSA9PiB7XG4gICAgY29uc3QgYWdlbnQgPSBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgfSxcbiAgICAgIGhvc3RpbmdBZGFwdGVyOiBuZXcgQWdlbnRDb3JlUnVudGltZUhvc3RpbmdBZGFwdGVyKHtcbiAgICAgICAgY29udGFpbmVySW1hZ2VVcmk6ICcxMjM0NTY3ODkwMTIuZGtyLmVjci51cy1lYXN0LTEuYW1hem9uYXdzLmNvbS9teS1hZ2VudDpsYXRlc3QnLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICBleHBlY3QoYWdlbnQuY2ZuUnVudGltZSkudG9CZURlZmluZWQoKTtcbiAgfSk7XG5cbiAgdGVzdCgnVlBDIG5ldHdvcmsgbW9kZSBzZXRzIE5ldHdvcmtNb2RlQ29uZmlnIHZpYSBwcm9wZXJ0eSBvdmVycmlkZScsICgpID0+IHtcbiAgICBjb25zdCBuZXR3b3JrID0gbmV3IE5ldHdvcmsoc3RhY2ssICdUZXN0TmV0d29yaycsIHsgbWF4QXpzOiAyLCBuYXRHYXRld2F5czogMSB9KTtcbiAgICBjb25zdCBzZyA9IG5ldyBTZWN1cml0eUdyb3VwKHN0YWNrLCAnVGVzdFNHJywge1xuICAgICAgdnBjOiBuZXR3b3JrLnZwYyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGVzdCBTRycsXG4gICAgfSk7XG5cbiAgICBuZXcgSW50ZXJhY3RpdmVBZ2VudChzdGFjaywgJ0FnZW50Jywge1xuICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICBiZWRyb2NrTW9kZWw6IHsgZm1Nb2RlbElkOiB0ZXN0TW9kZWwgfSxcbiAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgfSxcbiAgICAgIG5ldHdvcmssXG4gICAgICBob3N0aW5nQWRhcHRlcjogbmV3IEFnZW50Q29yZVJ1bnRpbWVIb3N0aW5nQWRhcHRlcih7XG4gICAgICAgIGNvbnRhaW5lckltYWdlVXJpOiAnMTIzNDU2Nzg5MDEyLmRrci5lY3IudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20vbXktYWdlbnQ6bGF0ZXN0JyxcbiAgICAgICAgbmV0d29ya01vZGU6IE5ldHdvcmtNb2RlLlZQQyxcbiAgICAgICAgdnBjU3VibmV0czogeyBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MgfSxcbiAgICAgICAgc2VjdXJpdHlHcm91cHM6IFtzZ10sXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6QmVkcm9ja0FnZW50Q29yZTo6UnVudGltZScsIHtcbiAgICAgIE5ldHdvcmtDb25maWd1cmF0aW9uOiB7XG4gICAgICAgIE5ldHdvcmtNb2RlOiAnVlBDJyxcbiAgICAgICAgTmV0d29ya01vZGVDb25maWc6IHtcbiAgICAgICAgICBTdWJuZXRzOiBNYXRjaC5hbnlWYWx1ZSgpLFxuICAgICAgICAgIFNlY3VyaXR5R3JvdXBzOiBNYXRjaC5hbnlWYWx1ZSgpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnVlBDIG1vZGUgdGhyb3dzIHdoZW4gbm8gc3VibmV0cyBjYW4gYmUgcmVzb2x2ZWQnLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIG5ldyBJbnRlcmFjdGl2ZUFnZW50KHN0YWNrLCAnQWdlbnQnLCB7XG4gICAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICAgIGFnZW50RGVmaW5pdGlvbjoge1xuICAgICAgICAgIGJlZHJvY2tNb2RlbDogeyBmbU1vZGVsSWQ6IHRlc3RNb2RlbCB9LFxuICAgICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgICAgfSxcbiAgICAgICAgaG9zdGluZ0FkYXB0ZXI6IG5ldyBBZ2VudENvcmVSdW50aW1lSG9zdGluZ0FkYXB0ZXIoe1xuICAgICAgICAgIGNvbnRhaW5lckltYWdlVXJpOiAnMTIzNDU2Nzg5MDEyLmRrci5lY3IudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20vbXktYWdlbnQ6bGF0ZXN0JyxcbiAgICAgICAgICBuZXR3b3JrTW9kZTogTmV0d29ya01vZGUuVlBDLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgIH0pLnRvVGhyb3coL3N1Ym5ldHMvKTtcbiAgfSk7XG5cbiAgdGVzdCgnVlBDIG1vZGUgdGhyb3dzIHdoZW4gbm8gc2VjdXJpdHkgZ3JvdXBzIGNhbiBiZSByZXNvbHZlZCcsICgpID0+IHtcbiAgICAvLyBQcm92aWRlIGEgbmV0d29yayBzbyBzdWJuZXRzIHJlc29sdmUsIGJ1dCBkb24ndCBwcm92aWRlIHNlY3VyaXR5R3JvdXBzXG4gICAgLy8gYW5kIG1vY2sgdGhlIG5ldHdvcmsgc28gaXQgZG9lc24ndCBhdXRvLWNyZWF0ZSBvbmVcbiAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgbmV0d29yayA9IG5ldyBOZXR3b3JrKHN0YWNrLCAnVGVzdE5ldHdvcmsyJywgeyBtYXhBenM6IDIsIG5hdEdhdGV3YXlzOiAxIH0pO1xuICAgICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgICAgYWdlbnROYW1lOiAnVGVzdEFnZW50JyxcbiAgICAgICAgYWdlbnREZWZpbml0aW9uOiB7XG4gICAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgICAgc3lzdGVtUHJvbXB0LFxuICAgICAgICB9LFxuICAgICAgICBuZXR3b3JrLFxuICAgICAgICBob3N0aW5nQWRhcHRlcjogbmV3IEFnZW50Q29yZVJ1bnRpbWVIb3N0aW5nQWRhcHRlcih7XG4gICAgICAgICAgY29udGFpbmVySW1hZ2VVcmk6ICcxMjM0NTY3ODkwMTIuZGtyLmVjci51cy1lYXN0LTEuYW1hem9uYXdzLmNvbS9teS1hZ2VudDpsYXRlc3QnLFxuICAgICAgICAgIG5ldHdvcmtNb2RlOiBOZXR3b3JrTW9kZS5WUEMsXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gICAgfSkubm90LnRvVGhyb3coKTsgLy8gTmV0d29yayBhdXRvLWNyZWF0ZXMgYSBzZWN1cml0eSBncm91cCwgc28gdGhpcyBzaG91bGQgc3VjY2VlZFxuICB9KTtcblxuICB0ZXN0KCdQVUJMSUMgbW9kZSBkb2VzIG5vdCBzZXQgTmV0d29ya01vZGVDb25maWcnLCAoKSA9PiB7XG4gICAgbmV3IEludGVyYWN0aXZlQWdlbnQoc3RhY2ssICdBZ2VudCcsIHtcbiAgICAgIGFnZW50TmFtZTogJ1Rlc3RBZ2VudCcsXG4gICAgICBhZ2VudERlZmluaXRpb246IHtcbiAgICAgICAgYmVkcm9ja01vZGVsOiB7IGZtTW9kZWxJZDogdGVzdE1vZGVsIH0sXG4gICAgICAgIHN5c3RlbVByb21wdCxcbiAgICAgIH0sXG4gICAgICBob3N0aW5nQWRhcHRlcjogbmV3IEFnZW50Q29yZVJ1bnRpbWVIb3N0aW5nQWRhcHRlcih7XG4gICAgICAgIGNvbnRhaW5lckltYWdlVXJpOiAnMTIzNDU2Nzg5MDEyLmRrci5lY3IudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20vbXktYWdlbnQ6bGF0ZXN0JyxcbiAgICAgICAgbmV0d29ya01vZGU6IE5ldHdvcmtNb2RlLlBVQkxJQyxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpSdW50aW1lJywge1xuICAgICAgTmV0d29ya0NvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgTmV0d29ya01vZGU6ICdQVUJMSUMnLFxuICAgICAgICBOZXR3b3JrTW9kZUNvbmZpZzogTWF0Y2guYWJzZW50KCksXG4gICAgICB9LFxuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19