iam-floyd 0.830.0 → 0.832.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/lib/generated/aws-managed-policies/cdk-iam-floyd.d.ts +10 -0
- package/lib/generated/aws-managed-policies/cdk-iam-floyd.js +21 -1
- package/lib/generated/aws-managed-policies/iam-floyd.d.ts +10 -0
- package/lib/generated/aws-managed-policies/iam-floyd.js +11 -1
- package/lib/generated/policy-statements/bedrock-agentcore.d.ts +61 -0
- package/lib/generated/policy-statements/bedrock-agentcore.js +79 -1
- package/lib/generated/policy-statements/connect.d.ts +10 -0
- package/lib/generated/policy-statements/connect.js +14 -1
- package/lib/generated/policy-statements/ecs.d.ts +2 -0
- package/lib/generated/policy-statements/ecs.js +3 -1
- package/lib/generated/policy-statements/payment-cryptography.d.ts +91 -2
- package/lib/generated/policy-statements/payment-cryptography.js +105 -3
- package/lib/generated/policy-statements/s3.d.ts +28 -0
- package/lib/generated/policy-statements/s3.js +33 -1
- package/lib/generated/policy-statements/support-console.d.ts +26 -0
- package/lib/generated/policy-statements/support-console.js +27 -1
- package/lib/generated/policy-statements/vpc-lattice-svcs.d.ts +24 -0
- package/lib/generated/policy-statements/vpc-lattice-svcs.js +27 -1
- package/package.json +1 -1
|
@@ -1407,6 +1407,10 @@ class AwsManagedPolicy extends iam_floyd_1.AwsManagedPolicy {
|
|
|
1407
1407
|
AmazonNimbleStudioStudioUser() {
|
|
1408
1408
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonNimbleStudioStudioUser);
|
|
1409
1409
|
}
|
|
1410
|
+
/** Provides administrative access to manage Autonomous Database resources in Oracle Database@AWS. */
|
|
1411
|
+
AmazonODBAutonomousDatabaseAdmin() {
|
|
1412
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonODBAutonomousDatabaseAdmin);
|
|
1413
|
+
}
|
|
1410
1414
|
/** Provides administrative access to manage Autonomous VM cluster resources in Oracle Database@AWS */
|
|
1411
1415
|
AmazonODBAutonomousVmClusterAdmin() {
|
|
1412
1416
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonODBAutonomousVmClusterAdmin);
|
|
@@ -1415,6 +1419,18 @@ class AwsManagedPolicy extends iam_floyd_1.AwsManagedPolicy {
|
|
|
1415
1419
|
AmazonODBExadataInfrastructureAdmin() {
|
|
1416
1420
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonODBExadataInfrastructureAdmin);
|
|
1417
1421
|
}
|
|
1422
|
+
/** Provides administrative access to manage Exadata VM cluster resources in Oracle Database@AWS. */
|
|
1423
|
+
AmazonODBExadataVmClusterAdmin() {
|
|
1424
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonODBExadataVmClusterAdmin);
|
|
1425
|
+
}
|
|
1426
|
+
/** Provides administrative access to manage Exascale storage vault resources in Oracle Database@AWS. */
|
|
1427
|
+
AmazonODBExascaleStorageVaultAdmin() {
|
|
1428
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonODBExascaleStorageVaultAdmin);
|
|
1429
|
+
}
|
|
1430
|
+
/** Provides administrative access to manage Exascale VM cluster resources in Oracle Database@AWS. */
|
|
1431
|
+
AmazonODBExascaleVmClusterAdmin() {
|
|
1432
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonODBExascaleVmClusterAdmin);
|
|
1433
|
+
}
|
|
1418
1434
|
/** Provides full access to resources in Oracle Database@AWS */
|
|
1419
1435
|
AmazonODBFullAccess() {
|
|
1420
1436
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonODBFullAccess);
|
|
@@ -1875,6 +1891,10 @@ class AwsManagedPolicy extends iam_floyd_1.AwsManagedPolicy {
|
|
|
1875
1891
|
AmazonSageMakerHyperPodInferenceAccess() {
|
|
1876
1892
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonSageMakerHyperPodInferenceAccess);
|
|
1877
1893
|
}
|
|
1894
|
+
/** This policy provides the permissions required to set up and operate the SageMaker HyperPod inference gateway. It enables the gateway to manage AWS Certificate Manager (ACM) certificates for TLS termination when deploying and serving inference workloads on HyperPod clusters. */
|
|
1895
|
+
AmazonSageMakerHyperPodInferenceGatewayAccess() {
|
|
1896
|
+
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonSageMakerHyperPodInferenceGatewayAccess);
|
|
1897
|
+
}
|
|
1878
1898
|
/** This policy provides administrative privileges required for setting up SageMaker HyperPod observability. It enables access to Amazon Managed Prometheus, Amazon Managed Grafana and EKS Addons. The policy also includes broad access to Grafana HTTP APIs through ServiceAccountTokens across all Amazon Managed Grafana workspaces in your account. */
|
|
1879
1899
|
AmazonSageMakerHyperPodObservabilityAdminAccess() {
|
|
1880
1900
|
return aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName(iam_floyd_1.AwsManagedPolicy.AmazonSageMakerHyperPodObservabilityAdminAccess);
|
|
@@ -6293,4 +6313,4 @@ class AwsManagedPolicy extends iam_floyd_1.AwsManagedPolicy {
|
|
|
6293
6313
|
}
|
|
6294
6314
|
}
|
|
6295
6315
|
exports.AwsManagedPolicy = AwsManagedPolicy;
|
|
6296
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWlhbS1mbG95ZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1pYW0tZmxveWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXNDO0FBQ3RDLDJDQUF5RTtBQUV6RTs7Ozs7O0dBTUc7QUFDSCxNQUFhLGdCQUFpQixTQUFRLDRCQUFzQjtJQUN4RCx5REFBeUQ7SUFDbEQsK0JBQStCO1FBQ2xDLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsNEJBQXNCLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUNsSCxDQUFDO0lBRUQsNkVBQTZFO0lBQ3RFLHFDQUFxQztRQUN4QyxPQUFPLHFCQUFPLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDRCQUFzQixDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFDeEgsQ0FBQztJQUVELHlNQUF5TTtJQUNsTSwyQkFBMkI7UUFDOUIsT0FBTyxxQkFBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyw0QkFBc0IsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQzlHLENBQUM7SUFFRCwwREFBMEQ7SUFDbkQsbUJBQW1CO1FBQ3RCLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsNEJBQXNCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN0RyxDQUFDO0lBRUQscUlBQXFJO0lBQzlILDBCQUEwQjtRQUM3QixPQUFPLHFCQUFPLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDRCQUFzQixDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVELDJMQUEyTDtJQUNwTCxzQ0FBc0M7UUFDekMsT0FBTyxxQkFBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyw0QkFBc0IsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBQ3pILENBQUM7SUFFRCxpREFBaUQ7SUFDMUMsdUJBQXVCO1FBQzFCLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdC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LGdDQUFnQyxDQUFDLENBQUM7SUFDbkgsQ0FBQztJQUVELDRGQUE0RjtJQUNyRixvQ0FBb0M7UUFDdkMsT0FBTyxxQkFBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyw0QkFBc0IsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0lBQ3ZILENBQUM7SUFFRCxzRkFBc0Y7SUFDL0UseUJBQXlCO1FBQzVCLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsNEJBQXNCLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM1RyxDQUFDO0NBQ0o7QUExcVBELDRDQTBxUEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhd3NfaWFtIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQXdzTWFuYWdlZFBvbGljeSBhcyBBd3NNYW5hZ2VkUG9saWN5U3RhdGljIH0gZnJvbSAnLi9pYW0tZmxveWQnO1xuXG4vKipcbiAqIFByb3ZpZGVzIGFsbCBBV1MgbWFuYWdlZCBwb2xpY2llcy5cbiAqXG4gKiBUbyBnZXQgdGhlIG5hbWUsIGFjY2VzcyB0aGUgc3RhdGljIHByb3BlcnRpZXMgb2YgdGhpcyBjbGFzcywgZS5nLiBgQXdzTWFuYWdlZFBvbGljeS5SZWFkT25seUFjY2Vzc2AuXG4gKlxuICogIFRvIGdldCBhbiBgYXdzX2lhbS5JTWFuYWdlZFBvbGljeWAgb2JqZWN0LCBjYWxsIHRoZSBtZXRob2RzIG9uIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcywgZS5nLiBgbmV3IEF3c01hbmFnZWRQb2xpY3koKS5SZWFkT25seUFjY2VzcygpYC5cbiAqL1xuZXhwb3J0IGNsYXNzIEF3c01hbmFnZWRQb2xpY3kgZXh0ZW5kcyBBd3NNYW5hZ2VkUG9saWN5U3RhdGljIHtcbiAgICAvKiogQWxsb3cgQWNjZXNzIEFuYWx5emVyIHRvIGFuYWx5emUgcmVzb3VyY2UgbWV0YWRhdGEgKi9cbiAgICBwdWJsaWMgQWNjZXNzQW5hbHl6ZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BY2Nlc3NBbmFseXplclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGFjY291bnQgYWNjZXNzIG1hbmFnZXIgcGVybWlzc2lvbnMgdG8gbWFuYWdlIEFXUyBhY2NvdW50IGFjY2VzcyAqL1xuICAgIHB1YmxpYyBBY2NvdW50QWNjZXNzTWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFjY291bnRBY2Nlc3NNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBGb3IgdXNlIHdpdGggYWNjb3VudHMgY3JlYXRlZCB0aHJvdWdoIHRoZSBWZXJjZWwgTWFya2V0cGxhY2UgaW50ZWdyYXRpb24gd2l0aCBBV1MuIFByb3ZpZGVzIGFjY2VzcyB0byBhY2NvdW50IG1hbmFnZW1lbnQsIG5vdGlmaWNhdGlvbiwgY29zdCBhbmQgdXNhZ2UgYW5hbHlzaXMsIGFuZCBpZGVudGl0eSBwcm92aWRlciBtYW5hZ2VtZW50LiAqL1xuICAgIHB1YmxpYyBBY2NvdW50TWFuYWdlbWVudEZyb21WZXJjZWwoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQWNjb3VudE1hbmFnZW1lbnRGcm9tVmVyY2VsKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFkbWluaXN0cmF0b3JBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQWRtaW5pc3RyYXRvckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBhY2NvdW50IGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zIHdoaWxlIGV4cGxpY2l0bHkgYWxsb3dpbmcgZGlyZWN0IGFjY2VzcyB0byByZXNvdXJjZXMgbmVlZGVkIGJ5IEFtcGxpZnkgYXBwbGljYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBZG1pbmlzdHJhdG9yQWNjZXNzQW1wbGlmeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BZG1pbmlzdHJhdG9yQWNjZXNzQW1wbGlmeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBhY2NvdW50IGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zLiBFeHBsaWNpdGx5IGFsbG93cyBkZXZlbG9wZXJzIGFuZCBhZG1pbmlzdHJhdG9ycyB0byBnYWluIGRpcmVjdCBhY2Nlc3MgdG8gcmVzb3VyY2VzIHRoZXkgbmVlZCB0byBtYW5hZ2UgQVdTIEVsYXN0aWMgQmVhbnN0YWxrIGFwcGxpY2F0aW9ucyAqL1xuICAgIHB1YmxpYyBBZG1pbmlzdHJhdG9yQWNjZXNzQVdTRWxhc3RpY0JlYW5zdGFsaygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BZG1pbmlzdHJhdG9yQWNjZXNzQVdTRWxhc3RpY0JlYW5zdGFsayk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBBZ2VudCBSZWdpc3RyeSAqL1xuICAgIHB1YmxpYyBBZ2VudFJlZ2lzdHJ5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BZ2VudFJlZ2lzdHJ5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgUmVhZE9ubHkgYWNjZXNzIHRvIEFXUyBBZ2VudCBSZWdpc3RyeSAqL1xuICAgIHB1YmxpYyBBZ2VudFJlZ2lzdHJ5UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQWdlbnRSZWdpc3RyeVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEFXUyBEZXZPcHMgQWdlbnQgdG8gY29uZHVjdCBpbnZlc3RpZ2F0aW9ucyBhbmQgcGVyZm9ybSBhbmFseXNpcyBvbiBjdXN0b21lciBBV1MgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBSURldk9wc0FnZW50QWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFJRGV2T3BzQWdlbnRBY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBlbGV2YXRlZCBwZXJtaXNzaW9ucyByZXF1aXJlZCBieSB0aGUgQVdTIERldk9wcyBBZ2VudCB0byBwZXJmb3JtIG9wZXJhdG9yLWFwcHJvdmVkIG11dGF0aW9ucyBvciBlbGV2YXRlZCBhY3Rpb25zIG9uIGN1c3RvbWVyIEFXUyByZXNvdXJjZXMgZHVyaW5nIG9wZXJhdGlvbmFsIGV2ZW50cy4gKi9cbiAgICBwdWJsaWMgQUlEZXZPcHNBZ2VudEFjdGlvbnNQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQUlEZXZPcHNBZ2VudEFjdGlvbnNQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRGV2T3BzIEFnZW50IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBBSURldk9wc0FnZW50RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BSURldk9wc0FnZW50RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIERldk9wcyBBZ2VudCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgKi9cbiAgICBwdWJsaWMgQUlEZXZPcHNBZ2VudFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFJRGV2T3BzQWdlbnRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgYWNjZXNzIHRvIGNoYXQgYW5kIG1hbmFnZSBpbnZlc3RpZ2F0aW9ucyB0aHJvdWdoIEFXUyBEZXZPcHMgQWdlbnQgZm9yIHlvdXIgQWdlbnRTcGFjZXMgKi9cbiAgICBwdWJsaWMgQUlEZXZPcHNDaGFubmVsQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFJRGV2T3BzQ2hhbm5lbEFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHJlcXVpcmVkIGJ5IHRoZSBBV1MgRGV2T3BzIEFnZW50IHRvIGNvb3JkaW5hdGUgd2l0aCBBZ2VudFNwYWNlcyBjb25uZWN0ZWQgdGhyb3VnaCBBZ2VudCBTcGFjZSBDb25zdGVsbGF0aW9uLiAqL1xuICAgIHB1YmxpYyBBSURldk9wc0NvbnN0ZWxsYXRpb25BY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQUlEZXZPcHNDb25zdGVsbGF0aW9uQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHVzZSB0aGUgQVdTIERldk9wcyBvcGVyYXRvciB3ZWIgYXBwIGZvciBhbiBBZ2VudCBTcGFjZS4gKi9cbiAgICBwdWJsaWMgQUlEZXZPcHNPcGVyYXRvckFwcEFjY2Vzc1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BSURldk9wc09wZXJhdG9yQXBwQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIEFXUyBEZXZPcHMgQWdlbnQgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgbmV0d29yayBpbnRlcmZhY2VzIGluIHlvdXIgVlBDIHNvIHRoYXQgcmVsZWFzZSBtYW5hZ2VtZW50IGFnZW50cyBjYW4gYWNjZXNzIHByaXZhdGUgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFJRGV2T3BzUmVsZWFzZU1hbmFnZW1lbnRWUENQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQUlEZXZPcHNSZWxlYXNlTWFuYWdlbWVudFZQQ1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHJlcXVpcmVkIGJ5IHRoZSBBbWF6b24gQUkgT3BlcmF0aW9ucyBBc3Npc3RhbnQgdG8gZ2VuZXJhdGUgaW5jaWRlbnQgcmVwb3J0IG9mIHRoZSBpbnZlc3RpZ2F0aW9uLiAqL1xuICAgIHB1YmxpYyBBSU9wc0Fzc2lzdGFudEluY2lkZW50UmVwb3J0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFJT3BzQXNzaXN0YW50SW5jaWRlbnRSZXBvcnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBSZWFkT25seSBwZXJtaXNzaW9ucyByZXF1aXJlZCBieSB0aGUgQW1hem9uIEFJIE9wZXJhdGlvbnMgQXNzaXN0YW50IHRvIGRvIGFuYWx5c2lzIG9uIGN1c3RvbWVyIEFXUyByZXNvdXJjZXMgZHVyaW5nIGludmVzdGlnYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBSU9wc0Fzc2lzdGFudFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BSU9wc0Fzc2lzdGFudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQUkgT3BlcmF0aW9ucyBzZXJ2aWNlIGFuZCBpdHMgcmVxdWlyZWQgcGVybWlzc2lvbnMgdmlhIEFXUyBjb25zb2xlLiBJdCBhbHNvIGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIHVzZSBpZGVudGl0eS1hd2FyZSBjb25zb2xlIHNlc3Npb25zLiAqL1xuICAgIHB1YmxpYyBBSU9wc0NvbnNvbGVBZG1pblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BSU9wc0NvbnNvbGVBZG1pblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBBSSBPcGVyYXRpb25zIEFQSXMgZm9yIGNyZWF0aW5nLCB1cGRhdGluZywgYW5kIGRlbGV0aW5nIGludmVzdGlnYXRpb25zLCBpbnZlc3RpZ2F0aW9uIGV2ZW50cywgYW5kIGludmVzdGlnYXRpb24gcmVzb3VyY2VzLiBJdCBhbHNvIGluY2x1ZGVzIFJlYWRPbmx5IGFjY2VzcyB0byBhbGwgQUkgT3BlcmF0aW9ucyBBUElzIGFuZCB0byB1c2UgaWRlbnRpdHktYXdhcmUgc2Vzc2lvbnMuICovXG4gICAgcHVibGljIEFJT3BzT3BlcmF0b3JBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQUlPcHNPcGVyYXRvckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBSZWFkT25seSBwZXJtaXNzaW9ucyB0byB0aGUgQW1hem9uIEFJIE9wZXJhdGlvbnMgc2VydmljZSBhbmQgaXRzIHJlcXVpcmVkIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQUlPcHNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BSU9wc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBkZXZpY2Ugc2V0dXAgYWNjZXNzIHRvIEFsZXhhRm9yQnVzaW5lc3Mgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQWxleGFGb3JCdXNpbmVzc0RldmljZVNldHVwKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFsZXhhRm9yQnVzaW5lc3NEZXZpY2VTZXR1cCk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byBBbGV4YUZvckJ1c2luZXNzIHJlc291cmNlcyBhbmQgYWNjZXNzIHRvIHJlbGF0ZWQgQVdTIFNlcnZpY2VzICovXG4gICAgcHVibGljIEFsZXhhRm9yQnVzaW5lc3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFsZXhhRm9yQnVzaW5lc3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBnYXRld2F5IGV4ZWN1dGlvbiBhY2Nlc3MgdG8gQWxleGFGb3JCdXNpbmVzcyBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBbGV4YUZvckJ1c2luZXNzR2F0ZXdheUV4ZWN1dGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbGV4YUZvckJ1c2luZXNzR2F0ZXdheUV4ZWN1dGlvbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgYWNjZXNzIHRvIExpZmVzaXplIEFWUyBkZXZpY2VzICovXG4gICAgcHVibGljIEFsZXhhRm9yQnVzaW5lc3NMaWZlc2l6ZURlbGVnYXRlZEFjY2Vzc1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbGV4YUZvckJ1c2luZXNzTGlmZXNpemVEZWxlZ2F0ZWRBY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBlbmFibGVzIEFsZXhhIGZvciBCdXNpbmVzcyB0byBwZXJmb3JtIGF1dG9tYXRlZCB0YXNrcyBzY2hlZHVsZWQgYnkgeW91ciBuZXR3b3JrIHByb2ZpbGVzLiAqL1xuICAgIHB1YmxpYyBBbGV4YUZvckJ1c2luZXNzTmV0d29ya1Byb2ZpbGVTZXJ2aWNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFsZXhhRm9yQnVzaW5lc3NOZXR3b3JrUHJvZmlsZVNlcnZpY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIGFjY2VzcyB0byBQb2x5IEFWUyBkZXZpY2VzICovXG4gICAgcHVibGljIEFsZXhhRm9yQnVzaW5lc3NQb2x5RGVsZWdhdGVkQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFsZXhhRm9yQnVzaW5lc3NQb2x5RGVsZWdhdGVkQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSByZWFkIG9ubHkgYWNjZXNzIHRvIEFsZXhhRm9yQnVzaW5lc3Mgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQWxleGFGb3JCdXNpbmVzc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFsZXhhRm9yQnVzaW5lc3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGNyZWF0ZS9lZGl0L2RlbGV0ZSBBUElzIGluIEFtYXpvbiBBUEkgR2F0ZXdheSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkFQSUdhdGV3YXlBZG1pbmlzdHJhdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFQSUdhdGV3YXlBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gaW52b2tlIEFQSXMgaW4gQW1hem9uIEFQSSBHYXRld2F5LiAqL1xuICAgIHB1YmxpYyBBbWF6b25BUElHYXRld2F5SW52b2tlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25BUElHYXRld2F5SW52b2tlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBUEkgR2F0ZXdheSB0byBwdXNoIGxvZ3MgdG8gdXNlcidzIGFjY291bnQuICovXG4gICAgcHVibGljIEFtYXpvbkFQSUdhdGV3YXlQdXNoVG9DbG91ZFdhdGNoTG9ncygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25BUElHYXRld2F5UHVzaFRvQ2xvdWRXYXRjaExvZ3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQXBwRmxvdyBhbmQgYWNjZXNzIHRvIEFXUyBzZXJ2aWNlcyBzdXBwb3J0ZWQgYXMgZmxvdyBzb3VyY2Ugb3IgZGVzdGluYXRpb24gKFMzIGFuZCBSZWRzaGlmdCkuIEFsc28gcHJvdmlkZXMgYWNjZXNzIHRvIEtNUyBmb3IgZW5jcnlwdGlvbiAqL1xuICAgIHB1YmxpYyBBbWF6b25BcHBGbG93RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25BcHBGbG93RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEFwcGZsb3cgZmxvd3MgKi9cbiAgICBwdWJsaWMgQW1hem9uQXBwRmxvd1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFwcEZsb3dSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBBUkMgUmVnaW9uIHN3aXRjaCBmb3IgcGxhbiBleGVjdXRpb24gYW5kIHBsYW4gZXZhbHVhdGlvbi4gKi9cbiAgICBwdWJsaWMgQW1hem9uQXBwbGljYXRpb25SZWNvdmVyeUNvbnRyb2xsZXJSZWdpb25Td2l0Y2hQbGFuRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFwcGxpY2F0aW9uUmVjb3ZlcnlDb250cm9sbGVyUmVnaW9uU3dpdGNoUGxhbkV4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBBcHBTdHJlYW0gdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25BcHBTdHJlYW1GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFwcFN0cmVhbUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gQXBwU3RyZWFtIDIuMCBhY2Nlc3MgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgUHJpdmF0ZSBDQSBpbiBjdXN0b21lciBhY2NvdW50cyBmb3IgY2VydGlmaWNhdGUtYmFzZWQgYXV0aGVudGljYXRpb24gKi9cbiAgICBwdWJsaWMgQW1hem9uQXBwU3RyZWFtUENBQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFwcFN0cmVhbVBDQUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEFwcFN0cmVhbSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkFwcFN0cmVhbVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFwcFN0cmVhbVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIEFtYXpvbiBBcHBTdHJlYW0gc2VydmljZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25BcHBTdHJlYW1TZXJ2aWNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFwcFN0cmVhbVNlcnZpY2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBBdGhlbmEgYW5kIHNjb3BlZCBhY2Nlc3MgdG8gdGhlIGRlcGVuZGVuY2llcyBuZWVkZWQgdG8gZW5hYmxlIHF1ZXJ5aW5nLCB3cml0aW5nIHJlc3VsdHMsIGFuZCBkYXRhIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIEFtYXpvbkF0aGVuYUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXRoZW5hRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhY2Nlc3MgdG8gb3RoZXIgQVdTIHNlcnZpY2UgcmVzb3VyY2VzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIHJ1biBBbWF6b24gQXRoZW5hICovXG4gICAgcHVibGljIEFtYXpvbkF0aGVuYVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkF0aGVuYVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHBlcmZvcm0gYWxsIG9wZXJhdGlvbnMgQW1hem9uIEF1Z21lbnRlZCBBSSByZXNvdXJjZXMsIGluY2x1ZGluZyBGbG93RGVmaW5pdGlvbnMsIEh1bWFuVGFza1VpcyBhbmQgSHVtYW5Mb29wcy4gRG9lcyBub3QgYWxsb3cgYWNjZXNzIGZvciBjcmVhdGluZyBGbG93RGVmaW5pdGlvbnMgYWdhaW5zdCB0aGUgcHVibGljLWNyb3dkIFdvcmt0ZWFtLiAqL1xuICAgIHB1YmxpYyBBbWF6b25BdWdtZW50ZWRBSUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXVnbWVudGVkQUlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHBlcmZvcm0gYWxsIG9wZXJhdGlvbnMgb24gSHVtYW5Mb29wcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uQXVnbWVudGVkQUlIdW1hbkxvb3BGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkF1Z21lbnRlZEFJSHVtYW5Mb29wRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBwZXJmb3JtIGFsbCBvcGVyYXRpb25zIEFtYXpvbiBBdWdtZW50ZWQgQUkgcmVzb3VyY2VzLCBpbmNsdWRpbmcgRmxvd0RlZmluaXRpb25zLCBIdW1hblRhc2tVaXMgYW5kIEh1bWFuTG9vcHMuIEFsc28gcHJvdmlkZXMgYWNjZXNzIHRvIHRob3NlIG9wZXJhdGlvbnMgb2Ygc2VydmljZXMgdGhhdCBhcmUgaW50ZWdyYXRlZCB3aXRoIEFtYXpvbiBBdWdtZW50ZWQgQUkuICovXG4gICAgcHVibGljIEFtYXpvbkF1Z21lbnRlZEFJSW50ZWdyYXRlZEFQSUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25BdWdtZW50ZWRBSUludGVncmF0ZWRBUElBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjb25zb2xlIGZ1bGwgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEF1cm9yYSBEU1FMICovXG4gICAgcHVibGljIEFtYXpvbkF1cm9yYURTUUxDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25BdXJvcmFEU1FMQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBBdXJvcmEgRFNRTCAqL1xuICAgIHB1YmxpYyBBbWF6b25BdXJvcmFEU1FMRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25BdXJvcmFEU1FMRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQXVyb3JhIERTUUwgKi9cbiAgICBwdWJsaWMgQW1hem9uQXVyb3JhRFNRTFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkF1cm9yYURTUUxSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEJlZHJvY2sgTW9kZWwgaW5mZXJlbmNlIHBlcm1pc3Npb24gdG8gQmVkcm9jayBhZ2VudCBjb3JlIG1lbW9yeSAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrQWdlbnRDb3JlTWVtb3J5QmVkcm9ja01vZGVsSW5mZXJlbmNlRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrQWdlbnRDb3JlTWVtb3J5QmVkcm9ja01vZGVsSW5mZXJlbmNlRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBCZWRyb2NrIFdlYiBTZWFyY2gsIGluY2x1ZGluZyByZXRyaWV2YWwgb2YgY29udGVudCBmcm9tIGV4dGVybmFsIHdlYnNpdGVzIG91dHNpZGUgdGhlIEFXUyBuZXR3b3JrIGJvdW5kYXJ5LiAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrRXh0ZXJuYWxXZWJTZWFyY2hGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJlZHJvY2tFeHRlcm5hbFdlYlNlYXJjaEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBCZWRyb2NrIFdlYiBTZWFyY2gsIGluY2x1ZGluZyByZXRyaWV2YWwgb2YgY29udGVudCBmcm9tIGV4dGVybmFsIHdlYnNpdGVzIG91dHNpZGUgdGhlIEFXUyBuZXR3b3JrIGJvdW5kYXJ5LiAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrRXh0ZXJuYWxXZWJTZWFyY2hSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrRXh0ZXJuYWxXZWJTZWFyY2hSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBCZWRyb2NrIGFzIHdlbGwgYXMgbGltaXRlZCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyB0aGF0IGFyZSByZXF1aXJlZCBieSBpdCAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGxpbWl0ZWQgYWNjZXNzIHRvIEFtYXpvbiBCZWRyb2NrIGFzIHdlbGwgYXMgdG8gcmVsYXRlZCBzZXJ2aWNlcyB0aGF0IGFyZSByZXF1aXJlZCBieSBpdCAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrTGltaXRlZEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrTGltaXRlZEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBCZWRyb2NrIE1hbnRsZSBhcyB3ZWxsIGFzIGxpbWl0ZWQgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgdGhhdCBhcmUgcmVxdWlyZWQgYnkgaXQgKi9cbiAgICBwdWJsaWMgQW1hem9uQmVkcm9ja01hbnRsZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQmVkcm9ja01hbnRsZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIGFuZCBpbmZlcmVuY2UgY3JlYXRpb24gYWNjZXNzIHRvIEFtYXpvbiBCZWRyb2NrIE1hbnRsZSAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrTWFudGxlSW5mZXJlbmNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJlZHJvY2tNYW50bGVJbmZlcmVuY2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBCZWRyb2NrIE1hbnRsZSAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrTWFudGxlUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQmVkcm9ja01hbnRsZVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbGltaXRlZCBhY2Nlc3MgdG8gQW1hem9uIEJlZHJvY2sgTWFya2V0cGxhY2UgYXMgd2VsbCBhcyB0byByZWxhdGVkIHNlcnZpY2VzIHRoYXQgYXJlIHJlcXVpcmVkIGJ5IGl0ICovXG4gICAgcHVibGljIEFtYXpvbkJlZHJvY2tNYXJrZXRwbGFjZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrTWFya2V0cGxhY2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBCZWRyb2NrICovXG4gICAgcHVibGljIEFtYXpvbkJlZHJvY2tSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBEZWZpbmVzIHRoZSBtYXhpbXVtIHBlcm1pc3Npb25zIG9mIElBTSByb2xlcyB0aGF0IEFtYXpvbiBCZWRyb2NrIFN0dWRpbyBjcmVhdGVzIGZvciBvcGVyYXRpbmcgQW1hem9uIEJlZHJvY2sgU3R1ZGlvIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uQmVkcm9ja1N0dWRpb1Blcm1pc3Npb25zQm91bmRhcnkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQmVkcm9ja1N0dWRpb1Blcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQmVkcm9jayBXZWIgU2VhcmNoLiBEYXRhIHJlbWFpbnMgd2l0aGluIHRoZSBBV1MgbmV0d29yayBib3VuZGFyeS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQmVkcm9ja1dlYlNlYXJjaEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQmVkcm9ja1dlYlNlYXJjaEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBCZWRyb2NrIFdlYiBTZWFyY2guIERhdGEgcmVtYWlucyB3aXRoaW4gdGhlIEFXUyBuZXR3b3JrIGJvdW5kYXJ5LiAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrV2ViU2VhcmNoUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQmVkcm9ja1dlYlNlYXJjaFJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGZ1bGwgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEFtYXpvbiBCaW8gRGlzY292ZXJ5ICovXG4gICAgcHVibGljIEFtYXpvbkJpb0Rpc2NvdmVyeUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQmlvRGlzY292ZXJ5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFjdGlvbnMgd2l0aGluIHRoZSBBbWF6b24gQmlvIERpc2NvdmVyeSBhcHBsaWNhdGlvbnMgKi9cbiAgICBwdWJsaWMgQW1hem9uQmlvRGlzY292ZXJ5SW5BcHBGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJpb0Rpc2NvdmVyeUluQXBwRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBCcmFrZXQgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuIEFsc28gcHJvdmlkZXMgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgKGUuZy4sIFMzLCBsb2dzKS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQnJha2V0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CcmFrZXRGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIHJlc291cmNlcyBuZWNlc3NhcnkgZm9yIGV4ZWN1dGluZyBhbiBBbWF6b24gQnJha2V0IEpvYiBpbmNsdWRpbmcgUzMsIENsb3Vkd2F0Y2gsIElBTSBhbmQgQnJha2V0ICovXG4gICAgcHVibGljIEFtYXpvbkJyYWtldEpvYnNFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQnJha2V0Sm9ic0V4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gQnJha2V0IHRvIGNyZWF0ZSBhbmQgbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQW1hem9uQnJha2V0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQnJha2V0U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQ2hpbWUgQWRtaW4gQ29uc29sZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkNoaW1lRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DaGltZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBDaGltZSBBZG1pbiBDb25zb2xlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ2hpbWVSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DaGltZVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFtYXpvbiBDaGltZSBTREsgb3BlcmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBbWF6b25DaGltZVNESygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DaGltZVNESyk7XG4gICAgfVxuXG4gICAgLyoqIE1hbmFnZWQgUG9saWN5IEZvciBBbWF6b24gQ2hpbWUgU0RLIE1lZGlhUGlwZWxpbmVzIFNlcnZpY2UgTGlua2VkIFJvbGUgKi9cbiAgICBwdWJsaWMgQW1hem9uQ2hpbWVTREtNZWRpYVBpcGVsaW5lc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNoaW1lU0RLTWVkaWFQaXBlbGluZXNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gQ2hpbWUgU0RLIE1lc3NhZ2luZyB0byBhY2Nlc3MgQVdTIHJlc291cmNlcyBhbmQgZW5hYmxlIG1lc3NhZ2luZyBmdW5jdGlvbmFsaXR5ICovXG4gICAgcHVibGljIEFtYXpvbkNoaW1lU0RLTWVzc2FnaW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2hpbWVTREtNZXNzYWdpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFtYXpvbiBDaGltZSAqL1xuICAgIHB1YmxpYyBBbWF6b25DaGltZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNoaW1lU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIENoaW1lIHRvIGFjY2VzcyBBbWF6b24gVHJhbnNjcmliZSBhbmQgQW1hem9uIFRyYW5zY3JpYmUgTWVkaWNhbCBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBbWF6b25DaGltZVRyYW5zY3JpcHRpb25TZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DaGltZVRyYW5zY3JpcHRpb25TZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHVzZXIgbWFuYWdlbWVudCBhY2Nlc3MgdG8gQW1hem9uIENoaW1lIEFkbWluIENvbnNvbGUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25DaGltZVVzZXJNYW5hZ2VtZW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNoaW1lVXNlck1hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBNYW5hZ2VkIHBvbGljeSBmb3IgU2VydmljZSBMaW5rZWQgUm9sZSBmb3IgQW1hem9uIENoaW1lIFZvaWNlQ29ubmVjdG9yICovXG4gICAgcHVibGljIEFtYXpvbkNoaW1lVm9pY2VDb25uZWN0b3JTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DaGltZVZvaWNlQ29ubmVjdG9yU2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQ2xvdWQgRGlyZWN0b3J5IFNlcnZpY2UuICovXG4gICAgcHVibGljIEFtYXpvbkNsb3VkRGlyZWN0b3J5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DbG91ZERpcmVjdG9yeUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBDbG91ZCBEaXJlY3RvcnkgU2VydmljZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ2xvdWREaXJlY3RvcnlSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DbG91ZERpcmVjdG9yeVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQ2xvdWRXYXRjaCBFdmlkZW50bHkuIEFsc28gcHJvdmlkZXMgYWNjZXNzIHRvIHJlbGF0ZWQgQW1hem9uIFMzLCBBbWF6b24gU05TLCBBbWF6b24gQ2xvdWRXYXRjaCwgYW5kIG90aGVyIHJlbGF0ZWQgc2VydmljZXMuICovXG4gICAgcHVibGljIEFtYXpvbkNsb3VkV2F0Y2hFdmlkZW50bHlGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNsb3VkV2F0Y2hFdmlkZW50bHlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQ2xvdWRXYXRjaCBFdmlkZW50bHkgKi9cbiAgICBwdWJsaWMgQW1hem9uQ2xvdWRXYXRjaEV2aWRlbnRseVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNsb3VkV2F0Y2hFdmlkZW50bHlSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBDbG91ZFdhdGNoIEV2aWRlbnRseSBTZXJ2aWNlIHRvIG1hbmFnZSBhc3NvY2lhdGVkIEFXUyBSZXNvdXJjZXMgb24gYmVoYWxmIG9mIHRoZSBjdXN0b21lciAqL1xuICAgIHB1YmxpYyBBbWF6b25DbG91ZFdhdGNoRXZpZGVudGx5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2xvdWRXYXRjaEV2aWRlbnRseVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHBlcm1pc3Npb25zIGZvciB0aGUgQW1hem9uIENsb3VkV2F0Y2ggUlVNIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQW1hem9uQ2xvdWRXYXRjaFJVTUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2xvdWRXYXRjaFJVTUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcmVhZCBvbmx5IHBlcm1pc3Npb25zIGZvciB0aGUgQW1hem9uIENsb3VkV2F0Y2ggUlVNIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQW1hem9uQ2xvdWRXYXRjaFJVTVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNsb3VkV2F0Y2hSVU1SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9uIHRvIEFtYXpvbiBDbG91ZFdhdGNoIFJVTSBTZXJ2aWNlIHRvIHB1Ymxpc2ggbW9uaXRvcmluZyBkYXRhIHRvIG90aGVyIHJlbGV2YW50IEFXUyBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25DbG91ZFdhdGNoUlVNU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2xvdWRXYXRjaFJVTVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIENvZGVDYXRhbHlzdCAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2RlQ2F0YWx5c3RGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZGVDYXRhbHlzdEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBDb2RlQ2F0YWx5c3QgKi9cbiAgICBwdWJsaWMgQW1hem9uQ29kZUNhdGFseXN0UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29kZUNhdGFseXN0UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIENvZGVDYXRhbHlzdCB0byBjcmVhdGUsIHVwZGF0ZSwgYW5kIHJlc29sdmUgQVdTIFN1cHBvcnQgY2FzZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVDYXRhbHlzdFN1cHBvcnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29kZUNhdGFseXN0U3VwcG9ydEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyByZXF1aXJlZCBieSBBbWF6b24gQ29kZUd1cnUgUHJvZmlsZXIgYWdlbnQuICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVHdXJ1UHJvZmlsZXJBZ2VudEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2RlR3VydVByb2ZpbGVyQWdlbnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQ29kZUd1cnUgUHJvZmlsZXIuICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVHdXJ1UHJvZmlsZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZGVHdXJ1UHJvZmlsZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQ29kZUd1cnUgUHJvZmlsZXIuICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVHdXJ1UHJvZmlsZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2RlR3VydVByb2ZpbGVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIENvZGVHdXJ1IFJldmlld2VyIGFuZCBzY29wZWQgYWNjZXNzIHRvIHJlcXVpcmVkIGRlcGVuZGVuY2llcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29kZUd1cnVSZXZpZXdlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29kZUd1cnVSZXZpZXdlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBDb2RlR3VydSBSZXZpZXdlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29kZUd1cnVSZXZpZXdlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZGVHdXJ1UmV2aWV3ZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEEgc2VydmljZS1saW5rZWQgcm9sZSByZXF1aXJlZCBmb3IgQW1hem9uIENvZGVHdXJ1IFJldmlld2VyIHRvIGFjY2VzcyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVHdXJ1UmV2aWV3ZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2RlR3VydVJldmlld2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQ29kZUd1cnUgU2VjdXJpdHkuICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVHdXJ1U2VjdXJpdHlGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZGVHdXJ1U2VjdXJpdHlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHJlcXVpcmVkIGZvciB3b3JraW5nIHdpdGggQW1hem9uIENvZGVHdXJ1IFNlY3VyaXR5IHNjYW5zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2RlR3VydVNlY3VyaXR5U2NhbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2RlR3VydVNlY3VyaXR5U2NhbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gQ29nbml0byBBUElzIHRvIHN1cHBvcnQgZGV2ZWxvcGVyIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdGllcyBmcm9tIHlvdXIgYXV0aGVudGljYXRpb24gYmFja2VuZC4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29nbml0b0RldmVsb3BlckF1dGhlbnRpY2F0ZWRJZGVudGl0aWVzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZ25pdG9EZXZlbG9wZXJBdXRoZW50aWNhdGVkSWRlbnRpdGllcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gQ29nbml0byBVc2VyIFBvb2xzIHNlcnZpY2UgdG8gdXNlIHlvdXIgU0VTIGlkZW50aXRpZXMgZm9yIGVtYWlsIHNlbmRpbmcgKi9cbiAgICBwdWJsaWMgQW1hem9uQ29nbml0b0lkcEVtYWlsU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29nbml0b0lkcEVtYWlsU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIENvZ25pdG8gVXNlciBQb29scyAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2duaXRvSWRwU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29nbml0b0lkcFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIGV4aXN0aW5nIEFtYXpvbiBDb2duaXRvIHJlc291cmNlcy4gWW91IHdpbGwgbmVlZCBBV1MgYWNjb3VudCBhZG1pbiBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBuZXcgQ29nbml0byByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbkNvZ25pdG9Qb3dlclVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29nbml0b1Bvd2VyVXNlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIENvZ25pdG8gcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2duaXRvUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29nbml0b1JlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZGVmaW5lcyB0aGUgc2V0IG9mIHBlcm1pc3Npb25zIGFsbG93ZWQgZm9yIHVuYXV0aGVudGljYXRlZCBpZGVudGl0aWVzIGZvciBDb2duaXRvIElkZW50aXR5IFBvb2xzLiBUaGlzIHBvbGljeSBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBhIHN0YW5kIGFsb25lIHBlcm1pc3Npb24gcG9saWN5LiBJdCBpcyB1c2VkIGFzIGEgZ3VhcmRyYWlsIGFnYWluc3Qgb3Zlcmx5IHBlcm1pc3NpdmUgcG9saWNpZXMgYXR0YWNoZWQgZm9yIHJvbGVzIGluIGFuIGlkZW50aXR5IHBvb2wuIERvIG5vdCBhdHRhY2ggdGhpcyBwb2xpY3kgdG8gYW55IHJvbGVzLCBhcyBDb2duaXRvIElkZW50aXR5IFNlcnZpY2Ugd2lsbCBhdXRvbWF0aWNhbGx5IGluY2x1ZGUgaXQgYXMgYSBzY29wZWQgZG93biBwb2xpY3kgd2hlbiBjcmVhdGluZyBjcmVkZW50aWFscy4gVGhlIHByaXZpbGVnZXMgdG8gdGVtcG9yYXJpbHkgYWNjZXNzIG90aGVyIEFXUyByZXNvdXJjZXMgdGhyb3VnaCB0aGUgZW5oYW5jZWQgZmxvdyB3aWxsIG5vdyBiZSBkZWZpbmVkIGJ5IHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHJvbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpZGVudGl0eSBvZiB0aGUgdW5hdXRoZW50aWNhdGVkIHVzZXIgcHJvdmlkZWQgYnkgYSBzZXJ2aWNlLCBhbmQgdGhlIHByaXZpbGVnZXMgZ2l2ZW4gaW4gdGhpcyBtYW5hZ2VkIHBvbGljeSB0aGF0IGlzIG93bmVkIGJ5IENvZ25pdG8uICovXG4gICAgcHVibGljIEFtYXpvbkNvZ25pdG9VbkF1dGhlZElkZW50aXRpZXNTZXNzaW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZ25pdG9VbkF1dGhlZElkZW50aXRpZXNTZXNzaW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZGVmaW5lcyB0aGUgc2V0IG9mIHBlcm1pc3Npb25zIGFsbG93ZWQgZm9yIHVuYXV0aGVudGljYXRlZCBpZGVudGl0aWVzIGZvciBDb2duaXRvIElkZW50aXR5IFBvb2xzLiBUaGlzIGRvZXMgbm90IG5lZWQgdG8gYmUgYXR0YWNoZWQgdG8geW91ciB1bmF1dGggcm9sZSwgYXMgQ29nbml0byBJZGVudGl0eSBTZXJ2aWNlIHdpbGwgYXV0b21hdGljYWxseSBpbmNsdWRlIGl0IGFzIGEgc2NvcGVkIGRvd24gcG9saWN5IHdoZW4gY3JlYXRpbmcgY3JlZGVudGlhbHMuIFRoZSBwcml2aWxlZ2VzIHRvIHRlbXBvcmFyaWx5IGFjY2VzcyBvdGhlciBBV1MgcmVzb3VyY2VzIHRocm91Z2ggdGhlIGVuaGFuY2VkIGZsb3cgd2lsbCBub3cgYmUgZGVmaW5lZCBieSB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSByb2xlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaWRlbnRpdHkgb2YgdGhlIHVuYXV0aGVudGljYXRlZCB1c2VyIHByb3ZpZGVkIGJ5IGEgc2VydmljZSwgYW5kIHRoZSBwcml2aWxlZ2VzIGdpdmVuIGluIHRoaXMgbWFuYWdlZCBwb2xpY3kgdGhhdCBpcyBvd25lZCBieSBDb2duaXRvLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2duaXRvVW5hdXRoZW50aWNhdGVkSWRlbnRpdGllcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2duaXRvVW5hdXRoZW50aWNhdGVkSWRlbnRpdGllcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBwdXJwb3NlIG9mIHRoaXMgcG9saWN5IGlzIHRvIGdyYW50IHBlcm1pc3Npb25zIHRvIEFXUyBDb25uZWN0IHVzZXJzIHJlcXVpcmVkIHRvIHVzZSBDb25uZWN0IHJlc291cmNlcy4gVGhpcyBwb2xpY3kgcHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIENvbm5lY3QgcmVzb3VyY2VzIHZpYSB0aGUgQ29ubmVjdCBDb25zb2xlIGFuZCBwdWJsaWMgQVBJcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Db25uZWN0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db25uZWN0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQW1hem9uIENvbm5lY3QgQ2FtcGFpZ25zIHNlcnZpY2UgbGlua2VkIHJvbGUgKi9cbiAgICBwdWJsaWMgQW1hem9uQ29ubmVjdENhbXBhaWduc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvbm5lY3RDYW1wYWlnbnNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHZpZXcgdGhlIEFtYXpvbiBDb25uZWN0IGluc3RhbmNlcyBpbiB5b3VyIEFXUyBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db25uZWN0UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29ubmVjdFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBDb25uZWN0IHRvIGNyZWF0ZSBhbmQgbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkNvbm5lY3RTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db25uZWN0U2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIENvbm5lY3QgdG8gc3luY2hyb25pemUgQVdTIHJlc291cmNlcyBhY3Jvc3MgcmVnaW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29ubmVjdFN5bmNocm9uaXphdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvbm5lY3RTeW5jaHJvbml6YXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBDb25uZWN0IFZvaWNlIElEICovXG4gICAgcHVibGljIEFtYXpvbkNvbm5lY3RWb2ljZUlERnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db25uZWN0Vm9pY2VJREZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBjb25zdW1lIEFtYXpvbiBCZWRyb2NrIG1vZGVscywgaW5jbHVkaW5nIGludm9raW5nIEFtYXpvbiBCZWRyb2NrIGFwcGxpY2F0aW9uIGluZmVyZW5jZSBwcm9maWxlIGNyZWF0ZWQgZm9yIHBhcnRpY3VsYXIgQW1hem9uIERhdGFab25lIGRvbWFpbi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVCZWRyb2NrTW9kZWxDb25zdW1wdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EYXRhWm9uZUJlZHJvY2tNb2RlbENvbnN1bXB0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gbWFuYWdlIEFtYXpvbiBCZWRyb2NrIG1vZGVsIGFjY2VzcywgaW5jbHVkaW5nIGNyZWF0aW5nLCB0YWdnaW5nIGFuZCBkZWxldGluZyBhcHBsaWNhdGlvbiBpbmZlcmVuY2UgcHJvZmlsZXMuICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lQmVkcm9ja01vZGVsTWFuYWdlbWVudFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EYXRhWm9uZUJlZHJvY2tNb2RlbE1hbmFnZW1lbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEFtYXpvbiBEYXRhWm9uZSdzIERvbWFpbkV4ZWN1dGlvblJvbGUgc2VydmljZSByb2xlLiBUaGlzIHJvbGUgaXMgdXNlZCBieSBBbWF6b24gRGF0YVpvbmUgdG8gY2F0YWxvZywgZGlzY292ZXIsIGdvdmVybiwgc2hhcmUsIGFuZCBhbmFseXplIGRhdGEgaW4gdGhlIEFtYXpvbiBEYXRhWm9uZSBkb21haW4uICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lRG9tYWluRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EYXRhWm9uZURvbWFpbkV4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gRGF0YVpvbmUgY3JlYXRlcyBJQU0gcm9sZXMgZm9yIEVudmlyb25tZW50cyB0byBwZXJmb3JtIGRhdGEgYW5hbHl0aWNzIGFjdGlvbnMsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgdGhlc2Ugcm9sZXMgdG8gZGVmaW5lIHRoZSBib3VuZGFyeSBvZiB0aGVpciBwZXJtaXNzaW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVFbnZpcm9ubWVudFJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRhdGFab25lRW52aXJvbm1lbnRSb2xlUGVybWlzc2lvbnNCb3VuZGFyeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBEYXRhWm9uZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYXMgd2VsbCBhcyBsaW1pdGVkIGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIHRoYXQgYXJlIHJlcXVpcmVkIGJ5IGl0LiAqL1xuICAgIHB1YmxpYyBBbWF6b25EYXRhWm9uZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGF0YVpvbmVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIERhdGFab25lLCBidXQgZG9lcyBub3QgYWxsb3cgdGhlIG1hbmFnZW1lbnQgb2YgZG9tYWlucywgdXNlcnMsIG9yIGFzc29jaWF0ZWQgYWNjb3VudHMuICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lRnVsbFVzZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGF0YVpvbmVGdWxsVXNlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIGFsbG93IEFtYXpvbiBEYXRhWm9uZSB0byBlbmFibGUgcHVibGlzaGluZyBhbmQgYWNjZXNzIGdyYW50cyB0byBkYXRhLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EYXRhWm9uZUdsdWVNYW5hZ2VBY2Nlc3NSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRhdGFab25lR2x1ZU1hbmFnZUFjY2Vzc1JvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gRGF0YVpvbmUgaXMgYSBkYXRhIG1hbmFnZW1lbnQgc2VydmljZSB0aGF0IGVuYWJsZXMgeW91IHRvIGNhdGFsb2csIGRpc2NvdmVyLCBnb3Zlcm4sIHNoYXJlLCBhbmQgYW5hbHl6ZSB5b3VyIGRhdGEuIFdpdGggQW1hem9uIERhdGFab25lLCB5b3UgY2FuIHNoYXJlIGFuZCBhY2Nlc3MgeW91ciBkYXRhIGFjcm9zcyBhY2NvdW50cyBhbmQgc3VwcG9ydGVkIHJlZ2lvbnMuIEFtYXpvbiBEYXRhWm9uZSBzaW1wbGlmaWVzIHlvdXIgZXhwZXJpZW5jZSBhY3Jvc3MgQVdTIHNlcnZpY2VzLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgQW1hem9uIFJlZHNoaWZ0LCBBbWF6b24gQXRoZW5hLCBBV1MgR2x1ZSwgYW5kIEFXUyBMYWtlIEZvcm1hdGlvbi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVSZWRzaGlmdEdsdWVQcm92aXNpb25pbmdQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGF0YVpvbmVSZWRzaGlmdEdsdWVQcm92aXNpb25pbmdQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBnaXZlcyBBbWF6b24gRGF0YVpvbmUgcGVybWlzc2lvbnMgdG8gcHVibGlzaCBBbWF6b24gUmVkc2hpZnQgZGF0YSB0byB0aGUgY2F0YWxvZy4gSXQgYWxzbyBnaXZlcyBBbWF6b24gRGF0YVpvbmUgcGVybWlzc2lvbnMgdG8gZ3JhbnQgYWNjZXNzIG9yIHJldm9rZSBhY2Nlc3MgdG8gQW1hem9uIFJlZHNoaWZ0IG9yIEFtYXpvbiBSZWRzaGlmdCBTZXJ2ZXJsZXNzIHB1Ymxpc2hlZCBhc3NldHMgaW4gdGhlIGNhdGFsb2cuICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lUmVkc2hpZnRNYW5hZ2VBY2Nlc3NSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRhdGFab25lUmVkc2hpZnRNYW5hZ2VBY2Nlc3NSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIEFtYXpvbkRhdGFab25lU2FnZU1ha2VyRW52aXJvbm1lbnRSb2xlUGVybWlzc2lvbnNCb3VuZGFyeSBwb2xpY3kgaXMgdGhlIGxpc3Qgb2YgcGVybWlzc2lvbnMgdGhhdCBhcmUgcGVybWl0dGVkIG9uIGFuIGV4ZWN1dGlvbiByb2xlIGNyZWF0ZWQgaW4gYSBTYWdlTWFrZXIgZW52aXJvbm1lbnQgcHJvdmlzaW9uZWQgYnkgQW1hem9uIERhdGFab25lLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EYXRhWm9uZVNhZ2VNYWtlckVudmlyb25tZW50Um9sZVBlcm1pc3Npb25zQm91bmRhcnkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGF0YVpvbmVTYWdlTWFrZXJFbnZpcm9ubWVudFJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIEFtYXpvbkRhdGFab25lU2FnZU1ha2VyTWFuYWdlQWNjZXNzUm9sZVBvbGljeSBwb2xpY3kgZ3JhbnRzIEFtYXpvbiBEYXRhWm9uZSB0aGUgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gZ3JhbnQgdXNlciBhY2Nlc3MgdG8gdmFyaW91cyByZXNvdXJjZXMgaW4gdGhlIFNhZ2VNYWtlciBlbnZpcm9ubWVudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVTYWdlTWFrZXJNYW5hZ2VBY2Nlc3NSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRhdGFab25lU2FnZU1ha2VyTWFuYWdlQWNjZXNzUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBBbWF6b25EYXRhWm9uZVNhZ2VNYWtlclByb3Zpc2lvbmluZ1JvbGVQb2xpY3kgcG9saWN5IGdyYW50cyBBbWF6b24gRGF0YVpvbmUgdGhlIHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIGludGVyb3BlcmF0ZSB3aXRoIEFtYXpvbiBTYWdlTWFrZXIuICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lU2FnZU1ha2VyUHJvdmlzaW9uaW5nUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EYXRhWm9uZVNhZ2VNYWtlclByb3Zpc2lvbmluZ1JvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiAgUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIERldGVjdGl2ZSBzZXJ2aWNlIGFuZCBzY29wZWQgYWNjZXNzIHRvIHRoZSBjb25zb2xlIFVJIGRlcGVuZGVuY2llcyAqL1xuICAgIHB1YmxpYyBBbWF6b25EZXRlY3RpdmVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRldGVjdGl2ZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBpbnZlc3RpZ2F0b3IgYWNjZXNzIHRvIEFtYXpvbiBEZXRlY3RpdmUgc2VydmljZSBhbmQgc2NvcGVkIGFjY2VzcyB0byB0aGUgY29uc29sZSBVSSBkZXBlbmRlbmNpZXMuIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9uIHRvIGRpdmUgaW50byBEZXRlY3RpdmUgZm9yIGludmVzdGlnYXRpb24gcHVycG9zZXMgYW5kIGxpbWl0ZWQgd3JpdGUgYWNjZXNzIHRvIEd1YXJkZHV0eS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGV0ZWN0aXZlSW52ZXN0aWdhdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRldGVjdGl2ZUludmVzdGlnYXRvckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG1lbWJlciBhY2Nlc3MgdG8gQW1hem9uIERldGVjdGl2ZSBzZXJ2aWNlIGFuZCBzY29wZWQgYWNjZXNzIHRvIHRoZSBjb25zb2xlIFVJIGRlcGVuZGVuY2llcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGV0ZWN0aXZlTWVtYmVyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRldGVjdGl2ZU1lbWJlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIE9yZ2FuaXphdGlvbnMgYWNjZXNzIHRvIG1hbmFnZSBEZWxlZ2F0ZWQgYWRtaW5pc3RyYXRvciBmb3IgQW1hem9uIERldGVjdGl2ZSBhbmQgc2NvcGVkIGFjY2VzcyB0byB0aGUgY29uc29sZSBVSSBkZXBlbmRlbmNpZXMuIFRoaXMgYWxzbyBncmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBzZXJ2aWNlLWxpbmtlZCByb2xlIGZvciBEZXRlY3RpdmUuICovXG4gICAgcHVibGljIEFtYXpvbkRldGVjdGl2ZU9yZ2FuaXphdGlvbnNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGV0ZWN0aXZlT3JnYW5pemF0aW9uc0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gRGV0ZWN0aXZlIHRvIG1ha2Ugc2VydmljZSBjYWxscyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBbWF6b25EZXRlY3RpdmVTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EZXRlY3RpdmVTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBwb2xpY3kgZ3JhbnRzIGZ1bGwtYWNjZXNzIHRvIHRoZSBEZXZPcHMgR3VydSBjb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EZXZPcHNHdXJ1Q29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGV2T3BzR3VydUNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIERldk9wcyBHdXJ1LiAqL1xuICAgIHB1YmxpYyBBbWF6b25EZXZPcHNHdXJ1RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EZXZPcHNHdXJ1RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgYWNjZXNzIHRvIGVuYWJsZSBhbmQgbWFuYWdlIEFtYXpvbiBEZXZPcHMgR3VydSB3aXRoaW4gYW4gb3JnYW5pemF0aW9uLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EZXZPcHNHdXJ1T3JnYW5pemF0aW9uc0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EZXZPcHNHdXJ1T3JnYW5pemF0aW9uc0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIERldk9wcyBHdXJ1IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkRldk9wc0d1cnVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EZXZPcHNHdXJ1UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBIHNlcnZpY2UtbGlua2VkIHJvbGUgcmVxdWlyZWQgZm9yIEFtYXpvbiBEZXZPcHNHdXJ1IHRvIGFjY2VzcyB5b3VyIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGV2T3BzR3VydVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRldk9wc0d1cnVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB1cGxvYWQgRE1TIHJlcGxpY2F0aW9uIGxvZ3MgdG8gY2xvdWR3YXRjaCBsb2dzIGluIGN1c3RvbWVyIGFjY291bnQuICovXG4gICAgcHVibGljIEFtYXpvbkRNU0Nsb3VkV2F0Y2hMb2dzUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25ETVNDbG91ZFdhdGNoTG9nc1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gbWFuYWdlIFMzIHNldHRpbmdzIGZvciBSZWRzaGlmdCBlbmRwb2ludHMgZm9yIERNUy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRE1TUmVkc2hpZnRTM1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRE1TUmVkc2hpZnRTM1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gbWFuYWdlIFZQQyBzZXR0aW5ncyBmb3IgQVdTIG1hbmFnZWQgY3VzdG9tZXIgY29uZmlndXJhdGlvbnMgKi9cbiAgICBwdWJsaWMgQW1hem9uRE1TVlBDTWFuYWdlbWVudFJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRE1TVlBDTWFuYWdlbWVudFJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIERvY3VtZW50REItRWxhc3RpYyB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRG9jREJFbGFzdGljU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRG9jREJFbGFzdGljU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBtYW5hZ2UgQW1hem9uIERvY3VtZW50REIgd2l0aCBNb25nb0RCIGNvbXBhdGliaWxpdHkgdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuIE5vdGUgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgZnVsbCBhY2Nlc3MgdG8gcHVibGlzaCBvbiBhbGwgU05TIHRvcGljcyB3aXRoaW4gdGhlIGFjY291bnQsIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBhbmQgZWRpdCBBbWF6b24gRUMyIGluc3RhbmNlcyBhbmQgVlBDIGNvbmZpZ3VyYXRpb25zLCBwZXJtaXNzaW9ucyB0byB2aWV3IGFuZCBsaXN0IGtleXMgb24gQW1hem9uIEtNUywgYW5kIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBSRFMgYW5kIEFtYXpvbiBOZXB0dW5lLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Eb2NEQkNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRvY0RCQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRG9jdW1lbnREQiBFbGFzdGljIENsdXN0ZXJzIGFuZCBvdGhlciByZXF1aXJlZCBwZXJtaXNzaW9ucyBmb3IgaXRzIGRlcGVuZGVuY2llcyBpbmNsdWRpbmcgRUMyLCBLTVMsIFNlY3JldHNNYW5hZ2VyLCBDbG91ZFdhdGNoIGFuZCBJQU0uICovXG4gICAgcHVibGljIEFtYXpvbkRvY0RCRWxhc3RpY0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRG9jREJFbGFzdGljRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIERvY0RCLUVsYXN0aWMgYW5kIENsb3VkV2F0Y2ggbWV0cmljcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRG9jREJFbGFzdGljUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRG9jREJFbGFzdGljUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRG9jdW1lbnREQiB3aXRoIE1vbmdvREIgY29tcGF0aWJpbGl0eS4gTm90ZSB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBmdWxsIGFjY2VzcyB0byBwdWJsaXNoIG9uIGFsbCBTTlMgdG9waWNzIHdpdGhpbiB0aGUgYWNjb3VudCBhbmQgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJEUyBhbmQgQW1hem9uIE5lcHR1bmUuICovXG4gICAgcHVibGljIEFtYXpvbkRvY0RCRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Eb2NEQkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBEb2N1bWVudERCIHdpdGggTW9uZ29EQiBjb21wYXRpYmlsaXR5LiBOb3RlIHRoYXQgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgYWNjZXNzIHRvIEFtYXpvbiBSRFMgYW5kIEFtYXpvbiBOZXB0dW5lIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRG9jREJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Eb2NEQlJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG1hbmFnZSBWUEMgc2V0dGluZ3MgZm9yIEFtYXpvbiBtYW5hZ2VkIGN1c3RvbWVyIGNvbmZpZ3VyYXRpb25zICovXG4gICAgcHVibGljIEFtYXpvbkRSU1ZQQ01hbmFnZW1lbnQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRFJTVlBDTWFuYWdlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBEeW5hbW9EQiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkR5bmFtb0RCRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EeW5hbW9EQkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRHluYW1vREIgKi9cbiAgICBwdWJsaWMgQW1hem9uRHluYW1vREJGdWxsQWNjZXNzVjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRHluYW1vREJGdWxsQWNjZXNzVjIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBvbiBhIGRlcHJlY2F0aW9uIHBhdGguIFNlZSBkb2N1bWVudGF0aW9uIGZvciBndWlkYW5jZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9EeW5hbW9EQlBpcGVsaW5lLmh0bWwuIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBEeW5hbW9EQiBpbmNsdWRpbmcgRXhwb3J0L0ltcG9ydCB1c2luZyBBV1MgRGF0YSBQaXBlbGluZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkR5bmFtb0RCRnVsbEFjY2Vzc3dpdGhEYXRhUGlwZWxpbmUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRHluYW1vREJGdWxsQWNjZXNzd2l0aERhdGFQaXBlbGluZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIER5bmFtb0RCIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRHluYW1vREJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EeW5hbW9EQlJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogSUFNIFBvbGljeSB0aGF0IGFsbG93cyB0aGUgQ1NJIGRyaXZlciBzZXJ2aWNlIGFjY291bnQgdG8gbWFrZSBjYWxscyB0byByZWxhdGVkIHNlcnZpY2VzIHN1Y2ggYXMgRUMyIG9uIHlvdXIgYmVoYWxmLiBUaGlzIHBvbGljeSByZXN0cmljdHMgdGhlIEFtYXpvbiBFQlMgQ1NJIGRyaXZlciB0byBvbmx5IG1hbmFnaW5nIEVCUyB2b2x1bWVzIGFuZCBzbmFwc2hvdHMgdGhhdCBiZWxvbmcgdG8gYSBzcGVjaWZpYyBFS1MgY2x1c3Rlci4gSXQgcmVxdWlyZXMgdGhlIHJlc291cmNlIHRhZyBlYnMuY3NpLmF3cy5jb20vY2x1c3Rlci1uYW1lIHRvIG1hdGNoIHRoZSBla3MtY2x1c3Rlci1uYW1lIHRhZyBvbiB0aGUgSUFNIHByaW5jaXBhbCwgcHJldmVudGluZyBjcm9zcy1jbHVzdGVyIGFjY2VzcyB3aGVuIG11bHRpcGxlIGNsdXN0ZXJzIHNoYXJlIHRoZSBzYW1lIEFXUyBhY2NvdW50LiBBdHRhY2ggYW5kIGRldGFjaCBvcGVyYXRpb25zIG9uIGluc3RhbmNlcyBhcmUgcmVzdHJpY3RlZCB0byBpbnN0YW5jZXMgdGFnZ2VkIHdpdGggZWl0aGVyIHRoZSBla3M6Y2x1c3Rlci1uYW1lIHRhZyAoc2V0IGF1dG9tYXRpY2FsbHkgYnkgRUtTIG9uIG1hbmFnZWQgbm9kZSBncm91cHMpIG9yIHRoZSBlYnMuY3NpLmF3cy5jb20vY2x1c3Rlci1uYW1lIHRhZyAoZm9yIG1hbnVhbGx5IHRhZ2dlZCBpbnN0YW5jZXMpLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQlNDU0lEcml2ZXJFS1NDbHVzdGVyU2NvcGVkUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVCU0NTSURyaXZlckVLU0NsdXN0ZXJTY29wZWRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBJQU0gUG9saWN5IHRoYXQgYWxsb3dzIHRoZSBDU0kgZHJpdmVyIHNlcnZpY2UgYWNjb3VudCB0byBtYWtlIGNhbGxzIHRvIHJlbGF0ZWQgc2VydmljZXMgc3VjaCBhcyBFQzIgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkVCU0NTSURyaXZlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQlNDU0lEcml2ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBJQU0gUG9saWN5IHRoYXQgYWxsb3dzIHRoZSBFQlMgQ1NJIGRyaXZlciBzZXJ2aWNlIGFjY291bnQgdG8gbWFrZSBjYWxscyB0byByZWxhdGVkIHNlcnZpY2VzIHN1Y2ggYXMgRUMyIG9uIHlvdXIgYmVoYWxmLiBJdCBsaW1pdHMgdGhlIEFtYXpvbiBFQlMgQ1NJIGRyaXZlciB0byBvbmx5IG1hbmFnaW5nIEVCUyB2b2x1bWVzIGFuZCBzbmFwc2hvdHMgdGhhdCBhcmUgdGFnZ2VkIHdpdGggdGhlIGtleSBlYnMuY3NpLmF3cy5jb20vY2x1c3RlciBzZXQgdG8gdHJ1ZS4gVm9sdW1lcyBwcm92aXNpb25lZCBieSB0aGUgaW4tdHJlZSBLdWJlcm5ldGVzIHZvbHVtZSBwbHVnaW4gKENTSS1taWdyYXRlZCB2b2x1bWVzKSBhcmUgYWxzbyBzdXBwb3J0ZWQgdGhyb3VnaCB0aGUga3ViZXJuZXRlcy5pby9jcmVhdGVkLWZvci9wdmMvbmFtZSByZXNvdXJjZSB0YWcuICovXG4gICAgcHVibGljIEFtYXpvbkVCU0NTSURyaXZlclBvbGljeVYyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVCU0NTSURyaXZlclBvbGljeVYyKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEFtYXpvbiBFQ1IgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFtYXpvbkVDMkNvbnRhaW5lclJlZ2lzdHJ5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJDb250YWluZXJSZWdpc3RyeUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRUMyIENvbnRhaW5lciBSZWdpc3RyeSByZXBvc2l0b3JpZXMsIGJ1dCBkb2VzIG5vdCBhbGxvdyByZXBvc2l0b3J5IGRlbGV0aW9uIG9yIHBvbGljeSBjaGFuZ2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJDb250YWluZXJSZWdpc3RyeVBvd2VyVXNlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJDb250YWluZXJSZWdpc3RyeVBvd2VyVXNlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBwdWxsIGltYWdlcyBmcm9tIEFtYXpvbiBFQzIgQ29udGFpbmVyIFJlZ2lzdHJ5IHJlcG9zaXRvcmllcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyQ29udGFpbmVyUmVnaXN0cnlQdWxsT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJDb250YWluZXJSZWdpc3RyeVB1bGxPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gRUMyIENvbnRhaW5lciBSZWdpc3RyeSByZXBvc2l0b3JpZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVDMkNvbnRhaW5lclJlZ2lzdHJ5UmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyQ29udGFpbmVyUmVnaXN0cnlSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqICAgUG9saWN5IHRvIGVuYWJsZSBUYXNrIEF1dG9zY2FsaW5nIGZvciBBbWF6b24gRUMyIENvbnRhaW5lciBTZXJ2aWNlICovXG4gICAgcHVibGljIEFtYXpvbkVDMkNvbnRhaW5lclNlcnZpY2VBdXRvc2NhbGVSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMkNvbnRhaW5lclNlcnZpY2VBdXRvc2NhbGVSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBDbG91ZFdhdGNoIEV2ZW50cyBmb3IgRUMyIENvbnRhaW5lciBTZXJ2aWNlICovXG4gICAgcHVibGljIEFtYXpvbkVDMkNvbnRhaW5lclNlcnZpY2VFdmVudHNSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMkNvbnRhaW5lclNlcnZpY2VFdmVudHNSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBBbWF6b24gRUMyIFJvbGUgZm9yIEFtYXpvbiBFQzIgQ29udGFpbmVyIFNlcnZpY2UuICovXG4gICAgcHVibGljIEFtYXpvbkVDMkNvbnRhaW5lclNlcnZpY2Vmb3JFQzJSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMkNvbnRhaW5lclNlcnZpY2Vmb3JFQzJSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIEFtYXpvbiBFQ1Mgc2VydmljZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJDb250YWluZXJTZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJDb250YWluZXJTZXJ2aWNlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBFQzIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHNjYW4gYWxsIHN1cHBvcnRlZCByZXNvdXJjZSB0eXBlcyBmb3IgcmVsZXZhbnQgZGF0YSB3aGVuIHVzaW5nIERlc2NyaWJlSW1hZ2VSZWZlcmVuY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJJbWFnZVJlZmVyZW5jZXNBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMySW1hZ2VSZWZlcmVuY2VzQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRUMyIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBFQzIgYWNjZXNzIHRvIFMzIGJ1Y2tldCB0byBkb3dubG9hZCByZXZpc2lvbi4gVGhpcyByb2xlIGlzIG5lZWRlZCBieSB0aGUgQ29kZURlcGxveSBhZ2VudCBvbiBFQzIgaW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJSb2xlZm9yQVdTQ29kZURlcGxveSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJSb2xlZm9yQVdTQ29kZURlcGxveSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEVDMiBsaW1pdGVkIGFjY2VzcyB0byBTMyBidWNrZXQgdG8gZG93bmxvYWQgcmV2aXNpb24uIFRoaXMgcm9sZSBpcyBuZWVkZWQgYnkgdGhlIENvZGVEZXBsb3kgYWdlbnQgb24gRUMyIGluc3RhbmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyUm9sZWZvckFXU0NvZGVEZXBsb3lMaW1pdGVkKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMlJvbGVmb3JBV1NDb2RlRGVwbG95TGltaXRlZCk7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgcG9saWN5IGZvciB0aGUgQW1hem9uIEVDMiBSb2xlIGZvciBEYXRhIFBpcGVsaW5lIHNlcnZpY2Ugcm9sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyUm9sZWZvckRhdGFQaXBlbGluZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyUm9sZWZvckRhdGFQaXBlbGluZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSB3aWxsIHNvb24gYmUgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBBbWF6b25TU01NYW5hZ2VkSW5zdGFuY2VDb3JlIHBvbGljeSB0byBlbmFibGUgQVdTIFN5c3RlbXMgTWFuYWdlciBzZXJ2aWNlIGNvcmUgZnVuY3Rpb25hbGl0eSBvbiBFQzIgaW5zdGFuY2VzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N5c3RlbXMtbWFuYWdlci9sYXRlc3QvdXNlcmd1aWRlL3NldHVwLWluc3RhbmNlLXByb2ZpbGUuaHRtbCAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJSb2xlZm9yU1NNKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMlJvbGVmb3JTU00pO1xuICAgIH1cblxuICAgIC8qKiBNYW5hZ2VkIHBvbGljeSBmb3IgdGhlIEFtYXpvbiBMYXVuY2hXaXphcmQgc2VydmljZSByb2xlIGZvciBFQzIgKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyUm9sZVBvbGljeUZvckxhdW5jaFdpemFyZCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJSb2xlUG9saWN5Rm9yTGF1bmNoV2l6YXJkKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBBdXRvc2NhbGluZyBmb3IgQW1hem9uIEVDMiBTcG90IEZsZWV0ICovXG4gICAgcHVibGljIEFtYXpvbkVDMlNwb3RGbGVldEF1dG9zY2FsZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyU3BvdEZsZWV0QXV0b3NjYWxlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBFQzIgU3BvdCBGbGVldCB0byByZXF1ZXN0LCB0ZXJtaW5hdGUgYW5kIHRhZyBTcG90IEluc3RhbmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyU3BvdEZsZWV0VGFnZ2luZ1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyU3BvdEZsZWV0VGFnZ2luZ1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgdG8gQW1hem9uIEVDUyByZXNvdXJjZXMgYW5kIGVuYWJsZXMgRUNTIGZlYXR1cmVzIHRocm91Z2ggYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlIHJlc291cmNlcywgaW5jbHVkaW5nIFZQQ3MsIEF1dG8gU2NhbGluZyBncm91cHMsIGFuZCBDbG91ZEZvcm1hdGlvbiBzdGFja3MuICovXG4gICAgcHVibGljIEFtYXpvbkVDU0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUNTRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQW1hem9uIEVDUyBDb21wdXRlIHRvIG1hbmFnZSB5b3VyIEVDMiBpbnN0YW5jZXMgYW5kIHJlbGF0ZWQgcmVzb3VyY2VzIGFzIHBhcnQgb2YgRUNTIG1hbmFnZWQgaW5zdGFuY2VzICovXG4gICAgcHVibGljIEFtYXpvbkVDU0NvbXB1dGVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NDb21wdXRlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGVzZSBwZXJtaXNzaW9ucyBlbmFibGUgQW1hem9uIEVDUyB0byBhdXRvbWF0aWNhbGx5IHByb3Zpc2lvbiBhbmQgbWFuYWdlIHRoZSBpbmZyYXN0cnVjdHVyZSBjb21wb25lbnRzIHJlcXVpcmVkIGZvciBFeHByZXNzIEdhdGV3YXkgU2VydmljZXMsIGluY2x1ZGluZyBsb2FkIGJhbGFuY2luZywgc2VjdXJpdHkgZ3JvdXBzLCBTU0wgY2VydGlmaWNhdGVzLCBhbmQgYXV0byBzY2FsaW5nIGNvbmZpZ3VyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVmb3JFeHByZXNzR2F0ZXdheVNlcnZpY2VzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZWZvckV4cHJlc3NHYXRld2F5U2VydmljZXMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gb3RoZXIgQVdTIHNlcnZpY2UgcmVzb3VyY2VzIHJlcXVpcmVkIHRvIG1hbmFnZSBsb2FkIGJhbGFuY2VycyBhc3NvY2lhdGVkIHdpdGggRUNTIHdvcmtsb2FkcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlUG9saWN5Rm9yTG9hZEJhbGFuY2VycygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JMb2FkQmFsYW5jZXJzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgRUNTIGFjY2VzcyB0byBjcmVhdGUgYW5kIG1hbmFnZSBFQzIgbWFuYWdlZCByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlUG9saWN5Rm9yTWFuYWdlZEluc3RhbmNlcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JNYW5hZ2VkSW5zdGFuY2VzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5LCBBV1MgU2VjcmV0cyBNYW5hZ2VyIGFuZCBvdGhlciBBV1MgU2VydmljZXMgcmVxdWlyZWQgdG8gbWFuYWdlIEVDUyBTZXJ2aWNlIENvbm5lY3QgVExTIGZlYXR1cmVzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JTZXJ2aWNlQ29ubmVjdFRyYW5zcG9ydExheWVyU2VjdXJpdHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlUG9saWN5Rm9yU2VydmljZUNvbm5lY3RUcmFuc3BvcnRMYXllclNlY3VyaXR5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlIHJlc291cmNlcyByZXF1aXJlZCB0byBtYW5hZ2Ugdm9sdW1lcyBhc3NvY2lhdGVkIHdpdGggRUNTIHdvcmtsb2FkcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlUG9saWN5Rm9yVm9sdW1lcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JWb2x1bWVzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlIHJlc291cmNlcyByZXF1aXJlZCB0byBtYW5hZ2UgVlBDIExhdHRpY2UgZmVhdHVyZSBpbiBFQ1Mgd29ya2xvYWRzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JWcGNMYXR0aWNlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZVBvbGljeUZvclZwY0xhdHRpY2UpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEFtYXpvbiBFQ1MgSW5zdGFuY2UgUm9sZSBmb3IgQW1hem9uIEVDUyBNYW5hZ2VkIEluc3RhbmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUNTSW5zdGFuY2VSb2xlUG9saWN5Rm9yTWFuYWdlZEluc3RhbmNlcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NJbnN0YW5jZVJvbGVQb2xpY3lGb3JNYW5hZ2VkSW5zdGFuY2VzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBBbWF6b24gRUNTIHRvIG1hbmFnZSB5b3VyIGNsdXN0ZXIuICovXG4gICAgcHVibGljIEFtYXpvbkVDU1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDU1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlIHJlc291cmNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBydW4gQW1hem9uIEVDUyB0YXNrcyAqL1xuICAgIHB1YmxpYyBBbWF6b25FQ1NUYXNrRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NUYXNrRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG1hbmFnZW1lbnQgYWNjZXNzIHRvIEVGUyByZXNvdXJjZXMgYW5kIHJlYWQgYWNjZXNzIHRvIEVDMiAqL1xuICAgIHB1YmxpYyBBbWF6b25FRlNDU0lEcml2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUZTQ1NJRHJpdmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgdGhlIEFtYXpvbiBWUEMgQ05JIFBsdWdpbiAoYW1hem9uLXZwYy1jbmktazhzKSB0aGUgcGVybWlzc2lvbnMgaXQgcmVxdWlyZXMgdG8gbW9kaWZ5IHRoZSBJUCBhZGRyZXNzIGNvbmZpZ3VyYXRpb24gb24geW91ciBFS1Mgd29ya2VyIG5vZGVzLiBUaGlzIHBlcm1pc3Npb24gc2V0IGFsbG93cyB0aGUgQ05JIHRvIGxpc3QsIGRlc2NyaWJlLCBhbmQgbW9kaWZ5IEVsYXN0aWMgTmV0d29yayBJbnRlcmZhY2VzIG9uIHlvdXIgYmVoYWxmLiBNb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBV1MgVlBDIENOSSBQbHVnaW4gaXMgYXZhaWxhYmxlIGhlcmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYW1hem9uLXZwYy1jbmktazhzICovXG4gICAgcHVibGljIEFtYXpvbkVLU0NOSVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NDTklQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgYXR0YWNoZWQgdG8gdGhlIEVLUyBDbHVzdGVyIFJvbGUgdGhhdCBncmFudHMgcGVybWlzc2lvbnMgdG8gbWFuYWdlIHRoZSBjbHVzdGVyJ3MgYmxvY2sgc3RvcmFnZSByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU0Jsb2NrU3RvcmFnZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NCbG9ja1N0b3JhZ2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgYXR0YWNoZWQgdG8gdGhlIEVLUyBDbHVzdGVyIFJvbGUgdGhhdCBncmFudHMgcGVybWlzc2lvbnMgdG8gbWFuYWdlIHRoZSBjbHVzdGVyJ3MgYmxvY2sgc3RvcmFnZSByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU0Jsb2NrU3RvcmFnZVBvbGljeVYyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0Jsb2NrU3RvcmFnZVBvbGljeVYyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgS3ViZXJuZXRlcyB0aGUgcGVybWlzc2lvbnMgaXQgcmVxdWlyZXMgdG8gbWFuYWdlIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gS3ViZXJuZXRlcyByZXF1aXJlcyBFYzI6Q3JlYXRlVGFncyBwZXJtaXNzaW9ucyB0byBwbGFjZSBpZGVudGlmeWluZyBpbmZvcm1hdGlvbiBvbiBFQzIgcmVzb3VyY2VzIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gSW5zdGFuY2VzLCBTZWN1cml0eSBHcm91cHMsIGFuZCBFbGFzdGljIE5ldHdvcmsgSW50ZXJmYWNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTQ2x1c3RlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NDbHVzdGVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGF0dGFjaGVkIHRvIHRoZSBFS1MgQ2x1c3RlciBSb2xlIHRoYXQgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIG1hbmFnZSB0aGUgY2x1c3RlcidzIGNvbXB1dGUgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NDb21wdXRlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0NvbXB1dGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgQW1hem9uIEVLUyB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBmb3IgRUtTIGNvbm5lY3RvciAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NDb25uZWN0b3JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NDb25uZWN0b3JTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gdmlldyB0aGUgZGFzaGJvYXJkIGluIHRoZSBBbWF6b24gRUtTIGNvbnNvbGUuIFRoZSBkYXNoYm9hcmQgYWdncmVnYXRlcyBpbmZvcm1hdGlvbiBhYm91dCBtdWx0aXBsZSBjbHVzdGVycyBhbmQgcmVsYXRlZCByZXNvdXJjZXMgdXNpbmcgQVdTIE9yZ2FuaXphdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU0Rhc2hib2FyZENvbnNvbGVSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NEYXNoYm9hcmRDb25zb2xlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBlbmFibGVzIHRoZSBBbWF6b24gRUtTIERhc2hib2FyZCB0byBhY2Nlc3MgYW5kIGRpc3BsYXkgb3JnYW5pemF0aW9uLXdpZGUgaW5mb3JtYXRpb24uIFRoZSBwb2xpY3kgYWxsb3dzIHRoZSBFS1MgRGFzaGJvYXJkIHNlcnZpY2UgdG8gZ2F0aGVyIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgQVdTIE9yZ2FuaXphdGlvbnMgc3RydWN0dXJlIGFuZCBhY2NvdW50cy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTRGFzaGJvYXJkU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTRGFzaGJvYXJkU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gb3RoZXIgQVdTIHNlcnZpY2UgcmVzb3VyY2VzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIHJ1biBBbWF6b24gRUtTIHBvZHMgb24gQVdTIEZhcmdhdGUgKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTRmFyZ2F0ZVBvZEV4ZWN1dGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTRmFyZ2F0ZVBvZEV4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIHRvIEFtYXpvbiBFS1MgdG8gcnVuIGZhcmdhdGUgdGFza3MgKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTRm9yRmFyZ2F0ZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0ZvckZhcmdhdGVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBhdHRhY2hlZCB0byB0aGUgRUtTIENsdXN0ZXIgUm9sZSB0aGF0IGdyYW50cyBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgdGhlIGNsdXN0ZXIncyBsb2FkIGJhbGFuY2luZyByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU0xvYWRCYWxhbmNpbmdQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTTG9hZEJhbGFuY2luZ1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIEVLUyBsb2NhbCBjbHVzdGVyJ3MgY29udHJvbC1wbGFuZSBpbnN0YW5jZXMgcnVubmluZyBpbiB5b3VyIGFjY291bnQgdG8gbWFuYWdlIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTTG9jYWxPdXRwb3N0Q2x1c3RlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NMb2NhbE91dHBvc3RDbHVzdGVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBFS1MgTG9jYWwgdG8gY2FsbCBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkVLU0xvY2FsT3V0cG9zdFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0xvY2FsT3V0cG9zdFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgQW1hem9uIEVLUyBNQ1Agc2VydmljZS4gVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHVzZSBvbmx5IHJlYWQtb25seSB0b29scyBpbiB0aGUgRUtTIE1DUCBzZXJ2aWNlIG1lYW50IGZvciBvYnNlcnZhYmlsaXR5LCB0cm91Ymxlc2hvb3RpbmcsIHJldHJpZXZpbmcgRUtTIHJlc291cmNlIGluZm9ybWF0aW9uLCBhbmQgZ2V0dGluZyBFS1Mtb3B0aW1pemVkIHN1Z2dlc3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NNQ1BSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NNQ1BSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBhdHRhY2hlZCB0byB0aGUgRUtTIENsdXN0ZXIgUm9sZSB0aGF0IGdyYW50cyBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgdGhlIGNsdXN0ZXIncyBuZXR3b3JraW5nIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTTmV0d29ya2luZ1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NOZXR3b3JraW5nUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIEFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIGZvciBLdWJlcm5ldGVzIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHRoZSBuZWNlc3NhcnkgcmVzb3VyY2VzIHRvIG9wZXJhdGUgRUtTIENsdXN0ZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NTZXJ2aWNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU1NlcnZpY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBIFNlcnZpY2UtTGlua2VkIFJvbGUgcmVxdWlyZWQgZm9yIEFtYXpvbiBFS1MgdG8gY2FsbCBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkVLU1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHVzZWQgYnkgVlBDIFJlc291cmNlIENvbnRyb2xsZXIgdG8gbWFuYWdlIEVOSSBhbmQgSVBzIGZvciB3b3JrZXIgbm9kZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU1ZQQ1Jlc291cmNlQ29udHJvbGxlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NWUENSZXNvdXJjZUNvbnRyb2xsZXIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgQW1hem9uIEVLUyB3b3JrZXIgbm9kZXMgdG8gY29ubmVjdCB0byBBbWF6b24gRUtTIENsdXN0ZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NXb3JrZXJOb2RlTWluaW1hbFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NXb3JrZXJOb2RlTWluaW1hbFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBBbWF6b24gRUtTIHdvcmtlciBub2RlcyB0byBjb25uZWN0IHRvIEFtYXpvbiBFS1MgQ2x1c3RlcnMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU1dvcmtlck5vZGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTV29ya2VyTm9kZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBFbGFzdGlDYWNoZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aUNhY2hlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGlDYWNoZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBFbGFzdGlDYWNoZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aUNhY2hlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpQ2FjaGVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBBbWF6b24gRUNSIFB1YmxpYyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY0NvbnRhaW5lclJlZ2lzdHJ5UHVibGljRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljQ29udGFpbmVyUmVnaXN0cnlQdWJsaWNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEVDUiBQdWJsaWMgcmVwb3NpdG9yaWVzLCBidXQgZG9lcyBub3QgYWxsb3cgcmVwb3NpdG9yeSBkZWxldGlvbiBvciBwb2xpY3kgY2hhbmdlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY0NvbnRhaW5lclJlZ2lzdHJ5UHVibGljUG93ZXJVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNDb250YWluZXJSZWdpc3RyeVB1YmxpY1Bvd2VyVXNlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIEVDUiBQdWJsaWMgcmVwb3NpdG9yaWVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljQ29udGFpbmVyUmVnaXN0cnlQdWJsaWNSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljQ29udGFpbmVyUmVnaXN0cnlQdWJsaWNSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJvb3QgY2xpZW50IGFjY2VzcyB0byBhbiBBbWF6b24gRUZTIGZpbGUgc3lzdGVtICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtQ2xpZW50RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljRmlsZVN5c3RlbUNsaWVudEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgY2xpZW50IGFjY2VzcyB0byBhbiBBbWF6b24gRUZTIGZpbGUgc3lzdGVtICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtQ2xpZW50UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1DbGllbnRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgYW5kIHdyaXRlIGNsaWVudCBhY2Nlc3MgdG8gYW4gQW1hem9uIEVGUyBmaWxlIHN5c3RlbSAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljRmlsZVN5c3RlbUNsaWVudFJlYWRXcml0ZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljRmlsZVN5c3RlbUNsaWVudFJlYWRXcml0ZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBFRlMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljRmlsZVN5c3RlbUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRUZTIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljRmlsZVN5c3RlbVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBFbGFzdGljIEZpbGUgU3lzdGVtIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBjdXN0b21lcnMgdG8gdXNlIEFXUyBTeXN0ZW1zIE1hbmFnZXIgdG8gYXV0b21hdGljYWxseSBtYW5hZ2UgQW1hem9uIEVGUyB1dGlsaXRpZXMgKGFtYXpvbi1lZnMtdXRpbHMpIHBhY2thZ2Ugb24gdGhlaXIgRUMyIGluc3RhbmNlcywgYW5kIHVzZSBDbG91ZFdhdGNoTG9nIHRvIGdldCBFRlMgZmlsZSBzeXN0ZW0gbW91bnQgc3VjY2Vzcy9mYWlsdXJlIG5vdGlmaWNhdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtc1V0aWxzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtc1V0aWxzKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBBbWF6b24gRWxhc3RpYyBNYXBSZWR1Y2UgRWRpdG9ycyBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VFZGl0b3JzUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljTWFwUmVkdWNlRWRpdG9yc1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gRWxhc3RpYyBNYXBSZWR1Y2UgZm9yIEF1dG8gU2NhbGluZy4gUm9sZSB0byBhbGxvdyBBdXRvIFNjYWxpbmcgdG8gYWRkIGFuZCByZW1vdmUgaW5zdGFuY2VzIGZyb20geW91ciBFTVIgY2x1c3Rlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY01hcFJlZHVjZWZvckF1dG9TY2FsaW5nUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljTWFwUmVkdWNlZm9yQXV0b1NjYWxpbmdSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBBbWF6b24gRWxhc3RpYyBNYXBSZWR1Y2UgZm9yIEVDMiBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNNYXBSZWR1Y2Vmb3JFQzJSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNNYXBSZWR1Y2Vmb3JFQzJSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgb24gYSBkZXByZWNhdGlvbiBwYXRoLiBTZWUgZG9jdW1lbnRhdGlvbiBmb3IgZ3VpZGFuY2U6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbXIvbGF0ZXN0L01hbmFnZW1lbnRHdWlkZS9lbXItbWFuYWdlZC1pYW0tcG9saWNpZXMuaHRtbC4gUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEVsYXN0aWMgTWFwUmVkdWNlIGFuZCB1bmRlcmx5aW5nIHNlcnZpY2VzIHRoYXQgaXQgcmVxdWlyZXMgc3VjaCBhcyBFQzIgYW5kIFMzICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGFsbG93IEVNUiB0byBjcmVhdGUsIGRlc2NyaWJlIGFuZCBkZWxldGUgRUMyIHBsYWNlbWVudCBncm91cHMuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VQbGFjZW1lbnRHcm91cFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljTWFwUmVkdWNlUGxhY2VtZW50R3JvdXBQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBFbGFzdGljIE1hcFJlZHVjZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljTWFwUmVkdWNlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBvbiBhIGRlcHJlY2F0aW9uIHBhdGguIFNlZSBkb2N1bWVudGF0aW9uIGZvciBndWlkYW5jZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Vtci9sYXRlc3QvTWFuYWdlbWVudEd1aWRlL2Vtci1tYW5hZ2VkLWlhbS1wb2xpY2llcy5odG1sLiAgRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBBbWF6b24gRWxhc3RpYyBNYXBSZWR1Y2Ugc2VydmljZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljTWFwUmVkdWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljTWFwUmVkdWNlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IEFtYXpvbiBFbGFzdGljc2VhcmNoIFNlcnZpY2UgdG8gYWNjZXNzIG90aGVyIEFXUyBzZXJ2aWNlcyBzdWNoIGFzIEVDMiBOZXR3b3JraW5nIEFQSXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNzZWFyY2hTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljc2VhcmNoU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdXNlcnMgZnVsbCBhY2Nlc3MgdG8gRWxhc3RpYyBUcmFuc2NvZGVyIGFuZCB0aGUgYWNjZXNzIHRvIGFzc29jaWF0ZWQgc2VydmljZXMgdGhhdCBpcyByZXF1aXJlZCBmb3IgZnVsbCBFbGFzdGljIFRyYW5zY29kZXIgZnVuY3Rpb25hbGl0eS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY1RyYW5zY29kZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNUcmFuc2NvZGVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB1c2VycyBwZXJtaXNzaW9uIHRvIGNoYW5nZSBwcmVzZXRzLCBzdWJtaXQgam9icywgYW5kIHZpZXcgRWxhc3RpYyBUcmFuc2NvZGVyIHNldHRpbmdzLiBUaGlzIHBvbGljeSBhbHNvIGdyYW50cyBzb21lIHJlYWQtb25seSBhY2Nlc3MgdG8gc29tZSBvdGhlciBzZXJ2aWNlcyByZXF1aXJlZCB0byB1c2UgdGhlIEVsYXN0aWMgVHJhbnNjb2RlIGNvbnNvbGUsIGluY2x1ZGluZyBTMywgSUFNLCBhbmQgU05TLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljVHJhbnNjb2RlckpvYnNTdWJtaXR0ZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY1RyYW5zY29kZXJKb2JzU3VibWl0dGVyKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHVzZXJzIHJlYWQtb25seSBhY2Nlc3MgdG8gRWxhc3RpYyBUcmFuc2NvZGVyIGFuZCBsaXN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljVHJhbnNjb2RlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNUcmFuc2NvZGVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEFtYXpvbiBFbGFzdGljIFRyYW5zY29kZXIgc2VydmljZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljVHJhbnNjb2RlclJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY1RyYW5zY29kZXJSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBhY3Rpb25zIHRoYXQgRU1SIHJlcXVpcmVzIHRvIHRlcm1pbmF0ZSBhbmQgZGVsZXRlIEFXUyBFQzIgcmVzb3VyY2VzIGlmIHRoZSBFTVIgU2VydmljZSByb2xlIGhhcyBsb3N0IHRoYXQgYWJpbGl0eS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRU1SQ2xlYW51cFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FTVJDbGVhbnVwUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFjY2VzcyB0byBvdGhlciBBV1Mgc2VydmljZSByZXNvdXJjZXMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gcnVuIEFtYXpvbiBFTVIgKi9cbiAgICBwdWJsaWMgQW1hem9uRU1SQ29udGFpbmVyc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVNUkNvbnRhaW5lcnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBFTVIgKi9cbiAgICBwdWJsaWMgQW1hem9uRU1SRnVsbEFjY2Vzc1BvbGljeVYyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVNUkZ1bGxBY2Nlc3NQb2xpY3lWMik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEVNUiBhbmQgdGhlIGFzc29jaWF0ZWQgQ2xvdWRXYXRjaCBNZXRyaWNzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FTVJSZWFkT25seUFjY2Vzc1BvbGljeVYyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVNUlJlYWRPbmx5QWNjZXNzUG9saWN5VjIpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlIHJlc291cmNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBydW4gQW1hem9uIEVNUlNlcnZlcmxlc3MgKi9cbiAgICBwdWJsaWMgQW1hem9uRU1SU2VydmVybGVzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVNUlNlcnZlcmxlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIHVzZWQgZm9yIHRoZSBBbWF6b24gRU1SIFNlcnZpY2UgUm9sZSBhbmQgc2hvdWxkIE5PVCBiZSB1c2VkIGZvciBhbnkgb3RoZXIgSUFNIHVzZXJzIG9yIHJvbGVzIGluIHlvdXIgYWNjb3VudC4gVGhlIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBFTVIgYW5kIHJlbGF0ZWQgc2VydmljZXMgbmVjZXNzYXJ5IGZvciB0aGUgb3BlcmF0aW9uIG9mIHlvdXIgRU1SIGNsdXN0ZXIuICovXG4gICAgcHVibGljIEFtYXpvbkVNUlNlcnZpY2VQb2xpY3lWMigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FTVJTZXJ2aWNlUG9saWN5VjIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBwcm92aXNpb24gYW5kIG1hbmFnZSBOZXR3b3JrIExvYWQgQmFsYW5jZXJzLCBWUEMgZW5kcG9pbnQgc2VydmljZXMsIGFuZCBzZWN1cml0eSBncm91cHMgcmVxdWlyZWQgZm9yIEFtYXpvbiBFTVIgU3BhcmsgQ29ubmVjdCBpbnRlcmFjdGl2ZSBzZXNzaW9ucyBvbiBFTVIgb24gRUMyIGNsdXN0ZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FTVJTZXJ2aWNlUG9saWN5Rm9yU2Vzc2lvbnMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRU1SU2VydmljZVBvbGljeUZvclNlc3Npb25zKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbGltaXRlZCBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBDb2duaXRvIGNvbmZpZ3VyYXRpb24gc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRVNDb2duaXRvQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVTQ29nbml0b0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBbWF6b24gRVMgY29uZmlndXJhdGlvbiBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FU0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRVNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgQW1hem9uIEVTIGNvbmZpZ3VyYXRpb24gc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRVNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FU1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEV2ZW50QnJpZGdlIHRvIGFjY2VzcyBTZWNyZXQgTWFuYWdlciByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkV2ZW50QnJpZGdlQXBpRGVzdGluYXRpb25zU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRXZlbnRCcmlkZ2VBcGlEZXN0aW5hdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBFdmVudEJyaWRnZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRXZlbnRCcmlkZ2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkV2ZW50QnJpZGdlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBFdmVudEJyaWRnZSBQaXBlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRXZlbnRCcmlkZ2VQaXBlc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRXZlbnRCcmlkZ2VQaXBlc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYW5kIG9wZXJhdG9yIChhYmlsaXR5IHRvIFN0b3AgYW5kIFN0YXJ0IHJ1bm5pbmcgUGlwZXMpIGFjY2VzcyB0byBBbWF6b24gRXZlbnRCcmlkZ2UgUGlwZXMuICovXG4gICAgcHVibGljIEFtYXpvbkV2ZW50QnJpZGdlUGlwZXNPcGVyYXRvckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FdmVudEJyaWRnZVBpcGVzT3BlcmF0b3JBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBFdmVudEJyaWRnZSBQaXBlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRXZlbnRCcmlkZ2VQaXBlc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkV2ZW50QnJpZGdlUGlwZXNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEV2ZW50QnJpZGdlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FdmVudEJyaWRnZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkV2ZW50QnJpZGdlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgQW1hem9uRXZlbnRCcmlkZ2VTY2hlZHVsZXJGdWxsQWNjZXNzIG1hbmFnZWQgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byB1c2UgYWxsIEV2ZW50QnJpZGdlIFNjaGVkdWxlciBhY3Rpb25zIGZvciBzY2hlZHVsZXMsIGFuZCBzY2hlZHVsZSBncm91cHMuICovXG4gICAgcHVibGljIEFtYXpvbkV2ZW50QnJpZGdlU2NoZWR1bGVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FdmVudEJyaWRnZVNjaGVkdWxlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgQW1hem9uRXZlbnRCcmlkZ2VTY2hlZHVsZXJSZWFkT25seUFjY2VzcyBtYW5hZ2VkIHBvbGljeSBncmFudHMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIHRvIHZpZXcgZGV0YWlscyBhYm91dCB5b3VyIHNjaGVkdWxlcyBhbmQgc2NoZWR1bGUgZ3JvdXBzICovXG4gICAgcHVibGljIEFtYXpvbkV2ZW50QnJpZGdlU2NoZWR1bGVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRXZlbnRCcmlkZ2VTY2hlZHVsZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBFdmVudEJyaWRnZSBTY2hlbWFzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FdmVudEJyaWRnZVNjaGVtYXNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkV2ZW50QnJpZGdlU2NoZW1hc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBFdmVudEJyaWRnZSBTY2hlbWFzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FdmVudEJyaWRnZVNjaGVtYXNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FdmVudEJyaWRnZVNjaGVtYXNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBNYW5hZ2VkIFJ1bGVzIGNyZWF0ZWQgYnkgQW1hem9uIEV2ZW50QnJpZGdlIHNjaGVtYXMuICovXG4gICAgcHVibGljIEFtYXpvbkV2ZW50QnJpZGdlU2NoZW1hc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkV2ZW50QnJpZGdlU2NoZW1hc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIEVWUyB0byBtYW5hZ2UgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFtYXpvbkVWU1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVWU1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBBV1MgRklTIHRvIG1hbmFnZSBtb25pdG9yaW5nIGFuZCByZXNvdXJjZSBzZWxlY3Rpb24gZm9yIGV4cGVyaW1lbnRzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25GSVNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25GSVNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdpdmVzIGFjY2VzcyB0byBhbGwgYWN0aW9ucyBmb3IgQW1hem9uIEZvcmVjYXN0ICovXG4gICAgcHVibGljIEFtYXpvbkZvcmVjYXN0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Gb3JlY2FzdEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHaXZlcyBhY2Nlc3MgdG8gYWxsIGFjdGlvbnMgZm9yIEFtYXpvbiBGcmF1ZCBEZXRlY3RvciAqL1xuICAgIHB1YmxpYyBBbWF6b25GcmF1ZERldGVjdG9yRnVsbEFjY2Vzc1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25GcmF1ZERldGVjdG9yRnVsbEFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bGwgQWNjZXNzIFBvbGljeSBmb3IgQW1hem9uIEZyZWVSVE9TICovXG4gICAgcHVibGljIEFtYXpvbkZyZWVSVE9TRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25GcmVlUlRPU0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdXNlciB0byBhY2Nlc3MgQW1hem9uIEZyZWVSVE9TIE9UQSBVcGRhdGUgKi9cbiAgICBwdWJsaWMgQW1hem9uRnJlZVJUT1NPVEFVcGRhdGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRnJlZVJUT1NPVEFVcGRhdGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRlN4IGFuZCBhY2Nlc3MgdG8gcmVsYXRlZCBBV1Mgc2VydmljZXMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25GU3hDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25GU3hDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEZTeCBhbmQgYWNjZXNzIHRvIHJlbGF0ZWQgQVdTIHNlcnZpY2VzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRlN4Q29uc29sZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZTeENvbnNvbGVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBGU3ggYW5kIGFjY2VzcyB0byByZWxhdGVkIEFXUyBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRlN4RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25GU3hGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRlN4LiAqL1xuICAgIHB1YmxpYyBBbWF6b25GU3hSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25GU3hSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gRlN4IHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFtYXpvbkZTeFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZTeFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEdsYWNpZXIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25HbGFjaWVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25HbGFjaWVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEdsYWNpZXIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25HbGFjaWVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uR2xhY2llclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGFjY2VzcyB0byBBbWF6b24gQXRoZW5hIGFuZCB0aGUgZGVwZW5kZW5jaWVzIG5lZWRlZCB0byBlbmFibGUgcXVlcnlpbmcgYW5kIHdyaXRpbmcgcmVzdWx0cyB0byBzMyBmcm9tIHRoZSBBbWF6b24gQXRoZW5hIHBsdWdpbiBpbiBBbWF6b24gR3JhZmFuYS4gKi9cbiAgICBwdWJsaWMgQW1hem9uR3JhZmFuYUF0aGVuYUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25HcmFmYW5hQXRoZW5hQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGFjY2VzcyB0byBBbWF6b24gQ2xvdWRXYXRjaCBhbmQgdGhlIGRlcGVuZGVuY2llcyBuZWVkZWQgdG8gdXNlIENsb3VkV2F0Y2ggYXMgYSBkYXRhc291cmNlIHdpdGhpbiBBbWF6b24gTWFuYWdlZCBHcmFmYW5hLiAqL1xuICAgIHB1YmxpYyBBbWF6b25HcmFmYW5hQ2xvdWRXYXRjaEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25HcmFmYW5hQ2xvdWRXYXRjaEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBzY29wZWQgYWNjZXNzIHRvIEFtYXpvbiBSZWRzaGlmdCBhbmQgdGhlIGRlcGVuZGVuY2llcyBuZWVkZWQgdG8gdXNlIHRoZSBBbWF6b24gUmVkc2hpZnQgcGx1Z2luIGluIEFtYXpvbiBHcmFmYW5hLiAqL1xuICAgIHB1YmxpYyBBbWF6b25HcmFmYW5hUmVkc2hpZnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uR3JhZmFuYVJlZHNoaWZ0QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBSZXNvdXJjZXMgbWFuYWdlZCBvciB1c2VkIGJ5IEFtYXpvbiBHcmFmYW5hLiAqL1xuICAgIHB1YmxpYyBBbWF6b25HcmFmYW5hU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uR3JhZmFuYVNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdXNlIEFtYXpvbiBHdWFyZER1dHkgKi9cbiAgICBwdWJsaWMgQW1hem9uR3VhcmREdXR5RnVsbEFjY2Vzc1YyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkd1YXJkRHV0eUZ1bGxBY2Nlc3NWMik7XG4gICAgfVxuXG4gICAgLyoqIEd1YXJkRHV0eSBtYWx3YXJlIHByb3RlY3Rpb24gdXNlcyB0aGUgc2VydmljZS1saW5rZWQgcm9sZSAoU0xSKSBuYW1lZCBBV1NTZXJ2aWNlUm9sZUZvckFtYXpvbkd1YXJkRHV0eU1hbHdhcmVQcm90ZWN0aW9uLiBUaGlzIHNlcnZpY2UtbGlua2VkIHJvbGUgYWxsb3dzIEd1YXJkRHV0eSBtYWx3YXJlIHByb3RlY3Rpb24gdG8gcGVyZm9ybSBhZ2VudC1sZXNzIHNjYW5zIHRvIGRldGVjdCBtYWx3YXJlLiBJdCBhbGxvd3MgR3VhcmREdXR5IHRvIGNyZWF0ZSBzbmFwc2hvdHMgaW4geW91ciBhY2NvdW50LCBhbmQgc2hhcmUgdGhlIHNuYXBzaG90cyB3aXRoIHRoZSBHdWFyZER1dHkgc2VydmljZSBhY2NvdW50IHRvIHNjYW4gZm9yIG1hbHdhcmUuIEl0IGV2YWx1YXRlcyB0aGVzZSBzaGFyZWQgc25hcHNob3RzIGFuZCBpbmNsdWRlcyB0aGUgcmV0cmlldmVkIEVDMiBpbnN0YW5jZSBtZXRhZGF0YSBpbiB0aGUgR3VhcmREdXR5IE1hbHdhcmUgUHJvdGVjdGlvbiBmaW5kaW5ncy4gVGhlIEFXU1NlcnZpY2VSb2xlRm9yQW1hem9uR3VhcmREdXR5TWFsd2FyZVByb3RlY3Rpb24gc2VydmljZS1saW5rZWQgcm9sZSB0cnVzdHMgdGhlIG1hbHdhcmUtcHJvdGVjdGlvbi5ndWFyZGR1dHkuYW1hem9uYXdzLmNvbSBzZXJ2aWNlIHRvIGFzc3VtZSB0aGUgcm9sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uR3VhcmREdXR5TWFsd2FyZVByb3RlY3Rpb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25HdWFyZER1dHlNYWx3YXJlUHJvdGVjdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gR3VhcmREdXR5IHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25HdWFyZER1dHlSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25HdWFyZER1dHlSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZSBhY2Nlc3MgdG8gQVdTIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIEd1YXJkIER1dHkgKi9cbiAgICBwdWJsaWMgQW1hem9uR3VhcmREdXR5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uR3VhcmREdXR5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gSGVhbHRoTGFrZSBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25IZWFsdGhMYWtlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25IZWFsdGhMYWtlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEhlYWx0aExha2Ugc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uSGVhbHRoTGFrZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkhlYWx0aExha2VSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEhvbmV5Y29kZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIHRoZSBTREsuICovXG4gICAgcHVibGljIEFtYXpvbkhvbmV5Y29kZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSG9uZXljb2RlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gSG9uZXljb2RlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgdGhlIFNESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uSG9uZXljb2RlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSG9uZXljb2RlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBIHNlcnZpY2UtbGlua2VkIHJvbGUgcmVxdWlyZWQgZm9yIEFtYXpvbiBIb25leWNvZGUgdG8gYWNjZXNzIHlvdXIgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Ib25leWNvZGVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Ib25leWNvZGVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEhvbmV5Y29kZSBUZWFtIEFzc29jaWF0aW9uIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgdGhlIFNESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uSG9uZXljb2RlVGVhbUFzc29jaWF0aW9uRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Ib25leWNvZGVUZWFtQXNzb2NpYXRpb25GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBIb25leWNvZGUgVGVhbSBBc3NvY2lhdGlvbiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIHRoZSBTREsuICovXG4gICAgcHVibGljIEFtYXpvbkhvbmV5Y29kZVRlYW1Bc3NvY2lhdGlvblJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkhvbmV5Y29kZVRlYW1Bc3NvY2lhdGlvblJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSG9uZXljb2RlIFdvcmtib29rIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgdGhlIFNESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uSG9uZXljb2RlV29ya2Jvb2tGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkhvbmV5Y29kZVdvcmtib29rRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gSG9uZXljb2RlIFdvcmtib29rIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgdGhlIFNESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uSG9uZXljb2RlV29ya2Jvb2tSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Ib25leWNvZGVXb3JrYm9va1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIEFtYXpvbiBJbnNwZWN0b3IgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBuZWVkZWQgdG8gcGVyZm9ybSBhZ2VudC1sZXNzIHNlY3VyaXR5IGFzc2Vzc21lbnRzICovXG4gICAgcHVibGljIEFtYXpvbkluc3BlY3RvcjJBZ2VudGxlc3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25JbnNwZWN0b3IyQWdlbnRsZXNzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQW1hem9uIEluc3BlY3RvciBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIG5lZWRlZCB0byBwZXJmb3JtIHNlY3VyaXR5IGFzc2Vzc21lbnRzIGZvciBBTUkgKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yMkFtaVNjYW5TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25JbnNwZWN0b3IyQW1pU2NhblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEluc3BlY3RvciBhbmQgYWNjZXNzIHRvIG90aGVyIHJlbGF0ZWQgc2VydmljZXMgc3VjaCBhcyBvcmdhbml6YXRpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25JbnNwZWN0b3IyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25JbnNwZWN0b3IyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBJbnNwZWN0b3IgYW5kIGFjY2VzcyB0byBvdGhlciByZWxhdGVkIHNlcnZpY2VzIHN1Y2ggYXMgb3JnYW5pemF0aW9ucyB3aXRoIHJlc3RyaWN0aXZlIG9yZ2FuaXphdGlvbmFsIGFjY2Vzcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yMkZ1bGxBY2Nlc3NWMigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25JbnNwZWN0b3IyRnVsbEFjY2Vzc1YyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBpcyBhIG1hbmFnZWQgcG9saWN5IHRoYXQgY3VzdG9tZXIgc2hvdWxkIGF0dGFjaCB0byB0aGVpciByb2xlcyB0byBjb21tdW5pY2F0ZSB3aXRoIGluc3BlY3RvciBzZXJ2aWNlIGZvciBDSVMgc2NhbnMgKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yMk1hbmFnZWRDaXNQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSW5zcGVjdG9yMk1hbmFnZWRDaXNQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gY29tbXVuaWNhdGUgd2l0aCBJbnNwZWN0b3IyIFRlbGVtZXRyeSBDaGFubmVsICovXG4gICAgcHVibGljIEFtYXpvbkluc3BlY3RvcjJNYW5hZ2VkVGVsZW1ldHJ5UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkluc3BlY3RvcjJNYW5hZ2VkVGVsZW1ldHJ5UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byB0aGUgQW1hem9uIGluc3BlY3RvcjIgc2VydmljZSBhbmQgcmVsZXZhbnQgc3VwcG9ydCBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25JbnNwZWN0b3IyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSW5zcGVjdG9yMlJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIEFtYXpvbiBJbnNwZWN0b3IgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBuZWVkZWQgdG8gcGVyZm9ybSBzZWN1cml0eSBhc3Nlc3NtZW50cyAqL1xuICAgIHB1YmxpYyBBbWF6b25JbnNwZWN0b3IyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSW5zcGVjdG9yMlNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIGZvciBBbWF6b24gSW5zcGVjdG9yIHRvIHBlcmZvcm0gYWN0aW9ucyBvbiB5b3VyIGJlaGFsZiBmb3IgbXVsdGktY2xvdWQgcmVzb3VyY2Ugc2Nhbm5pbmcuICovXG4gICAgcHVibGljIEFtYXpvbkluc3BlY3RvcjJUaGlyZFBhcnR5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSW5zcGVjdG9yMlRoaXJkUGFydHlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBJbnNwZWN0b3IuICovXG4gICAgcHVibGljIEFtYXpvbkluc3BlY3RvckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSW5zcGVjdG9yRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEluc3BlY3Rvci4gKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSW5zcGVjdG9yUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQW1hem9uIEluc3BlY3RvciBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIG5lZWRlZCB0byBwZXJmb3JtIHNlY3VyaXR5IGFzc2Vzc21lbnRzICovXG4gICAgcHVibGljIEFtYXpvbkluc3BlY3RvclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkluc3BlY3RvclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEtlbmRyYSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbktlbmRyYUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2VuZHJhRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEtlbmRyYSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbktlbmRyYVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktlbmRyYVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBmdWxsIGFjY2VzcyB0byBBbWF6b24gS2V5c3BhY2VzICovXG4gICAgcHVibGljIEFtYXpvbktleXNwYWNlc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2V5c3BhY2VzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gS2V5c3BhY2VzICovXG4gICAgcHVibGljIEFtYXpvbktleXNwYWNlc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktleXNwYWNlc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBLZXlzcGFjZXMgYW5kIHJlbGF0ZWQgQVdTIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25LZXlzcGFjZXNSZWFkT25seUFjY2Vzc1YyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktleXNwYWNlc1JlYWRPbmx5QWNjZXNzVjIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gS2luZXNpcyBBbmFseXRpY3MgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25LaW5lc2lzQW5hbHl0aWNzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25LaW5lc2lzQW5hbHl0aWNzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIEtpbmVzaXMgQW5hbHl0aWNzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uS2luZXNpc0FuYWx5dGljc1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktpbmVzaXNBbmFseXRpY3NSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBBbWF6b24gS2luZXNpcyBGaXJlaG9zZSBEZWxpdmVyeSBTdHJlYW1zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25LaW5lc2lzRmlyZWhvc2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktpbmVzaXNGaXJlaG9zZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIGFsbCBBbWF6b24gS2luZXNpcyBGaXJlaG9zZSBEZWxpdmVyeSBTdHJlYW1zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25LaW5lc2lzRmlyZWhvc2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25LaW5lc2lzRmlyZWhvc2VSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBzdHJlYW1zIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uS2luZXNpc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2luZXNpc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIGFsbCBzdHJlYW1zIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uS2luZXNpc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktpbmVzaXNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBLaW5lc2lzIFZpZGVvIFN0cmVhbXMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25LaW5lc2lzVmlkZW9TdHJlYW1zRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25LaW5lc2lzVmlkZW9TdHJlYW1zRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIEtpbmVzaXMgVmlkZW8gU3RyZWFtcyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbktpbmVzaXNWaWRlb1N0cmVhbXNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25LaW5lc2lzVmlkZW9TdHJlYW1zUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBGdWxsIGFjY2VzcyB0byBBV1MgTGF1bmNoIHdpemFyZCBhbmQgb3RoZXIgcmVxdWlyZWQgc2VydmljZXMuICovXG4gICAgcHVibGljIEFtYXpvbkxhdW5jaFdpemFyZEZ1bGxBY2Nlc3NWMigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25MYXVuY2hXaXphcmRGdWxsQWNjZXNzVjIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgY3VzdG9tZXJzIHRvIGNhbGwgTGV4IHJ1bnRpbWUgZnJvbSBjaGFubmVscyAqL1xuICAgIHB1YmxpYyBBbWF6b25MZXhDaGFubmVsc0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25MZXhDaGFubmVsc0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBMZXggdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAgQWxzbyBwcm92aWRlcyBhY2Nlc3MgdG8gY3JlYXRlIExleCBTZXJ2aWNlIExpbmtlZCBSb2xlcyBhbmQgZ3JhbnQgTGV4IHBlcm1pc3Npb25zIHRvIGludm9rZSBhIGxpbWl0ZWQgc2V0IG9mIExhbWJkYSBmdW5jdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvbkxleEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTGV4RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIExleC4gKi9cbiAgICBwdWJsaWMgQW1hem9uTGV4UmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTGV4UmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIExleCB0byByZXBsaWNhdGUgTGV4IHJlc291cmNlcyBhY3Jvc3MgcmVnaW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uTGV4UmVwbGljYXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTGV4UmVwbGljYXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQW1hem9uIExleCBjb252ZXJzYXRpb25hbCBBUElzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25MZXhSdW5Cb3RzT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25MZXhSdW5Cb3RzT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIExleCBWMiBib3RzIGFjY2VzcyB0byBjYWxsIG90aGVyIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uTGV4VjJCb3RQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTGV4VjJCb3RQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTG9va291dCBmb3IgRXF1aXBtZW50IG9wZXJhdGlvbnMgKi9cbiAgICBwdWJsaWMgQW1hem9uTG9va291dEVxdWlwbWVudEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTG9va291dEVxdWlwbWVudEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBMb29rb3V0IGZvciBFcXVpcG1lbnRzICovXG4gICAgcHVibGljIEFtYXpvbkxvb2tvdXRFcXVpcG1lbnRSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Mb29rb3V0RXF1aXBtZW50UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHaXZlcyBhY2Nlc3MgdG8gYWxsIGFjdGlvbnMgZm9yIEFtYXpvbiBMb29rb3V0IGZvciBNZXRyaWNzICovXG4gICAgcHVibGljIEFtYXpvbkxvb2tvdXRNZXRyaWNzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Mb29rb3V0TWV0cmljc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHaXZlcyBhY2Nlc3MgdG8gYWxsIHJlYWQtb25seSBhY3Rpb25zIGZvciBBbWF6b24gTG9va291dCBmb3IgTWV0cmljcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Mb29rb3V0TWV0cmljc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkxvb2tvdXRNZXRyaWNzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTG9va291dCBmb3IgVmlzaW9uIGFuZCBzY29wZWQgYWNjZXNzIHRvIHJlcXVpcmVkIHNlcnZpY2UgYW5kIGNvbnNvbGUgZGVwZW5kZW5jaWVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Mb29rb3V0VmlzaW9uQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTG9va291dFZpc2lvbkNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gTG9va291dCBmb3IgVmlzaW9uIGFuZCBzY29wZWQgYWNjZXNzIHRvIHJlcXVpcmVkIHNlcnZpY2UgYW5kIGNvbnNvbGUgZGVwZW5kZW5jaWVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Mb29rb3V0VmlzaW9uQ29uc29sZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkxvb2tvdXRWaXNpb25Db25zb2xlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTG9va291dCBmb3IgVmlzaW9uIGFuZCBzY29wZWQgYWNjZXNzIHRvIHJlcXVpcmVkIGRlcGVuZGVuY2llcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTG9va291dFZpc2lvbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTG9va291dFZpc2lvbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBMb29rb3V0IGZvciBWaXNpb24gYW5kIHNjb3BlZCBhY2Nlc3MgdG8gcmVxdWlyZWQgZGVwZW5kZW5jaWVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Mb29rb3V0VmlzaW9uUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTG9va291dFZpc2lvblJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHVzZXJzIHBlcm1pc3Npb24gdG8gcmVxdWVzdCBBbWF6b24gTWFjaGluZSBMZWFybmluZyBiYXRjaCBwcmVkaWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWFjaGluZUxlYXJuaW5nQmF0Y2hQcmVkaWN0aW9uc0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNoaW5lTGVhcm5pbmdCYXRjaFByZWRpY3Rpb25zQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgY3JlYXRlIGFjY2VzcyBmb3Igbm9uLXByZWRpY3Rpb24gQW1hem9uIE1hY2hpbmUgTGVhcm5pbmcgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNoaW5lTGVhcm5pbmdDcmVhdGVPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1hY2hpbmVMZWFybmluZ0NyZWF0ZU9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTWFjaGluZSBMZWFybmluZyByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbk1hY2hpbmVMZWFybmluZ0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaGluZUxlYXJuaW5nRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB1c2VycyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhbmQgZGVsZXRlIHRoZSByZWFsLXRpbWUgZW5kcG9pbnQgZm9yIEFtYXpvbiBNYWNoaW5lIExlYXJuaW5nIG1vZGVscy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWFjaGluZUxlYXJuaW5nTWFuYWdlUmVhbFRpbWVFbmRwb2ludE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaGluZUxlYXJuaW5nTWFuYWdlUmVhbFRpbWVFbmRwb2ludE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBNYWNoaW5lIExlYXJuaW5nIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWFjaGluZUxlYXJuaW5nUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaGluZUxlYXJuaW5nUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdXNlcnMgcGVybWlzc2lvbiB0byByZXF1ZXN0IEFtYXpvbiBNYWNoaW5lIExlYXJuaW5nIHJlYWwtdGltZSBwcmVkaWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWFjaGluZUxlYXJuaW5nUmVhbFRpbWVQcmVkaWN0aW9uT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNoaW5lTGVhcm5pbmdSZWFsVGltZVByZWRpY3Rpb25Pbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIE1hY2hpbmUgTGVhcm5pbmcgdG8gY29uZmlndXJlIGFuZCB1c2UgeW91ciBSZWRzaGlmdCBDbHVzdGVycyBhbmQgUzMgU3RhZ2luZyBMb2NhdGlvbnMgZm9yIFJlZHNoaWZ0IERhdGEgU291cmNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNoaW5lTGVhcm5pbmdSb2xlZm9yUmVkc2hpZnREYXRhU291cmNlVjMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaGluZUxlYXJuaW5nUm9sZWZvclJlZHNoaWZ0RGF0YVNvdXJjZVYzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIE1hY2llLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNpZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaWVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIHRoZSBzZXJ2aWNlLWxpbmtlZCByb2xlIG9mIEFtYXpvbiBNYWNpZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWFjaWVIYW5kc2hha2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1hY2llSGFuZHNoYWtlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWRvbmx5IGFjY2VzcyB0byBBbWF6b24gTWFjaWUuICovXG4gICAgcHVibGljIEFtYXpvbk1hY2llUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaWVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBNYWNpZSByZWFkLW9ubHkgYWNjZXNzIHRvIHJlc291cmNlIGRlcGVuZGVuY2llcyBpbiB5b3VyIGFjY291bnQgaW4gb3JkZXIgdG8gZW5hYmxlIGRhdGEgYW5hbHlzaXMuICovXG4gICAgcHVibGljIEFtYXpvbk1hY2llU2VydmljZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaWVTZXJ2aWNlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UgbGlua2VkIHJvbGUgZm9yIEFtYXpvbiBNYWNpZSAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNpZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1hY2llU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTWFuYWdlZCBCbG9ja2NoYWluIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBBbWF6b25NYW5hZ2VkQmxvY2tjaGFpbkNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1hbmFnZWRCbG9ja2NoYWluQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTWFuYWdlZCBCbG9ja2NoYWluLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYW5hZ2VkQmxvY2tjaGFpbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFuYWdlZEJsb2NrY2hhaW5GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gTWFuYWdlZCBCbG9ja2NoYWluLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYW5hZ2VkQmxvY2tjaGFpblJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1hbmFnZWRCbG9ja2NoYWluUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIE1hbmFnZWQgQmxvY2tjaGFpbiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYW5hZ2VkQmxvY2tjaGFpblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1hbmFnZWRCbG9ja2NoYWluU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBNYW5hZ2VkIEFwYWNoZSBDYXNzYW5kcmEgU2VydmljZSAqL1xuICAgIHB1YmxpYyBBbWF6b25NQ1NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1DU0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIE1hbmFnZWQgQXBhY2hlIENhc3NhbmRyYSBTZXJ2aWNlICovXG4gICAgcHVibGljIEFtYXpvbk1DU1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1DU1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIEFQSXMgaW4gQW1hem9uIE1lY2hhbmljYWwgVHVyay4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWVjaGFuaWNhbFR1cmtGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1lY2hhbmljYWxUdXJrRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byByZWFkIG9ubHkgQVBJcyBpbiBBbWF6b24gTWVjaGFuaWNhbCBUdXJrLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NZWNoYW5pY2FsVHVya1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1lY2hhbmljYWxUdXJrUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTWVtb3J5REIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NZW1vcnlEQkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWVtb3J5REJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gTWVtb3J5REIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NZW1vcnlEQlJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1lbW9yeURCUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIGFsbCByZXBvcnRzIGluY2x1ZGluZyBmaW5hbmNpYWwgZGF0YSBmb3IgYWxsIGFwcGxpY2F0aW9uIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTW9iaWxlQW5hbHl0aWNzRmluYW5jaWFsUmVwb3J0QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1vYmlsZUFuYWx5dGljc0ZpbmFuY2lhbFJlcG9ydEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBhcHBsaWNhdGlvbiByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbk1vYmlsZUFuYWx5dGljc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTW9iaWxlQW5hbHl0aWNzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gbm9uIGZpbmFuY2lhbCByZXBvcnRzIGZvciBhbGwgYXBwbGljYXRpb24gcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Nb2JpbGVBbmFseXRpY3NOb25GaW5hbmNpYWxSZXBvcnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTW9iaWxlQW5hbHl0aWNzTm9uRmluYW5jaWFsUmVwb3J0QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgd3JpdGUgb25seSBhY2Nlc3MgdG8gcHV0IGV2ZW50IGRhdGEgZm9yIGFsbCBhcHBsaWNhdGlvbiByZXNvdXJjZXMuIChSZWNvbW1lbmRlZCBmb3IgU0RLIGludGVncmF0aW9uKSAqL1xuICAgIHB1YmxpYyBBbWF6b25Nb2JpbGVBbmFseXRpY3NXcml0ZU9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTW9iaWxlQW5hbHl0aWNzV3JpdGVPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gbWFuYWdlIEFtYXpvbiBNb25pdHJvbiAqL1xuICAgIHB1YmxpYyBBbWF6b25Nb25pdHJvbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTW9uaXRyb25GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uTVEgdmlhIG91ciBBUEkvU0RLLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NUUFwaUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVFBcGlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b25NUSB2aWEgb3VyIEFQSS9TREsuICovXG4gICAgcHVibGljIEFtYXpvbk1RQXBpUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVFBcGlSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbk1RIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uTVFGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1RRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uTVEgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NUVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1RUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIExpbmtlZCBSb2xlIFBvbGljeSBmb3IgQVdTIEFtYXpvbiBNUSAqL1xuICAgIHB1YmxpYyBBbWF6b25NUVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1RU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHJlYWRvbmx5IGFjY2VzcyB0byBBbWF6b24gTVNLIENvbm5lY3QgKi9cbiAgICBwdWJsaWMgQW1hem9uTVNLQ29ubmVjdFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1TS0Nvbm5lY3RSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIE1TSyBhbmQgb3RoZXIgcmVxdWlyZWQgcGVybWlzc2lvbnMgZm9yIGl0cyBkZXBlbmRlbmNpZXMuICovXG4gICAgcHVibGljIEFtYXpvbk1TS0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVNLRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgcmVhZG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBNU0sgKi9cbiAgICBwdWJsaWMgQW1hem9uTVNLUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVNLUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQW1hem9uIEFpcmZsb3cgU2VydmVybGVzcyBTZXJ2aWNlIHRvIG1hbmFnZSBuZXR3b3JraW5nIGZvciB5b3VyIHdvcmtmbG93cyBhbmQgYWNjZXNzIG90aGVyIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBbWF6b25NV0FBU2VydmVybGVzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1XQUFTZXJ2ZXJsZXNzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgU2VydmljZSBMaW5rZWQgUm9sZSB1c2VkIGJ5IEFtYXpvbiBNYW5hZ2VkIFdvcmtmbG93cyBmb3IgQXBhY2hlIEFpcmZsb3cuICovXG4gICAgcHVibGljIEFtYXpvbk1XQUFTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NV0FBU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgYWNjZXNzIHRvIHJlc291cmNlcyBuZWVkZWQgYnkgTmltYmxlIFN0dWRpbyBMYXVuY2ggUHJvZmlsZSB3b3JrZXJzLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8gRUMyIGluc3RhbmNlcyBjcmVhdGVkIGJ5IE5pbWJsZSBTdHVkaW8gQnVpbGRlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uTmltYmxlU3R1ZGlvTGF1bmNoUHJvZmlsZVdvcmtlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25OaW1ibGVTdHVkaW9MYXVuY2hQcm9maWxlV29ya2VyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGFjY2VzcyB0byBBbWF6b24gTmltYmxlIFN0dWRpbyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdHVkaW8gYWRtaW4gYW5kIHJlbGF0ZWQgc3R1ZGlvIHJlc291cmNlcyBpbiBvdGhlciBzZXJ2aWNlcy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHRoZSBBZG1pbiByb2xlIGFzc29jaWF0ZWQgd2l0aCB5b3VyIHN0dWRpby4gKi9cbiAgICBwdWJsaWMgQW1hem9uTmltYmxlU3R1ZGlvU3R1ZGlvQWRtaW4oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTmltYmxlU3R1ZGlvU3R1ZGlvQWRtaW4pO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgYWNjZXNzIHRvIEFtYXpvbiBOaW1ibGUgU3R1ZGlvIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHN0dWRpbyB1c2VyIGFuZCByZWxhdGVkIHN0dWRpbyByZXNvdXJjZXMgaW4gb3RoZXIgc2VydmljZXMuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB0aGUgVXNlciByb2xlIGFzc29jaWF0ZWQgd2l0aCB5b3VyIHN0dWRpby4gKi9cbiAgICBwdWJsaWMgQW1hem9uTmltYmxlU3R1ZGlvU3R1ZGlvVXNlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25OaW1ibGVTdHVkaW9TdHVkaW9Vc2VyKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIG1hbmFnZSBBdXRvbm9tb3VzIFZNIGNsdXN0ZXIgcmVzb3VyY2VzIGluIE9yYWNsZSBEYXRhYmFzZUBBV1MgKi9cbiAgICBwdWJsaWMgQW1hem9uT0RCQXV0b25vbW91c1ZtQ2x1c3RlckFkbWluKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9EQkF1dG9ub21vdXNWbUNsdXN0ZXJBZG1pbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBtYW5hZ2UgRXhhZGF0YSBJbmZyYXN0cnVjdHVyZSByZXNvdXJjZXMgaW4gT3JhY2xlIERhdGFiYXNlQEFXUyAqL1xuICAgIHB1YmxpYyBBbWF6b25PREJFeGFkYXRhSW5mcmFzdHJ1Y3R1cmVBZG1pbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PREJFeGFkYXRhSW5mcmFzdHJ1Y3R1cmVBZG1pbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHJlc291cmNlcyBpbiBPcmFjbGUgRGF0YWJhc2VAQVdTICovXG4gICAgcHVibGljIEFtYXpvbk9EQkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT0RCRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBuZXR3b3JraW5nIHJlc291cmNlcyBmb3IgT3JhY2xlIERhdGFiYXNlQEFXUyAqL1xuICAgIHB1YmxpYyBBbWF6b25PREJOZXR3b3JrQWRtaW4oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT0RCTmV0d29ya0FkbWluKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBPcmFjbGUgRGF0YWJhc2VAQVdTIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25PREJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PREJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBPcmFjbGUgRGF0YWJhc2VAQVdTIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PREJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PREJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBPbWljcyBhbmQgb3RoZXIgcmVxdWlyZWQgQVdTIFNlcnZpY2VzLiBUaGlzIHBvbGljeSBhbGxvd3MgdGhlIHVzZXIgdG8gdmlldyBhbmQgYWNjZXB0IFJBTSBzaGFyZSBpbnZpdGF0aW9ucyB0byBhY2Nlc3MgcmVzb3VyY2VzIG91dHNpZGUgb2YgdGhlIHVzZXIncyBBV1MgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uT21pY3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9taWNzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gT21pY3MgKi9cbiAgICBwdWJsaWMgQW1hem9uT21pY3NSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PbWljc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zIHRoYXQgYWxsb3cgYWNjZXNzIHRvIGFsbCBBbWF6b24gT25lIEVudGVycHJpc2UgcmVzb3VyY2VzIGFuZCBvcGVyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PbmVFbnRlcnByaXNlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PbmVFbnRlcnByaXNlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBsaW1pdGVkIHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zIHRoYXQgYWxsb3cgZGV2aWNlIGluc3RhbGxhdGlvbiBhbmQgYWN0aXZhdGlvbi4gKi9cbiAgICBwdWJsaWMgQW1hem9uT25lRW50ZXJwcmlzZUluc3RhbGxlckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PbmVFbnRlcnByaXNlSW5zdGFsbGVyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHJlYWQgb25seSBwZXJtaXNzaW9ucyB0byBhbGwgQW1hem9uIE9uZSBFbnRlcnByaXNlIHJlc291cmNlcyBhbmQgb3BlcmF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uT25lRW50ZXJwcmlzZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9uZUVudGVycHJpc2VSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gT3BlblNlYXJjaCBEYXNoYm9hcmRzIFNlcnZpY2UgdG8gYWNjZXNzIG90aGVyIEFXUyBzZXJ2aWNlcyBzdWNoIGFzIENsb3VkV2F0Y2ggb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQW1hem9uT3BlblNlYXJjaERhc2hib2FyZHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PcGVuU2VhcmNoRGFzaGJvYXJkc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIE9wZW5TZWFyY2ggRGlyZWN0UXVlcnkgU2VydmljZSB0byBhY2Nlc3MgQVdTIEdsdWUgQVBJcyBmb3IgY3JlYXRpbmcgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PcGVuU2VhcmNoRGlyZWN0UXVlcnlHbHVlQ3JlYXRlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9wZW5TZWFyY2hEaXJlY3RRdWVyeUdsdWVDcmVhdGVBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIE9wZW5TZWFyY2ggSW5nZXN0aW9uIHRvIGFjY2VzcyBvdGhlciBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbk9wZW5TZWFyY2hJbmdlc3Rpb25GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9wZW5TZWFyY2hJbmdlc3Rpb25GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byB0aGUgQW1hem9uIE9wZW5TZWFyY2ggSW5nZXN0aW9uIFNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQW1hem9uT3BlblNlYXJjaEluZ2VzdGlvblJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9wZW5TZWFyY2hJbmdlc3Rpb25SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gT3BlblNlYXJjaCBJbmdlc3Rpb24gU2VydmljZSB0byBhY2Nlc3Mgb3RoZXIgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PcGVuU2VhcmNoSW5nZXN0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT3BlblNlYXJjaEluZ2VzdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgQW1hem9uIE9wZW5TZWFyY2ggU2VydmVybGVzcyB0byBhY2Nlc3Mgb3RoZXIgQVdTIHNlcnZpY2VzIHN1Y2ggYXMgQ2xvdWRXYXRjaCBBUElzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PcGVuU2VhcmNoU2VydmVybGVzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9wZW5TZWFyY2hTZXJ2ZXJsZXNzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBDb2duaXRvIGNvbmZpZ3VyYXRpb24gc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uT3BlblNlYXJjaFNlcnZpY2VDb2duaXRvQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9wZW5TZWFyY2hTZXJ2aWNlQ29nbml0b0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBbWF6b24gT3BlblNlYXJjaCBTZXJ2aWNlIGNvbmZpZ3VyYXRpb24gc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uT3BlblNlYXJjaFNlcnZpY2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9wZW5TZWFyY2hTZXJ2aWNlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBPcGVuU2VhcmNoIFNlcnZpY2UgY29uZmlndXJhdGlvbiBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PcGVuU2VhcmNoU2VydmljZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9wZW5TZWFyY2hTZXJ2aWNlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBBbWF6b24gT3BlblNlYXJjaCBTZXJ2aWNlIHRvIGFjY2VzcyBvdGhlciBBV1Mgc2VydmljZXMgc3VjaCBhcyBFQzIgTmV0d29ya2luZyBBUElzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PcGVuU2VhcmNoU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT3BlblNlYXJjaFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFBlcnNvbmFsaXplIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgU0RLLiBBbHNvIHByb3ZpZGVzIHNlbGVjdCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyAoZS5nLiwgUzMsIENsb3VkV2F0Y2gpLiAqL1xuICAgIHB1YmxpYyBBbWF6b25QZXJzb25hbGl6ZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUGVyc29uYWxpemVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBQb2xseSBzZXJ2aWNlIGFuZCByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvblBvbGx5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Qb2xseUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gUG9sbHkgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Qb2xseVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblBvbGx5UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgdG8gQVdTIE1hbmFnZWQgUHJvbWV0aGV1cyByZXNvdXJjZXMgaW4gdGhlIEFXUyBjb25zb2xlICovXG4gICAgcHVibGljIEFtYXpvblByb21ldGhldXNDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Qcm9tZXRoZXVzQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgdG8gQVdTIE1hbmFnZWQgUHJvbWV0aGV1cyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uUHJvbWV0aGV1c0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUHJvbWV0aGV1c0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgYWNjZXNzIHRvIHJ1biBxdWVyaWVzIGFnYWluc3QgQVdTIE1hbmFnZWQgUHJvbWV0aGV1cyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uUHJvbWV0aGV1c1F1ZXJ5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblByb21ldGhldXNRdWVyeUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB3cml0ZSBvbmx5IGFjY2VzcyB0byBBV1MgTWFuYWdlZCBQcm9tZXRoZXVzIHdvcmtzcGFjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uUHJvbWV0aGV1c1JlbW90ZVdyaXRlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblByb21ldGhldXNSZW1vdGVXcml0ZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIG1hbmFnZWQgb3IgdXNlZCBieSBBbWF6b24gTWFuYWdlZCBTZXJ2aWNlIGZvciBQcm9tZXRoZXVzIENvbGxlY3RvciAqL1xuICAgIHB1YmxpYyBBbWF6b25Qcm9tZXRoZXVzU2NyYXBlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblByb21ldGhldXNTY3JhcGVyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBkZXZlbG9wZXIgYWNjZXNzIHRvIGVuYWJsZSBpbnRlcmFjdGlvbnMgd2l0aCBBbWF6b24gUSAqL1xuICAgIHB1YmxpYyBBbWF6b25RRGV2ZWxvcGVyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblFEZXZlbG9wZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBlbmFibGUgaW50ZXJhY3Rpb25zIHdpdGggQW1hem9uIFEgKi9cbiAgICBwdWJsaWMgQW1hem9uUUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gUUxEQiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblFMREJDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25RTERCQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gUUxEQiB2aWEgdGhlIHNlcnZpY2UgQVBJLiAqL1xuICAgIHB1YmxpYyBBbWF6b25RTERCRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25RTERCRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFFMREIuICovXG4gICAgcHVibGljIEFtYXpvblFMREJSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25RTERCUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIFJEUyB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTQmV0YVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU0JldGFTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gUkRTIEN1c3RvbSB0byBwZXJmb3JtIHZhcmlvdXMgYXV0b21hdGlvbiBhY3Rpb25zIGFuZCBkYXRhYmFzZSBtYW5hZ2VtZW50IHRhc2tzIHRocm91Z2ggYW4gRUMyIGluc3RhbmNlIHByb2ZpbGUuICovXG4gICAgcHVibGljIEFtYXpvblJEU0N1c3RvbUluc3RhbmNlUHJvZmlsZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTQ3VzdG9tSW5zdGFuY2VQcm9maWxlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBSRFMgQ3VzdG9tIFByZXZpZXcgU2VydmljZSBSb2xlIFBvbGljeSAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNDdXN0b21QcmV2aWV3U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTQ3VzdG9tUHJldmlld1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBSRFMgQ3VzdG9tIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNDdXN0b21TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNDdXN0b21TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBmdWxsIGFjY2VzcyB0byB1c2UgdGhlIFJEUyBkYXRhIEFQSXMsIHNlY3JldCBzdG9yZSBBUElzIGZvciBSRFMgZGF0YWJhc2UgY3JlZGVudGlhbHMsIGFuZCBEQiBjb25zb2xlIHF1ZXJ5IG1hbmFnZW1lbnQgQVBJcyB0byBleGVjdXRlIFNRTCBzdGF0ZW1lbnRzIG9uIEF1cm9yYSBTZXJ2ZXJsZXNzIGNsdXN0ZXJzIGluIHRoZSBBV1MgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTRGF0YUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTRGF0YUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBSRFMgdG8gYWNjZXNzIERpcmVjdG9yeSBTZXJ2aWNlIE1hbmFnZWQgQUQgb24gYmVoYWxmIG9mIHRoZSBjdXN0b21lciBmb3IgZG9tYWluLWpvaW5lZCBTUUwgU2VydmVyIERCIGluc3RhbmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTRGlyZWN0b3J5U2VydmljZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNEaXJlY3RvcnlTZXJ2aWNlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIENsb3Vkd2F0Y2ggZm9yIFJEUyBFbmhhbmNlZCBNb25pdG9yaW5nICovXG4gICAgcHVibGljIEFtYXpvblJEU0VuaGFuY2VkTW9uaXRvcmluZ1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTRW5oYW5jZWRNb25pdG9yaW5nUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBSRFMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBSRFMgUGVyZm9ybWFuY2UgSW5zaWdodHMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlICovXG4gICAgcHVibGljIEFtYXpvblJEU1BlcmZvcm1hbmNlSW5zaWdodHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU1BlcmZvcm1hbmNlSW5zaWdodHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUmVhZC1Pbmx5IHBvbGljeSBmb3IgUkRTIFBlcmZvcm1hbmNlIEluc2lnaHRzICovXG4gICAgcHVibGljIEFtYXpvblJEU1BlcmZvcm1hbmNlSW5zaWdodHNSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNQZXJmb3JtYW5jZUluc2lnaHRzUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gUkRTIFByZXZpZXcgU2VydmljZSBSb2xlIFBvbGljeSAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNQcmV2aWV3U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTUHJldmlld1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gUkRTIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIFJEUyB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBydW4gU1FMIGNvbW1hbmRzIHRvIGNvcHksIGxvYWQsIHVubG9hZCwgcXVlcnksIGFuZCBhbmFseXplIGRhdGEgb24gQW1hem9uIFJlZHNoaWZ0LiBUaGUgcG9saWN5IGFsc28gZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHJ1biBzZWxlY3Qgc3RhdGVtZW50cyBmb3IgcmVsYXRlZCBzZXJ2aWNlcywgc3VjaCBhcyBBbWF6b24gUzMsIEFtYXpvbiBDbG91ZFdhdGNoIGxvZ3MsIEFtYXpvbiBTYWdlTWFrZXIsIG9yIEFXUyBHbHVlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWRzaGlmdEFsbENvbW1hbmRzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWRzaGlmdEFsbENvbW1hbmRzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBSZWRzaGlmdCBEYXRhIEFQSXMuIFRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIHNjb3BlZCBhY2Nlc3MgdG8gb3RoZXIgcmVxdWlyZWQgc2VydmljZXMuICovXG4gICAgcHVibGljIEFtYXpvblJlZHNoaWZ0RGF0YUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVkc2hpZnREYXRhRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgaXMgYW4gZWFzZS1vZi11c2UgcG9saWN5IGZvciBydW5uaW5nIHF1ZXJpZXMgd2l0aCBBbWF6b24gUmVkc2hpZnQgRmVkZXJhdGVkIEF1dGhvcml6YXRpb24gKi9cbiAgICBwdWJsaWMgQW1hem9uUmVkc2hpZnRGZWRlcmF0ZWRBdXRob3JpemF0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJlZHNoaWZ0RmVkZXJhdGVkQXV0aG9yaXphdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBSZWRzaGlmdCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblJlZHNoaWZ0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWRzaGlmdEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB0aGUgQW1hem9uIFJlZHNoaWZ0IFF1ZXJ5IEVkaXRvciBhbmQgdG8gc2F2ZWQgcXVlcmllcyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblJlZHNoaWZ0UXVlcnlFZGl0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVkc2hpZnRRdWVyeUVkaXRvcik7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byB0aGUgQW1hem9uIFJlZHNoaWZ0IFF1ZXJ5IEVkaXRvciBWMiBvcGVyYXRpb25zIGFuZCByZXNvdXJjZXMuIFRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIGFjY2VzcyB0byBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcy4gVGhpcyBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBsaXN0IHRoZSBBbWF6b24gUmVkc2hpZnQgY2x1c3RlcnMsIHJlYWQga2V5cyBhbmQgYWxpYXNlcyBpbiBBV1MgS01TIGFuZCBtYW5hZ2UgdGhlIFF1ZXJ5IEVkaXRvciBWMiBzZWNyZXRzIGluIEFXUyBTZWNyZXRzIE1hbmFnZXIuICovXG4gICAgcHVibGljIEFtYXpvblJlZHNoaWZ0UXVlcnlFZGl0b3JWMkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVkc2hpZnRRdWVyeUVkaXRvclYyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB0aGUgYWJpbGl0eSB0byB3b3JrIHdpdGggQW1hem9uIFJlZHNoaWZ0IFF1ZXJ5IEVkaXRvciBWMiB3aXRob3V0IHNoYXJpbmcgcmVzb3VyY2VzLiBUaGUgZ3JhbnRlZCBwcmluY2lwYWwgY2FuIG9ubHkgcmVhZCwgdXBkYXRlIGFuZCBkZWxldGUgaXRzIG93biByZXNvdXJjZXMgYnV0IGNhbm5vdCBzaGFyZSB0aGVtLiBUaGlzIHBvbGljeSBhbHNvIGdyYW50cyBhY2Nlc3MgdG8gb3RoZXIgcmVxdWlyZWQgc2VydmljZXMuIFRoaXMgaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gbGlzdCB0aGUgQW1hem9uIFJlZHNoaWZ0IGNsdXN0ZXJzIGFuZCBtYW5hZ2UgdGhlIFF1ZXJ5IEVkaXRvciBWMiBzZWNyZXRzIG9mIHRoZSBwcmluY2lwYWwgaW4gQVdTIFNlY3JldHMgTWFuYWdlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uUmVkc2hpZnRRdWVyeUVkaXRvclYyTm9TaGFyaW5nKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJlZHNoaWZ0UXVlcnlFZGl0b3JWMk5vU2hhcmluZyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB0aGUgYWJpbGl0eSB0byB3b3JrIHdpdGggQW1hem9uIFJlZHNoaWZ0IFF1ZXJ5IEVkaXRvciBWMiB3aXRoIGxpbWl0ZWQgc2hhcmluZyBvZiByZXNvdXJjZXMuIFRoZSBncmFudGVkIHByaW5jaXBhbCBjYW4gcmVhZCwgd3JpdGUgYW5kIHNoYXJlIGl0cyBvd24gcmVzb3VyY2VzLiBUaGUgZ3JhbnRlZCBwcmluY2lwYWwgY2FuIHJlYWQgdGhlIHJlc291cmNlcyBzaGFyZWQgd2l0aCBpdHMgdGVhbSBidXQgY2Fubm90IHVwZGF0ZSB0aGVtLiBUaGlzIHBvbGljeSBhbHNvIGdyYW50cyBhY2Nlc3MgdG8gb3RoZXIgcmVxdWlyZWQgc2VydmljZXMuIFRoaXMgaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gbGlzdCB0aGUgQW1hem9uIFJlZHNoaWZ0IGNsdXN0ZXJzIGFuZCBtYW5hZ2UgdGhlIFF1ZXJ5IEVkaXRvciBWMiBzZWNyZXRzIG9mIHRoZSBwcmluY2lwYWwgaW4gQVdTIFNlY3JldHMgTWFuYWdlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uUmVkc2hpZnRRdWVyeUVkaXRvclYyUmVhZFNoYXJpbmcoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVkc2hpZnRRdWVyeUVkaXRvclYyUmVhZFNoYXJpbmcpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdGhlIGFiaWxpdHkgdG8gd29yayB3aXRoIEFtYXpvbiBSZWRzaGlmdCBRdWVyeSBFZGl0b3IgVjIgd2l0aCBzaGFyaW5nIG9mIHJlc291cmNlcy4gVGhlIGdyYW50ZWQgcHJpbmNpcGFsIGNhbiByZWFkLCB3cml0ZSBhbmQgc2hhcmUgaXRzIG93biByZXNvdXJjZXMuIFRoZSBncmFudGVkIHByaW5jaXBhbCBjYW4gcmVhZCBhbmQgdXBkYXRlIHRoZSByZXNvdXJjZXMgc2hhcmVkIHdpdGggaXRzIHRlYW0uIFRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIGFjY2VzcyB0byBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcy4gVGhpcyBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBsaXN0IHRoZSBBbWF6b24gUmVkc2hpZnQgY2x1c3RlcnMgYW5kIG1hbmFnZSB0aGUgUXVlcnkgRWRpdG9yIFYyIHNlY3JldHMgb2YgdGhlIHByaW5jaXBhbCBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWRzaGlmdFF1ZXJ5RWRpdG9yVjJSZWFkV3JpdGVTaGFyaW5nKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJlZHNoaWZ0UXVlcnlFZGl0b3JWMlJlYWRXcml0ZVNoYXJpbmcpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBSZWRzaGlmdCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblJlZHNoaWZ0UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVkc2hpZnRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gUmVkc2hpZnQgdG8gY2FsbCBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQW1hem9uUmVkc2hpZnRTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWRzaGlmdFNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgc3BlY2lmaWVzIHJla29nbml0aW9uIGFuZCBzMyBwZXJtaXNzaW9ucyByZXF1aXJlZCBieSBBbWF6b24gUmVrb2duaXRpb24gQ3VzdG9tIExhYmVscyBmZWF0dXJlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWtvZ25pdGlvbkN1c3RvbUxhYmVsc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVrb2duaXRpb25DdXN0b21MYWJlbHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNzIHRvIGFsbCBBbWF6b24gUmVrb2duaXRpb24gQVBJcyAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWtvZ25pdGlvbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVrb2duaXRpb25GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNzIHRvIGFsbCBSZWFkIHJla29nbml0aW9uIEFQSXMgKi9cbiAgICBwdWJsaWMgQW1hem9uUmVrb2duaXRpb25SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWtvZ25pdGlvblJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFJla29nbml0aW9uIHRvIGNhbGwgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWtvZ25pdGlvblNlcnZpY2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJla29nbml0aW9uU2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgUm91dGUgNTMgQXV0byBOYW1pbmcgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M0F1dG9OYW1pbmdGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNBdXRvTmFtaW5nRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gYWxsIFJvdXRlIDUzIEF1dG8gTmFtaW5nIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNBdXRvTmFtaW5nUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M0F1dG9OYW1pbmdSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlZ2lzdHJhbnQgbGV2ZWwgYWNjZXNzIHRvIFJvdXRlIDUzIEF1dG8gTmFtaW5nIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNBdXRvTmFtaW5nUmVnaXN0cmFudEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzQXV0b05hbWluZ1JlZ2lzdHJhbnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgUm91dGU1MyBEb21haW5zIGFjdGlvbnMgYW5kIENyZWF0ZSBIb3N0ZWQgWm9uZSB0byBhbGxvdyBIb3N0ZWQgWm9uZSBjcmVhdGlvbiBhcyBwYXJ0IG9mIGRvbWFpbiByZWdpc3RyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzRG9tYWluc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M0RvbWFpbnNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIFJvdXRlNTMgRG9tYWlucyBsaXN0IGFuZCBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzRG9tYWluc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNEb21haW5zUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgQW1hem9uIFJvdXRlIDUzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byByZXRyaWV2ZSwgbGlzdCwgY3JlYXRlLCB1cGRhdGUsIGFuZCBkZWxldGUgYWxsIEFtYXpvbiBSb3V0ZSA1MyBHbG9iYWwgUmVzb2x2ZXIgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzR2xvYmFsUmVzb2x2ZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNHbG9iYWxSZXNvbHZlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHJldHJpZXZlIGFuZCBsaXN0IGFsbCBBbWF6b24gUm91dGUgNTMgR2xvYmFsIFJlc29sdmVyIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M0dsb2JhbFJlc29sdmVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M0dsb2JhbFJlc29sdmVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJvdXRlIDUzIFByb2ZpbGUgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzUHJvZmlsZXNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNQcm9maWxlc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gUm91dGUgNTMgUHJvZmlsZSByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNQcm9maWxlc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNQcm9maWxlc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBhbGwgQW1hem9uIFJvdXRlIDUzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBSb3V0ZSA1MyBSZWNvdmVyeSBDbHVzdGVyICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNSZWNvdmVyeUNsdXN0ZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNSZWNvdmVyeUNsdXN0ZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gUm91dGUgNTMgUmVjb3ZlcnkgQ2x1c3RlciAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzUmVjb3ZlcnlDbHVzdGVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M1JlY292ZXJ5Q2x1c3RlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJvdXRlIDUzIFJlY292ZXJ5IENvbnRyb2wgQ29uZmlnICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNSZWNvdmVyeUNvbnRyb2xDb25maWdGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNSZWNvdmVyeUNvbnRyb2xDb25maWdGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gUm91dGUgNTMgUmVjb3ZlcnkgQ29udHJvbCBDb25maWcgKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M1JlY292ZXJ5Q29udHJvbENvbmZpZ1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNSZWNvdmVyeUNvbnRyb2xDb25maWdSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBSb3V0ZSA1MyBSZWNvdmVyeSBSZWFkaW5lc3MgKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M1JlY292ZXJ5UmVhZGluZXNzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzUmVjb3ZlcnlSZWFkaW5lc3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gUm91dGUgNTMgUmVjb3ZlcnkgUmVhZGluZXNzICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNSZWNvdmVyeVJlYWRpbmVzc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNSZWNvdmVyeVJlYWRpbmVzc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRnVsbCBhY2Nlc3MgcG9saWN5IGZvciBSb3V0ZSA1MyBSZXNvbHZlciAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzUmVzb2x2ZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNSZXNvbHZlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBSZWFkIG9ubHkgcG9saWN5IGZvciBSb3V0ZSA1MyBSZXNvbHZlciAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzUmVzb2x2ZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzUmVzb2x2ZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBTMyBkaXJlY3RvcnkgYnVja2V0cy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNFeHByZXNzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM0V4cHJlc3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBTM0V4cHJlc3Mgb3BlcmF0aW9ucyBmb3IgUzMgZGlyZWN0b3J5IGJ1Y2tldHMuICovXG4gICAgcHVibGljIEFtYXpvblMzRXhwcmVzc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzRXhwcmVzc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcm9vdCBjbGllbnQgYWNjZXNzIHRvIGFuIFMzIEZpbGVzIGZpbGUgc3lzdGVtLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM0ZpbGVzQ2xpZW50RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM0ZpbGVzQ2xpZW50RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBjbGllbnQgYWNjZXNzIHRvIGFuIFMzIEZpbGVzIGZpbGUgc3lzdGVtLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM0ZpbGVzQ2xpZW50UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNGaWxlc0NsaWVudFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBhbmQgd3JpdGUgY2xpZW50IGFjY2VzcyB0byBhbiBTMyBGaWxlcyBmaWxlIHN5c3RlbS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNGaWxlc0NsaWVudFJlYWRXcml0ZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM0ZpbGVzQ2xpZW50UmVhZFdyaXRlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbWFuYWdlbWVudCBhY2Nlc3MgdG8gQW1hem9uIFMzIEZpbGVzIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25TM0ZpbGVzQ1NJRHJpdmVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzRmlsZXNDU0lEcml2ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgUzMgRmlsZXMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM0ZpbGVzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM0ZpbGVzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIFMzIEZpbGVzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNGaWxlc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzRmlsZXNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBidWNrZXRzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBMYW1iZGEgZnVuY3Rpb25zIHBlcm1pc3Npb25zIHRvIGludGVyYWN0IHdpdGggQW1hem9uIFMzIE9iamVjdCBMYW1iZGEuIEFsc28gZ3JhbnRzIExhbWJkYSBwZXJtaXNzaW9ucyB0byB3cml0ZSB0byBDbG91ZFdhdGNoIExvZ3MuICovXG4gICAgcHVibGljIEFtYXpvblMzT2JqZWN0TGFtYmRhRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM09iamVjdExhbWJkYUV4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gUzMgb24gT3V0cG9zdHMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM091dHBvc3RzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM091dHBvc3RzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFMzIG9uIE91dHBvc3RzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNPdXRwb3N0c1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzT3V0cG9zdHNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIGJ1Y2tldHMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgUzMgdGFibGUgYnVja2V0cy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNUYWJsZXNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzVGFibGVzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgbWFuYWdlZCBwb2xpY3kgZ3JhbnRzIEFXUyBMYWtlIEZvcm1hdGlvbiBwZXJtaXNzaW9ucyB0byBhY3Qgb24gYWxsIHRhYmxlIGJ1Y2tldHMsIG5hbWVzcGFjZXMsIGFuZCB0YWJsZXMgd2l0aGluIHRoZSBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM1RhYmxlc0xha2VGb3JtYXRpb25TZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM1RhYmxlc0xha2VGb3JtYXRpb25TZXJ2aWNlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIFMzIHRhYmxlIGJ1Y2tldHMuICovXG4gICAgcHVibGljIEFtYXpvblMzVGFibGVzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNUYWJsZXNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIFNlcnZpY2UgQ2F0YWxvZyBzZXJ2aWNlIHRvIHByb3Zpc2lvbiBwcm9kdWN0cyBmcm9tIEFtYXpvbiBTYWdlTWFrZXIgcG9ydGZvbGlvIG9mIHByb2R1Y3RzLiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYSBzZXQgb2YgcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgQ29kZVBpcGVsaW5lLCBDb2RlQnVpbGQsIENvZGVDb21taXQsIEdsdWUsIENsb3VkRm9ybWF0aW9uLCBldGMsLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJBZG1pblNlcnZpY2VDYXRhbG9nUHJvZHVjdHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJBZG1pblNlcnZpY2VDYXRhbG9nUHJvZHVjdHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBBbWF6b24gU2FnZU1ha2VyIENhbnZhcyB0byB1c2UgQUkgc2VydmljZXMgdG8gc3VwcG9ydCByZWFkeSB0byB1c2UgQUkgc29sdXRpb25zLiBUaGlzIHBvbGljeSB3aWxsIGFkZCBtb3JlIG11dGF0aW5nIHBlcm1pc3Npb25zIGZvciBzZXJ2aWNlcyBhcyBBbWF6b24gU2FnZU1ha2VyIENhbnZhcyBhZGRzIHN1cHBvcnQuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckNhbnZhc0FJU2VydmljZXNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyQ2FudmFzQUlTZXJ2aWNlc0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byB1c2UgQW1hem9uIEJlZHJvY2sgaW4gU2FnZU1ha2VyIENhbnZhcyBieSBwcm92aWRpbmcgYWNjZXNzIHRvIGRvd25zdHJlYW0gc2VydmljZXMgc3VjaCBhcyBTMy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyQ2FudmFzQmVkcm9ja0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJDYW52YXNCZWRyb2NrQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFNhZ2VNYWtlciByZXNvdXJjZXMgYW5kIG9wZXJhdGlvbnMgZm9yIGRhdGEgcHJlcGFyYXRpb24gaW4gQ2FudmFzLiBUaGUgcG9saWN5IGFsc28gcHJvdmlkZXMgc2VsZWN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIChlLmcuLCBTMywgSUFNLCBLTVMsIFJEUywgQ2xvdWRXYXRjaCBMb2dzLCBSZWRzaGlmdCwgQXRoZW5hLCBHbHVlLCBFdmVudEJyaWRnZSwgU2VjcmV0cyBNYW5hZ2VyKS4gVGhpcyBwb2xpY3kgc2hvdWxkIGJlIGF0dGFjaGVkIHRvIHRoZSBBbWF6b24gU2FnZU1ha2VyIERvbWFpbi9Vc2VyIFByb2ZpbGUgZXhlY3V0aW9uIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckNhbnZhc0RhdGFQcmVwRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJDYW52YXNEYXRhUHJlcEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIFNhZ2VNYWtlciBDYW52YXMgdG8gY3JlYXRlLCBtYW5hZ2UgYW5kIHZpZXcgZW5kcG9pbnQgZGV0YWlscyBmb3IgZW5kcG9pbnRzIGNyZWF0ZWQgdGhyb3VnaCBDYW52YXMuIEFsbG93cyBBbWF6b24gU2FnZU1ha2VyIENhbnZhcyB0byByZXRyaWV2ZSBlbmRwb2ludCBpbnZvY2F0aW9uIG1ldHJpY3MgZnJvbSBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJDYW52YXNEaXJlY3REZXBsb3lBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyQ2FudmFzRGlyZWN0RGVwbG95QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIEFtYXpvbiBFTVIgU2VydmVybGVzcyBmb3Igc2VydmljZXMgc3VjaCBhcyBTMywgdXNlZCBieSBBbWF6b24gU2FnZU1ha2VyIENhbnZhcyBmb3IgbGFyZ2UgZGF0YSBwcm9jZXNzaW5nLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJDYW52YXNFTVJTZXJ2ZXJsZXNzRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJDYW52YXNFTVJTZXJ2ZXJsZXNzRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyBjb21tb25seSBuZWVkZWQgdG8gdXNlIFNhZ2VNYWtlciBDYW52YXMgd2l0aCBBbWF6b24gRm9yZWNhc3QuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckNhbnZhc0ZvcmVjYXN0QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckNhbnZhc0ZvcmVjYXN0QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFNhZ2VNYWtlciBDYW52YXMgcmVzb3VyY2VzIGFuZCBvcGVyYXRpb25zLiBUaGUgcG9saWN5IGFsc28gcHJvdmlkZXMgc2VsZWN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIChlLmcuLCBTMywgSUFNLCBWUEMsIEVDUiwgQ2xvdWRXYXRjaCBMb2dzLCBSZWRzaGlmdCwgU2VjcmV0cyBNYW5hZ2VyLCBhbmQgRm9yZWNhc3QpLiBUaGlzIHBvbGljeSBzaG91bGQgYmUgYXR0YWNoZWQgdG8gdGhlIEFtYXpvbiBTYWdlTWFrZXIgRG9tYWluL1VzZXIgUHJvZmlsZSBleGVjdXRpb24gcm9sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyQ2FudmFzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJDYW52YXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIEFtYXpvbiBTYWdlTWFrZXIgQ2FudmFzIHRvIHVzZSB0aGUgU2FnZU1ha2VyIERhdGEgU2NpZW5jZSBBc3Npc3RhbnQgc2VydmljZS4gVGhlIERhdGEgU2NpZW5jZSBBc3Npc3RhbnQgY3VycmVudGx5IHVzZXMgYm90aCBBbWF6b24gU2FnZU1ha2VyIGFuZCBBbWF6b24gUSBEZXZlbG9wZXIgdG8gcHJvY2VzcyB1c2VyIHByb21wdHMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckNhbnZhc1NNRGF0YVNjaWVuY2VBc3Npc3RhbnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyQ2FudmFzU01EYXRhU2NpZW5jZUFzc2lzdGFudEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byBBbWF6b24gU2FnZU1ha2VyIENhcGFjaXR5IFJlc2VydmF0aW9ucyB0byBwdWJsaXNoIENsb3VkV2F0Y2ggbWV0cmljcyBpbnRvIGN1c3RvbWVyIGFjY291bnRzIGZvciB1dGlsaXphdGlvbiB2aXNpYmlsaXR5LiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJDYXBhY2l0eVJlc2VydmF0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyQ2FwYWNpdHlSZXNlcnZhdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIGNvbW1vbmx5IG5lZWRlZCB0byB1c2UgQW1hem9uIFNhZ2VNYWtlciBDbHVzdGVyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJDbHVzdGVySW5zdGFuY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckNsdXN0ZXJJbnN0YW5jZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBNYW5hZ2VkIHBvbGljeSBmb3IgU2VydmljZSBMaW5rZWQgUm9sZSBmb3IgQW1hem9uIFNhZ2VNYWtlciBDb3JlIFNlcnZpY2VzICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckNvcmVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJDb3JlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBuZWNlc3NhcnkgZm9yIFNhZ2VNYWtlciBFZGdlIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIGEgZGV2aWNlIGZsZWV0IGZvciB0aGUgY3VzdG9tZXIgdXNpbmcgdGhlIGRlZmF1bHQgY2xvdWQgY29ubmVjdGlvbi4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyRWRnZURldmljZUZsZWV0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckVkZ2VEZXZpY2VGbGVldFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGUgb2ZmbGluZSBzdG9yZSBmb3IgYW4gQW1hem9uIFNhZ2VNYWtlciBGZWF0dXJlU3RvcmUgZmVhdHVyZSBncm91cC4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyRmVhdHVyZVN0b3JlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckZlYXR1cmVTdG9yZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTYWdlTWFrZXIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuIEFsc28gcHJvdmlkZXMgc2VsZWN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIChlLmcuLCBTMywgRUNSLCBDbG91ZFdhdGNoIExvZ3MpLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlIGFjY2VzcyB0byBzZXJ2aWNlcyB0aGF0IGFyZSBjb21tb25seSBuZWVkZWQgdG8gdXNlIFNhZ2VNYWtlciBnZW9zcGF0aWFsLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJHZW9zcGF0aWFsRXhlY3V0aW9uUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJHZW9zcGF0aWFsRXhlY3V0aW9uUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTYWdlTWFrZXIgR2Vvc3BhdGlhbCB0aHJvdWdoIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckdlb3NwYXRpYWxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckdlb3NwYXRpYWxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBzZXJ2aWNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBydW4gU2FnZU1ha2VyIEdyb3VuZFRydXRoIExhYmVsaW5nIGpvYiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJHcm91bmRUcnV0aEV4ZWN1dGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJHcm91bmRUcnV0aEV4ZWN1dGlvbik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgQW1hem9uIE1hbmFnZWQgUG9saWN5IHByb3ZpZGVzIHRoZSBuZWNlc3NhcnkgcGVybWlzc2lvbnMgZm9yIFNhZ2VNYWtlciBIeXBlclBvZCB0byBhY2Nlc3MgZ2F0ZWQgbW9kZWxzIGluIFNhZ2VNYWtlciBKdW1wc3RhcnQuIEl0IGFsbG93cyBjcmVhdGluZyBwcmVzaWduZWQgVVJMcyBmb3IgaHViIGNvbnRlbnQgaW4gdGhlIFNhZ2VNYWtlciBQdWJsaWMgSHViLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJIeXBlclBvZEdhdGVkTW9kZWxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VySHlwZXJQb2RHYXRlZE1vZGVsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgcHJpdmlsZWdlcyByZXF1aXJlZCBmb3Igc2V0dGluZyB1cCB0aGUgU2FnZU1ha2VyIEh5cGVyUG9kIGluZmVyZW5jZSBvcGVyYXRvci4gSXQgZW5hYmxlcyB0aGUgaW5mZXJlbmNlIG9wZXJhdG9yIHRvIGFjY2VzcyBBV1MgbmV0d29ya2luZyByZXNvdXJjZXMsIEFtYXpvbiBTMywgQW1hem9uIEVDUiwgQW1hem9uIENsb3VkV2F0Y2gsIEFXUyBDZXJ0aWZpY2F0ZSBNYW5hZ2VyLCBhbmQgU2FnZU1ha2VyIHJlc291cmNlcyBuZWNlc3NhcnkgdG8gZGVwbG95IGFuZCBtYW5hZ2UgaW5mZXJlbmNlIHdvcmtsb2FkcyBvbiBIeXBlclBvZCBjbHVzdGVycyAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJIeXBlclBvZEluZmVyZW5jZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJIeXBlclBvZEluZmVyZW5jZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIHByaXZpbGVnZXMgcmVxdWlyZWQgZm9yIHNldHRpbmcgdXAgU2FnZU1ha2VyIEh5cGVyUG9kIG9ic2VydmFiaWxpdHkuIEl0IGVuYWJsZXMgYWNjZXNzIHRvIEFtYXpvbiBNYW5hZ2VkIFByb21ldGhldXMsIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgYW5kIEVLUyBBZGRvbnMuIFRoZSBwb2xpY3kgYWxzbyBpbmNsdWRlcyBicm9hZCBhY2Nlc3MgdG8gR3JhZmFuYSBIVFRQIEFQSXMgdGhyb3VnaCBTZXJ2aWNlQWNjb3VudFRva2VucyBhY3Jvc3MgYWxsIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgd29ya3NwYWNlcyBpbiB5b3VyIGFjY291bnQuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckh5cGVyUG9kT2JzZXJ2YWJpbGl0eUFkbWluQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckh5cGVyUG9kT2JzZXJ2YWJpbGl0eUFkbWluQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIEFtYXpvbiBTYWdlTWFrZXIgSHlwZXJQb2QgdG8gcmVsYXRlZCBBV1Mgc2VydmljZXMgc3VjaCBhcyBBbWF6b24gRUtTLCBBbWF6b24gQ2xvdWRXYXRjaCBldGMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckh5cGVyUG9kU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VySHlwZXJQb2RTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIHNldCB1cCB0aGUgU2FnZU1ha2VyIEh5cGVyUG9kIHRyYWluaW5nIG9wZXJhdG9yLiBJdCBlbmFibGVzIGFjY2VzcyB0byBBbWF6b24gU2FnZU1ha2VyIEh5cGVyUG9kIGFuZCBFS1MgYWRkLW9ucy4gVGhlIHBvbGljeSBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBkZXNjcmliZSB0aGUgU2FnZU1ha2VyIEh5cGVyUG9kIHJlc291cmNlcyBpbiB5b3VyIGFjY291bnQuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckh5cGVyUG9kVHJhaW5pbmdPcGVyYXRvckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJIeXBlclBvZFRyYWluaW5nT3BlcmF0b3JBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBNYW5hZ2VkIHBvbGljeSBmb3IgU2VydmljZSBMaW5rZWQgUm9sZSBmb3IgQW1hem9uIFNhZ2VNYWtlciBJbmZlcmVuY2UuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckluZmVyZW5jZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckluZmVyZW5jZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIEFtYXpvbiBTYWdlTWFrZXIgam9iIGV4ZWN1dGlvbiByb2xlcyB0byBhY2Nlc3MgZGF0YSBpbiBBbWF6b24gUzMsIGludm9rZSBhZ2VudHMgdGhyb3VnaCBBbWF6b24gQmVkcm9jayBBZ2VudENvcmUsIHRyYWNrIGV4cGVyaW1lbnRzIHdpdGggTUxmbG93LCBwdWJsaXNoIG1vZGVsIHBhY2thZ2VzLCB3cml0ZSBsb2dzIHRvIEFtYXpvbiBDbG91ZFdhdGNoLCBpbnZva2UgQVdTIExhbWJkYSBmdW5jdGlvbnMsIGFuZCBtYW5hZ2UgQW1hem9uIFZQQyBuZXR3b3JrIGludGVyZmFjZXMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckpvYkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VySm9iRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBhZ2VudCBydW50aW1lcyB0byBpbnZva2UgdGhlIEFtYXpvbiBTYWdlTWFrZXIgam9iIHJ1bnRpbWUgQVBJcyB1c2VkIGR1cmluZyBtb2RlbCBjdXN0b21pemF0aW9uIGZvciBzYW1wbGUgZ2VuZXJhdGlvbiwgdHJhamVjdG9yeSBjb21wbGV0aW9uLCBhbmQgcmV3YXJkIHN1Ym1pc3Npb24uICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckpvYlJ1bnRpbWVBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VySm9iUnVudGltZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBjcmVhdGUgQW1hem9uIEF1Z21lbnRlZCBBSSBGbG93RGVmaW5pdGlvbiByZXNvdXJjZXMgYWdhaW5zdCBhbnkgV29ya3RlYW0uICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlck1lY2hhbmljYWxUdXJrQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlck1lY2hhbmljYWxUdXJrQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIGZvciBTYWdlTWFrZXIgbW9kZWwgY3VzdG9taXphdGlvbiB3b3JrZmxvd3MgaW5jbHVkaW5nIHNlcnZlcmxlc3MgdHJhaW5pbmcsIGN1c3RvbSByZXdhcmQgZnVuY3Rpb24gZm9yIHJlaW5mb3JjZW1lbnQgbGVhcm5pbmcsIG1vZGVsIGV2YWx1YXRpb24sIGFuZCBkZXBsb3ltZW50IHRvIFNhZ2VNYWtlciBvciBCZWRyb2NrIGVuZHBvaW50cy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyTW9kZWxDdXN0b21pemF0aW9uQ29yZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJNb2RlbEN1c3RvbWl6YXRpb25Db3JlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBBV1MgbWFuYWdlZCBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIG5lZWRlZCB0byB1c2UgYWxsIEFtYXpvbiBTYWdlTWFrZXIgR292ZXJuYW5jZSBmZWF0dXJlcy4gVGhlIHBvbGljeSBhbHNvIHByb3ZpZGVzIHNlbGVjdCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyAoZS5nLiwgUzMsIEtNUykuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlck1vZGVsR292ZXJuYW5jZVVzZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJNb2RlbEdvdmVybmFuY2VVc2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIGlzIGEgbmV3IG1hbmFnZWQgcG9saWN5IGZvciBNb2RlbCBSZWdpc3RyeSBpbiBTYWdlbWFrZXIuIFRoaXMgcG9saWN5IGlzIGEgc3RhbmRhbG9uZSBwb2xpY3kgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gdGhlIHVzZXIgcm9sZSB0byBhY2Nlc3MgTW9kZWwgUmVnaXN0cnkgcmVsYXRlZCBmdW5jdGlvbmFsaXRpZXMgaW4gU2FnZW1ha2VyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJNb2RlbFJlZ2lzdHJ5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJNb2RlbFJlZ2lzdHJ5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIE1hbmFnZWQgcG9saWN5IGZvciBTZXJ2aWNlIExpbmtlZCBSb2xlIGZvciBBbWF6b24gU2FnZU1ha2VyIE5vdGVib29rcyAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJOb3RlYm9va3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJOb3RlYm9va3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgQW1hem9uIFNhZ2VNYWtlciBwYXJ0bmVyIGFwcCB1c2VycyB0byBhY2Nlc3MgYXBwbGljYXRpb25zLCBsaXN0IGF2YWlsYWJsZSBhcHBsaWNhdGlvbnMsIGxhdW5jaCBhcHBsaWNhdGlvbiB3ZWIgVUlzLCBhbmQgY29ubmVjdCB2aWEgdGhlIGFwcGxpY2F0aW9uIFNESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyUGFydG5lckFwcHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclBhcnRuZXJBcHBzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIEFQSUdhdGV3YXkgd2l0aGluIHRoZSBBV1MgU2VydmljZUNhdGFsb2cgcHJvdmlzaW9uZWQgcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIExhbWJkYSBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJQYXJ0bmVyU2VydmljZUNhdGFsb2dQcm9kdWN0c0FwaUdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJQYXJ0bmVyU2VydmljZUNhdGFsb2dQcm9kdWN0c0FwaUdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIENsb3VkRm9ybWF0aW9uIHdpdGhpbiB0aGUgQVdTIFNlcnZpY2VDYXRhbG9nIHByb3Zpc2lvbmVkIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHN1YnNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBMYW1iZGEsIEFQSUdhdGV3YXkgYW5kIG90aGVycy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyUGFydG5lclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNDbG91ZEZvcm1hdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclBhcnRuZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzQ2xvdWRGb3JtYXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIExhbWJkYSB3aXRoaW4gdGhlIEFXUyBTZXJ2aWNlQ2F0YWxvZyBwcm92aXNpb25lZCBwcm9kdWN0cyBmcm9tIEFtYXpvbiBTYWdlTWFrZXIgcG9ydGZvbGlvIG9mIHByb2R1Y3RzLiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYSBzZXQgb2YgcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgU2VjcmV0cyBNYW5hZ2VyIGFuZCBvdGhlcnMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclBhcnRuZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzTGFtYmRhU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyUGFydG5lclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNMYW1iZGFTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgQW1hem9uIE1hbmFnZWQgUG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyBjb21tb25seSBuZWVkZWQgZm9yIHVzZSB3aXRoIENhbGxiYWNrIHN0ZXBzIGFuZCBMYW1iZGEgc3RlcHMgaW4gU2FnZU1ha2VyIE1vZGVsIEJ1aWxkaW5nIFBpcGVsaW5lcy4gSXQgaXMgYWRkZWQgdG8gdGhlIEFtYXpvblNhZ2VNYWtlci1FeGVjdXRpb25Sb2xlIHRoYXQgY2FuIGJlIGNyZWF0ZWQgd2hlbiBzZXR0aW5nIHVwIFNhZ2VNYWtlciBTdHVkaW8uIEl0IGNhbiBhbHNvIGJlIGF0dGFjaGVkIHRvIGFueSBvdGhlciByb2xlIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBhdXRob3Jpbmcgb3IgZXhlY3V0aW5nIHBpcGVsaW5lcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyUGlwZWxpbmVzSW50ZWdyYXRpb25zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclBpcGVsaW5lc0ludGVncmF0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHdpbGwgYmUgdXNlZCBCeSBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW9zIHRvIGNyZWF0ZSBWUEMgcmVsYXRlZCByZXNvdXJjZXMgZm9yIFF1aWNrU2lnaHQgKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyUXVpY2tTaWdodFZQQ1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJRdWlja1NpZ2h0VlBDUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gU2FnZU1ha2VyIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgU0RLLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIEFQSUdhdGV3YXkgd2l0aGluIHRoZSBBV1MgU2VydmljZUNhdGFsb2cgcHJvdmlzaW9uZWQgcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIENsb3VkV2F0Y2ggTG9ncyBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzQXBpR2F0ZXdheVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNBcGlHYXRld2F5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIHJvbGUgcG9saWN5IHVzZWQgYnkgdGhlIEFXUyBDbG91ZEZvcm1hdGlvbiB3aXRoaW4gdGhlIEFXUyBTZXJ2aWNlQ2F0YWxvZyBwcm92aXNpb25lZCBwcm9kdWN0cyBmcm9tIEFtYXpvbiBTYWdlTWFrZXIgcG9ydGZvbGlvIG9mIHByb2R1Y3RzLiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYSBzdWJzZXQgb2YgcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgU2FnZU1ha2VyIGFuZCBvdGhlcnMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNDbG91ZGZvcm1hdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNDbG91ZGZvcm1hdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgQ29kZUJ1aWxkIHdpdGhpbiB0aGUgQVdTIFNlcnZpY2VDYXRhbG9nIHByb3Zpc2lvbmVkIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHN1YnNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBDb2RlUGlwZWxpbmUsIENvZGVCdWlsZCBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzQ29kZUJ1aWxkU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0NvZGVCdWlsZFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgQ29kZVBpcGVsaW5lIHdpdGhpbiB0aGUgQVdTIFNlcnZpY2VDYXRhbG9nIHByb3Zpc2lvbmVkIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHN1YnNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBDb2RlUGlwZWxpbmUsIENvZGVCdWlsZCBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzQ29kZVBpcGVsaW5lU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0NvZGVQaXBlbGluZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgQ2xvdWRXYXRjaCBFdmVudHMgd2l0aGluIHRoZSBBV1MgU2VydmljZUNhdGFsb2cgcHJvdmlzaW9uZWQgcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc3Vic2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIENvZGVQaXBlbGluZSBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzRXZlbnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0V2ZW50c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgRmlyZWhvc2Ugd2l0aGluIHRoZSBBV1MgU2VydmljZUNhdGFsb2cgcHJvdmlzaW9uZWQgcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIEZpcmVob3NlIGFuZCBvdGhlcnMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNGaXJlaG9zZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNGaXJlaG9zZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgR2x1ZSB3aXRoaW4gdGhlIEFXUyBTZXJ2aWNlQ2F0YWxvZyBwcm92aXNpb25lZCBwcm9kdWN0cyBmcm9tIEFtYXpvbiBTYWdlTWFrZXIgcG9ydGZvbGlvIG9mIHByb2R1Y3RzLiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYSBzZXQgb2YgcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgR2x1ZSwgUzMgYW5kIG90aGVycy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0dsdWVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzR2x1ZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgTGFtYmRhIHdpdGhpbiB0aGUgQVdTIFNlcnZpY2VDYXRhbG9nIHByb3Zpc2lvbmVkIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBFQ1IsIFMzIGFuZCBvdGhlcnMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNMYW1iZGFTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzTGFtYmRhU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgU3lzdGVtcyBNYW5hZ2VyIGFjdGl2YXRpb24sIHNlc3Npb24gbWFuYWdlbWVudCwgYW5kIEtNUyBrZXkgb3BlcmF0aW9ucyBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3IgdGhlIFNhZ2VNYWtlciBTcGFjZXMgQWRkb24gdG8gZW5hYmxlIHNlY3VyZSByZW1vdGUgYWNjZXNzIHRvIEVLUyBTYWdlTWFrZXIgU3BhY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTcGFjZXNDb250cm9sbGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclNwYWNlc0NvbnRyb2xsZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgU3lzdGVtcyBLTVMga2V5IG9wZXJhdGlvbnMgcGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIHRoZSBTYWdlTWFrZXIgU3BhY2VzIFJvdXRlciB0byBlbmFibGUgc2VjdXJlIHJlbW90ZSBhY2Nlc3MgdG8gRUtTIFNhZ2VNYWtlciBTcGFjZXMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclNwYWNlc1JvdXRlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJTcGFjZXNSb3V0ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIEFtYXpvbiBNYW5hZ2VkIFBvbGljeSBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIFNhZ2VNYWtlciBUcmFpbmluZyBQbGFucy4gSXQgYWxsb3dzIHVzZXJzIHRvIGNyZWF0ZSBUcmFpbmluZyBQbGFucyBhbmQgUmVzZXJ2ZWQgQ2FwYWNpdGllcywgZGVzY3JpYmUgZXhpc3RpbmcgVHJhaW5pbmcgUGxhbnMsIGFuZCBwZXJmb3JtIHNlYXJjaCBhbmQgbGlzdGluZyBvcGVyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJUcmFpbmluZ1BsYW5DcmVhdGVBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyVHJhaW5pbmdQbGFuQ3JlYXRlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFNlY3VyaXR5IExha2UgYW5kIHJlbGF0ZWQgc2VydmljZXMgbmVlZGVkIHRvIGFkbWluaXN0ZXIgU2VjdXJpdHkgTGFrZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2VjdXJpdHlMYWtlQWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TZWN1cml0eUxha2VBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBBbWF6b24gU2VjdXJpdHlMYWtlIG1ldGEgc3RvcmUgbWFuYWdlciBsYW1iZGEgd2hpY2ggYWxsb3dzIHRoZSBhY2Nlc3MgdG8gY2xvdWR3YXRjaCwgUzMsIEdsdWUgYW5kIFNRUy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2VjdXJpdHlMYWtlTWV0YXN0b3JlTWFuYWdlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TZWN1cml0eUxha2VNZXRhc3RvcmVNYW5hZ2VyKTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFNlY3VyaXR5IExha2UgY3JlYXRlcyBJQU0gcm9sZXMgZm9yIHRoaXJkLXBhcnR5IGN1c3RvbSBzb3VyY2VzIHRvIHdyaXRlIGRhdGEgdG8gYSBkYXRhIGxha2UgYW5kIGZvciB0aGlyZC1wYXJ0eSBzdWJzY3JpYmVycyB0byBjb25zdW1lIGRhdGEgZnJvbSBhIGRhdGEgbGFrZSwgYW5kIHVzZXMgdGhpcyBwb2xpY3kgd2hlbiBjcmVhdGluZyB0aGVzZSByb2xlcyB0byBkZWZpbmUgdGhlIGJvdW5kYXJ5IG9mIHRoZWlyIHBlcm1pc3Npb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TZWN1cml0eUxha2VQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNlY3VyaXR5TGFrZVBlcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gU0VTIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU0VTRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TRVNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gU0VTIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU0VTUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU0VTUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgU0VTIHRvIHB1Ymxpc2ggQW1hem9uIENsb3VkV2F0Y2ggYmFzaWMgbW9uaXRvcmluZyBtZXRyaWNzIG9uIGJlaGFsZiBvZiB5b3VyIFNFUyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uU0VTU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU0VTU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gU05TIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU05TRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TTlNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gU05TIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU05TUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU05TUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgQW1hem9uIFNOUyBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvblNOU1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU05TUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTUVMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TUVNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNRU0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBTUVMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TUVNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TUVNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB2aWV3IGF1dG9tYXRpb24gZXhlY3V0aW9ucyBhbmQgc2VuZCBhcHByb3ZhbCBkZWNpc2lvbnMgdG8gYXV0b21hdGlvbiB3YWl0aW5nIGZvciBhcHByb3ZhbCAqL1xuICAgIHB1YmxpYyBBbWF6b25TU01BdXRvbWF0aW9uQXBwcm92ZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU1NNQXV0b21hdGlvbkFwcHJvdmVyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIEVDMiBBdXRvbWF0aW9uIHNlcnZpY2UgdG8gZXhlY3V0ZSBhY3Rpdml0aWVzIGRlZmluZWQgd2l0aGluIEF1dG9tYXRpb24gZG9jdW1lbnRzICovXG4gICAgcHVibGljIEFtYXpvblNTTUF1dG9tYXRpb25Sb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNTTUF1dG9tYXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIFNTTSBBZ2VudCB0byBhY2Nlc3MgRGlyZWN0b3J5IFNlcnZpY2Ugb24gYmVoYWxmIG9mIHRoZSBjdXN0b21lciBmb3IgZG9tYWluLWpvaW4gdGhlIG1hbmFnZWQgaW5zdGFuY2UuICovXG4gICAgcHVibGljIEFtYXpvblNTTURpcmVjdG9yeVNlcnZpY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU1NNRGlyZWN0b3J5U2VydmljZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTU00uICovXG4gICAgcHVibGljIEFtYXpvblNTTUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU1NNRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqICBTZXJ2aWNlIFJvbGUgdG8gYmUgdXNlZCBmb3IgRUMyIE1haW50ZW5hbmNlIFdpbmRvdyAqL1xuICAgIHB1YmxpYyBBbWF6b25TU01NYWludGVuYW5jZVdpbmRvd1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU1NNTWFpbnRlbmFuY2VXaW5kb3dSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZW5hYmxlcyBBV1MgU3lzdGVtcyBNYW5hZ2VyIGZ1bmN0aW9uYWxpdHkgb24gRUMyIGluc3RhbmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU1NNTWFuYWdlZEVDMkluc3RhbmNlRGVmYXVsdFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TU01NYW5hZ2VkRUMySW5zdGFuY2VEZWZhdWx0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIHBvbGljeSBmb3IgQW1hem9uIEVDMiBSb2xlIHRvIGVuYWJsZSBBV1MgU3lzdGVtcyBNYW5hZ2VyIHNlcnZpY2UgY29yZSBmdW5jdGlvbmFsaXR5LiAqL1xuICAgIHB1YmxpYyBBbWF6b25TU01NYW5hZ2VkSW5zdGFuY2VDb3JlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNTTU1hbmFnZWRJbnN0YW5jZUNvcmUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIGFjY2VzcyB0byBjaGlsZCBpbnN0YW5jZXMgZm9yIHBhdGNoIGFzc29jaWF0aW9uIG9wZXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgQW1hem9uU1NNUGF0Y2hBc3NvY2lhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TU01QYXRjaEFzc29jaWF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gU1NNLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TU01SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TU01SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIG1hbmFnZWQgb3IgdXNlZCBieSBBbWF6b24gU1NNICovXG4gICAgcHVibGljIEFtYXpvblNTTVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNTTVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNzIHRvIGFsbCBBbWF6b24gVGV4dHJhY3QgQVBJcyAqL1xuICAgIHB1YmxpYyBBbWF6b25UZXh0cmFjdEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVGV4dHJhY3RGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFRleHRyYWN0IHRvIGNhbGwgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25UZXh0cmFjdFNlcnZpY2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblRleHRyYWN0U2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBtYW5hZ2UgQW1hem9uIFRpbWVzdHJlYW0gdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuIE5vdGUgdGhhdCB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBwZXJtaXNzaW9ucyBmb3IgY2VydGFpbiBLTVMgb3BlcmF0aW9ucywgYW5kIG9wZXJhdGlvbnMgdG8gbWFuYWdlIHlvdXIgc2F2ZWQgcXVlcmllcy4gSWYgdXNpbmcgQ3VzdG9tZXIgbWFuYWdlZCBDTUssIHBsZWFzZSByZWZlciB0byBkb2N1bWVudGF0aW9uIGZvciBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG5lZWRlZC4gKi9cbiAgICBwdWJsaWMgQW1hem9uVGltZXN0cmVhbUNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblRpbWVzdHJlYW1Db25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBUaW1lc3RyZWFtLiBOb3RlIHRoYXQgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgY2VydGFpbiBLTVMgb3BlcmF0aW9uIGFjY2Vzcy4gSWYgdXNpbmcgQ3VzdG9tZXIgbWFuYWdlZCBDTUssIHBsZWFzZSByZWZlciB0byBkb2N1bWVudGF0aW9uIGZvciBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG5lZWRlZC4gKi9cbiAgICBwdWJsaWMgQW1hem9uVGltZXN0cmVhbUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVGltZXN0cmVhbUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBjcmVhdGUsIHVwZGF0ZSwgZGVsZXRlIGFuZCBsaXN0IEFtYXpvbiBUaW1lc3RyZWFtIEluZmx1eERCIGluc3RhbmNlcyBhbmQgY3JlYXRlIGFuZCBsaXN0IHBhcmFtZXRlciBncm91cHMuIFBsZWFzZSByZWZlciB0byBkb2N1bWVudGF0aW9uIGZvciBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG5lZWRlZC4gKi9cbiAgICBwdWJsaWMgQW1hem9uVGltZXN0cmVhbUluZmx1eERCRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25UaW1lc3RyZWFtSW5mbHV4REJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIG1hbmFnZSBBbWF6b24gVGltZXN0cmVhbSBJbmZsdXhEQiBpbnN0YW5jZXMgYW5kIHBhcmFtZXRlciBncm91cHMgZXhjZXB0IG1hcmtldHBsYWNlIG9wZXJhdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvblRpbWVzdHJlYW1JbmZsdXhEQkZ1bGxBY2Nlc3NXaXRob3V0TWFya2V0cGxhY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVGltZXN0cmVhbUluZmx1eERCRnVsbEFjY2Vzc1dpdGhvdXRNYXJrZXRwbGFjZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIGNyZWF0ZSwgdXBkYXRlLCBkZWxldGUgYW5kIGxpc3QgQW1hem9uIFRpbWVzdHJlYW0gSW5mbHV4REIgaW5zdGFuY2VzIGFuZCBjcmVhdGUgYW5kIGxpc3QgcGFyYW1ldGVyIGdyb3Vwcy4gUGxlYXNlIHJlZmVyIHRvIGRvY3VtZW50YXRpb24gZm9yIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbmVlZGVkLiAqL1xuICAgIHB1YmxpYyBBbWF6b25UaW1lc3RyZWFtSW5mbHV4REJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25UaW1lc3RyZWFtSW5mbHV4REJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFRpbWVzdHJlYW0uIFBvbGljeSBhbHNvIHByb3ZpZGVzIHBlcm1pc3Npb24gdG8gY2FuY2VsIGFueSBydW5uaW5nIHF1ZXJ5LiBJZiB1c2luZyBDdXN0b21lciBtYW5hZ2VkIENNSywgcGxlYXNlIHJlZmVyIHRvIGRvY3VtZW50YXRpb24gZm9yIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbmVlZGVkLiAqL1xuICAgIHB1YmxpYyBBbWF6b25UaW1lc3RyZWFtUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVGltZXN0cmVhbVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFRyYW5zY3JpYmUgb3BlcmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBbWF6b25UcmFuc2NyaWJlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25UcmFuc2NyaWJlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byByZWFkIG9ubHkgb3BlcmF0aW9uIGZvciBBbWF6b24gVHJhbnNjcmliZSAqL1xuICAgIHB1YmxpYyBBbWF6b25UcmFuc2NyaWJlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVHJhbnNjcmliZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gVmVyaWZpZWQgUGVybWlzc2lvbnMgKi9cbiAgICBwdWJsaWMgQW1hem9uVmVyaWZpZWRQZXJtaXNzaW9uc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVmVyaWZpZWRQZXJtaXNzaW9uc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBWZXJpZmllZCBQZXJtaXNzaW9ucyBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25WZXJpZmllZFBlcm1pc3Npb25zUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVmVyaWZpZWRQZXJtaXNzaW9uc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGNyZWF0ZSBuZXR3b3JrIGludGVyZmFjZXMgYW5kIGF0dGFjaCB0aGVtIHRvIGNyb3NzLWFjY291bnQgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFtYXpvblZQQ0Nyb3NzQWNjb3VudE5ldHdvcmtJbnRlcmZhY2VPcGVyYXRpb25zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblZQQ0Nyb3NzQWNjb3VudE5ldHdvcmtJbnRlcmZhY2VPcGVyYXRpb25zKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFZQQyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblZQQ0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVlBDRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGRlc2NyaWJlIEFXUyByZXNvdXJjZXMsIHJ1biBOZXR3b3JrIEFjY2VzcyBBbmFseXplciwgYW5kIGNyZWF0ZSBvciBkZWxldGUgdGFncyBvbiBOZXR3b3JrIEluc2lnaHRzIEFjY2VzcyBTY29wZSBhbmQgTmV0d29yayBJbnNpZ2h0cyBBY2Nlc3MgU2NvcGUgQW5hbHlzaXMuICovXG4gICAgcHVibGljIEFtYXpvblZQQ05ldHdvcmtBY2Nlc3NBbmFseXplckZ1bGxBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVlBDTmV0d29ya0FjY2Vzc0FuYWx5emVyRnVsbEFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGRlc2NyaWJlIEFXUyByZXNvdXJjZXMsIHJ1biBSZWFjaGFiaWxpdHkgQW5hbHl6ZXIsIGFuZCBjcmVhdGUgb3IgZGVsZXRlIHRhZ3Mgb24gTmV0d29yayBJbnNpZ2h0cyBQYXRoIGFuZCBOZXR3b3JrIEluc2lnaHRzIEFuYWx5c2lzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25WUENSZWFjaGFiaWxpdHlBbmFseXplckZ1bGxBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVlBDUmVhY2hhYmlsaXR5QW5hbHl6ZXJGdWxsQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgdG8gdGhlIHJvbGUgSUFNUm9sZUZvclJlYWNoYWJpbGl0eUFuYWx5emVyQ3Jvc3NBY2NvdW50UmVzb3VyY2VBY2Nlc3MuIFRoaXMgcm9sZSBpcyBkZXBsb3llZCB0byB0aGUgbWVtYmVyIGFjY291bnRzIGluIGFuIG9yZ2FuaXphdGlvbiB3aGVuIHRoZSBtYW5hZ2VtZW50IGFjY291bnQgZW5hYmxlcyB0cnVzdGVkIGFjY2VzcyBmb3IgUmVhY2hhYmlsaXR5IEFuYWx5emVyLiBJdCBwcm92aWRlcyBwZXJtaXNzaW9ucyB0byB2aWV3IHJlc291cmNlcyBmcm9tIGFjcm9zcyB5b3VyIG9yZ2FuaXphdGlvbiB1c2luZyB0aGUgUmVhY2hhYmlsaXR5IEFuYWx5emVyIGNvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblZQQ1JlYWNoYWJpbGl0eUFuYWx5emVyUGF0aENvbXBvbmVudFJlYWRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVlBDUmVhY2hhYmlsaXR5QW5hbHl6ZXJQYXRoQ29tcG9uZW50UmVhZFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFZQQyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblZQQ1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblZQQ1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFdvcmtEb2NzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrRG9jc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya0RvY3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gV29ya0RvY3MgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlICovXG4gICAgcHVibGljIEFtYXpvbldvcmtEb2NzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya0RvY3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gV29ya01haWwgRXZlbnRzICovXG4gICAgcHVibGljIEFtYXpvbldvcmtNYWlsRXZlbnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya01haWxFdmVudHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIFdvcmtNYWlsLCBEaXJlY3RvcnkgU2VydmljZSwgU0VTLCBFQzIgYW5kIHJlYWQgYWNjZXNzIHRvIEtNUyBtZXRhZGF0YS4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya01haWxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtNYWlsRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bGwgYWNjZXNzIHRvIHRoZSBXb3JrTWFpbCBNZXNzYWdlIEZsb3cgQVBJcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrTWFpbE1lc3NhZ2VGbG93RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrTWFpbE1lc3NhZ2VGbG93RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFJlYWQgb25seSBhY2Nlc3MgdG8gV29ya01haWwgbWVzc2FnZXMgZm9yIHRoZSBHZXRSYXdNZXNzYWdlQ29udGVudCBBUEkgKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya01haWxNZXNzYWdlRmxvd1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtNYWlsTWVzc2FnZUZsb3dSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gV29ya01haWwgYW5kIFNFUy4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya01haWxSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrTWFpbFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFtYXpvbiBXb3JrU3BhY2VzIGFkbWluaXN0cmF0aXZlIGFjdGlvbnMgdmlhIEFXUyBTREsgYW5kIENMSS4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc0FkbWluKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNBZG1pbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0b3IgYWNjZXNzIGZvciBwYWNrYWdpbmcgYW4gYXBwbGljYXRpb24gaW4gQW1hem9uIFdvcmtTcGFjZXMgQXBwbGljYXRpb24gTWFuYWdlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc0FwcGxpY2F0aW9uTWFuYWdlckFkbWluQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNBcHBsaWNhdGlvbk1hbmFnZXJBZG1pbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgbWFuYWdlZCBwb2xpY3kgcHJvdmlkZXMgZnVsbCBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgUHJpdmF0ZSBDQSByZXNvdXJjZXMgaW4geW91ciBBV1MgYWNjb3VudCBmb3IgY2VydGlmaWNhdGUtYmFzZWQgYXV0aGVudGljYXRpb24uICovXG4gICAgcHVibGljIEFtYXpvbldvcmtzcGFjZXNQQ0FBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya3NwYWNlc1BDQUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIEFXUyBXb3JrU3BhY2VzIHNlcnZpY2UgYWNjZXNzIHRvIHJlcXVpcmVkIGN1c3RvbWVyIGFjY291bnQgcmVzb3VyY2VzIGZvciBsYXVuY2hpbmcgV29ya3NwYWNlcyBQb29scyAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrU3BhY2VzUG9vbFNlcnZpY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya1NwYWNlc1Bvb2xTZXJ2aWNlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyBTZWN1cmUgQnJvd3NlciBhbmQgaXRzIGRlcGVuZGVuY2llcyB0aHJvdWdoIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLCBTREssIGFuZCBDTEkuICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNTZWN1cmVCcm93c2VyUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya1NwYWNlc1NlY3VyZUJyb3dzZXJSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyBiYWNrZW5kIHNlcnZpY2UgdG8gcGVyZm9ybSBXb3Jrc3BhY2UgU2VsZiBTZXJ2aWNlIGFjdGlvbnMgKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc1NlbGZTZXJ2aWNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNTZWxmU2VydmljZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGN1c3RvbWVyIGFjY291bnQgYWNjZXNzIHRvIEFXUyBXb3JrU3BhY2VzIHNlcnZpY2UgZm9yIGxhdW5jaGluZyBhIFdvcmtzcGFjZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc1NlcnZpY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya1NwYWNlc1NlcnZpY2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyBUaGluIENsaWVudCBhcyB3ZWxsIGFzIGxpbWl0ZWQgYWNjZXNzIHRvIHJlcXVpcmVkIHJlbGF0ZWQgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc1RoaW5DbGllbnRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNUaGluQ2xpZW50RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gV29ya1NwYWNlcyBUaGluIENsaWVudCBNb25pdG9yaW5nICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNUaGluQ2xpZW50TW9uaXRvcmluZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNUaGluQ2xpZW50TW9uaXRvcmluZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyBUaGluIENsaWVudCBhbmQgaXRzIGRlcGVuZGVuY2llcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrU3BhY2VzVGhpbkNsaWVudFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNUaGluQ2xpZW50UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBXb3JrU3BhY2VzIFdlYiBhbmQgaXRzIGRlcGVuZGVuY2llcyB0aHJvdWdoIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLCBTREssIGFuZCBDTEkuICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNXZWJSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrU3BhY2VzV2ViUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIFdvcmtTcGFjZXMgV2ViICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNXZWJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrU3BhY2VzV2ViU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gWm9jYWxvLiAqL1xuICAgIHB1YmxpYyBBbWF6b25ab2NhbG9GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblpvY2Fsb0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBab2NhbG8gKi9cbiAgICBwdWJsaWMgQW1hem9uWm9jYWxvUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uWm9jYWxvUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBbXBsaWZ5IGZ1bGwgYWNjZXNzIHBlcm1pc3Npb25zIHRvIGRlcGxveSBBbXBsaWZ5IGJhY2tlbmQgcmVzb3VyY2VzIChBV1MgQXBwU3luYywgQW1hem9uIENvZ25pdG8sIEFtYXpvbiBTMyBhbmQgb3RoZXIgcmVsYXRlZCBzZXJ2aWNlcykgdmlhIHRoZSBBV1MgQ2xvdWQgRGV2ZWxvcG1lbnQgS2l0IChBV1MgQ0RLKSAqL1xuICAgIHB1YmxpYyBBbXBsaWZ5QmFja2VuZERlcGxveUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1wbGlmeUJhY2tlbmREZXBsb3lGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xhdWRlIFBsYXRmb3JtIG9uIEFXUyAqL1xuICAgIHB1YmxpYyBBbnRocm9waWNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFudGhyb3BpY0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBsaW1pdGVkIGFjY2VzcyB0byBDbGF1ZGUgUGxhdGZvcm0gb24gQVdTICovXG4gICAgcHVibGljIEFudGhyb3BpY0xpbWl0ZWRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW50aHJvcGljTGltaXRlZEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQ2xhdWRlIFBsYXRmb3JtIG9uIEFXUyAqL1xuICAgIHB1YmxpYyBBbnRocm9waWNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbnRocm9waWNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBvcGVyYXRlIGEgc2VsZi1ob3N0ZWQgZW52aXJvbm1lbnQgcnVubmVyIGZvciBDbGF1ZGUgTWFuYWdlZCBBZ2VudHMgKi9cbiAgICBwdWJsaWMgQW50aHJvcGljU2VsZkhvc3RlZEVudmlyb25tZW50QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFudGhyb3BpY1NlbGZIb3N0ZWRFbnZpcm9ubWVudEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBUEkgR2F0ZXdheSB0byBtYW5hZ2UgYXNzb2NpYXRlZCBBV1MgUmVzb3VyY2VzIG9uIGJlaGFsZiBvZiB0aGUgY3VzdG9tZXIuICovXG4gICAgcHVibGljIEFQSUdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BUElHYXRld2F5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQXBwSW50ZWdyYXRpb25zIHRvIG1hbmFnZSBBcHBGbG93IHJlc291cmNlcyBhbmQgcHVibGlzaCBDbG91ZFdhdGNoIG1ldHJpYyBkYXRhIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBcHBJbnRlZ3JhdGlvbnNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BcHBJbnRlZ3JhdGlvbnNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQXBwbGljYXRpb24gQXV0b3NjYWxpbmcgZm9yIEFtYXpvbiBBcHBTdHJlYW0gKi9cbiAgICBwdWJsaWMgQXBwbGljYXRpb25BdXRvU2NhbGluZ0ZvckFtYXpvbkFwcFN0cmVhbUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BcHBsaWNhdGlvbkF1dG9TY2FsaW5nRm9yQW1hem9uQXBwU3RyZWFtQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFwcGxpY2F0aW9uIERpc2NvdmVyeSBTZXJ2aWNlIENvbnRpbnVvdXMgRXhwb3J0IGZlYXR1cmUgKi9cbiAgICBwdWJsaWMgQXBwbGljYXRpb25EaXNjb3ZlcnlTZXJ2aWNlQ29udGludW91c0V4cG9ydFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFwcGxpY2F0aW9uRGlzY292ZXJ5U2VydmljZUNvbnRpbnVvdXNFeHBvcnRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgQXBwUnVubmVyIE5ldHdvcmtpbmcgdG8gbWFuYWdlIHJlbGF0ZWQgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQXBwUnVubmVyTmV0d29ya2luZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFwcFJ1bm5lck5ldHdvcmtpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgQXBwUnVubmVyIHRvIG1hbmFnZSByZWxhdGVkIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFwcFJ1bm5lclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFwcFJ1bm5lclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFwcFN0dWRpbyB0byBtYW5hZ2UgYXNzb2NpYXRlZCBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBcHBTdHVkaW9TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BcHBTdHVkaW9TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgQXNzdXJhbmNlIHRvIGFjY2VzcyB5b3VyIHJlc291cmNlcyBmb3IgY29tcGxpYW5jZSBhc3Nlc3NtZW50cyBhbmQgZXZpZGVuY2UgY29sbGVjdGlvbi4gKi9cbiAgICBwdWJsaWMgQXNzdXJhbmNlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXNzdXJhbmNlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIEFtYXpvbiBBdXJvcmEgRFNRTCBTZXJ2aWNlIExpbmtlZCBSb2xlICovXG4gICAgcHVibGljIEF1cm9yYURzcWxTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BdXJvcmFEc3FsU2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBdXRvIFNjYWxpbmcgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBdXRvU2NhbGluZ0NvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkF1dG9TY2FsaW5nQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEF1dG8gU2NhbGluZyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEF1dG9TY2FsaW5nQ29uc29sZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkF1dG9TY2FsaW5nQ29uc29sZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQXV0byBTY2FsaW5nLiAqL1xuICAgIHB1YmxpYyBBdXRvU2NhbGluZ0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXV0b1NjYWxpbmdGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBBdXRvU2NhbGluZyBOb3RpZmljYXRpb24gQWNjZXNzIHNlcnZpY2Ugcm9sZS4gKi9cbiAgICBwdWJsaWMgQXV0b1NjYWxpbmdOb3RpZmljYXRpb25BY2Nlc3NSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkF1dG9TY2FsaW5nTm90aWZpY2F0aW9uQWNjZXNzUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQXV0byBTY2FsaW5nLiAqL1xuICAgIHB1YmxpYyBBdXRvU2NhbGluZ1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkF1dG9TY2FsaW5nUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQXV0byBTY2FsaW5nICovXG4gICAgcHVibGljIEF1dG9TY2FsaW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXV0b1NjYWxpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgcG9saWN5IGZvciBBV1MgQ29uZmlnIHNlcnZpY2Ugcm9sZS4gUHJvdmlkZXMgcGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIEFXUyBDb25maWcgdG8gdHJhY2sgY2hhbmdlcyB0byB5b3VyIEFXUyByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0NvbmZpZ1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29uZmlnUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGFjY2VzcyB0aGUgU1NNIERpYWdub3NpcyBTMyBidWNrZXQgZm9yIGRpYWdub3NpcyBhbmQgcmVtZWRpYXRpb24gb2YgaXNzdWVzLiAqL1xuICAgIHB1YmxpYyBBV1NTU01BdXRvbWF0aW9uRGlhZ25vc2lzQnVja2V0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTTUF1dG9tYXRpb25EaWFnbm9zaXNCdWNrZXRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHBlcm1pc3Npb24gZm9yIERpYWdub3NpbmcgaXNzdWVzIHdpdGggU1NNIHNlcnZpY2VzIGJ5IGV4ZWN1dGluZyBhY3Rpdml0aWVzIGRlZmluZWQgd2l0aGluIEF1dG9tYXRpb24gRG9jdW1lbnRzLCBwcmltYXJpbHkgdXNlZCBmb3IgcnVubmluZyB0aGUgQXV0b21hdGlvbiBkb2N1bWVudHMgaW4gYSBjcm9zcy1hY2NvdW50IGNyb3NzLXJlZ2lvbiBzZXR1cCBieSB0cmlnZ2VyaW5nIGNoaWxkIGF1dG9tYXRpb25zIHdpdGhpbiBtZW1iZXIgYWNjb3VudHMuICovXG4gICAgcHVibGljIEFXU1NTTURpYWdub3Npc0F1dG9tYXRpb25BZG1pbmlzdHJhdGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NNRGlhZ25vc2lzQXV0b21hdGlvbkFkbWluaXN0cmF0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgcGVybWlzc2lvbiBmb3IgRGlhZ25vc2luZyBpc3N1ZXMgd2l0aCBTU00gc2VydmljZXMgYnkgZXhlY3V0aW5nIGFjdGl2aXRpZXMgZGVmaW5lZCB3aXRoaW4gQXV0b21hdGlvbiBEb2N1bWVudHMsIHByaW1hcmlseSB1c2VkIGZvciBydW5uaW5nIHRoZSBBdXRvbWF0aW9uIGRvY3VtZW50cyBpbiBhIHRhcmdldCBhY2NvdW50L3JlZ2lvbiBzZXR1cCBieSBkaWFnbm9zaW5nIFNTTSBzZXJ2aWNlIGhlYWx0aCBhY3Jvc3MgYWxsIG5vZGVzLiAqL1xuICAgIHB1YmxpYyBBV1NTU01EaWFnbm9zaXNBdXRvbWF0aW9uRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU01EaWFnbm9zaXNBdXRvbWF0aW9uRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBvcGVyYXRpb25hbCBhY2NvdW50cyB0byBkaWFnbm9zZSB1bm1hbmFnZWQgbm9kZXMgYnkgcHJvdmlkaW5nIE9yZ2FuaXNhdGlvbiBzcGVjaWZpYyBwZXJtaXNzaW9ucyByZXF1aXJlZCBieSBTU00gYXV0b21hdGlvbiB0byBwdWxsIHRoZSBsaXN0IG9mIG1lbWJlciBhY2NvdW50cyB3aXRoaW4gYSByb290IG9mIGFuIE9yZ2FuaXNhdGlvbiB0byB0cmlnZ2VyIGNyb3NzLWFjY291bnQgY3Jvc3MtcmVnaW9uIGV4ZWN1dGlvbiBieSBhbGxvd2luZyBhc3N1bWluZyBFeGVjdXRpb24gcm9sZXMgaW4gdGFyZ2V0IGFjY291bnQvcmVnaW9uLiAqL1xuICAgIHB1YmxpYyBBV1NTU01EaWFnbm9zaXNBdXRvbWF0aW9uT3BlcmF0aW9uYWxBY2NvdW50QWRtaW5pc3RyYXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTTURpYWdub3Npc0F1dG9tYXRpb25PcGVyYXRpb25hbEFjY291bnRBZG1pbmlzdHJhdGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHBlcm1pc3Npb24gZm9yIFJlbWVkaWF0aW5nIGlzc3VlcyB3aXRoIFNTTSBzZXJ2aWNlcyBieSBleGVjdXRpbmcgYWN0aXZpdGllcyBkZWZpbmVkIHdpdGhpbiBBdXRvbWF0aW9uIERvY3VtZW50cywgcHJpbWFyaWx5IHVzZWQgZm9yIHJ1bm5pbmcgdGhlIEF1dG9tYXRpb24gZG9jdW1lbnRzIGluIGEgY3Jvc3MtYWNjb3VudCBjcm9zcy1yZWdpb24gc2V0dXAgYnkgdHJpZ2dlcmluZyBjaGlsZCBhdXRvbWF0aW9ucyB3aXRoaW4gbWVtYmVyIGFjY291bnRzLiAqL1xuICAgIHB1YmxpYyBBV1NTU01SZW1lZGlhdGlvbkF1dG9tYXRpb25BZG1pbmlzdHJhdGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NNUmVtZWRpYXRpb25BdXRvbWF0aW9uQWRtaW5pc3RyYXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIFJlbWVkaWF0aW5nIGlzc3VlcyB3aXRoIFNTTSBzZXJ2aWNlcyBieSBleGVjdXRpbmcgYWN0aXZpdGllcyBkZWZpbmVkIHdpdGhpbiBBdXRvbWF0aW9uIERvY3VtZW50cywgcHJpbWFyaWx5IHVzZWQgZm9yIHJ1bm5pbmcgdGhlIEF1dG9tYXRpb24gZG9jdW1lbnRzIGluIGEgdGFyZ2V0IGFjY291bnQvcmVnaW9uIHNldHVwIGJ5IHJlbWVkaWF0aW5nIFNTTSBzZXJ2aWNlcyBoZWFsdGggYWNyb3NzIGFsbCBub2Rlcy4gKi9cbiAgICBwdWJsaWMgQVdTU1NNUmVtZWRpYXRpb25BdXRvbWF0aW9uRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU01SZW1lZGlhdGlvbkF1dG9tYXRpb25FeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIG9wZXJhdGlvbmFsIGFjY291bnRzIHRvIFJlbWVkaWF0ZSB1bm1hbmFnZWQgbm9kZXMgYnkgcHJvdmlkaW5nIE9yZ2FuaXNhdGlvbiBzcGVjaWZpYyBwZXJtaXNzaW9ucyByZXF1aXJlZCBieSBTU00gYXV0b21hdGlvbiB0byBwdWxsIHRoZSBsaXN0IG9mIG1lbWJlciBhY2NvdW50cyB3aXRoaW4gYSByb290IG9mIGFuIE9yZ2FuaXNhdGlvbiB0byB0cmlnZ2VyIGNyb3NzLWFjY291bnQgY3Jvc3MtcmVnaW9uIGV4ZWN1dGlvbiBieSBhbGxvd2luZyBhc3N1bWluZyBFeGVjdXRpb24gcm9sZXMgaW4gdGFyZ2V0IGFjY291bnQvcmVnaW9uLiAqL1xuICAgIHB1YmxpYyBBV1NTU01SZW1lZGlhdGlvbkF1dG9tYXRpb25PcGVyYXRpb25hbEFjY291bnRBZG1pbmlzdHJhdGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NNUmVtZWRpYXRpb25BdXRvbWF0aW9uT3BlcmF0aW9uYWxBY2NvdW50QWRtaW5pc3RyYXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHVzZXJzIHRvIGFjY2VzcyB0aGUgQWNjb3VudCBBY3Rpdml0eSBwYWdlLiAqL1xuICAgIHB1YmxpYyBBV1NBY2NvdW50QWN0aXZpdHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQWNjb3VudEFjdGl2aXR5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEFjY291bnQgTWFuYWdlbWVudC4gKi9cbiAgICBwdWJsaWMgQVdTQWNjb3VudE1hbmFnZW1lbnRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FjY291bnRNYW5hZ2VtZW50RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIEFjY291bnQgTWFuYWdlbWVudCAqL1xuICAgIHB1YmxpYyBBV1NBY2NvdW50TWFuYWdlbWVudFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FjY291bnRNYW5hZ2VtZW50UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgYW4gYWNjb3VudCBmb3IgQVdTIGFwcGxpY2F0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTQWNjb3VudFNldHRpbmdzTWFuYWdlbWVudFJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQWNjb3VudFNldHRpbmdzTWFuYWdlbWVudFJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdXNlcnMgdG8gYWNjZXNzIHRoZSBBY2NvdW50IFVzYWdlIFJlcG9ydCBwYWdlLiAqL1xuICAgIHB1YmxpYyBBV1NBY2NvdW50VXNhZ2VSZXBvcnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQWNjb3VudFVzYWdlUmVwb3J0QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIGZvciB0aGUgRGlzY292ZXJ5IEFnZW50bGVzcyBDb25uZWN0b3IgdG8gcmVnaXN0ZXIgd2l0aCBBV1MgQXBwbGljYXRpb24gRGlzY292ZXJ5IFNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU0FnZW50bGVzc0Rpc2NvdmVyeVNlcnZpY2UoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQWdlbnRsZXNzRGlzY292ZXJ5U2VydmljZSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgQWdlbnQgUmVnaXN0cnkgdG8gYWNjZXNzIEFXUyBzZXJ2aWNlIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBV1NBZ2VudFJlZ2lzdHJ5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQWdlbnRSZWdpc3RyeVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBBcHBDb25maWcgdG8gY2FsbCBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0FwcENvbmZpZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcENvbmZpZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFXUyBBcHBGYWJyaWMgc2VydmljZSBhbmQgcmVhZCBvbmx5IGFjY2VzcyB0byBkZXBlbmRlbnQgc2VydmljZXMgc3VjaCBhcyBTMywgS2luZXNpcywgS01TLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBGYWJyaWNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcEZhYnJpY0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBBV1MgQXBwRmFicmljICovXG4gICAgcHVibGljIEFXU0FwcEZhYnJpY1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcEZhYnJpY1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQXBwRmFicmljIGFjY2VzcyB0byBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFXU0FwcEZhYnJpY1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcEZhYnJpY1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgQXBwU3RyZWFtIGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nQXBwU3RyZWFtRmxlZXRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0FwcFN0cmVhbUZsZWV0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgQ2Fzc2FuZHJhIGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nQ2Fzc2FuZHJhVGFibGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0Nhc3NhbmRyYVRhYmxlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgQ29tcHJlaGVuZCBhbmQgQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0NvbXByZWhlbmRFbmRwb2ludFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nQ29tcHJlaGVuZEVuZHBvaW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgQVBJR2F0ZXdheSBhbmQgQ2xvdWRXYXRjaCBmb3IgY3VzdG9tIHJlc291cmNlIHNjYWxpbmcgKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25BdXRvU2NhbGluZ0N1c3RvbVJlc291cmNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b1NjYWxpbmdDdXN0b21SZXNvdXJjZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIER5bmFtb0RCIGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRHluYW1vREJUYWJsZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRHluYW1vREJUYWJsZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIEVDMiBTcG90IEZsZWV0IGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRUMyU3BvdEZsZWV0UmVxdWVzdFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRUMyU3BvdEZsZWV0UmVxdWVzdFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIEVDMiBDb250YWluZXIgU2VydmljZSBhbmQgQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0VDU1NlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0VDU1NlcnZpY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBBbWF6b24gRWxhc3RpQ2FjaGUgYW5kIEFtYXpvbiBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRWxhc3RpQ2FjaGVSR1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRWxhc3RpQ2FjaGVSR1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIEVsYXN0aWMgTWFwIFJlZHVjZSBhbmQgQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0VNUkluc3RhbmNlR3JvdXBQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0VNUkluc3RhbmNlR3JvdXBQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBNYW5hZ2VkIFN0cmVhbWluZyBmb3IgQXBhY2hlIEthZmthIGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nS2Fma2FDbHVzdGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdLYWZrYUNsdXN0ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBMYW1iZGEgYW5kIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdMYW1iZGFDb25jdXJyZW5jeVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nTGFtYmRhQ29uY3VycmVuY3lQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBBbWF6b24gTmVwdHVuZSBhbmQgQW1hem9uIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdOZXB0dW5lQ2x1c3RlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nTmVwdHVuZUNsdXN0ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBSRFMgYW5kIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdSRFNDbHVzdGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdSRFNDbHVzdGVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgU2FnZU1ha2VyIGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nU2FnZU1ha2VyRW5kcG9pbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ1NhZ2VNYWtlckVuZHBvaW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgQW1hem9uIFdvcmtTcGFjZXMgYW5kIEFtYXpvbiBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nV29ya1NwYWNlc1Bvb2xQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ1dvcmtTcGFjZXNQb29sUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIGZvciB0aGUgRGlzY292ZXJ5IEFnZW50IHRvIHJlZ2lzdGVyIHdpdGggQVdTIEFwcGxpY2F0aW9uIERpc2NvdmVyeSBTZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkRpc2NvdmVyeUFnZW50QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uRGlzY292ZXJ5QWdlbnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQXBwbGljYXRpb24gRGlzY292ZXJ5IFNlcnZpY2UgQWdlbnRsZXNzIENvbGxlY3RvcnMgdG8gYXV0byB1cGRhdGUsIHJlZ2lzdGVyLCBhbmQgY29tbXVuaWNhdGUgd2l0aCBBcHBsaWNhdGlvbiBEaXNjb3ZlcnkgU2VydmljZSAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkRpc2NvdmVyeUFnZW50bGVzc0NvbGxlY3RvckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkRpc2NvdmVyeUFnZW50bGVzc0NvbGxlY3RvckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHZpZXcgYW5kIHRhZyBDb25maWd1cmF0aW9uIEl0ZW1zIG1haW50YWluZWQgYnkgdGhlIEFXUyBBcHBsaWNhdGlvbiBEaXNjb3ZlcnkgU2VydmljZSAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkRpc2NvdmVyeVNlcnZpY2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uRGlzY292ZXJ5U2VydmljZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgaW5zdGFsbGluZyB0aGUgQVdTIFJlcGxpY2F0aW9uIEFnZW50LCB3aGljaCBpcyB1c2VkIHdpdGggQVdTIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChNR04pIHRvIG1pZ3JhdGUgZXh0ZXJuYWwgc2VydmVycyB0byBBV1MuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcyB3aG9zZSBjcmVkZW50aWFscyB5b3UgcHJvdmlkZSB3aGVuIGluc3RhbGxpbmcgdGhlIEFXUyBSZXBsaWNhdGlvbiBBZ2VudC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25BZ2VudEluc3RhbGxhdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkFnZW50SW5zdGFsbGF0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIGluc3RhbGxpbmcgYW5kIHVzaW5nIHRoZSBBV1MgUmVwbGljYXRpb24gQWdlbnQsIHdoaWNoIGlzIHVzZWQgd2l0aCBBV1MgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgKE1HTikgdG8gbWlncmF0ZSBleHRlcm5hbCBzZXJ2ZXJzIHRvIEFXUy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzIHdob3NlIGNyZWRlbnRpYWxzIHlvdSBwcm92aWRlIHdoZW4gaW5zdGFsbGluZyB0aGUgQVdTIFJlcGxpY2F0aW9uIEFnZW50LiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkFnZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uQWdlbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgdXNpbmcgdGhlIEFXUyBSZXBsaWNhdGlvbiBBZ2VudCwgd2hpY2ggaXMgdXNlZCB3aXRoIEFXUyBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSAoTUdOKSB0byBtaWdyYXRlIGV4dGVybmFsIHNlcnZlcnMgdG8gQVdTLiBXZSBkbyBub3QgcmVjb21tZW5kIHRoYXQgeW91IGF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25BZ2VudFBvbGljeVYyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uQWdlbnRQb2xpY3lWMik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyB0aGUgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgKE1HTikgQ29udmVyc2lvbiBTZXJ2ZXIsIHdoaWNoIGFyZSBFQzIgaW5zdGFuY2VzIGxhdW5jaGVkIGJ5IEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlLCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBNR04gc2VydmljZS4gQW4gSUFNIHJvbGUgd2l0aCB0aGlzIHBvbGljeSBpcyBhdHRhY2hlZCAoYXMgYW4gRUMyIEluc3RhbmNlIFByb2ZpbGUpIGJ5IE1HTiB0byB0aGUgTUdOIENvbnZlcnNpb24gU2VydmVycywgd2hpY2ggYXJlIGF1dG9tYXRpY2FsbHkgbGF1bmNoZWQgYW5kIHRlcm1pbmF0ZWQgYnkgTUdOLCB3aGVuIG5lZWRlZC4gV2UgZG8gbm90IHJlY29tbWVuZCB0aGF0IHlvdSBhdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuIE1HTiBDb252ZXJzaW9uIFNlcnZlcnMgYXJlIHVzZWQgYnkgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2Ugd2hlbiB1c2VycyBjaG9vc2UgdG8gbGF1bmNoIFRlc3Qgb3IgQ3V0b3ZlciBpbnN0YW5jZXMgdXNpbmcgdGhlIE1HTiBjb25zb2xlLCBDTEksIG9yIEFQSS4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25Db252ZXJzaW9uU2VydmVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uQ29udmVyc2lvblNlcnZlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIEFtYXpvbiBFQzIgb3BlcmF0aW9ucyByZXF1aXJlZCB0byB1c2UgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgKE1HTikgdG8gbGF1bmNoIHRoZSBtaWdyYXRlZCBzZXJ2ZXJzIGFzIEVDMiBpbnN0YW5jZXMuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25FQzJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25FQzJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgT05UQVAgZmlsZSBzeXN0ZW0gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25GU3hQcm94eVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkZTeFByb3h5UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gbWFuYWdlIFByaXZhdGVMaW5rIGJldHdlZW4gQVdTIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIGFuZCBjdXN0b21lcidzIEZTeCBmaWxlIHN5c3RlbSAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkZTeFByb3h5VlBDUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uRlN4UHJveHlWUENQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBwZXJtaXNzaW9ucyB0byBhbGwgcHVibGljIEFQSXMgb2YgQVdTIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChNR04pLCBhcyB3ZWxsIGFzIHBlcm1pc3Npb25zIHRvIHJlYWQgS01TIGtleSBpbmZvcm1hdGlvbi4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIEFXUyBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSAoTUdOKSB0byBzZW5kIG1ldGEtZGF0YSBhYm91dCB0aGUgcHJvZ3Jlc3Mgb2Ygc2VydmVycyBiZWluZyBtaWdyYXRlZCB1c2luZyBNR04gdG8gQVdTIE1pZ3JhdGlvbiBIdWIgKE1HSCkuIE1HTiBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgYW4gSUFNIHJvbGUgd2l0aCB0aGlzIHBvbGljeSBhdHRhY2hlZCwgYW5kIGFzc3VtZXMgdGhpcyByb2xlLiBXZSBkbyBub3QgcmVjb21tZW5kIHRoYXQgeW91IGF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25NR0hBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25NR0hBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgTmV0d29yayBNaWdyYXRpb24gY3VzdG9tIHJlc291cmNlICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uTmV0d29ya01pZ3JhdGlvbkN1c3RvbVJlc291cmNlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uTmV0d29ya01pZ3JhdGlvbkN1c3RvbVJlc291cmNlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gYXV0b21hdGUgVk13YXJlIHRvIEFXUyBuZXR3b3JrIGluZnJhc3RydWN0dXJlIG1pZ3JhdGlvbiB0aHJvdWdoIENsb3VkRm9ybWF0aW9uICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uTmV0d29ya01pZ3JhdGlvbk11bHRpQWNjb3VudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbk5ldHdvcmtNaWdyYXRpb25NdWx0aUFjY291bnQpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBwZXJtaXNzaW9ucyB0byBhbGwgcmVhZC1vbmx5IHB1YmxpYyBBUElzIG9mIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChNR04pLCBhcyB3ZWxsIGFzIHNvbWUgcmVhZC1vbmx5IEFQSXMgb2Ygb3RoZXIgQVdTIHNlcnZpY2VzIHRoYXQgYXJlIHJlcXVpcmVkIGluIG9yZGVyIHRvIG1ha2UgZnVsbCByZWFkLW9ubHkgdXNlIG9mIHRoZSBNR04gY29uc29sZS4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvblJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgdGhlIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChNR04pIFJlcGxpY2F0aW9uIFNlcnZlcnMsIHdoaWNoIGFyZSBFQzIgaW5zdGFuY2VzIGxhdW5jaGVkIGJ5IEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIC0gdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgTUdOIHNlcnZpY2UsIGFuZCB0byBjcmVhdGUgRUJTIHNuYXBzaG90cyBpbiB5b3VyIEFXUyBhY2NvdW50LiBBbiBJQU0gcm9sZSB3aXRoIHRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIChhcyBhbiBFQzIgSW5zdGFuY2UgUHJvZmlsZSkgYnkgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgdG8gdGhlIE1HTiBSZXBsaWNhdGlvbiBTZXJ2ZXJzIHdoaWNoIGFyZSBhdXRvbWF0aWNhbGx5IGxhdW5jaGVkIGFuZCB0ZXJtaW5hdGVkIGJ5IE1HTiwgYXMgbmVlZGVkLiBNR04gUmVwbGljYXRpb24gU2VydmVycyBhcmUgdXNlZCB0byBmYWNpbGl0YXRlIGRhdGEgcmVwbGljYXRpb24gZnJvbSB5b3VyIGV4dGVybmFsIHNlcnZlcnMgdG8gQVdTLCBhcyBwYXJ0IG9mIHRoZSBtaWdyYXRpb24gcHJvY2VzcyBtYW5hZ2VkIHVzaW5nIE1HTi4gV2UgZG8gbm90IHJlY29tbWVuZCB0aGF0IHlvdSBhdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uUmVwbGljYXRpb25TZXJ2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25SZXBsaWNhdGlvblNlcnZlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBpbnN0YWxsaW5nIGFuZCB1c2luZyB0aGUgQVdTIFJlcGxpY2F0aW9uIEFnZW50LCB3aGljaCBpcyB1c2VkIGJ5IEFXUyBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSAoQVdTIE1HTikgdG8gbWlncmF0ZSBzb3VyY2Ugc2VydmVycyB0aGF0IHJ1biBvbiBFQzIgKGNyb3NzLVJlZ2lvbiBvciBjcm9zcy1BWikuIEFuIElBTSByb2xlIHdpdGggdGhpcyBwb2xpY3kgc2hvdWxkIGJlIGF0dGFjaGVkIChhcyBhbiBFQzIgSW5zdGFuY2UgUHJvZmlsZSkgdG8gdGhlIEVDMiBJbnN0YW5jZXMuICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uU2VydmljZUVjMkluc3RhbmNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uU2VydmljZUVjMkluc3RhbmNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBhcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSB0byBjcmVhdGUgYW5kIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBhY2Nlc3MgdG8gQW1hem9uIFNTTSBvcGVyYXRpb25zIHJlcXVpcmVkIHRvIHVzZSBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSAoTUdOKSB0byBleGVjdXRlIGN1c3RvbSBwb3N0IG1pZ3JhdGlvbiBjb21tYW5kIFNTTSBkb2N1bWVudHMuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25TU01BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25TU01BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgaW5zdGFsbGluZyBhbmQgdXNpbmcgdGhlIEFXUyBWQ2VudGVyIENsaWVudCwgd2hpY2ggaXMgdXNlZCB3aXRoIEFXUyBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSAoTUdOKSB0byBtaWdyYXRlIGV4dGVybmFsIHNlcnZlcnMgdG8gQVdTLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMgd2hvc2UgY3JlZGVudGlhbHMgeW91IHByb3ZpZGUgd2hlbiBpbnN0YWxsaW5nIHRoZSBBV1MgVkNlbnRlciBDbGllbnQuICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uVkNlbnRlckNsaWVudFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvblZDZW50ZXJDbGllbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBcHAgTWVzaCBFbnZveSBwb2xpY3kgZm9yIGFjY2Vzc2luZyBWaXJ0dWFsIE5vZGUgY29uZmlndXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTQXBwTWVzaEVudm95QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcE1lc2hFbnZveUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgQXBwIE1lc2ggQVBJcyBhbmQgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBNZXNoRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBNZXNoRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFwcCBNZXNoIFByZXZpZXcgRW52b3kgcG9saWN5IGZvciBhY2Nlc3NpbmcgVmlydHVhbCBOb2RlIGNvbmZpZ3VyYXRpb24uICovXG4gICAgcHVibGljIEFXU0FwcE1lc2hQcmV2aWV3RW52b3lBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwTWVzaFByZXZpZXdFbnZveUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBV1MgQXBwIE1lc2ggKi9cbiAgICBwdWJsaWMgQVdTQXBwTWVzaFByZXZpZXdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBNZXNoUHJldmlld1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgQVdTIEFwcCBNZXNoIEFQSXMgYW5kIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTQXBwTWVzaFJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcE1lc2hSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBV1MgQXBwTWVzaCAqL1xuICAgIHB1YmxpYyBBV1NBcHBNZXNoU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwTWVzaFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIGFsbCBBcHAgUnVubmVyIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0FwcFJ1bm5lckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwUnVubmVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBsaXN0IGFuZCB2aWV3IGRldGFpbHMgYWJvdXQgQXBwIFJ1bm5lciByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0FwcFJ1bm5lclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcFJ1bm5lclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQVdTIEFwcCBSdW5uZXIgc2VydmljZSBwb2xpY3kgdGhhdCBncmFudHMgcmVhZCBwZXJtaXNzaW9ucyB0byBBbWF6b24gRUNSIHJlc291cmNlcyBpbiB0aGUgY3VzdG9tZXIncyBhY2NvdW50LiBVc2UgaXQgaW4gYSByb2xlIHRoYXQgaXMgcGFzc2VkIHRvIEFwcCBSdW5uZXIgd2hlbiBjcmVhdGluZyBvciB1cGRhdGluZyBhbiBBcHAgUnVubmVyIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU0FwcFJ1bm5lclNlcnZpY2VQb2xpY3lGb3JFQ1JBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwUnVubmVyU2VydmljZVBvbGljeUZvckVDUkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byB0aGUgQXBwU3luYyBzZXJ2aWNlLCB0aG91Z2ggbm90IGVub3VnaCB0byBhY2Nlc3MgdmlhIHRoZSBjb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBTeW5jQWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBTeW5jQWRtaW5pc3RyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgaW52b2tpbmcgYWNjZXNzIHRvIHRoZSBBcHBTeW5jIHNlcnZpY2UgLSBib3RoIHRocm91Z2ggdGhlIGNvbnNvbGUgYW5kIGluZGVwZW5kZW50bHkgKi9cbiAgICBwdWJsaWMgQVdTQXBwU3luY0ludm9rZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwU3luY0ludm9rZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQXBwU3luYyB0byBwdXNoIGxvZ3MgdG8gdXNlcidzIENsb3VkV2F0Y2ggYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwU3luY1B1c2hUb0Nsb3VkV2F0Y2hMb2dzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcFN5bmNQdXNoVG9DbG91ZFdhdGNoTG9ncyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBjcmVhdGUsIHVwZGF0ZSwgYW5kIHF1ZXJ5IHRoZSBzY2hlbWEuICovXG4gICAgcHVibGljIEFXU0FwcFN5bmNTY2hlbWFBdXRob3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwU3luY1NjaGVtYUF1dGhvcik7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBcHBTeW5jICovXG4gICAgcHVibGljIEFXU0FwcFN5bmNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBTeW5jU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIEFydGlmYWN0IHJlYWQtb25seSBhY2Nlc3MgdG8gb3BlcmF0aW9ucyBpbiBBV1MgT3JnYW5pemF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTQXJ0aWZhY3RBY2NvdW50U3luYygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcnRpZmFjdEFjY291bnRTeW5jKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGZ1bGwgcGVybWlzc2lvbnMgdG8gbGlzdCwgZG93bmxvYWQsIGFjY2VwdCwgYW5kIHRlcm1pbmF0ZSBBV1MgQXJ0aWZhY3QgYWdyZWVtZW50cy4gSXQgYWxzbyBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBsaXN0IGFuZCBlbmFibGUgQVdTIHNlcnZpY2UgYWNjZXNzIGluIHRoZSBPcmdhbml6YXRpb24gc2VydmljZSwgYXMgd2VsbCBhcyBkZXNjcmliZSB0aGUgb3JnYW5pemF0aW9uIGRldGFpbHMuIEFkZGl0aW9uYWxseSwgdGhlIHBvbGljeSBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBjaGVjayBpZiB0aGUgcmVxdWlyZWQgc2VydmljZS1saW5rZWQgcm9sZSBleGlzdHMgYW5kIGNyZWF0ZXMgb25lIGlmIGl0IGRvZXNuJ3QgKi9cbiAgICBwdWJsaWMgQVdTQXJ0aWZhY3RBZ3JlZW1lbnRzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcnRpZmFjdEFncmVlbWVudHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHJlYWQtb25seSBhY2Nlc3MgdG8gbGlzdCB0aGUgQVdTIEFydGlmYWN0IHNlcnZpY2UgYWdyZWVtZW50cyBhbmQgdG8gZG93bmxvYWQgdGhlIGFjY2VwdGVkIGFncmVlbWVudHMuLiBJdCBhbHNvIGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIGxpc3QgYXMgd2VsbCBhcyBkZXNjcmliZSB0aGUgb3JnYW5pemF0aW9uIGRldGFpbHMuIEFkZGl0aW9uYWxseSwgdGhlIHBvbGljeSBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBjaGVjayBpZiB0aGUgcmVxdWlyZWQgc2VydmljZS1saW5rZWQgcm9sZSBleGlzdHMuICovXG4gICAgcHVibGljIEFXU0FydGlmYWN0QWdyZWVtZW50c1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FydGlmYWN0QWdyZWVtZW50c1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFydGlmYWN0IENvbXBsaWFuY2UgSW5xdWlyeS4gKi9cbiAgICBwdWJsaWMgQVdTQXJ0aWZhY3RDb21wbGlhbmNlSW5xdWlyaWVzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcnRpZmFjdENvbXBsaWFuY2VJbnF1aXJpZXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBcnRpZmFjdCBDb21wbGlhbmNlIElucXVpcnkuICovXG4gICAgcHVibGljIEFXU0FydGlmYWN0Q29tcGxpYW5jZUlucXVpcmllc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FydGlmYWN0Q29tcGxpYW5jZUlucXVpcmllc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgQVdTIEFydGlmYWN0IHNlcnZpY2UgcmVwb3J0cy4gKi9cbiAgICBwdWJsaWMgQVdTQXJ0aWZhY3RSZXBvcnRzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXJ0aWZhY3RSZXBvcnRzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIEFydGlmYWN0IHRvIGdhdGhlciBpbmZvcm1hdGlvbiBhYm91dCBhbiBvcmdhbml6YXRpb24gdmlhIEFXUyBPcmdhbml6YXRpb25zIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU0FydGlmYWN0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXJ0aWZhY3RTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBlbmFibGUgb3IgZGlzYWJsZSBBV1MgQXVkaXQgTWFuYWdlciwgdXBkYXRlIHNldHRpbmdzLCBhbmQgbWFuYWdlIGFzc2Vzc21lbnRzLCBjb250cm9scywgYW5kIGZyYW1ld29ya3MgKi9cbiAgICBwdWJsaWMgQVdTQXVkaXRNYW5hZ2VyQWRtaW5pc3RyYXRvckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBdWRpdE1hbmFnZXJBZG1pbmlzdHJhdG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFXUyBBdWRpdCBNYW5hZ2VyICovXG4gICAgcHVibGljIEFXU0F1ZGl0TWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0F1ZGl0TWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFXUyBBdXRvIFNjYWxpbmcgdG8gcGVyaW9kaWNhbGx5IGZvcmVjYXN0IGNhcGFjaXR5IGFuZCBnZW5lcmF0ZSBzY2hlZHVsZWQgc2NhbGluZyBhY3Rpb25zIGZvciBBdXRvIFNjYWxpbmcgZ3JvdXBzIGluIGEgc2NhbGluZyBwbGFuICovXG4gICAgcHVibGljIEFXU0F1dG9TY2FsaW5nUGxhbnNFQzJBdXRvU2NhbGluZ1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBdXRvU2NhbGluZ1BsYW5zRUMyQXV0b1NjYWxpbmdQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgdXNlcnMgcGVybWlzc2lvbnMgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgYmFja3VwIGFjY2VzcyBwb2ludHMgZm9yIGFjY2Vzc2luZyBiYWNrdXAgZGF0YSBpbiByZWNvdmVyeSBwb2ludHMgdGhyb3VnaCBTMyBhY2Nlc3MgcG9pbnRzLiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBBY2Nlc3NQb2ludE9wZXJhdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cEFjY2Vzc1BvaW50T3BlcmF0b3JBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgZm9yIHVzZXJzIHRvIGNyZWF0ZSBjb250cm9scyBhbmQgZnJhbWV3b3JrcyB0aGF0IGRlZmluZSB0aGVpciBleHBlY3RhdGlvbnMgZm9yIEFXUyBCYWNrdXAgcmVzb3VyY2VzIGFuZCBhY3Rpdml0aWVzLCBhbmQgdG8gYXVkaXQgQVdTIEJhY2t1cCByZXNvdXJjZXMgYW5kIGFjdGl2aXRpZXMgYWdhaW5zdCB0aGVpciBkZWZpbmVkIGNvbnRyb2xzIGFuZCBmcmFtZXdvcmtzLiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gQVdTIENvbmZpZyBhbmQgc2ltaWxhciBzZXJ2aWNlcyB0byBkZXNjcmliZSB1c2VyIGV4cGVjdGF0aW9ucyBwZXJmb3JtIHRoZSBhdWRpdHMuIFRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIHBlcm1pc3Npb25zIHRvIGRlbGl2ZXIgYXVkaXQgcmVwb3J0cyB0byBTMyBhbmQgc2ltaWxhciBzZXJ2aWNlcywgYW5kIGVuYWJsZXMgdXNlcnMgdG8gZmluZCBhbmQgb3BlbiB0aGVpciBhdWRpdCByZXBvcnRzLiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBBdWRpdEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBBdWRpdEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyB0aGUgQVdTIEJhY2tpbnQgYWdlbnQgdG8gY29tcGxldGUgYmFja3VwIGRhdGEgdHJhbnNmZXIgd2l0aCBBV1MgQmFja3VwIFN0b3JhZ2UgcGxhbmUuIEF0dGFjaCB0aGlzIHBvbGljeSB0byByb2xlcyBhc3N1bWVkIGJ5IEVDMiBJbnN0YW5jZXMgcnVubmluZyBTQVAgSEFOQSB3aXRoIHRoZSBCYWNraW50IGFnZW50LiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBEYXRhVHJhbnNmZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwRGF0YVRyYW5zZmVyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgZm9yIGJhY2t1cCBhZG1pbmlzdHJhdG9ycywgZ3JhbnRpbmcgZnVsbCBhY2Nlc3MgdG8gQVdTIEJhY2t1cCBvcGVyYXRpb25zLCBpbmNsdWRpbmcgY3JlYXRpbmcgb3IgZWRpdGluZyBiYWNrdXAgcGxhbnMsIGFzc2lnbmluZyBBV1MgcmVzb3VyY2VzIHRvIGJhY2t1cCBwbGFucywgZGVsZXRpbmcgYmFja3VwcywgYW5kIHJlc3RvcmluZyBiYWNrdXBzLiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBV1MgQmFja3VwR2F0ZXdheSBwZXJtaXNzaW9uIHRvIHN5bmMgdGhlIG1ldGFkYXRhIG9mIFZpcnR1YWwgTWFjaGluZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwR2F0ZXdheVNlcnZpY2VSb2xlUG9saWN5Rm9yVmlydHVhbE1hY2hpbmVNZXRhZGF0YVN5bmMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwR2F0ZXdheVNlcnZpY2VSb2xlUG9saWN5Rm9yVmlydHVhbE1hY2hpbmVNZXRhZGF0YVN5bmMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBHdWFyZER1dHkgcGVybWlzc2lvbiB0byByZWFkIHlvdXIgQVdTIEJhY2t1cCBSZWNvdmVyeSBQb2ludHMgZm9yIG1hbHdhcmUgc2NhbnMgKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwR3VhcmREdXR5Um9sZVBvbGljeUZvclNjYW5zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cEd1YXJkRHV0eVJvbGVQb2xpY3lGb3JTY2Fucyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyB1c2VycyBwZXJtaXNzaW9ucyB0byBhc3NpZ24gQVdTIHJlc291cmNlcyB0byBiYWNrdXAgcGxhbnMsIGNyZWF0ZSBvbi1kZW1hbmQgYmFja3VwcywgYW5kIHJlc3RvcmUgYmFja3Vwcy4gVGhpcyBwb2xpY3kgZG9lcyBub3QgYWxsb3cgdGhlIHVzZXIgdG8gY3JlYXRlIG9yIGVkaXQgYmFja3VwIHBsYW5zIG9yIHRvIGRlbGV0ZSBzY2hlZHVsZWQgYmFja3VwcyBhZnRlciB0aGV5IGFyZSBjcmVhdGVkLiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBPcGVyYXRvckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBPcGVyYXRvckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIGZvciBiYWNrdXAgYWRtaW5pc3RhdG9ycyB3aG8gdXNlIGNyb3NzLWFjY291bnQgYmFja3VwIG1hbmFnZW1lbnQgdG8gbWFuYWdlIGJhY2t1cHMgZm9yIHRoZSBvcmdhbml6YXRpb24uICovXG4gICAgcHVibGljIEFXU0JhY2t1cE9yZ2FuaXphdGlvbkFkbWluQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cE9yZ2FuaXphdGlvbkFkbWluQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQVdTIEJhY2t1cCBwZXJtaXNzaW9uIHRvIHJlc3RvcmUgYSBiYWNrdXAgb2YgU0FQIEhBTkEgb24gQW1hem9uIEVDMiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBSZXN0b3JlQWNjZXNzRm9yU0FQSEFOQSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBSZXN0b3JlQWNjZXNzRm9yU0FQSEFOQSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBzZWFyY2ggb3BlcmF0b3Igcm9sZSBoYXMgYWNjZXNzIHRvIGNyZWF0ZSBiYWNrdXAgaW5kZXhlcywgY3JlYXRlIHNlYXJjaGVzIG9mIGJhY2t1cCBtZXRhZGF0YSB0aGF0IGhhcyBiZWVuIGluZGV4ZWQuIFRoaXMgcG9saWN5IGNvbnRhaW5zIHRoZSBuZWNlc3NhcnkgcGVybWlzc2lvbnMgZm9yIHRoZXNlIHNlYXJjaCBvcGVyYXRvciBmdW5jdGlvbnMuICovXG4gICAgcHVibGljIEFXU0JhY2t1cFNlYXJjaE9wZXJhdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cFNlYXJjaE9wZXJhdG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQVdTIEJhY2t1cCBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBiYWNrdXBzIG9uIHlvdXIgYmVoYWxmIGFjcm9zcyBBV1Mgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwU2VydmljZUxpbmtlZFJvbGVQb2xpY3lGb3JCYWNrdXAoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwU2VydmljZUxpbmtlZFJvbGVQb2xpY3lGb3JCYWNrdXApO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBV1MgQmFja3VwIHBlcm1pc3Npb24gdG8gY3JlYXRlIGJhY2t1cHMgb24geW91ciBiZWhhbGYgYWNyb3NzIEFXUyBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBTZXJ2aWNlTGlua2VkUm9sZVBvbGljeUZvckJhY2t1cFRlc3QoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwU2VydmljZUxpbmtlZFJvbGVQb2xpY3lGb3JCYWNrdXBUZXN0KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQVdTIEJhY2t1cCBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBiYWNrdXBzIG9uIHlvdXIgYmVoYWxmIGFjcm9zcyBBV1Mgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JCYWNrdXAoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JCYWNrdXApO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgY29udGFpbmluZyBwZXJtaXNzaW9ucyBuZWNlc3NhcnkgZm9yIEFXUyBCYWNrdXAgdG8gaW5kZXggcmVjb3ZlcnkgcG9pbnRzLiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvckluZGV4aW5nKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9ySW5kZXhpbmcpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgY29udGFpbmluZyBwZXJtaXNzaW9ucyBuZWNlc3NhcnkgZm9yIEFXUyBCYWNrdXAgdG8gcmVzdG9yZSBpbmRpdmlkdWFsIGl0ZW1zIGluIGEgcmVjb3ZlcnkgcG9pbnQgKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JJdGVtUmVzdG9yZXMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JJdGVtUmVzdG9yZXMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBV1MgQmFja3VwIHBlcm1pc3Npb24gdG8gcGVyZm9ybSByZXN0b3JlcyBvbiB5b3VyIGJlaGFsZiBhY3Jvc3MgQVdTIHNlcnZpY2VzLiBUaGlzIHBvbGljeSBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBjcmVhdGUgYW5kIGRlbGV0ZSBBV1MgcmVzb3VyY2VzLCBzdWNoIGFzIEVCUyB2b2x1bWVzLCBSRFMgaW5zdGFuY2VzLCBhbmQgRUZTIGZpbGUgc3lzdGVtcywgd2hpY2ggYXJlIHBhcnQgb2YgdGhlIHJlc3RvcmUgcHJvY2Vzcy4gKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JSZXN0b3JlcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvclJlc3RvcmVzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGNvbnRhaW5pbmcgcGVybWlzc2lvbnMgbmVjZXNzYXJ5IGZvciBBV1MgQmFja3VwIHRvIGJhY2t1cCBkYXRhIGluIGFueSBTMyBidWNrZXQuIFRoaXMgaW5jbHVkZXMgcmVhZCBhY2Nlc3MgdG8gYWxsIFMzIG9iamVjdHMgYW5kIGFueSBkZWNyeXB0IGFjY2VzcyBmb3IgYWxsIEtNUyBrZXlzLiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvclMzQmFja3VwKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yUzNCYWNrdXApO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgY29udGFpbmluZyBwZXJtaXNzaW9ucyBuZWNlc3NhcnkgZm9yIEFXUyBCYWNrdXAgdG8gcmVzdG9yZSBhIFMzIGJhY2t1cCB0byBhIGJ1Y2tldC4gVGhpcyBpbmNsdWRlcyByZWFkL3dyaXRlIHBlcm1pc3Npb25zIHRvIGFsbCBTMyBidWNrZXRzLCBhbmQgcGVybWlzc2lvbnMgdG8gR2VuZXJhdGVEYXRhS2V5IGFuZCBEZXNjcmliZUtleSBmb3IgYWxsIEtNUyBrZXlzLiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvclMzUmVzdG9yZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvclMzUmVzdG9yZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBCYWNrdXAgcGVybWlzc2lvbiB0byBwZXJmb3JtIG1hbHdhcmUgc2NhbnMgb24geW91ciBBV1MgQmFja3VwIFJlY292ZXJ5IFBvaW50cyAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvclNjYW5zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yU2NhbnMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyBmb3IgQVdTIEJhdGNoIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQmF0Y2hGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhdGNoRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQ2xvdWRXYXRjaCBFdmVudCBUYXJnZXQgZm9yIEFXUyBCYXRjaCBKb2IgU3VibWlzc2lvbiAqL1xuICAgIHB1YmxpYyBBV1NCYXRjaFNlcnZpY2VFdmVudFRhcmdldFJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmF0Y2hTZXJ2aWNlRXZlbnRUYXJnZXRSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBBV1MgQmF0Y2ggc2VydmljZSByb2xlIHdoaWNoIGFsbG93cyBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgRUMyLCBBdXRvc2NhbGluZywgRUMyIENvbnRhaW5lciBzZXJ2aWNlIGFuZCBDbG91ZHdhdGNoIExvZ3MuICovXG4gICAgcHVibGljIEFXU0JhdGNoU2VydmljZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmF0Y2hTZXJ2aWNlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyBmb3IgQVdTIEJhdGNoIHRvIHF1ZXVlIGFuZCBtYW5hZ2UgQW1hem9uIFNhZ2VNYWtlciB3b3JrbG9hZHMgKi9cbiAgICBwdWJsaWMgQVdTQmF0Y2hTZXJ2aWNlUm9sZVBvbGljeUZvclNhZ2VNYWtlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYXRjaFNlcnZpY2VSb2xlUG9saWN5Rm9yU2FnZU1ha2VyKTtcbiAgICB9XG5cbiAgICAvKiogQSBzZXJ2aWNlIGxpbmtlZCByb2xlIHRvIHByb3ZpZGUgQmlsbGluZyBhbmQgQ29zdCBNYW5hZ2VtZW50IERhdGEgRXhwb3J0cyBhY2Nlc3MgdG8gQVdTIHNlcnZpY2UgZGF0YSBmb3IgZXhwb3J0aW5nIHRoZSBkYXRhIHRvIGEgdGFyZ2V0IGxvY2F0aW9uLCBzdWNoIGFzIEFtYXpvbiBTMywgb24gYmVoYWxmIG9mIGEgY3VzdG9tZXIuICovXG4gICAgcHVibGljIEFXU0JDTURhdGFFeHBvcnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQkNNRGF0YUV4cG9ydHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBCZWRyb2NrIEFnZW50Q29yZSBHYXRld2F5IHRvIG1hbmFnZWQgVlBDIExhdHRpY2UgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFXU0JlZHJvY2tBZ2VudENvcmVHYXRld2F5TmV0d29ya1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JlZHJvY2tBZ2VudENvcmVHYXRld2F5TmV0d29ya1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEJlZHJvY2sgQWdlbnRDb3JlIElkZW50aXR5IHRvIG1hbmFnZWQgVlBDIExhdHRpY2UgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFXU0JlZHJvY2tBZ2VudENvcmVJZGVudGl0eU5ldHdvcmtTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCZWRyb2NrQWdlbnRDb3JlSWRlbnRpdHlOZXR3b3JrU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQmVkcm9jayBBZ2VudENvcmUgUnVudGltZSBJbnN0YW5jZXMgdG8gbWFuYWdlIGNvbXB1dGUgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NCZWRyb2NrQWdlbnRDb3JlUnVudGltZUluc3RhbmNlc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JlZHJvY2tBZ2VudENvcmVSdW50aW1lSW5zdGFuY2VzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBVc2UgdGhlIEFXU0JpbGxpbmdDb25kdWN0b3JGdWxsQWNjZXNzIG1hbmFnZWQgcG9saWN5IHRvIGFsbG93IGNvbXBsZXRlIGFjY2VzcyB0byBBV1MgQmlsbGluZyBDb25kdWN0b3IgKEFCQykgY29uc29sZSBhbmQgQVBJcy4gVGhpcyBwb2xpY3kgYWxsb3dzIHVzZXJzIHRvIGxpc3QsIGNyZWF0ZSBhbmQgZGVsZXRlIEFCQyByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0JpbGxpbmdDb25kdWN0b3JGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JpbGxpbmdDb25kdWN0b3JGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVXNlIHRoZSBBV1NCaWxsaW5nQ29uZHVjdG9yUmVhZE9ubHlBY2Nlc3MgbWFuYWdlZCBwb2xpY3kgdG8gYWxsb3cgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgQmlsbGluZyBDb25kdWN0b3IgKEFCQykgY29uc29sZSBhbmQgQVBJcy4gVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb24gdG8gdmlldyBhbmQgbGlzdCBhbGwgQUJDIHJlc291cmNlcy4gSXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgYWJpbGl0eSB0byBjcmVhdGUgb3IgZGVsZXRlIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQmlsbGluZ0NvbmR1Y3RvclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JpbGxpbmdDb25kdWN0b3JSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB1c2VycyB0byB2aWV3IGJpbGxzIG9uIHRoZSBCaWxsaW5nIENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0JpbGxpbmdSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCaWxsaW5nUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYmlsbGluZyBzZXJ2aWNlIHRvIHZhbGlkYXRlIGFjY2VzcyB0byBiaWxsaW5nIHZpZXcgZGF0YSBmb3IgZGVyaXZlZCBiaWxsaW5nIHZpZXdzICovXG4gICAgcHVibGljIEFXU0JpbGxpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCaWxsaW5nU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBnaXZlcyBwZXJtaXNzaW9ucyB0byBjb250cm9sIEFXUyByZXNvdXJjZXMuIEZvciBleGFtcGxlLCB0byBzdGFydCBhbmQgc3RvcCBFQzIgb3IgUkRTIGluc3RhbmNlcyBieSBleGVjdXRpbmcgQVdTIFN5c3RlbXMgTWFuYWdlciAoU1NNKSBzY3JpcHRzLiAqL1xuICAgIHB1YmxpYyBBV1NCdWRnZXRzQWN0aW9uc1JvbGVQb2xpY3lGb3JSZXNvdXJjZUFkbWluaXN0cmF0aW9uV2l0aFNTTSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCdWRnZXRzQWN0aW9uc1JvbGVQb2xpY3lGb3JSZXNvdXJjZUFkbWluaXN0cmF0aW9uV2l0aFNTTSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBCdWRnZXRzIEFjdGlvbnMgaW5jbHVkaW5nIHVzaW5nIEJ1ZGdldHMgQWN0aW9ucyB0byBjb250cm9sIHN0YXRlcyBvZiBydW5uaW5nIEFXUyByZXNvdXJjZXMgdmlhIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgKi9cbiAgICBwdWJsaWMgQVdTQnVkZ2V0c0FjdGlvbnNXaXRoQVdTUmVzb3VyY2VDb250cm9sQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0J1ZGdldHNBY3Rpb25zV2l0aEFXU1Jlc291cmNlQ29udHJvbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIEJ1ZGdldHMgQ29uc29sZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0J1ZGdldHNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCdWRnZXRzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdGhlIEFXUyBCdWRnZXRzIHNlcnZpY2UgcGVybWlzc2lvbnMgdG8gZGVzY3JpYmUsIHN0b3AsIGFuZCB0ZXJtaW5hdGUgcmVzb3VyY2VzIGluIGEgbWVtYmVyIGFjY291bnQgdG8gZW5mb3JjZSBzcGVuZCBsaW1pdCBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NCdWRnZXRzU3BlbmRMaW1pdE1lbWJlclJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQnVkZ2V0c1NwZW5kTGltaXRNZW1iZXJSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBJQU0gcG9saWN5IGdyYW50cyB1c2VycyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIEJ1Z0J1c3QgY29uc29sZSAqL1xuICAgIHB1YmxpYyBBV1NCdWdCdXN0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCdWdCdXN0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgSUFNIHBvbGljeSBncmFudHMgdXNlcnMgYWNjZXNzIHRvIHBhcnRpY2lwYXRlIGluIEFXUyBCdWdCdXN0IGV2ZW50cyAqL1xuICAgIHB1YmxpYyBBV1NCdWdCdXN0UGxheWVyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0J1Z0J1c3RQbGF5ZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gQVdTIEJ1Z0J1c3QgdG8gYWNjZXNzIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBV1NCdWdCdXN0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQnVnQnVzdFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgKEFDTSkgKi9cbiAgICBwdWJsaWMgQVdTQ2VydGlmaWNhdGVNYW5hZ2VyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDZXJ0aWZpY2F0ZU1hbmFnZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYXVkaXRvciBhY2Nlc3MgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKi9cbiAgICBwdWJsaWMgQVdTQ2VydGlmaWNhdGVNYW5hZ2VyUHJpdmF0ZUNBQXVkaXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDZXJ0aWZpY2F0ZU1hbmFnZXJQcml2YXRlQ0FBdWRpdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKi9cbiAgICBwdWJsaWMgQVdTQ2VydGlmaWNhdGVNYW5hZ2VyUHJpdmF0ZUNBRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDZXJ0aWZpY2F0ZU1hbmFnZXJQcml2YXRlQ0FGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcHJpdmlsZWdlZCBjZXJ0aWZpY2F0ZSB1c2VyIGFjY2VzcyB0byBBV1MgQ2VydGlmaWNhdGUgTWFuYWdlciBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSAqL1xuICAgIHB1YmxpYyBBV1NDZXJ0aWZpY2F0ZU1hbmFnZXJQcml2YXRlQ0FQcml2aWxlZ2VkVXNlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDZXJ0aWZpY2F0ZU1hbmFnZXJQcml2YXRlQ0FQcml2aWxlZ2VkVXNlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKi9cbiAgICBwdWJsaWMgQVdTQ2VydGlmaWNhdGVNYW5hZ2VyUHJpdmF0ZUNBUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2VydGlmaWNhdGVNYW5hZ2VyUHJpdmF0ZUNBUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjZXJ0aWZpY2F0ZSB1c2VyIGFjY2VzcyB0byBBV1MgQ2VydGlmaWNhdGUgTWFuYWdlciBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSAqL1xuICAgIHB1YmxpYyBBV1NDZXJ0aWZpY2F0ZU1hbmFnZXJQcml2YXRlQ0FVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NlcnRpZmljYXRlTWFuYWdlclByaXZhdGVDQVVzZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBDZXJ0aWZpY2F0ZSBNYW5hZ2VyIChBQ00pLiAqL1xuICAgIHB1YmxpYyBBV1NDZXJ0aWZpY2F0ZU1hbmFnZXJSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDZXJ0aWZpY2F0ZU1hbmFnZXJSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBTZXJ2aWNlIExpbmtlZCBSb2xlIHVzZWQgYnkgQVdTIENoYXRib3QuICovXG4gICAgcHVibGljIEFXU0NoYXRib3RTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDaGF0Ym90U2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgZnVsbCBhY2Nlc3MgdG8gQVdTIENsZWFuIFJvb21zIHJlc291cmNlcyBhbmQgYWNjZXNzIHRvIHJlbGF0ZWQgQVdTIFNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDbGVhblJvb21zRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbGVhblJvb21zRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBmdWxsIGFjY2VzcyB0byBBV1MgQ2xlYW4gUm9vbXMgcmVzb3VyY2VzIGV4Y2VwdCBmb3IgcXVlcnlpbmcgaW4gYSBjb2xsYWJvcmF0aW9uIGFuZCBhY2Nlc3MgdG8gcmVsYXRlZCBBV1MgU2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0NsZWFuUm9vbXNGdWxsQWNjZXNzTm9RdWVyeWluZygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbGVhblJvb21zRnVsbEFjY2Vzc05vUXVlcnlpbmcpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgZnVsbCBhY2Nlc3MgdG8gQVdTIENsZWFuIFJvb21zIE1MIHJlc291cmNlcyBhbmQgYWNjZXNzIHRvIHJlbGF0ZWQgQVdTIFNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDbGVhblJvb21zTUxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NsZWFuUm9vbXNNTEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgQ2xlYW4gUm9vbXMgTUwgcmVzb3VyY2VzIGFuZCByZWFkLW9ubHkgYWNjZXNzIHRvIHJlbGF0ZWQgQVdTIENsZWFuIFJvb21zIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NDbGVhblJvb21zTUxSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbGVhblJvb21zTUxSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBDbGVhbiBSb29tcyByZXNvdXJjZXMgYW5kIHJlYWQtb25seSBhY2Nlc3MgdG8gcmVsYXRlZCBBV1MgR2x1ZSBhbmQgQW1hem9uIENsb3VkV2F0Y2ggTG9ncyByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0NsZWFuUm9vbXNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbGVhblJvb21zUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBBV1MgQ2xlYW4gUm9vbXMgdG8gYWNjZXNzIG90aGVyIEFXUyBzZXJ2aWNlcyBzdWNoIGFzIENsb3VkV2F0Y2ggQVBJcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTQ2xlYW5Sb29tc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NsZWFuUm9vbXNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0b3IgYWNjZXNzIHRvIEFXUyBDbG91ZDkuICovXG4gICAgcHVibGljIEFXU0Nsb3VkOUFkbWluaXN0cmF0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWQ5QWRtaW5pc3RyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGJlIGludml0ZWQgaW50byBBV1MgQ2xvdWQ5IHNoYXJlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMuICovXG4gICAgcHVibGljIEFXU0Nsb3VkOUVudmlyb25tZW50TWVtYmVyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkOUVudmlyb25tZW50TWVtYmVyKTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSBMaW5rZWQgUm9sZSBQb2xpY3kgZm9yIEFXUyBDbG91ZDkgKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWQ5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWQ5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSB3aWxsIGJlIHVzZWQgdG8gYXR0YWNoIGEgcm9sZSBvbiBhIEluc3RhbmNlUHJvZmlsZSB3aGljaCB3aWxsIGFsbG93IENsb3VkOSB0byB1c2UgdGhlIFNTTSBTZXNzaW9uIE1hbmFnZXIgdG8gY29ubmVjdCB0byB0aGUgaW5zdGFuY2UgKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWQ5U1NNSW5zdGFuY2VQcm9maWxlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkOVNTTUluc3RhbmNlUHJvZmlsZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb24gdG8gY3JlYXRlIEFXUyBDbG91ZDkgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzIGFuZCB0byBtYW5hZ2Ugb3duZWQgZW52aXJvbm1lbnRzLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZDlVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkOVVzZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgQ2xvdWRGb3JtYXRpb24uICovXG4gICAgcHVibGljIEFXU0Nsb3VkRm9ybWF0aW9uRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZEZvcm1hdGlvbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIENsb3VkRm9ybWF0aW9uIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRGb3JtYXRpb25SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZEZvcm1hdGlvblJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIENsb3VkRnJvbnQgTG9nZ2VyIHdyaXRlIHBlcm1pc3Npb25zIHRvIENsb3VkV2F0Y2ggTG9ncy4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRGcm9udExvZ2dlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZEZyb250TG9nZ2VyKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENsb3VkRnJvbnQgdG8gbWFuYWdlIEVDMiBFbGFzdGljIE5ldHdvcmsgSW50ZXJmYWNlcyBhbmQgU2VjdXJpdHkgR3JvdXBzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZEZyb250VlBDT3JpZ2luU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRGcm9udFZQQ09yaWdpblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIENsb3VkSFNNIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRIU01GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkSFNNRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIENsb3VkSFNNIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRIU01SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZEhTTVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBBV1MgQ2xvdWRIU00gc2VydmljZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZEhTTVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRIU01Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBDbG91ZCBNYXAgZGlzY292ZXJ5IEFQSS4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRNYXBEaXNjb3Zlckluc3RhbmNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkTWFwRGlzY292ZXJJbnN0YW5jZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBBV1MgQ2xvdWQgTWFwIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0Nsb3VkTWFwRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZE1hcEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIGFsbCBBV1MgQ2xvdWQgTWFwIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0Nsb3VkTWFwUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRNYXBSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlZ2lzdHJhbnQgbGV2ZWwgYWNjZXNzIHRvIEFXUyBDbG91ZCBNYXAgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRNYXBSZWdpc3Rlckluc3RhbmNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkTWFwUmVnaXN0ZXJJbnN0YW5jZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB1c2luZyBBV1MgQ2xvdWRTaGVsbCB3aXRoIGFsbCBmZWF0dXJlcyAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZFNoZWxsRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZFNoZWxsRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDbG91ZFRyYWlsLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZFRyYWlsRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZFRyYWlsRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIENsb3VkVHJhaWwuICovXG4gICAgcHVibGljIEFXU0Nsb3VkVHJhaWxSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZFRyYWlsUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyB1c2VkIGJ5IHRoZSBzZXJ2aWNlLWxpbmtlZCByb2xlIG5hbWVkIEFXU1NlcnZpY2VSb2xlRm9yQ2xvdWRXYXRjaEFsYXJtc19BY3Rpb25TU01JbmNpZGVudHMuIENsb3VkV2F0Y2ggdXNlcyB0aGlzIHNlcnZpY2UtbGlua2VkIHJvbGUgdG8gcGVyZm9ybSBBV1MgU3lzdGVtIE1hbmFnZXIgSW5jaWRlbnQgTWFuYWdlciBhY3Rpb25zIHdoZW4gYSBDbG91ZFdhdGNoIGFsYXJtIGdvZXMgaW4gdG8gQUxBUk0gc3RhdGUuIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9uIHRvIHN0YXJ0IGluY2lkZW50cyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRXYXRjaEFsYXJtc0FjdGlvblNTTUluY2lkZW50c1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkV2F0Y2hBbGFybXNBY3Rpb25TU01JbmNpZGVudHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDb2RlQXJ0aWZhY3QgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlQXJ0aWZhY3RBZG1pbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlQXJ0aWZhY3RBZG1pbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIENvZGVBcnRpZmFjdCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0NvZGVBcnRpZmFjdFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVBcnRpZmFjdFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIENvZGVCdWlsZCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuIEFsc28gYXR0YWNoIEFtYXpvblMzUmVhZE9ubHlBY2Nlc3MgdG8gcHJvdmlkZSBhY2Nlc3MgdG8gZG93bmxvYWQgYnVpbGQgYXJ0aWZhY3RzLCBhbmQgYXR0YWNoIElBTUZ1bGxBY2Nlc3MgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgdGhlIHNlcnZpY2Ugcm9sZSBmb3IgQ29kZUJ1aWxkLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlQnVpbGRBZG1pbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlQnVpbGRBZG1pbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgQ29kZUJ1aWxkIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSwgYnV0IGRvZXMgbm90IGFsbG93IENvZGVCdWlsZCBwcm9qZWN0IGFkbWluaXN0cmF0aW9uLiBBbHNvIGF0dGFjaCBBbWF6b25TM1JlYWRPbmx5QWNjZXNzIHRvIHByb3ZpZGUgYWNjZXNzIHRvIGRvd25sb2FkIGJ1aWxkIGFydGlmYWN0cy4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZUJ1aWxkRGV2ZWxvcGVyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVCdWlsZERldmVsb3BlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIENvZGVCdWlsZCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuIEFsc28gYXR0YWNoIEFtYXpvblMzUmVhZE9ubHlBY2Nlc3MgdG8gcHJvdmlkZSBhY2Nlc3MgdG8gZG93bmxvYWQgYnVpbGQgYXJ0aWZhY3RzLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlQnVpbGRSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlQnVpbGRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDb2RlQ29tbWl0IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZUNvbW1pdEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZUNvbW1pdEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgQ29kZUNvbW1pdCByZXBvc2l0b3JpZXMsIGJ1dCBkb2VzIG5vdCBhbGxvdyByZXBvc2l0b3J5IGRlbGV0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlQ29tbWl0UG93ZXJVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVDb21taXRQb3dlclVzZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBDb2RlQ29tbWl0IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZUNvbW1pdFJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVDb21taXRSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byByZWdpc3RlciBhbmQgZGVwbG95IGEgcmV2aXNpb24uICovXG4gICAgcHVibGljIEFXU0NvZGVEZXBsb3lEZXBsb3llckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlRGVwbG95RGVwbG95ZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBDb2RlRGVwbG95IHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZURlcGxveUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZURlcGxveUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIENvZGVEZXBsb3kgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlRGVwbG95UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZURlcGxveVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQ29kZURlcGxveSBzZXJ2aWNlIGFjY2VzcyB0byBleHBhbmQgdGFncyBhbmQgaW50ZXJhY3Qgd2l0aCBBdXRvIFNjYWxpbmcgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0NvZGVEZXBsb3lSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVEZXBsb3lSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQ29kZURlcGxveSBzZXJ2aWNlIGFjY2VzcyB0byBpbnZva2UgTGFtYmRhIGZ1bmN0aW9uIG9uIHlvdXIgYmVoYWxmIHRvIHBlcmZvcm0gYmx1ZS9ncmVlbiBkZXBsb3ltZW50IHRocm91Z2ggQ2xvdWRGb3JtYXRpb24uICovXG4gICAgcHVibGljIEFXU0NvZGVEZXBsb3lSb2xlRm9yQ2xvdWRGb3JtYXRpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZURlcGxveVJvbGVGb3JDbG91ZEZvcm1hdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIENvZGVEZXBsb3kgc2VydmljZSB3aWRlIGFjY2VzcyB0byBwZXJmb3JtIGFuIEVDUyBibHVlL2dyZWVuIGRlcGxveW1lbnQgb24geW91ciBiZWhhbGYuIEdyYW50cyBmdWxsIGFjY2VzcyB0byBzdXBwb3J0IHNlcnZpY2VzLCBzdWNoIGFzICBmdWxsIGFjY2VzcyB0byByZWFkIGFsbCBTMyBvYmplY3RzLCBpbnZva2UgYWxsIExhbWJkYSBmdW5jdGlvbnMsIHB1Ymxpc2ggdG8gYWxsIFNOUyB0b3BpY3Mgd2l0aGluIHRoZSBhY2NvdW50IGFuZCB1cGRhdGUgYWxsIEVDUyBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZURlcGxveVJvbGVGb3JFQ1MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZURlcGxveVJvbGVGb3JFQ1MpO1xuICAgIH1cblxuICAgIC8qKiAgUHJvdmlkZXMgQ29kZURlcGxveSBzZXJ2aWNlIGxpbWl0ZWQgYWNjZXNzIHRvIHBlcmZvcm0gYW4gRUNTIGJsdWUvZ3JlZW4gZGVwbG95bWVudCBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZURlcGxveVJvbGVGb3JFQ1NMaW1pdGVkKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVEZXBsb3lSb2xlRm9yRUNTTGltaXRlZCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIENvZGVEZXBsb3kgc2VydmljZSBhY2Nlc3MgdG8gcGVyZm9ybSBhIExhbWJkYSBkZXBsb3ltZW50IG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlRGVwbG95Um9sZUZvckxhbWJkYSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlRGVwbG95Um9sZUZvckxhbWJkYSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIENvZGVEZXBsb3kgc2VydmljZSBsaW1pdGVkIGFjY2VzcyB0byBwZXJmb3JtIGEgTGFtYmRhIGRlcGxveW1lbnQgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0NvZGVEZXBsb3lSb2xlRm9yTGFtYmRhTGltaXRlZCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlRGVwbG95Um9sZUZvckxhbWJkYUxpbWl0ZWQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgQ29kZVBpcGVsaW5lIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZVBpcGVsaW5lRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlUGlwZWxpbmVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgQ29kZVBpcGVsaW5lIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZVBpcGVsaW5lUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZVBpcGVsaW5lUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gdmlldyBhbmQgYXBwcm92ZSBtYW51YWwgY2hhbmdlcyBmb3IgYWxsIHBpcGVsaW5lcyAqL1xuICAgIHB1YmxpYyBBV1NDb2RlUGlwZWxpbmVBcHByb3ZlckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlUGlwZWxpbmVBcHByb3ZlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyBmb3IgY3VzdG9tIGFjdGlvbnMgdG8gcG9sbCBmb3Igam9icyBkZXRhaWxzIChpbmNsdWRpbmcgdGVtcG9yYXJ5IGNyZWRlbnRpYWxzKSBhbmQgcmVwb3J0IHN0YXR1cyB1cGRhdGVzIHRvIEFXUyBDb2RlUGlwZWxpbmUuICovXG4gICAgcHVibGljIEFXU0NvZGVQaXBlbGluZUN1c3RvbUFjdGlvbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlUGlwZWxpbmVDdXN0b21BY3Rpb25BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgQ29kZVN0YXIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlU3RhckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZVN0YXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBDb2RlU3RhciBOb3RpZmljYXRpb25zIHRvIGFjY2VzcyBBbWF6b24gQ2xvdWRXYXRjaCBFdmVudHMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTQ29kZVN0YXJOb3RpZmljYXRpb25zU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZVN0YXJOb3RpZmljYXRpb25zU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBETyBOT1QgVVNFIC0gIEFXUyBDb2RlU3RhciBTZXJ2aWNlIFJvbGUgUG9saWN5IHdoaWNoIGdyYW50cyBhZG1pbmlzdHJhdGl2ZSBwcml2aWxlZ2VzIGluIG9yZGVyIGZvciBDb2RlU3RhciB0byBtYW5hZ2UgSUFNIGFuZCBvdGhlciBzZXJ2aWNlIHJlc291cmNlcyBvbiBiZWhhbGYgb2YgdGhlIGN1c3RvbWVyLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlU3RhclNlcnZpY2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVTdGFyU2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBEZW5pZXMgYWNjZXNzIHRvIGNlcnRhaW4gYWN0aW9ucywgYXBwbGllZCBieSB0aGUgQVdTIHRlYW0gaW4gdGhlIGV2ZW50IHRoYXQgYW4gSUFNIHVzZXIncyBjcmVkZW50aWFscyBoYXZlIGJlZW4gY29tcHJvbWlzZWQgb3IgZXhwb3NlZCBwdWJsaWNseS4gIERvIE5PVCByZW1vdmUgdGhpcyBwb2xpY3kuICBJbnN0ZWFkLCBwbGVhc2UgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWVkIGluIHRoZSBlbWFpbCBzZW50IHRvIHlvdSByZWdhcmRpbmcgdGhpcyBldmVudC4gKi9cbiAgICBwdWJsaWMgQVdTQ29tcHJvbWlzZWRLZXlRdWFyYW50aW5lKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbXByb21pc2VkS2V5UXVhcmFudGluZSk7XG4gICAgfVxuXG4gICAgLyoqIERlbmllcyBhY2Nlc3MgdG8gY2VydGFpbiBhY3Rpb25zLCBhcHBsaWVkIGJ5IHRoZSBBV1MgdGVhbSBpbiB0aGUgZXZlbnQgdGhhdCBhbiBJQU0gdXNlcidzIGNyZWRlbnRpYWxzIGhhdmUgYmVlbiBjb21wcm9taXNlZCBvciBleHBvc2VkIHB1YmxpY2x5LiBEbyBOT1QgcmVtb3ZlIHRoaXMgcG9saWN5LiBJbnN0ZWFkLCBwbGVhc2UgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWVkIGluIHRoZSBzdXBwb3J0IGNhc2UgY3JlYXRlZCBmb3IgeW91IHJlZ2FyZGluZyB0aGlzIGV2ZW50LiAqL1xuICAgIHB1YmxpYyBBV1NDb21wcm9taXNlZEtleVF1YXJhbnRpbmVWMigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb21wcm9taXNlZEtleVF1YXJhbnRpbmVWMik7XG4gICAgfVxuXG4gICAgLyoqIERlbmllcyBhY2Nlc3MgdG8gY2VydGFpbiBhY3Rpb25zLCBhcHBsaWVkIGJ5IEFXUyBpbiB0aGUgZXZlbnQgdGhhdCBhbiBJQU0gdXNlcidzIGNyZWRlbnRpYWxzIGhhdmUgYmVlbiBjb21wcm9taXNlZCBvciBleHBvc2VkIHB1YmxpY2x5LiBUaGUgcG9saWN5IGFpbXMgdG8gbGltaXQgdGhlIHBvdGVudGlhbCBkYW1hZ2UgdGhhdCBtYXkgYmUgY2F1c2VkIGJ5IGZyYXVkLXJlbGF0ZWQgYWN0aXZpdHkgbGVhZGluZyB0byB1bmF1dGhvcml6ZWQgY2hhcmdlcywgd2hpbGUgbm90IGltcGFjdGluZyB0aGUgZXhpc3RpbmcgcmVzb3VyY2VzLiBEbyBOT1QgcmVtb3ZlIHRoaXMgcG9saWN5LiBJbnN0ZWFkLCBwbGVhc2UgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWVkIGluIHRoZSBzdXBwb3J0IGNhc2UgY3JlYXRlZCBmb3IgeW91IHJlZ2FyZGluZyB0aGlzIGV2ZW50LiAqL1xuICAgIHB1YmxpYyBBV1NDb21wcm9taXNlZEtleVF1YXJhbnRpbmVWMygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb21wcm9taXNlZEtleVF1YXJhbnRpbmVWMyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBDb25maWcgdG8gY2FsbCBBV1Mgc2VydmljZXMgYW5kIGRlcGxveSBjb25maWcgcmVzb3VyY2VzIGFjcm9zcyBvcmdhbml6YXRpb24gKi9cbiAgICBwdWJsaWMgQVdTQ29uZmlnTXVsdGlBY2NvdW50U2V0dXBQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29uZmlnTXVsdGlBY2NvdW50U2V0dXBQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIENvbmZpZyB0byByZW1lZGlhdGUgbm9uY29tcGxpYW50IHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTQ29uZmlnUmVtZWRpYXRpb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb25maWdSZW1lZGlhdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBDb25maWcgdG8gY2FsbCByZWFkLW9ubHkgQVdTIE9yZ2FuaXphdGlvbnMgQVBJcyAqL1xuICAgIHB1YmxpYyBBV1NDb25maWdSb2xlRm9yT3JnYW5pemF0aW9ucygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb25maWdSb2xlRm9yT3JnYW5pemF0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhbiBBV1MgTGFtYmRhIGZ1bmN0aW9uIHRvIGFjY2VzcyB0aGUgQVdTIENvbmZpZyBBUEkgYW5kIHRoZSBjb25maWd1cmF0aW9uIHNuYXBzaG90cyB0aGF0IEFXUyBDb25maWcgZGVsaXZlcnMgcGVyaW9kaWNhbGx5IHRvIEFtYXpvbiBTMy4gVGhpcyBhY2Nlc3MgaXMgcmVxdWlyZWQgYnkgZnVuY3Rpb25zIHRoYXQgZXZhbHVhdGUgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGZvciBjdXN0b20gQ29uZmlnIHJ1bGVzLiAqL1xuICAgIHB1YmxpYyBBV1NDb25maWdSdWxlc0V4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29uZmlnUnVsZXNFeGVjdXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENvbmZpZyB0byBjYWxsIEFXUyBzZXJ2aWNlcyBhbmQgY29sbGVjdCByZXNvdXJjZSBjb25maWd1cmF0aW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTQ29uZmlnU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29uZmlnU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgQVdTIENvbmZpZyB0byBpbnZlbnRvcnkgYW5kIGV2YWx1YXRlIGNvbXBsaWFuY2Ugb2YgdGhpcmQtcGFydHkgY2xvdWQgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDb25maWdUaGlyZFBhcnR5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29uZmlnVGhpcmRQYXJ0eVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHVzZSBBV1MgQ29uZmlnLCBpbmNsdWRpbmcgc2VhcmNoaW5nIGJ5IHRhZ3Mgb24gcmVzb3VyY2VzLCBhbmQgcmVhZGluZyBhbGwgdGFncy4gVGhpcyBkb2VzIG5vdCBwcm92aWRlIHBlcm1pc3Npb24gdG8gY29uZmlndXJlIEFXUyBDb25maWcsIHdoaWNoIHJlcXVpcmVzIGFkbWluaXN0cmF0aXZlIHByaXZpbGVnZXMuICovXG4gICAgcHVibGljIEFXU0NvbmZpZ1VzZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29uZmlnVXNlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYnJvYWQgcmVhZC93cml0ZSBhY2Nlc3MgdG8gQUxMIEVDMiBvYmplY3RzLCByZWFkL3dyaXRlIGFjY2VzcyB0byBTMyBidWNrZXRzIHN0YXJ0aW5nIHdpdGggJ2ltcG9ydC10by1lYzItJywgYW5kIHRoZSBhYmlsaXR5IHRvIGxpc3QgYWxsIFMzIGJ1Y2tldHMsIGZvciB0aGUgQVdTIENvbm5lY3RvciB0byBpbXBvcnQgVk1zIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDb25uZWN0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29ubmVjdG9yKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBDb250cm9sIFRvd2VyIHRvIGNhbGwgQVdTIHNlcnZpY2VzIHRoYXQgcHJvdmlkZSBhdXRvbWF0ZWQgYWNjb3VudCBjb25maWd1cmF0aW9uIGFuZCBjZW50cmFsaXplZCBnb3Zlcm5hbmNlIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDb250cm9sVG93ZXJBY2NvdW50U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29udHJvbFRvd2VyQWNjb3VudFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQVdTIENvbnRyb2wgVG93ZXIgZW5hYmxlcyBBV1MgQ2xvdWRUcmFpbCBhcyBhIGJlc3QgcHJhY3RpY2UgYW5kIHByb3ZpZGVzIHRoaXMgcm9sZSB0byBBV1MgQ2xvdWRUcmFpbC4gQVdTIENsb3VkVHJhaWwgYXNzdW1lcyB0aGlzIHJvbGUgdG8gY3JlYXRlIGFuZCBwdWJsaXNoIENsb3VkVHJhaWwgbG9ncyAqL1xuICAgIHB1YmxpYyBBV1NDb250cm9sVG93ZXJDbG91ZFRyYWlsUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb250cm9sVG93ZXJDbG91ZFRyYWlsUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIG1hbmFnZSB0aGUgSUFNIElkZW50aXR5IENlbnRlciAoSWRDKSByZXNvdXJjZXMgaW4gdGhlIG1lbWJlciBhY2NvdW50cyBlbnJvbGxlZCB3aXRoIEFXUyBDb250cm9sIFRvd2VyLiBUaGUgcG9saWN5IGlzIGF0dGFjaGVkIHRvIHRoZSBBV1NDb250cm9sVG93ZXJBZG1pbiByb2xlIG9ubHkgaWYgdGhlIGN1c3RvbWVyIGhhcyBvcHRlZC1pbnRvIElBTSBJZEMgaW50ZWdyYXRpb24gaW4gdGhlaXIgQVdTIENvbnRyb2wgVG93ZXIgTGFuZGluZyBab25lLiAqL1xuICAgIHB1YmxpYyBBV1NDb250cm9sVG93ZXJJZGVudGl0eUNlbnRlck1hbmFnZW1lbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29udHJvbFRvd2VySWRlbnRpdHlDZW50ZXJNYW5hZ2VtZW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBSZXNvdXJjZXMgbWFuYWdlZCBvciB1c2VkIGJ5IEFXUyBDb250cm9sIFRvd2VyICovXG4gICAgcHVibGljIEFXU0NvbnRyb2xUb3dlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbnRyb2xUb3dlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIHRvIGRlc2NyaWJlIHRoZSBvcmdhbml6YXRpb24gb2YgdGhlIGFjY291bnQsIGNyZWF0ZSBTMyBidWNrZXRzIGZvciB0aGUgTUFQIHByb2dyYW0gYW5kIGFwcGx5IHRhZ3MgdG8gaXQsIGNyZWF0ZSBhIENvc3QgYW5kIFVzYWdlIFJlcG9ydCwgYW5kIGRlc2NyaWJlIENvc3QgYW5kIFVzYWdlIFJlcG9ydCBkZWZpbml0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTQ29zdEFuZFVzYWdlUmVwb3J0QXV0b21hdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb3N0QW5kVXNhZ2VSZXBvcnRBdXRvbWF0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR2l2ZXMgRGF0YSBHcmFudCBvd25lcnMgYWNjZXNzIHRvIEFXUyBEYXRhIEV4Y2hhbmdlIGFjdGlvbnMgdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gKi9cbiAgICBwdWJsaWMgQVdTRGF0YUV4Y2hhbmdlRGF0YUdyYW50T3duZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFFeGNoYW5nZURhdGFHcmFudE93bmVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdpdmVzIERhdGEgR3JhbnQgcmVjZWl2ZXIgYWNjZXNzIHRvIEFXUyBEYXRhIEV4Y2hhbmdlIGFjdGlvbnMgdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gKi9cbiAgICBwdWJsaWMgQVdTRGF0YUV4Y2hhbmdlRGF0YUdyYW50UmVjZWl2ZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFFeGNoYW5nZURhdGFHcmFudFJlY2VpdmVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byBBV1MgRGF0YSBFeGNoYW5nZSBhbmQgQVdTIE1hcmtldHBsYWNlIGFjdGlvbnMgdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gSXQgYWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgbmVlZGVkIHRvIHRha2UgZnVsbCBhZHZhbnRhZ2Ugb2YgQVdTIERhdGEgRXhjaGFuZ2UuICovXG4gICAgcHVibGljIEFXU0RhdGFFeGNoYW5nZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YUV4Y2hhbmdlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBkYXRhIHByb3ZpZGVyIGFjY2VzcyB0byBBV1MgRGF0YSBFeGNoYW5nZSBhbmQgQVdTIE1hcmtldHBsYWNlIGFjdGlvbnMgdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gSXQgYWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgbmVlZGVkIHRvIHRha2UgZnVsbCBhZHZhbnRhZ2Ugb2YgQVdTIERhdGEgRXhjaGFuZ2UuICovXG4gICAgcHVibGljIEFXU0RhdGFFeGNoYW5nZVByb3ZpZGVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhRXhjaGFuZ2VQcm92aWRlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgRGF0YSBFeGNoYW5nZSBhbmQgQVdTIE1hcmtldHBsYWNlIGFjdGlvbnMgdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gKi9cbiAgICBwdWJsaWMgQVdTRGF0YUV4Y2hhbmdlUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YUV4Y2hhbmdlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIERhdGEgRXhjaGFuZ2UgdG8gYWNjZXNzIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBV1MgRGF0YSBFeGNoYW5nZSBmb3IgbGljZW5zZSBtYW5hZ2VtZW50LiAqL1xuICAgIHB1YmxpYyBBV1NEYXRhRXhjaGFuZ2VTZXJ2aWNlUm9sZVBvbGljeUZvckxpY2Vuc2VNYW5hZ2VtZW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFFeGNoYW5nZVNlcnZpY2VSb2xlUG9saWN5Rm9yTGljZW5zZU1hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIERhdGEgRXhjaGFuZ2UgdG8gcmVhZCBkYXRhIGFib3V0IHlvdXIgQVdTIE9yZ2FuaXphdGlvbiB0byBkZXRlcm1pbmUgZWxpZ2liaWxpdHkgZm9yIEFXUyBEYXRhIEV4Y2hhbmdlIGRhdGEgZ3JhbnRzIGxpY2Vuc2UgZGlzdHJpYnV0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NEYXRhRXhjaGFuZ2VTZXJ2aWNlUm9sZVBvbGljeUZvck9yZ2FuaXphdGlvbkRpc2NvdmVyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhRXhjaGFuZ2VTZXJ2aWNlUm9sZVBvbGljeUZvck9yZ2FuaXphdGlvbkRpc2NvdmVyeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBkYXRhIHN1YnNjcmliZXIgYWNjZXNzIHRvIEFXUyBEYXRhIEV4Y2hhbmdlIGFuZCBBV1MgTWFya2V0cGxhY2UgYWN0aW9ucyB1c2luZyB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgU0RLLiBJdCBhbHNvIHByb3ZpZGVzIHNlbGVjdCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyBuZWVkZWQgdG8gdGFrZSBmdWxsIGFkdmFudGFnZSBvZiBBV1MgRGF0YSBFeGNoYW5nZS4gKi9cbiAgICBwdWJsaWMgQVdTRGF0YUV4Y2hhbmdlU3Vic2NyaWJlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YUV4Y2hhbmdlU3Vic2NyaWJlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhcHByb3ByaWF0ZSBwZXJtaXNzaW9ucyB0byBBV1MgRGF0YSBMaWZlY3ljbGUgTWFuYWdlciB0byB0YWtlIGFjdGlvbnMgb24gQVdTIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NEYXRhTGlmZWN5Y2xlTWFuYWdlclNlcnZpY2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFMaWZlY3ljbGVNYW5hZ2VyU2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhcHByb3ByaWF0ZSBwZXJtaXNzaW9ucyB0byBBV1MgRGF0YSBMaWZlY3ljbGUgTWFuYWdlciB0byB0YWtlIGFjdGlvbnMgb24gQVdTIHJlc291cmNlcyBmb3IgQU1JIE1hbmFnZW1lbnQgKi9cbiAgICBwdWJsaWMgQVdTRGF0YUxpZmVjeWNsZU1hbmFnZXJTZXJ2aWNlUm9sZUZvckFNSU1hbmFnZW1lbnQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YUxpZmVjeWNsZU1hbmFnZXJTZXJ2aWNlUm9sZUZvckFNSU1hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBbWF6b24gRGF0YSBMaWZlY3ljbGUgTWFuYWdlciBwZXJtaXNzaW9uIHRvIHBlcmZvcm0gdGhlIFN5c3RlbXMgTWFuYWdlciBhY3Rpb25zIHJlcXVpcmVkIHRvIHJ1biBwcmUgYW5kIHBvc3Qgc2NyaXB0cyBvbiBhbGwgQW1hem9uIEVDMiBpbnN0YW5jZXMuICovXG4gICAgcHVibGljIEFXU0RhdGFMaWZlY3ljbGVNYW5hZ2VyU1NNRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhTGlmZWN5Y2xlTWFuYWdlclNTTUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBEYXRhIFBpcGVsaW5lLCBsaXN0IGFjY2VzcyBmb3IgUzMsIER5bmFtb0RCLCBSZWRzaGlmdCwgUkRTLCBTTlMsIGFuZCBJQU0gcm9sZXMsIGFuZCBwYXNzUm9sZSBhY2Nlc3MgZm9yIGRlZmF1bHQgUm9sZXMuICovXG4gICAgcHVibGljIEFXU0RhdGFQaXBlbGluZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YVBpcGVsaW5lRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIERhdGEgUGlwZWxpbmUsIGxpc3QgYWNjZXNzIGZvciBTMywgRHluYW1vREIsIFJlZHNoaWZ0LCBSRFMsIFNOUywgYW5kIElBTSByb2xlcywgYW5kIHBhc3NSb2xlIGFjY2VzcyBmb3IgZGVmYXVsdCBSb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTRGF0YVBpcGVsaW5lUG93ZXJVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFQaXBlbGluZVBvd2VyVXNlcik7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBEYXRhU3luYyBEaXNjb3ZlcnkgdG8gaW50ZWdyYXRlIHdpdGggb3RoZXIgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NEYXRhU3luY0Rpc2NvdmVyeVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFTeW5jRGlzY292ZXJ5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRGF0YVN5bmMgYW5kIG1pbmltYWwgYWNjZXNzIHRvIGl0cyBkZXBlbmRlbmNpZXMgKi9cbiAgICBwdWJsaWMgQVdTRGF0YVN5bmNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFTeW5jRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIERhdGFTeW5jICovXG4gICAgcHVibGljIEFXU0RhdGFTeW5jUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YVN5bmNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBEYXRhU3luYyB0byBpbnRlZ3JhdGUgd2l0aCBvdGhlciBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTRGF0YVN5bmNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhU3luY1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQVdTIERlYWRsaW5lIENsb3VkIHdvcmtlcnMgd2l0aCBhY2Nlc3MgdG8gcnVuIHRhc2tzIG9uIGEgZmFybS4gKi9cbiAgICBwdWJsaWMgQVdTRGVhZGxpbmVDbG91ZEZsZWV0V29ya2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlYWRsaW5lQ2xvdWRGbGVldFdvcmtlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHVzZXIgd29ya3N0YXRpb24gYWNjZXNzIHRvIEFXUyBEZWFkbGluZSBDbG91ZCBmYXJtcyB3aXRoIGxpbWl0ZWQgUmVhZC1Pbmx5IHBlcm1pc3Npb25zIHRvIGNhbGwgb3RoZXIgbmVjZXNzYXJ5IHNlcnZpY2VzLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8gdGhlIHVzZXIgcm9sZSBhc3NvY2lhdGVkIHdpdGggeW91ciBzdHVkaW8uICovXG4gICAgcHVibGljIEFXU0RlYWRsaW5lQ2xvdWRVc2VyQWNjZXNzRmFybXMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVhZGxpbmVDbG91ZFVzZXJBY2Nlc3NGYXJtcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHVzZXIgd29ya3N0YXRpb24gYWNjZXNzIHRvIEFXUyBEZWFkbGluZSBDbG91ZCBmbGVldHMgd2l0aCBsaW1pdGVkIFJlYWQtT25seSBwZXJtaXNzaW9ucyB0byBjYWxsIG90aGVyIG5lY2Vzc2FyeSBzZXJ2aWNlcy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHRoZSB1c2VyIHJvbGUgYXNzb2NpYXRlZCB3aXRoIHlvdXIgc3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBBV1NEZWFkbGluZUNsb3VkVXNlckFjY2Vzc0ZsZWV0cygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWFkbGluZUNsb3VkVXNlckFjY2Vzc0ZsZWV0cyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHVzZXIgd29ya3N0YXRpb24gYWNjZXNzIHRvIEFXUyBEZWFkbGluZSBDbG91ZCBqb2JzIHdpdGggbGltaXRlZCBSZWFkLU9ubHkgcGVybWlzc2lvbnMgdG8gY2FsbCBvdGhlciBuZWNlc3Nhcnkgc2VydmljZXMuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB0aGUgdXNlciByb2xlIGFzc29jaWF0ZWQgd2l0aCB5b3VyIHN0dWRpby4gKi9cbiAgICBwdWJsaWMgQVdTRGVhZGxpbmVDbG91ZFVzZXJBY2Nlc3NKb2JzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlYWRsaW5lQ2xvdWRVc2VyQWNjZXNzSm9icyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHVzZXIgd29ya3N0YXRpb24gYWNjZXNzIHRvIEFXUyBEZWFkbGluZSBDbG91ZCBxdWV1ZXMgd2l0aCBsaW1pdGVkIFJlYWQtT25seSBwZXJtaXNzaW9ucyB0byBjYWxsIG90aGVyIG5lY2Vzc2FyeSBzZXJ2aWNlcy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHRoZSB1c2VyIHJvbGUgYXNzb2NpYXRlZCB3aXRoIHlvdXIgc3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBBV1NEZWFkbGluZUNsb3VkVXNlckFjY2Vzc1F1ZXVlcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWFkbGluZUNsb3VkVXNlckFjY2Vzc1F1ZXVlcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyBmb3IgQVdTIERlYWRsaW5lIENsb3VkIHdvcmtlciBob3N0cyB0byBqb2luIGEgZmxlZXQgaW4gYSBmYXJtLiAqL1xuICAgIHB1YmxpYyBBV1NEZWFkbGluZUNsb3VkV29ya2VySG9zdCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWFkbGluZUNsb3VkV29ya2VySG9zdCk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHNwZWNpZmllcyBwZXJtaXNzaW9ucyByZXF1aXJlZCBieSBEZWVwTGVucyBBZG1pbmlzdHJhdGl2ZSBsYW1iZGEgZnVuY3Rpb25zIHRoYXQgcnVuIG9uIGEgRGVlcExlbnMgZGV2aWNlICovXG4gICAgcHVibGljIEFXU0RlZXBMZW5zTGFtYmRhRnVuY3Rpb25BY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVlcExlbnNMYW1iZGFGdW5jdGlvbkFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBBV1MgRGVlcExlbnMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcywgcmVzb3VyY2VzIGFuZCByb2xlcyBuZWVkZWQgYnkgRGVlcExlbnMgYW5kIGl0cyBkZXBlbmRlbmNpZXMgaW5jbHVkaW5nIElvVCwgUzMsIEdyZWVuR3Jhc3MgYW5kIEFXUyBMYW1iZGEuICovXG4gICAgcHVibGljIEFXU0RlZXBMZW5zU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVlcExlbnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIERlZXBSYWNlciBhZG1pbiBhY2Nlc3MgdG8gYWxsIGFjdGlvbnMgaW5jbHVkaW5nIHRvZ2dsaW5nIGJldHdlZW4gbXVsdGl1c2VyIGFuZCBzaW5nbGUgdXNlciBtb2RlLiAqL1xuICAgIHB1YmxpYyBBV1NEZWVwUmFjZXJBY2NvdW50QWRtaW5BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVlcFJhY2VyQWNjb3VudEFkbWluQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENsb3VkRm9ybWF0aW9uIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIEFXUyBzdGFja3MgYW5kIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRGVlcFJhY2VyQ2xvdWRGb3JtYXRpb25BY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVlcFJhY2VyQ2xvdWRGb3JtYXRpb25BY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBEZWVwUmFjZXIgTXVsdGlVc2VyIERlZmF1bHQgdXNlciBhY2Nlc3MgdG8gdXNlIGRlZXByYWNlciBpbiBtdWx0aS11c2VyIG1vZGUgKi9cbiAgICBwdWJsaWMgQVdTRGVlcFJhY2VyRGVmYXVsdE11bHRpVXNlckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWVwUmFjZXJEZWZhdWx0TXVsdGlVc2VyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIERlZXBSYWNlci4gQWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgKGUuZy4sIFMzKS4gKi9cbiAgICBwdWJsaWMgQVdTRGVlcFJhY2VyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWVwUmFjZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFJvYm9NYWtlciB0byBjcmVhdGUgcmVxdWlyZWQgcmVzb3VyY2VzIGFuZCBjYWxsIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRGVlcFJhY2VyUm9ib01ha2VyQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlZXBSYWNlclJvYm9NYWtlckFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBEZWVwUmFjZXIgdG8gY3JlYXRlIHJlcXVpcmVkIHJlc291cmNlcyBhbmQgY2FsbCBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0RlZXBSYWNlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlZXBSYWNlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRGVueSBhbGwgYWNjZXNzLiAqL1xuICAgIHB1YmxpYyBBV1NEZW55QWxsKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlbnlBbGwpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgQVdTIERldmljZSBGYXJtIG9wZXJhdGlvbnMuICovXG4gICAgcHVibGljIEFXU0RldmljZUZhcm1GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RldmljZUZhcm1GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnQgcGVybWlzc2lvbnMgdG8gQVdTIERldmljZSBGYXJtIHRvIGNhbGwgRUMyIE5ldHdvcmsgQVBJcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRGV2aWNlRmFybVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RldmljZUZhcm1TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50IHBlcm1pc3Npb25zIHRvIEFXUyBEZXZpY2UgRmFybSB0byBjYWxsIEVDMiBBUElzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NEZXZpY2VGYXJtVGVzdEdyaWRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZXZpY2VGYXJtVGVzdEdyaWRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBEaXJlY3QgQ29ubmVjdCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0RpcmVjdENvbm5lY3RGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RpcmVjdENvbm5lY3RGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgRGlyZWN0IENvbm5lY3QgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NEaXJlY3RDb25uZWN0UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGlyZWN0Q29ubmVjdFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQVdTIERpcmVjdCBDb25uZWN0IHBlcm1pc3Npb24gdG8gY3JlYXRlIGFuZCBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRGlyZWN0Q29ubmVjdFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RpcmVjdENvbm5lY3RTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBEaXJlY3RvcnkgU2VydmljZSBEYXRhLiAqL1xuICAgIHB1YmxpYyBBV1NEaXJlY3RvcnlTZXJ2aWNlRGF0YUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGlyZWN0b3J5U2VydmljZURhdGFGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgRGlyZWN0b3J5IFNlcnZpY2UgRGF0YSAqL1xuICAgIHB1YmxpYyBBV1NEaXJlY3RvcnlTZXJ2aWNlRGF0YVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RpcmVjdG9yeVNlcnZpY2VEYXRhUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRGlyZWN0b3J5IFNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU0RpcmVjdG9yeVNlcnZpY2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RpcmVjdG9yeVNlcnZpY2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgRGlyZWN0b3J5IFNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU0RpcmVjdG9yeVNlcnZpY2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEaXJlY3RvcnlTZXJ2aWNlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIHRoZSBEaXJlY3RvcnkgU2VydmljZSBTZXJ2aWNlIExpbmtlZCBSb2xlICovXG4gICAgcHVibGljIEFXU0RpcmVjdG9yeVNlcnZpY2VTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEaXJlY3RvcnlTZXJ2aWNlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB3cml0ZSBhY2Nlc3MgdG8gQVdTIHJlc291cmNlcyByZXF1aXJlZCBmb3IgQVdTIERpc2NvdmVyeSBDb250aW51b3VzIEV4cG9ydCAqL1xuICAgIHB1YmxpYyBBV1NEaXNjb3ZlcnlDb250aW51b3VzRXhwb3J0RmlyZWhvc2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGlzY292ZXJ5Q29udGludW91c0V4cG9ydEZpcmVob3NlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIERNUyBGbGVldCBBZHZpc29yIHRvIG1hbmFnZSBDbG91ZFdhdGNoIG1ldHJpY3Mgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0RNU0ZsZWV0QWR2aXNvclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RNU0ZsZWV0QWR2aXNvclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIEFXUyBETVMgU2VydmVybGVzcyBwZXJtaXNzaW9ucyB0byBjcmVhdGUgYW5kIG1hbmFnZSBETVMgcmVzb3VyY2VzIGluIHlvdXIgYWNjb3VudCBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBV1NETVNTZXJ2ZXJsZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRE1TU2VydmVybGVzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEVDMiBDYXBhY2l0eSBNYW5hZ2VyIHRvIG1hbmFnZSBjYXBhY2l0eSByZXNvdXJjZXMgYW5kIGludGVncmF0ZSB3aXRoIEFXUyBPcmdhbml6YXRpb25zIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NFQzJDYXBhY2l0eU1hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFQzJDYXBhY2l0eU1hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBFQzIgQ2FwYWNpdHlSZXNlcnZhdGlvbiBGbGVldCBzZXJ2aWNlIHRvIG1hbmFnZSBDYXBhY2l0eSBSZXNlcnZhdGlvbnMgKi9cbiAgICBwdWJsaWMgQVdTRUMyQ2FwYWNpdHlSZXNlcnZhdGlvbkZsZWV0Um9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFQzJDYXBhY2l0eVJlc2VydmF0aW9uRmxlZXRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEVDMiBGbGVldCB0byBsYXVuY2ggYW5kIG1hbmFnZSBpbnN0YW5jZXMuICovXG4gICAgcHVibGljIEFXU0VDMkZsZWV0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRUMyRmxlZXRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBFQzIgU3BvdCBGbGVldCB0byBsYXVuY2ggYW5kIG1hbmFnZSBzcG90IGZsZWV0IGluc3RhbmNlcyAqL1xuICAgIHB1YmxpYyBBV1NFQzJTcG90RmxlZXRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFQzJTcG90RmxlZXRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBFQzIgU3BvdCB0byBsYXVuY2ggYW5kIG1hbmFnZSBzcG90IGluc3RhbmNlcyAqL1xuICAgIHB1YmxpYyBBV1NFQzJTcG90U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRUMyU3BvdFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIEVDMiBpbnN0YW5jZSBwZXJtaXNzaW9ucyB0byBhbGxvdyBFQzIgU1FMIEhpZ2ggQXZhaWxhYmlsaXR5IHNlcnZpY2UgdG8gZGV0ZWN0IGluc3RhbmNlIGhpZ2ggYXZhaWxhYmlsaXR5IHN0YXRlIHRocm91Z2ggRUMyIGluc3RhbmNlIHByb2ZpbGUuICovXG4gICAgcHVibGljIEFXU0VDMlNxbEhhSW5zdGFuY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRUMyU3FsSGFJbnN0YW5jZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVDMiBTUUwgSGlnaCBBdmFpbGFiaWxpdHkgc2VydmljZSBwZXJtaXNzaW9ucyB0byBkZXRlY3Qgc3RhbmRieS9wYXNzaXZlIGluc3RhbmNlcyAqL1xuICAgIHB1YmxpYyBBV1NFQzJTcWxIYVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VDMlNxbEhhU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQW1hem9uIEVDMiBhbmQgQVdTIFNTTSBwZXJtaXNzaW9ucyB0byByZXN0b3JlIFNRTCBTZXJ2ZXIgZGF0YWJhc2UgZnJvbSBhcHBsaWNhdGlvbiBjb25zaXN0ZW50IHNuYXBzaG90cyBjcmVhdGVkIGJ5IEFXUyBWU1MuICovXG4gICAgcHVibGljIEFXU0VDMlZzc1Jlc3RvcmVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRUMyVnNzUmVzdG9yZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIHRvIHRoZSBJQU0gcm9sZSB0aGF0J3MgYXR0YWNoZWQgdG8geW91ciBBbWF6b24gRUMyIFdpbmRvd3MgSW5zdGFuY2VzIHRvIGVuYWJsZSB0aGUgQW1hem9uIEVDMiBWU1Mgc29sdXRpb24gdG8gY3JlYXRlIGFuZCBhZGQgdGFncyB0byBBbWF6b24gTWFjaGluZSBJbWFnZXMgKEFNSSkgYW5kIEVCUyBTbmFwc2hvdHMuICovXG4gICAgcHVibGljIEFXU0VDMlZzc1NuYXBzaG90UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VDMlZzc1NuYXBzaG90UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFXUyBFQ1IgcHVsbCB0aHJvdWdoIGNhY2hlICovXG4gICAgcHVibGljIEFXU0VDUlB1bGxUaHJvdWdoQ2FjaGVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFQ1JQdWxsVGhyb3VnaENhY2hlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHRoZSBpbnN0YW5jZSBpbiB5b3VyIGN1c3RvbSBwbGF0Zm9ybSBidWlsZGVyIGVudmlyb25tZW50IHBlcm1pc3Npb24gdG8gbGF1bmNoIEVDMiBpbnN0YW5jZSwgY3JlYXRlIEVCUyBzbmFwc2hvdCBhbmQgQU1JLCBzdHJlYW0gbG9ncyB0byBBbWF6b24gQ2xvdWRXYXRjaCBMb2dzLCBhbmQgc3RvcmUgYXJ0aWZhY3RzIGluIEFtYXpvbiBTMy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa0N1c3RvbVBsYXRmb3JtZm9yRUMyUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrQ3VzdG9tUGxhdGZvcm1mb3JFQzJSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgbmVlZGVkIGJ5IEVsYXN0aWMgQmVhbnN0YWxrIHRvIGJ1aWxkIGNvbnRhaW5lciBpbWFnZXMgb24gYmVoYWxmIG9mIGN1c3RvbWVyLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrRUtTSW1hZ2VCdWlsZCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrRUtTSW1hZ2VCdWlsZCk7XG4gICAgfVxuXG4gICAgLyoqIE9ic2VydmFiaWxpdHkgcGVybWlzc2lvbnMgZm9yIEVsYXN0aWMgQmVhbnN0YWxrIGVudmlyb25tZW50cyBydW5uaW5nIGluIEVsYXN0aWMgS3ViZXJuZXRlcyBTZXJ2aWNlIGNsdXN0ZXIgKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa0VLU09ic2VydmFiaWxpdHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa0VLU09ic2VydmFiaWxpdHkpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyBuZWVkZWQgdG8gcGFzcyB0aHJvdWdoIHRhZ3MgdG8gcmVzb3VyY2VzIGNyZWF0ZWQgYnkgRUtTIENvbnRyb2xsZXJzICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtFS1NUYWdnaW5nKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtFS1NUYWdnaW5nKTtcbiAgICB9XG5cbiAgICAvKiogQVdTIEVsYXN0aWMgQmVhbnN0YWxrIFNlcnZpY2UgcG9saWN5IGZvciBIZWFsdGggTW9uaXRvcmluZyBzeXN0ZW0gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa0VuaGFuY2VkSGVhbHRoKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtFbmhhbmNlZEhlYWx0aCk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBFbGFzdGljIEJlYW5zdGFsayBTZXJ2aWNlIFJvbGUgcG9saWN5IHRoYXQgZ3JhbnRzIGxpbWl0ZWQgcGVybWlzc2lvbnMgdG8gdXBkYXRlIHlvdXIgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmIGZvciBtYWludGVuYW5jZSBwdXJwb3Nlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa01haW50ZW5hbmNlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtNYWludGVuYW5jZSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIGZvciB0aGUgQVdTIEVsYXN0aWMgQmVhbnN0YWxrIHNlcnZpY2Ugcm9sZSB1c2VkIHRvIHBlcmZvcm0gbWFuYWdlZCB1cGRhdGVzIG9mIEVsYXN0aWMgQmVhbnN0YWxrIGVudmlyb25tZW50cy4gVGhpcyBwb2xpY3kgc2hvdWxkIG5vdCBiZSBhdHRhY2hlZCB0byBvdGhlciB1c2VycyBvciByb2xlcy4gVGhlIHBvbGljeSBncmFudHMgYnJvYWQgcGVybWlzc2lvbnMgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgcmVzb3VyY2VzIGFjcm9zcyBhIG51bWJlciBvZiBBV1Mgc2VydmljZXMgaW5jbHVkaW5nIEF1dG9TY2FsaW5nLCBFQzIsIEVDUywgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyBhbmQgQ2xvdWRGb3JtYXRpb24uICBUaGlzIHBvbGljeSBhbHNvIGFsbG93cyBwYXNzaW5nIG9mIGFueSBJQU0gcm9sZSB1c2FibGUgd2l0aCB0aG9zZSBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa01hbmFnZWRVcGRhdGVzQ3VzdG9tZXJSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtNYW5hZ2VkVXBkYXRlc0N1c3RvbWVyUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBFbGFzdGljIEJlYW5zdGFsayBTZXJ2aWNlIFJvbGUgcG9saWN5IHRoYXQgZ3JhbnRzIGxpbWl0ZWQgcGVybWlzc2lvbnMgdG8gbWFuYWdlZCB1cGRhdGVzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrTWFuYWdlZFVwZGF0ZXNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrTWFuYWdlZFVwZGF0ZXNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgdGhlIGluc3RhbmNlcyBpbiB5b3VyIG11bHRpY29udGFpbmVyIERvY2tlciBlbnZpcm9ubWVudCBhY2Nlc3MgdG8gdXNlIHRoZSBBbWF6b24gRUMyIENvbnRhaW5lciBTZXJ2aWNlIHRvIG1hbmFnZSBjb250YWluZXIgZGVwbG95bWVudCB0YXNrcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa011bHRpY29udGFpbmVyRG9ja2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtNdWx0aWNvbnRhaW5lckRvY2tlcik7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyByZWFkLW9ubHkgcGVybWlzc2lvbnMuIEV4cGxpY2l0bHkgYWxsb3dzIG9wZXJhdG9ycyB0byBnYWluIGRpcmVjdCBhY2Nlc3MgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gQVdTIEVsYXN0aWMgQmVhbnN0YWxrIGFwcGxpY2F0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIEFXU0VsYXN0aWNCZWFuc3RhbGtSb2xlQ29yZSAoRWxhc3RpYyBCZWFuc3RhbGsgb3BlcmF0aW9ucyByb2xlKSBBbGxvd3MgY29yZSBvcGVyYXRpb24gb2YgYSB3ZWIgc2VydmljZSBlbnZpcm9ubWVudC4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVDb3JlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtSb2xlQ29yZSk7XG4gICAgfVxuXG4gICAgLyoqIChFbGFzdGljIEJlYW5zdGFsayBvcGVyYXRpb25zIHJvbGUpIEFsbG93cyBhbiBlbnZpcm9ubWVudCB0byBtYW5hZ2UgQW1hem9uIENsb3VkV2F0Y2ggTG9ncyBsb2cgZ3JvdXBzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrUm9sZUNXTCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrUm9sZUNXTCk7XG4gICAgfVxuXG4gICAgLyoqIChFbGFzdGljIEJlYW5zdGFsayBvcGVyYXRpb25zIHJvbGUpIEFsbG93cyBhIG11bHRpY29udGFpbmVyIERvY2tlciBlbnZpcm9ubWVudCB0byBtYW5hZ2UgQW1hem9uIEVDUyBjbHVzdGVycy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVFQ1MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVFQ1MpO1xuICAgIH1cblxuICAgIC8qKiAoRWxhc3RpYyBCZWFuc3RhbGsgb3BlcmF0aW9ucyByb2xlKSBBbGxvd3MgYW4gZW52aXJvbm1lbnQgdG8gaW50ZWdyYXRlIGFuIEFtYXpvbiBSRFMgaW5zdGFuY2UuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtSb2xlUkRTKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtSb2xlUkRTKTtcbiAgICB9XG5cbiAgICAvKiogKEVsYXN0aWMgQmVhbnN0YWxrIG9wZXJhdGlvbnMgcm9sZSkgQWxsb3dzIGFuIGVudmlyb25tZW50IHRvIGVuYWJsZSBBbWF6b24gU05TIHRvcGljIGludGVncmF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrUm9sZVNOUygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrUm9sZVNOUyk7XG4gICAgfVxuXG4gICAgLyoqIChFbGFzdGljIEJlYW5zdGFsayBvcGVyYXRpb25zIHJvbGUpIEFsbG93cyBhIHdvcmtlciBlbnZpcm9ubWVudCB0aWVyIHRvIGNyZWF0ZSBhbiBBbWF6b24gRHluYW1vREIgdGFibGUgYW5kIGFuIEFtYXpvbiBTUVMgcXVldWUuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtSb2xlV29ya2VyVGllcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrUm9sZVdvcmtlclRpZXIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBvbiBhIGRlcHJlY2F0aW9uIHBhdGguIFNlZSBkb2N1bWVudGF0aW9uIGZvciBndWlkYW5jZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNiZWFuc3RhbGsvbGF0ZXN0L2RnL2lhbS1zZXJ2aWNlcm9sZS5odG1sLiBBV1MgRWxhc3RpYyBCZWFuc3RhbGsgU2VydmljZSByb2xlIHBvbGljeSB3aGljaCBncmFudHMgcGVybWlzc2lvbnMgdG8gY3JlYXRlICYgbWFuYWdlIHJlc291cmNlcyAoaS5lLjogQXV0b1NjYWxpbmcsIEVDMiwgUzMsIENsb3VkRm9ybWF0aW9uLCBFTEIsIGV0Yy4pIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrU2VydmljZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrU2VydmljZSk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBFbGFzdGljIEJlYW5zdGFsayBTZXJ2aWNlIExpbmtlZCBSb2xlIHBvbGljeSB3aGljaCBncmFudHMgcGVybWlzc2lvbnMgdG8gY3JlYXRlICYgbWFuYWdlIHJlc291cmNlcyAoaS5lLjogQXV0b1NjYWxpbmcsIEVDMiwgUzMsIENsb3VkRm9ybWF0aW9uLCBFTEIsIGV0Yy4pIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSB0aGUgaW5zdGFuY2VzIGluIHlvdXIgd2ViIHNlcnZlciBlbnZpcm9ubWVudCBhY2Nlc3MgdG8gdXBsb2FkIGxvZyBmaWxlcyB0byBBbWF6b24gUzMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtXZWJUaWVyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtXZWJUaWVyKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSB0aGUgaW5zdGFuY2VzIGluIHlvdXIgd29ya2VyIGVudmlyb25tZW50IGFjY2VzcyB0byB1cGxvYWQgbG9nIGZpbGVzIHRvIEFtYXpvbiBTMywgdG8gdXNlIEFtYXpvbiBTUVMgdG8gbW9uaXRvciB5b3VyIGFwcGxpY2F0aW9uJ3Mgam9iIHF1ZXVlLCB0byB1c2UgQW1hem9uIER5bmFtb0RCIHRvIHBlcmZvcm0gbGVhZGVyIGVsZWN0aW9uLCBhbmQgdG8gQW1hem9uIENsb3VkV2F0Y2ggdG8gcHVibGlzaCBtZXRyaWNzIGZvciBoZWFsdGggbW9uaXRvcmluZy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa1dvcmtlclRpZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa1dvcmtlclRpZXIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgaW5zdGFsbGluZyB0aGUgQVdTIFJlcGxpY2F0aW9uIEFnZW50LCB3aGljaCBpcyB1c2VkIHdpdGggQVdTIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKERSUykgdG8gcmVjb3ZlciBleHRlcm5hbCBzZXJ2ZXJzIHRvIEFXUy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzIHdob3NlIGNyZWRlbnRpYWxzIHlvdSBwcm92aWRlIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHN0ZXAgb2YgdGhlIEFXUyBSZXBsaWNhdGlvbiBBZ2VudC4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlBZ2VudEluc3RhbGxhdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUFnZW50SW5zdGFsbGF0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIHVzaW5nIHRoZSBBV1MgUmVwbGljYXRpb24gQWdlbnQsIHdoaWNoIGlzIHVzZWQgd2l0aCBBV1MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoRFJTKSB0byByZWNvdmVyIHNvdXJjZSBzZXJ2ZXJzIHRvIEFXUy4gV2UgZG8gbm90IHJlY29tbWVuZCB0aGF0IHlvdSBhdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5QWdlbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlBZ2VudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBwdWJsaWMgQVBJcyBvZiBBV1MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoRFJTKSwgYXMgd2VsbCBhcyBwZXJtaXNzaW9ucyB0byByZWFkIEtNUyBrZXksIExpY2Vuc2UgTWFuYWdlciwgUmVzb3VyY2UgR3JvdXBzLCBFbGFzdGljIExvYWQgQmFsYW5jaW5nLCBJQU0sIGFuZCBFQzIgaW5mb3JtYXRpb24uIEF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIHB1YmxpYyBBUElzIG9mIEFXUyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChBV1MgRFJTKSwgYXMgd2VsbCBhcyBhbGwgcHVibGljIEFQSXMgaW4gb3RoZXIgQVdTIHNlcnZpY2VzIHVzZWQgYnkgQVdTIERSUyBDb25zb2xlLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlDb25zb2xlRnVsbEFjY2Vzc1YyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5Q29uc29sZUZ1bGxBY2Nlc3NWMik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIHRvIHRoZSBBV1MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSBDb252ZXJzaW9uIHNlcnZlcidzIGluc3RhbmNlIHJvbGUuIFRoaXMgcG9saWN5IGFsbG93cyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpIENvbnZlcnNpb24gU2VydmVycywgd2hpY2ggYXJlIEVDMiBpbnN0YW5jZXMgbGF1bmNoZWQgYnkgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSwgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgRFJTIHNlcnZpY2UuIEFuIElBTSByb2xlIHdpdGggdGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgKGFzIGFuIEVDMiBJbnN0YW5jZSBQcm9maWxlKSBieSBEUlMgdG8gdGhlIERSUyBDb252ZXJzaW9uIFNlcnZlcnMsIHdoaWNoIGFyZSBhdXRvbWF0aWNhbGx5IGxhdW5jaGVkIGFuZCB0ZXJtaW5hdGVkIGJ5IERSUywgd2hlbiBuZWVkZWQuIFdlIGRvIG5vdCByZWNvbW1lbmQgdGhhdCB5b3UgYXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiBEUlMgQ29udmVyc2lvbiBTZXJ2ZXJzIGFyZSB1c2VkIGJ5IEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3Zlcnkgd2hlbiB1c2VycyBjaG9vc2UgdG8gcmVjb3ZlciBzb3VyY2Ugc2VydmVycyB1c2luZyB0aGUgRFJTIGNvbnNvbGUsIENMSSwgb3IgQVBJLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUNvbnZlcnNpb25TZXJ2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlDb252ZXJzaW9uU2VydmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIEFXUyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpIHRvIHN1cHBvcnQgY3Jvc3MtYWNjb3VudCByZXBsaWNhdGlvbiBhbmQgY3Jvc3MtYWNjb3VudCBmYWlsYmFjay4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlDcm9zc0FjY291bnRSZXBsaWNhdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUNyb3NzQWNjb3VudFJlcGxpY2F0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIGluc3RhbGxpbmcgYW5kIHVzaW5nIHRoZSBBV1MgUmVwbGljYXRpb24gQWdlbnQsIHdoaWNoIGlzIHVzZWQgYnkgQVdTIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKERSUykgdG8gcmVjb3ZlciBzb3VyY2Ugc2VydmVycyB0aGF0IHJ1biBvbiBFQzIgKGNyb3NzLXJlZ2lvbiBvciBjcm9zcy1BWikuIEFuIElBTSByb2xlIHdpdGggdGhpcyBwb2xpY3kgc2hvdWxkIGJlIGF0dGFjaGVkIChhcyBhbiBFQzIgSW5zdGFuY2UgUHJvZmlsZSkgdG8gdGhlIEVDMiBJbnN0YW5jZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5RWMySW5zdGFuY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlFYzJJbnN0YW5jZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFlvdSBjYW4gYXR0YWNoIHRoZSBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUZhaWxiYWNrSW5zdGFsbGF0aW9uUG9saWN5IHBvbGljeSB0byB5b3VyIElBTSBpZGVudGl0aWVzLiAgVGhpcyBwb2xpY3kgYWxsb3dzIGluc3RhbGxpbmcgdGhlIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgRmFpbGJhY2sgQ2xpZW50LCB3aGljaCBpcyB1c2VkIHRvIGZhaWxiYWNrIFJlY292ZXJ5IEluc3RhbmNlcyBiYWNrIHRvIHlvdXIgb3JpZ2luYWwgc291cmNlIGluZnJhc3RydWN0dXJlLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMgd2hvc2UgY3JlZGVudGlhbHMgeW91IHByb3ZpZGUgd2hlbiBydW5uaW5nIHRoZSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IEZhaWxiYWNrIENsaWVudC4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlGYWlsYmFja0luc3RhbGxhdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUZhaWxiYWNrSW5zdGFsbGF0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIHVzaW5nIHRoZSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IEZhaWxiYWNrIENsaWVudCwgd2hpY2ggaXMgdXNlZCB0byBmYWlsYmFjayBSZWNvdmVyeSBJbnN0YW5jZXMgYmFjayB0byB5b3VyIG9yaWdpbmFsIHNvdXJjZSBpbmZyYXN0cnVjdHVyZS4gV2UgZG8gbm90IHJlY29tbWVuZCB0aGF0IHlvdSBhdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5RmFpbGJhY2tQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlGYWlsYmFja1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyB5b3UgdG8gdXNlIEFtYXpvbiBTU00gYW5kIGFkZGl0aW9uYWwgc2VydmljZXMgcmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gcnVuIHBvc3QtbGF1bmNoIGFjdGlvbnMgaW4gQVdTIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKEFXUyBEUlMpLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gcm9sZXMgb3IgdXNlcnMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5TGF1bmNoQWN0aW9uc1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUxhdW5jaEFjdGlvbnNQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgQVdTIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKERSUykgdG8gc3VwcG9ydCBuZXR3b3JrIHJlcGxpY2F0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeU5ldHdvcmtSZXBsaWNhdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeU5ldHdvcmtSZXBsaWNhdGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFlvdSBjYW4gYXR0YWNoIHRoZSBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVJlYWRPbmx5QWNjZXNzIHBvbGljeSB0byB5b3VyIElBTSBpZGVudGl0aWVzLiAgVGhpcyBwb2xpY3kgcHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gYWxsIHJlYWQtb25seSBwdWJsaWMgQVBJcyBvZiBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpLCBhcyB3ZWxsIGFzIHNvbWUgcmVhZC1vbmx5IEFQSXMgb2Ygb3RoZXIgQVdTIHNlcnZpY2VzIHRoYXQgYXJlIHJlcXVpcmVkIGluIG9yZGVyIHRvIG1ha2UgZnVsbCByZWFkLW9ubHkgdXNlIG9mIHRoZSBEUlMgY29uc29sZS4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBhdHRhY2hlZCB0byB0aGUgaW5zdGFuY2Ugcm9sZSBvZiBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5J3MgUmVjb3ZlcnkgSW5zdGFuY2UuICBUaGlzIHBvbGljeSBhbGxvd3MgdGhlIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKERSUykgUmVjb3ZlcnkgSW5zdGFuY2UsIHdoaWNoIGFyZSBFQzIgaW5zdGFuY2VzIGxhdW5jaGVkIGJ5IEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgLSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBEUlMgc2VydmljZSwgYW5kIHRvIGJlIGFibGUgdG8gZmFpbGJhY2sgdG8gdGhlaXIgb3JpZ2luYWwgc291cmNlIGluZnJhc3RydWN0dXJlLiBBbiBJQU0gcm9sZSB3aXRoIHRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIChhcyBhbiBFQzIgSW5zdGFuY2UgUHJvZmlsZSkgYnkgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSB0byB0aGUgRFJTIFJlY292ZXJ5IEluc3RhbmNlcy4gV2UgZG8gbm90IHJlY29tbWVuZCB0aGF0IHlvdSBhdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5UmVjb3ZlcnlJbnN0YW5jZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVJlY292ZXJ5SW5zdGFuY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBhdHRhY2hlZCB0byB0aGUgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSBSZXBsaWNhdGlvbiBzZXJ2ZXIncyBpbnN0YW5jZSByb2xlLiBUaGlzIHBvbGljeSBhbGxvd3MgdGhlIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKERSUykgUmVwbGljYXRpb24gU2VydmVycywgd2hpY2ggYXJlIEVDMiBpbnN0YW5jZXMgbGF1bmNoZWQgYnkgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAtIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIERSUyBzZXJ2aWNlLCBhbmQgdG8gY3JlYXRlIEVCUyBzbmFwc2hvdHMgaW4geW91ciBBV1MgYWNjb3VudC4gQW4gSUFNIHJvbGUgd2l0aCB0aGlzIHBvbGljeSBpcyBhdHRhY2hlZCAoYXMgYW4gRUMyIEluc3RhbmNlIFByb2ZpbGUpIGJ5IEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgdG8gdGhlIERSUyBSZXBsaWNhdGlvbiBTZXJ2ZXJzIHdoaWNoIGFyZSBhdXRvbWF0aWNhbGx5IGxhdW5jaGVkIGFuZCB0ZXJtaW5hdGVkIGJ5IERSUywgYXMgbmVlZGVkLiBEUlMgUmVwbGljYXRpb24gU2VydmVycyBhcmUgdXNlZCB0byBmYWNpbGl0YXRlIGRhdGEgcmVwbGljYXRpb24gZnJvbSB5b3VyIGV4dGVybmFsIHNlcnZlcnMgdG8gQVdTLCBhcyBwYXJ0IG9mIHRoZSByZWNvdmVyeSBwcm9jZXNzIG1hbmFnZWQgYnkgRFJTLiBXZSBkbyBub3QgcmVjb21tZW5kIHRoYXQgeW91IGF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlSZXBsaWNhdGlvblNlcnZlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVJlcGxpY2F0aW9uU2VydmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpIHJlc291cmNlcyBzdWNoIGFzIHNvdXJjZSBzZXJ2ZXJzIGFuZCBqb2JzLiBJdCBhbHNvIGFsbG93cyBjcmVhdGluZyBhIGNvbnZlcnRlZCBzbmFwc2hvdCBhbmQgc2hhcmluZyB0aGF0IEVCUyBzbmFwc2hvdCB3aXRoIGEgc3BlY2lmaWMgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlTdGFnaW5nQWNjb3VudFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVN0YWdpbmdBY2NvdW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgdXNlZCBieSBBV1MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoRFJTKSB0byByZWNvdmVyIHNvdXJjZSBzZXJ2ZXJzIGludG8gYSBzZXBhcmF0ZSB0YXJnZXQgYWNjb3VudCBhbmQgdG8gYWxsb3cgZmFpbGluZyBiYWNrLiBXZSBkbyBub3QgcmVjb21tZW5kIHRoYXQgeW91IGF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlTdGFnaW5nQWNjb3VudFBvbGljeVYyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5U3RhZ2luZ0FjY291bnRQb2xpY3lWMik7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UgTGlua2VkIFJvbGUgUG9saWN5IGZvciBBV1MgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyBDb250cm9sIFBsYW5lIC0gQ2xhc3NpYyAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljTG9hZEJhbGFuY2luZ0NsYXNzaWNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljTG9hZEJhbGFuY2luZ0NsYXNzaWNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UgTGlua2VkIFJvbGUgUG9saWN5IGZvciBBV1MgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyBDb250cm9sIFBsYW5lICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNMb2FkQmFsYW5jaW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0xvYWRCYWxhbmNpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGNyZWF0ZSBNZWRpYUNvbm5lY3QgR2F0ZXdheSBCcmlkZ2VzIGFuZCBhbGwgaXRzIGFzc29jaWF0ZWQgc3ViLXJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFDb25uZWN0Q3JlYXRlQnJpZGdlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhQ29ubmVjdENyZWF0ZUJyaWRnZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGNyZWF0ZSBNZWRpYUNvbm5lY3QgRmxvd3MgYW5kIGFsbCBpdHMgYXNzb2NpYXRlZCBzdWItcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGVtZW50YWxNZWRpYUNvbm5lY3RDcmVhdGVGbG93KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhQ29ubmVjdENyZWF0ZUZsb3cpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBkZWxldGUgTWVkaWFDb25uZWN0IEdhdGV3YXkgQnJpZGdlcyBhbmQgYWxsIGl0cyBhc3NvY2lhdGVkIHN1Yi1yZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhQ29ubmVjdERlbGV0ZUJyaWRnZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYUNvbm5lY3REZWxldGVCcmlkZ2UpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBkZWxldGUgTWVkaWFDb25uZWN0IEZsb3dzIGFuZCBhbGwgaXRzIGFzc29jaWF0ZWQgc3ViLXJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFDb25uZWN0RGVsZXRlRmxvdygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYUNvbm5lY3REZWxldGVGbG93KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYUNvbm5lY3QgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGVtZW50YWxNZWRpYUNvbm5lY3RGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhQ29ubmVjdEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBFbGVtZW50YWwgTWVkaWFDb25uZWN0IHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFDb25uZWN0UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFDb25uZWN0UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhQ29udmVydCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFDb252ZXJ0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYUNvbnZlcnRGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhQ29udmVydCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFDb252ZXJ0UmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFDb252ZXJ0UmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhTGl2ZSByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFMaXZlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYUxpdmVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhTGl2ZSByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFMaXZlUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFMaXZlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhUGFja2FnZSByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFQYWNrYWdlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYVBhY2thZ2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhUGFja2FnZSByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFQYWNrYWdlUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFQYWNrYWdlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhUGFja2FnZVYyIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFQYWNrYWdlVjJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhUGFja2FnZVYyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYVBhY2thZ2VWMiByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhUGFja2FnZVYyUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFQYWNrYWdlVjJSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgcmVhZCBhbmQgd3JpdGUgYWNjZXNzIHRvIGFsbCBNZWRpYVN0b3JlIEFQSXMgKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFTdG9yZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFTdG9yZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgcGVybWlzc2lvbnMgZm9yIE1lZGlhU3RvcmUgQVBJcyAqL1xuICAgIHB1YmxpYyBBV1NFbGVtZW50YWxNZWRpYVN0b3JlUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFTdG9yZVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYVRhaWxvciByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFUYWlsb3JGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhVGFpbG9yRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYVRhaWxvciByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFUYWlsb3JSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYVRhaWxvclJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBlbmhhbmNlZCBjbGFzc2ljIG5ldHdvcmtpbmcgbWFuYWdlbWVudCBmZWF0dXJlLiAqL1xuICAgIHB1YmxpYyBBV1NFbmhhbmNlZENsYXNzaWNOZXR3b3JraW5nTWFuZ2VtZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VuaGFuY2VkQ2xhc3NpY05ldHdvcmtpbmdNYW5nZW1lbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjb25zb2xlIGZ1bGwgYWNjZXNzIHRvIEFXUyBFbnRpdHkgUmVzb2x1dGlvbiBhbmQgcmVsYXRlZCBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTRW50aXR5UmVzb2x1dGlvbkNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VudGl0eVJlc29sdXRpb25Db25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIEVudGl0eSBSZXNvbHV0aW9uIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTRW50aXR5UmVzb2x1dGlvbkNvbnNvbGVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbnRpdHlSZXNvbHV0aW9uQ29uc29sZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHRoZSBGYXVsdCBJbmplY3Rpb24gU2ltdWxhdG9yIFNlcnZpY2UgcGVybWlzc2lvbiBpbiBFQzIgYW5kIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzIHRvIHBlcmZvcm0gRklTIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yRUMyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yRUMyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHRoZSBGYXVsdCBJbmplY3Rpb24gU2ltdWxhdG9yIFNlcnZpY2UgcGVybWlzc2lvbiBpbiBFQ1MgYW5kIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzIHRvIHBlcmZvcm0gRklTIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yRUNTQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yRUNTQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHRoZSBGYXVsdCBJbmplY3Rpb24gU2ltdWxhdG9yIFNlcnZpY2UgcGVybWlzc2lvbiBpbiBFS1MgYW5kIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzIHRvIHBlcmZvcm0gRklTIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yRUtTQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yRUtTQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHRoZSBGYXVsdCBJbmplY3Rpb24gU2ltdWxhdG9yIFNlcnZpY2UgcGVybWlzc2lvbiBpbiBFQzIgbmV0d29ya2luZyBhbmQgb3RoZXIgcmVxdWlyZWQgc2VydmljZXMgdG8gcGVyZm9ybSBGSVMgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTRmF1bHRJbmplY3Rpb25TaW11bGF0b3JOZXR3b3JrQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yTmV0d29ya0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyB0aGUgRmF1bHQgSW5qZWN0aW9uIFNpbXVsYXRvciBTZXJ2aWNlIHBlcm1pc3Npb24gaW4gUkRTIGFuZCBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcyB0byBwZXJmb3JtIEZJUyBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NGYXVsdEluamVjdGlvblNpbXVsYXRvclJEU0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NGYXVsdEluamVjdGlvblNpbXVsYXRvclJEU0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyB0aGUgRmF1bHQgSW5qZWN0aW9uIFNpbXVsYXRvciBTZXJ2aWNlIHBlcm1pc3Npb24gaW4gU1NNIGFuZCBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcyB0byBwZXJmb3JtIEZJUyBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NGYXVsdEluamVjdGlvblNpbXVsYXRvclNTTUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NGYXVsdEluamVjdGlvblNpbXVsYXRvclNTTUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFtYXpvbiBGaW5TcGFjZSAqL1xuICAgIHB1YmxpYyBBV1NGaW5TcGFjZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZpblNwYWNlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBGdWxsIGFjY2VzcyBmb3IgQVdTIEZNIEFkbWluaXN0cmF0b3IgKi9cbiAgICBwdWJsaWMgQVdTRk1BZG1pbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRk1BZG1pbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBSZWFkIG9ubHkgYWNjZXNzIGZvciBBV1MgRk0gQWRtaW5pc3RyYXRvciB0aGF0IGFsbG93cyBtb25pdG9yaW5nIEFXUyBGTSBvcGVyYXRpb25zICovXG4gICAgcHVibGljIEFXU0ZNQWRtaW5SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NGTUFkbWluUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBXQUYgYWN0aW9ucyBmb3IgQVdTIEZpcmV3YWxsIE1hbmFnZXIgbWVtYmVyIGFjY291bnRzICovXG4gICAgcHVibGljIEFXU0ZNTWVtYmVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRk1NZW1iZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIE1hbmFnZWQgcG9saWN5IGZvciBBV1MgRm9yIFdvcmRwcmVzcyBQbHVnaW4gKi9cbiAgICBwdWJsaWMgQVdTRm9yV29yZFByZXNzUGx1Z2luUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZvcldvcmRQcmVzc1BsdWdpblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB3aGljaCBhbGxvd3MgQVdTIENvZGUgQ29ubmVjdGlvbnMgdG8gc3luYyBjb250ZW50IGZyb20geW91ciBnaXQgcmVwb3NpdG9yeSAqL1xuICAgIHB1YmxpYyBBV1NHaXRTeW5jU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR2l0U3luY1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFXUyBHbG9iYWwgQWNjZWxlcmF0b3IgdG8gbWFuYWdlIEVDMiBFbGFzdGljIE5ldHdvcmsgSW50ZXJmYWNlcyBhbmQgU2VjdXJpdHkgR3JvdXBzLiAqL1xuICAgIHB1YmxpYyBBV1NHbG9iYWxBY2NlbGVyYXRvclNMUlBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHbG9iYWxBY2NlbGVyYXRvclNMUlBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBHbHVlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBBV1NHbHVlQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR2x1ZUNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEdsdWUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBhY2Nlc3MgdG8gc2FnZW1ha2VyIG5vdGVib29rIGluc3RhbmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTR2x1ZUNvbnNvbGVTYWdlTWFrZXJOb3RlYm9va0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR2x1ZUNvbnNvbGVTYWdlTWFrZXJOb3RlYm9va0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgR2x1ZSBEYXRhQnJldyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuIEFsc28gcHJvdmlkZXMgc2VsZWN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIChlLmcuLCBTMywgS01TLCBHbHVlKS4gKi9cbiAgICBwdWJsaWMgQXdzR2x1ZURhdGFCcmV3RnVsbEFjY2Vzc1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Bd3NHbHVlRGF0YUJyZXdGdWxsQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb24gdG8gZ2x1ZSB0byBwZXJmb3JtIGFjdGlvbiBvbiB1c2VyJ3MgZ2x1ZSBkYXRhIGNhdGFsb2csIHRoaXMgcG9saWN5IGFsc28gcHJvdmlkZXMgcGVybWlzc2lvbiB0byBlYzIgYWN0aW9ucyB0byBhbGxvdyBnbHVlIHRvIGNyZWF0ZSBFTkkgdG8gY29ubmVjdCB0byByZXNvdXJjZXMgaW4gdGhlIFZQQywgYWxzbyBhbGxvdyBnbHVlIHRvIGFjY2VzcyByZWdpc3RlcmVkIGRhdGEgaW4gbGFrZWZvcm1hdGlvbiBhbmQgcGVybWlzc2lvbiB0byBhY2Nlc3MgdXNlcidzIGNsb3Vkd2F0Y2ggKi9cbiAgICBwdWJsaWMgQVdTR2x1ZURhdGFCcmV3U2VydmljZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR2x1ZURhdGFCcmV3U2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIEdsdWUgU2NoZW1hIFJlZ2lzdHJ5IFNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQVdTR2x1ZVNjaGVtYVJlZ2lzdHJ5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHbHVlU2NoZW1hUmVnaXN0cnlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZG9ubHkgYWNjZXNzIHRvIHRoZSBBV1MgR2x1ZSBTY2hlbWEgUmVnaXN0cnkgU2VydmljZSAqL1xuICAgIHB1YmxpYyBBV1NHbHVlU2NoZW1hUmVnaXN0cnlSZWFkb25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHbHVlU2NoZW1hUmVnaXN0cnlSZWFkb25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIEdsdWUgc2VydmljZSByb2xlIHdoaWNoIGFsbG93cyBjdXN0b21lciB0byBtYW5hZ2Ugbm90ZWJvb2sgc2VydmVyICovXG4gICAgcHVibGljIEFXU0dsdWVTZXJ2aWNlTm90ZWJvb2tSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dsdWVTZXJ2aWNlTm90ZWJvb2tSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBBV1MgR2x1ZSBzZXJ2aWNlIHJvbGUgd2hpY2ggYWxsb3dzIGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBFQzIsIFMzLCBhbmQgQ2xvdWR3YXRjaCBMb2dzICovXG4gICAgcHVibGljIEFXU0dsdWVTZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHbHVlU2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0aGF0IGFsbG93cyB1c2VycyB0byBjcmVhdGUgYW5kIHVzZSBvbmx5IHRoZSBub3RlYm9vayBzZXNzaW9ucyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHVzZXIuIFRoaXMgcG9saWN5IGFsc28gaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gZXhwbGljaXRseSBhbGxvdyB1c2VycyB0byBwYXNzIGEgcmVzdHJpY3RlZCBHbHVlIHNlc3Npb24gcm9sZS4gKi9cbiAgICBwdWJsaWMgQXdzR2x1ZVNlc3Npb25Vc2VyUmVzdHJpY3RlZE5vdGVib29rUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkF3c0dsdWVTZXNzaW9uVXNlclJlc3RyaWN0ZWROb3RlYm9va1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBBV1MgR2x1ZSByZXNvdXJjZXMgZXhjZXB0IGZvciBzZXNzaW9ucy4gQWxsb3dzIHVzZXJzIHRvIGNyZWF0ZSBhbmQgdXNlIG9ubHkgdGhlIG5vdGVib29rIHNlc3Npb25zIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdXNlci4gVGhpcyBwb2xpY3kgYWxzbyBpbmNsdWRlcyBvdGhlciBwZXJtaXNzaW9ucyBuZWVkZWQgYnkgQVdTIEdsdWUgdG8gbWFuYWdlIEdsdWUgcmVzb3VyY2VzIGluIG90aGVyIEFXUyBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQXdzR2x1ZVNlc3Npb25Vc2VyUmVzdHJpY3RlZE5vdGVib29rU2VydmljZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXdzR2x1ZVNlc3Npb25Vc2VyUmVzdHJpY3RlZE5vdGVib29rU2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0aGF0IGFsbG93cyB1c2VycyB0byBjcmVhdGUgYW5kIHVzZSBvbmx5IHRoZSBpbnRlcmFjdGl2ZSBzZXNzaW9ucyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHVzZXIuIFRoaXMgcG9saWN5IGFsc28gaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gZXhwbGljaXRseSBhbGxvdyB1c2VycyB0byBwYXNzIGEgcmVzdHJpY3RlZCBHbHVlIHNlc3Npb24gcm9sZS4gKi9cbiAgICBwdWJsaWMgQXdzR2x1ZVNlc3Npb25Vc2VyUmVzdHJpY3RlZFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Bd3NHbHVlU2Vzc2lvblVzZXJSZXN0cmljdGVkUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIEFXUyBHbHVlIHJlc291cmNlcyBleGNlcHQgZm9yIHNlc3Npb25zLiBBbGxvd3MgdXNlcnMgdG8gY3JlYXRlIGFuZCB1c2Ugb25seSB0aGUgaW50ZXJhY3RpdmUgc2Vzc2lvbnMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB1c2VyLiBUaGlzIHBvbGljeSBhbHNvIGluY2x1ZGVzIG90aGVyIHBlcm1pc3Npb25zIG5lZWRlZCBieSBBV1MgR2x1ZSB0byBtYW5hZ2UgR2x1ZSByZXNvdXJjZXMgaW4gb3RoZXIgQVdTIHNlcnZpY2VzICovXG4gICAgcHVibGljIEF3c0dsdWVTZXNzaW9uVXNlclJlc3RyaWN0ZWRTZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Bd3NHbHVlU2Vzc2lvblVzZXJSZXN0cmljdGVkU2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3Mgd2l0aGluIEFtYXpvbiBHcmFmYW5hIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHdvcmtzcGFjZXMgZm9yIHRoZSBlbnRpcmUgb3JnYW5pemF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NHcmFmYW5hQWNjb3VudEFkbWluaXN0cmF0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR3JhZmFuYUFjY291bnRBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNzIHRvIHJlYWQgb25seSBvcGVyYXRpb25zIGluIEFtYXpvbiBHcmFmYW5hLiAqL1xuICAgIHB1YmxpYyBBV1NHcmFmYW5hQ29uc29sZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dyYWZhbmFDb25zb2xlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBvbmx5IHRoZSBhYmlsaXR5IHRvIHVwZGF0ZSB1c2VyIGFuZCBncm91cCBwZXJtaXNzaW9ucyBmb3IgQVdTIEdyYWZhbmEgd29ya3NwYWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTR3JhZmFuYVdvcmtzcGFjZVBlcm1pc3Npb25NYW5hZ2VtZW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dyYWZhbmFXb3Jrc3BhY2VQZXJtaXNzaW9uTWFuYWdlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFiaWxpdHkgdG8gdXBkYXRlIElBTSBJZGVudGl0eSBDZW50ZXIgKElkQykgdXNlciBhbmQgZ3JvdXAgcGVybWlzc2lvbnMgZm9yIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgd29ya3NwYWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTR3JhZmFuYVdvcmtzcGFjZVBlcm1pc3Npb25NYW5hZ2VtZW50VjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR3JhZmFuYVdvcmtzcGFjZVBlcm1pc3Npb25NYW5hZ2VtZW50VjIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBnaXZlcyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIEdyZWVuZ3Jhc3MgY29uZmlndXJhdGlvbiwgbWFuYWdlbWVudCBhbmQgZGVwbG95bWVudCBhY3Rpb25zICovXG4gICAgcHVibGljIEFXU0dyZWVuZ3Jhc3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dyZWVuZ3Jhc3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ2l2ZXMgcmVhZCBvbmx5IGFjY2VzcyB0byB0aGUgQVdTIEdyZWVuZ3Jhc3MgY29uZmlndXJhdGlvbiwgbWFuYWdlbWVudCBhbmQgZGVwbG95bWVudCBhY3Rpb25zICovXG4gICAgcHVibGljIEFXU0dyZWVuZ3Jhc3NSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHcmVlbmdyYXNzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIEFXUyBHcmVlbmdyYXNzIHNlcnZpY2Ugcm9sZSB3aGljaCBhbGxvd3MgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIEFXUyBMYW1iZGEgYW5kIEFXUyBJb1QgdGhpbmcgc2hhZG93cy4gKi9cbiAgICBwdWJsaWMgQVdTR3JlZW5ncmFzc1Jlc291cmNlQWNjZXNzUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHcmVlbmdyYXNzUmVzb3VyY2VBY2Nlc3NSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdGhlIERhdGFmbG93IEVuZHBvaW50IEluc3RhbmNlIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgQVdTIEdyb3VuZCBTdGF0aW9uIEFnZW50ICovXG4gICAgcHVibGljIEFXU0dyb3VuZFN0YXRpb25BZ2VudEluc3RhbmNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dyb3VuZFN0YXRpb25BZ2VudEluc3RhbmNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBIZWFsdGggdG8gZW5hYmxlIHRoZSBIZWFsdGggZXZlbnQgcHJvY2Vzc29yIGZlYXR1cmUuICovXG4gICAgcHVibGljIEFXU0hlYWx0aEV2ZW50UHJvY2Vzc29yU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSGVhbHRoRXZlbnRQcm9jZXNzb3JTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIEhlYWx0aCBBcGlzIGFuZCBOb3RpZmljYXRpb25zIGFuZCB0aGUgUGVyc29uYWwgSGVhbHRoIERhc2hib2FyZCAqL1xuICAgIHB1YmxpYyBBV1NIZWFsdGhGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0hlYWx0aEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgSGVhbHRoIEltYWdpbmcgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTSGVhbHRoSW1hZ2luZ0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSGVhbHRoSW1hZ2luZ0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBIZWFsdGggSW1hZ2luZyBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NIZWFsdGhJbWFnaW5nUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSGVhbHRoSW1hZ2luZ1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIEFXUyBIZWFsdGhJbWFnaW5nIHRvIG1hbmFnZSBzZXJ2aWNlIG9wZXJhdGlvbnMgYW5kIHB1Ymxpc2ggc2VydmljZSBtZXRyaWNzICovXG4gICAgcHVibGljIEFXU0hlYWx0aEltYWdpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NIZWFsdGhJbWFnaW5nU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBNYW5hZ2VkIFBvbGljeSBGb3IgQW1hem9uIEhlYWx0aE9taWNzIFNlcnZpY2UgTGlua2VkIFJvbGUgKi9cbiAgICBwdWJsaWMgQVdTSGVhbHRoT21pY3NTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NIZWFsdGhPbWljc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdGhlIGxpc3Qgb2YgYWN0aW9ucyB0aGF0IGFyZSBhbGxvd2VkIGZvciByb2xlcyBhc3N1bWVkIHdpdGggdGhlIElBTSBJZGVudGl0eSBDZW50ZXIgaWRlbnRpdHkgY29udGV4dC4gQVdTIFNlY3VyaXR5IFRva2VuIFNlcnZpY2UgKEFXUyBTVFMpIGF1dG9tYXRpY2FsbHkgYXR0YWNoZXMgdGhpcyBwb2xpY3kgdG8gYXNzdW1lZCByb2xlcy4gVGhlIGlkZW50aXR5IGNvbnRleHQgaXMgcGFzc2VkIGFzIFByb3ZpZGVkQ29udGV4dC4gKi9cbiAgICBwdWJsaWMgQVdTSUFNSWRlbnRpdHlDZW50ZXJBbGxvd0xpc3RGb3JJZGVudGl0eUNvbnRleHQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSUFNSWRlbnRpdHlDZW50ZXJBbGxvd0xpc3RGb3JJZGVudGl0eUNvbnRleHQpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgSUFNIFJvbGUgTWFuYWdlciB0byBtYW5hZ2UgcmVzb3VyY2VzIGluIHlvdXIgYWNjb3VudCBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTSUFNUm9sZU1hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJQU1Sb2xlTWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG1hbmFnZSBJQU0gSWRlbnRpdHkgQ2VudGVyIHVzZXJzIGZyb20gYW4gZXh0ZXJuYWwgcHJvdmlkZXIuICovXG4gICAgcHVibGljIEFXU0lkZW50aXR5Q2VudGVyRXh0ZXJuYWxNYW5hZ2VtZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lkZW50aXR5Q2VudGVyRXh0ZXJuYWxNYW5hZ2VtZW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIHRoZSBJZGVudGl0eSBTeW5jIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQVdTSWRlbnRpdHlTeW5jRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJZGVudGl0eVN5bmNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUmVhZCBvbmx5IGFjY2VzcyB0byB0aGUgSWRlbnRpdHkgU3luYyBzZXJ2aWNlICovXG4gICAgcHVibGljIEFXU0lkZW50aXR5U3luY1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lkZW50aXR5U3luY1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIEFXUyBJbWFnZSBCdWlsZGVyIGFjdGlvbnMgYW5kIHJlc291cmNlIHNjb3BlZCBhY2Nlc3MgdG8gcmVsYXRlZCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0ltYWdlQnVpbGRlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW1hZ2VCdWlsZGVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIEFXUyBJbWFnZSBCdWlsZGVyIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0ltYWdlQnVpbGRlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ltYWdlQnVpbGRlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBhbmQgd3JpdGUgYWNjZXNzIHRvIHRoZSBqb2JzIGNyZWF0ZWQgdW5kZXIgdGhlIEFXUyBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBV1NJbXBvcnRFeHBvcnRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ltcG9ydEV4cG9ydEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBqb2JzIGNyZWF0ZWQgdW5kZXIgdGhlIEFXUyBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBV1NJbXBvcnRFeHBvcnRSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJbXBvcnRFeHBvcnRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBJbmNpZGVudCBNYW5hZ2VyIHBlcm1pc3Npb25zIHRvIGNhbGwgb3RoZXIgQVdTIHNlcnZpY2VzIGFzIGEgcGFydCBvZiBtYW5hZ2luZyBhbiBpbmNpZGVudC4gKi9cbiAgICBwdWJsaWMgQVdTSW5jaWRlbnRNYW5hZ2VySW5jaWRlbnRBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJbmNpZGVudE1hbmFnZXJJbmNpZGVudEFjY2Vzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHN0YXJ0LCB2aWV3LCBhbmQgdXBkYXRlIGluY2lkZW50cyB3aXRoIGZ1bGwgYWNjZXNzIHRvIGN1c3RvbSB0aW1lbGluZSBldmVudHMgJiByZWxhdGVkIGl0ZW1zLiBBc3NpZ24gdGhpcyBwb2xpY3kgdG8gdXNlcnMgd2hvIHdpbGwgY3JlYXRlIGFuZCByZXNvbHZlIGluY2lkZW50cy4gKi9cbiAgICBwdWJsaWMgQVdTSW5jaWRlbnRNYW5hZ2VyUmVzb2x2ZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW5jaWRlbnRNYW5hZ2VyUmVzb2x2ZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgSW5jaWRlbnQgTWFuYWdlciBwZXJtaXNzaW9uIHRvIG1hbmFnZSBpbmNpZGVudCByZWNvcmRzIGFuZCByZWxhdGVkIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTSW5jaWRlbnRNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW5jaWRlbnRNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBJb1QgQW5hbHl0aWNzLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RBbmFseXRpY3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVEFuYWx5dGljc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIElvVCBBbmFseXRpY3MuICovXG4gICAgcHVibGljIEFXU0lvVEFuYWx5dGljc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVEFuYWx5dGljc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ2l2ZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFXUyBJb1QgY29uZmlndXJhdGlvbiBhY3Rpb25zICovXG4gICAgcHVibGljIEFXU0lvVENvbmZpZ0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RDb25maWdBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBnaXZlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBBV1MgSW9UIGNvbmZpZ3VyYXRpb24gYWN0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NJb1RDb25maWdSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RDb25maWdSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdpdmVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgSW9UIG1lc3NhZ2luZyBhY3Rpb25zICovXG4gICAgcHVibGljIEFXU0lvVERhdGFBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGF0YUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHdyaXRlIGFjY2VzcyB0byBJb1QgdGhpbmcgZ3JvdXBzIGFuZCByZWFkIGFjY2VzcyB0byBJb1QgQ2VydGlmaWNhdGVzIGZvciBleGVjdXRpb24gb2YgQUREX1RISU5HU19UT19USElOR19HUk9VUCBtaXRpZ2F0aW9uIGFjdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NJb1REZXZpY2VEZWZlbmRlckFkZFRoaW5nc1RvVGhpbmdHcm91cE1pdGlnYXRpb25BY3Rpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGV2aWNlRGVmZW5kZXJBZGRUaGluZ3NUb1RoaW5nR3JvdXBNaXRpZ2F0aW9uQWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBhY2Nlc3MgZm9yIElvVCBhbmQgcmVsYXRlZCByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTSW9URGV2aWNlRGVmZW5kZXJBdWRpdCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1REZXZpY2VEZWZlbmRlckF1ZGl0KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIGZvciBlbmFibGluZyBJb1QgbG9nZ2luZyBmb3IgZXhlY3V0aW9uIG9mIEVOQUJMRV9JT1RfTE9HR0lORyBtaXRpZ2F0aW9uIGFjdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NJb1REZXZpY2VEZWZlbmRlckVuYWJsZUlvVExvZ2dpbmdNaXRpZ2F0aW9uQWN0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVERldmljZURlZmVuZGVyRW5hYmxlSW9UTG9nZ2luZ01pdGlnYXRpb25BY3Rpb24pO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBtZXNzYWdlcyBwdWJsaXNoIGFjY2VzcyB0byBTTlMgdG9waWMgZm9yIGV4ZWN1dGlvbiBvZiBQVUJMSVNIX0ZJTkRJTkdfVE9fU05TIG1pdGlnYXRpb24gYWN0aW9uICovXG4gICAgcHVibGljIEFXU0lvVERldmljZURlZmVuZGVyUHVibGlzaEZpbmRpbmdzVG9TTlNNaXRpZ2F0aW9uQWN0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVERldmljZURlZmVuZGVyUHVibGlzaEZpbmRpbmdzVG9TTlNNaXRpZ2F0aW9uQWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgd3JpdGUgYWNjZXNzIHRvIElvVCBwb2xpY2llcyBmb3IgZXhlY3V0aW9uIG9mIFJFUExBQ0VfREVGQVVMVF9QT0xJQ1lfVkVSU0lPTiBtaXRpZ2F0aW9uIGFjdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NJb1REZXZpY2VEZWZlbmRlclJlcGxhY2VEZWZhdWx0UG9saWN5TWl0aWdhdGlvbkFjdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1REZXZpY2VEZWZlbmRlclJlcGxhY2VEZWZhdWx0UG9saWN5TWl0aWdhdGlvbkFjdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHdyaXRlIGFjY2VzcyB0byBJb1QgQ0EgY2VydGlmaWNhdGVzIGZvciBleGVjdXRpb24gb2YgIFVQREFURV9DQV9DRVJUSUZJQ0FURSBtaXRpZ2F0aW9uIGFjdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NJb1REZXZpY2VEZWZlbmRlclVwZGF0ZUNBQ2VydE1pdGlnYXRpb25BY3Rpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGV2aWNlRGVmZW5kZXJVcGRhdGVDQUNlcnRNaXRpZ2F0aW9uQWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgd3JpdGUgYWNjZXNzIHRvIElvVCBjZXJ0aWZpY2F0ZXMgZm9yIGV4ZWN1dGlvbiBvZiBVUERBVEVfREVWSUNFX0NFUlRJRklDQVRFIG1pdGlnYXRpb24gYWN0aW9uICovXG4gICAgcHVibGljIEFXU0lvVERldmljZURlZmVuZGVyVXBkYXRlRGV2aWNlQ2VydE1pdGlnYXRpb25BY3Rpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGV2aWNlRGVmZW5kZXJVcGRhdGVEZXZpY2VDZXJ0TWl0aWdhdGlvbkFjdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgSW9UIERldmljZSBUZXN0ZXIgdG8gcnVuIHRoZSBGcmVlUlRPUyBxdWFsaWZpY2F0aW9uIHN1aXRlIGJ5IGFsbG93aW5nIGFjY2VzcyB0byBzZXJ2aWNlcyBpbmNsdWRpbmcgSW9ULCBTMywgYW5kIElBTSAqL1xuICAgIHB1YmxpYyBBV1NJb1REZXZpY2VUZXN0ZXJGb3JGcmVlUlRPU0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGV2aWNlVGVzdGVyRm9yRnJlZVJUT1NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBJb1QgRGV2aWNlIFRlc3RlciB0byBydW4gdGhlIEFXUyBHcmVlbmdyYXNzIHF1YWxpZmljYXRpb24gc3VpdGUgYnkgYWxsb3dpbmcgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIExhbWJkYSwgSW9ULCBBUEkgR2F0ZXdheSwgSUFNICovXG4gICAgcHVibGljIEFXU0lvVERldmljZVRlc3RlckZvckdyZWVuZ3Jhc3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVERldmljZVRlc3RlckZvckdyZWVuZ3Jhc3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSW9UIEV2ZW50cy4gKi9cbiAgICBwdWJsaWMgQVdTSW9URXZlbnRzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RFdmVudHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBJb1QgRXZlbnRzLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RFdmVudHNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RFdmVudHNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEZlZGVyYXRpb24gYWNjZXNzIGZvciBJb1QgRmxlZXQgSHViIGFwcGxpY2F0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NJb1RGbGVldEh1YkZlZGVyYXRpb25BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URmxlZXRIdWJGZWRlcmF0aW9uQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIEFXUyBSZXNvdXJjZXMgYW5kIG1ldGFEYXRhIHVzZWQgb3IgbWFuYWdlZCBieSBBV1NJb1RGbGVldHdpc2UgZm9yIGF1eGlsaWFyeSBmZWF0dXJlcyAqL1xuICAgIHB1YmxpYyBBV1NJb1RGbGVldHdpc2VTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RGbGVldHdpc2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdpdmVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgSW9UIGNvbmZpZ3VyYXRpb24gYW5kIG1lc3NhZ2luZyBhY3Rpb25zICovXG4gICAgcHVibGljIEFXU0lvVEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBjcmVhdGlvbiBvZiBBbWF6b24gQ2xvdWRXYXRjaCBMb2cgZ3JvdXBzIGFuZCBzdHJlYW1pbmcgbG9ncyB0byB0aGUgZ3JvdXBzICovXG4gICAgcHVibGljIEFXU0lvVExvZ2dpbmcoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UTG9nZ2luZyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIG1hbmFnZWQgaW50ZWdyYXRpb25zIGZvciBBV1MgSW9UIERldmljZSBNYW5hZ2VtZW50IGFuZCByZWxhdGVkIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RNYW5hZ2VkSW50ZWdyYXRpb25zRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RNYW5hZ2VkSW50ZWdyYXRpb25zRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG1hbmFnZWQgaW50ZWdyYXRpb25zIGZvciBBV1MgSW9UIERldmljZSBNYW5hZ2VtZW50IHBlcm1pc3Npb24gdG8gcHVibGlzaCBsb2dzIGFuZCBtZXRyaWNzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RNYW5hZ2VkSW50ZWdyYXRpb25zUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RNYW5hZ2VkSW50ZWdyYXRpb25zUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhY2Nlc3MgdG8gY3JlYXRlIEFXUyBJb1QgSm9iIGFuZCBkZXNjcmliZSB0aGUgQVdTIGNvZGUgc2lnbmVyIGpvYiAqL1xuICAgIHB1YmxpYyBBV1NJb1RPVEFVcGRhdGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UT1RBVXBkYXRlKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFjY2VzcyB0byBhbGwgQVdTIHNlcnZpY2VzIHN1cHBvcnRlZCBpbiBBV1MgSW9UIFJ1bGUgQWN0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NJb1RSdWxlQWN0aW9ucygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RSdWxlQWN0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIG1hbmFnZSBBV1MgSW9UIFNpdGVXaXNlIHVzaW5nIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiBOb3RlIHRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIGFjY2VzcyB0byBjcmVhdGUgYW5kIGxpc3QgZGF0YSBzdG9yZXMgdXNlZCB3aXRoIEFXUyBJb1QgU2l0ZVdpc2UgKGUuZy4gQVdTIElvVCBBbmFseXRpY3MpLCBhY2Nlc3MgdG8gbGlzdCBhbmQgdmlldyBBV1MgSW9UIEdyZWVuZ3Jhc3MgcmVzb3VyY2VzLCBsaXN0IGFuZCBtb2RpZnkgQVdTIFNlY3JldHMgTWFuYWdlciBzZWNyZXRzLCByZXRyaWV2ZSBBV1MgSW9UIHRoaW5nIHNoYWRvd3MsIGxpc3QgcmVzb3VyY2VzIHdpdGggc3BlY2lmaWMgdGFncywgYW5kIGNyZWF0ZSBhbmQgdXNlIGEgc2VydmljZS1saW5rZWQgcm9sZSBmb3IgQVdTIElvVCBTaXRlV2lzZS4gKi9cbiAgICBwdWJsaWMgQVdTSW9UU2l0ZVdpc2VDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RTaXRlV2lzZUNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSW9UIFNpdGVXaXNlLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RTaXRlV2lzZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UU2l0ZVdpc2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIGFjY2VzcyBBV1MgSW9UIFNpdGVXaXNlIGFzc2V0cyBhbmQgYXNzZXQgZGF0YSwgY3JlYXRlIEFXUyBJb1QgU2l0ZVdpc2UgTW9uaXRvciByZXNvdXJjZXMsIGFuZCBsaXN0IEFXUyBTU08gdXNlcnMuICovXG4gICAgcHVibGljIEFXU0lvVFNpdGVXaXNlTW9uaXRvclBvcnRhbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RTaXRlV2lzZU1vbml0b3JQb3J0YWxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHJvbGUgZ3JhbnRzIEFXUyBJb1QgU2l0ZVdpc2UgbW9uaXRvciBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgeW91ciBBV1MgSW9UIFNpdGVXaXNlIGFzc2V0cyAmIGFzc2V0IHByb3BlcnRpZXMsIGFuZCBjcmVhdGUgQVdTIElvVCBTaXRld2lzZSBwcm9qZWN0cywgZGFzaGJvYXJkcyAmIGFjY2VzcyBwb2xpY2llcyB0aHJvdWdoIEFXUyBJb1QgU2l0ZVdpc2UgcG9ydGFscy4gKi9cbiAgICBwdWJsaWMgQVdTSW9UU2l0ZVdpc2VNb25pdG9yU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UU2l0ZVdpc2VNb25pdG9yU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIElvVCBTaXRlV2lzZS4gKi9cbiAgICBwdWJsaWMgQVdTSW9UU2l0ZVdpc2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RTaXRlV2lzZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIHVzZXJzIHRvIHJlZ2lzdGVyIHRoaW5ncyBhdCBidWxrIHVzaW5nIEFXUyBJb1QgU3RhcnRUaGluZ1JlZ2lzdHJhdGlvblRhc2sgQVBJICovXG4gICAgcHVibGljIEFXU0lvVFRoaW5nc1JlZ2lzdHJhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RUaGluZ3NSZWdpc3RyYXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIElvVCBUd2luTWFrZXIgdG8gY2FsbCBvdGhlciBBV1Mgc2VydmljZXMgYW5kIHRvIHN5bmMgdGhlaXIgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RUd2luTWFrZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RUd2luTWFrZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgYXNzb2NpYXRlZCBpZGVudGl0eSBkYXRhIGFjY2VzcyB0byBBV1MgSW9UIFdpcmVsZXNzIGRldmljZXMuICovXG4gICAgcHVibGljIEFXU0lvVFdpcmVsZXNzRGF0YUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RXaXJlbGVzc0RhdGFBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIGFzc29jaWF0ZWQgaWRlbnRpdHkgZnVsbCBhY2Nlc3MgdG8gYWxsIEFXUyBJb1QgV2lyZWxlc3Mgb3BlcmF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTSW9UV2lyZWxlc3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVFdpcmVsZXNzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIElvVCBXaXJlbGVzcyBmdWxsIGFjY2VzcyB0byBwdWJsaXNoIHRvIElvVCBSdWxlcyBFbmdpbmUgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0lvVFdpcmVsZXNzRnVsbFB1Ymxpc2hBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UV2lyZWxlc3NGdWxsUHVibGlzaEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgYXNzb2NpYXRlZCBpZGVudGl0eSBhY2Nlc3MgdG8gY3JlYXRlLCBsaXN0IGFuZCBkZXNjcmliZSBJb1QgQ2VydGlmaWNhdGVzICovXG4gICAgcHVibGljIEFXU0lvVFdpcmVsZXNzR2F0ZXdheUNlcnRNYW5hZ2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVFdpcmVsZXNzR2F0ZXdheUNlcnRNYW5hZ2VyKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBhc3NvY2lhdGVkIGlkZW50aXR5IHRvIGNyZWF0ZSBBbWF6b24gQ2xvdWRXYXRjaCBMb2dzIGdyb3VwcyBhbmQgc3RyZWFtIGxvZ3MgdG8gdGhlIGdyb3Vwcy4gKi9cbiAgICBwdWJsaWMgQVdTSW9UV2lyZWxlc3NMb2dnaW5nKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVFdpcmVsZXNzTG9nZ2luZyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgYXNzb2NpYXRlZCBpZGVudGl0eSByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBJb1Qgd2lyZWxlc3MuICovXG4gICAgcHVibGljIEFXU0lvVFdpcmVsZXNzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UV2lyZWxlc3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBWUEMgSVAgQWRkcmVzcyBNYW5hZ2VyIHRvIGFjY2VzcyBWUEMgcmVzb3VyY2VzIGFuZCBpbnRlZ3JhdGUgd2l0aCBBV1MgT3JnYW5pemF0aW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTSVBBTVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lQQU1TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFVzZWQgYnkgQVdTIElRIHRvIGV4ZWN1dGUgcGF5bWVudCByZXF1ZXN0cyBvbiBiZWhhbGYgb2YgYSBjdXN0b21lciAqL1xuICAgIHB1YmxpYyBBV1NJUUNvbnRyYWN0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSVFDb250cmFjdFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIElRICovXG4gICAgcHVibGljIEFXU0lRRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJUUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIElRIHRvIG1hbmFnZSB0aGUgcm9sZSBhc3N1bWVkIGJ5IEFXUyBJUSBleHBlcnRzLiAqL1xuICAgIHB1YmxpYyBBV1NJUVBlcm1pc3Npb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJUVBlcm1pc3Npb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzIHJlcXVpcmVkIGZvciBBV1MgS01TIGN1c3RvbSBrZXkgc3RvcmVzICovXG4gICAgcHVibGljIEFXU0tleU1hbmFnZW1lbnRTZXJ2aWNlQ3VzdG9tS2V5U3RvcmVzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTS2V5TWFuYWdlbWVudFNlcnZpY2VDdXN0b21LZXlTdG9yZXNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgQVdTIEtNUyB0byBzeW5jaHJvbml6ZSB0aGUgc2hhcmVkIHByb3BlcnRpZXMgb2YgbXVsdGktUmVnaW9uIGtleXMuICovXG4gICAgcHVibGljIEFXU0tleU1hbmFnZW1lbnRTZXJ2aWNlTXVsdGlSZWdpb25LZXlzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTS2V5TWFuYWdlbWVudFNlcnZpY2VNdWx0aVJlZ2lvbktleXNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSAoS01TKS4gKi9cbiAgICBwdWJsaWMgQVdTS2V5TWFuYWdlbWVudFNlcnZpY2VQb3dlclVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTS2V5TWFuYWdlbWVudFNlcnZpY2VQb3dlclVzZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjcm9zcyBhY2NvdW50IGFjY2VzcyB0byBHbHVlIHJlc291cmNlcyB2aWEgTGFrZSBGb3JtYXRpb24uIEFsc28gZ3JhbnRzIHJlYWQgYWNjZXNzIHRvIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzIHN1Y2ggYXMgb3JnYW5pemF0aW9ucyBhbmQgcmVzb3VyY2UgYWNjZXNzIG1hbmFnZXIgKi9cbiAgICBwdWJsaWMgQVdTTGFrZUZvcm1hdGlvbkNyb3NzQWNjb3VudE1hbmFnZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFrZUZvcm1hdGlvbkNyb3NzQWNjb3VudE1hbmFnZXIpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEFXUyBMYWtlIEZvcm1hdGlvbiBhbmQgcmVsYXRlZCBzZXJ2aWNlcywgc3VjaCBhcyBBV1MgR2x1ZSwgdG8gbWFuYWdlIGRhdGEgbGFrZXMgKi9cbiAgICBwdWJsaWMgQVdTTGFrZUZvcm1hdGlvbkRhdGFBZG1pbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYWtlRm9ybWF0aW9uRGF0YUFkbWluKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFXUyBMYW1iZGEgc2VydmljZSwgQVdTIExhbWJkYSBjb25zb2xlIGZlYXR1cmVzLCBhbmQgb3RoZXIgcmVsYXRlZCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0xhbWJkYUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBMYW1iZGEgc2VydmljZSwgQVdTIExhbWJkYSBjb25zb2xlIGZlYXR1cmVzLCBhbmQgb3RoZXIgcmVsYXRlZCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0xhbWJkYVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBMb2dzIGFuZCByZWFkL3dyaXRlIHBlcm1pc3Npb25zIHRvIGR1cmFibGUgZXhlY3V0aW9uIEFQSXMgdXNlZCBieSBMYW1iZGEgZHVyYWJsZSBmdW5jdGlvbnMgKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhQmFzaWNEdXJhYmxlRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFCYXNpY0R1cmFibGVFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBMb2dzLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbGlzdCBhbmQgcmVhZCBhY2Nlc3MgdG8gRHluYW1vREIgc3RyZWFtcyBhbmQgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBsb2dzLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFEeW5hbW9EQkV4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhRHluYW1vREJFeGVjdXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbWluaW11bSBwZXJtaXNzaW9ucyBmb3IgYSBMYW1iZGEgZnVuY3Rpb24gdG8gbWFuYWdlIEVOSXMgKGNyZWF0ZSwgZGVzY3JpYmUsIGRlbGV0ZSkgdXNlZCBieSBhIFZQQy1lbmFibGVkIExhbWJkYSBGdW5jdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhRU5JTWFuYWdlbWVudEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFFTklNYW5hZ2VtZW50QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgUHV0LCBHZXQgYWNjZXNzIHRvIFMzIGFuZCBmdWxsIGFjY2VzcyB0byBDbG91ZFdhdGNoIExvZ3MuICovXG4gICAgcHVibGljIEFXU0xhbWJkYUV4ZWN1dGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhRXhlY3V0ZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgYWNjZXNzIHRvIER5bmFtb0RCIFN0cmVhbXMuICovXG4gICAgcHVibGljIEFXU0xhbWJkYUludm9jYXRpb25EeW5hbW9EQigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFJbnZvY2F0aW9uRHluYW1vREIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBsaXN0IGFuZCByZWFkIGFjY2VzcyB0byBLaW5lc2lzIHN0cmVhbXMgYW5kIHdyaXRlIHBlcm1pc3Npb25zIHRvIENsb3VkV2F0Y2ggbG9ncy4gKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhS2luZXNpc0V4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhS2luZXNpc0V4ZWN1dGlvblJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gdG8gY3JlYXRlIGFuZCBhZG1pbmlzdGVyIEVDMiByZXNvdXJjZXMgbWFuYWdlZCBieSB0aGUgTGFtYmRhIE1hbmFnZWQgSW5zdGFuY2VzLCBhbmQgZGVzY3JpcHRpdmUgcGVybWlzc2lvbnMuICovXG4gICAgcHVibGljIEFXU0xhbWJkYU1hbmFnZWRFQzJSZXNvdXJjZU9wZXJhdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYU1hbmFnZWRFQzJSZXNvdXJjZU9wZXJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gYWNjZXNzIE1TSyBDbHVzdGVyIHdpdGhpbiBhIFZQQywgbWFuYWdlIEVOSXMgKGNyZWF0ZSwgZGVzY3JpYmUsIGRlbGV0ZSkgaW4gdGhlIFZQQyBhbmQgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBMb2dzLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFNU0tFeGVjdXRpb25Sb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYU1TS0V4ZWN1dGlvblJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gY3JlYXRlIGFuZCBhZG1pbmlzdGVyIEVOSSByZXNvdXJjZXMgbWFuYWdlZCBieSB0aGUgTGFtYmRhIE5ldHdvcmsgQ29ubmVjdG9yICovXG4gICAgcHVibGljIEFXU0xhbWJkYU5ldHdvcmtDb25uZWN0b3JPcGVyYXRvclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFOZXR3b3JrQ29ubmVjdG9yT3BlcmF0b3JQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgTGFtYmRhIFJlcGxpY2F0b3IgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIHRvIHJlcGxpY2F0ZSBmdW5jdGlvbnMgYWNyb3NzIHJlZ2lvbnMgKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhUmVwbGljYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFSZXBsaWNhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIEFXUyBMYW1iZGEgc2VydmljZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgTGFtYmRhIHRvIGRlc2NyaWJlIGFuZCB0ZXJtaW5hdGUgbWFuYWdlZCBpbnN0YW5jZXMgZnJvbSBFQzIgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0xhbWJkYVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVjZWl2ZSBtZXNzYWdlLCBkZWxldGUgbWVzc2FnZSwgYW5kIHJlYWQgYXR0cmlidXRlIGFjY2VzcyB0byBTUVMgcXVldWVzLCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBsb2dzLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFTUVNRdWV1ZUV4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhU1FTUXVldWVFeGVjdXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbWluaW11bSBwZXJtaXNzaW9ucyBmb3IgYSBMYW1iZGEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGlsZSBhY2Nlc3NpbmcgYSByZXNvdXJjZSB3aXRoaW4gYSBWUEMgLSBjcmVhdGUsIGRlc2NyaWJlLCBkZWxldGUgbmV0d29yayBpbnRlcmZhY2VzIGFuZCB3cml0ZSBwZXJtaXNzaW9ucyB0byBDbG91ZFdhdGNoIExvZ3MuICovXG4gICAgcHVibGljIEFXU0xhbWJkYVZQQ0FjY2Vzc0V4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhVlBDQWNjZXNzRXhlY3V0aW9uUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGFsbG93IGFjY2VzcyB0byB0aGUgQVdTIExpY2Vuc2UgTWFuYWdlciBBUEkgYWN0aW9ucyByZXF1aXJlZCB0byBjb25zdW1lIHVwb24gbGljZW5zZXMgdGhhdCB0aGUgdXNlciBoYXMgZW50aXRsZW1lbnRzLiAqL1xuICAgIHB1YmxpYyBBV1NMaWNlbnNlTWFuYWdlckNvbnN1bXB0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xpY2Vuc2VNYW5hZ2VyQ29uc3VtcHRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIExpY2Vuc2UgTWFuYWdlciBMaW51eCBTdWJzY3JpcHRpb25zIFNlcnZpY2UgdG8gbWFuYWdlIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTTGljZW5zZU1hbmFnZXJMaW51eFN1YnNjcmlwdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMaWNlbnNlTWFuYWdlckxpbnV4U3Vic2NyaXB0aW9uc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQVdTIExpY2Vuc2UgTWFuYWdlciBzZXJ2aWNlIG1hc3RlciBhY2NvdW50IHJvbGUgcG9saWN5ICovXG4gICAgcHVibGljIEFXU0xpY2Vuc2VNYW5hZ2VyTWFzdGVyQWNjb3VudFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGljZW5zZU1hbmFnZXJNYXN0ZXJBY2NvdW50Um9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBMaWNlbnNlIE1hbmFnZXIgc2VydmljZSBtZW1iZXIgYWNjb3VudCByb2xlIHBvbGljeSAqL1xuICAgIHB1YmxpYyBBV1NMaWNlbnNlTWFuYWdlck1lbWJlckFjY291bnRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xpY2Vuc2VNYW5hZ2VyTWVtYmVyQWNjb3VudFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgTGljZW5zZSBNYW5hZ2VyIHNlcnZpY2UgZGVmYXVsdCByb2xlIHBvbGljeSAqL1xuICAgIHB1YmxpYyBBV1NMaWNlbnNlTWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xpY2Vuc2VNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIExpY2Vuc2UgTWFuYWdlciBVc2VyIFN1YnNjcmlwdGlvbnMgU2VydmljZSB0byBtYW5hZ2UgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NMaWNlbnNlTWFuYWdlclVzZXJTdWJzY3JpcHRpb25zU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGljZW5zZU1hbmFnZXJVc2VyU3Vic2NyaXB0aW9uc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBNMiB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTTTJTZXJ2aWNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU00yU2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBBV1MgcGVybWlzc2lvbnMgdG8gdXBkYXRlIGFuZCBtYWludGFpbiBBV1MgbWFuYWdlZCByb2xlcyBmb3IgQVdTIG1hbmFnZWQgYWNjb3VudHMgKi9cbiAgICBwdWJsaWMgQVdTTWFuYWdlZEFjY291bnRNYW5hZ2VtZW50QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hbmFnZWRBY2NvdW50TWFuYWdlbWVudEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBBV1MgcGVybWlzc2lvbnMgdG8gbWFuYWdlIGFjY291bnQgYWNjZXNzIGVudGl0bGVtZW50cyBmb3IgQVdTIG1hbmFnZWQgYWNjb3VudHMgKi9cbiAgICBwdWJsaWMgQVdTTWFuYWdlZEFjY291bnRVc2VyRW50aXRsZW1lbnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFuYWdlZEFjY291bnRVc2VyRW50aXRsZW1lbnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQVdTIHBlcm1pc3Npb24gdG8gYWN0aXZhdGUgYWR2YW5jZWQgZmVhdHVyZXMgZm9yIEFXUyBtYW5hZ2VkIGFjY291bnRzICovXG4gICAgcHVibGljIEFXU01hbmFnZWRBZHZhbmNlZEZlYXR1cmVzQWN0aXZhdGlvbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYW5hZ2VkQWR2YW5jZWRGZWF0dXJlc0FjdGl2YXRpb25BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdGhlIEFXUyBCdWRnZXRzIHNlcnZpY2UgcGVybWlzc2lvbnMgdG8gYXR0YWNoIGFuZCBkZXRhY2ggU2VydmljZSBDb250cm9sIFBvbGljaWVzIGFuZCBtYW5hZ2UgYWNjb3VudHMgaW4gYW4gQVdTIE9yZ2FuaXphdGlvbiB0byBlbmZvcmNlIHNwZW5kIGxpbWl0IGd1YXJkcmFpbHMgb24gbWVtYmVyIGFjY291bnRzLiAqL1xuICAgIHB1YmxpYyBBV1NNYW5hZ2VkQnVkZ2V0c1NwZW5kTGltaXRNYW5hZ2VtZW50QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hbmFnZWRCdWRnZXRzU3BlbmRMaW1pdE1hbmFnZW1lbnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQVdTIHBlcm1pc3Npb24gdG8gbWFuYWdlIG9yZ2FuaXphdGlvbiBjb250cm9sIHBvbGljaWVzIGZvciBBV1MgbWFuYWdlZCBhY2NvdW50cyAqL1xuICAgIHB1YmxpYyBBV1NNYW5hZ2VkQ29udHJvbFBvbGljeU1hbmFnZW1lbnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFuYWdlZENvbnRyb2xQb2xpY3lNYW5hZ2VtZW50QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIG1hbmFnZSBTZXJ2aWNlIENvbnRyb2wgUG9saWNpZXMgKFNDUHMpIGluIEFXUyBPcmdhbml6YXRpb25zIGZvciB0aGUgQVdTIE1hbmFnZWQgU2VydmljZSBBY2Nlc3MgTWFuYWdlbWVudCBzZXJ2aWNlLiBJbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBsaXN0LCBjcmVhdGUsIHVwZGF0ZSwgYW5kIGF0dGFjaCBTQ1BzIHNjb3BlZCB0byBwb2xpY2llcyB0YWdnZWQgd2l0aCBNYW5hZ2VkQnk9c2VydmljZS1hY2Nlc3MuICovXG4gICAgcHVibGljIEFXU01hbmFnZWRTZXJ2aWNlQWNjZXNzTWFuYWdlbWVudEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYW5hZ2VkU2VydmljZUFjY2Vzc01hbmFnZW1lbnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIE1hbmFnZWQgU2VydmljZXMgdG8gcmVhZCB0aGUgdmFsdWVzIG9mIHRoZSB0YWdzIG9uIEFXUyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTTWFuYWdlZFNlcnZpY2VzQ29udGFjdHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYW5hZ2VkU2VydmljZXNDb250YWN0c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQVdTIE1hbmFnZWQgU2VydmljZXMgLSBwb2xpY3kgdG8gbWFuYWdlIGRldGVjdGl2ZSBjb250cm9scyBpbmZyYXN0cnVjdHVyZSAqL1xuICAgIHB1YmxpYyBBV1NNYW5hZ2VkU2VydmljZXNEZXRlY3RpdmVDb250cm9sc0NvbmZpZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hbmFnZWRTZXJ2aWNlc0RldGVjdGl2ZUNvbnRyb2xzQ29uZmlnU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgTWFuYWdlZCBTZXJ2aWNlcyBwb2xpY3kgdG8gZW5hYmxlIEFNUyBldmVudCBwcm9jZXNzb3IgZmVhdHVyZS4gKi9cbiAgICBwdWJsaWMgQVdTTWFuYWdlZFNlcnZpY2VzRXZlbnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFuYWdlZFNlcnZpY2VzRXZlbnRzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uJ3MgQVdTIE1hbmFnZWQgU2VydmljZSdzIFNlbGYgU2VydmljZSBSZXBvcnRpbmcgZmVhdHVyZSB0byByZWFkIEFXUyBPcmdhbml6YXRpb24gZGF0YSBvbiB5b3VyIGJlaGFsZiB0byBlbmFibGUgb3JnYW5pemF0aW9uIGxldmVsIGFnZ3JlZ2F0ZWQgcmVwb3J0aW5nICovXG4gICAgcHVibGljIEFXU01hbmFnZWRTZXJ2aWNlc1NlbGZTZXJ2aWNlUmVwb3J0aW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFuYWdlZFNlcnZpY2VzU2VsZlNlcnZpY2VSZXBvcnRpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgTWFuYWdlZCBTZXJ2aWNlcyB0byBtYW5hZ2UgZGVwbG95bWVudCB0b29sa2l0IG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NNYW5hZ2VkU2VydmljZXNEZXBsb3ltZW50VG9vbGtpdFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYW5hZ2VkU2VydmljZXNEZXBsb3ltZW50VG9vbGtpdFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBBV1MgYWNjb3VudCBzZXR0aW5ncyBtYW5hZ2VtZW50LiBUaGlzIHBvbGljeSBhbGxvd3Mgb3duZXJzIHRvIHZpZXcgYW5kIG1vZGlmeSBhY2NvdW50IGluZm9ybWF0aW9uLCBiaWxsaW5nLCBwYXltZW50cywgdGF4IHJlZ2lzdHJhdGlvbiwgaWRlbnRpdHkgbWFuYWdlbWVudCwgb3JnYW5pemF0aW9uIHBvbGljaWVzLCBidWRnZXRzLCBjb3N0IGFuYWx5c2lzLCBhbmQgd29ya3NwYWNlIG5vdGlmaWNhdGlvbnMuIEludGVuZGVkIGZvciB3b3Jrc3BhY2Ugb3duZXJzIHdobyBuZWVkIGNvbXBsZXRlIGFkbWluaXN0cmF0aXZlIGFjY2VzcyBvdmVyIGFjY291bnQgY29uZmlndXJhdGlvbiBhbmQgbWVtYmVyIG1hbmFnZW1lbnQuIFRoZSBwb2xpY3kgZG9lcyBub3QgZ3JhbnQgYWNjZXNzIHRvIGNvbXB1dGUsIHN0b3JhZ2UsIG5ldHdvcmtpbmcsIG9yIG90aGVyIGluZnJhc3RydWN0dXJlIHNlcnZpY2VzIHVucmVsYXRlZCB0byBhY2NvdW50IHNldHRpbmdzLiAqL1xuICAgIHB1YmxpYyBBV1NNYW5hZ2VkU2V0dGluZ3NBZG1pbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYW5hZ2VkU2V0dGluZ3NBZG1pbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB0ZWFtIG1lbWJlcnMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgU2V0dGluZ3MsIGluY2x1ZGluZyB3b3Jrc3BhY2UgYW5kIG93bmVyIGluZm9ybWF0aW9uLCB0ZWFtIG1lbWJlcnNoaXAsIHBsYW4gYW5kIHNwZW5kIHN1bW1hcnkuIEl0IGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb25zIHRvIG1vZGlmeSB3b3Jrc3BhY2UgY29uZmlndXJhdGlvbiBvciB0byBtYW5hZ2UgYmlsbGluZyBhbmQgcGF5bWVudHMuICovXG4gICAgcHVibGljIEFXU01hbmFnZWRTZXR0aW5nc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hbmFnZWRTZXR0aW5nc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIEFXUyBwZXJtaXNzaW9uIHRvIGNvbXBsZXRlIHNpZ251cCBmb3IgQVdTIG1hbmFnZWQgYWNjb3VudHMuICovXG4gICAgcHVibGljIEFXU01hbmFnZWRTaWduVXBBZG1pbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYW5hZ2VkU2lnblVwQWRtaW5BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBjb25maWd1cmUgYW5kIGN1c3RvbWl6ZSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBBV1NNYW5hZ2VtZW50Q29uc29sZUFkbWluaXN0cmF0b3JBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFuYWdlbWVudENvbnNvbGVBZG1pbmlzdHJhdG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGFjY2VzcyB0byBlc3NlbnRpYWwgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBmZWF0dXJlcyBhbmQgdXNlciBleHBlcmllbmNlIChVWCkgY2FwYWJpbGl0aWVzIGZvciBub24tYWRtaW5pc3RyYXRpdmUgdXNlcnMuICovXG4gICAgcHVibGljIEFXU01hbmFnZW1lbnRDb25zb2xlQmFzaWNVc2VyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hbmFnZW1lbnRDb25zb2xlQmFzaWNVc2VyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBNYXJrZXRwbGFjZSB0byBjb3B5IHlvdXIgQW1hem9uIE1hY2hpbmUgSW1hZ2VzIChBTUlzKSBpbiBvcmRlciB0byBsaXN0IHRoZW0gb24gQVdTIE1hcmtldHBsYWNlICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlQW1pSW5nZXN0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlQW1pSW5nZXN0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBNYXJrZXRwbGFjZSB0byBjcmVhdGUgYW5kIG1hbmFnZSBzZWxsZXIgZGVwbG95bWVudCBwYXJhbWV0ZXJzIGZvciB0aGUgcHJvZHVjdHMgdGhhdCB5b3Ugc3Vic2NyaWJlIHRvIG9uIEFXUyBNYXJrZXRwbGFjZS4gKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VEZXBsb3ltZW50U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VEZXBsb3ltZW50U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIE1hcmtldHBsYWNlIERpc2NvdmVyeSBBUEkgZm9yIHNlYXJjaGluZyBhbmQgcmV0cmlldmluZyBwcm9kdWN0IGFuZCBwcmljaW5nIGluZm9ybWF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZURpc2NvdmVyeUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VEaXNjb3ZlcnlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gc3Vic2NyaWJlIGFuZCB1bnN1YnNjcmliZSB0byBBV1MgTWFya2V0cGxhY2Ugc29mdHdhcmUsIGFsbG93cyB1c2VycyB0byBtYW5hZ2UgTWFya2V0cGxhY2Ugc29mdHdhcmUgaW5zdGFuY2VzIGZyb20gdGhlIE1hcmtldHBsYWNlICdZb3VyIFNvZnR3YXJlJyBwYWdlLCBhbmQgcHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEVDMi4gKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgYWNjZXNzIHRvIEFXUyBNYXJrZXRwbGFjZSBFbnRpdGxlbWVudHMgKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VHZXRFbnRpdGxlbWVudHMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VHZXRFbnRpdGxlbWVudHMpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQVdTIE1hcmtldHBsYWNlIGZvciBsaWNlbnNlIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlTGljZW5zZU1hbmFnZW1lbnRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZUxpY2Vuc2VNYW5hZ2VtZW50U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB0aGUgYWJpbGl0eSB0byBzdWJzY3JpYmUgYW5kIHVuc3Vic2NyaWJlIHRvIEFXUyBNYXJrZXRwbGFjZSBzb2Z0d2FyZSAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZU1hbmFnZVN1YnNjcmlwdGlvbnMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VNYW5hZ2VTdWJzY3JpcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIE1hcmtldHBsYWNlIE1ldGVyaW5nLiAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZU1ldGVyaW5nRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZU1ldGVyaW5nRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIHJlZ2lzdGVyIGEgcmVzb3VyY2UgYW5kIHRyYWNrIHVzYWdlIHRocm91Z2ggQVdTIE1hcmtldHBsYWNlIE1ldGVyaW5nIFNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlTWV0ZXJpbmdSZWdpc3RlclVzYWdlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlTWV0ZXJpbmdSZWdpc3RlclVzYWdlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIGFkbWluaXN0cmF0aXZlIGFjdGlvbnMgZm9yIGFuIEFXUyBNYXJrZXRwbGFjZSBlUHJvY3VyZW1lbnQgaW50ZWdyYXRpb24uICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlUHJvY3VyZW1lbnRTeXN0ZW1BZG1pbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VQcm9jdXJlbWVudFN5c3RlbUFkbWluRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIGZvciBBV1MgTWFya2V0cGxhY2Ugc2VydmljZXMgdG8gcHVyY2hhc2Ugb3JkZXIgbWFuYWdlbWVudC4gKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VQdXJjaGFzZU9yZGVyc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlUHVyY2hhc2VPcmRlcnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIHJldmlldyBBV1MgTWFya2V0cGxhY2Ugc3Vic2NyaXB0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQVdTIE1hcmtldHBsYWNlIGZvciBSZXNhbGUgQXV0aG9yaXphdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VSZXNhbGVBdXRob3JpemF0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VSZXNhbGVBdXRob3JpemF0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgc2VsbGVyIG9wZXJhdGlvbnMgb24gdGhlIEFXUyBNYXJrZXRwbGFjZSBhbmQgb3RoZXIgQVdTIHNlcnZpY2VzIHN1Y2ggYXMgQU1JIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlU2VsbGVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZVNlbGxlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBzZWxsZXJzIGFjY2VzcyB0byBPZmZlcnMgYW5kIEFncmVlbWVudHMgbWFuYWdlbWVudCBhY3Rpdml0aWVzLiAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZVNlbGxlck9mZmVyTWFuYWdlbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZVNlbGxlck9mZmVyTWFuYWdlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHNlbGxlcnMgZnVsbCBhY2Nlc3MgdG8gQVdTIE1hcmtldHBsYWNlIE1hbmFnZW1lbnQgUHJvZHVjdHMgcGFnZSBhbmQgb3RoZXIgQVdTIHNlcnZpY2VzIHN1Y2ggYXMgQU1JIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlU2VsbGVyUHJvZHVjdHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlU2VsbGVyUHJvZHVjdHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBzZWxsZXJzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIE1hcmtldHBsYWNlIE1hbmFnZW1lbnQgUHJvZHVjdHMgcGFnZS4gKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VTZWxsZXJQcm9kdWN0c1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlU2VsbGVyUHJvZHVjdHNSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBNQ1Agc2VydmljZSBhY3Rpb25zLiBUaGlzIHBvbGljeSBkb2VzIG5vdCBncmFudCBhY2Nlc3MgdG8gdGhlIGFjdGlvbnMgdGFrZW4gYnkgdGhlIE1DUCwgb25seSB0aGUgTUNQIGFjdGlvbnMgdGhlbXNlbHZlcy4gKi9cbiAgICBwdWJsaWMgQVdTTWNwU2VydmljZUFjdGlvbnNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01jcFNlcnZpY2VBY3Rpb25zRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBhdXRoZW50aWNhdGUgdG8gdGhlIEFXUyBNQ1Agc2VydmVyIHVzaW5nIEFXUyBTaWduLUluIE9BdXRoICovXG4gICAgcHVibGljIEFXU01DUFNpZ25Jbk9BdXRoQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01DUFNpZ25Jbk9BdXRoQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIGRlZmF1bHQgcG9saWN5IHRoYXQgZW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IE1lZGlhQ29ubmVjdC4gKi9cbiAgICBwdWJsaWMgQVdTTWVkaWFDb25uZWN0U2VydmljZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNZWRpYUNvbm5lY3RTZXJ2aWNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIE1lZGlhTGl2ZSBBbnl3aGVyZSB0byBjcmVhdGUgYW5kIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NNZWRpYUxpdmVBbnl3aGVyZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01lZGlhTGl2ZUFueXdoZXJlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGUgYWNjZXNzIHRvIEFXUyBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IE1lZGlhVGFpbG9yICovXG4gICAgcHVibGljIEFXU01lZGlhVGFpbG9yU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWVkaWFUYWlsb3JTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBhbGxvd3MgQVdTTWlncmF0aW9uSHViU2VydmljZSB0byBjYWxsIEFXU0FwcGxpY2F0aW9uRGlzY292ZXJ5U2VydmljZSBvbiBiZWhhbGYgb2YgdGhlIGN1c3RvbWVyLiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJEaXNjb3ZlcnlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViRGlzY292ZXJ5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBEYXRhYmFzZSBNaWdyYXRpb24gU2VydmljZSB0byBhc3N1bWUgcm9sZSBpbiBjdXN0b21lcidzIGFjY291bnQgdG8gY2FsbCBNaWdyYXRpb24gSHViICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1YkRNU0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJETVNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBNYW5hZ2VkIHBvbGljeSB0byBwcm92aWRlIHRoZSBjdXN0b21lciBhY2Nlc3MgdG8gdGhlIE1pZ3JhdGlvbiBIdWIgU2VydmljZSAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1YkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBsaW1pdGVkIGFjY2VzcyB0byBBV1MgTWlncmF0aW9uIEh1YiwgQVdTIEFwcGxpY2F0aW9uIERpc2NvdmVyeSBTZXJ2aWNlLCBBbWF6b24gU2ltcGxlIFN0b3JhZ2UgU2VydmljZSBhbmQgQVdTIFNlY3JldHMgTWFuYWdlci4gVGhpcyBwb2xpY3kgYWxzbyBncmFudHMgZnVsbCBhY2Nlc3MgdG8gQVdTIE1pZ3JhdGlvbiBIdWIgT3JjaGVzdHJhdG9yIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1Yk9yY2hlc3RyYXRvckNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1Yk9yY2hlc3RyYXRvckNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgbmVlZHMgdG8gYmUgYXR0YWNoZWQgZm9yIFNBUCBhbmQgTUdOIG1pZ3JhdGVkIGluc3RhbmNlIGZvciBvdXIgc2VydmljZSB0byBvcmNoZXN0cmF0ZSBpbnN0YW5jZXMgYnkgZG93bmxvYWRpbmcgc2NyaXB0cyBmcm9tIFMzIGFuZCB0byBmZXRjaCBzZWNyZXQgdmFsdWVzIGluc2lkZSBFQzIgaW5zdGFuY2UuICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1Yk9yY2hlc3RyYXRvckluc3RhbmNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJPcmNoZXN0cmF0b3JJbnN0YW5jZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBsaW1pdGVkIGFjY2VzcyB0byBBbWF6b24gU2ltcGxlIFN0b3JhZ2UgU2VydmljZSwgQVdTIFNlY3JldHMgTWFuYWdlciBhbmQgUGx1Z2luIHJlbGF0ZWQgYWN0aW9ucyBmb3IgQVdTIE1pZ3JhdGlvbiBIdWIgT3JjaGVzdHJhdG9yLiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJPcmNoZXN0cmF0b3JQbHVnaW4oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViT3JjaGVzdHJhdG9yUGx1Z2luKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgbmVjZXNzYXJ5IGZvciBNaWdyYXRpb24gSHViIE9yY2hlc3RyYXRvciB0byBtaWdyYXRlIGFuZCBtb2Rlcm5pemUgeW91ciBvbi1wcmVtaXNlcyB3b3JrbG9hZHMgKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViT3JjaGVzdHJhdG9yU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViT3JjaGVzdHJhdG9yU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgdG8gQVdTIE1pZ3JhdGlvbiBIdWIgUmVmYWN0b3IgU3BhY2VzIGFuZCBvdGhlciBBV1MgcmVsYXRlZCBzZXJ2aWNlcyBleGNlcHQgQVdTIFRyYW5zaXQgR2F0ZXdheSBhbmQgRUMyIHNlY3VyaXR5IGdyb3VwcyBub3QgcmVxdWlyZWQgd2hlbiB1c2luZyBlbnZpcm9ubWVudHMgd2l0aG91dCBhIG5ldHdvcmsgYnJpZGdlLiBUaGlzIHBvbGljeSBhbHNvIGV4Y2x1ZGVzIHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciBBV1MgTGFtYmRhIGFuZCBBV1MgUmVzb3VyY2UgQWNjZXNzIE1hbmFnZXIgYXMgdGhleSBjYW4gYmUgc2NvcGVkIGRvd24gYmFzZWQgb24gdGFncy4gKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViUmVmYWN0b3JTcGFjZXNFbnZpcm9ubWVudHNXaXRob3V0QnJpZGdlc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViUmVmYWN0b3JTcGFjZXNFbnZpcm9ubWVudHNXaXRob3V0QnJpZGdlc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBVc2UgaW4gdGhlIElBTSBzZXJ2aWNlIHJvbGUgcGFzc2VkIHRvIHRoZSBTU00gQXV0b21hdGlvbiBkb2N1bWVudCBBV1NSZWZhY3RvclNwYWNlcy1DcmVhdGVSZXNvdXJjZXMgdG8gZ3JhbnQgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gcnVuIHRoZSBhdXRvbWF0aW9uLiBUaGUgcG9saWN5IGdyYW50cyByZWFkL3dyaXRlIGFjY2VzcyB0byBFQzIgdGFncyBpbiBvcmRlciB0byB0cmFjayBhdXRvbWF0aW9uIHByb2dyZXNzLiBXaGVuIHRoZSBSZWZhY3RvciBTcGFjZXMgZW52aXJvbm1lbnQncyBuZXR3b3JrIGJyaWRnZSBpcyBlbmFibGVkLCB0aGUgYXV0b21hdGlvbiBhbHNvIGFkZHMgdGhlIGVudmlyb25tZW50J3Mgc2VjdXJpdHkgZ3JvdXAgdG8gdGhlIEVDMiBpbnN0YW5jZSB0byBwZXJtaXQgdHJhZmZpYyBmcm9tIG90aGVyIFJlZmFjdG9yIFNwYWNlcyBzZXJ2aWNlcyBpbiB0aGUgZW52aXJvbm1lbnQuIFRoZSBwb2xpY3kgYWxzbyBncmFudHMgYWNjZXNzIHRvIHRoZSBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSdzIHBvc3QgbGF1bmNoIGFjdGlvbnMgU1NNIHBhcmFtZXRlcnMuICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1YlJlZmFjdG9yU3BhY2VzU1NNQXV0b21hdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJSZWZhY3RvclNwYWNlc1NTTUF1dG9tYXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgdG8gQVdTIE1pZ3JhdGlvbkh1YiBSZWZhY3RvciBTcGFjZXMsIEFXUyBNaWdyYXRpb25IdWIgUmVmYWN0b3IgU3BhY2VzIGNvbnNvbGUgZmVhdHVyZXMgYW5kIG90aGVyIHJlbGF0ZWQgQVdTIHNlcnZpY2VzIGV4Y2VwdCBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3IgQVdTIExhbWJkYSBhbmQgQVdTIFJlc291cmNlIEFjY2VzcyBNYW5hZ2VyIGFzIHRoZXkgY2FuIGJlIHNjb3BlZCBkb3duIGJhc2VkIG9uIHRhZ3MuICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1YlJlZmFjdG9yU3BhY2VzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJSZWZhY3RvclNwYWNlc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIFJlc291cmNlcyBtYW5hZ2VkIG9yIHVzZWQgYnkgQVdTIE1pZ3JhdGlvbiBIdWIgUmVmYWN0b3IgU3BhY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJSZWZhY3RvclNwYWNlc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1YlJlZmFjdG9yU3BhY2VzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIFNlcnZlciBNaWdyYXRpb24gU2VydmljZSB0byBhc3N1bWUgcm9sZSBpbiBjdXN0b21lcidzIGFjY291bnQgdG8gY2FsbCBNaWdyYXRpb24gSHViICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1YlNNU0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJTTVNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYWxsb3cgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBBV1MgTWlncmF0aW9uIEh1YiBTdHJhdGVneSBSZWNvbW1lbmRhdGlvbnMgc2VydmljZSwgcmVhZC93cml0ZSBhY2Nlc3MgdG8gUzMgYnVja2V0cyByZWxhdGVkIHRvIHRoZSBzZXJ2aWNlLCBBbWF6b24gQVBJIEdhdGV3YXkgYWNjZXNzIHRvIHVwbG9hZCBsb2dzIGFuZCBtZXRyaWNzIHRvIEFXUywgQVdTIFNlY3JldHMgTWFuYWdlciBhY2Nlc3MgdG8gZmV0Y2ggY3JlZGVudGlhbHMsIGFuZCBhbnkgcmVsYXRlZCBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViU3RyYXRlZ3lDb2xsZWN0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViU3RyYXRlZ3lDb2xsZWN0b3IpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFXUyBNaWdyYXRpb24gSHViIFN0cmF0ZWd5IFJlY29tbWVuZGF0aW9ucyBzZXJ2aWNlIGFuZCBhY2Nlc3MgdG8gcmVsYXRlZCBBV1Mgc2VydmljZXMgdGhyb3VnaCB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViU3RyYXRlZ3lDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJTdHJhdGVneUNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBV1MgTWlncmF0aW9uIEh1YiBTdHJhdGVneSBSZWNvbW1lbmRhdGlvbnMgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViU3RyYXRlZ3lTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJTdHJhdGVneVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIEFtYXpvbiBNU0sgUmVwbGljYXRvciB0byByZXBsaWNhdGUgZGF0YSBiZXR3ZWVuIE1TSyBDbHVzdGVycy4gKi9cbiAgICBwdWJsaWMgQVdTTVNLUmVwbGljYXRvckV4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTVNLUmVwbGljYXRvckV4ZWN1dGlvblJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgVlBDIHJlc291cmNlcyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgTkFUIEdhdGV3YXlzLiAqL1xuICAgIHB1YmxpYyBBV1NOQVRHYXRld2F5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTkFUR2F0ZXdheVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFXUyBOZXR3b3JrIEZpcmV3YWxsIHNlcnZpY2UsIGluY2x1ZGluZyBwZXJtaXNzaW9ucyB0byBjcmVhdGUsIGNvbmZpZ3VyZSwgbWFuYWdlLCBhbmQgZGVsZXRlIGZpcmV3YWxsIHJlc291cmNlcywgcG9saWNpZXMsIGFuZCBydWxlIGdyb3Vwcy4gQWRkaXRpb25hbGx5IGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIG1vZGlmeSBWUEMgZW5kcG9pbnRzLCBTMyBidWNrZXQgcG9saWNpZXMsIENsb3VkV2F0Y2ggTG9ncyBjb25maWd1cmF0aW9ucywgYW5kIGNyZWF0ZSBzZXJ2aWNlLWxpbmtlZCByb2xlcyBmb3IgTmV0d29yayBGaXJld2FsbCBhbmQgbG9nIGRlbGl2ZXJ5IHNlcnZpY2VzICovXG4gICAgcHVibGljIEFXU05ldHdvcmtGaXJld2FsbEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTmV0d29ya0ZpcmV3YWxsRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIE5ldHdvcmsgRmlyZXdhbGwgcmVzb3VyY2VzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSwgQ0xJLCBhbmQgU0RLcy4gVGhpcyBwb2xpY3kgYWxsb3dzIHVzZXJzIHRvIHZpZXcgYW5kIG1vbml0b3IgZmlyZXdhbGwgY29uZmlndXJhdGlvbnMsIHBvbGljaWVzLCBydWxlIGdyb3VwcywgYW5kIGFzc29jaWF0ZWQgcmVzb3VyY2VzLCB3aXRob3V0IHRoZSBhYmlsaXR5IHRvIG1ha2UgY2hhbmdlcy4gKi9cbiAgICBwdWJsaWMgQVdTTmV0d29ya0ZpcmV3YWxsUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTmV0d29ya0ZpcmV3YWxsUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBBV1NOZXR3b3JrRmlyZXdhbGwgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgbmVjZXNzYXJ5IHJlc291cmNlcyBmb3IgeW91ciBGaXJld2FsbHMuICovXG4gICAgcHVibGljIEFXU05ldHdvcmtGaXJld2FsbFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU05ldHdvcmtGaXJld2FsbFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgTmV0d29ya01hbmFnZXIgdG8gYWNjZXNzIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggeW91ciBDb3JlIE5ldHdvcmsgKi9cbiAgICBwdWJsaWMgQVdTTmV0d29ya01hbmFnZXJDbG91ZFdBTlNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU05ldHdvcmtNYW5hZ2VyQ2xvdWRXQU5TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBOZXR3b3JrTWFuYWdlciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU05ldHdvcmtNYW5hZ2VyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NOZXR3b3JrTWFuYWdlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBOZXR3b3JrTWFuYWdlciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU05ldHdvcmtNYW5hZ2VyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTmV0d29ya01hbmFnZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IE5ldHdvcmtNYW5hZ2VyIHRvIGFjY2VzcyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHlvdXIgR2xvYmFsIE5ldHdvcmtzICovXG4gICAgcHVibGljIEFXU05ldHdvcmtNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTmV0d29ya01hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UtbGlua2VkIHJvbGUgcGVybWlzc2lvbnMgZm9yIENsb3VkV2F0Y2ggTG9ncyBjZW50cmFsaXphdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NPYnNlcnZhYmlsaXR5QWRtaW5Mb2dzQ2VudHJhbGl6YXRpb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NPYnNlcnZhYmlsaXR5QWRtaW5Mb2dzQ2VudHJhbGl6YXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBtYW5hZ2UgQVdTIENvbmZpZyBDb25maWd1cmF0aW9uIFJlY29yZGVyLCBtYW5hZ2UgQVdTIENvbmZpZyBDb25maWd1cmF0aW9uIEFnZ3JlZ2F0b3IsIGNyZWF0ZSBBV1MgQ29uZmlnIFNlcnZpY2UgTGlua2VkIFJvbGUgZm9yIENvbmZpZ3VyYXRpb24gUmVjb3JkZXIgZnVuY3Rpb25hbGl0eSwgY29uc3VtZSByZWNvcmRlciBjb25maWd1cmF0aW9uIGRhdGEsIGFuZCByZWFkIEFXUyBPcmdhbml6YXRpb25zIGRhdGEgZm9yIG9yZ2FuaXphdGlvbmFsIGZlYXR1cmVzLiAqL1xuICAgIHB1YmxpYyBBV1NPYnNlcnZhYmlsaXR5QWRtaW5TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NPYnNlcnZhYmlsaXR5QWRtaW5TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBtYW5hZ2UgQVdTIENvbmZpZyByZWNvcmRlciByZXNvdXJjZSBhbmQgdGVsZW1ldHJ5IHNldHRpbmdzIG9uIEFXUyByZXNvdXJjZXMgaW5jbHVkaW5nIGxvZ3MsIG1ldHJpY3MuICovXG4gICAgcHVibGljIEFXU09ic2VydmFiaWxpdHlBZG1pblRlbGVtZXRyeUVuYWJsZW1lbnRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NPYnNlcnZhYmlsaXR5QWRtaW5UZWxlbWV0cnlFbmFibGVtZW50U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgT3JnYW5pemF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTT3JnYW5pemF0aW9uc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTT3JnYW5pemF0aW9uc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBPcmdhbml6YXRpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NPcmdhbml6YXRpb25zUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTT3JnYW5pemF0aW9uc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQSBwb2xpY3kgdG8gYWxsb3cgQVdTIE9yZ2FuaXphdGlvbnMgdG8gc2hhcmUgdHJ1c3Qgd2l0aCBvdGhlciBhcHByb3ZlZCBBV1MgU2VydmljZXMgZm9yIHRoZSBwdXJwb3NlIG9mIHNpbXBsaWZ5aW5nIGN1c3RvbWVyIGNvbmZpZ3VyYXRpb24uICovXG4gICAgcHVibGljIEFXU09yZ2FuaXphdGlvbnNTZXJ2aWNlVHJ1c3RQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTT3JnYW5pemF0aW9uc1NlcnZpY2VUcnVzdFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IHlvdSB0byBpbnN0YWxsIGFuIE91dHBvc3Qgc2VydmVyIG9uIHlvdXIgb24tcHJlbWlzZXMgbmV0d29yay4gKi9cbiAgICBwdWJsaWMgQVdTT3V0cG9zdHNBdXRob3JpemVTZXJ2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTT3V0cG9zdHNBdXRob3JpemVTZXJ2ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIExpbmtlZCBSb2xlIHBvbGljeSB0byBlbmFibGUgYWNjZXNzIHRvIEFXUyByZXNvdXJjZXMgbWFuYWdlZCBieSBBV1MgT3V0cG9zdHMgKi9cbiAgICBwdWJsaWMgQVdTT3V0cG9zdHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NPdXRwb3N0c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBJb1Qgc29mdHdhcmUgb24gYW4gQVdTIFBhbm9yYW1hIEFwcGxpYW5jZSB0byB1cGxvYWQgbG9ncyB0byBBbWF6b24gQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQVdTUGFub3JhbWFBcHBsaWFuY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Bhbm9yYW1hQXBwbGlhbmNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhbiBBV1MgUGFub3JhbWEgQXBwbGlhbmNlIHRvIHVwbG9hZCBsb2dzIHRvIEFtYXpvbiBDbG91ZFdhdGNoLCBhbmQgdG8gZ2V0IG9iamVjdHMgZnJvbSBBbWF6b24gUzMgYWNjZXNzIHBvaW50cyBjcmVhdGVkIGZvciB1c2Ugd2l0aCBBV1MgUGFub3JhbWEuICovXG4gICAgcHVibGljIEFXU1Bhbm9yYW1hQXBwbGlhbmNlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFub3JhbWFBcHBsaWFuY2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBQYW5vcmFtYSAqL1xuICAgIHB1YmxpYyBBV1NQYW5vcmFtYUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFub3JhbWFGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFuIEFXUyBMYW1iZGEgZnVuY3Rpb24gb24gYW4gQVdTIFBhbm9yYW1hIEFwcGxpYW5jZSB0byBtYW5hZ2UgcmVzb3VyY2VzIGluIFBhbm9yYW1hLCB1cGxvYWQgbG9ncyBhbmQgbWV0cmljcyB0byBBbWF6b24gQ2xvdWRXYXRjaCwgYW5kIHRvIG1hbmFnZSBvYmplY3RzIGluIGJ1Y2tldHMgY3JlYXRlZCBmb3IgdXNlIHdpdGggUGFub3JhbWEuICovXG4gICAgcHVibGljIEFXU1Bhbm9yYW1hR3JlZW5ncmFzc0dyb3VwUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQYW5vcmFtYUdyZWVuZ3Jhc3NHcm91cFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIFNhZ2VNYWtlciB0byBtYW5hZ2Ugb2JqZWN0cyBpbiBidWNrZXRzIGNyZWF0ZWQgZm9yIHVzZSB3aXRoIEFXUyBQYW5vcmFtYS4gKi9cbiAgICBwdWJsaWMgQVdTUGFub3JhbWFTYWdlTWFrZXJSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Bhbm9yYW1hU2FnZU1ha2VyUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgUGFub3JhbWEgdG8gbWFuYWdlIHJlc291cmNlcyBpbiBBV1MgSW9ULCBBV1MgU2VjcmV0cyBNYW5hZ2VyIGFuZCBBV1MgUGFub3JhbWEuICovXG4gICAgcHVibGljIEFXU1Bhbm9yYW1hU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFub3JhbWFTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgUGFub3JhbWEgdG8gbWFuYWdlIHJlc291cmNlcyBpbiBBbWF6b24gUzMsIEFXUyBJb1QsIEFXUyBJb1QgR3JlZW5HcmFzcywgQVdTIExhbWJkYSwgQW1hem9uIFNhZ2VNYWtlciwgYW5kIEFtYXpvbiBDbG91ZFdhdGNoIExvZ3MsIGFuZCB0byBwYXNzIHNlcnZpY2Ugcm9sZXMgdG8gQVdTIElvVCwgQVdTIElvVCBHcmVlbkdyYXNzLCBhbmQgQW1hem9uIFNhZ2VNYWtlci4gKi9cbiAgICBwdWJsaWMgQVdTUGFub3JhbWFTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQYW5vcmFtYVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbmVjZXNzYXJ5IGFjY2VzcyBmb3IgY2hhbm5lbCBoYW5kc2hha2UgYXBwcm92YWwgbWFuYWdlbWVudCBhY3Rpdml0aWVzLiAqL1xuICAgIHB1YmxpYyBBV1NQYXJ0bmVyQ2VudHJhbENoYW5uZWxIYW5kc2hha2VBcHByb3ZhbE1hbmFnZW1lbnQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lckNlbnRyYWxDaGFubmVsSGFuZHNoYWtlQXBwcm92YWxNYW5hZ2VtZW50KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbmVjZXNzYXJ5IGFjY2VzcyBmb3IgY2hhbm5lbCBtYW5hZ2VtZW50IGFjdGl2aXRpZXMuICovXG4gICAgcHVibGljIEFXU1BhcnRuZXJDZW50cmFsQ2hhbm5lbE1hbmFnZW1lbnQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lckNlbnRyYWxDaGFubmVsTWFuYWdlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBQYXJ0bmVyIENlbnRyYWwgYW5kIHJlbGF0ZWQgQVdTIFNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NQYXJ0bmVyQ2VudHJhbEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lckNlbnRyYWxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbmVjZXNzYXJ5IGFjY2VzcyBmb3IgbWFya2V0aW5nIGFjdGl2aXRpZXMuICovXG4gICAgcHVibGljIEFXU1BhcnRuZXJDZW50cmFsTWFya2V0aW5nTWFuYWdlbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQYXJ0bmVyQ2VudHJhbE1hcmtldGluZ01hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBuZWNlc3NhcnkgYWNjZXNzIGZvciBvcHBvcnR1bml0eSBtYW5hZ2VtZW50IGFjdGl2aXRpZXMuICovXG4gICAgcHVibGljIEFXU1BhcnRuZXJDZW50cmFsT3Bwb3J0dW5pdHlNYW5hZ2VtZW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BhcnRuZXJDZW50cmFsT3Bwb3J0dW5pdHlNYW5hZ2VtZW50KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbmVjZXNzYXJ5IGFjY2VzcyBmb3IgcmV2ZW51ZSBhdHRyaWJ1dGlvbiBtYW5hZ2VtZW50IGFjdGl2aXRpZXMuICovXG4gICAgcHVibGljIEFXU1BhcnRuZXJDZW50cmFsUmV2ZW51ZUF0dHJpYnV0aW9uTWFuYWdlbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQYXJ0bmVyQ2VudHJhbFJldmVudWVBdHRyaWJ1dGlvbk1hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBuZWNlc3NhcnkgYWNjZXNzIGZvciBkZXZlbG9wZXIgdGVzdGluZyBpbiB0aGUgU2FuZGJveCBjYXRhbG9nLiAqL1xuICAgIHB1YmxpYyBBV1NQYXJ0bmVyQ2VudHJhbFNhbmRib3hGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BhcnRuZXJDZW50cmFsU2FuZGJveEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIFJlc291cmNlU25hcHNob3RKb2IgdG8gcmVhZCBhIHJlc291cmNlIGFuZCBzbmFwc2hvdCBpdCBpbiB0aGUgdGFyZ2V0IGVuZ2FnZW1lbnQuICovXG4gICAgcHVibGljIEFXU1BhcnRuZXJDZW50cmFsU2VsbGluZ1Jlc291cmNlU25hcHNob3RKb2JFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BhcnRuZXJDZW50cmFsU2VsbGluZ1Jlc291cmNlU25hcHNob3RKb2JFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgY2FuIGJlIHVzZWQgdG8gZ3JhbnQgcmVhZC1vbmx5IGFjY2VzcyB0byBBUElzIHRoYXQgY2FuIHJlYWQgc2VydmljZSBtZXRhZGF0YSBmb3Igc2VydmljZXMgaW4geW91ciBBV1MgYWNjb3VudC4gWW91IGNhbiB1c2UgdGhpcyBwb2xpY3kgdG8gcHJvdmlkZSB5b3VyIHBhcnRuZXJzIGluIHRoZSBQYXJ0bmVyLUxlZCBTdXBwb3J0IFByb2dyYW0gd2l0aCBhY2Nlc3MgdG8gdGhlIHNlcnZpY2VzIHNwZWNpZmllZCBpbiB0aGUgcGVybWlzc2lvbnMgZGV0YWlscyBzZWN0aW9uIGJlbG93LiAqL1xuICAgIHB1YmxpYyBBV1NQYXJ0bmVyTGVkU3VwcG9ydFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BhcnRuZXJMZWRTdXBwb3J0UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBQcm9TZXJ2ZSB0b29scy4gKi9cbiAgICBwdWJsaWMgQVdTUGFydG5lclByb1NlcnZlVG9vbHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BhcnRuZXJQcm9TZXJ2ZVRvb2xzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBjcmVhdGUgYW5kIG1hbmFnZSBvd24gYXNzZXNzbWVudHMgaW4gUHJvU2VydmUgdG9vbHMuICovXG4gICAgcHVibGljIEFXU1BhcnRuZXJQcm9TZXJ2ZVRvb2xzSW5kaXZpZHVhbENvbnRyaWJ1dG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BhcnRuZXJQcm9TZXJ2ZVRvb2xzSW5kaXZpZHVhbENvbnRyaWJ1dG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBhY2Nlc3MgdG8gb3JnYW5pemF0aW9uYWwgYXNzZXNzbWVudHMgd2l0aCBhYmlsaXR5IHRvIG1hbmFnZSBvd24gYXNzZXNzbWVudHMuICovXG4gICAgcHVibGljIEFXU1BhcnRuZXJQcm9TZXJ2ZVRvb2xzT3JnYW5pemF0aW9uUmVhZGVySW5kaXZpZHVhbENvbnRyaWJ1dG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BhcnRuZXJQcm9TZXJ2ZVRvb2xzT3JnYW5pemF0aW9uUmVhZGVySW5kaXZpZHVhbENvbnRyaWJ1dG9yKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb24gdG8gQVdTIFBDUyBjb21wdXRlIG5vZGVzIHRvIGNvbm5lY3QgdG8gQVdTIFBDUyBjbHVzdGVycy4gKi9cbiAgICBwdWJsaWMgQVdTUENTQ29tcHV0ZU5vZGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUENTQ29tcHV0ZU5vZGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gUENTIHRvIG1hbmFnZSByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU1BDU1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BDU1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFByaWNlIExpc3QgU2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTUHJpY2VMaXN0U2VydmljZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJpY2VMaXN0U2VydmljZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhdWRpdG9yIGFjY2VzcyB0byBBV1MgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKi9cbiAgICBwdWJsaWMgQVdTUHJpdmF0ZUNBQXVkaXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcml2YXRlQ0FBdWRpdG9yKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGVzc2VudGlhbCBwZXJtaXNzaW9ucyBmb3IgdGhlIEFXUyBQcml2YXRlIENBIENvbm5lY3RvciBmb3IgS3ViZXJuZXRlcy4gKi9cbiAgICBwdWJsaWMgQVdTUHJpdmF0ZUNBQ29ubmVjdG9yRm9yS3ViZXJuZXRlc1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcml2YXRlQ0FDb25uZWN0b3JGb3JLdWJlcm5ldGVzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5ICovXG4gICAgcHVibGljIEFXU1ByaXZhdGVDQUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJpdmF0ZUNBRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHByaXZpbGVnZWQgY2VydGlmaWNhdGUgdXNlciBhY2Nlc3MgdG8gQVdTIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5ICovXG4gICAgcHVibGljIEFXU1ByaXZhdGVDQVByaXZpbGVnZWRVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ByaXZhdGVDQVByaXZpbGVnZWRVc2VyKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKi9cbiAgICBwdWJsaWMgQVdTUHJpdmF0ZUNBUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJpdmF0ZUNBUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjZXJ0aWZpY2F0ZSB1c2VyIGFjY2VzcyB0byBBV1MgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKi9cbiAgICBwdWJsaWMgQVdTUHJpdmF0ZUNBVXNlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcml2YXRlQ0FVc2VyKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIGFkbWluaXN0cmF0aXZlIGFjdGlvbnMgZm9yIGFuIEFXUyBQcml2YXRlIE1hcmtldHBsYWNlLiAqL1xuICAgIHB1YmxpYyBBV1NQcml2YXRlTWFya2V0cGxhY2VBZG1pbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJpdmF0ZU1hcmtldHBsYWNlQWRtaW5GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGNyZWF0aW5nIHJlcXVlc3RzIGluIGFuIEFXUyBQcml2YXRlIE1hcmtldHBsYWNlLiAqL1xuICAgIHB1YmxpYyBBV1NQcml2YXRlTWFya2V0cGxhY2VSZXF1ZXN0cygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcml2YXRlTWFya2V0cGxhY2VSZXF1ZXN0cyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgUHJpdmF0ZSBOZXR3b3JrcyBTZXJ2aWNlIHRvIG1hbmFnZSByZXNvdXJjZXMgb24gYmVoYWxmIG9mIHRoZSBjdXN0b21lci4gKi9cbiAgICBwdWJsaWMgQVdTUHJpdmF0ZU5ldHdvcmtzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJpdmF0ZU5ldHdvcmtzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyBDb2RlQnVpbGQgbmVlZHMgdG8gcnVuIGEgYnVpbGQgZm9yIEFXUyBQcm90b24gQ29kZUJ1aWxkIFByb3Zpc2lvbmluZy4gKi9cbiAgICBwdWJsaWMgQVdTUHJvdG9uQ29kZUJ1aWxkUHJvdmlzaW9uaW5nQmFzaWNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJvdG9uQ29kZUJ1aWxkUHJvdmlzaW9uaW5nQmFzaWNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIFByb3RvbiB0byBtYW5hZ2UgUHJvdG9uIHJlc291cmNlIHByb3Zpc2lvbmluZyB1c2luZyBDb2RlQnVpbGQgYW5kIG90aGVyIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTUHJvdG9uQ29kZUJ1aWxkUHJvdmlzaW9uaW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJvdG9uQ29kZUJ1aWxkUHJvdmlzaW9uaW5nU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIEFXUyBQcm90b24gQVBJcyBhbmQgTWFuYWdlbWVudCBDb25zb2xlLCBidXQgZG9lcyBub3QgYWxsb3cgYWRtaW5pc3RyYXRpb24gb2YgUHJvdG9uIHRlbXBsYXRlcyBvciBlbnZpcm9ubWVudHMuICovXG4gICAgcHVibGljIEFXU1Byb3RvbkRldmVsb3BlckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcm90b25EZXZlbG9wZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIFByb3RvbiBBUElzIGFuZCBNYW5hZ2VtZW50IENvbnNvbGUuIEluIGFkZGl0aW9uIHRvIHRoZXNlIHBlcm1pc3Npb25zLCBhY2Nlc3MgdG8gQW1hem9uIFMzIGlzIGFsc28gbmVlZGVkIHRvIHJlZ2lzdGVyIHRlbXBsYXRlIGJ1bmRsZXMgZnJvbSB5b3VyIFMzIGJ1Y2tldHMsIGFzIHdlbGwgYXMgYWNjZXNzIHRvIEFtYXpvbiBJQU0gdG8gY3JlYXRlIGFuZCBtYW5hZ2UgdGhlIHNlcnZpY2Ugcm9sZXMgZm9yIFByb3Rvbi4gKi9cbiAgICBwdWJsaWMgQVdTUHJvdG9uRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcm90b25GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byB0aGUgQVdTIFByb3RvbiBBUElzIGFuZCBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU1Byb3RvblJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Byb3RvblJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHdoaWNoIGFsbG93cyBBV1MgUHJvdG9uIHRvIHN5bmMgeW91ciBzZXJ2aWNlLCBlbnZpcm9ubWVudCBhbmQgY29tcG9uZW50IGRlZmluaXRpb25zIGZyb20geW91ciBnaXQgcmVwb3NpdG9yeSB0byBBV1MgUHJvdG9uLiAqL1xuICAgIHB1YmxpYyBBV1NQcm90b25TZXJ2aWNlR2l0U3luY1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Byb3RvblNlcnZpY2VHaXRTeW5jU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgd2hpY2ggYWxsb3dzIEFXUyBQcm90b24gdG8gc3luYyB5b3VyIGdpdCByZXBvc2l0b3J5IGNvbnRlbnRzIHRvIFByb3RvbiBvciBzeW5jIFByb3RvbiBjb250ZW50cyB0byB5b3VyIGdpdCByZXBvc2l0b3JpZXMuICovXG4gICAgcHVibGljIEFXU1Byb3RvblN5bmNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcm90b25TeW5jU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gdmlldyBhbmQgbW9kaWZ5IHB1cmNoYXNlIG9yZGVycyBvbiBiaWxsaW5nIGNvbnNvbGUgKi9cbiAgICBwdWJsaWMgQVdTUHVyY2hhc2VPcmRlcnNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQdXJjaGFzZU9yZGVyc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIEFXU1F1aWNrU2V0dXBDRkdDUGFja3NQZXJtaXNzaW9uc0JvdW5kYXJ5IHBvbGljeSBkZWZpbmVzIHRoZSBsaXN0IG9mIHBlcm1pc3Npb25zIHRoYXQgYXJlIHBlcm1pdHRlZCBpbiBhbiBJQU0gcm9sZSBjcmVhdGVkIGJ5IFF1aWNrIFNldHVwLiBRdWljayBTZXR1cCB1c2VzIGEgcm9sZSBjcmVhdGVkIHdpdGggdGhpcyBwb2xpY3kgdG8gZGVwbG95IEFXUyBDb25maWcgY29uZm9ybWFuY2UgcGFja3MuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBDRkdDUGFja3NQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBDRkdDUGFja3NQZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIEFXUyBTeXN0ZW1zIE1hbmFnZXIgUXVpY2sgU2V0dXAgdG8gZGVwbG95IG11bHRpcGxlIGNvbmZpZ3VyYXRpb24gdHlwZXMuIFRoZXNlIGNvbmZpZ3VyYXRpb24gdHlwZXMgY3JlYXRlIElBTSByb2xlcyBhbmQgYXV0b21hdGlvbnMgdGhhdCBjb25maWd1cmUgZnJlcXVlbnRseSB1c2VkIEFtYXpvbiBXZWIgU2VydmljZXMgc2VydmljZXMgYW5kIGZlYXR1cmVzIHdpdGggcmVjb21tZW5kZWQgYmVzdCBwcmFjdGljZXMuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBEZXBsb3ltZW50Um9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwRGVwbG95bWVudFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgQVdTUXVpY2tTZXR1cERldk9wc0d1cnVQZXJtaXNzaW9uc0JvdW5kYXJ5IHBvbGljeSBkZWZpbmVzIHRoZSBsaXN0IG9mIHBlcm1pc3Npb25zIHRoYXQgYXJlIHBlcm1pdHRlZCBpbiBhbiBJQU0gcm9sZSBjcmVhdGVkIGJ5IFF1aWNrIFNldHVwLiBRdWljayBTZXR1cCB1c2VzIGEgcm9sZSBjcmVhdGVkIHdpdGggdGhpcyBwb2xpY3kgdG8gZW5hYmxlIGFuZCBjb25maWd1cmUgQW1hem9uIERldk9wcyBHdXJ1LiBUaGlzIHBvbGljeSBhbHNvIHByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGVuYWJsZSBTeXN0ZW1zIE1hbmFnZXIgRXhwbG9yZXIuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBEZXZPcHNHdXJ1UGVybWlzc2lvbnNCb3VuZGFyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwRGV2T3BzR3VydVBlcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBRdWlja1NldHVwIGNyZWF0ZXMgSUFNIHJvbGVzIHdoaWNoIGVuYWJsZSBpdCB0byBjb25maWd1cmUgdGhlIFN5c3RlbXMgTWFuYWdlciBEaXN0cmlidXRvciBmZWF0dXJlIG9uIHlvdXIgYmVoYWxmLCBhbmQgdXNlcyB0aGlzIHBvbGljeSB3aGVuIGNyZWF0aW5nIHN1Y2ggcm9sZXMgdG8gZGVmaW5lIHRoZSBib3VuZGFyeSBvZiB0aGVpciBwZXJtaXNzaW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cERpc3RyaWJ1dG9yUGVybWlzc2lvbnNCb3VuZGFyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwRGlzdHJpYnV0b3JQZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRoYXQgYWxsb3cgU3lzdGVtcyBNYW5hZ2VyIHRvIHJ1biB0aGUgQVdTUXVpY2tTZXR1cFR5cGUtRW5hYmxlQVJFWCBBdXRvbWF0aW9uIHJ1bmJvb2ssIHdoaWNoIGVuYWJsZXMgQVdTIFJlc291cmNlIEV4cGxvcmVyIGZvciB1c2Ugd2l0aCBTeXN0ZW1zIE1hbmFnZXIuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBFbmFibGVBUkVYRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBFbmFibGVBUkVYRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRoYXQgYWxsb3cgcHJpbmNpcGFscyB0byBydW4gdGhlIEFXU1F1aWNrU2V0dXBUeXBlLUVuYWJsZURITUMgQXV0b21hdGlvbiBydW5ib29rLCB3aGljaCBlbmFibGVzIERlZmF1bHQgSG9zdCBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24uICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBFbmFibGVESE1DRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBFbmFibGVESE1DRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIFF1aWNrIFNldHVwIHRvIGRlcGxveSB0aGUgY29uZmlndXJhdGlvbiB0eXBlIHJlcXVpcmVkIHRvIHNldCB1cCBqdXN0LWluLXRpbWUgbm9kZSBhY2Nlc3MuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBKSVROQURlcGxveW1lbnRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBKSVROQURlcGxveW1lbnRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zIHRoYXQgYWxsb3cgU3lzdGVtcyBNYW5hZ2VyIHRvIGNyZWF0ZSBhIGRlZmF1bHQgSUFNIGluc3RhbmNlIHByb2ZpbGUgZm9yIHRoZSBRdWljayBTZXR1cCBjYXBhYmlsaXR5IGFuZCBhdHRhY2ggaXQgdG8gQW1hem9uIEVDMiBpbnN0YW5jZXMgdGhhdCBkb24ndCBhbHJlYWR5IGhhdmUgYW4gaW5zdGFuY2UuIHByb2ZpbGUgYXR0YWNoZWQuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBNYW5hZ2VkSW5zdGFuY2VQcm9maWxlRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBNYW5hZ2VkSW5zdGFuY2VQcm9maWxlRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gZW5hYmxlIGp1c3QtaW4tdGltZSBub2RlIGFjY2VzcyBmb3IgU3lzdGVtcyBNYW5hZ2VyLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwTWFuYWdlSklUTkFSZXNvdXJjZXNFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cE1hbmFnZUpJVE5BUmVzb3VyY2VzRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIHRvIGFjY2VzcyBwYXRjaCBiYXNlbGluZXMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZCBieSBhbiBhZG1pbmlzdHJhdG9yIGluIHRoZSBjdXJyZW50IEFXUyBhY2NvdW50IG9yIG9yZ2FuaXphdGlvbiB1c2luZyBRdWljayBTZXR1cC4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cFBhdGNoUG9saWN5QmFzZWxpbmVBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cFBhdGNoUG9saWN5QmFzZWxpbmVBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IFF1aWNrIFNldHVwIHRvIGNyZWF0ZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgcGF0Y2ggcG9saWN5IGNvbmZpZ3VyYXRpb24uICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBQYXRjaFBvbGljeURlcGxveW1lbnRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBQYXRjaFBvbGljeURlcGxveW1lbnRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIG1hbmFnZSBTdGF0ZSBNYW5hZ2VyIGFzc29jaWF0aW9ucyBmb3IgYXV0b21hdGVkIGNsZWFudXAgb3BlcmF0aW9ucyB3aGVuIFF1aWNrIFNldHVwIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWxldGVkLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwUGF0Y2hQb2xpY3lMYW1iZGFFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cFBhdGNoUG9saWN5TGFtYmRhRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUXVpY2tTZXR1cCBjcmVhdGVzIElBTSByb2xlcyB3aGljaCBlbmFibGUgaXQgdG8gY29uZmlndXJlIHRoZSBTeXN0ZW1zIE1hbmFnZXIgUGF0Y2ggTWFuYWdlciBmZWF0dXJlIG9uIHlvdXIgYmVoYWxmLCBhbmQgdXNlcyB0aGlzIHBvbGljeSB3aGVuIGNyZWF0aW5nIHN1Y2ggcm9sZXMgdG8gZGVmaW5lIHRoZSBib3VuZGFyeSBvZiB0aGVpciBwZXJtaXNzaW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cFBhdGNoUG9saWN5UGVybWlzc2lvbnNCb3VuZGFyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwUGF0Y2hQb2xpY3lQZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIHRyYWNrIHdoaWNoIGluc3RhbmNlcyBhcmUgbWFuYWdlZCBieSBRdWljayBTZXR1cCBwYXRjaCBwb2xpY3kgY29uZmlndXJhdGlvbnMgdGhyb3VnaCBhdXRvbWF0ZWQgdGFnZ2luZyBhbmQgaW52ZW50b3J5IGNvbGxlY3Rpb24uICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBQYXRjaFBvbGljeVRhZ01hbmFnZW1lbnRFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cFBhdGNoUG9saWN5VGFnTWFuYWdlbWVudEV4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBBV1NRdWlja1NldHVwU2NoZWR1bGVyUGVybWlzc2lvbnNCb3VuZGFyeSBwb2xpY3kgZGVmaW5lcyB0aGUgbGlzdCBvZiBwZXJtaXNzaW9ucyB0aGF0IGFyZSBwZXJtaXR0ZWQgaW4gYW4gSUFNIHJvbGUgY3JlYXRlZCBieSBRdWljayBTZXR1cC4gUXVpY2sgU2V0dXAgdXNlcyBhIHJvbGUgY3JlYXRlZCB3aXRoIHRoaXMgcG9saWN5IHRvIGVuYWJsZSBhbmQgY29uZmlndXJlIHNjaGVkdWxlZCBvcGVyYXRpb25zIG9uIEFtYXpvbiBFQzIgaW5zdGFuY2VzIGFuZCBvdGhlciByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBTY2hlZHVsZXJQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBTY2hlZHVsZXJQZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGFkbWluaXN0cmF0aXZlIHBlcm1zc2lvbnMgdGhhdCBhbGxvdyBRdWljayBTZXR1cCB0byBjcmVhdGUgcmVzb3VyY2VzIHRoYXQgYXJlIHVzZWQgZHVyaW5nIHRoZSBTeXN0ZW1zIE1hbmFnZXIgb25ib2FyZGluZyBwcm9jZXNzLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwU1NNRGVwbG95bWVudFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cFNTTURlcGxveW1lbnRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIGZvciBsaXN0aW5nIGFsbCBTMyBidWNrZXRzIGluIGFuIGFjY291bnQ7IGFuZCBmb3IgbWFuYWdpbmcgYW5kIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gYWJvdXQgc3BlY2lmaWMgYnVja2V0cyBpbiB0aGUgcHJpbmNpcGFsIGFjY291bnQgdGhhdCBhcmUgbWFuYWdlZCB0aHJvdWdoIEFXUyBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZXMuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBTU01EZXBsb3ltZW50UzNCdWNrZXRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBTU01EZXBsb3ltZW50UzNCdWNrZXRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUXVpY2sgU2V0dXAgY3JlYXRlcyBJQU0gcm9sZXMgd2hpY2ggZW5hYmxlIGl0IHRvIGNvbmZpZ3VyZSB0aGUgSG9zdCBNYW5hZ2VyIFF1aWNrIFNldHVwIHR5cGUgb24geW91ciBiZWhhbGYsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgc3VjaCByb2xlcyB0byBkZWZpbmUgdGhlIGJvdW5kYXJ5IG9mIHRoZWlyIHBlcm1pc3Npb25zLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwU1NNSG9zdE1nbXRQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBTU01Ib3N0TWdtdFBlcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgcG9saWN5IGdyYW50cyBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IFF1aWNrIFNldHVwIHRvIHJ1biB0aGUgYSBBV1MgQ2xvdWRGb3JtYXRpb24gY3VzdG9tIHJlc291cmNlIG9uIGxpZmVjeWNsZSBldmVudHMgZHVyaW5nIFF1aWNrIFNldHVwIGRlcGxveW1lbnQgaW4gU3lzdGVtcyBNYW5hZ2VyLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwU1NNTGlmZWN5Y2xlTWFuYWdlbWVudEV4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwU1NNTGlmZWN5Y2xlTWFuYWdlbWVudEV4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IFN5c3RlbXMgTWFuYWdlciB0byBjcmVhdGUgcHJlcmVxdWlzaXRlcyBzdWNoIGFzIElBTSByb2xlcyByZXF1aXJlZCBmb3IgU3lzdGVtcyBNYW5hZ2VyIG9uYm9hcmRpbmcuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBTU01NYW5hZ2VSZXNvdXJjZXNFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cFNTTU1hbmFnZVJlc291cmNlc0V4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IHByaW5jaXBhbHMgdG8gcnVuIHRoZSBBV1NRdWlja1NldHVwVHlwZS1TdGFydFNTTUFzc29jaWF0aW9ucyBBdXRvbWF0aW9uIHJ1bmJvb2ssIHdoaWNoIHN0YXJ0cyBTdGF0ZSBNYW5hZ2VyIEFzc29jaWF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cFN0YXJ0U1NNQXNzb2NpYXRpb25zRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBTdGFydFNTTUFzc29jaWF0aW9uc0V4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBtYW5hZ2VkIHBvbGljeSBBV1NRdWlja1NldHVwU3RhcnRTdG9wSW5zdGFuY2VzRXhlY3V0aW9uUG9saWN5IHByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBRdWljayBTZXR1cCB0byBzdGFydCBhbmQgc3RvcCBBbWF6b24gRUMyIGluc3RhbmNlcyBvbiBhIHNjaGVkdWxlLiBUaGlzIHBvbGljeSBpcyB1c2VkIHdpdGggdGhlIFF1aWNrIFNldHVwIHNjaGVkdWxlciBjb25maWd1cmF0aW9uIHR5cGUuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBTdGFydFN0b3BJbnN0YW5jZXNFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cFN0YXJ0U3RvcEluc3RhbmNlc0V4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBzZXQgb2YgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gcGVyZm9ybSBRdWlja1NpZ2h0IEFzc2V0IEJ1bmRsZSBFeHBvcnQgT3BlcmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NpZ2h0QXNzZXRCdW5kbGVFeHBvcnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTaWdodEFzc2V0QnVuZGxlRXhwb3J0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdGhlIHNldCBvZiBwZXJtaXNzaW9ucyByZXF1aXJlZCB0byBwZXJmb3JtIFF1aWNrU2lnaHQgQXNzZXQgQnVuZGxlIEltcG9ydCBPcGVyYXRpb25zICovXG4gICAgcHVibGljIEFXU1F1aWNrU2lnaHRBc3NldEJ1bmRsZUltcG9ydFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0QXNzZXRCdW5kbGVJbXBvcnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBRdWlja3NpZ2h0IGFjY2VzcyB0byBBdGhlbmEgQVBJIGFuZCBTMyBidWNrZXRzIHVzZWQgZm9yIEF0aGVuYSBxdWVyeSByZXN1bHRzICovXG4gICAgcHVibGljIEFXU1F1aWNrc2lnaHRBdGhlbmFBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tzaWdodEF0aGVuYUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IFF1aWNrU2lnaHQgdG8gZGVzY3JpYmUgdGhlIFJEUyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTaWdodERlc2NyaWJlUkRTKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2lnaHREZXNjcmliZVJEUyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IFF1aWNrU2lnaHQgdG8gZGVzY3JpYmUgUmVkc2hpZnQgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU1F1aWNrU2lnaHREZXNjcmliZVJlZHNoaWZ0KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2lnaHREZXNjcmliZVJlZHNoaWZ0KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFtYXpvbiBFbGFzdGljc2VhcmNoIHJlc291cmNlcyBmcm9tIEFtYXpvbiBRdWlja1NpZ2h0ICovXG4gICAgcHVibGljIEFXU1F1aWNrU2lnaHRFbGFzdGljc2VhcmNoUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2lnaHRFbGFzdGljc2VhcmNoUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR2l2ZSBRdWlja1NpZ2h0IHJlYWQtb25seSBhY2Nlc3MgdG8gSW9UIEFuYWx5dGljcyBkYXRhc2V0cyAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NpZ2h0SW9UQW5hbHl0aWNzQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2lnaHRJb1RBbmFseXRpY3NBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBRdWlja1NpZ2h0IHRvIGxpc3QgSUFNIGVudGl0aWVzICovXG4gICAgcHVibGljIEFXU1F1aWNrU2lnaHRMaXN0SUFNKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2lnaHRMaXN0SUFNKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFtYXpvbiBPcGVuU2VhcmNoIHJlc291cmNlcyBmcm9tIEFtYXpvbiBRdWlja1NpZ2h0ICovXG4gICAgcHVibGljIEFXU1F1aWNrc2lnaHRPcGVuU2VhcmNoUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrc2lnaHRPcGVuU2VhcmNoUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFtYXpvbiBTYWdlTWFrZXIgcmVzb3VyY2VzIGZyb20gQW1hem9uIFF1aWNrU2lnaHQgKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTaWdodFNhZ2VNYWtlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0U2FnZU1ha2VyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHVzZWQgYnkgUXVpY2tTaWdodCB0byBjcmVhdGUgc2VjcmV0cyBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyIGFuZCB0byBhdHRhY2ggcmVzb3VyY2UgcG9saWNpZXMgb24gZXhpc3RpbmcgUXVpY2tTaWdodCBzZWNyZXRzLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NpZ2h0U2VjcmV0c01hbmFnZXJXcml0ZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0U2VjcmV0c01hbmFnZXJXcml0ZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB1c2VkIGJ5IFF1aWNrU2lnaHQgdG8gY3JlYXRlIHNlY3JldHMgaW4gQVdTIFNlY3JldHMgTWFuYWdlciBhbmQgdG8gYXR0YWNoIHJlc291cmNlIHBvbGljaWVzIG9uIGV4aXN0aW5nIFF1aWNrU2lnaHQgc2VjcmV0cy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTaWdodFNlY3JldHNNYW5hZ2VyV3JpdGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTaWdodFNlY3JldHNNYW5hZ2VyV3JpdGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgUXVpY2tTaWdodCBhY2Nlc3MgdG8gQVdTIFRpbWVzdHJlYW0gQVBJcy4gQ3VzdG9tZXJzIGNhbiBhdHRhY2ggdGhpcyBwb2xpY3kgdG8gQVdTIFF1aWNrU2lnaHQgcm9sZSB0byBhbGxvdyByZXRyaWV2YWwgb2YgZGF0YSBhbmQgbWV0YWRhdGEuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2lnaHRUaW1lc3RyZWFtUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2lnaHRUaW1lc3RyZWFtUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFZQQyBSZWFjaGFiaWxpdHkgQW5hbHl6ZXIgdG8gYWNjZXNzIEFXUyByZXNvdXJjZXMgYW5kIGludGVncmF0ZSB3aXRoIEFXUyBPcmdhbml6YXRpb25zIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NSZWFjaGFiaWxpdHlBbmFseXplclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1JlYWNoYWJpbGl0eUFuYWx5emVyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbiB0byB1c2UgQVdTIHNlcnZpY2VzIHdpdGggdGhlIEFXUyBUb29sa2l0IGZvciAuTkVUIFJlZmFjdG9yaW5nIGV4dGVuc2lvbiBmb3IgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8uIEl0IGlzIGludGVuZGVkIHRvIGJlIGF0dGFjaGVkIHRvIGEgbG9jYWwgQVdTIHByb2ZpbGUuIFRoZSBwb2xpY3kgYWxsb3dzIHVwbG9hZGluZyBhcHBsaWNhdGlvbiBhcnRpZmFjdHMgYW5kIGRvd25sb2FkaW5nIHRoZSByZXN1bHRpbmcgYXJ0aWZhY3RzIGZyb20gQW1hem9uIFMzLiBJdCBhbGxvd3MgYnVpbGRpbmcgYXBwbGljYXRpb25zIGludG8gYSBjb250YWluZXIgaW1hZ2UgdXNpbmcgQVdTIENvZGVCdWlsZCBhbmQgc3RvcmluZyBhbmQgcmV0cmlldmluZyB0aGUgaW1hZ2VzIGZyb20gQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFJlZ2lzdHJ5IChBbWF6b24gRUNSKS4gQW5kIGl0IGFsbG93cyBkZXBsb3ltZW50IG9mIHRoZSBhcHBsaWNhdGlvbiB0byBjb250YWluZXIgc2VydmljZXMgb24gQVdTIHN1Y2ggYXMgQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgKEFtYXpvbiBFQ1MpLCBvcHRpb25hbCBjcmVhdGlvbiBvZiBWUEMgcmVzb3VyY2VzLCBvcHRpb25hbCBjb25uZWN0aW9uIHRvIGV4aXN0aW5nIGluZnJhc3RydWN0dXJlIHN1Y2ggYXMgQVdTIERpcmVjdG9yeSBTZXJ2aWNlLCBhbmQgb3RoZXIgcmVsYXRlZCBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTUmVmYWN0b3JpbmdUb29sa2l0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZWZhY3RvcmluZ1Rvb2xraXRGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBBbWF6b24gRUNTIFRhc2tzIGNyZWF0ZWQgZm9yIHRlc3RpbmcgYXBwbGljYXRpb25zIGluIEFXUyB1c2luZyB0aGUgQVdTIFRvb2xraXQgZm9yIC5ORVQgUmVmYWN0b3JpbmcgZXh0ZW5zaW9uIGZvciBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpby4gVGhlIHBvbGljeSBncmFudHMgYWNjZXNzIHRvIGRvd25sb2FkIGFwcGxpY2F0aW9uIGFydGlmYWN0cyBmcm9tIEFtYXpvbiBTMywgY29tbXVuaWNhdGUgdGhlIHN0YXR1cyBvZiB0aGUgVGFzayB1c2luZyBBV1MgU3lzdGVtcyBNYW5hZ2VyLCBhbmQgb3RoZXIgcmVxdWlyZWQgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU1JlZmFjdG9yaW5nVG9vbGtpdFNpZGVjYXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVmYWN0b3JpbmdUb29sa2l0U2lkZWNhclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlOlBvc3QgUHJpdmF0ZSBhY2Nlc3MgdG8gcHVibGlzaCBDbG91ZFdhdGNoIG1ldHJpY3MgZGF0YSAqL1xuICAgIHB1YmxpYyBBV1NyZVBvc3RQcml2YXRlQ2xvdWRXYXRjaEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NyZVBvc3RQcml2YXRlQ2xvdWRXYXRjaEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyB0aGUgcmU6UG9zdCBTcGFjZSBzZXJ2aWNlIHRvIGNyZWF0ZSwgbWFuYWdlLCBhbmQgcmVzb2x2ZSBTdXBwb3J0IGNhc2VzIHRoYXQgYXJlIGNyZWF0ZWQgdGhyb3VnaCB0aGUgU3BhY2UgYXBwbGljYXRpb24uICovXG4gICAgcHVibGljIEFXU1JlcG9zdFNwYWNlU3VwcG9ydE9wZXJhdGlvbnNQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVwb3N0U3BhY2VTdXBwb3J0T3BlcmF0aW9uc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIFJlc2lsaWVuY2UgSHViIHNlcnZpY2Ugcm9sZSB3aGljaCBhbGxvd3MgYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlcyBpbiBvcmRlciB0byBleGVjdXRlIGFzc2Vzc21lbnQuICovXG4gICAgcHVibGljIEFXU1Jlc2lsaWVuY2VIdWJBc3NzZXNzbWVudEV4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXNpbGllbmNlSHViQXNzc2Vzc21lbnRFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIEFXUyBSZXNpbGllbmNlIEh1YiBzZXJ2aWNlIHJvbGUgd2hpY2ggYWxsb3dzIGFjY2VzcyB0byBBV1MgRmF1bHQgSW5qZWN0aW9uIFNlcnZpY2UgaW4gb3JkZXIgdG8gc3RhcnQgcmVzaWxpZW5jZSB0ZXN0aW5nLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNpbGllbmNlSHViUmVzaWxpZW5jZVRlc3RpbmdQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzaWxpZW5jZUh1YlJlc2lsaWVuY2VUZXN0aW5nUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBSZXNpbGllbmNlIEh1YiB0byBhY2Nlc3MgcmVzb3VyY2VzIGluIHlvdXIgYWNjb3VudCBmb3IgcmVzaWxpZW5jZSBkaXNjb3ZlcnksIGFzc2Vzc21lbnQsIGFuZCBtYW5hZ2VtZW50LiAqL1xuICAgIHB1YmxpYyBBV1NSZXNpbGllbmNlSHViU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzaWxpZW5jZUh1YlNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBSZXNpbGllbmNlIEh1YiB0byBhY2Nlc3MgcmVzb3VyY2VzIGluIHlvdXIgYWNjb3VudCBmb3IgcmVzaWxpZW5jZSBkaXNjb3ZlcnksIGFzc2Vzc21lbnQsIGFuZCBtYW5hZ2VtZW50LiBUaGlzIHBvbGljeSBncmFudHMgd2lsZGNhcmRlZCByZWFkLW9ubHkgcGVybWlzc2lvbnMgdGhhdCBtYXkgaW5jbHVkZSBzZW5zaXRpdmUgaW5mb3JtYXRpb24gaW4gdGhlIG91dHB1dC4gKi9cbiAgICBwdWJsaWMgQVdTUmVzaWxpZW5jZUh1YlYyQXNzZXNzbWVudEV4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXNpbGllbmNlSHViVjJBc3Nlc3NtZW50RXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFJlc291cmNlIEFjY2VzcyBNYW5hZ2VyICovXG4gICAgcHVibGljIEFXU1Jlc291cmNlQWNjZXNzTWFuYWdlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzb3VyY2VBY2Nlc3NNYW5hZ2VyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIFJlc291cmNlIEFjY2VzcyBNYW5hZ2VyLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUFjY2Vzc01hbmFnZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXNvdXJjZUFjY2Vzc01hbmFnZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgUmVzb3VyY2UgQWNjZXNzIE1hbmFnZXIgQVBJcyBuZWVkZWQgYnkgYSByZXNvdXJjZSBzaGFyZSBwYXJ0aWNpcGFudC4gKi9cbiAgICBwdWJsaWMgQVdTUmVzb3VyY2VBY2Nlc3NNYW5hZ2VyUmVzb3VyY2VTaGFyZVBhcnRpY2lwYW50QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Jlc291cmNlQWNjZXNzTWFuYWdlclJlc291cmNlU2hhcmVQYXJ0aWNpcGFudEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBjb250YWluaW5nIFJlYWQtb25seSBBV1MgUmVzb3VyY2UgQWNjZXNzIE1hbmFnZXIgYWNjZXNzIHRvIGN1c3RvbWVycycgT3JnYW5pemF0aW9ucyBzdHJ1Y3R1cmUuIEl0IGFsc28gY29udGFpbnMgSUFNIHBlcm1pc3Npb25zIHRvIHNlbGYtZGVsZXRlIHRoZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUFjY2Vzc01hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXNvdXJjZUFjY2Vzc01hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgUmVzb3VyY2UgRXhwbG9yZXIgcmVzb3VyY2VzIGFuZCBncmFudHMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIHRvIG90aGVyIEFXUyBzZXJ2aWNlcyB0byBzdXBwb3J0IHRoaXMgYWNjZXNzLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUV4cGxvcmVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXNvdXJjZUV4cGxvcmVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucyB0byBSZXNvdXJjZSBFeHBsb3JlciBhbmQgZ3JhbnRzIHJlYWQtb25seSBwZXJtaXNzaW9ucyB0byBvdGhlciBBV1Mgc2VydmljZXMgdG8gc3VwcG9ydCB0aGlzIGFjY2Vzcy4gVGhlIEFXUyBPcmdhbml6YXRpb25zIGFkbWluaXN0cmF0b3IgbmVlZHMgdGhlc2UgcGVybWlzc2lvbnMgdG8gc2V0dXAgYW5kIG1hbmFnZSBtdWx0aS1hY2NvdW50IHNlYXJjaCBpbiB0aGUgY29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTUmVzb3VyY2VFeHBsb3Jlck9yZ2FuaXphdGlvbnNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzb3VyY2VFeHBsb3Jlck9yZ2FuaXphdGlvbnNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIHRvIHNlYXJjaCBmb3IgYW5kIHZpZXcgUmVzb3VyY2UgRXhwbG9yZXIgcmVzb3VyY2VzIGFuZCBncmFudHMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIHRvIG90aGVyIEFXUyBzZXJ2aWNlcyB0byBzdXBwb3J0IHRoaXMgYWNjZXNzLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUV4cGxvcmVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzb3VyY2VFeHBsb3JlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFJlc291cmNlIEV4cGxvcmVyIHRvIHZpZXcgcmVzb3VyY2VzIGFuZCBDbG91ZFRyYWlsIGV2ZW50cyBvbiB5b3VyIGJlaGFsZiB0byBpbmRleCB5b3VyIHJlc291cmNlcyBmb3Igc2VhcmNoLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUV4cGxvcmVyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzb3VyY2VFeHBsb3JlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBpcyB0aGUgcmVhZCBvbmx5IHBvbGljeSBmb3IgQVdTIFJlc291cmNlIEdyb3VwcyAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUdyb3Vwc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Jlc291cmNlR3JvdXBzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBuZWNlc3NhcnkgYWNjZXNzIGZvciByZXZlbnVlIGF0dHJpYnV0aW9uIG1hbmFnZW1lbnQgYWN0aXZpdGllcy4gKi9cbiAgICBwdWJsaWMgQVdTUmV2ZW51ZUF0dHJpYnV0aW9uTWFuYWdlbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXZlbnVlQXR0cmlidXRpb25NYW5hZ2VtZW50KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFJvYm9NYWtlciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gQWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgKGUuZy4sIFMzLCBJQU0pLiAqL1xuICAgIHB1YmxpYyBBV1NSb2JvTWFrZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1JvYm9NYWtlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBSb2JvTWFrZXIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsgKi9cbiAgICBwdWJsaWMgQVdTUm9ib01ha2VyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUm9ib01ha2VyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBSb2JvTWFrZXIgc2VydmljZSBwb2xpY3kgKi9cbiAgICBwdWJsaWMgQVdTUm9ib01ha2VyU2VydmljZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSb2JvTWFrZXJTZXJ2aWNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUm9ib01ha2VyIHNlcnZpY2UgcG9saWN5ICovXG4gICAgcHVibGljIEFXU1JvYm9NYWtlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1JvYm9NYWtlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWxsIHBlcm1pc3Npb25zIHRvIElBTSBSb2xlcyBBbnl3aGVyZSByZXNvdXJjZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG86IENyZWF0ZVByb2ZpbGUsIERlbGV0ZVRydXN0QW5jaG9yLCBEaXNhYmxlQ1JMLCBSZXNldE5vdGlmaWNhdGlvblNldHRpbmdzLiAqL1xuICAgIHB1YmxpYyBBV1NSb2xlc0FueXdoZXJlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSb2xlc0FueXdoZXJlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBwZXJtaXNzaW9ucyB0byBJQU0gUm9sZXMgQW55d2hlcmUgcmVzb3VyY2VzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvOiBHZXRUcnVzdEFuY2hvciwgTGlzdFByb2ZpbGVzLCBHZXRDUkwuIFRoZXJlIHdpbGwgYmUgbm8gb3RoZXIgcGVybWlzc2lvbnMgZm9yIG90aGVyIHNlcnZpY2VzIGluY2x1ZGVkIGluIHRoaXMgcG9saWN5LiAqL1xuICAgIHB1YmxpYyBBV1NSb2xlc0FueXdoZXJlUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUm9sZXNBbnl3aGVyZVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIElBTSBSb2xlcyBBbnl3aGVyZSB0byBwdWJsaXNoIHNlcnZpY2UvdXNhZ2UgbWV0cmljcyB0byBDbG91ZFdhdGNoIGFuZCBjaGVjayB0aGUgc3RhdHVzIG9mIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXRpZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU1JvbGVzQW55d2hlcmVTZXJ2aWNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1JvbGVzQW55d2hlcmVTZXJ2aWNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgQW1hem9uIFMzIG9uIE91dHBvc3RzIHNlcnZpY2UgdG8gbWFuYWdlIEVDMiBuZXR3b3JrIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTUzNPbk91dHBvc3RzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUzNPbk91dHBvc3RzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBTYXZpbmdzIFBsYW5zIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQVdTU2F2aW5nc1BsYW5zRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTYXZpbmdzUGxhbnNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBTYXZpbmdzIFBsYW5zIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQVdTU2F2aW5nc1BsYW5zUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2F2aW5nc1BsYW5zUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBTRE1QIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHJlc291cmNlcyBvbiBiZWhhbGYgb2YgdGhlIGN1c3RvbWVyLiAqL1xuICAgIHB1YmxpYyBBV1NTRE1QU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU0RNUFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHJldHJpZXZlIGFuZCBkZXNjcmliZSBzZWNyZXRzIGZyb20gU2VjcmV0cyBNYW5hZ2VyLiBUaGlzIHBvbGljeSBhbHNvIGFsbG93cyBkZWNyeXB0aW5nIEtNUyBrZXlzIGZvciBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0cy4gKi9cbiAgICBwdWJsaWMgQVdTU2VjcmV0c01hbmFnZXJDbGllbnRSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWNyZXRzTWFuYWdlckNsaWVudFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBTZWN1cml0eSBBZ2VudCB0byBtYW5hZ2UgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUFnZW50U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VjdXJpdHlBZ2VudFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIGF1dGhlbnRpY2F0ZWQgdXNlcnMgdG8gYWNjZXNzIHRoZSBTZWN1cml0eSBBZ2VudCBXZWIgQXBwbGljYXRpb24gZm9yIGNvbmZpZ3VyaW5nIGFuZCBleGVjdXRpbmcgYXV0b21hdGVkIHNlY3VyaXR5IHBlbmV0cmF0aW9uIHRlc3RzLiBUaGlzIHBvbGljeSBlbmFibGVzIHVzZXJzIHRvIG1hbmFnZSBwZW50ZXN0cywgdmlldyBmaW5kaW5ncywgbW9uaXRvciB0ZXN0IGV4ZWN1dGlvbiwgYW5kIGludGVyYWN0IHdpdGggQVdTIHJlc291cmNlcyByZXF1aXJlZCBmb3Igc2VjdXJpdHkgdGVzdGluZyBvcGVyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUFnZW50V2ViQXBwUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlY3VyaXR5QWdlbnRXZWJBcHBQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB1c2UgQVdTIFNlY3VyaXR5IEh1Yi4gKi9cbiAgICBwdWJsaWMgQVdTU2VjdXJpdHlIdWJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlY3VyaXR5SHViRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGVuYWJsZSBhbmQgbWFuYWdlIEFXUyBTZWN1cml0eSBIdWIgd2l0aGluIGFuIG9yZ2FuaXphdGlvbi4gSW5jbHVkZXMgZW5hYmxpbmcgdGhlIHNlcnZpY2UgYWNyb3NzIHRoZSBvcmdhbml6YXRpb24sIGFuZCBkZXRlcm1pbmluZyB0aGUgZGVsZWdhdGVkIGFkbWluaXN0cmF0b3IgYWNjb3VudCBmb3IgdGhlIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU1NlY3VyaXR5SHViT3JnYW5pemF0aW9uc0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWN1cml0eUh1Yk9yZ2FuaXphdGlvbnNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBTZWN1cml0eSBIdWIgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU1NlY3VyaXR5SHViUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VjdXJpdHlIdWJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEEgc2VydmljZS1saW5rZWQgcm9sZSByZXF1aXJlZCBmb3IgQVdTIFNlY3VyaXR5IEh1YiB0byBhY2Nlc3MgeW91ciByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU1NlY3VyaXR5SHViU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VjdXJpdHlIdWJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBTZWN1cml0eSBIdWIgdG8gbWFuYWdlIEFXUyBDb25maWcgcnVsZXMgYW5kIFNlY3VyaXR5IEh1YiByZXNvdXJjZXMgaW4geW91ciBvcmdhbml6YXRpb24gYW5kIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUh1YlYyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VjdXJpdHlIdWJWMlNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHByb3ZpZGVzIGN1c3RvbWVycyB3aXRoIFJlYWQgYW5kIFdyaXRlIHBlcm1pc3Npb25zIHRvIGNhc2UgcmVzb3VyY2VzIHRoYXQgYXJlIGNyZWF0ZWQgdGhyb3VnaCB0aGUgU2VjdXJpdHkgSW5jaWRlbnQgUmVzcG9uc2Ugc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTU2VjdXJpdHlJbmNpZGVudFJlc3BvbnNlQ2FzZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VjdXJpdHlJbmNpZGVudFJlc3BvbnNlQ2FzZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgcHJvdmlkZXMgY3VzdG9tZXJzIHdpdGggUmVhZCBhbmQgV3JpdGUgcGVybWlzc2lvbnMgdG8gYWxsIHJlc291cmNlcyBhc3NvY2lhdGVkIHRvIHRoZSBTZWN1cml0eSBJbmNpZGVudCBSZXNwb25zZSBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUluY2lkZW50UmVzcG9uc2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlY3VyaXR5SW5jaWRlbnRSZXNwb25zZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgcHJvdmlkZXMgY3VzdG9tZXJzIHdpdGggUmVhZC1vbmx5IHBlcm1pc3Npb25zIHRvIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB0byB0aGUgU2VjdXJpdHkgSW5jaWRlbnQgUmVzcG9uc2Ugc2VydmljZS4gUGVybWlzc2lvbiBpbmNsdWRlcyBhY2Nlc3MgdG8gR2V0Q2FzZUF0dGFjaG1lbnREb3dubG9hZFVybCBhcyB3ZWxsIGZvciB0aGUgYWJpbGl0eSB0byBnZXQgY2FzZSBhdHRhY2htZW50IGRvd25sb2FkIFVSTHMuICovXG4gICAgcHVibGljIEFXU1NlY3VyaXR5SW5jaWRlbnRSZXNwb25zZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlY3VyaXR5SW5jaWRlbnRSZXNwb25zZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBSZXNvdXJjZXMgbWFuYWdlZCBvciB1c2VkIGJ5IFNlY3VyaXR5IEluY2lkZW50IFJlc3BvbnNlICovXG4gICAgcHVibGljIEFXU1NlY3VyaXR5SW5jaWRlbnRSZXNwb25zZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlY3VyaXR5SW5jaWRlbnRSZXNwb25zZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBTZWN1cml0eSBJbmNpZGVudCBSZXNwb25zZSB0byBjb250aW51b3VzbHkgbW9uaXRvciB5b3VyIGVudmlyb25tZW50IGZvciBzZWN1cml0eSB0aHJlYXRzLCB0dW5lIHNlY3VyaXR5IHNlcnZpY2VzIHRvIHJlZHVjZSBhbGVydCBub2lzZSwgYW5kIGdhdGhlciBpbmZvcm1hdGlvbiB0byBpbnZlc3RpZ2F0ZSBwb3RlbnRpYWwgaW5jaWRlbnRzLiAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUluY2lkZW50UmVzcG9uc2VUcmlhZ2VTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWN1cml0eUluY2lkZW50UmVzcG9uc2VUcmlhZ2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHNlcnZpY2UgY2F0YWxvZyBhZG1pbiBjYXBhYmlsaXRpZXMgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZUNhdGFsb2dBZG1pbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZUNhdGFsb2dBZG1pbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIFNlcnZpY2UgQ2F0YWxvZyBhZG1pbiBjYXBhYmlsaXRpZXMgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZUNhdGFsb2dBZG1pblJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VDYXRhbG9nQWRtaW5SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIFNlcnZpY2UgQ2F0YWxvZyBBcHAgUmVnaXN0cnkgY2FwYWJpbGl0aWVzICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VDYXRhbG9nQXBwUmVnaXN0cnlGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VDYXRhbG9nQXBwUmVnaXN0cnlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBTZXJ2aWNlIENhdGFsb2cgQXBwIFJlZ2lzdHJ5IGNhcGFiaWxpdGVzICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VDYXRhbG9nQXBwUmVnaXN0cnlSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlQ2F0YWxvZ0FwcFJlZ2lzdHJ5UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgU2VydmljZSBDYXRhbG9nIEFwcFJlZ2lzdHJ5IHRvIG1hbmFnZSBSZXNvdXJjZSBHcm91cHMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZUNhdGFsb2dBcHBSZWdpc3RyeVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VDYXRhbG9nQXBwUmVnaXN0cnlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHNlcnZpY2UgY2F0YWxvZyBlbmR1c2VyIGNhcGFiaWxpdGllcyAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlQ2F0YWxvZ0VuZFVzZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VDYXRhbG9nRW5kVXNlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIFNlcnZpY2UgQ2F0YWxvZyBlbmQtdXNlciBjYXBhYmlsaXRpZXMgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZUNhdGFsb2dFbmRVc2VyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZUNhdGFsb2dFbmRVc2VyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBIFNlcnZpY2UgTGlua2VkIFJvbGUgUG9saWN5IGZvciBBV1MgU2VydmljZUNhdGFsb2cgdG8gc3luYyB3aXRoIEFXUyBPcmdhbml6YXRpb25zIG9yZ2FuaXphdGlvbiBzdHJ1Y3R1cmUgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZUNhdGFsb2dPcmdzRGF0YVN5bmNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlQ2F0YWxvZ09yZ3NEYXRhU3luY1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQSBTZXJ2aWNlIExpbmtlZCBSb2xlIGZvciBBV1MgU2VydmljZUNhdGFsb2cgdG8gc3luYyBQcm92aXNpb25pbmcgQXJ0aWZhY3RzIGZyb20gc291cmNlIHJlcG9zaXRvcmllcyAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlQ2F0YWxvZ1N5bmNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlQ2F0YWxvZ1N5bmNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgU2VydmljZSBMaW5rZWQgUm9sZSBwcm92aWRlcyBBSURldk9wcyBhYmlsaXR5IHRvIHByb3ZpZGUgdXNhZ2UgaW5mb3JtYXRpb24uICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yQUlEZXZPcHNQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JBSURldk9wc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciBtYW5hZ2luZyBub2RlZ3JvdXBzIGluIHRoZSBjdXN0b21lcidzIGFjY291bnQuIFRoZXNlIHBvbGljaWVzIHJlbGF0ZWQgdG8gbWFuYWdlbWVudCBvZiB0aGUgZm9sbG93aW5nIHJlc291cmNlczogQXV0b3NjYWxpbmdHcm91cHMsIFNlY3VyaXR5R3JvdXBzLCBMYXVuY2hUZW1wbGF0ZXMgYW5kIEluc3RhbmNlUHJvZmlsZXMuICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yQW1hem9uRUtTTm9kZWdyb3VwKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yQW1hem9uRUtTTm9kZWdyb3VwKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBTZXJ2aWNlIExpbmtlZCBSb2xlIHByb3ZpZGVzIEFtYXpvbiBRIERldmVsb3BlciBhYmlsaXR5IHRvIHByb3ZpZGUgdXNhZ2UgaW5mb3JtYXRpb24uICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yQW1hem9uUURldmVsb3BlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvckFtYXpvblFEZXZlbG9wZXIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIFNlcnZpY2UtTGlua2VkIFJvbGUgcHJvdmlkZXMgQVdTIFRyYW5zZm9ybSB3aXRoIHRoZSBhYmlsaXR5IHRvIHByb3ZpZGUgdXNhZ2UgaW5mb3JtYXRpb24uICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yQVdTVHJhbnNmb3JtKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yQVdTVHJhbnNmb3JtKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBUcmFuc2Zvcm0gQ3VzdG9tIHRvIHB1Ymxpc2ggQ2xvdWRXYXRjaCBtZXRyaWNzIHRvIHlvdXIgYWNjb3VudCBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JBV1NUcmFuc2Zvcm1DdXN0b20oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JBV1NUcmFuc2Zvcm1DdXN0b20pO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gU3lzdGVtcyBNYW5hZ2VyIHJlc291cmNlcyB1c2VkIGJ5IENsb3VkV2F0Y2ggQWxhcm1zICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yQ2xvdWRXYXRjaEFsYXJtc0FjdGlvblNTTVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yQ2xvdWRXYXRjaEFsYXJtc0FjdGlvblNTTVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENsb3VkV2F0Y2ggdG8gYWNjZXNzIFJEUyBQZXJmb3JtYW5jZSBJbnNpZ2h0cyBtZXRyaWNzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yQ2xvdWRXYXRjaE1ldHJpY3NEYlBlcmZJbnNpZ2h0c1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yQ2xvdWRXYXRjaE1ldHJpY3NEYlBlcmZJbnNpZ2h0c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQSBzZXJ2aWNlLWxpbmtlZCByb2xlIHJlcXVpcmVkIGZvciBBbWF6b24gQ29kZUd1cnUgUHJvZmlsZXIgdG8gc2VuZCBub3RpZmljYXRpb25zIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckNvZGVHdXJ1UHJvZmlsZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JDb2RlR3VydVByb2ZpbGVyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyByb2xlIGdyYW50cyBwZXJtaXNzaW9ucyB0byBDb2RlV2hpc3BlcmVyIHRvIGFjY2VzcyBkYXRhIGluIHlvdXIgYWNjb3VudCB0byBjYWxjdWxhdGUgYmlsbGluZywgcHJvdmlkZXMgYWNjZXNzIHRvIGNyZWF0ZSBhbmQgYWNjZXNzIHNlY3VyaXR5IHJlcG9ydHMgaW4gQW1hem9uIENvZGVHdXJ1LCBhbmQgZW1pdCBkYXRhIHRvIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yQ29kZVdoaXNwZXJlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvckNvZGVXaGlzcGVyZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRUMyIFNjaGVkdWxlZCBJbnN0YW5jZXMgdG8gbGF1bmNoIGFuZCBtYW5hZ2Ugc3BvdCBpbnN0YW5jZXMuICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yRUMyU2NoZWR1bGVkSW5zdGFuY2VzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yRUMyU2NoZWR1bGVkSW5zdGFuY2VzKTtcbiAgICB9XG5cbiAgICAvKiogQVdTIEdyb3VuZFN0YXRpb24gdXNlcyB0aGlzIHNlcnZpY2UtbGlua2VkIHJvbGUgdG8gaW52b2tlIEVDMiB0byBmaW5kIHB1YmxpYyBJUHY0IGFkZHJlc3NlcyAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckdyb3VuZFN0YXRpb25EYXRhZmxvd0VuZHBvaW50R3JvdXBQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JHcm91bmRTdGF0aW9uRGF0YWZsb3dFbmRwb2ludEdyb3VwUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEVDMkltYWdlQnVpbGRlciB0byBjYWxsIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JJbWFnZUJ1aWxkZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JJbWFnZUJ1aWxkZXIpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIElvVCBTaXRlV2lzZSB0byBwcm92aXNpb24gYW5kIG1hbmFnZSBnYXRld2F5cyBhcyB3ZWxsIGFzIHF1ZXJ5IGRhdGEuIFRoZSBwb2xpY3kgaW5jbHVkZXMgcmVxdWlyZWQgQVdTIEdyZWVuZ3Jhc3MgcGVybWlzc2lvbnMgZm9yIGRlcGxveWluZyB0byBncm91cHMsIEFXUyBMYW1iZGEgcGVybWlzc2lvbnMgZm9yIGNyZWF0aW5nIGFuZCB1cGRhdGluZyBzZXJ2aWNlLXByZWZpeGVkIGZ1bmN0aW9ucywgYW5kIEFXUyBJb1QgQW5hbHl0aWNzIHBlcm1pc3Npb25zIGZvciBxdWVyeWluZyBkYXRhIGZyb20gZGF0YXN0b3Jlcy4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JJb1RTaXRlV2lzZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvcklvVFNpdGVXaXNlKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIExvZyBEZWxpdmVyeSBzZXJ2aWNlIHRvIGRlbGl2ZXIgbG9ncyBieSBjYWxsaW5nIGxvZyBkZXN0aW5hdGlvbiBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JMb2dEZWxpdmVyeVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvckxvZ0RlbGl2ZXJ5UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIEFtYXpvbiBNb25pdHJvbiBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgQVdTIHJlc291cmNlcywgaW5jbHVkaW5nIEFXUyBTU08gdXNlciBhc3NpZ25tZW50IG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvck1vbml0cm9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yTW9uaXRyb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBDbG91ZHdhdGNoIGFjY2VzcyB0byBwdWJsaXNoIG9wZXJhdGlvbmFsIGFuZCB1c2FnZSBtZXRyaWNzIGFuZCBsb2dzIGZvciBBbWF6b24gTmVwdHVuZSAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvck5lcHR1bmVHcmFwaFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvck5lcHR1bmVHcmFwaFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGRlc2NyaWJlIGFuZCB1cGRhdGUgUHJpdmF0ZSBNYXJrZXRwbGFjZSByZXNvdXJjZXMgYW5kIGRlc2NyaWJlIEFXUyBPcmdhbml6YXRpb25zICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yUHJpdmF0ZU1hcmtldHBsYWNlQWRtaW5Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JQcml2YXRlTWFya2V0cGxhY2VBZG1pblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgUHJvY3VyZW1lbnQgSW5zaWdodHMgdG8gb2J0YWluIE9yZ2FuaXphdGlvbiBBY2NvdW50IGRldGFpbHMgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JQcm9jdXJlbWVudEluc2lnaHRzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yUHJvY3VyZW1lbnRJbnNpZ2h0c1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1Mgc2VydmljZXMgYW5kIHJlc291cmNlcyBuZWNlc3NhcnkgdG8gbWlncmF0ZSBzZXJ2aWNlIGluc3RhbmNlcyBpbnRvIEFXUyBpbmNsdWRpbmcgRUMyLCBTMyBhbmQgQ2xvdWRmb3JtYXRpb24uICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yU01TKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yU01TKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBVc2VyIFN1YnNjcmlwdGlvbnMgc2VydmljZSB0byB5b3VyIElkZW50aXR5IENlbnRlciByZXNvdXJjZXMgdG8gYXV0b21hdGljYWxseSB1cGRhdGUgeW91ciBzdWJzY3JpcHRpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvclVzZXJTdWJzY3JpcHRpb25zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yVXNlclN1YnNjcmlwdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBV1MgQmFja3VwIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBjb21wbGlhbmNlIHJlcG9ydHMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVQb2xpY3lGb3JCYWNrdXBSZXBvcnRzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlUG9saWN5Rm9yQmFja3VwUmVwb3J0cyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGNvbnRhaW5zIHBlcm1pc3Npb25zIGZvciB0ZXN0aW5nIHJlc3RvcmVzIGFuZCBmb3IgY2xlYW5pbmcgdXAgcmVzb3VyY2VzIGNyZWF0ZWQgZHVyaW5nIHRlc3RzLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZVBvbGljeUZvckJhY2t1cFJlc3RvcmVUZXN0aW5nKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlUG9saWN5Rm9yQmFja3VwUmVzdG9yZVRlc3RpbmcpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIG1hbmFnZWQgcG9saWN5IHByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyB0byBtYW5hZ2UgRUMyIGluc3RhbmNlcyBpbiB5b3VyIEFXUyBhY2NvdW50ICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlUG9saWN5Rm9yV29ya3NwYWNlc0luc3RhbmNlcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZVBvbGljeUZvcldvcmtzcGFjZXNJbnN0YW5jZXMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB0aGUgQVdTIEREb1MgUmVzcG9uc2UgVGVhbSB3aXRoIGxpbWl0ZWQgYWNjZXNzIHRvIHlvdXIgQVdTIGFjY291bnQgdG8gYXNzaXN0IHdpdGggRERvUyBhdHRhY2sgbWl0aWdhdGlvbiBkdXJpbmcgYSBoaWdoLXNldmVyaXR5IGV2ZW50LiAqL1xuICAgIHB1YmxpYyBBV1NTaGllbGREUlRBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2hpZWxkRFJUQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBTaGllbGQgdG8gYWNjZXNzIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYgdG8gcHJvdmlkZSBERG9TIHByb3RlY3Rpb24uICovXG4gICAgcHVibGljIEFXU1NoaWVsZFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NoaWVsZFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHB1Ymxpc2ggbWV0cmljcyBhbmQgcHJvdmlkZSBpbnNpZ2h0cyBmb3IgeW91ciBzb2NpYWwgbWVzc2FnZSBzZW5kaW5nLiAqL1xuICAgIHB1YmxpYyBBV1NTb2NpYWxNZXNzYWdpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTb2NpYWxNZXNzYWdpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBTeXN0ZW1zIE1hbmFnZXIgZm9yIFNBUCB3aXRoIHRoZSBwZXJtaXNzaW9ucyBuZWVkZWQgdG8gbWFuYWdlIGFuZCBpbnRlZ3JhdGUgU0FQIHNvZnR3YXJlIHdpdGggQVdTLiAqL1xuICAgIHB1YmxpYyBBV1NTU01Gb3JTQVBTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU01Gb3JTQVBTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgU2VydmljZSBMaW5rZWQgUm9sZSBBV1NTZXJ2aWNlUm9sZUZvckFtYXpvblNTTV9PcHNJbnNpZ2h0cyAqL1xuICAgIHB1YmxpYyBBV1NTU01PcHNJbnNpZ2h0c1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTTU9wc0luc2lnaHRzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBZG1pbmlzdHJhdG9yIGFjY2VzcyBmb3IgU1NPIERpcmVjdG9yeSAqL1xuICAgIHB1YmxpYyBBV1NTU09EaXJlY3RvcnlBZG1pbmlzdHJhdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTT0RpcmVjdG9yeUFkbWluaXN0cmF0b3IpO1xuICAgIH1cblxuICAgIC8qKiBSZWFkT25seSBhY2Nlc3MgZm9yIFNTTyBEaXJlY3RvcnkgKi9cbiAgICBwdWJsaWMgQVdTU1NPRGlyZWN0b3J5UmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NPRGlyZWN0b3J5UmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3Mgd2l0aGluIEFXUyBTU08gdG8gbWFuYWdlIEFXUyBPcmdhbml6YXRpb25zIG1hc3RlciBhbmQgbWVtYmVyIGFjY291bnRzIGFuZCBjbG91ZCBhcHBsaWNhdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NTU09NYXN0ZXJBY2NvdW50QWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU09NYXN0ZXJBY2NvdW50QWRtaW5pc3RyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB3aXRoaW4gQVdTIFNTTyB0byBtYW5hZ2UgQVdTIE9yZ2FuaXphdGlvbnMgbWVtYmVyIGFjY291bnRzIGFuZCBjbG91ZCBhcHBsaWNhdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NTU09NZW1iZXJBY2NvdW50QWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU09NZW1iZXJBY2NvdW50QWRtaW5pc3RyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIFNTTyBjb25maWd1cmF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTU1NPUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NPUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQVdTIFNTTyBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgQVdTIHJlc291cmNlcywgaW5jbHVkaW5nIElBTSByb2xlcywgcG9saWNpZXMgYW5kIFNBTUwgSWRQIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NTU09TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU09TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFuIGFjY2VzcyBwb2xpY3kgZm9yIHByb3ZpZGluZyBhIHVzZXIvcm9sZS9ldGMgYWNjZXNzIHRvIHRoZSBBV1MgU3RlcEZ1bmN0aW9ucyBjb25zb2xlLiBGb3IgYSBmdWxsIGNvbnNvbGUgZXhwZXJpZW5jZSwgaW4gYWRkaXRpb24gdG8gdGhpcyBwb2xpY3ksIGEgdXNlciBtYXkgbmVlZCBpYW06UGFzc1JvbGUgcGVybWlzc2lvbiBvbiBvdGhlciBJQU0gcm9sZXMgdGhhdCBjYW4gYmUgYXNzdW1lZCBieSB0aGUgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTU3RlcEZ1bmN0aW9uc0NvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N0ZXBGdW5jdGlvbnNDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFuIGFjY2VzcyBwb2xpY3kgZm9yIHByb3ZpZGluZyBhIHVzZXIvcm9sZS9ldGMgYWNjZXNzIHRvIHRoZSBBV1MgU3RlcEZ1bmN0aW9ucyBBUEkuIEZvciBmdWxsIGFjY2VzcywgaW4gYWRkaXRpb24gdG8gdGhpcyBwb2xpY3ksIGEgdXNlciBNVVNUIGhhdmUgaWFtOlBhc3NSb2xlIHBlcm1pc3Npb24gb24gYXQgbGVhc3Qgb25lIElBTSByb2xlIHRoYXQgY2FuIGJlIGFzc3VtZWQgYnkgdGhlIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU1N0ZXBGdW5jdGlvbnNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N0ZXBGdW5jdGlvbnNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQW4gYWNjZXNzIHBvbGljeSBmb3IgcHJvdmlkaW5nIGEgdXNlci9yb2xlL2V0YyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBBV1MgU3RlcEZ1bmN0aW9ucyBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NTdGVwRnVuY3Rpb25zUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3RlcEZ1bmN0aW9uc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFN0b3JhZ2UgR2F0ZXdheSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU1N0b3JhZ2VHYXRld2F5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTdG9yYWdlR2F0ZXdheUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIFN0b3JhZ2UgR2F0ZXdheSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU1N0b3JhZ2VHYXRld2F5UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3RvcmFnZUdhdGV3YXlSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UtbGlua2VkIHJvbGUgdXNlZCBieSBBV1MgU3RvcmFnZSBHYXRld2F5IHRvIGVuYWJsZSBpbnRlZ3JhdGlvbiBvZiBvdGhlciBBV1Mgc2VydmljZXMgd2l0aCBTdG9yYWdlIEdhdGV3YXkuICovXG4gICAgcHVibGljIEFXU1N0b3JhZ2VHYXRld2F5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3RvcmFnZUdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFXU1N1cHBseUNoYWluRmVkZXJhdGlvbkFkbWluQWNjZXNzIHByb3ZpZGVzIEFXUyBTdXBwbHkgQ2hhaW4gZmVkZXJhdGVkIHVzZXJzIGFjY2VzcyB0byB0aGUgQVdTIFN1cHBseSBDaGFpbiBhcHBsaWNhdGlvbiwgaW5jbHVkaW5nIHRoZSByZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBwZXJmb3JtIGFjdGlvbnMgd2l0aGluIHRoZSBBV1MgU3VwcGx5IENoYWluIGFwcGxpY2F0aW9uLiBUaGUgcG9saWN5IHByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zIG92ZXIgSUFNIElkZW50aXR5IENlbnRlciB1c2VycyBhbmQgZ3JvdXBzIGFuZCBpcyBhdHRhY2hlZCB0byBhIHJvbGUgY3JlYXRlZCBieSBBV1MgU3VwcGx5IENoYWluIG9uIHlvdXIgYmVoYWxmLiBZb3Ugc2hvdWxkbid0IGF0dGFjaCBBV1NTdXBwbHlDaGFpbkZlZGVyYXRpb25BZG1pbkFjY2VzcyBwb2xpY3kgdG8gYW55IG90aGVyIElBTSBlbnRpdGllcy4gKi9cbiAgICBwdWJsaWMgQVdTU3VwcGx5Q2hhaW5GZWRlcmF0aW9uQWRtaW5BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3VwcGx5Q2hhaW5GZWRlcmF0aW9uQWRtaW5BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdXNlcnMgdG8gYWNjZXNzIHRoZSBBV1MgU3VwcG9ydCBDZW50ZXIuICovXG4gICAgcHVibGljIEFXU1N1cHBvcnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3VwcG9ydEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgU3VwcG9ydCBBcHAgYW5kIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzLCBzdWNoIGFzIEFXUyBTdXBwb3J0IGFuZCBTZXJ2aWNlIFF1b3Rhcy4gVGhpcyBwb2xpY3kgaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBzdXBwb3J0aW5nIHNlcnZpY2VzIHNvIHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRhY3QgQVdTIFN1cHBvcnQgZm9yIHN1cHBvcnQgY2FzZXMsIGNoYW5nZSBzZXJ2aWNlIHF1b3RhcywgYW5kIGNyZWF0ZSB0aGUgcmVsZXZhbnQgc2VydmljZS1saW5rZWQgcm9sZXMuICovXG4gICAgcHVibGljIEFXU1N1cHBvcnRBcHBGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N1cHBvcnRBcHBGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgQVdTIFN1cHBvcnQgQXBwLiAqL1xuICAgIHB1YmxpYyBBV1NTdXBwb3J0QXBwUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3VwcG9ydEFwcFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gc3VwcG9ydHBsYW5zLiAqL1xuICAgIHB1YmxpYyBBV1NTdXBwb3J0UGxhbnNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N1cHBvcnRQbGFuc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHN1cHBvcnRwbGFucy4gKi9cbiAgICBwdWJsaWMgQVdTU3VwcG9ydFBsYW5zUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3VwcG9ydFBsYW5zUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIFN1cHBvcnQgUGxhbnMgdG8gcmVhZCBhbmQgdXBkYXRlIEFXUyByZXNvdXJjZXMgdXNlZCB0byBtYW5hZ2UgeW91ciBhY2NvdW50J3MgU3VwcG9ydCBQbGFuIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NTdXBwb3J0UGxhbnNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTdXBwb3J0UGxhbnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgU3VwcG9ydCB0byBhY2Nlc3MgQVdTIHJlc291cmNlcyB0byBwcm92aWRlIGJpbGxpbmcsIGFkbWluaXN0cmF0aXZlLCBhbmQgc3VwcG9ydCBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTU3VwcG9ydFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N1cHBvcnRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBBV1MgU3lzdGVtcyBNYW5hZ2VyIChTU00pIHBlcm1pc3Npb24gdG8gZGlzY292ZXIgQVdTIGFjY291bnQgaW5mb3JtYXRpb24uICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VyQWNjb3VudERpc2NvdmVyeVNlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJBY2NvdW50RGlzY292ZXJ5U2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgcmVzb3VyY2VzIG1hbmFnZWQgb3IgdXNlZCBieSB0aGUgQVdTIFN5c3RlbXMgTWFuYWdlciBjaGFuZ2UgbWFuYWdlbWVudCBmcmFtZXdvcmsuICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VyQ2hhbmdlTWFuYWdlbWVudFNlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJDaGFuZ2VNYW5hZ2VtZW50U2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBBV1MgU3lzdGVtcyBNYW5hZ2VyIFF1aWNrIFNldHVwIHRvIGVuYWJsZSBhbmQgY29uZmlndXJlIEFXUyBDb25maWcgY29uZmlndXJhdGlvbiByZWNvcmRpbmcuICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VyRW5hYmxlQ29uZmlnUmVjb3JkaW5nRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N5c3RlbXNNYW5hZ2VyRW5hYmxlQ29uZmlnUmVjb3JkaW5nRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zIGZvciBlbmFibGluZyBFeHBsb3JlciwgYSBjYXBhYmlsaXR5IG9mIEFXUyBTeXN0ZW1zIE1hbmFnZXIuIFRoaXMgaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gdXBkYXRlIHJlbGF0ZWQgU3lzdGVtcyBNYW5hZ2VyIHNlcnZpY2Ugc2V0dGluZ3MsIGFuZCB0byBjcmVhdGUgYSBzZXJ2aWNlLWxpbmtlZCByb2xlIGZvciBTeXN0ZW1zIE1hbmFnZXIuICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VyRW5hYmxlRXhwbG9yZXJFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJFbmFibGVFeHBsb3JlckV4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBTeXN0ZW1zIE1hbmFnZXIgZm9yIFNBUCBzZXJ2aWNlICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VyRm9yU0FQRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTeXN0ZW1zTWFuYWdlckZvclNBUEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBTeXN0ZW1zIE1hbmFnZXIgZm9yIFNBUCBzZXJ2aWNlICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VyRm9yU0FQUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJGb3JTQVBSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgcmVzb3VyY2VzIG1hbmFnZWQgb3IgdXNlZCBieSB0aGUgQVdTIFN5c3RlbXMgTWFuYWdlciBqdXN0IGluIHRpbWUgYWNjZXNzIGZyYW1ld29yay4gKi9cbiAgICBwdWJsaWMgQVdTU3lzdGVtc01hbmFnZXJKdXN0SW5UaW1lQWNjZXNzU2VydmljZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTeXN0ZW1zTWFuYWdlckp1c3RJblRpbWVBY2Nlc3NTZXJ2aWNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIG1hbmFnZWQgcG9saWN5IEFXU1N5c3RlbXNNYW5hZ2VySnVzdEluVGltZUFjY2Vzc1Rva2VuUG9saWN5IGFsbG93cyBTeXN0ZW1zIE1hbmFnZXIgdG8gZ2VuZXJhdGUgYWNjZXNzIHRva2VucyB1c2VkIGZvciBqdXN0LWluLXRpbWUgbm9kZSBhY2Nlc3MuICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VySnVzdEluVGltZUFjY2Vzc1Rva2VuUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N5c3RlbXNNYW5hZ2VySnVzdEluVGltZUFjY2Vzc1Rva2VuUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIG1hbmFnZWQgcG9saWN5IEFXU1N5c3RlbXNNYW5hZ2VySnVzdEluVGltZUFjY2Vzc1Rva2VuU2Vzc2lvblBvbGljeSBhbGxvd3MgU3lzdGVtcyBNYW5hZ2VyIHRvIGFwcGx5IHNjb3BlZCBkb3duIHBlcm1pc3Npb25zIHRvIGEganVzdC1pbi10aW1lIG5vZGUgYWNjZXNzIHNlc3Npb24gb25jZSBpdCBpcyBzdGFydGVkLiAqL1xuICAgIHB1YmxpYyBBV1NTeXN0ZW1zTWFuYWdlckp1c3RJblRpbWVBY2Nlc3NUb2tlblNlc3Npb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJKdXN0SW5UaW1lQWNjZXNzVG9rZW5TZXNzaW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIFN5c3RlbXMgTWFuYWdlciB0byBzaGFyZSBhIGRlbnktYWNjZXNzIHBvbGljeSBmb3IganVzdC1pbi10aW1lIG5vZGUgYWNjZXNzIGZyb20gdGhlIGRlbGVnYXRlZCBhZG1pbmlzdHJhdG9yIGFjY291bnQgdG8gbWVtYmVyIGFjY291bnRzLCBhbmQgcmVwbGljYXRlIHRoZSBwb2xpY3kgdG8gbXVsdGlwbGUgUmVnaW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTU3lzdGVtc01hbmFnZXJKdXN0SW5UaW1lTm9kZUFjY2Vzc1JvbGVQcm9wYWdhdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTeXN0ZW1zTWFuYWdlckp1c3RJblRpbWVOb2RlQWNjZXNzUm9sZVByb3BhZ2F0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gY29sbGVjdCBpbmZvcm1hdGlvbiBhYm91dCBhIHVzZXIgZm9yIEp1c3QtSW4tVGltZS1Ob2RlLUFjY2VzcyBub3RpZmljYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NTeXN0ZW1zTWFuYWdlck5vdGlmaWNhdGlvbnNTZXJ2aWNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N5c3RlbXNNYW5hZ2VyTm90aWZpY2F0aW9uc1NlcnZpY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBJQU0gcm9sZSBmb3IgU1NNIEV4cGxvcmVyIHRvIG1hbmFnZSBPcHNEYXRhIHJlbGF0ZWQgb3BlcmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NTeXN0ZW1zTWFuYWdlck9wc0RhdGFTeW5jU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJPcHNEYXRhU3luY1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHRoZSBBV1MgUG9ydGFsIEFzc2V0IFNlcnZlciB0aGUgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NUaGlua2JveEFzc2V0U2VydmVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RoaW5rYm94QXNzZXRTZXJ2ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgQVdTIFRoaW5rYm94J3MgRGVhZGxpbmUgc29mdHdhcmUgZnVsbCBhY2Nlc3MgdG8gbXVsdGlwbGUgQVdTIHNlcnZpY2VzIGFzIHJlcXVpcmVkIGZvciBBV1MgUG9ydGFsIGFkbWluaXN0cmF0aW9uLiBUaGlzIGluY2x1ZGVzIGFjY2VzcyB0byBjcmVhdGUgYXJiaXRyYXJ5IHRhZ3Mgb24gc2V2ZXJhbCBFQzIgcmVzb3VyY2UgdHlwZXMuICovXG4gICAgcHVibGljIEFXU1RoaW5rYm94QVdTUG9ydGFsQWRtaW5Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVGhpbmtib3hBV1NQb3J0YWxBZG1pblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyB0aGUgQVdTIFBvcnRhbCBHYXRld2F5IG1hY2hpbmUgdGhlIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTVGhpbmtib3hBV1NQb3J0YWxHYXRld2F5UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RoaW5rYm94QVdTUG9ydGFsR2F0ZXdheVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyB0aGUgRGVhZGxpbmUgV29ya2VycyBpbiBBV1MgUG9ydGFsIHRoZSBuZWNlc3NhcnkgcGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIG5vcm1hbCBvcGVyYXRpb24uICovXG4gICAgcHVibGljIEFXU1RoaW5rYm94QVdTUG9ydGFsV29ya2VyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RoaW5rYm94QVdTUG9ydGFsV29ya2VyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciB0aGUgb3BlcmF0aW9uIG9mIEFXUyBUaGlua2JveCdzIERlYWRsaW5lIFJlc291cmNlIFRyYWNrZXIuICBUaGlzIGluY2x1ZGVzIGZ1bGwgYWNjZXNzIHRvIHNvbWUgRUMyIGFjdGlvbnMsIGluY2x1ZGluZyBEZWxldGVGbGVldHMgYW5kIENhbmNlbFNwb3RGbGVldFJlcXVlc3RzLiAqL1xuICAgIHB1YmxpYyBBV1NUaGlua2JveERlYWRsaW5lUmVzb3VyY2VUcmFja2VyQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RoaW5rYm94RGVhZGxpbmVSZXNvdXJjZVRyYWNrZXJBY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gY3JlYXRlLCBkZXN0cm95LCBhbmQgYWRtaW5pc3RlciBBV1MgVGhpbmtib3gncyBEZWFkbGluZSBSZXNvdXJjZSBUcmFja2VyLiAqL1xuICAgIHB1YmxpYyBBV1NUaGlua2JveERlYWRsaW5lUmVzb3VyY2VUcmFja2VyQWRtaW5Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVGhpbmtib3hEZWFkbGluZVJlc291cmNlVHJhY2tlckFkbWluUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciBBV1MgVGhpbmtib3gncyBEZWFkbGluZSBTcG90IEV2ZW50IFBsdWdpbi4gIFRoaXMgaW5jbHVkZXMgcGVybWlzc2lvbiB0byByZXF1ZXN0LCBtb2RpZnksIGFuZCBjYW5jZWwgYSBzcG90IGZsZWV0LCBhcyB3ZWxsIGFzIGxpbWl0ZWQgUGFzc1JvbGUgcGVybWlzc2lvbi4gKi9cbiAgICBwdWJsaWMgQVdTVGhpbmtib3hEZWFkbGluZVNwb3RFdmVudFBsdWdpbkFkbWluUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RoaW5rYm94RGVhZGxpbmVTcG90RXZlbnRQbHVnaW5BZG1pblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50IHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciBhbiBFQzIgaW5zdGFuY2UgcnVubmluZyBBV1MgVGhpbmtib3ggRGVhZGxpbmUgU3BvdCBFdmVudCBQbHVnaW4gV29ya2VyIHNvZnR3YXJlLiAqL1xuICAgIHB1YmxpYyBBV1NUaGlua2JveERlYWRsaW5lU3BvdEV2ZW50UGx1Z2luV29ya2VyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RoaW5rYm94RGVhZGxpbmVTcG90RXZlbnRQbHVnaW5Xb3JrZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgVHJhbnNmZXIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlICovXG4gICAgcHVibGljIEFXU1RyYW5zZmVyQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmZXJDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBUcmFuc2ZlciBTZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NUcmFuc2ZlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBUcmFuc2ZlciBmdWxsIGFjY2VzcyB0byBjcmVhdGUgbG9nIHN0cmVhbXMgYW5kIGdyb3VwcyBhbmQgcHV0IGxvZyBldmVudHMgdG8geW91ciBhY2NvdW50ICovXG4gICAgcHVibGljIEFXU1RyYW5zZmVyTG9nZ2luZ0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcmFuc2ZlckxvZ2dpbmdBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHJlYWRvbmx5IGFjY2VzcyB0byBBV1MgVHJhbnNmZXIgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU1RyYW5zZmVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgdGhlIEFXUyBUcmFuc2Zvcm0gc2VydmljZSB0byBkZXBsb3kgdHJhbnNmb3JtZWQgLk5FVCBhcHBsaWNhdGlvbnMgYnkgY3JlYXRpbmcgYW5kIG1hbmFnaW5nIEFXUyByZXNvdXJjZXMuIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byBwcm92aXNpb24gaW5mcmFzdHJ1Y3R1cmUsIG1hbmFnZSBjb21wdXRlIHJlc291cmNlcywgYW5kIGNvbmZpZ3VyZSBkZXBsb3ltZW50IHNldHRpbmdzIGFjcm9zcyB2YXJpb3VzIEFXUyBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTVHJhbnNmb3JtQXBwbGljYXRpb25EZXBsb3ltZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RyYW5zZm9ybUFwcGxpY2F0aW9uRGVwbG95bWVudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgdGhlIEFXUyBUcmFuc2Zvcm0gdG8gZGVwbG95IGFwcGxpY2F0aW9ucyB0byBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSAoRUNTKSB3aXRoIEZhcmdhdGUuIEl0IGdyYW50cyBwZXJtaXNzaW9ucyB0byBwcm92aXNpb24sIGNvbmZpZ3VyZSwgYW5kIG1hbmFnZSB0aGUgdW5kZXJseWluZyBpbmZyYXN0cnVjdHVyZSByZXF1aXJlZCB0byBydW4gYXBwbGljYXRpb25zIG9uIEVDUy4gKi9cbiAgICBwdWJsaWMgQVdTVHJhbnNmb3JtQXBwbGljYXRpb25FQ1NEZXBsb3ltZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RyYW5zZm9ybUFwcGxpY2F0aW9uRUNTRGVwbG95bWVudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBleGVjdXRlIHRyYW5zZm9ybWF0aW9ucyBpbiBBV1MgVHJhbnNmb3JtIGN1c3RvbS4gKi9cbiAgICBwdWJsaWMgQVdTVHJhbnNmb3JtQ3VzdG9tRXhlY3V0ZVRyYW5zZm9ybWF0aW9ucygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcmFuc2Zvcm1DdXN0b21FeGVjdXRlVHJhbnNmb3JtYXRpb25zKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFRyYW5zZm9ybSBjdXN0b20uICovXG4gICAgcHVibGljIEFXU1RyYW5zZm9ybUN1c3RvbUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmb3JtQ3VzdG9tRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgdGhlIG1hbmFnZW1lbnQgb2YgdHJhbnNmb3JtYXRpb24gcmVzb3VyY2VzIGFuZCBleGVjdXRpb24gb2YgdHJhbnNmb3JtYXRpb25zIGluIEFXUyBUcmFuc2Zvcm0gY3VzdG9tLiAqL1xuICAgIHB1YmxpYyBBV1NUcmFuc2Zvcm1DdXN0b21NYW5hZ2VUcmFuc2Zvcm1hdGlvbnMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmb3JtQ3VzdG9tTWFuYWdlVHJhbnNmb3JtYXRpb25zKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGRldmVsb3BlcnMgZXhlY3V0aW9uIHJvbGUgdGhlIHBlcm1pc3Npb25zIG5lZWRlZCB0byBleGVjdXRlIEFXUyBUcmFuc2Zvcm0gQ29udGludW91cyBNb2Rlcm5pemF0aW9uIENMSS9hZ2VudCB0byBydW4gYXNzZXNzbWVudHMvdHJhbnNmb3JtYXRpb25zIHVzaW5nIEFXUyBCYXRjaCwgaW5jbHVkaW5nIHVwbG9hZGluZyBzb3VyY2UgY29kZSwgcmV0cmlldmluZyByZXN1bHRzLCBtb25pdG9yaW5nIEJhdGNoIGpvYiBzdGF0dXMsIHJlYWRpbmcgbG9ncywgYW5kIG1hbmFnaW5nIHRyYW5zZm9ybWF0aW9uIHNjaGVkdWxlcy4gKi9cbiAgICBwdWJsaWMgQVdTVHJhbnNmb3JtSW5mcmFzdHJ1Y3R1cmVFeGVjdXRvckFjY2Vzc0JhdGNoKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RyYW5zZm9ybUluZnJhc3RydWN0dXJlRXhlY3V0b3JBY2Nlc3NCYXRjaCk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBkZXZlbG9wZXJzIGV4ZWN1dGlvbiByb2xlIHRoZSBwZXJtaXNzaW9ucyBuZWVkZWQgdG8gZXhlY3V0ZSBBV1MgVHJhbnNmb3JtIENvbnRpbnVvdXMgTW9kZXJuaXphdGlvbiBDTEkvYWdlbnQgdG8gcnVuIGFzc2Vzc21lbnRzL3RyYW5zZm9ybWF0aW9ucyB1c2luZyBFQzIsIGluY2x1ZGluZyB1cGxvYWRpbmcgc291cmNlIGNvZGUsIHJldHJpZXZpbmcgcmVzdWx0cywgbW9uaXRvcmluZyBqb2Igc3RhdHVzLCByZWFkaW5nIGxvZ3MsIGFuZCBtYW5hZ2luZyB0cmFuc2Zvcm1hdGlvbiBzY2hlZHVsZXMuICovXG4gICAgcHVibGljIEFXU1RyYW5zZm9ybUluZnJhc3RydWN0dXJlRXhlY3V0b3JBY2Nlc3NFQzIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmb3JtSW5mcmFzdHJ1Y3R1cmVFeGVjdXRvckFjY2Vzc0VDMik7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyBmb3IgQVdTIFRyYW5zZm9ybSB0byBzZXQgdXAgQVdTIGxhbmRpbmcgem9uZXMgaW5jbHVkaW5nIGFjY291bnQgcHJvdmlzaW9uaW5nLCBvcmdhbml6YXRpb25hbCBnb3Zlcm5hbmNlLCBhbmQgQ29udHJvbCBUb3dlciBjb25maWd1cmF0aW9uICovXG4gICAgcHVibGljIEFXU1RyYW5zZm9ybUxhbmRpbmdab25lQWdlbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmb3JtTGFuZGluZ1pvbmVBZ2VudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyBmb3IgQVdTIFRyYW5zZm9ybSB0byBkZXBsb3kgYW5kIGNvbmZpZ3VyZSBuZXR3b3JrIGluZnJhc3RydWN0dXJlIGluY2x1ZGluZyBWUENzLCBUcmFuc2l0IEdhdGV3YXlzLCBhbmQgcm91dGUgdGFibGVzIGZvciBuZXR3b3JrIG1pZ3JhdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NUcmFuc2Zvcm1OZXR3b3JrTWlncmF0aW9uQWdlbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmb3JtTmV0d29ya01pZ3JhdGlvbkFnZW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyB0aGUgQVdTIFRyYW5zZm9ybSBzZXJ2aWNlIHRvIG1hbmFnZSBjdXN0b21lciByZXZlbnVlIGF0dHJpYnV0aW9uIGZvciBpbmNlbnRpdmVzLiAqL1xuICAgIHB1YmxpYyBBV1NUcmFuc2Zvcm1SZXZlbnVlQXR0cmlidXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmb3JtUmV2ZW51ZUF0dHJpYnV0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyB0aGUgQVdTIFRyYW5zZm9ybSBzZXJ2aWNlIHRvIHJlYWQgYSBzcGVjaWZpZWQgU2VjcmV0c01hbmFnZXIgU2VjcmV0IGluIGNvbm5lY3Rpb24gdG8gc3BlY2lmaWVkIEtNUyBrZXkuIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byByZWFkIHRoZSBzcGVjaWZpZWQgc2VjcmV0IHZhbHVlIGFuZCBkZWNyeXB0IGl0IGlzIHRoZSBzZWNyZXQgaXMgZW5jcnlwdGVkICovXG4gICAgcHVibGljIEFXU1RyYW5zZm9ybVNlY3JldHNNYW5hZ2VyQ29ubmVjdG9yUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RyYW5zZm9ybVNlY3JldHNNYW5hZ2VyQ29ubmVjdG9yUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIEFXUyBUcmFuc2Zvcm0gKEFUWCkgQ29udGludW91cyBNb2Rlcm5pemF0aW9uIENMSS9hZ2VudCB0aGUgcGVybWlzc2lvbnMgbmVlZGVkIHRvIGludm9rZSB0aGUgQVdTIFNlY3VyaXR5IEFnZW50IHNlcnZpY2UgZm9yIGF1dG9tYXRlZCBjb2RlIHNlY3VyaXR5IHJldmlld3MgYW5kIHJlbWVkaWF0aW9uLCBpbmNsdWRpbmcgdXBsb2FkaW5nIHNjYW4gYXJ0aWZhY3RzIGFuZCByZXRyaWV2aW5nIGZpbmRpbmdzLiAqL1xuICAgIHB1YmxpYyBBV1NUcmFuc2Zvcm1TZWN1cml0eUFnZW50RXhlY3V0b3JBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmb3JtU2VjdXJpdHlBZ2VudEV4ZWN1dG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIGZvciBBV1MgVHJhbnNmb3JtIHRvIHBlcmZvcm0gc2VydmVyIG1pZ3JhdGlvbiBvcGVyYXRpb25zIGluY2x1ZGluZyByZXBsaWNhdGlvbiwgdGVzdGluZywgYW5kIGN1dG92ZXIgdXNpbmcgQVdTIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlICovXG4gICAgcHVibGljIEFXU1RyYW5zZm9ybVNlcnZlck1pZ3JhdGlvbkFnZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RyYW5zZm9ybVNlcnZlck1pZ3JhdGlvbkFnZW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFRydXN0ZWQgQWR2aXNvciBQcmlvcml0eS4gVGhpcyBwb2xpY3kgYWxzbyBlbmFibGVzIHRoZSB1c2VyIHRvIGFkZCBUcnVzdGVkIEFkdmlzb3IgYXMgYSB0cnVzdGVkIHNlcnZpY2Ugd2l0aCBBV1MgT3JnYW5pemF0aW9ucyBhbmQgdG8gc3BlY2lmeSBkZWxlZ2F0ZWQgYWRtaW5pc3RyYXRvciBhY2NvdW50cyBmb3IgVHJ1c3RlZCBBZHZpc29yIFByaW9yaXR5LiAqL1xuICAgIHB1YmxpYyBBV1NUcnVzdGVkQWR2aXNvclByaW9yaXR5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcnVzdGVkQWR2aXNvclByaW9yaXR5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIFRydXN0ZWQgQWR2aXNvciBQcmlvcml0eS4gVGhpcyBpbmNsdWRlcyBwZXJtaXNzaW9uIHRvIHZpZXcgdGhlIGRlbGVnYXRlZCBhZG1pbmlzdHJhdG9yIGFjY291bnRzLiAqL1xuICAgIHB1YmxpYyBBV1NUcnVzdGVkQWR2aXNvclByaW9yaXR5UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJ1c3RlZEFkdmlzb3JQcmlvcml0eVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSBQb2xpY3kgZm9yIFRydXN0ZWQgQWR2aXNvciBNdWx0aS1hY2NvdW50IFJlcG9ydGluZyAqL1xuICAgIHB1YmxpYyBBV1NUcnVzdGVkQWR2aXNvclJlcG9ydGluZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RydXN0ZWRBZHZpc29yUmVwb3J0aW5nU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBY2Nlc3MgZm9yIHRoZSBBV1MgVHJ1c3RlZCBBZHZpc29yIFNlcnZpY2UgdG8gaGVscCByZWR1Y2UgY29zdCwgaW5jcmVhc2UgcGVyZm9ybWFuY2UsIGFuZCBpbXByb3ZlIHNlY3VyaXR5IG9mIHlvdXIgQVdTIGVudmlyb25tZW50LiAqL1xuICAgIHB1YmxpYyBBV1NUcnVzdGVkQWR2aXNvclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RydXN0ZWRBZHZpc29yU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHVzZXIgYXR0cmlidXRlcyBmcm9tIEFXUyBJQU0gSWRlbnRpdHkgQ2VudGVyIGZvciB0aGUgdXNlciBhdHRyaWJ1dGVzIHRoYXQgdGhlIGN1c3RvbWVyIGhhcyBvcHRlZCBpbiB0by4gKi9cbiAgICBwdWJsaWMgQVdTVXNlckF0dHJpYnV0ZUNvc3RBbGxvY2F0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1VzZXJBdHRyaWJ1dGVDb3N0QWxsb2NhdGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgVXNlciBOb3RpZmljYXRpb25zIHRvIGNhbGwgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NVc2VyTm90aWZpY2F0aW9uc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1VzZXJOb3RpZmljYXRpb25zU2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyBmb3Igdmlld2luZyBlbnRpdGxlZCBWZW5kb3IgSW5zaWdodHMgcmVzb3VyY2VzIGFuZCBtYW5hZ2luZyBWZW5kb3IgSW5zaWdodHMgc3Vic2NyaXB0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NWZW5kb3JJbnNpZ2h0c0Fzc2Vzc29yRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NWZW5kb3JJbnNpZ2h0c0Fzc2Vzc29yRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgZm9yIHZpZXdpbmcgZW50aXRsZWQgVmVuZG9yIEluc2lnaHRzIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NWZW5kb3JJbnNpZ2h0c0Fzc2Vzc29yUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVmVuZG9ySW5zaWdodHNBc3Nlc3NvclJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgZm9yIGNyZWF0aW5nIGFuZCBtYW5hZ2luZyB0aGUgVmVuZG9yIEluc2lnaHRzIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NWZW5kb3JJbnNpZ2h0c1ZlbmRvckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVmVuZG9ySW5zaWdodHNWZW5kb3JGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyBmb3Igdmlld2luZyB0aGUgVmVuZG9yIEluc2lnaHRzIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NWZW5kb3JJbnNpZ2h0c1ZlbmRvclJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ZlbmRvckluc2lnaHRzVmVuZG9yUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBjb250cm9sIHNlcnZpY2UgbWFuYWdlZCByZXNvdXJjZXMgYW5kIGNhbGwgQVBJcyBuZWNlc3NhcnkgZm9yIGxvZyBmaWVsZCBlbnJpY2htZW50IG9uIGJlaGFsZiBvZiBjdXN0b21lcnMuICovXG4gICAgcHVibGljIEFXU1ZQQ0Zsb3dMb2dzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVlBDRmxvd0xvZ3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBWUEMgTGF0dGljZSB0byBhY2Nlc3MgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTVnBjTGF0dGljZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ZwY0xhdHRpY2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IFNpdGUtdG8tU2l0ZSBWUE4gdG8gY3JlYXRlIGFuZCBtYW5hZ2UgcmVzb3VyY2VzIHJlbGF0ZWQgdG8geW91ciBWUE4gQ29ubmVjdGlvbnMuICovXG4gICAgcHVibGljIEFXU1ZQQ1MyU1ZwblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ZQQ1MyU1ZwblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgVlBDIFRyYW5zaXQgR2F0ZXdheSB0byBjcmVhdGUgYW5kIG1hbmFnZSBuZWNlc3NhcnkgcmVzb3VyY2VzIGZvciB5b3VyIFRyYW5zaXQgR2F0ZXdheSBWUEMgQXR0YWNobWVudHMuICovXG4gICAgcHVibGljIEFXU1ZQQ1RyYW5zaXRHYXRld2F5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVlBDVHJhbnNpdEdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQVdTIFZlcmlmaWVkIEFjY2VzcyBzZXJ2aWNlIHRvIHByb3Zpc2lvbiBlbmRwb2ludHMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTVlBDVmVyaWZpZWRBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NWUENWZXJpZmllZEFjY2Vzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFdBRiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuIE5vdGUgdGhhdCB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBwZXJtaXNzaW9ucyB0byBsaXN0IGFuZCB1cGRhdGUgQW1hem9uIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9ucywgcGVybWlzc2lvbnMgdG8gdmlldyBsb2FkIGJhbGFuY2VycyBvbiBBV1MgRWxhc3RpYyBMb2FkIEJhbGFuY2luZywgcGVybWlzc2lvbnMgdG8gdmlldyBBbWF6b24gQVBJIEdhdGV3YXkgUkVTVCBBUElzIGFuZCBzdGFnZXMsIHBlcm1pc3Npb25zIHRvIGxpc3QgYW5kIHZpZXcgQW1hem9uIENsb3VkV2F0Y2ggbWV0cmljcywgYW5kIHBlcm1pc3Npb25zIHRvIHZpZXcgcmVnaW9ucyBlbmFibGVkIHdpdGhpbiB0aGUgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQVdTV0FGQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTV0FGQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBXQUYgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiBOb3RlIHRoYXQgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgcGVybWlzc2lvbnMgdG8gbGlzdCBBbWF6b24gQ2xvdWRGcm9udCBkaXN0cmlidXRpb25zLCBwZXJtaXNzaW9ucyB0byB2aWV3IGxvYWQgYmFsYW5jZXJzIG9uIEFXUyBFbGFzdGljIExvYWQgQmFsYW5jaW5nLCBwZXJtaXNzaW9ucyB0byB2aWV3IEFtYXpvbiBBUEkgR2F0ZXdheSBSRVNUIEFQSXMgYW5kIHN0YWdlcywgcGVybWlzc2lvbnMgdG8gbGlzdCBhbmQgdmlldyBBbWF6b24gQ2xvdWRXYXRjaCBtZXRyaWNzLCBhbmQgcGVybWlzc2lvbnMgdG8gdmlldyByZWdpb25zIGVuYWJsZWQgd2l0aGluIHRoZSBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBV1NXQUZDb25zb2xlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTV0FGQ29uc29sZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFdBRiBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NXQUZGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1dBRkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBXQUYgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTV0FGUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTV0FGUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdGhlIEFXUyBXZWxsLUFyY2hpdGVjdGVkIEFnZW50IHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIHJlc291cmNlIGNvbmZpZ3VyYXRpb25zLCBzZWN1cml0eSBzZXR0aW5ncywgYW5kIG9wZXJhdGlvbmFsIGRhdGEgdG8gZ2VuZXJhdGUgb3B0aW1pemF0aW9uIHJlY29tbWVuZGF0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NXZWxsQXJjaGl0ZWN0ZWRBZ2VudFJlc291cmNlU2Nhbm5pbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NXZWxsQXJjaGl0ZWN0ZWRBZ2VudFJlc291cmNlU2Nhbm5pbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBXZWxsQXJjaGl0ZWN0ZWQgdG8gYWNjZXNzIEFXUyBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzIHRoYXQgcmVsYXRlIHRvIFdlbGxBcmNoaXRlY3RlZCByZXNvdXJjZXMgb24gYmVoYWxmIG9mIGN1c3RvbWVycy4gKi9cbiAgICBwdWJsaWMgQVdTV2VsbEFyY2hpdGVjdGVkRGlzY292ZXJ5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTV2VsbEFyY2hpdGVjdGVkRGlzY292ZXJ5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgV2VsbC1BcmNoaXRlY3RlZCB0byBhY2Nlc3MgT3JnYW5pemF0aW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTV2VsbEFyY2hpdGVjdGVkT3JnYW5pemF0aW9uc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1dlbGxBcmNoaXRlY3RlZE9yZ2FuaXphdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBmdWxsIGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zIHRvIHRoZSBXaWNrciBzZXJ2aWNlLCBpbmNsdWRpbmcgdGhlIFdpY2tyIGFkbWluaXN0cmF0aXZlIGZ1bmN0aW9ucyB1bmRlciB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTV2lja3JGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1dpY2tyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGNhcGFiaWxpdGllcyB0byBtYW5hZ2UgT2JzZXJ2YWJpbGl0eSBBY2Nlc3MgTWFuYWdlciBsaW5rcyBhbmQgZXN0YWJsaXNoIHNoYXJpbmcgb2YgWC1SYXkgdHJhY2VzICovXG4gICAgcHVibGljIEFXU1hyYXlDcm9zc0FjY291bnRTaGFyaW5nQ29uZmlndXJhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NYcmF5Q3Jvc3NBY2NvdW50U2hhcmluZ0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyB0aGUgQVdTIFgtUmF5IERhZW1vbiB0byByZWxheSByYXcgdHJhY2Ugc2VnbWVudHMgZGF0YSB0byB0aGUgc2VydmljZSdzIEFQSSBhbmQgcmV0cmlldmUgc2FtcGxpbmcgZGF0YSAocnVsZXMsIHRhcmdldHMsIGV0Yy4pIHRvIGJlIHVzZWQgYnkgdGhlIFgtUmF5IFNESy4gKi9cbiAgICBwdWJsaWMgQVdTWFJheURhZW1vbldyaXRlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1hSYXlEYWVtb25Xcml0ZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBYLVJheSBmdWxsIGFjY2VzcyBtYW5hZ2VkIHBvbGljeSAqL1xuICAgIHB1YmxpYyBBV1NYcmF5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NYcmF5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBYLVJheSByZWFkIG9ubHkgbWFuYWdlZCBwb2xpY3kgKi9cbiAgICBwdWJsaWMgQVdTWHJheVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1hyYXlSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBYLVJheSB3cml0ZSBvbmx5IG1hbmFnZWQgcG9saWN5ICovXG4gICAgcHVibGljIEFXU1hyYXlXcml0ZU9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTWHJheVdyaXRlT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyBmb3IgQVJDIHpvbmFsIHNoaWZ0IHByYWN0aWNlIHJ1bnMsIGFuZCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBhbGFybSBzdGF0dXNlcyB0byBtb25pdG9yIHByYWN0aWNlIHJ1bnMuICovXG4gICAgcHVibGljIEFXU1pvbmFsQXV0b3NoaWZ0UHJhY3RpY2VSdW5TTFJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTWm9uYWxBdXRvc2hpZnRQcmFjdGljZVJ1blNMUlBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gdGhlIEFQSXMgbmVlZGVkIHRvIHN1cHBvcnQgem9uZS1ncm91cCBhY2Nlc3MtbWFuYWdlbWVudCBmb3Igb3JnYW5pemF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTWm9uZUdyb3VwQWNjZXNzTWFuYWdlbWVudFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1pvbmVHcm91cEFjY2Vzc01hbmFnZW1lbnRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyBmb3IgdGhlIEFXUyBCYXRjaCBzZXJ2aWNlIHRvIG1hbmFnZSB0aGUgcmVxdWlyZWQgcmVzb3VyY2VzLCBpbmNsdWRpbmcgQW1hem9uIEVDMiBhbmQgQW1hem9uIEVDUyByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEJhdGNoU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQmF0Y2hTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEJlZHJvY2sgQWdlbnRDb3JlIGFzIHdlbGwgYXMgbGltaXRlZCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBCZWRyb2NrQWdlbnRDb3JlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5CZWRyb2NrQWdlbnRDb3JlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhY2Nlc3MgdG8gb3RoZXIgQVdTIHNlcnZpY2UgcmVzb3VyY2VzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIHJ1biBBbWF6b24gQmVkcm9jayBBZ2VudENvcmUgaW4gVlBDIG1vZGUgKi9cbiAgICBwdWJsaWMgQmVkcm9ja0FnZW50Q29yZU5ldHdvcmtTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5CZWRyb2NrQWdlbnRDb3JlTmV0d29ya1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFjY2VzcyB0byBpZGVudGl0eSBhbmQgdG9rZW4gbWFuYWdlbWVudCByZXNvdXJjZXMgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIEFtYXpvbiBCZWRyb2NrIEFnZW50Q29yZSBSdW50aW1lIGF1dGhlbnRpY2F0aW9uIGFuZCBhdXRob3JpemF0aW9uLiAqL1xuICAgIHB1YmxpYyBCZWRyb2NrQWdlbnRDb3JlUnVudGltZUlkZW50aXR5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQmVkcm9ja0FnZW50Q29yZVJ1bnRpbWVJZGVudGl0eVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBpbnN0YW5jZSByb2xlIG9mIGluc3RhbmNlcyBtYW5hZ2VkIGJ5IEJlZHJvY2sgQWdlbnRDb3JlIFJ1bnRpbWUgSW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBCZWRyb2NrQWdlbnRDb3JlUnVudGltZUluc3RhbmNlc0luc3RhbmNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5CZWRyb2NrQWdlbnRDb3JlUnVudGltZUluc3RhbmNlc0luc3RhbmNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBjcmVhdGUgYW5kIG1hbmFnZSBjb21wdXRlIGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcyBmb3IgQmVkcm9jayBBZ2VudENvcmUgUnVudGltZSBJbnN0YW5jZXMgKi9cbiAgICBwdWJsaWMgQmVkcm9ja0FnZW50Q29yZVJ1bnRpbWVJbnN0YW5jZXNPcGVyYXRvclJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQmVkcm9ja0FnZW50Q29yZVJ1bnRpbWVJbnN0YW5jZXNPcGVyYXRvclJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgZm9yIGJpbGxpbmcgYW5kIGNvc3QgbWFuYWdlbWVudC4gVGhpcyBpbmNsdWRlcyB2aWV3aW5nIGFjY291bnQgdXNhZ2UgYW5kIHZpZXdpbmcgYW5kIG1vZGlmeWluZyBidWRnZXRzIGFuZCBwYXltZW50IG1ldGhvZHMuICovXG4gICAgcHVibGljIEJpbGxpbmcoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQmlsbGluZyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBCdWRnZXRzIHRvIHZlcmlmeSBhY2Nlc3MgdG8gQmlsbGluZyBWaWV3cyBzaGFyZWQgYWNyb3NzIGFjY291bnQgYm91bmRhcmllcy4gKi9cbiAgICBwdWJsaWMgQnVkZ2V0c1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkJ1ZGdldHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBDZXJ0aWZpY2F0ZSBNYW5hZ2VyIFNlcnZpY2UgUm9sZSBQb2xpY3kgKi9cbiAgICBwdWJsaWMgQ2VydGlmaWNhdGVNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2VydGlmaWNhdGVNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdG8gZW5hYmxlIEFXUyBDbGllbnQgVlBOIHRvIG1hbmFnZSB5b3VyIENsaWVudCBWUE4gZW5kcG9pbnQgY29ubmVjdGlvbnMuICovXG4gICAgcHVibGljIENsaWVudFZQTlNlcnZpY2VDb25uZWN0aW9uc1JvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xpZW50VlBOU2VydmljZUNvbm5lY3Rpb25zUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQVdTIENsaWVudCBWUE4gdG8gbWFuYWdlIHlvdXIgQ2xpZW50IFZQTiBlbmRwb2ludHMuICovXG4gICAgcHVibGljIENsaWVudFZQTlNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsaWVudFZQTlNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSBSb2xlIGZvciBDbG91ZEZvcm1hdGlvbiBTdGFja1NldHMgKE9yZ2FuaXphdGlvbiBNYXN0ZXIgQWNjb3VudCkgKi9cbiAgICBwdWJsaWMgQ2xvdWRGb3JtYXRpb25TdGFja1NldHNPcmdBZG1pblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkRm9ybWF0aW9uU3RhY2tTZXRzT3JnQWRtaW5TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UgUm9sZSBmb3IgQ2xvdWRGb3JtYXRpb24gU3RhY2tTZXRzIChPcmdhbml6YXRpb24gTWVtYmVyIEFjY291bnQpICovXG4gICAgcHVibGljIENsb3VkRm9ybWF0aW9uU3RhY2tTZXRzT3JnTWVtYmVyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRGb3JtYXRpb25TdGFja1NldHNPcmdNZW1iZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBDbG91ZEZyb250IGNvbnNvbGUgcGx1cyB0aGUgYWJpbGl0eSB0byBsaXN0IEFtYXpvbiBTMyBidWNrZXRzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQ2xvdWRGcm9udEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRGcm9udEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQgbGlzdCBkaXN0cmlidXRpb25zIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQ2xvdWRGcm9udFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkRnJvbnRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyByZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IENsb3VkSFNNICovXG4gICAgcHVibGljIENsb3VkSFNNU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRIU01TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBbWF6b24gQ2xvdWRTZWFyY2ggY29uZmlndXJhdGlvbiBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBDbG91ZFNlYXJjaEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRTZWFyY2hGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byB0aGUgQW1hem9uIENsb3VkU2VhcmNoIGNvbmZpZ3VyYXRpb24gc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQ2xvdWRTZWFyY2hSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFNlYXJjaFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBzZXJ2aWNlIGxpbmtlZCByb2xlIGFsbG93cyBDbG91ZFRyYWlsIHRvIGdldCBhbmQgYWRkIHJlc291cmNlIHRhZ3MgdG8gdGhlIHJlc291cmNlIG93bmVyJ3MgQ2xvdWRUcmFpbCBldmVudHMuICovXG4gICAgcHVibGljIENsb3VkVHJhaWxFdmVudENvbnRleHQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRUcmFpbEV2ZW50Q29udGV4dCk7XG4gICAgfVxuXG4gICAgLyoqIFBlcm1pc3Npb24gcG9saWN5IGZvciBDbG91ZFRyYWlsIFNlcnZpY2VMaW5rZWRSb2xlICovXG4gICAgcHVibGljIENsb3VkVHJhaWxTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFRyYWlsU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQ2xvdWRXYXRjaCB0byBhc3N1bWUgQ2xvdWRXYXRjaC1Dcm9zc0FjY291bnRTaGFyaW5nIHJvbGVzIGluIHJlbW90ZSBhY2NvdW50cyBvbiBiZWhhbGYgb2YgdGhlIGN1cnJlbnQgYWNjb3VudCBpbiBvcmRlciB0byBkaXNwbGF5IGRhdGEgY3Jvc3MtYWNjb3VudCwgY3Jvc3MtcmVnaW9uICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hDcm9zc0FjY291bnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaENyb3NzQWNjb3VudEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBhbGFybXMgYW5kIG1ldHJpY3MgYXMgd2VsbCBhcyBFQzIgbWV0YWRhdGEuIFByb3ZpZGVzIGFjY2VzcyB0byBTdG9wLCBUZXJtaW5hdGUgYW5kIFJlYm9vdCBFQzIgaW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoQWN0aW9uc0VDMkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoQWN0aW9uc0VDMkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bGwgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gdXNlIEFtYXpvbkNsb3VkV2F0Y2hBZ2VudC4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEFnZW50QWRtaW5Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEFnZW50QWRtaW5Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyByZXF1aXJlZCB0byB1c2UgQW1hem9uQ2xvdWRXYXRjaEFnZW50IG9uIHNlcnZlcnMgKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEFnZW50U2VydmVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hBZ2VudFNlcnZlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBjYWxsIENsb3VkV2F0Y2ggdXNpbmcgQVBJIGtleSBhdXRoZW50aWNhdGlvbi4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEFQSUtleUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoQVBJS2V5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBBcHBsaWNhdGlvbiBJbnNpZ2h0cyBhbmQgcmVxdWlyZWQgZGVwZW5kZW5jaWVzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoQXBwbGljYXRpb25JbnNpZ2h0c0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEFwcGxpY2F0aW9uSW5zaWdodHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDbG91ZFdhdGNoIEFwcGxpY2F0aW9uIEluc2lnaHRzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoQXBwbGljYXRpb25JbnNpZ2h0c1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hBcHBsaWNhdGlvbkluc2lnaHRzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBDbG91ZHdhdGNoIEFwcGxpY2F0aW9uIEluc2lnaHRzIFNlcnZpY2UgTGlua2VkIFJvbGUgUG9saWN5ICovXG4gICAgcHVibGljIENsb3Vkd2F0Y2hBcHBsaWNhdGlvbkluc2lnaHRzU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWR3YXRjaEFwcGxpY2F0aW9uSW5zaWdodHNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBBcHBsaWNhdGlvbiBTaWduYWxzIHNlcnZpY2UgYW5kIHNjb3BlZCBhY2Nlc3MgdG8gdGhlIGRlcGVuZGVuY2llcyBuZWVkZWQgdG8gdXNlIGFuZCBvcGVyYXRlIHRoaXMgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEFwcGxpY2F0aW9uU2lnbmFsc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEFwcGxpY2F0aW9uU2lnbmFsc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIENsb3VkV2F0Y2ggQXBwbGljYXRpb24gU2lnbmFscyBzZXJ2aWNlIGFuZCBzY29wZWQgYWNjZXNzIHRvIHRoZSBkZXBlbmRlbmNpZXMgbmVlZGVkIHRvIHVzZSB0aGlzIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEFwcGxpY2F0aW9uU2lnbmFsc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hBcHBsaWNhdGlvblNpZ25hbHNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudHMgcGVybWlzc2lvbiB0byBDbG91ZFdhdGNoIEFwcGxpY2F0aW9uIFNpZ25hbHMgdG8gY29sbGVjdCBtb25pdG9yaW5nIGFuZCB0YWdnaW5nIGRhdGEgZnJvbSBvdGhlciByZWxldmFudCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hBcHBsaWNhdGlvblNpZ25hbHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoQXBwbGljYXRpb25TaWduYWxzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIG5vbi1DbG91ZFdhdGNoIEFQSXMgdXNlZCB0byBkaXNwbGF5IENsb3VkV2F0Y2ggQXV0b21hdGljIERhc2hib2FyZHMsIGluY2x1ZGluZyB0aGUgY29udGVudHMgb2Ygb2JqZWN0cyBzdWNoIGFzIExhbWJkYSBmdW5jdGlvbnMgKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEF1dG9tYXRpY0Rhc2hib2FyZHNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEF1dG9tYXRpY0Rhc2hib2FyZHNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjYXBhYmlsaXRpZXMgdG8gbWFuYWdlIE9ic2VydmFiaWxpdHkgQWNjZXNzIE1hbmFnZXIgbGlua3MgYW5kIGVzdGFibGlzaCBzaGFyaW5nIG9mIENsb3VkV2F0Y2ggcmVzb3VyY2VzICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hDcm9zc0FjY291bnRTaGFyaW5nQ29uZmlndXJhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoQ3Jvc3NBY2NvdW50U2hhcmluZ0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYnVpbHQtaW4gdGFyZ2V0cyBpbiBBbWF6b24gQ2xvdWRXYXRjaCBFdmVudHMgdG8gcGVyZm9ybSBFQzIgYWN0aW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEV2ZW50c0J1aWx0SW5UYXJnZXRFeGVjdXRpb25BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEV2ZW50c0J1aWx0SW5UYXJnZXRFeGVjdXRpb25BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQ2xvdWRXYXRjaCBFdmVudHMuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hFdmVudHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hFdmVudHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBDbG91ZFdhdGNoIEV2ZW50cyB0byByZWxheSBldmVudHMgdG8gdGhlIHN0cmVhbXMgaW4gQVdTIEtpbmVzaXMgU3RyZWFtcyBpbiB5b3VyIGFjY291bnQuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hFdmVudHNJbnZvY2F0aW9uQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hFdmVudHNJbnZvY2F0aW9uQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQ2xvdWRXYXRjaCBFdmVudHMuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hFdmVudHNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoRXZlbnRzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBBV1MgQ2xvdWRXYXRjaCB0byBleGVjdXRlIGFjdGlvbnMgb24geW91ciBiZWhhbGYgY29uZmlndXJlZCB0aHJvdWdoIGFsYXJtcyBhbmQgZXZlbnRzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoRXZlbnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEV2ZW50c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoRnVsbEFjY2Vzc1YyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hGdWxsQWNjZXNzVjIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhY3Rpb25zIGZvciB3b3JraW5nIHdpdGggQW1hem9uIENsb3VkV2F0Y2ggSW50ZXJuZXQgTW9uaXRvci4gQWxzbyBwcm92aWRlcyBhY2Nlc3MgdG8gb3RoZXIgc2VydmljZXMsIHN1Y2ggYXMgQW1hem9uIENsb3VkV2F0Y2gsIEFtYXpvbiBFQzIsIEFtYXpvbiBDbG91ZEZyb250LCBBbWF6b24gV29ya1NwYWNlcywgYW5kIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcsIHRoYXQgYXJlIG5lY2Vzc2FyeSB0byB1c2UgdGhlIEludGVybmV0IE1vbml0b3Igc2VydmljZSBmb3IgbW9uaXRvcmluZyBhbmQgc3RvcmluZyBpbmZvcm1hdGlvbiBhYm91dCBhcHBsaWNhdGlvbiB0cmFmZmljLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoSW50ZXJuZXRNb25pdG9yRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoSW50ZXJuZXRNb25pdG9yRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWN0aW9ucyBmb3Igd29ya2luZyB3aXRoIEFtYXpvbiBDbG91ZFdhdGNoIEludGVybmV0IE1vbml0b3IuIEFsc28gcHJvdmlkZXMgYWNjZXNzIHRvIG90aGVyIHNlcnZpY2VzIGluIEFtYXpvbiBDbG91ZFdhdGNoLCBpbmNsdWRpbmcgcG9saWNpZXMgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gb24gQ2xvdWRXYXRjaCBtZXRyaWNzIGFuZCB0byBtYW5hZ2UgbG9nIHF1ZXJpZXMsIHRoYXQgYXJlIG5lY2Vzc2FyeSB0byB1c2UgdGhlIEludGVybmV0IE1vbml0b3Igc2VydmljZSBmb3IgbW9uaXRvcmluZyBhbmQgc3RvcmluZyBpbmZvcm1hdGlvbiBhYm91dCBhcHBsaWNhdGlvbiB0cmFmZmljLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoSW50ZXJuZXRNb25pdG9yUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEludGVybmV0TW9uaXRvclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEludGVybmV0IE1vbml0b3IgdG8gYWNjZXNzIEVDMiwgV29ya3NwYWNlcywgYW5kIENsb3VkRnJvbnQgcmVzb3VyY2VzLCBhbmQgb3RoZXIgcmVxdWlyZWQgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hJbnRlcm5ldE1vbml0b3JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoSW50ZXJuZXRNb25pdG9yU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB3cml0ZSBhY2Nlc3MgdG8gWC1SYXkgYW5kIENsb3VkV2F0Y2ggQXBwbGljYXRpb24gU2lnbmFscyBsb2cgZ3JvdXAuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hMYW1iZGFBcHBsaWNhdGlvblNpZ25hbHNFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hMYW1iZGFBcHBsaWNhdGlvblNpZ25hbHNFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHJlcXVpcmVkIGZvciB0aGUgTGFtYmRhIEluc2lnaHRzIEV4dGVuc2lvbiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoTGFtYmRhSW5zaWdodHNFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hMYW1iZGFJbnNpZ2h0c0V4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gY2FsbCBDbG91ZFdhdGNoIExvZ3MgdXNpbmcgQVBJIGtleSBhdXRoZW50aWNhdGlvbi4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaExvZ3NBUElLZXlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaExvZ3NBUElLZXlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjYXBhYmlsaXRpZXMgdG8gbWFuYWdlIE9ic2VydmFiaWxpdHkgQWNjZXNzIE1hbmFnZXIgbGlua3MgYW5kIGVzdGFibGlzaCBzaGFyaW5nIG9mIENsb3VkV2F0Y2ggTG9ncyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaExvZ3NDcm9zc0FjY291bnRTaGFyaW5nQ29uZmlndXJhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoTG9nc0Nyb3NzQWNjb3VudFNoYXJpbmdDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBMb2dzICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hMb2dzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoTG9nc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIENsb3VkV2F0Y2ggTG9ncyAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoTG9nc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hMb2dzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBZb3UgY2FuIHVzZSB0aGlzIHBvbGljeSBpbiBJQU0gcm9sZXMgdGhhdCBhcmUgYXR0YWNoZWQgdG8gQW1hem9uIEVDMiBhbmQgQW1hem9uIEVLUyBpbnN0YW5jZSByZXNvdXJjZXMgdG8gc2VuZCB0ZWxlbWV0cnkgcmVwb3J0cyAobWV0cmljcykgdG8gYSBOZXR3b3JrIEZsb3cgTW9uaXRvciBlbmRwb2ludC4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaE5ldHdvcmtGbG93TW9uaXRvckFnZW50UHVibGlzaFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoTmV0d29ya0Zsb3dNb25pdG9yQWdlbnRQdWJsaXNoUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogWW91IGNhbid0IGF0dGFjaCBDbG91ZFdhdGNoTmV0d29ya0Zsb3dNb25pdG9yU2VydmljZVJvbGVQb2xpY3kgdG8geW91ciBJQU0gZW50aXRpZXMuIFRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIHRvIGEgc2VydmljZS1saW5rZWQgcm9sZSBuYW1lZCBBV1NTZXJ2aWNlUm9sZUZvck5ldHdvcmtGbG93TW9uaXRvciwgd2hpY2ggcHVibGlzaGVzIG5ldHdvcmsgdGVsZW1ldHJ5IGFnZ3JlZ2F0aW9uIHJlc3VsdHMsIGNvbGxlY3RlZCBieSBOZXR3b3JrIEZsb3cgTW9uaXRvciBhZ2VudHMsIHRvIENsb3VkV2F0Y2guIEl0IGFsc28gYWxsb3dzIHRoZSBzZXJ2aWNlIHRvIHVzZSBBV1MgT3JnYW5pemF0aW9ucyB0byBnZXQgaW5mb3JtYXRpb24gZm9yIG11bHRpLWFjY291bnQgc2NlbmFyaW9zLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoTmV0d29ya0Zsb3dNb25pdG9yU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaE5ldHdvcmtGbG93TW9uaXRvclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogWW91IGNhbid0IGF0dGFjaCBDbG91ZFdhdGNoTmV0d29ya0Zsb3dNb25pdG9yVG9wb2xvZ3lTZXJ2aWNlUm9sZVBvbGljeSB0byB5b3VyIElBTSBlbnRpdGllcy4gVGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgdG8gYSBzZXJ2aWNlLWxpbmtlZCByb2xlIG5hbWVkIEFXU1NlcnZpY2VSb2xlRm9yTmV0d29ya0Zsb3dNb25pdG9yX1RvcG9sb2d5LCB3aGljaCBnZW5lcmF0ZXMgdG9wb2xvZ3kgc25hcHNob3RzIG9mIHJlc291cmNlcyB1c2VkIGJ5IE5ldHdvcmsgRmxvdyBNb25pdG9yIGluIHlvdXIgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaE5ldHdvcmtGbG93TW9uaXRvclRvcG9sb2d5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaE5ldHdvcmtGbG93TW9uaXRvclRvcG9sb2d5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQ2xvdWRXYXRjaCBOZXR3b3JrIE1vbml0b3IgdG8gYWNjZXNzIGFuZCBtYW5hZ2UgRUMyIGFuZCBWUEMgcmVzb3VyY2VzLCBwdWJsaXNoIGRhdGEgdG8gQ2xvdWRXYXRjaCBhbmQgYWNjZXNzIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoTmV0d29ya01vbml0b3JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoTmV0d29ya01vbml0b3JTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIHVzZXIgYWNjZXNzIHRvIHZpZXcgT3BlblNlYXJjaCBkYXNoYm9hcmRzIG9uIHRoZSBDbG91ZFdhdGNoIExvZ3MgY29uc29sZS4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaE9wZW5TZWFyY2hEYXNoYm9hcmRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaE9wZW5TZWFyY2hEYXNoYm9hcmRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyB1c2VyIGFjY2VzcyB0byBjcmVhdGUgaW50ZWdyYXRpb24gd2l0aCBPcGVuU2VhcmNoIHRvIGNyZWF0ZSwgdXBkYXRlLCBkZWxldGUgb3IgdmlldyBkYXNoYm9hcmRzIG9uIHRoZSBDbG91ZFdhdGNoIExvZ3MgY29uc29sZS4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaE9wZW5TZWFyY2hEYXNoYm9hcmRzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoT3BlblNlYXJjaERhc2hib2FyZHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBTeW50aGV0aWNzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoU3ludGhldGljc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaFN5bnRoZXRpY3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDbG91ZFdhdGNoIFN5bnRoZXRpY3MuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hTeW50aGV0aWNzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaFN5bnRoZXRpY3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIENvbXByZWhlbmQgc2VydmljZSByb2xlIHdoaWNoIGFsbG93cyBhY2Nlc3MgdG8gUzMgcmVzb3VyY2VzIGZvciBkYXRhIGFjY2VzcyAqL1xuICAgIHB1YmxpYyBDb21wcmVoZW5kRGF0YUFjY2Vzc1JvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29tcHJlaGVuZERhdGFBY2Nlc3NSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIENvbXByZWhlbmQuICovXG4gICAgcHVibGljIENvbXByZWhlbmRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbXByZWhlbmRGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIENvbXByZWhlbmQgTWVkaWNhbCAqL1xuICAgIHB1YmxpYyBDb21wcmVoZW5kTWVkaWNhbEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29tcHJlaGVuZE1lZGljYWxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gQ29tcHJlaGVuZC4gKi9cbiAgICBwdWJsaWMgQ29tcHJlaGVuZFJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbXByZWhlbmRSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBDb21wdXRlT3B0aW1pemVyQXV0b21hdGlvblNlcnZpY2VSb2xlUG9saWN5IG1hbmFnZWQgcG9saWN5IGlzIGF0dGFjaGVkIHRvIGEgc2VydmljZS1saW5rZWQgcm9sZSB0aGF0IGFsbG93cyBDb21wdXRlIE9wdGltaXplciB0byBwZXJmb3JtIGFjdGlvbnMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQ29tcHV0ZU9wdGltaXplckF1dG9tYXRpb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Db21wdXRlT3B0aW1pemVyQXV0b21hdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDb21wdXRlT3B0aW1pemVyLiAqL1xuICAgIHB1YmxpYyBDb21wdXRlT3B0aW1pemVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29tcHV0ZU9wdGltaXplclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENvbXB1dGVPcHRpbWl6ZXIgdG8gY2FsbCBBV1Mgc2VydmljZXMgYW5kIGNvbGxlY3Qgd29ya2xvYWQgZGV0YWlscyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQ29tcHV0ZU9wdGltaXplclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbXB1dGVPcHRpbWl6ZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBuZWVkZWQgZm9yIEFXU0NvbmZpZyB0byBjcmVhdGUgY29uZm9ybWFuY2UgcGFja3MgKi9cbiAgICBwdWJsaWMgQ29uZmlnQ29uZm9ybXNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Db25maWdDb25mb3Jtc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRm9yIHVzZSB3aXRoIGFjY291bnRzIGNyZWF0ZWQgdGhyb3VnaCB0aGUgVmVyY2VsIE1hcmtldHBsYWNlIGludGVncmF0aW9uIHdpdGggQVdTLiBQcm92aWRlcyBhY2Nlc3MgdG8gbWFuYWdlIGFsbCByZXNvdXJjZXMgZm9yIHRoZSBzZXJ2aWNlcyB0aGF0IGFyZSBpbnRlZ3JhdGVkIHdpdGggdGhlIFZlcmNlbCBNYXJrZXRwbGFjZS4gKi9cbiAgICBwdWJsaWMgQ29uc29sZUZ1bGxBY2Nlc3NGcm9tVmVyY2VsKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbnNvbGVGdWxsQWNjZXNzRnJvbVZlcmNlbCk7XG4gICAgfVxuXG4gICAgLyoqIEZvciB1c2Ugd2l0aCBhY2NvdW50cyBjcmVhdGVkIHRocm91Z2ggdGhlIFZlcmNlbCBNYXJrZXRwbGFjZSBpbnRlZ3JhdGlvbiB3aXRoIEFXUy4gUHJvdmlkZXMgYWNjZXNzIHRvIHZpZXcgYWxsIHJlc291cmNlcyBmb3IgdGhlIHNlcnZpY2VzIHRoYXQgYXJlIGludGVncmF0ZWQgd2l0aCB0aGUgVmVyY2VsIE1hcmtldHBsYWNlLiAqL1xuICAgIHB1YmxpYyBDb25zb2xlVmlld09ubHlBY2Nlc3NGcm9tVmVyY2VsKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbnNvbGVWaWV3T25seUFjY2Vzc0Zyb21WZXJjZWwpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIG1hbmFnZWQgcG9saWN5IHByb3ZpZGVzIGFkbWluIGFjY2VzcyB0byBDb3N0IE9wdGltaXphdGlvbiBIdWIuICovXG4gICAgcHVibGljIENvc3RPcHRpbWl6YXRpb25IdWJBZG1pbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Db3N0T3B0aW1pemF0aW9uSHViQWRtaW5BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIG1hbmFnZWQgcG9saWN5IHByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQ29zdCBPcHRpbWl6YXRpb24gSHViLiAqL1xuICAgIHB1YmxpYyBDb3N0T3B0aW1pemF0aW9uSHViUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29zdE9wdGltaXphdGlvbkh1YlJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENvc3QgT3B0aW1pemF0aW9uIEh1YiB0byByZXRyaWV2ZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24gYW5kIGNvbGxlY3Qgb3B0aW1pemF0aW9uLXJlbGF0ZWQgZGF0YSBhbmQgbWV0YWRhdGEuICovXG4gICAgcHVibGljIENvc3RPcHRpbWl6YXRpb25IdWJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Db3N0T3B0aW1pemF0aW9uSHViU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIENvbm5lY3QgQ3VzdG9tZXIgUHJvZmlsZXMgdG8gYWNjZXNzIEFXUyBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBDdXN0b21lclByb2ZpbGVzU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ3VzdG9tZXJQcm9maWxlc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHBlcm1pc3Npb25zIHRvIEFXUyBzZXJ2aWNlcyBhbmQgYWN0aW9ucyByZXF1aXJlZCB0byBzZXQgdXAgYW5kIGNvbmZpZ3VyZSBBV1MgZGF0YWJhc2Ugc2VydmljZXMuICovXG4gICAgcHVibGljIERhdGFiYXNlQWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5EYXRhYmFzZUFkbWluaXN0cmF0b3IpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gQVdTIGRhdGEgYW5hbHl0aWNzIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBEYXRhU2NpZW50aXN0KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkRhdGFTY2llbnRpc3QpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgREFYIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIE5ldHdvcmsgaW50ZXJmYWNlLCBTZWN1cml0eSBncm91cCwgU3VibmV0IGFuZCBWcGMgb24gYmVoYWxmIG9mIGN1c3RvbWVyICovXG4gICAgcHVibGljIERBWFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkRBWFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRGlzY292ZXJ5IGFuZCBBc3Nlc3NtZW50IHBlcm1pc3Npb25zIGZvciBkYXRhYmFzZSBjb25uZWN0b3IgdXNlZCBpbiBkYXRhYmFzZSBtb2Rlcm5pemF0aW9uICovXG4gICAgcHVibGljIERCTW9kRGlzY292ZXJ5QW5kQXNzZXNzbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5EQk1vZERpc2NvdmVyeUFuZEFzc2Vzc21lbnQpO1xuICAgIH1cblxuICAgIC8qKiBSZXNvdXJjZSBwcm92aXNpb25pbmcgYW5kIGRhdGEgbWlncmF0aW9uIHBlcm1pc3Npb25zIGZvciBkYXRhYmFzZSBjb25uZWN0b3IgdXNlZCBpbiBkYXRhYmFzZSBtb2Rlcm5pemF0aW9uICovXG4gICAgcHVibGljIERCTW9kUHJvdmlzaW9uaW5nQW5kTWlncmF0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkRCTW9kUHJvdmlzaW9uaW5nQW5kTWlncmF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHRoZSBkYXRhYmFzZSBjb25uZWN0b3IgdXNlZCBieSBBVFhIZWxpeCBkdXJpbmcgdGhlIG9mZmxpbmUgKERNUy1mcmVlKSBkYXRhYmFzZSBtb2Rlcm5pemF0aW9uIHdvcmtmbG93ICovXG4gICAgcHVibGljIERCTW9kVmlydHVhbFNvdXJjZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5EQk1vZFZpcnR1YWxTb3VyY2UpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gcmVhZC1vbmx5IEFQSXMgbmVlZGVkIHRvIHJ1biBFQzIgRGVjbGFyYXRpdmUgUG9saWNpZXMgQWNjb3VudCBTdGF0dXMgUmVwb3J0LiAqL1xuICAgIHB1YmxpYyBEZWNsYXJhdGl2ZVBvbGljaWVzRUMyUmVwb3J0KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkRlY2xhcmF0aXZlUG9saWNpZXNFQzJSZXBvcnQpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyByZXF1aXJlZCB0byBzdXBwb3J0IEFtYXpvbiBDbG91ZFdhdGNoIENvbnRyaWJ1dG9yIEluc2lnaHRzIGZvciBBbWF6b24gRHluYW1vREIuICovXG4gICAgcHVibGljIER5bmFtb0RCQ2xvdWRXYXRjaENvbnRyaWJ1dG9ySW5zaWdodHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5EeW5hbW9EQkNsb3VkV2F0Y2hDb250cmlidXRvckluc2lnaHRzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyByZXF1aXJlZCBieSBEeW5hbW9EQiB0byBtYW5hZ2UgZ2xvYmFsIHRhYmxlIHJlcGxpY2Egc2V0dGluZ3MgKi9cbiAgICBwdWJsaWMgRHluYW1vREJHbG9iYWxUYWJsZVNldHRpbmdzTWFuYWdlbWVudFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkR5bmFtb0RCR2xvYmFsVGFibGVTZXR0aW5nc01hbmFnZW1lbnRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgQVdTIER5bmFtb0RCIGFjY2VzcyB0byBLaW5lc2lzRGF0YVN0cmVhbXMgKi9cbiAgICBwdWJsaWMgRHluYW1vREJLaW5lc2lzUmVwbGljYXRpb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5EeW5hbW9EQktpbmVzaXNSZXBsaWNhdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgcmVxdWlyZWQgYnkgRHluYW1vREIgZm9yIGNyb3NzLXJlZ2lvbiBkYXRhIHJlcGxpY2F0aW9uICovXG4gICAgcHVibGljIER5bmFtb0RCUmVwbGljYXRpb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5EeW5hbW9EQlJlcGxpY2F0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIEVDMiB0byBkaXNjb3ZlciBhbmQgbWFuYWdlIHJlc291cmNlcyByZWxhdGVkIHRvIEVDMiBBcHBsaWNhdGlvbiBTdGF0dXMgQ2hlY2tzICovXG4gICAgcHVibGljIEVDMkFwcGxpY2F0aW9uU3RhdHVzQ2hlY2tzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRUMyQXBwbGljYXRpb25TdGF0dXNDaGVja3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBmdWxsIGFjY2VzcyB0byBFQzIgRmFzdCBMYXVuY2ggYWN0aW9ucyAqL1xuICAgIHB1YmxpYyBFQzJGYXN0TGF1bmNoRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FQzJGYXN0TGF1bmNoRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudHMgZWMyZmFzdGxhdW5jaCB0byBwcmVwYXJlIGFuZCBtYW5hZ2UgcHJlcHJvdmlzaW9uZWQgc25hcHNob3RzIGluIGN1c3RvbWVyJ3MgYWNjb3VudCAmIHB1Ymxpc2ggcmVsYXRlZCBtZXRyaWNzLiAqL1xuICAgIHB1YmxpYyBFQzJGYXN0TGF1bmNoU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRUMyRmFzdExhdW5jaFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEVDMiBGbGVldCB0byBsYXVuY2ggaW5zdGFuY2VzIGluIHRoZSBmdXR1cmUuICovXG4gICAgcHVibGljIEVDMkZsZWV0VGltZVNoaWZ0YWJsZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVDMkZsZWV0VGltZVNoaWZ0YWJsZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgbmVlZCBieSBFQzIgSW1hZ2UgQnVpbGRlciB0byBwZXJmb3JtIGEgY3Jvc3MgYWNjb3VudCBkaXN0cmlidXRpb24uICovXG4gICAgcHVibGljIEVjMkltYWdlQnVpbGRlckNyb3NzQWNjb3VudERpc3RyaWJ1dGlvbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FYzJJbWFnZUJ1aWxkZXJDcm9zc0FjY291bnREaXN0cmlidXRpb25BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBFQzIgSW1hZ2UgQnVpbGRlciB0byBjYWxsIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBFQzJJbWFnZUJ1aWxkZXJFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRUMySW1hZ2VCdWlsZGVyRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIEVDMkltYWdlQnVpbGRlckxpZmVjeWNsZUV4ZWN1dGlvblBvbGljeSBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIGZvciBJbWFnZSBCdWlsZGVyIHRvIHBlcmZvcm0gYWN0aW9ucyBzdWNoIGFzIGRlcHJlY2F0ZSBvciBkZWxldGUgSW1hZ2UgQnVpbGRlciBpbWFnZSByZXNvdXJjZXMgYW5kIHRoZWlyIHVuZGVybHlpbmcgcmVzb3VyY2VzIChBTUlzLCBzbmFwc2hvdHMpIHRvIHN1cHBvcnQgYXV0b21hdGVkIHJ1bGVzIGZvciBpbWFnZSBsaWZlY3ljbGUgbWFuYWdlbWVudCB0YXNrcy4gKi9cbiAgICBwdWJsaWMgRUMySW1hZ2VCdWlsZGVyTGlmZWN5Y2xlRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVDMkltYWdlQnVpbGRlckxpZmVjeWNsZUV4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBjdXN0b21lcnMgdG8gY2FsbCBFQzIgSW5zdGFuY2UgQ29ubmVjdCB0byBwdWJsaXNoIGVwaGVtZXJhbCBrZXlzIHRvIHRoZWlyIEVDMiBpbnN0YW5jZXMgYW5kIGNvbm5lY3QgdmlhIHNzaCBvciB0aGUgRUMyIEluc3RhbmNlIENvbm5lY3QgQ0xJLiAqL1xuICAgIHB1YmxpYyBFQzJJbnN0YW5jZUNvbm5lY3QoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRUMySW5zdGFuY2VDb25uZWN0KTtcbiAgICB9XG5cbiAgICAvKiogRUMyIEluc3RhbmNlIENvbm5lY3QgZW5kcG9pbnQgcG9saWN5IHRvIG1hbmFnZSBFQzIgSW5zdGFuY2UgQ29ubmVjdCBlbmRwb2ludHMgY3JlYXRlZCBieSB0aGUgY3VzdG9tZXIgKi9cbiAgICBwdWJsaWMgRWMySW5zdGFuY2VDb25uZWN0RW5kcG9pbnQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRWMySW5zdGFuY2VDb25uZWN0RW5kcG9pbnQpO1xuICAgIH1cblxuICAgIC8qKiBFQzIgSW5zdGFuY2UgcHJvZmlsZSBmb3IgSW1hZ2UgQnVpbGRlciBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBFQzJJbnN0YW5jZVByb2ZpbGVGb3JJbWFnZUJ1aWxkZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRUMySW5zdGFuY2VQcm9maWxlRm9ySW1hZ2VCdWlsZGVyKTtcbiAgICB9XG5cbiAgICAvKiogRUMyIEluc3RhbmNlIHByb2ZpbGUgZm9yIGJ1aWxkaW5nIGNvbnRhaW5lciBpbWFnZXMgd2l0aCBFQzIgSW1hZ2UgQnVpbGRlci4gVGhpcyBwb2xpY3kgZ3JhbnRzIHRoZSB1c2VyIGJyb2FkIHBlcm1pc3Npb25zIHRvIHVwbG9hZCBFQ1IgaW1hZ2VzLiAqL1xuICAgIHB1YmxpYyBFQzJJbnN0YW5jZVByb2ZpbGVGb3JJbWFnZUJ1aWxkZXJFQ1JDb250YWluZXJCdWlsZHMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRUMySW5zdGFuY2VQcm9maWxlRm9ySW1hZ2VCdWlsZGVyRUNSQ29udGFpbmVyQnVpbGRzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEVDUiBSZXBsaWNhdGlvbiAqL1xuICAgIHB1YmxpYyBFQ1JSZXBsaWNhdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVDUlJlcGxpY2F0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYWN0aW9ucyB0byBiZSBwZXJmb3JtZWQgd2hlbiB1c2luZyBBV1MgRUNSIHJlcG9zaXRvcnkgY3JlYXRpb24gdGVtcGxhdGVzICovXG4gICAgcHVibGljIEVDUlRlbXBsYXRlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRUNSVGVtcGxhdGVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBFbGFzdGlDYWNoZSB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZiBhcyBuZWNlc3NhcnkgZm9yIG1hbmFnaW5nIHlvdXIgY2FjaGUgKi9cbiAgICBwdWJsaWMgRWxhc3RpQ2FjaGVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FbGFzdGlDYWNoZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEVsYXN0aWNMb2FkQmFsYW5jaW5nLCBhbmQgbGltaXRlZCBhY2Nlc3MgdG8gb3RoZXIgc2VydmljZXMgbmVjZXNzYXJ5IHRvIHByb3ZpZGUgRWxhc3RpY0xvYWRCYWxhbmNpbmcgZmVhdHVyZXMuICovXG4gICAgcHVibGljIEVsYXN0aWNMb2FkQmFsYW5jaW5nRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FbGFzdGljTG9hZEJhbGFuY2luZ0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBFbGFzdGljTG9hZEJhbGFuY2luZyBhbmQgZGVwZW5kZW50IHNlcnZpY2VzICovXG4gICAgcHVibGljIEVsYXN0aWNMb2FkQmFsYW5jaW5nUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRWxhc3RpY0xvYWRCYWxhbmNpbmdSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIEFjY2VzcyB0byB2aWV3IHB1cmNoYXNlZCBhc3NldHMgYW5kIGRvd25sb2FkIHJlbGF0ZWQgc29mdHdhcmUgYW5kIGtpY2tzdGFydCBmaWxlcyAqL1xuICAgIHB1YmxpYyBFbGVtZW50YWxBY3RpdmF0aW9uc0Rvd25sb2FkU29mdHdhcmVBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRWxlbWVudGFsQWN0aXZhdGlvbnNEb3dubG9hZFNvZnR3YXJlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRnVsbCBhY2Nlc3MgdG8gdmlldyBhbmQgdGFrZSBhY3Rpb24gb24gRWxlbWVudGFsIEFwcGxpYW5jZXMgYW5kIFNvZnR3YXJlIHB1cmNoYXNlZCBhc3NldHMgKi9cbiAgICBwdWJsaWMgRWxlbWVudGFsQWN0aXZhdGlvbnNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVsZW1lbnRhbEFjdGl2YXRpb25zRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFjY2VzcyB0byB2aWV3IHB1cmNoYXNlZCBhc3NldHMgYW5kIGdlbmVyYXRlIHNvZnR3YXJlIGxpY2Vuc2VzIGZvciBwZW5kaW5nIGFjdGl2YXRpb25zICovXG4gICAgcHVibGljIEVsZW1lbnRhbEFjdGl2YXRpb25zR2VuZXJhdGVMaWNlbnNlcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FbGVtZW50YWxBY3RpdmF0aW9uc0dlbmVyYXRlTGljZW5zZXMpO1xuICAgIH1cblxuICAgIC8qKiBSZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBkZXRhaWxlZCBsaXN0IG9mIHB1cmNoYXNlZCBhc3NldHMgYXNzb2NpYXRlZCB0byB0aGUgQVdTIGFjY291bnQgb2YgdGhlIHVzZXIgKi9cbiAgICBwdWJsaWMgRWxlbWVudGFsQWN0aXZhdGlvbnNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FbGVtZW50YWxBY3RpdmF0aW9uc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRnVsbCBhY2Nlc3MgdG8gdmlldyBhbmQgdGFrZSBhY3Rpb24gb24gRWxlbWVudGFsIEFwcGxpYW5jZXMgYW5kIFNvZnR3YXJlIHF1b3RlcyBhbmQgb3JkZXJzICovXG4gICAgcHVibGljIEVsZW1lbnRhbEFwcGxpYW5jZXNTb2Z0d2FyZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRWxlbWVudGFsQXBwbGlhbmNlc1NvZnR3YXJlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFJlYWQtb25seSBhY2Nlc3MgdG8gdmlldyBFbGVtZW50YWwgQXBwbGlhbmNlcyBhbmQgU29mdHdhcmUgcXVvdGVzIGFuZCBvcmRlcnMgKi9cbiAgICBwdWJsaWMgRWxlbWVudGFsQXBwbGlhbmNlc1NvZnR3YXJlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRWxlbWVudGFsQXBwbGlhbmNlc1NvZnR3YXJlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBGdWxsIGFjY2VzcyB0byB2aWV3IGFuZCB0YWtlIGFjdGlvbiBvbiBFbGVtZW50YWwgQXBwbGlhbmNlIGFuZCBTb2Z0d2FyZSBzdXBwb3J0IGNhc2VzIGFuZCBwcm9kdWN0IHN1cHBvcnQgY29udGVudCAqL1xuICAgIHB1YmxpYyBFbGVtZW50YWxTdXBwb3J0Q2VudGVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FbGVtZW50YWxTdXBwb3J0Q2VudGVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyByZWFkLW9ubHkgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyB0aGUgV0FMIHNlcnZpY2UgZm9yIEFtYXpvbiBFTVIgdG8gZmluZCBhbmQgcmV0dXJuIHRoZSBzdGF0dXMgb2YgYSBjbHVzdGVyICovXG4gICAgcHVibGljIEVNUkRlc2NyaWJlQ2x1c3RlclBvbGljeUZvckVNUldBTCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FTVJEZXNjcmliZUNsdXN0ZXJQb2xpY3lGb3JFTVJXQUwpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyByZXF1aXJlZCBieSB0aGUgQVdTIEZpbk9wcyBBZ2VudCB0byBwZXJmb3JtIGNvc3QgYW5hbHlzaXMgYW5kIHNwb3QgY29zdCBzYXZpbmcgb3Bwb3J0dW5pdHkgb24gY3VzdG9tZXIgQVdTIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgRmluT3BzQWdlbnRBZ2VudFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5GaW5PcHNBZ2VudEFnZW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHVzZSB0aGUgQVdTIEZpbk9wcyBBZ2VudCB3ZWIgYXBwIGZvciBhbiBBZ2VudC4gKi9cbiAgICBwdWJsaWMgRmluT3BzQWdlbnRPcGVyYXRvclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5GaW5PcHNBZ2VudE9wZXJhdG9yUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNzIHBvbGljeSB0byBhbGxvdyBGTSBzZXJ2aWNlIGxpbmtlZCByb2xlIHRvIHBlcmZvcm0gRk0tcmVsYXRlZCBhY3Rpb25zIG9uIEZNLW1hbmFnZWQgcmVzb3VyY2VzIHdpdGhpbiBhIGN1c3RvbWVyIEFXUyBPcmdhbml6YXRpb24gYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgRk1TU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRk1TU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIEZTeCB0byBkZWxldGUgaXRzIFNlcnZpY2UgTGlua2VkIFJvbGVzIGZvciBBbWF6b24gUzMgYWNjZXNzICovXG4gICAgcHVibGljIEZTeERlbGV0ZVNlcnZpY2VMaW5rZWRSb2xlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkZTeERlbGV0ZVNlcnZpY2VMaW5rZWRSb2xlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHRoZSByZXF1aXJlZCBwZXJtaXNzaW9ucyBmb3IgY29tcHV0ZSBhY3Rpb25zIGluIGFuIEFtYXpvbiBHYW1lTGlmdCBjb250YWluZXIgZmxlZXQsIGluY2x1ZGluZyBhY2Nlc3MgdG8gZGVwZW5kZW5jaWVzIHN1Y2ggYXMgQW1hem9uIFMzLiAqL1xuICAgIHB1YmxpYyBHYW1lTGlmdENvbnRhaW5lckZsZWV0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkdhbWVMaWZ0Q29udGFpbmVyRmxlZXRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdG8gYWxsb3cgR2FtZWxpZnQgR2FtZVNlcnZlckdyb3VwcyB0byBtYW5hZ2UgY3VzdG9tZXIgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEdhbWVMaWZ0R2FtZVNlcnZlckdyb3VwUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkdhbWVMaWZ0R2FtZVNlcnZlckdyb3VwUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBtYW5hZ2VkIHBvbGljeSBncmFudHMgcGVybWlzc2lvbiB0byBjb25uZWN0IHdpdGggQW1hem9uIFEgYW5kIHV0aWxpemUgdGhlIGZlYXR1cmVzIGluIHRoZSBHaXRMYWIgRHVvIHdpdGggQW1hem9uIFEgaW50ZWdyYXRpb24uICovXG4gICAgcHVibGljIEdpdExhYkR1b1dpdGhBbWF6b25RUGVybWlzc2lvbnNQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuR2l0TGFiRHVvV2l0aEFtYXpvblFQZXJtaXNzaW9uc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IEdsb2JhbEFjY2VsZXJhdG9yIFVzZXJzIGZ1bGwgQWNjZXNzIHRvIGFsbCBBUElzICovXG4gICAgcHVibGljIEdsb2JhbEFjY2VsZXJhdG9yRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5HbG9iYWxBY2NlbGVyYXRvckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBHbG9iYWxBY2NlbGVyYXRvciBVc2VycyBBY2Nlc3MgdG8gUmVhZCBPbmx5IEFQSXMgKi9cbiAgICBwdWJsaWMgR2xvYmFsQWNjZWxlcmF0b3JSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5HbG9iYWxBY2NlbGVyYXRvclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBhY2Nlc3MgdG8gdGhlIEdyZWVuZ3Jhc3MgT1RBIFVwZGF0ZSBhcnRpZmFjdHMgaW4gYWxsIEdyZWVuZ3Jhc3MgcmVnaW9ucyAqL1xuICAgIHB1YmxpYyBHcmVlbmdyYXNzT1RBVXBkYXRlQXJ0aWZhY3RBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuR3JlZW5ncmFzc09UQVVwZGF0ZUFydGlmYWN0QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQVdTIEhlYWx0aCBwb2xpY3kgdG8gZW5hYmxlIE9yZ2FuaXphdGlvbmFsIFZpZXcgZmVhdHVyZSAqL1xuICAgIHB1YmxpYyBIZWFsdGhPcmdhbml6YXRpb25zU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuSGVhbHRoT3JnYW5pemF0aW9uc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGFjY2VzcyB0byByZWFkIGFsbCBhY2Nlc3MgaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgSUFNIGFjY2VzcyBhZHZpc29yIHN1Y2ggYXMgc2VydmljZSBsYXN0IGFjY2Vzc2VkIGluZm9ybWF0aW9uLiAqL1xuICAgIHB1YmxpYyBJQU1BY2Nlc3NBZHZpc29yUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuSUFNQWNjZXNzQWR2aXNvclJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSUFNIEFjY2VzcyBBbmFseXplciAqL1xuICAgIHB1YmxpYyBJQU1BY2Nlc3NBbmFseXplckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuSUFNQWNjZXNzQW5hbHl6ZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBJQU0gQWNjZXNzIEFuYWx5emVyIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBJQU1BY2Nlc3NBbmFseXplclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTUFjY2Vzc0FuYWx5emVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgcmVxdWlyZWQgdG8gY2hlY2sgdGhlIHByZXNlbmNlIG9mIHJvb3QgdXNlciBjcmVkZW50aWFscyBzdWNoIGFzIHJvb3QgdXNlciBwYXNzd29yZCBhbmQgcm9vdCB1c2VyIGFjY2VzcyBrZXlzIHVzaW5nIHRoZSBTZWN1cml0eSBUb2tlbiBTZXJ2aWNlIChTVFMpIEFzc3VtZVJvb3QgQVBJLiBVc2UgdGhpcyBtYW5hZ2VkIHBvbGljeSBvbmx5IHdpdGggdGhlIFNUUyBBc3N1bWVSb290IGFjdGlvbi4gKi9cbiAgICBwdWJsaWMgSUFNQXVkaXRSb290VXNlckNyZWRlbnRpYWxzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTUF1ZGl0Um9vdFVzZXJDcmVkZW50aWFscyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyByZXF1aXJlZCB0byBjcmVhdGUgYSByb290IHVzZXIgcGFzc3dvcmQgdXNpbmcgdGhlIFNlY3VyaXR5IFRva2VuIFNlcnZpY2UgKFNUUykgQXNzdW1lUm9vdCBBUEkuICBVc2UgdGhpcyBtYW5hZ2VkIHBvbGljeSBvbmx5IHdpdGggdGhlIFNUUyBBc3N1bWVSb290IGFjdGlvbi4gKi9cbiAgICBwdWJsaWMgSUFNQ3JlYXRlUm9vdFVzZXJQYXNzd29yZCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JQU1DcmVhdGVSb290VXNlclBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHJlcXVpcmVkIHRvIGRlbGV0ZSBhbGwgcm9vdCB1c2VyIGNyZWRlbnRpYWxzIHN1Y2ggYXMgcm9vdCBwYXNzd29yZCBhbmQgcm9vdCBhY2Nlc3Mga2V5cyB1c2luZyB0aGUgU2VjdXJpdHkgVG9rZW4gU2VydmljZSAoU1RTKSBBc3N1bWVSb290IEFQSS4gIFVzZSB0aGlzIG1hbmFnZWQgcG9saWN5IG9ubHkgd2l0aCB0aGUgU1RTIEFzc3VtZVJvb3QgYWN0aW9uLiAqL1xuICAgIHB1YmxpYyBJQU1EZWxldGVSb290VXNlckNyZWRlbnRpYWxzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTURlbGV0ZVJvb3RVc2VyQ3JlZGVudGlhbHMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBJQU0gdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBJQU1GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIElBTSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIElBTVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFuIElBTSB1c2VyIHRvIG1hbmFnZSB0aGVpciBvd24gU2VydmljZSBTcGVjaWZpYyBDcmVkZW50aWFscy4gKi9cbiAgICBwdWJsaWMgSUFNU2VsZk1hbmFnZVNlcnZpY2VTcGVjaWZpY0NyZWRlbnRpYWxzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTVNlbGZNYW5hZ2VTZXJ2aWNlU3BlY2lmaWNDcmVkZW50aWFscyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBhYmlsaXR5IGZvciBhbiBJQU0gdXNlciB0byBjaGFuZ2UgdGhlaXIgb3duIHBhc3N3b3JkLiAqL1xuICAgIHB1YmxpYyBJQU1Vc2VyQ2hhbmdlUGFzc3dvcmQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuSUFNVXNlckNoYW5nZVBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdGhlIGFiaWxpdHkgZm9yIGFuIElBTSB1c2VyIHRvIG1hbmFnZSB0aGVpciBvd24gU1NIIGtleXMuICovXG4gICAgcHVibGljIElBTVVzZXJTU0hLZXlzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTVVzZXJTU0hLZXlzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSW50ZXJhY3RpdmUgVmlkZW8gU2VydmljZSAoSVZTKSwgQWxzbyBpbmNsdWRlZCBwZXJtaXNzaW9ucyBmb3IgZGVwZW5kZW50IHNlcnZpY2VzLCBuZWVkZWQgZm9yIGZ1bGwgYWNjZXNzIHRvIHRoZSBpdnMgY29uc29sZS4gKi9cbiAgICBwdWJsaWMgSVZTRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JVlNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBJVlMgTG93LUxhdGVuY3kgYW5kIFJlYWwtVGltZSBzdHJlYW1pbmcgQVBJcyAqL1xuICAgIHB1YmxpYyBJVlNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JVlNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UgTGlua2VkIFJvbGUgdG8gcGVyZm9ybSBTMyBQdXRPYmplY3QgdG8gcmVjb3JkaW5nIElWUyBsaXZlIHN0cmVhbXMgKi9cbiAgICBwdWJsaWMgSVZTUmVjb3JkVG9TMygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JVlNSZWNvcmRUb1MzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIEthZmthIENvbm5lY3QgcGVybWlzc2lvbiB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgS2Fma2FDb25uZWN0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuS2Fma2FDb25uZWN0U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBJQU0gc2VydmljZSBsaW5rZWQgcm9sZSBwb2xpY3kgZm9yIEthZmthLiAqL1xuICAgIHB1YmxpYyBLYWZrYVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkthZmthU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdGhlIHJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIEFtYXpvbiBLZXlzcGFjZXMgZm9yIENoYW5nZSBEYXRhIENhcHR1cmUgKi9cbiAgICBwdWJsaWMgS2V5c3BhY2VzQ0RDU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuS2V5c3BhY2VzQ0RDU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyByZXF1aXJlZCBieSBLZXlzcGFjZXMgZm9yIGNyb3NzLXJlZ2lvbiBkYXRhIHJlcGxpY2F0aW9uICovXG4gICAgcHVibGljIEtleXNwYWNlc1JlcGxpY2F0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuS2V5c3BhY2VzUmVwbGljYXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBncmFudCB0ZW1wb3JhcnkgZGF0YSBhY2Nlc3MgdG8gTGFrZSBGb3JtYXRpb24gcmVzb3VyY2VzICovXG4gICAgcHVibGljIExha2VGb3JtYXRpb25EYXRhQWNjZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTGFrZUZvcm1hdGlvbkRhdGFBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIExleCBCb3QgdXNlIGNhc2UgKi9cbiAgICBwdWJsaWMgTGV4Qm90UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkxleEJvdFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIExleCBDaGFubmVsIHVzZSBjYXNlICovXG4gICAgcHVibGljIExleENoYW5uZWxQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTGV4Q2hhbm5lbFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBMaWdodHNhaWwgc2VydmljZSBsaW5rZWQgcm9sZSBwb2xpY3kgd2hpY2ggZ3JhbnRzIHBlcm1pc3Npb25zIHRvIGV4cG9ydCByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgTGlnaHRzYWlsRXhwb3J0QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkxpZ2h0c2FpbEV4cG9ydEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9uIHRvIHJlZ2lzdGVyIE1lZGlhQ29ubmVjdCBHYXRld2F5IEluc3RhbmNlcyB0byBhIE1lZGlhQ29ubmVjdCBHYXRld2F5LiAqL1xuICAgIHB1YmxpYyBNZWRpYUNvbm5lY3RHYXRld2F5SW5zdGFuY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk1lZGlhQ29ubmVjdEdhdGV3YXlJbnN0YW5jZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgTWVkaWFQYWNrYWdlIHRvIHB1Ymxpc2ggbG9ncyB0byBDbG91ZFdhdGNoICovXG4gICAgcHVibGljIE1lZGlhUGFja2FnZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk1lZGlhUGFja2FnZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIE1lbW9yeURCIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmIGFzIG5lY2Vzc2FyeSBmb3IgbWFuYWdpbmcgeW91ciByZXNvdXJjZXMuICovXG4gICAgcHVibGljIE1lbW9yeURCU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTWVtb3J5REJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgRGF0YWJhc2UgTWlncmF0aW9uIFNlcnZpY2UgdG8gYXNzdW1lIHJvbGUgaW4gY3VzdG9tZXIncyBhY2NvdW50IHRvIGNhbGwgTWlncmF0aW9uIEh1YiAqL1xuICAgIHB1YmxpYyBNaWdyYXRpb25IdWJETVNBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5NaWdyYXRpb25IdWJETVNBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBNaWdyYXRpb24gSHViIHRvIGNhbGwgQXBwbGljYXRpb24gRGlzY292ZXJ5IFNlcnZpY2Ugb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgTWlncmF0aW9uSHViU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTWlncmF0aW9uSHViU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIFNlcnZlciBNaWdyYXRpb24gU2VydmljZSB0byBhc3N1bWUgcm9sZSBpbiBjdXN0b21lcidzIGFjY291bnQgdG8gY2FsbCBNaWdyYXRpb24gSHViICovXG4gICAgcHVibGljIE1pZ3JhdGlvbkh1YlNNU0FjY2Vzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk1pZ3JhdGlvbkh1YlNNU0FjY2Vzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBBV1MgTW9uaXRyb24gc2VydmljZSBsaW5rZWQgcm9sZSBncmFudGluZyBhY2Nlc3MgdG8gcmVxdWlyZWQgY3VzdG9tZXIgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBNb25pdHJvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk1vbml0cm9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBNdWx0aS1wYXJ0eSBhcHByb3ZhbC4gVGhpcyBwb2xpY3kgYWxzbyBpbmNsdWRlcyByZWxhdGVkIHBlcm1pc3Npb25zIHRvIEFXUyBPcmdhbml6YXRpb25zIGFuZCBBV1MgSUFNIElkZW50aXR5IGZvciBtYW5hZ2luZyBhcHByb3ZhbCB0ZWFtcyBhbmQgaWRlbnRpdHkgc291cmNlcy4gKi9cbiAgICBwdWJsaWMgTXVsdGlQYXJ0eUFwcHJvdmFsRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5NdWx0aVBhcnR5QXBwcm92YWxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBNdWx0aS1wYXJ0eSBhcHByb3ZhbC4gVGhpcyBwb2xpY3kgYWxzbyBpbmNsdWRlcyByZWxhdGVkIHJlYWQgcGVybWlzc2lvbiB0byBBV1MgT3JnYW5pemF0aW9ucyBhbmQgQVdTIElBTSBJZGVudGl0eSBmb3IgYXBwcm92YWwgdGVhbXMgYW5kIGlkZW50aXR5IHNvdXJjZXMuICovXG4gICAgcHVibGljIE11bHRpUGFydHlBcHByb3ZhbFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk11bHRpUGFydHlBcHByb3ZhbFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gbWFuYWdlIEFtYXpvbiBOZXB0dW5lIHVzaW5nIHRoZSBBV1MgQ29uc29sZS4gTm90ZSB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBmdWxsIGFjY2VzcyB0byBwdWJsaXNoIG9uIGFsbCBTTlMgdG9waWNzIHdpdGhpbiB0aGUgYWNjb3VudCwgcGVybWlzc2lvbnMgdG8gY3JlYXRlIGFuZCBlZGl0IEFtYXpvbiBFQzIgaW5zdGFuY2VzIGFuZCBWUEMgY29uZmlndXJhdGlvbnMsIHBlcm1pc3Npb25zIHRvIHZpZXcgYW5kIGxpc3Qga2V5cyBvbiBBbWF6b24gS01TLCBhbmQgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJEUy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwczovL2F3cy5hbWF6b24uY29tL25lcHR1bmUvZmFxcy8uICovXG4gICAgcHVibGljIE5lcHR1bmVDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5OZXB0dW5lQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTmVwdHVuZS4gTm90ZSB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBmdWxsIGFjY2VzcyB0byBwdWJsaXNoIG9uIGFsbCBTTlMgdG9waWNzIHdpdGhpbiB0aGUgYWNjb3VudCBhbmQgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJEUy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwczovL2F3cy5hbWF6b24uY29tL25lcHR1bmUvZmFxcy8uICovXG4gICAgcHVibGljIE5lcHR1bmVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk5lcHR1bmVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBhbGwgQW1hem9uIE5lcHR1bmUgQW5hbHl0aWNzIHJlc291cmNlcyBhbG9uZyB3aXRoIHJlYWQgb25seSBwZXJtaXNzaW9ucyBmb3IgZGVwZW5kZW50IHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBOZXB0dW5lR3JhcGhSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5OZXB0dW5lR3JhcGhSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIE5lcHR1bmUuIE5vdGUgdGhhdCB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBhY2Nlc3MgdG8gQW1hem9uIFJEUyByZXNvdXJjZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9uZXB0dW5lL2ZhcXMvLiAqL1xuICAgIHB1YmxpYyBOZXB0dW5lUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTmVwdHVuZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHBlcm1pc3Npb25zIHRvIEFXUyBzZXJ2aWNlcyBhbmQgYWN0aW9ucyByZXF1aXJlZCB0byBzZXQgdXAgYW5kIGNvbmZpZ3VyZSBBV1MgbmV0d29yayByZXNvdXJjZXMuICovXG4gICAgcHVibGljIE5ldHdvcmtBZG1pbmlzdHJhdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk5ldHdvcmtBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHRoZSBBV1MgU2hpZWxkIG5ldHdvcmsgc2VjdXJpdHkgZGlyZWN0b3Igc2VydmljZSBsaW5rZWQgcm9sZSB0byBhc3Nlc3Mgc3BlY2lmaWVkIGVudmlyb25tZW50cy4gKi9cbiAgICBwdWJsaWMgTmV0d29ya1NlY3VyaXR5RGlyZWN0b3JTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5OZXR3b3JrU2VjdXJpdHlEaXJlY3RvclNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNzIHBvbGljeSB0byBhbGxvdyBOZXR3b3JrU2VjdXJpdHlNYW5hZ2VyIHNlcnZpY2UgbGlua2VkIHJvbGUgdG8gcGVyZm9ybSBOZXR3b3JrU2VjdXJpdHlNYW5hZ2VyLXJlbGF0ZWQgYWN0aW9ucyBvbiBOZXR3b3JrU2VjdXJpdHlNYW5hZ2VyLW1hbmFnZWQgcmVzb3VyY2VzIHdpdGhpbiBhIGN1c3RvbWVyIEFXUyBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBOZXR3b3JrU2VjdXJpdHlNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTmV0d29ya1NlY3VyaXR5TWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIE5vdmFBY3QgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMgdG8gb3BlcmF0ZSB0aGUgTm92YSBBY3QgYWdlbnRzLiAqL1xuICAgIHB1YmxpYyBOb3ZhQWN0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTm92YUFjdFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBPYnNlcnZhYmlsaXR5IEFjY2VzcyBNYW5hZ2VyICovXG4gICAgcHVibGljIE9BTUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuT0FNRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIFJlYWQgT25seSBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBPYnNlcnZhYmlsaXR5IEFjY2VzcyBNYW5hZ2VyICovXG4gICAgcHVibGljIE9BTVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk9BTVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBPcGVuU2VhcmNoIEluZ2VzdGlvbiB0byBkZXNjcmliZSBuZXR3b3JrIHJlc291cmNlcyBhbmQgd3JpdGUgc2VydmljZSBtZXRyaWNzIHRvIGNsb3Vkd2F0Y2ggKi9cbiAgICBwdWJsaWMgT3BlbnNlYXJjaEluZ2VzdGlvblNlbGZNYW5hZ2VkVnBjZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5PcGVuc2VhcmNoSW5nZXN0aW9uU2VsZk1hbmFnZWRWcGNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGFzc29jaWF0ZSBhbmQgZGlzc29jaWF0ZSBwYXJ0bmVyIGNlbnRyYWwgdXNlcnMgd2l0aCBJQU0gcm9sZXMgKi9cbiAgICBwdWJsaWMgUGFydG5lckNlbnRyYWxBY2NvdW50TWFuYWdlbWVudFVzZXJSb2xlQXNzb2NpYXRpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUGFydG5lckNlbnRyYWxBY2NvdW50TWFuYWdlbWVudFVzZXJSb2xlQXNzb2NpYXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgcHJvdmlkZXMgYWNjZXNzIHRvIG1hbmFnZSBhbGwgdGhlIGluY2VudGl2ZSBiZW5lZml0cyBpbiBBV1MgUGFydG5lciBDZW50cmFsLiAqL1xuICAgIHB1YmxpYyBQYXJ0bmVyQ2VudHJhbEluY2VudGl2ZUJlbmVmaXRNYW5hZ2VtZW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlBhcnRuZXJDZW50cmFsSW5jZW50aXZlQmVuZWZpdE1hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1Mgc2VydmljZXMgYW5kIHJlc291cmNlcywgYnV0IGRvZXMgbm90IGFsbG93IG1hbmFnZW1lbnQgb2YgVXNlcnMgYW5kIGdyb3Vwcy4gKi9cbiAgICBwdWJsaWMgUG93ZXJVc2VyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlBvd2VyVXNlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBQcmljaW5nIFBsYW4gTWFuYWdlciAqL1xuICAgIHB1YmxpYyBQcmljaW5nUGxhbk1hbmFnZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlByaWNpbmdQbGFuTWFuYWdlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBQcmljaW5nIFBsYW4gTWFuYWdlciAqL1xuICAgIHB1YmxpYyBQcmljaW5nUGxhbk1hbmFnZXJSZWFkb25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5QcmljaW5nUGxhbk1hbmFnZXJSZWFkb25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIFEgQXBwcy4gKi9cbiAgICBwdWJsaWMgUUFwcHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5RQXBwc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIFFCdXNpbmVzcyB0byBjYWxsIFF1aWNrU2lnaHQgQVBJcyBmb3IgdGhlIFF1aWNrU2lnaHQgcGx1Z2luICovXG4gICAgcHVibGljIFFCdXNpbmVzc1F1aWNrc2lnaHRQbHVnaW5Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUUJ1c2luZXNzUXVpY2tzaWdodFBsdWdpblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIFEgKi9cbiAgICBwdWJsaWMgUUJ1c2luZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUUJ1c2luZXNzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdXNlZCBieSBRdWlja1NpZ2h0IHRlYW0gdG8gYWNjZXNzIGN1c3RvbWVyIGRhdGEgcHJvZHVjZWQgYnkgUzMgU3RvcmFnZSBNYW5hZ2VtZW50IEFuYWx5dGljcy4gKi9cbiAgICBwdWJsaWMgUXVpY2tTaWdodEFjY2Vzc0ZvclMzU3RvcmFnZU1hbmFnZW1lbnRBbmFseXRpY3NSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5RdWlja1NpZ2h0QWNjZXNzRm9yUzNTdG9yYWdlTWFuYWdlbWVudEFuYWx5dGljc1JlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBBbWF6b24gUkRTIHNlcnZpY2Ugcm9sZS4gKi9cbiAgICBwdWJsaWMgUkRTQ2xvdWRIc21BdXRob3JpemF0aW9uUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5SRFNDbG91ZEhzbUF1dGhvcml6YXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1Mgc2VydmljZXMgYW5kIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgYW4gSUFNIHJvbGUgb3IgdXNlciBmdWxsIGFjY2VzcyB0byB2aWV3IHJlOkludmVudCBwYXNzIGNoYXJnZSBkZXRhaWxzIGFuZCBhcHByb3ZlIGJpbGxpbmcgdG8gdGhlaXIgQVdTIGFjY291bnRzICovXG4gICAgcHVibGljIFJlSW52ZW50VGlja2V0QXBwcm92YWxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUmVJbnZlbnRUaWNrZXRBcHByb3ZhbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIFJlc291cmNlIEdyb3VwcyBhbmQgVGFnIEVkaXRvci4gKi9cbiAgICBwdWJsaWMgUmVzb3VyY2VHcm91cHNhbmRUYWdFZGl0b3JGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJlc291cmNlR3JvdXBzYW5kVGFnRWRpdG9yRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB1c2UgUmVzb3VyY2UgR3JvdXBzIGFuZCBUYWcgRWRpdG9yLCBidXQgZG9lcyBub3QgYWxsb3cgZWRpdGluZyBvZiB0YWdzIHZpYSB0aGUgVGFnIEVkaXRvci4gKi9cbiAgICBwdWJsaWMgUmVzb3VyY2VHcm91cHNhbmRUYWdFZGl0b3JSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5SZXNvdXJjZUdyb3Vwc2FuZFRhZ0VkaXRvclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBSZXNvdXJjZSBHcm91cHMgdG8gcXVlcnkgdGhlIEFXUyBzZXJ2aWNlcyB0aGF0IG93biB5b3VyIHJlc291cmNlcyB0byBrZWVwIHRoZSBncm91cCB1cC10by1kYXRlICovXG4gICAgcHVibGljIFJlc291cmNlR3JvdXBzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUmVzb3VyY2VHcm91cHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIHRhZyBhbmQgdW50YWcgYWxsIHRoZSByZXNvdXJjZXMgc3VwcG9ydGVkIGJ5IFJlc291cmNlIEdyb3VwcyBUYWdnaW5nIEFQSS4gVGhpcyBwb2xpY3kgYWxzbyBncmFudHMgdGhlIHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIHJldHJpZXZlIGFsbCB0YWdnZWQsIG9yIHByZXZpb3VzbHkgdGFnZ2VkLCByZXNvdXJjZXMgdGhyb3VnaCB0aGUgUmVzb3VyY2UgR3JvdXBzIFRhZ2dpbmcgQVBJLiAqL1xuICAgIHB1YmxpYyBSZXNvdXJjZUdyb3Vwc1RhZ2dpbmdBUElUYWdVbnRhZ1N1cHBvcnRlZFJlc291cmNlcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5SZXNvdXJjZUdyb3Vwc1RhZ2dpbmdBUElUYWdVbnRhZ1N1cHBvcnRlZFJlc291cmNlcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgT3BlblNoaWZ0IEFtYXpvbiBFQlMgQ29udGFpbmVyIFN0b3JhZ2UgSW50ZXJmYWNlIChDU0kpIERyaXZlciBPcGVyYXRvciB0byBpbnN0YWxsIGFuZCBtYWludGFpbiB0aGUgQW1hem9uIEVCUyBDU0kgZHJpdmVyIG9uIGEgUmVkIEhhdCBPcGVuU2hpZnQgU2VydmljZSBvbiBBV1MgKFJPU0EpIGNsdXN0ZXIuIFRoZSBBbWF6b24gRUJTIENTSSBkcml2ZXIgYWxsb3dzIFJPU0EgY2x1c3RlcnMgdG8gbWFuYWdlIHRoZSBsaWZlY3ljbGUgb2YgQW1hem9uIEVCUyB2b2x1bWVzIGZvciBwZXJzaXN0ZW50IHZvbHVtZXMuICovXG4gICAgcHVibGljIFJPU0FBbWF6b25FQlNDU0lEcml2ZXJPcGVyYXRvclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBQW1hem9uRUJTQ1NJRHJpdmVyT3BlcmF0b3JQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIE9wZW5TaGlmdCBDbG91ZCBOZXR3b3JrIENvbmZpZyBDb250cm9sbGVyIE9wZXJhdG9yIHRvIHByb3Zpc2lvbiBhbmQgbWFuYWdlIG5ldHdvcmtpbmcgcmVzb3VyY2VzIGZvciB1c2UgYnkgdGhlIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSBjbHVzdGVyIG5ldHdvcmtpbmcgb3ZlcmxheS4gVGhlIE9wZW5TaGlmdCBDbG91ZCBOZXR3b3JrIE9wZXJhdG9yIGludGVyZmFjZXMgd2l0aCBBV1MgQVBJcyBvbiBiZWhhbGYgb2YgdGhlIG5ldHdvcmsgcGx1Z2lucyB2aWEgQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9ucy4gVGhlIG9wZXJhdG9yIHVzZXMgdGhlc2UgcG9saWN5IHBlcm1pc3Npb25zIHRvIG1hbmFnZSBwcml2YXRlIElQIGFkZHJlc3NlcyBmb3IgQW1hem9uIEVDMiBpbnN0YW5jZXMgYXMgcGFydCBvZiB0aGUgUk9TQSBjbHVzdGVyLiAqL1xuICAgIHB1YmxpYyBST1NBQ2xvdWROZXR3b3JrQ29uZmlnT3BlcmF0b3JQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQUNsb3VkTmV0d29ya0NvbmZpZ09wZXJhdG9yUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSBjb250cm9sIHBsYW5lIHRvIG1hbmFnZSBST1NBIGNsdXN0ZXIgQW1hem9uIEVDMiBhbmQgQW1hem9uIFJvdXRlIDUzIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgUk9TQUNvbnRyb2xQbGFuZU9wZXJhdG9yUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FDb250cm9sUGxhbmVPcGVyYXRvclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgT3BlblNoaWZ0IEltYWdlIFJlZ2lzdHJ5IE9wZXJhdG9yIHRvIHByb3Zpc2lvbiBhbmQgbWFuYWdlIEFtYXpvbiBTMyBidWNrZXRzIGFuZCBvYmplY3RzIGZvciB1c2UgYnkgdGhlIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSBpbi1jbHVzdGVyIGltYWdlIHJlZ2lzdHJ5IHRvIHNhdGlzZnkgUk9TQSBzdG9yYWdlIHJlcXVpcmVtZW50cy4gVGhlIE9wZW5TaGlmdCBJbWFnZSBSZWdpc3RyeSBPcGVyYXRvciBpbnN0YWxscyBhbmQgbWFpbnRhaW5zIHRoZSBpbnRlcm5hbCByZWdpc3RyeSBvZiBhIFJlZCBIYXQgT3BlblNoaWZ0IGNsdXN0ZXIuICovXG4gICAgcHVibGljIFJPU0FJbWFnZVJlZ2lzdHJ5T3BlcmF0b3JQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQUltYWdlUmVnaXN0cnlPcGVyYXRvclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgT3BlblNoaWZ0IEluZ3Jlc3MgT3BlcmF0b3IgdG8gcHJvdmlzaW9uIGFuZCBtYW5hZ2UgbG9hZCBiYWxhbmNlcnMgYW5kIGRvbWFpbiBuYW1lIHN5c3RlbSAoRE5TKSBjb25maWd1cmF0aW9ucyBmb3IgUmVkIEhhdCBPcGVuU2hpZnQgU2VydmljZSBvbiBBV1MgKFJPU0EpIGNsdXN0ZXJzLiBUaGUgcG9saWN5IGFsbG93cyByZWFkIGFjY2VzcyB0byB0YWcgdmFsdWVzLCB3aGljaCB0aGUgb3BlcmF0b3IgZmlsdGVycyBmb3IgUm91dGUgNTMgcmVzb3VyY2VzIHRvIGRpc2NvdmVyIGhvc3RlZCB6b25lcy4gKi9cbiAgICBwdWJsaWMgUk9TQUluZ3Jlc3NPcGVyYXRvclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBSW5ncmVzc09wZXJhdG9yUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBSZWQgSGF0IE9wZW5TaGlmdCBTZXJ2aWNlIG9uIEFXUyAoUk9TQSkgaW5zdGFsbGVyIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIHRoYXQgc3VwcG9ydCBST1NBIGNsdXN0ZXIgaW5zdGFsbGF0aW9uLiBUaGlzIGluY2x1ZGVzIG1hbmFnaW5nIGluc3RhbmNlIHByb2ZpbGVzIGZvciBST1NBIHdvcmtlciBub2Rlcy4gKi9cbiAgICBwdWJsaWMgUk9TQUluc3RhbGxlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBSW5zdGFsbGVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHRoZSBST1NBIEthcnBlbnRlciBjb250cm9sbGVyIHRvIGR5bmFtaWNhbGx5IHByb3Zpc2lvbiBhbmQgbWFuYWdlIEVDMiBpbnN0YW5jZXMgZm9yIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSBob3N0ZWQgY29udHJvbCBwbGFuZSBjbHVzdGVycy4gVGhpcyBpbmNsdWRlcyBFQzIgZmxlZXQgYW5kICAgaW5zdGFuY2UgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIGluc3RhbmNlIHByaWNpbmcgcXVlcmllcywgS01TIG9wZXJhdGlvbnMgZm9yIEVCUyB2b2x1bWUgZW5jcnlwdGlvbiB3aXRoIGN1c3RvbWVyLW1hbmFnZWQga2V5cywgYW5kIElBTSBpbnN0YW5jZSBwcm9maWxlIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIFJPU0FLYXJwZW50ZXJDb250cm9sbGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FLYXJwZW50ZXJDb250cm9sbGVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBidWlsdC1pbiBST1NBIEFXUyBFbmNyeXB0aW9uIFByb3ZpZGVyIHRvIG1hbmFnZSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSAoS01TKSBrZXlzIHRvIHN1cHBvcnQgZXRjZCBkYXRhIGVuY3J5cHRpb24gdXNpbmcgYSBjdXN0b21lciBwcm92aWRlZCBBV1MgS01TIGtleS4gVGhlIHBvbGljeSBhbGxvd3MgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiBvZiBkYXRhIHVzaW5nIEtNUyBrZXlzLiAqL1xuICAgIHB1YmxpYyBST1NBS01TUHJvdmlkZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQUtNU1Byb3ZpZGVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBST1NBIEt1YmVybmV0ZXMgY29udHJvbGxlciB0byBtYW5hZ2UgQW1hem9uIEVDMiwgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyAoRUxCKSwgYW5kIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIChLTVMpIHJlc291cmNlcyBmb3IgYSBST1NBIGNsdXN0ZXIuICovXG4gICAgcHVibGljIFJPU0FLdWJlQ29udHJvbGxlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBS3ViZUNvbnRyb2xsZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyB0aGUgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gbWFuYWdlIHRoZSBSZWQgSGF0IE9wZW5TaGlmdCBTZXJ2aWNlIG9uIEFXUyAoUk9TQSkgc3Vic2NyaXB0aW9uLiAqL1xuICAgIHB1YmxpYyBST1NBTWFuYWdlU3Vic2NyaXB0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FNYW5hZ2VTdWJzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgUmVkIEhhdCBPcGVuU2hpZnQgU2VydmljZSBvbiBBV1MgKFJPU0EpIHRvIG1hbmFnZSBjbHVzdGVyIEVDMiBpbnN0YW5jZXMgYXMgd29ya2VyIG5vZGVzLCBpbmNsdWRpbmcgcGVybWlzc2lvbiB0byBjb25maWd1cmUgc2VjdXJpdHkgZ3JvdXBzIGFuZCB0YWcgaW5zdGFuY2VzIGFuZCB2b2x1bWVzLiBUaGlzIHBvbGljeSBhbHNvIGFsbG93cyBmb3IgdGhlIHVzZSBvZiBFQzIgaW5zdGFuY2VzIHdpdGggZGlzayBlbmNyeXB0aW9uIHByb3ZpZGVkIGJ5IEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIChLTVMpIGtleXMuICovXG4gICAgcHVibGljIFJPU0FOb2RlUG9vbE1hbmFnZW1lbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQU5vZGVQb29sTWFuYWdlbWVudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgUmVkIEhhdCBPcGVuU2hpZnQgU2VydmljZSBvbiBBV1MgKFJPU0EpIGluc3RhbGxlciB0byBjb25maWd1cmUgVlBDIEVuZHBvaW50cyBhbmQgU2VjdXJpdHkgR3JvdXBzLiBJbnRlbmRlZCB0byBiZSB1c2VkIG9uIGEgc2hhcmVkIFZQQy4gKi9cbiAgICBwdWJsaWMgUk9TQVNoYXJlZFZQQ0VuZHBvaW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FTaGFyZWRWUENFbmRwb2ludFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgUmVkIEhhdCBPcGVuU2hpZnQgU2VydmljZSBvbiBBV1MgKFJPU0EpIGluc3RhbGxlciB0byBjb25maWd1cmUgUm91dGU1MyByZWNvcmRzLiBJbnRlbmRlZCB0byBiZSB1c2VkIG9uIGEgc2hhcmVkIFZQQy4gKi9cbiAgICBwdWJsaWMgUk9TQVNoYXJlZFZQQ1JvdXRlNTNQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQVNoYXJlZFZQQ1JvdXRlNTNQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBST1NBIHNpdGUgcmVsaWFiaWxpdHkgZW5naW5lZXJpbmcgKFNSRSkgdGhlIHBlcm1pc3Npb25zIG5lZWRlZCB0byBpbml0aWFsbHkgb2JzZXJ2ZSwgZGlhZ25vc2UsIGFuZCBzdXBwb3J0IEFXUyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSBjbHVzdGVycywgaW5jbHVkaW5nIHRoZSBhYmlsaXR5IHRvIGNoYW5nZSBST1NBIGNsdXN0ZXIgbm9kZSBzdGF0ZS4gKi9cbiAgICBwdWJsaWMgUk9TQVNSRVN1cHBvcnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQVNSRVN1cHBvcnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgUmVkIEhhdCBPcGVuU2hpZnQgU2VydmljZSBvbiBBV1MgKFJPU0EpIHdvcmtlciBub2RlcyBpbiB5b3VyIGFjY291bnQgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gRUMyIGluc3RhbmNlcyBhbmQgQVdTIFJlZ2lvbnMgZm9yIGNvbXB1dGUgbm9kZSBsaWZlY3ljbGUgbWFuYWdlbWVudC4gKi9cbiAgICBwdWJsaWMgUk9TQVdvcmtlckluc3RhbmNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FXb3JrZXJJbnN0YW5jZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UgTGlua2VkIFJvbGUgUG9saWN5IGZvciBSb3V0ZSA1MyBSZWNvdmVyeSBSZWFkaW5lc3MgKi9cbiAgICBwdWJsaWMgUm91dGU1M1JlY292ZXJ5UmVhZGluZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUm91dGU1M1JlY292ZXJ5UmVhZGluZXNzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgUm91dGU1MyBSZXNvbHZlciAqL1xuICAgIHB1YmxpYyBSb3V0ZTUzUmVzb2x2ZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Sb3V0ZTUzUmVzb2x2ZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEEgc2VydmljZS1saW5rZWQgcm9sZSByZXF1aXJlZCBmb3IgQVdTIFJUQkZhYnJpYyB0byBjcmVhdGUgYW5kIG1hbmFnZSB5b3VyIG5ldHdvcmsgaW50ZXJmYWNlIHJlc291cmNlcyBhbmQgZGVsaXZlciBtZXRyaWNzLiAqL1xuICAgIHB1YmxpYyBSVEJGYWJyaWNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5SVEJGYWJyaWNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBTMyBTdG9yYWdlIExlbnMgKi9cbiAgICBwdWJsaWMgUzNTdG9yYWdlTGVuc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlMzU3RvcmFnZUxlbnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyByZXF1aXJlZCB0byB1bmxvY2sgYSBTMyBidWNrZXQgcG9saWN5IHVzaW5nIHRoZSBTZWN1cml0eSBUb2tlbiBTZXJ2aWNlIChTVFMpIEFzc3VtZVJvb3QgQVBJLiBVc2UgdGhpcyBtYW5hZ2VkIHBvbGljeSBvbmx5IHdpdGggdGhlIFNUUyBBc3N1bWVSb290IGFjdGlvbi4gKi9cbiAgICBwdWJsaWMgUzNVbmxvY2tCdWNrZXRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUzNVbmxvY2tCdWNrZXRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBpbml0aWFsIGFkbWluaXN0cmF0aXZlIGFuZCBpbmRpdmlkdWFsIHNldHVwIHByaXZpbGVnZXMgZm9yIEFtYXpvbiBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8gdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuIEFsbG93cyBsYXVuY2hpbmcgb2YgU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvIFBvcnRhbC4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvQWRtaW5JQU1Db25zb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0FkbWluSUFNQ29uc29sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFkbWluaXN0cmF0aXZlIGV4ZWN1dGlvbiBwb2xpY3kgZm9yIHVzaW5nIElBTSByb2xlcyB3aXRoIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpby4gQWxsb3dzIGFkbWlucyB0byBwcm92aXNpb24sIG1hbmFnZSBhbmQgYWNjZXNzIHJlc291cmNlcyBpbiB5b3VyIGFjY291bnQgKGV4Y2x1ZGluZyBhY2Nlc3MgdG8gZGF0YSByZXNvdXJjZXMpIGZvciBJQU0tYmFzZWQgdXNhZ2Ugb2YgU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9BZG1pbklBTURlZmF1bHRFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvQWRtaW5JQU1EZWZhdWx0RXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWRtaW5pc3RyYXRpdmUgZXhlY3V0aW9uIHBvbGljeSBmb3IgdXNpbmcgSUFNIHJvbGVzIHdpdGggU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvLiBBbGxvd3MgYWRtaW5zIHRvIHByb3Zpc2lvbiwgbWFuYWdlIGFuZCBhY2Nlc3MgcmVzb3VyY2VzIGluIHRoZSBsb2NhbCBhY2NvdW50IChpbmNsdWRpbmcgYnJvYWQgYWNjZXNzIHRvIGFsbCBBUElzIGluIGRhdGEgc2VydmljZXMgbGlrZSBTMywgR2x1ZSwgQ2xvdWRXYXRjaCBMb2dzLCBhbmQgb3RoZXJzKSBmb3IgSUFNLWJhc2VkIHVzYWdlIG9mIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvQWRtaW5JQU1QZXJtaXNzaXZlRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0FkbWluSUFNUGVybWlzc2l2ZUV4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgSUFNIHBvbGljeSBncmFudHMgYW4gSUFNIHJvbGUgZnVsbCBhY2Nlc3MgdG8gQVdTIEdsdWUgRGF0YSBDYXRhbG9nIChtZXRhZGF0YSkgYW5kIEFtYXpvbiBTMyAoYWN0dWFsIGRhdGEpIGZvciBkYXRhIGxha2Ugb3BlcmF0aW9ucywgd2l0aCBhY2Nlc3Mgc2NvcGVkIGJ5IGFjY291bnQsIGFuZCByb2xlIHRhZ3MuICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0FkbWluUHJvamVjdFVzZXJSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0FkbWluUHJvamVjdFVzZXJSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBCZWRyb2NrIEFnZW50cyB0byBhY2Nlc3MgQW1hem9uIEJlZHJvY2sgbW9kZWxzIGFuZCBvdGhlciByZXNvdXJjZXMgYXR0YWNoZWQgdG8gYW4gYWdlbnQgaW4gU2FnZU1ha2VyIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0FnZW50U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0FnZW50U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gYW4gQW1hem9uIEJlZHJvY2sgY2hhdCBhZ2VudCBhcHAncyBjb25maWd1cmF0aW9uIGFuZCBBbWF6b24gQmVkcm9jayBhZ2VudCBpbiBTYWdlTWFrZXIgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9CZWRyb2NrQ2hhdEFnZW50VXNlclJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0NoYXRBZ2VudFVzZXJSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBCZWRyb2NrIHRvIGFjY2VzcyBBbWF6b24gQmVkcm9jayBtb2RlbHMgYW5kIGRhdGFzZXRzIGZvciBldmFsdWF0aW9uIGpvYnMgaW4gU2FnZU1ha2VyIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0V2YWx1YXRpb25Kb2JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9CZWRyb2NrRXZhbHVhdGlvbkpvYlNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBCZWRyb2NrIEZsb3dzIHRvIGFjY2VzcyBBbWF6b24gQmVkcm9jayBtb2RlbHMgYW5kIG90aGVyIHJlc291cmNlcyBhdHRhY2hlZCB0byBhIGZsb3cgaW4gU2FnZU1ha2VyIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0Zsb3dTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9CZWRyb2NrRmxvd1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBMYW1iZGEgdG8gYWNjZXNzIGFuIEFtYXpvbiBCZWRyb2NrIGZ1bmN0aW9uIGNvbXBvbmVudCdzIGNvbmZpZ3VyYXRpb24gaW4gU2FnZU1ha2VyIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0Z1bmN0aW9uRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9CZWRyb2NrRnVuY3Rpb25FeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGNvbmZpZ3VyZSB2ZWN0b3Igc3RvcmVzIGFuZCBBbWF6b24gQmVkcm9jayBrbm93bGVkZ2UgYmFzZXMgaW4gU2FnZU1ha2VyIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0tub3dsZWRnZUJhc2VDdXN0b21SZXNvdXJjZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9CZWRyb2NrS25vd2xlZGdlQmFzZUN1c3RvbVJlc291cmNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBCZWRyb2NrIEtub3dsZWRnZSBCYXNlcyB0byBhY2Nlc3MgQW1hem9uIEJlZHJvY2sgbW9kZWxzIGFuZCBkYXRhIHNvdXJjZXMgaW4gU2FnZU1ha2VyIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0tub3dsZWRnZUJhc2VTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9CZWRyb2NrS25vd2xlZGdlQmFzZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGFuIEFtYXpvbiBCZWRyb2NrIHByb21wdCBhbmQgaXRzIGNvbmZpZ3VyYXRpb24gaW4gU2FnZU1ha2VyIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja1Byb21wdFVzZXJSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0JlZHJvY2tQcm9tcHRVc2VyUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIHVzZWQgYnkgQW1hem9uIFNhZ2VNYWtlciBTdHVkaW8gdG8gY2F0YWxvZywgZGlzY292ZXIsIGdvdmVybiwgc2hhcmUsIGFuZCBhbmFseXplIGRhdGEgaW4gdGhlIEFtYXpvbiBTYWdlTWFrZXIgU3R1ZGlvIGRvbWFpbi4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvRG9tYWluRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9Eb21haW5FeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIGZvciBkb21haW4gbGV2ZWwgYWN0aW9ucyBpbiB0aGUgcG9ydGFsIHRoYXQgYXJlIHBlcmZvcm1lZCBieSBBbWF6b24gU2FnZU1ha2VyIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvRG9tYWluU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvRG9tYWluU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gU2FnZU1ha2VyIFN0dWRpbyBjcmVhdGVzIElBTSByb2xlcyBmb3IgcHJvamVjdHMgdXNlcnMgdG8gcGVyZm9ybSBkYXRhIGFuYWx5dGljcywgYXJ0aWZpY2lhbCBpbnRlbGxpZ2VuY2UsIGFuZCBtYWNoaW5lIGxlYXJuaW5nIGFjdGlvbnMsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgdGhlc2Ugcm9sZXMgdG8gZGVmaW5lIHRoZSBwZXJtaXNzaW9ucyByZWxhdGVkIHRvIEVNUi4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvRU1SQ29udGFpbmVyc1N5c3RlbU5hbWVzcGFjZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvRU1SQ29udGFpbmVyc1N5c3RlbU5hbWVzcGFjZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gU2FnZU1ha2VyIFN0dWRpbyBjcmVhdGVzIElBTSByb2xlcyBmb3IgcHJvamVjdHMgdXNlcnMgdG8gcGVyZm9ybSBkYXRhIGFuYWx5dGljcywgYXJ0aWZpY2lhbCBpbnRlbGxpZ2VuY2UsIGFuZCBtYWNoaW5lIGxlYXJuaW5nIGFjdGlvbnMsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgdGhlc2Ugcm9sZXMgdG8gZGVmaW5lIHRoZSBwZXJtaXNzaW9ucyByZWxhdGVkIHRvIEVNUi4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvRU1SSW5zdGFuY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0VNUkluc3RhbmNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBTYWdlTWFrZXIgU3R1ZGlvIGNyZWF0ZXMgSUFNIHJvbGVzIGZvciBwcm9qZWN0cyB1c2VycyB0byBwZXJmb3JtIGRhdGEgYW5hbHl0aWNzLCBhcnRpZmljaWFsIGludGVsbGlnZW5jZSwgYW5kIG1hY2hpbmUgbGVhcm5pbmcgYWN0aW9ucywgYW5kIHVzZXMgdGhpcyBwb2xpY3kgd2hlbiBjcmVhdGluZyB0aGVzZSByb2xlcyB0byBkZWZpbmUgdGhlIHBlcm1pc3Npb25zIHJlbGF0ZWQgdG8gRU1SLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9FTVJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9FTVJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8gdmlhIHRoZSBBbWF6b24gU2FnZU1ha2VyIG1hbmFnZW1lbnQgY29uc29sZS4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFNhZ2VNYWtlciBTdHVkaW8gdXNlcyB0aGlzIHBvbGljeSB0byBwcm92aXNpb24gYW5kIG1hbmFnZSByZXNvdXJjZXMgaW4geW91ciBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9Qcm9qZWN0UHJvdmlzaW9uaW5nUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9Qcm9qZWN0UHJvdmlzaW9uaW5nUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBTYWdlTWFrZXIgU3R1ZGlvIGNyZWF0ZXMgSUFNIHJvbGVzIGZvciBwcm9qZWN0cyB1c2VycyB0byBwZXJmb3JtIGRhdGEgYW5hbHl0aWNzLCBhcnRpZmljaWFsIGludGVsbGlnZW5jZSwgYW5kIG1hY2hpbmUgbGVhcm5pbmcgYWN0aW9ucywgYW5kIHVzZXMgdGhpcyBwb2xpY3kgd2hlbiBjcmVhdGluZyB0aGVzZSByb2xlcyB0byBkZWZpbmUgdGhlIHBlcm1pc3Npb25zIHJlbGF0ZWQgdG8gU2FnZU1ha2VyLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9Qcm9qZWN0Um9sZU1hY2hpbmVMZWFybmluZ1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9Qcm9qZWN0Um9sZU1hY2hpbmVMZWFybmluZ1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBTYWdlTWFrZXIgY3JlYXRlcyBJQU0gcm9sZXMgZm9yIFByb2plY3RzIHVzZXJzIHRvIHBlcmZvcm0gZGF0YSBhbmFseXRpY3MsIGFydGlmaWNpYWwgaW50ZWxsaWdlbmNlLCBhbmQgbWFjaGluZSBsZWFybmluZyBhY3Rpb25zLCBhbmQgdXNlcyB0aGlzIHBvbGljeSB3aGVuIGNyZWF0aW5nIHRoZXNlIHJvbGVzIHRvIGRlZmluZSB0aGUgYm91bmRhcnkgb2YgdGhlaXIgcGVybWlzc2lvbnMuICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb1Byb2plY3RVc2VyUm9sZVBlcm1pc3Npb25zQm91bmRhcnkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvUHJvamVjdFVzZXJSb2xlUGVybWlzc2lvbnNCb3VuZGFyeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBTYWdlTWFrZXIgU3R1ZGlvIGNyZWF0ZXMgSUFNIHJvbGVzIGZvciBwcm9qZWN0cyB1c2VycyB0byBwZXJmb3JtIGRhdGEgYW5hbHl0aWNzLCBhcnRpZmljaWFsIGludGVsbGlnZW5jZSwgYW5kIG1hY2hpbmUgbGVhcm5pbmcgYWN0aW9ucywgYW5kIHVzZXMgdGhpcyBwb2xpY3kgd2hlbiBjcmVhdGluZyB0aGVzZSByb2xlcyB0byBkZWZpbmUgdGhlIHBlcm1pc3Npb25zLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9Qcm9qZWN0VXNlclJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvUHJvamVjdFVzZXJSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFNhZ2VNYWtlciBTdHVkaW8gdXNlcyB0aGlzIHBvbGljeSB3aGVuIHJ1bm5pbmcgcXVlcnkgZXhlY3V0aW9ucyBvbiBmZWRlcmF0ZWQgY29ubmVjdGlvbnMuICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb1F1ZXJ5RXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9RdWVyeUV4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBpbmRpdmlkdWFsIHNldHVwIHByaXZpbGVnZXMgZm9yIEFtYXpvbiBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8gdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuIEFsbG93cyBsYXVuY2hpbmcgb2YgU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvIFBvcnRhbC4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvVXNlcklBTUNvbnNvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvVXNlcklBTUNvbnNvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBFeGVjdXRpb24gcG9saWN5IGZvciB1c2luZyBJQU0gcm9sZXMgd2l0aCBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8uIEFsbG93cyB1c2VycyB0byBhY2Nlc3MgcmVzb3VyY2VzIGluIHRoZSBsb2NhbCBhY2NvdW50IChleGNsdWRpbmcgYWNjZXNzIHRvIGRhdGEgcmVzb3VyY2VzKSBmb3IgSUFNLWJhc2VkIHVzYWdlIG9mIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvVXNlcklBTURlZmF1bHRFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvVXNlcklBTURlZmF1bHRFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBFeGVjdXRpb24gcG9saWN5IGZvciB1c2luZyBJQU0gcm9sZXMgd2l0aCBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8uIEFsbG93cyB1c2VycyB0byBhY2Nlc3MgcmVzb3VyY2VzIGluIHlvdXIgYWNjb3VudCAoaW5jbHVkaW5nIGJyb2FkIGFjY2VzcyB0byBhbGwgQVBJcyBpbiBkYXRhIHNlcnZpY2VzIGxpa2UgUzMsIEdsdWUsIENsb3VkV2F0Y2ggTG9ncywgYW5kIG90aGVycykgZm9yIElBTS1iYXNlZCB1c2FnZSBvZiBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb1VzZXJJQU1QZXJtaXNzaXZlRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb1VzZXJJQU1QZXJtaXNzaXZlRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC93cml0ZSBhY2Nlc3MgdG8gQVdTIFNlY3JldHMgTWFuYWdlciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuIE5vdGU6IHRoaXMgZXhsdWRlcyBJQU0gYWN0aW9ucywgc28gY29tYmluZSB3aXRoIElBTUZ1bGxBY2Nlc3MgaWYgcm90YXRpb24gY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZC4gKi9cbiAgICBwdWJsaWMgU2VjcmV0c01hbmFnZXJSZWFkV3JpdGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VjcmV0c01hbmFnZXJSZWFkV3JpdGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgYXV0aGVudGljYXRlZCB1c2VycyB0byBhY2Nlc3MgdGhlIFNlY3VyaXR5IEFnZW50IFdlYiBBcHBsaWNhdGlvbiBmb3IgY29uZmlndXJpbmcgYW5kIGV4ZWN1dGluZyBhdXRvbWF0ZWQgc2VjdXJpdHkgcGVuZXRyYXRpb24gdGVzdHMuIFRoaXMgcG9saWN5IGVuYWJsZXMgdXNlcnMgdG8gbWFuYWdlIHBlbnRlc3RzLCB2aWV3IGZpbmRpbmdzLCBtb25pdG9yIHRlc3QgZXhlY3V0aW9uLCBhbmQgaW50ZXJhY3Qgd2l0aCBBV1MgcmVzb3VyY2VzIHJlcXVpcmVkIGZvciBzZWN1cml0eSB0ZXN0aW5nIG9wZXJhdGlvbnMuICovXG4gICAgcHVibGljIFNlY3VyaXR5QWdlbnRXZWJBcHBBUElQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VjdXJpdHlBZ2VudFdlYkFwcEFQSVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBhdXRoZW50aWNhdGVkIHVzZXJzIHRvIGFjY2VzcyB0aGUgU2VjdXJpdHkgQWdlbnQgV2ViIEFwcGxpY2F0aW9uIGZvciBjb25maWd1cmluZyBhbmQgZXhlY3V0aW5nIGF1dG9tYXRlZCBzZWN1cml0eSBwZW5ldHJhdGlvbiB0ZXN0cy4gVGhpcyBwb2xpY3kgZW5hYmxlcyB1c2VycyB0byBtYW5hZ2UgcGVudGVzdHMsIHZpZXcgZmluZGluZ3MsIG1vbml0b3IgdGVzdCBleGVjdXRpb24sIGFuZCBpbnRlcmFjdCB3aXRoIEFXUyByZXNvdXJjZXMgcmVxdWlyZWQgZm9yIHNlY3VyaXR5IHRlc3Rpbmcgb3BlcmF0aW9ucy4gKi9cbiAgICBwdWJsaWMgU2VjdXJpdHlBZ2VudFdlYkFwcFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZWN1cml0eUFnZW50V2ViQXBwUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIHNlY3VyaXR5IGF1ZGl0IHRlbXBsYXRlIGdyYW50cyBhY2Nlc3MgdG8gcmVhZCBzZWN1cml0eSBjb25maWd1cmF0aW9uIG1ldGFkYXRhLiBJdCBpcyB1c2VmdWwgZm9yIHNvZnR3YXJlIHRoYXQgYXVkaXRzIHRoZSBjb25maWd1cmF0aW9uIG9mIGFuIEFXUyBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBTZWN1cml0eUF1ZGl0KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNlY3VyaXR5QXVkaXQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gbWFuYWdlIHJlc291cmNlcyBjcmVhdGVkIGJ5IFNlY3VyaXR5IExha2UuICovXG4gICAgcHVibGljIFNlY3VyaXR5TGFrZVJlc291cmNlTWFuYWdlbWVudFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNlY3VyaXR5TGFrZVJlc291cmNlTWFuYWdlbWVudFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIG9wZXJhdGUgdGhlIEFtYXpvbiBTZWN1cml0eSBMYWtlIHNlcnZpY2Ugb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgU2VjdXJpdHlMYWtlU2VydmljZUxpbmtlZFJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VjdXJpdHlMYWtlU2VydmljZUxpbmtlZFJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyB0byBhbGxvdyB0aGUgQVdTIFNlcnZlciBNaWdyYXRpb24gQ29ubmVjdG9yIHRvIG1pZ3JhdGUgVk1zIHRvIEVDMi4gQWxsb3dzIGNvbW11bmljYXRpb24gd2l0aCB0aGUgQVdTIFNlcnZlciBNaWdyYXRpb24gU2VydmljZSwgcmVhZC93cml0ZSBhY2Nlc3MgdG8gUzMgYnVja2V0cyBzdGFydGluZyB3aXRoICdzbXMtYi0nIGFuZCAnaW1wb3J0LXRvLWVjMi0nIGFzIHdlbGwgYXMgdGhlIGJ1Y2tldHMgdXNlZCBmb3IgQVdTIFNlcnZlciBNaWdyYXRpb24gQ29ubmVjdG9yIHVwZ3JhZGUsIEFXUyBTZXJ2ZXIgTWlncmF0aW9uIENvbm5lY3RvciByZWdpc3RyYXRpb24gd2l0aCBBV1MsIGFuZCBtZXRyaWNzIHVwbG9hZCB0byBBV1MuICovXG4gICAgcHVibGljIFNlcnZlck1pZ3JhdGlvbkNvbm5lY3RvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZXJ2ZXJNaWdyYXRpb25Db25uZWN0b3IpO1xuICAgIH1cblxuICAgIC8qKiBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgYWxsIGZlYXR1cmVzIG9mIHRoZSBTZXJ2ZXIgTWlncmF0aW9uIFNlcnZpY2UgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBTZXJ2ZXJNaWdyYXRpb25TZXJ2aWNlQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VydmVyTWlncmF0aW9uU2VydmljZUNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgdG8gYWxsb3cgdGhlIEFXUyBTZXJ2ZXIgTWlncmF0aW9uIFNlcnZpY2UgdG8gY3JlYXRlIGFuZCB1cGRhdGUgcmVsZXZhbnQgQVdTIHJlc291cmNlcyBpbnRvIHRoZSBjdXN0b21lcidzIEFXUyBhY2NvdW50IGZvciBsYXVuY2hpbmcgbWlncmF0ZWQgc2VydmVycyBhbmQgYXBwbGljYXRpb25zLiAqL1xuICAgIHB1YmxpYyBTZXJ2ZXJNaWdyYXRpb25TZXJ2aWNlTGF1bmNoUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZXJ2ZXJNaWdyYXRpb25TZXJ2aWNlTGF1bmNoUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFBlcm1pc3Npb25zIHRvIGFsbG93IHRoZSBBV1MgU01TIHRvIHJ1biB1c2VkIGRhdGEgdmFsaWRhdGlvbiBzY3JpcHQgYW5kIHNlbmQgc2NyaXB0IHN1Y2Nlc3MvZmFpbHVyZSBiYWNrIHRvIFNNUyAqL1xuICAgIHB1YmxpYyBTZXJ2ZXJNaWdyYXRpb25TZXJ2aWNlUm9sZUZvckluc3RhbmNlVmFsaWRhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZXJ2ZXJNaWdyYXRpb25TZXJ2aWNlUm9sZUZvckluc3RhbmNlVmFsaWRhdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIFNlcnZpY2UgUXVvdGFzICovXG4gICAgcHVibGljIFNlcnZpY2VRdW90YXNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNlcnZpY2VRdW90YXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBTZXJ2aWNlIFF1b3RhcyAqL1xuICAgIHB1YmxpYyBTZXJ2aWNlUXVvdGFzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VydmljZVF1b3Rhc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFNlcnZpY2UgUXVvdGFzIHRvIGNyZWF0ZSBzdXBwb3J0IGNhc2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIFNlcnZpY2VRdW90YXNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZXJ2aWNlUXVvdGFzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgcHJvZ3JhbW1hdGljIGFjY2VzcyB0byBBV1MgdGhyb3VnaCB0aGUgQVdTIFNpZ24taW4gc2VydmljZSwgaW5jbHVkaW5nIE9BdXRoMiB0b2tlbiBjcmVhdGlvbiBmb3IgZGV2ZWxvcGVyIHRvb2xzIGFuZCBhcHBsaWNhdGlvbnMuICovXG4gICAgcHVibGljIFNpZ25JbkxvY2FsRGV2ZWxvcG1lbnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2lnbkluTG9jYWxEZXZlbG9wbWVudEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBTaW1wbGUgV29ya2Zsb3cgY29uZmlndXJhdGlvbiBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBTaW1wbGVXb3JrZmxvd0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2ltcGxlV29ya2Zsb3dGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFNNU1ZvaWNlIHRvIHB1Ymxpc2ggbWV0cmljcyB0byBDbG91ZFdhdGNoIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIFNNU1ZvaWNlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU01TVm9pY2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBzcGxpdCBjb3N0IGFsbG9jYXRpb24gZGF0YSB0byByZXRyaWV2ZSBBV1MgT3JnYW5pemF0aW9ucyBpbmZvcm1hdGlvbiwgaWYgYXBwbGljYWJsZSwgYW5kIGNvbGxlY3QgdGVsZW1ldHJ5IGRhdGEgZm9yIHRoZSBzcGxpdCBjb3N0IGFsbG9jYXRpb24gZGF0YSBzZXJ2aWNlcyB0aGF0IHRoZSBjdXN0b21lciBoYXMgb3B0ZWQgaW4gdG8uICovXG4gICAgcHVibGljIFNwbGl0Q29zdEFsbG9jYXRpb25EYXRhU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU3BsaXRDb3N0QWxsb2NhdGlvbkRhdGFTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyByZXF1aXJlZCB0byB1bmxvY2sgYSBTUVMgcXVldWUgcG9saWN5IHVzaW5nIHRoZSBTZWN1cml0eSBUb2tlbiBTZXJ2aWNlIChTVFMpIEFzc3VtZVJvb3QgQVBJLiBVc2UgdGhpcyBtYW5hZ2VkIHBvbGljeSBvbmx5IHdpdGggdGhlIFNUUyBBc3N1bWVSb290IGFjdGlvbi4gKi9cbiAgICBwdWJsaWMgU1FTVW5sb2NrUXVldWVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU1FTVW5sb2NrUXVldWVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBjaGVjayBRdWljayBTZXR1cCBjb25maWd1cmF0aW9uIGhlYWx0aCwgZW5zdXJlIGNvbnNpc3RlbnQgdXNlIG9mIHBhcmFtZXRlcnMgYW5kIHByb3Zpc2lvbmVkIHJlc291cmNlcywgYW5kIHJlbWVkaWF0ZSByZXNvdXJjZXMgd2hlbiBkcmlmdCBpcyBkZXRlY3RlZC4gKi9cbiAgICBwdWJsaWMgU1NNUXVpY2tTZXR1cFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU1NNUXVpY2tTZXR1cFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gdHJvdWJsZXNob290IGFuZCByZXNvbHZlIGlzc3VlcyBpbiBhbiBBV1MgYWNjb3VudC4gVGhpcyBwb2xpY3kgYWxzbyBlbmFibGVzIHRoZSB1c2VyIHRvIGNvbnRhY3QgQVdTIHN1cHBvcnQgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgY2FzZXMuICovXG4gICAgcHVibGljIFN1cHBvcnRVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlN1cHBvcnRVc2VyKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHBlcm1pc3Npb25zIG5lY2Vzc2FyeSBmb3IgcmVzb3VyY2VzIHJlcXVpcmVkIGZvciBhcHBsaWNhdGlvbiBhbmQgZGV2ZWxvcG1lbnQgb3BlcmF0aW9ucy4gKi9cbiAgICBwdWJsaWMgU3lzdGVtQWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TeXN0ZW1BZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFRyYW5zbGF0ZS4gKi9cbiAgICBwdWJsaWMgVHJhbnNsYXRlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5UcmFuc2xhdGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gVHJhbnNsYXRlLiAqL1xuICAgIHB1YmxpYyBUcmFuc2xhdGVSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5UcmFuc2xhdGVSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byB2aWV3IHJlc291cmNlcyBhbmQgYmFzaWMgbWV0YWRhdGEgYWNyb3NzIGFsbCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIFZpZXdPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlZpZXdPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBWTSBJbXBvcnQvRXhwb3J0IHNlcnZpY2Ugcm9sZSwgZm9yIGN1c3RvbWVycyB1c2luZyB0aGUgQVdTIENvbm5lY3Rvci4gVGhlIFZNIEltcG9ydC9FeHBvcnQgc2VydmljZSBhc3N1bWVzIGEgcm9sZSB3aXRoIHRoaXMgcG9saWN5IHRvIGZ1bGZpbGwgdmlydHVhbCBtYWNoaW5lIG1pZ3JhdGlvbiByZXF1ZXN0cyBmcm9tIHRoZSBBV1MgQ29ubmVjdG9yIHZpcnR1YWwgYXBwbGlhbmNlLiAoTm90ZSB0aGF0IHRoZSBBV1MgQ29ubmVjdG9yIHVzZXMgdGhlIFwiQVdTQ29ubmVjdG9yXCIgbWFuYWdlZCBwb2xpY3kgdG8gaXNzdWUgcmVxdWVzdHMgb24gdGhlIGN1c3RvbWVyJ3MgYmVoYWxmIHRvIHRoZSBWTSBJbXBvcnQvRXhwb3J0IHNlcnZpY2UuKSBQcm92aWRlcyB0aGUgYWJpbGl0eSB0byBjcmVhdGUgQU1JcyBhbmQgRUJTIHNuYXBzaG90cywgbW9kaWZ5IEVCUyBzbmFwc2hvdCBhdHRyaWJ1dGVzLCBtYWtlIFwiRGVzY3JpYmUqXCIgY2FsbHMgb24gRUMyIG9iamVjdHMsIGFuZCByZWFkIGZyb20gUzMgYnVja2V0cyBzdGFydGluZyB3aXRoICdpbXBvcnQtdG8tZWMyLScuICovXG4gICAgcHVibGljIFZNSW1wb3J0RXhwb3J0Um9sZUZvckFXU0Nvbm5lY3RvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5WTUltcG9ydEV4cG9ydFJvbGVGb3JBV1NDb25uZWN0b3IpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gVlBDIExhdHRpY2UgYW5kIGFjY2VzcyB0byBkZXBlbmRlbmN5IHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBWUENMYXR0aWNlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5WUENMYXR0aWNlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIFZQQyBMYXR0aWNlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSwgYW5kIGxpbWl0ZWQgYWNjZXNzIHRvIGRlcGVuZGVuY3kgc2VydmljZXMuICovXG4gICAgcHVibGljIFZQQ0xhdHRpY2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5WUENMYXR0aWNlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gaW52b2tpbmcgQW1hem9uIFZQQyBMYXR0aWNlIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBWUENMYXR0aWNlU2VydmljZXNJbnZva2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuVlBDTGF0dGljZVNlcnZpY2VzSW52b2tlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRpbmcgU0xSIHRvIHdyaXRlIGN1c3RvbWVyJ3MgbG9ncyB0byBhIGZpcmVob3NlIHN0cmVhbSAqL1xuICAgIHB1YmxpYyBXQUZMb2dnaW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuV0FGTG9nZ2luZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRpbmcgU0xSIHRvIHdyaXRlIGN1c3RvbWVyJ3MgbG9ncyB0byBhIGZpcmVob3NlIHN0cmVhbSAqL1xuICAgIHB1YmxpYyBXQUZSZWdpb25hbExvZ2dpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5XQUZSZWdpb25hbExvZ2dpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGNyZWF0ZXMgYSBzZXJ2aWNlLWxpbmtlZCByb2xlIHRoYXQgYWxsb3dzIEFXUyBXQUYgdG8gd3JpdGUgbG9ncyB0byBBbWF6b24gS2luZXNpcyBEYXRhIEZpcmVob3NlLiAqL1xuICAgIHB1YmxpYyBXQUZWMkxvZ2dpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5XQUZWMkxvZ2dpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB0aGUgQVdTIFdlbGwtQXJjaGl0ZWN0ZWQgQWdlbnQgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgcmVzb3VyY2UgY29uZmlndXJhdGlvbnMsIHNlY3VyaXR5IHNldHRpbmdzLCBhbmQgb3BlcmF0aW9uYWwgZGF0YSB0byBnZW5lcmF0ZSBvcHRpbWl6YXRpb24gcmVjb21tZW5kYXRpb25zICovXG4gICAgcHVibGljIFdlbGxBcmNoaXRlY3RlZEFnZW50UmVzb3VyY2VTY2FubmluZygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5XZWxsQXJjaGl0ZWN0ZWRBZ2VudFJlc291cmNlU2Nhbm5pbmcpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgV2VsbC1BcmNoaXRlY3RlZCBUb29sIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBXZWxsQXJjaGl0ZWN0ZWRDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5XZWxsQXJjaGl0ZWN0ZWRDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIFdlbGwtQXJjaGl0ZWN0ZWQgVG9vbCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgKi9cbiAgICBwdWJsaWMgV2VsbEFyY2hpdGVjdGVkQ29uc29sZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLldlbGxBcmNoaXRlY3RlZENvbnNvbGVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gV29ya0xpbmsgKi9cbiAgICBwdWJsaWMgV29ya0xpbmtTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Xb3JrTGlua1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG59XG4iXX0=
|
|
6316
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWlhbS1mbG95ZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1pYW0tZmxveWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXNDO0FBQ3RDLDJDQUF5RTtBQUV6RTs7Ozs7O0dBTUc7QUFDSCxNQUFhLGdCQUFpQixTQUFRLDRCQUFzQjtJQUN4RCx5REFBeUQ7SUFDbEQsK0JBQStCO1FBQ2xDLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsNEJBQXNCLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUNsSCxDQUFDO0lBRUQsNkVBQTZFO0lBQ3RFLHFDQUFxQztRQUN4QyxPQUFPLHFCQUFPLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDRCQUFzQixDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFDeEgsQ0FBQztJQUVELHlNQUF5TTtJQUNsTSwyQkFBMkI7UUFDOUIsT0FBTyxxQkFBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyw0QkFBc0IsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQzlHLENBQUM7SUFFRCwwREFBMEQ7SUFDbkQsbUJBQW1CO1FBQ3RCLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsNEJBQXNCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN0RyxDQUFDO0lBRUQscUlBQXFJO0lBQzlILDBCQUEwQjtRQUM3QixPQUFPLHFCQUFPLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDRCQUFzQixDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVELDJMQUEyTDtJQUNwTCxzQ0FBc0M7UUFDekMsT0FBTyxxQkFBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyw0QkFBc0IsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBQ3pILENBQUM7SUFFRCxpREFBaUQ7SUFDMUMsdUJBQXVCO1FBQzFCLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdC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LDhCQUE4QixDQUFDLENBQUM7SUFDakgsQ0FBQztJQUVELGlFQUFpRTtJQUMxRCwyQkFBMkI7UUFDOUIsT0FBTyxxQkFBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyw0QkFBc0IsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQzlHLENBQUM7SUFFRCxpRUFBaUU7SUFDMUQsbUNBQW1DO1FBQ3RDLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsNEJBQXNCLENBQUMsbUNBQW1DLENBQUMsQ0FBQztJQUN0SCxDQUFDO0lBRUQsbUhBQW1IO0lBQzVHLDZCQUE2QjtRQUNoQyxPQUFPLHFCQUFPLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDRCQUFzQixDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDaEgsQ0FBQztJQUVELDhLQUE4SztJQUN2SyxvQ0FBb0M7UUFDdkMsT0FBTyxxQkFBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyw0QkFBc0IsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0lBQ3ZILENBQUM7SUFFRCx1RkFBdUY7SUFDaEYsZ0NBQWdDO1FBQ25DLE9BQU8scUJBQU8sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsNEJBQXNCLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUNuSCxDQUFDO0lBRUQsNEZBQTRGO0lBQ3JGLG9DQUFvQztRQUN2QyxPQUFPLHFCQUFPLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDRCQUFzQixDQUFDLG9DQUFvQyxDQUFDLENBQUM7SUFDdkgsQ0FBQztJQUVELHNGQUFzRjtJQUMvRSx5QkFBeUI7UUFDNUIsT0FBTyxxQkFBTyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyw0QkFBc0IsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzVHLENBQUM7Q0FDSjtBQW5zUEQsNENBbXNQQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF3c19pYW0gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBBd3NNYW5hZ2VkUG9saWN5IGFzIEF3c01hbmFnZWRQb2xpY3lTdGF0aWMgfSBmcm9tICcuL2lhbS1mbG95ZCc7XG5cbi8qKlxuICogUHJvdmlkZXMgYWxsIEFXUyBtYW5hZ2VkIHBvbGljaWVzLlxuICpcbiAqIFRvIGdldCB0aGUgbmFtZSwgYWNjZXNzIHRoZSBzdGF0aWMgcHJvcGVydGllcyBvZiB0aGlzIGNsYXNzLCBlLmcuIGBBd3NNYW5hZ2VkUG9saWN5LlJlYWRPbmx5QWNjZXNzYC5cbiAqXG4gKiAgVG8gZ2V0IGFuIGBhd3NfaWFtLklNYW5hZ2VkUG9saWN5YCBvYmplY3QsIGNhbGwgdGhlIG1ldGhvZHMgb24gYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzLCBlLmcuIGBuZXcgQXdzTWFuYWdlZFBvbGljeSgpLlJlYWRPbmx5QWNjZXNzKClgLlxuICovXG5leHBvcnQgY2xhc3MgQXdzTWFuYWdlZFBvbGljeSBleHRlbmRzIEF3c01hbmFnZWRQb2xpY3lTdGF0aWMge1xuICAgIC8qKiBBbGxvdyBBY2Nlc3MgQW5hbHl6ZXIgdG8gYW5hbHl6ZSByZXNvdXJjZSBtZXRhZGF0YSAqL1xuICAgIHB1YmxpYyBBY2Nlc3NBbmFseXplclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFjY2Vzc0FuYWx5emVyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgYWNjb3VudCBhY2Nlc3MgbWFuYWdlciBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgQVdTIGFjY291bnQgYWNjZXNzICovXG4gICAgcHVibGljIEFjY291bnRBY2Nlc3NNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQWNjb3VudEFjY2Vzc01hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEZvciB1c2Ugd2l0aCBhY2NvdW50cyBjcmVhdGVkIHRocm91Z2ggdGhlIFZlcmNlbCBNYXJrZXRwbGFjZSBpbnRlZ3JhdGlvbiB3aXRoIEFXUy4gUHJvdmlkZXMgYWNjZXNzIHRvIGFjY291bnQgbWFuYWdlbWVudCwgbm90aWZpY2F0aW9uLCBjb3N0IGFuZCB1c2FnZSBhbmFseXNpcywgYW5kIGlkZW50aXR5IHByb3ZpZGVyIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIEFjY291bnRNYW5hZ2VtZW50RnJvbVZlcmNlbCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BY2NvdW50TWFuYWdlbWVudEZyb21WZXJjZWwpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1Mgc2VydmljZXMgYW5kIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQWRtaW5pc3RyYXRvckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BZG1pbmlzdHJhdG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGFjY291bnQgYWRtaW5pc3RyYXRpdmUgcGVybWlzc2lvbnMgd2hpbGUgZXhwbGljaXRseSBhbGxvd2luZyBkaXJlY3QgYWNjZXNzIHRvIHJlc291cmNlcyBuZWVkZWQgYnkgQW1wbGlmeSBhcHBsaWNhdGlvbnMuICovXG4gICAgcHVibGljIEFkbWluaXN0cmF0b3JBY2Nlc3NBbXBsaWZ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFkbWluaXN0cmF0b3JBY2Nlc3NBbXBsaWZ5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGFjY291bnQgYWRtaW5pc3RyYXRpdmUgcGVybWlzc2lvbnMuIEV4cGxpY2l0bHkgYWxsb3dzIGRldmVsb3BlcnMgYW5kIGFkbWluaXN0cmF0b3JzIHRvIGdhaW4gZGlyZWN0IGFjY2VzcyB0byByZXNvdXJjZXMgdGhleSBuZWVkIHRvIG1hbmFnZSBBV1MgRWxhc3RpYyBCZWFuc3RhbGsgYXBwbGljYXRpb25zICovXG4gICAgcHVibGljIEFkbWluaXN0cmF0b3JBY2Nlc3NBV1NFbGFzdGljQmVhbnN0YWxrKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFkbWluaXN0cmF0b3JBY2Nlc3NBV1NFbGFzdGljQmVhbnN0YWxrKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEFnZW50IFJlZ2lzdHJ5ICovXG4gICAgcHVibGljIEFnZW50UmVnaXN0cnlGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFnZW50UmVnaXN0cnlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBSZWFkT25seSBhY2Nlc3MgdG8gQVdTIEFnZW50IFJlZ2lzdHJ5ICovXG4gICAgcHVibGljIEFnZW50UmVnaXN0cnlSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BZ2VudFJlZ2lzdHJ5UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyByZXF1aXJlZCBieSB0aGUgQVdTIERldk9wcyBBZ2VudCB0byBjb25kdWN0IGludmVzdGlnYXRpb25zIGFuZCBwZXJmb3JtIGFuYWx5c2lzIG9uIGN1c3RvbWVyIEFXUyByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFJRGV2T3BzQWdlbnRBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQUlEZXZPcHNBZ2VudEFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGVsZXZhdGVkIHBlcm1pc3Npb25zIHJlcXVpcmVkIGJ5IHRoZSBBV1MgRGV2T3BzIEFnZW50IHRvIHBlcmZvcm0gb3BlcmF0b3ItYXBwcm92ZWQgbXV0YXRpb25zIG9yIGVsZXZhdGVkIGFjdGlvbnMgb24gY3VzdG9tZXIgQVdTIHJlc291cmNlcyBkdXJpbmcgb3BlcmF0aW9uYWwgZXZlbnRzLiAqL1xuICAgIHB1YmxpYyBBSURldk9wc0FnZW50QWN0aW9uc1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BSURldk9wc0FnZW50QWN0aW9uc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBEZXZPcHMgQWdlbnQgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlICovXG4gICAgcHVibGljIEFJRGV2T3BzQWdlbnRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFJRGV2T3BzQWdlbnRGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRGV2T3BzIEFnZW50IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBBSURldk9wc0FnZW50UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQUlEZXZPcHNBZ2VudFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBhY2Nlc3MgdG8gY2hhdCBhbmQgbWFuYWdlIGludmVzdGlnYXRpb25zIHRocm91Z2ggQVdTIERldk9wcyBBZ2VudCBmb3IgeW91ciBBZ2VudFNwYWNlcyAqL1xuICAgIHB1YmxpYyBBSURldk9wc0NoYW5uZWxBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQUlEZXZPcHNDaGFubmVsQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEFXUyBEZXZPcHMgQWdlbnQgdG8gY29vcmRpbmF0ZSB3aXRoIEFnZW50U3BhY2VzIGNvbm5lY3RlZCB0aHJvdWdoIEFnZW50IFNwYWNlIENvbnN0ZWxsYXRpb24uICovXG4gICAgcHVibGljIEFJRGV2T3BzQ29uc3RlbGxhdGlvbkFjY2Vzc1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BSURldk9wc0NvbnN0ZWxsYXRpb25BY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gdXNlIHRoZSBBV1MgRGV2T3BzIG9wZXJhdG9yIHdlYiBhcHAgZm9yIGFuIEFnZW50IFNwYWNlLiAqL1xuICAgIHB1YmxpYyBBSURldk9wc09wZXJhdG9yQXBwQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFJRGV2T3BzT3BlcmF0b3JBcHBBY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgQVdTIERldk9wcyBBZ2VudCB0byBjcmVhdGUgYW5kIG1hbmFnZSBuZXR3b3JrIGludGVyZmFjZXMgaW4geW91ciBWUEMgc28gdGhhdCByZWxlYXNlIG1hbmFnZW1lbnQgYWdlbnRzIGNhbiBhY2Nlc3MgcHJpdmF0ZSByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQUlEZXZPcHNSZWxlYXNlTWFuYWdlbWVudFZQQ1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BSURldk9wc1JlbGVhc2VNYW5hZ2VtZW50VlBDUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEFtYXpvbiBBSSBPcGVyYXRpb25zIEFzc2lzdGFudCB0byBnZW5lcmF0ZSBpbmNpZGVudCByZXBvcnQgb2YgdGhlIGludmVzdGlnYXRpb24uICovXG4gICAgcHVibGljIEFJT3BzQXNzaXN0YW50SW5jaWRlbnRSZXBvcnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQUlPcHNBc3Npc3RhbnRJbmNpZGVudFJlcG9ydFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIFJlYWRPbmx5IHBlcm1pc3Npb25zIHJlcXVpcmVkIGJ5IHRoZSBBbWF6b24gQUkgT3BlcmF0aW9ucyBBc3Npc3RhbnQgdG8gZG8gYW5hbHlzaXMgb24gY3VzdG9tZXIgQVdTIHJlc291cmNlcyBkdXJpbmcgaW52ZXN0aWdhdGlvbnMuICovXG4gICAgcHVibGljIEFJT3BzQXNzaXN0YW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFJT3BzQXNzaXN0YW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBBSSBPcGVyYXRpb25zIHNlcnZpY2UgYW5kIGl0cyByZXF1aXJlZCBwZXJtaXNzaW9ucyB2aWEgQVdTIGNvbnNvbGUuIEl0IGFsc28gaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gdXNlIGlkZW50aXR5LWF3YXJlIGNvbnNvbGUgc2Vzc2lvbnMuICovXG4gICAgcHVibGljIEFJT3BzQ29uc29sZUFkbWluUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFJT3BzQ29uc29sZUFkbWluUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGFjY2VzcyB0byB0aGUgQW1hem9uIEFJIE9wZXJhdGlvbnMgQVBJcyBmb3IgY3JlYXRpbmcsIHVwZGF0aW5nLCBhbmQgZGVsZXRpbmcgaW52ZXN0aWdhdGlvbnMsIGludmVzdGlnYXRpb24gZXZlbnRzLCBhbmQgaW52ZXN0aWdhdGlvbiByZXNvdXJjZXMuIEl0IGFsc28gaW5jbHVkZXMgUmVhZE9ubHkgYWNjZXNzIHRvIGFsbCBBSSBPcGVyYXRpb25zIEFQSXMgYW5kIHRvIHVzZSBpZGVudGl0eS1hd2FyZSBzZXNzaW9ucy4gKi9cbiAgICBwdWJsaWMgQUlPcHNPcGVyYXRvckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BSU9wc09wZXJhdG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIFJlYWRPbmx5IHBlcm1pc3Npb25zIHRvIHRoZSBBbWF6b24gQUkgT3BlcmF0aW9ucyBzZXJ2aWNlIGFuZCBpdHMgcmVxdWlyZWQgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBSU9wc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFJT3BzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIGRldmljZSBzZXR1cCBhY2Nlc3MgdG8gQWxleGFGb3JCdXNpbmVzcyBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBbGV4YUZvckJ1c2luZXNzRGV2aWNlU2V0dXAoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQWxleGFGb3JCdXNpbmVzc0RldmljZVNldHVwKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFsZXhhRm9yQnVzaW5lc3MgcmVzb3VyY2VzIGFuZCBhY2Nlc3MgdG8gcmVsYXRlZCBBV1MgU2VydmljZXMgKi9cbiAgICBwdWJsaWMgQWxleGFGb3JCdXNpbmVzc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQWxleGFGb3JCdXNpbmVzc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIGdhdGV3YXkgZXhlY3V0aW9uIGFjY2VzcyB0byBBbGV4YUZvckJ1c2luZXNzIHNlcnZpY2VzICovXG4gICAgcHVibGljIEFsZXhhRm9yQnVzaW5lc3NHYXRld2F5RXhlY3V0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFsZXhhRm9yQnVzaW5lc3NHYXRld2F5RXhlY3V0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBhY2Nlc3MgdG8gTGlmZXNpemUgQVZTIGRldmljZXMgKi9cbiAgICBwdWJsaWMgQWxleGFGb3JCdXNpbmVzc0xpZmVzaXplRGVsZWdhdGVkQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFsZXhhRm9yQnVzaW5lc3NMaWZlc2l6ZURlbGVnYXRlZEFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGVuYWJsZXMgQWxleGEgZm9yIEJ1c2luZXNzIHRvIHBlcmZvcm0gYXV0b21hdGVkIHRhc2tzIHNjaGVkdWxlZCBieSB5b3VyIG5ldHdvcmsgcHJvZmlsZXMuICovXG4gICAgcHVibGljIEFsZXhhRm9yQnVzaW5lc3NOZXR3b3JrUHJvZmlsZVNlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQWxleGFGb3JCdXNpbmVzc05ldHdvcmtQcm9maWxlU2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgYWNjZXNzIHRvIFBvbHkgQVZTIGRldmljZXMgKi9cbiAgICBwdWJsaWMgQWxleGFGb3JCdXNpbmVzc1BvbHlEZWxlZ2F0ZWRBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQWxleGFGb3JCdXNpbmVzc1BvbHlEZWxlZ2F0ZWRBY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHJlYWQgb25seSBhY2Nlc3MgdG8gQWxleGFGb3JCdXNpbmVzcyBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBbGV4YUZvckJ1c2luZXNzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQWxleGFGb3JCdXNpbmVzc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gY3JlYXRlL2VkaXQvZGVsZXRlIEFQSXMgaW4gQW1hem9uIEFQSSBHYXRld2F5IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQVBJR2F0ZXdheUFkbWluaXN0cmF0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQVBJR2F0ZXdheUFkbWluaXN0cmF0b3IpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBpbnZva2UgQVBJcyBpbiBBbWF6b24gQVBJIEdhdGV3YXkuICovXG4gICAgcHVibGljIEFtYXpvbkFQSUdhdGV3YXlJbnZva2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFQSUdhdGV3YXlJbnZva2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFQSSBHYXRld2F5IHRvIHB1c2ggbG9ncyB0byB1c2VyJ3MgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uQVBJR2F0ZXdheVB1c2hUb0Nsb3VkV2F0Y2hMb2dzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFQSUdhdGV3YXlQdXNoVG9DbG91ZFdhdGNoTG9ncyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBBcHBGbG93IGFuZCBhY2Nlc3MgdG8gQVdTIHNlcnZpY2VzIHN1cHBvcnRlZCBhcyBmbG93IHNvdXJjZSBvciBkZXN0aW5hdGlvbiAoUzMgYW5kIFJlZHNoaWZ0KS4gQWxzbyBwcm92aWRlcyBhY2Nlc3MgdG8gS01TIGZvciBlbmNyeXB0aW9uICovXG4gICAgcHVibGljIEFtYXpvbkFwcEZsb3dGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkFwcEZsb3dGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQXBwZmxvdyBmbG93cyAqL1xuICAgIHB1YmxpYyBBbWF6b25BcHBGbG93UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXBwRmxvd1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIEFSQyBSZWdpb24gc3dpdGNoIGZvciBwbGFuIGV4ZWN1dGlvbiBhbmQgcGxhbiBldmFsdWF0aW9uLiAqL1xuICAgIHB1YmxpYyBBbWF6b25BcHBsaWNhdGlvblJlY292ZXJ5Q29udHJvbGxlclJlZ2lvblN3aXRjaFBsYW5FeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXBwbGljYXRpb25SZWNvdmVyeUNvbnRyb2xsZXJSZWdpb25Td2l0Y2hQbGFuRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEFwcFN0cmVhbSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkFwcFN0cmVhbUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXBwU3RyZWFtRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBBcHBTdHJlYW0gMi4wIGFjY2VzcyB0byBBV1MgQ2VydGlmaWNhdGUgTWFuYWdlciBQcml2YXRlIENBIGluIGN1c3RvbWVyIGFjY291bnRzIGZvciBjZXJ0aWZpY2F0ZS1iYXNlZCBhdXRoZW50aWNhdGlvbiAqL1xuICAgIHB1YmxpYyBBbWF6b25BcHBTdHJlYW1QQ0FBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXBwU3RyZWFtUENBQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQXBwU3RyZWFtIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQXBwU3RyZWFtUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXBwU3RyZWFtUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgQW1hem9uIEFwcFN0cmVhbSBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkFwcFN0cmVhbVNlcnZpY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXBwU3RyZWFtU2VydmljZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEF0aGVuYSBhbmQgc2NvcGVkIGFjY2VzcyB0byB0aGUgZGVwZW5kZW5jaWVzIG5lZWRlZCB0byBlbmFibGUgcXVlcnlpbmcsIHdyaXRpbmcgcmVzdWx0cywgYW5kIGRhdGEgbWFuYWdlbWVudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uQXRoZW5hRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25BdGhlbmFGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFjY2VzcyB0byBvdGhlciBBV1Mgc2VydmljZSByZXNvdXJjZXMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gcnVuIEFtYXpvbiBBdGhlbmEgKi9cbiAgICBwdWJsaWMgQW1hem9uQXRoZW5hU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXRoZW5hU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gcGVyZm9ybSBhbGwgb3BlcmF0aW9ucyBBbWF6b24gQXVnbWVudGVkIEFJIHJlc291cmNlcywgaW5jbHVkaW5nIEZsb3dEZWZpbml0aW9ucywgSHVtYW5UYXNrVWlzIGFuZCBIdW1hbkxvb3BzLiBEb2VzIG5vdCBhbGxvdyBhY2Nlc3MgZm9yIGNyZWF0aW5nIEZsb3dEZWZpbml0aW9ucyBhZ2FpbnN0IHRoZSBwdWJsaWMtY3Jvd2QgV29ya3RlYW0uICovXG4gICAgcHVibGljIEFtYXpvbkF1Z21lbnRlZEFJRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25BdWdtZW50ZWRBSUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gcGVyZm9ybSBhbGwgb3BlcmF0aW9ucyBvbiBIdW1hbkxvb3BzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25BdWdtZW50ZWRBSUh1bWFuTG9vcEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXVnbWVudGVkQUlIdW1hbkxvb3BGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHBlcmZvcm0gYWxsIG9wZXJhdGlvbnMgQW1hem9uIEF1Z21lbnRlZCBBSSByZXNvdXJjZXMsIGluY2x1ZGluZyBGbG93RGVmaW5pdGlvbnMsIEh1bWFuVGFza1VpcyBhbmQgSHVtYW5Mb29wcy4gQWxzbyBwcm92aWRlcyBhY2Nlc3MgdG8gdGhvc2Ugb3BlcmF0aW9ucyBvZiBzZXJ2aWNlcyB0aGF0IGFyZSBpbnRlZ3JhdGVkIHdpdGggQW1hem9uIEF1Z21lbnRlZCBBSS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQXVnbWVudGVkQUlJbnRlZ3JhdGVkQVBJQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkF1Z21lbnRlZEFJSW50ZWdyYXRlZEFQSUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGNvbnNvbGUgZnVsbCBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgdG8gQXVyb3JhIERTUUwgKi9cbiAgICBwdWJsaWMgQW1hem9uQXVyb3JhRFNRTENvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkF1cm9yYURTUUxDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEF1cm9yYSBEU1FMICovXG4gICAgcHVibGljIEFtYXpvbkF1cm9yYURTUUxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkF1cm9yYURTUUxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBdXJvcmEgRFNRTCAqL1xuICAgIHB1YmxpYyBBbWF6b25BdXJvcmFEU1FMUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQXVyb3JhRFNRTFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQmVkcm9jayBNb2RlbCBpbmZlcmVuY2UgcGVybWlzc2lvbiB0byBCZWRyb2NrIGFnZW50IGNvcmUgbWVtb3J5ICovXG4gICAgcHVibGljIEFtYXpvbkJlZHJvY2tBZ2VudENvcmVNZW1vcnlCZWRyb2NrTW9kZWxJbmZlcmVuY2VFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJlZHJvY2tBZ2VudENvcmVNZW1vcnlCZWRyb2NrTW9kZWxJbmZlcmVuY2VFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEJlZHJvY2sgV2ViIFNlYXJjaCwgaW5jbHVkaW5nIHJldHJpZXZhbCBvZiBjb250ZW50IGZyb20gZXh0ZXJuYWwgd2Vic2l0ZXMgb3V0c2lkZSB0aGUgQVdTIG5ldHdvcmsgYm91bmRhcnkuICovXG4gICAgcHVibGljIEFtYXpvbkJlZHJvY2tFeHRlcm5hbFdlYlNlYXJjaEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQmVkcm9ja0V4dGVybmFsV2ViU2VhcmNoRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIEJlZHJvY2sgV2ViIFNlYXJjaCwgaW5jbHVkaW5nIHJldHJpZXZhbCBvZiBjb250ZW50IGZyb20gZXh0ZXJuYWwgd2Vic2l0ZXMgb3V0c2lkZSB0aGUgQVdTIG5ldHdvcmsgYm91bmRhcnkuICovXG4gICAgcHVibGljIEFtYXpvbkJlZHJvY2tFeHRlcm5hbFdlYlNlYXJjaFJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJlZHJvY2tFeHRlcm5hbFdlYlNlYXJjaFJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEJlZHJvY2sgYXMgd2VsbCBhcyBsaW1pdGVkIGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIHRoYXQgYXJlIHJlcXVpcmVkIGJ5IGl0ICovXG4gICAgcHVibGljIEFtYXpvbkJlZHJvY2tGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJlZHJvY2tGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbGltaXRlZCBhY2Nlc3MgdG8gQW1hem9uIEJlZHJvY2sgYXMgd2VsbCBhcyB0byByZWxhdGVkIHNlcnZpY2VzIHRoYXQgYXJlIHJlcXVpcmVkIGJ5IGl0ICovXG4gICAgcHVibGljIEFtYXpvbkJlZHJvY2tMaW1pdGVkQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJlZHJvY2tMaW1pdGVkQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEJlZHJvY2sgTWFudGxlIGFzIHdlbGwgYXMgbGltaXRlZCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyB0aGF0IGFyZSByZXF1aXJlZCBieSBpdCAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrTWFudGxlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrTWFudGxlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgYW5kIGluZmVyZW5jZSBjcmVhdGlvbiBhY2Nlc3MgdG8gQW1hem9uIEJlZHJvY2sgTWFudGxlICovXG4gICAgcHVibGljIEFtYXpvbkJlZHJvY2tNYW50bGVJbmZlcmVuY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQmVkcm9ja01hbnRsZUluZmVyZW5jZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEJlZHJvY2sgTWFudGxlICovXG4gICAgcHVibGljIEFtYXpvbkJlZHJvY2tNYW50bGVSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrTWFudGxlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBsaW1pdGVkIGFjY2VzcyB0byBBbWF6b24gQmVkcm9jayBNYXJrZXRwbGFjZSBhcyB3ZWxsIGFzIHRvIHJlbGF0ZWQgc2VydmljZXMgdGhhdCBhcmUgcmVxdWlyZWQgYnkgaXQgKi9cbiAgICBwdWJsaWMgQW1hem9uQmVkcm9ja01hcmtldHBsYWNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJlZHJvY2tNYXJrZXRwbGFjZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEJlZHJvY2sgKi9cbiAgICBwdWJsaWMgQW1hem9uQmVkcm9ja1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJlZHJvY2tSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIERlZmluZXMgdGhlIG1heGltdW0gcGVybWlzc2lvbnMgb2YgSUFNIHJvbGVzIHRoYXQgQW1hem9uIEJlZHJvY2sgU3R1ZGlvIGNyZWF0ZXMgZm9yIG9wZXJhdGluZyBBbWF6b24gQmVkcm9jayBTdHVkaW8gcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrU3R1ZGlvUGVybWlzc2lvbnNCb3VuZGFyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrU3R1ZGlvUGVybWlzc2lvbnNCb3VuZGFyeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBCZWRyb2NrIFdlYiBTZWFyY2guIERhdGEgcmVtYWlucyB3aXRoaW4gdGhlIEFXUyBuZXR3b3JrIGJvdW5kYXJ5LiAqL1xuICAgIHB1YmxpYyBBbWF6b25CZWRyb2NrV2ViU2VhcmNoRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrV2ViU2VhcmNoRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIEJlZHJvY2sgV2ViIFNlYXJjaC4gRGF0YSByZW1haW5zIHdpdGhpbiB0aGUgQVdTIG5ldHdvcmsgYm91bmRhcnkuICovXG4gICAgcHVibGljIEFtYXpvbkJlZHJvY2tXZWJTZWFyY2hSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CZWRyb2NrV2ViU2VhcmNoUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgZnVsbCBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgdG8gQW1hem9uIEJpbyBEaXNjb3ZlcnkgKi9cbiAgICBwdWJsaWMgQW1hem9uQmlvRGlzY292ZXJ5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CaW9EaXNjb3ZlcnlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWN0aW9ucyB3aXRoaW4gdGhlIEFtYXpvbiBCaW8gRGlzY292ZXJ5IGFwcGxpY2F0aW9ucyAqL1xuICAgIHB1YmxpYyBBbWF6b25CaW9EaXNjb3ZlcnlJbkFwcEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQmlvRGlzY292ZXJ5SW5BcHBGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEJyYWtldCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gQWxzbyBwcm92aWRlcyBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyAoZS5nLiwgUzMsIGxvZ3MpLiAqL1xuICAgIHB1YmxpYyBBbWF6b25CcmFrZXRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkJyYWtldEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgcmVzb3VyY2VzIG5lY2Vzc2FyeSBmb3IgZXhlY3V0aW5nIGFuIEFtYXpvbiBCcmFrZXQgSm9iIGluY2x1ZGluZyBTMywgQ2xvdWR3YXRjaCwgSUFNIGFuZCBCcmFrZXQgKi9cbiAgICBwdWJsaWMgQW1hem9uQnJha2V0Sm9ic0V4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CcmFrZXRKb2JzRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBCcmFrZXQgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBbWF6b25CcmFrZXRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25CcmFrZXRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBDaGltZSBBZG1pbiBDb25zb2xlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ2hpbWVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNoaW1lRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIENoaW1lIEFkbWluIENvbnNvbGUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25DaGltZVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNoaW1lUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQW1hem9uIENoaW1lIFNESyBvcGVyYXRpb25zICovXG4gICAgcHVibGljIEFtYXpvbkNoaW1lU0RLKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNoaW1lU0RLKTtcbiAgICB9XG5cbiAgICAvKiogTWFuYWdlZCBQb2xpY3kgRm9yIEFtYXpvbiBDaGltZSBTREsgTWVkaWFQaXBlbGluZXMgU2VydmljZSBMaW5rZWQgUm9sZSAqL1xuICAgIHB1YmxpYyBBbWF6b25DaGltZVNES01lZGlhUGlwZWxpbmVzU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2hpbWVTREtNZWRpYVBpcGVsaW5lc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBDaGltZSBTREsgTWVzc2FnaW5nIHRvIGFjY2VzcyBBV1MgcmVzb3VyY2VzIGFuZCBlbmFibGUgbWVzc2FnaW5nIGZ1bmN0aW9uYWxpdHkgKi9cbiAgICBwdWJsaWMgQW1hem9uQ2hpbWVTREtNZXNzYWdpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DaGltZVNES01lc3NhZ2luZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIENoaW1lICovXG4gICAgcHVibGljIEFtYXpvbkNoaW1lU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2hpbWVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gQ2hpbWUgdG8gYWNjZXNzIEFtYXpvbiBUcmFuc2NyaWJlIGFuZCBBbWF6b24gVHJhbnNjcmliZSBNZWRpY2FsIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFtYXpvbkNoaW1lVHJhbnNjcmlwdGlvblNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNoaW1lVHJhbnNjcmlwdGlvblNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdXNlciBtYW5hZ2VtZW50IGFjY2VzcyB0byBBbWF6b24gQ2hpbWUgQWRtaW4gQ29uc29sZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkNoaW1lVXNlck1hbmFnZW1lbnQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2hpbWVVc2VyTWFuYWdlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqIE1hbmFnZWQgcG9saWN5IGZvciBTZXJ2aWNlIExpbmtlZCBSb2xlIGZvciBBbWF6b24gQ2hpbWUgVm9pY2VDb25uZWN0b3IgKi9cbiAgICBwdWJsaWMgQW1hem9uQ2hpbWVWb2ljZUNvbm5lY3RvclNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNoaW1lVm9pY2VDb25uZWN0b3JTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBDbG91ZCBEaXJlY3RvcnkgU2VydmljZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ2xvdWREaXJlY3RvcnlGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNsb3VkRGlyZWN0b3J5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIENsb3VkIERpcmVjdG9yeSBTZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25DbG91ZERpcmVjdG9yeVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNsb3VkRGlyZWN0b3J5UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBDbG91ZFdhdGNoIEV2aWRlbnRseS4gQWxzbyBwcm92aWRlcyBhY2Nlc3MgdG8gcmVsYXRlZCBBbWF6b24gUzMsIEFtYXpvbiBTTlMsIEFtYXpvbiBDbG91ZFdhdGNoLCBhbmQgb3RoZXIgcmVsYXRlZCBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ2xvdWRXYXRjaEV2aWRlbnRseUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2xvdWRXYXRjaEV2aWRlbnRseUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBDbG91ZFdhdGNoIEV2aWRlbnRseSAqL1xuICAgIHB1YmxpYyBBbWF6b25DbG91ZFdhdGNoRXZpZGVudGx5UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2xvdWRXYXRjaEV2aWRlbnRseVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENsb3VkV2F0Y2ggRXZpZGVudGx5IFNlcnZpY2UgdG8gbWFuYWdlIGFzc29jaWF0ZWQgQVdTIFJlc291cmNlcyBvbiBiZWhhbGYgb2YgdGhlIGN1c3RvbWVyICovXG4gICAgcHVibGljIEFtYXpvbkNsb3VkV2F0Y2hFdmlkZW50bHlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DbG91ZFdhdGNoRXZpZGVudGx5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgcGVybWlzc2lvbnMgZm9yIHRoZSBBbWF6b24gQ2xvdWRXYXRjaCBSVU0gc2VydmljZSAqL1xuICAgIHB1YmxpYyBBbWF6b25DbG91ZFdhdGNoUlVNRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DbG91ZFdhdGNoUlVNRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyByZWFkIG9ubHkgcGVybWlzc2lvbnMgZm9yIHRoZSBBbWF6b24gQ2xvdWRXYXRjaCBSVU0gc2VydmljZSAqL1xuICAgIHB1YmxpYyBBbWF6b25DbG91ZFdhdGNoUlVNUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ2xvdWRXYXRjaFJVTVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb24gdG8gQW1hem9uIENsb3VkV2F0Y2ggUlVNIFNlcnZpY2UgdG8gcHVibGlzaCBtb25pdG9yaW5nIGRhdGEgdG8gb3RoZXIgcmVsZXZhbnQgQVdTIHNlcnZpY2VzICovXG4gICAgcHVibGljIEFtYXpvbkNsb3VkV2F0Y2hSVU1TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25DbG91ZFdhdGNoUlVNU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQ29kZUNhdGFseXN0ICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVDYXRhbHlzdEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29kZUNhdGFseXN0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIENvZGVDYXRhbHlzdCAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2RlQ2F0YWx5c3RSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2RlQ2F0YWx5c3RSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gQ29kZUNhdGFseXN0IHRvIGNyZWF0ZSwgdXBkYXRlLCBhbmQgcmVzb2x2ZSBBV1MgU3VwcG9ydCBjYXNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29kZUNhdGFseXN0U3VwcG9ydEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2RlQ2F0YWx5c3RTdXBwb3J0QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHJlcXVpcmVkIGJ5IEFtYXpvbiBDb2RlR3VydSBQcm9maWxlciBhZ2VudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29kZUd1cnVQcm9maWxlckFnZW50QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZGVHdXJ1UHJvZmlsZXJBZ2VudEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBDb2RlR3VydSBQcm9maWxlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29kZUd1cnVQcm9maWxlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29kZUd1cnVQcm9maWxlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBDb2RlR3VydSBQcm9maWxlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29kZUd1cnVQcm9maWxlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZGVHdXJ1UHJvZmlsZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQ29kZUd1cnUgUmV2aWV3ZXIgYW5kIHNjb3BlZCBhY2Nlc3MgdG8gcmVxdWlyZWQgZGVwZW5kZW5jaWVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2RlR3VydVJldmlld2VyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2RlR3VydVJldmlld2VyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIENvZGVHdXJ1IFJldmlld2VyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2RlR3VydVJldmlld2VyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29kZUd1cnVSZXZpZXdlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQSBzZXJ2aWNlLWxpbmtlZCByb2xlIHJlcXVpcmVkIGZvciBBbWF6b24gQ29kZUd1cnUgUmV2aWV3ZXIgdG8gYWNjZXNzIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29kZUd1cnVSZXZpZXdlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZGVHdXJ1UmV2aWV3ZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBDb2RlR3VydSBTZWN1cml0eS4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29kZUd1cnVTZWN1cml0eUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29kZUd1cnVTZWN1cml0eUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgcmVxdWlyZWQgZm9yIHdvcmtpbmcgd2l0aCBBbWF6b24gQ29kZUd1cnUgU2VjdXJpdHkgc2NhbnMuICovXG4gICAgcHVibGljIEFtYXpvbkNvZGVHdXJ1U2VjdXJpdHlTY2FuQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZGVHdXJ1U2VjdXJpdHlTY2FuQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFtYXpvbiBDb2duaXRvIEFQSXMgdG8gc3VwcG9ydCBkZXZlbG9wZXIgYXV0aGVudGljYXRlZCBpZGVudGl0aWVzIGZyb20geW91ciBhdXRoZW50aWNhdGlvbiBiYWNrZW5kLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2duaXRvRGV2ZWxvcGVyQXV0aGVudGljYXRlZElkZW50aXRpZXMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29nbml0b0RldmVsb3BlckF1dGhlbnRpY2F0ZWRJZGVudGl0aWVzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBDb2duaXRvIFVzZXIgUG9vbHMgc2VydmljZSB0byB1c2UgeW91ciBTRVMgaWRlbnRpdGllcyBmb3IgZW1haWwgc2VuZGluZyAqL1xuICAgIHB1YmxpYyBBbWF6b25Db2duaXRvSWRwRW1haWxTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2duaXRvSWRwRW1haWxTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gQ29nbml0byBVc2VyIFBvb2xzICovXG4gICAgcHVibGljIEFtYXpvbkNvZ25pdG9JZHBTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2duaXRvSWRwU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgdG8gZXhpc3RpbmcgQW1hem9uIENvZ25pdG8gcmVzb3VyY2VzLiBZb3Ugd2lsbCBuZWVkIEFXUyBhY2NvdW50IGFkbWluIHByaXZpbGVnZXMgdG8gY3JlYXRlIG5ldyBDb2duaXRvIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29nbml0b1Bvd2VyVXNlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2duaXRvUG93ZXJVc2VyKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQ29nbml0byByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbkNvZ25pdG9SZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db2duaXRvUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBkZWZpbmVzIHRoZSBzZXQgb2YgcGVybWlzc2lvbnMgYWxsb3dlZCBmb3IgdW5hdXRoZW50aWNhdGVkIGlkZW50aXRpZXMgZm9yIENvZ25pdG8gSWRlbnRpdHkgUG9vbHMuIFRoaXMgcG9saWN5IGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGEgc3RhbmQgYWxvbmUgcGVybWlzc2lvbiBwb2xpY3kuIEl0IGlzIHVzZWQgYXMgYSBndWFyZHJhaWwgYWdhaW5zdCBvdmVybHkgcGVybWlzc2l2ZSBwb2xpY2llcyBhdHRhY2hlZCBmb3Igcm9sZXMgaW4gYW4gaWRlbnRpdHkgcG9vbC4gRG8gbm90IGF0dGFjaCB0aGlzIHBvbGljeSB0byBhbnkgcm9sZXMsIGFzIENvZ25pdG8gSWRlbnRpdHkgU2VydmljZSB3aWxsIGF1dG9tYXRpY2FsbHkgaW5jbHVkZSBpdCBhcyBhIHNjb3BlZCBkb3duIHBvbGljeSB3aGVuIGNyZWF0aW5nIGNyZWRlbnRpYWxzLiBUaGUgcHJpdmlsZWdlcyB0byB0ZW1wb3JhcmlseSBhY2Nlc3Mgb3RoZXIgQVdTIHJlc291cmNlcyB0aHJvdWdoIHRoZSBlbmhhbmNlZCBmbG93IHdpbGwgbm93IGJlIGRlZmluZWQgYnkgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgcm9sZSBhc3NvY2lhdGVkIHdpdGggdGhlIGlkZW50aXR5IG9mIHRoZSB1bmF1dGhlbnRpY2F0ZWQgdXNlciBwcm92aWRlZCBieSBhIHNlcnZpY2UsIGFuZCB0aGUgcHJpdmlsZWdlcyBnaXZlbiBpbiB0aGlzIG1hbmFnZWQgcG9saWN5IHRoYXQgaXMgb3duZWQgYnkgQ29nbml0by4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29nbml0b1VuQXV0aGVkSWRlbnRpdGllc1Nlc3Npb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29nbml0b1VuQXV0aGVkSWRlbnRpdGllc1Nlc3Npb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBkZWZpbmVzIHRoZSBzZXQgb2YgcGVybWlzc2lvbnMgYWxsb3dlZCBmb3IgdW5hdXRoZW50aWNhdGVkIGlkZW50aXRpZXMgZm9yIENvZ25pdG8gSWRlbnRpdHkgUG9vbHMuIFRoaXMgZG9lcyBub3QgbmVlZCB0byBiZSBhdHRhY2hlZCB0byB5b3VyIHVuYXV0aCByb2xlLCBhcyBDb2duaXRvIElkZW50aXR5IFNlcnZpY2Ugd2lsbCBhdXRvbWF0aWNhbGx5IGluY2x1ZGUgaXQgYXMgYSBzY29wZWQgZG93biBwb2xpY3kgd2hlbiBjcmVhdGluZyBjcmVkZW50aWFscy4gVGhlIHByaXZpbGVnZXMgdG8gdGVtcG9yYXJpbHkgYWNjZXNzIG90aGVyIEFXUyByZXNvdXJjZXMgdGhyb3VnaCB0aGUgZW5oYW5jZWQgZmxvdyB3aWxsIG5vdyBiZSBkZWZpbmVkIGJ5IHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHJvbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpZGVudGl0eSBvZiB0aGUgdW5hdXRoZW50aWNhdGVkIHVzZXIgcHJvdmlkZWQgYnkgYSBzZXJ2aWNlLCBhbmQgdGhlIHByaXZpbGVnZXMgZ2l2ZW4gaW4gdGhpcyBtYW5hZ2VkIHBvbGljeSB0aGF0IGlzIG93bmVkIGJ5IENvZ25pdG8uICovXG4gICAgcHVibGljIEFtYXpvbkNvZ25pdG9VbmF1dGhlbnRpY2F0ZWRJZGVudGl0aWVzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvZ25pdG9VbmF1dGhlbnRpY2F0ZWRJZGVudGl0aWVzKTtcbiAgICB9XG5cbiAgICAvKiogVGhlIHB1cnBvc2Ugb2YgdGhpcyBwb2xpY3kgaXMgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG8gQVdTIENvbm5lY3QgdXNlcnMgcmVxdWlyZWQgdG8gdXNlIENvbm5lY3QgcmVzb3VyY2VzLiBUaGlzIHBvbGljeSBwcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgQ29ubmVjdCByZXNvdXJjZXMgdmlhIHRoZSBDb25uZWN0IENvbnNvbGUgYW5kIHB1YmxpYyBBUElzICovXG4gICAgcHVibGljIEFtYXpvbkNvbm5lY3RGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvbm5lY3RGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBBbWF6b24gQ29ubmVjdCBDYW1wYWlnbnMgc2VydmljZSBsaW5rZWQgcm9sZSAqL1xuICAgIHB1YmxpYyBBbWF6b25Db25uZWN0Q2FtcGFpZ25zU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29ubmVjdENhbXBhaWduc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb24gdG8gdmlldyB0aGUgQW1hem9uIENvbm5lY3QgaW5zdGFuY2VzIGluIHlvdXIgQVdTIGFjY291bnQuICovXG4gICAgcHVibGljIEFtYXpvbkNvbm5lY3RSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Db25uZWN0UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIENvbm5lY3QgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uQ29ubmVjdFNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvbm5lY3RTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gQ29ubmVjdCB0byBzeW5jaHJvbml6ZSBBV1MgcmVzb3VyY2VzIGFjcm9zcyByZWdpb25zIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Db25uZWN0U3luY2hyb25pemF0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uQ29ubmVjdFN5bmNocm9uaXphdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIENvbm5lY3QgVm9pY2UgSUQgKi9cbiAgICBwdWJsaWMgQW1hem9uQ29ubmVjdFZvaWNlSURGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkNvbm5lY3RWb2ljZUlERnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGNvbnN1bWUgQW1hem9uIEJlZHJvY2sgbW9kZWxzLCBpbmNsdWRpbmcgaW52b2tpbmcgQW1hem9uIEJlZHJvY2sgYXBwbGljYXRpb24gaW5mZXJlbmNlIHByb2ZpbGUgY3JlYXRlZCBmb3IgcGFydGljdWxhciBBbWF6b24gRGF0YVpvbmUgZG9tYWluLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EYXRhWm9uZUJlZHJvY2tNb2RlbENvbnN1bXB0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRhdGFab25lQmVkcm9ja01vZGVsQ29uc3VtcHRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgQW1hem9uIEJlZHJvY2sgbW9kZWwgYWNjZXNzLCBpbmNsdWRpbmcgY3JlYXRpbmcsIHRhZ2dpbmcgYW5kIGRlbGV0aW5nIGFwcGxpY2F0aW9uIGluZmVyZW5jZSBwcm9maWxlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVCZWRyb2NrTW9kZWxNYW5hZ2VtZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRhdGFab25lQmVkcm9ja01vZGVsTWFuYWdlbWVudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgcG9saWN5IGZvciB0aGUgQW1hem9uIERhdGFab25lJ3MgRG9tYWluRXhlY3V0aW9uUm9sZSBzZXJ2aWNlIHJvbGUuIFRoaXMgcm9sZSBpcyB1c2VkIGJ5IEFtYXpvbiBEYXRhWm9uZSB0byBjYXRhbG9nLCBkaXNjb3ZlciwgZ292ZXJuLCBzaGFyZSwgYW5kIGFuYWx5emUgZGF0YSBpbiB0aGUgQW1hem9uIERhdGFab25lIGRvbWFpbi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVEb21haW5FeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRhdGFab25lRG9tYWluRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBEYXRhWm9uZSBjcmVhdGVzIElBTSByb2xlcyBmb3IgRW52aXJvbm1lbnRzIHRvIHBlcmZvcm0gZGF0YSBhbmFseXRpY3MgYWN0aW9ucywgYW5kIHVzZXMgdGhpcyBwb2xpY3kgd2hlbiBjcmVhdGluZyB0aGVzZSByb2xlcyB0byBkZWZpbmUgdGhlIGJvdW5kYXJ5IG9mIHRoZWlyIHBlcm1pc3Npb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EYXRhWm9uZUVudmlyb25tZW50Um9sZVBlcm1pc3Npb25zQm91bmRhcnkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGF0YVpvbmVFbnZpcm9ubWVudFJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIERhdGFab25lIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhcyB3ZWxsIGFzIGxpbWl0ZWQgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgdGhhdCBhcmUgcmVxdWlyZWQgYnkgaXQuICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EYXRhWm9uZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRGF0YVpvbmUsIGJ1dCBkb2VzIG5vdCBhbGxvdyB0aGUgbWFuYWdlbWVudCBvZiBkb21haW5zLCB1c2Vycywgb3IgYXNzb2NpYXRlZCBhY2NvdW50cy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVGdWxsVXNlckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EYXRhWm9uZUZ1bGxVc2VyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhlIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gYWxsb3cgQW1hem9uIERhdGFab25lIHRvIGVuYWJsZSBwdWJsaXNoaW5nIGFuZCBhY2Nlc3MgZ3JhbnRzIHRvIGRhdGEuICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lR2x1ZU1hbmFnZUFjY2Vzc1JvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGF0YVpvbmVHbHVlTWFuYWdlQWNjZXNzUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBEYXRhWm9uZSBpcyBhIGRhdGEgbWFuYWdlbWVudCBzZXJ2aWNlIHRoYXQgZW5hYmxlcyB5b3UgdG8gY2F0YWxvZywgZGlzY292ZXIsIGdvdmVybiwgc2hhcmUsIGFuZCBhbmFseXplIHlvdXIgZGF0YS4gV2l0aCBBbWF6b24gRGF0YVpvbmUsIHlvdSBjYW4gc2hhcmUgYW5kIGFjY2VzcyB5b3VyIGRhdGEgYWNyb3NzIGFjY291bnRzIGFuZCBzdXBwb3J0ZWQgcmVnaW9ucy4gQW1hem9uIERhdGFab25lIHNpbXBsaWZpZXMgeW91ciBleHBlcmllbmNlIGFjcm9zcyBBV1Mgc2VydmljZXMsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBBbWF6b24gUmVkc2hpZnQsIEFtYXpvbiBBdGhlbmEsIEFXUyBHbHVlLCBhbmQgQVdTIExha2UgRm9ybWF0aW9uLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EYXRhWm9uZVJlZHNoaWZ0R2x1ZVByb3Zpc2lvbmluZ1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EYXRhWm9uZVJlZHNoaWZ0R2x1ZVByb3Zpc2lvbmluZ1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdpdmVzIEFtYXpvbiBEYXRhWm9uZSBwZXJtaXNzaW9ucyB0byBwdWJsaXNoIEFtYXpvbiBSZWRzaGlmdCBkYXRhIHRvIHRoZSBjYXRhbG9nLiBJdCBhbHNvIGdpdmVzIEFtYXpvbiBEYXRhWm9uZSBwZXJtaXNzaW9ucyB0byBncmFudCBhY2Nlc3Mgb3IgcmV2b2tlIGFjY2VzcyB0byBBbWF6b24gUmVkc2hpZnQgb3IgQW1hem9uIFJlZHNoaWZ0IFNlcnZlcmxlc3MgcHVibGlzaGVkIGFzc2V0cyBpbiB0aGUgY2F0YWxvZy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVSZWRzaGlmdE1hbmFnZUFjY2Vzc1JvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGF0YVpvbmVSZWRzaGlmdE1hbmFnZUFjY2Vzc1JvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgQW1hem9uRGF0YVpvbmVTYWdlTWFrZXJFbnZpcm9ubWVudFJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5IHBvbGljeSBpcyB0aGUgbGlzdCBvZiBwZXJtaXNzaW9ucyB0aGF0IGFyZSBwZXJtaXR0ZWQgb24gYW4gZXhlY3V0aW9uIHJvbGUgY3JlYXRlZCBpbiBhIFNhZ2VNYWtlciBlbnZpcm9ubWVudCBwcm92aXNpb25lZCBieSBBbWF6b24gRGF0YVpvbmUuICovXG4gICAgcHVibGljIEFtYXpvbkRhdGFab25lU2FnZU1ha2VyRW52aXJvbm1lbnRSb2xlUGVybWlzc2lvbnNCb3VuZGFyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EYXRhWm9uZVNhZ2VNYWtlckVudmlyb25tZW50Um9sZVBlcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgQW1hem9uRGF0YVpvbmVTYWdlTWFrZXJNYW5hZ2VBY2Nlc3NSb2xlUG9saWN5IHBvbGljeSBncmFudHMgQW1hem9uIERhdGFab25lIHRoZSBwZXJtaXNzaW9ucyByZXF1aXJlZCB0byBncmFudCB1c2VyIGFjY2VzcyB0byB2YXJpb3VzIHJlc291cmNlcyBpbiB0aGUgU2FnZU1ha2VyIGVudmlyb25tZW50LiAqL1xuICAgIHB1YmxpYyBBbWF6b25EYXRhWm9uZVNhZ2VNYWtlck1hbmFnZUFjY2Vzc1JvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGF0YVpvbmVTYWdlTWFrZXJNYW5hZ2VBY2Nlc3NSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIEFtYXpvbkRhdGFab25lU2FnZU1ha2VyUHJvdmlzaW9uaW5nUm9sZVBvbGljeSBwb2xpY3kgZ3JhbnRzIEFtYXpvbiBEYXRhWm9uZSB0aGUgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gaW50ZXJvcGVyYXRlIHdpdGggQW1hem9uIFNhZ2VNYWtlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGF0YVpvbmVTYWdlTWFrZXJQcm92aXNpb25pbmdSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRhdGFab25lU2FnZU1ha2VyUHJvdmlzaW9uaW5nUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqICBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRGV0ZWN0aXZlIHNlcnZpY2UgYW5kIHNjb3BlZCBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgVUkgZGVwZW5kZW5jaWVzICovXG4gICAgcHVibGljIEFtYXpvbkRldGVjdGl2ZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGV0ZWN0aXZlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGludmVzdGlnYXRvciBhY2Nlc3MgdG8gQW1hem9uIERldGVjdGl2ZSBzZXJ2aWNlIGFuZCBzY29wZWQgYWNjZXNzIHRvIHRoZSBjb25zb2xlIFVJIGRlcGVuZGVuY2llcy4gVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb24gdG8gZGl2ZSBpbnRvIERldGVjdGl2ZSBmb3IgaW52ZXN0aWdhdGlvbiBwdXJwb3NlcyBhbmQgbGltaXRlZCB3cml0ZSBhY2Nlc3MgdG8gR3VhcmRkdXR5LiAqL1xuICAgIHB1YmxpYyBBbWF6b25EZXRlY3RpdmVJbnZlc3RpZ2F0b3JBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGV0ZWN0aXZlSW52ZXN0aWdhdG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbWVtYmVyIGFjY2VzcyB0byBBbWF6b24gRGV0ZWN0aXZlIHNlcnZpY2UgYW5kIHNjb3BlZCBhY2Nlc3MgdG8gdGhlIGNvbnNvbGUgVUkgZGVwZW5kZW5jaWVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EZXRlY3RpdmVNZW1iZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGV0ZWN0aXZlTWVtYmVyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgT3JnYW5pemF0aW9ucyBhY2Nlc3MgdG8gbWFuYWdlIERlbGVnYXRlZCBhZG1pbmlzdHJhdG9yIGZvciBBbWF6b24gRGV0ZWN0aXZlIGFuZCBzY29wZWQgYWNjZXNzIHRvIHRoZSBjb25zb2xlIFVJIGRlcGVuZGVuY2llcy4gVGhpcyBhbHNvIGdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIHNlcnZpY2UtbGlua2VkIHJvbGUgZm9yIERldGVjdGl2ZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGV0ZWN0aXZlT3JnYW5pemF0aW9uc0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EZXRlY3RpdmVPcmdhbml6YXRpb25zQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBEZXRlY3RpdmUgdG8gbWFrZSBzZXJ2aWNlIGNhbGxzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFtYXpvbkRldGVjdGl2ZVNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRldGVjdGl2ZVNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIHBvbGljeSBncmFudHMgZnVsbC1hY2Nlc3MgdG8gdGhlIERldk9wcyBHdXJ1IGNvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkRldk9wc0d1cnVDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EZXZPcHNHdXJ1Q29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRGV2T3BzIEd1cnUuICovXG4gICAgcHVibGljIEFtYXpvbkRldk9wc0d1cnVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRldk9wc0d1cnVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBhY2Nlc3MgdG8gZW5hYmxlIGFuZCBtYW5hZ2UgQW1hem9uIERldk9wcyBHdXJ1IHdpdGhpbiBhbiBvcmdhbml6YXRpb24uICovXG4gICAgcHVibGljIEFtYXpvbkRldk9wc0d1cnVPcmdhbml6YXRpb25zQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRldk9wc0d1cnVPcmdhbml6YXRpb25zQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRGV2T3BzIEd1cnUgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRGV2T3BzR3VydVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRldk9wc0d1cnVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEEgc2VydmljZS1saW5rZWQgcm9sZSByZXF1aXJlZCBmb3IgQW1hem9uIERldk9wc0d1cnUgdG8gYWNjZXNzIHlvdXIgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EZXZPcHNHdXJ1U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRGV2T3BzR3VydVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHVwbG9hZCBETVMgcmVwbGljYXRpb24gbG9ncyB0byBjbG91ZHdhdGNoIGxvZ3MgaW4gY3VzdG9tZXIgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uRE1TQ2xvdWRXYXRjaExvZ3NSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRNU0Nsb3VkV2F0Y2hMb2dzUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBtYW5hZ2UgUzMgc2V0dGluZ3MgZm9yIFJlZHNoaWZ0IGVuZHBvaW50cyBmb3IgRE1TLiAqL1xuICAgIHB1YmxpYyBBbWF6b25ETVNSZWRzaGlmdFMzUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25ETVNSZWRzaGlmdFMzUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBtYW5hZ2UgVlBDIHNldHRpbmdzIGZvciBBV1MgbWFuYWdlZCBjdXN0b21lciBjb25maWd1cmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBbWF6b25ETVNWUENNYW5hZ2VtZW50Um9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25ETVNWUENNYW5hZ2VtZW50Um9sZSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gRG9jdW1lbnREQi1FbGFzdGljIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Eb2NEQkVsYXN0aWNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Eb2NEQkVsYXN0aWNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIG1hbmFnZSBBbWF6b24gRG9jdW1lbnREQiB3aXRoIE1vbmdvREIgY29tcGF0aWJpbGl0eSB1c2luZyB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gTm90ZSB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBmdWxsIGFjY2VzcyB0byBwdWJsaXNoIG9uIGFsbCBTTlMgdG9waWNzIHdpdGhpbiB0aGUgYWNjb3VudCwgcGVybWlzc2lvbnMgdG8gY3JlYXRlIGFuZCBlZGl0IEFtYXpvbiBFQzIgaW5zdGFuY2VzIGFuZCBWUEMgY29uZmlndXJhdGlvbnMsIHBlcm1pc3Npb25zIHRvIHZpZXcgYW5kIGxpc3Qga2V5cyBvbiBBbWF6b24gS01TLCBhbmQgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJEUyBhbmQgQW1hem9uIE5lcHR1bmUuICovXG4gICAgcHVibGljIEFtYXpvbkRvY0RCQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRG9jREJDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBEb2N1bWVudERCIEVsYXN0aWMgQ2x1c3RlcnMgYW5kIG90aGVyIHJlcXVpcmVkIHBlcm1pc3Npb25zIGZvciBpdHMgZGVwZW5kZW5jaWVzIGluY2x1ZGluZyBFQzIsIEtNUywgU2VjcmV0c01hbmFnZXIsIENsb3VkV2F0Y2ggYW5kIElBTS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRG9jREJFbGFzdGljRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Eb2NEQkVsYXN0aWNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gRG9jREItRWxhc3RpYyBhbmQgQ2xvdWRXYXRjaCBtZXRyaWNzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Eb2NEQkVsYXN0aWNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Eb2NEQkVsYXN0aWNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBEb2N1bWVudERCIHdpdGggTW9uZ29EQiBjb21wYXRpYmlsaXR5LiBOb3RlIHRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIGZ1bGwgYWNjZXNzIHRvIHB1Ymxpc2ggb24gYWxsIFNOUyB0b3BpY3Mgd2l0aGluIHRoZSBhY2NvdW50IGFuZCBmdWxsIGFjY2VzcyB0byBBbWF6b24gUkRTIGFuZCBBbWF6b24gTmVwdHVuZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRG9jREJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRvY0RCRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIERvY3VtZW50REIgd2l0aCBNb25nb0RCIGNvbXBhdGliaWxpdHkuIE5vdGUgdGhhdCB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBhY2Nlc3MgdG8gQW1hem9uIFJEUyBhbmQgQW1hem9uIE5lcHR1bmUgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Eb2NEQlJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkRvY0RCUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gbWFuYWdlIFZQQyBzZXR0aW5ncyBmb3IgQW1hem9uIG1hbmFnZWQgY3VzdG9tZXIgY29uZmlndXJhdGlvbnMgKi9cbiAgICBwdWJsaWMgQW1hem9uRFJTVlBDTWFuYWdlbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EUlNWUENNYW5hZ2VtZW50KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIER5bmFtb0RCIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRHluYW1vREJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkR5bmFtb0RCRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBEeW5hbW9EQiAqL1xuICAgIHB1YmxpYyBBbWF6b25EeW5hbW9EQkZ1bGxBY2Nlc3NWMigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EeW5hbW9EQkZ1bGxBY2Nlc3NWMik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIG9uIGEgZGVwcmVjYXRpb24gcGF0aC4gU2VlIGRvY3VtZW50YXRpb24gZm9yIGd1aWRhbmNlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0R5bmFtb0RCUGlwZWxpbmUuaHRtbC4gUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIER5bmFtb0RCIGluY2x1ZGluZyBFeHBvcnQvSW1wb3J0IHVzaW5nIEFXUyBEYXRhIFBpcGVsaW5lIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRHluYW1vREJGdWxsQWNjZXNzd2l0aERhdGFQaXBlbGluZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25EeW5hbW9EQkZ1bGxBY2Nlc3N3aXRoRGF0YVBpcGVsaW5lKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRHluYW1vREIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25EeW5hbW9EQlJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkR5bmFtb0RCUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBJQU0gUG9saWN5IHRoYXQgYWxsb3dzIHRoZSBDU0kgZHJpdmVyIHNlcnZpY2UgYWNjb3VudCB0byBtYWtlIGNhbGxzIHRvIHJlbGF0ZWQgc2VydmljZXMgc3VjaCBhcyBFQzIgb24geW91ciBiZWhhbGYuIFRoaXMgcG9saWN5IHJlc3RyaWN0cyB0aGUgQW1hem9uIEVCUyBDU0kgZHJpdmVyIHRvIG9ubHkgbWFuYWdpbmcgRUJTIHZvbHVtZXMgYW5kIHNuYXBzaG90cyB0aGF0IGJlbG9uZyB0byBhIHNwZWNpZmljIEVLUyBjbHVzdGVyLiBJdCByZXF1aXJlcyB0aGUgcmVzb3VyY2UgdGFnIGVicy5jc2kuYXdzLmNvbS9jbHVzdGVyLW5hbWUgdG8gbWF0Y2ggdGhlIGVrcy1jbHVzdGVyLW5hbWUgdGFnIG9uIHRoZSBJQU0gcHJpbmNpcGFsLCBwcmV2ZW50aW5nIGNyb3NzLWNsdXN0ZXIgYWNjZXNzIHdoZW4gbXVsdGlwbGUgY2x1c3RlcnMgc2hhcmUgdGhlIHNhbWUgQVdTIGFjY291bnQuIEF0dGFjaCBhbmQgZGV0YWNoIG9wZXJhdGlvbnMgb24gaW5zdGFuY2VzIGFyZSByZXN0cmljdGVkIHRvIGluc3RhbmNlcyB0YWdnZWQgd2l0aCBlaXRoZXIgdGhlIGVrczpjbHVzdGVyLW5hbWUgdGFnIChzZXQgYXV0b21hdGljYWxseSBieSBFS1Mgb24gbWFuYWdlZCBub2RlIGdyb3Vwcykgb3IgdGhlIGVicy5jc2kuYXdzLmNvbS9jbHVzdGVyLW5hbWUgdGFnIChmb3IgbWFudWFsbHkgdGFnZ2VkIGluc3RhbmNlcykuICovXG4gICAgcHVibGljIEFtYXpvbkVCU0NTSURyaXZlckVLU0NsdXN0ZXJTY29wZWRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUJTQ1NJRHJpdmVyRUtTQ2x1c3RlclNjb3BlZFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIElBTSBQb2xpY3kgdGhhdCBhbGxvd3MgdGhlIENTSSBkcml2ZXIgc2VydmljZSBhY2NvdW50IHRvIG1ha2UgY2FsbHMgdG8gcmVsYXRlZCBzZXJ2aWNlcyBzdWNoIGFzIEVDMiBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUJTQ1NJRHJpdmVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVCU0NTSURyaXZlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIElBTSBQb2xpY3kgdGhhdCBhbGxvd3MgdGhlIEVCUyBDU0kgZHJpdmVyIHNlcnZpY2UgYWNjb3VudCB0byBtYWtlIGNhbGxzIHRvIHJlbGF0ZWQgc2VydmljZXMgc3VjaCBhcyBFQzIgb24geW91ciBiZWhhbGYuIEl0IGxpbWl0cyB0aGUgQW1hem9uIEVCUyBDU0kgZHJpdmVyIHRvIG9ubHkgbWFuYWdpbmcgRUJTIHZvbHVtZXMgYW5kIHNuYXBzaG90cyB0aGF0IGFyZSB0YWdnZWQgd2l0aCB0aGUga2V5IGVicy5jc2kuYXdzLmNvbS9jbHVzdGVyIHNldCB0byB0cnVlLiBWb2x1bWVzIHByb3Zpc2lvbmVkIGJ5IHRoZSBpbi10cmVlIEt1YmVybmV0ZXMgdm9sdW1lIHBsdWdpbiAoQ1NJLW1pZ3JhdGVkIHZvbHVtZXMpIGFyZSBhbHNvIHN1cHBvcnRlZCB0aHJvdWdoIHRoZSBrdWJlcm5ldGVzLmlvL2NyZWF0ZWQtZm9yL3B2Yy9uYW1lIHJlc291cmNlIHRhZy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUJTQ1NJRHJpdmVyUG9saWN5VjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUJTQ1NJRHJpdmVyUG9saWN5VjIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgdG8gQW1hem9uIEVDUiByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyQ29udGFpbmVyUmVnaXN0cnlGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMkNvbnRhaW5lclJlZ2lzdHJ5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBFQzIgQ29udGFpbmVyIFJlZ2lzdHJ5IHJlcG9zaXRvcmllcywgYnV0IGRvZXMgbm90IGFsbG93IHJlcG9zaXRvcnkgZGVsZXRpb24gb3IgcG9saWN5IGNoYW5nZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVDMkNvbnRhaW5lclJlZ2lzdHJ5UG93ZXJVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMkNvbnRhaW5lclJlZ2lzdHJ5UG93ZXJVc2VyKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHB1bGwgaW1hZ2VzIGZyb20gQW1hem9uIEVDMiBDb250YWluZXIgUmVnaXN0cnkgcmVwb3NpdG9yaWVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJDb250YWluZXJSZWdpc3RyeVB1bGxPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMkNvbnRhaW5lclJlZ2lzdHJ5UHVsbE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBFQzIgQ29udGFpbmVyIFJlZ2lzdHJ5IHJlcG9zaXRvcmllcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyQ29udGFpbmVyUmVnaXN0cnlSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJDb250YWluZXJSZWdpc3RyeVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogICBQb2xpY3kgdG8gZW5hYmxlIFRhc2sgQXV0b3NjYWxpbmcgZm9yIEFtYXpvbiBFQzIgQ29udGFpbmVyIFNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyQ29udGFpbmVyU2VydmljZUF1dG9zY2FsZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyQ29udGFpbmVyU2VydmljZUF1dG9zY2FsZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdG8gZW5hYmxlIENsb3VkV2F0Y2ggRXZlbnRzIGZvciBFQzIgQ29udGFpbmVyIFNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyQ29udGFpbmVyU2VydmljZUV2ZW50c1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyQ29udGFpbmVyU2VydmljZUV2ZW50c1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEFtYXpvbiBFQzIgUm9sZSBmb3IgQW1hem9uIEVDMiBDb250YWluZXIgU2VydmljZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyQ29udGFpbmVyU2VydmljZWZvckVDMlJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyQ29udGFpbmVyU2VydmljZWZvckVDMlJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgQW1hem9uIEVDUyBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVDMkNvbnRhaW5lclNlcnZpY2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMkNvbnRhaW5lclNlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEVDMiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVDMkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gc2NhbiBhbGwgc3VwcG9ydGVkIHJlc291cmNlIHR5cGVzIGZvciByZWxldmFudCBkYXRhIHdoZW4gdXNpbmcgRGVzY3JpYmVJbWFnZVJlZmVyZW5jZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVDMkltYWdlUmVmZXJlbmNlc0FjY2Vzc1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJJbWFnZVJlZmVyZW5jZXNBY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBFQzIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEVDMiBhY2Nlc3MgdG8gUzMgYnVja2V0IHRvIGRvd25sb2FkIHJldmlzaW9uLiBUaGlzIHJvbGUgaXMgbmVlZGVkIGJ5IHRoZSBDb2RlRGVwbG95IGFnZW50IG9uIEVDMiBpbnN0YW5jZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVDMlJvbGVmb3JBV1NDb2RlRGVwbG95KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMlJvbGVmb3JBV1NDb2RlRGVwbG95KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgRUMyIGxpbWl0ZWQgYWNjZXNzIHRvIFMzIGJ1Y2tldCB0byBkb3dubG9hZCByZXZpc2lvbi4gVGhpcyByb2xlIGlzIG5lZWRlZCBieSB0aGUgQ29kZURlcGxveSBhZ2VudCBvbiBFQzIgaW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJSb2xlZm9yQVdTQ29kZURlcGxveUxpbWl0ZWQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyUm9sZWZvckFXU0NvZGVEZXBsb3lMaW1pdGVkKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBBbWF6b24gRUMyIFJvbGUgZm9yIERhdGEgUGlwZWxpbmUgc2VydmljZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJSb2xlZm9yRGF0YVBpcGVsaW5lUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJSb2xlZm9yRGF0YVBpcGVsaW5lUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHdpbGwgc29vbiBiZSBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIEFtYXpvblNTTU1hbmFnZWRJbnN0YW5jZUNvcmUgcG9saWN5IHRvIGVuYWJsZSBBV1MgU3lzdGVtcyBNYW5hZ2VyIHNlcnZpY2UgY29yZSBmdW5jdGlvbmFsaXR5IG9uIEVDMiBpbnN0YW5jZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3lzdGVtcy1tYW5hZ2VyL2xhdGVzdC91c2VyZ3VpZGUvc2V0dXAtaW5zdGFuY2UtcHJvZmlsZS5odG1sICovXG4gICAgcHVibGljIEFtYXpvbkVDMlJvbGVmb3JTU00oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUMyUm9sZWZvclNTTSk7XG4gICAgfVxuXG4gICAgLyoqIE1hbmFnZWQgcG9saWN5IGZvciB0aGUgQW1hem9uIExhdW5jaFdpemFyZCBzZXJ2aWNlIHJvbGUgZm9yIEVDMiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJSb2xlUG9saWN5Rm9yTGF1bmNoV2l6YXJkKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDMlJvbGVQb2xpY3lGb3JMYXVuY2hXaXphcmQpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdG8gZW5hYmxlIEF1dG9zY2FsaW5nIGZvciBBbWF6b24gRUMyIFNwb3QgRmxlZXQgKi9cbiAgICBwdWJsaWMgQW1hem9uRUMyU3BvdEZsZWV0QXV0b3NjYWxlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJTcG90RmxlZXRBdXRvc2NhbGVSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEVDMiBTcG90IEZsZWV0IHRvIHJlcXVlc3QsIHRlcm1pbmF0ZSBhbmQgdGFnIFNwb3QgSW5zdGFuY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQzJTcG90RmxlZXRUYWdnaW5nUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQzJTcG90RmxlZXRUYWdnaW5nUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBBbWF6b24gRUNTIHJlc291cmNlcyBhbmQgZW5hYmxlcyBFQ1MgZmVhdHVyZXMgdGhyb3VnaCBhY2Nlc3MgdG8gb3RoZXIgQVdTIHNlcnZpY2UgcmVzb3VyY2VzLCBpbmNsdWRpbmcgVlBDcywgQXV0byBTY2FsaW5nIGdyb3VwcywgYW5kIENsb3VkRm9ybWF0aW9uIHN0YWNrcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUNTRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBBbWF6b24gRUNTIENvbXB1dGUgdG8gbWFuYWdlIHlvdXIgRUMyIGluc3RhbmNlcyBhbmQgcmVsYXRlZCByZXNvdXJjZXMgYXMgcGFydCBvZiBFQ1MgbWFuYWdlZCBpbnN0YW5jZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uRUNTQ29tcHV0ZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDU0NvbXB1dGVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZXNlIHBlcm1pc3Npb25zIGVuYWJsZSBBbWF6b24gRUNTIHRvIGF1dG9tYXRpY2FsbHkgcHJvdmlzaW9uIGFuZCBtYW5hZ2UgdGhlIGluZnJhc3RydWN0dXJlIGNvbXBvbmVudHMgcmVxdWlyZWQgZm9yIEV4cHJlc3MgR2F0ZXdheSBTZXJ2aWNlcywgaW5jbHVkaW5nIGxvYWQgYmFsYW5jaW5nLCBzZWN1cml0eSBncm91cHMsIFNTTCBjZXJ0aWZpY2F0ZXMsIGFuZCBhdXRvIHNjYWxpbmcgY29uZmlndXJhdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZWZvckV4cHJlc3NHYXRld2F5U2VydmljZXMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlZm9yRXhwcmVzc0dhdGV3YXlTZXJ2aWNlcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBvdGhlciBBV1Mgc2VydmljZSByZXNvdXJjZXMgcmVxdWlyZWQgdG8gbWFuYWdlIGxvYWQgYmFsYW5jZXJzIGFzc29jaWF0ZWQgd2l0aCBFQ1Mgd29ya2xvYWRzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JMb2FkQmFsYW5jZXJzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZVBvbGljeUZvckxvYWRCYWxhbmNlcnMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBFQ1MgYWNjZXNzIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIEVDMiBtYW5hZ2VkIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JNYW5hZ2VkSW5zdGFuY2VzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZVBvbGljeUZvck1hbmFnZWRJbnN0YW5jZXMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgdG8gUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHksIEFXUyBTZWNyZXRzIE1hbmFnZXIgYW5kIG90aGVyIEFXUyBTZXJ2aWNlcyByZXF1aXJlZCB0byBtYW5hZ2UgRUNTIFNlcnZpY2UgQ29ubmVjdCBUTFMgZmVhdHVyZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZVBvbGljeUZvclNlcnZpY2VDb25uZWN0VHJhbnNwb3J0TGF5ZXJTZWN1cml0eSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JTZXJ2aWNlQ29ubmVjdFRyYW5zcG9ydExheWVyU2VjdXJpdHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gb3RoZXIgQVdTIHNlcnZpY2UgcmVzb3VyY2VzIHJlcXVpcmVkIHRvIG1hbmFnZSB2b2x1bWVzIGFzc29jaWF0ZWQgd2l0aCBFQ1Mgd29ya2xvYWRzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQ1NJbmZyYXN0cnVjdHVyZVJvbGVQb2xpY3lGb3JWb2x1bWVzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZVBvbGljeUZvclZvbHVtZXMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gb3RoZXIgQVdTIHNlcnZpY2UgcmVzb3VyY2VzIHJlcXVpcmVkIHRvIG1hbmFnZSBWUEMgTGF0dGljZSBmZWF0dXJlIGluIEVDUyB3b3JrbG9hZHMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbkVDU0luZnJhc3RydWN0dXJlUm9sZVBvbGljeUZvclZwY0xhdHRpY2UoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUNTSW5mcmFzdHJ1Y3R1cmVSb2xlUG9saWN5Rm9yVnBjTGF0dGljZSk7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgcG9saWN5IGZvciB0aGUgQW1hem9uIEVDUyBJbnN0YW5jZSBSb2xlIGZvciBBbWF6b24gRUNTIE1hbmFnZWQgSW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FQ1NJbnN0YW5jZVJvbGVQb2xpY3lGb3JNYW5hZ2VkSW5zdGFuY2VzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDU0luc3RhbmNlUm9sZVBvbGljeUZvck1hbmFnZWRJbnN0YW5jZXMpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdG8gZW5hYmxlIEFtYXpvbiBFQ1MgdG8gbWFuYWdlIHlvdXIgY2x1c3Rlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUNTU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUNTU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gb3RoZXIgQVdTIHNlcnZpY2UgcmVzb3VyY2VzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIHJ1biBBbWF6b24gRUNTIHRhc2tzICovXG4gICAgcHVibGljIEFtYXpvbkVDU1Rhc2tFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVDU1Rhc2tFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbWFuYWdlbWVudCBhY2Nlc3MgdG8gRUZTIHJlc291cmNlcyBhbmQgcmVhZCBhY2Nlc3MgdG8gRUMyICovXG4gICAgcHVibGljIEFtYXpvbkVGU0NTSURyaXZlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FRlNDU0lEcml2ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyB0aGUgQW1hem9uIFZQQyBDTkkgUGx1Z2luIChhbWF6b24tdnBjLWNuaS1rOHMpIHRoZSBwZXJtaXNzaW9ucyBpdCByZXF1aXJlcyB0byBtb2RpZnkgdGhlIElQIGFkZHJlc3MgY29uZmlndXJhdGlvbiBvbiB5b3VyIEVLUyB3b3JrZXIgbm9kZXMuIFRoaXMgcGVybWlzc2lvbiBzZXQgYWxsb3dzIHRoZSBDTkkgdG8gbGlzdCwgZGVzY3JpYmUsIGFuZCBtb2RpZnkgRWxhc3RpYyBOZXR3b3JrIEludGVyZmFjZXMgb24geW91ciBiZWhhbGYuIE1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFXUyBWUEMgQ05JIFBsdWdpbiBpcyBhdmFpbGFibGUgaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hbWF6b24tdnBjLWNuaS1rOHMgKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTQ05JUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0NOSVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBhdHRhY2hlZCB0byB0aGUgRUtTIENsdXN0ZXIgUm9sZSB0aGF0IGdyYW50cyBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgdGhlIGNsdXN0ZXIncyBibG9jayBzdG9yYWdlIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTQmxvY2tTdG9yYWdlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0Jsb2NrU3RvcmFnZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBhdHRhY2hlZCB0byB0aGUgRUtTIENsdXN0ZXIgUm9sZSB0aGF0IGdyYW50cyBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgdGhlIGNsdXN0ZXIncyBibG9jayBzdG9yYWdlIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTQmxvY2tTdG9yYWdlUG9saWN5VjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTQmxvY2tTdG9yYWdlUG9saWN5VjIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBLdWJlcm5ldGVzIHRoZSBwZXJtaXNzaW9ucyBpdCByZXF1aXJlcyB0byBtYW5hZ2UgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiBLdWJlcm5ldGVzIHJlcXVpcmVzIEVjMjpDcmVhdGVUYWdzIHBlcm1pc3Npb25zIHRvIHBsYWNlIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uIG9uIEVDMiByZXNvdXJjZXMgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBJbnN0YW5jZXMsIFNlY3VyaXR5IEdyb3VwcywgYW5kIEVsYXN0aWMgTmV0d29yayBJbnRlcmZhY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NDbHVzdGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0NsdXN0ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgYXR0YWNoZWQgdG8gdGhlIEVLUyBDbHVzdGVyIFJvbGUgdGhhdCBncmFudHMgcGVybWlzc2lvbnMgdG8gbWFuYWdlIHRoZSBjbHVzdGVyJ3MgY29tcHV0ZSByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU0NvbXB1dGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTQ29tcHV0ZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBBbWF6b24gRUtTIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIGZvciBFS1MgY29ubmVjdG9yICovXG4gICAgcHVibGljIEFtYXpvbkVLU0Nvbm5lY3RvclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0Nvbm5lY3RvclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byB2aWV3IHRoZSBkYXNoYm9hcmQgaW4gdGhlIEFtYXpvbiBFS1MgY29uc29sZS4gVGhlIGRhc2hib2FyZCBhZ2dyZWdhdGVzIGluZm9ybWF0aW9uIGFib3V0IG11bHRpcGxlIGNsdXN0ZXJzIGFuZCByZWxhdGVkIHJlc291cmNlcyB1c2luZyBBV1MgT3JnYW5pemF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTRGFzaGJvYXJkQ29uc29sZVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0Rhc2hib2FyZENvbnNvbGVSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGVuYWJsZXMgdGhlIEFtYXpvbiBFS1MgRGFzaGJvYXJkIHRvIGFjY2VzcyBhbmQgZGlzcGxheSBvcmdhbml6YXRpb24td2lkZSBpbmZvcm1hdGlvbi4gVGhlIHBvbGljeSBhbGxvd3MgdGhlIEVLUyBEYXNoYm9hcmQgc2VydmljZSB0byBnYXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgeW91ciBBV1MgT3JnYW5pemF0aW9ucyBzdHJ1Y3R1cmUgYW5kIGFjY291bnRzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NEYXNoYm9hcmRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NEYXNoYm9hcmRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBvdGhlciBBV1Mgc2VydmljZSByZXNvdXJjZXMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gcnVuIEFtYXpvbiBFS1MgcG9kcyBvbiBBV1MgRmFyZ2F0ZSAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NGYXJnYXRlUG9kRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NGYXJnYXRlUG9kRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBuZWNlc3NhcnkgcGVybWlzc2lvbnMgdG8gQW1hem9uIEVLUyB0byBydW4gZmFyZ2F0ZSB0YXNrcyAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NGb3JGYXJnYXRlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTRm9yRmFyZ2F0ZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGF0dGFjaGVkIHRvIHRoZSBFS1MgQ2x1c3RlciBSb2xlIHRoYXQgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIG1hbmFnZSB0aGUgY2x1c3RlcidzIGxvYWQgYmFsYW5jaW5nIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTTG9hZEJhbGFuY2luZ1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NMb2FkQmFsYW5jaW5nUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gRUtTIGxvY2FsIGNsdXN0ZXIncyBjb250cm9sLXBsYW5lIGluc3RhbmNlcyBydW5uaW5nIGluIHlvdXIgYWNjb3VudCB0byBtYW5hZ2UgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NMb2NhbE91dHBvc3RDbHVzdGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU0xvY2FsT3V0cG9zdENsdXN0ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIEVLUyBMb2NhbCB0byBjYWxsIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTTG9jYWxPdXRwb3N0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTTG9jYWxPdXRwb3N0U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBBbWF6b24gRUtTIE1DUCBzZXJ2aWNlLiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gdXNlIG9ubHkgcmVhZC1vbmx5IHRvb2xzIGluIHRoZSBFS1MgTUNQIHNlcnZpY2UgbWVhbnQgZm9yIG9ic2VydmFiaWxpdHksIHRyb3VibGVzaG9vdGluZywgcmV0cmlldmluZyBFS1MgcmVzb3VyY2UgaW5mb3JtYXRpb24sIGFuZCBnZXR0aW5nIEVLUy1vcHRpbWl6ZWQgc3VnZ2VzdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU01DUFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU01DUFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGF0dGFjaGVkIHRvIHRoZSBFS1MgQ2x1c3RlciBSb2xlIHRoYXQgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIG1hbmFnZSB0aGUgY2x1c3RlcidzIG5ldHdvcmtpbmcgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FS1NOZXR3b3JraW5nUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU05ldHdvcmtpbmdQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgZm9yIEt1YmVybmV0ZXMgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMgdG8gb3BlcmF0ZSBFS1MgQ2x1c3RlcnMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU1NlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTU2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEEgU2VydmljZS1MaW5rZWQgUm9sZSByZXF1aXJlZCBmb3IgQW1hem9uIEVLUyB0byBjYWxsIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRUtTU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdXNlZCBieSBWUEMgUmVzb3VyY2UgQ29udHJvbGxlciB0byBtYW5hZ2UgRU5JIGFuZCBJUHMgZm9yIHdvcmtlciBub2Rlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTVlBDUmVzb3VyY2VDb250cm9sbGVyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU1ZQQ1Jlc291cmNlQ29udHJvbGxlcik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBBbWF6b24gRUtTIHdvcmtlciBub2RlcyB0byBjb25uZWN0IHRvIEFtYXpvbiBFS1MgQ2x1c3RlcnMuICovXG4gICAgcHVibGljIEFtYXpvbkVLU1dvcmtlck5vZGVNaW5pbWFsUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVLU1dvcmtlck5vZGVNaW5pbWFsUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIEFtYXpvbiBFS1Mgd29ya2VyIG5vZGVzIHRvIGNvbm5lY3QgdG8gQW1hem9uIEVLUyBDbHVzdGVycy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRUtTV29ya2VyTm9kZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FS1NXb3JrZXJOb2RlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEVsYXN0aUNhY2hlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpQ2FjaGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aUNhY2hlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEVsYXN0aUNhY2hlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpQ2FjaGVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGlDYWNoZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEFtYXpvbiBFQ1IgUHVibGljIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljQ29udGFpbmVyUmVnaXN0cnlQdWJsaWNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNDb250YWluZXJSZWdpc3RyeVB1YmxpY0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRUNSIFB1YmxpYyByZXBvc2l0b3JpZXMsIGJ1dCBkb2VzIG5vdCBhbGxvdyByZXBvc2l0b3J5IGRlbGV0aW9uIG9yIHBvbGljeSBjaGFuZ2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljQ29udGFpbmVyUmVnaXN0cnlQdWJsaWNQb3dlclVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY0NvbnRhaW5lclJlZ2lzdHJ5UHVibGljUG93ZXJVc2VyKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gRUNSIFB1YmxpYyByZXBvc2l0b3JpZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNDb250YWluZXJSZWdpc3RyeVB1YmxpY1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNDb250YWluZXJSZWdpc3RyeVB1YmxpY1JlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcm9vdCBjbGllbnQgYWNjZXNzIHRvIGFuIEFtYXpvbiBFRlMgZmlsZSBzeXN0ZW0gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1DbGllbnRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtQ2xpZW50RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBjbGllbnQgYWNjZXNzIHRvIGFuIEFtYXpvbiBFRlMgZmlsZSBzeXN0ZW0gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1DbGllbnRSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljRmlsZVN5c3RlbUNsaWVudFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBhbmQgd3JpdGUgY2xpZW50IGFjY2VzcyB0byBhbiBBbWF6b24gRUZTIGZpbGUgc3lzdGVtICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtQ2xpZW50UmVhZFdyaXRlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtQ2xpZW50UmVhZFdyaXRlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEVGUyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljRmlsZVN5c3RlbUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBFRlMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljRmlsZVN5c3RlbVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNGaWxlU3lzdGVtUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIEVsYXN0aWMgRmlsZSBTeXN0ZW0gdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljRmlsZVN5c3RlbVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGN1c3RvbWVycyB0byB1c2UgQVdTIFN5c3RlbXMgTWFuYWdlciB0byBhdXRvbWF0aWNhbGx5IG1hbmFnZSBBbWF6b24gRUZTIHV0aWxpdGllcyAoYW1hem9uLWVmcy11dGlscykgcGFja2FnZSBvbiB0aGVpciBFQzIgaW5zdGFuY2VzLCBhbmQgdXNlIENsb3VkV2F0Y2hMb2cgdG8gZ2V0IEVGUyBmaWxlIHN5c3RlbSBtb3VudCBzdWNjZXNzL2ZhaWx1cmUgbm90aWZpY2F0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1zVXRpbHMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY0ZpbGVTeXN0ZW1zVXRpbHMpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEFtYXpvbiBFbGFzdGljIE1hcFJlZHVjZSBFZGl0b3JzIHNlcnZpY2Ugcm9sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY01hcFJlZHVjZUVkaXRvcnNSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VFZGl0b3JzUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBFbGFzdGljIE1hcFJlZHVjZSBmb3IgQXV0byBTY2FsaW5nLiBSb2xlIHRvIGFsbG93IEF1dG8gU2NhbGluZyB0byBhZGQgYW5kIHJlbW92ZSBpbnN0YW5jZXMgZnJvbSB5b3VyIEVNUiBjbHVzdGVyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljTWFwUmVkdWNlZm9yQXV0b1NjYWxpbmdSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNNYXBSZWR1Y2Vmb3JBdXRvU2NhbGluZ1JvbGUpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEFtYXpvbiBFbGFzdGljIE1hcFJlZHVjZSBmb3IgRUMyIHNlcnZpY2Ugcm9sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY01hcFJlZHVjZWZvckVDMlJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY01hcFJlZHVjZWZvckVDMlJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBvbiBhIGRlcHJlY2F0aW9uIHBhdGguIFNlZSBkb2N1bWVudGF0aW9uIGZvciBndWlkYW5jZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Vtci9sYXRlc3QvTWFuYWdlbWVudEd1aWRlL2Vtci1tYW5hZ2VkLWlhbS1wb2xpY2llcy5odG1sLiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gRWxhc3RpYyBNYXBSZWR1Y2UgYW5kIHVuZGVybHlpbmcgc2VydmljZXMgdGhhdCBpdCByZXF1aXJlcyBzdWNoIGFzIEVDMiBhbmQgUzMgKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY01hcFJlZHVjZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY01hcFJlZHVjZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdG8gYWxsb3cgRU1SIHRvIGNyZWF0ZSwgZGVzY3JpYmUgYW5kIGRlbGV0ZSBFQzIgcGxhY2VtZW50IGdyb3Vwcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY01hcFJlZHVjZVBsYWNlbWVudEdyb3VwUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VQbGFjZW1lbnRHcm91cFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEVsYXN0aWMgTWFwUmVkdWNlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY01hcFJlZHVjZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIG9uIGEgZGVwcmVjYXRpb24gcGF0aC4gU2VlIGRvY3VtZW50YXRpb24gZm9yIGd1aWRhbmNlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZW1yL2xhdGVzdC9NYW5hZ2VtZW50R3VpZGUvZW1yLW1hbmFnZWQtaWFtLXBvbGljaWVzLmh0bWwuICBEZWZhdWx0IHBvbGljeSBmb3IgdGhlIEFtYXpvbiBFbGFzdGljIE1hcFJlZHVjZSBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNNYXBSZWR1Y2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgQW1hem9uIEVsYXN0aWNzZWFyY2ggU2VydmljZSB0byBhY2Nlc3Mgb3RoZXIgQVdTIHNlcnZpY2VzIHN1Y2ggYXMgRUMyIE5ldHdvcmtpbmcgQVBJcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRWxhc3RpY3NlYXJjaFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVsYXN0aWNzZWFyY2hTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB1c2VycyBmdWxsIGFjY2VzcyB0byBFbGFzdGljIFRyYW5zY29kZXIgYW5kIHRoZSBhY2Nlc3MgdG8gYXNzb2NpYXRlZCBzZXJ2aWNlcyB0aGF0IGlzIHJlcXVpcmVkIGZvciBmdWxsIEVsYXN0aWMgVHJhbnNjb2RlciBmdW5jdGlvbmFsaXR5LiAqL1xuICAgIHB1YmxpYyBBbWF6b25FbGFzdGljVHJhbnNjb2RlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY1RyYW5zY29kZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHVzZXJzIHBlcm1pc3Npb24gdG8gY2hhbmdlIHByZXNldHMsIHN1Ym1pdCBqb2JzLCBhbmQgdmlldyBFbGFzdGljIFRyYW5zY29kZXIgc2V0dGluZ3MuIFRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIHNvbWUgcmVhZC1vbmx5IGFjY2VzcyB0byBzb21lIG90aGVyIHNlcnZpY2VzIHJlcXVpcmVkIHRvIHVzZSB0aGUgRWxhc3RpYyBUcmFuc2NvZGUgY29uc29sZSwgaW5jbHVkaW5nIFMzLCBJQU0sIGFuZCBTTlMuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNUcmFuc2NvZGVySm9ic1N1Ym1pdHRlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljVHJhbnNjb2RlckpvYnNTdWJtaXR0ZXIpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdXNlcnMgcmVhZC1vbmx5IGFjY2VzcyB0byBFbGFzdGljIFRyYW5zY29kZXIgYW5kIGxpc3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNUcmFuc2NvZGVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRWxhc3RpY1RyYW5zY29kZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgcG9saWN5IGZvciB0aGUgQW1hem9uIEVsYXN0aWMgVHJhbnNjb2RlciBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkVsYXN0aWNUcmFuc2NvZGVyUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FbGFzdGljVHJhbnNjb2RlclJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIGFjdGlvbnMgdGhhdCBFTVIgcmVxdWlyZXMgdG8gdGVybWluYXRlIGFuZCBkZWxldGUgQVdTIEVDMiByZXNvdXJjZXMgaWYgdGhlIEVNUiBTZXJ2aWNlIHJvbGUgaGFzIGxvc3QgdGhhdCBhYmlsaXR5LiAqL1xuICAgIHB1YmxpYyBBbWF6b25FTVJDbGVhbnVwUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVNUkNsZWFudXBQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlIHJlc291cmNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBydW4gQW1hem9uIEVNUiAqL1xuICAgIHB1YmxpYyBBbWF6b25FTVJDb250YWluZXJzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRU1SQ29udGFpbmVyc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEVNUiAqL1xuICAgIHB1YmxpYyBBbWF6b25FTVJGdWxsQWNjZXNzUG9saWN5VjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRU1SRnVsbEFjY2Vzc1BvbGljeVYyKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRU1SIGFuZCB0aGUgYXNzb2NpYXRlZCBDbG91ZFdhdGNoIE1ldHJpY3MuICovXG4gICAgcHVibGljIEFtYXpvbkVNUlJlYWRPbmx5QWNjZXNzUG9saWN5VjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRU1SUmVhZE9ubHlBY2Nlc3NQb2xpY3lWMik7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhY2Nlc3MgdG8gb3RoZXIgQVdTIHNlcnZpY2UgcmVzb3VyY2VzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIHJ1biBBbWF6b24gRU1SU2VydmVybGVzcyAqL1xuICAgIHB1YmxpYyBBbWF6b25FTVJTZXJ2ZXJsZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRU1SU2VydmVybGVzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgdXNlZCBmb3IgdGhlIEFtYXpvbiBFTVIgU2VydmljZSBSb2xlIGFuZCBzaG91bGQgTk9UIGJlIHVzZWQgZm9yIGFueSBvdGhlciBJQU0gdXNlcnMgb3Igcm9sZXMgaW4geW91ciBhY2NvdW50LiBUaGUgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byBjcmVhdGUgYW5kIG1hbmFnZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIEVNUiBhbmQgcmVsYXRlZCBzZXJ2aWNlcyBuZWNlc3NhcnkgZm9yIHRoZSBvcGVyYXRpb24gb2YgeW91ciBFTVIgY2x1c3Rlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uRU1SU2VydmljZVBvbGljeVYyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVNUlNlcnZpY2VQb2xpY3lWMik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIHByb3Zpc2lvbiBhbmQgbWFuYWdlIE5ldHdvcmsgTG9hZCBCYWxhbmNlcnMsIFZQQyBlbmRwb2ludCBzZXJ2aWNlcywgYW5kIHNlY3VyaXR5IGdyb3VwcyByZXF1aXJlZCBmb3IgQW1hem9uIEVNUiBTcGFyayBDb25uZWN0IGludGVyYWN0aXZlIHNlc3Npb25zIG9uIEVNUiBvbiBFQzIgY2x1c3RlcnMuICovXG4gICAgcHVibGljIEFtYXpvbkVNUlNlcnZpY2VQb2xpY3lGb3JTZXNzaW9ucygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FTVJTZXJ2aWNlUG9saWN5Rm9yU2Vzc2lvbnMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBsaW1pdGVkIGFjY2VzcyB0byB0aGUgQW1hem9uIENvZ25pdG8gY29uZmlndXJhdGlvbiBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FU0NvZ25pdG9BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRVNDb2duaXRvQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBFUyBjb25maWd1cmF0aW9uIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFtYXpvbkVTRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FU0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBBbWF6b24gRVMgY29uZmlndXJhdGlvbiBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FU1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkVTUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRXZlbnRCcmlkZ2UgdG8gYWNjZXNzIFNlY3JldCBNYW5hZ2VyIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uRXZlbnRCcmlkZ2VBcGlEZXN0aW5hdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FdmVudEJyaWRnZUFwaURlc3RpbmF0aW9uc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEV2ZW50QnJpZGdlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FdmVudEJyaWRnZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRXZlbnRCcmlkZ2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEV2ZW50QnJpZGdlIFBpcGVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FdmVudEJyaWRnZVBpcGVzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FdmVudEJyaWRnZVBpcGVzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhbmQgb3BlcmF0b3IgKGFiaWxpdHkgdG8gU3RvcCBhbmQgU3RhcnQgcnVubmluZyBQaXBlcykgYWNjZXNzIHRvIEFtYXpvbiBFdmVudEJyaWRnZSBQaXBlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRXZlbnRCcmlkZ2VQaXBlc09wZXJhdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkV2ZW50QnJpZGdlUGlwZXNPcGVyYXRvckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIEV2ZW50QnJpZGdlIFBpcGVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25FdmVudEJyaWRnZVBpcGVzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRXZlbnRCcmlkZ2VQaXBlc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRXZlbnRCcmlkZ2UuICovXG4gICAgcHVibGljIEFtYXpvbkV2ZW50QnJpZGdlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRXZlbnRCcmlkZ2VSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBBbWF6b25FdmVudEJyaWRnZVNjaGVkdWxlckZ1bGxBY2Nlc3MgbWFuYWdlZCBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHVzZSBhbGwgRXZlbnRCcmlkZ2UgU2NoZWR1bGVyIGFjdGlvbnMgZm9yIHNjaGVkdWxlcywgYW5kIHNjaGVkdWxlIGdyb3Vwcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRXZlbnRCcmlkZ2VTY2hlZHVsZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkV2ZW50QnJpZGdlU2NoZWR1bGVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBBbWF6b25FdmVudEJyaWRnZVNjaGVkdWxlclJlYWRPbmx5QWNjZXNzIG1hbmFnZWQgcG9saWN5IGdyYW50cyByZWFkLW9ubHkgcGVybWlzc2lvbnMgdG8gdmlldyBkZXRhaWxzIGFib3V0IHlvdXIgc2NoZWR1bGVzIGFuZCBzY2hlZHVsZSBncm91cHMgKi9cbiAgICBwdWJsaWMgQW1hem9uRXZlbnRCcmlkZ2VTY2hlZHVsZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25FdmVudEJyaWRnZVNjaGVkdWxlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEV2ZW50QnJpZGdlIFNjaGVtYXMuICovXG4gICAgcHVibGljIEFtYXpvbkV2ZW50QnJpZGdlU2NoZW1hc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRXZlbnRCcmlkZ2VTY2hlbWFzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEV2ZW50QnJpZGdlIFNjaGVtYXMuICovXG4gICAgcHVibGljIEFtYXpvbkV2ZW50QnJpZGdlU2NoZW1hc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkV2ZW50QnJpZGdlU2NoZW1hc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIE1hbmFnZWQgUnVsZXMgY3JlYXRlZCBieSBBbWF6b24gRXZlbnRCcmlkZ2Ugc2NoZW1hcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uRXZlbnRCcmlkZ2VTY2hlbWFzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRXZlbnRCcmlkZ2VTY2hlbWFzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gRVZTIHRvIG1hbmFnZSByZXNvdXJjZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQW1hem9uRVZTU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRVZTU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdG8gZW5hYmxlIEFXUyBGSVMgdG8gbWFuYWdlIG1vbml0b3JpbmcgYW5kIHJlc291cmNlIHNlbGVjdGlvbiBmb3IgZXhwZXJpbWVudHMuICovXG4gICAgcHVibGljIEFtYXpvbkZJU1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZJU1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR2l2ZXMgYWNjZXNzIHRvIGFsbCBhY3Rpb25zIGZvciBBbWF6b24gRm9yZWNhc3QgKi9cbiAgICBwdWJsaWMgQW1hem9uRm9yZWNhc3RGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZvcmVjYXN0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdpdmVzIGFjY2VzcyB0byBhbGwgYWN0aW9ucyBmb3IgQW1hem9uIEZyYXVkIERldGVjdG9yICovXG4gICAgcHVibGljIEFtYXpvbkZyYXVkRGV0ZWN0b3JGdWxsQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZyYXVkRGV0ZWN0b3JGdWxsQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRnVsbCBBY2Nlc3MgUG9saWN5IGZvciBBbWF6b24gRnJlZVJUT1MgKi9cbiAgICBwdWJsaWMgQW1hem9uRnJlZVJUT1NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZyZWVSVE9TRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB1c2VyIHRvIGFjY2VzcyBBbWF6b24gRnJlZVJUT1MgT1RBIFVwZGF0ZSAqL1xuICAgIHB1YmxpYyBBbWF6b25GcmVlUlRPU09UQVVwZGF0ZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25GcmVlUlRPU09UQVVwZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBGU3ggYW5kIGFjY2VzcyB0byByZWxhdGVkIEFXUyBzZXJ2aWNlcyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkZTeENvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZTeENvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gRlN4IGFuZCBhY2Nlc3MgdG8gcmVsYXRlZCBBV1Mgc2VydmljZXMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25GU3hDb25zb2xlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRlN4Q29uc29sZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEZTeCBhbmQgYWNjZXNzIHRvIHJlbGF0ZWQgQVdTIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25GU3hGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZTeEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBGU3guICovXG4gICAgcHVibGljIEFtYXpvbkZTeFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkZTeFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBGU3ggdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQW1hem9uRlN4U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uRlN4U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gR2xhY2llciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkdsYWNpZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkdsYWNpZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gR2xhY2llciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbkdsYWNpZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25HbGFjaWVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgYWNjZXNzIHRvIEFtYXpvbiBBdGhlbmEgYW5kIHRoZSBkZXBlbmRlbmNpZXMgbmVlZGVkIHRvIGVuYWJsZSBxdWVyeWluZyBhbmQgd3JpdGluZyByZXN1bHRzIHRvIHMzIGZyb20gdGhlIEFtYXpvbiBBdGhlbmEgcGx1Z2luIGluIEFtYXpvbiBHcmFmYW5hLiAqL1xuICAgIHB1YmxpYyBBbWF6b25HcmFmYW5hQXRoZW5hQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkdyYWZhbmFBdGhlbmFBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgYWNjZXNzIHRvIEFtYXpvbiBDbG91ZFdhdGNoIGFuZCB0aGUgZGVwZW5kZW5jaWVzIG5lZWRlZCB0byB1c2UgQ2xvdWRXYXRjaCBhcyBhIGRhdGFzb3VyY2Ugd2l0aGluIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEuICovXG4gICAgcHVibGljIEFtYXpvbkdyYWZhbmFDbG91ZFdhdGNoQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkdyYWZhbmFDbG91ZFdhdGNoQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHNjb3BlZCBhY2Nlc3MgdG8gQW1hem9uIFJlZHNoaWZ0IGFuZCB0aGUgZGVwZW5kZW5jaWVzIG5lZWRlZCB0byB1c2UgdGhlIEFtYXpvbiBSZWRzaGlmdCBwbHVnaW4gaW4gQW1hem9uIEdyYWZhbmEuICovXG4gICAgcHVibGljIEFtYXpvbkdyYWZhbmFSZWRzaGlmdEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25HcmFmYW5hUmVkc2hpZnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIFJlc291cmNlcyBtYW5hZ2VkIG9yIHVzZWQgYnkgQW1hem9uIEdyYWZhbmEuICovXG4gICAgcHVibGljIEFtYXpvbkdyYWZhbmFTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25HcmFmYW5hU2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB1c2UgQW1hem9uIEd1YXJkRHV0eSAqL1xuICAgIHB1YmxpYyBBbWF6b25HdWFyZER1dHlGdWxsQWNjZXNzVjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uR3VhcmREdXR5RnVsbEFjY2Vzc1YyKTtcbiAgICB9XG5cbiAgICAvKiogR3VhcmREdXR5IG1hbHdhcmUgcHJvdGVjdGlvbiB1c2VzIHRoZSBzZXJ2aWNlLWxpbmtlZCByb2xlIChTTFIpIG5hbWVkIEFXU1NlcnZpY2VSb2xlRm9yQW1hem9uR3VhcmREdXR5TWFsd2FyZVByb3RlY3Rpb24uIFRoaXMgc2VydmljZS1saW5rZWQgcm9sZSBhbGxvd3MgR3VhcmREdXR5IG1hbHdhcmUgcHJvdGVjdGlvbiB0byBwZXJmb3JtIGFnZW50LWxlc3Mgc2NhbnMgdG8gZGV0ZWN0IG1hbHdhcmUuIEl0IGFsbG93cyBHdWFyZER1dHkgdG8gY3JlYXRlIHNuYXBzaG90cyBpbiB5b3VyIGFjY291bnQsIGFuZCBzaGFyZSB0aGUgc25hcHNob3RzIHdpdGggdGhlIEd1YXJkRHV0eSBzZXJ2aWNlIGFjY291bnQgdG8gc2NhbiBmb3IgbWFsd2FyZS4gSXQgZXZhbHVhdGVzIHRoZXNlIHNoYXJlZCBzbmFwc2hvdHMgYW5kIGluY2x1ZGVzIHRoZSByZXRyaWV2ZWQgRUMyIGluc3RhbmNlIG1ldGFkYXRhIGluIHRoZSBHdWFyZER1dHkgTWFsd2FyZSBQcm90ZWN0aW9uIGZpbmRpbmdzLiBUaGUgQVdTU2VydmljZVJvbGVGb3JBbWF6b25HdWFyZER1dHlNYWx3YXJlUHJvdGVjdGlvbiBzZXJ2aWNlLWxpbmtlZCByb2xlIHRydXN0cyB0aGUgbWFsd2FyZS1wcm90ZWN0aW9uLmd1YXJkZHV0eS5hbWF6b25hd3MuY29tIHNlcnZpY2UgdG8gYXNzdW1lIHRoZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25HdWFyZER1dHlNYWx3YXJlUHJvdGVjdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkd1YXJkRHV0eU1hbHdhcmVQcm90ZWN0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBHdWFyZER1dHkgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFtYXpvbkd1YXJkRHV0eVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkd1YXJkRHV0eVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gR3VhcmQgRHV0eSAqL1xuICAgIHB1YmxpYyBBbWF6b25HdWFyZER1dHlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25HdWFyZER1dHlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBIZWFsdGhMYWtlIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFtYXpvbkhlYWx0aExha2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkhlYWx0aExha2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gSGVhbHRoTGFrZSBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25IZWFsdGhMYWtlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSGVhbHRoTGFrZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSG9uZXljb2RlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgdGhlIFNESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uSG9uZXljb2RlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Ib25leWNvZGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBIb25leWNvZGUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCB0aGUgU0RLLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Ib25leWNvZGVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Ib25leWNvZGVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEEgc2VydmljZS1saW5rZWQgcm9sZSByZXF1aXJlZCBmb3IgQW1hem9uIEhvbmV5Y29kZSB0byBhY2Nlc3MgeW91ciByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbkhvbmV5Y29kZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkhvbmV5Y29kZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSG9uZXljb2RlIFRlYW0gQXNzb2NpYXRpb24gdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCB0aGUgU0RLLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Ib25leWNvZGVUZWFtQXNzb2NpYXRpb25GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkhvbmV5Y29kZVRlYW1Bc3NvY2lhdGlvbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEhvbmV5Y29kZSBUZWFtIEFzc29jaWF0aW9uIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgdGhlIFNESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uSG9uZXljb2RlVGVhbUFzc29jaWF0aW9uUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSG9uZXljb2RlVGVhbUFzc29jaWF0aW9uUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBIb25leWNvZGUgV29ya2Jvb2sgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCB0aGUgU0RLLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Ib25leWNvZGVXb3JrYm9va0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSG9uZXljb2RlV29ya2Jvb2tGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBIb25leWNvZGUgV29ya2Jvb2sgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCB0aGUgU0RLLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Ib25leWNvZGVXb3JrYm9va1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkhvbmV5Y29kZVdvcmtib29rUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQW1hem9uIEluc3BlY3RvciBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIG5lZWRlZCB0byBwZXJmb3JtIGFnZW50LWxlc3Mgc2VjdXJpdHkgYXNzZXNzbWVudHMgKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yMkFnZW50bGVzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkluc3BlY3RvcjJBZ2VudGxlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBBbWF6b24gSW5zcGVjdG9yIGFjY2VzcyB0byBBV1MgU2VydmljZXMgbmVlZGVkIHRvIHBlcmZvcm0gc2VjdXJpdHkgYXNzZXNzbWVudHMgZm9yIEFNSSAqL1xuICAgIHB1YmxpYyBBbWF6b25JbnNwZWN0b3IyQW1pU2NhblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkluc3BlY3RvcjJBbWlTY2FuU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gSW5zcGVjdG9yIGFuZCBhY2Nlc3MgdG8gb3RoZXIgcmVsYXRlZCBzZXJ2aWNlcyBzdWNoIGFzIG9yZ2FuaXphdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvbkluc3BlY3RvcjJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkluc3BlY3RvcjJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEluc3BlY3RvciBhbmQgYWNjZXNzIHRvIG90aGVyIHJlbGF0ZWQgc2VydmljZXMgc3VjaCBhcyBvcmdhbml6YXRpb25zIHdpdGggcmVzdHJpY3RpdmUgb3JnYW5pemF0aW9uYWwgYWNjZXNzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25JbnNwZWN0b3IyRnVsbEFjY2Vzc1YyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkluc3BlY3RvcjJGdWxsQWNjZXNzVjIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIGlzIGEgbWFuYWdlZCBwb2xpY3kgdGhhdCBjdXN0b21lciBzaG91bGQgYXR0YWNoIHRvIHRoZWlyIHJvbGVzIHRvIGNvbW11bmljYXRlIHdpdGggaW5zcGVjdG9yIHNlcnZpY2UgZm9yIENJUyBzY2FucyAqL1xuICAgIHB1YmxpYyBBbWF6b25JbnNwZWN0b3IyTWFuYWdlZENpc1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25JbnNwZWN0b3IyTWFuYWdlZENpc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBjb21tdW5pY2F0ZSB3aXRoIEluc3BlY3RvcjIgVGVsZW1ldHJ5IENoYW5uZWwgKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yMk1hbmFnZWRUZWxlbWV0cnlQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSW5zcGVjdG9yMk1hbmFnZWRUZWxlbWV0cnlQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBBbWF6b24gaW5zcGVjdG9yMiBzZXJ2aWNlIGFuZCByZWxldmFudCBzdXBwb3J0IHNlcnZpY2VzICovXG4gICAgcHVibGljIEFtYXpvbkluc3BlY3RvcjJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25JbnNwZWN0b3IyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQW1hem9uIEluc3BlY3RvciBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIG5lZWRlZCB0byBwZXJmb3JtIHNlY3VyaXR5IGFzc2Vzc21lbnRzICovXG4gICAgcHVibGljIEFtYXpvbkluc3BlY3RvcjJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25JbnNwZWN0b3IyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgZm9yIEFtYXpvbiBJbnNwZWN0b3IgdG8gcGVyZm9ybSBhY3Rpb25zIG9uIHlvdXIgYmVoYWxmIGZvciBtdWx0aS1jbG91ZCByZXNvdXJjZSBzY2FubmluZy4gKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yMlRoaXJkUGFydHlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25JbnNwZWN0b3IyVGhpcmRQYXJ0eVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEluc3BlY3Rvci4gKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25JbnNwZWN0b3JGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gSW5zcGVjdG9yLiAqL1xuICAgIHB1YmxpYyBBbWF6b25JbnNwZWN0b3JSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25JbnNwZWN0b3JSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBBbWF6b24gSW5zcGVjdG9yIGFjY2VzcyB0byBBV1MgU2VydmljZXMgbmVlZGVkIHRvIHBlcmZvcm0gc2VjdXJpdHkgYXNzZXNzbWVudHMgKi9cbiAgICBwdWJsaWMgQW1hem9uSW5zcGVjdG9yU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uSW5zcGVjdG9yU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gS2VuZHJhIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uS2VuZHJhRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25LZW5kcmFGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gS2VuZHJhIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uS2VuZHJhUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2VuZHJhUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBLZXlzcGFjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uS2V5c3BhY2VzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25LZXlzcGFjZXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBLZXlzcGFjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uS2V5c3BhY2VzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2V5c3BhY2VzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIEtleXNwYWNlcyBhbmQgcmVsYXRlZCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIEFtYXpvbktleXNwYWNlc1JlYWRPbmx5QWNjZXNzVjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2V5c3BhY2VzUmVhZE9ubHlBY2Nlc3NWMik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBLaW5lc2lzIEFuYWx5dGljcyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbktpbmVzaXNBbmFseXRpY3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktpbmVzaXNBbmFseXRpY3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gS2luZXNpcyBBbmFseXRpY3MgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25LaW5lc2lzQW5hbHl0aWNzUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2luZXNpc0FuYWx5dGljc1JlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIEFtYXpvbiBLaW5lc2lzIEZpcmVob3NlIERlbGl2ZXJ5IFN0cmVhbXMuICovXG4gICAgcHVibGljIEFtYXpvbktpbmVzaXNGaXJlaG9zZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2luZXNpc0ZpcmVob3NlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIEFtYXpvbiBLaW5lc2lzIEZpcmVob3NlIERlbGl2ZXJ5IFN0cmVhbXMuICovXG4gICAgcHVibGljIEFtYXpvbktpbmVzaXNGaXJlaG9zZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktpbmVzaXNGaXJlaG9zZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIHN0cmVhbXMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25LaW5lc2lzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25LaW5lc2lzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIHN0cmVhbXMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25LaW5lc2lzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uS2luZXNpc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEtpbmVzaXMgVmlkZW8gU3RyZWFtcyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbktpbmVzaXNWaWRlb1N0cmVhbXNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktpbmVzaXNWaWRlb1N0cmVhbXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgS2luZXNpcyBWaWRlbyBTdHJlYW1zIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uS2luZXNpc1ZpZGVvU3RyZWFtc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbktpbmVzaXNWaWRlb1N0cmVhbXNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bGwgYWNjZXNzIHRvIEFXUyBMYXVuY2ggd2l6YXJkIGFuZCBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTGF1bmNoV2l6YXJkRnVsbEFjY2Vzc1YyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkxhdW5jaFdpemFyZEZ1bGxBY2Nlc3NWMik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBjdXN0b21lcnMgdG8gY2FsbCBMZXggcnVudGltZSBmcm9tIGNoYW5uZWxzICovXG4gICAgcHVibGljIEFtYXpvbkxleENoYW5uZWxzQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkxleENoYW5uZWxzQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIExleCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICBBbHNvIHByb3ZpZGVzIGFjY2VzcyB0byBjcmVhdGUgTGV4IFNlcnZpY2UgTGlua2VkIFJvbGVzIGFuZCBncmFudCBMZXggcGVybWlzc2lvbnMgdG8gaW52b2tlIGEgbGltaXRlZCBzZXQgb2YgTGFtYmRhIGZ1bmN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTGV4RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25MZXhGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gTGV4LiAqL1xuICAgIHB1YmxpYyBBbWF6b25MZXhSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25MZXhSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gTGV4IHRvIHJlcGxpY2F0ZSBMZXggcmVzb3VyY2VzIGFjcm9zcyByZWdpb25zIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25MZXhSZXBsaWNhdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25MZXhSZXBsaWNhdGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gTGV4IGNvbnZlcnNhdGlvbmFsIEFQSXMuICovXG4gICAgcHVibGljIEFtYXpvbkxleFJ1bkJvdHNPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkxleFJ1bkJvdHNPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgTGV4IFYyIGJvdHMgYWNjZXNzIHRvIGNhbGwgb3RoZXIgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25MZXhWMkJvdFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25MZXhWMkJvdFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBMb29rb3V0IGZvciBFcXVpcG1lbnQgb3BlcmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBbWF6b25Mb29rb3V0RXF1aXBtZW50RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Mb29rb3V0RXF1aXBtZW50RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIExvb2tvdXQgZm9yIEVxdWlwbWVudHMgKi9cbiAgICBwdWJsaWMgQW1hem9uTG9va291dEVxdWlwbWVudFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkxvb2tvdXRFcXVpcG1lbnRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdpdmVzIGFjY2VzcyB0byBhbGwgYWN0aW9ucyBmb3IgQW1hem9uIExvb2tvdXQgZm9yIE1ldHJpY3MgKi9cbiAgICBwdWJsaWMgQW1hem9uTG9va291dE1ldHJpY3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbkxvb2tvdXRNZXRyaWNzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdpdmVzIGFjY2VzcyB0byBhbGwgcmVhZC1vbmx5IGFjdGlvbnMgZm9yIEFtYXpvbiBMb29rb3V0IGZvciBNZXRyaWNzICovXG4gICAgcHVibGljIEFtYXpvbkxvb2tvdXRNZXRyaWNzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTG9va291dE1ldHJpY3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBMb29rb3V0IGZvciBWaXNpb24gYW5kIHNjb3BlZCBhY2Nlc3MgdG8gcmVxdWlyZWQgc2VydmljZSBhbmQgY29uc29sZSBkZXBlbmRlbmNpZXMuICovXG4gICAgcHVibGljIEFtYXpvbkxvb2tvdXRWaXNpb25Db25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Mb29rb3V0VmlzaW9uQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBMb29rb3V0IGZvciBWaXNpb24gYW5kIHNjb3BlZCBhY2Nlc3MgdG8gcmVxdWlyZWQgc2VydmljZSBhbmQgY29uc29sZSBkZXBlbmRlbmNpZXMuICovXG4gICAgcHVibGljIEFtYXpvbkxvb2tvdXRWaXNpb25Db25zb2xlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTG9va291dFZpc2lvbkNvbnNvbGVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBMb29rb3V0IGZvciBWaXNpb24gYW5kIHNjb3BlZCBhY2Nlc3MgdG8gcmVxdWlyZWQgZGVwZW5kZW5jaWVzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Mb29rb3V0VmlzaW9uRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Mb29rb3V0VmlzaW9uRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIExvb2tvdXQgZm9yIFZpc2lvbiBhbmQgc2NvcGVkIGFjY2VzcyB0byByZXF1aXJlZCBkZXBlbmRlbmNpZXMuICovXG4gICAgcHVibGljIEFtYXpvbkxvb2tvdXRWaXNpb25SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Mb29rb3V0VmlzaW9uUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdXNlcnMgcGVybWlzc2lvbiB0byByZXF1ZXN0IEFtYXpvbiBNYWNoaW5lIExlYXJuaW5nIGJhdGNoIHByZWRpY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNoaW5lTGVhcm5pbmdCYXRjaFByZWRpY3Rpb25zQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1hY2hpbmVMZWFybmluZ0JhdGNoUHJlZGljdGlvbnNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjcmVhdGUgYWNjZXNzIGZvciBub24tcHJlZGljdGlvbiBBbWF6b24gTWFjaGluZSBMZWFybmluZyByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbk1hY2hpbmVMZWFybmluZ0NyZWF0ZU9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaGluZUxlYXJuaW5nQ3JlYXRlT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBNYWNoaW5lIExlYXJuaW5nIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWFjaGluZUxlYXJuaW5nRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNoaW5lTGVhcm5pbmdGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHVzZXJzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGFuZCBkZWxldGUgdGhlIHJlYWwtdGltZSBlbmRwb2ludCBmb3IgQW1hem9uIE1hY2hpbmUgTGVhcm5pbmcgbW9kZWxzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNoaW5lTGVhcm5pbmdNYW5hZ2VSZWFsVGltZUVuZHBvaW50T25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNoaW5lTGVhcm5pbmdNYW5hZ2VSZWFsVGltZUVuZHBvaW50T25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIE1hY2hpbmUgTGVhcm5pbmcgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNoaW5lTGVhcm5pbmdSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNoaW5lTGVhcm5pbmdSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB1c2VycyBwZXJtaXNzaW9uIHRvIHJlcXVlc3QgQW1hem9uIE1hY2hpbmUgTGVhcm5pbmcgcmVhbC10aW1lIHByZWRpY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNoaW5lTGVhcm5pbmdSZWFsVGltZVByZWRpY3Rpb25Pbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1hY2hpbmVMZWFybmluZ1JlYWxUaW1lUHJlZGljdGlvbk9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgTWFjaGluZSBMZWFybmluZyB0byBjb25maWd1cmUgYW5kIHVzZSB5b3VyIFJlZHNoaWZ0IENsdXN0ZXJzIGFuZCBTMyBTdGFnaW5nIExvY2F0aW9ucyBmb3IgUmVkc2hpZnQgRGF0YSBTb3VyY2UuICovXG4gICAgcHVibGljIEFtYXpvbk1hY2hpbmVMZWFybmluZ1JvbGVmb3JSZWRzaGlmdERhdGFTb3VyY2VWMygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNoaW5lTGVhcm5pbmdSb2xlZm9yUmVkc2hpZnREYXRhU291cmNlVjMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTWFjaWUuICovXG4gICAgcHVibGljIEFtYXpvbk1hY2llRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNpZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgdGhlIHNlcnZpY2UtbGlua2VkIHJvbGUgb2YgQW1hem9uIE1hY2llLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NYWNpZUhhbmRzaGFrZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaWVIYW5kc2hha2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBNYWNpZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWFjaWVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNpZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIE1hY2llIHJlYWQtb25seSBhY2Nlc3MgdG8gcmVzb3VyY2UgZGVwZW5kZW5jaWVzIGluIHlvdXIgYWNjb3VudCBpbiBvcmRlciB0byBlbmFibGUgZGF0YSBhbmFseXNpcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTWFjaWVTZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYWNpZVNlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSBsaW5rZWQgcm9sZSBmb3IgQW1hem9uIE1hY2llICovXG4gICAgcHVibGljIEFtYXpvbk1hY2llU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFjaWVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBNYW5hZ2VkIEJsb2NrY2hhaW4gdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlICovXG4gICAgcHVibGljIEFtYXpvbk1hbmFnZWRCbG9ja2NoYWluQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFuYWdlZEJsb2NrY2hhaW5Db25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBNYW5hZ2VkIEJsb2NrY2hhaW4uICovXG4gICAgcHVibGljIEFtYXpvbk1hbmFnZWRCbG9ja2NoYWluRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NYW5hZ2VkQmxvY2tjaGFpbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBNYW5hZ2VkIEJsb2NrY2hhaW4uICovXG4gICAgcHVibGljIEFtYXpvbk1hbmFnZWRCbG9ja2NoYWluUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFuYWdlZEJsb2NrY2hhaW5SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gTWFuYWdlZCBCbG9ja2NoYWluICovXG4gICAgcHVibGljIEFtYXpvbk1hbmFnZWRCbG9ja2NoYWluU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWFuYWdlZEJsb2NrY2hhaW5TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIE1hbmFnZWQgQXBhY2hlIENhc3NhbmRyYSBTZXJ2aWNlICovXG4gICAgcHVibGljIEFtYXpvbk1DU0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTUNTRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gTWFuYWdlZCBBcGFjaGUgQ2Fzc2FuZHJhIFNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQW1hem9uTUNTUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTUNTUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgQVBJcyBpbiBBbWF6b24gTWVjaGFuaWNhbCBUdXJrLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NZWNoYW5pY2FsVHVya0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWVjaGFuaWNhbFR1cmtGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHJlYWQgb25seSBBUElzIGluIEFtYXpvbiBNZWNoYW5pY2FsIFR1cmsuICovXG4gICAgcHVibGljIEFtYXpvbk1lY2hhbmljYWxUdXJrUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWVjaGFuaWNhbFR1cmtSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBNZW1vcnlEQiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbk1lbW9yeURCRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NZW1vcnlEQkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBNZW1vcnlEQiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbk1lbW9yeURCUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTWVtb3J5REJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIHJlcG9ydHMgaW5jbHVkaW5nIGZpbmFuY2lhbCBkYXRhIGZvciBhbGwgYXBwbGljYXRpb24gcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Nb2JpbGVBbmFseXRpY3NGaW5hbmNpYWxSZXBvcnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTW9iaWxlQW5hbHl0aWNzRmluYW5jaWFsUmVwb3J0QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIGFwcGxpY2F0aW9uIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTW9iaWxlQW5hbHl0aWNzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Nb2JpbGVBbmFseXRpY3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBub24gZmluYW5jaWFsIHJlcG9ydHMgZm9yIGFsbCBhcHBsaWNhdGlvbiByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvbk1vYmlsZUFuYWx5dGljc05vbkZpbmFuY2lhbFJlcG9ydEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Nb2JpbGVBbmFseXRpY3NOb25GaW5hbmNpYWxSZXBvcnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB3cml0ZSBvbmx5IGFjY2VzcyB0byBwdXQgZXZlbnQgZGF0YSBmb3IgYWxsIGFwcGxpY2F0aW9uIHJlc291cmNlcy4gKFJlY29tbWVuZGVkIGZvciBTREsgaW50ZWdyYXRpb24pICovXG4gICAgcHVibGljIEFtYXpvbk1vYmlsZUFuYWx5dGljc1dyaXRlT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Nb2JpbGVBbmFseXRpY3NXcml0ZU9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBtYW5hZ2UgQW1hem9uIE1vbml0cm9uICovXG4gICAgcHVibGljIEFtYXpvbk1vbml0cm9uRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Nb25pdHJvbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b25NUSB2aWEgb3VyIEFQSS9TREsuICovXG4gICAgcHVibGljIEFtYXpvbk1RQXBpRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NUUFwaUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbk1RIHZpYSBvdXIgQVBJL1NESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTVFBcGlSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NUUFwaVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uTVEgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25NUUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVFGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b25NUSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvbk1RUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVFSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UgTGlua2VkIFJvbGUgUG9saWN5IGZvciBBV1MgQW1hem9uIE1RICovXG4gICAgcHVibGljIEFtYXpvbk1RU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVFTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgcmVhZG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBNU0sgQ29ubmVjdCAqL1xuICAgIHB1YmxpYyBBbWF6b25NU0tDb25uZWN0UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVNLQ29ubmVjdFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBmdWxsIGFjY2VzcyB0byBBbWF6b24gTVNLIGFuZCBvdGhlciByZXF1aXJlZCBwZXJtaXNzaW9ucyBmb3IgaXRzIGRlcGVuZGVuY2llcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTVNLRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NU0tGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSByZWFkb25seSBhY2Nlc3MgdG8gQW1hem9uIE1TSyAqL1xuICAgIHB1YmxpYyBBbWF6b25NU0tSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25NU0tSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gQWlyZmxvdyBTZXJ2ZXJsZXNzIFNlcnZpY2UgdG8gbWFuYWdlIG5ldHdvcmtpbmcgZm9yIHlvdXIgd29ya2Zsb3dzIGFuZCBhY2Nlc3Mgb3RoZXIgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFtYXpvbk1XQUFTZXJ2ZXJsZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uTVdBQVNlcnZlcmxlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBTZXJ2aWNlIExpbmtlZCBSb2xlIHVzZWQgYnkgQW1hem9uIE1hbmFnZWQgV29ya2Zsb3dzIGZvciBBcGFjaGUgQWlyZmxvdy4gKi9cbiAgICBwdWJsaWMgQW1hem9uTVdBQVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk1XQUFTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhY2Nlc3MgdG8gcmVzb3VyY2VzIG5lZWRlZCBieSBOaW1ibGUgU3R1ZGlvIExhdW5jaCBQcm9maWxlIHdvcmtlcnMuIEF0dGFjaCB0aGlzIHBvbGljeSB0byBFQzIgaW5zdGFuY2VzIGNyZWF0ZWQgYnkgTmltYmxlIFN0dWRpbyBCdWlsZGVyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25OaW1ibGVTdHVkaW9MYXVuY2hQcm9maWxlV29ya2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk5pbWJsZVN0dWRpb0xhdW5jaFByb2ZpbGVXb3JrZXIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgYWNjZXNzIHRvIEFtYXpvbiBOaW1ibGUgU3R1ZGlvIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHN0dWRpbyBhZG1pbiBhbmQgcmVsYXRlZCBzdHVkaW8gcmVzb3VyY2VzIGluIG90aGVyIHNlcnZpY2VzLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8gdGhlIEFkbWluIHJvbGUgYXNzb2NpYXRlZCB3aXRoIHlvdXIgc3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBBbWF6b25OaW1ibGVTdHVkaW9TdHVkaW9BZG1pbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25OaW1ibGVTdHVkaW9TdHVkaW9BZG1pbik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhY2Nlc3MgdG8gQW1hem9uIE5pbWJsZSBTdHVkaW8gcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3R1ZGlvIHVzZXIgYW5kIHJlbGF0ZWQgc3R1ZGlvIHJlc291cmNlcyBpbiBvdGhlciBzZXJ2aWNlcy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHRoZSBVc2VyIHJvbGUgYXNzb2NpYXRlZCB3aXRoIHlvdXIgc3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBBbWF6b25OaW1ibGVTdHVkaW9TdHVkaW9Vc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk5pbWJsZVN0dWRpb1N0dWRpb1VzZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgdG8gbWFuYWdlIEF1dG9ub21vdXMgRGF0YWJhc2UgcmVzb3VyY2VzIGluIE9yYWNsZSBEYXRhYmFzZUBBV1MuICovXG4gICAgcHVibGljIEFtYXpvbk9EQkF1dG9ub21vdXNEYXRhYmFzZUFkbWluKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9EQkF1dG9ub21vdXNEYXRhYmFzZUFkbWluKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIG1hbmFnZSBBdXRvbm9tb3VzIFZNIGNsdXN0ZXIgcmVzb3VyY2VzIGluIE9yYWNsZSBEYXRhYmFzZUBBV1MgKi9cbiAgICBwdWJsaWMgQW1hem9uT0RCQXV0b25vbW91c1ZtQ2x1c3RlckFkbWluKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9EQkF1dG9ub21vdXNWbUNsdXN0ZXJBZG1pbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBtYW5hZ2UgRXhhZGF0YSBJbmZyYXN0cnVjdHVyZSByZXNvdXJjZXMgaW4gT3JhY2xlIERhdGFiYXNlQEFXUyAqL1xuICAgIHB1YmxpYyBBbWF6b25PREJFeGFkYXRhSW5mcmFzdHJ1Y3R1cmVBZG1pbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PREJFeGFkYXRhSW5mcmFzdHJ1Y3R1cmVBZG1pbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBtYW5hZ2UgRXhhZGF0YSBWTSBjbHVzdGVyIHJlc291cmNlcyBpbiBPcmFjbGUgRGF0YWJhc2VAQVdTLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PREJFeGFkYXRhVm1DbHVzdGVyQWRtaW4oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT0RCRXhhZGF0YVZtQ2x1c3RlckFkbWluKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIG1hbmFnZSBFeGFzY2FsZSBzdG9yYWdlIHZhdWx0IHJlc291cmNlcyBpbiBPcmFjbGUgRGF0YWJhc2VAQVdTLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PREJFeGFzY2FsZVN0b3JhZ2VWYXVsdEFkbWluKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9EQkV4YXNjYWxlU3RvcmFnZVZhdWx0QWRtaW4pO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgdG8gbWFuYWdlIEV4YXNjYWxlIFZNIGNsdXN0ZXIgcmVzb3VyY2VzIGluIE9yYWNsZSBEYXRhYmFzZUBBV1MuICovXG4gICAgcHVibGljIEFtYXpvbk9EQkV4YXNjYWxlVm1DbHVzdGVyQWRtaW4oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT0RCRXhhc2NhbGVWbUNsdXN0ZXJBZG1pbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHJlc291cmNlcyBpbiBPcmFjbGUgRGF0YWJhc2VAQVdTICovXG4gICAgcHVibGljIEFtYXpvbk9EQkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT0RCRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBuZXR3b3JraW5nIHJlc291cmNlcyBmb3IgT3JhY2xlIERhdGFiYXNlQEFXUyAqL1xuICAgIHB1YmxpYyBBbWF6b25PREJOZXR3b3JrQWRtaW4oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT0RCTmV0d29ya0FkbWluKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBPcmFjbGUgRGF0YWJhc2VAQVdTIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25PREJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PREJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBPcmFjbGUgRGF0YWJhc2VAQVdTIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PREJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PREJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBPbWljcyBhbmQgb3RoZXIgcmVxdWlyZWQgQVdTIFNlcnZpY2VzLiBUaGlzIHBvbGljeSBhbGxvd3MgdGhlIHVzZXIgdG8gdmlldyBhbmQgYWNjZXB0IFJBTSBzaGFyZSBpbnZpdGF0aW9ucyB0byBhY2Nlc3MgcmVzb3VyY2VzIG91dHNpZGUgb2YgdGhlIHVzZXIncyBBV1MgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uT21pY3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9taWNzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gT21pY3MgKi9cbiAgICBwdWJsaWMgQW1hem9uT21pY3NSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PbWljc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zIHRoYXQgYWxsb3cgYWNjZXNzIHRvIGFsbCBBbWF6b24gT25lIEVudGVycHJpc2UgcmVzb3VyY2VzIGFuZCBvcGVyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PbmVFbnRlcnByaXNlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PbmVFbnRlcnByaXNlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBsaW1pdGVkIHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zIHRoYXQgYWxsb3cgZGV2aWNlIGluc3RhbGxhdGlvbiBhbmQgYWN0aXZhdGlvbi4gKi9cbiAgICBwdWJsaWMgQW1hem9uT25lRW50ZXJwcmlzZUluc3RhbGxlckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PbmVFbnRlcnByaXNlSW5zdGFsbGVyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHJlYWQgb25seSBwZXJtaXNzaW9ucyB0byBhbGwgQW1hem9uIE9uZSBFbnRlcnByaXNlIHJlc291cmNlcyBhbmQgb3BlcmF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uT25lRW50ZXJwcmlzZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9uZUVudGVycHJpc2VSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gT3BlblNlYXJjaCBEYXNoYm9hcmRzIFNlcnZpY2UgdG8gYWNjZXNzIG90aGVyIEFXUyBzZXJ2aWNlcyBzdWNoIGFzIENsb3VkV2F0Y2ggb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQW1hem9uT3BlblNlYXJjaERhc2hib2FyZHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25PcGVuU2VhcmNoRGFzaGJvYXJkc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIE9wZW5TZWFyY2ggRGlyZWN0UXVlcnkgU2VydmljZSB0byBhY2Nlc3MgQVdTIEdsdWUgQVBJcyBmb3IgY3JlYXRpbmcgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PcGVuU2VhcmNoRGlyZWN0UXVlcnlHbHVlQ3JlYXRlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9wZW5TZWFyY2hEaXJlY3RRdWVyeUdsdWVDcmVhdGVBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIE9wZW5TZWFyY2ggSW5nZXN0aW9uIHRvIGFjY2VzcyBvdGhlciBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFtYXpvbk9wZW5TZWFyY2hJbmdlc3Rpb25GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9wZW5TZWFyY2hJbmdlc3Rpb25GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byB0aGUgQW1hem9uIE9wZW5TZWFyY2ggSW5nZXN0aW9uIFNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQW1hem9uT3BlblNlYXJjaEluZ2VzdGlvblJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9wZW5TZWFyY2hJbmdlc3Rpb25SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gT3BlblNlYXJjaCBJbmdlc3Rpb24gU2VydmljZSB0byBhY2Nlc3Mgb3RoZXIgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PcGVuU2VhcmNoSW5nZXN0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT3BlblNlYXJjaEluZ2VzdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgQW1hem9uIE9wZW5TZWFyY2ggU2VydmVybGVzcyB0byBhY2Nlc3Mgb3RoZXIgQVdTIHNlcnZpY2VzIHN1Y2ggYXMgQ2xvdWRXYXRjaCBBUElzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PcGVuU2VhcmNoU2VydmVybGVzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9wZW5TZWFyY2hTZXJ2ZXJsZXNzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBDb2duaXRvIGNvbmZpZ3VyYXRpb24gc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uT3BlblNlYXJjaFNlcnZpY2VDb2duaXRvQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9wZW5TZWFyY2hTZXJ2aWNlQ29nbml0b0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBbWF6b24gT3BlblNlYXJjaCBTZXJ2aWNlIGNvbmZpZ3VyYXRpb24gc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uT3BlblNlYXJjaFNlcnZpY2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9wZW5TZWFyY2hTZXJ2aWNlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gdGhlIEFtYXpvbiBPcGVuU2VhcmNoIFNlcnZpY2UgY29uZmlndXJhdGlvbiBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PcGVuU2VhcmNoU2VydmljZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbk9wZW5TZWFyY2hTZXJ2aWNlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBBbWF6b24gT3BlblNlYXJjaCBTZXJ2aWNlIHRvIGFjY2VzcyBvdGhlciBBV1Mgc2VydmljZXMgc3VjaCBhcyBFQzIgTmV0d29ya2luZyBBUElzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25PcGVuU2VhcmNoU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uT3BlblNlYXJjaFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFBlcnNvbmFsaXplIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgU0RLLiBBbHNvIHByb3ZpZGVzIHNlbGVjdCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyAoZS5nLiwgUzMsIENsb3VkV2F0Y2gpLiAqL1xuICAgIHB1YmxpYyBBbWF6b25QZXJzb25hbGl6ZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUGVyc29uYWxpemVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBQb2xseSBzZXJ2aWNlIGFuZCByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvblBvbGx5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Qb2xseUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gUG9sbHkgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Qb2xseVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblBvbGx5UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgdG8gQVdTIE1hbmFnZWQgUHJvbWV0aGV1cyByZXNvdXJjZXMgaW4gdGhlIEFXUyBjb25zb2xlICovXG4gICAgcHVibGljIEFtYXpvblByb21ldGhldXNDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Qcm9tZXRoZXVzQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgdG8gQVdTIE1hbmFnZWQgUHJvbWV0aGV1cyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uUHJvbWV0aGV1c0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUHJvbWV0aGV1c0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgYWNjZXNzIHRvIHJ1biBxdWVyaWVzIGFnYWluc3QgQVdTIE1hbmFnZWQgUHJvbWV0aGV1cyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uUHJvbWV0aGV1c1F1ZXJ5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblByb21ldGhldXNRdWVyeUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB3cml0ZSBvbmx5IGFjY2VzcyB0byBBV1MgTWFuYWdlZCBQcm9tZXRoZXVzIHdvcmtzcGFjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uUHJvbWV0aGV1c1JlbW90ZVdyaXRlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblByb21ldGhldXNSZW1vdGVXcml0ZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIG1hbmFnZWQgb3IgdXNlZCBieSBBbWF6b24gTWFuYWdlZCBTZXJ2aWNlIGZvciBQcm9tZXRoZXVzIENvbGxlY3RvciAqL1xuICAgIHB1YmxpYyBBbWF6b25Qcm9tZXRoZXVzU2NyYXBlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblByb21ldGhldXNTY3JhcGVyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBkZXZlbG9wZXIgYWNjZXNzIHRvIGVuYWJsZSBpbnRlcmFjdGlvbnMgd2l0aCBBbWF6b24gUSAqL1xuICAgIHB1YmxpYyBBbWF6b25RRGV2ZWxvcGVyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblFEZXZlbG9wZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBlbmFibGUgaW50ZXJhY3Rpb25zIHdpdGggQW1hem9uIFEgKi9cbiAgICBwdWJsaWMgQW1hem9uUUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gUUxEQiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblFMREJDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25RTERCQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gUUxEQiB2aWEgdGhlIHNlcnZpY2UgQVBJLiAqL1xuICAgIHB1YmxpYyBBbWF6b25RTERCRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25RTERCRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFFMREIuICovXG4gICAgcHVibGljIEFtYXpvblFMREJSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25RTERCUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIFJEUyB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTQmV0YVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU0JldGFTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gUkRTIEN1c3RvbSB0byBwZXJmb3JtIHZhcmlvdXMgYXV0b21hdGlvbiBhY3Rpb25zIGFuZCBkYXRhYmFzZSBtYW5hZ2VtZW50IHRhc2tzIHRocm91Z2ggYW4gRUMyIGluc3RhbmNlIHByb2ZpbGUuICovXG4gICAgcHVibGljIEFtYXpvblJEU0N1c3RvbUluc3RhbmNlUHJvZmlsZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTQ3VzdG9tSW5zdGFuY2VQcm9maWxlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBSRFMgQ3VzdG9tIFByZXZpZXcgU2VydmljZSBSb2xlIFBvbGljeSAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNDdXN0b21QcmV2aWV3U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTQ3VzdG9tUHJldmlld1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBSRFMgQ3VzdG9tIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNDdXN0b21TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNDdXN0b21TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBmdWxsIGFjY2VzcyB0byB1c2UgdGhlIFJEUyBkYXRhIEFQSXMsIHNlY3JldCBzdG9yZSBBUElzIGZvciBSRFMgZGF0YWJhc2UgY3JlZGVudGlhbHMsIGFuZCBEQiBjb25zb2xlIHF1ZXJ5IG1hbmFnZW1lbnQgQVBJcyB0byBleGVjdXRlIFNRTCBzdGF0ZW1lbnRzIG9uIEF1cm9yYSBTZXJ2ZXJsZXNzIGNsdXN0ZXJzIGluIHRoZSBBV1MgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTRGF0YUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTRGF0YUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBSRFMgdG8gYWNjZXNzIERpcmVjdG9yeSBTZXJ2aWNlIE1hbmFnZWQgQUQgb24gYmVoYWxmIG9mIHRoZSBjdXN0b21lciBmb3IgZG9tYWluLWpvaW5lZCBTUUwgU2VydmVyIERCIGluc3RhbmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTRGlyZWN0b3J5U2VydmljZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNEaXJlY3RvcnlTZXJ2aWNlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIENsb3Vkd2F0Y2ggZm9yIFJEUyBFbmhhbmNlZCBNb25pdG9yaW5nICovXG4gICAgcHVibGljIEFtYXpvblJEU0VuaGFuY2VkTW9uaXRvcmluZ1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTRW5oYW5jZWRNb25pdG9yaW5nUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBSRFMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBSRFMgUGVyZm9ybWFuY2UgSW5zaWdodHMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlICovXG4gICAgcHVibGljIEFtYXpvblJEU1BlcmZvcm1hbmNlSW5zaWdodHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJEU1BlcmZvcm1hbmNlSW5zaWdodHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUmVhZC1Pbmx5IHBvbGljeSBmb3IgUkRTIFBlcmZvcm1hbmNlIEluc2lnaHRzICovXG4gICAgcHVibGljIEFtYXpvblJEU1BlcmZvcm1hbmNlSW5zaWdodHNSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SRFNQZXJmb3JtYW5jZUluc2lnaHRzUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gUkRTIFByZXZpZXcgU2VydmljZSBSb2xlIFBvbGljeSAqL1xuICAgIHB1YmxpYyBBbWF6b25SRFNQcmV2aWV3U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTUHJldmlld1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gUkRTIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIFJEUyB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQW1hem9uUkRTU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUkRTU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBydW4gU1FMIGNvbW1hbmRzIHRvIGNvcHksIGxvYWQsIHVubG9hZCwgcXVlcnksIGFuZCBhbmFseXplIGRhdGEgb24gQW1hem9uIFJlZHNoaWZ0LiBUaGUgcG9saWN5IGFsc28gZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHJ1biBzZWxlY3Qgc3RhdGVtZW50cyBmb3IgcmVsYXRlZCBzZXJ2aWNlcywgc3VjaCBhcyBBbWF6b24gUzMsIEFtYXpvbiBDbG91ZFdhdGNoIGxvZ3MsIEFtYXpvbiBTYWdlTWFrZXIsIG9yIEFXUyBHbHVlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWRzaGlmdEFsbENvbW1hbmRzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWRzaGlmdEFsbENvbW1hbmRzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBSZWRzaGlmdCBEYXRhIEFQSXMuIFRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIHNjb3BlZCBhY2Nlc3MgdG8gb3RoZXIgcmVxdWlyZWQgc2VydmljZXMuICovXG4gICAgcHVibGljIEFtYXpvblJlZHNoaWZ0RGF0YUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVkc2hpZnREYXRhRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgaXMgYW4gZWFzZS1vZi11c2UgcG9saWN5IGZvciBydW5uaW5nIHF1ZXJpZXMgd2l0aCBBbWF6b24gUmVkc2hpZnQgRmVkZXJhdGVkIEF1dGhvcml6YXRpb24gKi9cbiAgICBwdWJsaWMgQW1hem9uUmVkc2hpZnRGZWRlcmF0ZWRBdXRob3JpemF0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJlZHNoaWZ0RmVkZXJhdGVkQXV0aG9yaXphdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBSZWRzaGlmdCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblJlZHNoaWZ0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWRzaGlmdEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB0aGUgQW1hem9uIFJlZHNoaWZ0IFF1ZXJ5IEVkaXRvciBhbmQgdG8gc2F2ZWQgcXVlcmllcyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblJlZHNoaWZ0UXVlcnlFZGl0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVkc2hpZnRRdWVyeUVkaXRvcik7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byB0aGUgQW1hem9uIFJlZHNoaWZ0IFF1ZXJ5IEVkaXRvciBWMiBvcGVyYXRpb25zIGFuZCByZXNvdXJjZXMuIFRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIGFjY2VzcyB0byBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcy4gVGhpcyBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBsaXN0IHRoZSBBbWF6b24gUmVkc2hpZnQgY2x1c3RlcnMsIHJlYWQga2V5cyBhbmQgYWxpYXNlcyBpbiBBV1MgS01TIGFuZCBtYW5hZ2UgdGhlIFF1ZXJ5IEVkaXRvciBWMiBzZWNyZXRzIGluIEFXUyBTZWNyZXRzIE1hbmFnZXIuICovXG4gICAgcHVibGljIEFtYXpvblJlZHNoaWZ0UXVlcnlFZGl0b3JWMkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVkc2hpZnRRdWVyeUVkaXRvclYyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB0aGUgYWJpbGl0eSB0byB3b3JrIHdpdGggQW1hem9uIFJlZHNoaWZ0IFF1ZXJ5IEVkaXRvciBWMiB3aXRob3V0IHNoYXJpbmcgcmVzb3VyY2VzLiBUaGUgZ3JhbnRlZCBwcmluY2lwYWwgY2FuIG9ubHkgcmVhZCwgdXBkYXRlIGFuZCBkZWxldGUgaXRzIG93biByZXNvdXJjZXMgYnV0IGNhbm5vdCBzaGFyZSB0aGVtLiBUaGlzIHBvbGljeSBhbHNvIGdyYW50cyBhY2Nlc3MgdG8gb3RoZXIgcmVxdWlyZWQgc2VydmljZXMuIFRoaXMgaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gbGlzdCB0aGUgQW1hem9uIFJlZHNoaWZ0IGNsdXN0ZXJzIGFuZCBtYW5hZ2UgdGhlIFF1ZXJ5IEVkaXRvciBWMiBzZWNyZXRzIG9mIHRoZSBwcmluY2lwYWwgaW4gQVdTIFNlY3JldHMgTWFuYWdlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uUmVkc2hpZnRRdWVyeUVkaXRvclYyTm9TaGFyaW5nKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJlZHNoaWZ0UXVlcnlFZGl0b3JWMk5vU2hhcmluZyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB0aGUgYWJpbGl0eSB0byB3b3JrIHdpdGggQW1hem9uIFJlZHNoaWZ0IFF1ZXJ5IEVkaXRvciBWMiB3aXRoIGxpbWl0ZWQgc2hhcmluZyBvZiByZXNvdXJjZXMuIFRoZSBncmFudGVkIHByaW5jaXBhbCBjYW4gcmVhZCwgd3JpdGUgYW5kIHNoYXJlIGl0cyBvd24gcmVzb3VyY2VzLiBUaGUgZ3JhbnRlZCBwcmluY2lwYWwgY2FuIHJlYWQgdGhlIHJlc291cmNlcyBzaGFyZWQgd2l0aCBpdHMgdGVhbSBidXQgY2Fubm90IHVwZGF0ZSB0aGVtLiBUaGlzIHBvbGljeSBhbHNvIGdyYW50cyBhY2Nlc3MgdG8gb3RoZXIgcmVxdWlyZWQgc2VydmljZXMuIFRoaXMgaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gbGlzdCB0aGUgQW1hem9uIFJlZHNoaWZ0IGNsdXN0ZXJzIGFuZCBtYW5hZ2UgdGhlIFF1ZXJ5IEVkaXRvciBWMiBzZWNyZXRzIG9mIHRoZSBwcmluY2lwYWwgaW4gQVdTIFNlY3JldHMgTWFuYWdlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uUmVkc2hpZnRRdWVyeUVkaXRvclYyUmVhZFNoYXJpbmcoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVkc2hpZnRRdWVyeUVkaXRvclYyUmVhZFNoYXJpbmcpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdGhlIGFiaWxpdHkgdG8gd29yayB3aXRoIEFtYXpvbiBSZWRzaGlmdCBRdWVyeSBFZGl0b3IgVjIgd2l0aCBzaGFyaW5nIG9mIHJlc291cmNlcy4gVGhlIGdyYW50ZWQgcHJpbmNpcGFsIGNhbiByZWFkLCB3cml0ZSBhbmQgc2hhcmUgaXRzIG93biByZXNvdXJjZXMuIFRoZSBncmFudGVkIHByaW5jaXBhbCBjYW4gcmVhZCBhbmQgdXBkYXRlIHRoZSByZXNvdXJjZXMgc2hhcmVkIHdpdGggaXRzIHRlYW0uIFRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIGFjY2VzcyB0byBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcy4gVGhpcyBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBsaXN0IHRoZSBBbWF6b24gUmVkc2hpZnQgY2x1c3RlcnMgYW5kIG1hbmFnZSB0aGUgUXVlcnkgRWRpdG9yIFYyIHNlY3JldHMgb2YgdGhlIHByaW5jaXBhbCBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWRzaGlmdFF1ZXJ5RWRpdG9yVjJSZWFkV3JpdGVTaGFyaW5nKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJlZHNoaWZ0UXVlcnlFZGl0b3JWMlJlYWRXcml0ZVNoYXJpbmcpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBSZWRzaGlmdCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblJlZHNoaWZ0UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVkc2hpZnRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBbWF6b24gUmVkc2hpZnQgdG8gY2FsbCBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQW1hem9uUmVkc2hpZnRTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWRzaGlmdFNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgc3BlY2lmaWVzIHJla29nbml0aW9uIGFuZCBzMyBwZXJtaXNzaW9ucyByZXF1aXJlZCBieSBBbWF6b24gUmVrb2duaXRpb24gQ3VzdG9tIExhYmVscyBmZWF0dXJlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWtvZ25pdGlvbkN1c3RvbUxhYmVsc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVrb2duaXRpb25DdXN0b21MYWJlbHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNzIHRvIGFsbCBBbWF6b24gUmVrb2duaXRpb24gQVBJcyAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWtvZ25pdGlvbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUmVrb2duaXRpb25GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNzIHRvIGFsbCBSZWFkIHJla29nbml0aW9uIEFQSXMgKi9cbiAgICBwdWJsaWMgQW1hem9uUmVrb2duaXRpb25SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25SZWtvZ25pdGlvblJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFJla29nbml0aW9uIHRvIGNhbGwgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25SZWtvZ25pdGlvblNlcnZpY2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJla29nbml0aW9uU2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgUm91dGUgNTMgQXV0byBOYW1pbmcgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M0F1dG9OYW1pbmdGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNBdXRvTmFtaW5nRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gYWxsIFJvdXRlIDUzIEF1dG8gTmFtaW5nIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNBdXRvTmFtaW5nUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M0F1dG9OYW1pbmdSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlZ2lzdHJhbnQgbGV2ZWwgYWNjZXNzIHRvIFJvdXRlIDUzIEF1dG8gTmFtaW5nIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNBdXRvTmFtaW5nUmVnaXN0cmFudEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzQXV0b05hbWluZ1JlZ2lzdHJhbnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgUm91dGU1MyBEb21haW5zIGFjdGlvbnMgYW5kIENyZWF0ZSBIb3N0ZWQgWm9uZSB0byBhbGxvdyBIb3N0ZWQgWm9uZSBjcmVhdGlvbiBhcyBwYXJ0IG9mIGRvbWFpbiByZWdpc3RyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzRG9tYWluc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M0RvbWFpbnNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIFJvdXRlNTMgRG9tYWlucyBsaXN0IGFuZCBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzRG9tYWluc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNEb21haW5zUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgQW1hem9uIFJvdXRlIDUzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byByZXRyaWV2ZSwgbGlzdCwgY3JlYXRlLCB1cGRhdGUsIGFuZCBkZWxldGUgYWxsIEFtYXpvbiBSb3V0ZSA1MyBHbG9iYWwgUmVzb2x2ZXIgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzR2xvYmFsUmVzb2x2ZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNHbG9iYWxSZXNvbHZlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHJldHJpZXZlIGFuZCBsaXN0IGFsbCBBbWF6b24gUm91dGUgNTMgR2xvYmFsIFJlc29sdmVyIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M0dsb2JhbFJlc29sdmVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M0dsb2JhbFJlc29sdmVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJvdXRlIDUzIFByb2ZpbGUgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzUHJvZmlsZXNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNQcm9maWxlc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gUm91dGUgNTMgUHJvZmlsZSByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNQcm9maWxlc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNQcm9maWxlc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBhbGwgQW1hem9uIFJvdXRlIDUzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBSb3V0ZSA1MyBSZWNvdmVyeSBDbHVzdGVyICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNSZWNvdmVyeUNsdXN0ZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNSZWNvdmVyeUNsdXN0ZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gUm91dGUgNTMgUmVjb3ZlcnkgQ2x1c3RlciAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzUmVjb3ZlcnlDbHVzdGVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUm91dGU1M1JlY292ZXJ5Q2x1c3RlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJvdXRlIDUzIFJlY292ZXJ5IENvbnRyb2wgQ29uZmlnICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNSZWNvdmVyeUNvbnRyb2xDb25maWdGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNSZWNvdmVyeUNvbnRyb2xDb25maWdGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gUm91dGUgNTMgUmVjb3ZlcnkgQ29udHJvbCBDb25maWcgKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M1JlY292ZXJ5Q29udHJvbENvbmZpZ1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNSZWNvdmVyeUNvbnRyb2xDb25maWdSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBSb3V0ZSA1MyBSZWNvdmVyeSBSZWFkaW5lc3MgKi9cbiAgICBwdWJsaWMgQW1hem9uUm91dGU1M1JlY292ZXJ5UmVhZGluZXNzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzUmVjb3ZlcnlSZWFkaW5lc3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gUm91dGUgNTMgUmVjb3ZlcnkgUmVhZGluZXNzICovXG4gICAgcHVibGljIEFtYXpvblJvdXRlNTNSZWNvdmVyeVJlYWRpbmVzc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNSZWNvdmVyeVJlYWRpbmVzc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRnVsbCBhY2Nlc3MgcG9saWN5IGZvciBSb3V0ZSA1MyBSZXNvbHZlciAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzUmVzb2x2ZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblJvdXRlNTNSZXNvbHZlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBSZWFkIG9ubHkgcG9saWN5IGZvciBSb3V0ZSA1MyBSZXNvbHZlciAqL1xuICAgIHB1YmxpYyBBbWF6b25Sb3V0ZTUzUmVzb2x2ZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Sb3V0ZTUzUmVzb2x2ZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBTMyBkaXJlY3RvcnkgYnVja2V0cy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNFeHByZXNzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM0V4cHJlc3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBTM0V4cHJlc3Mgb3BlcmF0aW9ucyBmb3IgUzMgZGlyZWN0b3J5IGJ1Y2tldHMuICovXG4gICAgcHVibGljIEFtYXpvblMzRXhwcmVzc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzRXhwcmVzc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcm9vdCBjbGllbnQgYWNjZXNzIHRvIGFuIFMzIEZpbGVzIGZpbGUgc3lzdGVtLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM0ZpbGVzQ2xpZW50RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM0ZpbGVzQ2xpZW50RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBjbGllbnQgYWNjZXNzIHRvIGFuIFMzIEZpbGVzIGZpbGUgc3lzdGVtLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM0ZpbGVzQ2xpZW50UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNGaWxlc0NsaWVudFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBhbmQgd3JpdGUgY2xpZW50IGFjY2VzcyB0byBhbiBTMyBGaWxlcyBmaWxlIHN5c3RlbS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNGaWxlc0NsaWVudFJlYWRXcml0ZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM0ZpbGVzQ2xpZW50UmVhZFdyaXRlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbWFuYWdlbWVudCBhY2Nlc3MgdG8gQW1hem9uIFMzIEZpbGVzIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBbWF6b25TM0ZpbGVzQ1NJRHJpdmVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzRmlsZXNDU0lEcml2ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgUzMgRmlsZXMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM0ZpbGVzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM0ZpbGVzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIFMzIEZpbGVzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNGaWxlc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzRmlsZXNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBidWNrZXRzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBMYW1iZGEgZnVuY3Rpb25zIHBlcm1pc3Npb25zIHRvIGludGVyYWN0IHdpdGggQW1hem9uIFMzIE9iamVjdCBMYW1iZGEuIEFsc28gZ3JhbnRzIExhbWJkYSBwZXJtaXNzaW9ucyB0byB3cml0ZSB0byBDbG91ZFdhdGNoIExvZ3MuICovXG4gICAgcHVibGljIEFtYXpvblMzT2JqZWN0TGFtYmRhRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM09iamVjdExhbWJkYUV4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gUzMgb24gT3V0cG9zdHMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM091dHBvc3RzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM091dHBvc3RzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFMzIG9uIE91dHBvc3RzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNPdXRwb3N0c1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzT3V0cG9zdHNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIGJ1Y2tldHMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgUzMgdGFibGUgYnVja2V0cy4gKi9cbiAgICBwdWJsaWMgQW1hem9uUzNUYWJsZXNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblMzVGFibGVzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgbWFuYWdlZCBwb2xpY3kgZ3JhbnRzIEFXUyBMYWtlIEZvcm1hdGlvbiBwZXJtaXNzaW9ucyB0byBhY3Qgb24gYWxsIHRhYmxlIGJ1Y2tldHMsIG5hbWVzcGFjZXMsIGFuZCB0YWJsZXMgd2l0aGluIHRoZSBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBbWF6b25TM1RhYmxlc0xha2VGb3JtYXRpb25TZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TM1RhYmxlc0xha2VGb3JtYXRpb25TZXJ2aWNlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIFMzIHRhYmxlIGJ1Y2tldHMuICovXG4gICAgcHVibGljIEFtYXpvblMzVGFibGVzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uUzNUYWJsZXNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIFNlcnZpY2UgQ2F0YWxvZyBzZXJ2aWNlIHRvIHByb3Zpc2lvbiBwcm9kdWN0cyBmcm9tIEFtYXpvbiBTYWdlTWFrZXIgcG9ydGZvbGlvIG9mIHByb2R1Y3RzLiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYSBzZXQgb2YgcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgQ29kZVBpcGVsaW5lLCBDb2RlQnVpbGQsIENvZGVDb21taXQsIEdsdWUsIENsb3VkRm9ybWF0aW9uLCBldGMsLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJBZG1pblNlcnZpY2VDYXRhbG9nUHJvZHVjdHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJBZG1pblNlcnZpY2VDYXRhbG9nUHJvZHVjdHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBBbWF6b24gU2FnZU1ha2VyIENhbnZhcyB0byB1c2UgQUkgc2VydmljZXMgdG8gc3VwcG9ydCByZWFkeSB0byB1c2UgQUkgc29sdXRpb25zLiBUaGlzIHBvbGljeSB3aWxsIGFkZCBtb3JlIG11dGF0aW5nIHBlcm1pc3Npb25zIGZvciBzZXJ2aWNlcyBhcyBBbWF6b24gU2FnZU1ha2VyIENhbnZhcyBhZGRzIHN1cHBvcnQuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckNhbnZhc0FJU2VydmljZXNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyQ2FudmFzQUlTZXJ2aWNlc0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byB1c2UgQW1hem9uIEJlZHJvY2sgaW4gU2FnZU1ha2VyIENhbnZhcyBieSBwcm92aWRpbmcgYWNjZXNzIHRvIGRvd25zdHJlYW0gc2VydmljZXMgc3VjaCBhcyBTMy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyQ2FudmFzQmVkcm9ja0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJDYW52YXNCZWRyb2NrQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFNhZ2VNYWtlciByZXNvdXJjZXMgYW5kIG9wZXJhdGlvbnMgZm9yIGRhdGEgcHJlcGFyYXRpb24gaW4gQ2FudmFzLiBUaGUgcG9saWN5IGFsc28gcHJvdmlkZXMgc2VsZWN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIChlLmcuLCBTMywgSUFNLCBLTVMsIFJEUywgQ2xvdWRXYXRjaCBMb2dzLCBSZWRzaGlmdCwgQXRoZW5hLCBHbHVlLCBFdmVudEJyaWRnZSwgU2VjcmV0cyBNYW5hZ2VyKS4gVGhpcyBwb2xpY3kgc2hvdWxkIGJlIGF0dGFjaGVkIHRvIHRoZSBBbWF6b24gU2FnZU1ha2VyIERvbWFpbi9Vc2VyIFByb2ZpbGUgZXhlY3V0aW9uIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckNhbnZhc0RhdGFQcmVwRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJDYW52YXNEYXRhUHJlcEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIFNhZ2VNYWtlciBDYW52YXMgdG8gY3JlYXRlLCBtYW5hZ2UgYW5kIHZpZXcgZW5kcG9pbnQgZGV0YWlscyBmb3IgZW5kcG9pbnRzIGNyZWF0ZWQgdGhyb3VnaCBDYW52YXMuIEFsbG93cyBBbWF6b24gU2FnZU1ha2VyIENhbnZhcyB0byByZXRyaWV2ZSBlbmRwb2ludCBpbnZvY2F0aW9uIG1ldHJpY3MgZnJvbSBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJDYW52YXNEaXJlY3REZXBsb3lBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyQ2FudmFzRGlyZWN0RGVwbG95QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIEFtYXpvbiBFTVIgU2VydmVybGVzcyBmb3Igc2VydmljZXMgc3VjaCBhcyBTMywgdXNlZCBieSBBbWF6b24gU2FnZU1ha2VyIENhbnZhcyBmb3IgbGFyZ2UgZGF0YSBwcm9jZXNzaW5nLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJDYW52YXNFTVJTZXJ2ZXJsZXNzRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJDYW52YXNFTVJTZXJ2ZXJsZXNzRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyBjb21tb25seSBuZWVkZWQgdG8gdXNlIFNhZ2VNYWtlciBDYW52YXMgd2l0aCBBbWF6b24gRm9yZWNhc3QuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckNhbnZhc0ZvcmVjYXN0QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckNhbnZhc0ZvcmVjYXN0QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFNhZ2VNYWtlciBDYW52YXMgcmVzb3VyY2VzIGFuZCBvcGVyYXRpb25zLiBUaGUgcG9saWN5IGFsc28gcHJvdmlkZXMgc2VsZWN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIChlLmcuLCBTMywgSUFNLCBWUEMsIEVDUiwgQ2xvdWRXYXRjaCBMb2dzLCBSZWRzaGlmdCwgU2VjcmV0cyBNYW5hZ2VyLCBhbmQgRm9yZWNhc3QpLiBUaGlzIHBvbGljeSBzaG91bGQgYmUgYXR0YWNoZWQgdG8gdGhlIEFtYXpvbiBTYWdlTWFrZXIgRG9tYWluL1VzZXIgUHJvZmlsZSBleGVjdXRpb24gcm9sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyQ2FudmFzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJDYW52YXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIEFtYXpvbiBTYWdlTWFrZXIgQ2FudmFzIHRvIHVzZSB0aGUgU2FnZU1ha2VyIERhdGEgU2NpZW5jZSBBc3Npc3RhbnQgc2VydmljZS4gVGhlIERhdGEgU2NpZW5jZSBBc3Npc3RhbnQgY3VycmVudGx5IHVzZXMgYm90aCBBbWF6b24gU2FnZU1ha2VyIGFuZCBBbWF6b24gUSBEZXZlbG9wZXIgdG8gcHJvY2VzcyB1c2VyIHByb21wdHMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckNhbnZhc1NNRGF0YVNjaWVuY2VBc3Npc3RhbnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyQ2FudmFzU01EYXRhU2NpZW5jZUFzc2lzdGFudEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byBBbWF6b24gU2FnZU1ha2VyIENhcGFjaXR5IFJlc2VydmF0aW9ucyB0byBwdWJsaXNoIENsb3VkV2F0Y2ggbWV0cmljcyBpbnRvIGN1c3RvbWVyIGFjY291bnRzIGZvciB1dGlsaXphdGlvbiB2aXNpYmlsaXR5LiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJDYXBhY2l0eVJlc2VydmF0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyQ2FwYWNpdHlSZXNlcnZhdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIGNvbW1vbmx5IG5lZWRlZCB0byB1c2UgQW1hem9uIFNhZ2VNYWtlciBDbHVzdGVyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJDbHVzdGVySW5zdGFuY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckNsdXN0ZXJJbnN0YW5jZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBNYW5hZ2VkIHBvbGljeSBmb3IgU2VydmljZSBMaW5rZWQgUm9sZSBmb3IgQW1hem9uIFNhZ2VNYWtlciBDb3JlIFNlcnZpY2VzICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckNvcmVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJDb3JlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBuZWNlc3NhcnkgZm9yIFNhZ2VNYWtlciBFZGdlIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIGEgZGV2aWNlIGZsZWV0IGZvciB0aGUgY3VzdG9tZXIgdXNpbmcgdGhlIGRlZmF1bHQgY2xvdWQgY29ubmVjdGlvbi4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyRWRnZURldmljZUZsZWV0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckVkZ2VEZXZpY2VGbGVldFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGUgb2ZmbGluZSBzdG9yZSBmb3IgYW4gQW1hem9uIFNhZ2VNYWtlciBGZWF0dXJlU3RvcmUgZmVhdHVyZSBncm91cC4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyRmVhdHVyZVN0b3JlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckZlYXR1cmVTdG9yZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTYWdlTWFrZXIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuIEFsc28gcHJvdmlkZXMgc2VsZWN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIChlLmcuLCBTMywgRUNSLCBDbG91ZFdhdGNoIExvZ3MpLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlIGFjY2VzcyB0byBzZXJ2aWNlcyB0aGF0IGFyZSBjb21tb25seSBuZWVkZWQgdG8gdXNlIFNhZ2VNYWtlciBnZW9zcGF0aWFsLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJHZW9zcGF0aWFsRXhlY3V0aW9uUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJHZW9zcGF0aWFsRXhlY3V0aW9uUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTYWdlTWFrZXIgR2Vvc3BhdGlhbCB0aHJvdWdoIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckdlb3NwYXRpYWxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckdlb3NwYXRpYWxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBzZXJ2aWNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBydW4gU2FnZU1ha2VyIEdyb3VuZFRydXRoIExhYmVsaW5nIGpvYiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJHcm91bmRUcnV0aEV4ZWN1dGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJHcm91bmRUcnV0aEV4ZWN1dGlvbik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgQW1hem9uIE1hbmFnZWQgUG9saWN5IHByb3ZpZGVzIHRoZSBuZWNlc3NhcnkgcGVybWlzc2lvbnMgZm9yIFNhZ2VNYWtlciBIeXBlclBvZCB0byBhY2Nlc3MgZ2F0ZWQgbW9kZWxzIGluIFNhZ2VNYWtlciBKdW1wc3RhcnQuIEl0IGFsbG93cyBjcmVhdGluZyBwcmVzaWduZWQgVVJMcyBmb3IgaHViIGNvbnRlbnQgaW4gdGhlIFNhZ2VNYWtlciBQdWJsaWMgSHViLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJIeXBlclBvZEdhdGVkTW9kZWxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VySHlwZXJQb2RHYXRlZE1vZGVsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgcHJpdmlsZWdlcyByZXF1aXJlZCBmb3Igc2V0dGluZyB1cCB0aGUgU2FnZU1ha2VyIEh5cGVyUG9kIGluZmVyZW5jZSBvcGVyYXRvci4gSXQgZW5hYmxlcyB0aGUgaW5mZXJlbmNlIG9wZXJhdG9yIHRvIGFjY2VzcyBBV1MgbmV0d29ya2luZyByZXNvdXJjZXMsIEFtYXpvbiBTMywgQW1hem9uIEVDUiwgQW1hem9uIENsb3VkV2F0Y2gsIEFXUyBDZXJ0aWZpY2F0ZSBNYW5hZ2VyLCBhbmQgU2FnZU1ha2VyIHJlc291cmNlcyBuZWNlc3NhcnkgdG8gZGVwbG95IGFuZCBtYW5hZ2UgaW5mZXJlbmNlIHdvcmtsb2FkcyBvbiBIeXBlclBvZCBjbHVzdGVycyAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJIeXBlclBvZEluZmVyZW5jZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJIeXBlclBvZEluZmVyZW5jZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIHRoZSBwZXJtaXNzaW9ucyByZXF1aXJlZCB0byBzZXQgdXAgYW5kIG9wZXJhdGUgdGhlIFNhZ2VNYWtlciBIeXBlclBvZCBpbmZlcmVuY2UgZ2F0ZXdheS4gSXQgZW5hYmxlcyB0aGUgZ2F0ZXdheSB0byBtYW5hZ2UgQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgKEFDTSkgY2VydGlmaWNhdGVzIGZvciBUTFMgdGVybWluYXRpb24gd2hlbiBkZXBsb3lpbmcgYW5kIHNlcnZpbmcgaW5mZXJlbmNlIHdvcmtsb2FkcyBvbiBIeXBlclBvZCBjbHVzdGVycy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VySHlwZXJQb2RJbmZlcmVuY2VHYXRld2F5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckh5cGVyUG9kSW5mZXJlbmNlR2F0ZXdheUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIHByaXZpbGVnZXMgcmVxdWlyZWQgZm9yIHNldHRpbmcgdXAgU2FnZU1ha2VyIEh5cGVyUG9kIG9ic2VydmFiaWxpdHkuIEl0IGVuYWJsZXMgYWNjZXNzIHRvIEFtYXpvbiBNYW5hZ2VkIFByb21ldGhldXMsIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgYW5kIEVLUyBBZGRvbnMuIFRoZSBwb2xpY3kgYWxzbyBpbmNsdWRlcyBicm9hZCBhY2Nlc3MgdG8gR3JhZmFuYSBIVFRQIEFQSXMgdGhyb3VnaCBTZXJ2aWNlQWNjb3VudFRva2VucyBhY3Jvc3MgYWxsIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgd29ya3NwYWNlcyBpbiB5b3VyIGFjY291bnQuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckh5cGVyUG9kT2JzZXJ2YWJpbGl0eUFkbWluQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckh5cGVyUG9kT2JzZXJ2YWJpbGl0eUFkbWluQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIEFtYXpvbiBTYWdlTWFrZXIgSHlwZXJQb2QgdG8gcmVsYXRlZCBBV1Mgc2VydmljZXMgc3VjaCBhcyBBbWF6b24gRUtTLCBBbWF6b24gQ2xvdWRXYXRjaCBldGMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckh5cGVyUG9kU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VySHlwZXJQb2RTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIHNldCB1cCB0aGUgU2FnZU1ha2VyIEh5cGVyUG9kIHRyYWluaW5nIG9wZXJhdG9yLiBJdCBlbmFibGVzIGFjY2VzcyB0byBBbWF6b24gU2FnZU1ha2VyIEh5cGVyUG9kIGFuZCBFS1MgYWRkLW9ucy4gVGhlIHBvbGljeSBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBkZXNjcmliZSB0aGUgU2FnZU1ha2VyIEh5cGVyUG9kIHJlc291cmNlcyBpbiB5b3VyIGFjY291bnQuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckh5cGVyUG9kVHJhaW5pbmdPcGVyYXRvckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJIeXBlclBvZFRyYWluaW5nT3BlcmF0b3JBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBNYW5hZ2VkIHBvbGljeSBmb3IgU2VydmljZSBMaW5rZWQgUm9sZSBmb3IgQW1hem9uIFNhZ2VNYWtlciBJbmZlcmVuY2UuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckluZmVyZW5jZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlckluZmVyZW5jZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIEFtYXpvbiBTYWdlTWFrZXIgam9iIGV4ZWN1dGlvbiByb2xlcyB0byBhY2Nlc3MgZGF0YSBpbiBBbWF6b24gUzMsIGludm9rZSBhZ2VudHMgdGhyb3VnaCBBbWF6b24gQmVkcm9jayBBZ2VudENvcmUsIHRyYWNrIGV4cGVyaW1lbnRzIHdpdGggTUxmbG93LCBwdWJsaXNoIG1vZGVsIHBhY2thZ2VzLCB3cml0ZSBsb2dzIHRvIEFtYXpvbiBDbG91ZFdhdGNoLCBpbnZva2UgQVdTIExhbWJkYSBmdW5jdGlvbnMsIGFuZCBtYW5hZ2UgQW1hem9uIFZQQyBuZXR3b3JrIGludGVyZmFjZXMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckpvYkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VySm9iRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBhZ2VudCBydW50aW1lcyB0byBpbnZva2UgdGhlIEFtYXpvbiBTYWdlTWFrZXIgam9iIHJ1bnRpbWUgQVBJcyB1c2VkIGR1cmluZyBtb2RlbCBjdXN0b21pemF0aW9uIGZvciBzYW1wbGUgZ2VuZXJhdGlvbiwgdHJhamVjdG9yeSBjb21wbGV0aW9uLCBhbmQgcmV3YXJkIHN1Ym1pc3Npb24uICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlckpvYlJ1bnRpbWVBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VySm9iUnVudGltZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBjcmVhdGUgQW1hem9uIEF1Z21lbnRlZCBBSSBGbG93RGVmaW5pdGlvbiByZXNvdXJjZXMgYWdhaW5zdCBhbnkgV29ya3RlYW0uICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlck1lY2hhbmljYWxUdXJrQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlck1lY2hhbmljYWxUdXJrQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIGZvciBTYWdlTWFrZXIgbW9kZWwgY3VzdG9taXphdGlvbiB3b3JrZmxvd3MgaW5jbHVkaW5nIHNlcnZlcmxlc3MgdHJhaW5pbmcsIGN1c3RvbSByZXdhcmQgZnVuY3Rpb24gZm9yIHJlaW5mb3JjZW1lbnQgbGVhcm5pbmcsIG1vZGVsIGV2YWx1YXRpb24sIGFuZCBkZXBsb3ltZW50IHRvIFNhZ2VNYWtlciBvciBCZWRyb2NrIGVuZHBvaW50cy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyTW9kZWxDdXN0b21pemF0aW9uQ29yZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJNb2RlbEN1c3RvbWl6YXRpb25Db3JlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBBV1MgbWFuYWdlZCBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIG5lZWRlZCB0byB1c2UgYWxsIEFtYXpvbiBTYWdlTWFrZXIgR292ZXJuYW5jZSBmZWF0dXJlcy4gVGhlIHBvbGljeSBhbHNvIHByb3ZpZGVzIHNlbGVjdCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyAoZS5nLiwgUzMsIEtNUykuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlck1vZGVsR292ZXJuYW5jZVVzZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJNb2RlbEdvdmVybmFuY2VVc2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIGlzIGEgbmV3IG1hbmFnZWQgcG9saWN5IGZvciBNb2RlbCBSZWdpc3RyeSBpbiBTYWdlbWFrZXIuIFRoaXMgcG9saWN5IGlzIGEgc3RhbmRhbG9uZSBwb2xpY3kgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gdGhlIHVzZXIgcm9sZSB0byBhY2Nlc3MgTW9kZWwgUmVnaXN0cnkgcmVsYXRlZCBmdW5jdGlvbmFsaXRpZXMgaW4gU2FnZW1ha2VyLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJNb2RlbFJlZ2lzdHJ5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJNb2RlbFJlZ2lzdHJ5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIE1hbmFnZWQgcG9saWN5IGZvciBTZXJ2aWNlIExpbmtlZCBSb2xlIGZvciBBbWF6b24gU2FnZU1ha2VyIE5vdGVib29rcyAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJOb3RlYm9va3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJOb3RlYm9va3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgQW1hem9uIFNhZ2VNYWtlciBwYXJ0bmVyIGFwcCB1c2VycyB0byBhY2Nlc3MgYXBwbGljYXRpb25zLCBsaXN0IGF2YWlsYWJsZSBhcHBsaWNhdGlvbnMsIGxhdW5jaCBhcHBsaWNhdGlvbiB3ZWIgVUlzLCBhbmQgY29ubmVjdCB2aWEgdGhlIGFwcGxpY2F0aW9uIFNESy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyUGFydG5lckFwcHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclBhcnRuZXJBcHBzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIEFQSUdhdGV3YXkgd2l0aGluIHRoZSBBV1MgU2VydmljZUNhdGFsb2cgcHJvdmlzaW9uZWQgcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIExhbWJkYSBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJQYXJ0bmVyU2VydmljZUNhdGFsb2dQcm9kdWN0c0FwaUdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJQYXJ0bmVyU2VydmljZUNhdGFsb2dQcm9kdWN0c0FwaUdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIENsb3VkRm9ybWF0aW9uIHdpdGhpbiB0aGUgQVdTIFNlcnZpY2VDYXRhbG9nIHByb3Zpc2lvbmVkIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHN1YnNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBMYW1iZGEsIEFQSUdhdGV3YXkgYW5kIG90aGVycy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyUGFydG5lclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNDbG91ZEZvcm1hdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclBhcnRuZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzQ2xvdWRGb3JtYXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIExhbWJkYSB3aXRoaW4gdGhlIEFXUyBTZXJ2aWNlQ2F0YWxvZyBwcm92aXNpb25lZCBwcm9kdWN0cyBmcm9tIEFtYXpvbiBTYWdlTWFrZXIgcG9ydGZvbGlvIG9mIHByb2R1Y3RzLiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYSBzZXQgb2YgcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgU2VjcmV0cyBNYW5hZ2VyIGFuZCBvdGhlcnMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclBhcnRuZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzTGFtYmRhU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyUGFydG5lclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNMYW1iZGFTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgQW1hem9uIE1hbmFnZWQgUG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyBjb21tb25seSBuZWVkZWQgZm9yIHVzZSB3aXRoIENhbGxiYWNrIHN0ZXBzIGFuZCBMYW1iZGEgc3RlcHMgaW4gU2FnZU1ha2VyIE1vZGVsIEJ1aWxkaW5nIFBpcGVsaW5lcy4gSXQgaXMgYWRkZWQgdG8gdGhlIEFtYXpvblNhZ2VNYWtlci1FeGVjdXRpb25Sb2xlIHRoYXQgY2FuIGJlIGNyZWF0ZWQgd2hlbiBzZXR0aW5nIHVwIFNhZ2VNYWtlciBTdHVkaW8uIEl0IGNhbiBhbHNvIGJlIGF0dGFjaGVkIHRvIGFueSBvdGhlciByb2xlIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBhdXRob3Jpbmcgb3IgZXhlY3V0aW5nIHBpcGVsaW5lcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyUGlwZWxpbmVzSW50ZWdyYXRpb25zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclBpcGVsaW5lc0ludGVncmF0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHdpbGwgYmUgdXNlZCBCeSBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW9zIHRvIGNyZWF0ZSBWUEMgcmVsYXRlZCByZXNvdXJjZXMgZm9yIFF1aWNrU2lnaHQgKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyUXVpY2tTaWdodFZQQ1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJRdWlja1NpZ2h0VlBDUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gU2FnZU1ha2VyIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgU0RLLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2Ugcm9sZSBwb2xpY3kgdXNlZCBieSB0aGUgQVdTIEFQSUdhdGV3YXkgd2l0aGluIHRoZSBBV1MgU2VydmljZUNhdGFsb2cgcHJvdmlzaW9uZWQgcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIENsb3VkV2F0Y2ggTG9ncyBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzQXBpR2F0ZXdheVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNBcGlHYXRld2F5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIHJvbGUgcG9saWN5IHVzZWQgYnkgdGhlIEFXUyBDbG91ZEZvcm1hdGlvbiB3aXRoaW4gdGhlIEFXUyBTZXJ2aWNlQ2F0YWxvZyBwcm92aXNpb25lZCBwcm9kdWN0cyBmcm9tIEFtYXpvbiBTYWdlTWFrZXIgcG9ydGZvbGlvIG9mIHByb2R1Y3RzLiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYSBzdWJzZXQgb2YgcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgU2FnZU1ha2VyIGFuZCBvdGhlcnMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNDbG91ZGZvcm1hdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNDbG91ZGZvcm1hdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgQ29kZUJ1aWxkIHdpdGhpbiB0aGUgQVdTIFNlcnZpY2VDYXRhbG9nIHByb3Zpc2lvbmVkIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHN1YnNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBDb2RlUGlwZWxpbmUsIENvZGVCdWlsZCBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzQ29kZUJ1aWxkU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0NvZGVCdWlsZFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgQ29kZVBpcGVsaW5lIHdpdGhpbiB0aGUgQVdTIFNlcnZpY2VDYXRhbG9nIHByb3Zpc2lvbmVkIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHN1YnNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBDb2RlUGlwZWxpbmUsIENvZGVCdWlsZCBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzQ29kZVBpcGVsaW5lU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0NvZGVQaXBlbGluZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgQ2xvdWRXYXRjaCBFdmVudHMgd2l0aGluIHRoZSBBV1MgU2VydmljZUNhdGFsb2cgcHJvdmlzaW9uZWQgcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc3Vic2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIENvZGVQaXBlbGluZSBhbmQgb3RoZXJzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzRXZlbnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0V2ZW50c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgRmlyZWhvc2Ugd2l0aGluIHRoZSBBV1MgU2VydmljZUNhdGFsb2cgcHJvdmlzaW9uZWQgcHJvZHVjdHMgZnJvbSBBbWF6b24gU2FnZU1ha2VyIHBvcnRmb2xpbyBvZiBwcm9kdWN0cy4gR3JhbnRzIHBlcm1pc3Npb25zIHRvIGEgc2V0IG9mIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIEZpcmVob3NlIGFuZCBvdGhlcnMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNGaXJlaG9zZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNGaXJlaG9zZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgR2x1ZSB3aXRoaW4gdGhlIEFXUyBTZXJ2aWNlQ2F0YWxvZyBwcm92aXNpb25lZCBwcm9kdWN0cyBmcm9tIEFtYXpvbiBTYWdlTWFrZXIgcG9ydGZvbGlvIG9mIHByb2R1Y3RzLiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYSBzZXQgb2YgcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgR2x1ZSwgUzMgYW5kIG90aGVycy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2FnZU1ha2VyU2VydmljZUNhdGFsb2dQcm9kdWN0c0dsdWVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzR2x1ZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIHBvbGljeSB1c2VkIGJ5IHRoZSBBV1MgTGFtYmRhIHdpdGhpbiB0aGUgQVdTIFNlcnZpY2VDYXRhbG9nIHByb3Zpc2lvbmVkIHByb2R1Y3RzIGZyb20gQW1hem9uIFNhZ2VNYWtlciBwb3J0Zm9saW8gb2YgcHJvZHVjdHMuIEdyYW50cyBwZXJtaXNzaW9ucyB0byBhIHNldCBvZiByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBFQ1IsIFMzIGFuZCBvdGhlcnMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclNlcnZpY2VDYXRhbG9nUHJvZHVjdHNMYW1iZGFTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJTZXJ2aWNlQ2F0YWxvZ1Byb2R1Y3RzTGFtYmRhU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgU3lzdGVtcyBNYW5hZ2VyIGFjdGl2YXRpb24sIHNlc3Npb24gbWFuYWdlbWVudCwgYW5kIEtNUyBrZXkgb3BlcmF0aW9ucyBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3IgdGhlIFNhZ2VNYWtlciBTcGFjZXMgQWRkb24gdG8gZW5hYmxlIHNlY3VyZSByZW1vdGUgYWNjZXNzIHRvIEVLUyBTYWdlTWFrZXIgU3BhY2VzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJTcGFjZXNDb250cm9sbGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNhZ2VNYWtlclNwYWNlc0NvbnRyb2xsZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgU3lzdGVtcyBLTVMga2V5IG9wZXJhdGlvbnMgcGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIHRoZSBTYWdlTWFrZXIgU3BhY2VzIFJvdXRlciB0byBlbmFibGUgc2VjdXJlIHJlbW90ZSBhY2Nlc3MgdG8gRUtTIFNhZ2VNYWtlciBTcGFjZXMuICovXG4gICAgcHVibGljIEFtYXpvblNhZ2VNYWtlclNwYWNlc1JvdXRlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TYWdlTWFrZXJTcGFjZXNSb3V0ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIEFtYXpvbiBNYW5hZ2VkIFBvbGljeSBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIFNhZ2VNYWtlciBUcmFpbmluZyBQbGFucy4gSXQgYWxsb3dzIHVzZXJzIHRvIGNyZWF0ZSBUcmFpbmluZyBQbGFucyBhbmQgUmVzZXJ2ZWQgQ2FwYWNpdGllcywgZGVzY3JpYmUgZXhpc3RpbmcgVHJhaW5pbmcgUGxhbnMsIGFuZCBwZXJmb3JtIHNlYXJjaCBhbmQgbGlzdGluZyBvcGVyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TYWdlTWFrZXJUcmFpbmluZ1BsYW5DcmVhdGVBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU2FnZU1ha2VyVHJhaW5pbmdQbGFuQ3JlYXRlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFNlY3VyaXR5IExha2UgYW5kIHJlbGF0ZWQgc2VydmljZXMgbmVlZGVkIHRvIGFkbWluaXN0ZXIgU2VjdXJpdHkgTGFrZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2VjdXJpdHlMYWtlQWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TZWN1cml0eUxha2VBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBBbWF6b24gU2VjdXJpdHlMYWtlIG1ldGEgc3RvcmUgbWFuYWdlciBsYW1iZGEgd2hpY2ggYWxsb3dzIHRoZSBhY2Nlc3MgdG8gY2xvdWR3YXRjaCwgUzMsIEdsdWUgYW5kIFNRUy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU2VjdXJpdHlMYWtlTWV0YXN0b3JlTWFuYWdlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TZWN1cml0eUxha2VNZXRhc3RvcmVNYW5hZ2VyKTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFNlY3VyaXR5IExha2UgY3JlYXRlcyBJQU0gcm9sZXMgZm9yIHRoaXJkLXBhcnR5IGN1c3RvbSBzb3VyY2VzIHRvIHdyaXRlIGRhdGEgdG8gYSBkYXRhIGxha2UgYW5kIGZvciB0aGlyZC1wYXJ0eSBzdWJzY3JpYmVycyB0byBjb25zdW1lIGRhdGEgZnJvbSBhIGRhdGEgbGFrZSwgYW5kIHVzZXMgdGhpcyBwb2xpY3kgd2hlbiBjcmVhdGluZyB0aGVzZSByb2xlcyB0byBkZWZpbmUgdGhlIGJvdW5kYXJ5IG9mIHRoZWlyIHBlcm1pc3Npb25zLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TZWN1cml0eUxha2VQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNlY3VyaXR5TGFrZVBlcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gU0VTIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU0VTRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TRVNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gU0VTIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU0VTUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU0VTUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgU0VTIHRvIHB1Ymxpc2ggQW1hem9uIENsb3VkV2F0Y2ggYmFzaWMgbW9uaXRvcmluZyBtZXRyaWNzIG9uIGJlaGFsZiBvZiB5b3VyIFNFUyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uU0VTU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU0VTU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gU05TIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU05TRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TTlNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gU05TIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uU05TUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU05TUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBEZWZhdWx0IHBvbGljeSBmb3IgQW1hem9uIFNOUyBzZXJ2aWNlIHJvbGUuICovXG4gICAgcHVibGljIEFtYXpvblNOU1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU05TUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTUVMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TUVNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNRU0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBTUVMgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TUVNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TUVNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB2aWV3IGF1dG9tYXRpb24gZXhlY3V0aW9ucyBhbmQgc2VuZCBhcHByb3ZhbCBkZWNpc2lvbnMgdG8gYXV0b21hdGlvbiB3YWl0aW5nIGZvciBhcHByb3ZhbCAqL1xuICAgIHB1YmxpYyBBbWF6b25TU01BdXRvbWF0aW9uQXBwcm92ZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU1NNQXV0b21hdGlvbkFwcHJvdmVyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIEVDMiBBdXRvbWF0aW9uIHNlcnZpY2UgdG8gZXhlY3V0ZSBhY3Rpdml0aWVzIGRlZmluZWQgd2l0aGluIEF1dG9tYXRpb24gZG9jdW1lbnRzICovXG4gICAgcHVibGljIEFtYXpvblNTTUF1dG9tYXRpb25Sb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNTTUF1dG9tYXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIFNTTSBBZ2VudCB0byBhY2Nlc3MgRGlyZWN0b3J5IFNlcnZpY2Ugb24gYmVoYWxmIG9mIHRoZSBjdXN0b21lciBmb3IgZG9tYWluLWpvaW4gdGhlIG1hbmFnZWQgaW5zdGFuY2UuICovXG4gICAgcHVibGljIEFtYXpvblNTTURpcmVjdG9yeVNlcnZpY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU1NNRGlyZWN0b3J5U2VydmljZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTU00uICovXG4gICAgcHVibGljIEFtYXpvblNTTUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU1NNRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqICBTZXJ2aWNlIFJvbGUgdG8gYmUgdXNlZCBmb3IgRUMyIE1haW50ZW5hbmNlIFdpbmRvdyAqL1xuICAgIHB1YmxpYyBBbWF6b25TU01NYWludGVuYW5jZVdpbmRvd1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uU1NNTWFpbnRlbmFuY2VXaW5kb3dSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZW5hYmxlcyBBV1MgU3lzdGVtcyBNYW5hZ2VyIGZ1bmN0aW9uYWxpdHkgb24gRUMyIGluc3RhbmNlcy4gKi9cbiAgICBwdWJsaWMgQW1hem9uU1NNTWFuYWdlZEVDMkluc3RhbmNlRGVmYXVsdFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TU01NYW5hZ2VkRUMySW5zdGFuY2VEZWZhdWx0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIHBvbGljeSBmb3IgQW1hem9uIEVDMiBSb2xlIHRvIGVuYWJsZSBBV1MgU3lzdGVtcyBNYW5hZ2VyIHNlcnZpY2UgY29yZSBmdW5jdGlvbmFsaXR5LiAqL1xuICAgIHB1YmxpYyBBbWF6b25TU01NYW5hZ2VkSW5zdGFuY2VDb3JlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNTTU1hbmFnZWRJbnN0YW5jZUNvcmUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIGFjY2VzcyB0byBjaGlsZCBpbnN0YW5jZXMgZm9yIHBhdGNoIGFzc29jaWF0aW9uIG9wZXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgQW1hem9uU1NNUGF0Y2hBc3NvY2lhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TU01QYXRjaEFzc29jaWF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gU1NNLiAqL1xuICAgIHB1YmxpYyBBbWF6b25TU01SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25TU01SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIG1hbmFnZWQgb3IgdXNlZCBieSBBbWF6b24gU1NNICovXG4gICAgcHVibGljIEFtYXpvblNTTVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblNTTVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNzIHRvIGFsbCBBbWF6b24gVGV4dHJhY3QgQVBJcyAqL1xuICAgIHB1YmxpYyBBbWF6b25UZXh0cmFjdEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVGV4dHJhY3RGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFRleHRyYWN0IHRvIGNhbGwgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBbWF6b25UZXh0cmFjdFNlcnZpY2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblRleHRyYWN0U2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBtYW5hZ2UgQW1hem9uIFRpbWVzdHJlYW0gdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuIE5vdGUgdGhhdCB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBwZXJtaXNzaW9ucyBmb3IgY2VydGFpbiBLTVMgb3BlcmF0aW9ucywgYW5kIG9wZXJhdGlvbnMgdG8gbWFuYWdlIHlvdXIgc2F2ZWQgcXVlcmllcy4gSWYgdXNpbmcgQ3VzdG9tZXIgbWFuYWdlZCBDTUssIHBsZWFzZSByZWZlciB0byBkb2N1bWVudGF0aW9uIGZvciBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG5lZWRlZC4gKi9cbiAgICBwdWJsaWMgQW1hem9uVGltZXN0cmVhbUNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblRpbWVzdHJlYW1Db25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBUaW1lc3RyZWFtLiBOb3RlIHRoYXQgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgY2VydGFpbiBLTVMgb3BlcmF0aW9uIGFjY2Vzcy4gSWYgdXNpbmcgQ3VzdG9tZXIgbWFuYWdlZCBDTUssIHBsZWFzZSByZWZlciB0byBkb2N1bWVudGF0aW9uIGZvciBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG5lZWRlZC4gKi9cbiAgICBwdWJsaWMgQW1hem9uVGltZXN0cmVhbUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVGltZXN0cmVhbUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBjcmVhdGUsIHVwZGF0ZSwgZGVsZXRlIGFuZCBsaXN0IEFtYXpvbiBUaW1lc3RyZWFtIEluZmx1eERCIGluc3RhbmNlcyBhbmQgY3JlYXRlIGFuZCBsaXN0IHBhcmFtZXRlciBncm91cHMuIFBsZWFzZSByZWZlciB0byBkb2N1bWVudGF0aW9uIGZvciBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG5lZWRlZC4gKi9cbiAgICBwdWJsaWMgQW1hem9uVGltZXN0cmVhbUluZmx1eERCRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25UaW1lc3RyZWFtSW5mbHV4REJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIG1hbmFnZSBBbWF6b24gVGltZXN0cmVhbSBJbmZsdXhEQiBpbnN0YW5jZXMgYW5kIHBhcmFtZXRlciBncm91cHMgZXhjZXB0IG1hcmtldHBsYWNlIG9wZXJhdGlvbnMuICovXG4gICAgcHVibGljIEFtYXpvblRpbWVzdHJlYW1JbmZsdXhEQkZ1bGxBY2Nlc3NXaXRob3V0TWFya2V0cGxhY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVGltZXN0cmVhbUluZmx1eERCRnVsbEFjY2Vzc1dpdGhvdXRNYXJrZXRwbGFjZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIGNyZWF0ZSwgdXBkYXRlLCBkZWxldGUgYW5kIGxpc3QgQW1hem9uIFRpbWVzdHJlYW0gSW5mbHV4REIgaW5zdGFuY2VzIGFuZCBjcmVhdGUgYW5kIGxpc3QgcGFyYW1ldGVyIGdyb3Vwcy4gUGxlYXNlIHJlZmVyIHRvIGRvY3VtZW50YXRpb24gZm9yIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbmVlZGVkLiAqL1xuICAgIHB1YmxpYyBBbWF6b25UaW1lc3RyZWFtSW5mbHV4REJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25UaW1lc3RyZWFtSW5mbHV4REJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFRpbWVzdHJlYW0uIFBvbGljeSBhbHNvIHByb3ZpZGVzIHBlcm1pc3Npb24gdG8gY2FuY2VsIGFueSBydW5uaW5nIHF1ZXJ5LiBJZiB1c2luZyBDdXN0b21lciBtYW5hZ2VkIENNSywgcGxlYXNlIHJlZmVyIHRvIGRvY3VtZW50YXRpb24gZm9yIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbmVlZGVkLiAqL1xuICAgIHB1YmxpYyBBbWF6b25UaW1lc3RyZWFtUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVGltZXN0cmVhbVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFRyYW5zY3JpYmUgb3BlcmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBbWF6b25UcmFuc2NyaWJlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25UcmFuc2NyaWJlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byByZWFkIG9ubHkgb3BlcmF0aW9uIGZvciBBbWF6b24gVHJhbnNjcmliZSAqL1xuICAgIHB1YmxpYyBBbWF6b25UcmFuc2NyaWJlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVHJhbnNjcmliZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gVmVyaWZpZWQgUGVybWlzc2lvbnMgKi9cbiAgICBwdWJsaWMgQW1hem9uVmVyaWZpZWRQZXJtaXNzaW9uc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVmVyaWZpZWRQZXJtaXNzaW9uc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBWZXJpZmllZCBQZXJtaXNzaW9ucyBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBbWF6b25WZXJpZmllZFBlcm1pc3Npb25zUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVmVyaWZpZWRQZXJtaXNzaW9uc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGNyZWF0ZSBuZXR3b3JrIGludGVyZmFjZXMgYW5kIGF0dGFjaCB0aGVtIHRvIGNyb3NzLWFjY291bnQgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFtYXpvblZQQ0Nyb3NzQWNjb3VudE5ldHdvcmtJbnRlcmZhY2VPcGVyYXRpb25zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblZQQ0Nyb3NzQWNjb3VudE5ldHdvcmtJbnRlcmZhY2VPcGVyYXRpb25zKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFZQQyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblZQQ0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVlBDRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGRlc2NyaWJlIEFXUyByZXNvdXJjZXMsIHJ1biBOZXR3b3JrIEFjY2VzcyBBbmFseXplciwgYW5kIGNyZWF0ZSBvciBkZWxldGUgdGFncyBvbiBOZXR3b3JrIEluc2lnaHRzIEFjY2VzcyBTY29wZSBhbmQgTmV0d29yayBJbnNpZ2h0cyBBY2Nlc3MgU2NvcGUgQW5hbHlzaXMuICovXG4gICAgcHVibGljIEFtYXpvblZQQ05ldHdvcmtBY2Nlc3NBbmFseXplckZ1bGxBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVlBDTmV0d29ya0FjY2Vzc0FuYWx5emVyRnVsbEFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGRlc2NyaWJlIEFXUyByZXNvdXJjZXMsIHJ1biBSZWFjaGFiaWxpdHkgQW5hbHl6ZXIsIGFuZCBjcmVhdGUgb3IgZGVsZXRlIHRhZ3Mgb24gTmV0d29yayBJbnNpZ2h0cyBQYXRoIGFuZCBOZXR3b3JrIEluc2lnaHRzIEFuYWx5c2lzLiAqL1xuICAgIHB1YmxpYyBBbWF6b25WUENSZWFjaGFiaWxpdHlBbmFseXplckZ1bGxBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVlBDUmVhY2hhYmlsaXR5QW5hbHl6ZXJGdWxsQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgdG8gdGhlIHJvbGUgSUFNUm9sZUZvclJlYWNoYWJpbGl0eUFuYWx5emVyQ3Jvc3NBY2NvdW50UmVzb3VyY2VBY2Nlc3MuIFRoaXMgcm9sZSBpcyBkZXBsb3llZCB0byB0aGUgbWVtYmVyIGFjY291bnRzIGluIGFuIG9yZ2FuaXphdGlvbiB3aGVuIHRoZSBtYW5hZ2VtZW50IGFjY291bnQgZW5hYmxlcyB0cnVzdGVkIGFjY2VzcyBmb3IgUmVhY2hhYmlsaXR5IEFuYWx5emVyLiBJdCBwcm92aWRlcyBwZXJtaXNzaW9ucyB0byB2aWV3IHJlc291cmNlcyBmcm9tIGFjcm9zcyB5b3VyIG9yZ2FuaXphdGlvbiB1c2luZyB0aGUgUmVhY2hhYmlsaXR5IEFuYWx5emVyIGNvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblZQQ1JlYWNoYWJpbGl0eUFuYWx5emVyUGF0aENvbXBvbmVudFJlYWRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uVlBDUmVhY2hhYmlsaXR5QW5hbHl6ZXJQYXRoQ29tcG9uZW50UmVhZFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIFZQQyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFtYXpvblZQQ1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblZQQ1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFdvcmtEb2NzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrRG9jc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya0RvY3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gV29ya0RvY3MgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlICovXG4gICAgcHVibGljIEFtYXpvbldvcmtEb2NzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya0RvY3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gV29ya01haWwgRXZlbnRzICovXG4gICAgcHVibGljIEFtYXpvbldvcmtNYWlsRXZlbnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya01haWxFdmVudHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIFdvcmtNYWlsLCBEaXJlY3RvcnkgU2VydmljZSwgU0VTLCBFQzIgYW5kIHJlYWQgYWNjZXNzIHRvIEtNUyBtZXRhZGF0YS4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya01haWxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtNYWlsRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bGwgYWNjZXNzIHRvIHRoZSBXb3JrTWFpbCBNZXNzYWdlIEZsb3cgQVBJcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrTWFpbE1lc3NhZ2VGbG93RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrTWFpbE1lc3NhZ2VGbG93RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFJlYWQgb25seSBhY2Nlc3MgdG8gV29ya01haWwgbWVzc2FnZXMgZm9yIHRoZSBHZXRSYXdNZXNzYWdlQ29udGVudCBBUEkgKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya01haWxNZXNzYWdlRmxvd1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtNYWlsTWVzc2FnZUZsb3dSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gV29ya01haWwgYW5kIFNFUy4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya01haWxSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrTWFpbFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFtYXpvbiBXb3JrU3BhY2VzIGFkbWluaXN0cmF0aXZlIGFjdGlvbnMgdmlhIEFXUyBTREsgYW5kIENMSS4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc0FkbWluKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNBZG1pbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0b3IgYWNjZXNzIGZvciBwYWNrYWdpbmcgYW4gYXBwbGljYXRpb24gaW4gQW1hem9uIFdvcmtTcGFjZXMgQXBwbGljYXRpb24gTWFuYWdlci4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc0FwcGxpY2F0aW9uTWFuYWdlckFkbWluQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNBcHBsaWNhdGlvbk1hbmFnZXJBZG1pbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgbWFuYWdlZCBwb2xpY3kgcHJvdmlkZXMgZnVsbCBhZG1pbmlzdHJhdGl2ZSBhY2Nlc3MgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgUHJpdmF0ZSBDQSByZXNvdXJjZXMgaW4geW91ciBBV1MgYWNjb3VudCBmb3IgY2VydGlmaWNhdGUtYmFzZWQgYXV0aGVudGljYXRpb24uICovXG4gICAgcHVibGljIEFtYXpvbldvcmtzcGFjZXNQQ0FBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya3NwYWNlc1BDQUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIEFXUyBXb3JrU3BhY2VzIHNlcnZpY2UgYWNjZXNzIHRvIHJlcXVpcmVkIGN1c3RvbWVyIGFjY291bnQgcmVzb3VyY2VzIGZvciBsYXVuY2hpbmcgV29ya3NwYWNlcyBQb29scyAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrU3BhY2VzUG9vbFNlcnZpY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya1NwYWNlc1Bvb2xTZXJ2aWNlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyBTZWN1cmUgQnJvd3NlciBhbmQgaXRzIGRlcGVuZGVuY2llcyB0aHJvdWdoIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLCBTREssIGFuZCBDTEkuICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNTZWN1cmVCcm93c2VyUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya1NwYWNlc1NlY3VyZUJyb3dzZXJSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyBiYWNrZW5kIHNlcnZpY2UgdG8gcGVyZm9ybSBXb3Jrc3BhY2UgU2VsZiBTZXJ2aWNlIGFjdGlvbnMgKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc1NlbGZTZXJ2aWNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNTZWxmU2VydmljZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGN1c3RvbWVyIGFjY291bnQgYWNjZXNzIHRvIEFXUyBXb3JrU3BhY2VzIHNlcnZpY2UgZm9yIGxhdW5jaGluZyBhIFdvcmtzcGFjZS4gKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc1NlcnZpY2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uV29ya1NwYWNlc1NlcnZpY2VBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyBUaGluIENsaWVudCBhcyB3ZWxsIGFzIGxpbWl0ZWQgYWNjZXNzIHRvIHJlcXVpcmVkIHJlbGF0ZWQgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQW1hem9uV29ya1NwYWNlc1RoaW5DbGllbnRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNUaGluQ2xpZW50RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gV29ya1NwYWNlcyBUaGluIENsaWVudCBNb25pdG9yaW5nICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNUaGluQ2xpZW50TW9uaXRvcmluZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNUaGluQ2xpZW50TW9uaXRvcmluZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyBUaGluIENsaWVudCBhbmQgaXRzIGRlcGVuZGVuY2llcyAqL1xuICAgIHB1YmxpYyBBbWF6b25Xb3JrU3BhY2VzVGhpbkNsaWVudFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvbldvcmtTcGFjZXNUaGluQ2xpZW50UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFtYXpvbiBXb3JrU3BhY2VzIFdlYiBhbmQgaXRzIGRlcGVuZGVuY2llcyB0aHJvdWdoIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLCBTREssIGFuZCBDTEkuICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNXZWJSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrU3BhY2VzV2ViUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIFdvcmtTcGFjZXMgV2ViICovXG4gICAgcHVibGljIEFtYXpvbldvcmtTcGFjZXNXZWJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbWF6b25Xb3JrU3BhY2VzV2ViU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gWm9jYWxvLiAqL1xuICAgIHB1YmxpYyBBbWF6b25ab2NhbG9GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFtYXpvblpvY2Fsb0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBab2NhbG8gKi9cbiAgICBwdWJsaWMgQW1hem9uWm9jYWxvUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1hem9uWm9jYWxvUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBbXBsaWZ5IGZ1bGwgYWNjZXNzIHBlcm1pc3Npb25zIHRvIGRlcGxveSBBbXBsaWZ5IGJhY2tlbmQgcmVzb3VyY2VzIChBV1MgQXBwU3luYywgQW1hem9uIENvZ25pdG8sIEFtYXpvbiBTMyBhbmQgb3RoZXIgcmVsYXRlZCBzZXJ2aWNlcykgdmlhIHRoZSBBV1MgQ2xvdWQgRGV2ZWxvcG1lbnQgS2l0IChBV1MgQ0RLKSAqL1xuICAgIHB1YmxpYyBBbXBsaWZ5QmFja2VuZERlcGxveUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW1wbGlmeUJhY2tlbmREZXBsb3lGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xhdWRlIFBsYXRmb3JtIG9uIEFXUyAqL1xuICAgIHB1YmxpYyBBbnRocm9waWNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFudGhyb3BpY0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBsaW1pdGVkIGFjY2VzcyB0byBDbGF1ZGUgUGxhdGZvcm0gb24gQVdTICovXG4gICAgcHVibGljIEFudGhyb3BpY0xpbWl0ZWRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQW50aHJvcGljTGltaXRlZEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQ2xhdWRlIFBsYXRmb3JtIG9uIEFXUyAqL1xuICAgIHB1YmxpYyBBbnRocm9waWNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BbnRocm9waWNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBvcGVyYXRlIGEgc2VsZi1ob3N0ZWQgZW52aXJvbm1lbnQgcnVubmVyIGZvciBDbGF1ZGUgTWFuYWdlZCBBZ2VudHMgKi9cbiAgICBwdWJsaWMgQW50aHJvcGljU2VsZkhvc3RlZEVudmlyb25tZW50QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFudGhyb3BpY1NlbGZIb3N0ZWRFbnZpcm9ubWVudEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBUEkgR2F0ZXdheSB0byBtYW5hZ2UgYXNzb2NpYXRlZCBBV1MgUmVzb3VyY2VzIG9uIGJlaGFsZiBvZiB0aGUgY3VzdG9tZXIuICovXG4gICAgcHVibGljIEFQSUdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BUElHYXRld2F5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQXBwSW50ZWdyYXRpb25zIHRvIG1hbmFnZSBBcHBGbG93IHJlc291cmNlcyBhbmQgcHVibGlzaCBDbG91ZFdhdGNoIG1ldHJpYyBkYXRhIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBcHBJbnRlZ3JhdGlvbnNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BcHBJbnRlZ3JhdGlvbnNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQXBwbGljYXRpb24gQXV0b3NjYWxpbmcgZm9yIEFtYXpvbiBBcHBTdHJlYW0gKi9cbiAgICBwdWJsaWMgQXBwbGljYXRpb25BdXRvU2NhbGluZ0ZvckFtYXpvbkFwcFN0cmVhbUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BcHBsaWNhdGlvbkF1dG9TY2FsaW5nRm9yQW1hem9uQXBwU3RyZWFtQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFwcGxpY2F0aW9uIERpc2NvdmVyeSBTZXJ2aWNlIENvbnRpbnVvdXMgRXhwb3J0IGZlYXR1cmUgKi9cbiAgICBwdWJsaWMgQXBwbGljYXRpb25EaXNjb3ZlcnlTZXJ2aWNlQ29udGludW91c0V4cG9ydFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFwcGxpY2F0aW9uRGlzY292ZXJ5U2VydmljZUNvbnRpbnVvdXNFeHBvcnRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgQXBwUnVubmVyIE5ldHdvcmtpbmcgdG8gbWFuYWdlIHJlbGF0ZWQgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQXBwUnVubmVyTmV0d29ya2luZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFwcFJ1bm5lck5ldHdvcmtpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgQXBwUnVubmVyIHRvIG1hbmFnZSByZWxhdGVkIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFwcFJ1bm5lclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFwcFJ1bm5lclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFwcFN0dWRpbyB0byBtYW5hZ2UgYXNzb2NpYXRlZCBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBcHBTdHVkaW9TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BcHBTdHVkaW9TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgQXNzdXJhbmNlIHRvIGFjY2VzcyB5b3VyIHJlc291cmNlcyBmb3IgY29tcGxpYW5jZSBhc3Nlc3NtZW50cyBhbmQgZXZpZGVuY2UgY29sbGVjdGlvbi4gKi9cbiAgICBwdWJsaWMgQXNzdXJhbmNlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXNzdXJhbmNlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIEFtYXpvbiBBdXJvcmEgRFNRTCBTZXJ2aWNlIExpbmtlZCBSb2xlICovXG4gICAgcHVibGljIEF1cm9yYURzcWxTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BdXJvcmFEc3FsU2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBdXRvIFNjYWxpbmcgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBdXRvU2NhbGluZ0NvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkF1dG9TY2FsaW5nQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEF1dG8gU2NhbGluZyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEF1dG9TY2FsaW5nQ29uc29sZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkF1dG9TY2FsaW5nQ29uc29sZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQXV0byBTY2FsaW5nLiAqL1xuICAgIHB1YmxpYyBBdXRvU2NhbGluZ0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXV0b1NjYWxpbmdGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBBdXRvU2NhbGluZyBOb3RpZmljYXRpb24gQWNjZXNzIHNlcnZpY2Ugcm9sZS4gKi9cbiAgICBwdWJsaWMgQXV0b1NjYWxpbmdOb3RpZmljYXRpb25BY2Nlc3NSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkF1dG9TY2FsaW5nTm90aWZpY2F0aW9uQWNjZXNzUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQXV0byBTY2FsaW5nLiAqL1xuICAgIHB1YmxpYyBBdXRvU2NhbGluZ1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkF1dG9TY2FsaW5nUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQXV0byBTY2FsaW5nICovXG4gICAgcHVibGljIEF1dG9TY2FsaW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXV0b1NjYWxpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIERlZmF1bHQgcG9saWN5IGZvciBBV1MgQ29uZmlnIHNlcnZpY2Ugcm9sZS4gUHJvdmlkZXMgcGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIEFXUyBDb25maWcgdG8gdHJhY2sgY2hhbmdlcyB0byB5b3VyIEFXUyByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0NvbmZpZ1JvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29uZmlnUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGFjY2VzcyB0aGUgU1NNIERpYWdub3NpcyBTMyBidWNrZXQgZm9yIGRpYWdub3NpcyBhbmQgcmVtZWRpYXRpb24gb2YgaXNzdWVzLiAqL1xuICAgIHB1YmxpYyBBV1NTU01BdXRvbWF0aW9uRGlhZ25vc2lzQnVja2V0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTTUF1dG9tYXRpb25EaWFnbm9zaXNCdWNrZXRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHBlcm1pc3Npb24gZm9yIERpYWdub3NpbmcgaXNzdWVzIHdpdGggU1NNIHNlcnZpY2VzIGJ5IGV4ZWN1dGluZyBhY3Rpdml0aWVzIGRlZmluZWQgd2l0aGluIEF1dG9tYXRpb24gRG9jdW1lbnRzLCBwcmltYXJpbHkgdXNlZCBmb3IgcnVubmluZyB0aGUgQXV0b21hdGlvbiBkb2N1bWVudHMgaW4gYSBjcm9zcy1hY2NvdW50IGNyb3NzLXJlZ2lvbiBzZXR1cCBieSB0cmlnZ2VyaW5nIGNoaWxkIGF1dG9tYXRpb25zIHdpdGhpbiBtZW1iZXIgYWNjb3VudHMuICovXG4gICAgcHVibGljIEFXU1NTTURpYWdub3Npc0F1dG9tYXRpb25BZG1pbmlzdHJhdGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NNRGlhZ25vc2lzQXV0b21hdGlvbkFkbWluaXN0cmF0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgcGVybWlzc2lvbiBmb3IgRGlhZ25vc2luZyBpc3N1ZXMgd2l0aCBTU00gc2VydmljZXMgYnkgZXhlY3V0aW5nIGFjdGl2aXRpZXMgZGVmaW5lZCB3aXRoaW4gQXV0b21hdGlvbiBEb2N1bWVudHMsIHByaW1hcmlseSB1c2VkIGZvciBydW5uaW5nIHRoZSBBdXRvbWF0aW9uIGRvY3VtZW50cyBpbiBhIHRhcmdldCBhY2NvdW50L3JlZ2lvbiBzZXR1cCBieSBkaWFnbm9zaW5nIFNTTSBzZXJ2aWNlIGhlYWx0aCBhY3Jvc3MgYWxsIG5vZGVzLiAqL1xuICAgIHB1YmxpYyBBV1NTU01EaWFnbm9zaXNBdXRvbWF0aW9uRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU01EaWFnbm9zaXNBdXRvbWF0aW9uRXhlY3V0aW9uUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBvcGVyYXRpb25hbCBhY2NvdW50cyB0byBkaWFnbm9zZSB1bm1hbmFnZWQgbm9kZXMgYnkgcHJvdmlkaW5nIE9yZ2FuaXNhdGlvbiBzcGVjaWZpYyBwZXJtaXNzaW9ucyByZXF1aXJlZCBieSBTU00gYXV0b21hdGlvbiB0byBwdWxsIHRoZSBsaXN0IG9mIG1lbWJlciBhY2NvdW50cyB3aXRoaW4gYSByb290IG9mIGFuIE9yZ2FuaXNhdGlvbiB0byB0cmlnZ2VyIGNyb3NzLWFjY291bnQgY3Jvc3MtcmVnaW9uIGV4ZWN1dGlvbiBieSBhbGxvd2luZyBhc3N1bWluZyBFeGVjdXRpb24gcm9sZXMgaW4gdGFyZ2V0IGFjY291bnQvcmVnaW9uLiAqL1xuICAgIHB1YmxpYyBBV1NTU01EaWFnbm9zaXNBdXRvbWF0aW9uT3BlcmF0aW9uYWxBY2NvdW50QWRtaW5pc3RyYXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTTURpYWdub3Npc0F1dG9tYXRpb25PcGVyYXRpb25hbEFjY291bnRBZG1pbmlzdHJhdGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHBlcm1pc3Npb24gZm9yIFJlbWVkaWF0aW5nIGlzc3VlcyB3aXRoIFNTTSBzZXJ2aWNlcyBieSBleGVjdXRpbmcgYWN0aXZpdGllcyBkZWZpbmVkIHdpdGhpbiBBdXRvbWF0aW9uIERvY3VtZW50cywgcHJpbWFyaWx5IHVzZWQgZm9yIHJ1bm5pbmcgdGhlIEF1dG9tYXRpb24gZG9jdW1lbnRzIGluIGEgY3Jvc3MtYWNjb3VudCBjcm9zcy1yZWdpb24gc2V0dXAgYnkgdHJpZ2dlcmluZyBjaGlsZCBhdXRvbWF0aW9ucyB3aXRoaW4gbWVtYmVyIGFjY291bnRzLiAqL1xuICAgIHB1YmxpYyBBV1NTU01SZW1lZGlhdGlvbkF1dG9tYXRpb25BZG1pbmlzdHJhdGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NNUmVtZWRpYXRpb25BdXRvbWF0aW9uQWRtaW5pc3RyYXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIFJlbWVkaWF0aW5nIGlzc3VlcyB3aXRoIFNTTSBzZXJ2aWNlcyBieSBleGVjdXRpbmcgYWN0aXZpdGllcyBkZWZpbmVkIHdpdGhpbiBBdXRvbWF0aW9uIERvY3VtZW50cywgcHJpbWFyaWx5IHVzZWQgZm9yIHJ1bm5pbmcgdGhlIEF1dG9tYXRpb24gZG9jdW1lbnRzIGluIGEgdGFyZ2V0IGFjY291bnQvcmVnaW9uIHNldHVwIGJ5IHJlbWVkaWF0aW5nIFNTTSBzZXJ2aWNlcyBoZWFsdGggYWNyb3NzIGFsbCBub2Rlcy4gKi9cbiAgICBwdWJsaWMgQVdTU1NNUmVtZWRpYXRpb25BdXRvbWF0aW9uRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU01SZW1lZGlhdGlvbkF1dG9tYXRpb25FeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIG9wZXJhdGlvbmFsIGFjY291bnRzIHRvIFJlbWVkaWF0ZSB1bm1hbmFnZWQgbm9kZXMgYnkgcHJvdmlkaW5nIE9yZ2FuaXNhdGlvbiBzcGVjaWZpYyBwZXJtaXNzaW9ucyByZXF1aXJlZCBieSBTU00gYXV0b21hdGlvbiB0byBwdWxsIHRoZSBsaXN0IG9mIG1lbWJlciBhY2NvdW50cyB3aXRoaW4gYSByb290IG9mIGFuIE9yZ2FuaXNhdGlvbiB0byB0cmlnZ2VyIGNyb3NzLWFjY291bnQgY3Jvc3MtcmVnaW9uIGV4ZWN1dGlvbiBieSBhbGxvd2luZyBhc3N1bWluZyBFeGVjdXRpb24gcm9sZXMgaW4gdGFyZ2V0IGFjY291bnQvcmVnaW9uLiAqL1xuICAgIHB1YmxpYyBBV1NTU01SZW1lZGlhdGlvbkF1dG9tYXRpb25PcGVyYXRpb25hbEFjY291bnRBZG1pbmlzdHJhdGlvblJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NNUmVtZWRpYXRpb25BdXRvbWF0aW9uT3BlcmF0aW9uYWxBY2NvdW50QWRtaW5pc3RyYXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHVzZXJzIHRvIGFjY2VzcyB0aGUgQWNjb3VudCBBY3Rpdml0eSBwYWdlLiAqL1xuICAgIHB1YmxpYyBBV1NBY2NvdW50QWN0aXZpdHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQWNjb3VudEFjdGl2aXR5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEFjY291bnQgTWFuYWdlbWVudC4gKi9cbiAgICBwdWJsaWMgQVdTQWNjb3VudE1hbmFnZW1lbnRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FjY291bnRNYW5hZ2VtZW50RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIEFjY291bnQgTWFuYWdlbWVudCAqL1xuICAgIHB1YmxpYyBBV1NBY2NvdW50TWFuYWdlbWVudFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FjY291bnRNYW5hZ2VtZW50UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgYW4gYWNjb3VudCBmb3IgQVdTIGFwcGxpY2F0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTQWNjb3VudFNldHRpbmdzTWFuYWdlbWVudFJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQWNjb3VudFNldHRpbmdzTWFuYWdlbWVudFJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdXNlcnMgdG8gYWNjZXNzIHRoZSBBY2NvdW50IFVzYWdlIFJlcG9ydCBwYWdlLiAqL1xuICAgIHB1YmxpYyBBV1NBY2NvdW50VXNhZ2VSZXBvcnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQWNjb3VudFVzYWdlUmVwb3J0QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIGZvciB0aGUgRGlzY292ZXJ5IEFnZW50bGVzcyBDb25uZWN0b3IgdG8gcmVnaXN0ZXIgd2l0aCBBV1MgQXBwbGljYXRpb24gRGlzY292ZXJ5IFNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU0FnZW50bGVzc0Rpc2NvdmVyeVNlcnZpY2UoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQWdlbnRsZXNzRGlzY292ZXJ5U2VydmljZSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgQWdlbnQgUmVnaXN0cnkgdG8gYWNjZXNzIEFXUyBzZXJ2aWNlIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBV1NBZ2VudFJlZ2lzdHJ5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQWdlbnRSZWdpc3RyeVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBBcHBDb25maWcgdG8gY2FsbCBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0FwcENvbmZpZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcENvbmZpZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFXUyBBcHBGYWJyaWMgc2VydmljZSBhbmQgcmVhZCBvbmx5IGFjY2VzcyB0byBkZXBlbmRlbnQgc2VydmljZXMgc3VjaCBhcyBTMywgS2luZXNpcywgS01TLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBGYWJyaWNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcEZhYnJpY0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBBV1MgQXBwRmFicmljICovXG4gICAgcHVibGljIEFXU0FwcEZhYnJpY1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcEZhYnJpY1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQXBwRmFicmljIGFjY2VzcyB0byBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFXU0FwcEZhYnJpY1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcEZhYnJpY1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgQXBwU3RyZWFtIGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nQXBwU3RyZWFtRmxlZXRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0FwcFN0cmVhbUZsZWV0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgQ2Fzc2FuZHJhIGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nQ2Fzc2FuZHJhVGFibGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0Nhc3NhbmRyYVRhYmxlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgQ29tcHJlaGVuZCBhbmQgQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0NvbXByZWhlbmRFbmRwb2ludFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nQ29tcHJlaGVuZEVuZHBvaW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgQVBJR2F0ZXdheSBhbmQgQ2xvdWRXYXRjaCBmb3IgY3VzdG9tIHJlc291cmNlIHNjYWxpbmcgKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25BdXRvU2NhbGluZ0N1c3RvbVJlc291cmNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b1NjYWxpbmdDdXN0b21SZXNvdXJjZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIER5bmFtb0RCIGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRHluYW1vREJUYWJsZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRHluYW1vREJUYWJsZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIEVDMiBTcG90IEZsZWV0IGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRUMyU3BvdEZsZWV0UmVxdWVzdFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRUMyU3BvdEZsZWV0UmVxdWVzdFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIEVDMiBDb250YWluZXIgU2VydmljZSBhbmQgQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0VDU1NlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0VDU1NlcnZpY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBBbWF6b24gRWxhc3RpQ2FjaGUgYW5kIEFtYXpvbiBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRWxhc3RpQ2FjaGVSR1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nRWxhc3RpQ2FjaGVSR1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudGluZyBwZXJtaXNzaW9ucyB0byBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gYWNjZXNzIEVsYXN0aWMgTWFwIFJlZHVjZSBhbmQgQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0VNUkluc3RhbmNlR3JvdXBQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ0VNUkluc3RhbmNlR3JvdXBQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBNYW5hZ2VkIFN0cmVhbWluZyBmb3IgQXBhY2hlIEthZmthIGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nS2Fma2FDbHVzdGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdLYWZrYUNsdXN0ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBMYW1iZGEgYW5kIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdMYW1iZGFDb25jdXJyZW5jeVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nTGFtYmRhQ29uY3VycmVuY3lQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBBbWF6b24gTmVwdHVuZSBhbmQgQW1hem9uIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdOZXB0dW5lQ2x1c3RlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nTmVwdHVuZUNsdXN0ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZ3JhbnRpbmcgcGVybWlzc2lvbnMgdG8gQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIGFjY2VzcyBSRFMgYW5kIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdSRFNDbHVzdGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uQXV0b3NjYWxpbmdSRFNDbHVzdGVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgU2FnZU1ha2VyIGFuZCBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nU2FnZU1ha2VyRW5kcG9pbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ1NhZ2VNYWtlckVuZHBvaW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyB0byBhY2Nlc3MgQW1hem9uIFdvcmtTcGFjZXMgYW5kIEFtYXpvbiBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkF1dG9zY2FsaW5nV29ya1NwYWNlc1Bvb2xQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25BdXRvc2NhbGluZ1dvcmtTcGFjZXNQb29sUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIGZvciB0aGUgRGlzY292ZXJ5IEFnZW50IHRvIHJlZ2lzdGVyIHdpdGggQVdTIEFwcGxpY2F0aW9uIERpc2NvdmVyeSBTZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkRpc2NvdmVyeUFnZW50QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uRGlzY292ZXJ5QWdlbnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQXBwbGljYXRpb24gRGlzY292ZXJ5IFNlcnZpY2UgQWdlbnRsZXNzIENvbGxlY3RvcnMgdG8gYXV0byB1cGRhdGUsIHJlZ2lzdGVyLCBhbmQgY29tbXVuaWNhdGUgd2l0aCBBcHBsaWNhdGlvbiBEaXNjb3ZlcnkgU2VydmljZSAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkRpc2NvdmVyeUFnZW50bGVzc0NvbGxlY3RvckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbkRpc2NvdmVyeUFnZW50bGVzc0NvbGxlY3RvckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHZpZXcgYW5kIHRhZyBDb25maWd1cmF0aW9uIEl0ZW1zIG1haW50YWluZWQgYnkgdGhlIEFXUyBBcHBsaWNhdGlvbiBEaXNjb3ZlcnkgU2VydmljZSAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbkRpc2NvdmVyeVNlcnZpY2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uRGlzY292ZXJ5U2VydmljZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgaW5zdGFsbGluZyB0aGUgQVdTIFJlcGxpY2F0aW9uIEFnZW50LCB3aGljaCBpcyB1c2VkIHdpdGggQVdTIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChNR04pIHRvIG1pZ3JhdGUgZXh0ZXJuYWwgc2VydmVycyB0byBBV1MuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcyB3aG9zZSBjcmVkZW50aWFscyB5b3UgcHJvdmlkZSB3aGVuIGluc3RhbGxpbmcgdGhlIEFXUyBSZXBsaWNhdGlvbiBBZ2VudC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25BZ2VudEluc3RhbGxhdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkFnZW50SW5zdGFsbGF0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIGluc3RhbGxpbmcgYW5kIHVzaW5nIHRoZSBBV1MgUmVwbGljYXRpb24gQWdlbnQsIHdoaWNoIGlzIHVzZWQgd2l0aCBBV1MgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgKE1HTikgdG8gbWlncmF0ZSBleHRlcm5hbCBzZXJ2ZXJzIHRvIEFXUy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzIHdob3NlIGNyZWRlbnRpYWxzIHlvdSBwcm92aWRlIHdoZW4gaW5zdGFsbGluZyB0aGUgQVdTIFJlcGxpY2F0aW9uIEFnZW50LiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkFnZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uQWdlbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgdXNpbmcgdGhlIEFXUyBSZXBsaWNhdGlvbiBBZ2VudCwgd2hpY2ggaXMgdXNlZCB3aXRoIEFXUyBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSAoTUdOKSB0byBtaWdyYXRlIGV4dGVybmFsIHNlcnZlcnMgdG8gQVdTLiBXZSBkbyBub3QgcmVjb21tZW5kIHRoYXQgeW91IGF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25BZ2VudFBvbGljeVYyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uQWdlbnRQb2xpY3lWMik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyB0aGUgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgKE1HTikgQ29udmVyc2lvbiBTZXJ2ZXIsIHdoaWNoIGFyZSBFQzIgaW5zdGFuY2VzIGxhdW5jaGVkIGJ5IEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlLCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBNR04gc2VydmljZS4gQW4gSUFNIHJvbGUgd2l0aCB0aGlzIHBvbGljeSBpcyBhdHRhY2hlZCAoYXMgYW4gRUMyIEluc3RhbmNlIFByb2ZpbGUpIGJ5IE1HTiB0byB0aGUgTUdOIENvbnZlcnNpb24gU2VydmVycywgd2hpY2ggYXJlIGF1dG9tYXRpY2FsbHkgbGF1bmNoZWQgYW5kIHRlcm1pbmF0ZWQgYnkgTUdOLCB3aGVuIG5lZWRlZC4gV2UgZG8gbm90IHJlY29tbWVuZCB0aGF0IHlvdSBhdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuIE1HTiBDb252ZXJzaW9uIFNlcnZlcnMgYXJlIHVzZWQgYnkgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2Ugd2hlbiB1c2VycyBjaG9vc2UgdG8gbGF1bmNoIFRlc3Qgb3IgQ3V0b3ZlciBpbnN0YW5jZXMgdXNpbmcgdGhlIE1HTiBjb25zb2xlLCBDTEksIG9yIEFQSS4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25Db252ZXJzaW9uU2VydmVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uQ29udmVyc2lvblNlcnZlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIEFtYXpvbiBFQzIgb3BlcmF0aW9ucyByZXF1aXJlZCB0byB1c2UgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgKE1HTikgdG8gbGF1bmNoIHRoZSBtaWdyYXRlZCBzZXJ2ZXJzIGFzIEVDMiBpbnN0YW5jZXMuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25FQzJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25FQzJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgT05UQVAgZmlsZSBzeXN0ZW0gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25GU3hQcm94eVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkZTeFByb3h5UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gbWFuYWdlIFByaXZhdGVMaW5rIGJldHdlZW4gQVdTIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIGFuZCBjdXN0b21lcidzIEZTeCBmaWxlIHN5c3RlbSAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkZTeFByb3h5VlBDUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uRlN4UHJveHlWUENQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBwZXJtaXNzaW9ucyB0byBhbGwgcHVibGljIEFQSXMgb2YgQVdTIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChNR04pLCBhcyB3ZWxsIGFzIHBlcm1pc3Npb25zIHRvIHJlYWQgS01TIGtleSBpbmZvcm1hdGlvbi4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIEFXUyBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSAoTUdOKSB0byBzZW5kIG1ldGEtZGF0YSBhYm91dCB0aGUgcHJvZ3Jlc3Mgb2Ygc2VydmVycyBiZWluZyBtaWdyYXRlZCB1c2luZyBNR04gdG8gQVdTIE1pZ3JhdGlvbiBIdWIgKE1HSCkuIE1HTiBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgYW4gSUFNIHJvbGUgd2l0aCB0aGlzIHBvbGljeSBhdHRhY2hlZCwgYW5kIGFzc3VtZXMgdGhpcyByb2xlLiBXZSBkbyBub3QgcmVjb21tZW5kIHRoYXQgeW91IGF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25NR0hBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25NR0hBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgTmV0d29yayBNaWdyYXRpb24gY3VzdG9tIHJlc291cmNlICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uTmV0d29ya01pZ3JhdGlvbkN1c3RvbVJlc291cmNlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uTmV0d29ya01pZ3JhdGlvbkN1c3RvbVJlc291cmNlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gYXV0b21hdGUgVk13YXJlIHRvIEFXUyBuZXR3b3JrIGluZnJhc3RydWN0dXJlIG1pZ3JhdGlvbiB0aHJvdWdoIENsb3VkRm9ybWF0aW9uICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uTmV0d29ya01pZ3JhdGlvbk11bHRpQWNjb3VudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvbk5ldHdvcmtNaWdyYXRpb25NdWx0aUFjY291bnQpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBwZXJtaXNzaW9ucyB0byBhbGwgcmVhZC1vbmx5IHB1YmxpYyBBUElzIG9mIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChNR04pLCBhcyB3ZWxsIGFzIHNvbWUgcmVhZC1vbmx5IEFQSXMgb2Ygb3RoZXIgQVdTIHNlcnZpY2VzIHRoYXQgYXJlIHJlcXVpcmVkIGluIG9yZGVyIHRvIG1ha2UgZnVsbCByZWFkLW9ubHkgdXNlIG9mIHRoZSBNR04gY29uc29sZS4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvblJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgdGhlIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIChNR04pIFJlcGxpY2F0aW9uIFNlcnZlcnMsIHdoaWNoIGFyZSBFQzIgaW5zdGFuY2VzIGxhdW5jaGVkIGJ5IEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlIC0gdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgTUdOIHNlcnZpY2UsIGFuZCB0byBjcmVhdGUgRUJTIHNuYXBzaG90cyBpbiB5b3VyIEFXUyBhY2NvdW50LiBBbiBJQU0gcm9sZSB3aXRoIHRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIChhcyBhbiBFQzIgSW5zdGFuY2UgUHJvZmlsZSkgYnkgQXBwbGljYXRpb24gTWlncmF0aW9uIFNlcnZpY2UgdG8gdGhlIE1HTiBSZXBsaWNhdGlvbiBTZXJ2ZXJzIHdoaWNoIGFyZSBhdXRvbWF0aWNhbGx5IGxhdW5jaGVkIGFuZCB0ZXJtaW5hdGVkIGJ5IE1HTiwgYXMgbmVlZGVkLiBNR04gUmVwbGljYXRpb24gU2VydmVycyBhcmUgdXNlZCB0byBmYWNpbGl0YXRlIGRhdGEgcmVwbGljYXRpb24gZnJvbSB5b3VyIGV4dGVybmFsIHNlcnZlcnMgdG8gQVdTLCBhcyBwYXJ0IG9mIHRoZSBtaWdyYXRpb24gcHJvY2VzcyBtYW5hZ2VkIHVzaW5nIE1HTi4gV2UgZG8gbm90IHJlY29tbWVuZCB0aGF0IHlvdSBhdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uUmVwbGljYXRpb25TZXJ2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25SZXBsaWNhdGlvblNlcnZlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBpbnN0YWxsaW5nIGFuZCB1c2luZyB0aGUgQVdTIFJlcGxpY2F0aW9uIEFnZW50LCB3aGljaCBpcyB1c2VkIGJ5IEFXUyBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSAoQVdTIE1HTikgdG8gbWlncmF0ZSBzb3VyY2Ugc2VydmVycyB0aGF0IHJ1biBvbiBFQzIgKGNyb3NzLVJlZ2lvbiBvciBjcm9zcy1BWikuIEFuIElBTSByb2xlIHdpdGggdGhpcyBwb2xpY3kgc2hvdWxkIGJlIGF0dGFjaGVkIChhcyBhbiBFQzIgSW5zdGFuY2UgUHJvZmlsZSkgdG8gdGhlIEVDMiBJbnN0YW5jZXMuICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uU2VydmljZUVjMkluc3RhbmNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uU2VydmljZUVjMkluc3RhbmNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBhcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSB0byBjcmVhdGUgYW5kIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBsaWNhdGlvbk1pZ3JhdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcGxpY2F0aW9uTWlncmF0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyBhY2Nlc3MgdG8gQW1hem9uIFNTTSBvcGVyYXRpb25zIHJlcXVpcmVkIHRvIHVzZSBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSAoTUdOKSB0byBleGVjdXRlIGN1c3RvbSBwb3N0IG1pZ3JhdGlvbiBjb21tYW5kIFNTTSBkb2N1bWVudHMuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTQXBwbGljYXRpb25NaWdyYXRpb25TU01BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwbGljYXRpb25NaWdyYXRpb25TU01BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgaW5zdGFsbGluZyBhbmQgdXNpbmcgdGhlIEFXUyBWQ2VudGVyIENsaWVudCwgd2hpY2ggaXMgdXNlZCB3aXRoIEFXUyBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSAoTUdOKSB0byBtaWdyYXRlIGV4dGVybmFsIHNlcnZlcnMgdG8gQVdTLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMgd2hvc2UgY3JlZGVudGlhbHMgeW91IHByb3ZpZGUgd2hlbiBpbnN0YWxsaW5nIHRoZSBBV1MgVkNlbnRlciBDbGllbnQuICovXG4gICAgcHVibGljIEFXU0FwcGxpY2F0aW9uTWlncmF0aW9uVkNlbnRlckNsaWVudFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBsaWNhdGlvbk1pZ3JhdGlvblZDZW50ZXJDbGllbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBcHAgTWVzaCBFbnZveSBwb2xpY3kgZm9yIGFjY2Vzc2luZyBWaXJ0dWFsIE5vZGUgY29uZmlndXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTQXBwTWVzaEVudm95QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcE1lc2hFbnZveUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgQXBwIE1lc2ggQVBJcyBhbmQgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBNZXNoRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBNZXNoRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFwcCBNZXNoIFByZXZpZXcgRW52b3kgcG9saWN5IGZvciBhY2Nlc3NpbmcgVmlydHVhbCBOb2RlIGNvbmZpZ3VyYXRpb24uICovXG4gICAgcHVibGljIEFXU0FwcE1lc2hQcmV2aWV3RW52b3lBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwTWVzaFByZXZpZXdFbnZveUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBV1MgQXBwIE1lc2ggKi9cbiAgICBwdWJsaWMgQVdTQXBwTWVzaFByZXZpZXdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBNZXNoUHJldmlld1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgQVdTIEFwcCBNZXNoIEFQSXMgYW5kIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTQXBwTWVzaFJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcE1lc2hSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBV1MgQXBwTWVzaCAqL1xuICAgIHB1YmxpYyBBV1NBcHBNZXNoU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwTWVzaFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIGFsbCBBcHAgUnVubmVyIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0FwcFJ1bm5lckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwUnVubmVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBsaXN0IGFuZCB2aWV3IGRldGFpbHMgYWJvdXQgQXBwIFJ1bm5lciByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0FwcFJ1bm5lclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcFJ1bm5lclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQVdTIEFwcCBSdW5uZXIgc2VydmljZSBwb2xpY3kgdGhhdCBncmFudHMgcmVhZCBwZXJtaXNzaW9ucyB0byBBbWF6b24gRUNSIHJlc291cmNlcyBpbiB0aGUgY3VzdG9tZXIncyBhY2NvdW50LiBVc2UgaXQgaW4gYSByb2xlIHRoYXQgaXMgcGFzc2VkIHRvIEFwcCBSdW5uZXIgd2hlbiBjcmVhdGluZyBvciB1cGRhdGluZyBhbiBBcHAgUnVubmVyIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU0FwcFJ1bm5lclNlcnZpY2VQb2xpY3lGb3JFQ1JBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwUnVubmVyU2VydmljZVBvbGljeUZvckVDUkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byB0aGUgQXBwU3luYyBzZXJ2aWNlLCB0aG91Z2ggbm90IGVub3VnaCB0byBhY2Nlc3MgdmlhIHRoZSBjb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NBcHBTeW5jQWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBTeW5jQWRtaW5pc3RyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgaW52b2tpbmcgYWNjZXNzIHRvIHRoZSBBcHBTeW5jIHNlcnZpY2UgLSBib3RoIHRocm91Z2ggdGhlIGNvbnNvbGUgYW5kIGluZGVwZW5kZW50bHkgKi9cbiAgICBwdWJsaWMgQVdTQXBwU3luY0ludm9rZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwU3luY0ludm9rZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQXBwU3luYyB0byBwdXNoIGxvZ3MgdG8gdXNlcidzIENsb3VkV2F0Y2ggYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQVdTQXBwU3luY1B1c2hUb0Nsb3VkV2F0Y2hMb2dzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FwcFN5bmNQdXNoVG9DbG91ZFdhdGNoTG9ncyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBjcmVhdGUsIHVwZGF0ZSwgYW5kIHF1ZXJ5IHRoZSBzY2hlbWEuICovXG4gICAgcHVibGljIEFXU0FwcFN5bmNTY2hlbWFBdXRob3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXBwU3luY1NjaGVtYUF1dGhvcik7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBcHBTeW5jICovXG4gICAgcHVibGljIEFXU0FwcFN5bmNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcHBTeW5jU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIEFydGlmYWN0IHJlYWQtb25seSBhY2Nlc3MgdG8gb3BlcmF0aW9ucyBpbiBBV1MgT3JnYW5pemF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTQXJ0aWZhY3RBY2NvdW50U3luYygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcnRpZmFjdEFjY291bnRTeW5jKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGZ1bGwgcGVybWlzc2lvbnMgdG8gbGlzdCwgZG93bmxvYWQsIGFjY2VwdCwgYW5kIHRlcm1pbmF0ZSBBV1MgQXJ0aWZhY3QgYWdyZWVtZW50cy4gSXQgYWxzbyBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBsaXN0IGFuZCBlbmFibGUgQVdTIHNlcnZpY2UgYWNjZXNzIGluIHRoZSBPcmdhbml6YXRpb24gc2VydmljZSwgYXMgd2VsbCBhcyBkZXNjcmliZSB0aGUgb3JnYW5pemF0aW9uIGRldGFpbHMuIEFkZGl0aW9uYWxseSwgdGhlIHBvbGljeSBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBjaGVjayBpZiB0aGUgcmVxdWlyZWQgc2VydmljZS1saW5rZWQgcm9sZSBleGlzdHMgYW5kIGNyZWF0ZXMgb25lIGlmIGl0IGRvZXNuJ3QgKi9cbiAgICBwdWJsaWMgQVdTQXJ0aWZhY3RBZ3JlZW1lbnRzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcnRpZmFjdEFncmVlbWVudHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHJlYWQtb25seSBhY2Nlc3MgdG8gbGlzdCB0aGUgQVdTIEFydGlmYWN0IHNlcnZpY2UgYWdyZWVtZW50cyBhbmQgdG8gZG93bmxvYWQgdGhlIGFjY2VwdGVkIGFncmVlbWVudHMuLiBJdCBhbHNvIGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIGxpc3QgYXMgd2VsbCBhcyBkZXNjcmliZSB0aGUgb3JnYW5pemF0aW9uIGRldGFpbHMuIEFkZGl0aW9uYWxseSwgdGhlIHBvbGljeSBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBjaGVjayBpZiB0aGUgcmVxdWlyZWQgc2VydmljZS1saW5rZWQgcm9sZSBleGlzdHMuICovXG4gICAgcHVibGljIEFXU0FydGlmYWN0QWdyZWVtZW50c1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FydGlmYWN0QWdyZWVtZW50c1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFydGlmYWN0IENvbXBsaWFuY2UgSW5xdWlyeS4gKi9cbiAgICBwdWJsaWMgQVdTQXJ0aWZhY3RDb21wbGlhbmNlSW5xdWlyaWVzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBcnRpZmFjdENvbXBsaWFuY2VJbnF1aXJpZXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBcnRpZmFjdCBDb21wbGlhbmNlIElucXVpcnkuICovXG4gICAgcHVibGljIEFXU0FydGlmYWN0Q29tcGxpYW5jZUlucXVpcmllc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0FydGlmYWN0Q29tcGxpYW5jZUlucXVpcmllc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgQVdTIEFydGlmYWN0IHNlcnZpY2UgcmVwb3J0cy4gKi9cbiAgICBwdWJsaWMgQVdTQXJ0aWZhY3RSZXBvcnRzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXJ0aWZhY3RSZXBvcnRzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIEFydGlmYWN0IHRvIGdhdGhlciBpbmZvcm1hdGlvbiBhYm91dCBhbiBvcmdhbml6YXRpb24gdmlhIEFXUyBPcmdhbml6YXRpb25zIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU0FydGlmYWN0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQXJ0aWZhY3RTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBlbmFibGUgb3IgZGlzYWJsZSBBV1MgQXVkaXQgTWFuYWdlciwgdXBkYXRlIHNldHRpbmdzLCBhbmQgbWFuYWdlIGFzc2Vzc21lbnRzLCBjb250cm9scywgYW5kIGZyYW1ld29ya3MgKi9cbiAgICBwdWJsaWMgQVdTQXVkaXRNYW5hZ2VyQWRtaW5pc3RyYXRvckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBdWRpdE1hbmFnZXJBZG1pbmlzdHJhdG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFXUyBBdWRpdCBNYW5hZ2VyICovXG4gICAgcHVibGljIEFXU0F1ZGl0TWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0F1ZGl0TWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFXUyBBdXRvIFNjYWxpbmcgdG8gcGVyaW9kaWNhbGx5IGZvcmVjYXN0IGNhcGFjaXR5IGFuZCBnZW5lcmF0ZSBzY2hlZHVsZWQgc2NhbGluZyBhY3Rpb25zIGZvciBBdXRvIFNjYWxpbmcgZ3JvdXBzIGluIGEgc2NhbGluZyBwbGFuICovXG4gICAgcHVibGljIEFXU0F1dG9TY2FsaW5nUGxhbnNFQzJBdXRvU2NhbGluZ1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NBdXRvU2NhbGluZ1BsYW5zRUMyQXV0b1NjYWxpbmdQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgdXNlcnMgcGVybWlzc2lvbnMgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgYmFja3VwIGFjY2VzcyBwb2ludHMgZm9yIGFjY2Vzc2luZyBiYWNrdXAgZGF0YSBpbiByZWNvdmVyeSBwb2ludHMgdGhyb3VnaCBTMyBhY2Nlc3MgcG9pbnRzLiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBBY2Nlc3NQb2ludE9wZXJhdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cEFjY2Vzc1BvaW50T3BlcmF0b3JBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgZm9yIHVzZXJzIHRvIGNyZWF0ZSBjb250cm9scyBhbmQgZnJhbWV3b3JrcyB0aGF0IGRlZmluZSB0aGVpciBleHBlY3RhdGlvbnMgZm9yIEFXUyBCYWNrdXAgcmVzb3VyY2VzIGFuZCBhY3Rpdml0aWVzLCBhbmQgdG8gYXVkaXQgQVdTIEJhY2t1cCByZXNvdXJjZXMgYW5kIGFjdGl2aXRpZXMgYWdhaW5zdCB0aGVpciBkZWZpbmVkIGNvbnRyb2xzIGFuZCBmcmFtZXdvcmtzLiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gQVdTIENvbmZpZyBhbmQgc2ltaWxhciBzZXJ2aWNlcyB0byBkZXNjcmliZSB1c2VyIGV4cGVjdGF0aW9ucyBwZXJmb3JtIHRoZSBhdWRpdHMuIFRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIHBlcm1pc3Npb25zIHRvIGRlbGl2ZXIgYXVkaXQgcmVwb3J0cyB0byBTMyBhbmQgc2ltaWxhciBzZXJ2aWNlcywgYW5kIGVuYWJsZXMgdXNlcnMgdG8gZmluZCBhbmQgb3BlbiB0aGVpciBhdWRpdCByZXBvcnRzLiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBBdWRpdEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBBdWRpdEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyB0aGUgQVdTIEJhY2tpbnQgYWdlbnQgdG8gY29tcGxldGUgYmFja3VwIGRhdGEgdHJhbnNmZXIgd2l0aCBBV1MgQmFja3VwIFN0b3JhZ2UgcGxhbmUuIEF0dGFjaCB0aGlzIHBvbGljeSB0byByb2xlcyBhc3N1bWVkIGJ5IEVDMiBJbnN0YW5jZXMgcnVubmluZyBTQVAgSEFOQSB3aXRoIHRoZSBCYWNraW50IGFnZW50LiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBEYXRhVHJhbnNmZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwRGF0YVRyYW5zZmVyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgZm9yIGJhY2t1cCBhZG1pbmlzdHJhdG9ycywgZ3JhbnRpbmcgZnVsbCBhY2Nlc3MgdG8gQVdTIEJhY2t1cCBvcGVyYXRpb25zLCBpbmNsdWRpbmcgY3JlYXRpbmcgb3IgZWRpdGluZyBiYWNrdXAgcGxhbnMsIGFzc2lnbmluZyBBV1MgcmVzb3VyY2VzIHRvIGJhY2t1cCBwbGFucywgZGVsZXRpbmcgYmFja3VwcywgYW5kIHJlc3RvcmluZyBiYWNrdXBzLiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBV1MgQmFja3VwR2F0ZXdheSBwZXJtaXNzaW9uIHRvIHN5bmMgdGhlIG1ldGFkYXRhIG9mIFZpcnR1YWwgTWFjaGluZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwR2F0ZXdheVNlcnZpY2VSb2xlUG9saWN5Rm9yVmlydHVhbE1hY2hpbmVNZXRhZGF0YVN5bmMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwR2F0ZXdheVNlcnZpY2VSb2xlUG9saWN5Rm9yVmlydHVhbE1hY2hpbmVNZXRhZGF0YVN5bmMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBHdWFyZER1dHkgcGVybWlzc2lvbiB0byByZWFkIHlvdXIgQVdTIEJhY2t1cCBSZWNvdmVyeSBQb2ludHMgZm9yIG1hbHdhcmUgc2NhbnMgKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwR3VhcmREdXR5Um9sZVBvbGljeUZvclNjYW5zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cEd1YXJkRHV0eVJvbGVQb2xpY3lGb3JTY2Fucyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyB1c2VycyBwZXJtaXNzaW9ucyB0byBhc3NpZ24gQVdTIHJlc291cmNlcyB0byBiYWNrdXAgcGxhbnMsIGNyZWF0ZSBvbi1kZW1hbmQgYmFja3VwcywgYW5kIHJlc3RvcmUgYmFja3Vwcy4gVGhpcyBwb2xpY3kgZG9lcyBub3QgYWxsb3cgdGhlIHVzZXIgdG8gY3JlYXRlIG9yIGVkaXQgYmFja3VwIHBsYW5zIG9yIHRvIGRlbGV0ZSBzY2hlZHVsZWQgYmFja3VwcyBhZnRlciB0aGV5IGFyZSBjcmVhdGVkLiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBPcGVyYXRvckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBPcGVyYXRvckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIGZvciBiYWNrdXAgYWRtaW5pc3RhdG9ycyB3aG8gdXNlIGNyb3NzLWFjY291bnQgYmFja3VwIG1hbmFnZW1lbnQgdG8gbWFuYWdlIGJhY2t1cHMgZm9yIHRoZSBvcmdhbml6YXRpb24uICovXG4gICAgcHVibGljIEFXU0JhY2t1cE9yZ2FuaXphdGlvbkFkbWluQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cE9yZ2FuaXphdGlvbkFkbWluQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQVdTIEJhY2t1cCBwZXJtaXNzaW9uIHRvIHJlc3RvcmUgYSBiYWNrdXAgb2YgU0FQIEhBTkEgb24gQW1hem9uIEVDMiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBSZXN0b3JlQWNjZXNzRm9yU0FQSEFOQSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBSZXN0b3JlQWNjZXNzRm9yU0FQSEFOQSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBzZWFyY2ggb3BlcmF0b3Igcm9sZSBoYXMgYWNjZXNzIHRvIGNyZWF0ZSBiYWNrdXAgaW5kZXhlcywgY3JlYXRlIHNlYXJjaGVzIG9mIGJhY2t1cCBtZXRhZGF0YSB0aGF0IGhhcyBiZWVuIGluZGV4ZWQuIFRoaXMgcG9saWN5IGNvbnRhaW5zIHRoZSBuZWNlc3NhcnkgcGVybWlzc2lvbnMgZm9yIHRoZXNlIHNlYXJjaCBvcGVyYXRvciBmdW5jdGlvbnMuICovXG4gICAgcHVibGljIEFXU0JhY2t1cFNlYXJjaE9wZXJhdG9yQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cFNlYXJjaE9wZXJhdG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQVdTIEJhY2t1cCBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBiYWNrdXBzIG9uIHlvdXIgYmVoYWxmIGFjcm9zcyBBV1Mgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwU2VydmljZUxpbmtlZFJvbGVQb2xpY3lGb3JCYWNrdXAoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwU2VydmljZUxpbmtlZFJvbGVQb2xpY3lGb3JCYWNrdXApO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBV1MgQmFja3VwIHBlcm1pc3Npb24gdG8gY3JlYXRlIGJhY2t1cHMgb24geW91ciBiZWhhbGYgYWNyb3NzIEFXUyBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBTZXJ2aWNlTGlua2VkUm9sZVBvbGljeUZvckJhY2t1cFRlc3QoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwU2VydmljZUxpbmtlZFJvbGVQb2xpY3lGb3JCYWNrdXBUZXN0KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQVdTIEJhY2t1cCBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBiYWNrdXBzIG9uIHlvdXIgYmVoYWxmIGFjcm9zcyBBV1Mgc2VydmljZXMgKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JCYWNrdXAoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JCYWNrdXApO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgY29udGFpbmluZyBwZXJtaXNzaW9ucyBuZWNlc3NhcnkgZm9yIEFXUyBCYWNrdXAgdG8gaW5kZXggcmVjb3ZlcnkgcG9pbnRzLiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvckluZGV4aW5nKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9ySW5kZXhpbmcpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgY29udGFpbmluZyBwZXJtaXNzaW9ucyBuZWNlc3NhcnkgZm9yIEFXUyBCYWNrdXAgdG8gcmVzdG9yZSBpbmRpdmlkdWFsIGl0ZW1zIGluIGEgcmVjb3ZlcnkgcG9pbnQgKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JJdGVtUmVzdG9yZXMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JJdGVtUmVzdG9yZXMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBV1MgQmFja3VwIHBlcm1pc3Npb24gdG8gcGVyZm9ybSByZXN0b3JlcyBvbiB5b3VyIGJlaGFsZiBhY3Jvc3MgQVdTIHNlcnZpY2VzLiBUaGlzIHBvbGljeSBpbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBjcmVhdGUgYW5kIGRlbGV0ZSBBV1MgcmVzb3VyY2VzLCBzdWNoIGFzIEVCUyB2b2x1bWVzLCBSRFMgaW5zdGFuY2VzLCBhbmQgRUZTIGZpbGUgc3lzdGVtcywgd2hpY2ggYXJlIHBhcnQgb2YgdGhlIHJlc3RvcmUgcHJvY2Vzcy4gKi9cbiAgICBwdWJsaWMgQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JSZXN0b3JlcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvclJlc3RvcmVzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGNvbnRhaW5pbmcgcGVybWlzc2lvbnMgbmVjZXNzYXJ5IGZvciBBV1MgQmFja3VwIHRvIGJhY2t1cCBkYXRhIGluIGFueSBTMyBidWNrZXQuIFRoaXMgaW5jbHVkZXMgcmVhZCBhY2Nlc3MgdG8gYWxsIFMzIG9iamVjdHMgYW5kIGFueSBkZWNyeXB0IGFjY2VzcyBmb3IgYWxsIEtNUyBrZXlzLiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvclMzQmFja3VwKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yUzNCYWNrdXApO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgY29udGFpbmluZyBwZXJtaXNzaW9ucyBuZWNlc3NhcnkgZm9yIEFXUyBCYWNrdXAgdG8gcmVzdG9yZSBhIFMzIGJhY2t1cCB0byBhIGJ1Y2tldC4gVGhpcyBpbmNsdWRlcyByZWFkL3dyaXRlIHBlcm1pc3Npb25zIHRvIGFsbCBTMyBidWNrZXRzLCBhbmQgcGVybWlzc2lvbnMgdG8gR2VuZXJhdGVEYXRhS2V5IGFuZCBEZXNjcmliZUtleSBmb3IgYWxsIEtNUyBrZXlzLiAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvclMzUmVzdG9yZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvclMzUmVzdG9yZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBCYWNrdXAgcGVybWlzc2lvbiB0byBwZXJmb3JtIG1hbHdhcmUgc2NhbnMgb24geW91ciBBV1MgQmFja3VwIFJlY292ZXJ5IFBvaW50cyAqL1xuICAgIHB1YmxpYyBBV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvclNjYW5zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yU2NhbnMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyBmb3IgQVdTIEJhdGNoIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQmF0Y2hGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JhdGNoRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQ2xvdWRXYXRjaCBFdmVudCBUYXJnZXQgZm9yIEFXUyBCYXRjaCBKb2IgU3VibWlzc2lvbiAqL1xuICAgIHB1YmxpYyBBV1NCYXRjaFNlcnZpY2VFdmVudFRhcmdldFJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmF0Y2hTZXJ2aWNlRXZlbnRUYXJnZXRSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBBV1MgQmF0Y2ggc2VydmljZSByb2xlIHdoaWNoIGFsbG93cyBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyBpbmNsdWRpbmcgRUMyLCBBdXRvc2NhbGluZywgRUMyIENvbnRhaW5lciBzZXJ2aWNlIGFuZCBDbG91ZHdhdGNoIExvZ3MuICovXG4gICAgcHVibGljIEFXU0JhdGNoU2VydmljZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQmF0Y2hTZXJ2aWNlUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyBmb3IgQVdTIEJhdGNoIHRvIHF1ZXVlIGFuZCBtYW5hZ2UgQW1hem9uIFNhZ2VNYWtlciB3b3JrbG9hZHMgKi9cbiAgICBwdWJsaWMgQVdTQmF0Y2hTZXJ2aWNlUm9sZVBvbGljeUZvclNhZ2VNYWtlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCYXRjaFNlcnZpY2VSb2xlUG9saWN5Rm9yU2FnZU1ha2VyKTtcbiAgICB9XG5cbiAgICAvKiogQSBzZXJ2aWNlIGxpbmtlZCByb2xlIHRvIHByb3ZpZGUgQmlsbGluZyBhbmQgQ29zdCBNYW5hZ2VtZW50IERhdGEgRXhwb3J0cyBhY2Nlc3MgdG8gQVdTIHNlcnZpY2UgZGF0YSBmb3IgZXhwb3J0aW5nIHRoZSBkYXRhIHRvIGEgdGFyZ2V0IGxvY2F0aW9uLCBzdWNoIGFzIEFtYXpvbiBTMywgb24gYmVoYWxmIG9mIGEgY3VzdG9tZXIuICovXG4gICAgcHVibGljIEFXU0JDTURhdGFFeHBvcnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQkNNRGF0YUV4cG9ydHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBCZWRyb2NrIEFnZW50Q29yZSBHYXRld2F5IHRvIG1hbmFnZWQgVlBDIExhdHRpY2UgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFXU0JlZHJvY2tBZ2VudENvcmVHYXRld2F5TmV0d29ya1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JlZHJvY2tBZ2VudENvcmVHYXRld2F5TmV0d29ya1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEJlZHJvY2sgQWdlbnRDb3JlIElkZW50aXR5IHRvIG1hbmFnZWQgVlBDIExhdHRpY2UgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFXU0JlZHJvY2tBZ2VudENvcmVJZGVudGl0eU5ldHdvcmtTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCZWRyb2NrQWdlbnRDb3JlSWRlbnRpdHlOZXR3b3JrU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQmVkcm9jayBBZ2VudENvcmUgUnVudGltZSBJbnN0YW5jZXMgdG8gbWFuYWdlIGNvbXB1dGUgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NCZWRyb2NrQWdlbnRDb3JlUnVudGltZUluc3RhbmNlc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JlZHJvY2tBZ2VudENvcmVSdW50aW1lSW5zdGFuY2VzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBVc2UgdGhlIEFXU0JpbGxpbmdDb25kdWN0b3JGdWxsQWNjZXNzIG1hbmFnZWQgcG9saWN5IHRvIGFsbG93IGNvbXBsZXRlIGFjY2VzcyB0byBBV1MgQmlsbGluZyBDb25kdWN0b3IgKEFCQykgY29uc29sZSBhbmQgQVBJcy4gVGhpcyBwb2xpY3kgYWxsb3dzIHVzZXJzIHRvIGxpc3QsIGNyZWF0ZSBhbmQgZGVsZXRlIEFCQyByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0JpbGxpbmdDb25kdWN0b3JGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JpbGxpbmdDb25kdWN0b3JGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVXNlIHRoZSBBV1NCaWxsaW5nQ29uZHVjdG9yUmVhZE9ubHlBY2Nlc3MgbWFuYWdlZCBwb2xpY3kgdG8gYWxsb3cgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgQmlsbGluZyBDb25kdWN0b3IgKEFCQykgY29uc29sZSBhbmQgQVBJcy4gVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb24gdG8gdmlldyBhbmQgbGlzdCBhbGwgQUJDIHJlc291cmNlcy4gSXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgYWJpbGl0eSB0byBjcmVhdGUgb3IgZGVsZXRlIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQmlsbGluZ0NvbmR1Y3RvclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0JpbGxpbmdDb25kdWN0b3JSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB1c2VycyB0byB2aWV3IGJpbGxzIG9uIHRoZSBCaWxsaW5nIENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0JpbGxpbmdSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCaWxsaW5nUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYmlsbGluZyBzZXJ2aWNlIHRvIHZhbGlkYXRlIGFjY2VzcyB0byBiaWxsaW5nIHZpZXcgZGF0YSBmb3IgZGVyaXZlZCBiaWxsaW5nIHZpZXdzICovXG4gICAgcHVibGljIEFXU0JpbGxpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCaWxsaW5nU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBnaXZlcyBwZXJtaXNzaW9ucyB0byBjb250cm9sIEFXUyByZXNvdXJjZXMuIEZvciBleGFtcGxlLCB0byBzdGFydCBhbmQgc3RvcCBFQzIgb3IgUkRTIGluc3RhbmNlcyBieSBleGVjdXRpbmcgQVdTIFN5c3RlbXMgTWFuYWdlciAoU1NNKSBzY3JpcHRzLiAqL1xuICAgIHB1YmxpYyBBV1NCdWRnZXRzQWN0aW9uc1JvbGVQb2xpY3lGb3JSZXNvdXJjZUFkbWluaXN0cmF0aW9uV2l0aFNTTSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCdWRnZXRzQWN0aW9uc1JvbGVQb2xpY3lGb3JSZXNvdXJjZUFkbWluaXN0cmF0aW9uV2l0aFNTTSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBCdWRnZXRzIEFjdGlvbnMgaW5jbHVkaW5nIHVzaW5nIEJ1ZGdldHMgQWN0aW9ucyB0byBjb250cm9sIHN0YXRlcyBvZiBydW5uaW5nIEFXUyByZXNvdXJjZXMgdmlhIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgKi9cbiAgICBwdWJsaWMgQVdTQnVkZ2V0c0FjdGlvbnNXaXRoQVdTUmVzb3VyY2VDb250cm9sQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0J1ZGdldHNBY3Rpb25zV2l0aEFXU1Jlc291cmNlQ29udHJvbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIEJ1ZGdldHMgQ29uc29sZSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0J1ZGdldHNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCdWRnZXRzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdGhlIEFXUyBCdWRnZXRzIHNlcnZpY2UgcGVybWlzc2lvbnMgdG8gZGVzY3JpYmUsIHN0b3AsIGFuZCB0ZXJtaW5hdGUgcmVzb3VyY2VzIGluIGEgbWVtYmVyIGFjY291bnQgdG8gZW5mb3JjZSBzcGVuZCBsaW1pdCBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NCdWRnZXRzU3BlbmRMaW1pdE1lbWJlclJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQnVkZ2V0c1NwZW5kTGltaXRNZW1iZXJSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBJQU0gcG9saWN5IGdyYW50cyB1c2VycyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIEJ1Z0J1c3QgY29uc29sZSAqL1xuICAgIHB1YmxpYyBBV1NCdWdCdXN0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NCdWdCdXN0RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgSUFNIHBvbGljeSBncmFudHMgdXNlcnMgYWNjZXNzIHRvIHBhcnRpY2lwYXRlIGluIEFXUyBCdWdCdXN0IGV2ZW50cyAqL1xuICAgIHB1YmxpYyBBV1NCdWdCdXN0UGxheWVyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0J1Z0J1c3RQbGF5ZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gQVdTIEJ1Z0J1c3QgdG8gYWNjZXNzIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBV1NCdWdCdXN0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQnVnQnVzdFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgKEFDTSkgKi9cbiAgICBwdWJsaWMgQVdTQ2VydGlmaWNhdGVNYW5hZ2VyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDZXJ0aWZpY2F0ZU1hbmFnZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYXVkaXRvciBhY2Nlc3MgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKi9cbiAgICBwdWJsaWMgQVdTQ2VydGlmaWNhdGVNYW5hZ2VyUHJpdmF0ZUNBQXVkaXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDZXJ0aWZpY2F0ZU1hbmFnZXJQcml2YXRlQ0FBdWRpdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKi9cbiAgICBwdWJsaWMgQVdTQ2VydGlmaWNhdGVNYW5hZ2VyUHJpdmF0ZUNBRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDZXJ0aWZpY2F0ZU1hbmFnZXJQcml2YXRlQ0FGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcHJpdmlsZWdlZCBjZXJ0aWZpY2F0ZSB1c2VyIGFjY2VzcyB0byBBV1MgQ2VydGlmaWNhdGUgTWFuYWdlciBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSAqL1xuICAgIHB1YmxpYyBBV1NDZXJ0aWZpY2F0ZU1hbmFnZXJQcml2YXRlQ0FQcml2aWxlZ2VkVXNlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDZXJ0aWZpY2F0ZU1hbmFnZXJQcml2YXRlQ0FQcml2aWxlZ2VkVXNlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKi9cbiAgICBwdWJsaWMgQVdTQ2VydGlmaWNhdGVNYW5hZ2VyUHJpdmF0ZUNBUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2VydGlmaWNhdGVNYW5hZ2VyUHJpdmF0ZUNBUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjZXJ0aWZpY2F0ZSB1c2VyIGFjY2VzcyB0byBBV1MgQ2VydGlmaWNhdGUgTWFuYWdlciBQcml2YXRlIENlcnRpZmljYXRlIEF1dGhvcml0eSAqL1xuICAgIHB1YmxpYyBBV1NDZXJ0aWZpY2F0ZU1hbmFnZXJQcml2YXRlQ0FVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NlcnRpZmljYXRlTWFuYWdlclByaXZhdGVDQVVzZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBDZXJ0aWZpY2F0ZSBNYW5hZ2VyIChBQ00pLiAqL1xuICAgIHB1YmxpYyBBV1NDZXJ0aWZpY2F0ZU1hbmFnZXJSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDZXJ0aWZpY2F0ZU1hbmFnZXJSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBTZXJ2aWNlIExpbmtlZCBSb2xlIHVzZWQgYnkgQVdTIENoYXRib3QuICovXG4gICAgcHVibGljIEFXU0NoYXRib3RTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDaGF0Ym90U2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgZnVsbCBhY2Nlc3MgdG8gQVdTIENsZWFuIFJvb21zIHJlc291cmNlcyBhbmQgYWNjZXNzIHRvIHJlbGF0ZWQgQVdTIFNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDbGVhblJvb21zRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbGVhblJvb21zRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBmdWxsIGFjY2VzcyB0byBBV1MgQ2xlYW4gUm9vbXMgcmVzb3VyY2VzIGV4Y2VwdCBmb3IgcXVlcnlpbmcgaW4gYSBjb2xsYWJvcmF0aW9uIGFuZCBhY2Nlc3MgdG8gcmVsYXRlZCBBV1MgU2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0NsZWFuUm9vbXNGdWxsQWNjZXNzTm9RdWVyeWluZygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbGVhblJvb21zRnVsbEFjY2Vzc05vUXVlcnlpbmcpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgZnVsbCBhY2Nlc3MgdG8gQVdTIENsZWFuIFJvb21zIE1MIHJlc291cmNlcyBhbmQgYWNjZXNzIHRvIHJlbGF0ZWQgQVdTIFNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDbGVhblJvb21zTUxGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NsZWFuUm9vbXNNTEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgQ2xlYW4gUm9vbXMgTUwgcmVzb3VyY2VzIGFuZCByZWFkLW9ubHkgYWNjZXNzIHRvIHJlbGF0ZWQgQVdTIENsZWFuIFJvb21zIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NDbGVhblJvb21zTUxSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbGVhblJvb21zTUxSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBDbGVhbiBSb29tcyByZXNvdXJjZXMgYW5kIHJlYWQtb25seSBhY2Nlc3MgdG8gcmVsYXRlZCBBV1MgR2x1ZSBhbmQgQW1hem9uIENsb3VkV2F0Y2ggTG9ncyByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0NsZWFuUm9vbXNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbGVhblJvb21zUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBBV1MgQ2xlYW4gUm9vbXMgdG8gYWNjZXNzIG90aGVyIEFXUyBzZXJ2aWNlcyBzdWNoIGFzIENsb3VkV2F0Y2ggQVBJcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTQ2xlYW5Sb29tc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NsZWFuUm9vbXNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0b3IgYWNjZXNzIHRvIEFXUyBDbG91ZDkuICovXG4gICAgcHVibGljIEFXU0Nsb3VkOUFkbWluaXN0cmF0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWQ5QWRtaW5pc3RyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGJlIGludml0ZWQgaW50byBBV1MgQ2xvdWQ5IHNoYXJlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMuICovXG4gICAgcHVibGljIEFXU0Nsb3VkOUVudmlyb25tZW50TWVtYmVyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkOUVudmlyb25tZW50TWVtYmVyKTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSBMaW5rZWQgUm9sZSBQb2xpY3kgZm9yIEFXUyBDbG91ZDkgKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWQ5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWQ5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSB3aWxsIGJlIHVzZWQgdG8gYXR0YWNoIGEgcm9sZSBvbiBhIEluc3RhbmNlUHJvZmlsZSB3aGljaCB3aWxsIGFsbG93IENsb3VkOSB0byB1c2UgdGhlIFNTTSBTZXNzaW9uIE1hbmFnZXIgdG8gY29ubmVjdCB0byB0aGUgaW5zdGFuY2UgKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWQ5U1NNSW5zdGFuY2VQcm9maWxlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkOVNTTUluc3RhbmNlUHJvZmlsZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb24gdG8gY3JlYXRlIEFXUyBDbG91ZDkgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzIGFuZCB0byBtYW5hZ2Ugb3duZWQgZW52aXJvbm1lbnRzLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZDlVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkOVVzZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgQ2xvdWRGb3JtYXRpb24uICovXG4gICAgcHVibGljIEFXU0Nsb3VkRm9ybWF0aW9uRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZEZvcm1hdGlvbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIENsb3VkRm9ybWF0aW9uIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRGb3JtYXRpb25SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZEZvcm1hdGlvblJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIENsb3VkRnJvbnQgTG9nZ2VyIHdyaXRlIHBlcm1pc3Npb25zIHRvIENsb3VkV2F0Y2ggTG9ncy4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRGcm9udExvZ2dlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZEZyb250TG9nZ2VyKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENsb3VkRnJvbnQgdG8gbWFuYWdlIEVDMiBFbGFzdGljIE5ldHdvcmsgSW50ZXJmYWNlcyBhbmQgU2VjdXJpdHkgR3JvdXBzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZEZyb250VlBDT3JpZ2luU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRGcm9udFZQQ09yaWdpblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIENsb3VkSFNNIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRIU01GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkSFNNRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIENsb3VkSFNNIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRIU01SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZEhTTVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBBV1MgQ2xvdWRIU00gc2VydmljZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZEhTTVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRIU01Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBDbG91ZCBNYXAgZGlzY292ZXJ5IEFQSS4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRNYXBEaXNjb3Zlckluc3RhbmNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkTWFwRGlzY292ZXJJbnN0YW5jZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBBV1MgQ2xvdWQgTWFwIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0Nsb3VkTWFwRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZE1hcEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIGFsbCBBV1MgQ2xvdWQgTWFwIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0Nsb3VkTWFwUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ2xvdWRNYXBSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlZ2lzdHJhbnQgbGV2ZWwgYWNjZXNzIHRvIEFXUyBDbG91ZCBNYXAgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRNYXBSZWdpc3Rlckluc3RhbmNlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkTWFwUmVnaXN0ZXJJbnN0YW5jZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB1c2luZyBBV1MgQ2xvdWRTaGVsbCB3aXRoIGFsbCBmZWF0dXJlcyAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZFNoZWxsRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZFNoZWxsRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDbG91ZFRyYWlsLiAqL1xuICAgIHB1YmxpYyBBV1NDbG91ZFRyYWlsRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZFRyYWlsRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIENsb3VkVHJhaWwuICovXG4gICAgcHVibGljIEFXU0Nsb3VkVHJhaWxSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDbG91ZFRyYWlsUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyB1c2VkIGJ5IHRoZSBzZXJ2aWNlLWxpbmtlZCByb2xlIG5hbWVkIEFXU1NlcnZpY2VSb2xlRm9yQ2xvdWRXYXRjaEFsYXJtc19BY3Rpb25TU01JbmNpZGVudHMuIENsb3VkV2F0Y2ggdXNlcyB0aGlzIHNlcnZpY2UtbGlua2VkIHJvbGUgdG8gcGVyZm9ybSBBV1MgU3lzdGVtIE1hbmFnZXIgSW5jaWRlbnQgTWFuYWdlciBhY3Rpb25zIHdoZW4gYSBDbG91ZFdhdGNoIGFsYXJtIGdvZXMgaW4gdG8gQUxBUk0gc3RhdGUuIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9uIHRvIHN0YXJ0IGluY2lkZW50cyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTQ2xvdWRXYXRjaEFsYXJtc0FjdGlvblNTTUluY2lkZW50c1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0Nsb3VkV2F0Y2hBbGFybXNBY3Rpb25TU01JbmNpZGVudHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDb2RlQXJ0aWZhY3QgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlQXJ0aWZhY3RBZG1pbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlQXJ0aWZhY3RBZG1pbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIENvZGVBcnRpZmFjdCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0NvZGVBcnRpZmFjdFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVBcnRpZmFjdFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIENvZGVCdWlsZCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuIEFsc28gYXR0YWNoIEFtYXpvblMzUmVhZE9ubHlBY2Nlc3MgdG8gcHJvdmlkZSBhY2Nlc3MgdG8gZG93bmxvYWQgYnVpbGQgYXJ0aWZhY3RzLCBhbmQgYXR0YWNoIElBTUZ1bGxBY2Nlc3MgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgdGhlIHNlcnZpY2Ugcm9sZSBmb3IgQ29kZUJ1aWxkLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlQnVpbGRBZG1pbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlQnVpbGRBZG1pbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgQ29kZUJ1aWxkIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSwgYnV0IGRvZXMgbm90IGFsbG93IENvZGVCdWlsZCBwcm9qZWN0IGFkbWluaXN0cmF0aW9uLiBBbHNvIGF0dGFjaCBBbWF6b25TM1JlYWRPbmx5QWNjZXNzIHRvIHByb3ZpZGUgYWNjZXNzIHRvIGRvd25sb2FkIGJ1aWxkIGFydGlmYWN0cy4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZUJ1aWxkRGV2ZWxvcGVyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVCdWlsZERldmVsb3BlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIENvZGVCdWlsZCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuIEFsc28gYXR0YWNoIEFtYXpvblMzUmVhZE9ubHlBY2Nlc3MgdG8gcHJvdmlkZSBhY2Nlc3MgdG8gZG93bmxvYWQgYnVpbGQgYXJ0aWZhY3RzLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlQnVpbGRSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlQnVpbGRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBDb2RlQ29tbWl0IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZUNvbW1pdEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZUNvbW1pdEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgQ29kZUNvbW1pdCByZXBvc2l0b3JpZXMsIGJ1dCBkb2VzIG5vdCBhbGxvdyByZXBvc2l0b3J5IGRlbGV0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlQ29tbWl0UG93ZXJVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVDb21taXRQb3dlclVzZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBDb2RlQ29tbWl0IHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZUNvbW1pdFJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVDb21taXRSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byByZWdpc3RlciBhbmQgZGVwbG95IGEgcmV2aXNpb24uICovXG4gICAgcHVibGljIEFXU0NvZGVEZXBsb3lEZXBsb3llckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlRGVwbG95RGVwbG95ZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBDb2RlRGVwbG95IHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZURlcGxveUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZURlcGxveUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIENvZGVEZXBsb3kgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlRGVwbG95UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZURlcGxveVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQ29kZURlcGxveSBzZXJ2aWNlIGFjY2VzcyB0byBleHBhbmQgdGFncyBhbmQgaW50ZXJhY3Qgd2l0aCBBdXRvIFNjYWxpbmcgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0NvZGVEZXBsb3lSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVEZXBsb3lSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQ29kZURlcGxveSBzZXJ2aWNlIGFjY2VzcyB0byBpbnZva2UgTGFtYmRhIGZ1bmN0aW9uIG9uIHlvdXIgYmVoYWxmIHRvIHBlcmZvcm0gYmx1ZS9ncmVlbiBkZXBsb3ltZW50IHRocm91Z2ggQ2xvdWRGb3JtYXRpb24uICovXG4gICAgcHVibGljIEFXU0NvZGVEZXBsb3lSb2xlRm9yQ2xvdWRGb3JtYXRpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZURlcGxveVJvbGVGb3JDbG91ZEZvcm1hdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIENvZGVEZXBsb3kgc2VydmljZSB3aWRlIGFjY2VzcyB0byBwZXJmb3JtIGFuIEVDUyBibHVlL2dyZWVuIGRlcGxveW1lbnQgb24geW91ciBiZWhhbGYuIEdyYW50cyBmdWxsIGFjY2VzcyB0byBzdXBwb3J0IHNlcnZpY2VzLCBzdWNoIGFzICBmdWxsIGFjY2VzcyB0byByZWFkIGFsbCBTMyBvYmplY3RzLCBpbnZva2UgYWxsIExhbWJkYSBmdW5jdGlvbnMsIHB1Ymxpc2ggdG8gYWxsIFNOUyB0b3BpY3Mgd2l0aGluIHRoZSBhY2NvdW50IGFuZCB1cGRhdGUgYWxsIEVDUyBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZURlcGxveVJvbGVGb3JFQ1MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZURlcGxveVJvbGVGb3JFQ1MpO1xuICAgIH1cblxuICAgIC8qKiAgUHJvdmlkZXMgQ29kZURlcGxveSBzZXJ2aWNlIGxpbWl0ZWQgYWNjZXNzIHRvIHBlcmZvcm0gYW4gRUNTIGJsdWUvZ3JlZW4gZGVwbG95bWVudCBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZURlcGxveVJvbGVGb3JFQ1NMaW1pdGVkKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVEZXBsb3lSb2xlRm9yRUNTTGltaXRlZCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIENvZGVEZXBsb3kgc2VydmljZSBhY2Nlc3MgdG8gcGVyZm9ybSBhIExhbWJkYSBkZXBsb3ltZW50IG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlRGVwbG95Um9sZUZvckxhbWJkYSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlRGVwbG95Um9sZUZvckxhbWJkYSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIENvZGVEZXBsb3kgc2VydmljZSBsaW1pdGVkIGFjY2VzcyB0byBwZXJmb3JtIGEgTGFtYmRhIGRlcGxveW1lbnQgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0NvZGVEZXBsb3lSb2xlRm9yTGFtYmRhTGltaXRlZCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlRGVwbG95Um9sZUZvckxhbWJkYUxpbWl0ZWQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgQ29kZVBpcGVsaW5lIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZVBpcGVsaW5lRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlUGlwZWxpbmVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgQ29kZVBpcGVsaW5lIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTQ29kZVBpcGVsaW5lUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZVBpcGVsaW5lUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gdmlldyBhbmQgYXBwcm92ZSBtYW51YWwgY2hhbmdlcyBmb3IgYWxsIHBpcGVsaW5lcyAqL1xuICAgIHB1YmxpYyBBV1NDb2RlUGlwZWxpbmVBcHByb3ZlckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlUGlwZWxpbmVBcHByb3ZlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyBmb3IgY3VzdG9tIGFjdGlvbnMgdG8gcG9sbCBmb3Igam9icyBkZXRhaWxzIChpbmNsdWRpbmcgdGVtcG9yYXJ5IGNyZWRlbnRpYWxzKSBhbmQgcmVwb3J0IHN0YXR1cyB1cGRhdGVzIHRvIEFXUyBDb2RlUGlwZWxpbmUuICovXG4gICAgcHVibGljIEFXU0NvZGVQaXBlbGluZUN1c3RvbUFjdGlvbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb2RlUGlwZWxpbmVDdXN0b21BY3Rpb25BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgQ29kZVN0YXIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlU3RhckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZVN0YXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBDb2RlU3RhciBOb3RpZmljYXRpb25zIHRvIGFjY2VzcyBBbWF6b24gQ2xvdWRXYXRjaCBFdmVudHMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTQ29kZVN0YXJOb3RpZmljYXRpb25zU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29kZVN0YXJOb3RpZmljYXRpb25zU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBETyBOT1QgVVNFIC0gIEFXUyBDb2RlU3RhciBTZXJ2aWNlIFJvbGUgUG9saWN5IHdoaWNoIGdyYW50cyBhZG1pbmlzdHJhdGl2ZSBwcml2aWxlZ2VzIGluIG9yZGVyIGZvciBDb2RlU3RhciB0byBtYW5hZ2UgSUFNIGFuZCBvdGhlciBzZXJ2aWNlIHJlc291cmNlcyBvbiBiZWhhbGYgb2YgdGhlIGN1c3RvbWVyLiAqL1xuICAgIHB1YmxpYyBBV1NDb2RlU3RhclNlcnZpY2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvZGVTdGFyU2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBEZW5pZXMgYWNjZXNzIHRvIGNlcnRhaW4gYWN0aW9ucywgYXBwbGllZCBieSB0aGUgQVdTIHRlYW0gaW4gdGhlIGV2ZW50IHRoYXQgYW4gSUFNIHVzZXIncyBjcmVkZW50aWFscyBoYXZlIGJlZW4gY29tcHJvbWlzZWQgb3IgZXhwb3NlZCBwdWJsaWNseS4gIERvIE5PVCByZW1vdmUgdGhpcyBwb2xpY3kuICBJbnN0ZWFkLCBwbGVhc2UgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWVkIGluIHRoZSBlbWFpbCBzZW50IHRvIHlvdSByZWdhcmRpbmcgdGhpcyBldmVudC4gKi9cbiAgICBwdWJsaWMgQVdTQ29tcHJvbWlzZWRLZXlRdWFyYW50aW5lKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbXByb21pc2VkS2V5UXVhcmFudGluZSk7XG4gICAgfVxuXG4gICAgLyoqIERlbmllcyBhY2Nlc3MgdG8gY2VydGFpbiBhY3Rpb25zLCBhcHBsaWVkIGJ5IHRoZSBBV1MgdGVhbSBpbiB0aGUgZXZlbnQgdGhhdCBhbiBJQU0gdXNlcidzIGNyZWRlbnRpYWxzIGhhdmUgYmVlbiBjb21wcm9taXNlZCBvciBleHBvc2VkIHB1YmxpY2x5LiBEbyBOT1QgcmVtb3ZlIHRoaXMgcG9saWN5LiBJbnN0ZWFkLCBwbGVhc2UgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWVkIGluIHRoZSBzdXBwb3J0IGNhc2UgY3JlYXRlZCBmb3IgeW91IHJlZ2FyZGluZyB0aGlzIGV2ZW50LiAqL1xuICAgIHB1YmxpYyBBV1NDb21wcm9taXNlZEtleVF1YXJhbnRpbmVWMigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb21wcm9taXNlZEtleVF1YXJhbnRpbmVWMik7XG4gICAgfVxuXG4gICAgLyoqIERlbmllcyBhY2Nlc3MgdG8gY2VydGFpbiBhY3Rpb25zLCBhcHBsaWVkIGJ5IEFXUyBpbiB0aGUgZXZlbnQgdGhhdCBhbiBJQU0gdXNlcidzIGNyZWRlbnRpYWxzIGhhdmUgYmVlbiBjb21wcm9taXNlZCBvciBleHBvc2VkIHB1YmxpY2x5LiBUaGUgcG9saWN5IGFpbXMgdG8gbGltaXQgdGhlIHBvdGVudGlhbCBkYW1hZ2UgdGhhdCBtYXkgYmUgY2F1c2VkIGJ5IGZyYXVkLXJlbGF0ZWQgYWN0aXZpdHkgbGVhZGluZyB0byB1bmF1dGhvcml6ZWQgY2hhcmdlcywgd2hpbGUgbm90IGltcGFjdGluZyB0aGUgZXhpc3RpbmcgcmVzb3VyY2VzLiBEbyBOT1QgcmVtb3ZlIHRoaXMgcG9saWN5LiBJbnN0ZWFkLCBwbGVhc2UgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWVkIGluIHRoZSBzdXBwb3J0IGNhc2UgY3JlYXRlZCBmb3IgeW91IHJlZ2FyZGluZyB0aGlzIGV2ZW50LiAqL1xuICAgIHB1YmxpYyBBV1NDb21wcm9taXNlZEtleVF1YXJhbnRpbmVWMygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb21wcm9taXNlZEtleVF1YXJhbnRpbmVWMyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBDb25maWcgdG8gY2FsbCBBV1Mgc2VydmljZXMgYW5kIGRlcGxveSBjb25maWcgcmVzb3VyY2VzIGFjcm9zcyBvcmdhbml6YXRpb24gKi9cbiAgICBwdWJsaWMgQVdTQ29uZmlnTXVsdGlBY2NvdW50U2V0dXBQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29uZmlnTXVsdGlBY2NvdW50U2V0dXBQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIENvbmZpZyB0byByZW1lZGlhdGUgbm9uY29tcGxpYW50IHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTQ29uZmlnUmVtZWRpYXRpb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb25maWdSZW1lZGlhdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBDb25maWcgdG8gY2FsbCByZWFkLW9ubHkgQVdTIE9yZ2FuaXphdGlvbnMgQVBJcyAqL1xuICAgIHB1YmxpYyBBV1NDb25maWdSb2xlRm9yT3JnYW5pemF0aW9ucygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb25maWdSb2xlRm9yT3JnYW5pemF0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhbiBBV1MgTGFtYmRhIGZ1bmN0aW9uIHRvIGFjY2VzcyB0aGUgQVdTIENvbmZpZyBBUEkgYW5kIHRoZSBjb25maWd1cmF0aW9uIHNuYXBzaG90cyB0aGF0IEFXUyBDb25maWcgZGVsaXZlcnMgcGVyaW9kaWNhbGx5IHRvIEFtYXpvbiBTMy4gVGhpcyBhY2Nlc3MgaXMgcmVxdWlyZWQgYnkgZnVuY3Rpb25zIHRoYXQgZXZhbHVhdGUgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGZvciBjdXN0b20gQ29uZmlnIHJ1bGVzLiAqL1xuICAgIHB1YmxpYyBBV1NDb25maWdSdWxlc0V4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29uZmlnUnVsZXNFeGVjdXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENvbmZpZyB0byBjYWxsIEFXUyBzZXJ2aWNlcyBhbmQgY29sbGVjdCByZXNvdXJjZSBjb25maWd1cmF0aW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTQ29uZmlnU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29uZmlnU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgQVdTIENvbmZpZyB0byBpbnZlbnRvcnkgYW5kIGV2YWx1YXRlIGNvbXBsaWFuY2Ugb2YgdGhpcmQtcGFydHkgY2xvdWQgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NDb25maWdUaGlyZFBhcnR5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29uZmlnVGhpcmRQYXJ0eVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHVzZSBBV1MgQ29uZmlnLCBpbmNsdWRpbmcgc2VhcmNoaW5nIGJ5IHRhZ3Mgb24gcmVzb3VyY2VzLCBhbmQgcmVhZGluZyBhbGwgdGFncy4gVGhpcyBkb2VzIG5vdCBwcm92aWRlIHBlcm1pc3Npb24gdG8gY29uZmlndXJlIEFXUyBDb25maWcsIHdoaWNoIHJlcXVpcmVzIGFkbWluaXN0cmF0aXZlIHByaXZpbGVnZXMuICovXG4gICAgcHVibGljIEFXU0NvbmZpZ1VzZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29uZmlnVXNlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYnJvYWQgcmVhZC93cml0ZSBhY2Nlc3MgdG8gQUxMIEVDMiBvYmplY3RzLCByZWFkL3dyaXRlIGFjY2VzcyB0byBTMyBidWNrZXRzIHN0YXJ0aW5nIHdpdGggJ2ltcG9ydC10by1lYzItJywgYW5kIHRoZSBhYmlsaXR5IHRvIGxpc3QgYWxsIFMzIGJ1Y2tldHMsIGZvciB0aGUgQVdTIENvbm5lY3RvciB0byBpbXBvcnQgVk1zIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDb25uZWN0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29ubmVjdG9yKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBDb250cm9sIFRvd2VyIHRvIGNhbGwgQVdTIHNlcnZpY2VzIHRoYXQgcHJvdmlkZSBhdXRvbWF0ZWQgYWNjb3VudCBjb25maWd1cmF0aW9uIGFuZCBjZW50cmFsaXplZCBnb3Zlcm5hbmNlIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NDb250cm9sVG93ZXJBY2NvdW50U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29udHJvbFRvd2VyQWNjb3VudFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQVdTIENvbnRyb2wgVG93ZXIgZW5hYmxlcyBBV1MgQ2xvdWRUcmFpbCBhcyBhIGJlc3QgcHJhY3RpY2UgYW5kIHByb3ZpZGVzIHRoaXMgcm9sZSB0byBBV1MgQ2xvdWRUcmFpbC4gQVdTIENsb3VkVHJhaWwgYXNzdW1lcyB0aGlzIHJvbGUgdG8gY3JlYXRlIGFuZCBwdWJsaXNoIENsb3VkVHJhaWwgbG9ncyAqL1xuICAgIHB1YmxpYyBBV1NDb250cm9sVG93ZXJDbG91ZFRyYWlsUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb250cm9sVG93ZXJDbG91ZFRyYWlsUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIG1hbmFnZSB0aGUgSUFNIElkZW50aXR5IENlbnRlciAoSWRDKSByZXNvdXJjZXMgaW4gdGhlIG1lbWJlciBhY2NvdW50cyBlbnJvbGxlZCB3aXRoIEFXUyBDb250cm9sIFRvd2VyLiBUaGUgcG9saWN5IGlzIGF0dGFjaGVkIHRvIHRoZSBBV1NDb250cm9sVG93ZXJBZG1pbiByb2xlIG9ubHkgaWYgdGhlIGN1c3RvbWVyIGhhcyBvcHRlZC1pbnRvIElBTSBJZEMgaW50ZWdyYXRpb24gaW4gdGhlaXIgQVdTIENvbnRyb2wgVG93ZXIgTGFuZGluZyBab25lLiAqL1xuICAgIHB1YmxpYyBBV1NDb250cm9sVG93ZXJJZGVudGl0eUNlbnRlck1hbmFnZW1lbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTQ29udHJvbFRvd2VySWRlbnRpdHlDZW50ZXJNYW5hZ2VtZW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBSZXNvdXJjZXMgbWFuYWdlZCBvciB1c2VkIGJ5IEFXUyBDb250cm9sIFRvd2VyICovXG4gICAgcHVibGljIEFXU0NvbnRyb2xUb3dlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0NvbnRyb2xUb3dlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIHRvIGRlc2NyaWJlIHRoZSBvcmdhbml6YXRpb24gb2YgdGhlIGFjY291bnQsIGNyZWF0ZSBTMyBidWNrZXRzIGZvciB0aGUgTUFQIHByb2dyYW0gYW5kIGFwcGx5IHRhZ3MgdG8gaXQsIGNyZWF0ZSBhIENvc3QgYW5kIFVzYWdlIFJlcG9ydCwgYW5kIGRlc2NyaWJlIENvc3QgYW5kIFVzYWdlIFJlcG9ydCBkZWZpbml0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTQ29zdEFuZFVzYWdlUmVwb3J0QXV0b21hdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NDb3N0QW5kVXNhZ2VSZXBvcnRBdXRvbWF0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR2l2ZXMgRGF0YSBHcmFudCBvd25lcnMgYWNjZXNzIHRvIEFXUyBEYXRhIEV4Y2hhbmdlIGFjdGlvbnMgdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gKi9cbiAgICBwdWJsaWMgQVdTRGF0YUV4Y2hhbmdlRGF0YUdyYW50T3duZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFFeGNoYW5nZURhdGFHcmFudE93bmVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdpdmVzIERhdGEgR3JhbnQgcmVjZWl2ZXIgYWNjZXNzIHRvIEFXUyBEYXRhIEV4Y2hhbmdlIGFjdGlvbnMgdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gKi9cbiAgICBwdWJsaWMgQVdTRGF0YUV4Y2hhbmdlRGF0YUdyYW50UmVjZWl2ZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFFeGNoYW5nZURhdGFHcmFudFJlY2VpdmVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFjY2VzcyB0byBBV1MgRGF0YSBFeGNoYW5nZSBhbmQgQVdTIE1hcmtldHBsYWNlIGFjdGlvbnMgdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gSXQgYWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgbmVlZGVkIHRvIHRha2UgZnVsbCBhZHZhbnRhZ2Ugb2YgQVdTIERhdGEgRXhjaGFuZ2UuICovXG4gICAgcHVibGljIEFXU0RhdGFFeGNoYW5nZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YUV4Y2hhbmdlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBkYXRhIHByb3ZpZGVyIGFjY2VzcyB0byBBV1MgRGF0YSBFeGNoYW5nZSBhbmQgQVdTIE1hcmtldHBsYWNlIGFjdGlvbnMgdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gSXQgYWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgbmVlZGVkIHRvIHRha2UgZnVsbCBhZHZhbnRhZ2Ugb2YgQVdTIERhdGEgRXhjaGFuZ2UuICovXG4gICAgcHVibGljIEFXU0RhdGFFeGNoYW5nZVByb3ZpZGVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhRXhjaGFuZ2VQcm92aWRlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgRGF0YSBFeGNoYW5nZSBhbmQgQVdTIE1hcmtldHBsYWNlIGFjdGlvbnMgdXNpbmcgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gKi9cbiAgICBwdWJsaWMgQVdTRGF0YUV4Y2hhbmdlUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YUV4Y2hhbmdlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIERhdGEgRXhjaGFuZ2UgdG8gYWNjZXNzIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBV1MgRGF0YSBFeGNoYW5nZSBmb3IgbGljZW5zZSBtYW5hZ2VtZW50LiAqL1xuICAgIHB1YmxpYyBBV1NEYXRhRXhjaGFuZ2VTZXJ2aWNlUm9sZVBvbGljeUZvckxpY2Vuc2VNYW5hZ2VtZW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFFeGNoYW5nZVNlcnZpY2VSb2xlUG9saWN5Rm9yTGljZW5zZU1hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIERhdGEgRXhjaGFuZ2UgdG8gcmVhZCBkYXRhIGFib3V0IHlvdXIgQVdTIE9yZ2FuaXphdGlvbiB0byBkZXRlcm1pbmUgZWxpZ2liaWxpdHkgZm9yIEFXUyBEYXRhIEV4Y2hhbmdlIGRhdGEgZ3JhbnRzIGxpY2Vuc2UgZGlzdHJpYnV0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NEYXRhRXhjaGFuZ2VTZXJ2aWNlUm9sZVBvbGljeUZvck9yZ2FuaXphdGlvbkRpc2NvdmVyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhRXhjaGFuZ2VTZXJ2aWNlUm9sZVBvbGljeUZvck9yZ2FuaXphdGlvbkRpc2NvdmVyeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBkYXRhIHN1YnNjcmliZXIgYWNjZXNzIHRvIEFXUyBEYXRhIEV4Y2hhbmdlIGFuZCBBV1MgTWFya2V0cGxhY2UgYWN0aW9ucyB1c2luZyB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBhbmQgU0RLLiBJdCBhbHNvIHByb3ZpZGVzIHNlbGVjdCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyBuZWVkZWQgdG8gdGFrZSBmdWxsIGFkdmFudGFnZSBvZiBBV1MgRGF0YSBFeGNoYW5nZS4gKi9cbiAgICBwdWJsaWMgQVdTRGF0YUV4Y2hhbmdlU3Vic2NyaWJlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YUV4Y2hhbmdlU3Vic2NyaWJlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhcHByb3ByaWF0ZSBwZXJtaXNzaW9ucyB0byBBV1MgRGF0YSBMaWZlY3ljbGUgTWFuYWdlciB0byB0YWtlIGFjdGlvbnMgb24gQVdTIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NEYXRhTGlmZWN5Y2xlTWFuYWdlclNlcnZpY2VSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFMaWZlY3ljbGVNYW5hZ2VyU2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhcHByb3ByaWF0ZSBwZXJtaXNzaW9ucyB0byBBV1MgRGF0YSBMaWZlY3ljbGUgTWFuYWdlciB0byB0YWtlIGFjdGlvbnMgb24gQVdTIHJlc291cmNlcyBmb3IgQU1JIE1hbmFnZW1lbnQgKi9cbiAgICBwdWJsaWMgQVdTRGF0YUxpZmVjeWNsZU1hbmFnZXJTZXJ2aWNlUm9sZUZvckFNSU1hbmFnZW1lbnQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YUxpZmVjeWNsZU1hbmFnZXJTZXJ2aWNlUm9sZUZvckFNSU1hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBbWF6b24gRGF0YSBMaWZlY3ljbGUgTWFuYWdlciBwZXJtaXNzaW9uIHRvIHBlcmZvcm0gdGhlIFN5c3RlbXMgTWFuYWdlciBhY3Rpb25zIHJlcXVpcmVkIHRvIHJ1biBwcmUgYW5kIHBvc3Qgc2NyaXB0cyBvbiBhbGwgQW1hem9uIEVDMiBpbnN0YW5jZXMuICovXG4gICAgcHVibGljIEFXU0RhdGFMaWZlY3ljbGVNYW5hZ2VyU1NNRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhTGlmZWN5Y2xlTWFuYWdlclNTTUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBEYXRhIFBpcGVsaW5lLCBsaXN0IGFjY2VzcyBmb3IgUzMsIER5bmFtb0RCLCBSZWRzaGlmdCwgUkRTLCBTTlMsIGFuZCBJQU0gcm9sZXMsIGFuZCBwYXNzUm9sZSBhY2Nlc3MgZm9yIGRlZmF1bHQgUm9sZXMuICovXG4gICAgcHVibGljIEFXU0RhdGFQaXBlbGluZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YVBpcGVsaW5lRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIERhdGEgUGlwZWxpbmUsIGxpc3QgYWNjZXNzIGZvciBTMywgRHluYW1vREIsIFJlZHNoaWZ0LCBSRFMsIFNOUywgYW5kIElBTSByb2xlcywgYW5kIHBhc3NSb2xlIGFjY2VzcyBmb3IgZGVmYXVsdCBSb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTRGF0YVBpcGVsaW5lUG93ZXJVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFQaXBlbGluZVBvd2VyVXNlcik7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBEYXRhU3luYyBEaXNjb3ZlcnkgdG8gaW50ZWdyYXRlIHdpdGggb3RoZXIgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NEYXRhU3luY0Rpc2NvdmVyeVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFTeW5jRGlzY292ZXJ5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRGF0YVN5bmMgYW5kIG1pbmltYWwgYWNjZXNzIHRvIGl0cyBkZXBlbmRlbmNpZXMgKi9cbiAgICBwdWJsaWMgQVdTRGF0YVN5bmNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RhdGFTeW5jRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIERhdGFTeW5jICovXG4gICAgcHVibGljIEFXU0RhdGFTeW5jUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGF0YVN5bmNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBEYXRhU3luYyB0byBpbnRlZ3JhdGUgd2l0aCBvdGhlciBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTRGF0YVN5bmNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEYXRhU3luY1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQVdTIERlYWRsaW5lIENsb3VkIHdvcmtlcnMgd2l0aCBhY2Nlc3MgdG8gcnVuIHRhc2tzIG9uIGEgZmFybS4gKi9cbiAgICBwdWJsaWMgQVdTRGVhZGxpbmVDbG91ZEZsZWV0V29ya2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlYWRsaW5lQ2xvdWRGbGVldFdvcmtlcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHVzZXIgd29ya3N0YXRpb24gYWNjZXNzIHRvIEFXUyBEZWFkbGluZSBDbG91ZCBmYXJtcyB3aXRoIGxpbWl0ZWQgUmVhZC1Pbmx5IHBlcm1pc3Npb25zIHRvIGNhbGwgb3RoZXIgbmVjZXNzYXJ5IHNlcnZpY2VzLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8gdGhlIHVzZXIgcm9sZSBhc3NvY2lhdGVkIHdpdGggeW91ciBzdHVkaW8uICovXG4gICAgcHVibGljIEFXU0RlYWRsaW5lQ2xvdWRVc2VyQWNjZXNzRmFybXMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVhZGxpbmVDbG91ZFVzZXJBY2Nlc3NGYXJtcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHVzZXIgd29ya3N0YXRpb24gYWNjZXNzIHRvIEFXUyBEZWFkbGluZSBDbG91ZCBmbGVldHMgd2l0aCBsaW1pdGVkIFJlYWQtT25seSBwZXJtaXNzaW9ucyB0byBjYWxsIG90aGVyIG5lY2Vzc2FyeSBzZXJ2aWNlcy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHRoZSB1c2VyIHJvbGUgYXNzb2NpYXRlZCB3aXRoIHlvdXIgc3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBBV1NEZWFkbGluZUNsb3VkVXNlckFjY2Vzc0ZsZWV0cygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWFkbGluZUNsb3VkVXNlckFjY2Vzc0ZsZWV0cyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHVzZXIgd29ya3N0YXRpb24gYWNjZXNzIHRvIEFXUyBEZWFkbGluZSBDbG91ZCBqb2JzIHdpdGggbGltaXRlZCBSZWFkLU9ubHkgcGVybWlzc2lvbnMgdG8gY2FsbCBvdGhlciBuZWNlc3Nhcnkgc2VydmljZXMuIEF0dGFjaCB0aGlzIHBvbGljeSB0byB0aGUgdXNlciByb2xlIGFzc29jaWF0ZWQgd2l0aCB5b3VyIHN0dWRpby4gKi9cbiAgICBwdWJsaWMgQVdTRGVhZGxpbmVDbG91ZFVzZXJBY2Nlc3NKb2JzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlYWRsaW5lQ2xvdWRVc2VyQWNjZXNzSm9icyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHVzZXIgd29ya3N0YXRpb24gYWNjZXNzIHRvIEFXUyBEZWFkbGluZSBDbG91ZCBxdWV1ZXMgd2l0aCBsaW1pdGVkIFJlYWQtT25seSBwZXJtaXNzaW9ucyB0byBjYWxsIG90aGVyIG5lY2Vzc2FyeSBzZXJ2aWNlcy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHRoZSB1c2VyIHJvbGUgYXNzb2NpYXRlZCB3aXRoIHlvdXIgc3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBBV1NEZWFkbGluZUNsb3VkVXNlckFjY2Vzc1F1ZXVlcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWFkbGluZUNsb3VkVXNlckFjY2Vzc1F1ZXVlcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyBmb3IgQVdTIERlYWRsaW5lIENsb3VkIHdvcmtlciBob3N0cyB0byBqb2luIGEgZmxlZXQgaW4gYSBmYXJtLiAqL1xuICAgIHB1YmxpYyBBV1NEZWFkbGluZUNsb3VkV29ya2VySG9zdCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWFkbGluZUNsb3VkV29ya2VySG9zdCk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHNwZWNpZmllcyBwZXJtaXNzaW9ucyByZXF1aXJlZCBieSBEZWVwTGVucyBBZG1pbmlzdHJhdGl2ZSBsYW1iZGEgZnVuY3Rpb25zIHRoYXQgcnVuIG9uIGEgRGVlcExlbnMgZGV2aWNlICovXG4gICAgcHVibGljIEFXU0RlZXBMZW5zTGFtYmRhRnVuY3Rpb25BY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVlcExlbnNMYW1iZGFGdW5jdGlvbkFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBBV1MgRGVlcExlbnMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcywgcmVzb3VyY2VzIGFuZCByb2xlcyBuZWVkZWQgYnkgRGVlcExlbnMgYW5kIGl0cyBkZXBlbmRlbmNpZXMgaW5jbHVkaW5nIElvVCwgUzMsIEdyZWVuR3Jhc3MgYW5kIEFXUyBMYW1iZGEuICovXG4gICAgcHVibGljIEFXU0RlZXBMZW5zU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVlcExlbnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIERlZXBSYWNlciBhZG1pbiBhY2Nlc3MgdG8gYWxsIGFjdGlvbnMgaW5jbHVkaW5nIHRvZ2dsaW5nIGJldHdlZW4gbXVsdGl1c2VyIGFuZCBzaW5nbGUgdXNlciBtb2RlLiAqL1xuICAgIHB1YmxpYyBBV1NEZWVwUmFjZXJBY2NvdW50QWRtaW5BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVlcFJhY2VyQWNjb3VudEFkbWluQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENsb3VkRm9ybWF0aW9uIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIEFXUyBzdGFja3MgYW5kIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRGVlcFJhY2VyQ2xvdWRGb3JtYXRpb25BY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGVlcFJhY2VyQ2xvdWRGb3JtYXRpb25BY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBEZWVwUmFjZXIgTXVsdGlVc2VyIERlZmF1bHQgdXNlciBhY2Nlc3MgdG8gdXNlIGRlZXByYWNlciBpbiBtdWx0aS11c2VyIG1vZGUgKi9cbiAgICBwdWJsaWMgQVdTRGVlcFJhY2VyRGVmYXVsdE11bHRpVXNlckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWVwUmFjZXJEZWZhdWx0TXVsdGlVc2VyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIERlZXBSYWNlci4gQWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgKGUuZy4sIFMzKS4gKi9cbiAgICBwdWJsaWMgQVdTRGVlcFJhY2VyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZWVwUmFjZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFJvYm9NYWtlciB0byBjcmVhdGUgcmVxdWlyZWQgcmVzb3VyY2VzIGFuZCBjYWxsIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRGVlcFJhY2VyUm9ib01ha2VyQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlZXBSYWNlclJvYm9NYWtlckFjY2Vzc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBEZWVwUmFjZXIgdG8gY3JlYXRlIHJlcXVpcmVkIHJlc291cmNlcyBhbmQgY2FsbCBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0RlZXBSYWNlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlZXBSYWNlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRGVueSBhbGwgYWNjZXNzLiAqL1xuICAgIHB1YmxpYyBBV1NEZW55QWxsKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RlbnlBbGwpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgQVdTIERldmljZSBGYXJtIG9wZXJhdGlvbnMuICovXG4gICAgcHVibGljIEFXU0RldmljZUZhcm1GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RldmljZUZhcm1GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnQgcGVybWlzc2lvbnMgdG8gQVdTIERldmljZSBGYXJtIHRvIGNhbGwgRUMyIE5ldHdvcmsgQVBJcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRGV2aWNlRmFybVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RldmljZUZhcm1TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50IHBlcm1pc3Npb25zIHRvIEFXUyBEZXZpY2UgRmFybSB0byBjYWxsIEVDMiBBUElzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NEZXZpY2VGYXJtVGVzdEdyaWRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEZXZpY2VGYXJtVGVzdEdyaWRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBEaXJlY3QgQ29ubmVjdCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU0RpcmVjdENvbm5lY3RGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RpcmVjdENvbm5lY3RGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgRGlyZWN0IENvbm5lY3QgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NEaXJlY3RDb25uZWN0UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGlyZWN0Q29ubmVjdFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgQVdTIERpcmVjdCBDb25uZWN0IHBlcm1pc3Npb24gdG8gY3JlYXRlIGFuZCBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTRGlyZWN0Q29ubmVjdFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RpcmVjdENvbm5lY3RTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBEaXJlY3RvcnkgU2VydmljZSBEYXRhLiAqL1xuICAgIHB1YmxpYyBBV1NEaXJlY3RvcnlTZXJ2aWNlRGF0YUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGlyZWN0b3J5U2VydmljZURhdGFGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgRGlyZWN0b3J5IFNlcnZpY2UgRGF0YSAqL1xuICAgIHB1YmxpYyBBV1NEaXJlY3RvcnlTZXJ2aWNlRGF0YVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RpcmVjdG9yeVNlcnZpY2VEYXRhUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRGlyZWN0b3J5IFNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU0RpcmVjdG9yeVNlcnZpY2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RpcmVjdG9yeVNlcnZpY2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgRGlyZWN0b3J5IFNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU0RpcmVjdG9yeVNlcnZpY2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEaXJlY3RvcnlTZXJ2aWNlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIHRoZSBEaXJlY3RvcnkgU2VydmljZSBTZXJ2aWNlIExpbmtlZCBSb2xlICovXG4gICAgcHVibGljIEFXU0RpcmVjdG9yeVNlcnZpY2VTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NEaXJlY3RvcnlTZXJ2aWNlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB3cml0ZSBhY2Nlc3MgdG8gQVdTIHJlc291cmNlcyByZXF1aXJlZCBmb3IgQVdTIERpc2NvdmVyeSBDb250aW51b3VzIEV4cG9ydCAqL1xuICAgIHB1YmxpYyBBV1NEaXNjb3ZlcnlDb250aW51b3VzRXhwb3J0RmlyZWhvc2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRGlzY292ZXJ5Q29udGludW91c0V4cG9ydEZpcmVob3NlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIERNUyBGbGVldCBBZHZpc29yIHRvIG1hbmFnZSBDbG91ZFdhdGNoIG1ldHJpY3Mgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0RNU0ZsZWV0QWR2aXNvclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0RNU0ZsZWV0QWR2aXNvclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIEFXUyBETVMgU2VydmVybGVzcyBwZXJtaXNzaW9ucyB0byBjcmVhdGUgYW5kIG1hbmFnZSBETVMgcmVzb3VyY2VzIGluIHlvdXIgYWNjb3VudCBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBBV1NETVNTZXJ2ZXJsZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRE1TU2VydmVybGVzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEVDMiBDYXBhY2l0eSBNYW5hZ2VyIHRvIG1hbmFnZSBjYXBhY2l0eSByZXNvdXJjZXMgYW5kIGludGVncmF0ZSB3aXRoIEFXUyBPcmdhbml6YXRpb25zIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NFQzJDYXBhY2l0eU1hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFQzJDYXBhY2l0eU1hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBFQzIgQ2FwYWNpdHlSZXNlcnZhdGlvbiBGbGVldCBzZXJ2aWNlIHRvIG1hbmFnZSBDYXBhY2l0eSBSZXNlcnZhdGlvbnMgKi9cbiAgICBwdWJsaWMgQVdTRUMyQ2FwYWNpdHlSZXNlcnZhdGlvbkZsZWV0Um9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFQzJDYXBhY2l0eVJlc2VydmF0aW9uRmxlZXRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEVDMiBGbGVldCB0byBsYXVuY2ggYW5kIG1hbmFnZSBpbnN0YW5jZXMuICovXG4gICAgcHVibGljIEFXU0VDMkZsZWV0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRUMyRmxlZXRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBFQzIgU3BvdCBGbGVldCB0byBsYXVuY2ggYW5kIG1hbmFnZSBzcG90IGZsZWV0IGluc3RhbmNlcyAqL1xuICAgIHB1YmxpYyBBV1NFQzJTcG90RmxlZXRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFQzJTcG90RmxlZXRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBFQzIgU3BvdCB0byBsYXVuY2ggYW5kIG1hbmFnZSBzcG90IGluc3RhbmNlcyAqL1xuICAgIHB1YmxpYyBBV1NFQzJTcG90U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRUMyU3BvdFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIEVDMiBpbnN0YW5jZSBwZXJtaXNzaW9ucyB0byBhbGxvdyBFQzIgU1FMIEhpZ2ggQXZhaWxhYmlsaXR5IHNlcnZpY2UgdG8gZGV0ZWN0IGluc3RhbmNlIGhpZ2ggYXZhaWxhYmlsaXR5IHN0YXRlIHRocm91Z2ggRUMyIGluc3RhbmNlIHByb2ZpbGUuICovXG4gICAgcHVibGljIEFXU0VDMlNxbEhhSW5zdGFuY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRUMyU3FsSGFJbnN0YW5jZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVDMiBTUUwgSGlnaCBBdmFpbGFiaWxpdHkgc2VydmljZSBwZXJtaXNzaW9ucyB0byBkZXRlY3Qgc3RhbmRieS9wYXNzaXZlIGluc3RhbmNlcyAqL1xuICAgIHB1YmxpYyBBV1NFQzJTcWxIYVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VDMlNxbEhhU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQW1hem9uIEVDMiBhbmQgQVdTIFNTTSBwZXJtaXNzaW9ucyB0byByZXN0b3JlIFNRTCBTZXJ2ZXIgZGF0YWJhc2UgZnJvbSBhcHBsaWNhdGlvbiBjb25zaXN0ZW50IHNuYXBzaG90cyBjcmVhdGVkIGJ5IEFXUyBWU1MuICovXG4gICAgcHVibGljIEFXU0VDMlZzc1Jlc3RvcmVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRUMyVnNzUmVzdG9yZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIHRvIHRoZSBJQU0gcm9sZSB0aGF0J3MgYXR0YWNoZWQgdG8geW91ciBBbWF6b24gRUMyIFdpbmRvd3MgSW5zdGFuY2VzIHRvIGVuYWJsZSB0aGUgQW1hem9uIEVDMiBWU1Mgc29sdXRpb24gdG8gY3JlYXRlIGFuZCBhZGQgdGFncyB0byBBbWF6b24gTWFjaGluZSBJbWFnZXMgKEFNSSkgYW5kIEVCUyBTbmFwc2hvdHMuICovXG4gICAgcHVibGljIEFXU0VDMlZzc1NuYXBzaG90UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VDMlZzc1NuYXBzaG90UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFXUyBFQ1IgcHVsbCB0aHJvdWdoIGNhY2hlICovXG4gICAgcHVibGljIEFXU0VDUlB1bGxUaHJvdWdoQ2FjaGVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFQ1JQdWxsVGhyb3VnaENhY2hlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHRoZSBpbnN0YW5jZSBpbiB5b3VyIGN1c3RvbSBwbGF0Zm9ybSBidWlsZGVyIGVudmlyb25tZW50IHBlcm1pc3Npb24gdG8gbGF1bmNoIEVDMiBpbnN0YW5jZSwgY3JlYXRlIEVCUyBzbmFwc2hvdCBhbmQgQU1JLCBzdHJlYW0gbG9ncyB0byBBbWF6b24gQ2xvdWRXYXRjaCBMb2dzLCBhbmQgc3RvcmUgYXJ0aWZhY3RzIGluIEFtYXpvbiBTMy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa0N1c3RvbVBsYXRmb3JtZm9yRUMyUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrQ3VzdG9tUGxhdGZvcm1mb3JFQzJSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgbmVlZGVkIGJ5IEVsYXN0aWMgQmVhbnN0YWxrIHRvIGJ1aWxkIGNvbnRhaW5lciBpbWFnZXMgb24gYmVoYWxmIG9mIGN1c3RvbWVyLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrRUtTSW1hZ2VCdWlsZCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrRUtTSW1hZ2VCdWlsZCk7XG4gICAgfVxuXG4gICAgLyoqIE9ic2VydmFiaWxpdHkgcGVybWlzc2lvbnMgZm9yIEVsYXN0aWMgQmVhbnN0YWxrIGVudmlyb25tZW50cyBydW5uaW5nIGluIEVsYXN0aWMgS3ViZXJuZXRlcyBTZXJ2aWNlIGNsdXN0ZXIgKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa0VLU09ic2VydmFiaWxpdHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa0VLU09ic2VydmFiaWxpdHkpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyBuZWVkZWQgdG8gcGFzcyB0aHJvdWdoIHRhZ3MgdG8gcmVzb3VyY2VzIGNyZWF0ZWQgYnkgRUtTIENvbnRyb2xsZXJzICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtFS1NUYWdnaW5nKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtFS1NUYWdnaW5nKTtcbiAgICB9XG5cbiAgICAvKiogQVdTIEVsYXN0aWMgQmVhbnN0YWxrIFNlcnZpY2UgcG9saWN5IGZvciBIZWFsdGggTW9uaXRvcmluZyBzeXN0ZW0gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa0VuaGFuY2VkSGVhbHRoKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtFbmhhbmNlZEhlYWx0aCk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBFbGFzdGljIEJlYW5zdGFsayBTZXJ2aWNlIFJvbGUgcG9saWN5IHRoYXQgZ3JhbnRzIGxpbWl0ZWQgcGVybWlzc2lvbnMgdG8gdXBkYXRlIHlvdXIgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmIGZvciBtYWludGVuYW5jZSBwdXJwb3Nlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa01haW50ZW5hbmNlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtNYWludGVuYW5jZSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIGZvciB0aGUgQVdTIEVsYXN0aWMgQmVhbnN0YWxrIHNlcnZpY2Ugcm9sZSB1c2VkIHRvIHBlcmZvcm0gbWFuYWdlZCB1cGRhdGVzIG9mIEVsYXN0aWMgQmVhbnN0YWxrIGVudmlyb25tZW50cy4gVGhpcyBwb2xpY3kgc2hvdWxkIG5vdCBiZSBhdHRhY2hlZCB0byBvdGhlciB1c2VycyBvciByb2xlcy4gVGhlIHBvbGljeSBncmFudHMgYnJvYWQgcGVybWlzc2lvbnMgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgcmVzb3VyY2VzIGFjcm9zcyBhIG51bWJlciBvZiBBV1Mgc2VydmljZXMgaW5jbHVkaW5nIEF1dG9TY2FsaW5nLCBFQzIsIEVDUywgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyBhbmQgQ2xvdWRGb3JtYXRpb24uICBUaGlzIHBvbGljeSBhbHNvIGFsbG93cyBwYXNzaW5nIG9mIGFueSBJQU0gcm9sZSB1c2FibGUgd2l0aCB0aG9zZSBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa01hbmFnZWRVcGRhdGVzQ3VzdG9tZXJSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtNYW5hZ2VkVXBkYXRlc0N1c3RvbWVyUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBFbGFzdGljIEJlYW5zdGFsayBTZXJ2aWNlIFJvbGUgcG9saWN5IHRoYXQgZ3JhbnRzIGxpbWl0ZWQgcGVybWlzc2lvbnMgdG8gbWFuYWdlZCB1cGRhdGVzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrTWFuYWdlZFVwZGF0ZXNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrTWFuYWdlZFVwZGF0ZXNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgdGhlIGluc3RhbmNlcyBpbiB5b3VyIG11bHRpY29udGFpbmVyIERvY2tlciBlbnZpcm9ubWVudCBhY2Nlc3MgdG8gdXNlIHRoZSBBbWF6b24gRUMyIENvbnRhaW5lciBTZXJ2aWNlIHRvIG1hbmFnZSBjb250YWluZXIgZGVwbG95bWVudCB0YXNrcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa011bHRpY29udGFpbmVyRG9ja2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtNdWx0aWNvbnRhaW5lckRvY2tlcik7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyByZWFkLW9ubHkgcGVybWlzc2lvbnMuIEV4cGxpY2l0bHkgYWxsb3dzIG9wZXJhdG9ycyB0byBnYWluIGRpcmVjdCBhY2Nlc3MgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gQVdTIEVsYXN0aWMgQmVhbnN0YWxrIGFwcGxpY2F0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIEFXU0VsYXN0aWNCZWFuc3RhbGtSb2xlQ29yZSAoRWxhc3RpYyBCZWFuc3RhbGsgb3BlcmF0aW9ucyByb2xlKSBBbGxvd3MgY29yZSBvcGVyYXRpb24gb2YgYSB3ZWIgc2VydmljZSBlbnZpcm9ubWVudC4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVDb3JlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtSb2xlQ29yZSk7XG4gICAgfVxuXG4gICAgLyoqIChFbGFzdGljIEJlYW5zdGFsayBvcGVyYXRpb25zIHJvbGUpIEFsbG93cyBhbiBlbnZpcm9ubWVudCB0byBtYW5hZ2UgQW1hem9uIENsb3VkV2F0Y2ggTG9ncyBsb2cgZ3JvdXBzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrUm9sZUNXTCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrUm9sZUNXTCk7XG4gICAgfVxuXG4gICAgLyoqIChFbGFzdGljIEJlYW5zdGFsayBvcGVyYXRpb25zIHJvbGUpIEFsbG93cyBhIG11bHRpY29udGFpbmVyIERvY2tlciBlbnZpcm9ubWVudCB0byBtYW5hZ2UgQW1hem9uIEVDUyBjbHVzdGVycy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVFQ1MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa1JvbGVFQ1MpO1xuICAgIH1cblxuICAgIC8qKiAoRWxhc3RpYyBCZWFuc3RhbGsgb3BlcmF0aW9ucyByb2xlKSBBbGxvd3MgYW4gZW52aXJvbm1lbnQgdG8gaW50ZWdyYXRlIGFuIEFtYXpvbiBSRFMgaW5zdGFuY2UuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtSb2xlUkRTKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtSb2xlUkRTKTtcbiAgICB9XG5cbiAgICAvKiogKEVsYXN0aWMgQmVhbnN0YWxrIG9wZXJhdGlvbnMgcm9sZSkgQWxsb3dzIGFuIGVudmlyb25tZW50IHRvIGVuYWJsZSBBbWF6b24gU05TIHRvcGljIGludGVncmF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrUm9sZVNOUygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrUm9sZVNOUyk7XG4gICAgfVxuXG4gICAgLyoqIChFbGFzdGljIEJlYW5zdGFsayBvcGVyYXRpb25zIHJvbGUpIEFsbG93cyBhIHdvcmtlciBlbnZpcm9ubWVudCB0aWVyIHRvIGNyZWF0ZSBhbiBBbWF6b24gRHluYW1vREIgdGFibGUgYW5kIGFuIEFtYXpvbiBTUVMgcXVldWUuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtSb2xlV29ya2VyVGllcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrUm9sZVdvcmtlclRpZXIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBvbiBhIGRlcHJlY2F0aW9uIHBhdGguIFNlZSBkb2N1bWVudGF0aW9uIGZvciBndWlkYW5jZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNiZWFuc3RhbGsvbGF0ZXN0L2RnL2lhbS1zZXJ2aWNlcm9sZS5odG1sLiBBV1MgRWxhc3RpYyBCZWFuc3RhbGsgU2VydmljZSByb2xlIHBvbGljeSB3aGljaCBncmFudHMgcGVybWlzc2lvbnMgdG8gY3JlYXRlICYgbWFuYWdlIHJlc291cmNlcyAoaS5lLjogQXV0b1NjYWxpbmcsIEVDMiwgUzMsIENsb3VkRm9ybWF0aW9uLCBFTEIsIGV0Yy4pIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrU2VydmljZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljQmVhbnN0YWxrU2VydmljZSk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBFbGFzdGljIEJlYW5zdGFsayBTZXJ2aWNlIExpbmtlZCBSb2xlIHBvbGljeSB3aGljaCBncmFudHMgcGVybWlzc2lvbnMgdG8gY3JlYXRlICYgbWFuYWdlIHJlc291cmNlcyAoaS5lLjogQXV0b1NjYWxpbmcsIEVDMiwgUzMsIENsb3VkRm9ybWF0aW9uLCBFTEIsIGV0Yy4pIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljQmVhbnN0YWxrU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSB0aGUgaW5zdGFuY2VzIGluIHlvdXIgd2ViIHNlcnZlciBlbnZpcm9ubWVudCBhY2Nlc3MgdG8gdXBsb2FkIGxvZyBmaWxlcyB0byBBbWF6b24gUzMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNCZWFuc3RhbGtXZWJUaWVyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNCZWFuc3RhbGtXZWJUaWVyKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSB0aGUgaW5zdGFuY2VzIGluIHlvdXIgd29ya2VyIGVudmlyb25tZW50IGFjY2VzcyB0byB1cGxvYWQgbG9nIGZpbGVzIHRvIEFtYXpvbiBTMywgdG8gdXNlIEFtYXpvbiBTUVMgdG8gbW9uaXRvciB5b3VyIGFwcGxpY2F0aW9uJ3Mgam9iIHF1ZXVlLCB0byB1c2UgQW1hem9uIER5bmFtb0RCIHRvIHBlcmZvcm0gbGVhZGVyIGVsZWN0aW9uLCBhbmQgdG8gQW1hem9uIENsb3VkV2F0Y2ggdG8gcHVibGlzaCBtZXRyaWNzIGZvciBoZWFsdGggbW9uaXRvcmluZy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0JlYW5zdGFsa1dvcmtlclRpZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0JlYW5zdGFsa1dvcmtlclRpZXIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgaW5zdGFsbGluZyB0aGUgQVdTIFJlcGxpY2F0aW9uIEFnZW50LCB3aGljaCBpcyB1c2VkIHdpdGggQVdTIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKERSUykgdG8gcmVjb3ZlciBleHRlcm5hbCBzZXJ2ZXJzIHRvIEFXUy4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzIHdob3NlIGNyZWRlbnRpYWxzIHlvdSBwcm92aWRlIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHN0ZXAgb2YgdGhlIEFXUyBSZXBsaWNhdGlvbiBBZ2VudC4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlBZ2VudEluc3RhbGxhdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUFnZW50SW5zdGFsbGF0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIHVzaW5nIHRoZSBBV1MgUmVwbGljYXRpb24gQWdlbnQsIHdoaWNoIGlzIHVzZWQgd2l0aCBBV1MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoRFJTKSB0byByZWNvdmVyIHNvdXJjZSBzZXJ2ZXJzIHRvIEFXUy4gV2UgZG8gbm90IHJlY29tbWVuZCB0aGF0IHlvdSBhdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5QWdlbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlBZ2VudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBwdWJsaWMgQVBJcyBvZiBBV1MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoRFJTKSwgYXMgd2VsbCBhcyBwZXJtaXNzaW9ucyB0byByZWFkIEtNUyBrZXksIExpY2Vuc2UgTWFuYWdlciwgUmVzb3VyY2UgR3JvdXBzLCBFbGFzdGljIExvYWQgQmFsYW5jaW5nLCBJQU0sIGFuZCBFQzIgaW5mb3JtYXRpb24uIEF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIHB1YmxpYyBBUElzIG9mIEFXUyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChBV1MgRFJTKSwgYXMgd2VsbCBhcyBhbGwgcHVibGljIEFQSXMgaW4gb3RoZXIgQVdTIHNlcnZpY2VzIHVzZWQgYnkgQVdTIERSUyBDb25zb2xlLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlDb25zb2xlRnVsbEFjY2Vzc1YyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5Q29uc29sZUZ1bGxBY2Nlc3NWMik7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIHRvIHRoZSBBV1MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSBDb252ZXJzaW9uIHNlcnZlcidzIGluc3RhbmNlIHJvbGUuIFRoaXMgcG9saWN5IGFsbG93cyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpIENvbnZlcnNpb24gU2VydmVycywgd2hpY2ggYXJlIEVDMiBpbnN0YW5jZXMgbGF1bmNoZWQgYnkgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSwgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgRFJTIHNlcnZpY2UuIEFuIElBTSByb2xlIHdpdGggdGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgKGFzIGFuIEVDMiBJbnN0YW5jZSBQcm9maWxlKSBieSBEUlMgdG8gdGhlIERSUyBDb252ZXJzaW9uIFNlcnZlcnMsIHdoaWNoIGFyZSBhdXRvbWF0aWNhbGx5IGxhdW5jaGVkIGFuZCB0ZXJtaW5hdGVkIGJ5IERSUywgd2hlbiBuZWVkZWQuIFdlIGRvIG5vdCByZWNvbW1lbmQgdGhhdCB5b3UgYXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiBEUlMgQ29udmVyc2lvbiBTZXJ2ZXJzIGFyZSB1c2VkIGJ5IEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3Zlcnkgd2hlbiB1c2VycyBjaG9vc2UgdG8gcmVjb3ZlciBzb3VyY2Ugc2VydmVycyB1c2luZyB0aGUgRFJTIGNvbnNvbGUsIENMSSwgb3IgQVBJLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUNvbnZlcnNpb25TZXJ2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlDb252ZXJzaW9uU2VydmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIEFXUyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpIHRvIHN1cHBvcnQgY3Jvc3MtYWNjb3VudCByZXBsaWNhdGlvbiBhbmQgY3Jvc3MtYWNjb3VudCBmYWlsYmFjay4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlDcm9zc0FjY291bnRSZXBsaWNhdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUNyb3NzQWNjb3VudFJlcGxpY2F0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIGluc3RhbGxpbmcgYW5kIHVzaW5nIHRoZSBBV1MgUmVwbGljYXRpb24gQWdlbnQsIHdoaWNoIGlzIHVzZWQgYnkgQVdTIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKERSUykgdG8gcmVjb3ZlciBzb3VyY2Ugc2VydmVycyB0aGF0IHJ1biBvbiBFQzIgKGNyb3NzLXJlZ2lvbiBvciBjcm9zcy1BWikuIEFuIElBTSByb2xlIHdpdGggdGhpcyBwb2xpY3kgc2hvdWxkIGJlIGF0dGFjaGVkIChhcyBhbiBFQzIgSW5zdGFuY2UgUHJvZmlsZSkgdG8gdGhlIEVDMiBJbnN0YW5jZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5RWMySW5zdGFuY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlFYzJJbnN0YW5jZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFlvdSBjYW4gYXR0YWNoIHRoZSBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUZhaWxiYWNrSW5zdGFsbGF0aW9uUG9saWN5IHBvbGljeSB0byB5b3VyIElBTSBpZGVudGl0aWVzLiAgVGhpcyBwb2xpY3kgYWxsb3dzIGluc3RhbGxpbmcgdGhlIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgRmFpbGJhY2sgQ2xpZW50LCB3aGljaCBpcyB1c2VkIHRvIGZhaWxiYWNrIFJlY292ZXJ5IEluc3RhbmNlcyBiYWNrIHRvIHlvdXIgb3JpZ2luYWwgc291cmNlIGluZnJhc3RydWN0dXJlLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMgd2hvc2UgY3JlZGVudGlhbHMgeW91IHByb3ZpZGUgd2hlbiBydW5uaW5nIHRoZSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IEZhaWxiYWNrIENsaWVudC4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlGYWlsYmFja0luc3RhbGxhdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUZhaWxiYWNrSW5zdGFsbGF0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIHVzaW5nIHRoZSBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IEZhaWxiYWNrIENsaWVudCwgd2hpY2ggaXMgdXNlZCB0byBmYWlsYmFjayBSZWNvdmVyeSBJbnN0YW5jZXMgYmFjayB0byB5b3VyIG9yaWdpbmFsIHNvdXJjZSBpbmZyYXN0cnVjdHVyZS4gV2UgZG8gbm90IHJlY29tbWVuZCB0aGF0IHlvdSBhdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5RmFpbGJhY2tQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlGYWlsYmFja1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyB5b3UgdG8gdXNlIEFtYXpvbiBTU00gYW5kIGFkZGl0aW9uYWwgc2VydmljZXMgcmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gcnVuIHBvc3QtbGF1bmNoIGFjdGlvbnMgaW4gQVdTIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKEFXUyBEUlMpLiBBdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gcm9sZXMgb3IgdXNlcnMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5TGF1bmNoQWN0aW9uc1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeUxhdW5jaEFjdGlvbnNQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgQVdTIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKERSUykgdG8gc3VwcG9ydCBuZXR3b3JrIHJlcGxpY2F0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeU5ldHdvcmtSZXBsaWNhdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeU5ldHdvcmtSZXBsaWNhdGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFlvdSBjYW4gYXR0YWNoIHRoZSBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVJlYWRPbmx5QWNjZXNzIHBvbGljeSB0byB5b3VyIElBTSBpZGVudGl0aWVzLiAgVGhpcyBwb2xpY3kgcHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gYWxsIHJlYWQtb25seSBwdWJsaWMgQVBJcyBvZiBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpLCBhcyB3ZWxsIGFzIHNvbWUgcmVhZC1vbmx5IEFQSXMgb2Ygb3RoZXIgQVdTIHNlcnZpY2VzIHRoYXQgYXJlIHJlcXVpcmVkIGluIG9yZGVyIHRvIG1ha2UgZnVsbCByZWFkLW9ubHkgdXNlIG9mIHRoZSBEUlMgY29uc29sZS4gQXR0YWNoIHRoaXMgcG9saWN5IHRvIHlvdXIgSUFNIHVzZXJzIG9yIHJvbGVzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBhdHRhY2hlZCB0byB0aGUgaW5zdGFuY2Ugcm9sZSBvZiBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5J3MgUmVjb3ZlcnkgSW5zdGFuY2UuICBUaGlzIHBvbGljeSBhbGxvd3MgdGhlIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKERSUykgUmVjb3ZlcnkgSW5zdGFuY2UsIHdoaWNoIGFyZSBFQzIgaW5zdGFuY2VzIGxhdW5jaGVkIGJ5IEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgLSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBEUlMgc2VydmljZSwgYW5kIHRvIGJlIGFibGUgdG8gZmFpbGJhY2sgdG8gdGhlaXIgb3JpZ2luYWwgc291cmNlIGluZnJhc3RydWN0dXJlLiBBbiBJQU0gcm9sZSB3aXRoIHRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIChhcyBhbiBFQzIgSW5zdGFuY2UgUHJvZmlsZSkgYnkgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSB0byB0aGUgRFJTIFJlY292ZXJ5IEluc3RhbmNlcy4gV2UgZG8gbm90IHJlY29tbWVuZCB0aGF0IHlvdSBhdHRhY2ggdGhpcyBwb2xpY3kgdG8geW91ciBJQU0gdXNlcnMgb3Igcm9sZXMuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5UmVjb3ZlcnlJbnN0YW5jZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVJlY292ZXJ5SW5zdGFuY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBpcyBhdHRhY2hlZCB0byB0aGUgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSBSZXBsaWNhdGlvbiBzZXJ2ZXIncyBpbnN0YW5jZSByb2xlLiBUaGlzIHBvbGljeSBhbGxvd3MgdGhlIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgKERSUykgUmVwbGljYXRpb24gU2VydmVycywgd2hpY2ggYXJlIEVDMiBpbnN0YW5jZXMgbGF1bmNoZWQgYnkgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAtIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIERSUyBzZXJ2aWNlLCBhbmQgdG8gY3JlYXRlIEVCUyBzbmFwc2hvdHMgaW4geW91ciBBV1MgYWNjb3VudC4gQW4gSUFNIHJvbGUgd2l0aCB0aGlzIHBvbGljeSBpcyBhdHRhY2hlZCAoYXMgYW4gRUMyIEluc3RhbmNlIFByb2ZpbGUpIGJ5IEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgdG8gdGhlIERSUyBSZXBsaWNhdGlvbiBTZXJ2ZXJzIHdoaWNoIGFyZSBhdXRvbWF0aWNhbGx5IGxhdW5jaGVkIGFuZCB0ZXJtaW5hdGVkIGJ5IERSUywgYXMgbmVlZGVkLiBEUlMgUmVwbGljYXRpb24gU2VydmVycyBhcmUgdXNlZCB0byBmYWNpbGl0YXRlIGRhdGEgcmVwbGljYXRpb24gZnJvbSB5b3VyIGV4dGVybmFsIHNlcnZlcnMgdG8gQVdTLCBhcyBwYXJ0IG9mIHRoZSByZWNvdmVyeSBwcm9jZXNzIG1hbmFnZWQgYnkgRFJTLiBXZSBkbyBub3QgcmVjb21tZW5kIHRoYXQgeW91IGF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlSZXBsaWNhdGlvblNlcnZlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVJlcGxpY2F0aW9uU2VydmVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIEVsYXN0aWMgRGlzYXN0ZXIgUmVjb3ZlcnkgdG8gbWFuYWdlIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBFbGFzdGljIERpc2FzdGVyIFJlY292ZXJ5IChEUlMpIHJlc291cmNlcyBzdWNoIGFzIHNvdXJjZSBzZXJ2ZXJzIGFuZCBqb2JzLiBJdCBhbHNvIGFsbG93cyBjcmVhdGluZyBhIGNvbnZlcnRlZCBzbmFwc2hvdCBhbmQgc2hhcmluZyB0aGF0IEVCUyBzbmFwc2hvdCB3aXRoIGEgc3BlY2lmaWMgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlTdGFnaW5nQWNjb3VudFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljRGlzYXN0ZXJSZWNvdmVyeVN0YWdpbmdBY2NvdW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgdXNlZCBieSBBV1MgRWxhc3RpYyBEaXNhc3RlciBSZWNvdmVyeSAoRFJTKSB0byByZWNvdmVyIHNvdXJjZSBzZXJ2ZXJzIGludG8gYSBzZXBhcmF0ZSB0YXJnZXQgYWNjb3VudCBhbmQgdG8gYWxsb3cgZmFpbGluZyBiYWNrLiBXZSBkbyBub3QgcmVjb21tZW5kIHRoYXQgeW91IGF0dGFjaCB0aGlzIHBvbGljeSB0byB5b3VyIElBTSB1c2VycyBvciByb2xlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxhc3RpY0Rpc2FzdGVyUmVjb3ZlcnlTdGFnaW5nQWNjb3VudFBvbGljeVYyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsYXN0aWNEaXNhc3RlclJlY292ZXJ5U3RhZ2luZ0FjY291bnRQb2xpY3lWMik7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UgTGlua2VkIFJvbGUgUG9saWN5IGZvciBBV1MgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyBDb250cm9sIFBsYW5lIC0gQ2xhc3NpYyAqL1xuICAgIHB1YmxpYyBBV1NFbGFzdGljTG9hZEJhbGFuY2luZ0NsYXNzaWNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGFzdGljTG9hZEJhbGFuY2luZ0NsYXNzaWNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UgTGlua2VkIFJvbGUgUG9saWN5IGZvciBBV1MgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyBDb250cm9sIFBsYW5lICovXG4gICAgcHVibGljIEFXU0VsYXN0aWNMb2FkQmFsYW5jaW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxhc3RpY0xvYWRCYWxhbmNpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGNyZWF0ZSBNZWRpYUNvbm5lY3QgR2F0ZXdheSBCcmlkZ2VzIGFuZCBhbGwgaXRzIGFzc29jaWF0ZWQgc3ViLXJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFDb25uZWN0Q3JlYXRlQnJpZGdlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhQ29ubmVjdENyZWF0ZUJyaWRnZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGNyZWF0ZSBNZWRpYUNvbm5lY3QgRmxvd3MgYW5kIGFsbCBpdHMgYXNzb2NpYXRlZCBzdWItcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGVtZW50YWxNZWRpYUNvbm5lY3RDcmVhdGVGbG93KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhQ29ubmVjdENyZWF0ZUZsb3cpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBkZWxldGUgTWVkaWFDb25uZWN0IEdhdGV3YXkgQnJpZGdlcyBhbmQgYWxsIGl0cyBhc3NvY2lhdGVkIHN1Yi1yZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhQ29ubmVjdERlbGV0ZUJyaWRnZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYUNvbm5lY3REZWxldGVCcmlkZ2UpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBkZWxldGUgTWVkaWFDb25uZWN0IEZsb3dzIGFuZCBhbGwgaXRzIGFzc29jaWF0ZWQgc3ViLXJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFDb25uZWN0RGVsZXRlRmxvdygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYUNvbm5lY3REZWxldGVGbG93KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYUNvbm5lY3QgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NFbGVtZW50YWxNZWRpYUNvbm5lY3RGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhQ29ubmVjdEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBFbGVtZW50YWwgTWVkaWFDb25uZWN0IHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFDb25uZWN0UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFDb25uZWN0UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhQ29udmVydCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFDb252ZXJ0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYUNvbnZlcnRGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhQ29udmVydCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFDb252ZXJ0UmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFDb252ZXJ0UmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhTGl2ZSByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFMaXZlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYUxpdmVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhTGl2ZSByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFMaXZlUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFMaXZlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhUGFja2FnZSByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFQYWNrYWdlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYVBhY2thZ2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhUGFja2FnZSByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFQYWNrYWdlUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFQYWNrYWdlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgRWxlbWVudGFsIE1lZGlhUGFja2FnZVYyIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFQYWNrYWdlVjJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhUGFja2FnZVYyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYVBhY2thZ2VWMiByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU0VsZW1lbnRhbE1lZGlhUGFja2FnZVYyUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFQYWNrYWdlVjJSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgcmVhZCBhbmQgd3JpdGUgYWNjZXNzIHRvIGFsbCBNZWRpYVN0b3JlIEFQSXMgKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFTdG9yZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFTdG9yZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgcGVybWlzc2lvbnMgZm9yIE1lZGlhU3RvcmUgQVBJcyAqL1xuICAgIHB1YmxpYyBBV1NFbGVtZW50YWxNZWRpYVN0b3JlUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRWxlbWVudGFsTWVkaWFTdG9yZVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYVRhaWxvciByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFUYWlsb3JGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VsZW1lbnRhbE1lZGlhVGFpbG9yRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIEVsZW1lbnRhbCBNZWRpYVRhaWxvciByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTRWxlbWVudGFsTWVkaWFUYWlsb3JSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbGVtZW50YWxNZWRpYVRhaWxvclJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHRvIGVuYWJsZSBlbmhhbmNlZCBjbGFzc2ljIG5ldHdvcmtpbmcgbWFuYWdlbWVudCBmZWF0dXJlLiAqL1xuICAgIHB1YmxpYyBBV1NFbmhhbmNlZENsYXNzaWNOZXR3b3JraW5nTWFuZ2VtZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VuaGFuY2VkQ2xhc3NpY05ldHdvcmtpbmdNYW5nZW1lbnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjb25zb2xlIGZ1bGwgYWNjZXNzIHRvIEFXUyBFbnRpdHkgUmVzb2x1dGlvbiBhbmQgcmVsYXRlZCBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTRW50aXR5UmVzb2x1dGlvbkNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0VudGl0eVJlc29sdXRpb25Db25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIEVudGl0eSBSZXNvbHV0aW9uIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTRW50aXR5UmVzb2x1dGlvbkNvbnNvbGVSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NFbnRpdHlSZXNvbHV0aW9uQ29uc29sZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHRoZSBGYXVsdCBJbmplY3Rpb24gU2ltdWxhdG9yIFNlcnZpY2UgcGVybWlzc2lvbiBpbiBFQzIgYW5kIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzIHRvIHBlcmZvcm0gRklTIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yRUMyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yRUMyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHRoZSBGYXVsdCBJbmplY3Rpb24gU2ltdWxhdG9yIFNlcnZpY2UgcGVybWlzc2lvbiBpbiBFQ1MgYW5kIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzIHRvIHBlcmZvcm0gRklTIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yRUNTQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yRUNTQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHRoZSBGYXVsdCBJbmplY3Rpb24gU2ltdWxhdG9yIFNlcnZpY2UgcGVybWlzc2lvbiBpbiBFS1MgYW5kIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzIHRvIHBlcmZvcm0gRklTIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yRUtTQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yRUtTQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHRoZSBGYXVsdCBJbmplY3Rpb24gU2ltdWxhdG9yIFNlcnZpY2UgcGVybWlzc2lvbiBpbiBFQzIgbmV0d29ya2luZyBhbmQgb3RoZXIgcmVxdWlyZWQgc2VydmljZXMgdG8gcGVyZm9ybSBGSVMgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTRmF1bHRJbmplY3Rpb25TaW11bGF0b3JOZXR3b3JrQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZhdWx0SW5qZWN0aW9uU2ltdWxhdG9yTmV0d29ya0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyB0aGUgRmF1bHQgSW5qZWN0aW9uIFNpbXVsYXRvciBTZXJ2aWNlIHBlcm1pc3Npb24gaW4gUkRTIGFuZCBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcyB0byBwZXJmb3JtIEZJUyBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NGYXVsdEluamVjdGlvblNpbXVsYXRvclJEU0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NGYXVsdEluamVjdGlvblNpbXVsYXRvclJEU0FjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyB0aGUgRmF1bHQgSW5qZWN0aW9uIFNpbXVsYXRvciBTZXJ2aWNlIHBlcm1pc3Npb24gaW4gU1NNIGFuZCBvdGhlciByZXF1aXJlZCBzZXJ2aWNlcyB0byBwZXJmb3JtIEZJUyBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NGYXVsdEluamVjdGlvblNpbXVsYXRvclNTTUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NGYXVsdEluamVjdGlvblNpbXVsYXRvclNTTUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEFtYXpvbiBGaW5TcGFjZSAqL1xuICAgIHB1YmxpYyBBV1NGaW5TcGFjZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZpblNwYWNlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBGdWxsIGFjY2VzcyBmb3IgQVdTIEZNIEFkbWluaXN0cmF0b3IgKi9cbiAgICBwdWJsaWMgQVdTRk1BZG1pbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRk1BZG1pbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBSZWFkIG9ubHkgYWNjZXNzIGZvciBBV1MgRk0gQWRtaW5pc3RyYXRvciB0aGF0IGFsbG93cyBtb25pdG9yaW5nIEFXUyBGTSBvcGVyYXRpb25zICovXG4gICAgcHVibGljIEFXU0ZNQWRtaW5SZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NGTUFkbWluUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBXQUYgYWN0aW9ucyBmb3IgQVdTIEZpcmV3YWxsIE1hbmFnZXIgbWVtYmVyIGFjY291bnRzICovXG4gICAgcHVibGljIEFXU0ZNTWVtYmVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTRk1NZW1iZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIE1hbmFnZWQgcG9saWN5IGZvciBBV1MgRm9yIFdvcmRwcmVzcyBQbHVnaW4gKi9cbiAgICBwdWJsaWMgQVdTRm9yV29yZFByZXNzUGx1Z2luUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ZvcldvcmRQcmVzc1BsdWdpblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB3aGljaCBhbGxvd3MgQVdTIENvZGUgQ29ubmVjdGlvbnMgdG8gc3luYyBjb250ZW50IGZyb20geW91ciBnaXQgcmVwb3NpdG9yeSAqL1xuICAgIHB1YmxpYyBBV1NHaXRTeW5jU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR2l0U3luY1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEFXUyBHbG9iYWwgQWNjZWxlcmF0b3IgdG8gbWFuYWdlIEVDMiBFbGFzdGljIE5ldHdvcmsgSW50ZXJmYWNlcyBhbmQgU2VjdXJpdHkgR3JvdXBzLiAqL1xuICAgIHB1YmxpYyBBV1NHbG9iYWxBY2NlbGVyYXRvclNMUlBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHbG9iYWxBY2NlbGVyYXRvclNMUlBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBHbHVlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBBV1NHbHVlQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR2x1ZUNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIEdsdWUgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBhY2Nlc3MgdG8gc2FnZW1ha2VyIG5vdGVib29rIGluc3RhbmNlcy4gKi9cbiAgICBwdWJsaWMgQVdTR2x1ZUNvbnNvbGVTYWdlTWFrZXJOb3RlYm9va0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR2x1ZUNvbnNvbGVTYWdlTWFrZXJOb3RlYm9va0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgR2x1ZSBEYXRhQnJldyB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuIEFsc28gcHJvdmlkZXMgc2VsZWN0IGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIChlLmcuLCBTMywgS01TLCBHbHVlKS4gKi9cbiAgICBwdWJsaWMgQXdzR2x1ZURhdGFCcmV3RnVsbEFjY2Vzc1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Bd3NHbHVlRGF0YUJyZXdGdWxsQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb24gdG8gZ2x1ZSB0byBwZXJmb3JtIGFjdGlvbiBvbiB1c2VyJ3MgZ2x1ZSBkYXRhIGNhdGFsb2csIHRoaXMgcG9saWN5IGFsc28gcHJvdmlkZXMgcGVybWlzc2lvbiB0byBlYzIgYWN0aW9ucyB0byBhbGxvdyBnbHVlIHRvIGNyZWF0ZSBFTkkgdG8gY29ubmVjdCB0byByZXNvdXJjZXMgaW4gdGhlIFZQQywgYWxzbyBhbGxvdyBnbHVlIHRvIGFjY2VzcyByZWdpc3RlcmVkIGRhdGEgaW4gbGFrZWZvcm1hdGlvbiBhbmQgcGVybWlzc2lvbiB0byBhY2Nlc3MgdXNlcidzIGNsb3Vkd2F0Y2ggKi9cbiAgICBwdWJsaWMgQVdTR2x1ZURhdGFCcmV3U2VydmljZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR2x1ZURhdGFCcmV3U2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIEdsdWUgU2NoZW1hIFJlZ2lzdHJ5IFNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQVdTR2x1ZVNjaGVtYVJlZ2lzdHJ5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHbHVlU2NoZW1hUmVnaXN0cnlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZG9ubHkgYWNjZXNzIHRvIHRoZSBBV1MgR2x1ZSBTY2hlbWEgUmVnaXN0cnkgU2VydmljZSAqL1xuICAgIHB1YmxpYyBBV1NHbHVlU2NoZW1hUmVnaXN0cnlSZWFkb25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHbHVlU2NoZW1hUmVnaXN0cnlSZWFkb25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIEdsdWUgc2VydmljZSByb2xlIHdoaWNoIGFsbG93cyBjdXN0b21lciB0byBtYW5hZ2Ugbm90ZWJvb2sgc2VydmVyICovXG4gICAgcHVibGljIEFXU0dsdWVTZXJ2aWNlTm90ZWJvb2tSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dsdWVTZXJ2aWNlTm90ZWJvb2tSb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBBV1MgR2x1ZSBzZXJ2aWNlIHJvbGUgd2hpY2ggYWxsb3dzIGFjY2VzcyB0byByZWxhdGVkIHNlcnZpY2VzIGluY2x1ZGluZyBFQzIsIFMzLCBhbmQgQ2xvdWR3YXRjaCBMb2dzICovXG4gICAgcHVibGljIEFXU0dsdWVTZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHbHVlU2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0aGF0IGFsbG93cyB1c2VycyB0byBjcmVhdGUgYW5kIHVzZSBvbmx5IHRoZSBub3RlYm9vayBzZXNzaW9ucyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHVzZXIuIFRoaXMgcG9saWN5IGFsc28gaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gZXhwbGljaXRseSBhbGxvdyB1c2VycyB0byBwYXNzIGEgcmVzdHJpY3RlZCBHbHVlIHNlc3Npb24gcm9sZS4gKi9cbiAgICBwdWJsaWMgQXdzR2x1ZVNlc3Npb25Vc2VyUmVzdHJpY3RlZE5vdGVib29rUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkF3c0dsdWVTZXNzaW9uVXNlclJlc3RyaWN0ZWROb3RlYm9va1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBBV1MgR2x1ZSByZXNvdXJjZXMgZXhjZXB0IGZvciBzZXNzaW9ucy4gQWxsb3dzIHVzZXJzIHRvIGNyZWF0ZSBhbmQgdXNlIG9ubHkgdGhlIG5vdGVib29rIHNlc3Npb25zIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdXNlci4gVGhpcyBwb2xpY3kgYWxzbyBpbmNsdWRlcyBvdGhlciBwZXJtaXNzaW9ucyBuZWVkZWQgYnkgQVdTIEdsdWUgdG8gbWFuYWdlIEdsdWUgcmVzb3VyY2VzIGluIG90aGVyIEFXUyBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQXdzR2x1ZVNlc3Npb25Vc2VyUmVzdHJpY3RlZE5vdGVib29rU2VydmljZVJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQXdzR2x1ZVNlc3Npb25Vc2VyUmVzdHJpY3RlZE5vdGVib29rU2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0aGF0IGFsbG93cyB1c2VycyB0byBjcmVhdGUgYW5kIHVzZSBvbmx5IHRoZSBpbnRlcmFjdGl2ZSBzZXNzaW9ucyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHVzZXIuIFRoaXMgcG9saWN5IGFsc28gaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gZXhwbGljaXRseSBhbGxvdyB1c2VycyB0byBwYXNzIGEgcmVzdHJpY3RlZCBHbHVlIHNlc3Npb24gcm9sZS4gKi9cbiAgICBwdWJsaWMgQXdzR2x1ZVNlc3Npb25Vc2VyUmVzdHJpY3RlZFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Bd3NHbHVlU2Vzc2lvblVzZXJSZXN0cmljdGVkUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIEFXUyBHbHVlIHJlc291cmNlcyBleGNlcHQgZm9yIHNlc3Npb25zLiBBbGxvd3MgdXNlcnMgdG8gY3JlYXRlIGFuZCB1c2Ugb25seSB0aGUgaW50ZXJhY3RpdmUgc2Vzc2lvbnMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB1c2VyLiBUaGlzIHBvbGljeSBhbHNvIGluY2x1ZGVzIG90aGVyIHBlcm1pc3Npb25zIG5lZWRlZCBieSBBV1MgR2x1ZSB0byBtYW5hZ2UgR2x1ZSByZXNvdXJjZXMgaW4gb3RoZXIgQVdTIHNlcnZpY2VzICovXG4gICAgcHVibGljIEF3c0dsdWVTZXNzaW9uVXNlclJlc3RyaWN0ZWRTZXJ2aWNlUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Bd3NHbHVlU2Vzc2lvblVzZXJSZXN0cmljdGVkU2VydmljZVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3Mgd2l0aGluIEFtYXpvbiBHcmFmYW5hIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHdvcmtzcGFjZXMgZm9yIHRoZSBlbnRpcmUgb3JnYW5pemF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NHcmFmYW5hQWNjb3VudEFkbWluaXN0cmF0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR3JhZmFuYUFjY291bnRBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNzIHRvIHJlYWQgb25seSBvcGVyYXRpb25zIGluIEFtYXpvbiBHcmFmYW5hLiAqL1xuICAgIHB1YmxpYyBBV1NHcmFmYW5hQ29uc29sZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dyYWZhbmFDb25zb2xlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBvbmx5IHRoZSBhYmlsaXR5IHRvIHVwZGF0ZSB1c2VyIGFuZCBncm91cCBwZXJtaXNzaW9ucyBmb3IgQVdTIEdyYWZhbmEgd29ya3NwYWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTR3JhZmFuYVdvcmtzcGFjZVBlcm1pc3Npb25NYW5hZ2VtZW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dyYWZhbmFXb3Jrc3BhY2VQZXJtaXNzaW9uTWFuYWdlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFiaWxpdHkgdG8gdXBkYXRlIElBTSBJZGVudGl0eSBDZW50ZXIgKElkQykgdXNlciBhbmQgZ3JvdXAgcGVybWlzc2lvbnMgZm9yIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgd29ya3NwYWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTR3JhZmFuYVdvcmtzcGFjZVBlcm1pc3Npb25NYW5hZ2VtZW50VjIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTR3JhZmFuYVdvcmtzcGFjZVBlcm1pc3Npb25NYW5hZ2VtZW50VjIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBnaXZlcyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIEdyZWVuZ3Jhc3MgY29uZmlndXJhdGlvbiwgbWFuYWdlbWVudCBhbmQgZGVwbG95bWVudCBhY3Rpb25zICovXG4gICAgcHVibGljIEFXU0dyZWVuZ3Jhc3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dyZWVuZ3Jhc3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ2l2ZXMgcmVhZCBvbmx5IGFjY2VzcyB0byB0aGUgQVdTIEdyZWVuZ3Jhc3MgY29uZmlndXJhdGlvbiwgbWFuYWdlbWVudCBhbmQgZGVwbG95bWVudCBhY3Rpb25zICovXG4gICAgcHVibGljIEFXU0dyZWVuZ3Jhc3NSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHcmVlbmdyYXNzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIEFXUyBHcmVlbmdyYXNzIHNlcnZpY2Ugcm9sZSB3aGljaCBhbGxvd3MgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIEFXUyBMYW1iZGEgYW5kIEFXUyBJb1QgdGhpbmcgc2hhZG93cy4gKi9cbiAgICBwdWJsaWMgQVdTR3JlZW5ncmFzc1Jlc291cmNlQWNjZXNzUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NHcmVlbmdyYXNzUmVzb3VyY2VBY2Nlc3NSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdGhlIERhdGFmbG93IEVuZHBvaW50IEluc3RhbmNlIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgQVdTIEdyb3VuZCBTdGF0aW9uIEFnZW50ICovXG4gICAgcHVibGljIEFXU0dyb3VuZFN0YXRpb25BZ2VudEluc3RhbmNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0dyb3VuZFN0YXRpb25BZ2VudEluc3RhbmNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBIZWFsdGggdG8gZW5hYmxlIHRoZSBIZWFsdGggZXZlbnQgcHJvY2Vzc29yIGZlYXR1cmUuICovXG4gICAgcHVibGljIEFXU0hlYWx0aEV2ZW50UHJvY2Vzc29yU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSGVhbHRoRXZlbnRQcm9jZXNzb3JTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIEhlYWx0aCBBcGlzIGFuZCBOb3RpZmljYXRpb25zIGFuZCB0aGUgUGVyc29uYWwgSGVhbHRoIERhc2hib2FyZCAqL1xuICAgIHB1YmxpYyBBV1NIZWFsdGhGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0hlYWx0aEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgSGVhbHRoIEltYWdpbmcgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTSGVhbHRoSW1hZ2luZ0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSGVhbHRoSW1hZ2luZ0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBIZWFsdGggSW1hZ2luZyBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NIZWFsdGhJbWFnaW5nUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSGVhbHRoSW1hZ2luZ1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIEFXUyBIZWFsdGhJbWFnaW5nIHRvIG1hbmFnZSBzZXJ2aWNlIG9wZXJhdGlvbnMgYW5kIHB1Ymxpc2ggc2VydmljZSBtZXRyaWNzICovXG4gICAgcHVibGljIEFXU0hlYWx0aEltYWdpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NIZWFsdGhJbWFnaW5nU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBNYW5hZ2VkIFBvbGljeSBGb3IgQW1hem9uIEhlYWx0aE9taWNzIFNlcnZpY2UgTGlua2VkIFJvbGUgKi9cbiAgICBwdWJsaWMgQVdTSGVhbHRoT21pY3NTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NIZWFsdGhPbWljc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdGhlIGxpc3Qgb2YgYWN0aW9ucyB0aGF0IGFyZSBhbGxvd2VkIGZvciByb2xlcyBhc3N1bWVkIHdpdGggdGhlIElBTSBJZGVudGl0eSBDZW50ZXIgaWRlbnRpdHkgY29udGV4dC4gQVdTIFNlY3VyaXR5IFRva2VuIFNlcnZpY2UgKEFXUyBTVFMpIGF1dG9tYXRpY2FsbHkgYXR0YWNoZXMgdGhpcyBwb2xpY3kgdG8gYXNzdW1lZCByb2xlcy4gVGhlIGlkZW50aXR5IGNvbnRleHQgaXMgcGFzc2VkIGFzIFByb3ZpZGVkQ29udGV4dC4gKi9cbiAgICBwdWJsaWMgQVdTSUFNSWRlbnRpdHlDZW50ZXJBbGxvd0xpc3RGb3JJZGVudGl0eUNvbnRleHQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSUFNSWRlbnRpdHlDZW50ZXJBbGxvd0xpc3RGb3JJZGVudGl0eUNvbnRleHQpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgSUFNIFJvbGUgTWFuYWdlciB0byBtYW5hZ2UgcmVzb3VyY2VzIGluIHlvdXIgYWNjb3VudCBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTSUFNUm9sZU1hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJQU1Sb2xlTWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIG1hbmFnZSBJQU0gSWRlbnRpdHkgQ2VudGVyIHVzZXJzIGZyb20gYW4gZXh0ZXJuYWwgcHJvdmlkZXIuICovXG4gICAgcHVibGljIEFXU0lkZW50aXR5Q2VudGVyRXh0ZXJuYWxNYW5hZ2VtZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lkZW50aXR5Q2VudGVyRXh0ZXJuYWxNYW5hZ2VtZW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIHRoZSBJZGVudGl0eSBTeW5jIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQVdTSWRlbnRpdHlTeW5jRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJZGVudGl0eVN5bmNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUmVhZCBvbmx5IGFjY2VzcyB0byB0aGUgSWRlbnRpdHkgU3luYyBzZXJ2aWNlICovXG4gICAgcHVibGljIEFXU0lkZW50aXR5U3luY1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lkZW50aXR5U3luY1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIEFXUyBJbWFnZSBCdWlsZGVyIGFjdGlvbnMgYW5kIHJlc291cmNlIHNjb3BlZCBhY2Nlc3MgdG8gcmVsYXRlZCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0ltYWdlQnVpbGRlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW1hZ2VCdWlsZGVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWxsIEFXUyBJbWFnZSBCdWlsZGVyIGFjdGlvbnMuICovXG4gICAgcHVibGljIEFXU0ltYWdlQnVpbGRlclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ltYWdlQnVpbGRlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBhbmQgd3JpdGUgYWNjZXNzIHRvIHRoZSBqb2JzIGNyZWF0ZWQgdW5kZXIgdGhlIEFXUyBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBV1NJbXBvcnRFeHBvcnRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0ltcG9ydEV4cG9ydEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBqb2JzIGNyZWF0ZWQgdW5kZXIgdGhlIEFXUyBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBV1NJbXBvcnRFeHBvcnRSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJbXBvcnRFeHBvcnRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBJbmNpZGVudCBNYW5hZ2VyIHBlcm1pc3Npb25zIHRvIGNhbGwgb3RoZXIgQVdTIHNlcnZpY2VzIGFzIGEgcGFydCBvZiBtYW5hZ2luZyBhbiBpbmNpZGVudC4gKi9cbiAgICBwdWJsaWMgQVdTSW5jaWRlbnRNYW5hZ2VySW5jaWRlbnRBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJbmNpZGVudE1hbmFnZXJJbmNpZGVudEFjY2Vzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHN0YXJ0LCB2aWV3LCBhbmQgdXBkYXRlIGluY2lkZW50cyB3aXRoIGZ1bGwgYWNjZXNzIHRvIGN1c3RvbSB0aW1lbGluZSBldmVudHMgJiByZWxhdGVkIGl0ZW1zLiBBc3NpZ24gdGhpcyBwb2xpY3kgdG8gdXNlcnMgd2hvIHdpbGwgY3JlYXRlIGFuZCByZXNvbHZlIGluY2lkZW50cy4gKi9cbiAgICBwdWJsaWMgQVdTSW5jaWRlbnRNYW5hZ2VyUmVzb2x2ZXJBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW5jaWRlbnRNYW5hZ2VyUmVzb2x2ZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgSW5jaWRlbnQgTWFuYWdlciBwZXJtaXNzaW9uIHRvIG1hbmFnZSBpbmNpZGVudCByZWNvcmRzIGFuZCByZWxhdGVkIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTSW5jaWRlbnRNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW5jaWRlbnRNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBJb1QgQW5hbHl0aWNzLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RBbmFseXRpY3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVEFuYWx5dGljc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIElvVCBBbmFseXRpY3MuICovXG4gICAgcHVibGljIEFXU0lvVEFuYWx5dGljc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVEFuYWx5dGljc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ2l2ZXMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFXUyBJb1QgY29uZmlndXJhdGlvbiBhY3Rpb25zICovXG4gICAgcHVibGljIEFXU0lvVENvbmZpZ0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RDb25maWdBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBnaXZlcyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBBV1MgSW9UIGNvbmZpZ3VyYXRpb24gYWN0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NJb1RDb25maWdSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RDb25maWdSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdpdmVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgSW9UIG1lc3NhZ2luZyBhY3Rpb25zICovXG4gICAgcHVibGljIEFXU0lvVERhdGFBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGF0YUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHdyaXRlIGFjY2VzcyB0byBJb1QgdGhpbmcgZ3JvdXBzIGFuZCByZWFkIGFjY2VzcyB0byBJb1QgQ2VydGlmaWNhdGVzIGZvciBleGVjdXRpb24gb2YgQUREX1RISU5HU19UT19USElOR19HUk9VUCBtaXRpZ2F0aW9uIGFjdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NJb1REZXZpY2VEZWZlbmRlckFkZFRoaW5nc1RvVGhpbmdHcm91cE1pdGlnYXRpb25BY3Rpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGV2aWNlRGVmZW5kZXJBZGRUaGluZ3NUb1RoaW5nR3JvdXBNaXRpZ2F0aW9uQWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBhY2Nlc3MgZm9yIElvVCBhbmQgcmVsYXRlZCByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTSW9URGV2aWNlRGVmZW5kZXJBdWRpdCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1REZXZpY2VEZWZlbmRlckF1ZGl0KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIGZvciBlbmFibGluZyBJb1QgbG9nZ2luZyBmb3IgZXhlY3V0aW9uIG9mIEVOQUJMRV9JT1RfTE9HR0lORyBtaXRpZ2F0aW9uIGFjdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NJb1REZXZpY2VEZWZlbmRlckVuYWJsZUlvVExvZ2dpbmdNaXRpZ2F0aW9uQWN0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVERldmljZURlZmVuZGVyRW5hYmxlSW9UTG9nZ2luZ01pdGlnYXRpb25BY3Rpb24pO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBtZXNzYWdlcyBwdWJsaXNoIGFjY2VzcyB0byBTTlMgdG9waWMgZm9yIGV4ZWN1dGlvbiBvZiBQVUJMSVNIX0ZJTkRJTkdfVE9fU05TIG1pdGlnYXRpb24gYWN0aW9uICovXG4gICAgcHVibGljIEFXU0lvVERldmljZURlZmVuZGVyUHVibGlzaEZpbmRpbmdzVG9TTlNNaXRpZ2F0aW9uQWN0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVERldmljZURlZmVuZGVyUHVibGlzaEZpbmRpbmdzVG9TTlNNaXRpZ2F0aW9uQWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgd3JpdGUgYWNjZXNzIHRvIElvVCBwb2xpY2llcyBmb3IgZXhlY3V0aW9uIG9mIFJFUExBQ0VfREVGQVVMVF9QT0xJQ1lfVkVSU0lPTiBtaXRpZ2F0aW9uIGFjdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NJb1REZXZpY2VEZWZlbmRlclJlcGxhY2VEZWZhdWx0UG9saWN5TWl0aWdhdGlvbkFjdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1REZXZpY2VEZWZlbmRlclJlcGxhY2VEZWZhdWx0UG9saWN5TWl0aWdhdGlvbkFjdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHdyaXRlIGFjY2VzcyB0byBJb1QgQ0EgY2VydGlmaWNhdGVzIGZvciBleGVjdXRpb24gb2YgIFVQREFURV9DQV9DRVJUSUZJQ0FURSBtaXRpZ2F0aW9uIGFjdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NJb1REZXZpY2VEZWZlbmRlclVwZGF0ZUNBQ2VydE1pdGlnYXRpb25BY3Rpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGV2aWNlRGVmZW5kZXJVcGRhdGVDQUNlcnRNaXRpZ2F0aW9uQWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgd3JpdGUgYWNjZXNzIHRvIElvVCBjZXJ0aWZpY2F0ZXMgZm9yIGV4ZWN1dGlvbiBvZiBVUERBVEVfREVWSUNFX0NFUlRJRklDQVRFIG1pdGlnYXRpb24gYWN0aW9uICovXG4gICAgcHVibGljIEFXU0lvVERldmljZURlZmVuZGVyVXBkYXRlRGV2aWNlQ2VydE1pdGlnYXRpb25BY3Rpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGV2aWNlRGVmZW5kZXJVcGRhdGVEZXZpY2VDZXJ0TWl0aWdhdGlvbkFjdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgSW9UIERldmljZSBUZXN0ZXIgdG8gcnVuIHRoZSBGcmVlUlRPUyBxdWFsaWZpY2F0aW9uIHN1aXRlIGJ5IGFsbG93aW5nIGFjY2VzcyB0byBzZXJ2aWNlcyBpbmNsdWRpbmcgSW9ULCBTMywgYW5kIElBTSAqL1xuICAgIHB1YmxpYyBBV1NJb1REZXZpY2VUZXN0ZXJGb3JGcmVlUlRPU0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URGV2aWNlVGVzdGVyRm9yRnJlZVJUT1NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBJb1QgRGV2aWNlIFRlc3RlciB0byBydW4gdGhlIEFXUyBHcmVlbmdyYXNzIHF1YWxpZmljYXRpb24gc3VpdGUgYnkgYWxsb3dpbmcgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgaW5jbHVkaW5nIExhbWJkYSwgSW9ULCBBUEkgR2F0ZXdheSwgSUFNICovXG4gICAgcHVibGljIEFXU0lvVERldmljZVRlc3RlckZvckdyZWVuZ3Jhc3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVERldmljZVRlc3RlckZvckdyZWVuZ3Jhc3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSW9UIEV2ZW50cy4gKi9cbiAgICBwdWJsaWMgQVdTSW9URXZlbnRzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RFdmVudHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBJb1QgRXZlbnRzLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RFdmVudHNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RFdmVudHNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEZlZGVyYXRpb24gYWNjZXNzIGZvciBJb1QgRmxlZXQgSHViIGFwcGxpY2F0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NJb1RGbGVldEh1YkZlZGVyYXRpb25BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URmxlZXRIdWJGZWRlcmF0aW9uQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIEFXUyBSZXNvdXJjZXMgYW5kIG1ldGFEYXRhIHVzZWQgb3IgbWFuYWdlZCBieSBBV1NJb1RGbGVldHdpc2UgZm9yIGF1eGlsaWFyeSBmZWF0dXJlcyAqL1xuICAgIHB1YmxpYyBBV1NJb1RGbGVldHdpc2VTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RGbGVldHdpc2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdpdmVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgSW9UIGNvbmZpZ3VyYXRpb24gYW5kIG1lc3NhZ2luZyBhY3Rpb25zICovXG4gICAgcHVibGljIEFXU0lvVEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9URnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBjcmVhdGlvbiBvZiBBbWF6b24gQ2xvdWRXYXRjaCBMb2cgZ3JvdXBzIGFuZCBzdHJlYW1pbmcgbG9ncyB0byB0aGUgZ3JvdXBzICovXG4gICAgcHVibGljIEFXU0lvVExvZ2dpbmcoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UTG9nZ2luZyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIG1hbmFnZWQgaW50ZWdyYXRpb25zIGZvciBBV1MgSW9UIERldmljZSBNYW5hZ2VtZW50IGFuZCByZWxhdGVkIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RNYW5hZ2VkSW50ZWdyYXRpb25zRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RNYW5hZ2VkSW50ZWdyYXRpb25zRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIG1hbmFnZWQgaW50ZWdyYXRpb25zIGZvciBBV1MgSW9UIERldmljZSBNYW5hZ2VtZW50IHBlcm1pc3Npb24gdG8gcHVibGlzaCBsb2dzIGFuZCBtZXRyaWNzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RNYW5hZ2VkSW50ZWdyYXRpb25zUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RNYW5hZ2VkSW50ZWdyYXRpb25zUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhY2Nlc3MgdG8gY3JlYXRlIEFXUyBJb1QgSm9iIGFuZCBkZXNjcmliZSB0aGUgQVdTIGNvZGUgc2lnbmVyIGpvYiAqL1xuICAgIHB1YmxpYyBBV1NJb1RPVEFVcGRhdGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UT1RBVXBkYXRlKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFjY2VzcyB0byBhbGwgQVdTIHNlcnZpY2VzIHN1cHBvcnRlZCBpbiBBV1MgSW9UIFJ1bGUgQWN0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NJb1RSdWxlQWN0aW9ucygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RSdWxlQWN0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIG1hbmFnZSBBV1MgSW9UIFNpdGVXaXNlIHVzaW5nIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiBOb3RlIHRoaXMgcG9saWN5IGFsc28gZ3JhbnRzIGFjY2VzcyB0byBjcmVhdGUgYW5kIGxpc3QgZGF0YSBzdG9yZXMgdXNlZCB3aXRoIEFXUyBJb1QgU2l0ZVdpc2UgKGUuZy4gQVdTIElvVCBBbmFseXRpY3MpLCBhY2Nlc3MgdG8gbGlzdCBhbmQgdmlldyBBV1MgSW9UIEdyZWVuZ3Jhc3MgcmVzb3VyY2VzLCBsaXN0IGFuZCBtb2RpZnkgQVdTIFNlY3JldHMgTWFuYWdlciBzZWNyZXRzLCByZXRyaWV2ZSBBV1MgSW9UIHRoaW5nIHNoYWRvd3MsIGxpc3QgcmVzb3VyY2VzIHdpdGggc3BlY2lmaWMgdGFncywgYW5kIGNyZWF0ZSBhbmQgdXNlIGEgc2VydmljZS1saW5rZWQgcm9sZSBmb3IgQVdTIElvVCBTaXRlV2lzZS4gKi9cbiAgICBwdWJsaWMgQVdTSW9UU2l0ZVdpc2VDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RTaXRlV2lzZUNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSW9UIFNpdGVXaXNlLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RTaXRlV2lzZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UU2l0ZVdpc2VGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIGFjY2VzcyBBV1MgSW9UIFNpdGVXaXNlIGFzc2V0cyBhbmQgYXNzZXQgZGF0YSwgY3JlYXRlIEFXUyBJb1QgU2l0ZVdpc2UgTW9uaXRvciByZXNvdXJjZXMsIGFuZCBsaXN0IEFXUyBTU08gdXNlcnMuICovXG4gICAgcHVibGljIEFXU0lvVFNpdGVXaXNlTW9uaXRvclBvcnRhbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RTaXRlV2lzZU1vbml0b3JQb3J0YWxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHJvbGUgZ3JhbnRzIEFXUyBJb1QgU2l0ZVdpc2UgbW9uaXRvciBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgeW91ciBBV1MgSW9UIFNpdGVXaXNlIGFzc2V0cyAmIGFzc2V0IHByb3BlcnRpZXMsIGFuZCBjcmVhdGUgQVdTIElvVCBTaXRld2lzZSBwcm9qZWN0cywgZGFzaGJvYXJkcyAmIGFjY2VzcyBwb2xpY2llcyB0aHJvdWdoIEFXUyBJb1QgU2l0ZVdpc2UgcG9ydGFscy4gKi9cbiAgICBwdWJsaWMgQVdTSW9UU2l0ZVdpc2VNb25pdG9yU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UU2l0ZVdpc2VNb25pdG9yU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIElvVCBTaXRlV2lzZS4gKi9cbiAgICBwdWJsaWMgQVdTSW9UU2l0ZVdpc2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RTaXRlV2lzZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIHVzZXJzIHRvIHJlZ2lzdGVyIHRoaW5ncyBhdCBidWxrIHVzaW5nIEFXUyBJb1QgU3RhcnRUaGluZ1JlZ2lzdHJhdGlvblRhc2sgQVBJICovXG4gICAgcHVibGljIEFXU0lvVFRoaW5nc1JlZ2lzdHJhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RUaGluZ3NSZWdpc3RyYXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIElvVCBUd2luTWFrZXIgdG8gY2FsbCBvdGhlciBBV1Mgc2VydmljZXMgYW5kIHRvIHN5bmMgdGhlaXIgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NJb1RUd2luTWFrZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RUd2luTWFrZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgYXNzb2NpYXRlZCBpZGVudGl0eSBkYXRhIGFjY2VzcyB0byBBV1MgSW9UIFdpcmVsZXNzIGRldmljZXMuICovXG4gICAgcHVibGljIEFXU0lvVFdpcmVsZXNzRGF0YUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJb1RXaXJlbGVzc0RhdGFBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIGFzc29jaWF0ZWQgaWRlbnRpdHkgZnVsbCBhY2Nlc3MgdG8gYWxsIEFXUyBJb1QgV2lyZWxlc3Mgb3BlcmF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTSW9UV2lyZWxlc3NGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVFdpcmVsZXNzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIElvVCBXaXJlbGVzcyBmdWxsIGFjY2VzcyB0byBwdWJsaXNoIHRvIElvVCBSdWxlcyBFbmdpbmUgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0lvVFdpcmVsZXNzRnVsbFB1Ymxpc2hBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UV2lyZWxlc3NGdWxsUHVibGlzaEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgYXNzb2NpYXRlZCBpZGVudGl0eSBhY2Nlc3MgdG8gY3JlYXRlLCBsaXN0IGFuZCBkZXNjcmliZSBJb1QgQ2VydGlmaWNhdGVzICovXG4gICAgcHVibGljIEFXU0lvVFdpcmVsZXNzR2F0ZXdheUNlcnRNYW5hZ2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVFdpcmVsZXNzR2F0ZXdheUNlcnRNYW5hZ2VyKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBhc3NvY2lhdGVkIGlkZW50aXR5IHRvIGNyZWF0ZSBBbWF6b24gQ2xvdWRXYXRjaCBMb2dzIGdyb3VwcyBhbmQgc3RyZWFtIGxvZ3MgdG8gdGhlIGdyb3Vwcy4gKi9cbiAgICBwdWJsaWMgQVdTSW9UV2lyZWxlc3NMb2dnaW5nKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lvVFdpcmVsZXNzTG9nZ2luZyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgYXNzb2NpYXRlZCBpZGVudGl0eSByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBJb1Qgd2lyZWxlc3MuICovXG4gICAgcHVibGljIEFXU0lvVFdpcmVsZXNzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSW9UV2lyZWxlc3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBWUEMgSVAgQWRkcmVzcyBNYW5hZ2VyIHRvIGFjY2VzcyBWUEMgcmVzb3VyY2VzIGFuZCBpbnRlZ3JhdGUgd2l0aCBBV1MgT3JnYW5pemF0aW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTSVBBTVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0lQQU1TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFVzZWQgYnkgQVdTIElRIHRvIGV4ZWN1dGUgcGF5bWVudCByZXF1ZXN0cyBvbiBiZWhhbGYgb2YgYSBjdXN0b21lciAqL1xuICAgIHB1YmxpYyBBV1NJUUNvbnRyYWN0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTSVFDb250cmFjdFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIElRICovXG4gICAgcHVibGljIEFXU0lRRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJUUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIElRIHRvIG1hbmFnZSB0aGUgcm9sZSBhc3N1bWVkIGJ5IEFXUyBJUSBleHBlcnRzLiAqL1xuICAgIHB1YmxpYyBBV1NJUVBlcm1pc3Npb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NJUVBlcm1pc3Npb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzIHJlcXVpcmVkIGZvciBBV1MgS01TIGN1c3RvbSBrZXkgc3RvcmVzICovXG4gICAgcHVibGljIEFXU0tleU1hbmFnZW1lbnRTZXJ2aWNlQ3VzdG9tS2V5U3RvcmVzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTS2V5TWFuYWdlbWVudFNlcnZpY2VDdXN0b21LZXlTdG9yZXNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgQVdTIEtNUyB0byBzeW5jaHJvbml6ZSB0aGUgc2hhcmVkIHByb3BlcnRpZXMgb2YgbXVsdGktUmVnaW9uIGtleXMuICovXG4gICAgcHVibGljIEFXU0tleU1hbmFnZW1lbnRTZXJ2aWNlTXVsdGlSZWdpb25LZXlzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTS2V5TWFuYWdlbWVudFNlcnZpY2VNdWx0aVJlZ2lvbktleXNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSAoS01TKS4gKi9cbiAgICBwdWJsaWMgQVdTS2V5TWFuYWdlbWVudFNlcnZpY2VQb3dlclVzZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTS2V5TWFuYWdlbWVudFNlcnZpY2VQb3dlclVzZXIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjcm9zcyBhY2NvdW50IGFjY2VzcyB0byBHbHVlIHJlc291cmNlcyB2aWEgTGFrZSBGb3JtYXRpb24uIEFsc28gZ3JhbnRzIHJlYWQgYWNjZXNzIHRvIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzIHN1Y2ggYXMgb3JnYW5pemF0aW9ucyBhbmQgcmVzb3VyY2UgYWNjZXNzIG1hbmFnZXIgKi9cbiAgICBwdWJsaWMgQVdTTGFrZUZvcm1hdGlvbkNyb3NzQWNjb3VudE1hbmFnZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFrZUZvcm1hdGlvbkNyb3NzQWNjb3VudE1hbmFnZXIpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEFXUyBMYWtlIEZvcm1hdGlvbiBhbmQgcmVsYXRlZCBzZXJ2aWNlcywgc3VjaCBhcyBBV1MgR2x1ZSwgdG8gbWFuYWdlIGRhdGEgbGFrZXMgKi9cbiAgICBwdWJsaWMgQVdTTGFrZUZvcm1hdGlvbkRhdGFBZG1pbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYWtlRm9ybWF0aW9uRGF0YUFkbWluKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFXUyBMYW1iZGEgc2VydmljZSwgQVdTIExhbWJkYSBjb25zb2xlIGZlYXR1cmVzLCBhbmQgb3RoZXIgcmVsYXRlZCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0xhbWJkYUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBMYW1iZGEgc2VydmljZSwgQVdTIExhbWJkYSBjb25zb2xlIGZlYXR1cmVzLCBhbmQgb3RoZXIgcmVsYXRlZCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU0xhbWJkYVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBMb2dzIGFuZCByZWFkL3dyaXRlIHBlcm1pc3Npb25zIHRvIGR1cmFibGUgZXhlY3V0aW9uIEFQSXMgdXNlZCBieSBMYW1iZGEgZHVyYWJsZSBmdW5jdGlvbnMgKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhQmFzaWNEdXJhYmxlRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFCYXNpY0R1cmFibGVFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBMb2dzLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbGlzdCBhbmQgcmVhZCBhY2Nlc3MgdG8gRHluYW1vREIgc3RyZWFtcyBhbmQgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBsb2dzLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFEeW5hbW9EQkV4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhRHluYW1vREJFeGVjdXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbWluaW11bSBwZXJtaXNzaW9ucyBmb3IgYSBMYW1iZGEgZnVuY3Rpb24gdG8gbWFuYWdlIEVOSXMgKGNyZWF0ZSwgZGVzY3JpYmUsIGRlbGV0ZSkgdXNlZCBieSBhIFZQQy1lbmFibGVkIExhbWJkYSBGdW5jdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhRU5JTWFuYWdlbWVudEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFFTklNYW5hZ2VtZW50QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgUHV0LCBHZXQgYWNjZXNzIHRvIFMzIGFuZCBmdWxsIGFjY2VzcyB0byBDbG91ZFdhdGNoIExvZ3MuICovXG4gICAgcHVibGljIEFXU0xhbWJkYUV4ZWN1dGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhRXhlY3V0ZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgYWNjZXNzIHRvIER5bmFtb0RCIFN0cmVhbXMuICovXG4gICAgcHVibGljIEFXU0xhbWJkYUludm9jYXRpb25EeW5hbW9EQigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFJbnZvY2F0aW9uRHluYW1vREIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBsaXN0IGFuZCByZWFkIGFjY2VzcyB0byBLaW5lc2lzIHN0cmVhbXMgYW5kIHdyaXRlIHBlcm1pc3Npb25zIHRvIENsb3VkV2F0Y2ggbG9ncy4gKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhS2luZXNpc0V4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhS2luZXNpc0V4ZWN1dGlvblJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gdG8gY3JlYXRlIGFuZCBhZG1pbmlzdGVyIEVDMiByZXNvdXJjZXMgbWFuYWdlZCBieSB0aGUgTGFtYmRhIE1hbmFnZWQgSW5zdGFuY2VzLCBhbmQgZGVzY3JpcHRpdmUgcGVybWlzc2lvbnMuICovXG4gICAgcHVibGljIEFXU0xhbWJkYU1hbmFnZWRFQzJSZXNvdXJjZU9wZXJhdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYU1hbmFnZWRFQzJSZXNvdXJjZU9wZXJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gYWNjZXNzIE1TSyBDbHVzdGVyIHdpdGhpbiBhIFZQQywgbWFuYWdlIEVOSXMgKGNyZWF0ZSwgZGVzY3JpYmUsIGRlbGV0ZSkgaW4gdGhlIFZQQyBhbmQgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBMb2dzLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFNU0tFeGVjdXRpb25Sb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYU1TS0V4ZWN1dGlvblJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gY3JlYXRlIGFuZCBhZG1pbmlzdGVyIEVOSSByZXNvdXJjZXMgbWFuYWdlZCBieSB0aGUgTGFtYmRhIE5ldHdvcmsgQ29ubmVjdG9yICovXG4gICAgcHVibGljIEFXU0xhbWJkYU5ldHdvcmtDb25uZWN0b3JPcGVyYXRvclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFOZXR3b3JrQ29ubmVjdG9yT3BlcmF0b3JQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgTGFtYmRhIFJlcGxpY2F0b3IgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIHRvIHJlcGxpY2F0ZSBmdW5jdGlvbnMgYWNyb3NzIHJlZ2lvbnMgKi9cbiAgICBwdWJsaWMgQVdTTGFtYmRhUmVwbGljYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMYW1iZGFSZXBsaWNhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIEFXUyBMYW1iZGEgc2VydmljZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFSb2xlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYVJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgTGFtYmRhIHRvIGRlc2NyaWJlIGFuZCB0ZXJtaW5hdGUgbWFuYWdlZCBpbnN0YW5jZXMgZnJvbSBFQzIgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU0xhbWJkYVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xhbWJkYVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVjZWl2ZSBtZXNzYWdlLCBkZWxldGUgbWVzc2FnZSwgYW5kIHJlYWQgYXR0cmlidXRlIGFjY2VzcyB0byBTUVMgcXVldWVzLCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgdG8gQ2xvdWRXYXRjaCBsb2dzLiAqL1xuICAgIHB1YmxpYyBBV1NMYW1iZGFTUVNRdWV1ZUV4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhU1FTUXVldWVFeGVjdXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbWluaW11bSBwZXJtaXNzaW9ucyBmb3IgYSBMYW1iZGEgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGlsZSBhY2Nlc3NpbmcgYSByZXNvdXJjZSB3aXRoaW4gYSBWUEMgLSBjcmVhdGUsIGRlc2NyaWJlLCBkZWxldGUgbmV0d29yayBpbnRlcmZhY2VzIGFuZCB3cml0ZSBwZXJtaXNzaW9ucyB0byBDbG91ZFdhdGNoIExvZ3MuICovXG4gICAgcHVibGljIEFXU0xhbWJkYVZQQ0FjY2Vzc0V4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGFtYmRhVlBDQWNjZXNzRXhlY3V0aW9uUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGFsbG93IGFjY2VzcyB0byB0aGUgQVdTIExpY2Vuc2UgTWFuYWdlciBBUEkgYWN0aW9ucyByZXF1aXJlZCB0byBjb25zdW1lIHVwb24gbGljZW5zZXMgdGhhdCB0aGUgdXNlciBoYXMgZW50aXRsZW1lbnRzLiAqL1xuICAgIHB1YmxpYyBBV1NMaWNlbnNlTWFuYWdlckNvbnN1bXB0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xpY2Vuc2VNYW5hZ2VyQ29uc3VtcHRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIExpY2Vuc2UgTWFuYWdlciBMaW51eCBTdWJzY3JpcHRpb25zIFNlcnZpY2UgdG8gbWFuYWdlIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTTGljZW5zZU1hbmFnZXJMaW51eFN1YnNjcmlwdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NMaWNlbnNlTWFuYWdlckxpbnV4U3Vic2NyaXB0aW9uc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQVdTIExpY2Vuc2UgTWFuYWdlciBzZXJ2aWNlIG1hc3RlciBhY2NvdW50IHJvbGUgcG9saWN5ICovXG4gICAgcHVibGljIEFXU0xpY2Vuc2VNYW5hZ2VyTWFzdGVyQWNjb3VudFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGljZW5zZU1hbmFnZXJNYXN0ZXJBY2NvdW50Um9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBMaWNlbnNlIE1hbmFnZXIgc2VydmljZSBtZW1iZXIgYWNjb3VudCByb2xlIHBvbGljeSAqL1xuICAgIHB1YmxpYyBBV1NMaWNlbnNlTWFuYWdlck1lbWJlckFjY291bnRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xpY2Vuc2VNYW5hZ2VyTWVtYmVyQWNjb3VudFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgTGljZW5zZSBNYW5hZ2VyIHNlcnZpY2UgZGVmYXVsdCByb2xlIHBvbGljeSAqL1xuICAgIHB1YmxpYyBBV1NMaWNlbnNlTWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU0xpY2Vuc2VNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIExpY2Vuc2UgTWFuYWdlciBVc2VyIFN1YnNjcmlwdGlvbnMgU2VydmljZSB0byBtYW5hZ2UgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NMaWNlbnNlTWFuYWdlclVzZXJTdWJzY3JpcHRpb25zU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTGljZW5zZU1hbmFnZXJVc2VyU3Vic2NyaXB0aW9uc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBNMiB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTTTJTZXJ2aWNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU00yU2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBBV1MgcGVybWlzc2lvbnMgdG8gdXBkYXRlIGFuZCBtYWludGFpbiBBV1MgbWFuYWdlZCByb2xlcyBmb3IgQVdTIG1hbmFnZWQgYWNjb3VudHMgKi9cbiAgICBwdWJsaWMgQVdTTWFuYWdlZEFjY291bnRNYW5hZ2VtZW50QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hbmFnZWRBY2NvdW50TWFuYWdlbWVudEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBBV1MgcGVybWlzc2lvbnMgdG8gbWFuYWdlIGFjY291bnQgYWNjZXNzIGVudGl0bGVtZW50cyBmb3IgQVdTIG1hbmFnZWQgYWNjb3VudHMgKi9cbiAgICBwdWJsaWMgQVdTTWFuYWdlZEFjY291bnRVc2VyRW50aXRsZW1lbnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFuYWdlZEFjY291bnRVc2VyRW50aXRsZW1lbnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQVdTIHBlcm1pc3Npb24gdG8gYWN0aXZhdGUgYWR2YW5jZWQgZmVhdHVyZXMgZm9yIEFXUyBtYW5hZ2VkIGFjY291bnRzICovXG4gICAgcHVibGljIEFXU01hbmFnZWRBZHZhbmNlZEZlYXR1cmVzQWN0aXZhdGlvbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYW5hZ2VkQWR2YW5jZWRGZWF0dXJlc0FjdGl2YXRpb25BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdGhlIEFXUyBCdWRnZXRzIHNlcnZpY2UgcGVybWlzc2lvbnMgdG8gYXR0YWNoIGFuZCBkZXRhY2ggU2VydmljZSBDb250cm9sIFBvbGljaWVzIGFuZCBtYW5hZ2UgYWNjb3VudHMgaW4gYW4gQVdTIE9yZ2FuaXphdGlvbiB0byBlbmZvcmNlIHNwZW5kIGxpbWl0IGd1YXJkcmFpbHMgb24gbWVtYmVyIGFjY291bnRzLiAqL1xuICAgIHB1YmxpYyBBV1NNYW5hZ2VkQnVkZ2V0c1NwZW5kTGltaXRNYW5hZ2VtZW50QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hbmFnZWRCdWRnZXRzU3BlbmRMaW1pdE1hbmFnZW1lbnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQVdTIHBlcm1pc3Npb24gdG8gbWFuYWdlIG9yZ2FuaXphdGlvbiBjb250cm9sIHBvbGljaWVzIGZvciBBV1MgbWFuYWdlZCBhY2NvdW50cyAqL1xuICAgIHB1YmxpYyBBV1NNYW5hZ2VkQ29udHJvbFBvbGljeU1hbmFnZW1lbnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFuYWdlZENvbnRyb2xQb2xpY3lNYW5hZ2VtZW50QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIG1hbmFnZSBTZXJ2aWNlIENvbnRyb2wgUG9saWNpZXMgKFNDUHMpIGluIEFXUyBPcmdhbml6YXRpb25zIGZvciB0aGUgQVdTIE1hbmFnZWQgU2VydmljZSBBY2Nlc3MgTWFuYWdlbWVudCBzZXJ2aWNlLiBJbmNsdWRlcyBwZXJtaXNzaW9ucyB0byBsaXN0LCBjcmVhdGUsIHVwZGF0ZSwgYW5kIGF0dGFjaCBTQ1BzIHNjb3BlZCB0byBwb2xpY2llcyB0YWdnZWQgd2l0aCBNYW5hZ2VkQnk9c2VydmljZS1hY2Nlc3MuICovXG4gICAgcHVibGljIEFXU01hbmFnZWRTZXJ2aWNlQWNjZXNzTWFuYWdlbWVudEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYW5hZ2VkU2VydmljZUFjY2Vzc01hbmFnZW1lbnRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIE1hbmFnZWQgU2VydmljZXMgdG8gcmVhZCB0aGUgdmFsdWVzIG9mIHRoZSB0YWdzIG9uIEFXUyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTTWFuYWdlZFNlcnZpY2VzQ29udGFjdHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYW5hZ2VkU2VydmljZXNDb250YWN0c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQVdTIE1hbmFnZWQgU2VydmljZXMgLSBwb2xpY3kgdG8gbWFuYWdlIGRldGVjdGl2ZSBjb250cm9scyBpbmZyYXN0cnVjdHVyZSAqL1xuICAgIHB1YmxpYyBBV1NNYW5hZ2VkU2VydmljZXNEZXRlY3RpdmVDb250cm9sc0NvbmZpZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hbmFnZWRTZXJ2aWNlc0RldGVjdGl2ZUNvbnRyb2xzQ29uZmlnU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgTWFuYWdlZCBTZXJ2aWNlcyBwb2xpY3kgdG8gZW5hYmxlIEFNUyBldmVudCBwcm9jZXNzb3IgZmVhdHVyZS4gKi9cbiAgICBwdWJsaWMgQVdTTWFuYWdlZFNlcnZpY2VzRXZlbnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFuYWdlZFNlcnZpY2VzRXZlbnRzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uJ3MgQVdTIE1hbmFnZWQgU2VydmljZSdzIFNlbGYgU2VydmljZSBSZXBvcnRpbmcgZmVhdHVyZSB0byByZWFkIEFXUyBPcmdhbml6YXRpb24gZGF0YSBvbiB5b3VyIGJlaGFsZiB0byBlbmFibGUgb3JnYW5pemF0aW9uIGxldmVsIGFnZ3JlZ2F0ZWQgcmVwb3J0aW5nICovXG4gICAgcHVibGljIEFXU01hbmFnZWRTZXJ2aWNlc1NlbGZTZXJ2aWNlUmVwb3J0aW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFuYWdlZFNlcnZpY2VzU2VsZlNlcnZpY2VSZXBvcnRpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgTWFuYWdlZCBTZXJ2aWNlcyB0byBtYW5hZ2UgZGVwbG95bWVudCB0b29sa2l0IG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NNYW5hZ2VkU2VydmljZXNEZXBsb3ltZW50VG9vbGtpdFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYW5hZ2VkU2VydmljZXNEZXBsb3ltZW50VG9vbGtpdFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBmdWxsIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBBV1MgYWNjb3VudCBzZXR0aW5ncyBtYW5hZ2VtZW50LiBUaGlzIHBvbGljeSBhbGxvd3Mgb3duZXJzIHRvIHZpZXcgYW5kIG1vZGlmeSBhY2NvdW50IGluZm9ybWF0aW9uLCBiaWxsaW5nLCBwYXltZW50cywgdGF4IHJlZ2lzdHJhdGlvbiwgaWRlbnRpdHkgbWFuYWdlbWVudCwgb3JnYW5pemF0aW9uIHBvbGljaWVzLCBidWRnZXRzLCBjb3N0IGFuYWx5c2lzLCBhbmQgd29ya3NwYWNlIG5vdGlmaWNhdGlvbnMuIEludGVuZGVkIGZvciB3b3Jrc3BhY2Ugb3duZXJzIHdobyBuZWVkIGNvbXBsZXRlIGFkbWluaXN0cmF0aXZlIGFjY2VzcyBvdmVyIGFjY291bnQgY29uZmlndXJhdGlvbiBhbmQgbWVtYmVyIG1hbmFnZW1lbnQuIFRoZSBwb2xpY3kgZG9lcyBub3QgZ3JhbnQgYWNjZXNzIHRvIGNvbXB1dGUsIHN0b3JhZ2UsIG5ldHdvcmtpbmcsIG9yIG90aGVyIGluZnJhc3RydWN0dXJlIHNlcnZpY2VzIHVucmVsYXRlZCB0byBhY2NvdW50IHNldHRpbmdzLiAqL1xuICAgIHB1YmxpYyBBV1NNYW5hZ2VkU2V0dGluZ3NBZG1pbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYW5hZ2VkU2V0dGluZ3NBZG1pbkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB0ZWFtIG1lbWJlcnMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgU2V0dGluZ3MsIGluY2x1ZGluZyB3b3Jrc3BhY2UgYW5kIG93bmVyIGluZm9ybWF0aW9uLCB0ZWFtIG1lbWJlcnNoaXAsIHBsYW4gYW5kIHNwZW5kIHN1bW1hcnkuIEl0IGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb25zIHRvIG1vZGlmeSB3b3Jrc3BhY2UgY29uZmlndXJhdGlvbiBvciB0byBtYW5hZ2UgYmlsbGluZyBhbmQgcGF5bWVudHMuICovXG4gICAgcHVibGljIEFXU01hbmFnZWRTZXR0aW5nc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hbmFnZWRTZXR0aW5nc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIEFXUyBwZXJtaXNzaW9uIHRvIGNvbXBsZXRlIHNpZ251cCBmb3IgQVdTIG1hbmFnZWQgYWNjb3VudHMuICovXG4gICAgcHVibGljIEFXU01hbmFnZWRTaWduVXBBZG1pbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYW5hZ2VkU2lnblVwQWRtaW5BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBjb25maWd1cmUgYW5kIGN1c3RvbWl6ZSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBBV1NNYW5hZ2VtZW50Q29uc29sZUFkbWluaXN0cmF0b3JBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFuYWdlbWVudENvbnNvbGVBZG1pbmlzdHJhdG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGFjY2VzcyB0byBlc3NlbnRpYWwgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBmZWF0dXJlcyBhbmQgdXNlciBleHBlcmllbmNlIChVWCkgY2FwYWJpbGl0aWVzIGZvciBub24tYWRtaW5pc3RyYXRpdmUgdXNlcnMuICovXG4gICAgcHVibGljIEFXU01hbmFnZW1lbnRDb25zb2xlQmFzaWNVc2VyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hbmFnZW1lbnRDb25zb2xlQmFzaWNVc2VyQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBNYXJrZXRwbGFjZSB0byBjb3B5IHlvdXIgQW1hem9uIE1hY2hpbmUgSW1hZ2VzIChBTUlzKSBpbiBvcmRlciB0byBsaXN0IHRoZW0gb24gQVdTIE1hcmtldHBsYWNlICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlQW1pSW5nZXN0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlQW1pSW5nZXN0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBNYXJrZXRwbGFjZSB0byBjcmVhdGUgYW5kIG1hbmFnZSBzZWxsZXIgZGVwbG95bWVudCBwYXJhbWV0ZXJzIGZvciB0aGUgcHJvZHVjdHMgdGhhdCB5b3Ugc3Vic2NyaWJlIHRvIG9uIEFXUyBNYXJrZXRwbGFjZS4gKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VEZXBsb3ltZW50U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VEZXBsb3ltZW50U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIE1hcmtldHBsYWNlIERpc2NvdmVyeSBBUEkgZm9yIHNlYXJjaGluZyBhbmQgcmV0cmlldmluZyBwcm9kdWN0IGFuZCBwcmljaW5nIGluZm9ybWF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZURpc2NvdmVyeUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VEaXNjb3ZlcnlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gc3Vic2NyaWJlIGFuZCB1bnN1YnNjcmliZSB0byBBV1MgTWFya2V0cGxhY2Ugc29mdHdhcmUsIGFsbG93cyB1c2VycyB0byBtYW5hZ2UgTWFya2V0cGxhY2Ugc29mdHdhcmUgaW5zdGFuY2VzIGZyb20gdGhlIE1hcmtldHBsYWNlICdZb3VyIFNvZnR3YXJlJyBwYWdlLCBhbmQgcHJvdmlkZXMgYWRtaW5pc3RyYXRpdmUgYWNjZXNzIHRvIEVDMi4gKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgYWNjZXNzIHRvIEFXUyBNYXJrZXRwbGFjZSBFbnRpdGxlbWVudHMgKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VHZXRFbnRpdGxlbWVudHMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VHZXRFbnRpdGxlbWVudHMpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQVdTIE1hcmtldHBsYWNlIGZvciBsaWNlbnNlIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlTGljZW5zZU1hbmFnZW1lbnRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZUxpY2Vuc2VNYW5hZ2VtZW50U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB0aGUgYWJpbGl0eSB0byBzdWJzY3JpYmUgYW5kIHVuc3Vic2NyaWJlIHRvIEFXUyBNYXJrZXRwbGFjZSBzb2Z0d2FyZSAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZU1hbmFnZVN1YnNjcmlwdGlvbnMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VNYW5hZ2VTdWJzY3JpcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIE1hcmtldHBsYWNlIE1ldGVyaW5nLiAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZU1ldGVyaW5nRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZU1ldGVyaW5nRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIHJlZ2lzdGVyIGEgcmVzb3VyY2UgYW5kIHRyYWNrIHVzYWdlIHRocm91Z2ggQVdTIE1hcmtldHBsYWNlIE1ldGVyaW5nIFNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlTWV0ZXJpbmdSZWdpc3RlclVzYWdlKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlTWV0ZXJpbmdSZWdpc3RlclVzYWdlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIGFkbWluaXN0cmF0aXZlIGFjdGlvbnMgZm9yIGFuIEFXUyBNYXJrZXRwbGFjZSBlUHJvY3VyZW1lbnQgaW50ZWdyYXRpb24uICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlUHJvY3VyZW1lbnRTeXN0ZW1BZG1pbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VQcm9jdXJlbWVudFN5c3RlbUFkbWluRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIGZvciBBV1MgTWFya2V0cGxhY2Ugc2VydmljZXMgdG8gcHVyY2hhc2Ugb3JkZXIgbWFuYWdlbWVudC4gKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VQdXJjaGFzZU9yZGVyc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlUHVyY2hhc2VPcmRlcnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIHJldmlldyBBV1MgTWFya2V0cGxhY2Ugc3Vic2NyaXB0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZVJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQVdTIE1hcmtldHBsYWNlIGZvciBSZXNhbGUgQXV0aG9yaXphdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VSZXNhbGVBdXRob3JpemF0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWFya2V0cGxhY2VSZXNhbGVBdXRob3JpemF0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhbGwgc2VsbGVyIG9wZXJhdGlvbnMgb24gdGhlIEFXUyBNYXJrZXRwbGFjZSBhbmQgb3RoZXIgQVdTIHNlcnZpY2VzIHN1Y2ggYXMgQU1JIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlU2VsbGVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZVNlbGxlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBzZWxsZXJzIGFjY2VzcyB0byBPZmZlcnMgYW5kIEFncmVlbWVudHMgbWFuYWdlbWVudCBhY3Rpdml0aWVzLiAqL1xuICAgIHB1YmxpYyBBV1NNYXJrZXRwbGFjZVNlbGxlck9mZmVyTWFuYWdlbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNYXJrZXRwbGFjZVNlbGxlck9mZmVyTWFuYWdlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHNlbGxlcnMgZnVsbCBhY2Nlc3MgdG8gQVdTIE1hcmtldHBsYWNlIE1hbmFnZW1lbnQgUHJvZHVjdHMgcGFnZSBhbmQgb3RoZXIgQVdTIHNlcnZpY2VzIHN1Y2ggYXMgQU1JIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIEFXU01hcmtldHBsYWNlU2VsbGVyUHJvZHVjdHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlU2VsbGVyUHJvZHVjdHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZSBzZWxsZXJzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIE1hcmtldHBsYWNlIE1hbmFnZW1lbnQgUHJvZHVjdHMgcGFnZS4gKi9cbiAgICBwdWJsaWMgQVdTTWFya2V0cGxhY2VTZWxsZXJQcm9kdWN0c1JlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01hcmtldHBsYWNlU2VsbGVyUHJvZHVjdHNSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIGFsbCBNQ1Agc2VydmljZSBhY3Rpb25zLiBUaGlzIHBvbGljeSBkb2VzIG5vdCBncmFudCBhY2Nlc3MgdG8gdGhlIGFjdGlvbnMgdGFrZW4gYnkgdGhlIE1DUCwgb25seSB0aGUgTUNQIGFjdGlvbnMgdGhlbXNlbHZlcy4gKi9cbiAgICBwdWJsaWMgQVdTTWNwU2VydmljZUFjdGlvbnNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01jcFNlcnZpY2VBY3Rpb25zRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBhdXRoZW50aWNhdGUgdG8gdGhlIEFXUyBNQ1Agc2VydmVyIHVzaW5nIEFXUyBTaWduLUluIE9BdXRoICovXG4gICAgcHVibGljIEFXU01DUFNpZ25Jbk9BdXRoQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01DUFNpZ25Jbk9BdXRoQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIGRlZmF1bHQgcG9saWN5IHRoYXQgZW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IE1lZGlhQ29ubmVjdC4gKi9cbiAgICBwdWJsaWMgQVdTTWVkaWFDb25uZWN0U2VydmljZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNZWRpYUNvbm5lY3RTZXJ2aWNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIE1lZGlhTGl2ZSBBbnl3aGVyZSB0byBjcmVhdGUgYW5kIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NNZWRpYUxpdmVBbnl3aGVyZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01lZGlhTGl2ZUFueXdoZXJlU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGUgYWNjZXNzIHRvIEFXUyBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IE1lZGlhVGFpbG9yICovXG4gICAgcHVibGljIEFXU01lZGlhVGFpbG9yU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWVkaWFUYWlsb3JTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBhbGxvd3MgQVdTTWlncmF0aW9uSHViU2VydmljZSB0byBjYWxsIEFXU0FwcGxpY2F0aW9uRGlzY292ZXJ5U2VydmljZSBvbiBiZWhhbGYgb2YgdGhlIGN1c3RvbWVyLiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJEaXNjb3ZlcnlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViRGlzY292ZXJ5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBEYXRhYmFzZSBNaWdyYXRpb24gU2VydmljZSB0byBhc3N1bWUgcm9sZSBpbiBjdXN0b21lcidzIGFjY291bnQgdG8gY2FsbCBNaWdyYXRpb24gSHViICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1YkRNU0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJETVNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBNYW5hZ2VkIHBvbGljeSB0byBwcm92aWRlIHRoZSBjdXN0b21lciBhY2Nlc3MgdG8gdGhlIE1pZ3JhdGlvbiBIdWIgU2VydmljZSAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1YkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBsaW1pdGVkIGFjY2VzcyB0byBBV1MgTWlncmF0aW9uIEh1YiwgQVdTIEFwcGxpY2F0aW9uIERpc2NvdmVyeSBTZXJ2aWNlLCBBbWF6b24gU2ltcGxlIFN0b3JhZ2UgU2VydmljZSBhbmQgQVdTIFNlY3JldHMgTWFuYWdlci4gVGhpcyBwb2xpY3kgYWxzbyBncmFudHMgZnVsbCBhY2Nlc3MgdG8gQVdTIE1pZ3JhdGlvbiBIdWIgT3JjaGVzdHJhdG9yIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1Yk9yY2hlc3RyYXRvckNvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1Yk9yY2hlc3RyYXRvckNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgbmVlZHMgdG8gYmUgYXR0YWNoZWQgZm9yIFNBUCBhbmQgTUdOIG1pZ3JhdGVkIGluc3RhbmNlIGZvciBvdXIgc2VydmljZSB0byBvcmNoZXN0cmF0ZSBpbnN0YW5jZXMgYnkgZG93bmxvYWRpbmcgc2NyaXB0cyBmcm9tIFMzIGFuZCB0byBmZXRjaCBzZWNyZXQgdmFsdWVzIGluc2lkZSBFQzIgaW5zdGFuY2UuICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1Yk9yY2hlc3RyYXRvckluc3RhbmNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJPcmNoZXN0cmF0b3JJbnN0YW5jZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBsaW1pdGVkIGFjY2VzcyB0byBBbWF6b24gU2ltcGxlIFN0b3JhZ2UgU2VydmljZSwgQVdTIFNlY3JldHMgTWFuYWdlciBhbmQgUGx1Z2luIHJlbGF0ZWQgYWN0aW9ucyBmb3IgQVdTIE1pZ3JhdGlvbiBIdWIgT3JjaGVzdHJhdG9yLiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJPcmNoZXN0cmF0b3JQbHVnaW4oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViT3JjaGVzdHJhdG9yUGx1Z2luKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgbmVjZXNzYXJ5IGZvciBNaWdyYXRpb24gSHViIE9yY2hlc3RyYXRvciB0byBtaWdyYXRlIGFuZCBtb2Rlcm5pemUgeW91ciBvbi1wcmVtaXNlcyB3b3JrbG9hZHMgKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViT3JjaGVzdHJhdG9yU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViT3JjaGVzdHJhdG9yU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgdG8gQVdTIE1pZ3JhdGlvbiBIdWIgUmVmYWN0b3IgU3BhY2VzIGFuZCBvdGhlciBBV1MgcmVsYXRlZCBzZXJ2aWNlcyBleGNlcHQgQVdTIFRyYW5zaXQgR2F0ZXdheSBhbmQgRUMyIHNlY3VyaXR5IGdyb3VwcyBub3QgcmVxdWlyZWQgd2hlbiB1c2luZyBlbnZpcm9ubWVudHMgd2l0aG91dCBhIG5ldHdvcmsgYnJpZGdlLiBUaGlzIHBvbGljeSBhbHNvIGV4Y2x1ZGVzIHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciBBV1MgTGFtYmRhIGFuZCBBV1MgUmVzb3VyY2UgQWNjZXNzIE1hbmFnZXIgYXMgdGhleSBjYW4gYmUgc2NvcGVkIGRvd24gYmFzZWQgb24gdGFncy4gKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViUmVmYWN0b3JTcGFjZXNFbnZpcm9ubWVudHNXaXRob3V0QnJpZGdlc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViUmVmYWN0b3JTcGFjZXNFbnZpcm9ubWVudHNXaXRob3V0QnJpZGdlc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBVc2UgaW4gdGhlIElBTSBzZXJ2aWNlIHJvbGUgcGFzc2VkIHRvIHRoZSBTU00gQXV0b21hdGlvbiBkb2N1bWVudCBBV1NSZWZhY3RvclNwYWNlcy1DcmVhdGVSZXNvdXJjZXMgdG8gZ3JhbnQgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gcnVuIHRoZSBhdXRvbWF0aW9uLiBUaGUgcG9saWN5IGdyYW50cyByZWFkL3dyaXRlIGFjY2VzcyB0byBFQzIgdGFncyBpbiBvcmRlciB0byB0cmFjayBhdXRvbWF0aW9uIHByb2dyZXNzLiBXaGVuIHRoZSBSZWZhY3RvciBTcGFjZXMgZW52aXJvbm1lbnQncyBuZXR3b3JrIGJyaWRnZSBpcyBlbmFibGVkLCB0aGUgYXV0b21hdGlvbiBhbHNvIGFkZHMgdGhlIGVudmlyb25tZW50J3Mgc2VjdXJpdHkgZ3JvdXAgdG8gdGhlIEVDMiBpbnN0YW5jZSB0byBwZXJtaXQgdHJhZmZpYyBmcm9tIG90aGVyIFJlZmFjdG9yIFNwYWNlcyBzZXJ2aWNlcyBpbiB0aGUgZW52aXJvbm1lbnQuIFRoZSBwb2xpY3kgYWxzbyBncmFudHMgYWNjZXNzIHRvIHRoZSBBcHBsaWNhdGlvbiBNaWdyYXRpb24gU2VydmljZSdzIHBvc3QgbGF1bmNoIGFjdGlvbnMgU1NNIHBhcmFtZXRlcnMuICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1YlJlZmFjdG9yU3BhY2VzU1NNQXV0b21hdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJSZWZhY3RvclNwYWNlc1NTTUF1dG9tYXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgdG8gQVdTIE1pZ3JhdGlvbkh1YiBSZWZhY3RvciBTcGFjZXMsIEFXUyBNaWdyYXRpb25IdWIgUmVmYWN0b3IgU3BhY2VzIGNvbnNvbGUgZmVhdHVyZXMgYW5kIG90aGVyIHJlbGF0ZWQgQVdTIHNlcnZpY2VzIGV4Y2VwdCBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3IgQVdTIExhbWJkYSBhbmQgQVdTIFJlc291cmNlIEFjY2VzcyBNYW5hZ2VyIGFzIHRoZXkgY2FuIGJlIHNjb3BlZCBkb3duIGJhc2VkIG9uIHRhZ3MuICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1YlJlZmFjdG9yU3BhY2VzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJSZWZhY3RvclNwYWNlc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIFJlc291cmNlcyBtYW5hZ2VkIG9yIHVzZWQgYnkgQVdTIE1pZ3JhdGlvbiBIdWIgUmVmYWN0b3IgU3BhY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NNaWdyYXRpb25IdWJSZWZhY3RvclNwYWNlc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU01pZ3JhdGlvbkh1YlJlZmFjdG9yU3BhY2VzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIFNlcnZlciBNaWdyYXRpb24gU2VydmljZSB0byBhc3N1bWUgcm9sZSBpbiBjdXN0b21lcidzIGFjY291bnQgdG8gY2FsbCBNaWdyYXRpb24gSHViICovXG4gICAgcHVibGljIEFXU01pZ3JhdGlvbkh1YlNNU0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJTTVNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gYWxsb3cgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBBV1MgTWlncmF0aW9uIEh1YiBTdHJhdGVneSBSZWNvbW1lbmRhdGlvbnMgc2VydmljZSwgcmVhZC93cml0ZSBhY2Nlc3MgdG8gUzMgYnVja2V0cyByZWxhdGVkIHRvIHRoZSBzZXJ2aWNlLCBBbWF6b24gQVBJIEdhdGV3YXkgYWNjZXNzIHRvIHVwbG9hZCBsb2dzIGFuZCBtZXRyaWNzIHRvIEFXUywgQVdTIFNlY3JldHMgTWFuYWdlciBhY2Nlc3MgdG8gZmV0Y2ggY3JlZGVudGlhbHMsIGFuZCBhbnkgcmVsYXRlZCBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViU3RyYXRlZ3lDb2xsZWN0b3IoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTWlncmF0aW9uSHViU3RyYXRlZ3lDb2xsZWN0b3IpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgZnVsbCBhY2Nlc3MgdG8gdGhlIEFXUyBNaWdyYXRpb24gSHViIFN0cmF0ZWd5IFJlY29tbWVuZGF0aW9ucyBzZXJ2aWNlIGFuZCBhY2Nlc3MgdG8gcmVsYXRlZCBBV1Mgc2VydmljZXMgdGhyb3VnaCB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViU3RyYXRlZ3lDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJTdHJhdGVneUNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlIGFjY2VzcyB0byBBV1MgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBV1MgTWlncmF0aW9uIEh1YiBTdHJhdGVneSBSZWNvbW1lbmRhdGlvbnMgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTTWlncmF0aW9uSHViU3RyYXRlZ3lTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NNaWdyYXRpb25IdWJTdHJhdGVneVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIEFtYXpvbiBNU0sgUmVwbGljYXRvciB0byByZXBsaWNhdGUgZGF0YSBiZXR3ZWVuIE1TSyBDbHVzdGVycy4gKi9cbiAgICBwdWJsaWMgQVdTTVNLUmVwbGljYXRvckV4ZWN1dGlvblJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTVNLUmVwbGljYXRvckV4ZWN1dGlvblJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgVlBDIHJlc291cmNlcyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgTkFUIEdhdGV3YXlzLiAqL1xuICAgIHB1YmxpYyBBV1NOQVRHYXRld2F5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTkFUR2F0ZXdheVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHRvIEFXUyBOZXR3b3JrIEZpcmV3YWxsIHNlcnZpY2UsIGluY2x1ZGluZyBwZXJtaXNzaW9ucyB0byBjcmVhdGUsIGNvbmZpZ3VyZSwgbWFuYWdlLCBhbmQgZGVsZXRlIGZpcmV3YWxsIHJlc291cmNlcywgcG9saWNpZXMsIGFuZCBydWxlIGdyb3Vwcy4gQWRkaXRpb25hbGx5IGluY2x1ZGVzIHBlcm1pc3Npb25zIHRvIG1vZGlmeSBWUEMgZW5kcG9pbnRzLCBTMyBidWNrZXQgcG9saWNpZXMsIENsb3VkV2F0Y2ggTG9ncyBjb25maWd1cmF0aW9ucywgYW5kIGNyZWF0ZSBzZXJ2aWNlLWxpbmtlZCByb2xlcyBmb3IgTmV0d29yayBGaXJld2FsbCBhbmQgbG9nIGRlbGl2ZXJ5IHNlcnZpY2VzICovXG4gICAgcHVibGljIEFXU05ldHdvcmtGaXJld2FsbEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTmV0d29ya0ZpcmV3YWxsRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIE5ldHdvcmsgRmlyZXdhbGwgcmVzb3VyY2VzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSwgQ0xJLCBhbmQgU0RLcy4gVGhpcyBwb2xpY3kgYWxsb3dzIHVzZXJzIHRvIHZpZXcgYW5kIG1vbml0b3IgZmlyZXdhbGwgY29uZmlndXJhdGlvbnMsIHBvbGljaWVzLCBydWxlIGdyb3VwcywgYW5kIGFzc29jaWF0ZWQgcmVzb3VyY2VzLCB3aXRob3V0IHRoZSBhYmlsaXR5IHRvIG1ha2UgY2hhbmdlcy4gKi9cbiAgICBwdWJsaWMgQVdTTmV0d29ya0ZpcmV3YWxsUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTmV0d29ya0ZpcmV3YWxsUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBBV1NOZXR3b3JrRmlyZXdhbGwgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgbmVjZXNzYXJ5IHJlc291cmNlcyBmb3IgeW91ciBGaXJld2FsbHMuICovXG4gICAgcHVibGljIEFXU05ldHdvcmtGaXJld2FsbFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU05ldHdvcmtGaXJld2FsbFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgTmV0d29ya01hbmFnZXIgdG8gYWNjZXNzIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggeW91ciBDb3JlIE5ldHdvcmsgKi9cbiAgICBwdWJsaWMgQVdTTmV0d29ya01hbmFnZXJDbG91ZFdBTlNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU05ldHdvcmtNYW5hZ2VyQ2xvdWRXQU5TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBOZXR3b3JrTWFuYWdlciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU05ldHdvcmtNYW5hZ2VyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NOZXR3b3JrTWFuYWdlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBOZXR3b3JrTWFuYWdlciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU05ldHdvcmtNYW5hZ2VyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTmV0d29ya01hbmFnZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IE5ldHdvcmtNYW5hZ2VyIHRvIGFjY2VzcyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHlvdXIgR2xvYmFsIE5ldHdvcmtzICovXG4gICAgcHVibGljIEFXU05ldHdvcmtNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTTmV0d29ya01hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UtbGlua2VkIHJvbGUgcGVybWlzc2lvbnMgZm9yIENsb3VkV2F0Y2ggTG9ncyBjZW50cmFsaXphdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NPYnNlcnZhYmlsaXR5QWRtaW5Mb2dzQ2VudHJhbGl6YXRpb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NPYnNlcnZhYmlsaXR5QWRtaW5Mb2dzQ2VudHJhbGl6YXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBtYW5hZ2UgQVdTIENvbmZpZyBDb25maWd1cmF0aW9uIFJlY29yZGVyLCBtYW5hZ2UgQVdTIENvbmZpZyBDb25maWd1cmF0aW9uIEFnZ3JlZ2F0b3IsIGNyZWF0ZSBBV1MgQ29uZmlnIFNlcnZpY2UgTGlua2VkIFJvbGUgZm9yIENvbmZpZ3VyYXRpb24gUmVjb3JkZXIgZnVuY3Rpb25hbGl0eSwgY29uc3VtZSByZWNvcmRlciBjb25maWd1cmF0aW9uIGRhdGEsIGFuZCByZWFkIEFXUyBPcmdhbml6YXRpb25zIGRhdGEgZm9yIG9yZ2FuaXphdGlvbmFsIGZlYXR1cmVzLiAqL1xuICAgIHB1YmxpYyBBV1NPYnNlcnZhYmlsaXR5QWRtaW5TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NPYnNlcnZhYmlsaXR5QWRtaW5TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBtYW5hZ2UgQVdTIENvbmZpZyByZWNvcmRlciByZXNvdXJjZSBhbmQgdGVsZW1ldHJ5IHNldHRpbmdzIG9uIEFXUyByZXNvdXJjZXMgaW5jbHVkaW5nIGxvZ3MsIG1ldHJpY3MuICovXG4gICAgcHVibGljIEFXU09ic2VydmFiaWxpdHlBZG1pblRlbGVtZXRyeUVuYWJsZW1lbnRTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NPYnNlcnZhYmlsaXR5QWRtaW5UZWxlbWV0cnlFbmFibGVtZW50U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgT3JnYW5pemF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTT3JnYW5pemF0aW9uc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTT3JnYW5pemF0aW9uc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBPcmdhbml6YXRpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NPcmdhbml6YXRpb25zUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTT3JnYW5pemF0aW9uc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQSBwb2xpY3kgdG8gYWxsb3cgQVdTIE9yZ2FuaXphdGlvbnMgdG8gc2hhcmUgdHJ1c3Qgd2l0aCBvdGhlciBhcHByb3ZlZCBBV1MgU2VydmljZXMgZm9yIHRoZSBwdXJwb3NlIG9mIHNpbXBsaWZ5aW5nIGN1c3RvbWVyIGNvbmZpZ3VyYXRpb24uICovXG4gICAgcHVibGljIEFXU09yZ2FuaXphdGlvbnNTZXJ2aWNlVHJ1c3RQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTT3JnYW5pemF0aW9uc1NlcnZpY2VUcnVzdFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IHlvdSB0byBpbnN0YWxsIGFuIE91dHBvc3Qgc2VydmVyIG9uIHlvdXIgb24tcHJlbWlzZXMgbmV0d29yay4gKi9cbiAgICBwdWJsaWMgQVdTT3V0cG9zdHNBdXRob3JpemVTZXJ2ZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTT3V0cG9zdHNBdXRob3JpemVTZXJ2ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBTZXJ2aWNlIExpbmtlZCBSb2xlIHBvbGljeSB0byBlbmFibGUgYWNjZXNzIHRvIEFXUyByZXNvdXJjZXMgbWFuYWdlZCBieSBBV1MgT3V0cG9zdHMgKi9cbiAgICBwdWJsaWMgQVdTT3V0cG9zdHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NPdXRwb3N0c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBJb1Qgc29mdHdhcmUgb24gYW4gQVdTIFBhbm9yYW1hIEFwcGxpYW5jZSB0byB1cGxvYWQgbG9ncyB0byBBbWF6b24gQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQVdTUGFub3JhbWFBcHBsaWFuY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Bhbm9yYW1hQXBwbGlhbmNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhbiBBV1MgUGFub3JhbWEgQXBwbGlhbmNlIHRvIHVwbG9hZCBsb2dzIHRvIEFtYXpvbiBDbG91ZFdhdGNoLCBhbmQgdG8gZ2V0IG9iamVjdHMgZnJvbSBBbWF6b24gUzMgYWNjZXNzIHBvaW50cyBjcmVhdGVkIGZvciB1c2Ugd2l0aCBBV1MgUGFub3JhbWEuICovXG4gICAgcHVibGljIEFXU1Bhbm9yYW1hQXBwbGlhbmNlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFub3JhbWFBcHBsaWFuY2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBQYW5vcmFtYSAqL1xuICAgIHB1YmxpYyBBV1NQYW5vcmFtYUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFub3JhbWFGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFuIEFXUyBMYW1iZGEgZnVuY3Rpb24gb24gYW4gQVdTIFBhbm9yYW1hIEFwcGxpYW5jZSB0byBtYW5hZ2UgcmVzb3VyY2VzIGluIFBhbm9yYW1hLCB1cGxvYWQgbG9ncyBhbmQgbWV0cmljcyB0byBBbWF6b24gQ2xvdWRXYXRjaCwgYW5kIHRvIG1hbmFnZSBvYmplY3RzIGluIGJ1Y2tldHMgY3JlYXRlZCBmb3IgdXNlIHdpdGggUGFub3JhbWEuICovXG4gICAgcHVibGljIEFXU1Bhbm9yYW1hR3JlZW5ncmFzc0dyb3VwUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQYW5vcmFtYUdyZWVuZ3Jhc3NHcm91cFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIFNhZ2VNYWtlciB0byBtYW5hZ2Ugb2JqZWN0cyBpbiBidWNrZXRzIGNyZWF0ZWQgZm9yIHVzZSB3aXRoIEFXUyBQYW5vcmFtYS4gKi9cbiAgICBwdWJsaWMgQVdTUGFub3JhbWFTYWdlTWFrZXJSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Bhbm9yYW1hU2FnZU1ha2VyUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgUGFub3JhbWEgdG8gbWFuYWdlIHJlc291cmNlcyBpbiBBV1MgSW9ULCBBV1MgU2VjcmV0cyBNYW5hZ2VyIGFuZCBBV1MgUGFub3JhbWEuICovXG4gICAgcHVibGljIEFXU1Bhbm9yYW1hU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFub3JhbWFTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgUGFub3JhbWEgdG8gbWFuYWdlIHJlc291cmNlcyBpbiBBbWF6b24gUzMsIEFXUyBJb1QsIEFXUyBJb1QgR3JlZW5HcmFzcywgQVdTIExhbWJkYSwgQW1hem9uIFNhZ2VNYWtlciwgYW5kIEFtYXpvbiBDbG91ZFdhdGNoIExvZ3MsIGFuZCB0byBwYXNzIHNlcnZpY2Ugcm9sZXMgdG8gQVdTIElvVCwgQVdTIElvVCBHcmVlbkdyYXNzLCBhbmQgQW1hem9uIFNhZ2VNYWtlci4gKi9cbiAgICBwdWJsaWMgQVdTUGFub3JhbWFTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQYW5vcmFtYVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbmVjZXNzYXJ5IGFjY2VzcyBmb3IgY2hhbm5lbCBoYW5kc2hha2UgYXBwcm92YWwgbWFuYWdlbWVudCBhY3Rpdml0aWVzLiAqL1xuICAgIHB1YmxpYyBBV1NQYXJ0bmVyQ2VudHJhbENoYW5uZWxIYW5kc2hha2VBcHByb3ZhbE1hbmFnZW1lbnQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lckNlbnRyYWxDaGFubmVsSGFuZHNoYWtlQXBwcm92YWxNYW5hZ2VtZW50KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbmVjZXNzYXJ5IGFjY2VzcyBmb3IgY2hhbm5lbCBtYW5hZ2VtZW50IGFjdGl2aXRpZXMuICovXG4gICAgcHVibGljIEFXU1BhcnRuZXJDZW50cmFsQ2hhbm5lbE1hbmFnZW1lbnQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lckNlbnRyYWxDaGFubmVsTWFuYWdlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBQYXJ0bmVyIENlbnRyYWwgYW5kIHJlbGF0ZWQgQVdTIFNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBBV1NQYXJ0bmVyQ2VudHJhbEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUGFydG5lckNlbnRyYWxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbmVjZXNzYXJ5IGFjY2VzcyBmb3IgbWFya2V0aW5nIGFjdGl2aXRpZXMuICovXG4gICAgcHVibGljIEFXU1BhcnRuZXJDZW50cmFsTWFya2V0aW5nTWFuYWdlbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQYXJ0bmVyQ2VudHJhbE1hcmtldGluZ01hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBuZWNlc3NhcnkgYWNjZXNzIGZvciBvcHBvcnR1bml0eSBtYW5hZ2VtZW50IGFjdGl2aXRpZXMuICovXG4gICAgcHVibGljIEFXU1BhcnRuZXJDZW50cmFsT3Bwb3J0dW5pdHlNYW5hZ2VtZW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BhcnRuZXJDZW50cmFsT3Bwb3J0dW5pdHlNYW5hZ2VtZW50KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgbmVjZXNzYXJ5IGFjY2VzcyBmb3IgcmV2ZW51ZSBhdHRyaWJ1dGlvbiBtYW5hZ2VtZW50IGFjdGl2aXRpZXMuICovXG4gICAgcHVibGljIEFXU1BhcnRuZXJDZW50cmFsUmV2ZW51ZUF0dHJpYnV0aW9uTWFuYWdlbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQYXJ0bmVyQ2VudHJhbFJldmVudWVBdHRyaWJ1dGlvbk1hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBuZWNlc3NhcnkgYWNjZXNzIGZvciBkZXZlbG9wZXIgdGVzdGluZyBpbiB0aGUgU2FuZGJveCBjYXRhbG9nLiAqL1xuICAgIHB1YmxpYyBBV1NQYXJ0bmVyQ2VudHJhbFNhbmRib3hGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BhcnRuZXJDZW50cmFsU2FuZGJveEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIFJlc291cmNlU25hcHNob3RKb2IgdG8gcmVhZCBhIHJlc291cmNlIGFuZCBzbmFwc2hvdCBpdCBpbiB0aGUgdGFyZ2V0IGVuZ2FnZW1lbnQuICovXG4gICAgcHVibGljIEFXU1BhcnRuZXJDZW50cmFsU2VsbGluZ1Jlc291cmNlU25hcHNob3RKb2JFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BhcnRuZXJDZW50cmFsU2VsbGluZ1Jlc291cmNlU25hcHNob3RKb2JFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgY2FuIGJlIHVzZWQgdG8gZ3JhbnQgcmVhZC1vbmx5IGFjY2VzcyB0byBBUElzIHRoYXQgY2FuIHJlYWQgc2VydmljZSBtZXRhZGF0YSBmb3Igc2VydmljZXMgaW4geW91ciBBV1MgYWNjb3VudC4gWW91IGNhbiB1c2UgdGhpcyBwb2xpY3kgdG8gcHJvdmlkZSB5b3VyIHBhcnRuZXJzIGluIHRoZSBQYXJ0bmVyLUxlZCBTdXBwb3J0IFByb2dyYW0gd2l0aCBhY2Nlc3MgdG8gdGhlIHNlcnZpY2VzIHNwZWNpZmllZCBpbiB0aGUgcGVybWlzc2lvbnMgZGV0YWlscyBzZWN0aW9uIGJlbG93LiAqL1xuICAgIHB1YmxpYyBBV1NQYXJ0bmVyTGVkU3VwcG9ydFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BhcnRuZXJMZWRTdXBwb3J0UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBQcm9TZXJ2ZSB0b29scy4gKi9cbiAgICBwdWJsaWMgQVdTUGFydG5lclByb1NlcnZlVG9vbHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BhcnRuZXJQcm9TZXJ2ZVRvb2xzRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBjcmVhdGUgYW5kIG1hbmFnZSBvd24gYXNzZXNzbWVudHMgaW4gUHJvU2VydmUgdG9vbHMuICovXG4gICAgcHVibGljIEFXU1BhcnRuZXJQcm9TZXJ2ZVRvb2xzSW5kaXZpZHVhbENvbnRyaWJ1dG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BhcnRuZXJQcm9TZXJ2ZVRvb2xzSW5kaXZpZHVhbENvbnRyaWJ1dG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBhY2Nlc3MgdG8gb3JnYW5pemF0aW9uYWwgYXNzZXNzbWVudHMgd2l0aCBhYmlsaXR5IHRvIG1hbmFnZSBvd24gYXNzZXNzbWVudHMuICovXG4gICAgcHVibGljIEFXU1BhcnRuZXJQcm9TZXJ2ZVRvb2xzT3JnYW5pemF0aW9uUmVhZGVySW5kaXZpZHVhbENvbnRyaWJ1dG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BhcnRuZXJQcm9TZXJ2ZVRvb2xzT3JnYW5pemF0aW9uUmVhZGVySW5kaXZpZHVhbENvbnRyaWJ1dG9yKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb24gdG8gQVdTIFBDUyBjb21wdXRlIG5vZGVzIHRvIGNvbm5lY3QgdG8gQVdTIFBDUyBjbHVzdGVycy4gKi9cbiAgICBwdWJsaWMgQVdTUENTQ29tcHV0ZU5vZGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUENTQ29tcHV0ZU5vZGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gUENTIHRvIG1hbmFnZSByZXNvdXJjZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU1BDU1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1BDU1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFByaWNlIExpc3QgU2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTUHJpY2VMaXN0U2VydmljZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJpY2VMaXN0U2VydmljZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhdWRpdG9yIGFjY2VzcyB0byBBV1MgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKi9cbiAgICBwdWJsaWMgQVdTUHJpdmF0ZUNBQXVkaXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcml2YXRlQ0FBdWRpdG9yKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGVzc2VudGlhbCBwZXJtaXNzaW9ucyBmb3IgdGhlIEFXUyBQcml2YXRlIENBIENvbm5lY3RvciBmb3IgS3ViZXJuZXRlcy4gKi9cbiAgICBwdWJsaWMgQVdTUHJpdmF0ZUNBQ29ubmVjdG9yRm9yS3ViZXJuZXRlc1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcml2YXRlQ0FDb25uZWN0b3JGb3JLdWJlcm5ldGVzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5ICovXG4gICAgcHVibGljIEFXU1ByaXZhdGVDQUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJpdmF0ZUNBRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHByaXZpbGVnZWQgY2VydGlmaWNhdGUgdXNlciBhY2Nlc3MgdG8gQVdTIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5ICovXG4gICAgcHVibGljIEFXU1ByaXZhdGVDQVByaXZpbGVnZWRVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ByaXZhdGVDQVByaXZpbGVnZWRVc2VyKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBV1MgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKi9cbiAgICBwdWJsaWMgQVdTUHJpdmF0ZUNBUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJpdmF0ZUNBUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjZXJ0aWZpY2F0ZSB1c2VyIGFjY2VzcyB0byBBV1MgUHJpdmF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKi9cbiAgICBwdWJsaWMgQVdTUHJpdmF0ZUNBVXNlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcml2YXRlQ0FVc2VyKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gYWxsIGFkbWluaXN0cmF0aXZlIGFjdGlvbnMgZm9yIGFuIEFXUyBQcml2YXRlIE1hcmtldHBsYWNlLiAqL1xuICAgIHB1YmxpYyBBV1NQcml2YXRlTWFya2V0cGxhY2VBZG1pbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJpdmF0ZU1hcmtldHBsYWNlQWRtaW5GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGNyZWF0aW5nIHJlcXVlc3RzIGluIGFuIEFXUyBQcml2YXRlIE1hcmtldHBsYWNlLiAqL1xuICAgIHB1YmxpYyBBV1NQcml2YXRlTWFya2V0cGxhY2VSZXF1ZXN0cygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcml2YXRlTWFya2V0cGxhY2VSZXF1ZXN0cyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgUHJpdmF0ZSBOZXR3b3JrcyBTZXJ2aWNlIHRvIG1hbmFnZSByZXNvdXJjZXMgb24gYmVoYWxmIG9mIHRoZSBjdXN0b21lci4gKi9cbiAgICBwdWJsaWMgQVdTUHJpdmF0ZU5ldHdvcmtzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJpdmF0ZU5ldHdvcmtzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyBDb2RlQnVpbGQgbmVlZHMgdG8gcnVuIGEgYnVpbGQgZm9yIEFXUyBQcm90b24gQ29kZUJ1aWxkIFByb3Zpc2lvbmluZy4gKi9cbiAgICBwdWJsaWMgQVdTUHJvdG9uQ29kZUJ1aWxkUHJvdmlzaW9uaW5nQmFzaWNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJvdG9uQ29kZUJ1aWxkUHJvdmlzaW9uaW5nQmFzaWNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIFByb3RvbiB0byBtYW5hZ2UgUHJvdG9uIHJlc291cmNlIHByb3Zpc2lvbmluZyB1c2luZyBDb2RlQnVpbGQgYW5kIG90aGVyIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTUHJvdG9uQ29kZUJ1aWxkUHJvdmlzaW9uaW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUHJvdG9uQ29kZUJ1aWxkUHJvdmlzaW9uaW5nU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIEFXUyBQcm90b24gQVBJcyBhbmQgTWFuYWdlbWVudCBDb25zb2xlLCBidXQgZG9lcyBub3QgYWxsb3cgYWRtaW5pc3RyYXRpb24gb2YgUHJvdG9uIHRlbXBsYXRlcyBvciBlbnZpcm9ubWVudHMuICovXG4gICAgcHVibGljIEFXU1Byb3RvbkRldmVsb3BlckFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcm90b25EZXZlbG9wZXJBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB0aGUgQVdTIFByb3RvbiBBUElzIGFuZCBNYW5hZ2VtZW50IENvbnNvbGUuIEluIGFkZGl0aW9uIHRvIHRoZXNlIHBlcm1pc3Npb25zLCBhY2Nlc3MgdG8gQW1hem9uIFMzIGlzIGFsc28gbmVlZGVkIHRvIHJlZ2lzdGVyIHRlbXBsYXRlIGJ1bmRsZXMgZnJvbSB5b3VyIFMzIGJ1Y2tldHMsIGFzIHdlbGwgYXMgYWNjZXNzIHRvIEFtYXpvbiBJQU0gdG8gY3JlYXRlIGFuZCBtYW5hZ2UgdGhlIHNlcnZpY2Ugcm9sZXMgZm9yIFByb3Rvbi4gKi9cbiAgICBwdWJsaWMgQVdTUHJvdG9uRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcm90b25GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byB0aGUgQVdTIFByb3RvbiBBUElzIGFuZCBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU1Byb3RvblJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Byb3RvblJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHdoaWNoIGFsbG93cyBBV1MgUHJvdG9uIHRvIHN5bmMgeW91ciBzZXJ2aWNlLCBlbnZpcm9ubWVudCBhbmQgY29tcG9uZW50IGRlZmluaXRpb25zIGZyb20geW91ciBnaXQgcmVwb3NpdG9yeSB0byBBV1MgUHJvdG9uLiAqL1xuICAgIHB1YmxpYyBBV1NQcm90b25TZXJ2aWNlR2l0U3luY1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Byb3RvblNlcnZpY2VHaXRTeW5jU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgd2hpY2ggYWxsb3dzIEFXUyBQcm90b24gdG8gc3luYyB5b3VyIGdpdCByZXBvc2l0b3J5IGNvbnRlbnRzIHRvIFByb3RvbiBvciBzeW5jIFByb3RvbiBjb250ZW50cyB0byB5b3VyIGdpdCByZXBvc2l0b3JpZXMuICovXG4gICAgcHVibGljIEFXU1Byb3RvblN5bmNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQcm90b25TeW5jU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gdmlldyBhbmQgbW9kaWZ5IHB1cmNoYXNlIG9yZGVycyBvbiBiaWxsaW5nIGNvbnNvbGUgKi9cbiAgICBwdWJsaWMgQVdTUHVyY2hhc2VPcmRlcnNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NQdXJjaGFzZU9yZGVyc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIEFXU1F1aWNrU2V0dXBDRkdDUGFja3NQZXJtaXNzaW9uc0JvdW5kYXJ5IHBvbGljeSBkZWZpbmVzIHRoZSBsaXN0IG9mIHBlcm1pc3Npb25zIHRoYXQgYXJlIHBlcm1pdHRlZCBpbiBhbiBJQU0gcm9sZSBjcmVhdGVkIGJ5IFF1aWNrIFNldHVwLiBRdWljayBTZXR1cCB1c2VzIGEgcm9sZSBjcmVhdGVkIHdpdGggdGhpcyBwb2xpY3kgdG8gZGVwbG95IEFXUyBDb25maWcgY29uZm9ybWFuY2UgcGFja3MuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBDRkdDUGFja3NQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBDRkdDUGFja3NQZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIEFXUyBTeXN0ZW1zIE1hbmFnZXIgUXVpY2sgU2V0dXAgdG8gZGVwbG95IG11bHRpcGxlIGNvbmZpZ3VyYXRpb24gdHlwZXMuIFRoZXNlIGNvbmZpZ3VyYXRpb24gdHlwZXMgY3JlYXRlIElBTSByb2xlcyBhbmQgYXV0b21hdGlvbnMgdGhhdCBjb25maWd1cmUgZnJlcXVlbnRseSB1c2VkIEFtYXpvbiBXZWIgU2VydmljZXMgc2VydmljZXMgYW5kIGZlYXR1cmVzIHdpdGggcmVjb21tZW5kZWQgYmVzdCBwcmFjdGljZXMuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBEZXBsb3ltZW50Um9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwRGVwbG95bWVudFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgQVdTUXVpY2tTZXR1cERldk9wc0d1cnVQZXJtaXNzaW9uc0JvdW5kYXJ5IHBvbGljeSBkZWZpbmVzIHRoZSBsaXN0IG9mIHBlcm1pc3Npb25zIHRoYXQgYXJlIHBlcm1pdHRlZCBpbiBhbiBJQU0gcm9sZSBjcmVhdGVkIGJ5IFF1aWNrIFNldHVwLiBRdWljayBTZXR1cCB1c2VzIGEgcm9sZSBjcmVhdGVkIHdpdGggdGhpcyBwb2xpY3kgdG8gZW5hYmxlIGFuZCBjb25maWd1cmUgQW1hem9uIERldk9wcyBHdXJ1LiBUaGlzIHBvbGljeSBhbHNvIHByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGVuYWJsZSBTeXN0ZW1zIE1hbmFnZXIgRXhwbG9yZXIuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBEZXZPcHNHdXJ1UGVybWlzc2lvbnNCb3VuZGFyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwRGV2T3BzR3VydVBlcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBRdWlja1NldHVwIGNyZWF0ZXMgSUFNIHJvbGVzIHdoaWNoIGVuYWJsZSBpdCB0byBjb25maWd1cmUgdGhlIFN5c3RlbXMgTWFuYWdlciBEaXN0cmlidXRvciBmZWF0dXJlIG9uIHlvdXIgYmVoYWxmLCBhbmQgdXNlcyB0aGlzIHBvbGljeSB3aGVuIGNyZWF0aW5nIHN1Y2ggcm9sZXMgdG8gZGVmaW5lIHRoZSBib3VuZGFyeSBvZiB0aGVpciBwZXJtaXNzaW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cERpc3RyaWJ1dG9yUGVybWlzc2lvbnNCb3VuZGFyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwRGlzdHJpYnV0b3JQZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRoYXQgYWxsb3cgU3lzdGVtcyBNYW5hZ2VyIHRvIHJ1biB0aGUgQVdTUXVpY2tTZXR1cFR5cGUtRW5hYmxlQVJFWCBBdXRvbWF0aW9uIHJ1bmJvb2ssIHdoaWNoIGVuYWJsZXMgQVdTIFJlc291cmNlIEV4cGxvcmVyIGZvciB1c2Ugd2l0aCBTeXN0ZW1zIE1hbmFnZXIuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBFbmFibGVBUkVYRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBFbmFibGVBUkVYRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRoYXQgYWxsb3cgcHJpbmNpcGFscyB0byBydW4gdGhlIEFXU1F1aWNrU2V0dXBUeXBlLUVuYWJsZURITUMgQXV0b21hdGlvbiBydW5ib29rLCB3aGljaCBlbmFibGVzIERlZmF1bHQgSG9zdCBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24uICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBFbmFibGVESE1DRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBFbmFibGVESE1DRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIFF1aWNrIFNldHVwIHRvIGRlcGxveSB0aGUgY29uZmlndXJhdGlvbiB0eXBlIHJlcXVpcmVkIHRvIHNldCB1cCBqdXN0LWluLXRpbWUgbm9kZSBhY2Nlc3MuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBKSVROQURlcGxveW1lbnRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBKSVROQURlcGxveW1lbnRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zIHRoYXQgYWxsb3cgU3lzdGVtcyBNYW5hZ2VyIHRvIGNyZWF0ZSBhIGRlZmF1bHQgSUFNIGluc3RhbmNlIHByb2ZpbGUgZm9yIHRoZSBRdWljayBTZXR1cCBjYXBhYmlsaXR5IGFuZCBhdHRhY2ggaXQgdG8gQW1hem9uIEVDMiBpbnN0YW5jZXMgdGhhdCBkb24ndCBhbHJlYWR5IGhhdmUgYW4gaW5zdGFuY2UuIHByb2ZpbGUgYXR0YWNoZWQuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBNYW5hZ2VkSW5zdGFuY2VQcm9maWxlRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBNYW5hZ2VkSW5zdGFuY2VQcm9maWxlRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgcHJvdmlkZXMgcGVybWlzc2lvbnMgdG8gZW5hYmxlIGp1c3QtaW4tdGltZSBub2RlIGFjY2VzcyBmb3IgU3lzdGVtcyBNYW5hZ2VyLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwTWFuYWdlSklUTkFSZXNvdXJjZXNFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cE1hbmFnZUpJVE5BUmVzb3VyY2VzRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIHRvIGFjY2VzcyBwYXRjaCBiYXNlbGluZXMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZCBieSBhbiBhZG1pbmlzdHJhdG9yIGluIHRoZSBjdXJyZW50IEFXUyBhY2NvdW50IG9yIG9yZ2FuaXphdGlvbiB1c2luZyBRdWljayBTZXR1cC4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cFBhdGNoUG9saWN5QmFzZWxpbmVBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cFBhdGNoUG9saWN5QmFzZWxpbmVBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IFF1aWNrIFNldHVwIHRvIGNyZWF0ZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgcGF0Y2ggcG9saWN5IGNvbmZpZ3VyYXRpb24uICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBQYXRjaFBvbGljeURlcGxveW1lbnRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBQYXRjaFBvbGljeURlcGxveW1lbnRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIG1hbmFnZSBTdGF0ZSBNYW5hZ2VyIGFzc29jaWF0aW9ucyBmb3IgYXV0b21hdGVkIGNsZWFudXAgb3BlcmF0aW9ucyB3aGVuIFF1aWNrIFNldHVwIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWxldGVkLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwUGF0Y2hQb2xpY3lMYW1iZGFFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cFBhdGNoUG9saWN5TGFtYmRhRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUXVpY2tTZXR1cCBjcmVhdGVzIElBTSByb2xlcyB3aGljaCBlbmFibGUgaXQgdG8gY29uZmlndXJlIHRoZSBTeXN0ZW1zIE1hbmFnZXIgUGF0Y2ggTWFuYWdlciBmZWF0dXJlIG9uIHlvdXIgYmVoYWxmLCBhbmQgdXNlcyB0aGlzIHBvbGljeSB3aGVuIGNyZWF0aW5nIHN1Y2ggcm9sZXMgdG8gZGVmaW5lIHRoZSBib3VuZGFyeSBvZiB0aGVpciBwZXJtaXNzaW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cFBhdGNoUG9saWN5UGVybWlzc2lvbnNCb3VuZGFyeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwUGF0Y2hQb2xpY3lQZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIHRyYWNrIHdoaWNoIGluc3RhbmNlcyBhcmUgbWFuYWdlZCBieSBRdWljayBTZXR1cCBwYXRjaCBwb2xpY3kgY29uZmlndXJhdGlvbnMgdGhyb3VnaCBhdXRvbWF0ZWQgdGFnZ2luZyBhbmQgaW52ZW50b3J5IGNvbGxlY3Rpb24uICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBQYXRjaFBvbGljeVRhZ01hbmFnZW1lbnRFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cFBhdGNoUG9saWN5VGFnTWFuYWdlbWVudEV4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBBV1NRdWlja1NldHVwU2NoZWR1bGVyUGVybWlzc2lvbnNCb3VuZGFyeSBwb2xpY3kgZGVmaW5lcyB0aGUgbGlzdCBvZiBwZXJtaXNzaW9ucyB0aGF0IGFyZSBwZXJtaXR0ZWQgaW4gYW4gSUFNIHJvbGUgY3JlYXRlZCBieSBRdWljayBTZXR1cC4gUXVpY2sgU2V0dXAgdXNlcyBhIHJvbGUgY3JlYXRlZCB3aXRoIHRoaXMgcG9saWN5IHRvIGVuYWJsZSBhbmQgY29uZmlndXJlIHNjaGVkdWxlZCBvcGVyYXRpb25zIG9uIEFtYXpvbiBFQzIgaW5zdGFuY2VzIGFuZCBvdGhlciByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBTY2hlZHVsZXJQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBTY2hlZHVsZXJQZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGFkbWluaXN0cmF0aXZlIHBlcm1zc2lvbnMgdGhhdCBhbGxvdyBRdWljayBTZXR1cCB0byBjcmVhdGUgcmVzb3VyY2VzIHRoYXQgYXJlIHVzZWQgZHVyaW5nIHRoZSBTeXN0ZW1zIE1hbmFnZXIgb25ib2FyZGluZyBwcm9jZXNzLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwU1NNRGVwbG95bWVudFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cFNTTURlcGxveW1lbnRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIGZvciBsaXN0aW5nIGFsbCBTMyBidWNrZXRzIGluIGFuIGFjY291bnQ7IGFuZCBmb3IgbWFuYWdpbmcgYW5kIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gYWJvdXQgc3BlY2lmaWMgYnVja2V0cyBpbiB0aGUgcHJpbmNpcGFsIGFjY291bnQgdGhhdCBhcmUgbWFuYWdlZCB0aHJvdWdoIEFXUyBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZXMuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBTU01EZXBsb3ltZW50UzNCdWNrZXRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBTU01EZXBsb3ltZW50UzNCdWNrZXRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUXVpY2sgU2V0dXAgY3JlYXRlcyBJQU0gcm9sZXMgd2hpY2ggZW5hYmxlIGl0IHRvIGNvbmZpZ3VyZSB0aGUgSG9zdCBNYW5hZ2VyIFF1aWNrIFNldHVwIHR5cGUgb24geW91ciBiZWhhbGYsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgc3VjaCByb2xlcyB0byBkZWZpbmUgdGhlIGJvdW5kYXJ5IG9mIHRoZWlyIHBlcm1pc3Npb25zLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwU1NNSG9zdE1nbXRQZXJtaXNzaW9uc0JvdW5kYXJ5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBTU01Ib3N0TWdtdFBlcm1pc3Npb25zQm91bmRhcnkpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgcG9saWN5IGdyYW50cyBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IFF1aWNrIFNldHVwIHRvIHJ1biB0aGUgYSBBV1MgQ2xvdWRGb3JtYXRpb24gY3VzdG9tIHJlc291cmNlIG9uIGxpZmVjeWNsZSBldmVudHMgZHVyaW5nIFF1aWNrIFNldHVwIGRlcGxveW1lbnQgaW4gU3lzdGVtcyBNYW5hZ2VyLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NldHVwU1NNTGlmZWN5Y2xlTWFuYWdlbWVudEV4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NldHVwU1NNTGlmZWN5Y2xlTWFuYWdlbWVudEV4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IFN5c3RlbXMgTWFuYWdlciB0byBjcmVhdGUgcHJlcmVxdWlzaXRlcyBzdWNoIGFzIElBTSByb2xlcyByZXF1aXJlZCBmb3IgU3lzdGVtcyBNYW5hZ2VyIG9uYm9hcmRpbmcuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBTU01NYW5hZ2VSZXNvdXJjZXNFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cFNTTU1hbmFnZVJlc291cmNlc0V4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0aGF0IGFsbG93IHByaW5jaXBhbHMgdG8gcnVuIHRoZSBBV1NRdWlja1NldHVwVHlwZS1TdGFydFNTTUFzc29jaWF0aW9ucyBBdXRvbWF0aW9uIHJ1bmJvb2ssIHdoaWNoIHN0YXJ0cyBTdGF0ZSBNYW5hZ2VyIEFzc29jaWF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTZXR1cFN0YXJ0U1NNQXNzb2NpYXRpb25zRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2V0dXBTdGFydFNTTUFzc29jaWF0aW9uc0V4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBtYW5hZ2VkIHBvbGljeSBBV1NRdWlja1NldHVwU3RhcnRTdG9wSW5zdGFuY2VzRXhlY3V0aW9uUG9saWN5IHByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBRdWljayBTZXR1cCB0byBzdGFydCBhbmQgc3RvcCBBbWF6b24gRUMyIGluc3RhbmNlcyBvbiBhIHNjaGVkdWxlLiBUaGlzIHBvbGljeSBpcyB1c2VkIHdpdGggdGhlIFF1aWNrIFNldHVwIHNjaGVkdWxlciBjb25maWd1cmF0aW9uIHR5cGUuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2V0dXBTdGFydFN0b3BJbnN0YW5jZXNFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTZXR1cFN0YXJ0U3RvcEluc3RhbmNlc0V4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBzZXQgb2YgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gcGVyZm9ybSBRdWlja1NpZ2h0IEFzc2V0IEJ1bmRsZSBFeHBvcnQgT3BlcmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NpZ2h0QXNzZXRCdW5kbGVFeHBvcnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTaWdodEFzc2V0QnVuZGxlRXhwb3J0UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdGhlIHNldCBvZiBwZXJtaXNzaW9ucyByZXF1aXJlZCB0byBwZXJmb3JtIFF1aWNrU2lnaHQgQXNzZXQgQnVuZGxlIEltcG9ydCBPcGVyYXRpb25zICovXG4gICAgcHVibGljIEFXU1F1aWNrU2lnaHRBc3NldEJ1bmRsZUltcG9ydFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0QXNzZXRCdW5kbGVJbXBvcnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBRdWlja3NpZ2h0IGFjY2VzcyB0byBBdGhlbmEgQVBJIGFuZCBTMyBidWNrZXRzIHVzZWQgZm9yIEF0aGVuYSBxdWVyeSByZXN1bHRzICovXG4gICAgcHVibGljIEFXU1F1aWNrc2lnaHRBdGhlbmFBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tzaWdodEF0aGVuYUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IFF1aWNrU2lnaHQgdG8gZGVzY3JpYmUgdGhlIFJEUyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTaWdodERlc2NyaWJlUkRTKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2lnaHREZXNjcmliZVJEUyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IFF1aWNrU2lnaHQgdG8gZGVzY3JpYmUgUmVkc2hpZnQgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU1F1aWNrU2lnaHREZXNjcmliZVJlZHNoaWZ0KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2lnaHREZXNjcmliZVJlZHNoaWZ0KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFtYXpvbiBFbGFzdGljc2VhcmNoIHJlc291cmNlcyBmcm9tIEFtYXpvbiBRdWlja1NpZ2h0ICovXG4gICAgcHVibGljIEFXU1F1aWNrU2lnaHRFbGFzdGljc2VhcmNoUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2lnaHRFbGFzdGljc2VhcmNoUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR2l2ZSBRdWlja1NpZ2h0IHJlYWQtb25seSBhY2Nlc3MgdG8gSW9UIEFuYWx5dGljcyBkYXRhc2V0cyAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NpZ2h0SW9UQW5hbHl0aWNzQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2lnaHRJb1RBbmFseXRpY3NBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBRdWlja1NpZ2h0IHRvIGxpc3QgSUFNIGVudGl0aWVzICovXG4gICAgcHVibGljIEFXU1F1aWNrU2lnaHRMaXN0SUFNKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2lnaHRMaXN0SUFNKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFtYXpvbiBPcGVuU2VhcmNoIHJlc291cmNlcyBmcm9tIEFtYXpvbiBRdWlja1NpZ2h0ICovXG4gICAgcHVibGljIEFXU1F1aWNrc2lnaHRPcGVuU2VhcmNoUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrc2lnaHRPcGVuU2VhcmNoUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFtYXpvbiBTYWdlTWFrZXIgcmVzb3VyY2VzIGZyb20gQW1hem9uIFF1aWNrU2lnaHQgKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTaWdodFNhZ2VNYWtlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0U2FnZU1ha2VyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHVzZWQgYnkgUXVpY2tTaWdodCB0byBjcmVhdGUgc2VjcmV0cyBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyIGFuZCB0byBhdHRhY2ggcmVzb3VyY2UgcG9saWNpZXMgb24gZXhpc3RpbmcgUXVpY2tTaWdodCBzZWNyZXRzLiAqL1xuICAgIHB1YmxpYyBBV1NRdWlja1NpZ2h0U2VjcmV0c01hbmFnZXJXcml0ZUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NRdWlja1NpZ2h0U2VjcmV0c01hbmFnZXJXcml0ZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB1c2VkIGJ5IFF1aWNrU2lnaHQgdG8gY3JlYXRlIHNlY3JldHMgaW4gQVdTIFNlY3JldHMgTWFuYWdlciBhbmQgdG8gYXR0YWNoIHJlc291cmNlIHBvbGljaWVzIG9uIGV4aXN0aW5nIFF1aWNrU2lnaHQgc2VjcmV0cy4gKi9cbiAgICBwdWJsaWMgQVdTUXVpY2tTaWdodFNlY3JldHNNYW5hZ2VyV3JpdGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUXVpY2tTaWdodFNlY3JldHNNYW5hZ2VyV3JpdGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBV1MgUXVpY2tTaWdodCBhY2Nlc3MgdG8gQVdTIFRpbWVzdHJlYW0gQVBJcy4gQ3VzdG9tZXJzIGNhbiBhdHRhY2ggdGhpcyBwb2xpY3kgdG8gQVdTIFF1aWNrU2lnaHQgcm9sZSB0byBhbGxvdyByZXRyaWV2YWwgb2YgZGF0YSBhbmQgbWV0YWRhdGEuICovXG4gICAgcHVibGljIEFXU1F1aWNrU2lnaHRUaW1lc3RyZWFtUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1F1aWNrU2lnaHRUaW1lc3RyZWFtUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFZQQyBSZWFjaGFiaWxpdHkgQW5hbHl6ZXIgdG8gYWNjZXNzIEFXUyByZXNvdXJjZXMgYW5kIGludGVncmF0ZSB3aXRoIEFXUyBPcmdhbml6YXRpb25zIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NSZWFjaGFiaWxpdHlBbmFseXplclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1JlYWNoYWJpbGl0eUFuYWx5emVyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbiB0byB1c2UgQVdTIHNlcnZpY2VzIHdpdGggdGhlIEFXUyBUb29sa2l0IGZvciAuTkVUIFJlZmFjdG9yaW5nIGV4dGVuc2lvbiBmb3IgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8uIEl0IGlzIGludGVuZGVkIHRvIGJlIGF0dGFjaGVkIHRvIGEgbG9jYWwgQVdTIHByb2ZpbGUuIFRoZSBwb2xpY3kgYWxsb3dzIHVwbG9hZGluZyBhcHBsaWNhdGlvbiBhcnRpZmFjdHMgYW5kIGRvd25sb2FkaW5nIHRoZSByZXN1bHRpbmcgYXJ0aWZhY3RzIGZyb20gQW1hem9uIFMzLiBJdCBhbGxvd3MgYnVpbGRpbmcgYXBwbGljYXRpb25zIGludG8gYSBjb250YWluZXIgaW1hZ2UgdXNpbmcgQVdTIENvZGVCdWlsZCBhbmQgc3RvcmluZyBhbmQgcmV0cmlldmluZyB0aGUgaW1hZ2VzIGZyb20gQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFJlZ2lzdHJ5IChBbWF6b24gRUNSKS4gQW5kIGl0IGFsbG93cyBkZXBsb3ltZW50IG9mIHRoZSBhcHBsaWNhdGlvbiB0byBjb250YWluZXIgc2VydmljZXMgb24gQVdTIHN1Y2ggYXMgQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgKEFtYXpvbiBFQ1MpLCBvcHRpb25hbCBjcmVhdGlvbiBvZiBWUEMgcmVzb3VyY2VzLCBvcHRpb25hbCBjb25uZWN0aW9uIHRvIGV4aXN0aW5nIGluZnJhc3RydWN0dXJlIHN1Y2ggYXMgQVdTIERpcmVjdG9yeSBTZXJ2aWNlLCBhbmQgb3RoZXIgcmVsYXRlZCBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTUmVmYWN0b3JpbmdUb29sa2l0RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZWZhY3RvcmluZ1Rvb2xraXRGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBBbWF6b24gRUNTIFRhc2tzIGNyZWF0ZWQgZm9yIHRlc3RpbmcgYXBwbGljYXRpb25zIGluIEFXUyB1c2luZyB0aGUgQVdTIFRvb2xraXQgZm9yIC5ORVQgUmVmYWN0b3JpbmcgZXh0ZW5zaW9uIGZvciBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpby4gVGhlIHBvbGljeSBncmFudHMgYWNjZXNzIHRvIGRvd25sb2FkIGFwcGxpY2F0aW9uIGFydGlmYWN0cyBmcm9tIEFtYXpvbiBTMywgY29tbXVuaWNhdGUgdGhlIHN0YXR1cyBvZiB0aGUgVGFzayB1c2luZyBBV1MgU3lzdGVtcyBNYW5hZ2VyLCBhbmQgb3RoZXIgcmVxdWlyZWQgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU1JlZmFjdG9yaW5nVG9vbGtpdFNpZGVjYXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVmYWN0b3JpbmdUb29sa2l0U2lkZWNhclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlOlBvc3QgUHJpdmF0ZSBhY2Nlc3MgdG8gcHVibGlzaCBDbG91ZFdhdGNoIG1ldHJpY3MgZGF0YSAqL1xuICAgIHB1YmxpYyBBV1NyZVBvc3RQcml2YXRlQ2xvdWRXYXRjaEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NyZVBvc3RQcml2YXRlQ2xvdWRXYXRjaEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyB0aGUgcmU6UG9zdCBTcGFjZSBzZXJ2aWNlIHRvIGNyZWF0ZSwgbWFuYWdlLCBhbmQgcmVzb2x2ZSBTdXBwb3J0IGNhc2VzIHRoYXQgYXJlIGNyZWF0ZWQgdGhyb3VnaCB0aGUgU3BhY2UgYXBwbGljYXRpb24uICovXG4gICAgcHVibGljIEFXU1JlcG9zdFNwYWNlU3VwcG9ydE9wZXJhdGlvbnNQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVwb3N0U3BhY2VTdXBwb3J0T3BlcmF0aW9uc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIFJlc2lsaWVuY2UgSHViIHNlcnZpY2Ugcm9sZSB3aGljaCBhbGxvd3MgYWNjZXNzIHRvIG90aGVyIEFXUyBzZXJ2aWNlcyBpbiBvcmRlciB0byBleGVjdXRlIGFzc2Vzc21lbnQuICovXG4gICAgcHVibGljIEFXU1Jlc2lsaWVuY2VIdWJBc3NzZXNzbWVudEV4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXNpbGllbmNlSHViQXNzc2Vzc21lbnRFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIEFXUyBSZXNpbGllbmNlIEh1YiBzZXJ2aWNlIHJvbGUgd2hpY2ggYWxsb3dzIGFjY2VzcyB0byBBV1MgRmF1bHQgSW5qZWN0aW9uIFNlcnZpY2UgaW4gb3JkZXIgdG8gc3RhcnQgcmVzaWxpZW5jZSB0ZXN0aW5nLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNpbGllbmNlSHViUmVzaWxpZW5jZVRlc3RpbmdQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzaWxpZW5jZUh1YlJlc2lsaWVuY2VUZXN0aW5nUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBSZXNpbGllbmNlIEh1YiB0byBhY2Nlc3MgcmVzb3VyY2VzIGluIHlvdXIgYWNjb3VudCBmb3IgcmVzaWxpZW5jZSBkaXNjb3ZlcnksIGFzc2Vzc21lbnQsIGFuZCBtYW5hZ2VtZW50LiAqL1xuICAgIHB1YmxpYyBBV1NSZXNpbGllbmNlSHViU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzaWxpZW5jZUh1YlNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBSZXNpbGllbmNlIEh1YiB0byBhY2Nlc3MgcmVzb3VyY2VzIGluIHlvdXIgYWNjb3VudCBmb3IgcmVzaWxpZW5jZSBkaXNjb3ZlcnksIGFzc2Vzc21lbnQsIGFuZCBtYW5hZ2VtZW50LiBUaGlzIHBvbGljeSBncmFudHMgd2lsZGNhcmRlZCByZWFkLW9ubHkgcGVybWlzc2lvbnMgdGhhdCBtYXkgaW5jbHVkZSBzZW5zaXRpdmUgaW5mb3JtYXRpb24gaW4gdGhlIG91dHB1dC4gKi9cbiAgICBwdWJsaWMgQVdTUmVzaWxpZW5jZUh1YlYyQXNzZXNzbWVudEV4ZWN1dGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXNpbGllbmNlSHViVjJBc3Nlc3NtZW50RXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFJlc291cmNlIEFjY2VzcyBNYW5hZ2VyICovXG4gICAgcHVibGljIEFXU1Jlc291cmNlQWNjZXNzTWFuYWdlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzb3VyY2VBY2Nlc3NNYW5hZ2VyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIFJlc291cmNlIEFjY2VzcyBNYW5hZ2VyLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUFjY2Vzc01hbmFnZXJSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXNvdXJjZUFjY2Vzc01hbmFnZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgUmVzb3VyY2UgQWNjZXNzIE1hbmFnZXIgQVBJcyBuZWVkZWQgYnkgYSByZXNvdXJjZSBzaGFyZSBwYXJ0aWNpcGFudC4gKi9cbiAgICBwdWJsaWMgQVdTUmVzb3VyY2VBY2Nlc3NNYW5hZ2VyUmVzb3VyY2VTaGFyZVBhcnRpY2lwYW50QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Jlc291cmNlQWNjZXNzTWFuYWdlclJlc291cmNlU2hhcmVQYXJ0aWNpcGFudEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBjb250YWluaW5nIFJlYWQtb25seSBBV1MgUmVzb3VyY2UgQWNjZXNzIE1hbmFnZXIgYWNjZXNzIHRvIGN1c3RvbWVycycgT3JnYW5pemF0aW9ucyBzdHJ1Y3R1cmUuIEl0IGFsc28gY29udGFpbnMgSUFNIHBlcm1pc3Npb25zIHRvIHNlbGYtZGVsZXRlIHRoZSByb2xlLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUFjY2Vzc01hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXNvdXJjZUFjY2Vzc01hbmFnZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgUmVzb3VyY2UgRXhwbG9yZXIgcmVzb3VyY2VzIGFuZCBncmFudHMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIHRvIG90aGVyIEFXUyBzZXJ2aWNlcyB0byBzdXBwb3J0IHRoaXMgYWNjZXNzLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUV4cGxvcmVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXNvdXJjZUV4cGxvcmVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBhZG1pbmlzdHJhdGl2ZSBwZXJtaXNzaW9ucyB0byBSZXNvdXJjZSBFeHBsb3JlciBhbmQgZ3JhbnRzIHJlYWQtb25seSBwZXJtaXNzaW9ucyB0byBvdGhlciBBV1Mgc2VydmljZXMgdG8gc3VwcG9ydCB0aGlzIGFjY2Vzcy4gVGhlIEFXUyBPcmdhbml6YXRpb25zIGFkbWluaXN0cmF0b3IgbmVlZHMgdGhlc2UgcGVybWlzc2lvbnMgdG8gc2V0dXAgYW5kIG1hbmFnZSBtdWx0aS1hY2NvdW50IHNlYXJjaCBpbiB0aGUgY29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTUmVzb3VyY2VFeHBsb3Jlck9yZ2FuaXphdGlvbnNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzb3VyY2VFeHBsb3Jlck9yZ2FuaXphdGlvbnNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIHRvIHNlYXJjaCBmb3IgYW5kIHZpZXcgUmVzb3VyY2UgRXhwbG9yZXIgcmVzb3VyY2VzIGFuZCBncmFudHMgcmVhZC1vbmx5IHBlcm1pc3Npb25zIHRvIG90aGVyIEFXUyBzZXJ2aWNlcyB0byBzdXBwb3J0IHRoaXMgYWNjZXNzLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUV4cGxvcmVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzb3VyY2VFeHBsb3JlclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFJlc291cmNlIEV4cGxvcmVyIHRvIHZpZXcgcmVzb3VyY2VzIGFuZCBDbG91ZFRyYWlsIGV2ZW50cyBvbiB5b3VyIGJlaGFsZiB0byBpbmRleCB5b3VyIHJlc291cmNlcyBmb3Igc2VhcmNoLiAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUV4cGxvcmVyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUmVzb3VyY2VFeHBsb3JlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBpcyB0aGUgcmVhZCBvbmx5IHBvbGljeSBmb3IgQVdTIFJlc291cmNlIEdyb3VwcyAqL1xuICAgIHB1YmxpYyBBV1NSZXNvdXJjZUdyb3Vwc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1Jlc291cmNlR3JvdXBzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBuZWNlc3NhcnkgYWNjZXNzIGZvciByZXZlbnVlIGF0dHJpYnV0aW9uIG1hbmFnZW1lbnQgYWN0aXZpdGllcy4gKi9cbiAgICBwdWJsaWMgQVdTUmV2ZW51ZUF0dHJpYnV0aW9uTWFuYWdlbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSZXZlbnVlQXR0cmlidXRpb25NYW5hZ2VtZW50KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFJvYm9NYWtlciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIFNESy4gQWxzbyBwcm92aWRlcyBzZWxlY3QgYWNjZXNzIHRvIHJlbGF0ZWQgc2VydmljZXMgKGUuZy4sIFMzLCBJQU0pLiAqL1xuICAgIHB1YmxpYyBBV1NSb2JvTWFrZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1JvYm9NYWtlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBSb2JvTWFrZXIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsgKi9cbiAgICBwdWJsaWMgQVdTUm9ib01ha2VyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUm9ib01ha2VyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBSb2JvTWFrZXIgc2VydmljZSBwb2xpY3kgKi9cbiAgICBwdWJsaWMgQVdTUm9ib01ha2VyU2VydmljZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSb2JvTWFrZXJTZXJ2aWNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUm9ib01ha2VyIHNlcnZpY2UgcG9saWN5ICovXG4gICAgcHVibGljIEFXU1JvYm9NYWtlclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1JvYm9NYWtlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWxsIHBlcm1pc3Npb25zIHRvIElBTSBSb2xlcyBBbnl3aGVyZSByZXNvdXJjZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG86IENyZWF0ZVByb2ZpbGUsIERlbGV0ZVRydXN0QW5jaG9yLCBEaXNhYmxlQ1JMLCBSZXNldE5vdGlmaWNhdGlvblNldHRpbmdzLiAqL1xuICAgIHB1YmxpYyBBV1NSb2xlc0FueXdoZXJlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NSb2xlc0FueXdoZXJlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBwZXJtaXNzaW9ucyB0byBJQU0gUm9sZXMgQW55d2hlcmUgcmVzb3VyY2VzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvOiBHZXRUcnVzdEFuY2hvciwgTGlzdFByb2ZpbGVzLCBHZXRDUkwuIFRoZXJlIHdpbGwgYmUgbm8gb3RoZXIgcGVybWlzc2lvbnMgZm9yIG90aGVyIHNlcnZpY2VzIGluY2x1ZGVkIGluIHRoaXMgcG9saWN5LiAqL1xuICAgIHB1YmxpYyBBV1NSb2xlc0FueXdoZXJlUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUm9sZXNBbnl3aGVyZVJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIElBTSBSb2xlcyBBbnl3aGVyZSB0byBwdWJsaXNoIHNlcnZpY2UvdXNhZ2UgbWV0cmljcyB0byBDbG91ZFdhdGNoIGFuZCBjaGVjayB0aGUgc3RhdHVzIG9mIFByaXZhdGUgQ2VydGlmaWNhdGUgQXV0aG9yaXRpZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIEFXU1JvbGVzQW55d2hlcmVTZXJ2aWNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1JvbGVzQW55d2hlcmVTZXJ2aWNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgQW1hem9uIFMzIG9uIE91dHBvc3RzIHNlcnZpY2UgdG8gbWFuYWdlIEVDMiBuZXR3b3JrIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTUzNPbk91dHBvc3RzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTUzNPbk91dHBvc3RzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBTYXZpbmdzIFBsYW5zIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQVdTU2F2aW5nc1BsYW5zRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTYXZpbmdzUGxhbnNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBTYXZpbmdzIFBsYW5zIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQVdTU2F2aW5nc1BsYW5zUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2F2aW5nc1BsYW5zUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBTRE1QIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHJlc291cmNlcyBvbiBiZWhhbGYgb2YgdGhlIGN1c3RvbWVyLiAqL1xuICAgIHB1YmxpYyBBV1NTRE1QU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU0RNUFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHJldHJpZXZlIGFuZCBkZXNjcmliZSBzZWNyZXRzIGZyb20gU2VjcmV0cyBNYW5hZ2VyLiBUaGlzIHBvbGljeSBhbHNvIGFsbG93cyBkZWNyeXB0aW5nIEtNUyBrZXlzIGZvciBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0cy4gKi9cbiAgICBwdWJsaWMgQVdTU2VjcmV0c01hbmFnZXJDbGllbnRSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWNyZXRzTWFuYWdlckNsaWVudFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBTZWN1cml0eSBBZ2VudCB0byBtYW5hZ2UgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUFnZW50U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VjdXJpdHlBZ2VudFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIGF1dGhlbnRpY2F0ZWQgdXNlcnMgdG8gYWNjZXNzIHRoZSBTZWN1cml0eSBBZ2VudCBXZWIgQXBwbGljYXRpb24gZm9yIGNvbmZpZ3VyaW5nIGFuZCBleGVjdXRpbmcgYXV0b21hdGVkIHNlY3VyaXR5IHBlbmV0cmF0aW9uIHRlc3RzLiBUaGlzIHBvbGljeSBlbmFibGVzIHVzZXJzIHRvIG1hbmFnZSBwZW50ZXN0cywgdmlldyBmaW5kaW5ncywgbW9uaXRvciB0ZXN0IGV4ZWN1dGlvbiwgYW5kIGludGVyYWN0IHdpdGggQVdTIHJlc291cmNlcyByZXF1aXJlZCBmb3Igc2VjdXJpdHkgdGVzdGluZyBvcGVyYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUFnZW50V2ViQXBwUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlY3VyaXR5QWdlbnRXZWJBcHBQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byB1c2UgQVdTIFNlY3VyaXR5IEh1Yi4gKi9cbiAgICBwdWJsaWMgQVdTU2VjdXJpdHlIdWJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlY3VyaXR5SHViRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGVuYWJsZSBhbmQgbWFuYWdlIEFXUyBTZWN1cml0eSBIdWIgd2l0aGluIGFuIG9yZ2FuaXphdGlvbi4gSW5jbHVkZXMgZW5hYmxpbmcgdGhlIHNlcnZpY2UgYWNyb3NzIHRoZSBvcmdhbml6YXRpb24sIGFuZCBkZXRlcm1pbmluZyB0aGUgZGVsZWdhdGVkIGFkbWluaXN0cmF0b3IgYWNjb3VudCBmb3IgdGhlIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU1NlY3VyaXR5SHViT3JnYW5pemF0aW9uc0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWN1cml0eUh1Yk9yZ2FuaXphdGlvbnNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBTZWN1cml0eSBIdWIgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEFXU1NlY3VyaXR5SHViUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VjdXJpdHlIdWJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEEgc2VydmljZS1saW5rZWQgcm9sZSByZXF1aXJlZCBmb3IgQVdTIFNlY3VyaXR5IEh1YiB0byBhY2Nlc3MgeW91ciByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEFXU1NlY3VyaXR5SHViU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VjdXJpdHlIdWJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBTZWN1cml0eSBIdWIgdG8gbWFuYWdlIEFXUyBDb25maWcgcnVsZXMgYW5kIFNlY3VyaXR5IEh1YiByZXNvdXJjZXMgaW4geW91ciBvcmdhbml6YXRpb24gYW5kIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUh1YlYyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VjdXJpdHlIdWJWMlNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHByb3ZpZGVzIGN1c3RvbWVycyB3aXRoIFJlYWQgYW5kIFdyaXRlIHBlcm1pc3Npb25zIHRvIGNhc2UgcmVzb3VyY2VzIHRoYXQgYXJlIGNyZWF0ZWQgdGhyb3VnaCB0aGUgU2VjdXJpdHkgSW5jaWRlbnQgUmVzcG9uc2Ugc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTU2VjdXJpdHlJbmNpZGVudFJlc3BvbnNlQ2FzZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VjdXJpdHlJbmNpZGVudFJlc3BvbnNlQ2FzZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgcHJvdmlkZXMgY3VzdG9tZXJzIHdpdGggUmVhZCBhbmQgV3JpdGUgcGVybWlzc2lvbnMgdG8gYWxsIHJlc291cmNlcyBhc3NvY2lhdGVkIHRvIHRoZSBTZWN1cml0eSBJbmNpZGVudCBSZXNwb25zZSBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUluY2lkZW50UmVzcG9uc2VGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlY3VyaXR5SW5jaWRlbnRSZXNwb25zZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgcHJvdmlkZXMgY3VzdG9tZXJzIHdpdGggUmVhZC1vbmx5IHBlcm1pc3Npb25zIHRvIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB0byB0aGUgU2VjdXJpdHkgSW5jaWRlbnQgUmVzcG9uc2Ugc2VydmljZS4gUGVybWlzc2lvbiBpbmNsdWRlcyBhY2Nlc3MgdG8gR2V0Q2FzZUF0dGFjaG1lbnREb3dubG9hZFVybCBhcyB3ZWxsIGZvciB0aGUgYWJpbGl0eSB0byBnZXQgY2FzZSBhdHRhY2htZW50IGRvd25sb2FkIFVSTHMuICovXG4gICAgcHVibGljIEFXU1NlY3VyaXR5SW5jaWRlbnRSZXNwb25zZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlY3VyaXR5SW5jaWRlbnRSZXNwb25zZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBSZXNvdXJjZXMgbWFuYWdlZCBvciB1c2VkIGJ5IFNlY3VyaXR5IEluY2lkZW50IFJlc3BvbnNlICovXG4gICAgcHVibGljIEFXU1NlY3VyaXR5SW5jaWRlbnRSZXNwb25zZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlY3VyaXR5SW5jaWRlbnRSZXNwb25zZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIEFXUyBTZWN1cml0eSBJbmNpZGVudCBSZXNwb25zZSB0byBjb250aW51b3VzbHkgbW9uaXRvciB5b3VyIGVudmlyb25tZW50IGZvciBzZWN1cml0eSB0aHJlYXRzLCB0dW5lIHNlY3VyaXR5IHNlcnZpY2VzIHRvIHJlZHVjZSBhbGVydCBub2lzZSwgYW5kIGdhdGhlciBpbmZvcm1hdGlvbiB0byBpbnZlc3RpZ2F0ZSBwb3RlbnRpYWwgaW5jaWRlbnRzLiAqL1xuICAgIHB1YmxpYyBBV1NTZWN1cml0eUluY2lkZW50UmVzcG9uc2VUcmlhZ2VTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZWN1cml0eUluY2lkZW50UmVzcG9uc2VUcmlhZ2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHNlcnZpY2UgY2F0YWxvZyBhZG1pbiBjYXBhYmlsaXRpZXMgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZUNhdGFsb2dBZG1pbkZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZUNhdGFsb2dBZG1pbkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIFNlcnZpY2UgQ2F0YWxvZyBhZG1pbiBjYXBhYmlsaXRpZXMgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZUNhdGFsb2dBZG1pblJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VDYXRhbG9nQWRtaW5SZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIFNlcnZpY2UgQ2F0YWxvZyBBcHAgUmVnaXN0cnkgY2FwYWJpbGl0aWVzICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VDYXRhbG9nQXBwUmVnaXN0cnlGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VDYXRhbG9nQXBwUmVnaXN0cnlGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBTZXJ2aWNlIENhdGFsb2cgQXBwIFJlZ2lzdHJ5IGNhcGFiaWxpdGVzICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VDYXRhbG9nQXBwUmVnaXN0cnlSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlQ2F0YWxvZ0FwcFJlZ2lzdHJ5UmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgU2VydmljZSBDYXRhbG9nIEFwcFJlZ2lzdHJ5IHRvIG1hbmFnZSBSZXNvdXJjZSBHcm91cHMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZUNhdGFsb2dBcHBSZWdpc3RyeVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VDYXRhbG9nQXBwUmVnaXN0cnlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHNlcnZpY2UgY2F0YWxvZyBlbmR1c2VyIGNhcGFiaWxpdGllcyAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlQ2F0YWxvZ0VuZFVzZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VDYXRhbG9nRW5kVXNlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIFNlcnZpY2UgQ2F0YWxvZyBlbmQtdXNlciBjYXBhYmlsaXRpZXMgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZUNhdGFsb2dFbmRVc2VyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZUNhdGFsb2dFbmRVc2VyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBIFNlcnZpY2UgTGlua2VkIFJvbGUgUG9saWN5IGZvciBBV1MgU2VydmljZUNhdGFsb2cgdG8gc3luYyB3aXRoIEFXUyBPcmdhbml6YXRpb25zIG9yZ2FuaXphdGlvbiBzdHJ1Y3R1cmUgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZUNhdGFsb2dPcmdzRGF0YVN5bmNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlQ2F0YWxvZ09yZ3NEYXRhU3luY1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQSBTZXJ2aWNlIExpbmtlZCBSb2xlIGZvciBBV1MgU2VydmljZUNhdGFsb2cgdG8gc3luYyBQcm92aXNpb25pbmcgQXJ0aWZhY3RzIGZyb20gc291cmNlIHJlcG9zaXRvcmllcyAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlQ2F0YWxvZ1N5bmNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlQ2F0YWxvZ1N5bmNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgU2VydmljZSBMaW5rZWQgUm9sZSBwcm92aWRlcyBBSURldk9wcyBhYmlsaXR5IHRvIHByb3ZpZGUgdXNhZ2UgaW5mb3JtYXRpb24uICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yQUlEZXZPcHNQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JBSURldk9wc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciBtYW5hZ2luZyBub2RlZ3JvdXBzIGluIHRoZSBjdXN0b21lcidzIGFjY291bnQuIFRoZXNlIHBvbGljaWVzIHJlbGF0ZWQgdG8gbWFuYWdlbWVudCBvZiB0aGUgZm9sbG93aW5nIHJlc291cmNlczogQXV0b3NjYWxpbmdHcm91cHMsIFNlY3VyaXR5R3JvdXBzLCBMYXVuY2hUZW1wbGF0ZXMgYW5kIEluc3RhbmNlUHJvZmlsZXMuICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yQW1hem9uRUtTTm9kZWdyb3VwKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yQW1hem9uRUtTTm9kZWdyb3VwKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBTZXJ2aWNlIExpbmtlZCBSb2xlIHByb3ZpZGVzIEFtYXpvbiBRIERldmVsb3BlciBhYmlsaXR5IHRvIHByb3ZpZGUgdXNhZ2UgaW5mb3JtYXRpb24uICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yQW1hem9uUURldmVsb3BlcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvckFtYXpvblFEZXZlbG9wZXIpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIFNlcnZpY2UtTGlua2VkIFJvbGUgcHJvdmlkZXMgQVdTIFRyYW5zZm9ybSB3aXRoIHRoZSBhYmlsaXR5IHRvIHByb3ZpZGUgdXNhZ2UgaW5mb3JtYXRpb24uICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yQVdTVHJhbnNmb3JtKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yQVdTVHJhbnNmb3JtKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBUcmFuc2Zvcm0gQ3VzdG9tIHRvIHB1Ymxpc2ggQ2xvdWRXYXRjaCBtZXRyaWNzIHRvIHlvdXIgYWNjb3VudCBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JBV1NUcmFuc2Zvcm1DdXN0b20oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JBV1NUcmFuc2Zvcm1DdXN0b20pO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gU3lzdGVtcyBNYW5hZ2VyIHJlc291cmNlcyB1c2VkIGJ5IENsb3VkV2F0Y2ggQWxhcm1zICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yQ2xvdWRXYXRjaEFsYXJtc0FjdGlvblNTTVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yQ2xvdWRXYXRjaEFsYXJtc0FjdGlvblNTTVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENsb3VkV2F0Y2ggdG8gYWNjZXNzIFJEUyBQZXJmb3JtYW5jZSBJbnNpZ2h0cyBtZXRyaWNzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yQ2xvdWRXYXRjaE1ldHJpY3NEYlBlcmZJbnNpZ2h0c1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yQ2xvdWRXYXRjaE1ldHJpY3NEYlBlcmZJbnNpZ2h0c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQSBzZXJ2aWNlLWxpbmtlZCByb2xlIHJlcXVpcmVkIGZvciBBbWF6b24gQ29kZUd1cnUgUHJvZmlsZXIgdG8gc2VuZCBub3RpZmljYXRpb25zIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckNvZGVHdXJ1UHJvZmlsZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JDb2RlR3VydVByb2ZpbGVyKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyByb2xlIGdyYW50cyBwZXJtaXNzaW9ucyB0byBDb2RlV2hpc3BlcmVyIHRvIGFjY2VzcyBkYXRhIGluIHlvdXIgYWNjb3VudCB0byBjYWxjdWxhdGUgYmlsbGluZywgcHJvdmlkZXMgYWNjZXNzIHRvIGNyZWF0ZSBhbmQgYWNjZXNzIHNlY3VyaXR5IHJlcG9ydHMgaW4gQW1hem9uIENvZGVHdXJ1LCBhbmQgZW1pdCBkYXRhIHRvIENsb3VkV2F0Y2guICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yQ29kZVdoaXNwZXJlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvckNvZGVXaGlzcGVyZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgRUMyIFNjaGVkdWxlZCBJbnN0YW5jZXMgdG8gbGF1bmNoIGFuZCBtYW5hZ2Ugc3BvdCBpbnN0YW5jZXMuICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yRUMyU2NoZWR1bGVkSW5zdGFuY2VzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yRUMyU2NoZWR1bGVkSW5zdGFuY2VzKTtcbiAgICB9XG5cbiAgICAvKiogQVdTIEdyb3VuZFN0YXRpb24gdXNlcyB0aGlzIHNlcnZpY2UtbGlua2VkIHJvbGUgdG8gaW52b2tlIEVDMiB0byBmaW5kIHB1YmxpYyBJUHY0IGFkZHJlc3NlcyAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvckdyb3VuZFN0YXRpb25EYXRhZmxvd0VuZHBvaW50R3JvdXBQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JHcm91bmRTdGF0aW9uRGF0YWZsb3dFbmRwb2ludEdyb3VwUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEVDMkltYWdlQnVpbGRlciB0byBjYWxsIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JJbWFnZUJ1aWxkZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JJbWFnZUJ1aWxkZXIpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIElvVCBTaXRlV2lzZSB0byBwcm92aXNpb24gYW5kIG1hbmFnZSBnYXRld2F5cyBhcyB3ZWxsIGFzIHF1ZXJ5IGRhdGEuIFRoZSBwb2xpY3kgaW5jbHVkZXMgcmVxdWlyZWQgQVdTIEdyZWVuZ3Jhc3MgcGVybWlzc2lvbnMgZm9yIGRlcGxveWluZyB0byBncm91cHMsIEFXUyBMYW1iZGEgcGVybWlzc2lvbnMgZm9yIGNyZWF0aW5nIGFuZCB1cGRhdGluZyBzZXJ2aWNlLXByZWZpeGVkIGZ1bmN0aW9ucywgYW5kIEFXUyBJb1QgQW5hbHl0aWNzIHBlcm1pc3Npb25zIGZvciBxdWVyeWluZyBkYXRhIGZyb20gZGF0YXN0b3Jlcy4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JJb1RTaXRlV2lzZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvcklvVFNpdGVXaXNlKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIExvZyBEZWxpdmVyeSBzZXJ2aWNlIHRvIGRlbGl2ZXIgbG9ncyBieSBjYWxsaW5nIGxvZyBkZXN0aW5hdGlvbiBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JMb2dEZWxpdmVyeVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvckxvZ0RlbGl2ZXJ5UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIEFtYXpvbiBNb25pdHJvbiBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgQVdTIHJlc291cmNlcywgaW5jbHVkaW5nIEFXUyBTU08gdXNlciBhc3NpZ25tZW50IG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvck1vbml0cm9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yTW9uaXRyb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBDbG91ZHdhdGNoIGFjY2VzcyB0byBwdWJsaXNoIG9wZXJhdGlvbmFsIGFuZCB1c2FnZSBtZXRyaWNzIGFuZCBsb2dzIGZvciBBbWF6b24gTmVwdHVuZSAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvck5lcHR1bmVHcmFwaFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZUZvck5lcHR1bmVHcmFwaFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIGRlc2NyaWJlIGFuZCB1cGRhdGUgUHJpdmF0ZSBNYXJrZXRwbGFjZSByZXNvdXJjZXMgYW5kIGRlc2NyaWJlIEFXUyBPcmdhbml6YXRpb25zICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yUHJpdmF0ZU1hcmtldHBsYWNlQWRtaW5Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2VydmljZVJvbGVGb3JQcml2YXRlTWFya2V0cGxhY2VBZG1pblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgUHJvY3VyZW1lbnQgSW5zaWdodHMgdG8gb2J0YWluIE9yZ2FuaXphdGlvbiBBY2NvdW50IGRldGFpbHMgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVGb3JQcm9jdXJlbWVudEluc2lnaHRzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yUHJvY3VyZW1lbnRJbnNpZ2h0c1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1Mgc2VydmljZXMgYW5kIHJlc291cmNlcyBuZWNlc3NhcnkgdG8gbWlncmF0ZSBzZXJ2aWNlIGluc3RhbmNlcyBpbnRvIEFXUyBpbmNsdWRpbmcgRUMyLCBTMyBhbmQgQ2xvdWRmb3JtYXRpb24uICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlRm9yU01TKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yU01TKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBVc2VyIFN1YnNjcmlwdGlvbnMgc2VydmljZSB0byB5b3VyIElkZW50aXR5IENlbnRlciByZXNvdXJjZXMgdG8gYXV0b21hdGljYWxseSB1cGRhdGUgeW91ciBzdWJzY3JpcHRpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZUZvclVzZXJTdWJzY3JpcHRpb25zKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlRm9yVXNlclN1YnNjcmlwdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBBV1MgQmFja3VwIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBjb21wbGlhbmNlIHJlcG9ydHMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTU2VydmljZVJvbGVQb2xpY3lGb3JCYWNrdXBSZXBvcnRzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlUG9saWN5Rm9yQmFja3VwUmVwb3J0cyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGNvbnRhaW5zIHBlcm1pc3Npb25zIGZvciB0ZXN0aW5nIHJlc3RvcmVzIGFuZCBmb3IgY2xlYW5pbmcgdXAgcmVzb3VyY2VzIGNyZWF0ZWQgZHVyaW5nIHRlc3RzLiAqL1xuICAgIHB1YmxpYyBBV1NTZXJ2aWNlUm9sZVBvbGljeUZvckJhY2t1cFJlc3RvcmVUZXN0aW5nKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NlcnZpY2VSb2xlUG9saWN5Rm9yQmFja3VwUmVzdG9yZVRlc3RpbmcpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIG1hbmFnZWQgcG9saWN5IHByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyB0byBBbWF6b24gV29ya1NwYWNlcyB0byBtYW5hZ2UgRUMyIGluc3RhbmNlcyBpbiB5b3VyIEFXUyBhY2NvdW50ICovXG4gICAgcHVibGljIEFXU1NlcnZpY2VSb2xlUG9saWN5Rm9yV29ya3NwYWNlc0luc3RhbmNlcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTZXJ2aWNlUm9sZVBvbGljeUZvcldvcmtzcGFjZXNJbnN0YW5jZXMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB0aGUgQVdTIEREb1MgUmVzcG9uc2UgVGVhbSB3aXRoIGxpbWl0ZWQgYWNjZXNzIHRvIHlvdXIgQVdTIGFjY291bnQgdG8gYXNzaXN0IHdpdGggRERvUyBhdHRhY2sgbWl0aWdhdGlvbiBkdXJpbmcgYSBoaWdoLXNldmVyaXR5IGV2ZW50LiAqL1xuICAgIHB1YmxpYyBBV1NTaGllbGREUlRBY2Nlc3NQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU2hpZWxkRFJUQWNjZXNzUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBTaGllbGQgdG8gYWNjZXNzIEFXUyByZXNvdXJjZXMgb24geW91ciBiZWhhbGYgdG8gcHJvdmlkZSBERG9TIHByb3RlY3Rpb24uICovXG4gICAgcHVibGljIEFXU1NoaWVsZFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NoaWVsZFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHB1Ymxpc2ggbWV0cmljcyBhbmQgcHJvdmlkZSBpbnNpZ2h0cyBmb3IgeW91ciBzb2NpYWwgbWVzc2FnZSBzZW5kaW5nLiAqL1xuICAgIHB1YmxpYyBBV1NTb2NpYWxNZXNzYWdpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTb2NpYWxNZXNzYWdpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIEFXUyBTeXN0ZW1zIE1hbmFnZXIgZm9yIFNBUCB3aXRoIHRoZSBwZXJtaXNzaW9ucyBuZWVkZWQgdG8gbWFuYWdlIGFuZCBpbnRlZ3JhdGUgU0FQIHNvZnR3YXJlIHdpdGggQVdTLiAqL1xuICAgIHB1YmxpYyBBV1NTU01Gb3JTQVBTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU01Gb3JTQVBTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgU2VydmljZSBMaW5rZWQgUm9sZSBBV1NTZXJ2aWNlUm9sZUZvckFtYXpvblNTTV9PcHNJbnNpZ2h0cyAqL1xuICAgIHB1YmxpYyBBV1NTU01PcHNJbnNpZ2h0c1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTTU9wc0luc2lnaHRzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBZG1pbmlzdHJhdG9yIGFjY2VzcyBmb3IgU1NPIERpcmVjdG9yeSAqL1xuICAgIHB1YmxpYyBBV1NTU09EaXJlY3RvcnlBZG1pbmlzdHJhdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1NTT0RpcmVjdG9yeUFkbWluaXN0cmF0b3IpO1xuICAgIH1cblxuICAgIC8qKiBSZWFkT25seSBhY2Nlc3MgZm9yIFNTTyBEaXJlY3RvcnkgKi9cbiAgICBwdWJsaWMgQVdTU1NPRGlyZWN0b3J5UmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NPRGlyZWN0b3J5UmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3Mgd2l0aGluIEFXUyBTU08gdG8gbWFuYWdlIEFXUyBPcmdhbml6YXRpb25zIG1hc3RlciBhbmQgbWVtYmVyIGFjY291bnRzIGFuZCBjbG91ZCBhcHBsaWNhdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NTU09NYXN0ZXJBY2NvdW50QWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU09NYXN0ZXJBY2NvdW50QWRtaW5pc3RyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB3aXRoaW4gQVdTIFNTTyB0byBtYW5hZ2UgQVdTIE9yZ2FuaXphdGlvbnMgbWVtYmVyIGFjY291bnRzIGFuZCBjbG91ZCBhcHBsaWNhdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NTU09NZW1iZXJBY2NvdW50QWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU09NZW1iZXJBY2NvdW50QWRtaW5pc3RyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQVdTIFNTTyBjb25maWd1cmF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTU1NPUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU1NPUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgQVdTIFNTTyBwZXJtaXNzaW9ucyB0byBtYW5hZ2UgQVdTIHJlc291cmNlcywgaW5jbHVkaW5nIElBTSByb2xlcywgcG9saWNpZXMgYW5kIFNBTUwgSWRQIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NTU09TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTU09TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFuIGFjY2VzcyBwb2xpY3kgZm9yIHByb3ZpZGluZyBhIHVzZXIvcm9sZS9ldGMgYWNjZXNzIHRvIHRoZSBBV1MgU3RlcEZ1bmN0aW9ucyBjb25zb2xlLiBGb3IgYSBmdWxsIGNvbnNvbGUgZXhwZXJpZW5jZSwgaW4gYWRkaXRpb24gdG8gdGhpcyBwb2xpY3ksIGEgdXNlciBtYXkgbmVlZCBpYW06UGFzc1JvbGUgcGVybWlzc2lvbiBvbiBvdGhlciBJQU0gcm9sZXMgdGhhdCBjYW4gYmUgYXNzdW1lZCBieSB0aGUgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQVdTU3RlcEZ1bmN0aW9uc0NvbnNvbGVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N0ZXBGdW5jdGlvbnNDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFuIGFjY2VzcyBwb2xpY3kgZm9yIHByb3ZpZGluZyBhIHVzZXIvcm9sZS9ldGMgYWNjZXNzIHRvIHRoZSBBV1MgU3RlcEZ1bmN0aW9ucyBBUEkuIEZvciBmdWxsIGFjY2VzcywgaW4gYWRkaXRpb24gdG8gdGhpcyBwb2xpY3ksIGEgdXNlciBNVVNUIGhhdmUgaWFtOlBhc3NSb2xlIHBlcm1pc3Npb24gb24gYXQgbGVhc3Qgb25lIElBTSByb2xlIHRoYXQgY2FuIGJlIGFzc3VtZWQgYnkgdGhlIHNlcnZpY2UuICovXG4gICAgcHVibGljIEFXU1N0ZXBGdW5jdGlvbnNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N0ZXBGdW5jdGlvbnNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQW4gYWNjZXNzIHBvbGljeSBmb3IgcHJvdmlkaW5nIGEgdXNlci9yb2xlL2V0YyByZWFkIG9ubHkgYWNjZXNzIHRvIHRoZSBBV1MgU3RlcEZ1bmN0aW9ucyBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NTdGVwRnVuY3Rpb25zUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3RlcEZ1bmN0aW9uc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFN0b3JhZ2UgR2F0ZXdheSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU1N0b3JhZ2VHYXRld2F5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTdG9yYWdlR2F0ZXdheUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQVdTIFN0b3JhZ2UgR2F0ZXdheSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIEFXU1N0b3JhZ2VHYXRld2F5UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3RvcmFnZUdhdGV3YXlSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UtbGlua2VkIHJvbGUgdXNlZCBieSBBV1MgU3RvcmFnZSBHYXRld2F5IHRvIGVuYWJsZSBpbnRlZ3JhdGlvbiBvZiBvdGhlciBBV1Mgc2VydmljZXMgd2l0aCBTdG9yYWdlIEdhdGV3YXkuICovXG4gICAgcHVibGljIEFXU1N0b3JhZ2VHYXRld2F5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3RvcmFnZUdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFXU1N1cHBseUNoYWluRmVkZXJhdGlvbkFkbWluQWNjZXNzIHByb3ZpZGVzIEFXUyBTdXBwbHkgQ2hhaW4gZmVkZXJhdGVkIHVzZXJzIGFjY2VzcyB0byB0aGUgQVdTIFN1cHBseSBDaGFpbiBhcHBsaWNhdGlvbiwgaW5jbHVkaW5nIHRoZSByZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBwZXJmb3JtIGFjdGlvbnMgd2l0aGluIHRoZSBBV1MgU3VwcGx5IENoYWluIGFwcGxpY2F0aW9uLiBUaGUgcG9saWN5IHByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zIG92ZXIgSUFNIElkZW50aXR5IENlbnRlciB1c2VycyBhbmQgZ3JvdXBzIGFuZCBpcyBhdHRhY2hlZCB0byBhIHJvbGUgY3JlYXRlZCBieSBBV1MgU3VwcGx5IENoYWluIG9uIHlvdXIgYmVoYWxmLiBZb3Ugc2hvdWxkbid0IGF0dGFjaCBBV1NTdXBwbHlDaGFpbkZlZGVyYXRpb25BZG1pbkFjY2VzcyBwb2xpY3kgdG8gYW55IG90aGVyIElBTSBlbnRpdGllcy4gKi9cbiAgICBwdWJsaWMgQVdTU3VwcGx5Q2hhaW5GZWRlcmF0aW9uQWRtaW5BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3VwcGx5Q2hhaW5GZWRlcmF0aW9uQWRtaW5BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdXNlcnMgdG8gYWNjZXNzIHRoZSBBV1MgU3VwcG9ydCBDZW50ZXIuICovXG4gICAgcHVibGljIEFXU1N1cHBvcnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3VwcG9ydEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBV1MgU3VwcG9ydCBBcHAgYW5kIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzLCBzdWNoIGFzIEFXUyBTdXBwb3J0IGFuZCBTZXJ2aWNlIFF1b3Rhcy4gVGhpcyBwb2xpY3kgaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSBzdXBwb3J0aW5nIHNlcnZpY2VzIHNvIHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRhY3QgQVdTIFN1cHBvcnQgZm9yIHN1cHBvcnQgY2FzZXMsIGNoYW5nZSBzZXJ2aWNlIHF1b3RhcywgYW5kIGNyZWF0ZSB0aGUgcmVsZXZhbnQgc2VydmljZS1saW5rZWQgcm9sZXMuICovXG4gICAgcHVibGljIEFXU1N1cHBvcnRBcHBGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N1cHBvcnRBcHBGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgQVdTIFN1cHBvcnQgQXBwLiAqL1xuICAgIHB1YmxpYyBBV1NTdXBwb3J0QXBwUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3VwcG9ydEFwcFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gc3VwcG9ydHBsYW5zLiAqL1xuICAgIHB1YmxpYyBBV1NTdXBwb3J0UGxhbnNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N1cHBvcnRQbGFuc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHN1cHBvcnRwbGFucy4gKi9cbiAgICBwdWJsaWMgQVdTU3VwcG9ydFBsYW5zUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3VwcG9ydFBsYW5zUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQVdTIFN1cHBvcnQgUGxhbnMgdG8gcmVhZCBhbmQgdXBkYXRlIEFXUyByZXNvdXJjZXMgdXNlZCB0byBtYW5hZ2UgeW91ciBhY2NvdW50J3MgU3VwcG9ydCBQbGFuIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NTdXBwb3J0UGxhbnNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTdXBwb3J0UGxhbnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgU3VwcG9ydCB0byBhY2Nlc3MgQVdTIHJlc291cmNlcyB0byBwcm92aWRlIGJpbGxpbmcsIGFkbWluaXN0cmF0aXZlLCBhbmQgc3VwcG9ydCBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTU3VwcG9ydFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N1cHBvcnRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBBV1MgU3lzdGVtcyBNYW5hZ2VyIChTU00pIHBlcm1pc3Npb24gdG8gZGlzY292ZXIgQVdTIGFjY291bnQgaW5mb3JtYXRpb24uICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VyQWNjb3VudERpc2NvdmVyeVNlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJBY2NvdW50RGlzY292ZXJ5U2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgcmVzb3VyY2VzIG1hbmFnZWQgb3IgdXNlZCBieSB0aGUgQVdTIFN5c3RlbXMgTWFuYWdlciBjaGFuZ2UgbWFuYWdlbWVudCBmcmFtZXdvcmsuICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VyQ2hhbmdlTWFuYWdlbWVudFNlcnZpY2VQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJDaGFuZ2VNYW5hZ2VtZW50U2VydmljZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBBV1MgU3lzdGVtcyBNYW5hZ2VyIFF1aWNrIFNldHVwIHRvIGVuYWJsZSBhbmQgY29uZmlndXJlIEFXUyBDb25maWcgY29uZmlndXJhdGlvbiByZWNvcmRpbmcuICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VyRW5hYmxlQ29uZmlnUmVjb3JkaW5nRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N5c3RlbXNNYW5hZ2VyRW5hYmxlQ29uZmlnUmVjb3JkaW5nRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zIGZvciBlbmFibGluZyBFeHBsb3JlciwgYSBjYXBhYmlsaXR5IG9mIEFXUyBTeXN0ZW1zIE1hbmFnZXIuIFRoaXMgaW5jbHVkZXMgcGVybWlzc2lvbnMgdG8gdXBkYXRlIHJlbGF0ZWQgU3lzdGVtcyBNYW5hZ2VyIHNlcnZpY2Ugc2V0dGluZ3MsIGFuZCB0byBjcmVhdGUgYSBzZXJ2aWNlLWxpbmtlZCByb2xlIGZvciBTeXN0ZW1zIE1hbmFnZXIuICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VyRW5hYmxlRXhwbG9yZXJFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJFbmFibGVFeHBsb3JlckV4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBTeXN0ZW1zIE1hbmFnZXIgZm9yIFNBUCBzZXJ2aWNlICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VyRm9yU0FQRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTeXN0ZW1zTWFuYWdlckZvclNBUEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBTeXN0ZW1zIE1hbmFnZXIgZm9yIFNBUCBzZXJ2aWNlICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VyRm9yU0FQUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJGb3JTQVBSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBBV1MgcmVzb3VyY2VzIG1hbmFnZWQgb3IgdXNlZCBieSB0aGUgQVdTIFN5c3RlbXMgTWFuYWdlciBqdXN0IGluIHRpbWUgYWNjZXNzIGZyYW1ld29yay4gKi9cbiAgICBwdWJsaWMgQVdTU3lzdGVtc01hbmFnZXJKdXN0SW5UaW1lQWNjZXNzU2VydmljZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTeXN0ZW1zTWFuYWdlckp1c3RJblRpbWVBY2Nlc3NTZXJ2aWNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIG1hbmFnZWQgcG9saWN5IEFXU1N5c3RlbXNNYW5hZ2VySnVzdEluVGltZUFjY2Vzc1Rva2VuUG9saWN5IGFsbG93cyBTeXN0ZW1zIE1hbmFnZXIgdG8gZ2VuZXJhdGUgYWNjZXNzIHRva2VucyB1c2VkIGZvciBqdXN0LWluLXRpbWUgbm9kZSBhY2Nlc3MuICovXG4gICAgcHVibGljIEFXU1N5c3RlbXNNYW5hZ2VySnVzdEluVGltZUFjY2Vzc1Rva2VuUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N5c3RlbXNNYW5hZ2VySnVzdEluVGltZUFjY2Vzc1Rva2VuUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIG1hbmFnZWQgcG9saWN5IEFXU1N5c3RlbXNNYW5hZ2VySnVzdEluVGltZUFjY2Vzc1Rva2VuU2Vzc2lvblBvbGljeSBhbGxvd3MgU3lzdGVtcyBNYW5hZ2VyIHRvIGFwcGx5IHNjb3BlZCBkb3duIHBlcm1pc3Npb25zIHRvIGEganVzdC1pbi10aW1lIG5vZGUgYWNjZXNzIHNlc3Npb24gb25jZSBpdCBpcyBzdGFydGVkLiAqL1xuICAgIHB1YmxpYyBBV1NTeXN0ZW1zTWFuYWdlckp1c3RJblRpbWVBY2Nlc3NUb2tlblNlc3Npb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJKdXN0SW5UaW1lQWNjZXNzVG9rZW5TZXNzaW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIFN5c3RlbXMgTWFuYWdlciB0byBzaGFyZSBhIGRlbnktYWNjZXNzIHBvbGljeSBmb3IganVzdC1pbi10aW1lIG5vZGUgYWNjZXNzIGZyb20gdGhlIGRlbGVnYXRlZCBhZG1pbmlzdHJhdG9yIGFjY291bnQgdG8gbWVtYmVyIGFjY291bnRzLCBhbmQgcmVwbGljYXRlIHRoZSBwb2xpY3kgdG8gbXVsdGlwbGUgUmVnaW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTU3lzdGVtc01hbmFnZXJKdXN0SW5UaW1lTm9kZUFjY2Vzc1JvbGVQcm9wYWdhdGlvblBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NTeXN0ZW1zTWFuYWdlckp1c3RJblRpbWVOb2RlQWNjZXNzUm9sZVByb3BhZ2F0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gY29sbGVjdCBpbmZvcm1hdGlvbiBhYm91dCBhIHVzZXIgZm9yIEp1c3QtSW4tVGltZS1Ob2RlLUFjY2VzcyBub3RpZmljYXRpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NTeXN0ZW1zTWFuYWdlck5vdGlmaWNhdGlvbnNTZXJ2aWNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1N5c3RlbXNNYW5hZ2VyTm90aWZpY2F0aW9uc1NlcnZpY2VQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBJQU0gcm9sZSBmb3IgU1NNIEV4cGxvcmVyIHRvIG1hbmFnZSBPcHNEYXRhIHJlbGF0ZWQgb3BlcmF0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NTeXN0ZW1zTWFuYWdlck9wc0RhdGFTeW5jU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTU3lzdGVtc01hbmFnZXJPcHNEYXRhU3luY1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHRoZSBBV1MgUG9ydGFsIEFzc2V0IFNlcnZlciB0aGUgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xuICAgIHB1YmxpYyBBV1NUaGlua2JveEFzc2V0U2VydmVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RoaW5rYm94QXNzZXRTZXJ2ZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgQVdTIFRoaW5rYm94J3MgRGVhZGxpbmUgc29mdHdhcmUgZnVsbCBhY2Nlc3MgdG8gbXVsdGlwbGUgQVdTIHNlcnZpY2VzIGFzIHJlcXVpcmVkIGZvciBBV1MgUG9ydGFsIGFkbWluaXN0cmF0aW9uLiBUaGlzIGluY2x1ZGVzIGFjY2VzcyB0byBjcmVhdGUgYXJiaXRyYXJ5IHRhZ3Mgb24gc2V2ZXJhbCBFQzIgcmVzb3VyY2UgdHlwZXMuICovXG4gICAgcHVibGljIEFXU1RoaW5rYm94QVdTUG9ydGFsQWRtaW5Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVGhpbmtib3hBV1NQb3J0YWxBZG1pblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyB0aGUgQVdTIFBvcnRhbCBHYXRld2F5IG1hY2hpbmUgdGhlIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyByZXF1aXJlZCBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgQVdTVGhpbmtib3hBV1NQb3J0YWxHYXRld2F5UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RoaW5rYm94QVdTUG9ydGFsR2F0ZXdheVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyB0aGUgRGVhZGxpbmUgV29ya2VycyBpbiBBV1MgUG9ydGFsIHRoZSBuZWNlc3NhcnkgcGVybWlzc2lvbnMgcmVxdWlyZWQgZm9yIG5vcm1hbCBvcGVyYXRpb24uICovXG4gICAgcHVibGljIEFXU1RoaW5rYm94QVdTUG9ydGFsV29ya2VyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RoaW5rYm94QVdTUG9ydGFsV29ya2VyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciB0aGUgb3BlcmF0aW9uIG9mIEFXUyBUaGlua2JveCdzIERlYWRsaW5lIFJlc291cmNlIFRyYWNrZXIuICBUaGlzIGluY2x1ZGVzIGZ1bGwgYWNjZXNzIHRvIHNvbWUgRUMyIGFjdGlvbnMsIGluY2x1ZGluZyBEZWxldGVGbGVldHMgYW5kIENhbmNlbFNwb3RGbGVldFJlcXVlc3RzLiAqL1xuICAgIHB1YmxpYyBBV1NUaGlua2JveERlYWRsaW5lUmVzb3VyY2VUcmFja2VyQWNjZXNzUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RoaW5rYm94RGVhZGxpbmVSZXNvdXJjZVRyYWNrZXJBY2Nlc3NQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gY3JlYXRlLCBkZXN0cm95LCBhbmQgYWRtaW5pc3RlciBBV1MgVGhpbmtib3gncyBEZWFkbGluZSBSZXNvdXJjZSBUcmFja2VyLiAqL1xuICAgIHB1YmxpYyBBV1NUaGlua2JveERlYWRsaW5lUmVzb3VyY2VUcmFja2VyQWRtaW5Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVGhpbmtib3hEZWFkbGluZVJlc291cmNlVHJhY2tlckFkbWluUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciBBV1MgVGhpbmtib3gncyBEZWFkbGluZSBTcG90IEV2ZW50IFBsdWdpbi4gIFRoaXMgaW5jbHVkZXMgcGVybWlzc2lvbiB0byByZXF1ZXN0LCBtb2RpZnksIGFuZCBjYW5jZWwgYSBzcG90IGZsZWV0LCBhcyB3ZWxsIGFzIGxpbWl0ZWQgUGFzc1JvbGUgcGVybWlzc2lvbi4gKi9cbiAgICBwdWJsaWMgQVdTVGhpbmtib3hEZWFkbGluZVNwb3RFdmVudFBsdWdpbkFkbWluUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RoaW5rYm94RGVhZGxpbmVTcG90RXZlbnRQbHVnaW5BZG1pblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50IHBlcm1pc3Npb25zIHJlcXVpcmVkIGZvciBhbiBFQzIgaW5zdGFuY2UgcnVubmluZyBBV1MgVGhpbmtib3ggRGVhZGxpbmUgU3BvdCBFdmVudCBQbHVnaW4gV29ya2VyIHNvZnR3YXJlLiAqL1xuICAgIHB1YmxpYyBBV1NUaGlua2JveERlYWRsaW5lU3BvdEV2ZW50UGx1Z2luV29ya2VyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RoaW5rYm94RGVhZGxpbmVTcG90RXZlbnRQbHVnaW5Xb3JrZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgVHJhbnNmZXIgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlICovXG4gICAgcHVibGljIEFXU1RyYW5zZmVyQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmZXJDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBUcmFuc2ZlciBTZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBBV1NUcmFuc2ZlckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBUcmFuc2ZlciBmdWxsIGFjY2VzcyB0byBjcmVhdGUgbG9nIHN0cmVhbXMgYW5kIGdyb3VwcyBhbmQgcHV0IGxvZyBldmVudHMgdG8geW91ciBhY2NvdW50ICovXG4gICAgcHVibGljIEFXU1RyYW5zZmVyTG9nZ2luZ0FjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcmFuc2ZlckxvZ2dpbmdBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlIHJlYWRvbmx5IGFjY2VzcyB0byBBV1MgVHJhbnNmZXIgc2VydmljZXMuICovXG4gICAgcHVibGljIEFXU1RyYW5zZmVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmZXJSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgdGhlIEFXUyBUcmFuc2Zvcm0gc2VydmljZSB0byBkZXBsb3kgdHJhbnNmb3JtZWQgLk5FVCBhcHBsaWNhdGlvbnMgYnkgY3JlYXRpbmcgYW5kIG1hbmFnaW5nIEFXUyByZXNvdXJjZXMuIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byBwcm92aXNpb24gaW5mcmFzdHJ1Y3R1cmUsIG1hbmFnZSBjb21wdXRlIHJlc291cmNlcywgYW5kIGNvbmZpZ3VyZSBkZXBsb3ltZW50IHNldHRpbmdzIGFjcm9zcyB2YXJpb3VzIEFXUyBzZXJ2aWNlcy4gKi9cbiAgICBwdWJsaWMgQVdTVHJhbnNmb3JtQXBwbGljYXRpb25EZXBsb3ltZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RyYW5zZm9ybUFwcGxpY2F0aW9uRGVwbG95bWVudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgdGhlIEFXUyBUcmFuc2Zvcm0gdG8gZGVwbG95IGFwcGxpY2F0aW9ucyB0byBBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSAoRUNTKSB3aXRoIEZhcmdhdGUuIEl0IGdyYW50cyBwZXJtaXNzaW9ucyB0byBwcm92aXNpb24sIGNvbmZpZ3VyZSwgYW5kIG1hbmFnZSB0aGUgdW5kZXJseWluZyBpbmZyYXN0cnVjdHVyZSByZXF1aXJlZCB0byBydW4gYXBwbGljYXRpb25zIG9uIEVDUy4gKi9cbiAgICBwdWJsaWMgQVdTVHJhbnNmb3JtQXBwbGljYXRpb25FQ1NEZXBsb3ltZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RyYW5zZm9ybUFwcGxpY2F0aW9uRUNTRGVwbG95bWVudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBleGVjdXRlIHRyYW5zZm9ybWF0aW9ucyBpbiBBV1MgVHJhbnNmb3JtIGN1c3RvbS4gKi9cbiAgICBwdWJsaWMgQVdTVHJhbnNmb3JtQ3VzdG9tRXhlY3V0ZVRyYW5zZm9ybWF0aW9ucygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcmFuc2Zvcm1DdXN0b21FeGVjdXRlVHJhbnNmb3JtYXRpb25zKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFRyYW5zZm9ybSBjdXN0b20uICovXG4gICAgcHVibGljIEFXU1RyYW5zZm9ybUN1c3RvbUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmb3JtQ3VzdG9tRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgdGhlIG1hbmFnZW1lbnQgb2YgdHJhbnNmb3JtYXRpb24gcmVzb3VyY2VzIGFuZCBleGVjdXRpb24gb2YgdHJhbnNmb3JtYXRpb25zIGluIEFXUyBUcmFuc2Zvcm0gY3VzdG9tLiAqL1xuICAgIHB1YmxpYyBBV1NUcmFuc2Zvcm1DdXN0b21NYW5hZ2VUcmFuc2Zvcm1hdGlvbnMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmb3JtQ3VzdG9tTWFuYWdlVHJhbnNmb3JtYXRpb25zKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGRldmVsb3BlcnMgZXhlY3V0aW9uIHJvbGUgdGhlIHBlcm1pc3Npb25zIG5lZWRlZCB0byBleGVjdXRlIEFXUyBUcmFuc2Zvcm0gQ29udGludW91cyBNb2Rlcm5pemF0aW9uIENMSS9hZ2VudCB0byBydW4gYXNzZXNzbWVudHMvdHJhbnNmb3JtYXRpb25zIHVzaW5nIEFXUyBCYXRjaCwgaW5jbHVkaW5nIHVwbG9hZGluZyBzb3VyY2UgY29kZSwgcmV0cmlldmluZyByZXN1bHRzLCBtb25pdG9yaW5nIEJhdGNoIGpvYiBzdGF0dXMsIHJlYWRpbmcgbG9ncywgYW5kIG1hbmFnaW5nIHRyYW5zZm9ybWF0aW9uIHNjaGVkdWxlcy4gKi9cbiAgICBwdWJsaWMgQVdTVHJhbnNmb3JtSW5mcmFzdHJ1Y3R1cmVFeGVjdXRvckFjY2Vzc0JhdGNoKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RyYW5zZm9ybUluZnJhc3RydWN0dXJlRXhlY3V0b3JBY2Nlc3NCYXRjaCk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBkZXZlbG9wZXJzIGV4ZWN1dGlvbiByb2xlIHRoZSBwZXJtaXNzaW9ucyBuZWVkZWQgdG8gZXhlY3V0ZSBBV1MgVHJhbnNmb3JtIENvbnRpbnVvdXMgTW9kZXJuaXphdGlvbiBDTEkvYWdlbnQgdG8gcnVuIGFzc2Vzc21lbnRzL3RyYW5zZm9ybWF0aW9ucyB1c2luZyBFQzIsIGluY2x1ZGluZyB1cGxvYWRpbmcgc291cmNlIGNvZGUsIHJldHJpZXZpbmcgcmVzdWx0cywgbW9uaXRvcmluZyBqb2Igc3RhdHVzLCByZWFkaW5nIGxvZ3MsIGFuZCBtYW5hZ2luZyB0cmFuc2Zvcm1hdGlvbiBzY2hlZHVsZXMuICovXG4gICAgcHVibGljIEFXU1RyYW5zZm9ybUluZnJhc3RydWN0dXJlRXhlY3V0b3JBY2Nlc3NFQzIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmb3JtSW5mcmFzdHJ1Y3R1cmVFeGVjdXRvckFjY2Vzc0VDMik7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyBmb3IgQVdTIFRyYW5zZm9ybSB0byBzZXQgdXAgQVdTIGxhbmRpbmcgem9uZXMgaW5jbHVkaW5nIGFjY291bnQgcHJvdmlzaW9uaW5nLCBvcmdhbml6YXRpb25hbCBnb3Zlcm5hbmNlLCBhbmQgQ29udHJvbCBUb3dlciBjb25maWd1cmF0aW9uICovXG4gICAgcHVibGljIEFXU1RyYW5zZm9ybUxhbmRpbmdab25lQWdlbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmb3JtTGFuZGluZ1pvbmVBZ2VudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyBmb3IgQVdTIFRyYW5zZm9ybSB0byBkZXBsb3kgYW5kIGNvbmZpZ3VyZSBuZXR3b3JrIGluZnJhc3RydWN0dXJlIGluY2x1ZGluZyBWUENzLCBUcmFuc2l0IEdhdGV3YXlzLCBhbmQgcm91dGUgdGFibGVzIGZvciBuZXR3b3JrIG1pZ3JhdGlvbiAqL1xuICAgIHB1YmxpYyBBV1NUcmFuc2Zvcm1OZXR3b3JrTWlncmF0aW9uQWdlbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmb3JtTmV0d29ya01pZ3JhdGlvbkFnZW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyB0aGUgQVdTIFRyYW5zZm9ybSBzZXJ2aWNlIHRvIG1hbmFnZSBjdXN0b21lciByZXZlbnVlIGF0dHJpYnV0aW9uIGZvciBpbmNlbnRpdmVzLiAqL1xuICAgIHB1YmxpYyBBV1NUcmFuc2Zvcm1SZXZlbnVlQXR0cmlidXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmb3JtUmV2ZW51ZUF0dHJpYnV0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyB0aGUgQVdTIFRyYW5zZm9ybSBzZXJ2aWNlIHRvIHJlYWQgYSBzcGVjaWZpZWQgU2VjcmV0c01hbmFnZXIgU2VjcmV0IGluIGNvbm5lY3Rpb24gdG8gc3BlY2lmaWVkIEtNUyBrZXkuIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byByZWFkIHRoZSBzcGVjaWZpZWQgc2VjcmV0IHZhbHVlIGFuZCBkZWNyeXB0IGl0IGlzIHRoZSBzZWNyZXQgaXMgZW5jcnlwdGVkICovXG4gICAgcHVibGljIEFXU1RyYW5zZm9ybVNlY3JldHNNYW5hZ2VyQ29ubmVjdG9yUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RyYW5zZm9ybVNlY3JldHNNYW5hZ2VyQ29ubmVjdG9yUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIEFXUyBUcmFuc2Zvcm0gKEFUWCkgQ29udGludW91cyBNb2Rlcm5pemF0aW9uIENMSS9hZ2VudCB0aGUgcGVybWlzc2lvbnMgbmVlZGVkIHRvIGludm9rZSB0aGUgQVdTIFNlY3VyaXR5IEFnZW50IHNlcnZpY2UgZm9yIGF1dG9tYXRlZCBjb2RlIHNlY3VyaXR5IHJldmlld3MgYW5kIHJlbWVkaWF0aW9uLCBpbmNsdWRpbmcgdXBsb2FkaW5nIHNjYW4gYXJ0aWZhY3RzIGFuZCByZXRyaWV2aW5nIGZpbmRpbmdzLiAqL1xuICAgIHB1YmxpYyBBV1NUcmFuc2Zvcm1TZWN1cml0eUFnZW50RXhlY3V0b3JBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJhbnNmb3JtU2VjdXJpdHlBZ2VudEV4ZWN1dG9yQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIGZvciBBV1MgVHJhbnNmb3JtIHRvIHBlcmZvcm0gc2VydmVyIG1pZ3JhdGlvbiBvcGVyYXRpb25zIGluY2x1ZGluZyByZXBsaWNhdGlvbiwgdGVzdGluZywgYW5kIGN1dG92ZXIgdXNpbmcgQVdTIEFwcGxpY2F0aW9uIE1pZ3JhdGlvbiBTZXJ2aWNlICovXG4gICAgcHVibGljIEFXU1RyYW5zZm9ybVNlcnZlck1pZ3JhdGlvbkFnZW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RyYW5zZm9ybVNlcnZlck1pZ3JhdGlvbkFnZW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFRydXN0ZWQgQWR2aXNvciBQcmlvcml0eS4gVGhpcyBwb2xpY3kgYWxzbyBlbmFibGVzIHRoZSB1c2VyIHRvIGFkZCBUcnVzdGVkIEFkdmlzb3IgYXMgYSB0cnVzdGVkIHNlcnZpY2Ugd2l0aCBBV1MgT3JnYW5pemF0aW9ucyBhbmQgdG8gc3BlY2lmeSBkZWxlZ2F0ZWQgYWRtaW5pc3RyYXRvciBhY2NvdW50cyBmb3IgVHJ1c3RlZCBBZHZpc29yIFByaW9yaXR5LiAqL1xuICAgIHB1YmxpYyBBV1NUcnVzdGVkQWR2aXNvclByaW9yaXR5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NUcnVzdGVkQWR2aXNvclByaW9yaXR5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIFRydXN0ZWQgQWR2aXNvciBQcmlvcml0eS4gVGhpcyBpbmNsdWRlcyBwZXJtaXNzaW9uIHRvIHZpZXcgdGhlIGRlbGVnYXRlZCBhZG1pbmlzdHJhdG9yIGFjY291bnRzLiAqL1xuICAgIHB1YmxpYyBBV1NUcnVzdGVkQWR2aXNvclByaW9yaXR5UmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVHJ1c3RlZEFkdmlzb3JQcmlvcml0eVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSBQb2xpY3kgZm9yIFRydXN0ZWQgQWR2aXNvciBNdWx0aS1hY2NvdW50IFJlcG9ydGluZyAqL1xuICAgIHB1YmxpYyBBV1NUcnVzdGVkQWR2aXNvclJlcG9ydGluZ1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RydXN0ZWRBZHZpc29yUmVwb3J0aW5nU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBY2Nlc3MgZm9yIHRoZSBBV1MgVHJ1c3RlZCBBZHZpc29yIFNlcnZpY2UgdG8gaGVscCByZWR1Y2UgY29zdCwgaW5jcmVhc2UgcGVyZm9ybWFuY2UsIGFuZCBpbXByb3ZlIHNlY3VyaXR5IG9mIHlvdXIgQVdTIGVudmlyb25tZW50LiAqL1xuICAgIHB1YmxpYyBBV1NUcnVzdGVkQWR2aXNvclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1RydXN0ZWRBZHZpc29yU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIHVzZXIgYXR0cmlidXRlcyBmcm9tIEFXUyBJQU0gSWRlbnRpdHkgQ2VudGVyIGZvciB0aGUgdXNlciBhdHRyaWJ1dGVzIHRoYXQgdGhlIGN1c3RvbWVyIGhhcyBvcHRlZCBpbiB0by4gKi9cbiAgICBwdWJsaWMgQVdTVXNlckF0dHJpYnV0ZUNvc3RBbGxvY2F0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1VzZXJBdHRyaWJ1dGVDb3N0QWxsb2NhdGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBBV1MgVXNlciBOb3RpZmljYXRpb25zIHRvIGNhbGwgQVdTIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBBV1NVc2VyTm90aWZpY2F0aW9uc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1VzZXJOb3RpZmljYXRpb25zU2VydmljZUxpbmtlZFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyBmb3Igdmlld2luZyBlbnRpdGxlZCBWZW5kb3IgSW5zaWdodHMgcmVzb3VyY2VzIGFuZCBtYW5hZ2luZyBWZW5kb3IgSW5zaWdodHMgc3Vic2NyaXB0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NWZW5kb3JJbnNpZ2h0c0Fzc2Vzc29yRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NWZW5kb3JJbnNpZ2h0c0Fzc2Vzc29yRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgZm9yIHZpZXdpbmcgZW50aXRsZWQgVmVuZG9yIEluc2lnaHRzIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NWZW5kb3JJbnNpZ2h0c0Fzc2Vzc29yUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVmVuZG9ySW5zaWdodHNBc3Nlc3NvclJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgZm9yIGNyZWF0aW5nIGFuZCBtYW5hZ2luZyB0aGUgVmVuZG9yIEluc2lnaHRzIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NWZW5kb3JJbnNpZ2h0c1ZlbmRvckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVmVuZG9ySW5zaWdodHNWZW5kb3JGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyBmb3Igdmlld2luZyB0aGUgVmVuZG9yIEluc2lnaHRzIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBBV1NWZW5kb3JJbnNpZ2h0c1ZlbmRvclJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ZlbmRvckluc2lnaHRzVmVuZG9yUmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBjb250cm9sIHNlcnZpY2UgbWFuYWdlZCByZXNvdXJjZXMgYW5kIGNhbGwgQVBJcyBuZWNlc3NhcnkgZm9yIGxvZyBmaWVsZCBlbnJpY2htZW50IG9uIGJlaGFsZiBvZiBjdXN0b21lcnMuICovXG4gICAgcHVibGljIEFXU1ZQQ0Zsb3dMb2dzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVlBDRmxvd0xvZ3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBWUEMgTGF0dGljZSB0byBhY2Nlc3MgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTVnBjTGF0dGljZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ZwY0xhdHRpY2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IFNpdGUtdG8tU2l0ZSBWUE4gdG8gY3JlYXRlIGFuZCBtYW5hZ2UgcmVzb3VyY2VzIHJlbGF0ZWQgdG8geW91ciBWUE4gQ29ubmVjdGlvbnMuICovXG4gICAgcHVibGljIEFXU1ZQQ1MyU1ZwblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1ZQQ1MyU1ZwblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3cgVlBDIFRyYW5zaXQgR2F0ZXdheSB0byBjcmVhdGUgYW5kIG1hbmFnZSBuZWNlc3NhcnkgcmVzb3VyY2VzIGZvciB5b3VyIFRyYW5zaXQgR2F0ZXdheSBWUEMgQXR0YWNobWVudHMuICovXG4gICAgcHVibGljIEFXU1ZQQ1RyYW5zaXRHYXRld2F5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTVlBDVHJhbnNpdEdhdGV3YXlTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQVdTIFZlcmlmaWVkIEFjY2VzcyBzZXJ2aWNlIHRvIHByb3Zpc2lvbiBlbmRwb2ludHMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQVdTVlBDVmVyaWZpZWRBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NWUENWZXJpZmllZEFjY2Vzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFdBRiB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuIE5vdGUgdGhhdCB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBwZXJtaXNzaW9ucyB0byBsaXN0IGFuZCB1cGRhdGUgQW1hem9uIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9ucywgcGVybWlzc2lvbnMgdG8gdmlldyBsb2FkIGJhbGFuY2VycyBvbiBBV1MgRWxhc3RpYyBMb2FkIEJhbGFuY2luZywgcGVybWlzc2lvbnMgdG8gdmlldyBBbWF6b24gQVBJIEdhdGV3YXkgUkVTVCBBUElzIGFuZCBzdGFnZXMsIHBlcm1pc3Npb25zIHRvIGxpc3QgYW5kIHZpZXcgQW1hem9uIENsb3VkV2F0Y2ggbWV0cmljcywgYW5kIHBlcm1pc3Npb25zIHRvIHZpZXcgcmVnaW9ucyBlbmFibGVkIHdpdGhpbiB0aGUgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQVdTV0FGQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTV0FGQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkLW9ubHkgYWNjZXNzIHRvIEFXUyBXQUYgdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiBOb3RlIHRoYXQgdGhpcyBwb2xpY3kgYWxzbyBncmFudHMgcGVybWlzc2lvbnMgdG8gbGlzdCBBbWF6b24gQ2xvdWRGcm9udCBkaXN0cmlidXRpb25zLCBwZXJtaXNzaW9ucyB0byB2aWV3IGxvYWQgYmFsYW5jZXJzIG9uIEFXUyBFbGFzdGljIExvYWQgQmFsYW5jaW5nLCBwZXJtaXNzaW9ucyB0byB2aWV3IEFtYXpvbiBBUEkgR2F0ZXdheSBSRVNUIEFQSXMgYW5kIHN0YWdlcywgcGVybWlzc2lvbnMgdG8gbGlzdCBhbmQgdmlldyBBbWF6b24gQ2xvdWRXYXRjaCBtZXRyaWNzLCBhbmQgcGVybWlzc2lvbnMgdG8gdmlldyByZWdpb25zIGVuYWJsZWQgd2l0aGluIHRoZSBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBBV1NXQUZDb25zb2xlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTV0FGQ29uc29sZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQVdTIFdBRiBhY3Rpb25zLiAqL1xuICAgIHB1YmxpYyBBV1NXQUZGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1dBRkZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBXQUYgYWN0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTV0FGUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTV0FGUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdGhlIEFXUyBXZWxsLUFyY2hpdGVjdGVkIEFnZW50IHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIHJlc291cmNlIGNvbmZpZ3VyYXRpb25zLCBzZWN1cml0eSBzZXR0aW5ncywgYW5kIG9wZXJhdGlvbmFsIGRhdGEgdG8gZ2VuZXJhdGUgb3B0aW1pemF0aW9uIHJlY29tbWVuZGF0aW9ucyAqL1xuICAgIHB1YmxpYyBBV1NXZWxsQXJjaGl0ZWN0ZWRBZ2VudFJlc291cmNlU2Nhbm5pbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NXZWxsQXJjaGl0ZWN0ZWRBZ2VudFJlc291cmNlU2Nhbm5pbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBXZWxsQXJjaGl0ZWN0ZWQgdG8gYWNjZXNzIEFXUyBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzIHRoYXQgcmVsYXRlIHRvIFdlbGxBcmNoaXRlY3RlZCByZXNvdXJjZXMgb24gYmVoYWxmIG9mIGN1c3RvbWVycy4gKi9cbiAgICBwdWJsaWMgQVdTV2VsbEFyY2hpdGVjdGVkRGlzY292ZXJ5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTV2VsbEFyY2hpdGVjdGVkRGlzY292ZXJ5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgV2VsbC1BcmNoaXRlY3RlZCB0byBhY2Nlc3MgT3JnYW5pemF0aW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQVdTV2VsbEFyY2hpdGVjdGVkT3JnYW5pemF0aW9uc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1dlbGxBcmNoaXRlY3RlZE9yZ2FuaXphdGlvbnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBmdWxsIGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zIHRvIHRoZSBXaWNrciBzZXJ2aWNlLCBpbmNsdWRpbmcgdGhlIFdpY2tyIGFkbWluaXN0cmF0aXZlIGZ1bmN0aW9ucyB1bmRlciB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQVdTV2lja3JGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1dpY2tyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGNhcGFiaWxpdGllcyB0byBtYW5hZ2UgT2JzZXJ2YWJpbGl0eSBBY2Nlc3MgTWFuYWdlciBsaW5rcyBhbmQgZXN0YWJsaXNoIHNoYXJpbmcgb2YgWC1SYXkgdHJhY2VzICovXG4gICAgcHVibGljIEFXU1hyYXlDcm9zc0FjY291bnRTaGFyaW5nQ29uZmlndXJhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NYcmF5Q3Jvc3NBY2NvdW50U2hhcmluZ0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyB0aGUgQVdTIFgtUmF5IERhZW1vbiB0byByZWxheSByYXcgdHJhY2Ugc2VnbWVudHMgZGF0YSB0byB0aGUgc2VydmljZSdzIEFQSSBhbmQgcmV0cmlldmUgc2FtcGxpbmcgZGF0YSAocnVsZXMsIHRhcmdldHMsIGV0Yy4pIHRvIGJlIHVzZWQgYnkgdGhlIFgtUmF5IFNESy4gKi9cbiAgICBwdWJsaWMgQVdTWFJheURhZW1vbldyaXRlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1hSYXlEYWVtb25Xcml0ZUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBYLVJheSBmdWxsIGFjY2VzcyBtYW5hZ2VkIHBvbGljeSAqL1xuICAgIHB1YmxpYyBBV1NYcmF5RnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5BV1NYcmF5RnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBYLVJheSByZWFkIG9ubHkgbWFuYWdlZCBwb2xpY3kgKi9cbiAgICBwdWJsaWMgQVdTWHJheVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1hyYXlSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBYLVJheSB3cml0ZSBvbmx5IG1hbmFnZWQgcG9saWN5ICovXG4gICAgcHVibGljIEFXU1hyYXlXcml0ZU9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTWHJheVdyaXRlT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFkbWluaXN0cmF0aXZlIGFjY2VzcyBmb3IgQVJDIHpvbmFsIHNoaWZ0IHByYWN0aWNlIHJ1bnMsIGFuZCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBhbGFybSBzdGF0dXNlcyB0byBtb25pdG9yIHByYWN0aWNlIHJ1bnMuICovXG4gICAgcHVibGljIEFXU1pvbmFsQXV0b3NoaWZ0UHJhY3RpY2VSdW5TTFJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQVdTWm9uYWxBdXRvc2hpZnRQcmFjdGljZVJ1blNMUlBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gdGhlIEFQSXMgbmVlZGVkIHRvIHN1cHBvcnQgem9uZS1ncm91cCBhY2Nlc3MtbWFuYWdlbWVudCBmb3Igb3JnYW5pemF0aW9ucy4gKi9cbiAgICBwdWJsaWMgQVdTWm9uZUdyb3VwQWNjZXNzTWFuYWdlbWVudFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkFXU1pvbmVHcm91cEFjY2Vzc01hbmFnZW1lbnRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyBmb3IgdGhlIEFXUyBCYXRjaCBzZXJ2aWNlIHRvIG1hbmFnZSB0aGUgcmVxdWlyZWQgcmVzb3VyY2VzLCBpbmNsdWRpbmcgQW1hem9uIEVDMiBhbmQgQW1hem9uIEVDUyByZXNvdXJjZXMuICovXG4gICAgcHVibGljIEJhdGNoU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQmF0Y2hTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEJlZHJvY2sgQWdlbnRDb3JlIGFzIHdlbGwgYXMgbGltaXRlZCBhY2Nlc3MgdG8gcmVsYXRlZCBzZXJ2aWNlcyAqL1xuICAgIHB1YmxpYyBCZWRyb2NrQWdlbnRDb3JlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5CZWRyb2NrQWdlbnRDb3JlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBhY2Nlc3MgdG8gb3RoZXIgQVdTIHNlcnZpY2UgcmVzb3VyY2VzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIHJ1biBBbWF6b24gQmVkcm9jayBBZ2VudENvcmUgaW4gVlBDIG1vZGUgKi9cbiAgICBwdWJsaWMgQmVkcm9ja0FnZW50Q29yZU5ldHdvcmtTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5CZWRyb2NrQWdlbnRDb3JlTmV0d29ya1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFjY2VzcyB0byBpZGVudGl0eSBhbmQgdG9rZW4gbWFuYWdlbWVudCByZXNvdXJjZXMgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIEFtYXpvbiBCZWRyb2NrIEFnZW50Q29yZSBSdW50aW1lIGF1dGhlbnRpY2F0aW9uIGFuZCBhdXRob3JpemF0aW9uLiAqL1xuICAgIHB1YmxpYyBCZWRyb2NrQWdlbnRDb3JlUnVudGltZUlkZW50aXR5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQmVkcm9ja0FnZW50Q29yZVJ1bnRpbWVJZGVudGl0eVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBpbnN0YW5jZSByb2xlIG9mIGluc3RhbmNlcyBtYW5hZ2VkIGJ5IEJlZHJvY2sgQWdlbnRDb3JlIFJ1bnRpbWUgSW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBCZWRyb2NrQWdlbnRDb3JlUnVudGltZUluc3RhbmNlc0luc3RhbmNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5CZWRyb2NrQWdlbnRDb3JlUnVudGltZUluc3RhbmNlc0luc3RhbmNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byBjcmVhdGUgYW5kIG1hbmFnZSBjb21wdXRlIGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcyBmb3IgQmVkcm9jayBBZ2VudENvcmUgUnVudGltZSBJbnN0YW5jZXMgKi9cbiAgICBwdWJsaWMgQmVkcm9ja0FnZW50Q29yZVJ1bnRpbWVJbnN0YW5jZXNPcGVyYXRvclJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQmVkcm9ja0FnZW50Q29yZVJ1bnRpbWVJbnN0YW5jZXNPcGVyYXRvclJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgZm9yIGJpbGxpbmcgYW5kIGNvc3QgbWFuYWdlbWVudC4gVGhpcyBpbmNsdWRlcyB2aWV3aW5nIGFjY291bnQgdXNhZ2UgYW5kIHZpZXdpbmcgYW5kIG1vZGlmeWluZyBidWRnZXRzIGFuZCBwYXltZW50IG1ldGhvZHMuICovXG4gICAgcHVibGljIEJpbGxpbmcoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQmlsbGluZyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBCdWRnZXRzIHRvIHZlcmlmeSBhY2Nlc3MgdG8gQmlsbGluZyBWaWV3cyBzaGFyZWQgYWNyb3NzIGFjY291bnQgYm91bmRhcmllcy4gKi9cbiAgICBwdWJsaWMgQnVkZ2V0c1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkJ1ZGdldHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBDZXJ0aWZpY2F0ZSBNYW5hZ2VyIFNlcnZpY2UgUm9sZSBQb2xpY3kgKi9cbiAgICBwdWJsaWMgQ2VydGlmaWNhdGVNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2VydGlmaWNhdGVNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdG8gZW5hYmxlIEFXUyBDbGllbnQgVlBOIHRvIG1hbmFnZSB5b3VyIENsaWVudCBWUE4gZW5kcG9pbnQgY29ubmVjdGlvbnMuICovXG4gICAgcHVibGljIENsaWVudFZQTlNlcnZpY2VDb25uZWN0aW9uc1JvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xpZW50VlBOU2VydmljZUNvbm5lY3Rpb25zUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBlbmFibGUgQVdTIENsaWVudCBWUE4gdG8gbWFuYWdlIHlvdXIgQ2xpZW50IFZQTiBlbmRwb2ludHMuICovXG4gICAgcHVibGljIENsaWVudFZQTlNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsaWVudFZQTlNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSBSb2xlIGZvciBDbG91ZEZvcm1hdGlvbiBTdGFja1NldHMgKE9yZ2FuaXphdGlvbiBNYXN0ZXIgQWNjb3VudCkgKi9cbiAgICBwdWJsaWMgQ2xvdWRGb3JtYXRpb25TdGFja1NldHNPcmdBZG1pblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkRm9ybWF0aW9uU3RhY2tTZXRzT3JnQWRtaW5TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UgUm9sZSBmb3IgQ2xvdWRGb3JtYXRpb24gU3RhY2tTZXRzIChPcmdhbml6YXRpb24gTWVtYmVyIEFjY291bnQpICovXG4gICAgcHVibGljIENsb3VkRm9ybWF0aW9uU3RhY2tTZXRzT3JnTWVtYmVyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRGb3JtYXRpb25TdGFja1NldHNPcmdNZW1iZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBDbG91ZEZyb250IGNvbnNvbGUgcGx1cyB0aGUgYWJpbGl0eSB0byBsaXN0IEFtYXpvbiBTMyBidWNrZXRzIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQ2xvdWRGcm9udEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRGcm9udEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQgbGlzdCBkaXN0cmlidXRpb25zIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS4gKi9cbiAgICBwdWJsaWMgQ2xvdWRGcm9udFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkRnJvbnRSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyByZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IENsb3VkSFNNICovXG4gICAgcHVibGljIENsb3VkSFNNU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRIU01TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBBbWF6b24gQ2xvdWRTZWFyY2ggY29uZmlndXJhdGlvbiBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBDbG91ZFNlYXJjaEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRTZWFyY2hGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byB0aGUgQW1hem9uIENsb3VkU2VhcmNoIGNvbmZpZ3VyYXRpb24gc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQ2xvdWRTZWFyY2hSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFNlYXJjaFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBzZXJ2aWNlIGxpbmtlZCByb2xlIGFsbG93cyBDbG91ZFRyYWlsIHRvIGdldCBhbmQgYWRkIHJlc291cmNlIHRhZ3MgdG8gdGhlIHJlc291cmNlIG93bmVyJ3MgQ2xvdWRUcmFpbCBldmVudHMuICovXG4gICAgcHVibGljIENsb3VkVHJhaWxFdmVudENvbnRleHQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRUcmFpbEV2ZW50Q29udGV4dCk7XG4gICAgfVxuXG4gICAgLyoqIFBlcm1pc3Npb24gcG9saWN5IGZvciBDbG91ZFRyYWlsIFNlcnZpY2VMaW5rZWRSb2xlICovXG4gICAgcHVibGljIENsb3VkVHJhaWxTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFRyYWlsU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQ2xvdWRXYXRjaCB0byBhc3N1bWUgQ2xvdWRXYXRjaC1Dcm9zc0FjY291bnRTaGFyaW5nIHJvbGVzIGluIHJlbW90ZSBhY2NvdW50cyBvbiBiZWhhbGYgb2YgdGhlIGN1cnJlbnQgYWNjb3VudCBpbiBvcmRlciB0byBkaXNwbGF5IGRhdGEgY3Jvc3MtYWNjb3VudCwgY3Jvc3MtcmVnaW9uICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hDcm9zc0FjY291bnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaENyb3NzQWNjb3VudEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBhbGFybXMgYW5kIG1ldHJpY3MgYXMgd2VsbCBhcyBFQzIgbWV0YWRhdGEuIFByb3ZpZGVzIGFjY2VzcyB0byBTdG9wLCBUZXJtaW5hdGUgYW5kIFJlYm9vdCBFQzIgaW5zdGFuY2VzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoQWN0aW9uc0VDMkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoQWN0aW9uc0VDMkFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bGwgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gdXNlIEFtYXpvbkNsb3VkV2F0Y2hBZ2VudC4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEFnZW50QWRtaW5Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEFnZW50QWRtaW5Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyByZXF1aXJlZCB0byB1c2UgQW1hem9uQ2xvdWRXYXRjaEFnZW50IG9uIHNlcnZlcnMgKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEFnZW50U2VydmVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hBZ2VudFNlcnZlclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBjYWxsIENsb3VkV2F0Y2ggdXNpbmcgQVBJIGtleSBhdXRoZW50aWNhdGlvbi4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEFQSUtleUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoQVBJS2V5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBBcHBsaWNhdGlvbiBJbnNpZ2h0cyBhbmQgcmVxdWlyZWQgZGVwZW5kZW5jaWVzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoQXBwbGljYXRpb25JbnNpZ2h0c0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEFwcGxpY2F0aW9uSW5zaWdodHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDbG91ZFdhdGNoIEFwcGxpY2F0aW9uIEluc2lnaHRzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoQXBwbGljYXRpb25JbnNpZ2h0c1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hBcHBsaWNhdGlvbkluc2lnaHRzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBDbG91ZHdhdGNoIEFwcGxpY2F0aW9uIEluc2lnaHRzIFNlcnZpY2UgTGlua2VkIFJvbGUgUG9saWN5ICovXG4gICAgcHVibGljIENsb3Vkd2F0Y2hBcHBsaWNhdGlvbkluc2lnaHRzU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWR3YXRjaEFwcGxpY2F0aW9uSW5zaWdodHNTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBBcHBsaWNhdGlvbiBTaWduYWxzIHNlcnZpY2UgYW5kIHNjb3BlZCBhY2Nlc3MgdG8gdGhlIGRlcGVuZGVuY2llcyBuZWVkZWQgdG8gdXNlIGFuZCBvcGVyYXRlIHRoaXMgc2VydmljZS4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEFwcGxpY2F0aW9uU2lnbmFsc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEFwcGxpY2F0aW9uU2lnbmFsc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIENsb3VkV2F0Y2ggQXBwbGljYXRpb24gU2lnbmFscyBzZXJ2aWNlIGFuZCBzY29wZWQgYWNjZXNzIHRvIHRoZSBkZXBlbmRlbmNpZXMgbmVlZGVkIHRvIHVzZSB0aGlzIHNlcnZpY2UgKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEFwcGxpY2F0aW9uU2lnbmFsc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hBcHBsaWNhdGlvblNpZ25hbHNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudHMgcGVybWlzc2lvbiB0byBDbG91ZFdhdGNoIEFwcGxpY2F0aW9uIFNpZ25hbHMgdG8gY29sbGVjdCBtb25pdG9yaW5nIGFuZCB0YWdnaW5nIGRhdGEgZnJvbSBvdGhlciByZWxldmFudCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hBcHBsaWNhdGlvblNpZ25hbHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoQXBwbGljYXRpb25TaWduYWxzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIG5vbi1DbG91ZFdhdGNoIEFQSXMgdXNlZCB0byBkaXNwbGF5IENsb3VkV2F0Y2ggQXV0b21hdGljIERhc2hib2FyZHMsIGluY2x1ZGluZyB0aGUgY29udGVudHMgb2Ygb2JqZWN0cyBzdWNoIGFzIExhbWJkYSBmdW5jdGlvbnMgKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEF1dG9tYXRpY0Rhc2hib2FyZHNBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEF1dG9tYXRpY0Rhc2hib2FyZHNBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjYXBhYmlsaXRpZXMgdG8gbWFuYWdlIE9ic2VydmFiaWxpdHkgQWNjZXNzIE1hbmFnZXIgbGlua3MgYW5kIGVzdGFibGlzaCBzaGFyaW5nIG9mIENsb3VkV2F0Y2ggcmVzb3VyY2VzICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hDcm9zc0FjY291bnRTaGFyaW5nQ29uZmlndXJhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoQ3Jvc3NBY2NvdW50U2hhcmluZ0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYnVpbHQtaW4gdGFyZ2V0cyBpbiBBbWF6b24gQ2xvdWRXYXRjaCBFdmVudHMgdG8gcGVyZm9ybSBFQzIgYWN0aW9ucyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEV2ZW50c0J1aWx0SW5UYXJnZXRFeGVjdXRpb25BY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEV2ZW50c0J1aWx0SW5UYXJnZXRFeGVjdXRpb25BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gQ2xvdWRXYXRjaCBFdmVudHMuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hFdmVudHNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hFdmVudHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBDbG91ZFdhdGNoIEV2ZW50cyB0byByZWxheSBldmVudHMgdG8gdGhlIHN0cmVhbXMgaW4gQVdTIEtpbmVzaXMgU3RyZWFtcyBpbiB5b3VyIGFjY291bnQuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hFdmVudHNJbnZvY2F0aW9uQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hFdmVudHNJbnZvY2F0aW9uQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBBbWF6b24gQ2xvdWRXYXRjaCBFdmVudHMuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hFdmVudHNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoRXZlbnRzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBBV1MgQ2xvdWRXYXRjaCB0byBleGVjdXRlIGFjdGlvbnMgb24geW91ciBiZWhhbGYgY29uZmlndXJlZCB0aHJvdWdoIGFsYXJtcyBhbmQgZXZlbnRzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoRXZlbnRzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEV2ZW50c1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaC4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoRnVsbEFjY2Vzc1YyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hGdWxsQWNjZXNzVjIpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBhY3Rpb25zIGZvciB3b3JraW5nIHdpdGggQW1hem9uIENsb3VkV2F0Y2ggSW50ZXJuZXQgTW9uaXRvci4gQWxzbyBwcm92aWRlcyBhY2Nlc3MgdG8gb3RoZXIgc2VydmljZXMsIHN1Y2ggYXMgQW1hem9uIENsb3VkV2F0Y2gsIEFtYXpvbiBFQzIsIEFtYXpvbiBDbG91ZEZyb250LCBBbWF6b24gV29ya1NwYWNlcywgYW5kIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcsIHRoYXQgYXJlIG5lY2Vzc2FyeSB0byB1c2UgdGhlIEludGVybmV0IE1vbml0b3Igc2VydmljZSBmb3IgbW9uaXRvcmluZyBhbmQgc3RvcmluZyBpbmZvcm1hdGlvbiBhYm91dCBhcHBsaWNhdGlvbiB0cmFmZmljLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoSW50ZXJuZXRNb25pdG9yRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoSW50ZXJuZXRNb25pdG9yRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gYWN0aW9ucyBmb3Igd29ya2luZyB3aXRoIEFtYXpvbiBDbG91ZFdhdGNoIEludGVybmV0IE1vbml0b3IuIEFsc28gcHJvdmlkZXMgYWNjZXNzIHRvIG90aGVyIHNlcnZpY2VzIGluIEFtYXpvbiBDbG91ZFdhdGNoLCBpbmNsdWRpbmcgcG9saWNpZXMgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gb24gQ2xvdWRXYXRjaCBtZXRyaWNzIGFuZCB0byBtYW5hZ2UgbG9nIHF1ZXJpZXMsIHRoYXQgYXJlIG5lY2Vzc2FyeSB0byB1c2UgdGhlIEludGVybmV0IE1vbml0b3Igc2VydmljZSBmb3IgbW9uaXRvcmluZyBhbmQgc3RvcmluZyBpbmZvcm1hdGlvbiBhYm91dCBhcHBsaWNhdGlvbiB0cmFmZmljLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoSW50ZXJuZXRNb25pdG9yUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaEludGVybmV0TW9uaXRvclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEludGVybmV0IE1vbml0b3IgdG8gYWNjZXNzIEVDMiwgV29ya3NwYWNlcywgYW5kIENsb3VkRnJvbnQgcmVzb3VyY2VzLCBhbmQgb3RoZXIgcmVxdWlyZWQgc2VydmljZXMgb24geW91ciBiZWhhbGYuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hJbnRlcm5ldE1vbml0b3JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoSW50ZXJuZXRNb25pdG9yU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyB3cml0ZSBhY2Nlc3MgdG8gWC1SYXkgYW5kIENsb3VkV2F0Y2ggQXBwbGljYXRpb24gU2lnbmFscyBsb2cgZ3JvdXAuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hMYW1iZGFBcHBsaWNhdGlvblNpZ25hbHNFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hMYW1iZGFBcHBsaWNhdGlvblNpZ25hbHNFeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IHJlcXVpcmVkIGZvciB0aGUgTGFtYmRhIEluc2lnaHRzIEV4dGVuc2lvbiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoTGFtYmRhSW5zaWdodHNFeGVjdXRpb25Sb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hMYW1iZGFJbnNpZ2h0c0V4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gY2FsbCBDbG91ZFdhdGNoIExvZ3MgdXNpbmcgQVBJIGtleSBhdXRoZW50aWNhdGlvbi4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaExvZ3NBUElLZXlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaExvZ3NBUElLZXlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBjYXBhYmlsaXRpZXMgdG8gbWFuYWdlIE9ic2VydmFiaWxpdHkgQWNjZXNzIE1hbmFnZXIgbGlua3MgYW5kIGVzdGFibGlzaCBzaGFyaW5nIG9mIENsb3VkV2F0Y2ggTG9ncyByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaExvZ3NDcm9zc0FjY291bnRTaGFyaW5nQ29uZmlndXJhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoTG9nc0Nyb3NzQWNjb3VudFNoYXJpbmdDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBMb2dzICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hMb2dzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoTG9nc0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIENsb3VkV2F0Y2ggTG9ncyAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoTG9nc1JlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNsb3VkV2F0Y2hMb2dzUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBZb3UgY2FuIHVzZSB0aGlzIHBvbGljeSBpbiBJQU0gcm9sZXMgdGhhdCBhcmUgYXR0YWNoZWQgdG8gQW1hem9uIEVDMiBhbmQgQW1hem9uIEVLUyBpbnN0YW5jZSByZXNvdXJjZXMgdG8gc2VuZCB0ZWxlbWV0cnkgcmVwb3J0cyAobWV0cmljcykgdG8gYSBOZXR3b3JrIEZsb3cgTW9uaXRvciBlbmRwb2ludC4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaE5ldHdvcmtGbG93TW9uaXRvckFnZW50UHVibGlzaFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoTmV0d29ya0Zsb3dNb25pdG9yQWdlbnRQdWJsaXNoUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogWW91IGNhbid0IGF0dGFjaCBDbG91ZFdhdGNoTmV0d29ya0Zsb3dNb25pdG9yU2VydmljZVJvbGVQb2xpY3kgdG8geW91ciBJQU0gZW50aXRpZXMuIFRoaXMgcG9saWN5IGlzIGF0dGFjaGVkIHRvIGEgc2VydmljZS1saW5rZWQgcm9sZSBuYW1lZCBBV1NTZXJ2aWNlUm9sZUZvck5ldHdvcmtGbG93TW9uaXRvciwgd2hpY2ggcHVibGlzaGVzIG5ldHdvcmsgdGVsZW1ldHJ5IGFnZ3JlZ2F0aW9uIHJlc3VsdHMsIGNvbGxlY3RlZCBieSBOZXR3b3JrIEZsb3cgTW9uaXRvciBhZ2VudHMsIHRvIENsb3VkV2F0Y2guIEl0IGFsc28gYWxsb3dzIHRoZSBzZXJ2aWNlIHRvIHVzZSBBV1MgT3JnYW5pemF0aW9ucyB0byBnZXQgaW5mb3JtYXRpb24gZm9yIG11bHRpLWFjY291bnQgc2NlbmFyaW9zLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoTmV0d29ya0Zsb3dNb25pdG9yU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaE5ldHdvcmtGbG93TW9uaXRvclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogWW91IGNhbid0IGF0dGFjaCBDbG91ZFdhdGNoTmV0d29ya0Zsb3dNb25pdG9yVG9wb2xvZ3lTZXJ2aWNlUm9sZVBvbGljeSB0byB5b3VyIElBTSBlbnRpdGllcy4gVGhpcyBwb2xpY3kgaXMgYXR0YWNoZWQgdG8gYSBzZXJ2aWNlLWxpbmtlZCByb2xlIG5hbWVkIEFXU1NlcnZpY2VSb2xlRm9yTmV0d29ya0Zsb3dNb25pdG9yX1RvcG9sb2d5LCB3aGljaCBnZW5lcmF0ZXMgdG9wb2xvZ3kgc25hcHNob3RzIG9mIHJlc291cmNlcyB1c2VkIGJ5IE5ldHdvcmsgRmxvdyBNb25pdG9yIGluIHlvdXIgYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaE5ldHdvcmtGbG93TW9uaXRvclRvcG9sb2d5U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaE5ldHdvcmtGbG93TW9uaXRvclRvcG9sb2d5U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQ2xvdWRXYXRjaCBOZXR3b3JrIE1vbml0b3IgdG8gYWNjZXNzIGFuZCBtYW5hZ2UgRUMyIGFuZCBWUEMgcmVzb3VyY2VzLCBwdWJsaXNoIGRhdGEgdG8gQ2xvdWRXYXRjaCBhbmQgYWNjZXNzIG90aGVyIHJlcXVpcmVkIHNlcnZpY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoTmV0d29ya01vbml0b3JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoTmV0d29ya01vbml0b3JTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIHVzZXIgYWNjZXNzIHRvIHZpZXcgT3BlblNlYXJjaCBkYXNoYm9hcmRzIG9uIHRoZSBDbG91ZFdhdGNoIExvZ3MgY29uc29sZS4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaE9wZW5TZWFyY2hEYXNoYm9hcmRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaE9wZW5TZWFyY2hEYXNoYm9hcmRBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyB1c2VyIGFjY2VzcyB0byBjcmVhdGUgaW50ZWdyYXRpb24gd2l0aCBPcGVuU2VhcmNoIHRvIGNyZWF0ZSwgdXBkYXRlLCBkZWxldGUgb3IgdmlldyBkYXNoYm9hcmRzIG9uIHRoZSBDbG91ZFdhdGNoIExvZ3MgY29uc29sZS4gKi9cbiAgICBwdWJsaWMgQ2xvdWRXYXRjaE9wZW5TZWFyY2hEYXNoYm9hcmRzRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5DbG91ZFdhdGNoT3BlblNlYXJjaERhc2hib2FyZHNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDbG91ZFdhdGNoLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBTeW50aGV0aWNzLiAqL1xuICAgIHB1YmxpYyBDbG91ZFdhdGNoU3ludGhldGljc0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaFN5bnRoZXRpY3NGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDbG91ZFdhdGNoIFN5bnRoZXRpY3MuICovXG4gICAgcHVibGljIENsb3VkV2F0Y2hTeW50aGV0aWNzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ2xvdWRXYXRjaFN5bnRoZXRpY3NSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIENvbXByZWhlbmQgc2VydmljZSByb2xlIHdoaWNoIGFsbG93cyBhY2Nlc3MgdG8gUzMgcmVzb3VyY2VzIGZvciBkYXRhIGFjY2VzcyAqL1xuICAgIHB1YmxpYyBDb21wcmVoZW5kRGF0YUFjY2Vzc1JvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29tcHJlaGVuZERhdGFBY2Nlc3NSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIENvbXByZWhlbmQuICovXG4gICAgcHVibGljIENvbXByZWhlbmRGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbXByZWhlbmRGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIENvbXByZWhlbmQgTWVkaWNhbCAqL1xuICAgIHB1YmxpYyBDb21wcmVoZW5kTWVkaWNhbEZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29tcHJlaGVuZE1lZGljYWxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gQ29tcHJlaGVuZC4gKi9cbiAgICBwdWJsaWMgQ29tcHJlaGVuZFJlYWRPbmx5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbXByZWhlbmRSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBDb21wdXRlT3B0aW1pemVyQXV0b21hdGlvblNlcnZpY2VSb2xlUG9saWN5IG1hbmFnZWQgcG9saWN5IGlzIGF0dGFjaGVkIHRvIGEgc2VydmljZS1saW5rZWQgcm9sZSB0aGF0IGFsbG93cyBDb21wdXRlIE9wdGltaXplciB0byBwZXJmb3JtIGFjdGlvbnMgb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgQ29tcHV0ZU9wdGltaXplckF1dG9tYXRpb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Db21wdXRlT3B0aW1pemVyQXV0b21hdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBDb21wdXRlT3B0aW1pemVyLiAqL1xuICAgIHB1YmxpYyBDb21wdXRlT3B0aW1pemVyUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29tcHV0ZU9wdGltaXplclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENvbXB1dGVPcHRpbWl6ZXIgdG8gY2FsbCBBV1Mgc2VydmljZXMgYW5kIGNvbGxlY3Qgd29ya2xvYWQgZGV0YWlscyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgQ29tcHV0ZU9wdGltaXplclNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbXB1dGVPcHRpbWl6ZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBuZWVkZWQgZm9yIEFXU0NvbmZpZyB0byBjcmVhdGUgY29uZm9ybWFuY2UgcGFja3MgKi9cbiAgICBwdWJsaWMgQ29uZmlnQ29uZm9ybXNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Db25maWdDb25mb3Jtc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRm9yIHVzZSB3aXRoIGFjY291bnRzIGNyZWF0ZWQgdGhyb3VnaCB0aGUgVmVyY2VsIE1hcmtldHBsYWNlIGludGVncmF0aW9uIHdpdGggQVdTLiBQcm92aWRlcyBhY2Nlc3MgdG8gbWFuYWdlIGFsbCByZXNvdXJjZXMgZm9yIHRoZSBzZXJ2aWNlcyB0aGF0IGFyZSBpbnRlZ3JhdGVkIHdpdGggdGhlIFZlcmNlbCBNYXJrZXRwbGFjZS4gKi9cbiAgICBwdWJsaWMgQ29uc29sZUZ1bGxBY2Nlc3NGcm9tVmVyY2VsKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbnNvbGVGdWxsQWNjZXNzRnJvbVZlcmNlbCk7XG4gICAgfVxuXG4gICAgLyoqIEZvciB1c2Ugd2l0aCBhY2NvdW50cyBjcmVhdGVkIHRocm91Z2ggdGhlIFZlcmNlbCBNYXJrZXRwbGFjZSBpbnRlZ3JhdGlvbiB3aXRoIEFXUy4gUHJvdmlkZXMgYWNjZXNzIHRvIHZpZXcgYWxsIHJlc291cmNlcyBmb3IgdGhlIHNlcnZpY2VzIHRoYXQgYXJlIGludGVncmF0ZWQgd2l0aCB0aGUgVmVyY2VsIE1hcmtldHBsYWNlLiAqL1xuICAgIHB1YmxpYyBDb25zb2xlVmlld09ubHlBY2Nlc3NGcm9tVmVyY2VsKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkNvbnNvbGVWaWV3T25seUFjY2Vzc0Zyb21WZXJjZWwpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIG1hbmFnZWQgcG9saWN5IHByb3ZpZGVzIGFkbWluIGFjY2VzcyB0byBDb3N0IE9wdGltaXphdGlvbiBIdWIuICovXG4gICAgcHVibGljIENvc3RPcHRpbWl6YXRpb25IdWJBZG1pbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Db3N0T3B0aW1pemF0aW9uSHViQWRtaW5BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIG1hbmFnZWQgcG9saWN5IHByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQ29zdCBPcHRpbWl6YXRpb24gSHViLiAqL1xuICAgIHB1YmxpYyBDb3N0T3B0aW1pemF0aW9uSHViUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ29zdE9wdGltaXphdGlvbkh1YlJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIENvc3QgT3B0aW1pemF0aW9uIEh1YiB0byByZXRyaWV2ZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24gYW5kIGNvbGxlY3Qgb3B0aW1pemF0aW9uLXJlbGF0ZWQgZGF0YSBhbmQgbWV0YWRhdGEuICovXG4gICAgcHVibGljIENvc3RPcHRpbWl6YXRpb25IdWJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Db3N0T3B0aW1pemF0aW9uSHViU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIENvbm5lY3QgQ3VzdG9tZXIgUHJvZmlsZXMgdG8gYWNjZXNzIEFXUyBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmLiAqL1xuICAgIHB1YmxpYyBDdXN0b21lclByb2ZpbGVzU2VydmljZUxpbmtlZFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuQ3VzdG9tZXJQcm9maWxlc1NlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHBlcm1pc3Npb25zIHRvIEFXUyBzZXJ2aWNlcyBhbmQgYWN0aW9ucyByZXF1aXJlZCB0byBzZXQgdXAgYW5kIGNvbmZpZ3VyZSBBV1MgZGF0YWJhc2Ugc2VydmljZXMuICovXG4gICAgcHVibGljIERhdGFiYXNlQWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5EYXRhYmFzZUFkbWluaXN0cmF0b3IpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdG8gQVdTIGRhdGEgYW5hbHl0aWNzIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBEYXRhU2NpZW50aXN0KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkRhdGFTY2llbnRpc3QpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBhbGxvd3MgREFYIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIE5ldHdvcmsgaW50ZXJmYWNlLCBTZWN1cml0eSBncm91cCwgU3VibmV0IGFuZCBWcGMgb24gYmVoYWxmIG9mIGN1c3RvbWVyICovXG4gICAgcHVibGljIERBWFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkRBWFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogRGlzY292ZXJ5IGFuZCBBc3Nlc3NtZW50IHBlcm1pc3Npb25zIGZvciBkYXRhYmFzZSBjb25uZWN0b3IgdXNlZCBpbiBkYXRhYmFzZSBtb2Rlcm5pemF0aW9uICovXG4gICAgcHVibGljIERCTW9kRGlzY292ZXJ5QW5kQXNzZXNzbWVudCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5EQk1vZERpc2NvdmVyeUFuZEFzc2Vzc21lbnQpO1xuICAgIH1cblxuICAgIC8qKiBSZXNvdXJjZSBwcm92aXNpb25pbmcgYW5kIGRhdGEgbWlncmF0aW9uIHBlcm1pc3Npb25zIGZvciBkYXRhYmFzZSBjb25uZWN0b3IgdXNlZCBpbiBkYXRhYmFzZSBtb2Rlcm5pemF0aW9uICovXG4gICAgcHVibGljIERCTW9kUHJvdmlzaW9uaW5nQW5kTWlncmF0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkRCTW9kUHJvdmlzaW9uaW5nQW5kTWlncmF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHRoZSBkYXRhYmFzZSBjb25uZWN0b3IgdXNlZCBieSBBVFhIZWxpeCBkdXJpbmcgdGhlIG9mZmxpbmUgKERNUy1mcmVlKSBkYXRhYmFzZSBtb2Rlcm5pemF0aW9uIHdvcmtmbG93ICovXG4gICAgcHVibGljIERCTW9kVmlydHVhbFNvdXJjZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5EQk1vZFZpcnR1YWxTb3VyY2UpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gcmVhZC1vbmx5IEFQSXMgbmVlZGVkIHRvIHJ1biBFQzIgRGVjbGFyYXRpdmUgUG9saWNpZXMgQWNjb3VudCBTdGF0dXMgUmVwb3J0LiAqL1xuICAgIHB1YmxpYyBEZWNsYXJhdGl2ZVBvbGljaWVzRUMyUmVwb3J0KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkRlY2xhcmF0aXZlUG9saWNpZXNFQzJSZXBvcnQpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyByZXF1aXJlZCB0byBzdXBwb3J0IEFtYXpvbiBDbG91ZFdhdGNoIENvbnRyaWJ1dG9yIEluc2lnaHRzIGZvciBBbWF6b24gRHluYW1vREIuICovXG4gICAgcHVibGljIER5bmFtb0RCQ2xvdWRXYXRjaENvbnRyaWJ1dG9ySW5zaWdodHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5EeW5hbW9EQkNsb3VkV2F0Y2hDb250cmlidXRvckluc2lnaHRzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyByZXF1aXJlZCBieSBEeW5hbW9EQiB0byBtYW5hZ2UgZ2xvYmFsIHRhYmxlIHJlcGxpY2Egc2V0dGluZ3MgKi9cbiAgICBwdWJsaWMgRHluYW1vREJHbG9iYWxUYWJsZVNldHRpbmdzTWFuYWdlbWVudFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkR5bmFtb0RCR2xvYmFsVGFibGVTZXR0aW5nc01hbmFnZW1lbnRTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGUgQVdTIER5bmFtb0RCIGFjY2VzcyB0byBLaW5lc2lzRGF0YVN0cmVhbXMgKi9cbiAgICBwdWJsaWMgRHluYW1vREJLaW5lc2lzUmVwbGljYXRpb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5EeW5hbW9EQktpbmVzaXNSZXBsaWNhdGlvblNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgcmVxdWlyZWQgYnkgRHluYW1vREIgZm9yIGNyb3NzLXJlZ2lvbiBkYXRhIHJlcGxpY2F0aW9uICovXG4gICAgcHVibGljIER5bmFtb0RCUmVwbGljYXRpb25TZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5EeW5hbW9EQlJlcGxpY2F0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIEVDMiB0byBkaXNjb3ZlciBhbmQgbWFuYWdlIHJlc291cmNlcyByZWxhdGVkIHRvIEVDMiBBcHBsaWNhdGlvbiBTdGF0dXMgQ2hlY2tzICovXG4gICAgcHVibGljIEVDMkFwcGxpY2F0aW9uU3RhdHVzQ2hlY2tzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRUMyQXBwbGljYXRpb25TdGF0dXNDaGVja3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBmdWxsIGFjY2VzcyB0byBFQzIgRmFzdCBMYXVuY2ggYWN0aW9ucyAqL1xuICAgIHB1YmxpYyBFQzJGYXN0TGF1bmNoRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FQzJGYXN0TGF1bmNoRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBncmFudHMgZWMyZmFzdGxhdW5jaCB0byBwcmVwYXJlIGFuZCBtYW5hZ2UgcHJlcHJvdmlzaW9uZWQgc25hcHNob3RzIGluIGN1c3RvbWVyJ3MgYWNjb3VudCAmIHB1Ymxpc2ggcmVsYXRlZCBtZXRyaWNzLiAqL1xuICAgIHB1YmxpYyBFQzJGYXN0TGF1bmNoU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRUMyRmFzdExhdW5jaFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGdyYW50aW5nIHBlcm1pc3Npb25zIHRvIEVDMiBGbGVldCB0byBsYXVuY2ggaW5zdGFuY2VzIGluIHRoZSBmdXR1cmUuICovXG4gICAgcHVibGljIEVDMkZsZWV0VGltZVNoaWZ0YWJsZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVDMkZsZWV0VGltZVNoaWZ0YWJsZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgbmVlZCBieSBFQzIgSW1hZ2UgQnVpbGRlciB0byBwZXJmb3JtIGEgY3Jvc3MgYWNjb3VudCBkaXN0cmlidXRpb24uICovXG4gICAgcHVibGljIEVjMkltYWdlQnVpbGRlckNyb3NzQWNjb3VudERpc3RyaWJ1dGlvbkFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FYzJJbWFnZUJ1aWxkZXJDcm9zc0FjY291bnREaXN0cmlidXRpb25BY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyBFQzIgSW1hZ2UgQnVpbGRlciB0byBjYWxsIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZiAqL1xuICAgIHB1YmxpYyBFQzJJbWFnZUJ1aWxkZXJFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRUMySW1hZ2VCdWlsZGVyRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIEVDMkltYWdlQnVpbGRlckxpZmVjeWNsZUV4ZWN1dGlvblBvbGljeSBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIGZvciBJbWFnZSBCdWlsZGVyIHRvIHBlcmZvcm0gYWN0aW9ucyBzdWNoIGFzIGRlcHJlY2F0ZSBvciBkZWxldGUgSW1hZ2UgQnVpbGRlciBpbWFnZSByZXNvdXJjZXMgYW5kIHRoZWlyIHVuZGVybHlpbmcgcmVzb3VyY2VzIChBTUlzLCBzbmFwc2hvdHMpIHRvIHN1cHBvcnQgYXV0b21hdGVkIHJ1bGVzIGZvciBpbWFnZSBsaWZlY3ljbGUgbWFuYWdlbWVudCB0YXNrcy4gKi9cbiAgICBwdWJsaWMgRUMySW1hZ2VCdWlsZGVyTGlmZWN5Y2xlRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVDMkltYWdlQnVpbGRlckxpZmVjeWNsZUV4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBjdXN0b21lcnMgdG8gY2FsbCBFQzIgSW5zdGFuY2UgQ29ubmVjdCB0byBwdWJsaXNoIGVwaGVtZXJhbCBrZXlzIHRvIHRoZWlyIEVDMiBpbnN0YW5jZXMgYW5kIGNvbm5lY3QgdmlhIHNzaCBvciB0aGUgRUMyIEluc3RhbmNlIENvbm5lY3QgQ0xJLiAqL1xuICAgIHB1YmxpYyBFQzJJbnN0YW5jZUNvbm5lY3QoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRUMySW5zdGFuY2VDb25uZWN0KTtcbiAgICB9XG5cbiAgICAvKiogRUMyIEluc3RhbmNlIENvbm5lY3QgZW5kcG9pbnQgcG9saWN5IHRvIG1hbmFnZSBFQzIgSW5zdGFuY2UgQ29ubmVjdCBlbmRwb2ludHMgY3JlYXRlZCBieSB0aGUgY3VzdG9tZXIgKi9cbiAgICBwdWJsaWMgRWMySW5zdGFuY2VDb25uZWN0RW5kcG9pbnQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRWMySW5zdGFuY2VDb25uZWN0RW5kcG9pbnQpO1xuICAgIH1cblxuICAgIC8qKiBFQzIgSW5zdGFuY2UgcHJvZmlsZSBmb3IgSW1hZ2UgQnVpbGRlciBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBFQzJJbnN0YW5jZVByb2ZpbGVGb3JJbWFnZUJ1aWxkZXIoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRUMySW5zdGFuY2VQcm9maWxlRm9ySW1hZ2VCdWlsZGVyKTtcbiAgICB9XG5cbiAgICAvKiogRUMyIEluc3RhbmNlIHByb2ZpbGUgZm9yIGJ1aWxkaW5nIGNvbnRhaW5lciBpbWFnZXMgd2l0aCBFQzIgSW1hZ2UgQnVpbGRlci4gVGhpcyBwb2xpY3kgZ3JhbnRzIHRoZSB1c2VyIGJyb2FkIHBlcm1pc3Npb25zIHRvIHVwbG9hZCBFQ1IgaW1hZ2VzLiAqL1xuICAgIHB1YmxpYyBFQzJJbnN0YW5jZVByb2ZpbGVGb3JJbWFnZUJ1aWxkZXJFQ1JDb250YWluZXJCdWlsZHMoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRUMySW5zdGFuY2VQcm9maWxlRm9ySW1hZ2VCdWlsZGVyRUNSQ29udGFpbmVyQnVpbGRzKTtcbiAgICB9XG5cbiAgICAvKiogRW5hYmxlcyBhY2Nlc3MgdG8gQVdTIFNlcnZpY2VzIGFuZCBSZXNvdXJjZXMgdXNlZCBvciBtYW5hZ2VkIGJ5IEVDUiBSZXBsaWNhdGlvbiAqL1xuICAgIHB1YmxpYyBFQ1JSZXBsaWNhdGlvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVDUlJlcGxpY2F0aW9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgYWN0aW9ucyB0byBiZSBwZXJmb3JtZWQgd2hlbiB1c2luZyBBV1MgRUNSIHJlcG9zaXRvcnkgY3JlYXRpb24gdGVtcGxhdGVzICovXG4gICAgcHVibGljIEVDUlRlbXBsYXRlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRUNSVGVtcGxhdGVTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGFsbG93cyBFbGFzdGlDYWNoZSB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZiBhcyBuZWNlc3NhcnkgZm9yIG1hbmFnaW5nIHlvdXIgY2FjaGUgKi9cbiAgICBwdWJsaWMgRWxhc3RpQ2FjaGVTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FbGFzdGlDYWNoZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIEVsYXN0aWNMb2FkQmFsYW5jaW5nLCBhbmQgbGltaXRlZCBhY2Nlc3MgdG8gb3RoZXIgc2VydmljZXMgbmVjZXNzYXJ5IHRvIHByb3ZpZGUgRWxhc3RpY0xvYWRCYWxhbmNpbmcgZmVhdHVyZXMuICovXG4gICAgcHVibGljIEVsYXN0aWNMb2FkQmFsYW5jaW5nRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FbGFzdGljTG9hZEJhbGFuY2luZ0Z1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFtYXpvbiBFbGFzdGljTG9hZEJhbGFuY2luZyBhbmQgZGVwZW5kZW50IHNlcnZpY2VzICovXG4gICAgcHVibGljIEVsYXN0aWNMb2FkQmFsYW5jaW5nUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRWxhc3RpY0xvYWRCYWxhbmNpbmdSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIEFjY2VzcyB0byB2aWV3IHB1cmNoYXNlZCBhc3NldHMgYW5kIGRvd25sb2FkIHJlbGF0ZWQgc29mdHdhcmUgYW5kIGtpY2tzdGFydCBmaWxlcyAqL1xuICAgIHB1YmxpYyBFbGVtZW50YWxBY3RpdmF0aW9uc0Rvd25sb2FkU29mdHdhcmVBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRWxlbWVudGFsQWN0aXZhdGlvbnNEb3dubG9hZFNvZnR3YXJlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRnVsbCBhY2Nlc3MgdG8gdmlldyBhbmQgdGFrZSBhY3Rpb24gb24gRWxlbWVudGFsIEFwcGxpYW5jZXMgYW5kIFNvZnR3YXJlIHB1cmNoYXNlZCBhc3NldHMgKi9cbiAgICBwdWJsaWMgRWxlbWVudGFsQWN0aXZhdGlvbnNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkVsZW1lbnRhbEFjdGl2YXRpb25zRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEFjY2VzcyB0byB2aWV3IHB1cmNoYXNlZCBhc3NldHMgYW5kIGdlbmVyYXRlIHNvZnR3YXJlIGxpY2Vuc2VzIGZvciBwZW5kaW5nIGFjdGl2YXRpb25zICovXG4gICAgcHVibGljIEVsZW1lbnRhbEFjdGl2YXRpb25zR2VuZXJhdGVMaWNlbnNlcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FbGVtZW50YWxBY3RpdmF0aW9uc0dlbmVyYXRlTGljZW5zZXMpO1xuICAgIH1cblxuICAgIC8qKiBSZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBkZXRhaWxlZCBsaXN0IG9mIHB1cmNoYXNlZCBhc3NldHMgYXNzb2NpYXRlZCB0byB0aGUgQVdTIGFjY291bnQgb2YgdGhlIHVzZXIgKi9cbiAgICBwdWJsaWMgRWxlbWVudGFsQWN0aXZhdGlvbnNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FbGVtZW50YWxBY3RpdmF0aW9uc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRnVsbCBhY2Nlc3MgdG8gdmlldyBhbmQgdGFrZSBhY3Rpb24gb24gRWxlbWVudGFsIEFwcGxpYW5jZXMgYW5kIFNvZnR3YXJlIHF1b3RlcyBhbmQgb3JkZXJzICovXG4gICAgcHVibGljIEVsZW1lbnRhbEFwcGxpYW5jZXNTb2Z0d2FyZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRWxlbWVudGFsQXBwbGlhbmNlc1NvZnR3YXJlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFJlYWQtb25seSBhY2Nlc3MgdG8gdmlldyBFbGVtZW50YWwgQXBwbGlhbmNlcyBhbmQgU29mdHdhcmUgcXVvdGVzIGFuZCBvcmRlcnMgKi9cbiAgICBwdWJsaWMgRWxlbWVudGFsQXBwbGlhbmNlc1NvZnR3YXJlUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRWxlbWVudGFsQXBwbGlhbmNlc1NvZnR3YXJlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBGdWxsIGFjY2VzcyB0byB2aWV3IGFuZCB0YWtlIGFjdGlvbiBvbiBFbGVtZW50YWwgQXBwbGlhbmNlIGFuZCBTb2Z0d2FyZSBzdXBwb3J0IGNhc2VzIGFuZCBwcm9kdWN0IHN1cHBvcnQgY29udGVudCAqL1xuICAgIHB1YmxpYyBFbGVtZW50YWxTdXBwb3J0Q2VudGVyRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FbGVtZW50YWxTdXBwb3J0Q2VudGVyRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyByZWFkLW9ubHkgcGVybWlzc2lvbnMgdGhhdCBhbGxvdyB0aGUgV0FMIHNlcnZpY2UgZm9yIEFtYXpvbiBFTVIgdG8gZmluZCBhbmQgcmV0dXJuIHRoZSBzdGF0dXMgb2YgYSBjbHVzdGVyICovXG4gICAgcHVibGljIEVNUkRlc2NyaWJlQ2x1c3RlclBvbGljeUZvckVNUldBTCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5FTVJEZXNjcmliZUNsdXN0ZXJQb2xpY3lGb3JFTVJXQUwpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyByZXF1aXJlZCBieSB0aGUgQVdTIEZpbk9wcyBBZ2VudCB0byBwZXJmb3JtIGNvc3QgYW5hbHlzaXMgYW5kIHNwb3QgY29zdCBzYXZpbmcgb3Bwb3J0dW5pdHkgb24gY3VzdG9tZXIgQVdTIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgRmluT3BzQWdlbnRBZ2VudFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5GaW5PcHNBZ2VudEFnZW50UG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIHVzZSB0aGUgQVdTIEZpbk9wcyBBZ2VudCB3ZWIgYXBwIGZvciBhbiBBZ2VudC4gKi9cbiAgICBwdWJsaWMgRmluT3BzQWdlbnRPcGVyYXRvclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5GaW5PcHNBZ2VudE9wZXJhdG9yUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNzIHBvbGljeSB0byBhbGxvdyBGTSBzZXJ2aWNlIGxpbmtlZCByb2xlIHRvIHBlcmZvcm0gRk0tcmVsYXRlZCBhY3Rpb25zIG9uIEZNLW1hbmFnZWQgcmVzb3VyY2VzIHdpdGhpbiBhIGN1c3RvbWVyIEFXUyBPcmdhbml6YXRpb24gYWNjb3VudC4gKi9cbiAgICBwdWJsaWMgRk1TU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuRk1TU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgQW1hem9uIEZTeCB0byBkZWxldGUgaXRzIFNlcnZpY2UgTGlua2VkIFJvbGVzIGZvciBBbWF6b24gUzMgYWNjZXNzICovXG4gICAgcHVibGljIEZTeERlbGV0ZVNlcnZpY2VMaW5rZWRSb2xlQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkZTeERlbGV0ZVNlcnZpY2VMaW5rZWRSb2xlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHRoZSByZXF1aXJlZCBwZXJtaXNzaW9ucyBmb3IgY29tcHV0ZSBhY3Rpb25zIGluIGFuIEFtYXpvbiBHYW1lTGlmdCBjb250YWluZXIgZmxlZXQsIGluY2x1ZGluZyBhY2Nlc3MgdG8gZGVwZW5kZW5jaWVzIHN1Y2ggYXMgQW1hem9uIFMzLiAqL1xuICAgIHB1YmxpYyBHYW1lTGlmdENvbnRhaW5lckZsZWV0UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkdhbWVMaWZ0Q29udGFpbmVyRmxlZXRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdG8gYWxsb3cgR2FtZWxpZnQgR2FtZVNlcnZlckdyb3VwcyB0byBtYW5hZ2UgY3VzdG9tZXIgcmVzb3VyY2VzICovXG4gICAgcHVibGljIEdhbWVMaWZ0R2FtZVNlcnZlckdyb3VwUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkdhbWVMaWZ0R2FtZVNlcnZlckdyb3VwUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBtYW5hZ2VkIHBvbGljeSBncmFudHMgcGVybWlzc2lvbiB0byBjb25uZWN0IHdpdGggQW1hem9uIFEgYW5kIHV0aWxpemUgdGhlIGZlYXR1cmVzIGluIHRoZSBHaXRMYWIgRHVvIHdpdGggQW1hem9uIFEgaW50ZWdyYXRpb24uICovXG4gICAgcHVibGljIEdpdExhYkR1b1dpdGhBbWF6b25RUGVybWlzc2lvbnNQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuR2l0TGFiRHVvV2l0aEFtYXpvblFQZXJtaXNzaW9uc1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93IEdsb2JhbEFjY2VsZXJhdG9yIFVzZXJzIGZ1bGwgQWNjZXNzIHRvIGFsbCBBUElzICovXG4gICAgcHVibGljIEdsb2JhbEFjY2VsZXJhdG9yRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5HbG9iYWxBY2NlbGVyYXRvckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvdyBHbG9iYWxBY2NlbGVyYXRvciBVc2VycyBBY2Nlc3MgdG8gUmVhZCBPbmx5IEFQSXMgKi9cbiAgICBwdWJsaWMgR2xvYmFsQWNjZWxlcmF0b3JSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5HbG9iYWxBY2NlbGVyYXRvclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBhY2Nlc3MgdG8gdGhlIEdyZWVuZ3Jhc3MgT1RBIFVwZGF0ZSBhcnRpZmFjdHMgaW4gYWxsIEdyZWVuZ3Jhc3MgcmVnaW9ucyAqL1xuICAgIHB1YmxpYyBHcmVlbmdyYXNzT1RBVXBkYXRlQXJ0aWZhY3RBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuR3JlZW5ncmFzc09UQVVwZGF0ZUFydGlmYWN0QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQVdTIEhlYWx0aCBwb2xpY3kgdG8gZW5hYmxlIE9yZ2FuaXphdGlvbmFsIFZpZXcgZmVhdHVyZSAqL1xuICAgIHB1YmxpYyBIZWFsdGhPcmdhbml6YXRpb25zU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuSGVhbHRoT3JnYW5pemF0aW9uc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIGFjY2VzcyB0byByZWFkIGFsbCBhY2Nlc3MgaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgSUFNIGFjY2VzcyBhZHZpc29yIHN1Y2ggYXMgc2VydmljZSBsYXN0IGFjY2Vzc2VkIGluZm9ybWF0aW9uLiAqL1xuICAgIHB1YmxpYyBJQU1BY2Nlc3NBZHZpc29yUmVhZE9ubHkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuSUFNQWNjZXNzQWR2aXNvclJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSUFNIEFjY2VzcyBBbmFseXplciAqL1xuICAgIHB1YmxpYyBJQU1BY2Nlc3NBbmFseXplckZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuSUFNQWNjZXNzQW5hbHl6ZXJGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBJQU0gQWNjZXNzIEFuYWx5emVyIHJlc291cmNlcyAqL1xuICAgIHB1YmxpYyBJQU1BY2Nlc3NBbmFseXplclJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTUFjY2Vzc0FuYWx5emVyUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgcmVxdWlyZWQgdG8gY2hlY2sgdGhlIHByZXNlbmNlIG9mIHJvb3QgdXNlciBjcmVkZW50aWFscyBzdWNoIGFzIHJvb3QgdXNlciBwYXNzd29yZCBhbmQgcm9vdCB1c2VyIGFjY2VzcyBrZXlzIHVzaW5nIHRoZSBTZWN1cml0eSBUb2tlbiBTZXJ2aWNlIChTVFMpIEFzc3VtZVJvb3QgQVBJLiBVc2UgdGhpcyBtYW5hZ2VkIHBvbGljeSBvbmx5IHdpdGggdGhlIFNUUyBBc3N1bWVSb290IGFjdGlvbi4gKi9cbiAgICBwdWJsaWMgSUFNQXVkaXRSb290VXNlckNyZWRlbnRpYWxzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTUF1ZGl0Um9vdFVzZXJDcmVkZW50aWFscyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyByZXF1aXJlZCB0byBjcmVhdGUgYSByb290IHVzZXIgcGFzc3dvcmQgdXNpbmcgdGhlIFNlY3VyaXR5IFRva2VuIFNlcnZpY2UgKFNUUykgQXNzdW1lUm9vdCBBUEkuICBVc2UgdGhpcyBtYW5hZ2VkIHBvbGljeSBvbmx5IHdpdGggdGhlIFNUUyBBc3N1bWVSb290IGFjdGlvbi4gKi9cbiAgICBwdWJsaWMgSUFNQ3JlYXRlUm9vdFVzZXJQYXNzd29yZCgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JQU1DcmVhdGVSb290VXNlclBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHJlcXVpcmVkIHRvIGRlbGV0ZSBhbGwgcm9vdCB1c2VyIGNyZWRlbnRpYWxzIHN1Y2ggYXMgcm9vdCBwYXNzd29yZCBhbmQgcm9vdCBhY2Nlc3Mga2V5cyB1c2luZyB0aGUgU2VjdXJpdHkgVG9rZW4gU2VydmljZSAoU1RTKSBBc3N1bWVSb290IEFQSS4gIFVzZSB0aGlzIG1hbmFnZWQgcG9saWN5IG9ubHkgd2l0aCB0aGUgU1RTIEFzc3VtZVJvb3QgYWN0aW9uLiAqL1xuICAgIHB1YmxpYyBJQU1EZWxldGVSb290VXNlckNyZWRlbnRpYWxzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTURlbGV0ZVJvb3RVc2VyQ3JlZGVudGlhbHMpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBJQU0gdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlLiAqL1xuICAgIHB1YmxpYyBJQU1GdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIElBTSB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuICovXG4gICAgcHVibGljIElBTVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIGFuIElBTSB1c2VyIHRvIG1hbmFnZSB0aGVpciBvd24gU2VydmljZSBTcGVjaWZpYyBDcmVkZW50aWFscy4gKi9cbiAgICBwdWJsaWMgSUFNU2VsZk1hbmFnZVNlcnZpY2VTcGVjaWZpY0NyZWRlbnRpYWxzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTVNlbGZNYW5hZ2VTZXJ2aWNlU3BlY2lmaWNDcmVkZW50aWFscyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHRoZSBhYmlsaXR5IGZvciBhbiBJQU0gdXNlciB0byBjaGFuZ2UgdGhlaXIgb3duIHBhc3N3b3JkLiAqL1xuICAgIHB1YmxpYyBJQU1Vc2VyQ2hhbmdlUGFzc3dvcmQoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuSUFNVXNlckNoYW5nZVBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgdGhlIGFiaWxpdHkgZm9yIGFuIElBTSB1c2VyIHRvIG1hbmFnZSB0aGVpciBvd24gU1NIIGtleXMuICovXG4gICAgcHVibGljIElBTVVzZXJTU0hLZXlzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLklBTVVzZXJTU0hLZXlzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gSW50ZXJhY3RpdmUgVmlkZW8gU2VydmljZSAoSVZTKSwgQWxzbyBpbmNsdWRlZCBwZXJtaXNzaW9ucyBmb3IgZGVwZW5kZW50IHNlcnZpY2VzLCBuZWVkZWQgZm9yIGZ1bGwgYWNjZXNzIHRvIHRoZSBpdnMgY29uc29sZS4gKi9cbiAgICBwdWJsaWMgSVZTRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JVlNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBJVlMgTG93LUxhdGVuY3kgYW5kIFJlYWwtVGltZSBzdHJlYW1pbmcgQVBJcyAqL1xuICAgIHB1YmxpYyBJVlNSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JVlNSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UgTGlua2VkIFJvbGUgdG8gcGVyZm9ybSBTMyBQdXRPYmplY3QgdG8gcmVjb3JkaW5nIElWUyBsaXZlIHN0cmVhbXMgKi9cbiAgICBwdWJsaWMgSVZTUmVjb3JkVG9TMygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5JVlNSZWNvcmRUb1MzKTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIEthZmthIENvbm5lY3QgcGVybWlzc2lvbiB0byBtYW5hZ2UgQVdTIHJlc291cmNlcyBvbiB5b3VyIGJlaGFsZi4gKi9cbiAgICBwdWJsaWMgS2Fma2FDb25uZWN0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuS2Fma2FDb25uZWN0U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBJQU0gc2VydmljZSBsaW5rZWQgcm9sZSBwb2xpY3kgZm9yIEthZmthLiAqL1xuICAgIHB1YmxpYyBLYWZrYVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkthZmthU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgdGhlIHJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIEFtYXpvbiBLZXlzcGFjZXMgZm9yIENoYW5nZSBEYXRhIENhcHR1cmUgKi9cbiAgICBwdWJsaWMgS2V5c3BhY2VzQ0RDU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuS2V5c3BhY2VzQ0RDU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyByZXF1aXJlZCBieSBLZXlzcGFjZXMgZm9yIGNyb3NzLXJlZ2lvbiBkYXRhIHJlcGxpY2F0aW9uICovXG4gICAgcHVibGljIEtleXNwYWNlc1JlcGxpY2F0aW9uU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuS2V5c3BhY2VzUmVwbGljYXRpb25TZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSB0byBncmFudCB0ZW1wb3JhcnkgZGF0YSBhY2Nlc3MgdG8gTGFrZSBGb3JtYXRpb24gcmVzb3VyY2VzICovXG4gICAgcHVibGljIExha2VGb3JtYXRpb25EYXRhQWNjZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTGFrZUZvcm1hdGlvbkRhdGFBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIExleCBCb3QgdXNlIGNhc2UgKi9cbiAgICBwdWJsaWMgTGV4Qm90UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkxleEJvdFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgQVdTIExleCBDaGFubmVsIHVzZSBjYXNlICovXG4gICAgcHVibGljIExleENoYW5uZWxQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTGV4Q2hhbm5lbFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFXUyBMaWdodHNhaWwgc2VydmljZSBsaW5rZWQgcm9sZSBwb2xpY3kgd2hpY2ggZ3JhbnRzIHBlcm1pc3Npb25zIHRvIGV4cG9ydCByZXNvdXJjZXMgKi9cbiAgICBwdWJsaWMgTGlnaHRzYWlsRXhwb3J0QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLkxpZ2h0c2FpbEV4cG9ydEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9uIHRvIHJlZ2lzdGVyIE1lZGlhQ29ubmVjdCBHYXRld2F5IEluc3RhbmNlcyB0byBhIE1lZGlhQ29ubmVjdCBHYXRld2F5LiAqL1xuICAgIHB1YmxpYyBNZWRpYUNvbm5lY3RHYXRld2F5SW5zdGFuY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk1lZGlhQ29ubmVjdEdhdGV3YXlJbnN0YW5jZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgTWVkaWFQYWNrYWdlIHRvIHB1Ymxpc2ggbG9ncyB0byBDbG91ZFdhdGNoICovXG4gICAgcHVibGljIE1lZGlhUGFja2FnZVNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk1lZGlhUGFja2FnZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIE1lbW9yeURCIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIG9uIHlvdXIgYmVoYWxmIGFzIG5lY2Vzc2FyeSBmb3IgbWFuYWdpbmcgeW91ciByZXNvdXJjZXMuICovXG4gICAgcHVibGljIE1lbW9yeURCU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTWVtb3J5REJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFBvbGljeSBmb3IgRGF0YWJhc2UgTWlncmF0aW9uIFNlcnZpY2UgdG8gYXNzdW1lIHJvbGUgaW4gY3VzdG9tZXIncyBhY2NvdW50IHRvIGNhbGwgTWlncmF0aW9uIEh1YiAqL1xuICAgIHB1YmxpYyBNaWdyYXRpb25IdWJETVNBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5NaWdyYXRpb25IdWJETVNBY2Nlc3NTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBNaWdyYXRpb24gSHViIHRvIGNhbGwgQXBwbGljYXRpb24gRGlzY292ZXJ5IFNlcnZpY2Ugb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgTWlncmF0aW9uSHViU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTWlncmF0aW9uSHViU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgZm9yIFNlcnZlciBNaWdyYXRpb24gU2VydmljZSB0byBhc3N1bWUgcm9sZSBpbiBjdXN0b21lcidzIGFjY291bnQgdG8gY2FsbCBNaWdyYXRpb24gSHViICovXG4gICAgcHVibGljIE1pZ3JhdGlvbkh1YlNNU0FjY2Vzc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk1pZ3JhdGlvbkh1YlNNU0FjY2Vzc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUG9saWN5IGZvciBBV1MgTW9uaXRyb24gc2VydmljZSBsaW5rZWQgcm9sZSBncmFudGluZyBhY2Nlc3MgdG8gcmVxdWlyZWQgY3VzdG9tZXIgcmVzb3VyY2VzLiAqL1xuICAgIHB1YmxpYyBNb25pdHJvblNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk1vbml0cm9uU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBNdWx0aS1wYXJ0eSBhcHByb3ZhbC4gVGhpcyBwb2xpY3kgYWxzbyBpbmNsdWRlcyByZWxhdGVkIHBlcm1pc3Npb25zIHRvIEFXUyBPcmdhbml6YXRpb25zIGFuZCBBV1MgSUFNIElkZW50aXR5IGZvciBtYW5hZ2luZyBhcHByb3ZhbCB0ZWFtcyBhbmQgaWRlbnRpdHkgc291cmNlcy4gKi9cbiAgICBwdWJsaWMgTXVsdGlQYXJ0eUFwcHJvdmFsRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5NdWx0aVBhcnR5QXBwcm92YWxGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBNdWx0aS1wYXJ0eSBhcHByb3ZhbC4gVGhpcyBwb2xpY3kgYWxzbyBpbmNsdWRlcyByZWxhdGVkIHJlYWQgcGVybWlzc2lvbiB0byBBV1MgT3JnYW5pemF0aW9ucyBhbmQgQVdTIElBTSBJZGVudGl0eSBmb3IgYXBwcm92YWwgdGVhbXMgYW5kIGlkZW50aXR5IHNvdXJjZXMuICovXG4gICAgcHVibGljIE11bHRpUGFydHlBcHByb3ZhbFJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk11bHRpUGFydHlBcHByb3ZhbFJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gbWFuYWdlIEFtYXpvbiBOZXB0dW5lIHVzaW5nIHRoZSBBV1MgQ29uc29sZS4gTm90ZSB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBmdWxsIGFjY2VzcyB0byBwdWJsaXNoIG9uIGFsbCBTTlMgdG9waWNzIHdpdGhpbiB0aGUgYWNjb3VudCwgcGVybWlzc2lvbnMgdG8gY3JlYXRlIGFuZCBlZGl0IEFtYXpvbiBFQzIgaW5zdGFuY2VzIGFuZCBWUEMgY29uZmlndXJhdGlvbnMsIHBlcm1pc3Npb25zIHRvIHZpZXcgYW5kIGxpc3Qga2V5cyBvbiBBbWF6b24gS01TLCBhbmQgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJEUy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwczovL2F3cy5hbWF6b24uY29tL25lcHR1bmUvZmFxcy8uICovXG4gICAgcHVibGljIE5lcHR1bmVDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5OZXB0dW5lQ29uc29sZUZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gTmVwdHVuZS4gTm90ZSB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBmdWxsIGFjY2VzcyB0byBwdWJsaXNoIG9uIGFsbCBTTlMgdG9waWNzIHdpdGhpbiB0aGUgYWNjb3VudCBhbmQgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFJEUy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwczovL2F3cy5hbWF6b24uY29tL25lcHR1bmUvZmFxcy8uICovXG4gICAgcHVibGljIE5lcHR1bmVGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk5lcHR1bmVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBhbGwgQW1hem9uIE5lcHR1bmUgQW5hbHl0aWNzIHJlc291cmNlcyBhbG9uZyB3aXRoIHJlYWQgb25seSBwZXJtaXNzaW9ucyBmb3IgZGVwZW5kZW50IHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBOZXB0dW5lR3JhcGhSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5OZXB0dW5lR3JhcGhSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQgb25seSBhY2Nlc3MgdG8gQW1hem9uIE5lcHR1bmUuIE5vdGUgdGhhdCB0aGlzIHBvbGljeSBhbHNvIGdyYW50cyBhY2Nlc3MgdG8gQW1hem9uIFJEUyByZXNvdXJjZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9uZXB0dW5lL2ZhcXMvLiAqL1xuICAgIHB1YmxpYyBOZXB0dW5lUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTmVwdHVuZVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHBlcm1pc3Npb25zIHRvIEFXUyBzZXJ2aWNlcyBhbmQgYWN0aW9ucyByZXF1aXJlZCB0byBzZXQgdXAgYW5kIGNvbmZpZ3VyZSBBV1MgbmV0d29yayByZXNvdXJjZXMuICovXG4gICAgcHVibGljIE5ldHdvcmtBZG1pbmlzdHJhdG9yKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk5ldHdvcmtBZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHRoZSBBV1MgU2hpZWxkIG5ldHdvcmsgc2VjdXJpdHkgZGlyZWN0b3Igc2VydmljZSBsaW5rZWQgcm9sZSB0byBhc3Nlc3Mgc3BlY2lmaWVkIGVudmlyb25tZW50cy4gKi9cbiAgICBwdWJsaWMgTmV0d29ya1NlY3VyaXR5RGlyZWN0b3JTZXJ2aWNlTGlua2VkUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5OZXR3b3JrU2VjdXJpdHlEaXJlY3RvclNlcnZpY2VMaW5rZWRSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWNjZXNzIHBvbGljeSB0byBhbGxvdyBOZXR3b3JrU2VjdXJpdHlNYW5hZ2VyIHNlcnZpY2UgbGlua2VkIHJvbGUgdG8gcGVyZm9ybSBOZXR3b3JrU2VjdXJpdHlNYW5hZ2VyLXJlbGF0ZWQgYWN0aW9ucyBvbiBOZXR3b3JrU2VjdXJpdHlNYW5hZ2VyLW1hbmFnZWQgcmVzb3VyY2VzIHdpdGhpbiBhIGN1c3RvbWVyIEFXUyBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBOZXR3b3JrU2VjdXJpdHlNYW5hZ2VyU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTmV0d29ya1NlY3VyaXR5TWFuYWdlclNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgYWxsb3dzIE5vdmFBY3QgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMgdG8gb3BlcmF0ZSB0aGUgTm92YSBBY3QgYWdlbnRzLiAqL1xuICAgIHB1YmxpYyBOb3ZhQWN0U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuTm92YUFjdFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBPYnNlcnZhYmlsaXR5IEFjY2VzcyBNYW5hZ2VyICovXG4gICAgcHVibGljIE9BTUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuT0FNRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIFJlYWQgT25seSBhY2Nlc3MgdG8gQ2xvdWRXYXRjaCBPYnNlcnZhYmlsaXR5IEFjY2VzcyBNYW5hZ2VyICovXG4gICAgcHVibGljIE9BTVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLk9BTVJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBPcGVuU2VhcmNoIEluZ2VzdGlvbiB0byBkZXNjcmliZSBuZXR3b3JrIHJlc291cmNlcyBhbmQgd3JpdGUgc2VydmljZSBtZXRyaWNzIHRvIGNsb3Vkd2F0Y2ggKi9cbiAgICBwdWJsaWMgT3BlbnNlYXJjaEluZ2VzdGlvblNlbGZNYW5hZ2VkVnBjZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5PcGVuc2VhcmNoSW5nZXN0aW9uU2VsZk1hbmFnZWRWcGNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGFzc29jaWF0ZSBhbmQgZGlzc29jaWF0ZSBwYXJ0bmVyIGNlbnRyYWwgdXNlcnMgd2l0aCBJQU0gcm9sZXMgKi9cbiAgICBwdWJsaWMgUGFydG5lckNlbnRyYWxBY2NvdW50TWFuYWdlbWVudFVzZXJSb2xlQXNzb2NpYXRpb24oKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUGFydG5lckNlbnRyYWxBY2NvdW50TWFuYWdlbWVudFVzZXJSb2xlQXNzb2NpYXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgcHJvdmlkZXMgYWNjZXNzIHRvIG1hbmFnZSBhbGwgdGhlIGluY2VudGl2ZSBiZW5lZml0cyBpbiBBV1MgUGFydG5lciBDZW50cmFsLiAqL1xuICAgIHB1YmxpYyBQYXJ0bmVyQ2VudHJhbEluY2VudGl2ZUJlbmVmaXRNYW5hZ2VtZW50KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlBhcnRuZXJDZW50cmFsSW5jZW50aXZlQmVuZWZpdE1hbmFnZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1Mgc2VydmljZXMgYW5kIHJlc291cmNlcywgYnV0IGRvZXMgbm90IGFsbG93IG1hbmFnZW1lbnQgb2YgVXNlcnMgYW5kIGdyb3Vwcy4gKi9cbiAgICBwdWJsaWMgUG93ZXJVc2VyQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlBvd2VyVXNlckFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFXUyBQcmljaW5nIFBsYW4gTWFuYWdlciAqL1xuICAgIHB1YmxpYyBQcmljaW5nUGxhbk1hbmFnZXJGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlByaWNpbmdQbGFuTWFuYWdlckZ1bGxBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyByZWFkIG9ubHkgYWNjZXNzIHRvIEFXUyBQcmljaW5nIFBsYW4gTWFuYWdlciAqL1xuICAgIHB1YmxpYyBQcmljaW5nUGxhbk1hbmFnZXJSZWFkb25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5QcmljaW5nUGxhbk1hbmFnZXJSZWFkb25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIFEgQXBwcy4gKi9cbiAgICBwdWJsaWMgUUFwcHNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5RQXBwc1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIHBlcm1pc3Npb25zIHRvIFFCdXNpbmVzcyB0byBjYWxsIFF1aWNrU2lnaHQgQVBJcyBmb3IgdGhlIFF1aWNrU2lnaHQgcGx1Z2luICovXG4gICAgcHVibGljIFFCdXNpbmVzc1F1aWNrc2lnaHRQbHVnaW5Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUUJ1c2luZXNzUXVpY2tzaWdodFBsdWdpblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyBwZXJtaXNzaW9ucyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgQW1hem9uIFEgKi9cbiAgICBwdWJsaWMgUUJ1c2luZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUUJ1c2luZXNzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQb2xpY3kgdXNlZCBieSBRdWlja1NpZ2h0IHRlYW0gdG8gYWNjZXNzIGN1c3RvbWVyIGRhdGEgcHJvZHVjZWQgYnkgUzMgU3RvcmFnZSBNYW5hZ2VtZW50IEFuYWx5dGljcy4gKi9cbiAgICBwdWJsaWMgUXVpY2tTaWdodEFjY2Vzc0ZvclMzU3RvcmFnZU1hbmFnZW1lbnRBbmFseXRpY3NSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5RdWlja1NpZ2h0QWNjZXNzRm9yUzNTdG9yYWdlTWFuYWdlbWVudEFuYWx5dGljc1JlYWRPbmx5KTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBBbWF6b24gUkRTIHNlcnZpY2Ugcm9sZS4gKi9cbiAgICBwdWJsaWMgUkRTQ2xvdWRIc21BdXRob3JpemF0aW9uUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5SRFNDbG91ZEhzbUF1dGhvcml6YXRpb25Sb2xlKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1Mgc2VydmljZXMgYW5kIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBHcmFudHMgYW4gSUFNIHJvbGUgb3IgdXNlciBmdWxsIGFjY2VzcyB0byB2aWV3IHJlOkludmVudCBwYXNzIGNoYXJnZSBkZXRhaWxzIGFuZCBhcHByb3ZlIGJpbGxpbmcgdG8gdGhlaXIgQVdTIGFjY291bnRzICovXG4gICAgcHVibGljIFJlSW52ZW50VGlja2V0QXBwcm92YWxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUmVJbnZlbnRUaWNrZXRBcHByb3ZhbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIFJlc291cmNlIEdyb3VwcyBhbmQgVGFnIEVkaXRvci4gKi9cbiAgICBwdWJsaWMgUmVzb3VyY2VHcm91cHNhbmRUYWdFZGl0b3JGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJlc291cmNlR3JvdXBzYW5kVGFnRWRpdG9yRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyB0byB1c2UgUmVzb3VyY2UgR3JvdXBzIGFuZCBUYWcgRWRpdG9yLCBidXQgZG9lcyBub3QgYWxsb3cgZWRpdGluZyBvZiB0YWdzIHZpYSB0aGUgVGFnIEVkaXRvci4gKi9cbiAgICBwdWJsaWMgUmVzb3VyY2VHcm91cHNhbmRUYWdFZGl0b3JSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5SZXNvdXJjZUdyb3Vwc2FuZFRhZ0VkaXRvclJlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBSZXNvdXJjZSBHcm91cHMgdG8gcXVlcnkgdGhlIEFXUyBzZXJ2aWNlcyB0aGF0IG93biB5b3VyIHJlc291cmNlcyB0byBrZWVwIHRoZSBncm91cCB1cC10by1kYXRlICovXG4gICAgcHVibGljIFJlc291cmNlR3JvdXBzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUmVzb3VyY2VHcm91cHNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIHRvIHRhZyBhbmQgdW50YWcgYWxsIHRoZSByZXNvdXJjZXMgc3VwcG9ydGVkIGJ5IFJlc291cmNlIEdyb3VwcyBUYWdnaW5nIEFQSS4gVGhpcyBwb2xpY3kgYWxzbyBncmFudHMgdGhlIHBlcm1pc3Npb25zIHJlcXVpcmVkIHRvIHJldHJpZXZlIGFsbCB0YWdnZWQsIG9yIHByZXZpb3VzbHkgdGFnZ2VkLCByZXNvdXJjZXMgdGhyb3VnaCB0aGUgUmVzb3VyY2UgR3JvdXBzIFRhZ2dpbmcgQVBJLiAqL1xuICAgIHB1YmxpYyBSZXNvdXJjZUdyb3Vwc1RhZ2dpbmdBUElUYWdVbnRhZ1N1cHBvcnRlZFJlc291cmNlcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5SZXNvdXJjZUdyb3Vwc1RhZ2dpbmdBUElUYWdVbnRhZ1N1cHBvcnRlZFJlc291cmNlcyk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgT3BlblNoaWZ0IEFtYXpvbiBFQlMgQ29udGFpbmVyIFN0b3JhZ2UgSW50ZXJmYWNlIChDU0kpIERyaXZlciBPcGVyYXRvciB0byBpbnN0YWxsIGFuZCBtYWludGFpbiB0aGUgQW1hem9uIEVCUyBDU0kgZHJpdmVyIG9uIGEgUmVkIEhhdCBPcGVuU2hpZnQgU2VydmljZSBvbiBBV1MgKFJPU0EpIGNsdXN0ZXIuIFRoZSBBbWF6b24gRUJTIENTSSBkcml2ZXIgYWxsb3dzIFJPU0EgY2x1c3RlcnMgdG8gbWFuYWdlIHRoZSBsaWZlY3ljbGUgb2YgQW1hem9uIEVCUyB2b2x1bWVzIGZvciBwZXJzaXN0ZW50IHZvbHVtZXMuICovXG4gICAgcHVibGljIFJPU0FBbWF6b25FQlNDU0lEcml2ZXJPcGVyYXRvclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBQW1hem9uRUJTQ1NJRHJpdmVyT3BlcmF0b3JQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgdGhlIE9wZW5TaGlmdCBDbG91ZCBOZXR3b3JrIENvbmZpZyBDb250cm9sbGVyIE9wZXJhdG9yIHRvIHByb3Zpc2lvbiBhbmQgbWFuYWdlIG5ldHdvcmtpbmcgcmVzb3VyY2VzIGZvciB1c2UgYnkgdGhlIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSBjbHVzdGVyIG5ldHdvcmtpbmcgb3ZlcmxheS4gVGhlIE9wZW5TaGlmdCBDbG91ZCBOZXR3b3JrIE9wZXJhdG9yIGludGVyZmFjZXMgd2l0aCBBV1MgQVBJcyBvbiBiZWhhbGYgb2YgdGhlIG5ldHdvcmsgcGx1Z2lucyB2aWEgQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9ucy4gVGhlIG9wZXJhdG9yIHVzZXMgdGhlc2UgcG9saWN5IHBlcm1pc3Npb25zIHRvIG1hbmFnZSBwcml2YXRlIElQIGFkZHJlc3NlcyBmb3IgQW1hem9uIEVDMiBpbnN0YW5jZXMgYXMgcGFydCBvZiB0aGUgUk9TQSBjbHVzdGVyLiAqL1xuICAgIHB1YmxpYyBST1NBQ2xvdWROZXR3b3JrQ29uZmlnT3BlcmF0b3JQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQUNsb3VkTmV0d29ya0NvbmZpZ09wZXJhdG9yUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSBjb250cm9sIHBsYW5lIHRvIG1hbmFnZSBST1NBIGNsdXN0ZXIgQW1hem9uIEVDMiBhbmQgQW1hem9uIFJvdXRlIDUzIHJlc291cmNlcy4gKi9cbiAgICBwdWJsaWMgUk9TQUNvbnRyb2xQbGFuZU9wZXJhdG9yUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FDb250cm9sUGxhbmVPcGVyYXRvclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgT3BlblNoaWZ0IEltYWdlIFJlZ2lzdHJ5IE9wZXJhdG9yIHRvIHByb3Zpc2lvbiBhbmQgbWFuYWdlIEFtYXpvbiBTMyBidWNrZXRzIGFuZCBvYmplY3RzIGZvciB1c2UgYnkgdGhlIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSBpbi1jbHVzdGVyIGltYWdlIHJlZ2lzdHJ5IHRvIHNhdGlzZnkgUk9TQSBzdG9yYWdlIHJlcXVpcmVtZW50cy4gVGhlIE9wZW5TaGlmdCBJbWFnZSBSZWdpc3RyeSBPcGVyYXRvciBpbnN0YWxscyBhbmQgbWFpbnRhaW5zIHRoZSBpbnRlcm5hbCByZWdpc3RyeSBvZiBhIFJlZCBIYXQgT3BlblNoaWZ0IGNsdXN0ZXIuICovXG4gICAgcHVibGljIFJPU0FJbWFnZVJlZ2lzdHJ5T3BlcmF0b3JQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQUltYWdlUmVnaXN0cnlPcGVyYXRvclBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgT3BlblNoaWZ0IEluZ3Jlc3MgT3BlcmF0b3IgdG8gcHJvdmlzaW9uIGFuZCBtYW5hZ2UgbG9hZCBiYWxhbmNlcnMgYW5kIGRvbWFpbiBuYW1lIHN5c3RlbSAoRE5TKSBjb25maWd1cmF0aW9ucyBmb3IgUmVkIEhhdCBPcGVuU2hpZnQgU2VydmljZSBvbiBBV1MgKFJPU0EpIGNsdXN0ZXJzLiBUaGUgcG9saWN5IGFsbG93cyByZWFkIGFjY2VzcyB0byB0YWcgdmFsdWVzLCB3aGljaCB0aGUgb3BlcmF0b3IgZmlsdGVycyBmb3IgUm91dGUgNTMgcmVzb3VyY2VzIHRvIGRpc2NvdmVyIGhvc3RlZCB6b25lcy4gKi9cbiAgICBwdWJsaWMgUk9TQUluZ3Jlc3NPcGVyYXRvclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBSW5ncmVzc09wZXJhdG9yUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBSZWQgSGF0IE9wZW5TaGlmdCBTZXJ2aWNlIG9uIEFXUyAoUk9TQSkgaW5zdGFsbGVyIHRvIG1hbmFnZSBBV1MgcmVzb3VyY2VzIHRoYXQgc3VwcG9ydCBST1NBIGNsdXN0ZXIgaW5zdGFsbGF0aW9uLiBUaGlzIGluY2x1ZGVzIG1hbmFnaW5nIGluc3RhbmNlIHByb2ZpbGVzIGZvciBST1NBIHdvcmtlciBub2Rlcy4gKi9cbiAgICBwdWJsaWMgUk9TQUluc3RhbGxlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBSW5zdGFsbGVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHRoZSBST1NBIEthcnBlbnRlciBjb250cm9sbGVyIHRvIGR5bmFtaWNhbGx5IHByb3Zpc2lvbiBhbmQgbWFuYWdlIEVDMiBpbnN0YW5jZXMgZm9yIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSBob3N0ZWQgY29udHJvbCBwbGFuZSBjbHVzdGVycy4gVGhpcyBpbmNsdWRlcyBFQzIgZmxlZXQgYW5kICAgaW5zdGFuY2UgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIGluc3RhbmNlIHByaWNpbmcgcXVlcmllcywgS01TIG9wZXJhdGlvbnMgZm9yIEVCUyB2b2x1bWUgZW5jcnlwdGlvbiB3aXRoIGN1c3RvbWVyLW1hbmFnZWQga2V5cywgYW5kIElBTSBpbnN0YW5jZSBwcm9maWxlIG1hbmFnZW1lbnQuICovXG4gICAgcHVibGljIFJPU0FLYXJwZW50ZXJDb250cm9sbGVyUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FLYXJwZW50ZXJDb250cm9sbGVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBidWlsdC1pbiBST1NBIEFXUyBFbmNyeXB0aW9uIFByb3ZpZGVyIHRvIG1hbmFnZSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSAoS01TKSBrZXlzIHRvIHN1cHBvcnQgZXRjZCBkYXRhIGVuY3J5cHRpb24gdXNpbmcgYSBjdXN0b21lciBwcm92aWRlZCBBV1MgS01TIGtleS4gVGhlIHBvbGljeSBhbGxvd3MgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiBvZiBkYXRhIHVzaW5nIEtNUyBrZXlzLiAqL1xuICAgIHB1YmxpYyBST1NBS01TUHJvdmlkZXJQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQUtNU1Byb3ZpZGVyUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIHRoZSBST1NBIEt1YmVybmV0ZXMgY29udHJvbGxlciB0byBtYW5hZ2UgQW1hem9uIEVDMiwgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyAoRUxCKSwgYW5kIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIChLTVMpIHJlc291cmNlcyBmb3IgYSBST1NBIGNsdXN0ZXIuICovXG4gICAgcHVibGljIFJPU0FLdWJlQ29udHJvbGxlclBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5ST1NBS3ViZUNvbnRyb2xsZXJQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBwcm92aWRlcyB0aGUgcGVybWlzc2lvbnMgcmVxdWlyZWQgdG8gbWFuYWdlIHRoZSBSZWQgSGF0IE9wZW5TaGlmdCBTZXJ2aWNlIG9uIEFXUyAoUk9TQSkgc3Vic2NyaXB0aW9uLiAqL1xuICAgIHB1YmxpYyBST1NBTWFuYWdlU3Vic2NyaXB0aW9uKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FNYW5hZ2VTdWJzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgUmVkIEhhdCBPcGVuU2hpZnQgU2VydmljZSBvbiBBV1MgKFJPU0EpIHRvIG1hbmFnZSBjbHVzdGVyIEVDMiBpbnN0YW5jZXMgYXMgd29ya2VyIG5vZGVzLCBpbmNsdWRpbmcgcGVybWlzc2lvbiB0byBjb25maWd1cmUgc2VjdXJpdHkgZ3JvdXBzIGFuZCB0YWcgaW5zdGFuY2VzIGFuZCB2b2x1bWVzLiBUaGlzIHBvbGljeSBhbHNvIGFsbG93cyBmb3IgdGhlIHVzZSBvZiBFQzIgaW5zdGFuY2VzIHdpdGggZGlzayBlbmNyeXB0aW9uIHByb3ZpZGVkIGJ5IEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIChLTVMpIGtleXMuICovXG4gICAgcHVibGljIFJPU0FOb2RlUG9vbE1hbmFnZW1lbnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQU5vZGVQb29sTWFuYWdlbWVudFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgUmVkIEhhdCBPcGVuU2hpZnQgU2VydmljZSBvbiBBV1MgKFJPU0EpIGluc3RhbGxlciB0byBjb25maWd1cmUgVlBDIEVuZHBvaW50cyBhbmQgU2VjdXJpdHkgR3JvdXBzLiBJbnRlbmRlZCB0byBiZSB1c2VkIG9uIGEgc2hhcmVkIFZQQy4gKi9cbiAgICBwdWJsaWMgUk9TQVNoYXJlZFZQQ0VuZHBvaW50UG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FTaGFyZWRWUENFbmRwb2ludFBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyB0aGUgUmVkIEhhdCBPcGVuU2hpZnQgU2VydmljZSBvbiBBV1MgKFJPU0EpIGluc3RhbGxlciB0byBjb25maWd1cmUgUm91dGU1MyByZWNvcmRzLiBJbnRlbmRlZCB0byBiZSB1c2VkIG9uIGEgc2hhcmVkIFZQQy4gKi9cbiAgICBwdWJsaWMgUk9TQVNoYXJlZFZQQ1JvdXRlNTNQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQVNoYXJlZFZQQ1JvdXRlNTNQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBST1NBIHNpdGUgcmVsaWFiaWxpdHkgZW5naW5lZXJpbmcgKFNSRSkgdGhlIHBlcm1pc3Npb25zIG5lZWRlZCB0byBpbml0aWFsbHkgb2JzZXJ2ZSwgZGlhZ25vc2UsIGFuZCBzdXBwb3J0IEFXUyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIFJlZCBIYXQgT3BlblNoaWZ0IFNlcnZpY2Ugb24gQVdTIChST1NBKSBjbHVzdGVycywgaW5jbHVkaW5nIHRoZSBhYmlsaXR5IHRvIGNoYW5nZSBST1NBIGNsdXN0ZXIgbm9kZSBzdGF0ZS4gKi9cbiAgICBwdWJsaWMgUk9TQVNSRVN1cHBvcnRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUk9TQVNSRVN1cHBvcnRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbGxvd3MgUmVkIEhhdCBPcGVuU2hpZnQgU2VydmljZSBvbiBBV1MgKFJPU0EpIHdvcmtlciBub2RlcyBpbiB5b3VyIGFjY291bnQgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gRUMyIGluc3RhbmNlcyBhbmQgQVdTIFJlZ2lvbnMgZm9yIGNvbXB1dGUgbm9kZSBsaWZlY3ljbGUgbWFuYWdlbWVudC4gKi9cbiAgICBwdWJsaWMgUk9TQVdvcmtlckluc3RhbmNlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlJPU0FXb3JrZXJJbnN0YW5jZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFNlcnZpY2UgTGlua2VkIFJvbGUgUG9saWN5IGZvciBSb3V0ZSA1MyBSZWNvdmVyeSBSZWFkaW5lc3MgKi9cbiAgICBwdWJsaWMgUm91dGU1M1JlY292ZXJ5UmVhZGluZXNzU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUm91dGU1M1JlY292ZXJ5UmVhZGluZXNzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBFbmFibGVzIGFjY2VzcyB0byBBV1MgU2VydmljZXMgYW5kIFJlc291cmNlcyB1c2VkIG9yIG1hbmFnZWQgYnkgUm91dGU1MyBSZXNvbHZlciAqL1xuICAgIHB1YmxpYyBSb3V0ZTUzUmVzb2x2ZXJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Sb3V0ZTUzUmVzb2x2ZXJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEEgc2VydmljZS1saW5rZWQgcm9sZSByZXF1aXJlZCBmb3IgQVdTIFJUQkZhYnJpYyB0byBjcmVhdGUgYW5kIG1hbmFnZSB5b3VyIG5ldHdvcmsgaW50ZXJmYWNlIHJlc291cmNlcyBhbmQgZGVsaXZlciBtZXRyaWNzLiAqL1xuICAgIHB1YmxpYyBSVEJGYWJyaWNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5SVEJGYWJyaWNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBTMyBTdG9yYWdlIExlbnMgKi9cbiAgICBwdWJsaWMgUzNTdG9yYWdlTGVuc1NlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlMzU3RvcmFnZUxlbnNTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyByZXF1aXJlZCB0byB1bmxvY2sgYSBTMyBidWNrZXQgcG9saWN5IHVzaW5nIHRoZSBTZWN1cml0eSBUb2tlbiBTZXJ2aWNlIChTVFMpIEFzc3VtZVJvb3QgQVBJLiBVc2UgdGhpcyBtYW5hZ2VkIHBvbGljeSBvbmx5IHdpdGggdGhlIFNUUyBBc3N1bWVSb290IGFjdGlvbi4gKi9cbiAgICBwdWJsaWMgUzNVbmxvY2tCdWNrZXRQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuUzNVbmxvY2tCdWNrZXRQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBpbml0aWFsIGFkbWluaXN0cmF0aXZlIGFuZCBpbmRpdmlkdWFsIHNldHVwIHByaXZpbGVnZXMgZm9yIEFtYXpvbiBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8gdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuIEFsbG93cyBsYXVuY2hpbmcgb2YgU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvIFBvcnRhbC4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvQWRtaW5JQU1Db25zb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0FkbWluSUFNQ29uc29sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFkbWluaXN0cmF0aXZlIGV4ZWN1dGlvbiBwb2xpY3kgZm9yIHVzaW5nIElBTSByb2xlcyB3aXRoIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpby4gQWxsb3dzIGFkbWlucyB0byBwcm92aXNpb24sIG1hbmFnZSBhbmQgYWNjZXNzIHJlc291cmNlcyBpbiB5b3VyIGFjY291bnQgKGV4Y2x1ZGluZyBhY2Nlc3MgdG8gZGF0YSByZXNvdXJjZXMpIGZvciBJQU0tYmFzZWQgdXNhZ2Ugb2YgU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9BZG1pbklBTURlZmF1bHRFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvQWRtaW5JQU1EZWZhdWx0RXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWRtaW5pc3RyYXRpdmUgZXhlY3V0aW9uIHBvbGljeSBmb3IgdXNpbmcgSUFNIHJvbGVzIHdpdGggU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvLiBBbGxvd3MgYWRtaW5zIHRvIHByb3Zpc2lvbiwgbWFuYWdlIGFuZCBhY2Nlc3MgcmVzb3VyY2VzIGluIHRoZSBsb2NhbCBhY2NvdW50IChpbmNsdWRpbmcgYnJvYWQgYWNjZXNzIHRvIGFsbCBBUElzIGluIGRhdGEgc2VydmljZXMgbGlrZSBTMywgR2x1ZSwgQ2xvdWRXYXRjaCBMb2dzLCBhbmQgb3RoZXJzKSBmb3IgSUFNLWJhc2VkIHVzYWdlIG9mIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvQWRtaW5JQU1QZXJtaXNzaXZlRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0FkbWluSUFNUGVybWlzc2l2ZUV4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgSUFNIHBvbGljeSBncmFudHMgYW4gSUFNIHJvbGUgZnVsbCBhY2Nlc3MgdG8gQVdTIEdsdWUgRGF0YSBDYXRhbG9nIChtZXRhZGF0YSkgYW5kIEFtYXpvbiBTMyAoYWN0dWFsIGRhdGEpIGZvciBkYXRhIGxha2Ugb3BlcmF0aW9ucywgd2l0aCBhY2Nlc3Mgc2NvcGVkIGJ5IGFjY291bnQsIGFuZCByb2xlIHRhZ3MuICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb0FkbWluUHJvamVjdFVzZXJSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0FkbWluUHJvamVjdFVzZXJSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBCZWRyb2NrIEFnZW50cyB0byBhY2Nlc3MgQW1hem9uIEJlZHJvY2sgbW9kZWxzIGFuZCBvdGhlciByZXNvdXJjZXMgYXR0YWNoZWQgdG8gYW4gYWdlbnQgaW4gU2FnZU1ha2VyIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0FnZW50U2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0FnZW50U2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gYW4gQW1hem9uIEJlZHJvY2sgY2hhdCBhZ2VudCBhcHAncyBjb25maWd1cmF0aW9uIGFuZCBBbWF6b24gQmVkcm9jayBhZ2VudCBpbiBTYWdlTWFrZXIgU3R1ZGlvLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9CZWRyb2NrQ2hhdEFnZW50VXNlclJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0NoYXRBZ2VudFVzZXJSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBCZWRyb2NrIHRvIGFjY2VzcyBBbWF6b24gQmVkcm9jayBtb2RlbHMgYW5kIGRhdGFzZXRzIGZvciBldmFsdWF0aW9uIGpvYnMgaW4gU2FnZU1ha2VyIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0V2YWx1YXRpb25Kb2JTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9CZWRyb2NrRXZhbHVhdGlvbkpvYlNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBCZWRyb2NrIEZsb3dzIHRvIGFjY2VzcyBBbWF6b24gQmVkcm9jayBtb2RlbHMgYW5kIG90aGVyIHJlc291cmNlcyBhdHRhY2hlZCB0byBhIGZsb3cgaW4gU2FnZU1ha2VyIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0Zsb3dTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9CZWRyb2NrRmxvd1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFXUyBMYW1iZGEgdG8gYWNjZXNzIGFuIEFtYXpvbiBCZWRyb2NrIGZ1bmN0aW9uIGNvbXBvbmVudCdzIGNvbmZpZ3VyYXRpb24gaW4gU2FnZU1ha2VyIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0Z1bmN0aW9uRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9CZWRyb2NrRnVuY3Rpb25FeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGNvbmZpZ3VyZSB2ZWN0b3Igc3RvcmVzIGFuZCBBbWF6b24gQmVkcm9jayBrbm93bGVkZ2UgYmFzZXMgaW4gU2FnZU1ha2VyIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0tub3dsZWRnZUJhc2VDdXN0b21SZXNvdXJjZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9CZWRyb2NrS25vd2xlZGdlQmFzZUN1c3RvbVJlc291cmNlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIEFtYXpvbiBCZWRyb2NrIEtub3dsZWRnZSBCYXNlcyB0byBhY2Nlc3MgQW1hem9uIEJlZHJvY2sgbW9kZWxzIGFuZCBkYXRhIHNvdXJjZXMgaW4gU2FnZU1ha2VyIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja0tub3dsZWRnZUJhc2VTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9CZWRyb2NrS25vd2xlZGdlQmFzZVNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgYWNjZXNzIHRvIGFuIEFtYXpvbiBCZWRyb2NrIHByb21wdCBhbmQgaXRzIGNvbmZpZ3VyYXRpb24gaW4gU2FnZU1ha2VyIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvQmVkcm9ja1Byb21wdFVzZXJSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0JlZHJvY2tQcm9tcHRVc2VyUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGlzIHVzZWQgYnkgQW1hem9uIFNhZ2VNYWtlciBTdHVkaW8gdG8gY2F0YWxvZywgZGlzY292ZXIsIGdvdmVybiwgc2hhcmUsIGFuZCBhbmFseXplIGRhdGEgaW4gdGhlIEFtYXpvbiBTYWdlTWFrZXIgU3R1ZGlvIGRvbWFpbi4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvRG9tYWluRXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9Eb21haW5FeGVjdXRpb25Sb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogU2VydmljZSByb2xlIGZvciBkb21haW4gbGV2ZWwgYWN0aW9ucyBpbiB0aGUgcG9ydGFsIHRoYXQgYXJlIHBlcmZvcm1lZCBieSBBbWF6b24gU2FnZU1ha2VyIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvRG9tYWluU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvRG9tYWluU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gU2FnZU1ha2VyIFN0dWRpbyBjcmVhdGVzIElBTSByb2xlcyBmb3IgcHJvamVjdHMgdXNlcnMgdG8gcGVyZm9ybSBkYXRhIGFuYWx5dGljcywgYXJ0aWZpY2lhbCBpbnRlbGxpZ2VuY2UsIGFuZCBtYWNoaW5lIGxlYXJuaW5nIGFjdGlvbnMsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgdGhlc2Ugcm9sZXMgdG8gZGVmaW5lIHRoZSBwZXJtaXNzaW9ucyByZWxhdGVkIHRvIEVNUi4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvRU1SQ29udGFpbmVyc1N5c3RlbU5hbWVzcGFjZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvRU1SQ29udGFpbmVyc1N5c3RlbU5hbWVzcGFjZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBBbWF6b24gU2FnZU1ha2VyIFN0dWRpbyBjcmVhdGVzIElBTSByb2xlcyBmb3IgcHJvamVjdHMgdXNlcnMgdG8gcGVyZm9ybSBkYXRhIGFuYWx5dGljcywgYXJ0aWZpY2lhbCBpbnRlbGxpZ2VuY2UsIGFuZCBtYWNoaW5lIGxlYXJuaW5nIGFjdGlvbnMsIGFuZCB1c2VzIHRoaXMgcG9saWN5IHdoZW4gY3JlYXRpbmcgdGhlc2Ugcm9sZXMgdG8gZGVmaW5lIHRoZSBwZXJtaXNzaW9ucyByZWxhdGVkIHRvIEVNUi4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvRU1SSW5zdGFuY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb0VNUkluc3RhbmNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBTYWdlTWFrZXIgU3R1ZGlvIGNyZWF0ZXMgSUFNIHJvbGVzIGZvciBwcm9qZWN0cyB1c2VycyB0byBwZXJmb3JtIGRhdGEgYW5hbHl0aWNzLCBhcnRpZmljaWFsIGludGVsbGlnZW5jZSwgYW5kIG1hY2hpbmUgbGVhcm5pbmcgYWN0aW9ucywgYW5kIHVzZXMgdGhpcyBwb2xpY3kgd2hlbiBjcmVhdGluZyB0aGVzZSByb2xlcyB0byBkZWZpbmUgdGhlIHBlcm1pc3Npb25zIHJlbGF0ZWQgdG8gRU1SLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9FTVJTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9FTVJTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IHByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIEFtYXpvbiBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8gdmlhIHRoZSBBbWF6b24gU2FnZU1ha2VyIG1hbmFnZW1lbnQgY29uc29sZS4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9GdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFNhZ2VNYWtlciBTdHVkaW8gdXNlcyB0aGlzIHBvbGljeSB0byBwcm92aXNpb24gYW5kIG1hbmFnZSByZXNvdXJjZXMgaW4geW91ciBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9Qcm9qZWN0UHJvdmlzaW9uaW5nUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9Qcm9qZWN0UHJvdmlzaW9uaW5nUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBTYWdlTWFrZXIgU3R1ZGlvIGNyZWF0ZXMgSUFNIHJvbGVzIGZvciBwcm9qZWN0cyB1c2VycyB0byBwZXJmb3JtIGRhdGEgYW5hbHl0aWNzLCBhcnRpZmljaWFsIGludGVsbGlnZW5jZSwgYW5kIG1hY2hpbmUgbGVhcm5pbmcgYWN0aW9ucywgYW5kIHVzZXMgdGhpcyBwb2xpY3kgd2hlbiBjcmVhdGluZyB0aGVzZSByb2xlcyB0byBkZWZpbmUgdGhlIHBlcm1pc3Npb25zIHJlbGF0ZWQgdG8gU2FnZU1ha2VyLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9Qcm9qZWN0Um9sZU1hY2hpbmVMZWFybmluZ1BvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9Qcm9qZWN0Um9sZU1hY2hpbmVMZWFybmluZ1BvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBTYWdlTWFrZXIgY3JlYXRlcyBJQU0gcm9sZXMgZm9yIFByb2plY3RzIHVzZXJzIHRvIHBlcmZvcm0gZGF0YSBhbmFseXRpY3MsIGFydGlmaWNpYWwgaW50ZWxsaWdlbmNlLCBhbmQgbWFjaGluZSBsZWFybmluZyBhY3Rpb25zLCBhbmQgdXNlcyB0aGlzIHBvbGljeSB3aGVuIGNyZWF0aW5nIHRoZXNlIHJvbGVzIHRvIGRlZmluZSB0aGUgYm91bmRhcnkgb2YgdGhlaXIgcGVybWlzc2lvbnMuICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb1Byb2plY3RVc2VyUm9sZVBlcm1pc3Npb25zQm91bmRhcnkoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvUHJvamVjdFVzZXJSb2xlUGVybWlzc2lvbnNCb3VuZGFyeSk7XG4gICAgfVxuXG4gICAgLyoqIEFtYXpvbiBTYWdlTWFrZXIgU3R1ZGlvIGNyZWF0ZXMgSUFNIHJvbGVzIGZvciBwcm9qZWN0cyB1c2VycyB0byBwZXJmb3JtIGRhdGEgYW5hbHl0aWNzLCBhcnRpZmljaWFsIGludGVsbGlnZW5jZSwgYW5kIG1hY2hpbmUgbGVhcm5pbmcgYWN0aW9ucywgYW5kIHVzZXMgdGhpcyBwb2xpY3kgd2hlbiBjcmVhdGluZyB0aGVzZSByb2xlcyB0byBkZWZpbmUgdGhlIHBlcm1pc3Npb25zLiAqL1xuICAgIHB1YmxpYyBTYWdlTWFrZXJTdHVkaW9Qcm9qZWN0VXNlclJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvUHJvamVjdFVzZXJSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQW1hem9uIFNhZ2VNYWtlciBTdHVkaW8gdXNlcyB0aGlzIHBvbGljeSB3aGVuIHJ1bm5pbmcgcXVlcnkgZXhlY3V0aW9ucyBvbiBmZWRlcmF0ZWQgY29ubmVjdGlvbnMuICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb1F1ZXJ5RXhlY3V0aW9uUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TYWdlTWFrZXJTdHVkaW9RdWVyeUV4ZWN1dGlvblJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBpbmRpdmlkdWFsIHNldHVwIHByaXZpbGVnZXMgZm9yIEFtYXpvbiBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8gdmlhIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIGFuZCBTREsuIEFsbG93cyBsYXVuY2hpbmcgb2YgU2FnZU1ha2VyIFVuaWZpZWQgU3R1ZGlvIFBvcnRhbC4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvVXNlcklBTUNvbnNvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvVXNlcklBTUNvbnNvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBFeGVjdXRpb24gcG9saWN5IGZvciB1c2luZyBJQU0gcm9sZXMgd2l0aCBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8uIEFsbG93cyB1c2VycyB0byBhY2Nlc3MgcmVzb3VyY2VzIGluIHRoZSBsb2NhbCBhY2NvdW50IChleGNsdWRpbmcgYWNjZXNzIHRvIGRhdGEgcmVzb3VyY2VzKSBmb3IgSUFNLWJhc2VkIHVzYWdlIG9mIFNhZ2VNYWtlciBVbmlmaWVkIFN0dWRpby4gKi9cbiAgICBwdWJsaWMgU2FnZU1ha2VyU3R1ZGlvVXNlcklBTURlZmF1bHRFeGVjdXRpb25Qb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2FnZU1ha2VyU3R1ZGlvVXNlcklBTURlZmF1bHRFeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBFeGVjdXRpb24gcG9saWN5IGZvciB1c2luZyBJQU0gcm9sZXMgd2l0aCBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8uIEFsbG93cyB1c2VycyB0byBhY2Nlc3MgcmVzb3VyY2VzIGluIHlvdXIgYWNjb3VudCAoaW5jbHVkaW5nIGJyb2FkIGFjY2VzcyB0byBhbGwgQVBJcyBpbiBkYXRhIHNlcnZpY2VzIGxpa2UgUzMsIEdsdWUsIENsb3VkV2F0Y2ggTG9ncywgYW5kIG90aGVycykgZm9yIElBTS1iYXNlZCB1c2FnZSBvZiBTYWdlTWFrZXIgVW5pZmllZCBTdHVkaW8uICovXG4gICAgcHVibGljIFNhZ2VNYWtlclN0dWRpb1VzZXJJQU1QZXJtaXNzaXZlRXhlY3V0aW9uUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNhZ2VNYWtlclN0dWRpb1VzZXJJQU1QZXJtaXNzaXZlRXhlY3V0aW9uUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC93cml0ZSBhY2Nlc3MgdG8gQVdTIFNlY3JldHMgTWFuYWdlciB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuIE5vdGU6IHRoaXMgZXhsdWRlcyBJQU0gYWN0aW9ucywgc28gY29tYmluZSB3aXRoIElBTUZ1bGxBY2Nlc3MgaWYgcm90YXRpb24gY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZC4gKi9cbiAgICBwdWJsaWMgU2VjcmV0c01hbmFnZXJSZWFkV3JpdGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VjcmV0c01hbmFnZXJSZWFkV3JpdGUpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgYXV0aGVudGljYXRlZCB1c2VycyB0byBhY2Nlc3MgdGhlIFNlY3VyaXR5IEFnZW50IFdlYiBBcHBsaWNhdGlvbiBmb3IgY29uZmlndXJpbmcgYW5kIGV4ZWN1dGluZyBhdXRvbWF0ZWQgc2VjdXJpdHkgcGVuZXRyYXRpb24gdGVzdHMuIFRoaXMgcG9saWN5IGVuYWJsZXMgdXNlcnMgdG8gbWFuYWdlIHBlbnRlc3RzLCB2aWV3IGZpbmRpbmdzLCBtb25pdG9yIHRlc3QgZXhlY3V0aW9uLCBhbmQgaW50ZXJhY3Qgd2l0aCBBV1MgcmVzb3VyY2VzIHJlcXVpcmVkIGZvciBzZWN1cml0eSB0ZXN0aW5nIG9wZXJhdGlvbnMuICovXG4gICAgcHVibGljIFNlY3VyaXR5QWdlbnRXZWJBcHBBUElQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VjdXJpdHlBZ2VudFdlYkFwcEFQSVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciBhdXRoZW50aWNhdGVkIHVzZXJzIHRvIGFjY2VzcyB0aGUgU2VjdXJpdHkgQWdlbnQgV2ViIEFwcGxpY2F0aW9uIGZvciBjb25maWd1cmluZyBhbmQgZXhlY3V0aW5nIGF1dG9tYXRlZCBzZWN1cml0eSBwZW5ldHJhdGlvbiB0ZXN0cy4gVGhpcyBwb2xpY3kgZW5hYmxlcyB1c2VycyB0byBtYW5hZ2UgcGVudGVzdHMsIHZpZXcgZmluZGluZ3MsIG1vbml0b3IgdGVzdCBleGVjdXRpb24sIGFuZCBpbnRlcmFjdCB3aXRoIEFXUyByZXNvdXJjZXMgcmVxdWlyZWQgZm9yIHNlY3VyaXR5IHRlc3Rpbmcgb3BlcmF0aW9ucy4gKi9cbiAgICBwdWJsaWMgU2VjdXJpdHlBZ2VudFdlYkFwcFBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZWN1cml0eUFnZW50V2ViQXBwUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIHNlY3VyaXR5IGF1ZGl0IHRlbXBsYXRlIGdyYW50cyBhY2Nlc3MgdG8gcmVhZCBzZWN1cml0eSBjb25maWd1cmF0aW9uIG1ldGFkYXRhLiBJdCBpcyB1c2VmdWwgZm9yIHNvZnR3YXJlIHRoYXQgYXVkaXRzIHRoZSBjb25maWd1cmF0aW9uIG9mIGFuIEFXUyBhY2NvdW50LiAqL1xuICAgIHB1YmxpYyBTZWN1cml0eUF1ZGl0KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNlY3VyaXR5QXVkaXQpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gbWFuYWdlIHJlc291cmNlcyBjcmVhdGVkIGJ5IFNlY3VyaXR5IExha2UuICovXG4gICAgcHVibGljIFNlY3VyaXR5TGFrZVJlc291cmNlTWFuYWdlbWVudFNlcnZpY2VSb2xlUG9saWN5KCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNlY3VyaXR5TGFrZVJlc291cmNlTWFuYWdlbWVudFNlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogVGhpcyBwb2xpY3kgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIG9wZXJhdGUgdGhlIEFtYXpvbiBTZWN1cml0eSBMYWtlIHNlcnZpY2Ugb24geW91ciBiZWhhbGYgKi9cbiAgICBwdWJsaWMgU2VjdXJpdHlMYWtlU2VydmljZUxpbmtlZFJvbGUoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VjdXJpdHlMYWtlU2VydmljZUxpbmtlZFJvbGUpO1xuICAgIH1cblxuICAgIC8qKiBQZXJtaXNzaW9ucyB0byBhbGxvdyB0aGUgQVdTIFNlcnZlciBNaWdyYXRpb24gQ29ubmVjdG9yIHRvIG1pZ3JhdGUgVk1zIHRvIEVDMi4gQWxsb3dzIGNvbW11bmljYXRpb24gd2l0aCB0aGUgQVdTIFNlcnZlciBNaWdyYXRpb24gU2VydmljZSwgcmVhZC93cml0ZSBhY2Nlc3MgdG8gUzMgYnVja2V0cyBzdGFydGluZyB3aXRoICdzbXMtYi0nIGFuZCAnaW1wb3J0LXRvLWVjMi0nIGFzIHdlbGwgYXMgdGhlIGJ1Y2tldHMgdXNlZCBmb3IgQVdTIFNlcnZlciBNaWdyYXRpb24gQ29ubmVjdG9yIHVwZ3JhZGUsIEFXUyBTZXJ2ZXIgTWlncmF0aW9uIENvbm5lY3RvciByZWdpc3RyYXRpb24gd2l0aCBBV1MsIGFuZCBtZXRyaWNzIHVwbG9hZCB0byBBV1MuICovXG4gICAgcHVibGljIFNlcnZlck1pZ3JhdGlvbkNvbm5lY3RvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZXJ2ZXJNaWdyYXRpb25Db25uZWN0b3IpO1xuICAgIH1cblxuICAgIC8qKiBSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgYWxsIGZlYXR1cmVzIG9mIHRoZSBTZXJ2ZXIgTWlncmF0aW9uIFNlcnZpY2UgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBTZXJ2ZXJNaWdyYXRpb25TZXJ2aWNlQ29uc29sZUZ1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VydmVyTWlncmF0aW9uU2VydmljZUNvbnNvbGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUGVybWlzc2lvbnMgdG8gYWxsb3cgdGhlIEFXUyBTZXJ2ZXIgTWlncmF0aW9uIFNlcnZpY2UgdG8gY3JlYXRlIGFuZCB1cGRhdGUgcmVsZXZhbnQgQVdTIHJlc291cmNlcyBpbnRvIHRoZSBjdXN0b21lcidzIEFXUyBhY2NvdW50IGZvciBsYXVuY2hpbmcgbWlncmF0ZWQgc2VydmVycyBhbmQgYXBwbGljYXRpb25zLiAqL1xuICAgIHB1YmxpYyBTZXJ2ZXJNaWdyYXRpb25TZXJ2aWNlTGF1bmNoUm9sZSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZXJ2ZXJNaWdyYXRpb25TZXJ2aWNlTGF1bmNoUm9sZSk7XG4gICAgfVxuXG4gICAgLyoqIFBlcm1pc3Npb25zIHRvIGFsbG93IHRoZSBBV1MgU01TIHRvIHJ1biB1c2VkIGRhdGEgdmFsaWRhdGlvbiBzY3JpcHQgYW5kIHNlbmQgc2NyaXB0IHN1Y2Nlc3MvZmFpbHVyZSBiYWNrIHRvIFNNUyAqL1xuICAgIHB1YmxpYyBTZXJ2ZXJNaWdyYXRpb25TZXJ2aWNlUm9sZUZvckluc3RhbmNlVmFsaWRhdGlvbigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZXJ2ZXJNaWdyYXRpb25TZXJ2aWNlUm9sZUZvckluc3RhbmNlVmFsaWRhdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIFNlcnZpY2UgUXVvdGFzICovXG4gICAgcHVibGljIFNlcnZpY2VRdW90YXNGdWxsQWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlNlcnZpY2VRdW90YXNGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZCBvbmx5IGFjY2VzcyB0byBTZXJ2aWNlIFF1b3RhcyAqL1xuICAgIHB1YmxpYyBTZXJ2aWNlUXVvdGFzUmVhZE9ubHlBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2VydmljZVF1b3Rhc1JlYWRPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFNlcnZpY2UgUXVvdGFzIHRvIGNyZWF0ZSBzdXBwb3J0IGNhc2VzIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIFNlcnZpY2VRdW90YXNTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TZXJ2aWNlUXVvdGFzU2VydmljZVJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgcHJvZ3JhbW1hdGljIGFjY2VzcyB0byBBV1MgdGhyb3VnaCB0aGUgQVdTIFNpZ24taW4gc2VydmljZSwgaW5jbHVkaW5nIE9BdXRoMiB0b2tlbiBjcmVhdGlvbiBmb3IgZGV2ZWxvcGVyIHRvb2xzIGFuZCBhcHBsaWNhdGlvbnMuICovXG4gICAgcHVibGljIFNpZ25JbkxvY2FsRGV2ZWxvcG1lbnRBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2lnbkluTG9jYWxEZXZlbG9wbWVudEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGZ1bGwgYWNjZXNzIHRvIHRoZSBTaW1wbGUgV29ya2Zsb3cgY29uZmlndXJhdGlvbiBzZXJ2aWNlLiAqL1xuICAgIHB1YmxpYyBTaW1wbGVXb3JrZmxvd0Z1bGxBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU2ltcGxlV29ya2Zsb3dGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQWxsb3dzIFNNU1ZvaWNlIHRvIHB1Ymxpc2ggbWV0cmljcyB0byBDbG91ZFdhdGNoIG9uIHlvdXIgYmVoYWxmICovXG4gICAgcHVibGljIFNNU1ZvaWNlU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU01TVm9pY2VTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEFsbG93cyBzcGxpdCBjb3N0IGFsbG9jYXRpb24gZGF0YSB0byByZXRyaWV2ZSBBV1MgT3JnYW5pemF0aW9ucyBpbmZvcm1hdGlvbiwgaWYgYXBwbGljYWJsZSwgYW5kIGNvbGxlY3QgdGVsZW1ldHJ5IGRhdGEgZm9yIHRoZSBzcGxpdCBjb3N0IGFsbG9jYXRpb24gZGF0YSBzZXJ2aWNlcyB0aGF0IHRoZSBjdXN0b21lciBoYXMgb3B0ZWQgaW4gdG8uICovXG4gICAgcHVibGljIFNwbGl0Q29zdEFsbG9jYXRpb25EYXRhU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU3BsaXRDb3N0QWxsb2NhdGlvbkRhdGFTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIGFjY2VzcyByZXF1aXJlZCB0byB1bmxvY2sgYSBTUVMgcXVldWUgcG9saWN5IHVzaW5nIHRoZSBTZWN1cml0eSBUb2tlbiBTZXJ2aWNlIChTVFMpIEFzc3VtZVJvb3QgQVBJLiBVc2UgdGhpcyBtYW5hZ2VkIHBvbGljeSBvbmx5IHdpdGggdGhlIFNUUyBBc3N1bWVSb290IGFjdGlvbi4gKi9cbiAgICBwdWJsaWMgU1FTVW5sb2NrUXVldWVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU1FTVW5sb2NrUXVldWVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBwZXJtaXNzaW9ucyB0byBjaGVjayBRdWljayBTZXR1cCBjb25maWd1cmF0aW9uIGhlYWx0aCwgZW5zdXJlIGNvbnNpc3RlbnQgdXNlIG9mIHBhcmFtZXRlcnMgYW5kIHByb3Zpc2lvbmVkIHJlc291cmNlcywgYW5kIHJlbWVkaWF0ZSByZXNvdXJjZXMgd2hlbiBkcmlmdCBpcyBkZXRlY3RlZC4gKi9cbiAgICBwdWJsaWMgU1NNUXVpY2tTZXR1cFJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuU1NNUXVpY2tTZXR1cFJvbGVQb2xpY3kpO1xuICAgIH1cblxuICAgIC8qKiBUaGlzIHBvbGljeSBncmFudHMgcGVybWlzc2lvbnMgdG8gdHJvdWJsZXNob290IGFuZCByZXNvbHZlIGlzc3VlcyBpbiBhbiBBV1MgYWNjb3VudC4gVGhpcyBwb2xpY3kgYWxzbyBlbmFibGVzIHRoZSB1c2VyIHRvIGNvbnRhY3QgQVdTIHN1cHBvcnQgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgY2FzZXMuICovXG4gICAgcHVibGljIFN1cHBvcnRVc2VyKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlN1cHBvcnRVc2VyKTtcbiAgICB9XG5cbiAgICAvKiogR3JhbnRzIGZ1bGwgYWNjZXNzIHBlcm1pc3Npb25zIG5lY2Vzc2FyeSBmb3IgcmVzb3VyY2VzIHJlcXVpcmVkIGZvciBhcHBsaWNhdGlvbiBhbmQgZGV2ZWxvcG1lbnQgb3BlcmF0aW9ucy4gKi9cbiAgICBwdWJsaWMgU3lzdGVtQWRtaW5pc3RyYXRvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5TeXN0ZW1BZG1pbmlzdHJhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgZnVsbCBhY2Nlc3MgdG8gQW1hem9uIFRyYW5zbGF0ZS4gKi9cbiAgICBwdWJsaWMgVHJhbnNsYXRlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5UcmFuc2xhdGVGdWxsQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogUHJvdmlkZXMgcmVhZC1vbmx5IGFjY2VzcyB0byBBbWF6b24gVHJhbnNsYXRlLiAqL1xuICAgIHB1YmxpYyBUcmFuc2xhdGVSZWFkT25seSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5UcmFuc2xhdGVSZWFkT25seSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGdyYW50cyBwZXJtaXNzaW9ucyB0byB2aWV3IHJlc291cmNlcyBhbmQgYmFzaWMgbWV0YWRhdGEgYWNyb3NzIGFsbCBBV1Mgc2VydmljZXMuICovXG4gICAgcHVibGljIFZpZXdPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLlZpZXdPbmx5QWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRGVmYXVsdCBwb2xpY3kgZm9yIHRoZSBWTSBJbXBvcnQvRXhwb3J0IHNlcnZpY2Ugcm9sZSwgZm9yIGN1c3RvbWVycyB1c2luZyB0aGUgQVdTIENvbm5lY3Rvci4gVGhlIFZNIEltcG9ydC9FeHBvcnQgc2VydmljZSBhc3N1bWVzIGEgcm9sZSB3aXRoIHRoaXMgcG9saWN5IHRvIGZ1bGZpbGwgdmlydHVhbCBtYWNoaW5lIG1pZ3JhdGlvbiByZXF1ZXN0cyBmcm9tIHRoZSBBV1MgQ29ubmVjdG9yIHZpcnR1YWwgYXBwbGlhbmNlLiAoTm90ZSB0aGF0IHRoZSBBV1MgQ29ubmVjdG9yIHVzZXMgdGhlIFwiQVdTQ29ubmVjdG9yXCIgbWFuYWdlZCBwb2xpY3kgdG8gaXNzdWUgcmVxdWVzdHMgb24gdGhlIGN1c3RvbWVyJ3MgYmVoYWxmIHRvIHRoZSBWTSBJbXBvcnQvRXhwb3J0IHNlcnZpY2UuKSBQcm92aWRlcyB0aGUgYWJpbGl0eSB0byBjcmVhdGUgQU1JcyBhbmQgRUJTIHNuYXBzaG90cywgbW9kaWZ5IEVCUyBzbmFwc2hvdCBhdHRyaWJ1dGVzLCBtYWtlIFwiRGVzY3JpYmUqXCIgY2FsbHMgb24gRUMyIG9iamVjdHMsIGFuZCByZWFkIGZyb20gUzMgYnVja2V0cyBzdGFydGluZyB3aXRoICdpbXBvcnQtdG8tZWMyLScuICovXG4gICAgcHVibGljIFZNSW1wb3J0RXhwb3J0Um9sZUZvckFXU0Nvbm5lY3RvcigpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5WTUltcG9ydEV4cG9ydFJvbGVGb3JBV1NDb25uZWN0b3IpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBbWF6b24gVlBDIExhdHRpY2UgYW5kIGFjY2VzcyB0byBkZXBlbmRlbmN5IHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBWUENMYXR0aWNlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5WUENMYXR0aWNlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQW1hem9uIFZQQyBMYXR0aWNlIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSwgYW5kIGxpbWl0ZWQgYWNjZXNzIHRvIGRlcGVuZGVuY3kgc2VydmljZXMuICovXG4gICAgcHVibGljIFZQQ0xhdHRpY2VSZWFkT25seUFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5WUENMYXR0aWNlUmVhZE9ubHlBY2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBhY2Nlc3MgdG8gaW52b2tpbmcgQW1hem9uIFZQQyBMYXR0aWNlIHNlcnZpY2VzLiAqL1xuICAgIHB1YmxpYyBWUENMYXR0aWNlU2VydmljZXNJbnZva2VBY2Nlc3MoKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuVlBDTGF0dGljZVNlcnZpY2VzSW52b2tlQWNjZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRpbmcgU0xSIHRvIHdyaXRlIGN1c3RvbWVyJ3MgbG9ncyB0byBhIGZpcmVob3NlIHN0cmVhbSAqL1xuICAgIHB1YmxpYyBXQUZMb2dnaW5nU2VydmljZVJvbGVQb2xpY3koKTogYXdzX2lhbS5JTWFuYWdlZFBvbGljeSB7XG4gICAgICAgIHJldHVybiBhd3NfaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKEF3c01hbmFnZWRQb2xpY3lTdGF0aWMuV0FGTG9nZ2luZ1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG5cbiAgICAvKiogQ3JlYXRpbmcgU0xSIHRvIHdyaXRlIGN1c3RvbWVyJ3MgbG9ncyB0byBhIGZpcmVob3NlIHN0cmVhbSAqL1xuICAgIHB1YmxpYyBXQUZSZWdpb25hbExvZ2dpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5XQUZSZWdpb25hbExvZ2dpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIFRoaXMgcG9saWN5IGNyZWF0ZXMgYSBzZXJ2aWNlLWxpbmtlZCByb2xlIHRoYXQgYWxsb3dzIEFXUyBXQUYgdG8gd3JpdGUgbG9ncyB0byBBbWF6b24gS2luZXNpcyBEYXRhIEZpcmVob3NlLiAqL1xuICAgIHB1YmxpYyBXQUZWMkxvZ2dpbmdTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5XQUZWMkxvZ2dpbmdTZXJ2aWNlUm9sZVBvbGljeSk7XG4gICAgfVxuXG4gICAgLyoqIEdyYW50cyB0aGUgQVdTIFdlbGwtQXJjaGl0ZWN0ZWQgQWdlbnQgcmVhZC1vbmx5IGFjY2VzcyB0byBBV1MgcmVzb3VyY2UgY29uZmlndXJhdGlvbnMsIHNlY3VyaXR5IHNldHRpbmdzLCBhbmQgb3BlcmF0aW9uYWwgZGF0YSB0byBnZW5lcmF0ZSBvcHRpbWl6YXRpb24gcmVjb21tZW5kYXRpb25zICovXG4gICAgcHVibGljIFdlbGxBcmNoaXRlY3RlZEFnZW50UmVzb3VyY2VTY2FubmluZygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5XZWxsQXJjaGl0ZWN0ZWRBZ2VudFJlc291cmNlU2Nhbm5pbmcpO1xuICAgIH1cblxuICAgIC8qKiBQcm92aWRlcyBmdWxsIGFjY2VzcyB0byBBV1MgV2VsbC1BcmNoaXRlY3RlZCBUb29sIHZpYSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSAqL1xuICAgIHB1YmxpYyBXZWxsQXJjaGl0ZWN0ZWRDb25zb2xlRnVsbEFjY2VzcygpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5XZWxsQXJjaGl0ZWN0ZWRDb25zb2xlRnVsbEFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIFByb3ZpZGVzIHJlYWQtb25seSBhY2Nlc3MgdG8gQVdTIFdlbGwtQXJjaGl0ZWN0ZWQgVG9vbCB2aWEgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgKi9cbiAgICBwdWJsaWMgV2VsbEFyY2hpdGVjdGVkQ29uc29sZVJlYWRPbmx5QWNjZXNzKCk6IGF3c19pYW0uSU1hbmFnZWRQb2xpY3kge1xuICAgICAgICByZXR1cm4gYXdzX2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShBd3NNYW5hZ2VkUG9saWN5U3RhdGljLldlbGxBcmNoaXRlY3RlZENvbnNvbGVSZWFkT25seUFjY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEVuYWJsZXMgYWNjZXNzIHRvIEFXUyBTZXJ2aWNlcyBhbmQgUmVzb3VyY2VzIHVzZWQgb3IgbWFuYWdlZCBieSBBbWF6b24gV29ya0xpbmsgKi9cbiAgICBwdWJsaWMgV29ya0xpbmtTZXJ2aWNlUm9sZVBvbGljeSgpOiBhd3NfaWFtLklNYW5hZ2VkUG9saWN5IHtcbiAgICAgICAgcmV0dXJuIGF3c19pYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoQXdzTWFuYWdlZFBvbGljeVN0YXRpYy5Xb3JrTGlua1NlcnZpY2VSb2xlUG9saWN5KTtcbiAgICB9XG59XG4iXX0=
|