p6-cdk-s3-protector 0.0.49 → 0.0.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +68 -10
- package/README.md +1 -1
- package/lib/p6cdks3protector.js +1 -1
- package/node_modules/@aws/lambda-invoke-store/dist-cjs/invoke-store.js +2 -7
- package/node_modules/@aws/lambda-invoke-store/dist-es/invoke-store.js +2 -7
- package/node_modules/@aws/lambda-invoke-store/dist-types/invoke-store.d.ts +3 -4
- package/node_modules/@aws/lambda-invoke-store/package.json +2 -1
- package/node_modules/@aws-sdk/client-s3/README.md +13 -107
- package/node_modules/@aws-sdk/client-s3/dist-cjs/auth/httpAuthSchemeProvider.js +8 -9
- package/node_modules/@aws-sdk/client-s3/dist-cjs/endpoint/ruleset.js +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-cjs/index.js +2959 -9401
- package/node_modules/@aws-sdk/client-s3/dist-cjs/runtimeConfig.browser.js +3 -4
- package/node_modules/@aws-sdk/client-s3/dist-cjs/runtimeConfig.js +7 -12
- package/node_modules/@aws-sdk/client-s3/dist-cjs/runtimeConfig.shared.js +7 -5
- package/node_modules/@aws-sdk/client-s3/dist-es/S3.js +4 -0
- package/node_modules/@aws-sdk/client-s3/dist-es/S3Client.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/auth/httpAuthSchemeProvider.js +8 -9
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/AbortMultipartUploadCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/CompleteMultipartUploadCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/CopyObjectCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/CreateBucketCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/CreateBucketMetadataConfigurationCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/CreateBucketMetadataTableConfigurationCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/CreateMultipartUploadCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/CreateSessionCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/DeleteBucketAnalyticsConfigurationCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/DeleteBucketCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/DeleteBucketCorsCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/DeleteBucketEncryptionCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/DeleteBucketIntelligentTieringConfigurationCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/DeleteBucketInventoryConfigurationCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/DeleteBucketLifecycleCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/DeleteBucketMetadataConfigurationCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/DeleteBucketMetadataTableConfigurationCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/DeleteBucketMetricsConfigurationCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/DeleteBucketOwnershipControlsCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/DeleteBucketPolicyCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/DeleteBucketReplicationCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/DeleteBucketTaggingCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/DeleteBucketWebsiteCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/DeleteObjectCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/DeleteObjectTaggingCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/DeleteObjectsCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/DeletePublicAccessBlockCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetBucketAbacCommand.js +23 -0
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetBucketAccelerateConfigurationCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetBucketAclCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetBucketAnalyticsConfigurationCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetBucketCorsCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetBucketEncryptionCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetBucketIntelligentTieringConfigurationCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetBucketInventoryConfigurationCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetBucketLifecycleConfigurationCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetBucketLocationCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetBucketLoggingCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetBucketMetadataConfigurationCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetBucketMetadataTableConfigurationCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetBucketMetricsConfigurationCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetBucketNotificationConfigurationCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetBucketOwnershipControlsCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetBucketPolicyCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetBucketPolicyStatusCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetBucketReplicationCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetBucketRequestPaymentCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetBucketTaggingCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetBucketVersioningCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetBucketWebsiteCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetObjectAclCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetObjectAttributesCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetObjectCommand.js +4 -4
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetObjectLegalHoldCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetObjectLockConfigurationCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetObjectRetentionCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetObjectTaggingCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetObjectTorrentCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/GetPublicAccessBlockCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/HeadBucketCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/HeadObjectCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/ListBucketAnalyticsConfigurationsCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/ListBucketIntelligentTieringConfigurationsCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/ListBucketInventoryConfigurationsCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/ListBucketMetricsConfigurationsCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/ListBucketsCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/ListDirectoryBucketsCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/ListMultipartUploadsCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/ListObjectVersionsCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/ListObjectsCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/ListObjectsV2Command.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/ListPartsCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutBucketAbacCommand.js +26 -0
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutBucketAccelerateConfigurationCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutBucketAclCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutBucketAnalyticsConfigurationCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutBucketCorsCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutBucketEncryptionCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutBucketIntelligentTieringConfigurationCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutBucketInventoryConfigurationCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutBucketLifecycleConfigurationCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutBucketLoggingCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutBucketMetricsConfigurationCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutBucketNotificationConfigurationCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutBucketOwnershipControlsCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutBucketPolicyCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutBucketReplicationCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutBucketRequestPaymentCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutBucketTaggingCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutBucketVersioningCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutBucketWebsiteCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutObjectAclCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutObjectCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutObjectLegalHoldCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutObjectLockConfigurationCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutObjectRetentionCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutObjectTaggingCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/PutPublicAccessBlockCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/RenameObjectCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/RestoreObjectCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/SelectObjectContentCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/UpdateBucketMetadataInventoryTableConfigurationCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/UpdateBucketMetadataJournalTableConfigurationCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/UploadPartCommand.js +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/UploadPartCopyCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/WriteGetObjectResponseCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-es/commands/index.js +2 -0
- package/node_modules/@aws-sdk/client-s3/dist-es/endpoint/EndpointParameters.js +2 -0
- package/node_modules/@aws-sdk/client-s3/dist-es/endpoint/ruleset.js +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-es/index.js +5 -1
- package/node_modules/@aws-sdk/client-s3/dist-es/models/enums.js +399 -0
- package/node_modules/@aws-sdk/client-s3/dist-es/models/errors.js +173 -0
- package/node_modules/@aws-sdk/client-s3/dist-es/models/models_0.js +1 -436
- package/node_modules/@aws-sdk/client-s3/dist-es/models/models_1.js +1 -126
- package/node_modules/@aws-sdk/client-s3/dist-es/runtimeConfig.browser.js +3 -4
- package/node_modules/@aws-sdk/client-s3/dist-es/runtimeConfig.js +8 -13
- package/node_modules/@aws-sdk/client-s3/dist-es/runtimeConfig.shared.js +7 -5
- package/node_modules/@aws-sdk/client-s3/dist-es/schemas/schemas_0.js +1714 -8795
- package/node_modules/@aws-sdk/client-s3/dist-es/waiters/waitForBucketExists.js +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-es/waiters/waitForBucketNotExists.js +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-es/waiters/waitForObjectExists.js +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-es/waiters/waitForObjectNotExists.js +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/S3.d.ts +15 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/S3Client.d.ts +16 -23
- package/node_modules/@aws-sdk/client-s3/dist-types/auth/httpAuthExtensionConfiguration.d.ts +2 -2
- package/node_modules/@aws-sdk/client-s3/dist-types/auth/httpAuthSchemeProvider.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/AbortMultipartUploadCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/CompleteMultipartUploadCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/CopyObjectCommand.d.ts +9 -9
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/CreateBucketCommand.d.ts +4 -9
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/CreateBucketMetadataConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/CreateBucketMetadataTableConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/CreateMultipartUploadCommand.d.ts +4 -4
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/CreateSessionCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketAnalyticsConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketCorsCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketEncryptionCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketIntelligentTieringConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketInventoryConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketLifecycleCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketMetadataConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketMetadataTableConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketMetricsConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketOwnershipControlsCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketPolicyCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketReplicationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketTaggingCommand.d.ts +5 -4
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteBucketWebsiteCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteObjectCommand.d.ts +11 -6
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteObjectTaggingCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/DeleteObjectsCommand.d.ts +8 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/DeletePublicAccessBlockCommand.d.ts +9 -7
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketAbacCommand.d.ts +77 -0
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketAccelerateConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketAclCommand.d.ts +4 -11
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketAnalyticsConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketCorsCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketEncryptionCommand.d.ts +10 -5
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketIntelligentTieringConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketInventoryConfigurationCommand.d.ts +4 -4
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketLifecycleConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketLocationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketLoggingCommand.d.ts +4 -11
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketMetadataConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketMetadataTableConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketMetricsConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketNotificationConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketOwnershipControlsCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketPolicyCommand.d.ts +4 -4
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketPolicyStatusCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketReplicationCommand.d.ts +4 -4
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketRequestPaymentCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketTaggingCommand.d.ts +5 -4
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketVersioningCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetBucketWebsiteCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetObjectAclCommand.d.ts +4 -11
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetObjectAttributesCommand.d.ts +4 -4
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetObjectCommand.d.ts +4 -4
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetObjectLegalHoldCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetObjectLockConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetObjectRetentionCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetObjectTaggingCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetObjectTorrentCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/GetPublicAccessBlockCommand.d.ts +17 -12
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/HeadBucketCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/HeadObjectCommand.d.ts +4 -4
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/ListBucketAnalyticsConfigurationsCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/ListBucketIntelligentTieringConfigurationsCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/ListBucketInventoryConfigurationsCommand.d.ts +4 -4
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/ListBucketMetricsConfigurationsCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/ListBucketsCommand.d.ts +4 -11
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/ListDirectoryBucketsCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/ListMultipartUploadsCommand.d.ts +5 -12
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/ListObjectVersionsCommand.d.ts +4 -11
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/ListObjectsCommand.d.ts +5 -12
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/ListObjectsV2Command.d.ts +5 -12
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/ListPartsCommand.d.ts +5 -12
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketAbacCommand.d.ts +78 -0
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketAccelerateConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketAclCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketAnalyticsConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketCorsCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketEncryptionCommand.d.ts +9 -4
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketIntelligentTieringConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketInventoryConfigurationCommand.d.ts +4 -4
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketLifecycleConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketLoggingCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketMetricsConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketNotificationConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketOwnershipControlsCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketPolicyCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketReplicationCommand.d.ts +4 -4
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketRequestPaymentCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketTaggingCommand.d.ts +4 -4
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketVersioningCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutBucketWebsiteCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutObjectAclCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutObjectCommand.d.ts +4 -4
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutObjectLegalHoldCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutObjectLockConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutObjectRetentionCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutObjectTaggingCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/PutPublicAccessBlockCommand.d.ts +10 -8
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/RenameObjectCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/RestoreObjectCommand.d.ts +5 -4
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/SelectObjectContentCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/UpdateBucketMetadataInventoryTableConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/UpdateBucketMetadataJournalTableConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/UploadPartCommand.d.ts +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/UploadPartCopyCommand.d.ts +6 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/WriteGetObjectResponseCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/commands/index.d.ts +2 -0
- package/node_modules/@aws-sdk/client-s3/dist-types/endpoint/EndpointParameters.d.ts +16 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/endpoint/endpointResolver.d.ts +5 -2
- package/node_modules/@aws-sdk/client-s3/dist-types/extensionConfiguration.d.ts +4 -4
- package/node_modules/@aws-sdk/client-s3/dist-types/index.d.ts +5 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/models/S3ServiceException.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/models/enums.d.ts +975 -0
- package/node_modules/@aws-sdk/client-s3/dist-types/models/errors.d.ts +207 -0
- package/node_modules/@aws-sdk/client-s3/dist-types/models/models_0.d.ts +3686 -1016
- package/node_modules/@aws-sdk/client-s3/dist-types/models/models_1.d.ts +3 -3790
- package/node_modules/@aws-sdk/client-s3/dist-types/pagination/Interfaces.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/pagination/ListBucketsPaginator.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/pagination/ListDirectoryBucketsPaginator.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/pagination/ListObjectsV2Paginator.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/pagination/ListPartsPaginator.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/runtimeConfig.browser.d.ts +10 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/runtimeConfig.d.ts +10 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/runtimeConfig.native.d.ts +10 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/runtimeConfig.shared.d.ts +6 -2
- package/node_modules/@aws-sdk/client-s3/dist-types/runtimeExtensions.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/schemas/schemas_0.d.ts +451 -494
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/S3.d.ts +34 -0
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/S3Client.d.ts +18 -10
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/auth/httpAuthExtensionConfiguration.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/auth/httpAuthSchemeProvider.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/GetBucketAbacCommand.d.ts +47 -0
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/GetObjectCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/GetObjectTorrentCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/ListObjectVersionsCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/ListObjectsCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/ListObjectsV2Command.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/ListPartsCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutBucketAbacCommand.d.ts +45 -0
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutBucketAccelerateConfigurationCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutBucketAclCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutBucketAnalyticsConfigurationCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutBucketCorsCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutBucketEncryptionCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutBucketIntelligentTieringConfigurationCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutBucketInventoryConfigurationCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutBucketLifecycleConfigurationCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutBucketLoggingCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutBucketMetricsConfigurationCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutBucketNotificationConfigurationCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutBucketOwnershipControlsCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutBucketPolicyCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutBucketReplicationCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutBucketRequestPaymentCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutBucketTaggingCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutBucketVersioningCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutBucketWebsiteCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutObjectAclCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutObjectCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutObjectLegalHoldCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutObjectLockConfigurationCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutObjectRetentionCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutObjectTaggingCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/PutPublicAccessBlockCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/RenameObjectCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/RestoreObjectCommand.d.ts +2 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/commands/index.d.ts +2 -0
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/endpoint/EndpointParameters.d.ts +6 -0
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/index.d.ts +5 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/models/S3ServiceException.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/models/enums.d.ts +523 -0
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/models/errors.d.ts +87 -0
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/models/models_0.d.ts +603 -487
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/models/models_1.d.ts +14 -657
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/runtimeConfig.browser.d.ts +15 -7
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/runtimeConfig.d.ts +15 -7
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/runtimeConfig.native.d.ts +15 -7
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/runtimeConfig.shared.d.ts +7 -5
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/schemas/schemas_0.d.ts +451 -495
- package/node_modules/@aws-sdk/client-s3/package.json +53 -52
- package/node_modules/@aws-sdk/client-s3-control/README.md +1 -102
- package/node_modules/@aws-sdk/client-s3-control/dist-cjs/auth/httpAuthSchemeProvider.js +3 -4
- package/node_modules/@aws-sdk/client-s3-control/dist-cjs/index.js +2605 -4776
- package/node_modules/@aws-sdk/client-s3-control/dist-cjs/runtimeConfig.browser.js +3 -4
- package/node_modules/@aws-sdk/client-s3-control/dist-cjs/runtimeConfig.js +5 -8
- package/node_modules/@aws-sdk/client-s3-control/dist-cjs/runtimeConfig.shared.js +7 -5
- package/node_modules/@aws-sdk/client-s3-control/dist-es/S3ControlClient.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/auth/httpAuthSchemeProvider.js +3 -4
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/AssociateAccessGrantsIdentityCenterCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/CreateAccessGrantCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/CreateAccessGrantsInstanceCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/CreateAccessGrantsLocationCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/CreateAccessPointCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/CreateAccessPointForObjectLambdaCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/CreateBucketCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/CreateJobCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/CreateMultiRegionAccessPointCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/CreateStorageLensGroupCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/DeleteAccessGrantCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/DeleteAccessGrantsInstanceCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/DeleteAccessGrantsInstanceResourcePolicyCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/DeleteAccessGrantsLocationCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/DeleteAccessPointCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/DeleteAccessPointForObjectLambdaCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/DeleteAccessPointPolicyCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/DeleteAccessPointPolicyForObjectLambdaCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/DeleteAccessPointScopeCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/DeleteBucketCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/DeleteBucketLifecycleConfigurationCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/DeleteBucketPolicyCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/DeleteBucketReplicationCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/DeleteBucketTaggingCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/DeleteJobTaggingCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/DeleteMultiRegionAccessPointCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/DeletePublicAccessBlockCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/DeleteStorageLensConfigurationCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/DeleteStorageLensConfigurationTaggingCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/DeleteStorageLensGroupCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/DescribeJobCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/DescribeMultiRegionAccessPointOperationCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/DissociateAccessGrantsIdentityCenterCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetAccessGrantCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetAccessGrantsInstanceCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetAccessGrantsInstanceForPrefixCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetAccessGrantsInstanceResourcePolicyCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetAccessGrantsLocationCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetAccessPointCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetAccessPointConfigurationForObjectLambdaCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetAccessPointForObjectLambdaCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetAccessPointPolicyCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetAccessPointPolicyForObjectLambdaCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetAccessPointPolicyStatusCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetAccessPointPolicyStatusForObjectLambdaCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetAccessPointScopeCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetBucketCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetBucketLifecycleConfigurationCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetBucketPolicyCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetBucketReplicationCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetBucketTaggingCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetBucketVersioningCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetDataAccessCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetJobTaggingCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetMultiRegionAccessPointCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetMultiRegionAccessPointPolicyCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetMultiRegionAccessPointPolicyStatusCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetMultiRegionAccessPointRoutesCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetPublicAccessBlockCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetStorageLensConfigurationCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetStorageLensConfigurationTaggingCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/GetStorageLensGroupCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/ListAccessGrantsCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/ListAccessGrantsInstancesCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/ListAccessGrantsLocationsCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/ListAccessPointsCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/ListAccessPointsForDirectoryBucketsCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/ListAccessPointsForObjectLambdaCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/ListCallerAccessGrantsCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/ListJobsCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/ListMultiRegionAccessPointsCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/ListRegionalBucketsCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/ListStorageLensConfigurationsCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/ListStorageLensGroupsCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/ListTagsForResourceCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/PutAccessGrantsInstanceResourcePolicyCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/PutAccessPointConfigurationForObjectLambdaCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/PutAccessPointPolicyCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/PutAccessPointPolicyForObjectLambdaCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/PutAccessPointScopeCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/PutBucketLifecycleConfigurationCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/PutBucketPolicyCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/PutBucketReplicationCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/PutBucketTaggingCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/PutBucketVersioningCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/PutJobTaggingCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/PutMultiRegionAccessPointPolicyCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/PutPublicAccessBlockCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/PutStorageLensConfigurationCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/PutStorageLensConfigurationTaggingCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/SubmitMultiRegionAccessPointRoutesCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/TagResourceCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/UntagResourceCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/UpdateAccessGrantsLocationCommand.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/UpdateJobPriorityCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/UpdateJobStatusCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/commands/UpdateStorageLensGroupCommand.js +6 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-es/index.js +5 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-es/models/enums.js +281 -0
- package/node_modules/@aws-sdk/client-s3-control/dist-es/models/errors.js +165 -0
- package/node_modules/@aws-sdk/client-s3-control/dist-es/models/models_0.js +1 -370
- package/node_modules/@aws-sdk/client-s3-control/dist-es/models/models_1.js +1 -77
- package/node_modules/@aws-sdk/client-s3-control/dist-es/pagination/index.js +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/runtimeConfig.browser.js +3 -4
- package/node_modules/@aws-sdk/client-s3-control/dist-es/runtimeConfig.js +6 -9
- package/node_modules/@aws-sdk/client-s3-control/dist-es/runtimeConfig.shared.js +7 -5
- package/node_modules/@aws-sdk/client-s3-control/dist-es/schemas/schemas_0.js +1552 -4315
- package/node_modules/@aws-sdk/client-s3-control/dist-types/S3Control.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/S3ControlClient.d.ts +11 -20
- package/node_modules/@aws-sdk/client-s3-control/dist-types/auth/httpAuthExtensionConfiguration.d.ts +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-types/auth/httpAuthSchemeProvider.d.ts +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/AssociateAccessGrantsIdentityCenterCommand.d.ts +6 -16
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/CreateAccessGrantCommand.d.ts +6 -15
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/CreateAccessGrantsInstanceCommand.d.ts +6 -14
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/CreateAccessGrantsLocationCommand.d.ts +7 -17
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/CreateAccessPointCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/CreateAccessPointForObjectLambdaCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/CreateBucketCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/CreateJobCommand.d.ts +5 -9
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/CreateMultiRegionAccessPointCommand.d.ts +4 -8
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/CreateStorageLensGroupCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/DeleteAccessGrantCommand.d.ts +5 -10
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/DeleteAccessGrantsInstanceCommand.d.ts +5 -13
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/DeleteAccessGrantsInstanceResourcePolicyCommand.d.ts +5 -11
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/DeleteAccessGrantsLocationCommand.d.ts +5 -13
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/DeleteAccessPointCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/DeleteAccessPointForObjectLambdaCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/DeleteAccessPointPolicyCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/DeleteAccessPointPolicyForObjectLambdaCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/DeleteAccessPointScopeCommand.d.ts +7 -11
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/DeleteBucketCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/DeleteBucketLifecycleConfigurationCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/DeleteBucketPolicyCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/DeleteBucketReplicationCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/DeleteBucketTaggingCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/DeleteJobTaggingCommand.d.ts +8 -10
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/DeleteMultiRegionAccessPointCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/DeletePublicAccessBlockCommand.d.ts +8 -7
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/DeleteStorageLensConfigurationCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/DeleteStorageLensConfigurationTaggingCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/DeleteStorageLensGroupCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/DescribeJobCommand.d.ts +4 -8
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/DescribeMultiRegionAccessPointOperationCommand.d.ts +4 -8
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/DissociateAccessGrantsIdentityCenterCommand.d.ts +5 -10
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetAccessGrantCommand.d.ts +4 -8
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetAccessGrantsInstanceCommand.d.ts +4 -8
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetAccessGrantsInstanceForPrefixCommand.d.ts +6 -11
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetAccessGrantsInstanceResourcePolicyCommand.d.ts +4 -8
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetAccessGrantsLocationCommand.d.ts +4 -8
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetAccessPointCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetAccessPointConfigurationForObjectLambdaCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetAccessPointForObjectLambdaCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetAccessPointPolicyCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetAccessPointPolicyForObjectLambdaCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetAccessPointPolicyStatusCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetAccessPointPolicyStatusForObjectLambdaCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetAccessPointScopeCommand.d.ts +6 -9
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetBucketCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetBucketLifecycleConfigurationCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetBucketPolicyCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetBucketReplicationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetBucketTaggingCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetBucketVersioningCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetDataAccessCommand.d.ts +6 -15
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetJobTaggingCommand.d.ts +8 -9
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetMultiRegionAccessPointCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetMultiRegionAccessPointPolicyCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetMultiRegionAccessPointPolicyStatusCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetMultiRegionAccessPointRoutesCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetPublicAccessBlockCommand.d.ts +6 -8
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetStorageLensConfigurationCommand.d.ts +43 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetStorageLensConfigurationTaggingCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/GetStorageLensGroupCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/ListAccessGrantsCommand.d.ts +4 -8
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/ListAccessGrantsInstancesCommand.d.ts +5 -11
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/ListAccessGrantsLocationsCommand.d.ts +4 -8
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/ListAccessPointsCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/ListAccessPointsForDirectoryBucketsCommand.d.ts +5 -10
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/ListAccessPointsForObjectLambdaCommand.d.ts +3 -7
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/ListCallerAccessGrantsCommand.d.ts +5 -18
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/ListJobsCommand.d.ts +6 -8
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/ListMultiRegionAccessPointsCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/ListRegionalBucketsCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/ListStorageLensConfigurationsCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/ListStorageLensGroupsCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/ListTagsForResourceCommand.d.ts +13 -17
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/PutAccessGrantsInstanceResourcePolicyCommand.d.ts +4 -8
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/PutAccessPointConfigurationForObjectLambdaCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/PutAccessPointPolicyCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/PutAccessPointPolicyForObjectLambdaCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/PutAccessPointScopeCommand.d.ts +6 -13
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/PutBucketLifecycleConfigurationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/PutBucketPolicyCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/PutBucketReplicationCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/PutBucketTaggingCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/PutBucketVersioningCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/PutJobTaggingCommand.d.ts +7 -9
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/PutMultiRegionAccessPointPolicyCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/PutPublicAccessBlockCommand.d.ts +8 -7
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/PutStorageLensConfigurationCommand.d.ts +43 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/PutStorageLensConfigurationTaggingCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/SubmitMultiRegionAccessPointRoutesCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/TagResourceCommand.d.ts +10 -33
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/UntagResourceCommand.d.ts +12 -16
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/UpdateAccessGrantsLocationCommand.d.ts +4 -8
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/UpdateJobPriorityCommand.d.ts +6 -8
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/UpdateJobStatusCommand.d.ts +6 -7
- package/node_modules/@aws-sdk/client-s3-control/dist-types/commands/UpdateStorageLensGroupCommand.d.ts +3 -6
- package/node_modules/@aws-sdk/client-s3-control/dist-types/endpoint/EndpointParameters.d.ts +13 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/endpoint/endpointResolver.d.ts +5 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-types/extensionConfiguration.d.ts +4 -4
- package/node_modules/@aws-sdk/client-s3-control/dist-types/index.d.ts +5 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/models/S3ControlServiceException.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/models/enums.d.ts +689 -0
- package/node_modules/@aws-sdk/client-s3-control/dist-types/models/errors.d.ts +160 -0
- package/node_modules/@aws-sdk/client-s3-control/dist-types/models/models_0.d.ts +1408 -1265
- package/node_modules/@aws-sdk/client-s3-control/dist-types/models/models_1.d.ts +2 -1217
- package/node_modules/@aws-sdk/client-s3-control/dist-types/pagination/Interfaces.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/pagination/ListAccessGrantsInstancesPaginator.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/pagination/ListAccessGrantsLocationsPaginator.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/pagination/ListAccessGrantsPaginator.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/pagination/ListAccessPointsForDirectoryBucketsPaginator.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/pagination/ListAccessPointsForObjectLambdaPaginator.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/pagination/ListAccessPointsPaginator.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/pagination/ListCallerAccessGrantsPaginator.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/pagination/ListJobsPaginator.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/pagination/ListMultiRegionAccessPointsPaginator.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/pagination/ListRegionalBucketsPaginator.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/pagination/ListStorageLensConfigurationsPaginator.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/pagination/ListStorageLensGroupsPaginator.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/pagination/index.d.ts +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-types/runtimeConfig.browser.d.ts +7 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-types/runtimeConfig.d.ts +7 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-types/runtimeConfig.native.d.ts +7 -3
- package/node_modules/@aws-sdk/client-s3-control/dist-types/runtimeConfig.shared.d.ts +6 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-types/runtimeExtensions.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/schemas/schemas_0.d.ts +413 -460
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/S3ControlClient.d.ts +3 -7
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/auth/httpAuthExtensionConfiguration.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/ListAccessPointsForObjectLambdaCommand.d.ts +4 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/ListCallerAccessGrantsCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/ListJobsCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/ListMultiRegionAccessPointsCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/ListRegionalBucketsCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/ListStorageLensConfigurationsCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/ListStorageLensGroupsCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/ListTagsForResourceCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/PutAccessGrantsInstanceResourcePolicyCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/PutAccessPointConfigurationForObjectLambdaCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/PutAccessPointPolicyCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/PutAccessPointPolicyForObjectLambdaCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/PutAccessPointScopeCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/PutBucketLifecycleConfigurationCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/PutBucketPolicyCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/PutBucketReplicationCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/PutBucketTaggingCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/PutBucketVersioningCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/PutJobTaggingCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/PutMultiRegionAccessPointPolicyCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/PutPublicAccessBlockCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/PutStorageLensConfigurationCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/PutStorageLensConfigurationTaggingCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/SubmitMultiRegionAccessPointRoutesCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/TagResourceCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/UntagResourceCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/UpdateAccessGrantsLocationCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/UpdateJobPriorityCommand.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/commands/UpdateJobStatusCommand.d.ts +2 -4
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/index.d.ts +5 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/models/S3ControlServiceException.d.ts +1 -1
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/models/enums.d.ts +371 -0
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/models/errors.d.ts +95 -0
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/models/models_0.d.ts +315 -412
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/models/models_1.d.ts +2 -320
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/pagination/index.d.ts +2 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/runtimeConfig.browser.d.ts +9 -7
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/runtimeConfig.d.ts +9 -7
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/runtimeConfig.native.d.ts +9 -7
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/runtimeConfig.shared.d.ts +7 -5
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/schemas/schemas_0.d.ts +413 -461
- package/node_modules/@aws-sdk/client-s3-control/package.json +43 -42
- package/node_modules/@aws-sdk/client-sso/README.md +1 -9
- package/node_modules/@aws-sdk/client-sso/dist-cjs/auth/httpAuthSchemeProvider.js +27 -20
- package/node_modules/@aws-sdk/client-sso/dist-cjs/index.js +105 -199
- package/node_modules/@aws-sdk/client-sso/dist-cjs/runtimeConfig.browser.js +3 -4
- package/node_modules/@aws-sdk/client-sso/dist-cjs/runtimeConfig.js +5 -8
- package/node_modules/@aws-sdk/client-sso/dist-cjs/runtimeConfig.shared.js +6 -1
- package/node_modules/@aws-sdk/client-sso/dist-es/SSOClient.js +2 -2
- package/node_modules/@aws-sdk/client-sso/dist-es/auth/httpAuthSchemeProvider.js +27 -20
- package/node_modules/@aws-sdk/client-sso/dist-es/commands/GetRoleCredentialsCommand.js +2 -2
- package/node_modules/@aws-sdk/client-sso/dist-es/commands/ListAccountRolesCommand.js +2 -2
- package/node_modules/@aws-sdk/client-sso/dist-es/commands/ListAccountsCommand.js +2 -2
- package/node_modules/@aws-sdk/client-sso/dist-es/commands/LogoutCommand.js +2 -2
- package/node_modules/@aws-sdk/client-sso/dist-es/index.js +3 -1
- package/node_modules/@aws-sdk/client-sso/dist-es/models/errors.js +49 -0
- package/node_modules/@aws-sdk/client-sso/dist-es/models/models_0.js +1 -49
- package/node_modules/@aws-sdk/client-sso/dist-es/runtimeConfig.browser.js +3 -4
- package/node_modules/@aws-sdk/client-sso/dist-es/runtimeConfig.js +6 -9
- package/node_modules/@aws-sdk/client-sso/dist-es/runtimeConfig.shared.js +6 -1
- package/node_modules/@aws-sdk/client-sso/dist-es/schemas/schemas_0.js +73 -186
- package/node_modules/@aws-sdk/client-sso/dist-types/SSO.d.ts +1 -1
- package/node_modules/@aws-sdk/client-sso/dist-types/SSOClient.d.ts +10 -19
- package/node_modules/@aws-sdk/client-sso/dist-types/auth/httpAuthExtensionConfiguration.d.ts +2 -2
- package/node_modules/@aws-sdk/client-sso/dist-types/auth/httpAuthSchemeProvider.d.ts +2 -2
- package/node_modules/@aws-sdk/client-sso/dist-types/commands/GetRoleCredentialsCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-sso/dist-types/commands/ListAccountRolesCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-sso/dist-types/commands/ListAccountsCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-sso/dist-types/commands/LogoutCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-sso/dist-types/endpoint/EndpointParameters.d.ts +13 -1
- package/node_modules/@aws-sdk/client-sso/dist-types/endpoint/endpointResolver.d.ts +5 -2
- package/node_modules/@aws-sdk/client-sso/dist-types/extensionConfiguration.d.ts +4 -4
- package/node_modules/@aws-sdk/client-sso/dist-types/index.d.ts +3 -1
- package/node_modules/@aws-sdk/client-sso/dist-types/models/SSOServiceException.d.ts +1 -1
- package/node_modules/@aws-sdk/client-sso/dist-types/models/errors.d.ts +53 -0
- package/node_modules/@aws-sdk/client-sso/dist-types/models/models_0.d.ts +0 -53
- package/node_modules/@aws-sdk/client-sso/dist-types/pagination/Interfaces.d.ts +1 -1
- package/node_modules/@aws-sdk/client-sso/dist-types/pagination/ListAccountRolesPaginator.d.ts +1 -1
- package/node_modules/@aws-sdk/client-sso/dist-types/pagination/ListAccountsPaginator.d.ts +1 -1
- package/node_modules/@aws-sdk/client-sso/dist-types/runtimeConfig.browser.d.ts +7 -3
- package/node_modules/@aws-sdk/client-sso/dist-types/runtimeConfig.d.ts +7 -3
- package/node_modules/@aws-sdk/client-sso/dist-types/runtimeConfig.native.d.ts +7 -3
- package/node_modules/@aws-sdk/client-sso/dist-types/runtimeConfig.shared.d.ts +8 -3
- package/node_modules/@aws-sdk/client-sso/dist-types/runtimeExtensions.d.ts +1 -1
- package/node_modules/@aws-sdk/client-sso/dist-types/schemas/schemas_0.d.ts +20 -26
- package/node_modules/@aws-sdk/client-sso/dist-types/ts3.4/SSOClient.d.ts +2 -6
- package/node_modules/@aws-sdk/client-sso/dist-types/ts3.4/auth/httpAuthExtensionConfiguration.d.ts +1 -1
- package/node_modules/@aws-sdk/client-sso/dist-types/ts3.4/index.d.ts +3 -1
- package/node_modules/@aws-sdk/client-sso/dist-types/ts3.4/models/SSOServiceException.d.ts +1 -1
- package/node_modules/@aws-sdk/client-sso/dist-types/ts3.4/models/errors.d.ts +30 -0
- package/node_modules/@aws-sdk/client-sso/dist-types/ts3.4/models/models_0.d.ts +0 -30
- package/node_modules/@aws-sdk/client-sso/dist-types/ts3.4/runtimeConfig.browser.d.ts +9 -5
- package/node_modules/@aws-sdk/client-sso/dist-types/ts3.4/runtimeConfig.d.ts +9 -5
- package/node_modules/@aws-sdk/client-sso/dist-types/ts3.4/runtimeConfig.native.d.ts +9 -5
- package/node_modules/@aws-sdk/client-sso/dist-types/ts3.4/runtimeConfig.shared.d.ts +9 -4
- package/node_modules/@aws-sdk/client-sso/dist-types/ts3.4/schemas/schemas_0.d.ts +19 -27
- package/node_modules/@aws-sdk/client-sso/package.json +37 -36
- package/node_modules/@aws-sdk/client-sts/README.md +7 -15
- package/node_modules/@aws-sdk/client-sts/dist-cjs/auth/httpAuthSchemeProvider.js +15 -12
- package/node_modules/@aws-sdk/client-sts/dist-cjs/index.js +360 -287
- package/node_modules/@aws-sdk/client-sts/dist-cjs/runtimeConfig.browser.js +3 -4
- package/node_modules/@aws-sdk/client-sts/dist-cjs/runtimeConfig.js +6 -10
- package/node_modules/@aws-sdk/client-sts/dist-cjs/runtimeConfig.shared.js +7 -6
- package/node_modules/@aws-sdk/client-sts/dist-es/STS.js +2 -0
- package/node_modules/@aws-sdk/client-sts/dist-es/STSClient.js +2 -2
- package/node_modules/@aws-sdk/client-sts/dist-es/auth/httpAuthSchemeProvider.js +15 -12
- package/node_modules/@aws-sdk/client-sts/dist-es/commands/AssumeRoleCommand.js +2 -2
- package/node_modules/@aws-sdk/client-sts/dist-es/commands/AssumeRoleWithSAMLCommand.js +2 -2
- package/node_modules/@aws-sdk/client-sts/dist-es/commands/AssumeRoleWithWebIdentityCommand.js +2 -2
- package/node_modules/@aws-sdk/client-sts/dist-es/commands/AssumeRootCommand.js +2 -2
- package/node_modules/@aws-sdk/client-sts/dist-es/commands/DecodeAuthorizationMessageCommand.js +2 -2
- package/node_modules/@aws-sdk/client-sts/dist-es/commands/GetAccessKeyInfoCommand.js +2 -2
- package/node_modules/@aws-sdk/client-sts/dist-es/commands/GetCallerIdentityCommand.js +2 -2
- package/node_modules/@aws-sdk/client-sts/dist-es/commands/GetDelegatedAccessTokenCommand.js +2 -2
- package/node_modules/@aws-sdk/client-sts/dist-es/commands/GetFederationTokenCommand.js +2 -2
- package/node_modules/@aws-sdk/client-sts/dist-es/commands/GetSessionTokenCommand.js +2 -2
- package/node_modules/@aws-sdk/client-sts/dist-es/commands/GetWebIdentityTokenCommand.js +16 -0
- package/node_modules/@aws-sdk/client-sts/dist-es/commands/index.js +1 -0
- package/node_modules/@aws-sdk/client-sts/dist-es/defaultStsRoleAssumers.js +3 -2
- package/node_modules/@aws-sdk/client-sts/dist-es/index.js +3 -1
- package/node_modules/@aws-sdk/client-sts/dist-es/models/errors.js +145 -0
- package/node_modules/@aws-sdk/client-sts/dist-es/models/models_0.js +1 -109
- package/node_modules/@aws-sdk/client-sts/dist-es/runtimeConfig.browser.js +3 -4
- package/node_modules/@aws-sdk/client-sts/dist-es/runtimeConfig.js +7 -11
- package/node_modules/@aws-sdk/client-sts/dist-es/runtimeConfig.shared.js +7 -6
- package/node_modules/@aws-sdk/client-sts/dist-es/schemas/schemas_0.js +220 -252
- package/node_modules/@aws-sdk/client-sts/dist-types/STS.d.ts +8 -1
- package/node_modules/@aws-sdk/client-sts/dist-types/STSClient.d.ts +13 -21
- package/node_modules/@aws-sdk/client-sts/dist-types/auth/httpAuthExtensionConfiguration.d.ts +2 -2
- package/node_modules/@aws-sdk/client-sts/dist-types/auth/httpAuthSchemeProvider.d.ts +2 -2
- package/node_modules/@aws-sdk/client-sts/dist-types/commands/AssumeRoleCommand.d.ts +5 -6
- package/node_modules/@aws-sdk/client-sts/dist-types/commands/AssumeRoleWithSAMLCommand.d.ts +5 -6
- package/node_modules/@aws-sdk/client-sts/dist-types/commands/AssumeRoleWithWebIdentityCommand.d.ts +5 -6
- package/node_modules/@aws-sdk/client-sts/dist-types/commands/AssumeRootCommand.d.ts +5 -6
- package/node_modules/@aws-sdk/client-sts/dist-types/commands/DecodeAuthorizationMessageCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-sts/dist-types/commands/GetAccessKeyInfoCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-sts/dist-types/commands/GetCallerIdentityCommand.d.ts +3 -3
- package/node_modules/@aws-sdk/client-sts/dist-types/commands/GetDelegatedAccessTokenCommand.d.ts +22 -8
- package/node_modules/@aws-sdk/client-sts/dist-types/commands/GetFederationTokenCommand.d.ts +5 -6
- package/node_modules/@aws-sdk/client-sts/dist-types/commands/GetSessionTokenCommand.d.ts +5 -6
- package/node_modules/@aws-sdk/client-sts/dist-types/commands/GetWebIdentityTokenCommand.d.ts +98 -0
- package/node_modules/@aws-sdk/client-sts/dist-types/commands/index.d.ts +1 -0
- package/node_modules/@aws-sdk/client-sts/dist-types/endpoint/EndpointParameters.d.ts +13 -1
- package/node_modules/@aws-sdk/client-sts/dist-types/endpoint/endpointResolver.d.ts +5 -2
- package/node_modules/@aws-sdk/client-sts/dist-types/extensionConfiguration.d.ts +4 -4
- package/node_modules/@aws-sdk/client-sts/dist-types/index.d.ts +3 -1
- package/node_modules/@aws-sdk/client-sts/dist-types/models/STSServiceException.d.ts +1 -1
- package/node_modules/@aws-sdk/client-sts/dist-types/models/errors.d.ts +172 -0
- package/node_modules/@aws-sdk/client-sts/dist-types/models/models_0.d.ts +61 -137
- package/node_modules/@aws-sdk/client-sts/dist-types/runtimeConfig.browser.d.ts +7 -3
- package/node_modules/@aws-sdk/client-sts/dist-types/runtimeConfig.d.ts +8 -4
- package/node_modules/@aws-sdk/client-sts/dist-types/runtimeConfig.native.d.ts +7 -3
- package/node_modules/@aws-sdk/client-sts/dist-types/runtimeConfig.shared.d.ts +8 -3
- package/node_modules/@aws-sdk/client-sts/dist-types/runtimeExtensions.d.ts +1 -1
- package/node_modules/@aws-sdk/client-sts/dist-types/schemas/schemas_0.d.ts +53 -55
- package/node_modules/@aws-sdk/client-sts/dist-types/ts3.4/STS.d.ts +17 -0
- package/node_modules/@aws-sdk/client-sts/dist-types/ts3.4/STSClient.d.ts +11 -9
- package/node_modules/@aws-sdk/client-sts/dist-types/ts3.4/auth/httpAuthExtensionConfiguration.d.ts +1 -1
- package/node_modules/@aws-sdk/client-sts/dist-types/ts3.4/auth/httpAuthSchemeProvider.d.ts +1 -1
- package/node_modules/@aws-sdk/client-sts/dist-types/ts3.4/commands/GetWebIdentityTokenCommand.d.ts +51 -0
- package/node_modules/@aws-sdk/client-sts/dist-types/ts3.4/commands/index.d.ts +1 -0
- package/node_modules/@aws-sdk/client-sts/dist-types/ts3.4/index.d.ts +3 -1
- package/node_modules/@aws-sdk/client-sts/dist-types/ts3.4/models/STSServiceException.d.ts +1 -1
- package/node_modules/@aws-sdk/client-sts/dist-types/ts3.4/models/errors.d.ts +101 -0
- package/node_modules/@aws-sdk/client-sts/dist-types/ts3.4/models/models_0.d.ts +10 -71
- package/node_modules/@aws-sdk/client-sts/dist-types/ts3.4/runtimeConfig.browser.d.ts +9 -5
- package/node_modules/@aws-sdk/client-sts/dist-types/ts3.4/runtimeConfig.d.ts +9 -5
- package/node_modules/@aws-sdk/client-sts/dist-types/ts3.4/runtimeConfig.native.d.ts +9 -5
- package/node_modules/@aws-sdk/client-sts/dist-types/ts3.4/runtimeConfig.shared.d.ts +9 -4
- package/node_modules/@aws-sdk/client-sts/dist-types/ts3.4/schemas/schemas_0.d.ts +52 -56
- package/node_modules/@aws-sdk/client-sts/package.json +39 -36
- package/node_modules/@aws-sdk/core/LICENSE +201 -0
- package/node_modules/@aws-sdk/core/dist-cjs/index.js +317 -116
- package/node_modules/@aws-sdk/core/dist-cjs/submodules/client/index.js +3 -3
- package/node_modules/@aws-sdk/core/dist-cjs/submodules/httpAuthSchemes/index.js +9 -1
- package/node_modules/@aws-sdk/core/dist-cjs/submodules/protocols/index.js +305 -112
- package/node_modules/@aws-sdk/core/dist-es/submodules/client/emitWarningIfUnsupportedVersion.js +3 -3
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4Config.js +9 -1
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/ProtocolLib.js +20 -3
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/UnionSerde.js +23 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/cbor/AwsSmithyRpcV2CborProtocol.js +11 -3
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/AwsJson1_0Protocol.js +2 -1
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/AwsJson1_1Protocol.js +2 -1
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/AwsJsonRpcProtocol.js +14 -11
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/JsonShapeDeserializer.js +42 -26
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/JsonShapeSerializer.js +83 -53
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/experimental/SinglePassJsonShapeSerializer.js +11 -1
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/query/AwsQueryProtocol.js +3 -8
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/query/QueryShapeSerializer.js +28 -2
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/structIterator.js +40 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/xml/AwsRestXmlProtocol.js +13 -4
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/xml/XmlShapeDeserializer.js +12 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/xml/XmlShapeSerializer.js +18 -1
- package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/ProtocolLib.d.ts +6 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/UnionSerde.d.ts +24 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/AwsJson1_0Protocol.d.ts +3 -1
- package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/AwsJson1_1Protocol.d.ts +3 -1
- package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/AwsJsonRpcProtocol.d.ts +2 -1
- package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/JsonShapeDeserializer.d.ts +1 -1
- package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/JsonShapeSerializer.d.ts +12 -3
- package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/structIterator.d.ts +27 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/xml/AwsRestXmlProtocol.d.ts +1 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/ProtocolLib.d.ts +4 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/UnionSerde.d.ts +9 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/AwsJson1_0Protocol.d.ts +3 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/AwsJson1_1Protocol.d.ts +3 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/AwsJsonRpcProtocol.d.ts +2 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/JsonShapeDeserializer.d.ts +1 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/JsonShapeSerializer.d.ts +9 -3
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/structIterator.d.ts +12 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/AwsRestXmlProtocol.d.ts +1 -0
- package/node_modules/@aws-sdk/core/package.json +14 -14
- package/node_modules/@aws-sdk/crc64-nvme/README.md +61 -0
- package/node_modules/@aws-sdk/crc64-nvme/dist-cjs/index.js +101 -0
- package/node_modules/@aws-sdk/crc64-nvme/dist-es/Crc64Nvme.js +92 -0
- package/node_modules/@aws-sdk/crc64-nvme/dist-es/index.js +2 -0
- package/node_modules/@aws-sdk/crc64-nvme/dist-types/Crc64Nvme.d.ts +24 -0
- package/node_modules/@aws-sdk/crc64-nvme/dist-types/index.d.ts +2 -0
- package/node_modules/@aws-sdk/crc64-nvme/dist-types/ts3.4/Crc64Nvme.d.ts +9 -0
- package/node_modules/@aws-sdk/crc64-nvme/dist-types/ts3.4/index.d.ts +2 -0
- package/node_modules/@aws-sdk/crc64-nvme/package.json +50 -0
- package/node_modules/@aws-sdk/credential-provider-env/package.json +63 -0
- package/node_modules/@aws-sdk/credential-provider-http/package.json +70 -0
- package/node_modules/@aws-sdk/credential-provider-ini/dist-cjs/index.js +224 -0
- package/node_modules/@aws-sdk/credential-provider-ini/dist-es/fromIni.js +9 -0
- package/node_modules/@aws-sdk/credential-provider-ini/dist-es/resolveAssumeRoleCredentials.js +80 -0
- package/node_modules/@aws-sdk/credential-provider-ini/dist-es/resolveLoginCredentials.js +12 -0
- package/node_modules/@aws-sdk/credential-provider-ini/dist-es/resolveProfileData.js +32 -0
- package/node_modules/@aws-sdk/credential-provider-ini/dist-es/resolveSsoCredentials.js +25 -0
- package/node_modules/@aws-sdk/credential-provider-ini/dist-es/resolveWebIdentityCredentials.js +16 -0
- package/node_modules/@aws-sdk/credential-provider-ini/dist-types/fromIni.d.ts +55 -0
- package/node_modules/@aws-sdk/credential-provider-ini/dist-types/resolveAssumeRoleCredentials.d.ts +48 -0
- package/node_modules/@aws-sdk/credential-provider-ini/dist-types/resolveLoginCredentials.d.ts +11 -0
- package/node_modules/@aws-sdk/credential-provider-ini/dist-types/resolveProfileData.d.ts +19 -0
- package/node_modules/@aws-sdk/credential-provider-ini/dist-types/resolveSsoCredentials.d.ts +13 -0
- package/node_modules/@aws-sdk/credential-provider-ini/dist-types/resolveWebIdentityCredentials.d.ts +19 -0
- package/node_modules/@aws-sdk/credential-provider-ini/dist-types/ts3.4/fromIni.d.ts +28 -0
- package/node_modules/@aws-sdk/credential-provider-ini/dist-types/ts3.4/resolveAssumeRoleCredentials.d.ts +30 -0
- package/node_modules/@aws-sdk/credential-provider-ini/dist-types/ts3.4/resolveLoginCredentials.d.ts +9 -0
- package/node_modules/@aws-sdk/credential-provider-ini/dist-types/ts3.4/resolveProfileData.d.ts +12 -0
- package/node_modules/@aws-sdk/credential-provider-ini/dist-types/ts3.4/resolveSsoCredentials.d.ts +11 -0
- package/node_modules/@aws-sdk/credential-provider-ini/dist-types/ts3.4/resolveWebIdentityCredentials.d.ts +16 -0
- package/node_modules/@aws-sdk/credential-provider-ini/package.json +74 -0
- package/node_modules/@aws-sdk/credential-provider-login/README.md +7 -0
- package/node_modules/@aws-sdk/credential-provider-login/dist-cjs/index.js +286 -0
- package/node_modules/@aws-sdk/credential-provider-login/dist-es/LoginCredentialsFetcher.js +262 -0
- package/node_modules/@aws-sdk/credential-provider-login/dist-es/fromLoginCredentials.js +21 -0
- package/node_modules/@aws-sdk/credential-provider-login/dist-es/index.js +2 -0
- package/node_modules/@aws-sdk/credential-provider-login/dist-types/LoginCredentialsFetcher.d.ts +42 -0
- package/node_modules/@aws-sdk/credential-provider-login/dist-types/fromLoginCredentials.d.ts +7 -0
- package/node_modules/@aws-sdk/credential-provider-login/dist-types/index.d.ts +8 -0
- package/node_modules/@aws-sdk/credential-provider-login/dist-types/ts3.4/LoginCredentialsFetcher.d.ts +24 -0
- package/node_modules/@aws-sdk/credential-provider-login/dist-types/ts3.4/fromLoginCredentials.d.ts +5 -0
- package/node_modules/@aws-sdk/credential-provider-login/dist-types/ts3.4/index.d.ts +2 -0
- package/node_modules/@aws-sdk/credential-provider-login/dist-types/ts3.4/types.d.ts +39 -0
- package/node_modules/@aws-sdk/credential-provider-login/dist-types/types.d.ts +59 -0
- package/node_modules/@aws-sdk/credential-provider-login/package.json +68 -0
- package/node_modules/@aws-sdk/credential-provider-node/package.json +15 -15
- package/node_modules/@aws-sdk/credential-provider-process/package.json +64 -0
- package/node_modules/@aws-sdk/credential-provider-sso/dist-cjs/index.js +192 -0
- package/node_modules/@aws-sdk/credential-provider-sso/dist-es/fromSSO.js +83 -0
- package/node_modules/@aws-sdk/credential-provider-sso/dist-es/resolveSSOCredentials.js +90 -0
- package/node_modules/@aws-sdk/credential-provider-sso/dist-types/fromSSO.d.ts +69 -0
- package/node_modules/@aws-sdk/credential-provider-sso/dist-types/resolveSSOCredentials.d.ts +6 -0
- package/node_modules/@aws-sdk/credential-provider-sso/dist-types/ts3.4/fromSSO.d.ts +24 -0
- package/node_modules/@aws-sdk/credential-provider-sso/dist-types/ts3.4/resolveSSOCredentials.d.ts +18 -0
- package/node_modules/@aws-sdk/credential-provider-sso/package.json +66 -0
- package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +73 -0
- package/node_modules/@aws-sdk/middleware-bucket-endpoint/package.json +9 -9
- package/node_modules/@aws-sdk/middleware-expect-continue/package.json +7 -7
- package/node_modules/@aws-sdk/middleware-flexible-checksums/dist-cjs/index.js +29 -21
- package/node_modules/@aws-sdk/middleware-flexible-checksums/dist-es/flexibleChecksumsMiddleware.js +25 -9
- package/node_modules/@aws-sdk/middleware-flexible-checksums/dist-es/index.js +0 -1
- package/node_modules/@aws-sdk/middleware-flexible-checksums/dist-es/selectChecksumAlgorithmFunction.js +2 -6
- package/node_modules/@aws-sdk/middleware-flexible-checksums/dist-types/index.d.ts +0 -1
- package/node_modules/@aws-sdk/middleware-flexible-checksums/dist-types/ts3.4/index.d.ts +0 -1
- package/node_modules/@aws-sdk/middleware-flexible-checksums/package.json +13 -12
- package/node_modules/@aws-sdk/middleware-host-header/package.json +7 -7
- package/node_modules/@aws-sdk/middleware-location-constraint/package.json +6 -6
- package/node_modules/@aws-sdk/middleware-logger/package.json +6 -6
- package/node_modules/@aws-sdk/middleware-recursion-detection/package.json +8 -8
- package/node_modules/@aws-sdk/middleware-sdk-s3/dist-cjs/index.js +2 -2
- package/node_modules/@aws-sdk/middleware-sdk-s3/package.json +15 -15
- package/node_modules/@aws-sdk/middleware-sdk-s3-control/dist-cjs/index.js +1 -1
- package/node_modules/@aws-sdk/middleware-sdk-s3-control/package.json +12 -12
- package/node_modules/@aws-sdk/middleware-ssec/package.json +6 -6
- package/node_modules/@aws-sdk/middleware-user-agent/package.json +10 -10
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/auth/httpAuthSchemeProvider.js +56 -0
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/endpoint/ruleset.js +7 -0
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/index.js +344 -0
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/runtimeConfig.browser.js +39 -0
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/runtimeConfig.js +53 -0
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/runtimeConfig.shared.js +47 -0
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/index.js +499 -0
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/runtimeConfig.browser.js +38 -0
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/runtimeConfig.js +53 -0
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/runtimeConfig.shared.js +47 -0
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/index.js +480 -0
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/runtimeConfig.browser.js +39 -0
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/runtimeConfig.js +67 -0
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/runtimeConfig.shared.js +48 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/signin/Signin.js +9 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/signin/SigninClient.js +50 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/signin/auth/httpAuthSchemeProvider.js +50 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/signin/commands/CreateOAuth2TokenCommand.js +16 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/signin/commands/index.js +1 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/signin/endpoint/EndpointParameters.js +13 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/signin/endpoint/ruleset.js +4 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/signin/index.js +8 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/signin/models/SigninServiceException.js +8 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/signin/models/enums.js +8 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/signin/models/errors.js +57 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/signin/runtimeConfig.browser.js +34 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/signin/runtimeConfig.js +48 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/signin/runtimeConfig.shared.js +43 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/signin/schemas/schemas_0.js +114 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/SSOOIDCClient.js +50 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/commands/CreateTokenCommand.js +16 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/index.js +8 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/models/enums.js +9 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/models/errors.js +181 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/runtimeConfig.browser.js +33 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/runtimeConfig.js +48 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/runtimeConfig.shared.js +43 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/schemas/schemas_0.js +133 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/STSClient.js +50 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/commands/AssumeRoleCommand.js +16 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/commands/AssumeRoleWithWebIdentityCommand.js +16 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/defaultStsRoleAssumers.js +107 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/index.js +8 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/runtimeConfig.browser.js +34 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/runtimeConfig.js +62 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/runtimeConfig.shared.js +44 -0
- package/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/schemas/schemas_0.js +186 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/Signin.d.ts +18 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/SigninClient.d.ts +189 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/auth/httpAuthExtensionConfiguration.d.ts +29 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/auth/httpAuthSchemeProvider.d.ts +75 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/commands/CreateOAuth2TokenCommand.d.ts +157 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/commands/index.d.ts +1 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/endpoint/EndpointParameters.d.ts +50 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/endpoint/endpointResolver.d.ts +8 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/extensionConfiguration.d.ts +9 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/index.d.ts +17 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/models/SigninServiceException.d.ts +14 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/models/enums.d.ts +34 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/models/errors.d.ts +102 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/models/models_0.d.ts +142 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/runtimeConfig.browser.d.ts +63 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/runtimeConfig.d.ts +63 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/runtimeConfig.native.d.ts +62 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/runtimeConfig.shared.d.ts +38 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/runtimeExtensions.d.ts +17 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/schemas/schemas_0.d.ts +12 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/SSOOIDC.d.ts +55 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/SSOOIDCClient.d.ts +220 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/auth/httpAuthExtensionConfiguration.d.ts +29 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/auth/httpAuthSchemeProvider.d.ts +75 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/commands/CreateTokenCommand.d.ts +176 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/endpoint/EndpointParameters.d.ts +50 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/endpoint/endpointResolver.d.ts +8 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/extensionConfiguration.d.ts +9 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/index.d.ts +54 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/models/SSOOIDCServiceException.d.ts +14 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/models/enums.d.ts +25 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/models/errors.d.ts +279 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/models/models_0.d.ts +109 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.browser.d.ts +62 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.d.ts +62 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.native.d.ts +61 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.shared.d.ts +38 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeExtensions.d.ts +17 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/schemas/schemas_0.d.ts +16 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/STS.d.ts +27 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/STSClient.d.ts +192 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/auth/httpAuthExtensionConfiguration.d.ts +29 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/auth/httpAuthSchemeProvider.d.ts +85 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/commands/AssumeRoleCommand.d.ts +270 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/commands/AssumeRoleWithWebIdentityCommand.d.ts +290 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/endpoint/EndpointParameters.d.ts +56 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/endpoint/endpointResolver.d.ts +8 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/extensionConfiguration.d.ts +9 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/index.d.ts +19 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/models/STSServiceException.d.ts +14 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/models/errors.d.ts +107 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/models/models_0.d.ts +588 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.browser.d.ts +64 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.d.ts +62 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.native.d.ts +63 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.shared.d.ts +38 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeExtensions.d.ts +17 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/schemas/schemas_0.d.ts +20 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/Signin.d.ts +22 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/SigninClient.d.ts +123 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/auth/httpAuthExtensionConfiguration.d.ts +32 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/auth/httpAuthSchemeProvider.d.ts +47 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/commands/CreateOAuth2TokenCommand.d.ts +47 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/commands/index.d.ts +1 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/endpoint/EndpointParameters.d.ts +51 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/extensionConfiguration.d.ts +9 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/index.d.ts +11 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/models/SigninServiceException.d.ts +9 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/models/enums.d.ts +10 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/models/errors.d.ts +35 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/models/models_0.d.ts +26 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/runtimeConfig.browser.d.ts +125 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/runtimeConfig.d.ts +118 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/runtimeConfig.native.d.ts +129 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/runtimeConfig.shared.d.ts +58 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/runtimeExtensions.d.ts +11 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/schemas/schemas_0.d.ts +16 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/SSOOIDCClient.d.ts +121 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/auth/httpAuthExtensionConfiguration.d.ts +32 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/index.d.ts +11 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/models/SSOOIDCServiceException.d.ts +9 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/models/enums.d.ts +13 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/models/errors.d.ts +105 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/models/models_0.d.ts +18 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.browser.d.ts +120 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.d.ts +115 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.native.d.ts +124 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.shared.d.ts +58 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/schemas/schemas_0.d.ts +20 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/STSClient.d.ts +128 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/auth/httpAuthExtensionConfiguration.d.ts +32 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/auth/httpAuthSchemeProvider.d.ts +57 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/index.d.ts +11 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/models/STSServiceException.d.ts +9 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/models/errors.d.ts +54 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/models/models_0.d.ts +59 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.browser.d.ts +129 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.d.ts +111 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.native.d.ts +133 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.shared.d.ts +58 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/schemas/schemas_0.d.ts +24 -0
- package/node_modules/@aws-sdk/nested-clients/package.json +127 -0
- package/node_modules/@aws-sdk/nested-clients/signin.d.ts +7 -0
- package/node_modules/@aws-sdk/nested-clients/signin.js +5 -0
- package/node_modules/@aws-sdk/region-config-resolver/dist-cjs/index.js +1 -1
- package/node_modules/@aws-sdk/region-config-resolver/package.json +8 -8
- package/node_modules/@aws-sdk/signature-v4-multi-region/package.json +9 -9
- package/node_modules/@aws-sdk/token-providers/dist-cjs/index.js +6 -13
- package/node_modules/@aws-sdk/token-providers/dist-es/fromSso.js +2 -9
- package/node_modules/@aws-sdk/token-providers/dist-es/getNewSsoOidcToken.js +2 -2
- package/node_modules/@aws-sdk/token-providers/dist-es/getSsoOidcClient.js +2 -2
- package/node_modules/@aws-sdk/token-providers/dist-types/fromSso.d.ts +1 -1
- package/node_modules/@aws-sdk/token-providers/dist-types/getNewSsoOidcToken.d.ts +3 -2
- package/node_modules/@aws-sdk/token-providers/dist-types/getSsoOidcClient.d.ts +2 -1
- package/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/fromSso.d.ts +1 -1
- package/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/getNewSsoOidcToken.d.ts +3 -1
- package/node_modules/@aws-sdk/token-providers/dist-types/ts3.4/getSsoOidcClient.d.ts +3 -1
- package/node_modules/@aws-sdk/token-providers/package.json +10 -10
- package/node_modules/@aws-sdk/types/dist-types/feature-ids.d.ts +2 -0
- package/node_modules/@aws-sdk/types/dist-types/ts3.4/feature-ids.d.ts +2 -0
- package/node_modules/@aws-sdk/types/package.json +5 -5
- package/node_modules/@aws-sdk/util-arn-parser/dist-cjs/index.js +24 -61
- package/node_modules/@aws-sdk/util-arn-parser/dist-types/index.d.ts +9 -0
- package/node_modules/@aws-sdk/util-arn-parser/package.json +4 -4
- package/node_modules/@aws-sdk/util-endpoints/package.json +8 -8
- package/node_modules/@aws-sdk/util-user-agent-browser/package.json +6 -6
- package/node_modules/@aws-sdk/util-user-agent-node/package.json +8 -8
- package/node_modules/@aws-sdk/xml-builder/package.json +5 -5
- package/node_modules/@smithy/abort-controller/package.json +2 -2
- package/node_modules/@smithy/config-resolver/package.json +5 -5
- package/node_modules/@smithy/core/dist-cjs/submodules/cbor/index.js +32 -7
- package/node_modules/@smithy/core/dist-cjs/submodules/event-streams/index.js +0 -1
- package/node_modules/@smithy/core/dist-cjs/submodules/protocols/index.js +9 -0
- package/node_modules/@smithy/core/dist-cjs/submodules/schema/index.js +11 -2
- package/node_modules/@smithy/core/dist-es/submodules/cbor/CborCodec.js +33 -6
- package/node_modules/@smithy/core/dist-es/submodules/cbor/SmithyRpcV2CborProtocol.js +0 -1
- package/node_modules/@smithy/core/dist-es/submodules/event-streams/EventStreamSerde.js +0 -1
- package/node_modules/@smithy/core/dist-es/submodules/protocols/HttpBindingProtocol.js +6 -0
- package/node_modules/@smithy/core/dist-es/submodules/protocols/HttpProtocol.js +3 -0
- package/node_modules/@smithy/core/dist-es/submodules/schema/middleware/schemaDeserializationMiddleware.js +3 -0
- package/node_modules/@smithy/core/dist-es/submodules/schema/schemas/NormalizedSchema.js +8 -2
- package/node_modules/@smithy/core/dist-types/submodules/protocols/HttpBindingProtocol.d.ts +6 -2
- package/node_modules/@smithy/core/dist-types/submodules/protocols/SerdeContext.d.ts +10 -2
- package/node_modules/@smithy/core/dist-types/submodules/schema/schemas/NormalizedSchema.d.ts +6 -0
- package/node_modules/@smithy/core/dist-types/ts3.4/submodules/protocols/HttpBindingProtocol.d.ts +6 -2
- package/node_modules/@smithy/core/dist-types/ts3.4/submodules/protocols/SerdeContext.d.ts +10 -2
- package/node_modules/@smithy/core/dist-types/ts3.4/submodules/schema/schemas/NormalizedSchema.d.ts +6 -0
- package/node_modules/@smithy/core/package.json +11 -9
- package/node_modules/@smithy/credential-provider-imds/package.json +70 -0
- package/node_modules/@smithy/eventstream-codec/package.json +2 -2
- package/node_modules/@smithy/eventstream-serde-browser/package.json +3 -3
- package/node_modules/@smithy/eventstream-serde-config-resolver/package.json +2 -2
- package/node_modules/@smithy/eventstream-serde-node/package.json +3 -3
- package/node_modules/@smithy/eventstream-serde-universal/package.json +3 -3
- package/node_modules/@smithy/fetch-http-handler/package.json +5 -5
- package/node_modules/@smithy/hash-blob-browser/package.json +2 -2
- package/node_modules/@smithy/hash-node/package.json +2 -2
- package/node_modules/@smithy/hash-stream-node/package.json +2 -2
- package/node_modules/@smithy/invalid-dependency/package.json +2 -2
- package/node_modules/@smithy/md5-js/package.json +2 -2
- package/node_modules/@smithy/middleware-apply-body-checksum/package.json +3 -3
- package/node_modules/@smithy/middleware-content-length/package.json +3 -3
- package/node_modules/@smithy/middleware-endpoint/dist-cjs/index.js +11 -3
- package/node_modules/@smithy/middleware-endpoint/dist-es/adaptors/createConfigValueProvider.js +10 -2
- package/node_modules/@smithy/middleware-endpoint/dist-es/adaptors/getEndpointFromInstructions.js +1 -1
- package/node_modules/@smithy/middleware-endpoint/dist-types/adaptors/createConfigValueProvider.d.ts +2 -1
- package/node_modules/@smithy/middleware-endpoint/dist-types/ts3.4/adaptors/createConfigValueProvider.d.ts +2 -1
- package/node_modules/@smithy/middleware-endpoint/package.json +9 -9
- package/node_modules/@smithy/middleware-retry/package.json +9 -9
- package/node_modules/@smithy/middleware-serde/dist-cjs/index.js +3 -0
- package/node_modules/@smithy/middleware-serde/dist-es/deserializerMiddleware.js +3 -0
- package/node_modules/@smithy/middleware-serde/package.json +3 -3
- package/node_modules/@smithy/middleware-stack/package.json +2 -2
- package/node_modules/@smithy/node-config-provider/package.json +4 -4
- package/node_modules/@smithy/node-http-handler/package.json +5 -5
- package/node_modules/@smithy/property-provider/package.json +61 -0
- package/node_modules/@smithy/protocol-http/package.json +2 -2
- package/node_modules/@smithy/querystring-builder/package.json +2 -2
- package/node_modules/@smithy/querystring-parser/package.json +2 -2
- package/node_modules/@smithy/service-error-classification/package.json +2 -2
- package/node_modules/@smithy/shared-ini-file-loader/package.json +2 -2
- package/node_modules/@smithy/signature-v4/package.json +4 -4
- package/node_modules/@smithy/smithy-client/dist-cjs/index.js +6 -0
- package/node_modules/@smithy/smithy-client/dist-es/client.js +6 -0
- package/node_modules/@smithy/smithy-client/dist-types/client.d.ts +33 -7
- package/node_modules/@smithy/smithy-client/dist-types/ts3.4/client.d.ts +33 -7
- package/node_modules/@smithy/smithy-client/package.json +8 -8
- package/node_modules/@smithy/types/dist-types/schema/schema-deprecated.d.ts +7 -0
- package/node_modules/@smithy/types/dist-types/schema/schema.d.ts +6 -0
- package/node_modules/@smithy/types/dist-types/schema/static-schemas.d.ts +16 -1
- package/node_modules/@smithy/types/dist-types/ts3.4/schema/schema-deprecated.d.ts +7 -0
- package/node_modules/@smithy/types/dist-types/ts3.4/schema/schema.d.ts +6 -0
- package/node_modules/@smithy/types/dist-types/ts3.4/schema/static-schemas.d.ts +16 -1
- package/node_modules/@smithy/types/package.json +1 -1
- package/node_modules/@smithy/url-parser/package.json +3 -3
- package/node_modules/@smithy/util-defaults-mode-browser/package.json +5 -5
- package/node_modules/@smithy/util-defaults-mode-node/package.json +8 -8
- package/node_modules/@smithy/util-endpoints/package.json +3 -3
- package/node_modules/@smithy/util-middleware/package.json +2 -2
- package/node_modules/@smithy/util-retry/package.json +3 -3
- package/node_modules/@smithy/util-stream/package.json +4 -4
- package/node_modules/@smithy/util-waiter/package.json +3 -3
- package/node_modules/aws-sdk/README.md +16 -195
- package/node_modules/aws-sdk/dist/aws-sdk-core-react-native.js +756 -346
- package/node_modules/aws-sdk/dist/aws-sdk-react-native.js +3758 -2938
- package/node_modules/aws-sdk/dist/aws-sdk.js +5 -5
- package/node_modules/aws-sdk/dist/aws-sdk.min.js +5 -5
- package/node_modules/aws-sdk/lib/core.js +1 -1
- package/node_modules/aws-sdk/lib/maintenance_mode_message.js +2 -2
- package/node_modules/aws-sdk/package.json +1 -1
- package/node_modules/cdk-iam-floyd/README.md +4 -4
- package/node_modules/cdk-iam-floyd/lib/generated/aws-managed-policies/cdk-iam-floyd.d.ts +46 -0
- package/node_modules/cdk-iam-floyd/lib/generated/aws-managed-policies/cdk-iam-floyd.js +93 -1
- package/node_modules/cdk-iam-floyd/lib/generated/aws-managed-policies/iam-floyd.d.ts +46 -0
- package/node_modules/cdk-iam-floyd/lib/generated/aws-managed-policies/iam-floyd.js +47 -1
- package/node_modules/cdk-iam-floyd/lib/generated/index.d.ts +11 -3
- package/node_modules/cdk-iam-floyd/lib/generated/index.js +33 -17
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/apigatewaymanagement.d.ts +6 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/apigatewaymanagement.js +7 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/applicationmigrationservice.d.ts +43 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/applicationmigrationservice.js +56 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/backup.d.ts +127 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/backup.js +168 -3
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/bedrock.d.ts +55 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/bedrock.js +73 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/bedrockagentcore.d.ts +359 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/bedrockagentcore.js +478 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/bedrockpoweredbyawsmantle.d.ts +125 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/bedrockpoweredbyawsmantle.js +166 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/billingandcostmanagementdataexports.d.ts +28 -14
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/billingandcostmanagementdataexports.js +31 -15
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/braket.d.ts +71 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/braket.js +88 -3
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/cloudformation.d.ts +8 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/cloudformation.js +12 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/cloudfront.d.ts +160 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/cloudfront.js +210 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/cloudtrail.d.ts +10 -2
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/cloudtrail.js +14 -3
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/cloudwatchapplicationsignals.d.ts +8 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/cloudwatchapplicationsignals.js +12 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/cloudwatchlogs.d.ts +149 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/cloudwatchlogs.js +201 -2
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/cloudwatchobservabilityadminservice.d.ts +143 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/cloudwatchobservabilityadminservice.js +184 -2
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/computeoptimizerautomation.d.ts +274 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/computeoptimizerautomation.js +365 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/connect.d.ts +866 -13
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/connect.js +1034 -9
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/costexplorerservice.d.ts +8 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/costexplorerservice.js +12 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/costoptimizationhub.d.ts +8 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/costoptimizationhub.js +12 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/databasemigrationservice.d.ts +32 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/databasemigrationservice.js +39 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/datazone.d.ts +12 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/datazone.js +19 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/devopsagentservice.d.ts +469 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/devopsagentservice.js +630 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/dynamodb.d.ts +37 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/dynamodb.js +46 -2
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/ec2autoscaling.d.ts +16 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/ec2autoscaling.js +23 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/ec2imagebuilder.d.ts +30 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/ec2imagebuilder.js +37 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/elasticcontainerregistry.d.ts +64 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/elasticcontainerregistry.js +90 -2
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/elasticcontainerservice.d.ts +74 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/elasticcontainerservice.js +87 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/elastickubernetesservice.d.ts +64 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/elastickubernetesservice.js +82 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/elementalmediaconnect.d.ts +357 -31
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/elementalmediaconnect.js +450 -39
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/glue.d.ts +17 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/glue.js +21 -2
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/guardduty.d.ts +24 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/guardduty.js +34 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/healthlake.d.ts +2 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/healthlake.js +3 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/healthomics.d.ts +0 -11
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/healthomics.js +1 -14
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/identityandaccessmanagementiam.d.ts +180 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/identityandaccessmanagementiam.js +224 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/identitystore.d.ts +159 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/identitystore.js +173 -2
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/invoicingservice.d.ts +78 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/invoicingservice.js +101 -3
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/kinesisvideostreams.d.ts +16 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/kinesisvideostreams.js +24 -2
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/lakeformation.d.ts +16 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/lakeformation.js +23 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/lambda.d.ts +192 -3
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/lambda.js +251 -4
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/licensemanager.d.ts +141 -3
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/licensemanager.js +183 -5
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/managedstreamingforapachekafka.d.ts +40 -2
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/managedstreamingforapachekafka.js +50 -3
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/marketplace.d.ts +48 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/marketplace.js +67 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/mcpserver.d.ts +41 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/mcpserver.js +62 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/opensearch.d.ts +40 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/opensearch.js +59 -2
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/organizations.d.ts +125 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/organizations.js +152 -3
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/partnercentral.d.ts +1800 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/partnercentral.js +2202 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/partnercentralaccountmanagement.d.ts +47 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/partnercentralaccountmanagement.js +57 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/pricingplanmanagerservice.d.ts +91 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/pricingplanmanagerservice.js +127 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/privatelink.d.ts +23 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/privatelink.js +28 -2
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/quicksight.d.ts +8 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/quicksight.js +28 -17
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/resourcegrouptaggingapi.d.ts +8 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/resourcegrouptaggingapi.js +14 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/route53.d.ts +8 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/route53.js +12 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/route53globalresolver.d.ts +551 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/route53globalresolver.js +727 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/s3.d.ts +76 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/s3.js +85 -2
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/s3tables.d.ts +216 -33
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/s3tables.js +262 -35
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/s3vectors.d.ts +211 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/s3vectors.js +231 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/sagemaker.d.ts +83 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/sagemaker.js +107 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/sagemakerunifiedstudiomcp.d.ts +41 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/sagemakerunifiedstudiomcp.js +60 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/secretsmanager.d.ts +81 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/secretsmanager.js +88 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/securityagent.d.ts +624 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/securityagent.js +840 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/securityhub.d.ts +16 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/securityhub.js +23 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/securityincidentresponse.d.ts +17 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/securityincidentresponse.js +24 -1
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/service-oracledatabase-aws.d.ts +6 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/service-oracledatabase-aws.js +11 -2
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/servicetomanageaiagentsforuiworkflows.d.ts +168 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/servicetomanageaiagentsforuiworkflows.js +232 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/signin.d.ts +18 -2
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/signin.js +27 -3
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/transform.d.ts +76 -12
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/transform.js +101 -13
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/transformcustom.d.ts +281 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/transformcustom.js +373 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/usernotificationscontacts.d.ts +4 -0
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/usernotificationscontacts.js +5 -1
- package/node_modules/cdk-iam-floyd/package.json +5 -5
- package/node_modules/winston/README.md +10 -8
- package/node_modules/winston/dist/winston/logger.js +1 -0
- package/node_modules/winston/dist/winston/profiler.js +0 -1
- package/node_modules/winston/dist/winston/transports/file.js +87 -50
- package/node_modules/winston/lib/winston/logger.js +1 -0
- package/node_modules/winston/lib/winston/profiler.js +1 -1
- package/node_modules/winston/lib/winston/transports/file.js +32 -0
- package/node_modules/winston/package.json +72 -72
- package/package.json +27 -27
- package/node-v24.9.0-linux-x64.tar.xz +0 -0
- package/node_modules/@aws-sdk/client-s3/dist-es/models/index.js +0 -2
- package/node_modules/@aws-sdk/client-s3/dist-types/models/index.d.ts +0 -2
- package/node_modules/@aws-sdk/client-s3/dist-types/ts3.4/models/index.d.ts +0 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-es/models/index.js +0 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-types/models/index.d.ts +0 -2
- package/node_modules/@aws-sdk/client-s3-control/dist-types/ts3.4/models/index.d.ts +0 -2
- package/node_modules/@aws-sdk/client-sso/dist-es/models/index.js +0 -1
- package/node_modules/@aws-sdk/client-sso/dist-types/models/index.d.ts +0 -1
- package/node_modules/@aws-sdk/client-sso/dist-types/ts3.4/models/index.d.ts +0 -1
- package/node_modules/@aws-sdk/client-sts/dist-es/models/index.js +0 -1
- package/node_modules/@aws-sdk/client-sts/dist-types/models/index.d.ts +0 -1
- package/node_modules/@aws-sdk/client-sts/dist-types/ts3.4/models/index.d.ts +0 -1
- package/node_modules/@aws-sdk/core/node_modules/@smithy/property-provider/package.json +0 -61
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-env/package.json +0 -63
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-http/package.json +0 -70
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-ini/dist-cjs/index.js +0 -211
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-ini/dist-es/fromIni.js +0 -16
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-ini/dist-es/resolveAssumeRoleCredentials.js +0 -79
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-ini/dist-es/resolveProfileData.js +0 -28
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-ini/dist-es/resolveSsoCredentials.js +0 -23
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-ini/dist-es/resolveWebIdentityCredentials.js +0 -14
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-ini/dist-types/fromIni.d.ts +0 -55
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-ini/dist-types/resolveAssumeRoleCredentials.d.ts +0 -48
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-ini/dist-types/resolveProfileData.d.ts +0 -18
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-ini/dist-types/resolveSsoCredentials.d.ts +0 -12
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-ini/dist-types/resolveWebIdentityCredentials.d.ts +0 -18
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-ini/dist-types/ts3.4/fromIni.d.ts +0 -24
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-ini/dist-types/ts3.4/resolveAssumeRoleCredentials.d.ts +0 -28
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-ini/dist-types/ts3.4/resolveProfileData.d.ts +0 -10
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-ini/dist-types/ts3.4/resolveSsoCredentials.d.ts +0 -9
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-ini/dist-types/ts3.4/resolveWebIdentityCredentials.d.ts +0 -14
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-ini/package.json +0 -73
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-process/package.json +0 -64
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-sso/dist-cjs/index.js +0 -190
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-sso/dist-es/fromSSO.js +0 -81
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-sso/dist-es/resolveSSOCredentials.js +0 -90
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-sso/dist-types/fromSSO.d.ts +0 -68
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-sso/dist-types/resolveSSOCredentials.d.ts +0 -6
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-sso/dist-types/ts3.4/fromSSO.d.ts +0 -22
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-sso/dist-types/ts3.4/resolveSSOCredentials.d.ts +0 -17
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-sso/package.json +0 -66
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-web-identity/package.json +0 -73
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/index.js +0 -560
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/runtimeConfig.browser.js +0 -38
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/runtimeConfig.js +0 -54
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/runtimeConfig.shared.js +0 -42
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/index.js +0 -488
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/runtimeConfig.browser.js +0 -39
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/runtimeConfig.js +0 -68
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/runtimeConfig.shared.js +0 -47
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/SSOOIDCClient.js +0 -50
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/commands/CreateTokenCommand.js +0 -16
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/index.js +0 -5
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/models/index.js +0 -1
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/models/models_0.js +0 -190
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/runtimeConfig.browser.js +0 -33
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/runtimeConfig.js +0 -49
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/runtimeConfig.shared.js +0 -38
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/schemas/schemas_0.js +0 -211
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/STSClient.js +0 -50
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/commands/AssumeRoleCommand.js +0 -16
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/commands/AssumeRoleWithWebIdentityCommand.js +0 -16
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/defaultStsRoleAssumers.js +0 -106
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/index.js +0 -6
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/models/index.js +0 -1
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/runtimeConfig.browser.js +0 -34
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/runtimeConfig.js +0 -63
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/runtimeConfig.shared.js +0 -43
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/schemas/schemas_0.js +0 -214
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/SSOOIDC.d.ts +0 -55
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/SSOOIDCClient.d.ts +0 -229
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/auth/httpAuthExtensionConfiguration.d.ts +0 -29
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/auth/httpAuthSchemeProvider.d.ts +0 -75
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/commands/CreateTokenCommand.d.ts +0 -176
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/endpoint/EndpointParameters.d.ts +0 -38
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/endpoint/endpointResolver.d.ts +0 -5
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/extensionConfiguration.d.ts +0 -9
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/index.d.ts +0 -51
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/models/SSOOIDCServiceException.d.ts +0 -14
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/models/index.d.ts +0 -1
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/models/models_0.d.ts +0 -412
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.browser.d.ts +0 -58
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.d.ts +0 -58
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.native.d.ts +0 -57
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.shared.d.ts +0 -33
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeExtensions.d.ts +0 -17
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/schemas/schemas_0.d.ts +0 -23
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/STS.d.ts +0 -27
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/STSClient.d.ts +0 -201
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/auth/httpAuthExtensionConfiguration.d.ts +0 -29
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/auth/httpAuthSchemeProvider.d.ts +0 -85
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/commands/AssumeRoleCommand.d.ts +0 -271
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/commands/AssumeRoleWithWebIdentityCommand.d.ts +0 -291
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/endpoint/EndpointParameters.d.ts +0 -44
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/endpoint/endpointResolver.d.ts +0 -5
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/extensionConfiguration.d.ts +0 -9
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/index.d.ts +0 -17
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/models/STSServiceException.d.ts +0 -14
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/models/index.d.ts +0 -1
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/models/models_0.d.ts +0 -696
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.browser.d.ts +0 -60
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.d.ts +0 -58
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.native.d.ts +0 -59
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.shared.d.ts +0 -33
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeExtensions.d.ts +0 -17
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/schemas/schemas_0.d.ts +0 -26
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/SSOOIDCClient.d.ts +0 -125
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/auth/httpAuthExtensionConfiguration.d.ts +0 -32
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/index.d.ts +0 -8
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/models/SSOOIDCServiceException.d.ts +0 -9
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/models/index.d.ts +0 -1
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/models/models_0.d.ts +0 -132
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.browser.d.ts +0 -116
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.d.ts +0 -111
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.native.d.ts +0 -120
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.shared.d.ts +0 -53
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/schemas/schemas_0.d.ts +0 -28
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/STSClient.d.ts +0 -132
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/auth/httpAuthExtensionConfiguration.d.ts +0 -32
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/auth/httpAuthSchemeProvider.d.ts +0 -57
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/index.d.ts +0 -9
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/models/STSServiceException.d.ts +0 -9
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/models/index.d.ts +0 -1
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/models/models_0.d.ts +0 -113
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.browser.d.ts +0 -125
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.d.ts +0 -107
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.native.d.ts +0 -129
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.shared.d.ts +0 -53
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/schemas/schemas_0.d.ts +0 -32
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/nested-clients/package.json +0 -116
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/credential-provider-imds/package.json +0 -70
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider/README.md +0 -10
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider/dist-cjs/index.js +0 -117
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider/dist-es/CredentialsProviderError.js +0 -8
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider/dist-es/ProviderError.js +0 -23
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider/dist-es/TokenProviderError.js +0 -8
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider/dist-es/chain.js +0 -21
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider/dist-es/fromStatic.js +0 -1
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider/dist-es/index.js +0 -6
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider/dist-es/memoize.js +0 -45
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider/dist-types/CredentialsProviderError.d.ts +0 -31
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider/dist-types/ProviderError.d.ts +0 -39
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider/dist-types/TokenProviderError.d.ts +0 -31
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider/dist-types/chain.d.ts +0 -13
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider/dist-types/fromStatic.d.ts +0 -5
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider/dist-types/index.d.ts +0 -24
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider/dist-types/memoize.d.ts +0 -40
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider/dist-types/ts3.4/CredentialsProviderError.d.ts +0 -31
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider/dist-types/ts3.4/ProviderError.d.ts +0 -39
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider/dist-types/ts3.4/TokenProviderError.d.ts +0 -31
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider/dist-types/ts3.4/chain.d.ts +0 -13
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider/dist-types/ts3.4/fromStatic.d.ts +0 -5
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider/dist-types/ts3.4/index.d.ts +0 -24
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider/dist-types/ts3.4/memoize.d.ts +0 -40
- package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider/package.json +0 -61
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/README.md +0 -13
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-cjs/index.js +0 -2
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/auth/httpAuthSchemeProvider.js +0 -56
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/endpoint/ruleset.js +0 -7
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/index.js +0 -560
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/runtimeConfig.browser.js +0 -38
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/runtimeConfig.js +0 -54
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/runtimeConfig.shared.js +0 -42
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/STSClient.js +0 -54
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/auth/httpAuthExtensionConfiguration.js +0 -43
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/auth/httpAuthSchemeProvider.js +0 -62
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/endpoint/EndpointParameters.js +0 -19
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/endpoint/endpointResolver.js +0 -18
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/endpoint/ruleset.js +0 -7
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/index.js +0 -488
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/runtimeConfig.browser.js +0 -39
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/runtimeConfig.js +0 -68
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/runtimeConfig.native.js +0 -15
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/runtimeConfig.shared.js +0 -47
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/runtimeExtensions.js +0 -13
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/SSOOIDC.js +0 -9
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/SSOOIDCClient.js +0 -50
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/auth/httpAuthSchemeProvider.js +0 -50
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/commands/CreateTokenCommand.js +0 -16
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/commands/index.js +0 -1
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/endpoint/EndpointParameters.js +0 -13
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/endpoint/ruleset.js +0 -4
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/index.js +0 -5
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/models/SSOOIDCServiceException.js +0 -8
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/models/index.js +0 -1
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/models/models_0.js +0 -190
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/runtimeConfig.browser.js +0 -33
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/runtimeConfig.js +0 -49
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/runtimeConfig.shared.js +0 -38
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc/schemas/schemas_0.js +0 -211
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/STS.js +0 -11
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/STSClient.js +0 -50
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/auth/httpAuthExtensionConfiguration.js +0 -38
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/auth/httpAuthSchemeProvider.js +0 -55
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/commands/AssumeRoleCommand.js +0 -16
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/commands/AssumeRoleWithWebIdentityCommand.js +0 -16
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/commands/index.js +0 -2
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/defaultRoleAssumers.js +0 -22
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/defaultStsRoleAssumers.js +0 -106
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/endpoint/EndpointParameters.js +0 -15
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/endpoint/endpointResolver.js +0 -14
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/endpoint/ruleset.js +0 -4
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/index.js +0 -6
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/models/STSServiceException.js +0 -8
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/models/index.js +0 -1
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/models/models_0.js +0 -85
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/runtimeConfig.browser.js +0 -34
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/runtimeConfig.js +0 -63
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/runtimeConfig.native.js +0 -11
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/runtimeConfig.shared.js +0 -43
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/runtimeExtensions.js +0 -9
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/schemas/schemas_0.js +0 -214
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/index.d.ts +0 -7
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/SSOOIDC.d.ts +0 -55
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/SSOOIDCClient.d.ts +0 -229
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/auth/httpAuthExtensionConfiguration.d.ts +0 -29
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/auth/httpAuthSchemeProvider.d.ts +0 -75
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/commands/CreateTokenCommand.d.ts +0 -176
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/commands/index.d.ts +0 -1
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/endpoint/EndpointParameters.d.ts +0 -38
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/endpoint/endpointResolver.d.ts +0 -5
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/extensionConfiguration.d.ts +0 -9
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/index.d.ts +0 -51
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/models/SSOOIDCServiceException.d.ts +0 -14
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/models/index.d.ts +0 -1
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/models/models_0.d.ts +0 -412
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.browser.d.ts +0 -58
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.d.ts +0 -58
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.native.d.ts +0 -57
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.shared.d.ts +0 -33
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeExtensions.d.ts +0 -17
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/schemas/schemas_0.d.ts +0 -23
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/STS.d.ts +0 -27
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/STSClient.d.ts +0 -201
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/auth/httpAuthExtensionConfiguration.d.ts +0 -29
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/auth/httpAuthSchemeProvider.d.ts +0 -85
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/commands/AssumeRoleCommand.d.ts +0 -271
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/commands/AssumeRoleWithWebIdentityCommand.d.ts +0 -291
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/commands/index.d.ts +0 -2
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/defaultRoleAssumers.d.ts +0 -23
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/defaultStsRoleAssumers.d.ts +0 -43
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/endpoint/EndpointParameters.d.ts +0 -44
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/endpoint/endpointResolver.d.ts +0 -5
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/extensionConfiguration.d.ts +0 -9
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/index.d.ts +0 -17
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/models/STSServiceException.d.ts +0 -14
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/models/index.d.ts +0 -1
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/models/models_0.d.ts +0 -696
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.browser.d.ts +0 -60
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.d.ts +0 -58
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.native.d.ts +0 -59
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.shared.d.ts +0 -33
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeExtensions.d.ts +0 -17
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/schemas/schemas_0.d.ts +0 -26
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/SSOOIDC.d.ts +0 -22
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/SSOOIDCClient.d.ts +0 -125
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/auth/httpAuthExtensionConfiguration.d.ts +0 -32
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/auth/httpAuthSchemeProvider.d.ts +0 -47
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/commands/CreateTokenCommand.d.ts +0 -43
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/commands/index.d.ts +0 -1
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/endpoint/EndpointParameters.d.ts +0 -51
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/endpoint/ruleset.d.ts +0 -2
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/extensionConfiguration.d.ts +0 -9
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/index.d.ts +0 -8
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/models/SSOOIDCServiceException.d.ts +0 -9
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/models/index.d.ts +0 -1
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/models/models_0.d.ts +0 -132
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.browser.d.ts +0 -116
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.d.ts +0 -111
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.native.d.ts +0 -120
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.shared.d.ts +0 -53
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeExtensions.d.ts +0 -11
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/schemas/schemas_0.d.ts +0 -28
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/STS.d.ts +0 -39
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/STSClient.d.ts +0 -132
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/auth/httpAuthExtensionConfiguration.d.ts +0 -32
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/auth/httpAuthSchemeProvider.d.ts +0 -57
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/commands/AssumeRoleCommand.d.ts +0 -47
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/commands/AssumeRoleWithWebIdentityCommand.d.ts +0 -51
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/commands/index.d.ts +0 -2
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/defaultRoleAssumers.d.ts +0 -19
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/defaultStsRoleAssumers.d.ts +0 -33
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/endpoint/EndpointParameters.d.ts +0 -57
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/endpoint/endpointResolver.d.ts +0 -8
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/endpoint/ruleset.d.ts +0 -2
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/extensionConfiguration.d.ts +0 -9
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/index.d.ts +0 -9
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/models/STSServiceException.d.ts +0 -9
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/models/index.d.ts +0 -1
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/models/models_0.d.ts +0 -113
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.browser.d.ts +0 -125
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.d.ts +0 -107
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.native.d.ts +0 -129
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.shared.d.ts +0 -53
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeExtensions.d.ts +0 -11
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/schemas/schemas_0.d.ts +0 -32
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/package.json +0 -116
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/sso-oidc.d.ts +0 -7
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/sso-oidc.js +0 -5
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/sts.d.ts +0 -7
- package/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients/sts.js +0 -5
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/LICENSE +0 -201
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/README.md +0 -10
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/dist-cjs/index.js +0 -117
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/dist-es/CredentialsProviderError.js +0 -8
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/dist-es/ProviderError.js +0 -23
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/dist-es/TokenProviderError.js +0 -8
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/dist-es/chain.js +0 -21
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/dist-es/fromStatic.js +0 -1
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/dist-es/index.js +0 -6
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/dist-es/memoize.js +0 -45
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/dist-types/CredentialsProviderError.d.ts +0 -31
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/dist-types/ProviderError.d.ts +0 -39
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/dist-types/TokenProviderError.d.ts +0 -31
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/dist-types/chain.d.ts +0 -13
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/dist-types/fromStatic.d.ts +0 -5
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/dist-types/index.d.ts +0 -24
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/dist-types/memoize.d.ts +0 -40
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/dist-types/ts3.4/CredentialsProviderError.d.ts +0 -31
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/dist-types/ts3.4/ProviderError.d.ts +0 -39
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/dist-types/ts3.4/TokenProviderError.d.ts +0 -31
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/dist-types/ts3.4/chain.d.ts +0 -13
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/dist-types/ts3.4/fromStatic.d.ts +0 -5
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/dist-types/ts3.4/index.d.ts +0 -24
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/dist-types/ts3.4/memoize.d.ts +0 -40
- package/node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider/package.json +0 -61
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/LICENSE +0 -201
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/README.md +0 -10
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/dist-cjs/index.js +0 -117
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/dist-es/CredentialsProviderError.js +0 -8
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/dist-es/ProviderError.js +0 -23
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/dist-es/TokenProviderError.js +0 -8
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/dist-es/chain.js +0 -21
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/dist-es/fromStatic.js +0 -1
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/dist-es/index.js +0 -6
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/dist-es/memoize.js +0 -45
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/dist-types/CredentialsProviderError.d.ts +0 -31
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/dist-types/ProviderError.d.ts +0 -39
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/dist-types/TokenProviderError.d.ts +0 -31
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/dist-types/chain.d.ts +0 -13
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/dist-types/fromStatic.d.ts +0 -5
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/dist-types/index.d.ts +0 -24
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/dist-types/memoize.d.ts +0 -40
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/dist-types/ts3.4/CredentialsProviderError.d.ts +0 -31
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/dist-types/ts3.4/ProviderError.d.ts +0 -39
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/dist-types/ts3.4/TokenProviderError.d.ts +0 -31
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/dist-types/ts3.4/chain.d.ts +0 -13
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/dist-types/ts3.4/fromStatic.d.ts +0 -5
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/dist-types/ts3.4/index.d.ts +0 -24
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/dist-types/ts3.4/memoize.d.ts +0 -40
- package/node_modules/@smithy/node-config-provider/node_modules/@smithy/property-provider/package.json +0 -61
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/LICENSE +0 -201
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/README.md +0 -10
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/dist-cjs/index.js +0 -117
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/dist-es/CredentialsProviderError.js +0 -8
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/dist-es/ProviderError.js +0 -23
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/dist-es/TokenProviderError.js +0 -8
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/dist-es/chain.js +0 -21
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/dist-es/fromStatic.js +0 -1
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/dist-es/index.js +0 -6
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/dist-es/memoize.js +0 -45
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/dist-types/CredentialsProviderError.d.ts +0 -31
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/dist-types/ProviderError.d.ts +0 -39
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/dist-types/TokenProviderError.d.ts +0 -31
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/dist-types/chain.d.ts +0 -13
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/dist-types/fromStatic.d.ts +0 -5
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/dist-types/index.d.ts +0 -24
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/dist-types/memoize.d.ts +0 -40
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/dist-types/ts3.4/CredentialsProviderError.d.ts +0 -31
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/dist-types/ts3.4/ProviderError.d.ts +0 -39
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/dist-types/ts3.4/TokenProviderError.d.ts +0 -31
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/dist-types/ts3.4/chain.d.ts +0 -13
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/dist-types/ts3.4/fromStatic.d.ts +0 -5
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/dist-types/ts3.4/index.d.ts +0 -24
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/dist-types/ts3.4/memoize.d.ts +0 -40
- package/node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider/package.json +0 -61
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/LICENSE +0 -201
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/README.md +0 -11
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-cjs/index.js +0 -372
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-es/config/Endpoint.js +0 -5
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-es/config/EndpointConfigOptions.js +0 -7
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-es/config/EndpointMode.js +0 -5
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-es/config/EndpointModeConfigOptions.js +0 -8
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-es/error/InstanceMetadataV1FallbackError.js +0 -10
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-es/fromContainerMetadata.js +0 -77
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-es/fromInstanceMetadata.js +0 -134
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-es/index.js +0 -7
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-es/remoteProvider/ImdsCredentials.js +0 -13
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-es/remoteProvider/RemoteProviderInit.js +0 -3
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-es/remoteProvider/httpRequest.js +0 -36
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-es/remoteProvider/index.js +0 -2
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-es/remoteProvider/retry.js +0 -7
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-es/utils/getExtendedInstanceMetadataCredentials.js +0 -17
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-es/utils/getInstanceMetadataEndpoint.js +0 -19
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-es/utils/staticStabilityProvider.js +0 -25
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/config/Endpoint.d.ts +0 -7
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/config/EndpointConfigOptions.d.ts +0 -13
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/config/EndpointMode.d.ts +0 -7
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/config/EndpointModeConfigOptions.d.ts +0 -13
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/error/InstanceMetadataV1FallbackError.d.ts +0 -12
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/fromContainerMetadata.d.ts +0 -21
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/fromInstanceMetadata.d.ts +0 -10
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/index.d.ts +0 -28
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/remoteProvider/ImdsCredentials.d.ts +0 -19
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/remoteProvider/RemoteProviderInit.d.ts +0 -40
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/remoteProvider/httpRequest.d.ts +0 -6
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/remoteProvider/index.d.ts +0 -8
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/remoteProvider/retry.d.ts +0 -10
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/ts3.4/config/Endpoint.d.ts +0 -7
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/ts3.4/config/EndpointConfigOptions.d.ts +0 -13
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/ts3.4/config/EndpointMode.d.ts +0 -7
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/ts3.4/config/EndpointModeConfigOptions.d.ts +0 -13
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/ts3.4/error/InstanceMetadataV1FallbackError.d.ts +0 -12
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/ts3.4/fromContainerMetadata.d.ts +0 -21
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/ts3.4/fromInstanceMetadata.d.ts +0 -10
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/ts3.4/index.d.ts +0 -28
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/ts3.4/remoteProvider/ImdsCredentials.d.ts +0 -19
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/ts3.4/remoteProvider/RemoteProviderInit.d.ts +0 -40
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/ts3.4/remoteProvider/httpRequest.d.ts +0 -6
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/ts3.4/remoteProvider/index.d.ts +0 -8
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/ts3.4/remoteProvider/retry.d.ts +0 -10
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/ts3.4/types.d.ts +0 -7
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/ts3.4/utils/getExtendedInstanceMetadataCredentials.d.ts +0 -6
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/ts3.4/utils/getInstanceMetadataEndpoint.d.ts +0 -21
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/ts3.4/utils/staticStabilityProvider.d.ts +0 -16
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/types.d.ts +0 -7
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/utils/getExtendedInstanceMetadataCredentials.d.ts +0 -6
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/utils/getInstanceMetadataEndpoint.d.ts +0 -21
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/dist-types/utils/staticStabilityProvider.d.ts +0 -16
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/credential-provider-imds/package.json +0 -70
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/LICENSE +0 -201
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/README.md +0 -10
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/dist-cjs/index.js +0 -117
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/dist-es/CredentialsProviderError.js +0 -8
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/dist-es/ProviderError.js +0 -23
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/dist-es/TokenProviderError.js +0 -8
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/dist-es/chain.js +0 -21
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/dist-es/fromStatic.js +0 -1
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/dist-es/index.js +0 -6
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/dist-es/memoize.js +0 -45
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/dist-types/CredentialsProviderError.d.ts +0 -31
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/dist-types/ProviderError.d.ts +0 -39
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/dist-types/TokenProviderError.d.ts +0 -31
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/dist-types/chain.d.ts +0 -13
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/dist-types/fromStatic.d.ts +0 -5
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/dist-types/index.d.ts +0 -24
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/dist-types/memoize.d.ts +0 -40
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/dist-types/ts3.4/CredentialsProviderError.d.ts +0 -31
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/dist-types/ts3.4/ProviderError.d.ts +0 -39
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/dist-types/ts3.4/TokenProviderError.d.ts +0 -31
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/dist-types/ts3.4/chain.d.ts +0 -13
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/dist-types/ts3.4/fromStatic.d.ts +0 -5
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/dist-types/ts3.4/index.d.ts +0 -24
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/dist-types/ts3.4/memoize.d.ts +0 -40
- package/node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider/package.json +0 -61
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/deepcomposer.d.ts +0 -277
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/deepcomposer.js +0 -357
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/partnercentralselling.d.ts +0 -686
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/partnercentralselling.js +0 -840
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/sagemakerunifiedstudiomcpisamanagedmcpsolutionforawsdataprocessingserviceslikeemr-glue_athena.d.ts +0 -41
- package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/sagemakerunifiedstudiomcpisamanagedmcpsolutionforawsdataprocessingserviceslikeemr-glue_athena.js +0 -60
- /package/node_modules/@aws-sdk/{core/node_modules/@smithy/property-provider → crc64-nvme}/LICENSE +0 -0
- /package/node_modules/@aws-sdk/{middleware-flexible-checksums → crc64-nvme}/dist-es/crc64-nvme-crt-container.js +0 -0
- /package/node_modules/@aws-sdk/{middleware-flexible-checksums → crc64-nvme}/dist-types/crc64-nvme-crt-container.d.ts +0 -0
- /package/node_modules/@aws-sdk/{middleware-flexible-checksums → crc64-nvme}/dist-types/ts3.4/crc64-nvme-crt-container.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-env → credential-provider-env}/LICENSE +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-env → credential-provider-env}/README.md +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-env → credential-provider-env}/dist-cjs/index.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-env → credential-provider-env}/dist-es/fromEnv.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-env → credential-provider-env}/dist-es/index.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-env → credential-provider-env}/dist-types/fromEnv.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-env → credential-provider-env}/dist-types/index.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-env → credential-provider-env}/dist-types/ts3.4/fromEnv.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-env → credential-provider-env}/dist-types/ts3.4/index.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/README.md +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-cjs/fromHttp/checkUrl.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-cjs/fromHttp/fromHttp.browser.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-cjs/fromHttp/fromHttp.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-cjs/fromHttp/fromHttpTypes.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-cjs/fromHttp/requestHelpers.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-cjs/fromHttp/retry-wrapper.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-cjs/index.browser.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-cjs/index.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-es/fromHttp/checkUrl.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-es/fromHttp/fromHttp.browser.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-es/fromHttp/fromHttp.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-es/fromHttp/fromHttpTypes.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-es/fromHttp/requestHelpers.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-es/fromHttp/retry-wrapper.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-es/index.browser.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-es/index.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-types/fromHttp/checkUrl.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-types/fromHttp/fromHttp.browser.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-types/fromHttp/fromHttp.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-types/fromHttp/fromHttpTypes.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-types/fromHttp/requestHelpers.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-types/fromHttp/retry-wrapper.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-types/index.browser.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-types/index.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-types/ts3.4/fromHttp/checkUrl.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-types/ts3.4/fromHttp/fromHttp.browser.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-types/ts3.4/fromHttp/fromHttp.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-types/ts3.4/fromHttp/fromHttpTypes.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-types/ts3.4/fromHttp/requestHelpers.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-types/ts3.4/fromHttp/retry-wrapper.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-types/ts3.4/index.browser.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-http → credential-provider-http}/dist-types/ts3.4/index.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-ini → credential-provider-ini}/LICENSE +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-ini → credential-provider-ini}/README.md +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-ini → credential-provider-ini}/dist-es/index.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-ini → credential-provider-ini}/dist-es/resolveCredentialSource.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-ini → credential-provider-ini}/dist-es/resolveProcessCredentials.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-ini → credential-provider-ini}/dist-es/resolveStaticCredentials.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-ini → credential-provider-ini}/dist-types/index.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-ini → credential-provider-ini}/dist-types/resolveCredentialSource.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-ini → credential-provider-ini}/dist-types/resolveProcessCredentials.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-ini → credential-provider-ini}/dist-types/resolveStaticCredentials.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-ini → credential-provider-ini}/dist-types/ts3.4/index.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-ini → credential-provider-ini}/dist-types/ts3.4/resolveCredentialSource.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-ini → credential-provider-ini}/dist-types/ts3.4/resolveProcessCredentials.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-ini → credential-provider-ini}/dist-types/ts3.4/resolveStaticCredentials.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-sso → credential-provider-login}/dist-es/types.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-process → credential-provider-process}/LICENSE +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-process → credential-provider-process}/README.md +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-process → credential-provider-process}/dist-cjs/index.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-process → credential-provider-process}/dist-es/ProcessCredentials.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-process → credential-provider-process}/dist-es/fromProcess.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-process → credential-provider-process}/dist-es/getValidatedProcessCredentials.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-process → credential-provider-process}/dist-es/index.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-process → credential-provider-process}/dist-es/resolveProcessCredentials.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-process → credential-provider-process}/dist-types/ProcessCredentials.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-process → credential-provider-process}/dist-types/fromProcess.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-process → credential-provider-process}/dist-types/getValidatedProcessCredentials.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-process → credential-provider-process}/dist-types/index.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-process → credential-provider-process}/dist-types/resolveProcessCredentials.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-process → credential-provider-process}/dist-types/ts3.4/ProcessCredentials.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-process → credential-provider-process}/dist-types/ts3.4/fromProcess.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-process → credential-provider-process}/dist-types/ts3.4/getValidatedProcessCredentials.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-process → credential-provider-process}/dist-types/ts3.4/index.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-process → credential-provider-process}/dist-types/ts3.4/resolveProcessCredentials.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-sso → credential-provider-sso}/LICENSE +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-sso → credential-provider-sso}/README.md +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-sso → credential-provider-sso}/dist-cjs/loadSso-CVy8iqsZ.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-sso → credential-provider-sso}/dist-es/index.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-sso → credential-provider-sso}/dist-es/isSsoProfile.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-sso → credential-provider-sso}/dist-es/loadSso.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@smithy/credential-provider-imds → credential-provider-sso}/dist-es/types.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-sso → credential-provider-sso}/dist-es/validateSsoProfile.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-sso → credential-provider-sso}/dist-types/index.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-sso → credential-provider-sso}/dist-types/isSsoProfile.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-sso → credential-provider-sso}/dist-types/loadSso.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-sso → credential-provider-sso}/dist-types/ts3.4/index.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-sso → credential-provider-sso}/dist-types/ts3.4/isSsoProfile.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-sso → credential-provider-sso}/dist-types/ts3.4/loadSso.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-sso → credential-provider-sso}/dist-types/ts3.4/types.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-sso → credential-provider-sso}/dist-types/ts3.4/validateSsoProfile.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-sso → credential-provider-sso}/dist-types/types.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-sso → credential-provider-sso}/dist-types/validateSsoProfile.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-web-identity → credential-provider-web-identity}/LICENSE +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-web-identity → credential-provider-web-identity}/README.md +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-web-identity → credential-provider-web-identity}/dist-cjs/fromTokenFile.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-web-identity → credential-provider-web-identity}/dist-cjs/fromWebToken.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-web-identity → credential-provider-web-identity}/dist-cjs/index.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-web-identity → credential-provider-web-identity}/dist-es/fromTokenFile.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-web-identity → credential-provider-web-identity}/dist-es/fromWebToken.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-web-identity → credential-provider-web-identity}/dist-es/index.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-web-identity → credential-provider-web-identity}/dist-types/fromTokenFile.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-web-identity → credential-provider-web-identity}/dist-types/fromWebToken.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-web-identity → credential-provider-web-identity}/dist-types/index.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-web-identity → credential-provider-web-identity}/dist-types/ts3.4/fromTokenFile.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-web-identity → credential-provider-web-identity}/dist-types/ts3.4/fromWebToken.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/credential-provider-web-identity → credential-provider-web-identity}/dist-types/ts3.4/index.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/README.md +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-cjs/index.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc → nested-clients/dist-cjs/submodules/signin}/endpoint/endpointResolver.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc → nested-clients/dist-cjs/submodules/signin}/runtimeConfig.native.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-cjs/submodules/sso-oidc/auth/httpAuthSchemeProvider.js +0 -0
- /package/node_modules/@aws-sdk/{token-providers/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-cjs/submodules/sso-oidc/endpoint/endpointResolver.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-cjs/submodules/sso-oidc/endpoint/ruleset.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts → nested-clients/dist-cjs/submodules/sso-oidc}/runtimeConfig.native.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-cjs/submodules/sts/STSClient.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-cjs/submodules/sts/auth/httpAuthExtensionConfiguration.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-cjs/submodules/sts/auth/httpAuthSchemeProvider.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-cjs/submodules/sts/endpoint/EndpointParameters.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-cjs/submodules/sts/endpoint/endpointResolver.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-cjs/submodules/sts/endpoint/ruleset.js +0 -0
- /package/node_modules/@aws-sdk/{token-providers/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc → nested-clients/dist-cjs/submodules/sts}/runtimeConfig.native.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-cjs/submodules/sts/runtimeExtensions.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-es/index.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc → nested-clients/dist-es/submodules/signin}/auth/httpAuthExtensionConfiguration.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc → nested-clients/dist-es/submodules/signin}/endpoint/endpointResolver.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc → nested-clients/dist-es/submodules/signin}/extensionConfiguration.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/extensionConfiguration.js → nested-clients/dist-es/submodules/signin/models/models_0.js} +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc → nested-clients/dist-es/submodules/signin}/runtimeConfig.native.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc → nested-clients/dist-es/submodules/signin}/runtimeExtensions.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-es/submodules/sso-oidc/SSOOIDC.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts → nested-clients/dist-es/submodules/sso-oidc}/auth/httpAuthExtensionConfiguration.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-es/submodules/sso-oidc/auth/httpAuthSchemeProvider.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-es/submodules/sso-oidc/commands/index.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-es/submodules/sso-oidc/endpoint/EndpointParameters.js +0 -0
- /package/node_modules/@aws-sdk/{token-providers/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-es/submodules/sso-oidc/endpoint/endpointResolver.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-es/submodules/sso-oidc/endpoint/ruleset.js +0 -0
- /package/node_modules/@aws-sdk/{token-providers/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-es/submodules/sso-oidc/extensionConfiguration.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-es/submodules/sso-oidc/models/SSOOIDCServiceException.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/index.d.ts → nested-clients/dist-es/submodules/sso-oidc/models/models_0.js} +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts → nested-clients/dist-es/submodules/sso-oidc}/runtimeConfig.native.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts → nested-clients/dist-es/submodules/sso-oidc}/runtimeExtensions.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-es/submodules/sts/STS.js +0 -0
- /package/node_modules/@aws-sdk/{token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc → nested-clients/dist-es/submodules/sts}/auth/httpAuthExtensionConfiguration.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-es/submodules/sts/auth/httpAuthSchemeProvider.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-es/submodules/sts/commands/index.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-es/submodules/sts/defaultRoleAssumers.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-es/submodules/sts/endpoint/EndpointParameters.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-es/submodules/sts/endpoint/endpointResolver.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-es/submodules/sts/endpoint/ruleset.js +0 -0
- /package/node_modules/@aws-sdk/{token-providers/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-es/submodules/sts/extensionConfiguration.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-es/submodules/sts/models/STSServiceException.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sts/models/models_0.js → nested-clients/dist-es/submodules/sts/models/errors.js} +0 -0
- /package/node_modules/@aws-sdk/{token-providers/node_modules/@aws-sdk/nested-clients/dist-es/index.js → nested-clients/dist-es/submodules/sts/models/models_0.js} +0 -0
- /package/node_modules/@aws-sdk/{token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc → nested-clients/dist-es/submodules/sts}/runtimeConfig.native.js +0 -0
- /package/node_modules/@aws-sdk/{token-providers/node_modules/@aws-sdk/nested-clients/dist-es/submodules/sso-oidc → nested-clients/dist-es/submodules/sts}/runtimeExtensions.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-types/index.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc → nested-clients/dist-types/submodules/signin}/endpoint/ruleset.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-types/submodules/sso-oidc/commands/index.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts → nested-clients/dist-types/submodules/sso-oidc}/endpoint/ruleset.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-types/submodules/sts/commands/index.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-types/submodules/sts/defaultRoleAssumers.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-types/submodules/sts/defaultStsRoleAssumers.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc → nested-clients/dist-types/submodules/sts}/endpoint/ruleset.d.ts +0 -0
- /package/node_modules/@aws-sdk/{token-providers/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-types/ts3.4/index.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc → nested-clients/dist-types/ts3.4/submodules/signin}/endpoint/endpointResolver.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts → nested-clients/dist-types/ts3.4/submodules/signin}/endpoint/ruleset.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-types/ts3.4/submodules/sso-oidc/SSOOIDC.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-types/ts3.4/submodules/sso-oidc/auth/httpAuthSchemeProvider.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-types/ts3.4/submodules/sso-oidc/commands/CreateTokenCommand.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-types/ts3.4/submodules/sso-oidc/commands/index.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-types/ts3.4/submodules/sso-oidc/endpoint/EndpointParameters.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts → nested-clients/dist-types/ts3.4/submodules/sso-oidc}/endpoint/endpointResolver.d.ts +0 -0
- /package/node_modules/@aws-sdk/{token-providers/node_modules/@aws-sdk/nested-clients/dist-types → nested-clients/dist-types/ts3.4}/submodules/sso-oidc/endpoint/ruleset.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-types/ts3.4/submodules/sso-oidc/extensionConfiguration.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-types/ts3.4/submodules/sso-oidc/runtimeExtensions.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-types/ts3.4/submodules/sts/STS.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-types/ts3.4/submodules/sts/commands/AssumeRoleCommand.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-types/ts3.4/submodules/sts/commands/AssumeRoleWithWebIdentityCommand.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-types/ts3.4/submodules/sts/commands/index.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-types/ts3.4/submodules/sts/defaultRoleAssumers.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-types/ts3.4/submodules/sts/defaultStsRoleAssumers.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-types/ts3.4/submodules/sts/endpoint/EndpointParameters.d.ts +0 -0
- /package/node_modules/@aws-sdk/{token-providers/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc → nested-clients/dist-types/ts3.4/submodules/sts}/endpoint/endpointResolver.d.ts +0 -0
- /package/node_modules/@aws-sdk/{token-providers/node_modules/@aws-sdk/nested-clients/dist-types → nested-clients/dist-types/ts3.4}/submodules/sts/endpoint/ruleset.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-types/ts3.4/submodules/sts/extensionConfiguration.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/dist-types/ts3.4/submodules/sts/runtimeExtensions.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/sso-oidc.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/sso-oidc.js +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/sts.d.ts +0 -0
- /package/node_modules/@aws-sdk/{credential-provider-node/node_modules/@aws-sdk/nested-clients → nested-clients}/sts.js +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/LICENSE +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/README.md +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-cjs/index.js +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-es/config/Endpoint.js +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-es/config/EndpointConfigOptions.js +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-es/config/EndpointMode.js +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-es/config/EndpointModeConfigOptions.js +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-es/error/InstanceMetadataV1FallbackError.js +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-es/fromContainerMetadata.js +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-es/fromInstanceMetadata.js +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-es/index.js +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-es/remoteProvider/ImdsCredentials.js +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-es/remoteProvider/RemoteProviderInit.js +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-es/remoteProvider/httpRequest.js +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-es/remoteProvider/index.js +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-es/remoteProvider/retry.js +0 -0
- /package/node_modules/@smithy/{util-defaults-mode-node/node_modules/@smithy/credential-provider-imds → credential-provider-imds}/dist-es/types.js +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-es/utils/getExtendedInstanceMetadataCredentials.js +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-es/utils/getInstanceMetadataEndpoint.js +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-es/utils/staticStabilityProvider.js +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/config/Endpoint.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/config/EndpointConfigOptions.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/config/EndpointMode.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/config/EndpointModeConfigOptions.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/error/InstanceMetadataV1FallbackError.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/fromContainerMetadata.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/fromInstanceMetadata.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/index.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/remoteProvider/ImdsCredentials.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/remoteProvider/RemoteProviderInit.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/remoteProvider/httpRequest.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/remoteProvider/index.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/remoteProvider/retry.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/ts3.4/config/Endpoint.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/ts3.4/config/EndpointConfigOptions.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/ts3.4/config/EndpointMode.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/ts3.4/config/EndpointModeConfigOptions.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/ts3.4/error/InstanceMetadataV1FallbackError.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/ts3.4/fromContainerMetadata.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/ts3.4/fromInstanceMetadata.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/ts3.4/index.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/ts3.4/remoteProvider/ImdsCredentials.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/ts3.4/remoteProvider/RemoteProviderInit.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/ts3.4/remoteProvider/httpRequest.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/ts3.4/remoteProvider/index.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/ts3.4/remoteProvider/retry.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/ts3.4/types.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/ts3.4/utils/getExtendedInstanceMetadataCredentials.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/ts3.4/utils/getInstanceMetadataEndpoint.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/ts3.4/utils/staticStabilityProvider.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/types.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/utils/getExtendedInstanceMetadataCredentials.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/utils/getInstanceMetadataEndpoint.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/credential-provider-imds/dist-types/utils/staticStabilityProvider.d.ts +0 -0
- /package/node_modules/{@aws-sdk/credential-provider-node/node_modules/@smithy → @smithy}/property-provider/LICENSE +0 -0
- /package/node_modules/{@aws-sdk/core/node_modules/@smithy → @smithy}/property-provider/README.md +0 -0
- /package/node_modules/{@aws-sdk/core/node_modules/@smithy → @smithy}/property-provider/dist-cjs/index.js +0 -0
- /package/node_modules/{@aws-sdk/core/node_modules/@smithy → @smithy}/property-provider/dist-es/CredentialsProviderError.js +0 -0
- /package/node_modules/{@aws-sdk/core/node_modules/@smithy → @smithy}/property-provider/dist-es/ProviderError.js +0 -0
- /package/node_modules/{@aws-sdk/core/node_modules/@smithy → @smithy}/property-provider/dist-es/TokenProviderError.js +0 -0
- /package/node_modules/{@aws-sdk/core/node_modules/@smithy → @smithy}/property-provider/dist-es/chain.js +0 -0
- /package/node_modules/{@aws-sdk/core/node_modules/@smithy → @smithy}/property-provider/dist-es/fromStatic.js +0 -0
- /package/node_modules/{@aws-sdk/core/node_modules/@smithy → @smithy}/property-provider/dist-es/index.js +0 -0
- /package/node_modules/{@aws-sdk/core/node_modules/@smithy → @smithy}/property-provider/dist-es/memoize.js +0 -0
- /package/node_modules/{@aws-sdk/core/node_modules/@smithy → @smithy}/property-provider/dist-types/CredentialsProviderError.d.ts +0 -0
- /package/node_modules/{@aws-sdk/core/node_modules/@smithy → @smithy}/property-provider/dist-types/ProviderError.d.ts +0 -0
- /package/node_modules/{@aws-sdk/core/node_modules/@smithy → @smithy}/property-provider/dist-types/TokenProviderError.d.ts +0 -0
- /package/node_modules/{@aws-sdk/core/node_modules/@smithy → @smithy}/property-provider/dist-types/chain.d.ts +0 -0
- /package/node_modules/{@aws-sdk/core/node_modules/@smithy → @smithy}/property-provider/dist-types/fromStatic.d.ts +0 -0
- /package/node_modules/{@aws-sdk/core/node_modules/@smithy → @smithy}/property-provider/dist-types/index.d.ts +0 -0
- /package/node_modules/{@aws-sdk/core/node_modules/@smithy → @smithy}/property-provider/dist-types/memoize.d.ts +0 -0
- /package/node_modules/{@aws-sdk/core/node_modules/@smithy → @smithy}/property-provider/dist-types/ts3.4/CredentialsProviderError.d.ts +0 -0
- /package/node_modules/{@aws-sdk/core/node_modules/@smithy → @smithy}/property-provider/dist-types/ts3.4/ProviderError.d.ts +0 -0
- /package/node_modules/{@aws-sdk/core/node_modules/@smithy → @smithy}/property-provider/dist-types/ts3.4/TokenProviderError.d.ts +0 -0
- /package/node_modules/{@aws-sdk/core/node_modules/@smithy → @smithy}/property-provider/dist-types/ts3.4/chain.d.ts +0 -0
- /package/node_modules/{@aws-sdk/core/node_modules/@smithy → @smithy}/property-provider/dist-types/ts3.4/fromStatic.d.ts +0 -0
- /package/node_modules/{@aws-sdk/core/node_modules/@smithy → @smithy}/property-provider/dist-types/ts3.4/index.d.ts +0 -0
- /package/node_modules/{@aws-sdk/core/node_modules/@smithy → @smithy}/property-provider/dist-types/ts3.4/memoize.d.ts +0 -0
|
@@ -159,6 +159,18 @@ class AwsManagedPolicy extends iam_floyd_1.AwsManagedPolicy {
|
|
|
159
159
|
AmazonBedrockLimitedAccess() {
|
|
160
160
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonBedrockLimitedAccess);
|
|
161
161
|
}
|
|
162
|
+
/** Provides full access to Amazon Bedrock Mantle as well as limited access to related services that are required by it */
|
|
163
|
+
AmazonBedrockMantleFullAccess() {
|
|
164
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonBedrockMantleFullAccess);
|
|
165
|
+
}
|
|
166
|
+
/** Provides read and inference creation access to Amazon Bedrock Mantle */
|
|
167
|
+
AmazonBedrockMantleInferenceAccess() {
|
|
168
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonBedrockMantleInferenceAccess);
|
|
169
|
+
}
|
|
170
|
+
/** Provides read only access to Amazon Bedrock Mantle */
|
|
171
|
+
AmazonBedrockMantleReadOnly() {
|
|
172
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonBedrockMantleReadOnly);
|
|
173
|
+
}
|
|
162
174
|
/** Provides limited access to Amazon Bedrock Marketplace as well as to related services that are required by it */
|
|
163
175
|
AmazonBedrockMarketplaceAccess() {
|
|
164
176
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonBedrockMarketplaceAccess);
|
|
@@ -663,6 +675,10 @@ class AwsManagedPolicy extends iam_floyd_1.AwsManagedPolicy {
|
|
|
663
675
|
AmazonEKSLocalOutpostServiceRolePolicy() {
|
|
664
676
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonEKSLocalOutpostServiceRolePolicy);
|
|
665
677
|
}
|
|
678
|
+
/** Provides read-only access to the Amazon EKS MCP service. This policy grants permissions to use only read-only tools in the EKS MCP service meant for observability, troubleshooting, retrieving EKS resource information, and getting EKS-optimized suggestions. */
|
|
679
|
+
AmazonEKSMCPReadOnlyAccess() {
|
|
680
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonEKSMCPReadOnlyAccess);
|
|
681
|
+
}
|
|
666
682
|
/** Policy attached to the EKS Cluster Role that grants permissions to manage the cluster's networking resources. */
|
|
667
683
|
AmazonEKSNetworkingPolicy() {
|
|
668
684
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonEKSNetworkingPolicy);
|
|
@@ -1471,6 +1487,10 @@ class AwsManagedPolicy extends iam_floyd_1.AwsManagedPolicy {
|
|
|
1471
1487
|
AmazonRedshiftDataFullAccess() {
|
|
1472
1488
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonRedshiftDataFullAccess);
|
|
1473
1489
|
}
|
|
1490
|
+
/** This is an ease-of-use policy for running queries with Amazon Redshift Federated Authorization */
|
|
1491
|
+
AmazonRedshiftFederatedAuthorization() {
|
|
1492
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonRedshiftFederatedAuthorization);
|
|
1493
|
+
}
|
|
1474
1494
|
/** Provides full access to Amazon Redshift via the AWS Management Console. */
|
|
1475
1495
|
AmazonRedshiftFullAccess() {
|
|
1476
1496
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonRedshiftFullAccess);
|
|
@@ -1775,6 +1795,14 @@ class AwsManagedPolicy extends iam_floyd_1.AwsManagedPolicy {
|
|
|
1775
1795
|
AmazonSageMakerServiceCatalogProductsLambdaServiceRolePolicy() {
|
|
1776
1796
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonSageMakerServiceCatalogProductsLambdaServiceRolePolicy);
|
|
1777
1797
|
}
|
|
1798
|
+
/** Grants Systems Manager activation, session management, and KMS key operations permissions required for the SageMaker Spaces Addon to enable secure remote access to EKS SageMaker Spaces. */
|
|
1799
|
+
AmazonSageMakerSpacesControllerPolicy() {
|
|
1800
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonSageMakerSpacesControllerPolicy);
|
|
1801
|
+
}
|
|
1802
|
+
/** Grants Systems KMS key operations permissions required for the SageMaker Spaces Router to enable secure remote access to EKS SageMaker Spaces. */
|
|
1803
|
+
AmazonSageMakerSpacesRouterPolicy() {
|
|
1804
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonSageMakerSpacesRouterPolicy);
|
|
1805
|
+
}
|
|
1778
1806
|
/** This Amazon Managed Policy provides the necessary permissions to create and manage SageMaker Training Plans. It allows users to create Training Plans and Reserved Capacities, describe existing Training Plans, and perform search and listing operations. */
|
|
1779
1807
|
AmazonSageMakerTrainingPlanCreateAccess() {
|
|
1780
1808
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonSageMakerTrainingPlanCreateAccess);
|
|
@@ -2379,6 +2407,10 @@ class AwsManagedPolicy extends iam_floyd_1.AwsManagedPolicy {
|
|
|
2379
2407
|
AWSBackupGatewayServiceRolePolicyForVirtualMachineMetadataSync() {
|
|
2380
2408
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSBackupGatewayServiceRolePolicyForVirtualMachineMetadataSync);
|
|
2381
2409
|
}
|
|
2410
|
+
/** Provides GuardDuty permission to read your AWS Backup Recovery Points for malware scans */
|
|
2411
|
+
AWSBackupGuardDutyRolePolicyForScans() {
|
|
2412
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSBackupGuardDutyRolePolicyForScans);
|
|
2413
|
+
}
|
|
2382
2414
|
/** This policy grants users permissions to assign AWS resources to backup plans, create on-demand backups, and restore backups. This policy does not allow the user to create or edit backup plans or to delete scheduled backups after they are created. */
|
|
2383
2415
|
AWSBackupOperatorAccess() {
|
|
2384
2416
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSBackupOperatorAccess);
|
|
@@ -2427,6 +2459,10 @@ class AwsManagedPolicy extends iam_floyd_1.AwsManagedPolicy {
|
|
|
2427
2459
|
AWSBackupServiceRolePolicyForS3Restore() {
|
|
2428
2460
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSBackupServiceRolePolicyForS3Restore);
|
|
2429
2461
|
}
|
|
2462
|
+
/** Provides AWS Backup permission to perform malware scans on your AWS Backup Recovery Points */
|
|
2463
|
+
AWSBackupServiceRolePolicyForScans() {
|
|
2464
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSBackupServiceRolePolicyForScans);
|
|
2465
|
+
}
|
|
2430
2466
|
/** Provides full access for AWS Batch resources. */
|
|
2431
2467
|
AWSBatchFullAccess() {
|
|
2432
2468
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSBatchFullAccess);
|
|
@@ -3359,6 +3395,10 @@ class AwsManagedPolicy extends iam_floyd_1.AwsManagedPolicy {
|
|
|
3359
3395
|
AWSIAMIdentityCenterAllowListForIdentityContext() {
|
|
3360
3396
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSIAMIdentityCenterAllowListForIdentityContext);
|
|
3361
3397
|
}
|
|
3398
|
+
/** Provides access to manage IAM Identity Center users from an external provider. */
|
|
3399
|
+
AWSIdentityCenterExternalManagementPolicy() {
|
|
3400
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSIdentityCenterExternalManagementPolicy);
|
|
3401
|
+
}
|
|
3362
3402
|
/** Grants full access to the Identity Sync service */
|
|
3363
3403
|
AWSIdentitySyncFullAccess() {
|
|
3364
3404
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSIdentitySyncFullAccess);
|
|
@@ -3587,6 +3627,10 @@ class AwsManagedPolicy extends iam_floyd_1.AwsManagedPolicy {
|
|
|
3587
3627
|
AWSLambdaReadOnlyAccess() {
|
|
3588
3628
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSLambdaReadOnlyAccess);
|
|
3589
3629
|
}
|
|
3630
|
+
/** Provides write permissions to CloudWatch Logs and read/write permissions to durable execution APIs used by Lambda durable functions */
|
|
3631
|
+
AWSLambdaBasicDurableExecutionRolePolicy() {
|
|
3632
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSLambdaBasicDurableExecutionRolePolicy);
|
|
3633
|
+
}
|
|
3590
3634
|
/** Provides write permissions to CloudWatch Logs. */
|
|
3591
3635
|
AWSLambdaBasicExecutionRole() {
|
|
3592
3636
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSLambdaBasicExecutionRole);
|
|
@@ -3611,6 +3655,10 @@ class AwsManagedPolicy extends iam_floyd_1.AwsManagedPolicy {
|
|
|
3611
3655
|
AWSLambdaKinesisExecutionRole() {
|
|
3612
3656
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSLambdaKinesisExecutionRole);
|
|
3613
3657
|
}
|
|
3658
|
+
/** This policy grants permissions to to create and administer EC2 resources managed by the Lambda Managed Instances, and descriptive permissions. */
|
|
3659
|
+
AWSLambdaManagedEC2ResourceOperator() {
|
|
3660
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSLambdaManagedEC2ResourceOperator);
|
|
3661
|
+
}
|
|
3614
3662
|
/** Provides permissions required to access MSK Cluster within a VPC, manage ENIs (create, describe, delete) in the VPC and write permissions to CloudWatch Logs. */
|
|
3615
3663
|
AWSLambdaMSKExecutionRole() {
|
|
3616
3664
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSLambdaMSKExecutionRole);
|
|
@@ -3623,6 +3671,10 @@ class AwsManagedPolicy extends iam_floyd_1.AwsManagedPolicy {
|
|
|
3623
3671
|
AWSLambdaRole() {
|
|
3624
3672
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSLambdaRole);
|
|
3625
3673
|
}
|
|
3674
|
+
/** Allows Lambda to describe and terminate managed instances from EC2 on your behalf. */
|
|
3675
|
+
AWSLambdaServiceRolePolicy() {
|
|
3676
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSLambdaServiceRolePolicy);
|
|
3677
|
+
}
|
|
3626
3678
|
/** Provides receive message, delete message, and read attribute access to SQS queues, and write permissions to CloudWatch logs. */
|
|
3627
3679
|
AWSLambdaSQSQueueExecutionRole() {
|
|
3628
3680
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSLambdaSQSQueueExecutionRole);
|
|
@@ -3751,6 +3803,10 @@ class AwsManagedPolicy extends iam_floyd_1.AwsManagedPolicy {
|
|
|
3751
3803
|
AWSMarketplaceSellerProductsReadOnly() {
|
|
3752
3804
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSMarketplaceSellerProductsReadOnly);
|
|
3753
3805
|
}
|
|
3806
|
+
/** Provides full access to all MCP service actions. This policy does not grant access to the actions taken by the MCP, only the MCP actions themselves. */
|
|
3807
|
+
AWSMcpServiceActionsFullAccess() {
|
|
3808
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSMcpServiceActionsFullAccess);
|
|
3809
|
+
}
|
|
3754
3810
|
/** The default policy that enables access to AWS Services and Resources used or managed by MediaConnect. */
|
|
3755
3811
|
AWSMediaConnectServicePolicy() {
|
|
3756
3812
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSMediaConnectServicePolicy);
|
|
@@ -3919,10 +3975,22 @@ class AwsManagedPolicy extends iam_floyd_1.AwsManagedPolicy {
|
|
|
3919
3975
|
AWSPanoramaServiceRolePolicy() {
|
|
3920
3976
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSPanoramaServiceRolePolicy);
|
|
3921
3977
|
}
|
|
3978
|
+
/** Provides necessary access for channel handshake approval management activities. */
|
|
3979
|
+
AWSPartnerCentralChannelHandshakeApprovalManagement() {
|
|
3980
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSPartnerCentralChannelHandshakeApprovalManagement);
|
|
3981
|
+
}
|
|
3982
|
+
/** Provides necessary access for channel management activities. */
|
|
3983
|
+
AWSPartnerCentralChannelManagement() {
|
|
3984
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSPartnerCentralChannelManagement);
|
|
3985
|
+
}
|
|
3922
3986
|
/** Provides full access to AWS Partner Central and related AWS Services. */
|
|
3923
3987
|
AWSPartnerCentralFullAccess() {
|
|
3924
3988
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSPartnerCentralFullAccess);
|
|
3925
3989
|
}
|
|
3990
|
+
/** Provides necessary access for marketing activities. */
|
|
3991
|
+
AWSPartnerCentralMarketingManagement() {
|
|
3992
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSPartnerCentralMarketingManagement);
|
|
3993
|
+
}
|
|
3926
3994
|
/** Provides necessary access for opportunity management activities. */
|
|
3927
3995
|
AWSPartnerCentralOpportunityManagement() {
|
|
3928
3996
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSPartnerCentralOpportunityManagement);
|
|
@@ -4615,6 +4683,18 @@ class AwsManagedPolicy extends iam_floyd_1.AwsManagedPolicy {
|
|
|
4615
4683
|
AWSTransformApplicationECSDeploymentPolicy() {
|
|
4616
4684
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSTransformApplicationECSDeploymentPolicy);
|
|
4617
4685
|
}
|
|
4686
|
+
/** Provides access to execute transformations in AWS Transform custom. */
|
|
4687
|
+
AWSTransformCustomExecuteTransformations() {
|
|
4688
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSTransformCustomExecuteTransformations);
|
|
4689
|
+
}
|
|
4690
|
+
/** Provides full access to AWS Transform custom. */
|
|
4691
|
+
AWSTransformCustomFullAccess() {
|
|
4692
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSTransformCustomFullAccess);
|
|
4693
|
+
}
|
|
4694
|
+
/** Enables the management of transformation resources and execution of transformations in AWS Transform custom. */
|
|
4695
|
+
AWSTransformCustomManageTransformations() {
|
|
4696
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSTransformCustomManageTransformations);
|
|
4697
|
+
}
|
|
4618
4698
|
/** Provides full access to AWS Trusted Advisor Priority. This policy also enables the user to add Trusted Advisor as a trusted service with AWS Organizations and to specify delegated administrator accounts for Trusted Advisor Priority. */
|
|
4619
4699
|
AWSTrustedAdvisorPriorityFullAccess() {
|
|
4620
4700
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AWSTrustedAdvisorPriorityFullAccess);
|
|
@@ -5291,6 +5371,10 @@ class AwsManagedPolicy extends iam_floyd_1.AwsManagedPolicy {
|
|
|
5291
5371
|
NetworkSecurityDirectorServiceLinkedRolePolicy() {
|
|
5292
5372
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.NetworkSecurityDirectorServiceLinkedRolePolicy);
|
|
5293
5373
|
}
|
|
5374
|
+
/** This policy allows NovaAct to create and manage the necessary resources to operate the Nova Act agents. */
|
|
5375
|
+
NovaActServiceRolePolicy() {
|
|
5376
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.NovaActServiceRolePolicy);
|
|
5377
|
+
}
|
|
5294
5378
|
/** Provides full access to CloudWatch Observability Access Manager */
|
|
5295
5379
|
OAMFullAccess() {
|
|
5296
5380
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.OAMFullAccess);
|
|
@@ -5535,6 +5619,10 @@ class AwsManagedPolicy extends iam_floyd_1.AwsManagedPolicy {
|
|
|
5535
5619
|
SecretsManagerReadWrite() {
|
|
5536
5620
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.SecretsManagerReadWrite);
|
|
5537
5621
|
}
|
|
5622
|
+
/** Provides permissions for authenticated users to access the Security Agent Web Application for configuring and executing automated security penetration tests. This policy enables users to manage pentests, view findings, monitor test execution, and interact with AWS resources required for security testing operations. */
|
|
5623
|
+
SecurityAgentWebAppAPIPolicy() {
|
|
5624
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.SecurityAgentWebAppAPIPolicy);
|
|
5625
|
+
}
|
|
5538
5626
|
/** The security audit template grants access to read security configuration metadata. It is useful for software that audits the configuration of an AWS account. */
|
|
5539
5627
|
SecurityAudit() {
|
|
5540
5628
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.SecurityAudit);
|
|
@@ -5575,6 +5663,10 @@ class AwsManagedPolicy extends iam_floyd_1.AwsManagedPolicy {
|
|
|
5575
5663
|
ServiceQuotasServiceRolePolicy() {
|
|
5576
5664
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.ServiceQuotasServiceRolePolicy);
|
|
5577
5665
|
}
|
|
5666
|
+
/** Provides permissions for programmatic access to AWS through the AWS Sign-in service, including OAuth2 token creation for developer tools and applications. */
|
|
5667
|
+
SignInLocalDevelopmentAccess() {
|
|
5668
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.SignInLocalDevelopmentAccess);
|
|
5669
|
+
}
|
|
5578
5670
|
/** Provides full access to the Simple Workflow configuration service. */
|
|
5579
5671
|
SimpleWorkflowFullAccess() {
|
|
5580
5672
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.SimpleWorkflowFullAccess);
|
|
@@ -5657,4 +5749,4 @@ class AwsManagedPolicy extends iam_floyd_1.AwsManagedPolicy {
|
|
|
5657
5749
|
}
|
|
5658
5750
|
}
|
|
5659
5751
|
exports.AwsManagedPolicy = AwsManagedPolicy;
|
|
5660
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWlhbS1mbG95ZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1pYW0tZmxveWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXNDO0FBQ3RDLDJDQUF5RTtBQUV6RTs7Ozs7O0dBTUc7QUFDSCxNQUFhLGdCQUFpQixTQUFRLDRCQUFzQjtJQUN4RCx5REFBeUQ7SUFDbEQsK0JBQStCO1FBQ2xDLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsNEJBQXNCLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUNsSCxDQUFDO0lBRUQsMERBQTBEO0lBQ25ELG1CQUFtQjtRQUN0QixPQUFPLHFCQUFPLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDRCQUFzQixDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDdEcsQ0FBQztJQUVELHFJQUFxSTtJQUM5SCwwQkFBMEI7UUFDN0IsT0FBTyxxQkFBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyw0QkFBc0IsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFFRCwyTEFBMkw7SUFDcEwsc0NBQXNDO1FBQ3pDLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsNEJBQXNCLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUN6SCxDQUFDO0lBRUQsNEhBQTRIO0lBQ3JILGtDQUFrQztRQUNyQyxPQUFPLHFCQUFPLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDRCQUFzQixDQUFDLGtDQUFrQyxDQUFDLENBQUM7SUFDckgsQ0FBQztJQUVELG1KQUFtSjtJQUM1SSxvQkFBb0I7UUFDdkIsT0FBTyxxQkFBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyw0QkFBc0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3ZHLENBQUM7SUFFRCw0S0FBNEs7SUFDckssdUJBQXVCO1FBQzFCLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdC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QUM1RyxDQUFDO0NBQ0o7QUEvNE5ELDRDQSs0TkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhd3NfaWFtIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQXdzTWFuYWdlZFBvbGljeSBhcyBBd3NNYW5hZ2VkUG9saWN5U3RhdGljIH0gZnJvbSAnLi9pYW0tZmxveWQnO1xuXG4vKipcbiAqIFByb3ZpZGVzIGFsbCBBV1MgbWFuYWdlZCBwb2xpY2llcy5cbiAqXG4gKiBUbyBnZXQgdGhlIG5hbWUsIGFjY2VzcyB0aGUgc3RhdGljIHByb3BlcnRpZXMgb2YgdGhpcyBjbGFzcywgZS5nLiBgQXdzTWFuYWdlZFBvbGljeS5SZWFkT25seUFjY2Vzc2AuXG4gKlxuICogIFRvIGdldCBhbiBgYXdzX2lhbS5JTWFuYWdlZFBvbGljeWAgb2JqZWN0LCBjYWxsIHRoZSBtZXRob2RzIG9uIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcywgZS5nLiBgbmV3IEF3c01hbmFnZWRQb2xpY3koKS5SZWFkT25seUFjY2VzcygpYC5cbiAqL1xuZXhwb3J0IGNsYXNzIEF3c01hbmFnZWRQb2xpY3kgZXh0ZW5kcyBBd3NNYW5hZ2VkUG9saWN5U3RhdGljIHtcbiAgICAvKiogQWxsb3cgQWNjZXNzIEFuYWx5emVyIHRvIGFuYWx5emUgcmVzb3VyY2UgbWV0YWRhdGEgKi9cbiAgICBwdWJsaWMgQWNjZXNzQW5hbHl6ZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BY2Nlc3NBbmFseXplclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFkbWluaXN0cmF0b3JBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQWRtaW5pc3RyYXRvckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBhY2NvdW50IGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zIHdoaWxlIGV4cGxpY2l0bHkgYWxsb3dpbmcgZGlyZWN0IGFjY2VzcyB0byByZXNvdXJjZXMgbmVlZGVkIGJ5IEFtcGxpZnkgYXBwbGljYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBZG1pbmlzdHJhdG9yQWNjZXNzQW1wbGlmeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BZG1pbmlzdHJhdG9yQWNjZXNzQW1wbGlmeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBhY2NvdW50IGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zLiBFeHBsaWNpdGx5IGFsbG93cyBkZXZlbG9wZXJzIGFuZCBhZG1pbmlzdHJhdG9ycyB0byBnYWluIGRpcmVjdCBhY2Nlc3MgdG8gcmVzb3VyY2VzIHRoZXkgbmVlZCB0byBtYW5hZ2UgQVdTIEVsYXN0aWMgQmVhbnN0YWxrIGFwcGxpY2F0aW9ucyAqL1xuICAgIHB1YmxpYyBBZG1pbmlzdHJhdG9yQWNjZXNzQVdTRWxhc3RpY0JlYW5zdGFsaygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BZG1pbmlzdHJhdG9yQWNjZXNzQVdTRWxhc3RpY0JlYW5zdGFsayk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHJlcXVpcmVkIGJ5IHRoZSBBbWF6b24gQUkgT3BlcmF0aW9ucyBBc3Npc3RhbnQgdG8gZ2VuZXJhdGUgaW5jaWRlbnQgcmVwb3J0IG9mIHRoZSBpbnZlc3RpZ2F0aW9uLiAqL1xuICAgIHB1YmxpYyBBSU9wc0Fzc2lzdGFudEluY2lkZW50UmVwb3J0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFJT3BzQXNzaXN0YW50SW5jaWRlbnRSZXBvcnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBSZWFkT25seSBwZXJtaXNzaW9ucyByZXF1aXJlZCBieSB0aGUgQW1hem9uIEFJIE9wZXJhdGlvbnMgQXNzaXN0YW50IHRvIGRvIGFuYWx5c2lzIG9uIGN1c3RvbWVyIEFXUyByZXNvdXJjZXMgZHVyaW5nIGludmVzdGlnYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBSU9wc0Fzc2lzdGFudFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BSU9wc0Fzc2lzdGFudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQUkgT3BlcmF0aW9ucyBzZXJ2aWNlIGFuZCBpdHMgcmVxdWlyZWQgcGVybWlzc2lvbnMgdmlhIEFXUyBjb25zb2xlLiBJdCBhbHNvIGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIHVzZSBpZGVudGl0eS1hd2FyZSBjb25zb2xlIHNlc3Npb25zLiAqL1xuICAgIHB1YmxpYyBBSU9wc0NvbnNvbGVBZG1pblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BSU9wc0NvbnNvbGVBZG1pblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBBSSBPcGVyYXRpb25zIEFQSXMgZm9yIGNyZWF0aW5nLCB1cGRhdGluZywgYW5kIGRlbGV0aW5nIGludmVzdGlnYXRpb25zLCBpbnZlc3RpZ2F0aW9uIGV2ZW50cywgYW5kIGludmVzdGlnYXRpb24gcmVzb3VyY2VzLiBJdCBhbHNvIGluY2x1ZGVzIFJlYWRPbmx5IGFjY2VzcyB0byBhbGwgQUkgT3BlcmF0aW9ucyBBUElzIGFuZCB0byB1c2UgaWRlbnRpdHktYXdhcmUgc2Vzc2lvbnMuICovXG4gICAgcHVibGljIEFJT3BzT3BlcmF0b3JBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQUlPcHNPcGVyYXRvckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBSZWFkT25seSBwZXJtaXNzaW9ucyB0byB0aGUgQW1hem9uIEFJIE9wZXJhdGlvbnMgc2VydmljZSBhbmQgaXRzIHJlcXVpcmVkIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQUlPcHNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BSU9wc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBkZXZpY2Ugc2V0dXAgYWNjZXNzIHRvIEFsZXhhRm9yQnVzaW5lc3Mgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQWxleGFGb3JCdXNpbmVzc0RldmljZVNldHVwKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFsZXhhRm9yQnVzaW5lc3NEZXZpY2VTZXR1cCk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byBBbGV4YUZvckJ1c2luZXNzIHJlc291cmNlcyBhbmQgYWNjZXNzIHRvIHJlbGF0ZWQgQVdTIFNlcnZpY2VzICovXG4gICAgcHVibGljIEFsZXhhRm9yQnVzaW5lc3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFsZXhhRm9yQnVzaW5lc3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBnYXRld2F5IGV4ZWN1dGlvbiBhY2Nlc3MgdG8gQWxleGFGb3JCdXNpbmVzcyBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBbGV4YUZvckJ1c2luZXNzR2F0ZXdheUV4ZWN1dGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbGV4YUZvckJ1c2luZXNzR2F0ZXdheUV4ZWN1dGlvbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgYWNjZXNzIHRvIExpZmVzaXplIEFWUyBkZXZpY2VzICovXG4gICAgcHVibGljIEFsZXhhRm9yQnVzaW5lc3NMaWZlc2l6ZURlbGVnYXRlZEFjY2Vzc1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbGV4YUZvckJ1c2luZXNzTGlmZXNpemVEZWxlZ2F0ZWRBY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBlbmFibGVzIEFsZXhhIGZvciBCdXNpbmVzcyB0byBwZXJmb3JtIGF1dG9tYXRlZCB0YXNrcyBzY2hlZHVsZWQgYnkgeW91ciBuZXR3b3JrIHByb2ZpbGVzLiAqL1xuICAgIHB1YmxpYyBBbGV4YUZvckJ1c2luZXNzTmV0d29ya1Byb2ZpbGVTZXJ2aWNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFsZXhhRm9yQnVzaW5lc3NOZXR3b3JrUHJvZmlsZVNlcnZpY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIGFjY2VzcyB0byBQb2x5IEFWUyBkZXZpY2VzICovXG4gICAgcHVibGljIEFsZXhhRm9yQnVzaW5lc3NQb2x5RGVsZWdhdGVkQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFsZXhhRm9yQnVzaW5lc3NQb2x5RGVsZWdhdGVkQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSByZWFkIG9ubHkgYWNjZXNzIHRvIEFsZXhhRm9yQnVzaW5lc3Mgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQWxleGFGb3JCdXNpbmVzc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFsZXhhRm9yQnVzaW5lc3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGNyZWF0ZS9lZGl0L2RlbGV0ZSBBUElzIGluIEFtYXpvbiBBUEkgR2F0ZXdheSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkFQSUdhdGV3YXlBZG1pbmlzdHJhdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFQSUdhdGV3YXlBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gaW52b2tlIEFQSXMgaW4gQW1hem9uIEFQSSBHYXRld2F5LiAqL1xuICAgIHB1YmxpYyBBbWF6b25BUElHYXRld2F5SW52b2tlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25BUElHYXRld2F5SW52b2tlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBUEkgR2F0ZXdheSB0byBwdXNoIGxvZ3MgdG8gdXNlcidzIGFjY291bnQuICovXG4gICAgcHVibGljIEFtYXpvbkFQSUdhdGV3YXlQdXNoVG9DbG91ZFdhdGNoTG9ncygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25BUElHYXRld2F5UHVzaFRvQ2xvdWRXYXRjaExvZ3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQXBwRmxvdyBhbmQgYWNjZXNzIHRvIEFXUyBzZXJ2aWNlcyBzdXBwb3J0ZWQgYXMgZmxvdyBzb3VyY2Ugb3IgZGVzdGluYXRpb24gKFMzIGFuZCBSZWRzaGlmdCkuIEFsc28gcHJvdmlkZXMgYWNjZXNzIHRvIEtNUyBmb3IgZW5jcnlwdGlvbiAqL1xuICAgIHB1YmxpYyBBbWF6b25BcHBGbG93RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25BcHBGbG93RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEFwcGZsb3cgZmxvd3MgKi9cbiAgICBwdWJsaWMgQW1hem9uQXBwRmxvd1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFwcEZsb3dSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBBUkMgUmVnaW9uIHN3aXRjaCBmb3IgcGxhbiBleGVjdXRpb24gYW5kIHBsYW4gZXZhbHVhdGlvbi4gKi9cbiAgICBwdWJsaWMgQW1hem9uQXBwbGljYXRpb25SZWNvdmVyeUNvbnRyb2xsZXJSZWdpb25Td2l0Y2hQbGFuRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFwcGxpY2F0aW9uUmVjb3ZlcnlDb250cm9sbGVyUmVnaW9uU3dpdGNoUGxhbkV4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBBcHBTdHJlYW0gdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25BcHBTdHJlYW1GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFwcFN0cmVhbUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gQXBwU3RyZWFtIDIuMCBhY2Nlc3MgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgUHJpdmF0ZSBDQSBpbiBjdXN0b21lciBhY2NvdW50cyBmb3IgY2VydGlmaWNhdGUtYmFzZWQgYXV0aGVudGljYXRpb24gKi9cbiAgICBwdWJsaWMgQW1hem9uQXBwU3RyZWFtUENBQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFwcFN0cmVhbVBDQUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEFwcFN0cmVhbSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkFwcFN0cmVhbVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFwcFN0cmVhbVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIEFtYXpvbiBBcHBTdHJlYW0gc2VydmljZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25BcHBTdHJlYW1TZXJ2aWNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFwcFN0cmVhbVNlcnZpY2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBBdGhlbmEgYW5kIHNjb3BlZCBhY2Nlc3MgdG8gdGhlIGRlcGVuZGVuY2llcyBuZWVkZWQgdG8gZW5hYmxlIHF1ZXJ5aW5nLCB3cml0aW5nIHJlc3VsdHMsIGFuZCBkYXRhIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIEFtYXpvbkF0aGVuYUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXRoZW5hRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhY2Nlc3MgdG8gb3RoZXIgQVdTIHNlcnZpY2UgcmVzb3VyY2VzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIHJ1biBBbWF6b24gQXRoZW5hICovXG4gICAgcHVibGljIEFtYXpvbkF0aGVuYVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkF0aGVuYVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHBlcmZvcm0gYWxsIG9wZXJhdGlvbnMgQW1hem9uIEF1Z21lbnRlZCBBSSByZXNvdXJjZXMsIGluY2x1ZGluZyBGbG93RGVmaW5pdGlvbnMsIEh1bWFuVGFza1VpcyBhbmQgSHVtYW5Mb29wcy4gRG9lcyBub3QgYWxsb3cgYWNjZXNzIGZvciBjcmVhdGluZyBGbG93RGVmaW5pdGlvbnMgYWdhaW5zdCB0aGUgcHVibGljLWNyb3dkIFdvcmt0ZWFtLiAqL1xuICAgIHB1YmxpYyBBbWF6b25BdWdtZW50ZWRBSUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXVnbWVudGVkQUlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHBlcmZvcm0gYWxsIG9wZXJhdGlvbnMgb24gSHVtYW5Mb29wcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uQXVnbWVudGVkQUlIdW1hbkxvb3BGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkF1Z21lbnRlZEFJSHVtYW5Mb29wRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBwZXJmb3JtIGFsbCBvcGVyYXRpb25zIEFtYXpvbiBBdWdtZW50ZWQgQUkgcmVzb3VyY2VzLCBpbmNsdWRpbmcgRmxvd0RlZmluaXRpb25zLCBIdW1hblRhc2tVaXMgYW5kIEh1bWFuTG9vcHMuIEFsc28gcHJvdmlkZXMgYWNjZXNzIHRvIHRob3NlIG9wZXJhdGlvbnMgb2Ygc2VydmljZXMgdGhhdCBhcmUgaW50ZWdyYXRlZCB3aXRoIEFtYXpvbiBBdWdtZW50ZWQgQUkuICovXG4gICAgcHVibGljIEFtYXpvbkF1Z21lbnRlZEFJSW50ZWdyYXRlZEFQSUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25BdWdtZW50ZWRBSUludGVncmF0ZWRBUElBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjb25zb2xlIGZ1bGwgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEF1cm9yYSBEU1FMICovXG4gICAgcHVibGljIEFtYXpvbkF1cm9yYURTUUxDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25BdXJvcmFEU1FMQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBBdXJvcmEgRFNRTCAqL1xuICAgIHB1YmxpYyBBbWF6b25BdXJvcmFEU1FMRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25BdXJvcmFEU1FMRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQXVyb3JhIERTUUwgKi9cbiAgICBwdWJsaWMgQW1hem9uQXVyb3JhRFNRTFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkF1cm9yYURTUUxSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEJlZHJvY2sgTW9kZWwgaW5mZXJlbmNlIHBlcm1pc3Npb24gdG8gQmVkcm9jayBhZ2VudCBjb3JlIG1lbW9yeSAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrQWdlbnRDb3JlTWVtb3J5QmVkcm9ja01vZGVsSW5mZXJlbmNlRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrQWdlbnRDb3JlTWVtb3J5QmVkcm9ja01vZGVsSW5mZXJlbmNlRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBCZWRyb2NrIGFzIHdlbGwgYXMgbGltaXRlZCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyB0aGF0IGFyZSByZXF1aXJlZCBieSBpdCAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGxpbWl0ZWQgYWNjZXNzIHRvIEFtYXpvbiBCZWRyb2NrIGFzIHdlbGwgYXMgdG8gcmVsYXRlZCBzZXJ2aWNlcyB0aGF0IGFyZSByZXF1aXJlZCBieSBpdCAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrTGltaXRlZEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrTGltaXRlZEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGxpbWl0ZWQgYWNjZXNzIHRvIEFtYXpvbiBCZWRyb2NrIE1hcmtldHBsYWNlIGFzIHdlbGwgYXMgdG8gcmVsYXRlZCBzZXJ2aWNlcyB0aGF0IGFyZSByZXF1aXJlZCBieSBpdCAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrTWFya2V0cGxhY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQmVkcm9ja01hcmtldHBsYWNlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQmVkcm9jayAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQmVkcm9ja1JlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogRGVmaW5lcyB0aGUgbWF4aW11bSBwZXJtaXNzaW9ucyBvZiBJQU0gcm9sZXMgdGhhdCBBbWF6b24gQmVkcm9jayBTdHVkaW8gY3JlYXRlcyBmb3Igb3BlcmF0aW5nIEFtYXpvbiBCZWRyb2NrIFN0dWRpbyByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbkJlZHJvY2tTdHVkaW9QZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJlZHJvY2tTdHVkaW9QZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEJyYWtldCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gQWxzbyBwcm92aWRlcyBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyAoZS5nLiwgUzMsIGxvZ3MpLiAqL1xuICAgIHB1YmxpYyBBbWF6b25CcmFrZXRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJyYWtldEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgcmVzb3VyY2VzIG5lY2Vzc2FyeSBmb3IgZXhlY3V0aW5nIGFuIEFtYXpvbiBCcmFrZXQgSm9iIGluY2x1ZGluZyBTMywgQ2xvdWR3YXRjaCwgSUFNIGFuZCBCcmFrZXQgKi9cbiAgICBwdWJsaWMgQW1hem9uQnJha2V0Sm9ic0V4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CcmFrZXRKb2JzRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBCcmFrZXQgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBbWF6b25CcmFrZXRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CcmFrZXRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBDaGltZSBBZG1pbiBDb25zb2xlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ2hpbWVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNoaW1lRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIENoaW1lIEFkbWluIENvbnNvbGUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25DaGltZVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNoaW1lUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQW1hem9uIENoaW1lIFNESyBvcGVyYXRpb25zICovXG4gICAgcHVibGljIEFtYXpvbkNoaW1lU0RLKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNoaW1lU0RLKTtcbiAgICB9XG5cbiAgICAvKiogTWFuYWdlZCBQb2xpY3kgRm9yIEFtYXpvbiBDaGltZSBTREsgTWVkaWFQaXBlbGluZXMgU2VydmljZSBMaW5rZWQgUm9sZSAqL1xuICAgIHB1YmxpYyBBbWF6b25DaGltZVNES01lZGlhUGlwZWxpbmVzU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2hpbWVTREtNZWRpYVBpcGVsaW5lc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBDaGltZSBTREsgTWVzc2FnaW5nIHRvIGFjY2VzcyBBV1MgcmVzb3VyY2VzIGFuZCBlbmFibGUgbWVzc2FnaW5nIGZ1bmN0aW9uYWxpdHkgKi9cbiAgICBwdWJsaWMgQW1hem9uQ2hpbWVTREtNZXNzYWdpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DaGltZVNES01lc3NhZ2luZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIENoaW1lICovXG4gICAgcHVibGljIEFtYXpvbkNoaW1lU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2hpbWVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gQ2hpbWUgdG8gYWNjZXNzIEFtYXpvbiBUcmFuc2NyaWJlIGFuZCBBbWF6b24gVHJhbnNjcmliZSBNZWRpY2FsIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFtYXpvbkNoaW1lVHJhbnNjcmlwdGlvblNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNoaW1lVHJhbnNjcmlwdGlvblNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdXNlciBtYW5hZ2VtZW50IGFjY2VzcyB0byBBbWF6b24gQ2hpbWUgQWRtaW4gQ29uc29sZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkNoaW1lVXNlck1hbmFnZW1lbnQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2hpbWVVc2VyTWFuYWdlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqIE1hbmFnZWQgcG9saWN5IGZvciBTZXJ2aWNlIExpbmtlZCBSb2xlIGZvciBBbWF6b24gQ2hpbWUgVm9pY2VDb25uZWN0b3IgKi9cbiAgICBwdWJsaWMgQW1hem9uQ2hpbWVWb2ljZUNvbm5lY3RvclNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNoaW1lVm9pY2VDb25uZWN0b3JTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBDbG91ZCBEaXJlY3RvcnkgU2VydmljZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ2xvdWREaXJlY3RvcnlGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNsb3VkRGlyZWN0b3J5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIENsb3VkIERpcmVjdG9yeSBTZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25DbG91ZERpcmVjdG9yeVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNsb3VkRGlyZWN0b3J5UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBDbG91ZFdhdGNoIEV2aWRlbnRseS4gQWxzbyBwcm92aWRlcyBhY2Nlc3MgdG8gcmVsYXRlZCBBbWF6b24gUzMsIEFtYXpvbiBTTlMsIEFtYXpvbiBDbG91ZFdhdGNoLCBhbmQgb3RoZXIgcmVsYXRlZCBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ2xvdWRXYXRjaEV2aWRlbnRseUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2xvdWRXYXRjaEV2aWRlbnRseUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBDbG91ZFdhdGNoIEV2aWRlbnRseSAqL1xuICAgIHB1YmxpYyBBbWF6b25DbG91ZFdhdGNoRXZpZGVudGx5UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2xvdWRXYXRjaEV2aWRlbnRseVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENsb3VkV2F0Y2ggRXZpZGVudGx5IFNlcnZpY2UgdG8gbWFuYWdlIGFzc29jaWF0ZWQgQVdTIFJlc291cmNlcyBvbiBiZWhhbGYgb2YgdGhlIGN1c3RvbWVyICovXG4gICAgcHVibGljIEFtYXpvbkNsb3VkV2F0Y2hFdmlkZW50bHlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DbG91ZFdhdGNoRXZpZGVudGx5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgcGVybWlzc2lvbnMgZm9yIHRoZSBBbWF6b24gQ2xvdWRXYXRjaCBSVU0gc2VydmljZSAqL1xuICAgIHB1YmxpYyBBbWF6b25DbG91ZFdhdGNoUlVNRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DbG91ZFdhdGNoUlVNRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyByZWFkIG9ubHkgcGVybWlzc2lvbnMgZm9yIHRoZSBBbWF6b24gQ2xvdWRXYXRjaCBSVU0gc2VydmljZSAqL1xuICAgIHB1YmxpYyBBbWF6b25DbG91ZFdhdGNoUlVNUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2xvdWRXYXRjaFJVTVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb24gdG8gQW1hem9uIENsb3VkV2F0Y2ggUlVNIFNlcnZpY2UgdG8gcHVibGlzaCBtb25pdG9yaW5nIGRhdGEgdG8gb3RoZXIgcmVsZXZhbnQgQVdTIHNlcnZpY2VzICovXG4gICAgcHVibGljIEFtYXpvbkNsb3VkV2F0Y2hSVU1TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DbG91ZFdhdGNoUlVNU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQ29kZUNhdGFseXN0ICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVDYXRhbHlzdEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29kZUNhdGFseXN0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIENvZGVDYXRhbHlzdCAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2RlQ2F0YWx5c3RSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2RlQ2F0YWx5c3RSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gQ29kZUNhdGFseXN0IHRvIGNyZWF0ZSwgdXBkYXRlLCBhbmQgcmVzb2x2ZSBBV1MgU3VwcG9ydCBjYXNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29kZUNhdGFseXN0U3VwcG9ydEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2RlQ2F0YWx5c3RTdXBwb3J0QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHJlcXVpcmVkIGJ5IEFtYXpvbiBDb2RlR3VydSBQcm9maWxlciBhZ2VudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29kZUd1cnVQcm9maWxlckFnZW50QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZGVHdXJ1UHJvZmlsZXJBZ2VudEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBDb2RlR3VydSBQcm9maWxlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29kZUd1cnVQcm9maWxlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29kZUd1cnVQcm9maWxlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBDb2RlR3VydSBQcm9maWxlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29kZUd1cnVQcm9maWxlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZGVHdXJ1UHJvZmlsZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQ29kZUd1cnUgUmV2aWV3ZXIgYW5kIHNjb3BlZCBhY2Nlc3MgdG8gcmVxdWlyZWQgZGVwZW5kZW5jaWVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2RlR3VydVJldmlld2VyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2RlR3VydVJldmlld2VyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIENvZGVHdXJ1IFJldmlld2VyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2RlR3VydVJldmlld2VyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29kZUd1cnVSZXZpZXdlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQSBzZXJ2aWNlLWxpbmtlZCByb2xlIHJlcXVpcmVkIGZvciBBbWF6b24gQ29kZUd1cnUgUmV2aWV3ZXIgdG8gYWNjZXNzIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29kZUd1cnVSZXZpZXdlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZGVHdXJ1UmV2aWV3ZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBDb2RlR3VydSBTZWN1cml0eS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29kZUd1cnVTZWN1cml0eUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29kZUd1cnVTZWN1cml0eUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgcmVxdWlyZWQgZm9yIHdvcmtpbmcgd2l0aCBBbWF6b24gQ29kZUd1cnUgU2VjdXJpdHkgc2NhbnMuICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVHdXJ1U2VjdXJpdHlTY2FuQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZGVHdXJ1U2VjdXJpdHlTY2FuQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFtYXpvbiBDb2duaXRvIEFQSXMgdG8gc3VwcG9ydCBkZXZlbG9wZXIgYXV0aGVudGljYXRlZCBpZGVudGl0aWVzIGZyb20geW91ciBhdXRoZW50aWNhdGlvbiBiYWNrZW5kLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2duaXRvRGV2ZWxvcGVyQXV0aGVudGljYXRlZElkZW50aXRpZXMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29nbml0b0RldmVsb3BlckF1dGhlbnRpY2F0ZWRJZGVudGl0aWVzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBDb2duaXRvIFVzZXIgUG9vbHMgc2VydmljZSB0byB1c2UgeW91ciBTRVMgaWRlbnRpdGllcyBmb3IgZW1haWwgc2VuZGluZyAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2duaXRvSWRwRW1haWxTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2duaXRvSWRwRW1haWxTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gQ29nbml0byBVc2VyIFBvb2xzICovXG4gICAgcHVibGljIEFtYXpvbkNvZ25pdG9JZHBTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2duaXRvSWRwU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgdG8gZXhpc3RpbmcgQW1hem9uIENvZ25pdG8gcmVzb3VyY2VzLiBZb3Ugd2lsbCBuZWVkIEFXUyBhY2NvdW50IGFkbWluIHByaXZpbGVnZXMgdG8gY3JlYXRlIG5ldyBDb2duaXRvIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29nbml0b1Bvd2VyVXNlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2duaXRvUG93ZXJVc2VyKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQ29nbml0byByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbkNvZ25pdG9SZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2duaXRvUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBkZWZpbmVzIHRoZSBzZXQgb2YgcGVybWlzc2lvbnMgYWxsb3dlZCBmb3IgdW5hdXRoZW50aWNhdGVkIGlkZW50aXRpZXMgZm9yIENvZ25pdG8gSWRlbnRpdHkgUG9vbHMuIFRoaXMgcG9saWN5IGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGEgc3RhbmQgYWxvbmUgcGVybWlzc2lvbiBwb2xpY3kuIEl0IGlzIHVzZWQgYXMgYSBndWFyZHJhaWwgYWdhaW5zdCBvdmVybHkgcGVybWlzc2l2ZSBwb2xpY2llcyBhdHRhY2hlZCBmb3Igcm9sZXMgaW4gYW4gaWRlbnRpdHkgcG9vbC4gRG8gbm90IGF0dGFjaCB0aGlzIHBvbGljeSB0byBhbnkgcm9sZXMsIGFzIENvZ25pdG8gSWRlbnRpdHkgU2VydmljZSB3aWxsIGF1dG9tYXRpY2FsbHkgaW5jbHVkZSBpdCBhcyBhIHNjb3BlZCBkb3duIHBvbGljeSB3aGVuIGNyZWF0aW5nIGNyZWRlbnRpYWxzLiBUaGUgcHJpdmlsZWdlcyB0byB0ZW1wb3JhcmlseSBhY2Nlc3Mgb3RoZXIgQVdTIHJlc291cmNlcyB0aHJvdWdoIHRoZSBlbmhhbmNlZCBmbG93IHdpbGwgbm93IGJlIGRlZmluZWQgYnkgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgcm9sZSBhc3NvY2lhdGVkIHdpdGggdGhlIGlkZW50aXR5IG9mIHRoZSB1bmF1dGhlbnRpY2F0ZWQgdXNlciBwcm92aWRlZCBieSBhIHNlcnZpY2UsIGFuZCB0aGUgcHJpdmlsZWdlcyBnaXZlbiBpbiB0aGlzIG1hbmFnZWQgcG9saWN5IHRoYXQgaXMgb3duZWQgYnkgQ29nbml0by4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29nbml0b1VuQXV0aGVkSWRlbnRpdGllc1Nlc3Npb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29nbml0b1VuQXV0aGVkSWRlbnRpdGllc1Nlc3Npb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBkZWZpbmVzIHRoZSBzZXQgb2YgcGVybWlzc2lvbnMgYWxsb3dlZCBmb3IgdW5hdXRoZW50aWNhdGVkIGlkZW50aXRpZXMgZm9yIENvZ25pdG8gSWRlbnRpdHkgUG9vbHMuIFRoaXMgZG9lcyBub3QgbmVlZCB0byBiZSBhdHRhY2hlZCB0byB5b3VyIHVuYXV0aCByb2xlLCBhcyBDb2duaXRvIElkZW50aXR5IFNlcnZpY2Ugd2lsbCBhdXRvbWF0aWNhbGx5IGluY2x1ZGUgaXQgYXMgYSBzY29wZWQgZG93biBwb2xpY3kgd2hlbiBjcmVhdGluZyBjcmVkZW50aWFscy4gVGhlIHByaXZpbGVnZXMgdG8gdGVtcG9yYXJpbHkgYWNjZXNzIG90aGVyIEFXUyByZXNvdXJjZXMgdGhyb3VnaCB0aGUgZW5oYW5jZWQgZmxvdyB3aWxsIG5vdyBiZSBkZWZpbmVkIGJ5IHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHJvbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpZGVudGl0eSBvZiB0aGUgdW5hdXRoZW50aWNhdGVkIHVzZXIgcHJvdmlkZWQgYnkgYSBzZXJ2aWNlLCBhbmQgdGhlIHByaXZpbGVnZXMgZ2l2ZW4gaW4gdGhpcyBtYW5hZ2VkIHBvbGljeSB0aGF0IGlzIG93bmVkIGJ5IENvZ25pdG8uICovXG4gICAgcHVibGljIEFtYXpvbkNvZ25pdG9VbmF1dGhlbnRpY2F0ZWRJZGVudGl0aWVzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZ25pdG9VbmF1dGhlbnRpY2F0ZWRJZGVudGl0aWVzKTtcbiAgICB9XG5cbiAgICAvKiogVGhlIHB1cnBvc2Ugb2YgdGhpcyBwb2xpY3kgaXMgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG8gQVdTIENvbm5lY3QgdXNlcnMgcmVxdWlyZWQgdG8gdXNlIENvbm5lY3QgcmVzb3VyY2VzLiBUaGlzIHBvbGljeSBwcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgQ29ubmVjdCByZXNvdXJjZXMgdmlhIHRoZSBDb25uZWN0IENvbnNvbGUgYW5kIHB1YmxpYyBBUElzICovXG4gICAgcHVibGljIEFtYXpvbkNvbm5lY3RGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvbm5lY3RGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBBbWF6b24gQ29ubmVjdCBDYW1wYWlnbnMgc2VydmljZSBsaW5rZWQgcm9sZSAqL1xuICAgIHB1YmxpYyBBbWF6b25Db25uZWN0Q2FtcGFpZ25zU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29ubmVjdENhbXBhaWduc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb24gdG8gdmlldyB0aGUgQW1hem9uIENvbm5lY3QgaW5zdGFuY2VzIGluIHlvdXIgQVdTIGFjY291bnQuICovXG4gICAgcHVibGljIEFtYXpvbkNvbm5lY3RSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db25uZWN0UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIENvbm5lY3QgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29ubmVjdFNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvbm5lY3RTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gQ29ubmVjdCB0byBzeW5jaHJvbml6ZSBBV1MgcmVzb3VyY2VzIGFjcm9zcyByZWdpb25zIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db25uZWN0U3luY2hyb25pemF0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29ubmVjdFN5bmNocm9uaXphdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIENvbm5lY3QgVm9pY2UgSUQgKi9cbiAgICBwdWJsaWMgQW1hem9uQ29ubmVjdFZvaWNlSURGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvbm5lY3RWb2ljZUlERnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGNvbnN1bWUgQW1hem9uIEJlZHJvY2sgbW9kZWxzLCBpbmNsdWRpbmcgaW52b2tpbmcgQW1hem9uIEJlZHJvY2sgYXBwbGljYXRpb24gaW5mZXJlbmNlIHByb2ZpbGUgY3JlYXRlZCBmb3IgcGFydGljdWxhciBBbWF6b24gRGF0YVpvbmUgZG9tYWluLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EYXRhWm9uZUJlZHJvY2tNb2RlbENvbnN1bXB0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRhdGFab25lQmVkcm9ja01vZGVsQ29uc3VtcHRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgQW1hem9uIEJlZHJvY2sgbW9kZWwgYWNjZXNzLCBpbmNsdWRpbmcgY3JlYXRpbmcsIHRhZ2dpbmcgYW5kIGRlbGV0aW5nIGFwcGxpY2F0aW9uIGluZmVyZW5jZSBwcm9maWxlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVCZWRyb2NrTW9kZWxNYW5hZ2VtZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRhdGFab25lQmVkcm9ja01vZGVsTWFuYWdlbWVudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgcG9saWN5IGZvciB0aGUgQW1hem9uIERhdGFab25lJ3MgRG9tYWluRXhlY3V0aW9uUm9sZSBzZXJ2aWNlIHJvbGUuIFRoaXMgcm9sZSBpcyB1c2VkIGJ5IEFtYXpvbiBEYXRhWm9uZSB0byBjYXRhbG9nLCBkaXNjb3ZlciwgZ292ZXJuLCBzaGFyZSwgYW5kIGFuYWx5emUgZGF0YSBpbiB0aGUgQW1hem9uIERhdGFab25lIGRvbWFpbi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVEb21haW5FeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRhdGFab25lRG9tYWluRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBEYXRhWm9uZSBjcmVhdGVzIElBTSByb2xlcyBmb3IgRW52aXJvbm1lbnRzIHRvIHBlcmZvcm0gZGF0YSBhbmFseXRpY3MgYWN0aW9ucywgYW5kIHVzZXMgdGhpcyBwb2xpY3kgd2hlbiBjcmVhdGluZyB0aGVzZSByb2xlcyB0byBkZWZpbmUgdGhlIGJvdW5kYXJ5IG9mIHRoZWlyIHBlcm1pc3Npb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EYXRhWm9uZUVudmlyb25tZW50Um9sZVBlcm1pc3Npb25zQm91bmRhcnkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGF0YVpvbmVFbnZpcm9ubWVudFJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIERhdGFab25lIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhcyB3ZWxsIGFzIGxpbWl0ZWQgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgdGhhdCBhcmUgcmVxdWlyZWQgYnkgaXQuICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EYXRhWm9uZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRGF0YVpvbmUsIGJ1dCBkb2VzIG5vdCBhbGxvdyB0aGUgbWFuYWdlbWVudCBvZiBkb21haW5zLCB1c2Vycywgb3IgYXNzb2NpYXRlZCBhY2NvdW50cy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVGdWxsVXNlckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EYXRhWm9uZUZ1bGxVc2VyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhlIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gYWxsb3cgQW1hem9uIERhdGFab25lIHRvIGVuYWJsZSBwdWJsaXNoaW5nIGFuZCBhY2Nlc3MgZ3JhbnRzIHRvIGRhdGEuICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lR2x1ZU1hbmFnZUFjY2Vzc1JvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGF0YVpvbmVHbHVlTWFuYWdlQWNjZXNzUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBEYXRhWm9uZSBpcyBhIGRhdGEgbWFuYWdlbWVudCBzZXJ2aWNlIHRoYXQgZW5hYmxlcyB5b3UgdG8gY2F0YWxvZywgZGlzY292ZXIsIGdvdmVybiwgc2hhcmUsIGFuZCBhbmFseXplIHlvdXIgZGF0YS4gV2l0aCBBbWF6b24gRGF0YVpvbmUsIHlvdSBjYW4gc2hhcmUgYW5kIGFjY2VzcyB5b3VyIGRhdGEgYWNyb3NzIGFjY291bnRzIGFuZCBzdXBwb3J0ZWQgcmVnaW9ucy4gQW1hem9uIERhdGFab25lIHNpbXBsaWZpZXMgeW91ciBleHBlcmllbmNlIGFjcm9zcyBBV1Mgc2VydmljZXMsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBBbWF6b24gUmVkc2hpZnQsIEFtYXpvbiBBdGhlbmEsIEFXUyBHbHVlLCBhbmQgQVdTIExha2UgRm9ybWF0aW9uLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EYXRhWm9uZVJlZHNoaWZ0R2x1ZVByb3Zpc2lvbmluZ1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EYXRhWm9uZVJlZHNoaWZ0R2x1ZVByb3Zpc2lvbmluZ1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdpdmVzIEFtYXpvbiBEYXRhWm9uZSBwZXJtaXNzaW9ucyB0byBwdWJsaXNoIEFtYXpvbiBSZWRzaGlmdCBkYXRhIHRvIHRoZSBjYXRhbG9nLiBJdCBhbHNvIGdpdmVzIEFtYXpvbiBEYXRhWm9uZSBwZXJtaXNzaW9ucyB0byBncmFudCBhY2Nlc3Mgb3IgcmV2b2tlIGFjY2VzcyB0byBBbWF6b24gUmVkc2hpZnQgb3IgQW1hem9uIFJlZHNoaWZ0IFNlcnZlcmxlc3MgcHVibGlzaGVkIGFzc2V0cyBpbiB0aGUgY2F0YWxvZy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVSZWRzaGlmdE1hbmFnZUFjY2Vzc1JvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGF0YVpvbmVSZWRzaGlmdE1hbmFnZUFjY2Vzc1JvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgQW1hem9uRGF0YVpvbmVTYWdlTWFrZXJFbnZpcm9ubWVudFJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5IHBvbGljeSBpcyB0aGUgbGlzdCBvZiBwZXJtaXNzaW9ucyB0aGF0IGFyZSBwZXJtaXR0ZWQgb24gYW4gZXhlY3V0aW9uIHJvbGUgY3JlYXRlZCBpbiBhIFNhZ2VNYWtlciBlbnZpcm9ubWVudCBwcm92aXNpb25lZCBieSBBbWF6b24gRGF0YVpvbmUuICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lU2FnZU1ha2VyRW52aXJvbm1lbnRSb2xlUGVybWlzc2lvbnNCb3VuZGFyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EYXRhWm9uZVNhZ2VNYWtlckVudmlyb25tZW50Um9sZVBlcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgQW1hem9uRGF0YVpvbmVTYWdlTWFrZXJNYW5hZ2VBY2Nlc3NSb2xlUG9saWN5IHBvbGljeSBncmFudHMgQW1hem9uIERhdGFab25lIHRoZSBwZXJtaXNzaW9ucyByZXF1aXJlZCB0byBncmFudCB1c2VyIGFjY2VzcyB0byB2YXJpb3VzIHJlc291cmNlcyBpbiB0aGUgU2FnZU1ha2VyIGVudmlyb25tZW50LiAqL1xuICAgIHB1YmxpYyBBbWF6b25EYXRhWm9uZVNhZ2VNYWtlck1hbmFnZUFjY2Vzc1JvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGF0YVpvbmVTYWdlTWFrZXJNYW5hZ2VBY2Nlc3NSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIEFtYXpvbkRhdGFab25lU2FnZU1ha2VyUHJvdmlzaW9uaW5nUm9sZVBvbGljeSBwb2xpY3kgZ3JhbnRzIEFtYXpvbiBEYXRhWm9uZSB0aGUgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gaW50ZXJvcGVyYXRlIHdpdGggQW1hem9uIFNhZ2VNYWtlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVTYWdlTWFrZXJQcm92aXNpb25pbmdSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRhdGFab25lU2FnZU1ha2VyUHJvdmlzaW9uaW5nUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqICBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRGV0ZWN0aXZlIHNlcnZpY2UgYW5kIHNjb3BlZCBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgVUkgZGVwZW5kZW5jaWVzICovXG4gICAgcHVibGljIEFtYXpvbkRldGVjdGl2ZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGV0ZWN0aXZlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGludmVzdGlnYXRvciBhY2Nlc3MgdG8gQW1hem9uIERldGVjdGl2ZSBzZXJ2aWNlIGFuZCBzY29wZWQgYWNjZXNzIHRvIHRoZSBjb25zb2xlIFVJIGRlcGVuZGVuY2llcy4gVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb24gdG8gZGl2ZSBpbnRvIERldGVjdGl2ZSBmb3IgaW52ZXN0aWdhdGlvbiBwdXJwb3NlcyBhbmQgbGltaXRlZCB3cml0ZSBhY2Nlc3MgdG8gR3VhcmRkdXR5LiAqL1xuICAgIHB1YmxpYyBBbWF6b25EZXRlY3RpdmVJbnZlc3RpZ2F0b3JBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGV0ZWN0aXZlSW52ZXN0aWdhdG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbWVtYmVyIGFjY2VzcyB0byBBbWF6b24gRGV0ZWN0aXZlIHNlcnZpY2UgYW5kIHNjb3BlZCBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgVUkgZGVwZW5kZW5jaWVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EZXRlY3RpdmVNZW1iZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGV0ZWN0aXZlTWVtYmVyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgT3JnYW5pemF0aW9ucyBhY2Nlc3MgdG8gbWFuYWdlIERlbGVnYXRlZCBhZG1pbmlzdHJhdG9yIGZvciBBbWF6b24gRGV0ZWN0aXZlIGFuZCBzY29wZWQgYWNjZXNzIHRvIHRoZSBjb25zb2xlIFVJIGRlcGVuZGVuY2llcy4gVGhpcyBhbHNvIGdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIHNlcnZpY2UtbGlua2VkIHJvbGUgZm9yIERldGVjdGl2ZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGV0ZWN0aXZlT3JnYW5pemF0aW9uc0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EZXRlY3RpdmVPcmdhbml6YXRpb25zQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBEZXRlY3RpdmUgdG8gbWFrZSBzZXJ2aWNlIGNhbGxzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFtYXpvbkRldGVjdGl2ZVNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRldGVjdGl2ZVNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIHBvbGljeSBncmFudHMgZnVsbC1hY2Nlc3MgdG8gdGhlIERldk9wcyBHdXJ1IGNvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkRldk9wc0d1cnVDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EZXZPcHNHdXJ1Q29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRGV2T3BzIEd1cnUuICovXG4gICAgcHVibGljIEFtYXpvbkRldk9wc0d1cnVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRldk9wc0d1cnVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBhY2Nlc3MgdG8gZW5hYmxlIGFuZCBtYW5hZ2UgQW1hem9uIERldk9wcyBHdXJ1IHdpdGhpbiBhbiBvcmdhbml6YXRpb24uICovXG4gICAgcHVibGljIEFtYXpvbkRldk9wc0d1cnVPcmdhbml6YXRpb25zQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRldk9wc0d1cnVPcmdhbml6YXRpb25zQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRGV2T3BzIEd1cnUgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGV2T3BzR3VydVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRldk9wc0d1cnVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEEgc2VydmljZS1saW5rZWQgcm9sZSByZXF1aXJlZCBmb3IgQW1hem9uIERldk9wc0d1cnUgdG8gYWNjZXNzIHlvdXIgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EZXZPcHNHdXJ1U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGV2T3BzR3VydVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHVwbG9hZCBETVMgcmVwbGljYXRpb24gbG9ncyB0byBjbG91ZHdhdGNoIGxvZ3MgaW4gY3VzdG9tZXIgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uRE1TQ2xvdWRXYXRjaExvZ3NSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRNU0Nsb3VkV2F0Y2hMb2dzUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBtYW5hZ2UgUzMgc2V0dGluZ3MgZm9yIFJlZHNoaWZ0IGVuZHBvaW50cyBmb3IgRE1TLiAqL1xuICAgIHB1YmxpYyBBbWF6b25ETVNSZWRzaGlmdFMzUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25ETVNSZWRzaGlmdFMzUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBtYW5hZ2UgVlBDIHNldHRpbmdzIGZvciBBV1MgbWFuYWdlZCBjdXN0b21lciBjb25maWd1cmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBbWF6b25ETVNWUENNYW5hZ2VtZW50Um9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25ETVNWUENNYW5hZ2VtZW50Um9sZSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gRG9jdW1lbnREQi1FbGFzdGljIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Eb2NEQkVsYXN0aWNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Eb2NEQkVsYXN0aWNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIG1hbmFnZSBBbWF6b24gRG9jdW1lbnREQiB3aXRoIE1vbmdvREIgY29tcGF0aWJpbGl0eSB1c2luZyB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gTm90ZSB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBmdWxsIGFjY2VzcyB0byBwdWJsaXNoIG9uIGFsbCBTTlMgdG9waWNzIHdpdGhpbiB0aGUgYWNjb3VudCwgcGVybWlzc2lvbnMgdG8gY3JlYXRlIGFuZCBlZGl0IEFtYXpvbiBFQzIgaW5zdGFuY2VzIGFuZCBWUEMgY29uZmlndXJhdGlvbnMsIHBlcm1pc3Npb25zIHRvIHZpZXcgYW5kIGxpc3Qga2V5cyBvbiBBbWF6b24gS01TLCBhbmQgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJEUyBhbmQgQW1hem9uIE5lcHR1bmUuICovXG4gICAgcHVibGljIEFtYXpvbkRvY0RCQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRG9jREJDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBEb2N1bWVudERCIEVsYXN0aWMgQ2x1c3RlcnMgYW5kIG90aGVyIHJlcXVpcmVkIHBlcm1pc3Npb25zIGZvciBpdHMgZGVwZW5kZW5jaWVzIGluY2x1ZGluZyBFQzIsIEtNUywgU2VjcmV0c01hbmFnZXIsIENsb3VkV2F0Y2ggYW5kIElBTS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRG9jREJFbGFzdGljRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Eb2NEQkVsYXN0aWNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gRG9jREItRWxhc3RpYyBhbmQgQ2xvdWRXYXRjaCBtZXRyaWNzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Eb2NEQkVsYXN0aWNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Eb2NEQkVsYXN0aWNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBEb2N1bWVudERCIHdpdGggTW9uZ29EQiBjb21wYXRpYmlsaXR5LiBOb3RlIHRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIGZ1bGwgYWNjZXNzIHRvIHB1Ymxpc2ggb24gYWxsIFNOUyB0b3BpY3Mgd2l0aGluIHRoZSBhY2NvdW50IGFuZCBmdWxsIGFjY2VzcyB0byBBbWF6b24gUkRTIGFuZCBBbWF6b24gTmVwdHVuZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRG9jREJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRvY0RCRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIERvY3VtZW50REIgd2l0aCBNb25nb0RCIGNvbXBhdGliaWxpdHkuIE5vdGUgdGhhdCB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBhY2Nlc3MgdG8gQW1hem9uIFJEUyBhbmQgQW1hem9uIE5lcHR1bmUgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Eb2NEQlJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRvY0RCUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gbWFuYWdlIFZQQyBzZXR0aW5ncyBmb3IgQW1hem9uIG1hbmFnZWQgY3VzdG9tZXIgY29uZmlndXJhdGlvbnMgKi9cbiAgICBwdWJsaWMgQW1hem9uRFJTVlBDTWFuYWdlbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EUlNWUENNYW5hZ2VtZW50KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIER5bmFtb0RCIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRHluYW1vREJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkR5bmFtb0RCRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBEeW5hbW9EQiAqL1xuICAgIHB1YmxpYyBBbWF6b25EeW5hbW9EQkZ1bGxBY2Nlc3NWMigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EeW5hbW9EQkZ1bGxBY2Nlc3NWMik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIG9uIGEgZGVwcmVjYXRpb24gcGF0aC4gU2VlIGRvY3VtZW50YXRpb24gZm9yIGd1aWRhbmNlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0R5bmFtb0RCUGlwZWxpbmUuaHRtbC4gUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIER5bmFtb0RCIGluY2x1ZGluZyBFeHBvcnQvSW1wb3J0IHVzaW5nIEFXUyBEYXRhIFBpcGVsaW5lIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRHluYW1vREJGdWxsQWNjZXNzd2l0aERhdGFQaXBlbGluZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EeW5hbW9EQkZ1bGxBY2Nlc3N3aXRoRGF0YVBpcGVsaW5lKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRHluYW1vREIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EeW5hbW9EQlJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkR5bmFtb0RCUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBJQU0gUG9saWN5IHRoYXQgYWxsb3dzIHRoZSBDU0kgZHJpdmVyIHNlcnZpY2UgYWNjb3VudCB0byBtYWtlIGNhbGxzIHRvIHJlbGF0ZWQgc2VydmljZXMgc3VjaCBhcyBFQzIgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkVCU0NTSURyaXZlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQlNDU0lEcml2ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgdG8gQW1hem9uIEVDUiByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyQ29udGFpbmVyUmVnaXN0cnlGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMkNvbnRhaW5lclJlZ2lzdHJ5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBFQzIgQ29udGFpbmVyIFJlZ2lzdHJ5IHJlcG9zaXRvcmllcywgYnV0IGRvZXMgbm90IGFsbG93IHJlcG9zaXRvcnkgZGVsZXRpb24gb3IgcG9saWN5IGNoYW5nZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVDMkNvbnRhaW5lclJlZ2lzdHJ5UG93ZXJVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMkNvbnRhaW5lclJlZ2lzdHJ5UG93ZXJVc2VyKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHB1bGwgaW1hZ2VzIGZyb20gQW1hem9uIEVDMiBDb250YWluZXIgUmVnaXN0cnkgcmVwb3NpdG9yaWVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJDb250YWluZXJSZWdpc3RyeVB1bGxPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMkNvbnRhaW5lclJlZ2lzdHJ5UHVsbE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBFQzIgQ29udGFpbmVyIFJlZ2lzdHJ5IHJlcG9zaXRvcmllcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyQ29udGFpbmVyUmVnaXN0cnlSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJDb250YWluZXJSZWdpc3RyeVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogICBQb2xpY3kgdG8gZW5hYmxlIFRhc2sgQXV0b3NjYWxpbmcgZm9yIEFtYXpvbiBFQzIgQ29udGFpbmVyIFNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyQ29udGFpbmVyU2VydmljZUF1dG9zY2FsZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyQ29udGFpbmVyU2VydmljZUF1dG9zY2FsZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdG8gZW5hYmxlIENsb3VkV2F0Y2ggRXZlbnRzIGZvciBFQzIgQ29udGFpbmVyIFNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyQ29udGFpbmVyU2VydmljZUV2ZW50c1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyQ29udGFpbmVyU2VydmljZUV2ZW50c1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEFtYXpvbiBFQzIgUm9sZSBmb3IgQW1hem9uIEVDMiBDb250YWluZXIgU2VydmljZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyQ29udGFpbmVyU2VydmljZWZvckVDMlJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyQ29udGFpbmVyU2VydmljZWZvckVDMlJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgQW1hem9uIEVDUyBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVDMkNvbnRhaW5lclNlcnZpY2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMkNvbnRhaW5lclNlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEVDMiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVDMkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gc2NhbiBhbGwgc3VwcG9ydGVkIHJlc291cmNlIHR5cGVzIGZvciByZWxldmFudCBkYXRhIHdoZW4gdXNpbmcgRGVzY3JpYmVJbWFnZVJlZmVyZW5jZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVDMkltYWdlUmVmZXJlbmNlc0FjY2Vzc1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJJbWFnZVJlZmVyZW5jZXNBY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBFQzIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEVDMiBhY2Nlc3MgdG8gUzMgYnVja2V0IHRvIGRvd25sb2FkIHJldmlzaW9uLiBUaGlzIHJvbGUgaXMgbmVlZGVkIGJ5IHRoZSBDb2RlRGVwbG95IGFnZW50IG9uIEVDMiBpbnN0YW5jZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVDMlJvbGVmb3JBV1NDb2RlRGVwbG95KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMlJvbGVmb3JBV1NDb2RlRGVwbG95KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgRUMyIGxpbWl0ZWQgYWNjZXNzIHRvIFMzIGJ1Y2tldCB0byBkb3dubG9hZCByZXZpc2lvbi4gVGhpcyByb2xlIGlzIG5lZWRlZCBieSB0aGUgQ29kZURlcGxveSBhZ2VudCBvbiBFQzIgaW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJSb2xlZm9yQVdTQ29kZURlcGxveUxpbWl0ZWQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyUm9sZWZvckFXU0NvZGVEZXBsb3lMaW1pdGVkKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBBbWF6b24gRUMyIFJvbGUgZm9yIERhdGEgUGlwZWxpbmUgc2VydmljZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJSb2xlZm9yRGF0YVBpcGVsaW5lUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJSb2xlZm9yRGF0YVBpcGVsaW5lUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHdpbGwgc29vbiBiZSBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIEFtYXpvblNTTU1hbmFnZWRJbnN0YW5jZUNvcmUgcG9saWN5IHRvIGVuYWJsZSBBV1MgU3lzdGVtcyBNYW5hZ2VyIHNlcnZpY2UgY29yZSBmdW5jdGlvbmFsaXR5IG9uIEVDMiBpbnN0YW5jZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3lzdGVtcy1tYW5hZ2VyL2xhdGVzdC91c2VyZ3VpZGUvc2V0dXAtaW5zdGFuY2UtcHJvZmlsZS5odG1sICovXG4gICAgcHVibGljIEFtYXpvbkVDMlJvbGVmb3JTU00oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyUm9sZWZvclNTTSk7XG4gICAgfVxuXG4gICAgLyoqIE1hbmFnZWQgcG9saWN5IGZvciB0aGUgQW1hem9uIExhdW5jaFdpemFyZCBzZXJ2aWNlIHJvbGUgZm9yIEVDMiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJSb2xlUG9saWN5Rm9yTGF1bmNoV2l6YXJkKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMlJvbGVQb2xpY3lGb3JMYXVuY2hXaXphcmQpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdG8gZW5hYmxlIEF1dG9zY2FsaW5nIGZvciBBbWF6b24gRUMyIFNwb3QgRmxlZXQgKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyU3BvdEZsZWV0QXV0b3NjYWxlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJTcG90RmxlZXRBdXRvc2NhbGVSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEVDMiBTcG90IEZsZWV0IHRvIHJlcXVlc3QsIHRlcm1pbmF0ZSBhbmQgdGFnIFNwb3QgSW5zdGFuY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJTcG90RmxlZXRUYWdnaW5nUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJTcG90RmxlZXRUYWdnaW5nUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBBbWF6b24gRUNTIHJlc291cmNlcyBhbmQgZW5hYmxlcyBFQ1MgZmVhdHVyZXMgdGhyb3VnaCBhY2Nlc3MgdG8gb3RoZXIgQVdTIHNlcnZpY2UgcmVzb3VyY2VzLCBpbmNsdWRpbmcgVlBDcywgQXV0byBTY2FsaW5nIGdyb3VwcywgYW5kIENsb3VkRm9ybWF0aW9uIHN0YWNrcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUNTRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBBbWF6b24gRUNTIENvbXB1dGUgdG8gbWFuYWdlIHlvdXIgRUMyIGluc3RhbmNlcyBhbmQgcmVsYXRlZCByZXNvdXJjZXMgYXMgcGFydCBvZiBFQ1MgbWFuYWdlZCBpbnN0YW5jZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uRUNTQ29tcHV0ZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDU0NvbXB1dGVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZXNlIHBlcm1pc3Npb25zIGVuYWJsZSBBbWF6b24gRUNTIHRvIGF1dG9tYXRpY2FsbHkgcHJvdmlzaW9uIGFuZCBtYW5hZ2UgdGhlIGluZnJhc3RydWN0dXJlIGNvbXBvbmVudHMgcmVxdWlyZWQgZm9yIEV4cHJlc3MgR2F0ZXdheSBTZXJ2aWNlcywgaW5jbHVkaW5nIGxvYWQgYmFsYW5jaW5nLCBzZWN1cml0eSBncm91cHMsIFNTTCBjZXJ0aWZpY2F0ZXMsIGFuZCBhdXRvIHNjYWxpbmcgY29uZmlndXJhdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZWZvckV4cHJlc3NHYXRld2F5U2VydmljZXMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlZm9yRXhwcmVzc0dhdGV3YXlTZXJ2aWNlcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBvdGhlciBBV1Mgc2VydmljZSByZXNvdXJjZXMgcmVxdWlyZWQgdG8gbWFuYWdlIGxvYWQgYmFsYW5jZXJzIGFzc29jaWF0ZWQgd2l0aCBFQ1Mgd29ya2xvYWRzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JMb2FkQmFsYW5jZXJzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZVBvbGljeUZvckxvYWRCYWxhbmNlcnMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBFQ1MgYWNjZXNzIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIEVDMiBtYW5hZ2VkIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JNYW5hZ2VkSW5zdGFuY2VzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZVBvbGljeUZvck1hbmFnZWRJbnN0YW5jZXMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgdG8gUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHksIEFXUyBTZWNyZXRzIE1hbmFnZXIgYW5kIG90aGVyIEFXUyBTZXJ2aWNlcyByZXF1aXJlZCB0byBtYW5hZ2UgRUNTIFNlcnZpY2UgQ29ubmVjdCBUTFMgZmVhdHVyZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZVBvbGljeUZvclNlcnZpY2VDb25uZWN0VHJhbnNwb3J0TGF5ZXJTZWN1cml0eSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JTZXJ2aWNlQ29ubmVjdFRyYW5zcG9ydExheWVyU2VjdXJpdHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gb3RoZXIgQVdTIHNlcnZpY2UgcmVzb3VyY2VzIHJlcXVpcmVkIHRvIG1hbmFnZSB2b2x1bWVzIGFzc29jaWF0ZWQgd2l0aCBFQ1Mgd29ya2xvYWRzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JWb2x1bWVzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZVBvbGljeUZvclZvbHVtZXMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gb3RoZXIgQVdTIHNlcnZpY2UgcmVzb3VyY2VzIHJlcXVpcmVkIHRvIG1hbmFnZSBWUEMgTGF0dGljZSBmZWF0dXJlIGluIEVDUyB3b3JrbG9hZHMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZVBvbGljeUZvclZwY0xhdHRpY2UoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlUG9saWN5Rm9yVnBjTGF0dGljZSk7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgcG9saWN5IGZvciB0aGUgQW1hem9uIEVDUyBJbnN0YW5jZSBSb2xlIGZvciBBbWF6b24gRUNTIE1hbmFnZWQgSW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQ1NJbnN0YW5jZVJvbGVQb2xpY3lGb3JNYW5hZ2VkSW5zdGFuY2VzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDU0luc3RhbmNlUm9sZVBvbGljeUZvck1hbmFnZWRJbnN0YW5jZXMpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdG8gZW5hYmxlIEFtYXpvbiBFQ1MgdG8gbWFuYWdlIHlvdXIgY2x1c3Rlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUNTU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUNTU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gb3RoZXIgQVdTIHNlcnZpY2UgcmVzb3VyY2VzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIHJ1biBBbWF6b24gRUNTIHRhc2tzICovXG4gICAgcHVibGljIEFtYXpvbkVDU1Rhc2tFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDU1Rhc2tFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbWFuYWdlbWVudCBhY2Nlc3MgdG8gRUZTIHJlc291cmNlcyBhbmQgcmVhZCBhY2Nlc3MgdG8gRUMyICovXG4gICAgcHVibGljIEFtYXpvbkVGU0NTSURyaXZlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FRlNDU0lEcml2ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyB0aGUgQW1hem9uIFZQQyBDTkkgUGx1Z2luIChhbWF6b24tdnBjLWNuaS1rOHMpIHRoZSBwZXJtaXNzaW9ucyBpdCByZXF1aXJlcyB0byBtb2RpZnkgdGhlIElQIGFkZHJlc3MgY29uZmlndXJhdGlvbiBvbiB5b3VyIEVLUyB3b3JrZXIgbm9kZXMuIFRoaXMgcGVybWlzc2lvbiBzZXQgYWxsb3dzIHRoZSBDTkkgdG8gbGlzdCwgZGVzY3JpYmUsIGFuZCBtb2RpZnkgRWxhc3RpYyBOZXR3b3JrIEludGVyZmFjZXMgb24geW91ciBiZWhhbGYuIE1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFXUyBWUEMgQ05JIFBsdWdpbiBpcyBhdmFpbGFibGUgaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hbWF6b24tdnBjLWNuaS1rOHMgKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTQ05JUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0NOSVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBhdHRhY2hlZCB0byB0aGUgRUtTIENsdXN0ZXIgUm9sZSB0aGF0IGdyYW50cyBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgdGhlIGNsdXN0ZXIncyBibG9jayBzdG9yYWdlIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTQmxvY2tTdG9yYWdlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0Jsb2NrU3RvcmFnZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIEt1YmVybmV0ZXMgdGhlIHBlcm1pc3Npb25zIGl0IHJlcXVpcmVzIHRvIG1hbmFnZSByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuIEt1YmVybmV0ZXMgcmVxdWlyZXMgRWMyOkNyZWF0ZVRhZ3MgcGVybWlzc2lvbnMgdG8gcGxhY2UgaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24gb24gRUMyIHJlc291cmNlcyBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIEluc3RhbmNlcywgU2VjdXJpdHkgR3JvdXBzLCBhbmQgRWxhc3RpYyBOZXR3b3JrIEludGVyZmFjZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU0NsdXN0ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTQ2x1c3RlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBhdHRhY2hlZCB0byB0aGUgRUtTIENsdXN0ZXIgUm9sZSB0aGF0IGdyYW50cyBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgdGhlIGNsdXN0ZXIncyBjb21wdXRlIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTQ29tcHV0ZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NDb21wdXRlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIEFtYXpvbiBFS1MgdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgZm9yIEVLUyBjb25uZWN0b3IgKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTQ29ubmVjdG9yU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTQ29ubmVjdG9yU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHZpZXcgdGhlIGRhc2hib2FyZCBpbiB0aGUgQW1hem9uIEVLUyBjb25zb2xlLiBUaGUgZGFzaGJvYXJkIGFnZ3JlZ2F0ZXMgaW5mb3JtYXRpb24gYWJvdXQgbXVsdGlwbGUgY2x1c3RlcnMgYW5kIHJlbGF0ZWQgcmVzb3VyY2VzIHVzaW5nIEFXUyBPcmdhbml6YXRpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NEYXNoYm9hcmRDb25zb2xlUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTRGFzaGJvYXJkQ29uc29sZVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZW5hYmxlcyB0aGUgQW1hem9uIEVLUyBEYXNoYm9hcmQgdG8gYWNjZXNzIGFuZCBkaXNwbGF5IG9yZ2FuaXphdGlvbi13aWRlIGluZm9ybWF0aW9uLiBUaGUgcG9saWN5IGFsbG93cyB0aGUgRUtTIERhc2hib2FyZCBzZXJ2aWNlIHRvIGdhdGhlciBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIEFXUyBPcmdhbml6YXRpb25zIHN0cnVjdHVyZSBhbmQgYWNjb3VudHMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU0Rhc2hib2FyZFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0Rhc2hib2FyZFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlIHJlc291cmNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBydW4gQW1hem9uIEVLUyBwb2RzIG9uIEFXUyBGYXJnYXRlICovXG4gICAgcHVibGljIEFtYXpvbkVLU0ZhcmdhdGVQb2RFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0ZhcmdhdGVQb2RFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyB0byBBbWF6b24gRUtTIHRvIHJ1biBmYXJnYXRlIHRhc2tzICovXG4gICAgcHVibGljIEFtYXpvbkVLU0ZvckZhcmdhdGVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NGb3JGYXJnYXRlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgYXR0YWNoZWQgdG8gdGhlIEVLUyBDbHVzdGVyIFJvbGUgdGhhdCBncmFudHMgcGVybWlzc2lvbnMgdG8gbWFuYWdlIHRoZSBjbHVzdGVyJ3MgbG9hZCBiYWxhbmNpbmcgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NMb2FkQmFsYW5jaW5nUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0xvYWRCYWxhbmNpbmdQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBwZXJtaXNzaW9ucyB0byBFS1MgbG9jYWwgY2x1c3RlcidzIGNvbnRyb2wtcGxhbmUgaW5zdGFuY2VzIHJ1bm5pbmcgaW4geW91ciBhY2NvdW50IHRvIG1hbmFnZSByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkVLU0xvY2FsT3V0cG9zdENsdXN0ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTTG9jYWxPdXRwb3N0Q2x1c3RlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gRUtTIExvY2FsIHRvIGNhbGwgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NMb2NhbE91dHBvc3RTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NMb2NhbE91dHBvc3RTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBhdHRhY2hlZCB0byB0aGUgRUtTIENsdXN0ZXIgUm9sZSB0aGF0IGdyYW50cyBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgdGhlIGNsdXN0ZXIncyBuZXR3b3JraW5nIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTTmV0d29ya2luZ1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NOZXR3b3JraW5nUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIEFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIGZvciBLdWJlcm5ldGVzIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHRoZSBuZWNlc3NhcnkgcmVzb3VyY2VzIHRvIG9wZXJhdGUgRUtTIENsdXN0ZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NTZXJ2aWNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU1NlcnZpY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBIFNlcnZpY2UtTGlua2VkIFJvbGUgcmVxdWlyZWQgZm9yIEFtYXpvbiBFS1MgdG8gY2FsbCBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkVLU1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHVzZWQgYnkgVlBDIFJlc291cmNlIENvbnRyb2xsZXIgdG8gbWFuYWdlIEVOSSBhbmQgSVBzIGZvciB3b3JrZXIgbm9kZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU1ZQQ1Jlc291cmNlQ29udHJvbGxlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NWUENSZXNvdXJjZUNvbnRyb2xsZXIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgQW1hem9uIEVLUyB3b3JrZXIgbm9kZXMgdG8gY29ubmVjdCB0byBBbWF6b24gRUtTIENsdXN0ZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NXb3JrZXJOb2RlTWluaW1hbFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NXb3JrZXJOb2RlTWluaW1hbFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBBbWF6b24gRUtTIHdvcmtlciBub2RlcyB0byBjb25uZWN0IHRvIEFtYXpvbiBFS1MgQ2x1c3RlcnMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU1dvcmtlck5vZGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTV29ya2VyTm9kZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBFbGFzdGlDYWNoZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aUNhY2hlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGlDYWNoZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBFbGFzdGlDYWNoZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aUNhY2hlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpQ2FjaGVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBBbWF6b24gRUNSIFB1YmxpYyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY0NvbnRhaW5lclJlZ2lzdHJ5UHVibGljRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljQ29udGFpbmVyUmVnaXN0cnlQdWJsaWNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEVDUiBQdWJsaWMgcmVwb3NpdG9yaWVzLCBidXQgZG9lcyBub3QgYWxsb3cgcmVwb3NpdG9yeSBkZWxldGlvbiBvciBwb2xpY3kgY2hhbmdlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY0NvbnRhaW5lclJlZ2lzdHJ5UHVibGljUG93ZXJVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNDb250YWluZXJSZWdpc3RyeVB1YmxpY1Bvd2VyVXNlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIEVDUiBQdWJsaWMgcmVwb3NpdG9yaWVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljQ29udGFpbmVyUmVnaXN0cnlQdWJsaWNSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljQ29udGFpbmVyUmVnaXN0cnlQdWJsaWNSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJvb3QgY2xpZW50IGFjY2VzcyB0byBhbiBBbWF6b24gRUZTIGZpbGUgc3lzdGVtICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtQ2xpZW50RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljRmlsZVN5c3RlbUNsaWVudEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgY2xpZW50IGFjY2VzcyB0byBhbiBBbWF6b24gRUZTIGZpbGUgc3lzdGVtICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtQ2xpZW50UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1DbGllbnRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgYW5kIHdyaXRlIGNsaWVudCBhY2Nlc3MgdG8gYW4gQW1hem9uIEVGUyBmaWxlIHN5c3RlbSAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljRmlsZVN5c3RlbUNsaWVudFJlYWRXcml0ZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljRmlsZVN5c3RlbUNsaWVudFJlYWRXcml0ZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBFRlMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljRmlsZVN5c3RlbUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRUZTIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljRmlsZVN5c3RlbVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBFbGFzdGljIEZpbGUgU3lzdGVtIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBjdXN0b21lcnMgdG8gdXNlIEFXUyBTeXN0ZW1zIE1hbmFnZXIgdG8gYXV0b21hdGljYWxseSBtYW5hZ2UgQW1hem9uIEVGUyB1dGlsaXRpZXMgKGFtYXpvbi1lZnMtdXRpbHMpIHBhY2thZ2Ugb24gdGhlaXIgRUMyIGluc3RhbmNlcywgYW5kIHVzZSBDbG91ZFdhdGNoTG9nIHRvIGdldCBFRlMgZmlsZSBzeXN0ZW0gbW91bnQgc3VjY2Vzcy9mYWlsdXJlIG5vdGlmaWNhdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtc1V0aWxzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtc1V0aWxzKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBBbWF6b24gRWxhc3RpYyBNYXBSZWR1Y2UgRWRpdG9ycyBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VFZGl0b3JzUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljTWFwUmVkdWNlRWRpdG9yc1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gRWxhc3RpYyBNYXBSZWR1Y2UgZm9yIEF1dG8gU2NhbGluZy4gUm9sZSB0byBhbGxvdyBBdXRvIFNjYWxpbmcgdG8gYWRkIGFuZCByZW1vdmUgaW5zdGFuY2VzIGZyb20geW91ciBFTVIgY2x1c3Rlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY01hcFJlZHVjZWZvckF1dG9TY2FsaW5nUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljTWFwUmVkdWNlZm9yQXV0b1NjYWxpbmdSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBBbWF6b24gRWxhc3RpYyBNYXBSZWR1Y2UgZm9yIEVDMiBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNNYXBSZWR1Y2Vmb3JFQzJSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNNYXBSZWR1Y2Vmb3JFQzJSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgb24gYSBkZXByZWNhdGlvbiBwYXRoLiBTZWUgZG9jdW1lbnRhdGlvbiBmb3IgZ3VpZGFuY2U6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbXIvbGF0ZXN0L01hbmFnZW1lbnRHdWlkZS9lbXItbWFuYWdlZC1pYW0tcG9saWNpZXMuaHRtbC4gUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEVsYXN0aWMgTWFwUmVkdWNlIGFuZCB1bmRlcmx5aW5nIHNlcnZpY2VzIHRoYXQgaXQgcmVxdWlyZXMgc3VjaCBhcyBFQzIgYW5kIFMzICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGFsbG93IEVNUiB0byBjcmVhdGUsIGRlc2NyaWJlIGFuZCBkZWxldGUgRUMyIHBsYWNlbWVudCBncm91cHMuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VQbGFjZW1lbnRHcm91cFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljTWFwUmVkdWNlUGxhY2VtZW50R3JvdXBQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBFbGFzdGljIE1hcFJlZHVjZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljTWFwUmVkdWNlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBvbiBhIGRlcHJlY2F0aW9uIHBhdGguIFNlZSBkb2N1bWVudGF0aW9uIGZvciBndWlkYW5jZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Vtci9sYXRlc3QvTWFuYWdlbWVudEd1aWRlL2Vtci1tYW5hZ2VkLWlhbS1wb2xpY2llcy5odG1sLiAgRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBBbWF6b24gRWxhc3RpYyBNYXBSZWR1Y2Ugc2VydmljZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljTWFwUmVkdWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljTWFwUmVkdWNlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IEFtYXpvbiBFbGFzdGljc2VhcmNoIFNlcnZpY2UgdG8gYWNjZXNzIG90aGVyIEFXUyBzZXJ2aWNlcyBzdWNoIGFzIEVDMiBOZXR3b3JraW5nIEFQSXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNzZWFyY2hTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljc2VhcmNoU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdXNlcnMgZnVsbCBhY2Nlc3MgdG8gRWxhc3RpYyBUcmFuc2NvZGVyIGFuZCB0aGUgYWNjZXNzIHRvIGFzc29jaWF0ZWQgc2VydmljZXMgdGhhdCBpcyByZXF1aXJlZCBmb3IgZnVsbCBFbGFzdGljIFRyYW5zY29kZXIgZnVuY3Rpb25hbGl0eS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY1RyYW5zY29kZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNUcmFuc2NvZGVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB1c2VycyBwZXJtaXNzaW9uIHRvIGNoYW5nZSBwcmVzZXRzLCBzdWJtaXQgam9icywgYW5kIHZpZXcgRWxhc3RpYyBUcmFuc2NvZGVyIHNldHRpbmdzLiBUaGlzIHBvbGljeSBhbHNvIGdyYW50cyBzb21lIHJlYWQtb25seSBhY2Nlc3MgdG8gc29tZSBvdGhlciBzZXJ2aWNlcyByZXF1aXJlZCB0byB1c2UgdGhlIEVsYXN0aWMgVHJhbnNjb2RlIGNvbnNvbGUsIGluY2x1ZGluZyBTMywgSUFNLCBhbmQgU05TLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljVHJhbnNjb2RlckpvYnNTdWJtaXR0ZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY1RyYW5zY29kZXJKb2JzU3VibWl0dGVyKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHVzZXJzIHJlYWQtb25seSBhY2Nlc3MgdG8gRWxhc3RpYyBUcmFuc2NvZGVyIGFuZCBsaXN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljVHJhbnNjb2RlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNUcmFuc2NvZGVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEFtYXpvbiBFbGFzdGljIFRyYW5zY29kZXIgc2VydmljZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljVHJhbnNjb2RlclJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY1RyYW5zY29kZXJSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBhY3Rpb25zIHRoYXQgRU1SIHJlcXVpcmVzIHRvIHRlcm1pbmF0ZSBhbmQgZGVsZXRlIEFXUyBFQzIgcmVzb3VyY2VzIGlmIHRoZSBFTVIgU2VydmljZSByb2xlIGhhcyBsb3N0IHRoYXQgYWJpbGl0eS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRU1SQ2xlYW51cFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FTVJDbGVhbnVwUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFjY2VzcyB0byBvdGhlciBBV1Mgc2VydmljZSByZXNvdXJjZXMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gcnVuIEFtYXpvbiBFTVIgKi9cbiAgICBwdWJsaWMgQW1hem9uRU1SQ29udGFpbmVyc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVNUkNvbnRhaW5lcnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBFTVIgKi9cbiAgICBwdWJsaWMgQW1hem9uRU1SRnVsbEFjY2Vzc1BvbGljeVYyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVNUkZ1bGxBY2Nlc3NQb2xpY3lWMik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEVNUiBhbmQgdGhlIGFzc29jaWF0ZWQgQ2xvdWRXYXRjaCBNZXRyaWNzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FTVJSZWFkT25seUFjY2Vzc1BvbGljeVYyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVNUlJlYWRPbmx5QWNjZXNzUG9saWN5VjIpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlIHJlc291cmNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBydW4gQW1hem9uIEVNUlNlcnZlcmxlc3MgKi9cbiAgICBwdWJsaWMgQW1hem9uRU1SU2VydmVybGVzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVNUlNlcnZlcmxlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIHVzZWQgZm9yIHRoZSBBbWF6b24gRU1SIFNlcnZpY2UgUm9sZSBhbmQgc2hvdWxkIE5PVCBiZSB1c2VkIGZvciBhbnkgb3RoZXIgSUFNIHVzZXJzIG9yIHJvbGVzIGluIHlvdXIgYWNjb3VudC4gVGhlIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBFTVIgYW5kIHJlbGF0ZWQgc2VydmljZXMgbmVjZXNzYXJ5IGZvciB0aGUgb3BlcmF0aW9uIG9mIHlvdXIgRU1SIGNsdXN0ZXIuICovXG4gICAgcHVibGljIEFtYXpvbkVNUlNlcnZpY2VQb2xpY3lWMigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FTVJTZXJ2aWNlUG9saWN5VjIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBsaW1pdGVkIGFjY2VzcyB0byB0aGUgQW1hem9uIENvZ25pdG8gY29uZmlndXJhdGlvbiBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FU0NvZ25pdG9BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRVNDb2duaXRvQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBFUyBjb25maWd1cmF0aW9uIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFtYXpvbkVTRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FU0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBBbWF6b24gRVMgY29uZmlndXJhdGlvbiBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FU1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVTUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRXZlbnRCcmlkZ2UgdG8gYWNjZXNzIFNlY3JldCBNYW5hZ2VyIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRXZlbnRCcmlkZ2VBcGlEZXN0aW5hdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FdmVudEJyaWRnZUFwaURlc3RpbmF0aW9uc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEV2ZW50QnJpZGdlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FdmVudEJyaWRnZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRXZlbnRCcmlkZ2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEV2ZW50QnJpZGdlIFBpcGVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FdmVudEJyaWRnZVBpcGVzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FdmVudEJyaWRnZVBpcGVzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhbmQgb3BlcmF0b3IgKGFiaWxpdHkgdG8gU3RvcCBhbmQgU3RhcnQgcnVubmluZyBQaXBlcykgYWNjZXNzIHRvIEFtYXpvbiBFdmVudEJyaWRnZSBQaXBlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRXZlbnRCcmlkZ2VQaXBlc09wZXJhdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkV2ZW50QnJpZGdlUGlwZXNPcGVyYXRvckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIEV2ZW50QnJpZGdlIFBpcGVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FdmVudEJyaWRnZVBpcGVzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRXZlbnRCcmlkZ2VQaXBlc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRXZlbnRCcmlkZ2UuICovXG4gICAgcHVibGljIEFtYXpvbkV2ZW50QnJpZGdlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRXZlbnRCcmlkZ2VSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBBbWF6b25FdmVudEJyaWRnZVNjaGVkdWxlckZ1bGxBY2Nlc3MgbWFuYWdlZCBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHVzZSBhbGwgRXZlbnRCcmlkZ2UgU2NoZWR1bGVyIGFjdGlvbnMgZm9yIHNjaGVkdWxlcywgYW5kIHNjaGVkdWxlIGdyb3Vwcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRXZlbnRCcmlkZ2VTY2hlZHVsZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkV2ZW50QnJpZGdlU2NoZWR1bGVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBBbWF6b25FdmVudEJyaWRnZVNjaGVkdWxlclJlYWRPbmx5QWNjZXNzIG1hbmFnZWQgcG9saWN5IGdyYW50cyByZWFkLW9ubHkgcGVybWlzc2lvbnMgdG8gdmlldyBkZXRhaWxzIGFib3V0IHlvdXIgc2NoZWR1bGVzIGFuZCBzY2hlZHVsZSBncm91cHMgKi9cbiAgICBwdWJsaWMgQW1hem9uRXZlbnRCcmlkZ2VTY2hlZHVsZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FdmVudEJyaWRnZVNjaGVkdWxlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEV2ZW50QnJpZGdlIFNjaGVtYXMuICovXG4gICAgcHVibGljIEFtYXpvbkV2ZW50QnJpZGdlU2NoZW1hc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRXZlbnRCcmlkZ2VTY2hlbWFzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEV2ZW50QnJpZGdlIFNjaGVtYXMuICovXG4gICAgcHVibGljIEFtYXpvbkV2ZW50QnJpZGdlU2NoZW1hc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkV2ZW50QnJpZGdlU2NoZW1hc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIE1hbmFnZWQgUnVsZXMgY3JlYXRlZCBieSBBbWF6b24gRXZlbnRCcmlkZ2Ugc2NoZW1hcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRXZlbnRCcmlkZ2VTY2hlbWFzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRXZlbnRCcmlkZ2VTY2hlbWFzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gRVZTIHRvIG1hbmFnZSByZXNvdXJjZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQW1hem9uRVZTU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRVZTU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdG8gZW5hYmxlIEFXUyBGSVMgdG8gbWFuYWdlIG1vbml0b3JpbmcgYW5kIHJlc291cmNlIHNlbGVjdGlvbiBmb3IgZXhwZXJpbWVudHMuICovXG4gICAgcHVibGljIEFtYXpvbkZJU1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZJU1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR2l2ZXMgYWNjZXNzIHRvIGFsbCBhY3Rpb25zIGZvciBBbWF6b24gRm9yZWNhc3QgKi9cbiAgICBwdWJsaWMgQW1hem9uRm9yZWNhc3RGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZvcmVjYXN0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdpdmVzIGFjY2VzcyB0byBhbGwgYWN0aW9ucyBmb3IgQW1hem9uIEZyYXVkIERldGVjdG9yICovXG4gICAgcHVibGljIEFtYXpvbkZyYXVkRGV0ZWN0b3JGdWxsQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZyYXVkRGV0ZWN0b3JGdWxsQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRnVsbCBBY2Nlc3MgUG9saWN5IGZvciBBbWF6b24gRnJlZVJUT1MgKi9cbiAgICBwdWJsaWMgQW1hem9uRnJlZVJUT1NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZyZWVSVE9TRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB1c2VyIHRvIGFjY2VzcyBBbWF6b24gRnJlZVJUT1MgT1RBIFVwZGF0ZSAqL1xuICAgIHB1YmxpYyBBbWF6b25GcmVlUlRPU09UQVVwZGF0ZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25GcmVlUlRPU09UQVVwZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBGU3ggYW5kIGFjY2VzcyB0byByZWxhdGVkIEFXUyBzZXJ2aWNlcyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkZTeENvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZTeENvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRlN4IGFuZCBhY2Nlc3MgdG8gcmVsYXRlZCBBV1Mgc2VydmljZXMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25GU3hDb25zb2xlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRlN4Q29uc29sZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEZTeCBhbmQgYWNjZXNzIHRvIHJlbGF0ZWQgQVdTIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25GU3hGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZTeEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBGU3guICovXG4gICAgcHVibGljIEFtYXpvbkZTeFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZTeFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBGU3ggdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQW1hem9uRlN4U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRlN4U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gR2xhY2llciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkdsYWNpZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkdsYWNpZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gR2xhY2llciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkdsYWNpZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25HbGFjaWVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgYWNjZXNzIHRvIEFtYXpvbiBBdGhlbmEgYW5kIHRoZSBkZXBlbmRlbmNpZXMgbmVlZGVkIHRvIGVuYWJsZSBxdWVyeWluZyBhbmQgd3JpdGluZyByZXN1bHRzIHRvIHMzIGZyb20gdGhlIEFtYXpvbiBBdGhlbmEgcGx1Z2luIGluIEFtYXpvbiBHcmFmYW5hLiAqL1xuICAgIHB1YmxpYyBBbWF6b25HcmFmYW5hQXRoZW5hQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkdyYWZhbmFBdGhlbmFBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgYWNjZXNzIHRvIEFtYXpvbiBDbG91ZFdhdGNoIGFuZCB0aGUgZGVwZW5kZW5jaWVzIG5lZWRlZCB0byB1c2UgQ2xvdWRXYXRjaCBhcyBhIGRhdGFzb3VyY2Ugd2l0aGluIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEuICovXG4gICAgcHVibGljIEFtYXpvbkdyYWZhbmFDbG91ZFdhdGNoQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkdyYWZhbmFDbG91ZFdhdGNoQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHNjb3BlZCBhY2Nlc3MgdG8gQW1hem9uIFJlZHNoaWZ0IGFuZCB0aGUgZGVwZW5kZW5jaWVzIG5lZWRlZCB0byB1c2UgdGhlIEFtYXpvbiBSZWRzaGlmdCBwbHVnaW4gaW4gQW1hem9uIEdyYWZhbmEuICovXG4gICAgcHVibGljIEFtYXpvbkdyYWZhbmFSZWRzaGlmdEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25HcmFmYW5hUmVkc2hpZnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIFJlc291cmNlcyBtYW5hZ2VkIG9yIHVzZWQgYnkgQW1hem9uIEdyYWZhbmEuICovXG4gICAgcHVibGljIEFtYXpvbkdyYWZhbmFTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25HcmFmYW5hU2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB1c2UgQW1hem9uIEd1YXJkRHV0eS4gKi9cbiAgICBwdWJsaWMgQW1hem9uR3VhcmREdXR5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25HdWFyZER1dHlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdXNlIEFtYXpvbiBHdWFyZER1dHkgKi9cbiAgICBwdWJsaWMgQW1hem9uR3VhcmREdXR5RnVsbEFjY2Vzc1YyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkd1YXJkRHV0eUZ1bGxBY2Nlc3NWMik7XG4gICAgfVxuXG4gICAgLyoqIEd1YXJkRHV0eSBtYWx3YXJlIHByb3RlY3Rpb24gdXNlcyB0aGUgc2VydmljZS1saW5rZWQgcm9sZSAoU0xSKSBuYW1lZCBBV1NTZXJ2aWNlUm9sZUZvckFtYXpvbkd1YXJkRHV0eU1hbHdhcmVQcm90ZWN0aW9uLiBUaGlzIHNlcnZpY2UtbGlua2VkIHJvbGUgYWxsb3dzIEd1YXJkRHV0eSBtYWx3YXJlIHByb3RlY3Rpb24gdG8gcGVyZm9ybSBhZ2VudC1sZXNzIHNjYW5zIHRvIGRldGVjdCBtYWx3YXJlLiBJdCBhbGxvd3MgR3VhcmREdXR5IHRvIGNyZWF0ZSBzbmFwc2hvdHMgaW4geW91ciBhY2NvdW50LCBhbmQgc2hhcmUgdGhlIHNuYXBzaG90cyB3aXRoIHRoZSBHdWFyZER1dHkgc2VydmljZSBhY2NvdW50IHRvIHNjYW4gZm9yIG1hbHdhcmUuIEl0IGV2YWx1YXRlcyB0aGVzZSBzaGFyZWQgc25hcHNob3RzIGFuZCBpbmNsdWRlcyB0aGUgcmV0cmlldmVkIEVDMiBpbnN0YW5jZSBtZXRhZGF0YSBpbiB0aGUgR3VhcmREdXR5IE1hbHdhcmUgUHJvdGVjdGlvbiBmaW5kaW5ncy4gVGhlIEFXU1NlcnZpY2VSb2xlRm9yQW1hem9uR3VhcmREdXR5TWFsd2FyZVByb3RlY3Rpb24gc2VydmljZS1saW5rZWQgcm9sZSB0cnVzdHMgdGhlIG1hbHdhcmUtcHJvdGVjdGlvbi5ndWFyZGR1dHkuYW1hem9uYXdzLmNvbSBzZXJ2aWNlIHRvIGFzc3VtZSB0aGUgcm9sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uR3VhcmREdXR5TWFsd2FyZVByb3RlY3Rpb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25HdWFyZER1dHlNYWx3YXJlUHJvdGVjdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gR3VhcmREdXR5IHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25HdWFyZER1dHlSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25HdWFyZER1dHlSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZSBhY2Nlc3MgdG8gQVdTIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIEd1YXJkIER1dHkgKi9cbiAgICBwdWJsaWMgQW1hem9uR3VhcmREdXR5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uR3VhcmREdXR5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gSGVhbHRoTGFrZSBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25IZWFsdGhMYWtlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25IZWFsdGhMYWtlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEhlYWx0aExha2Ugc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uSGVhbHRoTGFrZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkhlYWx0aExha2VSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEhvbmV5Y29kZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIHRoZSBTREsuICovXG4gICAgcHVibGljIEFtYXpvbkhvbmV5Y29kZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSG9uZXljb2RlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gSG9uZXljb2RlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgdGhlIFNESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uSG9uZXljb2RlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSG9uZXljb2RlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBIHNlcnZpY2UtbGlua2VkIHJvbGUgcmVxdWlyZWQgZm9yIEFtYXpvbiBIb25leWNvZGUgdG8gYWNjZXNzIHlvdXIgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Ib25leWNvZGVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Ib25leWNvZGVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEhvbmV5Y29kZSBUZWFtIEFzc29jaWF0aW9uIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgdGhlIFNESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uSG9uZXljb2RlVGVhbUFzc29jaWF0aW9uRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Ib25leWNvZGVUZWFtQXNzb2NpYXRpb25GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBIb25leWNvZGUgVGVhbSBBc3NvY2lhdGlvbiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIHRoZSBTREsuICovXG4gICAgcHVibGljIEFtYXpvbkhvbmV5Y29kZVRlYW1Bc3NvY2lhdGlvblJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkhvbmV5Y29kZVRlYW1Bc3NvY2lhdGlvblJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSG9uZXljb2RlIFdvcmtib29rIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgdGhlIFNESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uSG9uZXljb2RlV29ya2Jvb2tGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkhvbmV5Y29kZVdvcmtib29rRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gSG9uZXljb2RlIFdvcmtib29rIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgdGhlIFNESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uSG9uZXljb2RlV29ya2Jvb2tSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Ib25leWNvZGVXb3JrYm9va1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIEFtYXpvbiBJbnNwZWN0b3IgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBuZWVkZWQgdG8gcGVyZm9ybSBhZ2VudC1sZXNzIHNlY3VyaXR5IGFzc2Vzc21lbnRzICovXG4gICAgcHVibGljIEFtYXpvbkluc3BlY3RvcjJBZ2VudGxlc3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25JbnNwZWN0b3IyQWdlbnRsZXNzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gSW5zcGVjdG9yIGFuZCBhY2Nlc3MgdG8gb3RoZXIgcmVsYXRlZCBzZXJ2aWNlcyBzdWNoIGFzIG9yZ2FuaXphdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvbkluc3BlY3RvcjJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkluc3BlY3RvcjJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEluc3BlY3RvciBhbmQgYWNjZXNzIHRvIG90aGVyIHJlbGF0ZWQgc2VydmljZXMgc3VjaCBhcyBvcmdhbml6YXRpb25zIHdpdGggcmVzdHJpY3RpdmUgb3JnYW5pemF0aW9uYWwgYWNjZXNzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25JbnNwZWN0b3IyRnVsbEFjY2Vzc1YyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkluc3BlY3RvcjJGdWxsQWNjZXNzVjIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIGlzIGEgbWFuYWdlZCBwb2xpY3kgdGhhdCBjdXN0b21lciBzaG91bGQgYXR0YWNoIHRvIHRoZWlyIHJvbGVzIHRvIGNvbW11bmljYXRlIHdpdGggaW5zcGVjdG9yIHNlcnZpY2UgZm9yIENJUyBzY2FucyAqL1xuICAgIHB1YmxpYyBBbWF6b25JbnNwZWN0b3IyTWFuYWdlZENpc1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25JbnNwZWN0b3IyTWFuYWdlZENpc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBpbnNwZWN0b3IyIHNlcnZpY2UgYW5kIHJlbGV2YW50IHN1cHBvcnQgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yMlJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkluc3BlY3RvcjJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBBbWF6b24gSW5zcGVjdG9yIGFjY2VzcyB0byBBV1MgU2VydmljZXMgbmVlZGVkIHRvIHBlcmZvcm0gc2VjdXJpdHkgYXNzZXNzbWVudHMgKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yMlNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkluc3BlY3RvcjJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBJbnNwZWN0b3IuICovXG4gICAgcHVibGljIEFtYXpvbkluc3BlY3RvckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSW5zcGVjdG9yRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEluc3BlY3Rvci4gKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSW5zcGVjdG9yUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQW1hem9uIEluc3BlY3RvciBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIG5lZWRlZCB0byBwZXJmb3JtIHNlY3VyaXR5IGFzc2Vzc21lbnRzICovXG4gICAgcHVibGljIEFtYXpvbkluc3BlY3RvclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkluc3BlY3RvclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEtlbmRyYSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbktlbmRyYUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2VuZHJhRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEtlbmRyYSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbktlbmRyYVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktlbmRyYVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBmdWxsIGFjY2VzcyB0byBBbWF6b24gS2V5c3BhY2VzICovXG4gICAgcHVibGljIEFtYXpvbktleXNwYWNlc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2V5c3BhY2VzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gS2V5c3BhY2VzICovXG4gICAgcHVibGljIEFtYXpvbktleXNwYWNlc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktleXNwYWNlc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBLZXlzcGFjZXMgYW5kIHJlbGF0ZWQgQVdTIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25LZXlzcGFjZXNSZWFkT25seUFjY2Vzc1YyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktleXNwYWNlc1JlYWRPbmx5QWNjZXNzVjIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gS2luZXNpcyBBbmFseXRpY3MgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25LaW5lc2lzQW5hbHl0aWNzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25LaW5lc2lzQW5hbHl0aWNzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIEtpbmVzaXMgQW5hbHl0aWNzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uS2luZXNpc0FuYWx5dGljc1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktpbmVzaXNBbmFseXRpY3NSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBBbWF6b24gS2luZXNpcyBGaXJlaG9zZSBEZWxpdmVyeSBTdHJlYW1zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25LaW5lc2lzRmlyZWhvc2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktpbmVzaXNGaXJlaG9zZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIGFsbCBBbWF6b24gS2luZXNpcyBGaXJlaG9zZSBEZWxpdmVyeSBTdHJlYW1zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25LaW5lc2lzRmlyZWhvc2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25LaW5lc2lzRmlyZWhvc2VSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBzdHJlYW1zIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uS2luZXNpc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2luZXNpc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIGFsbCBzdHJlYW1zIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uS2luZXNpc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktpbmVzaXNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBLaW5lc2lzIFZpZGVvIFN0cmVhbXMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25LaW5lc2lzVmlkZW9TdHJlYW1zRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25LaW5lc2lzVmlkZW9TdHJlYW1zRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIEtpbmVzaXMgVmlkZW8gU3RyZWFtcyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbktpbmVzaXNWaWRlb1N0cmVhbXNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25LaW5lc2lzVmlkZW9TdHJlYW1zUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBGdWxsIGFjY2VzcyB0byBBV1MgTGF1bmNoIHdpemFyZCBhbmQgb3RoZXIgcmVxdWlyZWQgc2VydmljZXMuICovXG4gICAgcHVibGljIEFtYXpvbkxhdW5jaFdpemFyZEZ1bGxBY2Nlc3NWMigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25MYXVuY2hXaXphcmRGdWxsQWNjZXNzVjIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgY3VzdG9tZXJzIHRvIGNhbGwgTGV4IHJ1bnRpbWUgZnJvbSBjaGFubmVscyAqL1xuICAgIHB1YmxpYyBBbWF6b25MZXhDaGFubmVsc0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25MZXhDaGFubmVsc0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBMZXggdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAgQWxzbyBwcm92aWRlcyBhY2Nlc3MgdG8gY3JlYXRlIExleCBTZXJ2aWNlIExpbmtlZCBSb2xlcyBhbmQgZ3JhbnQgTGV4IHBlcm1pc3Npb25zIHRvIGludm9rZSBhIGxpbWl0ZWQgc2V0IG9mIExhbWJkYSBmdW5jdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvbkxleEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTGV4RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIExleC4gKi9cbiAgICBwdWJsaWMgQW1hem9uTGV4UmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTGV4UmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIExleCB0byByZXBsaWNhdGUgTGV4IHJlc291cmNlcyBhY3Jvc3MgcmVnaW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uTGV4UmVwbGljYXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTGV4UmVwbGljYXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQW1hem9uIExleCBjb252ZXJzYXRpb25hbCBBUElzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25MZXhSdW5Cb3RzT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25MZXhSdW5Cb3RzT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIExleCBWMiBib3RzIGFjY2VzcyB0byBjYWxsIG90aGVyIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uTGV4VjJCb3RQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTGV4VjJCb3RQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTG9va291dCBmb3IgRXF1aXBtZW50IG9wZXJhdGlvbnMgKi9cbiAgICBwdWJsaWMgQW1hem9uTG9va291dEVxdWlwbWVudEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTG9va291dEVxdWlwbWVudEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBMb29rb3V0IGZvciBFcXVpcG1lbnRzICovXG4gICAgcHVibGljIEFtYXpvbkxvb2tvdXRFcXVpcG1lbnRSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Mb29rb3V0RXF1aXBtZW50UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHaXZlcyBhY2Nlc3MgdG8gYWxsIGFjdGlvbnMgZm9yIEFtYXpvbiBMb29rb3V0IGZvciBNZXRyaWNzICovXG4gICAgcHVibGljIEFtYXpvbkxvb2tvdXRNZXRyaWNzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Mb29rb3V0TWV0cmljc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHaXZlcyBhY2Nlc3MgdG8gYWxsIHJlYWQtb25seSBhY3Rpb25zIGZvciBBbWF6b24gTG9va291dCBmb3IgTWV0cmljcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Mb29rb3V0TWV0cmljc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkxvb2tvdXRNZXRyaWNzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTG9va291dCBmb3IgVmlzaW9uIGFuZCBzY29wZWQgYWNjZXNzIHRvIHJlcXVpcmVkIHNlcnZpY2UgYW5kIGNvbnNvbGUgZGVwZW5kZW5jaWVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Mb29rb3V0VmlzaW9uQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTG9va291dFZpc2lvbkNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gTG9va291dCBmb3IgVmlzaW9uIGFuZCBzY29wZWQgYWNjZXNzIHRvIHJlcXVpcmVkIHNlcnZpY2UgYW5kIGNvbnNvbGUgZGVwZW5kZW5jaWVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Mb29rb3V0VmlzaW9uQ29uc29sZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkxvb2tvdXRWaXNpb25Db25zb2xlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTG9va291dCBmb3IgVmlzaW9uIGFuZCBzY29wZWQgYWNjZXNzIHRvIHJlcXVpcmVkIGRlcGVuZGVuY2llcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTG9va291dFZpc2lvbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTG9va291dFZpc2lvbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBMb29rb3V0IGZvciBWaXNpb24gYW5kIHNjb3BlZCBhY2Nlc3MgdG8gcmVxdWlyZWQgZGVwZW5kZW5jaWVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Mb29rb3V0VmlzaW9uUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTG9va291dFZpc2lvblJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHVzZXJzIHBlcm1pc3Npb24gdG8gcmVxdWVzdCBBbWF6b24gTWFjaGluZSBMZWFybmluZyBiYXRjaCBwcmVkaWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWFjaGluZUxlYXJuaW5nQmF0Y2hQcmVkaWN0aW9uc0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNoaW5lTGVhcm5pbmdCYXRjaFByZWRpY3Rpb25zQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgY3JlYXRlIGFjY2VzcyBmb3Igbm9uLXByZWRpY3Rpb24gQW1hem9uIE1hY2hpbmUgTGVhcm5pbmcgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNoaW5lTGVhcm5pbmdDcmVhdGVPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1hY2hpbmVMZWFybmluZ0NyZWF0ZU9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTWFjaGluZSBMZWFybmluZyByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbk1hY2hpbmVMZWFybmluZ0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaGluZUxlYXJuaW5nRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB1c2VycyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhbmQgZGVsZXRlIHRoZSByZWFsLXRpbWUgZW5kcG9pbnQgZm9yIEFtYXpvbiBNYWNoaW5lIExlYXJuaW5nIG1vZGVscy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWFjaGluZUxlYXJuaW5nTWFuYWdlUmVhbFRpbWVFbmRwb2ludE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaGluZUxlYXJuaW5nTWFuYWdlUmVhbFRpbWVFbmRwb2ludE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBNYWNoaW5lIExlYXJuaW5nIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWFjaGluZUxlYXJuaW5nUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaGluZUxlYXJuaW5nUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdXNlcnMgcGVybWlzc2lvbiB0byByZXF1ZXN0IEFtYXpvbiBNYWNoaW5lIExlYXJuaW5nIHJlYWwtdGltZSBwcmVkaWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWFjaGluZUxlYXJuaW5nUmVhbFRpbWVQcmVkaWN0aW9uT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNoaW5lTGVhcm5pbmdSZWFsVGltZVByZWRpY3Rpb25Pbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIE1hY2hpbmUgTGVhcm5pbmcgdG8gY29uZmlndXJlIGFuZCB1c2UgeW91ciBSZWRzaGlmdCBDbHVzdGVycyBhbmQgUzMgU3RhZ2luZyBMb2NhdGlvbnMgZm9yIFJlZHNoaWZ0IERhdGEgU291cmNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNoaW5lTGVhcm5pbmdSb2xlZm9yUmVkc2hpZnREYXRhU291cmNlVjMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaGluZUxlYXJuaW5nUm9sZWZvclJlZHNoaWZ0RGF0YVNvdXJjZVYzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIE1hY2llLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNpZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaWVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIHRoZSBzZXJ2aWNlLWxpbmtlZCByb2xlIG9mIEFtYXpvbiBNYWNpZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWFjaWVIYW5kc2hha2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1hY2llSGFuZHNoYWtlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWRvbmx5IGFjY2VzcyB0byBBbWF6b24gTWFjaWUuICovXG4gICAgcHVibGljIEFtYXpvbk1hY2llUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaWVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBNYWNpZSByZWFkLW9ubHkgYWNjZXNzIHRvIHJlc291cmNlIGRlcGVuZGVuY2llcyBpbiB5b3VyIGFjY291bnQgaW4gb3JkZXIgdG8gZW5hYmxlIGRhdGEgYW5hbHlzaXMuICovXG4gICAgcHVibGljIEFtYXpvbk1hY2llU2VydmljZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaWVTZXJ2aWNlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UgbGlua2VkIHJvbGUgZm9yIEFtYXpvbiBNYWNpZSAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNpZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1hY2llU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTWFuYWdlZCBCbG9ja2NoYWluIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBBbWF6b25NYW5hZ2VkQmxvY2tjaGFpbkNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1hbmFnZWRCbG9ja2NoYWluQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTWFuYWdlZCBCbG9ja2NoYWluLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYW5hZ2VkQmxvY2tjaGFpbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFuYWdlZEJsb2NrY2hhaW5GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gTWFuYWdlZCBCbG9ja2NoYWluLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYW5hZ2VkQmxvY2tjaGFpblJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1hbmFnZWRCbG9ja2NoYWluUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIE1hbmFnZWQgQmxvY2tjaGFpbiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYW5hZ2VkQmxvY2tjaGFpblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1hbmFnZWRCbG9ja2NoYWluU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBNYW5hZ2VkIEFwYWNoZSBDYXNzYW5kcmEgU2VydmljZSAqL1xuICAgIHB1YmxpYyBBbWF6b25NQ1NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1DU0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIE1hbmFnZWQgQXBhY2hlIENhc3NhbmRyYSBTZXJ2aWNlICovXG4gICAgcHVibGljIEFtYXpvbk1DU1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1DU1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIEFQSXMgaW4gQW1hem9uIE1lY2hhbmljYWwgVHVyay4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWVjaGFuaWNhbFR1cmtGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1lY2hhbmljYWxUdXJrRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byByZWFkIG9ubHkgQVBJcyBpbiBBbWF6b24gTWVjaGFuaWNhbCBUdXJrLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NZWNoYW5pY2FsVHVya1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1lY2hhbmljYWxUdXJrUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTWVtb3J5REIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NZW1vcnlEQkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWVtb3J5REJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gTWVtb3J5REIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NZW1vcnlEQlJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1lbW9yeURCUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIGFsbCByZXBvcnRzIGluY2x1ZGluZyBmaW5hbmNpYWwgZGF0YSBmb3IgYWxsIGFwcGxpY2F0aW9uIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTW9iaWxlQW5hbHl0aWNzRmluYW5jaWFsUmVwb3J0QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1vYmlsZUFuYWx5dGljc0ZpbmFuY2lhbFJlcG9ydEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBhcHBsaWNhdGlvbiByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbk1vYmlsZUFuYWx5dGljc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTW9iaWxlQW5hbHl0aWNzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gbm9uIGZpbmFuY2lhbCByZXBvcnRzIGZvciBhbGwgYXBwbGljYXRpb24gcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Nb2JpbGVBbmFseXRpY3NOb25GaW5hbmNpYWxSZXBvcnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTW9iaWxlQW5hbHl0aWNzTm9uRmluYW5jaWFsUmVwb3J0QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgd3JpdGUgb25seSBhY2Nlc3MgdG8gcHV0IGV2ZW50IGRhdGEgZm9yIGFsbCBhcHBsaWNhdGlvbiByZXNvdXJjZXMuIChSZWNvbW1lbmRlZCBmb3IgU0RLIGludGVncmF0aW9uKSAqL1xuICAgIHB1YmxpYyBBbWF6b25Nb2JpbGVBbmFseXRpY3NXcml0ZU9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTW9iaWxlQW5hbHl0aWNzV3JpdGVPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gbWFuYWdlIEFtYXpvbiBNb25pdHJvbiAqL1xuICAgIHB1YmxpYyBBbWF6b25Nb25pdHJvbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTW9uaXRyb25GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uTVEgdmlhIG91ciBBUEkvU0RLLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NUUFwaUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVFBcGlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b25NUSB2aWEgb3VyIEFQSS9TREsuICovXG4gICAgcHVibGljIEFtYXpvbk1RQXBpUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVFBcGlSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbk1RIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uTVFGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1RRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uTVEgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NUVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1RUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIExpbmtlZCBSb2xlIFBvbGljeSBmb3IgQVdTIEFtYXpvbiBNUSAqL1xuICAgIHB1YmxpYyBBbWF6b25NUVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1RU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHJlYWRvbmx5IGFjY2VzcyB0byBBbWF6b24gTVNLIENvbm5lY3QgKi9cbiAgICBwdWJsaWMgQW1hem9uTVNLQ29ubmVjdFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1TS0Nvbm5lY3RSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIE1TSyBhbmQgb3RoZXIgcmVxdWlyZWQgcGVybWlzc2lvbnMgZm9yIGl0cyBkZXBlbmRlbmNpZXMuICovXG4gICAgcHVibGljIEFtYXpvbk1TS0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVNLRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgcmVhZG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBNU0sgKi9cbiAgICBwdWJsaWMgQW1hem9uTVNLUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVNLUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQW1hem9uIEFpcmZsb3cgU2VydmVybGVzcyBTZXJ2aWNlIHRvIG1hbmFnZSBuZXR3b3JraW5nIGZvciB5b3VyIHdvcmtmbG93cyBhbmQgYWNjZXNzIG90aGVyIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBbWF6b25NV0FBU2VydmVybGVzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1XQUFTZXJ2ZXJsZXNzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgU2VydmljZSBMaW5rZWQgUm9sZSB1c2VkIGJ5IEFtYXpvbiBNYW5hZ2VkIFdvcmtmbG93cyBmb3IgQXBhY2hlIEFpcmZsb3cuICovXG4gICAgcHVibGljIEFtYXpvbk1XQUFTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NV0FBU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgYWNjZXNzIHRvIHJlc291cmNlcyBuZWVkZWQgYnkgTmltYmxlIFN0dWRpbyBMYXVuY2ggUHJvZmlsZSB3b3JrZXJzLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8gRUMyIGluc3RhbmNlcyBjcmVhdGVkIGJ5IE5pbWJsZSBTdHVkaW8gQnVpbGRlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uTmltYmxlU3R1ZGlvTGF1bmNoUHJvZmlsZVdvcmtlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25OaW1ibGVTdHVkaW9MYXVuY2hQcm9maWxlV29ya2VyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGFjY2VzcyB0byBBbWF6b24gTmltYmxlIFN0dWRpbyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdHVkaW8gYWRtaW4gYW5kIHJlbGF0ZWQgc3R1ZGlvIHJlc291cmNlcyBpbiBvdGhlciBzZXJ2aWNlcy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHRoZSBBZG1pbiByb2xlIGFzc29jaWF0ZWQgd2l0aCB5b3VyIHN0dWRpby4gKi9cbiAgICBwdWJsaWMgQW1hem9uTmltYmxlU3R1ZGlvU3R1ZGlvQWRtaW4oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTmltYmxlU3R1ZGlvU3R1ZGlvQWRtaW4pO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgYWNjZXNzIHRvIEFtYXpvbiBOaW1ibGUgU3R1ZGlvIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHN0dWRpbyB1c2VyIGFuZCByZWxhdGVkIHN0dWRpbyByZXNvdXJjZXMgaW4gb3RoZXIgc2VydmljZXMuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB0aGUgVXNlciByb2xlIGFzc29jaWF0ZWQgd2l0aCB5b3VyIHN0dWRpby4gKi9cbiAgICBwdWJsaWMgQW1hem9uTmltYmxlU3R1ZGlvU3R1ZGlvVXNlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25OaW1ibGVTdHVkaW9TdHVkaW9Vc2VyKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIE9yYWNsZSBEYXRhYmFzZUBBV1MgdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbk9EQlNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9EQlNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIE9taWNzIGFuZCBvdGhlciByZXF1aXJlZCBBV1MgU2VydmljZXMuIFRoaXMgcG9saWN5IGFsbG93cyB0aGUgdXNlciB0byB2aWV3IGFuZCBhY2NlcHQgUkFNIHNoYXJlIGludml0YXRpb25zIHRvIGFjY2VzcyByZXNvdXJjZXMgb3V0c2lkZSBvZiB0aGUgdXNlcidzIEFXUyBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBbWF6b25PbWljc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT21pY3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBPbWljcyAqL1xuICAgIHB1YmxpYyBBbWF6b25PbWljc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9taWNzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgYWRtaW5pc3RyYXRpdmUgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBhY2Nlc3MgdG8gYWxsIEFtYXpvbiBPbmUgRW50ZXJwcmlzZSByZXNvdXJjZXMgYW5kIG9wZXJhdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvbk9uZUVudGVycHJpc2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9uZUVudGVycHJpc2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGxpbWl0ZWQgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBkZXZpY2UgaW5zdGFsbGF0aW9uIGFuZCBhY3RpdmF0aW9uLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PbmVFbnRlcnByaXNlSW5zdGFsbGVyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9uZUVudGVycHJpc2VJbnN0YWxsZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcmVhZCBvbmx5IHBlcm1pc3Npb25zIHRvIGFsbCBBbWF6b24gT25lIEVudGVycHJpc2UgcmVzb3VyY2VzIGFuZCBvcGVyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PbmVFbnRlcnByaXNlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT25lRW50ZXJwcmlzZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFtYXpvbiBPcGVuU2VhcmNoIERhc2hib2FyZHMgU2VydmljZSB0byBhY2Nlc3Mgb3RoZXIgQVdTIHNlcnZpY2VzIHN1Y2ggYXMgQ2xvdWRXYXRjaCBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBbWF6b25PcGVuU2VhcmNoRGFzaGJvYXJkc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9wZW5TZWFyY2hEYXNoYm9hcmRzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgT3BlblNlYXJjaCBEaXJlY3RRdWVyeSBTZXJ2aWNlIHRvIGFjY2VzcyBBV1MgR2x1ZSBBUElzIGZvciBjcmVhdGluZyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbk9wZW5TZWFyY2hEaXJlY3RRdWVyeUdsdWVDcmVhdGVBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT3BlblNlYXJjaERpcmVjdFF1ZXJ5R2x1ZUNyZWF0ZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gT3BlblNlYXJjaCBJbmdlc3Rpb24gdG8gYWNjZXNzIG90aGVyIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uT3BlblNlYXJjaEluZ2VzdGlvbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT3BlblNlYXJjaEluZ2VzdGlvbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBBbWF6b24gT3BlblNlYXJjaCBJbmdlc3Rpb24gU2VydmljZSAqL1xuICAgIHB1YmxpYyBBbWF6b25PcGVuU2VhcmNoSW5nZXN0aW9uUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT3BlblNlYXJjaEluZ2VzdGlvblJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBPcGVuU2VhcmNoIEluZ2VzdGlvbiBTZXJ2aWNlIHRvIGFjY2VzcyBvdGhlciBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbk9wZW5TZWFyY2hJbmdlc3Rpb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PcGVuU2VhcmNoSW5nZXN0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBBbWF6b24gT3BlblNlYXJjaCBTZXJ2ZXJsZXNzIHRvIGFjY2VzcyBvdGhlciBBV1Mgc2VydmljZXMgc3VjaCBhcyBDbG91ZFdhdGNoIEFQSXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbk9wZW5TZWFyY2hTZXJ2ZXJsZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT3BlblNlYXJjaFNlcnZlcmxlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgQW1hem9uIENvZ25pdG8gY29uZmlndXJhdGlvbiBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PcGVuU2VhcmNoU2VydmljZUNvZ25pdG9BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT3BlblNlYXJjaFNlcnZpY2VDb2duaXRvQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBPcGVuU2VhcmNoIFNlcnZpY2UgY29uZmlndXJhdGlvbiBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PcGVuU2VhcmNoU2VydmljZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT3BlblNlYXJjaFNlcnZpY2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgQW1hem9uIE9wZW5TZWFyY2ggU2VydmljZSBjb25maWd1cmF0aW9uIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFtYXpvbk9wZW5TZWFyY2hTZXJ2aWNlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT3BlblNlYXJjaFNlcnZpY2VSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IEFtYXpvbiBPcGVuU2VhcmNoIFNlcnZpY2UgdG8gYWNjZXNzIG90aGVyIEFXUyBzZXJ2aWNlcyBzdWNoIGFzIEVDMiBOZXR3b3JraW5nIEFQSXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbk9wZW5TZWFyY2hTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PcGVuU2VhcmNoU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gUGVyc29uYWxpemUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuIEFsc28gcHJvdmlkZXMgc2VsZWN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIChlLmcuLCBTMywgQ2xvdWRXYXRjaCkuICovXG4gICAgcHVibGljIEFtYXpvblBlcnNvbmFsaXplRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25QZXJzb25hbGl6ZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFBvbGx5IHNlcnZpY2UgYW5kIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUG9sbHlGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblBvbGx5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBQb2xseSByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvblBvbGx5UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUG9sbHlSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byBBV1MgTWFuYWdlZCBQcm9tZXRoZXVzIHJlc291cmNlcyBpbiB0aGUgQVdTIGNvbnNvbGUgKi9cbiAgICBwdWJsaWMgQW1hem9uUHJvbWV0aGV1c0NvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblByb21ldGhldXNDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byBBV1MgTWFuYWdlZCBQcm9tZXRoZXVzIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Qcm9tZXRoZXVzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Qcm9tZXRoZXVzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBhY2Nlc3MgdG8gcnVuIHF1ZXJpZXMgYWdhaW5zdCBBV1MgTWFuYWdlZCBQcm9tZXRoZXVzIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Qcm9tZXRoZXVzUXVlcnlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUHJvbWV0aGV1c1F1ZXJ5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHdyaXRlIG9ubHkgYWNjZXNzIHRvIEFXUyBNYW5hZ2VkIFByb21ldGhldXMgd29ya3NwYWNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Qcm9tZXRoZXVzUmVtb3RlV3JpdGVBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUHJvbWV0aGV1c1JlbW90ZVdyaXRlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBSZXNvdXJjZXMgbWFuYWdlZCBvciB1c2VkIGJ5IEFtYXpvbiBNYW5hZ2VkIFNlcnZpY2UgZm9yIFByb21ldGhldXMgQ29sbGVjdG9yICovXG4gICAgcHVibGljIEFtYXpvblByb21ldGhldXNTY3JhcGVyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUHJvbWV0aGV1c1NjcmFwZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGRldmVsb3BlciBhY2Nlc3MgdG8gZW5hYmxlIGludGVyYWN0aW9ucyB3aXRoIEFtYXpvbiBRICovXG4gICAgcHVibGljIEFtYXpvblFEZXZlbG9wZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUURldmVsb3BlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGVuYWJsZSBpbnRlcmFjdGlvbnMgd2l0aCBBbWF6b24gUSAqL1xuICAgIHB1YmxpYyBBbWF6b25RRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25RRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBRTERCIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUUxEQkNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblFMREJDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBRTERCIHZpYSB0aGUgc2VydmljZSBBUEkuICovXG4gICAgcHVibGljIEFtYXpvblFMREJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblFMREJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gUUxEQi4gKi9cbiAgICBwdWJsaWMgQW1hem9uUUxEQlJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblFMREJSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gUkRTIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNCZXRhU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTQmV0YVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBSRFMgQ3VzdG9tIHRvIHBlcmZvcm0gdmFyaW91cyBhdXRvbWF0aW9uIGFjdGlvbnMgYW5kIGRhdGFiYXNlIG1hbmFnZW1lbnQgdGFza3MgdGhyb3VnaCBhbiBFQzIgaW5zdGFuY2UgcHJvZmlsZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTQ3VzdG9tSW5zdGFuY2VQcm9maWxlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNDdXN0b21JbnN0YW5jZVByb2ZpbGVSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFJEUyBDdXN0b20gUHJldmlldyBTZXJ2aWNlIFJvbGUgUG9saWN5ICovXG4gICAgcHVibGljIEFtYXpvblJEU0N1c3RvbVByZXZpZXdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNDdXN0b21QcmV2aWV3U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIFJEUyBDdXN0b20gdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvblJEU0N1c3RvbVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU0N1c3RvbVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGZ1bGwgYWNjZXNzIHRvIHVzZSB0aGUgUkRTIGRhdGEgQVBJcywgc2VjcmV0IHN0b3JlIEFQSXMgZm9yIFJEUyBkYXRhYmFzZSBjcmVkZW50aWFscywgYW5kIERCIGNvbnNvbGUgcXVlcnkgbWFuYWdlbWVudCBBUElzIHRvIGV4ZWN1dGUgU1FMIHN0YXRlbWVudHMgb24gQXVyb3JhIFNlcnZlcmxlc3MgY2x1c3RlcnMgaW4gdGhlIEFXUyBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNEYXRhRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNEYXRhRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IFJEUyB0byBhY2Nlc3MgRGlyZWN0b3J5IFNlcnZpY2UgTWFuYWdlZCBBRCBvbiBiZWhhbGYgb2YgdGhlIGN1c3RvbWVyIGZvciBkb21haW4tam9pbmVkIFNRTCBTZXJ2ZXIgREIgaW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNEaXJlY3RvcnlTZXJ2aWNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU0RpcmVjdG9yeVNlcnZpY2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQ2xvdWR3YXRjaCBmb3IgUkRTIEVuaGFuY2VkIE1vbml0b3JpbmcgKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTRW5oYW5jZWRNb25pdG9yaW5nUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNFbmhhbmNlZE1vbml0b3JpbmdSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJEUyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblJEU0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIFJEUyBQZXJmb3JtYW5jZSBJbnNpZ2h0cyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTUGVyZm9ybWFuY2VJbnNpZ2h0c0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTUGVyZm9ybWFuY2VJbnNpZ2h0c0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBSZWFkLU9ubHkgcG9saWN5IGZvciBSRFMgUGVyZm9ybWFuY2UgSW5zaWdodHMgKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTUGVyZm9ybWFuY2VJbnNpZ2h0c1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU1BlcmZvcm1hbmNlSW5zaWdodHNSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBSRFMgUHJldmlldyBTZXJ2aWNlIFJvbGUgUG9saWN5ICovXG4gICAgcHVibGljIEFtYXpvblJEU1ByZXZpZXdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNQcmV2aWV3U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBSRFMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gUkRTIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIHJ1biBTUUwgY29tbWFuZHMgdG8gY29weSwgbG9hZCwgdW5sb2FkLCBxdWVyeSwgYW5kIGFuYWx5emUgZGF0YSBvbiBBbWF6b24gUmVkc2hpZnQuIFRoZSBwb2xpY3kgYWxzbyBncmFudHMgcGVybWlzc2lvbnMgdG8gcnVuIHNlbGVjdCBzdGF0ZW1lbnRzIGZvciByZWxhdGVkIHNlcnZpY2VzLCBzdWNoIGFzIEFtYXpvbiBTMywgQW1hem9uIENsb3VkV2F0Y2ggbG9ncywgQW1hem9uIFNhZ2VNYWtlciwgb3IgQVdTIEdsdWUuICovXG4gICAgcHVibGljIEFtYXpvblJlZHNoaWZ0QWxsQ29tbWFuZHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJlZHNoaWZ0QWxsQ29tbWFuZHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJlZHNoaWZ0IERhdGEgQVBJcy4gVGhpcyBwb2xpY3kgYWxzbyBncmFudHMgc2NvcGVkIGFjY2VzcyB0byBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUmVkc2hpZnREYXRhRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWRzaGlmdERhdGFGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJlZHNoaWZ0IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUmVkc2hpZnRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJlZHNoaWZ0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBbWF6b24gUmVkc2hpZnQgUXVlcnkgRWRpdG9yIGFuZCB0byBzYXZlZCBxdWVyaWVzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUmVkc2hpZnRRdWVyeUVkaXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWRzaGlmdFF1ZXJ5RWRpdG9yKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBbWF6b24gUmVkc2hpZnQgUXVlcnkgRWRpdG9yIFYyIG9wZXJhdGlvbnMgYW5kIHJlc291cmNlcy4gVGhpcyBwb2xpY3kgYWxzbyBncmFudHMgYWNjZXNzIHRvIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzLiBUaGlzIGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIGxpc3QgdGhlIEFtYXpvbiBSZWRzaGlmdCBjbHVzdGVycywgcmVhZCBrZXlzIGFuZCBhbGlhc2VzIGluIEFXUyBLTVMgYW5kIG1hbmFnZSB0aGUgUXVlcnkgRWRpdG9yIFYyIHNlY3JldHMgaW4gQVdTIFNlY3JldHMgTWFuYWdlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uUmVkc2hpZnRRdWVyeUVkaXRvclYyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWRzaGlmdFF1ZXJ5RWRpdG9yVjJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHRoZSBhYmlsaXR5IHRvIHdvcmsgd2l0aCBBbWF6b24gUmVkc2hpZnQgUXVlcnkgRWRpdG9yIFYyIHdpdGhvdXQgc2hhcmluZyByZXNvdXJjZXMuIFRoZSBncmFudGVkIHByaW5jaXBhbCBjYW4gb25seSByZWFkLCB1cGRhdGUgYW5kIGRlbGV0ZSBpdHMgb3duIHJlc291cmNlcyBidXQgY2Fubm90IHNoYXJlIHRoZW0uIFRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIGFjY2VzcyB0byBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcy4gVGhpcyBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBsaXN0IHRoZSBBbWF6b24gUmVkc2hpZnQgY2x1c3RlcnMgYW5kIG1hbmFnZSB0aGUgUXVlcnkgRWRpdG9yIFYyIHNlY3JldHMgb2YgdGhlIHByaW5jaXBhbCBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWRzaGlmdFF1ZXJ5RWRpdG9yVjJOb1NoYXJpbmcoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVkc2hpZnRRdWVyeUVkaXRvclYyTm9TaGFyaW5nKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHRoZSBhYmlsaXR5IHRvIHdvcmsgd2l0aCBBbWF6b24gUmVkc2hpZnQgUXVlcnkgRWRpdG9yIFYyIHdpdGggbGltaXRlZCBzaGFyaW5nIG9mIHJlc291cmNlcy4gVGhlIGdyYW50ZWQgcHJpbmNpcGFsIGNhbiByZWFkLCB3cml0ZSBhbmQgc2hhcmUgaXRzIG93biByZXNvdXJjZXMuIFRoZSBncmFudGVkIHByaW5jaXBhbCBjYW4gcmVhZCB0aGUgcmVzb3VyY2VzIHNoYXJlZCB3aXRoIGl0cyB0ZWFtIGJ1dCBjYW5ub3QgdXBkYXRlIHRoZW0uIFRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIGFjY2VzcyB0byBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcy4gVGhpcyBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBsaXN0IHRoZSBBbWF6b24gUmVkc2hpZnQgY2x1c3RlcnMgYW5kIG1hbmFnZSB0aGUgUXVlcnkgRWRpdG9yIFYyIHNlY3JldHMgb2YgdGhlIHByaW5jaXBhbCBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWRzaGlmdFF1ZXJ5RWRpdG9yVjJSZWFkU2hhcmluZygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWRzaGlmdFF1ZXJ5RWRpdG9yVjJSZWFkU2hhcmluZyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB0aGUgYWJpbGl0eSB0byB3b3JrIHdpdGggQW1hem9uIFJlZHNoaWZ0IFF1ZXJ5IEVkaXRvciBWMiB3aXRoIHNoYXJpbmcgb2YgcmVzb3VyY2VzLiBUaGUgZ3JhbnRlZCBwcmluY2lwYWwgY2FuIHJlYWQsIHdyaXRlIGFuZCBzaGFyZSBpdHMgb3duIHJlc291cmNlcy4gVGhlIGdyYW50ZWQgcHJpbmNpcGFsIGNhbiByZWFkIGFuZCB1cGRhdGUgdGhlIHJlc291cmNlcyBzaGFyZWQgd2l0aCBpdHMgdGVhbS4gVGhpcyBwb2xpY3kgYWxzbyBncmFudHMgYWNjZXNzIHRvIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzLiBUaGlzIGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIGxpc3QgdGhlIEFtYXpvbiBSZWRzaGlmdCBjbHVzdGVycyBhbmQgbWFuYWdlIHRoZSBRdWVyeSBFZGl0b3IgVjIgc2VjcmV0cyBvZiB0aGUgcHJpbmNpcGFsIGluIEFXUyBTZWNyZXRzIE1hbmFnZXIuICovXG4gICAgcHVibGljIEFtYXpvblJlZHNoaWZ0UXVlcnlFZGl0b3JWMlJlYWRXcml0ZVNoYXJpbmcoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVkc2hpZnRRdWVyeUVkaXRvclYyUmVhZFdyaXRlU2hhcmluZyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFJlZHNoaWZ0IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUmVkc2hpZnRSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWRzaGlmdFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBSZWRzaGlmdCB0byBjYWxsIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWRzaGlmdFNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJlZHNoaWZ0U2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBzcGVjaWZpZXMgcmVrb2duaXRpb24gYW5kIHMzIHBlcm1pc3Npb25zIHJlcXVpcmVkIGJ5IEFtYXpvbiBSZWtvZ25pdGlvbiBDdXN0b20gTGFiZWxzIGZlYXR1cmUuICovXG4gICAgcHVibGljIEFtYXpvblJla29nbml0aW9uQ3VzdG9tTGFiZWxzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWtvZ25pdGlvbkN1c3RvbUxhYmVsc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBY2Nlc3MgdG8gYWxsIEFtYXpvbiBSZWtvZ25pdGlvbiBBUElzICovXG4gICAgcHVibGljIEFtYXpvblJla29nbml0aW9uRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWtvZ25pdGlvbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBY2Nlc3MgdG8gYWxsIFJlYWQgcmVrb2duaXRpb24gQVBJcyAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWtvZ25pdGlvblJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJla29nbml0aW9uUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgUmVrb2duaXRpb24gdG8gY2FsbCBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvblJla29nbml0aW9uU2VydmljZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVrb2duaXRpb25TZXJ2aWNlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBSb3V0ZSA1MyBBdXRvIE5hbWluZyBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzQXV0b05hbWluZ0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M0F1dG9OYW1pbmdGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBhbGwgUm91dGUgNTMgQXV0byBOYW1pbmcgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M0F1dG9OYW1pbmdSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzQXV0b05hbWluZ1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVnaXN0cmFudCBsZXZlbCBhY2Nlc3MgdG8gUm91dGUgNTMgQXV0byBOYW1pbmcgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M0F1dG9OYW1pbmdSZWdpc3RyYW50QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNBdXRvTmFtaW5nUmVnaXN0cmFudEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBSb3V0ZTUzIERvbWFpbnMgYWN0aW9ucyBhbmQgQ3JlYXRlIEhvc3RlZCBab25lIHRvIGFsbG93IEhvc3RlZCBab25lIGNyZWF0aW9uIGFzIHBhcnQgb2YgZG9tYWluIHJlZ2lzdHJhdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNEb21haW5zRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzRG9tYWluc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gUm91dGU1MyBEb21haW5zIGxpc3QgYW5kIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNEb21haW5zUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M0RvbWFpbnNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBBbWF6b24gUm91dGUgNTMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBmdWxsIGFjY2VzcyB0byBBbWF6b24gUm91dGUgNTMgUHJvZmlsZSByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNQcm9maWxlc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M1Byb2ZpbGVzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBSb3V0ZSA1MyBQcm9maWxlIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M1Byb2ZpbGVzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M1Byb2ZpbGVzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIGFsbCBBbWF6b24gUm91dGUgNTMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJvdXRlIDUzIFJlY292ZXJ5IENsdXN0ZXIgKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M1JlY292ZXJ5Q2x1c3RlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M1JlY292ZXJ5Q2x1c3RlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBSb3V0ZSA1MyBSZWNvdmVyeSBDbHVzdGVyICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNSZWNvdmVyeUNsdXN0ZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzUmVjb3ZlcnlDbHVzdGVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gUm91dGUgNTMgUmVjb3ZlcnkgQ29udHJvbCBDb25maWcgKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M1JlY292ZXJ5Q29udHJvbENvbmZpZ0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M1JlY292ZXJ5Q29udHJvbENvbmZpZ0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBSb3V0ZSA1MyBSZWNvdmVyeSBDb250cm9sIENvbmZpZyAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzUmVjb3ZlcnlDb250cm9sQ29uZmlnUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M1JlY292ZXJ5Q29udHJvbENvbmZpZ1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJvdXRlIDUzIFJlY292ZXJ5IFJlYWRpbmVzcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzUmVjb3ZlcnlSZWFkaW5lc3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNSZWNvdmVyeVJlYWRpbmVzc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBSb3V0ZSA1MyBSZWNvdmVyeSBSZWFkaW5lc3MgKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M1JlY292ZXJ5UmVhZGluZXNzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M1JlY292ZXJ5UmVhZGluZXNzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBGdWxsIGFjY2VzcyBwb2xpY3kgZm9yIFJvdXRlIDUzIFJlc29sdmVyICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNSZXNvbHZlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M1Jlc29sdmVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFJlYWQgb25seSBwb2xpY3kgZm9yIFJvdXRlIDUzIFJlc29sdmVyICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNSZXNvbHZlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNSZXNvbHZlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIGJ1Y2tldHMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQVdTIExhbWJkYSBmdW5jdGlvbnMgcGVybWlzc2lvbnMgdG8gaW50ZXJhY3Qgd2l0aCBBbWF6b24gUzMgT2JqZWN0IExhbWJkYS4gQWxzbyBncmFudHMgTGFtYmRhIHBlcm1pc3Npb25zIHRvIHdyaXRlIHRvIENsb3VkV2F0Y2ggTG9ncy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNPYmplY3RMYW1iZGFFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzT2JqZWN0TGFtYmRhRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTMyBvbiBPdXRwb3N0cyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblMzT3V0cG9zdHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzT3V0cG9zdHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gUzMgb24gT3V0cG9zdHMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM091dHBvc3RzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNPdXRwb3N0c1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBhbGwgYnVja2V0cyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblMzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBTMyB0YWJsZSBidWNrZXRzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM1RhYmxlc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNUYWJsZXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBtYW5hZ2VkIHBvbGljeSBncmFudHMgQVdTIExha2UgRm9ybWF0aW9uIHBlcm1pc3Npb25zIHRvIGFjdCBvbiBhbGwgdGFibGUgYnVja2V0cywgbmFtZXNwYWNlcywgYW5kIHRhYmxlcyB3aXRoaW4gdGhlIGFjY291bnQuICovXG4gICAgcHVibGljIEFtYXpvblMzVGFibGVzTGFrZUZvcm1hdGlvblNlcnZpY2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzVGFibGVzTGFrZUZvcm1hdGlvblNlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBhbGwgUzMgdGFibGUgYnVja2V0cy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNUYWJsZXNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM1RhYmxlc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgU2VydmljZSBDYXRhbG9nIHNlcnZpY2UgdG8gcHJvdmlzaW9uIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBDb2RlUGlwZWxpbmUsIENvZGVCdWlsZCwgQ29kZUNvbW1pdCwgR2x1ZSwgQ2xvdWRGb3JtYXRpb24sIGV0YywuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckFkbWluU2VydmljZUNhdGFsb2dQcm9kdWN0c1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckFkbWluU2VydmljZUNhdGFsb2dQcm9kdWN0c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIEFtYXpvbiBTYWdlTWFrZXIgQ2FudmFzIHRvIHVzZSBBSSBzZXJ2aWNlcyB0byBzdXBwb3J0IHJlYWR5IHRvIHVzZSBBSSBzb2x1dGlvbnMuIFRoaXMgcG9saWN5IHdpbGwgYWRkIG1vcmUgbXV0YXRpbmcgcGVybWlzc2lvbnMgZm9yIHNlcnZpY2VzIGFzIEFtYXpvbiBTYWdlTWFrZXIgQ2FudmFzIGFkZHMgc3VwcG9ydC4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyQ2FudmFzQUlTZXJ2aWNlc0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJDYW52YXNBSVNlcnZpY2VzQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHVzZSBBbWF6b24gQmVkcm9jayBpbiBTYWdlTWFrZXIgQ2FudmFzIGJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gZG93bnN0cmVhbSBzZXJ2aWNlcyBzdWNoIGFzIFMzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJDYW52YXNCZWRyb2NrQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckNhbnZhc0JlZHJvY2tBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gU2FnZU1ha2VyIHJlc291cmNlcyBhbmQgb3BlcmF0aW9ucyBmb3IgZGF0YSBwcmVwYXJhdGlvbiBpbiBDYW52YXMuIFRoZSBwb2xpY3kgYWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgKGUuZy4sIFMzLCBJQU0sIEtNUywgUkRTLCBDbG91ZFdhdGNoIExvZ3MsIFJlZHNoaWZ0LCBBdGhlbmEsIEdsdWUsIEV2ZW50QnJpZGdlLCBTZWNyZXRzIE1hbmFnZXIpLiBUaGlzIHBvbGljeSBzaG91bGQgYmUgYXR0YWNoZWQgdG8gdGhlIEFtYXpvbiBTYWdlTWFrZXIgRG9tYWluL1VzZXIgUHJvZmlsZSBleGVjdXRpb24gcm9sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyQ2FudmFzRGF0YVByZXBGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckNhbnZhc0RhdGFQcmVwRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gU2FnZU1ha2VyIENhbnZhcyB0byBjcmVhdGUsIG1hbmFnZSBhbmQgdmlldyBlbmRwb2ludCBkZXRhaWxzIGZvciBlbmRwb2ludHMgY3JlYXRlZCB0aHJvdWdoIENhbnZhcy4gQWxsb3dzIEFtYXpvbiBTYWdlTWFrZXIgQ2FudmFzIHRvIHJldHJpZXZlIGVuZHBvaW50IGludm9jYXRpb24gbWV0cmljcyBmcm9tIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckNhbnZhc0RpcmVjdERlcGxveUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJDYW52YXNEaXJlY3REZXBsb3lBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gQW1hem9uIEVNUiBTZXJ2ZXJsZXNzIGZvciBzZXJ2aWNlcyBzdWNoIGFzIFMzLCB1c2VkIGJ5IEFtYXpvbiBTYWdlTWFrZXIgQ2FudmFzIGZvciBsYXJnZSBkYXRhIHByb2Nlc3NpbmcuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckNhbnZhc0VNUlNlcnZlcmxlc3NFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckNhbnZhc0VNUlNlcnZlcmxlc3NFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIGNvbW1vbmx5IG5lZWRlZCB0byB1c2UgU2FnZU1ha2VyIENhbnZhcyB3aXRoIEFtYXpvbiBGb3JlY2FzdC4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyQ2FudmFzRm9yZWNhc3RBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyQ2FudmFzRm9yZWNhc3RBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gU2FnZU1ha2VyIENhbnZhcyByZXNvdXJjZXMgYW5kIG9wZXJhdGlvbnMuIFRoZSBwb2xpY3kgYWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgKGUuZy4sIFMzLCBJQU0sIFZQQywgRUNSLCBDbG91ZFdhdGNoIExvZ3MsIFJlZHNoaWZ0LCBTZWNyZXRzIE1hbmFnZXIsIGFuZCBGb3JlY2FzdCkuIFRoaXMgcG9saWN5IHNob3VsZCBiZSBhdHRhY2hlZCB0byB0aGUgQW1hem9uIFNhZ2VNYWtlciBEb21haW4vVXNlciBQcm9maWxlIGV4ZWN1dGlvbiByb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJDYW52YXNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckNhbnZhc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgQW1hem9uIFNhZ2VNYWtlciBDYW52YXMgdG8gdXNlIHRoZSBTYWdlTWFrZXIgRGF0YSBTY2llbmNlIEFzc2lzdGFudCBzZXJ2aWNlLiBUaGUgRGF0YSBTY2llbmNlIEFzc2lzdGFudCBjdXJyZW50bHkgdXNlcyBib3RoIEFtYXpvbiBTYWdlTWFrZXIgYW5kIEFtYXpvbiBRIERldmVsb3BlciB0byBwcm9jZXNzIHVzZXIgcHJvbXB0cy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyQ2FudmFzU01EYXRhU2NpZW5jZUFzc2lzdGFudEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJDYW52YXNTTURhdGFTY2llbmNlQXNzaXN0YW50QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIGNvbW1vbmx5IG5lZWRlZCB0byB1c2UgQW1hem9uIFNhZ2VNYWtlciBDbHVzdGVyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJDbHVzdGVySW5zdGFuY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckNsdXN0ZXJJbnN0YW5jZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBNYW5hZ2VkIHBvbGljeSBmb3IgU2VydmljZSBMaW5rZWQgUm9sZSBmb3IgQW1hem9uIFNhZ2VNYWtlciBDb3JlIFNlcnZpY2VzICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckNvcmVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJDb3JlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBuZWNlc3NhcnkgZm9yIFNhZ2VNYWtlciBFZGdlIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIGEgZGV2aWNlIGZsZWV0IGZvciB0aGUgY3VzdG9tZXIgdXNpbmcgdGhlIGRlZmF1bHQgY2xvdWQgY29ubmVjdGlvbi4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyRWRnZURldmljZUZsZWV0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckVkZ2VEZXZpY2VGbGVldFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGUgb2ZmbGluZSBzdG9yZSBmb3IgYW4gQW1hem9uIFNhZ2VNYWtlciBGZWF0dXJlU3RvcmUgZmVhdHVyZSBncm91cC4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyRmVhdHVyZVN0b3JlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckZlYXR1cmVTdG9yZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTYWdlTWFrZXIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuIEFsc28gcHJvdmlkZXMgc2VsZWN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIChlLmcuLCBTMywgRUNSLCBDbG91ZFdhdGNoIExvZ3MpLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlIGFjY2VzcyB0byBzZXJ2aWNlcyB0aGF0IGFyZSBjb21tb25seSBuZWVkZWQgdG8gdXNlIFNhZ2VNYWtlciBnZW9zcGF0aWFsLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJHZW9zcGF0aWFsRXhlY3V0aW9uUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJHZW9zcGF0aWFsRXhlY3V0aW9uUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTYWdlTWFrZXIgR2Vvc3BhdGlhbCB0aHJvdWdoIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckdlb3NwYXRpYWxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckdlb3NwYXRpYWxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBzZXJ2aWNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBydW4gU2FnZU1ha2VyIEdyb3VuZFRydXRoIExhYmVsaW5nIGpvYiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJHcm91bmRUcnV0aEV4ZWN1dGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJHcm91bmRUcnV0aEV4ZWN1dGlvbik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIHByaXZpbGVnZXMgcmVxdWlyZWQgZm9yIHNldHRpbmcgdXAgU2FnZU1ha2VyIEh5cGVyUG9kIG9ic2VydmFiaWxpdHkuIEl0IGVuYWJsZXMgYWNjZXNzIHRvIEFtYXpvbiBNYW5hZ2VkIFByb21ldGhldXMsIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgYW5kIEVLUyBBZGRvbnMuIFRoZSBwb2xpY3kgYWxzbyBpbmNsdWRlcyBicm9hZCBhY2Nlc3MgdG8gR3JhZmFuYSBIVFRQIEFQSXMgdGhyb3VnaCBTZXJ2aWNlQWNjb3VudFRva2VucyBhY3Jvc3MgYWxsIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgd29ya3NwYWNlcyBpbiB5b3VyIGFjY291bnQuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckh5cGVyUG9kT2JzZXJ2YWJpbGl0eUFkbWluQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckh5cGVyUG9kT2JzZXJ2YWJpbGl0eUFkbWluQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIEFtYXpvbiBTYWdlTWFrZXIgSHlwZXJQb2QgdG8gcmVsYXRlZCBBV1Mgc2VydmljZXMgc3VjaCBhcyBBbWF6b24gRUtTLCBBbWF6b24gQ2xvdWRXYXRjaCBldGMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckh5cGVyUG9kU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VySHlwZXJQb2RTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIHNldCB1cCB0aGUgU2FnZU1ha2VyIEh5cGVyUG9kIHRyYWluaW5nIG9wZXJhdG9yLiBJdCBlbmFibGVzIGFjY2VzcyB0byBBbWF6b24gU2FnZU1ha2VyIEh5cGVyUG9kIGFuZCBFS1MgYWRkLW9ucy4gVGhlIHBvbGljeSBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBkZXNjcmliZSB0aGUgU2FnZU1ha2VyIEh5cGVyUG9kIHJlc291cmNlcyBpbiB5b3VyIGFjY291bnQuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckh5cGVyUG9kVHJhaW5pbmdPcGVyYXRvckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJIeXBlclBvZFRyYWluaW5nT3BlcmF0b3JBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gY3JlYXRlIEFtYXpvbiBBdWdtZW50ZWQgQUkgRmxvd0RlZmluaXRpb24gcmVzb3VyY2VzIGFnYWluc3QgYW55IFdvcmt0ZWFtLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJNZWNoYW5pY2FsVHVya0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJNZWNoYW5pY2FsVHVya0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgQVdTIG1hbmFnZWQgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyBuZWVkZWQgdG8gdXNlIGFsbCBBbWF6b24gU2FnZU1ha2VyIEdvdmVybmFuY2UgZmVhdHVyZXMuIFRoZSBwb2xpY3kgYWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgKGUuZy4sIFMzLCBLTVMpLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJNb2RlbEdvdmVybmFuY2VVc2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyTW9kZWxHb3Zlcm5hbmNlVXNlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBpcyBhIG5ldyBtYW5hZ2VkIHBvbGljeSBmb3IgTW9kZWwgUmVnaXN0cnkgaW4gU2FnZW1ha2VyLiBUaGlzIHBvbGljeSBpcyBhIHN0YW5kYWxvbmUgcG9saWN5IHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIHRoZSB1c2VyIHJvbGUgdG8gYWNjZXNzIE1vZGVsIFJlZ2lzdHJ5IHJlbGF0ZWQgZnVuY3Rpb25hbGl0aWVzIGluIFNhZ2VtYWtlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyTW9kZWxSZWdpc3RyeUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyTW9kZWxSZWdpc3RyeUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBNYW5hZ2VkIHBvbGljeSBmb3IgU2VydmljZSBMaW5rZWQgUm9sZSBmb3IgQW1hem9uIFNhZ2VNYWtlciBOb3RlYm9va3MgKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyTm90ZWJvb2tzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyTm90ZWJvb2tzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIEFtYXpvbiBTYWdlTWFrZXIgcGFydG5lciBhcHAgdXNlcnMgdG8gYWNjZXNzIGFwcGxpY2F0aW9ucywgbGlzdCBhdmFpbGFibGUgYXBwbGljYXRpb25zLCBsYXVuY2ggYXBwbGljYXRpb24gd2ViIFVJcywgYW5kIGNvbm5lY3QgdmlhIHRoZSBhcHBsaWNhdGlvbiBTREsuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclBhcnRuZXJBcHBzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJQYXJ0bmVyQXBwc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIHJvbGUgcG9saWN5IHVzZWQgYnkgdGhlIEFXUyBBUElHYXRld2F5IHdpdGhpbiB0aGUgQVdTIFNlcnZpY2VDYXRhbG9nIHByb3Zpc2lvbmVkIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBMYW1iZGEgYW5kIG90aGVycy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyUGFydG5lclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNBcGlHYXRld2F5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyUGFydG5lclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNBcGlHYXRld2F5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIHJvbGUgcG9saWN5IHVzZWQgYnkgdGhlIEFXUyBDbG91ZEZvcm1hdGlvbiB3aXRoaW4gdGhlIEFXUyBTZXJ2aWNlQ2F0YWxvZyBwcm92aXNpb25lZCBwcm9kdWN0cyBmcm9tIEFtYXpvbiBTYWdlTWFrZXIgcG9ydGZvbGlvIG9mIHByb2R1Y3RzLiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYSBzdWJzZXQgb2YgcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgTGFtYmRhLCBBUElHYXRld2F5IGFuZCBvdGhlcnMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclBhcnRuZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzQ2xvdWRGb3JtYXRpb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJQYXJ0bmVyU2VydmljZUNhdGFsb2dQcm9kdWN0c0Nsb3VkRm9ybWF0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIHJvbGUgcG9saWN5IHVzZWQgYnkgdGhlIEFXUyBMYW1iZGEgd2l0aGluIHRoZSBBV1MgU2VydmljZUNhdGFsb2cgcHJvdmlzaW9uZWQgcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIFNlY3JldHMgTWFuYWdlciBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJQYXJ0bmVyU2VydmljZUNhdGFsb2dQcm9kdWN0c0xhbWJkYVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclBhcnRuZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzTGFtYmRhU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIEFtYXpvbiBNYW5hZ2VkIFBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgY29tbW9ubHkgbmVlZGVkIGZvciB1c2Ugd2l0aCBDYWxsYmFjayBzdGVwcyBhbmQgTGFtYmRhIHN0ZXBzIGluIFNhZ2VNYWtlciBNb2RlbCBCdWlsZGluZyBQaXBlbGluZXMuIEl0IGlzIGFkZGVkIHRvIHRoZSBBbWF6b25TYWdlTWFrZXItRXhlY3V0aW9uUm9sZSB0aGF0IGNhbiBiZSBjcmVhdGVkIHdoZW4gc2V0dGluZyB1cCBTYWdlTWFrZXIgU3R1ZGlvLiBJdCBjYW4gYWxzbyBiZSBhdHRhY2hlZCB0byBhbnkgb3RoZXIgcm9sZSB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgYXV0aG9yaW5nIG9yIGV4ZWN1dGluZyBwaXBlbGluZXMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclBpcGVsaW5lc0ludGVncmF0aW9ucygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJQaXBlbGluZXNJbnRlZ3JhdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSB3aWxsIGJlIHVzZWQgQnkgU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvcyB0byBjcmVhdGUgVlBDIHJlbGF0ZWQgcmVzb3VyY2VzIGZvciBRdWlja1NpZ2h0ICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclF1aWNrU2lnaHRWUENQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyUXVpY2tTaWdodFZQQ1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFNhZ2VNYWtlciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIHJvbGUgcG9saWN5IHVzZWQgYnkgdGhlIEFXUyBBUElHYXRld2F5IHdpdGhpbiB0aGUgQVdTIFNlcnZpY2VDYXRhbG9nIHByb3Zpc2lvbmVkIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBDbG91ZFdhdGNoIExvZ3MgYW5kIG90aGVycy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0FwaUdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzQXBpR2F0ZXdheVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgQ2xvdWRGb3JtYXRpb24gd2l0aGluIHRoZSBBV1MgU2VydmljZUNhdGFsb2cgcHJvdmlzaW9uZWQgcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc3Vic2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIFNhZ2VNYWtlciBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzQ2xvdWRmb3JtYXRpb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzQ2xvdWRmb3JtYXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIENvZGVCdWlsZCB3aXRoaW4gdGhlIEFXUyBTZXJ2aWNlQ2F0YWxvZyBwcm92aXNpb25lZCBwcm9kdWN0cyBmcm9tIEFtYXpvbiBTYWdlTWFrZXIgcG9ydGZvbGlvIG9mIHByb2R1Y3RzLiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYSBzdWJzZXQgb2YgcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgQ29kZVBpcGVsaW5lLCBDb2RlQnVpbGQgYW5kIG90aGVycy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0NvZGVCdWlsZFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNDb2RlQnVpbGRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIENvZGVQaXBlbGluZSB3aXRoaW4gdGhlIEFXUyBTZXJ2aWNlQ2F0YWxvZyBwcm92aXNpb25lZCBwcm9kdWN0cyBmcm9tIEFtYXpvbiBTYWdlTWFrZXIgcG9ydGZvbGlvIG9mIHByb2R1Y3RzLiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYSBzdWJzZXQgb2YgcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgQ29kZVBpcGVsaW5lLCBDb2RlQnVpbGQgYW5kIG90aGVycy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0NvZGVQaXBlbGluZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNDb2RlUGlwZWxpbmVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIENsb3VkV2F0Y2ggRXZlbnRzIHdpdGhpbiB0aGUgQVdTIFNlcnZpY2VDYXRhbG9nIHByb3Zpc2lvbmVkIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHN1YnNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBDb2RlUGlwZWxpbmUgYW5kIG90aGVycy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0V2ZW50c1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNFdmVudHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIEZpcmVob3NlIHdpdGhpbiB0aGUgQVdTIFNlcnZpY2VDYXRhbG9nIHByb3Zpc2lvbmVkIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBGaXJlaG9zZSBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzRmlyZWhvc2VTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzRmlyZWhvc2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIEdsdWUgd2l0aGluIHRoZSBBV1MgU2VydmljZUNhdGFsb2cgcHJvdmlzaW9uZWQgcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIEdsdWUsIFMzIGFuZCBvdGhlcnMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNHbHVlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0dsdWVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIExhbWJkYSB3aXRoaW4gdGhlIEFXUyBTZXJ2aWNlQ2F0YWxvZyBwcm92aXNpb25lZCBwcm9kdWN0cyBmcm9tIEFtYXpvbiBTYWdlTWFrZXIgcG9ydGZvbGlvIG9mIHByb2R1Y3RzLiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYSBzZXQgb2YgcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgRUNSLCBTMyBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzTGFtYmRhU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0xhbWJkYVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBBbWF6b24gTWFuYWdlZCBQb2xpY3kgcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyB0byBjcmVhdGUgYW5kIG1hbmFnZSBTYWdlTWFrZXIgVHJhaW5pbmcgUGxhbnMuIEl0IGFsbG93cyB1c2VycyB0byBjcmVhdGUgVHJhaW5pbmcgUGxhbnMgYW5kIFJlc2VydmVkIENhcGFjaXRpZXMsIGRlc2NyaWJlIGV4aXN0aW5nIFRyYWluaW5nIFBsYW5zLCBhbmQgcGVyZm9ybSBzZWFyY2ggYW5kIGxpc3Rpbmcgb3BlcmF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyVHJhaW5pbmdQbGFuQ3JlYXRlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclRyYWluaW5nUGxhbkNyZWF0ZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTZWN1cml0eSBMYWtlIGFuZCByZWxhdGVkIHNlcnZpY2VzIG5lZWRlZCB0byBhZG1pbmlzdGVyIFNlY3VyaXR5IExha2UuICovXG4gICAgcHVibGljIEFtYXpvblNlY3VyaXR5TGFrZUFkbWluaXN0cmF0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2VjdXJpdHlMYWtlQWRtaW5pc3RyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQW1hem9uIFNlY3VyaXR5TGFrZSBtZXRhIHN0b3JlIG1hbmFnZXIgbGFtYmRhIHdoaWNoIGFsbG93cyB0aGUgYWNjZXNzIHRvIGNsb3Vkd2F0Y2gsIFMzLCBHbHVlIGFuZCBTUVMuICovXG4gICAgcHVibGljIEFtYXpvblNlY3VyaXR5TGFrZU1ldGFzdG9yZU1hbmFnZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2VjdXJpdHlMYWtlTWV0YXN0b3JlTWFuYWdlcik7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBTZWN1cml0eSBMYWtlIGNyZWF0ZXMgSUFNIHJvbGVzIGZvciB0aGlyZC1wYXJ0eSBjdXN0b20gc291cmNlcyB0byB3cml0ZSBkYXRhIHRvIGEgZGF0YSBsYWtlIGFuZCBmb3IgdGhpcmQtcGFydHkgc3Vic2NyaWJlcnMgdG8gY29uc3VtZSBkYXRhIGZyb20gYSBkYXRhIGxha2UsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgdGhlc2Ugcm9sZXMgdG8gZGVmaW5lIHRoZSBib3VuZGFyeSBvZiB0aGVpciBwZXJtaXNzaW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2VjdXJpdHlMYWtlUGVybWlzc2lvbnNCb3VuZGFyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TZWN1cml0eUxha2VQZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFNFUyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblNFU0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU0VTRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFNFUyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblNFU1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNFU1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFNFUyB0byBwdWJsaXNoIEFtYXpvbiBDbG91ZFdhdGNoIGJhc2ljIG1vbml0b3JpbmcgbWV0cmljcyBvbiBiZWhhbGYgb2YgeW91ciBTRVMgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFtYXpvblNFU1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNFU1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFNOUyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblNOU0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU05TRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFNOUyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblNOU1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNOU1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIEFtYXpvbiBTTlMgc2VydmljZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TTlNSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNOU1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gU1FTIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU1FTRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TUVNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gU1FTIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU1FTUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU1FTUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gdmlldyBhdXRvbWF0aW9uIGV4ZWN1dGlvbnMgYW5kIHNlbmQgYXBwcm92YWwgZGVjaXNpb25zIHRvIGF1dG9tYXRpb24gd2FpdGluZyBmb3IgYXBwcm92YWwgKi9cbiAgICBwdWJsaWMgQW1hem9uU1NNQXV0b21hdGlvbkFwcHJvdmVyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNTTUF1dG9tYXRpb25BcHByb3ZlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBFQzIgQXV0b21hdGlvbiBzZXJ2aWNlIHRvIGV4ZWN1dGUgYWN0aXZpdGllcyBkZWZpbmVkIHdpdGhpbiBBdXRvbWF0aW9uIGRvY3VtZW50cyAqL1xuICAgIHB1YmxpYyBBbWF6b25TU01BdXRvbWF0aW9uUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TU01BdXRvbWF0aW9uUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBTU00gQWdlbnQgdG8gYWNjZXNzIERpcmVjdG9yeSBTZXJ2aWNlIG9uIGJlaGFsZiBvZiB0aGUgY3VzdG9tZXIgZm9yIGRvbWFpbi1qb2luIHRoZSBtYW5hZ2VkIGluc3RhbmNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TU01EaXJlY3RvcnlTZXJ2aWNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNTTURpcmVjdG9yeVNlcnZpY2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gU1NNLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TU01GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNTTUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiAgU2VydmljZSBSb2xlIHRvIGJlIHVzZWQgZm9yIEVDMiBNYWludGVuYW5jZSBXaW5kb3cgKi9cbiAgICBwdWJsaWMgQW1hem9uU1NNTWFpbnRlbmFuY2VXaW5kb3dSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNTTU1haW50ZW5hbmNlV2luZG93Um9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGVuYWJsZXMgQVdTIFN5c3RlbXMgTWFuYWdlciBmdW5jdGlvbmFsaXR5IG9uIEVDMiBpbnN0YW5jZXMuICovXG4gICAgcHVibGljIEFtYXpvblNTTU1hbmFnZWRFQzJJbnN0YW5jZURlZmF1bHRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU1NNTWFuYWdlZEVDMkluc3RhbmNlRGVmYXVsdFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBwb2xpY3kgZm9yIEFtYXpvbiBFQzIgUm9sZSB0byBlbmFibGUgQVdTIFN5c3RlbXMgTWFuYWdlciBzZXJ2aWNlIGNvcmUgZnVuY3Rpb25hbGl0eS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU1NNTWFuYWdlZEluc3RhbmNlQ29yZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TU01NYW5hZ2VkSW5zdGFuY2VDb3JlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBhY2Nlc3MgdG8gY2hpbGQgaW5zdGFuY2VzIGZvciBwYXRjaCBhc3NvY2lhdGlvbiBvcGVyYXRpb24uICovXG4gICAgcHVibGljIEFtYXpvblNTTVBhdGNoQXNzb2NpYXRpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU1NNUGF0Y2hBc3NvY2lhdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFNTTS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU1NNUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU1NNUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIFJlc291cmNlcyBtYW5hZ2VkIG9yIHVzZWQgYnkgQW1hem9uIFNTTSAqL1xuICAgIHB1YmxpYyBBbWF6b25TU01TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TU01TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFjY2VzcyB0byBhbGwgQW1hem9uIFRleHRyYWN0IEFQSXMgKi9cbiAgICBwdWJsaWMgQW1hem9uVGV4dHJhY3RGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblRleHRyYWN0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBUZXh0cmFjdCB0byBjYWxsIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uVGV4dHJhY3RTZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25UZXh0cmFjdFNlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gbWFuYWdlIEFtYXpvbiBUaW1lc3RyZWFtIHVzaW5nIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiBOb3RlIHRoYXQgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgcGVybWlzc2lvbnMgZm9yIGNlcnRhaW4gS01TIG9wZXJhdGlvbnMsIGFuZCBvcGVyYXRpb25zIHRvIG1hbmFnZSB5b3VyIHNhdmVkIHF1ZXJpZXMuIElmIHVzaW5nIEN1c3RvbWVyIG1hbmFnZWQgQ01LLCBwbGVhc2UgcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBmb3IgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBuZWVkZWQuICovXG4gICAgcHVibGljIEFtYXpvblRpbWVzdHJlYW1Db25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25UaW1lc3RyZWFtQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gVGltZXN0cmVhbS4gTm90ZSB0aGF0IHRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIGNlcnRhaW4gS01TIG9wZXJhdGlvbiBhY2Nlc3MuIElmIHVzaW5nIEN1c3RvbWVyIG1hbmFnZWQgQ01LLCBwbGVhc2UgcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBmb3IgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBuZWVkZWQuICovXG4gICAgcHVibGljIEFtYXpvblRpbWVzdHJlYW1GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblRpbWVzdHJlYW1GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgdG8gY3JlYXRlLCB1cGRhdGUsIGRlbGV0ZSBhbmQgbGlzdCBBbWF6b24gVGltZXN0cmVhbSBJbmZsdXhEQiBpbnN0YW5jZXMgYW5kIGNyZWF0ZSBhbmQgbGlzdCBwYXJhbWV0ZXIgZ3JvdXBzLiBQbGVhc2UgcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBmb3IgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBuZWVkZWQuICovXG4gICAgcHVibGljIEFtYXpvblRpbWVzdHJlYW1JbmZsdXhEQkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVGltZXN0cmVhbUluZmx1eERCRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBtYW5hZ2UgQW1hem9uIFRpbWVzdHJlYW0gSW5mbHV4REIgaW5zdGFuY2VzIGFuZCBwYXJhbWV0ZXIgZ3JvdXBzIGV4Y2VwdCBtYXJrZXRwbGFjZSBvcGVyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25UaW1lc3RyZWFtSW5mbHV4REJGdWxsQWNjZXNzV2l0aG91dE1hcmtldHBsYWNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblRpbWVzdHJlYW1JbmZsdXhEQkZ1bGxBY2Nlc3NXaXRob3V0TWFya2V0cGxhY2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBjcmVhdGUsIHVwZGF0ZSwgZGVsZXRlIGFuZCBsaXN0IEFtYXpvbiBUaW1lc3RyZWFtIEluZmx1eERCIGluc3RhbmNlcyBhbmQgY3JlYXRlIGFuZCBsaXN0IHBhcmFtZXRlciBncm91cHMuIFBsZWFzZSByZWZlciB0byBkb2N1bWVudGF0aW9uIGZvciBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG5lZWRlZC4gKi9cbiAgICBwdWJsaWMgQW1hem9uVGltZXN0cmVhbUluZmx1eERCU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVGltZXN0cmVhbUluZmx1eERCU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBUaW1lc3RyZWFtLiBQb2xpY3kgYWxzbyBwcm92aWRlcyBwZXJtaXNzaW9uIHRvIGNhbmNlbCBhbnkgcnVubmluZyBxdWVyeS4gSWYgdXNpbmcgQ3VzdG9tZXIgbWFuYWdlZCBDTUssIHBsZWFzZSByZWZlciB0byBkb2N1bWVudGF0aW9uIGZvciBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG5lZWRlZC4gKi9cbiAgICBwdWJsaWMgQW1hem9uVGltZXN0cmVhbVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblRpbWVzdHJlYW1SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBUcmFuc2NyaWJlIG9wZXJhdGlvbnMgKi9cbiAgICBwdWJsaWMgQW1hem9uVHJhbnNjcmliZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVHJhbnNjcmliZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gcmVhZCBvbmx5IG9wZXJhdGlvbiBmb3IgQW1hem9uIFRyYW5zY3JpYmUgKi9cbiAgICBwdWJsaWMgQW1hem9uVHJhbnNjcmliZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblRyYW5zY3JpYmVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIFZlcmlmaWVkIFBlcm1pc3Npb25zICovXG4gICAgcHVibGljIEFtYXpvblZlcmlmaWVkUGVybWlzc2lvbnNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblZlcmlmaWVkUGVybWlzc2lvbnNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgVmVyaWZpZWQgUGVybWlzc2lvbnMgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uVmVyaWZpZWRQZXJtaXNzaW9uc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblZlcmlmaWVkUGVybWlzc2lvbnNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBjcmVhdGUgbmV0d29yayBpbnRlcmZhY2VzIGFuZCBhdHRhY2ggdGhlbSB0byBjcm9zcy1hY2NvdW50IHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25WUENDcm9zc0FjY291bnROZXR3b3JrSW50ZXJmYWNlT3BlcmF0aW9ucygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25WUENDcm9zc0FjY291bnROZXR3b3JrSW50ZXJmYWNlT3BlcmF0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBWUEMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25WUENGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblZQQ0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBkZXNjcmliZSBBV1MgcmVzb3VyY2VzLCBydW4gTmV0d29yayBBY2Nlc3MgQW5hbHl6ZXIsIGFuZCBjcmVhdGUgb3IgZGVsZXRlIHRhZ3Mgb24gTmV0d29yayBJbnNpZ2h0cyBBY2Nlc3MgU2NvcGUgYW5kIE5ldHdvcmsgSW5zaWdodHMgQWNjZXNzIFNjb3BlIEFuYWx5c2lzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25WUENOZXR3b3JrQWNjZXNzQW5hbHl6ZXJGdWxsQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblZQQ05ldHdvcmtBY2Nlc3NBbmFseXplckZ1bGxBY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBkZXNjcmliZSBBV1MgcmVzb3VyY2VzLCBydW4gUmVhY2hhYmlsaXR5IEFuYWx5emVyLCBhbmQgY3JlYXRlIG9yIGRlbGV0ZSB0YWdzIG9uIE5ldHdvcmsgSW5zaWdodHMgUGF0aCBhbmQgTmV0d29yayBJbnNpZ2h0cyBBbmFseXNpcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uVlBDUmVhY2hhYmlsaXR5QW5hbHl6ZXJGdWxsQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblZQQ1JlYWNoYWJpbGl0eUFuYWx5emVyRnVsbEFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIHRvIHRoZSByb2xlIElBTVJvbGVGb3JSZWFjaGFiaWxpdHlBbmFseXplckNyb3NzQWNjb3VudFJlc291cmNlQWNjZXNzLiBUaGlzIHJvbGUgaXMgZGVwbG95ZWQgdG8gdGhlIG1lbWJlciBhY2NvdW50cyBpbiBhbiBvcmdhbml6YXRpb24gd2hlbiB0aGUgbWFuYWdlbWVudCBhY2NvdW50IGVuYWJsZXMgdHJ1c3RlZCBhY2Nlc3MgZm9yIFJlYWNoYWJpbGl0eSBBbmFseXplci4gSXQgcHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gdmlldyByZXNvdXJjZXMgZnJvbSBhY3Jvc3MgeW91ciBvcmdhbml6YXRpb24gdXNpbmcgdGhlIFJlYWNoYWJpbGl0eSBBbmFseXplciBjb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25WUENSZWFjaGFiaWxpdHlBbmFseXplclBhdGhDb21wb25lbnRSZWFkUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblZQQ1JlYWNoYWJpbGl0eUFuYWx5emVyUGF0aENvbXBvbmVudFJlYWRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBWUEMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25WUENSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25WUENSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBXb3JrRG9jcyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya0RvY3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtEb2NzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFdvcmtEb2NzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrRG9jc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtEb2NzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIFdvcmtNYWlsIEV2ZW50cyAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrTWFpbEV2ZW50c1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtNYWlsRXZlbnRzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBXb3JrTWFpbCwgRGlyZWN0b3J5IFNlcnZpY2UsIFNFUywgRUMyIGFuZCByZWFkIGFjY2VzcyB0byBLTVMgbWV0YWRhdGEuICovXG4gICAgcHVibGljIEFtYXpvbldvcmtNYWlsRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrTWFpbEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBGdWxsIGFjY2VzcyB0byB0aGUgV29ya01haWwgTWVzc2FnZSBGbG93IEFQSXMgKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya01haWxNZXNzYWdlRmxvd0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya01haWxNZXNzYWdlRmxvd0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBSZWFkIG9ubHkgYWNjZXNzIHRvIFdvcmtNYWlsIG1lc3NhZ2VzIGZvciB0aGUgR2V0UmF3TWVzc2FnZUNvbnRlbnQgQVBJICovXG4gICAgcHVibGljIEFtYXpvbldvcmtNYWlsTWVzc2FnZUZsb3dSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrTWFpbE1lc3NhZ2VGbG93UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIFdvcmtNYWlsIGFuZCBTRVMuICovXG4gICAgcHVibGljIEFtYXpvbldvcmtNYWlsUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya01haWxSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyBhZG1pbmlzdHJhdGl2ZSBhY3Rpb25zIHZpYSBBV1MgU0RLIGFuZCBDTEkuICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNBZG1pbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrU3BhY2VzQWRtaW4pO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhZG1pbmlzdHJhdG9yIGFjY2VzcyBmb3IgcGFja2FnaW5nIGFuIGFwcGxpY2F0aW9uIGluIEFtYXpvbiBXb3JrU3BhY2VzIEFwcGxpY2F0aW9uIE1hbmFnZXIuICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNBcHBsaWNhdGlvbk1hbmFnZXJBZG1pbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrU3BhY2VzQXBwbGljYXRpb25NYW5hZ2VyQWRtaW5BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIG1hbmFnZWQgcG9saWN5IHByb3ZpZGVzIGZ1bGwgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEFXUyBDZXJ0aWZpY2F0ZSBNYW5hZ2VyIFByaXZhdGUgQ0EgcmVzb3VyY2VzIGluIHlvdXIgQVdTIGFjY291bnQgZm9yIGNlcnRpZmljYXRlLWJhc2VkIGF1dGhlbnRpY2F0aW9uLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3Jrc3BhY2VzUENBQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtzcGFjZXNQQ0FBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBBV1MgV29ya1NwYWNlcyBzZXJ2aWNlIGFjY2VzcyB0byByZXF1aXJlZCBjdXN0b21lciBhY2NvdW50IHJlc291cmNlcyBmb3IgbGF1bmNoaW5nIFdvcmtzcGFjZXMgUG9vbHMgKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc1Bvb2xTZXJ2aWNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNQb29sU2VydmljZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIFdvcmtTcGFjZXMgU2VjdXJlIEJyb3dzZXIgYW5kIGl0cyBkZXBlbmRlbmNpZXMgdGhyb3VnaCB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSwgU0RLLCBhbmQgQ0xJLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrU3BhY2VzU2VjdXJlQnJvd3NlclJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNTZWN1cmVCcm93c2VyUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQW1hem9uIFdvcmtTcGFjZXMgYmFja2VuZCBzZXJ2aWNlIHRvIHBlcmZvcm0gV29ya3NwYWNlIFNlbGYgU2VydmljZSBhY3Rpb25zICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNTZWxmU2VydmljZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrU3BhY2VzU2VsZlNlcnZpY2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjdXN0b21lciBhY2NvdW50IGFjY2VzcyB0byBBV1MgV29ya1NwYWNlcyBzZXJ2aWNlIGZvciBsYXVuY2hpbmcgYSBXb3Jrc3BhY2UuICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNTZXJ2aWNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNTZXJ2aWNlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFdvcmtTcGFjZXMgVGhpbiBDbGllbnQgYXMgd2VsbCBhcyBsaW1pdGVkIGFjY2VzcyB0byByZXF1aXJlZCByZWxhdGVkIHNlcnZpY2VzICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNUaGluQ2xpZW50RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrU3BhY2VzVGhpbkNsaWVudEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIFdvcmtTcGFjZXMgVGhpbiBDbGllbnQgTW9uaXRvcmluZyAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrU3BhY2VzVGhpbkNsaWVudE1vbml0b3JpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrU3BhY2VzVGhpbkNsaWVudE1vbml0b3JpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIFdvcmtTcGFjZXMgVGhpbiBDbGllbnQgYW5kIGl0cyBkZXBlbmRlbmNpZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc1RoaW5DbGllbnRSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrU3BhY2VzVGhpbkNsaWVudFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyBXZWIgYW5kIGl0cyBkZXBlbmRlbmNpZXMgdGhyb3VnaCB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSwgU0RLLCBhbmQgQ0xJLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrU3BhY2VzV2ViUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya1NwYWNlc1dlYlJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFtYXpvbiBXb3JrU3BhY2VzIFdlYiAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrU3BhY2VzV2ViU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya1NwYWNlc1dlYlNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFpvY2Fsby4gKi9cbiAgICBwdWJsaWMgQW1hem9uWm9jYWxvRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25ab2NhbG9GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gWm9jYWxvICovXG4gICAgcHVibGljIEFtYXpvblpvY2Fsb1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblpvY2Fsb1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQW1wbGlmeSBmdWxsIGFjY2VzcyBwZXJtaXNzaW9ucyB0byBkZXBsb3kgQW1wbGlmeSBiYWNrZW5kIHJlc291cmNlcyAoQVdTIEFwcFN5bmMsIEFtYXpvbiBDb2duaXRvLCBBbWF6b24gUzMgYW5kIG90aGVyIHJlbGF0ZWQgc2VydmljZXMpIHZpYSB0aGUgQVdTIENsb3VkIERldmVsb3BtZW50IEtpdCAoQVdTIENESykgKi9cbiAgICBwdWJsaWMgQW1wbGlmeUJhY2tlbmREZXBsb3lGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtcGxpZnlCYWNrZW5kRGVwbG95RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBUEkgR2F0ZXdheSB0byBtYW5hZ2UgYXNzb2NpYXRlZCBBV1MgUmVzb3VyY2VzIG9uIGJlaGFsZiBvZiB0aGUgY3VzdG9tZXIuICovXG4gICAgcHVibGljIEFQSUdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BUElHYXRld2F5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQXBwSW50ZWdyYXRpb25zIHRvIG1hbmFnZSBBcHBGbG93IHJlc291cmNlcyBhbmQgcHVibGlzaCBDbG91ZFdhdGNoIG1ldHJpYyBkYXRhIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBcHBJbnRlZ3JhdGlvbnNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BcHBJbnRlZ3JhdGlvbnNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQXBwbGljYXRpb24gQXV0b3NjYWxpbmcgZm9yIEFtYXpvbiBBcHBTdHJlYW0gKi9cbiAgICBwdWJsaWMgQXBwbGljYXRpb25BdXRvU2NhbGluZ0ZvckFtYXpvbkFwcFN0cmVhbUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BcHBsaWNhdGlvbkF1dG9TY2FsaW5nRm9yQW1hem9uQXBwU3RyZWFtQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFwcGxpY2F0aW9uIERpc2NvdmVyeSBTZXJ2aWNlIENvbnRpbnVvdXMgRXhwb3J0IGZlYXR1cmUgKi9cbiAgICBwdWJsaWMgQXBwbGljYXRpb25EaXNjb3ZlcnlTZXJ2aWNlQ29udGludW91c0V4cG9ydFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFwcGxpY2F0aW9uRGlzY292ZXJ5U2VydmljZUNvbnRpbnVvdXNFeHBvcnRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgQXBwUnVubmVyIE5ldHdvcmtpbmcgdG8gbWFuYWdlIHJlbGF0ZWQgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQXBwUnVubmVyTmV0d29ya2luZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFwcFJ1bm5lck5ldHdvcmtpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgQXBwUnVubmVyIHRvIG1hbmFnZSByZWxhdGVkIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFwcFJ1bm5lclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFwcFJ1bm5lclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFwcFN0dWRpbyB0byBtYW5hZ2UgYXNzb2NpYXRlZCBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBcHBTdHVkaW9TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BcHBTdHVkaW9TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQW1hem9uIEF1cm9yYSBEU1FMIFNlcnZpY2UgTGlua2VkIFJvbGUgKi9cbiAgICBwdWJsaWMgQXVyb3JhRHNxbFNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkF1cm9yYURzcWxTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEF1dG8gU2NhbGluZyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEF1dG9TY2FsaW5nQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXV0b1NjYWxpbmdDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQXV0byBTY2FsaW5nIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQXV0b1NjYWxpbmdDb25zb2xlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXV0b1NjYWxpbmdDb25zb2xlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBdXRvIFNjYWxpbmcuICovXG4gICAgcHVibGljIEF1dG9TY2FsaW5nRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BdXRvU2NhbGluZ0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEF1dG9TY2FsaW5nIE5vdGlmaWNhdGlvbiBBY2Nlc3Mgc2VydmljZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBdXRvU2NhbGluZ05vdGlmaWNhdGlvbkFjY2Vzc1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXV0b1NjYWxpbmdOb3RpZmljYXRpb25BY2Nlc3NSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBdXRvIFNjYWxpbmcuICovXG4gICAgcHVibGljIEF1dG9TY2FsaW5nUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXV0b1NjYWxpbmdSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBdXRvIFNjYWxpbmcgKi9cbiAgICBwdWJsaWMgQXV0b1NjYWxpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BdXRvU2NhbGluZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIEFXUyBDb25maWcgc2VydmljZSByb2xlLiBQcm92aWRlcyBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3IgQVdTIENvbmZpZyB0byB0cmFjayBjaGFuZ2VzIHRvIHlvdXIgQVdTIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQ29uZmlnUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb25maWdSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gYWNjZXNzIHRoZSBTU00gRGlhZ25vc2lzIFMzIGJ1Y2tldCBmb3IgZGlhZ25vc2lzIGFuZCByZW1lZGlhdGlvbiBvZiBpc3N1ZXMuICovXG4gICAgcHVibGljIEFXU1NTTUF1dG9tYXRpb25EaWFnbm9zaXNCdWNrZXRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NNQXV0b21hdGlvbkRpYWdub3Npc0J1Y2tldFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgcGVybWlzc2lvbiBmb3IgRGlhZ25vc2luZyBpc3N1ZXMgd2l0aCBTU00gc2VydmljZXMgYnkgZXhlY3V0aW5nIGFjdGl2aXRpZXMgZGVmaW5lZCB3aXRoaW4gQXV0b21hdGlvbiBEb2N1bWVudHMsIHByaW1hcmlseSB1c2VkIGZvciBydW5uaW5nIHRoZSBBdXRvbWF0aW9uIGRvY3VtZW50cyBpbiBhIGNyb3NzLWFjY291bnQgY3Jvc3MtcmVnaW9uIHNldHVwIGJ5IHRyaWdnZXJpbmcgY2hpbGQgYXV0b21hdGlvbnMgd2l0aGluIG1lbWJlciBhY2NvdW50cy4gKi9cbiAgICBwdWJsaWMgQVdTU1NNRGlhZ25vc2lzQXV0b21hdGlvbkFkbWluaXN0cmF0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU01EaWFnbm9zaXNBdXRvbWF0aW9uQWRtaW5pc3RyYXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBwZXJtaXNzaW9uIGZvciBEaWFnbm9zaW5nIGlzc3VlcyB3aXRoIFNTTSBzZXJ2aWNlcyBieSBleGVjdXRpbmcgYWN0aXZpdGllcyBkZWZpbmVkIHdpdGhpbiBBdXRvbWF0aW9uIERvY3VtZW50cywgcHJpbWFyaWx5IHVzZWQgZm9yIHJ1bm5pbmcgdGhlIEF1dG9tYXRpb24gZG9jdW1lbnRzIGluIGEgdGFyZ2V0IGFjY291bnQvcmVnaW9uIHNldHVwIGJ5IGRpYWdub3NpbmcgU1NNIHNlcnZpY2UgaGVhbHRoIGFjcm9zcyBhbGwgbm9kZXMuICovXG4gICAgcHVibGljIEFXU1NTTURpYWdub3Npc0F1dG9tYXRpb25FeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTTURpYWdub3Npc0F1dG9tYXRpb25FeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIG9wZXJhdGlvbmFsIGFjY291bnRzIHRvIGRpYWdub3NlIHVubWFuYWdlZCBub2RlcyBieSBwcm92aWRpbmcgT3JnYW5pc2F0aW9uIHNwZWNpZmljIHBlcm1pc3Npb25zIHJlcXVpcmVkIGJ5IFNTTSBhdXRvbWF0aW9uIHRvIHB1bGwgdGhlIGxpc3Qgb2YgbWVtYmVyIGFjY291bnRzIHdpdGhpbiBhIHJvb3Qgb2YgYW4gT3JnYW5pc2F0aW9uIHRvIHRyaWdnZXIgY3Jvc3MtYWNjb3VudCBjcm9zcy1yZWdpb24gZXhlY3V0aW9uIGJ5IGFsbG93aW5nIGFzc3VtaW5nIEV4ZWN1dGlvbiByb2xlcyBpbiB0YXJnZXQgYWNjb3VudC9yZWdpb24uICovXG4gICAgcHVibGljIEFXU1NTTURpYWdub3Npc0F1dG9tYXRpb25PcGVyYXRpb25hbEFjY291bnRBZG1pbmlzdHJhdGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NNRGlhZ25vc2lzQXV0b21hdGlvbk9wZXJhdGlvbmFsQWNjb3VudEFkbWluaXN0cmF0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgcGVybWlzc2lvbiBmb3IgUmVtZWRpYXRpbmcgaXNzdWVzIHdpdGggU1NNIHNlcnZpY2VzIGJ5IGV4ZWN1dGluZyBhY3Rpdml0aWVzIGRlZmluZWQgd2l0aGluIEF1dG9tYXRpb24gRG9jdW1lbnRzLCBwcmltYXJpbHkgdXNlZCBmb3IgcnVubmluZyB0aGUgQXV0b21hdGlvbiBkb2N1bWVudHMgaW4gYSBjcm9zcy1hY2NvdW50IGNyb3NzLXJlZ2lvbiBzZXR1cCBieSB0cmlnZ2VyaW5nIGNoaWxkIGF1dG9tYXRpb25zIHdpdGhpbiBtZW1iZXIgYWNjb3VudHMuICovXG4gICAgcHVibGljIEFXU1NTTVJlbWVkaWF0aW9uQXV0b21hdGlvbkFkbWluaXN0cmF0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU01SZW1lZGlhdGlvbkF1dG9tYXRpb25BZG1pbmlzdHJhdGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgUmVtZWRpYXRpbmcgaXNzdWVzIHdpdGggU1NNIHNlcnZpY2VzIGJ5IGV4ZWN1dGluZyBhY3Rpdml0aWVzIGRlZmluZWQgd2l0aGluIEF1dG9tYXRpb24gRG9jdW1lbnRzLCBwcmltYXJpbHkgdXNlZCBmb3IgcnVubmluZyB0aGUgQXV0b21hdGlvbiBkb2N1bWVudHMgaW4gYSB0YXJnZXQgYWNjb3VudC9yZWdpb24gc2V0dXAgYnkgcmVtZWRpYXRpbmcgU1NNIHNlcnZpY2VzIGhlYWx0aCBhY3Jvc3MgYWxsIG5vZGVzLiAqL1xuICAgIHB1YmxpYyBBV1NTU01SZW1lZGlhdGlvbkF1dG9tYXRpb25FeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTTVJlbWVkaWF0aW9uQXV0b21hdGlvbkV4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3Igb3BlcmF0aW9uYWwgYWNjb3VudHMgdG8gUmVtZWRpYXRlIHVubWFuYWdlZCBub2RlcyBieSBwcm92aWRpbmcgT3JnYW5pc2F0aW9uIHNwZWNpZmljIHBlcm1pc3Npb25zIHJlcXVpcmVkIGJ5IFNTTSBhdXRvbWF0aW9uIHRvIHB1bGwgdGhlIGxpc3Qgb2YgbWVtYmVyIGFjY291bnRzIHdpdGhpbiBhIHJvb3Qgb2YgYW4gT3JnYW5pc2F0aW9uIHRvIHRyaWdnZXIgY3Jvc3MtYWNjb3VudCBjcm9zcy1yZWdpb24gZXhlY3V0aW9uIGJ5IGFsbG93aW5nIGFzc3VtaW5nIEV4ZWN1dGlvbiByb2xlcyBpbiB0YXJnZXQgYWNjb3VudC9yZWdpb24uICovXG4gICAgcHVibGljIEFXU1NTTVJlbWVkaWF0aW9uQXV0b21hdGlvbk9wZXJhdGlvbmFsQWNjb3VudEFkbWluaXN0cmF0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU01SZW1lZGlhdGlvbkF1dG9tYXRpb25PcGVyYXRpb25hbEFjY291bnRBZG1pbmlzdHJhdGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdXNlcnMgdG8gYWNjZXNzIHRoZSBBY2NvdW50IEFjdGl2aXR5IHBhZ2UuICovXG4gICAgcHVibGljIEFXU0FjY291bnRBY3Rpdml0eUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBY2NvdW50QWN0aXZpdHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgQWNjb3VudCBNYW5hZ2VtZW50LiAqL1xuICAgIHB1YmxpYyBBV1NBY2NvdW50TWFuYWdlbWVudEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQWNjb3VudE1hbmFnZW1lbnRGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgQWNjb3VudCBNYW5hZ2VtZW50ICovXG4gICAgcHVibGljIEFXU0FjY291bnRNYW5hZ2VtZW50UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQWNjb3VudE1hbmFnZW1lbnRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB1c2VycyB0byBhY2Nlc3MgdGhlIEFjY291bnQgVXNhZ2UgUmVwb3J0IHBhZ2UuICovXG4gICAgcHVibGljIEFXU0FjY291bnRVc2FnZVJlcG9ydEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBY2NvdW50VXNhZ2VSZXBvcnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgZm9yIHRoZSBEaXNjb3ZlcnkgQWdlbnRsZXNzIENvbm5lY3RvciB0byByZWdpc3RlciB3aXRoIEFXUyBBcHBsaWNhdGlvbiBEaXNjb3ZlcnkgU2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTQWdlbnRsZXNzRGlzY292ZXJ5U2VydmljZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBZ2VudGxlc3NEaXNjb3ZlcnlTZXJ2aWNlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFXUyBBcHBGYWJyaWMgc2VydmljZSBhbmQgcmVhZCBvbmx5IGFjY2VzcyB0byBkZXBlbmRlbnQgc2VydmljZXMgc3VjaCBhcyBTMywgS2luZXNpcywgS01TLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBGYWJyaWNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcEZhYnJpY0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBBV1MgQXBwRmFicmljICovXG4gICAgcHVibGljIEFXU0FwcEZhYnJpY1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcEZhYnJpY1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQXBwRmFicmljIGFjY2VzcyB0byBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFXU0FwcEZhYnJpY1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcEZhYnJpY1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgQXBwU3RyZWFtIGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nQXBwU3RyZWFtRmxlZXRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0FwcFN0cmVhbUZsZWV0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgQ2Fzc2FuZHJhIGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nQ2Fzc2FuZHJhVGFibGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0Nhc3NhbmRyYVRhYmxlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgQ29tcHJlaGVuZCBhbmQgQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0NvbXByZWhlbmRFbmRwb2ludFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nQ29tcHJlaGVuZEVuZHBvaW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgQVBJR2F0ZXdheSBhbmQgQ2xvdWRXYXRjaCBmb3IgY3VzdG9tIHJlc291cmNlIHNjYWxpbmcgKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25BdXRvU2NhbGluZ0N1c3RvbVJlc291cmNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b1NjYWxpbmdDdXN0b21SZXNvdXJjZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIER5bmFtb0RCIGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRHluYW1vREJUYWJsZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRHluYW1vREJUYWJsZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIEVDMiBTcG90IEZsZWV0IGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRUMyU3BvdEZsZWV0UmVxdWVzdFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRUMyU3BvdEZsZWV0UmVxdWVzdFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIEVDMiBDb250YWluZXIgU2VydmljZSBhbmQgQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0VDU1NlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0VDU1NlcnZpY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBBbWF6b24gRWxhc3RpQ2FjaGUgYW5kIEFtYXpvbiBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRWxhc3RpQ2FjaGVSR1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRWxhc3RpQ2FjaGVSR1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIEVsYXN0aWMgTWFwIFJlZHVjZSBhbmQgQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0VNUkluc3RhbmNlR3JvdXBQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0VNUkluc3RhbmNlR3JvdXBQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBNYW5hZ2VkIFN0cmVhbWluZyBmb3IgQXBhY2hlIEthZmthIGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nS2Fma2FDbHVzdGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdLYWZrYUNsdXN0ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBMYW1iZGEgYW5kIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdMYW1iZGFDb25jdXJyZW5jeVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nTGFtYmRhQ29uY3VycmVuY3lQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBBbWF6b24gTmVwdHVuZSBhbmQgQW1hem9uIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdOZXB0dW5lQ2x1c3RlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nTmVwdHVuZUNsdXN0ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBSRFMgYW5kIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdSRFNDbHVzdGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdSRFNDbHVzdGVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgU2FnZU1ha2VyIGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nU2FnZU1ha2VyRW5kcG9pbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ1NhZ2VNYWtlckVuZHBvaW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgQW1hem9uIFdvcmtTcGFjZXMgYW5kIEFtYXpvbiBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nV29ya1NwYWNlc1Bvb2xQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ1dvcmtTcGFjZXNQb29sUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIGZvciB0aGUgRGlzY292ZXJ5IEFnZW50IHRvIHJlZ2lzdGVyIHdpdGggQVdTIEFwcGxpY2F0aW9uIERpc2NvdmVyeSBTZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkRpc2NvdmVyeUFnZW50QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uRGlzY292ZXJ5QWdlbnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQXBwbGljYXRpb24gRGlzY292ZXJ5IFNlcnZpY2UgQWdlbnRsZXNzIENvbGxlY3RvcnMgdG8gYXV0byB1cGRhdGUsIHJlZ2lzdGVyLCBhbmQgY29tbXVuaWNhdGUgd2l0aCBBcHBsaWNhdGlvbiBEaXNjb3ZlcnkgU2VydmljZSAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkRpc2NvdmVyeUFnZW50bGVzc0NvbGxlY3RvckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkRpc2NvdmVyeUFnZW50bGVzc0NvbGxlY3RvckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHZpZXcgYW5kIHRhZyBDb25maWd1cmF0aW9uIEl0ZW1zIG1haW50YWluZWQgYnkgdGhlIEFXUyBBcHBsaWNhdGlvbiBEaXNjb3ZlcnkgU2VydmljZSAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkRpc2NvdmVyeVNlcnZpY2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uRGlzY292ZXJ5U2VydmljZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgaW5zdGFsbGluZyB0aGUgQVdTIFJlcGxpY2F0aW9uIEFnZW50LCB3aGljaCBpcyB1c2VkIHdpdGggQVdTIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChNR04pIHRvIG1pZ3JhdGUgZXh0ZXJuYWwgc2VydmVycyB0byBBV1MuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcyB3aG9zZSBjcmVkZW50aWFscyB5b3UgcHJvdmlkZSB3aGVuIGluc3RhbGxpbmcgdGhlIEFXUyBSZXBsaWNhdGlvbiBBZ2VudC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25BZ2VudEluc3RhbGxhdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkFnZW50SW5zdGFsbGF0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIGluc3RhbGxpbmcgYW5kIHVzaW5nIHRoZSBBV1MgUmVwbGljYXRpb24gQWdlbnQsIHdoaWNoIGlzIHVzZWQgd2l0aCBBV1MgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgKE1HTikgdG8gbWlncmF0ZSBleHRlcm5hbCBzZXJ2ZXJzIHRvIEFXUy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzIHdob3NlIGNyZWRlbnRpYWxzIHlvdSBwcm92aWRlIHdoZW4gaW5zdGFsbGluZyB0aGUgQVdTIFJlcGxpY2F0aW9uIEFnZW50LiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkFnZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uQWdlbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgdXNpbmcgdGhlIEFXUyBSZXBsaWNhdGlvbiBBZ2VudCwgd2hpY2ggaXMgdXNlZCB3aXRoIEFXUyBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSAoTUdOKSB0byBtaWdyYXRlIGV4dGVybmFsIHNlcnZlcnMgdG8gQVdTLiBXZSBkbyBub3QgcmVjb21tZW5kIHRoYXQgeW91IGF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25BZ2VudFBvbGljeVYyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uQWdlbnRQb2xpY3lWMik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyB0aGUgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgKE1HTikgQ29udmVyc2lvbiBTZXJ2ZXIsIHdoaWNoIGFyZSBFQzIgaW5zdGFuY2VzIGxhdW5jaGVkIGJ5IEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlLCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBNR04gc2VydmljZS4gQW4gSUFNIHJvbGUgd2l0aCB0aGlzIHBvbGljeSBpcyBhdHRhY2hlZCAoYXMgYW4gRUMyIEluc3RhbmNlIFByb2ZpbGUpIGJ5IE1HTiB0byB0aGUgTUdOIENvbnZlcnNpb24gU2VydmVycywgd2hpY2ggYXJlIGF1dG9tYXRpY2FsbHkgbGF1bmNoZWQgYW5kIHRlcm1pbmF0ZWQgYnkgTUdOLCB3aGVuIG5lZWRlZC4gV2UgZG8gbm90IHJlY29tbWVuZCB0aGF0IHlvdSBhdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuIE1HTiBDb252ZXJzaW9uIFNlcnZlcnMgYXJlIHVzZWQgYnkgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2Ugd2hlbiB1c2VycyBjaG9vc2UgdG8gbGF1bmNoIFRlc3Qgb3IgQ3V0b3ZlciBpbnN0YW5jZXMgdXNpbmcgdGhlIE1HTiBjb25zb2xlLCBDTEksIG9yIEFQSS4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25Db252ZXJzaW9uU2VydmVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uQ29udmVyc2lvblNlcnZlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIEFtYXpvbiBFQzIgb3BlcmF0aW9ucyByZXF1aXJlZCB0byB1c2UgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgKE1HTikgdG8gbGF1bmNoIHRoZSBtaWdyYXRlZCBzZXJ2ZXJzIGFzIEVDMiBpbnN0YW5jZXMuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25FQzJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25FQzJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBwZXJtaXNzaW9ucyB0byBhbGwgcHVibGljIEFQSXMgb2YgQVdTIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChNR04pLCBhcyB3ZWxsIGFzIHBlcm1pc3Npb25zIHRvIHJlYWQgS01TIGtleSBpbmZvcm1hdGlvbi4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIEFXUyBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSAoTUdOKSB0byBzZW5kIG1ldGEtZGF0YSBhYm91dCB0aGUgcHJvZ3Jlc3Mgb2Ygc2VydmVycyBiZWluZyBtaWdyYXRlZCB1c2luZyBNR04gdG8gQVdTIE1pZ3JhdGlvbiBIdWIgKE1HSCkuIE1HTiBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgYW4gSUFNIHJvbGUgd2l0aCB0aGlzIHBvbGljeSBhdHRhY2hlZCwgYW5kIGFzc3VtZXMgdGhpcyByb2xlLiBXZSBkbyBub3QgcmVjb21tZW5kIHRoYXQgeW91IGF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25NR0hBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25NR0hBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgTmV0d29yayBNaWdyYXRpb24gY3VzdG9tIHJlc291cmNlICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uTmV0d29ya01pZ3JhdGlvbkN1c3RvbVJlc291cmNlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uTmV0d29ya01pZ3JhdGlvbkN1c3RvbVJlc291cmNlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gYXV0b21hdGUgVk13YXJlIHRvIEFXUyBuZXR3b3JrIGluZnJhc3RydWN0dXJlIG1pZ3JhdGlvbiB0aHJvdWdoIENsb3VkRm9ybWF0aW9uICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uTmV0d29ya01pZ3JhdGlvbk11bHRpQWNjb3VudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbk5ldHdvcmtNaWdyYXRpb25NdWx0aUFjY291bnQpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBwZXJtaXNzaW9ucyB0byBhbGwgcmVhZC1vbmx5IHB1YmxpYyBBUElzIG9mIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChNR04pLCBhcyB3ZWxsIGFzIHNvbWUgcmVhZC1vbmx5IEFQSXMgb2Ygb3RoZXIgQVdTIHNlcnZpY2VzIHRoYXQgYXJlIHJlcXVpcmVkIGluIG9yZGVyIHRvIG1ha2UgZnVsbCByZWFkLW9ubHkgdXNlIG9mIHRoZSBNR04gY29uc29sZS4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvblJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgdGhlIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChNR04pIFJlcGxpY2F0aW9uIFNlcnZlcnMsIHdoaWNoIGFyZSBFQzIgaW5zdGFuY2VzIGxhdW5jaGVkIGJ5IEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIC0gdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgTUdOIHNlcnZpY2UsIGFuZCB0byBjcmVhdGUgRUJTIHNuYXBzaG90cyBpbiB5b3VyIEFXUyBhY2NvdW50LiBBbiBJQU0gcm9sZSB3aXRoIHRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIChhcyBhbiBFQzIgSW5zdGFuY2UgUHJvZmlsZSkgYnkgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgdG8gdGhlIE1HTiBSZXBsaWNhdGlvbiBTZXJ2ZXJzIHdoaWNoIGFyZSBhdXRvbWF0aWNhbGx5IGxhdW5jaGVkIGFuZCB0ZXJtaW5hdGVkIGJ5IE1HTiwgYXMgbmVlZGVkLiBNR04gUmVwbGljYXRpb24gU2VydmVycyBhcmUgdXNlZCB0byBmYWNpbGl0YXRlIGRhdGEgcmVwbGljYXRpb24gZnJvbSB5b3VyIGV4dGVybmFsIHNlcnZlcnMgdG8gQVdTLCBhcyBwYXJ0IG9mIHRoZSBtaWdyYXRpb24gcHJvY2VzcyBtYW5hZ2VkIHVzaW5nIE1HTi4gV2UgZG8gbm90IHJlY29tbWVuZCB0aGF0IHlvdSBhdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uUmVwbGljYXRpb25TZXJ2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25SZXBsaWNhdGlvblNlcnZlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBpbnN0YWxsaW5nIGFuZCB1c2luZyB0aGUgQVdTIFJlcGxpY2F0aW9uIEFnZW50LCB3aGljaCBpcyB1c2VkIGJ5IEFXUyBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSAoQVdTIE1HTikgdG8gbWlncmF0ZSBzb3VyY2Ugc2VydmVycyB0aGF0IHJ1biBvbiBFQzIgKGNyb3NzLVJlZ2lvbiBvciBjcm9zcy1BWikuIEFuIElBTSByb2xlIHdpdGggdGhpcyBwb2xpY3kgc2hvdWxkIGJlIGF0dGFjaGVkIChhcyBhbiBFQzIgSW5zdGFuY2UgUHJvZmlsZSkgdG8gdGhlIEVDMiBJbnN0YW5jZXMuICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uU2VydmljZUVjMkluc3RhbmNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uU2VydmljZUVjMkluc3RhbmNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBhcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSB0byBjcmVhdGUgYW5kIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBhY2Nlc3MgdG8gQW1hem9uIFNTTSBvcGVyYXRpb25zIHJlcXVpcmVkIHRvIHVzZSBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSAoTUdOKSB0byBleGVjdXRlIGN1c3RvbSBwb3N0IG1pZ3JhdGlvbiBjb21tYW5kIFNTTSBkb2N1bWVudHMuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25TU01BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25TU01BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgaW5zdGFsbGluZyBhbmQgdXNpbmcgdGhlIEFXUyBWQ2VudGVyIENsaWVudCwgd2hpY2ggaXMgdXNlZCB3aXRoIEFXUyBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSAoTUdOKSB0byBtaWdyYXRlIGV4dGVybmFsIHNlcnZlcnMgdG8gQVdTLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMgd2hvc2UgY3JlZGVudGlhbHMgeW91IHByb3ZpZGUgd2hlbiBpbnN0YWxsaW5nIHRoZSBBV1MgVkNlbnRlciBDbGllbnQuICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uVkNlbnRlckNsaWVudFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvblZDZW50ZXJDbGllbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBcHAgTWVzaCBFbnZveSBwb2xpY3kgZm9yIGFjY2Vzc2luZyBWaXJ0dWFsIE5vZGUgY29uZmlndXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTQXBwTWVzaEVudm95QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcE1lc2hFbnZveUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgQXBwIE1lc2ggQVBJcyBhbmQgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBNZXNoRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBNZXNoRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFwcCBNZXNoIFByZXZpZXcgRW52b3kgcG9saWN5IGZvciBhY2Nlc3NpbmcgVmlydHVhbCBOb2RlIGNvbmZpZ3VyYXRpb24uICovXG4gICAgcHVibGljIEFXU0FwcE1lc2hQcmV2aWV3RW52b3lBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwTWVzaFByZXZpZXdFbnZveUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBV1MgQXBwIE1lc2ggKi9cbiAgICBwdWJsaWMgQVdTQXBwTWVzaFByZXZpZXdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBNZXNoUHJldmlld1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgQVdTIEFwcCBNZXNoIEFQSXMgYW5kIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTQXBwTWVzaFJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcE1lc2hSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBV1MgQXBwTWVzaCAqL1xuICAgIHB1YmxpYyBBV1NBcHBNZXNoU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwTWVzaFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIGFsbCBBcHAgUnVubmVyIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0FwcFJ1bm5lckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwUnVubmVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBsaXN0IGFuZCB2aWV3IGRldGFpbHMgYWJvdXQgQXBwIFJ1bm5lciByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0FwcFJ1bm5lclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcFJ1bm5lclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQVdTIEFwcCBSdW5uZXIgc2VydmljZSBwb2xpY3kgdGhhdCBncmFudHMgcmVhZCBwZXJtaXNzaW9ucyB0byBBbWF6b24gRUNSIHJlc291cmNlcyBpbiB0aGUgY3VzdG9tZXIncyBhY2NvdW50LiBVc2UgaXQgaW4gYSByb2xlIHRoYXQgaXMgcGFzc2VkIHRvIEFwcCBSdW5uZXIgd2hlbiBjcmVhdGluZyBvciB1cGRhdGluZyBhbiBBcHAgUnVubmVyIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU0FwcFJ1bm5lclNlcnZpY2VQb2xpY3lGb3JFQ1JBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwUnVubmVyU2VydmljZVBvbGljeUZvckVDUkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byB0aGUgQXBwU3luYyBzZXJ2aWNlLCB0aG91Z2ggbm90IGVub3VnaCB0byBhY2Nlc3MgdmlhIHRoZSBjb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBTeW5jQWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBTeW5jQWRtaW5pc3RyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgaW52b2tpbmcgYWNjZXNzIHRvIHRoZSBBcHBTeW5jIHNlcnZpY2UgLSBib3RoIHRocm91Z2ggdGhlIGNvbnNvbGUgYW5kIGluZGVwZW5kZW50bHkgKi9cbiAgICBwdWJsaWMgQVdTQXBwU3luY0ludm9rZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwU3luY0ludm9rZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQXBwU3luYyB0byBwdXNoIGxvZ3MgdG8gdXNlcidzIENsb3VkV2F0Y2ggYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwU3luY1B1c2hUb0Nsb3VkV2F0Y2hMb2dzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcFN5bmNQdXNoVG9DbG91ZFdhdGNoTG9ncyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBjcmVhdGUsIHVwZGF0ZSwgYW5kIHF1ZXJ5IHRoZSBzY2hlbWEuICovXG4gICAgcHVibGljIEFXU0FwcFN5bmNTY2hlbWFBdXRob3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwU3luY1NjaGVtYUF1dGhvcik7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBcHBTeW5jICovXG4gICAgcHVibGljIEFXU0FwcFN5bmNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBTeW5jU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIEFydGlmYWN0IHJlYWQtb25seSBhY2Nlc3MgdG8gb3BlcmF0aW9ucyBpbiBBV1MgT3JnYW5pemF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTQXJ0aWZhY3RBY2NvdW50U3luYygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcnRpZmFjdEFjY291bnRTeW5jKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGZ1bGwgcGVybWlzc2lvbnMgdG8gbGlzdCwgZG93bmxvYWQsIGFjY2VwdCwgYW5kIHRlcm1pbmF0ZSBBV1MgQXJ0aWZhY3QgYWdyZWVtZW50cy4gSXQgYWxzbyBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBsaXN0IGFuZCBlbmFibGUgQVdTIHNlcnZpY2UgYWNjZXNzIGluIHRoZSBPcmdhbml6YXRpb24gc2VydmljZSwgYXMgd2VsbCBhcyBkZXNjcmliZSB0aGUgb3JnYW5pemF0aW9uIGRldGFpbHMuIEFkZGl0aW9uYWxseSwgdGhlIHBvbGljeSBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBjaGVjayBpZiB0aGUgcmVxdWlyZWQgc2VydmljZS1saW5rZWQgcm9sZSBleGlzdHMgYW5kIGNyZWF0ZXMgb25lIGlmIGl0IGRvZXNuJ3QgKi9cbiAgICBwdWJsaWMgQVdTQXJ0aWZhY3RBZ3JlZW1lbnRzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcnRpZmFjdEFncmVlbWVudHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHJlYWQtb25seSBhY2Nlc3MgdG8gbGlzdCB0aGUgQVdTIEFydGlmYWN0IHNlcnZpY2UgYWdyZWVtZW50cyBhbmQgdG8gZG93bmxvYWQgdGhlIGFjY2VwdGVkIGFncmVlbWVudHMuLiBJdCBhbHNvIGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIGxpc3QgYXMgd2VsbCBhcyBkZXNjcmliZSB0aGUgb3JnYW5pemF0aW9uIGRldGFpbHMuIEFkZGl0aW9uYWxseSwgdGhlIHBvbGljeSBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBjaGVjayBpZiB0aGUgcmVxdWlyZWQgc2VydmljZS1saW5rZWQgcm9sZSBleGlzdHMuICovXG4gICAgcHVibGljIEFXU0FydGlmYWN0QWdyZWVtZW50c1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FydGlmYWN0QWdyZWVtZW50c1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgQVdTIEFydGlmYWN0IHNlcnZpY2UgcmVwb3J0cy4gKi9cbiAgICBwdWJsaWMgQVdTQXJ0aWZhY3RSZXBvcnRzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXJ0aWZhY3RSZXBvcnRzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIEFydGlmYWN0IHRvIGdhdGhlciBpbmZvcm1hdGlvbiBhYm91dCBhbiBvcmdhbml6YXRpb24gdmlhIEFXUyBPcmdhbml6YXRpb25zIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU0FydGlmYWN0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXJ0aWZhY3RTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBlbmFibGUgb3IgZGlzYWJsZSBBV1MgQXVkaXQgTWFuYWdlciwgdXBkYXRlIHNldHRpbmdzLCBhbmQgbWFuYWdlIGFzc2Vzc21lbnRzLCBjb250cm9scywgYW5kIGZyYW1ld29ya3MgKi9cbiAgICBwdWJsaWMgQVdTQXVkaXRNYW5hZ2VyQWRtaW5pc3RyYXRvckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBdWRpdE1hbmFnZXJBZG1pbmlzdHJhdG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFXUyBBdWRpdCBNYW5hZ2VyICovXG4gICAgcHVibGljIEFXU0F1ZGl0TWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0F1ZGl0TWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFXUyBBdXRvIFNjYWxpbmcgdG8gcGVyaW9kaWNhbGx5IGZvcmVjYXN0IGNhcGFjaXR5IGFuZCBnZW5lcmF0ZSBzY2hlZHVsZWQgc2NhbGluZyBhY3Rpb25zIGZvciBBdXRvIFNjYWxpbmcgZ3JvdXBzIGluIGEgc2NhbGluZyBwbGFuICovXG4gICAgcHVibGljIEFXU0F1dG9TY2FsaW5nUGxhbnNFQzJBdXRvU2NhbGluZ1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBdXRvU2NhbGluZ1BsYW5zRUMyQXV0b1NjYWxpbmdQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgZm9yIHVzZXJzIHRvIGNyZWF0ZSBjb250cm9scyBhbmQgZnJhbWV3b3JrcyB0aGF0IGRlZmluZSB0aGVpciBleHBlY3RhdGlvbnMgZm9yIEFXUyBCYWNrdXAgcmVzb3VyY2VzIGFuZCBhY3Rpdml0aWVzLCBhbmQgdG8gYXVkaXQgQVdTIEJhY2t1cCByZXNvdXJjZXMgYW5kIGFjdGl2aXRpZXMgYWdhaW5zdCB0aGVpciBkZWZpbmVkIGNvbnRyb2xzIGFuZCBmcmFtZXdvcmtzLiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gQVdTIENvbmZpZyBhbmQgc2ltaWxhciBzZXJ2aWNlcyB0byBkZXNjcmliZSB1c2VyIGV4cGVjdGF0aW9ucyBwZXJmb3JtIHRoZSBhdWRpdHMuIFRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIHBlcm1pc3Npb25zIHRvIGRlbGl2ZXIgYXVkaXQgcmVwb3J0cyB0byBTMyBhbmQgc2ltaWxhciBzZXJ2aWNlcywgYW5kIGVuYWJsZXMgdXNlcnMgdG8gZmluZCBhbmQgb3BlbiB0aGVpciBhdWRpdCByZXBvcnRzLiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBBdWRpdEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBBdWRpdEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyB0aGUgQVdTIEJhY2tpbnQgYWdlbnQgdG8gY29tcGxldGUgYmFja3VwIGRhdGEgdHJhbnNmZXIgd2l0aCBBV1MgQmFja3VwIFN0b3JhZ2UgcGxhbmUuIEF0dGFjaCB0aGlzIHBvbGljeSB0byByb2xlcyBhc3N1bWVkIGJ5IEVDMiBJbnN0YW5jZXMgcnVubmluZyBTQVAgSEFOQSB3aXRoIHRoZSBCYWNraW50IGFnZW50LiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBEYXRhVHJhbnNmZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwRGF0YVRyYW5zZmVyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgZm9yIGJhY2t1cCBhZG1pbmlzdHJhdG9ycywgZ3JhbnRpbmcgZnVsbCBhY2Nlc3MgdG8gQVdTIEJhY2t1cCBvcGVyYXRpb25zLCBpbmNsdWRpbmcgY3JlYXRpbmcgb3IgZWRpdGluZyBiYWNrdXAgcGxhbnMsIGFzc2lnbmluZyBBV1MgcmVzb3VyY2VzIHRvIGJhY2t1cCBwbGFucywgZGVsZXRpbmcgYmFja3VwcywgYW5kIHJlc3RvcmluZyBiYWNrdXBzLiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBV1MgQmFja3VwR2F0ZXdheSBwZXJtaXNzaW9uIHRvIHN5bmMgdGhlIG1ldGFkYXRhIG9mIFZpcnR1YWwgTWFjaGluZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwR2F0ZXdheVNlcnZpY2VSb2xlUG9saWN5Rm9yVmlydHVhbE1hY2hpbmVNZXRhZGF0YVN5bmMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwR2F0ZXdheVNlcnZpY2VSb2xlUG9saWN5Rm9yVmlydHVhbE1hY2hpbmVNZXRhZGF0YVN5bmMpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgdXNlcnMgcGVybWlzc2lvbnMgdG8gYXNzaWduIEFXUyByZXNvdXJjZXMgdG8gYmFja3VwIHBsYW5zLCBjcmVhdGUgb24tZGVtYW5kIGJhY2t1cHMsIGFuZCByZXN0b3JlIGJhY2t1cHMuIFRoaXMgcG9saWN5IGRvZXMgbm90IGFsbG93IHRoZSB1c2VyIHRvIGNyZWF0ZSBvciBlZGl0IGJhY2t1cCBwbGFucyBvciB0byBkZWxldGUgc2NoZWR1bGVkIGJhY2t1cHMgYWZ0ZXIgdGhleSBhcmUgY3JlYXRlZC4gKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwT3BlcmF0b3JBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwT3BlcmF0b3JBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBmb3IgYmFja3VwIGFkbWluaXN0YXRvcnMgd2hvIHVzZSBjcm9zcy1hY2NvdW50IGJhY2t1cCBtYW5hZ2VtZW50IHRvIG1hbmFnZSBiYWNrdXBzIGZvciB0aGUgb3JnYW5pemF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBPcmdhbml6YXRpb25BZG1pbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBPcmdhbml6YXRpb25BZG1pbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBCYWNrdXAgcGVybWlzc2lvbiB0byByZXN0b3JlIGEgYmFja3VwIG9mIFNBUCBIQU5BIG9uIEFtYXpvbiBFQzIgKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwUmVzdG9yZUFjY2Vzc0ZvclNBUEhBTkEoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwUmVzdG9yZUFjY2Vzc0ZvclNBUEhBTkEpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgc2VhcmNoIG9wZXJhdG9yIHJvbGUgaGFzIGFjY2VzcyB0byBjcmVhdGUgYmFja3VwIGluZGV4ZXMsIGNyZWF0ZSBzZWFyY2hlcyBvZiBiYWNrdXAgbWV0YWRhdGEgdGhhdCBoYXMgYmVlbiBpbmRleGVkLiBUaGlzIHBvbGljeSBjb250YWlucyB0aGUgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIGZvciB0aGVzZSBzZWFyY2ggb3BlcmF0b3IgZnVuY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBTZWFyY2hPcGVyYXRvckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBTZWFyY2hPcGVyYXRvckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBCYWNrdXAgcGVybWlzc2lvbiB0byBjcmVhdGUgYmFja3VwcyBvbiB5b3VyIGJlaGFsZiBhY3Jvc3MgQVdTIHNlcnZpY2VzICovXG4gICAgcHVibGljIEFXU0JhY2t1cFNlcnZpY2VMaW5rZWRSb2xlUG9saWN5Rm9yQmFja3VwKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cFNlcnZpY2VMaW5rZWRSb2xlUG9saWN5Rm9yQmFja3VwKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQVdTIEJhY2t1cCBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBiYWNrdXBzIG9uIHlvdXIgYmVoYWxmIGFjcm9zcyBBV1Mgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwU2VydmljZUxpbmtlZFJvbGVQb2xpY3lGb3JCYWNrdXBUZXN0KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cFNlcnZpY2VMaW5rZWRSb2xlUG9saWN5Rm9yQmFja3VwVGVzdCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBCYWNrdXAgcGVybWlzc2lvbiB0byBjcmVhdGUgYmFja3VwcyBvbiB5b3VyIGJlaGFsZiBhY3Jvc3MgQVdTIHNlcnZpY2VzICovXG4gICAgcHVibGljIEFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yQmFja3VwKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yQmFja3VwKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGNvbnRhaW5pbmcgcGVybWlzc2lvbnMgbmVjZXNzYXJ5IGZvciBBV1MgQmFja3VwIHRvIGluZGV4IHJlY292ZXJ5IHBvaW50cy4gKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JJbmRleGluZygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvckluZGV4aW5nKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGNvbnRhaW5pbmcgcGVybWlzc2lvbnMgbmVjZXNzYXJ5IGZvciBBV1MgQmFja3VwIHRvIHJlc3RvcmUgaW5kaXZpZHVhbCBpdGVtcyBpbiBhIHJlY292ZXJ5IHBvaW50ICovXG4gICAgcHVibGljIEFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9ySXRlbVJlc3RvcmVzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9ySXRlbVJlc3RvcmVzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQVdTIEJhY2t1cCBwZXJtaXNzaW9uIHRvIHBlcmZvcm0gcmVzdG9yZXMgb24geW91ciBiZWhhbGYgYWNyb3NzIEFXUyBzZXJ2aWNlcy4gVGhpcyBwb2xpY3kgaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gY3JlYXRlIGFuZCBkZWxldGUgQVdTIHJlc291cmNlcywgc3VjaCBhcyBFQlMgdm9sdW1lcywgUkRTIGluc3RhbmNlcywgYW5kIEVGUyBmaWxlIHN5c3RlbXMsIHdoaWNoIGFyZSBwYXJ0IG9mIHRoZSByZXN0b3JlIHByb2Nlc3MuICovXG4gICAgcHVibGljIEFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yUmVzdG9yZXMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JSZXN0b3Jlcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBjb250YWluaW5nIHBlcm1pc3Npb25zIG5lY2Vzc2FyeSBmb3IgQVdTIEJhY2t1cCB0byBiYWNrdXAgZGF0YSBpbiBhbnkgUzMgYnVja2V0LiBUaGlzIGluY2x1ZGVzIHJlYWQgYWNjZXNzIHRvIGFsbCBTMyBvYmplY3RzIGFuZCBhbnkgZGVjcnlwdCBhY2Nlc3MgZm9yIGFsbCBLTVMga2V5cy4gKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JTM0JhY2t1cCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvclMzQmFja3VwKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGNvbnRhaW5pbmcgcGVybWlzc2lvbnMgbmVjZXNzYXJ5IGZvciBBV1MgQmFja3VwIHRvIHJlc3RvcmUgYSBTMyBiYWNrdXAgdG8gYSBidWNrZXQuIFRoaXMgaW5jbHVkZXMgcmVhZC93cml0ZSBwZXJtaXNzaW9ucyB0byBhbGwgUzMgYnVja2V0cywgYW5kIHBlcm1pc3Npb25zIHRvIEdlbmVyYXRlRGF0YUtleSBhbmQgRGVzY3JpYmVLZXkgZm9yIGFsbCBLTVMga2V5cy4gKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JTM1Jlc3RvcmUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JTM1Jlc3RvcmUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyBmb3IgQVdTIEJhdGNoIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQmF0Y2hGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhdGNoRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQ2xvdWRXYXRjaCBFdmVudCBUYXJnZXQgZm9yIEFXUyBCYXRjaCBKb2IgU3VibWlzc2lvbiAqL1xuICAgIHB1YmxpYyBBV1NCYXRjaFNlcnZpY2VFdmVudFRhcmdldFJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmF0Y2hTZXJ2aWNlRXZlbnRUYXJnZXRSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBBV1MgQmF0Y2ggc2VydmljZSByb2xlIHdoaWNoIGFsbG93cyBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgRUMyLCBBdXRvc2NhbGluZywgRUMyIENvbnRhaW5lciBzZXJ2aWNlIGFuZCBDbG91ZHdhdGNoIExvZ3MuICovXG4gICAgcHVibGljIEFXU0JhdGNoU2VydmljZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmF0Y2hTZXJ2aWNlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyBmb3IgQVdTIEJhdGNoIHRvIHF1ZXVlIGFuZCBtYW5hZ2UgQW1hem9uIFNhZ2VNYWtlciB3b3JrbG9hZHMgKi9cbiAgICBwdWJsaWMgQVdTQmF0Y2hTZXJ2aWNlUm9sZVBvbGljeUZvclNhZ2VNYWtlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYXRjaFNlcnZpY2VSb2xlUG9saWN5Rm9yU2FnZU1ha2VyKTtcbiAgICB9XG5cbiAgICAvKiogQSBzZXJ2aWNlIGxpbmtlZCByb2xlIHRvIHByb3ZpZGUgQmlsbGluZyBhbmQgQ29zdCBNYW5hZ2VtZW50IERhdGEgRXhwb3J0cyBhY2Nlc3MgdG8gQVdTIHNlcnZpY2UgZGF0YSBmb3IgZXhwb3J0aW5nIHRoZSBkYXRhIHRvIGEgdGFyZ2V0IGxvY2F0aW9uLCBzdWNoIGFzIEFtYXpvbiBTMywgb24gYmVoYWxmIG9mIGEgY3VzdG9tZXIuICovXG4gICAgcHVibGljIEFXU0JDTURhdGFFeHBvcnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQkNNRGF0YUV4cG9ydHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFVzZSB0aGUgQVdTQmlsbGluZ0NvbmR1Y3RvckZ1bGxBY2Nlc3MgbWFuYWdlZCBwb2xpY3kgdG8gYWxsb3cgY29tcGxldGUgYWNjZXNzIHRvIEFXUyBCaWxsaW5nIENvbmR1Y3RvciAoQUJDKSBjb25zb2xlIGFuZCBBUElzLiBUaGlzIHBvbGljeSBhbGxvd3MgdXNlcnMgdG8gbGlzdCwgY3JlYXRlIGFuZCBkZWxldGUgQUJDIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQmlsbGluZ0NvbmR1Y3RvckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmlsbGluZ0NvbmR1Y3RvckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBVc2UgdGhlIEFXU0JpbGxpbmdDb25kdWN0b3JSZWFkT25seUFjY2VzcyBtYW5hZ2VkIHBvbGljeSB0byBhbGxvdyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBCaWxsaW5nIENvbmR1Y3RvciAoQUJDKSBjb25zb2xlIGFuZCBBUElzLiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbiB0byB2aWV3IGFuZCBsaXN0IGFsbCBBQkMgcmVzb3VyY2VzLiBJdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBvciBkZWxldGUgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NCaWxsaW5nQ29uZHVjdG9yUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmlsbGluZ0NvbmR1Y3RvclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHVzZXJzIHRvIHZpZXcgYmlsbHMgb24gdGhlIEJpbGxpbmcgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTQmlsbGluZ1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JpbGxpbmdSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBiaWxsaW5nIHNlcnZpY2UgdG8gdmFsaWRhdGUgYWNjZXNzIHRvIGJpbGxpbmcgdmlldyBkYXRhIGZvciBkZXJpdmVkIGJpbGxpbmcgdmlld3MgKi9cbiAgICBwdWJsaWMgQVdTQmlsbGluZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JpbGxpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdpdmVzIHBlcm1pc3Npb25zIHRvIGNvbnRyb2wgQVdTIHJlc291cmNlcy4gRm9yIGV4YW1wbGUsIHRvIHN0YXJ0IGFuZCBzdG9wIEVDMiBvciBSRFMgaW5zdGFuY2VzIGJ5IGV4ZWN1dGluZyBBV1MgU3lzdGVtcyBNYW5hZ2VyIChTU00pIHNjcmlwdHMuICovXG4gICAgcHVibGljIEFXU0J1ZGdldHNBY3Rpb25zUm9sZVBvbGljeUZvclJlc291cmNlQWRtaW5pc3RyYXRpb25XaXRoU1NNKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0J1ZGdldHNBY3Rpb25zUm9sZVBvbGljeUZvclJlc291cmNlQWRtaW5pc3RyYXRpb25XaXRoU1NNKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEJ1ZGdldHMgQWN0aW9ucyBpbmNsdWRpbmcgdXNpbmcgQnVkZ2V0cyBBY3Rpb25zIHRvIGNvbnRyb2wgc3RhdGVzIG9mIHJ1bm5pbmcgQVdTIHJlc291cmNlcyB2aWEgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBBV1NCdWRnZXRzQWN0aW9uc1dpdGhBV1NSZXNvdXJjZUNvbnRyb2xBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQnVkZ2V0c0FjdGlvbnNXaXRoQVdTUmVzb3VyY2VDb250cm9sQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgQnVkZ2V0cyBDb25zb2xlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTQnVkZ2V0c1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0J1ZGdldHNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgSUFNIHBvbGljeSBncmFudHMgdXNlcnMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFXUyBCdWdCdXN0IGNvbnNvbGUgKi9cbiAgICBwdWJsaWMgQVdTQnVnQnVzdEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQnVnQnVzdEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIElBTSBwb2xpY3kgZ3JhbnRzIHVzZXJzIGFjY2VzcyB0byBwYXJ0aWNpcGF0ZSBpbiBBV1MgQnVnQnVzdCBldmVudHMgKi9cbiAgICBwdWJsaWMgQVdTQnVnQnVzdFBsYXllckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCdWdCdXN0UGxheWVyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIEFXUyBCdWdCdXN0IHRvIGFjY2VzcyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTQnVnQnVzdFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0J1Z0J1c3RTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDZXJ0aWZpY2F0ZSBNYW5hZ2VyIChBQ00pICovXG4gICAgcHVibGljIEFXU0NlcnRpZmljYXRlTWFuYWdlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2VydGlmaWNhdGVNYW5hZ2VyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGF1ZGl0b3IgYWNjZXNzIHRvIEFXUyBDZXJ0aWZpY2F0ZSBNYW5hZ2VyIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5ICovXG4gICAgcHVibGljIEFXU0NlcnRpZmljYXRlTWFuYWdlclByaXZhdGVDQUF1ZGl0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2VydGlmaWNhdGVNYW5hZ2VyUHJpdmF0ZUNBQXVkaXRvcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDZXJ0aWZpY2F0ZSBNYW5hZ2VyIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5ICovXG4gICAgcHVibGljIEFXU0NlcnRpZmljYXRlTWFuYWdlclByaXZhdGVDQUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2VydGlmaWNhdGVNYW5hZ2VyUHJpdmF0ZUNBRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHByaXZpbGVnZWQgY2VydGlmaWNhdGUgdXNlciBhY2Nlc3MgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKi9cbiAgICBwdWJsaWMgQVdTQ2VydGlmaWNhdGVNYW5hZ2VyUHJpdmF0ZUNBUHJpdmlsZWdlZFVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2VydGlmaWNhdGVNYW5hZ2VyUHJpdmF0ZUNBUHJpdmlsZWdlZFVzZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBDZXJ0aWZpY2F0ZSBNYW5hZ2VyIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5ICovXG4gICAgcHVibGljIEFXU0NlcnRpZmljYXRlTWFuYWdlclByaXZhdGVDQVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NlcnRpZmljYXRlTWFuYWdlclByaXZhdGVDQVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgY2VydGlmaWNhdGUgdXNlciBhY2Nlc3MgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKi9cbiAgICBwdWJsaWMgQVdTQ2VydGlmaWNhdGVNYW5hZ2VyUHJpdmF0ZUNBVXNlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDZXJ0aWZpY2F0ZU1hbmFnZXJQcml2YXRlQ0FVc2VyKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgQ2VydGlmaWNhdGUgTWFuYWdlciAoQUNNKS4gKi9cbiAgICBwdWJsaWMgQVdTQ2VydGlmaWNhdGVNYW5hZ2VyUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2VydGlmaWNhdGVNYW5hZ2VyUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgU2VydmljZSBMaW5rZWQgUm9sZSB1c2VkIGJ5IEFXUyBDaGF0Ym90LiAqL1xuICAgIHB1YmxpYyBBV1NDaGF0Ym90U2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2hhdGJvdFNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDbGVhbiBSb29tcyByZXNvdXJjZXMgYW5kIGFjY2VzcyB0byByZWxhdGVkIEFXUyBTZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQ2xlYW5Sb29tc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xlYW5Sb29tc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgZnVsbCBhY2Nlc3MgdG8gQVdTIENsZWFuIFJvb21zIHJlc291cmNlcyBleGNlcHQgZm9yIHF1ZXJ5aW5nIGluIGEgY29sbGFib3JhdGlvbiBhbmQgYWNjZXNzIHRvIHJlbGF0ZWQgQVdTIFNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDbGVhblJvb21zRnVsbEFjY2Vzc05vUXVlcnlpbmcoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xlYW5Sb29tc0Z1bGxBY2Nlc3NOb1F1ZXJ5aW5nKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDbGVhbiBSb29tcyBNTCByZXNvdXJjZXMgYW5kIGFjY2VzcyB0byByZWxhdGVkIEFXUyBTZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQ2xlYW5Sb29tc01MRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbGVhblJvb21zTUxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIENsZWFuIFJvb21zIE1MIHJlc291cmNlcyBhbmQgcmVhZC1vbmx5IGFjY2VzcyB0byByZWxhdGVkIEFXUyBDbGVhbiBSb29tcyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTQ2xlYW5Sb29tc01MUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xlYW5Sb29tc01MUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgQ2xlYW4gUm9vbXMgcmVzb3VyY2VzIGFuZCByZWFkLW9ubHkgYWNjZXNzIHRvIHJlbGF0ZWQgQVdTIEdsdWUgYW5kIEFtYXpvbiBDbG91ZFdhdGNoIExvZ3MgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDbGVhblJvb21zUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xlYW5Sb29tc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRvciBhY2Nlc3MgdG8gQVdTIENsb3VkOS4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWQ5QWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZDlBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gYmUgaW52aXRlZCBpbnRvIEFXUyBDbG91ZDkgc2hhcmVkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWQ5RW52aXJvbm1lbnRNZW1iZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWQ5RW52aXJvbm1lbnRNZW1iZXIpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIExpbmtlZCBSb2xlIFBvbGljeSBmb3IgQVdTIENsb3VkOSAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZDlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZDlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHdpbGwgYmUgdXNlZCB0byBhdHRhY2ggYSByb2xlIG9uIGEgSW5zdGFuY2VQcm9maWxlIHdoaWNoIHdpbGwgYWxsb3cgQ2xvdWQ5IHRvIHVzZSB0aGUgU1NNIFNlc3Npb24gTWFuYWdlciB0byBjb25uZWN0IHRvIHRoZSBpbnN0YW5jZSAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZDlTU01JbnN0YW5jZVByb2ZpbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWQ5U1NNSW5zdGFuY2VQcm9maWxlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbiB0byBjcmVhdGUgQVdTIENsb3VkOSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgYW5kIHRvIG1hbmFnZSBvd25lZCBlbnZpcm9ubWVudHMuICovXG4gICAgcHVibGljIEFXU0Nsb3VkOVVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWQ5VXNlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRGb3JtYXRpb25GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkRm9ybWF0aW9uRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgQ2xvdWRGb3JtYXRpb24gdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZEZvcm1hdGlvblJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkRm9ybWF0aW9uUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQ2xvdWRGcm9udCBMb2dnZXIgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBMb2dzLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZEZyb250TG9nZ2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkRnJvbnRMb2dnZXIpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQ2xvdWRGcm9udCB0byBtYW5hZ2UgRUMyIEVsYXN0aWMgTmV0d29yayBJbnRlcmZhY2VzIGFuZCBTZWN1cml0eSBHcm91cHMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0Nsb3VkRnJvbnRWUENPcmlnaW5TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZEZyb250VlBDT3JpZ2luU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgQ2xvdWRIU00gcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZEhTTUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRIU01GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBhbGwgQ2xvdWRIU00gcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZEhTTVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkSFNNUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEFXUyBDbG91ZEhTTSBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFXU0Nsb3VkSFNNUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZEhTTVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIENsb3VkIE1hcCBkaXNjb3ZlcnkgQVBJLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZE1hcERpc2NvdmVySW5zdGFuY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRNYXBEaXNjb3Zlckluc3RhbmNlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIEFXUyBDbG91ZCBNYXAgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRNYXBGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkTWFwRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gYWxsIEFXUyBDbG91ZCBNYXAgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRNYXBSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZE1hcFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVnaXN0cmFudCBsZXZlbCBhY2Nlc3MgdG8gQVdTIENsb3VkIE1hcCBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZE1hcFJlZ2lzdGVySW5zdGFuY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRNYXBSZWdpc3Rlckluc3RhbmNlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHVzaW5nIEFXUyBDbG91ZFNoZWxsIHdpdGggYWxsIGZlYXR1cmVzICovXG4gICAgcHVibGljIEFXU0Nsb3VkU2hlbGxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkU2hlbGxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIENsb3VkVHJhaWwuICovXG4gICAgcHVibGljIEFXU0Nsb3VkVHJhaWxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkVHJhaWxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgQ2xvdWRUcmFpbC4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRUcmFpbFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkVHJhaWxSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIHVzZWQgYnkgdGhlIHNlcnZpY2UtbGlua2VkIHJvbGUgbmFtZWQgQVdTU2VydmljZVJvbGVGb3JDbG91ZFdhdGNoQWxhcm1zX0FjdGlvblNTTUluY2lkZW50cy4gQ2xvdWRXYXRjaCB1c2VzIHRoaXMgc2VydmljZS1saW5rZWQgcm9sZSB0byBwZXJmb3JtIEFXUyBTeXN0ZW0gTWFuYWdlciBJbmNpZGVudCBNYW5hZ2VyIGFjdGlvbnMgd2hlbiBhIENsb3VkV2F0Y2ggYWxhcm0gZ29lcyBpbiB0byBBTEFSTSBzdGF0ZS4gVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb24gdG8gc3RhcnQgaW5jaWRlbnRzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZFdhdGNoQWxhcm1zQWN0aW9uU1NNSW5jaWRlbnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRXYXRjaEFsYXJtc0FjdGlvblNTTUluY2lkZW50c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIENvZGVBcnRpZmFjdCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0NvZGVBcnRpZmFjdEFkbWluQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVBcnRpZmFjdEFkbWluQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgQ29kZUFydGlmYWN0IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZUFydGlmYWN0UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZUFydGlmYWN0UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgQ29kZUJ1aWxkIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gQWxzbyBhdHRhY2ggQW1hem9uUzNSZWFkT25seUFjY2VzcyB0byBwcm92aWRlIGFjY2VzcyB0byBkb3dubG9hZCBidWlsZCBhcnRpZmFjdHMsIGFuZCBhdHRhY2ggSUFNRnVsbEFjY2VzcyB0byBjcmVhdGUgYW5kIG1hbmFnZSB0aGUgc2VydmljZSByb2xlIGZvciBDb2RlQnVpbGQuICovXG4gICAgcHVibGljIEFXU0NvZGVCdWlsZEFkbWluQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVCdWlsZEFkbWluQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBDb2RlQnVpbGQgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLCBidXQgZG9lcyBub3QgYWxsb3cgQ29kZUJ1aWxkIHByb2plY3QgYWRtaW5pc3RyYXRpb24uIEFsc28gYXR0YWNoIEFtYXpvblMzUmVhZE9ubHlBY2Nlc3MgdG8gcHJvdmlkZSBhY2Nlc3MgdG8gZG93bmxvYWQgYnVpbGQgYXJ0aWZhY3RzLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlQnVpbGREZXZlbG9wZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZUJ1aWxkRGV2ZWxvcGVyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgQ29kZUJ1aWxkIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gQWxzbyBhdHRhY2ggQW1hem9uUzNSZWFkT25seUFjY2VzcyB0byBwcm92aWRlIGFjY2VzcyB0byBkb3dubG9hZCBidWlsZCBhcnRpZmFjdHMuICovXG4gICAgcHVibGljIEFXU0NvZGVCdWlsZFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVCdWlsZFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIENvZGVDb21taXQgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlQ29tbWl0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlQ29tbWl0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDb2RlQ29tbWl0IHJlcG9zaXRvcmllcywgYnV0IGRvZXMgbm90IGFsbG93IHJlcG9zaXRvcnkgZGVsZXRpb24uICovXG4gICAgcHVibGljIEFXU0NvZGVDb21taXRQb3dlclVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZUNvbW1pdFBvd2VyVXNlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIENvZGVDb21taXQgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlQ29tbWl0UmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZUNvbW1pdFJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHJlZ2lzdGVyIGFuZCBkZXBsb3kgYSByZXZpc2lvbi4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZURlcGxveURlcGxveWVyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVEZXBsb3lEZXBsb3llckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIENvZGVEZXBsb3kgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlRGVwbG95RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlRGVwbG95RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQ29kZURlcGxveSByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0NvZGVEZXBsb3lSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlRGVwbG95UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBDb2RlRGVwbG95IHNlcnZpY2UgYWNjZXNzIHRvIGV4cGFuZCB0YWdzIGFuZCBpbnRlcmFjdCB3aXRoIEF1dG8gU2NhbGluZyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZURlcGxveVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZURlcGxveVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBDb2RlRGVwbG95IHNlcnZpY2UgYWNjZXNzIHRvIGludm9rZSBMYW1iZGEgZnVuY3Rpb24gb24geW91ciBiZWhhbGYgdG8gcGVyZm9ybSBibHVlL2dyZWVuIGRlcGxveW1lbnQgdGhyb3VnaCBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZURlcGxveVJvbGVGb3JDbG91ZEZvcm1hdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlRGVwbG95Um9sZUZvckNsb3VkRm9ybWF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQ29kZURlcGxveSBzZXJ2aWNlIHdpZGUgYWNjZXNzIHRvIHBlcmZvcm0gYW4gRUNTIGJsdWUvZ3JlZW4gZGVwbG95bWVudCBvbiB5b3VyIGJlaGFsZi4gR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIHN1cHBvcnQgc2VydmljZXMsIHN1Y2ggYXMgIGZ1bGwgYWNjZXNzIHRvIHJlYWQgYWxsIFMzIG9iamVjdHMsIGludm9rZSBhbGwgTGFtYmRhIGZ1bmN0aW9ucywgcHVibGlzaCB0byBhbGwgU05TIHRvcGljcyB3aXRoaW4gdGhlIGFjY291bnQgYW5kIHVwZGF0ZSBhbGwgRUNTIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlRGVwbG95Um9sZUZvckVDUygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlRGVwbG95Um9sZUZvckVDUyk7XG4gICAgfVxuXG4gICAgLyoqICBQcm92aWRlcyBDb2RlRGVwbG95IHNlcnZpY2UgbGltaXRlZCBhY2Nlc3MgdG8gcGVyZm9ybSBhbiBFQ1MgYmx1ZS9ncmVlbiBkZXBsb3ltZW50IG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlRGVwbG95Um9sZUZvckVDU0xpbWl0ZWQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZURlcGxveVJvbGVGb3JFQ1NMaW1pdGVkKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQ29kZURlcGxveSBzZXJ2aWNlIGFjY2VzcyB0byBwZXJmb3JtIGEgTGFtYmRhIGRlcGxveW1lbnQgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0NvZGVEZXBsb3lSb2xlRm9yTGFtYmRhKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVEZXBsb3lSb2xlRm9yTGFtYmRhKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQ29kZURlcGxveSBzZXJ2aWNlIGxpbWl0ZWQgYWNjZXNzIHRvIHBlcmZvcm0gYSBMYW1iZGEgZGVwbG95bWVudCBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZURlcGxveVJvbGVGb3JMYW1iZGFMaW1pdGVkKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVEZXBsb3lSb2xlRm9yTGFtYmRhTGltaXRlZCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDb2RlUGlwZWxpbmUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlUGlwZWxpbmVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVQaXBlbGluZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBDb2RlUGlwZWxpbmUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlUGlwZWxpbmVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlUGlwZWxpbmVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB2aWV3IGFuZCBhcHByb3ZlIG1hbnVhbCBjaGFuZ2VzIGZvciBhbGwgcGlwZWxpbmVzICovXG4gICAgcHVibGljIEFXU0NvZGVQaXBlbGluZUFwcHJvdmVyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVQaXBlbGluZUFwcHJvdmVyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIGZvciBjdXN0b20gYWN0aW9ucyB0byBwb2xsIGZvciBqb2JzIGRldGFpbHMgKGluY2x1ZGluZyB0ZW1wb3JhcnkgY3JlZGVudGlhbHMpIGFuZCByZXBvcnQgc3RhdHVzIHVwZGF0ZXMgdG8gQVdTIENvZGVQaXBlbGluZS4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZVBpcGVsaW5lQ3VzdG9tQWN0aW9uQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVQaXBlbGluZUN1c3RvbUFjdGlvbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDb2RlU3RhciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0NvZGVTdGFyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlU3RhckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIENvZGVTdGFyIE5vdGlmaWNhdGlvbnMgdG8gYWNjZXNzIEFtYXpvbiBDbG91ZFdhdGNoIEV2ZW50cyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlU3Rhck5vdGlmaWNhdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlU3Rhck5vdGlmaWNhdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIERPIE5PVCBVU0UgLSAgQVdTIENvZGVTdGFyIFNlcnZpY2UgUm9sZSBQb2xpY3kgd2hpY2ggZ3JhbnRzIGFkbWluaXN0cmF0aXZlIHByaXZpbGVnZXMgaW4gb3JkZXIgZm9yIENvZGVTdGFyIHRvIG1hbmFnZSBJQU0gYW5kIG90aGVyIHNlcnZpY2UgcmVzb3VyY2VzIG9uIGJlaGFsZiBvZiB0aGUgY3VzdG9tZXIuICovXG4gICAgcHVibGljIEFXU0NvZGVTdGFyU2VydmljZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZVN0YXJTZXJ2aWNlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIERlbmllcyBhY2Nlc3MgdG8gY2VydGFpbiBhY3Rpb25zLCBhcHBsaWVkIGJ5IHRoZSBBV1MgdGVhbSBpbiB0aGUgZXZlbnQgdGhhdCBhbiBJQU0gdXNlcidzIGNyZWRlbnRpYWxzIGhhdmUgYmVlbiBjb21wcm9taXNlZCBvciBleHBvc2VkIHB1YmxpY2x5LiAgRG8gTk9UIHJlbW92ZSB0aGlzIHBvbGljeS4gIEluc3RlYWQsIHBsZWFzZSBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBzcGVjaWZpZWQgaW4gdGhlIGVtYWlsIHNlbnQgdG8geW91IHJlZ2FyZGluZyB0aGlzIGV2ZW50LiAqL1xuICAgIHB1YmxpYyBBV1NDb21wcm9taXNlZEtleVF1YXJhbnRpbmUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29tcHJvbWlzZWRLZXlRdWFyYW50aW5lKTtcbiAgICB9XG5cbiAgICAvKiogRGVuaWVzIGFjY2VzcyB0byBjZXJ0YWluIGFjdGlvbnMsIGFwcGxpZWQgYnkgdGhlIEFXUyB0ZWFtIGluIHRoZSBldmVudCB0aGF0IGFuIElBTSB1c2VyJ3MgY3JlZGVudGlhbHMgaGF2ZSBiZWVuIGNvbXByb21pc2VkIG9yIGV4cG9zZWQgcHVibGljbHkuIERvIE5PVCByZW1vdmUgdGhpcyBwb2xpY3kuIEluc3RlYWQsIHBsZWFzZSBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBzcGVjaWZpZWQgaW4gdGhlIHN1cHBvcnQgY2FzZSBjcmVhdGVkIGZvciB5b3UgcmVnYXJkaW5nIHRoaXMgZXZlbnQuICovXG4gICAgcHVibGljIEFXU0NvbXByb21pc2VkS2V5UXVhcmFudGluZVYyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbXByb21pc2VkS2V5UXVhcmFudGluZVYyKTtcbiAgICB9XG5cbiAgICAvKiogRGVuaWVzIGFjY2VzcyB0byBjZXJ0YWluIGFjdGlvbnMsIGFwcGxpZWQgYnkgQVdTIGluIHRoZSBldmVudCB0aGF0IGFuIElBTSB1c2VyJ3MgY3JlZGVudGlhbHMgaGF2ZSBiZWVuIGNvbXByb21pc2VkIG9yIGV4cG9zZWQgcHVibGljbHkuIFRoZSBwb2xpY3kgYWltcyB0byBsaW1pdCB0aGUgcG90ZW50aWFsIGRhbWFnZSB0aGF0IG1heSBiZSBjYXVzZWQgYnkgZnJhdWQtcmVsYXRlZCBhY3Rpdml0eSBsZWFkaW5nIHRvIHVuYXV0aG9yaXplZCBjaGFyZ2VzLCB3aGlsZSBub3QgaW1wYWN0aW5nIHRoZSBleGlzdGluZyByZXNvdXJjZXMuIERvIE5PVCByZW1vdmUgdGhpcyBwb2xpY3kuIEluc3RlYWQsIHBsZWFzZSBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBzcGVjaWZpZWQgaW4gdGhlIHN1cHBvcnQgY2FzZSBjcmVhdGVkIGZvciB5b3UgcmVnYXJkaW5nIHRoaXMgZXZlbnQuICovXG4gICAgcHVibGljIEFXU0NvbXByb21pc2VkS2V5UXVhcmFudGluZVYzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbXByb21pc2VkS2V5UXVhcmFudGluZVYzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENvbmZpZyB0byBjYWxsIEFXUyBzZXJ2aWNlcyBhbmQgZGVwbG95IGNvbmZpZyByZXNvdXJjZXMgYWNyb3NzIG9yZ2FuaXphdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NDb25maWdNdWx0aUFjY291bnRTZXR1cFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb25maWdNdWx0aUFjY291bnRTZXR1cFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgQ29uZmlnIHRvIHJlbWVkaWF0ZSBub25jb21wbGlhbnQgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDb25maWdSZW1lZGlhdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbmZpZ1JlbWVkaWF0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIENvbmZpZyB0byBjYWxsIHJlYWQtb25seSBBV1MgT3JnYW5pemF0aW9ucyBBUElzICovXG4gICAgcHVibGljIEFXU0NvbmZpZ1JvbGVGb3JPcmdhbml6YXRpb25zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbmZpZ1JvbGVGb3JPcmdhbml6YXRpb25zKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFuIEFXUyBMYW1iZGEgZnVuY3Rpb24gdG8gYWNjZXNzIHRoZSBBV1MgQ29uZmlnIEFQSSBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc25hcHNob3RzIHRoYXQgQVdTIENvbmZpZyBkZWxpdmVycyBwZXJpb2RpY2FsbHkgdG8gQW1hem9uIFMzLiBUaGlzIGFjY2VzcyBpcyByZXF1aXJlZCBieSBmdW5jdGlvbnMgdGhhdCBldmFsdWF0ZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgZm9yIGN1c3RvbSBDb25maWcgcnVsZXMuICovXG4gICAgcHVibGljIEFXU0NvbmZpZ1J1bGVzRXhlY3V0aW9uUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb25maWdSdWxlc0V4ZWN1dGlvblJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQ29uZmlnIHRvIGNhbGwgQVdTIHNlcnZpY2VzIGFuZCBjb2xsZWN0IHJlc291cmNlIGNvbmZpZ3VyYXRpb25zIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDb25maWdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb25maWdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB1c2UgQVdTIENvbmZpZywgaW5jbHVkaW5nIHNlYXJjaGluZyBieSB0YWdzIG9uIHJlc291cmNlcywgYW5kIHJlYWRpbmcgYWxsIHRhZ3MuIFRoaXMgZG9lcyBub3QgcHJvdmlkZSBwZXJtaXNzaW9uIHRvIGNvbmZpZ3VyZSBBV1MgQ29uZmlnLCB3aGljaCByZXF1aXJlcyBhZG1pbmlzdHJhdGl2ZSBwcml2aWxlZ2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDb25maWdVc2VyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbmZpZ1VzZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGJyb2FkIHJlYWQvd3JpdGUgYWNjZXNzIHRvIEFMTCBFQzIgb2JqZWN0cywgcmVhZC93cml0ZSBhY2Nlc3MgdG8gUzMgYnVja2V0cyBzdGFydGluZyB3aXRoICdpbXBvcnQtdG8tZWMyLScsIGFuZCB0aGUgYWJpbGl0eSB0byBsaXN0IGFsbCBTMyBidWNrZXRzLCBmb3IgdGhlIEFXUyBDb25uZWN0b3IgdG8gaW1wb3J0IFZNcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTQ29ubmVjdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nvbm5lY3Rvcik7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgQ29udHJvbCBUb3dlciB0byBjYWxsIEFXUyBzZXJ2aWNlcyB0aGF0IHByb3ZpZGUgYXV0b21hdGVkIGFjY291bnQgY29uZmlndXJhdGlvbiBhbmQgY2VudHJhbGl6ZWQgZ292ZXJuYW5jZSBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTQ29udHJvbFRvd2VyQWNjb3VudFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbnRyb2xUb3dlckFjY291bnRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBDb250cm9sIFRvd2VyIGVuYWJsZXMgQVdTIENsb3VkVHJhaWwgYXMgYSBiZXN0IHByYWN0aWNlIGFuZCBwcm92aWRlcyB0aGlzIHJvbGUgdG8gQVdTIENsb3VkVHJhaWwuIEFXUyBDbG91ZFRyYWlsIGFzc3VtZXMgdGhpcyByb2xlIHRvIGNyZWF0ZSBhbmQgcHVibGlzaCBDbG91ZFRyYWlsIGxvZ3MgKi9cbiAgICBwdWJsaWMgQVdTQ29udHJvbFRvd2VyQ2xvdWRUcmFpbFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29udHJvbFRvd2VyQ2xvdWRUcmFpbFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgdGhlIElBTSBJZGVudGl0eSBDZW50ZXIgKElkQykgcmVzb3VyY2VzIGluIHRoZSBtZW1iZXIgYWNjb3VudHMgZW5yb2xsZWQgd2l0aCBBV1MgQ29udHJvbCBUb3dlci4gVGhlIHBvbGljeSBpcyBhdHRhY2hlZCB0byB0aGUgQVdTQ29udHJvbFRvd2VyQWRtaW4gcm9sZSBvbmx5IGlmIHRoZSBjdXN0b21lciBoYXMgb3B0ZWQtaW50byBJQU0gSWRDIGludGVncmF0aW9uIGluIHRoZWlyIEFXUyBDb250cm9sIFRvd2VyIExhbmRpbmcgWm9uZS4gKi9cbiAgICBwdWJsaWMgQVdTQ29udHJvbFRvd2VySWRlbnRpdHlDZW50ZXJNYW5hZ2VtZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbnRyb2xUb3dlcklkZW50aXR5Q2VudGVyTWFuYWdlbWVudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIG1hbmFnZWQgb3IgdXNlZCBieSBBV1MgQ29udHJvbCBUb3dlciAqL1xuICAgIHB1YmxpYyBBV1NDb250cm9sVG93ZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb250cm9sVG93ZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byB0byBkZXNjcmliZSB0aGUgb3JnYW5pemF0aW9uIG9mIHRoZSBhY2NvdW50LCBjcmVhdGUgUzMgYnVja2V0cyBmb3IgdGhlIE1BUCBwcm9ncmFtIGFuZCBhcHBseSB0YWdzIHRvIGl0LCBjcmVhdGUgYSBDb3N0IGFuZCBVc2FnZSBSZXBvcnQsIGFuZCBkZXNjcmliZSBDb3N0IGFuZCBVc2FnZSBSZXBvcnQgZGVmaW5pdGlvbnMuICovXG4gICAgcHVibGljIEFXU0Nvc3RBbmRVc2FnZVJlcG9ydEF1dG9tYXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29zdEFuZFVzYWdlUmVwb3J0QXV0b21hdGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdpdmVzIERhdGEgR3JhbnQgb3duZXJzIGFjY2VzcyB0byBBV1MgRGF0YSBFeGNoYW5nZSBhY3Rpb25zIHVzaW5nIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuICovXG4gICAgcHVibGljIEFXU0RhdGFFeGNoYW5nZURhdGFHcmFudE93bmVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhRXhjaGFuZ2VEYXRhR3JhbnRPd25lckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHaXZlcyBEYXRhIEdyYW50IHJlY2VpdmVyIGFjY2VzcyB0byBBV1MgRGF0YSBFeGNoYW5nZSBhY3Rpb25zIHVzaW5nIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuICovXG4gICAgcHVibGljIEFXU0RhdGFFeGNoYW5nZURhdGFHcmFudFJlY2VpdmVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhRXhjaGFuZ2VEYXRhR3JhbnRSZWNlaXZlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgdG8gQVdTIERhdGEgRXhjaGFuZ2UgYW5kIEFXUyBNYXJrZXRwbGFjZSBhY3Rpb25zIHVzaW5nIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuIEl0IGFsc28gcHJvdmlkZXMgc2VsZWN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIG5lZWRlZCB0byB0YWtlIGZ1bGwgYWR2YW50YWdlIG9mIEFXUyBEYXRhIEV4Y2hhbmdlLiAqL1xuICAgIHB1YmxpYyBBV1NEYXRhRXhjaGFuZ2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFFeGNoYW5nZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZGF0YSBwcm92aWRlciBhY2Nlc3MgdG8gQVdTIERhdGEgRXhjaGFuZ2UgYW5kIEFXUyBNYXJrZXRwbGFjZSBhY3Rpb25zIHVzaW5nIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuIEl0IGFsc28gcHJvdmlkZXMgc2VsZWN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIG5lZWRlZCB0byB0YWtlIGZ1bGwgYWR2YW50YWdlIG9mIEFXUyBEYXRhIEV4Y2hhbmdlLiAqL1xuICAgIHB1YmxpYyBBV1NEYXRhRXhjaGFuZ2VQcm92aWRlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YUV4Y2hhbmdlUHJvdmlkZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIERhdGEgRXhjaGFuZ2UgYW5kIEFXUyBNYXJrZXRwbGFjZSBhY3Rpb25zIHVzaW5nIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuICovXG4gICAgcHVibGljIEFXU0RhdGFFeGNoYW5nZVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFFeGNoYW5nZVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBEYXRhIEV4Y2hhbmdlIHRvIGFjY2VzcyBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQVdTIERhdGEgRXhjaGFuZ2UgZm9yIGxpY2Vuc2UgbWFuYWdlbWVudC4gKi9cbiAgICBwdWJsaWMgQVdTRGF0YUV4Y2hhbmdlU2VydmljZVJvbGVQb2xpY3lGb3JMaWNlbnNlTWFuYWdlbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhRXhjaGFuZ2VTZXJ2aWNlUm9sZVBvbGljeUZvckxpY2Vuc2VNYW5hZ2VtZW50KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBEYXRhIEV4Y2hhbmdlIHRvIHJlYWQgZGF0YSBhYm91dCB5b3VyIEFXUyBPcmdhbml6YXRpb24gdG8gZGV0ZXJtaW5lIGVsaWdpYmlsaXR5IGZvciBBV1MgRGF0YSBFeGNoYW5nZSBkYXRhIGdyYW50cyBsaWNlbnNlIGRpc3RyaWJ1dGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTRGF0YUV4Y2hhbmdlU2VydmljZVJvbGVQb2xpY3lGb3JPcmdhbml6YXRpb25EaXNjb3ZlcnkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YUV4Y2hhbmdlU2VydmljZVJvbGVQb2xpY3lGb3JPcmdhbml6YXRpb25EaXNjb3ZlcnkpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZGF0YSBzdWJzY3JpYmVyIGFjY2VzcyB0byBBV1MgRGF0YSBFeGNoYW5nZSBhbmQgQVdTIE1hcmtldHBsYWNlIGFjdGlvbnMgdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gSXQgYWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgbmVlZGVkIHRvIHRha2UgZnVsbCBhZHZhbnRhZ2Ugb2YgQVdTIERhdGEgRXhjaGFuZ2UuICovXG4gICAgcHVibGljIEFXU0RhdGFFeGNoYW5nZVN1YnNjcmliZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFFeGNoYW5nZVN1YnNjcmliZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYXBwcm9wcmlhdGUgcGVybWlzc2lvbnMgdG8gQVdTIERhdGEgTGlmZWN5Y2xlIE1hbmFnZXIgdG8gdGFrZSBhY3Rpb25zIG9uIEFXUyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTRGF0YUxpZmVjeWNsZU1hbmFnZXJTZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhTGlmZWN5Y2xlTWFuYWdlclNlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYXBwcm9wcmlhdGUgcGVybWlzc2lvbnMgdG8gQVdTIERhdGEgTGlmZWN5Y2xlIE1hbmFnZXIgdG8gdGFrZSBhY3Rpb25zIG9uIEFXUyByZXNvdXJjZXMgZm9yIEFNSSBNYW5hZ2VtZW50ICovXG4gICAgcHVibGljIEFXU0RhdGFMaWZlY3ljbGVNYW5hZ2VyU2VydmljZVJvbGVGb3JBTUlNYW5hZ2VtZW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFMaWZlY3ljbGVNYW5hZ2VyU2VydmljZVJvbGVGb3JBTUlNYW5hZ2VtZW50KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQW1hem9uIERhdGEgTGlmZWN5Y2xlIE1hbmFnZXIgcGVybWlzc2lvbiB0byBwZXJmb3JtIHRoZSBTeXN0ZW1zIE1hbmFnZXIgYWN0aW9ucyByZXF1aXJlZCB0byBydW4gcHJlIGFuZCBwb3N0IHNjcmlwdHMgb24gYWxsIEFtYXpvbiBFQzIgaW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NEYXRhTGlmZWN5Y2xlTWFuYWdlclNTTUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YUxpZmVjeWNsZU1hbmFnZXJTU01GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gRGF0YSBQaXBlbGluZSwgbGlzdCBhY2Nlc3MgZm9yIFMzLCBEeW5hbW9EQiwgUmVkc2hpZnQsIFJEUywgU05TLCBhbmQgSUFNIHJvbGVzLCBhbmQgcGFzc1JvbGUgYWNjZXNzIGZvciBkZWZhdWx0IFJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NEYXRhUGlwZWxpbmVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFQaXBlbGluZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBEYXRhIFBpcGVsaW5lLCBsaXN0IGFjY2VzcyBmb3IgUzMsIER5bmFtb0RCLCBSZWRzaGlmdCwgUkRTLCBTTlMsIGFuZCBJQU0gcm9sZXMsIGFuZCBwYXNzUm9sZSBhY2Nlc3MgZm9yIGRlZmF1bHQgUm9sZXMuICovXG4gICAgcHVibGljIEFXU0RhdGFQaXBlbGluZVBvd2VyVXNlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhUGlwZWxpbmVQb3dlclVzZXIpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRGF0YVN5bmMgRGlzY292ZXJ5IHRvIGludGVncmF0ZSB3aXRoIG90aGVyIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRGF0YVN5bmNEaXNjb3ZlcnlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhU3luY0Rpc2NvdmVyeVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIERhdGFTeW5jIGFuZCBtaW5pbWFsIGFjY2VzcyB0byBpdHMgZGVwZW5kZW5jaWVzICovXG4gICAgcHVibGljIEFXU0RhdGFTeW5jRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhU3luY0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBEYXRhU3luYyAqL1xuICAgIHB1YmxpYyBBV1NEYXRhU3luY1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFTeW5jUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRGF0YVN5bmMgdG8gaW50ZWdyYXRlIHdpdGggb3RoZXIgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFXU0RhdGFTeW5jU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YVN5bmNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBEZWFkbGluZSBDbG91ZCB3b3JrZXJzIHdpdGggYWNjZXNzIHRvIHJ1biB0YXNrcyBvbiBhIGZhcm0uICovXG4gICAgcHVibGljIEFXU0RlYWRsaW5lQ2xvdWRGbGVldFdvcmtlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWFkbGluZUNsb3VkRmxlZXRXb3JrZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB1c2VyIHdvcmtzdGF0aW9uIGFjY2VzcyB0byBBV1MgRGVhZGxpbmUgQ2xvdWQgZmFybXMgd2l0aCBsaW1pdGVkIFJlYWQtT25seSBwZXJtaXNzaW9ucyB0byBjYWxsIG90aGVyIG5lY2Vzc2FyeSBzZXJ2aWNlcy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHRoZSB1c2VyIHJvbGUgYXNzb2NpYXRlZCB3aXRoIHlvdXIgc3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBBV1NEZWFkbGluZUNsb3VkVXNlckFjY2Vzc0Zhcm1zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlYWRsaW5lQ2xvdWRVc2VyQWNjZXNzRmFybXMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB1c2VyIHdvcmtzdGF0aW9uIGFjY2VzcyB0byBBV1MgRGVhZGxpbmUgQ2xvdWQgZmxlZXRzIHdpdGggbGltaXRlZCBSZWFkLU9ubHkgcGVybWlzc2lvbnMgdG8gY2FsbCBvdGhlciBuZWNlc3Nhcnkgc2VydmljZXMuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB0aGUgdXNlciByb2xlIGFzc29jaWF0ZWQgd2l0aCB5b3VyIHN0dWRpby4gKi9cbiAgICBwdWJsaWMgQVdTRGVhZGxpbmVDbG91ZFVzZXJBY2Nlc3NGbGVldHMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVhZGxpbmVDbG91ZFVzZXJBY2Nlc3NGbGVldHMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB1c2VyIHdvcmtzdGF0aW9uIGFjY2VzcyB0byBBV1MgRGVhZGxpbmUgQ2xvdWQgam9icyB3aXRoIGxpbWl0ZWQgUmVhZC1Pbmx5IHBlcm1pc3Npb25zIHRvIGNhbGwgb3RoZXIgbmVjZXNzYXJ5IHNlcnZpY2VzLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8gdGhlIHVzZXIgcm9sZSBhc3NvY2lhdGVkIHdpdGggeW91ciBzdHVkaW8uICovXG4gICAgcHVibGljIEFXU0RlYWRsaW5lQ2xvdWRVc2VyQWNjZXNzSm9icygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWFkbGluZUNsb3VkVXNlckFjY2Vzc0pvYnMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB1c2VyIHdvcmtzdGF0aW9uIGFjY2VzcyB0byBBV1MgRGVhZGxpbmUgQ2xvdWQgcXVldWVzIHdpdGggbGltaXRlZCBSZWFkLU9ubHkgcGVybWlzc2lvbnMgdG8gY2FsbCBvdGhlciBuZWNlc3Nhcnkgc2VydmljZXMuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB0aGUgdXNlciByb2xlIGFzc29jaWF0ZWQgd2l0aCB5b3VyIHN0dWRpby4gKi9cbiAgICBwdWJsaWMgQVdTRGVhZGxpbmVDbG91ZFVzZXJBY2Nlc3NRdWV1ZXMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVhZGxpbmVDbG91ZFVzZXJBY2Nlc3NRdWV1ZXMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgZm9yIEFXUyBEZWFkbGluZSBDbG91ZCB3b3JrZXIgaG9zdHMgdG8gam9pbiBhIGZsZWV0IGluIGEgZmFybS4gKi9cbiAgICBwdWJsaWMgQVdTRGVhZGxpbmVDbG91ZFdvcmtlckhvc3QoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVhZGxpbmVDbG91ZFdvcmtlckhvc3QpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBzcGVjaWZpZXMgcGVybWlzc2lvbnMgcmVxdWlyZWQgYnkgRGVlcExlbnMgQWRtaW5pc3RyYXRpdmUgbGFtYmRhIGZ1bmN0aW9ucyB0aGF0IHJ1biBvbiBhIERlZXBMZW5zIGRldmljZSAqL1xuICAgIHB1YmxpYyBBV1NEZWVwTGVuc0xhbWJkYUZ1bmN0aW9uQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlZXBMZW5zTGFtYmRhRnVuY3Rpb25BY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQVdTIERlZXBMZW5zIGFjY2VzcyB0byBBV1MgU2VydmljZXMsIHJlc291cmNlcyBhbmQgcm9sZXMgbmVlZGVkIGJ5IERlZXBMZW5zIGFuZCBpdHMgZGVwZW5kZW5jaWVzIGluY2x1ZGluZyBJb1QsIFMzLCBHcmVlbkdyYXNzIGFuZCBBV1MgTGFtYmRhLiAqL1xuICAgIHB1YmxpYyBBV1NEZWVwTGVuc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlZXBMZW5zU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBEZWVwUmFjZXIgYWRtaW4gYWNjZXNzIHRvIGFsbCBhY3Rpb25zIGluY2x1ZGluZyB0b2dnbGluZyBiZXR3ZWVuIG11bHRpdXNlciBhbmQgc2luZ2xlIHVzZXIgbW9kZS4gKi9cbiAgICBwdWJsaWMgQVdTRGVlcFJhY2VyQWNjb3VudEFkbWluQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlZXBSYWNlckFjY291bnRBZG1pbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBDbG91ZEZvcm1hdGlvbiB0byBjcmVhdGUgYW5kIG1hbmFnZSBBV1Mgc3RhY2tzIGFuZCByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0RlZXBSYWNlckNsb3VkRm9ybWF0aW9uQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlZXBSYWNlckNsb3VkRm9ybWF0aW9uQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRGVlcFJhY2VyIE11bHRpVXNlciBEZWZhdWx0IHVzZXIgYWNjZXNzIHRvIHVzZSBkZWVwcmFjZXIgaW4gbXVsdGktdXNlciBtb2RlICovXG4gICAgcHVibGljIEFXU0RlZXBSYWNlckRlZmF1bHRNdWx0aVVzZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVlcFJhY2VyRGVmYXVsdE11bHRpVXNlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBEZWVwUmFjZXIuIEFsc28gcHJvdmlkZXMgc2VsZWN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIChlLmcuLCBTMykuICovXG4gICAgcHVibGljIEFXU0RlZXBSYWNlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVlcFJhY2VyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBSb2JvTWFrZXIgdG8gY3JlYXRlIHJlcXVpcmVkIHJlc291cmNlcyBhbmQgY2FsbCBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0RlZXBSYWNlclJvYm9NYWtlckFjY2Vzc1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWVwUmFjZXJSb2JvTWFrZXJBY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRGVlcFJhY2VyIHRvIGNyZWF0ZSByZXF1aXJlZCByZXNvdXJjZXMgYW5kIGNhbGwgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NEZWVwUmFjZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWVwUmFjZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIERlbnkgYWxsIGFjY2Vzcy4gKi9cbiAgICBwdWJsaWMgQVdTRGVueUFsbCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZW55QWxsKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIEFXUyBEZXZpY2UgRmFybSBvcGVyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NEZXZpY2VGYXJtRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZXZpY2VGYXJtRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50IHBlcm1pc3Npb25zIHRvIEFXUyBEZXZpY2UgRmFybSB0byBjYWxsIEVDMiBOZXR3b3JrIEFQSXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0RldmljZUZhcm1TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZXZpY2VGYXJtU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudCBwZXJtaXNzaW9ucyB0byBBV1MgRGV2aWNlIEZhcm0gdG8gY2FsbCBFQzIgQVBJcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRGV2aWNlRmFybVRlc3RHcmlkU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGV2aWNlRmFybVRlc3RHcmlkU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRGlyZWN0IENvbm5lY3QgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NEaXJlY3RDb25uZWN0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEaXJlY3RDb25uZWN0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIERpcmVjdCBDb25uZWN0IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTRGlyZWN0Q29ubmVjdFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RpcmVjdENvbm5lY3RSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBEaXJlY3QgQ29ubmVjdCBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0RpcmVjdENvbm5lY3RTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEaXJlY3RDb25uZWN0U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRGlyZWN0b3J5IFNlcnZpY2UgRGF0YS4gKi9cbiAgICBwdWJsaWMgQVdTRGlyZWN0b3J5U2VydmljZURhdGFGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RpcmVjdG9yeVNlcnZpY2VEYXRhRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIERpcmVjdG9yeSBTZXJ2aWNlIERhdGEgKi9cbiAgICBwdWJsaWMgQVdTRGlyZWN0b3J5U2VydmljZURhdGFSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEaXJlY3RvcnlTZXJ2aWNlRGF0YVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIERpcmVjdG9yeSBTZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NEaXJlY3RvcnlTZXJ2aWNlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEaXJlY3RvcnlTZXJ2aWNlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIERpcmVjdG9yeSBTZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NEaXJlY3RvcnlTZXJ2aWNlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGlyZWN0b3J5U2VydmljZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciB0aGUgRGlyZWN0b3J5IFNlcnZpY2UgU2VydmljZSBMaW5rZWQgUm9sZSAqL1xuICAgIHB1YmxpYyBBV1NEaXJlY3RvcnlTZXJ2aWNlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGlyZWN0b3J5U2VydmljZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgd3JpdGUgYWNjZXNzIHRvIEFXUyByZXNvdXJjZXMgcmVxdWlyZWQgZm9yIEFXUyBEaXNjb3ZlcnkgQ29udGludW91cyBFeHBvcnQgKi9cbiAgICBwdWJsaWMgQVdTRGlzY292ZXJ5Q29udGludW91c0V4cG9ydEZpcmVob3NlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Rpc2NvdmVyeUNvbnRpbnVvdXNFeHBvcnRGaXJlaG9zZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBETVMgRmxlZXQgQWR2aXNvciB0byBtYW5hZ2UgQ2xvdWRXYXRjaCBtZXRyaWNzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NETVNGbGVldEFkdmlzb3JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NETVNGbGVldEFkdmlzb3JTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBBV1MgRE1TIFNlcnZlcmxlc3MgcGVybWlzc2lvbnMgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgRE1TIHJlc291cmNlcyBpbiB5b3VyIGFjY291bnQgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTRE1TU2VydmVybGVzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RNU1NlcnZlcmxlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBFQzIgQ2FwYWNpdHkgTWFuYWdlciB0byBtYW5hZ2UgY2FwYWNpdHkgcmVzb3VyY2VzIGFuZCBpbnRlZ3JhdGUgd2l0aCBBV1MgT3JnYW5pemF0aW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRUMyQ2FwYWNpdHlNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRUMyQ2FwYWNpdHlNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRUMyIENhcGFjaXR5UmVzZXJ2YXRpb24gRmxlZXQgc2VydmljZSB0byBtYW5hZ2UgQ2FwYWNpdHkgUmVzZXJ2YXRpb25zICovXG4gICAgcHVibGljIEFXU0VDMkNhcGFjaXR5UmVzZXJ2YXRpb25GbGVldFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRUMyQ2FwYWNpdHlSZXNlcnZhdGlvbkZsZWV0Um9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBFQzIgRmxlZXQgdG8gbGF1bmNoIGFuZCBtYW5hZ2UgaW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NFQzJGbGVldFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VDMkZsZWV0U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRUMyIFNwb3QgRmxlZXQgdG8gbGF1bmNoIGFuZCBtYW5hZ2Ugc3BvdCBmbGVldCBpbnN0YW5jZXMgKi9cbiAgICBwdWJsaWMgQVdTRUMyU3BvdEZsZWV0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRUMyU3BvdEZsZWV0U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRUMyIFNwb3QgdG8gbGF1bmNoIGFuZCBtYW5hZ2Ugc3BvdCBpbnN0YW5jZXMgKi9cbiAgICBwdWJsaWMgQVdTRUMyU3BvdFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VDMlNwb3RTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBFQzIgaW5zdGFuY2UgcGVybWlzc2lvbnMgdG8gYWxsb3cgRUMyIFNRTCBIaWdoIEF2YWlsYWJpbGl0eSBzZXJ2aWNlIHRvIGRldGVjdCBpbnN0YW5jZSBoaWdoIGF2YWlsYWJpbGl0eSBzdGF0ZSB0aHJvdWdoIEVDMiBpbnN0YW5jZSBwcm9maWxlLiAqL1xuICAgIHB1YmxpYyBBV1NFQzJTcWxIYUluc3RhbmNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VDMlNxbEhhSW5zdGFuY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBFQzIgU1FMIEhpZ2ggQXZhaWxhYmlsaXR5IHNlcnZpY2UgcGVybWlzc2lvbnMgdG8gZGV0ZWN0IHN0YW5kYnkvcGFzc2l2ZSBpbnN0YW5jZXMgKi9cbiAgICBwdWJsaWMgQVdTRUMyU3FsSGFTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFQzJTcWxIYVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgdG8gdGhlIElBTSByb2xlIHRoYXQncyBhdHRhY2hlZCB0byB5b3VyIEFtYXpvbiBFQzIgV2luZG93cyBJbnN0YW5jZXMgdG8gZW5hYmxlIHRoZSBBbWF6b24gRUMyIFZTUyBzb2x1dGlvbiB0byBjcmVhdGUgYW5kIGFkZCB0YWdzIHRvIEFtYXpvbiBNYWNoaW5lIEltYWdlcyAoQU1JKSBhbmQgRUJTIFNuYXBzaG90cy4gKi9cbiAgICBwdWJsaWMgQVdTRUMyVnNzU25hcHNob3RQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRUMyVnNzU25hcHNob3RQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1Mgc2VydmljZXMgYW5kIHJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQVdTIEVDUiBwdWxsIHRocm91Z2ggY2FjaGUgKi9cbiAgICBwdWJsaWMgQVdTRUNSUHVsbFRocm91Z2hDYWNoZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VDUlB1bGxUaHJvdWdoQ2FjaGVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgdGhlIGluc3RhbmNlIGluIHlvdXIgY3VzdG9tIHBsYXRmb3JtIGJ1aWxkZXIgZW52aXJvbm1lbnQgcGVybWlzc2lvbiB0byBsYXVuY2ggRUMyIGluc3RhbmNlLCBjcmVhdGUgRUJTIHNuYXBzaG90IGFuZCBBTUksIHN0cmVhbSBsb2dzIHRvIEFtYXpvbiBDbG91ZFdhdGNoIExvZ3MsIGFuZCBzdG9yZSBhcnRpZmFjdHMgaW4gQW1hem9uIFMzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrQ3VzdG9tUGxhdGZvcm1mb3JFQzJSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtDdXN0b21QbGF0Zm9ybWZvckVDMlJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgRWxhc3RpYyBCZWFuc3RhbGsgU2VydmljZSBwb2xpY3kgZm9yIEhlYWx0aCBNb25pdG9yaW5nIHN5c3RlbSAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrRW5oYW5jZWRIZWFsdGgoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa0VuaGFuY2VkSGVhbHRoKTtcbiAgICB9XG5cbiAgICAvKiogQVdTIEVsYXN0aWMgQmVhbnN0YWxrIFNlcnZpY2UgUm9sZSBwb2xpY3kgdGhhdCBncmFudHMgbGltaXRlZCBwZXJtaXNzaW9ucyB0byB1cGRhdGUgeW91ciByZXNvdXJjZXMgb24geW91ciBiZWhhbGYgZm9yIG1haW50ZW5hbmNlIHB1cnBvc2VzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrTWFpbnRlbmFuY2UoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa01haW50ZW5hbmNlKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgZm9yIHRoZSBBV1MgRWxhc3RpYyBCZWFuc3RhbGsgc2VydmljZSByb2xlIHVzZWQgdG8gcGVyZm9ybSBtYW5hZ2VkIHVwZGF0ZXMgb2YgRWxhc3RpYyBCZWFuc3RhbGsgZW52aXJvbm1lbnRzLiBUaGlzIHBvbGljeSBzaG91bGQgbm90IGJlIGF0dGFjaGVkIHRvIG90aGVyIHVzZXJzIG9yIHJvbGVzLiBUaGUgcG9saWN5IGdyYW50cyBicm9hZCBwZXJtaXNzaW9ucyB0byBjcmVhdGUgYW5kIG1hbmFnZSByZXNvdXJjZXMgYWNyb3NzIGEgbnVtYmVyIG9mIEFXUyBzZXJ2aWNlcyBpbmNsdWRpbmcgQXV0b1NjYWxpbmcsIEVDMiwgRUNTLCBFbGFzdGljIExvYWQgQmFsYW5jaW5nIGFuZCBDbG91ZEZvcm1hdGlvbi4gIFRoaXMgcG9saWN5IGFsc28gYWxsb3dzIHBhc3Npbmcgb2YgYW55IElBTSByb2xlIHVzYWJsZSB3aXRoIHRob3NlIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrTWFuYWdlZFVwZGF0ZXNDdXN0b21lclJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa01hbmFnZWRVcGRhdGVzQ3VzdG9tZXJSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQVdTIEVsYXN0aWMgQmVhbnN0YWxrIFNlcnZpY2UgUm9sZSBwb2xpY3kgdGhhdCBncmFudHMgbGltaXRlZCBwZXJtaXNzaW9ucyB0byBtYW5hZ2VkIHVwZGF0ZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtNYW5hZ2VkVXBkYXRlc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtNYW5hZ2VkVXBkYXRlc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSB0aGUgaW5zdGFuY2VzIGluIHlvdXIgbXVsdGljb250YWluZXIgRG9ja2VyIGVudmlyb25tZW50IGFjY2VzcyB0byB1c2UgdGhlIEFtYXpvbiBFQzIgQ29udGFpbmVyIFNlcnZpY2UgdG8gbWFuYWdlIGNvbnRhaW5lciBkZXBsb3ltZW50IHRhc2tzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrTXVsdGljb250YWluZXJEb2NrZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa011bHRpY29udGFpbmVyRG9ja2VyKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHJlYWQtb25seSBwZXJtaXNzaW9ucy4gRXhwbGljaXRseSBhbGxvd3Mgb3BlcmF0b3JzIHRvIGdhaW4gZGlyZWN0IGFjY2VzcyB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCByZXNvdXJjZXMgcmVsYXRlZCB0byBBV1MgRWxhc3RpYyBCZWFuc3RhbGsgYXBwbGljYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa1JlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVDb3JlIChFbGFzdGljIEJlYW5zdGFsayBvcGVyYXRpb25zIHJvbGUpIEFsbG93cyBjb3JlIG9wZXJhdGlvbiBvZiBhIHdlYiBzZXJ2aWNlIGVudmlyb25tZW50LiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrUm9sZUNvcmUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVDb3JlKTtcbiAgICB9XG5cbiAgICAvKiogKEVsYXN0aWMgQmVhbnN0YWxrIG9wZXJhdGlvbnMgcm9sZSkgQWxsb3dzIGFuIGVudmlyb25tZW50IHRvIG1hbmFnZSBBbWF6b24gQ2xvdWRXYXRjaCBMb2dzIGxvZyBncm91cHMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtSb2xlQ1dMKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtSb2xlQ1dMKTtcbiAgICB9XG5cbiAgICAvKiogKEVsYXN0aWMgQmVhbnN0YWxrIG9wZXJhdGlvbnMgcm9sZSkgQWxsb3dzIGEgbXVsdGljb250YWluZXIgRG9ja2VyIGVudmlyb25tZW50IHRvIG1hbmFnZSBBbWF6b24gRUNTIGNsdXN0ZXJzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrUm9sZUVDUygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrUm9sZUVDUyk7XG4gICAgfVxuXG4gICAgLyoqIChFbGFzdGljIEJlYW5zdGFsayBvcGVyYXRpb25zIHJvbGUpIEFsbG93cyBhbiBlbnZpcm9ubWVudCB0byBpbnRlZ3JhdGUgYW4gQW1hem9uIFJEUyBpbnN0YW5jZS4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVSRFMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVSRFMpO1xuICAgIH1cblxuICAgIC8qKiAoRWxhc3RpYyBCZWFuc3RhbGsgb3BlcmF0aW9ucyByb2xlKSBBbGxvd3MgYW4gZW52aXJvbm1lbnQgdG8gZW5hYmxlIEFtYXpvbiBTTlMgdG9waWMgaW50ZWdyYXRpb24uICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtSb2xlU05TKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtSb2xlU05TKTtcbiAgICB9XG5cbiAgICAvKiogKEVsYXN0aWMgQmVhbnN0YWxrIG9wZXJhdGlvbnMgcm9sZSkgQWxsb3dzIGEgd29ya2VyIGVudmlyb25tZW50IHRpZXIgdG8gY3JlYXRlIGFuIEFtYXpvbiBEeW5hbW9EQiB0YWJsZSBhbmQgYW4gQW1hem9uIFNRUyBxdWV1ZS4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVXb3JrZXJUaWVyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtSb2xlV29ya2VyVGllcik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIG9uIGEgZGVwcmVjYXRpb24gcGF0aC4gU2VlIGRvY3VtZW50YXRpb24gZm9yIGd1aWRhbmNlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2JlYW5zdGFsay9sYXRlc3QvZGcvaWFtLXNlcnZpY2Vyb2xlLmh0bWwuIEFXUyBFbGFzdGljIEJlYW5zdGFsayBTZXJ2aWNlIHJvbGUgcG9saWN5IHdoaWNoIGdyYW50cyBwZXJtaXNzaW9ucyB0byBjcmVhdGUgJiBtYW5hZ2UgcmVzb3VyY2VzIChpLmUuOiBBdXRvU2NhbGluZywgRUMyLCBTMywgQ2xvdWRGb3JtYXRpb24sIEVMQiwgZXRjLikgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtTZXJ2aWNlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtTZXJ2aWNlKTtcbiAgICB9XG5cbiAgICAvKiogQVdTIEVsYXN0aWMgQmVhbnN0YWxrIFNlcnZpY2UgTGlua2VkIFJvbGUgcG9saWN5IHdoaWNoIGdyYW50cyBwZXJtaXNzaW9ucyB0byBjcmVhdGUgJiBtYW5hZ2UgcmVzb3VyY2VzIChpLmUuOiBBdXRvU2NhbGluZywgRUMyLCBTMywgQ2xvdWRGb3JtYXRpb24sIEVMQiwgZXRjLikgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHRoZSBpbnN0YW5jZXMgaW4geW91ciB3ZWIgc2VydmVyIGVudmlyb25tZW50IGFjY2VzcyB0byB1cGxvYWQgbG9nIGZpbGVzIHRvIEFtYXpvbiBTMy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa1dlYlRpZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa1dlYlRpZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHRoZSBpbnN0YW5jZXMgaW4geW91ciB3b3JrZXIgZW52aXJvbm1lbnQgYWNjZXNzIHRvIHVwbG9hZCBsb2cgZmlsZXMgdG8gQW1hem9uIFMzLCB0byB1c2UgQW1hem9uIFNRUyB0byBtb25pdG9yIHlvdXIgYXBwbGljYXRpb24ncyBqb2IgcXVldWUsIHRvIHVzZSBBbWF6b24gRHluYW1vREIgdG8gcGVyZm9ybSBsZWFkZXIgZWxlY3Rpb24sIGFuZCB0byBBbWF6b24gQ2xvdWRXYXRjaCB0byBwdWJsaXNoIG1ldHJpY3MgZm9yIGhlYWx0aCBtb25pdG9yaW5nLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrV29ya2VyVGllcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrV29ya2VyVGllcik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBpbnN0YWxsaW5nIHRoZSBBV1MgUmVwbGljYXRpb24gQWdlbnQsIHdoaWNoIGlzIHVzZWQgd2l0aCBBV1MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoRFJTKSB0byByZWNvdmVyIGV4dGVybmFsIHNlcnZlcnMgdG8gQVdTLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMgd2hvc2UgY3JlZGVudGlhbHMgeW91IHByb3ZpZGUgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gc3RlcCBvZiB0aGUgQVdTIFJlcGxpY2F0aW9uIEFnZW50LiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUFnZW50SW5zdGFsbGF0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5QWdlbnRJbnN0YWxsYXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgdXNpbmcgdGhlIEFXUyBSZXBsaWNhdGlvbiBBZ2VudCwgd2hpY2ggaXMgdXNlZCB3aXRoIEFXUyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpIHRvIHJlY292ZXIgc291cmNlIHNlcnZlcnMgdG8gQVdTLiBXZSBkbyBub3QgcmVjb21tZW5kIHRoYXQgeW91IGF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlBZ2VudFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUFnZW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIHB1YmxpYyBBUElzIG9mIEFXUyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpLCBhcyB3ZWxsIGFzIHBlcm1pc3Npb25zIHRvIHJlYWQgS01TIGtleSwgTGljZW5zZSBNYW5hZ2VyLCBSZXNvdXJjZSBHcm91cHMsIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcsIElBTSwgYW5kIEVDMiBpbmZvcm1hdGlvbi4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5Q29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgcHVibGljIEFQSXMgb2YgQVdTIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKEFXUyBEUlMpLCBhcyB3ZWxsIGFzIGFsbCBwdWJsaWMgQVBJcyBpbiBvdGhlciBBV1Mgc2VydmljZXMgdXNlZCBieSBBV1MgRFJTIENvbnNvbGUuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUNvbnNvbGVGdWxsQWNjZXNzVjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlDb25zb2xlRnVsbEFjY2Vzc1YyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgdG8gdGhlIEFXUyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IENvbnZlcnNpb24gc2VydmVyJ3MgaW5zdGFuY2Ugcm9sZS4gVGhpcyBwb2xpY3kgYWxsb3dzIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKERSUykgQ29udmVyc2lvbiBTZXJ2ZXJzLCB3aGljaCBhcmUgRUMyIGluc3RhbmNlcyBsYXVuY2hlZCBieSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5LCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBEUlMgc2VydmljZS4gQW4gSUFNIHJvbGUgd2l0aCB0aGlzIHBvbGljeSBpcyBhdHRhY2hlZCAoYXMgYW4gRUMyIEluc3RhbmNlIFByb2ZpbGUpIGJ5IERSUyB0byB0aGUgRFJTIENvbnZlcnNpb24gU2VydmVycywgd2hpY2ggYXJlIGF1dG9tYXRpY2FsbHkgbGF1bmNoZWQgYW5kIHRlcm1pbmF0ZWQgYnkgRFJTLCB3aGVuIG5lZWRlZC4gV2UgZG8gbm90IHJlY29tbWVuZCB0aGF0IHlvdSBhdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuIERSUyBDb252ZXJzaW9uIFNlcnZlcnMgYXJlIHVzZWQgYnkgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSB3aGVuIHVzZXJzIGNob29zZSB0byByZWNvdmVyIHNvdXJjZSBzZXJ2ZXJzIHVzaW5nIHRoZSBEUlMgY29uc29sZSwgQ0xJLCBvciBBUEkuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5Q29udmVyc2lvblNlcnZlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUNvbnZlcnNpb25TZXJ2ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgQVdTIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKERSUykgdG8gc3VwcG9ydCBjcm9zcy1hY2NvdW50IHJlcGxpY2F0aW9uIGFuZCBjcm9zcy1hY2NvdW50IGZhaWxiYWNrLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUNyb3NzQWNjb3VudFJlcGxpY2F0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5Q3Jvc3NBY2NvdW50UmVwbGljYXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgaW5zdGFsbGluZyBhbmQgdXNpbmcgdGhlIEFXUyBSZXBsaWNhdGlvbiBBZ2VudCwgd2hpY2ggaXMgdXNlZCBieSBBV1MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoRFJTKSB0byByZWNvdmVyIHNvdXJjZSBzZXJ2ZXJzIHRoYXQgcnVuIG9uIEVDMiAoY3Jvc3MtcmVnaW9uIG9yIGNyb3NzLUFaKS4gQW4gSUFNIHJvbGUgd2l0aCB0aGlzIHBvbGljeSBzaG91bGQgYmUgYXR0YWNoZWQgKGFzIGFuIEVDMiBJbnN0YW5jZSBQcm9maWxlKSB0byB0aGUgRUMyIEluc3RhbmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlFYzJJbnN0YW5jZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUVjMkluc3RhbmNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogWW91IGNhbiBhdHRhY2ggdGhlIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5RmFpbGJhY2tJbnN0YWxsYXRpb25Qb2xpY3kgcG9saWN5IHRvIHlvdXIgSUFNIGlkZW50aXRpZXMuICBUaGlzIHBvbGljeSBhbGxvd3MgaW5zdGFsbGluZyB0aGUgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSBGYWlsYmFjayBDbGllbnQsIHdoaWNoIGlzIHVzZWQgdG8gZmFpbGJhY2sgUmVjb3ZlcnkgSW5zdGFuY2VzIGJhY2sgdG8geW91ciBvcmlnaW5hbCBzb3VyY2UgaW5mcmFzdHJ1Y3R1cmUuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcyB3aG9zZSBjcmVkZW50aWFscyB5b3UgcHJvdmlkZSB3aGVuIHJ1bm5pbmcgdGhlIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgRmFpbGJhY2sgQ2xpZW50LiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUZhaWxiYWNrSW5zdGFsbGF0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5RmFpbGJhY2tJbnN0YWxsYXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgdXNpbmcgdGhlIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgRmFpbGJhY2sgQ2xpZW50LCB3aGljaCBpcyB1c2VkIHRvIGZhaWxiYWNrIFJlY292ZXJ5IEluc3RhbmNlcyBiYWNrIHRvIHlvdXIgb3JpZ2luYWwgc291cmNlIGluZnJhc3RydWN0dXJlLiBXZSBkbyBub3QgcmVjb21tZW5kIHRoYXQgeW91IGF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlGYWlsYmFja1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUZhaWxiYWNrUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIHlvdSB0byB1c2UgQW1hem9uIFNTTSBhbmQgYWRkaXRpb25hbCBzZXJ2aWNlcyByZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBydW4gcG9zdC1sYXVuY2ggYWN0aW9ucyBpbiBBV1MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoQVdTIERSUykuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSByb2xlcyBvciB1c2Vycy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlMYXVuY2hBY3Rpb25zUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5TGF1bmNoQWN0aW9uc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBBV1MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoRFJTKSB0byBzdXBwb3J0IG5ldHdvcmsgcmVwbGljYXRpb24uICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5TmV0d29ya1JlcGxpY2F0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5TmV0d29ya1JlcGxpY2F0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogWW91IGNhbiBhdHRhY2ggdGhlIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5UmVhZE9ubHlBY2Nlc3MgcG9saWN5IHRvIHlvdXIgSUFNIGlkZW50aXRpZXMuICBUaGlzIHBvbGljeSBwcm92aWRlcyBwZXJtaXNzaW9ucyB0byBhbGwgcmVhZC1vbmx5IHB1YmxpYyBBUElzIG9mIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKERSUyksIGFzIHdlbGwgYXMgc29tZSByZWFkLW9ubHkgQVBJcyBvZiBvdGhlciBBV1Mgc2VydmljZXMgdGhhdCBhcmUgcmVxdWlyZWQgaW4gb3JkZXIgdG8gbWFrZSBmdWxsIHJlYWQtb25seSB1c2Ugb2YgdGhlIERSUyBjb25zb2xlLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIHRvIHRoZSBpbnN0YW5jZSByb2xlIG9mIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkncyBSZWNvdmVyeSBJbnN0YW5jZS4gIFRoaXMgcG9saWN5IGFsbG93cyB0aGUgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoRFJTKSBSZWNvdmVyeSBJbnN0YW5jZSwgd2hpY2ggYXJlIEVDMiBpbnN0YW5jZXMgbGF1bmNoZWQgYnkgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAtIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIERSUyBzZXJ2aWNlLCBhbmQgdG8gYmUgYWJsZSB0byBmYWlsYmFjayB0byB0aGVpciBvcmlnaW5hbCBzb3VyY2UgaW5mcmFzdHJ1Y3R1cmUuIEFuIElBTSByb2xlIHdpdGggdGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgKGFzIGFuIEVDMiBJbnN0YW5jZSBQcm9maWxlKSBieSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IHRvIHRoZSBEUlMgUmVjb3ZlcnkgSW5zdGFuY2VzLiBXZSBkbyBub3QgcmVjb21tZW5kIHRoYXQgeW91IGF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlSZWNvdmVyeUluc3RhbmNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5UmVjb3ZlcnlJbnN0YW5jZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIHRvIHRoZSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IFJlcGxpY2F0aW9uIHNlcnZlcidzIGluc3RhbmNlIHJvbGUuIFRoaXMgcG9saWN5IGFsbG93cyB0aGUgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoRFJTKSBSZXBsaWNhdGlvbiBTZXJ2ZXJzLCB3aGljaCBhcmUgRUMyIGluc3RhbmNlcyBsYXVuY2hlZCBieSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IC0gdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgRFJTIHNlcnZpY2UsIGFuZCB0byBjcmVhdGUgRUJTIHNuYXBzaG90cyBpbiB5b3VyIEFXUyBhY2NvdW50LiBBbiBJQU0gcm9sZSB3aXRoIHRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIChhcyBhbiBFQzIgSW5zdGFuY2UgUHJvZmlsZSkgYnkgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSB0byB0aGUgRFJTIFJlcGxpY2F0aW9uIFNlcnZlcnMgd2hpY2ggYXJlIGF1dG9tYXRpY2FsbHkgbGF1bmNoZWQgYW5kIHRlcm1pbmF0ZWQgYnkgRFJTLCBhcyBuZWVkZWQuIERSUyBSZXBsaWNhdGlvbiBTZXJ2ZXJzIGFyZSB1c2VkIHRvIGZhY2lsaXRhdGUgZGF0YSByZXBsaWNhdGlvbiBmcm9tIHlvdXIgZXh0ZXJuYWwgc2VydmVycyB0byBBV1MsIGFzIHBhcnQgb2YgdGhlIHJlY292ZXJ5IHByb2Nlc3MgbWFuYWdlZCBieSBEUlMuIFdlIGRvIG5vdCByZWNvbW1lbmQgdGhhdCB5b3UgYXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVJlcGxpY2F0aW9uU2VydmVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5UmVwbGljYXRpb25TZXJ2ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKERSUykgcmVzb3VyY2VzIHN1Y2ggYXMgc291cmNlIHNlcnZlcnMgYW5kIGpvYnMuIEl0IGFsc28gYWxsb3dzIGNyZWF0aW5nIGEgY29udmVydGVkIHNuYXBzaG90IGFuZCBzaGFyaW5nIHRoYXQgRUJTIHNuYXBzaG90IHdpdGggYSBzcGVjaWZpYyBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVN0YWdpbmdBY2NvdW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5U3RhZ2luZ0FjY291bnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyB1c2VkIGJ5IEFXUyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpIHRvIHJlY292ZXIgc291cmNlIHNlcnZlcnMgaW50byBhIHNlcGFyYXRlIHRhcmdldCBhY2NvdW50IGFuZCB0byBhbGxvdyBmYWlsaW5nIGJhY2suIFdlIGRvIG5vdCByZWNvbW1lbmQgdGhhdCB5b3UgYXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVN0YWdpbmdBY2NvdW50UG9saWN5VjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlTdGFnaW5nQWNjb3VudFBvbGljeVYyKTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSBMaW5rZWQgUm9sZSBQb2xpY3kgZm9yIEFXUyBFbGFzdGljIExvYWQgQmFsYW5jaW5nIENvbnRyb2wgUGxhbmUgLSBDbGFzc2ljICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNMb2FkQmFsYW5jaW5nQ2xhc3NpY1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNMb2FkQmFsYW5jaW5nQ2xhc3NpY1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSBMaW5rZWQgUm9sZSBQb2xpY3kgZm9yIEFXUyBFbGFzdGljIExvYWQgQmFsYW5jaW5nIENvbnRyb2wgUGxhbmUgKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0xvYWRCYWxhbmNpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljTG9hZEJhbGFuY2luZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYUNvbm5lY3QgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGVtZW50YWxNZWRpYUNvbm5lY3RGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhQ29ubmVjdEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBFbGVtZW50YWwgTWVkaWFDb25uZWN0IHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFDb25uZWN0UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFDb25uZWN0UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhQ29udmVydCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFDb252ZXJ0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYUNvbnZlcnRGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhQ29udmVydCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFDb252ZXJ0UmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFDb252ZXJ0UmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhTGl2ZSByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFMaXZlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYUxpdmVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhTGl2ZSByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFMaXZlUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFMaXZlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhUGFja2FnZSByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFQYWNrYWdlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYVBhY2thZ2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhUGFja2FnZSByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFQYWNrYWdlUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFQYWNrYWdlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhUGFja2FnZVYyIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFQYWNrYWdlVjJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhUGFja2FnZVYyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYVBhY2thZ2VWMiByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhUGFja2FnZVYyUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFQYWNrYWdlVjJSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgcmVhZCBhbmQgd3JpdGUgYWNjZXNzIHRvIGFsbCBNZWRpYVN0b3JlIEFQSXMgKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFTdG9yZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFTdG9yZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgcGVybWlzc2lvbnMgZm9yIE1lZGlhU3RvcmUgQVBJcyAqL1xuICAgIHB1YmxpYyBBV1NFbGVtZW50YWxNZWRpYVN0b3JlUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFTdG9yZVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYVRhaWxvciByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFUYWlsb3JGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhVGFpbG9yRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYVRhaWxvciByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFUYWlsb3JSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYVRhaWxvclJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBlbmhhbmNlZCBjbGFzc2ljIG5ldHdvcmtpbmcgbWFuYWdlbWVudCBmZWF0dXJlLiAqL1xuICAgIHB1YmxpYyBBV1NFbmhhbmNlZENsYXNzaWNOZXR3b3JraW5nTWFuZ2VtZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VuaGFuY2VkQ2xhc3NpY05ldHdvcmtpbmdNYW5nZW1lbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjb25zb2xlIGZ1bGwgYWNjZXNzIHRvIEFXUyBFbnRpdHkgUmVzb2x1dGlvbiBhbmQgcmVsYXRlZCBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTRW50aXR5UmVzb2x1dGlvbkNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VudGl0eVJlc29sdXRpb25Db25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIEVudGl0eSBSZXNvbHV0aW9uIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTRW50aXR5UmVzb2x1dGlvbkNvbnNvbGVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbnRpdHlSZXNvbHV0aW9uQ29uc29sZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHRoZSBGYXVsdCBJbmplY3Rpb24gU2ltdWxhdG9yIFNlcnZpY2UgcGVybWlzc2lvbiBpbiBFQzIgYW5kIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzIHRvIHBlcmZvcm0gRklTIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yRUMyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yRUMyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHRoZSBGYXVsdCBJbmplY3Rpb24gU2ltdWxhdG9yIFNlcnZpY2UgcGVybWlzc2lvbiBpbiBFQ1MgYW5kIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzIHRvIHBlcmZvcm0gRklTIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yRUNTQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yRUNTQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHRoZSBGYXVsdCBJbmplY3Rpb24gU2ltdWxhdG9yIFNlcnZpY2UgcGVybWlzc2lvbiBpbiBFS1MgYW5kIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzIHRvIHBlcmZvcm0gRklTIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yRUtTQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yRUtTQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHRoZSBGYXVsdCBJbmplY3Rpb24gU2ltdWxhdG9yIFNlcnZpY2UgcGVybWlzc2lvbiBpbiBFQzIgbmV0d29ya2luZyBhbmQgb3RoZXIgcmVxdWlyZWQgc2VydmljZXMgdG8gcGVyZm9ybSBGSVMgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTRmF1bHRJbmplY3Rpb25TaW11bGF0b3JOZXR3b3JrQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yTmV0d29ya0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyB0aGUgRmF1bHQgSW5qZWN0aW9uIFNpbXVsYXRvciBTZXJ2aWNlIHBlcm1pc3Npb24gaW4gUkRTIGFuZCBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcyB0byBwZXJmb3JtIEZJUyBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NGYXVsdEluamVjdGlvblNpbXVsYXRvclJEU0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NGYXVsdEluamVjdGlvblNpbXVsYXRvclJEU0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyB0aGUgRmF1bHQgSW5qZWN0aW9uIFNpbXVsYXRvciBTZXJ2aWNlIHBlcm1pc3Npb24gaW4gU1NNIGFuZCBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcyB0byBwZXJmb3JtIEZJUyBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NGYXVsdEluamVjdGlvblNpbXVsYXRvclNTTUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NGYXVsdEluamVjdGlvblNpbXVsYXRvclNTTUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFtYXpvbiBGaW5TcGFjZSAqL1xuICAgIHB1YmxpYyBBV1NGaW5TcGFjZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZpblNwYWNlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBGdWxsIGFjY2VzcyBmb3IgQVdTIEZNIEFkbWluaXN0cmF0b3IgKi9cbiAgICBwdWJsaWMgQVdTRk1BZG1pbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRk1BZG1pbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBSZWFkIG9ubHkgYWNjZXNzIGZvciBBV1MgRk0gQWRtaW5pc3RyYXRvciB0aGF0IGFsbG93cyBtb25pdG9yaW5nIEFXUyBGTSBvcGVyYXRpb25zICovXG4gICAgcHVibGljIEFXU0ZNQWRtaW5SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NGTUFkbWluUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBXQUYgYWN0aW9ucyBmb3IgQVdTIEZpcmV3YWxsIE1hbmFnZXIgbWVtYmVyIGFjY291bnRzICovXG4gICAgcHVibGljIEFXU0ZNTWVtYmVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRk1NZW1iZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIE1hbmFnZWQgcG9saWN5IGZvciBBV1MgRm9yIFdvcmRwcmVzcyBQbHVnaW4gKi9cbiAgICBwdWJsaWMgQVdTRm9yV29yZFByZXNzUGx1Z2luUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZvcldvcmRQcmVzc1BsdWdpblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB3aGljaCBhbGxvd3MgQVdTIENvZGUgQ29ubmVjdGlvbnMgdG8gc3luYyBjb250ZW50IGZyb20geW91ciBnaXQgcmVwb3NpdG9yeSAqL1xuICAgIHB1YmxpYyBBV1NHaXRTeW5jU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR2l0U3luY1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFXUyBHbG9iYWwgQWNjZWxlcmF0b3IgdG8gbWFuYWdlIEVDMiBFbGFzdGljIE5ldHdvcmsgSW50ZXJmYWNlcyBhbmQgU2VjdXJpdHkgR3JvdXBzLiAqL1xuICAgIHB1YmxpYyBBV1NHbG9iYWxBY2NlbGVyYXRvclNMUlBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHbG9iYWxBY2NlbGVyYXRvclNMUlBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBHbHVlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBBV1NHbHVlQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR2x1ZUNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEdsdWUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBhY2Nlc3MgdG8gc2FnZW1ha2VyIG5vdGVib29rIGluc3RhbmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTR2x1ZUNvbnNvbGVTYWdlTWFrZXJOb3RlYm9va0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR2x1ZUNvbnNvbGVTYWdlTWFrZXJOb3RlYm9va0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgR2x1ZSBEYXRhQnJldyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuIEFsc28gcHJvdmlkZXMgc2VsZWN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIChlLmcuLCBTMywgS01TLCBHbHVlKS4gKi9cbiAgICBwdWJsaWMgQXdzR2x1ZURhdGFCcmV3RnVsbEFjY2Vzc1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Bd3NHbHVlRGF0YUJyZXdGdWxsQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb24gdG8gZ2x1ZSB0byBwZXJmb3JtIGFjdGlvbiBvbiB1c2VyJ3MgZ2x1ZSBkYXRhIGNhdGFsb2csIHRoaXMgcG9saWN5IGFsc28gcHJvdmlkZXMgcGVybWlzc2lvbiB0byBlYzIgYWN0aW9ucyB0byBhbGxvdyBnbHVlIHRvIGNyZWF0ZSBFTkkgdG8gY29ubmVjdCB0byByZXNvdXJjZXMgaW4gdGhlIFZQQywgYWxzbyBhbGxvdyBnbHVlIHRvIGFjY2VzcyByZWdpc3RlcmVkIGRhdGEgaW4gbGFrZWZvcm1hdGlvbiBhbmQgcGVybWlzc2lvbiB0byBhY2Nlc3MgdXNlcidzIGNsb3Vkd2F0Y2ggKi9cbiAgICBwdWJsaWMgQVdTR2x1ZURhdGFCcmV3U2VydmljZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR2x1ZURhdGFCcmV3U2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIEdsdWUgU2NoZW1hIFJlZ2lzdHJ5IFNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQVdTR2x1ZVNjaGVtYVJlZ2lzdHJ5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHbHVlU2NoZW1hUmVnaXN0cnlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZG9ubHkgYWNjZXNzIHRvIHRoZSBBV1MgR2x1ZSBTY2hlbWEgUmVnaXN0cnkgU2VydmljZSAqL1xuICAgIHB1YmxpYyBBV1NHbHVlU2NoZW1hUmVnaXN0cnlSZWFkb25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHbHVlU2NoZW1hUmVnaXN0cnlSZWFkb25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIEdsdWUgc2VydmljZSByb2xlIHdoaWNoIGFsbG93cyBjdXN0b21lciB0byBtYW5hZ2Ugbm90ZWJvb2sgc2VydmVyICovXG4gICAgcHVibGljIEFXU0dsdWVTZXJ2aWNlTm90ZWJvb2tSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dsdWVTZXJ2aWNlTm90ZWJvb2tSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBBV1MgR2x1ZSBzZXJ2aWNlIHJvbGUgd2hpY2ggYWxsb3dzIGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBFQzIsIFMzLCBhbmQgQ2xvdWR3YXRjaCBMb2dzICovXG4gICAgcHVibGljIEFXU0dsdWVTZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHbHVlU2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0aGF0IGFsbG93cyB1c2VycyB0byBjcmVhdGUgYW5kIHVzZSBvbmx5IHRoZSBub3RlYm9vayBzZXNzaW9ucyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHVzZXIuIFRoaXMgcG9saWN5IGFsc28gaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gZXhwbGljaXRseSBhbGxvdyB1c2VycyB0byBwYXNzIGEgcmVzdHJpY3RlZCBHbHVlIHNlc3Npb24gcm9sZS4gKi9cbiAgICBwdWJsaWMgQXdzR2x1ZVNlc3Npb25Vc2VyUmVzdHJpY3RlZE5vdGVib29rUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkF3c0dsdWVTZXNzaW9uVXNlclJlc3RyaWN0ZWROb3RlYm9va1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBBV1MgR2x1ZSByZXNvdXJjZXMgZXhjZXB0IGZvciBzZXNzaW9ucy4gQWxsb3dzIHVzZXJzIHRvIGNyZWF0ZSBhbmQgdXNlIG9ubHkgdGhlIG5vdGVib29rIHNlc3Npb25zIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdXNlci4gVGhpcyBwb2xpY3kgYWxzbyBpbmNsdWRlcyBvdGhlciBwZXJtaXNzaW9ucyBuZWVkZWQgYnkgQVdTIEdsdWUgdG8gbWFuYWdlIEdsdWUgcmVzb3VyY2VzIGluIG90aGVyIEFXUyBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQXdzR2x1ZVNlc3Npb25Vc2VyUmVzdHJpY3RlZE5vdGVib29rU2VydmljZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXdzR2x1ZVNlc3Npb25Vc2VyUmVzdHJpY3RlZE5vdGVib29rU2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0aGF0IGFsbG93cyB1c2VycyB0byBjcmVhdGUgYW5kIHVzZSBvbmx5IHRoZSBpbnRlcmFjdGl2ZSBzZXNzaW9ucyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHVzZXIuIFRoaXMgcG9saWN5IGFsc28gaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gZXhwbGljaXRseSBhbGxvdyB1c2VycyB0byBwYXNzIGEgcmVzdHJpY3RlZCBHbHVlIHNlc3Npb24gcm9sZS4gKi9cbiAgICBwdWJsaWMgQXdzR2x1ZVNlc3Npb25Vc2VyUmVzdHJpY3RlZFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Bd3NHbHVlU2Vzc2lvblVzZXJSZXN0cmljdGVkUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIEFXUyBHbHVlIHJlc291cmNlcyBleGNlcHQgZm9yIHNlc3Npb25zLiBBbGxvd3MgdXNlcnMgdG8gY3JlYXRlIGFuZCB1c2Ugb25seSB0aGUgaW50ZXJhY3RpdmUgc2Vzc2lvbnMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB1c2VyLiBUaGlzIHBvbGljeSBhbHNvIGluY2x1ZGVzIG90aGVyIHBlcm1pc3Npb25zIG5lZWRlZCBieSBBV1MgR2x1ZSB0byBtYW5hZ2UgR2x1ZSByZXNvdXJjZXMgaW4gb3RoZXIgQVdTIHNlcnZpY2VzICovXG4gICAgcHVibGljIEF3c0dsdWVTZXNzaW9uVXNlclJlc3RyaWN0ZWRTZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Bd3NHbHVlU2Vzc2lvblVzZXJSZXN0cmljdGVkU2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3Mgd2l0aGluIEFtYXpvbiBHcmFmYW5hIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHdvcmtzcGFjZXMgZm9yIHRoZSBlbnRpcmUgb3JnYW5pemF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NHcmFmYW5hQWNjb3VudEFkbWluaXN0cmF0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR3JhZmFuYUFjY291bnRBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNzIHRvIHJlYWQgb25seSBvcGVyYXRpb25zIGluIEFtYXpvbiBHcmFmYW5hLiAqL1xuICAgIHB1YmxpYyBBV1NHcmFmYW5hQ29uc29sZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dyYWZhbmFDb25zb2xlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBvbmx5IHRoZSBhYmlsaXR5IHRvIHVwZGF0ZSB1c2VyIGFuZCBncm91cCBwZXJtaXNzaW9ucyBmb3IgQVdTIEdyYWZhbmEgd29ya3NwYWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTR3JhZmFuYVdvcmtzcGFjZVBlcm1pc3Npb25NYW5hZ2VtZW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dyYWZhbmFXb3Jrc3BhY2VQZXJtaXNzaW9uTWFuYWdlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFiaWxpdHkgdG8gdXBkYXRlIElBTSBJZGVudGl0eSBDZW50ZXIgKElkQykgdXNlciBhbmQgZ3JvdXAgcGVybWlzc2lvbnMgZm9yIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgd29ya3NwYWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTR3JhZmFuYVdvcmtzcGFjZVBlcm1pc3Npb25NYW5hZ2VtZW50VjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR3JhZmFuYVdvcmtzcGFjZVBlcm1pc3Npb25NYW5hZ2VtZW50VjIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBnaXZlcyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIEdyZWVuZ3Jhc3MgY29uZmlndXJhdGlvbiwgbWFuYWdlbWVudCBhbmQgZGVwbG95bWVudCBhY3Rpb25zICovXG4gICAgcHVibGljIEFXU0dyZWVuZ3Jhc3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dyZWVuZ3Jhc3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ2l2ZXMgcmVhZCBvbmx5IGFjY2VzcyB0byB0aGUgQVdTIEdyZWVuZ3Jhc3MgY29uZmlndXJhdGlvbiwgbWFuYWdlbWVudCBhbmQgZGVwbG95bWVudCBhY3Rpb25zICovXG4gICAgcHVibGljIEFXU0dyZWVuZ3Jhc3NSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHcmVlbmdyYXNzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIEFXUyBHcmVlbmdyYXNzIHNlcnZpY2Ugcm9sZSB3aGljaCBhbGxvd3MgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIEFXUyBMYW1iZGEgYW5kIEFXUyBJb1QgdGhpbmcgc2hhZG93cy4gKi9cbiAgICBwdWJsaWMgQVdTR3JlZW5ncmFzc1Jlc291cmNlQWNjZXNzUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHcmVlbmdyYXNzUmVzb3VyY2VBY2Nlc3NSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdGhlIERhdGFmbG93IEVuZHBvaW50IEluc3RhbmNlIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgQVdTIEdyb3VuZCBTdGF0aW9uIEFnZW50ICovXG4gICAgcHVibGljIEFXU0dyb3VuZFN0YXRpb25BZ2VudEluc3RhbmNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dyb3VuZFN0YXRpb25BZ2VudEluc3RhbmNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBIZWFsdGggdG8gZW5hYmxlIHRoZSBIZWFsdGggZXZlbnQgcHJvY2Vzc29yIGZlYXR1cmUuICovXG4gICAgcHVibGljIEFXU0hlYWx0aEV2ZW50UHJvY2Vzc29yU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSGVhbHRoRXZlbnRQcm9jZXNzb3JTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIEhlYWx0aCBBcGlzIGFuZCBOb3RpZmljYXRpb25zIGFuZCB0aGUgUGVyc29uYWwgSGVhbHRoIERhc2hib2FyZCAqL1xuICAgIHB1YmxpYyBBV1NIZWFsdGhGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0hlYWx0aEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgSGVhbHRoIEltYWdpbmcgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTSGVhbHRoSW1hZ2luZ0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSGVhbHRoSW1hZ2luZ0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBIZWFsdGggSW1hZ2luZyBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NIZWFsdGhJbWFnaW5nUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSGVhbHRoSW1hZ2luZ1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdGhlIGxpc3Qgb2YgYWN0aW9ucyB0aGF0IGFyZSBhbGxvd2VkIGZvciByb2xlcyBhc3N1bWVkIHdpdGggdGhlIElBTSBJZGVudGl0eSBDZW50ZXIgaWRlbnRpdHkgY29udGV4dC4gQVdTIFNlY3VyaXR5IFRva2VuIFNlcnZpY2UgKEFXUyBTVFMpIGF1dG9tYXRpY2FsbHkgYXR0YWNoZXMgdGhpcyBwb2xpY3kgdG8gYXNzdW1lZCByb2xlcy4gVGhlIGlkZW50aXR5IGNvbnRleHQgaXMgcGFzc2VkIGFzIFByb3ZpZGVkQ29udGV4dC4gKi9cbiAgICBwdWJsaWMgQVdTSUFNSWRlbnRpdHlDZW50ZXJBbGxvd0xpc3RGb3JJZGVudGl0eUNvbnRleHQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSUFNSWRlbnRpdHlDZW50ZXJBbGxvd0xpc3RGb3JJZGVudGl0eUNvbnRleHQpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgdG8gdGhlIElkZW50aXR5IFN5bmMgc2VydmljZSAqL1xuICAgIHB1YmxpYyBBV1NJZGVudGl0eVN5bmNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lkZW50aXR5U3luY0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBSZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBJZGVudGl0eSBTeW5jIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQVdTSWRlbnRpdHlTeW5jUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSWRlbnRpdHlTeW5jUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgQVdTIEltYWdlIEJ1aWxkZXIgYWN0aW9ucyBhbmQgcmVzb3VyY2Ugc2NvcGVkIGFjY2VzcyB0byByZWxhdGVkIEFXUyBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTSW1hZ2VCdWlsZGVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJbWFnZUJ1aWxkZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBhbGwgQVdTIEltYWdlIEJ1aWxkZXIgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTSW1hZ2VCdWlsZGVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW1hZ2VCdWlsZGVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgdG8gdGhlIGpvYnMgY3JlYXRlZCB1bmRlciB0aGUgQVdTIGFjY291bnQuICovXG4gICAgcHVibGljIEFXU0ltcG9ydEV4cG9ydEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW1wb3J0RXhwb3J0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gdGhlIGpvYnMgY3JlYXRlZCB1bmRlciB0aGUgQVdTIGFjY291bnQuICovXG4gICAgcHVibGljIEFXU0ltcG9ydEV4cG9ydFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ltcG9ydEV4cG9ydFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIEluY2lkZW50IE1hbmFnZXIgcGVybWlzc2lvbnMgdG8gY2FsbCBvdGhlciBBV1Mgc2VydmljZXMgYXMgYSBwYXJ0IG9mIG1hbmFnaW5nIGFuIGluY2lkZW50LiAqL1xuICAgIHB1YmxpYyBBV1NJbmNpZGVudE1hbmFnZXJJbmNpZGVudEFjY2Vzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0luY2lkZW50TWFuYWdlckluY2lkZW50QWNjZXNzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gc3RhcnQsIHZpZXcsIGFuZCB1cGRhdGUgaW5jaWRlbnRzIHdpdGggZnVsbCBhY2Nlc3MgdG8gY3VzdG9tIHRpbWVsaW5lIGV2ZW50cyAmIHJlbGF0ZWQgaXRlbXMuIEFzc2lnbiB0aGlzIHBvbGljeSB0byB1c2VycyB3aG8gd2lsbCBjcmVhdGUgYW5kIHJlc29sdmUgaW5jaWRlbnRzLiAqL1xuICAgIHB1YmxpYyBBV1NJbmNpZGVudE1hbmFnZXJSZXNvbHZlckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJbmNpZGVudE1hbmFnZXJSZXNvbHZlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBJbmNpZGVudCBNYW5hZ2VyIHBlcm1pc3Npb24gdG8gbWFuYWdlIGluY2lkZW50IHJlY29yZHMgYW5kIHJlbGF0ZWQgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NJbmNpZGVudE1hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJbmNpZGVudE1hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIElvVCBBbmFseXRpY3MuICovXG4gICAgcHVibGljIEFXU0lvVEFuYWx5dGljc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UQW5hbHl0aWNzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gSW9UIEFuYWx5dGljcy4gKi9cbiAgICBwdWJsaWMgQVdTSW9UQW5hbHl0aWNzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UQW5hbHl0aWNzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBnaXZlcyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIElvVCBjb25maWd1cmF0aW9uIGFjdGlvbnMgKi9cbiAgICBwdWJsaWMgQVdTSW9UQ29uZmlnQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVENvbmZpZ0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdpdmVzIHJlYWQgb25seSBhY2Nlc3MgdG8gdGhlIEFXUyBJb1QgY29uZmlndXJhdGlvbiBhY3Rpb25zICovXG4gICAgcHVibGljIEFXU0lvVENvbmZpZ1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVENvbmZpZ1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ2l2ZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFXUyBJb1QgbWVzc2FnaW5nIGFjdGlvbnMgKi9cbiAgICBwdWJsaWMgQVdTSW9URGF0YUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1REYXRhQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgd3JpdGUgYWNjZXNzIHRvIElvVCB0aGluZyBncm91cHMgYW5kIHJlYWQgYWNjZXNzIHRvIElvVCBDZXJ0aWZpY2F0ZXMgZm9yIGV4ZWN1dGlvbiBvZiBBRERfVEhJTkdTX1RPX1RISU5HX0dST1VQIG1pdGlnYXRpb24gYWN0aW9uICovXG4gICAgcHVibGljIEFXU0lvVERldmljZURlZmVuZGVyQWRkVGhpbmdzVG9UaGluZ0dyb3VwTWl0aWdhdGlvbkFjdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1REZXZpY2VEZWZlbmRlckFkZFRoaW5nc1RvVGhpbmdHcm91cE1pdGlnYXRpb25BY3Rpb24pO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIGFjY2VzcyBmb3IgSW9UIGFuZCByZWxhdGVkIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NJb1REZXZpY2VEZWZlbmRlckF1ZGl0KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVERldmljZURlZmVuZGVyQXVkaXQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgZm9yIGVuYWJsaW5nIElvVCBsb2dnaW5nIGZvciBleGVjdXRpb24gb2YgRU5BQkxFX0lPVF9MT0dHSU5HIG1pdGlnYXRpb24gYWN0aW9uICovXG4gICAgcHVibGljIEFXU0lvVERldmljZURlZmVuZGVyRW5hYmxlSW9UTG9nZ2luZ01pdGlnYXRpb25BY3Rpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGV2aWNlRGVmZW5kZXJFbmFibGVJb1RMb2dnaW5nTWl0aWdhdGlvbkFjdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG1lc3NhZ2VzIHB1Ymxpc2ggYWNjZXNzIHRvIFNOUyB0b3BpYyBmb3IgZXhlY3V0aW9uIG9mIFBVQkxJU0hfRklORElOR19UT19TTlMgbWl0aWdhdGlvbiBhY3Rpb24gKi9cbiAgICBwdWJsaWMgQVdTSW9URGV2aWNlRGVmZW5kZXJQdWJsaXNoRmluZGluZ3NUb1NOU01pdGlnYXRpb25BY3Rpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGV2aWNlRGVmZW5kZXJQdWJsaXNoRmluZGluZ3NUb1NOU01pdGlnYXRpb25BY3Rpb24pO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB3cml0ZSBhY2Nlc3MgdG8gSW9UIHBvbGljaWVzIGZvciBleGVjdXRpb24gb2YgUkVQTEFDRV9ERUZBVUxUX1BPTElDWV9WRVJTSU9OIG1pdGlnYXRpb24gYWN0aW9uICovXG4gICAgcHVibGljIEFXU0lvVERldmljZURlZmVuZGVyUmVwbGFjZURlZmF1bHRQb2xpY3lNaXRpZ2F0aW9uQWN0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVERldmljZURlZmVuZGVyUmVwbGFjZURlZmF1bHRQb2xpY3lNaXRpZ2F0aW9uQWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgd3JpdGUgYWNjZXNzIHRvIElvVCBDQSBjZXJ0aWZpY2F0ZXMgZm9yIGV4ZWN1dGlvbiBvZiAgVVBEQVRFX0NBX0NFUlRJRklDQVRFIG1pdGlnYXRpb24gYWN0aW9uICovXG4gICAgcHVibGljIEFXU0lvVERldmljZURlZmVuZGVyVXBkYXRlQ0FDZXJ0TWl0aWdhdGlvbkFjdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1REZXZpY2VEZWZlbmRlclVwZGF0ZUNBQ2VydE1pdGlnYXRpb25BY3Rpb24pO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB3cml0ZSBhY2Nlc3MgdG8gSW9UIGNlcnRpZmljYXRlcyBmb3IgZXhlY3V0aW9uIG9mIFVQREFURV9ERVZJQ0VfQ0VSVElGSUNBVEUgbWl0aWdhdGlvbiBhY3Rpb24gKi9cbiAgICBwdWJsaWMgQVdTSW9URGV2aWNlRGVmZW5kZXJVcGRhdGVEZXZpY2VDZXJ0TWl0aWdhdGlvbkFjdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1REZXZpY2VEZWZlbmRlclVwZGF0ZURldmljZUNlcnRNaXRpZ2F0aW9uQWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBJb1QgRGV2aWNlIFRlc3RlciB0byBydW4gdGhlIEZyZWVSVE9TIHF1YWxpZmljYXRpb24gc3VpdGUgYnkgYWxsb3dpbmcgYWNjZXNzIHRvIHNlcnZpY2VzIGluY2x1ZGluZyBJb1QsIFMzLCBhbmQgSUFNICovXG4gICAgcHVibGljIEFXU0lvVERldmljZVRlc3RlckZvckZyZWVSVE9TRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1REZXZpY2VUZXN0ZXJGb3JGcmVlUlRPU0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIElvVCBEZXZpY2UgVGVzdGVyIHRvIHJ1biB0aGUgQVdTIEdyZWVuZ3Jhc3MgcXVhbGlmaWNhdGlvbiBzdWl0ZSBieSBhbGxvd2luZyBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgTGFtYmRhLCBJb1QsIEFQSSBHYXRld2F5LCBJQU0gKi9cbiAgICBwdWJsaWMgQVdTSW9URGV2aWNlVGVzdGVyRm9yR3JlZW5ncmFzc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGV2aWNlVGVzdGVyRm9yR3JlZW5ncmFzc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBJb1QgRXZlbnRzLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RFdmVudHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVEV2ZW50c0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIElvVCBFdmVudHMuICovXG4gICAgcHVibGljIEFXU0lvVEV2ZW50c1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVEV2ZW50c1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRmVkZXJhdGlvbiBhY2Nlc3MgZm9yIElvVCBGbGVldCBIdWIgYXBwbGljYXRpb25zICovXG4gICAgcHVibGljIEFXU0lvVEZsZWV0SHViRmVkZXJhdGlvbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RGbGVldEh1YkZlZGVyYXRpb25BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gQVdTIFJlc291cmNlcyBhbmQgbWV0YURhdGEgdXNlZCBvciBtYW5hZ2VkIGJ5IEFXU0lvVEZsZWV0d2lzZSBmb3IgYXV4aWxpYXJ5IGZlYXR1cmVzICovXG4gICAgcHVibGljIEFXU0lvVEZsZWV0d2lzZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVEZsZWV0d2lzZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ2l2ZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFXUyBJb1QgY29uZmlndXJhdGlvbiBhbmQgbWVzc2FnaW5nIGFjdGlvbnMgKi9cbiAgICBwdWJsaWMgQVdTSW9URnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGNyZWF0aW9uIG9mIEFtYXpvbiBDbG91ZFdhdGNoIExvZyBncm91cHMgYW5kIHN0cmVhbWluZyBsb2dzIHRvIHRoZSBncm91cHMgKi9cbiAgICBwdWJsaWMgQVdTSW9UTG9nZ2luZygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RMb2dnaW5nKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gbWFuYWdlZCBpbnRlZ3JhdGlvbnMgZm9yIEFXUyBJb1QgRGV2aWNlIE1hbmFnZW1lbnQgYW5kIHJlbGF0ZWQgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0lvVE1hbmFnZWRJbnRlZ3JhdGlvbnNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVE1hbmFnZWRJbnRlZ3JhdGlvbnNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbWFuYWdlZCBpbnRlZ3JhdGlvbnMgZm9yIEFXUyBJb1QgRGV2aWNlIE1hbmFnZW1lbnQgcGVybWlzc2lvbiB0byBwdWJsaXNoIGxvZ3MgYW5kIG1ldHJpY3Mgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0lvVE1hbmFnZWRJbnRlZ3JhdGlvbnNSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVE1hbmFnZWRJbnRlZ3JhdGlvbnNSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFjY2VzcyB0byBjcmVhdGUgQVdTIElvVCBKb2IgYW5kIGRlc2NyaWJlIHRoZSBBV1MgY29kZSBzaWduZXIgam9iICovXG4gICAgcHVibGljIEFXU0lvVE9UQVVwZGF0ZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RPVEFVcGRhdGUpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYWNjZXNzIHRvIGFsbCBBV1Mgc2VydmljZXMgc3VwcG9ydGVkIGluIEFXUyBJb1QgUnVsZSBBY3Rpb25zICovXG4gICAgcHVibGljIEFXU0lvVFJ1bGVBY3Rpb25zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVFJ1bGVBY3Rpb25zKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gbWFuYWdlIEFXUyBJb1QgU2l0ZVdpc2UgdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuIE5vdGUgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgYWNjZXNzIHRvIGNyZWF0ZSBhbmQgbGlzdCBkYXRhIHN0b3JlcyB1c2VkIHdpdGggQVdTIElvVCBTaXRlV2lzZSAoZS5nLiBBV1MgSW9UIEFuYWx5dGljcyksIGFjY2VzcyB0byBsaXN0IGFuZCB2aWV3IEFXUyBJb1QgR3JlZW5ncmFzcyByZXNvdXJjZXMsIGxpc3QgYW5kIG1vZGlmeSBBV1MgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldHMsIHJldHJpZXZlIEFXUyBJb1QgdGhpbmcgc2hhZG93cywgbGlzdCByZXNvdXJjZXMgd2l0aCBzcGVjaWZpYyB0YWdzLCBhbmQgY3JlYXRlIGFuZCB1c2UgYSBzZXJ2aWNlLWxpbmtlZCByb2xlIGZvciBBV1MgSW9UIFNpdGVXaXNlLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RTaXRlV2lzZUNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVFNpdGVXaXNlQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBJb1QgU2l0ZVdpc2UuICovXG4gICAgcHVibGljIEFXU0lvVFNpdGVXaXNlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RTaXRlV2lzZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gYWNjZXNzIEFXUyBJb1QgU2l0ZVdpc2UgYXNzZXRzIGFuZCBhc3NldCBkYXRhLCBjcmVhdGUgQVdTIElvVCBTaXRlV2lzZSBNb25pdG9yIHJlc291cmNlcywgYW5kIGxpc3QgQVdTIFNTTyB1c2Vycy4gKi9cbiAgICBwdWJsaWMgQVdTSW9UU2l0ZVdpc2VNb25pdG9yUG9ydGFsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVFNpdGVXaXNlTW9uaXRvclBvcnRhbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcm9sZSBncmFudHMgQVdTIElvVCBTaXRlV2lzZSBtb25pdG9yIHBlcm1pc3Npb25zIHRvIGFjY2VzcyB5b3VyIEFXUyBJb1QgU2l0ZVdpc2UgYXNzZXRzICYgYXNzZXQgcHJvcGVydGllcywgYW5kIGNyZWF0ZSBBV1MgSW9UIFNpdGV3aXNlIHByb2plY3RzLCBkYXNoYm9hcmRzICYgYWNjZXNzIHBvbGljaWVzIHRocm91Z2ggQVdTIElvVCBTaXRlV2lzZSBwb3J0YWxzLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RTaXRlV2lzZU1vbml0b3JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RTaXRlV2lzZU1vbml0b3JTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gSW9UIFNpdGVXaXNlLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RTaXRlV2lzZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVFNpdGVXaXNlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgdXNlcnMgdG8gcmVnaXN0ZXIgdGhpbmdzIGF0IGJ1bGsgdXNpbmcgQVdTIElvVCBTdGFydFRoaW5nUmVnaXN0cmF0aW9uVGFzayBBUEkgKi9cbiAgICBwdWJsaWMgQVdTSW9UVGhpbmdzUmVnaXN0cmF0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVFRoaW5nc1JlZ2lzdHJhdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgSW9UIFR3aW5NYWtlciB0byBjYWxsIG90aGVyIEFXUyBzZXJ2aWNlcyBhbmQgdG8gc3luYyB0aGVpciByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0lvVFR3aW5NYWtlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVFR3aW5NYWtlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBhc3NvY2lhdGVkIGlkZW50aXR5IGRhdGEgYWNjZXNzIHRvIEFXUyBJb1QgV2lyZWxlc3MgZGV2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTSW9UV2lyZWxlc3NEYXRhQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVFdpcmVsZXNzRGF0YUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgYXNzb2NpYXRlZCBpZGVudGl0eSBmdWxsIGFjY2VzcyB0byBhbGwgQVdTIElvVCBXaXJlbGVzcyBvcGVyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RXaXJlbGVzc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UV2lyZWxlc3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgSW9UIFdpcmVsZXNzIGZ1bGwgYWNjZXNzIHRvIHB1Ymxpc2ggdG8gSW9UIFJ1bGVzIEVuZ2luZSBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTSW9UV2lyZWxlc3NGdWxsUHVibGlzaEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RXaXJlbGVzc0Z1bGxQdWJsaXNoQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBhc3NvY2lhdGVkIGlkZW50aXR5IGFjY2VzcyB0byBjcmVhdGUsIGxpc3QgYW5kIGRlc2NyaWJlIElvVCBDZXJ0aWZpY2F0ZXMgKi9cbiAgICBwdWJsaWMgQVdTSW9UV2lyZWxlc3NHYXRld2F5Q2VydE1hbmFnZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UV2lyZWxlc3NHYXRld2F5Q2VydE1hbmFnZXIpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIGFzc29jaWF0ZWQgaWRlbnRpdHkgdG8gY3JlYXRlIEFtYXpvbiBDbG91ZFdhdGNoIExvZ3MgZ3JvdXBzIGFuZCBzdHJlYW0gbG9ncyB0byB0aGUgZ3JvdXBzLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RXaXJlbGVzc0xvZ2dpbmcoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UV2lyZWxlc3NMb2dnaW5nKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBhc3NvY2lhdGVkIGlkZW50aXR5IHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIElvVCB3aXJlbGVzcy4gKi9cbiAgICBwdWJsaWMgQVdTSW9UV2lyZWxlc3NSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RXaXJlbGVzc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFZQQyBJUCBBZGRyZXNzIE1hbmFnZXIgdG8gYWNjZXNzIFZQQyByZXNvdXJjZXMgYW5kIGludGVncmF0ZSB3aXRoIEFXUyBPcmdhbml6YXRpb25zIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NJUEFNU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSVBBTVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVXNlZCBieSBBV1MgSVEgdG8gZXhlY3V0ZSBwYXltZW50IHJlcXVlc3RzIG9uIGJlaGFsZiBvZiBhIGN1c3RvbWVyICovXG4gICAgcHVibGljIEFXU0lRQ29udHJhY3RTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJUUNvbnRyYWN0U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgSVEgKi9cbiAgICBwdWJsaWMgQVdTSVFGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lRRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgSVEgdG8gbWFuYWdlIHRoZSByb2xlIGFzc3VtZWQgYnkgQVdTIElRIGV4cGVydHMuICovXG4gICAgcHVibGljIEFXU0lRUGVybWlzc2lvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lRUGVybWlzc2lvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMgcmVxdWlyZWQgZm9yIEFXUyBLTVMgY3VzdG9tIGtleSBzdG9yZXMgKi9cbiAgICBwdWJsaWMgQVdTS2V5TWFuYWdlbWVudFNlcnZpY2VDdXN0b21LZXlTdG9yZXNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NLZXlNYW5hZ2VtZW50U2VydmljZUN1c3RvbUtleVN0b3Jlc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBBV1MgS01TIHRvIHN5bmNocm9uaXplIHRoZSBzaGFyZWQgcHJvcGVydGllcyBvZiBtdWx0aS1SZWdpb24ga2V5cy4gKi9cbiAgICBwdWJsaWMgQVdTS2V5TWFuYWdlbWVudFNlcnZpY2VNdWx0aVJlZ2lvbktleXNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NLZXlNYW5hZ2VtZW50U2VydmljZU11bHRpUmVnaW9uS2V5c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIChLTVMpLiAqL1xuICAgIHB1YmxpYyBBV1NLZXlNYW5hZ2VtZW50U2VydmljZVBvd2VyVXNlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NLZXlNYW5hZ2VtZW50U2VydmljZVBvd2VyVXNlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGNyb3NzIGFjY291bnQgYWNjZXNzIHRvIEdsdWUgcmVzb3VyY2VzIHZpYSBMYWtlIEZvcm1hdGlvbi4gQWxzbyBncmFudHMgcmVhZCBhY2Nlc3MgdG8gb3RoZXIgcmVxdWlyZWQgc2VydmljZXMgc3VjaCBhcyBvcmdhbml6YXRpb25zIGFuZCByZXNvdXJjZSBhY2Nlc3MgbWFuYWdlciAqL1xuICAgIHB1YmxpYyBBV1NMYWtlRm9ybWF0aW9uQ3Jvc3NBY2NvdW50TWFuYWdlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYWtlRm9ybWF0aW9uQ3Jvc3NBY2NvdW50TWFuYWdlcik7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgdG8gQVdTIExha2UgRm9ybWF0aW9uIGFuZCByZWxhdGVkIHNlcnZpY2VzLCBzdWNoIGFzIEFXUyBHbHVlLCB0byBtYW5hZ2UgZGF0YSBsYWtlcyAqL1xuICAgIHB1YmxpYyBBV1NMYWtlRm9ybWF0aW9uRGF0YUFkbWluKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xha2VGb3JtYXRpb25EYXRhQWRtaW4pO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgdG8gQVdTIExhbWJkYSBzZXJ2aWNlLCBBV1MgTGFtYmRhIGNvbnNvbGUgZmVhdHVyZXMsIGFuZCBvdGhlciByZWxhdGVkIEFXUyBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIExhbWJkYSBzZXJ2aWNlLCBBV1MgTGFtYmRhIGNvbnNvbGUgZmVhdHVyZXMsIGFuZCBvdGhlciByZWxhdGVkIEFXUyBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB3cml0ZSBwZXJtaXNzaW9ucyB0byBDbG91ZFdhdGNoIExvZ3MuICovXG4gICAgcHVibGljIEFXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBsaXN0IGFuZCByZWFkIGFjY2VzcyB0byBEeW5hbW9EQiBzdHJlYW1zIGFuZCB3cml0ZSBwZXJtaXNzaW9ucyB0byBDbG91ZFdhdGNoIGxvZ3MuICovXG4gICAgcHVibGljIEFXU0xhbWJkYUR5bmFtb0RCRXhlY3V0aW9uUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFEeW5hbW9EQkV4ZWN1dGlvblJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBtaW5pbXVtIHBlcm1pc3Npb25zIGZvciBhIExhbWJkYSBmdW5jdGlvbiB0byBtYW5hZ2UgRU5JcyAoY3JlYXRlLCBkZXNjcmliZSwgZGVsZXRlKSB1c2VkIGJ5IGEgVlBDLWVuYWJsZWQgTGFtYmRhIEZ1bmN0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFFTklNYW5hZ2VtZW50QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYUVOSU1hbmFnZW1lbnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBQdXQsIEdldCBhY2Nlc3MgdG8gUzMgYW5kIGZ1bGwgYWNjZXNzIHRvIENsb3VkV2F0Y2ggTG9ncy4gKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhRXhlY3V0ZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFFeGVjdXRlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBhY2Nlc3MgdG8gRHluYW1vREIgU3RyZWFtcy4gKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhSW52b2NhdGlvbkR5bmFtb0RCKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYUludm9jYXRpb25EeW5hbW9EQik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGxpc3QgYW5kIHJlYWQgYWNjZXNzIHRvIEtpbmVzaXMgc3RyZWFtcyBhbmQgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBsb2dzLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFLaW5lc2lzRXhlY3V0aW9uUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFLaW5lc2lzRXhlY3V0aW9uUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIGFjY2VzcyBNU0sgQ2x1c3RlciB3aXRoaW4gYSBWUEMsIG1hbmFnZSBFTklzIChjcmVhdGUsIGRlc2NyaWJlLCBkZWxldGUpIGluIHRoZSBWUEMgYW5kIHdyaXRlIHBlcm1pc3Npb25zIHRvIENsb3VkV2F0Y2ggTG9ncy4gKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhTVNLRXhlY3V0aW9uUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFNU0tFeGVjdXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIExhbWJkYSBSZXBsaWNhdG9yIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyB0byByZXBsaWNhdGUgZnVuY3Rpb25zIGFjcm9zcyByZWdpb25zICovXG4gICAgcHVibGljIEFXU0xhbWJkYVJlcGxpY2F0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhUmVwbGljYXRvcik7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgcG9saWN5IGZvciBBV1MgTGFtYmRhIHNlcnZpY2Ugcm9sZS4gKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVjZWl2ZSBtZXNzYWdlLCBkZWxldGUgbWVzc2FnZSwgYW5kIHJlYWQgYXR0cmlidXRlIGFjY2VzcyB0byBTUVMgcXVldWVzLCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBsb2dzLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFTUVNRdWV1ZUV4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhU1FTUXVldWVFeGVjdXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbWluaW11bSBwZXJtaXNzaW9ucyBmb3IgYSBMYW1iZGEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGlsZSBhY2Nlc3NpbmcgYSByZXNvdXJjZSB3aXRoaW4gYSBWUEMgLSBjcmVhdGUsIGRlc2NyaWJlLCBkZWxldGUgbmV0d29yayBpbnRlcmZhY2VzIGFuZCB3cml0ZSBwZXJtaXNzaW9ucyB0byBDbG91ZFdhdGNoIExvZ3MuICovXG4gICAgcHVibGljIEFXU0xhbWJkYVZQQ0FjY2Vzc0V4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhVlBDQWNjZXNzRXhlY3V0aW9uUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGFsbG93IGFjY2VzcyB0byB0aGUgQVdTIExpY2Vuc2UgTWFuYWdlciBBUEkgYWN0aW9ucyByZXF1aXJlZCB0byBjb25zdW1lIHVwb24gbGljZW5zZXMgdGhhdCB0aGUgdXNlciBoYXMgZW50aXRsZW1lbnRzLiAqL1xuICAgIHB1YmxpYyBBV1NMaWNlbnNlTWFuYWdlckNvbnN1bXB0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xpY2Vuc2VNYW5hZ2VyQ29uc3VtcHRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIExpY2Vuc2UgTWFuYWdlciBMaW51eCBTdWJzY3JpcHRpb25zIFNlcnZpY2UgdG8gbWFuYWdlIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTTGljZW5zZU1hbmFnZXJMaW51eFN1YnNjcmlwdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMaWNlbnNlTWFuYWdlckxpbnV4U3Vic2NyaXB0aW9uc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQVdTIExpY2Vuc2UgTWFuYWdlciBzZXJ2aWNlIG1hc3RlciBhY2NvdW50IHJvbGUgcG9saWN5ICovXG4gICAgcHVibGljIEFXU0xpY2Vuc2VNYW5hZ2VyTWFzdGVyQWNjb3VudFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGljZW5zZU1hbmFnZXJNYXN0ZXJBY2NvdW50Um9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBMaWNlbnNlIE1hbmFnZXIgc2VydmljZSBtZW1iZXIgYWNjb3VudCByb2xlIHBvbGljeSAqL1xuICAgIHB1YmxpYyBBV1NMaWNlbnNlTWFuYWdlck1lbWJlckFjY291bnRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xpY2Vuc2VNYW5hZ2VyTWVtYmVyQWNjb3VudFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgTGljZW5zZSBNYW5hZ2VyIHNlcnZpY2UgZGVmYXVsdCByb2xlIHBvbGljeSAqL1xuICAgIHB1YmxpYyBBV1NMaWNlbnNlTWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xpY2Vuc2VNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIExpY2Vuc2UgTWFuYWdlciBVc2VyIFN1YnNjcmlwdGlvbnMgU2VydmljZSB0byBtYW5hZ2UgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NMaWNlbnNlTWFuYWdlclVzZXJTdWJzY3JpcHRpb25zU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGljZW5zZU1hbmFnZXJVc2VyU3Vic2NyaXB0aW9uc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBNMiB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTTTJTZXJ2aWNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU00yU2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgTWFuYWdlZCBTZXJ2aWNlcyB0byByZWFkIHRoZSB2YWx1ZXMgb2YgdGhlIHRhZ3Mgb24gQVdTIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NNYW5hZ2VkU2VydmljZXNDb250YWN0c1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hbmFnZWRTZXJ2aWNlc0NvbnRhY3RzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgTWFuYWdlZCBTZXJ2aWNlcyAtIHBvbGljeSB0byBtYW5hZ2UgZGV0ZWN0aXZlIGNvbnRyb2xzIGluZnJhc3RydWN0dXJlICovXG4gICAgcHVibGljIEFXU01hbmFnZWRTZXJ2aWNlc0RldGVjdGl2ZUNvbnRyb2xzQ29uZmlnU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFuYWdlZFNlcnZpY2VzRGV0ZWN0aXZlQ29udHJvbHNDb25maWdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBNYW5hZ2VkIFNlcnZpY2VzIHBvbGljeSB0byBlbmFibGUgQU1TIGV2ZW50IHByb2Nlc3NvciBmZWF0dXJlLiAqL1xuICAgIHB1YmxpYyBBV1NNYW5hZ2VkU2VydmljZXNFdmVudHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYW5hZ2VkU2VydmljZXNFdmVudHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24ncyBBV1MgTWFuYWdlZCBTZXJ2aWNlJ3MgU2VsZiBTZXJ2aWNlIFJlcG9ydGluZyBmZWF0dXJlIHRvIHJlYWQgQVdTIE9yZ2FuaXphdGlvbiBkYXRhIG9uIHlvdXIgYmVoYWxmIHRvIGVuYWJsZSBvcmdhbml6YXRpb24gbGV2ZWwgYWdncmVnYXRlZCByZXBvcnRpbmcgKi9cbiAgICBwdWJsaWMgQVdTTWFuYWdlZFNlcnZpY2VzU2VsZlNlcnZpY2VSZXBvcnRpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYW5hZ2VkU2VydmljZXNTZWxmU2VydmljZVJlcG9ydGluZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBNYW5hZ2VkIFNlcnZpY2VzIHRvIG1hbmFnZSBkZXBsb3ltZW50IHRvb2xraXQgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU01hbmFnZWRTZXJ2aWNlc0RlcGxveW1lbnRUb29sa2l0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hbmFnZWRTZXJ2aWNlc0RlcGxveW1lbnRUb29sa2l0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gY29uZmlndXJlIGFuZCBjdXN0b21pemUgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgKi9cbiAgICBwdWJsaWMgQVdTTWFuYWdlbWVudENvbnNvbGVBZG1pbmlzdHJhdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hbmFnZW1lbnRDb25zb2xlQWRtaW5pc3RyYXRvckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBhY2Nlc3MgdG8gZXNzZW50aWFsIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgZmVhdHVyZXMgYW5kIHVzZXIgZXhwZXJpZW5jZSAoVVgpIGNhcGFiaWxpdGllcyBmb3Igbm9uLWFkbWluaXN0cmF0aXZlIHVzZXJzLiAqL1xuICAgIHB1YmxpYyBBV1NNYW5hZ2VtZW50Q29uc29sZUJhc2ljVXNlckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYW5hZ2VtZW50Q29uc29sZUJhc2ljVXNlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgTWFya2V0cGxhY2UgdG8gY29weSB5b3VyIEFtYXpvbiBNYWNoaW5lIEltYWdlcyAoQU1JcykgaW4gb3JkZXIgdG8gbGlzdCB0aGVtIG9uIEFXUyBNYXJrZXRwbGFjZSAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZUFtaUluZ2VzdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZUFtaUluZ2VzdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgTWFya2V0cGxhY2UgdG8gY3JlYXRlIGFuZCBtYW5hZ2Ugc2VsbGVyIGRlcGxveW1lbnQgcGFyYW1ldGVycyBmb3IgdGhlIHByb2R1Y3RzIHRoYXQgeW91IHN1YnNjcmliZSB0byBvbiBBV1MgTWFya2V0cGxhY2UuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlRGVwbG95bWVudFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlRGVwbG95bWVudFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gc3Vic2NyaWJlIGFuZCB1bnN1YnNjcmliZSB0byBBV1MgTWFya2V0cGxhY2Ugc29mdHdhcmUsIGFsbG93cyB1c2VycyB0byBtYW5hZ2UgTWFya2V0cGxhY2Ugc29mdHdhcmUgaW5zdGFuY2VzIGZyb20gdGhlIE1hcmtldHBsYWNlICdZb3VyIFNvZnR3YXJlJyBwYWdlLCBhbmQgcHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEVDMi4gKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgYWNjZXNzIHRvIEFXUyBNYXJrZXRwbGFjZSBFbnRpdGxlbWVudHMgKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VHZXRFbnRpdGxlbWVudHMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VHZXRFbnRpdGxlbWVudHMpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQVdTIE1hcmtldHBsYWNlIGZvciBsaWNlbnNlIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlTGljZW5zZU1hbmFnZW1lbnRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZUxpY2Vuc2VNYW5hZ2VtZW50U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB0aGUgYWJpbGl0eSB0byBzdWJzY3JpYmUgYW5kIHVuc3Vic2NyaWJlIHRvIEFXUyBNYXJrZXRwbGFjZSBzb2Z0d2FyZSAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZU1hbmFnZVN1YnNjcmlwdGlvbnMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VNYW5hZ2VTdWJzY3JpcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIE1hcmtldHBsYWNlIE1ldGVyaW5nLiAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZU1ldGVyaW5nRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZU1ldGVyaW5nRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIHJlZ2lzdGVyIGEgcmVzb3VyY2UgYW5kIHRyYWNrIHVzYWdlIHRocm91Z2ggQVdTIE1hcmtldHBsYWNlIE1ldGVyaW5nIFNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlTWV0ZXJpbmdSZWdpc3RlclVzYWdlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlTWV0ZXJpbmdSZWdpc3RlclVzYWdlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIGFkbWluaXN0cmF0aXZlIGFjdGlvbnMgZm9yIGFuIEFXUyBNYXJrZXRwbGFjZSBlUHJvY3VyZW1lbnQgaW50ZWdyYXRpb24uICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlUHJvY3VyZW1lbnRTeXN0ZW1BZG1pbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VQcm9jdXJlbWVudFN5c3RlbUFkbWluRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIGZvciBBV1MgTWFya2V0cGxhY2Ugc2VydmljZXMgdG8gcHVyY2hhc2Ugb3JkZXIgbWFuYWdlbWVudC4gKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VQdXJjaGFzZU9yZGVyc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlUHVyY2hhc2VPcmRlcnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIHJldmlldyBBV1MgTWFya2V0cGxhY2Ugc3Vic2NyaXB0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQVdTIE1hcmtldHBsYWNlIGZvciBSZXNhbGUgQXV0aG9yaXphdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VSZXNhbGVBdXRob3JpemF0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VSZXNhbGVBdXRob3JpemF0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgc2VsbGVyIG9wZXJhdGlvbnMgb24gdGhlIEFXUyBNYXJrZXRwbGFjZSBhbmQgb3RoZXIgQVdTIHNlcnZpY2VzIHN1Y2ggYXMgQU1JIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlU2VsbGVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZVNlbGxlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBzZWxsZXJzIGFjY2VzcyB0byBPZmZlcnMgYW5kIEFncmVlbWVudHMgbWFuYWdlbWVudCBhY3Rpdml0aWVzLiAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZVNlbGxlck9mZmVyTWFuYWdlbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZVNlbGxlck9mZmVyTWFuYWdlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHNlbGxlcnMgZnVsbCBhY2Nlc3MgdG8gQVdTIE1hcmtldHBsYWNlIE1hbmFnZW1lbnQgUHJvZHVjdHMgcGFnZSBhbmQgb3RoZXIgQVdTIHNlcnZpY2VzIHN1Y2ggYXMgQU1JIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlU2VsbGVyUHJvZHVjdHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlU2VsbGVyUHJvZHVjdHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBzZWxsZXJzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIE1hcmtldHBsYWNlIE1hbmFnZW1lbnQgUHJvZHVjdHMgcGFnZS4gKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VTZWxsZXJQcm9kdWN0c1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlU2VsbGVyUHJvZHVjdHNSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBkZWZhdWx0IHBvbGljeSB0aGF0IGVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBNZWRpYUNvbm5lY3QuICovXG4gICAgcHVibGljIEFXU01lZGlhQ29ubmVjdFNlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWVkaWFDb25uZWN0U2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBNZWRpYUxpdmUgQW55d2hlcmUgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTTWVkaWFMaXZlQW55d2hlcmVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNZWRpYUxpdmVBbnl3aGVyZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBNZWRpYVRhaWxvciAqL1xuICAgIHB1YmxpYyBBV1NNZWRpYVRhaWxvclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01lZGlhVGFpbG9yU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgYWxsb3dzIEFXU01pZ3JhdGlvbkh1YlNlcnZpY2UgdG8gY2FsbCBBV1NBcHBsaWNhdGlvbkRpc2NvdmVyeVNlcnZpY2Ugb24gYmVoYWxmIG9mIHRoZSBjdXN0b21lci4gKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViRGlzY292ZXJ5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1YkRpc2NvdmVyeUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgRGF0YWJhc2UgTWlncmF0aW9uIFNlcnZpY2UgdG8gYXNzdW1lIHJvbGUgaW4gY3VzdG9tZXIncyBhY2NvdW50IHRvIGNhbGwgTWlncmF0aW9uIEh1YiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJETVNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViRE1TQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogTWFuYWdlZCBwb2xpY3kgdG8gcHJvdmlkZSB0aGUgY3VzdG9tZXIgYWNjZXNzIHRvIHRoZSBNaWdyYXRpb24gSHViIFNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbGltaXRlZCBhY2Nlc3MgdG8gQVdTIE1pZ3JhdGlvbiBIdWIsIEFXUyBBcHBsaWNhdGlvbiBEaXNjb3ZlcnkgU2VydmljZSwgQW1hem9uIFNpbXBsZSBTdG9yYWdlIFNlcnZpY2UgYW5kIEFXUyBTZWNyZXRzIE1hbmFnZXIuIFRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFXUyBNaWdyYXRpb24gSHViIE9yY2hlc3RyYXRvciBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJPcmNoZXN0cmF0b3JDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJPcmNoZXN0cmF0b3JDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IG5lZWRzIHRvIGJlIGF0dGFjaGVkIGZvciBTQVAgYW5kIE1HTiBtaWdyYXRlZCBpbnN0YW5jZSBmb3Igb3VyIHNlcnZpY2UgdG8gb3JjaGVzdHJhdGUgaW5zdGFuY2VzIGJ5IGRvd25sb2FkaW5nIHNjcmlwdHMgZnJvbSBTMyBhbmQgdG8gZmV0Y2ggc2VjcmV0IHZhbHVlcyBpbnNpZGUgRUMyIGluc3RhbmNlLiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJPcmNoZXN0cmF0b3JJbnN0YW5jZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViT3JjaGVzdHJhdG9ySW5zdGFuY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbGltaXRlZCBhY2Nlc3MgdG8gQW1hem9uIFNpbXBsZSBTdG9yYWdlIFNlcnZpY2UsIEFXUyBTZWNyZXRzIE1hbmFnZXIgYW5kIFBsdWdpbiByZWxhdGVkIGFjdGlvbnMgZm9yIEFXUyBNaWdyYXRpb24gSHViIE9yY2hlc3RyYXRvci4gKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViT3JjaGVzdHJhdG9yUGx1Z2luKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1Yk9yY2hlc3RyYXRvclBsdWdpbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIG5lY2Vzc2FyeSBmb3IgTWlncmF0aW9uIEh1YiBPcmNoZXN0cmF0b3IgdG8gbWlncmF0ZSBhbmQgbW9kZXJuaXplIHlvdXIgb24tcHJlbWlzZXMgd29ya2xvYWRzICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1Yk9yY2hlc3RyYXRvclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1Yk9yY2hlc3RyYXRvclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFXUyBNaWdyYXRpb24gSHViIFJlZmFjdG9yIFNwYWNlcyBhbmQgb3RoZXIgQVdTIHJlbGF0ZWQgc2VydmljZXMgZXhjZXB0IEFXUyBUcmFuc2l0IEdhdGV3YXkgYW5kIEVDMiBzZWN1cml0eSBncm91cHMgbm90IHJlcXVpcmVkIHdoZW4gdXNpbmcgZW52aXJvbm1lbnRzIHdpdGhvdXQgYSBuZXR3b3JrIGJyaWRnZS4gVGhpcyBwb2xpY3kgYWxzbyBleGNsdWRlcyBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3IgQVdTIExhbWJkYSBhbmQgQVdTIFJlc291cmNlIEFjY2VzcyBNYW5hZ2VyIGFzIHRoZXkgY2FuIGJlIHNjb3BlZCBkb3duIGJhc2VkIG9uIHRhZ3MuICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1YlJlZmFjdG9yU3BhY2VzRW52aXJvbm1lbnRzV2l0aG91dEJyaWRnZXNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1YlJlZmFjdG9yU3BhY2VzRW52aXJvbm1lbnRzV2l0aG91dEJyaWRnZXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVXNlIGluIHRoZSBJQU0gc2VydmljZSByb2xlIHBhc3NlZCB0byB0aGUgU1NNIEF1dG9tYXRpb24gZG9jdW1lbnQgQVdTUmVmYWN0b3JTcGFjZXMtQ3JlYXRlUmVzb3VyY2VzIHRvIGdyYW50IHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIHJ1biB0aGUgYXV0b21hdGlvbi4gVGhlIHBvbGljeSBncmFudHMgcmVhZC93cml0ZSBhY2Nlc3MgdG8gRUMyIHRhZ3MgaW4gb3JkZXIgdG8gdHJhY2sgYXV0b21hdGlvbiBwcm9ncmVzcy4gV2hlbiB0aGUgUmVmYWN0b3IgU3BhY2VzIGVudmlyb25tZW50J3MgbmV0d29yayBicmlkZ2UgaXMgZW5hYmxlZCwgdGhlIGF1dG9tYXRpb24gYWxzbyBhZGRzIHRoZSBlbnZpcm9ubWVudCdzIHNlY3VyaXR5IGdyb3VwIHRvIHRoZSBFQzIgaW5zdGFuY2UgdG8gcGVybWl0IHRyYWZmaWMgZnJvbSBvdGhlciBSZWZhY3RvciBTcGFjZXMgc2VydmljZXMgaW4gdGhlIGVudmlyb25tZW50LiBUaGUgcG9saWN5IGFsc28gZ3JhbnRzIGFjY2VzcyB0byB0aGUgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UncyBwb3N0IGxhdW5jaCBhY3Rpb25zIFNTTSBwYXJhbWV0ZXJzLiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJSZWZhY3RvclNwYWNlc1NTTUF1dG9tYXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViUmVmYWN0b3JTcGFjZXNTU01BdXRvbWF0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFXUyBNaWdyYXRpb25IdWIgUmVmYWN0b3IgU3BhY2VzLCBBV1MgTWlncmF0aW9uSHViIFJlZmFjdG9yIFNwYWNlcyBjb25zb2xlIGZlYXR1cmVzIGFuZCBvdGhlciByZWxhdGVkIEFXUyBzZXJ2aWNlcyBleGNlcHQgcGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIEFXUyBMYW1iZGEgYW5kIEFXUyBSZXNvdXJjZSBBY2Nlc3MgTWFuYWdlciBhcyB0aGV5IGNhbiBiZSBzY29wZWQgZG93biBiYXNlZCBvbiB0YWdzLiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJSZWZhY3RvclNwYWNlc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViUmVmYWN0b3JTcGFjZXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBSZXNvdXJjZXMgbWFuYWdlZCBvciB1c2VkIGJ5IEFXUyBNaWdyYXRpb24gSHViIFJlZmFjdG9yIFNwYWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViUmVmYWN0b3JTcGFjZXNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJSZWZhY3RvclNwYWNlc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBTZXJ2ZXIgTWlncmF0aW9uIFNlcnZpY2UgdG8gYXNzdW1lIHJvbGUgaW4gY3VzdG9tZXIncyBhY2NvdW50IHRvIGNhbGwgTWlncmF0aW9uIEh1YiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJTTVNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViU01TQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIGFsbG93IGNvbW11bmljYXRpb24gd2l0aCB0aGUgQVdTIE1pZ3JhdGlvbiBIdWIgU3RyYXRlZ3kgUmVjb21tZW5kYXRpb25zIHNlcnZpY2UsIHJlYWQvd3JpdGUgYWNjZXNzIHRvIFMzIGJ1Y2tldHMgcmVsYXRlZCB0byB0aGUgc2VydmljZSwgQW1hem9uIEFQSSBHYXRld2F5IGFjY2VzcyB0byB1cGxvYWQgbG9ncyBhbmQgbWV0cmljcyB0byBBV1MsIEFXUyBTZWNyZXRzIE1hbmFnZXIgYWNjZXNzIHRvIGZldGNoIGNyZWRlbnRpYWxzLCBhbmQgYW55IHJlbGF0ZWQgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1YlN0cmF0ZWd5Q29sbGVjdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1YlN0cmF0ZWd5Q29sbGVjdG9yKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgTWlncmF0aW9uIEh1YiBTdHJhdGVneSBSZWNvbW1lbmRhdGlvbnMgc2VydmljZSBhbmQgYWNjZXNzIHRvIHJlbGF0ZWQgQVdTIHNlcnZpY2VzIHRocm91Z2ggdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1YlN0cmF0ZWd5Q29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViU3RyYXRlZ3lDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZSBhY2Nlc3MgdG8gQVdTIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQVdTIE1pZ3JhdGlvbiBIdWIgU3RyYXRlZ3kgUmVjb21tZW5kYXRpb25zIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1YlN0cmF0ZWd5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViU3RyYXRlZ3lTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBBbWF6b24gTVNLIFJlcGxpY2F0b3IgdG8gcmVwbGljYXRlIGRhdGEgYmV0d2VlbiBNU0sgQ2x1c3RlcnMuICovXG4gICAgcHVibGljIEFXU01TS1JlcGxpY2F0b3JFeGVjdXRpb25Sb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01TS1JlcGxpY2F0b3JFeGVjdXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gbWFuYWdlIFZQQyByZXNvdXJjZXMgZm9yIHRoZSBjb25maWd1cmF0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIE5BVCBHYXRld2F5cy4gKi9cbiAgICBwdWJsaWMgQVdTTkFUR2F0ZXdheVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU05BVEdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byBBV1MgTmV0d29yayBGaXJld2FsbCBzZXJ2aWNlLCBpbmNsdWRpbmcgcGVybWlzc2lvbnMgdG8gY3JlYXRlLCBjb25maWd1cmUsIG1hbmFnZSwgYW5kIGRlbGV0ZSBmaXJld2FsbCByZXNvdXJjZXMsIHBvbGljaWVzLCBhbmQgcnVsZSBncm91cHMuIEFkZGl0aW9uYWxseSBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBtb2RpZnkgVlBDIGVuZHBvaW50cywgUzMgYnVja2V0IHBvbGljaWVzLCBDbG91ZFdhdGNoIExvZ3MgY29uZmlndXJhdGlvbnMsIGFuZCBjcmVhdGUgc2VydmljZS1saW5rZWQgcm9sZXMgZm9yIE5ldHdvcmsgRmlyZXdhbGwgYW5kIGxvZyBkZWxpdmVyeSBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBV1NOZXR3b3JrRmlyZXdhbGxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU05ldHdvcmtGaXJld2FsbEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBOZXR3b3JrIEZpcmV3YWxsIHJlc291cmNlcyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUsIENMSSwgYW5kIFNES3MuIFRoaXMgcG9saWN5IGFsbG93cyB1c2VycyB0byB2aWV3IGFuZCBtb25pdG9yIGZpcmV3YWxsIGNvbmZpZ3VyYXRpb25zLCBwb2xpY2llcywgcnVsZSBncm91cHMsIGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcywgd2l0aG91dCB0aGUgYWJpbGl0eSB0byBtYWtlIGNoYW5nZXMuICovXG4gICAgcHVibGljIEFXU05ldHdvcmtGaXJld2FsbFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU05ldHdvcmtGaXJld2FsbFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgQVdTTmV0d29ya0ZpcmV3YWxsIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIG5lY2Vzc2FyeSByZXNvdXJjZXMgZm9yIHlvdXIgRmlyZXdhbGxzLiAqL1xuICAgIHB1YmxpYyBBV1NOZXR3b3JrRmlyZXdhbGxTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NOZXR3b3JrRmlyZXdhbGxTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IE5ldHdvcmtNYW5hZ2VyIHRvIGFjY2VzcyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHlvdXIgQ29yZSBOZXR3b3JrICovXG4gICAgcHVibGljIEFXU05ldHdvcmtNYW5hZ2VyQ2xvdWRXQU5TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NOZXR3b3JrTWFuYWdlckNsb3VkV0FOU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTmV0d29ya01hbmFnZXIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NOZXR3b3JrTWFuYWdlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTmV0d29ya01hbmFnZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gTmV0d29ya01hbmFnZXIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NOZXR3b3JrTWFuYWdlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU05ldHdvcmtNYW5hZ2VyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBOZXR3b3JrTWFuYWdlciB0byBhY2Nlc3MgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB5b3VyIEdsb2JhbCBOZXR3b3JrcyAqL1xuICAgIHB1YmxpYyBBV1NOZXR3b3JrTWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU05ldHdvcmtNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlLWxpbmtlZCByb2xlIHBlcm1pc3Npb25zIGZvciBDbG91ZFdhdGNoIExvZ3MgY2VudHJhbGl6YXRpb24gKi9cbiAgICBwdWJsaWMgQVdTT2JzZXJ2YWJpbGl0eUFkbWluTG9nc0NlbnRyYWxpemF0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTT2JzZXJ2YWJpbGl0eUFkbWluTG9nc0NlbnRyYWxpemF0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gbWFuYWdlIEFXUyBDb25maWcgQ29uZmlndXJhdGlvbiBSZWNvcmRlciwgbWFuYWdlIEFXUyBDb25maWcgQ29uZmlndXJhdGlvbiBBZ2dyZWdhdG9yLCBjcmVhdGUgQVdTIENvbmZpZyBTZXJ2aWNlIExpbmtlZCBSb2xlIGZvciBDb25maWd1cmF0aW9uIFJlY29yZGVyIGZ1bmN0aW9uYWxpdHksIGNvbnN1bWUgcmVjb3JkZXIgY29uZmlndXJhdGlvbiBkYXRhLCBhbmQgcmVhZCBBV1MgT3JnYW5pemF0aW9ucyBkYXRhIGZvciBvcmdhbml6YXRpb25hbCBmZWF0dXJlcy4gKi9cbiAgICBwdWJsaWMgQVdTT2JzZXJ2YWJpbGl0eUFkbWluU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTT2JzZXJ2YWJpbGl0eUFkbWluU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gbWFuYWdlIEFXUyBDb25maWcgcmVjb3JkZXIgcmVzb3VyY2UgYW5kIHRlbGVtZXRyeSBzZXR0aW5ncyBvbiBBV1MgcmVzb3VyY2VzIGluY2x1ZGluZyBsb2dzLCBtZXRyaWNzLiAqL1xuICAgIHB1YmxpYyBBV1NPYnNlcnZhYmlsaXR5QWRtaW5UZWxlbWV0cnlFbmFibGVtZW50U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTT2JzZXJ2YWJpbGl0eUFkbWluVGVsZW1ldHJ5RW5hYmxlbWVudFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIE9yZ2FuaXphdGlvbnMuICovXG4gICAgcHVibGljIEFXU09yZ2FuaXphdGlvbnNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU09yZ2FuaXphdGlvbnNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgT3JnYW5pemF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTT3JnYW5pemF0aW9uc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU09yZ2FuaXphdGlvbnNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEEgcG9saWN5IHRvIGFsbG93IEFXUyBPcmdhbml6YXRpb25zIHRvIHNoYXJlIHRydXN0IHdpdGggb3RoZXIgYXBwcm92ZWQgQVdTIFNlcnZpY2VzIGZvciB0aGUgcHVycG9zZSBvZiBzaW1wbGlmeWluZyBjdXN0b21lciBjb25maWd1cmF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NPcmdhbml6YXRpb25zU2VydmljZVRydXN0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU09yZ2FuaXphdGlvbnNTZXJ2aWNlVHJ1c3RQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyB5b3UgdG8gaW5zdGFsbCBhbiBPdXRwb3N0IHNlcnZlciBvbiB5b3VyIG9uLXByZW1pc2VzIG5ldHdvcmsuICovXG4gICAgcHVibGljIEFXU091dHBvc3RzQXV0aG9yaXplU2VydmVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU091dHBvc3RzQXV0aG9yaXplU2VydmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSBMaW5rZWQgUm9sZSBwb2xpY3kgdG8gZW5hYmxlIGFjY2VzcyB0byBBV1MgcmVzb3VyY2VzIG1hbmFnZWQgYnkgQVdTIE91dHBvc3RzICovXG4gICAgcHVibGljIEFXU091dHBvc3RzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTT3V0cG9zdHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgSW9UIHNvZnR3YXJlIG9uIGFuIEFXUyBQYW5vcmFtYSBBcHBsaWFuY2UgdG8gdXBsb2FkIGxvZ3MgdG8gQW1hem9uIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU1Bhbm9yYW1hQXBwbGlhbmNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQYW5vcmFtYUFwcGxpYW5jZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYW4gQVdTIFBhbm9yYW1hIEFwcGxpYW5jZSB0byB1cGxvYWQgbG9ncyB0byBBbWF6b24gQ2xvdWRXYXRjaCwgYW5kIHRvIGdldCBvYmplY3RzIGZyb20gQW1hem9uIFMzIGFjY2VzcyBwb2ludHMgY3JlYXRlZCBmb3IgdXNlIHdpdGggQVdTIFBhbm9yYW1hLiAqL1xuICAgIHB1YmxpYyBBV1NQYW5vcmFtYUFwcGxpYW5jZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Bhbm9yYW1hQXBwbGlhbmNlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgUGFub3JhbWEgKi9cbiAgICBwdWJsaWMgQVdTUGFub3JhbWFGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Bhbm9yYW1hRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhbiBBV1MgTGFtYmRhIGZ1bmN0aW9uIG9uIGFuIEFXUyBQYW5vcmFtYSBBcHBsaWFuY2UgdG8gbWFuYWdlIHJlc291cmNlcyBpbiBQYW5vcmFtYSwgdXBsb2FkIGxvZ3MgYW5kIG1ldHJpY3MgdG8gQW1hem9uIENsb3VkV2F0Y2gsIGFuZCB0byBtYW5hZ2Ugb2JqZWN0cyBpbiBidWNrZXRzIGNyZWF0ZWQgZm9yIHVzZSB3aXRoIFBhbm9yYW1hLiAqL1xuICAgIHB1YmxpYyBBV1NQYW5vcmFtYUdyZWVuZ3Jhc3NHcm91cFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFub3JhbWFHcmVlbmdyYXNzR3JvdXBSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBTYWdlTWFrZXIgdG8gbWFuYWdlIG9iamVjdHMgaW4gYnVja2V0cyBjcmVhdGVkIGZvciB1c2Ugd2l0aCBBV1MgUGFub3JhbWEuICovXG4gICAgcHVibGljIEFXU1Bhbm9yYW1hU2FnZU1ha2VyUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQYW5vcmFtYVNhZ2VNYWtlclJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIFBhbm9yYW1hIHRvIG1hbmFnZSByZXNvdXJjZXMgaW4gQVdTIElvVCwgQVdTIFNlY3JldHMgTWFuYWdlciBhbmQgQVdTIFBhbm9yYW1hLiAqL1xuICAgIHB1YmxpYyBBV1NQYW5vcmFtYVNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Bhbm9yYW1hU2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIFBhbm9yYW1hIHRvIG1hbmFnZSByZXNvdXJjZXMgaW4gQW1hem9uIFMzLCBBV1MgSW9ULCBBV1MgSW9UIEdyZWVuR3Jhc3MsIEFXUyBMYW1iZGEsIEFtYXpvbiBTYWdlTWFrZXIsIGFuZCBBbWF6b24gQ2xvdWRXYXRjaCBMb2dzLCBhbmQgdG8gcGFzcyBzZXJ2aWNlIHJvbGVzIHRvIEFXUyBJb1QsIEFXUyBJb1QgR3JlZW5HcmFzcywgYW5kIEFtYXpvbiBTYWdlTWFrZXIuICovXG4gICAgcHVibGljIEFXU1Bhbm9yYW1hU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFub3JhbWFTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBQYXJ0bmVyIENlbnRyYWwgYW5kIHJlbGF0ZWQgQVdTIFNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NQYXJ0bmVyQ2VudHJhbEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lckNlbnRyYWxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbmVjZXNzYXJ5IGFjY2VzcyBmb3Igb3Bwb3J0dW5pdHkgbWFuYWdlbWVudCBhY3Rpdml0aWVzLiAqL1xuICAgIHB1YmxpYyBBV1NQYXJ0bmVyQ2VudHJhbE9wcG9ydHVuaXR5TWFuYWdlbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQYXJ0bmVyQ2VudHJhbE9wcG9ydHVuaXR5TWFuYWdlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG5lY2Vzc2FyeSBhY2Nlc3MgZm9yIGRldmVsb3BlciB0ZXN0aW5nIGluIHRoZSBTYW5kYm94IGNhdGFsb2cuICovXG4gICAgcHVibGljIEFXU1BhcnRuZXJDZW50cmFsU2FuZGJveEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lckNlbnRyYWxTYW5kYm94RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgUmVzb3VyY2VTbmFwc2hvdEpvYiB0byByZWFkIGEgcmVzb3VyY2UgYW5kIHNuYXBzaG90IGl0IGluIHRoZSB0YXJnZXQgZW5nYWdlbWVudC4gKi9cbiAgICBwdWJsaWMgQVdTUGFydG5lckNlbnRyYWxTZWxsaW5nUmVzb3VyY2VTbmFwc2hvdEpvYkV4ZWN1dGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lckNlbnRyYWxTZWxsaW5nUmVzb3VyY2VTbmFwc2hvdEpvYkV4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBjYW4gYmUgdXNlZCB0byBncmFudCByZWFkLW9ubHkgYWNjZXNzIHRvIEFQSXMgdGhhdCBjYW4gcmVhZCBzZXJ2aWNlIG1ldGFkYXRhIGZvciBzZXJ2aWNlcyBpbiB5b3VyIEFXUyBhY2NvdW50LiBZb3UgY2FuIHVzZSB0aGlzIHBvbGljeSB0byBwcm92aWRlIHlvdXIgcGFydG5lcnMgaW4gdGhlIFBhcnRuZXItTGVkIFN1cHBvcnQgUHJvZ3JhbSB3aXRoIGFjY2VzcyB0byB0aGUgc2VydmljZXMgc3BlY2lmaWVkIGluIHRoZSBwZXJtaXNzaW9ucyBkZXRhaWxzIHNlY3Rpb24gYmVsb3cuICovXG4gICAgcHVibGljIEFXU1BhcnRuZXJMZWRTdXBwb3J0UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lckxlZFN1cHBvcnRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9uIHRvIEFXUyBQQ1MgY29tcHV0ZSBub2RlcyB0byBjb25uZWN0IHRvIEFXUyBQQ1MgY2x1c3RlcnMuICovXG4gICAgcHVibGljIEFXU1BDU0NvbXB1dGVOb2RlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BDU0NvbXB1dGVOb2RlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIFBDUyB0byBtYW5hZ2UgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NQQ1NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQQ1NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBQcmljZSBMaXN0IFNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU1ByaWNlTGlzdFNlcnZpY2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ByaWNlTGlzdFNlcnZpY2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYXVkaXRvciBhY2Nlc3MgdG8gQVdTIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5ICovXG4gICAgcHVibGljIEFXU1ByaXZhdGVDQUF1ZGl0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJpdmF0ZUNBQXVkaXRvcik7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBlc3NlbnRpYWwgcGVybWlzc2lvbnMgZm9yIHRoZSBBV1MgUHJpdmF0ZSBDQSBDb25uZWN0b3IgZm9yIEt1YmVybmV0ZXMuICovXG4gICAgcHVibGljIEFXU1ByaXZhdGVDQUNvbm5lY3RvckZvckt1YmVybmV0ZXNQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJpdmF0ZUNBQ29ubmVjdG9yRm9yS3ViZXJuZXRlc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSAqL1xuICAgIHB1YmxpYyBBV1NQcml2YXRlQ0FGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ByaXZhdGVDQUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwcml2aWxlZ2VkIGNlcnRpZmljYXRlIHVzZXIgYWNjZXNzIHRvIEFXUyBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSAqL1xuICAgIHB1YmxpYyBBV1NQcml2YXRlQ0FQcml2aWxlZ2VkVXNlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcml2YXRlQ0FQcml2aWxlZ2VkVXNlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5ICovXG4gICAgcHVibGljIEFXU1ByaXZhdGVDQVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ByaXZhdGVDQVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgY2VydGlmaWNhdGUgdXNlciBhY2Nlc3MgdG8gQVdTIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5ICovXG4gICAgcHVibGljIEFXU1ByaXZhdGVDQVVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJpdmF0ZUNBVXNlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBhZG1pbmlzdHJhdGl2ZSBhY3Rpb25zIGZvciBhbiBBV1MgUHJpdmF0ZSBNYXJrZXRwbGFjZS4gKi9cbiAgICBwdWJsaWMgQVdTUHJpdmF0ZU1hcmtldHBsYWNlQWRtaW5GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ByaXZhdGVNYXJrZXRwbGFjZUFkbWluRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBjcmVhdGluZyByZXF1ZXN0cyBpbiBhbiBBV1MgUHJpdmF0ZSBNYXJrZXRwbGFjZS4gKi9cbiAgICBwdWJsaWMgQVdTUHJpdmF0ZU1hcmtldHBsYWNlUmVxdWVzdHMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJpdmF0ZU1hcmtldHBsYWNlUmVxdWVzdHMpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIFByaXZhdGUgTmV0d29ya3MgU2VydmljZSB0byBtYW5hZ2UgcmVzb3VyY2VzIG9uIGJlaGFsZiBvZiB0aGUgY3VzdG9tZXIuICovXG4gICAgcHVibGljIEFXU1ByaXZhdGVOZXR3b3Jrc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ByaXZhdGVOZXR3b3Jrc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgQ29kZUJ1aWxkIG5lZWRzIHRvIHJ1biBhIGJ1aWxkIGZvciBBV1MgUHJvdG9uIENvZGVCdWlsZCBQcm92aXNpb25pbmcuICovXG4gICAgcHVibGljIEFXU1Byb3RvbkNvZGVCdWlsZFByb3Zpc2lvbmluZ0Jhc2ljQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Byb3RvbkNvZGVCdWlsZFByb3Zpc2lvbmluZ0Jhc2ljQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBQcm90b24gdG8gbWFuYWdlIFByb3RvbiByZXNvdXJjZSBwcm92aXNpb25pbmcgdXNpbmcgQ29kZUJ1aWxkIGFuZCBvdGhlciBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU1Byb3RvbkNvZGVCdWlsZFByb3Zpc2lvbmluZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Byb3RvbkNvZGVCdWlsZFByb3Zpc2lvbmluZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBBV1MgUHJvdG9uIEFQSXMgYW5kIE1hbmFnZW1lbnQgQ29uc29sZSwgYnV0IGRvZXMgbm90IGFsbG93IGFkbWluaXN0cmF0aW9uIG9mIFByb3RvbiB0ZW1wbGF0ZXMgb3IgZW52aXJvbm1lbnRzLiAqL1xuICAgIHB1YmxpYyBBV1NQcm90b25EZXZlbG9wZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJvdG9uRGV2ZWxvcGVyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFXUyBQcm90b24gQVBJcyBhbmQgTWFuYWdlbWVudCBDb25zb2xlLiBJbiBhZGRpdGlvbiB0byB0aGVzZSBwZXJtaXNzaW9ucywgYWNjZXNzIHRvIEFtYXpvbiBTMyBpcyBhbHNvIG5lZWRlZCB0byByZWdpc3RlciB0ZW1wbGF0ZSBidW5kbGVzIGZyb20geW91ciBTMyBidWNrZXRzLCBhcyB3ZWxsIGFzIGFjY2VzcyB0byBBbWF6b24gSUFNIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHRoZSBzZXJ2aWNlIHJvbGVzIGZvciBQcm90b24uICovXG4gICAgcHVibGljIEFXU1Byb3RvbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJvdG9uRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gdGhlIEFXUyBQcm90b24gQVBJcyBhbmQgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NQcm90b25SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcm90b25SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB3aGljaCBhbGxvd3MgQVdTIFByb3RvbiB0byBzeW5jIHlvdXIgc2VydmljZSwgZW52aXJvbm1lbnQgYW5kIGNvbXBvbmVudCBkZWZpbml0aW9ucyBmcm9tIHlvdXIgZ2l0IHJlcG9zaXRvcnkgdG8gQVdTIFByb3Rvbi4gKi9cbiAgICBwdWJsaWMgQVdTUHJvdG9uU2VydmljZUdpdFN5bmNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcm90b25TZXJ2aWNlR2l0U3luY1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHdoaWNoIGFsbG93cyBBV1MgUHJvdG9uIHRvIHN5bmMgeW91ciBnaXQgcmVwb3NpdG9yeSBjb250ZW50cyB0byBQcm90b24gb3Igc3luYyBQcm90b24gY29udGVudHMgdG8geW91ciBnaXQgcmVwb3NpdG9yaWVzLiAqL1xuICAgIHB1YmxpYyBBV1NQcm90b25TeW5jU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJvdG9uU3luY1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIHZpZXcgYW5kIG1vZGlmeSBwdXJjaGFzZSBvcmRlcnMgb24gYmlsbGluZyBjb25zb2xlICovXG4gICAgcHVibGljIEFXU1B1cmNoYXNlT3JkZXJzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHVyY2hhc2VPcmRlcnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBBV1NRdWlja1NldHVwQ0ZHQ1BhY2tzUGVybWlzc2lvbnNCb3VuZGFyeSBwb2xpY3kgZGVmaW5lcyB0aGUgbGlzdCBvZiBwZXJtaXNzaW9ucyB0aGF0IGFyZSBwZXJtaXR0ZWQgaW4gYW4gSUFNIHJvbGUgY3JlYXRlZCBieSBRdWljayBTZXR1cC4gUXVpY2sgU2V0dXAgdXNlcyBhIHJvbGUgY3JlYXRlZCB3aXRoIHRoaXMgcG9saWN5IHRvIGRlcGxveSBBV1MgQ29uZmlnIGNvbmZvcm1hbmNlIHBhY2tzLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwQ0ZHQ1BhY2tzUGVybWlzc2lvbnNCb3VuZGFyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwQ0ZHQ1BhY2tzUGVybWlzc2lvbnNCb3VuZGFyeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBBV1MgU3lzdGVtcyBNYW5hZ2VyIFF1aWNrIFNldHVwIHRvIGRlcGxveSBtdWx0aXBsZSBjb25maWd1cmF0aW9uIHR5cGVzLiBUaGVzZSBjb25maWd1cmF0aW9uIHR5cGVzIGNyZWF0ZSBJQU0gcm9sZXMgYW5kIGF1dG9tYXRpb25zIHRoYXQgY29uZmlndXJlIGZyZXF1ZW50bHkgdXNlZCBBbWF6b24gV2ViIFNlcnZpY2VzIHNlcnZpY2VzIGFuZCBmZWF0dXJlcyB3aXRoIHJlY29tbWVuZGVkIGJlc3QgcHJhY3RpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwRGVwbG95bWVudFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cERlcGxveW1lbnRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIEFXU1F1aWNrU2V0dXBEZXZPcHNHdXJ1UGVybWlzc2lvbnNCb3VuZGFyeSBwb2xpY3kgZGVmaW5lcyB0aGUgbGlzdCBvZiBwZXJtaXNzaW9ucyB0aGF0IGFyZSBwZXJtaXR0ZWQgaW4gYW4gSUFNIHJvbGUgY3JlYXRlZCBieSBRdWljayBTZXR1cC4gUXVpY2sgU2V0dXAgdXNlcyBhIHJvbGUgY3JlYXRlZCB3aXRoIHRoaXMgcG9saWN5IHRvIGVuYWJsZSBhbmQgY29uZmlndXJlIEFtYXpvbiBEZXZPcHMgR3VydS4gVGhpcyBwb2xpY3kgYWxzbyBwcm92aWRlcyBwZXJtaXNzaW9ucyB0byBlbmFibGUgU3lzdGVtcyBNYW5hZ2VyIEV4cGxvcmVyLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwRGV2T3BzR3VydVBlcm1pc3Npb25zQm91bmRhcnkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cERldk9wc0d1cnVQZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICB9XG5cbiAgICAvKiogUXVpY2tTZXR1cCBjcmVhdGVzIElBTSByb2xlcyB3aGljaCBlbmFibGUgaXQgdG8gY29uZmlndXJlIHRoZSBTeXN0ZW1zIE1hbmFnZXIgRGlzdHJpYnV0b3IgZmVhdHVyZSBvbiB5b3VyIGJlaGFsZiwgYW5kIHVzZXMgdGhpcyBwb2xpY3kgd2hlbiBjcmVhdGluZyBzdWNoIHJvbGVzIHRvIGRlZmluZSB0aGUgYm91bmRhcnkgb2YgdGhlaXIgcGVybWlzc2lvbnMuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBEaXN0cmlidXRvclBlcm1pc3Npb25zQm91bmRhcnkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cERpc3RyaWJ1dG9yUGVybWlzc2lvbnNCb3VuZGFyeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IFN5c3RlbXMgTWFuYWdlciB0byBydW4gdGhlIEFXU1F1aWNrU2V0dXBUeXBlLUVuYWJsZUFSRVggQXV0b21hdGlvbiBydW5ib29rLCB3aGljaCBlbmFibGVzIEFXUyBSZXNvdXJjZSBFeHBsb3JlciBmb3IgdXNlIHdpdGggU3lzdGVtcyBNYW5hZ2VyLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwRW5hYmxlQVJFWEV4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwRW5hYmxlQVJFWEV4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IHByaW5jaXBhbHMgdG8gcnVuIHRoZSBBV1NRdWlja1NldHVwVHlwZS1FbmFibGVESE1DIEF1dG9tYXRpb24gcnVuYm9vaywgd2hpY2ggZW5hYmxlcyBEZWZhdWx0IEhvc3QgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwRW5hYmxlREhNQ0V4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwRW5hYmxlREhNQ0V4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBRdWljayBTZXR1cCB0byBkZXBsb3kgdGhlIGNvbmZpZ3VyYXRpb24gdHlwZSByZXF1aXJlZCB0byBzZXQgdXAganVzdC1pbi10aW1lIG5vZGUgYWNjZXNzLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwSklUTkFEZXBsb3ltZW50Um9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwSklUTkFEZXBsb3ltZW50Um9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IFN5c3RlbXMgTWFuYWdlciB0byBjcmVhdGUgYSBkZWZhdWx0IElBTSBpbnN0YW5jZSBwcm9maWxlIGZvciB0aGUgUXVpY2sgU2V0dXAgY2FwYWJpbGl0eSBhbmQgYXR0YWNoIGl0IHRvIEFtYXpvbiBFQzIgaW5zdGFuY2VzIHRoYXQgZG9uJ3QgYWxyZWFkeSBoYXZlIGFuIGluc3RhbmNlLiBwcm9maWxlIGF0dGFjaGVkLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwTWFuYWdlZEluc3RhbmNlUHJvZmlsZUV4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwTWFuYWdlZEluc3RhbmNlUHJvZmlsZUV4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGVuYWJsZSBqdXN0LWluLXRpbWUgbm9kZSBhY2Nlc3MgZm9yIFN5c3RlbXMgTWFuYWdlci4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cE1hbmFnZUpJVE5BUmVzb3VyY2VzRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBNYW5hZ2VKSVROQVJlc291cmNlc0V4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgcGF0Y2ggYmFzZWxpbmVzIHRoYXQgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgYnkgYW4gYWRtaW5pc3RyYXRvciBpbiB0aGUgY3VycmVudCBBV1MgYWNjb3VudCBvciBvcmdhbml6YXRpb24gdXNpbmcgUXVpY2sgU2V0dXAuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBQYXRjaFBvbGljeUJhc2VsaW5lQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBQYXRjaFBvbGljeUJhc2VsaW5lQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBRdWljayBTZXR1cCB0byBjcmVhdGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIHBhdGNoIHBvbGljeSBjb25maWd1cmF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwUGF0Y2hQb2xpY3lEZXBsb3ltZW50Um9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwUGF0Y2hQb2xpY3lEZXBsb3ltZW50Um9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFF1aWNrU2V0dXAgY3JlYXRlcyBJQU0gcm9sZXMgd2hpY2ggZW5hYmxlIGl0IHRvIGNvbmZpZ3VyZSB0aGUgU3lzdGVtcyBNYW5hZ2VyIFBhdGNoIE1hbmFnZXIgZmVhdHVyZSBvbiB5b3VyIGJlaGFsZiwgYW5kIHVzZXMgdGhpcyBwb2xpY3kgd2hlbiBjcmVhdGluZyBzdWNoIHJvbGVzIHRvIGRlZmluZSB0aGUgYm91bmRhcnkgb2YgdGhlaXIgcGVybWlzc2lvbnMuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBQYXRjaFBvbGljeVBlcm1pc3Npb25zQm91bmRhcnkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cFBhdGNoUG9saWN5UGVybWlzc2lvbnNCb3VuZGFyeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBBV1NRdWlja1NldHVwU2NoZWR1bGVyUGVybWlzc2lvbnNCb3VuZGFyeSBwb2xpY3kgZGVmaW5lcyB0aGUgbGlzdCBvZiBwZXJtaXNzaW9ucyB0aGF0IGFyZSBwZXJtaXR0ZWQgaW4gYW4gSUFNIHJvbGUgY3JlYXRlZCBieSBRdWljayBTZXR1cC4gUXVpY2sgU2V0dXAgdXNlcyBhIHJvbGUgY3JlYXRlZCB3aXRoIHRoaXMgcG9saWN5IHRvIGVuYWJsZSBhbmQgY29uZmlndXJlIHNjaGVkdWxlZCBvcGVyYXRpb25zIG9uIEFtYXpvbiBFQzIgaW5zdGFuY2VzIGFuZCBvdGhlciByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBTY2hlZHVsZXJQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBTY2hlZHVsZXJQZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGFkbWluaXN0cmF0aXZlIHBlcm1zc2lvbnMgdGhhdCBhbGxvdyBRdWljayBTZXR1cCB0byBjcmVhdGUgcmVzb3VyY2VzIHRoYXQgYXJlIHVzZWQgZHVyaW5nIHRoZSBTeXN0ZW1zIE1hbmFnZXIgb25ib2FyZGluZyBwcm9jZXNzLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwU1NNRGVwbG95bWVudFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cFNTTURlcGxveW1lbnRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIGZvciBsaXN0aW5nIGFsbCBTMyBidWNrZXRzIGluIGFuIGFjY291bnQ7IGFuZCBmb3IgbWFuYWdpbmcgYW5kIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gYWJvdXQgc3BlY2lmaWMgYnVja2V0cyBpbiB0aGUgcHJpbmNpcGFsIGFjY291bnQgdGhhdCBhcmUgbWFuYWdlZCB0aHJvdWdoIEFXUyBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZXMuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBTU01EZXBsb3ltZW50UzNCdWNrZXRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBTU01EZXBsb3ltZW50UzNCdWNrZXRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUXVpY2sgU2V0dXAgY3JlYXRlcyBJQU0gcm9sZXMgd2hpY2ggZW5hYmxlIGl0IHRvIGNvbmZpZ3VyZSB0aGUgSG9zdCBNYW5hZ2VyIFF1aWNrIFNldHVwIHR5cGUgb24geW91ciBiZWhhbGYsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgc3VjaCByb2xlcyB0byBkZWZpbmUgdGhlIGJvdW5kYXJ5IG9mIHRoZWlyIHBlcm1pc3Npb25zLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwU1NNSG9zdE1nbXRQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBTU01Ib3N0TWdtdFBlcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgcG9saWN5IGdyYW50cyBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IFF1aWNrIFNldHVwIHRvIHJ1biB0aGUgYSBBV1MgQ2xvdWRGb3JtYXRpb24gY3VzdG9tIHJlc291cmNlIG9uIGxpZmVjeWNsZSBldmVudHMgZHVyaW5nIFF1aWNrIFNldHVwIGRlcGxveW1lbnQgaW4gU3lzdGVtcyBNYW5hZ2VyLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwU1NNTGlmZWN5Y2xlTWFuYWdlbWVudEV4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwU1NNTGlmZWN5Y2xlTWFuYWdlbWVudEV4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IFN5c3RlbXMgTWFuYWdlciB0byBjcmVhdGUgcHJlcmVxdWlzaXRlcyBzdWNoIGFzIElBTSByb2xlcyByZXF1aXJlZCBmb3IgU3lzdGVtcyBNYW5hZ2VyIG9uYm9hcmRpbmcuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBTU01NYW5hZ2VSZXNvdXJjZXNFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cFNTTU1hbmFnZVJlc291cmNlc0V4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IHByaW5jaXBhbHMgdG8gcnVuIHRoZSBBV1NRdWlja1NldHVwVHlwZS1TdGFydFNTTUFzc29jaWF0aW9ucyBBdXRvbWF0aW9uIHJ1bmJvb2ssIHdoaWNoIHN0YXJ0cyBTdGF0ZSBNYW5hZ2VyIEFzc29jaWF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cFN0YXJ0U1NNQXNzb2NpYXRpb25zRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBTdGFydFNTTUFzc29jaWF0aW9uc0V4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBtYW5hZ2VkIHBvbGljeSBBV1NRdWlja1NldHVwU3RhcnRTdG9wSW5zdGFuY2VzRXhlY3V0aW9uUG9saWN5IHByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBRdWljayBTZXR1cCB0byBzdGFydCBhbmQgc3RvcCBBbWF6b24gRUMyIGluc3RhbmNlcyBvbiBhIHNjaGVkdWxlLiBUaGlzIHBvbGljeSBpcyB1c2VkIHdpdGggdGhlIFF1aWNrIFNldHVwIHNjaGVkdWxlciBjb25maWd1cmF0aW9uIHR5cGUuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBTdGFydFN0b3BJbnN0YW5jZXNFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cFN0YXJ0U3RvcEluc3RhbmNlc0V4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBzZXQgb2YgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gcGVyZm9ybSBRdWlja1NpZ2h0IEFzc2V0IEJ1bmRsZSBFeHBvcnQgT3BlcmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NpZ2h0QXNzZXRCdW5kbGVFeHBvcnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTaWdodEFzc2V0QnVuZGxlRXhwb3J0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdGhlIHNldCBvZiBwZXJtaXNzaW9ucyByZXF1aXJlZCB0byBwZXJmb3JtIFF1aWNrU2lnaHQgQXNzZXQgQnVuZGxlIEltcG9ydCBPcGVyYXRpb25zICovXG4gICAgcHVibGljIEFXU1F1aWNrU2lnaHRBc3NldEJ1bmRsZUltcG9ydFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0QXNzZXRCdW5kbGVJbXBvcnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBRdWlja3NpZ2h0IGFjY2VzcyB0byBBdGhlbmEgQVBJIGFuZCBTMyBidWNrZXRzIHVzZWQgZm9yIEF0aGVuYSBxdWVyeSByZXN1bHRzICovXG4gICAgcHVibGljIEFXU1F1aWNrc2lnaHRBdGhlbmFBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tzaWdodEF0aGVuYUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IFF1aWNrU2lnaHQgdG8gZGVzY3JpYmUgdGhlIFJEUyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTaWdodERlc2NyaWJlUkRTKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2lnaHREZXNjcmliZVJEUyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IFF1aWNrU2lnaHQgdG8gZGVzY3JpYmUgUmVkc2hpZnQgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU1F1aWNrU2lnaHREZXNjcmliZVJlZHNoaWZ0KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2lnaHREZXNjcmliZVJlZHNoaWZ0KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFtYXpvbiBFbGFzdGljc2VhcmNoIHJlc291cmNlcyBmcm9tIEFtYXpvbiBRdWlja1NpZ2h0ICovXG4gICAgcHVibGljIEFXU1F1aWNrU2lnaHRFbGFzdGljc2VhcmNoUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2lnaHRFbGFzdGljc2VhcmNoUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR2l2ZSBRdWlja1NpZ2h0IHJlYWQtb25seSBhY2Nlc3MgdG8gSW9UIEFuYWx5dGljcyBkYXRhc2V0cyAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NpZ2h0SW9UQW5hbHl0aWNzQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2lnaHRJb1RBbmFseXRpY3NBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBRdWlja1NpZ2h0IHRvIGxpc3QgSUFNIGVudGl0aWVzICovXG4gICAgcHVibGljIEFXU1F1aWNrU2lnaHRMaXN0SUFNKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2lnaHRMaXN0SUFNKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFtYXpvbiBPcGVuU2VhcmNoIHJlc291cmNlcyBmcm9tIEFtYXpvbiBRdWlja1NpZ2h0ICovXG4gICAgcHVibGljIEFXU1F1aWNrc2lnaHRPcGVuU2VhcmNoUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrc2lnaHRPcGVuU2VhcmNoUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFtYXpvbiBTYWdlTWFrZXIgcmVzb3VyY2VzIGZyb20gQW1hem9uIFF1aWNrU2lnaHQgKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTaWdodFNhZ2VNYWtlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0U2FnZU1ha2VyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHVzZWQgYnkgUXVpY2tTaWdodCB0byBjcmVhdGUgc2VjcmV0cyBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyIGFuZCB0byBhdHRhY2ggcmVzb3VyY2UgcG9saWNpZXMgb24gZXhpc3RpbmcgUXVpY2tTaWdodCBzZWNyZXRzLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NpZ2h0U2VjcmV0c01hbmFnZXJXcml0ZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0U2VjcmV0c01hbmFnZXJXcml0ZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB1c2VkIGJ5IFF1aWNrU2lnaHQgdG8gY3JlYXRlIHNlY3JldHMgaW4gQVdTIFNlY3JldHMgTWFuYWdlciBhbmQgdG8gYXR0YWNoIHJlc291cmNlIHBvbGljaWVzIG9uIGV4aXN0aW5nIFF1aWNrU2lnaHQgc2VjcmV0cy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTaWdodFNlY3JldHNNYW5hZ2VyV3JpdGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTaWdodFNlY3JldHNNYW5hZ2VyV3JpdGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgUXVpY2tTaWdodCBhY2Nlc3MgdG8gQVdTIFRpbWVzdHJlYW0gQVBJcy4gQ3VzdG9tZXJzIGNhbiBhdHRhY2ggdGhpcyBwb2xpY3kgdG8gQVdTIFF1aWNrU2lnaHQgcm9sZSB0byBhbGxvdyByZXRyaWV2YWwgb2YgZGF0YSBhbmQgbWV0YWRhdGEuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2lnaHRUaW1lc3RyZWFtUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2lnaHRUaW1lc3RyZWFtUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFZQQyBSZWFjaGFiaWxpdHkgQW5hbHl6ZXIgdG8gYWNjZXNzIEFXUyByZXNvdXJjZXMgYW5kIGludGVncmF0ZSB3aXRoIEFXUyBPcmdhbml6YXRpb25zIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NSZWFjaGFiaWxpdHlBbmFseXplclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1JlYWNoYWJpbGl0eUFuYWx5emVyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbiB0byB1c2UgQVdTIHNlcnZpY2VzIHdpdGggdGhlIEFXUyBUb29sa2l0IGZvciAuTkVUIFJlZmFjdG9yaW5nIGV4dGVuc2lvbiBmb3IgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8uIEl0IGlzIGludGVuZGVkIHRvIGJlIGF0dGFjaGVkIHRvIGEgbG9jYWwgQVdTIHByb2ZpbGUuIFRoZSBwb2xpY3kgYWxsb3dzIHVwbG9hZGluZyBhcHBsaWNhdGlvbiBhcnRpZmFjdHMgYW5kIGRvd25sb2FkaW5nIHRoZSByZXN1bHRpbmcgYXJ0aWZhY3RzIGZyb20gQW1hem9uIFMzLiBJdCBhbGxvd3MgYnVpbGRpbmcgYXBwbGljYXRpb25zIGludG8gYSBjb250YWluZXIgaW1hZ2UgdXNpbmcgQVdTIENvZGVCdWlsZCBhbmQgc3RvcmluZyBhbmQgcmV0cmlldmluZyB0aGUgaW1hZ2VzIGZyb20gQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFJlZ2lzdHJ5IChBbWF6b24gRUNSKS4gQW5kIGl0IGFsbG93cyBkZXBsb3ltZW50IG9mIHRoZSBhcHBsaWNhdGlvbiB0byBjb250YWluZXIgc2VydmljZXMgb24gQVdTIHN1Y2ggYXMgQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgKEFtYXpvbiBFQ1MpLCBvcHRpb25hbCBjcmVhdGlvbiBvZiBWUEMgcmVzb3VyY2VzLCBvcHRpb25hbCBjb25uZWN0aW9uIHRvIGV4aXN0aW5nIGluZnJhc3RydWN0dXJlIHN1Y2ggYXMgQVdTIERpcmVjdG9yeSBTZXJ2aWNlLCBhbmQgb3RoZXIgcmVsYXRlZCBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTUmVmYWN0b3JpbmdUb29sa2l0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZWZhY3RvcmluZ1Rvb2xraXRGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBBbWF6b24gRUNTIFRhc2tzIGNyZWF0ZWQgZm9yIHRlc3RpbmcgYXBwbGljYXRpb25zIGluIEFXUyB1c2luZyB0aGUgQVdTIFRvb2xraXQgZm9yIC5ORVQgUmVmYWN0b3JpbmcgZXh0ZW5zaW9uIGZvciBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpby4gVGhlIHBvbGljeSBncmFudHMgYWNjZXNzIHRvIGRvd25sb2FkIGFwcGxpY2F0aW9uIGFydGlmYWN0cyBmcm9tIEFtYXpvbiBTMywgY29tbXVuaWNhdGUgdGhlIHN0YXR1cyBvZiB0aGUgVGFzayB1c2luZyBBV1MgU3lzdGVtcyBNYW5hZ2VyLCBhbmQgb3RoZXIgcmVxdWlyZWQgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU1JlZmFjdG9yaW5nVG9vbGtpdFNpZGVjYXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVmYWN0b3JpbmdUb29sa2l0U2lkZWNhclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlOlBvc3QgUHJpdmF0ZSBhY2Nlc3MgdG8gcHVibGlzaCBDbG91ZFdhdGNoIG1ldHJpY3MgZGF0YSAqL1xuICAgIHB1YmxpYyBBV1NyZVBvc3RQcml2YXRlQ2xvdWRXYXRjaEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NyZVBvc3RQcml2YXRlQ2xvdWRXYXRjaEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyB0aGUgcmU6UG9zdCBTcGFjZSBzZXJ2aWNlIHRvIGNyZWF0ZSwgbWFuYWdlLCBhbmQgcmVzb2x2ZSBTdXBwb3J0IGNhc2VzIHRoYXQgYXJlIGNyZWF0ZWQgdGhyb3VnaCB0aGUgU3BhY2UgYXBwbGljYXRpb24uICovXG4gICAgcHVibGljIEFXU1JlcG9zdFNwYWNlU3VwcG9ydE9wZXJhdGlvbnNQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVwb3N0U3BhY2VTdXBwb3J0T3BlcmF0aW9uc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIFJlc2lsaWVuY2UgSHViIHNlcnZpY2Ugcm9sZSB3aGljaCBhbGxvd3MgYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlcyBpbiBvcmRlciB0byBleGVjdXRlIGFzc2Vzc21lbnQuICovXG4gICAgcHVibGljIEFXU1Jlc2lsaWVuY2VIdWJBc3NzZXNzbWVudEV4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXNpbGllbmNlSHViQXNzc2Vzc21lbnRFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgUmVzb3VyY2UgQWNjZXNzIE1hbmFnZXIgKi9cbiAgICBwdWJsaWMgQVdTUmVzb3VyY2VBY2Nlc3NNYW5hZ2VyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXNvdXJjZUFjY2Vzc01hbmFnZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgUmVzb3VyY2UgQWNjZXNzIE1hbmFnZXIuICovXG4gICAgcHVibGljIEFXU1Jlc291cmNlQWNjZXNzTWFuYWdlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Jlc291cmNlQWNjZXNzTWFuYWdlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBSZXNvdXJjZSBBY2Nlc3MgTWFuYWdlciBBUElzIG5lZWRlZCBieSBhIHJlc291cmNlIHNoYXJlIHBhcnRpY2lwYW50LiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUFjY2Vzc01hbmFnZXJSZXNvdXJjZVNoYXJlUGFydGljaXBhbnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzb3VyY2VBY2Nlc3NNYW5hZ2VyUmVzb3VyY2VTaGFyZVBhcnRpY2lwYW50QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGNvbnRhaW5pbmcgUmVhZC1vbmx5IEFXUyBSZXNvdXJjZSBBY2Nlc3MgTWFuYWdlciBhY2Nlc3MgdG8gY3VzdG9tZXJzJyBPcmdhbml6YXRpb25zIHN0cnVjdHVyZS4gSXQgYWxzbyBjb250YWlucyBJQU0gcGVybWlzc2lvbnMgdG8gc2VsZi1kZWxldGUgdGhlIHJvbGUuICovXG4gICAgcHVibGljIEFXU1Jlc291cmNlQWNjZXNzTWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Jlc291cmNlQWNjZXNzTWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zIHRvIGFjY2VzcyBSZXNvdXJjZSBFeHBsb3JlciByZXNvdXJjZXMgYW5kIGdyYW50cyByZWFkLW9ubHkgcGVybWlzc2lvbnMgdG8gb3RoZXIgQVdTIHNlcnZpY2VzIHRvIHN1cHBvcnQgdGhpcyBhY2Nlc3MuICovXG4gICAgcHVibGljIEFXU1Jlc291cmNlRXhwbG9yZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Jlc291cmNlRXhwbG9yZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zIHRvIFJlc291cmNlIEV4cGxvcmVyIGFuZCBncmFudHMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIHRvIG90aGVyIEFXUyBzZXJ2aWNlcyB0byBzdXBwb3J0IHRoaXMgYWNjZXNzLiBUaGUgQVdTIE9yZ2FuaXphdGlvbnMgYWRtaW5pc3RyYXRvciBuZWVkcyB0aGVzZSBwZXJtaXNzaW9ucyB0byBzZXR1cCBhbmQgbWFuYWdlIG11bHRpLWFjY291bnQgc2VhcmNoIGluIHRoZSBjb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUV4cGxvcmVyT3JnYW5pemF0aW9uc0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXNvdXJjZUV4cGxvcmVyT3JnYW5pemF0aW9uc0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyByZWFkLW9ubHkgcGVybWlzc2lvbnMgdG8gc2VhcmNoIGZvciBhbmQgdmlldyBSZXNvdXJjZSBFeHBsb3JlciByZXNvdXJjZXMgYW5kIGdyYW50cyByZWFkLW9ubHkgcGVybWlzc2lvbnMgdG8gb3RoZXIgQVdTIHNlcnZpY2VzIHRvIHN1cHBvcnQgdGhpcyBhY2Nlc3MuICovXG4gICAgcHVibGljIEFXU1Jlc291cmNlRXhwbG9yZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXNvdXJjZUV4cGxvcmVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgUmVzb3VyY2UgRXhwbG9yZXIgdG8gdmlldyByZXNvdXJjZXMgYW5kIENsb3VkVHJhaWwgZXZlbnRzIG9uIHlvdXIgYmVoYWxmIHRvIGluZGV4IHlvdXIgcmVzb3VyY2VzIGZvciBzZWFyY2guICovXG4gICAgcHVibGljIEFXU1Jlc291cmNlRXhwbG9yZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXNvdXJjZUV4cGxvcmVyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIGlzIHRoZSByZWFkIG9ubHkgcG9saWN5IGZvciBBV1MgUmVzb3VyY2UgR3JvdXBzICovXG4gICAgcHVibGljIEFXU1Jlc291cmNlR3JvdXBzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzb3VyY2VHcm91cHNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBSb2JvTWFrZXIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuIEFsc28gcHJvdmlkZXMgc2VsZWN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIChlLmcuLCBTMywgSUFNKS4gKi9cbiAgICBwdWJsaWMgQVdTUm9ib01ha2VyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSb2JvTWFrZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgUm9ib01ha2VyIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgU0RLICovXG4gICAgcHVibGljIEFXU1JvYm9NYWtlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1JvYm9NYWtlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUm9ib01ha2VyIHNlcnZpY2UgcG9saWN5ICovXG4gICAgcHVibGljIEFXU1JvYm9NYWtlclNlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUm9ib01ha2VyU2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFJvYm9NYWtlciBzZXJ2aWNlIHBvbGljeSAqL1xuICAgIHB1YmxpYyBBV1NSb2JvTWFrZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSb2JvTWFrZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFsbCBwZXJtaXNzaW9ucyB0byBJQU0gUm9sZXMgQW55d2hlcmUgcmVzb3VyY2VzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvOiBDcmVhdGVQcm9maWxlLCBEZWxldGVUcnVzdEFuY2hvciwgRGlzYWJsZUNSTCwgUmVzZXROb3RpZmljYXRpb25TZXR0aW5ncy4gKi9cbiAgICBwdWJsaWMgQVdTUm9sZXNBbnl3aGVyZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUm9sZXNBbnl3aGVyZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgcGVybWlzc2lvbnMgdG8gSUFNIFJvbGVzIEFueXdoZXJlIHJlc291cmNlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bzogR2V0VHJ1c3RBbmNob3IsIExpc3RQcm9maWxlcywgR2V0Q1JMLiBUaGVyZSB3aWxsIGJlIG5vIG90aGVyIHBlcm1pc3Npb25zIGZvciBvdGhlciBzZXJ2aWNlcyBpbmNsdWRlZCBpbiB0aGlzIHBvbGljeS4gKi9cbiAgICBwdWJsaWMgQVdTUm9sZXNBbnl3aGVyZVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1JvbGVzQW55d2hlcmVSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBJQU0gUm9sZXMgQW55d2hlcmUgdG8gcHVibGlzaCBzZXJ2aWNlL3VzYWdlIG1ldHJpY3MgdG8gQ2xvdWRXYXRjaCBhbmQgY2hlY2sgdGhlIHN0YXR1cyBvZiBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0aWVzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NSb2xlc0FueXdoZXJlU2VydmljZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSb2xlc0FueXdoZXJlU2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IEFtYXpvbiBTMyBvbiBPdXRwb3N0cyBzZXJ2aWNlIHRvIG1hbmFnZSBFQzIgbmV0d29yayByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU1MzT25PdXRwb3N0c1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1MzT25PdXRwb3N0c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gU2F2aW5ncyBQbGFucyBzZXJ2aWNlICovXG4gICAgcHVibGljIEFXU1NhdmluZ3NQbGFuc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2F2aW5nc1BsYW5zRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gU2F2aW5ncyBQbGFucyBzZXJ2aWNlICovXG4gICAgcHVibGljIEFXU1NhdmluZ3NQbGFuc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NhdmluZ3NQbGFuc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHJldHJpZXZlIGFuZCBkZXNjcmliZSBzZWNyZXRzIGZyb20gU2VjcmV0cyBNYW5hZ2VyLiBUaGlzIHBvbGljeSBhbHNvIGFsbG93cyBkZWNyeXB0aW5nIEtNUyBrZXlzIGZvciBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0cy4gKi9cbiAgICBwdWJsaWMgQVdTU2VjcmV0c01hbmFnZXJDbGllbnRSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWNyZXRzTWFuYWdlckNsaWVudFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdXNlIEFXUyBTZWN1cml0eSBIdWIuICovXG4gICAgcHVibGljIEFXU1NlY3VyaXR5SHViRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWN1cml0eUh1YkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbiB0byBlbmFibGUgYW5kIG1hbmFnZSBBV1MgU2VjdXJpdHkgSHViIHdpdGhpbiBhbiBvcmdhbml6YXRpb24uIEluY2x1ZGVzIGVuYWJsaW5nIHRoZSBzZXJ2aWNlIGFjcm9zcyB0aGUgb3JnYW5pemF0aW9uLCBhbmQgZGV0ZXJtaW5pbmcgdGhlIGRlbGVnYXRlZCBhZG1pbmlzdHJhdG9yIGFjY291bnQgZm9yIHRoZSBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUh1Yk9yZ2FuaXphdGlvbnNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VjdXJpdHlIdWJPcmdhbml6YXRpb25zQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgU2VjdXJpdHkgSHViIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUh1YlJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlY3VyaXR5SHViUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBIHNlcnZpY2UtbGlua2VkIHJvbGUgcmVxdWlyZWQgZm9yIEFXUyBTZWN1cml0eSBIdWIgdG8gYWNjZXNzIHlvdXIgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUh1YlNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlY3VyaXR5SHViU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgU2VjdXJpdHkgSHViIHRvIG1hbmFnZSBBV1MgQ29uZmlnIHJ1bGVzIGFuZCBTZWN1cml0eSBIdWIgcmVzb3VyY2VzIGluIHlvdXIgb3JnYW5pemF0aW9uIGFuZCBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTU2VjdXJpdHlIdWJWMlNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlY3VyaXR5SHViVjJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBwcm92aWRlcyBjdXN0b21lcnMgd2l0aCBSZWFkIGFuZCBXcml0ZSBwZXJtaXNzaW9ucyB0byBjYXNlIHJlc291cmNlcyB0aGF0IGFyZSBjcmVhdGVkIHRocm91Z2ggdGhlIFNlY3VyaXR5IEluY2lkZW50IFJlc3BvbnNlIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU1NlY3VyaXR5SW5jaWRlbnRSZXNwb25zZUNhc2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlY3VyaXR5SW5jaWRlbnRSZXNwb25zZUNhc2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHByb3ZpZGVzIGN1c3RvbWVycyB3aXRoIFJlYWQgYW5kIFdyaXRlIHBlcm1pc3Npb25zIHRvIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB0byB0aGUgU2VjdXJpdHkgSW5jaWRlbnQgUmVzcG9uc2Ugc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTU2VjdXJpdHlJbmNpZGVudFJlc3BvbnNlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWN1cml0eUluY2lkZW50UmVzcG9uc2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHByb3ZpZGVzIGN1c3RvbWVycyB3aXRoIFJlYWQtb25seSBwZXJtaXNzaW9ucyB0byBhbGwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgdG8gdGhlIFNlY3VyaXR5IEluY2lkZW50IFJlc3BvbnNlIHNlcnZpY2UuIFBlcm1pc3Npb24gaW5jbHVkZXMgYWNjZXNzIHRvIEdldENhc2VBdHRhY2htZW50RG93bmxvYWRVcmwgYXMgd2VsbCBmb3IgdGhlIGFiaWxpdHkgdG8gZ2V0IGNhc2UgYXR0YWNobWVudCBkb3dubG9hZCBVUkxzLiAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUluY2lkZW50UmVzcG9uc2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWN1cml0eUluY2lkZW50UmVzcG9uc2VSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIG1hbmFnZWQgb3IgdXNlZCBieSBTZWN1cml0eSBJbmNpZGVudCBSZXNwb25zZSAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUluY2lkZW50UmVzcG9uc2VTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWN1cml0eUluY2lkZW50UmVzcG9uc2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgU2VjdXJpdHkgSW5jaWRlbnQgUmVzcG9uc2UgdG8gY29udGludW91c2x5IG1vbml0b3IgeW91ciBlbnZpcm9ubWVudCBmb3Igc2VjdXJpdHkgdGhyZWF0cywgdHVuZSBzZWN1cml0eSBzZXJ2aWNlcyB0byByZWR1Y2UgYWxlcnQgbm9pc2UsIGFuZCBnYXRoZXIgaW5mb3JtYXRpb24gdG8gaW52ZXN0aWdhdGUgcG90ZW50aWFsIGluY2lkZW50cy4gKi9cbiAgICBwdWJsaWMgQVdTU2VjdXJpdHlJbmNpZGVudFJlc3BvbnNlVHJpYWdlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VjdXJpdHlJbmNpZGVudFJlc3BvbnNlVHJpYWdlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBzZXJ2aWNlIGNhdGFsb2cgYWRtaW4gY2FwYWJpbGl0aWVzICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VDYXRhbG9nQWRtaW5GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VDYXRhbG9nQWRtaW5GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBTZXJ2aWNlIENhdGFsb2cgYWRtaW4gY2FwYWJpbGl0aWVzICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VDYXRhbG9nQWRtaW5SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlQ2F0YWxvZ0FkbWluUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBTZXJ2aWNlIENhdGFsb2cgQXBwIFJlZ2lzdHJ5IGNhcGFiaWxpdGllcyAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlQ2F0YWxvZ0FwcFJlZ2lzdHJ5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlQ2F0YWxvZ0FwcFJlZ2lzdHJ5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gU2VydmljZSBDYXRhbG9nIEFwcCBSZWdpc3RyeSBjYXBhYmlsaXRlcyAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlQ2F0YWxvZ0FwcFJlZ2lzdHJ5UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZUNhdGFsb2dBcHBSZWdpc3RyeVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFNlcnZpY2UgQ2F0YWxvZyBBcHBSZWdpc3RyeSB0byBtYW5hZ2UgUmVzb3VyY2UgR3JvdXBzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VDYXRhbG9nQXBwUmVnaXN0cnlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlQ2F0YWxvZ0FwcFJlZ2lzdHJ5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBzZXJ2aWNlIGNhdGFsb2cgZW5kdXNlciBjYXBhYmlsaXRpZXMgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZUNhdGFsb2dFbmRVc2VyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlQ2F0YWxvZ0VuZFVzZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBTZXJ2aWNlIENhdGFsb2cgZW5kLXVzZXIgY2FwYWJpbGl0aWVzICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VDYXRhbG9nRW5kVXNlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VDYXRhbG9nRW5kVXNlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQSBTZXJ2aWNlIExpbmtlZCBSb2xlIFBvbGljeSBmb3IgQVdTIFNlcnZpY2VDYXRhbG9nIHRvIHN5bmMgd2l0aCBBV1MgT3JnYW5pemF0aW9ucyBvcmdhbml6YXRpb24gc3RydWN0dXJlICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VDYXRhbG9nT3Jnc0RhdGFTeW5jU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZUNhdGFsb2dPcmdzRGF0YVN5bmNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEEgU2VydmljZSBMaW5rZWQgUm9sZSBmb3IgQVdTIFNlcnZpY2VDYXRhbG9nIHRvIHN5bmMgUHJvdmlzaW9uaW5nIEFydGlmYWN0cyBmcm9tIHNvdXJjZSByZXBvc2l0b3JpZXMgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZUNhdGFsb2dTeW5jU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZUNhdGFsb2dTeW5jU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyByZXF1aXJlZCBmb3IgbWFuYWdpbmcgbm9kZWdyb3VwcyBpbiB0aGUgY3VzdG9tZXIncyBhY2NvdW50LiBUaGVzZSBwb2xpY2llcyByZWxhdGVkIHRvIG1hbmFnZW1lbnQgb2YgdGhlIGZvbGxvd2luZyByZXNvdXJjZXM6IEF1dG9zY2FsaW5nR3JvdXBzLCBTZWN1cml0eUdyb3VwcywgTGF1bmNoVGVtcGxhdGVzIGFuZCBJbnN0YW5jZVByb2ZpbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckFtYXpvbkVLU05vZGVncm91cCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvckFtYXpvbkVLU05vZGVncm91cCk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgU2VydmljZSBMaW5rZWQgUm9sZSBwcm92aWRlcyBBbWF6b24gUSBEZXZlbG9wZXIgYWJpbGl0eSB0byBwcm92aWRlIHVzYWdlIGluZm9ybWF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckFtYXpvblFEZXZlbG9wZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JBbWF6b25RRGV2ZWxvcGVyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBTZXJ2aWNlLUxpbmtlZCBSb2xlIHByb3ZpZGVzIEFXUyBUcmFuc2Zvcm0gd2l0aCB0aGUgYWJpbGl0eSB0byBwcm92aWRlIHVzYWdlIGluZm9ybWF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckFXU1RyYW5zZm9ybSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvckFXU1RyYW5zZm9ybSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBTeXN0ZW1zIE1hbmFnZXIgcmVzb3VyY2VzIHVzZWQgYnkgQ2xvdWRXYXRjaCBBbGFybXMgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JDbG91ZFdhdGNoQWxhcm1zQWN0aW9uU1NNU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JDbG91ZFdhdGNoQWxhcm1zQWN0aW9uU1NNU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQ2xvdWRXYXRjaCB0byBhY2Nlc3MgUkRTIFBlcmZvcm1hbmNlIEluc2lnaHRzIG1ldHJpY3Mgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JDbG91ZFdhdGNoTWV0cmljc0RiUGVyZkluc2lnaHRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JDbG91ZFdhdGNoTWV0cmljc0RiUGVyZkluc2lnaHRzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBIHNlcnZpY2UtbGlua2VkIHJvbGUgcmVxdWlyZWQgZm9yIEFtYXpvbiBDb2RlR3VydSBQcm9maWxlciB0byBzZW5kIG5vdGlmaWNhdGlvbnMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yQ29kZUd1cnVQcm9maWxlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvckNvZGVHdXJ1UHJvZmlsZXIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHJvbGUgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIENvZGVXaGlzcGVyZXIgdG8gYWNjZXNzIGRhdGEgaW4geW91ciBhY2NvdW50IHRvIGNhbGN1bGF0ZSBiaWxsaW5nLCBwcm92aWRlcyBhY2Nlc3MgdG8gY3JlYXRlIGFuZCBhY2Nlc3Mgc2VjdXJpdHkgcmVwb3J0cyBpbiBBbWF6b24gQ29kZUd1cnUsIGFuZCBlbWl0IGRhdGEgdG8gQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JDb2RlV2hpc3BlcmVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yQ29kZVdoaXNwZXJlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBFQzIgU2NoZWR1bGVkIEluc3RhbmNlcyB0byBsYXVuY2ggYW5kIG1hbmFnZSBzcG90IGluc3RhbmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JFQzJTY2hlZHVsZWRJbnN0YW5jZXMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JFQzJTY2hlZHVsZWRJbnN0YW5jZXMpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgR3JvdW5kU3RhdGlvbiB1c2VzIHRoaXMgc2VydmljZS1saW5rZWQgcm9sZSB0byBpbnZva2UgRUMyIHRvIGZpbmQgcHVibGljIElQdjQgYWRkcmVzc2VzICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yR3JvdW5kU3RhdGlvbkRhdGFmbG93RW5kcG9pbnRHcm91cFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvckdyb3VuZFN0YXRpb25EYXRhZmxvd0VuZHBvaW50R3JvdXBQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRUMySW1hZ2VCdWlsZGVyIHRvIGNhbGwgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckltYWdlQnVpbGRlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvckltYWdlQnVpbGRlcik7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgSW9UIFNpdGVXaXNlIHRvIHByb3Zpc2lvbiBhbmQgbWFuYWdlIGdhdGV3YXlzIGFzIHdlbGwgYXMgcXVlcnkgZGF0YS4gVGhlIHBvbGljeSBpbmNsdWRlcyByZXF1aXJlZCBBV1MgR3JlZW5ncmFzcyBwZXJtaXNzaW9ucyBmb3IgZGVwbG95aW5nIHRvIGdyb3VwcywgQVdTIExhbWJkYSBwZXJtaXNzaW9ucyBmb3IgY3JlYXRpbmcgYW5kIHVwZGF0aW5nIHNlcnZpY2UtcHJlZml4ZWQgZnVuY3Rpb25zLCBhbmQgQVdTIElvVCBBbmFseXRpY3MgcGVybWlzc2lvbnMgZm9yIHF1ZXJ5aW5nIGRhdGEgZnJvbSBkYXRhc3RvcmVzLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvcklvVFNpdGVXaXNlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9ySW9UU2l0ZVdpc2UpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgTG9nIERlbGl2ZXJ5IHNlcnZpY2UgdG8gZGVsaXZlciBsb2dzIGJ5IGNhbGxpbmcgbG9nIGRlc3RpbmF0aW9uIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckxvZ0RlbGl2ZXJ5UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yTG9nRGVsaXZlcnlQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQW1hem9uIE1vbml0cm9uIHBlcm1pc3Npb25zIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzLCBpbmNsdWRpbmcgQVdTIFNTTyB1c2VyIGFzc2lnbm1lbnQgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yTW9uaXRyb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JNb25pdHJvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIENsb3Vkd2F0Y2ggYWNjZXNzIHRvIHB1Ymxpc2ggb3BlcmF0aW9uYWwgYW5kIHVzYWdlIG1ldHJpY3MgYW5kIGxvZ3MgZm9yIEFtYXpvbiBOZXB0dW5lICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yTmVwdHVuZUdyYXBoUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yTmVwdHVuZUdyYXBoUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gZGVzY3JpYmUgYW5kIHVwZGF0ZSBQcml2YXRlIE1hcmtldHBsYWNlIHJlc291cmNlcyBhbmQgZGVzY3JpYmUgQVdTIE9yZ2FuaXphdGlvbnMgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JQcml2YXRlTWFya2V0cGxhY2VBZG1pblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvclByaXZhdGVNYXJrZXRwbGFjZUFkbWluUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBQcm9jdXJlbWVudCBJbnNpZ2h0cyB0byBvYnRhaW4gT3JnYW5pemF0aW9uIEFjY291bnQgZGV0YWlscyAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvclByb2N1cmVtZW50SW5zaWdodHNQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JQcm9jdXJlbWVudEluc2lnaHRzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzIG5lY2Vzc2FyeSB0byBtaWdyYXRlIHNlcnZpY2UgaW5zdGFuY2VzIGludG8gQVdTIGluY2x1ZGluZyBFQzIsIFMzIGFuZCBDbG91ZGZvcm1hdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JTTVMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JTTVMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIFVzZXIgU3Vic2NyaXB0aW9ucyBzZXJ2aWNlIHRvIHlvdXIgSWRlbnRpdHkgQ2VudGVyIHJlc291cmNlcyB0byBhdXRvbWF0aWNhbGx5IHVwZGF0ZSB5b3VyIHN1YnNjcmlwdGlvbnMuICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yVXNlclN1YnNjcmlwdGlvbnMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JVc2VyU3Vic2NyaXB0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBCYWNrdXAgcGVybWlzc2lvbnMgdG8gY3JlYXRlIGNvbXBsaWFuY2UgcmVwb3J0cyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZVBvbGljeUZvckJhY2t1cFJlcG9ydHMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVQb2xpY3lGb3JCYWNrdXBSZXBvcnRzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgY29udGFpbnMgcGVybWlzc2lvbnMgZm9yIHRlc3RpbmcgcmVzdG9yZXMgYW5kIGZvciBjbGVhbmluZyB1cCByZXNvdXJjZXMgY3JlYXRlZCBkdXJpbmcgdGVzdHMuICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlUG9saWN5Rm9yQmFja3VwUmVzdG9yZVRlc3RpbmcoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVQb2xpY3lGb3JCYWNrdXBSZXN0b3JlVGVzdGluZyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgbWFuYWdlZCBwb2xpY3kgcHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEFtYXpvbiBXb3JrU3BhY2VzIHRvIG1hbmFnZSBFQzIgaW5zdGFuY2VzIGluIHlvdXIgQVdTIGFjY291bnQgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVQb2xpY3lGb3JXb3Jrc3BhY2VzSW5zdGFuY2VzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlUG9saWN5Rm9yV29ya3NwYWNlc0luc3RhbmNlcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBBV1MgRERvUyBSZXNwb25zZSBUZWFtIHdpdGggbGltaXRlZCBhY2Nlc3MgdG8geW91ciBBV1MgYWNjb3VudCB0byBhc3Npc3Qgd2l0aCBERG9TIGF0dGFjayBtaXRpZ2F0aW9uIGR1cmluZyBhIGhpZ2gtc2V2ZXJpdHkgZXZlbnQuICovXG4gICAgcHVibGljIEFXU1NoaWVsZERSVEFjY2Vzc1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTaGllbGREUlRBY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIFNoaWVsZCB0byBhY2Nlc3MgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZiB0byBwcm92aWRlIEREb1MgcHJvdGVjdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTU2hpZWxkU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2hpZWxkU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gcHVibGlzaCBtZXRyaWNzIGFuZCBwcm92aWRlIGluc2lnaHRzIGZvciB5b3VyIHNvY2lhbCBtZXNzYWdlIHNlbmRpbmcuICovXG4gICAgcHVibGljIEFXU1NvY2lhbE1lc3NhZ2luZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NvY2lhbE1lc3NhZ2luZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQVdTIFN5c3RlbXMgTWFuYWdlciBmb3IgU0FQIHdpdGggdGhlIHBlcm1pc3Npb25zIG5lZWRlZCB0byBtYW5hZ2UgYW5kIGludGVncmF0ZSBTQVAgc29mdHdhcmUgd2l0aCBBV1MuICovXG4gICAgcHVibGljIEFXU1NTTUZvclNBUFNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTTUZvclNBUFNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBTZXJ2aWNlIExpbmtlZCBSb2xlIEFXU1NlcnZpY2VSb2xlRm9yQW1hem9uU1NNX09wc0luc2lnaHRzICovXG4gICAgcHVibGljIEFXU1NTTU9wc0luc2lnaHRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NNT3BzSW5zaWdodHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFkbWluaXN0cmF0b3IgYWNjZXNzIGZvciBTU08gRGlyZWN0b3J5ICovXG4gICAgcHVibGljIEFXU1NTT0RpcmVjdG9yeUFkbWluaXN0cmF0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NPRGlyZWN0b3J5QWRtaW5pc3RyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqIFJlYWRPbmx5IGFjY2VzcyBmb3IgU1NPIERpcmVjdG9yeSAqL1xuICAgIHB1YmxpYyBBV1NTU09EaXJlY3RvcnlSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU09EaXJlY3RvcnlSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB3aXRoaW4gQVdTIFNTTyB0byBtYW5hZ2UgQVdTIE9yZ2FuaXphdGlvbnMgbWFzdGVyIGFuZCBtZW1iZXIgYWNjb3VudHMgYW5kIGNsb3VkIGFwcGxpY2F0aW9uICovXG4gICAgcHVibGljIEFXU1NTT01hc3RlckFjY291bnRBZG1pbmlzdHJhdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTT01hc3RlckFjY291bnRBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHdpdGhpbiBBV1MgU1NPIHRvIG1hbmFnZSBBV1MgT3JnYW5pemF0aW9ucyBtZW1iZXIgYWNjb3VudHMgYW5kIGNsb3VkIGFwcGxpY2F0aW9uICovXG4gICAgcHVibGljIEFXU1NTT01lbWJlckFjY291bnRBZG1pbmlzdHJhdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTT01lbWJlckFjY291bnRBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgU1NPIGNvbmZpZ3VyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NTU09SZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU09SZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBBV1MgU1NPIHBlcm1pc3Npb25zIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzLCBpbmNsdWRpbmcgSUFNIHJvbGVzLCBwb2xpY2llcyBhbmQgU0FNTCBJZFAgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU1NTT1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTT1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQW4gYWNjZXNzIHBvbGljeSBmb3IgcHJvdmlkaW5nIGEgdXNlci9yb2xlL2V0YyBhY2Nlc3MgdG8gdGhlIEFXUyBTdGVwRnVuY3Rpb25zIGNvbnNvbGUuIEZvciBhIGZ1bGwgY29uc29sZSBleHBlcmllbmNlLCBpbiBhZGRpdGlvbiB0byB0aGlzIHBvbGljeSwgYSB1c2VyIG1heSBuZWVkIGlhbTpQYXNzUm9sZSBwZXJtaXNzaW9uIG9uIG90aGVyIElBTSByb2xlcyB0aGF0IGNhbiBiZSBhc3N1bWVkIGJ5IHRoZSBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NTdGVwRnVuY3Rpb25zQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3RlcEZ1bmN0aW9uc0NvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQW4gYWNjZXNzIHBvbGljeSBmb3IgcHJvdmlkaW5nIGEgdXNlci9yb2xlL2V0YyBhY2Nlc3MgdG8gdGhlIEFXUyBTdGVwRnVuY3Rpb25zIEFQSS4gRm9yIGZ1bGwgYWNjZXNzLCBpbiBhZGRpdGlvbiB0byB0aGlzIHBvbGljeSwgYSB1c2VyIE1VU1QgaGF2ZSBpYW06UGFzc1JvbGUgcGVybWlzc2lvbiBvbiBhdCBsZWFzdCBvbmUgSUFNIHJvbGUgdGhhdCBjYW4gYmUgYXNzdW1lZCBieSB0aGUgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTU3RlcEZ1bmN0aW9uc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3RlcEZ1bmN0aW9uc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbiBhY2Nlc3MgcG9saWN5IGZvciBwcm92aWRpbmcgYSB1c2VyL3JvbGUvZXRjIHJlYWQgb25seSBhY2Nlc3MgdG8gdGhlIEFXUyBTdGVwRnVuY3Rpb25zIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU1N0ZXBGdW5jdGlvbnNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTdGVwRnVuY3Rpb25zUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgU3RvcmFnZSBHYXRld2F5IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTU3RvcmFnZUdhdGV3YXlGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N0b3JhZ2VHYXRld2F5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgU3RvcmFnZSBHYXRld2F5IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTU3RvcmFnZUdhdGV3YXlSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTdG9yYWdlR2F0ZXdheVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZS1saW5rZWQgcm9sZSB1c2VkIGJ5IEFXUyBTdG9yYWdlIEdhdGV3YXkgdG8gZW5hYmxlIGludGVncmF0aW9uIG9mIG90aGVyIEFXUyBzZXJ2aWNlcyB3aXRoIFN0b3JhZ2UgR2F0ZXdheS4gKi9cbiAgICBwdWJsaWMgQVdTU3RvcmFnZUdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTdG9yYWdlR2F0ZXdheVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQVdTU3VwcGx5Q2hhaW5GZWRlcmF0aW9uQWRtaW5BY2Nlc3MgcHJvdmlkZXMgQVdTIFN1cHBseSBDaGFpbiBmZWRlcmF0ZWQgdXNlcnMgYWNjZXNzIHRvIHRoZSBBV1MgU3VwcGx5IENoYWluIGFwcGxpY2F0aW9uLCBpbmNsdWRpbmcgdGhlIHJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHBlcmZvcm0gYWN0aW9ucyB3aXRoaW4gdGhlIEFXUyBTdXBwbHkgQ2hhaW4gYXBwbGljYXRpb24uIFRoZSBwb2xpY3kgcHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgcGVybWlzc2lvbnMgb3ZlciBJQU0gSWRlbnRpdHkgQ2VudGVyIHVzZXJzIGFuZCBncm91cHMgYW5kIGlzIGF0dGFjaGVkIHRvIGEgcm9sZSBjcmVhdGVkIGJ5IEFXUyBTdXBwbHkgQ2hhaW4gb24geW91ciBiZWhhbGYuIFlvdSBzaG91bGRuJ3QgYXR0YWNoIEFXU1N1cHBseUNoYWluRmVkZXJhdGlvbkFkbWluQWNjZXNzIHBvbGljeSB0byBhbnkgb3RoZXIgSUFNIGVudGl0aWVzLiAqL1xuICAgIHB1YmxpYyBBV1NTdXBwbHlDaGFpbkZlZGVyYXRpb25BZG1pbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTdXBwbHlDaGFpbkZlZGVyYXRpb25BZG1pbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB1c2VycyB0byBhY2Nlc3MgdGhlIEFXUyBTdXBwb3J0IENlbnRlci4gKi9cbiAgICBwdWJsaWMgQVdTU3VwcG9ydEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTdXBwb3J0QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFXUyBTdXBwb3J0IEFwcCBhbmQgb3RoZXIgcmVxdWlyZWQgc2VydmljZXMsIHN1Y2ggYXMgQVdTIFN1cHBvcnQgYW5kIFNlcnZpY2UgUXVvdGFzLiBUaGlzIHBvbGljeSBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHN1cHBvcnRpbmcgc2VydmljZXMgc28gdGhhdCB0aGUgdXNlciBjYW4gY29udGFjdCBBV1MgU3VwcG9ydCBmb3Igc3VwcG9ydCBjYXNlcywgY2hhbmdlIHNlcnZpY2UgcXVvdGFzLCBhbmQgY3JlYXRlIHRoZSByZWxldmFudCBzZXJ2aWNlLWxpbmtlZCByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTU3VwcG9ydEFwcEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3VwcG9ydEFwcEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBBV1MgU3VwcG9ydCBBcHAuICovXG4gICAgcHVibGljIEFXU1N1cHBvcnRBcHBSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTdXBwb3J0QXBwUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBzdXBwb3J0cGxhbnMuICovXG4gICAgcHVibGljIEFXU1N1cHBvcnRQbGFuc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3VwcG9ydFBsYW5zRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gc3VwcG9ydHBsYW5zLiAqL1xuICAgIHB1YmxpYyBBV1NTdXBwb3J0UGxhbnNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTdXBwb3J0UGxhbnNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgU3VwcG9ydCB0byBhY2Nlc3MgQVdTIHJlc291cmNlcyB0byBwcm92aWRlIGJpbGxpbmcsIGFkbWluaXN0cmF0aXZlLCBhbmQgc3VwcG9ydCBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTU3VwcG9ydFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N1cHBvcnRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBBV1MgU3lzdGVtcyBNYW5hZ2VyIChTU00pIHBlcm1pc3Npb24gdG8gZGlzY292ZXIgQVdTIGFjY291bnQgaW5mb3JtYXRpb24uICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VyQWNjb3VudERpc2NvdmVyeVNlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJBY2NvdW50RGlzY292ZXJ5U2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgcmVzb3VyY2VzIG1hbmFnZWQgb3IgdXNlZCBieSB0aGUgQVdTIFN5c3RlbXMgTWFuYWdlciBjaGFuZ2UgbWFuYWdlbWVudCBmcmFtZXdvcmsuICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VyQ2hhbmdlTWFuYWdlbWVudFNlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJDaGFuZ2VNYW5hZ2VtZW50U2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBBV1MgU3lzdGVtcyBNYW5hZ2VyIFF1aWNrIFNldHVwIHRvIGVuYWJsZSBhbmQgY29uZmlndXJlIEFXUyBDb25maWcgY29uZmlndXJhdGlvbiByZWNvcmRpbmcuICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VyRW5hYmxlQ29uZmlnUmVjb3JkaW5nRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N5c3RlbXNNYW5hZ2VyRW5hYmxlQ29uZmlnUmVjb3JkaW5nRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zIGZvciBlbmFibGluZyBFeHBsb3JlciwgYSBjYXBhYmlsaXR5IG9mIEFXUyBTeXN0ZW1zIE1hbmFnZXIuIFRoaXMgaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gdXBkYXRlIHJlbGF0ZWQgU3lzdGVtcyBNYW5hZ2VyIHNlcnZpY2Ugc2V0dGluZ3MsIGFuZCB0byBjcmVhdGUgYSBzZXJ2aWNlLWxpbmtlZCByb2xlIGZvciBTeXN0ZW1zIE1hbmFnZXIuICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VyRW5hYmxlRXhwbG9yZXJFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJFbmFibGVFeHBsb3JlckV4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBTeXN0ZW1zIE1hbmFnZXIgZm9yIFNBUCBzZXJ2aWNlICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VyRm9yU0FQRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTeXN0ZW1zTWFuYWdlckZvclNBUEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBTeXN0ZW1zIE1hbmFnZXIgZm9yIFNBUCBzZXJ2aWNlICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VyRm9yU0FQUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJGb3JTQVBSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgcmVzb3VyY2VzIG1hbmFnZWQgb3IgdXNlZCBieSB0aGUgQVdTIFN5c3RlbXMgTWFuYWdlciBqdXN0IGluIHRpbWUgYWNjZXNzIGZyYW1ld29yay4gKi9cbiAgICBwdWJsaWMgQVdTU3lzdGVtc01hbmFnZXJKdXN0SW5UaW1lQWNjZXNzU2VydmljZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTeXN0ZW1zTWFuYWdlckp1c3RJblRpbWVBY2Nlc3NTZXJ2aWNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIG1hbmFnZWQgcG9saWN5IEFXU1N5c3RlbXNNYW5hZ2VySnVzdEluVGltZUFjY2Vzc1Rva2VuUG9saWN5IGFsbG93cyBTeXN0ZW1zIE1hbmFnZXIgdG8gZ2VuZXJhdGUgYWNjZXNzIHRva2VucyB1c2VkIGZvciBqdXN0LWluLXRpbWUgbm9kZSBhY2Nlc3MuICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VySnVzdEluVGltZUFjY2Vzc1Rva2VuUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N5c3RlbXNNYW5hZ2VySnVzdEluVGltZUFjY2Vzc1Rva2VuUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIG1hbmFnZWQgcG9saWN5IEFXU1N5c3RlbXNNYW5hZ2VySnVzdEluVGltZUFjY2Vzc1Rva2VuU2Vzc2lvblBvbGljeSBhbGxvd3MgU3lzdGVtcyBNYW5hZ2VyIHRvIGFwcGx5IHNjb3BlZCBkb3duIHBlcm1pc3Npb25zIHRvIGEganVzdC1pbi10aW1lIG5vZGUgYWNjZXNzIHNlc3Npb24gb25jZSBpdCBpcyBzdGFydGVkLiAqL1xuICAgIHB1YmxpYyBBV1NTeXN0ZW1zTWFuYWdlckp1c3RJblRpbWVBY2Nlc3NUb2tlblNlc3Npb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJKdXN0SW5UaW1lQWNjZXNzVG9rZW5TZXNzaW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIFN5c3RlbXMgTWFuYWdlciB0byBzaGFyZSBhIGRlbnktYWNjZXNzIHBvbGljeSBmb3IganVzdC1pbi10aW1lIG5vZGUgYWNjZXNzIGZyb20gdGhlIGRlbGVnYXRlZCBhZG1pbmlzdHJhdG9yIGFjY291bnQgdG8gbWVtYmVyIGFjY291bnRzLCBhbmQgcmVwbGljYXRlIHRoZSBwb2xpY3kgdG8gbXVsdGlwbGUgUmVnaW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTU3lzdGVtc01hbmFnZXJKdXN0SW5UaW1lTm9kZUFjY2Vzc1JvbGVQcm9wYWdhdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTeXN0ZW1zTWFuYWdlckp1c3RJblRpbWVOb2RlQWNjZXNzUm9sZVByb3BhZ2F0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gY29sbGVjdCBpbmZvcm1hdGlvbiBhYm91dCBhIHVzZXIgZm9yIEp1c3QtSW4tVGltZS1Ob2RlLUFjY2VzcyBub3RpZmljYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NTeXN0ZW1zTWFuYWdlck5vdGlmaWNhdGlvbnNTZXJ2aWNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N5c3RlbXNNYW5hZ2VyTm90aWZpY2F0aW9uc1NlcnZpY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBJQU0gcm9sZSBmb3IgU1NNIEV4cGxvcmVyIHRvIG1hbmFnZSBPcHNEYXRhIHJlbGF0ZWQgb3BlcmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NTeXN0ZW1zTWFuYWdlck9wc0RhdGFTeW5jU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJPcHNEYXRhU3luY1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHRoZSBBV1MgUG9ydGFsIEFzc2V0IFNlcnZlciB0aGUgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NUaGlua2JveEFzc2V0U2VydmVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RoaW5rYm94QXNzZXRTZXJ2ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgQVdTIFRoaW5rYm94J3MgRGVhZGxpbmUgc29mdHdhcmUgZnVsbCBhY2Nlc3MgdG8gbXVsdGlwbGUgQVdTIHNlcnZpY2VzIGFzIHJlcXVpcmVkIGZvciBBV1MgUG9ydGFsIGFkbWluaXN0cmF0aW9uLiBUaGlzIGluY2x1ZGVzIGFjY2VzcyB0byBjcmVhdGUgYXJiaXRyYXJ5IHRhZ3Mgb24gc2V2ZXJhbCBFQzIgcmVzb3VyY2UgdHlwZXMuICovXG4gICAgcHVibGljIEFXU1RoaW5rYm94QVdTUG9ydGFsQWRtaW5Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVGhpbmtib3hBV1NQb3J0YWxBZG1pblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyB0aGUgQVdTIFBvcnRhbCBHYXRld2F5IG1hY2hpbmUgdGhlIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTVGhpbmtib3hBV1NQb3J0YWxHYXRld2F5UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RoaW5rYm94QVdTUG9ydGFsR2F0ZXdheVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyB0aGUgRGVhZGxpbmUgV29ya2VycyBpbiBBV1MgUG9ydGFsIHRoZSBuZWNlc3NhcnkgcGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIG5vcm1hbCBvcGVyYXRpb24uICovXG4gICAgcHVibGljIEFXU1RoaW5rYm94QVdTUG9ydGFsV29ya2VyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RoaW5rYm94QVdTUG9ydGFsV29ya2VyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciB0aGUgb3BlcmF0aW9uIG9mIEFXUyBUaGlua2JveCdzIERlYWRsaW5lIFJlc291cmNlIFRyYWNrZXIuICBUaGlzIGluY2x1ZGVzIGZ1bGwgYWNjZXNzIHRvIHNvbWUgRUMyIGFjdGlvbnMsIGluY2x1ZGluZyBEZWxldGVGbGVldHMgYW5kIENhbmNlbFNwb3RGbGVldFJlcXVlc3RzLiAqL1xuICAgIHB1YmxpYyBBV1NUaGlua2JveERlYWRsaW5lUmVzb3VyY2VUcmFja2VyQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RoaW5rYm94RGVhZGxpbmVSZXNvdXJjZVRyYWNrZXJBY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gY3JlYXRlLCBkZXN0cm95LCBhbmQgYWRtaW5pc3RlciBBV1MgVGhpbmtib3gncyBEZWFkbGluZSBSZXNvdXJjZSBUcmFja2VyLiAqL1xuICAgIHB1YmxpYyBBV1NUaGlua2JveERlYWRsaW5lUmVzb3VyY2VUcmFja2VyQWRtaW5Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVGhpbmtib3hEZWFkbGluZVJlc291cmNlVHJhY2tlckFkbWluUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciBBV1MgVGhpbmtib3gncyBEZWFkbGluZSBTcG90IEV2ZW50IFBsdWdpbi4gIFRoaXMgaW5jbHVkZXMgcGVybWlzc2lvbiB0byByZXF1ZXN0LCBtb2RpZnksIGFuZCBjYW5jZWwgYSBzcG90IGZsZWV0LCBhcyB3ZWxsIGFzIGxpbWl0ZWQgUGFzc1JvbGUgcGVybWlzc2lvbi4gKi9cbiAgICBwdWJsaWMgQVdTVGhpbmtib3hEZWFkbGluZVNwb3RFdmVudFBsdWdpbkFkbWluUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RoaW5rYm94RGVhZGxpbmVTcG90RXZlbnRQbHVnaW5BZG1pblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50IHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciBhbiBFQzIgaW5zdGFuY2UgcnVubmluZyBBV1MgVGhpbmtib3ggRGVhZGxpbmUgU3BvdCBFdmVudCBQbHVnaW4gV29ya2VyIHNvZnR3YXJlLiAqL1xuICAgIHB1YmxpYyBBV1NUaGlua2JveERlYWRsaW5lU3BvdEV2ZW50UGx1Z2luV29ya2VyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RoaW5rYm94RGVhZGxpbmVTcG90RXZlbnRQbHVnaW5Xb3JrZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgVHJhbnNmZXIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlICovXG4gICAgcHVibGljIEFXU1RyYW5zZmVyQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmZXJDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBUcmFuc2ZlciBTZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NUcmFuc2ZlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBUcmFuc2ZlciBmdWxsIGFjY2VzcyB0byBjcmVhdGUgbG9nIHN0cmVhbXMgYW5kIGdyb3VwcyBhbmQgcHV0IGxvZyBldmVudHMgdG8geW91ciBhY2NvdW50ICovXG4gICAgcHVibGljIEFXU1RyYW5zZmVyTG9nZ2luZ0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcmFuc2ZlckxvZ2dpbmdBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHJlYWRvbmx5IGFjY2VzcyB0byBBV1MgVHJhbnNmZXIgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU1RyYW5zZmVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgdGhlIEFXUyBUcmFuc2Zvcm0gc2VydmljZSB0byBkZXBsb3kgdHJhbnNmb3JtZWQgLk5FVCBhcHBsaWNhdGlvbnMgYnkgY3JlYXRpbmcgYW5kIG1hbmFnaW5nIEFXUyByZXNvdXJjZXMuIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byBwcm92aXNpb24gaW5mcmFzdHJ1Y3R1cmUsIG1hbmFnZSBjb21wdXRlIHJlc291cmNlcywgYW5kIGNvbmZpZ3VyZSBkZXBsb3ltZW50IHNldHRpbmdzIGFjcm9zcyB2YXJpb3VzIEFXUyBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTVHJhbnNmb3JtQXBwbGljYXRpb25EZXBsb3ltZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RyYW5zZm9ybUFwcGxpY2F0aW9uRGVwbG95bWVudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgdGhlIEFXUyBUcmFuc2Zvcm0gdG8gZGVwbG95IGFwcGxpY2F0aW9ucyB0byBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSAoRUNTKSB3aXRoIEZhcmdhdGUuIEl0IGdyYW50cyBwZXJtaXNzaW9ucyB0byBwcm92aXNpb24sIGNvbmZpZ3VyZSwgYW5kIG1hbmFnZSB0aGUgdW5kZXJseWluZyBpbmZyYXN0cnVjdHVyZSByZXF1aXJlZCB0byBydW4gYXBwbGljYXRpb25zIG9uIEVDUy4gKi9cbiAgICBwdWJsaWMgQVdTVHJhbnNmb3JtQXBwbGljYXRpb25FQ1NEZXBsb3ltZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RyYW5zZm9ybUFwcGxpY2F0aW9uRUNTRGVwbG95bWVudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBUcnVzdGVkIEFkdmlzb3IgUHJpb3JpdHkuIFRoaXMgcG9saWN5IGFsc28gZW5hYmxlcyB0aGUgdXNlciB0byBhZGQgVHJ1c3RlZCBBZHZpc29yIGFzIGEgdHJ1c3RlZCBzZXJ2aWNlIHdpdGggQVdTIE9yZ2FuaXphdGlvbnMgYW5kIHRvIHNwZWNpZnkgZGVsZWdhdGVkIGFkbWluaXN0cmF0b3IgYWNjb3VudHMgZm9yIFRydXN0ZWQgQWR2aXNvciBQcmlvcml0eS4gKi9cbiAgICBwdWJsaWMgQVdTVHJ1c3RlZEFkdmlzb3JQcmlvcml0eUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJ1c3RlZEFkdmlzb3JQcmlvcml0eUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBUcnVzdGVkIEFkdmlzb3IgUHJpb3JpdHkuIFRoaXMgaW5jbHVkZXMgcGVybWlzc2lvbiB0byB2aWV3IHRoZSBkZWxlZ2F0ZWQgYWRtaW5pc3RyYXRvciBhY2NvdW50cy4gKi9cbiAgICBwdWJsaWMgQVdTVHJ1c3RlZEFkdmlzb3JQcmlvcml0eVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RydXN0ZWRBZHZpc29yUHJpb3JpdHlSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UgUG9saWN5IGZvciBUcnVzdGVkIEFkdmlzb3IgTXVsdGktYWNjb3VudCBSZXBvcnRpbmcgKi9cbiAgICBwdWJsaWMgQVdTVHJ1c3RlZEFkdmlzb3JSZXBvcnRpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcnVzdGVkQWR2aXNvclJlcG9ydGluZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNzIGZvciB0aGUgQVdTIFRydXN0ZWQgQWR2aXNvciBTZXJ2aWNlIHRvIGhlbHAgcmVkdWNlIGNvc3QsIGluY3JlYXNlIHBlcmZvcm1hbmNlLCBhbmQgaW1wcm92ZSBzZWN1cml0eSBvZiB5b3VyIEFXUyBlbnZpcm9ubWVudC4gKi9cbiAgICBwdWJsaWMgQVdTVHJ1c3RlZEFkdmlzb3JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcnVzdGVkQWR2aXNvclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBVc2VyIE5vdGlmaWNhdGlvbnMgdG8gY2FsbCBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU1VzZXJOb3RpZmljYXRpb25zU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVXNlck5vdGlmaWNhdGlvbnNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIGZvciB2aWV3aW5nIGVudGl0bGVkIFZlbmRvciBJbnNpZ2h0cyByZXNvdXJjZXMgYW5kIG1hbmFnaW5nIFZlbmRvciBJbnNpZ2h0cyBzdWJzY3JpcHRpb25zICovXG4gICAgcHVibGljIEFXU1ZlbmRvckluc2lnaHRzQXNzZXNzb3JGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ZlbmRvckluc2lnaHRzQXNzZXNzb3JGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyBmb3Igdmlld2luZyBlbnRpdGxlZCBWZW5kb3IgSW5zaWdodHMgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU1ZlbmRvckluc2lnaHRzQXNzZXNzb3JSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NWZW5kb3JJbnNpZ2h0c0Fzc2Vzc29yUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyBmb3IgY3JlYXRpbmcgYW5kIG1hbmFnaW5nIHRoZSBWZW5kb3IgSW5zaWdodHMgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU1ZlbmRvckluc2lnaHRzVmVuZG9yRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NWZW5kb3JJbnNpZ2h0c1ZlbmRvckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIGZvciB2aWV3aW5nIHRoZSBWZW5kb3IgSW5zaWdodHMgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU1ZlbmRvckluc2lnaHRzVmVuZG9yUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVmVuZG9ySW5zaWdodHNWZW5kb3JSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBWUEMgTGF0dGljZSB0byBhY2Nlc3MgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTVnBjTGF0dGljZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ZwY0xhdHRpY2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IFNpdGUtdG8tU2l0ZSBWUE4gdG8gY3JlYXRlIGFuZCBtYW5hZ2UgcmVzb3VyY2VzIHJlbGF0ZWQgdG8geW91ciBWUE4gQ29ubmVjdGlvbnMuICovXG4gICAgcHVibGljIEFXU1ZQQ1MyU1ZwblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ZQQ1MyU1ZwblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgVlBDIFRyYW5zaXQgR2F0ZXdheSB0byBjcmVhdGUgYW5kIG1hbmFnZSBuZWNlc3NhcnkgcmVzb3VyY2VzIGZvciB5b3VyIFRyYW5zaXQgR2F0ZXdheSBWUEMgQXR0YWNobWVudHMuICovXG4gICAgcHVibGljIEFXU1ZQQ1RyYW5zaXRHYXRld2F5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVlBDVHJhbnNpdEdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQVdTIFZlcmlmaWVkIEFjY2VzcyBzZXJ2aWNlIHRvIHByb3Zpc2lvbiBlbmRwb2ludHMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTVlBDVmVyaWZpZWRBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NWUENWZXJpZmllZEFjY2Vzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFdBRiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuIE5vdGUgdGhhdCB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBwZXJtaXNzaW9ucyB0byBsaXN0IGFuZCB1cGRhdGUgQW1hem9uIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9ucywgcGVybWlzc2lvbnMgdG8gdmlldyBsb2FkIGJhbGFuY2VycyBvbiBBV1MgRWxhc3RpYyBMb2FkIEJhbGFuY2luZywgcGVybWlzc2lvbnMgdG8gdmlldyBBbWF6b24gQVBJIEdhdGV3YXkgUkVTVCBBUElzIGFuZCBzdGFnZXMsIHBlcm1pc3Npb25zIHRvIGxpc3QgYW5kIHZpZXcgQW1hem9uIENsb3VkV2F0Y2ggbWV0cmljcywgYW5kIHBlcm1pc3Npb25zIHRvIHZpZXcgcmVnaW9ucyBlbmFibGVkIHdpdGhpbiB0aGUgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQVdTV0FGQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTV0FGQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBXQUYgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiBOb3RlIHRoYXQgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgcGVybWlzc2lvbnMgdG8gbGlzdCBBbWF6b24gQ2xvdWRGcm9udCBkaXN0cmlidXRpb25zLCBwZXJtaXNzaW9ucyB0byB2aWV3IGxvYWQgYmFsYW5jZXJzIG9uIEFXUyBFbGFzdGljIExvYWQgQmFsYW5jaW5nLCBwZXJtaXNzaW9ucyB0byB2aWV3IEFtYXpvbiBBUEkgR2F0ZXdheSBSRVNUIEFQSXMgYW5kIHN0YWdlcywgcGVybWlzc2lvbnMgdG8gbGlzdCBhbmQgdmlldyBBbWF6b24gQ2xvdWRXYXRjaCBtZXRyaWNzLCBhbmQgcGVybWlzc2lvbnMgdG8gdmlldyByZWdpb25zIGVuYWJsZWQgd2l0aGluIHRoZSBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBV1NXQUZDb25zb2xlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTV0FGQ29uc29sZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFdBRiBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NXQUZGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1dBRkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBXQUYgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTV0FGUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTV0FGUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgV2VsbEFyY2hpdGVjdGVkIHRvIGFjY2VzcyBBV1Mgc2VydmljZXMgYW5kIHJlc291cmNlcyB0aGF0IHJlbGF0ZSB0byBXZWxsQXJjaGl0ZWN0ZWQgcmVzb3VyY2VzIG9uIGJlaGFsZiBvZiBjdXN0b21lcnMuICovXG4gICAgcHVibGljIEFXU1dlbGxBcmNoaXRlY3RlZERpc2NvdmVyeVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1dlbGxBcmNoaXRlY3RlZERpc2NvdmVyeVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFdlbGwtQXJjaGl0ZWN0ZWQgdG8gYWNjZXNzIE9yZ2FuaXphdGlvbnMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU1dlbGxBcmNoaXRlY3RlZE9yZ2FuaXphdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NXZWxsQXJjaGl0ZWN0ZWRPcmdhbml6YXRpb25zU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgZnVsbCBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucyB0byB0aGUgV2lja3Igc2VydmljZSwgaW5jbHVkaW5nIHRoZSBXaWNrciBhZG1pbmlzdHJhdGl2ZSBmdW5jdGlvbnMgdW5kZXIgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU1dpY2tyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NXaWNrckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjYXBhYmlsaXRpZXMgdG8gbWFuYWdlIE9ic2VydmFiaWxpdHkgQWNjZXNzIE1hbmFnZXIgbGlua3MgYW5kIGVzdGFibGlzaCBzaGFyaW5nIG9mIFgtUmF5IHRyYWNlcyAqL1xuICAgIHB1YmxpYyBBV1NYcmF5Q3Jvc3NBY2NvdW50U2hhcmluZ0NvbmZpZ3VyYXRpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTWHJheUNyb3NzQWNjb3VudFNoYXJpbmdDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgdGhlIEFXUyBYLVJheSBEYWVtb24gdG8gcmVsYXkgcmF3IHRyYWNlIHNlZ21lbnRzIGRhdGEgdG8gdGhlIHNlcnZpY2UncyBBUEkgYW5kIHJldHJpZXZlIHNhbXBsaW5nIGRhdGEgKHJ1bGVzLCB0YXJnZXRzLCBldGMuKSB0byBiZSB1c2VkIGJ5IHRoZSBYLVJheSBTREsuICovXG4gICAgcHVibGljIEFXU1hSYXlEYWVtb25Xcml0ZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NYUmF5RGFlbW9uV3JpdGVBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgWC1SYXkgZnVsbCBhY2Nlc3MgbWFuYWdlZCBwb2xpY3kgKi9cbiAgICBwdWJsaWMgQVdTWHJheUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTWHJheUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgWC1SYXkgcmVhZCBvbmx5IG1hbmFnZWQgcG9saWN5ICovXG4gICAgcHVibGljIEFXU1hyYXlSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NYcmF5UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgWC1SYXkgd3JpdGUgb25seSBtYW5hZ2VkIHBvbGljeSAqL1xuICAgIHB1YmxpYyBBV1NYcmF5V3JpdGVPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1hyYXlXcml0ZU9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgZm9yIEFSQyB6b25hbCBzaGlmdCBwcmFjdGljZSBydW5zLCBhbmQgYWNjZXNzIHRvIENsb3VkV2F0Y2ggYWxhcm0gc3RhdHVzZXMgdG8gbW9uaXRvciBwcmFjdGljZSBydW5zLiAqL1xuICAgIHB1YmxpYyBBV1Nab25hbEF1dG9zaGlmdFByYWN0aWNlUnVuU0xSUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1pvbmFsQXV0b3NoaWZ0UHJhY3RpY2VSdW5TTFJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBBUElzIG5lZWRlZCB0byBzdXBwb3J0IHpvbmUtZ3JvdXAgYWNjZXNzLW1hbmFnZW1lbnQgZm9yIG9yZ2FuaXphdGlvbnMuICovXG4gICAgcHVibGljIEFXU1pvbmVHcm91cEFjY2Vzc01hbmFnZW1lbnRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1Nab25lR3JvdXBBY2Nlc3NNYW5hZ2VtZW50U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgZm9yIHRoZSBBV1MgQmF0Y2ggc2VydmljZSB0byBtYW5hZ2UgdGhlIHJlcXVpcmVkIHJlc291cmNlcywgaW5jbHVkaW5nIEFtYXpvbiBFQzIgYW5kIEFtYXpvbiBFQ1MgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBCYXRjaFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkJhdGNoU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBCZWRyb2NrIEFnZW50Q29yZSBhcyB3ZWxsIGFzIGxpbWl0ZWQgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQmVkcm9ja0FnZW50Q29yZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQmVkcm9ja0FnZW50Q29yZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlIHJlc291cmNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBydW4gQW1hem9uIEJlZHJvY2sgQWdlbnRDb3JlIGluIFZQQyBtb2RlICovXG4gICAgcHVibGljIEJlZHJvY2tBZ2VudENvcmVOZXR3b3JrU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQmVkcm9ja0FnZW50Q29yZU5ldHdvcmtTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhY2Nlc3MgdG8gaWRlbnRpdHkgYW5kIHRva2VuIG1hbmFnZW1lbnQgcmVzb3VyY2VzIHRoYXQgYXJlIHJlcXVpcmVkIGZvciBBbWF6b24gQmVkcm9jayBBZ2VudENvcmUgUnVudGltZSBhdXRoZW50aWNhdGlvbiBhbmQgYXV0aG9yaXphdGlvbi4gKi9cbiAgICBwdWJsaWMgQmVkcm9ja0FnZW50Q29yZVJ1bnRpbWVJZGVudGl0eVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkJlZHJvY2tBZ2VudENvcmVSdW50aW1lSWRlbnRpdHlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyBmb3IgYmlsbGluZyBhbmQgY29zdCBtYW5hZ2VtZW50LiBUaGlzIGluY2x1ZGVzIHZpZXdpbmcgYWNjb3VudCB1c2FnZSBhbmQgdmlld2luZyBhbmQgbW9kaWZ5aW5nIGJ1ZGdldHMgYW5kIHBheW1lbnQgbWV0aG9kcy4gKi9cbiAgICBwdWJsaWMgQmlsbGluZygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5CaWxsaW5nKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEJ1ZGdldHMgdG8gdmVyaWZ5IGFjY2VzcyB0byBCaWxsaW5nIFZpZXdzIHNoYXJlZCBhY3Jvc3MgYWNjb3VudCBib3VuZGFyaWVzLiAqL1xuICAgIHB1YmxpYyBCdWRnZXRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQnVkZ2V0c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIENlcnRpZmljYXRlIE1hbmFnZXIgU2VydmljZSBSb2xlIFBvbGljeSAqL1xuICAgIHB1YmxpYyBDZXJ0aWZpY2F0ZU1hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DZXJ0aWZpY2F0ZU1hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQVdTIENsaWVudCBWUE4gdG8gbWFuYWdlIHlvdXIgQ2xpZW50IFZQTiBlbmRwb2ludCBjb25uZWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQ2xpZW50VlBOU2VydmljZUNvbm5lY3Rpb25zUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbGllbnRWUE5TZXJ2aWNlQ29ubmVjdGlvbnNSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBBV1MgQ2xpZW50IFZQTiB0byBtYW5hZ2UgeW91ciBDbGllbnQgVlBOIGVuZHBvaW50cy4gKi9cbiAgICBwdWJsaWMgQ2xpZW50VlBOU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xpZW50VlBOU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIFJvbGUgZm9yIENsb3VkRm9ybWF0aW9uIFN0YWNrU2V0cyAoT3JnYW5pemF0aW9uIE1hc3RlciBBY2NvdW50KSAqL1xuICAgIHB1YmxpYyBDbG91ZEZvcm1hdGlvblN0YWNrU2V0c09yZ0FkbWluU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRGb3JtYXRpb25TdGFja1NldHNPcmdBZG1pblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSBSb2xlIGZvciBDbG91ZEZvcm1hdGlvbiBTdGFja1NldHMgKE9yZ2FuaXphdGlvbiBNZW1iZXIgQWNjb3VudCkgKi9cbiAgICBwdWJsaWMgQ2xvdWRGb3JtYXRpb25TdGFja1NldHNPcmdNZW1iZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZEZvcm1hdGlvblN0YWNrU2V0c09yZ01lbWJlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIENsb3VkRnJvbnQgY29uc29sZSBwbHVzIHRoZSBhYmlsaXR5IHRvIGxpc3QgQW1hem9uIFMzIGJ1Y2tldHMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBDbG91ZEZyb250RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZEZyb250RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZCBsaXN0IGRpc3RyaWJ1dGlvbnMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBDbG91ZEZyb250UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRGcm9udFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIHJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQ2xvdWRIU00gKi9cbiAgICBwdWJsaWMgQ2xvdWRIU01TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZEhTTVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBDbG91ZFNlYXJjaCBjb25maWd1cmF0aW9uIHNlcnZpY2UuICovXG4gICAgcHVibGljIENsb3VkU2VhcmNoRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFNlYXJjaEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBBbWF6b24gQ2xvdWRTZWFyY2ggY29uZmlndXJhdGlvbiBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBDbG91ZFNlYXJjaFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkU2VhcmNoUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHNlcnZpY2UgbGlua2VkIHJvbGUgYWxsb3dzIENsb3VkVHJhaWwgdG8gZ2V0IGFuZCBhZGQgcmVzb3VyY2UgdGFncyB0byB0aGUgcmVzb3VyY2Ugb3duZXIncyBDbG91ZFRyYWlsIGV2ZW50cy4gKi9cbiAgICBwdWJsaWMgQ2xvdWRUcmFpbEV2ZW50Q29udGV4dCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFRyYWlsRXZlbnRDb250ZXh0KTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbiBwb2xpY3kgZm9yIENsb3VkVHJhaWwgU2VydmljZUxpbmtlZFJvbGUgKi9cbiAgICBwdWJsaWMgQ2xvdWRUcmFpbFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkVHJhaWxTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBDbG91ZFdhdGNoIHRvIGFzc3VtZSBDbG91ZFdhdGNoLUNyb3NzQWNjb3VudFNoYXJpbmcgcm9sZXMgaW4gcmVtb3RlIGFjY291bnRzIG9uIGJlaGFsZiBvZiB0aGUgY3VycmVudCBhY2NvdW50IGluIG9yZGVyIHRvIGRpc3BsYXkgZGF0YSBjcm9zcy1hY2NvdW50LCBjcm9zcy1yZWdpb24gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaENyb3NzQWNjb3VudEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoQ3Jvc3NBY2NvdW50QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBDbG91ZFdhdGNoIGFsYXJtcyBhbmQgbWV0cmljcyBhcyB3ZWxsIGFzIEVDMiBtZXRhZGF0YS4gUHJvdmlkZXMgYWNjZXNzIHRvIFN0b3AsIFRlcm1pbmF0ZSBhbmQgUmVib290IEVDMiBpbnN0YW5jZXMuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hBY3Rpb25zRUMyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hBY3Rpb25zRUMyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRnVsbCBwZXJtaXNzaW9ucyByZXF1aXJlZCB0byB1c2UgQW1hem9uQ2xvdWRXYXRjaEFnZW50LiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoQWdlbnRBZG1pblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoQWdlbnRBZG1pblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIHVzZSBBbWF6b25DbG91ZFdhdGNoQWdlbnQgb24gc2VydmVycyAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoQWdlbnRTZXJ2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEFnZW50U2VydmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBBcHBsaWNhdGlvbiBJbnNpZ2h0cyBhbmQgcmVxdWlyZWQgZGVwZW5kZW5jaWVzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoQXBwbGljYXRpb25JbnNpZ2h0c0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEFwcGxpY2F0aW9uSW5zaWdodHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDbG91ZFdhdGNoIEFwcGxpY2F0aW9uIEluc2lnaHRzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoQXBwbGljYXRpb25JbnNpZ2h0c1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hBcHBsaWNhdGlvbkluc2lnaHRzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBDbG91ZHdhdGNoIEFwcGxpY2F0aW9uIEluc2lnaHRzIFNlcnZpY2UgTGlua2VkIFJvbGUgUG9saWN5ICovXG4gICAgcHVibGljIENsb3Vkd2F0Y2hBcHBsaWNhdGlvbkluc2lnaHRzU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWR3YXRjaEFwcGxpY2F0aW9uSW5zaWdodHNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBBcHBsaWNhdGlvbiBTaWduYWxzIHNlcnZpY2UgYW5kIHNjb3BlZCBhY2Nlc3MgdG8gdGhlIGRlcGVuZGVuY2llcyBuZWVkZWQgdG8gdXNlIGFuZCBvcGVyYXRlIHRoaXMgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEFwcGxpY2F0aW9uU2lnbmFsc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEFwcGxpY2F0aW9uU2lnbmFsc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIENsb3VkV2F0Y2ggQXBwbGljYXRpb24gU2lnbmFscyBzZXJ2aWNlIGFuZCBzY29wZWQgYWNjZXNzIHRvIHRoZSBkZXBlbmRlbmNpZXMgbmVlZGVkIHRvIHVzZSB0aGlzIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEFwcGxpY2F0aW9uU2lnbmFsc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hBcHBsaWNhdGlvblNpZ25hbHNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudHMgcGVybWlzc2lvbiB0byBDbG91ZFdhdGNoIEFwcGxpY2F0aW9uIFNpZ25hbHMgdG8gY29sbGVjdCBtb25pdG9yaW5nIGFuZCB0YWdnaW5nIGRhdGEgZnJvbSBvdGhlciByZWxldmFudCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hBcHBsaWNhdGlvblNpZ25hbHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoQXBwbGljYXRpb25TaWduYWxzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIG5vbi1DbG91ZFdhdGNoIEFQSXMgdXNlZCB0byBkaXNwbGF5IENsb3VkV2F0Y2ggQXV0b21hdGljIERhc2hib2FyZHMsIGluY2x1ZGluZyB0aGUgY29udGVudHMgb2Ygb2JqZWN0cyBzdWNoIGFzIExhbWJkYSBmdW5jdGlvbnMgKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEF1dG9tYXRpY0Rhc2hib2FyZHNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEF1dG9tYXRpY0Rhc2hib2FyZHNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjYXBhYmlsaXRpZXMgdG8gbWFuYWdlIE9ic2VydmFiaWxpdHkgQWNjZXNzIE1hbmFnZXIgbGlua3MgYW5kIGVzdGFibGlzaCBzaGFyaW5nIG9mIENsb3VkV2F0Y2ggcmVzb3VyY2VzICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hDcm9zc0FjY291bnRTaGFyaW5nQ29uZmlndXJhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoQ3Jvc3NBY2NvdW50U2hhcmluZ0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYnVpbHQtaW4gdGFyZ2V0cyBpbiBBbWF6b24gQ2xvdWRXYXRjaCBFdmVudHMgdG8gcGVyZm9ybSBFQzIgYWN0aW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEV2ZW50c0J1aWx0SW5UYXJnZXRFeGVjdXRpb25BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEV2ZW50c0J1aWx0SW5UYXJnZXRFeGVjdXRpb25BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQ2xvdWRXYXRjaCBFdmVudHMuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hFdmVudHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hFdmVudHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBDbG91ZFdhdGNoIEV2ZW50cyB0byByZWxheSBldmVudHMgdG8gdGhlIHN0cmVhbXMgaW4gQVdTIEtpbmVzaXMgU3RyZWFtcyBpbiB5b3VyIGFjY291bnQuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hFdmVudHNJbnZvY2F0aW9uQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hFdmVudHNJbnZvY2F0aW9uQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQ2xvdWRXYXRjaCBFdmVudHMuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hFdmVudHNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoRXZlbnRzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBBV1MgQ2xvdWRXYXRjaCB0byBleGVjdXRlIGFjdGlvbnMgb24geW91ciBiZWhhbGYgY29uZmlndXJlZCB0aHJvdWdoIGFsYXJtcyBhbmQgZXZlbnRzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoRXZlbnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEV2ZW50c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoRnVsbEFjY2Vzc1YyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hGdWxsQWNjZXNzVjIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhY3Rpb25zIGZvciB3b3JraW5nIHdpdGggQW1hem9uIENsb3VkV2F0Y2ggSW50ZXJuZXQgTW9uaXRvci4gQWxzbyBwcm92aWRlcyBhY2Nlc3MgdG8gb3RoZXIgc2VydmljZXMsIHN1Y2ggYXMgQW1hem9uIENsb3VkV2F0Y2gsIEFtYXpvbiBFQzIsIEFtYXpvbiBDbG91ZEZyb250LCBBbWF6b24gV29ya1NwYWNlcywgYW5kIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcsIHRoYXQgYXJlIG5lY2Vzc2FyeSB0byB1c2UgdGhlIEludGVybmV0IE1vbml0b3Igc2VydmljZSBmb3IgbW9uaXRvcmluZyBhbmQgc3RvcmluZyBpbmZvcm1hdGlvbiBhYm91dCBhcHBsaWNhdGlvbiB0cmFmZmljLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoSW50ZXJuZXRNb25pdG9yRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoSW50ZXJuZXRNb25pdG9yRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWN0aW9ucyBmb3Igd29ya2luZyB3aXRoIEFtYXpvbiBDbG91ZFdhdGNoIEludGVybmV0IE1vbml0b3IuIEFsc28gcHJvdmlkZXMgYWNjZXNzIHRvIG90aGVyIHNlcnZpY2VzIGluIEFtYXpvbiBDbG91ZFdhdGNoLCBpbmNsdWRpbmcgcG9saWNpZXMgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gb24gQ2xvdWRXYXRjaCBtZXRyaWNzIGFuZCB0byBtYW5hZ2UgbG9nIHF1ZXJpZXMsIHRoYXQgYXJlIG5lY2Vzc2FyeSB0byB1c2UgdGhlIEludGVybmV0IE1vbml0b3Igc2VydmljZSBmb3IgbW9uaXRvcmluZyBhbmQgc3RvcmluZyBpbmZvcm1hdGlvbiBhYm91dCBhcHBsaWNhdGlvbiB0cmFmZmljLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoSW50ZXJuZXRNb25pdG9yUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEludGVybmV0TW9uaXRvclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEludGVybmV0IE1vbml0b3IgdG8gYWNjZXNzIEVDMiwgV29ya3NwYWNlcywgYW5kIENsb3VkRnJvbnQgcmVzb3VyY2VzLCBhbmQgb3RoZXIgcmVxdWlyZWQgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hJbnRlcm5ldE1vbml0b3JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoSW50ZXJuZXRNb25pdG9yU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB3cml0ZSBhY2Nlc3MgdG8gWC1SYXkgYW5kIENsb3VkV2F0Y2ggQXBwbGljYXRpb24gU2lnbmFscyBsb2cgZ3JvdXAuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hMYW1iZGFBcHBsaWNhdGlvblNpZ25hbHNFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hMYW1iZGFBcHBsaWNhdGlvblNpZ25hbHNFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHJlcXVpcmVkIGZvciB0aGUgTGFtYmRhIEluc2lnaHRzIEV4dGVuc2lvbiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoTGFtYmRhSW5zaWdodHNFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hMYW1iZGFJbnNpZ2h0c0V4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjYXBhYmlsaXRpZXMgdG8gbWFuYWdlIE9ic2VydmFiaWxpdHkgQWNjZXNzIE1hbmFnZXIgbGlua3MgYW5kIGVzdGFibGlzaCBzaGFyaW5nIG9mIENsb3VkV2F0Y2ggTG9ncyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaExvZ3NDcm9zc0FjY291bnRTaGFyaW5nQ29uZmlndXJhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoTG9nc0Nyb3NzQWNjb3VudFNoYXJpbmdDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBMb2dzICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hMb2dzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoTG9nc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIENsb3VkV2F0Y2ggTG9ncyAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoTG9nc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hMb2dzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBZb3UgY2FuIHVzZSB0aGlzIHBvbGljeSBpbiBJQU0gcm9sZXMgdGhhdCBhcmUgYXR0YWNoZWQgdG8gQW1hem9uIEVDMiBhbmQgQW1hem9uIEVLUyBpbnN0YW5jZSByZXNvdXJjZXMgdG8gc2VuZCB0ZWxlbWV0cnkgcmVwb3J0cyAobWV0cmljcykgdG8gYSBOZXR3b3JrIEZsb3cgTW9uaXRvciBlbmRwb2ludC4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaE5ldHdvcmtGbG93TW9uaXRvckFnZW50UHVibGlzaFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoTmV0d29ya0Zsb3dNb25pdG9yQWdlbnRQdWJsaXNoUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogWW91IGNhbid0IGF0dGFjaCBDbG91ZFdhdGNoTmV0d29ya0Zsb3dNb25pdG9yU2VydmljZVJvbGVQb2xpY3kgdG8geW91ciBJQU0gZW50aXRpZXMuIFRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIHRvIGEgc2VydmljZS1saW5rZWQgcm9sZSBuYW1lZCBBV1NTZXJ2aWNlUm9sZUZvck5ldHdvcmtGbG93TW9uaXRvciwgd2hpY2ggcHVibGlzaGVzIG5ldHdvcmsgdGVsZW1ldHJ5IGFnZ3JlZ2F0aW9uIHJlc3VsdHMsIGNvbGxlY3RlZCBieSBOZXR3b3JrIEZsb3cgTW9uaXRvciBhZ2VudHMsIHRvIENsb3VkV2F0Y2guIEl0IGFsc28gYWxsb3dzIHRoZSBzZXJ2aWNlIHRvIHVzZSBBV1MgT3JnYW5pemF0aW9ucyB0byBnZXQgaW5mb3JtYXRpb24gZm9yIG11bHRpLWFjY291bnQgc2NlbmFyaW9zLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoTmV0d29ya0Zsb3dNb25pdG9yU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaE5ldHdvcmtGbG93TW9uaXRvclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogWW91IGNhbid0IGF0dGFjaCBDbG91ZFdhdGNoTmV0d29ya0Zsb3dNb25pdG9yVG9wb2xvZ3lTZXJ2aWNlUm9sZVBvbGljeSB0byB5b3VyIElBTSBlbnRpdGllcy4gVGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgdG8gYSBzZXJ2aWNlLWxpbmtlZCByb2xlIG5hbWVkIEFXU1NlcnZpY2VSb2xlRm9yTmV0d29ya0Zsb3dNb25pdG9yX1RvcG9sb2d5LCB3aGljaCBnZW5lcmF0ZXMgdG9wb2xvZ3kgc25hcHNob3RzIG9mIHJlc291cmNlcyB1c2VkIGJ5IE5ldHdvcmsgRmxvdyBNb25pdG9yIGluIHlvdXIgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaE5ldHdvcmtGbG93TW9uaXRvclRvcG9sb2d5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaE5ldHdvcmtGbG93TW9uaXRvclRvcG9sb2d5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQ2xvdWRXYXRjaCBOZXR3b3JrIE1vbml0b3IgdG8gYWNjZXNzIGFuZCBtYW5hZ2UgRUMyIGFuZCBWUEMgcmVzb3VyY2VzLCBwdWJsaXNoIGRhdGEgdG8gQ2xvdWRXYXRjaCBhbmQgYWNjZXNzIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoTmV0d29ya01vbml0b3JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoTmV0d29ya01vbml0b3JTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIHVzZXIgYWNjZXNzIHRvIHZpZXcgT3BlblNlYXJjaCBkYXNoYm9hcmRzIG9uIHRoZSBDbG91ZFdhdGNoIExvZ3MgY29uc29sZS4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaE9wZW5TZWFyY2hEYXNoYm9hcmRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaE9wZW5TZWFyY2hEYXNoYm9hcmRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyB1c2VyIGFjY2VzcyB0byBjcmVhdGUgaW50ZWdyYXRpb24gd2l0aCBPcGVuU2VhcmNoIHRvIGNyZWF0ZSwgdXBkYXRlLCBkZWxldGUgb3IgdmlldyBkYXNoYm9hcmRzIG9uIHRoZSBDbG91ZFdhdGNoIExvZ3MgY29uc29sZS4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaE9wZW5TZWFyY2hEYXNoYm9hcmRzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoT3BlblNlYXJjaERhc2hib2FyZHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBTeW50aGV0aWNzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoU3ludGhldGljc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaFN5bnRoZXRpY3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDbG91ZFdhdGNoIFN5bnRoZXRpY3MuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hTeW50aGV0aWNzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaFN5bnRoZXRpY3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIENvbXByZWhlbmQgc2VydmljZSByb2xlIHdoaWNoIGFsbG93cyBhY2Nlc3MgdG8gUzMgcmVzb3VyY2VzIGZvciBkYXRhIGFjY2VzcyAqL1xuICAgIHB1YmxpYyBDb21wcmVoZW5kRGF0YUFjY2Vzc1JvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29tcHJlaGVuZERhdGFBY2Nlc3NSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIENvbXByZWhlbmQuICovXG4gICAgcHVibGljIENvbXByZWhlbmRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbXByZWhlbmRGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIENvbXByZWhlbmQgTWVkaWNhbCAqL1xuICAgIHB1YmxpYyBDb21wcmVoZW5kTWVkaWNhbEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29tcHJlaGVuZE1lZGljYWxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gQ29tcHJlaGVuZC4gKi9cbiAgICBwdWJsaWMgQ29tcHJlaGVuZFJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbXByZWhlbmRSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBDb21wdXRlT3B0aW1pemVyQXV0b21hdGlvblNlcnZpY2VSb2xlUG9saWN5IG1hbmFnZWQgcG9saWN5IGlzIGF0dGFjaGVkIHRvIGEgc2VydmljZS1saW5rZWQgcm9sZSB0aGF0IGFsbG93cyBDb21wdXRlIE9wdGltaXplciB0byBwZXJmb3JtIGFjdGlvbnMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQ29tcHV0ZU9wdGltaXplckF1dG9tYXRpb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Db21wdXRlT3B0aW1pemVyQXV0b21hdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDb21wdXRlT3B0aW1pemVyLiAqL1xuICAgIHB1YmxpYyBDb21wdXRlT3B0aW1pemVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29tcHV0ZU9wdGltaXplclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENvbXB1dGVPcHRpbWl6ZXIgdG8gY2FsbCBBV1Mgc2VydmljZXMgYW5kIGNvbGxlY3Qgd29ya2xvYWQgZGV0YWlscyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQ29tcHV0ZU9wdGltaXplclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbXB1dGVPcHRpbWl6ZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBuZWVkZWQgZm9yIEFXU0NvbmZpZyB0byBjcmVhdGUgY29uZm9ybWFuY2UgcGFja3MgKi9cbiAgICBwdWJsaWMgQ29uZmlnQ29uZm9ybXNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Db25maWdDb25mb3Jtc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBtYW5hZ2VkIHBvbGljeSBwcm92aWRlcyBhZG1pbiBhY2Nlc3MgdG8gQ29zdCBPcHRpbWl6YXRpb24gSHViLiAqL1xuICAgIHB1YmxpYyBDb3N0T3B0aW1pemF0aW9uSHViQWRtaW5BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29zdE9wdGltaXphdGlvbkh1YkFkbWluQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBtYW5hZ2VkIHBvbGljeSBwcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIENvc3QgT3B0aW1pemF0aW9uIEh1Yi4gKi9cbiAgICBwdWJsaWMgQ29zdE9wdGltaXphdGlvbkh1YlJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvc3RPcHRpbWl6YXRpb25IdWJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBDb3N0IE9wdGltaXphdGlvbiBIdWIgdG8gcmV0cmlldmUgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uIGFuZCBjb2xsZWN0IG9wdGltaXphdGlvbi1yZWxhdGVkIGRhdGEgYW5kIG1ldGFkYXRhLiAqL1xuICAgIHB1YmxpYyBDb3N0T3B0aW1pemF0aW9uSHViU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29zdE9wdGltaXphdGlvbkh1YlNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBDb25uZWN0IEN1c3RvbWVyIFByb2ZpbGVzIHRvIGFjY2VzcyBBV1Mgc2VydmljZXMgYW5kIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQ3VzdG9tZXJQcm9maWxlc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkN1c3RvbWVyUHJvZmlsZXNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyBwZXJtaXNzaW9ucyB0byBBV1Mgc2VydmljZXMgYW5kIGFjdGlvbnMgcmVxdWlyZWQgdG8gc2V0IHVwIGFuZCBjb25maWd1cmUgQVdTIGRhdGFiYXNlIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBEYXRhYmFzZUFkbWluaXN0cmF0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRGF0YWJhc2VBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIEFXUyBkYXRhIGFuYWx5dGljcyBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgRGF0YVNjaWVudGlzdCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5EYXRhU2NpZW50aXN0KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIERBWCB0byBjcmVhdGUgYW5kIG1hbmFnZSBOZXR3b3JrIGludGVyZmFjZSwgU2VjdXJpdHkgZ3JvdXAsIFN1Ym5ldCBhbmQgVnBjIG9uIGJlaGFsZiBvZiBjdXN0b21lciAqL1xuICAgIHB1YmxpYyBEQVhTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5EQVhTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byByZWFkLW9ubHkgQVBJcyBuZWVkZWQgdG8gcnVuIEVDMiBEZWNsYXJhdGl2ZSBQb2xpY2llcyBBY2NvdW50IFN0YXR1cyBSZXBvcnQuICovXG4gICAgcHVibGljIERlY2xhcmF0aXZlUG9saWNpZXNFQzJSZXBvcnQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRGVjbGFyYXRpdmVQb2xpY2llc0VDMlJlcG9ydCk7XG4gICAgfVxuXG4gICAgLyoqIFBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIHN1cHBvcnQgQW1hem9uIENsb3VkV2F0Y2ggQ29udHJpYnV0b3IgSW5zaWdodHMgZm9yIEFtYXpvbiBEeW5hbW9EQi4gKi9cbiAgICBwdWJsaWMgRHluYW1vREJDbG91ZFdhdGNoQ29udHJpYnV0b3JJbnNpZ2h0c1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkR5bmFtb0RCQ2xvdWRXYXRjaENvbnRyaWJ1dG9ySW5zaWdodHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBlcm1pc3Npb25zIHJlcXVpcmVkIGJ5IER5bmFtb0RCIHRvIG1hbmFnZSBnbG9iYWwgdGFibGUgcmVwbGljYSBzZXR0aW5ncyAqL1xuICAgIHB1YmxpYyBEeW5hbW9EQkdsb2JhbFRhYmxlU2V0dGluZ3NNYW5hZ2VtZW50U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRHluYW1vREJHbG9iYWxUYWJsZVNldHRpbmdzTWFuYWdlbWVudFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBBV1MgRHluYW1vREIgYWNjZXNzIHRvIEtpbmVzaXNEYXRhU3RyZWFtcyAqL1xuICAgIHB1YmxpYyBEeW5hbW9EQktpbmVzaXNSZXBsaWNhdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkR5bmFtb0RCS2luZXNpc1JlcGxpY2F0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyByZXF1aXJlZCBieSBEeW5hbW9EQiBmb3IgY3Jvc3MtcmVnaW9uIGRhdGEgcmVwbGljYXRpb24gKi9cbiAgICBwdWJsaWMgRHluYW1vREJSZXBsaWNhdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkR5bmFtb0RCUmVwbGljYXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBmdWxsIGFjY2VzcyB0byBFQzIgRmFzdCBMYXVuY2ggYWN0aW9ucyAqL1xuICAgIHB1YmxpYyBFQzJGYXN0TGF1bmNoRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FQzJGYXN0TGF1bmNoRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudHMgZWMyZmFzdGxhdW5jaCB0byBwcmVwYXJlIGFuZCBtYW5hZ2UgcHJlcHJvdmlzaW9uZWQgc25hcHNob3RzIGluIGN1c3RvbWVyJ3MgYWNjb3VudCAmIHB1Ymxpc2ggcmVsYXRlZCBtZXRyaWNzLiAqL1xuICAgIHB1YmxpYyBFQzJGYXN0TGF1bmNoU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRUMyRmFzdExhdW5jaFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEVDMiBGbGVldCB0byBsYXVuY2ggaW5zdGFuY2VzIGluIHRoZSBmdXR1cmUuICovXG4gICAgcHVibGljIEVDMkZsZWV0VGltZVNoaWZ0YWJsZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVDMkZsZWV0VGltZVNoaWZ0YWJsZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgbmVlZCBieSBFQzIgSW1hZ2UgQnVpbGRlciB0byBwZXJmb3JtIGEgY3Jvc3MgYWNjb3VudCBkaXN0cmlidXRpb24uICovXG4gICAgcHVibGljIEVjMkltYWdlQnVpbGRlckNyb3NzQWNjb3VudERpc3RyaWJ1dGlvbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FYzJJbWFnZUJ1aWxkZXJDcm9zc0FjY291bnREaXN0cmlidXRpb25BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgRUMySW1hZ2VCdWlsZGVyTGlmZWN5Y2xlRXhlY3V0aW9uUG9saWN5IHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgZm9yIEltYWdlIEJ1aWxkZXIgdG8gcGVyZm9ybSBhY3Rpb25zIHN1Y2ggYXMgZGVwcmVjYXRlIG9yIGRlbGV0ZSBJbWFnZSBCdWlsZGVyIGltYWdlIHJlc291cmNlcyBhbmQgdGhlaXIgdW5kZXJseWluZyByZXNvdXJjZXMgKEFNSXMsIHNuYXBzaG90cykgdG8gc3VwcG9ydCBhdXRvbWF0ZWQgcnVsZXMgZm9yIGltYWdlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IHRhc2tzLiAqL1xuICAgIHB1YmxpYyBFQzJJbWFnZUJ1aWxkZXJMaWZlY3ljbGVFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRUMySW1hZ2VCdWlsZGVyTGlmZWN5Y2xlRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGN1c3RvbWVycyB0byBjYWxsIEVDMiBJbnN0YW5jZSBDb25uZWN0IHRvIHB1Ymxpc2ggZXBoZW1lcmFsIGtleXMgdG8gdGhlaXIgRUMyIGluc3RhbmNlcyBhbmQgY29ubmVjdCB2aWEgc3NoIG9yIHRoZSBFQzIgSW5zdGFuY2UgQ29ubmVjdCBDTEkuICovXG4gICAgcHVibGljIEVDMkluc3RhbmNlQ29ubmVjdCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FQzJJbnN0YW5jZUNvbm5lY3QpO1xuICAgIH1cblxuICAgIC8qKiBFQzIgSW5zdGFuY2UgQ29ubmVjdCBlbmRwb2ludCBwb2xpY3kgdG8gbWFuYWdlIEVDMiBJbnN0YW5jZSBDb25uZWN0IGVuZHBvaW50cyBjcmVhdGVkIGJ5IHRoZSBjdXN0b21lciAqL1xuICAgIHB1YmxpYyBFYzJJbnN0YW5jZUNvbm5lY3RFbmRwb2ludCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FYzJJbnN0YW5jZUNvbm5lY3RFbmRwb2ludCk7XG4gICAgfVxuXG4gICAgLyoqIEVDMiBJbnN0YW5jZSBwcm9maWxlIGZvciBJbWFnZSBCdWlsZGVyIHNlcnZpY2UuICovXG4gICAgcHVibGljIEVDMkluc3RhbmNlUHJvZmlsZUZvckltYWdlQnVpbGRlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FQzJJbnN0YW5jZVByb2ZpbGVGb3JJbWFnZUJ1aWxkZXIpO1xuICAgIH1cblxuICAgIC8qKiBFQzIgSW5zdGFuY2UgcHJvZmlsZSBmb3IgYnVpbGRpbmcgY29udGFpbmVyIGltYWdlcyB3aXRoIEVDMiBJbWFnZSBCdWlsZGVyLiBUaGlzIHBvbGljeSBncmFudHMgdGhlIHVzZXIgYnJvYWQgcGVybWlzc2lvbnMgdG8gdXBsb2FkIEVDUiBpbWFnZXMuICovXG4gICAgcHVibGljIEVDMkluc3RhbmNlUHJvZmlsZUZvckltYWdlQnVpbGRlckVDUkNvbnRhaW5lckJ1aWxkcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FQzJJbnN0YW5jZVByb2ZpbGVGb3JJbWFnZUJ1aWxkZXJFQ1JDb250YWluZXJCdWlsZHMpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgRUNSIFJlcGxpY2F0aW9uICovXG4gICAgcHVibGljIEVDUlJlcGxpY2F0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRUNSUmVwbGljYXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhY3Rpb25zIHRvIGJlIHBlcmZvcm1lZCB3aGVuIHVzaW5nIEFXUyBFQ1IgcmVwb3NpdG9yeSBjcmVhdGlvbiB0ZW1wbGF0ZXMgKi9cbiAgICBwdWJsaWMgRUNSVGVtcGxhdGVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FQ1JUZW1wbGF0ZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIEVsYXN0aUNhY2hlIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmIGFzIG5lY2Vzc2FyeSBmb3IgbWFuYWdpbmcgeW91ciBjYWNoZSAqL1xuICAgIHB1YmxpYyBFbGFzdGlDYWNoZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVsYXN0aUNhY2hlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRWxhc3RpY0xvYWRCYWxhbmNpbmcsIGFuZCBsaW1pdGVkIGFjY2VzcyB0byBvdGhlciBzZXJ2aWNlcyBuZWNlc3NhcnkgdG8gcHJvdmlkZSBFbGFzdGljTG9hZEJhbGFuY2luZyBmZWF0dXJlcy4gKi9cbiAgICBwdWJsaWMgRWxhc3RpY0xvYWRCYWxhbmNpbmdGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVsYXN0aWNMb2FkQmFsYW5jaW5nRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEVsYXN0aWNMb2FkQmFsYW5jaW5nIGFuZCBkZXBlbmRlbnQgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgRWxhc3RpY0xvYWRCYWxhbmNpbmdSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FbGFzdGljTG9hZEJhbGFuY2luZ1JlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNzIHRvIHZpZXcgcHVyY2hhc2VkIGFzc2V0cyBhbmQgZG93bmxvYWQgcmVsYXRlZCBzb2Z0d2FyZSBhbmQga2lja3N0YXJ0IGZpbGVzICovXG4gICAgcHVibGljIEVsZW1lbnRhbEFjdGl2YXRpb25zRG93bmxvYWRTb2Z0d2FyZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FbGVtZW50YWxBY3RpdmF0aW9uc0Rvd25sb2FkU29mdHdhcmVBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBGdWxsIGFjY2VzcyB0byB2aWV3IGFuZCB0YWtlIGFjdGlvbiBvbiBFbGVtZW50YWwgQXBwbGlhbmNlcyBhbmQgU29mdHdhcmUgcHVyY2hhc2VkIGFzc2V0cyAqL1xuICAgIHB1YmxpYyBFbGVtZW50YWxBY3RpdmF0aW9uc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRWxlbWVudGFsQWN0aXZhdGlvbnNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNzIHRvIHZpZXcgcHVyY2hhc2VkIGFzc2V0cyBhbmQgZ2VuZXJhdGUgc29mdHdhcmUgbGljZW5zZXMgZm9yIHBlbmRpbmcgYWN0aXZhdGlvbnMgKi9cbiAgICBwdWJsaWMgRWxlbWVudGFsQWN0aXZhdGlvbnNHZW5lcmF0ZUxpY2Vuc2VzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVsZW1lbnRhbEFjdGl2YXRpb25zR2VuZXJhdGVMaWNlbnNlcyk7XG4gICAgfVxuXG4gICAgLyoqIFJlYWQtb25seSBhY2Nlc3MgdG8gdGhlIGRldGFpbGVkIGxpc3Qgb2YgcHVyY2hhc2VkIGFzc2V0cyBhc3NvY2lhdGVkIHRvIHRoZSBBV1MgYWNjb3VudCBvZiB0aGUgdXNlciAqL1xuICAgIHB1YmxpYyBFbGVtZW50YWxBY3RpdmF0aW9uc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVsZW1lbnRhbEFjdGl2YXRpb25zUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBGdWxsIGFjY2VzcyB0byB2aWV3IGFuZCB0YWtlIGFjdGlvbiBvbiBFbGVtZW50YWwgQXBwbGlhbmNlcyBhbmQgU29mdHdhcmUgcXVvdGVzIGFuZCBvcmRlcnMgKi9cbiAgICBwdWJsaWMgRWxlbWVudGFsQXBwbGlhbmNlc1NvZnR3YXJlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FbGVtZW50YWxBcHBsaWFuY2VzU29mdHdhcmVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUmVhZC1vbmx5IGFjY2VzcyB0byB2aWV3IEVsZW1lbnRhbCBBcHBsaWFuY2VzIGFuZCBTb2Z0d2FyZSBxdW90ZXMgYW5kIG9yZGVycyAqL1xuICAgIHB1YmxpYyBFbGVtZW50YWxBcHBsaWFuY2VzU29mdHdhcmVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FbGVtZW50YWxBcHBsaWFuY2VzU29mdHdhcmVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bGwgYWNjZXNzIHRvIHZpZXcgYW5kIHRha2UgYWN0aW9uIG9uIEVsZW1lbnRhbCBBcHBsaWFuY2UgYW5kIFNvZnR3YXJlIHN1cHBvcnQgY2FzZXMgYW5kIHByb2R1Y3Qgc3VwcG9ydCBjb250ZW50ICovXG4gICAgcHVibGljIEVsZW1lbnRhbFN1cHBvcnRDZW50ZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVsZW1lbnRhbFN1cHBvcnRDZW50ZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHJlYWQtb25seSBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IHRoZSBXQUwgc2VydmljZSBmb3IgQW1hem9uIEVNUiB0byBmaW5kIGFuZCByZXR1cm4gdGhlIHN0YXR1cyBvZiBhIGNsdXN0ZXIgKi9cbiAgICBwdWJsaWMgRU1SRGVzY3JpYmVDbHVzdGVyUG9saWN5Rm9yRU1SV0FMKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVNUkRlc2NyaWJlQ2x1c3RlclBvbGljeUZvckVNUldBTCk7XG4gICAgfVxuXG4gICAgLyoqIEFjY2VzcyBwb2xpY3kgdG8gYWxsb3cgRk0gc2VydmljZSBsaW5rZWQgcm9sZSB0byBwZXJmb3JtIEZNLXJlbGF0ZWQgYWN0aW9ucyBvbiBGTS1tYW5hZ2VkIHJlc291cmNlcyB3aXRoaW4gYSBjdXN0b21lciBBV1MgT3JnYW5pemF0aW9uIGFjY291bnQuICovXG4gICAgcHVibGljIEZNU1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkZNU1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBGU3ggdG8gZGVsZXRlIGl0cyBTZXJ2aWNlIExpbmtlZCBSb2xlcyBmb3IgQW1hem9uIFMzIGFjY2VzcyAqL1xuICAgIHB1YmxpYyBGU3hEZWxldGVTZXJ2aWNlTGlua2VkUm9sZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5GU3hEZWxldGVTZXJ2aWNlTGlua2VkUm9sZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbnMgZm9yIGNvbXB1dGUgYWN0aW9ucyBpbiBhbiBBbWF6b24gR2FtZUxpZnQgY29udGFpbmVyIGZsZWV0LCBpbmNsdWRpbmcgYWNjZXNzIHRvIGRlcGVuZGVuY2llcyBzdWNoIGFzIEFtYXpvbiBTMy4gKi9cbiAgICBwdWJsaWMgR2FtZUxpZnRDb250YWluZXJGbGVldFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5HYW1lTGlmdENvbnRhaW5lckZsZWV0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGFsbG93IEdhbWVsaWZ0IEdhbWVTZXJ2ZXJHcm91cHMgdG8gbWFuYWdlIGN1c3RvbWVyIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBHYW1lTGlmdEdhbWVTZXJ2ZXJHcm91cFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5HYW1lTGlmdEdhbWVTZXJ2ZXJHcm91cFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgbWFuYWdlZCBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb24gdG8gY29ubmVjdCB3aXRoIEFtYXpvbiBRIGFuZCB1dGlsaXplIHRoZSBmZWF0dXJlcyBpbiB0aGUgR2l0TGFiIER1byB3aXRoIEFtYXpvbiBRIGludGVncmF0aW9uLiAqL1xuICAgIHB1YmxpYyBHaXRMYWJEdW9XaXRoQW1hem9uUVBlcm1pc3Npb25zUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkdpdExhYkR1b1dpdGhBbWF6b25RUGVybWlzc2lvbnNQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBHbG9iYWxBY2NlbGVyYXRvciBVc2VycyBmdWxsIEFjY2VzcyB0byBhbGwgQVBJcyAqL1xuICAgIHB1YmxpYyBHbG9iYWxBY2NlbGVyYXRvckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuR2xvYmFsQWNjZWxlcmF0b3JGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgR2xvYmFsQWNjZWxlcmF0b3IgVXNlcnMgQWNjZXNzIHRvIFJlYWQgT25seSBBUElzICovXG4gICAgcHVibGljIEdsb2JhbEFjY2VsZXJhdG9yUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuR2xvYmFsQWNjZWxlcmF0b3JSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgYWNjZXNzIHRvIHRoZSBHcmVlbmdyYXNzIE9UQSBVcGRhdGUgYXJ0aWZhY3RzIGluIGFsbCBHcmVlbmdyYXNzIHJlZ2lvbnMgKi9cbiAgICBwdWJsaWMgR3JlZW5ncmFzc09UQVVwZGF0ZUFydGlmYWN0QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkdyZWVuZ3Jhc3NPVEFVcGRhdGVBcnRpZmFjdEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBIZWFsdGggcG9saWN5IHRvIGVuYWJsZSBPcmdhbml6YXRpb25hbCBWaWV3IGZlYXR1cmUgKi9cbiAgICBwdWJsaWMgSGVhbHRoT3JnYW5pemF0aW9uc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkhlYWx0aE9yZ2FuaXphdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhY2Nlc3MgdG8gcmVhZCBhbGwgYWNjZXNzIGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5IElBTSBhY2Nlc3MgYWR2aXNvciBzdWNoIGFzIHNlcnZpY2UgbGFzdCBhY2Nlc3NlZCBpbmZvcm1hdGlvbi4gKi9cbiAgICBwdWJsaWMgSUFNQWNjZXNzQWR2aXNvclJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTUFjY2Vzc0Fkdmlzb3JSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIElBTSBBY2Nlc3MgQW5hbHl6ZXIgKi9cbiAgICBwdWJsaWMgSUFNQWNjZXNzQW5hbHl6ZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTUFjY2Vzc0FuYWx5emVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gSUFNIEFjY2VzcyBBbmFseXplciByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgSUFNQWNjZXNzQW5hbHl6ZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JQU1BY2Nlc3NBbmFseXplclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHJlcXVpcmVkIHRvIGNoZWNrIHRoZSBwcmVzZW5jZSBvZiByb290IHVzZXIgY3JlZGVudGlhbHMgc3VjaCBhcyByb290IHVzZXIgcGFzc3dvcmQgYW5kIHJvb3QgdXNlciBhY2Nlc3Mga2V5cyB1c2luZyB0aGUgU2VjdXJpdHkgVG9rZW4gU2VydmljZSAoU1RTKSBBc3N1bWVSb290IEFQSS4gVXNlIHRoaXMgbWFuYWdlZCBwb2xpY3kgb25seSB3aXRoIHRoZSBTVFMgQXNzdW1lUm9vdCBhY3Rpb24uICovXG4gICAgcHVibGljIElBTUF1ZGl0Um9vdFVzZXJDcmVkZW50aWFscygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JQU1BdWRpdFJvb3RVc2VyQ3JlZGVudGlhbHMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgcmVxdWlyZWQgdG8gY3JlYXRlIGEgcm9vdCB1c2VyIHBhc3N3b3JkIHVzaW5nIHRoZSBTZWN1cml0eSBUb2tlbiBTZXJ2aWNlIChTVFMpIEFzc3VtZVJvb3QgQVBJLiAgVXNlIHRoaXMgbWFuYWdlZCBwb2xpY3kgb25seSB3aXRoIHRoZSBTVFMgQXNzdW1lUm9vdCBhY3Rpb24uICovXG4gICAgcHVibGljIElBTUNyZWF0ZVJvb3RVc2VyUGFzc3dvcmQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuSUFNQ3JlYXRlUm9vdFVzZXJQYXNzd29yZCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyByZXF1aXJlZCB0byBkZWxldGUgYWxsIHJvb3QgdXNlciBjcmVkZW50aWFscyBzdWNoIGFzIHJvb3QgcGFzc3dvcmQgYW5kIHJvb3QgYWNjZXNzIGtleXMgdXNpbmcgdGhlIFNlY3VyaXR5IFRva2VuIFNlcnZpY2UgKFNUUykgQXNzdW1lUm9vdCBBUEkuICBVc2UgdGhpcyBtYW5hZ2VkIHBvbGljeSBvbmx5IHdpdGggdGhlIFNUUyBBc3N1bWVSb290IGFjdGlvbi4gKi9cbiAgICBwdWJsaWMgSUFNRGVsZXRlUm9vdFVzZXJDcmVkZW50aWFscygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JQU1EZWxldGVSb290VXNlckNyZWRlbnRpYWxzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSUFNIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgSUFNRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JQU1GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBJQU0gdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBJQU1SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JQU1SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhbiBJQU0gdXNlciB0byBtYW5hZ2UgdGhlaXIgb3duIFNlcnZpY2UgU3BlY2lmaWMgQ3JlZGVudGlhbHMuICovXG4gICAgcHVibGljIElBTVNlbGZNYW5hZ2VTZXJ2aWNlU3BlY2lmaWNDcmVkZW50aWFscygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JQU1TZWxmTWFuYWdlU2VydmljZVNwZWNpZmljQ3JlZGVudGlhbHMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB0aGUgYWJpbGl0eSBmb3IgYW4gSUFNIHVzZXIgdG8gY2hhbmdlIHRoZWlyIG93biBwYXNzd29yZC4gKi9cbiAgICBwdWJsaWMgSUFNVXNlckNoYW5nZVBhc3N3b3JkKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTVVzZXJDaGFuZ2VQYXNzd29yZCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBhYmlsaXR5IGZvciBhbiBJQU0gdXNlciB0byBtYW5hZ2UgdGhlaXIgb3duIFNTSCBrZXlzLiAqL1xuICAgIHB1YmxpYyBJQU1Vc2VyU1NIS2V5cygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JQU1Vc2VyU1NIS2V5cyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEludGVyYWN0aXZlIFZpZGVvIFNlcnZpY2UgKElWUyksIEFsc28gaW5jbHVkZWQgcGVybWlzc2lvbnMgZm9yIGRlcGVuZGVudCBzZXJ2aWNlcywgbmVlZGVkIGZvciBmdWxsIGFjY2VzcyB0byB0aGUgaXZzIGNvbnNvbGUuICovXG4gICAgcHVibGljIElWU0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuSVZTRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gSVZTIExvdy1MYXRlbmN5IGFuZCBSZWFsLVRpbWUgc3RyZWFtaW5nIEFQSXMgKi9cbiAgICBwdWJsaWMgSVZTUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuSVZTUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIExpbmtlZCBSb2xlIHRvIHBlcmZvcm0gUzMgUHV0T2JqZWN0IHRvIHJlY29yZGluZyBJVlMgbGl2ZSBzdHJlYW1zICovXG4gICAgcHVibGljIElWU1JlY29yZFRvUzMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuSVZTUmVjb3JkVG9TMyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBLYWZrYSBDb25uZWN0IHBlcm1pc3Npb24gdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEthZmthQ29ubmVjdFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkthZmthQ29ubmVjdFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogSUFNIHNlcnZpY2UgbGlua2VkIHJvbGUgcG9saWN5IGZvciBLYWZrYS4gKi9cbiAgICBwdWJsaWMgS2Fma2FTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5LYWZrYVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHRoZSByZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBBbWF6b24gS2V5c3BhY2VzIGZvciBDaGFuZ2UgRGF0YSBDYXB0dXJlICovXG4gICAgcHVibGljIEtleXNwYWNlc0NEQ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLktleXNwYWNlc0NEQ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgcmVxdWlyZWQgYnkgS2V5c3BhY2VzIGZvciBjcm9zcy1yZWdpb24gZGF0YSByZXBsaWNhdGlvbiAqL1xuICAgIHB1YmxpYyBLZXlzcGFjZXNSZXBsaWNhdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLktleXNwYWNlc1JlcGxpY2F0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdG8gZ3JhbnQgdGVtcG9yYXJ5IGRhdGEgYWNjZXNzIHRvIExha2UgRm9ybWF0aW9uIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBMYWtlRm9ybWF0aW9uRGF0YUFjY2Vzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkxha2VGb3JtYXRpb25EYXRhQWNjZXNzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIEFXUyBMZXggQm90IHVzZSBjYXNlICovXG4gICAgcHVibGljIExleEJvdFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5MZXhCb3RQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIEFXUyBMZXggQ2hhbm5lbCB1c2UgY2FzZSAqL1xuICAgIHB1YmxpYyBMZXhDaGFubmVsUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkxleENoYW5uZWxQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgTGlnaHRzYWlsIHNlcnZpY2UgbGlua2VkIHJvbGUgcG9saWN5IHdoaWNoIGdyYW50cyBwZXJtaXNzaW9ucyB0byBleHBvcnQgcmVzb3VyY2VzICovXG4gICAgcHVibGljIExpZ2h0c2FpbEV4cG9ydEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5MaWdodHNhaWxFeHBvcnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbiB0byByZWdpc3RlciBNZWRpYUNvbm5lY3QgR2F0ZXdheSBJbnN0YW5jZXMgdG8gYSBNZWRpYUNvbm5lY3QgR2F0ZXdheS4gKi9cbiAgICBwdWJsaWMgTWVkaWFDb25uZWN0R2F0ZXdheUluc3RhbmNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5NZWRpYUNvbm5lY3RHYXRld2F5SW5zdGFuY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIE1lZGlhUGFja2FnZSB0byBwdWJsaXNoIGxvZ3MgdG8gQ2xvdWRXYXRjaCAqL1xuICAgIHB1YmxpYyBNZWRpYVBhY2thZ2VTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5NZWRpYVBhY2thZ2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBNZW1vcnlEQiB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZiBhcyBuZWNlc3NhcnkgZm9yIG1hbmFnaW5nIHlvdXIgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBNZW1vcnlEQlNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk1lbW9yeURCU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIERhdGFiYXNlIE1pZ3JhdGlvbiBTZXJ2aWNlIHRvIGFzc3VtZSByb2xlIGluIGN1c3RvbWVyJ3MgYWNjb3VudCB0byBjYWxsIE1pZ3JhdGlvbiBIdWIgKi9cbiAgICBwdWJsaWMgTWlncmF0aW9uSHViRE1TQWNjZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTWlncmF0aW9uSHViRE1TQWNjZXNzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgTWlncmF0aW9uIEh1YiB0byBjYWxsIEFwcGxpY2F0aW9uIERpc2NvdmVyeSBTZXJ2aWNlIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIE1pZ3JhdGlvbkh1YlNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk1pZ3JhdGlvbkh1YlNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBTZXJ2ZXIgTWlncmF0aW9uIFNlcnZpY2UgdG8gYXNzdW1lIHJvbGUgaW4gY3VzdG9tZXIncyBhY2NvdW50IHRvIGNhbGwgTWlncmF0aW9uIEh1YiAqL1xuICAgIHB1YmxpYyBNaWdyYXRpb25IdWJTTVNBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5NaWdyYXRpb25IdWJTTVNBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIE1vbml0cm9uIHNlcnZpY2UgbGlua2VkIHJvbGUgZ3JhbnRpbmcgYWNjZXNzIHRvIHJlcXVpcmVkIGN1c3RvbWVyIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgTW9uaXRyb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Nb25pdHJvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gTXVsdGktcGFydHkgYXBwcm92YWwuIFRoaXMgcG9saWN5IGFsc28gaW5jbHVkZXMgcmVsYXRlZCBwZXJtaXNzaW9ucyB0byBBV1MgT3JnYW5pemF0aW9ucyBhbmQgQVdTIElBTSBJZGVudGl0eSBmb3IgbWFuYWdpbmcgYXBwcm92YWwgdGVhbXMgYW5kIGlkZW50aXR5IHNvdXJjZXMuICovXG4gICAgcHVibGljIE11bHRpUGFydHlBcHByb3ZhbEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTXVsdGlQYXJ0eUFwcHJvdmFsRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gTXVsdGktcGFydHkgYXBwcm92YWwuIFRoaXMgcG9saWN5IGFsc28gaW5jbHVkZXMgcmVsYXRlZCByZWFkIHBlcm1pc3Npb24gdG8gQVdTIE9yZ2FuaXphdGlvbnMgYW5kIEFXUyBJQU0gSWRlbnRpdHkgZm9yIGFwcHJvdmFsIHRlYW1zIGFuZCBpZGVudGl0eSBzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBNdWx0aVBhcnR5QXBwcm92YWxSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5NdWx0aVBhcnR5QXBwcm92YWxSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIG1hbmFnZSBBbWF6b24gTmVwdHVuZSB1c2luZyB0aGUgQVdTIENvbnNvbGUuIE5vdGUgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgZnVsbCBhY2Nlc3MgdG8gcHVibGlzaCBvbiBhbGwgU05TIHRvcGljcyB3aXRoaW4gdGhlIGFjY291bnQsIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBhbmQgZWRpdCBBbWF6b24gRUMyIGluc3RhbmNlcyBhbmQgVlBDIGNvbmZpZ3VyYXRpb25zLCBwZXJtaXNzaW9ucyB0byB2aWV3IGFuZCBsaXN0IGtleXMgb24gQW1hem9uIEtNUywgYW5kIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBSRFMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9uZXB0dW5lL2ZhcXMvLiAqL1xuICAgIHB1YmxpYyBOZXB0dW5lQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTmVwdHVuZUNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIE5lcHR1bmUuIE5vdGUgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgZnVsbCBhY2Nlc3MgdG8gcHVibGlzaCBvbiBhbGwgU05TIHRvcGljcyB3aXRoaW4gdGhlIGFjY291bnQgYW5kIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBSRFMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9uZXB0dW5lL2ZhcXMvLiAqL1xuICAgIHB1YmxpYyBOZXB0dW5lRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5OZXB0dW5lRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIEFtYXpvbiBOZXB0dW5lIEFuYWx5dGljcyByZXNvdXJjZXMgYWxvbmcgd2l0aCByZWFkIG9ubHkgcGVybWlzc2lvbnMgZm9yIGRlcGVuZGVudCBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgTmVwdHVuZUdyYXBoUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTmVwdHVuZUdyYXBoUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBOZXB0dW5lLiBOb3RlIHRoYXQgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgYWNjZXNzIHRvIEFtYXpvbiBSRFMgcmVzb3VyY2VzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vbmVwdHVuZS9mYXFzLy4gKi9cbiAgICBwdWJsaWMgTmVwdHVuZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk5lcHR1bmVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyBwZXJtaXNzaW9ucyB0byBBV1Mgc2VydmljZXMgYW5kIGFjdGlvbnMgcmVxdWlyZWQgdG8gc2V0IHVwIGFuZCBjb25maWd1cmUgQVdTIG5ldHdvcmsgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBOZXR3b3JrQWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5OZXR3b3JrQWRtaW5pc3RyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciB0aGUgQVdTIFNoaWVsZCBuZXR3b3JrIHNlY3VyaXR5IGRpcmVjdG9yIHNlcnZpY2UgbGlua2VkIHJvbGUgdG8gYXNzZXNzIHNwZWNpZmllZCBlbnZpcm9ubWVudHMuICovXG4gICAgcHVibGljIE5ldHdvcmtTZWN1cml0eURpcmVjdG9yU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTmV0d29ya1NlY3VyaXR5RGlyZWN0b3JTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIENsb3VkV2F0Y2ggT2JzZXJ2YWJpbGl0eSBBY2Nlc3MgTWFuYWdlciAqL1xuICAgIHB1YmxpYyBPQU1GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk9BTUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBSZWFkIE9ubHkgYWNjZXNzIHRvIENsb3VkV2F0Y2ggT2JzZXJ2YWJpbGl0eSBBY2Nlc3MgTWFuYWdlciAqL1xuICAgIHB1YmxpYyBPQU1SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5PQU1SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gT3BlblNlYXJjaCBJbmdlc3Rpb24gdG8gZGVzY3JpYmUgbmV0d29yayByZXNvdXJjZXMgYW5kIHdyaXRlIHNlcnZpY2UgbWV0cmljcyB0byBjbG91ZHdhdGNoICovXG4gICAgcHVibGljIE9wZW5zZWFyY2hJbmdlc3Rpb25TZWxmTWFuYWdlZFZwY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuT3BlbnNlYXJjaEluZ2VzdGlvblNlbGZNYW5hZ2VkVnBjZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBhc3NvY2lhdGUgYW5kIGRpc3NvY2lhdGUgcGFydG5lciBjZW50cmFsIHVzZXJzIHdpdGggSUFNIHJvbGVzICovXG4gICAgcHVibGljIFBhcnRuZXJDZW50cmFsQWNjb3VudE1hbmFnZW1lbnRVc2VyUm9sZUFzc29jaWF0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlBhcnRuZXJDZW50cmFsQWNjb3VudE1hbmFnZW1lbnRVc2VyUm9sZUFzc29jaWF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMsIGJ1dCBkb2VzIG5vdCBhbGxvdyBtYW5hZ2VtZW50IG9mIFVzZXJzIGFuZCBncm91cHMuICovXG4gICAgcHVibGljIFBvd2VyVXNlckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Qb3dlclVzZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFtYXpvbiBRIEFwcHMuICovXG4gICAgcHVibGljIFFBcHBzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUUFwcHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBRQnVzaW5lc3MgdG8gY2FsbCBRdWlja1NpZ2h0IEFQSXMgZm9yIHRoZSBRdWlja1NpZ2h0IHBsdWdpbiAqL1xuICAgIHB1YmxpYyBRQnVzaW5lc3NRdWlja3NpZ2h0UGx1Z2luUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlFCdXNpbmVzc1F1aWNrc2lnaHRQbHVnaW5Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFtYXpvbiBRICovXG4gICAgcHVibGljIFFCdXNpbmVzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlFCdXNpbmVzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHVzZWQgYnkgUXVpY2tTaWdodCB0ZWFtIHRvIGFjY2VzcyBjdXN0b21lciBkYXRhIHByb2R1Y2VkIGJ5IFMzIFN0b3JhZ2UgTWFuYWdlbWVudCBBbmFseXRpY3MuICovXG4gICAgcHVibGljIFF1aWNrU2lnaHRBY2Nlc3NGb3JTM1N0b3JhZ2VNYW5hZ2VtZW50QW5hbHl0aWNzUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUXVpY2tTaWdodEFjY2Vzc0ZvclMzU3RvcmFnZU1hbmFnZW1lbnRBbmFseXRpY3NSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgcG9saWN5IGZvciB0aGUgQW1hem9uIFJEUyBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIFJEU0Nsb3VkSHNtQXV0aG9yaXphdGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUkRTQ2xvdWRIc21BdXRob3JpemF0aW9uUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMuICovXG4gICAgcHVibGljIFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gUmVzb3VyY2UgR3JvdXBzIGFuZCBUYWcgRWRpdG9yLiAqL1xuICAgIHB1YmxpYyBSZXNvdXJjZUdyb3Vwc2FuZFRhZ0VkaXRvckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUmVzb3VyY2VHcm91cHNhbmRUYWdFZGl0b3JGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHVzZSBSZXNvdXJjZSBHcm91cHMgYW5kIFRhZyBFZGl0b3IsIGJ1dCBkb2VzIG5vdCBhbGxvdyBlZGl0aW5nIG9mIHRhZ3MgdmlhIHRoZSBUYWcgRWRpdG9yLiAqL1xuICAgIHB1YmxpYyBSZXNvdXJjZUdyb3Vwc2FuZFRhZ0VkaXRvclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJlc291cmNlR3JvdXBzYW5kVGFnRWRpdG9yUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIFJlc291cmNlIEdyb3VwcyB0byBxdWVyeSB0aGUgQVdTIHNlcnZpY2VzIHRoYXQgb3duIHlvdXIgcmVzb3VyY2VzIHRvIGtlZXAgdGhlIGdyb3VwIHVwLXRvLWRhdGUgKi9cbiAgICBwdWJsaWMgUmVzb3VyY2VHcm91cHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5SZXNvdXJjZUdyb3Vwc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gdGFnIGFuZCB1bnRhZyBhbGwgdGhlIHJlc291cmNlcyBzdXBwb3J0ZWQgYnkgUmVzb3VyY2UgR3JvdXBzIFRhZ2dpbmcgQVBJLiBUaGlzIHBvbGljeSBhbHNvIGdyYW50cyB0aGUgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gcmV0cmlldmUgYWxsIHRhZ2dlZCwgb3IgcHJldmlvdXNseSB0YWdnZWQsIHJlc291cmNlcyB0aHJvdWdoIHRoZSBSZXNvdXJjZSBHcm91cHMgVGFnZ2luZyBBUEkuICovXG4gICAgcHVibGljIFJlc291cmNlR3JvdXBzVGFnZ2luZ0FQSVRhZ1VudGFnU3VwcG9ydGVkUmVzb3VyY2VzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJlc291cmNlR3JvdXBzVGFnZ2luZ0FQSVRhZ1VudGFnU3VwcG9ydGVkUmVzb3VyY2VzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBPcGVuU2hpZnQgQW1hem9uIEVCUyBDb250YWluZXIgU3RvcmFnZSBJbnRlcmZhY2UgKENTSSkgRHJpdmVyIE9wZXJhdG9yIHRvIGluc3RhbGwgYW5kIG1haW50YWluIHRoZSBBbWF6b24gRUJTIENTSSBkcml2ZXIgb24gYSBSZWQgSGF0IE9wZW5TaGlmdCBTZXJ2aWNlIG9uIEFXUyAoUk9TQSkgY2x1c3Rlci4gVGhlIEFtYXpvbiBFQlMgQ1NJIGRyaXZlciBhbGxvd3MgUk9TQSBjbHVzdGVycyB0byBtYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZiBBbWF6b24gRUJTIHZvbHVtZXMgZm9yIHBlcnNpc3RlbnQgdm9sdW1lcy4gKi9cbiAgICBwdWJsaWMgUk9TQUFtYXpvbkVCU0NTSURyaXZlck9wZXJhdG9yUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FBbWF6b25FQlNDU0lEcml2ZXJPcGVyYXRvclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgT3BlblNoaWZ0IENsb3VkIE5ldHdvcmsgQ29uZmlnIENvbnRyb2xsZXIgT3BlcmF0b3IgdG8gcHJvdmlzaW9uIGFuZCBtYW5hZ2UgbmV0d29ya2luZyByZXNvdXJjZXMgZm9yIHVzZSBieSB0aGUgUmVkIEhhdCBPcGVuU2hpZnQgU2VydmljZSBvbiBBV1MgKFJPU0EpIGNsdXN0ZXIgbmV0d29ya2luZyBvdmVybGF5LiBUaGUgT3BlblNoaWZ0IENsb3VkIE5ldHdvcmsgT3BlcmF0b3IgaW50ZXJmYWNlcyB3aXRoIEFXUyBBUElzIG9uIGJlaGFsZiBvZiB0aGUgbmV0d29yayBwbHVnaW5zIHZpYSBDdXN0b21SZXNvdXJjZURlZmluaXRpb25zLiBUaGUgb3BlcmF0b3IgdXNlcyB0aGVzZSBwb2xpY3kgcGVybWlzc2lvbnMgdG8gbWFuYWdlIHByaXZhdGUgSVAgYWRkcmVzc2VzIGZvciBBbWF6b24gRUMyIGluc3RhbmNlcyBhcyBwYXJ0IG9mIHRoZSBST1NBIGNsdXN0ZXIuICovXG4gICAgcHVibGljIFJPU0FDbG91ZE5ldHdvcmtDb25maWdPcGVyYXRvclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBQ2xvdWROZXR3b3JrQ29uZmlnT3BlcmF0b3JQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgUmVkIEhhdCBPcGVuU2hpZnQgU2VydmljZSBvbiBBV1MgKFJPU0EpIGNvbnRyb2wgcGxhbmUgdG8gbWFuYWdlIFJPU0EgY2x1c3RlciBBbWF6b24gRUMyIGFuZCBBbWF6b24gUm91dGUgNTMgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBST1NBQ29udHJvbFBsYW5lT3BlcmF0b3JQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQUNvbnRyb2xQbGFuZU9wZXJhdG9yUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBPcGVuU2hpZnQgSW1hZ2UgUmVnaXN0cnkgT3BlcmF0b3IgdG8gcHJvdmlzaW9uIGFuZCBtYW5hZ2UgQW1hem9uIFMzIGJ1Y2tldHMgYW5kIG9iamVjdHMgZm9yIHVzZSBieSB0aGUgUmVkIEhhdCBPcGVuU2hpZnQgU2VydmljZSBvbiBBV1MgKFJPU0EpIGluLWNsdXN0ZXIgaW1hZ2UgcmVnaXN0cnkgdG8gc2F0aXNmeSBST1NBIHN0b3JhZ2UgcmVxdWlyZW1lbnRzLiBUaGUgT3BlblNoaWZ0IEltYWdlIFJlZ2lzdHJ5IE9wZXJhdG9yIGluc3RhbGxzIGFuZCBtYWludGFpbnMgdGhlIGludGVybmFsIHJlZ2lzdHJ5IG9mIGEgUmVkIEhhdCBPcGVuU2hpZnQgY2x1c3Rlci4gKi9cbiAgICBwdWJsaWMgUk9TQUltYWdlUmVnaXN0cnlPcGVyYXRvclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBSW1hZ2VSZWdpc3RyeU9wZXJhdG9yUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBPcGVuU2hpZnQgSW5ncmVzcyBPcGVyYXRvciB0byBwcm92aXNpb24gYW5kIG1hbmFnZSBsb2FkIGJhbGFuY2VycyBhbmQgZG9tYWluIG5hbWUgc3lzdGVtIChETlMpIGNvbmZpZ3VyYXRpb25zIGZvciBSZWQgSGF0IE9wZW5TaGlmdCBTZXJ2aWNlIG9uIEFXUyAoUk9TQSkgY2x1c3RlcnMuIFRoZSBwb2xpY3kgYWxsb3dzIHJlYWQgYWNjZXNzIHRvIHRhZyB2YWx1ZXMsIHdoaWNoIHRoZSBvcGVyYXRvciBmaWx0ZXJzIGZvciBSb3V0ZSA1MyByZXNvdXJjZXMgdG8gZGlzY292ZXIgaG9zdGVkIHpvbmVzLiAqL1xuICAgIHB1YmxpYyBST1NBSW5ncmVzc09wZXJhdG9yUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FJbmdyZXNzT3BlcmF0b3JQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSBpbnN0YWxsZXIgdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgdGhhdCBzdXBwb3J0IFJPU0EgY2x1c3RlciBpbnN0YWxsYXRpb24uIFRoaXMgaW5jbHVkZXMgbWFuYWdpbmcgaW5zdGFuY2UgcHJvZmlsZXMgZm9yIFJPU0Egd29ya2VyIG5vZGVzLiAqL1xuICAgIHB1YmxpYyBST1NBSW5zdGFsbGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FJbnN0YWxsZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIGJ1aWx0LWluIFJPU0EgQVdTIEVuY3J5cHRpb24gUHJvdmlkZXIgdG8gbWFuYWdlIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIChLTVMpIGtleXMgdG8gc3VwcG9ydCBldGNkIGRhdGEgZW5jcnlwdGlvbiB1c2luZyBhIGN1c3RvbWVyIHByb3ZpZGVkIEFXUyBLTVMga2V5LiBUaGUgcG9saWN5IGFsbG93cyBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uIG9mIGRhdGEgdXNpbmcgS01TIGtleXMuICovXG4gICAgcHVibGljIFJPU0FLTVNQcm92aWRlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBS01TUHJvdmlkZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIFJPU0EgS3ViZXJuZXRlcyBjb250cm9sbGVyIHRvIG1hbmFnZSBBbWF6b24gRUMyLCBFbGFzdGljIExvYWQgQmFsYW5jaW5nIChFTEIpLCBhbmQgQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2UgKEtNUykgcmVzb3VyY2VzIGZvciBhIFJPU0EgY2x1c3Rlci4gKi9cbiAgICBwdWJsaWMgUk9TQUt1YmVDb250cm9sbGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FLdWJlQ29udHJvbGxlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIHRoZSBwZXJtaXNzaW9ucyByZXF1aXJlZCB0byBtYW5hZ2UgdGhlIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSBzdWJzY3JpcHRpb24uICovXG4gICAgcHVibGljIFJPU0FNYW5hZ2VTdWJzY3JpcHRpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQU1hbmFnZVN1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBSZWQgSGF0IE9wZW5TaGlmdCBTZXJ2aWNlIG9uIEFXUyAoUk9TQSkgdG8gbWFuYWdlIGNsdXN0ZXIgRUMyIGluc3RhbmNlcyBhcyB3b3JrZXIgbm9kZXMsIGluY2x1ZGluZyBwZXJtaXNzaW9uIHRvIGNvbmZpZ3VyZSBzZWN1cml0eSBncm91cHMgYW5kIHRhZyBpbnN0YW5jZXMgYW5kIHZvbHVtZXMuIFRoaXMgcG9saWN5IGFsc28gYWxsb3dzIGZvciB0aGUgdXNlIG9mIEVDMiBpbnN0YW5jZXMgd2l0aCBkaXNrIGVuY3J5cHRpb24gcHJvdmlkZWQgYnkgQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2UgKEtNUykga2V5cy4gKi9cbiAgICBwdWJsaWMgUk9TQU5vZGVQb29sTWFuYWdlbWVudFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBTm9kZVBvb2xNYW5hZ2VtZW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBSZWQgSGF0IE9wZW5TaGlmdCBTZXJ2aWNlIG9uIEFXUyAoUk9TQSkgaW5zdGFsbGVyIHRvIGNvbmZpZ3VyZSBWUEMgRW5kcG9pbnRzIGFuZCBTZWN1cml0eSBHcm91cHMuIEludGVuZGVkIHRvIGJlIHVzZWQgb24gYSBzaGFyZWQgVlBDLiAqL1xuICAgIHB1YmxpYyBST1NBU2hhcmVkVlBDRW5kcG9pbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQVNoYXJlZFZQQ0VuZHBvaW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBSZWQgSGF0IE9wZW5TaGlmdCBTZXJ2aWNlIG9uIEFXUyAoUk9TQSkgaW5zdGFsbGVyIHRvIGNvbmZpZ3VyZSBSb3V0ZTUzIHJlY29yZHMuIEludGVuZGVkIHRvIGJlIHVzZWQgb24gYSBzaGFyZWQgVlBDLiAqL1xuICAgIHB1YmxpYyBST1NBU2hhcmVkVlBDUm91dGU1M1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBU2hhcmVkVlBDUm91dGU1M1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIFJPU0Egc2l0ZSByZWxpYWJpbGl0eSBlbmdpbmVlcmluZyAoU1JFKSB0aGUgcGVybWlzc2lvbnMgbmVlZGVkIHRvIGluaXRpYWxseSBvYnNlcnZlLCBkaWFnbm9zZSwgYW5kIHN1cHBvcnQgQVdTIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggUmVkIEhhdCBPcGVuU2hpZnQgU2VydmljZSBvbiBBV1MgKFJPU0EpIGNsdXN0ZXJzLCBpbmNsdWRpbmcgdGhlIGFiaWxpdHkgdG8gY2hhbmdlIFJPU0EgY2x1c3RlciBub2RlIHN0YXRlLiAqL1xuICAgIHB1YmxpYyBST1NBU1JFU3VwcG9ydFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBU1JFU3VwcG9ydFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBSZWQgSGF0IE9wZW5TaGlmdCBTZXJ2aWNlIG9uIEFXUyAoUk9TQSkgd29ya2VyIG5vZGVzIGluIHlvdXIgYWNjb3VudCByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBFQzIgaW5zdGFuY2VzIGFuZCBBV1MgUmVnaW9ucyBmb3IgY29tcHV0ZSBub2RlIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiAqL1xuICAgIHB1YmxpYyBST1NBV29ya2VySW5zdGFuY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQVdvcmtlckluc3RhbmNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSBMaW5rZWQgUm9sZSBQb2xpY3kgZm9yIFJvdXRlIDUzIFJlY292ZXJ5IFJlYWRpbmVzcyAqL1xuICAgIHB1YmxpYyBSb3V0ZTUzUmVjb3ZlcnlSZWFkaW5lc3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Sb3V0ZTUzUmVjb3ZlcnlSZWFkaW5lc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBSb3V0ZTUzIFJlc29sdmVyICovXG4gICAgcHVibGljIFJvdXRlNTNSZXNvbHZlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJvdXRlNTNSZXNvbHZlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQSBzZXJ2aWNlLWxpbmtlZCByb2xlIHJlcXVpcmVkIGZvciBBV1MgUlRCRmFicmljIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHlvdXIgbmV0d29yayBpbnRlcmZhY2UgcmVzb3VyY2VzIGFuZCBkZWxpdmVyIG1ldHJpY3MuICovXG4gICAgcHVibGljIFJUQkZhYnJpY1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJUQkZhYnJpY1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IFMzIFN0b3JhZ2UgTGVucyAqL1xuICAgIHB1YmxpYyBTM1N0b3JhZ2VMZW5zU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUzNTdG9yYWdlTGVuc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHJlcXVpcmVkIHRvIHVubG9jayBhIFMzIGJ1Y2tldCBwb2xpY3kgdXNpbmcgdGhlIFNlY3VyaXR5IFRva2VuIFNlcnZpY2UgKFNUUykgQXNzdW1lUm9vdCBBUEkuIFVzZSB0aGlzIG1hbmFnZWQgcG9saWN5IG9ubHkgd2l0aCB0aGUgU1RTIEFzc3VtZVJvb3QgYWN0aW9uLiAqL1xuICAgIHB1YmxpYyBTM1VubG9ja0J1Y2tldFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TM1VubG9ja0J1Y2tldFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGluaXRpYWwgYWRtaW5pc3RyYXRpdmUgYW5kIGluZGl2aWR1YWwgc2V0dXAgcHJpdmlsZWdlcyBmb3IgQW1hem9uIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpbyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gQWxsb3dzIGxhdW5jaGluZyBvZiBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8gUG9ydGFsLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9BZG1pbklBTUNvbnNvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvQWRtaW5JQU1Db25zb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWRtaW5pc3RyYXRpdmUgZXhlY3V0aW9uIHBvbGljeSBmb3IgdXNpbmcgSUFNIHJvbGVzIHdpdGggU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvLiBBbGxvd3MgYWRtaW5zIHRvIHByb3Zpc2lvbiwgbWFuYWdlIGFuZCBhY2Nlc3MgcmVzb3VyY2VzIGluIHlvdXIgYWNjb3VudCAoZXhjbHVkaW5nIGFjY2VzcyB0byBkYXRhIHJlc291cmNlcykgZm9yIElBTS1iYXNlZCB1c2FnZSBvZiBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0FkbWluSUFNRGVmYXVsdEV4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9BZG1pbklBTURlZmF1bHRFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBZG1pbmlzdHJhdGl2ZSBleGVjdXRpb24gcG9saWN5IGZvciB1c2luZyBJQU0gcm9sZXMgd2l0aCBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8uIEFsbG93cyBhZG1pbnMgdG8gcHJvdmlzaW9uLCBtYW5hZ2UgYW5kIGFjY2VzcyByZXNvdXJjZXMgaW4gdGhlIGxvY2FsIGFjY291bnQgKGluY2x1ZGluZyBicm9hZCBhY2Nlc3MgdG8gYWxsIEFQSXMgaW4gZGF0YSBzZXJ2aWNlcyBsaWtlIFMzLCBHbHVlLCBDbG91ZFdhdGNoIExvZ3MsIGFuZCBvdGhlcnMpIGZvciBJQU0tYmFzZWQgdXNhZ2Ugb2YgU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9BZG1pbklBTVBlcm1pc3NpdmVFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvQWRtaW5JQU1QZXJtaXNzaXZlRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBJQU0gcG9saWN5IGdyYW50cyBhbiBJQU0gcm9sZSBmdWxsIGFjY2VzcyB0byBBV1MgR2x1ZSBEYXRhIENhdGFsb2cgKG1ldGFkYXRhKSBhbmQgQW1hem9uIFMzIChhY3R1YWwgZGF0YSkgZm9yIGRhdGEgbGFrZSBvcGVyYXRpb25zLCB3aXRoIGFjY2VzcyBzY29wZWQgYnkgYWNjb3VudCwgYW5kIHJvbGUgdGFncy4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvQWRtaW5Qcm9qZWN0VXNlclJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvQWRtaW5Qcm9qZWN0VXNlclJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIEJlZHJvY2sgQWdlbnRzIHRvIGFjY2VzcyBBbWF6b24gQmVkcm9jayBtb2RlbHMgYW5kIG90aGVyIHJlc291cmNlcyBhdHRhY2hlZCB0byBhbiBhZ2VudCBpbiBTYWdlTWFrZXIgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9CZWRyb2NrQWdlbnRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9CZWRyb2NrQWdlbnRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBhbiBBbWF6b24gQmVkcm9jayBjaGF0IGFnZW50IGFwcCdzIGNvbmZpZ3VyYXRpb24gYW5kIEFtYXpvbiBCZWRyb2NrIGFnZW50IGluIFNhZ2VNYWtlciBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0JlZHJvY2tDaGF0QWdlbnRVc2VyUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9CZWRyb2NrQ2hhdEFnZW50VXNlclJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIEJlZHJvY2sgdG8gYWNjZXNzIEFtYXpvbiBCZWRyb2NrIG1vZGVscyBhbmQgZGF0YXNldHMgZm9yIGV2YWx1YXRpb24gam9icyBpbiBTYWdlTWFrZXIgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9CZWRyb2NrRXZhbHVhdGlvbkpvYlNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0JlZHJvY2tFdmFsdWF0aW9uSm9iU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIEJlZHJvY2sgRmxvd3MgdG8gYWNjZXNzIEFtYXpvbiBCZWRyb2NrIG1vZGVscyBhbmQgb3RoZXIgcmVzb3VyY2VzIGF0dGFjaGVkIHRvIGEgZmxvdyBpbiBTYWdlTWFrZXIgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9CZWRyb2NrRmxvd1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0JlZHJvY2tGbG93U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIExhbWJkYSB0byBhY2Nlc3MgYW4gQW1hem9uIEJlZHJvY2sgZnVuY3Rpb24gY29tcG9uZW50J3MgY29uZmlndXJhdGlvbiBpbiBTYWdlTWFrZXIgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9CZWRyb2NrRnVuY3Rpb25FeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0JlZHJvY2tGdW5jdGlvbkV4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gY29uZmlndXJlIHZlY3RvciBzdG9yZXMgYW5kIEFtYXpvbiBCZWRyb2NrIGtub3dsZWRnZSBiYXNlcyBpbiBTYWdlTWFrZXIgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9CZWRyb2NrS25vd2xlZGdlQmFzZUN1c3RvbVJlc291cmNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0JlZHJvY2tLbm93bGVkZ2VCYXNlQ3VzdG9tUmVzb3VyY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIEJlZHJvY2sgS25vd2xlZGdlIEJhc2VzIHRvIGFjY2VzcyBBbWF6b24gQmVkcm9jayBtb2RlbHMgYW5kIGRhdGEgc291cmNlcyBpbiBTYWdlTWFrZXIgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9CZWRyb2NrS25vd2xlZGdlQmFzZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0JlZHJvY2tLbm93bGVkZ2VCYXNlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gYW4gQW1hem9uIEJlZHJvY2sgcHJvbXB0IGFuZCBpdHMgY29uZmlndXJhdGlvbiBpbiBTYWdlTWFrZXIgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9CZWRyb2NrUHJvbXB0VXNlclJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja1Byb21wdFVzZXJSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgdXNlZCBieSBBbWF6b24gU2FnZU1ha2VyIFN0dWRpbyB0byBjYXRhbG9nLCBkaXNjb3ZlciwgZ292ZXJuLCBzaGFyZSwgYW5kIGFuYWx5emUgZGF0YSBpbiB0aGUgQW1hem9uIFNhZ2VNYWtlciBTdHVkaW8gZG9tYWluLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9Eb21haW5FeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0RvbWFpbkV4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIHJvbGUgZm9yIGRvbWFpbiBsZXZlbCBhY3Rpb25zIGluIHRoZSBwb3J0YWwgdGhhdCBhcmUgcGVyZm9ybWVkIGJ5IEFtYXpvbiBTYWdlTWFrZXIgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9Eb21haW5TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9Eb21haW5TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBTYWdlTWFrZXIgU3R1ZGlvIGNyZWF0ZXMgSUFNIHJvbGVzIGZvciBwcm9qZWN0cyB1c2VycyB0byBwZXJmb3JtIGRhdGEgYW5hbHl0aWNzLCBhcnRpZmljaWFsIGludGVsbGlnZW5jZSwgYW5kIG1hY2hpbmUgbGVhcm5pbmcgYWN0aW9ucywgYW5kIHVzZXMgdGhpcyBwb2xpY3kgd2hlbiBjcmVhdGluZyB0aGVzZSByb2xlcyB0byBkZWZpbmUgdGhlIHBlcm1pc3Npb25zIHJlbGF0ZWQgdG8gRU1SLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9FTVJDb250YWluZXJzU3lzdGVtTmFtZXNwYWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9FTVJDb250YWluZXJzU3lzdGVtTmFtZXNwYWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBTYWdlTWFrZXIgU3R1ZGlvIGNyZWF0ZXMgSUFNIHJvbGVzIGZvciBwcm9qZWN0cyB1c2VycyB0byBwZXJmb3JtIGRhdGEgYW5hbHl0aWNzLCBhcnRpZmljaWFsIGludGVsbGlnZW5jZSwgYW5kIG1hY2hpbmUgbGVhcm5pbmcgYWN0aW9ucywgYW5kIHVzZXMgdGhpcyBwb2xpY3kgd2hlbiBjcmVhdGluZyB0aGVzZSByb2xlcyB0byBkZWZpbmUgdGhlIHBlcm1pc3Npb25zIHJlbGF0ZWQgdG8gRU1SLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9FTVJJbnN0YW5jZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvRU1SSW5zdGFuY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFNhZ2VNYWtlciBTdHVkaW8gY3JlYXRlcyBJQU0gcm9sZXMgZm9yIHByb2plY3RzIHVzZXJzIHRvIHBlcmZvcm0gZGF0YSBhbmFseXRpY3MsIGFydGlmaWNpYWwgaW50ZWxsaWdlbmNlLCBhbmQgbWFjaGluZSBsZWFybmluZyBhY3Rpb25zLCBhbmQgdXNlcyB0aGlzIHBvbGljeSB3aGVuIGNyZWF0aW5nIHRoZXNlIHJvbGVzIHRvIGRlZmluZSB0aGUgcGVybWlzc2lvbnMgcmVsYXRlZCB0byBFTVIuICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0VNUlNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0VNUlNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpbyB2aWEgdGhlIEFtYXpvbiBTYWdlTWFrZXIgbWFuYWdlbWVudCBjb25zb2xlLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gU2FnZU1ha2VyIFN0dWRpbyB1c2VzIHRoaXMgcG9saWN5IHRvIHByb3Zpc2lvbiBhbmQgbWFuYWdlIHJlc291cmNlcyBpbiB5b3VyIGFjY291bnQuICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb1Byb2plY3RQcm92aXNpb25pbmdSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb1Byb2plY3RQcm92aXNpb25pbmdSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFNhZ2VNYWtlciBTdHVkaW8gY3JlYXRlcyBJQU0gcm9sZXMgZm9yIHByb2plY3RzIHVzZXJzIHRvIHBlcmZvcm0gZGF0YSBhbmFseXRpY3MsIGFydGlmaWNpYWwgaW50ZWxsaWdlbmNlLCBhbmQgbWFjaGluZSBsZWFybmluZyBhY3Rpb25zLCBhbmQgdXNlcyB0aGlzIHBvbGljeSB3aGVuIGNyZWF0aW5nIHRoZXNlIHJvbGVzIHRvIGRlZmluZSB0aGUgcGVybWlzc2lvbnMgcmVsYXRlZCB0byBTYWdlTWFrZXIuICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb1Byb2plY3RSb2xlTWFjaGluZUxlYXJuaW5nUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb1Byb2plY3RSb2xlTWFjaGluZUxlYXJuaW5nUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFNhZ2VNYWtlciBjcmVhdGVzIElBTSByb2xlcyBmb3IgUHJvamVjdHMgdXNlcnMgdG8gcGVyZm9ybSBkYXRhIGFuYWx5dGljcywgYXJ0aWZpY2lhbCBpbnRlbGxpZ2VuY2UsIGFuZCBtYWNoaW5lIGxlYXJuaW5nIGFjdGlvbnMsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgdGhlc2Ugcm9sZXMgdG8gZGVmaW5lIHRoZSBib3VuZGFyeSBvZiB0aGVpciBwZXJtaXNzaW9ucy4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvUHJvamVjdFVzZXJSb2xlUGVybWlzc2lvbnNCb3VuZGFyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9Qcm9qZWN0VXNlclJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFNhZ2VNYWtlciBTdHVkaW8gY3JlYXRlcyBJQU0gcm9sZXMgZm9yIHByb2plY3RzIHVzZXJzIHRvIHBlcmZvcm0gZGF0YSBhbmFseXRpY3MsIGFydGlmaWNpYWwgaW50ZWxsaWdlbmNlLCBhbmQgbWFjaGluZSBsZWFybmluZyBhY3Rpb25zLCBhbmQgdXNlcyB0aGlzIHBvbGljeSB3aGVuIGNyZWF0aW5nIHRoZXNlIHJvbGVzIHRvIGRlZmluZSB0aGUgcGVybWlzc2lvbnMuICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb1Byb2plY3RVc2VyUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9Qcm9qZWN0VXNlclJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gU2FnZU1ha2VyIFN0dWRpbyB1c2VzIHRoaXMgcG9saWN5IHdoZW4gcnVubmluZyBxdWVyeSBleGVjdXRpb25zIG9uIGZlZGVyYXRlZCBjb25uZWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvUXVlcnlFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb1F1ZXJ5RXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGluZGl2aWR1YWwgc2V0dXAgcHJpdmlsZWdlcyBmb3IgQW1hem9uIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpbyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gQWxsb3dzIGxhdW5jaGluZyBvZiBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8gUG9ydGFsLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9Vc2VySUFNQ29uc29sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9Vc2VySUFNQ29uc29sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEV4ZWN1dGlvbiBwb2xpY3kgZm9yIHVzaW5nIElBTSByb2xlcyB3aXRoIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpby4gQWxsb3dzIHVzZXJzIHRvIGFjY2VzcyByZXNvdXJjZXMgaW4gdGhlIGxvY2FsIGFjY291bnQgKGV4Y2x1ZGluZyBhY2Nlc3MgdG8gZGF0YSByZXNvdXJjZXMpIGZvciBJQU0tYmFzZWQgdXNhZ2Ugb2YgU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9Vc2VySUFNRGVmYXVsdEV4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9Vc2VySUFNRGVmYXVsdEV4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEV4ZWN1dGlvbiBwb2xpY3kgZm9yIHVzaW5nIElBTSByb2xlcyB3aXRoIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpby4gQWxsb3dzIHVzZXJzIHRvIGFjY2VzcyByZXNvdXJjZXMgaW4geW91ciBhY2NvdW50IChpbmNsdWRpbmcgYnJvYWQgYWNjZXNzIHRvIGFsbCBBUElzIGluIGRhdGEgc2VydmljZXMgbGlrZSBTMywgR2x1ZSwgQ2xvdWRXYXRjaCBMb2dzLCBhbmQgb3RoZXJzKSBmb3IgSUFNLWJhc2VkIHVzYWdlIG9mIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvVXNlcklBTVBlcm1pc3NpdmVFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvVXNlcklBTVBlcm1pc3NpdmVFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkL3dyaXRlIGFjY2VzcyB0byBBV1MgU2VjcmV0cyBNYW5hZ2VyIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gTm90ZTogdGhpcyBleGx1ZGVzIElBTSBhY3Rpb25zLCBzbyBjb21iaW5lIHdpdGggSUFNRnVsbEFjY2VzcyBpZiByb3RhdGlvbiBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkLiAqL1xuICAgIHB1YmxpYyBTZWNyZXRzTWFuYWdlclJlYWRXcml0ZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZWNyZXRzTWFuYWdlclJlYWRXcml0ZSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBzZWN1cml0eSBhdWRpdCB0ZW1wbGF0ZSBncmFudHMgYWNjZXNzIHRvIHJlYWQgc2VjdXJpdHkgY29uZmlndXJhdGlvbiBtZXRhZGF0YS4gSXQgaXMgdXNlZnVsIGZvciBzb2Z0d2FyZSB0aGF0IGF1ZGl0cyB0aGUgY29uZmlndXJhdGlvbiBvZiBhbiBBV1MgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgU2VjdXJpdHlBdWRpdCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZWN1cml0eUF1ZGl0KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG1hbmFnZSByZXNvdXJjZXMgY3JlYXRlZCBieSBTZWN1cml0eSBMYWtlLiAqL1xuICAgIHB1YmxpYyBTZWN1cml0eUxha2VSZXNvdXJjZU1hbmFnZW1lbnRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZWN1cml0eUxha2VSZXNvdXJjZU1hbmFnZW1lbnRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byBvcGVyYXRlIHRoZSBBbWF6b24gU2VjdXJpdHkgTGFrZSBzZXJ2aWNlIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIFNlY3VyaXR5TGFrZVNlcnZpY2VMaW5rZWRSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNlY3VyaXR5TGFrZVNlcnZpY2VMaW5rZWRSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgdG8gYWxsb3cgdGhlIEFXUyBTZXJ2ZXIgTWlncmF0aW9uIENvbm5lY3RvciB0byBtaWdyYXRlIFZNcyB0byBFQzIuIEFsbG93cyBjb21tdW5pY2F0aW9uIHdpdGggdGhlIEFXUyBTZXJ2ZXIgTWlncmF0aW9uIFNlcnZpY2UsIHJlYWQvd3JpdGUgYWNjZXNzIHRvIFMzIGJ1Y2tldHMgc3RhcnRpbmcgd2l0aCAnc21zLWItJyBhbmQgJ2ltcG9ydC10by1lYzItJyBhcyB3ZWxsIGFzIHRoZSBidWNrZXRzIHVzZWQgZm9yIEFXUyBTZXJ2ZXIgTWlncmF0aW9uIENvbm5lY3RvciB1cGdyYWRlLCBBV1MgU2VydmVyIE1pZ3JhdGlvbiBDb25uZWN0b3IgcmVnaXN0cmF0aW9uIHdpdGggQVdTLCBhbmQgbWV0cmljcyB1cGxvYWQgdG8gQVdTLiAqL1xuICAgIHB1YmxpYyBTZXJ2ZXJNaWdyYXRpb25Db25uZWN0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VydmVyTWlncmF0aW9uQ29ubmVjdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIGFsbCBmZWF0dXJlcyBvZiB0aGUgU2VydmVyIE1pZ3JhdGlvbiBTZXJ2aWNlIENvbnNvbGUgKi9cbiAgICBwdWJsaWMgU2VydmVyTWlncmF0aW9uU2VydmljZUNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNlcnZlck1pZ3JhdGlvblNlcnZpY2VDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBlcm1pc3Npb25zIHRvIGFsbG93IHRoZSBBV1MgU2VydmVyIE1pZ3JhdGlvbiBTZXJ2aWNlIHRvIGNyZWF0ZSBhbmQgdXBkYXRlIHJlbGV2YW50IEFXUyByZXNvdXJjZXMgaW50byB0aGUgY3VzdG9tZXIncyBBV1MgYWNjb3VudCBmb3IgbGF1bmNoaW5nIG1pZ3JhdGVkIHNlcnZlcnMgYW5kIGFwcGxpY2F0aW9ucy4gKi9cbiAgICBwdWJsaWMgU2VydmVyTWlncmF0aW9uU2VydmljZUxhdW5jaFJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VydmVyTWlncmF0aW9uU2VydmljZUxhdW5jaFJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyB0byBhbGxvdyB0aGUgQVdTIFNNUyB0byBydW4gdXNlZCBkYXRhIHZhbGlkYXRpb24gc2NyaXB0IGFuZCBzZW5kIHNjcmlwdCBzdWNjZXNzL2ZhaWx1cmUgYmFjayB0byBTTVMgKi9cbiAgICBwdWJsaWMgU2VydmVyTWlncmF0aW9uU2VydmljZVJvbGVGb3JJbnN0YW5jZVZhbGlkYXRpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VydmVyTWlncmF0aW9uU2VydmljZVJvbGVGb3JJbnN0YW5jZVZhbGlkYXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBTZXJ2aWNlIFF1b3RhcyAqL1xuICAgIHB1YmxpYyBTZXJ2aWNlUXVvdGFzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZXJ2aWNlUXVvdGFzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gU2VydmljZSBRdW90YXMgKi9cbiAgICBwdWJsaWMgU2VydmljZVF1b3Rhc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNlcnZpY2VRdW90YXNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBTZXJ2aWNlIFF1b3RhcyB0byBjcmVhdGUgc3VwcG9ydCBjYXNlcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBTZXJ2aWNlUXVvdGFzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VydmljZVF1b3Rhc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIFNpbXBsZSBXb3JrZmxvdyBjb25maWd1cmF0aW9uIHNlcnZpY2UuICovXG4gICAgcHVibGljIFNpbXBsZVdvcmtmbG93RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TaW1wbGVXb3JrZmxvd0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgU01TVm9pY2UgdG8gcHVibGlzaCBtZXRyaWNzIHRvIENsb3VkV2F0Y2ggb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgU01TVm9pY2VTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TTVNWb2ljZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHNwbGl0IGNvc3QgYWxsb2NhdGlvbiBkYXRhIHRvIHJldHJpZXZlIEFXUyBPcmdhbml6YXRpb25zIGluZm9ybWF0aW9uLCBpZiBhcHBsaWNhYmxlLCBhbmQgY29sbGVjdCB0ZWxlbWV0cnkgZGF0YSBmb3IgdGhlIHNwbGl0IGNvc3QgYWxsb2NhdGlvbiBkYXRhIHNlcnZpY2VzIHRoYXQgdGhlIGN1c3RvbWVyIGhhcyBvcHRlZCBpbiB0by4gKi9cbiAgICBwdWJsaWMgU3BsaXRDb3N0QWxsb2NhdGlvbkRhdGFTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TcGxpdENvc3RBbGxvY2F0aW9uRGF0YVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHJlcXVpcmVkIHRvIHVubG9jayBhIFNRUyBxdWV1ZSBwb2xpY3kgdXNpbmcgdGhlIFNlY3VyaXR5IFRva2VuIFNlcnZpY2UgKFNUUykgQXNzdW1lUm9vdCBBUEkuIFVzZSB0aGlzIG1hbmFnZWQgcG9saWN5IG9ubHkgd2l0aCB0aGUgU1RTIEFzc3VtZVJvb3QgYWN0aW9uLiAqL1xuICAgIHB1YmxpYyBTUVNVbmxvY2tRdWV1ZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TUVNVbmxvY2tRdWV1ZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGNoZWNrIFF1aWNrIFNldHVwIGNvbmZpZ3VyYXRpb24gaGVhbHRoLCBlbnN1cmUgY29uc2lzdGVudCB1c2Ugb2YgcGFyYW1ldGVycyBhbmQgcHJvdmlzaW9uZWQgcmVzb3VyY2VzLCBhbmQgcmVtZWRpYXRlIHJlc291cmNlcyB3aGVuIGRyaWZ0IGlzIGRldGVjdGVkLiAqL1xuICAgIHB1YmxpYyBTU01RdWlja1NldHVwUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TU01RdWlja1NldHVwUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byB0cm91Ymxlc2hvb3QgYW5kIHJlc29sdmUgaXNzdWVzIGluIGFuIEFXUyBhY2NvdW50LiBUaGlzIHBvbGljeSBhbHNvIGVuYWJsZXMgdGhlIHVzZXIgdG8gY29udGFjdCBBV1Mgc3VwcG9ydCB0byBjcmVhdGUgYW5kIG1hbmFnZSBjYXNlcy4gKi9cbiAgICBwdWJsaWMgU3VwcG9ydFVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU3VwcG9ydFVzZXIpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgcGVybWlzc2lvbnMgbmVjZXNzYXJ5IGZvciByZXNvdXJjZXMgcmVxdWlyZWQgZm9yIGFwcGxpY2F0aW9uIGFuZCBkZXZlbG9wbWVudCBvcGVyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBTeXN0ZW1BZG1pbmlzdHJhdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlN5c3RlbUFkbWluaXN0cmF0b3IpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gVHJhbnNsYXRlLiAqL1xuICAgIHB1YmxpYyBUcmFuc2xhdGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlRyYW5zbGF0ZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBUcmFuc2xhdGUuICovXG4gICAgcHVibGljIFRyYW5zbGF0ZVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlRyYW5zbGF0ZVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHZpZXcgcmVzb3VyY2VzIGFuZCBiYXNpYyBtZXRhZGF0YSBhY3Jvc3MgYWxsIEFXUyBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgVmlld09ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuVmlld09ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIFZNIEltcG9ydC9FeHBvcnQgc2VydmljZSByb2xlLCBmb3IgY3VzdG9tZXJzIHVzaW5nIHRoZSBBV1MgQ29ubmVjdG9yLiBUaGUgVk0gSW1wb3J0L0V4cG9ydCBzZXJ2aWNlIGFzc3VtZXMgYSByb2xlIHdpdGggdGhpcyBwb2xpY3kgdG8gZnVsZmlsbCB2aXJ0dWFsIG1hY2hpbmUgbWlncmF0aW9uIHJlcXVlc3RzIGZyb20gdGhlIEFXUyBDb25uZWN0b3IgdmlydHVhbCBhcHBsaWFuY2UuIChOb3RlIHRoYXQgdGhlIEFXUyBDb25uZWN0b3IgdXNlcyB0aGUgXCJBV1NDb25uZWN0b3JcIiBtYW5hZ2VkIHBvbGljeSB0byBpc3N1ZSByZXF1ZXN0cyBvbiB0aGUgY3VzdG9tZXIncyBiZWhhbGYgdG8gdGhlIFZNIEltcG9ydC9FeHBvcnQgc2VydmljZS4pIFByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBBTUlzIGFuZCBFQlMgc25hcHNob3RzLCBtb2RpZnkgRUJTIHNuYXBzaG90IGF0dHJpYnV0ZXMsIG1ha2UgXCJEZXNjcmliZSpcIiBjYWxscyBvbiBFQzIgb2JqZWN0cywgYW5kIHJlYWQgZnJvbSBTMyBidWNrZXRzIHN0YXJ0aW5nIHdpdGggJ2ltcG9ydC10by1lYzItJy4gKi9cbiAgICBwdWJsaWMgVk1JbXBvcnRFeHBvcnRSb2xlRm9yQVdTQ29ubmVjdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlZNSW1wb3J0RXhwb3J0Um9sZUZvckFXU0Nvbm5lY3Rvcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBWUEMgTGF0dGljZSBhbmQgYWNjZXNzIHRvIGRlcGVuZGVuY3kgc2VydmljZXMuICovXG4gICAgcHVibGljIFZQQ0xhdHRpY2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlZQQ0xhdHRpY2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gVlBDIExhdHRpY2UgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLCBhbmQgbGltaXRlZCBhY2Nlc3MgdG8gZGVwZW5kZW5jeSBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgVlBDTGF0dGljZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlZQQ0xhdHRpY2VSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBpbnZva2luZyBBbWF6b24gVlBDIExhdHRpY2Ugc2VydmljZXMuICovXG4gICAgcHVibGljIFZQQ0xhdHRpY2VTZXJ2aWNlc0ludm9rZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5WUENMYXR0aWNlU2VydmljZXNJbnZva2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGluZyBTTFIgdG8gd3JpdGUgY3VzdG9tZXIncyBsb2dzIHRvIGEgZmlyZWhvc2Ugc3RyZWFtICovXG4gICAgcHVibGljIFdBRkxvZ2dpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5XQUZMb2dnaW5nU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGluZyBTTFIgdG8gd3JpdGUgY3VzdG9tZXIncyBsb2dzIHRvIGEgZmlyZWhvc2Ugc3RyZWFtICovXG4gICAgcHVibGljIFdBRlJlZ2lvbmFsTG9nZ2luZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLldBRlJlZ2lvbmFsTG9nZ2luZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgY3JlYXRlcyBhIHNlcnZpY2UtbGlua2VkIHJvbGUgdGhhdCBhbGxvd3MgQVdTIFdBRiB0byB3cml0ZSBsb2dzIHRvIEFtYXpvbiBLaW5lc2lzIERhdGEgRmlyZWhvc2UuICovXG4gICAgcHVibGljIFdBRlYyTG9nZ2luZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLldBRlYyTG9nZ2luZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFdlbGwtQXJjaGl0ZWN0ZWQgVG9vbCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgKi9cbiAgICBwdWJsaWMgV2VsbEFyY2hpdGVjdGVkQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuV2VsbEFyY2hpdGVjdGVkQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBXZWxsLUFyY2hpdGVjdGVkIFRvb2wgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlICovXG4gICAgcHVibGljIFdlbGxBcmNoaXRlY3RlZENvbnNvbGVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5XZWxsQXJjaGl0ZWN0ZWRDb25zb2xlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIFdvcmtMaW5rICovXG4gICAgcHVibGljIFdvcmtMaW5rU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuV29ya0xpbmtTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxufVxuIl19
|
|
5752
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWlhbS1mbG95ZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1pYW0tZmxveWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXNDO0FBQ3RDLDJDQUF5RTtBQUV6RTs7Ozs7O0dBTUc7QUFDSCxNQUFhLGdCQUFpQixTQUFRLDRCQUFzQjtJQUN4RCx5REFBeUQ7SUFDbEQsK0JBQStCO1FBQ2xDLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsNEJBQXNCLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUNsSCxDQUFDO0lBRUQsMERBQTBEO0lBQ25ELG1CQUFtQjtRQUN0QixPQUFPLHFCQUFPLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDRCQUFzQixDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDdEcsQ0FBQztJQUVELHFJQUFxSTtJQUM5SCwwQkFBMEI7UUFDN0IsT0FBTyxxQkFBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyw0QkFBc0IsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFFRCwyTEFBMkw7SUFDcEwsc0NBQXNDO1FBQ3pDLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsNEJBQXNCLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUN6SCxDQUFDO0lBRUQsNEhBQTRIO0lBQ3JILGtDQUFrQztRQUNyQyxPQUFPLHFCQUFPLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDRCQUFzQixDQUFDLGtDQUFrQyxDQUFDLENBQUM7SUFDckgsQ0FBQztJQUVELG1KQUFtSjtJQUM1SSxvQkFBb0I7UUFDdkIsT0FBTyxxQkFBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyw0QkFBc0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3ZHLENBQUM7SUFFRCw0S0FBNEs7SUFDckssdUJBQXVCO1FBQzFCLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdC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LGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyw0QkFBc0IsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBQ2pILENBQUM7SUFFRCxpRUFBaUU7SUFDMUQsMkJBQTJCO1FBQzlCLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsNEJBQXNCLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUM5RyxDQUFDO0lBRUQsaUVBQWlFO0lBQzFELG1DQUFtQztRQUN0QyxPQUFPLHFCQUFPLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDRCQUFzQixDQUFDLG1DQUFtQyxDQUFDLENBQUM7SUFDdEgsQ0FBQztJQUVELG1IQUFtSDtJQUM1Ryw2QkFBNkI7UUFDaEMsT0FBTyxxQkFBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyw0QkFBc0IsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ2hILENBQUM7SUFFRCx1RkFBdUY7SUFDaEYsZ0NBQWdDO1FBQ25DLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsNEJBQXNCLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUNuSCxDQUFDO0lBRUQsNEZBQTRGO0lBQ3JGLG9DQUFvQztRQUN2QyxPQUFPLHFCQUFPLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDRCQUFzQixDQUFDLG9DQUFvQyxDQUFDLENBQUM7SUFDdkgsQ0FBQztJQUVELHNGQUFzRjtJQUMvRSx5QkFBeUI7UUFDNUIsT0FBTyxxQkFBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyw0QkFBc0IsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzVHLENBQUM7Q0FDSjtBQWxnT0QsNENBa2dPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF3c19pYW0gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBBd3NNYW5hZ2VkUG9saWN5IGFzIEF3c01hbmFnZWRQb2xpY3lTdGF0aWMgfSBmcm9tICcuL2lhbS1mbG95ZCc7XG5cbi8qKlxuICogUHJvdmlkZXMgYWxsIEFXUyBtYW5hZ2VkIHBvbGljaWVzLlxuICpcbiAqIFRvIGdldCB0aGUgbmFtZSwgYWNjZXNzIHRoZSBzdGF0aWMgcHJvcGVydGllcyBvZiB0aGlzIGNsYXNzLCBlLmcuIGBBd3NNYW5hZ2VkUG9saWN5LlJlYWRPbmx5QWNjZXNzYC5cbiAqXG4gKiAgVG8gZ2V0IGFuIGBhd3NfaWFtLklNYW5hZ2VkUG9saWN5YCBvYmplY3QsIGNhbGwgdGhlIG1ldGhvZHMgb24gYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzLCBlLmcuIGBuZXcgQXdzTWFuYWdlZFBvbGljeSgpLlJlYWRPbmx5QWNjZXNzKClgLlxuICovXG5leHBvcnQgY2xhc3MgQXdzTWFuYWdlZFBvbGljeSBleHRlbmRzIEF3c01hbmFnZWRQb2xpY3lTdGF0aWMge1xuICAgIC8qKiBBbGxvdyBBY2Nlc3MgQW5hbHl6ZXIgdG8gYW5hbHl6ZSByZXNvdXJjZSBtZXRhZGF0YSAqL1xuICAgIHB1YmxpYyBBY2Nlc3NBbmFseXplclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFjY2Vzc0FuYWx5emVyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1Mgc2VydmljZXMgYW5kIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQWRtaW5pc3RyYXRvckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BZG1pbmlzdHJhdG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGFjY291bnQgYWRtaW5pc3RyYXRpdmUgcGVybWlzc2lvbnMgd2hpbGUgZXhwbGljaXRseSBhbGxvd2luZyBkaXJlY3QgYWNjZXNzIHRvIHJlc291cmNlcyBuZWVkZWQgYnkgQW1wbGlmeSBhcHBsaWNhdGlvbnMuICovXG4gICAgcHVibGljIEFkbWluaXN0cmF0b3JBY2Nlc3NBbXBsaWZ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFkbWluaXN0cmF0b3JBY2Nlc3NBbXBsaWZ5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGFjY291bnQgYWRtaW5pc3RyYXRpdmUgcGVybWlzc2lvbnMuIEV4cGxpY2l0bHkgYWxsb3dzIGRldmVsb3BlcnMgYW5kIGFkbWluaXN0cmF0b3JzIHRvIGdhaW4gZGlyZWN0IGFjY2VzcyB0byByZXNvdXJjZXMgdGhleSBuZWVkIHRvIG1hbmFnZSBBV1MgRWxhc3RpYyBCZWFuc3RhbGsgYXBwbGljYXRpb25zICovXG4gICAgcHVibGljIEFkbWluaXN0cmF0b3JBY2Nlc3NBV1NFbGFzdGljQmVhbnN0YWxrKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFkbWluaXN0cmF0b3JBY2Nlc3NBV1NFbGFzdGljQmVhbnN0YWxrKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEFtYXpvbiBBSSBPcGVyYXRpb25zIEFzc2lzdGFudCB0byBnZW5lcmF0ZSBpbmNpZGVudCByZXBvcnQgb2YgdGhlIGludmVzdGlnYXRpb24uICovXG4gICAgcHVibGljIEFJT3BzQXNzaXN0YW50SW5jaWRlbnRSZXBvcnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQUlPcHNBc3Npc3RhbnRJbmNpZGVudFJlcG9ydFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIFJlYWRPbmx5IHBlcm1pc3Npb25zIHJlcXVpcmVkIGJ5IHRoZSBBbWF6b24gQUkgT3BlcmF0aW9ucyBBc3Npc3RhbnQgdG8gZG8gYW5hbHlzaXMgb24gY3VzdG9tZXIgQVdTIHJlc291cmNlcyBkdXJpbmcgaW52ZXN0aWdhdGlvbnMuICovXG4gICAgcHVibGljIEFJT3BzQXNzaXN0YW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFJT3BzQXNzaXN0YW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBBSSBPcGVyYXRpb25zIHNlcnZpY2UgYW5kIGl0cyByZXF1aXJlZCBwZXJtaXNzaW9ucyB2aWEgQVdTIGNvbnNvbGUuIEl0IGFsc28gaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gdXNlIGlkZW50aXR5LWF3YXJlIGNvbnNvbGUgc2Vzc2lvbnMuICovXG4gICAgcHVibGljIEFJT3BzQ29uc29sZUFkbWluUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFJT3BzQ29uc29sZUFkbWluUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGFjY2VzcyB0byB0aGUgQW1hem9uIEFJIE9wZXJhdGlvbnMgQVBJcyBmb3IgY3JlYXRpbmcsIHVwZGF0aW5nLCBhbmQgZGVsZXRpbmcgaW52ZXN0aWdhdGlvbnMsIGludmVzdGlnYXRpb24gZXZlbnRzLCBhbmQgaW52ZXN0aWdhdGlvbiByZXNvdXJjZXMuIEl0IGFsc28gaW5jbHVkZXMgUmVhZE9ubHkgYWNjZXNzIHRvIGFsbCBBSSBPcGVyYXRpb25zIEFQSXMgYW5kIHRvIHVzZSBpZGVudGl0eS1hd2FyZSBzZXNzaW9ucy4gKi9cbiAgICBwdWJsaWMgQUlPcHNPcGVyYXRvckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BSU9wc09wZXJhdG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIFJlYWRPbmx5IHBlcm1pc3Npb25zIHRvIHRoZSBBbWF6b24gQUkgT3BlcmF0aW9ucyBzZXJ2aWNlIGFuZCBpdHMgcmVxdWlyZWQgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBSU9wc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFJT3BzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIGRldmljZSBzZXR1cCBhY2Nlc3MgdG8gQWxleGFGb3JCdXNpbmVzcyBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBbGV4YUZvckJ1c2luZXNzRGV2aWNlU2V0dXAoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQWxleGFGb3JCdXNpbmVzc0RldmljZVNldHVwKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFsZXhhRm9yQnVzaW5lc3MgcmVzb3VyY2VzIGFuZCBhY2Nlc3MgdG8gcmVsYXRlZCBBV1MgU2VydmljZXMgKi9cbiAgICBwdWJsaWMgQWxleGFGb3JCdXNpbmVzc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQWxleGFGb3JCdXNpbmVzc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIGdhdGV3YXkgZXhlY3V0aW9uIGFjY2VzcyB0byBBbGV4YUZvckJ1c2luZXNzIHNlcnZpY2VzICovXG4gICAgcHVibGljIEFsZXhhRm9yQnVzaW5lc3NHYXRld2F5RXhlY3V0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFsZXhhRm9yQnVzaW5lc3NHYXRld2F5RXhlY3V0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBhY2Nlc3MgdG8gTGlmZXNpemUgQVZTIGRldmljZXMgKi9cbiAgICBwdWJsaWMgQWxleGFGb3JCdXNpbmVzc0xpZmVzaXplRGVsZWdhdGVkQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFsZXhhRm9yQnVzaW5lc3NMaWZlc2l6ZURlbGVnYXRlZEFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGVuYWJsZXMgQWxleGEgZm9yIEJ1c2luZXNzIHRvIHBlcmZvcm0gYXV0b21hdGVkIHRhc2tzIHNjaGVkdWxlZCBieSB5b3VyIG5ldHdvcmsgcHJvZmlsZXMuICovXG4gICAgcHVibGljIEFsZXhhRm9yQnVzaW5lc3NOZXR3b3JrUHJvZmlsZVNlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQWxleGFGb3JCdXNpbmVzc05ldHdvcmtQcm9maWxlU2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgYWNjZXNzIHRvIFBvbHkgQVZTIGRldmljZXMgKi9cbiAgICBwdWJsaWMgQWxleGFGb3JCdXNpbmVzc1BvbHlEZWxlZ2F0ZWRBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQWxleGFGb3JCdXNpbmVzc1BvbHlEZWxlZ2F0ZWRBY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHJlYWQgb25seSBhY2Nlc3MgdG8gQWxleGFGb3JCdXNpbmVzcyBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBbGV4YUZvckJ1c2luZXNzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQWxleGFGb3JCdXNpbmVzc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gY3JlYXRlL2VkaXQvZGVsZXRlIEFQSXMgaW4gQW1hem9uIEFQSSBHYXRld2F5IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQVBJR2F0ZXdheUFkbWluaXN0cmF0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQVBJR2F0ZXdheUFkbWluaXN0cmF0b3IpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBpbnZva2UgQVBJcyBpbiBBbWF6b24gQVBJIEdhdGV3YXkuICovXG4gICAgcHVibGljIEFtYXpvbkFQSUdhdGV3YXlJbnZva2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFQSUdhdGV3YXlJbnZva2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFQSSBHYXRld2F5IHRvIHB1c2ggbG9ncyB0byB1c2VyJ3MgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uQVBJR2F0ZXdheVB1c2hUb0Nsb3VkV2F0Y2hMb2dzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFQSUdhdGV3YXlQdXNoVG9DbG91ZFdhdGNoTG9ncyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBBcHBGbG93IGFuZCBhY2Nlc3MgdG8gQVdTIHNlcnZpY2VzIHN1cHBvcnRlZCBhcyBmbG93IHNvdXJjZSBvciBkZXN0aW5hdGlvbiAoUzMgYW5kIFJlZHNoaWZ0KS4gQWxzbyBwcm92aWRlcyBhY2Nlc3MgdG8gS01TIGZvciBlbmNyeXB0aW9uICovXG4gICAgcHVibGljIEFtYXpvbkFwcEZsb3dGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFwcEZsb3dGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQXBwZmxvdyBmbG93cyAqL1xuICAgIHB1YmxpYyBBbWF6b25BcHBGbG93UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXBwRmxvd1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIEFSQyBSZWdpb24gc3dpdGNoIGZvciBwbGFuIGV4ZWN1dGlvbiBhbmQgcGxhbiBldmFsdWF0aW9uLiAqL1xuICAgIHB1YmxpYyBBbWF6b25BcHBsaWNhdGlvblJlY292ZXJ5Q29udHJvbGxlclJlZ2lvblN3aXRjaFBsYW5FeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXBwbGljYXRpb25SZWNvdmVyeUNvbnRyb2xsZXJSZWdpb25Td2l0Y2hQbGFuRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEFwcFN0cmVhbSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkFwcFN0cmVhbUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXBwU3RyZWFtRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBBcHBTdHJlYW0gMi4wIGFjY2VzcyB0byBBV1MgQ2VydGlmaWNhdGUgTWFuYWdlciBQcml2YXRlIENBIGluIGN1c3RvbWVyIGFjY291bnRzIGZvciBjZXJ0aWZpY2F0ZS1iYXNlZCBhdXRoZW50aWNhdGlvbiAqL1xuICAgIHB1YmxpYyBBbWF6b25BcHBTdHJlYW1QQ0FBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXBwU3RyZWFtUENBQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQXBwU3RyZWFtIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQXBwU3RyZWFtUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXBwU3RyZWFtUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgQW1hem9uIEFwcFN0cmVhbSBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkFwcFN0cmVhbVNlcnZpY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXBwU3RyZWFtU2VydmljZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEF0aGVuYSBhbmQgc2NvcGVkIGFjY2VzcyB0byB0aGUgZGVwZW5kZW5jaWVzIG5lZWRlZCB0byBlbmFibGUgcXVlcnlpbmcsIHdyaXRpbmcgcmVzdWx0cywgYW5kIGRhdGEgbWFuYWdlbWVudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uQXRoZW5hRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25BdGhlbmFGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFjY2VzcyB0byBvdGhlciBBV1Mgc2VydmljZSByZXNvdXJjZXMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gcnVuIEFtYXpvbiBBdGhlbmEgKi9cbiAgICBwdWJsaWMgQW1hem9uQXRoZW5hU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXRoZW5hU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gcGVyZm9ybSBhbGwgb3BlcmF0aW9ucyBBbWF6b24gQXVnbWVudGVkIEFJIHJlc291cmNlcywgaW5jbHVkaW5nIEZsb3dEZWZpbml0aW9ucywgSHVtYW5UYXNrVWlzIGFuZCBIdW1hbkxvb3BzLiBEb2VzIG5vdCBhbGxvdyBhY2Nlc3MgZm9yIGNyZWF0aW5nIEZsb3dEZWZpbml0aW9ucyBhZ2FpbnN0IHRoZSBwdWJsaWMtY3Jvd2QgV29ya3RlYW0uICovXG4gICAgcHVibGljIEFtYXpvbkF1Z21lbnRlZEFJRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25BdWdtZW50ZWRBSUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gcGVyZm9ybSBhbGwgb3BlcmF0aW9ucyBvbiBIdW1hbkxvb3BzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25BdWdtZW50ZWRBSUh1bWFuTG9vcEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXVnbWVudGVkQUlIdW1hbkxvb3BGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHBlcmZvcm0gYWxsIG9wZXJhdGlvbnMgQW1hem9uIEF1Z21lbnRlZCBBSSByZXNvdXJjZXMsIGluY2x1ZGluZyBGbG93RGVmaW5pdGlvbnMsIEh1bWFuVGFza1VpcyBhbmQgSHVtYW5Mb29wcy4gQWxzbyBwcm92aWRlcyBhY2Nlc3MgdG8gdGhvc2Ugb3BlcmF0aW9ucyBvZiBzZXJ2aWNlcyB0aGF0IGFyZSBpbnRlZ3JhdGVkIHdpdGggQW1hem9uIEF1Z21lbnRlZCBBSS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQXVnbWVudGVkQUlJbnRlZ3JhdGVkQVBJQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkF1Z21lbnRlZEFJSW50ZWdyYXRlZEFQSUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGNvbnNvbGUgZnVsbCBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgdG8gQXVyb3JhIERTUUwgKi9cbiAgICBwdWJsaWMgQW1hem9uQXVyb3JhRFNRTENvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkF1cm9yYURTUUxDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEF1cm9yYSBEU1FMICovXG4gICAgcHVibGljIEFtYXpvbkF1cm9yYURTUUxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkF1cm9yYURTUUxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBdXJvcmEgRFNRTCAqL1xuICAgIHB1YmxpYyBBbWF6b25BdXJvcmFEU1FMUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXVyb3JhRFNRTFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQmVkcm9jayBNb2RlbCBpbmZlcmVuY2UgcGVybWlzc2lvbiB0byBCZWRyb2NrIGFnZW50IGNvcmUgbWVtb3J5ICovXG4gICAgcHVibGljIEFtYXpvbkJlZHJvY2tBZ2VudENvcmVNZW1vcnlCZWRyb2NrTW9kZWxJbmZlcmVuY2VFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJlZHJvY2tBZ2VudENvcmVNZW1vcnlCZWRyb2NrTW9kZWxJbmZlcmVuY2VFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEJlZHJvY2sgYXMgd2VsbCBhcyBsaW1pdGVkIGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIHRoYXQgYXJlIHJlcXVpcmVkIGJ5IGl0ICovXG4gICAgcHVibGljIEFtYXpvbkJlZHJvY2tGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJlZHJvY2tGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbGltaXRlZCBhY2Nlc3MgdG8gQW1hem9uIEJlZHJvY2sgYXMgd2VsbCBhcyB0byByZWxhdGVkIHNlcnZpY2VzIHRoYXQgYXJlIHJlcXVpcmVkIGJ5IGl0ICovXG4gICAgcHVibGljIEFtYXpvbkJlZHJvY2tMaW1pdGVkQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJlZHJvY2tMaW1pdGVkQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEJlZHJvY2sgTWFudGxlIGFzIHdlbGwgYXMgbGltaXRlZCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyB0aGF0IGFyZSByZXF1aXJlZCBieSBpdCAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrTWFudGxlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrTWFudGxlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgYW5kIGluZmVyZW5jZSBjcmVhdGlvbiBhY2Nlc3MgdG8gQW1hem9uIEJlZHJvY2sgTWFudGxlICovXG4gICAgcHVibGljIEFtYXpvbkJlZHJvY2tNYW50bGVJbmZlcmVuY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQmVkcm9ja01hbnRsZUluZmVyZW5jZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEJlZHJvY2sgTWFudGxlICovXG4gICAgcHVibGljIEFtYXpvbkJlZHJvY2tNYW50bGVSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrTWFudGxlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBsaW1pdGVkIGFjY2VzcyB0byBBbWF6b24gQmVkcm9jayBNYXJrZXRwbGFjZSBhcyB3ZWxsIGFzIHRvIHJlbGF0ZWQgc2VydmljZXMgdGhhdCBhcmUgcmVxdWlyZWQgYnkgaXQgKi9cbiAgICBwdWJsaWMgQW1hem9uQmVkcm9ja01hcmtldHBsYWNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJlZHJvY2tNYXJrZXRwbGFjZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEJlZHJvY2sgKi9cbiAgICBwdWJsaWMgQW1hem9uQmVkcm9ja1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJlZHJvY2tSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIERlZmluZXMgdGhlIG1heGltdW0gcGVybWlzc2lvbnMgb2YgSUFNIHJvbGVzIHRoYXQgQW1hem9uIEJlZHJvY2sgU3R1ZGlvIGNyZWF0ZXMgZm9yIG9wZXJhdGluZyBBbWF6b24gQmVkcm9jayBTdHVkaW8gcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrU3R1ZGlvUGVybWlzc2lvbnNCb3VuZGFyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrU3R1ZGlvUGVybWlzc2lvbnNCb3VuZGFyeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBCcmFrZXQgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuIEFsc28gcHJvdmlkZXMgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgKGUuZy4sIFMzLCBsb2dzKS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQnJha2V0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CcmFrZXRGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIHJlc291cmNlcyBuZWNlc3NhcnkgZm9yIGV4ZWN1dGluZyBhbiBBbWF6b24gQnJha2V0IEpvYiBpbmNsdWRpbmcgUzMsIENsb3Vkd2F0Y2gsIElBTSBhbmQgQnJha2V0ICovXG4gICAgcHVibGljIEFtYXpvbkJyYWtldEpvYnNFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQnJha2V0Sm9ic0V4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gQnJha2V0IHRvIGNyZWF0ZSBhbmQgbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQW1hem9uQnJha2V0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQnJha2V0U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQ2hpbWUgQWRtaW4gQ29uc29sZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkNoaW1lRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DaGltZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBDaGltZSBBZG1pbiBDb25zb2xlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ2hpbWVSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DaGltZVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFtYXpvbiBDaGltZSBTREsgb3BlcmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBbWF6b25DaGltZVNESygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DaGltZVNESyk7XG4gICAgfVxuXG4gICAgLyoqIE1hbmFnZWQgUG9saWN5IEZvciBBbWF6b24gQ2hpbWUgU0RLIE1lZGlhUGlwZWxpbmVzIFNlcnZpY2UgTGlua2VkIFJvbGUgKi9cbiAgICBwdWJsaWMgQW1hem9uQ2hpbWVTREtNZWRpYVBpcGVsaW5lc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNoaW1lU0RLTWVkaWFQaXBlbGluZXNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gQ2hpbWUgU0RLIE1lc3NhZ2luZyB0byBhY2Nlc3MgQVdTIHJlc291cmNlcyBhbmQgZW5hYmxlIG1lc3NhZ2luZyBmdW5jdGlvbmFsaXR5ICovXG4gICAgcHVibGljIEFtYXpvbkNoaW1lU0RLTWVzc2FnaW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2hpbWVTREtNZXNzYWdpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFtYXpvbiBDaGltZSAqL1xuICAgIHB1YmxpYyBBbWF6b25DaGltZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNoaW1lU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIENoaW1lIHRvIGFjY2VzcyBBbWF6b24gVHJhbnNjcmliZSBhbmQgQW1hem9uIFRyYW5zY3JpYmUgTWVkaWNhbCBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBbWF6b25DaGltZVRyYW5zY3JpcHRpb25TZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DaGltZVRyYW5zY3JpcHRpb25TZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHVzZXIgbWFuYWdlbWVudCBhY2Nlc3MgdG8gQW1hem9uIENoaW1lIEFkbWluIENvbnNvbGUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25DaGltZVVzZXJNYW5hZ2VtZW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNoaW1lVXNlck1hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBNYW5hZ2VkIHBvbGljeSBmb3IgU2VydmljZSBMaW5rZWQgUm9sZSBmb3IgQW1hem9uIENoaW1lIFZvaWNlQ29ubmVjdG9yICovXG4gICAgcHVibGljIEFtYXpvbkNoaW1lVm9pY2VDb25uZWN0b3JTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DaGltZVZvaWNlQ29ubmVjdG9yU2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQ2xvdWQgRGlyZWN0b3J5IFNlcnZpY2UuICovXG4gICAgcHVibGljIEFtYXpvbkNsb3VkRGlyZWN0b3J5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DbG91ZERpcmVjdG9yeUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBDbG91ZCBEaXJlY3RvcnkgU2VydmljZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ2xvdWREaXJlY3RvcnlSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DbG91ZERpcmVjdG9yeVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQ2xvdWRXYXRjaCBFdmlkZW50bHkuIEFsc28gcHJvdmlkZXMgYWNjZXNzIHRvIHJlbGF0ZWQgQW1hem9uIFMzLCBBbWF6b24gU05TLCBBbWF6b24gQ2xvdWRXYXRjaCwgYW5kIG90aGVyIHJlbGF0ZWQgc2VydmljZXMuICovXG4gICAgcHVibGljIEFtYXpvbkNsb3VkV2F0Y2hFdmlkZW50bHlGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNsb3VkV2F0Y2hFdmlkZW50bHlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQ2xvdWRXYXRjaCBFdmlkZW50bHkgKi9cbiAgICBwdWJsaWMgQW1hem9uQ2xvdWRXYXRjaEV2aWRlbnRseVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNsb3VkV2F0Y2hFdmlkZW50bHlSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBDbG91ZFdhdGNoIEV2aWRlbnRseSBTZXJ2aWNlIHRvIG1hbmFnZSBhc3NvY2lhdGVkIEFXUyBSZXNvdXJjZXMgb24gYmVoYWxmIG9mIHRoZSBjdXN0b21lciAqL1xuICAgIHB1YmxpYyBBbWF6b25DbG91ZFdhdGNoRXZpZGVudGx5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2xvdWRXYXRjaEV2aWRlbnRseVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHBlcm1pc3Npb25zIGZvciB0aGUgQW1hem9uIENsb3VkV2F0Y2ggUlVNIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQW1hem9uQ2xvdWRXYXRjaFJVTUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2xvdWRXYXRjaFJVTUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcmVhZCBvbmx5IHBlcm1pc3Npb25zIGZvciB0aGUgQW1hem9uIENsb3VkV2F0Y2ggUlVNIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQW1hem9uQ2xvdWRXYXRjaFJVTVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNsb3VkV2F0Y2hSVU1SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9uIHRvIEFtYXpvbiBDbG91ZFdhdGNoIFJVTSBTZXJ2aWNlIHRvIHB1Ymxpc2ggbW9uaXRvcmluZyBkYXRhIHRvIG90aGVyIHJlbGV2YW50IEFXUyBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25DbG91ZFdhdGNoUlVNU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2xvdWRXYXRjaFJVTVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIENvZGVDYXRhbHlzdCAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2RlQ2F0YWx5c3RGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZGVDYXRhbHlzdEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBDb2RlQ2F0YWx5c3QgKi9cbiAgICBwdWJsaWMgQW1hem9uQ29kZUNhdGFseXN0UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29kZUNhdGFseXN0UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIENvZGVDYXRhbHlzdCB0byBjcmVhdGUsIHVwZGF0ZSwgYW5kIHJlc29sdmUgQVdTIFN1cHBvcnQgY2FzZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVDYXRhbHlzdFN1cHBvcnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29kZUNhdGFseXN0U3VwcG9ydEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyByZXF1aXJlZCBieSBBbWF6b24gQ29kZUd1cnUgUHJvZmlsZXIgYWdlbnQuICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVHdXJ1UHJvZmlsZXJBZ2VudEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2RlR3VydVByb2ZpbGVyQWdlbnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQ29kZUd1cnUgUHJvZmlsZXIuICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVHdXJ1UHJvZmlsZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZGVHdXJ1UHJvZmlsZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQ29kZUd1cnUgUHJvZmlsZXIuICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVHdXJ1UHJvZmlsZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2RlR3VydVByb2ZpbGVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIENvZGVHdXJ1IFJldmlld2VyIGFuZCBzY29wZWQgYWNjZXNzIHRvIHJlcXVpcmVkIGRlcGVuZGVuY2llcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29kZUd1cnVSZXZpZXdlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29kZUd1cnVSZXZpZXdlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBDb2RlR3VydSBSZXZpZXdlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29kZUd1cnVSZXZpZXdlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZGVHdXJ1UmV2aWV3ZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEEgc2VydmljZS1saW5rZWQgcm9sZSByZXF1aXJlZCBmb3IgQW1hem9uIENvZGVHdXJ1IFJldmlld2VyIHRvIGFjY2VzcyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVHdXJ1UmV2aWV3ZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2RlR3VydVJldmlld2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQ29kZUd1cnUgU2VjdXJpdHkuICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVHdXJ1U2VjdXJpdHlGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZGVHdXJ1U2VjdXJpdHlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHJlcXVpcmVkIGZvciB3b3JraW5nIHdpdGggQW1hem9uIENvZGVHdXJ1IFNlY3VyaXR5IHNjYW5zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2RlR3VydVNlY3VyaXR5U2NhbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2RlR3VydVNlY3VyaXR5U2NhbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gQ29nbml0byBBUElzIHRvIHN1cHBvcnQgZGV2ZWxvcGVyIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdGllcyBmcm9tIHlvdXIgYXV0aGVudGljYXRpb24gYmFja2VuZC4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29nbml0b0RldmVsb3BlckF1dGhlbnRpY2F0ZWRJZGVudGl0aWVzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZ25pdG9EZXZlbG9wZXJBdXRoZW50aWNhdGVkSWRlbnRpdGllcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gQ29nbml0byBVc2VyIFBvb2xzIHNlcnZpY2UgdG8gdXNlIHlvdXIgU0VTIGlkZW50aXRpZXMgZm9yIGVtYWlsIHNlbmRpbmcgKi9cbiAgICBwdWJsaWMgQW1hem9uQ29nbml0b0lkcEVtYWlsU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29nbml0b0lkcEVtYWlsU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIENvZ25pdG8gVXNlciBQb29scyAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2duaXRvSWRwU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29nbml0b0lkcFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIGV4aXN0aW5nIEFtYXpvbiBDb2duaXRvIHJlc291cmNlcy4gWW91IHdpbGwgbmVlZCBBV1MgYWNjb3VudCBhZG1pbiBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBuZXcgQ29nbml0byByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbkNvZ25pdG9Qb3dlclVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29nbml0b1Bvd2VyVXNlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIENvZ25pdG8gcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2duaXRvUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29nbml0b1JlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZGVmaW5lcyB0aGUgc2V0IG9mIHBlcm1pc3Npb25zIGFsbG93ZWQgZm9yIHVuYXV0aGVudGljYXRlZCBpZGVudGl0aWVzIGZvciBDb2duaXRvIElkZW50aXR5IFBvb2xzLiBUaGlzIHBvbGljeSBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBhIHN0YW5kIGFsb25lIHBlcm1pc3Npb24gcG9saWN5LiBJdCBpcyB1c2VkIGFzIGEgZ3VhcmRyYWlsIGFnYWluc3Qgb3Zlcmx5IHBlcm1pc3NpdmUgcG9saWNpZXMgYXR0YWNoZWQgZm9yIHJvbGVzIGluIGFuIGlkZW50aXR5IHBvb2wuIERvIG5vdCBhdHRhY2ggdGhpcyBwb2xpY3kgdG8gYW55IHJvbGVzLCBhcyBDb2duaXRvIElkZW50aXR5IFNlcnZpY2Ugd2lsbCBhdXRvbWF0aWNhbGx5IGluY2x1ZGUgaXQgYXMgYSBzY29wZWQgZG93biBwb2xpY3kgd2hlbiBjcmVhdGluZyBjcmVkZW50aWFscy4gVGhlIHByaXZpbGVnZXMgdG8gdGVtcG9yYXJpbHkgYWNjZXNzIG90aGVyIEFXUyByZXNvdXJjZXMgdGhyb3VnaCB0aGUgZW5oYW5jZWQgZmxvdyB3aWxsIG5vdyBiZSBkZWZpbmVkIGJ5IHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHJvbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpZGVudGl0eSBvZiB0aGUgdW5hdXRoZW50aWNhdGVkIHVzZXIgcHJvdmlkZWQgYnkgYSBzZXJ2aWNlLCBhbmQgdGhlIHByaXZpbGVnZXMgZ2l2ZW4gaW4gdGhpcyBtYW5hZ2VkIHBvbGljeSB0aGF0IGlzIG93bmVkIGJ5IENvZ25pdG8uICovXG4gICAgcHVibGljIEFtYXpvbkNvZ25pdG9VbkF1dGhlZElkZW50aXRpZXNTZXNzaW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZ25pdG9VbkF1dGhlZElkZW50aXRpZXNTZXNzaW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZGVmaW5lcyB0aGUgc2V0IG9mIHBlcm1pc3Npb25zIGFsbG93ZWQgZm9yIHVuYXV0aGVudGljYXRlZCBpZGVudGl0aWVzIGZvciBDb2duaXRvIElkZW50aXR5IFBvb2xzLiBUaGlzIGRvZXMgbm90IG5lZWQgdG8gYmUgYXR0YWNoZWQgdG8geW91ciB1bmF1dGggcm9sZSwgYXMgQ29nbml0byBJZGVudGl0eSBTZXJ2aWNlIHdpbGwgYXV0b21hdGljYWxseSBpbmNsdWRlIGl0IGFzIGEgc2NvcGVkIGRvd24gcG9saWN5IHdoZW4gY3JlYXRpbmcgY3JlZGVudGlhbHMuIFRoZSBwcml2aWxlZ2VzIHRvIHRlbXBvcmFyaWx5IGFjY2VzcyBvdGhlciBBV1MgcmVzb3VyY2VzIHRocm91Z2ggdGhlIGVuaGFuY2VkIGZsb3cgd2lsbCBub3cgYmUgZGVmaW5lZCBieSB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSByb2xlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaWRlbnRpdHkgb2YgdGhlIHVuYXV0aGVudGljYXRlZCB1c2VyIHByb3ZpZGVkIGJ5IGEgc2VydmljZSwgYW5kIHRoZSBwcml2aWxlZ2VzIGdpdmVuIGluIHRoaXMgbWFuYWdlZCBwb2xpY3kgdGhhdCBpcyBvd25lZCBieSBDb2duaXRvLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2duaXRvVW5hdXRoZW50aWNhdGVkSWRlbnRpdGllcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2duaXRvVW5hdXRoZW50aWNhdGVkSWRlbnRpdGllcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBwdXJwb3NlIG9mIHRoaXMgcG9saWN5IGlzIHRvIGdyYW50IHBlcm1pc3Npb25zIHRvIEFXUyBDb25uZWN0IHVzZXJzIHJlcXVpcmVkIHRvIHVzZSBDb25uZWN0IHJlc291cmNlcy4gVGhpcyBwb2xpY3kgcHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIENvbm5lY3QgcmVzb3VyY2VzIHZpYSB0aGUgQ29ubmVjdCBDb25zb2xlIGFuZCBwdWJsaWMgQVBJcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Db25uZWN0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db25uZWN0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQW1hem9uIENvbm5lY3QgQ2FtcGFpZ25zIHNlcnZpY2UgbGlua2VkIHJvbGUgKi9cbiAgICBwdWJsaWMgQW1hem9uQ29ubmVjdENhbXBhaWduc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvbm5lY3RDYW1wYWlnbnNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHZpZXcgdGhlIEFtYXpvbiBDb25uZWN0IGluc3RhbmNlcyBpbiB5b3VyIEFXUyBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db25uZWN0UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29ubmVjdFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBDb25uZWN0IHRvIGNyZWF0ZSBhbmQgbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkNvbm5lY3RTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db25uZWN0U2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIENvbm5lY3QgdG8gc3luY2hyb25pemUgQVdTIHJlc291cmNlcyBhY3Jvc3MgcmVnaW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29ubmVjdFN5bmNocm9uaXphdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvbm5lY3RTeW5jaHJvbml6YXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBDb25uZWN0IFZvaWNlIElEICovXG4gICAgcHVibGljIEFtYXpvbkNvbm5lY3RWb2ljZUlERnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db25uZWN0Vm9pY2VJREZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBjb25zdW1lIEFtYXpvbiBCZWRyb2NrIG1vZGVscywgaW5jbHVkaW5nIGludm9raW5nIEFtYXpvbiBCZWRyb2NrIGFwcGxpY2F0aW9uIGluZmVyZW5jZSBwcm9maWxlIGNyZWF0ZWQgZm9yIHBhcnRpY3VsYXIgQW1hem9uIERhdGFab25lIGRvbWFpbi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVCZWRyb2NrTW9kZWxDb25zdW1wdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EYXRhWm9uZUJlZHJvY2tNb2RlbENvbnN1bXB0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gbWFuYWdlIEFtYXpvbiBCZWRyb2NrIG1vZGVsIGFjY2VzcywgaW5jbHVkaW5nIGNyZWF0aW5nLCB0YWdnaW5nIGFuZCBkZWxldGluZyBhcHBsaWNhdGlvbiBpbmZlcmVuY2UgcHJvZmlsZXMuICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lQmVkcm9ja01vZGVsTWFuYWdlbWVudFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EYXRhWm9uZUJlZHJvY2tNb2RlbE1hbmFnZW1lbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEFtYXpvbiBEYXRhWm9uZSdzIERvbWFpbkV4ZWN1dGlvblJvbGUgc2VydmljZSByb2xlLiBUaGlzIHJvbGUgaXMgdXNlZCBieSBBbWF6b24gRGF0YVpvbmUgdG8gY2F0YWxvZywgZGlzY292ZXIsIGdvdmVybiwgc2hhcmUsIGFuZCBhbmFseXplIGRhdGEgaW4gdGhlIEFtYXpvbiBEYXRhWm9uZSBkb21haW4uICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lRG9tYWluRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EYXRhWm9uZURvbWFpbkV4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gRGF0YVpvbmUgY3JlYXRlcyBJQU0gcm9sZXMgZm9yIEVudmlyb25tZW50cyB0byBwZXJmb3JtIGRhdGEgYW5hbHl0aWNzIGFjdGlvbnMsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgdGhlc2Ugcm9sZXMgdG8gZGVmaW5lIHRoZSBib3VuZGFyeSBvZiB0aGVpciBwZXJtaXNzaW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVFbnZpcm9ubWVudFJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRhdGFab25lRW52aXJvbm1lbnRSb2xlUGVybWlzc2lvbnNCb3VuZGFyeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBEYXRhWm9uZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYXMgd2VsbCBhcyBsaW1pdGVkIGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIHRoYXQgYXJlIHJlcXVpcmVkIGJ5IGl0LiAqL1xuICAgIHB1YmxpYyBBbWF6b25EYXRhWm9uZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGF0YVpvbmVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIERhdGFab25lLCBidXQgZG9lcyBub3QgYWxsb3cgdGhlIG1hbmFnZW1lbnQgb2YgZG9tYWlucywgdXNlcnMsIG9yIGFzc29jaWF0ZWQgYWNjb3VudHMuICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lRnVsbFVzZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGF0YVpvbmVGdWxsVXNlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIGFsbG93IEFtYXpvbiBEYXRhWm9uZSB0byBlbmFibGUgcHVibGlzaGluZyBhbmQgYWNjZXNzIGdyYW50cyB0byBkYXRhLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EYXRhWm9uZUdsdWVNYW5hZ2VBY2Nlc3NSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRhdGFab25lR2x1ZU1hbmFnZUFjY2Vzc1JvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gRGF0YVpvbmUgaXMgYSBkYXRhIG1hbmFnZW1lbnQgc2VydmljZSB0aGF0IGVuYWJsZXMgeW91IHRvIGNhdGFsb2csIGRpc2NvdmVyLCBnb3Zlcm4sIHNoYXJlLCBhbmQgYW5hbHl6ZSB5b3VyIGRhdGEuIFdpdGggQW1hem9uIERhdGFab25lLCB5b3UgY2FuIHNoYXJlIGFuZCBhY2Nlc3MgeW91ciBkYXRhIGFjcm9zcyBhY2NvdW50cyBhbmQgc3VwcG9ydGVkIHJlZ2lvbnMuIEFtYXpvbiBEYXRhWm9uZSBzaW1wbGlmaWVzIHlvdXIgZXhwZXJpZW5jZSBhY3Jvc3MgQVdTIHNlcnZpY2VzLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgQW1hem9uIFJlZHNoaWZ0LCBBbWF6b24gQXRoZW5hLCBBV1MgR2x1ZSwgYW5kIEFXUyBMYWtlIEZvcm1hdGlvbi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVSZWRzaGlmdEdsdWVQcm92aXNpb25pbmdQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGF0YVpvbmVSZWRzaGlmdEdsdWVQcm92aXNpb25pbmdQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBnaXZlcyBBbWF6b24gRGF0YVpvbmUgcGVybWlzc2lvbnMgdG8gcHVibGlzaCBBbWF6b24gUmVkc2hpZnQgZGF0YSB0byB0aGUgY2F0YWxvZy4gSXQgYWxzbyBnaXZlcyBBbWF6b24gRGF0YVpvbmUgcGVybWlzc2lvbnMgdG8gZ3JhbnQgYWNjZXNzIG9yIHJldm9rZSBhY2Nlc3MgdG8gQW1hem9uIFJlZHNoaWZ0IG9yIEFtYXpvbiBSZWRzaGlmdCBTZXJ2ZXJsZXNzIHB1Ymxpc2hlZCBhc3NldHMgaW4gdGhlIGNhdGFsb2cuICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lUmVkc2hpZnRNYW5hZ2VBY2Nlc3NSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRhdGFab25lUmVkc2hpZnRNYW5hZ2VBY2Nlc3NSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIEFtYXpvbkRhdGFab25lU2FnZU1ha2VyRW52aXJvbm1lbnRSb2xlUGVybWlzc2lvbnNCb3VuZGFyeSBwb2xpY3kgaXMgdGhlIGxpc3Qgb2YgcGVybWlzc2lvbnMgdGhhdCBhcmUgcGVybWl0dGVkIG9uIGFuIGV4ZWN1dGlvbiByb2xlIGNyZWF0ZWQgaW4gYSBTYWdlTWFrZXIgZW52aXJvbm1lbnQgcHJvdmlzaW9uZWQgYnkgQW1hem9uIERhdGFab25lLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EYXRhWm9uZVNhZ2VNYWtlckVudmlyb25tZW50Um9sZVBlcm1pc3Npb25zQm91bmRhcnkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGF0YVpvbmVTYWdlTWFrZXJFbnZpcm9ubWVudFJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIEFtYXpvbkRhdGFab25lU2FnZU1ha2VyTWFuYWdlQWNjZXNzUm9sZVBvbGljeSBwb2xpY3kgZ3JhbnRzIEFtYXpvbiBEYXRhWm9uZSB0aGUgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gZ3JhbnQgdXNlciBhY2Nlc3MgdG8gdmFyaW91cyByZXNvdXJjZXMgaW4gdGhlIFNhZ2VNYWtlciBlbnZpcm9ubWVudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVTYWdlTWFrZXJNYW5hZ2VBY2Nlc3NSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRhdGFab25lU2FnZU1ha2VyTWFuYWdlQWNjZXNzUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBBbWF6b25EYXRhWm9uZVNhZ2VNYWtlclByb3Zpc2lvbmluZ1JvbGVQb2xpY3kgcG9saWN5IGdyYW50cyBBbWF6b24gRGF0YVpvbmUgdGhlIHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIGludGVyb3BlcmF0ZSB3aXRoIEFtYXpvbiBTYWdlTWFrZXIuICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lU2FnZU1ha2VyUHJvdmlzaW9uaW5nUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EYXRhWm9uZVNhZ2VNYWtlclByb3Zpc2lvbmluZ1JvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiAgUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIERldGVjdGl2ZSBzZXJ2aWNlIGFuZCBzY29wZWQgYWNjZXNzIHRvIHRoZSBjb25zb2xlIFVJIGRlcGVuZGVuY2llcyAqL1xuICAgIHB1YmxpYyBBbWF6b25EZXRlY3RpdmVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRldGVjdGl2ZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBpbnZlc3RpZ2F0b3IgYWNjZXNzIHRvIEFtYXpvbiBEZXRlY3RpdmUgc2VydmljZSBhbmQgc2NvcGVkIGFjY2VzcyB0byB0aGUgY29uc29sZSBVSSBkZXBlbmRlbmNpZXMuIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9uIHRvIGRpdmUgaW50byBEZXRlY3RpdmUgZm9yIGludmVzdGlnYXRpb24gcHVycG9zZXMgYW5kIGxpbWl0ZWQgd3JpdGUgYWNjZXNzIHRvIEd1YXJkZHV0eS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGV0ZWN0aXZlSW52ZXN0aWdhdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRldGVjdGl2ZUludmVzdGlnYXRvckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG1lbWJlciBhY2Nlc3MgdG8gQW1hem9uIERldGVjdGl2ZSBzZXJ2aWNlIGFuZCBzY29wZWQgYWNjZXNzIHRvIHRoZSBjb25zb2xlIFVJIGRlcGVuZGVuY2llcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGV0ZWN0aXZlTWVtYmVyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRldGVjdGl2ZU1lbWJlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIE9yZ2FuaXphdGlvbnMgYWNjZXNzIHRvIG1hbmFnZSBEZWxlZ2F0ZWQgYWRtaW5pc3RyYXRvciBmb3IgQW1hem9uIERldGVjdGl2ZSBhbmQgc2NvcGVkIGFjY2VzcyB0byB0aGUgY29uc29sZSBVSSBkZXBlbmRlbmNpZXMuIFRoaXMgYWxzbyBncmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBzZXJ2aWNlLWxpbmtlZCByb2xlIGZvciBEZXRlY3RpdmUuICovXG4gICAgcHVibGljIEFtYXpvbkRldGVjdGl2ZU9yZ2FuaXphdGlvbnNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGV0ZWN0aXZlT3JnYW5pemF0aW9uc0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gRGV0ZWN0aXZlIHRvIG1ha2Ugc2VydmljZSBjYWxscyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBbWF6b25EZXRlY3RpdmVTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EZXRlY3RpdmVTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBwb2xpY3kgZ3JhbnRzIGZ1bGwtYWNjZXNzIHRvIHRoZSBEZXZPcHMgR3VydSBjb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EZXZPcHNHdXJ1Q29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGV2T3BzR3VydUNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIERldk9wcyBHdXJ1LiAqL1xuICAgIHB1YmxpYyBBbWF6b25EZXZPcHNHdXJ1RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EZXZPcHNHdXJ1RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgYWNjZXNzIHRvIGVuYWJsZSBhbmQgbWFuYWdlIEFtYXpvbiBEZXZPcHMgR3VydSB3aXRoaW4gYW4gb3JnYW5pemF0aW9uLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EZXZPcHNHdXJ1T3JnYW5pemF0aW9uc0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EZXZPcHNHdXJ1T3JnYW5pemF0aW9uc0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIERldk9wcyBHdXJ1IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkRldk9wc0d1cnVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EZXZPcHNHdXJ1UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBIHNlcnZpY2UtbGlua2VkIHJvbGUgcmVxdWlyZWQgZm9yIEFtYXpvbiBEZXZPcHNHdXJ1IHRvIGFjY2VzcyB5b3VyIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGV2T3BzR3VydVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRldk9wc0d1cnVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB1cGxvYWQgRE1TIHJlcGxpY2F0aW9uIGxvZ3MgdG8gY2xvdWR3YXRjaCBsb2dzIGluIGN1c3RvbWVyIGFjY291bnQuICovXG4gICAgcHVibGljIEFtYXpvbkRNU0Nsb3VkV2F0Y2hMb2dzUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25ETVNDbG91ZFdhdGNoTG9nc1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gbWFuYWdlIFMzIHNldHRpbmdzIGZvciBSZWRzaGlmdCBlbmRwb2ludHMgZm9yIERNUy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRE1TUmVkc2hpZnRTM1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRE1TUmVkc2hpZnRTM1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gbWFuYWdlIFZQQyBzZXR0aW5ncyBmb3IgQVdTIG1hbmFnZWQgY3VzdG9tZXIgY29uZmlndXJhdGlvbnMgKi9cbiAgICBwdWJsaWMgQW1hem9uRE1TVlBDTWFuYWdlbWVudFJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRE1TVlBDTWFuYWdlbWVudFJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIERvY3VtZW50REItRWxhc3RpYyB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRG9jREJFbGFzdGljU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRG9jREJFbGFzdGljU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBtYW5hZ2UgQW1hem9uIERvY3VtZW50REIgd2l0aCBNb25nb0RCIGNvbXBhdGliaWxpdHkgdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuIE5vdGUgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgZnVsbCBhY2Nlc3MgdG8gcHVibGlzaCBvbiBhbGwgU05TIHRvcGljcyB3aXRoaW4gdGhlIGFjY291bnQsIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBhbmQgZWRpdCBBbWF6b24gRUMyIGluc3RhbmNlcyBhbmQgVlBDIGNvbmZpZ3VyYXRpb25zLCBwZXJtaXNzaW9ucyB0byB2aWV3IGFuZCBsaXN0IGtleXMgb24gQW1hem9uIEtNUywgYW5kIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBSRFMgYW5kIEFtYXpvbiBOZXB0dW5lLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Eb2NEQkNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRvY0RCQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRG9jdW1lbnREQiBFbGFzdGljIENsdXN0ZXJzIGFuZCBvdGhlciByZXF1aXJlZCBwZXJtaXNzaW9ucyBmb3IgaXRzIGRlcGVuZGVuY2llcyBpbmNsdWRpbmcgRUMyLCBLTVMsIFNlY3JldHNNYW5hZ2VyLCBDbG91ZFdhdGNoIGFuZCBJQU0uICovXG4gICAgcHVibGljIEFtYXpvbkRvY0RCRWxhc3RpY0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRG9jREJFbGFzdGljRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIERvY0RCLUVsYXN0aWMgYW5kIENsb3VkV2F0Y2ggbWV0cmljcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRG9jREJFbGFzdGljUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRG9jREJFbGFzdGljUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRG9jdW1lbnREQiB3aXRoIE1vbmdvREIgY29tcGF0aWJpbGl0eS4gTm90ZSB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBmdWxsIGFjY2VzcyB0byBwdWJsaXNoIG9uIGFsbCBTTlMgdG9waWNzIHdpdGhpbiB0aGUgYWNjb3VudCBhbmQgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJEUyBhbmQgQW1hem9uIE5lcHR1bmUuICovXG4gICAgcHVibGljIEFtYXpvbkRvY0RCRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Eb2NEQkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBEb2N1bWVudERCIHdpdGggTW9uZ29EQiBjb21wYXRpYmlsaXR5LiBOb3RlIHRoYXQgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgYWNjZXNzIHRvIEFtYXpvbiBSRFMgYW5kIEFtYXpvbiBOZXB0dW5lIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRG9jREJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Eb2NEQlJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG1hbmFnZSBWUEMgc2V0dGluZ3MgZm9yIEFtYXpvbiBtYW5hZ2VkIGN1c3RvbWVyIGNvbmZpZ3VyYXRpb25zICovXG4gICAgcHVibGljIEFtYXpvbkRSU1ZQQ01hbmFnZW1lbnQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRFJTVlBDTWFuYWdlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBEeW5hbW9EQiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkR5bmFtb0RCRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EeW5hbW9EQkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRHluYW1vREIgKi9cbiAgICBwdWJsaWMgQW1hem9uRHluYW1vREJGdWxsQWNjZXNzVjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRHluYW1vREJGdWxsQWNjZXNzVjIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBvbiBhIGRlcHJlY2F0aW9uIHBhdGguIFNlZSBkb2N1bWVudGF0aW9uIGZvciBndWlkYW5jZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9EeW5hbW9EQlBpcGVsaW5lLmh0bWwuIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBEeW5hbW9EQiBpbmNsdWRpbmcgRXhwb3J0L0ltcG9ydCB1c2luZyBBV1MgRGF0YSBQaXBlbGluZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkR5bmFtb0RCRnVsbEFjY2Vzc3dpdGhEYXRhUGlwZWxpbmUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRHluYW1vREJGdWxsQWNjZXNzd2l0aERhdGFQaXBlbGluZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIER5bmFtb0RCIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRHluYW1vREJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EeW5hbW9EQlJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogSUFNIFBvbGljeSB0aGF0IGFsbG93cyB0aGUgQ1NJIGRyaXZlciBzZXJ2aWNlIGFjY291bnQgdG8gbWFrZSBjYWxscyB0byByZWxhdGVkIHNlcnZpY2VzIHN1Y2ggYXMgRUMyIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQlNDU0lEcml2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUJTQ1NJRHJpdmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEFtYXpvbiBFQ1IgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFtYXpvbkVDMkNvbnRhaW5lclJlZ2lzdHJ5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJDb250YWluZXJSZWdpc3RyeUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRUMyIENvbnRhaW5lciBSZWdpc3RyeSByZXBvc2l0b3JpZXMsIGJ1dCBkb2VzIG5vdCBhbGxvdyByZXBvc2l0b3J5IGRlbGV0aW9uIG9yIHBvbGljeSBjaGFuZ2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJDb250YWluZXJSZWdpc3RyeVBvd2VyVXNlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJDb250YWluZXJSZWdpc3RyeVBvd2VyVXNlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBwdWxsIGltYWdlcyBmcm9tIEFtYXpvbiBFQzIgQ29udGFpbmVyIFJlZ2lzdHJ5IHJlcG9zaXRvcmllcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyQ29udGFpbmVyUmVnaXN0cnlQdWxsT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJDb250YWluZXJSZWdpc3RyeVB1bGxPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gRUMyIENvbnRhaW5lciBSZWdpc3RyeSByZXBvc2l0b3JpZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVDMkNvbnRhaW5lclJlZ2lzdHJ5UmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyQ29udGFpbmVyUmVnaXN0cnlSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqICAgUG9saWN5IHRvIGVuYWJsZSBUYXNrIEF1dG9zY2FsaW5nIGZvciBBbWF6b24gRUMyIENvbnRhaW5lciBTZXJ2aWNlICovXG4gICAgcHVibGljIEFtYXpvbkVDMkNvbnRhaW5lclNlcnZpY2VBdXRvc2NhbGVSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMkNvbnRhaW5lclNlcnZpY2VBdXRvc2NhbGVSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBDbG91ZFdhdGNoIEV2ZW50cyBmb3IgRUMyIENvbnRhaW5lciBTZXJ2aWNlICovXG4gICAgcHVibGljIEFtYXpvbkVDMkNvbnRhaW5lclNlcnZpY2VFdmVudHNSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMkNvbnRhaW5lclNlcnZpY2VFdmVudHNSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBBbWF6b24gRUMyIFJvbGUgZm9yIEFtYXpvbiBFQzIgQ29udGFpbmVyIFNlcnZpY2UuICovXG4gICAgcHVibGljIEFtYXpvbkVDMkNvbnRhaW5lclNlcnZpY2Vmb3JFQzJSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMkNvbnRhaW5lclNlcnZpY2Vmb3JFQzJSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIEFtYXpvbiBFQ1Mgc2VydmljZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJDb250YWluZXJTZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJDb250YWluZXJTZXJ2aWNlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBFQzIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHNjYW4gYWxsIHN1cHBvcnRlZCByZXNvdXJjZSB0eXBlcyBmb3IgcmVsZXZhbnQgZGF0YSB3aGVuIHVzaW5nIERlc2NyaWJlSW1hZ2VSZWZlcmVuY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJJbWFnZVJlZmVyZW5jZXNBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMySW1hZ2VSZWZlcmVuY2VzQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRUMyIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBFQzIgYWNjZXNzIHRvIFMzIGJ1Y2tldCB0byBkb3dubG9hZCByZXZpc2lvbi4gVGhpcyByb2xlIGlzIG5lZWRlZCBieSB0aGUgQ29kZURlcGxveSBhZ2VudCBvbiBFQzIgaW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJSb2xlZm9yQVdTQ29kZURlcGxveSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJSb2xlZm9yQVdTQ29kZURlcGxveSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEVDMiBsaW1pdGVkIGFjY2VzcyB0byBTMyBidWNrZXQgdG8gZG93bmxvYWQgcmV2aXNpb24uIFRoaXMgcm9sZSBpcyBuZWVkZWQgYnkgdGhlIENvZGVEZXBsb3kgYWdlbnQgb24gRUMyIGluc3RhbmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyUm9sZWZvckFXU0NvZGVEZXBsb3lMaW1pdGVkKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMlJvbGVmb3JBV1NDb2RlRGVwbG95TGltaXRlZCk7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgcG9saWN5IGZvciB0aGUgQW1hem9uIEVDMiBSb2xlIGZvciBEYXRhIFBpcGVsaW5lIHNlcnZpY2Ugcm9sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyUm9sZWZvckRhdGFQaXBlbGluZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyUm9sZWZvckRhdGFQaXBlbGluZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSB3aWxsIHNvb24gYmUgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBBbWF6b25TU01NYW5hZ2VkSW5zdGFuY2VDb3JlIHBvbGljeSB0byBlbmFibGUgQVdTIFN5c3RlbXMgTWFuYWdlciBzZXJ2aWNlIGNvcmUgZnVuY3Rpb25hbGl0eSBvbiBFQzIgaW5zdGFuY2VzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N5c3RlbXMtbWFuYWdlci9sYXRlc3QvdXNlcmd1aWRlL3NldHVwLWluc3RhbmNlLXByb2ZpbGUuaHRtbCAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJSb2xlZm9yU1NNKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMlJvbGVmb3JTU00pO1xuICAgIH1cblxuICAgIC8qKiBNYW5hZ2VkIHBvbGljeSBmb3IgdGhlIEFtYXpvbiBMYXVuY2hXaXphcmQgc2VydmljZSByb2xlIGZvciBFQzIgKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyUm9sZVBvbGljeUZvckxhdW5jaFdpemFyZCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJSb2xlUG9saWN5Rm9yTGF1bmNoV2l6YXJkKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBBdXRvc2NhbGluZyBmb3IgQW1hem9uIEVDMiBTcG90IEZsZWV0ICovXG4gICAgcHVibGljIEFtYXpvbkVDMlNwb3RGbGVldEF1dG9zY2FsZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyU3BvdEZsZWV0QXV0b3NjYWxlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBFQzIgU3BvdCBGbGVldCB0byByZXF1ZXN0LCB0ZXJtaW5hdGUgYW5kIHRhZyBTcG90IEluc3RhbmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyU3BvdEZsZWV0VGFnZ2luZ1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyU3BvdEZsZWV0VGFnZ2luZ1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgdG8gQW1hem9uIEVDUyByZXNvdXJjZXMgYW5kIGVuYWJsZXMgRUNTIGZlYXR1cmVzIHRocm91Z2ggYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlIHJlc291cmNlcywgaW5jbHVkaW5nIFZQQ3MsIEF1dG8gU2NhbGluZyBncm91cHMsIGFuZCBDbG91ZEZvcm1hdGlvbiBzdGFja3MuICovXG4gICAgcHVibGljIEFtYXpvbkVDU0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUNTRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQW1hem9uIEVDUyBDb21wdXRlIHRvIG1hbmFnZSB5b3VyIEVDMiBpbnN0YW5jZXMgYW5kIHJlbGF0ZWQgcmVzb3VyY2VzIGFzIHBhcnQgb2YgRUNTIG1hbmFnZWQgaW5zdGFuY2VzICovXG4gICAgcHVibGljIEFtYXpvbkVDU0NvbXB1dGVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NDb21wdXRlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGVzZSBwZXJtaXNzaW9ucyBlbmFibGUgQW1hem9uIEVDUyB0byBhdXRvbWF0aWNhbGx5IHByb3Zpc2lvbiBhbmQgbWFuYWdlIHRoZSBpbmZyYXN0cnVjdHVyZSBjb21wb25lbnRzIHJlcXVpcmVkIGZvciBFeHByZXNzIEdhdGV3YXkgU2VydmljZXMsIGluY2x1ZGluZyBsb2FkIGJhbGFuY2luZywgc2VjdXJpdHkgZ3JvdXBzLCBTU0wgY2VydGlmaWNhdGVzLCBhbmQgYXV0byBzY2FsaW5nIGNvbmZpZ3VyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVmb3JFeHByZXNzR2F0ZXdheVNlcnZpY2VzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZWZvckV4cHJlc3NHYXRld2F5U2VydmljZXMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gb3RoZXIgQVdTIHNlcnZpY2UgcmVzb3VyY2VzIHJlcXVpcmVkIHRvIG1hbmFnZSBsb2FkIGJhbGFuY2VycyBhc3NvY2lhdGVkIHdpdGggRUNTIHdvcmtsb2FkcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlUG9saWN5Rm9yTG9hZEJhbGFuY2VycygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JMb2FkQmFsYW5jZXJzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgRUNTIGFjY2VzcyB0byBjcmVhdGUgYW5kIG1hbmFnZSBFQzIgbWFuYWdlZCByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlUG9saWN5Rm9yTWFuYWdlZEluc3RhbmNlcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JNYW5hZ2VkSW5zdGFuY2VzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5LCBBV1MgU2VjcmV0cyBNYW5hZ2VyIGFuZCBvdGhlciBBV1MgU2VydmljZXMgcmVxdWlyZWQgdG8gbWFuYWdlIEVDUyBTZXJ2aWNlIENvbm5lY3QgVExTIGZlYXR1cmVzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JTZXJ2aWNlQ29ubmVjdFRyYW5zcG9ydExheWVyU2VjdXJpdHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlUG9saWN5Rm9yU2VydmljZUNvbm5lY3RUcmFuc3BvcnRMYXllclNlY3VyaXR5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlIHJlc291cmNlcyByZXF1aXJlZCB0byBtYW5hZ2Ugdm9sdW1lcyBhc3NvY2lhdGVkIHdpdGggRUNTIHdvcmtsb2FkcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlUG9saWN5Rm9yVm9sdW1lcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JWb2x1bWVzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlIHJlc291cmNlcyByZXF1aXJlZCB0byBtYW5hZ2UgVlBDIExhdHRpY2UgZmVhdHVyZSBpbiBFQ1Mgd29ya2xvYWRzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JWcGNMYXR0aWNlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZVBvbGljeUZvclZwY0xhdHRpY2UpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEFtYXpvbiBFQ1MgSW5zdGFuY2UgUm9sZSBmb3IgQW1hem9uIEVDUyBNYW5hZ2VkIEluc3RhbmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUNTSW5zdGFuY2VSb2xlUG9saWN5Rm9yTWFuYWdlZEluc3RhbmNlcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NJbnN0YW5jZVJvbGVQb2xpY3lGb3JNYW5hZ2VkSW5zdGFuY2VzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBBbWF6b24gRUNTIHRvIG1hbmFnZSB5b3VyIGNsdXN0ZXIuICovXG4gICAgcHVibGljIEFtYXpvbkVDU1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDU1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlIHJlc291cmNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBydW4gQW1hem9uIEVDUyB0YXNrcyAqL1xuICAgIHB1YmxpYyBBbWF6b25FQ1NUYXNrRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NUYXNrRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG1hbmFnZW1lbnQgYWNjZXNzIHRvIEVGUyByZXNvdXJjZXMgYW5kIHJlYWQgYWNjZXNzIHRvIEVDMiAqL1xuICAgIHB1YmxpYyBBbWF6b25FRlNDU0lEcml2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUZTQ1NJRHJpdmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgdGhlIEFtYXpvbiBWUEMgQ05JIFBsdWdpbiAoYW1hem9uLXZwYy1jbmktazhzKSB0aGUgcGVybWlzc2lvbnMgaXQgcmVxdWlyZXMgdG8gbW9kaWZ5IHRoZSBJUCBhZGRyZXNzIGNvbmZpZ3VyYXRpb24gb24geW91ciBFS1Mgd29ya2VyIG5vZGVzLiBUaGlzIHBlcm1pc3Npb24gc2V0IGFsbG93cyB0aGUgQ05JIHRvIGxpc3QsIGRlc2NyaWJlLCBhbmQgbW9kaWZ5IEVsYXN0aWMgTmV0d29yayBJbnRlcmZhY2VzIG9uIHlvdXIgYmVoYWxmLiBNb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBV1MgVlBDIENOSSBQbHVnaW4gaXMgYXZhaWxhYmxlIGhlcmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYW1hem9uLXZwYy1jbmktazhzICovXG4gICAgcHVibGljIEFtYXpvbkVLU0NOSVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NDTklQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgYXR0YWNoZWQgdG8gdGhlIEVLUyBDbHVzdGVyIFJvbGUgdGhhdCBncmFudHMgcGVybWlzc2lvbnMgdG8gbWFuYWdlIHRoZSBjbHVzdGVyJ3MgYmxvY2sgc3RvcmFnZSByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU0Jsb2NrU3RvcmFnZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NCbG9ja1N0b3JhZ2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBLdWJlcm5ldGVzIHRoZSBwZXJtaXNzaW9ucyBpdCByZXF1aXJlcyB0byBtYW5hZ2UgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiBLdWJlcm5ldGVzIHJlcXVpcmVzIEVjMjpDcmVhdGVUYWdzIHBlcm1pc3Npb25zIHRvIHBsYWNlIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uIG9uIEVDMiByZXNvdXJjZXMgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBJbnN0YW5jZXMsIFNlY3VyaXR5IEdyb3VwcywgYW5kIEVsYXN0aWMgTmV0d29yayBJbnRlcmZhY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NDbHVzdGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0NsdXN0ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgYXR0YWNoZWQgdG8gdGhlIEVLUyBDbHVzdGVyIFJvbGUgdGhhdCBncmFudHMgcGVybWlzc2lvbnMgdG8gbWFuYWdlIHRoZSBjbHVzdGVyJ3MgY29tcHV0ZSByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU0NvbXB1dGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTQ29tcHV0ZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBBbWF6b24gRUtTIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIGZvciBFS1MgY29ubmVjdG9yICovXG4gICAgcHVibGljIEFtYXpvbkVLU0Nvbm5lY3RvclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0Nvbm5lY3RvclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byB2aWV3IHRoZSBkYXNoYm9hcmQgaW4gdGhlIEFtYXpvbiBFS1MgY29uc29sZS4gVGhlIGRhc2hib2FyZCBhZ2dyZWdhdGVzIGluZm9ybWF0aW9uIGFib3V0IG11bHRpcGxlIGNsdXN0ZXJzIGFuZCByZWxhdGVkIHJlc291cmNlcyB1c2luZyBBV1MgT3JnYW5pemF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTRGFzaGJvYXJkQ29uc29sZVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0Rhc2hib2FyZENvbnNvbGVSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGVuYWJsZXMgdGhlIEFtYXpvbiBFS1MgRGFzaGJvYXJkIHRvIGFjY2VzcyBhbmQgZGlzcGxheSBvcmdhbml6YXRpb24td2lkZSBpbmZvcm1hdGlvbi4gVGhlIHBvbGljeSBhbGxvd3MgdGhlIEVLUyBEYXNoYm9hcmQgc2VydmljZSB0byBnYXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgeW91ciBBV1MgT3JnYW5pemF0aW9ucyBzdHJ1Y3R1cmUgYW5kIGFjY291bnRzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NEYXNoYm9hcmRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NEYXNoYm9hcmRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBvdGhlciBBV1Mgc2VydmljZSByZXNvdXJjZXMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gcnVuIEFtYXpvbiBFS1MgcG9kcyBvbiBBV1MgRmFyZ2F0ZSAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NGYXJnYXRlUG9kRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NGYXJnYXRlUG9kRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBuZWNlc3NhcnkgcGVybWlzc2lvbnMgdG8gQW1hem9uIEVLUyB0byBydW4gZmFyZ2F0ZSB0YXNrcyAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NGb3JGYXJnYXRlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTRm9yRmFyZ2F0ZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGF0dGFjaGVkIHRvIHRoZSBFS1MgQ2x1c3RlciBSb2xlIHRoYXQgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIG1hbmFnZSB0aGUgY2x1c3RlcidzIGxvYWQgYmFsYW5jaW5nIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTTG9hZEJhbGFuY2luZ1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NMb2FkQmFsYW5jaW5nUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gRUtTIGxvY2FsIGNsdXN0ZXIncyBjb250cm9sLXBsYW5lIGluc3RhbmNlcyBydW5uaW5nIGluIHlvdXIgYWNjb3VudCB0byBtYW5hZ2UgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NMb2NhbE91dHBvc3RDbHVzdGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0xvY2FsT3V0cG9zdENsdXN0ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIEVLUyBMb2NhbCB0byBjYWxsIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTTG9jYWxPdXRwb3N0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTTG9jYWxPdXRwb3N0U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBBbWF6b24gRUtTIE1DUCBzZXJ2aWNlLiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gdXNlIG9ubHkgcmVhZC1vbmx5IHRvb2xzIGluIHRoZSBFS1MgTUNQIHNlcnZpY2UgbWVhbnQgZm9yIG9ic2VydmFiaWxpdHksIHRyb3VibGVzaG9vdGluZywgcmV0cmlldmluZyBFS1MgcmVzb3VyY2UgaW5mb3JtYXRpb24sIGFuZCBnZXR0aW5nIEVLUy1vcHRpbWl6ZWQgc3VnZ2VzdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU01DUFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU01DUFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGF0dGFjaGVkIHRvIHRoZSBFS1MgQ2x1c3RlciBSb2xlIHRoYXQgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIG1hbmFnZSB0aGUgY2x1c3RlcidzIG5ldHdvcmtpbmcgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NOZXR3b3JraW5nUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU05ldHdvcmtpbmdQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgZm9yIEt1YmVybmV0ZXMgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMgdG8gb3BlcmF0ZSBFS1MgQ2x1c3RlcnMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU1NlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTU2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEEgU2VydmljZS1MaW5rZWQgUm9sZSByZXF1aXJlZCBmb3IgQW1hem9uIEVLUyB0byBjYWxsIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdXNlZCBieSBWUEMgUmVzb3VyY2UgQ29udHJvbGxlciB0byBtYW5hZ2UgRU5JIGFuZCBJUHMgZm9yIHdvcmtlciBub2Rlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTVlBDUmVzb3VyY2VDb250cm9sbGVyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU1ZQQ1Jlc291cmNlQ29udHJvbGxlcik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBBbWF6b24gRUtTIHdvcmtlciBub2RlcyB0byBjb25uZWN0IHRvIEFtYXpvbiBFS1MgQ2x1c3RlcnMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU1dvcmtlck5vZGVNaW5pbWFsUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU1dvcmtlck5vZGVNaW5pbWFsUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIEFtYXpvbiBFS1Mgd29ya2VyIG5vZGVzIHRvIGNvbm5lY3QgdG8gQW1hem9uIEVLUyBDbHVzdGVycy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTV29ya2VyTm9kZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NXb3JrZXJOb2RlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEVsYXN0aUNhY2hlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpQ2FjaGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aUNhY2hlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEVsYXN0aUNhY2hlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpQ2FjaGVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGlDYWNoZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEFtYXpvbiBFQ1IgUHVibGljIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljQ29udGFpbmVyUmVnaXN0cnlQdWJsaWNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNDb250YWluZXJSZWdpc3RyeVB1YmxpY0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRUNSIFB1YmxpYyByZXBvc2l0b3JpZXMsIGJ1dCBkb2VzIG5vdCBhbGxvdyByZXBvc2l0b3J5IGRlbGV0aW9uIG9yIHBvbGljeSBjaGFuZ2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljQ29udGFpbmVyUmVnaXN0cnlQdWJsaWNQb3dlclVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY0NvbnRhaW5lclJlZ2lzdHJ5UHVibGljUG93ZXJVc2VyKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gRUNSIFB1YmxpYyByZXBvc2l0b3JpZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNDb250YWluZXJSZWdpc3RyeVB1YmxpY1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNDb250YWluZXJSZWdpc3RyeVB1YmxpY1JlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcm9vdCBjbGllbnQgYWNjZXNzIHRvIGFuIEFtYXpvbiBFRlMgZmlsZSBzeXN0ZW0gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1DbGllbnRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtQ2xpZW50RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBjbGllbnQgYWNjZXNzIHRvIGFuIEFtYXpvbiBFRlMgZmlsZSBzeXN0ZW0gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1DbGllbnRSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljRmlsZVN5c3RlbUNsaWVudFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBhbmQgd3JpdGUgY2xpZW50IGFjY2VzcyB0byBhbiBBbWF6b24gRUZTIGZpbGUgc3lzdGVtICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtQ2xpZW50UmVhZFdyaXRlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtQ2xpZW50UmVhZFdyaXRlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEVGUyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljRmlsZVN5c3RlbUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBFRlMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljRmlsZVN5c3RlbVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIEVsYXN0aWMgRmlsZSBTeXN0ZW0gdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljRmlsZVN5c3RlbVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGN1c3RvbWVycyB0byB1c2UgQVdTIFN5c3RlbXMgTWFuYWdlciB0byBhdXRvbWF0aWNhbGx5IG1hbmFnZSBBbWF6b24gRUZTIHV0aWxpdGllcyAoYW1hem9uLWVmcy11dGlscykgcGFja2FnZSBvbiB0aGVpciBFQzIgaW5zdGFuY2VzLCBhbmQgdXNlIENsb3VkV2F0Y2hMb2cgdG8gZ2V0IEVGUyBmaWxlIHN5c3RlbSBtb3VudCBzdWNjZXNzL2ZhaWx1cmUgbm90aWZpY2F0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1zVXRpbHMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1zVXRpbHMpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEFtYXpvbiBFbGFzdGljIE1hcFJlZHVjZSBFZGl0b3JzIHNlcnZpY2Ugcm9sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY01hcFJlZHVjZUVkaXRvcnNSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VFZGl0b3JzUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBFbGFzdGljIE1hcFJlZHVjZSBmb3IgQXV0byBTY2FsaW5nLiBSb2xlIHRvIGFsbG93IEF1dG8gU2NhbGluZyB0byBhZGQgYW5kIHJlbW92ZSBpbnN0YW5jZXMgZnJvbSB5b3VyIEVNUiBjbHVzdGVyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljTWFwUmVkdWNlZm9yQXV0b1NjYWxpbmdSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNNYXBSZWR1Y2Vmb3JBdXRvU2NhbGluZ1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEFtYXpvbiBFbGFzdGljIE1hcFJlZHVjZSBmb3IgRUMyIHNlcnZpY2Ugcm9sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY01hcFJlZHVjZWZvckVDMlJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY01hcFJlZHVjZWZvckVDMlJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBvbiBhIGRlcHJlY2F0aW9uIHBhdGguIFNlZSBkb2N1bWVudGF0aW9uIGZvciBndWlkYW5jZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Vtci9sYXRlc3QvTWFuYWdlbWVudEd1aWRlL2Vtci1tYW5hZ2VkLWlhbS1wb2xpY2llcy5odG1sLiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRWxhc3RpYyBNYXBSZWR1Y2UgYW5kIHVuZGVybHlpbmcgc2VydmljZXMgdGhhdCBpdCByZXF1aXJlcyBzdWNoIGFzIEVDMiBhbmQgUzMgKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY01hcFJlZHVjZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY01hcFJlZHVjZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdG8gYWxsb3cgRU1SIHRvIGNyZWF0ZSwgZGVzY3JpYmUgYW5kIGRlbGV0ZSBFQzIgcGxhY2VtZW50IGdyb3Vwcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY01hcFJlZHVjZVBsYWNlbWVudEdyb3VwUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VQbGFjZW1lbnRHcm91cFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEVsYXN0aWMgTWFwUmVkdWNlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY01hcFJlZHVjZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIG9uIGEgZGVwcmVjYXRpb24gcGF0aC4gU2VlIGRvY3VtZW50YXRpb24gZm9yIGd1aWRhbmNlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZW1yL2xhdGVzdC9NYW5hZ2VtZW50R3VpZGUvZW1yLW1hbmFnZWQtaWFtLXBvbGljaWVzLmh0bWwuICBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEFtYXpvbiBFbGFzdGljIE1hcFJlZHVjZSBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgQW1hem9uIEVsYXN0aWNzZWFyY2ggU2VydmljZSB0byBhY2Nlc3Mgb3RoZXIgQVdTIHNlcnZpY2VzIHN1Y2ggYXMgRUMyIE5ldHdvcmtpbmcgQVBJcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY3NlYXJjaFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNzZWFyY2hTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB1c2VycyBmdWxsIGFjY2VzcyB0byBFbGFzdGljIFRyYW5zY29kZXIgYW5kIHRoZSBhY2Nlc3MgdG8gYXNzb2NpYXRlZCBzZXJ2aWNlcyB0aGF0IGlzIHJlcXVpcmVkIGZvciBmdWxsIEVsYXN0aWMgVHJhbnNjb2RlciBmdW5jdGlvbmFsaXR5LiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljVHJhbnNjb2RlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY1RyYW5zY29kZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHVzZXJzIHBlcm1pc3Npb24gdG8gY2hhbmdlIHByZXNldHMsIHN1Ym1pdCBqb2JzLCBhbmQgdmlldyBFbGFzdGljIFRyYW5zY29kZXIgc2V0dGluZ3MuIFRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIHNvbWUgcmVhZC1vbmx5IGFjY2VzcyB0byBzb21lIG90aGVyIHNlcnZpY2VzIHJlcXVpcmVkIHRvIHVzZSB0aGUgRWxhc3RpYyBUcmFuc2NvZGUgY29uc29sZSwgaW5jbHVkaW5nIFMzLCBJQU0sIGFuZCBTTlMuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNUcmFuc2NvZGVySm9ic1N1Ym1pdHRlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljVHJhbnNjb2RlckpvYnNTdWJtaXR0ZXIpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdXNlcnMgcmVhZC1vbmx5IGFjY2VzcyB0byBFbGFzdGljIFRyYW5zY29kZXIgYW5kIGxpc3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNUcmFuc2NvZGVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY1RyYW5zY29kZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgcG9saWN5IGZvciB0aGUgQW1hem9uIEVsYXN0aWMgVHJhbnNjb2RlciBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNUcmFuc2NvZGVyUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljVHJhbnNjb2RlclJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIGFjdGlvbnMgdGhhdCBFTVIgcmVxdWlyZXMgdG8gdGVybWluYXRlIGFuZCBkZWxldGUgQVdTIEVDMiByZXNvdXJjZXMgaWYgdGhlIEVNUiBTZXJ2aWNlIHJvbGUgaGFzIGxvc3QgdGhhdCBhYmlsaXR5LiAqL1xuICAgIHB1YmxpYyBBbWF6b25FTVJDbGVhbnVwUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVNUkNsZWFudXBQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlIHJlc291cmNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBydW4gQW1hem9uIEVNUiAqL1xuICAgIHB1YmxpYyBBbWF6b25FTVJDb250YWluZXJzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRU1SQ29udGFpbmVyc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEVNUiAqL1xuICAgIHB1YmxpYyBBbWF6b25FTVJGdWxsQWNjZXNzUG9saWN5VjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRU1SRnVsbEFjY2Vzc1BvbGljeVYyKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRU1SIGFuZCB0aGUgYXNzb2NpYXRlZCBDbG91ZFdhdGNoIE1ldHJpY3MuICovXG4gICAgcHVibGljIEFtYXpvbkVNUlJlYWRPbmx5QWNjZXNzUG9saWN5VjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRU1SUmVhZE9ubHlBY2Nlc3NQb2xpY3lWMik7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhY2Nlc3MgdG8gb3RoZXIgQVdTIHNlcnZpY2UgcmVzb3VyY2VzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIHJ1biBBbWF6b24gRU1SU2VydmVybGVzcyAqL1xuICAgIHB1YmxpYyBBbWF6b25FTVJTZXJ2ZXJsZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRU1SU2VydmVybGVzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgdXNlZCBmb3IgdGhlIEFtYXpvbiBFTVIgU2VydmljZSBSb2xlIGFuZCBzaG91bGQgTk9UIGJlIHVzZWQgZm9yIGFueSBvdGhlciBJQU0gdXNlcnMgb3Igcm9sZXMgaW4geW91ciBhY2NvdW50LiBUaGUgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byBjcmVhdGUgYW5kIG1hbmFnZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIEVNUiBhbmQgcmVsYXRlZCBzZXJ2aWNlcyBuZWNlc3NhcnkgZm9yIHRoZSBvcGVyYXRpb24gb2YgeW91ciBFTVIgY2x1c3Rlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uRU1SU2VydmljZVBvbGljeVYyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVNUlNlcnZpY2VQb2xpY3lWMik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGxpbWl0ZWQgYWNjZXNzIHRvIHRoZSBBbWF6b24gQ29nbml0byBjb25maWd1cmF0aW9uIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFtYXpvbkVTQ29nbml0b0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FU0NvZ25pdG9BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB0aGUgQW1hem9uIEVTIGNvbmZpZ3VyYXRpb24gc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRVNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVTRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBFUyBjb25maWd1cmF0aW9uIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFtYXpvbkVTUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRVNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBFdmVudEJyaWRnZSB0byBhY2Nlc3MgU2VjcmV0IE1hbmFnZXIgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FdmVudEJyaWRnZUFwaURlc3RpbmF0aW9uc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkV2ZW50QnJpZGdlQXBpRGVzdGluYXRpb25zU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRXZlbnRCcmlkZ2UuICovXG4gICAgcHVibGljIEFtYXpvbkV2ZW50QnJpZGdlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FdmVudEJyaWRnZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRXZlbnRCcmlkZ2UgUGlwZXMuICovXG4gICAgcHVibGljIEFtYXpvbkV2ZW50QnJpZGdlUGlwZXNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkV2ZW50QnJpZGdlUGlwZXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFuZCBvcGVyYXRvciAoYWJpbGl0eSB0byBTdG9wIGFuZCBTdGFydCBydW5uaW5nIFBpcGVzKSBhY2Nlc3MgdG8gQW1hem9uIEV2ZW50QnJpZGdlIFBpcGVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FdmVudEJyaWRnZVBpcGVzT3BlcmF0b3JBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRXZlbnRCcmlkZ2VQaXBlc09wZXJhdG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gRXZlbnRCcmlkZ2UgUGlwZXMuICovXG4gICAgcHVibGljIEFtYXpvbkV2ZW50QnJpZGdlUGlwZXNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FdmVudEJyaWRnZVBpcGVzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBFdmVudEJyaWRnZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRXZlbnRCcmlkZ2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FdmVudEJyaWRnZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhlIEFtYXpvbkV2ZW50QnJpZGdlU2NoZWR1bGVyRnVsbEFjY2VzcyBtYW5hZ2VkIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gdXNlIGFsbCBFdmVudEJyaWRnZSBTY2hlZHVsZXIgYWN0aW9ucyBmb3Igc2NoZWR1bGVzLCBhbmQgc2NoZWR1bGUgZ3JvdXBzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FdmVudEJyaWRnZVNjaGVkdWxlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRXZlbnRCcmlkZ2VTY2hlZHVsZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhlIEFtYXpvbkV2ZW50QnJpZGdlU2NoZWR1bGVyUmVhZE9ubHlBY2Nlc3MgbWFuYWdlZCBwb2xpY3kgZ3JhbnRzIHJlYWQtb25seSBwZXJtaXNzaW9ucyB0byB2aWV3IGRldGFpbHMgYWJvdXQgeW91ciBzY2hlZHVsZXMgYW5kIHNjaGVkdWxlIGdyb3VwcyAqL1xuICAgIHB1YmxpYyBBbWF6b25FdmVudEJyaWRnZVNjaGVkdWxlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkV2ZW50QnJpZGdlU2NoZWR1bGVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRXZlbnRCcmlkZ2UgU2NoZW1hcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRXZlbnRCcmlkZ2VTY2hlbWFzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FdmVudEJyaWRnZVNjaGVtYXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRXZlbnRCcmlkZ2UgU2NoZW1hcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRXZlbnRCcmlkZ2VTY2hlbWFzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRXZlbnRCcmlkZ2VTY2hlbWFzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gTWFuYWdlZCBSdWxlcyBjcmVhdGVkIGJ5IEFtYXpvbiBFdmVudEJyaWRnZSBzY2hlbWFzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FdmVudEJyaWRnZVNjaGVtYXNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FdmVudEJyaWRnZVNjaGVtYXNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBFVlMgdG8gbWFuYWdlIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBbWF6b25FVlNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FVlNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQVdTIEZJUyB0byBtYW5hZ2UgbW9uaXRvcmluZyBhbmQgcmVzb3VyY2Ugc2VsZWN0aW9uIGZvciBleHBlcmltZW50cy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRklTU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRklTU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHaXZlcyBhY2Nlc3MgdG8gYWxsIGFjdGlvbnMgZm9yIEFtYXpvbiBGb3JlY2FzdCAqL1xuICAgIHB1YmxpYyBBbWF6b25Gb3JlY2FzdEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRm9yZWNhc3RGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR2l2ZXMgYWNjZXNzIHRvIGFsbCBhY3Rpb25zIGZvciBBbWF6b24gRnJhdWQgRGV0ZWN0b3IgKi9cbiAgICBwdWJsaWMgQW1hem9uRnJhdWREZXRlY3RvckZ1bGxBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRnJhdWREZXRlY3RvckZ1bGxBY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBGdWxsIEFjY2VzcyBQb2xpY3kgZm9yIEFtYXpvbiBGcmVlUlRPUyAqL1xuICAgIHB1YmxpYyBBbWF6b25GcmVlUlRPU0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRnJlZVJUT1NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHVzZXIgdG8gYWNjZXNzIEFtYXpvbiBGcmVlUlRPUyBPVEEgVXBkYXRlICovXG4gICAgcHVibGljIEFtYXpvbkZyZWVSVE9TT1RBVXBkYXRlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZyZWVSVE9TT1RBVXBkYXRlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEZTeCBhbmQgYWNjZXNzIHRvIHJlbGF0ZWQgQVdTIHNlcnZpY2VzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRlN4Q29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRlN4Q29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBGU3ggYW5kIGFjY2VzcyB0byByZWxhdGVkIEFXUyBzZXJ2aWNlcyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkZTeENvbnNvbGVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25GU3hDb25zb2xlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRlN4IGFuZCBhY2Nlc3MgdG8gcmVsYXRlZCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIEFtYXpvbkZTeEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRlN4RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEZTeC4gKi9cbiAgICBwdWJsaWMgQW1hem9uRlN4UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRlN4UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIEZTeCB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBbWF6b25GU3hTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25GU3hTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBHbGFjaWVyIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uR2xhY2llckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uR2xhY2llckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBHbGFjaWVyIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uR2xhY2llclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkdsYWNpZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhY2Nlc3MgdG8gQW1hem9uIEF0aGVuYSBhbmQgdGhlIGRlcGVuZGVuY2llcyBuZWVkZWQgdG8gZW5hYmxlIHF1ZXJ5aW5nIGFuZCB3cml0aW5nIHJlc3VsdHMgdG8gczMgZnJvbSB0aGUgQW1hem9uIEF0aGVuYSBwbHVnaW4gaW4gQW1hem9uIEdyYWZhbmEuICovXG4gICAgcHVibGljIEFtYXpvbkdyYWZhbmFBdGhlbmFBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uR3JhZmFuYUF0aGVuYUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhY2Nlc3MgdG8gQW1hem9uIENsb3VkV2F0Y2ggYW5kIHRoZSBkZXBlbmRlbmNpZXMgbmVlZGVkIHRvIHVzZSBDbG91ZFdhdGNoIGFzIGEgZGF0YXNvdXJjZSB3aXRoaW4gQW1hem9uIE1hbmFnZWQgR3JhZmFuYS4gKi9cbiAgICBwdWJsaWMgQW1hem9uR3JhZmFuYUNsb3VkV2F0Y2hBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uR3JhZmFuYUNsb3VkV2F0Y2hBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgc2NvcGVkIGFjY2VzcyB0byBBbWF6b24gUmVkc2hpZnQgYW5kIHRoZSBkZXBlbmRlbmNpZXMgbmVlZGVkIHRvIHVzZSB0aGUgQW1hem9uIFJlZHNoaWZ0IHBsdWdpbiBpbiBBbWF6b24gR3JhZmFuYS4gKi9cbiAgICBwdWJsaWMgQW1hem9uR3JhZmFuYVJlZHNoaWZ0QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkdyYWZhbmFSZWRzaGlmdEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIG1hbmFnZWQgb3IgdXNlZCBieSBBbWF6b24gR3JhZmFuYS4gKi9cbiAgICBwdWJsaWMgQW1hem9uR3JhZmFuYVNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkdyYWZhbmFTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHVzZSBBbWF6b24gR3VhcmREdXR5LiAqL1xuICAgIHB1YmxpYyBBbWF6b25HdWFyZER1dHlGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkd1YXJkRHV0eUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB1c2UgQW1hem9uIEd1YXJkRHV0eSAqL1xuICAgIHB1YmxpYyBBbWF6b25HdWFyZER1dHlGdWxsQWNjZXNzVjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uR3VhcmREdXR5RnVsbEFjY2Vzc1YyKTtcbiAgICB9XG5cbiAgICAvKiogR3VhcmREdXR5IG1hbHdhcmUgcHJvdGVjdGlvbiB1c2VzIHRoZSBzZXJ2aWNlLWxpbmtlZCByb2xlIChTTFIpIG5hbWVkIEFXU1NlcnZpY2VSb2xlRm9yQW1hem9uR3VhcmREdXR5TWFsd2FyZVByb3RlY3Rpb24uIFRoaXMgc2VydmljZS1saW5rZWQgcm9sZSBhbGxvd3MgR3VhcmREdXR5IG1hbHdhcmUgcHJvdGVjdGlvbiB0byBwZXJmb3JtIGFnZW50LWxlc3Mgc2NhbnMgdG8gZGV0ZWN0IG1hbHdhcmUuIEl0IGFsbG93cyBHdWFyZER1dHkgdG8gY3JlYXRlIHNuYXBzaG90cyBpbiB5b3VyIGFjY291bnQsIGFuZCBzaGFyZSB0aGUgc25hcHNob3RzIHdpdGggdGhlIEd1YXJkRHV0eSBzZXJ2aWNlIGFjY291bnQgdG8gc2NhbiBmb3IgbWFsd2FyZS4gSXQgZXZhbHVhdGVzIHRoZXNlIHNoYXJlZCBzbmFwc2hvdHMgYW5kIGluY2x1ZGVzIHRoZSByZXRyaWV2ZWQgRUMyIGluc3RhbmNlIG1ldGFkYXRhIGluIHRoZSBHdWFyZER1dHkgTWFsd2FyZSBQcm90ZWN0aW9uIGZpbmRpbmdzLiBUaGUgQVdTU2VydmljZVJvbGVGb3JBbWF6b25HdWFyZER1dHlNYWx3YXJlUHJvdGVjdGlvbiBzZXJ2aWNlLWxpbmtlZCByb2xlIHRydXN0cyB0aGUgbWFsd2FyZS1wcm90ZWN0aW9uLmd1YXJkZHV0eS5hbWF6b25hd3MuY29tIHNlcnZpY2UgdG8gYXNzdW1lIHRoZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25HdWFyZER1dHlNYWx3YXJlUHJvdGVjdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkd1YXJkRHV0eU1hbHdhcmVQcm90ZWN0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBHdWFyZER1dHkgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFtYXpvbkd1YXJkRHV0eVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkd1YXJkRHV0eVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gR3VhcmQgRHV0eSAqL1xuICAgIHB1YmxpYyBBbWF6b25HdWFyZER1dHlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25HdWFyZER1dHlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBIZWFsdGhMYWtlIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFtYXpvbkhlYWx0aExha2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkhlYWx0aExha2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gSGVhbHRoTGFrZSBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25IZWFsdGhMYWtlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSGVhbHRoTGFrZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSG9uZXljb2RlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgdGhlIFNESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uSG9uZXljb2RlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Ib25leWNvZGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBIb25leWNvZGUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCB0aGUgU0RLLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Ib25leWNvZGVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Ib25leWNvZGVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEEgc2VydmljZS1saW5rZWQgcm9sZSByZXF1aXJlZCBmb3IgQW1hem9uIEhvbmV5Y29kZSB0byBhY2Nlc3MgeW91ciByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbkhvbmV5Y29kZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkhvbmV5Y29kZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSG9uZXljb2RlIFRlYW0gQXNzb2NpYXRpb24gdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCB0aGUgU0RLLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Ib25leWNvZGVUZWFtQXNzb2NpYXRpb25GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkhvbmV5Y29kZVRlYW1Bc3NvY2lhdGlvbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEhvbmV5Y29kZSBUZWFtIEFzc29jaWF0aW9uIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgdGhlIFNESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uSG9uZXljb2RlVGVhbUFzc29jaWF0aW9uUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSG9uZXljb2RlVGVhbUFzc29jaWF0aW9uUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBIb25leWNvZGUgV29ya2Jvb2sgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCB0aGUgU0RLLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Ib25leWNvZGVXb3JrYm9va0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSG9uZXljb2RlV29ya2Jvb2tGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBIb25leWNvZGUgV29ya2Jvb2sgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCB0aGUgU0RLLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Ib25leWNvZGVXb3JrYm9va1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkhvbmV5Y29kZVdvcmtib29rUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQW1hem9uIEluc3BlY3RvciBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIG5lZWRlZCB0byBwZXJmb3JtIGFnZW50LWxlc3Mgc2VjdXJpdHkgYXNzZXNzbWVudHMgKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yMkFnZW50bGVzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkluc3BlY3RvcjJBZ2VudGxlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBJbnNwZWN0b3IgYW5kIGFjY2VzcyB0byBvdGhlciByZWxhdGVkIHNlcnZpY2VzIHN1Y2ggYXMgb3JnYW5pemF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yMkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSW5zcGVjdG9yMkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gSW5zcGVjdG9yIGFuZCBhY2Nlc3MgdG8gb3RoZXIgcmVsYXRlZCBzZXJ2aWNlcyBzdWNoIGFzIG9yZ2FuaXphdGlvbnMgd2l0aCByZXN0cmljdGl2ZSBvcmdhbml6YXRpb25hbCBhY2Nlc3MuICovXG4gICAgcHVibGljIEFtYXpvbkluc3BlY3RvcjJGdWxsQWNjZXNzVjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSW5zcGVjdG9yMkZ1bGxBY2Nlc3NWMik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgaXMgYSBtYW5hZ2VkIHBvbGljeSB0aGF0IGN1c3RvbWVyIHNob3VsZCBhdHRhY2ggdG8gdGhlaXIgcm9sZXMgdG8gY29tbXVuaWNhdGUgd2l0aCBpbnNwZWN0b3Igc2VydmljZSBmb3IgQ0lTIHNjYW5zICovXG4gICAgcHVibGljIEFtYXpvbkluc3BlY3RvcjJNYW5hZ2VkQ2lzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkluc3BlY3RvcjJNYW5hZ2VkQ2lzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byB0aGUgQW1hem9uIGluc3BlY3RvcjIgc2VydmljZSBhbmQgcmVsZXZhbnQgc3VwcG9ydCBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25JbnNwZWN0b3IyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSW5zcGVjdG9yMlJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIEFtYXpvbiBJbnNwZWN0b3IgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBuZWVkZWQgdG8gcGVyZm9ybSBzZWN1cml0eSBhc3Nlc3NtZW50cyAqL1xuICAgIHB1YmxpYyBBbWF6b25JbnNwZWN0b3IyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSW5zcGVjdG9yMlNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEluc3BlY3Rvci4gKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25JbnNwZWN0b3JGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gSW5zcGVjdG9yLiAqL1xuICAgIHB1YmxpYyBBbWF6b25JbnNwZWN0b3JSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25JbnNwZWN0b3JSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBBbWF6b24gSW5zcGVjdG9yIGFjY2VzcyB0byBBV1MgU2VydmljZXMgbmVlZGVkIHRvIHBlcmZvcm0gc2VjdXJpdHkgYXNzZXNzbWVudHMgKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSW5zcGVjdG9yU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gS2VuZHJhIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uS2VuZHJhRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25LZW5kcmFGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gS2VuZHJhIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uS2VuZHJhUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2VuZHJhUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBLZXlzcGFjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uS2V5c3BhY2VzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25LZXlzcGFjZXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBLZXlzcGFjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uS2V5c3BhY2VzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2V5c3BhY2VzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEtleXNwYWNlcyBhbmQgcmVsYXRlZCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIEFtYXpvbktleXNwYWNlc1JlYWRPbmx5QWNjZXNzVjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2V5c3BhY2VzUmVhZE9ubHlBY2Nlc3NWMik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBLaW5lc2lzIEFuYWx5dGljcyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbktpbmVzaXNBbmFseXRpY3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktpbmVzaXNBbmFseXRpY3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gS2luZXNpcyBBbmFseXRpY3MgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25LaW5lc2lzQW5hbHl0aWNzUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2luZXNpc0FuYWx5dGljc1JlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIEFtYXpvbiBLaW5lc2lzIEZpcmVob3NlIERlbGl2ZXJ5IFN0cmVhbXMuICovXG4gICAgcHVibGljIEFtYXpvbktpbmVzaXNGaXJlaG9zZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2luZXNpc0ZpcmVob3NlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIEFtYXpvbiBLaW5lc2lzIEZpcmVob3NlIERlbGl2ZXJ5IFN0cmVhbXMuICovXG4gICAgcHVibGljIEFtYXpvbktpbmVzaXNGaXJlaG9zZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktpbmVzaXNGaXJlaG9zZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIHN0cmVhbXMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25LaW5lc2lzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25LaW5lc2lzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIHN0cmVhbXMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25LaW5lc2lzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2luZXNpc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEtpbmVzaXMgVmlkZW8gU3RyZWFtcyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbktpbmVzaXNWaWRlb1N0cmVhbXNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktpbmVzaXNWaWRlb1N0cmVhbXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgS2luZXNpcyBWaWRlbyBTdHJlYW1zIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uS2luZXNpc1ZpZGVvU3RyZWFtc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktpbmVzaXNWaWRlb1N0cmVhbXNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bGwgYWNjZXNzIHRvIEFXUyBMYXVuY2ggd2l6YXJkIGFuZCBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTGF1bmNoV2l6YXJkRnVsbEFjY2Vzc1YyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkxhdW5jaFdpemFyZEZ1bGxBY2Nlc3NWMik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBjdXN0b21lcnMgdG8gY2FsbCBMZXggcnVudGltZSBmcm9tIGNoYW5uZWxzICovXG4gICAgcHVibGljIEFtYXpvbkxleENoYW5uZWxzQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkxleENoYW5uZWxzQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIExleCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICBBbHNvIHByb3ZpZGVzIGFjY2VzcyB0byBjcmVhdGUgTGV4IFNlcnZpY2UgTGlua2VkIFJvbGVzIGFuZCBncmFudCBMZXggcGVybWlzc2lvbnMgdG8gaW52b2tlIGEgbGltaXRlZCBzZXQgb2YgTGFtYmRhIGZ1bmN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTGV4RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25MZXhGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gTGV4LiAqL1xuICAgIHB1YmxpYyBBbWF6b25MZXhSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25MZXhSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gTGV4IHRvIHJlcGxpY2F0ZSBMZXggcmVzb3VyY2VzIGFjcm9zcyByZWdpb25zIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25MZXhSZXBsaWNhdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25MZXhSZXBsaWNhdGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gTGV4IGNvbnZlcnNhdGlvbmFsIEFQSXMuICovXG4gICAgcHVibGljIEFtYXpvbkxleFJ1bkJvdHNPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkxleFJ1bkJvdHNPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgTGV4IFYyIGJvdHMgYWNjZXNzIHRvIGNhbGwgb3RoZXIgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25MZXhWMkJvdFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25MZXhWMkJvdFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBMb29rb3V0IGZvciBFcXVpcG1lbnQgb3BlcmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBbWF6b25Mb29rb3V0RXF1aXBtZW50RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Mb29rb3V0RXF1aXBtZW50RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIExvb2tvdXQgZm9yIEVxdWlwbWVudHMgKi9cbiAgICBwdWJsaWMgQW1hem9uTG9va291dEVxdWlwbWVudFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkxvb2tvdXRFcXVpcG1lbnRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdpdmVzIGFjY2VzcyB0byBhbGwgYWN0aW9ucyBmb3IgQW1hem9uIExvb2tvdXQgZm9yIE1ldHJpY3MgKi9cbiAgICBwdWJsaWMgQW1hem9uTG9va291dE1ldHJpY3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkxvb2tvdXRNZXRyaWNzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdpdmVzIGFjY2VzcyB0byBhbGwgcmVhZC1vbmx5IGFjdGlvbnMgZm9yIEFtYXpvbiBMb29rb3V0IGZvciBNZXRyaWNzICovXG4gICAgcHVibGljIEFtYXpvbkxvb2tvdXRNZXRyaWNzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTG9va291dE1ldHJpY3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBMb29rb3V0IGZvciBWaXNpb24gYW5kIHNjb3BlZCBhY2Nlc3MgdG8gcmVxdWlyZWQgc2VydmljZSBhbmQgY29uc29sZSBkZXBlbmRlbmNpZXMuICovXG4gICAgcHVibGljIEFtYXpvbkxvb2tvdXRWaXNpb25Db25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Mb29rb3V0VmlzaW9uQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBMb29rb3V0IGZvciBWaXNpb24gYW5kIHNjb3BlZCBhY2Nlc3MgdG8gcmVxdWlyZWQgc2VydmljZSBhbmQgY29uc29sZSBkZXBlbmRlbmNpZXMuICovXG4gICAgcHVibGljIEFtYXpvbkxvb2tvdXRWaXNpb25Db25zb2xlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTG9va291dFZpc2lvbkNvbnNvbGVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBMb29rb3V0IGZvciBWaXNpb24gYW5kIHNjb3BlZCBhY2Nlc3MgdG8gcmVxdWlyZWQgZGVwZW5kZW5jaWVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Mb29rb3V0VmlzaW9uRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Mb29rb3V0VmlzaW9uRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIExvb2tvdXQgZm9yIFZpc2lvbiBhbmQgc2NvcGVkIGFjY2VzcyB0byByZXF1aXJlZCBkZXBlbmRlbmNpZXMuICovXG4gICAgcHVibGljIEFtYXpvbkxvb2tvdXRWaXNpb25SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Mb29rb3V0VmlzaW9uUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdXNlcnMgcGVybWlzc2lvbiB0byByZXF1ZXN0IEFtYXpvbiBNYWNoaW5lIExlYXJuaW5nIGJhdGNoIHByZWRpY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNoaW5lTGVhcm5pbmdCYXRjaFByZWRpY3Rpb25zQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1hY2hpbmVMZWFybmluZ0JhdGNoUHJlZGljdGlvbnNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjcmVhdGUgYWNjZXNzIGZvciBub24tcHJlZGljdGlvbiBBbWF6b24gTWFjaGluZSBMZWFybmluZyByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbk1hY2hpbmVMZWFybmluZ0NyZWF0ZU9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaGluZUxlYXJuaW5nQ3JlYXRlT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBNYWNoaW5lIExlYXJuaW5nIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWFjaGluZUxlYXJuaW5nRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNoaW5lTGVhcm5pbmdGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHVzZXJzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGFuZCBkZWxldGUgdGhlIHJlYWwtdGltZSBlbmRwb2ludCBmb3IgQW1hem9uIE1hY2hpbmUgTGVhcm5pbmcgbW9kZWxzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNoaW5lTGVhcm5pbmdNYW5hZ2VSZWFsVGltZUVuZHBvaW50T25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNoaW5lTGVhcm5pbmdNYW5hZ2VSZWFsVGltZUVuZHBvaW50T25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIE1hY2hpbmUgTGVhcm5pbmcgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNoaW5lTGVhcm5pbmdSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNoaW5lTGVhcm5pbmdSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB1c2VycyBwZXJtaXNzaW9uIHRvIHJlcXVlc3QgQW1hem9uIE1hY2hpbmUgTGVhcm5pbmcgcmVhbC10aW1lIHByZWRpY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNoaW5lTGVhcm5pbmdSZWFsVGltZVByZWRpY3Rpb25Pbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1hY2hpbmVMZWFybmluZ1JlYWxUaW1lUHJlZGljdGlvbk9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgTWFjaGluZSBMZWFybmluZyB0byBjb25maWd1cmUgYW5kIHVzZSB5b3VyIFJlZHNoaWZ0IENsdXN0ZXJzIGFuZCBTMyBTdGFnaW5nIExvY2F0aW9ucyBmb3IgUmVkc2hpZnQgRGF0YSBTb3VyY2UuICovXG4gICAgcHVibGljIEFtYXpvbk1hY2hpbmVMZWFybmluZ1JvbGVmb3JSZWRzaGlmdERhdGFTb3VyY2VWMygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNoaW5lTGVhcm5pbmdSb2xlZm9yUmVkc2hpZnREYXRhU291cmNlVjMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTWFjaWUuICovXG4gICAgcHVibGljIEFtYXpvbk1hY2llRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNpZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgdGhlIHNlcnZpY2UtbGlua2VkIHJvbGUgb2YgQW1hem9uIE1hY2llLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNpZUhhbmRzaGFrZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaWVIYW5kc2hha2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBNYWNpZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWFjaWVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNpZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIE1hY2llIHJlYWQtb25seSBhY2Nlc3MgdG8gcmVzb3VyY2UgZGVwZW5kZW5jaWVzIGluIHlvdXIgYWNjb3VudCBpbiBvcmRlciB0byBlbmFibGUgZGF0YSBhbmFseXNpcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWFjaWVTZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNpZVNlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSBsaW5rZWQgcm9sZSBmb3IgQW1hem9uIE1hY2llICovXG4gICAgcHVibGljIEFtYXpvbk1hY2llU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaWVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBNYW5hZ2VkIEJsb2NrY2hhaW4gdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlICovXG4gICAgcHVibGljIEFtYXpvbk1hbmFnZWRCbG9ja2NoYWluQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFuYWdlZEJsb2NrY2hhaW5Db25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBNYW5hZ2VkIEJsb2NrY2hhaW4uICovXG4gICAgcHVibGljIEFtYXpvbk1hbmFnZWRCbG9ja2NoYWluRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYW5hZ2VkQmxvY2tjaGFpbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBNYW5hZ2VkIEJsb2NrY2hhaW4uICovXG4gICAgcHVibGljIEFtYXpvbk1hbmFnZWRCbG9ja2NoYWluUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFuYWdlZEJsb2NrY2hhaW5SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gTWFuYWdlZCBCbG9ja2NoYWluICovXG4gICAgcHVibGljIEFtYXpvbk1hbmFnZWRCbG9ja2NoYWluU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFuYWdlZEJsb2NrY2hhaW5TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIE1hbmFnZWQgQXBhY2hlIENhc3NhbmRyYSBTZXJ2aWNlICovXG4gICAgcHVibGljIEFtYXpvbk1DU0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTUNTRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gTWFuYWdlZCBBcGFjaGUgQ2Fzc2FuZHJhIFNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQW1hem9uTUNTUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTUNTUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgQVBJcyBpbiBBbWF6b24gTWVjaGFuaWNhbCBUdXJrLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NZWNoYW5pY2FsVHVya0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWVjaGFuaWNhbFR1cmtGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHJlYWQgb25seSBBUElzIGluIEFtYXpvbiBNZWNoYW5pY2FsIFR1cmsuICovXG4gICAgcHVibGljIEFtYXpvbk1lY2hhbmljYWxUdXJrUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWVjaGFuaWNhbFR1cmtSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBNZW1vcnlEQiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbk1lbW9yeURCRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NZW1vcnlEQkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBNZW1vcnlEQiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbk1lbW9yeURCUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWVtb3J5REJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIHJlcG9ydHMgaW5jbHVkaW5nIGZpbmFuY2lhbCBkYXRhIGZvciBhbGwgYXBwbGljYXRpb24gcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Nb2JpbGVBbmFseXRpY3NGaW5hbmNpYWxSZXBvcnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTW9iaWxlQW5hbHl0aWNzRmluYW5jaWFsUmVwb3J0QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIGFwcGxpY2F0aW9uIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTW9iaWxlQW5hbHl0aWNzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Nb2JpbGVBbmFseXRpY3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBub24gZmluYW5jaWFsIHJlcG9ydHMgZm9yIGFsbCBhcHBsaWNhdGlvbiByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbk1vYmlsZUFuYWx5dGljc05vbkZpbmFuY2lhbFJlcG9ydEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Nb2JpbGVBbmFseXRpY3NOb25GaW5hbmNpYWxSZXBvcnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB3cml0ZSBvbmx5IGFjY2VzcyB0byBwdXQgZXZlbnQgZGF0YSBmb3IgYWxsIGFwcGxpY2F0aW9uIHJlc291cmNlcy4gKFJlY29tbWVuZGVkIGZvciBTREsgaW50ZWdyYXRpb24pICovXG4gICAgcHVibGljIEFtYXpvbk1vYmlsZUFuYWx5dGljc1dyaXRlT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Nb2JpbGVBbmFseXRpY3NXcml0ZU9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBtYW5hZ2UgQW1hem9uIE1vbml0cm9uICovXG4gICAgcHVibGljIEFtYXpvbk1vbml0cm9uRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Nb25pdHJvbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b25NUSB2aWEgb3VyIEFQSS9TREsuICovXG4gICAgcHVibGljIEFtYXpvbk1RQXBpRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NUUFwaUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbk1RIHZpYSBvdXIgQVBJL1NESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTVFBcGlSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NUUFwaVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uTVEgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NUUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVFGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b25NUSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbk1RUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVFSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UgTGlua2VkIFJvbGUgUG9saWN5IGZvciBBV1MgQW1hem9uIE1RICovXG4gICAgcHVibGljIEFtYXpvbk1RU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVFTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgcmVhZG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBNU0sgQ29ubmVjdCAqL1xuICAgIHB1YmxpYyBBbWF6b25NU0tDb25uZWN0UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVNLQ29ubmVjdFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBmdWxsIGFjY2VzcyB0byBBbWF6b24gTVNLIGFuZCBvdGhlciByZXF1aXJlZCBwZXJtaXNzaW9ucyBmb3IgaXRzIGRlcGVuZGVuY2llcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTVNLRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NU0tGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSByZWFkb25seSBhY2Nlc3MgdG8gQW1hem9uIE1TSyAqL1xuICAgIHB1YmxpYyBBbWF6b25NU0tSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NU0tSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gQWlyZmxvdyBTZXJ2ZXJsZXNzIFNlcnZpY2UgdG8gbWFuYWdlIG5ldHdvcmtpbmcgZm9yIHlvdXIgd29ya2Zsb3dzIGFuZCBhY2Nlc3Mgb3RoZXIgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFtYXpvbk1XQUFTZXJ2ZXJsZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVdBQVNlcnZlcmxlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBTZXJ2aWNlIExpbmtlZCBSb2xlIHVzZWQgYnkgQW1hem9uIE1hbmFnZWQgV29ya2Zsb3dzIGZvciBBcGFjaGUgQWlyZmxvdy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTVdBQVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1XQUFTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhY2Nlc3MgdG8gcmVzb3VyY2VzIG5lZWRlZCBieSBOaW1ibGUgU3R1ZGlvIExhdW5jaCBQcm9maWxlIHdvcmtlcnMuIEF0dGFjaCB0aGlzIHBvbGljeSB0byBFQzIgaW5zdGFuY2VzIGNyZWF0ZWQgYnkgTmltYmxlIFN0dWRpbyBCdWlsZGVyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25OaW1ibGVTdHVkaW9MYXVuY2hQcm9maWxlV29ya2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk5pbWJsZVN0dWRpb0xhdW5jaFByb2ZpbGVXb3JrZXIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgYWNjZXNzIHRvIEFtYXpvbiBOaW1ibGUgU3R1ZGlvIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHN0dWRpbyBhZG1pbiBhbmQgcmVsYXRlZCBzdHVkaW8gcmVzb3VyY2VzIGluIG90aGVyIHNlcnZpY2VzLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8gdGhlIEFkbWluIHJvbGUgYXNzb2NpYXRlZCB3aXRoIHlvdXIgc3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBBbWF6b25OaW1ibGVTdHVkaW9TdHVkaW9BZG1pbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25OaW1ibGVTdHVkaW9TdHVkaW9BZG1pbik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhY2Nlc3MgdG8gQW1hem9uIE5pbWJsZSBTdHVkaW8gcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3R1ZGlvIHVzZXIgYW5kIHJlbGF0ZWQgc3R1ZGlvIHJlc291cmNlcyBpbiBvdGhlciBzZXJ2aWNlcy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHRoZSBVc2VyIHJvbGUgYXNzb2NpYXRlZCB3aXRoIHlvdXIgc3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBBbWF6b25OaW1ibGVTdHVkaW9TdHVkaW9Vc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk5pbWJsZVN0dWRpb1N0dWRpb1VzZXIpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgT3JhY2xlIERhdGFiYXNlQEFXUyB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uT0RCU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT0RCU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gT21pY3MgYW5kIG90aGVyIHJlcXVpcmVkIEFXUyBTZXJ2aWNlcy4gVGhpcyBwb2xpY3kgYWxsb3dzIHRoZSB1c2VyIHRvIHZpZXcgYW5kIGFjY2VwdCBSQU0gc2hhcmUgaW52aXRhdGlvbnMgdG8gYWNjZXNzIHJlc291cmNlcyBvdXRzaWRlIG9mIHRoZSB1c2VyJ3MgQVdTIGFjY291bnQuICovXG4gICAgcHVibGljIEFtYXpvbk9taWNzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PbWljc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIE9taWNzICovXG4gICAgcHVibGljIEFtYXpvbk9taWNzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT21pY3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IGFjY2VzcyB0byBhbGwgQW1hem9uIE9uZSBFbnRlcnByaXNlIHJlc291cmNlcyBhbmQgb3BlcmF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uT25lRW50ZXJwcmlzZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT25lRW50ZXJwcmlzZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgbGltaXRlZCByZWFkIGFuZCB3cml0ZSBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IGRldmljZSBpbnN0YWxsYXRpb24gYW5kIGFjdGl2YXRpb24uICovXG4gICAgcHVibGljIEFtYXpvbk9uZUVudGVycHJpc2VJbnN0YWxsZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT25lRW50ZXJwcmlzZUluc3RhbGxlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyByZWFkIG9ubHkgcGVybWlzc2lvbnMgdG8gYWxsIEFtYXpvbiBPbmUgRW50ZXJwcmlzZSByZXNvdXJjZXMgYW5kIG9wZXJhdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvbk9uZUVudGVycHJpc2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PbmVFbnRlcnByaXNlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQW1hem9uIE9wZW5TZWFyY2ggRGFzaGJvYXJkcyBTZXJ2aWNlIHRvIGFjY2VzcyBvdGhlciBBV1Mgc2VydmljZXMgc3VjaCBhcyBDbG91ZFdhdGNoIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFtYXpvbk9wZW5TZWFyY2hEYXNoYm9hcmRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT3BlblNlYXJjaERhc2hib2FyZHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBPcGVuU2VhcmNoIERpcmVjdFF1ZXJ5IFNlcnZpY2UgdG8gYWNjZXNzIEFXUyBHbHVlIEFQSXMgZm9yIGNyZWF0aW5nIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uT3BlblNlYXJjaERpcmVjdFF1ZXJ5R2x1ZUNyZWF0ZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PcGVuU2VhcmNoRGlyZWN0UXVlcnlHbHVlQ3JlYXRlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBPcGVuU2VhcmNoIEluZ2VzdGlvbiB0byBhY2Nlc3Mgb3RoZXIgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PcGVuU2VhcmNoSW5nZXN0aW9uRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PcGVuU2VhcmNoSW5nZXN0aW9uRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBPcGVuU2VhcmNoIEluZ2VzdGlvbiBTZXJ2aWNlICovXG4gICAgcHVibGljIEFtYXpvbk9wZW5TZWFyY2hJbmdlc3Rpb25SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PcGVuU2VhcmNoSW5nZXN0aW9uUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIE9wZW5TZWFyY2ggSW5nZXN0aW9uIFNlcnZpY2UgdG8gYWNjZXNzIG90aGVyIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uT3BlblNlYXJjaEluZ2VzdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9wZW5TZWFyY2hJbmdlc3Rpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IEFtYXpvbiBPcGVuU2VhcmNoIFNlcnZlcmxlc3MgdG8gYWNjZXNzIG90aGVyIEFXUyBzZXJ2aWNlcyBzdWNoIGFzIENsb3VkV2F0Y2ggQVBJcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uT3BlblNlYXJjaFNlcnZlcmxlc3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PcGVuU2VhcmNoU2VydmVybGVzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBBbWF6b24gQ29nbml0byBjb25maWd1cmF0aW9uIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFtYXpvbk9wZW5TZWFyY2hTZXJ2aWNlQ29nbml0b0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PcGVuU2VhcmNoU2VydmljZUNvZ25pdG9BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB0aGUgQW1hem9uIE9wZW5TZWFyY2ggU2VydmljZSBjb25maWd1cmF0aW9uIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFtYXpvbk9wZW5TZWFyY2hTZXJ2aWNlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PcGVuU2VhcmNoU2VydmljZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBBbWF6b24gT3BlblNlYXJjaCBTZXJ2aWNlIGNvbmZpZ3VyYXRpb24gc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uT3BlblNlYXJjaFNlcnZpY2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PcGVuU2VhcmNoU2VydmljZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgQW1hem9uIE9wZW5TZWFyY2ggU2VydmljZSB0byBhY2Nlc3Mgb3RoZXIgQVdTIHNlcnZpY2VzIHN1Y2ggYXMgRUMyIE5ldHdvcmtpbmcgQVBJcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uT3BlblNlYXJjaFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9wZW5TZWFyY2hTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBQZXJzb25hbGl6ZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gQWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgKGUuZy4sIFMzLCBDbG91ZFdhdGNoKS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUGVyc29uYWxpemVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblBlcnNvbmFsaXplRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byBBbWF6b24gUG9sbHkgc2VydmljZSBhbmQgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Qb2xseUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUG9sbHlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIFBvbGx5IHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUG9sbHlSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Qb2xseVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFXUyBNYW5hZ2VkIFByb21ldGhldXMgcmVzb3VyY2VzIGluIHRoZSBBV1MgY29uc29sZSAqL1xuICAgIHB1YmxpYyBBbWF6b25Qcm9tZXRoZXVzQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUHJvbWV0aGV1c0NvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFXUyBNYW5hZ2VkIFByb21ldGhldXMgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFtYXpvblByb21ldGhldXNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblByb21ldGhldXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGFjY2VzcyB0byBydW4gcXVlcmllcyBhZ2FpbnN0IEFXUyBNYW5hZ2VkIFByb21ldGhldXMgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFtYXpvblByb21ldGhldXNRdWVyeUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Qcm9tZXRoZXVzUXVlcnlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgd3JpdGUgb25seSBhY2Nlc3MgdG8gQVdTIE1hbmFnZWQgUHJvbWV0aGV1cyB3b3Jrc3BhY2VzICovXG4gICAgcHVibGljIEFtYXpvblByb21ldGhldXNSZW1vdGVXcml0ZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Qcm9tZXRoZXVzUmVtb3RlV3JpdGVBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIFJlc291cmNlcyBtYW5hZ2VkIG9yIHVzZWQgYnkgQW1hem9uIE1hbmFnZWQgU2VydmljZSBmb3IgUHJvbWV0aGV1cyBDb2xsZWN0b3IgKi9cbiAgICBwdWJsaWMgQW1hem9uUHJvbWV0aGV1c1NjcmFwZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Qcm9tZXRoZXVzU2NyYXBlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZGV2ZWxvcGVyIGFjY2VzcyB0byBlbmFibGUgaW50ZXJhY3Rpb25zIHdpdGggQW1hem9uIFEgKi9cbiAgICBwdWJsaWMgQW1hem9uUURldmVsb3BlckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25RRGV2ZWxvcGVyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gZW5hYmxlIGludGVyYWN0aW9ucyB3aXRoIEFtYXpvbiBRICovXG4gICAgcHVibGljIEFtYXpvblFGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblFGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFFMREIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25RTERCQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUUxEQkNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFFMREIgdmlhIHRoZSBzZXJ2aWNlIEFQSS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUUxEQkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUUxEQkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBRTERCLiAqL1xuICAgIHB1YmxpYyBBbWF6b25RTERCUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUUxEQlJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBSRFMgdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvblJEU0JldGFTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNCZXRhU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIFJEUyBDdXN0b20gdG8gcGVyZm9ybSB2YXJpb3VzIGF1dG9tYXRpb24gYWN0aW9ucyBhbmQgZGF0YWJhc2UgbWFuYWdlbWVudCB0YXNrcyB0aHJvdWdoIGFuIEVDMiBpbnN0YW5jZSBwcm9maWxlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNDdXN0b21JbnN0YW5jZVByb2ZpbGVSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU0N1c3RvbUluc3RhbmNlUHJvZmlsZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gUkRTIEN1c3RvbSBQcmV2aWV3IFNlcnZpY2UgUm9sZSBQb2xpY3kgKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTQ3VzdG9tUHJldmlld1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU0N1c3RvbVByZXZpZXdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gUkRTIEN1c3RvbSB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTQ3VzdG9tU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTQ3VzdG9tU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgZnVsbCBhY2Nlc3MgdG8gdXNlIHRoZSBSRFMgZGF0YSBBUElzLCBzZWNyZXQgc3RvcmUgQVBJcyBmb3IgUkRTIGRhdGFiYXNlIGNyZWRlbnRpYWxzLCBhbmQgREIgY29uc29sZSBxdWVyeSBtYW5hZ2VtZW50IEFQSXMgdG8gZXhlY3V0ZSBTUUwgc3RhdGVtZW50cyBvbiBBdXJvcmEgU2VydmVybGVzcyBjbHVzdGVycyBpbiB0aGUgQVdTIGFjY291bnQuICovXG4gICAgcHVibGljIEFtYXpvblJEU0RhdGFGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU0RhdGFGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgUkRTIHRvIGFjY2VzcyBEaXJlY3RvcnkgU2VydmljZSBNYW5hZ2VkIEFEIG9uIGJlaGFsZiBvZiB0aGUgY3VzdG9tZXIgZm9yIGRvbWFpbi1qb2luZWQgU1FMIFNlcnZlciBEQiBpbnN0YW5jZXMuICovXG4gICAgcHVibGljIEFtYXpvblJEU0RpcmVjdG9yeVNlcnZpY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTRGlyZWN0b3J5U2VydmljZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBDbG91ZHdhdGNoIGZvciBSRFMgRW5oYW5jZWQgTW9uaXRvcmluZyAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNFbmhhbmNlZE1vbml0b3JpbmdSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU0VuaGFuY2VkTW9uaXRvcmluZ1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gUkRTIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gUkRTIFBlcmZvcm1hbmNlIEluc2lnaHRzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNQZXJmb3JtYW5jZUluc2lnaHRzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNQZXJmb3JtYW5jZUluc2lnaHRzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFJlYWQtT25seSBwb2xpY3kgZm9yIFJEUyBQZXJmb3JtYW5jZSBJbnNpZ2h0cyAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNQZXJmb3JtYW5jZUluc2lnaHRzUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTUGVyZm9ybWFuY2VJbnNpZ2h0c1JlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFJEUyBQcmV2aWV3IFNlcnZpY2UgUm9sZSBQb2xpY3kgKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTUHJldmlld1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU1ByZXZpZXdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFJEUyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblJEU1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBSRFMgdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvblJEU1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gcnVuIFNRTCBjb21tYW5kcyB0byBjb3B5LCBsb2FkLCB1bmxvYWQsIHF1ZXJ5LCBhbmQgYW5hbHl6ZSBkYXRhIG9uIEFtYXpvbiBSZWRzaGlmdC4gVGhlIHBvbGljeSBhbHNvIGdyYW50cyBwZXJtaXNzaW9ucyB0byBydW4gc2VsZWN0IHN0YXRlbWVudHMgZm9yIHJlbGF0ZWQgc2VydmljZXMsIHN1Y2ggYXMgQW1hem9uIFMzLCBBbWF6b24gQ2xvdWRXYXRjaCBsb2dzLCBBbWF6b24gU2FnZU1ha2VyLCBvciBBV1MgR2x1ZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUmVkc2hpZnRBbGxDb21tYW5kc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVkc2hpZnRBbGxDb21tYW5kc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gUmVkc2hpZnQgRGF0YSBBUElzLiBUaGlzIHBvbGljeSBhbHNvIGdyYW50cyBzY29wZWQgYWNjZXNzIHRvIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWRzaGlmdERhdGFGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJlZHNoaWZ0RGF0YUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIGlzIGFuIGVhc2Utb2YtdXNlIHBvbGljeSBmb3IgcnVubmluZyBxdWVyaWVzIHdpdGggQW1hem9uIFJlZHNoaWZ0IEZlZGVyYXRlZCBBdXRob3JpemF0aW9uICovXG4gICAgcHVibGljIEFtYXpvblJlZHNoaWZ0RmVkZXJhdGVkQXV0aG9yaXphdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWRzaGlmdEZlZGVyYXRlZEF1dGhvcml6YXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gUmVkc2hpZnQgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWRzaGlmdEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVkc2hpZnRGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBSZWRzaGlmdCBRdWVyeSBFZGl0b3IgYW5kIHRvIHNhdmVkIHF1ZXJpZXMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWRzaGlmdFF1ZXJ5RWRpdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJlZHNoaWZ0UXVlcnlFZGl0b3IpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBSZWRzaGlmdCBRdWVyeSBFZGl0b3IgVjIgb3BlcmF0aW9ucyBhbmQgcmVzb3VyY2VzLiBUaGlzIHBvbGljeSBhbHNvIGdyYW50cyBhY2Nlc3MgdG8gb3RoZXIgcmVxdWlyZWQgc2VydmljZXMuIFRoaXMgaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gbGlzdCB0aGUgQW1hem9uIFJlZHNoaWZ0IGNsdXN0ZXJzLCByZWFkIGtleXMgYW5kIGFsaWFzZXMgaW4gQVdTIEtNUyBhbmQgbWFuYWdlIHRoZSBRdWVyeSBFZGl0b3IgVjIgc2VjcmV0cyBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWRzaGlmdFF1ZXJ5RWRpdG9yVjJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJlZHNoaWZ0UXVlcnlFZGl0b3JWMkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdGhlIGFiaWxpdHkgdG8gd29yayB3aXRoIEFtYXpvbiBSZWRzaGlmdCBRdWVyeSBFZGl0b3IgVjIgd2l0aG91dCBzaGFyaW5nIHJlc291cmNlcy4gVGhlIGdyYW50ZWQgcHJpbmNpcGFsIGNhbiBvbmx5IHJlYWQsIHVwZGF0ZSBhbmQgZGVsZXRlIGl0cyBvd24gcmVzb3VyY2VzIGJ1dCBjYW5ub3Qgc2hhcmUgdGhlbS4gVGhpcyBwb2xpY3kgYWxzbyBncmFudHMgYWNjZXNzIHRvIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzLiBUaGlzIGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIGxpc3QgdGhlIEFtYXpvbiBSZWRzaGlmdCBjbHVzdGVycyBhbmQgbWFuYWdlIHRoZSBRdWVyeSBFZGl0b3IgVjIgc2VjcmV0cyBvZiB0aGUgcHJpbmNpcGFsIGluIEFXUyBTZWNyZXRzIE1hbmFnZXIuICovXG4gICAgcHVibGljIEFtYXpvblJlZHNoaWZ0UXVlcnlFZGl0b3JWMk5vU2hhcmluZygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWRzaGlmdFF1ZXJ5RWRpdG9yVjJOb1NoYXJpbmcpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdGhlIGFiaWxpdHkgdG8gd29yayB3aXRoIEFtYXpvbiBSZWRzaGlmdCBRdWVyeSBFZGl0b3IgVjIgd2l0aCBsaW1pdGVkIHNoYXJpbmcgb2YgcmVzb3VyY2VzLiBUaGUgZ3JhbnRlZCBwcmluY2lwYWwgY2FuIHJlYWQsIHdyaXRlIGFuZCBzaGFyZSBpdHMgb3duIHJlc291cmNlcy4gVGhlIGdyYW50ZWQgcHJpbmNpcGFsIGNhbiByZWFkIHRoZSByZXNvdXJjZXMgc2hhcmVkIHdpdGggaXRzIHRlYW0gYnV0IGNhbm5vdCB1cGRhdGUgdGhlbS4gVGhpcyBwb2xpY3kgYWxzbyBncmFudHMgYWNjZXNzIHRvIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzLiBUaGlzIGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIGxpc3QgdGhlIEFtYXpvbiBSZWRzaGlmdCBjbHVzdGVycyBhbmQgbWFuYWdlIHRoZSBRdWVyeSBFZGl0b3IgVjIgc2VjcmV0cyBvZiB0aGUgcHJpbmNpcGFsIGluIEFXUyBTZWNyZXRzIE1hbmFnZXIuICovXG4gICAgcHVibGljIEFtYXpvblJlZHNoaWZ0UXVlcnlFZGl0b3JWMlJlYWRTaGFyaW5nKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJlZHNoaWZ0UXVlcnlFZGl0b3JWMlJlYWRTaGFyaW5nKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHRoZSBhYmlsaXR5IHRvIHdvcmsgd2l0aCBBbWF6b24gUmVkc2hpZnQgUXVlcnkgRWRpdG9yIFYyIHdpdGggc2hhcmluZyBvZiByZXNvdXJjZXMuIFRoZSBncmFudGVkIHByaW5jaXBhbCBjYW4gcmVhZCwgd3JpdGUgYW5kIHNoYXJlIGl0cyBvd24gcmVzb3VyY2VzLiBUaGUgZ3JhbnRlZCBwcmluY2lwYWwgY2FuIHJlYWQgYW5kIHVwZGF0ZSB0aGUgcmVzb3VyY2VzIHNoYXJlZCB3aXRoIGl0cyB0ZWFtLiBUaGlzIHBvbGljeSBhbHNvIGdyYW50cyBhY2Nlc3MgdG8gb3RoZXIgcmVxdWlyZWQgc2VydmljZXMuIFRoaXMgaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gbGlzdCB0aGUgQW1hem9uIFJlZHNoaWZ0IGNsdXN0ZXJzIGFuZCBtYW5hZ2UgdGhlIFF1ZXJ5IEVkaXRvciBWMiBzZWNyZXRzIG9mIHRoZSBwcmluY2lwYWwgaW4gQVdTIFNlY3JldHMgTWFuYWdlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uUmVkc2hpZnRRdWVyeUVkaXRvclYyUmVhZFdyaXRlU2hhcmluZygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWRzaGlmdFF1ZXJ5RWRpdG9yVjJSZWFkV3JpdGVTaGFyaW5nKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gUmVkc2hpZnQgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWRzaGlmdFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJlZHNoaWZ0UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIFJlZHNoaWZ0IHRvIGNhbGwgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFtYXpvblJlZHNoaWZ0U2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVkc2hpZnRTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHNwZWNpZmllcyByZWtvZ25pdGlvbiBhbmQgczMgcGVybWlzc2lvbnMgcmVxdWlyZWQgYnkgQW1hem9uIFJla29nbml0aW9uIEN1c3RvbSBMYWJlbHMgZmVhdHVyZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUmVrb2duaXRpb25DdXN0b21MYWJlbHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJla29nbml0aW9uQ3VzdG9tTGFiZWxzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFjY2VzcyB0byBhbGwgQW1hem9uIFJla29nbml0aW9uIEFQSXMgKi9cbiAgICBwdWJsaWMgQW1hem9uUmVrb2duaXRpb25GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJla29nbml0aW9uRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFjY2VzcyB0byBhbGwgUmVhZCByZWtvZ25pdGlvbiBBUElzICovXG4gICAgcHVibGljIEFtYXpvblJla29nbml0aW9uUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVrb2duaXRpb25SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBSZWtvZ25pdGlvbiB0byBjYWxsIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uUmVrb2duaXRpb25TZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWtvZ25pdGlvblNlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIFJvdXRlIDUzIEF1dG8gTmFtaW5nIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNBdXRvTmFtaW5nRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzQXV0b05hbWluZ0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIGFsbCBSb3V0ZSA1MyBBdXRvIE5hbWluZyBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzQXV0b05hbWluZ1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNBdXRvTmFtaW5nUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWdpc3RyYW50IGxldmVsIGFjY2VzcyB0byBSb3V0ZSA1MyBBdXRvIE5hbWluZyBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzQXV0b05hbWluZ1JlZ2lzdHJhbnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M0F1dG9OYW1pbmdSZWdpc3RyYW50QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIFJvdXRlNTMgRG9tYWlucyBhY3Rpb25zIGFuZCBDcmVhdGUgSG9zdGVkIFpvbmUgdG8gYWxsb3cgSG9zdGVkIFpvbmUgY3JlYXRpb24gYXMgcGFydCBvZiBkb21haW4gcmVnaXN0cmF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M0RvbWFpbnNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNEb21haW5zRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBSb3V0ZTUzIERvbWFpbnMgbGlzdCBhbmQgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M0RvbWFpbnNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzRG9tYWluc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIEFtYXpvbiBSb3V0ZSA1MyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBSb3V0ZSA1MyBQcm9maWxlIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M1Byb2ZpbGVzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzUHJvZmlsZXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIFJvdXRlIDUzIFByb2ZpbGUgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzUHJvZmlsZXNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzUHJvZmlsZXNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIEFtYXpvbiBSb3V0ZSA1MyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gUm91dGUgNTMgUmVjb3ZlcnkgQ2x1c3RlciAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzUmVjb3ZlcnlDbHVzdGVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzUmVjb3ZlcnlDbHVzdGVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFJvdXRlIDUzIFJlY292ZXJ5IENsdXN0ZXIgKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M1JlY292ZXJ5Q2x1c3RlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNSZWNvdmVyeUNsdXN0ZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBSb3V0ZSA1MyBSZWNvdmVyeSBDb250cm9sIENvbmZpZyAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzUmVjb3ZlcnlDb250cm9sQ29uZmlnRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzUmVjb3ZlcnlDb250cm9sQ29uZmlnRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFJvdXRlIDUzIFJlY292ZXJ5IENvbnRyb2wgQ29uZmlnICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNSZWNvdmVyeUNvbnRyb2xDb25maWdSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzUmVjb3ZlcnlDb250cm9sQ29uZmlnUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gUm91dGUgNTMgUmVjb3ZlcnkgUmVhZGluZXNzICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNSZWNvdmVyeVJlYWRpbmVzc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M1JlY292ZXJ5UmVhZGluZXNzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFJvdXRlIDUzIFJlY292ZXJ5IFJlYWRpbmVzcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzUmVjb3ZlcnlSZWFkaW5lc3NSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzUmVjb3ZlcnlSZWFkaW5lc3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bGwgYWNjZXNzIHBvbGljeSBmb3IgUm91dGUgNTMgUmVzb2x2ZXIgKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M1Jlc29sdmVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzUmVzb2x2ZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUmVhZCBvbmx5IHBvbGljeSBmb3IgUm91dGUgNTMgUmVzb2x2ZXIgKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M1Jlc29sdmVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M1Jlc29sdmVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgYnVja2V0cyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblMzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBV1MgTGFtYmRhIGZ1bmN0aW9ucyBwZXJtaXNzaW9ucyB0byBpbnRlcmFjdCB3aXRoIEFtYXpvbiBTMyBPYmplY3QgTGFtYmRhLiBBbHNvIGdyYW50cyBMYW1iZGEgcGVybWlzc2lvbnMgdG8gd3JpdGUgdG8gQ2xvdWRXYXRjaCBMb2dzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM09iamVjdExhbWJkYUV4ZWN1dGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNPYmplY3RMYW1iZGFFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFMzIG9uIE91dHBvc3RzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNPdXRwb3N0c0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNPdXRwb3N0c0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBTMyBvbiBPdXRwb3N0cyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblMzT3V0cG9zdHNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM091dHBvc3RzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIGFsbCBidWNrZXRzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIFMzIHRhYmxlIGJ1Y2tldHMuICovXG4gICAgcHVibGljIEFtYXpvblMzVGFibGVzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM1RhYmxlc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIG1hbmFnZWQgcG9saWN5IGdyYW50cyBBV1MgTGFrZSBGb3JtYXRpb24gcGVybWlzc2lvbnMgdG8gYWN0IG9uIGFsbCB0YWJsZSBidWNrZXRzLCBuYW1lc3BhY2VzLCBhbmQgdGFibGVzIHdpdGhpbiB0aGUgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNUYWJsZXNMYWtlRm9ybWF0aW9uU2VydmljZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNUYWJsZXNMYWtlRm9ybWF0aW9uU2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIGFsbCBTMyB0YWJsZSBidWNrZXRzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM1RhYmxlc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzVGFibGVzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIHJvbGUgcG9saWN5IHVzZWQgYnkgdGhlIEFXUyBTZXJ2aWNlIENhdGFsb2cgc2VydmljZSB0byBwcm92aXNpb24gcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIENvZGVQaXBlbGluZSwgQ29kZUJ1aWxkLCBDb2RlQ29tbWl0LCBHbHVlLCBDbG91ZEZvcm1hdGlvbiwgZXRjLC4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyQWRtaW5TZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyQWRtaW5TZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgQW1hem9uIFNhZ2VNYWtlciBDYW52YXMgdG8gdXNlIEFJIHNlcnZpY2VzIHRvIHN1cHBvcnQgcmVhZHkgdG8gdXNlIEFJIHNvbHV0aW9ucy4gVGhpcyBwb2xpY3kgd2lsbCBhZGQgbW9yZSBtdXRhdGluZyBwZXJtaXNzaW9ucyBmb3Igc2VydmljZXMgYXMgQW1hem9uIFNhZ2VNYWtlciBDYW52YXMgYWRkcyBzdXBwb3J0LiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJDYW52YXNBSVNlcnZpY2VzQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckNhbnZhc0FJU2VydmljZXNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gdXNlIEFtYXpvbiBCZWRyb2NrIGluIFNhZ2VNYWtlciBDYW52YXMgYnkgcHJvdmlkaW5nIGFjY2VzcyB0byBkb3duc3RyZWFtIHNlcnZpY2VzIHN1Y2ggYXMgUzMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckNhbnZhc0JlZHJvY2tBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyQ2FudmFzQmVkcm9ja0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTYWdlTWFrZXIgcmVzb3VyY2VzIGFuZCBvcGVyYXRpb25zIGZvciBkYXRhIHByZXBhcmF0aW9uIGluIENhbnZhcy4gVGhlIHBvbGljeSBhbHNvIHByb3ZpZGVzIHNlbGVjdCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyAoZS5nLiwgUzMsIElBTSwgS01TLCBSRFMsIENsb3VkV2F0Y2ggTG9ncywgUmVkc2hpZnQsIEF0aGVuYSwgR2x1ZSwgRXZlbnRCcmlkZ2UsIFNlY3JldHMgTWFuYWdlcikuIFRoaXMgcG9saWN5IHNob3VsZCBiZSBhdHRhY2hlZCB0byB0aGUgQW1hem9uIFNhZ2VNYWtlciBEb21haW4vVXNlciBQcm9maWxlIGV4ZWN1dGlvbiByb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJDYW52YXNEYXRhUHJlcEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyQ2FudmFzRGF0YVByZXBGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBTYWdlTWFrZXIgQ2FudmFzIHRvIGNyZWF0ZSwgbWFuYWdlIGFuZCB2aWV3IGVuZHBvaW50IGRldGFpbHMgZm9yIGVuZHBvaW50cyBjcmVhdGVkIHRocm91Z2ggQ2FudmFzLiBBbGxvd3MgQW1hem9uIFNhZ2VNYWtlciBDYW52YXMgdG8gcmV0cmlldmUgZW5kcG9pbnQgaW52b2NhdGlvbiBtZXRyaWNzIGZyb20gQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyQ2FudmFzRGlyZWN0RGVwbG95QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckNhbnZhc0RpcmVjdERlcGxveUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byBBbWF6b24gRU1SIFNlcnZlcmxlc3MgZm9yIHNlcnZpY2VzIHN1Y2ggYXMgUzMsIHVzZWQgYnkgQW1hem9uIFNhZ2VNYWtlciBDYW52YXMgZm9yIGxhcmdlIGRhdGEgcHJvY2Vzc2luZy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyQ2FudmFzRU1SU2VydmVybGVzc0V4ZWN1dGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyQ2FudmFzRU1SU2VydmVybGVzc0V4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgY29tbW9ubHkgbmVlZGVkIHRvIHVzZSBTYWdlTWFrZXIgQ2FudmFzIHdpdGggQW1hem9uIEZvcmVjYXN0LiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJDYW52YXNGb3JlY2FzdEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJDYW52YXNGb3JlY2FzdEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTYWdlTWFrZXIgQ2FudmFzIHJlc291cmNlcyBhbmQgb3BlcmF0aW9ucy4gVGhlIHBvbGljeSBhbHNvIHByb3ZpZGVzIHNlbGVjdCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyAoZS5nLiwgUzMsIElBTSwgVlBDLCBFQ1IsIENsb3VkV2F0Y2ggTG9ncywgUmVkc2hpZnQsIFNlY3JldHMgTWFuYWdlciwgYW5kIEZvcmVjYXN0KS4gVGhpcyBwb2xpY3kgc2hvdWxkIGJlIGF0dGFjaGVkIHRvIHRoZSBBbWF6b24gU2FnZU1ha2VyIERvbWFpbi9Vc2VyIFByb2ZpbGUgZXhlY3V0aW9uIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckNhbnZhc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyQ2FudmFzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBBbWF6b24gU2FnZU1ha2VyIENhbnZhcyB0byB1c2UgdGhlIFNhZ2VNYWtlciBEYXRhIFNjaWVuY2UgQXNzaXN0YW50IHNlcnZpY2UuIFRoZSBEYXRhIFNjaWVuY2UgQXNzaXN0YW50IGN1cnJlbnRseSB1c2VzIGJvdGggQW1hem9uIFNhZ2VNYWtlciBhbmQgQW1hem9uIFEgRGV2ZWxvcGVyIHRvIHByb2Nlc3MgdXNlciBwcm9tcHRzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJDYW52YXNTTURhdGFTY2llbmNlQXNzaXN0YW50QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckNhbnZhc1NNRGF0YVNjaWVuY2VBc3Npc3RhbnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgY29tbW9ubHkgbmVlZGVkIHRvIHVzZSBBbWF6b24gU2FnZU1ha2VyIENsdXN0ZXIuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckNsdXN0ZXJJbnN0YW5jZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyQ2x1c3Rlckluc3RhbmNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIE1hbmFnZWQgcG9saWN5IGZvciBTZXJ2aWNlIExpbmtlZCBSb2xlIGZvciBBbWF6b24gU2FnZU1ha2VyIENvcmUgU2VydmljZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyQ29yZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckNvcmVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIG5lY2Vzc2FyeSBmb3IgU2FnZU1ha2VyIEVkZ2UgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgYSBkZXZpY2UgZmxlZXQgZm9yIHRoZSBjdXN0b21lciB1c2luZyB0aGUgZGVmYXVsdCBjbG91ZCBjb25uZWN0aW9uLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJFZGdlRGV2aWNlRmxlZXRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyRWRnZURldmljZUZsZWV0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gZW5hYmxlIHRoZSBvZmZsaW5lIHN0b3JlIGZvciBhbiBBbWF6b24gU2FnZU1ha2VyIEZlYXR1cmVTdG9yZSBmZWF0dXJlIGdyb3VwLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJGZWF0dXJlU3RvcmVBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyRmVhdHVyZVN0b3JlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFNhZ2VNYWtlciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gQWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgKGUuZy4sIFMzLCBFQ1IsIENsb3VkV2F0Y2ggTG9ncykuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGUgYWNjZXNzIHRvIHNlcnZpY2VzIHRoYXQgYXJlIGNvbW1vbmx5IG5lZWRlZCB0byB1c2UgU2FnZU1ha2VyIGdlb3NwYXRpYWwuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckdlb3NwYXRpYWxFeGVjdXRpb25Sb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckdlb3NwYXRpYWxFeGVjdXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRoYXQgYWxsb3cgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFNhZ2VNYWtlciBHZW9zcGF0aWFsIHRocm91Z2ggdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyR2Vvc3BhdGlhbEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyR2Vvc3BhdGlhbEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIHNlcnZpY2VzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIHJ1biBTYWdlTWFrZXIgR3JvdW5kVHJ1dGggTGFiZWxpbmcgam9iICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckdyb3VuZFRydXRoRXhlY3V0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckdyb3VuZFRydXRoRXhlY3V0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgcHJpdmlsZWdlcyByZXF1aXJlZCBmb3Igc2V0dGluZyB1cCBTYWdlTWFrZXIgSHlwZXJQb2Qgb2JzZXJ2YWJpbGl0eS4gSXQgZW5hYmxlcyBhY2Nlc3MgdG8gQW1hem9uIE1hbmFnZWQgUHJvbWV0aGV1cywgQW1hem9uIE1hbmFnZWQgR3JhZmFuYSBhbmQgRUtTIEFkZG9ucy4gVGhlIHBvbGljeSBhbHNvIGluY2x1ZGVzIGJyb2FkIGFjY2VzcyB0byBHcmFmYW5hIEhUVFAgQVBJcyB0aHJvdWdoIFNlcnZpY2VBY2NvdW50VG9rZW5zIGFjcm9zcyBhbGwgQW1hem9uIE1hbmFnZWQgR3JhZmFuYSB3b3Jrc3BhY2VzIGluIHlvdXIgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VySHlwZXJQb2RPYnNlcnZhYmlsaXR5QWRtaW5BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VySHlwZXJQb2RPYnNlcnZhYmlsaXR5QWRtaW5BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gQW1hem9uIFNhZ2VNYWtlciBIeXBlclBvZCB0byByZWxhdGVkIEFXUyBzZXJ2aWNlcyBzdWNoIGFzIEFtYXpvbiBFS1MsIEFtYXpvbiBDbG91ZFdhdGNoIGV0Yy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VySHlwZXJQb2RTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJIeXBlclBvZFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gc2V0IHVwIHRoZSBTYWdlTWFrZXIgSHlwZXJQb2QgdHJhaW5pbmcgb3BlcmF0b3IuIEl0IGVuYWJsZXMgYWNjZXNzIHRvIEFtYXpvbiBTYWdlTWFrZXIgSHlwZXJQb2QgYW5kIEVLUyBhZGQtb25zLiBUaGUgcG9saWN5IGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIGRlc2NyaWJlIHRoZSBTYWdlTWFrZXIgSHlwZXJQb2QgcmVzb3VyY2VzIGluIHlvdXIgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VySHlwZXJQb2RUcmFpbmluZ09wZXJhdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckh5cGVyUG9kVHJhaW5pbmdPcGVyYXRvckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBjcmVhdGUgQW1hem9uIEF1Z21lbnRlZCBBSSBGbG93RGVmaW5pdGlvbiByZXNvdXJjZXMgYWdhaW5zdCBhbnkgV29ya3RlYW0uICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlck1lY2hhbmljYWxUdXJrQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlck1lY2hhbmljYWxUdXJrQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBBV1MgbWFuYWdlZCBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIG5lZWRlZCB0byB1c2UgYWxsIEFtYXpvbiBTYWdlTWFrZXIgR292ZXJuYW5jZSBmZWF0dXJlcy4gVGhlIHBvbGljeSBhbHNvIHByb3ZpZGVzIHNlbGVjdCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyAoZS5nLiwgUzMsIEtNUykuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlck1vZGVsR292ZXJuYW5jZVVzZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJNb2RlbEdvdmVybmFuY2VVc2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIGlzIGEgbmV3IG1hbmFnZWQgcG9saWN5IGZvciBNb2RlbCBSZWdpc3RyeSBpbiBTYWdlbWFrZXIuIFRoaXMgcG9saWN5IGlzIGEgc3RhbmRhbG9uZSBwb2xpY3kgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gdGhlIHVzZXIgcm9sZSB0byBhY2Nlc3MgTW9kZWwgUmVnaXN0cnkgcmVsYXRlZCBmdW5jdGlvbmFsaXRpZXMgaW4gU2FnZW1ha2VyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJNb2RlbFJlZ2lzdHJ5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJNb2RlbFJlZ2lzdHJ5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIE1hbmFnZWQgcG9saWN5IGZvciBTZXJ2aWNlIExpbmtlZCBSb2xlIGZvciBBbWF6b24gU2FnZU1ha2VyIE5vdGVib29rcyAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJOb3RlYm9va3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJOb3RlYm9va3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgQW1hem9uIFNhZ2VNYWtlciBwYXJ0bmVyIGFwcCB1c2VycyB0byBhY2Nlc3MgYXBwbGljYXRpb25zLCBsaXN0IGF2YWlsYWJsZSBhcHBsaWNhdGlvbnMsIGxhdW5jaCBhcHBsaWNhdGlvbiB3ZWIgVUlzLCBhbmQgY29ubmVjdCB2aWEgdGhlIGFwcGxpY2F0aW9uIFNESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyUGFydG5lckFwcHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclBhcnRuZXJBcHBzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIEFQSUdhdGV3YXkgd2l0aGluIHRoZSBBV1MgU2VydmljZUNhdGFsb2cgcHJvdmlzaW9uZWQgcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIExhbWJkYSBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJQYXJ0bmVyU2VydmljZUNhdGFsb2dQcm9kdWN0c0FwaUdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJQYXJ0bmVyU2VydmljZUNhdGFsb2dQcm9kdWN0c0FwaUdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIENsb3VkRm9ybWF0aW9uIHdpdGhpbiB0aGUgQVdTIFNlcnZpY2VDYXRhbG9nIHByb3Zpc2lvbmVkIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHN1YnNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBMYW1iZGEsIEFQSUdhdGV3YXkgYW5kIG90aGVycy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyUGFydG5lclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNDbG91ZEZvcm1hdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclBhcnRuZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzQ2xvdWRGb3JtYXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIExhbWJkYSB3aXRoaW4gdGhlIEFXUyBTZXJ2aWNlQ2F0YWxvZyBwcm92aXNpb25lZCBwcm9kdWN0cyBmcm9tIEFtYXpvbiBTYWdlTWFrZXIgcG9ydGZvbGlvIG9mIHByb2R1Y3RzLiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYSBzZXQgb2YgcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgU2VjcmV0cyBNYW5hZ2VyIGFuZCBvdGhlcnMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclBhcnRuZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzTGFtYmRhU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyUGFydG5lclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNMYW1iZGFTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgQW1hem9uIE1hbmFnZWQgUG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyBjb21tb25seSBuZWVkZWQgZm9yIHVzZSB3aXRoIENhbGxiYWNrIHN0ZXBzIGFuZCBMYW1iZGEgc3RlcHMgaW4gU2FnZU1ha2VyIE1vZGVsIEJ1aWxkaW5nIFBpcGVsaW5lcy4gSXQgaXMgYWRkZWQgdG8gdGhlIEFtYXpvblNhZ2VNYWtlci1FeGVjdXRpb25Sb2xlIHRoYXQgY2FuIGJlIGNyZWF0ZWQgd2hlbiBzZXR0aW5nIHVwIFNhZ2VNYWtlciBTdHVkaW8uIEl0IGNhbiBhbHNvIGJlIGF0dGFjaGVkIHRvIGFueSBvdGhlciByb2xlIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBhdXRob3Jpbmcgb3IgZXhlY3V0aW5nIHBpcGVsaW5lcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyUGlwZWxpbmVzSW50ZWdyYXRpb25zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclBpcGVsaW5lc0ludGVncmF0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHdpbGwgYmUgdXNlZCBCeSBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW9zIHRvIGNyZWF0ZSBWUEMgcmVsYXRlZCByZXNvdXJjZXMgZm9yIFF1aWNrU2lnaHQgKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyUXVpY2tTaWdodFZQQ1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJRdWlja1NpZ2h0VlBDUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gU2FnZU1ha2VyIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgU0RLLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIEFQSUdhdGV3YXkgd2l0aGluIHRoZSBBV1MgU2VydmljZUNhdGFsb2cgcHJvdmlzaW9uZWQgcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIENsb3VkV2F0Y2ggTG9ncyBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzQXBpR2F0ZXdheVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNBcGlHYXRld2F5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIHJvbGUgcG9saWN5IHVzZWQgYnkgdGhlIEFXUyBDbG91ZEZvcm1hdGlvbiB3aXRoaW4gdGhlIEFXUyBTZXJ2aWNlQ2F0YWxvZyBwcm92aXNpb25lZCBwcm9kdWN0cyBmcm9tIEFtYXpvbiBTYWdlTWFrZXIgcG9ydGZvbGlvIG9mIHByb2R1Y3RzLiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYSBzdWJzZXQgb2YgcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgU2FnZU1ha2VyIGFuZCBvdGhlcnMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNDbG91ZGZvcm1hdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNDbG91ZGZvcm1hdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgQ29kZUJ1aWxkIHdpdGhpbiB0aGUgQVdTIFNlcnZpY2VDYXRhbG9nIHByb3Zpc2lvbmVkIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHN1YnNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBDb2RlUGlwZWxpbmUsIENvZGVCdWlsZCBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzQ29kZUJ1aWxkU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0NvZGVCdWlsZFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgQ29kZVBpcGVsaW5lIHdpdGhpbiB0aGUgQVdTIFNlcnZpY2VDYXRhbG9nIHByb3Zpc2lvbmVkIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHN1YnNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBDb2RlUGlwZWxpbmUsIENvZGVCdWlsZCBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzQ29kZVBpcGVsaW5lU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0NvZGVQaXBlbGluZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgQ2xvdWRXYXRjaCBFdmVudHMgd2l0aGluIHRoZSBBV1MgU2VydmljZUNhdGFsb2cgcHJvdmlzaW9uZWQgcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc3Vic2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIENvZGVQaXBlbGluZSBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzRXZlbnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0V2ZW50c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgRmlyZWhvc2Ugd2l0aGluIHRoZSBBV1MgU2VydmljZUNhdGFsb2cgcHJvdmlzaW9uZWQgcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIEZpcmVob3NlIGFuZCBvdGhlcnMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNGaXJlaG9zZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNGaXJlaG9zZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgR2x1ZSB3aXRoaW4gdGhlIEFXUyBTZXJ2aWNlQ2F0YWxvZyBwcm92aXNpb25lZCBwcm9kdWN0cyBmcm9tIEFtYXpvbiBTYWdlTWFrZXIgcG9ydGZvbGlvIG9mIHByb2R1Y3RzLiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYSBzZXQgb2YgcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgR2x1ZSwgUzMgYW5kIG90aGVycy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0dsdWVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzR2x1ZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgTGFtYmRhIHdpdGhpbiB0aGUgQVdTIFNlcnZpY2VDYXRhbG9nIHByb3Zpc2lvbmVkIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBFQ1IsIFMzIGFuZCBvdGhlcnMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNMYW1iZGFTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzTGFtYmRhU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgU3lzdGVtcyBNYW5hZ2VyIGFjdGl2YXRpb24sIHNlc3Npb24gbWFuYWdlbWVudCwgYW5kIEtNUyBrZXkgb3BlcmF0aW9ucyBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3IgdGhlIFNhZ2VNYWtlciBTcGFjZXMgQWRkb24gdG8gZW5hYmxlIHNlY3VyZSByZW1vdGUgYWNjZXNzIHRvIEVLUyBTYWdlTWFrZXIgU3BhY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTcGFjZXNDb250cm9sbGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclNwYWNlc0NvbnRyb2xsZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgU3lzdGVtcyBLTVMga2V5IG9wZXJhdGlvbnMgcGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIHRoZSBTYWdlTWFrZXIgU3BhY2VzIFJvdXRlciB0byBlbmFibGUgc2VjdXJlIHJlbW90ZSBhY2Nlc3MgdG8gRUtTIFNhZ2VNYWtlciBTcGFjZXMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclNwYWNlc1JvdXRlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJTcGFjZXNSb3V0ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIEFtYXpvbiBNYW5hZ2VkIFBvbGljeSBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIFNhZ2VNYWtlciBUcmFpbmluZyBQbGFucy4gSXQgYWxsb3dzIHVzZXJzIHRvIGNyZWF0ZSBUcmFpbmluZyBQbGFucyBhbmQgUmVzZXJ2ZWQgQ2FwYWNpdGllcywgZGVzY3JpYmUgZXhpc3RpbmcgVHJhaW5pbmcgUGxhbnMsIGFuZCBwZXJmb3JtIHNlYXJjaCBhbmQgbGlzdGluZyBvcGVyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJUcmFpbmluZ1BsYW5DcmVhdGVBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyVHJhaW5pbmdQbGFuQ3JlYXRlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFNlY3VyaXR5IExha2UgYW5kIHJlbGF0ZWQgc2VydmljZXMgbmVlZGVkIHRvIGFkbWluaXN0ZXIgU2VjdXJpdHkgTGFrZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2VjdXJpdHlMYWtlQWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TZWN1cml0eUxha2VBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBBbWF6b24gU2VjdXJpdHlMYWtlIG1ldGEgc3RvcmUgbWFuYWdlciBsYW1iZGEgd2hpY2ggYWxsb3dzIHRoZSBhY2Nlc3MgdG8gY2xvdWR3YXRjaCwgUzMsIEdsdWUgYW5kIFNRUy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2VjdXJpdHlMYWtlTWV0YXN0b3JlTWFuYWdlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TZWN1cml0eUxha2VNZXRhc3RvcmVNYW5hZ2VyKTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFNlY3VyaXR5IExha2UgY3JlYXRlcyBJQU0gcm9sZXMgZm9yIHRoaXJkLXBhcnR5IGN1c3RvbSBzb3VyY2VzIHRvIHdyaXRlIGRhdGEgdG8gYSBkYXRhIGxha2UgYW5kIGZvciB0aGlyZC1wYXJ0eSBzdWJzY3JpYmVycyB0byBjb25zdW1lIGRhdGEgZnJvbSBhIGRhdGEgbGFrZSwgYW5kIHVzZXMgdGhpcyBwb2xpY3kgd2hlbiBjcmVhdGluZyB0aGVzZSByb2xlcyB0byBkZWZpbmUgdGhlIGJvdW5kYXJ5IG9mIHRoZWlyIHBlcm1pc3Npb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TZWN1cml0eUxha2VQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNlY3VyaXR5TGFrZVBlcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gU0VTIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU0VTRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TRVNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gU0VTIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU0VTUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU0VTUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgU0VTIHRvIHB1Ymxpc2ggQW1hem9uIENsb3VkV2F0Y2ggYmFzaWMgbW9uaXRvcmluZyBtZXRyaWNzIG9uIGJlaGFsZiBvZiB5b3VyIFNFUyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uU0VTU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU0VTU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gU05TIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU05TRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TTlNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gU05TIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU05TUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU05TUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgQW1hem9uIFNOUyBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvblNOU1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU05TUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTUVMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TUVNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNRU0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBTUVMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TUVNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TUVNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB2aWV3IGF1dG9tYXRpb24gZXhlY3V0aW9ucyBhbmQgc2VuZCBhcHByb3ZhbCBkZWNpc2lvbnMgdG8gYXV0b21hdGlvbiB3YWl0aW5nIGZvciBhcHByb3ZhbCAqL1xuICAgIHB1YmxpYyBBbWF6b25TU01BdXRvbWF0aW9uQXBwcm92ZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU1NNQXV0b21hdGlvbkFwcHJvdmVyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIEVDMiBBdXRvbWF0aW9uIHNlcnZpY2UgdG8gZXhlY3V0ZSBhY3Rpdml0aWVzIGRlZmluZWQgd2l0aGluIEF1dG9tYXRpb24gZG9jdW1lbnRzICovXG4gICAgcHVibGljIEFtYXpvblNTTUF1dG9tYXRpb25Sb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNTTUF1dG9tYXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIFNTTSBBZ2VudCB0byBhY2Nlc3MgRGlyZWN0b3J5IFNlcnZpY2Ugb24gYmVoYWxmIG9mIHRoZSBjdXN0b21lciBmb3IgZG9tYWluLWpvaW4gdGhlIG1hbmFnZWQgaW5zdGFuY2UuICovXG4gICAgcHVibGljIEFtYXpvblNTTURpcmVjdG9yeVNlcnZpY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU1NNRGlyZWN0b3J5U2VydmljZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTU00uICovXG4gICAgcHVibGljIEFtYXpvblNTTUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU1NNRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqICBTZXJ2aWNlIFJvbGUgdG8gYmUgdXNlZCBmb3IgRUMyIE1haW50ZW5hbmNlIFdpbmRvdyAqL1xuICAgIHB1YmxpYyBBbWF6b25TU01NYWludGVuYW5jZVdpbmRvd1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU1NNTWFpbnRlbmFuY2VXaW5kb3dSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZW5hYmxlcyBBV1MgU3lzdGVtcyBNYW5hZ2VyIGZ1bmN0aW9uYWxpdHkgb24gRUMyIGluc3RhbmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU1NNTWFuYWdlZEVDMkluc3RhbmNlRGVmYXVsdFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TU01NYW5hZ2VkRUMySW5zdGFuY2VEZWZhdWx0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIHBvbGljeSBmb3IgQW1hem9uIEVDMiBSb2xlIHRvIGVuYWJsZSBBV1MgU3lzdGVtcyBNYW5hZ2VyIHNlcnZpY2UgY29yZSBmdW5jdGlvbmFsaXR5LiAqL1xuICAgIHB1YmxpYyBBbWF6b25TU01NYW5hZ2VkSW5zdGFuY2VDb3JlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNTTU1hbmFnZWRJbnN0YW5jZUNvcmUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIGFjY2VzcyB0byBjaGlsZCBpbnN0YW5jZXMgZm9yIHBhdGNoIGFzc29jaWF0aW9uIG9wZXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgQW1hem9uU1NNUGF0Y2hBc3NvY2lhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TU01QYXRjaEFzc29jaWF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gU1NNLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TU01SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TU01SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIG1hbmFnZWQgb3IgdXNlZCBieSBBbWF6b24gU1NNICovXG4gICAgcHVibGljIEFtYXpvblNTTVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNTTVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNzIHRvIGFsbCBBbWF6b24gVGV4dHJhY3QgQVBJcyAqL1xuICAgIHB1YmxpYyBBbWF6b25UZXh0cmFjdEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVGV4dHJhY3RGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFRleHRyYWN0IHRvIGNhbGwgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25UZXh0cmFjdFNlcnZpY2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblRleHRyYWN0U2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBtYW5hZ2UgQW1hem9uIFRpbWVzdHJlYW0gdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuIE5vdGUgdGhhdCB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBwZXJtaXNzaW9ucyBmb3IgY2VydGFpbiBLTVMgb3BlcmF0aW9ucywgYW5kIG9wZXJhdGlvbnMgdG8gbWFuYWdlIHlvdXIgc2F2ZWQgcXVlcmllcy4gSWYgdXNpbmcgQ3VzdG9tZXIgbWFuYWdlZCBDTUssIHBsZWFzZSByZWZlciB0byBkb2N1bWVudGF0aW9uIGZvciBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG5lZWRlZC4gKi9cbiAgICBwdWJsaWMgQW1hem9uVGltZXN0cmVhbUNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblRpbWVzdHJlYW1Db25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBUaW1lc3RyZWFtLiBOb3RlIHRoYXQgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgY2VydGFpbiBLTVMgb3BlcmF0aW9uIGFjY2Vzcy4gSWYgdXNpbmcgQ3VzdG9tZXIgbWFuYWdlZCBDTUssIHBsZWFzZSByZWZlciB0byBkb2N1bWVudGF0aW9uIGZvciBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG5lZWRlZC4gKi9cbiAgICBwdWJsaWMgQW1hem9uVGltZXN0cmVhbUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVGltZXN0cmVhbUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBjcmVhdGUsIHVwZGF0ZSwgZGVsZXRlIGFuZCBsaXN0IEFtYXpvbiBUaW1lc3RyZWFtIEluZmx1eERCIGluc3RhbmNlcyBhbmQgY3JlYXRlIGFuZCBsaXN0IHBhcmFtZXRlciBncm91cHMuIFBsZWFzZSByZWZlciB0byBkb2N1bWVudGF0aW9uIGZvciBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG5lZWRlZC4gKi9cbiAgICBwdWJsaWMgQW1hem9uVGltZXN0cmVhbUluZmx1eERCRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25UaW1lc3RyZWFtSW5mbHV4REJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIG1hbmFnZSBBbWF6b24gVGltZXN0cmVhbSBJbmZsdXhEQiBpbnN0YW5jZXMgYW5kIHBhcmFtZXRlciBncm91cHMgZXhjZXB0IG1hcmtldHBsYWNlIG9wZXJhdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvblRpbWVzdHJlYW1JbmZsdXhEQkZ1bGxBY2Nlc3NXaXRob3V0TWFya2V0cGxhY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVGltZXN0cmVhbUluZmx1eERCRnVsbEFjY2Vzc1dpdGhvdXRNYXJrZXRwbGFjZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIGNyZWF0ZSwgdXBkYXRlLCBkZWxldGUgYW5kIGxpc3QgQW1hem9uIFRpbWVzdHJlYW0gSW5mbHV4REIgaW5zdGFuY2VzIGFuZCBjcmVhdGUgYW5kIGxpc3QgcGFyYW1ldGVyIGdyb3Vwcy4gUGxlYXNlIHJlZmVyIHRvIGRvY3VtZW50YXRpb24gZm9yIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbmVlZGVkLiAqL1xuICAgIHB1YmxpYyBBbWF6b25UaW1lc3RyZWFtSW5mbHV4REJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25UaW1lc3RyZWFtSW5mbHV4REJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFRpbWVzdHJlYW0uIFBvbGljeSBhbHNvIHByb3ZpZGVzIHBlcm1pc3Npb24gdG8gY2FuY2VsIGFueSBydW5uaW5nIHF1ZXJ5LiBJZiB1c2luZyBDdXN0b21lciBtYW5hZ2VkIENNSywgcGxlYXNlIHJlZmVyIHRvIGRvY3VtZW50YXRpb24gZm9yIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbmVlZGVkLiAqL1xuICAgIHB1YmxpYyBBbWF6b25UaW1lc3RyZWFtUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVGltZXN0cmVhbVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFRyYW5zY3JpYmUgb3BlcmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBbWF6b25UcmFuc2NyaWJlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25UcmFuc2NyaWJlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byByZWFkIG9ubHkgb3BlcmF0aW9uIGZvciBBbWF6b24gVHJhbnNjcmliZSAqL1xuICAgIHB1YmxpYyBBbWF6b25UcmFuc2NyaWJlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVHJhbnNjcmliZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gVmVyaWZpZWQgUGVybWlzc2lvbnMgKi9cbiAgICBwdWJsaWMgQW1hem9uVmVyaWZpZWRQZXJtaXNzaW9uc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVmVyaWZpZWRQZXJtaXNzaW9uc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBWZXJpZmllZCBQZXJtaXNzaW9ucyBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25WZXJpZmllZFBlcm1pc3Npb25zUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVmVyaWZpZWRQZXJtaXNzaW9uc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGNyZWF0ZSBuZXR3b3JrIGludGVyZmFjZXMgYW5kIGF0dGFjaCB0aGVtIHRvIGNyb3NzLWFjY291bnQgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFtYXpvblZQQ0Nyb3NzQWNjb3VudE5ldHdvcmtJbnRlcmZhY2VPcGVyYXRpb25zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblZQQ0Nyb3NzQWNjb3VudE5ldHdvcmtJbnRlcmZhY2VPcGVyYXRpb25zKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFZQQyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblZQQ0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVlBDRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGRlc2NyaWJlIEFXUyByZXNvdXJjZXMsIHJ1biBOZXR3b3JrIEFjY2VzcyBBbmFseXplciwgYW5kIGNyZWF0ZSBvciBkZWxldGUgdGFncyBvbiBOZXR3b3JrIEluc2lnaHRzIEFjY2VzcyBTY29wZSBhbmQgTmV0d29yayBJbnNpZ2h0cyBBY2Nlc3MgU2NvcGUgQW5hbHlzaXMuICovXG4gICAgcHVibGljIEFtYXpvblZQQ05ldHdvcmtBY2Nlc3NBbmFseXplckZ1bGxBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVlBDTmV0d29ya0FjY2Vzc0FuYWx5emVyRnVsbEFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGRlc2NyaWJlIEFXUyByZXNvdXJjZXMsIHJ1biBSZWFjaGFiaWxpdHkgQW5hbHl6ZXIsIGFuZCBjcmVhdGUgb3IgZGVsZXRlIHRhZ3Mgb24gTmV0d29yayBJbnNpZ2h0cyBQYXRoIGFuZCBOZXR3b3JrIEluc2lnaHRzIEFuYWx5c2lzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25WUENSZWFjaGFiaWxpdHlBbmFseXplckZ1bGxBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVlBDUmVhY2hhYmlsaXR5QW5hbHl6ZXJGdWxsQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgdG8gdGhlIHJvbGUgSUFNUm9sZUZvclJlYWNoYWJpbGl0eUFuYWx5emVyQ3Jvc3NBY2NvdW50UmVzb3VyY2VBY2Nlc3MuIFRoaXMgcm9sZSBpcyBkZXBsb3llZCB0byB0aGUgbWVtYmVyIGFjY291bnRzIGluIGFuIG9yZ2FuaXphdGlvbiB3aGVuIHRoZSBtYW5hZ2VtZW50IGFjY291bnQgZW5hYmxlcyB0cnVzdGVkIGFjY2VzcyBmb3IgUmVhY2hhYmlsaXR5IEFuYWx5emVyLiBJdCBwcm92aWRlcyBwZXJtaXNzaW9ucyB0byB2aWV3IHJlc291cmNlcyBmcm9tIGFjcm9zcyB5b3VyIG9yZ2FuaXphdGlvbiB1c2luZyB0aGUgUmVhY2hhYmlsaXR5IEFuYWx5emVyIGNvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblZQQ1JlYWNoYWJpbGl0eUFuYWx5emVyUGF0aENvbXBvbmVudFJlYWRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVlBDUmVhY2hhYmlsaXR5QW5hbHl6ZXJQYXRoQ29tcG9uZW50UmVhZFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFZQQyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblZQQ1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblZQQ1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFdvcmtEb2NzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrRG9jc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya0RvY3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gV29ya0RvY3MgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlICovXG4gICAgcHVibGljIEFtYXpvbldvcmtEb2NzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya0RvY3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gV29ya01haWwgRXZlbnRzICovXG4gICAgcHVibGljIEFtYXpvbldvcmtNYWlsRXZlbnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya01haWxFdmVudHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIFdvcmtNYWlsLCBEaXJlY3RvcnkgU2VydmljZSwgU0VTLCBFQzIgYW5kIHJlYWQgYWNjZXNzIHRvIEtNUyBtZXRhZGF0YS4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya01haWxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtNYWlsRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bGwgYWNjZXNzIHRvIHRoZSBXb3JrTWFpbCBNZXNzYWdlIEZsb3cgQVBJcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrTWFpbE1lc3NhZ2VGbG93RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrTWFpbE1lc3NhZ2VGbG93RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFJlYWQgb25seSBhY2Nlc3MgdG8gV29ya01haWwgbWVzc2FnZXMgZm9yIHRoZSBHZXRSYXdNZXNzYWdlQ29udGVudCBBUEkgKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya01haWxNZXNzYWdlRmxvd1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtNYWlsTWVzc2FnZUZsb3dSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gV29ya01haWwgYW5kIFNFUy4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya01haWxSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrTWFpbFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFtYXpvbiBXb3JrU3BhY2VzIGFkbWluaXN0cmF0aXZlIGFjdGlvbnMgdmlhIEFXUyBTREsgYW5kIENMSS4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc0FkbWluKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNBZG1pbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0b3IgYWNjZXNzIGZvciBwYWNrYWdpbmcgYW4gYXBwbGljYXRpb24gaW4gQW1hem9uIFdvcmtTcGFjZXMgQXBwbGljYXRpb24gTWFuYWdlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc0FwcGxpY2F0aW9uTWFuYWdlckFkbWluQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNBcHBsaWNhdGlvbk1hbmFnZXJBZG1pbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgbWFuYWdlZCBwb2xpY3kgcHJvdmlkZXMgZnVsbCBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgUHJpdmF0ZSBDQSByZXNvdXJjZXMgaW4geW91ciBBV1MgYWNjb3VudCBmb3IgY2VydGlmaWNhdGUtYmFzZWQgYXV0aGVudGljYXRpb24uICovXG4gICAgcHVibGljIEFtYXpvbldvcmtzcGFjZXNQQ0FBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya3NwYWNlc1BDQUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIEFXUyBXb3JrU3BhY2VzIHNlcnZpY2UgYWNjZXNzIHRvIHJlcXVpcmVkIGN1c3RvbWVyIGFjY291bnQgcmVzb3VyY2VzIGZvciBsYXVuY2hpbmcgV29ya3NwYWNlcyBQb29scyAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrU3BhY2VzUG9vbFNlcnZpY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya1NwYWNlc1Bvb2xTZXJ2aWNlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyBTZWN1cmUgQnJvd3NlciBhbmQgaXRzIGRlcGVuZGVuY2llcyB0aHJvdWdoIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLCBTREssIGFuZCBDTEkuICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNTZWN1cmVCcm93c2VyUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya1NwYWNlc1NlY3VyZUJyb3dzZXJSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyBiYWNrZW5kIHNlcnZpY2UgdG8gcGVyZm9ybSBXb3Jrc3BhY2UgU2VsZiBTZXJ2aWNlIGFjdGlvbnMgKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc1NlbGZTZXJ2aWNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNTZWxmU2VydmljZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGN1c3RvbWVyIGFjY291bnQgYWNjZXNzIHRvIEFXUyBXb3JrU3BhY2VzIHNlcnZpY2UgZm9yIGxhdW5jaGluZyBhIFdvcmtzcGFjZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc1NlcnZpY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya1NwYWNlc1NlcnZpY2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyBUaGluIENsaWVudCBhcyB3ZWxsIGFzIGxpbWl0ZWQgYWNjZXNzIHRvIHJlcXVpcmVkIHJlbGF0ZWQgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc1RoaW5DbGllbnRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNUaGluQ2xpZW50RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gV29ya1NwYWNlcyBUaGluIENsaWVudCBNb25pdG9yaW5nICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNUaGluQ2xpZW50TW9uaXRvcmluZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNUaGluQ2xpZW50TW9uaXRvcmluZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyBUaGluIENsaWVudCBhbmQgaXRzIGRlcGVuZGVuY2llcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrU3BhY2VzVGhpbkNsaWVudFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNUaGluQ2xpZW50UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBXb3JrU3BhY2VzIFdlYiBhbmQgaXRzIGRlcGVuZGVuY2llcyB0aHJvdWdoIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLCBTREssIGFuZCBDTEkuICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNXZWJSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrU3BhY2VzV2ViUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIFdvcmtTcGFjZXMgV2ViICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNXZWJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrU3BhY2VzV2ViU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gWm9jYWxvLiAqL1xuICAgIHB1YmxpYyBBbWF6b25ab2NhbG9GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblpvY2Fsb0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBab2NhbG8gKi9cbiAgICBwdWJsaWMgQW1hem9uWm9jYWxvUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uWm9jYWxvUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBbXBsaWZ5IGZ1bGwgYWNjZXNzIHBlcm1pc3Npb25zIHRvIGRlcGxveSBBbXBsaWZ5IGJhY2tlbmQgcmVzb3VyY2VzIChBV1MgQXBwU3luYywgQW1hem9uIENvZ25pdG8sIEFtYXpvbiBTMyBhbmQgb3RoZXIgcmVsYXRlZCBzZXJ2aWNlcykgdmlhIHRoZSBBV1MgQ2xvdWQgRGV2ZWxvcG1lbnQgS2l0IChBV1MgQ0RLKSAqL1xuICAgIHB1YmxpYyBBbXBsaWZ5QmFja2VuZERlcGxveUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1wbGlmeUJhY2tlbmREZXBsb3lGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFQSSBHYXRld2F5IHRvIG1hbmFnZSBhc3NvY2lhdGVkIEFXUyBSZXNvdXJjZXMgb24gYmVoYWxmIG9mIHRoZSBjdXN0b21lci4gKi9cbiAgICBwdWJsaWMgQVBJR2F0ZXdheVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFQSUdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBcHBJbnRlZ3JhdGlvbnMgdG8gbWFuYWdlIEFwcEZsb3cgcmVzb3VyY2VzIGFuZCBwdWJsaXNoIENsb3VkV2F0Y2ggbWV0cmljIGRhdGEgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFwcEludGVncmF0aW9uc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFwcEludGVncmF0aW9uc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBBcHBsaWNhdGlvbiBBdXRvc2NhbGluZyBmb3IgQW1hem9uIEFwcFN0cmVhbSAqL1xuICAgIHB1YmxpYyBBcHBsaWNhdGlvbkF1dG9TY2FsaW5nRm9yQW1hem9uQXBwU3RyZWFtQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFwcGxpY2F0aW9uQXV0b1NjYWxpbmdGb3JBbWF6b25BcHBTdHJlYW1BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQXBwbGljYXRpb24gRGlzY292ZXJ5IFNlcnZpY2UgQ29udGludW91cyBFeHBvcnQgZmVhdHVyZSAqL1xuICAgIHB1YmxpYyBBcHBsaWNhdGlvbkRpc2NvdmVyeVNlcnZpY2VDb250aW51b3VzRXhwb3J0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXBwbGljYXRpb25EaXNjb3ZlcnlTZXJ2aWNlQ29udGludW91c0V4cG9ydFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBBcHBSdW5uZXIgTmV0d29ya2luZyB0byBtYW5hZ2UgcmVsYXRlZCBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBcHBSdW5uZXJOZXR3b3JraW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXBwUnVubmVyTmV0d29ya2luZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBBcHBSdW5uZXIgdG8gbWFuYWdlIHJlbGF0ZWQgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQXBwUnVubmVyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXBwUnVubmVyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQXBwU3R1ZGlvIHRvIG1hbmFnZSBhc3NvY2lhdGVkIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFwcFN0dWRpb1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFwcFN0dWRpb1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBBbWF6b24gQXVyb3JhIERTUUwgU2VydmljZSBMaW5rZWQgUm9sZSAqL1xuICAgIHB1YmxpYyBBdXJvcmFEc3FsU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXVyb3JhRHNxbFNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQXV0byBTY2FsaW5nIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQXV0b1NjYWxpbmdDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BdXRvU2NhbGluZ0NvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBdXRvIFNjYWxpbmcgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBdXRvU2NhbGluZ0NvbnNvbGVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BdXRvU2NhbGluZ0NvbnNvbGVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEF1dG8gU2NhbGluZy4gKi9cbiAgICBwdWJsaWMgQXV0b1NjYWxpbmdGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkF1dG9TY2FsaW5nRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgcG9saWN5IGZvciB0aGUgQXV0b1NjYWxpbmcgTm90aWZpY2F0aW9uIEFjY2VzcyBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEF1dG9TY2FsaW5nTm90aWZpY2F0aW9uQWNjZXNzUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BdXRvU2NhbGluZ05vdGlmaWNhdGlvbkFjY2Vzc1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEF1dG8gU2NhbGluZy4gKi9cbiAgICBwdWJsaWMgQXV0b1NjYWxpbmdSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BdXRvU2NhbGluZ1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEF1dG8gU2NhbGluZyAqL1xuICAgIHB1YmxpYyBBdXRvU2NhbGluZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkF1dG9TY2FsaW5nU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgQVdTIENvbmZpZyBzZXJ2aWNlIHJvbGUuIFByb3ZpZGVzIHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciBBV1MgQ29uZmlnIHRvIHRyYWNrIGNoYW5nZXMgdG8geW91ciBBV1MgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDb25maWdSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbmZpZ1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgdGhlIFNTTSBEaWFnbm9zaXMgUzMgYnVja2V0IGZvciBkaWFnbm9zaXMgYW5kIHJlbWVkaWF0aW9uIG9mIGlzc3Vlcy4gKi9cbiAgICBwdWJsaWMgQVdTU1NNQXV0b21hdGlvbkRpYWdub3Npc0J1Y2tldFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU01BdXRvbWF0aW9uRGlhZ25vc2lzQnVja2V0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBwZXJtaXNzaW9uIGZvciBEaWFnbm9zaW5nIGlzc3VlcyB3aXRoIFNTTSBzZXJ2aWNlcyBieSBleGVjdXRpbmcgYWN0aXZpdGllcyBkZWZpbmVkIHdpdGhpbiBBdXRvbWF0aW9uIERvY3VtZW50cywgcHJpbWFyaWx5IHVzZWQgZm9yIHJ1bm5pbmcgdGhlIEF1dG9tYXRpb24gZG9jdW1lbnRzIGluIGEgY3Jvc3MtYWNjb3VudCBjcm9zcy1yZWdpb24gc2V0dXAgYnkgdHJpZ2dlcmluZyBjaGlsZCBhdXRvbWF0aW9ucyB3aXRoaW4gbWVtYmVyIGFjY291bnRzLiAqL1xuICAgIHB1YmxpYyBBV1NTU01EaWFnbm9zaXNBdXRvbWF0aW9uQWRtaW5pc3RyYXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTTURpYWdub3Npc0F1dG9tYXRpb25BZG1pbmlzdHJhdGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHBlcm1pc3Npb24gZm9yIERpYWdub3NpbmcgaXNzdWVzIHdpdGggU1NNIHNlcnZpY2VzIGJ5IGV4ZWN1dGluZyBhY3Rpdml0aWVzIGRlZmluZWQgd2l0aGluIEF1dG9tYXRpb24gRG9jdW1lbnRzLCBwcmltYXJpbHkgdXNlZCBmb3IgcnVubmluZyB0aGUgQXV0b21hdGlvbiBkb2N1bWVudHMgaW4gYSB0YXJnZXQgYWNjb3VudC9yZWdpb24gc2V0dXAgYnkgZGlhZ25vc2luZyBTU00gc2VydmljZSBoZWFsdGggYWNyb3NzIGFsbCBub2Rlcy4gKi9cbiAgICBwdWJsaWMgQVdTU1NNRGlhZ25vc2lzQXV0b21hdGlvbkV4ZWN1dGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NNRGlhZ25vc2lzQXV0b21hdGlvbkV4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3Igb3BlcmF0aW9uYWwgYWNjb3VudHMgdG8gZGlhZ25vc2UgdW5tYW5hZ2VkIG5vZGVzIGJ5IHByb3ZpZGluZyBPcmdhbmlzYXRpb24gc3BlY2lmaWMgcGVybWlzc2lvbnMgcmVxdWlyZWQgYnkgU1NNIGF1dG9tYXRpb24gdG8gcHVsbCB0aGUgbGlzdCBvZiBtZW1iZXIgYWNjb3VudHMgd2l0aGluIGEgcm9vdCBvZiBhbiBPcmdhbmlzYXRpb24gdG8gdHJpZ2dlciBjcm9zcy1hY2NvdW50IGNyb3NzLXJlZ2lvbiBleGVjdXRpb24gYnkgYWxsb3dpbmcgYXNzdW1pbmcgRXhlY3V0aW9uIHJvbGVzIGluIHRhcmdldCBhY2NvdW50L3JlZ2lvbi4gKi9cbiAgICBwdWJsaWMgQVdTU1NNRGlhZ25vc2lzQXV0b21hdGlvbk9wZXJhdGlvbmFsQWNjb3VudEFkbWluaXN0cmF0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU01EaWFnbm9zaXNBdXRvbWF0aW9uT3BlcmF0aW9uYWxBY2NvdW50QWRtaW5pc3RyYXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBwZXJtaXNzaW9uIGZvciBSZW1lZGlhdGluZyBpc3N1ZXMgd2l0aCBTU00gc2VydmljZXMgYnkgZXhlY3V0aW5nIGFjdGl2aXRpZXMgZGVmaW5lZCB3aXRoaW4gQXV0b21hdGlvbiBEb2N1bWVudHMsIHByaW1hcmlseSB1c2VkIGZvciBydW5uaW5nIHRoZSBBdXRvbWF0aW9uIGRvY3VtZW50cyBpbiBhIGNyb3NzLWFjY291bnQgY3Jvc3MtcmVnaW9uIHNldHVwIGJ5IHRyaWdnZXJpbmcgY2hpbGQgYXV0b21hdGlvbnMgd2l0aGluIG1lbWJlciBhY2NvdW50cy4gKi9cbiAgICBwdWJsaWMgQVdTU1NNUmVtZWRpYXRpb25BdXRvbWF0aW9uQWRtaW5pc3RyYXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTTVJlbWVkaWF0aW9uQXV0b21hdGlvbkFkbWluaXN0cmF0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBSZW1lZGlhdGluZyBpc3N1ZXMgd2l0aCBTU00gc2VydmljZXMgYnkgZXhlY3V0aW5nIGFjdGl2aXRpZXMgZGVmaW5lZCB3aXRoaW4gQXV0b21hdGlvbiBEb2N1bWVudHMsIHByaW1hcmlseSB1c2VkIGZvciBydW5uaW5nIHRoZSBBdXRvbWF0aW9uIGRvY3VtZW50cyBpbiBhIHRhcmdldCBhY2NvdW50L3JlZ2lvbiBzZXR1cCBieSByZW1lZGlhdGluZyBTU00gc2VydmljZXMgaGVhbHRoIGFjcm9zcyBhbGwgbm9kZXMuICovXG4gICAgcHVibGljIEFXU1NTTVJlbWVkaWF0aW9uQXV0b21hdGlvbkV4ZWN1dGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NNUmVtZWRpYXRpb25BdXRvbWF0aW9uRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBvcGVyYXRpb25hbCBhY2NvdW50cyB0byBSZW1lZGlhdGUgdW5tYW5hZ2VkIG5vZGVzIGJ5IHByb3ZpZGluZyBPcmdhbmlzYXRpb24gc3BlY2lmaWMgcGVybWlzc2lvbnMgcmVxdWlyZWQgYnkgU1NNIGF1dG9tYXRpb24gdG8gcHVsbCB0aGUgbGlzdCBvZiBtZW1iZXIgYWNjb3VudHMgd2l0aGluIGEgcm9vdCBvZiBhbiBPcmdhbmlzYXRpb24gdG8gdHJpZ2dlciBjcm9zcy1hY2NvdW50IGNyb3NzLXJlZ2lvbiBleGVjdXRpb24gYnkgYWxsb3dpbmcgYXNzdW1pbmcgRXhlY3V0aW9uIHJvbGVzIGluIHRhcmdldCBhY2NvdW50L3JlZ2lvbi4gKi9cbiAgICBwdWJsaWMgQVdTU1NNUmVtZWRpYXRpb25BdXRvbWF0aW9uT3BlcmF0aW9uYWxBY2NvdW50QWRtaW5pc3RyYXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTTVJlbWVkaWF0aW9uQXV0b21hdGlvbk9wZXJhdGlvbmFsQWNjb3VudEFkbWluaXN0cmF0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB1c2VycyB0byBhY2Nlc3MgdGhlIEFjY291bnQgQWN0aXZpdHkgcGFnZS4gKi9cbiAgICBwdWJsaWMgQVdTQWNjb3VudEFjdGl2aXR5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FjY291bnRBY3Rpdml0eUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBBY2NvdW50IE1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIEFXU0FjY291bnRNYW5hZ2VtZW50RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBY2NvdW50TWFuYWdlbWVudEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBBY2NvdW50IE1hbmFnZW1lbnQgKi9cbiAgICBwdWJsaWMgQVdTQWNjb3VudE1hbmFnZW1lbnRSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBY2NvdW50TWFuYWdlbWVudFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHVzZXJzIHRvIGFjY2VzcyB0aGUgQWNjb3VudCBVc2FnZSBSZXBvcnQgcGFnZS4gKi9cbiAgICBwdWJsaWMgQVdTQWNjb3VudFVzYWdlUmVwb3J0QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FjY291bnRVc2FnZVJlcG9ydEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyBmb3IgdGhlIERpc2NvdmVyeSBBZ2VudGxlc3MgQ29ubmVjdG9yIHRvIHJlZ2lzdGVyIHdpdGggQVdTIEFwcGxpY2F0aW9uIERpc2NvdmVyeSBTZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NBZ2VudGxlc3NEaXNjb3ZlcnlTZXJ2aWNlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FnZW50bGVzc0Rpc2NvdmVyeVNlcnZpY2UpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIEFwcEZhYnJpYyBzZXJ2aWNlIGFuZCByZWFkIG9ubHkgYWNjZXNzIHRvIGRlcGVuZGVudCBzZXJ2aWNlcyBzdWNoIGFzIFMzLCBLaW5lc2lzLCBLTVMuICovXG4gICAgcHVibGljIEFXU0FwcEZhYnJpY0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwRmFicmljRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gdGhlIEFXUyBBcHBGYWJyaWMgKi9cbiAgICBwdWJsaWMgQVdTQXBwRmFicmljUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwRmFicmljUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBcHBGYWJyaWMgYWNjZXNzIHRvIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTQXBwRmFicmljU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwRmFicmljU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBBcHBTdHJlYW0gYW5kIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdBcHBTdHJlYW1GbGVldFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nQXBwU3RyZWFtRmxlZXRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBDYXNzYW5kcmEgYW5kIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdDYXNzYW5kcmFUYWJsZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nQ2Fzc2FuZHJhVGFibGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBDb21wcmVoZW5kIGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nQ29tcHJlaGVuZEVuZHBvaW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdDb21wcmVoZW5kRW5kcG9pbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBBUElHYXRld2F5IGFuZCBDbG91ZFdhdGNoIGZvciBjdXN0b20gcmVzb3VyY2Ugc2NhbGluZyAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9TY2FsaW5nQ3VzdG9tUmVzb3VyY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvU2NhbGluZ0N1c3RvbVJlc291cmNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgRHluYW1vREIgYW5kIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdEeW5hbW9EQlRhYmxlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdEeW5hbW9EQlRhYmxlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgRUMyIFNwb3QgRmxlZXQgYW5kIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdFQzJTcG90RmxlZXRSZXF1ZXN0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdFQzJTcG90RmxlZXRSZXF1ZXN0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgRUMyIENvbnRhaW5lciBTZXJ2aWNlIGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRUNTU2VydmljZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRUNTU2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIEFtYXpvbiBFbGFzdGlDYWNoZSBhbmQgQW1hem9uIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdFbGFzdGlDYWNoZVJHUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdFbGFzdGlDYWNoZVJHUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgRWxhc3RpYyBNYXAgUmVkdWNlIGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRU1SSW5zdGFuY2VHcm91cFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRU1SSW5zdGFuY2VHcm91cFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIE1hbmFnZWQgU3RyZWFtaW5nIGZvciBBcGFjaGUgS2Fma2EgYW5kIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdLYWZrYUNsdXN0ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0thZmthQ2x1c3RlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIExhbWJkYSBhbmQgQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0xhbWJkYUNvbmN1cnJlbmN5UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdMYW1iZGFDb25jdXJyZW5jeVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIEFtYXpvbiBOZXB0dW5lIGFuZCBBbWF6b24gQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ05lcHR1bmVDbHVzdGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdOZXB0dW5lQ2x1c3RlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIFJEUyBhbmQgQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ1JEU0NsdXN0ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ1JEU0NsdXN0ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBTYWdlTWFrZXIgYW5kIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdTYWdlTWFrZXJFbmRwb2ludFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nU2FnZU1ha2VyRW5kcG9pbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBBbWF6b24gV29ya1NwYWNlcyBhbmQgQW1hem9uIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdXb3JrU3BhY2VzUG9vbFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nV29ya1NwYWNlc1Bvb2xQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgZm9yIHRoZSBEaXNjb3ZlcnkgQWdlbnQgdG8gcmVnaXN0ZXIgd2l0aCBBV1MgQXBwbGljYXRpb24gRGlzY292ZXJ5IFNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uRGlzY292ZXJ5QWdlbnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25EaXNjb3ZlcnlBZ2VudEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBcHBsaWNhdGlvbiBEaXNjb3ZlcnkgU2VydmljZSBBZ2VudGxlc3MgQ29sbGVjdG9ycyB0byBhdXRvIHVwZGF0ZSwgcmVnaXN0ZXIsIGFuZCBjb21tdW5pY2F0ZSB3aXRoIEFwcGxpY2F0aW9uIERpc2NvdmVyeSBTZXJ2aWNlICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uRGlzY292ZXJ5QWdlbnRsZXNzQ29sbGVjdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uRGlzY292ZXJ5QWdlbnRsZXNzQ29sbGVjdG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdmlldyBhbmQgdGFnIENvbmZpZ3VyYXRpb24gSXRlbXMgbWFpbnRhaW5lZCBieSB0aGUgQVdTIEFwcGxpY2F0aW9uIERpc2NvdmVyeSBTZXJ2aWNlICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uRGlzY292ZXJ5U2VydmljZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25EaXNjb3ZlcnlTZXJ2aWNlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBpbnN0YWxsaW5nIHRoZSBBV1MgUmVwbGljYXRpb24gQWdlbnQsIHdoaWNoIGlzIHVzZWQgd2l0aCBBV1MgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgKE1HTikgdG8gbWlncmF0ZSBleHRlcm5hbCBzZXJ2ZXJzIHRvIEFXUy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzIHdob3NlIGNyZWRlbnRpYWxzIHlvdSBwcm92aWRlIHdoZW4gaW5zdGFsbGluZyB0aGUgQVdTIFJlcGxpY2F0aW9uIEFnZW50LiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkFnZW50SW5zdGFsbGF0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uQWdlbnRJbnN0YWxsYXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgaW5zdGFsbGluZyBhbmQgdXNpbmcgdGhlIEFXUyBSZXBsaWNhdGlvbiBBZ2VudCwgd2hpY2ggaXMgdXNlZCB3aXRoIEFXUyBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSAoTUdOKSB0byBtaWdyYXRlIGV4dGVybmFsIHNlcnZlcnMgdG8gQVdTLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMgd2hvc2UgY3JlZGVudGlhbHMgeW91IHByb3ZpZGUgd2hlbiBpbnN0YWxsaW5nIHRoZSBBV1MgUmVwbGljYXRpb24gQWdlbnQuICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uQWdlbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25BZ2VudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyB1c2luZyB0aGUgQVdTIFJlcGxpY2F0aW9uIEFnZW50LCB3aGljaCBpcyB1c2VkIHdpdGggQVdTIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChNR04pIHRvIG1pZ3JhdGUgZXh0ZXJuYWwgc2VydmVycyB0byBBV1MuIFdlIGRvIG5vdCByZWNvbW1lbmQgdGhhdCB5b3UgYXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkFnZW50UG9saWN5VjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25BZ2VudFBvbGljeVYyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIHRoZSBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSAoTUdOKSBDb252ZXJzaW9uIFNlcnZlciwgd2hpY2ggYXJlIEVDMiBpbnN0YW5jZXMgbGF1bmNoZWQgYnkgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UsIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIE1HTiBzZXJ2aWNlLiBBbiBJQU0gcm9sZSB3aXRoIHRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIChhcyBhbiBFQzIgSW5zdGFuY2UgUHJvZmlsZSkgYnkgTUdOIHRvIHRoZSBNR04gQ29udmVyc2lvbiBTZXJ2ZXJzLCB3aGljaCBhcmUgYXV0b21hdGljYWxseSBsYXVuY2hlZCBhbmQgdGVybWluYXRlZCBieSBNR04sIHdoZW4gbmVlZGVkLiBXZSBkbyBub3QgcmVjb21tZW5kIHRoYXQgeW91IGF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gTUdOIENvbnZlcnNpb24gU2VydmVycyBhcmUgdXNlZCBieSBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSB3aGVuIHVzZXJzIGNob29zZSB0byBsYXVuY2ggVGVzdCBvciBDdXRvdmVyIGluc3RhbmNlcyB1c2luZyB0aGUgTUdOIGNvbnNvbGUsIENMSSwgb3IgQVBJLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkNvbnZlcnNpb25TZXJ2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25Db252ZXJzaW9uU2VydmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgQW1hem9uIEVDMiBvcGVyYXRpb25zIHJlcXVpcmVkIHRvIHVzZSBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSAoTUdOKSB0byBsYXVuY2ggdGhlIG1pZ3JhdGVkIHNlcnZlcnMgYXMgRUMyIGluc3RhbmNlcy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkVDMkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkVDMkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGFsbCBwdWJsaWMgQVBJcyBvZiBBV1MgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgKE1HTiksIGFzIHdlbGwgYXMgcGVybWlzc2lvbnMgdG8gcmVhZCBLTVMga2V5IGluZm9ybWF0aW9uLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgQVdTIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChNR04pIHRvIHNlbmQgbWV0YS1kYXRhIGFib3V0IHRoZSBwcm9ncmVzcyBvZiBzZXJ2ZXJzIGJlaW5nIG1pZ3JhdGVkIHVzaW5nIE1HTiB0byBBV1MgTWlncmF0aW9uIEh1YiAoTUdIKS4gTUdOIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBhbiBJQU0gcm9sZSB3aXRoIHRoaXMgcG9saWN5IGF0dGFjaGVkLCBhbmQgYXNzdW1lcyB0aGlzIHJvbGUuIFdlIGRvIG5vdCByZWNvbW1lbmQgdGhhdCB5b3UgYXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbk1HSEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbk1HSEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBOZXR3b3JrIE1pZ3JhdGlvbiBjdXN0b20gcmVzb3VyY2UgKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25OZXR3b3JrTWlncmF0aW9uQ3VzdG9tUmVzb3VyY2UoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25OZXR3b3JrTWlncmF0aW9uQ3VzdG9tUmVzb3VyY2UpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBhdXRvbWF0ZSBWTXdhcmUgdG8gQVdTIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUgbWlncmF0aW9uIHRocm91Z2ggQ2xvdWRGb3JtYXRpb24gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25OZXR3b3JrTWlncmF0aW9uTXVsdGlBY2NvdW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uTmV0d29ya01pZ3JhdGlvbk11bHRpQWNjb3VudCk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGFsbCByZWFkLW9ubHkgcHVibGljIEFQSXMgb2YgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgKE1HTiksIGFzIHdlbGwgYXMgc29tZSByZWFkLW9ubHkgQVBJcyBvZiBvdGhlciBBV1Mgc2VydmljZXMgdGhhdCBhcmUgcmVxdWlyZWQgaW4gb3JkZXIgdG8gbWFrZSBmdWxsIHJlYWQtb25seSB1c2Ugb2YgdGhlIE1HTiBjb25zb2xlLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyB0aGUgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgKE1HTikgUmVwbGljYXRpb24gU2VydmVycywgd2hpY2ggYXJlIEVDMiBpbnN0YW5jZXMgbGF1bmNoZWQgYnkgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgLSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBNR04gc2VydmljZSwgYW5kIHRvIGNyZWF0ZSBFQlMgc25hcHNob3RzIGluIHlvdXIgQVdTIGFjY291bnQuIEFuIElBTSByb2xlIHdpdGggdGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgKGFzIGFuIEVDMiBJbnN0YW5jZSBQcm9maWxlKSBieSBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSB0byB0aGUgTUdOIFJlcGxpY2F0aW9uIFNlcnZlcnMgd2hpY2ggYXJlIGF1dG9tYXRpY2FsbHkgbGF1bmNoZWQgYW5kIHRlcm1pbmF0ZWQgYnkgTUdOLCBhcyBuZWVkZWQuIE1HTiBSZXBsaWNhdGlvbiBTZXJ2ZXJzIGFyZSB1c2VkIHRvIGZhY2lsaXRhdGUgZGF0YSByZXBsaWNhdGlvbiBmcm9tIHlvdXIgZXh0ZXJuYWwgc2VydmVycyB0byBBV1MsIGFzIHBhcnQgb2YgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzIG1hbmFnZWQgdXNpbmcgTUdOLiBXZSBkbyBub3QgcmVjb21tZW5kIHRoYXQgeW91IGF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25SZXBsaWNhdGlvblNlcnZlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvblJlcGxpY2F0aW9uU2VydmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIGluc3RhbGxpbmcgYW5kIHVzaW5nIHRoZSBBV1MgUmVwbGljYXRpb24gQWdlbnQsIHdoaWNoIGlzIHVzZWQgYnkgQVdTIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChBV1MgTUdOKSB0byBtaWdyYXRlIHNvdXJjZSBzZXJ2ZXJzIHRoYXQgcnVuIG9uIEVDMiAoY3Jvc3MtUmVnaW9uIG9yIGNyb3NzLUFaKS4gQW4gSUFNIHJvbGUgd2l0aCB0aGlzIHBvbGljeSBzaG91bGQgYmUgYXR0YWNoZWQgKGFzIGFuIEVDMiBJbnN0YW5jZSBQcm9maWxlKSB0byB0aGUgRUMyIEluc3RhbmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25TZXJ2aWNlRWMySW5zdGFuY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25TZXJ2aWNlRWMySW5zdGFuY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIGFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gU1NNIG9wZXJhdGlvbnMgcmVxdWlyZWQgdG8gdXNlIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChNR04pIHRvIGV4ZWN1dGUgY3VzdG9tIHBvc3QgbWlncmF0aW9uIGNvbW1hbmQgU1NNIGRvY3VtZW50cy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvblNTTUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvblNTTUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBpbnN0YWxsaW5nIGFuZCB1c2luZyB0aGUgQVdTIFZDZW50ZXIgQ2xpZW50LCB3aGljaCBpcyB1c2VkIHdpdGggQVdTIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChNR04pIHRvIG1pZ3JhdGUgZXh0ZXJuYWwgc2VydmVycyB0byBBV1MuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcyB3aG9zZSBjcmVkZW50aWFscyB5b3UgcHJvdmlkZSB3aGVuIGluc3RhbGxpbmcgdGhlIEFXUyBWQ2VudGVyIENsaWVudC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25WQ2VudGVyQ2xpZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uVkNlbnRlckNsaWVudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFwcCBNZXNoIEVudm95IHBvbGljeSBmb3IgYWNjZXNzaW5nIFZpcnR1YWwgTm9kZSBjb25maWd1cmF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBNZXNoRW52b3lBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwTWVzaEVudm95QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFXUyBBcHAgTWVzaCBBUElzIGFuZCBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0FwcE1lc2hGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcE1lc2hGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQXBwIE1lc2ggUHJldmlldyBFbnZveSBwb2xpY3kgZm9yIGFjY2Vzc2luZyBWaXJ0dWFsIE5vZGUgY29uZmlndXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTQXBwTWVzaFByZXZpZXdFbnZveUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBNZXNoUHJldmlld0Vudm95QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFXUyBBcHAgTWVzaCAqL1xuICAgIHB1YmxpYyBBV1NBcHBNZXNoUHJldmlld1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcE1lc2hQcmV2aWV3U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBBV1MgQXBwIE1lc2ggQVBJcyBhbmQgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBNZXNoUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwTWVzaFJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFXUyBBcHBNZXNoICovXG4gICAgcHVibGljIEFXU0FwcE1lc2hTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBNZXNoU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYWxsIEFwcCBSdW5uZXIgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTQXBwUnVubmVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBSdW5uZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIGxpc3QgYW5kIHZpZXcgZGV0YWlscyBhYm91dCBBcHAgUnVubmVyIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQXBwUnVubmVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwUnVubmVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgQXBwIFJ1bm5lciBzZXJ2aWNlIHBvbGljeSB0aGF0IGdyYW50cyByZWFkIHBlcm1pc3Npb25zIHRvIEFtYXpvbiBFQ1IgcmVzb3VyY2VzIGluIHRoZSBjdXN0b21lcidzIGFjY291bnQuIFVzZSBpdCBpbiBhIHJvbGUgdGhhdCBpcyBwYXNzZWQgdG8gQXBwIFJ1bm5lciB3aGVuIGNyZWF0aW5nIG9yIHVwZGF0aW5nIGFuIEFwcCBSdW5uZXIgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTQXBwUnVubmVyU2VydmljZVBvbGljeUZvckVDUkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBSdW5uZXJTZXJ2aWNlUG9saWN5Rm9yRUNSQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIHRoZSBBcHBTeW5jIHNlcnZpY2UsIHRob3VnaCBub3QgZW5vdWdoIHRvIGFjY2VzcyB2aWEgdGhlIGNvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0FwcFN5bmNBZG1pbmlzdHJhdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcFN5bmNBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBpbnZva2luZyBhY2Nlc3MgdG8gdGhlIEFwcFN5bmMgc2VydmljZSAtIGJvdGggdGhyb3VnaCB0aGUgY29uc29sZSBhbmQgaW5kZXBlbmRlbnRseSAqL1xuICAgIHB1YmxpYyBBV1NBcHBTeW5jSW52b2tlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBTeW5jSW52b2tlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBcHBTeW5jIHRvIHB1c2ggbG9ncyB0byB1c2VyJ3MgQ2xvdWRXYXRjaCBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBV1NBcHBTeW5jUHVzaFRvQ2xvdWRXYXRjaExvZ3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwU3luY1B1c2hUb0Nsb3VkV2F0Y2hMb2dzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGNyZWF0ZSwgdXBkYXRlLCBhbmQgcXVlcnkgdGhlIHNjaGVtYS4gKi9cbiAgICBwdWJsaWMgQVdTQXBwU3luY1NjaGVtYUF1dGhvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBTeW5jU2NoZW1hQXV0aG9yKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFwcFN5bmMgKi9cbiAgICBwdWJsaWMgQVdTQXBwU3luY1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcFN5bmNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgQXJ0aWZhY3QgcmVhZC1vbmx5IGFjY2VzcyB0byBvcGVyYXRpb25zIGluIEFXUyBPcmdhbml6YXRpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NBcnRpZmFjdEFjY291bnRTeW5jKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FydGlmYWN0QWNjb3VudFN5bmMpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgZnVsbCBwZXJtaXNzaW9ucyB0byBsaXN0LCBkb3dubG9hZCwgYWNjZXB0LCBhbmQgdGVybWluYXRlIEFXUyBBcnRpZmFjdCBhZ3JlZW1lbnRzLiBJdCBhbHNvIGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIGxpc3QgYW5kIGVuYWJsZSBBV1Mgc2VydmljZSBhY2Nlc3MgaW4gdGhlIE9yZ2FuaXphdGlvbiBzZXJ2aWNlLCBhcyB3ZWxsIGFzIGRlc2NyaWJlIHRoZSBvcmdhbml6YXRpb24gZGV0YWlscy4gQWRkaXRpb25hbGx5LCB0aGUgcG9saWN5IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGNoZWNrIGlmIHRoZSByZXF1aXJlZCBzZXJ2aWNlLWxpbmtlZCByb2xlIGV4aXN0cyBhbmQgY3JlYXRlcyBvbmUgaWYgaXQgZG9lc24ndCAqL1xuICAgIHB1YmxpYyBBV1NBcnRpZmFjdEFncmVlbWVudHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FydGlmYWN0QWdyZWVtZW50c0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcmVhZC1vbmx5IGFjY2VzcyB0byBsaXN0IHRoZSBBV1MgQXJ0aWZhY3Qgc2VydmljZSBhZ3JlZW1lbnRzIGFuZCB0byBkb3dubG9hZCB0aGUgYWNjZXB0ZWQgYWdyZWVtZW50cy4uIEl0IGFsc28gaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gbGlzdCBhcyB3ZWxsIGFzIGRlc2NyaWJlIHRoZSBvcmdhbml6YXRpb24gZGV0YWlscy4gQWRkaXRpb25hbGx5LCB0aGUgcG9saWN5IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGNoZWNrIGlmIHRoZSByZXF1aXJlZCBzZXJ2aWNlLWxpbmtlZCByb2xlIGV4aXN0cy4gKi9cbiAgICBwdWJsaWMgQVdTQXJ0aWZhY3RBZ3JlZW1lbnRzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXJ0aWZhY3RBZ3JlZW1lbnRzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBBV1MgQXJ0aWZhY3Qgc2VydmljZSByZXBvcnRzLiAqL1xuICAgIHB1YmxpYyBBV1NBcnRpZmFjdFJlcG9ydHNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcnRpZmFjdFJlcG9ydHNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgQXJ0aWZhY3QgdG8gZ2F0aGVyIGluZm9ybWF0aW9uIGFib3V0IGFuIG9yZ2FuaXphdGlvbiB2aWEgQVdTIE9yZ2FuaXphdGlvbnMgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTQXJ0aWZhY3RTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcnRpZmFjdFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIGVuYWJsZSBvciBkaXNhYmxlIEFXUyBBdWRpdCBNYW5hZ2VyLCB1cGRhdGUgc2V0dGluZ3MsIGFuZCBtYW5hZ2UgYXNzZXNzbWVudHMsIGNvbnRyb2xzLCBhbmQgZnJhbWV3b3JrcyAqL1xuICAgIHB1YmxpYyBBV1NBdWRpdE1hbmFnZXJBZG1pbmlzdHJhdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0F1ZGl0TWFuYWdlckFkbWluaXN0cmF0b3JBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQVdTIEF1ZGl0IE1hbmFnZXIgKi9cbiAgICBwdWJsaWMgQVdTQXVkaXRNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXVkaXRNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQVdTIEF1dG8gU2NhbGluZyB0byBwZXJpb2RpY2FsbHkgZm9yZWNhc3QgY2FwYWNpdHkgYW5kIGdlbmVyYXRlIHNjaGVkdWxlZCBzY2FsaW5nIGFjdGlvbnMgZm9yIEF1dG8gU2NhbGluZyBncm91cHMgaW4gYSBzY2FsaW5nIHBsYW4gKi9cbiAgICBwdWJsaWMgQVdTQXV0b1NjYWxpbmdQbGFuc0VDMkF1dG9TY2FsaW5nUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0F1dG9TY2FsaW5nUGxhbnNFQzJBdXRvU2NhbGluZ1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyBmb3IgdXNlcnMgdG8gY3JlYXRlIGNvbnRyb2xzIGFuZCBmcmFtZXdvcmtzIHRoYXQgZGVmaW5lIHRoZWlyIGV4cGVjdGF0aW9ucyBmb3IgQVdTIEJhY2t1cCByZXNvdXJjZXMgYW5kIGFjdGl2aXRpZXMsIGFuZCB0byBhdWRpdCBBV1MgQmFja3VwIHJlc291cmNlcyBhbmQgYWN0aXZpdGllcyBhZ2FpbnN0IHRoZWlyIGRlZmluZWQgY29udHJvbHMgYW5kIGZyYW1ld29ya3MuIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byBBV1MgQ29uZmlnIGFuZCBzaW1pbGFyIHNlcnZpY2VzIHRvIGRlc2NyaWJlIHVzZXIgZXhwZWN0YXRpb25zIHBlcmZvcm0gdGhlIGF1ZGl0cy4gVGhpcyBwb2xpY3kgYWxzbyBncmFudHMgcGVybWlzc2lvbnMgdG8gZGVsaXZlciBhdWRpdCByZXBvcnRzIHRvIFMzIGFuZCBzaW1pbGFyIHNlcnZpY2VzLCBhbmQgZW5hYmxlcyB1c2VycyB0byBmaW5kIGFuZCBvcGVuIHRoZWlyIGF1ZGl0IHJlcG9ydHMuICovXG4gICAgcHVibGljIEFXU0JhY2t1cEF1ZGl0QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cEF1ZGl0QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIHRoZSBBV1MgQmFja2ludCBhZ2VudCB0byBjb21wbGV0ZSBiYWNrdXAgZGF0YSB0cmFuc2ZlciB3aXRoIEFXUyBCYWNrdXAgU3RvcmFnZSBwbGFuZS4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHJvbGVzIGFzc3VtZWQgYnkgRUMyIEluc3RhbmNlcyBydW5uaW5nIFNBUCBIQU5BIHdpdGggdGhlIEJhY2tpbnQgYWdlbnQuICovXG4gICAgcHVibGljIEFXU0JhY2t1cERhdGFUcmFuc2ZlckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBEYXRhVHJhbnNmZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBmb3IgYmFja3VwIGFkbWluaXN0cmF0b3JzLCBncmFudGluZyBmdWxsIGFjY2VzcyB0byBBV1MgQmFja3VwIG9wZXJhdGlvbnMsIGluY2x1ZGluZyBjcmVhdGluZyBvciBlZGl0aW5nIGJhY2t1cCBwbGFucywgYXNzaWduaW5nIEFXUyByZXNvdXJjZXMgdG8gYmFja3VwIHBsYW5zLCBkZWxldGluZyBiYWNrdXBzLCBhbmQgcmVzdG9yaW5nIGJhY2t1cHMuICovXG4gICAgcHVibGljIEFXU0JhY2t1cEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBCYWNrdXBHYXRld2F5IHBlcm1pc3Npb24gdG8gc3luYyB0aGUgbWV0YWRhdGEgb2YgVmlydHVhbCBNYWNoaW5lcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBHYXRld2F5U2VydmljZVJvbGVQb2xpY3lGb3JWaXJ0dWFsTWFjaGluZU1ldGFkYXRhU3luYygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBHYXRld2F5U2VydmljZVJvbGVQb2xpY3lGb3JWaXJ0dWFsTWFjaGluZU1ldGFkYXRhU3luYyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEd1YXJkRHV0eSBwZXJtaXNzaW9uIHRvIHJlYWQgeW91ciBBV1MgQmFja3VwIFJlY292ZXJ5IFBvaW50cyBmb3IgbWFsd2FyZSBzY2FucyAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBHdWFyZER1dHlSb2xlUG9saWN5Rm9yU2NhbnMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwR3VhcmREdXR5Um9sZVBvbGljeUZvclNjYW5zKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHVzZXJzIHBlcm1pc3Npb25zIHRvIGFzc2lnbiBBV1MgcmVzb3VyY2VzIHRvIGJhY2t1cCBwbGFucywgY3JlYXRlIG9uLWRlbWFuZCBiYWNrdXBzLCBhbmQgcmVzdG9yZSBiYWNrdXBzLiBUaGlzIHBvbGljeSBkb2VzIG5vdCBhbGxvdyB0aGUgdXNlciB0byBjcmVhdGUgb3IgZWRpdCBiYWNrdXAgcGxhbnMgb3IgdG8gZGVsZXRlIHNjaGVkdWxlZCBiYWNrdXBzIGFmdGVyIHRoZXkgYXJlIGNyZWF0ZWQuICovXG4gICAgcHVibGljIEFXU0JhY2t1cE9wZXJhdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cE9wZXJhdG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgZm9yIGJhY2t1cCBhZG1pbmlzdGF0b3JzIHdobyB1c2UgY3Jvc3MtYWNjb3VudCBiYWNrdXAgbWFuYWdlbWVudCB0byBtYW5hZ2UgYmFja3VwcyBmb3IgdGhlIG9yZ2FuaXphdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwT3JnYW5pemF0aW9uQWRtaW5BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwT3JnYW5pemF0aW9uQWRtaW5BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBV1MgQmFja3VwIHBlcm1pc3Npb24gdG8gcmVzdG9yZSBhIGJhY2t1cCBvZiBTQVAgSEFOQSBvbiBBbWF6b24gRUMyICovXG4gICAgcHVibGljIEFXU0JhY2t1cFJlc3RvcmVBY2Nlc3NGb3JTQVBIQU5BKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cFJlc3RvcmVBY2Nlc3NGb3JTQVBIQU5BKTtcbiAgICB9XG5cbiAgICAvKiogVGhlIHNlYXJjaCBvcGVyYXRvciByb2xlIGhhcyBhY2Nlc3MgdG8gY3JlYXRlIGJhY2t1cCBpbmRleGVzLCBjcmVhdGUgc2VhcmNoZXMgb2YgYmFja3VwIG1ldGFkYXRhIHRoYXQgaGFzIGJlZW4gaW5kZXhlZC4gVGhpcyBwb2xpY3kgY29udGFpbnMgdGhlIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyBmb3IgdGhlc2Ugc2VhcmNoIG9wZXJhdG9yIGZ1bmN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwU2VhcmNoT3BlcmF0b3JBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwU2VhcmNoT3BlcmF0b3JBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBV1MgQmFja3VwIHBlcm1pc3Npb24gdG8gY3JlYXRlIGJhY2t1cHMgb24geW91ciBiZWhhbGYgYWNyb3NzIEFXUyBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBTZXJ2aWNlTGlua2VkUm9sZVBvbGljeUZvckJhY2t1cCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBTZXJ2aWNlTGlua2VkUm9sZVBvbGljeUZvckJhY2t1cCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBCYWNrdXAgcGVybWlzc2lvbiB0byBjcmVhdGUgYmFja3VwcyBvbiB5b3VyIGJlaGFsZiBhY3Jvc3MgQVdTIHNlcnZpY2VzICovXG4gICAgcHVibGljIEFXU0JhY2t1cFNlcnZpY2VMaW5rZWRSb2xlUG9saWN5Rm9yQmFja3VwVGVzdCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBTZXJ2aWNlTGlua2VkUm9sZVBvbGljeUZvckJhY2t1cFRlc3QpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBV1MgQmFja3VwIHBlcm1pc3Npb24gdG8gY3JlYXRlIGJhY2t1cHMgb24geW91ciBiZWhhbGYgYWNyb3NzIEFXUyBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvckJhY2t1cCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvckJhY2t1cCk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBjb250YWluaW5nIHBlcm1pc3Npb25zIG5lY2Vzc2FyeSBmb3IgQVdTIEJhY2t1cCB0byBpbmRleCByZWNvdmVyeSBwb2ludHMuICovXG4gICAgcHVibGljIEFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9ySW5kZXhpbmcoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JJbmRleGluZyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBjb250YWluaW5nIHBlcm1pc3Npb25zIG5lY2Vzc2FyeSBmb3IgQVdTIEJhY2t1cCB0byByZXN0b3JlIGluZGl2aWR1YWwgaXRlbXMgaW4gYSByZWNvdmVyeSBwb2ludCAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvckl0ZW1SZXN0b3JlcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvckl0ZW1SZXN0b3Jlcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBCYWNrdXAgcGVybWlzc2lvbiB0byBwZXJmb3JtIHJlc3RvcmVzIG9uIHlvdXIgYmVoYWxmIGFjcm9zcyBBV1Mgc2VydmljZXMuIFRoaXMgcG9saWN5IGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBhbmQgZGVsZXRlIEFXUyByZXNvdXJjZXMsIHN1Y2ggYXMgRUJTIHZvbHVtZXMsIFJEUyBpbnN0YW5jZXMsIGFuZCBFRlMgZmlsZSBzeXN0ZW1zLCB3aGljaCBhcmUgcGFydCBvZiB0aGUgcmVzdG9yZSBwcm9jZXNzLiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvclJlc3RvcmVzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yUmVzdG9yZXMpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgY29udGFpbmluZyBwZXJtaXNzaW9ucyBuZWNlc3NhcnkgZm9yIEFXUyBCYWNrdXAgdG8gYmFja3VwIGRhdGEgaW4gYW55IFMzIGJ1Y2tldC4gVGhpcyBpbmNsdWRlcyByZWFkIGFjY2VzcyB0byBhbGwgUzMgb2JqZWN0cyBhbmQgYW55IGRlY3J5cHQgYWNjZXNzIGZvciBhbGwgS01TIGtleXMuICovXG4gICAgcHVibGljIEFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yUzNCYWNrdXAoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JTM0JhY2t1cCk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBjb250YWluaW5nIHBlcm1pc3Npb25zIG5lY2Vzc2FyeSBmb3IgQVdTIEJhY2t1cCB0byByZXN0b3JlIGEgUzMgYmFja3VwIHRvIGEgYnVja2V0LiBUaGlzIGluY2x1ZGVzIHJlYWQvd3JpdGUgcGVybWlzc2lvbnMgdG8gYWxsIFMzIGJ1Y2tldHMsIGFuZCBwZXJtaXNzaW9ucyB0byBHZW5lcmF0ZURhdGFLZXkgYW5kIERlc2NyaWJlS2V5IGZvciBhbGwgS01TIGtleXMuICovXG4gICAgcHVibGljIEFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yUzNSZXN0b3JlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yUzNSZXN0b3JlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQVdTIEJhY2t1cCBwZXJtaXNzaW9uIHRvIHBlcmZvcm0gbWFsd2FyZSBzY2FucyBvbiB5b3VyIEFXUyBCYWNrdXAgUmVjb3ZlcnkgUG9pbnRzICovXG4gICAgcHVibGljIEFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yU2NhbnMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JTY2Fucyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIGZvciBBV1MgQmF0Y2ggcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NCYXRjaEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmF0Y2hGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBDbG91ZFdhdGNoIEV2ZW50IFRhcmdldCBmb3IgQVdTIEJhdGNoIEpvYiBTdWJtaXNzaW9uICovXG4gICAgcHVibGljIEFXU0JhdGNoU2VydmljZUV2ZW50VGFyZ2V0Um9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYXRjaFNlcnZpY2VFdmVudFRhcmdldFJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIEFXUyBCYXRjaCBzZXJ2aWNlIHJvbGUgd2hpY2ggYWxsb3dzIGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBFQzIsIEF1dG9zY2FsaW5nLCBFQzIgQ29udGFpbmVyIHNlcnZpY2UgYW5kIENsb3Vkd2F0Y2ggTG9ncy4gKi9cbiAgICBwdWJsaWMgQVdTQmF0Y2hTZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYXRjaFNlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIGZvciBBV1MgQmF0Y2ggdG8gcXVldWUgYW5kIG1hbmFnZSBBbWF6b24gU2FnZU1ha2VyIHdvcmtsb2FkcyAqL1xuICAgIHB1YmxpYyBBV1NCYXRjaFNlcnZpY2VSb2xlUG9saWN5Rm9yU2FnZU1ha2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhdGNoU2VydmljZVJvbGVQb2xpY3lGb3JTYWdlTWFrZXIpO1xuICAgIH1cblxuICAgIC8qKiBBIHNlcnZpY2UgbGlua2VkIHJvbGUgdG8gcHJvdmlkZSBCaWxsaW5nIGFuZCBDb3N0IE1hbmFnZW1lbnQgRGF0YSBFeHBvcnRzIGFjY2VzcyB0byBBV1Mgc2VydmljZSBkYXRhIGZvciBleHBvcnRpbmcgdGhlIGRhdGEgdG8gYSB0YXJnZXQgbG9jYXRpb24sIHN1Y2ggYXMgQW1hem9uIFMzLCBvbiBiZWhhbGYgb2YgYSBjdXN0b21lci4gKi9cbiAgICBwdWJsaWMgQVdTQkNNRGF0YUV4cG9ydHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCQ01EYXRhRXhwb3J0c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVXNlIHRoZSBBV1NCaWxsaW5nQ29uZHVjdG9yRnVsbEFjY2VzcyBtYW5hZ2VkIHBvbGljeSB0byBhbGxvdyBjb21wbGV0ZSBhY2Nlc3MgdG8gQVdTIEJpbGxpbmcgQ29uZHVjdG9yIChBQkMpIGNvbnNvbGUgYW5kIEFQSXMuIFRoaXMgcG9saWN5IGFsbG93cyB1c2VycyB0byBsaXN0LCBjcmVhdGUgYW5kIGRlbGV0ZSBBQkMgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NCaWxsaW5nQ29uZHVjdG9yRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCaWxsaW5nQ29uZHVjdG9yRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFVzZSB0aGUgQVdTQmlsbGluZ0NvbmR1Y3RvclJlYWRPbmx5QWNjZXNzIG1hbmFnZWQgcG9saWN5IHRvIGFsbG93IHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIEJpbGxpbmcgQ29uZHVjdG9yIChBQkMpIGNvbnNvbGUgYW5kIEFQSXMuIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9uIHRvIHZpZXcgYW5kIGxpc3QgYWxsIEFCQyByZXNvdXJjZXMuIEl0IGRvZXMgbm90IGluY2x1ZGUgdGhlIGFiaWxpdHkgdG8gY3JlYXRlIG9yIGRlbGV0ZSByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0JpbGxpbmdDb25kdWN0b3JSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCaWxsaW5nQ29uZHVjdG9yUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdXNlcnMgdG8gdmlldyBiaWxscyBvbiB0aGUgQmlsbGluZyBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NCaWxsaW5nUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmlsbGluZ1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGJpbGxpbmcgc2VydmljZSB0byB2YWxpZGF0ZSBhY2Nlc3MgdG8gYmlsbGluZyB2aWV3IGRhdGEgZm9yIGRlcml2ZWQgYmlsbGluZyB2aWV3cyAqL1xuICAgIHB1YmxpYyBBV1NCaWxsaW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmlsbGluZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ2l2ZXMgcGVybWlzc2lvbnMgdG8gY29udHJvbCBBV1MgcmVzb3VyY2VzLiBGb3IgZXhhbXBsZSwgdG8gc3RhcnQgYW5kIHN0b3AgRUMyIG9yIFJEUyBpbnN0YW5jZXMgYnkgZXhlY3V0aW5nIEFXUyBTeXN0ZW1zIE1hbmFnZXIgKFNTTSkgc2NyaXB0cy4gKi9cbiAgICBwdWJsaWMgQVdTQnVkZ2V0c0FjdGlvbnNSb2xlUG9saWN5Rm9yUmVzb3VyY2VBZG1pbmlzdHJhdGlvbldpdGhTU00oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQnVkZ2V0c0FjdGlvbnNSb2xlUG9saWN5Rm9yUmVzb3VyY2VBZG1pbmlzdHJhdGlvbldpdGhTU00pO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgQnVkZ2V0cyBBY3Rpb25zIGluY2x1ZGluZyB1c2luZyBCdWRnZXRzIEFjdGlvbnMgdG8gY29udHJvbCBzdGF0ZXMgb2YgcnVubmluZyBBV1MgcmVzb3VyY2VzIHZpYSBBV1MgTWFuYWdlbWVudCBDb25zb2xlICovXG4gICAgcHVibGljIEFXU0J1ZGdldHNBY3Rpb25zV2l0aEFXU1Jlc291cmNlQ29udHJvbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCdWRnZXRzQWN0aW9uc1dpdGhBV1NSZXNvdXJjZUNvbnRyb2xBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBCdWRnZXRzIENvbnNvbGUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NCdWRnZXRzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQnVkZ2V0c1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBJQU0gcG9saWN5IGdyYW50cyB1c2VycyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIEJ1Z0J1c3QgY29uc29sZSAqL1xuICAgIHB1YmxpYyBBV1NCdWdCdXN0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCdWdCdXN0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgSUFNIHBvbGljeSBncmFudHMgdXNlcnMgYWNjZXNzIHRvIHBhcnRpY2lwYXRlIGluIEFXUyBCdWdCdXN0IGV2ZW50cyAqL1xuICAgIHB1YmxpYyBBV1NCdWdCdXN0UGxheWVyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0J1Z0J1c3RQbGF5ZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gQVdTIEJ1Z0J1c3QgdG8gYWNjZXNzIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBV1NCdWdCdXN0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQnVnQnVzdFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgKEFDTSkgKi9cbiAgICBwdWJsaWMgQVdTQ2VydGlmaWNhdGVNYW5hZ2VyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDZXJ0aWZpY2F0ZU1hbmFnZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYXVkaXRvciBhY2Nlc3MgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKi9cbiAgICBwdWJsaWMgQVdTQ2VydGlmaWNhdGVNYW5hZ2VyUHJpdmF0ZUNBQXVkaXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDZXJ0aWZpY2F0ZU1hbmFnZXJQcml2YXRlQ0FBdWRpdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKi9cbiAgICBwdWJsaWMgQVdTQ2VydGlmaWNhdGVNYW5hZ2VyUHJpdmF0ZUNBRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDZXJ0aWZpY2F0ZU1hbmFnZXJQcml2YXRlQ0FGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcHJpdmlsZWdlZCBjZXJ0aWZpY2F0ZSB1c2VyIGFjY2VzcyB0byBBV1MgQ2VydGlmaWNhdGUgTWFuYWdlciBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSAqL1xuICAgIHB1YmxpYyBBV1NDZXJ0aWZpY2F0ZU1hbmFnZXJQcml2YXRlQ0FQcml2aWxlZ2VkVXNlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDZXJ0aWZpY2F0ZU1hbmFnZXJQcml2YXRlQ0FQcml2aWxlZ2VkVXNlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKi9cbiAgICBwdWJsaWMgQVdTQ2VydGlmaWNhdGVNYW5hZ2VyUHJpdmF0ZUNBUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2VydGlmaWNhdGVNYW5hZ2VyUHJpdmF0ZUNBUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjZXJ0aWZpY2F0ZSB1c2VyIGFjY2VzcyB0byBBV1MgQ2VydGlmaWNhdGUgTWFuYWdlciBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSAqL1xuICAgIHB1YmxpYyBBV1NDZXJ0aWZpY2F0ZU1hbmFnZXJQcml2YXRlQ0FVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NlcnRpZmljYXRlTWFuYWdlclByaXZhdGVDQVVzZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBDZXJ0aWZpY2F0ZSBNYW5hZ2VyIChBQ00pLiAqL1xuICAgIHB1YmxpYyBBV1NDZXJ0aWZpY2F0ZU1hbmFnZXJSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDZXJ0aWZpY2F0ZU1hbmFnZXJSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBTZXJ2aWNlIExpbmtlZCBSb2xlIHVzZWQgYnkgQVdTIENoYXRib3QuICovXG4gICAgcHVibGljIEFXU0NoYXRib3RTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDaGF0Ym90U2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgZnVsbCBhY2Nlc3MgdG8gQVdTIENsZWFuIFJvb21zIHJlc291cmNlcyBhbmQgYWNjZXNzIHRvIHJlbGF0ZWQgQVdTIFNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDbGVhblJvb21zRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbGVhblJvb21zRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBmdWxsIGFjY2VzcyB0byBBV1MgQ2xlYW4gUm9vbXMgcmVzb3VyY2VzIGV4Y2VwdCBmb3IgcXVlcnlpbmcgaW4gYSBjb2xsYWJvcmF0aW9uIGFuZCBhY2Nlc3MgdG8gcmVsYXRlZCBBV1MgU2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0NsZWFuUm9vbXNGdWxsQWNjZXNzTm9RdWVyeWluZygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbGVhblJvb21zRnVsbEFjY2Vzc05vUXVlcnlpbmcpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgZnVsbCBhY2Nlc3MgdG8gQVdTIENsZWFuIFJvb21zIE1MIHJlc291cmNlcyBhbmQgYWNjZXNzIHRvIHJlbGF0ZWQgQVdTIFNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDbGVhblJvb21zTUxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NsZWFuUm9vbXNNTEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgQ2xlYW4gUm9vbXMgTUwgcmVzb3VyY2VzIGFuZCByZWFkLW9ubHkgYWNjZXNzIHRvIHJlbGF0ZWQgQVdTIENsZWFuIFJvb21zIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NDbGVhblJvb21zTUxSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbGVhblJvb21zTUxSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBDbGVhbiBSb29tcyByZXNvdXJjZXMgYW5kIHJlYWQtb25seSBhY2Nlc3MgdG8gcmVsYXRlZCBBV1MgR2x1ZSBhbmQgQW1hem9uIENsb3VkV2F0Y2ggTG9ncyByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0NsZWFuUm9vbXNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbGVhblJvb21zUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhZG1pbmlzdHJhdG9yIGFjY2VzcyB0byBBV1MgQ2xvdWQ5LiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZDlBZG1pbmlzdHJhdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkOUFkbWluaXN0cmF0b3IpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB0aGUgYWJpbGl0eSB0byBiZSBpbnZpdGVkIGludG8gQVdTIENsb3VkOSBzaGFyZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZDlFbnZpcm9ubWVudE1lbWJlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZDlFbnZpcm9ubWVudE1lbWJlcik7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UgTGlua2VkIFJvbGUgUG9saWN5IGZvciBBV1MgQ2xvdWQ5ICovXG4gICAgcHVibGljIEFXU0Nsb3VkOVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkOVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgd2lsbCBiZSB1c2VkIHRvIGF0dGFjaCBhIHJvbGUgb24gYSBJbnN0YW5jZVByb2ZpbGUgd2hpY2ggd2lsbCBhbGxvdyBDbG91ZDkgdG8gdXNlIHRoZSBTU00gU2Vzc2lvbiBNYW5hZ2VyIHRvIGNvbm5lY3QgdG8gdGhlIGluc3RhbmNlICovXG4gICAgcHVibGljIEFXU0Nsb3VkOVNTTUluc3RhbmNlUHJvZmlsZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZDlTU01JbnN0YW5jZVByb2ZpbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBBV1MgQ2xvdWQ5IGRldmVsb3BtZW50IGVudmlyb25tZW50cyBhbmQgdG8gbWFuYWdlIG93bmVkIGVudmlyb25tZW50cy4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWQ5VXNlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZDlVc2VyKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIENsb3VkRm9ybWF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZEZvcm1hdGlvbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRGb3JtYXRpb25GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBDbG91ZEZvcm1hdGlvbiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0Nsb3VkRm9ybWF0aW9uUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRGb3JtYXRpb25SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBDbG91ZEZyb250IExvZ2dlciB3cml0ZSBwZXJtaXNzaW9ucyB0byBDbG91ZFdhdGNoIExvZ3MuICovXG4gICAgcHVibGljIEFXU0Nsb3VkRnJvbnRMb2dnZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRGcm9udExvZ2dlcik7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBDbG91ZEZyb250IHRvIG1hbmFnZSBFQzIgRWxhc3RpYyBOZXR3b3JrIEludGVyZmFjZXMgYW5kIFNlY3VyaXR5IEdyb3VwcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRGcm9udFZQQ09yaWdpblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkRnJvbnRWUENPcmlnaW5TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBDbG91ZEhTTSByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0Nsb3VkSFNNRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZEhTTUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIGFsbCBDbG91ZEhTTSByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0Nsb3VkSFNNUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRIU01SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgcG9saWN5IGZvciB0aGUgQVdTIENsb3VkSFNNIHNlcnZpY2Ugcm9sZS4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRIU01Sb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkSFNNUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgQ2xvdWQgTWFwIGRpc2NvdmVyeSBBUEkuICovXG4gICAgcHVibGljIEFXU0Nsb3VkTWFwRGlzY292ZXJJbnN0YW5jZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZE1hcERpc2NvdmVySW5zdGFuY2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgQVdTIENsb3VkIE1hcCBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZE1hcEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRNYXBGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBhbGwgQVdTIENsb3VkIE1hcCBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZE1hcFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkTWFwUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWdpc3RyYW50IGxldmVsIGFjY2VzcyB0byBBV1MgQ2xvdWQgTWFwIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0Nsb3VkTWFwUmVnaXN0ZXJJbnN0YW5jZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZE1hcFJlZ2lzdGVySW5zdGFuY2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdXNpbmcgQVdTIENsb3VkU2hlbGwgd2l0aCBhbGwgZmVhdHVyZXMgKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRTaGVsbEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRTaGVsbEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgQ2xvdWRUcmFpbC4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRUcmFpbEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRUcmFpbEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBDbG91ZFRyYWlsLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZFRyYWlsUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRUcmFpbFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgdXNlZCBieSB0aGUgc2VydmljZS1saW5rZWQgcm9sZSBuYW1lZCBBV1NTZXJ2aWNlUm9sZUZvckNsb3VkV2F0Y2hBbGFybXNfQWN0aW9uU1NNSW5jaWRlbnRzLiBDbG91ZFdhdGNoIHVzZXMgdGhpcyBzZXJ2aWNlLWxpbmtlZCByb2xlIHRvIHBlcmZvcm0gQVdTIFN5c3RlbSBNYW5hZ2VyIEluY2lkZW50IE1hbmFnZXIgYWN0aW9ucyB3aGVuIGEgQ2xvdWRXYXRjaCBhbGFybSBnb2VzIGluIHRvIEFMQVJNIHN0YXRlLiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbiB0byBzdGFydCBpbmNpZGVudHMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0Nsb3VkV2F0Y2hBbGFybXNBY3Rpb25TU01JbmNpZGVudHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZFdhdGNoQWxhcm1zQWN0aW9uU1NNSW5jaWRlbnRzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgQ29kZUFydGlmYWN0IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZUFydGlmYWN0QWRtaW5BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZUFydGlmYWN0QWRtaW5BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBDb2RlQXJ0aWZhY3QgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlQXJ0aWZhY3RSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlQXJ0aWZhY3RSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDb2RlQnVpbGQgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiBBbHNvIGF0dGFjaCBBbWF6b25TM1JlYWRPbmx5QWNjZXNzIHRvIHByb3ZpZGUgYWNjZXNzIHRvIGRvd25sb2FkIGJ1aWxkIGFydGlmYWN0cywgYW5kIGF0dGFjaCBJQU1GdWxsQWNjZXNzIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHRoZSBzZXJ2aWNlIHJvbGUgZm9yIENvZGVCdWlsZC4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZUJ1aWxkQWRtaW5BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZUJ1aWxkQWRtaW5BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIENvZGVCdWlsZCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUsIGJ1dCBkb2VzIG5vdCBhbGxvdyBDb2RlQnVpbGQgcHJvamVjdCBhZG1pbmlzdHJhdGlvbi4gQWxzbyBhdHRhY2ggQW1hem9uUzNSZWFkT25seUFjY2VzcyB0byBwcm92aWRlIGFjY2VzcyB0byBkb3dubG9hZCBidWlsZCBhcnRpZmFjdHMuICovXG4gICAgcHVibGljIEFXU0NvZGVCdWlsZERldmVsb3BlckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlQnVpbGREZXZlbG9wZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBDb2RlQnVpbGQgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiBBbHNvIGF0dGFjaCBBbWF6b25TM1JlYWRPbmx5QWNjZXNzIHRvIHByb3ZpZGUgYWNjZXNzIHRvIGRvd25sb2FkIGJ1aWxkIGFydGlmYWN0cy4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZUJ1aWxkUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZUJ1aWxkUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgQ29kZUNvbW1pdCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0NvZGVDb21taXRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVDb21taXRGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIENvZGVDb21taXQgcmVwb3NpdG9yaWVzLCBidXQgZG9lcyBub3QgYWxsb3cgcmVwb3NpdG9yeSBkZWxldGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZUNvbW1pdFBvd2VyVXNlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlQ29tbWl0UG93ZXJVc2VyKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgQ29kZUNvbW1pdCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0NvZGVDb21taXRSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlQ29tbWl0UmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gcmVnaXN0ZXIgYW5kIGRlcGxveSBhIHJldmlzaW9uLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlRGVwbG95RGVwbG95ZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZURlcGxveURlcGxveWVyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ29kZURlcGxveSByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0NvZGVEZXBsb3lGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVEZXBsb3lGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDb2RlRGVwbG95IHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZURlcGxveVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVEZXBsb3lSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIENvZGVEZXBsb3kgc2VydmljZSBhY2Nlc3MgdG8gZXhwYW5kIHRhZ3MgYW5kIGludGVyYWN0IHdpdGggQXV0byBTY2FsaW5nIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlRGVwbG95Um9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlRGVwbG95Um9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIENvZGVEZXBsb3kgc2VydmljZSBhY2Nlc3MgdG8gaW52b2tlIExhbWJkYSBmdW5jdGlvbiBvbiB5b3VyIGJlaGFsZiB0byBwZXJmb3JtIGJsdWUvZ3JlZW4gZGVwbG95bWVudCB0aHJvdWdoIENsb3VkRm9ybWF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlRGVwbG95Um9sZUZvckNsb3VkRm9ybWF0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVEZXBsb3lSb2xlRm9yQ2xvdWRGb3JtYXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBDb2RlRGVwbG95IHNlcnZpY2Ugd2lkZSBhY2Nlc3MgdG8gcGVyZm9ybSBhbiBFQ1MgYmx1ZS9ncmVlbiBkZXBsb3ltZW50IG9uIHlvdXIgYmVoYWxmLiBHcmFudHMgZnVsbCBhY2Nlc3MgdG8gc3VwcG9ydCBzZXJ2aWNlcywgc3VjaCBhcyAgZnVsbCBhY2Nlc3MgdG8gcmVhZCBhbGwgUzMgb2JqZWN0cywgaW52b2tlIGFsbCBMYW1iZGEgZnVuY3Rpb25zLCBwdWJsaXNoIHRvIGFsbCBTTlMgdG9waWNzIHdpdGhpbiB0aGUgYWNjb3VudCBhbmQgdXBkYXRlIGFsbCBFQ1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0NvZGVEZXBsb3lSb2xlRm9yRUNTKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVEZXBsb3lSb2xlRm9yRUNTKTtcbiAgICB9XG5cbiAgICAvKiogIFByb3ZpZGVzIENvZGVEZXBsb3kgc2VydmljZSBsaW1pdGVkIGFjY2VzcyB0byBwZXJmb3JtIGFuIEVDUyBibHVlL2dyZWVuIGRlcGxveW1lbnQgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0NvZGVEZXBsb3lSb2xlRm9yRUNTTGltaXRlZCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlRGVwbG95Um9sZUZvckVDU0xpbWl0ZWQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBDb2RlRGVwbG95IHNlcnZpY2UgYWNjZXNzIHRvIHBlcmZvcm0gYSBMYW1iZGEgZGVwbG95bWVudCBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZURlcGxveVJvbGVGb3JMYW1iZGEoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZURlcGxveVJvbGVGb3JMYW1iZGEpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBDb2RlRGVwbG95IHNlcnZpY2UgbGltaXRlZCBhY2Nlc3MgdG8gcGVyZm9ybSBhIExhbWJkYSBkZXBsb3ltZW50IG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlRGVwbG95Um9sZUZvckxhbWJkYUxpbWl0ZWQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZURlcGxveVJvbGVGb3JMYW1iZGFMaW1pdGVkKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIENvZGVQaXBlbGluZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0NvZGVQaXBlbGluZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZVBpcGVsaW5lRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIENvZGVQaXBlbGluZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0NvZGVQaXBlbGluZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVQaXBlbGluZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHZpZXcgYW5kIGFwcHJvdmUgbWFudWFsIGNoYW5nZXMgZm9yIGFsbCBwaXBlbGluZXMgKi9cbiAgICBwdWJsaWMgQVdTQ29kZVBpcGVsaW5lQXBwcm92ZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZVBpcGVsaW5lQXBwcm92ZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgZm9yIGN1c3RvbSBhY3Rpb25zIHRvIHBvbGwgZm9yIGpvYnMgZGV0YWlscyAoaW5jbHVkaW5nIHRlbXBvcmFyeSBjcmVkZW50aWFscykgYW5kIHJlcG9ydCBzdGF0dXMgdXBkYXRlcyB0byBBV1MgQ29kZVBpcGVsaW5lLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlUGlwZWxpbmVDdXN0b21BY3Rpb25BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZVBpcGVsaW5lQ3VzdG9tQWN0aW9uQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIENvZGVTdGFyIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZVN0YXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVTdGFyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgQ29kZVN0YXIgTm90aWZpY2F0aW9ucyB0byBhY2Nlc3MgQW1hem9uIENsb3VkV2F0Y2ggRXZlbnRzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFXU0NvZGVTdGFyTm90aWZpY2F0aW9uc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVTdGFyTm90aWZpY2F0aW9uc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRE8gTk9UIFVTRSAtICBBV1MgQ29kZVN0YXIgU2VydmljZSBSb2xlIFBvbGljeSB3aGljaCBncmFudHMgYWRtaW5pc3RyYXRpdmUgcHJpdmlsZWdlcyBpbiBvcmRlciBmb3IgQ29kZVN0YXIgdG8gbWFuYWdlIElBTSBhbmQgb3RoZXIgc2VydmljZSByZXNvdXJjZXMgb24gYmVoYWxmIG9mIHRoZSBjdXN0b21lci4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZVN0YXJTZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlU3RhclNlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogRGVuaWVzIGFjY2VzcyB0byBjZXJ0YWluIGFjdGlvbnMsIGFwcGxpZWQgYnkgdGhlIEFXUyB0ZWFtIGluIHRoZSBldmVudCB0aGF0IGFuIElBTSB1c2VyJ3MgY3JlZGVudGlhbHMgaGF2ZSBiZWVuIGNvbXByb21pc2VkIG9yIGV4cG9zZWQgcHVibGljbHkuICBEbyBOT1QgcmVtb3ZlIHRoaXMgcG9saWN5LiAgSW5zdGVhZCwgcGxlYXNlIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmllZCBpbiB0aGUgZW1haWwgc2VudCB0byB5b3UgcmVnYXJkaW5nIHRoaXMgZXZlbnQuICovXG4gICAgcHVibGljIEFXU0NvbXByb21pc2VkS2V5UXVhcmFudGluZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb21wcm9taXNlZEtleVF1YXJhbnRpbmUpO1xuICAgIH1cblxuICAgIC8qKiBEZW5pZXMgYWNjZXNzIHRvIGNlcnRhaW4gYWN0aW9ucywgYXBwbGllZCBieSB0aGUgQVdTIHRlYW0gaW4gdGhlIGV2ZW50IHRoYXQgYW4gSUFNIHVzZXIncyBjcmVkZW50aWFscyBoYXZlIGJlZW4gY29tcHJvbWlzZWQgb3IgZXhwb3NlZCBwdWJsaWNseS4gRG8gTk9UIHJlbW92ZSB0aGlzIHBvbGljeS4gSW5zdGVhZCwgcGxlYXNlIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmllZCBpbiB0aGUgc3VwcG9ydCBjYXNlIGNyZWF0ZWQgZm9yIHlvdSByZWdhcmRpbmcgdGhpcyBldmVudC4gKi9cbiAgICBwdWJsaWMgQVdTQ29tcHJvbWlzZWRLZXlRdWFyYW50aW5lVjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29tcHJvbWlzZWRLZXlRdWFyYW50aW5lVjIpO1xuICAgIH1cblxuICAgIC8qKiBEZW5pZXMgYWNjZXNzIHRvIGNlcnRhaW4gYWN0aW9ucywgYXBwbGllZCBieSBBV1MgaW4gdGhlIGV2ZW50IHRoYXQgYW4gSUFNIHVzZXIncyBjcmVkZW50aWFscyBoYXZlIGJlZW4gY29tcHJvbWlzZWQgb3IgZXhwb3NlZCBwdWJsaWNseS4gVGhlIHBvbGljeSBhaW1zIHRvIGxpbWl0IHRoZSBwb3RlbnRpYWwgZGFtYWdlIHRoYXQgbWF5IGJlIGNhdXNlZCBieSBmcmF1ZC1yZWxhdGVkIGFjdGl2aXR5IGxlYWRpbmcgdG8gdW5hdXRob3JpemVkIGNoYXJnZXMsIHdoaWxlIG5vdCBpbXBhY3RpbmcgdGhlIGV4aXN0aW5nIHJlc291cmNlcy4gRG8gTk9UIHJlbW92ZSB0aGlzIHBvbGljeS4gSW5zdGVhZCwgcGxlYXNlIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmllZCBpbiB0aGUgc3VwcG9ydCBjYXNlIGNyZWF0ZWQgZm9yIHlvdSByZWdhcmRpbmcgdGhpcyBldmVudC4gKi9cbiAgICBwdWJsaWMgQVdTQ29tcHJvbWlzZWRLZXlRdWFyYW50aW5lVjMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29tcHJvbWlzZWRLZXlRdWFyYW50aW5lVjMpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQ29uZmlnIHRvIGNhbGwgQVdTIHNlcnZpY2VzIGFuZCBkZXBsb3kgY29uZmlnIHJlc291cmNlcyBhY3Jvc3Mgb3JnYW5pemF0aW9uICovXG4gICAgcHVibGljIEFXU0NvbmZpZ011bHRpQWNjb3VudFNldHVwUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbmZpZ011bHRpQWNjb3VudFNldHVwUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBDb25maWcgdG8gcmVtZWRpYXRlIG5vbmNvbXBsaWFudCByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0NvbmZpZ1JlbWVkaWF0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29uZmlnUmVtZWRpYXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgQ29uZmlnIHRvIGNhbGwgcmVhZC1vbmx5IEFXUyBPcmdhbml6YXRpb25zIEFQSXMgKi9cbiAgICBwdWJsaWMgQVdTQ29uZmlnUm9sZUZvck9yZ2FuaXphdGlvbnMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29uZmlnUm9sZUZvck9yZ2FuaXphdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYW4gQVdTIExhbWJkYSBmdW5jdGlvbiB0byBhY2Nlc3MgdGhlIEFXUyBDb25maWcgQVBJIGFuZCB0aGUgY29uZmlndXJhdGlvbiBzbmFwc2hvdHMgdGhhdCBBV1MgQ29uZmlnIGRlbGl2ZXJzIHBlcmlvZGljYWxseSB0byBBbWF6b24gUzMuIFRoaXMgYWNjZXNzIGlzIHJlcXVpcmVkIGJ5IGZ1bmN0aW9ucyB0aGF0IGV2YWx1YXRlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBmb3IgY3VzdG9tIENvbmZpZyBydWxlcy4gKi9cbiAgICBwdWJsaWMgQVdTQ29uZmlnUnVsZXNFeGVjdXRpb25Sb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbmZpZ1J1bGVzRXhlY3V0aW9uUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBDb25maWcgdG8gY2FsbCBBV1Mgc2VydmljZXMgYW5kIGNvbGxlY3QgcmVzb3VyY2UgY29uZmlndXJhdGlvbnMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0NvbmZpZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbmZpZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHVzZSBBV1MgQ29uZmlnLCBpbmNsdWRpbmcgc2VhcmNoaW5nIGJ5IHRhZ3Mgb24gcmVzb3VyY2VzLCBhbmQgcmVhZGluZyBhbGwgdGFncy4gVGhpcyBkb2VzIG5vdCBwcm92aWRlIHBlcm1pc3Npb24gdG8gY29uZmlndXJlIEFXUyBDb25maWcsIHdoaWNoIHJlcXVpcmVzIGFkbWluaXN0cmF0aXZlIHByaXZpbGVnZXMuICovXG4gICAgcHVibGljIEFXU0NvbmZpZ1VzZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29uZmlnVXNlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYnJvYWQgcmVhZC93cml0ZSBhY2Nlc3MgdG8gQUxMIEVDMiBvYmplY3RzLCByZWFkL3dyaXRlIGFjY2VzcyB0byBTMyBidWNrZXRzIHN0YXJ0aW5nIHdpdGggJ2ltcG9ydC10by1lYzItJywgYW5kIHRoZSBhYmlsaXR5IHRvIGxpc3QgYWxsIFMzIGJ1Y2tldHMsIGZvciB0aGUgQVdTIENvbm5lY3RvciB0byBpbXBvcnQgVk1zIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDb25uZWN0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29ubmVjdG9yKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBDb250cm9sIFRvd2VyIHRvIGNhbGwgQVdTIHNlcnZpY2VzIHRoYXQgcHJvdmlkZSBhdXRvbWF0ZWQgYWNjb3VudCBjb25maWd1cmF0aW9uIGFuZCBjZW50cmFsaXplZCBnb3Zlcm5hbmNlIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDb250cm9sVG93ZXJBY2NvdW50U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29udHJvbFRvd2VyQWNjb3VudFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQVdTIENvbnRyb2wgVG93ZXIgZW5hYmxlcyBBV1MgQ2xvdWRUcmFpbCBhcyBhIGJlc3QgcHJhY3RpY2UgYW5kIHByb3ZpZGVzIHRoaXMgcm9sZSB0byBBV1MgQ2xvdWRUcmFpbC4gQVdTIENsb3VkVHJhaWwgYXNzdW1lcyB0aGlzIHJvbGUgdG8gY3JlYXRlIGFuZCBwdWJsaXNoIENsb3VkVHJhaWwgbG9ncyAqL1xuICAgIHB1YmxpYyBBV1NDb250cm9sVG93ZXJDbG91ZFRyYWlsUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb250cm9sVG93ZXJDbG91ZFRyYWlsUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIG1hbmFnZSB0aGUgSUFNIElkZW50aXR5IENlbnRlciAoSWRDKSByZXNvdXJjZXMgaW4gdGhlIG1lbWJlciBhY2NvdW50cyBlbnJvbGxlZCB3aXRoIEFXUyBDb250cm9sIFRvd2VyLiBUaGUgcG9saWN5IGlzIGF0dGFjaGVkIHRvIHRoZSBBV1NDb250cm9sVG93ZXJBZG1pbiByb2xlIG9ubHkgaWYgdGhlIGN1c3RvbWVyIGhhcyBvcHRlZC1pbnRvIElBTSBJZEMgaW50ZWdyYXRpb24gaW4gdGhlaXIgQVdTIENvbnRyb2wgVG93ZXIgTGFuZGluZyBab25lLiAqL1xuICAgIHB1YmxpYyBBV1NDb250cm9sVG93ZXJJZGVudGl0eUNlbnRlck1hbmFnZW1lbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29udHJvbFRvd2VySWRlbnRpdHlDZW50ZXJNYW5hZ2VtZW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBSZXNvdXJjZXMgbWFuYWdlZCBvciB1c2VkIGJ5IEFXUyBDb250cm9sIFRvd2VyICovXG4gICAgcHVibGljIEFXU0NvbnRyb2xUb3dlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbnRyb2xUb3dlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIHRvIGRlc2NyaWJlIHRoZSBvcmdhbml6YXRpb24gb2YgdGhlIGFjY291bnQsIGNyZWF0ZSBTMyBidWNrZXRzIGZvciB0aGUgTUFQIHByb2dyYW0gYW5kIGFwcGx5IHRhZ3MgdG8gaXQsIGNyZWF0ZSBhIENvc3QgYW5kIFVzYWdlIFJlcG9ydCwgYW5kIGRlc2NyaWJlIENvc3QgYW5kIFVzYWdlIFJlcG9ydCBkZWZpbml0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTQ29zdEFuZFVzYWdlUmVwb3J0QXV0b21hdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb3N0QW5kVXNhZ2VSZXBvcnRBdXRvbWF0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR2l2ZXMgRGF0YSBHcmFudCBvd25lcnMgYWNjZXNzIHRvIEFXUyBEYXRhIEV4Y2hhbmdlIGFjdGlvbnMgdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gKi9cbiAgICBwdWJsaWMgQVdTRGF0YUV4Y2hhbmdlRGF0YUdyYW50T3duZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFFeGNoYW5nZURhdGFHcmFudE93bmVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdpdmVzIERhdGEgR3JhbnQgcmVjZWl2ZXIgYWNjZXNzIHRvIEFXUyBEYXRhIEV4Y2hhbmdlIGFjdGlvbnMgdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gKi9cbiAgICBwdWJsaWMgQVdTRGF0YUV4Y2hhbmdlRGF0YUdyYW50UmVjZWl2ZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFFeGNoYW5nZURhdGFHcmFudFJlY2VpdmVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byBBV1MgRGF0YSBFeGNoYW5nZSBhbmQgQVdTIE1hcmtldHBsYWNlIGFjdGlvbnMgdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gSXQgYWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgbmVlZGVkIHRvIHRha2UgZnVsbCBhZHZhbnRhZ2Ugb2YgQVdTIERhdGEgRXhjaGFuZ2UuICovXG4gICAgcHVibGljIEFXU0RhdGFFeGNoYW5nZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YUV4Y2hhbmdlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBkYXRhIHByb3ZpZGVyIGFjY2VzcyB0byBBV1MgRGF0YSBFeGNoYW5nZSBhbmQgQVdTIE1hcmtldHBsYWNlIGFjdGlvbnMgdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gSXQgYWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgbmVlZGVkIHRvIHRha2UgZnVsbCBhZHZhbnRhZ2Ugb2YgQVdTIERhdGEgRXhjaGFuZ2UuICovXG4gICAgcHVibGljIEFXU0RhdGFFeGNoYW5nZVByb3ZpZGVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhRXhjaGFuZ2VQcm92aWRlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgRGF0YSBFeGNoYW5nZSBhbmQgQVdTIE1hcmtldHBsYWNlIGFjdGlvbnMgdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gKi9cbiAgICBwdWJsaWMgQVdTRGF0YUV4Y2hhbmdlUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YUV4Y2hhbmdlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIERhdGEgRXhjaGFuZ2UgdG8gYWNjZXNzIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBV1MgRGF0YSBFeGNoYW5nZSBmb3IgbGljZW5zZSBtYW5hZ2VtZW50LiAqL1xuICAgIHB1YmxpYyBBV1NEYXRhRXhjaGFuZ2VTZXJ2aWNlUm9sZVBvbGljeUZvckxpY2Vuc2VNYW5hZ2VtZW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFFeGNoYW5nZVNlcnZpY2VSb2xlUG9saWN5Rm9yTGljZW5zZU1hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIERhdGEgRXhjaGFuZ2UgdG8gcmVhZCBkYXRhIGFib3V0IHlvdXIgQVdTIE9yZ2FuaXphdGlvbiB0byBkZXRlcm1pbmUgZWxpZ2liaWxpdHkgZm9yIEFXUyBEYXRhIEV4Y2hhbmdlIGRhdGEgZ3JhbnRzIGxpY2Vuc2UgZGlzdHJpYnV0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NEYXRhRXhjaGFuZ2VTZXJ2aWNlUm9sZVBvbGljeUZvck9yZ2FuaXphdGlvbkRpc2NvdmVyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhRXhjaGFuZ2VTZXJ2aWNlUm9sZVBvbGljeUZvck9yZ2FuaXphdGlvbkRpc2NvdmVyeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBkYXRhIHN1YnNjcmliZXIgYWNjZXNzIHRvIEFXUyBEYXRhIEV4Y2hhbmdlIGFuZCBBV1MgTWFya2V0cGxhY2UgYWN0aW9ucyB1c2luZyB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgU0RLLiBJdCBhbHNvIHByb3ZpZGVzIHNlbGVjdCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyBuZWVkZWQgdG8gdGFrZSBmdWxsIGFkdmFudGFnZSBvZiBBV1MgRGF0YSBFeGNoYW5nZS4gKi9cbiAgICBwdWJsaWMgQVdTRGF0YUV4Y2hhbmdlU3Vic2NyaWJlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YUV4Y2hhbmdlU3Vic2NyaWJlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhcHByb3ByaWF0ZSBwZXJtaXNzaW9ucyB0byBBV1MgRGF0YSBMaWZlY3ljbGUgTWFuYWdlciB0byB0YWtlIGFjdGlvbnMgb24gQVdTIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NEYXRhTGlmZWN5Y2xlTWFuYWdlclNlcnZpY2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFMaWZlY3ljbGVNYW5hZ2VyU2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhcHByb3ByaWF0ZSBwZXJtaXNzaW9ucyB0byBBV1MgRGF0YSBMaWZlY3ljbGUgTWFuYWdlciB0byB0YWtlIGFjdGlvbnMgb24gQVdTIHJlc291cmNlcyBmb3IgQU1JIE1hbmFnZW1lbnQgKi9cbiAgICBwdWJsaWMgQVdTRGF0YUxpZmVjeWNsZU1hbmFnZXJTZXJ2aWNlUm9sZUZvckFNSU1hbmFnZW1lbnQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YUxpZmVjeWNsZU1hbmFnZXJTZXJ2aWNlUm9sZUZvckFNSU1hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBbWF6b24gRGF0YSBMaWZlY3ljbGUgTWFuYWdlciBwZXJtaXNzaW9uIHRvIHBlcmZvcm0gdGhlIFN5c3RlbXMgTWFuYWdlciBhY3Rpb25zIHJlcXVpcmVkIHRvIHJ1biBwcmUgYW5kIHBvc3Qgc2NyaXB0cyBvbiBhbGwgQW1hem9uIEVDMiBpbnN0YW5jZXMuICovXG4gICAgcHVibGljIEFXU0RhdGFMaWZlY3ljbGVNYW5hZ2VyU1NNRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhTGlmZWN5Y2xlTWFuYWdlclNTTUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBEYXRhIFBpcGVsaW5lLCBsaXN0IGFjY2VzcyBmb3IgUzMsIER5bmFtb0RCLCBSZWRzaGlmdCwgUkRTLCBTTlMsIGFuZCBJQU0gcm9sZXMsIGFuZCBwYXNzUm9sZSBhY2Nlc3MgZm9yIGRlZmF1bHQgUm9sZXMuICovXG4gICAgcHVibGljIEFXU0RhdGFQaXBlbGluZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YVBpcGVsaW5lRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIERhdGEgUGlwZWxpbmUsIGxpc3QgYWNjZXNzIGZvciBTMywgRHluYW1vREIsIFJlZHNoaWZ0LCBSRFMsIFNOUywgYW5kIElBTSByb2xlcywgYW5kIHBhc3NSb2xlIGFjY2VzcyBmb3IgZGVmYXVsdCBSb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTRGF0YVBpcGVsaW5lUG93ZXJVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFQaXBlbGluZVBvd2VyVXNlcik7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBEYXRhU3luYyBEaXNjb3ZlcnkgdG8gaW50ZWdyYXRlIHdpdGggb3RoZXIgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NEYXRhU3luY0Rpc2NvdmVyeVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFTeW5jRGlzY292ZXJ5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRGF0YVN5bmMgYW5kIG1pbmltYWwgYWNjZXNzIHRvIGl0cyBkZXBlbmRlbmNpZXMgKi9cbiAgICBwdWJsaWMgQVdTRGF0YVN5bmNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFTeW5jRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIERhdGFTeW5jICovXG4gICAgcHVibGljIEFXU0RhdGFTeW5jUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YVN5bmNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBEYXRhU3luYyB0byBpbnRlZ3JhdGUgd2l0aCBvdGhlciBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTRGF0YVN5bmNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhU3luY1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQVdTIERlYWRsaW5lIENsb3VkIHdvcmtlcnMgd2l0aCBhY2Nlc3MgdG8gcnVuIHRhc2tzIG9uIGEgZmFybS4gKi9cbiAgICBwdWJsaWMgQVdTRGVhZGxpbmVDbG91ZEZsZWV0V29ya2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlYWRsaW5lQ2xvdWRGbGVldFdvcmtlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHVzZXIgd29ya3N0YXRpb24gYWNjZXNzIHRvIEFXUyBEZWFkbGluZSBDbG91ZCBmYXJtcyB3aXRoIGxpbWl0ZWQgUmVhZC1Pbmx5IHBlcm1pc3Npb25zIHRvIGNhbGwgb3RoZXIgbmVjZXNzYXJ5IHNlcnZpY2VzLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8gdGhlIHVzZXIgcm9sZSBhc3NvY2lhdGVkIHdpdGggeW91ciBzdHVkaW8uICovXG4gICAgcHVibGljIEFXU0RlYWRsaW5lQ2xvdWRVc2VyQWNjZXNzRmFybXMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVhZGxpbmVDbG91ZFVzZXJBY2Nlc3NGYXJtcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHVzZXIgd29ya3N0YXRpb24gYWNjZXNzIHRvIEFXUyBEZWFkbGluZSBDbG91ZCBmbGVldHMgd2l0aCBsaW1pdGVkIFJlYWQtT25seSBwZXJtaXNzaW9ucyB0byBjYWxsIG90aGVyIG5lY2Vzc2FyeSBzZXJ2aWNlcy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHRoZSB1c2VyIHJvbGUgYXNzb2NpYXRlZCB3aXRoIHlvdXIgc3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBBV1NEZWFkbGluZUNsb3VkVXNlckFjY2Vzc0ZsZWV0cygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWFkbGluZUNsb3VkVXNlckFjY2Vzc0ZsZWV0cyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHVzZXIgd29ya3N0YXRpb24gYWNjZXNzIHRvIEFXUyBEZWFkbGluZSBDbG91ZCBqb2JzIHdpdGggbGltaXRlZCBSZWFkLU9ubHkgcGVybWlzc2lvbnMgdG8gY2FsbCBvdGhlciBuZWNlc3Nhcnkgc2VydmljZXMuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB0aGUgdXNlciByb2xlIGFzc29jaWF0ZWQgd2l0aCB5b3VyIHN0dWRpby4gKi9cbiAgICBwdWJsaWMgQVdTRGVhZGxpbmVDbG91ZFVzZXJBY2Nlc3NKb2JzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlYWRsaW5lQ2xvdWRVc2VyQWNjZXNzSm9icyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHVzZXIgd29ya3N0YXRpb24gYWNjZXNzIHRvIEFXUyBEZWFkbGluZSBDbG91ZCBxdWV1ZXMgd2l0aCBsaW1pdGVkIFJlYWQtT25seSBwZXJtaXNzaW9ucyB0byBjYWxsIG90aGVyIG5lY2Vzc2FyeSBzZXJ2aWNlcy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHRoZSB1c2VyIHJvbGUgYXNzb2NpYXRlZCB3aXRoIHlvdXIgc3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBBV1NEZWFkbGluZUNsb3VkVXNlckFjY2Vzc1F1ZXVlcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWFkbGluZUNsb3VkVXNlckFjY2Vzc1F1ZXVlcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyBmb3IgQVdTIERlYWRsaW5lIENsb3VkIHdvcmtlciBob3N0cyB0byBqb2luIGEgZmxlZXQgaW4gYSBmYXJtLiAqL1xuICAgIHB1YmxpYyBBV1NEZWFkbGluZUNsb3VkV29ya2VySG9zdCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWFkbGluZUNsb3VkV29ya2VySG9zdCk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHNwZWNpZmllcyBwZXJtaXNzaW9ucyByZXF1aXJlZCBieSBEZWVwTGVucyBBZG1pbmlzdHJhdGl2ZSBsYW1iZGEgZnVuY3Rpb25zIHRoYXQgcnVuIG9uIGEgRGVlcExlbnMgZGV2aWNlICovXG4gICAgcHVibGljIEFXU0RlZXBMZW5zTGFtYmRhRnVuY3Rpb25BY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVlcExlbnNMYW1iZGFGdW5jdGlvbkFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBBV1MgRGVlcExlbnMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcywgcmVzb3VyY2VzIGFuZCByb2xlcyBuZWVkZWQgYnkgRGVlcExlbnMgYW5kIGl0cyBkZXBlbmRlbmNpZXMgaW5jbHVkaW5nIElvVCwgUzMsIEdyZWVuR3Jhc3MgYW5kIEFXUyBMYW1iZGEuICovXG4gICAgcHVibGljIEFXU0RlZXBMZW5zU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVlcExlbnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIERlZXBSYWNlciBhZG1pbiBhY2Nlc3MgdG8gYWxsIGFjdGlvbnMgaW5jbHVkaW5nIHRvZ2dsaW5nIGJldHdlZW4gbXVsdGl1c2VyIGFuZCBzaW5nbGUgdXNlciBtb2RlLiAqL1xuICAgIHB1YmxpYyBBV1NEZWVwUmFjZXJBY2NvdW50QWRtaW5BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVlcFJhY2VyQWNjb3VudEFkbWluQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENsb3VkRm9ybWF0aW9uIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIEFXUyBzdGFja3MgYW5kIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRGVlcFJhY2VyQ2xvdWRGb3JtYXRpb25BY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVlcFJhY2VyQ2xvdWRGb3JtYXRpb25BY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBEZWVwUmFjZXIgTXVsdGlVc2VyIERlZmF1bHQgdXNlciBhY2Nlc3MgdG8gdXNlIGRlZXByYWNlciBpbiBtdWx0aS11c2VyIG1vZGUgKi9cbiAgICBwdWJsaWMgQVdTRGVlcFJhY2VyRGVmYXVsdE11bHRpVXNlckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWVwUmFjZXJEZWZhdWx0TXVsdGlVc2VyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIERlZXBSYWNlci4gQWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgKGUuZy4sIFMzKS4gKi9cbiAgICBwdWJsaWMgQVdTRGVlcFJhY2VyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWVwUmFjZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFJvYm9NYWtlciB0byBjcmVhdGUgcmVxdWlyZWQgcmVzb3VyY2VzIGFuZCBjYWxsIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRGVlcFJhY2VyUm9ib01ha2VyQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlZXBSYWNlclJvYm9NYWtlckFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBEZWVwUmFjZXIgdG8gY3JlYXRlIHJlcXVpcmVkIHJlc291cmNlcyBhbmQgY2FsbCBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0RlZXBSYWNlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlZXBSYWNlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRGVueSBhbGwgYWNjZXNzLiAqL1xuICAgIHB1YmxpYyBBV1NEZW55QWxsKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlbnlBbGwpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgQVdTIERldmljZSBGYXJtIG9wZXJhdGlvbnMuICovXG4gICAgcHVibGljIEFXU0RldmljZUZhcm1GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RldmljZUZhcm1GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnQgcGVybWlzc2lvbnMgdG8gQVdTIERldmljZSBGYXJtIHRvIGNhbGwgRUMyIE5ldHdvcmsgQVBJcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRGV2aWNlRmFybVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RldmljZUZhcm1TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50IHBlcm1pc3Npb25zIHRvIEFXUyBEZXZpY2UgRmFybSB0byBjYWxsIEVDMiBBUElzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NEZXZpY2VGYXJtVGVzdEdyaWRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZXZpY2VGYXJtVGVzdEdyaWRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBEaXJlY3QgQ29ubmVjdCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0RpcmVjdENvbm5lY3RGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RpcmVjdENvbm5lY3RGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgRGlyZWN0IENvbm5lY3QgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NEaXJlY3RDb25uZWN0UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGlyZWN0Q29ubmVjdFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQVdTIERpcmVjdCBDb25uZWN0IHBlcm1pc3Npb24gdG8gY3JlYXRlIGFuZCBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRGlyZWN0Q29ubmVjdFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RpcmVjdENvbm5lY3RTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBEaXJlY3RvcnkgU2VydmljZSBEYXRhLiAqL1xuICAgIHB1YmxpYyBBV1NEaXJlY3RvcnlTZXJ2aWNlRGF0YUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGlyZWN0b3J5U2VydmljZURhdGFGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgRGlyZWN0b3J5IFNlcnZpY2UgRGF0YSAqL1xuICAgIHB1YmxpYyBBV1NEaXJlY3RvcnlTZXJ2aWNlRGF0YVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RpcmVjdG9yeVNlcnZpY2VEYXRhUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRGlyZWN0b3J5IFNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU0RpcmVjdG9yeVNlcnZpY2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RpcmVjdG9yeVNlcnZpY2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgRGlyZWN0b3J5IFNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU0RpcmVjdG9yeVNlcnZpY2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEaXJlY3RvcnlTZXJ2aWNlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIHRoZSBEaXJlY3RvcnkgU2VydmljZSBTZXJ2aWNlIExpbmtlZCBSb2xlICovXG4gICAgcHVibGljIEFXU0RpcmVjdG9yeVNlcnZpY2VTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEaXJlY3RvcnlTZXJ2aWNlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB3cml0ZSBhY2Nlc3MgdG8gQVdTIHJlc291cmNlcyByZXF1aXJlZCBmb3IgQVdTIERpc2NvdmVyeSBDb250aW51b3VzIEV4cG9ydCAqL1xuICAgIHB1YmxpYyBBV1NEaXNjb3ZlcnlDb250aW51b3VzRXhwb3J0RmlyZWhvc2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGlzY292ZXJ5Q29udGludW91c0V4cG9ydEZpcmVob3NlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIERNUyBGbGVldCBBZHZpc29yIHRvIG1hbmFnZSBDbG91ZFdhdGNoIG1ldHJpY3Mgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0RNU0ZsZWV0QWR2aXNvclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RNU0ZsZWV0QWR2aXNvclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIEFXUyBETVMgU2VydmVybGVzcyBwZXJtaXNzaW9ucyB0byBjcmVhdGUgYW5kIG1hbmFnZSBETVMgcmVzb3VyY2VzIGluIHlvdXIgYWNjb3VudCBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBV1NETVNTZXJ2ZXJsZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRE1TU2VydmVybGVzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEVDMiBDYXBhY2l0eSBNYW5hZ2VyIHRvIG1hbmFnZSBjYXBhY2l0eSByZXNvdXJjZXMgYW5kIGludGVncmF0ZSB3aXRoIEFXUyBPcmdhbml6YXRpb25zIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NFQzJDYXBhY2l0eU1hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFQzJDYXBhY2l0eU1hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBFQzIgQ2FwYWNpdHlSZXNlcnZhdGlvbiBGbGVldCBzZXJ2aWNlIHRvIG1hbmFnZSBDYXBhY2l0eSBSZXNlcnZhdGlvbnMgKi9cbiAgICBwdWJsaWMgQVdTRUMyQ2FwYWNpdHlSZXNlcnZhdGlvbkZsZWV0Um9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFQzJDYXBhY2l0eVJlc2VydmF0aW9uRmxlZXRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEVDMiBGbGVldCB0byBsYXVuY2ggYW5kIG1hbmFnZSBpbnN0YW5jZXMuICovXG4gICAgcHVibGljIEFXU0VDMkZsZWV0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRUMyRmxlZXRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBFQzIgU3BvdCBGbGVldCB0byBsYXVuY2ggYW5kIG1hbmFnZSBzcG90IGZsZWV0IGluc3RhbmNlcyAqL1xuICAgIHB1YmxpYyBBV1NFQzJTcG90RmxlZXRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFQzJTcG90RmxlZXRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBFQzIgU3BvdCB0byBsYXVuY2ggYW5kIG1hbmFnZSBzcG90IGluc3RhbmNlcyAqL1xuICAgIHB1YmxpYyBBV1NFQzJTcG90U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRUMyU3BvdFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIEVDMiBpbnN0YW5jZSBwZXJtaXNzaW9ucyB0byBhbGxvdyBFQzIgU1FMIEhpZ2ggQXZhaWxhYmlsaXR5IHNlcnZpY2UgdG8gZGV0ZWN0IGluc3RhbmNlIGhpZ2ggYXZhaWxhYmlsaXR5IHN0YXRlIHRocm91Z2ggRUMyIGluc3RhbmNlIHByb2ZpbGUuICovXG4gICAgcHVibGljIEFXU0VDMlNxbEhhSW5zdGFuY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRUMyU3FsSGFJbnN0YW5jZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVDMiBTUUwgSGlnaCBBdmFpbGFiaWxpdHkgc2VydmljZSBwZXJtaXNzaW9ucyB0byBkZXRlY3Qgc3RhbmRieS9wYXNzaXZlIGluc3RhbmNlcyAqL1xuICAgIHB1YmxpYyBBV1NFQzJTcWxIYVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VDMlNxbEhhU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBhdHRhY2hlZCB0byB0aGUgSUFNIHJvbGUgdGhhdCdzIGF0dGFjaGVkIHRvIHlvdXIgQW1hem9uIEVDMiBXaW5kb3dzIEluc3RhbmNlcyB0byBlbmFibGUgdGhlIEFtYXpvbiBFQzIgVlNTIHNvbHV0aW9uIHRvIGNyZWF0ZSBhbmQgYWRkIHRhZ3MgdG8gQW1hem9uIE1hY2hpbmUgSW1hZ2VzIChBTUkpIGFuZCBFQlMgU25hcHNob3RzLiAqL1xuICAgIHB1YmxpYyBBV1NFQzJWc3NTbmFwc2hvdFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFQzJWc3NTbmFwc2hvdFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBV1MgRUNSIHB1bGwgdGhyb3VnaCBjYWNoZSAqL1xuICAgIHB1YmxpYyBBV1NFQ1JQdWxsVGhyb3VnaENhY2hlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRUNSUHVsbFRocm91Z2hDYWNoZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSB0aGUgaW5zdGFuY2UgaW4geW91ciBjdXN0b20gcGxhdGZvcm0gYnVpbGRlciBlbnZpcm9ubWVudCBwZXJtaXNzaW9uIHRvIGxhdW5jaCBFQzIgaW5zdGFuY2UsIGNyZWF0ZSBFQlMgc25hcHNob3QgYW5kIEFNSSwgc3RyZWFtIGxvZ3MgdG8gQW1hem9uIENsb3VkV2F0Y2ggTG9ncywgYW5kIHN0b3JlIGFydGlmYWN0cyBpbiBBbWF6b24gUzMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtDdXN0b21QbGF0Zm9ybWZvckVDMlJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa0N1c3RvbVBsYXRmb3JtZm9yRUMyUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBFbGFzdGljIEJlYW5zdGFsayBTZXJ2aWNlIHBvbGljeSBmb3IgSGVhbHRoIE1vbml0b3Jpbmcgc3lzdGVtICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtFbmhhbmNlZEhlYWx0aCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrRW5oYW5jZWRIZWFsdGgpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgRWxhc3RpYyBCZWFuc3RhbGsgU2VydmljZSBSb2xlIHBvbGljeSB0aGF0IGdyYW50cyBsaW1pdGVkIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSB5b3VyIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZiBmb3IgbWFpbnRlbmFuY2UgcHVycG9zZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtNYWludGVuYW5jZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrTWFpbnRlbmFuY2UpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBmb3IgdGhlIEFXUyBFbGFzdGljIEJlYW5zdGFsayBzZXJ2aWNlIHJvbGUgdXNlZCB0byBwZXJmb3JtIG1hbmFnZWQgdXBkYXRlcyBvZiBFbGFzdGljIEJlYW5zdGFsayBlbnZpcm9ubWVudHMuIFRoaXMgcG9saWN5IHNob3VsZCBub3QgYmUgYXR0YWNoZWQgdG8gb3RoZXIgdXNlcnMgb3Igcm9sZXMuIFRoZSBwb2xpY3kgZ3JhbnRzIGJyb2FkIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHJlc291cmNlcyBhY3Jvc3MgYSBudW1iZXIgb2YgQVdTIHNlcnZpY2VzIGluY2x1ZGluZyBBdXRvU2NhbGluZywgRUMyLCBFQ1MsIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgYW5kIENsb3VkRm9ybWF0aW9uLiAgVGhpcyBwb2xpY3kgYWxzbyBhbGxvd3MgcGFzc2luZyBvZiBhbnkgSUFNIHJvbGUgdXNhYmxlIHdpdGggdGhvc2Ugc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtNYW5hZ2VkVXBkYXRlc0N1c3RvbWVyUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrTWFuYWdlZFVwZGF0ZXNDdXN0b21lclJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgRWxhc3RpYyBCZWFuc3RhbGsgU2VydmljZSBSb2xlIHBvbGljeSB0aGF0IGdyYW50cyBsaW1pdGVkIHBlcm1pc3Npb25zIHRvIG1hbmFnZWQgdXBkYXRlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa01hbmFnZWRVcGRhdGVzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa01hbmFnZWRVcGRhdGVzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHRoZSBpbnN0YW5jZXMgaW4geW91ciBtdWx0aWNvbnRhaW5lciBEb2NrZXIgZW52aXJvbm1lbnQgYWNjZXNzIHRvIHVzZSB0aGUgQW1hem9uIEVDMiBDb250YWluZXIgU2VydmljZSB0byBtYW5hZ2UgY29udGFpbmVyIGRlcGxveW1lbnQgdGFza3MuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtNdWx0aWNvbnRhaW5lckRvY2tlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrTXVsdGljb250YWluZXJEb2NrZXIpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcmVhZC1vbmx5IHBlcm1pc3Npb25zLiBFeHBsaWNpdGx5IGFsbG93cyBvcGVyYXRvcnMgdG8gZ2FpbiBkaXJlY3QgYWNjZXNzIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHJlc291cmNlcyByZWxhdGVkIHRvIEFXUyBFbGFzdGljIEJlYW5zdGFsayBhcHBsaWNhdGlvbnMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBBV1NFbGFzdGljQmVhbnN0YWxrUm9sZUNvcmUgKEVsYXN0aWMgQmVhbnN0YWxrIG9wZXJhdGlvbnMgcm9sZSkgQWxsb3dzIGNvcmUgb3BlcmF0aW9uIG9mIGEgd2ViIHNlcnZpY2UgZW52aXJvbm1lbnQuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtSb2xlQ29yZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrUm9sZUNvcmUpO1xuICAgIH1cblxuICAgIC8qKiAoRWxhc3RpYyBCZWFuc3RhbGsgb3BlcmF0aW9ucyByb2xlKSBBbGxvd3MgYW4gZW52aXJvbm1lbnQgdG8gbWFuYWdlIEFtYXpvbiBDbG91ZFdhdGNoIExvZ3MgbG9nIGdyb3Vwcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVDV0woKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVDV0wpO1xuICAgIH1cblxuICAgIC8qKiAoRWxhc3RpYyBCZWFuc3RhbGsgb3BlcmF0aW9ucyByb2xlKSBBbGxvd3MgYSBtdWx0aWNvbnRhaW5lciBEb2NrZXIgZW52aXJvbm1lbnQgdG8gbWFuYWdlIEFtYXpvbiBFQ1MgY2x1c3RlcnMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtSb2xlRUNTKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtSb2xlRUNTKTtcbiAgICB9XG5cbiAgICAvKiogKEVsYXN0aWMgQmVhbnN0YWxrIG9wZXJhdGlvbnMgcm9sZSkgQWxsb3dzIGFuIGVudmlyb25tZW50IHRvIGludGVncmF0ZSBhbiBBbWF6b24gUkRTIGluc3RhbmNlLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrUm9sZVJEUygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrUm9sZVJEUyk7XG4gICAgfVxuXG4gICAgLyoqIChFbGFzdGljIEJlYW5zdGFsayBvcGVyYXRpb25zIHJvbGUpIEFsbG93cyBhbiBlbnZpcm9ubWVudCB0byBlbmFibGUgQW1hem9uIFNOUyB0b3BpYyBpbnRlZ3JhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVTTlMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVTTlMpO1xuICAgIH1cblxuICAgIC8qKiAoRWxhc3RpYyBCZWFuc3RhbGsgb3BlcmF0aW9ucyByb2xlKSBBbGxvd3MgYSB3b3JrZXIgZW52aXJvbm1lbnQgdGllciB0byBjcmVhdGUgYW4gQW1hem9uIER5bmFtb0RCIHRhYmxlIGFuZCBhbiBBbWF6b24gU1FTIHF1ZXVlLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrUm9sZVdvcmtlclRpZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVXb3JrZXJUaWVyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgb24gYSBkZXByZWNhdGlvbiBwYXRoLiBTZWUgZG9jdW1lbnRhdGlvbiBmb3IgZ3VpZGFuY2U6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljYmVhbnN0YWxrL2xhdGVzdC9kZy9pYW0tc2VydmljZXJvbGUuaHRtbC4gQVdTIEVsYXN0aWMgQmVhbnN0YWxrIFNlcnZpY2Ugcm9sZSBwb2xpY3kgd2hpY2ggZ3JhbnRzIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSAmIG1hbmFnZSByZXNvdXJjZXMgKGkuZS46IEF1dG9TY2FsaW5nLCBFQzIsIFMzLCBDbG91ZEZvcm1hdGlvbiwgRUxCLCBldGMuKSBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa1NlcnZpY2UoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa1NlcnZpY2UpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgRWxhc3RpYyBCZWFuc3RhbGsgU2VydmljZSBMaW5rZWQgUm9sZSBwb2xpY3kgd2hpY2ggZ3JhbnRzIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSAmIG1hbmFnZSByZXNvdXJjZXMgKGkuZS46IEF1dG9TY2FsaW5nLCBFQzIsIFMzLCBDbG91ZEZvcm1hdGlvbiwgRUxCLCBldGMuKSBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgdGhlIGluc3RhbmNlcyBpbiB5b3VyIHdlYiBzZXJ2ZXIgZW52aXJvbm1lbnQgYWNjZXNzIHRvIHVwbG9hZCBsb2cgZmlsZXMgdG8gQW1hem9uIFMzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrV2ViVGllcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrV2ViVGllcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgdGhlIGluc3RhbmNlcyBpbiB5b3VyIHdvcmtlciBlbnZpcm9ubWVudCBhY2Nlc3MgdG8gdXBsb2FkIGxvZyBmaWxlcyB0byBBbWF6b24gUzMsIHRvIHVzZSBBbWF6b24gU1FTIHRvIG1vbml0b3IgeW91ciBhcHBsaWNhdGlvbidzIGpvYiBxdWV1ZSwgdG8gdXNlIEFtYXpvbiBEeW5hbW9EQiB0byBwZXJmb3JtIGxlYWRlciBlbGVjdGlvbiwgYW5kIHRvIEFtYXpvbiBDbG91ZFdhdGNoIHRvIHB1Ymxpc2ggbWV0cmljcyBmb3IgaGVhbHRoIG1vbml0b3JpbmcuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtXb3JrZXJUaWVyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtXb3JrZXJUaWVyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIGluc3RhbGxpbmcgdGhlIEFXUyBSZXBsaWNhdGlvbiBBZ2VudCwgd2hpY2ggaXMgdXNlZCB3aXRoIEFXUyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpIHRvIHJlY292ZXIgZXh0ZXJuYWwgc2VydmVycyB0byBBV1MuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcyB3aG9zZSBjcmVkZW50aWFscyB5b3UgcHJvdmlkZSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBzdGVwIG9mIHRoZSBBV1MgUmVwbGljYXRpb24gQWdlbnQuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5QWdlbnRJbnN0YWxsYXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlBZ2VudEluc3RhbGxhdGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyB1c2luZyB0aGUgQVdTIFJlcGxpY2F0aW9uIEFnZW50LCB3aGljaCBpcyB1c2VkIHdpdGggQVdTIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKERSUykgdG8gcmVjb3ZlciBzb3VyY2Ugc2VydmVycyB0byBBV1MuIFdlIGRvIG5vdCByZWNvbW1lbmQgdGhhdCB5b3UgYXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUFnZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5QWdlbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgcHVibGljIEFQSXMgb2YgQVdTIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKERSUyksIGFzIHdlbGwgYXMgcGVybWlzc2lvbnMgdG8gcmVhZCBLTVMga2V5LCBMaWNlbnNlIE1hbmFnZXIsIFJlc291cmNlIEdyb3VwcywgRWxhc3RpYyBMb2FkIEJhbGFuY2luZywgSUFNLCBhbmQgRUMyIGluZm9ybWF0aW9uLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5Q29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBwdWJsaWMgQVBJcyBvZiBBV1MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoQVdTIERSUyksIGFzIHdlbGwgYXMgYWxsIHB1YmxpYyBBUElzIGluIG90aGVyIEFXUyBzZXJ2aWNlcyB1c2VkIGJ5IEFXUyBEUlMgQ29uc29sZS4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5Q29uc29sZUZ1bGxBY2Nlc3NWMigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUNvbnNvbGVGdWxsQWNjZXNzVjIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBhdHRhY2hlZCB0byB0aGUgQVdTIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgQ29udmVyc2lvbiBzZXJ2ZXIncyBpbnN0YW5jZSByb2xlLiBUaGlzIHBvbGljeSBhbGxvd3MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoRFJTKSBDb252ZXJzaW9uIFNlcnZlcnMsIHdoaWNoIGFyZSBFQzIgaW5zdGFuY2VzIGxhdW5jaGVkIGJ5IEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnksIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIERSUyBzZXJ2aWNlLiBBbiBJQU0gcm9sZSB3aXRoIHRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIChhcyBhbiBFQzIgSW5zdGFuY2UgUHJvZmlsZSkgYnkgRFJTIHRvIHRoZSBEUlMgQ29udmVyc2lvbiBTZXJ2ZXJzLCB3aGljaCBhcmUgYXV0b21hdGljYWxseSBsYXVuY2hlZCBhbmQgdGVybWluYXRlZCBieSBEUlMsIHdoZW4gbmVlZGVkLiBXZSBkbyBub3QgcmVjb21tZW5kIHRoYXQgeW91IGF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gRFJTIENvbnZlcnNpb24gU2VydmVycyBhcmUgdXNlZCBieSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IHdoZW4gdXNlcnMgY2hvb3NlIHRvIHJlY292ZXIgc291cmNlIHNlcnZlcnMgdXNpbmcgdGhlIERSUyBjb25zb2xlLCBDTEksIG9yIEFQSS4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlDb252ZXJzaW9uU2VydmVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5Q29udmVyc2lvblNlcnZlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBBV1MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoRFJTKSB0byBzdXBwb3J0IGNyb3NzLWFjY291bnQgcmVwbGljYXRpb24gYW5kIGNyb3NzLWFjY291bnQgZmFpbGJhY2suICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5Q3Jvc3NBY2NvdW50UmVwbGljYXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlDcm9zc0FjY291bnRSZXBsaWNhdGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBpbnN0YWxsaW5nIGFuZCB1c2luZyB0aGUgQVdTIFJlcGxpY2F0aW9uIEFnZW50LCB3aGljaCBpcyB1c2VkIGJ5IEFXUyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpIHRvIHJlY292ZXIgc291cmNlIHNlcnZlcnMgdGhhdCBydW4gb24gRUMyIChjcm9zcy1yZWdpb24gb3IgY3Jvc3MtQVopLiBBbiBJQU0gcm9sZSB3aXRoIHRoaXMgcG9saWN5IHNob3VsZCBiZSBhdHRhY2hlZCAoYXMgYW4gRUMyIEluc3RhbmNlIFByb2ZpbGUpIHRvIHRoZSBFQzIgSW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUVjMkluc3RhbmNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5RWMySW5zdGFuY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBZb3UgY2FuIGF0dGFjaCB0aGUgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlGYWlsYmFja0luc3RhbGxhdGlvblBvbGljeSBwb2xpY3kgdG8geW91ciBJQU0gaWRlbnRpdGllcy4gIFRoaXMgcG9saWN5IGFsbG93cyBpbnN0YWxsaW5nIHRoZSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IEZhaWxiYWNrIENsaWVudCwgd2hpY2ggaXMgdXNlZCB0byBmYWlsYmFjayBSZWNvdmVyeSBJbnN0YW5jZXMgYmFjayB0byB5b3VyIG9yaWdpbmFsIHNvdXJjZSBpbmZyYXN0cnVjdHVyZS4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzIHdob3NlIGNyZWRlbnRpYWxzIHlvdSBwcm92aWRlIHdoZW4gcnVubmluZyB0aGUgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSBGYWlsYmFjayBDbGllbnQuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5RmFpbGJhY2tJbnN0YWxsYXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlGYWlsYmFja0luc3RhbGxhdGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyB1c2luZyB0aGUgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSBGYWlsYmFjayBDbGllbnQsIHdoaWNoIGlzIHVzZWQgdG8gZmFpbGJhY2sgUmVjb3ZlcnkgSW5zdGFuY2VzIGJhY2sgdG8geW91ciBvcmlnaW5hbCBzb3VyY2UgaW5mcmFzdHJ1Y3R1cmUuIFdlIGRvIG5vdCByZWNvbW1lbmQgdGhhdCB5b3UgYXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUZhaWxiYWNrUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5RmFpbGJhY2tQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgeW91IHRvIHVzZSBBbWF6b24gU1NNIGFuZCBhZGRpdGlvbmFsIHNlcnZpY2VzIHJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHJ1biBwb3N0LWxhdW5jaCBhY3Rpb25zIGluIEFXUyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChBV1MgRFJTKS4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHJvbGVzIG9yIHVzZXJzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUxhdW5jaEFjdGlvbnNQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlMYXVuY2hBY3Rpb25zUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIEFXUyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpIHRvIHN1cHBvcnQgbmV0d29yayByZXBsaWNhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlOZXR3b3JrUmVwbGljYXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlOZXR3b3JrUmVwbGljYXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBZb3UgY2FuIGF0dGFjaCB0aGUgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlSZWFkT25seUFjY2VzcyBwb2xpY3kgdG8geW91ciBJQU0gaWRlbnRpdGllcy4gIFRoaXMgcG9saWN5IHByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGFsbCByZWFkLW9ubHkgcHVibGljIEFQSXMgb2YgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoRFJTKSwgYXMgd2VsbCBhcyBzb21lIHJlYWQtb25seSBBUElzIG9mIG90aGVyIEFXUyBzZXJ2aWNlcyB0aGF0IGFyZSByZXF1aXJlZCBpbiBvcmRlciB0byBtYWtlIGZ1bGwgcmVhZC1vbmx5IHVzZSBvZiB0aGUgRFJTIGNvbnNvbGUuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgdG8gdGhlIGluc3RhbmNlIHJvbGUgb2YgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSdzIFJlY292ZXJ5IEluc3RhbmNlLiAgVGhpcyBwb2xpY3kgYWxsb3dzIHRoZSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpIFJlY292ZXJ5IEluc3RhbmNlLCB3aGljaCBhcmUgRUMyIGluc3RhbmNlcyBsYXVuY2hlZCBieSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IC0gdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgRFJTIHNlcnZpY2UsIGFuZCB0byBiZSBhYmxlIHRvIGZhaWxiYWNrIHRvIHRoZWlyIG9yaWdpbmFsIHNvdXJjZSBpbmZyYXN0cnVjdHVyZS4gQW4gSUFNIHJvbGUgd2l0aCB0aGlzIHBvbGljeSBpcyBhdHRhY2hlZCAoYXMgYW4gRUMyIEluc3RhbmNlIFByb2ZpbGUpIGJ5IEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgdG8gdGhlIERSUyBSZWNvdmVyeSBJbnN0YW5jZXMuIFdlIGRvIG5vdCByZWNvbW1lbmQgdGhhdCB5b3UgYXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVJlY292ZXJ5SW5zdGFuY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlSZWNvdmVyeUluc3RhbmNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgdG8gdGhlIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgUmVwbGljYXRpb24gc2VydmVyJ3MgaW5zdGFuY2Ugcm9sZS4gVGhpcyBwb2xpY3kgYWxsb3dzIHRoZSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpIFJlcGxpY2F0aW9uIFNlcnZlcnMsIHdoaWNoIGFyZSBFQzIgaW5zdGFuY2VzIGxhdW5jaGVkIGJ5IEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgLSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBEUlMgc2VydmljZSwgYW5kIHRvIGNyZWF0ZSBFQlMgc25hcHNob3RzIGluIHlvdXIgQVdTIGFjY291bnQuIEFuIElBTSByb2xlIHdpdGggdGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgKGFzIGFuIEVDMiBJbnN0YW5jZSBQcm9maWxlKSBieSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IHRvIHRoZSBEUlMgUmVwbGljYXRpb24gU2VydmVycyB3aGljaCBhcmUgYXV0b21hdGljYWxseSBsYXVuY2hlZCBhbmQgdGVybWluYXRlZCBieSBEUlMsIGFzIG5lZWRlZC4gRFJTIFJlcGxpY2F0aW9uIFNlcnZlcnMgYXJlIHVzZWQgdG8gZmFjaWxpdGF0ZSBkYXRhIHJlcGxpY2F0aW9uIGZyb20geW91ciBleHRlcm5hbCBzZXJ2ZXJzIHRvIEFXUywgYXMgcGFydCBvZiB0aGUgcmVjb3ZlcnkgcHJvY2VzcyBtYW5hZ2VkIGJ5IERSUy4gV2UgZG8gbm90IHJlY29tbWVuZCB0aGF0IHlvdSBhdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5UmVwbGljYXRpb25TZXJ2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlSZXBsaWNhdGlvblNlcnZlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoRFJTKSByZXNvdXJjZXMgc3VjaCBhcyBzb3VyY2Ugc2VydmVycyBhbmQgam9icy4gSXQgYWxzbyBhbGxvd3MgY3JlYXRpbmcgYSBjb252ZXJ0ZWQgc25hcHNob3QgYW5kIHNoYXJpbmcgdGhhdCBFQlMgc25hcHNob3Qgd2l0aCBhIHNwZWNpZmljIGFjY291bnQuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5U3RhZ2luZ0FjY291bnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlTdGFnaW5nQWNjb3VudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIHVzZWQgYnkgQVdTIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKERSUykgdG8gcmVjb3ZlciBzb3VyY2Ugc2VydmVycyBpbnRvIGEgc2VwYXJhdGUgdGFyZ2V0IGFjY291bnQgYW5kIHRvIGFsbG93IGZhaWxpbmcgYmFjay4gV2UgZG8gbm90IHJlY29tbWVuZCB0aGF0IHlvdSBhdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5U3RhZ2luZ0FjY291bnRQb2xpY3lWMigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVN0YWdpbmdBY2NvdW50UG9saWN5VjIpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIExpbmtlZCBSb2xlIFBvbGljeSBmb3IgQVdTIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgQ29udHJvbCBQbGFuZSAtIENsYXNzaWMgKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0xvYWRCYWxhbmNpbmdDbGFzc2ljU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0xvYWRCYWxhbmNpbmdDbGFzc2ljU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIExpbmtlZCBSb2xlIFBvbGljeSBmb3IgQVdTIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgQ29udHJvbCBQbGFuZSAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljTG9hZEJhbGFuY2luZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNMb2FkQmFsYW5jaW5nU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhQ29ubmVjdCByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhQ29ubmVjdEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFDb25uZWN0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYUNvbm5lY3QgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGVtZW50YWxNZWRpYUNvbm5lY3RSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYUNvbm5lY3RSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBFbGVtZW50YWwgTWVkaWFDb252ZXJ0IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgU0RLLiAqL1xuICAgIHB1YmxpYyBBV1NFbGVtZW50YWxNZWRpYUNvbnZlcnRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhQ29udmVydEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBFbGVtZW50YWwgTWVkaWFDb252ZXJ0IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgU0RLLiAqL1xuICAgIHB1YmxpYyBBV1NFbGVtZW50YWxNZWRpYUNvbnZlcnRSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYUNvbnZlcnRSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBFbGVtZW50YWwgTWVkaWFMaXZlIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NFbGVtZW50YWxNZWRpYUxpdmVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhTGl2ZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBFbGVtZW50YWwgTWVkaWFMaXZlIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NFbGVtZW50YWxNZWRpYUxpdmVSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYUxpdmVSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBFbGVtZW50YWwgTWVkaWFQYWNrYWdlIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NFbGVtZW50YWxNZWRpYVBhY2thZ2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhUGFja2FnZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBFbGVtZW50YWwgTWVkaWFQYWNrYWdlIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NFbGVtZW50YWxNZWRpYVBhY2thZ2VSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYVBhY2thZ2VSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBFbGVtZW50YWwgTWVkaWFQYWNrYWdlVjIgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGVtZW50YWxNZWRpYVBhY2thZ2VWMkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFQYWNrYWdlVjJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhUGFja2FnZVYyIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFQYWNrYWdlVjJSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYVBhY2thZ2VWMlJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgdG8gYWxsIE1lZGlhU3RvcmUgQVBJcyAqL1xuICAgIHB1YmxpYyBBV1NFbGVtZW50YWxNZWRpYVN0b3JlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYVN0b3JlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBwZXJtaXNzaW9ucyBmb3IgTWVkaWFTdG9yZSBBUElzICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhU3RvcmVSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYVN0b3JlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhVGFpbG9yIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NFbGVtZW50YWxNZWRpYVRhaWxvckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFUYWlsb3JGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhVGFpbG9yIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NFbGVtZW50YWxNZWRpYVRhaWxvclJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhVGFpbG9yUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdG8gZW5hYmxlIGVuaGFuY2VkIGNsYXNzaWMgbmV0d29ya2luZyBtYW5hZ2VtZW50IGZlYXR1cmUuICovXG4gICAgcHVibGljIEFXU0VuaGFuY2VkQ2xhc3NpY05ldHdvcmtpbmdNYW5nZW1lbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRW5oYW5jZWRDbGFzc2ljTmV0d29ya2luZ01hbmdlbWVudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGNvbnNvbGUgZnVsbCBhY2Nlc3MgdG8gQVdTIEVudGl0eSBSZXNvbHV0aW9uIGFuZCByZWxhdGVkIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NFbnRpdHlSZXNvbHV0aW9uQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRW50aXR5UmVzb2x1dGlvbkNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgRW50aXR5IFJlc29sdXRpb24gdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NFbnRpdHlSZXNvbHV0aW9uQ29uc29sZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VudGl0eVJlc29sdXRpb25Db25zb2xlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgdGhlIEZhdWx0IEluamVjdGlvbiBTaW11bGF0b3IgU2VydmljZSBwZXJtaXNzaW9uIGluIEVDMiBhbmQgb3RoZXIgcmVxdWlyZWQgc2VydmljZXMgdG8gcGVyZm9ybSBGSVMgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTRmF1bHRJbmplY3Rpb25TaW11bGF0b3JFQzJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRmF1bHRJbmplY3Rpb25TaW11bGF0b3JFQzJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgdGhlIEZhdWx0IEluamVjdGlvbiBTaW11bGF0b3IgU2VydmljZSBwZXJtaXNzaW9uIGluIEVDUyBhbmQgb3RoZXIgcmVxdWlyZWQgc2VydmljZXMgdG8gcGVyZm9ybSBGSVMgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTRmF1bHRJbmplY3Rpb25TaW11bGF0b3JFQ1NBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRmF1bHRJbmplY3Rpb25TaW11bGF0b3JFQ1NBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgdGhlIEZhdWx0IEluamVjdGlvbiBTaW11bGF0b3IgU2VydmljZSBwZXJtaXNzaW9uIGluIEVLUyBhbmQgb3RoZXIgcmVxdWlyZWQgc2VydmljZXMgdG8gcGVyZm9ybSBGSVMgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTRmF1bHRJbmplY3Rpb25TaW11bGF0b3JFS1NBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRmF1bHRJbmplY3Rpb25TaW11bGF0b3JFS1NBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgdGhlIEZhdWx0IEluamVjdGlvbiBTaW11bGF0b3IgU2VydmljZSBwZXJtaXNzaW9uIGluIEVDMiBuZXR3b3JraW5nIGFuZCBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcyB0byBwZXJmb3JtIEZJUyBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NGYXVsdEluamVjdGlvblNpbXVsYXRvck5ldHdvcmtBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRmF1bHRJbmplY3Rpb25TaW11bGF0b3JOZXR3b3JrQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHRoZSBGYXVsdCBJbmplY3Rpb24gU2ltdWxhdG9yIFNlcnZpY2UgcGVybWlzc2lvbiBpbiBSRFMgYW5kIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzIHRvIHBlcmZvcm0gRklTIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yUkRTQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yUkRTQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHRoZSBGYXVsdCBJbmplY3Rpb24gU2ltdWxhdG9yIFNlcnZpY2UgcGVybWlzc2lvbiBpbiBTU00gYW5kIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzIHRvIHBlcmZvcm0gRklTIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yU1NNQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yU1NNQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBhY2Nlc3MgdG8gQVdTIFNlcnZpY2UgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIEZpblNwYWNlICovXG4gICAgcHVibGljIEFXU0ZpblNwYWNlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRmluU3BhY2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bGwgYWNjZXNzIGZvciBBV1MgRk0gQWRtaW5pc3RyYXRvciAqL1xuICAgIHB1YmxpYyBBV1NGTUFkbWluRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NGTUFkbWluRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFJlYWQgb25seSBhY2Nlc3MgZm9yIEFXUyBGTSBBZG1pbmlzdHJhdG9yIHRoYXQgYWxsb3dzIG1vbml0b3JpbmcgQVdTIEZNIG9wZXJhdGlvbnMgKi9cbiAgICBwdWJsaWMgQVdTRk1BZG1pblJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZNQWRtaW5SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIFdBRiBhY3Rpb25zIGZvciBBV1MgRmlyZXdhbGwgTWFuYWdlciBtZW1iZXIgYWNjb3VudHMgKi9cbiAgICBwdWJsaWMgQVdTRk1NZW1iZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NGTU1lbWJlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogTWFuYWdlZCBwb2xpY3kgZm9yIEFXUyBGb3IgV29yZHByZXNzIFBsdWdpbiAqL1xuICAgIHB1YmxpYyBBV1NGb3JXb3JkUHJlc3NQbHVnaW5Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRm9yV29yZFByZXNzUGx1Z2luUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHdoaWNoIGFsbG93cyBBV1MgQ29kZSBDb25uZWN0aW9ucyB0byBzeW5jIGNvbnRlbnQgZnJvbSB5b3VyIGdpdCByZXBvc2l0b3J5ICovXG4gICAgcHVibGljIEFXU0dpdFN5bmNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHaXRTeW5jU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQVdTIEdsb2JhbCBBY2NlbGVyYXRvciB0byBtYW5hZ2UgRUMyIEVsYXN0aWMgTmV0d29yayBJbnRlcmZhY2VzIGFuZCBTZWN1cml0eSBHcm91cHMuICovXG4gICAgcHVibGljIEFXU0dsb2JhbEFjY2VsZXJhdG9yU0xSUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dsb2JhbEFjY2VsZXJhdG9yU0xSUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEdsdWUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlICovXG4gICAgcHVibGljIEFXU0dsdWVDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHbHVlQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgR2x1ZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIGFjY2VzcyB0byBzYWdlbWFrZXIgbm90ZWJvb2sgaW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NHbHVlQ29uc29sZVNhZ2VNYWtlck5vdGVib29rRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHbHVlQ29uc29sZVNhZ2VNYWtlck5vdGVib29rRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBHbHVlIERhdGFCcmV3IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gQWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgKGUuZy4sIFMzLCBLTVMsIEdsdWUpLiAqL1xuICAgIHB1YmxpYyBBd3NHbHVlRGF0YUJyZXdGdWxsQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkF3c0dsdWVEYXRhQnJld0Z1bGxBY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbiB0byBnbHVlIHRvIHBlcmZvcm0gYWN0aW9uIG9uIHVzZXIncyBnbHVlIGRhdGEgY2F0YWxvZywgdGhpcyBwb2xpY3kgYWxzbyBwcm92aWRlcyBwZXJtaXNzaW9uIHRvIGVjMiBhY3Rpb25zIHRvIGFsbG93IGdsdWUgdG8gY3JlYXRlIEVOSSB0byBjb25uZWN0IHRvIHJlc291cmNlcyBpbiB0aGUgVlBDLCBhbHNvIGFsbG93IGdsdWUgdG8gYWNjZXNzIHJlZ2lzdGVyZWQgZGF0YSBpbiBsYWtlZm9ybWF0aW9uIGFuZCBwZXJtaXNzaW9uIHRvIGFjY2VzcyB1c2VyJ3MgY2xvdWR3YXRjaCAqL1xuICAgIHB1YmxpYyBBV1NHbHVlRGF0YUJyZXdTZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHbHVlRGF0YUJyZXdTZXJ2aWNlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgR2x1ZSBTY2hlbWEgUmVnaXN0cnkgU2VydmljZSAqL1xuICAgIHB1YmxpYyBBV1NHbHVlU2NoZW1hUmVnaXN0cnlGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dsdWVTY2hlbWFSZWdpc3RyeUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkb25seSBhY2Nlc3MgdG8gdGhlIEFXUyBHbHVlIFNjaGVtYSBSZWdpc3RyeSBTZXJ2aWNlICovXG4gICAgcHVibGljIEFXU0dsdWVTY2hlbWFSZWdpc3RyeVJlYWRvbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dsdWVTY2hlbWFSZWdpc3RyeVJlYWRvbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBBV1MgR2x1ZSBzZXJ2aWNlIHJvbGUgd2hpY2ggYWxsb3dzIGN1c3RvbWVyIHRvIG1hbmFnZSBub3RlYm9vayBzZXJ2ZXIgKi9cbiAgICBwdWJsaWMgQVdTR2x1ZVNlcnZpY2VOb3RlYm9va1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR2x1ZVNlcnZpY2VOb3RlYm9va1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIEFXUyBHbHVlIHNlcnZpY2Ugcm9sZSB3aGljaCBhbGxvd3MgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIEVDMiwgUzMsIGFuZCBDbG91ZHdhdGNoIExvZ3MgKi9cbiAgICBwdWJsaWMgQVdTR2x1ZVNlcnZpY2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dsdWVTZXJ2aWNlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRoYXQgYWxsb3dzIHVzZXJzIHRvIGNyZWF0ZSBhbmQgdXNlIG9ubHkgdGhlIG5vdGVib29rIHNlc3Npb25zIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdXNlci4gVGhpcyBwb2xpY3kgYWxzbyBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBleHBsaWNpdGx5IGFsbG93IHVzZXJzIHRvIHBhc3MgYSByZXN0cmljdGVkIEdsdWUgc2Vzc2lvbiByb2xlLiAqL1xuICAgIHB1YmxpYyBBd3NHbHVlU2Vzc2lvblVzZXJSZXN0cmljdGVkTm90ZWJvb2tQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXdzR2x1ZVNlc3Npb25Vc2VyUmVzdHJpY3RlZE5vdGVib29rUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIEFXUyBHbHVlIHJlc291cmNlcyBleGNlcHQgZm9yIHNlc3Npb25zLiBBbGxvd3MgdXNlcnMgdG8gY3JlYXRlIGFuZCB1c2Ugb25seSB0aGUgbm90ZWJvb2sgc2Vzc2lvbnMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB1c2VyLiBUaGlzIHBvbGljeSBhbHNvIGluY2x1ZGVzIG90aGVyIHBlcm1pc3Npb25zIG5lZWRlZCBieSBBV1MgR2x1ZSB0byBtYW5hZ2UgR2x1ZSByZXNvdXJjZXMgaW4gb3RoZXIgQVdTIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBd3NHbHVlU2Vzc2lvblVzZXJSZXN0cmljdGVkTm90ZWJvb2tTZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Bd3NHbHVlU2Vzc2lvblVzZXJSZXN0cmljdGVkTm90ZWJvb2tTZXJ2aWNlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRoYXQgYWxsb3dzIHVzZXJzIHRvIGNyZWF0ZSBhbmQgdXNlIG9ubHkgdGhlIGludGVyYWN0aXZlIHNlc3Npb25zIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdXNlci4gVGhpcyBwb2xpY3kgYWxzbyBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBleHBsaWNpdGx5IGFsbG93IHVzZXJzIHRvIHBhc3MgYSByZXN0cmljdGVkIEdsdWUgc2Vzc2lvbiByb2xlLiAqL1xuICAgIHB1YmxpYyBBd3NHbHVlU2Vzc2lvblVzZXJSZXN0cmljdGVkUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkF3c0dsdWVTZXNzaW9uVXNlclJlc3RyaWN0ZWRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgQVdTIEdsdWUgcmVzb3VyY2VzIGV4Y2VwdCBmb3Igc2Vzc2lvbnMuIEFsbG93cyB1c2VycyB0byBjcmVhdGUgYW5kIHVzZSBvbmx5IHRoZSBpbnRlcmFjdGl2ZSBzZXNzaW9ucyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHVzZXIuIFRoaXMgcG9saWN5IGFsc28gaW5jbHVkZXMgb3RoZXIgcGVybWlzc2lvbnMgbmVlZGVkIGJ5IEFXUyBHbHVlIHRvIG1hbmFnZSBHbHVlIHJlc291cmNlcyBpbiBvdGhlciBBV1Mgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQXdzR2x1ZVNlc3Npb25Vc2VyUmVzdHJpY3RlZFNlcnZpY2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkF3c0dsdWVTZXNzaW9uVXNlclJlc3RyaWN0ZWRTZXJ2aWNlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB3aXRoaW4gQW1hem9uIEdyYWZhbmEgdG8gY3JlYXRlIGFuZCBtYW5hZ2Ugd29ya3NwYWNlcyBmb3IgdGhlIGVudGlyZSBvcmdhbml6YXRpb24uICovXG4gICAgcHVibGljIEFXU0dyYWZhbmFBY2NvdW50QWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHcmFmYW5hQWNjb3VudEFkbWluaXN0cmF0b3IpO1xuICAgIH1cblxuICAgIC8qKiBBY2Nlc3MgdG8gcmVhZCBvbmx5IG9wZXJhdGlvbnMgaW4gQW1hem9uIEdyYWZhbmEuICovXG4gICAgcHVibGljIEFXU0dyYWZhbmFDb25zb2xlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR3JhZmFuYUNvbnNvbGVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG9ubHkgdGhlIGFiaWxpdHkgdG8gdXBkYXRlIHVzZXIgYW5kIGdyb3VwIHBlcm1pc3Npb25zIGZvciBBV1MgR3JhZmFuYSB3b3Jrc3BhY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NHcmFmYW5hV29ya3NwYWNlUGVybWlzc2lvbk1hbmFnZW1lbnQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR3JhZmFuYVdvcmtzcGFjZVBlcm1pc3Npb25NYW5hZ2VtZW50KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWJpbGl0eSB0byB1cGRhdGUgSUFNIElkZW50aXR5IENlbnRlciAoSWRDKSB1c2VyIGFuZCBncm91cCBwZXJtaXNzaW9ucyBmb3IgQW1hem9uIE1hbmFnZWQgR3JhZmFuYSB3b3Jrc3BhY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NHcmFmYW5hV29ya3NwYWNlUGVybWlzc2lvbk1hbmFnZW1lbnRWMigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHcmFmYW5hV29ya3NwYWNlUGVybWlzc2lvbk1hbmFnZW1lbnRWMik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdpdmVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgR3JlZW5ncmFzcyBjb25maWd1cmF0aW9uLCBtYW5hZ2VtZW50IGFuZCBkZXBsb3ltZW50IGFjdGlvbnMgKi9cbiAgICBwdWJsaWMgQVdTR3JlZW5ncmFzc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR3JlZW5ncmFzc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBnaXZlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBBV1MgR3JlZW5ncmFzcyBjb25maWd1cmF0aW9uLCBtYW5hZ2VtZW50IGFuZCBkZXBsb3ltZW50IGFjdGlvbnMgKi9cbiAgICBwdWJsaWMgQVdTR3JlZW5ncmFzc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dyZWVuZ3Jhc3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIEdyZWVuZ3Jhc3Mgc2VydmljZSByb2xlIHdoaWNoIGFsbG93cyBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgQVdTIExhbWJkYSBhbmQgQVdTIElvVCB0aGluZyBzaGFkb3dzLiAqL1xuICAgIHB1YmxpYyBBV1NHcmVlbmdyYXNzUmVzb3VyY2VBY2Nlc3NSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dyZWVuZ3Jhc3NSZXNvdXJjZUFjY2Vzc1JvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB0aGUgRGF0YWZsb3cgRW5kcG9pbnQgSW5zdGFuY2UgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBBV1MgR3JvdW5kIFN0YXRpb24gQWdlbnQgKi9cbiAgICBwdWJsaWMgQVdTR3JvdW5kU3RhdGlvbkFnZW50SW5zdGFuY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR3JvdW5kU3RhdGlvbkFnZW50SW5zdGFuY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIEhlYWx0aCB0byBlbmFibGUgdGhlIEhlYWx0aCBldmVudCBwcm9jZXNzb3IgZmVhdHVyZS4gKi9cbiAgICBwdWJsaWMgQVdTSGVhbHRoRXZlbnRQcm9jZXNzb3JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NIZWFsdGhFdmVudFByb2Nlc3NvclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgSGVhbHRoIEFwaXMgYW5kIE5vdGlmaWNhdGlvbnMgYW5kIHRoZSBQZXJzb25hbCBIZWFsdGggRGFzaGJvYXJkICovXG4gICAgcHVibGljIEFXU0hlYWx0aEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSGVhbHRoRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBIZWFsdGggSW1hZ2luZyBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NIZWFsdGhJbWFnaW5nRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NIZWFsdGhJbWFnaW5nRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIEhlYWx0aCBJbWFnaW5nIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU0hlYWx0aEltYWdpbmdSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NIZWFsdGhJbWFnaW5nUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB0aGUgbGlzdCBvZiBhY3Rpb25zIHRoYXQgYXJlIGFsbG93ZWQgZm9yIHJvbGVzIGFzc3VtZWQgd2l0aCB0aGUgSUFNIElkZW50aXR5IENlbnRlciBpZGVudGl0eSBjb250ZXh0LiBBV1MgU2VjdXJpdHkgVG9rZW4gU2VydmljZSAoQVdTIFNUUykgYXV0b21hdGljYWxseSBhdHRhY2hlcyB0aGlzIHBvbGljeSB0byBhc3N1bWVkIHJvbGVzLiBUaGUgaWRlbnRpdHkgY29udGV4dCBpcyBwYXNzZWQgYXMgUHJvdmlkZWRDb250ZXh0LiAqL1xuICAgIHB1YmxpYyBBV1NJQU1JZGVudGl0eUNlbnRlckFsbG93TGlzdEZvcklkZW50aXR5Q29udGV4dCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJQU1JZGVudGl0eUNlbnRlckFsbG93TGlzdEZvcklkZW50aXR5Q29udGV4dCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBtYW5hZ2UgSUFNIElkZW50aXR5IENlbnRlciB1c2VycyBmcm9tIGFuIGV4dGVybmFsIHByb3ZpZGVyLiAqL1xuICAgIHB1YmxpYyBBV1NJZGVudGl0eUNlbnRlckV4dGVybmFsTWFuYWdlbWVudFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJZGVudGl0eUNlbnRlckV4dGVybmFsTWFuYWdlbWVudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byB0aGUgSWRlbnRpdHkgU3luYyBzZXJ2aWNlICovXG4gICAgcHVibGljIEFXU0lkZW50aXR5U3luY0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSWRlbnRpdHlTeW5jRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFJlYWQgb25seSBhY2Nlc3MgdG8gdGhlIElkZW50aXR5IFN5bmMgc2VydmljZSAqL1xuICAgIHB1YmxpYyBBV1NJZGVudGl0eVN5bmNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJZGVudGl0eVN5bmNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBBV1MgSW1hZ2UgQnVpbGRlciBhY3Rpb25zIGFuZCByZXNvdXJjZSBzY29wZWQgYWNjZXNzIHRvIHJlbGF0ZWQgQVdTIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NJbWFnZUJ1aWxkZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ltYWdlQnVpbGRlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIGFsbCBBV1MgSW1hZ2UgQnVpbGRlciBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NJbWFnZUJ1aWxkZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJbWFnZUJ1aWxkZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgYW5kIHdyaXRlIGFjY2VzcyB0byB0aGUgam9icyBjcmVhdGVkIHVuZGVyIHRoZSBBV1MgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQVdTSW1wb3J0RXhwb3J0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJbXBvcnRFeHBvcnRGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byB0aGUgam9icyBjcmVhdGVkIHVuZGVyIHRoZSBBV1MgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQVdTSW1wb3J0RXhwb3J0UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW1wb3J0RXhwb3J0UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgSW5jaWRlbnQgTWFuYWdlciBwZXJtaXNzaW9ucyB0byBjYWxsIG90aGVyIEFXUyBzZXJ2aWNlcyBhcyBhIHBhcnQgb2YgbWFuYWdpbmcgYW4gaW5jaWRlbnQuICovXG4gICAgcHVibGljIEFXU0luY2lkZW50TWFuYWdlckluY2lkZW50QWNjZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW5jaWRlbnRNYW5hZ2VySW5jaWRlbnRBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byBzdGFydCwgdmlldywgYW5kIHVwZGF0ZSBpbmNpZGVudHMgd2l0aCBmdWxsIGFjY2VzcyB0byBjdXN0b20gdGltZWxpbmUgZXZlbnRzICYgcmVsYXRlZCBpdGVtcy4gQXNzaWduIHRoaXMgcG9saWN5IHRvIHVzZXJzIHdobyB3aWxsIGNyZWF0ZSBhbmQgcmVzb2x2ZSBpbmNpZGVudHMuICovXG4gICAgcHVibGljIEFXU0luY2lkZW50TWFuYWdlclJlc29sdmVyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0luY2lkZW50TWFuYWdlclJlc29sdmVyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIEluY2lkZW50IE1hbmFnZXIgcGVybWlzc2lvbiB0byBtYW5hZ2UgaW5jaWRlbnQgcmVjb3JkcyBhbmQgcmVsYXRlZCByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0luY2lkZW50TWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0luY2lkZW50TWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSW9UIEFuYWx5dGljcy4gKi9cbiAgICBwdWJsaWMgQVdTSW9UQW5hbHl0aWNzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RBbmFseXRpY3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBJb1QgQW5hbHl0aWNzLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RBbmFseXRpY3NSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RBbmFseXRpY3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdpdmVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgSW9UIGNvbmZpZ3VyYXRpb24gYWN0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NJb1RDb25maWdBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UQ29uZmlnQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ2l2ZXMgcmVhZCBvbmx5IGFjY2VzcyB0byB0aGUgQVdTIElvVCBjb25maWd1cmF0aW9uIGFjdGlvbnMgKi9cbiAgICBwdWJsaWMgQVdTSW9UQ29uZmlnUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UQ29uZmlnUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBnaXZlcyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIElvVCBtZXNzYWdpbmcgYWN0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NJb1REYXRhQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVERhdGFBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB3cml0ZSBhY2Nlc3MgdG8gSW9UIHRoaW5nIGdyb3VwcyBhbmQgcmVhZCBhY2Nlc3MgdG8gSW9UIENlcnRpZmljYXRlcyBmb3IgZXhlY3V0aW9uIG9mIEFERF9USElOR1NfVE9fVEhJTkdfR1JPVVAgbWl0aWdhdGlvbiBhY3Rpb24gKi9cbiAgICBwdWJsaWMgQVdTSW9URGV2aWNlRGVmZW5kZXJBZGRUaGluZ3NUb1RoaW5nR3JvdXBNaXRpZ2F0aW9uQWN0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVERldmljZURlZmVuZGVyQWRkVGhpbmdzVG9UaGluZ0dyb3VwTWl0aWdhdGlvbkFjdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgYWNjZXNzIGZvciBJb1QgYW5kIHJlbGF0ZWQgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU0lvVERldmljZURlZmVuZGVyQXVkaXQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGV2aWNlRGVmZW5kZXJBdWRpdCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyBmb3IgZW5hYmxpbmcgSW9UIGxvZ2dpbmcgZm9yIGV4ZWN1dGlvbiBvZiBFTkFCTEVfSU9UX0xPR0dJTkcgbWl0aWdhdGlvbiBhY3Rpb24gKi9cbiAgICBwdWJsaWMgQVdTSW9URGV2aWNlRGVmZW5kZXJFbmFibGVJb1RMb2dnaW5nTWl0aWdhdGlvbkFjdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1REZXZpY2VEZWZlbmRlckVuYWJsZUlvVExvZ2dpbmdNaXRpZ2F0aW9uQWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbWVzc2FnZXMgcHVibGlzaCBhY2Nlc3MgdG8gU05TIHRvcGljIGZvciBleGVjdXRpb24gb2YgUFVCTElTSF9GSU5ESU5HX1RPX1NOUyBtaXRpZ2F0aW9uIGFjdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NJb1REZXZpY2VEZWZlbmRlclB1Ymxpc2hGaW5kaW5nc1RvU05TTWl0aWdhdGlvbkFjdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1REZXZpY2VEZWZlbmRlclB1Ymxpc2hGaW5kaW5nc1RvU05TTWl0aWdhdGlvbkFjdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHdyaXRlIGFjY2VzcyB0byBJb1QgcG9saWNpZXMgZm9yIGV4ZWN1dGlvbiBvZiBSRVBMQUNFX0RFRkFVTFRfUE9MSUNZX1ZFUlNJT04gbWl0aWdhdGlvbiBhY3Rpb24gKi9cbiAgICBwdWJsaWMgQVdTSW9URGV2aWNlRGVmZW5kZXJSZXBsYWNlRGVmYXVsdFBvbGljeU1pdGlnYXRpb25BY3Rpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGV2aWNlRGVmZW5kZXJSZXBsYWNlRGVmYXVsdFBvbGljeU1pdGlnYXRpb25BY3Rpb24pO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB3cml0ZSBhY2Nlc3MgdG8gSW9UIENBIGNlcnRpZmljYXRlcyBmb3IgZXhlY3V0aW9uIG9mICBVUERBVEVfQ0FfQ0VSVElGSUNBVEUgbWl0aWdhdGlvbiBhY3Rpb24gKi9cbiAgICBwdWJsaWMgQVdTSW9URGV2aWNlRGVmZW5kZXJVcGRhdGVDQUNlcnRNaXRpZ2F0aW9uQWN0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVERldmljZURlZmVuZGVyVXBkYXRlQ0FDZXJ0TWl0aWdhdGlvbkFjdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHdyaXRlIGFjY2VzcyB0byBJb1QgY2VydGlmaWNhdGVzIGZvciBleGVjdXRpb24gb2YgVVBEQVRFX0RFVklDRV9DRVJUSUZJQ0FURSBtaXRpZ2F0aW9uIGFjdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NJb1REZXZpY2VEZWZlbmRlclVwZGF0ZURldmljZUNlcnRNaXRpZ2F0aW9uQWN0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVERldmljZURlZmVuZGVyVXBkYXRlRGV2aWNlQ2VydE1pdGlnYXRpb25BY3Rpb24pO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIElvVCBEZXZpY2UgVGVzdGVyIHRvIHJ1biB0aGUgRnJlZVJUT1MgcXVhbGlmaWNhdGlvbiBzdWl0ZSBieSBhbGxvd2luZyBhY2Nlc3MgdG8gc2VydmljZXMgaW5jbHVkaW5nIElvVCwgUzMsIGFuZCBJQU0gKi9cbiAgICBwdWJsaWMgQVdTSW9URGV2aWNlVGVzdGVyRm9yRnJlZVJUT1NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVERldmljZVRlc3RlckZvckZyZWVSVE9TRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgSW9UIERldmljZSBUZXN0ZXIgdG8gcnVuIHRoZSBBV1MgR3JlZW5ncmFzcyBxdWFsaWZpY2F0aW9uIHN1aXRlIGJ5IGFsbG93aW5nIGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBMYW1iZGEsIElvVCwgQVBJIEdhdGV3YXksIElBTSAqL1xuICAgIHB1YmxpYyBBV1NJb1REZXZpY2VUZXN0ZXJGb3JHcmVlbmdyYXNzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1REZXZpY2VUZXN0ZXJGb3JHcmVlbmdyYXNzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIElvVCBFdmVudHMuICovXG4gICAgcHVibGljIEFXU0lvVEV2ZW50c0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URXZlbnRzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gSW9UIEV2ZW50cy4gKi9cbiAgICBwdWJsaWMgQVdTSW9URXZlbnRzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URXZlbnRzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBGZWRlcmF0aW9uIGFjY2VzcyBmb3IgSW9UIEZsZWV0IEh1YiBhcHBsaWNhdGlvbnMgKi9cbiAgICBwdWJsaWMgQVdTSW9URmxlZXRIdWJGZWRlcmF0aW9uQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVEZsZWV0SHViRmVkZXJhdGlvbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBBV1MgUmVzb3VyY2VzIGFuZCBtZXRhRGF0YSB1c2VkIG9yIG1hbmFnZWQgYnkgQVdTSW9URmxlZXR3aXNlIGZvciBhdXhpbGlhcnkgZmVhdHVyZXMgKi9cbiAgICBwdWJsaWMgQVdTSW9URmxlZXR3aXNlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URmxlZXR3aXNlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBnaXZlcyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIElvVCBjb25maWd1cmF0aW9uIGFuZCBtZXNzYWdpbmcgYWN0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NJb1RGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgY3JlYXRpb24gb2YgQW1hem9uIENsb3VkV2F0Y2ggTG9nIGdyb3VwcyBhbmQgc3RyZWFtaW5nIGxvZ3MgdG8gdGhlIGdyb3VwcyAqL1xuICAgIHB1YmxpYyBBV1NJb1RMb2dnaW5nKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVExvZ2dpbmcpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBtYW5hZ2VkIGludGVncmF0aW9ucyBmb3IgQVdTIElvVCBEZXZpY2UgTWFuYWdlbWVudCBhbmQgcmVsYXRlZCBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTSW9UTWFuYWdlZEludGVncmF0aW9uc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UTWFuYWdlZEludGVncmF0aW9uc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBtYW5hZ2VkIGludGVncmF0aW9ucyBmb3IgQVdTIElvVCBEZXZpY2UgTWFuYWdlbWVudCBwZXJtaXNzaW9uIHRvIHB1Ymxpc2ggbG9ncyBhbmQgbWV0cmljcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTSW9UTWFuYWdlZEludGVncmF0aW9uc1JvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UTWFuYWdlZEludGVncmF0aW9uc1JvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYWNjZXNzIHRvIGNyZWF0ZSBBV1MgSW9UIEpvYiBhbmQgZGVzY3JpYmUgdGhlIEFXUyBjb2RlIHNpZ25lciBqb2IgKi9cbiAgICBwdWJsaWMgQVdTSW9UT1RBVXBkYXRlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVE9UQVVwZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhY2Nlc3MgdG8gYWxsIEFXUyBzZXJ2aWNlcyBzdXBwb3J0ZWQgaW4gQVdTIElvVCBSdWxlIEFjdGlvbnMgKi9cbiAgICBwdWJsaWMgQVdTSW9UUnVsZUFjdGlvbnMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UUnVsZUFjdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBtYW5hZ2UgQVdTIElvVCBTaXRlV2lzZSB1c2luZyB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gTm90ZSB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBhY2Nlc3MgdG8gY3JlYXRlIGFuZCBsaXN0IGRhdGEgc3RvcmVzIHVzZWQgd2l0aCBBV1MgSW9UIFNpdGVXaXNlIChlLmcuIEFXUyBJb1QgQW5hbHl0aWNzKSwgYWNjZXNzIHRvIGxpc3QgYW5kIHZpZXcgQVdTIElvVCBHcmVlbmdyYXNzIHJlc291cmNlcywgbGlzdCBhbmQgbW9kaWZ5IEFXUyBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0cywgcmV0cmlldmUgQVdTIElvVCB0aGluZyBzaGFkb3dzLCBsaXN0IHJlc291cmNlcyB3aXRoIHNwZWNpZmljIHRhZ3MsIGFuZCBjcmVhdGUgYW5kIHVzZSBhIHNlcnZpY2UtbGlua2VkIHJvbGUgZm9yIEFXUyBJb1QgU2l0ZVdpc2UuICovXG4gICAgcHVibGljIEFXU0lvVFNpdGVXaXNlQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UU2l0ZVdpc2VDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIElvVCBTaXRlV2lzZS4gKi9cbiAgICBwdWJsaWMgQVdTSW9UU2l0ZVdpc2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVFNpdGVXaXNlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgQVdTIElvVCBTaXRlV2lzZSBhc3NldHMgYW5kIGFzc2V0IGRhdGEsIGNyZWF0ZSBBV1MgSW9UIFNpdGVXaXNlIE1vbml0b3IgcmVzb3VyY2VzLCBhbmQgbGlzdCBBV1MgU1NPIHVzZXJzLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RTaXRlV2lzZU1vbml0b3JQb3J0YWxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UU2l0ZVdpc2VNb25pdG9yUG9ydGFsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyByb2xlIGdyYW50cyBBV1MgSW9UIFNpdGVXaXNlIG1vbml0b3IgcGVybWlzc2lvbnMgdG8gYWNjZXNzIHlvdXIgQVdTIElvVCBTaXRlV2lzZSBhc3NldHMgJiBhc3NldCBwcm9wZXJ0aWVzLCBhbmQgY3JlYXRlIEFXUyBJb1QgU2l0ZXdpc2UgcHJvamVjdHMsIGRhc2hib2FyZHMgJiBhY2Nlc3MgcG9saWNpZXMgdGhyb3VnaCBBV1MgSW9UIFNpdGVXaXNlIHBvcnRhbHMuICovXG4gICAgcHVibGljIEFXU0lvVFNpdGVXaXNlTW9uaXRvclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVFNpdGVXaXNlTW9uaXRvclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBJb1QgU2l0ZVdpc2UuICovXG4gICAgcHVibGljIEFXU0lvVFNpdGVXaXNlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UU2l0ZVdpc2VSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyB1c2VycyB0byByZWdpc3RlciB0aGluZ3MgYXQgYnVsayB1c2luZyBBV1MgSW9UIFN0YXJ0VGhpbmdSZWdpc3RyYXRpb25UYXNrIEFQSSAqL1xuICAgIHB1YmxpYyBBV1NJb1RUaGluZ3NSZWdpc3RyYXRpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UVGhpbmdzUmVnaXN0cmF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBJb1QgVHdpbk1ha2VyIHRvIGNhbGwgb3RoZXIgQVdTIHNlcnZpY2VzIGFuZCB0byBzeW5jIHRoZWlyIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTSW9UVHdpbk1ha2VyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UVHdpbk1ha2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIGFzc29jaWF0ZWQgaWRlbnRpdHkgZGF0YSBhY2Nlc3MgdG8gQVdTIElvVCBXaXJlbGVzcyBkZXZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RXaXJlbGVzc0RhdGFBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UV2lyZWxlc3NEYXRhQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBhc3NvY2lhdGVkIGlkZW50aXR5IGZ1bGwgYWNjZXNzIHRvIGFsbCBBV1MgSW9UIFdpcmVsZXNzIG9wZXJhdGlvbnMuICovXG4gICAgcHVibGljIEFXU0lvVFdpcmVsZXNzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RXaXJlbGVzc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBJb1QgV2lyZWxlc3MgZnVsbCBhY2Nlc3MgdG8gcHVibGlzaCB0byBJb1QgUnVsZXMgRW5naW5lIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RXaXJlbGVzc0Z1bGxQdWJsaXNoQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVFdpcmVsZXNzRnVsbFB1Ymxpc2hBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIGFzc29jaWF0ZWQgaWRlbnRpdHkgYWNjZXNzIHRvIGNyZWF0ZSwgbGlzdCBhbmQgZGVzY3JpYmUgSW9UIENlcnRpZmljYXRlcyAqL1xuICAgIHB1YmxpYyBBV1NJb1RXaXJlbGVzc0dhdGV3YXlDZXJ0TWFuYWdlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RXaXJlbGVzc0dhdGV3YXlDZXJ0TWFuYWdlcik7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgYXNzb2NpYXRlZCBpZGVudGl0eSB0byBjcmVhdGUgQW1hem9uIENsb3VkV2F0Y2ggTG9ncyBncm91cHMgYW5kIHN0cmVhbSBsb2dzIHRvIHRoZSBncm91cHMuICovXG4gICAgcHVibGljIEFXU0lvVFdpcmVsZXNzTG9nZ2luZygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RXaXJlbGVzc0xvZ2dpbmcpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIGFzc29jaWF0ZWQgaWRlbnRpdHkgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgSW9UIHdpcmVsZXNzLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RXaXJlbGVzc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVFdpcmVsZXNzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgVlBDIElQIEFkZHJlc3MgTWFuYWdlciB0byBhY2Nlc3MgVlBDIHJlc291cmNlcyBhbmQgaW50ZWdyYXRlIHdpdGggQVdTIE9yZ2FuaXphdGlvbnMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0lQQU1TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJUEFNU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBVc2VkIGJ5IEFXUyBJUSB0byBleGVjdXRlIHBheW1lbnQgcmVxdWVzdHMgb24gYmVoYWxmIG9mIGEgY3VzdG9tZXIgKi9cbiAgICBwdWJsaWMgQVdTSVFDb250cmFjdFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lRQ29udHJhY3RTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBJUSAqL1xuICAgIHB1YmxpYyBBV1NJUUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSVFGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBJUSB0byBtYW5hZ2UgdGhlIHJvbGUgYXNzdW1lZCBieSBBV1MgSVEgZXhwZXJ0cy4gKi9cbiAgICBwdWJsaWMgQVdTSVFQZXJtaXNzaW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSVFQZXJtaXNzaW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1Mgc2VydmljZXMgYW5kIHJlc291cmNlcyByZXF1aXJlZCBmb3IgQVdTIEtNUyBjdXN0b20ga2V5IHN0b3JlcyAqL1xuICAgIHB1YmxpYyBBV1NLZXlNYW5hZ2VtZW50U2VydmljZUN1c3RvbUtleVN0b3Jlc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0tleU1hbmFnZW1lbnRTZXJ2aWNlQ3VzdG9tS2V5U3RvcmVzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIEFXUyBLTVMgdG8gc3luY2hyb25pemUgdGhlIHNoYXJlZCBwcm9wZXJ0aWVzIG9mIG11bHRpLVJlZ2lvbiBrZXlzLiAqL1xuICAgIHB1YmxpYyBBV1NLZXlNYW5hZ2VtZW50U2VydmljZU11bHRpUmVnaW9uS2V5c1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0tleU1hbmFnZW1lbnRTZXJ2aWNlTXVsdGlSZWdpb25LZXlzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2UgKEtNUykuICovXG4gICAgcHVibGljIEFXU0tleU1hbmFnZW1lbnRTZXJ2aWNlUG93ZXJVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0tleU1hbmFnZW1lbnRTZXJ2aWNlUG93ZXJVc2VyKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgY3Jvc3MgYWNjb3VudCBhY2Nlc3MgdG8gR2x1ZSByZXNvdXJjZXMgdmlhIExha2UgRm9ybWF0aW9uLiBBbHNvIGdyYW50cyByZWFkIGFjY2VzcyB0byBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcyBzdWNoIGFzIG9yZ2FuaXphdGlvbnMgYW5kIHJlc291cmNlIGFjY2VzcyBtYW5hZ2VyICovXG4gICAgcHVibGljIEFXU0xha2VGb3JtYXRpb25Dcm9zc0FjY291bnRNYW5hZ2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xha2VGb3JtYXRpb25Dcm9zc0FjY291bnRNYW5hZ2VyKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBBV1MgTGFrZSBGb3JtYXRpb24gYW5kIHJlbGF0ZWQgc2VydmljZXMsIHN1Y2ggYXMgQVdTIEdsdWUsIHRvIG1hbmFnZSBkYXRhIGxha2VzICovXG4gICAgcHVibGljIEFXU0xha2VGb3JtYXRpb25EYXRhQWRtaW4oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFrZUZvcm1hdGlvbkRhdGFBZG1pbik7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byBBV1MgTGFtYmRhIHNlcnZpY2UsIEFXUyBMYW1iZGEgY29uc29sZSBmZWF0dXJlcywgYW5kIG90aGVyIHJlbGF0ZWQgQVdTIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgTGFtYmRhIHNlcnZpY2UsIEFXUyBMYW1iZGEgY29uc29sZSBmZWF0dXJlcywgYW5kIG90aGVyIHJlbGF0ZWQgQVdTIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHdyaXRlIHBlcm1pc3Npb25zIHRvIENsb3VkV2F0Y2ggTG9ncyBhbmQgcmVhZC93cml0ZSBwZXJtaXNzaW9ucyB0byBkdXJhYmxlIGV4ZWN1dGlvbiBBUElzIHVzZWQgYnkgTGFtYmRhIGR1cmFibGUgZnVuY3Rpb25zICovXG4gICAgcHVibGljIEFXU0xhbWJkYUJhc2ljRHVyYWJsZUV4ZWN1dGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhQmFzaWNEdXJhYmxlRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHdyaXRlIHBlcm1pc3Npb25zIHRvIENsb3VkV2F0Y2ggTG9ncy4gKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGxpc3QgYW5kIHJlYWQgYWNjZXNzIHRvIER5bmFtb0RCIHN0cmVhbXMgYW5kIHdyaXRlIHBlcm1pc3Npb25zIHRvIENsb3VkV2F0Y2ggbG9ncy4gKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhRHluYW1vREJFeGVjdXRpb25Sb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYUR5bmFtb0RCRXhlY3V0aW9uUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG1pbmltdW0gcGVybWlzc2lvbnMgZm9yIGEgTGFtYmRhIGZ1bmN0aW9uIHRvIG1hbmFnZSBFTklzIChjcmVhdGUsIGRlc2NyaWJlLCBkZWxldGUpIHVzZWQgYnkgYSBWUEMtZW5hYmxlZCBMYW1iZGEgRnVuY3Rpb24uICovXG4gICAgcHVibGljIEFXU0xhbWJkYUVOSU1hbmFnZW1lbnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhRU5JTWFuYWdlbWVudEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIFB1dCwgR2V0IGFjY2VzcyB0byBTMyBhbmQgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBMb2dzLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFFeGVjdXRlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYUV4ZWN1dGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIGFjY2VzcyB0byBEeW5hbW9EQiBTdHJlYW1zLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFJbnZvY2F0aW9uRHluYW1vREIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhSW52b2NhdGlvbkR5bmFtb0RCKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbGlzdCBhbmQgcmVhZCBhY2Nlc3MgdG8gS2luZXNpcyBzdHJlYW1zIGFuZCB3cml0ZSBwZXJtaXNzaW9ucyB0byBDbG91ZFdhdGNoIGxvZ3MuICovXG4gICAgcHVibGljIEFXU0xhbWJkYUtpbmVzaXNFeGVjdXRpb25Sb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYUtpbmVzaXNFeGVjdXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHRvIGNyZWF0ZSBhbmQgYWRtaW5pc3RlciBFQzIgcmVzb3VyY2VzIG1hbmFnZWQgYnkgdGhlIExhbWJkYSBNYW5hZ2VkIEluc3RhbmNlcywgYW5kIGRlc2NyaXB0aXZlIHBlcm1pc3Npb25zLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFNYW5hZ2VkRUMyUmVzb3VyY2VPcGVyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFNYW5hZ2VkRUMyUmVzb3VyY2VPcGVyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIGFjY2VzcyBNU0sgQ2x1c3RlciB3aXRoaW4gYSBWUEMsIG1hbmFnZSBFTklzIChjcmVhdGUsIGRlc2NyaWJlLCBkZWxldGUpIGluIHRoZSBWUEMgYW5kIHdyaXRlIHBlcm1pc3Npb25zIHRvIENsb3VkV2F0Y2ggTG9ncy4gKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhTVNLRXhlY3V0aW9uUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFNU0tFeGVjdXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIExhbWJkYSBSZXBsaWNhdG9yIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyB0byByZXBsaWNhdGUgZnVuY3Rpb25zIGFjcm9zcyByZWdpb25zICovXG4gICAgcHVibGljIEFXU0xhbWJkYVJlcGxpY2F0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhUmVwbGljYXRvcik7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgcG9saWN5IGZvciBBV1MgTGFtYmRhIHNlcnZpY2Ugcm9sZS4gKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIExhbWJkYSB0byBkZXNjcmliZSBhbmQgdGVybWluYXRlIG1hbmFnZWQgaW5zdGFuY2VzIGZyb20gRUMyIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlY2VpdmUgbWVzc2FnZSwgZGVsZXRlIG1lc3NhZ2UsIGFuZCByZWFkIGF0dHJpYnV0ZSBhY2Nlc3MgdG8gU1FTIHF1ZXVlcywgYW5kIHdyaXRlIHBlcm1pc3Npb25zIHRvIENsb3VkV2F0Y2ggbG9ncy4gKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhU1FTUXVldWVFeGVjdXRpb25Sb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYVNRU1F1ZXVlRXhlY3V0aW9uUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG1pbmltdW0gcGVybWlzc2lvbnMgZm9yIGEgTGFtYmRhIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hpbGUgYWNjZXNzaW5nIGEgcmVzb3VyY2Ugd2l0aGluIGEgVlBDIC0gY3JlYXRlLCBkZXNjcmliZSwgZGVsZXRlIG5ldHdvcmsgaW50ZXJmYWNlcyBhbmQgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBMb2dzLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFWUENBY2Nlc3NFeGVjdXRpb25Sb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYVZQQ0FjY2Vzc0V4ZWN1dGlvblJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBhbGxvdyBhY2Nlc3MgdG8gdGhlIEFXUyBMaWNlbnNlIE1hbmFnZXIgQVBJIGFjdGlvbnMgcmVxdWlyZWQgdG8gY29uc3VtZSB1cG9uIGxpY2Vuc2VzIHRoYXQgdGhlIHVzZXIgaGFzIGVudGl0bGVtZW50cy4gKi9cbiAgICBwdWJsaWMgQVdTTGljZW5zZU1hbmFnZXJDb25zdW1wdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMaWNlbnNlTWFuYWdlckNvbnN1bXB0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBMaWNlbnNlIE1hbmFnZXIgTGludXggU3Vic2NyaXB0aW9ucyBTZXJ2aWNlIHRvIG1hbmFnZSByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0xpY2Vuc2VNYW5hZ2VyTGludXhTdWJzY3JpcHRpb25zU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGljZW5zZU1hbmFnZXJMaW51eFN1YnNjcmlwdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBMaWNlbnNlIE1hbmFnZXIgc2VydmljZSBtYXN0ZXIgYWNjb3VudCByb2xlIHBvbGljeSAqL1xuICAgIHB1YmxpYyBBV1NMaWNlbnNlTWFuYWdlck1hc3RlckFjY291bnRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xpY2Vuc2VNYW5hZ2VyTWFzdGVyQWNjb3VudFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgTGljZW5zZSBNYW5hZ2VyIHNlcnZpY2UgbWVtYmVyIGFjY291bnQgcm9sZSBwb2xpY3kgKi9cbiAgICBwdWJsaWMgQVdTTGljZW5zZU1hbmFnZXJNZW1iZXJBY2NvdW50Um9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMaWNlbnNlTWFuYWdlck1lbWJlckFjY291bnRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQVdTIExpY2Vuc2UgTWFuYWdlciBzZXJ2aWNlIGRlZmF1bHQgcm9sZSBwb2xpY3kgKi9cbiAgICBwdWJsaWMgQVdTTGljZW5zZU1hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMaWNlbnNlTWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBMaWNlbnNlIE1hbmFnZXIgVXNlciBTdWJzY3JpcHRpb25zIFNlcnZpY2UgdG8gbWFuYWdlIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTTGljZW5zZU1hbmFnZXJVc2VyU3Vic2NyaXB0aW9uc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xpY2Vuc2VNYW5hZ2VyVXNlclN1YnNjcmlwdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgTTIgdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU00yU2VydmljZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNMlNlcnZpY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIE1hbmFnZWQgU2VydmljZXMgdG8gcmVhZCB0aGUgdmFsdWVzIG9mIHRoZSB0YWdzIG9uIEFXUyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTTWFuYWdlZFNlcnZpY2VzQ29udGFjdHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYW5hZ2VkU2VydmljZXNDb250YWN0c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQVdTIE1hbmFnZWQgU2VydmljZXMgLSBwb2xpY3kgdG8gbWFuYWdlIGRldGVjdGl2ZSBjb250cm9scyBpbmZyYXN0cnVjdHVyZSAqL1xuICAgIHB1YmxpYyBBV1NNYW5hZ2VkU2VydmljZXNEZXRlY3RpdmVDb250cm9sc0NvbmZpZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hbmFnZWRTZXJ2aWNlc0RldGVjdGl2ZUNvbnRyb2xzQ29uZmlnU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgTWFuYWdlZCBTZXJ2aWNlcyBwb2xpY3kgdG8gZW5hYmxlIEFNUyBldmVudCBwcm9jZXNzb3IgZmVhdHVyZS4gKi9cbiAgICBwdWJsaWMgQVdTTWFuYWdlZFNlcnZpY2VzRXZlbnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFuYWdlZFNlcnZpY2VzRXZlbnRzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uJ3MgQVdTIE1hbmFnZWQgU2VydmljZSdzIFNlbGYgU2VydmljZSBSZXBvcnRpbmcgZmVhdHVyZSB0byByZWFkIEFXUyBPcmdhbml6YXRpb24gZGF0YSBvbiB5b3VyIGJlaGFsZiB0byBlbmFibGUgb3JnYW5pemF0aW9uIGxldmVsIGFnZ3JlZ2F0ZWQgcmVwb3J0aW5nICovXG4gICAgcHVibGljIEFXU01hbmFnZWRTZXJ2aWNlc1NlbGZTZXJ2aWNlUmVwb3J0aW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFuYWdlZFNlcnZpY2VzU2VsZlNlcnZpY2VSZXBvcnRpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgTWFuYWdlZCBTZXJ2aWNlcyB0byBtYW5hZ2UgZGVwbG95bWVudCB0b29sa2l0IG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NNYW5hZ2VkU2VydmljZXNEZXBsb3ltZW50VG9vbGtpdFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYW5hZ2VkU2VydmljZXNEZXBsb3ltZW50VG9vbGtpdFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGNvbmZpZ3VyZSBhbmQgY3VzdG9taXplIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlICovXG4gICAgcHVibGljIEFXU01hbmFnZW1lbnRDb25zb2xlQWRtaW5pc3RyYXRvckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYW5hZ2VtZW50Q29uc29sZUFkbWluaXN0cmF0b3JBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgYWNjZXNzIHRvIGVzc2VudGlhbCBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGZlYXR1cmVzIGFuZCB1c2VyIGV4cGVyaWVuY2UgKFVYKSBjYXBhYmlsaXRpZXMgZm9yIG5vbi1hZG1pbmlzdHJhdGl2ZSB1c2Vycy4gKi9cbiAgICBwdWJsaWMgQVdTTWFuYWdlbWVudENvbnNvbGVCYXNpY1VzZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFuYWdlbWVudENvbnNvbGVCYXNpY1VzZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIE1hcmtldHBsYWNlIHRvIGNvcHkgeW91ciBBbWF6b24gTWFjaGluZSBJbWFnZXMgKEFNSXMpIGluIG9yZGVyIHRvIGxpc3QgdGhlbSBvbiBBV1MgTWFya2V0cGxhY2UgKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VBbWlJbmdlc3Rpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VBbWlJbmdlc3Rpb24pO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIE1hcmtldHBsYWNlIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHNlbGxlciBkZXBsb3ltZW50IHBhcmFtZXRlcnMgZm9yIHRoZSBwcm9kdWN0cyB0aGF0IHlvdSBzdWJzY3JpYmUgdG8gb24gQVdTIE1hcmtldHBsYWNlLiAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZURlcGxveW1lbnRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZURlcGxveW1lbnRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIHN1YnNjcmliZSBhbmQgdW5zdWJzY3JpYmUgdG8gQVdTIE1hcmtldHBsYWNlIHNvZnR3YXJlLCBhbGxvd3MgdXNlcnMgdG8gbWFuYWdlIE1hcmtldHBsYWNlIHNvZnR3YXJlIGluc3RhbmNlcyBmcm9tIHRoZSBNYXJrZXRwbGFjZSAnWW91ciBTb2Z0d2FyZScgcGFnZSwgYW5kIHByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBFQzIuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIGFjY2VzcyB0byBBV1MgTWFya2V0cGxhY2UgRW50aXRsZW1lbnRzICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlR2V0RW50aXRsZW1lbnRzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlR2V0RW50aXRsZW1lbnRzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFXUyBNYXJrZXRwbGFjZSBmb3IgbGljZW5zZSBtYW5hZ2VtZW50LiAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZUxpY2Vuc2VNYW5hZ2VtZW50U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VMaWNlbnNlTWFuYWdlbWVudFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gc3Vic2NyaWJlIGFuZCB1bnN1YnNjcmliZSB0byBBV1MgTWFya2V0cGxhY2Ugc29mdHdhcmUgKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VNYW5hZ2VTdWJzY3JpcHRpb25zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlTWFuYWdlU3Vic2NyaXB0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBNYXJrZXRwbGFjZSBNZXRlcmluZy4gKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VNZXRlcmluZ0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VNZXRlcmluZ0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byByZWdpc3RlciBhIHJlc291cmNlIGFuZCB0cmFjayB1c2FnZSB0aHJvdWdoIEFXUyBNYXJrZXRwbGFjZSBNZXRlcmluZyBTZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZU1ldGVyaW5nUmVnaXN0ZXJVc2FnZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZU1ldGVyaW5nUmVnaXN0ZXJVc2FnZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBhZG1pbmlzdHJhdGl2ZSBhY3Rpb25zIGZvciBhbiBBV1MgTWFya2V0cGxhY2UgZVByb2N1cmVtZW50IGludGVncmF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZVByb2N1cmVtZW50U3lzdGVtQWRtaW5GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlUHJvY3VyZW1lbnRTeXN0ZW1BZG1pbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyBmb3IgQVdTIE1hcmtldHBsYWNlIHNlcnZpY2VzIHRvIHB1cmNoYXNlIG9yZGVyIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlUHVyY2hhc2VPcmRlcnNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZVB1cmNoYXNlT3JkZXJzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB0aGUgYWJpbGl0eSB0byByZXZpZXcgQVdTIE1hcmtldHBsYWNlIHN1YnNjcmlwdGlvbnMgKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFXUyBNYXJrZXRwbGFjZSBmb3IgUmVzYWxlIEF1dGhvcml6YXRpb24uICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlUmVzYWxlQXV0aG9yaXphdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlUmVzYWxlQXV0aG9yaXphdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIHNlbGxlciBvcGVyYXRpb25zIG9uIHRoZSBBV1MgTWFya2V0cGxhY2UgYW5kIG90aGVyIEFXUyBzZXJ2aWNlcyBzdWNoIGFzIEFNSSBtYW5hZ2VtZW50LiAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZVNlbGxlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VTZWxsZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgc2VsbGVycyBhY2Nlc3MgdG8gT2ZmZXJzIGFuZCBBZ3JlZW1lbnRzIG1hbmFnZW1lbnQgYWN0aXZpdGllcy4gKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VTZWxsZXJPZmZlck1hbmFnZW1lbnQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VTZWxsZXJPZmZlck1hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBzZWxsZXJzIGZ1bGwgYWNjZXNzIHRvIEFXUyBNYXJrZXRwbGFjZSBNYW5hZ2VtZW50IFByb2R1Y3RzIHBhZ2UgYW5kIG90aGVyIEFXUyBzZXJ2aWNlcyBzdWNoIGFzIEFNSSBtYW5hZ2VtZW50LiAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZVNlbGxlclByb2R1Y3RzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZVNlbGxlclByb2R1Y3RzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgc2VsbGVycyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBNYXJrZXRwbGFjZSBNYW5hZ2VtZW50IFByb2R1Y3RzIHBhZ2UuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlU2VsbGVyUHJvZHVjdHNSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZVNlbGxlclByb2R1Y3RzUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgTUNQIHNlcnZpY2UgYWN0aW9ucy4gVGhpcyBwb2xpY3kgZG9lcyBub3QgZ3JhbnQgYWNjZXNzIHRvIHRoZSBhY3Rpb25zIHRha2VuIGJ5IHRoZSBNQ1AsIG9ubHkgdGhlIE1DUCBhY3Rpb25zIHRoZW1zZWx2ZXMuICovXG4gICAgcHVibGljIEFXU01jcFNlcnZpY2VBY3Rpb25zRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNY3BTZXJ2aWNlQWN0aW9uc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgZGVmYXVsdCBwb2xpY3kgdGhhdCBlbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgTWVkaWFDb25uZWN0LiAqL1xuICAgIHB1YmxpYyBBV1NNZWRpYUNvbm5lY3RTZXJ2aWNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01lZGlhQ29ubmVjdFNlcnZpY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgTWVkaWFMaXZlIEFueXdoZXJlIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU01lZGlhTGl2ZUFueXdoZXJlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWVkaWFMaXZlQW55d2hlcmVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZSBhY2Nlc3MgdG8gQVdTIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgTWVkaWFUYWlsb3IgKi9cbiAgICBwdWJsaWMgQVdTTWVkaWFUYWlsb3JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNZWRpYVRhaWxvclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGFsbG93cyBBV1NNaWdyYXRpb25IdWJTZXJ2aWNlIHRvIGNhbGwgQVdTQXBwbGljYXRpb25EaXNjb3ZlcnlTZXJ2aWNlIG9uIGJlaGFsZiBvZiB0aGUgY3VzdG9tZXIuICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1YkRpc2NvdmVyeUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJEaXNjb3ZlcnlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIERhdGFiYXNlIE1pZ3JhdGlvbiBTZXJ2aWNlIHRvIGFzc3VtZSByb2xlIGluIGN1c3RvbWVyJ3MgYWNjb3VudCB0byBjYWxsIE1pZ3JhdGlvbiBIdWIgKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViRE1TQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1YkRNU0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIE1hbmFnZWQgcG9saWN5IHRvIHByb3ZpZGUgdGhlIGN1c3RvbWVyIGFjY2VzcyB0byB0aGUgTWlncmF0aW9uIEh1YiBTZXJ2aWNlICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1YkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGxpbWl0ZWQgYWNjZXNzIHRvIEFXUyBNaWdyYXRpb24gSHViLCBBV1MgQXBwbGljYXRpb24gRGlzY292ZXJ5IFNlcnZpY2UsIEFtYXpvbiBTaW1wbGUgU3RvcmFnZSBTZXJ2aWNlIGFuZCBBV1MgU2VjcmV0cyBNYW5hZ2VyLiBUaGlzIHBvbGljeSBhbHNvIGdyYW50cyBmdWxsIGFjY2VzcyB0byBBV1MgTWlncmF0aW9uIEh1YiBPcmNoZXN0cmF0b3Igc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViT3JjaGVzdHJhdG9yQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViT3JjaGVzdHJhdG9yQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBuZWVkcyB0byBiZSBhdHRhY2hlZCBmb3IgU0FQIGFuZCBNR04gbWlncmF0ZWQgaW5zdGFuY2UgZm9yIG91ciBzZXJ2aWNlIHRvIG9yY2hlc3RyYXRlIGluc3RhbmNlcyBieSBkb3dubG9hZGluZyBzY3JpcHRzIGZyb20gUzMgYW5kIHRvIGZldGNoIHNlY3JldCB2YWx1ZXMgaW5zaWRlIEVDMiBpbnN0YW5jZS4gKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViT3JjaGVzdHJhdG9ySW5zdGFuY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1Yk9yY2hlc3RyYXRvckluc3RhbmNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGxpbWl0ZWQgYWNjZXNzIHRvIEFtYXpvbiBTaW1wbGUgU3RvcmFnZSBTZXJ2aWNlLCBBV1MgU2VjcmV0cyBNYW5hZ2VyIGFuZCBQbHVnaW4gcmVsYXRlZCBhY3Rpb25zIGZvciBBV1MgTWlncmF0aW9uIEh1YiBPcmNoZXN0cmF0b3IuICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1Yk9yY2hlc3RyYXRvclBsdWdpbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJPcmNoZXN0cmF0b3JQbHVnaW4pO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBuZWNlc3NhcnkgZm9yIE1pZ3JhdGlvbiBIdWIgT3JjaGVzdHJhdG9yIHRvIG1pZ3JhdGUgYW5kIG1vZGVybml6ZSB5b3VyIG9uLXByZW1pc2VzIHdvcmtsb2FkcyAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJPcmNoZXN0cmF0b3JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJPcmNoZXN0cmF0b3JTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byBBV1MgTWlncmF0aW9uIEh1YiBSZWZhY3RvciBTcGFjZXMgYW5kIG90aGVyIEFXUyByZWxhdGVkIHNlcnZpY2VzIGV4Y2VwdCBBV1MgVHJhbnNpdCBHYXRld2F5IGFuZCBFQzIgc2VjdXJpdHkgZ3JvdXBzIG5vdCByZXF1aXJlZCB3aGVuIHVzaW5nIGVudmlyb25tZW50cyB3aXRob3V0IGEgbmV0d29yayBicmlkZ2UuIFRoaXMgcG9saWN5IGFsc28gZXhjbHVkZXMgcGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIEFXUyBMYW1iZGEgYW5kIEFXUyBSZXNvdXJjZSBBY2Nlc3MgTWFuYWdlciBhcyB0aGV5IGNhbiBiZSBzY29wZWQgZG93biBiYXNlZCBvbiB0YWdzLiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJSZWZhY3RvclNwYWNlc0Vudmlyb25tZW50c1dpdGhvdXRCcmlkZ2VzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJSZWZhY3RvclNwYWNlc0Vudmlyb25tZW50c1dpdGhvdXRCcmlkZ2VzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFVzZSBpbiB0aGUgSUFNIHNlcnZpY2Ugcm9sZSBwYXNzZWQgdG8gdGhlIFNTTSBBdXRvbWF0aW9uIGRvY3VtZW50IEFXU1JlZmFjdG9yU3BhY2VzLUNyZWF0ZVJlc291cmNlcyB0byBncmFudCBwZXJtaXNzaW9ucyByZXF1aXJlZCB0byBydW4gdGhlIGF1dG9tYXRpb24uIFRoZSBwb2xpY3kgZ3JhbnRzIHJlYWQvd3JpdGUgYWNjZXNzIHRvIEVDMiB0YWdzIGluIG9yZGVyIHRvIHRyYWNrIGF1dG9tYXRpb24gcHJvZ3Jlc3MuIFdoZW4gdGhlIFJlZmFjdG9yIFNwYWNlcyBlbnZpcm9ubWVudCdzIG5ldHdvcmsgYnJpZGdlIGlzIGVuYWJsZWQsIHRoZSBhdXRvbWF0aW9uIGFsc28gYWRkcyB0aGUgZW52aXJvbm1lbnQncyBzZWN1cml0eSBncm91cCB0byB0aGUgRUMyIGluc3RhbmNlIHRvIHBlcm1pdCB0cmFmZmljIGZyb20gb3RoZXIgUmVmYWN0b3IgU3BhY2VzIHNlcnZpY2VzIGluIHRoZSBlbnZpcm9ubWVudC4gVGhlIHBvbGljeSBhbHNvIGdyYW50cyBhY2Nlc3MgdG8gdGhlIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlJ3MgcG9zdCBsYXVuY2ggYWN0aW9ucyBTU00gcGFyYW1ldGVycy4gKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViUmVmYWN0b3JTcGFjZXNTU01BdXRvbWF0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1YlJlZmFjdG9yU3BhY2VzU1NNQXV0b21hdGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byBBV1MgTWlncmF0aW9uSHViIFJlZmFjdG9yIFNwYWNlcywgQVdTIE1pZ3JhdGlvbkh1YiBSZWZhY3RvciBTcGFjZXMgY29uc29sZSBmZWF0dXJlcyBhbmQgb3RoZXIgcmVsYXRlZCBBV1Mgc2VydmljZXMgZXhjZXB0IHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciBBV1MgTGFtYmRhIGFuZCBBV1MgUmVzb3VyY2UgQWNjZXNzIE1hbmFnZXIgYXMgdGhleSBjYW4gYmUgc2NvcGVkIGRvd24gYmFzZWQgb24gdGFncy4gKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViUmVmYWN0b3JTcGFjZXNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1YlJlZmFjdG9yU3BhY2VzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIG1hbmFnZWQgb3IgdXNlZCBieSBBV1MgTWlncmF0aW9uIEh1YiBSZWZhY3RvciBTcGFjZXMuICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1YlJlZmFjdG9yU3BhY2VzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViUmVmYWN0b3JTcGFjZXNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgU2VydmVyIE1pZ3JhdGlvbiBTZXJ2aWNlIHRvIGFzc3VtZSByb2xlIGluIGN1c3RvbWVyJ3MgYWNjb3VudCB0byBjYWxsIE1pZ3JhdGlvbiBIdWIgKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViU01TQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1YlNNU0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhbGxvdyBjb21tdW5pY2F0aW9uIHdpdGggdGhlIEFXUyBNaWdyYXRpb24gSHViIFN0cmF0ZWd5IFJlY29tbWVuZGF0aW9ucyBzZXJ2aWNlLCByZWFkL3dyaXRlIGFjY2VzcyB0byBTMyBidWNrZXRzIHJlbGF0ZWQgdG8gdGhlIHNlcnZpY2UsIEFtYXpvbiBBUEkgR2F0ZXdheSBhY2Nlc3MgdG8gdXBsb2FkIGxvZ3MgYW5kIG1ldHJpY3MgdG8gQVdTLCBBV1MgU2VjcmV0cyBNYW5hZ2VyIGFjY2VzcyB0byBmZXRjaCBjcmVkZW50aWFscywgYW5kIGFueSByZWxhdGVkIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJTdHJhdGVneUNvbGxlY3RvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJTdHJhdGVneUNvbGxlY3Rvcik7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIE1pZ3JhdGlvbiBIdWIgU3RyYXRlZ3kgUmVjb21tZW5kYXRpb25zIHNlcnZpY2UgYW5kIGFjY2VzcyB0byByZWxhdGVkIEFXUyBzZXJ2aWNlcyB0aHJvdWdoIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJTdHJhdGVneUNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1YlN0cmF0ZWd5Q29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGUgYWNjZXNzIHRvIEFXUyBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFXUyBNaWdyYXRpb24gSHViIFN0cmF0ZWd5IFJlY29tbWVuZGF0aW9ucyBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJTdHJhdGVneVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1YlN0cmF0ZWd5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gQW1hem9uIE1TSyBSZXBsaWNhdG9yIHRvIHJlcGxpY2F0ZSBkYXRhIGJldHdlZW4gTVNLIENsdXN0ZXJzLiAqL1xuICAgIHB1YmxpYyBBV1NNU0tSZXBsaWNhdG9yRXhlY3V0aW9uUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNU0tSZXBsaWNhdG9yRXhlY3V0aW9uUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIG1hbmFnZSBWUEMgcmVzb3VyY2VzIGZvciB0aGUgY29uZmlndXJhdGlvbiBhbmQgbWFuYWdlbWVudCBvZiBOQVQgR2F0ZXdheXMuICovXG4gICAgcHVibGljIEFXU05BVEdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NOQVRHYXRld2F5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgdG8gQVdTIE5ldHdvcmsgRmlyZXdhbGwgc2VydmljZSwgaW5jbHVkaW5nIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSwgY29uZmlndXJlLCBtYW5hZ2UsIGFuZCBkZWxldGUgZmlyZXdhbGwgcmVzb3VyY2VzLCBwb2xpY2llcywgYW5kIHJ1bGUgZ3JvdXBzLiBBZGRpdGlvbmFsbHkgaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gbW9kaWZ5IFZQQyBlbmRwb2ludHMsIFMzIGJ1Y2tldCBwb2xpY2llcywgQ2xvdWRXYXRjaCBMb2dzIGNvbmZpZ3VyYXRpb25zLCBhbmQgY3JlYXRlIHNlcnZpY2UtbGlua2VkIHJvbGVzIGZvciBOZXR3b3JrIEZpcmV3YWxsIGFuZCBsb2cgZGVsaXZlcnkgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQVdTTmV0d29ya0ZpcmV3YWxsRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NOZXR3b3JrRmlyZXdhbGxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgTmV0d29yayBGaXJld2FsbCByZXNvdXJjZXMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLCBDTEksIGFuZCBTREtzLiBUaGlzIHBvbGljeSBhbGxvd3MgdXNlcnMgdG8gdmlldyBhbmQgbW9uaXRvciBmaXJld2FsbCBjb25maWd1cmF0aW9ucywgcG9saWNpZXMsIHJ1bGUgZ3JvdXBzLCBhbmQgYXNzb2NpYXRlZCByZXNvdXJjZXMsIHdpdGhvdXQgdGhlIGFiaWxpdHkgdG8gbWFrZSBjaGFuZ2VzLiAqL1xuICAgIHB1YmxpYyBBV1NOZXR3b3JrRmlyZXdhbGxSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NOZXR3b3JrRmlyZXdhbGxSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IEFXU05ldHdvcmtGaXJld2FsbCB0byBjcmVhdGUgYW5kIG1hbmFnZSBuZWNlc3NhcnkgcmVzb3VyY2VzIGZvciB5b3VyIEZpcmV3YWxscy4gKi9cbiAgICBwdWJsaWMgQVdTTmV0d29ya0ZpcmV3YWxsU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTmV0d29ya0ZpcmV3YWxsU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBOZXR3b3JrTWFuYWdlciB0byBhY2Nlc3MgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB5b3VyIENvcmUgTmV0d29yayAqL1xuICAgIHB1YmxpYyBBV1NOZXR3b3JrTWFuYWdlckNsb3VkV0FOU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTmV0d29ya01hbmFnZXJDbG91ZFdBTlNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIE5ldHdvcmtNYW5hZ2VyIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTTmV0d29ya01hbmFnZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU05ldHdvcmtNYW5hZ2VyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIE5ldHdvcmtNYW5hZ2VyIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTTmV0d29ya01hbmFnZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NOZXR3b3JrTWFuYWdlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgTmV0d29ya01hbmFnZXIgdG8gYWNjZXNzIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggeW91ciBHbG9iYWwgTmV0d29ya3MgKi9cbiAgICBwdWJsaWMgQVdTTmV0d29ya01hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NOZXR3b3JrTWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZS1saW5rZWQgcm9sZSBwZXJtaXNzaW9ucyBmb3IgQ2xvdWRXYXRjaCBMb2dzIGNlbnRyYWxpemF0aW9uICovXG4gICAgcHVibGljIEFXU09ic2VydmFiaWxpdHlBZG1pbkxvZ3NDZW50cmFsaXphdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU09ic2VydmFiaWxpdHlBZG1pbkxvZ3NDZW50cmFsaXphdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG1hbmFnZSBBV1MgQ29uZmlnIENvbmZpZ3VyYXRpb24gUmVjb3JkZXIsIG1hbmFnZSBBV1MgQ29uZmlnIENvbmZpZ3VyYXRpb24gQWdncmVnYXRvciwgY3JlYXRlIEFXUyBDb25maWcgU2VydmljZSBMaW5rZWQgUm9sZSBmb3IgQ29uZmlndXJhdGlvbiBSZWNvcmRlciBmdW5jdGlvbmFsaXR5LCBjb25zdW1lIHJlY29yZGVyIGNvbmZpZ3VyYXRpb24gZGF0YSwgYW5kIHJlYWQgQVdTIE9yZ2FuaXphdGlvbnMgZGF0YSBmb3Igb3JnYW5pemF0aW9uYWwgZmVhdHVyZXMuICovXG4gICAgcHVibGljIEFXU09ic2VydmFiaWxpdHlBZG1pblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU09ic2VydmFiaWxpdHlBZG1pblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG1hbmFnZSBBV1MgQ29uZmlnIHJlY29yZGVyIHJlc291cmNlIGFuZCB0ZWxlbWV0cnkgc2V0dGluZ3Mgb24gQVdTIHJlc291cmNlcyBpbmNsdWRpbmcgbG9ncywgbWV0cmljcy4gKi9cbiAgICBwdWJsaWMgQVdTT2JzZXJ2YWJpbGl0eUFkbWluVGVsZW1ldHJ5RW5hYmxlbWVudFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU09ic2VydmFiaWxpdHlBZG1pblRlbGVtZXRyeUVuYWJsZW1lbnRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBPcmdhbml6YXRpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NPcmdhbml6YXRpb25zRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NPcmdhbml6YXRpb25zRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIE9yZ2FuaXphdGlvbnMuICovXG4gICAgcHVibGljIEFXU09yZ2FuaXphdGlvbnNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NPcmdhbml6YXRpb25zUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBIHBvbGljeSB0byBhbGxvdyBBV1MgT3JnYW5pemF0aW9ucyB0byBzaGFyZSB0cnVzdCB3aXRoIG90aGVyIGFwcHJvdmVkIEFXUyBTZXJ2aWNlcyBmb3IgdGhlIHB1cnBvc2Ugb2Ygc2ltcGxpZnlpbmcgY3VzdG9tZXIgY29uZmlndXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTT3JnYW5pemF0aW9uc1NlcnZpY2VUcnVzdFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NPcmdhbml6YXRpb25zU2VydmljZVRydXN0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRoYXQgYWxsb3cgeW91IHRvIGluc3RhbGwgYW4gT3V0cG9zdCBzZXJ2ZXIgb24geW91ciBvbi1wcmVtaXNlcyBuZXR3b3JrLiAqL1xuICAgIHB1YmxpYyBBV1NPdXRwb3N0c0F1dGhvcml6ZVNlcnZlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NPdXRwb3N0c0F1dGhvcml6ZVNlcnZlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UgTGlua2VkIFJvbGUgcG9saWN5IHRvIGVuYWJsZSBhY2Nlc3MgdG8gQVdTIHJlc291cmNlcyBtYW5hZ2VkIGJ5IEFXUyBPdXRwb3N0cyAqL1xuICAgIHB1YmxpYyBBV1NPdXRwb3N0c1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU091dHBvc3RzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIElvVCBzb2Z0d2FyZSBvbiBhbiBBV1MgUGFub3JhbWEgQXBwbGlhbmNlIHRvIHVwbG9hZCBsb2dzIHRvIEFtYXpvbiBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NQYW5vcmFtYUFwcGxpYW5jZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFub3JhbWFBcHBsaWFuY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFuIEFXUyBQYW5vcmFtYSBBcHBsaWFuY2UgdG8gdXBsb2FkIGxvZ3MgdG8gQW1hem9uIENsb3VkV2F0Y2gsIGFuZCB0byBnZXQgb2JqZWN0cyBmcm9tIEFtYXpvbiBTMyBhY2Nlc3MgcG9pbnRzIGNyZWF0ZWQgZm9yIHVzZSB3aXRoIEFXUyBQYW5vcmFtYS4gKi9cbiAgICBwdWJsaWMgQVdTUGFub3JhbWFBcHBsaWFuY2VTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQYW5vcmFtYUFwcGxpYW5jZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFBhbm9yYW1hICovXG4gICAgcHVibGljIEFXU1Bhbm9yYW1hRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQYW5vcmFtYUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYW4gQVdTIExhbWJkYSBmdW5jdGlvbiBvbiBhbiBBV1MgUGFub3JhbWEgQXBwbGlhbmNlIHRvIG1hbmFnZSByZXNvdXJjZXMgaW4gUGFub3JhbWEsIHVwbG9hZCBsb2dzIGFuZCBtZXRyaWNzIHRvIEFtYXpvbiBDbG91ZFdhdGNoLCBhbmQgdG8gbWFuYWdlIG9iamVjdHMgaW4gYnVja2V0cyBjcmVhdGVkIGZvciB1c2Ugd2l0aCBQYW5vcmFtYS4gKi9cbiAgICBwdWJsaWMgQVdTUGFub3JhbWFHcmVlbmdyYXNzR3JvdXBSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Bhbm9yYW1hR3JlZW5ncmFzc0dyb3VwUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gU2FnZU1ha2VyIHRvIG1hbmFnZSBvYmplY3RzIGluIGJ1Y2tldHMgY3JlYXRlZCBmb3IgdXNlIHdpdGggQVdTIFBhbm9yYW1hLiAqL1xuICAgIHB1YmxpYyBBV1NQYW5vcmFtYVNhZ2VNYWtlclJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFub3JhbWFTYWdlTWFrZXJSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBQYW5vcmFtYSB0byBtYW5hZ2UgcmVzb3VyY2VzIGluIEFXUyBJb1QsIEFXUyBTZWNyZXRzIE1hbmFnZXIgYW5kIEFXUyBQYW5vcmFtYS4gKi9cbiAgICBwdWJsaWMgQVdTUGFub3JhbWFTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQYW5vcmFtYVNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBQYW5vcmFtYSB0byBtYW5hZ2UgcmVzb3VyY2VzIGluIEFtYXpvbiBTMywgQVdTIElvVCwgQVdTIElvVCBHcmVlbkdyYXNzLCBBV1MgTGFtYmRhLCBBbWF6b24gU2FnZU1ha2VyLCBhbmQgQW1hem9uIENsb3VkV2F0Y2ggTG9ncywgYW5kIHRvIHBhc3Mgc2VydmljZSByb2xlcyB0byBBV1MgSW9ULCBBV1MgSW9UIEdyZWVuR3Jhc3MsIGFuZCBBbWF6b24gU2FnZU1ha2VyLiAqL1xuICAgIHB1YmxpYyBBV1NQYW5vcmFtYVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Bhbm9yYW1hU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBuZWNlc3NhcnkgYWNjZXNzIGZvciBjaGFubmVsIGhhbmRzaGFrZSBhcHByb3ZhbCBtYW5hZ2VtZW50IGFjdGl2aXRpZXMuICovXG4gICAgcHVibGljIEFXU1BhcnRuZXJDZW50cmFsQ2hhbm5lbEhhbmRzaGFrZUFwcHJvdmFsTWFuYWdlbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQYXJ0bmVyQ2VudHJhbENoYW5uZWxIYW5kc2hha2VBcHByb3ZhbE1hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBuZWNlc3NhcnkgYWNjZXNzIGZvciBjaGFubmVsIG1hbmFnZW1lbnQgYWN0aXZpdGllcy4gKi9cbiAgICBwdWJsaWMgQVdTUGFydG5lckNlbnRyYWxDaGFubmVsTWFuYWdlbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQYXJ0bmVyQ2VudHJhbENoYW5uZWxNYW5hZ2VtZW50KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFBhcnRuZXIgQ2VudHJhbCBhbmQgcmVsYXRlZCBBV1MgU2VydmljZXMuICovXG4gICAgcHVibGljIEFXU1BhcnRuZXJDZW50cmFsRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQYXJ0bmVyQ2VudHJhbEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBuZWNlc3NhcnkgYWNjZXNzIGZvciBtYXJrZXRpbmcgYWN0aXZpdGllcy4gKi9cbiAgICBwdWJsaWMgQVdTUGFydG5lckNlbnRyYWxNYXJrZXRpbmdNYW5hZ2VtZW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BhcnRuZXJDZW50cmFsTWFya2V0aW5nTWFuYWdlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG5lY2Vzc2FyeSBhY2Nlc3MgZm9yIG9wcG9ydHVuaXR5IG1hbmFnZW1lbnQgYWN0aXZpdGllcy4gKi9cbiAgICBwdWJsaWMgQVdTUGFydG5lckNlbnRyYWxPcHBvcnR1bml0eU1hbmFnZW1lbnQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lckNlbnRyYWxPcHBvcnR1bml0eU1hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBuZWNlc3NhcnkgYWNjZXNzIGZvciBkZXZlbG9wZXIgdGVzdGluZyBpbiB0aGUgU2FuZGJveCBjYXRhbG9nLiAqL1xuICAgIHB1YmxpYyBBV1NQYXJ0bmVyQ2VudHJhbFNhbmRib3hGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BhcnRuZXJDZW50cmFsU2FuZGJveEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIFJlc291cmNlU25hcHNob3RKb2IgdG8gcmVhZCBhIHJlc291cmNlIGFuZCBzbmFwc2hvdCBpdCBpbiB0aGUgdGFyZ2V0IGVuZ2FnZW1lbnQuICovXG4gICAgcHVibGljIEFXU1BhcnRuZXJDZW50cmFsU2VsbGluZ1Jlc291cmNlU25hcHNob3RKb2JFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BhcnRuZXJDZW50cmFsU2VsbGluZ1Jlc291cmNlU25hcHNob3RKb2JFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgY2FuIGJlIHVzZWQgdG8gZ3JhbnQgcmVhZC1vbmx5IGFjY2VzcyB0byBBUElzIHRoYXQgY2FuIHJlYWQgc2VydmljZSBtZXRhZGF0YSBmb3Igc2VydmljZXMgaW4geW91ciBBV1MgYWNjb3VudC4gWW91IGNhbiB1c2UgdGhpcyBwb2xpY3kgdG8gcHJvdmlkZSB5b3VyIHBhcnRuZXJzIGluIHRoZSBQYXJ0bmVyLUxlZCBTdXBwb3J0IFByb2dyYW0gd2l0aCBhY2Nlc3MgdG8gdGhlIHNlcnZpY2VzIHNwZWNpZmllZCBpbiB0aGUgcGVybWlzc2lvbnMgZGV0YWlscyBzZWN0aW9uIGJlbG93LiAqL1xuICAgIHB1YmxpYyBBV1NQYXJ0bmVyTGVkU3VwcG9ydFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BhcnRuZXJMZWRTdXBwb3J0UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbiB0byBBV1MgUENTIGNvbXB1dGUgbm9kZXMgdG8gY29ubmVjdCB0byBBV1MgUENTIGNsdXN0ZXJzLiAqL1xuICAgIHB1YmxpYyBBV1NQQ1NDb21wdXRlTm9kZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQQ1NDb21wdXRlTm9kZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBQQ1MgdG8gbWFuYWdlIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTUENTU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUENTU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgUHJpY2UgTGlzdCBTZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NQcmljZUxpc3RTZXJ2aWNlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcmljZUxpc3RTZXJ2aWNlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGF1ZGl0b3IgYWNjZXNzIHRvIEFXUyBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSAqL1xuICAgIHB1YmxpYyBBV1NQcml2YXRlQ0FBdWRpdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ByaXZhdGVDQUF1ZGl0b3IpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZXNzZW50aWFsIHBlcm1pc3Npb25zIGZvciB0aGUgQVdTIFByaXZhdGUgQ0EgQ29ubmVjdG9yIGZvciBLdWJlcm5ldGVzLiAqL1xuICAgIHB1YmxpYyBBV1NQcml2YXRlQ0FDb25uZWN0b3JGb3JLdWJlcm5ldGVzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ByaXZhdGVDQUNvbm5lY3RvckZvckt1YmVybmV0ZXNQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKi9cbiAgICBwdWJsaWMgQVdTUHJpdmF0ZUNBRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcml2YXRlQ0FGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcHJpdmlsZWdlZCBjZXJ0aWZpY2F0ZSB1c2VyIGFjY2VzcyB0byBBV1MgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKi9cbiAgICBwdWJsaWMgQVdTUHJpdmF0ZUNBUHJpdmlsZWdlZFVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJpdmF0ZUNBUHJpdmlsZWdlZFVzZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSAqL1xuICAgIHB1YmxpYyBBV1NQcml2YXRlQ0FSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcml2YXRlQ0FSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGNlcnRpZmljYXRlIHVzZXIgYWNjZXNzIHRvIEFXUyBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSAqL1xuICAgIHB1YmxpYyBBV1NQcml2YXRlQ0FVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ByaXZhdGVDQVVzZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgYWRtaW5pc3RyYXRpdmUgYWN0aW9ucyBmb3IgYW4gQVdTIFByaXZhdGUgTWFya2V0cGxhY2UuICovXG4gICAgcHVibGljIEFXU1ByaXZhdGVNYXJrZXRwbGFjZUFkbWluRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcml2YXRlTWFya2V0cGxhY2VBZG1pbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gY3JlYXRpbmcgcmVxdWVzdHMgaW4gYW4gQVdTIFByaXZhdGUgTWFya2V0cGxhY2UuICovXG4gICAgcHVibGljIEFXU1ByaXZhdGVNYXJrZXRwbGFjZVJlcXVlc3RzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ByaXZhdGVNYXJrZXRwbGFjZVJlcXVlc3RzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBQcml2YXRlIE5ldHdvcmtzIFNlcnZpY2UgdG8gbWFuYWdlIHJlc291cmNlcyBvbiBiZWhhbGYgb2YgdGhlIGN1c3RvbWVyLiAqL1xuICAgIHB1YmxpYyBBV1NQcml2YXRlTmV0d29ya3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcml2YXRlTmV0d29ya3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBlcm1pc3Npb25zIENvZGVCdWlsZCBuZWVkcyB0byBydW4gYSBidWlsZCBmb3IgQVdTIFByb3RvbiBDb2RlQnVpbGQgUHJvdmlzaW9uaW5nLiAqL1xuICAgIHB1YmxpYyBBV1NQcm90b25Db2RlQnVpbGRQcm92aXNpb25pbmdCYXNpY0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcm90b25Db2RlQnVpbGRQcm92aXNpb25pbmdCYXNpY0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgUHJvdG9uIHRvIG1hbmFnZSBQcm90b24gcmVzb3VyY2UgcHJvdmlzaW9uaW5nIHVzaW5nIENvZGVCdWlsZCBhbmQgb3RoZXIgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NQcm90b25Db2RlQnVpbGRQcm92aXNpb25pbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcm90b25Db2RlQnVpbGRQcm92aXNpb25pbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgQVdTIFByb3RvbiBBUElzIGFuZCBNYW5hZ2VtZW50IENvbnNvbGUsIGJ1dCBkb2VzIG5vdCBhbGxvdyBhZG1pbmlzdHJhdGlvbiBvZiBQcm90b24gdGVtcGxhdGVzIG9yIGVudmlyb25tZW50cy4gKi9cbiAgICBwdWJsaWMgQVdTUHJvdG9uRGV2ZWxvcGVyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Byb3RvbkRldmVsb3BlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgUHJvdG9uIEFQSXMgYW5kIE1hbmFnZW1lbnQgQ29uc29sZS4gSW4gYWRkaXRpb24gdG8gdGhlc2UgcGVybWlzc2lvbnMsIGFjY2VzcyB0byBBbWF6b24gUzMgaXMgYWxzbyBuZWVkZWQgdG8gcmVnaXN0ZXIgdGVtcGxhdGUgYnVuZGxlcyBmcm9tIHlvdXIgUzMgYnVja2V0cywgYXMgd2VsbCBhcyBhY2Nlc3MgdG8gQW1hem9uIElBTSB0byBjcmVhdGUgYW5kIG1hbmFnZSB0aGUgc2VydmljZSByb2xlcyBmb3IgUHJvdG9uLiAqL1xuICAgIHB1YmxpYyBBV1NQcm90b25GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Byb3RvbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBBV1MgUHJvdG9uIEFQSXMgYW5kIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTUHJvdG9uUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJvdG9uUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgd2hpY2ggYWxsb3dzIEFXUyBQcm90b24gdG8gc3luYyB5b3VyIHNlcnZpY2UsIGVudmlyb25tZW50IGFuZCBjb21wb25lbnQgZGVmaW5pdGlvbnMgZnJvbSB5b3VyIGdpdCByZXBvc2l0b3J5IHRvIEFXUyBQcm90b24uICovXG4gICAgcHVibGljIEFXU1Byb3RvblNlcnZpY2VHaXRTeW5jU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJvdG9uU2VydmljZUdpdFN5bmNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB3aGljaCBhbGxvd3MgQVdTIFByb3RvbiB0byBzeW5jIHlvdXIgZ2l0IHJlcG9zaXRvcnkgY29udGVudHMgdG8gUHJvdG9uIG9yIHN5bmMgUHJvdG9uIGNvbnRlbnRzIHRvIHlvdXIgZ2l0IHJlcG9zaXRvcmllcy4gKi9cbiAgICBwdWJsaWMgQVdTUHJvdG9uU3luY1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Byb3RvblN5bmNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byB2aWV3IGFuZCBtb2RpZnkgcHVyY2hhc2Ugb3JkZXJzIG9uIGJpbGxpbmcgY29uc29sZSAqL1xuICAgIHB1YmxpYyBBV1NQdXJjaGFzZU9yZGVyc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1B1cmNoYXNlT3JkZXJzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgQVdTUXVpY2tTZXR1cENGR0NQYWNrc1Blcm1pc3Npb25zQm91bmRhcnkgcG9saWN5IGRlZmluZXMgdGhlIGxpc3Qgb2YgcGVybWlzc2lvbnMgdGhhdCBhcmUgcGVybWl0dGVkIGluIGFuIElBTSByb2xlIGNyZWF0ZWQgYnkgUXVpY2sgU2V0dXAuIFF1aWNrIFNldHVwIHVzZXMgYSByb2xlIGNyZWF0ZWQgd2l0aCB0aGlzIHBvbGljeSB0byBkZXBsb3kgQVdTIENvbmZpZyBjb25mb3JtYW5jZSBwYWNrcy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cENGR0NQYWNrc1Blcm1pc3Npb25zQm91bmRhcnkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cENGR0NQYWNrc1Blcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgQVdTIFN5c3RlbXMgTWFuYWdlciBRdWljayBTZXR1cCB0byBkZXBsb3kgbXVsdGlwbGUgY29uZmlndXJhdGlvbiB0eXBlcy4gVGhlc2UgY29uZmlndXJhdGlvbiB0eXBlcyBjcmVhdGUgSUFNIHJvbGVzIGFuZCBhdXRvbWF0aW9ucyB0aGF0IGNvbmZpZ3VyZSBmcmVxdWVudGx5IHVzZWQgQW1hem9uIFdlYiBTZXJ2aWNlcyBzZXJ2aWNlcyBhbmQgZmVhdHVyZXMgd2l0aCByZWNvbW1lbmRlZCBiZXN0IHByYWN0aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cERlcGxveW1lbnRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBEZXBsb3ltZW50Um9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBBV1NRdWlja1NldHVwRGV2T3BzR3VydVBlcm1pc3Npb25zQm91bmRhcnkgcG9saWN5IGRlZmluZXMgdGhlIGxpc3Qgb2YgcGVybWlzc2lvbnMgdGhhdCBhcmUgcGVybWl0dGVkIGluIGFuIElBTSByb2xlIGNyZWF0ZWQgYnkgUXVpY2sgU2V0dXAuIFF1aWNrIFNldHVwIHVzZXMgYSByb2xlIGNyZWF0ZWQgd2l0aCB0aGlzIHBvbGljeSB0byBlbmFibGUgYW5kIGNvbmZpZ3VyZSBBbWF6b24gRGV2T3BzIEd1cnUuIFRoaXMgcG9saWN5IGFsc28gcHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gZW5hYmxlIFN5c3RlbXMgTWFuYWdlciBFeHBsb3Jlci4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cERldk9wc0d1cnVQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBEZXZPcHNHdXJ1UGVybWlzc2lvbnNCb3VuZGFyeSk7XG4gICAgfVxuXG4gICAgLyoqIFF1aWNrU2V0dXAgY3JlYXRlcyBJQU0gcm9sZXMgd2hpY2ggZW5hYmxlIGl0IHRvIGNvbmZpZ3VyZSB0aGUgU3lzdGVtcyBNYW5hZ2VyIERpc3RyaWJ1dG9yIGZlYXR1cmUgb24geW91ciBiZWhhbGYsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgc3VjaCByb2xlcyB0byBkZWZpbmUgdGhlIGJvdW5kYXJ5IG9mIHRoZWlyIHBlcm1pc3Npb25zLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwRGlzdHJpYnV0b3JQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBEaXN0cmlidXRvclBlcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBTeXN0ZW1zIE1hbmFnZXIgdG8gcnVuIHRoZSBBV1NRdWlja1NldHVwVHlwZS1FbmFibGVBUkVYIEF1dG9tYXRpb24gcnVuYm9vaywgd2hpY2ggZW5hYmxlcyBBV1MgUmVzb3VyY2UgRXhwbG9yZXIgZm9yIHVzZSB3aXRoIFN5c3RlbXMgTWFuYWdlci4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cEVuYWJsZUFSRVhFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cEVuYWJsZUFSRVhFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBwcmluY2lwYWxzIHRvIHJ1biB0aGUgQVdTUXVpY2tTZXR1cFR5cGUtRW5hYmxlREhNQyBBdXRvbWF0aW9uIHJ1bmJvb2ssIHdoaWNoIGVuYWJsZXMgRGVmYXVsdCBIb3N0IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cEVuYWJsZURITUNFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cEVuYWJsZURITUNFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgUXVpY2sgU2V0dXAgdG8gZGVwbG95IHRoZSBjb25maWd1cmF0aW9uIHR5cGUgcmVxdWlyZWQgdG8gc2V0IHVwIGp1c3QtaW4tdGltZSBub2RlIGFjY2Vzcy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cEpJVE5BRGVwbG95bWVudFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cEpJVE5BRGVwbG95bWVudFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgYWRtaW5pc3RyYXRpdmUgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBTeXN0ZW1zIE1hbmFnZXIgdG8gY3JlYXRlIGEgZGVmYXVsdCBJQU0gaW5zdGFuY2UgcHJvZmlsZSBmb3IgdGhlIFF1aWNrIFNldHVwIGNhcGFiaWxpdHkgYW5kIGF0dGFjaCBpdCB0byBBbWF6b24gRUMyIGluc3RhbmNlcyB0aGF0IGRvbid0IGFscmVhZHkgaGF2ZSBhbiBpbnN0YW5jZS4gcHJvZmlsZSBhdHRhY2hlZC4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cE1hbmFnZWRJbnN0YW5jZVByb2ZpbGVFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cE1hbmFnZWRJbnN0YW5jZVByb2ZpbGVFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBwZXJtaXNzaW9ucyB0byBlbmFibGUganVzdC1pbi10aW1lIG5vZGUgYWNjZXNzIGZvciBTeXN0ZW1zIE1hbmFnZXIuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBNYW5hZ2VKSVROQVJlc291cmNlc0V4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwTWFuYWdlSklUTkFSZXNvdXJjZXNFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgcGVybWlzc2lvbnMgdG8gYWNjZXNzIHBhdGNoIGJhc2VsaW5lcyB0aGF0IGhhdmUgYmVlbiBjb25maWd1cmVkIGJ5IGFuIGFkbWluaXN0cmF0b3IgaW4gdGhlIGN1cnJlbnQgQVdTIGFjY291bnQgb3Igb3JnYW5pemF0aW9uIHVzaW5nIFF1aWNrIFNldHVwLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwUGF0Y2hQb2xpY3lCYXNlbGluZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwUGF0Y2hQb2xpY3lCYXNlbGluZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRoYXQgYWxsb3cgUXVpY2sgU2V0dXAgdG8gY3JlYXRlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBwYXRjaCBwb2xpY3kgY29uZmlndXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cFBhdGNoUG9saWN5RGVwbG95bWVudFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cFBhdGNoUG9saWN5RGVwbG95bWVudFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBRdWlja1NldHVwIGNyZWF0ZXMgSUFNIHJvbGVzIHdoaWNoIGVuYWJsZSBpdCB0byBjb25maWd1cmUgdGhlIFN5c3RlbXMgTWFuYWdlciBQYXRjaCBNYW5hZ2VyIGZlYXR1cmUgb24geW91ciBiZWhhbGYsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgc3VjaCByb2xlcyB0byBkZWZpbmUgdGhlIGJvdW5kYXJ5IG9mIHRoZWlyIHBlcm1pc3Npb25zLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwUGF0Y2hQb2xpY3lQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBQYXRjaFBvbGljeVBlcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgQVdTUXVpY2tTZXR1cFNjaGVkdWxlclBlcm1pc3Npb25zQm91bmRhcnkgcG9saWN5IGRlZmluZXMgdGhlIGxpc3Qgb2YgcGVybWlzc2lvbnMgdGhhdCBhcmUgcGVybWl0dGVkIGluIGFuIElBTSByb2xlIGNyZWF0ZWQgYnkgUXVpY2sgU2V0dXAuIFF1aWNrIFNldHVwIHVzZXMgYSByb2xlIGNyZWF0ZWQgd2l0aCB0aGlzIHBvbGljeSB0byBlbmFibGUgYW5kIGNvbmZpZ3VyZSBzY2hlZHVsZWQgb3BlcmF0aW9ucyBvbiBBbWF6b24gRUMyIGluc3RhbmNlcyBhbmQgb3RoZXIgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwU2NoZWR1bGVyUGVybWlzc2lvbnNCb3VuZGFyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwU2NoZWR1bGVyUGVybWlzc2lvbnNCb3VuZGFyeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhZG1pbmlzdHJhdGl2ZSBwZXJtc3Npb25zIHRoYXQgYWxsb3cgUXVpY2sgU2V0dXAgdG8gY3JlYXRlIHJlc291cmNlcyB0aGF0IGFyZSB1c2VkIGR1cmluZyB0aGUgU3lzdGVtcyBNYW5hZ2VyIG9uYm9hcmRpbmcgcHJvY2Vzcy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cFNTTURlcGxveW1lbnRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBTU01EZXBsb3ltZW50Um9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyBmb3IgbGlzdGluZyBhbGwgUzMgYnVja2V0cyBpbiBhbiBhY2NvdW50OyBhbmQgZm9yIG1hbmFnaW5nIGFuZCByZXRyaWV2aW5nIGluZm9ybWF0aW9uIGFib3V0IHNwZWNpZmljIGJ1Y2tldHMgaW4gdGhlIHByaW5jaXBhbCBhY2NvdW50IHRoYXQgYXJlIG1hbmFnZWQgdGhyb3VnaCBBV1MgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVzLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwU1NNRGVwbG95bWVudFMzQnVja2V0Um9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwU1NNRGVwbG95bWVudFMzQnVja2V0Um9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFF1aWNrIFNldHVwIGNyZWF0ZXMgSUFNIHJvbGVzIHdoaWNoIGVuYWJsZSBpdCB0byBjb25maWd1cmUgdGhlIEhvc3QgTWFuYWdlciBRdWljayBTZXR1cCB0eXBlIG9uIHlvdXIgYmVoYWxmLCBhbmQgdXNlcyB0aGlzIHBvbGljeSB3aGVuIGNyZWF0aW5nIHN1Y2ggcm9sZXMgdG8gZGVmaW5lIHRoZSBib3VuZGFyeSBvZiB0aGVpciBwZXJtaXNzaW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cFNTTUhvc3RNZ210UGVybWlzc2lvbnNCb3VuZGFyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwU1NNSG9zdE1nbXRQZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIHBvbGljeSBncmFudHMgYWRtaW5pc3RyYXRpdmUgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBRdWljayBTZXR1cCB0byBydW4gdGhlIGEgQVdTIENsb3VkRm9ybWF0aW9uIGN1c3RvbSByZXNvdXJjZSBvbiBsaWZlY3ljbGUgZXZlbnRzIGR1cmluZyBRdWljayBTZXR1cCBkZXBsb3ltZW50IGluIFN5c3RlbXMgTWFuYWdlci4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cFNTTUxpZmVjeWNsZU1hbmFnZW1lbnRFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cFNTTUxpZmVjeWNsZU1hbmFnZW1lbnRFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBTeXN0ZW1zIE1hbmFnZXIgdG8gY3JlYXRlIHByZXJlcXVpc2l0ZXMgc3VjaCBhcyBJQU0gcm9sZXMgcmVxdWlyZWQgZm9yIFN5c3RlbXMgTWFuYWdlciBvbmJvYXJkaW5nLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwU1NNTWFuYWdlUmVzb3VyY2VzRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBTU01NYW5hZ2VSZXNvdXJjZXNFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBwcmluY2lwYWxzIHRvIHJ1biB0aGUgQVdTUXVpY2tTZXR1cFR5cGUtU3RhcnRTU01Bc3NvY2lhdGlvbnMgQXV0b21hdGlvbiBydW5ib29rLCB3aGljaCBzdGFydHMgU3RhdGUgTWFuYWdlciBBc3NvY2lhdGlvbnMuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBTdGFydFNTTUFzc29jaWF0aW9uc0V4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwU3RhcnRTU01Bc3NvY2lhdGlvbnNFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgbWFuYWdlZCBwb2xpY3kgQVdTUXVpY2tTZXR1cFN0YXJ0U3RvcEluc3RhbmNlc0V4ZWN1dGlvblBvbGljeSBwcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgUXVpY2sgU2V0dXAgdG8gc3RhcnQgYW5kIHN0b3AgQW1hem9uIEVDMiBpbnN0YW5jZXMgb24gYSBzY2hlZHVsZS4gVGhpcyBwb2xpY3kgaXMgdXNlZCB3aXRoIHRoZSBRdWljayBTZXR1cCBzY2hlZHVsZXIgY29uZmlndXJhdGlvbiB0eXBlLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwU3RhcnRTdG9wSW5zdGFuY2VzRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBTdGFydFN0b3BJbnN0YW5jZXNFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB0aGUgc2V0IG9mIHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIHBlcmZvcm0gUXVpY2tTaWdodCBBc3NldCBCdW5kbGUgRXhwb3J0IE9wZXJhdGlvbnMgKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTaWdodEFzc2V0QnVuZGxlRXhwb3J0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2lnaHRBc3NldEJ1bmRsZUV4cG9ydFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBzZXQgb2YgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gcGVyZm9ybSBRdWlja1NpZ2h0IEFzc2V0IEJ1bmRsZSBJbXBvcnQgT3BlcmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NpZ2h0QXNzZXRCdW5kbGVJbXBvcnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTaWdodEFzc2V0QnVuZGxlSW1wb3J0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUXVpY2tzaWdodCBhY2Nlc3MgdG8gQXRoZW5hIEFQSSBhbmQgUzMgYnVja2V0cyB1c2VkIGZvciBBdGhlbmEgcXVlcnkgcmVzdWx0cyAqL1xuICAgIHB1YmxpYyBBV1NRdWlja3NpZ2h0QXRoZW5hQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrc2lnaHRBdGhlbmFBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBRdWlja1NpZ2h0IHRvIGRlc2NyaWJlIHRoZSBSRFMgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU1F1aWNrU2lnaHREZXNjcmliZVJEUygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0RGVzY3JpYmVSRFMpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBRdWlja1NpZ2h0IHRvIGRlc2NyaWJlIFJlZHNoaWZ0IHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NpZ2h0RGVzY3JpYmVSZWRzaGlmdCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0RGVzY3JpYmVSZWRzaGlmdCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gRWxhc3RpY3NlYXJjaCByZXNvdXJjZXMgZnJvbSBBbWF6b24gUXVpY2tTaWdodCAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NpZ2h0RWxhc3RpY3NlYXJjaFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0RWxhc3RpY3NlYXJjaFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdpdmUgUXVpY2tTaWdodCByZWFkLW9ubHkgYWNjZXNzIHRvIElvVCBBbmFseXRpY3MgZGF0YXNldHMgKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTaWdodElvVEFuYWx5dGljc0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0SW9UQW5hbHl0aWNzQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgUXVpY2tTaWdodCB0byBsaXN0IElBTSBlbnRpdGllcyAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NpZ2h0TGlzdElBTSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0TGlzdElBTSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gT3BlblNlYXJjaCByZXNvdXJjZXMgZnJvbSBBbWF6b24gUXVpY2tTaWdodCAqL1xuICAgIHB1YmxpYyBBV1NRdWlja3NpZ2h0T3BlblNlYXJjaFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja3NpZ2h0T3BlblNlYXJjaFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gU2FnZU1ha2VyIHJlc291cmNlcyBmcm9tIEFtYXpvbiBRdWlja1NpZ2h0ICovXG4gICAgcHVibGljIEFXU1F1aWNrU2lnaHRTYWdlTWFrZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTaWdodFNhZ2VNYWtlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB1c2VkIGJ5IFF1aWNrU2lnaHQgdG8gY3JlYXRlIHNlY3JldHMgaW4gQVdTIFNlY3JldHMgTWFuYWdlciBhbmQgdG8gYXR0YWNoIHJlc291cmNlIHBvbGljaWVzIG9uIGV4aXN0aW5nIFF1aWNrU2lnaHQgc2VjcmV0cy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTaWdodFNlY3JldHNNYW5hZ2VyV3JpdGVBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTaWdodFNlY3JldHNNYW5hZ2VyV3JpdGVBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdXNlZCBieSBRdWlja1NpZ2h0IHRvIGNyZWF0ZSBzZWNyZXRzIGluIEFXUyBTZWNyZXRzIE1hbmFnZXIgYW5kIHRvIGF0dGFjaCByZXNvdXJjZSBwb2xpY2llcyBvbiBleGlzdGluZyBRdWlja1NpZ2h0IHNlY3JldHMuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2lnaHRTZWNyZXRzTWFuYWdlcldyaXRlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2lnaHRTZWNyZXRzTWFuYWdlcldyaXRlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQVdTIFF1aWNrU2lnaHQgYWNjZXNzIHRvIEFXUyBUaW1lc3RyZWFtIEFQSXMuIEN1c3RvbWVycyBjYW4gYXR0YWNoIHRoaXMgcG9saWN5IHRvIEFXUyBRdWlja1NpZ2h0IHJvbGUgdG8gYWxsb3cgcmV0cmlldmFsIG9mIGRhdGEgYW5kIG1ldGFkYXRhLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NpZ2h0VGltZXN0cmVhbVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0VGltZXN0cmVhbVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBWUEMgUmVhY2hhYmlsaXR5IEFuYWx5emVyIHRvIGFjY2VzcyBBV1MgcmVzb3VyY2VzIGFuZCBpbnRlZ3JhdGUgd2l0aCBBV1MgT3JnYW5pemF0aW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTUmVhY2hhYmlsaXR5QW5hbHl6ZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZWFjaGFiaWxpdHlBbmFseXplclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb24gdG8gdXNlIEFXUyBzZXJ2aWNlcyB3aXRoIHRoZSBBV1MgVG9vbGtpdCBmb3IgLk5FVCBSZWZhY3RvcmluZyBleHRlbnNpb24gZm9yIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvLiBJdCBpcyBpbnRlbmRlZCB0byBiZSBhdHRhY2hlZCB0byBhIGxvY2FsIEFXUyBwcm9maWxlLiBUaGUgcG9saWN5IGFsbG93cyB1cGxvYWRpbmcgYXBwbGljYXRpb24gYXJ0aWZhY3RzIGFuZCBkb3dubG9hZGluZyB0aGUgcmVzdWx0aW5nIGFydGlmYWN0cyBmcm9tIEFtYXpvbiBTMy4gSXQgYWxsb3dzIGJ1aWxkaW5nIGFwcGxpY2F0aW9ucyBpbnRvIGEgY29udGFpbmVyIGltYWdlIHVzaW5nIEFXUyBDb2RlQnVpbGQgYW5kIHN0b3JpbmcgYW5kIHJldHJpZXZpbmcgdGhlIGltYWdlcyBmcm9tIEFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBSZWdpc3RyeSAoQW1hem9uIEVDUikuIEFuZCBpdCBhbGxvd3MgZGVwbG95bWVudCBvZiB0aGUgYXBwbGljYXRpb24gdG8gY29udGFpbmVyIHNlcnZpY2VzIG9uIEFXUyBzdWNoIGFzIEFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIChBbWF6b24gRUNTKSwgb3B0aW9uYWwgY3JlYXRpb24gb2YgVlBDIHJlc291cmNlcywgb3B0aW9uYWwgY29ubmVjdGlvbiB0byBleGlzdGluZyBpbmZyYXN0cnVjdHVyZSBzdWNoIGFzIEFXUyBEaXJlY3RvcnkgU2VydmljZSwgYW5kIG90aGVyIHJlbGF0ZWQgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU1JlZmFjdG9yaW5nVG9vbGtpdEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVmYWN0b3JpbmdUb29sa2l0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgQW1hem9uIEVDUyBUYXNrcyBjcmVhdGVkIGZvciB0ZXN0aW5nIGFwcGxpY2F0aW9ucyBpbiBBV1MgdXNpbmcgdGhlIEFXUyBUb29sa2l0IGZvciAuTkVUIFJlZmFjdG9yaW5nIGV4dGVuc2lvbiBmb3IgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8uIFRoZSBwb2xpY3kgZ3JhbnRzIGFjY2VzcyB0byBkb3dubG9hZCBhcHBsaWNhdGlvbiBhcnRpZmFjdHMgZnJvbSBBbWF6b24gUzMsIGNvbW11bmljYXRlIHRoZSBzdGF0dXMgb2YgdGhlIFRhc2sgdXNpbmcgQVdTIFN5c3RlbXMgTWFuYWdlciwgYW5kIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NSZWZhY3RvcmluZ1Rvb2xraXRTaWRlY2FyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1JlZmFjdG9yaW5nVG9vbGtpdFNpZGVjYXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZTpQb3N0IFByaXZhdGUgYWNjZXNzIHRvIHB1Ymxpc2ggQ2xvdWRXYXRjaCBtZXRyaWNzIGRhdGEgKi9cbiAgICBwdWJsaWMgQVdTcmVQb3N0UHJpdmF0ZUNsb3VkV2F0Y2hBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTcmVQb3N0UHJpdmF0ZUNsb3VkV2F0Y2hBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgdGhlIHJlOlBvc3QgU3BhY2Ugc2VydmljZSB0byBjcmVhdGUsIG1hbmFnZSwgYW5kIHJlc29sdmUgU3VwcG9ydCBjYXNlcyB0aGF0IGFyZSBjcmVhdGVkIHRocm91Z2ggdGhlIFNwYWNlIGFwcGxpY2F0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NSZXBvc3RTcGFjZVN1cHBvcnRPcGVyYXRpb25zUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1JlcG9zdFNwYWNlU3VwcG9ydE9wZXJhdGlvbnNQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIEFXUyBSZXNpbGllbmNlIEh1YiBzZXJ2aWNlIHJvbGUgd2hpY2ggYWxsb3dzIGFjY2VzcyB0byBvdGhlciBBV1Mgc2VydmljZXMgaW4gb3JkZXIgdG8gZXhlY3V0ZSBhc3Nlc3NtZW50LiAqL1xuICAgIHB1YmxpYyBBV1NSZXNpbGllbmNlSHViQXNzc2Vzc21lbnRFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzaWxpZW5jZUh1YkFzc3Nlc3NtZW50RXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFJlc291cmNlIEFjY2VzcyBNYW5hZ2VyICovXG4gICAgcHVibGljIEFXU1Jlc291cmNlQWNjZXNzTWFuYWdlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzb3VyY2VBY2Nlc3NNYW5hZ2VyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIFJlc291cmNlIEFjY2VzcyBNYW5hZ2VyLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUFjY2Vzc01hbmFnZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXNvdXJjZUFjY2Vzc01hbmFnZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgUmVzb3VyY2UgQWNjZXNzIE1hbmFnZXIgQVBJcyBuZWVkZWQgYnkgYSByZXNvdXJjZSBzaGFyZSBwYXJ0aWNpcGFudC4gKi9cbiAgICBwdWJsaWMgQVdTUmVzb3VyY2VBY2Nlc3NNYW5hZ2VyUmVzb3VyY2VTaGFyZVBhcnRpY2lwYW50QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Jlc291cmNlQWNjZXNzTWFuYWdlclJlc291cmNlU2hhcmVQYXJ0aWNpcGFudEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBjb250YWluaW5nIFJlYWQtb25seSBBV1MgUmVzb3VyY2UgQWNjZXNzIE1hbmFnZXIgYWNjZXNzIHRvIGN1c3RvbWVycycgT3JnYW5pemF0aW9ucyBzdHJ1Y3R1cmUuIEl0IGFsc28gY29udGFpbnMgSUFNIHBlcm1pc3Npb25zIHRvIHNlbGYtZGVsZXRlIHRoZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUFjY2Vzc01hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXNvdXJjZUFjY2Vzc01hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgUmVzb3VyY2UgRXhwbG9yZXIgcmVzb3VyY2VzIGFuZCBncmFudHMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIHRvIG90aGVyIEFXUyBzZXJ2aWNlcyB0byBzdXBwb3J0IHRoaXMgYWNjZXNzLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUV4cGxvcmVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXNvdXJjZUV4cGxvcmVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucyB0byBSZXNvdXJjZSBFeHBsb3JlciBhbmQgZ3JhbnRzIHJlYWQtb25seSBwZXJtaXNzaW9ucyB0byBvdGhlciBBV1Mgc2VydmljZXMgdG8gc3VwcG9ydCB0aGlzIGFjY2Vzcy4gVGhlIEFXUyBPcmdhbml6YXRpb25zIGFkbWluaXN0cmF0b3IgbmVlZHMgdGhlc2UgcGVybWlzc2lvbnMgdG8gc2V0dXAgYW5kIG1hbmFnZSBtdWx0aS1hY2NvdW50IHNlYXJjaCBpbiB0aGUgY29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTUmVzb3VyY2VFeHBsb3Jlck9yZ2FuaXphdGlvbnNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzb3VyY2VFeHBsb3Jlck9yZ2FuaXphdGlvbnNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIHRvIHNlYXJjaCBmb3IgYW5kIHZpZXcgUmVzb3VyY2UgRXhwbG9yZXIgcmVzb3VyY2VzIGFuZCBncmFudHMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIHRvIG90aGVyIEFXUyBzZXJ2aWNlcyB0byBzdXBwb3J0IHRoaXMgYWNjZXNzLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUV4cGxvcmVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzb3VyY2VFeHBsb3JlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFJlc291cmNlIEV4cGxvcmVyIHRvIHZpZXcgcmVzb3VyY2VzIGFuZCBDbG91ZFRyYWlsIGV2ZW50cyBvbiB5b3VyIGJlaGFsZiB0byBpbmRleCB5b3VyIHJlc291cmNlcyBmb3Igc2VhcmNoLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUV4cGxvcmVyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzb3VyY2VFeHBsb3JlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBpcyB0aGUgcmVhZCBvbmx5IHBvbGljeSBmb3IgQVdTIFJlc291cmNlIEdyb3VwcyAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUdyb3Vwc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Jlc291cmNlR3JvdXBzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgUm9ib01ha2VyIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgU0RLLiBBbHNvIHByb3ZpZGVzIHNlbGVjdCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyAoZS5nLiwgUzMsIElBTSkuICovXG4gICAgcHVibGljIEFXU1JvYm9NYWtlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUm9ib01ha2VyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIFJvYm9NYWtlciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESyAqL1xuICAgIHB1YmxpYyBBV1NSb2JvTWFrZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSb2JvTWFrZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFJvYm9NYWtlciBzZXJ2aWNlIHBvbGljeSAqL1xuICAgIHB1YmxpYyBBV1NSb2JvTWFrZXJTZXJ2aWNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1JvYm9NYWtlclNlcnZpY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBSb2JvTWFrZXIgc2VydmljZSBwb2xpY3kgKi9cbiAgICBwdWJsaWMgQVdTUm9ib01ha2VyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUm9ib01ha2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhbGwgcGVybWlzc2lvbnMgdG8gSUFNIFJvbGVzIEFueXdoZXJlIHJlc291cmNlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bzogQ3JlYXRlUHJvZmlsZSwgRGVsZXRlVHJ1c3RBbmNob3IsIERpc2FibGVDUkwsIFJlc2V0Tm90aWZpY2F0aW9uU2V0dGluZ3MuICovXG4gICAgcHVibGljIEFXU1JvbGVzQW55d2hlcmVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1JvbGVzQW55d2hlcmVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIHRvIElBTSBSb2xlcyBBbnl3aGVyZSByZXNvdXJjZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG86IEdldFRydXN0QW5jaG9yLCBMaXN0UHJvZmlsZXMsIEdldENSTC4gVGhlcmUgd2lsbCBiZSBubyBvdGhlciBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgc2VydmljZXMgaW5jbHVkZWQgaW4gdGhpcyBwb2xpY3kuICovXG4gICAgcHVibGljIEFXU1JvbGVzQW55d2hlcmVSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSb2xlc0FueXdoZXJlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgSUFNIFJvbGVzIEFueXdoZXJlIHRvIHB1Ymxpc2ggc2VydmljZS91c2FnZSBtZXRyaWNzIHRvIENsb3VkV2F0Y2ggYW5kIGNoZWNrIHRoZSBzdGF0dXMgb2YgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdGllcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTUm9sZXNBbnl3aGVyZVNlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUm9sZXNBbnl3aGVyZVNlcnZpY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBBbWF6b24gUzMgb24gT3V0cG9zdHMgc2VydmljZSB0byBtYW5hZ2UgRUMyIG5ldHdvcmsgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NTM09uT3V0cG9zdHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTM09uT3V0cG9zdHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIFNhdmluZ3MgUGxhbnMgc2VydmljZSAqL1xuICAgIHB1YmxpYyBBV1NTYXZpbmdzUGxhbnNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NhdmluZ3NQbGFuc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIFNhdmluZ3MgUGxhbnMgc2VydmljZSAqL1xuICAgIHB1YmxpYyBBV1NTYXZpbmdzUGxhbnNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTYXZpbmdzUGxhbnNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byByZXRyaWV2ZSBhbmQgZGVzY3JpYmUgc2VjcmV0cyBmcm9tIFNlY3JldHMgTWFuYWdlci4gVGhpcyBwb2xpY3kgYWxzbyBhbGxvd3MgZGVjcnlwdGluZyBLTVMga2V5cyBmb3IgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldHMuICovXG4gICAgcHVibGljIEFXU1NlY3JldHNNYW5hZ2VyQ2xpZW50UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VjcmV0c01hbmFnZXJDbGllbnRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHVzZSBBV1MgU2VjdXJpdHkgSHViLiAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUh1YkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VjdXJpdHlIdWJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb24gdG8gZW5hYmxlIGFuZCBtYW5hZ2UgQVdTIFNlY3VyaXR5IEh1YiB3aXRoaW4gYW4gb3JnYW5pemF0aW9uLiBJbmNsdWRlcyBlbmFibGluZyB0aGUgc2VydmljZSBhY3Jvc3MgdGhlIG9yZ2FuaXphdGlvbiwgYW5kIGRldGVybWluaW5nIHRoZSBkZWxlZ2F0ZWQgYWRtaW5pc3RyYXRvciBhY2NvdW50IGZvciB0aGUgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTU2VjdXJpdHlIdWJPcmdhbml6YXRpb25zQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlY3VyaXR5SHViT3JnYW5pemF0aW9uc0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIFNlY3VyaXR5IEh1YiByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTU2VjdXJpdHlIdWJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWN1cml0eUh1YlJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQSBzZXJ2aWNlLWxpbmtlZCByb2xlIHJlcXVpcmVkIGZvciBBV1MgU2VjdXJpdHkgSHViIHRvIGFjY2VzcyB5b3VyIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTU2VjdXJpdHlIdWJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWN1cml0eUh1YlNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIFNlY3VyaXR5IEh1YiB0byBtYW5hZ2UgQVdTIENvbmZpZyBydWxlcyBhbmQgU2VjdXJpdHkgSHViIHJlc291cmNlcyBpbiB5b3VyIG9yZ2FuaXphdGlvbiBhbmQgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU1NlY3VyaXR5SHViVjJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWN1cml0eUh1YlYyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgcHJvdmlkZXMgY3VzdG9tZXJzIHdpdGggUmVhZCBhbmQgV3JpdGUgcGVybWlzc2lvbnMgdG8gY2FzZSByZXNvdXJjZXMgdGhhdCBhcmUgY3JlYXRlZCB0aHJvdWdoIHRoZSBTZWN1cml0eSBJbmNpZGVudCBSZXNwb25zZSBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUluY2lkZW50UmVzcG9uc2VDYXNlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWN1cml0eUluY2lkZW50UmVzcG9uc2VDYXNlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBwcm92aWRlcyBjdXN0b21lcnMgd2l0aCBSZWFkIGFuZCBXcml0ZSBwZXJtaXNzaW9ucyB0byBhbGwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgdG8gdGhlIFNlY3VyaXR5IEluY2lkZW50IFJlc3BvbnNlIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU1NlY3VyaXR5SW5jaWRlbnRSZXNwb25zZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VjdXJpdHlJbmNpZGVudFJlc3BvbnNlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBwcm92aWRlcyBjdXN0b21lcnMgd2l0aCBSZWFkLW9ubHkgcGVybWlzc2lvbnMgdG8gYWxsIHJlc291cmNlcyBhc3NvY2lhdGVkIHRvIHRoZSBTZWN1cml0eSBJbmNpZGVudCBSZXNwb25zZSBzZXJ2aWNlLiBQZXJtaXNzaW9uIGluY2x1ZGVzIGFjY2VzcyB0byBHZXRDYXNlQXR0YWNobWVudERvd25sb2FkVXJsIGFzIHdlbGwgZm9yIHRoZSBhYmlsaXR5IHRvIGdldCBjYXNlIGF0dGFjaG1lbnQgZG93bmxvYWQgVVJMcy4gKi9cbiAgICBwdWJsaWMgQVdTU2VjdXJpdHlJbmNpZGVudFJlc3BvbnNlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VjdXJpdHlJbmNpZGVudFJlc3BvbnNlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIFJlc291cmNlcyBtYW5hZ2VkIG9yIHVzZWQgYnkgU2VjdXJpdHkgSW5jaWRlbnQgUmVzcG9uc2UgKi9cbiAgICBwdWJsaWMgQVdTU2VjdXJpdHlJbmNpZGVudFJlc3BvbnNlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VjdXJpdHlJbmNpZGVudFJlc3BvbnNlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIFNlY3VyaXR5IEluY2lkZW50IFJlc3BvbnNlIHRvIGNvbnRpbnVvdXNseSBtb25pdG9yIHlvdXIgZW52aXJvbm1lbnQgZm9yIHNlY3VyaXR5IHRocmVhdHMsIHR1bmUgc2VjdXJpdHkgc2VydmljZXMgdG8gcmVkdWNlIGFsZXJ0IG5vaXNlLCBhbmQgZ2F0aGVyIGluZm9ybWF0aW9uIHRvIGludmVzdGlnYXRlIHBvdGVudGlhbCBpbmNpZGVudHMuICovXG4gICAgcHVibGljIEFXU1NlY3VyaXR5SW5jaWRlbnRSZXNwb25zZVRyaWFnZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlY3VyaXR5SW5jaWRlbnRSZXNwb25zZVRyaWFnZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gc2VydmljZSBjYXRhbG9nIGFkbWluIGNhcGFiaWxpdGllcyAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlQ2F0YWxvZ0FkbWluRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlQ2F0YWxvZ0FkbWluRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gU2VydmljZSBDYXRhbG9nIGFkbWluIGNhcGFiaWxpdGllcyAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlQ2F0YWxvZ0FkbWluUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZUNhdGFsb2dBZG1pblJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gU2VydmljZSBDYXRhbG9nIEFwcCBSZWdpc3RyeSBjYXBhYmlsaXRpZXMgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZUNhdGFsb2dBcHBSZWdpc3RyeUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZUNhdGFsb2dBcHBSZWdpc3RyeUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIFNlcnZpY2UgQ2F0YWxvZyBBcHAgUmVnaXN0cnkgY2FwYWJpbGl0ZXMgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZUNhdGFsb2dBcHBSZWdpc3RyeVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VDYXRhbG9nQXBwUmVnaXN0cnlSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBTZXJ2aWNlIENhdGFsb2cgQXBwUmVnaXN0cnkgdG8gbWFuYWdlIFJlc291cmNlIEdyb3VwcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlQ2F0YWxvZ0FwcFJlZ2lzdHJ5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZUNhdGFsb2dBcHBSZWdpc3RyeVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gc2VydmljZSBjYXRhbG9nIGVuZHVzZXIgY2FwYWJpbGl0aWVzICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VDYXRhbG9nRW5kVXNlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZUNhdGFsb2dFbmRVc2VyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gU2VydmljZSBDYXRhbG9nIGVuZC11c2VyIGNhcGFiaWxpdGllcyAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlQ2F0YWxvZ0VuZFVzZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlQ2F0YWxvZ0VuZFVzZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEEgU2VydmljZSBMaW5rZWQgUm9sZSBQb2xpY3kgZm9yIEFXUyBTZXJ2aWNlQ2F0YWxvZyB0byBzeW5jIHdpdGggQVdTIE9yZ2FuaXphdGlvbnMgb3JnYW5pemF0aW9uIHN0cnVjdHVyZSAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlQ2F0YWxvZ09yZ3NEYXRhU3luY1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VDYXRhbG9nT3Jnc0RhdGFTeW5jU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBIFNlcnZpY2UgTGlua2VkIFJvbGUgZm9yIEFXUyBTZXJ2aWNlQ2F0YWxvZyB0byBzeW5jIFByb3Zpc2lvbmluZyBBcnRpZmFjdHMgZnJvbSBzb3VyY2UgcmVwb3NpdG9yaWVzICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VDYXRhbG9nU3luY1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VDYXRhbG9nU3luY1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIG1hbmFnaW5nIG5vZGVncm91cHMgaW4gdGhlIGN1c3RvbWVyJ3MgYWNjb3VudC4gVGhlc2UgcG9saWNpZXMgcmVsYXRlZCB0byBtYW5hZ2VtZW50IG9mIHRoZSBmb2xsb3dpbmcgcmVzb3VyY2VzOiBBdXRvc2NhbGluZ0dyb3VwcywgU2VjdXJpdHlHcm91cHMsIExhdW5jaFRlbXBsYXRlcyBhbmQgSW5zdGFuY2VQcm9maWxlcy4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JBbWF6b25FS1NOb2RlZ3JvdXAoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JBbWF6b25FS1NOb2RlZ3JvdXApO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIFNlcnZpY2UgTGlua2VkIFJvbGUgcHJvdmlkZXMgQW1hem9uIFEgRGV2ZWxvcGVyIGFiaWxpdHkgdG8gcHJvdmlkZSB1c2FnZSBpbmZvcm1hdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JBbWF6b25RRGV2ZWxvcGVyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yQW1hem9uUURldmVsb3Blcik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgU2VydmljZS1MaW5rZWQgUm9sZSBwcm92aWRlcyBBV1MgVHJhbnNmb3JtIHdpdGggdGhlIGFiaWxpdHkgdG8gcHJvdmlkZSB1c2FnZSBpbmZvcm1hdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JBV1NUcmFuc2Zvcm0oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JBV1NUcmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gU3lzdGVtcyBNYW5hZ2VyIHJlc291cmNlcyB1c2VkIGJ5IENsb3VkV2F0Y2ggQWxhcm1zICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yQ2xvdWRXYXRjaEFsYXJtc0FjdGlvblNTTVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yQ2xvdWRXYXRjaEFsYXJtc0FjdGlvblNTTVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENsb3VkV2F0Y2ggdG8gYWNjZXNzIFJEUyBQZXJmb3JtYW5jZSBJbnNpZ2h0cyBtZXRyaWNzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yQ2xvdWRXYXRjaE1ldHJpY3NEYlBlcmZJbnNpZ2h0c1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yQ2xvdWRXYXRjaE1ldHJpY3NEYlBlcmZJbnNpZ2h0c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQSBzZXJ2aWNlLWxpbmtlZCByb2xlIHJlcXVpcmVkIGZvciBBbWF6b24gQ29kZUd1cnUgUHJvZmlsZXIgdG8gc2VuZCBub3RpZmljYXRpb25zIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckNvZGVHdXJ1UHJvZmlsZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JDb2RlR3VydVByb2ZpbGVyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyByb2xlIGdyYW50cyBwZXJtaXNzaW9ucyB0byBDb2RlV2hpc3BlcmVyIHRvIGFjY2VzcyBkYXRhIGluIHlvdXIgYWNjb3VudCB0byBjYWxjdWxhdGUgYmlsbGluZywgcHJvdmlkZXMgYWNjZXNzIHRvIGNyZWF0ZSBhbmQgYWNjZXNzIHNlY3VyaXR5IHJlcG9ydHMgaW4gQW1hem9uIENvZGVHdXJ1LCBhbmQgZW1pdCBkYXRhIHRvIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yQ29kZVdoaXNwZXJlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvckNvZGVXaGlzcGVyZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRUMyIFNjaGVkdWxlZCBJbnN0YW5jZXMgdG8gbGF1bmNoIGFuZCBtYW5hZ2Ugc3BvdCBpbnN0YW5jZXMuICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yRUMyU2NoZWR1bGVkSW5zdGFuY2VzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yRUMyU2NoZWR1bGVkSW5zdGFuY2VzKTtcbiAgICB9XG5cbiAgICAvKiogQVdTIEdyb3VuZFN0YXRpb24gdXNlcyB0aGlzIHNlcnZpY2UtbGlua2VkIHJvbGUgdG8gaW52b2tlIEVDMiB0byBmaW5kIHB1YmxpYyBJUHY0IGFkZHJlc3NlcyAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckdyb3VuZFN0YXRpb25EYXRhZmxvd0VuZHBvaW50R3JvdXBQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JHcm91bmRTdGF0aW9uRGF0YWZsb3dFbmRwb2ludEdyb3VwUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEVDMkltYWdlQnVpbGRlciB0byBjYWxsIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JJbWFnZUJ1aWxkZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JJbWFnZUJ1aWxkZXIpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIElvVCBTaXRlV2lzZSB0byBwcm92aXNpb24gYW5kIG1hbmFnZSBnYXRld2F5cyBhcyB3ZWxsIGFzIHF1ZXJ5IGRhdGEuIFRoZSBwb2xpY3kgaW5jbHVkZXMgcmVxdWlyZWQgQVdTIEdyZWVuZ3Jhc3MgcGVybWlzc2lvbnMgZm9yIGRlcGxveWluZyB0byBncm91cHMsIEFXUyBMYW1iZGEgcGVybWlzc2lvbnMgZm9yIGNyZWF0aW5nIGFuZCB1cGRhdGluZyBzZXJ2aWNlLXByZWZpeGVkIGZ1bmN0aW9ucywgYW5kIEFXUyBJb1QgQW5hbHl0aWNzIHBlcm1pc3Npb25zIGZvciBxdWVyeWluZyBkYXRhIGZyb20gZGF0YXN0b3Jlcy4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JJb1RTaXRlV2lzZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvcklvVFNpdGVXaXNlKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIExvZyBEZWxpdmVyeSBzZXJ2aWNlIHRvIGRlbGl2ZXIgbG9ncyBieSBjYWxsaW5nIGxvZyBkZXN0aW5hdGlvbiBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JMb2dEZWxpdmVyeVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvckxvZ0RlbGl2ZXJ5UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIEFtYXpvbiBNb25pdHJvbiBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgQVdTIHJlc291cmNlcywgaW5jbHVkaW5nIEFXUyBTU08gdXNlciBhc3NpZ25tZW50IG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvck1vbml0cm9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yTW9uaXRyb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBDbG91ZHdhdGNoIGFjY2VzcyB0byBwdWJsaXNoIG9wZXJhdGlvbmFsIGFuZCB1c2FnZSBtZXRyaWNzIGFuZCBsb2dzIGZvciBBbWF6b24gTmVwdHVuZSAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvck5lcHR1bmVHcmFwaFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvck5lcHR1bmVHcmFwaFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGRlc2NyaWJlIGFuZCB1cGRhdGUgUHJpdmF0ZSBNYXJrZXRwbGFjZSByZXNvdXJjZXMgYW5kIGRlc2NyaWJlIEFXUyBPcmdhbml6YXRpb25zICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yUHJpdmF0ZU1hcmtldHBsYWNlQWRtaW5Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JQcml2YXRlTWFya2V0cGxhY2VBZG1pblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgUHJvY3VyZW1lbnQgSW5zaWdodHMgdG8gb2J0YWluIE9yZ2FuaXphdGlvbiBBY2NvdW50IGRldGFpbHMgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JQcm9jdXJlbWVudEluc2lnaHRzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yUHJvY3VyZW1lbnRJbnNpZ2h0c1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1Mgc2VydmljZXMgYW5kIHJlc291cmNlcyBuZWNlc3NhcnkgdG8gbWlncmF0ZSBzZXJ2aWNlIGluc3RhbmNlcyBpbnRvIEFXUyBpbmNsdWRpbmcgRUMyLCBTMyBhbmQgQ2xvdWRmb3JtYXRpb24uICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yU01TKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yU01TKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBVc2VyIFN1YnNjcmlwdGlvbnMgc2VydmljZSB0byB5b3VyIElkZW50aXR5IENlbnRlciByZXNvdXJjZXMgdG8gYXV0b21hdGljYWxseSB1cGRhdGUgeW91ciBzdWJzY3JpcHRpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvclVzZXJTdWJzY3JpcHRpb25zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yVXNlclN1YnNjcmlwdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBV1MgQmFja3VwIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBjb21wbGlhbmNlIHJlcG9ydHMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVQb2xpY3lGb3JCYWNrdXBSZXBvcnRzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlUG9saWN5Rm9yQmFja3VwUmVwb3J0cyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGNvbnRhaW5zIHBlcm1pc3Npb25zIGZvciB0ZXN0aW5nIHJlc3RvcmVzIGFuZCBmb3IgY2xlYW5pbmcgdXAgcmVzb3VyY2VzIGNyZWF0ZWQgZHVyaW5nIHRlc3RzLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZVBvbGljeUZvckJhY2t1cFJlc3RvcmVUZXN0aW5nKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlUG9saWN5Rm9yQmFja3VwUmVzdG9yZVRlc3RpbmcpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIG1hbmFnZWQgcG9saWN5IHByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyB0byBtYW5hZ2UgRUMyIGluc3RhbmNlcyBpbiB5b3VyIEFXUyBhY2NvdW50ICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlUG9saWN5Rm9yV29ya3NwYWNlc0luc3RhbmNlcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZVBvbGljeUZvcldvcmtzcGFjZXNJbnN0YW5jZXMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB0aGUgQVdTIEREb1MgUmVzcG9uc2UgVGVhbSB3aXRoIGxpbWl0ZWQgYWNjZXNzIHRvIHlvdXIgQVdTIGFjY291bnQgdG8gYXNzaXN0IHdpdGggRERvUyBhdHRhY2sgbWl0aWdhdGlvbiBkdXJpbmcgYSBoaWdoLXNldmVyaXR5IGV2ZW50LiAqL1xuICAgIHB1YmxpYyBBV1NTaGllbGREUlRBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2hpZWxkRFJUQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBTaGllbGQgdG8gYWNjZXNzIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYgdG8gcHJvdmlkZSBERG9TIHByb3RlY3Rpb24uICovXG4gICAgcHVibGljIEFXU1NoaWVsZFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NoaWVsZFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHB1Ymxpc2ggbWV0cmljcyBhbmQgcHJvdmlkZSBpbnNpZ2h0cyBmb3IgeW91ciBzb2NpYWwgbWVzc2FnZSBzZW5kaW5nLiAqL1xuICAgIHB1YmxpYyBBV1NTb2NpYWxNZXNzYWdpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTb2NpYWxNZXNzYWdpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBTeXN0ZW1zIE1hbmFnZXIgZm9yIFNBUCB3aXRoIHRoZSBwZXJtaXNzaW9ucyBuZWVkZWQgdG8gbWFuYWdlIGFuZCBpbnRlZ3JhdGUgU0FQIHNvZnR3YXJlIHdpdGggQVdTLiAqL1xuICAgIHB1YmxpYyBBV1NTU01Gb3JTQVBTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU01Gb3JTQVBTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgU2VydmljZSBMaW5rZWQgUm9sZSBBV1NTZXJ2aWNlUm9sZUZvckFtYXpvblNTTV9PcHNJbnNpZ2h0cyAqL1xuICAgIHB1YmxpYyBBV1NTU01PcHNJbnNpZ2h0c1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTTU9wc0luc2lnaHRzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBZG1pbmlzdHJhdG9yIGFjY2VzcyBmb3IgU1NPIERpcmVjdG9yeSAqL1xuICAgIHB1YmxpYyBBV1NTU09EaXJlY3RvcnlBZG1pbmlzdHJhdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTT0RpcmVjdG9yeUFkbWluaXN0cmF0b3IpO1xuICAgIH1cblxuICAgIC8qKiBSZWFkT25seSBhY2Nlc3MgZm9yIFNTTyBEaXJlY3RvcnkgKi9cbiAgICBwdWJsaWMgQVdTU1NPRGlyZWN0b3J5UmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NPRGlyZWN0b3J5UmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3Mgd2l0aGluIEFXUyBTU08gdG8gbWFuYWdlIEFXUyBPcmdhbml6YXRpb25zIG1hc3RlciBhbmQgbWVtYmVyIGFjY291bnRzIGFuZCBjbG91ZCBhcHBsaWNhdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NTU09NYXN0ZXJBY2NvdW50QWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU09NYXN0ZXJBY2NvdW50QWRtaW5pc3RyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB3aXRoaW4gQVdTIFNTTyB0byBtYW5hZ2UgQVdTIE9yZ2FuaXphdGlvbnMgbWVtYmVyIGFjY291bnRzIGFuZCBjbG91ZCBhcHBsaWNhdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NTU09NZW1iZXJBY2NvdW50QWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU09NZW1iZXJBY2NvdW50QWRtaW5pc3RyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIFNTTyBjb25maWd1cmF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTU1NPUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NPUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQVdTIFNTTyBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgQVdTIHJlc291cmNlcywgaW5jbHVkaW5nIElBTSByb2xlcywgcG9saWNpZXMgYW5kIFNBTUwgSWRQIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NTU09TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU09TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFuIGFjY2VzcyBwb2xpY3kgZm9yIHByb3ZpZGluZyBhIHVzZXIvcm9sZS9ldGMgYWNjZXNzIHRvIHRoZSBBV1MgU3RlcEZ1bmN0aW9ucyBjb25zb2xlLiBGb3IgYSBmdWxsIGNvbnNvbGUgZXhwZXJpZW5jZSwgaW4gYWRkaXRpb24gdG8gdGhpcyBwb2xpY3ksIGEgdXNlciBtYXkgbmVlZCBpYW06UGFzc1JvbGUgcGVybWlzc2lvbiBvbiBvdGhlciBJQU0gcm9sZXMgdGhhdCBjYW4gYmUgYXNzdW1lZCBieSB0aGUgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTU3RlcEZ1bmN0aW9uc0NvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N0ZXBGdW5jdGlvbnNDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFuIGFjY2VzcyBwb2xpY3kgZm9yIHByb3ZpZGluZyBhIHVzZXIvcm9sZS9ldGMgYWNjZXNzIHRvIHRoZSBBV1MgU3RlcEZ1bmN0aW9ucyBBUEkuIEZvciBmdWxsIGFjY2VzcywgaW4gYWRkaXRpb24gdG8gdGhpcyBwb2xpY3ksIGEgdXNlciBNVVNUIGhhdmUgaWFtOlBhc3NSb2xlIHBlcm1pc3Npb24gb24gYXQgbGVhc3Qgb25lIElBTSByb2xlIHRoYXQgY2FuIGJlIGFzc3VtZWQgYnkgdGhlIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU1N0ZXBGdW5jdGlvbnNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N0ZXBGdW5jdGlvbnNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQW4gYWNjZXNzIHBvbGljeSBmb3IgcHJvdmlkaW5nIGEgdXNlci9yb2xlL2V0YyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBBV1MgU3RlcEZ1bmN0aW9ucyBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NTdGVwRnVuY3Rpb25zUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3RlcEZ1bmN0aW9uc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFN0b3JhZ2UgR2F0ZXdheSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU1N0b3JhZ2VHYXRld2F5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTdG9yYWdlR2F0ZXdheUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIFN0b3JhZ2UgR2F0ZXdheSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU1N0b3JhZ2VHYXRld2F5UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3RvcmFnZUdhdGV3YXlSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UtbGlua2VkIHJvbGUgdXNlZCBieSBBV1MgU3RvcmFnZSBHYXRld2F5IHRvIGVuYWJsZSBpbnRlZ3JhdGlvbiBvZiBvdGhlciBBV1Mgc2VydmljZXMgd2l0aCBTdG9yYWdlIEdhdGV3YXkuICovXG4gICAgcHVibGljIEFXU1N0b3JhZ2VHYXRld2F5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3RvcmFnZUdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFXU1N1cHBseUNoYWluRmVkZXJhdGlvbkFkbWluQWNjZXNzIHByb3ZpZGVzIEFXUyBTdXBwbHkgQ2hhaW4gZmVkZXJhdGVkIHVzZXJzIGFjY2VzcyB0byB0aGUgQVdTIFN1cHBseSBDaGFpbiBhcHBsaWNhdGlvbiwgaW5jbHVkaW5nIHRoZSByZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBwZXJmb3JtIGFjdGlvbnMgd2l0aGluIHRoZSBBV1MgU3VwcGx5IENoYWluIGFwcGxpY2F0aW9uLiBUaGUgcG9saWN5IHByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zIG92ZXIgSUFNIElkZW50aXR5IENlbnRlciB1c2VycyBhbmQgZ3JvdXBzIGFuZCBpcyBhdHRhY2hlZCB0byBhIHJvbGUgY3JlYXRlZCBieSBBV1MgU3VwcGx5IENoYWluIG9uIHlvdXIgYmVoYWxmLiBZb3Ugc2hvdWxkbid0IGF0dGFjaCBBV1NTdXBwbHlDaGFpbkZlZGVyYXRpb25BZG1pbkFjY2VzcyBwb2xpY3kgdG8gYW55IG90aGVyIElBTSBlbnRpdGllcy4gKi9cbiAgICBwdWJsaWMgQVdTU3VwcGx5Q2hhaW5GZWRlcmF0aW9uQWRtaW5BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3VwcGx5Q2hhaW5GZWRlcmF0aW9uQWRtaW5BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdXNlcnMgdG8gYWNjZXNzIHRoZSBBV1MgU3VwcG9ydCBDZW50ZXIuICovXG4gICAgcHVibGljIEFXU1N1cHBvcnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3VwcG9ydEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgU3VwcG9ydCBBcHAgYW5kIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzLCBzdWNoIGFzIEFXUyBTdXBwb3J0IGFuZCBTZXJ2aWNlIFF1b3Rhcy4gVGhpcyBwb2xpY3kgaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBzdXBwb3J0aW5nIHNlcnZpY2VzIHNvIHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRhY3QgQVdTIFN1cHBvcnQgZm9yIHN1cHBvcnQgY2FzZXMsIGNoYW5nZSBzZXJ2aWNlIHF1b3RhcywgYW5kIGNyZWF0ZSB0aGUgcmVsZXZhbnQgc2VydmljZS1saW5rZWQgcm9sZXMuICovXG4gICAgcHVibGljIEFXU1N1cHBvcnRBcHBGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N1cHBvcnRBcHBGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgQVdTIFN1cHBvcnQgQXBwLiAqL1xuICAgIHB1YmxpYyBBV1NTdXBwb3J0QXBwUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3VwcG9ydEFwcFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gc3VwcG9ydHBsYW5zLiAqL1xuICAgIHB1YmxpYyBBV1NTdXBwb3J0UGxhbnNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N1cHBvcnRQbGFuc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHN1cHBvcnRwbGFucy4gKi9cbiAgICBwdWJsaWMgQVdTU3VwcG9ydFBsYW5zUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3VwcG9ydFBsYW5zUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIFN1cHBvcnQgdG8gYWNjZXNzIEFXUyByZXNvdXJjZXMgdG8gcHJvdmlkZSBiaWxsaW5nLCBhZG1pbmlzdHJhdGl2ZSwgYW5kIHN1cHBvcnQgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU1N1cHBvcnRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTdXBwb3J0U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQVdTIFN5c3RlbXMgTWFuYWdlciAoU1NNKSBwZXJtaXNzaW9uIHRvIGRpc2NvdmVyIEFXUyBhY2NvdW50IGluZm9ybWF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NTeXN0ZW1zTWFuYWdlckFjY291bnREaXNjb3ZlcnlTZXJ2aWNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N5c3RlbXNNYW5hZ2VyQWNjb3VudERpc2NvdmVyeVNlcnZpY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIHJlc291cmNlcyBtYW5hZ2VkIG9yIHVzZWQgYnkgdGhlIEFXUyBTeXN0ZW1zIE1hbmFnZXIgY2hhbmdlIG1hbmFnZW1lbnQgZnJhbWV3b3JrLiAqL1xuICAgIHB1YmxpYyBBV1NTeXN0ZW1zTWFuYWdlckNoYW5nZU1hbmFnZW1lbnRTZXJ2aWNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N5c3RlbXNNYW5hZ2VyQ2hhbmdlTWFuYWdlbWVudFNlcnZpY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgQVdTIFN5c3RlbXMgTWFuYWdlciBRdWljayBTZXR1cCB0byBlbmFibGUgYW5kIGNvbmZpZ3VyZSBBV1MgQ29uZmlnIGNvbmZpZ3VyYXRpb24gcmVjb3JkaW5nLiAqL1xuICAgIHB1YmxpYyBBV1NTeXN0ZW1zTWFuYWdlckVuYWJsZUNvbmZpZ1JlY29yZGluZ0V4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTeXN0ZW1zTWFuYWdlckVuYWJsZUNvbmZpZ1JlY29yZGluZ0V4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucyBmb3IgZW5hYmxpbmcgRXhwbG9yZXIsIGEgY2FwYWJpbGl0eSBvZiBBV1MgU3lzdGVtcyBNYW5hZ2VyLiBUaGlzIGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIHVwZGF0ZSByZWxhdGVkIFN5c3RlbXMgTWFuYWdlciBzZXJ2aWNlIHNldHRpbmdzLCBhbmQgdG8gY3JlYXRlIGEgc2VydmljZS1saW5rZWQgcm9sZSBmb3IgU3lzdGVtcyBNYW5hZ2VyLiAqL1xuICAgIHB1YmxpYyBBV1NTeXN0ZW1zTWFuYWdlckVuYWJsZUV4cGxvcmVyRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N5c3RlbXNNYW5hZ2VyRW5hYmxlRXhwbG9yZXJFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgU3lzdGVtcyBNYW5hZ2VyIGZvciBTQVAgc2VydmljZSAqL1xuICAgIHB1YmxpYyBBV1NTeXN0ZW1zTWFuYWdlckZvclNBUEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJGb3JTQVBGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgU3lzdGVtcyBNYW5hZ2VyIGZvciBTQVAgc2VydmljZSAqL1xuICAgIHB1YmxpYyBBV1NTeXN0ZW1zTWFuYWdlckZvclNBUFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N5c3RlbXNNYW5hZ2VyRm9yU0FQUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIHJlc291cmNlcyBtYW5hZ2VkIG9yIHVzZWQgYnkgdGhlIEFXUyBTeXN0ZW1zIE1hbmFnZXIganVzdCBpbiB0aW1lIGFjY2VzcyBmcmFtZXdvcmsuICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VySnVzdEluVGltZUFjY2Vzc1NlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJKdXN0SW5UaW1lQWNjZXNzU2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBtYW5hZ2VkIHBvbGljeSBBV1NTeXN0ZW1zTWFuYWdlckp1c3RJblRpbWVBY2Nlc3NUb2tlblBvbGljeSBhbGxvd3MgU3lzdGVtcyBNYW5hZ2VyIHRvIGdlbmVyYXRlIGFjY2VzcyB0b2tlbnMgdXNlZCBmb3IganVzdC1pbi10aW1lIG5vZGUgYWNjZXNzLiAqL1xuICAgIHB1YmxpYyBBV1NTeXN0ZW1zTWFuYWdlckp1c3RJblRpbWVBY2Nlc3NUb2tlblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTeXN0ZW1zTWFuYWdlckp1c3RJblRpbWVBY2Nlc3NUb2tlblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBtYW5hZ2VkIHBvbGljeSBBV1NTeXN0ZW1zTWFuYWdlckp1c3RJblRpbWVBY2Nlc3NUb2tlblNlc3Npb25Qb2xpY3kgYWxsb3dzIFN5c3RlbXMgTWFuYWdlciB0byBhcHBseSBzY29wZWQgZG93biBwZXJtaXNzaW9ucyB0byBhIGp1c3QtaW4tdGltZSBub2RlIGFjY2VzcyBzZXNzaW9uIG9uY2UgaXQgaXMgc3RhcnRlZC4gKi9cbiAgICBwdWJsaWMgQVdTU3lzdGVtc01hbmFnZXJKdXN0SW5UaW1lQWNjZXNzVG9rZW5TZXNzaW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N5c3RlbXNNYW5hZ2VySnVzdEluVGltZUFjY2Vzc1Rva2VuU2Vzc2lvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBTeXN0ZW1zIE1hbmFnZXIgdG8gc2hhcmUgYSBkZW55LWFjY2VzcyBwb2xpY3kgZm9yIGp1c3QtaW4tdGltZSBub2RlIGFjY2VzcyBmcm9tIHRoZSBkZWxlZ2F0ZWQgYWRtaW5pc3RyYXRvciBhY2NvdW50IHRvIG1lbWJlciBhY2NvdW50cywgYW5kIHJlcGxpY2F0ZSB0aGUgcG9saWN5IHRvIG11bHRpcGxlIFJlZ2lvbnMuICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VySnVzdEluVGltZU5vZGVBY2Nlc3NSb2xlUHJvcGFnYXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJKdXN0SW5UaW1lTm9kZUFjY2Vzc1JvbGVQcm9wYWdhdGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIGNvbGxlY3QgaW5mb3JtYXRpb24gYWJvdXQgYSB1c2VyIGZvciBKdXN0LUluLVRpbWUtTm9kZS1BY2Nlc3Mgbm90aWZpY2F0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTU3lzdGVtc01hbmFnZXJOb3RpZmljYXRpb25zU2VydmljZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTeXN0ZW1zTWFuYWdlck5vdGlmaWNhdGlvbnNTZXJ2aWNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogSUFNIHJvbGUgZm9yIFNTTSBFeHBsb3JlciB0byBtYW5hZ2UgT3BzRGF0YSByZWxhdGVkIG9wZXJhdGlvbnMgKi9cbiAgICBwdWJsaWMgQVdTU3lzdGVtc01hbmFnZXJPcHNEYXRhU3luY1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N5c3RlbXNNYW5hZ2VyT3BzRGF0YVN5bmNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyB0aGUgQVdTIFBvcnRhbCBBc3NldCBTZXJ2ZXIgdGhlIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTVGhpbmtib3hBc3NldFNlcnZlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUaGlua2JveEFzc2V0U2VydmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIEFXUyBUaGlua2JveCdzIERlYWRsaW5lIHNvZnR3YXJlIGZ1bGwgYWNjZXNzIHRvIG11bHRpcGxlIEFXUyBzZXJ2aWNlcyBhcyByZXF1aXJlZCBmb3IgQVdTIFBvcnRhbCBhZG1pbmlzdHJhdGlvbi4gVGhpcyBpbmNsdWRlcyBhY2Nlc3MgdG8gY3JlYXRlIGFyYml0cmFyeSB0YWdzIG9uIHNldmVyYWwgRUMyIHJlc291cmNlIHR5cGVzLiAqL1xuICAgIHB1YmxpYyBBV1NUaGlua2JveEFXU1BvcnRhbEFkbWluUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RoaW5rYm94QVdTUG9ydGFsQWRtaW5Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgdGhlIEFXUyBQb3J0YWwgR2F0ZXdheSBtYWNoaW5lIHRoZSBuZWNlc3NhcnkgcGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIG5vcm1hbCBvcGVyYXRpb24uICovXG4gICAgcHVibGljIEFXU1RoaW5rYm94QVdTUG9ydGFsR2F0ZXdheVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUaGlua2JveEFXU1BvcnRhbEdhdGV3YXlQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgdGhlIERlYWRsaW5lIFdvcmtlcnMgaW4gQVdTIFBvcnRhbCB0aGUgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NUaGlua2JveEFXU1BvcnRhbFdvcmtlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUaGlua2JveEFXU1BvcnRhbFdvcmtlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3IgdGhlIG9wZXJhdGlvbiBvZiBBV1MgVGhpbmtib3gncyBEZWFkbGluZSBSZXNvdXJjZSBUcmFja2VyLiAgVGhpcyBpbmNsdWRlcyBmdWxsIGFjY2VzcyB0byBzb21lIEVDMiBhY3Rpb25zLCBpbmNsdWRpbmcgRGVsZXRlRmxlZXRzIGFuZCBDYW5jZWxTcG90RmxlZXRSZXF1ZXN0cy4gKi9cbiAgICBwdWJsaWMgQVdTVGhpbmtib3hEZWFkbGluZVJlc291cmNlVHJhY2tlckFjY2Vzc1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUaGlua2JveERlYWRsaW5lUmVzb3VyY2VUcmFja2VyQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIGNyZWF0ZSwgZGVzdHJveSwgYW5kIGFkbWluaXN0ZXIgQVdTIFRoaW5rYm94J3MgRGVhZGxpbmUgUmVzb3VyY2UgVHJhY2tlci4gKi9cbiAgICBwdWJsaWMgQVdTVGhpbmtib3hEZWFkbGluZVJlc291cmNlVHJhY2tlckFkbWluUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RoaW5rYm94RGVhZGxpbmVSZXNvdXJjZVRyYWNrZXJBZG1pblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3IgQVdTIFRoaW5rYm94J3MgRGVhZGxpbmUgU3BvdCBFdmVudCBQbHVnaW4uICBUaGlzIGluY2x1ZGVzIHBlcm1pc3Npb24gdG8gcmVxdWVzdCwgbW9kaWZ5LCBhbmQgY2FuY2VsIGEgc3BvdCBmbGVldCwgYXMgd2VsbCBhcyBsaW1pdGVkIFBhc3NSb2xlIHBlcm1pc3Npb24uICovXG4gICAgcHVibGljIEFXU1RoaW5rYm94RGVhZGxpbmVTcG90RXZlbnRQbHVnaW5BZG1pblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUaGlua2JveERlYWRsaW5lU3BvdEV2ZW50UGx1Z2luQWRtaW5Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudCBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3IgYW4gRUMyIGluc3RhbmNlIHJ1bm5pbmcgQVdTIFRoaW5rYm94IERlYWRsaW5lIFNwb3QgRXZlbnQgUGx1Z2luIFdvcmtlciBzb2Z0d2FyZS4gKi9cbiAgICBwdWJsaWMgQVdTVGhpbmtib3hEZWFkbGluZVNwb3RFdmVudFBsdWdpbldvcmtlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUaGlua2JveERlYWRsaW5lU3BvdEV2ZW50UGx1Z2luV29ya2VyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFRyYW5zZmVyIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBBV1NUcmFuc2ZlckNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RyYW5zZmVyQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgVHJhbnNmZXIgU2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTVHJhbnNmZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RyYW5zZmVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgVHJhbnNmZXIgZnVsbCBhY2Nlc3MgdG8gY3JlYXRlIGxvZyBzdHJlYW1zIGFuZCBncm91cHMgYW5kIHB1dCBsb2cgZXZlbnRzIHRvIHlvdXIgYWNjb3VudCAqL1xuICAgIHB1YmxpYyBBV1NUcmFuc2ZlckxvZ2dpbmdBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmZXJMb2dnaW5nQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSByZWFkb25seSBhY2Nlc3MgdG8gQVdTIFRyYW5zZmVyIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NUcmFuc2ZlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RyYW5zZmVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIHRoZSBBV1MgVHJhbnNmb3JtIHNlcnZpY2UgdG8gZGVwbG95IHRyYW5zZm9ybWVkIC5ORVQgYXBwbGljYXRpb25zIGJ5IGNyZWF0aW5nIGFuZCBtYW5hZ2luZyBBV1MgcmVzb3VyY2VzLiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gcHJvdmlzaW9uIGluZnJhc3RydWN0dXJlLCBtYW5hZ2UgY29tcHV0ZSByZXNvdXJjZXMsIGFuZCBjb25maWd1cmUgZGVwbG95bWVudCBzZXR0aW5ncyBhY3Jvc3MgdmFyaW91cyBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU1RyYW5zZm9ybUFwcGxpY2F0aW9uRGVwbG95bWVudFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcmFuc2Zvcm1BcHBsaWNhdGlvbkRlcGxveW1lbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIHRoZSBBV1MgVHJhbnNmb3JtIHRvIGRlcGxveSBhcHBsaWNhdGlvbnMgdG8gQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgKEVDUykgd2l0aCBGYXJnYXRlLiBJdCBncmFudHMgcGVybWlzc2lvbnMgdG8gcHJvdmlzaW9uLCBjb25maWd1cmUsIGFuZCBtYW5hZ2UgdGhlIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmUgcmVxdWlyZWQgdG8gcnVuIGFwcGxpY2F0aW9ucyBvbiBFQ1MuICovXG4gICAgcHVibGljIEFXU1RyYW5zZm9ybUFwcGxpY2F0aW9uRUNTRGVwbG95bWVudFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcmFuc2Zvcm1BcHBsaWNhdGlvbkVDU0RlcGxveW1lbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gZXhlY3V0ZSB0cmFuc2Zvcm1hdGlvbnMgaW4gQVdTIFRyYW5zZm9ybSBjdXN0b20uICovXG4gICAgcHVibGljIEFXU1RyYW5zZm9ybUN1c3RvbUV4ZWN1dGVUcmFuc2Zvcm1hdGlvbnMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmb3JtQ3VzdG9tRXhlY3V0ZVRyYW5zZm9ybWF0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBUcmFuc2Zvcm0gY3VzdG9tLiAqL1xuICAgIHB1YmxpYyBBV1NUcmFuc2Zvcm1DdXN0b21GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RyYW5zZm9ybUN1c3RvbUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIHRoZSBtYW5hZ2VtZW50IG9mIHRyYW5zZm9ybWF0aW9uIHJlc291cmNlcyBhbmQgZXhlY3V0aW9uIG9mIHRyYW5zZm9ybWF0aW9ucyBpbiBBV1MgVHJhbnNmb3JtIGN1c3RvbS4gKi9cbiAgICBwdWJsaWMgQVdTVHJhbnNmb3JtQ3VzdG9tTWFuYWdlVHJhbnNmb3JtYXRpb25zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RyYW5zZm9ybUN1c3RvbU1hbmFnZVRyYW5zZm9ybWF0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBUcnVzdGVkIEFkdmlzb3IgUHJpb3JpdHkuIFRoaXMgcG9saWN5IGFsc28gZW5hYmxlcyB0aGUgdXNlciB0byBhZGQgVHJ1c3RlZCBBZHZpc29yIGFzIGEgdHJ1c3RlZCBzZXJ2aWNlIHdpdGggQVdTIE9yZ2FuaXphdGlvbnMgYW5kIHRvIHNwZWNpZnkgZGVsZWdhdGVkIGFkbWluaXN0cmF0b3IgYWNjb3VudHMgZm9yIFRydXN0ZWQgQWR2aXNvciBQcmlvcml0eS4gKi9cbiAgICBwdWJsaWMgQVdTVHJ1c3RlZEFkdmlzb3JQcmlvcml0eUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJ1c3RlZEFkdmlzb3JQcmlvcml0eUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBUcnVzdGVkIEFkdmlzb3IgUHJpb3JpdHkuIFRoaXMgaW5jbHVkZXMgcGVybWlzc2lvbiB0byB2aWV3IHRoZSBkZWxlZ2F0ZWQgYWRtaW5pc3RyYXRvciBhY2NvdW50cy4gKi9cbiAgICBwdWJsaWMgQVdTVHJ1c3RlZEFkdmlzb3JQcmlvcml0eVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RydXN0ZWRBZHZpc29yUHJpb3JpdHlSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UgUG9saWN5IGZvciBUcnVzdGVkIEFkdmlzb3IgTXVsdGktYWNjb3VudCBSZXBvcnRpbmcgKi9cbiAgICBwdWJsaWMgQVdTVHJ1c3RlZEFkdmlzb3JSZXBvcnRpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcnVzdGVkQWR2aXNvclJlcG9ydGluZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNzIGZvciB0aGUgQVdTIFRydXN0ZWQgQWR2aXNvciBTZXJ2aWNlIHRvIGhlbHAgcmVkdWNlIGNvc3QsIGluY3JlYXNlIHBlcmZvcm1hbmNlLCBhbmQgaW1wcm92ZSBzZWN1cml0eSBvZiB5b3VyIEFXUyBlbnZpcm9ubWVudC4gKi9cbiAgICBwdWJsaWMgQVdTVHJ1c3RlZEFkdmlzb3JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcnVzdGVkQWR2aXNvclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBVc2VyIE5vdGlmaWNhdGlvbnMgdG8gY2FsbCBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU1VzZXJOb3RpZmljYXRpb25zU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVXNlck5vdGlmaWNhdGlvbnNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIGZvciB2aWV3aW5nIGVudGl0bGVkIFZlbmRvciBJbnNpZ2h0cyByZXNvdXJjZXMgYW5kIG1hbmFnaW5nIFZlbmRvciBJbnNpZ2h0cyBzdWJzY3JpcHRpb25zICovXG4gICAgcHVibGljIEFXU1ZlbmRvckluc2lnaHRzQXNzZXNzb3JGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ZlbmRvckluc2lnaHRzQXNzZXNzb3JGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyBmb3Igdmlld2luZyBlbnRpdGxlZCBWZW5kb3IgSW5zaWdodHMgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU1ZlbmRvckluc2lnaHRzQXNzZXNzb3JSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NWZW5kb3JJbnNpZ2h0c0Fzc2Vzc29yUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyBmb3IgY3JlYXRpbmcgYW5kIG1hbmFnaW5nIHRoZSBWZW5kb3IgSW5zaWdodHMgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU1ZlbmRvckluc2lnaHRzVmVuZG9yRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NWZW5kb3JJbnNpZ2h0c1ZlbmRvckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIGZvciB2aWV3aW5nIHRoZSBWZW5kb3IgSW5zaWdodHMgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU1ZlbmRvckluc2lnaHRzVmVuZG9yUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVmVuZG9ySW5zaWdodHNWZW5kb3JSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBWUEMgTGF0dGljZSB0byBhY2Nlc3MgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTVnBjTGF0dGljZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ZwY0xhdHRpY2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IFNpdGUtdG8tU2l0ZSBWUE4gdG8gY3JlYXRlIGFuZCBtYW5hZ2UgcmVzb3VyY2VzIHJlbGF0ZWQgdG8geW91ciBWUE4gQ29ubmVjdGlvbnMuICovXG4gICAgcHVibGljIEFXU1ZQQ1MyU1ZwblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ZQQ1MyU1ZwblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgVlBDIFRyYW5zaXQgR2F0ZXdheSB0byBjcmVhdGUgYW5kIG1hbmFnZSBuZWNlc3NhcnkgcmVzb3VyY2VzIGZvciB5b3VyIFRyYW5zaXQgR2F0ZXdheSBWUEMgQXR0YWNobWVudHMuICovXG4gICAgcHVibGljIEFXU1ZQQ1RyYW5zaXRHYXRld2F5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVlBDVHJhbnNpdEdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQVdTIFZlcmlmaWVkIEFjY2VzcyBzZXJ2aWNlIHRvIHByb3Zpc2lvbiBlbmRwb2ludHMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTVlBDVmVyaWZpZWRBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NWUENWZXJpZmllZEFjY2Vzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFdBRiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuIE5vdGUgdGhhdCB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBwZXJtaXNzaW9ucyB0byBsaXN0IGFuZCB1cGRhdGUgQW1hem9uIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9ucywgcGVybWlzc2lvbnMgdG8gdmlldyBsb2FkIGJhbGFuY2VycyBvbiBBV1MgRWxhc3RpYyBMb2FkIEJhbGFuY2luZywgcGVybWlzc2lvbnMgdG8gdmlldyBBbWF6b24gQVBJIEdhdGV3YXkgUkVTVCBBUElzIGFuZCBzdGFnZXMsIHBlcm1pc3Npb25zIHRvIGxpc3QgYW5kIHZpZXcgQW1hem9uIENsb3VkV2F0Y2ggbWV0cmljcywgYW5kIHBlcm1pc3Npb25zIHRvIHZpZXcgcmVnaW9ucyBlbmFibGVkIHdpdGhpbiB0aGUgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQVdTV0FGQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTV0FGQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBXQUYgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiBOb3RlIHRoYXQgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgcGVybWlzc2lvbnMgdG8gbGlzdCBBbWF6b24gQ2xvdWRGcm9udCBkaXN0cmlidXRpb25zLCBwZXJtaXNzaW9ucyB0byB2aWV3IGxvYWQgYmFsYW5jZXJzIG9uIEFXUyBFbGFzdGljIExvYWQgQmFsYW5jaW5nLCBwZXJtaXNzaW9ucyB0byB2aWV3IEFtYXpvbiBBUEkgR2F0ZXdheSBSRVNUIEFQSXMgYW5kIHN0YWdlcywgcGVybWlzc2lvbnMgdG8gbGlzdCBhbmQgdmlldyBBbWF6b24gQ2xvdWRXYXRjaCBtZXRyaWNzLCBhbmQgcGVybWlzc2lvbnMgdG8gdmlldyByZWdpb25zIGVuYWJsZWQgd2l0aGluIHRoZSBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBV1NXQUZDb25zb2xlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTV0FGQ29uc29sZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFdBRiBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NXQUZGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1dBRkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBXQUYgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTV0FGUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTV0FGUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgV2VsbEFyY2hpdGVjdGVkIHRvIGFjY2VzcyBBV1Mgc2VydmljZXMgYW5kIHJlc291cmNlcyB0aGF0IHJlbGF0ZSB0byBXZWxsQXJjaGl0ZWN0ZWQgcmVzb3VyY2VzIG9uIGJlaGFsZiBvZiBjdXN0b21lcnMuICovXG4gICAgcHVibGljIEFXU1dlbGxBcmNoaXRlY3RlZERpc2NvdmVyeVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1dlbGxBcmNoaXRlY3RlZERpc2NvdmVyeVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFdlbGwtQXJjaGl0ZWN0ZWQgdG8gYWNjZXNzIE9yZ2FuaXphdGlvbnMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU1dlbGxBcmNoaXRlY3RlZE9yZ2FuaXphdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NXZWxsQXJjaGl0ZWN0ZWRPcmdhbml6YXRpb25zU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgZnVsbCBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucyB0byB0aGUgV2lja3Igc2VydmljZSwgaW5jbHVkaW5nIHRoZSBXaWNrciBhZG1pbmlzdHJhdGl2ZSBmdW5jdGlvbnMgdW5kZXIgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU1dpY2tyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NXaWNrckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjYXBhYmlsaXRpZXMgdG8gbWFuYWdlIE9ic2VydmFiaWxpdHkgQWNjZXNzIE1hbmFnZXIgbGlua3MgYW5kIGVzdGFibGlzaCBzaGFyaW5nIG9mIFgtUmF5IHRyYWNlcyAqL1xuICAgIHB1YmxpYyBBV1NYcmF5Q3Jvc3NBY2NvdW50U2hhcmluZ0NvbmZpZ3VyYXRpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTWHJheUNyb3NzQWNjb3VudFNoYXJpbmdDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgdGhlIEFXUyBYLVJheSBEYWVtb24gdG8gcmVsYXkgcmF3IHRyYWNlIHNlZ21lbnRzIGRhdGEgdG8gdGhlIHNlcnZpY2UncyBBUEkgYW5kIHJldHJpZXZlIHNhbXBsaW5nIGRhdGEgKHJ1bGVzLCB0YXJnZXRzLCBldGMuKSB0byBiZSB1c2VkIGJ5IHRoZSBYLVJheSBTREsuICovXG4gICAgcHVibGljIEFXU1hSYXlEYWVtb25Xcml0ZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NYUmF5RGFlbW9uV3JpdGVBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgWC1SYXkgZnVsbCBhY2Nlc3MgbWFuYWdlZCBwb2xpY3kgKi9cbiAgICBwdWJsaWMgQVdTWHJheUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTWHJheUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgWC1SYXkgcmVhZCBvbmx5IG1hbmFnZWQgcG9saWN5ICovXG4gICAgcHVibGljIEFXU1hyYXlSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NYcmF5UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgWC1SYXkgd3JpdGUgb25seSBtYW5hZ2VkIHBvbGljeSAqL1xuICAgIHB1YmxpYyBBV1NYcmF5V3JpdGVPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1hyYXlXcml0ZU9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgZm9yIEFSQyB6b25hbCBzaGlmdCBwcmFjdGljZSBydW5zLCBhbmQgYWNjZXNzIHRvIENsb3VkV2F0Y2ggYWxhcm0gc3RhdHVzZXMgdG8gbW9uaXRvciBwcmFjdGljZSBydW5zLiAqL1xuICAgIHB1YmxpYyBBV1Nab25hbEF1dG9zaGlmdFByYWN0aWNlUnVuU0xSUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1pvbmFsQXV0b3NoaWZ0UHJhY3RpY2VSdW5TTFJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBBUElzIG5lZWRlZCB0byBzdXBwb3J0IHpvbmUtZ3JvdXAgYWNjZXNzLW1hbmFnZW1lbnQgZm9yIG9yZ2FuaXphdGlvbnMuICovXG4gICAgcHVibGljIEFXU1pvbmVHcm91cEFjY2Vzc01hbmFnZW1lbnRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1Nab25lR3JvdXBBY2Nlc3NNYW5hZ2VtZW50U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgZm9yIHRoZSBBV1MgQmF0Y2ggc2VydmljZSB0byBtYW5hZ2UgdGhlIHJlcXVpcmVkIHJlc291cmNlcywgaW5jbHVkaW5nIEFtYXpvbiBFQzIgYW5kIEFtYXpvbiBFQ1MgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBCYXRjaFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkJhdGNoU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBCZWRyb2NrIEFnZW50Q29yZSBhcyB3ZWxsIGFzIGxpbWl0ZWQgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQmVkcm9ja0FnZW50Q29yZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQmVkcm9ja0FnZW50Q29yZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlIHJlc291cmNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBydW4gQW1hem9uIEJlZHJvY2sgQWdlbnRDb3JlIGluIFZQQyBtb2RlICovXG4gICAgcHVibGljIEJlZHJvY2tBZ2VudENvcmVOZXR3b3JrU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQmVkcm9ja0FnZW50Q29yZU5ldHdvcmtTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhY2Nlc3MgdG8gaWRlbnRpdHkgYW5kIHRva2VuIG1hbmFnZW1lbnQgcmVzb3VyY2VzIHRoYXQgYXJlIHJlcXVpcmVkIGZvciBBbWF6b24gQmVkcm9jayBBZ2VudENvcmUgUnVudGltZSBhdXRoZW50aWNhdGlvbiBhbmQgYXV0aG9yaXphdGlvbi4gKi9cbiAgICBwdWJsaWMgQmVkcm9ja0FnZW50Q29yZVJ1bnRpbWVJZGVudGl0eVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkJlZHJvY2tBZ2VudENvcmVSdW50aW1lSWRlbnRpdHlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyBmb3IgYmlsbGluZyBhbmQgY29zdCBtYW5hZ2VtZW50LiBUaGlzIGluY2x1ZGVzIHZpZXdpbmcgYWNjb3VudCB1c2FnZSBhbmQgdmlld2luZyBhbmQgbW9kaWZ5aW5nIGJ1ZGdldHMgYW5kIHBheW1lbnQgbWV0aG9kcy4gKi9cbiAgICBwdWJsaWMgQmlsbGluZygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5CaWxsaW5nKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEJ1ZGdldHMgdG8gdmVyaWZ5IGFjY2VzcyB0byBCaWxsaW5nIFZpZXdzIHNoYXJlZCBhY3Jvc3MgYWNjb3VudCBib3VuZGFyaWVzLiAqL1xuICAgIHB1YmxpYyBCdWRnZXRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQnVkZ2V0c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIENlcnRpZmljYXRlIE1hbmFnZXIgU2VydmljZSBSb2xlIFBvbGljeSAqL1xuICAgIHB1YmxpYyBDZXJ0aWZpY2F0ZU1hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DZXJ0aWZpY2F0ZU1hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQVdTIENsaWVudCBWUE4gdG8gbWFuYWdlIHlvdXIgQ2xpZW50IFZQTiBlbmRwb2ludCBjb25uZWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQ2xpZW50VlBOU2VydmljZUNvbm5lY3Rpb25zUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbGllbnRWUE5TZXJ2aWNlQ29ubmVjdGlvbnNSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBBV1MgQ2xpZW50IFZQTiB0byBtYW5hZ2UgeW91ciBDbGllbnQgVlBOIGVuZHBvaW50cy4gKi9cbiAgICBwdWJsaWMgQ2xpZW50VlBOU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xpZW50VlBOU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIFJvbGUgZm9yIENsb3VkRm9ybWF0aW9uIFN0YWNrU2V0cyAoT3JnYW5pemF0aW9uIE1hc3RlciBBY2NvdW50KSAqL1xuICAgIHB1YmxpYyBDbG91ZEZvcm1hdGlvblN0YWNrU2V0c09yZ0FkbWluU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRGb3JtYXRpb25TdGFja1NldHNPcmdBZG1pblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSBSb2xlIGZvciBDbG91ZEZvcm1hdGlvbiBTdGFja1NldHMgKE9yZ2FuaXphdGlvbiBNZW1iZXIgQWNjb3VudCkgKi9cbiAgICBwdWJsaWMgQ2xvdWRGb3JtYXRpb25TdGFja1NldHNPcmdNZW1iZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZEZvcm1hdGlvblN0YWNrU2V0c09yZ01lbWJlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIENsb3VkRnJvbnQgY29uc29sZSBwbHVzIHRoZSBhYmlsaXR5IHRvIGxpc3QgQW1hem9uIFMzIGJ1Y2tldHMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBDbG91ZEZyb250RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZEZyb250RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZCBsaXN0IGRpc3RyaWJ1dGlvbnMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBDbG91ZEZyb250UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRGcm9udFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIHJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQ2xvdWRIU00gKi9cbiAgICBwdWJsaWMgQ2xvdWRIU01TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZEhTTVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBDbG91ZFNlYXJjaCBjb25maWd1cmF0aW9uIHNlcnZpY2UuICovXG4gICAgcHVibGljIENsb3VkU2VhcmNoRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFNlYXJjaEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBBbWF6b24gQ2xvdWRTZWFyY2ggY29uZmlndXJhdGlvbiBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBDbG91ZFNlYXJjaFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkU2VhcmNoUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHNlcnZpY2UgbGlua2VkIHJvbGUgYWxsb3dzIENsb3VkVHJhaWwgdG8gZ2V0IGFuZCBhZGQgcmVzb3VyY2UgdGFncyB0byB0aGUgcmVzb3VyY2Ugb3duZXIncyBDbG91ZFRyYWlsIGV2ZW50cy4gKi9cbiAgICBwdWJsaWMgQ2xvdWRUcmFpbEV2ZW50Q29udGV4dCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFRyYWlsRXZlbnRDb250ZXh0KTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbiBwb2xpY3kgZm9yIENsb3VkVHJhaWwgU2VydmljZUxpbmtlZFJvbGUgKi9cbiAgICBwdWJsaWMgQ2xvdWRUcmFpbFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkVHJhaWxTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBDbG91ZFdhdGNoIHRvIGFzc3VtZSBDbG91ZFdhdGNoLUNyb3NzQWNjb3VudFNoYXJpbmcgcm9sZXMgaW4gcmVtb3RlIGFjY291bnRzIG9uIGJlaGFsZiBvZiB0aGUgY3VycmVudCBhY2NvdW50IGluIG9yZGVyIHRvIGRpc3BsYXkgZGF0YSBjcm9zcy1hY2NvdW50LCBjcm9zcy1yZWdpb24gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaENyb3NzQWNjb3VudEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoQ3Jvc3NBY2NvdW50QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBDbG91ZFdhdGNoIGFsYXJtcyBhbmQgbWV0cmljcyBhcyB3ZWxsIGFzIEVDMiBtZXRhZGF0YS4gUHJvdmlkZXMgYWNjZXNzIHRvIFN0b3AsIFRlcm1pbmF0ZSBhbmQgUmVib290IEVDMiBpbnN0YW5jZXMuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hBY3Rpb25zRUMyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hBY3Rpb25zRUMyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRnVsbCBwZXJtaXNzaW9ucyByZXF1aXJlZCB0byB1c2UgQW1hem9uQ2xvdWRXYXRjaEFnZW50LiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoQWdlbnRBZG1pblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoQWdlbnRBZG1pblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIHVzZSBBbWF6b25DbG91ZFdhdGNoQWdlbnQgb24gc2VydmVycyAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoQWdlbnRTZXJ2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEFnZW50U2VydmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBBcHBsaWNhdGlvbiBJbnNpZ2h0cyBhbmQgcmVxdWlyZWQgZGVwZW5kZW5jaWVzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoQXBwbGljYXRpb25JbnNpZ2h0c0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEFwcGxpY2F0aW9uSW5zaWdodHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDbG91ZFdhdGNoIEFwcGxpY2F0aW9uIEluc2lnaHRzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoQXBwbGljYXRpb25JbnNpZ2h0c1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hBcHBsaWNhdGlvbkluc2lnaHRzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBDbG91ZHdhdGNoIEFwcGxpY2F0aW9uIEluc2lnaHRzIFNlcnZpY2UgTGlua2VkIFJvbGUgUG9saWN5ICovXG4gICAgcHVibGljIENsb3Vkd2F0Y2hBcHBsaWNhdGlvbkluc2lnaHRzU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWR3YXRjaEFwcGxpY2F0aW9uSW5zaWdodHNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBBcHBsaWNhdGlvbiBTaWduYWxzIHNlcnZpY2UgYW5kIHNjb3BlZCBhY2Nlc3MgdG8gdGhlIGRlcGVuZGVuY2llcyBuZWVkZWQgdG8gdXNlIGFuZCBvcGVyYXRlIHRoaXMgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEFwcGxpY2F0aW9uU2lnbmFsc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEFwcGxpY2F0aW9uU2lnbmFsc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIENsb3VkV2F0Y2ggQXBwbGljYXRpb24gU2lnbmFscyBzZXJ2aWNlIGFuZCBzY29wZWQgYWNjZXNzIHRvIHRoZSBkZXBlbmRlbmNpZXMgbmVlZGVkIHRvIHVzZSB0aGlzIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEFwcGxpY2F0aW9uU2lnbmFsc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hBcHBsaWNhdGlvblNpZ25hbHNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudHMgcGVybWlzc2lvbiB0byBDbG91ZFdhdGNoIEFwcGxpY2F0aW9uIFNpZ25hbHMgdG8gY29sbGVjdCBtb25pdG9yaW5nIGFuZCB0YWdnaW5nIGRhdGEgZnJvbSBvdGhlciByZWxldmFudCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hBcHBsaWNhdGlvblNpZ25hbHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoQXBwbGljYXRpb25TaWduYWxzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIG5vbi1DbG91ZFdhdGNoIEFQSXMgdXNlZCB0byBkaXNwbGF5IENsb3VkV2F0Y2ggQXV0b21hdGljIERhc2hib2FyZHMsIGluY2x1ZGluZyB0aGUgY29udGVudHMgb2Ygb2JqZWN0cyBzdWNoIGFzIExhbWJkYSBmdW5jdGlvbnMgKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEF1dG9tYXRpY0Rhc2hib2FyZHNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEF1dG9tYXRpY0Rhc2hib2FyZHNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjYXBhYmlsaXRpZXMgdG8gbWFuYWdlIE9ic2VydmFiaWxpdHkgQWNjZXNzIE1hbmFnZXIgbGlua3MgYW5kIGVzdGFibGlzaCBzaGFyaW5nIG9mIENsb3VkV2F0Y2ggcmVzb3VyY2VzICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hDcm9zc0FjY291bnRTaGFyaW5nQ29uZmlndXJhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoQ3Jvc3NBY2NvdW50U2hhcmluZ0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYnVpbHQtaW4gdGFyZ2V0cyBpbiBBbWF6b24gQ2xvdWRXYXRjaCBFdmVudHMgdG8gcGVyZm9ybSBFQzIgYWN0aW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEV2ZW50c0J1aWx0SW5UYXJnZXRFeGVjdXRpb25BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEV2ZW50c0J1aWx0SW5UYXJnZXRFeGVjdXRpb25BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQ2xvdWRXYXRjaCBFdmVudHMuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hFdmVudHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hFdmVudHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBDbG91ZFdhdGNoIEV2ZW50cyB0byByZWxheSBldmVudHMgdG8gdGhlIHN0cmVhbXMgaW4gQVdTIEtpbmVzaXMgU3RyZWFtcyBpbiB5b3VyIGFjY291bnQuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hFdmVudHNJbnZvY2F0aW9uQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hFdmVudHNJbnZvY2F0aW9uQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQ2xvdWRXYXRjaCBFdmVudHMuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hFdmVudHNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoRXZlbnRzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBBV1MgQ2xvdWRXYXRjaCB0byBleGVjdXRlIGFjdGlvbnMgb24geW91ciBiZWhhbGYgY29uZmlndXJlZCB0aHJvdWdoIGFsYXJtcyBhbmQgZXZlbnRzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoRXZlbnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEV2ZW50c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoRnVsbEFjY2Vzc1YyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hGdWxsQWNjZXNzVjIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhY3Rpb25zIGZvciB3b3JraW5nIHdpdGggQW1hem9uIENsb3VkV2F0Y2ggSW50ZXJuZXQgTW9uaXRvci4gQWxzbyBwcm92aWRlcyBhY2Nlc3MgdG8gb3RoZXIgc2VydmljZXMsIHN1Y2ggYXMgQW1hem9uIENsb3VkV2F0Y2gsIEFtYXpvbiBFQzIsIEFtYXpvbiBDbG91ZEZyb250LCBBbWF6b24gV29ya1NwYWNlcywgYW5kIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcsIHRoYXQgYXJlIG5lY2Vzc2FyeSB0byB1c2UgdGhlIEludGVybmV0IE1vbml0b3Igc2VydmljZSBmb3IgbW9uaXRvcmluZyBhbmQgc3RvcmluZyBpbmZvcm1hdGlvbiBhYm91dCBhcHBsaWNhdGlvbiB0cmFmZmljLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoSW50ZXJuZXRNb25pdG9yRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoSW50ZXJuZXRNb25pdG9yRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWN0aW9ucyBmb3Igd29ya2luZyB3aXRoIEFtYXpvbiBDbG91ZFdhdGNoIEludGVybmV0IE1vbml0b3IuIEFsc28gcHJvdmlkZXMgYWNjZXNzIHRvIG90aGVyIHNlcnZpY2VzIGluIEFtYXpvbiBDbG91ZFdhdGNoLCBpbmNsdWRpbmcgcG9saWNpZXMgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gb24gQ2xvdWRXYXRjaCBtZXRyaWNzIGFuZCB0byBtYW5hZ2UgbG9nIHF1ZXJpZXMsIHRoYXQgYXJlIG5lY2Vzc2FyeSB0byB1c2UgdGhlIEludGVybmV0IE1vbml0b3Igc2VydmljZSBmb3IgbW9uaXRvcmluZyBhbmQgc3RvcmluZyBpbmZvcm1hdGlvbiBhYm91dCBhcHBsaWNhdGlvbiB0cmFmZmljLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoSW50ZXJuZXRNb25pdG9yUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEludGVybmV0TW9uaXRvclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEludGVybmV0IE1vbml0b3IgdG8gYWNjZXNzIEVDMiwgV29ya3NwYWNlcywgYW5kIENsb3VkRnJvbnQgcmVzb3VyY2VzLCBhbmQgb3RoZXIgcmVxdWlyZWQgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hJbnRlcm5ldE1vbml0b3JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoSW50ZXJuZXRNb25pdG9yU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB3cml0ZSBhY2Nlc3MgdG8gWC1SYXkgYW5kIENsb3VkV2F0Y2ggQXBwbGljYXRpb24gU2lnbmFscyBsb2cgZ3JvdXAuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hMYW1iZGFBcHBsaWNhdGlvblNpZ25hbHNFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hMYW1iZGFBcHBsaWNhdGlvblNpZ25hbHNFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHJlcXVpcmVkIGZvciB0aGUgTGFtYmRhIEluc2lnaHRzIEV4dGVuc2lvbiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoTGFtYmRhSW5zaWdodHNFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hMYW1iZGFJbnNpZ2h0c0V4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjYXBhYmlsaXRpZXMgdG8gbWFuYWdlIE9ic2VydmFiaWxpdHkgQWNjZXNzIE1hbmFnZXIgbGlua3MgYW5kIGVzdGFibGlzaCBzaGFyaW5nIG9mIENsb3VkV2F0Y2ggTG9ncyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaExvZ3NDcm9zc0FjY291bnRTaGFyaW5nQ29uZmlndXJhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoTG9nc0Nyb3NzQWNjb3VudFNoYXJpbmdDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBMb2dzICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hMb2dzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoTG9nc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIENsb3VkV2F0Y2ggTG9ncyAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoTG9nc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hMb2dzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBZb3UgY2FuIHVzZSB0aGlzIHBvbGljeSBpbiBJQU0gcm9sZXMgdGhhdCBhcmUgYXR0YWNoZWQgdG8gQW1hem9uIEVDMiBhbmQgQW1hem9uIEVLUyBpbnN0YW5jZSByZXNvdXJjZXMgdG8gc2VuZCB0ZWxlbWV0cnkgcmVwb3J0cyAobWV0cmljcykgdG8gYSBOZXR3b3JrIEZsb3cgTW9uaXRvciBlbmRwb2ludC4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaE5ldHdvcmtGbG93TW9uaXRvckFnZW50UHVibGlzaFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoTmV0d29ya0Zsb3dNb25pdG9yQWdlbnRQdWJsaXNoUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogWW91IGNhbid0IGF0dGFjaCBDbG91ZFdhdGNoTmV0d29ya0Zsb3dNb25pdG9yU2VydmljZVJvbGVQb2xpY3kgdG8geW91ciBJQU0gZW50aXRpZXMuIFRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIHRvIGEgc2VydmljZS1saW5rZWQgcm9sZSBuYW1lZCBBV1NTZXJ2aWNlUm9sZUZvck5ldHdvcmtGbG93TW9uaXRvciwgd2hpY2ggcHVibGlzaGVzIG5ldHdvcmsgdGVsZW1ldHJ5IGFnZ3JlZ2F0aW9uIHJlc3VsdHMsIGNvbGxlY3RlZCBieSBOZXR3b3JrIEZsb3cgTW9uaXRvciBhZ2VudHMsIHRvIENsb3VkV2F0Y2guIEl0IGFsc28gYWxsb3dzIHRoZSBzZXJ2aWNlIHRvIHVzZSBBV1MgT3JnYW5pemF0aW9ucyB0byBnZXQgaW5mb3JtYXRpb24gZm9yIG11bHRpLWFjY291bnQgc2NlbmFyaW9zLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoTmV0d29ya0Zsb3dNb25pdG9yU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaE5ldHdvcmtGbG93TW9uaXRvclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogWW91IGNhbid0IGF0dGFjaCBDbG91ZFdhdGNoTmV0d29ya0Zsb3dNb25pdG9yVG9wb2xvZ3lTZXJ2aWNlUm9sZVBvbGljeSB0byB5b3VyIElBTSBlbnRpdGllcy4gVGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgdG8gYSBzZXJ2aWNlLWxpbmtlZCByb2xlIG5hbWVkIEFXU1NlcnZpY2VSb2xlRm9yTmV0d29ya0Zsb3dNb25pdG9yX1RvcG9sb2d5LCB3aGljaCBnZW5lcmF0ZXMgdG9wb2xvZ3kgc25hcHNob3RzIG9mIHJlc291cmNlcyB1c2VkIGJ5IE5ldHdvcmsgRmxvdyBNb25pdG9yIGluIHlvdXIgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaE5ldHdvcmtGbG93TW9uaXRvclRvcG9sb2d5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaE5ldHdvcmtGbG93TW9uaXRvclRvcG9sb2d5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQ2xvdWRXYXRjaCBOZXR3b3JrIE1vbml0b3IgdG8gYWNjZXNzIGFuZCBtYW5hZ2UgRUMyIGFuZCBWUEMgcmVzb3VyY2VzLCBwdWJsaXNoIGRhdGEgdG8gQ2xvdWRXYXRjaCBhbmQgYWNjZXNzIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoTmV0d29ya01vbml0b3JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoTmV0d29ya01vbml0b3JTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIHVzZXIgYWNjZXNzIHRvIHZpZXcgT3BlblNlYXJjaCBkYXNoYm9hcmRzIG9uIHRoZSBDbG91ZFdhdGNoIExvZ3MgY29uc29sZS4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaE9wZW5TZWFyY2hEYXNoYm9hcmRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaE9wZW5TZWFyY2hEYXNoYm9hcmRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyB1c2VyIGFjY2VzcyB0byBjcmVhdGUgaW50ZWdyYXRpb24gd2l0aCBPcGVuU2VhcmNoIHRvIGNyZWF0ZSwgdXBkYXRlLCBkZWxldGUgb3IgdmlldyBkYXNoYm9hcmRzIG9uIHRoZSBDbG91ZFdhdGNoIExvZ3MgY29uc29sZS4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaE9wZW5TZWFyY2hEYXNoYm9hcmRzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoT3BlblNlYXJjaERhc2hib2FyZHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBTeW50aGV0aWNzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoU3ludGhldGljc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaFN5bnRoZXRpY3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDbG91ZFdhdGNoIFN5bnRoZXRpY3MuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hTeW50aGV0aWNzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaFN5bnRoZXRpY3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIENvbXByZWhlbmQgc2VydmljZSByb2xlIHdoaWNoIGFsbG93cyBhY2Nlc3MgdG8gUzMgcmVzb3VyY2VzIGZvciBkYXRhIGFjY2VzcyAqL1xuICAgIHB1YmxpYyBDb21wcmVoZW5kRGF0YUFjY2Vzc1JvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29tcHJlaGVuZERhdGFBY2Nlc3NSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIENvbXByZWhlbmQuICovXG4gICAgcHVibGljIENvbXByZWhlbmRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbXByZWhlbmRGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIENvbXByZWhlbmQgTWVkaWNhbCAqL1xuICAgIHB1YmxpYyBDb21wcmVoZW5kTWVkaWNhbEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29tcHJlaGVuZE1lZGljYWxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gQ29tcHJlaGVuZC4gKi9cbiAgICBwdWJsaWMgQ29tcHJlaGVuZFJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbXByZWhlbmRSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBDb21wdXRlT3B0aW1pemVyQXV0b21hdGlvblNlcnZpY2VSb2xlUG9saWN5IG1hbmFnZWQgcG9saWN5IGlzIGF0dGFjaGVkIHRvIGEgc2VydmljZS1saW5rZWQgcm9sZSB0aGF0IGFsbG93cyBDb21wdXRlIE9wdGltaXplciB0byBwZXJmb3JtIGFjdGlvbnMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQ29tcHV0ZU9wdGltaXplckF1dG9tYXRpb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Db21wdXRlT3B0aW1pemVyQXV0b21hdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDb21wdXRlT3B0aW1pemVyLiAqL1xuICAgIHB1YmxpYyBDb21wdXRlT3B0aW1pemVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29tcHV0ZU9wdGltaXplclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENvbXB1dGVPcHRpbWl6ZXIgdG8gY2FsbCBBV1Mgc2VydmljZXMgYW5kIGNvbGxlY3Qgd29ya2xvYWQgZGV0YWlscyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQ29tcHV0ZU9wdGltaXplclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbXB1dGVPcHRpbWl6ZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBuZWVkZWQgZm9yIEFXU0NvbmZpZyB0byBjcmVhdGUgY29uZm9ybWFuY2UgcGFja3MgKi9cbiAgICBwdWJsaWMgQ29uZmlnQ29uZm9ybXNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Db25maWdDb25mb3Jtc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBtYW5hZ2VkIHBvbGljeSBwcm92aWRlcyBhZG1pbiBhY2Nlc3MgdG8gQ29zdCBPcHRpbWl6YXRpb24gSHViLiAqL1xuICAgIHB1YmxpYyBDb3N0T3B0aW1pemF0aW9uSHViQWRtaW5BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29zdE9wdGltaXphdGlvbkh1YkFkbWluQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBtYW5hZ2VkIHBvbGljeSBwcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIENvc3QgT3B0aW1pemF0aW9uIEh1Yi4gKi9cbiAgICBwdWJsaWMgQ29zdE9wdGltaXphdGlvbkh1YlJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvc3RPcHRpbWl6YXRpb25IdWJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBDb3N0IE9wdGltaXphdGlvbiBIdWIgdG8gcmV0cmlldmUgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uIGFuZCBjb2xsZWN0IG9wdGltaXphdGlvbi1yZWxhdGVkIGRhdGEgYW5kIG1ldGFkYXRhLiAqL1xuICAgIHB1YmxpYyBDb3N0T3B0aW1pemF0aW9uSHViU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29zdE9wdGltaXphdGlvbkh1YlNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBDb25uZWN0IEN1c3RvbWVyIFByb2ZpbGVzIHRvIGFjY2VzcyBBV1Mgc2VydmljZXMgYW5kIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQ3VzdG9tZXJQcm9maWxlc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkN1c3RvbWVyUHJvZmlsZXNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyBwZXJtaXNzaW9ucyB0byBBV1Mgc2VydmljZXMgYW5kIGFjdGlvbnMgcmVxdWlyZWQgdG8gc2V0IHVwIGFuZCBjb25maWd1cmUgQVdTIGRhdGFiYXNlIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBEYXRhYmFzZUFkbWluaXN0cmF0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRGF0YWJhc2VBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIEFXUyBkYXRhIGFuYWx5dGljcyBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgRGF0YVNjaWVudGlzdCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5EYXRhU2NpZW50aXN0KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIERBWCB0byBjcmVhdGUgYW5kIG1hbmFnZSBOZXR3b3JrIGludGVyZmFjZSwgU2VjdXJpdHkgZ3JvdXAsIFN1Ym5ldCBhbmQgVnBjIG9uIGJlaGFsZiBvZiBjdXN0b21lciAqL1xuICAgIHB1YmxpYyBEQVhTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5EQVhTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byByZWFkLW9ubHkgQVBJcyBuZWVkZWQgdG8gcnVuIEVDMiBEZWNsYXJhdGl2ZSBQb2xpY2llcyBBY2NvdW50IFN0YXR1cyBSZXBvcnQuICovXG4gICAgcHVibGljIERlY2xhcmF0aXZlUG9saWNpZXNFQzJSZXBvcnQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRGVjbGFyYXRpdmVQb2xpY2llc0VDMlJlcG9ydCk7XG4gICAgfVxuXG4gICAgLyoqIFBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIHN1cHBvcnQgQW1hem9uIENsb3VkV2F0Y2ggQ29udHJpYnV0b3IgSW5zaWdodHMgZm9yIEFtYXpvbiBEeW5hbW9EQi4gKi9cbiAgICBwdWJsaWMgRHluYW1vREJDbG91ZFdhdGNoQ29udHJpYnV0b3JJbnNpZ2h0c1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkR5bmFtb0RCQ2xvdWRXYXRjaENvbnRyaWJ1dG9ySW5zaWdodHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBlcm1pc3Npb25zIHJlcXVpcmVkIGJ5IER5bmFtb0RCIHRvIG1hbmFnZSBnbG9iYWwgdGFibGUgcmVwbGljYSBzZXR0aW5ncyAqL1xuICAgIHB1YmxpYyBEeW5hbW9EQkdsb2JhbFRhYmxlU2V0dGluZ3NNYW5hZ2VtZW50U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRHluYW1vREJHbG9iYWxUYWJsZVNldHRpbmdzTWFuYWdlbWVudFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBBV1MgRHluYW1vREIgYWNjZXNzIHRvIEtpbmVzaXNEYXRhU3RyZWFtcyAqL1xuICAgIHB1YmxpYyBEeW5hbW9EQktpbmVzaXNSZXBsaWNhdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkR5bmFtb0RCS2luZXNpc1JlcGxpY2F0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyByZXF1aXJlZCBieSBEeW5hbW9EQiBmb3IgY3Jvc3MtcmVnaW9uIGRhdGEgcmVwbGljYXRpb24gKi9cbiAgICBwdWJsaWMgRHluYW1vREJSZXBsaWNhdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkR5bmFtb0RCUmVwbGljYXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBmdWxsIGFjY2VzcyB0byBFQzIgRmFzdCBMYXVuY2ggYWN0aW9ucyAqL1xuICAgIHB1YmxpYyBFQzJGYXN0TGF1bmNoRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FQzJGYXN0TGF1bmNoRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudHMgZWMyZmFzdGxhdW5jaCB0byBwcmVwYXJlIGFuZCBtYW5hZ2UgcHJlcHJvdmlzaW9uZWQgc25hcHNob3RzIGluIGN1c3RvbWVyJ3MgYWNjb3VudCAmIHB1Ymxpc2ggcmVsYXRlZCBtZXRyaWNzLiAqL1xuICAgIHB1YmxpYyBFQzJGYXN0TGF1bmNoU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRUMyRmFzdExhdW5jaFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEVDMiBGbGVldCB0byBsYXVuY2ggaW5zdGFuY2VzIGluIHRoZSBmdXR1cmUuICovXG4gICAgcHVibGljIEVDMkZsZWV0VGltZVNoaWZ0YWJsZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVDMkZsZWV0VGltZVNoaWZ0YWJsZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgbmVlZCBieSBFQzIgSW1hZ2UgQnVpbGRlciB0byBwZXJmb3JtIGEgY3Jvc3MgYWNjb3VudCBkaXN0cmlidXRpb24uICovXG4gICAgcHVibGljIEVjMkltYWdlQnVpbGRlckNyb3NzQWNjb3VudERpc3RyaWJ1dGlvbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FYzJJbWFnZUJ1aWxkZXJDcm9zc0FjY291bnREaXN0cmlidXRpb25BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgRUMySW1hZ2VCdWlsZGVyTGlmZWN5Y2xlRXhlY3V0aW9uUG9saWN5IHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgZm9yIEltYWdlIEJ1aWxkZXIgdG8gcGVyZm9ybSBhY3Rpb25zIHN1Y2ggYXMgZGVwcmVjYXRlIG9yIGRlbGV0ZSBJbWFnZSBCdWlsZGVyIGltYWdlIHJlc291cmNlcyBhbmQgdGhlaXIgdW5kZXJseWluZyByZXNvdXJjZXMgKEFNSXMsIHNuYXBzaG90cykgdG8gc3VwcG9ydCBhdXRvbWF0ZWQgcnVsZXMgZm9yIGltYWdlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IHRhc2tzLiAqL1xuICAgIHB1YmxpYyBFQzJJbWFnZUJ1aWxkZXJMaWZlY3ljbGVFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRUMySW1hZ2VCdWlsZGVyTGlmZWN5Y2xlRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGN1c3RvbWVycyB0byBjYWxsIEVDMiBJbnN0YW5jZSBDb25uZWN0IHRvIHB1Ymxpc2ggZXBoZW1lcmFsIGtleXMgdG8gdGhlaXIgRUMyIGluc3RhbmNlcyBhbmQgY29ubmVjdCB2aWEgc3NoIG9yIHRoZSBFQzIgSW5zdGFuY2UgQ29ubmVjdCBDTEkuICovXG4gICAgcHVibGljIEVDMkluc3RhbmNlQ29ubmVjdCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FQzJJbnN0YW5jZUNvbm5lY3QpO1xuICAgIH1cblxuICAgIC8qKiBFQzIgSW5zdGFuY2UgQ29ubmVjdCBlbmRwb2ludCBwb2xpY3kgdG8gbWFuYWdlIEVDMiBJbnN0YW5jZSBDb25uZWN0IGVuZHBvaW50cyBjcmVhdGVkIGJ5IHRoZSBjdXN0b21lciAqL1xuICAgIHB1YmxpYyBFYzJJbnN0YW5jZUNvbm5lY3RFbmRwb2ludCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FYzJJbnN0YW5jZUNvbm5lY3RFbmRwb2ludCk7XG4gICAgfVxuXG4gICAgLyoqIEVDMiBJbnN0YW5jZSBwcm9maWxlIGZvciBJbWFnZSBCdWlsZGVyIHNlcnZpY2UuICovXG4gICAgcHVibGljIEVDMkluc3RhbmNlUHJvZmlsZUZvckltYWdlQnVpbGRlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FQzJJbnN0YW5jZVByb2ZpbGVGb3JJbWFnZUJ1aWxkZXIpO1xuICAgIH1cblxuICAgIC8qKiBFQzIgSW5zdGFuY2UgcHJvZmlsZSBmb3IgYnVpbGRpbmcgY29udGFpbmVyIGltYWdlcyB3aXRoIEVDMiBJbWFnZSBCdWlsZGVyLiBUaGlzIHBvbGljeSBncmFudHMgdGhlIHVzZXIgYnJvYWQgcGVybWlzc2lvbnMgdG8gdXBsb2FkIEVDUiBpbWFnZXMuICovXG4gICAgcHVibGljIEVDMkluc3RhbmNlUHJvZmlsZUZvckltYWdlQnVpbGRlckVDUkNvbnRhaW5lckJ1aWxkcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FQzJJbnN0YW5jZVByb2ZpbGVGb3JJbWFnZUJ1aWxkZXJFQ1JDb250YWluZXJCdWlsZHMpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgRUNSIFJlcGxpY2F0aW9uICovXG4gICAgcHVibGljIEVDUlJlcGxpY2F0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRUNSUmVwbGljYXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhY3Rpb25zIHRvIGJlIHBlcmZvcm1lZCB3aGVuIHVzaW5nIEFXUyBFQ1IgcmVwb3NpdG9yeSBjcmVhdGlvbiB0ZW1wbGF0ZXMgKi9cbiAgICBwdWJsaWMgRUNSVGVtcGxhdGVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FQ1JUZW1wbGF0ZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIEVsYXN0aUNhY2hlIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmIGFzIG5lY2Vzc2FyeSBmb3IgbWFuYWdpbmcgeW91ciBjYWNoZSAqL1xuICAgIHB1YmxpYyBFbGFzdGlDYWNoZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVsYXN0aUNhY2hlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRWxhc3RpY0xvYWRCYWxhbmNpbmcsIGFuZCBsaW1pdGVkIGFjY2VzcyB0byBvdGhlciBzZXJ2aWNlcyBuZWNlc3NhcnkgdG8gcHJvdmlkZSBFbGFzdGljTG9hZEJhbGFuY2luZyBmZWF0dXJlcy4gKi9cbiAgICBwdWJsaWMgRWxhc3RpY0xvYWRCYWxhbmNpbmdGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVsYXN0aWNMb2FkQmFsYW5jaW5nRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEVsYXN0aWNMb2FkQmFsYW5jaW5nIGFuZCBkZXBlbmRlbnQgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgRWxhc3RpY0xvYWRCYWxhbmNpbmdSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FbGFzdGljTG9hZEJhbGFuY2luZ1JlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNzIHRvIHZpZXcgcHVyY2hhc2VkIGFzc2V0cyBhbmQgZG93bmxvYWQgcmVsYXRlZCBzb2Z0d2FyZSBhbmQga2lja3N0YXJ0IGZpbGVzICovXG4gICAgcHVibGljIEVsZW1lbnRhbEFjdGl2YXRpb25zRG93bmxvYWRTb2Z0d2FyZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FbGVtZW50YWxBY3RpdmF0aW9uc0Rvd25sb2FkU29mdHdhcmVBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBGdWxsIGFjY2VzcyB0byB2aWV3IGFuZCB0YWtlIGFjdGlvbiBvbiBFbGVtZW50YWwgQXBwbGlhbmNlcyBhbmQgU29mdHdhcmUgcHVyY2hhc2VkIGFzc2V0cyAqL1xuICAgIHB1YmxpYyBFbGVtZW50YWxBY3RpdmF0aW9uc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRWxlbWVudGFsQWN0aXZhdGlvbnNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNzIHRvIHZpZXcgcHVyY2hhc2VkIGFzc2V0cyBhbmQgZ2VuZXJhdGUgc29mdHdhcmUgbGljZW5zZXMgZm9yIHBlbmRpbmcgYWN0aXZhdGlvbnMgKi9cbiAgICBwdWJsaWMgRWxlbWVudGFsQWN0aXZhdGlvbnNHZW5lcmF0ZUxpY2Vuc2VzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVsZW1lbnRhbEFjdGl2YXRpb25zR2VuZXJhdGVMaWNlbnNlcyk7XG4gICAgfVxuXG4gICAgLyoqIFJlYWQtb25seSBhY2Nlc3MgdG8gdGhlIGRldGFpbGVkIGxpc3Qgb2YgcHVyY2hhc2VkIGFzc2V0cyBhc3NvY2lhdGVkIHRvIHRoZSBBV1MgYWNjb3VudCBvZiB0aGUgdXNlciAqL1xuICAgIHB1YmxpYyBFbGVtZW50YWxBY3RpdmF0aW9uc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVsZW1lbnRhbEFjdGl2YXRpb25zUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBGdWxsIGFjY2VzcyB0byB2aWV3IGFuZCB0YWtlIGFjdGlvbiBvbiBFbGVtZW50YWwgQXBwbGlhbmNlcyBhbmQgU29mdHdhcmUgcXVvdGVzIGFuZCBvcmRlcnMgKi9cbiAgICBwdWJsaWMgRWxlbWVudGFsQXBwbGlhbmNlc1NvZnR3YXJlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FbGVtZW50YWxBcHBsaWFuY2VzU29mdHdhcmVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUmVhZC1vbmx5IGFjY2VzcyB0byB2aWV3IEVsZW1lbnRhbCBBcHBsaWFuY2VzIGFuZCBTb2Z0d2FyZSBxdW90ZXMgYW5kIG9yZGVycyAqL1xuICAgIHB1YmxpYyBFbGVtZW50YWxBcHBsaWFuY2VzU29mdHdhcmVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FbGVtZW50YWxBcHBsaWFuY2VzU29mdHdhcmVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bGwgYWNjZXNzIHRvIHZpZXcgYW5kIHRha2UgYWN0aW9uIG9uIEVsZW1lbnRhbCBBcHBsaWFuY2UgYW5kIFNvZnR3YXJlIHN1cHBvcnQgY2FzZXMgYW5kIHByb2R1Y3Qgc3VwcG9ydCBjb250ZW50ICovXG4gICAgcHVibGljIEVsZW1lbnRhbFN1cHBvcnRDZW50ZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVsZW1lbnRhbFN1cHBvcnRDZW50ZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHJlYWQtb25seSBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IHRoZSBXQUwgc2VydmljZSBmb3IgQW1hem9uIEVNUiB0byBmaW5kIGFuZCByZXR1cm4gdGhlIHN0YXR1cyBvZiBhIGNsdXN0ZXIgKi9cbiAgICBwdWJsaWMgRU1SRGVzY3JpYmVDbHVzdGVyUG9saWN5Rm9yRU1SV0FMKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVNUkRlc2NyaWJlQ2x1c3RlclBvbGljeUZvckVNUldBTCk7XG4gICAgfVxuXG4gICAgLyoqIEFjY2VzcyBwb2xpY3kgdG8gYWxsb3cgRk0gc2VydmljZSBsaW5rZWQgcm9sZSB0byBwZXJmb3JtIEZNLXJlbGF0ZWQgYWN0aW9ucyBvbiBGTS1tYW5hZ2VkIHJlc291cmNlcyB3aXRoaW4gYSBjdXN0b21lciBBV1MgT3JnYW5pemF0aW9uIGFjY291bnQuICovXG4gICAgcHVibGljIEZNU1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkZNU1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBGU3ggdG8gZGVsZXRlIGl0cyBTZXJ2aWNlIExpbmtlZCBSb2xlcyBmb3IgQW1hem9uIFMzIGFjY2VzcyAqL1xuICAgIHB1YmxpYyBGU3hEZWxldGVTZXJ2aWNlTGlua2VkUm9sZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5GU3hEZWxldGVTZXJ2aWNlTGlua2VkUm9sZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbnMgZm9yIGNvbXB1dGUgYWN0aW9ucyBpbiBhbiBBbWF6b24gR2FtZUxpZnQgY29udGFpbmVyIGZsZWV0LCBpbmNsdWRpbmcgYWNjZXNzIHRvIGRlcGVuZGVuY2llcyBzdWNoIGFzIEFtYXpvbiBTMy4gKi9cbiAgICBwdWJsaWMgR2FtZUxpZnRDb250YWluZXJGbGVldFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5HYW1lTGlmdENvbnRhaW5lckZsZWV0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGFsbG93IEdhbWVsaWZ0IEdhbWVTZXJ2ZXJHcm91cHMgdG8gbWFuYWdlIGN1c3RvbWVyIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBHYW1lTGlmdEdhbWVTZXJ2ZXJHcm91cFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5HYW1lTGlmdEdhbWVTZXJ2ZXJHcm91cFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgbWFuYWdlZCBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb24gdG8gY29ubmVjdCB3aXRoIEFtYXpvbiBRIGFuZCB1dGlsaXplIHRoZSBmZWF0dXJlcyBpbiB0aGUgR2l0TGFiIER1byB3aXRoIEFtYXpvbiBRIGludGVncmF0aW9uLiAqL1xuICAgIHB1YmxpYyBHaXRMYWJEdW9XaXRoQW1hem9uUVBlcm1pc3Npb25zUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkdpdExhYkR1b1dpdGhBbWF6b25RUGVybWlzc2lvbnNQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBHbG9iYWxBY2NlbGVyYXRvciBVc2VycyBmdWxsIEFjY2VzcyB0byBhbGwgQVBJcyAqL1xuICAgIHB1YmxpYyBHbG9iYWxBY2NlbGVyYXRvckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuR2xvYmFsQWNjZWxlcmF0b3JGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgR2xvYmFsQWNjZWxlcmF0b3IgVXNlcnMgQWNjZXNzIHRvIFJlYWQgT25seSBBUElzICovXG4gICAgcHVibGljIEdsb2JhbEFjY2VsZXJhdG9yUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuR2xvYmFsQWNjZWxlcmF0b3JSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgYWNjZXNzIHRvIHRoZSBHcmVlbmdyYXNzIE9UQSBVcGRhdGUgYXJ0aWZhY3RzIGluIGFsbCBHcmVlbmdyYXNzIHJlZ2lvbnMgKi9cbiAgICBwdWJsaWMgR3JlZW5ncmFzc09UQVVwZGF0ZUFydGlmYWN0QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkdyZWVuZ3Jhc3NPVEFVcGRhdGVBcnRpZmFjdEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBIZWFsdGggcG9saWN5IHRvIGVuYWJsZSBPcmdhbml6YXRpb25hbCBWaWV3IGZlYXR1cmUgKi9cbiAgICBwdWJsaWMgSGVhbHRoT3JnYW5pemF0aW9uc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkhlYWx0aE9yZ2FuaXphdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhY2Nlc3MgdG8gcmVhZCBhbGwgYWNjZXNzIGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5IElBTSBhY2Nlc3MgYWR2aXNvciBzdWNoIGFzIHNlcnZpY2UgbGFzdCBhY2Nlc3NlZCBpbmZvcm1hdGlvbi4gKi9cbiAgICBwdWJsaWMgSUFNQWNjZXNzQWR2aXNvclJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTUFjY2Vzc0Fkdmlzb3JSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIElBTSBBY2Nlc3MgQW5hbHl6ZXIgKi9cbiAgICBwdWJsaWMgSUFNQWNjZXNzQW5hbHl6ZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTUFjY2Vzc0FuYWx5emVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gSUFNIEFjY2VzcyBBbmFseXplciByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgSUFNQWNjZXNzQW5hbHl6ZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JQU1BY2Nlc3NBbmFseXplclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHJlcXVpcmVkIHRvIGNoZWNrIHRoZSBwcmVzZW5jZSBvZiByb290IHVzZXIgY3JlZGVudGlhbHMgc3VjaCBhcyByb290IHVzZXIgcGFzc3dvcmQgYW5kIHJvb3QgdXNlciBhY2Nlc3Mga2V5cyB1c2luZyB0aGUgU2VjdXJpdHkgVG9rZW4gU2VydmljZSAoU1RTKSBBc3N1bWVSb290IEFQSS4gVXNlIHRoaXMgbWFuYWdlZCBwb2xpY3kgb25seSB3aXRoIHRoZSBTVFMgQXNzdW1lUm9vdCBhY3Rpb24uICovXG4gICAgcHVibGljIElBTUF1ZGl0Um9vdFVzZXJDcmVkZW50aWFscygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JQU1BdWRpdFJvb3RVc2VyQ3JlZGVudGlhbHMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgcmVxdWlyZWQgdG8gY3JlYXRlIGEgcm9vdCB1c2VyIHBhc3N3b3JkIHVzaW5nIHRoZSBTZWN1cml0eSBUb2tlbiBTZXJ2aWNlIChTVFMpIEFzc3VtZVJvb3QgQVBJLiAgVXNlIHRoaXMgbWFuYWdlZCBwb2xpY3kgb25seSB3aXRoIHRoZSBTVFMgQXNzdW1lUm9vdCBhY3Rpb24uICovXG4gICAgcHVibGljIElBTUNyZWF0ZVJvb3RVc2VyUGFzc3dvcmQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuSUFNQ3JlYXRlUm9vdFVzZXJQYXNzd29yZCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyByZXF1aXJlZCB0byBkZWxldGUgYWxsIHJvb3QgdXNlciBjcmVkZW50aWFscyBzdWNoIGFzIHJvb3QgcGFzc3dvcmQgYW5kIHJvb3QgYWNjZXNzIGtleXMgdXNpbmcgdGhlIFNlY3VyaXR5IFRva2VuIFNlcnZpY2UgKFNUUykgQXNzdW1lUm9vdCBBUEkuICBVc2UgdGhpcyBtYW5hZ2VkIHBvbGljeSBvbmx5IHdpdGggdGhlIFNUUyBBc3N1bWVSb290IGFjdGlvbi4gKi9cbiAgICBwdWJsaWMgSUFNRGVsZXRlUm9vdFVzZXJDcmVkZW50aWFscygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JQU1EZWxldGVSb290VXNlckNyZWRlbnRpYWxzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSUFNIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgSUFNRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JQU1GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBJQU0gdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBJQU1SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JQU1SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhbiBJQU0gdXNlciB0byBtYW5hZ2UgdGhlaXIgb3duIFNlcnZpY2UgU3BlY2lmaWMgQ3JlZGVudGlhbHMuICovXG4gICAgcHVibGljIElBTVNlbGZNYW5hZ2VTZXJ2aWNlU3BlY2lmaWNDcmVkZW50aWFscygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JQU1TZWxmTWFuYWdlU2VydmljZVNwZWNpZmljQ3JlZGVudGlhbHMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB0aGUgYWJpbGl0eSBmb3IgYW4gSUFNIHVzZXIgdG8gY2hhbmdlIHRoZWlyIG93biBwYXNzd29yZC4gKi9cbiAgICBwdWJsaWMgSUFNVXNlckNoYW5nZVBhc3N3b3JkKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTVVzZXJDaGFuZ2VQYXNzd29yZCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBhYmlsaXR5IGZvciBhbiBJQU0gdXNlciB0byBtYW5hZ2UgdGhlaXIgb3duIFNTSCBrZXlzLiAqL1xuICAgIHB1YmxpYyBJQU1Vc2VyU1NIS2V5cygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JQU1Vc2VyU1NIS2V5cyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEludGVyYWN0aXZlIFZpZGVvIFNlcnZpY2UgKElWUyksIEFsc28gaW5jbHVkZWQgcGVybWlzc2lvbnMgZm9yIGRlcGVuZGVudCBzZXJ2aWNlcywgbmVlZGVkIGZvciBmdWxsIGFjY2VzcyB0byB0aGUgaXZzIGNvbnNvbGUuICovXG4gICAgcHVibGljIElWU0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuSVZTRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gSVZTIExvdy1MYXRlbmN5IGFuZCBSZWFsLVRpbWUgc3RyZWFtaW5nIEFQSXMgKi9cbiAgICBwdWJsaWMgSVZTUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuSVZTUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIExpbmtlZCBSb2xlIHRvIHBlcmZvcm0gUzMgUHV0T2JqZWN0IHRvIHJlY29yZGluZyBJVlMgbGl2ZSBzdHJlYW1zICovXG4gICAgcHVibGljIElWU1JlY29yZFRvUzMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuSVZTUmVjb3JkVG9TMyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBLYWZrYSBDb25uZWN0IHBlcm1pc3Npb24gdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEthZmthQ29ubmVjdFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkthZmthQ29ubmVjdFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogSUFNIHNlcnZpY2UgbGlua2VkIHJvbGUgcG9saWN5IGZvciBLYWZrYS4gKi9cbiAgICBwdWJsaWMgS2Fma2FTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5LYWZrYVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHRoZSByZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBBbWF6b24gS2V5c3BhY2VzIGZvciBDaGFuZ2UgRGF0YSBDYXB0dXJlICovXG4gICAgcHVibGljIEtleXNwYWNlc0NEQ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLktleXNwYWNlc0NEQ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgcmVxdWlyZWQgYnkgS2V5c3BhY2VzIGZvciBjcm9zcy1yZWdpb24gZGF0YSByZXBsaWNhdGlvbiAqL1xuICAgIHB1YmxpYyBLZXlzcGFjZXNSZXBsaWNhdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLktleXNwYWNlc1JlcGxpY2F0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdG8gZ3JhbnQgdGVtcG9yYXJ5IGRhdGEgYWNjZXNzIHRvIExha2UgRm9ybWF0aW9uIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBMYWtlRm9ybWF0aW9uRGF0YUFjY2Vzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkxha2VGb3JtYXRpb25EYXRhQWNjZXNzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIEFXUyBMZXggQm90IHVzZSBjYXNlICovXG4gICAgcHVibGljIExleEJvdFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5MZXhCb3RQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIEFXUyBMZXggQ2hhbm5lbCB1c2UgY2FzZSAqL1xuICAgIHB1YmxpYyBMZXhDaGFubmVsUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkxleENoYW5uZWxQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgTGlnaHRzYWlsIHNlcnZpY2UgbGlua2VkIHJvbGUgcG9saWN5IHdoaWNoIGdyYW50cyBwZXJtaXNzaW9ucyB0byBleHBvcnQgcmVzb3VyY2VzICovXG4gICAgcHVibGljIExpZ2h0c2FpbEV4cG9ydEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5MaWdodHNhaWxFeHBvcnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbiB0byByZWdpc3RlciBNZWRpYUNvbm5lY3QgR2F0ZXdheSBJbnN0YW5jZXMgdG8gYSBNZWRpYUNvbm5lY3QgR2F0ZXdheS4gKi9cbiAgICBwdWJsaWMgTWVkaWFDb25uZWN0R2F0ZXdheUluc3RhbmNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5NZWRpYUNvbm5lY3RHYXRld2F5SW5zdGFuY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIE1lZGlhUGFja2FnZSB0byBwdWJsaXNoIGxvZ3MgdG8gQ2xvdWRXYXRjaCAqL1xuICAgIHB1YmxpYyBNZWRpYVBhY2thZ2VTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5NZWRpYVBhY2thZ2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBNZW1vcnlEQiB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZiBhcyBuZWNlc3NhcnkgZm9yIG1hbmFnaW5nIHlvdXIgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBNZW1vcnlEQlNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk1lbW9yeURCU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIERhdGFiYXNlIE1pZ3JhdGlvbiBTZXJ2aWNlIHRvIGFzc3VtZSByb2xlIGluIGN1c3RvbWVyJ3MgYWNjb3VudCB0byBjYWxsIE1pZ3JhdGlvbiBIdWIgKi9cbiAgICBwdWJsaWMgTWlncmF0aW9uSHViRE1TQWNjZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTWlncmF0aW9uSHViRE1TQWNjZXNzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgTWlncmF0aW9uIEh1YiB0byBjYWxsIEFwcGxpY2F0aW9uIERpc2NvdmVyeSBTZXJ2aWNlIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIE1pZ3JhdGlvbkh1YlNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk1pZ3JhdGlvbkh1YlNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBTZXJ2ZXIgTWlncmF0aW9uIFNlcnZpY2UgdG8gYXNzdW1lIHJvbGUgaW4gY3VzdG9tZXIncyBhY2NvdW50IHRvIGNhbGwgTWlncmF0aW9uIEh1YiAqL1xuICAgIHB1YmxpYyBNaWdyYXRpb25IdWJTTVNBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5NaWdyYXRpb25IdWJTTVNBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIE1vbml0cm9uIHNlcnZpY2UgbGlua2VkIHJvbGUgZ3JhbnRpbmcgYWNjZXNzIHRvIHJlcXVpcmVkIGN1c3RvbWVyIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgTW9uaXRyb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Nb25pdHJvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gTXVsdGktcGFydHkgYXBwcm92YWwuIFRoaXMgcG9saWN5IGFsc28gaW5jbHVkZXMgcmVsYXRlZCBwZXJtaXNzaW9ucyB0byBBV1MgT3JnYW5pemF0aW9ucyBhbmQgQVdTIElBTSBJZGVudGl0eSBmb3IgbWFuYWdpbmcgYXBwcm92YWwgdGVhbXMgYW5kIGlkZW50aXR5IHNvdXJjZXMuICovXG4gICAgcHVibGljIE11bHRpUGFydHlBcHByb3ZhbEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTXVsdGlQYXJ0eUFwcHJvdmFsRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gTXVsdGktcGFydHkgYXBwcm92YWwuIFRoaXMgcG9saWN5IGFsc28gaW5jbHVkZXMgcmVsYXRlZCByZWFkIHBlcm1pc3Npb24gdG8gQVdTIE9yZ2FuaXphdGlvbnMgYW5kIEFXUyBJQU0gSWRlbnRpdHkgZm9yIGFwcHJvdmFsIHRlYW1zIGFuZCBpZGVudGl0eSBzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBNdWx0aVBhcnR5QXBwcm92YWxSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5NdWx0aVBhcnR5QXBwcm92YWxSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIG1hbmFnZSBBbWF6b24gTmVwdHVuZSB1c2luZyB0aGUgQVdTIENvbnNvbGUuIE5vdGUgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgZnVsbCBhY2Nlc3MgdG8gcHVibGlzaCBvbiBhbGwgU05TIHRvcGljcyB3aXRoaW4gdGhlIGFjY291bnQsIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBhbmQgZWRpdCBBbWF6b24gRUMyIGluc3RhbmNlcyBhbmQgVlBDIGNvbmZpZ3VyYXRpb25zLCBwZXJtaXNzaW9ucyB0byB2aWV3IGFuZCBsaXN0IGtleXMgb24gQW1hem9uIEtNUywgYW5kIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBSRFMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9uZXB0dW5lL2ZhcXMvLiAqL1xuICAgIHB1YmxpYyBOZXB0dW5lQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTmVwdHVuZUNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIE5lcHR1bmUuIE5vdGUgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgZnVsbCBhY2Nlc3MgdG8gcHVibGlzaCBvbiBhbGwgU05TIHRvcGljcyB3aXRoaW4gdGhlIGFjY291bnQgYW5kIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBSRFMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9uZXB0dW5lL2ZhcXMvLiAqL1xuICAgIHB1YmxpYyBOZXB0dW5lRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5OZXB0dW5lRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIEFtYXpvbiBOZXB0dW5lIEFuYWx5dGljcyByZXNvdXJjZXMgYWxvbmcgd2l0aCByZWFkIG9ubHkgcGVybWlzc2lvbnMgZm9yIGRlcGVuZGVudCBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgTmVwdHVuZUdyYXBoUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTmVwdHVuZUdyYXBoUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBOZXB0dW5lLiBOb3RlIHRoYXQgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgYWNjZXNzIHRvIEFtYXpvbiBSRFMgcmVzb3VyY2VzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vbmVwdHVuZS9mYXFzLy4gKi9cbiAgICBwdWJsaWMgTmVwdHVuZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk5lcHR1bmVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyBwZXJtaXNzaW9ucyB0byBBV1Mgc2VydmljZXMgYW5kIGFjdGlvbnMgcmVxdWlyZWQgdG8gc2V0IHVwIGFuZCBjb25maWd1cmUgQVdTIG5ldHdvcmsgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBOZXR3b3JrQWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5OZXR3b3JrQWRtaW5pc3RyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciB0aGUgQVdTIFNoaWVsZCBuZXR3b3JrIHNlY3VyaXR5IGRpcmVjdG9yIHNlcnZpY2UgbGlua2VkIHJvbGUgdG8gYXNzZXNzIHNwZWNpZmllZCBlbnZpcm9ubWVudHMuICovXG4gICAgcHVibGljIE5ldHdvcmtTZWN1cml0eURpcmVjdG9yU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTmV0d29ya1NlY3VyaXR5RGlyZWN0b3JTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBOb3ZhQWN0IHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHRoZSBuZWNlc3NhcnkgcmVzb3VyY2VzIHRvIG9wZXJhdGUgdGhlIE5vdmEgQWN0IGFnZW50cy4gKi9cbiAgICBwdWJsaWMgTm92YUFjdFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk5vdmFBY3RTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIENsb3VkV2F0Y2ggT2JzZXJ2YWJpbGl0eSBBY2Nlc3MgTWFuYWdlciAqL1xuICAgIHB1YmxpYyBPQU1GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk9BTUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBSZWFkIE9ubHkgYWNjZXNzIHRvIENsb3VkV2F0Y2ggT2JzZXJ2YWJpbGl0eSBBY2Nlc3MgTWFuYWdlciAqL1xuICAgIHB1YmxpYyBPQU1SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5PQU1SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gT3BlblNlYXJjaCBJbmdlc3Rpb24gdG8gZGVzY3JpYmUgbmV0d29yayByZXNvdXJjZXMgYW5kIHdyaXRlIHNlcnZpY2UgbWV0cmljcyB0byBjbG91ZHdhdGNoICovXG4gICAgcHVibGljIE9wZW5zZWFyY2hJbmdlc3Rpb25TZWxmTWFuYWdlZFZwY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuT3BlbnNlYXJjaEluZ2VzdGlvblNlbGZNYW5hZ2VkVnBjZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBhc3NvY2lhdGUgYW5kIGRpc3NvY2lhdGUgcGFydG5lciBjZW50cmFsIHVzZXJzIHdpdGggSUFNIHJvbGVzICovXG4gICAgcHVibGljIFBhcnRuZXJDZW50cmFsQWNjb3VudE1hbmFnZW1lbnRVc2VyUm9sZUFzc29jaWF0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlBhcnRuZXJDZW50cmFsQWNjb3VudE1hbmFnZW1lbnRVc2VyUm9sZUFzc29jaWF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMsIGJ1dCBkb2VzIG5vdCBhbGxvdyBtYW5hZ2VtZW50IG9mIFVzZXJzIGFuZCBncm91cHMuICovXG4gICAgcHVibGljIFBvd2VyVXNlckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Qb3dlclVzZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFtYXpvbiBRIEFwcHMuICovXG4gICAgcHVibGljIFFBcHBzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUUFwcHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBRQnVzaW5lc3MgdG8gY2FsbCBRdWlja1NpZ2h0IEFQSXMgZm9yIHRoZSBRdWlja1NpZ2h0IHBsdWdpbiAqL1xuICAgIHB1YmxpYyBRQnVzaW5lc3NRdWlja3NpZ2h0UGx1Z2luUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlFCdXNpbmVzc1F1aWNrc2lnaHRQbHVnaW5Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFtYXpvbiBRICovXG4gICAgcHVibGljIFFCdXNpbmVzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlFCdXNpbmVzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHVzZWQgYnkgUXVpY2tTaWdodCB0ZWFtIHRvIGFjY2VzcyBjdXN0b21lciBkYXRhIHByb2R1Y2VkIGJ5IFMzIFN0b3JhZ2UgTWFuYWdlbWVudCBBbmFseXRpY3MuICovXG4gICAgcHVibGljIFF1aWNrU2lnaHRBY2Nlc3NGb3JTM1N0b3JhZ2VNYW5hZ2VtZW50QW5hbHl0aWNzUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUXVpY2tTaWdodEFjY2Vzc0ZvclMzU3RvcmFnZU1hbmFnZW1lbnRBbmFseXRpY3NSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgcG9saWN5IGZvciB0aGUgQW1hem9uIFJEUyBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIFJEU0Nsb3VkSHNtQXV0aG9yaXphdGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUkRTQ2xvdWRIc21BdXRob3JpemF0aW9uUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMuICovXG4gICAgcHVibGljIFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gUmVzb3VyY2UgR3JvdXBzIGFuZCBUYWcgRWRpdG9yLiAqL1xuICAgIHB1YmxpYyBSZXNvdXJjZUdyb3Vwc2FuZFRhZ0VkaXRvckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUmVzb3VyY2VHcm91cHNhbmRUYWdFZGl0b3JGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHVzZSBSZXNvdXJjZSBHcm91cHMgYW5kIFRhZyBFZGl0b3IsIGJ1dCBkb2VzIG5vdCBhbGxvdyBlZGl0aW5nIG9mIHRhZ3MgdmlhIHRoZSBUYWcgRWRpdG9yLiAqL1xuICAgIHB1YmxpYyBSZXNvdXJjZUdyb3Vwc2FuZFRhZ0VkaXRvclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJlc291cmNlR3JvdXBzYW5kVGFnRWRpdG9yUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIFJlc291cmNlIEdyb3VwcyB0byBxdWVyeSB0aGUgQVdTIHNlcnZpY2VzIHRoYXQgb3duIHlvdXIgcmVzb3VyY2VzIHRvIGtlZXAgdGhlIGdyb3VwIHVwLXRvLWRhdGUgKi9cbiAgICBwdWJsaWMgUmVzb3VyY2VHcm91cHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5SZXNvdXJjZUdyb3Vwc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gdGFnIGFuZCB1bnRhZyBhbGwgdGhlIHJlc291cmNlcyBzdXBwb3J0ZWQgYnkgUmVzb3VyY2UgR3JvdXBzIFRhZ2dpbmcgQVBJLiBUaGlzIHBvbGljeSBhbHNvIGdyYW50cyB0aGUgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gcmV0cmlldmUgYWxsIHRhZ2dlZCwgb3IgcHJldmlvdXNseSB0YWdnZWQsIHJlc291cmNlcyB0aHJvdWdoIHRoZSBSZXNvdXJjZSBHcm91cHMgVGFnZ2luZyBBUEkuICovXG4gICAgcHVibGljIFJlc291cmNlR3JvdXBzVGFnZ2luZ0FQSVRhZ1VudGFnU3VwcG9ydGVkUmVzb3VyY2VzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJlc291cmNlR3JvdXBzVGFnZ2luZ0FQSVRhZ1VudGFnU3VwcG9ydGVkUmVzb3VyY2VzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBPcGVuU2hpZnQgQW1hem9uIEVCUyBDb250YWluZXIgU3RvcmFnZSBJbnRlcmZhY2UgKENTSSkgRHJpdmVyIE9wZXJhdG9yIHRvIGluc3RhbGwgYW5kIG1haW50YWluIHRoZSBBbWF6b24gRUJTIENTSSBkcml2ZXIgb24gYSBSZWQgSGF0IE9wZW5TaGlmdCBTZXJ2aWNlIG9uIEFXUyAoUk9TQSkgY2x1c3Rlci4gVGhlIEFtYXpvbiBFQlMgQ1NJIGRyaXZlciBhbGxvd3MgUk9TQSBjbHVzdGVycyB0byBtYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZiBBbWF6b24gRUJTIHZvbHVtZXMgZm9yIHBlcnNpc3RlbnQgdm9sdW1lcy4gKi9cbiAgICBwdWJsaWMgUk9TQUFtYXpvbkVCU0NTSURyaXZlck9wZXJhdG9yUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FBbWF6b25FQlNDU0lEcml2ZXJPcGVyYXRvclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgT3BlblNoaWZ0IENsb3VkIE5ldHdvcmsgQ29uZmlnIENvbnRyb2xsZXIgT3BlcmF0b3IgdG8gcHJvdmlzaW9uIGFuZCBtYW5hZ2UgbmV0d29ya2luZyByZXNvdXJjZXMgZm9yIHVzZSBieSB0aGUgUmVkIEhhdCBPcGVuU2hpZnQgU2VydmljZSBvbiBBV1MgKFJPU0EpIGNsdXN0ZXIgbmV0d29ya2luZyBvdmVybGF5LiBUaGUgT3BlblNoaWZ0IENsb3VkIE5ldHdvcmsgT3BlcmF0b3IgaW50ZXJmYWNlcyB3aXRoIEFXUyBBUElzIG9uIGJlaGFsZiBvZiB0aGUgbmV0d29yayBwbHVnaW5zIHZpYSBDdXN0b21SZXNvdXJjZURlZmluaXRpb25zLiBUaGUgb3BlcmF0b3IgdXNlcyB0aGVzZSBwb2xpY3kgcGVybWlzc2lvbnMgdG8gbWFuYWdlIHByaXZhdGUgSVAgYWRkcmVzc2VzIGZvciBBbWF6b24gRUMyIGluc3RhbmNlcyBhcyBwYXJ0IG9mIHRoZSBST1NBIGNsdXN0ZXIuICovXG4gICAgcHVibGljIFJPU0FDbG91ZE5ldHdvcmtDb25maWdPcGVyYXRvclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBQ2xvdWROZXR3b3JrQ29uZmlnT3BlcmF0b3JQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgUmVkIEhhdCBPcGVuU2hpZnQgU2VydmljZSBvbiBBV1MgKFJPU0EpIGNvbnRyb2wgcGxhbmUgdG8gbWFuYWdlIFJPU0EgY2x1c3RlciBBbWF6b24gRUMyIGFuZCBBbWF6b24gUm91dGUgNTMgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBST1NBQ29udHJvbFBsYW5lT3BlcmF0b3JQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQUNvbnRyb2xQbGFuZU9wZXJhdG9yUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBPcGVuU2hpZnQgSW1hZ2UgUmVnaXN0cnkgT3BlcmF0b3IgdG8gcHJvdmlzaW9uIGFuZCBtYW5hZ2UgQW1hem9uIFMzIGJ1Y2tldHMgYW5kIG9iamVjdHMgZm9yIHVzZSBieSB0aGUgUmVkIEhhdCBPcGVuU2hpZnQgU2VydmljZSBvbiBBV1MgKFJPU0EpIGluLWNsdXN0ZXIgaW1hZ2UgcmVnaXN0cnkgdG8gc2F0aXNmeSBST1NBIHN0b3JhZ2UgcmVxdWlyZW1lbnRzLiBUaGUgT3BlblNoaWZ0IEltYWdlIFJlZ2lzdHJ5IE9wZXJhdG9yIGluc3RhbGxzIGFuZCBtYWludGFpbnMgdGhlIGludGVybmFsIHJlZ2lzdHJ5IG9mIGEgUmVkIEhhdCBPcGVuU2hpZnQgY2x1c3Rlci4gKi9cbiAgICBwdWJsaWMgUk9TQUltYWdlUmVnaXN0cnlPcGVyYXRvclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBSW1hZ2VSZWdpc3RyeU9wZXJhdG9yUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBPcGVuU2hpZnQgSW5ncmVzcyBPcGVyYXRvciB0byBwcm92aXNpb24gYW5kIG1hbmFnZSBsb2FkIGJhbGFuY2VycyBhbmQgZG9tYWluIG5hbWUgc3lzdGVtIChETlMpIGNvbmZpZ3VyYXRpb25zIGZvciBSZWQgSGF0IE9wZW5TaGlmdCBTZXJ2aWNlIG9uIEFXUyAoUk9TQSkgY2x1c3RlcnMuIFRoZSBwb2xpY3kgYWxsb3dzIHJlYWQgYWNjZXNzIHRvIHRhZyB2YWx1ZXMsIHdoaWNoIHRoZSBvcGVyYXRvciBmaWx0ZXJzIGZvciBSb3V0ZSA1MyByZXNvdXJjZXMgdG8gZGlzY292ZXIgaG9zdGVkIHpvbmVzLiAqL1xuICAgIHB1YmxpYyBST1NBSW5ncmVzc09wZXJhdG9yUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FJbmdyZXNzT3BlcmF0b3JQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSBpbnN0YWxsZXIgdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgdGhhdCBzdXBwb3J0IFJPU0EgY2x1c3RlciBpbnN0YWxsYXRpb24uIFRoaXMgaW5jbHVkZXMgbWFuYWdpbmcgaW5zdGFuY2UgcHJvZmlsZXMgZm9yIFJPU0Egd29ya2VyIG5vZGVzLiAqL1xuICAgIHB1YmxpYyBST1NBSW5zdGFsbGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FJbnN0YWxsZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIGJ1aWx0LWluIFJPU0EgQVdTIEVuY3J5cHRpb24gUHJvdmlkZXIgdG8gbWFuYWdlIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIChLTVMpIGtleXMgdG8gc3VwcG9ydCBldGNkIGRhdGEgZW5jcnlwdGlvbiB1c2luZyBhIGN1c3RvbWVyIHByb3ZpZGVkIEFXUyBLTVMga2V5LiBUaGUgcG9saWN5IGFsbG93cyBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uIG9mIGRhdGEgdXNpbmcgS01TIGtleXMuICovXG4gICAgcHVibGljIFJPU0FLTVNQcm92aWRlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBS01TUHJvdmlkZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIFJPU0EgS3ViZXJuZXRlcyBjb250cm9sbGVyIHRvIG1hbmFnZSBBbWF6b24gRUMyLCBFbGFzdGljIExvYWQgQmFsYW5jaW5nIChFTEIpLCBhbmQgQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2UgKEtNUykgcmVzb3VyY2VzIGZvciBhIFJPU0EgY2x1c3Rlci4gKi9cbiAgICBwdWJsaWMgUk9TQUt1YmVDb250cm9sbGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FLdWJlQ29udHJvbGxlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIHRoZSBwZXJtaXNzaW9ucyByZXF1aXJlZCB0byBtYW5hZ2UgdGhlIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSBzdWJzY3JpcHRpb24uICovXG4gICAgcHVibGljIFJPU0FNYW5hZ2VTdWJzY3JpcHRpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQU1hbmFnZVN1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBSZWQgSGF0IE9wZW5TaGlmdCBTZXJ2aWNlIG9uIEFXUyAoUk9TQSkgdG8gbWFuYWdlIGNsdXN0ZXIgRUMyIGluc3RhbmNlcyBhcyB3b3JrZXIgbm9kZXMsIGluY2x1ZGluZyBwZXJtaXNzaW9uIHRvIGNvbmZpZ3VyZSBzZWN1cml0eSBncm91cHMgYW5kIHRhZyBpbnN0YW5jZXMgYW5kIHZvbHVtZXMuIFRoaXMgcG9saWN5IGFsc28gYWxsb3dzIGZvciB0aGUgdXNlIG9mIEVDMiBpbnN0YW5jZXMgd2l0aCBkaXNrIGVuY3J5cHRpb24gcHJvdmlkZWQgYnkgQVdTIEtleSBNYW5hZ2VtZW50IFNlcnZpY2UgKEtNUykga2V5cy4gKi9cbiAgICBwdWJsaWMgUk9TQU5vZGVQb29sTWFuYWdlbWVudFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBTm9kZVBvb2xNYW5hZ2VtZW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBSZWQgSGF0IE9wZW5TaGlmdCBTZXJ2aWNlIG9uIEFXUyAoUk9TQSkgaW5zdGFsbGVyIHRvIGNvbmZpZ3VyZSBWUEMgRW5kcG9pbnRzIGFuZCBTZWN1cml0eSBHcm91cHMuIEludGVuZGVkIHRvIGJlIHVzZWQgb24gYSBzaGFyZWQgVlBDLiAqL1xuICAgIHB1YmxpYyBST1NBU2hhcmVkVlBDRW5kcG9pbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQVNoYXJlZFZQQ0VuZHBvaW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBSZWQgSGF0IE9wZW5TaGlmdCBTZXJ2aWNlIG9uIEFXUyAoUk9TQSkgaW5zdGFsbGVyIHRvIGNvbmZpZ3VyZSBSb3V0ZTUzIHJlY29yZHMuIEludGVuZGVkIHRvIGJlIHVzZWQgb24gYSBzaGFyZWQgVlBDLiAqL1xuICAgIHB1YmxpYyBST1NBU2hhcmVkVlBDUm91dGU1M1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBU2hhcmVkVlBDUm91dGU1M1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIFJPU0Egc2l0ZSByZWxpYWJpbGl0eSBlbmdpbmVlcmluZyAoU1JFKSB0aGUgcGVybWlzc2lvbnMgbmVlZGVkIHRvIGluaXRpYWxseSBvYnNlcnZlLCBkaWFnbm9zZSwgYW5kIHN1cHBvcnQgQVdTIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggUmVkIEhhdCBPcGVuU2hpZnQgU2VydmljZSBvbiBBV1MgKFJPU0EpIGNsdXN0ZXJzLCBpbmNsdWRpbmcgdGhlIGFiaWxpdHkgdG8gY2hhbmdlIFJPU0EgY2x1c3RlciBub2RlIHN0YXRlLiAqL1xuICAgIHB1YmxpYyBST1NBU1JFU3VwcG9ydFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBU1JFU3VwcG9ydFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBSZWQgSGF0IE9wZW5TaGlmdCBTZXJ2aWNlIG9uIEFXUyAoUk9TQSkgd29ya2VyIG5vZGVzIGluIHlvdXIgYWNjb3VudCByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBFQzIgaW5zdGFuY2VzIGFuZCBBV1MgUmVnaW9ucyBmb3IgY29tcHV0ZSBub2RlIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiAqL1xuICAgIHB1YmxpYyBST1NBV29ya2VySW5zdGFuY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQVdvcmtlckluc3RhbmNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSBMaW5rZWQgUm9sZSBQb2xpY3kgZm9yIFJvdXRlIDUzIFJlY292ZXJ5IFJlYWRpbmVzcyAqL1xuICAgIHB1YmxpYyBSb3V0ZTUzUmVjb3ZlcnlSZWFkaW5lc3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Sb3V0ZTUzUmVjb3ZlcnlSZWFkaW5lc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBSb3V0ZTUzIFJlc29sdmVyICovXG4gICAgcHVibGljIFJvdXRlNTNSZXNvbHZlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJvdXRlNTNSZXNvbHZlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQSBzZXJ2aWNlLWxpbmtlZCByb2xlIHJlcXVpcmVkIGZvciBBV1MgUlRCRmFicmljIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHlvdXIgbmV0d29yayBpbnRlcmZhY2UgcmVzb3VyY2VzIGFuZCBkZWxpdmVyIG1ldHJpY3MuICovXG4gICAgcHVibGljIFJUQkZhYnJpY1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJUQkZhYnJpY1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IFMzIFN0b3JhZ2UgTGVucyAqL1xuICAgIHB1YmxpYyBTM1N0b3JhZ2VMZW5zU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUzNTdG9yYWdlTGVuc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHJlcXVpcmVkIHRvIHVubG9jayBhIFMzIGJ1Y2tldCBwb2xpY3kgdXNpbmcgdGhlIFNlY3VyaXR5IFRva2VuIFNlcnZpY2UgKFNUUykgQXNzdW1lUm9vdCBBUEkuIFVzZSB0aGlzIG1hbmFnZWQgcG9saWN5IG9ubHkgd2l0aCB0aGUgU1RTIEFzc3VtZVJvb3QgYWN0aW9uLiAqL1xuICAgIHB1YmxpYyBTM1VubG9ja0J1Y2tldFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TM1VubG9ja0J1Y2tldFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGluaXRpYWwgYWRtaW5pc3RyYXRpdmUgYW5kIGluZGl2aWR1YWwgc2V0dXAgcHJpdmlsZWdlcyBmb3IgQW1hem9uIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpbyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gQWxsb3dzIGxhdW5jaGluZyBvZiBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8gUG9ydGFsLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9BZG1pbklBTUNvbnNvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvQWRtaW5JQU1Db25zb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWRtaW5pc3RyYXRpdmUgZXhlY3V0aW9uIHBvbGljeSBmb3IgdXNpbmcgSUFNIHJvbGVzIHdpdGggU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvLiBBbGxvd3MgYWRtaW5zIHRvIHByb3Zpc2lvbiwgbWFuYWdlIGFuZCBhY2Nlc3MgcmVzb3VyY2VzIGluIHlvdXIgYWNjb3VudCAoZXhjbHVkaW5nIGFjY2VzcyB0byBkYXRhIHJlc291cmNlcykgZm9yIElBTS1iYXNlZCB1c2FnZSBvZiBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0FkbWluSUFNRGVmYXVsdEV4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9BZG1pbklBTURlZmF1bHRFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBZG1pbmlzdHJhdGl2ZSBleGVjdXRpb24gcG9saWN5IGZvciB1c2luZyBJQU0gcm9sZXMgd2l0aCBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8uIEFsbG93cyBhZG1pbnMgdG8gcHJvdmlzaW9uLCBtYW5hZ2UgYW5kIGFjY2VzcyByZXNvdXJjZXMgaW4gdGhlIGxvY2FsIGFjY291bnQgKGluY2x1ZGluZyBicm9hZCBhY2Nlc3MgdG8gYWxsIEFQSXMgaW4gZGF0YSBzZXJ2aWNlcyBsaWtlIFMzLCBHbHVlLCBDbG91ZFdhdGNoIExvZ3MsIGFuZCBvdGhlcnMpIGZvciBJQU0tYmFzZWQgdXNhZ2Ugb2YgU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9BZG1pbklBTVBlcm1pc3NpdmVFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvQWRtaW5JQU1QZXJtaXNzaXZlRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBJQU0gcG9saWN5IGdyYW50cyBhbiBJQU0gcm9sZSBmdWxsIGFjY2VzcyB0byBBV1MgR2x1ZSBEYXRhIENhdGFsb2cgKG1ldGFkYXRhKSBhbmQgQW1hem9uIFMzIChhY3R1YWwgZGF0YSkgZm9yIGRhdGEgbGFrZSBvcGVyYXRpb25zLCB3aXRoIGFjY2VzcyBzY29wZWQgYnkgYWNjb3VudCwgYW5kIHJvbGUgdGFncy4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvQWRtaW5Qcm9qZWN0VXNlclJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvQWRtaW5Qcm9qZWN0VXNlclJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIEJlZHJvY2sgQWdlbnRzIHRvIGFjY2VzcyBBbWF6b24gQmVkcm9jayBtb2RlbHMgYW5kIG90aGVyIHJlc291cmNlcyBhdHRhY2hlZCB0byBhbiBhZ2VudCBpbiBTYWdlTWFrZXIgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9CZWRyb2NrQWdlbnRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9CZWRyb2NrQWdlbnRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBhbiBBbWF6b24gQmVkcm9jayBjaGF0IGFnZW50IGFwcCdzIGNvbmZpZ3VyYXRpb24gYW5kIEFtYXpvbiBCZWRyb2NrIGFnZW50IGluIFNhZ2VNYWtlciBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0JlZHJvY2tDaGF0QWdlbnRVc2VyUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9CZWRyb2NrQ2hhdEFnZW50VXNlclJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIEJlZHJvY2sgdG8gYWNjZXNzIEFtYXpvbiBCZWRyb2NrIG1vZGVscyBhbmQgZGF0YXNldHMgZm9yIGV2YWx1YXRpb24gam9icyBpbiBTYWdlTWFrZXIgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9CZWRyb2NrRXZhbHVhdGlvbkpvYlNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0JlZHJvY2tFdmFsdWF0aW9uSm9iU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIEJlZHJvY2sgRmxvd3MgdG8gYWNjZXNzIEFtYXpvbiBCZWRyb2NrIG1vZGVscyBhbmQgb3RoZXIgcmVzb3VyY2VzIGF0dGFjaGVkIHRvIGEgZmxvdyBpbiBTYWdlTWFrZXIgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9CZWRyb2NrRmxvd1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0JlZHJvY2tGbG93U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIExhbWJkYSB0byBhY2Nlc3MgYW4gQW1hem9uIEJlZHJvY2sgZnVuY3Rpb24gY29tcG9uZW50J3MgY29uZmlndXJhdGlvbiBpbiBTYWdlTWFrZXIgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9CZWRyb2NrRnVuY3Rpb25FeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0JlZHJvY2tGdW5jdGlvbkV4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gY29uZmlndXJlIHZlY3RvciBzdG9yZXMgYW5kIEFtYXpvbiBCZWRyb2NrIGtub3dsZWRnZSBiYXNlcyBpbiBTYWdlTWFrZXIgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9CZWRyb2NrS25vd2xlZGdlQmFzZUN1c3RvbVJlc291cmNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0JlZHJvY2tLbm93bGVkZ2VCYXNlQ3VzdG9tUmVzb3VyY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIEJlZHJvY2sgS25vd2xlZGdlIEJhc2VzIHRvIGFjY2VzcyBBbWF6b24gQmVkcm9jayBtb2RlbHMgYW5kIGRhdGEgc291cmNlcyBpbiBTYWdlTWFrZXIgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9CZWRyb2NrS25vd2xlZGdlQmFzZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0JlZHJvY2tLbm93bGVkZ2VCYXNlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gYW4gQW1hem9uIEJlZHJvY2sgcHJvbXB0IGFuZCBpdHMgY29uZmlndXJhdGlvbiBpbiBTYWdlTWFrZXIgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9CZWRyb2NrUHJvbXB0VXNlclJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja1Byb21wdFVzZXJSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgdXNlZCBieSBBbWF6b24gU2FnZU1ha2VyIFN0dWRpbyB0byBjYXRhbG9nLCBkaXNjb3ZlciwgZ292ZXJuLCBzaGFyZSwgYW5kIGFuYWx5emUgZGF0YSBpbiB0aGUgQW1hem9uIFNhZ2VNYWtlciBTdHVkaW8gZG9tYWluLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9Eb21haW5FeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0RvbWFpbkV4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIHJvbGUgZm9yIGRvbWFpbiBsZXZlbCBhY3Rpb25zIGluIHRoZSBwb3J0YWwgdGhhdCBhcmUgcGVyZm9ybWVkIGJ5IEFtYXpvbiBTYWdlTWFrZXIgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9Eb21haW5TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9Eb21haW5TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBTYWdlTWFrZXIgU3R1ZGlvIGNyZWF0ZXMgSUFNIHJvbGVzIGZvciBwcm9qZWN0cyB1c2VycyB0byBwZXJmb3JtIGRhdGEgYW5hbHl0aWNzLCBhcnRpZmljaWFsIGludGVsbGlnZW5jZSwgYW5kIG1hY2hpbmUgbGVhcm5pbmcgYWN0aW9ucywgYW5kIHVzZXMgdGhpcyBwb2xpY3kgd2hlbiBjcmVhdGluZyB0aGVzZSByb2xlcyB0byBkZWZpbmUgdGhlIHBlcm1pc3Npb25zIHJlbGF0ZWQgdG8gRU1SLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9FTVJDb250YWluZXJzU3lzdGVtTmFtZXNwYWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9FTVJDb250YWluZXJzU3lzdGVtTmFtZXNwYWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBTYWdlTWFrZXIgU3R1ZGlvIGNyZWF0ZXMgSUFNIHJvbGVzIGZvciBwcm9qZWN0cyB1c2VycyB0byBwZXJmb3JtIGRhdGEgYW5hbHl0aWNzLCBhcnRpZmljaWFsIGludGVsbGlnZW5jZSwgYW5kIG1hY2hpbmUgbGVhcm5pbmcgYWN0aW9ucywgYW5kIHVzZXMgdGhpcyBwb2xpY3kgd2hlbiBjcmVhdGluZyB0aGVzZSByb2xlcyB0byBkZWZpbmUgdGhlIHBlcm1pc3Npb25zIHJlbGF0ZWQgdG8gRU1SLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9FTVJJbnN0YW5jZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvRU1SSW5zdGFuY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFNhZ2VNYWtlciBTdHVkaW8gY3JlYXRlcyBJQU0gcm9sZXMgZm9yIHByb2plY3RzIHVzZXJzIHRvIHBlcmZvcm0gZGF0YSBhbmFseXRpY3MsIGFydGlmaWNpYWwgaW50ZWxsaWdlbmNlLCBhbmQgbWFjaGluZSBsZWFybmluZyBhY3Rpb25zLCBhbmQgdXNlcyB0aGlzIHBvbGljeSB3aGVuIGNyZWF0aW5nIHRoZXNlIHJvbGVzIHRvIGRlZmluZSB0aGUgcGVybWlzc2lvbnMgcmVsYXRlZCB0byBFTVIuICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0VNUlNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0VNUlNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpbyB2aWEgdGhlIEFtYXpvbiBTYWdlTWFrZXIgbWFuYWdlbWVudCBjb25zb2xlLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gU2FnZU1ha2VyIFN0dWRpbyB1c2VzIHRoaXMgcG9saWN5IHRvIHByb3Zpc2lvbiBhbmQgbWFuYWdlIHJlc291cmNlcyBpbiB5b3VyIGFjY291bnQuICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb1Byb2plY3RQcm92aXNpb25pbmdSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb1Byb2plY3RQcm92aXNpb25pbmdSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFNhZ2VNYWtlciBTdHVkaW8gY3JlYXRlcyBJQU0gcm9sZXMgZm9yIHByb2plY3RzIHVzZXJzIHRvIHBlcmZvcm0gZGF0YSBhbmFseXRpY3MsIGFydGlmaWNpYWwgaW50ZWxsaWdlbmNlLCBhbmQgbWFjaGluZSBsZWFybmluZyBhY3Rpb25zLCBhbmQgdXNlcyB0aGlzIHBvbGljeSB3aGVuIGNyZWF0aW5nIHRoZXNlIHJvbGVzIHRvIGRlZmluZSB0aGUgcGVybWlzc2lvbnMgcmVsYXRlZCB0byBTYWdlTWFrZXIuICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb1Byb2plY3RSb2xlTWFjaGluZUxlYXJuaW5nUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb1Byb2plY3RSb2xlTWFjaGluZUxlYXJuaW5nUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFNhZ2VNYWtlciBjcmVhdGVzIElBTSByb2xlcyBmb3IgUHJvamVjdHMgdXNlcnMgdG8gcGVyZm9ybSBkYXRhIGFuYWx5dGljcywgYXJ0aWZpY2lhbCBpbnRlbGxpZ2VuY2UsIGFuZCBtYWNoaW5lIGxlYXJuaW5nIGFjdGlvbnMsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgdGhlc2Ugcm9sZXMgdG8gZGVmaW5lIHRoZSBib3VuZGFyeSBvZiB0aGVpciBwZXJtaXNzaW9ucy4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvUHJvamVjdFVzZXJSb2xlUGVybWlzc2lvbnNCb3VuZGFyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9Qcm9qZWN0VXNlclJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFNhZ2VNYWtlciBTdHVkaW8gY3JlYXRlcyBJQU0gcm9sZXMgZm9yIHByb2plY3RzIHVzZXJzIHRvIHBlcmZvcm0gZGF0YSBhbmFseXRpY3MsIGFydGlmaWNpYWwgaW50ZWxsaWdlbmNlLCBhbmQgbWFjaGluZSBsZWFybmluZyBhY3Rpb25zLCBhbmQgdXNlcyB0aGlzIHBvbGljeSB3aGVuIGNyZWF0aW5nIHRoZXNlIHJvbGVzIHRvIGRlZmluZSB0aGUgcGVybWlzc2lvbnMuICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb1Byb2plY3RVc2VyUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9Qcm9qZWN0VXNlclJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gU2FnZU1ha2VyIFN0dWRpbyB1c2VzIHRoaXMgcG9saWN5IHdoZW4gcnVubmluZyBxdWVyeSBleGVjdXRpb25zIG9uIGZlZGVyYXRlZCBjb25uZWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvUXVlcnlFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb1F1ZXJ5RXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGluZGl2aWR1YWwgc2V0dXAgcHJpdmlsZWdlcyBmb3IgQW1hem9uIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpbyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gQWxsb3dzIGxhdW5jaGluZyBvZiBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8gUG9ydGFsLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9Vc2VySUFNQ29uc29sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9Vc2VySUFNQ29uc29sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEV4ZWN1dGlvbiBwb2xpY3kgZm9yIHVzaW5nIElBTSByb2xlcyB3aXRoIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpby4gQWxsb3dzIHVzZXJzIHRvIGFjY2VzcyByZXNvdXJjZXMgaW4gdGhlIGxvY2FsIGFjY291bnQgKGV4Y2x1ZGluZyBhY2Nlc3MgdG8gZGF0YSByZXNvdXJjZXMpIGZvciBJQU0tYmFzZWQgdXNhZ2Ugb2YgU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9Vc2VySUFNRGVmYXVsdEV4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9Vc2VySUFNRGVmYXVsdEV4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEV4ZWN1dGlvbiBwb2xpY3kgZm9yIHVzaW5nIElBTSByb2xlcyB3aXRoIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpby4gQWxsb3dzIHVzZXJzIHRvIGFjY2VzcyByZXNvdXJjZXMgaW4geW91ciBhY2NvdW50IChpbmNsdWRpbmcgYnJvYWQgYWNjZXNzIHRvIGFsbCBBUElzIGluIGRhdGEgc2VydmljZXMgbGlrZSBTMywgR2x1ZSwgQ2xvdWRXYXRjaCBMb2dzLCBhbmQgb3RoZXJzKSBmb3IgSUFNLWJhc2VkIHVzYWdlIG9mIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvVXNlcklBTVBlcm1pc3NpdmVFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvVXNlcklBTVBlcm1pc3NpdmVFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkL3dyaXRlIGFjY2VzcyB0byBBV1MgU2VjcmV0cyBNYW5hZ2VyIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gTm90ZTogdGhpcyBleGx1ZGVzIElBTSBhY3Rpb25zLCBzbyBjb21iaW5lIHdpdGggSUFNRnVsbEFjY2VzcyBpZiByb3RhdGlvbiBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkLiAqL1xuICAgIHB1YmxpYyBTZWNyZXRzTWFuYWdlclJlYWRXcml0ZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZWNyZXRzTWFuYWdlclJlYWRXcml0ZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBhdXRoZW50aWNhdGVkIHVzZXJzIHRvIGFjY2VzcyB0aGUgU2VjdXJpdHkgQWdlbnQgV2ViIEFwcGxpY2F0aW9uIGZvciBjb25maWd1cmluZyBhbmQgZXhlY3V0aW5nIGF1dG9tYXRlZCBzZWN1cml0eSBwZW5ldHJhdGlvbiB0ZXN0cy4gVGhpcyBwb2xpY3kgZW5hYmxlcyB1c2VycyB0byBtYW5hZ2UgcGVudGVzdHMsIHZpZXcgZmluZGluZ3MsIG1vbml0b3IgdGVzdCBleGVjdXRpb24sIGFuZCBpbnRlcmFjdCB3aXRoIEFXUyByZXNvdXJjZXMgcmVxdWlyZWQgZm9yIHNlY3VyaXR5IHRlc3Rpbmcgb3BlcmF0aW9ucy4gKi9cbiAgICBwdWJsaWMgU2VjdXJpdHlBZ2VudFdlYkFwcEFQSVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZWN1cml0eUFnZW50V2ViQXBwQVBJUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIHNlY3VyaXR5IGF1ZGl0IHRlbXBsYXRlIGdyYW50cyBhY2Nlc3MgdG8gcmVhZCBzZWN1cml0eSBjb25maWd1cmF0aW9uIG1ldGFkYXRhLiBJdCBpcyB1c2VmdWwgZm9yIHNvZnR3YXJlIHRoYXQgYXVkaXRzIHRoZSBjb25maWd1cmF0aW9uIG9mIGFuIEFXUyBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBTZWN1cml0eUF1ZGl0KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNlY3VyaXR5QXVkaXQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gbWFuYWdlIHJlc291cmNlcyBjcmVhdGVkIGJ5IFNlY3VyaXR5IExha2UuICovXG4gICAgcHVibGljIFNlY3VyaXR5TGFrZVJlc291cmNlTWFuYWdlbWVudFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNlY3VyaXR5TGFrZVJlc291cmNlTWFuYWdlbWVudFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIG9wZXJhdGUgdGhlIEFtYXpvbiBTZWN1cml0eSBMYWtlIHNlcnZpY2Ugb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgU2VjdXJpdHlMYWtlU2VydmljZUxpbmtlZFJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VjdXJpdHlMYWtlU2VydmljZUxpbmtlZFJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyB0byBhbGxvdyB0aGUgQVdTIFNlcnZlciBNaWdyYXRpb24gQ29ubmVjdG9yIHRvIG1pZ3JhdGUgVk1zIHRvIEVDMi4gQWxsb3dzIGNvbW11bmljYXRpb24gd2l0aCB0aGUgQVdTIFNlcnZlciBNaWdyYXRpb24gU2VydmljZSwgcmVhZC93cml0ZSBhY2Nlc3MgdG8gUzMgYnVja2V0cyBzdGFydGluZyB3aXRoICdzbXMtYi0nIGFuZCAnaW1wb3J0LXRvLWVjMi0nIGFzIHdlbGwgYXMgdGhlIGJ1Y2tldHMgdXNlZCBmb3IgQVdTIFNlcnZlciBNaWdyYXRpb24gQ29ubmVjdG9yIHVwZ3JhZGUsIEFXUyBTZXJ2ZXIgTWlncmF0aW9uIENvbm5lY3RvciByZWdpc3RyYXRpb24gd2l0aCBBV1MsIGFuZCBtZXRyaWNzIHVwbG9hZCB0byBBV1MuICovXG4gICAgcHVibGljIFNlcnZlck1pZ3JhdGlvbkNvbm5lY3RvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZXJ2ZXJNaWdyYXRpb25Db25uZWN0b3IpO1xuICAgIH1cblxuICAgIC8qKiBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgYWxsIGZlYXR1cmVzIG9mIHRoZSBTZXJ2ZXIgTWlncmF0aW9uIFNlcnZpY2UgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBTZXJ2ZXJNaWdyYXRpb25TZXJ2aWNlQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VydmVyTWlncmF0aW9uU2VydmljZUNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgdG8gYWxsb3cgdGhlIEFXUyBTZXJ2ZXIgTWlncmF0aW9uIFNlcnZpY2UgdG8gY3JlYXRlIGFuZCB1cGRhdGUgcmVsZXZhbnQgQVdTIHJlc291cmNlcyBpbnRvIHRoZSBjdXN0b21lcidzIEFXUyBhY2NvdW50IGZvciBsYXVuY2hpbmcgbWlncmF0ZWQgc2VydmVycyBhbmQgYXBwbGljYXRpb25zLiAqL1xuICAgIHB1YmxpYyBTZXJ2ZXJNaWdyYXRpb25TZXJ2aWNlTGF1bmNoUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZXJ2ZXJNaWdyYXRpb25TZXJ2aWNlTGF1bmNoUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFBlcm1pc3Npb25zIHRvIGFsbG93IHRoZSBBV1MgU01TIHRvIHJ1biB1c2VkIGRhdGEgdmFsaWRhdGlvbiBzY3JpcHQgYW5kIHNlbmQgc2NyaXB0IHN1Y2Nlc3MvZmFpbHVyZSBiYWNrIHRvIFNNUyAqL1xuICAgIHB1YmxpYyBTZXJ2ZXJNaWdyYXRpb25TZXJ2aWNlUm9sZUZvckluc3RhbmNlVmFsaWRhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZXJ2ZXJNaWdyYXRpb25TZXJ2aWNlUm9sZUZvckluc3RhbmNlVmFsaWRhdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIFNlcnZpY2UgUXVvdGFzICovXG4gICAgcHVibGljIFNlcnZpY2VRdW90YXNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNlcnZpY2VRdW90YXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBTZXJ2aWNlIFF1b3RhcyAqL1xuICAgIHB1YmxpYyBTZXJ2aWNlUXVvdGFzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VydmljZVF1b3Rhc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFNlcnZpY2UgUXVvdGFzIHRvIGNyZWF0ZSBzdXBwb3J0IGNhc2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIFNlcnZpY2VRdW90YXNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZXJ2aWNlUXVvdGFzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgcHJvZ3JhbW1hdGljIGFjY2VzcyB0byBBV1MgdGhyb3VnaCB0aGUgQVdTIFNpZ24taW4gc2VydmljZSwgaW5jbHVkaW5nIE9BdXRoMiB0b2tlbiBjcmVhdGlvbiBmb3IgZGV2ZWxvcGVyIHRvb2xzIGFuZCBhcHBsaWNhdGlvbnMuICovXG4gICAgcHVibGljIFNpZ25JbkxvY2FsRGV2ZWxvcG1lbnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2lnbkluTG9jYWxEZXZlbG9wbWVudEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBTaW1wbGUgV29ya2Zsb3cgY29uZmlndXJhdGlvbiBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBTaW1wbGVXb3JrZmxvd0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2ltcGxlV29ya2Zsb3dGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFNNU1ZvaWNlIHRvIHB1Ymxpc2ggbWV0cmljcyB0byBDbG91ZFdhdGNoIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIFNNU1ZvaWNlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU01TVm9pY2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBzcGxpdCBjb3N0IGFsbG9jYXRpb24gZGF0YSB0byByZXRyaWV2ZSBBV1MgT3JnYW5pemF0aW9ucyBpbmZvcm1hdGlvbiwgaWYgYXBwbGljYWJsZSwgYW5kIGNvbGxlY3QgdGVsZW1ldHJ5IGRhdGEgZm9yIHRoZSBzcGxpdCBjb3N0IGFsbG9jYXRpb24gZGF0YSBzZXJ2aWNlcyB0aGF0IHRoZSBjdXN0b21lciBoYXMgb3B0ZWQgaW4gdG8uICovXG4gICAgcHVibGljIFNwbGl0Q29zdEFsbG9jYXRpb25EYXRhU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU3BsaXRDb3N0QWxsb2NhdGlvbkRhdGFTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyByZXF1aXJlZCB0byB1bmxvY2sgYSBTUVMgcXVldWUgcG9saWN5IHVzaW5nIHRoZSBTZWN1cml0eSBUb2tlbiBTZXJ2aWNlIChTVFMpIEFzc3VtZVJvb3QgQVBJLiBVc2UgdGhpcyBtYW5hZ2VkIHBvbGljeSBvbmx5IHdpdGggdGhlIFNUUyBBc3N1bWVSb290IGFjdGlvbi4gKi9cbiAgICBwdWJsaWMgU1FTVW5sb2NrUXVldWVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU1FTVW5sb2NrUXVldWVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBjaGVjayBRdWljayBTZXR1cCBjb25maWd1cmF0aW9uIGhlYWx0aCwgZW5zdXJlIGNvbnNpc3RlbnQgdXNlIG9mIHBhcmFtZXRlcnMgYW5kIHByb3Zpc2lvbmVkIHJlc291cmNlcywgYW5kIHJlbWVkaWF0ZSByZXNvdXJjZXMgd2hlbiBkcmlmdCBpcyBkZXRlY3RlZC4gKi9cbiAgICBwdWJsaWMgU1NNUXVpY2tTZXR1cFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU1NNUXVpY2tTZXR1cFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gdHJvdWJsZXNob290IGFuZCByZXNvbHZlIGlzc3VlcyBpbiBhbiBBV1MgYWNjb3VudC4gVGhpcyBwb2xpY3kgYWxzbyBlbmFibGVzIHRoZSB1c2VyIHRvIGNvbnRhY3QgQVdTIHN1cHBvcnQgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgY2FzZXMuICovXG4gICAgcHVibGljIFN1cHBvcnRVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlN1cHBvcnRVc2VyKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHBlcm1pc3Npb25zIG5lY2Vzc2FyeSBmb3IgcmVzb3VyY2VzIHJlcXVpcmVkIGZvciBhcHBsaWNhdGlvbiBhbmQgZGV2ZWxvcG1lbnQgb3BlcmF0aW9ucy4gKi9cbiAgICBwdWJsaWMgU3lzdGVtQWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TeXN0ZW1BZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFRyYW5zbGF0ZS4gKi9cbiAgICBwdWJsaWMgVHJhbnNsYXRlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5UcmFuc2xhdGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gVHJhbnNsYXRlLiAqL1xuICAgIHB1YmxpYyBUcmFuc2xhdGVSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5UcmFuc2xhdGVSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byB2aWV3IHJlc291cmNlcyBhbmQgYmFzaWMgbWV0YWRhdGEgYWNyb3NzIGFsbCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIFZpZXdPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlZpZXdPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBWTSBJbXBvcnQvRXhwb3J0IHNlcnZpY2Ugcm9sZSwgZm9yIGN1c3RvbWVycyB1c2luZyB0aGUgQVdTIENvbm5lY3Rvci4gVGhlIFZNIEltcG9ydC9FeHBvcnQgc2VydmljZSBhc3N1bWVzIGEgcm9sZSB3aXRoIHRoaXMgcG9saWN5IHRvIGZ1bGZpbGwgdmlydHVhbCBtYWNoaW5lIG1pZ3JhdGlvbiByZXF1ZXN0cyBmcm9tIHRoZSBBV1MgQ29ubmVjdG9yIHZpcnR1YWwgYXBwbGlhbmNlLiAoTm90ZSB0aGF0IHRoZSBBV1MgQ29ubmVjdG9yIHVzZXMgdGhlIFwiQVdTQ29ubmVjdG9yXCIgbWFuYWdlZCBwb2xpY3kgdG8gaXNzdWUgcmVxdWVzdHMgb24gdGhlIGN1c3RvbWVyJ3MgYmVoYWxmIHRvIHRoZSBWTSBJbXBvcnQvRXhwb3J0IHNlcnZpY2UuKSBQcm92aWRlcyB0aGUgYWJpbGl0eSB0byBjcmVhdGUgQU1JcyBhbmQgRUJTIHNuYXBzaG90cywgbW9kaWZ5IEVCUyBzbmFwc2hvdCBhdHRyaWJ1dGVzLCBtYWtlIFwiRGVzY3JpYmUqXCIgY2FsbHMgb24gRUMyIG9iamVjdHMsIGFuZCByZWFkIGZyb20gUzMgYnVja2V0cyBzdGFydGluZyB3aXRoICdpbXBvcnQtdG8tZWMyLScuICovXG4gICAgcHVibGljIFZNSW1wb3J0RXhwb3J0Um9sZUZvckFXU0Nvbm5lY3RvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5WTUltcG9ydEV4cG9ydFJvbGVGb3JBV1NDb25uZWN0b3IpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gVlBDIExhdHRpY2UgYW5kIGFjY2VzcyB0byBkZXBlbmRlbmN5IHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBWUENMYXR0aWNlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5WUENMYXR0aWNlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIFZQQyBMYXR0aWNlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSwgYW5kIGxpbWl0ZWQgYWNjZXNzIHRvIGRlcGVuZGVuY3kgc2VydmljZXMuICovXG4gICAgcHVibGljIFZQQ0xhdHRpY2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5WUENMYXR0aWNlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gaW52b2tpbmcgQW1hem9uIFZQQyBMYXR0aWNlIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBWUENMYXR0aWNlU2VydmljZXNJbnZva2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuVlBDTGF0dGljZVNlcnZpY2VzSW52b2tlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRpbmcgU0xSIHRvIHdyaXRlIGN1c3RvbWVyJ3MgbG9ncyB0byBhIGZpcmVob3NlIHN0cmVhbSAqL1xuICAgIHB1YmxpYyBXQUZMb2dnaW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuV0FGTG9nZ2luZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRpbmcgU0xSIHRvIHdyaXRlIGN1c3RvbWVyJ3MgbG9ncyB0byBhIGZpcmVob3NlIHN0cmVhbSAqL1xuICAgIHB1YmxpYyBXQUZSZWdpb25hbExvZ2dpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5XQUZSZWdpb25hbExvZ2dpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGNyZWF0ZXMgYSBzZXJ2aWNlLWxpbmtlZCByb2xlIHRoYXQgYWxsb3dzIEFXUyBXQUYgdG8gd3JpdGUgbG9ncyB0byBBbWF6b24gS2luZXNpcyBEYXRhIEZpcmVob3NlLiAqL1xuICAgIHB1YmxpYyBXQUZWMkxvZ2dpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5XQUZWMkxvZ2dpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBXZWxsLUFyY2hpdGVjdGVkIFRvb2wgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlICovXG4gICAgcHVibGljIFdlbGxBcmNoaXRlY3RlZENvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLldlbGxBcmNoaXRlY3RlZENvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgV2VsbC1BcmNoaXRlY3RlZCBUb29sIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBXZWxsQXJjaGl0ZWN0ZWRDb25zb2xlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuV2VsbEFyY2hpdGVjdGVkQ29uc29sZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFtYXpvbiBXb3JrTGluayAqL1xuICAgIHB1YmxpYyBXb3JrTGlua1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLldvcmtMaW5rU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cbn1cbiJdfQ==
|